<?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>89039</bug_id>
          
          <creation_ts>2012-06-13 14:58:45 -0700</creation_ts>
          <short_desc>Update ANGLE in WebKit</short_desc>
          <delta_ts>2012-07-18 09:45:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Max Vujovic">mvujovic</reporter>
          <assigned_to name="Max Vujovic">mvujovic</assigned_to>
          <cc>abarth</cc>
    
    <cc>achicu</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>galpeter</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jnetterfield</cc>
    
    <cc>kbr</cc>
    
    <cc>kkristof</cc>
    
    <cc>mrowe</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>tomeu</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>648490</commentid>
    <comment_count>0</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-13 14:58:45 -0700</bug_when>
    <thetext>For CSS Shaders, we need some new features in ANGLE. ANGLE is currently r1009 in WebKit (last updated in bug 81717). Let&apos;s update it to r1147.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649316</commentid>
    <comment_count>1</comment_count>
      <attachid>147620</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-14 11:14:33 -0700</bug_when>
    <thetext>Created attachment 147620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649332</commentid>
    <comment_count>2</comment_count>
      <attachid>147620</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-14 11:27:47 -0700</bug_when>
    <thetext>Comment on attachment 147620
Patch

Attachment 147620 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12961268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649361</commentid>
    <comment_count>3</comment_count>
      <attachid>147620</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-14 12:10:33 -0700</bug_when>
    <thetext>Comment on attachment 147620
Patch

Attachment 147620 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12961278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649398</commentid>
    <comment_count>4</comment_count>
      <attachid>147620</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-14 12:57:40 -0700</bug_when>
    <thetext>Comment on attachment 147620
Patch

Attachment 147620 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12957421</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650283</commentid>
    <comment_count>5</comment_count>
      <attachid>147843</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-15 10:05:02 -0700</bug_when>
    <thetext>Created attachment 147843
Patch

Running EWS again. Trying to fix warnings on GTK EWS from new ANGLE source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650304</commentid>
    <comment_count>6</comment_count>
      <attachid>147843</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 10:23:47 -0700</bug_when>
    <thetext>Comment on attachment 147843
Patch

Attachment 147843 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12965531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650319</commentid>
    <comment_count>7</comment_count>
      <attachid>147843</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 10:40:51 -0700</bug_when>
    <thetext>Comment on attachment 147843
Patch

Attachment 147843 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12952974</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650340</commentid>
    <comment_count>8</comment_count>
      <attachid>147858</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-15 11:00:52 -0700</bug_when>
    <thetext>Created attachment 147858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650363</commentid>
    <comment_count>9</comment_count>
      <attachid>147858</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 11:31:55 -0700</bug_when>
    <thetext>Comment on attachment 147858
Patch

Attachment 147858 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12959681</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650368</commentid>
    <comment_count>10</comment_count>
      <attachid>147858</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 11:35:48 -0700</bug_when>
    <thetext>Comment on attachment 147858
Patch

Attachment 147858 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12970014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650403</commentid>
    <comment_count>11</comment_count>
      <attachid>147858</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 12:33:11 -0700</bug_when>
    <thetext>Comment on attachment 147858
Patch

Attachment 147858 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12959698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650669</commentid>
    <comment_count>12</comment_count>
      <attachid>147931</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-15 18:16:49 -0700</bug_when>
    <thetext>Created attachment 147931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650674</commentid>
    <comment_count>13</comment_count>
      <attachid>147931</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 18:29:11 -0700</bug_when>
    <thetext>Comment on attachment 147931
Patch

Attachment 147931 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12965645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650676</commentid>
    <comment_count>14</comment_count>
      <attachid>147931</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 18:30:45 -0700</bug_when>
    <thetext>Comment on attachment 147931
Patch

Attachment 147931 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12970097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650677</commentid>
    <comment_count>15</comment_count>
      <attachid>147934</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-15 18:43:27 -0700</bug_when>
    <thetext>Created attachment 147934
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650683</commentid>
    <comment_count>16</comment_count>
      <attachid>147934</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 18:54:35 -0700</bug_when>
    <thetext>Comment on attachment 147934
Patch

Attachment 147934 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12970102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650684</commentid>
    <comment_count>17</comment_count>
      <attachid>147934</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 18:55:57 -0700</bug_when>
    <thetext>Comment on attachment 147934
Patch

Attachment 147934 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12959775</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650685</commentid>
    <comment_count>18</comment_count>
      <attachid>147934</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-15 18:57:02 -0700</bug_when>
    <thetext>Comment on attachment 147934
Patch

Attachment 147934 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12956868</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650822</commentid>
    <comment_count>19</comment_count>
      <attachid>147977</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-16 11:14:32 -0700</bug_when>
    <thetext>Created attachment 147977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650823</commentid>
    <comment_count>20</comment_count>
      <attachid>147977</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-16 11:33:07 -0700</bug_when>
    <thetext>Comment on attachment 147977
Patch

Attachment 147977 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12964827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650824</commentid>
    <comment_count>21</comment_count>
      <attachid>147977</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-16 11:37:20 -0700</bug_when>
    <thetext>Comment on attachment 147977
Patch

Attachment 147977 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12970262</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650836</commentid>
    <comment_count>22</comment_count>
      <attachid>147977</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-16 12:32:32 -0700</bug_when>
    <thetext>Comment on attachment 147977
Patch

Attachment 147977 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12965785</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652648</commentid>
    <comment_count>23</comment_count>
      <attachid>148375</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-19 11:38:14 -0700</bug_when>
    <thetext>Created attachment 148375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652697</commentid>
    <comment_count>24</comment_count>
      <attachid>148375</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-19 12:49:58 -0700</bug_when>
    <thetext>Comment on attachment 148375
Patch

Attachment 148375 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12972874</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652732</commentid>
    <comment_count>25</comment_count>
      <attachid>148375</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-19 13:27:45 -0700</bug_when>
    <thetext>Comment on attachment 148375
Patch

Attachment 148375 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12988176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652821</commentid>
    <comment_count>26</comment_count>
      <attachid>148426</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-19 14:31:29 -0700</bug_when>
    <thetext>Created attachment 148426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653667</commentid>
    <comment_count>27</comment_count>
      <attachid>148608</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-20 11:12:38 -0700</bug_when>
    <thetext>Created attachment 148608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659268</commentid>
    <comment_count>28</comment_count>
      <attachid>149888</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-27 23:53:04 -0700</bug_when>
    <thetext>Created attachment 149888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659286</commentid>
    <comment_count>29</comment_count>
      <attachid>149888</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-28 00:17:47 -0700</bug_when>
    <thetext>Comment on attachment 149888
Patch

Attachment 149888 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13107074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659293</commentid>
    <comment_count>30</comment_count>
      <attachid>149894</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 00:28:00 -0700</bug_when>
    <thetext>Created attachment 149894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659306</commentid>
    <comment_count>31</comment_count>
      <attachid>149894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-28 00:49:00 -0700</bug_when>
    <thetext>Comment on attachment 149894
Patch

Attachment 149894 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13100965</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659309</commentid>
    <comment_count>32</comment_count>
      <attachid>149894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-28 00:56:07 -0700</bug_when>
    <thetext>Comment on attachment 149894
Patch

Attachment 149894 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13099946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659336</commentid>
    <comment_count>33</comment_count>
      <attachid>149894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-28 01:45:49 -0700</bug_when>
    <thetext>Comment on attachment 149894
Patch

Attachment 149894 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13101987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659634</commentid>
    <comment_count>34</comment_count>
      <attachid>149975</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 11:15:32 -0700</bug_when>
    <thetext>Created attachment 149975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659692</commentid>
    <comment_count>35</comment_count>
      <attachid>149975</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-28 12:26:09 -0700</bug_when>
    <thetext>Comment on attachment 149975
Patch

Attachment 149975 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13110126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659758</commentid>
    <comment_count>36</comment_count>
      <attachid>149996</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 13:34:31 -0700</bug_when>
    <thetext>Created attachment 149996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659780</commentid>
    <comment_count>37</comment_count>
      <attachid>149996</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-28 13:49:32 -0700</bug_when>
    <thetext>Comment on attachment 149996
Patch

Attachment 149996 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13107209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659785</commentid>
    <comment_count>38</comment_count>
      <attachid>150006</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 13:54:10 -0700</bug_when>
    <thetext>Created attachment 150006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659864</commentid>
    <comment_count>39</comment_count>
      <attachid>150022</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 15:07:45 -0700</bug_when>
    <thetext>Created attachment 150022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659905</commentid>
    <comment_count>40</comment_count>
      <attachid>150022</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-06-28 15:56:45 -0700</bug_when>
    <thetext>Comment on attachment 150022
Patch

This patch is ready for review.

I&apos;m updating ANGLE to r1170.

When trying to update to ANGLE r1147, I was getting build warnings on the QT and GTK bots. I fixed the warnings and pushed the fixes to ANGLE in r1170.

However, between r1147 and r1170, ANGLE enabled its new preprocessor. This caused a new build issue on QT, which I fixed in this patch by renaming two files. 

To avoid chasing a moving target, I plan on fixing this issue in ANGLE after this patch. The issue and fix is described the ChangeLog, pasted below:

&quot;&quot;&quot;
Update ANGLE to r1170, with the following modifications:

Rename ANGLE/src/compiler/preprocessor/new/Diagnostic.cpp to DiagnosticBase.cpp.
Rename ANGLE/src/compiler/preprocessor/new/DirectiveHandler.cpp to DirectiveHandlerBase.cpp.

With the introduction of ANGLE&apos;s new preprocessor, there were two files named Diagnostic.cpp in ANGLE under different folders. This caused problems on the QT build when their object files, both named Diagnostic.o, tried to go in the same folder. Renaming one of them to DirectiveHandlerBase.cpp avoids this conflict. The same situation occurred with DirectiveHandler.cpp. I will try to get their names changed in ANGLE for future updates.
&quot;&quot;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661177</commentid>
    <comment_count>41</comment_count>
      <attachid>150022</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-07-01 15:58:14 -0700</bug_when>
    <thetext>Comment on attachment 150022
Patch

rs=me. I remember when I did this I had to be careful choosing the version of Bison that processed the OS X port, but since the mac EWS is ok I&apos;m crossing my fingers here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661196</commentid>
    <comment_count>42</comment_count>
      <attachid>150022</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-01 16:50:34 -0700</bug_when>
    <thetext>Comment on attachment 150022
Patch

Rejecting attachment 150022 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t/git/webkit-commit-queue/Source/WebKit/chromium/v8 --revision 11947 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
47&gt;At revision 11947.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13130003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661263</commentid>
    <comment_count>43</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-01 23:03:49 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 150022 [details])
&gt; rs=me. I remember when I did this I had to be careful choosing the version of Bison that processed the OS X port, but since the mac EWS is ok I&apos;m crossing my fingers here.

Thanks, Dean! You used Bison 2.3 last time. I&apos;m using Bison 2.4.2 this time. I haven&apos;t had any build or test issues yet.

However, it looks like the review bot didn&apos;t like the tabs in two new Bison generated files. I&apos;ll fix that up next week, and watch the build bots then. (I&apos;m traveling with limited internet access this week).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665898</commentid>
    <comment_count>44</comment_count>
      <attachid>151493</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-10 11:17:30 -0700</bug_when>
    <thetext>Created attachment 151493
Patch

In this new patch, I resolved a conflict from bug 90506 in WebCore/Target.pri. Let&apos;s run the bots again and make sure it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666030</commentid>
    <comment_count>45</comment_count>
      <attachid>151520</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-10 13:55:38 -0700</bug_when>
    <thetext>Created attachment 151520
Patch

To pass the commit-queue, created an svn patch with the allow-tabs property set on the new files in the preprocessor/new folder. This property is already set on the existing files in ANGLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666105</commentid>
    <comment_count>46</comment_count>
      <attachid>151538</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-10 15:33:38 -0700</bug_when>
    <thetext>Created attachment 151538
Patch

Updated the ChangeLog date and Reviewed By in the patch for the commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666107</commentid>
    <comment_count>47</comment_count>
      <attachid>151538</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-07-10 15:37:39 -0700</bug_when>
    <thetext>Comment on attachment 151538
Patch

Setting the cq+ flag, as the patch was just rebased since it was reviewed last time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666126</commentid>
    <comment_count>48</comment_count>
      <attachid>151538</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-10 15:57:38 -0700</bug_when>
    <thetext>Comment on attachment 151538
Patch

This contains code generated by Bison that is licensed under GPL v3. Please generate it with a version of Bison that uses a license that the WebKit project is ok with (e.g., Bison v2.3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666127</commentid>
    <comment_count>49</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-10 16:05:24 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 151538 [details])
&gt; This contains code generated by Bison that is licensed under GPL v3. Please generate it with a version of Bison that uses a license that the WebKit project is ok with (e.g., Bison v2.3).

Sorry about that- didn&apos;t know about the licensing issue. ANGLE uses Bison 2.4.2 nowadays. I&apos;ll try to change this patch to use Bison 2.3 like before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666858</commentid>
    <comment_count>50</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-11 10:36:17 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; (From update of attachment 151538 [details] [details])
&gt; &gt; This contains code generated by Bison that is licensed under GPL v3. Please generate it with a version of Bison that uses a license that the WebKit project is ok with (e.g., Bison v2.3).
&gt; 
&gt; Sorry about that- didn&apos;t know about the licensing issue. ANGLE uses Bison 2.4.2 nowadays. I&apos;ll try to change this patch to use Bison 2.3 like before.

Hi Mark,

I found out that the license on the Bison 2.4.2 generated files isn&apos;t actually GPL v3. It&apos;s GPL v3 with the Bison exception. The exception means that you can use Bison under the license of your choice as long as you aren&apos;t using it to make a parser generator. This means the Bison generated code in this patch can be GPL v2. Ken Russell pointed this out to me.

Here&apos;s the Bison exception, lifted from the License in the ExpressionParser.cpp, which was generated with Bison 2.4.2:
&quot;&quot;&quot;
/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn&apos;t itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.
   
   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */
&quot;&quot;&quot;

If that&apos;s ok with you, could you revert the r-?

Thank you,
Max</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666883</commentid>
    <comment_count>51</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-11 11:06:33 -0700</bug_when>
    <thetext>It&apos;s still not ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666903</commentid>
    <comment_count>52</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-07-11 11:26:53 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; It&apos;s still not ok.

Mark, could you please describe more clearly why not? The code in question is *not* being licensed under GPLv3 -- it is being licensed under the WebKit project&apos;s terms, per the Bison exception clause.

In parallel, we&apos;ll look into using the older Bison directive for making a reentrant parser -- but I think it would be a mistake to artificially limit the version of Bison that can be used within WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666911</commentid>
    <comment_count>53</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-11 11:40:11 -0700</bug_when>
    <thetext>Let me start off by pointing out that I&apos;m not a lawyer, and the reason for my objecting so strongly comes from having no desire to discuss this with lawyers when it&apos;s so trivial to avoid having a need to do so.  That said, the file quite clearly states at the top of it:

   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

The fact that there is an exception allowing distribution under terms of our choice doesn&apos;t change this fact. 

On an unrelated note, it&apos;s not obvious to me why these generated files are checked in rather than being generated during the build process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666921</commentid>
    <comment_count>54</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-07-11 11:49:12 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Let me start off by pointing out that I&apos;m not a lawyer, and the reason for my objecting so strongly comes from having no desire to discuss this with lawyers when it&apos;s so trivial to avoid having a need to do so.  That said, the file quite clearly states at the top of it:
&gt; 
&gt;    This program is free software: you can redistribute it and/or modify
&gt;     it under the terms of the GNU General Public License as published by
&gt;    the Free Software Foundation, either version 3 of the License, or
&gt;    (at your option) any later version.
&gt; 
&gt; The fact that there is an exception allowing distribution under terms of our choice doesn&apos;t change this fact. 

I&apos;m not a lawyer either, and hate to point this out, but the current sources say the same thing, only with GPL v2 instead of v3. To the best of my knowledge the WebKit project is currently relying on the exception clause.

&gt; On an unrelated note, it&apos;s not obvious to me why these generated files are checked in rather than being generated during the build process.

It makes things easier for developers consuming the ANGLE sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666930</commentid>
    <comment_count>55</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-11 11:58:50 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; Let me start off by pointing out that I&apos;m not a lawyer, and the reason for my objecting so strongly comes from having no desire to discuss this with lawyers when it&apos;s so trivial to avoid having a need to do so.  That said, the file quite clearly states at the top of it:
&gt; &gt; 
&gt; &gt;    This program is free software: you can redistribute it and/or modify
&gt; &gt;     it under the terms of the GNU General Public License as published by
&gt; &gt;    the Free Software Foundation, either version 3 of the License, or
&gt; &gt;    (at your option) any later version.
&gt; &gt; 
&gt; &gt; The fact that there is an exception allowing distribution under terms of our choice doesn&apos;t change this fact. 
&gt; 
&gt; I&apos;m not a lawyer either, and hate to point this out, but the current sources say the same thing, only with GPL v2 instead of v3. To the best of my knowledge the WebKit project is currently relying on the exception clause.

That&apos;s fine. It&apos;s version three of the GPL that we want nothing to do with.

&gt; 
&gt; &gt; On an unrelated note, it&apos;s not obvious to me why these generated files are checked in rather than being generated during the build process.
&gt; 
&gt; It makes things easier for developers consuming the ANGLE sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667601</commentid>
    <comment_count>56</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-07-12 04:03:25 -0700</bug_when>
    <thetext>(In reply to comment #54)

&gt; &gt; On an unrelated note, it&apos;s not obvious to me why these generated files are checked in rather than being generated during the build process.
&gt; 
&gt; It makes things easier for developers consuming the ANGLE sources.

Outside of the resolution here, I think we should look into this. We use bison to process other grammars in the build process. I&apos;m not sure ANGLE is that much more difficult.

The most annoying part will be setting this up for all builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667850</commentid>
    <comment_count>57</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-12 09:19:34 -0700</bug_when>
    <thetext>&gt; Source/ThirdParty/ANGLE/src/compiler/osinclude.h:-20
&gt; -      defined(__GLIBC__) || defined(__GNU__) || defined(__QNX__)

QNX systems are POSIX. I&apos;ll submit a bug to ANGLE, but in the meantime could you continue to recognize QNX as POSIX?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667888</commentid>
    <comment_count>58</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-12 09:50:24 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #54)
&gt; 
&gt; &gt; &gt; On an unrelated note, it&apos;s not obvious to me why these generated files are checked in rather than being generated during the build process.
&gt; &gt; 
&gt; &gt; It makes things easier for developers consuming the ANGLE sources.
&gt; 
&gt; Outside of the resolution here, I think we should look into this. We use bison to process other grammars in the build process. I&apos;m not sure ANGLE is that much more difficult.
&gt; 
&gt; The most annoying part will be setting this up for all builds.

It would be nice to use Bison and Flex in the WebKit ANGLE build.

I&apos;ve made the following umbrella bug:
Bug 91105 - [ANGLE] Use Bison and Flex during ANGLE build

And child bugs for each platform using ANGLE:
Bug 91107 - [ANGLE] On Mac, use Bison and Flex during ANGLE build
Bug 91108 - [ANGLE] On QT, use Bison and Flex during ANGLE build
Bug 91109 - [ANGLE] On GTK, use Bison and Flex during ANGLE build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667889</commentid>
    <comment_count>59</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-12 09:51:42 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; &gt; Source/ThirdParty/ANGLE/src/compiler/osinclude.h:-20
&gt; &gt; -      defined(__GLIBC__) || defined(__GNU__) || defined(__QNX__)
&gt; 
&gt; QNX systems are POSIX. I&apos;ll submit a bug to ANGLE, but in the meantime could you continue to recognize QNX as POSIX?

Sure, I can do that. Thank you for filing the bug on ANGLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670527</commentid>
    <comment_count>60</comment_count>
      <attachid>152576</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-16 11:48:47 -0700</bug_when>
    <thetext>Created attachment 152576
Patch

I&apos;ve uploaded a new patch with the following changes:

(1) Use Bison 2.3 instead of Bison 2.4.2 to generate ExpressionParser.cpp and glslang_tab.cpp. I had to modify ExpressionParser.y to make it compatible with Bison 2.3. The changes have been contributed back to ANGLE in r1224.

(2) Continue to recognize QNX as POSIX in ANGLE. This has been contributed back to ANGLE in r1223.

These changes are also noted in the ChangeLog entries.

Mark, does this work for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670536</commentid>
    <comment_count>61</comment_count>
      <attachid>152576</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-07-16 12:00:14 -0700</bug_when>
    <thetext>Comment on attachment 152576
Patch

Thanks for making those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670539</commentid>
    <comment_count>62</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-16 12:05:06 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 152576 [details])
&gt; Thanks for making those changes.

No problem. Thanks for the review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670564</commentid>
    <comment_count>63</comment_count>
      <attachid>152576</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 12:33:23 -0700</bug_when>
    <thetext>Comment on attachment 152576
Patch

Attachment 152576 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13245973</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670571</commentid>
    <comment_count>64</comment_count>
      <attachid>152576</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 12:42:50 -0700</bug_when>
    <thetext>Comment on attachment 152576
Patch

Attachment 152576 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13262067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670609</commentid>
    <comment_count>65</comment_count>
      <attachid>152576</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 13:26:24 -0700</bug_when>
    <thetext>Comment on attachment 152576
Patch

Attachment 152576 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13256224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670622</commentid>
    <comment_count>66</comment_count>
      <attachid>152576</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 13:38:48 -0700</bug_when>
    <thetext>Comment on attachment 152576
Patch

Attachment 152576 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13255224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670713</commentid>
    <comment_count>67</comment_count>
      <attachid>152623</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-16 15:21:07 -0700</bug_when>
    <thetext>Created attachment 152623
Patch

Patch to fix the QT EWS failure.

QT EWS fails on the Bison 2.3 generated files because two macros aren&apos;t defined on QT: YYENABLE_NLS and YYLTYPE_IS_TRIVIAL.

In CSSGrammar.y, we fix this Bison 2.3 issue by adding the lines:
#define YYENABLE_NLS 0
#define YYLTYPE_IS_TRIVIAL 1

I&apos;ve added the same lines to ANGLE&apos;s grammar files (glslang.y and ExpressionParser.y) and ran Bison 2.3 again.

I&apos;ll work on contributing this fix back to ANGLE.

As a side note, Bison 2.4.2 fixes this issue by first checking if these macros are defined and then checking their value. Here&apos;s the original patch to Bison: http://lists.gnu.org/archive/html/grub-devel/2010-01/msg00340.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671384</commentid>
    <comment_count>68</comment_count>
      <attachid>152784</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-17 10:48:48 -0700</bug_when>
    <thetext>Created attachment 152784
Patch

Added Dean and Mark as the reviewers in the ChangeLog for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671403</commentid>
    <comment_count>69</comment_count>
      <attachid>152784</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-07-17 11:03:21 -0700</bug_when>
    <thetext>Comment on attachment 152784
Patch

Trying the CQ again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671467</commentid>
    <comment_count>70</comment_count>
      <attachid>152784</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 12:01:32 -0700</bug_when>
    <thetext>Comment on attachment 152784
Patch

Rejecting attachment 152784 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
queue/Source/WebKit/chromium/third_party/skia/include --revision 4600 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
44&gt;At revision 4600.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13278214</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671482</commentid>
    <comment_count>71</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-17 12:07:03 -0700</bug_when>
    <thetext>    The following files contain tab characters:

        trunk/Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/ExpressionParser.cpp
        trunk/Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Tokenizer.cpp

    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
 at /usr/lib/git-core/git-svn line 570</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671488</commentid>
    <comment_count>72</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-17 12:14:18 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt;     The following files contain tab characters:
&gt; 
&gt;         trunk/Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/ExpressionParser.cpp
&gt;         trunk/Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/Tokenizer.cpp
&gt; 
&gt;     Please use spaces instead to indent.
&gt;     If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
&gt;  at /usr/lib/git-core/git-svn line 570

That&apos;s strange because I already set &quot;allow-tabs&quot; on those files in the patch. I&apos;ll investigate further. Thanks, Adam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671528</commentid>
    <comment_count>73</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-07-17 13:21:16 -0700</bug_when>
    <thetext>svn-apply was ignoring the propsets for allow-tabs inside the patch, so I landed it manually on behalf of Max.

Manually committed r122870: http://trac.webkit.org/changeset/122870</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671752</commentid>
    <comment_count>74</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-07-17 16:51:50 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; svn-apply was ignoring the propsets for allow-tabs inside the patch, so I landed it manually on behalf of Max.
&gt; 
&gt; Manually committed r122870: http://trac.webkit.org/changeset/122870

Filed bug #91556 to teach svn-{apply, unapply} about the allow-tabs property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672080</commentid>
    <comment_count>75</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2012-07-18 00:32:19 -0700</bug_when>
    <thetext>This patch resulted a build fail on the Qt linux debug bots.

http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/23917

error msg:

../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp: In member function &apos;void pp::MacroExpander::ungetToken(const pp::Token&amp;)&apos;:
.../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp:129: error: comparison of unsigned expression &gt;= 0 is always true


it seems the problem is the &apos;assert(context-&gt;index &gt;= 0);&apos; line, the index is of type size_t which is unsigned . Maybe we can remove this line or something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672092</commentid>
    <comment_count>76</comment_count>
    <who name="Kristóf Kosztyó">kkristof</who>
    <bug_when>2012-07-18 00:52:44 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; This patch resulted a build fail on the Qt linux debug bots.
&gt; 
&gt; http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/23917
&gt; 
&gt; error msg:
&gt; 
&gt; ../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp: In member function &apos;void pp::MacroExpander::ungetToken(const pp::Token&amp;)&apos;:
&gt; .../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp:129: error: comparison of unsigned expression &gt;= 0 is always true
&gt; 
&gt; 
&gt; it seems the problem is the &apos;assert(context-&gt;index &gt;= 0);&apos; line, the index is of type size_t which is unsigned . Maybe we can remove this line or something else?

I made this fix in r122925 (http://trac.webkit.org/changeset/122925)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672137</commentid>
    <comment_count>77</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-18 01:49:21 -0700</bug_when>
    <thetext>*** Bug 91586 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672448</commentid>
    <comment_count>78</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-07-18 09:45:15 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; (In reply to comment #75)
&gt; &gt; This patch resulted a build fail on the Qt linux debug bots.
&gt; &gt; 
&gt; &gt; http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/23917
&gt; &gt; 
&gt; &gt; error msg:
&gt; &gt; 
&gt; &gt; ../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp: In member function &apos;void pp::MacroExpander::ungetToken(const pp::Token&amp;)&apos;:
&gt; &gt; .../Source/ThirdParty/ANGLE/src/compiler/preprocessor/new/MacroExpander.cpp:129: error: comparison of unsigned expression &gt;= 0 is always true
&gt; &gt; 
&gt; &gt; 
&gt; &gt; it seems the problem is the &apos;assert(context-&gt;index &gt;= 0);&apos; line, the index is of type size_t which is unsigned . Maybe we can remove this line or something else?
&gt; 
&gt; I made this fix in r122925 (http://trac.webkit.org/changeset/122925)

Thank you for the build fix. I&apos;ll get this fixed in ANGLE. I&apos;ve created an ANGLE bug for the issue:
http://code.google.com/p/angleproject/issues/detail?id=349</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147620</attachid>
            <date>2012-06-14 11:14:33 -0700</date>
            <delta_ts>2012-06-15 10:05:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1035784</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLjkyOWRhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjEzNSw3ICsyMzE5LDcgQEAgdm9pZCBPdXRwdXRITFNMOjph
ZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29u
c3QgVEkKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxk
c1tpXS50eXBlOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmlu
ZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxk
KSArICI7XG4iOworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmco
ZmllbGQpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkg
KyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKICAgICAgICAgfQogCiAgICAgICAgIHN0cnVj
dHVyZSArPSAifTtcbiI7CkBAIC0yNDM0LDQgKzI2MTgsMTQgQEAgVFN0cmluZyBPdXRwdXRITFNM
OjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlw
ZSkKICAgICAKICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRw
dXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgw
LCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcp
OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCA4MjRiYzA3Li5lYTI4
YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZv
bGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogewpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBPdXRw
dXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBzdGF0aWMgVFN0cmluZyBpbml0
aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUo
Y29uc3QgVFN0cmluZyAmc3RyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMg
YW4gdW5kZXJzY29yZSB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5n
IGRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBl
KTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmlu
ZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVh
ZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCop
OwogICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKIAor
ICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29s
IGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRsZUV4
Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxldChW
aXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0
cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNz
IE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIFRTdHJpbmcgc3RydWN0
TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQgJm1D
b250ZXh0OwotICAgIFVuZm9sZFNlbGVjdCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9y
dENpcmN1aXQgKm1VbmZvbGRTaG9ydENpcmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247
CiAKICAgICAvLyBPdXRwdXQgc3RyZWFtcwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0cHV0
SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
OwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZUxvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4
dHVyZTJETG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBi
b29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1
YmVMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1V
c2VzRGVwdGhSYW5nZTsKICAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQ
b2ludENvb3JkOwpAQCAtMTMyLDYgKzE0MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBp
bnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZvciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJv
b2wgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0
aW9uOworICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAK
aW5kZXggNDMxZjhkMS4uOTVhNmQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcm
IGlkZW50aWZpZXIpCiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImds
XyIsICIiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNl
ZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUo
MCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNl
cnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ2MSwxMiArNDYxLDE0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQogICAgICAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIsICIiKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaGFkZXJT
cGVjID09IFNIX0NTU19TSEFERVJTX1NQRUMgJiYgaWRlbnRpZmllci5jb21wYXJlKDAsIDQsICJj
c3NfIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNn
LCAiY3NzXyIsICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJp
bmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1
bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0
cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRl
cnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29u
dGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMg
cG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ1NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE0OTIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9v
bEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwCmluZGV4IGE2MDBjMDIuLjllZjRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAj
ZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL29zaW5jbHVkZS5oIgogCkBAIC0xNTgsMTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0
aW9uOjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNo
YXIgdmFsLCBjbwogCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1l
c3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19W
RVIpCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVz
ICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFz
c2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0
ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNp
emUsIGRhdGEoKSk7CiAjZWxzZQotICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29s
QWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAg
ICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBE
YW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAg
ICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwogI2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQo
MCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3VhcmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9G
VU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNs
dWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVu
YW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJl
bmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmlu
ZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1O
ZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsK
KyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9
PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUo
KSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVu
Y3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5l
d0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9O
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmlu
ZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaEhhbmRsZS5oCkBAIC0yNCw2ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFt
ZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhl
IFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNX
ZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFz
cyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiAr
NzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRl
Y3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVy
J3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgor
ICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVt
CiAgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4
IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAg
LTc5LDYgKzg4LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVz
KFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAg
ICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9v
bCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxl
ciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4g
b3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAg
ICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0
aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0
ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5n
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHAKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hT
aGFkZXJJbmZvIHZhclR5cGUsCiAgICAgaW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3Jt
QW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgp
KTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8ubmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3Jt
QW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgg
LSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11
c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9M
RU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAgICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5n
dGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVk
TmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3Ry
bmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFt
ZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0g
MDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwCmluZGV4IGVkYmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApA
QCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAj
aW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMg
YSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcgKzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRN
YW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0
aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgp
KSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFy
cmF5U2l6ZSk7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5
U2l6ZSk7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUg
Kz0gYnVmOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsOTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBB
U1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ug
c3RhdGVtZW50cwotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRI
TFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBh
cnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChj
b250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXgg
PSAwOwotfQotCi12b2lkIFVuZm9sZFNlbGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUp
Ci17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRy
YXZlcnNlKHRoaXMpOwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1i
b29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24gKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdl
dEJvZHlTdHJlYW0oKTsKLQotICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0g
ICAgewotICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwg
bU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwg
IjtcbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwot
ICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0
aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAg
ICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8
ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0g
ICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxu
IjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJ
bmRleDsKLQotICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5n
ZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0
Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7
Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQot
Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAg
cmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YTNiYTVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMK
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVS
X1VORk9MRFNFTEVDVF9IXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFz
cyBPdXRwdXRITFNMOwotCi1jbGFzcyBVbmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRl
eHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKTsKLQotICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBw
cm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAq
Y29uc3QgbU91dHB1dEhMU0w7Ci0KLSAgICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQot
I2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9s
ZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0
aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUg
YXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRy
YW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21w
aWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFt
ZXNwYWNlIHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFy
c2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNv
bnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9
IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAq
bm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9k
ZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9
CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExT
TC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsK
KyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFs
ZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMg
PSB0cnVlOyBlbHNlIHMgPSB5OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxp
ZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAi
Ym9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAg
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRl
bXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFs
ZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBz
ID0geTsgZWxzZSBzID0gZmFsc2U7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1w
bGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwg
ImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwg
IiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAg
IG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0
IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAg
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRl
bXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKwor
ICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNl
IHMgPSB5OyIKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAg
ICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRI
TFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25k
aXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAg
ICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2Rl
LT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBv
dXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxu
IgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAg
ICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5k
ZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0
SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENv
bmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgewor
ICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKwor
ICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitpbnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQorewor
ICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENp
cmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVy
YXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9M
RFNIT1JUQ0lSQ1VJVF9IXworI2RlZmluZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8K
KworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKwor
Y2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAg
cHVibGljOgorICAgIFVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBP
dXRwdXRITFNMICpvdXRwdXRITFNMKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9u
ICpub2RlKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOworCisgICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoK
KyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0
cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAv
LyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lH
cmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5U
RGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7
ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAg
ICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBh
cmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdy
YXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFs
bE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitU
R3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rp
b25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0
aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlm
IChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkp
CisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2Fs
bCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5k
ZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
Cit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFw
LmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9s
ID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAg
ICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNv
bmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRl
cm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAg
ICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAg
ICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFs
bCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGgg
dHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRl
cm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5w
dXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3Jh
cGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2Vs
ZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rp
b24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFw
aExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxv
b3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3Ap
OworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisK
K1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRl
cm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2lj
YWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9k
ZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29u
c3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29u
c3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9w
KCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJh
bmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9E
RVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3Jh
cGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50Owor
Y2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdy
YXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsK
K2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0Owor
dHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVk
ZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRl
ZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOwor
CisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLwor
Y2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSog
bm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9
CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdy
YXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
K307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQg
bWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBU
R3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBu
b2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2Rl
KCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAo
bm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisv
LworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFy
Z3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFy
Z3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50
TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQor
ICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFs
IH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1
bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnRO
dW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRH
cmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxs
KQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAg
IHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3Jl
Z2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+
Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5
bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUg
eworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
IDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBo
U3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBj
b25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0
b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1
YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0
aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFw
aFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQg
d2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFw
aE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBj
b25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5v
ZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdy
YXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGlu
dGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldElu
dGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9k
ZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBj
YWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRl
cmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisv
LyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBv
ZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBu
b2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8g
Tm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRl
ZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5j
ZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERl
cGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5
R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisK
KyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJv
bHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigp
OworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2Ft
cGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9s
cy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRG
dW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQo
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIp
OworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0
ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlv
biogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7Cisg
ICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAg
VEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9n
aWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4g
VFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4g
VFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRH
cmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3Rv
ciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRN
YXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVz
ZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVj
aWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhv
ZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Ig
bm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgo
MCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJv
bCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNl
bGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1
bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxl
Y3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9n
aWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0
aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7
ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKwor
ICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBt
YXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQor
ICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNp
dGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1E
ZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcApAQCAtMCwwICsxLDIzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisg
ICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtM
ZWZ0U3VidHJlZTsKKworVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vob2xkZXIKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5
R3JhcGgqIGdyYXBoKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3Jh
cGgpOworICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1BZ2dyZWdhdGUpCit7CisgICAgc3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkp
IHsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50
ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNp
dEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDog
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkK
K3sKKyAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5j
dGlvbnMuCisgICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisg
ICAgICAgIHJldHVybjsKKworICAgIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVn
YXRlKTsKK30KKworLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRl
cyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlv
biBjYWxsIi4KK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxs
KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5j
dGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVy
bUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAvLyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBh
cmd1bWVudHMuCisgICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVu
Y2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsK
KyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFy
Z3VtZW50cy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7
CisgICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9k
ZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVy
bU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50
KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBh
cmd1bWVudE51bWJlcik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xl
Tm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRk
RGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBj
dXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUg
cmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9u
IGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAg
Ly8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMg
bGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRv
IGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVh
dGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmlu
c2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGUpCit7CisgICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3Jl
Z2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7Cisg
ICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5
bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRl
bnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAv
LyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdy
YXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNl
cnRJbnRvVG9wU2V0KHN5bWJvbCk7CisKKyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3Vy
cmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJl
dmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAo
IW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9Cisg
ICAgICAgICZUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAg
ICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVz
aChzeW1ib2wpOworICAgIH0KK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAg
ICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1CaW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVP
cEluaXRpYWxpemUgfHwgaW50ZXJtQmluYXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZp
c2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2lj
YWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRl
cm1CaW5hcnkpOworICAgIGVsc2UKKyAgICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1C
aW5hcnkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkK
K3sKKyAgICBUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRM
ZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1MZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3Jh
cGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVT
ZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVy
KHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAg
ICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3lt
Ym9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJh
dmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhh
dmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUg
bGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xl
ZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJp
Z2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1
YnRyZWUpOworICAgICAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9k
ZVNldHMuZ2V0VG9wU2V0KCkpCisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2lu
Z2xlTm9kZShhc3NpZ25tZW50Tm9kZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAv
LyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1
cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSBy
ZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9
IChiID0gYykiIHdpbGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBh
Ii4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUp
IGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRl
ciBhc3NpZ25tZW50LCB3aGljaCB3aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJi
IC0+IGEiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsK
K30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVy
bUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVy
bUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFBy
b3BhZ2F0aW5nTWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBp
bnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBs
ZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExv
Z2ljYWxPcCogbG9naWNhbE9wID0gbUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNh
bE9wKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnRO
b2RlcywgbG9naWNhbE9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlw
ZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAg
IFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMs
IFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICBpbnRl
cm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFy
eSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5n
ZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYg
KFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsK
KyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIodGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAg
ICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1D
b25kaXRpb24gPSBpbnRlcm1TZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFRO
b2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRl
cm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQq
IGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBU
R3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVy
bVNlbGVjdGlvbik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9k
ZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVl
QmxvY2soKSkKKyAgICAgICAgaW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
IGlmIChUSW50ZXJtTm9kZSogaW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0
RmFsc2VCbG9jaygpKQorICAgICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRp
b24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhp
cyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
aWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQo
KSkgeworICAgICAgICAgICAgVEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChp
bnRlcm1Mb29wKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KGNvbmRpdGlvbk5vZGVzLCBsb29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtQm9keSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50
ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1F
eHByZXNzaW9uID0gaW50ZXJtTG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1F
eHByZXNzaW9uLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xl
Tm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoVFBhcmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rl
cy0+YmVnaW4oKTsgaXRlciAhPSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaFBhcmVudE5vZGUqIGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnRO
b2RlLT5hZGREZXBlbmRlbnROb2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEs
MTg0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRF
TkNZX0dSQVBIX0JVSUxERVJfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZ
X0dSQVBIX0JVSUxERVJfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCisKKy8vCisvLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xz
LCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50
ZXJtZWRpYXRlIHRyZWUuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVElu
dGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKwor
cHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0
YWNrOworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2Rl
U2V0OworCisgICAgLy8KKyAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVz
IG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2lu
ZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0
dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGgg
cGFyZW50IG5vZGVzLgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldFN0YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNr
KCkgeyBjbGVhcigpOyB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQg
aXMgZW1wdHkuCisgICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAg
cmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgp
KTsgfQorICAgICAgICB2b2lkIHBvcFNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7
CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBv
cHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4K
KyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0Lgor
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Ag
c2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAg
ICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAg
ICBub2RlU2V0cy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7
CisgICAgICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRv
cCgpOworICAgICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4o
KSwgb2xkVG9wU2V0LT5lbmQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0
ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhl
cmUgaXMgbm8gdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhl
cmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0
aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNl
cnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRz
LmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJl
bnROb2RlU2V0U3RhY2s7CisKKyAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsK
KyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hl
cyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0
YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8v
CisgICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRO
b2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAg
ICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAg
ICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAg
ICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVu
IGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29w
ZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8K
KyAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0
UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAg
ICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQor
ICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50
b05leHQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsK
KyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBz
IHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisg
ICAgLy8gYXNzaWdubWVudC4KKyAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5
bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUs
CisgICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8v
IFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhl
IFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBh
IHJlYWwgc3ltYm9sLgorICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNl
ZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAor
ICAgIC8vIHN5bWJvbC4KKyAgICAvLworICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgY2xhc3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1
YmxpYyBUR3JhcGhTeW1ib2wgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBUU3VidHJl
ZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhTeW1ib2woTlVMTCkge30KKyAgICAgICAgfTsKKworICAg
ICAgICBzdGF0aWMgVFN1YnRyZWVQbGFjZWhvbGRlciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0
YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVyIGtSaWdodFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1
YnRyZWVQbGFjZWhvbGRlciYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xz
KGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRz
UGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5
bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRl
clN5bWJvbCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7
CisgICAgICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAg
ICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2Vy
KHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9p
ZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0
aGlzKTsgfQorCisgICAgdm9pZCBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFy
ZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2
aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3Ao
VEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmlu
YXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRl
Kik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1G
dW5jdGlvbkNhbGwpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdn
cmVnYXRlKik7CisKKyAgICBURGVwZW5kZW5jeUdyYXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRT
dGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9I
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzQ4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhPdXRwdXQ6Om91dHB1dEluZGVudGF0aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGdldERlcHRoKCk7ICsraSkKKyAgICAgICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBw
YXJhbWV0ZXIpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJn
dW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRv
ICIKKyAgICAgICAgICA8PCBwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXRO
YW1lKCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRw
dXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0
aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCog
c3ltYm9sKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9s
LT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAg
ICAgICAgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30K
Kwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJzZWxlY3Rpb25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAg
ICBtU2luayA8PCAibG9vcCBjb25kaXRpb25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aE91dHB1dDo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7Cisg
ICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2lj
YWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7
CisgICAgbVNpbmsgPDwgIlxuIjsKKworICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRl
cikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIHN5bWJvbCA9ICppdGVyOworICAgICAgICBt
U2luayA8PCAiLS0tIERlcGVuZGVuY3kgZ3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAg
ICAgIGNsZWFyVmlzaXRlZCgpOworICAgICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICBtU2luayA8PCAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2Rh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VU
UFVUX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRf
SAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1
dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30K
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1
bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVj
dGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3Aq
IGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3Aq
IGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVu
Y3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToKKyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7
CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjE1ODU3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAs
MCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCIKKworLy8gVGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3Qg
dHJhdmVyc2FsIHRocm91Z2ggdGhlIGdyYXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3Zv
aWQgVEdyYXBoTm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQor
Cit2b2lkIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKKworICAgIGdyYXBoVHJhdmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOworCisgICAg
Ly8gVmlzaXQgdGhlIHBhcmVudCBub2RlJ3MgY2hpbGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2Rl
U2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAg
ICAgICBpdGVyICE9IG1EZXBlbmRlbnROb2Rlcy5lbmQoKTsKKyAgICAgICAgICsraXRlcikKKyAg
ICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFw
aFRyYXZlcnNlci0+aXNWaXNpdGVkKG5vZGUpKQorICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworICAgIH0KKworICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnRE
ZXB0aCgpOworfQorCit2b2lkIFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlz
aXRBcmd1bWVudCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNl
ci0+dmlzaXRGdW5jdGlvbkNhbGwodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVy
c2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2
ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJh
dmVyc2VyLT52aXNpdFNlbGVjdGlvbih0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShn
cmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXIt
PnZpc2l0TG9vcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNl
cik7Cit9CisKK3ZvaWQgVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRM
b2dpY2FsT3AodGhpcyk7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgK
aW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBAIC04LDkgKzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
OwogZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
Ci1leHRlcm4gdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2Uo
VFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCmluZGV4IDlhMDM5NGIuLmM2M2VmYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYg
QEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1
LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHAp
LgogCiAldG9wewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBA
QCBPICAgICAgICAgICBbMC03XQogImV4dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJuYWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJpbnRlcmZhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAKICJsb25nIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogInNob3J0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBA
IC0xNjYsNiArMTY3LDcgQEAgTyAgICAgICAgICAgWzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImZpeGVkIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAidW5zaWduZWQiICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQogCiAiaW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRwdXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQpAQCAtMTczLDEyICsxNzUsMjEgQEAgTyAgICAgICAgICAgWzAtN10KICJo
dmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMz
IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKworInNhbXBsZXIxRCIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Cisic2FtcGxlcjNEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KworInNhbXBsZXIxRFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Cisic2FtcGxlcjJEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KworInNhbXBsZXIzRFJlY3QiIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
InNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogCiAic2l6ZW9mIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
ICJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAt
NTY4LDE5ICs1NzksMTUgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIpOwogfQogCi12b2lkIGds
c2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBp
bnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CitpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIHl5cmVzdGFydChOVUxMLCBjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNl
dF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLCBjb250ZXh0LT5zY2FubmVyKTsKICAgICBj
b250ZXh0LT5BZnRlckVPRiA9IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29y
LgogICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAg
Y3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50Owot
ICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVu
dCA9IDA7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNj
YW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCmluZGV4
IDU5YjcyOTkuLjZjZGY0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApAQCAtMSw2ICsxLDYgQEAKLSNsaW5lIDE3ICIu
L2dsc2xhbmcubCIKKyNsaW5lIDE3ICIuL2NvbXBpbGVyL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0yMSw3ICsyMSw3IEBACiAKIAogCi0jbGluZSAyNSAiLi9nbHNs
YW5nX2xleC5jcHAiCisjbGluZSAyNSAiLi9jb21waWxlci9nbHNsYW5nX2xleC5jcHAiCiAKICNk
ZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAogCkBAIC0zODMsOCArMzgzLDggQEAgc3Rh
dGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwog
Ci0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgK
KyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE1Ngog
LyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAogICAgYnV0IGl0cyBw
cmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwpAQCAtMzkyLDU1
ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5
OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0
WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAgMTM2LCAgMTQxLCAgMTI1
LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAgICAgMTM1LCAgIDk0LCAg
IDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAgIDkwLAotICAgICAgMTI3
LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5LCAgMTIxLCAgMTMyLCAg
ICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAgMTE2LCAgMTAyLCAgMTIx
LCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5LCAgIDk5LCAgIDk3LCAg
ICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAgICAwLCAgICAwLCAgIDk0
LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0LAotICAgICAgMTE4LCAg
IDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotCi0g
ICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMsCi0gICAgICAgIDAsICAg
IDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAxMDQsICAgNTAsCi0gICAg
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTgs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
MjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAgMCwgICA5NywKLSAgICAg
ICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4NywgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1MywgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAgOSwgICAzMywgICAzNCwg
ICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1Niwg
ICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAzNiwKLSAgICAgICAz
NywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0MiwgICA0MywgICA0NCwK
LSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA4MywgICA4NCwgICA4
NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAgIDgxLCAgIDgyLCAgICA3
LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1LCAgIDkwLCAgIDkwLCAg
IDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAgIDkwLAotICAgICAgIDE5
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYxLCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAgIDY0LCAgIDMyLCAgIDkw
LCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAgIDkwLCAgIDkwLCAgIDkw
LCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDU0LCAgIDEzLCAg
IDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0LAotCi0gICAgICAgNjMs
ICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAgOTAsICAgNDgsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1MywgIDE1MywKKyAgICAg
IDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwgIDEzMCwgIDEzOSwgIDEz
NywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0NSwgIDEzMiwgIDE0Niwg
IDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgIDEy
OCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAgICAgIDE1MiwgIDE1NSwg
IDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwgIDExNiwKKyAgICAgIDEw
NiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEwNCwgIDEwMCwgIDEwMSwK
KyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwgIDEyNSwgIDEyMSwgIDEy
MywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE3LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgMTE1LCAgMTE5
LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAwLCAgICAwLCAgMTAzLCAg
IDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAgIDk4LCAgIDk4LAorCisg
ICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAgIDAsICAxMDQsICAgOTgs
ICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgNjks
ICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAgMzQsICAgMzUsCisgICAg
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTYsICAgMjks
ICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMzYsICAgMzcsICAg
MzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAgNDIsICAgNDMsICAgNDQs
ICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA4MiwgICA4Mywg
ICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwKKyAgICAgICA4NywgICAg
NywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5OCwgICA5OCwKKyAgICAg
ICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5NywgICA5OCwgICA5OCwgICAx
OSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2NiwgICA2MSwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1NywgICA5OCwgICA2NCwgICAz
MiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwgICAzMSwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NCwK
KyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwgICA2NywgICA5OCwgICA5
OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2LCAgIDk2LCAgIDEwLCAg
IDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDQ2LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAgIDk4LAorICAgICAgIDky
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4LCAgIDkxLCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAgIDkzLCAgICAwCiAgICAg
fSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KQEAgLTQ1MCwx
NSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgNSwgICAg
NiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywg
ICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwgICAxNiwgICAxNiwgICAx
NiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAyNCwgICAyNSwgICAyNiwg
ICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywKLSAgICAgICAzMSwgICAz
MSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAzMSwKLSAgICAg
ICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzNSwgICAzMSwgICAz
MSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAgMSwgICAzOSwgICA0MCwg
ICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDMxLCAg
IDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAgIDMxLCAgIDU0LCAgIDU1
LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYxLCAgIDYyLCAgIDYzLCAg
IDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgIDE4LCAgIDE5
LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAorICAgICAg
IDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4
LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAg
IDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAg
ICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQsICAgNDUsICAgNDYsICAg
NDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisgICAgICAgNTMsICAgNTQs
ICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCisgICAgICAg
NjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0NzgsMjE0IEBAIHN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlf
bWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjhdID0KICAg
ICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgNCwgICAgNCwgICAg
NCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywKLSAgICAgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAg
ICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywg
ICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAg
MSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAg
NCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgNCwgICAgNCwgICAgMSwg
ICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQz
MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDY0XSA9CiAgICAgeyAg
IDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAgIDAsICA2MjcsICA2Mjgs
ICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2MjgsICA2MjgsICA2MDEsICAx
MzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAxNjMsICA1OTksICA2Mjgs
ICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2MjgsICA2MjgsICAxMjYsICAg
OTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0gICAgICAxMzAsICAxMDcs
ICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQsICAxODEsCi0gICAgICAx
NzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2MjgsICA2MjgsICA2MDMs
Ci0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2MjgsICA2MjgsICA2MjgsICA2
MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2MjgsICAgIDAsICA2Mjgs
ICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAsICA2MjgsICA2MjgsICA2
MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAgIDAsICA2MjgsICA2Mjgs
ICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAgICAgIDU2OSwgIDU1Niwg
IDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwgIDU1MCwKLSAgICAgIDUz
OCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0OCwgICAgMCwgIDE4NywK
LSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwgIDUyOSwgIDU0MywgIDU0
MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5MiwgIDUzMCwgIDUyNiwg
IDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywgIDUyOSwgIDExNCwgIDUy
MiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAgMCwgIDMyMiwgIDMzOCwg
IDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDUxNCwgIDUxOCwgIDUy
NywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUyMCwKLSAgICAgIDUxOCwg
IDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwgIDUxMSwgIDQ5OSwKLSAg
ICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUwMSwgIDUwNCwgIDUwMSwg
IDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4NiwgIDQ4MywgIDQ4NywgIDQ5
MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAgNDcyLCAgNDcwLCAgNDcw
LCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0LCAgNDY5LCAgNDU4LCAg
MjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAgMzcyLCAgMzc4LCAgNDY4
LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0LAotICAgICAgNDUzLCAg
NDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAgNDYzLCAgNDQ4LAotICAg
ICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1LCAgNDQ0LCAgNDQ1LCAg
NDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDQwLCAgNDQx
LCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2LCAgNDQwLCAgNDMyLCAg
NDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAgICAwLCAgNDQwLCAgNDI5
LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAg
NDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAw
LCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAwLCAgNDE4LAotCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAgIDAsICAgIDAsICAgIDAs
ICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUsICA0MTgsICA0MDcsICA0
MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0MTMsICA0MDgsICAzOTYs
ICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAsICAzODksICAzODgsICAz
ODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0gICAgICAzODYsICAzOTks
ICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEsICAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAzODUsICAzODAsICAzNzIs
Ci0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAsICAgIDAsICAzNjksICAz
NjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAzNjQsICAgIDAsICAzNjIs
ICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgsICAgIDAsICAyOTgsICAz
MTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAgICAgIDIzOCwgIDIzNywg
IDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4NiwgIDE3MywKLSAgICAgIDE4
NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQxOSwgIDQyMywgIDE4Ngor
ICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAgNjgwLCAgNjgxLCAgNjgx
LCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgxLCAgNjUzLCAgMTM0LCAg
NjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAgNjUxLCAgNjgxLCAgMTg2
LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgxLCAgMTI4LCAgMTAwLCAg
MTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAgMTczLCAgMTA5LCAgNjIx
LCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0LAorICAgICAgMTQxLCAg
MTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjU2LAorICAg
ICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAgICAwLCAgNjgxLCAgMjQz
LCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAgNjgxLCAgNjgxLCAgNjE2
LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2MjEsICA2MDgsICA2MTQs
ICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIsCisgICAgICA1OTAsICAx
ODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAgIDAsICAyMTYsCisgICAg
ICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIsICA1OTYsICA1OTMsICA1
OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1NzcsICA1ODIsICA1Nzgs
ICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1NjksICA1ODEsICAxNzYsICA1
NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAgIDAsICAzNDQsICAzNjEs
ICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAsICA1NjYsICA1NzAsICA1
NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisgICAgICA1NzIsICA1NzAs
ICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUsICAgIDAsCisgICAgICA1
NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1MzksICA1NTIsICA1NTUs
CisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYsICA1MzcsICA1MzQsICA1
MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywgIDUzNywgIDUyMywgIDUy
MSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUyOSwgIDI4MywgIDUyNCwg
IDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywgIDM4MSwgIDM4OCwgIDM5
NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAgICAgIDUwOCwgIDUwNiwg
IDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwgIDUwMywKKyAgICAgIDUx
MywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUwMCwgIDM2NiwgIDUwMSwK
KyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUwMCwgIDQ5NSwgIDQ5NCwg
IDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwgIDQ4MCwgIDQ5MiwgIDQ4
MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4MywgIDQ4MiwgIDQ3OSwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAgIDQ4MywgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2NiwKKworICAgICAgNDc2
LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAor
ICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAgICAwLCAgICAwLCAgNDcy
LCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYwLCAgNDY1LCAgNDU1LCAg
NDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAgNDYxLCAgNDYzLCAgNDQ3
LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAwLCAgNDQ2LCAgICAwLCAg
NDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAgNDQ5LCAgICAwLCAgNDUx
LCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAwLAorICAgICAgICAwLCAg
NDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAg
ICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIwLCAgNDMyLCAgICAwLCAg
ICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAgNDI3LCAgNDE3LCAgNDEx
LCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIzLCAgNDIyLCAgICAwLCAg
ICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAsICA0MzEsICA0MzAsICA0
MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQsCisgICAgICAzOTIsICAz
OTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAzOTEsICAzODgsCisgICAg
ICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcsICAzMDQsICAzMjEsICAy
OTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAyNjIsICAgIDAsICAyNTYs
ICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTksICAxMTMsICAgIDAsICAg
IDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAxNjEKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICA0MjUsICAgIDEs
ICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQzMCwgIDQy
NSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
ICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAgNDU4LCAgICAxLCAgNDU5
LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDYxLCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0NTgsICA0NTgs
CisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjMsICA0
NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAgIDAsICA0NTgsICA0NTgs
CisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
NzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAg
MTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTksICAgMjAsICAgMjEs
ICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAg
MjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAgMzAsCi0gICAgICAgMzAs
ICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsCi0g
ICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAgMzAsICAgNDMs
ICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAsICAgNTEsICAg
NTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAgNTUsICAgNTYsICAgNTcs
ICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEsICAgNjAsICAgNjAsICAg
IDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAgMjMsICAgMjQsICAgMjUs
ICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsCisgICAgICAgMzAsICAg
MzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsCisgICAg
ICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAgMzAsICAg
NDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAsICAgNTEs
ICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQsICAgNTUsICAgNTYsICAg
NTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAgOTEsICAgNjAsICAgNjAs
ICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgsICAgIDgsICAgIDgsICAg
IDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAgICAgICAgIDgsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAKLSAgICAg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAg
OCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAgICAgICA2NywgICA3MCwg
ICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA5MywKLSAgICAgIDEx
OSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEyMCwgICA2OCwgICA5NywK
LSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwgICA3NywgICA3OCwgIDEx
NiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3OCwgIDExNywg
ICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MSwgIDEw
MCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQyNCwgICA4MSwgIDQyMywg
IDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAgICAgMTAzLCAgIDg3LCAg
IDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAgMTA1LAotICAgICAgMTI4
LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5LCAgNDIyLCAgMTMzLAot
ICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAgMTM4LCAgMTQxLCAgMTMw
LCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5LCAgMTg0LCAgMTQ4LCAg
MTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAgNDE4LCAgMTg4LCAgMjA1
LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgMTUzLCAg
MTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAgMjMwLCAgNDE3LCAgMTUx
LCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5LAotICAgICAgIDc5LCAg
IDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAgMjgyLCAgNDE1LAotICAg
ICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAg
IDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAgNDEyLCAgMTU1LCAgIDgx
LCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAsICAgNzgsICAgODEsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAyMTEsICAzMDQsICAzMDUs
ICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEsCi0gICAgICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCi0gICAg
ICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcsICAyMjEsICA0MDYsICAy
MjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIs
ICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTQsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAyMjAsICAyMjAsICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAsICAyMjAsICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0gICAgICAyMjIsICAyMjIs
ICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYsICAzMTcsCi0KLSAgICAg
IDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5NSwgIDM5NCwgIDM5
MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1OCwgICA1OCwgICA1OCwg
ICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1MiwgIDM4OSwgIDE1MiwgIDE1
MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwg
IDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwgIDM3NCwgIDM3MywgIDM3
MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAgICAgIDM2NSwgIDM2NCwg
IDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwKLSAgICAgIDM1
NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwK
LSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMz
NywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwg
IDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwgIDMyMSwgIDMy
MCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAgMzExLCAgMzA3LCAgMzAz
LCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAgICAgMjkzLCAgMjkyLCAg
MjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAgMjc4LAotICAgICAgMjc3
LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LAot
ICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3
LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAg
MjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3
LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMxLCAgMjI4LCAgMjI3LCAg
MjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAgMjE0LCAgMjEzLCAgMjEw
LCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAxLAotICAgICAgMjAwLCAg
MTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTg5LAotICAg
ICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAg
MTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAx
NjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgs
ICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUsICAgODksICAgODQsICAg
NjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0
MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcwLCAgIDcyLCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDkzLCAgMTE5LCAgIDc1
LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIwLCAgIDY4LCAgIDk3LCAg
MTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAorICAgICAgIDc3LCAgIDc4
LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLAorICAgICAg
IDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgx
LAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3LCAgMTQzLCAgMTA4LCAg
IDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQsICAxMDIsICAxMTAsICAx
MDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAxMTYsICAxMTEsICAxMDYs
ICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcsICAxNDksICAyMDYsICAy
MTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisgICAgICAxMzksICAxMTgs
ICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAsICAxOTIsCisgICAgICAx
NDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAxOTMsICA0NTMsICAxNDYs
CisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAxNTQsICAx
NTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0NTIsICAxODYsICAxNTIs
ICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODksICAxNTUsICAxOTAsICAy
MTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAyODYsICAyODcsICA0MjIs
ICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAgNzksICAg
NzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAgODAsCisKKyAgICAgICA4
MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywK
KyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1NiwgICA4MSwgIDQ0OCwgIDE1
NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgICA4MSwgICA3OCwg
IDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgIDI4
MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0NiwgIDIyMiwgIDQ0NSwg
ICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAgIDIyMywgIDIyMywgIDMw
MiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1NCwKKyAgICAgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwgIDQ0MiwgIDQ0MSwKKyAg
ICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwgIDQzOCwgIDQzNywgIDE1
NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDIyMywg
IDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAgMjI1LCAgMjI1LCAgMjI1
LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAgNDA1LCAgNDM2LAorICAg
ICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4LCAgNDI3LCAg
NDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDkyLCAgIDky
LCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUzLCAgNDI0LCAgNDIxLCAg
NDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAgNDE0LCAgNDEzLCAgNDEy
LCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAxLCAgNDAwLCAgMzk5LCAg
Mzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAorICAgICAgMzkxLCAgMzkw
LCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLAorICAgICAg
MzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAgMzczLCAgMzcy
LAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQs
ICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAz
NTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcs
ICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEsICAzNDAsICAzMzksICAz
MzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisgICAgICAzMzEsICAzMzAs
ICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAzMTksCisgICAgICAz
MTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAzMDEsICAzMDAs
CisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAy
ODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAyNzcsICAyNzYsICAyNzUs
ICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAy
NjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAyNTcsICAyNTYsICAyNTUs
ICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAgICAgIDI0OCwgIDI0Nywg
IDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwKKyAgICAgIDIz
OCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNywK
KyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywgIDIxMiwgIDIxMSwgIDIx
MCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIwMSwgIDIwMCwg
IDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MSwgIDE4NSwgIDE4
NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwg
IDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1MCwKKyAgICAgIDE0Nywg
IDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwgIDQ1OCwKKyAg
ICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4CiAgICAgfSA7
CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9j
aGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0gICAgICAgMjgs
ICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQs
ICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiArNzAyLDc3IEBA
IHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAsICAgMjAsICAgMjAsICAg
MjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAgMzQsICAgMzQsICAgMTks
ICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUsICAgMzUsICAxNDUsICAg
MzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0gICAgICAgMjIsICAgMjIs
ICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAg
MjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAgNDEsICA0MzAsICAgMjIs
Ci0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYsICAgNTUsICAgMjIsICAg
MzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwgICAzNywgICAyMywgICAz
OCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0OSwgICAzOSwgICAyMiwg
ICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwgIDQyMCwgICAzOSwgICA1
MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAgICAgIDEzNSwgICA1MSwg
ICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwgIDEyMCwKLSAgICAgIDQx
NywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3NCwgICA3NCwgICA3NCwK
LSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwgICA3
OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5MiwgIDE5MiwgIDQxMywg
ICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3
NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3OCwgIDQxMCwgICA4MCwg
ICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgIDEyMiwgIDIy
NiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEyMiwKLQotICAgICAgIDgw
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0LCAgMjM0LCAgMjM0LAot
ICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4LCAgMTUxLCAgMzk3LCAg
MTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUx
LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgzLCAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAgMzkzLCAgMTUzLCAgMTU0
LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LAotICAgICAgMTU1LCAg
MTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAotICAg
ICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMzkyLCAg
MjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIxLCAgMjIx
LCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEsICAzOTEsICAzODgsICAz
ODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAzNzYsICAzNzUsICAzODEs
ICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0MjcsCi0gICAgICA0MjcsICA0
MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAzNjksICAzNjgsCi0gICAg
ICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMsICAzNTIsICAzNTEsICAz
NTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAzNDAsICAzMzks
ICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTks
ICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUsICAyOTQsICAyOTMsICAy
ODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0gICAgICAyNzUsICAyNzQs
ICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsCi0gICAgICAy
NjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTAsICAyNDksICAyNDgs
Ci0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzMywg
IDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwgIDIyMywgIDIxOCwgIDIx
NywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywg
IDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5OSwgIDE5
OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAgICAgIDE5MCwgIDE4OSwg
IDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwKLSAgICAgIDE4
MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwK
LSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE0
NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEzOCwgIDEzNywgIDEzNiwg
IDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEy
NiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDExNywgIDExNiwgIDExNSwg
IDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAgICAgMTA4LCAgMTA3LCAg
MTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LAotICAgICAgIDk4
LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4LCAgIDQ2LAot
ICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAgICA3LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICAgNSwgICAgNSwgICAx
MywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMCwg
ICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywgICAyMSwKKyAg
ICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAzMywgICA0MiwgICAzNSwg
ICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAy
MiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwgICA1MSwgIDQ1NCwgICAy
MiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAgNDUzLCAgIDM2LCAgIDIy
LCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2LAorICAgICAgIDI2LCAg
IDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAgIDM5LCAgIDIyLAorICAg
ICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5LCAgIDUwLCAgMTEyLCAg
IDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAgIDQ3LCAgIDUyLCAgMTM1
LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5LCAgIDQ5LCAgIDUwLCAg
IDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0
LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4LCAgIDc4LCAgIDc4LCAg
IDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAorICAgICAgMTY4LCAgMTY4
LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0LCAgIDc0LAorICAgICAg
MjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAgIDc5LCAgIDc5LCAgIDc5
LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4LCAgIDgwLCAgIDgwLCAg
IDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzksICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAgODAsICAgODEsICA0NDUs
ICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEsICAgODEsICAgODEsICAg
ODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjksICA0NDMsCisgICAgICAx
NTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIs
CisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0MzksICA0MzgsICAgODMsICAx
NTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAyNDUsICAyNDUs
ICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUsICA0MzQsICAxNTQsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAyNDksICAyNDks
ICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAgICAxNTcsICAxNTcsICAx
NTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCisKKyAgICAgIDIy
MiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyNCwK
KyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1NSwgIDI1NSwgIDM4OCwg
IDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQy
NCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4OCwgIDQ1OSwgIDQ1OSwg
IDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAgIDQ2MiwgIDQxOSwgIDQ2
MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwKKyAgICAgIDQwMywg
IDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5MiwgIDM4OSwgIDM4NywKKyAg
ICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwg
IDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2MiwgIDM1OSwgIDM1OCwgIDM1
NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0Niwg
IDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAg
MzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAgMzI4LCAgMzI3LCAgMzI2
LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAxLAorICAgICAgMzAwLCAg
Mjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAorICAg
ICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAg
MjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYx
LCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4LCAgMjQ0LCAgMjQyLCAg
MjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjI4
LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2LCAgMjE1LCAgMjEzLCAg
MjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAorICAgICAgMjA1LCAgMjA0
LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAorICAgICAg
MTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1
LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAxNzgsICAxNzcsICAxNzYs
ICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjcsICAx
NjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAxNDUsICAxNDQsICAxNDMs
ICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYsICAxMzQsICAxMzMsICAx
MzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisgICAgICAxMjUsICAxMjQs
ICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsCisgICAgICAx
MTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDIs
CisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUsICAgOTEsICAg
ODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAgNDAsICAgMjcsICAgMjQs
ICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBy
dWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9y
dWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlf
cnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwgMCwgMCwgMSwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjAs
NyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAw
LCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0
aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4
IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3Qg
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVf
T0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05NDQs
NyArOTY1LDcgQEAgc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAJaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwK
IAkJaW50IGMgPSAnKic7IFwKLQkJeXlfc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJZm9yICgg
biA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBF
T0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtMTA4
NiwxMyArMTEwNywxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlp
ZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gNDU5ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkJ
fQogCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5
X2N1cnJlbnRfc3RhdGUgIT0gNDI1ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0
NTggKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CiAJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBAIC0xMTAzLDcgKzEx
MjQsNyBAQCB5eV9maW5kX2FjdGlvbjoKIAogCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVG
RkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKIAkJCXsKLQkJCXl5X3NpemVf
dCB5eWw7CisJCQlpbnQgeXlsOwogCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5
bCApCiAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKIAkJCQkJICAgCkBAIC0xNDgxLDIy
MCArMTUwMiwyNTIgQEAgWVlfUlVMRV9TRVRVUAogCVlZX0JSRUFLCiBjYXNlIDkwOgogWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk2OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTc6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKIHsKICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9
IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAogICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVy
KTsKIH0KIAlZWV9CUkVBSwotY2FzZSA5MToKK2Nhc2UgOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHl5
bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDkyOgorY2FzZSAxMDA6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZh
bC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDkzOgorY2FzZSAxMDE6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQt
PmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIp
OyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIAlZWV9CUkVBSwotY2FzZSA5NDoKK2Nh
c2UgMTAyOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NToKK2Nhc2Ug
MTAzOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSA5NjoKK2Nhc2UgMTA0OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5NzoKK2Nhc2UgMTA1OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4o
RkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5ODoKK2Nhc2UgMTA2OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKEFERF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTk6Citj
YXNlIDEwNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihTVUJfQVNTSUdOKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDEwMDoKK2Nhc2UgMTA4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE1VTF9B
U1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAxOgorY2FzZSAxMDk6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oRElWX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDI6CitjYXNlIDEx
MDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNT0RfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEwMzoKK2Nhc2UgMTExOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKExFRlRfQVNTSUdO
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNDoKK2Nhc2UgMTEyOgogWVlfUlVMRV9TRVRVUAogeyAg
cmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDU6CitjYXNlIDExMzoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBTkRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEwNjoKK2Nhc2UgMTE0OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhPUl9BU1NJR04pOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTA3OgorY2FzZSAxMTU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1
cm4oT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwODoKK2Nhc2UgMTE2OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKElOQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDk6CitjYXNl
IDExNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihERUNfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTEwOgorY2FzZSAxMTg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX09QKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDExMToKK2Nhc2UgMTE5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJu
KE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMjoKK2Nhc2UgMTIwOgogWVlfUlVMRV9TRVRV
UAogeyAgcmV0dXJuKFhPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTM6CitjYXNlIDEyMToK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTQ6
CitjYXNlIDEyMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihHRV9PUCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMTU6CitjYXNlIDEyMzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihFUV9PUCk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMTY6CitjYXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJl
dHVybihORV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTc6CitjYXNlIDEyNToKIFlZX1JVTEVf
U0VUVVAKIHsgIHJldHVybihMRUZUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExODoKK2Nhc2Ug
MTI2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFJJR0hUX09QKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDExOToKK2Nhc2UgMTI3OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5
cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjA6Citj
YXNlIDEyODoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7
IHJldHVybihMRUZUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMToKK2Nhc2UgMTI5Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTIyOgorY2FzZSAxMzA6CiBZWV9SVUxFX1NFVFVQCiB7IGlmIChjb250ZXh0LT5pblR5cGVQYXJl
bikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMjM6CitjYXNlIDEzMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKENPTE9O
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNDoKK2Nhc2UgMTMyOgogWVlfUlVMRV9TRVRVUAogeyBj
b250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyNToKK2Nhc2UgMTMzOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRl
clR5cGUgPSBmYWxzZTsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9Q
QVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjY6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VUVVAK
IHsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEyNzoKK2Nhc2UgMTM1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
TEVGVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyODoKK2Nhc2UgMTM2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjk6
CitjYXNlIDEzNzoKIFlZX1JVTEVfU0VUVVAKIHsgQkVHSU4oRklFTERTKTsgIHJldHVybihET1Qp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMwOgorY2FzZSAxMzg6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybihCQU5HKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMToKK2Nhc2UgMTM5OgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4oREFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzI6CitjYXNlIDE0MDoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFRJTERFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMzoK
K2Nhc2UgMTQxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUExVUyk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzQ6CitjYXNlIDE0MjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNUQVIpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTM1OgorY2FzZSAxNDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihT
TEFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzY6CitjYXNlIDE0NDoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKFBFUkNFTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM3OgorY2FzZSAxNDU6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
ODoKK2Nhc2UgMTQ2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTM5OgorY2FzZSAxNDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihW
RVJUSUNBTF9CQVIpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQwOgorY2FzZSAxNDg6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihDQVJFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDE6CitjYXNlIDE0
OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKEFNUEVSU0FORCk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxNDI6CitjYXNlIDE1MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFFVRVNUSU9OKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDE0MzoKK2Nhc2UgMTUxOgogWVlfUlVMRV9TRVRVUAogeyAKICAgICBC
RUdJTihJTklUSUFMKTsKQEAgLTE3MDIsMTIgKzE3NTUsMTIgQEAgWVlfUlVMRV9TRVRVUAogICAg
IHJldHVybiBGSUVMRF9TRUxFQ1RJT047CiB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ0OgorY2FzZSAx
NTI6CiBZWV9SVUxFX1NFVFVQCiB7fQogCVlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1
IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMTUzOgorLyogcnVsZSAxNTMgY2FuIG1hdGNoIGVvbCAq
LwogWVlfUlVMRV9TRVRVUAogeyAgfQogCVlZX0JSRUFLCkBAIC0xNzE2LDExICsxNzY5LDExIEBA
IGNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgogY2FzZSBZWV9TVEFURV9FT0YoRklFTERTKToK
IHsgY29udGV4dC0+QWZ0ZXJFT0YgPSB0cnVlOyB5eXRlcm1pbmF0ZSgpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTQ2OgorY2FzZSAxNTQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPndhcm5pbmco
eXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KIAlZWV9C
UkVBSwotY2FzZSAxNDc6CitjYXNlIDE1NToKIFlZX1JVTEVfU0VUVVAKIEVDSE87CiAJWVlfQlJF
QUsKQEAgLTIwMTYsNyArMjA2OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRf
c3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gNDI2ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJ
CXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKQEAgLTIwNDUsMTEgKzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3Vy
cmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQog
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lz
X2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8g
MCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0yOTIyLDcgKzI5NzUsNyBAQCB2b2lkIENQUFNo
SW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQog
Ci12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOwpAQCAtMzIwMiwxOSArMzI1NSwxNSBA
QCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgcmV0
dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAg
ICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3Nj
YW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXly
ZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNv
dXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVPRiA9
IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMgPSBj
b250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0g
c3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4g
ICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZy
b21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNv
dW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLmI3Y2U5NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
X3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmdfdGFiLmNwcApAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24g
Mi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNj
LWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwg
MjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJl
CisgICBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3Ig
KGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg
ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2Vw
dGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0
IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQg
d29yawpAQCAtMjksNyArMjcsNyBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwg
Y2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmls
ZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5z
ZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgog
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5l
IFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJT
SU9OICIyLjMiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9u
IG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1
Myw2NyBAQAogLyogUHVyZSBwYXJzZXJzLiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVz
aCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8K
KyNkZWZpbmUgWVlQVUxMIDEKKwogLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlM
U1BfTkVFREVEIDAKIAogCiAKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJh
dGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25v
cmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykK
KyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVND
X1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQxODkpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xU
YWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xT
TEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5l
cgorCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZp
bmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdl
cy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQor
IyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJP
U0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVm
IFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyog
VG9rZW5zLiAgKi8KICNpZm5kZWYgWVlUT0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBA
IC0xNjEsMTU2ICsyMTUsMTQgQEAKICAgICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYK
LS8qIFRva2Vucy4gICovCi0jZGVmaW5lIElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVD
SVNJT04gMjU5Ci0jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVD
SVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJU0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2Mwot
I2RlZmluZSBDT05TVF9RVUFMIDI2NAotI2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZM
T0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElOVF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNk
ZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVmaW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2Rl
ZmluZSBGT1IgMjcyCi0jZGVmaW5lIElGIDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmlu
ZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJWRUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZp
bmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElWRUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZp
bmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZFQzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5l
IFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJWDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVm
aW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5lIElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4
OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBW
QVJZSU5HIDI5MgotI2RlZmluZSBTVFJVQ1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNk
ZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5lIFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNV
QkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJfRVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVS
MkRSRUNUIDI5OQotI2RlZmluZSBJREVOVElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAx
Ci0jZGVmaW5lIEZMT0FUQ09OU1RBTlQgMzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2Rl
ZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0jZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZp
bmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUgUklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgK
LSNkZWZpbmUgREVDX09QIDMwOQotI2RlZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzEx
Ci0jZGVmaW5lIEVRX09QIDMxMgotI2RlZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMx
NAotI2RlZmluZSBPUl9PUCAzMTUKLSNkZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNT
SUdOIDMxNwotI2RlZmluZSBESVZfQVNTSUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQot
I2RlZmluZSBNT0RfQVNTSUdOIDMyMAotI2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUg
UklHSFRfQVNTSUdOIDMyMgotI2RlZmluZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNT
SUdOIDMyNAotI2RlZmluZSBPUl9BU1NJR04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0j
ZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0jZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBM
RUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5lIFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRf
QlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hUX0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVm
aW5lIENPTU1BIDMzNAotI2RlZmluZSBDT0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVm
aW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZpbmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNk
ZWZpbmUgVElMREUgMzQwCi0jZGVmaW5lIFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVm
aW5lIFNMQVNIIDM0MwotI2RlZmluZSBQRVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0
NQotI2RlZmluZSBSSUdIVF9BTkdMRSAzNDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2Rl
ZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUgQU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAz
NTAKLQogCiAKIAotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4g
ICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJv
cnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQot
LyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJV
RyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0j
aWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUg
WVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2Vu
ZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5f
VEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQg
WVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZ
WVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwog
ICAgICAgICB1bmlvbiB7CkBAIC0zNDAsMTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZ
UEUKICAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBp
bnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9
IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlw
ZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUg
WVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2Vu
ZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4g
ICovCiAKIApAQCAtMzgwLDggKzI5MSw2IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKIH0KIAogCi0vKiBMaW5lIDIxNiBv
ZiB5YWNjLmMuICAqLwotCiAKICNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydApAQCAtNDU2LDE0
ICszNjUsMTQgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OwogI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQor
WVlJRCAoaW50IHl5aSkKICNlbHNlCiBzdGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwor
WVlJRCAoeXlpKQorICAgIGludCB5eWk7CiAjZW5kaWYKIHsKLSAgcmV0dXJuIGk7CisgIHJldHVy
biB5eWk7CiB9CiAjZW5kaWYKIApAQCAtNTQ0LDkgKzQ1Myw5IEBAIHZvaWQgZnJlZSAodm9pZCAq
KTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogLyogQSB0eXBlIHRoYXQgaXMg
cHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9j
CiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gIH07CisgIHl5dHlw
ZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUg
c2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhl
IG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5
eWFsbG9jKSAtIDEpCkBAIC01ODAsMTIgKzQ4OSwxMiBAQCB1bmlvbiB5eWFsbG9jCiAgICBlbGVt
ZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRo
ZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlv
biBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUo
U3RhY2spCQkJCQlcCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFj
aykJCQkJXAogICAgIGRvCQkJCQkJCQkJXAogICAgICAgewkJCQkJCQkJCVwKIAlZWVNJWkVfVCB5
eW5ld2J5dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUp
OwkJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+
U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tf
YWxsb2M7CQkJCQlcCiAJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2sp
ICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAogCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2Yg
KCp5eXB0cik7CQkJCVwKICAgICAgIH0JCQkJCQkJCQlcCkBAIC04MTIsMTYgKzcyMSwxNiBAQCBz
dGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImluaXRfZGVjbGFyYXRvcl9s
aXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCiAgICJ0
eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwK
ICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAi
c3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlz
dCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFy
YXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3RydWN0X2RlY2xhcmF0b3Jf
bGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCiAgICJkZWNsYXJhdGlv
bl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAiY29tcG91
bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAotICAi
c3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25v
X25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIsICJzdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRANSIsICIk
QDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAgICJzdGF0ZW1lbnRfbGlz
dCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKLSAgInNl
bGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVu
dCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9u
b3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQi
LCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKKyAgIiRAOCIsICIk
QDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVzdF9zdGF0
ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJleHRlcm5h
bF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIkAxMCIsIDAKKyAgImZ1
bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYKIApAQCAtMTM0NSw5ICsx
MjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogCiAvKiBMaWtl
IFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBv
cmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZ
WUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZl
cnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBw
bGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVh
cnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVk
CisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBp
dCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJy
bGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxs
eSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJz
IGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAg
ICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41
LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykK
IApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0
b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXli
b3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNr
X3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5
cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0
eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7
CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0g
dG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwor
ICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50
IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJv
dCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTE1NjMsMTEg
KzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQogICAv
KiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5
eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIs
IHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAx
KTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSAr
IHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJICAgICAg
IAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTg0OSwxMCArMTc3
MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogCWJy
ZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1w
cm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAoKTsKIAogCiAKLQotLyot
LS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5OCw3NCArMTgxNiw3NSBA
QCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAgLyogVGhlIGxvb2stYWhl
YWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7
CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwor
LyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIFlZU1RZ
UEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50
IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsK
LSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5h
YmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBh
biBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4g
PSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2Vz
LCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBj
aGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5
eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0g
ICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBz
ZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAg
ICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5
eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworICAgIC8q
IE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CiAK
LSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERF
UFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlz
c3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBi
ZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOwog
Ci0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJ
TklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwor
ICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4K
IAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8g
YWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAq
LwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2Fb
WVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYg
Knl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAt
PSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBF
IHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5
dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisgICAgWVlTSVpF
X1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBMb29r
YWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICov
CisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFu
dGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rpb24gcm91dGluZXMuICAq
LwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBm
b3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5
bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNn
X2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhO
KSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBUaGUgbnVtYmVyIG9mIHN5
bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRvIHplcm8g
d2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9IDA7CiAK
KyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOworICB5eXN0
YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5n
IHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsKICAgeXlu
ZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJl
YWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQu
ICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAgICAgIFdhc3RlIG9uZSBl
bGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBzbyB0aGF0IHRoZXkgc3Rh
eSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAgICAgIFRoZSB3YXN0ZWQg
ZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5eXNzcCA9IHl5c3M7CiAg
IHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50IHl5bmVycnM7CiAJWVlT
VFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwogCi0KIAkv
KiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0
aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0
byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBi
dXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5bmVycnM7CiAJeXlvdmVy
ZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAot
CiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpAQCAtMjAyNiw5ICsxOTQz
LDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZ
WVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQogCSAgZ290byB5eWV4
aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRF
ICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FU
RQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMjAz
OSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUg
LSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAotCiAgICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCiAJCSAgKHVuc2ln
bmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYgKzE5NjQsOSBAQCBpbnQg
eXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwg
eXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisK
ICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIwNTcsMTYgKzE5NzUsMTYg
QEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNz
aW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9r
ZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAgICBs
b29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUu
ICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVy
ZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3
aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIHl5
biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAgICBnb3Rv
IHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBp
ZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdldCBhIGxv
b2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAvKiBZWUNI
QVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJv
bC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlk
IGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewog
ICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBAIC0yMDk4
LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJlZHVjZTsKICAgICB9CiAK
LSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgIC8qIENvdW50IHRva2Vu
cyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKICAgICAg
c3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJyc3RhdHVzLS07CiAKLSAg
LyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBTaGlmdCB0aGUgbG9va2Fo
ZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAm
eXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVz
cyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZ
RU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZ
WUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0geXlsdmFsOwpAQCAtMjE4
MywxNCArMjA5NywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ6CkBAIC0yMjA3LDcgKzIxMjEsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5pKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUs
MjEgKzIxMzksMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMzE2LDE0ICsy
MjMwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnkpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCh5eXZz
cFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6CkBA
IC0yNDM2LDcgKzIzNTAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3Mg
ZnJvbSB0aGUgcG9vbAotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6CkBA
IC0yNDUwLDcgKzIzNjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKQEAgLTI0NjQsNyArMjM3OCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE0OgpAQCAtMjQ3Myw3ICsyMzg3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGlmIChj
b250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgIltdIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTU6CkBAIC0yNTczLDE0ICsyNDg3LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBmbkNhbGw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTc6CkBAIC0yNTg5LDcgKzI1MDMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1
cHBvcnRlZCIsICIiLCAiIik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
KHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6CkBAIC0yNTk3LDcgKzI1MTEsNyBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxl
eCkubGluZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5OgpAQCAtMjYw
NSw3ICsyNTE5LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDoKQEAgLTI2MTMsNyArMjUyNyw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIxOgpAQCAtMjYyMSw3ICsyNTM1LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybU5vZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6CkBA
IC0yNjMxLDcgKzI1NDUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAy
MzoKQEAgLTI2NDEsMTQgKzI1NTUsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZzcFsoMSkg
LSAoMyldLmludGVybSkuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlv
bjsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtTm9kZSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMjU6CkBAIC0yNzA3LDcgKzI2MjEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlw
ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOwogICAgICAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMjY6CkBAIC0yNzE4LDcgKzI2MzIsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywg
dHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzoKQEAgLTI3MjksMTQgKzI2NDMsMTQg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
ICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9u
KSA9IGZ1bmN0aW9uOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMjk6CkBAIC0yNzUwLDcgKzI2NjQsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMDoKQEAg
LTI3NjQsNyArMjY3OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDMxOgpAQCAtMjc4NSwyNyArMjY5OSwyNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDMyOgog
Ci0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
OyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cE51bGw7IH0KICAgICBicmVhazsKIAogICBjYXNlIDMzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJt
KS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcE5lZ2F0aXZlOyA7fQorICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMzQ6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5v
dDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMzU6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDM2OgpAQCAtMjgxOCw3ICsyNzMy
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMzc6CkBAIC0yODMxLDEyICsyNzQ1LDEyIEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDM4Ogog
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToKQEAgLTI4NDgsNyArMjc2Miw3IEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDQwOgpAQCAtMjg2MCwxNyArMjc3NCwxNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MToKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNDI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDQzOgpAQCAtMjg4NCw3ICsyNzk4
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ0OgpAQCAtMjg5
OCw3ICsyODEyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ1
OgpAQCAtMjkxMiw3ICsyODI2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDQ2OgpAQCAtMjkyNiwxMiArMjg0MCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNDc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ4OgpAQCAtMjk0
NSw3ICsyODU5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ5
OgpAQCAtMjk1OSwyNyArMjg3MywyNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNTA6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUxOgogCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA1MjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTM6CiAKLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAog
ICBjYXNlIDU0OgpAQCAtMjk5MywxMiArMjkwNywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNTU6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDU2OgpAQCAtMzAx
MiwxMiArMjkyNiwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NTc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDU4OgpAQCAtMzAzMSwxMiArMjk0NSwxMiBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTk6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDYwOgpAQCAtMzA1NCwxMiArMjk2OCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwog
ICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MToKIAotICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNjI6CkBAIC0zMDczLDM5ICsyOTg3LDM5IEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDYz
OgogCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9w
ID0gRU9wQXNzaWduOyA7fQorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2
YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjQ6CiAK
LSAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgO30KKyAgICB7IEZSQUdfVkVSVF9PTkxZ
KCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjU6CiAKLSAgICB7IEZSQUdfVkVS
VF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50
ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcERpdkFzc2lnbjsgO30KKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNjY6CiAKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IDt9CisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgO30KKyAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247
IH0KICAgICBicmVhazsKIAogICBjYXNlIDY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDY5OgpAQCAtMzEx
Nyw3ICszMDMxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzA6CkBAIC0zMTI2LDcgKzMwNDAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNzE6CkBAIC0zMTU3LDcgKzMwNzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHByb3RvdHlwZTsKIAogICAgICAgICBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDcyOgpAQCAtMzE2Niw3ICszMDgwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKICAgICAgICAgICAgICh5eXZzcFso
MSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDczOgpAQCAtMzE3NCw3ICszMDg4LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0udHlwZSkudHlwZSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikg
KTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKQEAgLTMyMTMsMjEgKzMxMjcsMjEgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0aGUgZnVu
Y3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgogICAgICAgICAvLyBBZGQgdGhl
IGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2NvcGUgaW5zdGVhZC4KICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZh
bC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgNzc6CkBAIC0zMjM5LDcgKzMxNTMsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc4OgpAQCAtMzI2MSw3ICszMTc1LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5w
YXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc5
OgpAQCAtMzI4Miw3ICszMTk2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
ZnVuY3Rpb24pID0gZnVuY3Rpb247CiAgICAgICAgIAogICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MDoKQEAg
LTMyOTcsNyArMzIxMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpKX07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFy
YW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MToKQEAgLTMzMTksNyAr
MzIzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAoeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSB9OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lOwogICAgICAgICAoeXl2YWwuaW50ZXJt
KS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6
CkBAIC0zMzI4LDcgKzMyNDIsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxp
ZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6CkBAIC0z
MzM5LDcgKzMyNTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1
YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6CkBA
IC0zMzQ4LDcgKzMyNjIsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmll
ciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6CkBAIC0zMzU5
LDM1ICszMjczLDM1IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMild
LmludGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0g
RXZxT3V0OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTA6CkBAIC0zMzk1LDE0ICszMzA5LDE0IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKICAgICAgICAgKHl5dmFsLmludGVy
bSkucGFyYW0gPSBwYXJhbTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkx
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKQEAgLTM0Mjgs
NyArMzM0Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5MzoKQEAgLTM0NTAsNyArMzM2NCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUs
ICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS50eXBlLCB2YXJpYWJsZSkpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NDoKQEAgLTM0
NzgsNyArMzM5Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUo
c2l6ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmlu
ZywgdHlwZSwgKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lKSwgKHl5dnNwWygzKSAtICg2KV0u
bGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgOTU6CkBAIC0zNTAyLDcgKzM0MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk2
OgpAQCAtMzUxMCw3ICszNDI0LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk3OgpAQCAtMzUzMiw3ICszNDQ2LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmICh2
YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk4OgpA
QCAtMzU0NCw3ICszNDU4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAo
NCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2ws
ICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5
cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA5OToKQEAgLTM1ODAsNyArMzQ5NCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKICAgICAgICAgICAgICAgICBzeW1ib2wt
PnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAwOgpAQCAtMzYwNCw3ICszNTE4LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDE6CkBAIC0zNjI2LDcgKzM1NDAsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2
YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYz
OSw3ICszNTUzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFs
c2UpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDM6
CkBAIC0zNjYzLDE0ICszNTc3LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICB9CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEwNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFDb25zdCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNToKQEAgLTM2ODAsNyArMzU5NCw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0
dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEwNjoKQEAgLTM2OTIsNyArMzYwNiw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNzoK
QEAgLTM3MDQsNyArMzYxOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEwODoKQEAgLTM3MTMsNyArMzYyNyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA5OgpAQCAtMzcyNyw3ICszNjQx
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTA6CkBAIC0zNzM1LDM1ICszNjQ5LDM1IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0ucHJlY2lzaW9uKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEx
MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwSGlnaDsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMjoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnByZWNpc2lvbikgPSBFYnBMb3c7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTU6CkBAIC0zNzc5LDcgKzM2OTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFy
cmF5KHRydWUsIHNpemUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxMTY6CkBAIC0zNzg3LDcgKzM3MDEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE3OgpAQCAtMzc5NSw3ICszNzA5
LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxMTg6CkBAIC0zODAzLDcgKzM3MTcsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTk6CkBAIC0zODExLDcgKzM3MjUs
NyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTIwOgpAQCAtMzgyMCw3ICszNzM0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMjE6CkBAIC0zODI5LDcgKzM3NDMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMjoKQEAgLTM4MzgsNyArMzc1Miw3IEBAIHl5
cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIzOgpAQCAtMzg0Nyw3ICsz
NzYxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgyKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNDoKQEAg
LTM4NTYsNyArMzc3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMjU6CkBAIC0zODY1LDcgKzM3NzksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTI2OgpAQCAtMzg3NCw3ICszNzg4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTI3OgpAQCAtMzg4Myw3ICszNzk3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI4OgpAQCAtMzg5Miw3ICszODA2LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI5OgpAQCAtMzkwMiw3ICsz
ODE2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MzA6CkBAIC0zOTEyLDcgKzM4MjYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzMToKQEAgLTM5MjIsNyArMzgzNiw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRydWUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMyOgpAQCAtMzkzMSw3ICszODQ1LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTMzOgpAQCAtMzk0MCw3ICszODU0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzNDoK
QEAgLTM5NTMsNyArMzg2Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlckV4dGVybmFsT0VTIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzNToKQEAg
LTM5NjYsNyArMzg4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2Ft
cGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTYW1wbGVyMkRSZWN0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODg5
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTM3OgpAQCAtMzk4OSwxMiArMzkwMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVu
dGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBp
ZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIo
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkyNiwxMiBAQCB5
eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5l
eGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE0MDoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcp
KSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3RE
ZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTQxOgpAQCAtNDAyNywxNCArMzk0MSwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICg1KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVm
ID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZUxpc3QpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1
MCw3ICszOTY0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGVMaXN0KSlbaV0pOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxNDQ6CkBAIC00MDg3LDcgKzQwMDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMDksMTQg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5l
d1Bvb2xUVHlwZUxpc3QoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hf
YmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUp
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyAr
NDAyOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBl
ID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTQ4OgpAQCAtNDEzMSw2NyArNDA0NSw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2
c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5
cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE0OToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDE1MjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVh
azsKIAogICBjYXNlIDE1MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30K
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1ODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE1OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAg
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
NjA6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQy
MDIsNDQgKzQxMTYsNDQgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5s
ZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKSA9ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0g
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0g
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNjQsMzEgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE3MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpLCAwKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE3MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1O
b2RlKSwgMCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxNzQ6CkBAIC00MjgzLDcgKzQxOTcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygz
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygx
KSAtICg1KV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE3NToKQEAgLTQyOTEsNyArNDIwNSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTc2OgpAQCAtNDI5OSw3ICs0MjEzLDcgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTIgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMw
OCw3ICs0MjIyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAg
ICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0MCwxMiBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9s
VGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTgwOgpAQCAtNDM0MCwxMiArNDI1NCwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdo
aWxlLCAwLCAoeXl2c3BbKDQpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5
dnNwWyg2KSAtICg2KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgp
LmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5l
c3RpbmdMZXZlbDsgO30KKyAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTgyOgpAQCAtNDM1NiwxMiArNDI3MCwxMiBAQCB5eXJlZHVjZToK
IAogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAo
eXl2c3BbKDQpIC0gKDgpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAg
ICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUg
KzQyODQsMzUgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZExvb3AoRUxvb3BGb3IsICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2Rl
KSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRl
cm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2
c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0u
aW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAg
ICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxODU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTg4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAw
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0
MzIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWly
KS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxOTA6CkBAIC00NDE0LDcgKzQzMjgsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTE6CkBAIC00NDI1LDcg
KzQzMzksNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5s
aW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5MjoKQEAgLTQ0MzYs
NyArNDM1MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkzOgpAQCAtNDQ0Nyw3
ICs0MzYxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk0OgpAQCAtNDQ2
Miw3ICs0Mzc2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5n
IHR5cGU6IiwgInJldHVybiIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk1OgpAQCAt
NDQ3MCw3ICs0Mzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBGUkFHX09OTFkoImRp
c2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxs
LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0MzkyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTc6
CkBAIC00NDg2LDIxICs0NDAwLDIxIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDU4MCw3ICs0NDk0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRv
cihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxp
bmUpOwogICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IHBhcmFtTm9kZXM7CiAgICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAxOgpAQCAtNDYwOCwxMSArNDUyMiwx
MCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdl
dEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAKLS8q
IExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9
CkBAIC00NjI0LDcgKzQ1MzcsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFsOwog
Ci0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJt
aW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2Ug
cG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8K
QEAgLTQ2ODksNyArNDYwMSw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAz
KQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQg
dG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAg
Ki8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYxOCw3IEBAIHl5
ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFo
ZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5IHRv
IHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAgdG9r
ZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0Njc1LDYgQEAgeXllcnJs
YWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYg
KHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwog
CiAKQEAgLTQ3OTAsNyArNDY5OSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsKICAg
Z290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVy
ZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0
aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTAsNyBAQCB5eWV4aGF1c3RlZGxhYjoKICNl
bmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlF
TVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xlYW51
cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7
CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlv
biB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQgKzEs
MjIgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLworLyog
QSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tlbGV0
b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29w
eXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAt
MjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAor
ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZl
cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u
ICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdl
ciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIg
c2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAKICAg
IHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhl
IHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhj
ZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAg
Ki8KIAorCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlU
T0tFTlRZUEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAg
fTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmlu
ZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZp
bmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRS
SUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUK
LSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJS
RUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVM
U0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQg
Mjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMz
IDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMz
IDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAy
ODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklY
MyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUg
T1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkx
Ci0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9U
WVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmlu
ZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVm
aW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZ
UEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RB
TlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9O
IDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUg
SU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmlu
ZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmlu
ZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVm
aW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9B
U1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMy
MQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVm
aW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FT
U0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4
Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNk
ZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERP
VCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVB
TCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBE
QVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RB
UiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExF
RlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9C
QVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5l
IFFVRVNUSU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVk
IFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwogICAg
IHN0cnVjdCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpAQCAt
MjY1LDE0ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBUVHlw
ZUxpc3QqIHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGluZSAx
NTI5IG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVmaW5l
IFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xl
c2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVE
IDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCmlu
ZGV4IDU0NDE1NTcuLjk5NWE5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQ1Miw3ICs0NTIsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KIAog
ICAgIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgYm9vbCBpc1Vz
ZXJEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KIAogICAgIHZvaWQgc2V0
T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUo
KSB7IHJldHVybiBvcHRpbWl6ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4yNmUx
YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTQzNCwxNCArNDM1LDE0IEBAIHN0YXRpYyBpbnQg
RmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCiAgICAgICAgICAg
ICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFibGUpIHsKICAgICAgICAgICAgICAgICBpbnQg
aWk7CiAgICAgICAgICAgICAgICAgY2hhciBzdHJbMjAwXTsKLSAgICAgICAgICAgICAgICBzcHJp
bnRmKHN0ciwgIioqKiBIYXNoIGZhaWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBN
dXN0IGluY3JlYXNlIGhhc2ggdGFibGUgc2l6ZS4gKioqIiwKKyAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVk
IGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAogICAgICAg
ICAgICAgICAgICAgICAgICBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKICAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKIAotICAgICAgICAgICAgICAgIHNwcmludGYoc3Ry
LCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xs
aXNpb25bMF0sIGhhc2hkZWx0YSk7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBkZWx0YT0lMDR4Iiwg
cywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZyhzdHIpOwogICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNIX1RBQkxF
X01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3Ry
LCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVudHJ5ICUwNHggd2l0aCBcIiVzXCIi
LAorICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIENv
bGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVudHJ5ICUwNHggd2l0aCBcIiVzXCIiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWkgKyAxLCBjb2xsaXNpb25baWldLCBHZXRBdG9tU3RyaW5n
KGF0YWJsZSwgYXRhYmxlLT5odGFibGUuZW50cnlbY29sbGlzaW9uW2lpXV0udmFsdWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAg
fQpAQCAtNjg1LDE0ICs2ODYsMTQgQEAgdm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0
YWJsZSkKICAgICBjaGFyIHN0clsyMDBdOwogCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgYXRhYmxl
LT5uZXh0RnJlZTsgaWkrKykgewotICAgICAgICBzcHJpbnRmKHN0ciwgIiVkOiBcIiVzXCIiLCBp
aSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOworICAgICAgICBz
bnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFi
bGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0
cik7CiAgICAgfQotICAgIHNwcmludGYoc3RyLCAiSGFzaCB0YWJsZTogc2l6ZT0lZCwgZW50cmll
cz0lZCwgY29sbGlzaW9ucz0iLAorICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJIYXNo
IHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCiAgICAgICAgICAgIGF0
YWJsZS0+aHRhYmxlLnNpemUsIGF0YWJsZS0+aHRhYmxlLmVudHJpZXMpOwogICAgIENQUERlYnVn
TG9nTXNnKHN0cik7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgSEFTSF9UQUJMRV9NQVhfQ09MTElT
SU9OUzsgaWkrKykgewotICAgICAgICBzcHJpbnRmKHN0ciwgIiAlZCIsIGF0YWJsZS0+aHRhYmxl
LmNvdW50c1tpaV0pOworICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiICVkIiwg
YXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYwppbmRleCAxM2E1ZGYxLi4zNzBiMTU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y3BwLmMKQEAgLTUxLDYgKzUxLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUg
PGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKIAogI2lmIGRlZmluZWQoX01TQ19WRVIp
CkBAIC02NzgsNyArNjc5LDcgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXls
dmFscHApCiAJCWNhc2UgLTE6CiAgICAgICAgICAgICAvLyBFT0YKICAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUiKTsJ
CQkKLQkJCXJldHVybiB0b2tlbjsKKwkJCWdvdG8gZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwog
CQlkZWZhdWx0OgogCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwogCQkJU3JjU3RyTmFtZVsxXSA9
ICdcMCc7CkBAIC02ODgsMTAgKzY4OSw5IEBAIHN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQogCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CiAJfQogCi0JY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHRva2VuLCB5eWx2YWxwcCk7CiAJSGFuZGxlUHJhZ21hKChjb25z
dCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQl0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAJCitmcmVlTWVtb3J5QW5k
UmV0dXJuVG9rZW46CiAJZm9yIChpID0gMDsgaSA8IHRva2VuQ291bnQ7ICsraSkgewogCQlmcmVl
IChhbGxUb2tlbnNbaV0pOwogCX0KQEAgLTc4NCw3ICs3ODQsNiBAQCBpbnQgcmVhZENQUGxpbmUo
eXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICBjb25zdCBjaGFyICpt
ZXNzYWdlOwotICAgIGludCBpc1ZlcnNpb24gPSAwOwogCiAgICAgaWYgKHRva2VuID09IENQUF9J
REVOVElGSUVSKSB7CiAgICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lQXRv
bSkgewpAQCAtODYxLDcgKzg2MCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2
YWxwcCkKICAgICAgICAgICAgICB0b2tlbiA9IENQUGVycm9yKHl5bHZhbHBwKTsKICAgICAgICAg
fSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVyc2lvbkF0b20pIHsKICAgICAgICAg
ICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpc1ZlcnNpb24g
PSAxOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBleHRlbnNpb25B
dG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUGV4dGVuc2lvbih5eWx2YWxwcCk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC04OTQsNyArODkyLDcgQEAgdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhj
b25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKIAogICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tl
blN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAg
ICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwgdmFsdWUpOworICAgIHNucHJpbnRmKHZh
bC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7CiAgICAg
UmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKICAgICBhdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CiAgICAgc3ltYm9sID0gQWRkU3ltYm9s
KCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKQEAgLTk5MSwxMyArOTg5LDEzIEBA
IGludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgY29u
c3QgY2hhciAqbWVzc2FnZTsKIAlpZiAoYXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKICAgICAgICAg
eXlsdmFscHAtPnNjX2ludCA9IEdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgc3ByaW50Zih5eWx2
YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgc25wcmlu
dGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5
bHZhbHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXls
dmFscHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgaWYgKGF0b20gPT0gX19GSUxF
X19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIoKTsK
LSAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2Nf
aW50KTsKKyAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9M
X05BTUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2Vu
KENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaAppbmRleCBkYjRjMTg0Li5lNDljYTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKQEAgLTcz
LDcgKzczLDcgQEAgdm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIqKTsgICAgICAgICAv
LyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG8KIHZvaWQgIENQUFdhcm5pbmdUb0lu
Zm9Mb2coY29uc3QgY2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBp
bmZvIGxvZwogdm9pZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7
ICAvLyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250YWluZXIuCiB2b2lkICBSZXNldFRTdHJpbmcodm9p
ZCk7ICAgICAgICAgICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lk
ICBDUFBFcnJvclRvSW5mb0xvZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAg
ZXJyb3JzIGludG8gU2guSW5mby5sb2cgICAuCit2b2lkICBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2guSW5mby5sb2cg
ICAuCiB2b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3Jl
IHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCiB2b2lkICBTZXRMaW5lTnVtYmVyKGludCk7
ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAogdm9pZCAgU2V0U3RyaW5n
TnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51bWJlci4gICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2
OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xl
eGVyX2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBw
OjpEaWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBp
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsK
KyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1
Y3QgSW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0
aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJv
b2wgQ29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXls
dmFscHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQor
ICAgIHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUsIG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4
KElucHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVy
KiBzcmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBw
cDo6VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNo
ICh0b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRl
IHNyYy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBm
cmVlKHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0g
RU9GOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAg
ICAgICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsIHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9J
REVOVElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5U
OgorICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUu
Y19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENv
cHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9G
TE9BVENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5D
OgorICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdI
VF9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAg
ICByZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9HRToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IHBwOjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJl
dCA9IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9Y
T1I6CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQ
X0FERF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJf
QVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxf
QVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lH
TjoKKyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lH
TjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgor
ICAgICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJ
R047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgor
ICAgICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAg
ICByZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5l
KTsKKyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJu
IHJldDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhl
ciA9IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0
KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7Cisg
ICAgICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgSW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElu
cHV0U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7
CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBp
bi0+ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKwor
ICAgIHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklu
cHV0U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1v
cnkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2Rl
ZmluZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3Qg
TWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVh
dGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTlj
YzQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5o
IgotI2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3Rh
dGljIGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsK
LSAgICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFy
ZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZl
IHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1M
ZXhlcihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsK
LX0KLQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1i
b29sIENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8v
IFRPRE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBu
b3QgbmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19
Ci0KLWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRw
dXQpCi17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91
dHB1dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmlu
ZUJ1aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3Vj
Y2VzcyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0
dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpM
b2NhdGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpU
eXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQot
ewotICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBw
YXJhbWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChu
YW1lKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQot
ICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBt
TWFjcm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAg
ewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5h
bWUpCi17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsK
LX0KLQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0
KCkKLXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwg
RGVsZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5w
dXQ7Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lk
IENvbnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50
IHZhbHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8
IHZhbHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5l
dyBzdGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1l
bnRzID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVd
ID0gbmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNs
dWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBw
dWJsaWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQo
KTsKLSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0
cHV0KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJl
YWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0
KCkgeyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46
OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAg
ICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5l
TWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQo
Y29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcs
IE1hY3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4
ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1h
Y3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2Uo
KTsKLQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlu
cHV0OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAv
LyBEZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Iz
MjU0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNz
ZXJ0PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7
Cit9CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVw
IGEgY291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0
KTsKK30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBp
ZCkKK3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisg
ICAgICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAo
aWQgPCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAs
MCArMSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElD
U19IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNv
dXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBt
ZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRp
bmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1
YmxpYzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAg
SU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURf
Q0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBS
RVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVO
VCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAor
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNU
SVZFLAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAg
ICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisg
ICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25z
dCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJv
dGVjdGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAg
ICBXQVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAt
MCwwICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIu
aCIKKworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5k
bGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsx
LDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElS
RUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElW
RV9IQU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitz
dHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVj
dGl2ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xp
ZW50cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBj
bGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9w
cmlhdGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAg
dmlydHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVy
cm9yKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEg
b2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBy
YWdtYShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9Owor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
UkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
UGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNh
c3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiRXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtE
aXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVs
aWYoImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVu
ZGlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIp
Oworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIp
Oworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7
CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8v
IG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJl
c2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRl
cnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVy
Cit7CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIo
bGV4ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0
b2tlbikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciog
bUxleGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVy
KiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCog
bWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVI
YW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAor
ICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwK
KyAgICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcj
JykgcGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdc
bicpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIp
CisgICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisg
ICAgICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsK
KyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAg
ICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFy
c2VJZm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlm
ICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYo
dG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlm
KQorICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKKyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisg
ICAgICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24o
dG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNp
b24pCisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9r
ZW4pOworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50
eXBlICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAg
d2hpbGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5
cGUgPT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFs
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmlu
ZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
RGVmaW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05h
bWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1h
Y3JvOworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9
IHRva2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRv
a2VuLT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAg
ICAgICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAg
IG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bWFjcm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAo
dG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAo
KHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisg
ICAgeworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1
bm5lY2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQg
YWxzbyBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNv
bXBhcmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigp
OworICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3Jv
IHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNy
b1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgp
ICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0
LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9L
RU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRv
a2VuLT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAg
bU1hY3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9
CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAv
LyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5p
emVyKTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1N
YWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25Q
YXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lv
blBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9E
TyhhbG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBU
T0RPKGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJ
bXBsZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYp
OworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxl
bWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQg
bWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxp
ZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAg
ICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tl
biogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3Nl
cnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKwor
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5k
bGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBw
cmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAg
UFJBR01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwK
KyAgICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7Cisg
ICAgc3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7
CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUg
IT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAg
IHN3aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToK
KyAgICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZh
bGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZh
bGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsK
KyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVO
VElGSUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46
CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQ
UkFHTUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAg
ICAoc3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAg
ICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFs
dWUuCisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0
ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAg
IHsKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRp
b24sIG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVY
VF9OQU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKwor
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOwor
ICAgIGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
KyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05B
TUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZh
bGlkICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dmFsaWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhU
X0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRs
ZXItPmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30K
Kwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7Cisg
ICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVt
IFN0YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29s
IHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVS
U0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
VkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9Cisg
ICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9E
SVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZh
bGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9j
YXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRv
a2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFz
c2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIg
bWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAg
bWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNl
ci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
Ik1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXpl
cjsKKworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoK
KyAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
KworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQ
YXJzZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
SWZkZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihU
b2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiog
dG9rZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFj
cm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5k
bGVyKiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9FeHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Mzk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLmNwcApAQCAtMCwwICsxLDE5MTUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5
IEdOVSBCaXNvbiAyLjQuMi4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBC
aXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZv
dW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl
bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K
KworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29y
ayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxl
dG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9p
Y2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJh
dG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAg
YXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlv
dXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwg
Y2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmls
ZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBl
eGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAg
IHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRv
biB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3Jp
Z2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMg
ZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGlu
ZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZv
ciBsb2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRl
ZCBieSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlv
bnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBz
eW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0Ui
IGJlbG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlC
SVNPTiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04g
IjIuNC4yIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1F
ICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8q
IFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4g
ICovCisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5l
IFlZTFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlv
biBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICBwcHBhcnNlCisjZGVmaW5lIHl5
bGV4ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2Rl
ZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNo
YXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAg
ICAgIHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRp
b25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9f
R05VQ19fKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdu
b3N0aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1l
c3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0
aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBp
bnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KGlu
dCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisKKworLyogRW5hYmxpbmcgdHJhY2Vz
LiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyog
RW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJC
T1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEK
KyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5n
IHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZ
VE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tF
TlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRo
ZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtu
b3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQ09OU1RfSU5U
ID0gMjU4LAorICAgICBPUF9PUiA9IDI1OSwKKyAgICAgT1BfQU5EID0gMjYwLAorICAgICBPUF9O
RSA9IDI2MSwKKyAgICAgT1BfRVEgPSAyNjIsCisgICAgIE9QX0dFID0gMjYzLAorICAgICBPUF9M
RSA9IDI2NCwKKyAgICAgT1BfUklHSFQgPSAyNjUsCisgICAgIE9QX0xFRlQgPSAyNjYsCisgICAg
IFVOQVJZID0gMjY3CisgICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUg
JiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7Cisj
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8q
IG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19E
RUNMQVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRl
Y2xhcmF0aW9ucy4gICovCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRp
ZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWlu
dDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Cisj
ZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25l
ZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4
OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYg
eXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVf
dWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lO
VDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7
CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBk
ZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBk
ZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6
ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNl
bmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVm
IFlZXworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVO
QUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRp
bWUiLCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZ
WV8obXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZh
cmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwg
ZGVmaW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQor
IyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5j
dGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25z
LiAgKi8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50
IHl5aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKKyNlbmRp
ZgoreworICByZXR1cm4geXlpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxv
dyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBt
YWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RB
Q0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVD
X18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYg
ZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAor
IyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVND
X1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEg
ZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEK
KyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisK
KyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5
JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5
ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhl
IGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBz
bWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBh
bGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1i
ZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFy
eSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMy
IC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisj
ICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNw
bHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVm
aW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElC
X0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5l
IFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9T
VERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICpt
YWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
IGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJl
ZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVu
ZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICov
CisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19j
cGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9J
U19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFu
eSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlz
c19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhl
IG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8K
KyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAx
KQorCisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwg
c3RhY2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19C
WVRFUyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZ
WVNUWVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5U
IG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8K
KyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dO
VUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkg
XAorICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCoo
RnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAor
ICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAo
eXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20p
W3l5aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMg
ZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBu
ZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBn
aXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywg
YW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFu
Y2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAg
c3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2sp
CQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXlu
ZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlz
aXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0
ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07
IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9
CQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwg
LS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZ
RklOQUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZp
bmUgWVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAg
Ki8KKyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJt
aW5hbHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBy
dWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9m
IHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlM
RVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisj
ZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUg
WVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFY
VVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZ
WUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwK
KyAgICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAy
MCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDYsICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyog
WVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1i
ZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJo
c1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAg
IDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMs
ICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAg
NzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0g
QSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5
LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAg
IDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAg
MjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisg
ICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjks
ICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAy
OSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3
LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyog
WVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVm
aW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAg
ICAgMCwgICAgNzQsICAgIDc0LCAgICA4MSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEsICAg
IDk0LCAgICA5NywKKyAgICAgMTAwLCAgIDEwMywgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTUs
ICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LAorICAgICAxNDAsICAgMTUzLCAgIDE1NiwgICAx
NTksICAgMTYyLCAgIDE2NSwgICAxNjgKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlF
UlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0g
U3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJt
aW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0
YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIs
ICIkdW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAg
IideJyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwgIic+JyIsICJPUF9HRSIsICJP
UF9MRSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicrJyIsICInLSciLCAiJyonIiwgIicv
JyIsICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIsICInKCciLCAiJyknIiwgIiRhY2Nl
cHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBS
SU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwg
ICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2
MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQy
LAorICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307
CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0
IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10g
PQoreworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0g
TnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAg
IDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQg
cnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBk
b2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUg
ZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVm
YWN0W10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAg
MCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAg
MTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQor
fTsKKworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQ4IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZ
UEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3Jp
YmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAt
MTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTEx
LCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAg
LTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAt
MTEsCisgICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwg
ICAgLTIKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBp
biBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJ
ZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9z
aXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5G
LCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEs
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwK
KyAgICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlj
aGVja1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAor
ICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxCit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBv
ZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAg
MTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3Rh
dHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZ
WUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5
eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlF
UlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxs
IHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUg
dHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9u
Y2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAg
SG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywg
aXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5
LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisj
ZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRo
aXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAg
LVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJu
aW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5
IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVj
ZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09W
RVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVl
KQkJCQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09
IDEpCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwK
KyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBn
b3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAg
ICB7CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjog
Y2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJ
CQlcCit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZ
RVJSQ09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFu
IGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0
byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDog
UkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykg
KChSaHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFV
TFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJ
RCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJo
cywgMSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9D
IChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZ
UkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVs
c2UJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1
cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5l
OwkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1u
ID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJ
CQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJ
TlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdh
cyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ug
d29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtu
b3cuICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQ
RV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIs
CQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAg
ICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZp
bmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5k
aWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1l
bnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5
bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWws
IGNvbnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAq
LworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRG
IGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJ
CQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30g
d2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcp
CQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJ
CQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAo
MCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhp
cyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1
dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpj
b250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0
cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAg
IGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47
CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlO
VE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1
ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0
eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZ
T1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1i
b2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29u
c3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklM
RSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBl
IDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0
bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAl
cyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0
cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwg
IikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBz
dGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCku
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlw
ZV9pbnQxNiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJv
dHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50
MTYgKnl5dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7
CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBp
bnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5
Ym90KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUg
WVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJ
XAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcg
dG8gYmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1
bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmlu
dCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQg
eXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9
IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5
eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkg
cnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyog
VGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlu
cmhzOyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIs
IHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5
eXJ1bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQor
CQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8g
ewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3As
IFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFu
cyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Cisg
ICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2Ug
LyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFD
S19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2Vu
ZGlmIC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9m
IHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUg
WVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUg
dGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1p
biBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlz
IHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFD
S19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRl
ZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZu
ZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisK
KyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQg
X19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxl
bgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJs
ZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4g
KHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5
bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRp
bnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5
eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYg
ZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UK
Ky8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRl
cm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVz
dCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5
ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOwor
I2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlz
cmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7
CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5
eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0
cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0
aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0
IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250
YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAg
IGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYg
WVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0
aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlT
SVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBp
ZiAoKnl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAg
Y2hhciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5
eXApCisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rf
c3RyaXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykK
KwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4g
ICovCisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5
eXA7CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5
eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0K
KyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAg
IHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5
c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJy
b3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGlu
IHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBp
bmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGws
IGRvIG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRl
cyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAg
aWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVy
biBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1
bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVz
dWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisg
ICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xB
VEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRu
YW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZ
U0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVu
dW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25z
dCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4Owor
CisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRh
YmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwor
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFy
IGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXll
eHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5
eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3Rl
ZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Cisg
ICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFy
dCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJ
IFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwor
CisgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1l
LiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGlu
dCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VO
UzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5
dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsK
KworICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAo
eXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAg
IGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgewor
CQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5
dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5
eWNvdW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFt
ZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEg
PCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5
ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAg
IHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4g
KHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAg
ICAgeXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1
cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9p
ZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJ
ICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlv
bgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJz
LiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGls
ZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUn
ICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRu
YW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVs
c2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICBy
ZXR1cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
UmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VE
Ki8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9p
ZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5
dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1z
ZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIENvbnRleHQg
KmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRl
eHQpOworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1C
T0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dp
dGNoICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30K
KworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKyNp
ZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5
cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQg
KmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZ
WVBBUlNFX1BBUkFNICovCisKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQor
aW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Cisj
ZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNl
bHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRp
ZgorI2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOwor
CisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlT
VFlQRSB5eWx2YWw7CisKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAq
LworICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9m
IHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAg
aW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Cisg
ICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQg
dG8gc2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNl
cGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0
ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAg
IHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNz
OworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUg
c3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUg
Knl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsK
KworICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBh
biBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47
CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxv
Y2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2
YWw7CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdl
cywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAg
Y2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2Yg
eXltc2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChO
KSwgeXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhT
IG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBz
aG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXRva2VuID0gMDsK
KyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklU
REVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKwor
ICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXlj
aGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJ
bml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1
ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUg
bGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBu
ZXZlciBpbml0aWFsaXplZC4gICovCisgIHl5c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOwor
CisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5l
dyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3Rh
dGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQg
bG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcg
YSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRz
dGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0g
MSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9m
IHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6
ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyog
R2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBv
ZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGlu
dG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50
MTYgKnl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZv
bGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ss
IGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVz
dCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlm
IHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXho
YXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAg
ICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsK
KworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5
eW92ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXho
YXVzdGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5
LiAgKi8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhh
dXN0ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEgg
PCB5eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5
eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAo
dW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6
ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JF
TE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9j
LCB5eXZzKTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2Ep
CisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBu
byB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAg
ICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIs
ICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50
KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5
eXNzcCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmlu
ZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisg
ICAgWVlBQ0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXli
YWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlh
dGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29r
YWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAq
LworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5j
ZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlm
ICh5eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rYWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXlj
aGFyID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAg
ICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
Tm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJO
ZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8q
IElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVj
ZSBvciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5
eW4gKz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tb
eXluXSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5
bl07CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09
IFlZVEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAg
IGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNl
IGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAg
aWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxv
b2thaGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tl
biwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4g
ICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3Ag
PSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAt
LSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkK
KyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhl
IG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXlu
XTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFs
dWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhl
IGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlv
ciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1
cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0
aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2Fybmlu
ZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5
dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5
bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgKihjb250ZXh0LT5y
ZXN1bHQpID0gKHl5dnNwWygxKSAtICgxKV0pOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0p
ID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAt
ICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpE
SVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDIwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8
PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9a
RVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAg
eworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMildKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisKKworICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5d
LCAmeXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7
CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsK
KworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1p
bmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBw
b3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwor
CisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tF
TlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYm
IHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3Rh
dGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOwor
CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90
IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICov
CisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlF
UlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIp
KTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAs
IHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2Fs
bG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9j
ID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2Mg
PD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExP
Q19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxv
Yyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAg
IGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6
ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6
ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1z
ZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAg
fQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwor
CSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0g
MykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9v
a2FoZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAg
aWYgKHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQg
b2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9
CisgICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJ
ICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOwor
CX0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxh
YjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJP
Ui4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4g
dGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5
eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICov
CisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAvKiBE
byBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dl
cmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXls
ZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0gKnl5
c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21t
b24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQg
ZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAgeXlu
ICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOwor
CSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9w
IHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9r
ZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAgICB5
eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3As
IGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5c3Nw
OworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgKisreXl2
c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9T
WU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisg
IHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVz
IGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFj
Y2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29t
ZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFi
b3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVmaW5l
ZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5
IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250
ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFs
bCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVN
UFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAor
CQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBz
eW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFC
T1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19Q
UklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAg
ICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5
dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlv
dmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwor
I2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAg
ICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1
c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXls
ZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisK
KyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tl
bi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAg
ICAqbHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENP
TlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjog
dHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUg
PSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNh
c2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBi
cmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4n
OiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsK
KyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBl
ID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAg
IGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyon
OyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2Ug
J34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVh
azsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUg
Y3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXIt
PmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBw
IHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdu
b3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAg
IGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9
IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQg
PSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAo
cmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRp
b24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmQw
NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05f
UEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNF
Ul9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNz
IERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJl
c3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxl
eGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiog
dG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAg
RGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2Vu
ZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yZTg0Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci55CkBAIC0wLDAgKzEsMjYxIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBj
b250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNz
aW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5l
cmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29y
IGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZp
bGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEK
KworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVz
c2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
CisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
IlRva2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9r
ZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorJX0KKwor
JWRlZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29udGV4
dCAqY29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0aWMg
aW50IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXll
cnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0KKworJXRva2Vu
IENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wnCislbGVmdCAn
XicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicgT1BfTEUgT1Bf
R0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycg
JyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAg
ICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSAkMTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQor
OworCitleHByZXNzaW9uCisgICAgOiBDT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1Ig
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VR
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID09ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAk
MzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9u
IE9QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAr
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBp
ZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAg
ICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpz
dHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7
CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQg
PSAkMSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVz
c2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAg
Y29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZ
X1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHBy
ZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAg
ICB8ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAg
IH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQy
OworICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQg
PSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAg
ICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAg
ICQkID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2Vu
ID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBhdG9pKHRva2Vu
LT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJl
YWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsK
KyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJ
R0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xF
RlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBi
cmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYn
OiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsK
KyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBl
ID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAg
IGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8n
OyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2Ug
JyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVh
azsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0
eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAg
Ly8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQu
CisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICBy
ZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNl
cjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGlj
cykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQor
eworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiBy
ZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0
LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJl
dCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNh
c2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRv
a2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5j
bHVkZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5j
bHVkZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAg
OiBtQ291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChs
ZW5ndGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9y
KGtFcnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQo
KSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0g
ICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJ
bnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykK
IHsKLSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBt
Q291bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNv
dW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAg
ICAgaW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1
c2hfYmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAK
LWludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFk
KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQg
c3RhcnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZl
ciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUg
KChtSW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5S
ZWFkID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRl
eCA8IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAg
aWYgKGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0
ZUJsb2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVk
RU9GOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1T
dGF0ZSkKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVh
ZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVh
ZExvYy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVh
ZExvYy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSBy
ZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5j
SW5kZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVh
dCAnLycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50Owot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgot
ICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAg
ICAgICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0g
YzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBr
U3RhdGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBt
U3RhdGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChj
ID09ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVh
ZCsrXSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAg
ICAgICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtz
IGFyZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICArK21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAg
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0
Q2hhcigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciog
c3RyID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAg
Ly8gU3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFk
LgotICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZl
ciByZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAg
aWYgKCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgo
bGVuZ3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRT
dHJpbmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsK
LSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0g
bUluZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0K
LSAgICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAg
bVNpemUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05l
eHRTdHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUg
PSAwOwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9m
KCkgJiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdF
bXB0eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNv
bnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5n
TGVuZ3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAw
KSAmJiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50
IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5n
dGggPyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3
MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsK
IAotLy8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgot
Ly8gU3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4K
IGNsYXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAK
LSAgICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJy
b3JVbmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1FcnJvcjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRs
eSBiZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1J
bmRleDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9v
bCBlb2YoKSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0K
KyAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5n
W2luZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVu
Z3RoW2luZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGlu
dG8gYnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0g
ICAgLy8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMg
b25seSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBv
cHBvcnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmlu
Z2Z1bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1
ZlNpemUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRl
OgotICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtT
dGF0ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVC
bG9ja0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4
OworICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFy
KCk7Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRv
IHRoZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0
aGUgY3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0
cmluZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5
LgotICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUg
bGVuZ3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZh
bHVlIGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGlu
dCBpbmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0K
KyAgICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJl
YWRMb2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAg
ICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwot
Ci0gICAgLy8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5k
ZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAg
Ly8gU2l6ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4g
bUxlbmd0aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1F
cnJvcjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9
ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEs
MjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhF
Ul9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNl
IHBwCit7CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAg
IHZpcnR1YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikg
PSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNj
Y2E5Ni4uYjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSAr
NiwxNyBAQAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
I2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBw
cAogewogCi1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
KiBuYW1lLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAg
ICAgIFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAg
IG1OYW1lKG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVw
bGFjZW1lbnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1h
Y3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFt
ZTsKLQotICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2go
bVBhcmFtZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAg
ICAgICBkZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMp
Ci0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1S
ZXBsYWNlbWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1l
bnRzOwotICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAg
ICAgKG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3Ro
ZXIucGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBs
YWNlbWVudHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
by5oCmluZGV4IGUyNDMzMDYuLjYzYjMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApA
QCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDMy
IEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxz
dHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8K
K3N0cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5
cGUKICAgICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9Owog
Ci0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNy
byhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9r
ZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50
cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlw
ZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0
dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6
c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5W
ZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVy
KSBjb25zdDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJhbWV0ZXJzOworICAgIHN0ZDo6dmVjdG9yPFRva2Vu
PiByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1h
Y3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEzZjY4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwyOCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIp
LAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNz
KQoreworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAg
Ly8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBtTGV4ZXItPmxleCh0b2tlbik7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlOWVlYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKKyNpbmNsdWRl
ICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFu
ZGVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVy
KiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwor
CisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgTGV4ZXIq
IG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlh
Z25vc3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9QcmVwcm9jZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjEyY2ZhYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwyOSBAQAogCiAjaW5j
bHVkZSAiUHJlcHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRl
ICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotUHJlcHJv
Y2Vzc29yOjpQcmVwcm9jZXNzb3IoKSA6IG1Db250ZXh0KE5VTEwpCitQcmVwcm9jZXNzb3I6OlBy
ZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2Vu
aXplcihkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZVBhcnNlcigmbVRva2VuaXplciwgJm1N
YWNyb1NldCwgZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgIG1NYWNyb0V4cGFu
ZGVyKCZtRGlyZWN0aXZlUGFyc2VyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcykKIHsKIH0KIAot
UHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0KGlu
dCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQogewotICAg
IGRlbGV0ZSBtQ29udGV4dDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAg
IG1Db250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Ci19
Ci0KLWJvb2wgUHJlcHJvY2Vzc29yOjpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIEFTU0VSVCgoY291bnQgPj0w
KSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9
PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzZXQoKTsKLQotICAgIHJl
dHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsK
KyAgICByZXR1cm4gbVRva2VuaXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAK
LXZvaWQgUHJlcHJvY2Vzc29yOjpyZXNldCgpCit2b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2Vu
KiB0b2tlbikKIHsKLSAgICBzdGQ6OmZvcl9lYWNoKG1Ub2tlbnMuYmVnaW4oKSwgbVRva2Vucy5l
bmQoKSwgRGVsZXRlKCkpOwotICAgIG1Ub2tlbnMuY2xlYXIoKTsKKyAgICBtTWFjcm9FeHBhbmRl
ci5sZXgodG9rZW4pOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmgKaW5kZXggODg1YmI3MC4uZGRiZTEyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKQEAgLTcsMzQgKzcsNDIgQEAKICNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwogI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisj
aW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAi
VG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0OworY2xhc3Mg
RGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwogCiBjbGFzcyBQcmVwcm9jZXNz
b3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOwotICAgIH5QcmVwcm9jZXNzb3Io
KTsKKyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVI
YW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNv
dW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBs
ZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50
ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3Ry
aW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFz
c3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVl
IG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAv
LyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMg
b2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBj
b250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3Ig
YSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBp
cyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBib29sIHByb2Nlc3Mo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5iZWdp
bigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmVu
ZCgpOyB9CisgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOworICAgIFBQX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwogCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6
ZWQgc3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0g
ICAgVG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91dHB1dC4KKyAgICBNYWNyb1NldCBtTWFjcm9T
ZXQ7CisgICAgVG9rZW5pemVyIG1Ub2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIG1EaXJl
Y3RpdmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtTWFjcm9FeHBhbmRlcjsKIH07CiAKIH0g
IC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBw
cAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDog
ZmlsZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDog
ZmlsZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5m
aWxlKSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAg
ICBpbnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9j
YXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhz
LmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFs
aHMuZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5jcHAKaW5kZXggYTJlNzU5Yy4uODkzZDA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmNwcApAQCAtNiw1MCArNiw0OCBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1
ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9
IDE2OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAo
MSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46
OkxvY2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lk
IFRva2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXpl
KSB8IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdz
ID0gMDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIo
KTsKIH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxp
bmUsIGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNv
bnN0CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwot
ICAgIGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVy
biAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxh
Z3MpICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAg
ICAgICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9u
IGxvY2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9u
KGxvY2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9p
ZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkK
KyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZs
YWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRl
bGV0ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkK
K3sKKyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOwor
ICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOwogfQogCiBzdGQ6
Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tl
bikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9D
T05TVEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJ
RVI6Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBl
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFj
ZSgpKQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAg
IHJldHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi4wMmZkMGM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsODMgQEAKICNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tF
Tl9IXwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBU
b2tlbgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGlj
IExvY2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7
CisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAg
IC8vIFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRp
b24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAg
ICBJREVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9
CisgICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisg
ICAgICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAg
ICAgIE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05F
LAorICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAg
ICAgIE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01V
TF9BU1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04s
CisgICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAg
ICAgIE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09S
X0FTU0lHTgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRf
T0ZfTElORSAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFID0gMSA8PCAxCisg
ICAgfTsKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3Rk
OjpzdHJpbmcqIG1WYWx1ZTsKKyAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisK
KyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBj
b25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBv
biBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAg
ICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9P
Rl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOwor
CisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNf
TEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wg
c3BhY2UpOworCisgICAgaW50IHR5cGU7CisgICAgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0
aW9uIGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6
OnZlY3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9r
ZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRv
a2VuJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0
b2tlbik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfVE9LRU5fSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYjQyOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzM1IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIu
bCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXpl
ci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGlj
YWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgor
I2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZF
UlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZp
cnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmlj
IGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxl
eCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZp
bmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5
IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lP
Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlm
IHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICov
CisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4
X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3Qg
ZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBp
bnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNl
bHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQg
ZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3Vp
bnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAh
IEM5OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhf
TUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5k
ZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQor
I2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAg
ICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhf
TUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZp
bmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJf
TUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYK
KyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUp
CisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAg
ICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJf
TUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVY
SU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2Ut
Y2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxz
ZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBk
ZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNF
X0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9f
Y3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25z
dAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5k
LW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5
IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdl
ciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0
aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVk
IGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9f
VUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUg
cG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlf
VFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKwor
LyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBi
ZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmlu
ZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5
eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVm
aW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+
eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNy
byByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUg
ZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVm
aW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSAr
IDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVl
IHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBz
dGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisg
Ki8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZ
WVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2
ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9P
Rl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0
IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFy
dCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisK
Ky8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpF
CisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBt
dXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRo
ZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVG
X1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVG
X1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlw
ZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKwor
I2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9G
SUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVT
U19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hl
ZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNz
KG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRl
eHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAg
WVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1
Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAor
CQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBc
CisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4
dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVm
aW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5k
aWYKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlf
aW5wdXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNo
YXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwor
CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisK
KwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVk
aW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
CisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkg
aXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkv
KiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBh
bmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1
c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBm
ZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhl
IGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2
ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9h
dF9ib2w7CisKKyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwor
ICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5
X2J1ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JV
RkZFUl9OT1JNQUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMg
WVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJl
YWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGls
bCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkg
KiBwb3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhl
IEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgp
KSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBv
aW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVS
X0VPRl9QRU5ESU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUgKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVz
IGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0
ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5z
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
KyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICpp
bnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlf
QlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lk
IHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lk
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9p
ZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9p
ZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxvYyAo
dm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAodm9p
ZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2Ny
ZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUp
IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRl
cmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRf
Ym9sKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpF
ICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9i
b2wgPSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUg
eXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlv
dXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlf
dHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlz
Y2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4g
aGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24g
LSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5
eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5
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
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVk
ZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZ
UEU7CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUg
KHN0cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZ
X1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0
cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9
IHRydWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlu
cHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRp
b24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hp
bGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5M
b2MtPnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRl
eCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAg
Kyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxp
bmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5M
b2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXpl
KSBcCisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisj
ZGVmaW5lIElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9U
WVBFIHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUg
b2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisg
ICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJB
X1RZUEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBn
bG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklM
RSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoq
PCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19t
YXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlf
YnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9s
ZF9jaGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFy
ICp5eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBp
bnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19w
dHI7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3Rh
Y2s7CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFy
KiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50
IHl5X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3Jl
X2ZsYWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOwor
CisgICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNf
dCAqLworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKKyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUg
YXJlIGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisg
ICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmlu
ZSB5eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBz
Y2FubmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZp
bmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxz
LgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZv
ciBjb252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBw
c2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VY
VFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9p
biAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9v
dXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
aW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbGlu
ZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICog
cHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlT
VFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxU
WVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9p
ZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRl
biBieSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZ
WV9TS0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBwcHdyYXAg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3Rh
dGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNj
YW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGlj
IGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7
CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0
YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGlu
dCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFt
b3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlf
UkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisv
KiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0
cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0
IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndy
aXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBu
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4g
InJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJl
c3VsdCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19p
bnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZv
ciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkg
IT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJ
aWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9
PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGlu
IGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNl
IFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAx
LCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZigg
ZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGlu
IGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJy
bm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYK
KworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3Jp
dGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRl
ciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJz
IHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYg
eXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlm
CisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBn
cm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9T
VEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZu
ZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxf
ZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6
YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0
aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBl
YXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9E
RUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNU
WVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nh
bm5lcik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZ
U1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0
aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhh
dmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlf
VVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFj
aCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNl
bmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBU
aGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZ
WV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJl
Z2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAg
ICAvKiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAg
IHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJ
eXlnLT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7
CisjZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0g
MTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0g
c3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJcHBfY3JlYXRlX2J1ZmZl
cih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisKKwkJcHBfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBl
bmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9m
IHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5
X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJ
CWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgq
eXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJ
CQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJl
bnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJCXl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgz
ICk7CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9jdXJyZW50
X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKworeXlfZmluZF9hY3Rpb246
CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZP
UkVfQUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFj
Y2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5u
aW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJ
CQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKKwor
CVlZX0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBj
b3VudGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkg
YSBzaW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihDT01N
RU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSwor
Y2FzZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBj
YW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsreXlsaW5lbm87IH0KKwlZWV9CUkVB
SworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9
IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3Ig
cHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgaWYgKHl5ZXh0cmEtPmxpbmVTdGFydCkgewor
ICAgICAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgICAgICByZXR1cm4geXl0
ZXh0WzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5v
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRl
eHQsIHl5bGVuZykpOworICAgIH0KK30KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8qIEFueXRoaW5nIHRoYXQgc3RhcnRz
IHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCisvKiBSdWxl
IHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCitjYXNlIDExOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZ
WV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorCVlZX0JS
RUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZX0JSRUFLCitjYXNl
IDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVBSworY2FzZSAxNzoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERf
QVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9T
VUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMxOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMy
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsK
KyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9T
RVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAr
K3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4n
OworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZp
bGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0Yo
SU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VS
X0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUg
bG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0g
Jnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXll
eHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNv
dW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7
CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0
cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5M
b2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlm
aWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxl
ID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5j
bGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5
eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1F
TlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0
aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNl
IDM3OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0Zf
QlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0
aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkg
KHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBv
ZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
KwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBw
b3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBw
b2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJ
ZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZ
WV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmln
aHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlv
biAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2gg
Zm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBO
b3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9u
CisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3
aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFy
YWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8g
dGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0
ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJ
CQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4
dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1v
dW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2
aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlv
bmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUK
KwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICog
Zm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRo
ZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVp
bGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBz
bG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5
eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJ
LyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsK
KwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2Ug
RU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJ
CQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRf
bmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cg
c2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAq
IGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2Fu
bmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29y
ayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICov
CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwor
CisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0
aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJ
YnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWct
Pnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSgg
eXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
KworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJl
YWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXgg
c2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9m
IGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9
IC8qIGVuZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVh
ZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4g
YWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9F
TkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2Ug
PSB5eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWlu
dCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJP
UigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBt
aXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZm
ZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBp
cyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0g
WVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJh
Y3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkg
Ki8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsK
KwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkg
KiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJ
fQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3Zl
IGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9
IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7
CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZ
WV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3Qg
Z3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkg
Ki8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2No
YXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJ
d2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRo
ZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0
aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9C
VUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlf
Y19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciAp
CisJCQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlm
ICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXpl
IC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9j
aF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJz
LiAqLworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXpl
ICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQs
IHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEg
Yi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBz
Y2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0g
JmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92
ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSAp
CisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3Jl
IGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90
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
IGlucHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1
ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoK
KwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRo
YXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBu
ZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHBy
b2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcg
dG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAor
CQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNl
dCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKwor
CQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOwor
CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZ
WV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNj
YW5uZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJ
CQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2Fz
dCBmb3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNl
cnZlIHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwor
CisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJ
bW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFt
IGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhl
IHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0
ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVy
ZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVm
ZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2
b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9i
dWZmZXJfc3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAg
ICAgKi8KKwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVy
LiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisK
KwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVy
IHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5n
LCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIg
cHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3
YXlzIHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7
Cit9CisKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1
Zl9wOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0
YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBU
aGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMg
WVlfQlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
IEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJf
U1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZG
RVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nh
bm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXpl
OworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhl
IHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+
eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZl
cigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihi
LGZpbGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1
ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVy
KCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9p
ZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVO
VF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5u
ZXIgKTsKKworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlh
bGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29t
ZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNo
IGFzIGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lk
IHBwX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9i
dWZmZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5
X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0
aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHBy
ZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBj
YXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAq
LworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGlu
ZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAg
Yi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisv
KiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlf
SU5QVVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJl
IGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZ
WV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkK
KwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0
d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJh
bnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJ
ICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wg
PSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBz
dGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBh
bGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZm
ZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1
ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkK
KwkJcmV0dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBU
aGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBv
bGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsK
KwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
OworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNl
IHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBj
b3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30K
KworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNl
bnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQor
CQlyZXR1cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5u
ZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYg
KFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OworCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBB
bGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMg
c3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOwor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9u
IGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkg
KiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0
byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAg
ICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOwor
CQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJ
CSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0
YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsK
KwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRv
IHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyog
YXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZl
cl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0
YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJ
CW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwg
MCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0
aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lm
aWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZl
cgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZm
ZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0
aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6
ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwK
KwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5
IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJ
YiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9z
aXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5
X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAw
OworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6
ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55
eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7
CisKKwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9
CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRo
ZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBh
IHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQg
dG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAg
ICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5u
ZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBn
aXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBh
IEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRv
IHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBv
aW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5
Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JV
RkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAK
KwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFp
bGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBw
cGFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBp
ID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKwor
CWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCki
ICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hv
dWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxV
UkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9m
YXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJ
VF9GQUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNl
Y3Rpb24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJ
ZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBc
CisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1Nf
TElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hv
bGRfY2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJn
OyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55
eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0g
XAorCXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9u
cykgdG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRh
IGZvciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBu
dW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50
IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlm
ICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0
X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IHl5Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRw
dXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K0ZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBH
ZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4g
VGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNl
cl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9l
eHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVu
dCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVf
bnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMg
b25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGlu
ZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxp
bmVubyA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAq
IEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5w
dXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQor
ICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBi
dWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9
CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBj
dXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3Ry
ZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBw
X3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBw
c2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5
eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVn
IChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1
ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXls
bG9jICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXls
dmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxf
cGFyYW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUg
KiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5
eWxsb2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4
X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBz
byBpdCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtl
IHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBs
aWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jv
cy4KKyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sK
KyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFM
OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlz
Y2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAg
ICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVh
c2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5
Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxz
ICk7Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkg
YXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0
aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0
aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQg
YnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rp
b24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRl
ZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBw
YWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4
dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cyApCisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRf
ZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3Ig
cmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1
Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAq
cHRyX3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRy
X3l5X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9y
IHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICov
CisKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+
eXlfY19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
IE5VTEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAg
IHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChG
SUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3Ig
ZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVk
IGJ5CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8q
IHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNj
YW5uZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAq
LworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5V
TEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kg
dGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nh
bm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0
aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFy
dF9zdGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxM
OworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9u
LXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNh
bGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMo
IHl5c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50
IG9ubHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5
c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGls
aXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlf
ZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsg
KytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJM
RU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsr
biApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3Np
emVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFs
bG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAq
KSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25z
IHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNl
IHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBi
ZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9t
CisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBj
b252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJl
dHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBw
cGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIg
KikgcHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisj
ZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tl
bml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQor
eworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXpl
cjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tl
bml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNv
bnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBp
bml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sK
KyAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixt
SGFuZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFy
dCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAg
IHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBt
Q29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRT
Y2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRy
YSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJl
c3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6
OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxM
OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1
ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBs
b2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJh
Y2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNl
IHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVk
IHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9u
IHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGlu
ZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9p
ZCBkZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFu
ZGxlLgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTkla
RVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi40OTE0N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwK
QEAgLTAsMCArMSwzMTkgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jh
c2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6
CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAor
CitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9w
YXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCisl
eworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNp
bmNsdWRlICJUb2tlbi5oIgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVm
IHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVt
biB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxl
bm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVu
byA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAg
ICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisK
KyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6Oklu
cHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7
ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNv
dW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5k
ZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5k
ZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+
ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9J
TlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0
LnJlYWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5l
dmVyLWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9j
YXRpb25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tl
bml6ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJ
REVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30u
Ky0vKiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09D
VEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1b
MC05YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQg
ICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoi
LiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICov
CisiLy8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJy
ZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21t
ZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01N
RU5UKTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdM
SU5FfSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMg
aXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
cy4KKyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWdu
KDEsIHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklO
VkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBw
OjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQor
fQorCit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFO
VH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5U
OworfQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17
RVhQT05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcg
dGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4g
Ki8KKyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMu
ICovCisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSop
IHsKKyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5W
QUxJRF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNl
TG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9J
TkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7
Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIr
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9Cisi
Kj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQor
IiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOwor
fQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lH
TjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lH
TjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxl
YWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAg
IHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAg
ICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9D
SEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9j
YXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAg
IC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAg
Ly8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1
dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nh
bkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgw
LCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4
TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBh
cmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAg
ICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOwor
ICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5
eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAg
ICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7
CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpF
T0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6
U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUl
CisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBk
aWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95
U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50
IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDAp
KSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJp
bmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5p
emVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2Vu
LT52YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRT
dGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9
IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1D
b250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7
Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxl
ID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBp
ZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95
KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDVi
MzJmNzEuLmU5YzcwYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9w
YXJzZXIuc2gKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ci0jIEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5o
LCBhbmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wg
RVMgcHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGly
LyQxLmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0k
c2NyaXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGlu
ZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBy
dW5fYmlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVy
PSRzY3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5j
cHAKLWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRf
aGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRz
Y3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxp
bmVzIC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxl
CiB9CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3Nv
cgotcnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5p
emVyLmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2Nh
MDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHAubAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNh
dGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFs
IFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJ
TEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9k
ZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2Rl
ZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmly
c3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVt
biA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJl
c3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1h
eFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0
IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2
ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBi
aXNvbi1sb2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRp
b24gZXh0cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAg
ICAgICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1a
MC05XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxf
Q09OU1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoK
LUhFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAg
ICAgICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZS
QUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0K
LSUlCi0KLXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJ
REVOVElGSUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1l
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9
ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0
cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZV
TkM7Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtI
QVNIfWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZE
RUY7IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7
IHJldHVybiBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17
SEFTSH1lbmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVG
SU5FRDsgfQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFn
bWEgeyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNI
X0VYVEVOU0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtI
QVNIfWxpbmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXls
dmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
SURFTlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hF
WEFERUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5n
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lU
fSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/
KSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5
eXRleHRbMF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQot
XG4gewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBd
OwotfQotCi08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpz
dHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAg
IC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0r
e0lERU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNF
LgotICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9
PSA4OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBs
ZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykg
fHwgKHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBz
dGQ6OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwot
fQotCi1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1Ziwg
aW50IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1J
bnB1dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6
OmtFcnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2Rl
TG9jYXRpb24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZp
bGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9r
ZW46OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFk
ID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJy
b3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAg
QVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMs
ICZtTGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxl
eGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIo
KQotewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwot
ICAgIG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHAueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcC55CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJv
Y2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNz
b3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4
eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVO
IGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBB
UlNFUi4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2lu
Y2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigp
Ci0jZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBw
IgotJWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVu
aW9uIHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9r
ZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1z
dGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBw
cDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVh
c29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNv
bnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2so
cHA6OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRv
a2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhB
U0hfRU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRF
TlNJT04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9P
QkogSEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09O
U1RBTlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29u
ZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFj
ZW1lbnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAg
OiAvKiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xp
bmUKLSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8
IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9z
LgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAg
ICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAg
ICAgICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdc
bicKLSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAg
ICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2Jq
LCAkMSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFt
ZXRlcl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5k
ZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAk
NSk7Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBj
b250ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlv
bmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQy
ID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xu
JyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFj
cm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4n
IHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFj
cm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3Qg
J1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hf
RU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAg
fQotICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBI
QVNIX0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9M
SU5FICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9
IE5VTEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVt
cHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBu
ZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4o
QDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJf
bGlzdCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNo
X2JhY2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAg
IH0KLQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAg
ICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwot
ICAgIH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAg
ICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2Vu
X2xpc3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwot
ICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2Vu
IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQot
OwotCi1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9
Ci0gICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4K
LTsKLQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2Vu
KEAxLmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewot
ICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAk
MSk7Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6
VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJ
REVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElE
RU5USUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdb
JzsgfQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0g
ICAgfCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcp
JyB7ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQg
PSAnfSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsg
fQotICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAg
fCAnKicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7
ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAn
Jic7IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQot
ICAgIHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAn
OycgeyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQk
ID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19
Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0K
LQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcg
PSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5l
IDEzICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZ
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
aWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMg
Ki8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNp
ZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAv
KiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0j
aWZkZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5l
IHl5Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2Rl
ZmluZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2li
bHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBh
cnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQg
dG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUK
LSAqIGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQg
aW50KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZu
ZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5F
Ul9UCi10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5j
ZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFj
cm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5f
cgotI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0
cmFfcgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55
eXRleHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
c19saW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2JzX2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgot
Ci0vKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRv
IHRha2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5
IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4u
Ci0gKi8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNs
YXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRl
ciBoYW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFU
RSBhbGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NU
QVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAot
Ci0vKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAq
LwotI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUg
KyAxKQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3
IGZpbGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVy
ICkKLQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1
bHQgaW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZf
U0laRSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91
Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0g
Ki8KLSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXpl
b2YoeXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUK
LSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9D
T05USU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVP
Ql9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0
aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAg
ICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXls
ZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBz
Y2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAg
ICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0
cmllZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4g
YSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBu
b3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdv
cnRoIGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAg
ICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAg
IGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAt
LXl5bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBi
dXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3Ry
ZWFtLiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBp
bnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxl
c3NfbWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0g
ICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0g
ICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAot
ICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQo
IGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9TSVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5
X3NpemVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNk
ZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQot
ICAgIHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAg
ICAgICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyog
Y3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5w
dXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNo
YXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyog
TnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBF
T0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0g
ICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVh
dGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91
bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9p
c19vdXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIg
aW5wdXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9y
IGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJl
YWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBl
YWNoIG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAg
LyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBs
aW5lLgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQg
bWF0Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9s
OwotCi0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBp
bnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyog
V2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhl
Ci0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQot
ICAgIGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2Rl
ZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBi
dXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFy
ayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAg
ICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4g
IFdlIG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwg
dGhvdWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgot
ICAgICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVz
IHRvICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2Fu
IGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3
IGlucHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0K
LSAgICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdl
IHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRo
ZQotICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBn
ZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRo
ZSBzdGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1
ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVs
IHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdo
ZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmlu
ZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBw
cF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NU
QVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZG
RVIgLHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpi
YXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFU
RSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMs
aW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXpl
X3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0K
LSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0g
ICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRf
Ym9sKGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wK
LSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZm
ZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5l
IFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyog
QmVnaW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NL
SVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGlu
dCB5eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGlj
IHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUg
Y3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9u
ZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9l
cnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9u
ZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0
aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZp
bmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwK
LSAgICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hv
bGRfY2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAotICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNf
aW5mbwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJf
dCB5eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
MTA1XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAg
MjIsICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEs
ICAgMjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAg
MTcsICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0g
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAs
ICAgIDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAg
IDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAg
MTMsICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAg
ICAgICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAg
IDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCi0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUs
ICAgIDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAg
IDUsICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEs
ICAgMTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAg
IDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUs
Ci0gICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAg
MTMsICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAx
NSwgICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwg
ICAzMCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9t
ZXRhWzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEs
ICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAg
IDYsICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcs
ICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAg
IDcsICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Jhc2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAg
MTEsICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzks
ICAgNzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAg
ICAxNTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAx
NTQsCi0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAs
ICAxMzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAx
MzUsICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQs
ICAxMjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAx
ODUsICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIs
ICAxODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAx
ODUsICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUs
Ci0KLSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwg
IDEyNiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzExMV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAg
MTA2LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0g
ICAgICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTld
ID0KLSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwg
ICAgNywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAx
NSwgICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywg
ICAxNCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAx
NiwgICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAg
ICAyNSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAx
OSwKLSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywg
ICAzNywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAy
MCwgICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywg
ICAzNywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1
NCwgICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwg
ICAzMCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAg
IDk3LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAx
LAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAg
IDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4
LCAgIDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAg
MTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3
LCAgIDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAg
IDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcw
LCAgIDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAot
ICAgICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2
LCAgIDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAg
MiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwg
ICAgMiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAg
OSwgICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywg
ICAxNiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAy
MCwgICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwg
ICAxMCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAy
OSwgICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwK
LSAgICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAx
NCwgICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwg
ICAxNCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAg
MTAyLCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1
LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAg
IDg3LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5
LCAgMTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAot
ICAgICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcx
LCAgIDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAg
IDYwLCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUy
LCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAg
IDM5LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEy
LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQKLSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBt
YXRjaCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0
Y2hfZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyog
VGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAq
IGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpF
Q1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVf
dXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmls
ZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29y
LgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3Jh
bW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5h
c3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1
ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FD
VElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGlu
ZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsg
MTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkg
XAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAot
c3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50
IGxlbik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6
Q29udGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNj
YW5uZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQu
IE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0K
LSAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4g
dGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9y
OwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBz
dGFjay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBv
ZiBzdGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwg
U3RhY2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5
X25fY2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAg
aW50IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3Rh
cnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90
eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwot
Ci0gICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlf
bW9yZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXls
bG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQg
eXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVz
dCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAg
KiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2
YWwgeXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxv
Y19yCi0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBs
ZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5u
ZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFk
ZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwot
Ci1pbnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9k
ZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1
Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRy
YSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZ
UEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4g
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIg
KnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJl
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFt
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZ
UEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9z
IGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlv
bnMgaW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZk
ZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vu
ZGlmCi0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0
cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0j
ZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVu
ICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVm
IFlZX05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hf
c3RhdGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3Rh
dGljIHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBz
dGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBB
bW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZ
X1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQot
LyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91
dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1
dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3
cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlv
dXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGlu
ICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1Zixy
ZXN1bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAot
ICAgICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwK
LSAgICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7
ICsrbiApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICgg
YyA9PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAg
ICBpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJl
c3VsdCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAg
ICBlcnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4
X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAg
ICAgICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAg
ICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVk
IiApOyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAg
ICAgICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAg
ICAgICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24g
YWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIg
LQotICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1
c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1
bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5l
IHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50
cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZ
X1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlm
Ci0KLS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgot
I2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5u
ZXIpCi0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5k
IHByb3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nh
bm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJz
LgotICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0
ZXJuIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZ
X0RFQ0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFt
LCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8q
ICFZWV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNo
IHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICov
Ci0jaWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYK
LQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYg
WVlfQlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9S
VUxFX1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXls
ZW5nIC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4g
c2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAot
ewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdp
c3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwot
Ci0gICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2lu
aXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNl
bmRpZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+
eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEg
eXlpbiApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0
ICkKLSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAg
ICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAg
ICAgIH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBp
cyByZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
Ci0KLSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRp
b24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBy
dW4uCi0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9
IFlZX0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3Ap
XTsKLSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUg
KCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRf
c3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlm
ICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0g
eXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAg
eXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoK
LSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAg
IFlZX0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09G
X0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwg
eXlsZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4n
ICkKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAg
IHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlv
bjogIC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8K
LQotICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlv
biBzd2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAg
ICAgICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAg
ICAgICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlf
ZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRl
eHQgKi8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9O
OyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFs
LT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhB
U0hfREVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55
eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXln
LT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBl
eHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVf
RlVOQzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEw
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhU
RU5TSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1Z
WV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1j
YXNlIDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0
cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAg
IFlZX0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0
ZXNwYWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNo
IGVvbCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsK
LSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VP
RihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgot
WVlfUlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0Zf
QlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90
IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0
Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAg
ICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAg
ICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
LyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAg
ICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgot
ICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxs
ZWQKLSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3Vy
ZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBh
bmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2Ug
dG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlv
biAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdp
bGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2Zp
bGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAv
KiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0
aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlf
Y19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBh
c3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0
cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUp
LiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0g
ICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7
IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUg
eXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAg
ICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAg
ICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAq
IHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAg
ICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAg
ICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAg
ICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAot
ICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0K
LSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50
X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwot
ICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290
byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2gg
KCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2Fy
ZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZl
IHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVw
Ci0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFs
Ci0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0
bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVy
biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAt
IGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5l
ZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAg
ICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1Rf
Q09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAg
ICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0
OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2Ug
RU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0g
ICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBp
bnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlv
biBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19
IC8qIGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVh
ZCBpbiBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4g
YWN0aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9T
Q0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FD
VF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRf
YnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3Qg
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFy
ICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19t
b3ZlLCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0g
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBp
bnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyog
RG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAg
ICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREog
PT0gMSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xl
IGNoYXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBm
aW5hbCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VO
RF9PRl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZp
cnN0Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3Zl
IGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0g
KGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9y
ICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0g
Kihzb3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBk
byB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAg
ICAgKiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAt
IDE7Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsg
LyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAg
ICAgICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAg
ICAgICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAg
ICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlf
aXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBu
ZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3
X3NpemUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5
X2J1Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGItPnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAo
Y2hhciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9C
IGNoYXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlf
Y2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdl
IGRvbid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0g
ICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRB
TF9FUlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1
ZmZlciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5
X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAg
ICAgICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBp
ZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9f
cmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEu
ICovCi0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXpl
X3QpIG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+
eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3Zl
ID09IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBF
T0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5u
ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZ
X0JVRkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxz
ZQotICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5
eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJy
YXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5
X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5
Zy0+eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCki
ICk7Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAg
ICB5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
MF07Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
LQotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwot
Ci0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3Ag
PCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEp
OwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVu
dF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3Rh
dGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAg
ICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4g
eXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtl
IGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAg
bmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAg
IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50
IHl5X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0
aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQot
ICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3Vy
cmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewot
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsK
LQotICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lm
bmRlZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlu
cHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19i
dWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5
X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgot
ICAgICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRo
ZW4gaXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0
aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlf
Y19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25f
Y2hhcnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAg
ICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXln
LT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2Nf
YnVmX3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2Fu
bmVyICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1Rf
TEFTVF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2Ug
eXlfZ19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11
bGF0ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBu
ZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVm
b3JlCi0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIu
Ci0gICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRD
SAotICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAg
ICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIg
c3RhdHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVy
KTsKLQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAg
ICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZ
WV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAg
ICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyog
Y2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAg
IC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55
eV9jX2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAo
YyA9PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ICkKLSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7
Ci0gICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVm
IFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVu
Y3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4K
LSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAg
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZl
ci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90
b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlz
IGVudGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVm
ZmVyX3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIp
OwotICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQot
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93
IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkp
IHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tl
ZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRv
IGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJf
c3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIg
PSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7
Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAg
ICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0
ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBB
IHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNp
emUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVy
ICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZ
WV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYg
KCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0K
LSAgICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUg
c2l6ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVm
ZmVyIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBh
bGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9j
aF9idWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsK
LQotICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBi
OwotfQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3Jl
YXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBz
dXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1
ZmZlciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciAp
OwotCi0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFs
aXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21l
dGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2gg
YXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQg
cHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2Zs
dXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7
Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVu
dCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxs
ZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAg
KiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1
bW4uCi0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBi
LT55eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0K
LQotICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBv
ZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUg
bmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZm
ZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9m
bHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0g
MDsKLQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMu
ICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRl
LgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
LSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55
eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0g
ICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUg
bmV3IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3
aWxsIGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3
X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBu
ZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9
PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlz
Y2FubmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3Rv
X2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAg
ICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAg
ICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0g
ICAgICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJl
cGxhY2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3
X2J1ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0g
ICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUg
dG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29t
ZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2Rl
bGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9
Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAg
R3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lk
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBu
dW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAg
ICAgIC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2Ug
ZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBz
dGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVk
aWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1f
dG9fYWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWct
Pnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0
YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVt
X3RvX2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAo
eXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRo
ZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQg
Z3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90
b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAg
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxv
YwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1
cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xv
dHMuKi8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopKTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwot
ICAgIH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJl
Y3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBi
YXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRl
cyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9i
amVjdC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNl
LCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVS
X1NUQVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXpl
LTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZl
IHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZ
X0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAs
eXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlf
YnVmX3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwot
ICAgIGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291
cl9idWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hh
cnMgPSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAg
Yi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVy
KGIgLHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgo
KSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0
ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIg
c3RhdGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1h
eSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkg
aW5zdGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNo
YXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBf
c2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0
dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5l
eHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBs
ZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4g
dGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0
ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAv
KiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGlu
ZyBFT0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAq
KSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7
Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVm
W2ldID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVz
X2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZl
cihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9r
YXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAg
ICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZl
ciA9IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3Rh
dGUgKGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5
Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAg
ICAgICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0
YXJ0X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXpl
ID0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAg
aWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9z
dGFjayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9j
KCh2b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0g
ICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiAp
OwotICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3Rh
Y2tfcHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAg
c3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBp
ZiAoIC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXln
LT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3Rh
dGljIGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0K
LSNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5k
aWYKLQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNc
biIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmlu
ZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5
bGVzcwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7
IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsg
XAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAg
ICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21h
Y3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAg
bWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiog
R2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0
cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0v
KiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0
aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5w
dXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LUZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlp
bjsKLX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBy
ZXR1cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNl
dCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRo
ZSBzY2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lh
dGVkIHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5l
ZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7
Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9u
dW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lk
IHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0KLSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4
aXN0cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5
eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlz
Y2FubmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNl
dCB0aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50
ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVt
biBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlm
ICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNl
dF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAg
IHl5Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRo
aXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBh
cmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBz
ZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWlu
ID0gaW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0
X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1
ZzsKLX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBt
ZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBw
cHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9j
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAot
dm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12
aXNpYmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVh
dGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBm
dW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVu
dC4KLSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBp
bnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2Fu
X3QqIHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwp
ewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0g
ICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3Qg
eXlndXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsK
LSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
IC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxz
LiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9i
YWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRf
Z2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhh
cyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQot
ICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQu
IE5vdGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIs
IGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVh
c29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNs
YXJhdGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVu
dCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4K
LSAqLwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5l
ZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1
bW15X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95
eWd1dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJu
byA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlf
Z2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICks
ICZkdW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwp
ewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAg
IAotICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9p
bml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgq
cHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAg
cHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAg
ICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRp
YyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIElu
aXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVy
LgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBz
byBkb24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwot
ICAgIHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWct
Pnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9
IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1h
aW4uYyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQg
PSBzdGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJ
TEUgKikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJu
byBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQot
ICAgICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3Ro
IHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0
cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0
YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JV
RkZFUil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAg
ICBwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95
IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5
eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERl
c3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+
eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
ID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBp
biBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgo
KSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9n
bG9iYWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJl
ZW50cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsK
LSAgICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJu
YWwgdXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBp
ID0gMDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQot
I2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0
IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwot
ICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsK
LX0KLSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12
b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2lu
ZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFy
KiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5l
cmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBi
b3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAq
IGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVy
c2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAg
ICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZv
aWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUo
IChjaGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAq
LwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyog
ZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhl
IGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJ
RklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAg
QVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0K
LSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7
IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3Ry
W2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3Ry
aW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5h
bWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4
U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5l
b2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9y
Tm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAg
aW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlv
bihwcGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1J
bnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5j
b2RlTG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1
dC0+cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0g
cHA6OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBucmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVCht
TGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAg
QVNTRVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVy
ID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF90YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlz
b24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBs
ZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwg
eW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFs
bCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawot
ICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0
IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1v
ZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5h
dGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2Vs
ZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3Bl
Y2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVz
dWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRp
b24uCi0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyog
QyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5
Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2Vy
LiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5
eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhp
cyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1p
Z2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBz
b21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRl
ZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VT
IE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24g
b3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwot
I2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0j
ZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwot
I2RlZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxT
UF9ORUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFt
ZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAot
I2RlZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUg
eXljaGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMg
cHBuZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVm
IFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0g
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhB
U0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0g
ICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNI
X0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2
NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFT
SF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZF
UlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JK
ID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQg
PSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2
Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmlu
ZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVG
IDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2Rl
ZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklO
RUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAot
I2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2Rl
ZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUg
SEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBG
TE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29w
eSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5n
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZp
bmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0v
KiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVH
IDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNp
ZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZ
WUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5k
aWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9U
QUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZ
WVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZ
U1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBw
OjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAx
ODcgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZ
UEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQot
I2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10
eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3Rf
Y29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7
Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRy
YXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVf
SVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2Vy
IGRlY2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwg
WVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNo
Q29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwot
c3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0K
LQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYg
c2hvcnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5U
OCB5eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50
ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0
eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10
eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50
IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZ
VFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVk
ZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5
eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVf
VFlQRV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQg
c2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0la
RV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUg
PHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUg
WVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQK
LSMgZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0x
KQotCi0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMg
ICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
LSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkK
LSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1z
Z2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5p
bmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dO
VUNfXwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlV
U0UoZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0
byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5k
ZWYgbGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQot
c3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsK
LX0KLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NF
Ci0KLS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5l
Y2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlm
IFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZB
X0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8
bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5l
IGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxv
Y2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0
ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYg
X1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBl
bmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxM
T0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBk
ZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAo
MCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0
IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNr
LAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4g
IFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2Vl
ZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cg
Zm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwot
IyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNh
IDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFM
TE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElN
VU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NU
RExJQl9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxv
YykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAg
IGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j
ICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgot
IyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MK
LSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYK
LSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmlu
ZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEg
ZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZp
bmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAg
fHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0g
ICAgICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJ
QUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNr
IG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZ
WVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhl
IG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8K
LSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAx
KQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwg
c3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19C
WVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZ
WVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01B
WElNVU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlD
T1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZ
WUNPUFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJv
bSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09Q
WShUbywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAg
ICAgXAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAg
ICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyog
UmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhl
Ci0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQg
YW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdp
dmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8g
YSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwot
IyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5
c2l6ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgq
U3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8q
IFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0j
ZGVmaW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAq
LwotI2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJt
aW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9m
IG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51
bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0g
TnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFO
U0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxF
WC4gICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0K
LSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1
bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVO
REVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBj
b3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0
cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMz
LCAgICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAg
NDUsCi0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4
IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwg
ICAgIDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAg
ICAxOSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUw
LCAgICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAg
IDcyLCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgs
ICAgIDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwK
LSAgICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEy
NSwgICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAg
IDE0MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1
Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBS
SFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgs
ICAgICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwg
ICAgNTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAg
MywgICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAg
ICAyMywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIx
LCAgICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEs
Ci0gICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAg
NTQsICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwg
ICAgLTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAx
NCwgICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAg
ICAtMSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAg
IDI1LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEs
ICAgIDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAg
LTEsICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwg
ICAgNTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAg
ICAyNiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0x
LCAgICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAg
IC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUs
ICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwK
LSAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0
MywgICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAg
ICA0NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBy
dWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAg
ICA3MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0
LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAg
MTEyLCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAx
MzMsICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2Mywg
ICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4
MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAg
IDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAg
MTk4LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8
fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVN
XSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhl
IHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAq
Lwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVy
cm9yIiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAi
SEFTSF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhB
U0hfRU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhB
U0hfRVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJ
TkVfT0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NP
TlNUQU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1sn
IiwKLSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICIn
LSciLCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwg
Iic9JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIs
ICJsaW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlz
dCIsICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAot
ICAiY29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlm
Ci0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0
b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2
LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQs
Ci0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAy
NzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwg
ICAgNDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0
NiwgICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAg
ICAzOCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5k
aWYKLQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZ
WU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0g
ICAgICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAs
ICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwg
ICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1
NSwgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3
LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAg
NTgsICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9z
aW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAg
ICAgMSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1O
QU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5V
TSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVy
bwotICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAg
MzcsCi0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0g
ICAgICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQs
ICAgICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwg
ICAgMTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAx
NSwgICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAw
LCAgICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAx
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYs
Ci0gICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGlu
IFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNk
ZWZpbmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtd
ID0KLXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEw
LCAgICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwK
LSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1
LCAgICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAg
LTU1LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAg
MzMsICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0x
NSwgICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19
OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTI3LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQot
LyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRF
LU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCBy
ZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJv
LCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJv
ci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAg
ICA1MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5
LCAgICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAg
ICA3MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAg
IDkwLAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAg
IDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAot
ICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAg
NTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
OCwgICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgIDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0g
ICAgICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAx
OCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDggeXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywg
ICAgMjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAy
MSwgICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwg
ICAgMjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAg
ICAyMiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAg
IC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwK
LSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAg
IDExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAot
ICAgICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAg
MTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0g
LS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBz
dGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9
Ci17Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0g
ICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwg
ICAgMjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAy
MiwgICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUy
LCAgICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAg
IDIyLCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMs
ICAgIDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsK
LQotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFy
aW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmlu
ZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgot
I2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAg
Z290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJy
b3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNp
dGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0ND
IHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQot
I2RlZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5H
KCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAg
ICAgICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYg
KHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAg
ICAgICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5
eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sg
dXAiKSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQot
I2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZ
TExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05d
LgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3
aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVk
KS4gICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZ
TExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAg
ICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9s
aW5lOyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywg
MSkuZmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhT
TE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVt
biAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1
cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAg
ICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAg
IChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwK
LSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDAp
KQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9u
IG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxs
eTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3
aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xP
Q0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FU
SU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQu
JWQtJWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYyku
Zmlyc3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9j
b2x1bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgo
dm9pZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4
JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMg
ZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNl
Ci0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBF
bmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRl
ZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRl
ZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRG
IEFyZ3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9T
WU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVn
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBU
aXRsZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJy
LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQq
IGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUg
Knl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6
Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVy
bjsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZ
WVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQs
IHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0
KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGlu
dCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAq
IGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2Nh
dGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAg
ICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNv
bnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0g
IGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2Vu
ICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1
dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5U
ICh5eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7
Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5
bG9jYXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBm
cm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K
LSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAot
eXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkK
LSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5
dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0g
IFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9w
OyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJl
ZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRp
YyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwg
aW50IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5
X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQ
RSAqeXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6
Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVd
OwotICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxl
XTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5l
ICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9s
cyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsr
KQotICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwot
ICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlp
XSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAg
ICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNv
bnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVm
aW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
IFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5
eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyog
Tm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXpl
ZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRl
YnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBk
ZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRl
ZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklO
VChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5p
dGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBU
SAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBt
YXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlm
IHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBu
b3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBp
ZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkK
LSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMu
ICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNl
bmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMg
IGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5
c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAq
LwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJ
WkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVf
VAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0g
IFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisr
KQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgot
Ci0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBf
U1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBj
cHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJl
c3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkg
KGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgot
eXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNo
YXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hh
ciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0g
ICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgot
Ci0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZ
U1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tz
bGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJp
c3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3Ry
aW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90
aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5
eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1
cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICov
Ci1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5
c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4g
PSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0g
ICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNl
ICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdc
XCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9z
dHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0
OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAg
ICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlm
ICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5
bjsKLSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICgh
IHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNw
eSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlS
RVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlD
SEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBj
b3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVT
VUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51
bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2Fz
ZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2ls
bCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0g
ICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3Ig
KGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9
IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9
IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBl
ID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFt
ZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXpl
MDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0g
MDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAg
ICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAg
ICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0
aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhl
IGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIp
OwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBv
ciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4
cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlm
bXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVu
ZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGlj
IGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0
aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6
ZW9mIHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0g
ICAgICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAg
ICAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZp
eCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2
ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAg
aW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhp
biBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNo
ZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGlt
IDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50
ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9
IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5
eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5d
ID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50
ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5
eWNvdW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRb
c2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgfQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5
eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5
eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5
eXNpemUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAg
ICAgICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1h
dCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNp
emVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXpl
MTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElN
VU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRm
LCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBE
b24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAg
ICAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAg
Ki8KLSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAg
ICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYg
KCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAg
ewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAg
ICAgICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZF
UkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wu
ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
Ci0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUs
IFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5
dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAg
ICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9j
YXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5
eXZhbHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQot
ICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5U
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0
eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0K
LS8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNp
ZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5
cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250
ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8q
ICEgWVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNl
LiAgfAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJT
RV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAq
WVlQQVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6
Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6
OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRo
ZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9m
IHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0
YSBmb3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGlu
dCB5eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0
b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQg
eXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9S
X1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0
ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1z
Z2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYK
LQotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0
ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAot
ICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBz
dGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0
byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2su
ICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYg
Knl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50
aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlT
VFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRp
b24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAq
eXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVy
ZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFu
Z2VbMl07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09
IChOKSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBh
bmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQ
RSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMg
b24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBu
byBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlE
UFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsK
LSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsg
ICAgIC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBz
dGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0
aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRo
ZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlh
bGl6ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9
IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1
bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xp
bmUgICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5
eWxsb2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBp
biB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3
aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2
ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0
YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRl
OwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAg
IC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxl
bWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQot
I2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8g
cmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhh
dCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4g
ICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sg
cG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRh
dGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAg
ICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICov
Ci0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAm
eXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlz
aXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXpl
b2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxz
MTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2Ug
Lyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290
byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIg
b3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZ
WU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwot
Ci0gICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlh
bGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlT
VEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8g
eXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFD
S19SRUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRl
ZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFD
S19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxv
dyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5
eXZzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwK
LSAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlm
ICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQot
Ci0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7
Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1g
LS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2lu
ZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2Vu
IGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBG
aXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1h
aGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZ
WVBBQ1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0
IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAv
KiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFk
IHN5bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQ
UklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZ
TEVYOwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hh
ciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBl
bmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9
IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tl
biBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUg
cHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8K
LSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5
dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0g
eXl0b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBp
ZiAoeXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxF
X05JTkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3Rv
IHl5cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7
Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAg
eXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0g
IFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7
Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8K
LSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3Rh
dGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAg
Z290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVs
dCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAg
eXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJy
bGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1
bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZ
WUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlv
bjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5l
IHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50
ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWdu
aW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0
IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1h
eSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwot
Ci0gIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5
eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRj
aCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RP
KGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBj
b250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNw
WygxKSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVu
ZCgpKTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5l
TWFjcm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmos
ICh5eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkp
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29u
dGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNy
bzo6a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0u
dGxpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2
c3BbKDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgot
Ci0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIp
IC0gKDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwg
Y29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRp
b25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0g
KDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2Nr
KGNvbnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5
dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsg
KHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSld
KS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRs
aXN0KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+
cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElE
RU5USUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpU
b2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkg
LSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAg
ICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwu
dGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVz
aF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0g
KDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIp
IC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAg
ewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5l
dyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAo
MSldLml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgx
KV0pLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxP
QVRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6
VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFso
MSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0
NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NDg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDQ5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJy
ZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5
eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAq
Kyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJl
ZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQg
b24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIg
cmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBn
b3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlz
dGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0
ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5
biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGlu
ZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJy
bGFiOgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9y
dCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5
bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNv
bnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVf
VCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAo
eXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElN
VU0pCi0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAg
ICAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9D
X01BWElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0g
ICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5
bXNnKTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsK
LSAgICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAg
ICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQot
Ci0gICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewot
ICAgICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwot
ICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAg
ZWxzZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5
bnRheCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8g
eXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXll
cnJvcl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7
Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0
b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5
eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5k
IG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJP
UlQ7Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjog
ZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNv
bnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVs
c2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUg
ZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxh
YiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgot
Ci0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVy
IGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3Jl
IG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05E
Ki8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxz
cFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUg
d2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNU
QUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVS
Uk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNo
IHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0g
ICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBB
Q1RfTklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5
eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAg
IHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4p
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1
cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICov
Ci0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9y
X3JhbmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwK
LSAgICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAg
ICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0g
ICAgWVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsx
XSA9IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hh
bmdlIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWls
YWJsZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3Jhbmdl
IC0gMSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0
b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5
dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIg
LS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1
cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRs
YWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVy
bjsKLQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0
aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29u
dGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZh
bGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlF
T0YgJiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNj
YXJkaW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwot
ICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0g
IHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVw
OiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250
ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwot
ICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0j
aWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNL
X0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8K
LSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlM
VFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17
Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJv
b2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRl
eHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNl
KCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8g
dHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFi
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcF90YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29u
IHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJm
YWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChD
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
Rm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMu
ICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5
cGUgewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNI
X0lGID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2
MiwKLSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhB
U0hfRU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAy
NjcsCi0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwK
LSAgICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhB
U0hfREVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAg
SU5UX0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURF
TlRJRklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFT
SCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZp
bmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hf
RUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQot
I2RlZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNI
X1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVS
U0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkog
MjcyCi0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAy
NzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0K
LQotCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNM
QVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6
OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9y
KiB0bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsK
LSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVm
aW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGlu
dCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBp
bnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyog
b2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RF
Q0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGls
aXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2Fs
bG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlz
IG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgor
I2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5h
bWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxT
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24g
U1RMIHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09N
TU9OX1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUg
eDsgfQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVs
ZXRlIHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1P
Tl9TVExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
cmVwcm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IElu
aXRDUFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50
IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5G
cm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJs
ZSAqYXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQu
LjE5ZGJkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNl
bmRpZgogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdXRpbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2
ICs2Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwog
fSBTdHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFy
ICpzKTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC0xMjYsNiArMTI5LDI1IEBAIGludCBGcmVl
U2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJlZUNQUCgpKTsKIH0KIAorLy8gRGVmaW5lIHRo
aXMgdG8gMSB0byB1c2UgdGhlIG5ldyBsZXhlci4KKyNkZWZpbmUgQ1BQX1VTRV9ORVdfTEVYRVIg
MAorCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworI2lmIENQUF9V
U0VfTkVXX0xFWEVSCisgICAgSW5wdXRTcmMqIGluID0gTGV4ZXJJbnB1dFNyYyhjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpOworICAgIGlmICghaW4pIHJldHVybiAxOworICAgIGNwcC0+Y3VycmVudElu
cHV0ID0gaW47CisjZWxzZQorICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OworICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworI2Vu
ZGlmCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBzdHJfZ2V0Y2goKQogICogdGFrZXMgY2Fy
ZSBvZiByZWFkaW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgK
aW5kZXggMjMzZDFkYy4uYjY3YzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKQEAgLTY5LDkg
KzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IElu
aXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVy
LiAKLWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5u
aW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVy
SW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAg
ICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZv
TG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidz
LkluZm8ubG9nCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3Rp
Y2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExp
bmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVO
dW1iZXIodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCmluZGV4IGMxOWY3OWMuLjIzMjAzZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCkBAIC0xMDUsNyArMTA1LDcgQEAgU3ltYm9sICpOZXdT
eW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5k
IGtpbmQpOwogU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUs
IGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChT
Y29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7CiBTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNj
b3BlLCBpbnQgYXRvbSk7Ci12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7Cit2b2lkIENQ
UEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7CiAKIAogI2VuZGlmIC8vICFkZWZpbmVkKF9f
U1lNQk9MU19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5kZXggZDY1OGMxMi4uYjk0YzA1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci90b2tlbnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdHJpbmcu
aD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
ICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zbGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCkBAIC0yNjUsNiAr
MjY2LDggQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXls
dmFscHApCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50
IGx0b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNo
YXIgY2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9r
ZW4gPj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVh
bSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICAgICBsZW4gPSAwOworCSAgICBhY2N1
bSA9IDA7CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdo
aWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIGlmIChj
aCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAg
ICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFt
ZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwogICAgICAgICAg
ICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBiYXNlID0gODsKICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7CisgICAgICAgICAgICAgICAg
aWYgKGlzZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSBjaCAtICcwJzsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCisgICAgICAgICAgICAgICAg
ICAgIGNoX3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7CisKKyAgICAgICAgICAgICAgICBp
ZiAoY2hfdmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAg
ICAgICAgICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKKyAgICAgICAgICAgICAgICBj
aCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN5bWJvbF9u
YW1lW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAg
ICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAg
ICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAg
ICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIHN5bWJvbF9uYW1lKTsKKyAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlICcoJzoKICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUo
cFRvayk7CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpm
cCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgIHN3aXRj
aCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAgICAgICAgY2FzZSBD
UFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0
b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFs
cHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfU1RS
Q09OU1RBTlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfRkxPQVRD
T05TVEFOVDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZh
bCk7CkBAIC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRv
a2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQotICAgICAg
ICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2Vu
KSk7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAgICAgICAgc25wcmlu
dGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5o
CmluZGV4IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaApAQCAtNDgsNiAr
NDgsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUgX19UT0tFTlNfSCAx
CiAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
YXJzZXIuaCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDdlYjU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAK
QEAgLTAsMCArMSw4NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworLy8gRklYTUUobXZ1
am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4g
b3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBjYW4gdmFyeSBiYXNlZCBvbiB0aGUg
dmFsdWUgb2YgdGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3VsZCByZXN0cmljdCB0
aG9zZSBhcyB3ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNl
UmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1OdW1F
cnJvcnMgPSAwOworCisgICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVwZW5kZW5jeSBncmFw
aCBkb2VzIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxscyByaWdodCBub3cs
CisgICAgLy8gc28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgorICAgIHZhbGlkYXRlVXNl
ckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisKKyAgICAvLyBTdGFydGluZyBmcm9t
IGVhY2ggc2FtcGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGdlbmVyYXRl
IGFuIGVycm9yIGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBhIG5vZGUgd2hlcmUgc2FtcGxlciBk
ZXBlbmRlbnQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBmb3IgKFRHcmFwaFN5bWJvbFZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxlclN5bWJvbHMoKTsK
KyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAgICsr
aXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5bWJvbCA9ICppdGVy
OworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVy
c2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAg
ICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAg
ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
ID0gKml0ZXI7CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1c2VyIGRlZmluZWQg
ZnVuY3Rpb24gaXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUp
Cit7CisgICAgKyttTnVtRXJyb3JzOworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwor
ICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1l
dGVyKQoreworICAgIC8vIEZJWE1FKG12dWpvdmljKTogV2Ugc2hvdWxkIHJlc3RyaWN0IHNhbXBs
ZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGJlaW5nIHRleHR1cmUgY29vcmRpbmF0ZXMgCisgICAg
Ly8gaW4gYWxsIGF2YWlsYWJsZSBzYW1wbGluZyBvcGVyYXRpb25zIHN1cHBvcnRlZCBpbiBHTFNM
IEVTLgorICAgIC8vIFRoaXMgaW5jbHVkZXMgb3ZlcmxvYWRlZCBzaWduYXR1cmVzIG9mIHRleHR1
cmUyRCwgdGV4dHVyZUN1YmUsIGFuZCBvdGhlcnMuCisgICAgaWYgKHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSAhPSAidGV4dHVyZTJEKHMyMTt2ZjI7IiB8fAor
ICAgICAgICBwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkgIT0gMSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgp
KTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlz
IG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIHNlY29uZCBhcmd1bWVudCIKKyAgICAgICAgICA8PCAi
IG9mIGEgdGV4dHVyZTJEIGNhbGwuXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQorewor
ICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rpb24oKSk7CisgICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBi
ZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJl
c3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIGluIGEgbG9vcCBj
b25kaXRpb24uXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZp
c2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQoreworICAgIGJlZ2luRXJy
b3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4
cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIG9uIHRoZSBs
ZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgorICAgICAgICAgIDw8IGxvZ2ljYWxPcC0+Z2V0
T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41NzkzMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKK2Ns
YXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcg
OiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogbVNpbmsoc2lu
aykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmlj
dGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGludCBudW1FcnJvcnMo
KSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRB
cmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9n
aWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpOworICAgIHZvaWQgdmFsaWRhdGVV
c2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KTsKKworCVRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworfTsKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlO
R19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRjNmNmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZy5jcHAKQEAgLTAsMCArMSwxNyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIK
Kwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkg
eworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJy
b3IpOworICAgICAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBt
U2luayA8PCAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4i
OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWEwNWZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19I
XworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdf
SF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKworY2xh
c3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2Vy
KHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAgICAsIG1O
dW1FcnJvcnMoMCkge30KKworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9k
ZSogcm9vdCkgeyByb290LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJvcnMoKSB7
IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopOworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBp
bnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNU
X1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmNwcAppbmRleCA2YTVjZmQzLi4wY2MwYjkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKQEAgLTk5Miw2ICs5OTIs
MjIgQEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQogICAgIHJldHVybiBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RY
VDUpKTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERpcmVjdDNE
OQorLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2Ug
Y2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRz
L0QzRDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAgICBt
RDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2Rl
KTsKKworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfREVQ
VEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOworICAgIGJvb2wgbnVs
bCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQ
RV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAgcmV0dXJuIGludHogJiYgbnVsbDsKK30K
KwogYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5n
LCBib29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5
TW9kZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBPT0wgRGlzcGxheTo6Z2V0QnVmZmVyUG9v
bChEV09SRCB1c2FnZSkgY29uc3QKICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwogfQogCi1E
M0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3QKK0Qz
RFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAg
aWYgKG1EM2Q5RXggIT0gTlVMTCkKICAgICB7CkBAIC0xMDg5LDcgKzExMDUsNyBAQCBEM0RQT09M
IERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3QKICAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFyZW5kZXJhYmxlKQorICAgICAgICBpZiAoISh1
c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAppbmRleCA1
MDI4NDMxLi40ZjdkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaApAQCAtNzgsMTAgKzc4LDExIEBAIGNsYXNzIERpc3BsYXkKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRO
b25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0
aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1
ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9y
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdl
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJh
YmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNh
Z2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKICAgICBi
b29sIGlzRGV2aWNlTG9zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9TdXJmYWNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvU3VyZmFjZS5jcHAKaW5kZXggMDdhZDNjZi4uY2EyY2VlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCkBAIC01NjUsNiArNTY1LDggQEAg
RUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNTc1LDYgKzU3Nyw4IEBAIElEaXJlY3QzRFN1cmZhY2U5
ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0Owog
fQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNl
OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmIChtRGVwdGhTdGVuY2lsKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKaW5kZXggNjZj
ZDVjMC4uODIwZjY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCkBAIC0zMTAsNiArMzEx
LDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKICAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0g
bURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVh
ckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMpOwogICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJl
U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURp
c3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBv
cnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAK
ICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5k
ZXggPj0gKDEgPDwgMTYpOwogCkBAIC00MDUsNiArNDA3LDExIEBAIHZvaWQgQ29udGV4dDo6bWFy
a0FsbFN0YXRlRGlydHkoKQogICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7CiB9CiAK
K3ZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCit7CisgICAgbUR4VW5pZm9ybXNE
aXJ0eSA9IHRydWU7Cit9CisKIHZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkKIHsKICAg
ICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCkKQEAg
LTE2NDYsNiArMTY1MywxMiBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcykKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKICAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5OwogICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAg
ICAqcGFyYW1zID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BST0dSQU1fQklO
QVJZX0ZPUk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5H
TEU7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTE3MzcsNiArMTc1MCw4IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51CiAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9C
SU5ESU5HX0NVQkVfTUFQOgogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRF
R1lfRVhUOgorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6Cisg
ICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgogICAgICAgICB7CiAgICAg
ICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwpAQCAt
MTgzNSwxMyArMTg1MCwzMSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wg
aWdub3JlVmlld3BvcnQpCiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAorICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNv
bG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQK
KyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkg
YmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVy
YnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9y
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJPYmpl
Y3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIoKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAgICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVj
dCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9y
IEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgcmVuZGVy
VGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJp
YWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAgdW5z
aWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2Vy
aWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdl
dFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRh
cmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAgeworICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKICAgICAgICAg
fQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsKQEAg
LTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29s
IGlnbm9yZVZpZXdwb3J0KQogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0g
MDsKICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAg
ICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAg
ICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJEZXB0
aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFs
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAg
ICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkg
IT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5k
ZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGVu
Y2lsYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0U2VyaWFsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVy
LT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFw
cGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4Nyw5ICsxOTIyLDE0IEBAIGJvb2wgQ29u
dGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKICAgICAgICAgbURl
cHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAoZGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorCiAg
ICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5n
ZWQpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQo
KTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdApAQCAtMTk2MCwyNiArMjAwMCwy
NyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQp
CiAgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQogICAg
IHsKICAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
CisgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dy
YW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGhh
bGZQaXhlbFNpemUgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigp
OwogICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYg
LyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2
KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CiAKICAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFy
ZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5n
cygpLiBUaGUgYXBwcm9hY2ggZGVwZW5kcyBvbiBTaGFkZXIgTW9kZWwgMy4wIHN1cHBvcnQuCi0g
ICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhDb29yZExvY2F0aW9uKCk7
CisgICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhDb29yZExvY2F0aW9u
KCk7CiAgICAgICAgIGZsb2F0IGggPSBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQgOiBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmOwogICAgICAgICBH
TGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCBoLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmll
d3BvcnRXaWR0aCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0
YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBw
cm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5KTsKKyAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CiAKLSAgICAgICAgR0xp
bnQgZGVwdGggPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKKyAgICAgICAg
R0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRpb24oKTsKICAgICAg
ICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIp
IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEs
IGR6KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHop
OwogCi0gICAgICAgIEdMaW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRo
UmFuZ2VMb2NhdGlvbigpOworICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlm
ZlszXSA9IHt6TmVhciwgekZhciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7CisgICAgICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwog
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CiAgICAgfQogCkBAIC0xOTkwLDE4ICsy
MDMxLDE5IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3
cG9ydCkKIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCiB7CiAgICAg
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKIAogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwogCiAgICAgR0xlbnVtIGFkanVzdGVkRnJvbnRGYWNlID0gYWRqdXN0V2luZGluZyht
U3RhdGUuZnJvbnRGYWNlKTsKIAotICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbU9iamVjdC0+
Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xpbnQgZnJvbnRDQ1cgPSBwcm9ncmFtQmlu
YXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKICAgICBHTGludCBjY3cgPSAoYWRqdXN0ZWRG
cm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2KGZy
b250Q0NXLCAxLCAmY2N3KTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250
Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOworICAgIEdMaW50IHBvaW50c09yTGluZXMg
PSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwogICAgIEdMaW50
IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtT2Jq
ZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7CisgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJv
bnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5
LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQg
PSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7CkBAIC0yMjgwLDE4ICsyMzIyLDIwIEBA
IEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
R0xzaXplaSBjb3VudCwgR0xlbnVtIG1vCiB2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCiB7
CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKwogICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGll
ZFByb2dyYW1TZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2
ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAg
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFBp
eGVsU2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRl
ciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxTaGFkZXIo
KTsKIAogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CiAgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9n
cmFtT2JqZWN0LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRp
cnR5QWxsVW5pZm9ybXMoKTsKICAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCi0gICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlV
bmlmb3JtcygpOworICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKIH0KIAogLy8g
QXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5
IGRldmljZQpAQCAtMjMxMSwzMCArMjM1NSwzMiBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVy
ZXMoKQogdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCiB7CiAg
ICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKIAogICAgIGludCBzYW1wbGVyQ291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
X1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIg
dHlwZQogICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBT
QU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJl
U2VyaWFsVlM7CiAgICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJ
WEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExFUjA7Ci0gICAgaW50IHNhbXBsZXJSYW5n
ZSA9IHByb2dyYW1PYmplY3QtPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7CisgICAgaW50IHNh
bXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7CiAK
ICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFu
Z2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJv
Z3JhbU9iamVjdC0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBP
cGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAg
Ly8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAogICAgICAgICBpbnQgZDNkU2FtcGxl
ciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7CiAKICAgICAgICAgaWYgKHRleHR1
cmVVbml0ICE9IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVy
SW5kZXgpOworICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKIAogICAgICAg
ICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0
ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVy
ZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwogCi0gICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVT
ZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4
dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkK
KyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNE
aXJ0eUltYWdlcygpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIElEaXJlY3QzREJh
c2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUoKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVy
ZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4
XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRl
eHR1cmUtPmdldFdyYXBTKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwpAQCAtMjM1MSw3ICsyMzk3LDcgQEAgdm9pZCBDb250ZXh0
OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIs
IGQzZE1pcEZpbHRlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4
U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCiAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxl
ciwgZDNkVGV4dHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNjEsNyArMjQwNyw3
IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGdldEluY29tcGxl
dGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0g
dGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7CiAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDUxLDYg
KzI0OTcsNyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3MzgsNiArMjc4NSw3IEBAIHZvaWQgQ29udGV4
dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzYzsKICAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVz
Yyk7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAg
dW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9y
bWF0KTsKICAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUp
IC0gMTsKQEAgLTI5NTIsNyArMzAwMCw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVu
dW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuCiAgICAg
YXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0gICAgaWYgKCFnZXRDdXJy
ZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBpZiAoIWdldEN1cnJl
bnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkp
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
IH0KQEAgLTMwNDIsNyArMzA5MCw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkCiAgICAgYXBw
bHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0gICAgaWYgKCFnZXRDdXJyZW50
UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBpZiAoIWdldEN1cnJlbnRQ
cm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCiAg
ICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0K
QEAgLTM0NTIsNiArMzUwMCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxw
aGFUZXh0dXJlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0
OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0czMy
Yml0SW5kaWNlczsKQEAgLTM2NzcsNiArMzczMCw3IEBAIHZvaWQgQ29udGV4dDo6aW5pdEV4dGVu
c2lvblN0cmluZygpCiAgICAgfQogCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3Bh
Y2tlZF9kZXB0aF9zdGVuY2lsICI7CisgICAgLy9tRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
Z2V0X3Byb2dyYW1fYmluYXJ5ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3Jn
YjhfcmdiYTggIjsKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgIjsKIApAQCAtMzcyMCw2ICszNzc0LDExIEBAIHZvaWQgQ29udGV4dDo6aW5pdEV4
dGVuc2lvblN0cmluZygpCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVf
c3RvcmFnZSAiOwogCiAgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgIGlmIChz
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKKyAgICB9CisKICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICI7CiAgICAgaWYgKGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSAhPSAwKQogICAgIHsKQEAgLTQwNDMsNyArNDEwMiwxMyBAQCB2b2lkIENv
bnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNy
Y1gxLCBHTGludCBzcmNZMQogCiAgICAgICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhTdGVuY2lsKCk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3Rl
bmNpbCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZERlcHRoU3RlbmNpbCwg
TlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAg
ICAgcmVhZERlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgICAgICAgICAgZHJhd0RlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOwogCiAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ICAgICAgICB7CkBAIC00MTE1LDYgKzQxODAsOCBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25D
YWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbAog
ICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwog
ICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOwogCisgICAgUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsK
KwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAg
ewogICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCkBAIC00MTcwLDcgKzQyMzcsNyBA
QCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbAogICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0
dHJpYnV0ZXNbaV0udHlwZTsKICAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xN
RVRIT0RfREVGQVVMVDsKICAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdF
X1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdl
dFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJv
Z3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsKICAgICAgICAgICAgIGVsZW1lbnQrKzsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Db250ZXh0LmgKaW5kZXggOGRjY2YwZi4uYzc4M2Y2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKQEAgLTI1MSw3ICsyNTEsNyBA
QCBjbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCiAgIHByaXZhdGU6CiAgICAgVUlOVCBtTWF4
THJ1OwogCi0gICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMTYgfTsK
KyAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAzMiB9OwogCiAgICAg
c3RydWN0IFZCRGF0YQogICAgIHsKQEAgLTI4Miw2ICsyODIsNyBAQCBjbGFzcyBDb250ZXh0CiAg
ICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSk7CiAKICAgICB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdm9pZCBtYXJr
RHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7
CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBAIC00OTUsNiArNDk2LDcgQEAgY2xhc3MgQ29u
dGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBz
dXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBj
b25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJv
b2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CkBAIC02MTcsNiArNjE5LDcgQEAgY2xhc3Mg
Q29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAg
ICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVt
aW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAgICAgaW50IG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXggNzMwZmZmYy4uZGNkODI2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5j
cHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9y
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVM
TCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtTnVsbENvbG9y
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKQEAg
LTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdl
dFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
c3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQog
SURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAg
IFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwpA
QCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7
CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2lu
dGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdl
dCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIo
KQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBtTnVsbENvbG9yYnVmZmVyUG9p
bnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZm
ZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICBFUlIoIlVuZXhw
ZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBGQk8uIik7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGggID0gZGVwdGhidWZmZXItPmdl
dFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7
CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAgICAgd2lkdGggIT0gbnVsbGJ1ZmZlci0+
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgewor
ICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigwLCBuZXcgQ29sb3JidWZmZXIo
d2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAgICAgICBtTnVsbENvbG9yYnVmZmVyUG9p
bnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9
CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKCkKIHsKICAgICByZXR1
cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsyNzIsMTEgQEAgYm9vbCBGcmFtZWJ1ZmZl
cjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIHsK
KyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CiAgICAgaW50IHdp
ZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOworICAg
IGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5
cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEgKzMwMSwzOCBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQor
ICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZm
ZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVy
bmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhB
IHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Cisg
ICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMy
Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8IAotICAgICAgICAgICAgICAgIChk
eDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkpKQorICAgICAg
ICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fAorICAgICAgICAgICAgICAg
IChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9M
VU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5B
TkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVzOjpJc0RlcHRoRm9ybWF0KGQzZGZvcm1h
dCkgfHwgZHgyZXM6OklzU3RlbmNpbEZvcm1hdChkM2Rmb3JtYXQpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAg
ICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAg
IGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgc2FtcGxlcyA9IGNv
bG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAg
ICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xf
Tk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJV
RkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0gICAgICAgIH0KLQog
ICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFk
ZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29t
cGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAg
ICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0g
ICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAg
aGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVm
ZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQg
ZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAv
LyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1
cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkeDJl
czo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQor
ICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdp
ZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0
aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXIt
PmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1w
bGVzKCkpCiAgICAgICAgIHsKQEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05F
KQogICAgIHsKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZG
RVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKLSAgICAgICAgfQotCiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVm
ZmVyKCk7CiAKICAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUg
QEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVm
ZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5j
aWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkp
CisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVy
VHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3Rl
bmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNp
bEZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBp
ZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZm
ZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdl
dFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgo
KSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRT
YW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM3OCwxNCArNDU3LDE3IEBAIEdMZW51bSBGcmFtZWJ1
ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUiAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xf
UkVOREVSQlVGRkVSKQorICAgIC8vIGlmIHdlIGhhdmUgYm90aCBhIGRlcHRoIGFuZCBzdGVuY2ls
IGJ1ZmZlciwgdGhleSBtdXN0IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdAorICAgIC8vIHNpbmNl
IHdlIG9ubHkgc3VwcG9ydCBwYWNrZWRfZGVwdGhfc3RlbmNpbCBhbmQgbm90IHNlcGFyYXRlIGRl
cHRoIGFuZCBzdGVuY2lsCisgICAgaWYgKGRlcHRoYnVmZmVyICYmIHN0ZW5jaWxidWZmZXIgJiYg
KGRlcHRoYnVmZmVyICE9IHN0ZW5jaWxidWZmZXIpKQogICAgIHsKLSAgICAgICAgaWYgKGRlcHRo
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8
Ci0gICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAgICBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFs
KCkgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgLy8gd2UgbmVl
ZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCisgICAgaWYg
KG1pc3NpbmdBdHRhY2htZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwogICAgIH0KIAogICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAppbmRleCBiNzNmOWEwLi4xNGQ5YzJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
CkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgUmVuZGVyYnVmZmVyICpn
ZXRDb2xvcmJ1ZmZlcigpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKICAg
ICBSZW5kZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmdl
dE51bGxDb2xvcmJ1ZmZlcigpOwogCiAgICAgR0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOwog
ICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKTsKQEAgLTczLDYgKzc0LDggQEAgY2xhc3Mg
RnJhbWVidWZmZXIKICAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwogICAgIEJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwogCisgICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtTnVsbENvbG9yYnVmZmVyUG9pbnRlcjsKKwogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCmluZGV4
IGE1ZTM4YmYuLjE4NGEwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApAQCAtOCw2ICs4LDcgQEAKIC8vIGFuZCByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4Lgog
CiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTE3LDY0ICsx
OCwyNCBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElM
RV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBnbAogewogdW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLWNvbnN0
IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQg
aSkKLXsKLSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkp
OwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUs
IGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6
IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9y
bShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZv
cm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25l
ZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0g
dHJ1ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19
CiAKLWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCitBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRl
QmluZGluZ3MoKQogewotICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAw
OwogfQogCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAotICAg
IDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1l
bnQpLCBpbmRleChpbmRleCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3Mo
KQogewogfQogCiBQcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1
aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSks
IG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKIHsKLSAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7CiAg
ICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLQot
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVM
TDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVZTID0g
TlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0K
LSAgICB1bmxpbmsoKTsKLQorICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKICAgICBtRGVsZXRl
U3RhdHVzID0gZmFsc2U7Ci0KICAgICBtUmVmQ291bnQgPSAwOwogfQogCkBAIC0xNTIsMTcgKzEx
Myw3IEBAIGludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0CiAgICAg
cmV0dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAw
KTsKIH0KIAotSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigp
Ci17Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Ci19Ci0KLUlEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCi17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOwotfQotCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5k
QXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQogewogICAg
IGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKICAgICB7CkBAIC0xNzUsMjY0OSArMTI2
LDI4MCBAQCB2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogfQogCi1HTHVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0
ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobmFt
ZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAtMTsKKyAgICBtQXR0cmlidXRlQmluZGluZ3MuYmluZEF0dHJp
YnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKIH0KIAotaW50IFByb2dyYW06OmdldFNlbWFudGlj
SW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQorLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUg
dmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCisv
LyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRl
IG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBsaXN0IG9mIHVuaWZvcm1zCit2b2lkIFBy
b2dyYW06OmxpbmsoKQogewotICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJp
YnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAKLSAgICByZXR1cm4gbVNlbWFu
dGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworICAgIHVubGluayhmYWxzZSk7CisKKyAgICBtUHJv
Z3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OworICAgIGlmICghbVByb2dyYW1CaW5hcnkt
PmxpbmsobUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIp
KQorICAgIHsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsKKyAgICB9CiB9CiAKLS8vIFJldHVybnMg
b25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCi1HTGludCBQcm9n
cmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCitpbnQgQXR0cmlidXRl
QmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNv
bnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9j
YXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCiAgICAgewotICAgICAgY2Fz
ZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsK
LSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZp
bmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KICAgICB9CisKKyAgICBy
ZXR1cm4gLTE7CiB9CiAKLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdl
IHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKLS8vIGlu
ZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hh
ZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUs
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVj
dCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0
aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiB7Ci0gICAgR0xpbnQgbG9n
aWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCisgICAgaWYgKGRlc3Ry
b3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKICAgICB7Ci0gICAgICBjYXNlIFNBTVBM
RVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJz
UFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKICAgICAg
ICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIt
PnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBB
U1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJz
VlNbMF0pKTsKIAotICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUp
CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2dp
Y2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJl
VW5pdDsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAg
IG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAobG9naWNhbFRleHR1cmVV
bml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBk
ZWxldGUgbVByb2dyYW1CaW5hcnk7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKICAg
ICB9Ci0KLSAgICByZXR1cm4gLTE7CiB9CiAKLS8vIFJldHVybnMgdGhlIHRleHR1cmUgdHlwZSBm
b3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZv
ciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1
cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJv
Z3JhbUJpbmFyeSgpCiB7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FN
UExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAg
ICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1w
bGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
VEVYVFVSRV8yRDsKKyAgICByZXR1cm4gbVByb2dyYW1CaW5hcnk7CiB9CiAKLUdMaW50IFByb2dy
YW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQordm9pZCBQcm9ncmFtOjpz
ZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgdW5z
aWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisgICAgdW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Cit9CiAKLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcg
YXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3Bl
biA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5k
X2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9z
ZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2ko
bmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4p
OwotICAgIH0KK3ZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCit7CisgICAgbVJlZkNvdW50LS07CiAK
LSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7
IGxvY2F0aW9uKyspCisgICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCiAg
ICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYm
Ci0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlw
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Cisg
ICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7CiAgICAgfQot
Ci0gICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit2b2lkIFByb2dyYW06
OmFkZFJlZigpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICBtUmVmQ291bnQrKzsK
K30KIAotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KK3Vuc2lnbmVkIGludCBQcm9n
cmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZWZDb3VudDsKK30KIAot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwordW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlh
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9CiAKLSAgICAgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgp
Cit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CiAKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0g
PSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFsy
XSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9
IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQoraW50IFByb2dyYW06OmdldEluZm9Mb2dM
ZW5ndGgoKSBjb25zdAoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEluZm9Mb2dMZW5n
dGgoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dy
YW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCit2b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRJbmZvTG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7CiAgICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICBlbHNlCiAgICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChidWZTaXplID4gMCkK
ICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRh
cmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAg
dGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiAr
PSAyOworICAgICAgICAgICAgaW5mb0xvZ1swXSA9ICdcMCc7CiAgICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CiAKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIGlmIChsZW5n
dGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgKmxlbmd0
aCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpz
ZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQordm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwg
R0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKIHsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworICAgIGludCB0b3RhbCA9IDA7CiAKLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIGlmIChtVmVydGV4U2hhZGVyKQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAodG90YWwgPCBtYXhD
b3VudCkKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAg
ICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAg
ICAgICAgdiArPSAzOworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVy
LT5nZXRIYW5kbGUoKTsKICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworICAgICAgICB0b3RhbCsrOworICAgIH0KIAotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgIGlmIChtRnJhZ21l
bnRTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1G
cmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KKworICAgICAgICB0b3RhbCsr
OwogICAgIH0KLSAgICBlbHNlIAorCisgICAgaWYgKGNvdW50KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAqY291bnQgPSB0b3RhbDsKICAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVB
dHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0
aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfRkxPQVRfVkVDNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIGlmIChidWZzaXplID4g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5n
dGggPSAwOworICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwK
LSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgICAg
ICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOwogICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworfQogCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3Vu
dCgpCit7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Q
cm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwogICAgIH0KLSAgICBlbHNl
IAorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3Jj
SGVpZ2h0Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCiB7Ci0g
ICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7Ci0gICAg
aW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7Ci0KLSAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhd
OwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRX
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRo
ICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+
Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CiAgICAgfQotICAgIC8vIGNsZWFyIHVuZmls
bGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0
OyB5KyspCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJn
ZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdp
ZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0K
IAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZl
VW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlm
IChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBs
ZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ICE9IEdMX0ZMT0FUX01BVDIpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9CiAKLSAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAg
ICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAg
ICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgICpzaXplID0g
MDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7CiAgICAgfQot
Ci0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9h
dCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQs
MywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZh
bHVlICs9IDk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwog
fQogCi0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCitHTGludCBQcm9ncmFtOjpnZXRB
Y3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbVByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdM
ZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSAr
PSAxNjsKLSAgICB9Cit2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCit7CisgICAgbURl
bGV0ZVN0YXR1cyA9IHRydWU7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbTo6
aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRGVsZXRlU3RhdHVz
OwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNv
bnN0CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5pc1ZhbGlkYXRlZCgp
OwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAotICAgICAgICB0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKLSAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAg
ICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQp
ICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RS
VUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7Ci0gICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAgICAgICAgICAgIHYsIDIgKiBz
aXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMs
Ci0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihH
TGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0g
ICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywg
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAgICAgICAgICAgICBj
b3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZs
b2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVy
aWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlm
IChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0
ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCBy
ZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgewotICAg
ICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQsND4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlm
b3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9y
bUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChH
TGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQ
YXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0UGFy
YW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAg
ICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1z
ID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtVW5pZm9ybXNbaW5k
ZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9y
bXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQot
dm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVu
aWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMu
ZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotICAg
ICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAg
ICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0gICAgICAg
ICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVu
aWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDIs
IGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVu
aWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1u
ZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NV
QkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzogICBh
cHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KHRhcmdl
dFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMg
aW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFtOjpjb21waWxlVG9C
aW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFu
dFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAgewotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0gICAgVUlOVCBmbGFn
cyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAocGVyZkFjdGl2ZSgp
KQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLSNpZmRlZiBOREVC
VUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0j
ZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2Vu
ZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0g
ICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0
aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3
cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRl
eHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNs
OwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0gICAgSUQzRDEwQmxv
YiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0
cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3Ms
IDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNz
YWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nU2FuaXRp
emVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwotICAgICAgICBUUkFD
RSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOwot
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGlj
X2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50
VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBp
bnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBb
T3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rp
b24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdp
c3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbTo6cGFja1ZhcnlpbmdzKGNv
bnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdl
dE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0g
ICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmct
PnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBl
KTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG0gPT0gMiB8
fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0g
MDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYg
YXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFy
eWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3Rv
cnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwg
NCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
bGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5
XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgY29sdW1uID0g
MDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFj
ZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1u
ID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIG47IHkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0g
Y29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgIGlmICgh
c3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJDb3VsZCBu
b3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1i
ZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQotICAgIGZvciAo
aW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlm
IChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNr
aW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlu
a1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1WZXJ0ZXhITFNM
LmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
UmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKLSAgICBmb3IgKFZhcnlpbmdM
aXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1Zhcisr
KQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0gICAgICAgIGZyYWdWYXItPmNv
bCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9
IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gbVZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZhci0+cmVn
ID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8gTWFwIHRo
ZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCByZWdpc3Rl
cnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzIDwgMCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExT
TCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENv
bnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9k
ZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4
aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09IG1heFZhcnlpbmdW
ZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBn
bF9GcmFnQ29vcmQiKTsKLQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5w
dXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCi0gICAgICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRw
dXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+
bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9
IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0
ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5n
Iiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9
IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwot
Ci0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNoZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBk
b2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsK
LQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rk
OjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsK
LQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICBmb3IgKEF0dHJp
YnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogbVZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCAr
PSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0
cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNM
ICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAi
c3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7Ci0KLSAgICBm
b3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAgICAgICAgaW50IHJl
Z2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBh
Y2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5n
U2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJz
KSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6
ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1Bv
aW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBt
YWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAg
Zm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKLQotICAg
ICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRy
aXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIG1WZXJ0ZXhI
TFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0
cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBn
bF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24u
eSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9z
aXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9z
aXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChp
bnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0KLQot
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAg
bVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4i
OwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtVmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5y
ZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5
aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3Mg
PSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAg
ICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lz
dGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBw
YWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVk
UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBtVmVydGV4SExTTCAr
PSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
bVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9
ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0gICAgICAgICAgICAg
ICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5n
ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYg
KHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkg
KiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3Jk
IDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgICAg
IGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBv
cyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAgfQotCi0gICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9Ci0KLSAgICBt
UGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgotICAgICAg
ICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAg
ICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAg
IHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0Lmds
X0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbTMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhlIHJlbmRlciB0YXJnZXQgaGVp
Z2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAgICAgbVBpeGVs
SExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gZHhfQ29vcmQu
eSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQg
d2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhf
Q29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQu
eSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3Jk
Lnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAg
Z2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgu
eCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29v
cmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQ
b2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Q
b2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1G
cmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250
Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwot
ICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
KTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5u
YW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIg
KyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiID0gaW5wdXQu
diIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNM
ICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xu
IiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xv
clswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUg
dmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCi0v
LyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRl
IG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZvcm1zCi12b2lkIFBy
b2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAgaWYgKCFtRnJhZ21lbnRTaGFk
ZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRleFNoYWRlci0+
aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1QaXhl
bEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBtVmVydGV4SExTTCA9IG1W
ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1ZhcnlpbmdzKCkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENv
bnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9y
dHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7Ci0gICAgY29uc3QgY2hhciAq
cGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAi
IDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9C
aW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxl
VlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhl
bEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7Ci0KLSAgICBp
ZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCB2
ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhC
aW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKLSAgICAgICAg
SFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCop
cGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOwotCi0g
ICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVy
dGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NFRURFRChwaXhl
bFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICBw
aXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBOVUxMOwotICAg
ICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxl
ICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbGlua0F0
dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxl
UFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVWUykpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNv
cmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHBy
ZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCi0gICAgICAg
ICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRo
UmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7Ci0gICAgICAgICAg
ICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIp
OwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIG1MaW5rZWQgPSB0cnVlOyAg
IC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFw
cGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1
c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkKLXsKLSAgICB1bnNp
Z25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhh
dCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJh
dG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJp
YnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0
ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJp
bmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRy
aWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2Nh
dGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRB
dHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAgICAgaW50IHJvd3Mg
PSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChy
b3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9j
YXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9j
YXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0
ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJl
Z2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5k
aW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8v
IE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAg
ICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlv
bnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFi
bGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28g
bWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOwot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9
ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJ
bmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCi0gICAgewot
ICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBpbnQgcm93cyA9IHN0
ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
dHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGlu
ZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFBy
b2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0g
ICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsg
bG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlv
bl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMoSUQzRFhDb25z
dGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0Mg
Y29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50
RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQotICAgIGNvbnN0
YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50
VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKLSAgICB7Ci0gICAg
ICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFu
dCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRh
YmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERl
c2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFkZHMgdGhlIGRlc2NyaXB0
aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qg
b2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFs
cmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFO
RExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVz
Y3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3RhbnQgPSBtQ29u
c3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9u
Lk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNvbnN0YW50VGFi
bGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsK
LQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNh
bXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxl
ckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5
cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBU
RVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBt
VXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFi
bGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAgICAg
IGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3Jp
cHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVS
RV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJh
bmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJWZXJ0ZXggc2hh
ZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaChjb25zdGFudERl
c2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5
SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBm
aWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOwot
Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25z
dGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3Vu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikgOiAi
IjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oZmllbGRIYW5kbGUs
IGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1
Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoK
LSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAgICAgY2FzZSBEM0RYUENfT0JK
RUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBu
YW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIFVuaWZvcm0gKnVu
aWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKLQotICAg
IGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+
dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHVu
aWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVz
KHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQUyk7Ci0gICAgaW5pdGlhbGl6
ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMsIG1Db25zdGFudFRhYmxlVlMp
OwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBpbnQg
dW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsKLSAgICAgICAg
bVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3Jt
SW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3Jh
bTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2Ny
aXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNj
cmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1Q
TEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5z
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9P
TF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9J
TlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMz
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2Ug
aWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
TUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYm
IG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
XyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJp
bmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQot
ewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICByZXR1cm4gX25hbWUu
c3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8i
KSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigzKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybW5i
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0
IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwKLSAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAqIHdp
ZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9P
TCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgIHsKLSAgICAgICAgaW50
IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/
IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgdnNDb3Vu
dCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MID8gdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBjb3B5Q291bnQgPSBz
dGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7Ci0gICAg
ICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgs
IGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6
YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYp
Ci17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0xaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17
Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNE
WFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RY
VkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJ
bmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBm
aXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0g
dltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCAoY29u
c3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkK
LSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5k
ZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4OwotCi0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0yaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17
Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNE
WFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RY
VkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOwotCi0gICAgICAgIHYgKz0g
MjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZl
Y3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZv
cm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0g
ICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0g
PSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsK
LQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVu
aWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05T
VEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAo
ZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsKLSAgICB9Ci0KLSAg
ICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikK
LXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0
KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBm
bG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQot
fQotCi0vLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9n
LgotLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUg
b2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCi0vLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxs
IG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBQ
cm9ncmFtOjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKLXsK
LSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7Ci0KLSAgICBzaXplX3QgZm91bmQ7Ci0gICAg
ZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOwotICAgICAgICBp
ZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1z
Zy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
d2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKLQotICAgIGFwcGVuZFRvSW5mb0xv
ZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9M
b2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAgaWYgKCFmb3JtYXQpCi0gICAgewot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBpbmZvWzEwMjRdOwotCi0gICAgdmFf
bGlzdCB2YXJhcmc7Ci0gICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOwotICAgIHZzbnByaW50
ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKLSAgICB2YV9lbmQodmFyYXJn
KTsKLQotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOwotCi0gICAgaWYgKCFt
SW5mb0xvZykKLSAgICB7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCAr
IDFdOwotICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKLSAgICAg
ICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOwot
ICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7Ci0gICAgICAgIHN0cmNweShuZXdMb2cg
KyBsb2dMZW5ndGgsIGluZm8pOwotCi0gICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgICAg
ICBtSW5mb0xvZyA9IG5ld0xvZzsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZv
TG9nKCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbUlu
Zm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMg
dGhlIHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBiZWZvcmUgcmUtbGlua2lu
Zywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkK
LXsKLSAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcgZGVzdHJ1Y3RlZAotICAgIHsK
LSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbUZy
YWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBO
VUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1QaXhlbEV4ZWN1
dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4RXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUNvbnN0
YW50VGFibGVQUykKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsK
LSAgICAgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlVlMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCi0gICAgewot
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAgIG1T
ZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KLQotICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKLSAgICB7Ci0gICAg
ICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZU
RjsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVz
ZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0KLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgp
KQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlm
b3Jtcy5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7
Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2Nh
dGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOwotCi0gICAgbVVu
aWZvcm1JbmRleC5jbGVhcigpOwotCi0gICAgbVBpeGVsSExTTC5jbGVhcigpOwotICAgIG1WZXJ0
ZXhITFNMLmNsZWFyKCk7Ci0KLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9
IE5VTEw7Ci0KLSAgICBtTGlua2VkID0gZmFsc2U7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNMaW5r
ZWQoKQotewotICAgIHJldHVybiBtTGlua2VkOwotfQotCi1ib29sIFByb2dyYW06OmlzVmFsaWRh
dGVkKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Ci19Ci0KLXZvaWQgUHJvZ3Jh
bTo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09
IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRl
bGV0ZVByb2dyYW0obUhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmFkZFJlZigp
Ci17Ci0gICAgbVJlZkNvdW50Kys7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZD
b3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQotdW5zaWduZWQgaW50
IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0K
LXVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJy
ZW50U2VyaWFsKys7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAg
IH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQotewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBp
ZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAx
LCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9M
b2csIGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGlu
Zm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBdHRh
Y2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hh
ZGVycykKLXsKLSAgICBpbnQgdG90YWwgPSAwOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0g
ICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAg
ICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRvdGFsKys7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlcikK
LSAgICB7Ci0gICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChjb3VudCkKLSAgICB7
Ci0gICAgICAgICpjb3VudCA9IHRvdGFsOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRB
Y3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIC8v
IFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZUF0
dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKLSAgICBmb3IgKGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHko
KSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOwotICAgIH0KLQot
ICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9
IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0KLSAgICAgICAgc3Ry
bmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9
ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgKmxl
bmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpzaXplID0gMTsg
ICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCi0KLSAgICAqdHlwZSA9IG1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3Rp
dmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50
IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY291
bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQg
UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKLXsKLSAgICBpbnQgbWF4TGVu
Z3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAg
ICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKLX0KLQotdm9pZCBQcm9n
cmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsK
LSAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0
aXZlVW5pZm9ybSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm07Ci0gICAgZm9yICh1bmlm
b3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKLSAgICB7Ci0g
ICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikg
PT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVVbmlmb3JtKys7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJl
IHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotCi0gICAgaWYgKGJ1ZnNpemUg
PiAwKQotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3VuaWZv
cm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5h
bWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7
Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBl
ID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3Rp
dmVVbmlmb3JtQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBp
bnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5k
ZXgrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5j
b21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1HTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKLXsKLSAgICBpbnQgbWF4TGVuZ3RoID0g
MDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVt
VW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtVW5pZm9ybXNb
dW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5u
YW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSAr
IDEpOwotICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGlu
ZyBpbiAiWzBdIi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6
bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBt
YXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKLXsKLSAgICBt
RGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxl
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6dmFsaWRhdGUoKQotewotICAgIHJlc2V0SW5mb0xvZygpOwotCi0gICAgaWYgKCFpc0xp
bmtlZCgpKSAKLSAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90
IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNl
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAg
ICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAg
bVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBp
ZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0
eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBh
bmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxs
IGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3Vl
IHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBt
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlw
ZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9X
TjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxT
YW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3Rp
dmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJz
UFNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMg
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVV
bml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlw
ZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dF
cnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1
cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsK
LSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9y
cykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVf
VU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNb
aV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBv
ZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQg
KCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRU
eXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpp
bml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06
OlJlZ2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsK
LSAgICBEM0RYSEFORExFIGhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50QnlOYW1l
KDAsIHRhcmdldFVuaWZvcm0tPl9uYW1lLmNfc3RyKCkpOwotICAgIGlmIChoYW5kbGUpCi0gICAg
ewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNv
bnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24u
UmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlclNldDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmktPnJl
Z2lzdGVyQ291bnQgPSAwOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aFJh
bmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247
Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4Q29vcmRM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRE
eEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0
aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAppbmRleCA2
MTgzMGM2Li4xYjQyMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JB
TV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgogI2lu
Y2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8c2V0PgogCiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDE3IEBAIGNsYXNzIFJlc291
cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVydGV4U2hhZGVyOwog
Ci0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQot
c3RydWN0IFVuaWZvcm0KK2NsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzCiB7Ci0gICAgVW5pZm9ybShH
TGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQotICAgIGNv
bnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29y
YXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQg
bmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAgICB1bnNpZ25lZCBj
aGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCi0g
ICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0gICAgICAgIGludCByZWdpc3RlckluZGV4
OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OwotCi0gICAgUmVnaXN0ZXJJbmZv
IHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVC
aW5kaW5ncygpOworICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0vLyBTdHJ1Y3QgdXNlZCBm
b3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFu
ZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgotewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25z
dCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQg
aW5kZXgpOworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29u
c3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpIGNvbnN0OwogCi0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIHByaXZhdGU6CisgICAg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklC
U107CiB9OwogCiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0NSArNDcsMTIgQEAgY2xhc3MgUHJvZ3Jh
bQogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKICAgICBpbnQgZ2V0QXR0
YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKIAotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
Z2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhT
aGFkZXIoKTsKLQogICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwg
Y29uc3QgY2hhciAqbmFtZSk7Ci0gICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0
IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRl
eCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVy
ZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAg
R0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIEdMaW50
IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKLSAgICBib29sIHNldFVuaWZv
cm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwot
ICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wg
c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRVbmlm
b3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOwot
Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBn
ZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24o
KSBjb25zdDsKLSAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Owot
ICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpcnR5QWxsVW5pZm9y
bXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKIAogICAgIHZvaWQgbGluaygpOwotICAg
IGJvb2wgaXNMaW5rZWQoKTsKKyAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgp
OworCiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIGdldEluZm9M
b2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwogICAg
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50
LCBHTHVpbnQgKnNoYWRlcnMpOwpAQCAtMTMxLDkxICs3MSwyNCBAQCBjbGFzcyBQcm9ncmFtCiAg
ICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKICAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9u
KCkgY29uc3Q7CiAKLSAgICB2b2lkIHZhbGlkYXRlKCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBs
ZXJzKGJvb2wgbG9nRXJyb3JzKTsKICAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CiAKICAg
ICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJp
bmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVw
ZW5kIGFuIHVuZGVyc2NvcmUKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZv
cm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNj
b3JlCi0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7
CiAKLSAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29u
c3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CiAg
ICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOwogCi0gICAgaW50IHBhY2tWYXJ5
aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pOwotICAgIGJvb2wgbGlua1Zhcnlpbmdz
KCk7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJp
bmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotCi0gICAgYm9vbCBsaW5rVW5pZm9ybXMo
SUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKLSAgICBib29sIGRlZmluZVVuaWZv
cm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOwotICAgIGJv
b2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZv
cm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTFpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0g
ICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7Ci0gICAg
dm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOwotCi0gICAgdm9pZCBpbml0aWFsaXpl
Q29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVy
SW5mbyAqcnMsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0KLSAgICB2b2lk
IGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKLSAgICB2b2lk
IGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAuLi4pOwotICAgIHZvaWQgcmVzZXRJ
bmZvTG9nKCk7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CiAKLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21l
bnRTaGFkZXI7CiAgICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCi0gICAgc3RkOjpz
dHJpbmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICBBdHRy
aWJ1dGVCaW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZl
cnRleEV4ZWN1dGFibGU7Ci0gICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVBT
OwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKLQotICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwot
ICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAg
aW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdHJ1Y3QgU2Ft
cGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7Ci0gICAgICAgIEdMaW50IGxvZ2ljYWxU
ZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7Ci0gICAgfTsKLQot
ICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIFNh
bXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0g
ICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgIEdMdWludCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9y
bUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVu
aWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKLSAgICBHTGlu
dCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRp
b247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwotCi0gICAgYm9vbCBtTGlu
a2VkOworICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwogICAgIGJvb2wgbURlbGV0
ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRl
bGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgYm9v
bCBtVmFsaWRhdGVkOwogCiAgICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZjdiZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5jcHAKQEAgLTAsMCArMSwyNTgzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9n
cmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wg
cHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKworI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMworI2VuZGlmCisKK25hbWVzcGFjZSBnbAor
eworY29uc3QgY2hhciAqZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKKworc3RkOjpzdHJpbmcg
c3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitVbmlm
b3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2ln
bmVkIGludCBhcnJheVNpemUpCisgICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUo
UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5
U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJy
YXlTaXplOworICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0
KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRydWU7Cit9CisKK1VuaWZvcm06On5Vbmlm
b3JtKCkKK3sKKyAgICBkZWxldGVbXSBkYXRhOworfQorCitib29sIFVuaWZvcm06OmlzQXJyYXko
KQoreworICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOworfQorCitV
bmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUs
IHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFtZShQ
cm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQp
LCBpbmRleChpbmRleCkKK3sKK30KKworUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSgpCit7
CisgICAgbURldmljZSA9IGdldERldmljZSgpOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5V
TEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlUFMg
PSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworCisgICAgbUluZm9Mb2cgPSBO
VUxMOworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2Vt
YW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgeworICAgICAg
ICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFs
c2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1Vc2Vk
UGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7
CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsK
KyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0
aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7Cit9CisKK1Byb2dy
YW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sKKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkK
KyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQorICAgIHsK
KyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmICht
Q29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCisgICAgeworICAg
ICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKKyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNr
KCk7CisgICAgfQorCisgICAgZGVsZXRlW10gbUluZm9Mb2c7Cit9CisKK0lEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVybiBt
UGl4ZWxFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQoreworICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsK
K30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAgeworICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmlu
ZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2lu
dCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgCisgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0
ZUluZGV4XTsKK30KKworLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBs
ZXIgaW5kZXggdXNlZC4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2Uo
U2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsK
KyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRl
eHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2Ft
cGxlcgorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhl
IHZlcnRleCBzaGFkZXIpLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBpbmco
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBHTGlu
dCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7Cisg
ICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBz
aXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOworCisgICAgICAgIGlm
IChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2Fs
VGV4dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNBTVBM
RVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0
dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0Owor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1
cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUg
Zm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCisvLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitUZXh0
dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUg
dHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlcklu
ZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKyAgICAg
ICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0
dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVy
c1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3Nh
bXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiBURVhUVVJFXzJEOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgc3Vic2NyaXB0ID0gMDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVy
YXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBvcGVuID0gbmFtZS5m
aW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZign
XScpOworICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUu
bGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0
cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5hbWUuZXJhc2Uob3Blbik7CisgICAgfQor
CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1z
OyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
Lm5hbWUgPT0gbmFtZSAmJgorICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAg
ICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0g
dlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbMl0g
PSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0
OworICAgICAgICAgICAgdiArPSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAg
IHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAg
diArPSAyOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKKyAgICAg
ICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAg
ICAgIHYgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAq
IGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJn
ZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KK3ZvaWQgdHJhbnNwb3NlTWF0
cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaW50IGNvcHlXaWR0
aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQg
PSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CisKKyAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt4ICogdGFy
Z2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICB9Cisg
ICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSBzcmNX
aWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdl
dFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
Y2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0
YXJnZXRIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0
YXJnZXQgKz0gODsKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0
YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDEyOworICAgICAgICB2YWx1ZSArPSA5
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGZsb2F0KSAqIDE2KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZh
bHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDE2OworICAgICAgICB2YWx1ZSArPSAxNjsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
U0FNUExFUl8yRCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
Q1VCRSkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAorICAgICAgICAg
ICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAgdiwgMyAq
IHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xp
bnQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwor
ICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkK
KyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0Owor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1
ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXplZCBxdWVyaWVzIC0t
IGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAorICAgIGlmIChidWZT
aXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxT
aXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJl
ZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIs
NCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFy
YW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDE2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRD
b3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRl
cm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0
VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1z
W2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXpl
b2YoR0xmbG9hdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0lOVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJh
bXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
KmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAg
ICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFt
cywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogMTYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4
dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQp
Ym9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1z
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAg
bWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW1C
aW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQoreworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1zW2lu
ZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgZm9yIChzdGQ6OnZl
Y3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVu
aWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgeworICAgICAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gKnViOworCisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwor
ICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCAyLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlV
bmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FN
UExFUl9DVUJFOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9y
bTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZF
QzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRp
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBz
aGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFy
eTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
IElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAgaWYgKCFobHNsKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRFdPUkQgcmVzdWx0Owor
ICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7CisgICAgaWYg
KHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7
CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElN
SVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRU
ZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIi
KSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNs
KTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0
cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwor
ICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gRDNEQ29t
cGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHBy
b2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKKworICAgIGlmIChlcnJv
ck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNo
YXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgIGFwcGVuZFRv
SW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsK
KyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKKworICAgICAgICBlcnJvck1lc3NhZ2Ut
PlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFu
dFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVy
KCkpLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGJpbmFyeTsKK30KKworLy8gUGFj
a3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxn
b3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBw
ZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2Vk
IHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW1CaW5h
cnk6OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hh
ZGVyICpmcmFnbWVudFNoYWRlcikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4
dCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGlt
dW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFn
bWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBp
bnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwor
ICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7CisgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAz
IHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0g
bWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJs
ZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gMDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47
IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsg
ciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZh
aWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9
IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAm
KnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBt
YXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1u
XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2Vb
Y29sdW1uXSA+PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIg
PSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2lu
Z1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsK
KworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1Y2Nlc3Mp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sg
dmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVz
ZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBmb3IgKGludCByID0g
MDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgeworICAgICAgICBpZiAocGFja2lu
Z1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVsz
XSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtW
YXJ5aW5ncyhzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRl
cikKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSB2
YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAh
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCisgICAgeworICAg
ICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKKyAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gdmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyB2dHhWYXIrKykKKyAgICB7CisgICAgICAgIHZ0eFZhci0+cmVnID0gLTE7CisgICAgICAg
IHZ0eFZhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0
aGUgcmVnaXN0ZXIgZmlsZQorICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWlu
Z3MocGFja2luZywgZnJhZ21lbnRTaGFkZXIpOworCisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5n
VmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBn
bF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0
KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1dCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1l
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5w
dXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2
YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBv
dXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5w
dXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7CisKKyAg
ICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMg
bm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOworCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnN0
cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOworCisg
ICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAg
IntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9yIChBdHRyaWJ1dGVB
cnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdp
bigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmli
dXRlKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzog
dmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExTTCArPSAiICAgIGZs
b2F0M3gzICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogdmVydGV4SExT
TCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4
KSArICI7XG4iOworCisgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVU
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyBy
IDwgcmVnaXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFj
a2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIg
OiAxKSk7CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3Rl
clNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIp
ICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3Jk
IDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQor
CisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAg
ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsK
KyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
KyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUo
YXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7CisgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4
SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsg
Iik7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAg
ICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxT
aXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0
LmdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xf
UG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7
CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCisgICAgewor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGds
X1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01B
WF9TTTMpICsgIik7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0Zy
YWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsK
KyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7
CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsg
aSAqIHJvd3MgKyBqOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0
cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0
ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJl
ZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0g
PT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRl
eEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5u
YW1lOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlp
bmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikg
KyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAg
ICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAg
ICAgICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJh
Z0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Cisg
ICAgICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBk
eF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7CisgICAgfQorCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisgICAg
cGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgorICAgICAg
ICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9G
cmFnQ29vcmQudztcbiI7CisgICAgICAgIAorICAgICAgICBpZiAoc20zKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdo
dC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gZHhfQ29vcmQueSAt
IGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lk
dGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5
UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29y
ZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29y
ZC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
LShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsgZHhfQ29vcmQudztc
biI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zy
YWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBk
eF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncg
PSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29v
cmQgPSBpbnB1dC5nbF9Qb2ludENvb3JkO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlu
cHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOworICAgIH0KKwor
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxl
Um93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7
IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAg
ICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJd
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dz
ID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3Jb
MF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoY29uc3QgQXR0cmlidXRlQmluZGlu
Z3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwg
IWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXND
b21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0
ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CisgICAgc3Rk
OjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworCisgICAgaWYg
KCFsaW5rVmFyeWluZ3MocGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVy
dGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBD
b250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNoYXIgKnZlcnRleFBy
b2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNf
Ml8wIjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1No
YWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKworICAgIElEM0QxMEJsb2IgKnZl
cnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeSh2ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFBy
b2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9
IGNvbXBpbGVUb0JpbmFyeShwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0
YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQorICAg
IHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhT
aGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhF
eGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1Q
aXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxS
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVy
dGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKworICAgICAgICB2ZXJ0ZXhC
aW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAg
ICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOworCisg
ICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGF0dHJpYnV0ZUJpbmRpbmdzLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbGlu
a1VuaWZvcm1zKEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRU
YWJsZVZTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hl
ZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisgICAgICAgICAgICAv
LyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRl
Y29yYXRpb24KKyAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOworICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKKyAgICAgICAgICAgIG1EeENvb3JkTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7CisgICAgICAgICAgICBtRHhI
YWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNp
emUiKTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0Zyb250Q0NXIik7CisgICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKKworICAgICAgICAgICAg
Y29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJt
aW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVy
dGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1
dGVzKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0
ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6
Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsr
KQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0
cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiAh
PSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMg
Ym91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisK
KyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
OworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZl
IGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmli
dXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
b3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8
PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRp
b24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlv
biA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1l
KTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRB
dHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxl
Um93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRl
eCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2
YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1
dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9
IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0Nv
dW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKKworICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAg
bVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1Vu
aWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkK
K3sKKyAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsK
KworICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRl
eCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykK
KyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxl
LT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKKworICAgICAgICBEM0RYQ09OU1RBTlRf
REVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQg
PSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50
RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNv
dW50KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAo
IWRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlv
bikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBh
IGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZv
cm1zCisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRl
ZmluZWQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwg
Y29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQoreworICAgIGlmIChjb25z
dGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJl
Z2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0Nv
bnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9
IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRU
YWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAg
ICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5h
Y3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FN
UExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAg
ICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxl
ckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVf
Q1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVz
ZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0
Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19T
VFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5k
ZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZp
ZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExF
IGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5k
bGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVs
ZERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQg
PSAxOworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFi
bGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRl
c2NyaXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0g
KGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRl
eCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3Jt
KHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKKyAgICAg
IGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgor
ICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShz
aGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5h
bWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0
aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9
IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOworCisgICAgaWYoIXVu
aWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hl
Y2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOwor
CisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBkZWxldGUgdW5pZm9ybTsK
KyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHVuaWZv
cm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc2hhZGVyID09IEdMX1ZF
UlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOworCisg
ICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICByZXR1cm4gdW5pZm9ybS0+dHlw
ZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Cisg
ICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkK
KyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihf
bmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sK
KyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQg
c2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQz
RFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9C
T09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9W
RUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBt
YXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVj
b3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgaWYgKG5hbWUu
Y29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9
IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVV
bmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBuYW1l
ID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUgZmllbGQgZGVjb3Jh
dGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9zID0gbmFtZS5maW5kKCIu
XyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgbmFtZS5yZXBs
YWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgZGVj
b3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykKKyAgICB7CisgICAgICAgIHJldHVybiBu
YW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJh
cl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDMpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRo
LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNU
QU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCB8fCB0
YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGogPCB3
aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICog
NCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbElu
ZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBz
LmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6IDA7Cisg
ICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDAgPyB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAgaW50IGNvcHlDb3Vu
dCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291bnQpKTsK
KyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApCisgICAg
eworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgg
Pj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5m
bG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0
VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCwgYm9vbFZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29s
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
U107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7CisgICAgfQor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2Ft
cGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQq
KXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7Cisg
ICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52
cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcklu
ZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5k
ZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
eworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZb
MV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1u
aXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50
IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlsw
XSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAg
fQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
NGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAg
IEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0g
RDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0
KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYo
dGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKK3sKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25z
dCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAg
fQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9h
dDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9Cit9CisKKy8vIGFwcGVuZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhl
IHByb2dyYW0gaW5mbyBsb2cuCisvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBm
aWxlIHBhdGggaW4gc29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKKy8vIG1lc3NhZ2VzLCBz
byBsZXRzIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9t
IHRoZSBsb2cuCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChj
b25zdCBjaGFyICptZXNzYWdlKQoreworICAgIHN0ZDo6c3RyaW5nIG1zZyhtZXNzYWdlKTsKKwor
ICAgIHNpemVfdCBmb3VuZDsKKyAgICBkbworICAgIHsKKyAgICAgICAgZm91bmQgPSBtc2cuZmlu
ZChmYWtlcGF0aCk7CisgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAg
ICAgICAgeworICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZmFrZXBhdGgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
OworCisgICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkpOworfQorCit2b2lk
IFByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikK
K3sKKyAgICBpZiAoIWZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjaGFyIGluZm9bMTAyNF07CisKKyAgICB2YV9saXN0IHZhcmFyZzsKKyAgICB2YV9zdGFydCh2
YXJhcmcsIGZvcm1hdCk7CisgICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0
LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisgICAgc2l6ZV90IGluZm9MZW5ndGgg
PSBzdHJsZW4oaW5mbyk7CisKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgbUlu
Zm9Mb2cgPSBuZXcgY2hhcltpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShtSW5mb0xv
ZywgaW5mbyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNpemVfdCBsb2dMZW5n
dGggPSBzdHJsZW4obUluZm9Mb2cpOworICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hhclts
b2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShuZXdMb2csIG1JbmZv
TG9nKTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCwgaW5mbyk7CisKKyAgICAg
ICAgZGVsZXRlW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gbmV3TG9nOworICAgIH0K
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpyZXNldEluZm9Mb2coKQoreworICAgIGlmIChtSW5m
b0xvZykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBtSW5mb0xvZzsKKyAgICAgICAgbUluZm9M
b2cgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgp
IGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCitpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHJldHVy
biBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
ZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKGJ1ZlNpemUgPiAwKQorICAgIHsK
KyAgICAgICAgaWYgKG1JbmZvTG9nKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCA9IHN0
ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOworICAgICAgICAgICAg
bWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
bmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAg
ICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcworICAgIHVuc2lnbmVkIGludCBhY3Rp
dmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7CisgICAgZm9yIChh
dHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsr
KQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKKyAgICB9
CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpzdHJp
bmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOworCisgICAgICAg
IHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0g
MV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9
IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQorCisgICAgKnR5cGUgPSBt
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAg
ICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9
CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7
CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9
IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsr
KQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5u
YW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4
KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAx
KSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7
Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1z
CisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOworICAgIHVuc2lnbmVkIGludCB1
bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgp
OyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1l
LmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZl
VW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUo
KSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50
KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0
cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKKworICAgICAgICBpZiAobVVuaWZvcm1z
W3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSAi
WzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCks
IGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAg
aWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1l
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5h
cnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKK30KKwor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKK3sKKyAgICBpbnQg
Y291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1w
dHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8i
KSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVuaWZv
cm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0aCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFBy
b2dyYW1CaW5hcnk6OnZhbGlkYXRlKCkKK3sKKyAgICByZXNldEluZm9Mb2coKTsKKworICAgIGFw
cGx5VW5pZm9ybXMoKTsKKyAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkpCisgICAgewor
ICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojp2
YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKQoreworICAgIC8vIGlmIGFueSB0d28gYWN0
aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgcmVm
ZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRo
ZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5kCisg
ICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFMSURf
T1BFUkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQorICAgIHsK
KyAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsg
KytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dpY2Fs
VGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRd
ICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
bVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJl
IGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAo
bVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVu
aWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCki
LCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlw
ZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobG9nRXJyb3JzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5n
IHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQp
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBt
U2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERl
cHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoUmFuZ2VMb2Nh
dGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4Q29vcmRM
b2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9j
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Cit9
CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNkYzcxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApAQCAtMCwwICsxLDIy
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6
UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFuZCByZWxh
dGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdl
IDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworI2RlZmluZSBMSUJH
TEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8
ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0
ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRl
ciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisKKyAgICB+
VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7CisKKyAgICBjb25zdCBHTGVudW0gdHlw
ZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQorICAg
IGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAg
ICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lzdGVySW5mbworICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQ0SW5kZXggPSAtMTsK
KyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOworICAgICAgICAgICAgYm9vbEluZGV4ID0g
LTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gMDsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
clNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfQk9PTDogICAg
Ym9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0OiAgZmxvYXQ0SW5kZXggPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBE
M0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyQ291
bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQpY29uc3RhbnREZXNjcmlwdGlvbi5SZWdp
c3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZmxvYXQ0SW5kZXg7
CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAgICAgIGludCBib29sSW5kZXg7CisKKyAg
ICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsKKworICAgIFJlZ2lzdGVySW5mbyBwczsK
KyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRp
bmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcworc3RydWN0
IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworCisg
ICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKKyAgICB1bnNp
Z25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgbGlua2luZyBh
IHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBQcm9ncmFt
QmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQoreworICBwdWJsaWM6CisgICAgUHJvZ3JhbUJp
bmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVy
dGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hh
ciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsK
KworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVUeXBlIGdldFNhbXBsZXJUZXh0dXJlVHlw
ZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBHTGlu
dCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOworCisgICAgR0xpbnQgZ2V0
VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBz
ZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRV
bmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdldFVuaWZvcm1p
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisKKyAg
ICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4
RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4Q29vcmRMb2NhdGlvbigpIGNv
bnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAg
R0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhQb2lu
dHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlBbGxVbmlmb3Jtcygp
OworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisgICAgYm9vbCBsaW5rKGNvbnN0IEF0dHJp
YnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisgICAgaW50IGdldEluZm9Mb2dM
ZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOworCisg
ICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIEdMaW50IGdldEFj
dGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXpl
LCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9y
bUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworCisgICAg
dm9pZCB2YWxpZGF0ZSgpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9y
cyk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJl
cGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlm
b3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJz
Y29yZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW1C
aW5hcnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhs
c2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFi
bGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgYm9vbCBsaW5rVmFyeWluZ3Mo
c3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisg
ICAgYm9vbCBsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoR0xlbnVtIHNoYWRlciwgSUQz
RFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0o
R0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQz
RFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0g
IiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09O
U1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
OworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBib29sIGFw
cGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBs
eVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
RDNEWFZFQ1RPUjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4g
KnYpOworCisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVz
c2FnZSk7CisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywgLi4uKTsK
KyAgICB2b2lkIHJlc2V0SW5mb0xvZygpOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1
ZVNlcmlhbCgpOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
ZHVyaW5nIGxpbmtpbmcuCisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVBT
OworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKKworICAgIEF0dHJp
YnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgaW50IG1TZW1h
bnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3QgU2FtcGxlcgorICAg
IHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5p
dDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsKKworICAgIFNhbXBs
ZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIFNhbXBsZXIgbVNh
bXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisgICAgR0x1aW50
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJh
bmdlOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5Owor
ICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlm
b3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRl
eDsKKworICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0
aExvY2F0aW9uOworICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247CisgICAgR0xpbnQgbUR4SGFs
ZlBpeGVsU2l6ZUxvY2F0aW9uOworICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CisgICAg
R0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworCisgICAgY2hhciAqbUluZm9Mb2c7Cisg
ICAgYm9vbCBtVmFsaWRhdGVkOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dS
QU1fQklOQVJZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKaW5kZXggNjAwNDI1NS4uNGI5MTFlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmNwcApAQCAtNjMsNjggKzYzLDE0NCBAQCBHTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpn
ZXRTdGVuY2lsU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShn
ZXREM0RGb3JtYXQoKSk7CiB9CiAKLVJlbmRlcmJ1ZmZlclRleHR1cmU6OlJlbmRlcmJ1ZmZlclRl
eHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkK
Ky8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLworCitS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCit7CisgICAgbVRleHR1cmUy
RC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6flJlbmRlcmJ1ZmZl
clRleHR1cmUyRCgpCit7CisgICAgbVRleHR1cmUyRC5zZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1
cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJl
bmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5v
dGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0
dXJlMkQtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0
dXJlMkQtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQp
OworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5k
ZXJidWZmZXJUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkQtPmdldERlcHRoU3RlbmNpbChtVGFyZ2V0KTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0V2lkdGgoMCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRIZWln
aHQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gbVRl
eHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjp+UmVuZGVy
YnVmZmVyVGV4dHVyZSgpCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUuc2V0KE5VTEwpOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKK30KKworRDNERk9STUFUIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0RDNERm9ybWF0KDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKK30KKworLy8vLy8g
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorewor
ICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKQoreworICAgIG1UZXh0dXJl
Q3ViZU1hcC5zZXQoTlVMTCk7CiB9CiAKIC8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhl
aXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKIC8vIFJlbmRlcmJ1ZmZl
cnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJl
ZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6YWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFBy
b3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgbVRleHR1cmUtPmFkZFBy
b3h5UmVmKHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHByb3h5KTsK
IH0KIAotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5yZWxlYXNl
UHJveHkocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1hcC0+cmVsZWFzZVByb3h5KHByb3h5KTsK
IH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFJlbmRlclRh
cmdldCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICByZXR1cm4g
bVRleHR1cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVD
dWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXREZXB0aFN0ZW5jaWwoKQorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLUdMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZTo6Z2V0V2lkdGgoKSBjb25zdAorR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+
Z2V0V2lkdGgoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KLSAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEhl
aWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KLSAKLUdMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5n
ZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQog
Ci1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0Qz
REZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEQzREZvcm1hdCgpOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gs
IDApOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFNhbXBsZXMoKSBjb25z
dAorR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJl
OjpnZXRTZXJpYWwoKSBjb25zdAordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjpnZXRTZXJpYWwoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJl
bmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKIH0KIAorLy8vLy8vIFJlbmRlcmJ1ZmZlciBJbXBs
ZW1lbnRhdGlvbiAvLy8vLy8KKwogUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIoR0x1aW50IGlk
LCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQog
ewogICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKQEAgLTE1MiwxMSArMjI4LDE1IEBAIHZv
aWQgUmVuZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29uc3QKICAgICBSZWZDb3VudE9iamVjdDo6cmVs
ZWFzZSgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5j
ZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKQEAgLTI0MywxMSArMzIzLDE1IEBA
IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5SZW5kZXJidWZmZXJTdG9yYWdlKCkKIHsKIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVMTDsKQEAgLTM1Niw2ICs0NDAs
OCBAQCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJU
YXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNDI4LDggKzUxNCwxNSBAQCBE
ZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIoKQogICAgIH0KIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVm
ZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogeworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsK
KyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgcmV0dXJuIG1E
ZXB0aFN0ZW5jaWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCmluZGV4IDYwZWMwNTguLmU2ZDVkZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aApAQCAtMjEsNyArMjEsOCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNzIFRleHR1cmU7Citj
bGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKIGNsYXNzIFJlbmRlcmJ1ZmZl
cjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwpAQCAtNTgs
MTIgKzU5LDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZhY2UpOwogfTsKIAotY2xhc3MgUmVuZGVy
YnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK2NsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIHsKICAgcHVi
bGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRh
cmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CiAKLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlKCk7CisgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7CiAKICAgICB2b2lkIGFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwpAQCAtODAsOSArODEsMzcgQEAgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlKTsKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKIAotICAgIEJpbmRpbmdQb2ludGVy
IDxUZXh0dXJlPiBtVGV4dHVyZTsKKyAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4
dHVyZTJEOworICAgIEdMZW51bSBtVGFyZ2V0OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CisgIHB1YmxpYzoK
KyAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwg
R0xlbnVtIHRhcmdldCk7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCgpOworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
KyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzREZP
Uk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxl
cygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXApOworCisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmVDdWJlTWFwPiBt
VGV4dHVyZUN1YmVNYXA7CiAgICAgR0xlbnVtIG1UYXJnZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKaW5kZXggYWM1OGFiZS4u
NTdmZDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBTaGFkZXI6OmdldEluZm9Mb2co
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7CiAgICAg
aW50IGluZGV4ID0gMDsKIAotICAgIGlmIChtSW5mb0xvZykKKyAgICBpZiAoYnVmU2l6ZSA+IDAp
CiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsK
LSAgICB9CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAg
ICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CiAKLSAg
ICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAg
ICB9CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNo
YXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIKIHsKICAg
ICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKHNvdXJjZSkKKyAgICBpZiAoYnVmU2l6ZSA+IDAp
CiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihzb3VyY2UpKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7Ci0gICAg
fQorICAgICAgICBpZiAoc291cmNlKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCA9IHN0
ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKKyAgICAgICAgICAgIG1l
bWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOworICAgICAgICB9CiAKLSAgICBpZiAoYnVmU2l6
ZSkKLSAgICB7CiAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSAnXDAnOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKaW5kZXggOWM3YzBk
Zi4uNDMwODNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9TaGFkZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5oCkBAIC00Miw3ICs0Miw3IEBAIHR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZh
cnlpbmdMaXN0OwogCiBjbGFzcyBTaGFkZXIKIHsKLSAgICBmcmllbmQgUHJvZ3JhbTsKKyAgICBm
cmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBwdWJsaWM6CiAgICAgU2hhZGVyKFJlc291
cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CkBAIC0xMjgsNyArMTI4LDcgQEAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5OwogCiBjbGFzcyBW
ZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAg
ZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFZlcnRleFNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKaW5kZXggMjkxNzdk
Mi4uMWFmMDhjYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuY3BwCkBAIC0zMSw4ICszMSwxMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0
b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlhbCA9IDE7CiAKIHN0YXRpYyBEM0RGT1JNQVQgQ29u
dmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewotICAg
IGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAg
ICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCisgICAgaWYgKElz
RGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgeworICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7
CisgICAgfQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUIHx8CisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUKQogICAgIHsKICAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOwogICAgIH0KQEAg
LTc1LDYgKzc5LDEwIEBAIHN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBl
KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogCiBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICBzd2l0Y2go
Zm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0w4OgpAQCAtOTUsNiArMTAzLDIxIEBA
IHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0VGV4dHVyZVVz
YWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJs
ZSkKK3sKKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7CisKKyAgICBpZiAoZDNkZm10ID09IEQzREZN
VF9JTlRaKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfREVQVEhTVEVOQ0lM
OworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX1JFTkRFUlRB
UkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdlOworfQorCiBJbWFnZTo6SW1hZ2UoKQog
ewogICAgIG1XaWR0aCA9IDA7IApAQCAtMTU1LDYgKzE3OCw4IEBAIHZvaWQgSW1hZ2U6OmNyZWF0
ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAgICAgY29uc3QgRDNEUE9P
TCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1FTTsKKyAgICBjb25zdCBEM0RGT1JNQVQgZDNk
Rm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7CisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRf
SU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKIAog
ICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCiAgICAgewpAQCAtMTc4LDcgKzIw
Myw3IEBAIHZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQogICAgICAgICAgICAgbGV2ZWxUb0Zl
dGNoID0gdXBzYW1wbGVDb3VudDsKICAgICAgICAgfQogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0
LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBnZXREM0RGb3JtYXQoKSwKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVl
c3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdU
ZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0yNjQsNyAr
Mjg5LDcgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKIAotICAgIGlmIChzb3VyY2VTdXJmYWNl
ICE9IGRlc3RTdXJmYWNlKQorICAgIGlmIChzb3VyY2VTdXJmYWNlICYmIHNvdXJjZVN1cmZhY2Ug
IT0gZGVzdFN1cmZhY2UpCiAgICAgewogICAgICAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhl
bFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CiAKQEAgLTI4
NCwxMCArMzA5LDE5IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5CiB9CiAKIC8vIFN0b3JlIHRo
ZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVp
Z2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0
aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRl
cyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5n
bGUgYXQgbG9ja2VkLnBCaXRzIHdpdGggbG9ja2VkLlBpdGNoIGJ5dGVzIGluIGJldHdlZW4gZWFj
aCBsaW5lLgogdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAg
ICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIFJFQ1Qg
bG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEdMc2l6ZWkgaW5wdXRQ
aXRjaCA9IC1Db21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCk7CiAgICAgaW5wdXQgPSAoKGNoYXIqKWlucHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0g
MSk7CiAKQEAgLTI5NywyOSArMzMxLDM2IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0CiAgICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6
Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAg
IGlmIChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2Fk
QWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1h
dCgpID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdl
dEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBE
M0RGTVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAg
ICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGxvYWRS
R0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAt
MzI4LDcgKzM2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0CiAgICAgICAgIHN3aXRjaCAo
bUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAg
bG9hZFJHQjU2NURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQjU2NURh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszNzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
KyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM0Niw3ICsz
ODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQp
CiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdC
QTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgIH0KQEAgLTM1NiwxOSArMzk3LDE5IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0CiAgICAgICAgIHsKICAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVk
IHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAg
ICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9S
R0I6Ci0gICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRSR0JGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBRmxvYXREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwg
b3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBA
IC0zNzgsMjggKzQxOSwzMCBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICB7CiAg
ICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdS
QSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OworICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVt
aW5hbmNlSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVt
aW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFI
YWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBSGFs
ZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgIH0KKworICAgIHVubG9jaygpOwogfQogCi12b2lkIEltYWdlOjpsb2Fk
QWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtNDA4LDcg
KzQ1MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoCiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOwpAQCAtNDE5LDcgKzQ2Miw0NyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaAog
ICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
TlVMTDsKKyAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKKworICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKKworICAg
ICAgICBpbnQgeDsKKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKKyAgICAg
ICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAw
eEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0
W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OworICAgICAg
ICB9CisKKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKKyAgICAgICAgewor
ICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKKyAgICAgICAgICAgIC8vIElu
dGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHplcm8K
KyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291
cmNlRGF0YSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJiaXQs
IG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KKyAgICAgICAgICAgIF9fbTEyOGkgbG8gPSBf
bW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAgICAgICAgICAgX19t
MTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisKKyAg
ICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVz
dFt4XSksIGxvKTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0
PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBI
YW5kbGUgdGhlIHJlbWFpbmRlcgorICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNv
dXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRB
bHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDI4LDcgKzUxMSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Cisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IDA7CkBAIC00MzksNyArNTIyLDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2kKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDQ4LDcgKzUz
MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IDA7CkBAIC00NTksMTcgKzU0MiwxNiBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0OwogICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5
dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKIAogICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBC
R1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKICAgICAgICAgewpAQCAtNDg4LDcgKzU3MCw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVM
TDsKQEAgLTQ5Nyw3ICs1NzksNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKQEAgLTUwOCw3ICs1OTAsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgfQogfQog
Ci12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6
OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTUxNyw3
ICs1OTksNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZAogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3hdOwpAQCAtNTI4LDE3ICs2MTAsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVyUGl4ZWwg
PSBuYXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsK
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwog
ICAgICAgICAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9y
bWF0CiAgICAgICAgIHsKQEAgLTU1Nyw3ICs2MzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAg
LTU2Niw3ICs2NDcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBd
OwpAQCAtNTc3LDcgKzY1OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpCiAgICAgfQogfQog
Ci12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKQEAgLTU4Niw3ICs2NjcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFI
YWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZQogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4
KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU5Nyw3ICs2NzgsNyBAQCB2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQlVC
eXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTYw
Niw3ICs2ODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07CkBAIC02MTcsNyArNjk4LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewog
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjI2LDcgKzcwNyw3
IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0
OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
ICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
QEAgLTYzOCw3ICs3MTksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAgICAgfQogfQogCi12
b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0g
TlVMTDsKQEAgLTY0Nyw3ICs3MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5
ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeCAqIDMgKyAwXTsKQEAgLTY1OCw3ICs3MzksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC02NjcsNyArNzQ4
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY3OCw3ICs3NTksNyBAQCB2b2lkIEltYWdlOjpsb2Fk
UkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjg4
LDcgKzc2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNCk7CisgICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgaW50IHggPSAwOwogCiAg
ICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCkBAIC03MjAsNyArODAxLDcgQEAg
dm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEcKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JB
VUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAg
LTcyOCw3ICs4MDksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CkBAIC03MzgsNyArODE5LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0
NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzQ3
LDcgKzgyOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBz
b3VyY2VbeF07CkBAIC03NTksNyArODQwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjps
b2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzY4LDcgKzg0OSw3IEBAIHZvaWQgSW1hZ2U6
OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03ODAsNyArODYx
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAt
Nzg5LDEyICs4NzAsMTIgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICog
MTYpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
dm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgwMywx
MiArODg0LDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIG1lbWNw
eShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2Fk
QkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtODE3LDI1ICs4
OTgsNDMgQEAgdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVz
dCwgc291cmNlLCB3aWR0aCo0KTsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2U6OmxvYWRDb21wcmVz
c2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQp
IHsKKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOworCisgICAgUkVDVCBsb2NrUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKKworICAgIEQzRExPQ0tFRF9SRUNU
IGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsK
KyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gLUNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgs
IG1Gb3JtYXQpOworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXpl
KHdpZHRoLCBoZWlnaHQsIG1Gb3JtYXQpOworICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgKyBp
bnB1dFNpemUgKyBpbnB1dFBpdGNoOworCiAgICAgc3dpdGNoIChnZXREM0RGb3JtYXQoKSkKICAg
ICB7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgICAgbG9hZERYVDFEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhUMURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgICBsb2FkRFhUM0RhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWREWFQzRGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICAgIGxvYWREWFQ1RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERYVDVEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQorCisgICAgdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIEZsaXBD
b3B5RFhUMUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50
KiBkZXN0KSB7CkBAIC05NDgsMTEgKzEwNDcsOSBAQCBzdGF0aWMgdm9pZCBGbGlwQ29weURYVDVC
bG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdAog
ICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIpOwogfQogCi12b2lk
IEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJU
KHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9
PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKICAg
ICBBU1NFUlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwpAQCAtOTg1LDcgKzEwODIsNyBAQCB2b2lk
IEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKIAogICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQogICAg
ICAgICAgICAgICAgIHsKQEAgLTk5NiwxMSArMTA5Myw5IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQx
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkRFhUM0RhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0
aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1
dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBA
IC0xMDM1LDcgKzExMzAsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQg
KiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAgICAgICB7CkBAIC0xMDQ2LDExICsxMTQx
LDkgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAogewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAl
IDQgPT0gMCk7CiAgICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lk
dGggPT0gMSk7CiAgICAgQVNTRVJUKGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKICAgICBBU1NFUlQo
b3V0cHV0UGl0Y2ggJSAxNiA9PSAwKTsKQEAgLTEwODUsNyArMTE3OCw3IEBAIHZvaWQgSW1hZ2U6
OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlCiAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7
ICsreSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
KnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKIAogICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQogICAgICAgICAg
ICAgICAgIHsKQEAgLTEyNjcsOSArMTM2MCw5IEBAIHZvaWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwKICAg
ICBtRGlydHkgPSB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCksCi0gICAg
ICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKG1SZW5kZXJUYXJnZXQpKSwK
K1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSkKKyAgICA6IG1EM0RV
c2FnZSh1c2FnZSksCisgICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29s
KHVzYWdlKSksCiAgICAgICBtVGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkKIHsK
IH0KQEAgLTEyODAsNyArMTM3Myw3IEBAIFRleHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2Uo
KQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1SZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0Vf
UkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsKIH0KIAogYm9vbCBU
ZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QKQEAgLTEyOTMsNiArMTM4NiwxMSBAQCBE
M0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKICAgICByZXR1cm4gbUQzRFBv
b2w7CiB9CiAKK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EM0RVc2FnZTsKK30KKwogdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpnZXRU
ZXh0dXJlU2VyaWFsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVRleHR1cmVTZXJpYWw7CkBAIC0x
NDUwLDE1ICsxNTQ4LDcgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhl
bHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlLT5s
b2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFn
ZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAg
ICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0
SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKICAg
ICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xNDY3LDUyICsxNTU3LDE2
IEBAIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQog
ICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVE
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21w
dXRlQ29tcHJlc3NlZFBpdGNoKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkp
OwotICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwot
ICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lk
dGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQor
ICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgp
LCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7CiAgICAgfQogfQogCiBib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMs
IEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdp
ZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0g
ICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKElzQ29tcHJlc3NlZChpbWFnZS0+Z2V0Rm9ybWF0KCkpKQotICAgIHsK
LSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbWFnZS0+Z2V0Rm9ybWF0KCkpCi0gICAg
ewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBE
M0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxv
Y2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4
ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhl
aWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAg
ICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
CiAgICAgfQogCkBAIC0xNTIxLDM3ICsxNTc1LDkgQEAgYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWcK
IAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKLSAg
ICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9m
ZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1h
dCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBp
eGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247Ci0gICAgICAg
IHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9mZnNl
dCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7Ci0KLSAgICAg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdl
LT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRl
Q29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAgaW50IGlucHV0U2l6
ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgICAg
ICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlP
ZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0
LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNp
emUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZENvbXBy
ZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CiAgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNjY3LDIzICsxNjkzLDI3IEBA
IGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVRleHR1cmVT
dG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0
dXJlKSA6IFRleHR1cmVTdG9yYWdlKHRydWUpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3Rv
cmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFn
ZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZl
clN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7CiAgICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVy
ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0
KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbVJlbmRlclRhcmdldFNlcmlh
bChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6
VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2Fn
ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBt
UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KICAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
d2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVS
VEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3Qg
cG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUK
KyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBj
cmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscywgZ2V0
VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CiAgICAgfQog
fQogCkBAIC0xNjk1LDYgKzE3MjUsOCBAQCBUZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3Jh
Z2UyRCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1
cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQogewog
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKQEAgLTE3NzgsMTkgKzE4MTAs
MjAgQEAgR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCk7Ci19Ci0K
LUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmUyRDo6Z2V0
SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFy
cmF5WzBdLmdldFR5cGUoKTsKKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0
KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRl
eHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0QzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQz
REZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0u
Z2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1h
dCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOwogfQogCiB2b2lk
IFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQpAQCAtMjAxNiwxMCArMjA0
OSwxMCBAQCB2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTAogICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6
RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0
cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwogICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0
VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRh
cmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0
VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0
b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQz
ZGZtdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMjA3NCw4ICsyMTA3LDggQEAgYm9vbCBUZXh0dXJl
MkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZMT0FUICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAotICAgICAg
ICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAgaWYgKChnZXRJbnRlcm5h
bEZvcm1hdCgwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hB
TEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRl
cigpKSkKICAgICB7CiAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1N
aW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1QpKQogICAgICAgICB7CkBAIC0yMTU3LDkgKzIxOTAsMTQgQEAgYm9vbCBUZXh0dXJl
MkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZTJEOjppc0NvbXBy
ZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJ
bnRlcm5hbEZvcm1hdCgpKTsKKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9y
bWF0KGxldmVsKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZl
bCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1
cmUoKSBjb25zdApAQCAtMjE3MywxMSArMjIxMSwxMSBAQCB2b2lkIFRleHR1cmUyRDo6Y3JlYXRl
VGV4dHVyZSgpCiAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7
CiAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKICAgICBH
TGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JN
QVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgY29uc3QgYm9v
bCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKG1V
c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEM0RGT1JNQVQg
ZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgRFdPUkQgZDNkdXNh
Z2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxl
dmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0
aCwgaGVpZ2h0KTsKICAgICAKICAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQogICAg
IHsKQEAgLTIyMTcsOSArMjI1NSwxMCBAQCB2b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVy
VGFyZ2V0KCkKICAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRo
KCk7CiAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7
CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7
CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQo
KTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAgICBuZXdUZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHRydWUpOworICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2
ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjIzMiw4ICsyMjcxLDggQEAgdm9pZCBU
ZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAgICAgICAgaWYgKCFj
b3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkp
KQogICAgICAgICAgICAgICAgIHsgICAKICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3Qt
PlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzE1LDEyICsyMzU0LDE0IEBAIFJlbmRl
cmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKIAogICAg
IGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJl
KHRoaXMsIHRhcmdldCkpOworICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJi
dWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsK
QEAgLTIzMzMsNiArMjM3NCwzMyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIAogICAgIHVwZGF0ZVRleHR1cmUoKTsKICAgICAK
KyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVw
dGgoMCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51
bSB0YXJnZXQpCit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKworICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoZ2V0
U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFs
bHkgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKDApKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxl
dmVsKDApOwogfQogCkBAIC0yMzUzLDE4ICsyNDIxLDIyIEBAIFRleHR1cmVTdG9yYWdlICpUZXh0
dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCiAgICAgcmV0dXJuIG1UZXhTdG9y
YWdlOwogfQogCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChp
bnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQp
Ci0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBtRmlyc3RSZW5kZXJUYXJnZXRT
ZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFU
IGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKQorICAgIDogVGV4dHVyZVN0b3JhZ2UodXNh
Z2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVD
dWJlU2VyaWFscygpKQogewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxM
KTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3Qg
cG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUK
KyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBj
cmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwot
ICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjM3Niw2ICsyNDQ4
LDggQEAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCkKICAg
ICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQs
IGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBA
IC0yNDU0LDM1ICsyNTI4LDM2IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkg
Y29uc3QKICAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKIH0KIAotR0xzaXplaSBUZXh0
dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNpemVpIFRleHR1cmVD
dWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAg
ICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0V2lkdGgoKTsKKyAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgoKTsKICAgICBl
bHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRI
ZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWln
aHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF1bbGV2ZWxdLmdldEhlaWdodCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlb
ZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAgICAgICAg
IHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCk7Ci19
Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VHlwZSgpIGNvbnN0CitHTGVudW0gVGV4dHVy
ZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7CisgICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRGb3JtYXQoKTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBHTF9OT05FOwogfQogCi1EM0RGT1JNQVQgVGV4dHVyZUN1
YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6Omdl
dEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxldmVsIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQpAQCAtMjU4Miw4ICsyNjU3LDggQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAorICAgICAgICAoZ2V0SW50ZXJu
YWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9IQUxGX0ZM
T0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkp
CiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmls
dGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUKSkKICAgICAgICAgewpAQCAtMjY3OSw5ICsyNzU0LDkgQEAgYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBjb25zdAorYm9vbCBUZXh0dXJlQ3Vi
ZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewot
ICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJu
IElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSk7CiB9CiAKIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29u
c3QKQEAgLTI2OTQsMTEgKzI3NjksMTEgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4
dHVyZSgpCiB7CiAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsKLSAgICBEM0RG
T1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgY29u
c3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkg
JiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEM0RG
T1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgRFdP
UkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAog
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZUN1YmVNYXAobGV2ZWxzLCBmb3JtYXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgc2l6ZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQogICAgIHsK
QEAgLTI3NDIsOSArMjgxNywxMCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKQogICAgIHsKICAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRE
M0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2Fn
ZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwogCi0gICAg
ICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9y
bWF0LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKIAogICAgICAgICBp
ZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjc1OSw4ICsyODM1LDggQEAg
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTI5MjksMTAgKzMwMDUsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHNpemUKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsK
ICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwg
dHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5k
ZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FO
R0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2Fn
ZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFy
Z2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxz
LCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKICAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKIAogICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCkBAIC0zMDQ5LDEy
ICszMTI1LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQogCiAgICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQog
ICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgp
LCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUZhY2VQ
cm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1GYWNlUHJv
eGllc1tmYWNlXTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJm
YWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQogewog
ICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwpAQCAtMzA4Nyw0ICsz
MTY1LDQgQEAgVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAotfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmgKaW5kZXggMTlhNmViNS4uMmU2MzEzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKQEAgLTUzLDkgKzUzLDYg
QEAgY2xhc3MgSW1hZ2UKICAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30KICAg
ICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9CiAKLSAgICBIUkVTVUxUIGxvY2so
RDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwotICAgIHZvaWQg
dW5sb2NrKCk7Ci0KICAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIApAQCAtNzAsNTUgKzY3LDU3IEBAIGNsYXNz
IEltYWdlCiAgICAgdm9pZCB1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CiAKICAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAgICAgICAgICAgICAgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2b2lkIGxvYWRB
bHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRBbHBoYURhdGFTU0Uy
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
IHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5j
ZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBj
b25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2Fk
UkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0I1NjVEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAorICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQg
bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2Fk
UkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBSGFs
ZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKICAgICB2b2lkIGxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdm9pZCBsb2FkRFhUMURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkRFhU
M0RhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAKICAgICB2b2lkIGNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwpAQCAtMTI4LDYg
KzEyNyw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKIAorICAg
IEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVj
dCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6
ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsKQEAgLTE0NCwyMCArMTQ2LDIxIEBAIGNs
YXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIGV4cGxpY2l0IFRleHR1
cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7
CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc01hbmFnZWQo
KSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKKyAgICBEV09SRCBnZXRVc2Fn
ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJn
ZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBib29sIG1SZW5kZXJUYXJnZXQ7CisgICAg
Y29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7CiAKICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7CkBAIC0xOTAsMTQgKzE5Myw3IEBA
IGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51
bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNv
bnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAwOwogCiAgICAgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBSZW5kZXJidWZm
ZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CkBAIC0yMTYsOCArMjEyLDYg
QEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogICAgIHN0YXRpYyBjb25z
dCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7
ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFs
dWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBy
ZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVy
YnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CiAgICAgYm9vbCBzdWJJbWFnZShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZElt
YWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7
CkBAIC0yNTgsNyArMjUyLDcgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UyRCA6IHB1YmxpYyBUZXh0
dXJlU3RvcmFnZQogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UyRChJ
RGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRleHR1cmVTdG9yYWdlMkQo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29s
IHJlbmRlclRhcmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JN
QVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAtMjg2LDExICsyODAsMTIgQEAgY2xhc3Mg
VGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdl
dCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RG
b3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zMDEsNyArMjk2LDYgQEAgY2xhc3Mg
VGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4
SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRl
eEltYWdlKCk7CiAKQEAgLTMwOSw2ICszMDMsMTEgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGlj
IFRleHR1cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xl
bnVtIHRhcmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERl
cHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0zMTYsNyArMzE1LDYgQEAgY2xhc3MgVGV4
dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgp
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNv
bnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNNaXBtYXBDb21w
bGV0ZSgpIGNvbnN0OwpAQCAtMzQxLDcgKzMzOSw3IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1Ymxp
YyBUZXh0dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxz
LCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpOworICAgIFRl
eHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1
c2FnZSwgaW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7
CiAKQEAgLTM2OSwxMSArMzY3LDExIEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRl
eHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwogICAgIAotICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Cisg
ICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0SW1h
Z2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKQEAgLTM5MSw3ICszODksNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1Ymxp
YyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29t
cGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKQEAgLTM5OSw2ICszOTYsMTAg
QEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgc3RhdGljIHVu
c2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwogCisgIHByb3RlY3RlZDoKKyAgICBm
cmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7CisgICAgdmlydHVhbCBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKIApAQCAt
NDA2LDcgKzQwNyw2IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
ZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KTsKIAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAKaW5kZXggOTViYzNmYi4uNzBmNDc1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKQEAg
LTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi92
ZXJ0ZXhjb252ZXJzaW9uLmgiCkBAIC0xMjgsMTAgKzEyOSwxMSBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBU
cmFuc2xhdAogCiAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJmF0dHJpYnMgPSBtQ29u
dGV4dC0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCiAgICAgZm9yIChpbnQgYXR0cmli
dXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmli
dXRlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFj
dGl2ZSA9IChwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7
CisgICAgICAgIHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFtQmlu
YXJ5LT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CiAgICAgfQogCiAg
ICAgLy8gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBzdG9yYWdlIHNpemUgcGVyIHVzZWQgYnVmZmVy
LCBhbmQgaW52YWxpZGF0ZSBzdGF0aWMgYnVmZmVycyB0aGF0IGRvbid0IGNvbnRhaW4gbWF0Y2hp
bmcgYXR0cmlidXRlcwpAQCAtNDQ4LDggKzQ1MCw4IEBAIHN0cnVjdCBDb252ZXJzaW9uUnVsZSA6
IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQz
CiB0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBl
PGZyb21UeXBlPjo6dHlwZT4geyB9OwogCiAvLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZv
ciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2Vu
ZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVy
c2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8
R0x1aW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJ
WEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7
IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQz
RFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBn
bDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwogCiAvLyBBIDItc3RhZ2UgY29uc3RydWN0
aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVz
ZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKIC8vIHdoZXRoZXIgaXQgaXMgbm9ybWFs
aXplZCBvciBub3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5jcHAKaW5kZXggZWU4ZWNhOS4uOTVkYjU4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC01NCwyNiArNTUsMTIxIEBAIGJvb2wgdmFsaWRJbWFnZVNp
emUoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wgY29tcHJlc3Nl
ZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkK
Ky8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBm
cm9tIHRhYmxlIDMuNC4KK2Jvb2wgY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSkKK3sKKyAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiBieSBpdHNlbGYgKHVz
ZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgY2FzZSBH
TF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Cisg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgorICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxz
ZSk7CisgICAgfQorCisgICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0K
KyAgICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFM
SURfT1BFUkFUSU9OCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgICBj
YXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAg
ICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JH
QjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9P
RVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorfQorYm9vbCB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
ICAgICB9CiAKLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkK
KyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQobGV2ZWwpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQg
IT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYg
KGNvbXByZXNzZWQpCiAgICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRo
ICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fCAKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0g
MCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKICAgICAgICAgICAgIChoZWln
aHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwpAQCAtODksNiArMTg1LDQzIEBAIGJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNv
bXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGluCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
KyAgICB9CisKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFy
Z2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9y
bWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
fQorCisgICAgaWYgKGNvbXByZXNzZWQpCisgICAgeworICAgICAgICBpZiAoKHdpZHRoICUgNCAh
PSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkpIHx8CisgICAgICAg
ICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFy
Z2V0LCAwKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHhvZmZzZXQg
KyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8CisgICAgICAgIHlv
ZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCiAvLyBjaGVjayBmb3IgY29tYmluYXRpb25zIG9mIGZv
cm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwogYm9vbCB2YWxpZFJl
YWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMTA5NCw3ICsx
MjI3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwg
eW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMTAyLDcgKzEyMzUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbENv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2ZmcwogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFy
Z2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAo
dmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwg
eW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdl
U2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTI1OCw2ICsxMzkxLDE5IEBAIHZv
aWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VT
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CkBAIC0xMzU1LDIzICsxNTAxLDMxIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29w
eVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMCiAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9
IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gR0xfUkdC
QTsKIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsK
KyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQo
ZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0
ZXgyZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8v
IGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgICAgICAgICAg
aWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRh
dGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBh
cmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwg
bGV2ZWwsIEdMX05PTkUsIHRleGN1YmUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVT
dWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJl
Rm9ybWF0ID0gdGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
KyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgICAgICAgICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHRhYmxlIDMuOQogICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0
KQpAQCAtMTQxNCw2ICsxNTY4LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0wKICAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgogICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RF
TkNJTF9PRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMjMwNiwxOSArMjQ2
MywyMSBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdAogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVf
MkQpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJl
MkQgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVz
c2VkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKQEAgLTIzMjYsMTEgKzI0ODUs
MTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdM
X1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0
ZXh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwpAQCAtMjQ0MCwyOCArMjYwNiw0MSBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCiAgICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4MmQt
PmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXhjdWJl
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yNzU5LDEyICsyOTM4LDEzIEBAIGlu
dCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiBuYW1lKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRyaWJ1
dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRB
dHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCkBAIC0zMjE4LDcgKzMzOTgsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlv
bigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9MSU5L
X1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNMaW5r
ZWQoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpICE9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJv
Z3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKQEAgLTMyNDEsNiArMzQyMSw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpCiAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdU
SDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5p
Zm9ybU1heExlbmd0aCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgIH0KQEAgLTM3NjYsMTIgKzM5NDksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9y
bWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXoKIAog
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sICZi
dWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlm
b3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CkBAIC0zODAwLDEyICszOTg5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2
KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQogCiAgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdl
dFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxv
Y2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zODQw
LDE3ICs0MDM1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1pdkVYVChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xp
bmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5p
Zm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg3OSwxNyArNDA3NSwxOCBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50
KiBwYXJhbXMpCiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMp
KQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtaXYobG9jYXRpb24s
IE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM5MzAsMTIgKzQx
MjcsMTMgQEAgaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3Jh
bSwgY29uc3QgR0xjaGFyKiBuYW1lKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0
LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJp
bmFyeS0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTUwMTIsNiArNTIxMCwyNiBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFs
Zm9ybWF0LCBHTAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgfQogCisgICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVz
ZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbGlkYXRlIDxm
b3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucworICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1h
dD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0
eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCiAgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKQEAgLTUwMjQs
NyArNTI0Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgpA
QCAtNTAzNiw3ICs1MjU0LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAg
ICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBH
TF9SR0JBOgpAQCAtNTA0OSw3ICs1MjY3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAg
ICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKQEAgLTUwNTgsNyArNTI3Niw3IEBAIHZvaWQgX19zdGRjYWxs
IGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxm
b3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8g
ZXJyb3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRsZWQgYmVsb3cKQEAg
LTUwNjYsOCArNTI4NCwyNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CiAgICAgICAgICAgICBicmVhazsgCisg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGJvcmRlciAhPSAwKQpAQCAtNTE0Niw2ICs1MzgzLDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RF
TkNJTF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9y
dHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCisgICAgICAgICAgICAg
ICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBp
ZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTQxNiw2ICs1
NjcwLDI1IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSB0YXJnZXQs
IEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBB
TkdMRV9kZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMgMS1sZXZlbCB0ZXh0dXJlcworICAgICAg
ICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCkBAIC01NDg0LDE0ICs1NzU3LDkgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShm
b3JtYXQsIHR5cGUpKQorICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0
LCB0eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVscGVyIGZ1bmN0aW9uCiAgICAg
ICAgIH0KIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwpAQCAtNTUxNywxMSArNTc4NSwyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0Rl
cHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0
aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCisgICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwg
eG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CkBAIC01NTI5LDcgKzU4
MTUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFs
c2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1
cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNTU3OCw3ICs1ODY0LDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0x
ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjIyLDcgKzU5MTQsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihsb2NhdGlvbiwgY291
bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjY4LDcgKzU5NjYsMTMgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMmZ2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU3MTQsNyArNjAx
OCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU3NjAs
NyArNjA3MCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNTgwNiw3ICs2MTIyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTg1Miw3ICs2MTc0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNv
dW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC01ODk4LDcgKzYyMjYsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00aXYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC01OTM4LDcgKzYyNzIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZv
cm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU5
NzgsNyArNjMxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjAxOCw3ICs2MzY0LDEzIEBAIHZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CkBAIC02MDU0LDcgKzY0MDYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAg
ICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02MDkyLDcgKzY0NDQsMTMgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT52YWxp
ZGF0ZSgpOworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZSgpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY0NjMsNiArNjgyMSw3
OSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwg
Z2xHZXRQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtICpiaW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBw
cm9ncmFtID0gMHglWCwgYnVmU2l6ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3Jt
YXQgPSAweCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVm
U2l6ZSwgbGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmJpbmFyeUZvcm1hdCA9
IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworCisgICAgICAgICAgICBpZiAobGVuZ3RoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsUHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpiaW5h
cnksIEdMaW50IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwg
YmluYXJ5Rm9ybWF0ID0gMHgleCwgYmluYXJ5ID0gMHglMC44cCwgbGVuZ3RoID0gJWQpIiwKKyAg
ICAgICAgICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGJpbmFyeUZvcm1hdCAhPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0UHJvZ3JhbUJpbmFyeShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewog
ICAgIHN0cnVjdCBFeHRlbnNpb24KQEAgLTY0OTksNyArNjkzMCw4IEBAIF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29u
c3QgY2hhciAqCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JB
TkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdM
RX0sCiAgICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5H
TEV9LAotICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwK
KyAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OwogCiAgICAgZm9yIChp
bnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9u
KTsgZXh0KyspCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCmluZGV4IDdkMmI2NDkuLjNiYzgzNjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZj
cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi52Y3Byb2oKQEAgLTQwMSw2ICs0MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpAQCAtNDkxLDYgKzQ5NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmNwcAppbmRleCA2NTg5ZWIxLi40NDEwNWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCkBAIC0yNzQsNiArMjc0LDE3
IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCiAgICAgfQogfQogCitib29sIElz
RGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBU
SF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RFUFRIX1NURU5DSUxfT0VTKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4g
YW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
KQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoK
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgIHJldHVy
biBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMsNTMgKzM0OCw2IEBAIGJvb2wgSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4gdGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpOwogfQogCi0vLyBW
ZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0
YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdM
X0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBj
YXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSk7Ci0K
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHJldHVybiAoZm9y
bWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkK
IHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpAQCAtNDA3LDYgKzM3NSw5IEBAIEdMZW51
bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlO
QU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjog
ICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
OworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4g
R0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCiAgICAgfQogfQpA
QCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3Jt
YXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVy
biBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwogICAgICAgY2FzZSBHTF9CR1JB
OF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAg
ICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOwogICAg
ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9O
RTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTc2Nyw2ICs3NDEsNyBAQCBEM0RGT1JN
QVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQogewogICAgIHN3aXRj
aCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJl
dHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICBjYXNlIEdMX1JH
QjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1U
X0E4UjhHOEI4OwpAQCAtOTY1LDYgKzk0MCwxNiBAQCBib29sIElzRmxvYXQxNkZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSXNEZXB0
aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VG
b3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3RlbmNpbEZvcm1hdChEM0RGT1JN
QVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1U
X0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1V
TFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3V0aWxpdGllcy5oCmluZGV4IDg4MjM4ZGMuLmVkMTUxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApAQCAtMTYsNiArMTYsOSBA
QAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAo
KEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JN
QVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcp
KSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0
ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBh
bGlnbm1lbnQpCiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0aCwg
R0xlbnVtIGZvcm1hdCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ29tcHJlc3NlZChH
TGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCk7CiBib29s
IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIElzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBl
KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51
bSBpbnRlcm5hbGZvcm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KTsKIApAQCAtNzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBk
ZXB0aEZvcm1hdCk7CiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3Jt
YXQpOwogYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogYm9v
bCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOworYm9vbCBJc0RlcHRo
Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsRm9ybWF0KEQz
REZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIAogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2Ft
cGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwogCg==
</data>
<flag name="commit-queue"
          id="155154"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147843</attachid>
            <date>2012-06-15 10:05:02 -0700</date>
            <delta_ts>2012-06-15 11:00:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1037221</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi5iZWMwMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsOSArMSwx
NCBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKKy8vIEdDQyA0LjIr
IHdpdGggdGhlIC1XLW1pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSBmbGFnIGdlbmVyYXRlcyBhIHdh
cm5pbmcgZm9yIHZzbnByaW50Zi4gV2Ugd2FudCB0byBpZ25vcmUgaXQuCisjaWYgZGVmaW5lZChf
X0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZvcm1h
dC1hdHRyaWJ1dGUiCisjZW5kaWYKKwogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTQ1Miw3ICs0NTcsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRp
ZmllcikKICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNoYWRl
clNwZWMgPT0gU0hfV0VCR0xfU1BFQykgeworICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhz
aGFkZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAi
d2ViZ2xfIikgPT0gMCkgewogICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJy
TXNnLCAid2ViZ2xfIiwgIiIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDYx
LDEyICs0NjYsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2soaW50
IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0g
U0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9
PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3Nf
IiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBv
cykgewotICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2Nv
cmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIi
LCAiIik7Ci0gICAgICAgICAgICAvL3JldHVybiB0cnVlOwotICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5n
IHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJs
ZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ1Myw3ICsxNDYwLDcg
QEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBib29sIFRQYXJzZUNv
bnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRTb3VyY2VMb2MgbGluZSwgY29uc3QgVFR5
cGUmIGZpZWxkVHlwZSkKIHsKLSAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7
CisgICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTE0OTAsOCArMTQ5Nyw5IEBAIGludCBQYVBhcnNlU3RyaW5n
cyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10sCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsK
LSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOworICAgIGludCBlcnJvciA9
IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5ndGgsIGNvbnRleHQpOworICAgIGlmICgh
ZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2Mu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAK
aW5kZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
b3NpbmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNo
ZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWws
IGNvCiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4g
IEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAg
ICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5
dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNn
LCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9j
YXRpb24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0
YSgpKTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzog
RGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNu
cHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAl
cyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxv
Y1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQ
b29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRiNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKQEAgLTAsMCAr
MSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9O
CisjZGVmaW5lIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1ZGluZyBp
dHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitjbGFzcyBSZW5hbWVGdW5j
dGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUmVuYW1lRnVu
Y3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5nJiBuZXdG
dW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkK
KyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQorICAgICwgbU5ld0Z1bmN0
aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAg
ICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBpZiAoKG9wID09IEVPcEZ1
bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgpID09IG1P
bGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5jdGlvbk5h
bWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
VFN0cmluZyYgbU9sZEZ1bmN0aW9uTmFtZTsKKyAgICBjb25zdCBUU3RyaW5nJiBtTmV3RnVuY3Rp
b25OYW1lOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKaW5kZXggOTFj
NDdlNy4uMjY1MjhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NoSGFuZGxlLmgKQEAgLTI0LDYgKzI0LDEzIEBACiAKIGNsYXNzIExvbmdOYW1lTWFwOwog
Y2xhc3MgVENvbXBpbGVyOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaDsKKworLy8KKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgV2ViR0wg
c3BlYywKKy8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisvLworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKIAogLy8KIC8vIFRoZSBiYXNlIGNsYXNzIHVzZWQg
dG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCkBAIC03MCw2ICs3Nyw4IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVl
IGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZC4KICAgICBib29sIGRldGVjdFJlY3Vy
c2lvbihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIncyBpbnRl
cm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCisgICAgdm9p
ZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0KICAgICAv
LyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBwZW5kaXggQS4KICAg
ICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwpAQCAtNzksNiAr
ODgsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVy
bU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KICAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFzc2VzIHRoZSByZXN0cmljdGlvbnMgdGhhdCBhaW0gdG8g
cHJldmVudCB0aW1pbmcgYXR0YWNrcy4KKyAgICBib29sIGVuZm9yY2VUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgpOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVycy4KKyAgICBib29sIGVuZm9y
Y2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVu
ZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCisgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRp
b25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgorICAgIGJvb2wg
ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1
bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25C
ZWhhdmlvcigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKaW5kZXggMTNmMTFiNS4uNTZmNWM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcApA
QCAtNzIsMTIgKzcyLDE0IEBAIHN0YXRpYyB2b2lkIGdldFZhcmlhYmxlSW5mbyhTaFNoYWRlcklu
Zm8gdmFyVHlwZSwKICAgICBpbnQgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOwogICAgIEFTU0VSVChjaGVja0FjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJNYXhMZW5ndGhzKGhhbmRsZSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCkpOwogICAg
IHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGgpOworICAgIG5hbWVbYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCAtIDFdID0g
MDsKICAgICBpZiAobWFwcGVkTmFtZSkgewogICAgICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRj
aCB0aGF0IHF1ZXJpZWQgYnkKICAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCBp
biBTaEdldEluZm8sIGJlbG93LgogICAgICAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4
TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1h
cHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3Ro
KTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAKaW5kZXggZWRiZWE5OS4uNjhmMDI5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCkBAIC0xNiw5
ICsxNiwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKICNpbmNsdWRl
IDxzdGRpby5oPgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKwogLy8KIC8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNl
IHRvIGxpdmUuCiAvLwpAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFRUeXBlOjpidWlsZE1hbmdsZWRO
YW1lKFRTdHJpbmcmIG1hbmdsZWROYW1lKQogICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0
PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgYXJyYXlTaXpl
KTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsK
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwogICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7
CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQzOTg1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NiAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2
ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCi0KLSNpbmNsdWRl
ICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIK
LQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Ci19
Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0gICAgbm9kZS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0
cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBtT3V0cHV0
SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsK
LQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgImlmKCI7Ci0gICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9k
ZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBz
IiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgImVsc2Vc
biIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAg
ICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotCi0g
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4Owot
Ci0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEluaXQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRDb25kaXRp
b24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsKLSAgICAg
ICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBt
VGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
aW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICByZXR1cm4g
bVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRhM2JhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91
dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xE
U0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNzIE91dHB1
dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17
Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHByb3RlY3Rl
ZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpjb25zdCBt
T3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0jZW5kaWYg
ICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4MmViYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwCkBAIC0wLDAgKzEsMTcyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRD
aXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3Bl
cmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBhc3NpZ25l
ZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJhbnNsYXRv
ciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ug
c2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCks
IG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30K
Kwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKyAgICBub2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKK30KKworYm9v
bCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRC
b2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAg
Y2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHRydWU7
IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRv
d24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMi
IDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOwor
ICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYoIXMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBj
YXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBl
bHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMg
ZG93biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBz
IiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsK
KyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtc
biI7CisgICAgICAgICAgICBvdXQgPDwgImlmKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgLy8g
VW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2UgcyA9IHk7
IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBp
bnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5
cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOworICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldFRy
dWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8
PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4iCisgICAg
ICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsK
KyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKwor
ICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJbml0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9u
KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAg
IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgbVRl
bXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lu
dCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7CisgICAgcmV0
dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAg
LTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBp
cyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBh
cyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRD
SVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitjbGFzcyBV
bmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6
CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhM
U0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAg
IGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUp
OworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSk7CisK
KyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFRQ
YXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRwdXRITFNM
OworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8vIENPTVBJ
TEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTY2MWQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oIgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJ
bnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpi
dWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRl
bmN5R3JhcGgoKQoreworICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1BbGxOb2Rlcy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVy
KQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxl
dGUgbm9kZTsKKyAgICB9Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpj
cmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50
TnVtYmVyKQoreworICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1
bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1
bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwq
IGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxs
KTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0
aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAg
ICByZXR1cm4gZnVuY3Rpb25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3Jh
cGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAg
ICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChp
bnRlcm1TeW1ib2wtPmdldElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxM
OworCisgICAgaWYgKGl0ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1i
b2xJZFBhaXIgcGFpciA9ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJv
bCk7CisgICAgICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3lt
Ym9sSWRQYWlyIHBhaXIoaW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBt
U3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBs
ZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJz
YWxzIGZyb20gdGhlbSBxdWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFj
ayhzeW1ib2wpOworICAgIH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVj
dGlvbiogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24q
IGludGVybVNlbGVjdGlvbikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5l
dyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKHNlbGVjdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCog
VERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sK
KyAgICBUR3JhcGhMb29wKiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBo
TG9naWNhbE9wKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFy
eSogaW50ZXJtTG9naWNhbE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0g
bmV3IFRHcmFwaExvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNo
X2JhY2sobG9naWNhbE9wKTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFy
KiBUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFy
KiBvcFN0cmluZyA9IE5VTEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0
T3AoKSkgeworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gb3BTdHJpbmc7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YzM1ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
CisKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFwaE5vZGU7
CitjbGFzcyBUR3JhcGhQYXJlbnROb2RlOworY2xhc3MgVEdyYXBoQXJndW1lbnQ7CitjbGFzcyBU
R3JhcGhGdW5jdGlvbkNhbGw7CitjbGFzcyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3JhcGhTZWxl
Y3Rpb247CitjbGFzcyBUR3JhcGhMb29wOworY2xhc3MgVEdyYXBoTG9naWNhbE9wOworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ7
CisKK3R5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRlZiBzdGQ6
OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBUR3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6
dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2FsbCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisKKy8vCisv
LyBCYXNlIGNsYXNzIGZvciBhbGwgZGVwZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitjbGFzcyBU
R3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6
IGludGVybU5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2
ZXJzZXIpOworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworfTsKKwor
Ly8KKy8vIEJhc2UgY2xhc3MgZm9yIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBtYXkgaGF2
ZSBjaGlsZHJlbi4KKy8vCitjbGFzcyBUR3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRHcmFwaE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDog
VEdyYXBoTm9kZShub2RlKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUoKSB7fQor
ICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9kZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChub2RlICE9
IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5pbnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJp
dmF0ZToKKyAgICBUR3JhcGhOb2RlU2V0IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8vCisvLyBI
YW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJndW1lbnQg
OiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJndW1lbnQo
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIp
CisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAg
ICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3VtZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwgflRHcmFw
aEFyZ3VtZW50KCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9
CisgICAgaW50IGdldEFyZ3VtZW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3VtZW50TnVt
YmVyOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51bWJlcjsK
K307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdyYXBoRnVu
Y3Rpb25DYWxsIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAg
ICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAgdmlydHVh
bCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBn
ZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0Fn
Z3JlZ2F0ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgc3ltYm9scy4K
Ky8vCitjbGFzcyBUR3JhcGhTeW1ib2wgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkgOiBUR3Jh
cGhQYXJlbnROb2RlKGludGVybVN5bWJvbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTeW1ib2wo
KSB7fQorICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307
CisKKy8vCisvLyBIYW5kbGUgaWYgc3RhdGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCisv
LworY2xhc3MgVEdyYXBoU2VsZWN0aW9uIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgor
ICAgIFRHcmFwaFNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pIDog
VEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rpb24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU2VsZWN0
aW9uKCkge30KKyAgICBjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBs
b29wcy4KKy8vCitjbGFzcyBUR3JhcGhMb29wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaExvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBoTm9kZShp
bnRlcm1Mb29wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNvbnN0IFRJ
bnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0
QXNMb29wTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgbG9naWNh
bCBhbmQsIG9yLgorLy8KK2NsYXNzIFRHcmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9n
aWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaExvZ2ljYWxPcCgpIHt9CisgICAgY29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50ZXJtTG9n
aWNhbE9wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7IH0K
KyAgICBjb25zdCBjaGFyKiBnZXRPcFN0cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9Owor
CisvLworLy8gQSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBj
b25kaXRpb25zIGV0Yy4KKy8vCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0
byB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8vIERlcGVu
ZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBw
cm92aWRlZCAiY3JlYXRlLi4uIiBtZXRob2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5vYm9keSBl
bHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkgb2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBOb2RlcyBt
YXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVkIG5vZGVz
IHdpbGwgZXhpc3Qgd2hpbGUgdGhlCisvLyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNlIGV4aXN0
cy4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5j
eUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lHcmFwaCgp
OworICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKworICAgIFRH
cmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9scygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7CisgICAg
fQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1wbGVyU3lt
Ym9scygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmVuZCgp
OworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9u
Q2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmVu
ZCgpOworICAgIH0KKworICAgIFRHcmFwaEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7CisgICAg
VEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRlU3ltYm9s
KFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBjcmVh
dGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBUR3Jh
cGhMb29wKiBjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBUR3JhcGhM
b2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3Ap
OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9s
SWRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9s
SWRQYWlyOworCisgICAgVEdyYXBoTm9kZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdyYXBoU3lt
Ym9sVmVjdG9yIG1TYW1wbGVyU3ltYm9sczsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yIG1Vc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHM7CisgICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1hcDsKK307
CisKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNlcnMgc2hv
dWxkIGRlcml2ZSBmcm9tIHRoaXMsCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRh
dGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9kLgorLy8K
Ky8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5
b3Ugd2FudCB2aXNpdGVkLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgewor
cHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgwKSB7fQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogc2VsZWN0aW9u
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihU
R3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9v
cChUR3JhcGhMb29wKiBsb29wKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApIHt9OworCisgICAgaW50IGdldERlcHRoKCkgY29u
c3QgeyByZXR1cm4gbURlcHRoOyB9CisgICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsgKyttRGVw
dGg7IH0KKyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisgICAgdm9p
ZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNpdGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1hcmtWaXNp
dGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsgbVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9CisgICAgYm9v
bCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0ZWQuZmlu
ZChub2RlKSAhPSBtVmlzaXRlZC5lbmQoKTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURlcHRoOwor
ICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0ZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNDk4NzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vob2xkZXIKKyAgICBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0
cmVlOworCitURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cjo6VFN1YnRyZWVQbGFjZWhvbGRlcgorICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlOworCit2b2lkIFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCog
Z3JhcGgpCit7CisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgYnVpbGRlcihncmFwaCk7Cisg
ICAgYnVpbGRlci5idWlsZChub2RlKTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFn
Z3JlZ2F0ZSkKK3sKKyAgICBzd2l0Y2ggKGludGVybUFnZ3JlZ2F0ZS0+Z2V0T3AoKSkgeworICAg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6IHZpc2l0RnVuY3Rp
b25DYWxsKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiB2aXNpdEFn
Z3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAg
IC8vIEN1cnJlbnRseSwgd2UgZG8gbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucy4K
KyAgICBpZiAoaW50ZXJtQWdncmVnYXRlLT5nZXROYW1lKCkgIT0gIm1haW4oIikKKyAgICAgICAg
cmV0dXJuOworCisgICAgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOwor
fQorCisvLyBUYWtlcyBhbiBleHByZXNzaW9uIGxpa2UgImYoeCkiIGFuZCBjcmVhdGVzIGEgZGVw
ZW5kZW5jeSBncmFwaCBsaWtlCisvLyAieCAtPiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwi
Lgordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwoVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQoreworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogZnVuY3Rpb25DYWxsID0gbUdyYXBoLT5jcmVhdGVGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rp
b25DYWxsKTsKKworICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50
cy4KKyAgICBpbnQgYXJndW1lbnROdW1iZXIgPSAwOworICAgIFRJbnRlcm1TZXF1ZW5jZSYgaW50
ZXJtQXJndW1lbnRzID0gaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXRTZXF1ZW5jZSgpOworICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gaW50ZXJtQXJndW1lbnRz
LmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGludGVybUFyZ3VtZW50cy5lbmQoKTsKKyAgICAg
ICAgICsraXRlciwgKythcmd1bWVudE51bWJlcikKKyAgICB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtQXJndW1lbnQgPSAqaXRlcjsKKyAgICAgICAgaW50ZXJtQXJndW1lbnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXJndW1lbnROb2RlcyA9IG1O
b2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoQXJndW1lbnQqIGFyZ3Vt
ZW50ID0gbUdyYXBoLT5jcmVhdGVBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50
TnVtYmVyKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGFy
Z3VtZW50Tm9kZXMsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGFyZ3VtZW50LT5hZGREZXBlbmRl
bnROb2RlKGZ1bmN0aW9uQ2FsbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQdXNoIHRo
ZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGludG8gdGhlIGN1cnJlbnQg
c2V0IG9mIGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQg
b2YgdGhpcyBmdW5jdGlvbiBjYWxsLgorICAgIC8vIFRodXMsIGFuIGV4cHJlc3Npb24gbGlrZSAi
eSA9IGYoeCkiIHdpbGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKyAgICAvLyAieCAt
PiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwgLT4geSIuCisgICAgLy8gVGhpcyBsaW5lIGVz
c2VudGlhbGx5IHBhc3NlcyB0aGUgZnVuY3Rpb24gY2FsbCBub2RlIGJhY2sgdXAgdG8gYW4gZWFy
bGllciB2aXNpdEFzc2lnbm1lbnQKKyAgICAvLyBjYWxsLCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUg
Y29ubmVjdGlvbiAiZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChmdW5jdGlvbkNhbGwpOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0
ZSkKK3sKKyAgICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gaW50ZXJtQWdncmVnYXRlLT5n
ZXRTZXF1ZW5jZSgpOworICAgIGZvcihUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOyBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCisg
ICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtQ2hpbGQgPSAqaXRlcjsKKyAgICAgICAg
aW50ZXJtQ2hpbGQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKQor
eworICAgIC8vIFB1c2ggdGhpcyBzeW1ib2wgaW50byB0aGUgc2V0IG9mIGRlcGVuZGVudCBzeW1i
b2xzIGZvciB0aGUgY3VycmVudCBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbgorICAgIC8vIHRoYXQg
d2UgYXJlIHRyYXZlcnNpbmcuCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBtR3JhcGgtPmdl
dE9yQ3JlYXRlU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgbU5vZGVTZXRzLmluc2VydEludG9U
b3BTZXQoc3ltYm9sKTsKKworICAgIC8vIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBjdXJyZW50IGxl
ZnRtb3N0IHN5bWJvbCB1bmRlciBhbiBhc3NpZ25tZW50LCByZXBsYWNlIHRoZSBwcmV2aW91cwor
ICAgIC8vIGxlZnRtb3N0IHN5bWJvbCB3aXRoIHRoaXMgc3ltYm9sLgorICAgIGlmICghbUxlZnRt
b3N0U3ltYm9scy5lbXB0eSgpICYmIG1MZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0KKyAgICAgICAg
JlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpIHsKKyAgICAgICAgbUxl
ZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgbUxlZnRtb3N0U3ltYm9scy5wdXNoKHN5bWJv
bCk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQoreworICAgIFRPcGVy
YXRvciBvcCA9IGludGVybUJpbmFyeS0+Z2V0T3AoKTsKKyAgICBpZiAob3AgPT0gRU9wSW5pdGlh
bGl6ZSB8fCBpbnRlcm1CaW5hcnktPm1vZGlmaWVzU3RhdGUoKSkKKyAgICAgICAgdmlzaXRBc3Np
Z25tZW50KGludGVybUJpbmFyeSk7CisgICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNhbEFuZCB8
fCBvcCA9PSBFT3BMb2dpY2FsT3IpCisgICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVybUJpbmFy
eSk7CisgICAgZWxzZQorICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJpbmFyeSk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQoreworICAg
IFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExlZnQoKTsK
KyAgICBpZiAoIWludGVybUxlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIFRHcmFwaFN5bWJv
bCogbGVmdG1vc3RTeW1ib2wgPSBOVUxMOworCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50
YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgeworICAgICAgICAgICAg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGlu
dGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2wgPSBt
TGVmdG1vc3RTeW1ib2xzLnRvcCgpOworCisgICAgICAgICAgICAvLyBBZnRlciB0cmF2ZXJzaW5n
IHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25tZW50LCB3ZSBzaG91bGQgaGF2ZSBmb3Vu
ZCBhIHJlYWwKKyAgICAgICAgICAgIC8vIGxlZnRtb3N0IHN5bWJvbCwgYW5kIHRoZSBsZWZ0bW9z
dCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9sZGVyLgorICAgICAgICAgICAgQVNTRVJU
KGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprTGVmdFN1YnRy
ZWUpOworICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChU
SW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0UmlnaHQoKSkg
eworICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7
CisgICAgICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KGFzc2lnbm1lbnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOworICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3VycmVudCBz
ZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBv
ZiB0aGlzIGFzc2lnbm1lbnQuCisgICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0gKGIgPSBj
KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEiLgorICAg
IC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0
aGUgbmVzdGVkIGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCisgICAgLy8gZXhhbXBsZSkgYmFjayB1
cCB0byB0aGUgZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVyIGFzc2ln
bm1lbnQsIHdoaWNoIHdpbGwKKyAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIgLT4gYSIu
CisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5
KiBpbnRlcm1Mb2dpY2FsT3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9
IGludGVybUxvZ2ljYWxPcC0+Z2V0TGVmdCgpKSB7CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUxl
ZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxlZnROb2Rl
cyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOwor
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5vZGVzLCBs
b2dpY2FsT3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50
ZXJtUmlnaHQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQorewor
ICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1CaW5hcnktPmdldExlZnQo
KSkKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUJpbmFyeS0+Z2V0UmlnaHQoKSkgeworICAgICAg
ICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlz
LCBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKworYm9vbCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
IGludGVybVNlbGVjdGlvbikKK3sKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNvbmRpdGlv
biA9IGludGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRp
dGlvbi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0
aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaFNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJtU2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRp
dGlvbk5vZGVzLCBzZWxlY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRl
cm1Ob2RlKiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVCbG9jaygp
KQorICAgICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJ
bnRlcm1Ob2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRGYWxzZUJs
b2NrKCkpCisgICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQoreworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlvbigpKSB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBh
cmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Cisg
ICAgICAgICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGludGVybUxv
b3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0
aW9uTm9kZXMsIGxvb3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQorICAgICAgICBpbnRlcm1Cb2R5
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4cHJlc3Np
b24gPSBpbnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgIGludGVybUV4cHJlc3Np
b24tPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQ
YXJlbnROb2RlU2V0KiBub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVzLT5iZWdp
bigpOyBpdGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
UGFyZW50Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKKyAgICAgICAgY3VycmVudE5vZGUtPmFk
ZERlcGVuZGVudE5vZGUobm9kZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdj
MjllMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKQEAgLTAsMCArMSwxODQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JB
UEhfQlVJTERFUl9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
QlVJTERFUl9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKworLy8KKy8vIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0
aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlh
dGUgdHJlZS4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9k
ZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRl
OgorICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7Cisg
ICAgdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisK
KyAgICAvLworICAgIC8vIEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNz
aWdubWVudHMsIGNvbmRpdGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBp
bnRlcm1lZGlhdGUgdHJlZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMg
c3RhY2sgb2Ygc2V0cy4gRWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQg
bm9kZXMuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFROb2RlU2V0U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNs
ZWFyKCk7IH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBh
IHB1c2hTZXQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0
eS4KKyAgICAgICAgVFBhcmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFy
ZW50Tm9kZVNldCogdG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4g
IXRvcFNldC0+ZW1wdHkoKSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIHB1c2hTZXQoKSB7IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9Cisg
ICAgICAgIHZvaWQgcG9wU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAg
ICAgICAgIG5vZGVTZXRzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUg
dG9wIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAg
ICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMg
anVzdCBkZWxldGVkLgorICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBvbGRUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVT
ZXRzLnBvcCgpOworCisgICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Cisg
ICAgICAgICAgICAgICAgbmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRU
b3BTZXQtPmVuZCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRv
cFNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBu
byB0b3Agc2V0LgorICAgICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBu
byB0b3Agc2V0IGlmIHdlIGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJl
IG5vdCB1bmRlciBhbiBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0byB0cmFjayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9U
b3BTZXQoVEdyYXBoUGFyZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBub2RlU2V0cy50b3AoKS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHko
KSkKKyAgICAgICAgICAgICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVT
ZXRTdGFjazsKKworICAgICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07
CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3
IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdv
ZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBj
bGFzcyBUTm9kZVNldE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAg
OiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+
VE5vZGVTZXRNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFu
IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFu
dGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBh
bmQgcG9wcyB0aGUgdG9wIG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8v
IHRoZSBuZXcgdG9wIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGlu
Z01haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAg
ICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAg
IH5UTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgp
OyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07
CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sg
b2YgdGhlIGxlZnRtb3N0IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBh
c3NpZ25tZW50LgorICAgIC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtM
ZWZ0U3VidHJlZSB3aGVuIGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAv
LyBhbmQga1JpZ2h0U3VidHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBp
dCBnb2VzIG91dCBvZiBzY29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0
aGUgdG9wIG9mIHRoZSBzY29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBz
eW1ib2wuCisgICAgLy8ga1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEg
cmVhbCBzeW1ib2wgYmVjYXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8g
c3ltYm9sLgorICAgIC8vCisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7Cisg
ICAgcHVibGljOgorICAgICAgICBjbGFzcyBUU3VidHJlZVBsYWNlaG9sZGVyIDogcHVibGljIFRH
cmFwaFN5bWJvbCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFRTdWJ0cmVlUGxhY2Vo
b2xkZXIoKSA6IFRHcmFwaFN5bWJvbChOVUxMKSB7fQorICAgICAgICB9OworCisgICAgICAgIHN0
YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVyIGtMZWZ0U3VidHJlZTsKKyAgICAgICAgc3RhdGljIFRT
dWJ0cmVlUGxhY2Vob2xkZXIga1JpZ2h0U3VidHJlZTsKKworICAgICAgICBUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5LCBUU3VidHJlZVBs
YWNlaG9sZGVyJiBzdWJ0cmVlKQorICAgICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9y
eS0+bUxlZnRtb3N0U3ltYm9scykKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZHNQbGFjZWhv
bGRlclN5bWJvbCA9IGxlZnRtb3N0U3ltYm9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50
b3AoKSAhPSAmc3VidHJlZTsKKyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9s
KQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIH5UTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAg
bGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFRTeW1ib2xTdGFjayYgbGVmdG1vc3RTeW1ib2xzOworICAgICAgICBib29sIG5lZWRzUGxh
Y2Vob2xkZXJTeW1ib2w7CisgICAgfTsKKworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFRE
ZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwg
ZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1HcmFwaChncmFwaCkge30KKyAgICB2b2lkIGJ1aWxk
KFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRyYXZlcnNlKHRoaXMpOyB9
CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJlbnROb2Rl
U2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7CisKKyAgICB2b2lkIHZpc2l0QXNz
aWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdExvZ2ljYWxPcChUSW50ZXJt
QmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqKTsK
KyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAg
ICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUq
KTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1O
b2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOworfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRl
cikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVudCAi
IDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgorICAg
ICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8
PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25D
YWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1dEluZGVu
dGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25DYWxs
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wp
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdldElu
dGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAgICA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiog
c2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgInNl
bGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3Ao
VEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBvdXRw
dXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9wLT5n
ZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBt
U2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1TaW5rIDw8
ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAgY2xl
YXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1T
aW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDQ3ZGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAor
I2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisKKyNp
bmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVi
bGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25D
YWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNh
bE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBo
JiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAg
IFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQ
SF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApAQCAtMCwwICsxLDY5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJz
YWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9pZCBUR3Jh
cGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQg
VEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIp
OworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBWaXNp
dCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0
ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAg
ICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBoVHJhdmVy
c2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7
Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEFyZ3Vt
ZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNp
dEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFw
aFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+
dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhU
cmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXIt
PnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRM
b29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30K
Kwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvZ2ljYWxP
cCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAppbmRleCAy
NmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0OwogZXh0
ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRl
cm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKLWV4dGVy
biB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYzYzZWZhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0xLDYgKzEsNiBAQAogLyoK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUsNyBAQCBX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCiAKICV0
b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTU5LDYgKzE1OSw3IEBAIE8gICAg
ICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAog
ImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hv
cnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2
ICsxNjcsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CkBAIC0xNzMsMTIgKzE3NSwyMSBAQCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Cisic2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJz
YW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2Ft
cGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1w
bGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2Ft
cGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxl
cjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJz
aXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3Qi
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC01NjgsMTkg
KzU3OSwxNSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CiAgICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19z
Y2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBn
bHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVu
byhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQt
PkFmdGVyRU9GID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCiAgICAg
Y3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBh
QXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3Bw
LT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsK
LSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiBJbml0U2Nhbm5lcklu
cHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5
OS4uNmNkZjQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfbGV4LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZ19sZXguY3BwCkBAIC0xLDYgKzEsNiBAQAotI2xpbmUgMTcgIi4vZ2xzbGFu
Zy5sIgorI2xpbmUgMTcgIi4vY29tcGlsZXIvZ2xzbGFuZy5sIgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTIxLDcgKzIxLDcgQEAKIAogCiAKLSNsaW5lIDI1ICIuL2dsc2xhbmdfbGV4
LmNwcCIKKyNsaW5lIDI1ICIuL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCIKIAogI2RlZmluZSAg
WVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CiAKQEAgLTM4Myw4ICszODMsOCBAQCBzdGF0aWMgdm9p
ZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKIAkqeXlfY3AgPSAnXDAnOyBcCiAJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZp
bmUgWVlfTlVNX1JVTEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmlu
ZSBZWV9OVU1fUlVMRVMgMTU1CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTU2CiAvKiBUaGlz
IHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNl
IGlzIG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC0zOTIsNTUgKzM5Miw1
OCBAQCBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxl
eF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Fj
Y2VwdFs0MjZdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDU5XSA9
CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAx
NDgsICAxNDYsICAxNDUsICAxNDUsCi0gICAgICAxMzAsICAxMzYsICAxNDEsICAxMjUsICAxMjYs
ICAxMzQsICAxMzMsICAxMjIsICAxMzEsICAxMjksCi0gICAgICAxMzUsICAgOTQsICAgOTQsICAx
MjMsICAxMTksICAxMzcsICAxMjQsICAxMzgsICAxNDIsICAgOTAsCi0gICAgICAxMjcsICAxMjgs
ICAxNDAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
Ci0gICAgICAgOTAsICAgOTAsICAgOTAsICAxMjAsICAxMzksICAxMjEsICAxMzIsICAgIDMsICAg
IDQsICAgIDMsCi0gICAgICAxNDQsICAxNDcsICAxNDMsICAxMTYsICAxMDIsICAxMjEsICAxMTAs
ICAxMDUsICAxMDAsICAxMDgsCi0gICAgICAgOTgsICAxMDksICAgOTksICAgOTcsICAgIDIsICAg
IDEsICAxMDEsICAgOTYsICAgOTIsICAgOTMsCi0gICAgICAgIDAsICAgIDAsICAgOTQsICAxMjgs
ICAxMjAsICAxMjcsICAxMTcsICAxMTMsICAxMTUsICAxMTQsCi0gICAgICAxMTgsICAgOTAsICAx
MDYsICAxMTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICAxNywgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAy
MCwgICAyMiwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgIDEwNywgIDExMSwgICAgNSwgIDE0MywKLSAgICAgICAgMCwgICAgMSwgICA5
NiwgICAgMCwgICAgMCwgICA5NSwgICA5MSwgIDEwMywgIDEwNCwgICA1MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAxOCwgICA5MCwg
ICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyNiwgICA5
MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMywg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgICAwLCAgIDk3LAotICAgICAgICAwLCAg
IDk2LCAgIDkwLCAgIDI4LCAgIDkwLCAgIDkwLCAgIDg3LCAgIDkwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIxLCAgIDUzLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotICAgICAgIDkwLCAgIDU4LCAgIDcyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDY5LCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDU2LCAgIDI5LCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDM2LAotICAgICAgIDM3LCAgIDM4
LCAgIDI3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LAotICAgICAg
IDUxLCAgIDEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDgzLCAgIDg0LCAgIDg1LCAgIDkw
LAotCi0gICAgICAgMzAsICAgNzMsICAgMjUsICAgODAsICAgODEsICAgODIsICAgIDcsICAgNzcs
ICAgNzgsICAgNzksCi0gICAgICAgOTAsICAgMjQsICAgNzUsICAgOTAsICAgOTAsICAgMzksICAg
NDAsICAgNDEsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgNzAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgNTIsICAgOTAsICAgODksICAgOTAsICAgOTAsCi0gICAgICAgMTksICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgNzEsICAgNjYsICAgNjEsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgNzYsICAgNTcsICAgOTAsICAgNjQsICAgMzIsICAgOTAsICAgODYs
Ci0gICAgICAgNjUsICAgNDksICAgNTksICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsCi0gICAgICAgOTAsICAgNjAsICAgMzEsICAgOTAsICAgOTAsICAgOTAsICAgIDgs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgNTQsICAgMTMsICAgOTAsICAg
MTQsICAgOTAsICAgOTAsICAgMTYsICAgNjcsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNjIs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgNTUsICAgNzQsCi0KLSAgICAgICA2MywgICAxMSwg
ICA2OCwgICAgNiwgICA4OCwgICAxMCwgICA0NSwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA0NiwgICA5MCwgICA5MCwgICA5MCwgICA0OCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA0NywgICAgMAorICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTU2LCAgMTU0LCAgMTUzLCAgMTUzLAorICAgICAgMTM4LCAg
MTQ0LCAgMTQ5LCAgMTMzLCAgMTM0LCAgMTQyLCAgMTQxLCAgMTMwLCAgMTM5LCAgMTM3LAorICAg
ICAgMTQzLCAgMTAyLCAgMTAyLCAgMTMxLCAgMTI3LCAgMTQ1LCAgMTMyLCAgMTQ2LCAgMTUwLCAg
IDk4LAorICAgICAgMTM1LCAgMTM2LCAgMTQ4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTI4LCAgMTQ3
LCAgMTI5LCAgMTQwLCAgICAzLCAgICA0LCAgICAzLAorICAgICAgMTUyLCAgMTU1LCAgMTUxLCAg
MTI0LCAgMTEwLCAgMTI5LCAgMTE4LCAgMTEzLCAgMTA4LCAgMTE2LAorICAgICAgMTA2LCAgMTE3
LCAgMTA3LCAgMTA1LCAgICAyLCAgICAxLCAgMTA5LCAgMTA0LCAgMTAwLCAgMTAxLAorICAgICAg
ICAwLCAgICAwLCAgMTAyLCAgMTM2LCAgMTI4LCAgMTM1LCAgMTI1LCAgMTIxLCAgMTIzLCAgMTIy
LAorICAgICAgMTI2LCAgIDk4LCAgMTE0LCAgMTIwLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMTcsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgMjAsICAgMjIsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAxMTUsICAxMTksICAgIDUs
CisgICAgICAxNTEsICAgIDAsICAgIDEsICAxMDQsICAgIDAsICAgIDAsICAxMDMsICAgOTksICAx
MTEsICAxMTIsCisgICAgICAgNTAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgMTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjYsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjMsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwKKyAgICAgICA5OCwgICAgMCwgIDEwNSwgICAgMCwgIDEwNCwgICA5OCwgICAyOCwg
ICA5OCwgICA5OCwgICA5NSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICAyMSwgICA1MywgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA2OSwgICA5OCwg
ICA5OCwgICA1OCwgICA3MywgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA3MCwgICAgOSwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NiwgICAyOSwgICA5OCwg
ICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAzNiwgICAzNywgICAzOCwgICAy
NywgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICAxNSwgICA0MiwgICA0MywgICA0NCwgICA1MSwg
ICAxMiwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDgyLCAgIDgzLCAgIDg0LCAg
IDk4LCAgIDMwLCAgIDc0LCAgIDI1LCAgIDg1LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDc5
LCAgIDgwLCAgIDgxLCAgIDk4LCAgIDI0LCAgIDc3LCAgIDk4LCAgIDk4LAorICAgICAgIDM5LCAg
IDQwLCAgIDQxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDcxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDUyLCAgIDk4LCAgIDk3LCAgIDk4LCAgIDk4LCAgIDE5LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDcyLCAgIDY2LCAgIDYxLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDc4LAorICAgICAgIDU3LCAgIDk4LCAgIDY0LCAgIDMyLCAgIDk4
LCAgIDk0LCAgIDY1LCAgIDQ5LCAgIDc2LCAgIDU5LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDYwLCAgIDMxLAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgICA4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU0LAorICAgICAg
IDEzLCAgIDk4LCAgIDE0LCAgIDk4LCAgIDk4LCAgIDE2LCAgIDY3LCAgIDk4LCAgIDk4LCAgIDk4
LAorCisgICAgICAgNjIsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTUs
ICAgNzUsICAgNjMsCisgICAgICAgMTEsICAgNjgsICAgIDYsICAgOTYsICAgMTAsICAgODgsICAg
NDUsICAgODksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgNDYsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNDgsICAgOTgsCisgICAgICAgOTIsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTAsICAgOTgsICAgOTEsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNDcsICAgOTMsICAgIDAKICAgICB9IDsKIAog
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDUwLDE1ICs0NTMs
MTUgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAog
ICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAx
LCAgICA3LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAg
IDE1LCAgIDE2LCAgIDE3LAotICAgICAgIDE4LCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIw
LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgICAxLCAg
IDI3LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDI3LAotICAgICAgIDMxLCAgIDMxLCAgIDMx
LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMyLCAgIDMxLAotICAgICAgIDMxLCAg
IDMzLCAgIDM0LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDM1LCAgIDMxLCAgIDMxLAotICAg
ICAgIDM2LCAgICAxLCAgIDM3LCAgIDM4LCAgIDMxLCAgICAxLCAgIDM5LCAgIDQwLCAgIDQxLCAg
IDQyLAotCi0gICAgICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgMzEsICAgNDgsICAg
NDksICAgNTAsICAgNTEsCi0gICAgICAgNTIsICAgNTMsICAgMzEsICAgNTQsICAgNTUsICAgNTYs
ICAgNTcsICAgNTgsICAgNTksICAgNjAsCi0gICAgICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAg
NjUsICAgNjYsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTgsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAg
MjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisgICAg
ICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAg
MzIsCisgICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYs
ICAgMzIsICAgMzIsCisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAg
NDAsICAgNDEsICAgNDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0
OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAzMiwg
ICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2MiwgICA2
MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ3NSwyMDEgKzQ3OCwyMTQgQEAgc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY3
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAg
ICAzLCAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAz
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLAor
ICAgICAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA0LCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LAogICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCisgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDMxXSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0NjRdID0KICAgICB7ICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICA2NCwgICA2NSwgICA3NCwgICAgMCwgIDYyNywgIDYyOCwgIDYyOCwg
IDYyOCwKLSAgICAgIDYwMiwgICA0NSwgIDEzNSwgIDYyOCwgIDYyOCwgIDYwMSwgIDEzMiwgIDYy
OCwgIDEzMSwgIDEyOSwKLSAgICAgIDE0MywgIDE1NSwgIDE2MywgIDU5OSwgIDYyOCwgIDE3OSwg
IDU5OSwgICA0NywgIDYyOCwgICAgMCwKLSAgICAgIDYyOCwgIDYyOCwgIDEyNiwgICA5OCwgIDEw
OCwgIDE0NywgIDE1OCwgIDE1OCwgIDE2NSwgIDU3MCwKLSAgICAgIDEzMCwgIDEwNywgIDU2OSwg
IDE0OCwgIDE1NiwgIDU2MywgIDE3MiwgIDU3NiwgIDE3NCwgIDE4MSwKLSAgICAgIDE3NywgIDE5
NSwgIDU3MiwgIDYyOCwgIDE3MywgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYwMywKLSAgICAg
IDYyOCwgIDYyOCwgICAgMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYy
OCwKLSAgICAgIDYyOCwgIDYyOCwgIDYyOCwgIDIzMywgIDYyOCwgICAgMCwgIDYyOCwgIDIzOSwg
IDI1NSwgIDI3MSwKLSAgICAgIDI4NywgICAgMCwgIDMwMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDU5
MiwgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAgIDU5MSwgICAgMCwgIDYyOCwgIDYyOCwgIDU2NCwg
IDU1NywgIDU2MCwgIDU2OCwgIDU2NywgIDU1NCwKLQotICAgICAgNTY5LCAgNTU2LCAgNTYyLCAg
NTUwLCAgNTQ3LCAgNTYwLCAgNTQ3LCAgNTQ0LCAgNTQ0LCAgNTUwLAotICAgICAgNTM4LCAgNTQ1
LCAgNTQyLCAgNTUyLCAgNTM4LCAgNTQ0LCAgNTQ3LCAgNTQ4LCAgICAwLCAgMTg3LAotICAgICAg
NTQ3LCAgMjQxLCAgNTMzLCAgNTQ2LCAgNTM3LCAgNTM5LCAgNTI5LCAgNTQzLCAgNTQwLCAgNTQy
LAotICAgICAgNTI1LCAgNTMwLCAgNTI3LCAgNTE2LCAgMTkyLCAgNTMwLCAgNTI2LCAgNTI4LCAg
NTE3LCAgNTIwLAotICAgICAgMjc0LCAgNTI1LCAgNTE3LCAgNTI5LCAgMTE0LCAgNTIyLCAgNjI4
LCAgNjI4LCAgNjI4LCAgICAwLAotICAgICAgMzE2LCAgICAwLCAgMzIyLCAgMzM4LCAgMzQ0LCAg
MzUxLCAgICAwLCAgNjI4LCAgNjI4LCAgICAwLAotICAgICAgNTE0LCAgNTE4LCAgNTI3LCAgNTI0
LCAgNTA4LCAgNTA4LCAgMjA1LCAgNTIzLCAgNTIwLCAgNTIwLAotICAgICAgNTE4LCAgNTE1LCAg
NTA3LCAgNTEzLCAgNTAwLCAgNTExLCAgNTE0LCAgICAwLCAgNTExLCAgNDk5LAotICAgICAgNTA2
LCAgNTAzLCAgNTA3LCAgNTAwLCAgNDg5LCAgNDg4LCAgNTAxLCAgNTA0LCAgNTAxLCAgNDk2LAot
ICAgICAgNDg3LCAgMjQ3LCAgNDkyLCAgNDk1LCAgNDg2LCAgNDgzLCAgNDg3LCAgNDkzLCAgNDg0
LCAgNDc1LAotCi0gICAgICA0NzgsICA0NzYsICA0ODYsICA0NzIsICA0NzAsICA0NzAsICA0NzIs
ICA0NjksICA0ODAsICA0NzksCi0gICAgICAzMjgsICA0NzQsICA0NjksICA0NTgsICAyNjAsICA0
NzYsICA0NzgsICA0NjcsICAzNTgsICAzNjYsCi0gICAgICAzNzIsICAzNzgsICA0NjgsICAgIDAs
ICA0NjYsICAyNzYsICAgIDAsICA0NTgsICA0NTYsICA0NjQsCi0gICAgICA0NTMsICA0NzAsICA0
NTksICAyOTEsICAgIDAsICAgIDAsICA0NTMsICA0NjMsICA0NjMsICA0NDgsCi0gICAgICAzMDUs
ICAgIDAsICAgIDAsICA0NTAsICAzMjcsICA0NTEsICA0NDUsICA0NDQsICA0NDUsICA0NDQsCi0g
ICAgICAzODIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NDAsICA0NDEsICA0NDYs
ICA0MzcsCi0gICAgICA0NTAsICA0NDUsICA0NDQsICA0MzYsICA0NDAsICA0MzIsICA0MzUsICA0
MzksICA0NDQsICA0NDMsCi0gICAgICA0MzQsICAgIDAsICAgIDAsICA0NDAsICA0MjksICA0Mjks
ICA0MzQsICA0MzMsICA0MzAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICA0MjAsICA0
MzIsICA0MzQsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICA0MjIs
ICA0MjMsICA0MTcsICA0MjcsICAgIDAsICAgIDAsICAgIDAsICA0MTgsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAg
ICAgIDQyNSwgICAgMCwgICAgMCwgIDQyMywgIDQxOSwgICAgMCwgICAgMCwgICAgMCwgIDQxNSwg
IDQxMSwKLSAgICAgIDQxNiwgIDQwNiwgIDQxOSwgIDQwNSwgIDQxOCwgIDQwNywgIDQxNCwgICAg
MCwgIDQxMiwgIDQxNCwKLSAgICAgIDM5OCwgIDQwNywgIDQxMywgIDQwOCwgIDM5NiwgICAgMCwg
IDM5OCwgICAgMCwgIDM5NywgIDQwMCwKLSAgICAgICAgMCwgIDM4OSwgIDM4OCwgIDM4OCwgIDQw
MSwgICAgMCwgIDQwMywgICAgMCwgIDQwMiwgIDQwMSwKLSAgICAgIDM4NiwgIDM5OSwgIDM4Niwg
ICAgMCwgICAgMCwgIDM4OSwgICAgMCwgICAgMCwgIDM4MSwgICAgMCwKLSAgICAgICAgMCwgICAg
MCwgICAgMCwgIDM3OCwgIDM4OSwgIDM4MiwgIDM4OCwgIDM4NSwgIDM4MCwgIDM3MiwKLSAgICAg
IDM4MiwgICAgMCwgICAgMCwgIDM2NSwgIDM3MSwgIDM2MCwgICAgMCwgIDM2OSwgIDM2NiwgIDM1
NiwKLSAgICAgIDM4NSwgIDM2NCwgICAgMCwgICAgMCwgIDM2NCwgICAgMCwgIDM2MiwgIDM2MSwg
ICAgMCwgICAgMCwKLSAgICAgIDM2MCwgIDMyMywgIDMwOCwgICAgMCwgIDI5OCwgIDMxOCwgIDI3
MCwgIDI2NSwgICAgMCwgICAgMCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMjc5LCAgMjcxLCAgMjQwLCAgMjQwLAotICAgICAgMjM4LCAgMjM3LCAgMjI2LCAg
ICAwLCAgMjA4LCAgMTg4LCAgMTkwLCAgICAwLCAgMTg2LCAgMTczLAotICAgICAgMTg3LCAgMTY0
LCAgMTU4LCAgICAwLCAgNjI4LCAgNDE1LCAgNDE3LCAgNDE5LCAgNDIzLCAgMTg2CisgICAgICAg
IDAsICAgIDAsICAgNjUsICAgNjYsICAgNzUsICAgIDAsICA2ODAsICA2ODEsICA2ODEsICA2ODEs
CisgICAgICA2NTQsICAgNDUsICAxMzcsICA2ODEsICA2ODEsICA2NTMsICAxMzQsICA2ODEsICAx
MzMsICAxMzEsCisgICAgICAxNDYsICAxNTksICAxNjgsICA2NTEsICA2ODEsICAxODYsICA2NTEs
ICAgNDcsICA2ODEsICAgIDAsCisgICAgICA2ODEsICA2ODEsICAxMjgsICAxMDAsICAxMTAsICAx
NTIsICAxNTYsICAxNDYsICAxNjYsICA2MjIsCisgICAgICAxNzMsICAxMDksICA2MjEsICAxMjYs
ICAxNzcsICA2MTUsICAxNzgsICA2MjgsICAxODcsICAxODQsCisgICAgICAxNDEsICAxOTcsICA2
MjQsICA2ODEsICAxNTcsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2NTYsCisgICAgICA2ODEs
ICA2ODEsICAgIDAsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsCisg
ICAgICA2ODEsICA2ODEsICA2ODEsICAyMzYsICA2ODEsICAgIDAsICA2ODEsICAyNDMsICAyNzMs
ICAyODIsCisgICAgICAzMDQsICAgIDAsICAzMTQsICA2ODEsICA2ODEsICA2ODEsICA2NDQsICA2
ODEsICA2ODEsICA2ODEsCisgICAgICA2NDMsICAgIDAsICA2ODEsICA2ODEsICA2MTYsICA2MDks
ICA2MTIsICA2MjAsICA2MTksICA2MDYsCisKKyAgICAgIDYyMSwgIDYwOCwgIDYxNCwgIDYwMiwg
IDU5OSwgIDYxMiwgIDU5OSwgIDU5NiwgIDU5NiwgIDYwMiwKKyAgICAgIDU5MCwgIDE4OSwgIDU5
NSwgIDYwNSwgIDU5MSwgIDU5NywgIDYwMCwgIDYwMSwgICAgMCwgIDIxNiwKKyAgICAgIDYwMCwg
IDE4OCwgIDU4NiwgIDU5OSwgIDU5MCwgIDU5MiwgIDU4MiwgIDU5NiwgIDU5MywgIDU5NSwKKyAg
ICAgIDU3OCwgIDU4MywgIDU4MCwgIDU2OSwgIDE4MywgIDU3NywgIDU4MiwgIDU3OCwgIDU4MCwg
IDU2OSwKKyAgICAgIDU3MiwgIDIyMCwgIDU3NywgIDU2OSwgIDU4MSwgIDE3NiwgIDU3NCwgIDY4
MSwgIDY4MSwgIDY4MSwKKyAgICAgICAgMCwgIDMzMSwgICAgMCwgIDM0NCwgIDM2MSwgIDI5MCwg
IDM3NCwgICAgMCwgIDY4MSwgIDY4MSwKKyAgICAgICAgMCwgIDU2NiwgIDU3MCwgIDU3OSwgIDU3
NiwgIDU2MCwgIDU2MCwgIDIxNSwgIDU3NSwgIDU3MiwKKyAgICAgIDU3MiwgIDU3MCwgIDU2Nywg
IDU1OSwgIDU2NSwgIDU1MiwgIDU2MywgIDU0OSwgIDU2NSwgICAgMCwKKyAgICAgIDU2MiwgIDU1
MCwgIDU1NywgIDU1NCwgIDU1OCwgIDU1MSwgIDU0MCwgIDUzOSwgIDU1MiwgIDU1NSwKKyAgICAg
IDU1MiwgIDU0NywgIDUzOCwgIDI2MCwgIDU0MywgIDU0NiwgIDUzNywgIDUzNCwgIDUzOCwgIDU0
NCwKKworICAgICAgNTM1LCAgNTI2LCAgNTI5LCAgNTI3LCAgNTM3LCAgNTIzLCAgNTIxLCAgNTM0
LCAgNTIwLCAgNTIyLAorICAgICAgNTE5LCAgNTMwLCAgNTI5LCAgMjgzLCAgNTI0LCAgNTE5LCAg
NTA4LCAgMjY0LCAgNTI2LCAgNTI4LAorICAgICAgNTE3LCAgMzgxLCAgMzg4LCAgMzk1LCAgNDAy
LCAgNTE4LCAgICAwLCAgNTE2LCAgMzIwLCAgICAwLAorICAgICAgNTA4LCAgNTA2LCAgNTE0LCAg
NTAzLCAgNTIwLCAgNTA5LCAgMzM2LCAgICAwLCAgICAwLCAgNTAzLAorICAgICAgNTEzLCAgNTEz
LCAgICAwLCAgNDk4LCAgMzQ5LCAgICAwLCAgICAwLCAgNTAwLCAgMzY2LCAgNTAxLAorICAgICAg
NDk1LCAgNDk0LCAgNDk1LCAgNDk0LCAgNDA3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgNDkwLCAgNDkxLCAgNDk2LCAgNDg3LCAgNTAwLCAgNDk1LCAgNDk0LCAgNDg2LCAg
NDkwLCAgNDgyLAorICAgICAgNDg1LCAgNDg5LCAgNDk0LCAgNDgwLCAgNDkyLCAgNDgzLCAgICAw
LCAgICAwLCAgNDg5LCAgNDc4LAorICAgICAgNDc4LCAgNDgzLCAgNDgyLCAgNDc5LCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgNDY5LCAgNDgxLAorICAgICAgNDgzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgNDcxLCAgNDcyLCAgNDY2LAorCisgICAgICA0NzYsICAgIDAs
ICAgIDAsICAgIDAsICA0NjcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NzQsICAgIDAsICAgIDAsICA0NzIsICA0Njgs
CisgICAgICAgIDAsICAgIDAsICAgIDAsICA0NjQsICA0NjAsICA0NjUsICA0NTUsICA0NjgsICA0
NTQsICA0NjcsCisgICAgICA0NTYsICA0NjMsICAgIDAsICA0NjEsICA0NjMsICA0NDcsICA0NDks
ICA0NTUsICA0NjEsICA0NTYsCisgICAgICA0NDQsICAgIDAsICA0NDYsICAgIDAsICA0NDUsICA0
NDgsICAgIDAsICA0MzcsICA0MzYsICA0MzYsCisgICAgICA0NDksICAgIDAsICA0NTEsICAgIDAs
ICA0NTAsICA0NDksICA0MzQsICA0NDcsICA0MzQsICAgIDAsCisgICAgICAgIDAsICA0MzcsICAg
IDAsICAgIDAsICA0MjksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0MjYs
ICA0MzcsICA0MzAsICA0MzYsICA0MzMsICA0MjgsICA0MjAsICA0MzIsICAgIDAsICAgIDAsCisg
ICAgICA0MjUsICA0MzIsICA0MjEsICAgIDAsICA0MzAsICA0MjcsICA0MTcsICA0MTEsICA0MjUs
ICAgIDAsCisgICAgICAgIDAsICA0MjUsICAgIDAsICA0MjMsICA0MjIsICAgIDAsICAgIDAsICA0
MjEsICA0MDcsICA0MTksCisKKyAgICAgICAgMCwgIDQxMCwgIDQzMSwgIDQzMCwgIDQyOSwgIDQw
MCwgIDM5NiwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgIDQyMSwgIDI1MCwgIDQyMSwgIDQxMSwgIDM4NCwKKyAgICAgIDM5MiwgIDM5NCwgIDM5
MCwgIDM5MiwgIDM5MSwgIDM5MCwgIDM5MywgIDM5MCwgIDM5MSwgIDM4OCwKKyAgICAgICAgMCwg
IDMzMiwgIDM0MywgIDMxNywgIDMyOSwgIDMxMywgIDMxNywgIDMwNCwgIDMyMSwgIDI5MSwKKyAg
ICAgICAgMCwgIDMwMiwgIDI4MCwgIDI3MSwgIDI1NSwgIDI2MiwgICAgMCwgIDI1NiwgICAgMCwg
IDIzMiwKKyAgICAgIDIwNiwgIDIxMiwgIDE0OCwgIDE1OSwgIDExMywgICAgMCwgICAgMCwgIDY4
MSwgIDQ0MiwgIDQ0NCwKKyAgICAgIDQ0NiwgIDQ1MCwgIDE2MQogICAgIH0gOwogCi1zdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2RlZls0NjRdID0KICAgICB7ICAgMCwKLSAgICAgIDQyNSwgICAgMSwgIDQyNiwg
IDQyNiwgIDQyNSwgICAgNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NywKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyOCwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNywgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI4LAot
ICAgICAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDMwLCAgNDI1LCAgNDI1
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgICAwLCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1CisgICAgICA0NTgsICAgIDEsICA0NTksICA0NTks
ICA0NTgsICAgIDUsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsCisg
ICAgICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NjEsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NjMsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NjAsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAg
IDQ2MSwgIDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1
OCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgICAgMCwgIDQ1OCwgIDQ1OCwKKyAgICAg
IDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfbnh0WzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs3NDldID0K
ICAgICB7ICAgMCwKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAx
NCwgICAxNSwgICAxNiwgICAxNywKICAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyNCwgICAyNSwgICAyNiwgICAy
NywgICAyOCwgICAyOSwgICAzMCwgICAzMCwgICAzMCwgICAzMCwKLSAgICAgICAzMCwgICAzMCwg
ICAzMCwgICAzMCwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKLSAgICAgICAz
NiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywgICA0NCwK
LSAgICAgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1
MywgICAzMCwKLSAgICAgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwg
ICA1OSwgICA2NSwgICA2NiwKLSAgICAgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2
MSwgICA2MiwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAyMywgICAyNCwgICAyNSwgICAyNiwg
ICAyNywgICAyOCwgICAyOSwgICAzMCwgICAzMCwgICAzMCwKKyAgICAgICAzMCwgICAzMCwgICAz
MCwgICAzMCwgICAzMCwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwKKyAgICAgICAzNSwg
ICAzNiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywKKyAg
ICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1Miwg
ICA1MywKKyAgICAgICAzMCwgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1
OSwgICA1OSwgICA2NSwKKyAgICAgICA2NiwgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwg
ICA2MSwgICA2MiwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAg
OCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwg
ICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKIAotICAgICAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4LAogICAg
ICAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLAorICAgICAgIDYzLCAgICA4LCAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLCAgIDYzLAogICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLCAgICA4LCAgICA4LCAgICA4LCAgICA4LAotICAgICAgIDY3LCAgIDcwLCAgIDcyLCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDkzLAotICAgICAgMTE5LCAgIDc1
LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LCAgMTIwLCAgIDY4LCAgIDk3LAotICAgICAg
MjE2LCAgIDk4LCAgMjE3LCAgIDk0LCAgMTIxLCAgIDk5LCAgIDc3LCAgIDc4LCAgMTE2LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgMTE3LCAgIDgzLCAg
IDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgxLCAgMTAwLCAgMTIz
LCAgMTE4LCAgMTU3LCAgIDgyLAotICAgICAgMTI0LCAgNDI0LCAgIDgxLCAgNDIzLCAgMTI1LCAg
MTAxLCAgMTQ3LCAgIDgxLCAgMTAyLCAgIDg2LAotCi0gICAgICAxMDMsICAgODcsICAgODgsICAx
MTAsICAxMDQsICAgODEsICAxMDcsICAxMjYsICAxMDgsICAxMDUsCi0gICAgICAxMjgsICAxMTEs
ICAxMzIsICAxMTIsICAgODIsICAxMDYsICAxMTMsICAxMDksICA0MjIsICAxMzMsCi0gICAgICAx
MzQsICA0MjEsICAxMTQsICAxMzcsICA0MjAsICAxMjksICAxMzgsICAxNDEsICAxMzAsICAxMzUs
Ci0gICAgICAyMDQsICAxNDIsICAxMzYsICAxNDMsICAxMzksICAxODQsICAxNDgsICAxNDQsICAx
ODUsICAxODYsCi0gICAgICA0MTksICAxNDAsICAxODcsICA0MTgsICAxODgsICAyMDUsICAxNDUs
ICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsICAxNTMsICAxNTMsICAyMjksCi0gICAgICAyMzAsICA0MTcsICAxNTEsICAyNTQs
ICAyNTUsICAyNTYsICA0MTYsICAgNzgsICAxNTQsICAgNzksCi0gICAgICAgNzksICAgNzksICAg
NzksICAgNzksICAgODAsICAxNTEsICAyODAsICAyODEsICAyODIsICA0MTUsCi0gICAgICA0MTQs
ICAxNTQsICA0MTMsICAgNzgsICAgODEsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0g
ICAgICAgODAsICAxOTAsICAyODgsICAyODksICAyOTAsICA0MTIsICAxNTUsICAgODEsICAxNTUs
ICAxOTEsCi0KLSAgICAgICA4MSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1Niwg
IDI5NywgIDI5OCwgIDI5OSwKLSAgICAgIDQxMSwgIDQxMCwgICA3OCwgICA4MSwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgIDIxMSwgIDMwNCwgIDMwNSwgIDMwNiwg
IDQwOSwgIDIxOSwgIDQwOCwgIDIxOSwgIDIxMiwgICA4MSwKLSAgICAgIDIyMCwgIDIyMCwgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywKLSAgICAgIDE1Mywg
IDE1MywgICA4MSwgIDMwOCwgIDMwOSwgIDMxMCwgIDQwNywgIDIyMSwgIDQwNiwgIDIyMSwKLSAg
ICAgIDQwNSwgIDE1NCwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDE1Niwg
IDE1NiwKLSAgICAgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NCwgIDE1NiwgIDE1NiwgIDE1
NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDI3NSwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwg
IDIyMCwgIDIyMCwgIDQwNCwgIDI3NiwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIy
MCwgIDIyMCwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKLSAgICAgIDIyMiwgIDIyMiwgIDIyMiwg
IDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDMxNiwgIDMxNywKLQotICAgICAgMzE4LCAg
Mzk2LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk1LCAgMzk0LCAgMzkzLAotICAg
ICAgMzkyLCAgMzkxLCAgMzk3LCAgMzkwLCAgMzk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDkyLAotICAgICAgIDkyLCAgMTUwLCAgMTUwLCAgMTUyLCAgMzg5LCAgMTUyLCAgMTUyLCAgMzg4
LCAgMzg3LCAgMzg2LAotICAgICAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzgwLCAg
Mzc5LCAgMzc4LCAgMzc3LCAgMzc2LAotICAgICAgMzc1LCAgMzc0LCAgMzczLCAgMzcyLCAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LAotICAgICAgMzY1LCAgMzY0LCAgMzYzLCAg
MzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LAotICAgICAgMzU1LCAgMzU0
LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LAotICAgICAg
MzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LAotICAgICAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LAotICAgICAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5
LCAgMzE1LCAgMzE0LCAgMzEzLAotCi0gICAgICAzMTIsICAzMTEsICAzMDcsICAzMDMsICAzMDIs
ICAzMDEsICAzMDAsICAyOTYsICAyOTUsICAyOTQsCi0gICAgICAyOTMsICAyOTIsICAyOTEsICAy
ODcsICAyODYsICAyODUsICAyODQsICAyODMsICAyNzksICAyNzgsCi0gICAgICAyNzcsICAyNzQs
ICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsCi0gICAgICAy
NjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTMs
Ci0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsCi0gICAgICAyNDIsICAyNDEsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzMsCi0gICAgICAyMzIsICAyMzEsICAyMjgsICAyMjcsICAyMjYsICAy
MjUsICAyMjQsICAyMjMsICAyMTgsICAyMTUsCi0gICAgICAyMTQsICAyMTMsICAyMTAsICAyMDks
ICAyMDgsICAyMDcsICAyMDYsICAyMDMsICAyMDIsICAyMDEsCi0gICAgICAyMDAsICAxOTksICAx
OTgsICAxOTcsICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksCi0gICAgICAxODMs
ICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCi0K
LSAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwKLSAgICAgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE0OSwg
IDE0NiwgIDEzMSwgIDEyNywKLSAgICAgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2
NCwgIDQyNSwgICAgNywgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAg
ICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQotCisg
ICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgs
ICAgIDgsCisgICAgICAgIDgsICAgIDgsICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgOTMsICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsCisgICAgICAxMjAsICAgNjgsICAgOTcsICAxNTgsICAg
OTgsICAxMjMsICAgOTQsICAxMjEsICAgOTksICAxMjQsCisgICAgICAgNzcsICAgNzgsICA0NTcs
ICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsCisgICAgICAgNzgsICAx
NDgsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODEsCisgICAg
ICAgODUsICAxMDAsICAxNDIsICA0NTYsICAgODIsICAxMDcsICAxNDMsICAxMDgsICAgODEsICAx
MDMsCisKKyAgICAgIDQ1NSwgIDEwMSwgICA4MSwgIDEwNCwgIDEwMiwgIDExMCwgIDEwOSwgICA4
NiwgIDEwNSwgICA4NywKKyAgICAgICA4OCwgICA4MSwgIDExNiwgIDExMSwgIDEwNiwgIDExMiwg
IDEyNSwgIDEyOCwgIDExMywgICA4MiwKKyAgICAgIDExNywgIDE0OSwgIDIwNiwgIDIxOSwgIDEx
NCwgIDIyMCwgIDEzMiwgIDEzOCwgIDE3OCwgIDEyNiwKKyAgICAgIDEzOSwgIDExOCwgIDEyOSwg
IDEzMywgIDEzNCwgIDEzMCwgIDE0NCwgIDIwNywgIDE0MCwgIDE5MiwKKyAgICAgIDE0NSwgIDE3
OSwgIDQ1NCwgIDEzNSwgIDEzNiwgIDE0MSwgIDEzNywgIDE5MywgIDQ1MywgIDE0NiwKKyAgICAg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgIDE1NCwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDQ1MiwgIDE4NiwgIDE1MiwgIDIxNCwg
IDE4NywgIDE4OCwKKyAgICAgIDIzMiwgIDIzMywgIDE4OSwgIDE1NSwgIDE5MCwgIDIxNSwgIDI1
OCwgIDI1OSwgIDI2MCwgIDE1MiwKKyAgICAgIDI4NSwgIDI4NiwgIDI4NywgIDQyMiwgIDQyMywg
ICA3OCwgIDE1NSwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDQ1MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKworICAgICAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgxLCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAorICAgICAg
MTU3LCAgNDUwLCAgIDgxLCAgMTU2LCAgNDQ5LCAgMTU2LCAgIDgxLCAgNDQ4LCAgMTU3LCAgMTU3
LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgIDgxLCAgIDc4LCAgMjgwLCAg
IDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgMjgxLCAgMjkz
LCAgMjk0LCAgMjk1LCAgNDQ3LAorICAgICAgMjIyLCAgNDQ2LCAgMjIyLCAgNDQ1LCAgIDgxLCAg
MjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLAorICAgICAgMjIzLCAgMjIzLCAgMzAyLCAgMzAz
LCAgMzA0LCAgNDQ0LCAgNDQzLCAgIDgxLCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgMzA5LCAgMzEwLCAgMzExLCAgNDQyLCAgNDQxLAorICAgICAgMjI0
LCAgNDQwLCAgMjI0LCAgNDM5LCAgMTU1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAor
ICAgICAgMjI1LCAgMjI1LCAgMzEzLCAgMzE0LCAgMzE1LCAgNDM4LCAgNDM3LCAgMTU1LCAgMTU3
LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjIzLCAgMjIzLAorCisgICAgICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAyMjUs
ICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAy
MjUsICAzMjEsICAzMjIsICAzMjMsICA0MDMsICA0MDQsICA0MDUsICA0MzYsCisgICAgICA0MzUs
ICA0MzQsICA0MzMsICA0MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MDYsCisg
ICAgICA0MjYsICA0MDcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsICAgOTIsICAxNTEs
ICAxNTEsCisgICAgICAxNTMsICA0MjUsICAxNTMsICAxNTMsICA0MjQsICA0MjEsICA0MjAsICA0
MTksICA0MTgsICA0MTcsCisgICAgICA0MTYsICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEs
ICA0MTAsICA0MDksICA0MDgsICA0MDIsCisgICAgICA0MDEsICA0MDAsICAzOTksICAzOTgsICAz
OTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIsCisgICAgICAzOTEsICAzOTAsICAzODks
ICAzODgsICAzODcsICAzODYsICAzODUsICAzODQsICAzODMsICAzODIsCisgICAgICAzODEsICAz
ODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsICAzNzIsCisKKyAg
ICAgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2Mywg
IDM2MiwKKyAgICAgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1
NCwgIDM1MywgIDM1MiwKKyAgICAgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0Niwg
IDM0NSwgIDM0NCwgIDM0MywgIDM0MiwKKyAgICAgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMz
NywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwg
IDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMCwgIDMxOSwKKyAgICAgIDMxOCwgIDMx
NywgIDMxNiwgIDMxMiwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwgIDMwMSwgIDMwMCwKKyAgICAg
IDI5OSwgIDI5OCwgIDI5NywgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4
NCwKKyAgICAgIDI4MywgIDI4MiwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwgIDI3NCwg
IDI3MywgIDI3MiwKKyAgICAgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2
NSwgIDI2NCwgIDI2MywgIDI2MiwKKyAgICAgIDI2MSwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwg
IDI1MywgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwKKworICAgICAgMjQ4LCAgMjQ3LCAgMjQ2LCAg
MjQ1LCAgMjQ0LCAgMjQzLCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LAorICAgICAgMjM4LCAgMjM3
LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LAorICAgICAg
MjI2LCAgMjIxLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5
LAorICAgICAgMjA4LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAg
MTk4LCAgMTk3LAorICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkxLCAgMTg1LCAgMTg0LCAgMTgz
LCAgMTgyLCAgMTgxLCAgMTgwLAorICAgICAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAg
MTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LAorICAgICAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTUwLAorICAgICAgMTQ3LCAgMTMxLCAg
MTI3LCAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDU4LAorICAgICAgICA3
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBA
IC02NzcsOCArNjkzLDggQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVd
ID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwgICAxMiwKLSAgICAgICAyOCwgICAyOCwg
ICAgMywgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwK
KyAgICAgICAxMiwgICAyOCwgICAyOCwgICAgMywgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKIApAQCAtNjg2LDcyICs3MDIsNzcgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KICAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKLSAgICAgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAzMywKLSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwgICA0MiwgICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0
MiwgICAzNSwgICAyMSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAy
MywgICAyMywgICAyNiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAg
ICA0NCwgIDQyMywgICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAy
NiwKLQotICAgICAgIDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1
LCAgIDM4LCAgIDM3LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAg
IDM5LCAgIDM4LCAgNDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5
LCAgIDQ3LCAgIDUwLCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAg
IDUyLCAgIDUwLCAgMTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUw
LCAgMTIwLCAgNDE2LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3
LAotICAgICAgMTY3LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAg
IDc4LCAgIDc5LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1
LCAgMjE1LCAgMjE1LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAg
IDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2
LCAgMjI2LCAgNDA5LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0
MDgsICA0MDcsICAgODMsICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
Ci0gICAgICAxNDEsICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAx
NDEsICAgODMsCi0gICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMs
ICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAy
NDUsICAzOTYsICAxNTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYs
ICAyMTEsICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0g
ICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEs
ICAyMjEsCi0gICAgICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyNTEsICAyNTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4
NSwgIDM4MiwgIDM4MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwg
IDM4MSwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQy
OCwgIDQyOSwgIDM3MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2Nywg
IDM2NiwgIDM2NSwgIDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAg
ICAgIDM0OSwgIDM0NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywg
IDMzNSwKLSAgICAgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMy
NiwgIDMyNSwgIDMyNCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwg
IDMxNCwgIDMxMSwgIDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4
NSwgIDI4NCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwg
IDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2
MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAg
ICAgMjQ3LCAgMjQ2LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAg
MjMxLAotICAgICAgMjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2
LCAgMjE0LCAgMjEzLAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5
LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAg
MTY5LCAgMTY4LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0
LAotICAgICAgMTQzLCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAg
MTMzLCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1
LCAgMTI0LCAgMTIzLCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAg
MTEzLCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAx
MDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcs
ICAgOTYsICAgOTUsICAgOTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAg
NDMsICAgNDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3
LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAg
IDMzLCAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQy
LCAgIDEzLCAgIDM1LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAor
ICAgICAgIDIxLCAgIDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIy
LCAgIDIyLAorICAgICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4
LCAgIDUxLCAgIDM4LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcs
ICAgMzYsICAgMzksICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAg
NDEsICAgMzksICAgMzcsICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEs
ICAgNTUsICAxMzUsICAxNDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisg
ICAgICAgNTAsICAgNDEsICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAs
ICAxMjIsCisgICAgICAgNTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAx
MjIsICA0NTEsICAgNTIsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzgsICAgNzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0
NTAsICAxMjAsICAgNzQsICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAs
ICAgNzgsICAxMjAsICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAy
MTgsICAyMTgsICA0MTcsICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwg
ICA3OSwgIDQ0NCwgICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4
MSwgICA4MCwgICA4MywgIDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0
MiwgIDE1MiwgIDQ0MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAg
IDE1MiwgIDE1MiwgIDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwg
IDQzNywgIDQzNiwKKyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwg
IDQzMywgIDQzMiwgIDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIy
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAg
MjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAg
Mzg4LCAgNDMwLAorICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIz
LCAgNDIyLCAgNDIxLCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAg
NDU5LCAgNDYwLCAgNDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYy
LCAgNDE4LCAgNDE2LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAg
NDAwLCAgMzk5LCAgMzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2
LCAgMzg1LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAor
ICAgICAgMzczLCAgMzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2
LCAgMzU1LAorICAgICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAg
MzQzLCAgMzQxLCAgMzQwLAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAz
MzQsICAzMzIsICAzMzEsICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUs
ICAzMjQsICAzMjAsICAzMTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAy
OTgsICAyOTEsICAyOTAsICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAs
ICAyNzksICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisg
ICAgICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQs
ICAyNTMsCisgICAgICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAy
NDAsICAyMzYsICAyMzUsCisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYs
ICAyMjEsICAyMjAsICAyMTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAy
MTEsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMs
ICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAx
OTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAg
ICAgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwg
IDE3NCwKKyAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwgIDE2MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwg
IDE0MCwgIDEzOSwgIDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEz
MSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywg
IDEyMSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDEx
MCwgIDEwOSwgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAg
IDEwMSwgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2
MCwKKyAgICAgICA1MywgICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwg
ICAxMSwgICAgNywKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291
bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFsxNDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbMTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEs
NyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0
OF0gPQogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAs
IDAsICAgICB9OworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEs
IDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMg
dGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2Vk
LgpAQCAtNzcxLDcgKzc5Miw3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxl
X2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQK
IC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTk0NCw3ICs5NjUs
NyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQg
YyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlpbnQgbjsgXAogCQlmb3IgKCBuID0gMDsg
biA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBj
ICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC0xMDg2LDEzICsx
MTA3LDEzIEBAIHl5X21hdGNoOgogCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJCXsKIAkJCQl5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkg
KQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCQl9CiAJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9Ci0JCXdoaWxlICggeXlfY3VycmVu
dF9zdGF0ZSAhPSA0MjUgKTsKKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ1OCApOwog
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTExMDMsNyArMTEyNCw3IEBA
IHl5X2ZpbmRfYWN0aW9uOgogCiAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYg
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQogCQkJewotCQkJeXlfc2l6ZV90IHl5bDsK
KwkJCWludCB5eWw7CiAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKIAkJ
CQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQogCQkJCQkgICAKQEAgLTE0ODEsMjIwICsxNTAy
LDI1MiBAQCBZWV9SVUxFX1NFVFVQCiAJWVlfQlJFQUsKIGNhc2UgOTA6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5
MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDkyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTM6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NDoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDk1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDk4OgorWVlfUlVMRV9TRVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9v
bFRTdHJpbmcoeXl0ZXh0KTsgCiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQog
CVlZX0JSRUFLCi1jYXNlIDkxOgorY2FzZSA5OToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTI6CitjYXNlIDEwMDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
aSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgOTM6CitjYXNlIDEwMToKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRl
eHQtPnJlY292ZXIoKTsgcmV0dXJuIDA7fQogCVlZX0JSRUFLCi1jYXNlIDk0OgorY2FzZSAxMDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsg
cmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk1OgorY2FzZSAxMDM6CiBZ
WV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9k
b3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk2
OgorY2FzZSAxMDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDk3OgorY2FzZSAxMDU6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4
LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENP
TlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk4OgorY2FzZSAxMDY6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oQUREX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSA5OToKK2Nhc2UgMTA3
OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFNVQl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTAwOgorY2FzZSAxMDg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTVVMX0FTU0lHTik7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMDE6CitjYXNlIDEwOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJl
dHVybihESVZfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMjoKK2Nhc2UgMTEwOgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKE1PRF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAz
OgorY2FzZSAxMTE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9BU1NJR04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTA0OgorY2FzZSAxMTI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
UklHSFRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNToKK2Nhc2UgMTEzOgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKEFORF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA2Ogor
Y2FzZSAxMTQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oWE9SX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDc6CitjYXNlIDExNToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9B
U1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA4OgorY2FzZSAxMTY6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oSU5DX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwOToKK2Nhc2UgMTE3Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERFQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTA6
CitjYXNlIDExODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBTkRfT1ApOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTExOgorY2FzZSAxMTk6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEyOgorY2FzZSAxMjA6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oWE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMzoKK2Nhc2UgMTIxOgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKExFX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExNDoKK2Nhc2Ug
MTIyOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEdFX09QKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDExNToKK2Nhc2UgMTIzOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEVRX09QKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDExNjoKK2Nhc2UgMTI0OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE5F
X09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExNzoKK2Nhc2UgMTI1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKExFRlRfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE4OgorY2FzZSAxMjY6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oUklHSFRfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE5
OgorY2FzZSAxMjc6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZh
bHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMDoKK2Nhc2UgMTI4
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJu
KExFRlRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIxOgorY2FzZSAxMjk6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihSSUdIVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjI6Citj
YXNlIDEzMDoKIFlZX1JVTEVfU0VUVVAKIHsgaWYgKGNvbnRleHQtPmluVHlwZVBhcmVuKSBjb250
ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKENPTU1BKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEyMzoKK2Nhc2UgMTMxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ09MT04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTI0OgorY2FzZSAxMzI6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQt
PmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oRVFVQUwpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTI1OgorY2FzZSAxMzM6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyBjb250ZXh0LT5pblR5cGVQYXJlbiA9IHRydWU7IHJldHVybihMRUZUX1BBUkVOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEyNjoKK2Nhc2UgMTM0OgogWVlfUlVMRV9TRVRVUAogeyBjb250
ZXh0LT5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4oUklHSFRfUEFSRU4pOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTI3OgorY2FzZSAxMzU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZUX0JS
QUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI4OgorY2FzZSAxMzY6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybihSSUdIVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyOToKK2Nhc2Ug
MTM3OgogWVlfUlVMRV9TRVRVUAogeyBCRUdJTihGSUVMRFMpOyAgcmV0dXJuKERPVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMzA6CitjYXNlIDEzODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKEJB
TkcpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMxOgorY2FzZSAxMzk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihEQVNIKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMjoKK2Nhc2UgMTQwOgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oVElMREUpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMzOgorY2FzZSAx
NDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQTFVTKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
NDoKK2Nhc2UgMTQyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU1RBUik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzU6CitjYXNlIDE0MzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNMQVNIKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNjoKK2Nhc2UgMTQ0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oUEVSQ0VOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzc6CitjYXNlIDE0NToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKExFRlRfQU5HTEUpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM4OgorY2Fz
ZSAxNDY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihSSUdIVF9BTkdMRSk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzk6CitjYXNlIDE0NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFZFUlRJQ0FM
X0JBUik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDA6CitjYXNlIDE0ODoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKENBUkVUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MToKK2Nhc2UgMTQ5OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4oQU1QRVJTQU5EKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MjoK
K2Nhc2UgMTUwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUVVFU1RJT04pOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQzOgorY2FzZSAxNTE6CiBZWV9SVUxFX1NFVFVQCiB7IAogICAgIEJFR0lOKElO
SVRJQUwpOwpAQCAtMTcwMiwxMiArMTc1NSwxMiBAQCBZWV9SVUxFX1NFVFVQCiAgICAgcmV0dXJu
IEZJRUxEX1NFTEVDVElPTjsKIH0KIAlZWV9CUkVBSwotY2FzZSAxNDQ6CitjYXNlIDE1MjoKIFlZ
X1JVTEVfU0VUVVAKIHt9CiAJWVlfQlJFQUsKLWNhc2UgMTQ1OgotLyogcnVsZSAxNDUgY2FuIG1h
dGNoIGVvbCAqLworY2FzZSAxNTM6CisvKiBydWxlIDE1MyBjYW4gbWF0Y2ggZW9sICovCiBZWV9S
VUxFX1NFVFVQCiB7ICB9CiAJWVlfQlJFQUsKQEAgLTE3MTYsMTEgKzE3NjksMTEgQEAgY2FzZSBZ
WV9TVEFURV9FT0YoQ09NTUVOVCk6CiBjYXNlIFlZX1NUQVRFX0VPRihGSUVMRFMpOgogeyBjb250
ZXh0LT5BZnRlckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
NDY6CitjYXNlIDE1NDoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgIlVua25vd24gY2hhciIsIHl5dGV4dCwgIiIpOyByZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1j
YXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRVUAogRUNITzsKIAlZWV9CUkVBSwpAQCAt
MjAxNiw3ICsyMDY5LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA0MjYgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJeXlfYyA9
IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwpAQCAtMjA0NSwxMSArMjA5OCwxMSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAo
eXlzY2FuX3QgeXlzY2FubmVyKQogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gNDI2ICkKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQl5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJfQogCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQyNSk7CisJeXlfaXNfamFtID0g
KHl5X2N1cnJlbnRfc3RhdGUgPT0gNDU4KTsKIAogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf
Y3VycmVudF9zdGF0ZTsKIH0KQEAgLTI5MjIsNyArMjk3NSw3IEBAIHZvaWQgQ1BQU2hJbmZvTG9n
TXNnKGNvbnN0IGNoYXIgKm1zZykKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CkBAIC0zMjAyLDE5ICszMjU1LDE1IEBAIGludCBn
bHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAg
ICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisg
ICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQo
TlVMTCxjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9j
KDAsIDEpLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7
CiAgICAgCiAgICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7
Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7
Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVu
Z3RoOwogICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmlu
ZyhzdHJpbmdbMF0pOworICAgIHJldHVybiBJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggMzdhMGYwNS4uYjdjZTk0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIu
Y3BwCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMi4g
ICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBw
YXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAy
MDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZv
dW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91
ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
ICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5
b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxs
IG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBA
IC0yOSw3ICsyNyw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0
aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBi
ZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhv
dXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0
aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJz
aW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ1LDcgQEAKICNkZWZpbmUgWVlCSVNP
TiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
MyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKIAogLyogU2tlbGV0b24gbmFtZS4g
ICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTEgKzUzLDY3IEBA
CiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMQogCisvKiBQdXNoIHBhcnNl
cnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmlu
ZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVE
RUQgMAogCiAKIAorLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4g
ICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJv
cnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKKwor
CisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURF
QlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8K
KyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisj
ZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tF
Tl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCiAvKiBUb2tlbnMu
ICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAgLTE2MSwx
NTYgKzIxNSwxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAgfTsKICNlbmRpZgotLyogVG9r
ZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmluZSBISUdIX1BSRUNJU0lPTiAy
NTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZpbmUgTE9XX1BSRUNJU0lPTiAy
NjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRSSUJVVEUgMjYzCi0jZGVmaW5l
IENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUKLSNkZWZpbmUgRkxPQVRfVFlQ
RSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJSRUFLIDI2OAotI2RlZmluZSBD
T05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVMU0UgMjcxCi0jZGVmaW5lIEZP
UiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQgMjc0Ci0jZGVmaW5lIFJFVFVS
TiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMzIDI3NwotI2RlZmluZSBCVkVD
NCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMzIDI4MAotI2RlZmluZSBJVkVD
NCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAyODMKLSNkZWZpbmUgVkVDNCAy
ODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklYMyAyODYKLSNkZWZpbmUgTUFU
UklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUgT1VUX1FVQUwgMjg5Ci0jZGVm
aW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkxCi0jZGVmaW5lIFZBUllJTkcg
MjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9UWVBFIDI5NAotI2RlZmluZSBX
SElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcK
LSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVmaW5lIFNBTVBMRVIyRFJFQ1Qg
Mjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZUEVfTkFNRSAzMDEKLSNkZWZp
bmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RBTlQgMzAzCi0jZGVmaW5lIEJP
T0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwNQotI2RlZmluZSBMRUZU
X09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUgSU5DX09QIDMwOAotI2RlZmlu
ZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmluZSBHRV9PUCAzMTEKLSNkZWZp
bmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmluZSBBTkRfT1AgMzE0Ci0jZGVm
aW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVmaW5lIE1VTF9BU1NJR04gMzE3
Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9BU1NJR04gMzE5Ci0jZGVmaW5l
IE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMyMQotI2RlZmluZSBSSUdIVF9B
U1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVmaW5lIFhPUl9BU1NJR04gMzI0
Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FTU0lHTiAzMjYKLSNkZWZpbmUg
TEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4Ci0jZGVmaW5lIExFRlRfQlJB
Q0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNkZWZpbmUgTEVGVF9CUkFDRSAz
MzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERPVCAzMzMKLSNkZWZpbmUgQ09N
TUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVBTCAzMzYKLSNkZWZpbmUgU0VN
SUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBEQVNIIDMzOQotI2RlZmluZSBU
SUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RBUiAzNDIKLSNkZWZpbmUgU0xB
U0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExFRlRfQU5HTEUgMzQ1Ci0jZGVm
aW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ3Ci0jZGVmaW5lIENB
UkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5lIFFVRVNUSU9OIDM1MAotCiAK
IAogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQot
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBh
dXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQotCi0vKiBFbmFi
bGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNl
bmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZ
WUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9S
X1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQot
LyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQot
IyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBF
ICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUK
LQogeworCisKICAgICBzdHJ1Y3QgewogICAgICAgICBUU291cmNlTG9jIGxpbmU7CiAgICAgICAg
IHVuaW9uIHsKQEAgLTM0MCwxNyArMjUyLDE2IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQRQogICAg
ICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKICAgICAgICAgfTsKICAgICB9IGludGVybTsK
LX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQ
RTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZ
UEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAog
Ci0KIC8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAog
CkBAIC0zODAsOCArMjkxLDYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOwogfQogCiAKLS8qIExpbmUgMjE2IG9mIHlhY2Mu
Yy4gICovCi0KIAogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CkBAIC00NTYsMTQgKzM2NSwx
NCBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIGludAotWVlJRCAoaW50IGkpCitZWUlEIChp
bnQgeXlpKQogI2Vsc2UKIHN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7CitZWUlEICh5
eWkpCisgICAgaW50IHl5aTsKICNlbmRpZgogewotICByZXR1cm4gaTsKKyAgcmV0dXJuIHl5aTsK
IH0KICNlbmRpZgogCkBAIC01NDQsOSArNDUzLDkgQEAgdm9pZCBmcmVlICh2b2lkICopOyAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJs
eSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKIHsKLSAg
eXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgfTsKKyAgeXl0eXBlX2ludDE2
IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKK307CiAKIC8qIFRoZSBzaXplIG9m
IHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4g
ICovCiAjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2Mp
IC0gMSkKQEAgLTU4MCwxMiArNDg5LDEyIEBAIHVuaW9uIHl5YWxsb2MKICAgIGVsZW1lbnRzIGlu
IHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBz
dGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0
aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJ
CQkJCVwKKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlc
CiAgICAgZG8JCQkJCQkJCQlcCiAgICAgICB7CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0
ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwK
LQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19h
bGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJ
CQkJCVwKIAl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNU
QUNLX0dBUF9NQVhJTVVNOyBcCiAJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRy
KTsJCQkJXAogICAgICAgfQkJCQkJCQkJCVwKQEAgLTgxMiwxNiArNzIxLDE2IEBAIHN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQogICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAi
c2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKICAgInR5cGVfcXVh
bGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAogICAidHlw
ZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rf
c3BlY2lmaWVyIiwKLSAgIkAxIiwgIkAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0
cnVjdF9kZWNsYXJhdGlvbiIsCisgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0Iiwg
InN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRpYWxpemVyIiwKICAgImRlY2xhcmF0aW9uX3N0YXRl
bWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCi0gICJjb21wb3VuZF9zdGF0
ZW1lbnQiLCAiQDMiLCAiQDQiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJzdGF0ZW1l
bnRfd2l0aF9zY29wZSIsICJANSIsICJANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIiwKKyAgImNvbXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAiJEA0IiwgInN0YXRlbWVudF9u
b19uZXdfc2NvcGUiLAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiJEA1IiwgIiRANiIsICJj
b21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKICAgInN0YXRlbWVudF9saXN0IiwgImV4
cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAotICAic2VsZWN0aW9u
X3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIkA3
IiwKLSAgIkA4IiwgIkA5IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAi
Zm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25k
aXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICIkQDciLAorICAiJEA4IiwgIiRAOSIsICJm
b3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIs
CiAgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xh
cmF0aW9uIiwKLSAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiQDEwIiwgMAorICAiZnVuY3Rpb25f
ZGVmaW5pdGlvbiIsICIkQDEwIiwgMAogfTsKICNlbmRpZgogCkBAIC0xMzQ1LDkgKzEyNTQsMTgg
QEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiAKIC8qIExpa2UgWVlFUlJP
UiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkK
ICAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1Is
IGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAx
LCB0aGlzIGNhbiBnby4gICovCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQg
dmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBi
ZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGlu
IEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBp
cworICAgZGlzY3Vzc2VkLiAgKi8KIAogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNp
ZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3Mg
ZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRv
bid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFu
ZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJ
TCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLwor
I2VuZGlmCiAKICNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC0x
NTE4LDE3ICsxNDM2LDIwIEBAIHl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2
YWx1ZXAsIGNvbnRleHQpCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0
eXBlX2ludDE2ICp0b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwg
eXl0eXBlX2ludDE2ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQg
KGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQx
NiAqdG9wOworeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50
MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlG
UFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsr
Ym90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAo
OyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3Qg
PSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAg
ICB9CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTU2MywxMSArMTQ4NCwx
MSBAQCB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCiAgIC8qIFRoZSBz
eW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsg
eXlpKyspCiAgICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsg
MSk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
IAkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQogCQkgICAgICAgCQkgICAg
ICAgLCBjb250ZXh0KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7CiAgICAgfQogfQogCkBAIC0xODQ5LDEwICsxNzcwLDggQEAg
eXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCiAJYnJlYWs7CiAg
ICAgfQogfQotDAogCiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlw
ZXMuICAqLwotCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpA
QCAtMTg3MSwxMCArMTc5MCw5IEBAIGludCB5eXBhcnNlICgpOwogCiAKIAotCi0vKi0tLS0tLS0t
LS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCkBAIC0xODk4LDc0ICsxODE2LDc1IEBAIHl5cGFy
c2UgKGNvbnRleHQpCiAjZW5kaWYKICNlbmRpZgogewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1i
b2wuICAqLworLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyog
VGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUg
c2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogWVlTVFlQRSB5eWx2
YWw7CiAKLS8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJy
czsKLQotICBpbnQgeXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBO
dW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAg
Ki8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVy
bmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0j
aWYgWVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBp
dHMgYWxsb2NhdGVkIHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5
bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVm
OwotI2VuZGlmCi0KLSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5
c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGlj
IHZhbHVlcywKLSAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZl
ciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZs
b3cKLSAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisgICAgLyogTnVtYmVy
IG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKIAotICAvKiBU
aGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwot
ICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKyAg
ICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBl
cnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CiAKLSAgLyog
VGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBU
SF07Ci0gIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7CisgICAgLyog
VGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0
YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgogCisgICAg
ICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5
eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCiAKKyAg
ICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRE
RVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7
CiAKLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkK
KyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2Fb
WVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CiAK
LSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKyAgICBZWVNJWkVfVCB5eXN0
YWNrc2l6ZTsKIAorICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0
b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50
IHl5dG9rZW47CiAgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFs
dWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCiAgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCiAgIFlZ
U1RZUEUgeXl2YWw7CiAKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJv
ciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZb
MTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2Mg
PSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5
dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQogCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBv
biB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5v
IHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRv
a2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXpl
ID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2Vc
biIpKTsKIAogICB5eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0g
MDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICov
CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAK
ICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQg
b2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRo
ZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50
cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3Ag
PSB5eXZzOwogCkBAIC0xOTk1LDcgKzE5MTQsNiBAQCBpbnQgeXluZXJyczsKIAlZWVNUWVBFICp5
eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEK
IAkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0CkBAIC0yMDAzLDcgKzE5MjEsNiBAQCBpbnQgeXluZXJyczsKIAl5eW92ZXJmbG93IChZ
WV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKIAkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgq
eXlzc3ApLAogCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0KIAkJICAg
ICZ5eXN0YWNrc2l6ZSk7CiAKIAl5eXNzID0geXlzczE7CkBAIC0yMDI2LDkgKzE5NDMsOCBAQCBp
bnQgeXluZXJyczsKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tf
QllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMp
OwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxP
Q0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYg
KHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0yMDM5LDcgKzE5
NTUsNiBAQCBpbnQgeXluZXJyczsKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAg
ICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9u
ZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAgLTIwNDksNiArMTk2NCw5IEBAIGludCB5eW5lcnJz
OwogCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRl
KSk7CiAKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKwogICBnb3Rv
IHl5YmFja3VwOwogCiAvKi0tLS0tLS0tLS0tLgpAQCAtMjA1NywxNiArMTk3NSwxNiBAQCBpbnQg
eXluZXJyczsKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2
ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3
ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVh
ZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAK
LSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRv
IGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8g
ZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlw
YWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZh
dWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFk
IHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBl
aXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8K
KyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2Fo
ZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZ
WURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTIwOTgsMjAgKzIw
MTYsMTYgQEAgeXliYWNrdXA6CiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAo
eXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0
ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMu
ICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlm
dCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9r
ZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWws
ICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlz
IGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsK
KyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7
CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0yMTgzLDE0ICsy
MDk3LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5p
cXVlSWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDM6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNDoKQEAgLTIyMDcsNyArMjEyMSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKQEAgLTIyMTYsNyArMjEzMCw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9h
dCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OgpAQCAtMjIyNSwyMSArMjEz
OSwyMSBAQCB5eXJlZHVjZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5iKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKQEAgLTIzMTYsMTQgKzIyMzAsMTQg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKQEAgLTI0MzYs
NyArMjM1MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRo
ZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKQEAgLTI0NTAs
NyArMjM2NCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsyMzc4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTQ6CkBAIC0yNDczLDcgKzIzODcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQt
PmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNToK
QEAgLTI1NzMsMTQgKzI0ODcsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZGVsZXRlIGZuQ2FsbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzoK
QEAgLTI1ODksNyArMjUwMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVk
IiwgIiIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUxMSw3IEBAIHl5cmVkdWNlOgogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6CkBAIC0yNjA1LDcgKzI1
MTksNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDIwOgpAQCAtMjYxMyw3ICsyNTI3LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlv
bik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIxLDcgKzI1MzUsNyBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9k
ZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjoKQEAgLTI2MzEs
NyArMjU0NSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5m
dW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIzOgpAQCAt
MjY0MSwxNCArMjU1NSwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI0OgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNToK
QEAgLTI3MDcsNyArMjYyMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyNjoKQEAgLTI3MTgsNyArMjYzMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlw
ZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rp
b24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDI3OgpAQCAtMjcyOSwxNCArMjY0MywxNCBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZywgdHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVu
Y3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyODoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyOToKQEAgLTI3NTAsNyArMjY2NCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAg
ICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDMwOgpAQCAtMjc2NCw3
ICsyNjc4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMzE6CkBAIC0yNzg1LDI3ICsyNjk5LDI3IEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzI6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZh
bC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzM6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVn
YXRpdmU7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAzNDoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyA7fQor
ICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsg
KHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzNToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzY6CkBAIC0yODE4LDcgKzI3MzIsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAzNzoKQEAgLTI4MzEsMTIgKzI3NDUsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzg6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM5OgpAQCAtMjg0OCw3ICsyNzYyLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDA6CkBA
IC0yODYwLDE3ICsyNzc0LDE3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA0MjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDM6CkBAIC0yODg0LDcgKzI3OTgsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDQ6CkBAIC0yODk4LDcgKzI4
MTIsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDU6CkBAIC0y
OTEyLDcgKzI4MjYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NDY6CkBAIC0yOTI2LDEyICsyODQwLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA0NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDg6CkBAIC0yOTQ1LDcgKzI4
NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDk6CkBAIC0y
OTU5LDI3ICsyODczLDI3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA1MDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTE6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDUyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NTQ6CkBAIC0yOTkzLDEyICsyOTA3LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTY6CkBAIC0zMDEyLDEyICsy
OTI2LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNTg6CkBAIC0zMDMxLDEyICsyOTQ1LDEyIEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1OToKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgNjA6CkBAIC0zMDU0LDEyICsyOTY4LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDYxOgogCi0gICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA2MjoKQEAgLTMwNzMsMzkgKzI5ODcsMzkgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjM6CiAKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BB
c3NpZ247IDt9CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRl
cm0pLm9wID0gRU9wQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NDoKIAotICAgIHsg
RlJBR19WRVJUX09OTFkoIio9IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5
eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5p
bnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyA7fQorICAgIHsgRlJBR19WRVJUX09OTFkoIio9Iiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNz
aWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NToKIAotICAgIHsgRlJBR19WRVJUX09OTFko
Ii89IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxp
bmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
RGl2QXNzaWduOyA7fQorICAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA2NjoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDY3OgogCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyA7fQorICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNjg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjk6CkBAIC0zMTE3LDcgKzMw
MzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA3MDoKQEAgLTMxMjYsNyArMzA0MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA3MToKQEAgLTMxNTcsNyArMzA3MSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90eXBlOwogCiAgICAgICAgIGNvbnRleHQtPnN5bWJv
bFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzI6CkBA
IC0zMTY2LDcgKzMwODAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MildLmludGVybSkuaW50ZXJtQWdncmVnYXRlKQogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSku
aW50ZXJtQWdncmVnYXRlOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzM6
CkBAIC0zMTc0LDcgKzMwODgsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS50eXBlKS50eXBlLCAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc0OgpAQCAtMzIxMywyMSArMzEyNywyMSBAQCB5eXJlZHVjZToKICAg
ICAgICAgLy8gV2UncmUgYXQgdGhlIGlubmVyIHNjb3BlIGxldmVsIG9mIHRoZSBmdW5jdGlvbidz
IGFyZ3VtZW50cyBhbmQgYm9keSBzdGF0ZW1lbnQuCiAgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rp
b24gcHJvdG90eXBlIHRvIHRoZSBzdXJyb3VuZGluZyBzY29wZSBpbnN0ZWFkLgogICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRlckxldmVsKCktPmluc2VydCgqKHl5dmFsLmludGVy
bSkuZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzU6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3NzoKQEAgLTMyMzksNyArMzE1Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFso
MikgLSAoMildLmludGVybSkucGFyYW0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWxl
dGUgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNzg6CkBAIC0zMjYxLDcgKzMxNzUsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5m
dW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzk6CkBAIC0z
MjgyLDcgKzMxOTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlv
bikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgwOgpAQCAtMzI5Nyw3
ICszMjExLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkpfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgxOgpAQCAtMzMxOSw3ICszMjMzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICh5eXZzcFsoMikgLSAo
NSldLmxleCkuc3RyaW5nLCB0eXBlIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAo
eXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFt
ID0gcGFyYW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MjoKQEAgLTMz
MjgsNyArMzI0Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMykgLSAoMyldLmludGVybSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwg
KHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MzoKQEAgLTMzMzksNyAr
MzI1Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVy
bSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVy
KSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NDoKQEAgLTMzNDgs
NyArMzI2Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFso
MykgLSAoMyldLmludGVybSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2so
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5
dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NToKQEAgLTMzNTksMzUgKzMy
NzMsMzUgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
KS5saW5lLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIp
LCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg2OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDg4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA5MDoKQEAgLTMzOTUsMTQgKzMzMDksMTQgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJh
bSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTE6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkyOgpAQCAtMzQyOCw3ICszMzQy
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDkzOgpAQCAtMzQ1MCw3ICszMzY0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwgKih5eXZz
cFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUs
IHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk0OgpAQCAtMzQ3OCw3ICsz
MzkyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJt
Tm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxl
LT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBl
LCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NToK
QEAgLTM1MDIsNyArMzQxNiw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6CkBAIC0z
NTEwLDcgKzM0MjQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
LnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5s
aW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDcgKzM0NDYsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKHZhcmlhYmxl
ICYmIHN5bWJvbCkKICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTg6CkBAIC0zNTQ0
LDcgKzM0NTgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDk5OgpAQCAtMzU4MCw3ICszNDk0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQo
dmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMDA6CkBAIC0zNjA0LDcgKzM1MTgsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDEwMToKQEAgLTM2MjYsNyArMzU0MCw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRl
cm0pLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6CkBAIC0zNjM5LDcgKzM1
NTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMzoKQEAgLTM2
NjMsMTQgKzM1NzcsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cUNvbnN0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTA1OgpAQCAtMzY4MCw3ICszNTk0LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRl
IikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA2OgpA
QCAtMzY5Miw3ICszNjA2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA3OgpAQCAtMzcw
NCw3ICszNjE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXl2c3BbKDEp
IC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTA4OgpAQCAtMzcxMyw3ICszNjI3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0
LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFZvaWQsIEV2cVVuaWZvcm0sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDk6CkBAIC0zNzI3LDcgKzM2NDEsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMDoK
QEAgLTM3MzUsMzUgKzM2NDksMzUgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5w
cmVjaXNpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTExOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEyOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBNZWRpdW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMTM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lz
aW9uKSA9IEVicExvdzsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExNDoK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExNToK
QEAgLTM3NzksNyArMzY5Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDExNjoKQEAgLTM3ODcsNyArMzcwMSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTc6CkBAIC0zNzk1LDcgKzM3MDksNyBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDExODoKQEAgLTM4MDMsNyArMzcxNyw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExOToKQEAgLTM4MTEsNyArMzcyNSw3IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MjA6CkBAIC0zODIwLDcgKzM3MzQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEyMToKQEAgLTM4MjksNyArMzc0Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTIyOgpAQCAtMzgzOCw3ICszNzUyLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjM6CkBAIC0zODQ3LDcgKzM3NjEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRl
KDIpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI0OgpAQCAtMzg1Niw3
ICszNzcwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNToK
QEAgLTM4NjUsNyArMzc3OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjY6CkBAIC0zODc0LDcgKzM3ODgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMjc6CkBAIC0zODgzLDcgKzM3OTcsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjg6CkBAIC0zODkyLDcgKzM4MDYsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjk6CkBAIC0zOTAyLDcgKzM4MTYsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgyLCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMDoKQEAg
LTM5MTIsNyArMzgyNiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTMxOgpAQCAtMzkyMiw3ICszODM2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzI6CkBAIC0zOTMxLDcgKzM4NDUsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRCIsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMzM6CkBAIC0zOTQwLDcgKzM4NTQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19W
RVJUX09OTFkoInNhbXBsZXJDdWJlIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM0OgpAQCAtMzk1
Myw3ICszODY3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVy
RXh0ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM1OgpAQCAtMzk2Niw3
ICszODgwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRS
ZWN0IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNh
bXBsZXIyRFJlY3QsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzY6CkBAIC0zOTc1LDcgKzM4ODksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMzc6CkBAIC0zOTg5LDEyICszOTAzLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0U3RydWN0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTM4OgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250
ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
Kih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMzk6CkBAIC00MDEyLDEyICszOTI2LDEyIEBAIHl5cmVkdWNl
OgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVt
cG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1
Y3REZWNsYXJhdGlvbigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQw
OgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0
aW9uKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCku
c3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDE6
CkBAIC00MDI3LDE0ICszOTQxLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDUp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1
Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQyOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGlzdCk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDM6CkBAIC00MDUwLDcgKzM5
NjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxp
c3QpKVtpXSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NDoKQEAgLTQwODcsNyArNDAwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ1OgpAQCAtNDA5NSwxNCArNDAwOSwxNCBAQCB5eXJl
ZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0gTmV3UG9vbFRU
eXBlTGlzdCgpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVM
aXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGluZSkpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ3OgpAQCAtNDExNCw3ICs0MDI4LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcg
VFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
TGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlTGluZSkudHlwZS0+c2V0RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDg6CkBA
IC00MTMxLDY3ICs0MDQ1LDY3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMykg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0
QXJyYXlTaXplKHNpemUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ5
OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTA6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTE6CiAKLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUy
OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTUzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTU0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU2OgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU3OgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU4Ogog
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTU5OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKIAot
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYxOgpAQCAtNDIwMiw0NCAr
NDExNiw0NCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoNSkgLSAoNSldLmxleCkubGlu
ZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0g
KHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjM6CiAKLSAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9
CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjQ6CiAKLSAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY1OgogCi0gICAgeyBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjY6CiAKLSAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY3OgogCi0gICAgeyBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY5OgpAQCAtNDI1MCwzMSArNDE2NCwzMSBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5z
ZXRFbmRMaW5lKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcw
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSksIDApOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcx
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAw
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTczOgogCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NDoK
QEAgLTQyODMsNyArNDE5Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXl2c3BbKDEpIC0gKDUp
XS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc1OgpA
QCAtNDI5MSw3ICs0MjA1LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2Rl
KTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxNzY6CkBAIC00Mjk5LDcgKzQyMTMsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzc6CkBAIC00MzA4LDcgKzQy
MjIsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIGlm
IChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzg6CkBAIC00MzI2LDEyICs0MjQwLDEyIEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTc5OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxODA6CkBAIC00MzQwLDEyICs0MjU0LDEyIEBAIHl5cmVkdWNlOgogICAg
ICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAs
ICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDYp
IC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNildLmxleCkubGluZSk7
CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4MToKIAotICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOyA7fQorICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxODI6CkBAIC00MzU2LDEyICs0MjcwLDEyIEBAIHl5cmVkdWNlOgogCiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFso
NCkgLSAoOCldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKIAotICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9
CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgpAQCAtNDM3MCwzNSArNDI4NCwz
NSBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCByZWlu
dGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2Rl
UGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkg
LSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcpXS5pbnRlcm0u
aW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNyldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE4NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE4NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODg6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODk6CkBAIC00NDA2LDcgKzQzMjAsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE5MDoKQEAgLTQ0MTQsNyArNDMyOCw3IEBAIHl5cmVkdWNlOgogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFp
cikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5MToKQEAgLTQ0MjUsNyArNDMzOSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgpAQCAtNDQzNiw3ICs0MzUw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ3LDcgKzQzNjEs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAi
cmV0dXJuIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTQ6CkBAIC00NDYyLDcgKzQz
NzYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToi
LCAicmV0dXJuIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTU6CkBAIC00NDcwLDcg
KzQzODQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIs
ICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxOTY6CkBAIC00NDc4LDcgKzQzOTIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7CiAgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKQEAgLTQ0
ODYsMjEgKzQ0MDAsMjEgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSksIDApOwogICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxOTk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAyMDA6CkBAIC00NTgwLDcgKzQ0OTQsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFt
Tm9kZXMsIEVPcFBhcmFtZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1O
b2RlczsKICAgICAgICAgY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDE6CkBAIC00NjA4LDExICs0NTIyLDEwIEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0RW5kTGluZSgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPmdldEVuZExpbmUoKSk7CiAKICAgICAgICAgY29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAx
MjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTQ2
MjQsNyArNDUzNyw2IEBAIHl5cmVkdWNlOgogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAv
KiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hh
dCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQg
YmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtNDY4
OSw3ICs0NjAxLDcgQEAgeXllcnJsYWI6CiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAg
ewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQg
dG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVz
ZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KIAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAg
ICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQpAQCAtNDcwNiw3ICs0NjE4LDcgQEAgeXllcnJsYWI6
CiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9r
ZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2Ug
bG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICov
CiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC00NzYzLDkgKzQ2NzUsNiBAQCB5eWVycmxhYjE6CiAg
ICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogICAgIH0KIAotICBpZiAoeXluID09
IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgKisreXl2c3AgPSB5eWx2YWw7CiAKIApAQCAt
NDc5MCw3ICs0Njk5LDcgQEAgeXlhYm9ydGxhYjoKICAgeXlyZXN1bHQgPSAxOwogICBnb3RvIHl5
cmV0dXJuOwogCi0jaWZuZGVmIHl5b3ZlcmZsb3cKKyNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8
fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KIHwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29t
ZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KQEAgLTQ4MDEsNyArNDcxMCw3IEBAIHl5ZXhoYXVzdGVkbGFiOgogI2VuZGlmCiAK
IHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQor
ICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNj
YXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuaAppbmRleCAyMzk0NWI4Li4zZTQ2MWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaApAQCAtMSwyNCArMSwyMiBAQAot
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29u
IHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbnRl
cmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQg
KEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAy
MDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJz
aW9uLgotCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAz
IG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorICAgCiAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAK
IC8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsg
dGhhdCBjb250YWlucwogICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRv
biBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKQEAgLTI5LDEwICsyNywxMSBAQAogICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCisK
IC8qIFRva2Vucy4gICovCiAjaWZuZGVmIFlZVE9LRU5UWVBFCiAjIGRlZmluZSBZWVRPS0VOVFlQ
RQpAQCAtMTM0LDEwOCArMTMzLDE0IEBACiAgICAgIFFVRVNUSU9OID0gMzUwCiAgICB9OwogI2Vu
ZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBJTlZBUklBTlQgMjU4Ci0jZGVmaW5lIEhJR0hf
UFJFQ0lTSU9OIDI1OQotI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIDI2MAotI2RlZmluZSBMT1df
UFJFQ0lTSU9OIDI2MQotI2RlZmluZSBQUkVDSVNJT04gMjYyCi0jZGVmaW5lIEFUVFJJQlVURSAy
NjMKLSNkZWZpbmUgQ09OU1RfUVVBTCAyNjQKLSNkZWZpbmUgQk9PTF9UWVBFIDI2NQotI2RlZmlu
ZSBGTE9BVF9UWVBFIDI2NgotI2RlZmluZSBJTlRfVFlQRSAyNjcKLSNkZWZpbmUgQlJFQUsgMjY4
Ci0jZGVmaW5lIENPTlRJTlVFIDI2OQotI2RlZmluZSBETyAyNzAKLSNkZWZpbmUgRUxTRSAyNzEK
LSNkZWZpbmUgRk9SIDI3MgotI2RlZmluZSBJRiAyNzMKLSNkZWZpbmUgRElTQ0FSRCAyNzQKLSNk
ZWZpbmUgUkVUVVJOIDI3NQotI2RlZmluZSBCVkVDMiAyNzYKLSNkZWZpbmUgQlZFQzMgMjc3Ci0j
ZGVmaW5lIEJWRUM0IDI3OAotI2RlZmluZSBJVkVDMiAyNzkKLSNkZWZpbmUgSVZFQzMgMjgwCi0j
ZGVmaW5lIElWRUM0IDI4MQotI2RlZmluZSBWRUMyIDI4MgotI2RlZmluZSBWRUMzIDI4MwotI2Rl
ZmluZSBWRUM0IDI4NAotI2RlZmluZSBNQVRSSVgyIDI4NQotI2RlZmluZSBNQVRSSVgzIDI4Ngot
I2RlZmluZSBNQVRSSVg0IDI4NwotI2RlZmluZSBJTl9RVUFMIDI4OAotI2RlZmluZSBPVVRfUVVB
TCAyODkKLSNkZWZpbmUgSU5PVVRfUVVBTCAyOTAKLSNkZWZpbmUgVU5JRk9STSAyOTEKLSNkZWZp
bmUgVkFSWUlORyAyOTIKLSNkZWZpbmUgU1RSVUNUIDI5MwotI2RlZmluZSBWT0lEX1RZUEUgMjk0
Ci0jZGVmaW5lIFdISUxFIDI5NQotI2RlZmluZSBTQU1QTEVSMkQgMjk2Ci0jZGVmaW5lIFNBTVBM
RVJDVUJFIDI5NwotI2RlZmluZSBTQU1QTEVSX0VYVEVSTkFMX09FUyAyOTgKLSNkZWZpbmUgU0FN
UExFUjJEUkVDVCAyOTkKLSNkZWZpbmUgSURFTlRJRklFUiAzMDAKLSNkZWZpbmUgVFlQRV9OQU1F
IDMwMQotI2RlZmluZSBGTE9BVENPTlNUQU5UIDMwMgotI2RlZmluZSBJTlRDT05TVEFOVCAzMDMK
LSNkZWZpbmUgQk9PTENPTlNUQU5UIDMwNAotI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzA1Ci0j
ZGVmaW5lIExFRlRfT1AgMzA2Ci0jZGVmaW5lIFJJR0hUX09QIDMwNwotI2RlZmluZSBJTkNfT1Ag
MzA4Ci0jZGVmaW5lIERFQ19PUCAzMDkKLSNkZWZpbmUgTEVfT1AgMzEwCi0jZGVmaW5lIEdFX09Q
IDMxMQotI2RlZmluZSBFUV9PUCAzMTIKLSNkZWZpbmUgTkVfT1AgMzEzCi0jZGVmaW5lIEFORF9P
UCAzMTQKLSNkZWZpbmUgT1JfT1AgMzE1Ci0jZGVmaW5lIFhPUl9PUCAzMTYKLSNkZWZpbmUgTVVM
X0FTU0lHTiAzMTcKLSNkZWZpbmUgRElWX0FTU0lHTiAzMTgKLSNkZWZpbmUgQUREX0FTU0lHTiAz
MTkKLSNkZWZpbmUgTU9EX0FTU0lHTiAzMjAKLSNkZWZpbmUgTEVGVF9BU1NJR04gMzIxCi0jZGVm
aW5lIFJJR0hUX0FTU0lHTiAzMjIKLSNkZWZpbmUgQU5EX0FTU0lHTiAzMjMKLSNkZWZpbmUgWE9S
X0FTU0lHTiAzMjQKLSNkZWZpbmUgT1JfQVNTSUdOIDMyNQotI2RlZmluZSBTVUJfQVNTSUdOIDMy
NgotI2RlZmluZSBMRUZUX1BBUkVOIDMyNwotI2RlZmluZSBSSUdIVF9QQVJFTiAzMjgKLSNkZWZp
bmUgTEVGVF9CUkFDS0VUIDMyOQotI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMzMAotI2RlZmluZSBM
RUZUX0JSQUNFIDMzMQotI2RlZmluZSBSSUdIVF9CUkFDRSAzMzIKLSNkZWZpbmUgRE9UIDMzMwot
I2RlZmluZSBDT01NQSAzMzQKLSNkZWZpbmUgQ09MT04gMzM1Ci0jZGVmaW5lIEVRVUFMIDMzNgot
I2RlZmluZSBTRU1JQ09MT04gMzM3Ci0jZGVmaW5lIEJBTkcgMzM4Ci0jZGVmaW5lIERBU0ggMzM5
Ci0jZGVmaW5lIFRJTERFIDM0MAotI2RlZmluZSBQTFVTIDM0MQotI2RlZmluZSBTVEFSIDM0Mgot
I2RlZmluZSBTTEFTSCAzNDMKLSNkZWZpbmUgUEVSQ0VOVCAzNDQKLSNkZWZpbmUgTEVGVF9BTkdM
RSAzNDUKLSNkZWZpbmUgUklHSFRfQU5HTEUgMzQ2Ci0jZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDcK
LSNkZWZpbmUgQ0FSRVQgMzQ4Ci0jZGVmaW5lIEFNUEVSU0FORCAzNDkKLSNkZWZpbmUgUVVFU1RJ
T04gMzUwCi0KIAogCiAKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQ
RV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0
IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0yNjUsMTQg
KzE3MCwxNSBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlzdCog
dHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE1Mjkgb2Yg
eWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQ
RV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsg
d2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBk
ZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgogCiAKIAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5kZXggNTQ0
MTU1Ny4uOTk1YTlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2ludGVybWVkaWF0ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9pbnRlcm1lZGlhdGUuaApAQCAtNDUyLDcgKzQ1Miw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQogCiAgICAgdm9p
ZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc1Vz
ZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKyAgICBib29sIGlzVXNlckRlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6
ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9CiAgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0
dXJuIG9wdGltaXplOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCmluZGV4IGExN2MzMTkuLjE5OTkwZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvYXRvbS5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHN0cmluZy5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNp
bmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zbGdsb2JhbHMuaCIKIApAQCAtMzA3LDcgKzMwOCw3IEBAIHN0cnVjdCBBdG9tVGFibGVfUmVj
IHsKICAgICBpbnQgc2l6ZTsKIH07CiAKLXN0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyAw
IH0gfTsKK3N0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyBOVUxMLCAwLCAwIH0sIHsgTlVM
TCwgMCwgMCwgMCB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZs
YXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29u
c3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBG
aW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAg
IGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBp
aTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmlu
dGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11
c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQg
Y29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIs
ICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxp
c2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVv
ZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBz
LCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVf
TUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIs
ICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIs
CisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29s
bGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmco
YXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9
CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRh
YmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUt
Pm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlp
LCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJs
ZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3Ry
KTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVz
PSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2gg
dGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRh
YmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdM
b2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUu
Y291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBh
dGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLmJmYTliNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikK
QEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2
YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJ
CQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJ
CWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0g
J1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBw
ICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0
IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRS
ZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUg
KGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1l
c3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lE
RU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9t
KSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9
IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAg
ICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9
IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0
b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3lt
Ym9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwg
aW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxv
YyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFj
cm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNy
b1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFs
ID0gezAsIDAuMCwgMCwgMH07CiAgICAgaW50IGF0b20gPSAwOwogCiAgICAgbWFjcm8uYm9keSA9
IE5ld1Rva2VuU3RyZWFtKG5hbWUsIG1hY3Jvcy0+cG9vbCk7CiAgICAgdmFsLnNjX2ludCA9IHZh
bHVlOwotICAgIHNwcmludGYodmFsLnN5bWJvbF9uYW1lLCAiJWQiLCB2YWx1ZSk7CisgICAgc25w
cmludGYodmFsLnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHZhbHVl
KTsKICAgICBSZWNvcmRUb2tlbihtYWNyby5ib2R5LCBDUFBfSU5UQ09OU1RBTlQsICZ2YWwpOwog
ICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBuYW1lKTsKICAgICBzeW1ib2wgPSBB
ZGRTeW1ib2woJmxvY2F0aW9uLCBtYWNyb3MsIGF0b20sIE1BQ1JPX1MpOwpAQCAtOTkxLDEzICs5
ODksMTMgQEAgaW50IE1hY3JvRXhwYW5kKGludCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
ICAgICBjb25zdCBjaGFyICptZXNzYWdlOwogCWlmIChhdG9tID09IF9fTElORV9fQXRvbSkgewog
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwotICAgICAgICBzcHJp
bnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAg
ICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwg
IiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNU
QU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBpZiAoYXRvbSA9
PSBfX0ZJTEVfX0F0b20pIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051
bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZh
bHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1B
WF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVu
Z2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5oCmluZGV4IGRiNGMxODQuLmU0OWNhNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
aApAQCAtNzMsNyArNzMsNyBAQCB2b2lkICBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciopOyAg
ICAgICAgIC8vIFN0b3JlIGNwcCBFcnIgTXNnIGludG8gU2guSW5mby5Mbwogdm9pZCAgQ1BQV2Fy
bmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpOyAvLyBQcmludHMgd2FybmluZyBtZXNzYWdl
cyBpbnRvIGluZm8gbG9nCiB2b2lkICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioqLCBpbnQgbnVt
VG9rZW5zKTsgIC8vICNwcmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5lci4KIHZvaWQgIFJlc2V0VFN0
cmluZyh2b2lkKTsgICAgICAgICAgICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2UgYXMgVFN0cmlu
Zy4KLXZvaWQgIENQUEVycm9yVG9JbmZvTG9nKGNoYXIqKTsgICAgICAgICAgICAgLy8gU3RpY2sg
YWxsIGNwcCBlcnJvcnMgaW50byBTaC5JbmZvLmxvZyAgIC4KK3ZvaWQgIENQUEVycm9yVG9JbmZv
TG9nKGNvbnN0IGNoYXIqKTsgICAgICAgLy8gU3RpY2sgYWxsIGNwcCBlcnJvcnMgaW50byBTaC5J
bmZvLmxvZyAgIC4KIHZvaWQgIFN0b3JlU3RyKGNoYXIqKTsgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFyc2UgQ29udGV4dC4KIHZvaWQgIFNldExpbmVOdW1i
ZXIoaW50KTsgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxpbmUgbnVtYmVyLiAgCiB2b2lkICBT
ZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgIC8vIFNldCBzdHJpbmcgbnVtYmVy
LiAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJhM2E1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuY3BwCkBAIC0w
LDAgKzEsMTY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvbGV4ZXJfZ2x1ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGds
b2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgorfQor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCIKKworY2xhc3MgRGlhZ25vc3RpY3MgOiBw
dWJsaWMgcHA6OkRpYWdub3N0aWNzCit7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHBy
aW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
CisgICAgeworICAgICAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIH0KK307
CisKK3N0cnVjdCBJbnB1dFNyY0xleGVyCit7CisgICAgSW5wdXRTcmMgYmFzZTsKKyAgICBwcDo6
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7Cit9OworCitz
dGF0aWMgYm9vbCBDb3B5U3ltYm9sTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgeXlzdHlw
ZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBpZiAobmFtZS5sZW5ndGgoKSA+IE1BWF9TWU1CT0xfTkFN
RV9MRU4pCisgICAgeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiQlVGRkVSIE9WRVJGTE9X
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3RyY3B5KHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSwgbmFtZS5jX3N0cigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IGludCBsZXgoSW5wdXRTcmMqIGluLCB5eXN0eXBlcHAqIHl5bHZhbHBwKQoreworICAgIElucHV0
U3JjTGV4ZXIqIHNyYyA9ICgoSW5wdXRTcmNMZXhlciAqKWluKTsKKworICAgIGludCByZXQgPSAw
OworICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICBzcmMtPmxleGVyLT5sZXgoJnRva2VuKTsKKyAg
ICBzd2l0Y2ggKHRva2VuLnR5cGUpCisgICAgeworICAgIGNhc2UgMDogIC8vIEVPRgorICAgICAg
ICBkZWxldGUgc3JjLT5sZXhlcjsKKyAgICAgICAgZGVsZXRlIHNyYy0+ZGlhZ25vc3RpY3M7Cisg
ICAgICAgIGZyZWUoc3JjKTsKKyAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAwOworICAgICAg
ICByZXQgPSBFT0Y7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpJREVOVElG
SUVSOgorICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkK
KyAgICAgICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgdG9rZW4udmFsdWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
ID0gQ1BQX0lERU5USUZJRVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpD
T05TVF9JTlQ6CisgICAgICAgIGlmIChDb3B5U3ltYm9sTmFtZSh0b2tlbi52YWx1ZSwgeXlsdmFs
cHApKQorICAgICAgICB7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYXRvaSh0b2tl
bi52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBDUFBfSU5UQ09OU1RB
TlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9GTE9BVDoKKyAg
ICAgICAgQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKTsKKyAgICAgICAgcmV0
ID0gQ1BQX0ZMT0FUQ09OU1RBTlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9JTkM6CisgICAgICAgIHJldCA9IENQUF9JTkNfT1A7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9ERUM6CisgICAgICAgIHJldCA9IENQUF9ERUNfT1A7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDoKKyAgICAgICAgcmV0ID0g
Q1BQX1JJR0hUX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6
CisgICAgICAgIHJldCA9IENQUF9MRV9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0dFOgorICAgICAgICByZXQgPSBDUFBfR0VfT1A7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUToKKyAgICAgICAgcmV0ID0gQ1BQX0VRX09QOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6CisgICAgICAgIHJldCA9IENQ
UF9ORV9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDoKKyAg
ICAgICAgcmV0ID0gQ1BQX0FORF9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX1hPUjoKKyAgICAgICAgcmV0ID0gQ1BQX1hPUl9PUDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOgorICAgICAgICByZXQgPSBDUFBfT1JfT1A7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfQUREX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX1NVQl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9TVUJfQVNTSUdOOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjoKKyAgICAgICAgcmV0ID0g
Q1BQX01VTF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9E
SVZfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfRElWX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9N
T0RfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVF9B
U1NJR046CisgICAgICAgIHJldCA9IENQUF9MRUZUX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX1JJ
R0hUX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORF9B
U1NJR046CisgICAgICAgIHJldCA9IENQUF9BTkRfQVNTSUdOOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX1hPUl9B
U1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUl9BU1NJR046
CisgICAgICAgIHJldCA9IENQUF9PUl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBTZXRMaW5lTnVtYmVyKHRva2VuLmxvY2F0
aW9uLmxpbmUpOworICAgIFNldFN0cmluZ051bWJlcih0b2tlbi5sb2NhdGlvbi5maWxlKTsKKyAg
ICByZXR1cm4gcmV0OworfQorCitJbnB1dFNyYyogTGV4ZXJJbnB1dFNyYyhpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzID0gbmV3IERpYWdub3N0aWNzOworICAgIHBwOjpUb2tlbml6
ZXIqIGxleGVyID0gbmV3IHBwOjpUb2tlbml6ZXIoZGlhZ25vc3RpY3MpOworICAgIGlmICghbGV4
ZXItPmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBs
ZXhlcjsKKyAgICAgICAgZGVsZXRlIGRpYWdub3N0aWNzOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBJbnB1dFNyY0xleGVyKiBpbiA9IChJbnB1dFNyY0xleGVyICopIG1hbGxvYyhz
aXplb2YoSW5wdXRTcmNMZXhlcikpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElucHV0U3Jj
TGV4ZXIpKTsKKyAgICBpbi0+YmFzZS5saW5lID0gMTsKKyAgICBpbi0+YmFzZS5zY2FuID0gbGV4
OworICAgIGluLT5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworICAgIGluLT5sZXhlciA9IGxl
eGVyOworCisgICAgcmV0dXJuICZpbi0+YmFzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxM2QzYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbGV4ZXJfZ2x1ZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9HTFVFX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9MRVhFUl9HTFVFX0hfCisKK3N0cnVjdCBJbnB1dFNyYzsKKworSW5wdXRTcmMq
IExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVY
RVJfR0xVRV9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNhZGIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBfX01FTU9S
WV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0eXBlZGVm
IHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5UG9vbCAq
bWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5o
IgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBu
YW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGgg
IkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0gIkdMXyIp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29u
c2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5maW5kKCJf
XyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRleHQoKQot
ICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91dHB1dChO
VUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxleGVyKCk7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhlcigpOwot
Ci0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBzbyB0aGF0
IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGluIHByb2Nl
c3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9rZW5WZWN0
b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAhPSBOVUxM
KSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1dCA9IG5l
dyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRwdXQ7Ci0g
ICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2UuCi0gICAg
Ym9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVzZXQoKTsK
LSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNybyhwcDo6
VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6
TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcq
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1l
dGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNl
bWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3JvKHR5cGUs
IG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3JvTmFtZVJl
c2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJv
ci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0RlZmluZWQo
bmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBtYWNyby5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5kZWZpbmVN
YWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRlcmF0b3Ig
aXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jvcy5lbmQo
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0
cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBtTWFjcm9z
LmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQgQ29udGV4
dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBtTWFjcm9z
LmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0gICAgZGVs
ZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5VTEw7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICBz
dHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElOVF9DT05T
VEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAgIG1NYWNy
b3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50
cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29u
dGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJNYWNyby5o
IgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBDb250ZXh0
Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQotICAgIGJv
b2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRva2VuVmVj
dG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7IH0KLSAg
ICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2VuVmVjdG9y
KiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1hY3JvKHBw
OjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBwcDo6TWFj
cm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAg
ICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAgIGJvb2wg
dW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBpc01hY3Jv
RGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6
OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29s
IGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBkZWZpbmVC
dWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgYm9v
bCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgotICAgIElu
cHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9TZXQgbU1h
Y3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEs
MzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKworI2luY2x1
ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRpYWdub3N0
aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9ETyhhbG9r
cCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50KGlkLCBs
b2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVy
aXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1Jf
RU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5JTkdfQkVH
SU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7CisKKyAg
ICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43Yzk0MjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3Mu
aApAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
QUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitz
dHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFn
bm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3Ig
Zm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MK
K3sKKyAgcHVibGljOgorICAgIGVudW0gSUQKKyAgICB7CisgICAgICAgIEVSUk9SX0JFR0lOLAor
ICAgICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01FTU9SWSwKKyAgICAgICAg
SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVSLAorICAgICAgICBJTlZB
TElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9J
Tl9DT01NRU5ULAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURF
RklORUQsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUs
CisgICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VORCwKKworICAgICAgICBXQVJOSU5HX0JFR0lO
LAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBXQVJOSU5HX0VORAorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOworCisgICAgdm9pZCByZXBvcnQoSUQg
aWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsK
KworICBwcm90ZWN0ZWQ6CisgICAgZW51bSBTZXZlcml0eQorICAgIHsKKyAgICAgICAgRVJST1Is
CisgICAgICAgIFdBUk5JTkcKKyAgICB9OworICAgIFNldmVyaXR5IHNldmVyaXR5KElEIGlkKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2E5MWUxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
SGFuZGxlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVj
dGl2ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
RElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgaGFuZGxp
bmcgZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90aWZ5
IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBE
ZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxpbmcgdGhlbSBpbiBh
biBhcHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisgICAgLy8gSGFuZGxl
IHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pID0g
MDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdm
MDYxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsNDc5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorCisjaW5j
bHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5o
IgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKK25hbWVzcGFj
ZSB7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7
CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZigiaWYiKTsKK3N0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUVsc2UoImVsc2UiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlRWxpZigiZWxpZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVF
bmRpZigiZW5kaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXJyb3Io
ImVycm9yIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJh
Z21hIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0
ZW5zaW9uIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVZlcnNpb24oInZl
cnNpb24iKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGluZSIp
OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xf
IiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0
aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJs
aWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERlZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyKSA6
IG1MZXhlcihsZXhlcikgeyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsZXgo
VG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBt
ZS4KKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgIH0KKworICBwcml2YXRlOgorICAg
IExleGVyKiBtTGV4ZXI7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihU
b2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERp
cmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2Vu
aXplciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25v
c3RpY3MpLAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAg
eworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5
cGUgPT0gJyMnKSBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgfSB3aGlsZSAodG9rZW4tPnR5
cGUgPT0gJ1xuJyk7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT50eXBlID09ICcjJyk7CisKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURF
TlRJRklFUikKKyAgICB7CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZURl
ZmluZSkKKyAgICAgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVVbmRlZikKKyAgICAgICAgICAgIHBhcnNlVW5kZWYo
dG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmKQor
ICAgICAgICAgICAgcGFyc2VJZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCisgICAgICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpCisgICAgICAg
ICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlRWxzZSkKKyAgICAgICAgICAgIHBhcnNlRWxzZSh0b2tlbik7CisgICAgICAg
IGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxpZikKKyAgICAgICAgICAgIHBh
cnNlRWxpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0
aXZlRW5kaWYpCisgICAgICAgICAgICBwYXJzZUVuZGlmKHRva2VuKTsKKyAgICAgICAgZWxzZSBp
ZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKKyAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVBy
YWdtYSkKKyAgICAgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCisgICAgICAgICAgICBwYXJzZUV4
dGVuc2lvbih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0
aXZlVmVyc2lvbikKKyAgICAgICAgICAgIHBhcnNlVmVyc2lvbih0b2tlbik7CisgICAgICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgICAgIHBhcnNl
TGluZSh0b2tlbik7CisgICAgfQorCisgICAgaWYgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAo
dG9rZW4tPnR5cGUgIT0gMCkpCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7
CisKKyAgICB3aGlsZSAodG9rZW4tPnR5cGUgIT0gJ1xuJykKKyAgICB7CisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSA9PSAwKSB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVEZWZpbmUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChp
c01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNy
by5uYW1lID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisg
ICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4K
KyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAg
ICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0IGNvbW1hLgorICAgICAgICB9
IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAh
PSAnKScpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpM
QVNUKSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB0b2tlbiBsb2NhdGlvbiBiZWNhdXNl
IGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50CisgICAgICAgIC8vIGxpc3QuIFJlc2V0
dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tlbjo6ZXF1YWxzKCkgdG8KKyAgICAg
ICAgLy8gY29tcGFyZSBtYWNyb3MuCisgICAgICAgIHRva2VuLT5sb2NhdGlvbiA9IFNvdXJjZUxv
Y2F0aW9uKCk7CisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2soKnRva2VuKTsK
KyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBm
b3IgbWFjcm8gcmVkZWZpbml0aW9uLgorICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbU1hY3JvU2V0LT5maW5kKG1hY3JvLm5hbWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1Nl
dC0+ZW5kKCkgJiYgIW1hY3JvLmVxdWFscyhpdGVyLT5zZWNvbmQpKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5FRCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWNyby5uYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
TWFjcm9TZXQtPmluc2VydChzdGQ6Om1ha2VfcGFpcihtYWNyby5uYW1lLCBtYWNybykpOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpOworCisgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQt
PmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQor
ICAgICAgICBtTWFjcm9TZXQtPmVyYXNlKGl0ZXIpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRva2VuKQor
eworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlSWYpOworCisgICAgRGVmaW5lZFBhcnNlciBkZWZpbmVkUGFyc2Vy
KG1Ub2tlbml6ZXIpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBh
cnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhw
cmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4
cGFuZGVyLmxleCh0b2tlbik7CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgaWYgKCFl
eHByZXNzaW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbikpCisgICAgeworICAgICAg
ICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGRpYWdub3N0aWMuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBXZSBoYXZlIGEgdmFsaWQgI2lmIGRpcmVjdGl2ZS4gSGFuZGxlIGl0Lgor
ICAgIC8vIFRPRE8oYWxva3ApOiBQdXNoIGNvbmRpdGlvbmFsIGJsb2NrLgorfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhh
bG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVJZmRlZik7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2tw
KTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlm
bmRlZik7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IElt
cGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKTsK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50
IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpOworICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVu
ZGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgor
ICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKTsKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJy
b3IpOworCisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3RyZWFtIDw8ICp0b2tlbjsKKyAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgbURpcmVjdGl2ZUhhbmRs
ZXItPmhhbmRsZUVycm9yKHRva2VuLT5sb2NhdGlvbiwgc3RyZWFtLnN0cigpKTsKK30KKworLy8g
UGFyc2VzIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0uCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVByYWdtYSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgewor
ICAgICAgICBQUkFHTUFfTkFNRSwKKyAgICAgICAgTEVGVF9QQVJFTiwKKyAgICAgICAgUFJBR01B
X1ZBTFVFLAorICAgICAgICBSSUdIVF9QQVJFTgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0g
dHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKKyAgICBpbnQgc3RhdGUgPSBQUkFH
TUFfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tl
bi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsK
KyAgICAgICAgc3dpdGNoKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBSQUdN
QV9OQU1FOgorICAgICAgICAgICAgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIHZh
bGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoKKyAgICAgICAgICAgIHZh
bGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcoJyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKKyAgICAgICAgICAgIHZhbHVlID0gdG9rZW4t
PnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9r
ZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBSSUdI
VF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcp
Jyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFsaWQgPSB2YWxpZCAmJiAoKHN0
YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJhZ21hLgorICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAgIC8vIFdpdGhvdXQgdmFsdWUu
CisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVOICsgMSkpOyAgLy8g
V2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90aWZ5IGZvciBlbXB0eSBwcmFn
bWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlUHJhZ21hKHRva2Vu
LT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAg
ICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJT1IKKyAg
ICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVo
YXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRF
TlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9CRUhBVklP
UjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5U
SUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpV
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0
ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0
aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZp
b3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tl
bikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9uKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFZFUlNJT05fTlVNQkVSCisgICAgfTsKKwor
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICBpbnQgc3Rh
dGUgPSBWRVJTSU9OX05VTUJFUjsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
d2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxB
U1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9OVU1C
RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24gPSBhdG9pKHRva2VuLT52YWx1
ZS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIH0KKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsgMSkpCisg
ICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAg
ICBpZiAodmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRv
a2VuLT5sb2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUxpbmUoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUu
CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSk7CisgICAgTWFjcm9F
eHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNz
KTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDlmZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmgKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAK
K3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOworY2xhc3Mg
VG9rZW5pemVyOworCitjbGFzcyBEaXJlY3RpdmVQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAg
cHVibGljOgorICAgIERpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhh
bmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiog
dG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERp
cmVjdGl2ZVBhcnNlcik7CisKKyAgICB2b2lkIHBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZURlZmluZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VVbmRl
ZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJZihUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VJZmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJZm5kZWYoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxzZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFy
c2VFbGlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVuZGlmKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUVycm9yKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVByYWdt
YShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VMaW5l
KFRva2VuKiB0b2tlbik7CisKKyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7CisgICAgTWFjcm9T
ZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworICAgIERpcmVj
dGl2ZUhhbmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzOTUwNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4
cHJlc3Npb25QYXJzZXIuY3BwCkBAIC0wLDAgKzEsMTkxNSBAQAorLyogQSBCaXNvbiBwYXJzZXIs
IG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRp
b24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgCisgICAgICBDb3B5cmln
aHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2Fy
ZQorICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2Yg
dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5
b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNl
ciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVy
ZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1h
eSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hp
Y2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91
dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg
ICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2Vy
IHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5n
IHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwg
c3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9p
ZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25l
IGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJl
IGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUg
ZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBs
aWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFN
RSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2Rl
ZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05f
VkVSU0lPTiAiMi40LjIiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxF
VE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJF
IDEKKworLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBw
YXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworLyogVXNpbmcgbG9jYXRpb25zLiAgKi8K
KyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5k
IGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlwYXJzZSAgICAgICAgIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICAgICAgICAgIHBwbGV4CisjZGVmaW5lIHl5ZXJyb3IgICAgICAgICBwcGVy
cm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICAgICAg
ICAgIHBwY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAgICAgcHBkZWJ1ZworI2RlZmluZSB5eW5l
cnJzICAgICAgICAgcHBuZXJycworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBk
ZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0
by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRl
ZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNl
ci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgi
CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9rZW4qIHRva2Vu
OworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorCisKK3N0YXRpYyBpbnQg
eXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9y
KENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKworCisvKiBFbmFibGlu
ZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRp
ZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVS
Uk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZF
UkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyog
RW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBk
ZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRl
ZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5z
IGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2Vycwor
ICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBD
T05TVF9JTlQgPSAyNTgsCisgICAgIE9QX09SID0gMjU5LAorICAgICBPUF9BTkQgPSAyNjAsCisg
ICAgIE9QX05FID0gMjYxLAorICAgICBPUF9FUSA9IDI2MiwKKyAgICAgT1BfR0UgPSAyNjMsCisg
ICAgIE9QX0xFID0gMjY0LAorICAgICBPUF9SSUdIVCA9IDI2NSwKKyAgICAgT1BfTEVGVCA9IDI2
NiwKKyAgICAgVU5BUlkgPSAyNjcKKyAgIH07CisjZW5kaWYKKworCisKKyNpZiAhIGRlZmluZWQg
WVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBpbnQgWVlT
VFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZ
U1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNU
WVBFX0lTX0RFQ0xBUkVEIDEKKyNlbmRpZgorCisKKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9m
IHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9y
dAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5
dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVf
aW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVk
ZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBF
X1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZ
WVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlw
ZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBF
X18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXpl
X3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1Qg
JiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3Rk
ZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJ
WkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBl
bmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisK
KyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwor
IyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlz
b24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAg
ZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1
bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQg
bGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkK
KyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElkZW50
aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNv
bmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vsc2UK
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZ
WUlEIChpbnQgeXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlp
OworI2VuZGlmCit7CisgIHJldHVybiB5eWk7Cit9CisjZW5kaWYKKworI2lmICEgZGVmaW5lZCB5
eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxs
b2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisKKyMgaWZk
ZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRl
ZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisj
ICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRlIDxhbGxv
Y2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYgZGVmaW5l
ZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxpZiBkZWZp
bmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVsc2UKKyMg
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NB
X0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICAgIGRlZmluZSBfU1RE
TElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMg
ZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5
IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsg
LyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFn
ZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBwYWdlIHNpemUgY2Fu
IGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAg
aW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFs
bGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQg
dGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJ
TVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRpZgorIyBlbHNlCisj
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZ
WUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBkZWZpbmUgWVlTVEFD
S19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQg
X19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisgICAgICAgJiYgISAoKGRlZmlu
ZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAgICYmIChkZWZpbmVkIFlZRlJF
RSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgZGVmaW5l
IF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMg
ICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRl
ZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZ
RlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAm
JiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQg
Kik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5k
aWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZF
UkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVm
aW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZ
WVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25l
ZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5dHlwZV9p
bnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OworCisvKiBUaGUgc2l6
ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5l
eHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFs
bG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBo
b2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZ
WVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBz
aXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENv
cHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5h
dGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZp
bmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20s
IENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNp
emVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291
bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAor
CSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0g
PSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBl
bmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24g
dG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RB
Q0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhl
IHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNr
LiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBu
ZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9j
LCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJ
WkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0
YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJ
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
K3sKKyAgICAgICAwLCAgICA3NCwgICAgNzQsICAgIDgxLCAgICA4MiwgICAgODUsICAgIDg4LCAg
ICA5MSwgICAgOTQsICAgIDk3LAorICAgICAxMDAsICAgMTAzLCAgIDEwNiwgICAxMDksICAgMTEy
LCAgIDExNSwgICAxMTgsICAgMTIxLCAgIDEyNCwgICAxMjcsCisgICAgIDE0MCwgICAxNTMsICAg
MTU2LCAgIDE1OSwgICAxNjIsICAgMTY1LCAgIDE2OAorfTsKKyNlbmRpZgorCisjaWYgWVlERUJV
RyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorLyogWVlUTkFNRVtTWU1CT0wt
TlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCisgICBGaXJzdCwg
dGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMu
ICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Cit7CisgICIkZW5kIiwg
ImVycm9yIiwgIiR1bmRlZmluZWQiLCAiQ09OU1RfSU5UIiwgIk9QX09SIiwgIk9QX0FORCIsICIn
fCciLAorICAiJ14nIiwgIicmJyIsICJPUF9ORSIsICJPUF9FUSIsICInPCciLCAiJz4nIiwgIk9Q
X0dFIiwgIk9QX0xFIiwKKyAgIk9QX1JJR0hUIiwgIk9QX0xFRlQiLCAiJysnIiwgIictJyIsICIn
KiciLCAiJy8nIiwgIiclJyIsICJVTkFSWSIsICInISciLAorICAiJ34nIiwgIicoJyIsICInKSci
LCAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9uIiwgMAorfTsKKyNlbmRpZgorCisjIGlm
ZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcs
ICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAgMjYxLAorICAgICAy
NjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgIDQzLCAgICA0
NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAgMjY3LCAgICAzMywgICAxMjYsICAgIDQwLCAg
ICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3lt
Ym9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjkKK307CisKKy8qIFlZUjJb
WVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1
bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KK3sKKyAgICAg
ICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAg
IDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKworLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0g
RGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCisgICBTVEFURS1OVU0gd2hlbiBZ
WVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1l
YW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0LCAgICAyMiwgICAg
MjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxNCwgICAgMTMsICAg
IDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIxLAorICAgICAgMjAs
ICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAgICAgLTEsICAgICA3LCAgICAgOAorfTsK
KworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlv
biBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEK
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgICAgNDYsICAgLTEx
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEs
CisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywgICAtMTEsICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAgMTMwLCAgIDE0MywgICAxNTQsCisgICAg
IDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgIDM3LCAgICAzNywgICAgMzEsICAg
IDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsKKworLyogWVlQR09UT1tOVEVSTS1OVU1d
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQoreworICAgICAtMTEs
ICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0
IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0
b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0
aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisgICBJZiBZWVRB
QkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQoreworICAgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisg
ICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIs
ICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgICAgNSwgICAg
IDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAg
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKK307CisKK3N0YXRpYyBjb25zdCB5eXR5cGVf
aW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAg
ICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAg
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgMywKKyAgICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAs
ICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwg
bnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAg
ICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI4LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgIDAsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisg
ICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOQorfTsKKworI2RlZmluZSB5eWVycm9rCQko
eXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisj
ZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQ
VAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2Rl
ZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0
IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBl
YXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0ND
LgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBj
YW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0
aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5F
V1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4g
ICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwK
KyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAn
cworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0
aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtl
IGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2ls
bCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgorCisjZGVmaW5l
IFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJBQ0tVUChUb2tl
biwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYg
eXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7
CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eXRva2VuID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwK
KyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJ
CQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAg
IH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKworCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNk
ZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5U
IHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBD
VVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMg
c3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCisKKyNkZWZpbmUgWVlSSFNMT0Mo
UmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisjIGRlZmluZSBZWUxM
T0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAg
IGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJI
U0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0g
WVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVudCkubGFzdF9saW5l
ICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJlbnQpLmxhc3Rf
Y29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJCQkJCQkJXAor
ICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5l
ICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5s
YXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFz
dF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAor
CX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKworCisvKiBZWV9MT0NB
VElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMg
bWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93
CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlv
bnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgZGVmaW5l
ZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZpbmUgWVlf
TE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVk
LSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1u
LAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisjIGVsc2UK
KyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5k
aWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdo
dCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5
bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAo
Jnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVl
c3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUg
PHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZ
WUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlc
CitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJ
CQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRs
ZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAo
eXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9IHdoaWxl
IChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENv
bnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmlu
dCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRw
dXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7
CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVwKQorICAg
IHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5
cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0s
ICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dp
dGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1i
b2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQK
K3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9p
ZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkK
KyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVz
ICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
Im50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmlu
dCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklOVEYgKHl5
b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJp
bnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGlu
Y2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRv
bSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJp
bnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5
dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFj
ayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAgIHsK
KyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
ICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisj
IGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAor
ICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRv
cCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBp
cyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwg
aW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVk
dWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOwor
ICAgIGludCB5eXJ1bGU7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQg
eXlucmhzID0geXlyMlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5
eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBz
dGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8p
OworICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5
eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAg
JCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNb
eXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlu
cmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRleHQpOworICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUp
CQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50
ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256
ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNv
IHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7
CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmlu
ZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5l
IFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1
bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFs
IHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisj
IGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGlt
dW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhl
IGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBt
YWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisg
ICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAg
ZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICov
CisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlm
CisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYg
ZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJs
ZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9U
Cit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5
eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlT
SVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisg
ICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMg
aWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJ
TkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQor
IyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBv
ZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hh
ciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0
cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAq
eXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5
eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBj
b250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMg
aWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIg
YWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNo
ZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGlj
IGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcK
KyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIg
dGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5h
bWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0
aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0
YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIp
Cit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7
CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0
Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAh
PSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5
eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXly
ZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5
eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VM
VCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIg
d2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGll
ZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQg
aXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVy
IG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCBy
ZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRv
LiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNp
emUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hh
ciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlw
YWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlM
QVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZ
WVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIg
KDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwor
ICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOwor
ICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBj
aGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGlu
dCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0
cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAg
Ki8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9y
ICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5n
ICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAg
ICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3Rl
ZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBj
b25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFy
IGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1
bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVS
Uk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0g
MSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAg
IC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4
ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5
biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5k
IHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwor
ICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDog
WVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5
dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhw
ZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4
KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkg
IHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkg
ICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtz
aXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAg
IHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUg
KyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAo
eXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0g
eXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0K
KworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5
eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6
ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93
KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkg
IC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBz
cGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRy
YW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIg
b2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsK
KwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5
cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlw
ICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJ
ICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0K
KyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9T
RSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
QVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlT
VFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5
ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNo
YXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVT
RSAoY29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7Cisg
IFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsK
KworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7Cisg
ICAgfQorfQorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMu
ICAqLworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNl
CitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisj
aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAo
Q29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRp
ZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkK
KyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJTRV9Q
QVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250ZXh0
OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5
eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4g
ICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNv
IGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBO
dW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAg
Ki8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0
b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzog
cmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tz
IHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0byBy
ZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4g
ICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVfaW50
MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgICAg
WVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZU0laRV9UIHl5c3Rh
Y2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFkIHRv
a2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQg
eXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1
ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlT
VFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9y
IG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1Zlsx
MjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9
IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2
c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9u
IHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8g
c3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5dG9r
ZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMgPSB5eXZzYTsKKyAgeXlzdGFja3NpemUg
PSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxu
IikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAw
OworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwor
CisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50
IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0
aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVu
dHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9
IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQ
dXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisg
eXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZh
bHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28g
cHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisK
KyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFj
a3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2Vk
IHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpF
X1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAg
IHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2Ug
Y29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFs
IG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5
dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJl
c3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1c2UgaW4gdGhh
dCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRpdGlvbmFsIGFy
b3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRl
ZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93IChZWV8oIm1l
bW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3Ap
LAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlzdGFj
a3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNl
IC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3Vy
IG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJZ290
byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlN
QVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAg
ICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRy
ID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5
c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZ
U1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5
dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNzMSAh
PSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2Vu
ZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0g
MTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWduZWQg
bG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUg
LSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVyciwg
IkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3RhdGUgPT0gWVlG
SU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0t
LgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBh
cHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisg
ICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZl
IG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQg
cmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAv
KiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBh
IHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisg
ICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Cisg
ICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAg
ICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9Q
UklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9
CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMg
dG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4g
ICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwg
eXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5
dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gMCB8
fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXlu
OworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0
ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBzdGF0dXMu
ICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAvKiBTaGlm
dCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmci
LCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVk
IHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOworICAq
Kyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlk
ZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5
biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24u
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5
biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0g
eXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3
aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlz
IGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5v
dCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5
IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdD
QyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5
dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3
aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisgICAgeworICAgICAgICAqKGNv
bnRleHQtPnJlc3VsdCkgPSAoeXl2c3BbKDEpIC0gKDEpXSk7CisgICAgICAgIFlZQUNDRVBUOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMp
IC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0
cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICUgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0g
MCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAg
c3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAg
ICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNw
WygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAt
ICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMild
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9
IHl5dmFsOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4g
IERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0
YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBi
eS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAt
IFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZ
WUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFi
bGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRP
S0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAv
KiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVy
cm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7Cisj
aWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yIikpOworI2Vsc2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9l
cnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYg
eXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZU0laRV9U
IHl5YWxsb2MgPSAyICogeXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYg
eXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2MgPSBZWVNU
QUNLX0FMTE9DX01BWElNVU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkgICAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9D
ICh5eWFsbG9jKTsKKwkgICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxv
YzsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXltc2dfYWxs
b2MgPSBzaXplb2YgeXltc2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5eXNpemUg
JiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50YXhfZXJy
b3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yIChjb250ZXh0LCB5eW1z
Zyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvciIpKTsKKwkgICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7CisJICB9CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0
YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byBy
ZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwor
CisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlm
IGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFC
T1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRp
bmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZ
RU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVh
ZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3Rv
IHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBi
eSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBH
Q0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhl
IGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBj
b2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOwor
CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlv
biB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4p
OworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3Rh
dGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIx
IC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4g
c2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAg
eXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7
CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxl
W3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAg
ICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBl
cnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisK
KyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVd
LCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUg
PSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKwor
ICAqKyt5eXZzcCA9IHl5bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICov
CisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxz
cCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NF
UFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXlyZXR1cm47CisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJvcnRsYWIgLS0gWVlB
Qk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJldHVybjsKKworI2lm
ICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAt
LSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJy
b3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOwor
ICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFy
ICE9IFlZRU1QVFkpCisgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2th
aGVhZCIsCisJCSB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKyAgLyogRG8gbm90IHJlY2xh
aW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0
aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZ
X1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAg
IHsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5
c3NwXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lm
bmRlZiB5eW92ZXJmbG93CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAo
eXlzcyk7CisjZW5kaWYKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNn
YnVmKQorICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZ
WUlEIGlzIHVzZWQuICAqLworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisK
K2ludCB5eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBl
ID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0
Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6
CisgICAgICAgICpsdmFscCA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICB0
eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FO
RDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5
cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBP
UF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOwor
ICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUg
PSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAg
Y2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7
IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAn
Kyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFr
OworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5
cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAg
ICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAn
KCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2Vu
IGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0
LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJy
b3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1l
c3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBs
ZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAg
ICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNl
cjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRl
eHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0
LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0
LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAg
c3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0
ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDkyZDA1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsx
LDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJ
T05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sK
KworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xh
c3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihM
ZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhl
cjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODQzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLnkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29y
IGV4cHJlc3Npb24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8g
UlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVw
cm9jZXNzb3IgZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5P
VCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRl
ICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNz
dHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAg
cHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAg
IHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNl
CislfQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgorJXBhcnNlLXBhcmFt
IHtDb250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKworJXsK
K3N0YXRpYyBpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMg
dm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQor
CisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5ECislbGVmdCAnfCcK
KyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxlZnQgJzwnICc+JyBP
UF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQg
JyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAgIDogZXhwcmVzc2lv
biB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9ICQxOworICAgICAgICBZWUFDQ0VQVDsK
KyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lOVAorICAgIHwgZXhwcmVzc2lv
biBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAmJiAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJicgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX05FIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PSAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4nIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPCcgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX1JJ
R0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8IGV4
cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAt
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJScgZXhwcmVzc2lvbiB7Cisg
ICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJl
YW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5j
X3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcv
JyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8
PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElW
SVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICogJDM7Cisg
ICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICEg
JDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAk
JCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAg
ICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkg
eworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygnIGV4cHJlc3Npb24gJyknIHsK
KyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2ludCB5eWxleChpbnQqIGx2YWxw
LCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tl
biogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgICpsdmFscCA9IGF0
b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICB0eXBlID0gQ09OU1RfSU5UOworICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IE9QX0FORDsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBPUF9ORTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBPUF9FUTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUg
PSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAg
Y2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7
IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAn
LSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFr
OworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5
cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAg
ICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAn
fic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9
CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBp
cyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsK
KworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNz
aW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25v
c3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2Vu
LCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFn
bm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAg
IGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAg
ICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgewor
ICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01F
TU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZh
dWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCmluZGV4IDY5NGMzYmQuLmMz
ZGU5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKQEAgLTYsMTU5ICs2LDQ5IEBA
CiAKICNpbmNsdWRlICJJbnB1dC5oIgogCi0jaW5jbHVkZSA8Y3N0ZGlvPgotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2Vy
dD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgcHAKIHsKIAotSW5wdXQ6OklucHV0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSkKLSAgICA6IG1Db3VudChjb3VudCksCi0gICAgICBtU3RyaW5nKHN0cmluZyksCi0gICAgICBt
TGVuZ3RoKGxlbmd0aCksCi0gICAgICBtSW5kZXgoLTEpLAotICAgICAgbVNpemUoMCksCi0gICAg
ICBtRXJyb3Ioa0Vycm9yTm9uZSksCi0gICAgICBtU3RhdGUoa1N0YXRlSW5pdGlhbCkKK0lucHV0
OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDApCiB7Ci0gICAgQVNTRVJUKG1Db3VudCA+
PSAwKTsKLSAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKIH0KIAotYm9vbCBJbnB1dDo6ZW9mKCkg
Y29uc3QKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQoY291bnQpLAorICAgIG1TdHJpbmco
c3RyaW5nKQogewotICAgIEFTU0VSVChtSW5kZXggPD0gbUNvdW50KTsKLSAgICByZXR1cm4gbUlu
ZGV4ID09IG1Db3VudDsKKyAgICBhc3NlcnQobUNvdW50ID49IDApOworICAgIG1MZW5ndGgucmVz
ZXJ2ZShtQ291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvdW50OyArK2kpCisgICAg
eworICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ldIDogLTE7CisgICAgICAgIG1M
ZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4obVN0cmluZ1tpXSkgOiBsZW4pOworICAg
IH0KIH0KIAotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpCitpbnQgSW5w
dXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKIHsKLSAgICBpbnQgbnJlYWQgPSAwOwot
ICAgIGludCBzdGFydEluZGV4ID0gbUluZGV4OwotICAgIC8vIEtlZXAgcmVhZGluZyB1bnRpbCB0
aGUgYnVmZmVyIGlzIGZ1bGwgb3IgdGhlIGN1cnJlbnQgc3RyaW5nIGlzIGV4aGF1c3RlZC4KLSAg
ICB3aGlsZSAoKG1JbmRleCA9PSBzdGFydEluZGV4KSAmJiAobnJlYWQgPCBidWZTaXplKSkKKyAg
ICBpbnQgblJlYWQgPSAwOworICAgIHdoaWxlICgoblJlYWQgPCBtYXhTaXplKSAmJiAobVJlYWRM
b2Muc0luZGV4IDwgbUNvdW50KSkKICAgICB7Ci0gICAgICAgIGludCBjID0gZ2V0Q2hhcigpOwot
ICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUg
PT0ga1N0YXRlQmxvY2tDb21tZW50KQotICAgICAgICAgICAgICAgIG1FcnJvciA9IGtFcnJvclVu
ZXhwZWN0ZWRFT0Y7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHN3
aXRjaCAobVN0YXRlKQorICAgICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4
XSAtIG1SZWFkTG9jLmNJbmRleDsKKyAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNp
emUpOworICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4
XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAgICAgIG5SZWFkICs9IHNpemU7CisgICAg
ICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOworCisgICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5n
IGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KKyAgICAgICAgaWYgKG1S
ZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCiAgICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIGtTdGF0ZUluaXRpYWw6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUG90ZW50aWFsbHkgYSBjb21tZW50Lgot
ICAgICAgICAgICAgICAgIHN3aXRjaCAocGVla0NoYXIoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhcigp
OyAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlTGluZUNv
bW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSAnKic6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAnKicuCi0gICAg
ICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUJsb2NrQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICAvLyBOb3QgYSBjb21tZW50LgotICAgICAgICAgICAgICAgICAgICBidWZbbnJlYWQr
K10gPSBjOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZbbnJl
YWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICBjYXNlIGtTdGF0ZUxpbmVDb21tZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAg
ICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlQmxvY2tDb21tZW50OgotICAgICAgICAg
ICAgaWYgKGMgPT0gJyonICYmIChwZWVrQ2hhcigpID09ICcvJykpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgIC8vIEVhdCAnLycuCi0gICAgICAgICAgICAgICAg
YnVmW25yZWFkKytdID0gJyAnOyAgLy8gUmVwbGFjZSBjb21tZW50IHdpdGggd2hpdGVzcGFjZS4K
LSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTGlu
ZSBicmVha3MgYXJlIG5ldmVyIHNraXBwZWQuCi0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytd
ID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OworICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4
ID0gMDsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBucmVhZDsKLX0KLQotaW50IElu
cHV0OjpnZXRDaGFyKCkKLXsKLSAgICBpZiAoZW9mKCkpIHJldHVybiBFT0Y7Ci0KLSAgICBjb25z
dCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGMgPSBzdHJbbVNpemUrK107
Ci0KLSAgICAvLyBTd2l0Y2ggdG8gbmV4dCBzdHJpbmcgaWYgdGhlIGN1cnJlbnQgb25lIGlzIGZ1
bGx5IHJlYWQuCi0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5kZXgpOwotICAgIC8v
IFdlIG5ldmVyIHJlYWQgZnJvbSBlbXB0eSBzdHJpbmcuCi0gICAgQVNTRVJUKGxlbmd0aCAhPSAw
KTsKLSAgICBpZiAoKChsZW5ndGggPCAwKSAmJiAoc3RyW21TaXplXSA9PSAnXDAnKSkgfHwKLSAg
ICAgICAgKChsZW5ndGggPiAwKSAmJiAobVNpemUgPT0gbGVuZ3RoKSkpCi0gICAgICAgIHN3aXRj
aFRvTmV4dFN0cmluZygpOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0KLWludCBJbnB1dDo6cGVla0No
YXIoKQotewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KLSAgICBpbnQg
aW5kZXggPSBtSW5kZXg7Ci0gICAgaW50IHNpemUgPSBtU2l6ZTsKLSAgICBpbnQgYyA9IGdldENo
YXIoKTsKLQotICAgIC8vIFJlc3RvcmUgcmVhZCBwb3NpdGlvbi4KLSAgICBtSW5kZXggPSBpbmRl
eDsKLSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLXZvaWQgSW5wdXQ6OnN3
aXRjaFRvTmV4dFN0cmluZygpCi17Ci0gICAgQVNTRVJUKG1JbmRleCA8IG1Db3VudCk7Ci0KLSAg
ICBtU2l6ZSA9IDA7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgICsrbUluZGV4OwotICAgIH0gd2hp
bGUgKCFlb2YoKSAmJiBpc1N0cmluZ0VtcHR5KG1JbmRleCkpOwotfQotCi1ib29sIElucHV0Ojpp
c1N0cmluZ0VtcHR5KGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwot
Ci0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBsZW5ndGgg
PSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICByZXR1cm4gKGxlbmd0aCA9PSAwKSB8fCAoKGxl
bmd0aCA8IDApICYmIChzdHJbMF0gPT0gJ1wwJykpOwotfQotCi1pbnQgSW5wdXQ6OnN0cmluZ0xl
bmd0aChpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLSAgICByZXR1
cm4gbUxlbmd0aCA/IG1MZW5ndGhbaW5kZXhdIDogLTE7CisgICAgcmV0dXJuIG5SZWFkOwogfQog
CiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCmluZGV4IDVhMWI1
ZDEuLmRhYzczNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaApAQCAtNyw2NiArNyw0MCBA
QAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KICNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAKKyNpbmNsdWRlIDx2ZWN0b3I+CisKIG5hbWVzcGFj
ZSBwcAogewogCi0vLyBSZWFkcyB0aGUgZ2l2ZW4gc2V0IG9mIHN0cmluZ3MgaW50byBpbnB1dCBi
dWZmZXIuCi0vLyBTdHJpcHMgY29tbWVudHMuCisvLyBIb2xkcyBhbmQgcmVhZHMgaW5wdXQgZm9y
IExleGVyLgogY2xhc3MgSW5wdXQKIHsKICAgcHVibGljOgorICAgIElucHV0KCk7CiAgICAgSW5w
dXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKIAotICAgIGVudW0gRXJyb3IKLSAgICB7Ci0gICAgICAgIGtFcnJvck5vbmUsCi0gICAg
ICAgIGtFcnJvclVuZXhwZWN0ZWRFT0YKLSAgICB9OwotICAgIEVycm9yIGVycm9yKCkgY29uc3Qg
eyByZXR1cm4gbUVycm9yOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBzdHJpbmcg
Y3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IHN0cmluZ0luZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbUluZGV4OyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIEVPRiBoYXMgcmVhY2hlZC4K
LSAgICBib29sIGVvZigpIGNvbnN0OworICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1D
b3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1MZW5ndGhbaW5kZXhdOyB9CiAKLSAgICAvLyBSZWFkcyB1cCB0byBidWZTaXplIGNoYXJh
Y3RlcnMgaW50byBidWYuCi0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
cmVhZC4KLSAgICAvLyBJdCByZXBsYWNlcyBlYWNoIGNvbW1lbnQgYnkgYSB3aGl0ZXNwYWNlLiBJ
dCByZWFkcyBvbmx5IG9uZSBzdHJpbmcKLSAgICAvLyBhdCBhIHRpbWUgc28gdGhhdCB0aGUgbGV4
ZXIgaGFzIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGUgc3RyaW5nIG51bWJlcgotICAgIC8vIGZv
ciBtZWFuaW5nZnVsIGRpYWdub3N0aWMgbWVzc2FnZXMuCi0gICAgaW50IHJlYWQoY2hhciogYnVm
LCBpbnQgYnVmU2l6ZSk7CisgICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7CiAK
LXByaXZhdGU6Ci0gICAgZW51bSBTdGF0ZQorICAgIHN0cnVjdCBMb2NhdGlvbgogICAgIHsKLSAg
ICAgICAga1N0YXRlSW5pdGlhbCwKLSAgICAgICAga1N0YXRlTGluZUNvbW1lbnQsCi0gICAgICAg
IGtTdGF0ZUJsb2NrQ29tbWVudAotICAgIH07CisgICAgICAgIGludCBzSW5kZXg7ICAvLyBTdHJp
bmcgaW5kZXg7CisgICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4LgogCi0gICAgaW50
IGdldENoYXIoKTsKLSAgICBpbnQgcGVla0NoYXIoKTsKLSAgICAvLyBTd2l0Y2hlcyBpbnB1dCBi
dWZmZXIgdG8gdGhlIG5leHQgbm9uLWVtcHR5IHN0cmluZy4KLSAgICAvLyBUaGlzIGlzIGNhbGxl
ZCB3aGVuIHRoZSBjdXJyZW50IHN0cmluZyBpcyBmdWxseSByZWFkLgotICAgIHZvaWQgc3dpdGNo
VG9OZXh0U3RyaW5nKCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcg
aXMgZW1wdHkuCi0gICAgYm9vbCBpc1N0cmluZ0VtcHR5KGludCBpbmRleCk7Ci0gICAgLy8gUmV0
dXJuIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIHN0cmluZy4KLSAgICAvLyBSZXR1cm5zIGEgbmVn
YXRpdmUgdmFsdWUgZm9yIG51bGwtdGVybWluYXRlZCBzdHJpbmdzLgotICAgIGludCBzdHJpbmdM
ZW5ndGgoaW50IGluZGV4KTsKKyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRleCgwKSwgY0luZGV4
KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2MoKSBjb25zdCB7IHJl
dHVybiBtUmVhZExvYzsgfQogCisgIHByaXZhdGU6CiAgICAgLy8gSW5wdXQuCiAgICAgaW50IG1D
b3VudDsKICAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsKLSAgICBjb25zdCBpbnQqIG1M
ZW5ndGg7Ci0KLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IG1JbmRleDsg
ICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IG1T
aXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNjYW5uZWQuCisgICAgc3RkOjp2ZWN0
b3I8aW50PiBtTGVuZ3RoOwogCi0gICAgLy8gQ3VycmVudCBlcnJvciBhbmQgc3RhdGUuCi0gICAg
RXJyb3IgbUVycm9yOwotICAgIFN0YXRlIG1TdGF0ZTsKKyAgICBMb2NhdGlvbiBtUmVhZExvYzsK
IH07CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjYzZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJM
ZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5MZXhlcigpCit7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4NWNlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKQEAg
LTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCitu
YW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgoreworICBwdWJs
aWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4q
IHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApp
bmRleCBmY2NjYTk2Li5iMmUzMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCkBA
IC02LDM5ICs2LDE3IEBACiAKICNpbmNsdWRlICJNYWNyby5oIgogCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKIAogbmFt
ZXNwYWNlIHBwCiB7CiAKLU1hY3JvOjpNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgICAgc3Rk
OjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0g
ICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykKLSAgICA6IG1UeXBlKHR5cGUp
LAotICAgICAgbU5hbWUobmFtZSksCi0gICAgICBtUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSwKLSAg
ICAgIG1SZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKQotewotfQotCi1NYWNybzo6fk1hY3JvKCkK
K2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgZGVs
ZXRlIG1OYW1lOwotCi0gICAgaWYgKG1QYXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAgc3RkOjpm
b3JfZWFjaChtUGFyYW1ldGVycy0+YmVnaW4oKSwgbVBhcmFtZXRlcnMtPmVuZCgpLCBEZWxldGUo
KSk7Ci0gICAgICAgIGRlbGV0ZSBtUGFyYW1ldGVyczsKLSAgICB9Ci0KLSAgICBpZiAobVJlcGxh
Y2VtZW50cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVJlcGxhY2VtZW50cy0+YmVn
aW4oKSwgbVJlcGxhY2VtZW50cy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1S
ZXBsYWNlbWVudHM7Ci0gICAgfQorICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgor
ICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgorICAgICAgICAgICAocGFyYW1ldGVy
cyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAgICAocmVwbGFjZW1lbnRzID09IG90
aGVyLnJlcGxhY2VtZW50cyk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmgKaW5kZXggZTI0MzMwNi4uNjNiMzA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyby5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcs
NDUgKzcsMzIgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCiAjZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogCisjaW5jbHVkZSA8bWFwPgogI2lu
Y2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KIG5hbWVzcGFjZSBwcAogewogCi1jbGFz
cyBNYWNybworc3RydWN0IFRva2VuOworCitzdHJ1Y3QgTWFjcm8KIHsKLSAgcHVibGljOgogICAg
IGVudW0gVHlwZQogICAgIHsKICAgICAgICAga1R5cGVPYmosCiAgICAgICAgIGtUeXBlRnVuYwog
ICAgIH07CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9pbnRlciBwYXJhbWV0ZXJzLgot
ICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAg
ICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICBUb2tlblZlY3RvciogcmVw
bGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcmVwbGFj
ZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsgfQotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQotICAgIFR5cGUgbVR5cGU7Ci0g
ICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9yKiBtUGFyYW1ldGVyczsKLSAg
ICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29sIGVxdWFscyhjb25zdCBNYWNy
byYgb3RoZXIpIGNvbnN0OworCisgICAgVHlwZSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7
CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcmFtZXRlcnM7CisgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgTWFjcm8+IE1hY3JvU2V0OwogCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8g
Q09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvRXhwYW5kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBm
MTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApAQCAtMCwwICsxLDI4IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKworbmFtZXNwYWNl
IHBwCit7CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhl
cihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlh
Z25vc3RpY3MpCit7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tlbikK
K3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIG1MZXhlci0+bGV4KHRv
a2VuKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvRXhwYW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmU5
ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRF
Ul9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKwor
I2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGls
cy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIE1h
Y3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIE1hY3JvRXhwYW5k
ZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0
ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWFjcm9FeHBhbmRlcik7CisKKyAg
ICBMZXhlciogbUxleGVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3Rp
Y3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKaW5kZXggZWY0OWU1Ny4uMTJjZmFhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCkBAIC02LDQ3ICs2LDI5IEBA
CiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1
ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewog
Ci1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVMTCkKK1ByZXByb2Nl
c3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAg
ICBtVG9rZW5pemVyKGRpYWdub3N0aWNzKSwKKyAgICBtRGlyZWN0aXZlUGFyc2VyKCZtVG9rZW5p
emVyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlciksCisgICAgbU1h
Y3JvRXhwYW5kZXIoJm1EaXJlY3RpdmVQYXJzZXIsICZtTWFjcm9TZXQsIGRpYWdub3N0aWNzKQog
ewogfQogCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IoKQorYm9vbCBQcmVwcm9jZXNzb3I6
OmluaXQoaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10p
CiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OwotfQotCi1ib29sIFByZXByb2Nlc3Nvcjo6aW5pdCgp
Ci17Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29udGV4dDsKLSAgICByZXR1cm4gbUNvbnRleHQtPmlu
aXQoKTsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCi17Ci0gICAgQVNTRVJUKChj
b3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8fCAo
c3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXNldCgpOwot
Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgJm1U
b2tlbnMpOworICAgIHJldHVybiBtVG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KTsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjps
ZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBt
VG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOworICAgIG1NYWNy
b0V4cGFuZGVyLmxleCh0b2tlbik7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAppbmRleCA4ODViYjcwLi5kZGJlMTJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9QcmVwcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApAQCAtNywzNCArNyw0MiBAQAog
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJz
ZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNp
bmNsdWRlICJUb2tlbml6ZXIuaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIENvbnRleHQ7
CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CiAKIGNsYXNzIFBy
ZXByb2Nlc3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7Ci0gICAgflByZXBy
b2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERp
cmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogCi0gICAgYm9vbCBpbml0KCk7Cisg
ICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdHJp
bmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkg
b2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJh
eSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJp
bmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgLy8gSWYgbGVuZ3RoIGlz
IGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8gYW4gYXJyYXkgY29udGFpbmlu
ZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBl
bGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50IGluIHRoZSBsZW5ndGggYXJy
YXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHN0
cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRlIHRoYXQgdGhlIHN0cmluZwor
ICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKIAotICAgIGJvb2wg
cHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtVG9r
ZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1U
b2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCiAgIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CisgICAgUFBfRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKLSAgICAvLyBSZXNldCB0byBp
bml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBDb250ZXh0KiBtQ29u
dGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0cHV0LgorICAgIE1hY3JvU2V0
IG1NYWNyb1NldDsKKyAgICBUb2tlbml6ZXIgbVRva2VuaXplcjsKKyAgICBEaXJlY3RpdmVQYXJz
ZXIgbURpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1NYWNyb0V4cGFuZGVyOwog
fTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgyNjEzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApAQCAtMCwwICsxLDM4IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKworbmFt
ZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbgoreworICAgIFNvdXJjZUxvY2F0
aW9uKCkgOiBmaWxlKDApLCBsaW5lKDApIHsgfQorICAgIFNvdXJjZUxvY2F0aW9uKGludCBmLCBp
bnQgbCkgOiBmaWxlKGYpLCBsaW5lKGwpIHsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgU291
cmNlTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChmaWxlID09
IG90aGVyLmZpbGUpICYmIChsaW5lID09IG90aGVyLmxpbmUpOworICAgIH0KKworICAgIGludCBm
aWxlOworICAgIGludCBsaW5lOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJl
dHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICBy
ZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmNwcAppbmRleCBhMmU3NTljLi44OTNkMDcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uY3BwCkBAIC02LDUwICs2LDQ4IEBACiAKICNpbmNsdWRlICJUb2tlbi5oIgog
Ci0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgY29uc3QgaW50IGtMb2NhdGlvbkxp
bmVTaXplID0gMTY7ICAvLyBpbiBiaXRzLgotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5l
TWFzayA9ICgxIDw8IGtMb2NhdGlvbkxpbmVTaXplKSAtIDE7Ci0KIG5hbWVzcGFjZSBwcAogewog
Ci1Ub2tlbjo6TG9jYXRpb24gVG9rZW46OmVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmls
ZSkKK3ZvaWQgVG9rZW46OnJlc2V0KCkKIHsKLSAgICByZXR1cm4gKGZpbGUgPDwga0xvY2F0aW9u
TGluZVNpemUpIHwgKGxpbmUgJiBrTG9jYXRpb25MaW5lTWFzayk7CisgICAgdHlwZSA9IDA7Cisg
ICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICB2YWx1
ZS5jbGVhcigpOwogfQogCi12b2lkIFRva2VuOjpkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2Ms
IGludCogbGluZSwgaW50KiBmaWxlKQorYm9vbCBUb2tlbjo6ZXF1YWxzKGNvbnN0IFRva2VuJiBv
dGhlcikgY29uc3QKIHsKLSAgICBpZiAoZmlsZSkgKmZpbGUgPSBsb2MgPj4ga0xvY2F0aW9uTGlu
ZVNpemU7Ci0gICAgaWYgKGxpbmUpICpsaW5lID0gbG9jICYga0xvY2F0aW9uTGluZU1hc2s7Cisg
ICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChmbGFncyA9PSBv
dGhlci5mbGFncykgJiYKKyAgICAgICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAm
JgorICAgICAgICAgICAodmFsdWUgPT0gb3RoZXIudmFsdWUpOwogfQogCi1Ub2tlbjo6VG9rZW4o
TG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpCi0gICAgOiBt
TG9jYXRpb24obG9jYXRpb24pLAotICAgICAgbVR5cGUodHlwZSksCi0gICAgICBtVmFsdWUodmFs
dWUpCit2b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpCiB7CisgICAgaWYg
KHN0YXJ0KQorICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9MSU5FOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7CiB9CiAKLVRva2VuOjp+VG9rZW4oKSB7
Ci0gICAgZGVsZXRlIG1WYWx1ZTsKK3ZvaWQgVG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29s
IHNwYWNlKQoreworICAgIGlmIChzcGFjZSkKKyAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdf
U1BBQ0U7CisgICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7CiB9
CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9r
ZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNh
c2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2Ug
SURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRv
a2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVh
ZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFs
dWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1l
c3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCmluZGV4IDRmNWExMmIuLjAyZmQwYzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApAQCAtNyw0MiArNyw4MyBAQAogI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgor
c3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAg
ICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAg
ICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50
KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIExBU1QgPSAwLCAgLy8gRU9G
LgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlv
biBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7
CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAKLSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
VmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAorICAgICAgICBDT05TVF9GTE9BVCwKIAotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbik7CisgICAgICAgIE9Q
X0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdI
VCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAg
ICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9P
UiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAg
ICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9E
X0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lH
TiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAg
ICAgT1BfT1JfQVNTSUdOCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAgeworICAgICAgICBB
VF9TVEFSVF9PRl9MSU5FICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJTkdfU1BBQ0UgPSAx
IDw8IDEKKyAgICB9OwogCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsK
LSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygw
KSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYg
b3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0
IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNw
YWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFU
X1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBz
dGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFn
cyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRIYXNMZWFkaW5nU3Bh
Y2UoYm9vbCBzcGFjZSk7CisKKyAgICBpbnQgdHlwZTsKKyAgICBpbnQgZmxhZ3M7CisgICAgU291
cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CiB9OwogCi10eXBl
ZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVmIFRva2VuVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1
YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9rZW4mIGxocywg
Y29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KIAog
ZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qg
VG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJiNDI5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzMzUgQEAKKyNsaW5lIDE2ICIuL1Rv
a2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRl
ZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisKKworI2xpbmUgMTMgIi4v
VG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8q
IEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9T
Q0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhf
TUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lm
IFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYK
KworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXIt
c3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwor
CisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRf
SAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4u
IE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1RE
Q19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5
cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5o
LAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBl
cy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElN
SVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50
OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYg
aW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0
eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQz
Ml90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNo
b3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2Vu
ZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5k
ZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRp
ZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMy
NzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAg
ICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZp
bmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01B
WAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRl
ZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykK
KyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAg
ICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVgg
ICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5l
IFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIg
c3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNU
CisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19f
IHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmlu
ZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlm
CS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNv
bnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQg
dXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEg
cG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisg
KiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIg
aXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQg
dW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZ
WV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFu
IG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2Rl
ZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNl
bmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZh
cnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICov
CisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisj
ZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5n
X3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVi
dWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBU
aGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRv
IGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNz
CisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3Rh
cnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRv
IGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4g
dG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJp
bGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisj
ZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUg
b2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAo
WVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmlu
ZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUg
cHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9D
SEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlf
QlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3Rh
dGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0
ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAg
KChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZ
X1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NU
QVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNl
bmRpZgorCisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1Rf
RU5EX09GX0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgI2RlZmlu
ZSBZWV9MRVNTX0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJu
IiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmlu
ZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5n
IHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAor
ICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVf
QURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8g
XAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5
Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVf
dDsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUg
WVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlG
SUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVy
ICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVm
ZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGlu
ZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZf
c2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5v
dCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsK
KworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3Jl
YXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxk
IGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZl
cjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsg
aWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3
YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3
ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWlu
dCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBi
ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwg
YmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJ
aW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291
bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwor
ICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdl
IHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisK
KwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZp
bmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRo
ZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1
ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4n
dCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAor
CSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVz
ZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5
IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgcHBy
ZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAq
IGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZ
WV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZl
ciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVm
ZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUiLgorICoKKyAq
IFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNkZWZpbmUgWVlf
Q1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
XSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2FtZSBhcyBwcmV2
aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNr
IGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwg
dXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBwcHJlc3RhcnQg
KEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9zd2l0Y2hf
dG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6
ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZ
WV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcHVzaF9idWZm
ZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworc3Rh
dGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0
YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0
YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9TVEFURSBw
cF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVz
ICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2
b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqcHBy
ZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBm
cmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZm
ZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRl
cmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAg
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0
X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAg
ICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8K
KworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKwor
I2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dl
dF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBt
c2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQg
cGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5n
IGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJ
T04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5
X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3Ag
PSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JV
TEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5v
dCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5
LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsK
KwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAgICAgIDcsICAgMzMsICAg
MzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDksCisgICAgICAgIDks
ICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisg
ICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIs
ICAgMjMsCisgICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAg
IDksICAgMTEsICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgs
ICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAg
IDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAgMTAsICAgMTEsICAgIDAs
ICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAg
MTAsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1
Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAgICA5LAorICAg
ICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAg
IDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5
LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAg
IDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAorICAgICAgICA5LCAgICAx
LCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAg
ICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYsICAgIDksICAgIDksICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsg
ICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAg
ICA1LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAx
LCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5
XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAgMjYsICAxNTgsICAxNTks
ICAxNTAsICAxNTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIsICAgMjMsICAxNTksICAx
MTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAgNDYsICAgMzYsICAxMDAs
ICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQsCisgICAgICAgNjUsICAg
NzMsICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksCisgICAg
ICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMsICAgMzIsICAgNTYsICAg
ODMsCisgICAgICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAxNTksICAxNTksICAgMTks
ICAgIDAsICAxNTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAsICAxNTksICAxNTksICAg
OTgsICAgIDAsICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAgNTIsICAgOTAsICAgODAs
ICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAsICAxMjMsICAxNTksICAx
NDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0
LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAg
ICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAg
IDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAg
IDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAg
IDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUw
LCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAg
IDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisK
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisg
ICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQs
ICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAg
MjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcs
ICAgMjksICAgMzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzksICAgNTksICAgMzEsICAg
NjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAgNjEsICAgMzcsICAgNDUs
ICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYsCisgICAgICAgNDgsICAg
NDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAgNTAsICAgNTIsCisgICAg
ICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEsICAgODEsICAgODEsICAg
NTAsCisgICAgICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgs
ICAgNjYsICAgNTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcsICAgNjcsICAgNTAsICAg
NjUsICAgNzEsICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIs
ICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4MywgICA4MywgICA1MCwg
ICA1MCwgICA1MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3
NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAg
ICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAz
OCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4Miwg
ICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAz
NCwgICAzMywgICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwg
ICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAg
ICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4
LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAg
IDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIy
LCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAg
IDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5
LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAg
IDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3
LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAg
IDUwLCAgIDUwLAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAg
NTEsICAgNzksICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcs
ICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjksICAgNjksICAgODAsICAg
ODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisgICAgICAgMTIsICAgNzIs
ICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAgIDksICAgODYsICAgODYs
CisgICAgICAgODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgsICAgODgsICAgIDUsICAg
ODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlz
IHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3Nl
ZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2Rl
ZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01P
UkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9y
IEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8g
MjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tl
bml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIK
KwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJh
Y2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNk
ZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+bGlu
ZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VTRVJf
QUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXll
eHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAorICAg
ICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5n
dGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2Nhbkxv
Yy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisgICAg
ICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+bGlu
ZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQs
IG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6
ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQorCisjZGVmaW5lIFlZ
X0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGly
ZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAg
ICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAg
WVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUg
YXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8K
KyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
dG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVy
X3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RB
VEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hh
ciB5eV9ob2xkX2NoYXI7CisgICAgaW50IHl5X25fY2hhcnM7CisgICAgaW50IHl5bGVuZ19yOwor
ICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0
OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0
X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5eV9z
dGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwor
ICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9fcjsK
KyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAgaW50
IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICogeXls
dmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3RydWN0
IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQg
WVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9u
IDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAgICMg
ICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgcHBsZXhfaW5pdCAoeXlz
Y2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1
c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRv
IGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nh
bm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3Zv
aWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lk
IHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUg
KnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfb3V0ICAoRklM
RSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGVuZyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCitpbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZ
U1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9s
dmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAg
ICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorICAg
ICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworICAgIAorLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBv
dmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisj
aWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50
IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorZXh0ZXJuIGludCBwcHdyYXAg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiB5eXRleHRf
cHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVO
CitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlz
Y2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitz
dGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5kaWYK
KworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lm
bmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2Vu
ZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFu
ZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0
cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93
IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcs
IDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAi
YnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1
cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBV
VChidWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJaW50IG47
IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0Yygg
eXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikg
YzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJ
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0g
XAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVh
ZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwK
KwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBc
CisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisK
KyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBp
cyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEg
JzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBj
b21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLwor
I2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxM
CisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9u
IHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZ
X1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4g
Ki8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5
eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMg
c2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQg
ZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBj
YW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVm
aW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgcHBsZXggXAorICAgICAgICAgICAg
ICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2Fu
X3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNMIGludCBwcGxleCBcCisgICAgICAgICAg
ICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1
dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVu
ZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2Rl
ZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVu
ZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJy
ZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04K
KworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsu
CisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3Rh
dGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0
OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFt
OworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkK
KwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VT
RVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlf
c3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJ
CXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisK
KwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQlwcF9jcmVh
dGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQlwcF9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3Bz
IHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55
eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9j
aF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5
X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9t
YXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1ND
X1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQor
CQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3
aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3Vy
cmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJ
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3Rh
dGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5k
X2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZ
X0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9u
bHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAv
KiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sg
dXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwor
CQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9T
RVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNvbW1lbnQgKi8KKy8qIExpbmUgYnJlYWtzIGFy
ZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisvKiBUaGUgY29tbWVudCBpcyByZXBs
YWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IEJF
R0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZ
X0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSA1OgorLyog
cnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgKyt5eWxpbmVubzsgfQor
CVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+bGVhZGlu
Z1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKwlZWV9CUkVBSworY2FzZSA3
OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBs
aW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICBpZiAoeXlleHRyYS0+bGluZVN0
YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgICAgIHJl
dHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywg
eXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
Ky8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nh
c2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykp
OworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZ
WV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9C
UkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitj
YXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAx
ODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVB
SworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRl
eHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZ
WV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVB
SworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAor
eworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0
dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hB
UkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0
aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykpOworfQorCVlZX0JSRUFLCitjYXNlIFlZX1NU
QVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgoreworICAgIC8v
IFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8g
U2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBp
bnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUg
ZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAg
ICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAg
ICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxs
b2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7Cisg
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291
cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZ
X0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5j
bHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQg
PSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBl
ZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7
CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MK
KwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkg
KiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogcHBs
ZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBi
ZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlz
IHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmly
c3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2ls
bCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9j
aGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQor
CisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUg
cG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9j
X2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUg
TlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9u
IEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdp
dGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1
Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlw
ZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIg
KyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93
IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRu
J3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0
CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAq
IHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2Fu
dCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1
biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxf
dHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJ
CXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19i
dWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5
X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKwor
CQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJewor
CQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJ
CQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAq
IHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2Ug
Y2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwK
KwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwg
dGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBz
dGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgor
CQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290
byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJ
CX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgor
CQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJ
CXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRj
aDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0K
KwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nh
bm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWct
Pnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJ
fQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0
YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAv
KiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9r
ZW4gKi8KK30gLyogZW5kIG9mIHBwbGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRy
eSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2Vu
dGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglF
T0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIgY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIg
KnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUs
IGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZB
VEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2Yg
YnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9m
aWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBz
byB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4
dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5n
bGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVP
Ri4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxz
ZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmly
c3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFU
Q0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21v
dmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlm
b3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNv
dXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBp
dCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4g
RU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWct
Pnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQlpbnQgbnVtX3RvX3JlYWQgPQorCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJv
b20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5h
bWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9D
VVJSRU5UX0JVRkZFUjsKKworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAo
eXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJf
YnVmZmVyICkKKwkJCQl7CisJCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwor
CisJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlf
YnVmX3NpemUgLyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJ
CWItPnl5X2NoX2J1ZiA9IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBF
T0IgY2hhcnMuICovCisJCQkJCXBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3Qg
Z3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJ
CWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBl
cnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2Nf
YnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3Jl
YWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJl
cl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JV
Rl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFk
IGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVf
dCkgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAg
KQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJ
cmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nh
bm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9N
QVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJ
CQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwg
PSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9j
aGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3
ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJz
ICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7
CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIo
KSIgKTsKKwl9CisKKwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWct
Pnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0
X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVy
biByZXRfdmFsOworfQorCisvKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRl
IGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNo
YXIgKnl5X2NwOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCisJZm9y
ICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5
X2NfYnVmX3A7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlf
Y3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5
eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
ID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDg0ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwor
fQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRo
ZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlf
TlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZh
ciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIgY2hh
ciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAx
OworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3Vy
cmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDg0ICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRf
c3RhdGUgPT0gODMpOworCisJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0
aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGlu
dCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJ
Knl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9j
X2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBu
b3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRo
aXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICog
dmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4K
KwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEg
TlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBu
ZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWct
Pnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNU
X01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAq
IHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0
aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJ
CQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBt
YXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNU
X01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJ
CS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9G
SUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVy
biBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlu
cHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNl
bmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9w
OwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJ
LyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2Nf
YnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8K
KworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisg
KiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBy
ZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCBw
cHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
KwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAg
ICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCX0KKwor
CXBwX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7
CisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8g
YSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBp
bnB1dCBidWZmZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
LworICAgIHZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1
ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUg
YWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJ
CXBwcG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZm
ZXIpOworICAgICAqLworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7
CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93
IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAocHB3cmFwKCkpIHBy
b2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBp
cyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFk
IGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mID0gMTsKK30KKworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlpbiA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWct
Pnl5X2NfYnVmX3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBi
dWZmZXIgc3RhdGUuCisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJh
bSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQs
IHVzZSBAYyBZWV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZ
X0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0g
KFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUg
KSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6
ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIg
dGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQt
b2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBh
bGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlmICggISBiLT55eV9jaF9i
dWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVh
dGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXBwX2luaXRf
YnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJv
eSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0
ZV9idWZmZXIoKQorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
KyAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZ
WV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8K
KwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlm
ICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYg
LHl5c2Nhbm5lciApOworCisJcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworfQorCisv
KiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlv
biBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwK
KyAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3Rh
dGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxl
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXBw
X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7
CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBi
dWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQg
ZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJ
biB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4u
CisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55
eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKwor
ICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87
Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBz
Y2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3Rh
dGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9mbHVzaF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYg
KCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5
cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJ
ICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBj
YXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5
X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlp
ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBU
aGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlv
biB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0g
bmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9
PSBOVUxMKQorCQlyZXR1cm47CisKKwlwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsK
KworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8K
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRp
b24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9j
X2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5
X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2Us
IHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
KworCS8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
aWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCisg
KiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwb3Bf
YnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICghWVlfQ1VSUkVOVF9C
VUZGRVIpCisJCXJldHVybjsKKworCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
LHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlpZiAoeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7
CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9
CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3Vh
cmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWludCBudW1fdG9f
YWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFs
bG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0
aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVh
ZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNh
bGwuCisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9z
dGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYworCQkJCQkJCQkobnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nh
bm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsK
KwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+
PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBi
dWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sg
PSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9i
dWZmZXJfc3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZm
ZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
cHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xv
dHMuKi8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoq
IFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNl
ci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0
ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFj
dGVyIGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBA
cmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNp
emUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJ
aWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJ
CS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJu
IDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+
eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICov
CisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5
X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKKworCXBwX3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1
cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0
cmluZy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNv
cHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRv
IHNjYW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVy
biB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5
b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1
c2UKKyAqICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIAorCXJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikg
LHl5c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2Nh
biBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBi
dWZmZXIgdG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBi
dWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0
ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBj
aGFyICogeXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuOworCWludCBp
OworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChj
aGFyICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKwor
CWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVz
W2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOworCisJYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIp
OworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5f
Ynl0ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFu
ZCB3ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwli
LT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOworfQorCisjaWZuZGVmIFlZX0VY
SVRfRkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2
b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0
KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29y
a3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNz
KG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRl
eHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAg
WVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5
Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19t
YWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7
IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQg
ZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNlci1kZWZp
bmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUgY3VycmVu
dCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCitpbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1u
IG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitp
bnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICByZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9pbiAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQg
dGhlIG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tl
bi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBn
ZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsKK30K
KworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVmaW5l
ZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBw
YXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nh
bm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lk
IHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0IHRo
ZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9saW5lbm8gKGlu
dCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxp
bmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAg
IGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJw
cHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAor
ICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29s
dW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBp
ZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JV
RkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNvbHVt
bl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2Nh
cmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFk
YWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
IEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHBwc2V0X2luIChGSUxFICogIGlu
X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9CisK
K3ZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgcHBz
ZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eV9m
bGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFs
IGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQ
RSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgcHBzZXRfbGxvYyAo
WVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8KKwor
LyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBp
dHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vz
bid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mgd2h5
IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBv
dXIgbWFjcm9zLgorICovCisKK2ludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8g
PSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xvYmFs
cyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwg
KTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0g
RU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBm
b3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihz
dHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rp
b25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24gb2Yg
dGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRo
YXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFs
bG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhp
cyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICogVGhl
IHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFi
bGUgdG8gcHBhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHBwbGV4
X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95
eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisKKyAg
ICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAgIGlm
IChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3Qp
IHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7CisJ
CisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAw
eDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6
ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2Rl
ZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFs
cyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2Ft
ZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4K
KyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Cisg
ICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAwOwor
ICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAw
OworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJ
TklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5
eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAg
IC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFy
ZSBjYWxsZWQgYnkKKyAgICAgKiBwcGxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsK
K30KKworLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVu
dHJhbnQgc2Nhbm5lcnMuICovCitpbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVs
ZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQlwcF9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gTlVMTDsKKwkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJLyog
RGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFj
ayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBE
ZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHBwZnJlZSh5eWct
Pnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQg
aW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHBwbGV4
KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRf
Z2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChy
ZWVudHJhbnQgb25seSkuICovCisgICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7
CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVy
bmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMg
dm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7
IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9O
RUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsg
c1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqcHBhbGxv
YyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAodm9p
ZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0IHRv
IChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1l
bnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICog
dGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRl
cgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25t
ZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFy
Z3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJ
ICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQor
Cit2b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlmcmVl
KCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICov
Cit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK25hbWVzcGFjZSBwcCB7
CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFu
ZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKwor
VG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCiti
b29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNl
OworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisK
KyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAg
cmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRv
a2VuKQoreworICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1ZSwmdG9rZW4tPmxv
Y2F0aW9uLG1IYW5kbGUpOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQu
bGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4n
OworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2Up
OworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29sIFRva2VuaXpl
cjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiBwcGxleF9p
bml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRv
a2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisg
ICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRs
ZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTQwNmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDUzIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUgIklucHV0Lmgi
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6IHB1YmxpYyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7CisgICAgICAgIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsKKyAgICAgICAg
Ly8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxvY2F0aW9uIHNo
b3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6Om1SZWFkTG9j
IGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlmIHRleHQgaXMg
YnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAgICBJbnB1dDo6
TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsKKyAgICAgICAg
Ym9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworICAgIHZp
cnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIpOworICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsK
KyAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7CisKKyAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nh
bm5lciBoYW5kbGUuCisgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCit9
OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOSVpFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTQ3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubApAQCAtMCwwICsxLDMxOSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMg
ZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vz
c29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3Ig
R3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4
OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBm
aWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQh
Cit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGlj
cy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
K3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2Vk
IHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmlu
ZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAg
ICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNl
OyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGls
ZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+
c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBp
bnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5M
b2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5M
b2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAx
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVm
aW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRy
YS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFwIG5v
dW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBi
aXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlwZT0i
cHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxufFxy
fFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1IgIFtd
Wzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVsw
LTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNUQU5U
ICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQT05F
TlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQgICh7
RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5lIGNv
bW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAgIC8q
IExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAgLyog
VGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7IEJF
R0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENPTU1F
TlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXlleHRy
YS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7Cisg
ICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBk
aXJlY3RpdmVzLgorICAgIGlmICh5eWV4dHJhLT5saW5lU3RhcnQpIHsKKyAgICAgICAgeXlsdmFs
LT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICAgICAgcmV0dXJuIHl5dGV4dFswXTsKKyAgICB9
IGVsc2UgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsK
KyAgICB9Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJTUFM
X0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0geworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpD
T05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NP
TlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAvKiBB
bnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEg
bnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5k
IGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2EtekEt
WjAtOS5dKikgeworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0
aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBw
OjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKworIisrIiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsK
K30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKyI8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyIm
JiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOworfQorInx8IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09S
OworfQorIis9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lH
TjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorIi89IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJ
R047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9B
U1NJR047Cit9CisiPj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
TkRfQVNTSUdOOworfQorIl49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisifD0iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
T1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRPUn0geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5
dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXll
eHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQorCit7TkVXTElORX0geworICAgICsreXlsaW5l
bm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisK
Ky4geworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJ
TlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpT
b3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKworPCo+PDxFT0Y+
PiB7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVP
Ri4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAg
cHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0
aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0
ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAh
PSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlm
IHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlu
cHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRl
eCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAg
fQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+bGluZSA9IHl5bGlu
ZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5U
KQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsK
K30KKworJSUKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9z
dGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAg
IGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBp
ZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJp
bmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9p
ZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSB5eWxl
eCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKKworICAgIHRva2Vu
LT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGlu
ZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5n
U3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2Ug
PSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAo
KG1IYW5kbGUgPT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQor
eworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4
X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gK
aW5kZXggNWIzMmY3MS4uZTljNzBiMSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dl
bmVyYXRlX3BhcnNlci5zaApAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jhc2gKLSMgQ29weXJp
Z2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAKLSMgR2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0gcHBfbGV4LmNwcCwg
cHBfdGFiLmgsIGFuZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBvbmVudHMg
b2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlucHV0X2ZpbGU9JHNj
cmlwdF9kaXIvJDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3BwCitpbnB1
dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCiBmbGV4
IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxl
CiB9CiAKIHJ1bl9iaXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkKLW91dHB1
dF9oZWFkZXI9JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIv
JDFfdGFiLmNwcAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRlZmluZXM9
JG91dHB1dF9oZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK2lucHV0
X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29u
IC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlu
cHV0X2ZpbGUKIH0KIAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMgR2VuZXJhdGUgcHJl
cHJvY2Vzc29yCi1ydW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxleCBUb2tlbml6ZXIu
bCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25Q
YXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjI3Y2EwNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAg
QEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBz
cGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29m
dCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5t
aWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZ
IFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwot
Ci0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBi
eSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5o
IgotCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXls
bG9jLT5maXJzdF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmly
c3RfY29sdW1uID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVU
KGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0
KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05h
bWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91
bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQgYmlzb24t
YnJpZGdlIGJpc29uLWxvY2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlvbiBwcmVmaXg9InBw
IgotJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFDRSAgICAgIFsgXHRd
Ci1IQVNIICAgICAgICBee0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklFUiAgW19hLXpBLVpd
W19hLXpBLVowLTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KLQot
REVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAgICAgICAg
MFswLTddKgotSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCi0KLURJR0lU
ICAgICAgICAgICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElH
SVR9KwotRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9
KyIuIikKLQotJSUKLQote0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hBU0h9ZGVmaW5le0hT
UEFDRX0re0lERU5USUZJRVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RN
YWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9PQko7Ci19
Ci17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAgICB5eWx2YWwtPnN2
YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9E
RUZJTkVfRlVOQzsKLX0KLXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJuIEhBU0hfVU5ERUY7
IH0KLQote0hBU0h9aWYgeyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZkZWYgeyByZXR1cm4g
SEFTSF9JRkRFRjsgfQote0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci17SEFT
SH1lbHNlIHsgcmV0dXJuIEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJldHVybiBIQVNIX0VM
SUY7IH0KLXtIQVNIfWVuZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJkZWZpbmVkIiB7IHJl
dHVybiBERUZJTkVEOyB9Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLXtI
QVNIfXByYWdtYSB7IHJldHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0ZW5zaW9uIHsgcmV0
dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJuIEhBU0hfVkVSU0lP
TjsgfQote0hBU0h9bGluZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lERU5USUZJRVJ9IHsK
LSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBJREVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNU
QU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3Rk
OjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0K
LSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT8pIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BVTkNUVUFUT1J9IHsg
cmV0dXJuIHl5dGV4dFswXTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3JlIHdoaXRlc3BhY2Ug
Ki8gfQotCi1cbiB7Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5
eXRleHRbMF07Ci19Ci0KLTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotCi0lJQot
Ci1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4p
Ci17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7
SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFz
dCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVm
aW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChp
bnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0g
PT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1l
ID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJu
IG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hh
ciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdo
aWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBw
OjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQot
ICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2Vu
OjpkZWNvZGVMb2NhdGlvbih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAg
ICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgeXlzZXRfbGluZW5v
KHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhlcik7Ci0KLSAgICAg
ICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlu
cHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkK
LXsKLSAgICBBU1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5bGV4X2luaXRfZXh0
cmEodGhpcywgJm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFy
dCgwLCBtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ry
b3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxleF9kZXN0cm95KG1M
ZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE5M2FiLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBF
UyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFBy
ZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVF
RCBUTyBSVU4gZ2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdM
U0wgRVMgUEFSU0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMg
YXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2guIERPIE5PVCBFRElU
IQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQt
PmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVuYW1lLXBy
ZWZpeD0icHAiCi0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3BwOjpDb250ZXh0KiBjb250ZXh0
fQotCi0ldW5pb24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAg
IHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotCi0lewot
ZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxl
eGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAg
ICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29u
dGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9u
YWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0ldG9rZW4gSEFTSCBIQVNIX1VO
REVGCi0ldG9rZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZOREVGIEhBU0hfRUxTRSBIQVNI
X0VMSUYgSEFTSF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9FUlJPUiBIQVNIX1BSQUdNQSBI
QVNIX0VYVEVOU0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0ldG9rZW4gPHN2YWw+IEhBU0hf
REVGSU5FX09CSiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2YWw+IElOVF9DT05TVEFOVCBG
TE9BVF9DT05TVEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4gb3BlcmF0b3IKLSV0eXBlIDx0
dmFsPiBjb25kaXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRsaXN0PiBwYXJhbWV0ZXJfbGlz
dCByZXBsYWNlbWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9rZW5fbGlzdAotJSUKLQotaW5w
dXQKLSAgICA6IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5lCi07Ci0KLWxpbmUKLSAgICA6
IHRleHRfbGluZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRleHRfbGluZQotICAgIDogJ1xu
JwotICAgIHwgdG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4cGFu
ZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+b3V0cHV0
KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQxLT5iZWdpbigpLCAkMS0+ZW5k
KCkpOwotICAgICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1jb250cm9sX2xpbmUKLSAgICA6
IEhBU0ggJ1xuJwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7
Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6
a1R5cGVPYmosICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwgSEFTSF9ERUZJTkVfRlVOQyAn
KCcgcGFyYW1ldGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAgIGNv
bnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAk
MSwgJDMsICQ1KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElERU5USUZJRVIgJ1xuJyB7Ci0g
ICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAgIH0KLSAgICB8IEhBU0hfSUYg
Y29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29u
dGV4dCwgJDIgPyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8IEhBU0hfSUZERUYgSURFTlRJ
RklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4
dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGTkRFRiBJREVOVElG
SUVSICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAhY29udGV4
dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0VMSUYgY29uZGl0aW9u
YWxfbGlzdCAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0UgJ1xuJyB7Ci0gICAgfQotICAg
IHwgSEFTSF9FTkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0
KTsKLSAgICB9Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8IEhBU0hfUFJBR01BICdcbicK
LSAgICB8IEhBU0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hfVkVSU0lPTiAnXG4nCi0gICAg
fCBIQVNIX0xJTkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0Ci0gICAgOiAvKiBlbXB0eSAq
LyB7ICQkID0gTlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1wYXJhbWV0ZXJfbGlzdAotICAg
IDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAg
ICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBw
OjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkpOwotICAgIH0KLSAgICB8IHBh
cmFtZXRlcl9saXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAg
JCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQz
KSk7Ci0gICAgfQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBjb25kaXRpb25hbF90b2tlbiB7
Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFj
aygkMSk7Ci0gICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBjb25kaXRpb25hbF90b2tlbiB7
Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsK
LQotdG9rZW5fbGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5W
ZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IHRva2VuX2xp
c3QgdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsK
LSAgICB9Ci07Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBERUZJTkVEIElERU5USUZJRVIg
ewotICAgIH0KLSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIgJyknIHsKLSAgICB9Ci0gICAg
fCB0b2tlbgotOwotCi10b2tlbgotICAgIDogb3BlcmF0b3IgewotICAgICAgICAkJCA9IG5ldyBw
cDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAgIH0KLSAgICB8IElOVF9DT05T
VEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJTlRfQ09O
U1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0g
bmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgJDEpOwotICAgIH0K
LSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3Rf
bGluZSwgSURFTlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3BlcmF0b3IKLSAgICA6ICdbJyB7
ICQkID0gJ1snOyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQotICAgIHwgJzwnIHsgJCQgPSAn
PCc7IH0KLSAgICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAnKCcgeyAkJCA9ICcoJzsgfQot
ICAgIHwgJyknIHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQkID0gJ3snOyB9Ci0gICAgfCAn
fScgeyAkJCA9ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7IH0KLSAgICB8ICcrJyB7ICQk
ID0gJysnOyB9Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAgIHwgJy8nIHsgJCQgPSAnLyc7
IH0KLSAgICB8ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScgeyAkJCA9ICclJzsgfQotICAg
IHwgJ14nIHsgJCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0gJ3wnOyB9Ci0gICAgfCAnJicg
eyAkJCA9ICcmJzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0KLSAgICB8ICc9JyB7ICQkID0g
Jz0nOyB9Ci0gICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwgJzonIHsgJCQgPSAnOic7IH0K
LSAgICB8ICc7JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAkJCA9ICcsJzsgfQotICAgIHwg
Jz8nIHsgJCQgPSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2Nw
LCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQotCi12b2lk
IHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlv
bikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0
KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17Ci0gICAg
eXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUgOiBmYWxz
ZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3ZTdjYy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9s
ZXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI2OCArMCwwIEBACi0jbGluZSAxNiAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBp
cyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0K
LQotI2xpbmUgMTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCIKLQotI2Rl
ZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdl
bmVyYXRlZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZM
RVhfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVm
aW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVS
U0lPTiA+IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwg
d2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwot
Ci0vKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotCi0vKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlw
ZSBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gK
LQotLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkg
b3IgbWF5IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1RE
Q19WRVJTSU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJ
TUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhl
IGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19T
VERDX0xJTUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgot
Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlw
ZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7
Ci10eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9p
bnQzMl90OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYg
c2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7
Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91
aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBl
ZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCi0KLS8q
IExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUg
SU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NSU4K
LSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5k
ZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3
LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9NQVggICAgICAgICAg
ICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmluZSBJTlQxNl9NQVgg
ICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUg
SU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgotI2lmbmRlZiBVSU5U
OF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKLSNlbmRpZgotI2lm
bmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkK
LSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAg
ICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0j
aWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmll
ciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNlICAgLyogISBfX2Nw
bHVzcGx1cyAqLwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLwotI2lmIGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0j
ZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVz
ICovCi0KLSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAotI2Vsc2UK
LSNkZWZpbmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUu
ICovCi0jZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZl
LCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBmb3IgdXNl
IGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAotICog
d2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhl
bmNlIHRoZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1
bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9pbnRlci4g
Ki8KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9TQ0FOTkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyogRm9yIGNv
bnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKLSAg
IGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5eWluIHl5
Zy0+eXlpbl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4dHJhIHl5
Zy0+eXlleHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5lIHl5dGV4
dCB5eWctPnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9k
ZWJ1Z19yCi0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkg
b3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGlu
ZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBv
ZiBCRUdJTi4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgotCi0v
KiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2Fu
IGJlIGxhdGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRo
ZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZp
bmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZ
X1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQg
c3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIg
KyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3Np
bmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5
eXNjYW5uZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8qIFNpemUg
b2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0jZGVmaW5l
IFlZX0JVRl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxh
cmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1
ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAy
KSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZF
Ul9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRlZiBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2RlZmluZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNk
ZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxs
eSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1
aXJlcwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBT
aW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4
aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgcHBsZXguIAot
ICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xv
YmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNl
IGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAq
ICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBp
cyBub3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikg
XAotICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0gICAgICAg
ICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAgICAg
ICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBSZXR1
cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBp
bnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7
IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0g
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2Fp
biAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5wdXQoYykg
eXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRlZiBZWV9U
WVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBz
aXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9T
VEFURQotI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9j
aF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAg
ICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6
ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0g
ICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0K
LSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5j
bHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgaW50IHl5X25fY2hh
cnM7Ci0KLSAgICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93
IHdlIGNyZWF0ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwg
YW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAg
aW50IHl5X2lzX291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVy
YWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBz
dGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5zdGVh
ZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgot
ICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3RpdmU7
Ci0KLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0
aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5
eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAq
LwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAK
LSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSBy
ZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVm
ZmVyOwotCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05F
VyAwCi0jZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVl
biBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhl
biB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQg
d2UKLSAgICAgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFu
eSBtb3JlLiAgV2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRv
IG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgot
ICAgICAqCi0gICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRo
ZSBzdGF0dXMgdG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUg
dXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4g
YXQgYSBuZXcgaW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5E
SU5HIDIKLQotICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8K
LQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNh
c2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4g
YSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5zIHRoZSB0
b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVS
ICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5
Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1
dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKLSAqIE5V
TEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICov
Ci0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5
eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9m
aWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlf
QlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVS
X1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
IGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9C
VUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwcG9w
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lkIHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9s
b2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9p
bml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIg
KGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVG
RkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFy
ICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBhbGxvYyAo
eXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAodm9pZCAq
LHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9pZCAqICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9i
dWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAg
ICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAgfQotCi0jZGVmaW5l
IHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICl7XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3Jl
YXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9Ci0K
LSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
KQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZp
bmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5
cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgot
Ci1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3Rh
dGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQg
eXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5
X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQg
YmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAq
LwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5
eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5
Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAyMwotI2RlZmlu
ZSBZWV9FTkRfT0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlz
IHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5
eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxl
eF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2FjY2VwdFsxMDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNCwgICAyMywg
ICAyMSwgICAyMiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAxNywgICAxNywgICAy
MSwgICAgMSwgICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwg
ICAxOCwgICAxNywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAgMCwgICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwgICAxOCwgICAxNywg
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAx
NywgICAgMCwgICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAxNiwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAgICAgICAxMiwgICAg
MCwgICAgNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwKLSAgICAg
ICAgNywgICAxMywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAgMCwgICAgMCwgICAg
MiwKLQotICAgICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAg
ICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAg
NSwgICAgNSwgICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwgICAgNSwgICAgOCwg
ICAgOSwgICAgNSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAx
MSwgICAxMSwgICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAgNSwgICAgNSwg
ICAgNSwgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAxMywKLSAgICAgICAx
NSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwK
LSAgICAgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNiwgICAx
NSwgICAxNSwKLSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwgICAgMSwgICAxNywg
ICAxMywgICAxMywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDE1LCAgIDIyLCAg
IDE1LCAgIDE1LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3LCAgIDE1LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAgIDE1LCAgIDE1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X21ldGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAgMywgICAg
MSwgICAgMSwgICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAgICAgNCwgICAgNCwg
ICAgNSwgICAgNiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNSwKLSAgICAgICAg
NywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywK
LSAgICAgICAgNywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAxOCwgIDE4NCwg
IDE4NSwgICAxMSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAgICAgICAgMCwgIDE2
NCwgICAzOSwgICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwgICA0NCwKLSAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2MiwgICA0NiwgIDE2
MCwKLSAgICAgIDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0NywgICA2NSwgICAgMCwg
IDE1MywgIDE1NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2NywgIDE0NSwgIDE1
MiwgIDE1MCwgIDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0MywgIDE0NCwgIDE0NCwg
IDE0MCwgIDEzNSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEzNSwgIDEzNiwgIDEy
NSwgIDEzNCwgIDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAgIDEyNCwgIDEyOCwg
IDEyOCwgIDE4NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4NSwKLSAgICAgIDE4
NSwgIDExMiwgIDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwgIDEwNywgICA4NiwK
LSAgICAgIDE4NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4NSwgICA5NywgICAx
MCwgIDE4NSwKLQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEwLCAgMTE0LCAgMTE4
LCAgMTIxLCAgMTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDYsICAxMDYsICAx
MDQsICAxMDQsICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQsCi0gICAgICAxMDgs
ICAgMTAsICAxMDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAxMDQsICAxMDQsCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDgsICAxMDYs
ICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAg
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAxMTAsICAxMDQsICAx
MDQsCi0KLSAgICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
bnh0WzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA1LCAgICA3
LCAgICA0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAgIDEwLCAgIDE1LCAg
IDE1LCAgIDE1LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAgICAgICA2LCAgICA1
LCAgICA3LCAgIDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDEwLAotICAgICAg
IDE2LCAgIDE2LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE5
LAotICAgICAgIDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAgIDIwLCAgIDM1LCAg
IDE5LCAgIDE5LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3
LCAgIDM3LCAgIDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAgIDIyLCAgIDIyLCAg
IDI1LCAgIDIwLCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIwLCAgIDI3LCAgIDQz
LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAg
IDk1LCAgIDU0LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5LAotICAgICAgIDU1
LCAgIDYwLCAgIDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAgMTAwLCAgMTAwLAot
Ci0gICAgICAgOTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAgOTMsICAgOTYsICAg
OTUsICAxMDEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEs
ICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAgMTYsICAgMzgsICAg
MzgsICAgMzgsICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgsICAgOTgsICAxMDIs
ICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAgOTAsICAgODksICAg
ODgsICAgODcsICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEsCi0gICAgICAgODAs
ICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAgNzEsCi0g
ICAgICAgNzAsICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIs
ICAgNjEsCi0gICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAg
NDcsICAgNDYsICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQsICAgIDMsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsgICAwLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAgIDE4LCAgICAxLCAg
ICAyLCAgICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAgIDE4LCAgIDk5LCAg
ICAyLCAgICA5LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5LCAgIDEzLCAgICA5
LCAgIDEzLCAgIDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAgIDE2LCAgIDIwLCAg
IDE3LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2LAotICAgICAgICA5
LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAgIDI5LCAgIDI1LAot
ICAgICAgIDI5LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM1LCAgIDI5
LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAgIDUwLCAgIDUwLCAg
IDUwLCAgIDE0LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0LCAgIDUxLCAgIDUx
LCAgIDUxLCAgIDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQsICAgMTQsICAgOTgs
ICAxMDIsICAxMDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAxMDUsICAxMDUsICAx
MDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYsCi0gICAgICAxMDYs
ICAxMDcsICAgODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAgODYsICAgODUsCi0g
ICAgICAxMDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAs
ICAgODQsCi0gICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzMsICAg
NzIsICAgNzEsICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIs
ICAgNjEsICAgNjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAgNTUsICAgNTQsICAg
NTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQsICAgNDMsICAgNDIs
ICAgNDAsICAgMzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0gICAgICAgMjgsICAg
MjQsICAgMTIsICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAg
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxl
IGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxl
X2Nhbl9tYXRjaF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDAsICAgICB9
OwotCi0vKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBj
YXRjaAotICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVm
aW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgp
IHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2Rl
ZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVw
cm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nl
c3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJz
Y3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBS
VU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5l
ID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXlj
b2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBt
YXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7
Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciog
c3RyLCBpbnQgbGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9FWFRSQV9U
WVBFIHBwOjpDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVu
dHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQotICAgIC8qIFVzZXIt
ZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0
cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNs
YXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJTEUgKnl5aW5fciwg
Knl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2Yg
dG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNh
cGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFj
azsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hvbGRfY2hhcjsKLSAg
ICBpbnQgeXlfbl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZf
cDsKLSAgICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGlu
dCB5eV9zdGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5
X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9h
Y2NlcHRpbmdfY3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2Rl
YnVnX3I7Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAg
IGludCB5eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZ
UEUgKiB5eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3Rh
dGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyog
VGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRl
ZAotICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVm
aW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5
Zy0+eXlsbG9jX3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0K
LWludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5f
dCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNl
IGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVu
Y2UuICovCi0KLWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50
IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9kZWJ1ZyAo
aW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHBw
Z2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRyYSAoWVlf
RVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpw
cGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChGSUxFICog
aW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9s
aW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAoaW50IGxp
bmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2
YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqcHBnZXRf
bGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBzZXRfbGxv
YyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0v
KiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBk
ZWZpbml0aW9ucyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdS
QVAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5
X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2Fu
bmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxl
eF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0K
LSNpZm5kZWYgWVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5
aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQg
eXlfcHVzaF9zdGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSAgICAK
LSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAg
IAotICAgIHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAg
ICAKLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNp
Zm5kZWYgWVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNl
bmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3Rh
bmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1
dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5v
dyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8g
ImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0
dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5Q
VVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0g
JyonOyBcCi0gICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3Np
emUgJiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMg
IT0gJ1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAg
ICAgaWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBc
Ci0gICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAg
ICAgICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBc
Ci0gICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVm
LCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAg
eyBcCi0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7
IFwKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5l
ciBmYWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAg
IH0gXAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7
IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2Vt
aS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWlu
YXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVy
biIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWlu
IGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUK
LSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJl
ciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNp
Zm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1
Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFM
X0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAs
IHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0
dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVy
YXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBh
cmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMg
MQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFs
X3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNk
ZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2
YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0j
ZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5n
IG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQg
dXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04K
LSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwot
I2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVm
aW5lIFlZX1JVTEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAgICAgICAgICAgKHl5
dGV4dFt5eWxlbmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNUSU9OCi0KLS8qKiBU
aGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1Z
WV9ERUNMCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwot
ICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2Fj
dDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0KLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxsb2Nf
cGFyYW07Ci0KLSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAgICAgIHl5
Zy0+eXlfaW5pdCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAgICAgWVlfVVNFUl9J
TklUOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAgICAgICAg
ICAgeXlnLT55eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0gICAgICAg
IGlmICggISB5eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQotICAgICAgICBpZiAo
ICEgeXlvdXQgKQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAgICAgICAgaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAg
ICAgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5l
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLSAgICAgICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1v
Zi1maWxlIGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKLQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLSAgICAgICAgKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAgcG9pbnRzIHRvIHRo
ZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAqIHRoZSBj
dXJyZW50IHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7Ci0KLSAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgKz0gWVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJ
KCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0g
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAg
ICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgICAg
IHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDEwNCApOwot
ICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRf
YWN0aW9uOgotICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0K
LSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAoIHl5X2FjdCAhPSBZ
WV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAw
OyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxd
ID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsK
LSAgICAgICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAgICAgICAgIH0KLQot
ZG9fYWN0aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rp
b25zLiAqLwotCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcg
b2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAg
Ki8KLSAgICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElP
TiAqLwotICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAg
ICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAq
LwotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5n
IHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9S
RV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDM6Ci0qeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0
ICovCi15eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsg
Lyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+
c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNI
X0RFRklORV9GVU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBIQVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDg6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSA5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElGOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJTkVEOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VSUk9SOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1BS
QUdNQTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9FWFRFTlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE2OgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTc6Ci1Z
WV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7
Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiB5eXRl
eHRbMF07IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsgLyogSWdu
b3JlIHdoaXRlc3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgotLyogcnVsZSAyMiBj
YW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1
bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgWVlf
U1RBVEVfRU9GKElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0KLSAgICBjYXNlIFlZ
X0VORF9PRl9CVUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0
Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
LQotICAgICAgICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICov
Ci0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0
J3MKLSAgICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRo
ZSB1c2VyCi0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2Ug
YW5kIGNhbGxlZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUg
dG8gYXNzdXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRf
QlVGRkVSIGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdo
dCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmly
c3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXAp
IHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfbl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aW5wdXRfZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0
aGUgcG9zaXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBz
aW5jZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVt
ZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRl
cyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZl
ciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5w
dXQoKS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAg
ICAgICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgeXlfc3Rh
dGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
LQotICAgICAgICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUg
TlVMCi0gICAgICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAg
ICAgICAgICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAg
ICAgICAgICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAg
ICAgICAgICAgICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24n
dAotICAgICAgICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0
aGVuIGl0Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAg
ICAgKi8KLQotICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5
X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25leHRfc3Rh
dGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBO
VUwuICovCi0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAg
ICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAg
ICAgICBnb3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRf
YWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNl
IHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0
YWtlbiBjYXJlIGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigp
IHRvIGhhdmUgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5v
dyBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNv
bWUgdG90YWwKLSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYp
IHdhbnRzIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIg
d2UgcmV0dXJuIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGls
bCB3b3JrIC0gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0
IHJldHVybmVkLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAg
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAg
ICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2Ug
RU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9
Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQ7Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1
Zl9wID0KLSAgICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAg
eXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0
aW9uOwotICAgICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBz
Y2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQg
b2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9r
ZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRy
eSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2Vu
dGluZyBhbiBhY3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAq
ICBFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hh
ciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lz
dGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVt
YmVyX3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnMgKyAxXSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBz
Y2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAg
ICAgeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4g
Ki8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9N
T1JFX0FESiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQg
YSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhp
cyBhcyBhIGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVP
Ql9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhl
IEVPQiwgZmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3Rv
X21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0K
LSAgICBmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRl
c3QrKykgPSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8q
IGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0Ys
Ci0gICAgICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwot
Ci0gICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3RvX3JlYWQgPQotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90
b19tb3ZlIC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAg
ICAgICAgeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0K
LSAgICAgICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZl
ciAqLwotICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
LQotICAgICAgICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAo
aW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAgICAgICAgICAgaWYg
KCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAgICAgICAgICAgICAg
aWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUg
Kz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAgICAgIGItPnl5X2No
X2J1ZiA9IChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgcm9vbSBpbiBm
b3IgMiBFT0IgY2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVhbGxvYygodm9pZCAq
KSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLyogQ2FuJ3QgZ3Jv
dyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9
IDA7Ci0KLSAgICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJvciAtIHNjYW5uZXIg
aW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3Ag
PSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAgICAgICAgbnVtX3Rv
X3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICAgICAgfQotCi0g
ICAgICAgIGlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAg
IG51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAvKiBSZWFkIGluIG1v
cmUgZGF0YS4gKi8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFy
cywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIGlm
ICggeXlnLT55eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAgIGlmICggbnVtYmVy
X3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAgICAgICAgICAgcmV0
X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAg
LHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAgICAgICAg
ICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICBlbHNlCi0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLSAg
ICBpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAgLyogRXh0ZW5k
IHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLSAg
ICAgICAgeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21v
dmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0gICAgICAg
IGlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0gICAgICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSIgKTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21v
dmU7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLQotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZlswXTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlv
dXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVh
Y2hlZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0gWVlfQVRf
Qk9MKCk7Ci0KLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLQotICAg
IHJldHVybiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5
IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3Bz
aXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwot
ICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRl
X3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdp
c3RlciBpbnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcg
dXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOwotCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAg
ICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAg
ICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLSAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9
PSAxMDQpOwotCi0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwot
fQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMg
aW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBp
bnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAgaW50IGM7Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgaWYgKCAqeXln
LT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAg
ICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2Un
dmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgg
eXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIGludCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5
Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVy
KCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2Ug
RU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMg
YmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2
ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0
aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0
b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3Ig
aW5wdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBj
b25zaWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9M
QVNUX01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUu
Ci0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0
IGJ1ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICx5
eXNjYW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAg
ICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFlZX05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAg
ICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0Owot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1
Zl9wOyAvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55eV9jX2J1Zl9wID0g
J1wwJzsgICAgLyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAq
Kyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0
X2JvbCA9IChjID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9hdF9ib2wgKQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXlj
b2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwotfQotI2VuZGlmICAv
KiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRp
ZmZlcmVudCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0
cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQG5vdGUg
VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElO
SVRJQUwgLgotICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsK
LSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2luaXRfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5w
dXQgYnVmZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBf
c3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBs
YWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICogICAgICBw
cHBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZmZXJfc3RhdGUobmV3
X2J1ZmZlcik7Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAg
IC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5
Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAg
ICAgfQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICBw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVh
bGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GIChw
cHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICog
aXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0g
ICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcF9sb2Fk
X2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2No
YXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0
ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvczsKLSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9m
aWxlOwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKLX0KLQotLyoq
IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAqIEBwYXJh
bSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBi
dWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgot
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0
ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRF
KSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsK
LSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0g
c2l6ZTsKLQotICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0
aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVu
ZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYgPSAoY2hh
ciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGItPnl5X2NoX2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2lzX291cl9idWZm
ZXIgPSAxOwotCi0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwotCi0gICAg
cmV0dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1
ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlf
QlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBi
ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkg
LyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAgaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlz
Y2FubmVyICk7Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8q
IEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9u
IGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAot
ICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0
aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55eV9pbnB1dF9maWxl
ID0gZmlsZTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRo
ZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAg
ICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVy
LgotICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5v
IG9yIGNvbHVtbi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0g
ICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7
Ci0gICAgfQotCi0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLSAgICBl
cnJubyA9IG9lcnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMu
IE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIg
dGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVG
RkVSLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2
b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGItPnl5X25f
Y2hhcnMgPSAwOwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hh
cmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVu
ZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFtIGluIHRo
YXQgc3RhdGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQot
ICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAgYi0+eXlfYXRfYm9s
ID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIGlm
ICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3Rh
Y2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1
bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdf
YnVmZmVyID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayh5eXNjYW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9z
d2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAg
ICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0g
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKLSAgICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVy
d2lzZSwgcmVwbGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZl
ci4gKi8KLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxl
dGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRoZSBuZXh0IGVsZW1l
bnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAx
OwotICAgIH0KLX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlz
dC4KLSAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3Rh
dGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgaW50IG51bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7
Ci0KLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBz
aW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxsIGV2ZW4g
bmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAgICAgICAg
ICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAgICAgICovCi0gICAg
ICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1zZXQoeXlnLT55eV9i
dWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAgICAgICAgLyogSW5j
cmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0gICAg
ICAgIGludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLSAgICAg
ICAgbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwot
ICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiop
cHByZWFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWctPnl5X2J1ZmZl
cl9zdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFj
ayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6ZXJvIG9ubHkgdGhl
IG5ldyBzbG90cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7Ci0gICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBz
Y2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICog
QHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXpl
IGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIg
c3RhdGUgb2JqZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hh
ciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZ
WV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBi
YXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3Np
emUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3Qg
dG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAg
ICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVP
QidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+
eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0g
MDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAg
ICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIHBwX3N3aXRjaF90
b19idWZmZXIoYiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoqIFNldHVw
IHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0
byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBh
cmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVz
IHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBwX3NjYW5f
Ynl0ZXMoKSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5
Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotICAgIHJl
dHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0K
LS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVz
LiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBv
ZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICog
QHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBi
eSBAYSBieXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50
ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIGludCBpOwotICAg
IAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9y
IHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9
IChjaGFyICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0
ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAg
ICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZb
X3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYiA9IHBwX3Nj
YW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIC8q
IEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cg
aXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19v
dXJfYnVmZmVyID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlf
cHVzaF9zdGF0ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IGlmICggeXlnLT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFydF9zdGFja19kZXB0
aCApCi0gICAgICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwotCi0gICAgICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5DUjsKLSAgICAgICAg
bmV3X3NpemUgPSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9mKCBpbnQgKTsKLQot
ICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBw
cHJlYWxsb2MoKHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6ZSAseXlzY2FubmVy
ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFydC1jb25kaXRpb24g
c3RhY2siICk7Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9z
dGFydF9zdGFja19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5ld19zdGF0ZSk7Ci19
Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIGlmICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQotICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ciICk7Ci0KLSAgICBC
RUdJTih5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyXSk7Ci19Ci0K
LSAgICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgcmV0dXJuIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHIgLSAx
XTsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJF
IDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBt
c2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBmcHJpbnRmKCBzdGRl
cnIsICIlc1xuIiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8q
IFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0j
dW5kZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwK
LSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hv
bGRfY2hhcjsgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsg
XAotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxlbmcgPSB5
eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLS8qIEFj
Y2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICov
Ci0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBw
cGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7
Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0v
KiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0
IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICpwcGdl
dF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQot
Ci0vKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNo
ZWQgYnkgdGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNl
cl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9k
ZWZpbmVkIDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJh
bSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBi
dWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAg
ICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQot
Ci0vKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfY29s
dW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAg
LyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJv
ciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0g
ICAgCi0gICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0
cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIu
Ci0gKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKLSAqLwot
dm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3Ry
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1p
bnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9m
bGV4X2RlYnVnOwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFj
Y2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiBwcGdl
dF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQot
Ci12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnBw
Z2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19
Ci0gICAgCi12b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0v
KiBVc2VyLXZpc2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNl
IGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVl
bnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0
IGFyZ3VtZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFy
YXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBsZXhfaW5p
dCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMg
PT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAg
ICB9Ci0KLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2Yo
IHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09
IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAg
fQotCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4g
eXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4X2luaXRf
ZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxv
d3MgdGhlCi0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBh
cmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEg
c2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlz
IHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMg
b3duIGRlY2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0
IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJh
IGZpZWxkLgotICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNl
cl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgZHVtbXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwg
JmR1bW15X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAg
ICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAg
KnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXln
dXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMg
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
dWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxlKFlZX0NV
UlJFTlRfQlVGRkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
Ci0gICAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIC8q
IERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXlnLT55eV9idWZmZXJf
c3RhY2sgLHl5c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0g
ICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZy
ZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1w
b3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAg
KiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5
eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0
cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nh
bm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0g
KiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgot
c3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIs
IGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBpOwotICAg
IGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKLX0KLSNl
bmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4g
KHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIg
aW50IG47Ci0gICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKLQotICAgIHJl
dHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7
Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUg
Zm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25zIHRoYXQg
dXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQgdXNlIHZv
aWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAgICAgKiBi
ZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9t
Ci0gICAgICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVu
dCBjb252ZXJzaW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotICAg
ICAqLwotICAgIHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsK
LX0KLQotdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgZnJlZSggKGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAq
KSBjYXN0ICovCi19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLXN0ZDo6
c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAg
ICAvLyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9
K3tJREVOVElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFD
RS4KLSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikg
PT0gODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0g
bGVuIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcp
IHx8IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcg
c3RkOjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsK
LX0KLQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYs
IGludCBtYXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFt
SW5wdXQtPmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0
OjprRXJyb3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewot
ICAgICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29k
ZUxvY2F0aW9uKHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBm
aWxlID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9saW5lbm8ocHA6OlRv
a2VuOjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFk
ID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJy
b3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAg
QVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0X2V4dHJhKHRoaXMs
Jm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1MZXhl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkK
LXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAg
ICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YjZhYTAu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNzIgKzAsMCBAQAot
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxl
dG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQot
ICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQot
ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhj
ZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBh
cnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhh
dCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdv
cmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9u
IG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4g
IEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFy
c2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlz
Ci0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5k
IHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRl
ciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAq
LwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFs
bG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGlj
IiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdp
biB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3Bh
Y2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJsZXMsIGFz
IHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAgVGhl
cmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0
bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJ
TkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJZGVudGlm
eSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24gdmVyc2lv
bi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRvbiBuYW1l
LiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFyc2Vy
cy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVm
aW5lIFlZTFNQX05FRURFRCAxCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5j
dGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5eWxleCAg
IHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBwbHZhbAot
I2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZpbmUg
eXluZXJycyBwcG5lcnJzCi0jZGVmaW5lIHl5bGxvYyBwcGxsb2MKLQotLyogVG9rZW5zLiAgKi8K
LSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhl
IHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1
Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsK
LSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9
IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0g
ICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VO
RElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAot
ICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAg
IEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RF
RklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9D
T05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJ
RVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4
Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhB
U0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0Ug
MjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZp
bmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFH
TUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04g
MjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3Mgot
I2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0j
ZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQot
Ci0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIK
LQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcg
MQotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5l
IFlZREVCVUcgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMu
ICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMg
ZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZ
WVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRpZgotCi0jaWYgISBk
ZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYg
dW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7
Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0v
KiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5
cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNl
bmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVD
TEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGlu
dCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0g
WVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBi
ZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUg
WVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0
IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUq
IGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQgeXllcnJv
cihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQqIGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0YXRpYyB2
b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRp
dGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250
ZXh0KTsKLQotCi0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNpZmRlZiBzaG9ydAot
IyB1bmRlZiBzaG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlU
WVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0
eXBlX3VpbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVf
SU5UOCB5eXR5cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5
cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQx
NgotdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hv
cnQgaW50IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVm
IF9fU0laRV9UWVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYg
ZGVmaW5lZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmlu
ZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAg
aW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
IGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2ln
bmVkIGludAotIyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJ
WkVfVCkgLTEpCi0KLSNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwotIyAgaWYgRU5BQkxF
X05MUwotIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLwotIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIs
IG1zZ2lkKQotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAgZGVmaW5lIFlZXyht
c2dpZCkgbXNnaWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFi
bGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZp
bmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKLSNlbHNlCi0jIGRl
ZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50aXR5IGZ1bmN0aW9u
LCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAq
LwotI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UKLSNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkK
LSNlbHNlCi1zdGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2VuZGlmCi17Ci0gIHJl
dHVybiBpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9S
X1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmlu
ZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9D
QQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVm
aW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JV
SUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUg
WVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBp
bmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
ICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAgaW5j
bHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAg
IGlmbmRlZiBfU1RETElCX0gKLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICAgIGVuZGlm
Ci0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlT
VEFDS19BTExPQwotICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAg
Ki8KLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxl
IChZWUlEICgwKSkKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUg
T1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0
aGUgc3RhY2ssCi0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2
IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlm
IE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0
byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90
cy4gICovCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFi
bGUgY2lyY2EgMjAwNiAqLwotIyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0MgWVlNQUxMT0MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlT
VEFDS19BTExPQ19NQVhJTVVNCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJ
WkVfTUFYSU1VTQotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVm
aW5lZCBfU1RETElCX0ggXAotICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmlu
ZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVl
KSkpCi0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KLSMgICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAg
IGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9D
IG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAm
JiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZ
U0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyAgaWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlm
ICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5k
aWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lm
ICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMg
XAotICAgICB8fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklW
SUFMIFwKLSAgICAgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVf
SVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBh
bnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5
c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgICBZWUxUWVBFIHl5bHM7Ci19OwotCi0vKiBUaGUgc2l6
ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5l
eHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFs
bG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBo
b2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0jIGRlZmluZSBZ
WVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBz
aXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAotICAgICAgKyAyICogWVlTVEFD
S19HQVBfTUFYSU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4g
IFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlm
bmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAg
ZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkg
KFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMgICBkZWZp
bmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlTSVpFX1QgeXlpOyAg
ICAgICAgICAgICBcCi0gICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAg
IFwKLSAgICAgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07ICAgICAgICBcCi0gICAgfSAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRp
ZgotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBv
bmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUg
dGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQg
WVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZ
WVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFj
ay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKSAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpFX1QgeXluZXdieXRl
czsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlwdHItPlN0YWNrLCBT
dGFjaywgeXlzaXplKTsgICAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2s7
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBz
aXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5k
aWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRl
LiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMgotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlU
QUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDI0NwotCi0vKiBZWU5UT0tFTlMgLS0gTnVtYmVy
IG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDcKLS8qIFlZTk5UUyAtLSBO
dW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAxMgotLyogWVlOUlVM
RVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDYyCi0vKiBZWU5S
VUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICA5MQotCi0v
KiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5n
IHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sg
ICAyNzYKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlY
XSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wg
bnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgMjIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQzLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAzNywgICAgNDAsICAgICAyLAotICAgICAgMjMsICAgIDI0LCAgICAz
NiwgICAgMzMsICAgIDI1LCAgICAzNCwgICAgMzIsICAgIDM1LCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
IDQ0LCAgICA0NSwKLSAgICAgIDI4LCAgICA0MiwgICAgMjksICAgIDQ2LCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAyNiwgICAgIDIsICAgIDI3LCAgICAzOCwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDMwLCAgICAzOSwgICAgMzEsICAgIDQxLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0g
LS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0g
ICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KLXsKLSAg
ICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywg
ICAgMTYsICAgIDE5LAotICAgICAgMjMsICAgIDMwLCAgICAzNCwgICAgMzgsICAgIDQyLCAgICA0
NiwgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksCi0gICAgICA2MiwgICAgNjUsICAgIDY4LCAg
ICA3MSwgICAgNzIsICAgIDc0LCAgICA3NSwgICAgNzcsICAgIDgxLCAgICA4MywKLSAgICAgIDg2
LCAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5OSwgICAxMDEsICAgMTAzLCAgIDEwNSwgICAxMDcs
ICAgMTA5LAotICAgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5LCAgIDEyMSwgICAx
MjMsICAgMTI1LCAgIDEyNywgICAxMjksCi0gICAgIDEzMSwgICAxMzMsICAgMTM1LCAgIDEzNywg
ICAxMzksICAgMTQxLCAgIDE0MywgICAxNDUsICAgMTQ3LCAgIDE0OSwKLSAgICAgMTUxLCAgIDE1
MywgICAxNTUKLX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUg
cnVsZXMnIFJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Ci17Ci0g
ICAgICA0OCwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgNTAs
ICAgIC0xLCAgICA1MSwKLSAgICAgIC0xLCAgICAyMiwgICAgLTEsICAgIDU1LCAgICAyMiwgICAg
LTEsICAgICAzLCAgICAyMiwgICAgLTEsICAgIDE3LAotICAgICAgNTIsICAgIDIyLCAgICAtMSwg
ICAgMTgsICAgIDIzLCAgICA1MywgICAgMjQsICAgIDUyLCAgICAyMiwgICAgLTEsCi0gICAgICAg
NCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDUsICAgIDU0LCAgICAyMiwgICAgLTEsICAgICA2
LCAgICAyMSwKLSAgICAgIDIyLCAgICAtMSwgICAgIDcsICAgIDIxLCAgICAyMiwgICAgLTEsICAg
ICA5LCAgICA1NCwgICAgMjIsICAgIC0xLAotICAgICAgIDgsICAgIDIyLCAgICAtMSwgICAgMTAs
ICAgIDIyLCAgICAtMSwgICAgMTIsICAgIDIyLCAgICAtMSwgICAgMTMsCi0gICAgICAyMiwgICAg
LTEsICAgIDE0LCAgICAyMiwgICAgLTEsICAgIDE1LCAgICAyMiwgICAgLTEsICAgIDE2LCAgICAy
MiwKLSAgICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIC0xLCAg
ICA1MywgICAgMjUsICAgIDIxLAotICAgICAgLTEsICAgIDU2LCAgICAtMSwgICAgNTQsICAgIDU2
LCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA1NSwgICAgNTcsCi0gICAgICAtMSwgICAgMTEsICAg
IDIxLCAgICAtMSwgICAgMTEsICAgIDIzLCAgICAyMSwgICAgMjQsICAgIC0xLCAgICA1NywKLSAg
ICAgIC0xLCAgICA1OCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjAsICAgIC0xLCAgICAyMSwg
ICAgLTEsICAgIDI2LAotICAgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAy
OSwgICAgLTEsICAgIDIzLCAgICAtMSwgICAgMjQsCi0gICAgICAtMSwgICAgMzAsICAgIC0xLCAg
ICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwKLSAgICAgIC0x
LCAgICAzNSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzOCwgICAgLTEs
ICAgIDM5LAotICAgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAg
LTEsICAgIDQzLCAgICAtMSwgICAgNDQsCi0gICAgICAtMSwgICAgNDUsICAgIC0xLCAgICAyNSwg
ICAgLTEsICAgIDQ2LCAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5l
IHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAgNjMsICAgIDYzLCAgICA2NSwg
ICAgNjksICAgIDcwLCAgICA3NCwgICAgNzUsICAgIDg0LCAgICA4NSwKLSAgICAgIDg4LCAgICA5
MSwgICAgOTQsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMTAsICAgMTEx
LAotICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTE5LCAgIDEyMiwgICAxMjMsICAg
MTI3LCAgIDEzMywgICAxMzcsCi0gICAgIDE0NCwgICAxNDgsICAgMTU1LCAgIDE1NywgICAxNTks
ICAgMTYzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3OCwKLSAgICAgMTc5LCAgIDE4MCwgICAx
ODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAotICAg
ICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAg
IDE5NywgICAxOTgsCi0gICAgIDE5OSwgICAyMDAsICAgMjAxCi19OwotI2VuZGlmCi0KLSNpZiBZ
WURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZ
TUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZp
cnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1p
bmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRl
bmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJIQVNIIiwgIkhBU0hfVU5ERUYiLCAiSEFTSF9J
RiIsCi0gICJIQVNIX0lGREVGIiwgIkhBU0hfSUZOREVGIiwgIkhBU0hfRUxTRSIsICJIQVNIX0VM
SUYiLCAiSEFTSF9FTkRJRiIsCi0gICJERUZJTkVEIiwgIkhBU0hfRVJST1IiLCAiSEFTSF9QUkFH
TUEiLCAiSEFTSF9FWFRFTlNJT04iLCAiSEFTSF9WRVJTSU9OIiwKLSAgIkhBU0hfTElORSIsICJI
QVNIX0RFRklORV9PQkoiLCAiSEFTSF9ERUZJTkVfRlVOQyIsICJJTlRfQ09OU1RBTlQiLAotICAi
RkxPQVRfQ09OU1RBTlQiLCAiSURFTlRJRklFUiIsICInXFxuJyIsICInKCciLCAiJyknIiwgIics
JyIsICInWyciLAotICAiJ10nIiwgIic8JyIsICInPiciLCAiJ3snIiwgIid9JyIsICInLiciLCAi
JysnIiwgIictJyIsICInLyciLCAiJyonIiwKLSAgIiclJyIsICInXiciLCAiJ3wnIiwgIicmJyIs
ICInficiLCAiJz0nIiwgIichJyIsICInOiciLCAiJzsnIiwgIic/JyIsCi0gICIkYWNjZXB0Iiwg
ImlucHV0IiwgImxpbmUiLCAidGV4dF9saW5lIiwgImNvbnRyb2xfbGluZSIsCi0gICJyZXBsYWNl
bWVudF9saXN0IiwgInBhcmFtZXRlcl9saXN0IiwgImNvbmRpdGlvbmFsX2xpc3QiLCAidG9rZW5f
bGlzdCIsCi0gICJjb25kaXRpb25hbF90b2tlbiIsICJ0b2tlbiIsICJvcGVyYXRvciIsIDAKLX07
Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIElu
dGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0u
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAg
MCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYz
LCAgIDI2NCwKLSAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAg
MjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAotICAgICAyNzUsICAgMjc2LCAgICAxMCwgICAgNDAs
ICAgIDQxLCAgICA0NCwgICAgOTEsICAgIDkzLCAgICA2MCwgICAgNjIsCi0gICAgIDEyMywgICAx
MjUsICAgIDQ2LCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0MiwgICAgMzcsICAgIDk0LCAgIDEy
NCwKLSAgICAgIDM4LCAgIDEyNiwgICAgNjEsICAgIDMzLCAgICA1OCwgICAgNTksICAgIDYzCi19
OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhh
dCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtd
ID0KLXsKLSAgICAgICAwLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDUw
LCAgICA1MCwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAg
IDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEs
ICAgIDUxLCAgICA1MiwgICAgNTIsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwK
LSAgICAgIDU1LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1
NywgICAgNTcsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAg
ICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAg
IDU4LCAgICA1OCwgICAgNTgKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9s
cyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLAotICAgICAgIDYsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMSwg
ICAgIDMsICAgICAxLCAgICAgMiwKLSAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEKLX07Ci0KLS8qIFlZREVGQUNU
W1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAg
U1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8g
ZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDIsICAgICAwLCAgICAg
MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAg
IDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAgNiwgICAgNDMsICAgIDQ0LCAgICA2MSwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQ1LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCi0gICAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgMCwKLSAgICAgIDMwLCAgICAzNSwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI4
LCAgICAzNCwgICAgIDAsICAgICAwLAotICAgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsCi0gICAgICAyNSwgICAgIDcs
ICAgIDMxLCAgICAxMSwgICAgMzIsICAgICAwLCAgICAxMiwgICAgMjksICAgIDEzLCAgICAxNCwK
LSAgICAgIDE1LCAgICAgOSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAz
MywgICAgIDAsICAgIDI3LAotICAgICAgMTAKLX07Ci0KLS8qIFlZREVGR09UT1tOVEVSTS1OVU1d
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAt
MSwgICAgIDEsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDY4LCAgICA4MywgICAgNTUsICAgIDY5
LCAgICA1NiwKLSAgICAgIDU3LCAgICA1MQotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0g
SW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFURS1OVU0u
ICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtNTUKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlwYWN0W10gPQotewotICAgICAtNTUsICAgIDczLCAgIC01NSwgICAtMTcsICAgLTE4LCAgIDE0
NSwgICAtMTAsICAgIC05LCAgIC0xNiwgICAxNDUsCi0gICAgICAtOCwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI3LCAgIDIwMSwgICAgMjgsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIDE3MywKLSAgICAgLTU1LCAgIC01
NSwgICAtNTUsICAgIDMwLCAgIC0xOSwgICAgLTMsICAgLTU1LCAgIC01NSwgICAgMzEsICAgIDMy
LAotICAgICAtNTUsICAgMTA5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgICAzMywgICAyMDEsCi0gICAgICAyOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgIDM1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTE1LCAgIC0xMSwgICAyMDEsICAgIDM2LCAgIC01NSwgICAgMzcsICAgLTU1LAotICAg
ICAtNTUKLX07Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX2ludDggeXlwZ290b1tdID0KLXsKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtMjcsICAgLTU1LCAgICA1MSwgICAgNjAsICAgLTU0LAotICAgICAgLTEsICAgLTU1
Ci19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3Rh
dGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVn
YXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4g
IElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklORiwgc3lu
dGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dGFibGVbXSA9Ci17Ci0gICAgICA1MCwgICAgNzcsICAgIDc0LCAgICA1Mywg
ICAgNzUsICAgIDUyLCAgICA2MCwgICAgNzcsICAgIDU0LCAgICA4NSwKLSAgICAgIDg2LCAgICA1
OCwgICAgNTksICAgIDg3LCAgICA2MiwgICAgNTAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDc2
LAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNzIsICAgIDY3LAotICAg
ICAgODIsICAgIDcwLCAgICA3MywgICAgNzgsICAgIDc5LCAgICA4MSwgICAgODQsICAgIDg5LCAg
ICA4OCwgICAgOTAsCi0gICAgICA2MSwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDcyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAyLCAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDUwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
Ci0gICAgICA1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICA4MCwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCi0gICAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA1NCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwK
LSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQw
LCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUKLX07Ci0KLXN0YXRpYyBjb25zdCB5
eXR5cGVfaW50OCB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAgIDU1LCAgICAyMSwgICAgMjEs
ICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDYxLCAgICAxMSwgICAgMjQsCi0gICAgICAyNSwgICAg
MjEsICAgIDIxLCAgICAyNCwgICAgMjIsICAgIDE2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDQ5LCAgICAyMiwKLSAg
ICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIxLCAgICAyMSwg
ICAgODUsICAgIDIyLAotICAgICAgIDksICAgICAxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA2OSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA4NSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAg
ICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
Ci0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2Ci19OwotCi0vKiBZWVNUT1NbU1RB
VEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3lt
Ym9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICA0OCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTUsCi0gICAgICA1NywgICAgNTgs
ICAgIDIyLCAgICAyMSwgICAgMTEsICAgIDU0LCAgICA1NiwgICAgNTcsICAgIDIxLCAgICAyMSwK
LSAgICAgIDIyLCAgICA1NCwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAy
MiwgICAgNTIsICAgIDU1LAotICAgICAgMjMsICAgIDIyLCAgICA1NywgICAgMjIsICAgIDIxLCAg
ICAyMywgICAgMjIsICAgIDU2LCAgICAyMiwgICAgMjIsCi0gICAgICAyMiwgICAgMjIsICAgIDIx
LCAgICA1MywgICAgMjEsICAgIDI0LCAgICAyNSwgICAgMjQsICAgIDUyLCAgICAyMSwKLSAgICAg
IDIyCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5l
IHl5Y2xlYXJpbiAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIp
Ci0jZGVmaW5lIFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICBnb3RvIHl5YWNj
ZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVS
Uk9SICAgICBnb3RvIHl5ZXJyb3JsYWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNh
bGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRo
ZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAg
T25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28u
ICAqLwotCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKLQotI2RlZmluZSBZWVJF
Q09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZh
bHVlKSAgICAgICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5Y2hhciA9IChU
b2tlbik7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
ICAgICAgICAgICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoMSk7ICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxzZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5u
b3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxlIChZWUlEICgw
KSkKLQotCi0jZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgMjU2Ci0K
LQotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0
byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxv
Y2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlz
IGRlZmluZWQpLiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKLSNp
Zm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJo
cywgTikgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEp
LmZpcnN0X2xpbmU7ICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xP
QyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9saW5lICAg
ID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOyAgICAgXAotICAgICAgKEN1cnJlbnQpLmxh
c3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAgIFwKLSAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAg
ICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAg
XAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9
ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAg
ICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAo
WVlJRCAoMCkpCi0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUg
bG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBv
cmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2Vy
IGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0KLSNpZm5k
ZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFMCi0jICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCi0gICAgIGZwcmludGYgKEZp
bGUsICIlZC4lZC0lZC4lZCIsICAgICAgICAgIFwKLSAgICAgICAgICAoTG9jKS5maXJzdF9saW5l
LCAoTG9jKS5maXJzdF9jb2x1bW4sIFwKLSAgICAgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9j
KS5sYXN0X2NvbHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUs
IExvYykgKCh2b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVggLS0gY2FsbGlu
ZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNpZmRlZiBZWUxFWF9Q
QVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFN
KQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jKQotI2VuZGlm
Ci0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCi0K
LSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCi0jIGVuZGlm
Ci0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgIFwKLSAgICBZ
WUZQUklOVEYgQXJnczsgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAg
ICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYg
KHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50
IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFR5cGUsIFZhbHVl
LCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJv
bF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6
Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0g
ICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwot
ICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICgheXl2YWx1ZXApCi0g
ICAgcmV0dXJuOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0j
IGlmZGVmIFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5
eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAo
eXlvdXRwdXQpOwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZh
dWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91
dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBF
IGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UK
LXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0
eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNv
bnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5k
aWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYg
KHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJ
T05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIp
OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRl
IHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRp
YyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQx
NiAqdG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoYm90dG9tLCB0b3Ap
Ci0gICAgeXl0eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp0b3A7Ci0jZW5k
aWYKLXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRv
bSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRv
bSk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tf
UFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
XAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcg
dG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUg
Knl5bHNwLCBpbnQgeXlydWxlLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwgY29udGV4dCkKLSAg
ICBZWVNUWVBFICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBpbnQgeXlydWxlOwot
ICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIy
W3l5cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGlu
ZVt5eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUg
JWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRo
ZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJo
czsgeXlpKyspCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlp
ICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVs
ZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0p
Ci0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKSAgICAgICAg
ICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0K
LQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAg
ICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKLSAgICB5eV9yZWR1Y2Vf
cHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDAp
KQotCi0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmlu
aXRpYWxpemVkIHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwot
aW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFy
Z3MpCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlv
bikKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVE
VUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBU
SCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmIFlZ
SU5JVERFUFRICi0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERF
UFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25s
eQotICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0K
LSAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5k
ZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1B
WERFUFRIKQotICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJp
dGhtZXRpYy4gICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAx
MDAwMAotI2VuZGlmCi0KLQwKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0
cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBk
ZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZ
WVNUUi4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGlj
IFlZU0laRV9UCi15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5k
aWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07
IHl5bGVuKyspCi0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0j
IGVuZGlmCi0KLSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBk
ZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3Rw
Y3B5IHN0cGNweQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0
aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15
eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMg
Y2hhciAqCi15eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAg
Y29uc3QgY2hhciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0OwotICBj
b25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0g
J1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0j
IGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVu
dHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBh
bmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQot
ICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNz
IHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tz
bGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtl
biBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3Rl
YWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBi
ZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3Qg
Y2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAgIFlZU0la
RV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9y
ICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAg
ICAgIGNhc2UgJywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0KLSAgICAg
IGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAgIGdvdG8g
ZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5
cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICciJzoKLSAg
ICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAgICAgICBy
ZXR1cm4geXluOwotICAgICAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0K
LSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJu
IHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkg
aW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2Vu
Ci0gICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGNvcGllZCwKLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAg
SWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Ci0gICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVy
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKLSAgIGNvcGllZC4gIEFzIGEgc3Bl
Y2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgotICAgbWVz
c2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBk
dXJpbmcKLSAgIHNpemUgY2FsY3VsYXRpb24uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXN5bnRh
eF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQotewotICBp
bnQgeXluID0geXlwYWN0W3l5c3RhdGVdOwotCi0gIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAm
JiB5eW4gPD0gWVlMQVNUKSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGlu
dCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAg
PSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUg
PSB5eXNpemUwOwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNpemVfb3Zl
cmZsb3cgPSAwOwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1
IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVN
XTsKLSAgICAgIGludCB5eXg7Ci0KLSMgaWYgMAotICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4
dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQotICAgICBjb25zdHJ1Y3Rl
ZCBvbiB0aGUgZmx5LiAgKi8KLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
Iik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVz
Iik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVz
IG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIG9yICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Ci0jIGVuZGlmCi0gICAgICBj
aGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNv
bnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAg
ICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZv
cm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0gICAgICAgICAgICArIHNpemVvZiB5eWV4cGVjdGlu
ZyAtIDEKLSAgICAgICAgICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikK
LSAgICAgICAgICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAgIGNoYXIgY29uc3Qg
Knl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlm
IG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgWVlDSEVDSy4gICov
Ci0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAgICAgIC8qIFN0
YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAg
aW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5eGVuZCA9IHl5
Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAgICAgaW50
IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKLSAgICAg
IHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0gICAgICBmb3Ig
KHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgIGlmICh5eWNoZWNrW3l5
eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLSAgICAgIHsKLSAgICAgICAgaWYg
KHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAgICAgICAgICB7Ci0g
ICAgICAgIHl5Y291bnQgPSAxOwotICAgICAgICB5eXNpemUgPSB5eXNpemUwOwotICAgICAgICB5
eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotICAgICAgICBicmVhazsK
LSAgICAgICAgICB9Ci0gICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0g
ICAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7Ci0g
ICAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICAgIHl5
c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZp
eCk7Ci0gICAgICAgIHl5cHJlZml4ID0geXlvcjsKLSAgICAgIH0KLQotICAgICAgeXlmID0gWVlf
KHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKLSAg
ICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5eXNpemUg
PSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotICAgIHJldHVybiBZWVNJ
WkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotICAgIHsKLSAgICAgIC8qIEF2b2lk
IHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLSAg
ICAgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0
aW9uCi0gICAgICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2Yg
IiVzInMuICAqLwotICAgICAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0gICAgICBpbnQgeXlpID0g
MDsKLSAgICAgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0gICAgICAgIHsKLSAgICAg
ICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10p
OwotICAgICAgICAgIHl5ZiArPSAyOwotICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmKys7Ci0gICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICAgIHJldHVybiB5eXNpemU7Ci0gICAgfQotfQotI2VuZGlmIC8qIFlZ
RVJST1JfVkVSQk9TRSAqLwotDAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlz
IHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50
IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBwcDo6Q29u
dGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoeXltc2csIHl5
dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIGNvbnN0IGNoYXIgKnl5
bXNnOwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0gICAgWVlMVFlQ
RSAqeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAg
WVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRl
eHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1C
T0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dp
dGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0K
LX0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAg
Ki8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNl
Ci1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0j
aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAo
cHA6OkNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0j
ZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0tLS0tLS0tLS0uCi18
IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlICh2b2lk
ICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKLSAg
ICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0g
Ki8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFy
c2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29udGV4dCkK
LSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFs
dWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBO
dW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0vKiBMb2Nh
dGlvbiBkYXRhIGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2M7
Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyogTnVt
YmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICov
Ci0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5h
bCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4gPSAwOwotI2lm
IFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRz
IGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBjaGFyICp5eW1z
ZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsK
LSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNz
JzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2
YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIg
dG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93
Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0
ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlw
ZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhd
OwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0gIC8qIFRo
ZSBsb2NhdGlvbiBzdGFjay4gICovCi0gIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwotICBZ
WUxUWVBFICp5eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotICAvKiBUaGUgbG9jYXRp
b25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gIFlZTFRZUEUgeXll
cnJvcl9yYW5nZVsyXTsKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZ
WUlOSVRERVBUSDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGlj
IHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAqLwot
ICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0gIC8qIFRoZSBudW1iZXIgb2Yg
c3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVy
byB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsK
LQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3Rh
dGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZ
WUVNUFRZOyAgICAgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0
aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2
ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZl
ciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0g
IHl5bHNwID0geXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyogSW5pdGlhbGl6ZSB0
aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAqLwotICB5eWxsb2Mu
Zmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2Nv
bHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotICBnb3RvIHl5c2V0c3Rh
dGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlz
IGZvdW5kIGluIHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwg
Y2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwot
ICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVu
cyB0aGUgc3RhY2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9
IHl5c3RhdGU7Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAg
ewotICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tz
LCBpbiBlbGVtZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3Mg
KyAxOwotCi0jaWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotICAgIC8qIEdpdmUgdXNlciBhIGNo
YW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAgICB0aGVz
ZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAg
bWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgeXl0eXBlX2ludDE2
ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotCi0gICAgLyogRWFj
aCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0g
ICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8g
YmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywg
YnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1h
Y3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAg
ICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAgICAgJnl5
dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAmeXlsczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0gICAgeXls
cyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5eXZzID0geXl2czE7Ci0gICAgICB9
Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0g
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQgdGhlIHN0
YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXpl
KQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAg
ICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFY
REVQVEg7Ci0KLSAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1
bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FM
TE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAg
ICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLSAg
ICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsK
LSMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAg
ICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYKLSNlbmRpZiAvKiBubyB5
eW92ZXJmbG93ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5
eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0g
MTsKLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8g
JWx1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKLQot
ICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsK
LSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5
c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1
cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBw
cm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwot
Ci0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0
byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAo
eXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93
biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAq
LwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxv
b2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXlj
aGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAg
ICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
Tm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJO
ZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8q
IElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVj
ZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5
eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tb
eXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5
bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09
IFlZVEFCTEVfTklORikKLSAgICBnb3RvIHl5ZXJybGFiOwotICAgICAgeXluID0gLXl5bjsKLSAg
ICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZ
WUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIg
dGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1
cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2Vu
LiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAm
eXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBl
b2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0K
LSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gICorK3l5bHNwID0geXls
bG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRo
ZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlkZWZh
dWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAwKQotICAgIGdv
dG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVy
IG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXlyMlt5eW5dOwotCi0g
IC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0
aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93
aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJlaGF2aW9yIGlzIHVu
ZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQu
ICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJz
ZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJuaW5nIHRoYXQg
WVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFsID0geXl2c3BbMS15
eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5
eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsK
LSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAg
IC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3Iq
IG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgp
LCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmJlZ2luKCksICh5eXZzcFsoMSkgLSAoMildLnRs
aXN0KS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICBjb250ZXh0
LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDMpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjpr
VHlwZU9iaiwgKHl5dnNwWygxKSAtICgzKV0uc3ZhbCksIE5VTEwsICh5eXZzcFsoMikgLSAoMyld
LnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAg
ICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDYpXSkuZmlyc3RfbGluZSwg
cHA6Ok1hY3JvOjprVHlwZUZ1bmMsICh5eXZzcFsoMSkgLSAoNildLnN2YWwpLCAoeXl2c3BbKDMp
IC0gKDYpXS50bGlzdCksICh5eXZzcFsoNSkgLSAoNildLnRsaXN0KSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDExOgotCi0gICAgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1h
Y3JvKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICh5
eXZzcFsoMikgLSAoMyldLnRsaXN0KSA/IHRydWUgOiBmYWxzZSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhj
b250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkp
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgcHVz
aENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZz
cFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE1Ogot
Ci0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQotICAgIHsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgIHBvcENvbmRpdGlv
bmFsQmxvY2soY29udGV4dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIzOgotCi0g
ICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI1Ogot
Ci0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI2
OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygx
KSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwp
KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0gICAgewotICAgICAgICAo
eXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgzKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwu
dGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDMpIC0gKDMpXSkuZmlyc3Rf
bGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygzKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBu
ZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5
dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyOToK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0
KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2
YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxp
c3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZz
cFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5
eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6
Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgewotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgKHl5dnNw
WygxKSAtICgxKV0uaXZhbCksIE5VTEwpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAz
NjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3Bb
KDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5z
dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM3OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9s
aW5lLCBGTE9BVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0g
bmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwg
KHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAz
OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ1snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NDA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICddJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDQxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA0MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNDM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcoJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDQ0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA0NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3snOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNDY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd9JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDQ3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICctJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDUwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyonOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICclJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA1NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3wnOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcmJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDU2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfic7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz0nOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICchJzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDU5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOic7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzsnOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcsJzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPyc7IDt9
Ci0gICAgYnJlYWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCi0KLSAgICAgIGRl
ZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFb
eXluXSwgJnl5dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4g
PSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2
YWw7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBv
ZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRv
LCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAg
IG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0
ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0
ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAg
ICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRl
ZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24g
ZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwoteXllcnJsYWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJv
ciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAg
ICAgICsreXluZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5
bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAgewotICAg
IFlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwot
ICAgIGlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSkKLSAgICAgIHsKLSAgICAgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNp
emU7Ci0gICAgICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTTsKLSAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAgICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOwotICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5
YWxsb2MpOwotICAgICAgICBpZiAoeXltc2cpCi0gICAgICAgICAgeXltc2dfYWxsb2MgPSB5eWFs
bG9jOwotICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICB5eW1zZyA9IHl5bXNnYnVm
OwotICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAgICAgICAgICB9Ci0g
ICAgICB9Ci0KLSAgICBpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0g
ICAgICB7Ci0gICAgICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5
Y2hhcik7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5bXNnKTsKLSAgICAg
IH0KLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yIikpOwotICAgICAgICBpZiAoeXlzaXplICE9IDApCi0gICAgICAg
ICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0K
LQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAz
KQotICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAg
ICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBp
ZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAg
ICAgWVlBQk9SVDsKLSAgICB9Ci0gICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAo
IkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYywgY29udGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgIH0KLSAgICB9Ci0K
LSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0
aW5nIHRoZSBlcnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJy
b3JsYWI6Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNv
ZGUgbmV2ZXIgaW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0
aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAqLwotICBpZiAoLypD
T05TVENPTkQqLyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgeXllcnJvcl9yYW5nZVsw
XSA9IHl5bHNwWzEteXlsZW5dOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0
aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0g
IFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3Ig
YW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsg
IC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9y
ICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoeXlu
ICE9IFlZUEFDVF9OSU5GKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJPUjsKLSAgICAgIGlm
ICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikK
LSAgICAgICAgewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAgICAgICAgICBpZiAo
MCA8IHl5bikKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAgIC8qIFBv
cCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRv
a2VuLiAgKi8KLSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJPUlQ7Ci0KLSAgICAg
IHl5ZXJyb3JfcmFuZ2VbMF0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBv
cHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0
KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlG
SU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsKLQotICB5eWVycm9y
X3JhbmdlWzFdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3
b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0Mg
aXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJy
b3JfcmFuZ2UgLSAxKSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogU2hpZnQgdGhl
IGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3Nb
eXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5bmV3c3Rh
dGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFj
Y2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290
byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3Rv
IHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5
IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5eWVycm9yICgmeXls
bG9jLCBjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5cmVzdWx0ID0gMjsK
LSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoKLSAgaWYgKHl5Y2hh
ciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFu
dXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUg
cnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQ
VC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5
c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAo
IkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXls
c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92
ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0j
ZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAg
IFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVz
ZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLXZvaWQgeXll
cnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29u
dGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4
dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMp
ID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwX3RhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVmODA2
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8q
IEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRv
biBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5
cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24s
IHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBh
bGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsK
LSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24n
dCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBt
b2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJu
YXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tl
bGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNw
ZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJl
c3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0
aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8q
IFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQot
ICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBh
bmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5
eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0g
ICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZO
REVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwK
LSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9F
UlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9O
ID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwK
LSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjcz
LAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAot
ICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2Rl
ZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2
MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZp
bmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5E
SUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVm
aW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUg
SEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVG
SU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NP
TlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklF
UiAyNzYKLQotCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBF
X0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwot
ICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9r
ZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0KLSAgICBZ
WVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJl
IHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZ
WVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUg
JiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUK
LXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xp
bmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlM
VFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZ
UEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgot
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3MTY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCkBAIC0wLDAg
KzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21tb24gcHJlcHJvY2Vz
c29yIHV0aWxpdGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisKKy8vIEEgbWFjcm8g
dG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMK
Ky8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEg
Y2xhc3MuCisjZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAor
ICBUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwKKyAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1BQVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBkMWNlNTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gc3RsX3V0aWxzLmg6
IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0jaWZuZGVmIENPTU1PTl9TVExVVElMU19IXwotI2Rl
ZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBEZWxl
dGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgb3BlcmF0b3IoKSAoVCB4KSB7
IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3QgRGVsZXRlU2Vjb25kCi17Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKHN0ZDo6cGFpcjxBLCBCPiYg
eCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
Ly8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzYTk0MS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tl
bl90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotI2RlZmluZSBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0K
LSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
cmVwcm9jZXNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3ByZXByb2Nlc3MuaAppbmRleCA4OGQxOTZmLi4xNTA1NmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3ByZXByb2Nlc3MuaApAQCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7
CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNw
cCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1p
bnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20o
QXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKaW5kZXgg
NjBiNjZiZC4uYWQ0M2Y5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKQEAgLTU5LDYgKzU5LDcg
QEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogI2VuZGlmCiAKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCIKICNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAKIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsK
QEAgLTY2LDYgKzY3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgewogICAgIGNo
YXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0aWMgaW50IFNjYW5Gcm9tU3RyaW5nKGNv
bnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlw
ZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVPRjsKQEAgLTczLDcgKzc2LDcgQEAgc3Rh
dGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogCiBz
dGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAm
ZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0geyAwLCAm
ZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKIAogc3RhdGljIGludCBieXRlX3Nj
YW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwogCkBAIC0xMjYsNiArMTI5LDI1
IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJlZUNQUCgpKTsKIH0KIAor
Ly8gRGVmaW5lIHRoaXMgdG8gMSB0byB1c2UgdGhlIG5ldyBsZXhlci4KKyNkZWZpbmUgQ1BQX1VT
RV9ORVdfTEVYRVIgMAorCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQor
eworI2lmIENQUF9VU0VfTkVXX0xFWEVSCisgICAgSW5wdXRTcmMqIGluID0gTGV4ZXJJbnB1dFNy
Yyhjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIGlmICghaW4pIHJldHVybiAxOworICAgIGNw
cC0+Y3VycmVudElucHV0ID0gaW47CisjZWxzZQorICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Cisg
ICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50
OworICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBTY2FuRnJvbVN0cmluZyhzdHJp
bmdbMF0pOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBzdHJfZ2V0Y2goKQog
ICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmgKaW5kZXggMjMzZDFkYy4uYjY3YzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmgKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNy
YzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhl
IGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAgICAgIC8v
IFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50
IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiBpbnQgY2hlY2tfRU9GKGludCk7
ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQ
UEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8g
dGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIg
Kik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9n
CiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7CiB2
b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCmluZGV4IGMxOWY3
OWMuLjIzMjAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCkBAIC0xMDUsNyArMTA1LDcgQEAg
U3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1l
LCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNj
b3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpMb29rVXBM
b2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7CiBTeW1ib2wgKkxvb2tVcFN5bWJv
bChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Ci12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Kik7Cit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7CiAKIAogI2VuZGlmIC8v
ICFkZWZpbmVkKF9fU1lNQk9MU19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5kZXggZDY1OGMxMi4u
Yjk0YzA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgi
CkBAIC0yNjUsNiArMjY2LDggQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlz
dHlwZXBwICogeXlsdmFscHApCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsg
MV07CiAgICAgaW50IGx0b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFj
Y3VtOworICAgIGNoYXIgY2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwog
ICAgIGlmIChsdG9rZW4gPj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tl
bihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICAgICBsZW4gPSAw
OworCSAgICBhY2N1bSA9IDA7CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAg
ICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4r
K10gPSBjaDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewogICAgICAgICAgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2
OwogICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiYXNlID0gODsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFN
RV9MRU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7CisgICAg
ICAgICAgICAgICAgaWYgKGlzZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwg
PSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCisgICAg
ICAgICAgICAgICAgICAgIGNoX3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7CisKKyAgICAg
ICAgICAgICAgICBpZiAoY2hfdmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBj
aDsKKyAgICAgICAgICAgICAgICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKKyAgICAg
ICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdc
MCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFt
ZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9u
YW1lKTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIHN5bWJvbF9u
YW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQg
PSBsUmVhZEJ5dGUocFRvayk7CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lkIER1bXBUb2tlblN0
cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAg
ICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAg
ICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwg
IiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAg
ICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIs
IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJs
ZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDUFBfRkxPQVRDT05TVEFOVDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2
YWxwcC0+c2NfZnZhbCk7CkBAIC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0o
RklMRSAqZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodG9rZW4gPj0g
MTI3KQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhh
dGFibGUsIHRva2VuKSk7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3Ry
KSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAg
ICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5oCmluZGV4IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aApAQCAtNDgsNiArNDgsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUg
X19UT0tFTlNfSCAxCiAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlYjU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAKQEAgLTAsMCArMSw4NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKwor
Ly8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUg
b2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBjYW4gdmFyeSBi
YXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3Vs
ZCByZXN0cmljdCB0aG9zZSBhcyB3ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQor
eworICAgIG1OdW1FcnJvcnMgPSAwOworCisgICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVw
ZW5kZW5jeSBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxs
cyByaWdodCBub3csCisgICAgLy8gc28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgorICAg
IHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisKKyAgICAvLyBT
dGFydGluZyBmcm9tIGVhY2ggc2FtcGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGgg
YW5kIGdlbmVyYXRlIGFuIGVycm9yIGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBhIG5vZGUgd2hl
cmUgc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBmb3IgKFRH
cmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxl
clN5bWJvbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsK
KyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5
bWJvbCA9ICppdGVyOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc2FtcGxlclN5
bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMo
KTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCog
ZnVuY3Rpb25DYWxsID0gKml0ZXI7CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5n
ZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1
c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAgfQorfQorCit2
b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVy
bU5vZGUqIG5vZGUpCit7CisgICAgKyttTnVtRXJyb3JzOworICAgIG1TaW5rLnByZWZpeChFUHJl
Zml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Cit9CisKK3Zv
aWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1
bWVudCogcGFyYW1ldGVyKQoreworICAgIC8vIEZJWE1FKG12dWpvdmljKTogV2Ugc2hvdWxkIHJl
c3RyaWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGJlaW5nIHRleHR1cmUgY29vcmRp
bmF0ZXMgCisgICAgLy8gaW4gYWxsIGF2YWlsYWJsZSBzYW1wbGluZyBvcGVyYXRpb25zIHN1cHBv
cnRlZCBpbiBHTFNMIEVTLgorICAgIC8vIFRoaXMgaW5jbHVkZXMgb3ZlcmxvYWRlZCBzaWduYXR1
cmVzIG9mIHRleHR1cmUyRCwgdGV4dHVyZUN1YmUsIGFuZCBvdGhlcnMuCisgICAgaWYgKHBhcmFt
ZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSAhPSAidGV4dHVyZTJEKHMy
MTt2ZjI7IiB8fAorICAgICAgICBwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkgIT0gMSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1
bmN0aW9uQ2FsbCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24g
YSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIHNlY29uZCBhcmd1bWVudCIKKyAg
ICAgICAgICA8PCAiIG9mIGEgdGV4dHVyZTJEIGNhbGwuXG4iOworfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKQoreworICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rpb24o
KSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKK30KKwordm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkKK3sKKyAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7CisgICAgbVNpbmsg
PDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVk
IGluIGEgbG9vcCBjb25kaXRpb24uXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQorewor
ICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7CisgICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgorICAgICAgICAgIDw8IGxv
Z2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkzMDc5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8K
KworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAg
IDogbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVu
Zm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpOworICAgIHZv
aWQgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKTsKKworCVRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJy
b3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRf
U0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRjNmNmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKQEAgLTAsMCArMSwxNyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLnByZWZp
eChFUHJlZml4RXJyb3IpOworICAgICAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkp
OworICAgICAgICBtU2luayA8PCAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4
IHNoYWRlcnMuXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWEwNWZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hB
REVSX1RJTUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NI
QURFUl9USU1JTkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50
ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQor
ICAgICAgICAsIG1OdW1FcnJvcnMoMCkge30KKworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9u
cyhUSW50ZXJtTm9kZSogcm9vdCkgeyByb290LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBu
dW1FcnJvcnMoKSB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCopOworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBt
U2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElN
SU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAppbmRleCA2YTVjZmQzLi4wY2MwYjkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKQEAg
LTk5Miw2ICs5OTIsMjIgQEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQog
ICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0RYVDUpKTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVz
IGluIERpcmVjdDNEOQorLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVu
c3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUgaHR0cDovL2FyYXMt
cC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6OmdldERlcHRoVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5
TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVu
dERpc3BsYXlNb2RlKTsKKworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOwor
ICAgIGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFS
R0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAgcmV0dXJuIGludHog
JiYgbnVsbDsKK30KKwogYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9v
bCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJU1BMQVlNT0RFIGN1
cnJlbnREaXNwbGF5TW9kZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBPT0wgRGlzcGxheTo6
Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKICAgICByZXR1cm4gRDNEUE9PTF9ERUZB
VUxUOwogfQogCi1EM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJs
ZSkgY29uc3QKK0QzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNv
bnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKICAgICB7CkBAIC0xMDg5LDcgKzExMDUs
NyBAQCBEM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29u
c3QKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFyZW5kZXJhYmxlKQorICAg
ICAgICBpZiAoISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQpKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdF
RDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuaAppbmRleCA1MDI4NDMxLi40ZjdkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuaApAQCAtNzgsMTAgKzc4LDExIEBAIGNsYXNzIERpc3BsYXkK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwogICAg
IHZpcnR1YWwgYm9vbCBnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdl
dE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0
YW5jaW5nU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29s
KERXT1JEIHVzYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2wo
Ym9vbCByZW5kZXJhYmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxv
c3QoKTsKICAgICBib29sIGlzRGV2aWNlTG9zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKaW5kZXggMDdhZDNjZi4uY2EyY2VlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCkBAIC01NjUs
NiArNTY1LDggQEAgRUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNTc1LDYgKzU3Nyw4IEBAIElEaXJl
Y3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmIChtRGVwdGhTdGVuY2ls
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250
ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAKaW5kZXggNjZjZDVjMC4uODIwZjY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCkBA
IC0zMTAsNiArMzExLDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKICAgICAgICAgbVN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRz
RmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMp
OwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKKyAg
ICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREZXB0aFRleHR1cmVT
dXBwb3J0KCk7CiAKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURldmljZUNhcHMu
TWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwogCkBAIC00MDUsNiArNDA3LDExIEBAIHZvaWQg
Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9
IE5VTEw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCit7CisgICAg
bUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Cit9CisKIHZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRM
b3N0KCkKIHsKICAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JF
U0VUX0VYVCkKQEAgLTE2NDYsNiArMTY1MywxMiBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2
KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJ
Q0FUSU9OX1NUUkFURUdZX0VYVDoKICAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5Owog
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNf
T0VTOgorICAgICAgICAqcGFyYW1zID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JB
TV9CSU5BUllfQU5HTEU7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MzcsNiArMTc1MCw4IEBAIGJvb2wgQ29udGV4dDo6
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklD
QVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9S
TUFUU19PRVM6CisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgogICAg
ICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJh
bXMgPSAxOwpAQCAtMTgzNSwxMyArMTg1MCwzMSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVy
VGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAorICAgIC8vIGlmIHRo
ZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xv
cmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMg
c2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5k
ZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIoKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5k
ZXJidWZmZXIgZm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAg
IGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCByZW5k
ZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KCk7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9i
amVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxv
c3QKICAgICAgICAgfQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVy
VGFyZ2V0KTsKQEAgLTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVm
ZmVyU2VyaWFsID0gMDsKICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAg
IFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3Rl
bmNpbCgpOwogICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlcHRo
YnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNl
cmlhbCgpOworICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJp
YWwoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwor
ICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXIoKS0+Z2V0U2VyaWFsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBz
dGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJT
ZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4Nyw5ICsxOTIyLDE0
IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkK
ICAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBp
ZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7
CisgICAgfQorCiAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRl
clRhcmdldENoYW5nZWQpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdApAQCAtMTk2
MCwyNiArMjAwMCwyNyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdu
b3JlVmlld3BvcnQpCiAgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jt
c0RpcnR5KQogICAgIHsKICAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJl
bnRQcm9ncmFtKCk7CisgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICAgICAgR0xpbnQgaGFsZlBpeGVs
U2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAg
ICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEhhbGZQaXhlbFNp
emVMb2NhdGlvbigpOwogICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5X
aWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CiAKICAgICAgICAgLy8gVGhl
c2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06
OmxpbmtWYXJ5aW5ncygpLiBUaGUgYXBwcm9hY2ggZGVwZW5kcyBvbiBTaGFkZXIgTW9kZWwgMy4w
IHN1cHBvcnQuCi0gICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhDb29y
ZExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhD
b29yZExvY2F0aW9uKCk7CiAgICAgICAgIGZsb2F0IGggPSBtU3VwcG9ydHNTaGFkZXJNb2RlbDMg
PyBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgOiBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBm
OwogICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBm
LCBoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFgg
KyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9
OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5KTsK
KyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CiAK
LSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24o
KTsKKyAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRp
b24oKTsKICAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6
TmVhciArIHpGYXIpIC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0y
ZnYoZGVwdGgsIDEsIGR6KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihk
ZXB0aCwgMSwgZHopOwogCi0gICAgICAgIEdMaW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFtT2JqZWN0
LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpOworICAgICAgICBHTGludCBkZXB0aFJhbmdlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9h
dCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZhciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7
CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVh
ckZhckRpZmYpOwogICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CiAgICAgfQogCkBA
IC0xOTkwLDE4ICsyMDMxLDE5IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9v
bCBpZ25vcmVWaWV3cG9ydCkKIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01v
ZGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKIAogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwogCiAgICAgR0xlbnVtIGFkanVzdGVkRnJvbnRGYWNlID0gYWRq
dXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKIAotICAgIEdMaW50IGZyb250Q0NXID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xpbnQgZnJvbnRDQ1cg
PSBwcm9ncmFtQmluYXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKICAgICBHTGludCBjY3cg
PSAoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtT2JqZWN0LT5zZXRV
bmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBw
cm9ncmFtT2JqZWN0LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOworICAgIEdMaW50IHBv
aW50c09yTGluZXMgPSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigp
OwogICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAg
ICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNG
cm9udCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAx
LCAmYWx3YXlzRnJvbnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmll
ciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJvb2wgemVyb0NvbG9y
TWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7CkBAIC0yMjgwLDE4
ICsyMzIyLDIwIEBAIEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vCiB2b2lkIENvbnRleHQ6OmFwcGx5
U2hhZGVycygpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9n
cmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwo
KSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIo
KTsKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1P
YmplY3QtPmdldFBpeGVsU2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRlcigpOworICAgICAg
ICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
UGl4ZWxTaGFkZXIoKTsKIAogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNo
YWRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwot
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgICAgIHByb2dy
YW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2Vy
aWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCi0gICAgcHJvZ3JhbU9i
amVjdC0+YXBwbHlVbmlmb3JtcygpOworICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMo
KTsKIH0KIAogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRo
ZSBEaXJlY3QzRCA5IGRldmljZQpAQCAtMjMxMSwzMCArMjM1NSwzMiBAQCB2b2lkIENvbnRleHQ6
OmFwcGx5VGV4dHVyZXMoKQogdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBl
IHR5cGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFt
KCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGludCBzYW1wbGVyQ291bnQgPSAodHlwZSA9PSBTQU1Q
TEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9mIGdp
dmVuIHNhbXBsZXIgdHlwZQogICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRleHR1cmVTZXJpYWwg
PSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTIDogbUFw
cGxpZWRUZXh0dXJlU2VyaWFsVlM7CiAgICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9
PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExFUjA7Ci0gICAgaW50
IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1PYmplY3QtPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7
CisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFu
Z2UodHlwZSk7CiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXgg
PCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1
cmVVbml0ID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlcklu
ZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisgICAgICAgIGludCB0
ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBs
ZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAogICAgICAgICBp
bnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7CiAKICAgICAg
ICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJl
VHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0
eXBlLCBzYW1wbGVySW5kZXgpOworICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4
KTsKIAogICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRl
eHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGV4U2Vy
aWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwogCi0gICAgICAgICAgICBpZiAoYXBw
bGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2Vy
aWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGly
dHlJbWFnZXMoKSkKKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVy
SW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0
ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUo
KTsKIAogICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFy
YW1ldGVycygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxb
c2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJz
KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwpAQCAtMjM1MSw3ICsyMzk3LDcgQEAg
dm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FN
UF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAh
PSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMo
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIz
NjEsNyArMjQwNyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0
eXBlKQogICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIs
IGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworICAgICAgICAgICAgICAg
IGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7CiAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0yNDUxLDYgKzI0OTcsNyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3MzgsNiArMjc4NSw3IEBA
IHZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKICAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+
R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6OkdldFN0ZW5jaWxT
aXplKGRlc2MuRm9ybWF0KTsKICAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwg
c3RlbmNpbFNpemUpIC0gMTsKQEAgLTI5NTIsNyArMzAwMCw3IEBAIHZvaWQgQ29udGV4dDo6ZHJh
d0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0gICAg
aWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBp
ZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1w
bGVycyhmYWxzZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgIH0KQEAgLTMwNDIsNyArMzA5MCw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0gICAgaWYg
KCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBpZiAo
IWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVy
cyhmYWxzZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgIH0KQEAgLTM0NTIsNiArMzUwMCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1
cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKK30KKwog
Ym9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1TdXBwb3J0czMyYml0SW5kaWNlczsKQEAgLTM2NzcsNiArMzczMCw3IEBAIHZvaWQgQ29udGV4
dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAgICAgfQogCiAgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7CisgICAgLy9tRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKIApAQCAtMzcyMCw2ICszNzc0LDExIEBAIHZvaWQgQ29u
dGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfc3RvcmFnZSAiOwogCiAgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9u
cworICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKKyAgICB9CisKICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICI7CiAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQogICAgIHsKQEAgLTQwNDMsNyArNDEwMiwx
MyBAQCB2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3Jj
WTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMQogCiAgICAgICAgIGlmIChibGl0RGVwdGhTdGVu
Y2lsKQogICAgICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0
cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSog
ZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisK
KyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZERl
cHRoU3RlbmNpbCwgTlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsK
KworICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgICAgICAgICAg
ZHJhd0RlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwogCiAgICAgICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCiAgICAgICAgICAgICB7CkBAIC00MTE1LDYgKzQxODAsOCBAQCBHTGVudW0gVmVydGV4
RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIFRyYW5zbAogICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRU
UklCUyArIDFdOwogICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBd
OwogCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpKyspCiAgICAgewogICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCkBAIC00MTcw
LDcgKzQyMzcsNyBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJh
dGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbAogICAgICAgICAgICAgZWxlbWVu
dC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKICAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhv
ZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0g
RDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9
IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgICAgICBlbGVtZW50LT5Vc2Fn
ZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsKICAgICAgICAgICAg
IGVsZW1lbnQrKzsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKaW5kZXggOGRjY2YwZi4uYzc4M2Y2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKQEAgLTI1
MSw3ICsyNTEsNyBAQCBjbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCiAgIHByaXZhdGU6CiAg
ICAgVUlOVCBtTWF4THJ1OwogCi0gICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRS
SUVTID0gMTYgfTsKKyAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAz
MiB9OwogCiAgICAgc3RydWN0IFZCRGF0YQogICAgIHsKQEAgLTI4Miw2ICsyODIsNyBAQCBjbGFz
cyBDb250ZXh0CiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKICAgICB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cisg
ICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0Nv
bnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBAIC00OTUsNiArNDk2LDcg
QEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1
cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdDsKKyAgICBi
b29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJp
dEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNv
bnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CkBAIC02MTcsNiArNjE5
LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wg
bVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c0RlcHRo
VGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAgICAgaW50IG1OdW1D
b21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXggNzMwZmZmYy4uZGNkODI2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFt
ZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigp
CiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURlcHRoYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAg
ICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAq
RnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRs
ZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6Omdl
dFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2lu
dGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1
ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRo
U3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVw
dGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJidWZmZXIg
KkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1cm4gbVN0ZW5jaWxidWZm
ZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXROdWxs
Q29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBtTnVsbENv
bG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0g
Z2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgeworICAgICAg
ICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBGQk8uIik7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGggID0gZGVw
dGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+
Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAgICAgd2lkdGggIT0g
bnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0SGVpZ2h0
KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigwLCBuZXcg
Q29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAgICAgICBtTnVsbENv
bG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIG51
bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKCkK
IHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsyNzIsMTEgQEAgYm9v
bCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAgICBpbnQgc2FtcGxl
cyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwogCiAgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEgKzMwMSwzOCBAQCBH
TGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldEludGVybmFs
Rm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0
ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICBpZiAoSXNDb21w
cmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0
ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNF
X0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKChkeDJl
czo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYgIWdldENv
bnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8IAotICAgICAg
ICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3Jt
YXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVz
KCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZvcm1hdCkg
JiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fAorICAg
ICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRl
eHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
PT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVzOjpJc0RlcHRoRm9y
bWF0KGQzZGZvcm1hdCkgfHwgZHgyZXM6OklzU3RlbmNpbEZvcm1hdChkM2Rmb3JtYXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRo
KCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAg
c2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRU
QUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAg
ICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAg
R0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZl
clR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9
IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0g
ICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAg
ICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGgg
PT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQog
ICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAg
ICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisg
ICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xF
X2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1w
bGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBo
ZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0g
ZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZm
ZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVm
ZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlw
ZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBH
TF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQotCiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBn
ZXRTdGVuY2lsYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4
LDE5ICs0MTEsNDUgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobVN0ZW5jaWxidWZm
ZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGgg
PSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5k
ZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGgg
IT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+
Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1T
dGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNk
Zm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8v
IHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAg
ICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0
dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgy
ZXM6OklzU3RlbmNpbEZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0x
KQorICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAg
IHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9
IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IHN0ZW5j
aWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBzdGVuY2ls
YnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM3OCwxNCArNDU3LDE3IEBAIEdM
ZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUiAmJiBtU3RlbmNpbGJ1ZmZl
clR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIC8vIGlmIHdlIGhhdmUgYm90aCBhIGRlcHRo
IGFuZCBzdGVuY2lsIGJ1ZmZlciwgdGhleSBtdXN0IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdAor
ICAgIC8vIHNpbmNlIHdlIG9ubHkgc3VwcG9ydCBwYWNrZWRfZGVwdGhfc3RlbmNpbCBhbmQgbm90
IHNlcGFyYXRlIGRlcHRoIGFuZCBzdGVuY2lsCisgICAgaWYgKGRlcHRoYnVmZmVyICYmIHN0ZW5j
aWxidWZmZXIgJiYgKGRlcHRoYnVmZmVyICE9IHN0ZW5jaWxidWZmZXIpKQogICAgIHsKLSAgICAg
ICAgaWYgKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTIHx8Ci0gICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAgICBkZXB0aGJ1ZmZl
ci0+Z2V0U2VyaWFsKCkgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAg
fQorICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgfQorCisg
ICAgLy8gd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBs
ZXRlCisgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwogICAgIH0KIAogICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAppbmRleCBiNzNmOWEwLi4xNGQ5
YzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgUmVu
ZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhi
dWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICBSZW5k
ZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcigpOwogCiAgICAgR0xlbnVtIGdldENvbG9yYnVm
ZmVyVHlwZSgpOwogICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKTsKQEAgLTczLDYgKzc0
LDggQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwog
ICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwog
CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtTnVsbENvbG9yYnVmZmVyUG9pbnRl
cjsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZl
cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uY3BwCmluZGV4IGE1ZTM4YmYuLjE4NGEwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApAQCAtOCw2ICs4LDcgQEAKIC8vIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAu
MyBwYWdlIDI4LgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAK
QEAgLTE3LDY0ICsxOCwyNCBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQo
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBnbAogewogdW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFs
ID0gMTsKLWNvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3Ry
aW5nIHN0cihpbnQgaSkKLXsKLSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZm
ZXIsICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0o
R0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRl
Y29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBi
eXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9
IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwot
ICAgIGRpcnR5ID0gdHJ1ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0
ZVtdIGRhdGE7Ci19CiAKLWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCitBdHRyaWJ1dGVCaW5kaW5n
czo6QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMs
ICJhcl8iKSA9PSAwOwogfQogCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25z
dCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQg
aW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBl
bGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmli
dXRlQmluZGluZ3MoKQogewogfQogCiBQcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAq
bWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFu
ZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKIHsKLSAgICBtRGV2aWNlID0gZ2V0
RGV2aWNlKCk7CiAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKICAgICBtVmVydGV4U2hhZGVy
ID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICBtQ29uc3Rh
bnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICBtVmFsaWRhdGVk
ID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQorICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsK
ICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KICAgICBtUmVmQ291bnQgPSAwOwogfQogCkBA
IC0xNTIsMTcgKzExMyw3IEBAIGludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgp
IGNvbnN0CiAgICAgcmV0dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNo
YWRlciA/IDEgOiAwKTsKIH0KIAotSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQ
aXhlbFNoYWRlcigpCi17Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Ci19Ci0KLUlEaXJl
Y3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCi17Ci0gICAgcmV0
dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOwotfQotCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVM
b2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIEF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpu
YW1lKQogewogICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKICAgICB7CkBAIC0x
NzUsMjY0OSArMTI2LDI4MCBAQCB2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihH
THVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogfQogCi1HTHVpbnQgUHJvZ3Jh
bTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6
YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsK
LSAgICBpZiAobmFtZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKKyAgICBtQXR0cmlidXRlQmluZGlu
Z3MuYmluZEF0dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKIH0KIAotaW50IFByb2dyYW06
OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQorLy8gTGlua3MgdGhlIEhMU0wg
Y29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIg
dmFyeWluZ3MsCisvLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0
aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBsaXN0IG9mIHVuaWZv
cm1zCit2b2lkIFByb2dyYW06OmxpbmsoKQogewotICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+
PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAKLSAgICBy
ZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworICAgIHVubGluayhmYWxzZSk7
CisKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OworICAgIGlmICghbVBy
b2dyYW1CaW5hcnktPmxpbmsobUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1W
ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsKKyAgICB9CiB9CiAK
LS8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQu
Ci1HTGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCitp
bnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpIGNvbnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGZvciAoaW50IGxvY2F0
aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCiAgICAg
ewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNh
bXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIHJldHVybiBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdb
bG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4gLTE7CiB9CiAKLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCisvLyBSZXR1cm5zIHRoZSBw
cm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9y
IGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiB7Ci0g
ICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKICAgICB7Ci0gICAg
ICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXpl
b2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotCi0gICAgICAgIGlmICht
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgaWYgKG1GcmFnbWVudFNo
YWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBs
ZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICBtRnJh
Z21lbnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5V
TEw7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVY
OgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXpl
b2YobVNhbXBsZXJzVlNbMF0pKTsKIAotICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUpCisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsK
KyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAobG9n
aWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENv
bnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICBpZiAo
bVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0
OworICAgICAgICBkZWxldGUgbVByb2dyYW1CaW5hcnk7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5
ID0gTlVMTDsKICAgICB9Ci0KLSAgICByZXR1cm4gLTE7CiB9CiAKLS8vIFJldHVybnMgdGhlIHRl
eHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKLS8vIGlu
ZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hh
ZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVy
VHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorUHJvZ3JhbUJpbmFyeSogUHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAg
ICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNp
emVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0gICAgICAgIEFTU0VS
VChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZF
UlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykv
c2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5k
ZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gVEVYVFVSRV8yRDsKKyAgICByZXR1cm4gbVByb2dyYW1CaW5hcnk7CiB9CiAK
LUdMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQordm9p
ZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
CiB7Ci0gICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisgICAgdW5saW5rKGZhbHNlKTsK
KyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Cit9CiAKLSAgICAvLyBTdHJpcCBh
bnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAg
ICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3Nl
ID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6
bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNj
cmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1l
LmVyYXNlKG9wZW4pOwotICAgIH0KK3ZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCit7CisgICAgbVJl
ZkNvdW50LS07CiAKLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxl
dGVTdGF0dXMpCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFt
ZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwot
ICAgICAgICB9CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRs
ZSk7CiAgICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZv
cm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit2
b2lkIFByb2dyYW06OmFkZFJlZigpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICBt
UmVmQ291bnQrKzsKK30KIAotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KK3Vuc2ln
bmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZWZD
b3VudDsKK30KIAotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwordW5zaWduZWQgaW50IFByb2dy
YW06OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9CiAKLSAgICAg
ICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpp
c3N1ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CiAKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQoraW50IFByb2dyYW06
OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdl
dEluZm9Mb2dMZW5ndGgoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlm
IChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xv
Zyk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAg
ICBlbHNlCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChi
dWZTaXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAg
ICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwot
ICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAg
ICAgICAgICAgdiArPSAyOworICAgICAgICAgICAgaW5mb0xvZ1swXSA9ICdcMCc7CiAgICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CiAKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAg
ICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKmxlbmd0aCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXpl
aSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKIHsKLSAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworICAgIGludCB0b3RhbCA9IDA7CiAKLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIGlmIChtVmVydGV4
U2hhZGVyKQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7
Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAo
dG90YWwgPCBtYXhDb3VudCkKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlsw
XTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0g
PSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBt
VmVydGV4U2hhZGVyLT5nZXRIYW5kbGUoKTsKICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworICAgICAgICB0b3RhbCsrOwor
ICAgIH0KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAg
IGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwgPCBtYXhDb3Vu
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzaGFkZXJz
W3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KKworICAg
ICAgICB0b3RhbCsrOwogICAgIH0KLSAgICBlbHNlIAorCisgICAgaWYgKGNvdW50KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAqY291bnQgPSB0b3RhbDsKICAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9ncmFt
OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1
ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIGlm
IChidWZzaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
ZmxvYXQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3Vu
dCk7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOwogICAgIH0K
LSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworfQogCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9CitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVB
dHRyaWJ1dGVDb3VudCgpCit7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwogICAg
IH0KLSAgICBlbHNlIAorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dp
ZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExl
bmd0aCgpCiB7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNX
aWR0aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hl
aWdodCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBz
cmNXaWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJp
Z2h0IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7
IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAq
IHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CiAgICAgfQotICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3ZvaWQgUHJvZ3Jh
bTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0g
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4
LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorICAgICAgICBpZiAoYnVm
c2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAg
ICB9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAg
ICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQs
IHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAg
ICAgICpzaXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOwogICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRf
TUFUMykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50
KCk7CiAgICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7
Ci0gICAgICAgIHZhbHVlICs9IDk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwogfQogCi0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCitHTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKIHsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgaWYgKG1Q
cm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICB9Ci0K
LSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorfQogCi0g
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Cit2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigp
Cit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jv
b2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
RGVsZXRlU3RhdHVzOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorYm9vbCBQcm9ncmFtOjppc1Zh
bGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5p
c1ZhbGlkYXRlZCgpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8
fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKLSAgICAg
ICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBz
aXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAgICAgICAg
ICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
M2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMaW50KSAqIDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAgdiwg
NCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQot
ICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFy
Z2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRC
eXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAg
IGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9y
bS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHRyYW5z
cG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bvc2VNYXRy
aXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZs
b2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVu
aWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25l
bnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlm
b3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVt
Y3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50Owot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAv
LyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVu
b3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMg
PSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAo
KmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0gICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAg
ICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFt
cywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xp
bnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Y291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBl
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVy
bmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdM
aW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoK
LSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xp
bnQpLAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAgICAgICBt
VW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBsaWVzIGFs
bCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0
ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUg
PSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3Jt
bmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZF
QzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBh
cHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlV
bmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlm
b3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFj
aGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFt
Ojpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwg
SUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0g
ICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0g
ICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAo
cGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsK
LSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1J
WkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRl
bXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIp
ICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wp
OwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3Ry
KCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
ZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJj
ZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0g
ICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21w
aWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9y
TWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hh
ciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBwZW5kVG9J
bmZvTG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwot
ICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVzc2FnZS0+
UmVsZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50
VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSksIGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0vLyBQYWNr
cyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdv
cml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBl
bmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQg
dmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbTo6cGFj
a1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250ZXh0ICpj
b250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9
IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcr
KykKLSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KSAqIHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2
YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5
XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYm
IG0gPT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4
VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5Kysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8g
MCA6IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
bnQgY29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4Kysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3Bh
Y2VbeF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVt
bl0pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5
IDwgciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFy
eWluZy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0g
ICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsK
LQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0
dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsK
LQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7
Ci0gICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1ty
XVsyXSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMr
KzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8
IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKLSAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0gICAgICAg
IGZyYWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0g
bVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAg
IHZ0eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0g
ICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZh
cnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAg
IGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAocmVnaXN0
ZXJzIDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBX
cml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29u
dGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBv
cnRzU2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29u
dGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09
IG1heFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0g
ICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQg
dG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwot
Ci0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmVuZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFt
ZSA9PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0
cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygi
VHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFn
bWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBv
dXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBp
bnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1h
dGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQg
dmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFt
ZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAi
VEVYQ09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAg
ICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAg
ICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJp
YnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1
dGUtPnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
VmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRF
WENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGlj
SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAg
IG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtc
biI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAg
ICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1b
Ml0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6
ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAo
bUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBz
dHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExT
TCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
IlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0
ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAi
ID0gIjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4g
MSkgICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRy
YW5zcG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIg
KyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQot
ICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBW
U19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRp
b24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0g
Z2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlv
bi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYgKG1WZXJ0
ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4w
LCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4i
OwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAg
IHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xf
UG9zaXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlm
ICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
ajsKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBz
dHIocik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNl
OyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9
ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBt
VmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsg
Il0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAg
ICAgICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0g
ICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWlu
ZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsK
LSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlp
bmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtc
biI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtc
biI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1G
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7
Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAg
ICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9S
O1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAg
ICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEu
MCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbTMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhlIHJlbmRl
ciB0YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAg
ICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54
ICsgMC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55
ID0gZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0
aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2Vl
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9D
b29yZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQu
eSArIGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcp
ICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAg
ICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMg
fHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0g
MC4wKSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFn
bWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBp
ZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsg
aSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIg
KyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJh
eSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVs
SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCAr
PSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICBtUGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xu
IgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQ
VVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAg
ICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wg
Y29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIg
dmFyeWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0
aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZv
cm1zCi12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAgaWYgKCFt
RnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZl
cnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBtVmVy
dGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1Zhcnlp
bmdzKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4dCAqY29u
dGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29u
dGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7Ci0gICAg
Y29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMo
KSA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkg
PSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRv
QmluYXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQ
Uyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERX
T1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxl
KTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hh
ZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1
dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNV
Q0NFRURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgp
OwotICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhCaW5hcnkg
PSBOVUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1WZXJ0
ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1D
b25zdGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50
VGFibGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMg
YWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJl
IHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0
aW9uCi0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7
Ci0gICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJk
eF9Gcm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIG1MaW5r
ZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRGV0ZXJt
aW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVy
dGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkK
LXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0
dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJl
Z2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5k
aW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8v
IFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0
aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRl
ICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUu
Y19zdHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxv
Y2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZv
ciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRB
dHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7
Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMo
JnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAg
IGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhf
VkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1l
LmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8g
bGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWls
YWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRp
Y0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBp
bnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93
czsgcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJ
bmRleCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmlu
ZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0u
ZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9y
bXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFO
VFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05TVEFOVF9E
RVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsK
LQotICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRl
eCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykK
LSAgICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxl
LT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFu
dERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50SGFuZGxl
LCBjb25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFkZHMg
dGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIg
dG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVu
aWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShj
b25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0Mg
JmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29u
c3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFu
dERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0g
bUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlw
dGlvbi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1Q
TEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVy
SW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
bUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAg
ICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9D
VUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNl
ZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRj
aChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NU
UlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRl
eCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUlu
ZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmll
bGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUg
ZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRs
ZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxk
RGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9
IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJs
ZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVz
Y3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4
KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0o
ZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9u
Lk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNhc2UgRDNE
WFBDX1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAgICAgY2Fz
ZSBEM0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25zdGFudERl
c2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAg
IFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9u
YW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50IGxvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51bSB0eXBl
ID0gdW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplQ29u
c3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQUyk7Ci0g
ICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMsIG1Db25z
dGFudFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAg
IHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1l
LCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5p
Zm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChj
b25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEQzRFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlw
dGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9P
TCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRf
VkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBE
M0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1
dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJpYnV0ZShj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJn
bF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0K
LQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICBy
ZXR1cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5jb21wYXJl
KDAsIDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigz
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dyYW06OmFw
cGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQg
d2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xf
Q09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYm
IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwKLSAgICAg
ICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvdW50
IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCA0OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpd
ID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
ICYmIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgIHsK
LSAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAg
ICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19C
T09MID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBj
b3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0Nv
dW50KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFO
VFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQot
ICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhS
U19GTE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkK
LSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBs
eVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVy
SW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRl
eHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZb
aV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25z
dCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBs
eVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOwotCi0g
ICAgICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9y
bSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
U107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9h
dCl2WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jt
bml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChm
bG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsK
LSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rv
cik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1u
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RP
UjQgKnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5k
ZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9n
cmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBw
YXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCi0vLyBtZXNzYWdlcywgc28gbGV0
cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUg
bG9nLgotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAq
bWVzc2FnZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7Ci0KLSAgICBzaXplX3Qg
Zm91bmQ7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgp
OwotICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKLQotICAgIGFw
cGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKLX0KLQotdm9pZCBQcm9ncmFtOjph
cHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAgaWYgKCFmb3Jt
YXQpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBpbmZvWzEwMjRd
OwotCi0gICAgdmFfbGlzdCB2YXJhcmc7Ci0gICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOwot
ICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKLSAgICB2
YV9lbmQodmFyYXJnKTsKLQotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOwot
Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJb
aW5mb0xlbmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZv
TG9nKTsKLSAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5mb0xl
bmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7Ci0gICAgICAgIHN0
cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOwotCi0gICAgICAgIGRlbGV0ZVtdIG1JbmZv
TG9nOwotICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3Jh
bTo6cmVzZXRJbmZvTG9nKCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBk
ZWxldGUgW10gbUluZm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0K
LS8vIFJldHVybnMgdGhlIHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBiZWZv
cmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5saW5rKGJv
b2wgZGVzdHJveSkKLXsKLSAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcgZGVzdHJ1
Y3RlZAotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRnJhZ21l
bnRTaGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobUNvbnN0YW50VGFibGVQUykKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMt
PlJlbGVhc2UoKTsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZT
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotICAgIH0KLQot
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4
KyspCi0gICAgewotICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7
Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KLQotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykK
LSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4
XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9
IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0KLSAgICB3aGlsZSAoIW1Vbmlm
b3Jtcy5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0g
ICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIG1EeERlcHRoUmFuZ2VM
b2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29yZExv
Y2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4
RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0x
OwotCi0gICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOwotCi0gICAgbVBpeGVsSExTTC5jbGVhcigp
OwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7Ci0KLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICBtTGlua2VkID0gZmFsc2U7Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6aXNMaW5rZWQoKQotewotICAgIHJldHVybiBtTGlua2VkOwotfQotCi1ib29sIFByb2dy
YW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAo
bVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dy
YW06OmFkZFJlZigpCi17Ci0gICAgbVJlZkNvdW50Kys7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9n
cmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQot
dW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
ZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAg
cmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVu
Z3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xv
ZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQotewotICAgIGludCBpbmRleCA9
IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5m
b0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7
Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3Ro
KQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KLX0KLQotdm9pZCBQcm9n
cmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQs
IEdMdWludCAqc2hhZGVycykKLXsKLSAgICBpbnQgdG90YWwgPSAwOwotCi0gICAgaWYgKG1WZXJ0
ZXhTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvdGFsKys7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlcikKLSAgICB7Ci0gICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFu
ZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChj
b3VudCkKLSAgICB7Ci0gICAgICAgICpjb3VudCA9IHRvdGFsOwotICAgIH0KLX0KLQotdm9pZCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQotewotICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0gICAgdW5zaWduZWQg
aW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKLSAg
ICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsr
OwotICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNo
YXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0K
LSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1
ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAg
ICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
ICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCi0KLSAgICAq
dHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOwotfQotCi1HTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQot
ICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsK
LX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKLXsKLSAg
ICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsg
YXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0g
ICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUu
ZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGlu
dCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBt
YXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKLX0K
LQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hh
ciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKLSAgICB1bnNp
Z25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm07Ci0g
ICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0r
KykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFyZSgw
LCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKLSAgICAgICAgewot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVVbmlmb3JtKys7
Ci0gICAgfQotCi0gICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBp
bmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotCi0gICAg
aWYgKGJ1ZnNpemUgPiAwKQotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVu
aWZvcm1zW3VuaWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0t
PmlzQXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7
Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAobGVuZ3Ro
KQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsK
LQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwotfQotCi1HTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1z
OyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKLXsKLSAgICBpbnQg
bWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jt
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9y
bUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYg
KCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlm
b3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFt
ZS5sZW5ndGgoKSArIDEpOwotICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7
ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heExl
bmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9u
KCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjppc0Zs
YWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQotewotICAgIHJlc2V0SW5mb0xvZygpOwotCi0g
ICAgaWYgKCFpc0xpbmtlZCgpKSAKLSAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJv
Z3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlk
YXRlZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBhcHBseVVuaWZv
cm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0cnVlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykK
LXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9m
IGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBp
bWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRl
UHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50
cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVu
c2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5n
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwotICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRF
WFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
cnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0
ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAo
JWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQs
IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRl
eHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMg
cmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVy
c1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsg
KytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2Fs
VGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRd
ICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJl
IGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjppbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3Rh
bnRUYWJsZSkKLXsKLSAgICBEM0RYSEFORExFIGhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENv
bnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPl9uYW1lLmNfc3RyKCkpOwotICAgIGlmICho
YW5kbGUpCi0gICAgewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAgICAg
ICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25zdGFu
dERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0gY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSAwOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6
Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJh
bmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06
OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRp
b247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQ
cm9ncmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhG
cm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uaAppbmRleCA2MTgzMGM2Li4xYjQyMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJH
TEVTVjJfUFJPR1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21w
aWxlci5oPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8
c2V0PgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDE3IEBA
IGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVy
dGV4U2hhZGVyOwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KK2NsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzCiB7Ci0g
ICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXko
KTsKLQotICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1l
OyAgIC8vIERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8g
VW5kZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAg
ICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVn
aXN0ZXJJbmZvCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0gICAgICAgIGludCBy
ZWdpc3RlckluZGV4OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OwotCi0gICAg
UmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07CisgIHB1YmxpYzoKKyAg
ICBBdHRyaWJ1dGVCaW5kaW5ncygpOworICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0vLyBT
dHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBh
cnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgotewotICAgIFVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1
bnNpZ25lZCBpbnQgaW5kZXgpOworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWlu
dCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmco
Y29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OwogCi0gICAgc3RkOjpzdHJpbmcgbmFtZTsK
LSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIHBy
aXZhdGU6CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9W
RVJURVhfQVRUUklCU107CiB9OwogCiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0NSArNDcsMTIgQEAg
Y2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKICAg
ICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKIAotICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQogICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdM
dWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgR0x1aW50IGdldEF0dHJpYnV0ZUxv
Y2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBh
dHRyaWJ1dGVJbmRleCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlw
ZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBUZXh0dXJlVHlwZSBnZXRT
YW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCk7Ci0gICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsK
LQotICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKLSAgICBi
b29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0
VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAgYm9vbCBnZXRVbmlmb3JtZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAg
Ym9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50
ICpwYXJhbXMpOwotCi0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeENv
b3JkTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlv
bigpIGNvbnN0OwotICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwotICAg
IEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRp
cnR5QWxsVW5pZm9ybXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKIAogICAgIHZvaWQg
bGluaygpOwotICAgIGJvb2wgaXNMaW5rZWQoKTsKKyAgICB2b2lkIHNldFByb2dyYW1CaW5hcnko
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJv
Z3JhbUJpbmFyeSgpOworCiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKICAgICB2
b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmlu
Zm9Mb2cpOwogICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdM
c2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwpAQCAtMTMxLDkxICs3MSwyNCBAQCBjbGFz
cyBQcm9ncmFtCiAgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKICAgICBib29sIGlzRmxhZ2dl
ZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZhbGlkYXRlKCk7Ci0gICAgYm9vbCB2
YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKTsKICAgICBib29sIGlzVmFsaWRhdGVkKCkg
Y29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKLSAgICBzdGF0
aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
OyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5k
ZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVh
ZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hh
ciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3Rh
bnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOwogCi0gICAg
aW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pOwotICAgIGJvb2wg
bGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGdl
dEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotCi0gICAgYm9vbCBs
aW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKLSAgICBib29s
IGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQz
RFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0g
IiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIFVuaWZvcm0g
KmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRp
b24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBib29sIGFwcGx5VW5pZm9ybW5mdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIGFwcGx5
VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3Jt
M2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZl
Y3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOwotCi0gICAgdm9p
ZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZv
cm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7
Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdl
KTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAuLi4pOwotICAg
IHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2Vy
aWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEZyYWdtZW50U2hh
ZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwog
Ci0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExT
TDsKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7CiAKLSAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29u
c3RhbnRUYWJsZVBTOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsK
LQotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVY
X0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRU
UklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAg
ICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7Ci0gICAgICAgIEdM
aW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7
Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgIEdMdWlu
dCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlm
b3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlm
b3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlv
bjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeENvb3JkTG9jYXRp
b247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeEZy
b250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwotCi0g
ICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwogICAg
IGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dy
YW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0gICAgY2hhciAqbUluZm9M
b2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAgICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZjdi
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5jcHAKQEAgLTAsMCArMSwyNTgzIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIElt
cGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgIWRlZmluZWQoQU5HTEVf
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1J
WkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMworI2VuZGlmCisKK25h
bWVzcGFjZSBnbAoreworY29uc3QgY2hhciAqZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKKwor
c3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVy
OworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCisgICAgOiB0eXBlKHR5cGUpLCBfbmFtZShf
bmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJy
YXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXpl
KHR5cGUpICogYXJyYXlTaXplOworICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107
CisgICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRydWU7Cit9CisKK1Vu
aWZvcm06On5Vbmlmb3JtKCkKK3sKKyAgICBkZWxldGVbXSBkYXRhOworfQorCitib29sIFVuaWZv
cm06OmlzQXJyYXkoKQoreworICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9
PSAwOworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAor
ICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVt
ZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK3sKK30KKworUHJvZ3JhbUJpbmFyeTo6UHJvZ3Jh
bUJpbmFyeSgpCit7CisgICAgbURldmljZSA9IGdldERldmljZSgpOworCisgICAgbVBpeGVsRXhl
Y3V0YWJsZSA9IE5VTEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25z
dGFudFRhYmxlUFMgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworCisgICAg
bUluZm9Mb2cgPSBOVUxMOworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgewor
ICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisg
ICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQor
CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0u
YWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAw
OworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAgbUR4RGVwdGhSYW5nZUxv
Y2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAgIG1EeENvb3JkTG9j
YXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAtMTsKKyAgICBtRHhG
cm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7
Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sKKyAgICBpZiAobVBpeGVs
RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVy
dGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJs
ZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAgIH0K
KworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVWUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkp
CisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKKyAgICAgICAgbVVuaWZv
cm1zLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgZGVsZXRlW10gbUluZm9Mb2c7Cit9CisKK0lE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQorewor
ICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQoreworICAgIHJldHVybiBtVmVydGV4
RXhlY3V0YWJsZTsKK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0
aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAgeworICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9
PSBzdGQ6OnN0cmluZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
LTE7Cit9CisKK2ludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1
dGVJbmRleCkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgCisgICAgcmV0dXJuIG1TZW1hbnRpY0lu
ZGV4W2F0dHJpYnV0ZUluZGV4XTsKK30KKworLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBo
aWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRT
YW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAg
eworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNh
bXBsZXJSYW5nZTsKKyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIHJldHVybiBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgaW5k
ZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERp
cmVjdDNEIDkgc2FtcGxlcgorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5k
IDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2Ft
cGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkK
K3sKKyAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKKworICAgIHN3aXRjaCAodHlw
ZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VSVChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwor
CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6
ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKworICAgICAgICBpZiAo
bVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRl
eHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYg
bG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4
dHVyZVVuaXQ7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1cm5zIHRoZSB0
ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCisvLyBp
bmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNo
YWRlcikuCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUo
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NF
UlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNb
MF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
KyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Cisg
ICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKyAgICAgICAgQVNT
RVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBURVhUVVJFXzJEOworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGlu
ZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBv
cGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZp
bmRfbGFzdF9vZignXScpOworICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNs
b3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0gYXRv
aShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5hbWUuZXJhc2Uob3Bl
bik7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRl
eC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8
IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgorICAgICAgICAgICAgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
dGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7CisgICAgICAgICAg
ICB0YXJnZXRbMl0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAg
IHRhcmdldCArPSA0OworICAgICAgICAgICAgdiArPSAxOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
KyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAw
OworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0Owor
ICAgICAgICAgICAgdiArPSAyOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07
CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0g
dlsyXTsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ld
ID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVv
ZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lk
dGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KK3ZvaWQg
dHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAg
aW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CisgICAgaW50
IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CisKKyAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRh
cmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOwor
ICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAo
aW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAg
ICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkgPSBzcmNI
ZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0
W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxP
QVRfTUFUMikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQg
PSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA4OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUp
OworICAgICAgICB0YXJnZXQgKz0gODsKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9h
dCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDEyOworICAgICAg
ICB2YWx1ZSArPSA5OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01B
VDQpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdM
ZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
Pih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDE2OworICAgICAgICB2YWx1ZSAr
PSAxNjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
LAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZB
TFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sK
KyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMaW50KSAqIDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNv
dW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMz
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAg
ICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBH
TGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZb
aV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1j
cHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBzaXplb2YoR0xpbnQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQp
ICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAor
ICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
MywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJu
YWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFy
Z2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgKiBzaXplb2YoR0xmbG9hdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChm
bG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6
ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gK
KyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5p
Zm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZT
aXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgeworICAgICAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAg
IHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDEyKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQs
NCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50
ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENv
bXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2gg
KFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQg
KmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClm
bG9hdFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAg
ICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQoreworICAgIHVuc2lnbmVkIGlu
dCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAg
bVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBh
bGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0
M0QgOSBkZXZpY2UKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAg
Zm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2lu
KCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgeworICAgICAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworCisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5k
aXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhOworICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5
VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywg
Yik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5p
Zm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAg
IGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFw
cGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRo
ZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRDEwQmxvYiAq
UHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNo
YXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAg
aWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRFdP
UkQgcmVzdWx0OworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRl
eHQ7CisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEQzRENP
TVBJTEVfREVCVUc7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElM
RV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJj
ZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmco
IiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6
OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291
cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwor
ICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNEMTBCbG9iICpiaW5h
cnkgPSBOVUxMOworICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgcmVz
dWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxM
LCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKKwor
ICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptZXNzYWdl
ID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKKyAgICAgICAgVFJBQ0UoIlxu
JXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKKworICAgICAgICBl
cnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAg
ICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IEQzRFhHZXRT
aGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgYmluYXJ5LT5SZWxlYXNl
KCk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGJpbmFyeTsK
K30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1
c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAg
cmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51
bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50
IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0
ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRl
eHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAg
eworICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5
aW5nLT5zaXplOworICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+
dHlwZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09
IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQg
ciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBt
ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyeWluZy0+Y29sID0gMDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAm
KnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdW
ZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsg
eCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPmNvbCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1ty
ICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVt
biA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwg
c3BhY2VbY29sdW1uXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNv
bHVtbiA9IHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcg
PSByOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBu
OyB5KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNv
bCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291
bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBm
b3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgeworICAgICAg
ICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwg
cGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OmxpbmtWYXJ5aW5ncyhzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYg
dmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIg
KnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExT
TC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKysp
CisgICAgeworICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKKyAgICAgICAgZnJhZ1Zhci0+Y29s
ID0gLTE7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0g
dmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKKyAgICB7CisgICAgICAgIHZ0eFZhci0+cmVnID0g
LTE7CisgICAgICAgIHZ0eFZhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgLy8gTWFwIHRoZSB2
YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQorICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdb
TUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMg
PSBwYWNrVmFyeWluZ3MocGFja2luZywgZnJhZ21lbnRTaGFkZXIpOworCisgICAgaWYgKHJlZ2lz
dGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
V3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAgIENvbnRleHQgKmNv
bnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBw
b3J0c1NoYWRlck1vZGVsMygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNv
bnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgaWYgKHJlZ2lzdGVycyA9
PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisg
ICAgeworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQg
dG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKwor
ICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IG91dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09
IGlucHV0LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQt
PnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUeXBl
IG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50
IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1
dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0
LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVudCB2YXJ5
aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNf
c3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhD
T09SRCIpOworCisgICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9y
IChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5l
bmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjog
dmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZs
b2F0MngyICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExT
TCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSBk
ZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihz
ZW1hbnRpY0luZGV4KSArICI7XG4iOworCisgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFi
bGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0g
In07XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1
Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAo
aW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0
ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2lu
Z1tyXVsxXSA/IDIgOiAxKSk7CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiAr
IHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgc3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtc
biI7CisgICAgfQorCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20z
KQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6
IFBTSVpFO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5Q
VVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0dHJp
YnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBh
dHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7
CisgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAg
ICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1
dGUtPm5hbWUpICsgIik7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBk
eF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVs
U2l6ZS55ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9z
aXRpb24udztcbiI7CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBz
bTMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6
ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9T
SVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWlu
ZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFy
eWluZy0+dHlwZSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFy
eWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZh
cnlpbmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5n
W3JdWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
Y2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0g
InciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIg
KyB2YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
WyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgor
ICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNf
SU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0g
c3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyAr
IG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMp
ICsgIjtcbiI7CisgICAgICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7
CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Cisg
ICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9S
O1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAg
LyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7CisgICAgICAgIAorICAgICAgICBpZiAoc20zKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIg
dGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsg
MC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
ZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUg
dmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3Jk
LnggKyBkeF9Db29yZC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC55ID0gLShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsg
ZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBpeGVsSExTTCAr
PSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4
X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX1BvaW50Q29vcmQgPSBpbnB1dC5nbF9Qb2ludENvb3JkO1xuIjsKKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zy
b250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4i
OworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFn
bWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmct
PnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZh
cnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
aik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5u
YW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiAr
IHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIg
KyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBd
ID0gZ2xfQ29sb3JbMF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxuIjsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoY29uc3QgQXR0
cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAgIGlmICghZnJhZ21l
bnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRl
eFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNM
KCk7CisgICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgp
OworCisgICAgaWYgKCFsaW5rVmFyeWluZ3MocGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVu
dFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNo
YXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZz
XzNfMCIgOiAidnNfMl8wIjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0
LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKworICAgIElE
M0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeSh2ZXJ0ZXhITFNMLmNfc3Ry
KCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJRDNEMTBCbG9iICpw
aXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9m
aWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVs
QmluYXJ5KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBv
aW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKworICAg
ICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVh
c2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5hcnkg
PSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRh
YmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGF0dHJpYnV0
ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbGlua1VuaWZvcm1zKEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQ
UykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9WRVJURVhfU0hBREVS
LCBtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1z
IGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisg
ICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBh
ZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOworICAgICAgICAgICAgbUR4RGVw
dGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKKyAgICAgICAgICAg
IG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7CisgICAg
ICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4
X0hhbGZQaXhlbFNpemUiKTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7CisgICAgICAgICAgICBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKKwor
ICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOworCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERp
cmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFByb2dyYW1CaW5hcnk6
OmxpbmtBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmlu
ZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlm
IChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVt
cHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZl
IGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICph
dHRyaWJ1dGU7CisKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8g
Zml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNl
ZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJp
bmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAg
IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0
cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBh
dmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93
cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4
ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlRvbyBtYW55IGFj
dGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJp
YnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAg
IGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChW
YXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAx
KTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6bGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbjsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsg
Y29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0
YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKKworICAgICAgICBE
M0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAgICBVSU5UIGRlc2Ny
aXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUt
PkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3Rh
bnREZXNjcmlwdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNj
cmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBs
aXN0IG9mIHVuaWZvcm1zCisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5v
dCBhbHJlYWR5IGRlZmluZWQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQorewor
ICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVS
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNE
WEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUo
TlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUg
dnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNv
bnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOworCisg
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9
PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3Rk
OjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291
bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZz
Q29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50
KSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXgg
KyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBj
YXNlIEQzRFhQQ19TVFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50czsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVj
dE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQo
Y29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2Ny
aXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0
cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBz
dHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUg
KyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1ND
QUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJ
WF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVm
aW5lVW5pZm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpk
ZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5pZm9y
bSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOwor
CisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlm
b3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBkZWxl
dGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9T
SEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc2hh
ZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3Jp
cHRpb24pOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICByZXR1cm4g
dW5pZm9ybS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2so
dW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXpl
KCkgLSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJh
eVNpemU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZv
cm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8g
VmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6
CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FN
UExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBz
d2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9W
RUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5U
X1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9u
LlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2Vz
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGlzIG1ldGhv
ZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJvZ3Jh
bUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7Cisg
ICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwg
MywgImR4XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6
OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBzdGQ6
OnN0cmluZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUg
ZmllbGQgZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9zID0g
bmFtZS5maW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAg
ICAgbmFtZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhl
IGxlYWRpbmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykKKyAgICB7CisgICAg
ICAgIHJldHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5jb21w
YXJlKDAsIDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3Ry
KDMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFtQmlu
YXJ5OjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01B
WF9CT09MX0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5k
ZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHZlY3RvcltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4w
ZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9y
bS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdl
dFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCA6IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbElu
ZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAg
aW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQs
IHZzQ291bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NP
TlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
Q29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0
VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0
b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJ
bmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAg
fQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJD
b25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlf
TUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwg
MCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisg
ICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5p
Zm9ybS0+cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNh
bXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0
aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAo
Y29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJn
ZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3Nh
bXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50
IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlsw
XSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBh
cHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RP
UjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9S
NCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2
ICs9IDM7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50
LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05T
VEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNd
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
dmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQp
dlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBhcHBs
eVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikK
K3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAg
bURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0
SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
CisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0g
MCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKKy8vIGFwcGVuZCBhIHNhbnRpemVkIG1l
c3NhZ2UgdG8gdGhlIHByb2dyYW0gaW5mbyBsb2cuCisvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1
ZGVzIGEgZmFrZSBmaWxlIHBhdGggaW4gc29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKKy8v
IG1lc3NhZ2VzLCBzbyBsZXRzIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZp
bGUgcGF0aCBmcm9tIHRoZSBsb2cuCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xv
Z1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIHN0ZDo6c3RyaW5nIG1zZyht
ZXNzYWdlKTsKKworICAgIHNpemVfdCBmb3VuZDsKKyAgICBkbworICAgIHsKKyAgICAgICAgZm91
bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgeworICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4o
ZmFrZXBhdGgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpz
dHJpbmc6Om5wb3MpOworCisgICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkp
OworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICpm
b3JtYXQsIC4uLikKK3sKKyAgICBpZiAoIWZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjaGFyIGluZm9bMTAyNF07CisKKyAgICB2YV9saXN0IHZhcmFyZzsKKyAg
ICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CisgICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihp
bmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisgICAgc2l6ZV90
IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsK
KyAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0
cmNweShtSW5mb0xvZywgaW5mbyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNp
emVfdCBsb2dMZW5ndGggPSBzdHJsZW4obUluZm9Mb2cpOworICAgICAgICBjaGFyICpuZXdMb2cg
PSBuZXcgY2hhcltsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShu
ZXdMb2csIG1JbmZvTG9nKTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCwgaW5m
byk7CisKKyAgICAgICAgZGVsZXRlW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gbmV3
TG9nOworICAgIH0KK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpyZXNldEluZm9Mb2coKQorewor
ICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBtSW5mb0xvZzsKKyAg
ICAgICAgbUluZm9Mb2cgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpp
c1ZhbGlkYXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCitpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5m
b0xvZykKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKGJ1ZlNpemUg
PiAwKQorICAgIHsKKyAgICAgICAgaWYgKG1JbmZvTG9nKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwor
ICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGxlbmd0
aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAq
bmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcworICAgIHVuc2ln
bmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7
CisgICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmli
dXRlXS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVBdHRyaWJ1
dGUrKzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBjb25z
dCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigp
OworCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAgICAgbmFt
ZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQorCisg
ICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKworR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGludCBjb3Vu
dCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAg
aWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZU1h
eExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRy
aWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJp
YnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0
aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUu
bGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGludGVy
bmFsIHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOworICAgIHVu
c2lnbmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5p
Zm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW3Vu
aWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0g
PT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVu
aWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZl
VW5pZm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIHN0
ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKKworICAgICAgICBp
ZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3Ry
aW5nLmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7
CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9
IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVuaWZvcm1z
W3VuaWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
dHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkK
K3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAg
ICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1
bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1
bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0g
KGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKKyAgICAg
ICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIu
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgs
IG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOwor
fQorCit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKCkKK3sKKyAgICByZXNldEluZm9Mb2co
KTsKKworICAgIGFwcGx5VW5pZm9ybXMoKTsKKyAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1
ZSkpCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKQoreworICAgIC8vIGlm
IGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5
cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFu
ZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwg
ZmFpbCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUg
dGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBl
W01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsg
KytpKQorICAgIHsKKyAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dO
OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNh
bXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQ
U1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1
bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVu
aXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBl
W3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vy
cm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUg
c2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVy
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCisgICAgewor
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3Jz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9V
TktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tp
XS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9m
IGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAo
JWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERl
cHRoUmFuZ2VMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUR4Q29vcmRMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzcxNzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApA
QCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZp
bmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMK
Ky8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwor
I2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+
CisjaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8
dmVjdG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7
CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEg
c2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xl
bnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7CisKKyAgICBjb25z
dCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0
ZWQgbmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5h
bWUKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAgdW5zaWduZWQgY2hh
ciAqZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lzdGVySW5mbworICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQ0
SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOworICAgICAgICAgICAg
Ym9vbEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gMDsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RY
UlNfQk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4
OyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0OiAgZmxvYXQ0SW5k
ZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KHJlZ2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQpY29uc3RhbnREZXNj
cmlwdGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25z
dGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
ZmxvYXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAgICAgIGludCBib29s
SW5kZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsKKworICAgIFJlZ2lz
dGVySW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBm
b3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFu
ZGxlcworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25z
dCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQg
aW5kZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVu
dDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQg
b2YgbGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3Nl
ZCB0byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQoreworICBwdWJsaWM6Cisg
ICAgUHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisKKyAgICBJRGlyZWN0
M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRp
b24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJp
YnV0ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5
cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVUeXBlIGdldFNhbXBs
ZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4
KTsKKyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOworCisg
ICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIGJvb2wg
c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5p
Zm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7
CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29s
IGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBh
cmFtcyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4Q29vcmRM
b2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkg
Y29uc3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xp
bnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlB
bGxVbmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisgICAgYm9vbCBsaW5r
KGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisgICAgaW50
IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0QXR0
YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNo
YWRlcnMpOworCisgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAg
IEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0
aCgpOworCisgICAgdm9pZCB2YWxpZGF0ZSgpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhi
b29sIGxvZ0Vycm9ycyk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgc3Rh
dGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVu
ZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxl
YWRpbmcgdW5kZXJzY29yZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFByb2dyYW1CaW5hcnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNv
bnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAq
KmNvbnN0YW50VGFibGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgYm9vbCBs
aW5rVmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhM
U0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhT
aGFkZXIpOworCisgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5n
cyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoR0xlbnVt
IHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKKyAgICBib29sIGRl
ZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5k
bGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0
cmluZyBuYW1lID0gIiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpOworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpOworCisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29u
c3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAq
aW5mbywgLi4uKTsKKyAgICB2b2lkIHJlc2V0SW5mb0xvZygpOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsK
KworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFy
ZSBvbmx5IHVzZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29u
c3RhbnRUYWJsZVBTOworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsK
KworICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Cisg
ICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3Qg
U2FtcGxlcgorICAgIHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2lj
YWxUZXh0dXJlVW5pdDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsK
KworICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAg
IFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07
CisgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBp
eGVsU2FtcGxlclJhbmdlOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5p
Zm9ybUFycmF5OworICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6
OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXgg
bVVuaWZvcm1JbmRleDsKKworICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhEZXB0aExvY2F0aW9uOworICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247CisgICAg
R0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworICAgIEdMaW50IG1EeEZyb250Q0NXTG9j
YXRpb247CisgICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworCisgICAgY2hhciAq
bUluZm9Mb2c7CisgICAgYm9vbCBtVmFsaWRhdGVkOworfTsKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKaW5kZXggNjAwNDI1NS4uNGI5MTFl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmNwcApAQCAtNjMsNjggKzYzLDE0NCBAQCBHTHVpbnQgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlOjpnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGR4MmVzOjpHZXRT
dGVuY2lsU2l6ZShnZXREM0RGb3JtYXQoKSk7CiB9CiAKLVJlbmRlcmJ1ZmZlclRleHR1cmU6OlJl
bmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFy
Z2V0KHRhcmdldCkKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJbXBsZW1lbnRhdGlvbiAv
Ly8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChU
ZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCit7Cisg
ICAgbVRleHR1cmUyRC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
flJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpCit7CisgICAgbVRleHR1cmUyRC5zZXQoTlVMTCk7Cit9
CisKKy8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3Vu
dCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMu
IEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KK3ZvaWQgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQor
eworICAgIG1UZXh0dXJlMkQtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQor
eworICAgIG1UZXh0dXJlMkQtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFy
Z2V0KG1UYXJnZXQpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU3RlbmNpbChtVGFyZ2V0KTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0V2lkdGgoMCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldCh0ZXh0dXJlKTsKKyAg
ICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwogfQogCi1SZW5kZXJidWZmZXJUZXh0
dXJlOjp+UmVuZGVyYnVmZmVyVGV4dHVyZSgpCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUuc2V0KE5VTEwpOwor
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKK30KKworRDNERk9S
TUFUIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0RDNERm9ybWF0KDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisK
K3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsK
K30KKworLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQo
dGFyZ2V0KQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKQorewor
ICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQoTlVMTCk7CiB9CiAKIC8vIFRleHR1cmVzIG5lZWQgdG8g
bWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKIC8v
IFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4
dHVyZSBvZiBhIHJlZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6YWRkUHJveHlS
ZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgbVRl
eHR1cmUtPmFkZFByb3h5UmVmKHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5
UmVmKHByb3h5KTsKIH0KIAotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjpyZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0
dXJlLT5yZWxlYXNlUHJveHkocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1hcC0+cmVsZWFzZVBy
b3h5KHByb3h5KTsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6
OmdldFJlbmRlclRhcmdldCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsK
LSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAgICByZXR1
cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CiB9CiAKLUlEaXJl
Y3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXREZXB0aFN0ZW5jaWwoKQorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAK
LUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0V2lkdGgoKSBjb25zdAorR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVy
biBtVGV4dHVyZS0+Z2V0V2lkdGgoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0
V2lkdGgoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KLSAKLUdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKKworR0xzaXplaSBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRl
eHR1cmUtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRIZWln
aHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KLSAKLUdMZW51bSBSZW5k
ZXJidWZmZXJUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CisKK0dMZW51bSBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAg
IHJldHVybiBtVGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1
cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOwogfQogCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RDNERm9ybWF0
KCkgY29uc3QKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9y
bWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEQzREZvcm1hdCgpOworICAg
IHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIDApOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFNh
bXBsZXMoKSBjb25zdAorR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2Ft
cGxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXJUZXh0dXJlOjpnZXRTZXJpYWwoKSBjb25zdAordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVy
ZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKIH0KIAorLy8vLy8vIFJlbmRl
cmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKwogUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZm
ZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJlZkNvdW50
T2JqZWN0KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKQEAgLTE1MiwxMSAr
MjI4LDE1IEBAIHZvaWQgUmVuZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29uc3QKICAgICBSZWZDb3Vu
dE9iamVjdDo6cmVsZWFzZSgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJl
Y3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0
dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2ls
KCkKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKQEAgLTI0Mywx
MSArMzIzLDE1IEBAIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5SZW5kZXJidWZmZXJTdG9yYWdlKCkK
IHsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICByZXR1cm4gTlVMTDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVy
YnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVMTDsKQEAg
LTM1Niw2ICs0NDAsOCBAQCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkKICAgICB9CiB9CiAK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkNvbG9yYnVmZmVy
OjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNDI4LDgg
KzUxNCwxNSBAQCBEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIoKQogICAg
IH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRGVw
dGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogeworICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCiAg
ICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCmluZGV4IDYwZWMwNTguLmU2ZDVk
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaApAQCAtMjEsNyArMjEsOCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNz
IFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKIGNsYXNz
IFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVm
ZmVyOwpAQCAtNTgsMTIgKzU5LDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZhY2UpOwogfTsKIAot
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UK
K2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4dHVy
ZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAq
dGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CiAKLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0
dXJlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7CiAKICAgICB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogICAgIHZvaWQgcmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwpAQCAtODAsOSArODEsMzcgQEAgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAogICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlKTsKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKIAotICAgIEJp
bmRpbmdQb2ludGVyIDxUZXh0dXJlPiBtVGV4dHVyZTsKKyAgICBCaW5kaW5nUG9pbnRlciA8VGV4
dHVyZTJEPiBtVGV4dHVyZTJEOworICAgIEdMZW51bSBtVGFyZ2V0OworfTsKKworY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7
CisgIHB1YmxpYzoKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1h
cCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcCgpOworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2Vy
aWFsKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOworCisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1
cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXA7CiAgICAgR0xlbnVtIG1UYXJnZXQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKaW5k
ZXggYWM1OGFiZS4uNTdmZDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmNwcApAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBTaGFkZXI6
OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9M
b2cpCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChtSW5mb0xvZykKKyAgICBpZiAo
YnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAx
LCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9M
b2csIGluZGV4KTsKLSAgICB9CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAg
ICAgICB9CiAKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGluZm9Mb2dbaW5kZXhd
ID0gJ1wwJzsKICAgICB9CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRT
b3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKHNvdXJjZSkKKyAgICBpZiAo
YnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAx
LCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBp
bmRleCk7Ci0gICAgfQorICAgICAgICBpZiAoc291cmNlKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKKyAg
ICAgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOworICAgICAgICB9CiAKLSAg
ICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSAnXDAnOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgK
aW5kZXggOWM3YzBkZi4uNDMwODNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5oCkBAIC00Miw3ICs0Miw3IEBAIHR5cGVkZWYgc3RkOjpsaXN0
PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwogCiBjbGFzcyBTaGFkZXIKIHsKLSAgICBmcmllbmQgUHJv
Z3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBwdWJsaWM6CiAgICAg
U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CkBAIC0xMjgs
NyArMTI4LDcgQEAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5
OwogCiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFBy
b2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAg
IFZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAK
aW5kZXggMjkxNzdkMi4uMWFmMDhjYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCkBAIC0zMSw4ICszMSwxMiBAQCB1bnNpZ25lZCBp
bnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlhbCA9IDE7CiAKIHN0YXRpYyBE
M0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQogewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQp
CisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgeworICAgICAgICByZXR1cm4g
RDNERk1UX0lOVFo7CisgICAgfQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDFfRVhUKQogICAgIHsKICAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQx
OwogICAgIH0KQEAgLTc1LDYgKzc5LDEwIEBAIHN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1
cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogCiBzdGF0aWMgYm9vbCBJ
c1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZv
cm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
ICAgICBzd2l0Y2goZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0w4OgpAQCAtOTUs
NiArMTAzLDIxIEBAIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9S
TUFUIGZvcm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgRFdPUkQg
R2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSkKK3sKKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7CisKKyAgICBpZiAoZDNk
Zm10ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0Vf
REVQVEhTVEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVT
QUdFX1JFTkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdlOworfQorCiBJbWFn
ZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IApAQCAtMTU1LDYgKzE3OCw4IEBAIHZvaWQg
SW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJl
ID0gTlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAgICAg
Y29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1FTTsKKyAgICBjb25zdCBE
M0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7CisgICAgQVNTRVJUKGQzZEZvcm1h
dCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGgg
dGV4dHVyZXMKIAogICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCiAgICAgewpA
QCAtMTc4LDcgKzIwMyw3IEBAIHZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQogICAgICAgICAg
ICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKICAgICAgICAgfQogCi0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCBy
ZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBnZXREM0RGb3JtYXQoKSwKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0
V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29s
VG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CkBAIC0yNjQsNyArMjg5LDcgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHkKIHsKICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKIAotICAgIGlmIChz
b3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQorICAgIGlmIChzb3VyY2VTdXJmYWNlICYmIHNv
dXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCiAgICAgewogICAgICAgICBSRUNUIHJlY3QgPSB0
cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdo
dCk7CiAKQEAgLTI4NCwxMCArMzA5LDE5IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5CiB9CiAK
IC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZz
ZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1
dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRw
dXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KKy8vIGludG8gdGhlIHRhcmdldCBw
aXhlbCByZWN0YW5nbGUgYXQgbG9ja2VkLnBCaXRzIHdpdGggbG9ja2VkLlBpdGNoIGJ5dGVzIGlu
IGJldHdlZW4gZWFjaCBsaW5lLgogdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CisgICAgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQog
eworICAgIFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEdM
c2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCk7CiAgICAgaW5wdXQgPSAoKGNoYXIqKWlucHV0KSAtIGlucHV0UGl0Y2gg
KiAoaGVpZ2h0IC0gMSk7CiAKQEAgLTI5NywyOSArMzMxLDM2IEBAIHZvaWQgSW1hZ2U6OmxvYWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0CiAgICAgICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
KyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQs
IGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNl
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZN
VF9BOEw4KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RG
b3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OworICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAg
ICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJH
UkFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAg
ICAgICAgfQpAQCAtMzI4LDcgKzM2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0CiAgICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfUkdCOgot
ICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAg
bG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszNzgsNyBAQCB2b2lkIElt
YWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0K
QEAgLTM0Niw3ICszODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0
Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgICBsb2FkUkdCQTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRS
R0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM1NiwxOSArMzk3LDE5IEBAIHZvaWQgSW1h
Z2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0CiAgICAgICAgIHsKICAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBh
cmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdh
eSBpbiBEM0QKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhh
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBRmxvYXREYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICB9CkBAIC0zNzgsMjggKzQxOSwzMCBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAog
ICAgICAgICB7CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBS
R0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVt
aW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAg
IGxvYWRSR0JBSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2Fk
UkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KKworICAgIHVubG9jaygpOwogfQogCi12b2lk
IEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxM
OwpAQCAtNDA4LDcgKzQ1MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoCiAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDE5LDcgKzQ2Miw0NyBAQCB2b2lkIEltYWdlOjps
b2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAor
eworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQg
aW50ICpkZXN0ID0gTlVMTDsKKyAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kx
MjgoKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAg
ICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKKworICAgICAgICBpbnQgeDsKKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFs
aWduZWQKKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pigm
ZGVzdFt4XSkgJiAweEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8
IDI0OworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkK
KyAgICAgICAgeworICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2Vw
aTY0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKKyAgICAg
ICAgICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBi
eXRlIHRvIHplcm8KKyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6
ZXJvV2lkZSwgc291cmNlRGF0YSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZi
aXQgdG8gMzJiaXQsIG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KKyAgICAgICAgICAgIF9f
bTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAg
ICAgICAgICAgX19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNl
RGF0YSk7CisKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9f
bTEyOGkqPigmZGVzdFt4XSksIGxvKTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWlu
dGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcgorICAgICAgICBmb3IgKDsgeCA8IHdpZHRo
OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDI4LDcgKzUxMSw3IEBAIHZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAg
ICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZz
ZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7CkBAIC00MzksNyArNTIyLDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2kKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCit2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpA
QCAtNDQ4LDcgKzUzMSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IDA7CkBAIC00NTksMTcgKzU0MiwxNiBAQCB2b2lkIEltYWdlOjpsb2FkQWxw
aGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNv
bnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0Owog
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zm
c2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKIAogICAgICAgICBpZiAoIW5h
dGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKICAgICAgICAgewpAQCAtNDg4LDcg
KzU3MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZs
b2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAq
c291cmNlID0gTlVMTDsKQEAgLTQ5Nyw3ICs1NzksNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4XTsKQEAgLTUwOCw3ICs1OTAsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKQEAgLTUxNyw3ICs1OTksNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsK
KyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwpAQCAtNTI4LDE3ICs2MTAsMTYgQEAgdm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5
dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOwogICAgICAgICAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVz
dGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTU1Nyw3ICs2MzgsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNl
ID0gTlVMTDsKQEAgLTU2Niw3ICs2NDcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBz
b3VyY2VbMip4KzBdOwpAQCAtNTc3LDcgKzY1OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKQEAgLTU4Niw3ICs2NjcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVt
aW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAg
ewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU5Nyw3
ICs2NzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBJbWFn
ZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKQEAgLTYwNiw3ICs2ODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5
ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07CkBAIC02MTcsNyArNjk4
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAt
NjI2LDcgKzcwNyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9
IHNvdXJjZVt4XTsKQEAgLTYzOCw3ICs3MTksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKQEAgLTY0Nyw3ICs3MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwor
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY1OCw3ICs3MzksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC02NjcsNyArNzQ4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDgpOworICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY3OCw3ICs3NTksNyBAQCB2b2lk
IEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0
ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBO
VUxMOwpAQCAtNjg4LDcgKzc2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NF
MihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNCk7Cisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgaW50
IHggPSAwOwogCiAgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCkBAIC03MjAs
NyArODAxLDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEcKICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNl
ID0gTlVMTDsKQEAgLTcyOCw3ICs4MDksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQp
OworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CkBAIC03MzgsNyAr
ODE5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6
OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBO
VUxMOwpAQCAtNzQ3LDcgKzgyOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03NTksNyArODQwLDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkE0NDQ0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2
b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzY4LDcgKzg0OSw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsK
KyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBA
IC03ODAsNyArODYxLDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2Ug
PSBOVUxMOwpAQCAtNzg5LDEyICs4NzAsMTIgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIG1lbWNweShkZXN0LCBzb3Vy
Y2UsIHdpZHRoICogMTYpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKQEAgLTgwMywxMiArODg0LDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4OworICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAg
ICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7CiAgICAgfQogfQogCi12b2lk
IEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpA
QCAtODE3LDI1ICs4OTgsNDMgQEAgdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAg
ICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCo0KTsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2U6
OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5wdXQpIHsKKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CisgICAgQVNTRVJU
KHlvZmZzZXQgJSA0ID09IDApOworCisgICAgUkVDVCBsb2NrUmVjdCA9IHRyYW5zZm9ybVBpeGVs
UmVjdCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKKworICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwg
JmxvY2tSZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gLUNvbXB1dGVDb21wcmVzc2Vk
UGl0Y2god2lkdGgsIG1Gb3JtYXQpOworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNv
bXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1Gb3JtYXQpOworICAgIGlucHV0ID0gKChjaGFy
KilpbnB1dCkgKyBpbnB1dFNpemUgKyBpbnB1dFBpdGNoOworCiAgICAgc3dpdGNoIChnZXREM0RG
b3JtYXQoKSkKICAgICB7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgICAgbG9h
ZERYVDFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhUMURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgICBs
b2FkRFhUM0RhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWREWFQzRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICAg
IGxvYWREWFQ1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERYVDVEYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgdW5sb2NrKCk7CiB9CiAKIHN0YXRp
YyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwg
dW5zaWduZWQgaW50KiBkZXN0KSB7CkBAIC05NDgsMTEgKzEwNDcsOSBAQCBzdGF0aWMgdm9pZCBG
bGlwQ29weURYVDVCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVk
IGludCogZGVzdAogICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIp
OwogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhU
MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7
Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0g
MCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUg
OCA9PSAwKTsKICAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwpAQCAtOTg1LDcgKzEw
ODIsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKIAogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsg
eCArPSAyKQogICAgICAgICAgICAgICAgIHsKQEAgLTk5NiwxMSArMTA5Myw5IEBAIHZvaWQgSW1h
Z2U6OmxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAg
IEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAg
IEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUg
MTYgPT0gMCk7CkBAIC0xMDM1LDcgKzExMzAsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQog
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDQ2LDExICsxMTQxLDkgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAogewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NF
UlQoeW9mZnNldCAlIDQgPT0gMCk7CiAgICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRo
ID09IDIgfHwgd2lkdGggPT0gMSk7CiAgICAgQVNTRVJUKGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsK
ICAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAwKTsKQEAgLTEwODUsNyArMTE3OCw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodCAvIDQ7ICsreSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
IAogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0
KQogICAgICAgICAgICAgICAgIHsKQEAgLTEyNjcsOSArMTM2MCw5IEBAIHZvaWQgSW1hZ2U6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwKICAgICBtRGlydHkgPSB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTo6VGV4dHVy
ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRh
cmdldCksCi0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKG1SZW5k
ZXJUYXJnZXQpKSwKK1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSkK
KyAgICA6IG1EM0RVc2FnZSh1c2FnZSksCisgICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdl
dFRleHR1cmVQb29sKHVzYWdlKSksCiAgICAgICBtVGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVT
ZXJpYWwoKSkKIHsKIH0KQEAgLTEyODAsNyArMTM3Myw3IEBAIFRleHR1cmVTdG9yYWdlOjp+VGV4
dHVyZVN0b3JhZ2UoKQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJuIChtRDNEVXNhZ2Ug
JiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsK
IH0KIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QKQEAgLTEyOTMsNiAr
MTM4NiwxMSBAQCBEM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKICAgICBy
ZXR1cm4gbUQzRFBvb2w7CiB9CiAKK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EM0RVc2FnZTsKK30KKwogdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVRleHR1cmVT
ZXJpYWw7CkBAIC0xNDUwLDE1ICsxNTQ4LDcgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQogewog
ICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxM
KTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhl
aWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAg
ICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgp
LCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0xNDY3
LDUyICsxNTU3LDE2IEBAIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppCiB7CiAgICAgaWYgKHBpeGVs
cyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAg
IGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+
Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVz
c2VkU2l6ZShpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0
Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBp
bWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCAtaW5wdXRQaXRjaCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0g
ICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdl
LT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCiBib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4g
aW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQo
KSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKElzQ29tcHJlc3NlZChpbWFnZS0+Z2V0Rm9ybWF0
KCkpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbWFnZS0+Z2V0Rm9y
bWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAg
ewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwg
dHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgp
KSwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAg
ICAgfQotCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNTIxLDM3ICsxNTc1LDkgQEAgYm9vbCBUZXh0dXJl
OjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWcKIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICpp
bWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwg
aGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdp
b247Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRl
UmVnaW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90
dG9tID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZz
ZXQ7Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAg
aW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFu
c2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3
aWR0aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVs
cykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFn
ZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBp
eGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNjY3LDIz
ICsxNjkzLDI3IEBAIGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkg
KnN1cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKHRydWUpLCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZTJE
OjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBU
ZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFs
KFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7CiAgICAgbVRleHR1cmUgPSBz
dXJmYWNlVGV4dHVyZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChp
bnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wg
cmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbVJlbmRl
clRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVy
ZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0
LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0b3Jh
Z2UodXNhZ2UpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
U2VyaWFsKCkpCiB7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
Ci0KICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNE
VVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhl
aWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBs
ZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBk
M2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQs
IGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7
CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICB9CiAgICAgfQogfQogCkBAIC0xNjk1LDYgKzE3MjUsOCBAQCBUZXh0dXJlU3RvcmFnZTJEOjp+
VGV4dHVyZVN0b3JhZ2UyRCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50
IGxldmVsKQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKQEAgLTE3
NzgsMTkgKzE4MTAsMjAgQEAgR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMZW51bSBUZXh0dXJlMkQ6OmdldElu
dGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0Rm9y
bWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRl
eHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAot
RDNERk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0QzREZPUk1BVCBUZXh0
dXJlMkQ6OmdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUlt
YWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxd
LmdldEQzREZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OwogfQogCiB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQpAQCAt
MjAxNiwxMCArMjA0OSwxMCBAQCB2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTAogICAgIEdMZW51bSBm
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgR0xlbnVtIHR5
cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwogICAgIEQzREZPUk1BVCBkM2Rm
bXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBi
b29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAo
bVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIERXT1JEIGQz
ZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2Uy
RChsZXZlbHMsIGQzZGZtdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMjA3NCw4ICsyMTA3LDggQEAg
Ym9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
KSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAgaWYg
KChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0
KDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpKSkKICAgICB7CiAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CkBAIC0yMTU3LDkgKzIxOTAsMTQgQEAg
Ym9vbCBUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVy
ZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElzQ29t
cHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdl
dEludGVybmFsRm9ybWF0KGxldmVsKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE3MywxMSArMjIxMSwxMSBAQCB2b2lkIFRleHR1
cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBd
LmdldFdpZHRoKCk7CiAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWln
aHQoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0g
ICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGZv
cm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAg
ICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAg
RFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsK
IAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJl
U3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwor
ICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQz
ZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAKICAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFu
YWdlZCgpKQogICAgIHsKQEAgLTIyMTcsOSArMjI1NSwxMCBAQCB2b2lkIFRleHR1cmUyRDo6Y29u
dmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0u
Z2V0SGVpZ2h0KCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5n
ZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2Uo
ZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAg
ICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIHRydWUpOworICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAg
ICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjIzMiw4ICsyMjcx
LDggQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAg
ICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAgIHsgICAKICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgaWYg
KGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzE1LDEyICsyMzU0
LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCkKIAogICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQogICAgIHsKLSAgICAg
ICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOworICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9
IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0
YXJnZXQpKTsKICAgICB9CiAKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9U
RVhUVVJFXzJEKTsKQEAgLTIzMzMsNiArMjM3NCwzMyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIAogICAgIHVwZGF0ZVRleHR1
cmUoKTsKICAgICAKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisg
ICAgaWYgKGlzRGVwdGgoMCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg
ICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Cit9CisKKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKEdMZW51bSB0YXJnZXQpCit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
KyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAgLy8gZW5zdXJlIHRo
aXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKDApKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBtVGV4U3RvcmFnZS0+
Z2V0U3VyZmFjZUxldmVsKDApOwogfQogCkBAIC0yMzUzLDE4ICsyNDIxLDIyIEBAIFRleHR1cmVT
dG9yYWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCiAgICAgcmV0
dXJuIG1UZXhTdG9yYWdlOwogfQogCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9y
YWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCBy
ZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygp
KQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVs
cywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKQorICAgIDogVGV4dHVy
ZVN0b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQogewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGlzUmVuZGVyVGFy
Z2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwgJm1U
ZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAvLyBpZiB0aGUg
c2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBs
ZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBk
M2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGdldFVzYWdlKCks
IGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAg
ICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAt
MjM3Niw2ICsyNDQ4LDggQEAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVt
IGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSA9IE5VTEw7CkBAIC0yNDU0LDM1ICsyNTI4LDM2IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0VGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKIH0KIAot
R0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNp
emVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0V2lkdGgoKTsKKyAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lk
dGgoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTHNpemVpIFRleHR1cmVD
dWJlTWFwOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNpemVpIFRleHR1cmVDdWJl
TWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAg
aWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldEhlaWdodCgpOworICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRIZWlnaHQoKTsKICAgICBl
bHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldElu
dGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VHlwZSgpIGNvbnN0CitH
TGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBl
KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQor
ICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRG
b3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBHTF9OT05FOwogfQogCi1EM0RGT1JN
QVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVy
ZUN1YmVNYXA6OmdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3JtYXQoKTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQpAQCAtMjU4Miw4ICsyNjU3LDggQEAgYm9vbCBUZXh0
dXJlQ3ViZU1hcDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZMT0FUICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAotICAgICAg
ICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAgaWYgKChnZXRJbnRlcm5h
bEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAorICAgICAg
ICAoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9
PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNU
IHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
X01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjY3OSw5ICsyNzU0LDkgQEAgYm9vbCBU
ZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdAogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBjb25zdAorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7
CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KSk7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VU
ZXh0dXJlKCkgY29uc3QKQEAgLTI2OTQsMTEgKzI3NjksMTEgQEAgdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0V2lkdGgoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAw
KTsKLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0
KCk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJh
YmxlKGZvcm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xF
KTsKKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2Us
IGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBmb3JtYXQsIHNpemUsIHJlbmRlclRhcmdl
dCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywg
ZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKQogICAgIHsKQEAgLTI3NDIsOSArMjgxNywxMCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgIHsKICAgICAgICAgR0xzaXplaSBzaXplID0gbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRp
b25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdl
dFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRy
dWUpOwogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsK
IAogICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjc1OSw4
ICsyODM1LDggQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNl
LCBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgZGVzdC0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MjksMTAgKzMwMDUsMTAgQEAgdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHNpemUKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVy
bmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShk
M2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgc2l6
ZSwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKICAgICBtSW1tdXRhYmxlID0g
dHJ1ZTsKIAogICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKysp
CkBAIC0zMDQ5LDEyICszMTI1LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6Omdl
dFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQogCiAgICAgaWYgKG1GYWNlUHJveGllc1tmYWNl
XSA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAg
ICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJ
RGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KQogewogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwpA
QCAtMzA4Nyw0ICszMTY1LDQgQEAgVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRT
dG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKaW5kZXggMTlhNmViNS4uMmU2MzEzMSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKQEAg
LTUzLDkgKzUzLDYgQEAgY2xhc3MgSW1hZ2UKICAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkg
PSB0cnVlO30KICAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9CiAKLSAgICBI
UkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3Qp
OwotICAgIHZvaWQgdW5sb2NrKCk7Ci0KICAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0OwogICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIApAQCAtNzAsNTUgKzY3
LDU3IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCB1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CiAKICAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAgICAg
ICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAg
ICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRB
bHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkQWxwaGFGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRM
dW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0OwotICAgIHZvaWQg
bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJv
b2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQTQ0NDRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
ICAgICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdm9pZCBsb2Fk
RFhUMURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0RhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkRFhUM0RhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUNURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAKICAgICB2b2lkIGNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQp
OwpAQCAtMTI4LDYgKzEyNyw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lkIGNyZWF0ZVN1cmZh
Y2UoKTsKIAorICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29u
c3QgUkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdMc2l6ZWkgbVdpZHRo
OwogICAgIEdMc2l6ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsKQEAgLTE0NCwyMCAr
MTQ2LDIxIEBAIGNsYXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIGV4
cGxpY2l0IFRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZpcnR1YWwgflRleHR1
cmVTdG9yYWdlKCk7CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9v
bCBpc01hbmFnZWQoKSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKKyAgICBE
V09SRCBnZXRVc2FnZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFs
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBib29sIG1SZW5kZXJU
YXJnZXQ7CisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0IEQzRFBPT0wgbUQz
RFBvb2w7CiAKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7CkBAIC0xOTAs
MTQgKzE5Myw3IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBH
TGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IEdMZW51bSBnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQz
REZvcm1hdCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAw
OwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAgICAgdmlydHVh
bCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CkBAIC0y
MTYsOCArMjEyLDYgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogICAg
IHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8
R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0
aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJl
ZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CiAgICAgYm9v
bCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIHZvaWQgc2V0
Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWFnZSk7CkBAIC0yNTgsNyArMjUyLDcgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UyRCA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4dHVy
ZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRleHR1
cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAtMjg2LDExICsyODAs
MTIgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xl
bnVtIGdldFRhcmdldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdM
aW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxl
dmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZP
Uk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxl
dmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJl
c3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBj
b25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdl
KEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zMDEsNyArMjk2
LDYgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3JhZ2Uo
R0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZVRleEltYWdlKCk7CiAKQEAgLTMwOSw2ICszMDMsMTEgQEAgY2xhc3MgVGV4dHVy
ZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5k
ZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0zMTYsNyArMzE1LDYg
QEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRl
eHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wg
aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OwpAQCAtMzQxLDcgKzMzOSw3IEBAIGNsYXNzIFRleHR1
cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1h
cChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJn
ZXQpOworICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9y
bWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3Jh
Z2VDdWJlTWFwKCk7CiAKQEAgLTM2OSwxMSArMzY3LDExIEBAIGNsYXNzIFRleHR1cmVDdWJlTWFw
IDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0
OwogICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAg
IHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKQEAgLTM5MSw3ICszODksNiBAQCBjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2Vk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKQEAgLTM5
OSw2ICszOTYsMTAgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwogCisgIHByb3Rl
Y3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7CisgICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJl
TWFwKTsKIApAQCAtNDA2LDcgKzQwNyw2IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGlj
IFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0
YU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0
ZXhEYXRhTWFuYWdlci5jcHAKaW5kZXggOTViYzNmYi4uNzBmNDc1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFu
YWdlci5jcHAKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgiCkBAIC0xMjgsMTAgKzEyOSwxMSBAQCBHTGVu
dW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNp
emVpIGNvdW50LCBUcmFuc2xhdAogCiAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJmF0
dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogICAgIFByb2dyYW0gKnBy
b2dyYW0gPSBtQ29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCiAgICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHRyYW5zbGF0ZWRbYXR0cmli
dXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUlu
ZGV4KSAhPSAtMSk7CisgICAgICAgIHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSA9
IChwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7
CiAgICAgfQogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBzdG9yYWdlIHNpemUgcGVy
IHVzZWQgYnVmZmVyLCBhbmQgaW52YWxpZGF0ZSBzdGF0aWMgYnVmZmVycyB0aGF0IGRvbid0IGNv
bnRhaW4gbWF0Y2hpbmcgYXR0cmlidXRlcwpAQCAtNDQ4LDggKzQ1MCw4IEBAIHN0cnVjdCBDb252
ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUs
IHR5cGVuYW1lIEQzCiB0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5h
bWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwogCiAvLyBVc2UgYSBmdWxsIHNwZWNp
YWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVh
ZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpG
aXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNp
b25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxH
THVpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklY
RUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RW
VF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwogCiAvLyBBIDItc3Rh
Z2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBm
bG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKIC8vIHdoZXRoZXIg
aXQgaXMgbm9ybWFsaXplZCBvciBub3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKaW5kZXggZWU4ZWNhOS4uOTVkYjU4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC01NCwyNiArNTUsMTIxIEBAIGJvb2wg
dmFsaWRJbWFnZVNpemUoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJv
b2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBnbDo6VGV4dHVy
ZSAqdGV4dHVyZSkKKy8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNv
bWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KK2Jvb2wgY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK3sKKyAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiBi
eSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICBzd2l0Y2ggKGZvcm1h
dCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgor
ICAgICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UOgorICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJ
TlZBTElEX0VOVU0KKyAgICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAt
PiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoK
KyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgor
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdC
QToKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorfQorYm9vbCB2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKIHsKICAgICBpZiAo
IXRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0Nv
bXByZXNzZWQoKSkKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQo
bGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAh
PSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIGlmIChmb3JtYXQgIT0gR0xfTk9O
RSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAg
fQogCiAgICAgaWYgKGNvbXByZXNzZWQpCiAgICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAh
PSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fCAKKyAgICAgICAgaWYgKCh3
aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKICAgICAg
ICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgw
KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwpAQCAtODksNiArMTg1LDQzIEBAIGJvb2wgdmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGlu
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUo
Ym9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKK3sKKyAgICBpZiAo
IXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0Nv
bXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IEdM
X05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQpCisgICAgeworICAgICAgICBpZiAo
KHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkp
IHx8CisgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5n
ZXRIZWlnaHQodGFyZ2V0LCAwKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8
CisgICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBs
ZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFs
c2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiAvLyBjaGVjayBmb3IgY29tYmlu
YXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwog
Ym9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpA
QCAtMTA5NCw3ICsxMjI3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhl
aWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQo
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXpl
LCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTAyLDcgKzEyMzUsNyBAQCB2b2lkIF9f
c3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2ZmcwogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29t
cHJlc3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTI1OCw2ICsx
MzkxLDE5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X1NURU5DSUxfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OgorICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygp
KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0xMzU1LDIzICsxNTAxLDMxIEBAIHZvaWQgX19z
dGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1
ZmZlckZvcm1hdCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICAgICAgICAgIGds
OjpUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9y
bWF0ID0gR0xfUkdCQTsKIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJE
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBHTF9OT05FLCB0ZXgyZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQg
PSB0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1
cmUgPSB0ZXgyZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1
YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKIAot
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVy
ZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIGlmICghdmFsaWRh
dGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRleGN1YmUpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQg
YnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBs
ZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgICAgICAg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQogICAgICAgICAgICAgc3dpdGNoICh0
ZXh0dXJlRm9ybWF0KQpAQCAtMTQxNCw2ICsxNTY4LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0wKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgogICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
MjMwNiwxOSArMjQ2MywyMSBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdAogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHRleHRhcmdldCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9
IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0
PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgy
ZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKQEAgLTIz
MjYsMTEgKzI0ODUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJl
Q3ViZU1hcCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlz
Q29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwpAQCAtMjQ0MCwyOCArMjYwNiw0MSBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpCiAKICAgICAgICAgaWYg
KGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwot
CiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXBy
ZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXND
b21wcmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yNzU5LDEyICsy
OTM4LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3Jh
bSwgY29uc3QgR0xjaGFyKiBuYW1lKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0
LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFt
QmluYXJ5LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMjE4LDcgKzMzOTgsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKQogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdn
ZWRGb3JEZWxldGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
Y2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKQEAgLTMyNDEsNiArMzQyMSw5
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCiAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZP
Uk1fTUFYX0xFTkdUSDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+
Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KQEAgLTM3NjYsMTIgKzM5NDksMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBidWZTaXoKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYo
bG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CkBAIC0zODAwLDEyICszOTg5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGds
R2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFy
YW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8
fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0
VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CkBAIC0zODQwLDE3ICs0MDM1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1p
dkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwg
cGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg3OSwxNyArNDA3NSwxOCBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9j
YXRpb24sIEdMaW50KiBwYXJhbXMpCiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBO
VUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3Jt
aXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAg
LTM5MzAsMTIgKzQxMjcsMTMgQEAgaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihH
THVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBw
cm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1
cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTUwMTIsNiArNTIxMCwyNiBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBi
eSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VT
OgorICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucworICAgICAgICAvLyAtIGlu
dmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAgICAgLy8gLSBpbnZhbGlk
IDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCiAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9BTFBI
QToKQEAgLTUwMjQsNyArNTI0Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfUkdCOgpAQCAtNTAzNiw3ICs1MjU0LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wK
ICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgpAQCAtNTA0OSw3ICs1MjY3LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZv
cm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKQEAgLTUwNTgsNyArNTI3Niw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUOiAgLy8gZXJyb3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRs
ZWQgYmVsb3cKQEAgLTUwNjYsOCArNTI4NCwyNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAog
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CiAgICAgICAgICAg
ICBicmVhazsgCisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGJvcmRlciAhPSAwKQpAQCAtNTE0Niw2ICs1MzgzLDIzIEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50
ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3Rl
eHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCisg
ICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAg
ICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtNTQxNiw2ICs1NjcwLDI1IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdM
ZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RF
WFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyBBTkdMRV9kZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMgMS1sZXZlbCB0ZXh0
dXJlcworICAgICAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCkBAIC01NDg0LDE0ICs1NzU3LDkg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFnbDo6Q2hlY2tUZXh0dXJl
Rm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1h
dFR5cGUoZm9ybWF0LCB0eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVscGVyIGZ1
bmN0aW9uCiAgICAgICAgIH0KIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwpAQCAtNTUxNywxMSArNTc4NSwyOSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9U
RVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRh
LCBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwg
d2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkp
CisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lk
dGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250
ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CkBA
IC01NTI5LDcgKzU4MTUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50CiAgICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBm
b3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50
KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTU3OCw3ICs1ODY0LDEzIEBAIHZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlv
biwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjIyLDcgKzU5MTQs
MTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW0tPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihs
b2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjY4LDcg
KzU5NjYsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAg
LTU3MTQsNyArNjAxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTU3NjAsNyArNjA3MCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQpAQCAtNTgwNiw3ICs2MTIyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9u
LCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtNTg1Miw3ICs2MTc0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00ZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODk4LDcgKzYyMjYsMTMgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZv
cm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQs
IHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTM4LDcgKzYyNzIsMTMgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU5NzgsNyArNjMxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjAxOCw3ICs2MzY0LDEz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC02MDU0LDcgKzY0MDYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVzZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02MDkyLDcgKzY0
NDQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT52YWxpZGF0ZSgpOworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT52YWxpZGF0
ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY0
NjMsNiArNjgyMSw3OSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAgIH0KIH0KIAordm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYnVmU2l6ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhw
LCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAgICAgICAg
cHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmJp
bmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworCisgICAgICAgICAgICBpZiAo
bGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xl
bnVtIGJpbmFyeUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9n
cmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0gMHgleCwgYmluYXJ5ID0gMHglMC44cCwgbGVuZ3Ro
ID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1hdCAhPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJpbmFyeShOVUxMKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnBy
b2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24KQEAgLTY0OTksNyArNjkzMCw4IEBAIF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJv
Y0FkZHJlc3MoY29uc3QgY2hhciAqCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUi
LCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VT
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFt
QmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9Owog
CiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXpl
b2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCmluZGV4IDdkMmI2NDkuLjNi
YzgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLnZjcHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2oKQEAgLTQwMSw2ICs0MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAi
CiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDkxLDYgKzQ5NSwxMCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIxLi40NDEwNWMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCkBAIC0y
NzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCiAgICAgfQog
fQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1h
dCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RFUFRIX1NU
RU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBzaW5n
bGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29tcHV0ZVBpeGVsU2l6
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Cisg
ICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNhc2UgR0xfRkxPQVQ6
CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMsNTMgKzM0OCw2IEBA
IGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5h
dGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoK
LSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0g
R0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAg
IHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRl
cm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpAQCAtNDA3LDYgKzM3
NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlO
QU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfREVQ
VEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAg
ICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVk
CiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0g
aW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwogICAgICAg
Y2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdO
RURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAg
cmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQz
Ml9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UXzI0
XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTc2Nyw2ICs3NDEs
NyBAQCBEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQog
ewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAg
ICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAg
ICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAtOTY1LDYgKzk0MCwxNiBAQCBib29sIElzRmxvYXQx
NkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K2Jvb2wgSXNEZXB0aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1
cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3RlbmNpbEZv
cm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3Jt
YXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1w
bGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RN
VUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCmluZGV4IDg4MjM4ZGMuLmVkMTUxNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApAQCAt
MTYsNiArMTYsOSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNE
Rk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citj
b25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTics
J1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdM
c2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCBhbGlnbm1lbnQpCiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xz
aXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6
ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElz
Q29tcHJlc3NlZChHTGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZv
cm1hdCk7CiBib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29s
IElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1
cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVt
IGludGVybmFsZm9ybWF0KTsKIApAQCAtNzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXpl
KEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7CiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFU
IHN0ZW5jaWxGb3JtYXQpOwogYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpOwogYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwor
Ym9vbCBJc0RlcHRoRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVu
Y2lsRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIAogR0xzaXplaSBHZXRTYW1wbGVz
RnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwogCg==
</data>
<flag name="commit-queue"
          id="155422"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147858</attachid>
            <date>2012-06-15 11:00:52 -0700</date>
            <delta_ts>2012-06-15 18:16:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1037861</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi5iZWMwMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsOSArMSwx
NCBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKKy8vIEdDQyA0LjIr
IHdpdGggdGhlIC1XLW1pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSBmbGFnIGdlbmVyYXRlcyBhIHdh
cm5pbmcgZm9yIHZzbnByaW50Zi4gV2Ugd2FudCB0byBpZ25vcmUgaXQuCisjaWYgZGVmaW5lZChf
X0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWZvcm1h
dC1hdHRyaWJ1dGUiCisjZW5kaWYKKwogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTQ1Miw3ICs0NTcsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRp
ZmllcikKICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNoYWRl
clNwZWMgPT0gU0hfV0VCR0xfU1BFQykgeworICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhz
aGFkZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAi
d2ViZ2xfIikgPT0gMCkgewogICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJy
TXNnLCAid2ViZ2xfIiwgIiIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDYx
LDEyICs0NjYsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2soaW50
IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0g
U0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9
PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3Nf
IiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBv
cykgewotICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2Nv
cmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIi
LCAiIik7Ci0gICAgICAgICAgICAvL3JldHVybiB0cnVlOwotICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5n
IHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJs
ZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ1Myw3ICsxNDYwLDcg
QEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBib29sIFRQYXJzZUNv
bnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRTb3VyY2VMb2MgbGluZSwgY29uc3QgVFR5
cGUmIGZpZWxkVHlwZSkKIHsKLSAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7
CisgICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTE0OTAsOCArMTQ5Nyw5IEBAIGludCBQYVBhcnNlU3RyaW5n
cyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10sCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsK
LSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOworICAgIGludCBlcnJvciA9
IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5ndGgsIGNvbnRleHQpOworICAgIGlmICgh
ZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2Mu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAK
aW5kZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
b3NpbmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNo
ZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWws
IGNvCiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4g
IEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAg
ICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5
dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNn
LCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9j
YXRpb24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0
YSgpKTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzog
RGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNu
cHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAl
cyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxv
Y1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQ
b29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRiNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKQEAgLTAsMCAr
MSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9O
CisjZGVmaW5lIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1ZGluZyBp
dHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitjbGFzcyBSZW5hbWVGdW5j
dGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUmVuYW1lRnVu
Y3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5nJiBuZXdG
dW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkK
KyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQorICAgICwgbU5ld0Z1bmN0
aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAg
ICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBpZiAoKG9wID09IEVPcEZ1
bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgpID09IG1P
bGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5jdGlvbk5h
bWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
VFN0cmluZyYgbU9sZEZ1bmN0aW9uTmFtZTsKKyAgICBjb25zdCBUU3RyaW5nJiBtTmV3RnVuY3Rp
b25OYW1lOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKaW5kZXggOTFj
NDdlNy4uMjY1MjhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NoSGFuZGxlLmgKQEAgLTI0LDYgKzI0LDEzIEBACiAKIGNsYXNzIExvbmdOYW1lTWFwOwog
Y2xhc3MgVENvbXBpbGVyOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaDsKKworLy8KKy8vIEhlbHBl
ciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgV2ViR0wg
c3BlYywKKy8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisvLworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKIAogLy8KIC8vIFRoZSBiYXNlIGNsYXNzIHVzZWQg
dG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCkBAIC03MCw2ICs3Nyw4IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVl
IGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZC4KICAgICBib29sIGRldGVjdFJlY3Vy
c2lvbihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIncyBpbnRl
cm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCisgICAgdm9p
ZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0KICAgICAv
LyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBwZW5kaXggQS4KICAg
ICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwpAQCAtNzksNiAr
ODgsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVy
bU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KICAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFzc2VzIHRoZSByZXN0cmljdGlvbnMgdGhhdCBhaW0gdG8g
cHJldmVudCB0aW1pbmcgYXR0YWNrcy4KKyAgICBib29sIGVuZm9yY2VUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgpOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVycy4KKyAgICBib29sIGVuZm9y
Y2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVu
ZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCisgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRp
b25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgorICAgIGJvb2wg
ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1
bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25C
ZWhhdmlvcigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKaW5kZXggMTNmMTFiNS4uNTZmNWM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcApA
QCAtNzIsMTIgKzcyLDE0IEBAIHN0YXRpYyB2b2lkIGdldFZhcmlhYmxlSW5mbyhTaFNoYWRlcklu
Zm8gdmFyVHlwZSwKICAgICBpbnQgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOwogICAgIEFTU0VSVChjaGVja0FjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJNYXhMZW5ndGhzKGhhbmRsZSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCkpOwogICAg
IHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGgpOworICAgIG5hbWVbYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCAtIDFdID0g
MDsKICAgICBpZiAobWFwcGVkTmFtZSkgewogICAgICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRj
aCB0aGF0IHF1ZXJpZWQgYnkKICAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCBp
biBTaEdldEluZm8sIGJlbG93LgogICAgICAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4
TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1h
cHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3Ro
KTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAKaW5kZXggZWRiZWE5OS4uNjhmMDI5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCkBAIC0xNiw5
ICsxNiwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKICNpbmNsdWRl
IDxzdGRpby5oPgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKwogLy8KIC8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNl
IHRvIGxpdmUuCiAvLwpAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFRUeXBlOjpidWlsZE1hbmdsZWRO
YW1lKFRTdHJpbmcmIG1hbmdsZWROYW1lKQogICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0
PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgYXJyYXlTaXpl
KTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsK
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwogICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7
CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQzOTg1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NiAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2
ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCi0KLSNpbmNsdWRl
ICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIK
LQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Ci19
Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0gICAgbm9kZS0+dHJhdmVyc2Uo
dGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0
cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBtT3V0cHV0
SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsK
LQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgImlmKCI7Ci0gICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9k
ZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBz
IiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgImVsc2Vc
biIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAg
ICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotCi0g
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4Owot
Ci0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEluaXQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRDb25kaXRp
b24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsKLSAgICAg
ICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBt
VGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
aW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICByZXR1cm4g
bVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRhM2JhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91
dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xE
U0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNzIE91dHB1
dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17
Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHByb3RlY3Rl
ZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpjb25zdCBt
T3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0jZW5kaWYg
ICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4MmViYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwCkBAIC0wLDAgKzEsMTcyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRD
aXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3Bl
cmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBhc3NpZ25l
ZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJhbnNsYXRv
ciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ug
c2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCks
IG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30K
Kwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKyAgICBub2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKK30KKworYm9v
bCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRC
b2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAg
Y2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHRydWU7
IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRv
d24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMi
IDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOwor
ICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYoIXMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBj
YXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8g
InggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBl
bHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMg
ZG93biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBz
IiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsK
KyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtc
biI7CisgICAgICAgICAgICBvdXQgPDwgImlmKHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBv
dXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgLy8g
VW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2UgcyA9IHk7
IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBp
bnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5
cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOworICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldFRy
dWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8
PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4iCisgICAg
ICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsK
KyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKwor
ICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJbml0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9u
KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAg
IG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgbVRl
bXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lu
dCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7CisgICAgcmV0
dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKQEAg
LTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBp
cyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBh
cyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hPUlRD
SVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitjbGFzcyBV
bmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6
CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhM
U0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAg
IGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUp
OworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSk7CisK
KyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFRQ
YXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRwdXRITFNM
OworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8vIENPTVBJ
TEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTY2MWQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oIgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJ
bnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpi
dWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRl
bmN5R3JhcGgoKQoreworICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1BbGxOb2Rlcy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVy
KQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxl
dGUgbm9kZTsKKyAgICB9Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpj
cmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50
TnVtYmVyKQoreworICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1
bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1
bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwq
IGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxs
KTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0
aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAg
ICByZXR1cm4gZnVuY3Rpb25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3Jh
cGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAg
ICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChp
bnRlcm1TeW1ib2wtPmdldElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxM
OworCisgICAgaWYgKGl0ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1i
b2xJZFBhaXIgcGFpciA9ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJv
bCk7CisgICAgICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3lt
Ym9sSWRQYWlyIHBhaXIoaW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBt
U3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBs
ZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJz
YWxzIGZyb20gdGhlbSBxdWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFj
ayhzeW1ib2wpOworICAgIH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVj
dGlvbiogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24q
IGludGVybVNlbGVjdGlvbikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5l
dyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKHNlbGVjdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCog
VERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sK
KyAgICBUR3JhcGhMb29wKiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBo
TG9naWNhbE9wKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFy
eSogaW50ZXJtTG9naWNhbE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0g
bmV3IFRHcmFwaExvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNo
X2JhY2sobG9naWNhbE9wKTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFy
KiBUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFy
KiBvcFN0cmluZyA9IE5VTEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0
T3AoKSkgeworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gb3BTdHJpbmc7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YzM1ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
CisKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFwaE5vZGU7
CitjbGFzcyBUR3JhcGhQYXJlbnROb2RlOworY2xhc3MgVEdyYXBoQXJndW1lbnQ7CitjbGFzcyBU
R3JhcGhGdW5jdGlvbkNhbGw7CitjbGFzcyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3JhcGhTZWxl
Y3Rpb247CitjbGFzcyBUR3JhcGhMb29wOworY2xhc3MgVEdyYXBoTG9naWNhbE9wOworY2xhc3Mg
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ7
CisKK3R5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRlZiBzdGQ6
OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBUR3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6
dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2FsbCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisKKy8vCisv
LyBCYXNlIGNsYXNzIGZvciBhbGwgZGVwZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitjbGFzcyBU
R3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6
IGludGVybU5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2
ZXJzZXIpOworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworfTsKKwor
Ly8KKy8vIEJhc2UgY2xhc3MgZm9yIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBtYXkgaGF2
ZSBjaGlsZHJlbi4KKy8vCitjbGFzcyBUR3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRHcmFwaE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDog
VEdyYXBoTm9kZShub2RlKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUoKSB7fQor
ICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9kZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChub2RlICE9
IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5pbnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJp
dmF0ZToKKyAgICBUR3JhcGhOb2RlU2V0IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8vCisvLyBI
YW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJndW1lbnQg
OiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJndW1lbnQo
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIp
CisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAg
ICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3VtZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwgflRHcmFw
aEFyZ3VtZW50KCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9
CisgICAgaW50IGdldEFyZ3VtZW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3VtZW50TnVt
YmVyOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51bWJlcjsK
K307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdyYXBoRnVu
Y3Rpb25DYWxsIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAg
ICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAgdmlydHVh
bCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBn
ZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0Fn
Z3JlZ2F0ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgc3ltYm9scy4K
Ky8vCitjbGFzcyBUR3JhcGhTeW1ib2wgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkgOiBUR3Jh
cGhQYXJlbnROb2RlKGludGVybVN5bWJvbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTeW1ib2wo
KSB7fQorICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307
CisKKy8vCisvLyBIYW5kbGUgaWYgc3RhdGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCisv
LworY2xhc3MgVEdyYXBoU2VsZWN0aW9uIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgor
ICAgIFRHcmFwaFNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pIDog
VEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rpb24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU2VsZWN0
aW9uKCkge30KKyAgICBjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBs
b29wcy4KKy8vCitjbGFzcyBUR3JhcGhMb29wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaExvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBoTm9kZShp
bnRlcm1Mb29wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNvbnN0IFRJ
bnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0
QXNMb29wTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgbG9naWNh
bCBhbmQsIG9yLgorLy8KK2NsYXNzIFRHcmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9n
aWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaExvZ2ljYWxPcCgpIHt9CisgICAgY29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50ZXJtTG9n
aWNhbE9wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7IH0K
KyAgICBjb25zdCBjaGFyKiBnZXRPcFN0cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9Owor
CisvLworLy8gQSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBj
b25kaXRpb25zIGV0Yy4KKy8vCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0
byB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8vIERlcGVu
ZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBw
cm92aWRlZCAiY3JlYXRlLi4uIiBtZXRob2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5vYm9keSBl
bHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkgb2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBOb2RlcyBt
YXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVkIG5vZGVz
IHdpbGwgZXhpc3Qgd2hpbGUgdGhlCisvLyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNlIGV4aXN0
cy4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5j
eUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lHcmFwaCgp
OworICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKworICAgIFRH
cmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9scygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7CisgICAg
fQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1wbGVyU3lt
Ym9scygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmVuZCgp
OworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9u
Q2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmVu
ZCgpOworICAgIH0KKworICAgIFRHcmFwaEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7CisgICAg
VEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRlU3ltYm9s
KFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBjcmVh
dGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBUR3Jh
cGhMb29wKiBjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBUR3JhcGhM
b2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3Ap
OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9s
SWRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9s
SWRQYWlyOworCisgICAgVEdyYXBoTm9kZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdyYXBoU3lt
Ym9sVmVjdG9yIG1TYW1wbGVyU3ltYm9sczsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yIG1Vc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHM7CisgICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1hcDsKK307
CisKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNlcnMgc2hv
dWxkIGRlcml2ZSBmcm9tIHRoaXMsCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRh
dGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9kLgorLy8K
Ky8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5
b3Ugd2FudCB2aXNpdGVkLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgewor
cHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgwKSB7fQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogc2VsZWN0aW9u
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihU
R3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9v
cChUR3JhcGhMb29wKiBsb29wKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApIHt9OworCisgICAgaW50IGdldERlcHRoKCkgY29u
c3QgeyByZXR1cm4gbURlcHRoOyB9CisgICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsgKyttRGVw
dGg7IH0KKyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisgICAgdm9p
ZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNpdGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1hcmtWaXNp
dGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsgbVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9CisgICAgYm9v
bCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0ZWQuZmlu
ZChub2RlKSAhPSBtVmlzaXRlZC5lbmQoKTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURlcHRoOwor
ICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0ZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNDk4NzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vob2xkZXIKKyAgICBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0
cmVlOworCitURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cjo6VFN1YnRyZWVQbGFjZWhvbGRlcgorICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlOworCit2b2lkIFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCog
Z3JhcGgpCit7CisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgYnVpbGRlcihncmFwaCk7Cisg
ICAgYnVpbGRlci5idWlsZChub2RlKTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFn
Z3JlZ2F0ZSkKK3sKKyAgICBzd2l0Y2ggKGludGVybUFnZ3JlZ2F0ZS0+Z2V0T3AoKSkgeworICAg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6IHZpc2l0RnVuY3Rp
b25DYWxsKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiB2aXNpdEFn
Z3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAg
IC8vIEN1cnJlbnRseSwgd2UgZG8gbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucy4K
KyAgICBpZiAoaW50ZXJtQWdncmVnYXRlLT5nZXROYW1lKCkgIT0gIm1haW4oIikKKyAgICAgICAg
cmV0dXJuOworCisgICAgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOwor
fQorCisvLyBUYWtlcyBhbiBleHByZXNzaW9uIGxpa2UgImYoeCkiIGFuZCBjcmVhdGVzIGEgZGVw
ZW5kZW5jeSBncmFwaCBsaWtlCisvLyAieCAtPiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwi
Lgordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwoVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQoreworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogZnVuY3Rpb25DYWxsID0gbUdyYXBoLT5jcmVhdGVGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rp
b25DYWxsKTsKKworICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50
cy4KKyAgICBpbnQgYXJndW1lbnROdW1iZXIgPSAwOworICAgIFRJbnRlcm1TZXF1ZW5jZSYgaW50
ZXJtQXJndW1lbnRzID0gaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXRTZXF1ZW5jZSgpOworICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gaW50ZXJtQXJndW1lbnRz
LmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGludGVybUFyZ3VtZW50cy5lbmQoKTsKKyAgICAg
ICAgICsraXRlciwgKythcmd1bWVudE51bWJlcikKKyAgICB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtQXJndW1lbnQgPSAqaXRlcjsKKyAgICAgICAgaW50ZXJtQXJndW1lbnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXJndW1lbnROb2RlcyA9IG1O
b2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoQXJndW1lbnQqIGFyZ3Vt
ZW50ID0gbUdyYXBoLT5jcmVhdGVBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50
TnVtYmVyKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGFy
Z3VtZW50Tm9kZXMsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGFyZ3VtZW50LT5hZGREZXBlbmRl
bnROb2RlKGZ1bmN0aW9uQ2FsbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQdXNoIHRo
ZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGludG8gdGhlIGN1cnJlbnQg
c2V0IG9mIGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQg
b2YgdGhpcyBmdW5jdGlvbiBjYWxsLgorICAgIC8vIFRodXMsIGFuIGV4cHJlc3Npb24gbGlrZSAi
eSA9IGYoeCkiIHdpbGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKyAgICAvLyAieCAt
PiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwgLT4geSIuCisgICAgLy8gVGhpcyBsaW5lIGVz
c2VudGlhbGx5IHBhc3NlcyB0aGUgZnVuY3Rpb24gY2FsbCBub2RlIGJhY2sgdXAgdG8gYW4gZWFy
bGllciB2aXNpdEFzc2lnbm1lbnQKKyAgICAvLyBjYWxsLCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUg
Y29ubmVjdGlvbiAiZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChmdW5jdGlvbkNhbGwpOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0
ZSkKK3sKKyAgICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gaW50ZXJtQWdncmVnYXRlLT5n
ZXRTZXF1ZW5jZSgpOworICAgIGZvcihUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOyBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCisg
ICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtQ2hpbGQgPSAqaXRlcjsKKyAgICAgICAg
aW50ZXJtQ2hpbGQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sKQor
eworICAgIC8vIFB1c2ggdGhpcyBzeW1ib2wgaW50byB0aGUgc2V0IG9mIGRlcGVuZGVudCBzeW1i
b2xzIGZvciB0aGUgY3VycmVudCBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbgorICAgIC8vIHRoYXQg
d2UgYXJlIHRyYXZlcnNpbmcuCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBtR3JhcGgtPmdl
dE9yQ3JlYXRlU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgbU5vZGVTZXRzLmluc2VydEludG9U
b3BTZXQoc3ltYm9sKTsKKworICAgIC8vIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBjdXJyZW50IGxl
ZnRtb3N0IHN5bWJvbCB1bmRlciBhbiBhc3NpZ25tZW50LCByZXBsYWNlIHRoZSBwcmV2aW91cwor
ICAgIC8vIGxlZnRtb3N0IHN5bWJvbCB3aXRoIHRoaXMgc3ltYm9sLgorICAgIGlmICghbUxlZnRt
b3N0U3ltYm9scy5lbXB0eSgpICYmIG1MZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0KKyAgICAgICAg
JlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpIHsKKyAgICAgICAgbUxl
ZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgbUxlZnRtb3N0U3ltYm9scy5wdXNoKHN5bWJv
bCk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQoreworICAgIFRPcGVy
YXRvciBvcCA9IGludGVybUJpbmFyeS0+Z2V0T3AoKTsKKyAgICBpZiAob3AgPT0gRU9wSW5pdGlh
bGl6ZSB8fCBpbnRlcm1CaW5hcnktPm1vZGlmaWVzU3RhdGUoKSkKKyAgICAgICAgdmlzaXRBc3Np
Z25tZW50KGludGVybUJpbmFyeSk7CisgICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNhbEFuZCB8
fCBvcCA9PSBFT3BMb2dpY2FsT3IpCisgICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVybUJpbmFy
eSk7CisgICAgZWxzZQorICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJpbmFyeSk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQoreworICAg
IFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExlZnQoKTsK
KyAgICBpZiAoIWludGVybUxlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIFRHcmFwaFN5bWJv
bCogbGVmdG1vc3RTeW1ib2wgPSBOVUxMOworCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50
YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgeworICAgICAgICAgICAg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGlu
dGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2wgPSBt
TGVmdG1vc3RTeW1ib2xzLnRvcCgpOworCisgICAgICAgICAgICAvLyBBZnRlciB0cmF2ZXJzaW5n
IHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25tZW50LCB3ZSBzaG91bGQgaGF2ZSBmb3Vu
ZCBhIHJlYWwKKyAgICAgICAgICAgIC8vIGxlZnRtb3N0IHN5bWJvbCwgYW5kIHRoZSBsZWZ0bW9z
dCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9sZGVyLgorICAgICAgICAgICAgQVNTRVJU
KGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprTGVmdFN1YnRy
ZWUpOworICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChU
SW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0UmlnaHQoKSkg
eworICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7
CisgICAgICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KGFzc2lnbm1lbnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOworICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3VycmVudCBz
ZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBv
ZiB0aGlzIGFzc2lnbm1lbnQuCisgICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0gKGIgPSBj
KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEiLgorICAg
IC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0
aGUgbmVzdGVkIGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCisgICAgLy8gZXhhbXBsZSkgYmFjayB1
cCB0byB0aGUgZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVyIGFzc2ln
bm1lbnQsIHdoaWNoIHdpbGwKKyAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIgLT4gYSIu
CisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJtQmluYXJ5
KiBpbnRlcm1Mb2dpY2FsT3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9
IGludGVybUxvZ2ljYWxPcC0+Z2V0TGVmdCgpKSB7CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUxl
ZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxlZnROb2Rl
cyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOwor
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5vZGVzLCBs
b2dpY2FsT3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50
ZXJtUmlnaHQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQorewor
ICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1CaW5hcnktPmdldExlZnQo
KSkKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUJpbmFyeS0+Z2V0UmlnaHQoKSkgeworICAgICAg
ICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlz
LCBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKworYm9vbCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
IGludGVybVNlbGVjdGlvbikKK3sKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNvbmRpdGlv
biA9IGludGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRp
dGlvbi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0
aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaFNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJtU2VsZWN0
aW9uKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRp
dGlvbk5vZGVzLCBzZWxlY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRl
cm1Ob2RlKiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVCbG9jaygp
KQorICAgICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJ
bnRlcm1Ob2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRGYWxzZUJs
b2NrKCkpCisgICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQoreworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlvbigpKSB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBh
cmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7Cisg
ICAgICAgICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGludGVybUxv
b3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0
aW9uTm9kZXMsIGxvb3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQorICAgICAgICBpbnRlcm1Cb2R5
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4cHJlc3Np
b24gPSBpbnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgIGludGVybUV4cHJlc3Np
b24tPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQ
YXJlbnROb2RlU2V0KiBub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVzLT5iZWdp
bigpOyBpdGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
UGFyZW50Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKKyAgICAgICAgY3VycmVudE5vZGUtPmFk
ZERlcGVuZGVudE5vZGUobm9kZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdj
MjllMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKQEAgLTAsMCArMSwxODQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JB
UEhfQlVJTERFUl9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
QlVJTERFUl9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKworLy8KKy8vIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0
aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRlcm1lZGlh
dGUgdHJlZS4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50ZXJtTm9k
ZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitwcml2YXRl
OgorICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3RhY2s7Cisg
ICAgdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVTZXQ7CisK
KyAgICAvLworICAgIC8vIEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMgb2YgYXNz
aWdubWVudHMsIGNvbmRpdGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBp
bnRlcm1lZGlhdGUgdHJlZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMg
c3RhY2sgb2Ygc2V0cy4gRWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBwYXJlbnQg
bm9kZXMuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFROb2RlU2V0U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2soKSB7IGNs
ZWFyKCk7IH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBh
IHB1c2hTZXQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBpcyBlbXB0
eS4KKyAgICAgICAgVFBhcmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFy
ZW50Tm9kZVNldCogdG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICByZXR1cm4g
IXRvcFNldC0+ZW1wdHkoKSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIHB1c2hTZXQoKSB7IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkpOyB9Cisg
ICAgICAgIHZvaWQgcG9wU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsKKyAgICAg
ICAgICAgIG5vZGVTZXRzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wcyB0aGUg
dG9wIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0LgorICAgICAg
ICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBzZXQgaXMg
anVzdCBkZWxldGVkLgorICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBvbGRUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIG5vZGVT
ZXRzLnBvcCgpOworCisgICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9wKCk7Cisg
ICAgICAgICAgICAgICAgbmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigpLCBvbGRU
b3BTZXQtPmVuZCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG9sZFRv
cFNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBu
byB0b3Agc2V0LgorICAgICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBu
byB0b3Agc2V0IGlmIHdlIGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRoYXQgYXJl
IG5vdCB1bmRlciBhbiBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0byB0cmFjayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2VydEludG9U
b3BTZXQoVEdyYXBoUGFyZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBub2RlU2V0cy50b3AoKS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMuZW1wdHko
KSkKKyAgICAgICAgICAgICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVudE5vZGVT
ZXRTdGFjazsKKworICAgICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOworICAgIH07
CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3
IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdv
ZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8KKyAgICBj
bGFzcyBUTm9kZVNldE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAg
OiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+
VE5vZGVTZXRNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAgIC8vIEFu
IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFu
dGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBh
bmQgcG9wcyB0aGUgdG9wIG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bworICAgIC8v
IHRoZSBuZXcgdG9wIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGlu
Z01haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAg
ICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAg
IH5UTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRvTmV4dCgp
OyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07
CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMgdHJhY2sg
b2YgdGhlIGxlZnRtb3N0IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAgICAvLyBh
c3NpZ25tZW50LgorICAgIC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3ltYm9sIGtM
ZWZ0U3VidHJlZSB3aGVuIGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwKKyAgICAv
LyBhbmQga1JpZ2h0U3VidHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8gV2hlbiBp
dCBnb2VzIG91dCBvZiBzY29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJvbCBhdCB0
aGUgdG9wIG9mIHRoZSBzY29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEgcmVhbCBz
eW1ib2wuCisgICAgLy8ga1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2VkIGJ5IGEg
cmVhbCBzeW1ib2wgYmVjYXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0CisgICAgLy8g
c3ltYm9sLgorICAgIC8vCisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciB7Cisg
ICAgcHVibGljOgorICAgICAgICBjbGFzcyBUU3VidHJlZVBsYWNlaG9sZGVyIDogcHVibGljIFRH
cmFwaFN5bWJvbCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFRTdWJ0cmVlUGxhY2Vo
b2xkZXIoKSA6IFRHcmFwaFN5bWJvbChOVUxMKSB7fQorICAgICAgICB9OworCisgICAgICAgIHN0
YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVyIGtMZWZ0U3VidHJlZTsKKyAgICAgICAgc3RhdGljIFRT
dWJ0cmVlUGxhY2Vob2xkZXIga1JpZ2h0U3VidHJlZTsKKworICAgICAgICBUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5LCBUU3VidHJlZVBs
YWNlaG9sZGVyJiBzdWJ0cmVlKQorICAgICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9y
eS0+bUxlZnRtb3N0U3ltYm9scykKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZHNQbGFjZWhv
bGRlclN5bWJvbCA9IGxlZnRtb3N0U3ltYm9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50
b3AoKSAhPSAmc3VidHJlZTsKKyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9s
KQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIH5UTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAg
bGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFRTeW1ib2xTdGFjayYgbGVmdG1vc3RTeW1ib2xzOworICAgICAgICBib29sIG5lZWRzUGxh
Y2Vob2xkZXJTeW1ib2w7CisgICAgfTsKKworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFRE
ZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwg
ZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1HcmFwaChncmFwaCkge30KKyAgICB2b2lkIGJ1aWxk
KFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRyYXZlcnNlKHRoaXMpOyB9
CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJlbnROb2Rl
U2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7CisKKyAgICB2b2lkIHZpc2l0QXNz
aWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdExvZ2ljYWxPcChUSW50ZXJt
QmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqKTsK
KyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAg
ICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUq
KTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1O
b2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Z2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOworfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRl
cikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVudCAi
IDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgorICAg
ICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8
PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25D
YWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1dEluZGVu
dGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25DYWxs
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wp
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdldElu
dGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAgICA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiog
c2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgInNl
bGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3Ao
VEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBvdXRw
dXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9wLT5n
ZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBt
U2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1TaW5rIDw8
ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAgY2xl
YXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1T
aW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDQ3ZGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAor
I2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisKKyNp
bmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVi
bGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25D
YWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNh
bE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBo
JiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAg
IFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQ
SF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApAQCAtMCwwICsxLDY5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJz
YWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9pZCBUR3Jh
cGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQg
VEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIp
OworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBWaXNp
dCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0
ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAg
ICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBoVHJhdmVy
c2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7
Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEFyZ3Vt
ZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNp
dEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFw
aFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+
dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhU
cmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXIt
PnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRM
b29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30K
Kwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvZ2ljYWxP
cCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAppbmRleCAy
NmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0OwogZXh0
ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRl
cm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKLWV4dGVy
biB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYzYzZWZhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0xLDYgKzEsNiBAQAogLyoK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUsNyBAQCBX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCiAKICV0
b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTU5LDYgKzE1OSw3IEBAIE8gICAg
ICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisiZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAog
ImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hv
cnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2
ICsxNjcsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CkBAIC0xNzMsMTIgKzE3NSwyMSBAQCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Cisic2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJz
YW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2Ft
cGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1w
bGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2Ft
cGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxl
cjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJz
aXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3Qi
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC01NjgsMTkg
KzU3OSwxNSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CiAgICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19z
Y2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBn
bHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7
CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVu
byhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQt
PkFmdGVyRU9GID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCiAgICAg
Y3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBh
QXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3Bw
LT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsK
LSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiBJbml0U2Nhbm5lcklu
cHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5
OS4uNWNmYTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfbGV4LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZ19sZXguY3BwCkBAIC0xLDYgKzEsNiBAQAotI2xpbmUgMTcgIi4vZ2xzbGFu
Zy5sIgorI2xpbmUgMTcgIi4vY29tcGlsZXIvZ2xzbGFuZy5sIgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTIxLDcgKzIxLDcgQEAKIAogCiAKLSNsaW5lIDI1ICIuL2dsc2xhbmdfbGV4
LmNwcCIKKyNsaW5lIDI1ICIuL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCIKIAogI2RlZmluZSAg
WVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CiAKQEAgLTM4Myw4ICszODMsOCBAQCBzdGF0aWMgdm9p
ZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKIAkqeXlfY3AgPSAnXDAnOyBcCiAJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZp
bmUgWVlfTlVNX1JVTEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmlu
ZSBZWV9OVU1fUlVMRVMgMTU1CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTU2CiAvKiBUaGlz
IHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNl
IGlzIG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC0zOTIsNTUgKzM5Miw1
OCBAQCBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxl
eF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Fj
Y2VwdFs0MjZdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDU5XSA9
CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAx
NDgsICAxNDYsICAxNDUsICAxNDUsCi0gICAgICAxMzAsICAxMzYsICAxNDEsICAxMjUsICAxMjYs
ICAxMzQsICAxMzMsICAxMjIsICAxMzEsICAxMjksCi0gICAgICAxMzUsICAgOTQsICAgOTQsICAx
MjMsICAxMTksICAxMzcsICAxMjQsICAxMzgsICAxNDIsICAgOTAsCi0gICAgICAxMjcsICAxMjgs
ICAxNDAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
Ci0gICAgICAgOTAsICAgOTAsICAgOTAsICAxMjAsICAxMzksICAxMjEsICAxMzIsICAgIDMsICAg
IDQsICAgIDMsCi0gICAgICAxNDQsICAxNDcsICAxNDMsICAxMTYsICAxMDIsICAxMjEsICAxMTAs
ICAxMDUsICAxMDAsICAxMDgsCi0gICAgICAgOTgsICAxMDksICAgOTksICAgOTcsICAgIDIsICAg
IDEsICAxMDEsICAgOTYsICAgOTIsICAgOTMsCi0gICAgICAgIDAsICAgIDAsICAgOTQsICAxMjgs
ICAxMjAsICAxMjcsICAxMTcsICAxMTMsICAxMTUsICAxMTQsCi0gICAgICAxMTgsICAgOTAsICAx
MDYsICAxMTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICAxNywgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAy
MCwgICAyMiwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgIDEwNywgIDExMSwgICAgNSwgIDE0MywKLSAgICAgICAgMCwgICAgMSwgICA5
NiwgICAgMCwgICAgMCwgICA5NSwgICA5MSwgIDEwMywgIDEwNCwgICA1MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAxOCwgICA5MCwg
ICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyNiwgICA5
MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMywg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgICAwLCAgIDk3LAotICAgICAgICAwLCAg
IDk2LCAgIDkwLCAgIDI4LCAgIDkwLCAgIDkwLCAgIDg3LCAgIDkwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIxLCAgIDUzLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotICAgICAgIDkwLCAgIDU4LCAgIDcyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDY5LCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDU2LCAgIDI5LCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDM2LAotICAgICAgIDM3LCAgIDM4
LCAgIDI3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LAotICAgICAg
IDUxLCAgIDEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDgzLCAgIDg0LCAgIDg1LCAgIDkw
LAotCi0gICAgICAgMzAsICAgNzMsICAgMjUsICAgODAsICAgODEsICAgODIsICAgIDcsICAgNzcs
ICAgNzgsICAgNzksCi0gICAgICAgOTAsICAgMjQsICAgNzUsICAgOTAsICAgOTAsICAgMzksICAg
NDAsICAgNDEsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgNzAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgNTIsICAgOTAsICAgODksICAgOTAsICAgOTAsCi0gICAgICAgMTksICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgNzEsICAgNjYsICAgNjEsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgNzYsICAgNTcsICAgOTAsICAgNjQsICAgMzIsICAgOTAsICAgODYs
Ci0gICAgICAgNjUsICAgNDksICAgNTksICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsCi0gICAgICAgOTAsICAgNjAsICAgMzEsICAgOTAsICAgOTAsICAgOTAsICAgIDgs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgNTQsICAgMTMsICAgOTAsICAg
MTQsICAgOTAsICAgOTAsICAgMTYsICAgNjcsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNjIs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgNTUsICAgNzQsCi0KLSAgICAgICA2MywgICAxMSwg
ICA2OCwgICAgNiwgICA4OCwgICAxMCwgICA0NSwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA0NiwgICA5MCwgICA5MCwgICA5MCwgICA0OCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA0NywgICAgMAorICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTU2LCAgMTU0LCAgMTUzLCAgMTUzLAorICAgICAgMTM4LCAg
MTQ0LCAgMTQ5LCAgMTMzLCAgMTM0LCAgMTQyLCAgMTQxLCAgMTMwLCAgMTM5LCAgMTM3LAorICAg
ICAgMTQzLCAgMTAyLCAgMTAyLCAgMTMxLCAgMTI3LCAgMTQ1LCAgMTMyLCAgMTQ2LCAgMTUwLCAg
IDk4LAorICAgICAgMTM1LCAgMTM2LCAgMTQ4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTI4LCAgMTQ3
LCAgMTI5LCAgMTQwLCAgICAzLCAgICA0LCAgICAzLAorICAgICAgMTUyLCAgMTU1LCAgMTUxLCAg
MTI0LCAgMTEwLCAgMTI5LCAgMTE4LCAgMTEzLCAgMTA4LCAgMTE2LAorICAgICAgMTA2LCAgMTE3
LCAgMTA3LCAgMTA1LCAgICAyLCAgICAxLCAgMTA5LCAgMTA0LCAgMTAwLCAgMTAxLAorICAgICAg
ICAwLCAgICAwLCAgMTAyLCAgMTM2LCAgMTI4LCAgMTM1LCAgMTI1LCAgMTIxLCAgMTIzLCAgMTIy
LAorICAgICAgMTI2LCAgIDk4LCAgMTE0LCAgMTIwLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMTcsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgMjAsICAgMjIsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAxMTUsICAxMTksICAgIDUs
CisgICAgICAxNTEsICAgIDAsICAgIDEsICAxMDQsICAgIDAsICAgIDAsICAxMDMsICAgOTksICAx
MTEsICAxMTIsCisgICAgICAgNTAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgMTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjYsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjMsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwKKyAgICAgICA5OCwgICAgMCwgIDEwNSwgICAgMCwgIDEwNCwgICA5OCwgICAyOCwg
ICA5OCwgICA5OCwgICA5NSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICAyMSwgICA1MywgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA2OSwgICA5OCwg
ICA5OCwgICA1OCwgICA3MywgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA3MCwgICAgOSwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NiwgICAyOSwgICA5OCwg
ICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAzNiwgICAzNywgICAzOCwgICAy
NywgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICAxNSwgICA0MiwgICA0MywgICA0NCwgICA1MSwg
ICAxMiwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDgyLCAgIDgzLCAgIDg0LCAg
IDk4LCAgIDMwLCAgIDc0LCAgIDI1LCAgIDg1LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDc5
LCAgIDgwLCAgIDgxLCAgIDk4LCAgIDI0LCAgIDc3LCAgIDk4LCAgIDk4LAorICAgICAgIDM5LCAg
IDQwLCAgIDQxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDcxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDUyLCAgIDk4LCAgIDk3LCAgIDk4LCAgIDk4LCAgIDE5LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDcyLCAgIDY2LCAgIDYxLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDc4LAorICAgICAgIDU3LCAgIDk4LCAgIDY0LCAgIDMyLCAgIDk4
LCAgIDk0LCAgIDY1LCAgIDQ5LCAgIDc2LCAgIDU5LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDYwLCAgIDMxLAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgICA4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU0LAorICAgICAg
IDEzLCAgIDk4LCAgIDE0LCAgIDk4LCAgIDk4LCAgIDE2LCAgIDY3LCAgIDk4LCAgIDk4LCAgIDk4
LAorCisgICAgICAgNjIsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTUs
ICAgNzUsICAgNjMsCisgICAgICAgMTEsICAgNjgsICAgIDYsICAgOTYsICAgMTAsICAgODgsICAg
NDUsICAgODksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgNDYsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNDgsICAgOTgsCisgICAgICAgOTIsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTAsICAgOTgsICAgOTEsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNDcsICAgOTMsICAgIDAKICAgICB9IDsKIAog
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDUwLDE1ICs0NTMs
MTUgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAog
ICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAx
LCAgICA3LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAg
IDE1LCAgIDE2LCAgIDE3LAotICAgICAgIDE4LCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIw
LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgICAxLCAg
IDI3LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDI3LAotICAgICAgIDMxLCAgIDMxLCAgIDMx
LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMyLCAgIDMxLAotICAgICAgIDMxLCAg
IDMzLCAgIDM0LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDM1LCAgIDMxLCAgIDMxLAotICAg
ICAgIDM2LCAgICAxLCAgIDM3LCAgIDM4LCAgIDMxLCAgICAxLCAgIDM5LCAgIDQwLCAgIDQxLCAg
IDQyLAotCi0gICAgICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgMzEsICAgNDgsICAg
NDksICAgNTAsICAgNTEsCi0gICAgICAgNTIsICAgNTMsICAgMzEsICAgNTQsICAgNTUsICAgNTYs
ICAgNTcsICAgNTgsICAgNTksICAgNjAsCi0gICAgICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAg
NjUsICAgNjYsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTgsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAg
MjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisgICAg
ICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAg
MzIsCisgICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYs
ICAgMzIsICAgMzIsCisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAg
NDAsICAgNDEsICAgNDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0
OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAzMiwg
ICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2MiwgICA2
MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ3NSwyMDEgKzQ3OCwyMTQgQEAgc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY3
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAg
ICAzLCAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAz
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLAor
ICAgICAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA0LCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LAogICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCisgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDMxXSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0NjRdID0KICAgICB7ICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICA2NCwgICA2NSwgICA3NCwgICAgMCwgIDYyNywgIDYyOCwgIDYyOCwg
IDYyOCwKLSAgICAgIDYwMiwgICA0NSwgIDEzNSwgIDYyOCwgIDYyOCwgIDYwMSwgIDEzMiwgIDYy
OCwgIDEzMSwgIDEyOSwKLSAgICAgIDE0MywgIDE1NSwgIDE2MywgIDU5OSwgIDYyOCwgIDE3OSwg
IDU5OSwgICA0NywgIDYyOCwgICAgMCwKLSAgICAgIDYyOCwgIDYyOCwgIDEyNiwgICA5OCwgIDEw
OCwgIDE0NywgIDE1OCwgIDE1OCwgIDE2NSwgIDU3MCwKLSAgICAgIDEzMCwgIDEwNywgIDU2OSwg
IDE0OCwgIDE1NiwgIDU2MywgIDE3MiwgIDU3NiwgIDE3NCwgIDE4MSwKLSAgICAgIDE3NywgIDE5
NSwgIDU3MiwgIDYyOCwgIDE3MywgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYwMywKLSAgICAg
IDYyOCwgIDYyOCwgICAgMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYy
OCwKLSAgICAgIDYyOCwgIDYyOCwgIDYyOCwgIDIzMywgIDYyOCwgICAgMCwgIDYyOCwgIDIzOSwg
IDI1NSwgIDI3MSwKLSAgICAgIDI4NywgICAgMCwgIDMwMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDU5
MiwgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAgIDU5MSwgICAgMCwgIDYyOCwgIDYyOCwgIDU2NCwg
IDU1NywgIDU2MCwgIDU2OCwgIDU2NywgIDU1NCwKLQotICAgICAgNTY5LCAgNTU2LCAgNTYyLCAg
NTUwLCAgNTQ3LCAgNTYwLCAgNTQ3LCAgNTQ0LCAgNTQ0LCAgNTUwLAotICAgICAgNTM4LCAgNTQ1
LCAgNTQyLCAgNTUyLCAgNTM4LCAgNTQ0LCAgNTQ3LCAgNTQ4LCAgICAwLCAgMTg3LAotICAgICAg
NTQ3LCAgMjQxLCAgNTMzLCAgNTQ2LCAgNTM3LCAgNTM5LCAgNTI5LCAgNTQzLCAgNTQwLCAgNTQy
LAotICAgICAgNTI1LCAgNTMwLCAgNTI3LCAgNTE2LCAgMTkyLCAgNTMwLCAgNTI2LCAgNTI4LCAg
NTE3LCAgNTIwLAotICAgICAgMjc0LCAgNTI1LCAgNTE3LCAgNTI5LCAgMTE0LCAgNTIyLCAgNjI4
LCAgNjI4LCAgNjI4LCAgICAwLAotICAgICAgMzE2LCAgICAwLCAgMzIyLCAgMzM4LCAgMzQ0LCAg
MzUxLCAgICAwLCAgNjI4LCAgNjI4LCAgICAwLAotICAgICAgNTE0LCAgNTE4LCAgNTI3LCAgNTI0
LCAgNTA4LCAgNTA4LCAgMjA1LCAgNTIzLCAgNTIwLCAgNTIwLAotICAgICAgNTE4LCAgNTE1LCAg
NTA3LCAgNTEzLCAgNTAwLCAgNTExLCAgNTE0LCAgICAwLCAgNTExLCAgNDk5LAotICAgICAgNTA2
LCAgNTAzLCAgNTA3LCAgNTAwLCAgNDg5LCAgNDg4LCAgNTAxLCAgNTA0LCAgNTAxLCAgNDk2LAot
ICAgICAgNDg3LCAgMjQ3LCAgNDkyLCAgNDk1LCAgNDg2LCAgNDgzLCAgNDg3LCAgNDkzLCAgNDg0
LCAgNDc1LAotCi0gICAgICA0NzgsICA0NzYsICA0ODYsICA0NzIsICA0NzAsICA0NzAsICA0NzIs
ICA0NjksICA0ODAsICA0NzksCi0gICAgICAzMjgsICA0NzQsICA0NjksICA0NTgsICAyNjAsICA0
NzYsICA0NzgsICA0NjcsICAzNTgsICAzNjYsCi0gICAgICAzNzIsICAzNzgsICA0NjgsICAgIDAs
ICA0NjYsICAyNzYsICAgIDAsICA0NTgsICA0NTYsICA0NjQsCi0gICAgICA0NTMsICA0NzAsICA0
NTksICAyOTEsICAgIDAsICAgIDAsICA0NTMsICA0NjMsICA0NjMsICA0NDgsCi0gICAgICAzMDUs
ICAgIDAsICAgIDAsICA0NTAsICAzMjcsICA0NTEsICA0NDUsICA0NDQsICA0NDUsICA0NDQsCi0g
ICAgICAzODIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NDAsICA0NDEsICA0NDYs
ICA0MzcsCi0gICAgICA0NTAsICA0NDUsICA0NDQsICA0MzYsICA0NDAsICA0MzIsICA0MzUsICA0
MzksICA0NDQsICA0NDMsCi0gICAgICA0MzQsICAgIDAsICAgIDAsICA0NDAsICA0MjksICA0Mjks
ICA0MzQsICA0MzMsICA0MzAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICA0MjAsICA0
MzIsICA0MzQsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICA0MjIs
ICA0MjMsICA0MTcsICA0MjcsICAgIDAsICAgIDAsICAgIDAsICA0MTgsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAg
ICAgIDQyNSwgICAgMCwgICAgMCwgIDQyMywgIDQxOSwgICAgMCwgICAgMCwgICAgMCwgIDQxNSwg
IDQxMSwKLSAgICAgIDQxNiwgIDQwNiwgIDQxOSwgIDQwNSwgIDQxOCwgIDQwNywgIDQxNCwgICAg
MCwgIDQxMiwgIDQxNCwKLSAgICAgIDM5OCwgIDQwNywgIDQxMywgIDQwOCwgIDM5NiwgICAgMCwg
IDM5OCwgICAgMCwgIDM5NywgIDQwMCwKLSAgICAgICAgMCwgIDM4OSwgIDM4OCwgIDM4OCwgIDQw
MSwgICAgMCwgIDQwMywgICAgMCwgIDQwMiwgIDQwMSwKLSAgICAgIDM4NiwgIDM5OSwgIDM4Niwg
ICAgMCwgICAgMCwgIDM4OSwgICAgMCwgICAgMCwgIDM4MSwgICAgMCwKLSAgICAgICAgMCwgICAg
MCwgICAgMCwgIDM3OCwgIDM4OSwgIDM4MiwgIDM4OCwgIDM4NSwgIDM4MCwgIDM3MiwKLSAgICAg
IDM4MiwgICAgMCwgICAgMCwgIDM2NSwgIDM3MSwgIDM2MCwgICAgMCwgIDM2OSwgIDM2NiwgIDM1
NiwKLSAgICAgIDM4NSwgIDM2NCwgICAgMCwgICAgMCwgIDM2NCwgICAgMCwgIDM2MiwgIDM2MSwg
ICAgMCwgICAgMCwKLSAgICAgIDM2MCwgIDMyMywgIDMwOCwgICAgMCwgIDI5OCwgIDMxOCwgIDI3
MCwgIDI2NSwgICAgMCwgICAgMCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMjc5LCAgMjcxLCAgMjQwLCAgMjQwLAotICAgICAgMjM4LCAgMjM3LCAgMjI2LCAg
ICAwLCAgMjA4LCAgMTg4LCAgMTkwLCAgICAwLCAgMTg2LCAgMTczLAotICAgICAgMTg3LCAgMTY0
LCAgMTU4LCAgICAwLCAgNjI4LCAgNDE1LCAgNDE3LCAgNDE5LCAgNDIzLCAgMTg2CisgICAgICAg
IDAsICAgIDAsICAgNjUsICAgNjYsICAgNzUsICAgIDAsICA2ODAsICA2ODEsICA2ODEsICA2ODEs
CisgICAgICA2NTQsICAgNDUsICAxMzcsICA2ODEsICA2ODEsICA2NTMsICAxMzQsICA2ODEsICAx
MzMsICAxMzEsCisgICAgICAxNDYsICAxNTksICAxNjgsICA2NTEsICA2ODEsICAxODYsICA2NTEs
ICAgNDcsICA2ODEsICAgIDAsCisgICAgICA2ODEsICA2ODEsICAxMjgsICAxMDAsICAxMTAsICAx
NTIsICAxNTYsICAxNDYsICAxNjYsICA2MjIsCisgICAgICAxNzMsICAxMDksICA2MjEsICAxMjYs
ICAxNzcsICA2MTUsICAxNzgsICA2MjgsICAxODcsICAxODQsCisgICAgICAxNDEsICAxOTcsICA2
MjQsICA2ODEsICAxNTcsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2NTYsCisgICAgICA2ODEs
ICA2ODEsICAgIDAsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsCisg
ICAgICA2ODEsICA2ODEsICA2ODEsICAyMzYsICA2ODEsICAgIDAsICA2ODEsICAyNDMsICAyNzMs
ICAyODIsCisgICAgICAzMDQsICAgIDAsICAzMTQsICA2ODEsICA2ODEsICA2ODEsICA2NDQsICA2
ODEsICA2ODEsICA2ODEsCisgICAgICA2NDMsICAgIDAsICA2ODEsICA2ODEsICA2MTYsICA2MDks
ICA2MTIsICA2MjAsICA2MTksICA2MDYsCisKKyAgICAgIDYyMSwgIDYwOCwgIDYxNCwgIDYwMiwg
IDU5OSwgIDYxMiwgIDU5OSwgIDU5NiwgIDU5NiwgIDYwMiwKKyAgICAgIDU5MCwgIDE4OSwgIDU5
NSwgIDYwNSwgIDU5MSwgIDU5NywgIDYwMCwgIDYwMSwgICAgMCwgIDIxNiwKKyAgICAgIDYwMCwg
IDE4OCwgIDU4NiwgIDU5OSwgIDU5MCwgIDU5MiwgIDU4MiwgIDU5NiwgIDU5MywgIDU5NSwKKyAg
ICAgIDU3OCwgIDU4MywgIDU4MCwgIDU2OSwgIDE4MywgIDU3NywgIDU4MiwgIDU3OCwgIDU4MCwg
IDU2OSwKKyAgICAgIDU3MiwgIDIyMCwgIDU3NywgIDU2OSwgIDU4MSwgIDE3NiwgIDU3NCwgIDY4
MSwgIDY4MSwgIDY4MSwKKyAgICAgICAgMCwgIDMzMSwgICAgMCwgIDM0NCwgIDM2MSwgIDI5MCwg
IDM3NCwgICAgMCwgIDY4MSwgIDY4MSwKKyAgICAgICAgMCwgIDU2NiwgIDU3MCwgIDU3OSwgIDU3
NiwgIDU2MCwgIDU2MCwgIDIxNSwgIDU3NSwgIDU3MiwKKyAgICAgIDU3MiwgIDU3MCwgIDU2Nywg
IDU1OSwgIDU2NSwgIDU1MiwgIDU2MywgIDU0OSwgIDU2NSwgICAgMCwKKyAgICAgIDU2MiwgIDU1
MCwgIDU1NywgIDU1NCwgIDU1OCwgIDU1MSwgIDU0MCwgIDUzOSwgIDU1MiwgIDU1NSwKKyAgICAg
IDU1MiwgIDU0NywgIDUzOCwgIDI2MCwgIDU0MywgIDU0NiwgIDUzNywgIDUzNCwgIDUzOCwgIDU0
NCwKKworICAgICAgNTM1LCAgNTI2LCAgNTI5LCAgNTI3LCAgNTM3LCAgNTIzLCAgNTIxLCAgNTM0
LCAgNTIwLCAgNTIyLAorICAgICAgNTE5LCAgNTMwLCAgNTI5LCAgMjgzLCAgNTI0LCAgNTE5LCAg
NTA4LCAgMjY0LCAgNTI2LCAgNTI4LAorICAgICAgNTE3LCAgMzgxLCAgMzg4LCAgMzk1LCAgNDAy
LCAgNTE4LCAgICAwLCAgNTE2LCAgMzIwLCAgICAwLAorICAgICAgNTA4LCAgNTA2LCAgNTE0LCAg
NTAzLCAgNTIwLCAgNTA5LCAgMzM2LCAgICAwLCAgICAwLCAgNTAzLAorICAgICAgNTEzLCAgNTEz
LCAgICAwLCAgNDk4LCAgMzQ5LCAgICAwLCAgICAwLCAgNTAwLCAgMzY2LCAgNTAxLAorICAgICAg
NDk1LCAgNDk0LCAgNDk1LCAgNDk0LCAgNDA3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgNDkwLCAgNDkxLCAgNDk2LCAgNDg3LCAgNTAwLCAgNDk1LCAgNDk0LCAgNDg2LCAg
NDkwLCAgNDgyLAorICAgICAgNDg1LCAgNDg5LCAgNDk0LCAgNDgwLCAgNDkyLCAgNDgzLCAgICAw
LCAgICAwLCAgNDg5LCAgNDc4LAorICAgICAgNDc4LCAgNDgzLCAgNDgyLCAgNDc5LCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgNDY5LCAgNDgxLAorICAgICAgNDgzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgNDcxLCAgNDcyLCAgNDY2LAorCisgICAgICA0NzYsICAgIDAs
ICAgIDAsICAgIDAsICA0NjcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NzQsICAgIDAsICAgIDAsICA0NzIsICA0Njgs
CisgICAgICAgIDAsICAgIDAsICAgIDAsICA0NjQsICA0NjAsICA0NjUsICA0NTUsICA0NjgsICA0
NTQsICA0NjcsCisgICAgICA0NTYsICA0NjMsICAgIDAsICA0NjEsICA0NjMsICA0NDcsICA0NDks
ICA0NTUsICA0NjEsICA0NTYsCisgICAgICA0NDQsICAgIDAsICA0NDYsICAgIDAsICA0NDUsICA0
NDgsICAgIDAsICA0MzcsICA0MzYsICA0MzYsCisgICAgICA0NDksICAgIDAsICA0NTEsICAgIDAs
ICA0NTAsICA0NDksICA0MzQsICA0NDcsICA0MzQsICAgIDAsCisgICAgICAgIDAsICA0MzcsICAg
IDAsICAgIDAsICA0MjksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0MjYs
ICA0MzcsICA0MzAsICA0MzYsICA0MzMsICA0MjgsICA0MjAsICA0MzIsICAgIDAsICAgIDAsCisg
ICAgICA0MjUsICA0MzIsICA0MjEsICAgIDAsICA0MzAsICA0MjcsICA0MTcsICA0MTEsICA0MjUs
ICAgIDAsCisgICAgICAgIDAsICA0MjUsICAgIDAsICA0MjMsICA0MjIsICAgIDAsICAgIDAsICA0
MjEsICA0MDcsICA0MTksCisKKyAgICAgICAgMCwgIDQxMCwgIDQzMSwgIDQzMCwgIDQyOSwgIDQw
MCwgIDM5NiwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgIDQyMSwgIDI1MCwgIDQyMSwgIDQxMSwgIDM4NCwKKyAgICAgIDM5MiwgIDM5NCwgIDM5
MCwgIDM5MiwgIDM5MSwgIDM5MCwgIDM5MywgIDM5MCwgIDM5MSwgIDM4OCwKKyAgICAgICAgMCwg
IDMzMiwgIDM0MywgIDMxNywgIDMyOSwgIDMxMywgIDMxNywgIDMwNCwgIDMyMSwgIDI5MSwKKyAg
ICAgICAgMCwgIDMwMiwgIDI4MCwgIDI3MSwgIDI1NSwgIDI2MiwgICAgMCwgIDI1NiwgICAgMCwg
IDIzMiwKKyAgICAgIDIwNiwgIDIxMiwgIDE0OCwgIDE1OSwgIDExMywgICAgMCwgICAgMCwgIDY4
MSwgIDQ0MiwgIDQ0NCwKKyAgICAgIDQ0NiwgIDQ1MCwgIDE2MQogICAgIH0gOwogCi1zdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2RlZls0NjRdID0KICAgICB7ICAgMCwKLSAgICAgIDQyNSwgICAgMSwgIDQyNiwg
IDQyNiwgIDQyNSwgICAgNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NywKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyOCwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNywgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI4LAot
ICAgICAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDMwLCAgNDI1LCAgNDI1
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgICAwLCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1CisgICAgICA0NTgsICAgIDEsICA0NTksICA0NTks
ICA0NTgsICAgIDUsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsCisg
ICAgICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NjEsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NjMsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NjAsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAg
IDQ2MSwgIDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1
OCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgICAgMCwgIDQ1OCwgIDQ1OCwKKyAgICAg
IDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfbnh0WzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs3NDldID0K
ICAgICB7ICAgMCwKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAx
NCwgICAxNSwgICAxNiwgICAxNywKICAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyNCwgICAyNSwgICAyNiwgICAy
NywgICAyOCwgICAyOSwgICAzMCwgICAzMCwgICAzMCwgICAzMCwKLSAgICAgICAzMCwgICAzMCwg
ICAzMCwgICAzMCwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKLSAgICAgICAz
NiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywgICA0NCwK
LSAgICAgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1
MywgICAzMCwKLSAgICAgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwg
ICA1OSwgICA2NSwgICA2NiwKLSAgICAgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2
MSwgICA2MiwgICAgOCwgICAgOCwgICAgOCwKKyAgICAgICAyMywgICAyNCwgICAyNSwgICAyNiwg
ICAyNywgICAyOCwgICAyOSwgICAzMCwgICAzMCwgICAzMCwKKyAgICAgICAzMCwgICAzMCwgICAz
MCwgICAzMCwgICAzMCwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwKKyAgICAgICAzNSwg
ICAzNiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywKKyAg
ICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1Miwg
ICA1MywKKyAgICAgICAzMCwgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1
OSwgICA1OSwgICA2NSwKKyAgICAgICA2NiwgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwg
ICA2MSwgICA2MiwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAg
OCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwg
ICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKIAotICAgICAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4LAogICAg
ICAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLAorICAgICAgIDYzLCAgICA4LCAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLCAgIDYzLAogICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLCAgICA4LCAgICA4LCAgICA4LCAgICA4LAotICAgICAgIDY3LCAgIDcwLCAgIDcyLCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDkzLAotICAgICAgMTE5LCAgIDc1
LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LCAgMTIwLCAgIDY4LCAgIDk3LAotICAgICAg
MjE2LCAgIDk4LCAgMjE3LCAgIDk0LCAgMTIxLCAgIDk5LCAgIDc3LCAgIDc4LCAgMTE2LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgMTE3LCAgIDgzLCAg
IDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgxLCAgMTAwLCAgMTIz
LCAgMTE4LCAgMTU3LCAgIDgyLAotICAgICAgMTI0LCAgNDI0LCAgIDgxLCAgNDIzLCAgMTI1LCAg
MTAxLCAgMTQ3LCAgIDgxLCAgMTAyLCAgIDg2LAotCi0gICAgICAxMDMsICAgODcsICAgODgsICAx
MTAsICAxMDQsICAgODEsICAxMDcsICAxMjYsICAxMDgsICAxMDUsCi0gICAgICAxMjgsICAxMTEs
ICAxMzIsICAxMTIsICAgODIsICAxMDYsICAxMTMsICAxMDksICA0MjIsICAxMzMsCi0gICAgICAx
MzQsICA0MjEsICAxMTQsICAxMzcsICA0MjAsICAxMjksICAxMzgsICAxNDEsICAxMzAsICAxMzUs
Ci0gICAgICAyMDQsICAxNDIsICAxMzYsICAxNDMsICAxMzksICAxODQsICAxNDgsICAxNDQsICAx
ODUsICAxODYsCi0gICAgICA0MTksICAxNDAsICAxODcsICA0MTgsICAxODgsICAyMDUsICAxNDUs
ICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsICAxNTMsICAxNTMsICAyMjksCi0gICAgICAyMzAsICA0MTcsICAxNTEsICAyNTQs
ICAyNTUsICAyNTYsICA0MTYsICAgNzgsICAxNTQsICAgNzksCi0gICAgICAgNzksICAgNzksICAg
NzksICAgNzksICAgODAsICAxNTEsICAyODAsICAyODEsICAyODIsICA0MTUsCi0gICAgICA0MTQs
ICAxNTQsICA0MTMsICAgNzgsICAgODEsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0g
ICAgICAgODAsICAxOTAsICAyODgsICAyODksICAyOTAsICA0MTIsICAxNTUsICAgODEsICAxNTUs
ICAxOTEsCi0KLSAgICAgICA4MSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1Niwg
IDI5NywgIDI5OCwgIDI5OSwKLSAgICAgIDQxMSwgIDQxMCwgICA3OCwgICA4MSwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgIDIxMSwgIDMwNCwgIDMwNSwgIDMwNiwg
IDQwOSwgIDIxOSwgIDQwOCwgIDIxOSwgIDIxMiwgICA4MSwKLSAgICAgIDIyMCwgIDIyMCwgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywKLSAgICAgIDE1Mywg
IDE1MywgICA4MSwgIDMwOCwgIDMwOSwgIDMxMCwgIDQwNywgIDIyMSwgIDQwNiwgIDIyMSwKLSAg
ICAgIDQwNSwgIDE1NCwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDE1Niwg
IDE1NiwKLSAgICAgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NCwgIDE1NiwgIDE1NiwgIDE1
NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDI3NSwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwg
IDIyMCwgIDIyMCwgIDQwNCwgIDI3NiwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIy
MCwgIDIyMCwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKLSAgICAgIDIyMiwgIDIyMiwgIDIyMiwg
IDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDMxNiwgIDMxNywKLQotICAgICAgMzE4LCAg
Mzk2LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk1LCAgMzk0LCAgMzkzLAotICAg
ICAgMzkyLCAgMzkxLCAgMzk3LCAgMzkwLCAgMzk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDkyLAotICAgICAgIDkyLCAgMTUwLCAgMTUwLCAgMTUyLCAgMzg5LCAgMTUyLCAgMTUyLCAgMzg4
LCAgMzg3LCAgMzg2LAotICAgICAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzgwLCAg
Mzc5LCAgMzc4LCAgMzc3LCAgMzc2LAotICAgICAgMzc1LCAgMzc0LCAgMzczLCAgMzcyLCAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LAotICAgICAgMzY1LCAgMzY0LCAgMzYzLCAg
MzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LAotICAgICAgMzU1LCAgMzU0
LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LAotICAgICAg
MzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LAotICAgICAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LAotICAgICAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5
LCAgMzE1LCAgMzE0LCAgMzEzLAotCi0gICAgICAzMTIsICAzMTEsICAzMDcsICAzMDMsICAzMDIs
ICAzMDEsICAzMDAsICAyOTYsICAyOTUsICAyOTQsCi0gICAgICAyOTMsICAyOTIsICAyOTEsICAy
ODcsICAyODYsICAyODUsICAyODQsICAyODMsICAyNzksICAyNzgsCi0gICAgICAyNzcsICAyNzQs
ICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsCi0gICAgICAy
NjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTMs
Ci0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsCi0gICAgICAyNDIsICAyNDEsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzMsCi0gICAgICAyMzIsICAyMzEsICAyMjgsICAyMjcsICAyMjYsICAy
MjUsICAyMjQsICAyMjMsICAyMTgsICAyMTUsCi0gICAgICAyMTQsICAyMTMsICAyMTAsICAyMDks
ICAyMDgsICAyMDcsICAyMDYsICAyMDMsICAyMDIsICAyMDEsCi0gICAgICAyMDAsICAxOTksICAx
OTgsICAxOTcsICAxOTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksCi0gICAgICAxODMs
ICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCi0K
LSAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwKLSAgICAgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE0OSwg
IDE0NiwgIDEzMSwgIDEyNywKLSAgICAgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2
NCwgIDQyNSwgICAgNywgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAg
ICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQotCisg
ICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgs
ICAgIDgsCisgICAgICAgIDgsICAgIDgsICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgOTMsICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsCisgICAgICAxMjAsICAgNjgsICAgOTcsICAxNTgsICAg
OTgsICAxMjMsICAgOTQsICAxMjEsICAgOTksICAxMjQsCisgICAgICAgNzcsICAgNzgsICA0NTcs
ICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsCisgICAgICAgNzgsICAx
NDgsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODEsCisgICAg
ICAgODUsICAxMDAsICAxNDIsICA0NTYsICAgODIsICAxMDcsICAxNDMsICAxMDgsICAgODEsICAx
MDMsCisKKyAgICAgIDQ1NSwgIDEwMSwgICA4MSwgIDEwNCwgIDEwMiwgIDExMCwgIDEwOSwgICA4
NiwgIDEwNSwgICA4NywKKyAgICAgICA4OCwgICA4MSwgIDExNiwgIDExMSwgIDEwNiwgIDExMiwg
IDEyNSwgIDEyOCwgIDExMywgICA4MiwKKyAgICAgIDExNywgIDE0OSwgIDIwNiwgIDIxOSwgIDEx
NCwgIDIyMCwgIDEzMiwgIDEzOCwgIDE3OCwgIDEyNiwKKyAgICAgIDEzOSwgIDExOCwgIDEyOSwg
IDEzMywgIDEzNCwgIDEzMCwgIDE0NCwgIDIwNywgIDE0MCwgIDE5MiwKKyAgICAgIDE0NSwgIDE3
OSwgIDQ1NCwgIDEzNSwgIDEzNiwgIDE0MSwgIDEzNywgIDE5MywgIDQ1MywgIDE0NiwKKyAgICAg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgIDE1NCwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDQ1MiwgIDE4NiwgIDE1MiwgIDIxNCwg
IDE4NywgIDE4OCwKKyAgICAgIDIzMiwgIDIzMywgIDE4OSwgIDE1NSwgIDE5MCwgIDIxNSwgIDI1
OCwgIDI1OSwgIDI2MCwgIDE1MiwKKyAgICAgIDI4NSwgIDI4NiwgIDI4NywgIDQyMiwgIDQyMywg
ICA3OCwgIDE1NSwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDQ1MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKworICAgICAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgxLCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAorICAgICAg
MTU3LCAgNDUwLCAgIDgxLCAgMTU2LCAgNDQ5LCAgMTU2LCAgIDgxLCAgNDQ4LCAgMTU3LCAgMTU3
LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgIDgxLCAgIDc4LCAgMjgwLCAg
IDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgMjgxLCAgMjkz
LCAgMjk0LCAgMjk1LCAgNDQ3LAorICAgICAgMjIyLCAgNDQ2LCAgMjIyLCAgNDQ1LCAgIDgxLCAg
MjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLAorICAgICAgMjIzLCAgMjIzLCAgMzAyLCAgMzAz
LCAgMzA0LCAgNDQ0LCAgNDQzLCAgIDgxLCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgMzA5LCAgMzEwLCAgMzExLCAgNDQyLCAgNDQxLAorICAgICAgMjI0
LCAgNDQwLCAgMjI0LCAgNDM5LCAgMTU1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAor
ICAgICAgMjI1LCAgMjI1LCAgMzEzLCAgMzE0LCAgMzE1LCAgNDM4LCAgNDM3LCAgMTU1LCAgMTU3
LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjIzLCAgMjIzLAorCisgICAgICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAyMjUs
ICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAy
MjUsICAzMjEsICAzMjIsICAzMjMsICA0MDMsICA0MDQsICA0MDUsICA0MzYsCisgICAgICA0MzUs
ICA0MzQsICA0MzMsICA0MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MDYsCisg
ICAgICA0MjYsICA0MDcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsICAgOTIsICAxNTEs
ICAxNTEsCisgICAgICAxNTMsICA0MjUsICAxNTMsICAxNTMsICA0MjQsICA0MjEsICA0MjAsICA0
MTksICA0MTgsICA0MTcsCisgICAgICA0MTYsICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEs
ICA0MTAsICA0MDksICA0MDgsICA0MDIsCisgICAgICA0MDEsICA0MDAsICAzOTksICAzOTgsICAz
OTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIsCisgICAgICAzOTEsICAzOTAsICAzODks
ICAzODgsICAzODcsICAzODYsICAzODUsICAzODQsICAzODMsICAzODIsCisgICAgICAzODEsICAz
ODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsICAzNzIsCisKKyAg
ICAgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2Mywg
IDM2MiwKKyAgICAgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1
NCwgIDM1MywgIDM1MiwKKyAgICAgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0Niwg
IDM0NSwgIDM0NCwgIDM0MywgIDM0MiwKKyAgICAgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMz
NywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwg
IDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMCwgIDMxOSwKKyAgICAgIDMxOCwgIDMx
NywgIDMxNiwgIDMxMiwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwgIDMwMSwgIDMwMCwKKyAgICAg
IDI5OSwgIDI5OCwgIDI5NywgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4
NCwKKyAgICAgIDI4MywgIDI4MiwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwgIDI3NCwg
IDI3MywgIDI3MiwKKyAgICAgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2
NSwgIDI2NCwgIDI2MywgIDI2MiwKKyAgICAgIDI2MSwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwg
IDI1MywgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwKKworICAgICAgMjQ4LCAgMjQ3LCAgMjQ2LCAg
MjQ1LCAgMjQ0LCAgMjQzLCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LAorICAgICAgMjM4LCAgMjM3
LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LAorICAgICAg
MjI2LCAgMjIxLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5
LAorICAgICAgMjA4LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAg
MTk4LCAgMTk3LAorICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkxLCAgMTg1LCAgMTg0LCAgMTgz
LCAgMTgyLCAgMTgxLCAgMTgwLAorICAgICAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAg
MTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LAorICAgICAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTUwLAorICAgICAgMTQ3LCAgMTMxLCAg
MTI3LCAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDU4LAorICAgICAgICA3
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBA
IC02NzcsOCArNjkzLDggQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVd
ID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwgICAxMiwKLSAgICAgICAyOCwgICAyOCwg
ICAgMywgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwK
KyAgICAgICAxMiwgICAyOCwgICAyOCwgICAgMywgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKIApAQCAtNjg2LDcyICs3MDIsNzcgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KICAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKLSAgICAgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAzMywKLSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwgICA0MiwgICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0
MiwgICAzNSwgICAyMSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAy
MywgICAyMywgICAyNiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAg
ICA0NCwgIDQyMywgICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAy
NiwKLQotICAgICAgIDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1
LCAgIDM4LCAgIDM3LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAg
IDM5LCAgIDM4LCAgNDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5
LCAgIDQ3LCAgIDUwLCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAg
IDUyLCAgIDUwLCAgMTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUw
LCAgMTIwLCAgNDE2LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3
LAotICAgICAgMTY3LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAg
IDc4LCAgIDc5LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1
LCAgMjE1LCAgMjE1LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAg
IDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2
LCAgMjI2LCAgNDA5LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0
MDgsICA0MDcsICAgODMsICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
Ci0gICAgICAxNDEsICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAx
NDEsICAgODMsCi0gICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMs
ICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAy
NDUsICAzOTYsICAxNTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYs
ICAyMTEsICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0g
ICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEs
ICAyMjEsCi0gICAgICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyNTEsICAyNTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4
NSwgIDM4MiwgIDM4MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwg
IDM4MSwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQy
OCwgIDQyOSwgIDM3MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2Nywg
IDM2NiwgIDM2NSwgIDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAg
ICAgIDM0OSwgIDM0NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywg
IDMzNSwKLSAgICAgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMy
NiwgIDMyNSwgIDMyNCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwg
IDMxNCwgIDMxMSwgIDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4
NSwgIDI4NCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwg
IDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2
MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAg
ICAgMjQ3LCAgMjQ2LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAg
MjMxLAotICAgICAgMjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2
LCAgMjE0LCAgMjEzLAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5
LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAg
MTY5LCAgMTY4LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0
LAotICAgICAgMTQzLCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAg
MTMzLCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1
LCAgMTI0LCAgMTIzLCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAg
MTEzLCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAx
MDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcs
ICAgOTYsICAgOTUsICAgOTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAg
NDMsICAgNDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3
LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAg
IDMzLCAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQy
LCAgIDEzLCAgIDM1LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAor
ICAgICAgIDIxLCAgIDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIy
LCAgIDIyLAorICAgICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4
LCAgIDUxLCAgIDM4LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcs
ICAgMzYsICAgMzksICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAg
NDEsICAgMzksICAgMzcsICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEs
ICAgNTUsICAxMzUsICAxNDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisg
ICAgICAgNTAsICAgNDEsICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAs
ICAxMjIsCisgICAgICAgNTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAx
MjIsICA0NTEsICAgNTIsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzgsICAgNzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0
NTAsICAxMjAsICAgNzQsICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAs
ICAgNzgsICAxMjAsICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAy
MTgsICAyMTgsICA0MTcsICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwg
ICA3OSwgIDQ0NCwgICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4
MSwgICA4MCwgICA4MywgIDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0
MiwgIDE1MiwgIDQ0MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAg
IDE1MiwgIDE1MiwgIDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwg
IDQzNywgIDQzNiwKKyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwg
IDQzMywgIDQzMiwgIDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIy
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAg
MjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAg
Mzg4LCAgNDMwLAorICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIz
LCAgNDIyLCAgNDIxLCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAg
NDU5LCAgNDYwLCAgNDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYy
LCAgNDE4LCAgNDE2LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAg
NDAwLCAgMzk5LCAgMzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2
LCAgMzg1LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAor
ICAgICAgMzczLCAgMzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2
LCAgMzU1LAorICAgICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAg
MzQzLCAgMzQxLCAgMzQwLAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAz
MzQsICAzMzIsICAzMzEsICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUs
ICAzMjQsICAzMjAsICAzMTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAy
OTgsICAyOTEsICAyOTAsICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAs
ICAyNzksICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisg
ICAgICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQs
ICAyNTMsCisgICAgICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAy
NDAsICAyMzYsICAyMzUsCisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYs
ICAyMjEsICAyMjAsICAyMTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAy
MTEsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMs
ICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAx
OTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAg
ICAgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwg
IDE3NCwKKyAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwgIDE2MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwg
IDE0MCwgIDEzOSwgIDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEz
MSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywg
IDEyMSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDEx
MCwgIDEwOSwgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAg
IDEwMSwgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2
MCwKKyAgICAgICA1MywgICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwg
ICAxMSwgICAgNywKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291
bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFsxNDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbMTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEs
NyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0
OF0gPQogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAs
IDAsICAgICB9OworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEs
IDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMg
dGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2Vk
LgpAQCAtNzcxLDcgKzc5Miw3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxl
X2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQK
IC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTk0NCw3ICs5NjUs
NyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQg
YyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlpbnQgbjsgXAogCQlmb3IgKCBuID0gMDsg
biA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBj
ICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC0xMDg2LDEzICsx
MTA3LDEzIEBAIHl5X21hdGNoOgogCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJCXsKIAkJCQl5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkg
KQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCQl9CiAJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9Ci0JCXdoaWxlICggeXlfY3VycmVu
dF9zdGF0ZSAhPSA0MjUgKTsKKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQ1OCApOwog
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTExMDMsNyArMTEyNCw3IEBA
IHl5X2ZpbmRfYWN0aW9uOgogCiAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYg
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQogCQkJewotCQkJeXlfc2l6ZV90IHl5bDsK
KwkJCWludCB5eWw7CiAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKIAkJ
CQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQogCQkJCQkgICAKQEAgLTE0ODEsMjIwICsxNTAy
LDI1MiBAQCBZWV9SVUxFX1NFVFVQCiAJWVlfQlJFQUsKIGNhc2UgOTA6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5
MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDkyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTM6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NDoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDk1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDk4OgorWVlfUlVMRV9TRVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9v
bFRTdHJpbmcoeXl0ZXh0KTsgCiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQog
CVlZX0JSRUFLCi1jYXNlIDkxOgorY2FzZSA5OToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTI6CitjYXNlIDEwMDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
aSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgOTM6CitjYXNlIDEwMToKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRl
eHQtPnJlY292ZXIoKTsgcmV0dXJuIDA7fQogCVlZX0JSRUFLCi1jYXNlIDk0OgorY2FzZSAxMDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsg
cmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk1OgorY2FzZSAxMDM6CiBZ
WV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9k
b3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk2
OgorY2FzZSAxMDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDk3OgorY2FzZSAxMDU6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4
LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENP
TlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk4OgorY2FzZSAxMDY6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oQUREX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSA5OToKK2Nhc2UgMTA3
OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFNVQl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTAwOgorY2FzZSAxMDg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTVVMX0FTU0lHTik7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMDE6CitjYXNlIDEwOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJl
dHVybihESVZfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMjoKK2Nhc2UgMTEwOgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKE1PRF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAz
OgorY2FzZSAxMTE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9BU1NJR04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTA0OgorY2FzZSAxMTI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
UklHSFRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNToKK2Nhc2UgMTEzOgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKEFORF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA2Ogor
Y2FzZSAxMTQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oWE9SX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDc6CitjYXNlIDExNToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9B
U1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA4OgorY2FzZSAxMTY6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oSU5DX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwOToKK2Nhc2UgMTE3Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERFQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTA6
CitjYXNlIDExODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBTkRfT1ApOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTExOgorY2FzZSAxMTk6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEyOgorY2FzZSAxMjA6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oWE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMzoKK2Nhc2UgMTIxOgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKExFX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExNDoKK2Nhc2Ug
MTIyOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEdFX09QKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDExNToKK2Nhc2UgMTIzOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEVRX09QKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDExNjoKK2Nhc2UgMTI0OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE5F
X09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExNzoKK2Nhc2UgMTI1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKExFRlRfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE4OgorY2FzZSAxMjY6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oUklHSFRfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE5
OgorY2FzZSAxMjc6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZh
bHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMDoKK2Nhc2UgMTI4
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJu
KExFRlRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIxOgorY2FzZSAxMjk6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihSSUdIVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjI6Citj
YXNlIDEzMDoKIFlZX1JVTEVfU0VUVVAKIHsgaWYgKGNvbnRleHQtPmluVHlwZVBhcmVuKSBjb250
ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKENPTU1BKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEyMzoKK2Nhc2UgMTMxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ09MT04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTI0OgorY2FzZSAxMzI6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQt
PmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oRVFVQUwpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTI1OgorY2FzZSAxMzM6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyBjb250ZXh0LT5pblR5cGVQYXJlbiA9IHRydWU7IHJldHVybihMRUZUX1BBUkVOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEyNjoKK2Nhc2UgMTM0OgogWVlfUlVMRV9TRVRVUAogeyBjb250
ZXh0LT5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4oUklHSFRfUEFSRU4pOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTI3OgorY2FzZSAxMzU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZUX0JS
QUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI4OgorY2FzZSAxMzY6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybihSSUdIVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyOToKK2Nhc2Ug
MTM3OgogWVlfUlVMRV9TRVRVUAogeyBCRUdJTihGSUVMRFMpOyAgcmV0dXJuKERPVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMzA6CitjYXNlIDEzODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKEJB
TkcpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMxOgorY2FzZSAxMzk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihEQVNIKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMjoKK2Nhc2UgMTQwOgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oVElMREUpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMzOgorY2FzZSAx
NDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQTFVTKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
NDoKK2Nhc2UgMTQyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU1RBUik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzU6CitjYXNlIDE0MzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNMQVNIKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNjoKK2Nhc2UgMTQ0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oUEVSQ0VOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzc6CitjYXNlIDE0NToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKExFRlRfQU5HTEUpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM4OgorY2Fz
ZSAxNDY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihSSUdIVF9BTkdMRSk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzk6CitjYXNlIDE0NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFZFUlRJQ0FM
X0JBUik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDA6CitjYXNlIDE0ODoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKENBUkVUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MToKK2Nhc2UgMTQ5OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4oQU1QRVJTQU5EKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MjoK
K2Nhc2UgMTUwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUVVFU1RJT04pOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQzOgorY2FzZSAxNTE6CiBZWV9SVUxFX1NFVFVQCiB7IAogICAgIEJFR0lOKElO
SVRJQUwpOwpAQCAtMTcwMiwxMiArMTc1NSwxMiBAQCBZWV9SVUxFX1NFVFVQCiAgICAgcmV0dXJu
IEZJRUxEX1NFTEVDVElPTjsKIH0KIAlZWV9CUkVBSwotY2FzZSAxNDQ6CitjYXNlIDE1MjoKIFlZ
X1JVTEVfU0VUVVAKIHt9CiAJWVlfQlJFQUsKLWNhc2UgMTQ1OgotLyogcnVsZSAxNDUgY2FuIG1h
dGNoIGVvbCAqLworY2FzZSAxNTM6CisvKiBydWxlIDE1MyBjYW4gbWF0Y2ggZW9sICovCiBZWV9S
VUxFX1NFVFVQCiB7ICB9CiAJWVlfQlJFQUsKQEAgLTE3MTYsMTEgKzE3NjksMTEgQEAgY2FzZSBZ
WV9TVEFURV9FT0YoQ09NTUVOVCk6CiBjYXNlIFlZX1NUQVRFX0VPRihGSUVMRFMpOgogeyBjb250
ZXh0LT5BZnRlckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
NDY6CitjYXNlIDE1NDoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgIlVua25vd24gY2hhciIsIHl5dGV4dCwgIiIpOyByZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1j
YXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRVUAogRUNITzsKIAlZWV9CUkVBSwpAQCAt
MjAxNiw3ICsyMDY5LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA0MjYgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJeXlfYyA9
IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwpAQCAtMjA0NSwxMSArMjA5OCwxMSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAo
eXlzY2FuX3QgeXlzY2FubmVyKQogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gNDI2ICkKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQl5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJfQogCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQyNSk7CisJeXlfaXNfamFtID0g
KHl5X2N1cnJlbnRfc3RhdGUgPT0gNDU4KTsKIAogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf
Y3VycmVudF9zdGF0ZTsKIH0KQEAgLTI5MjIsNyArMjk3NSw3IEBAIHZvaWQgQ1BQU2hJbmZvTG9n
TXNnKGNvbnN0IGNoYXIgKm1zZykKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CkBAIC0zMDYxLDcgKzMxMTQsNyBAQCB2b2lkIEhh
bmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQogICAgIH0KIH0K
IAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIg
KnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7
CkBAIC0zMjAyLDE5ICszMjU1LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsKIH0KIAot
dm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVyKTsKICAg
ICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRleHQtPnNjYW5uZXIpOwog
ICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSW5pdCBwcmVwcm9j
ZXNzb3IuCiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsK
LSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291
bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFzdEZpcnN0U3Rh
dGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiBJ
bml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAK
aW5kZXggMzdhMGYwNS4uYjdjZTk0NSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFy
c2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMi4gICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVu
dGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0
IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwg
MjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g
MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwog
CiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3Jr
IHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0
b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSw3ICsyNyw3IEBACiAgICBzcGVjaWFs
IGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRp
bmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4K
LQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAg
LTQ3LDcgKzQ1LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAq
LwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9O
ICIyLjQuMiIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFN
RSAieWFjYy5jIgpAQCAtNTUsMTEgKzUzLDY3IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2Rl
ZmluZSBZWVBVUkUgMQogCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAor
CisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2Nh
dGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVERUQgMAogCiAKIAorLyogQ29weSB0aGUgZmly
c3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4g
RE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4K
KyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVz
ZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVu
dW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQw
NjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxF
WF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLwor
I2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGlu
ZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMg
dW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UK
KyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRv
a2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9U
QUJMRSAwCisjZW5kaWYKKworCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQog
IyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAgLTE2MSwxNTYgKzIxNSwxNCBAQAogICAgICBRVUVTVElP
TiA9IDM1MAogICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5U
IDI1OAotI2RlZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lP
TiAyNjAKLSNkZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2Mgot
I2RlZmluZSBBVFRSSUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJP
T0xfVFlQRSAyNjUKLSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3
Ci0jZGVmaW5lIEJSRUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcw
Ci0jZGVmaW5lIEVMU0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVm
aW5lIERJU0NBUkQgMjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0j
ZGVmaW5lIEJWRUMzIDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0j
ZGVmaW5lIElWRUMzIDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNk
ZWZpbmUgVkVDMyAyODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNk
ZWZpbmUgTUFUUklYMyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAy
ODgKLSNkZWZpbmUgT1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5l
IFVOSUZPUk0gMjkxCi0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNk
ZWZpbmUgVk9JRF9UWVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJE
IDI5NgotI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9P
RVMgMjk4Ci0jZGVmaW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAw
Ci0jZGVmaW5lIFRZUEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZp
bmUgSU5UQ09OU1RBTlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklF
TERfU0VMRUNUSU9OIDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAz
MDcKLSNkZWZpbmUgSU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09Q
IDMxMAotI2RlZmluZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09Q
IDMxMwotI2RlZmluZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1Jf
T1AgMzE2Ci0jZGVmaW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0j
ZGVmaW5lIEFERF9BU1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExF
RlRfQVNTSUdOIDMyMQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJ
R04gMzIzCi0jZGVmaW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNk
ZWZpbmUgU1VCX0FTU0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklH
SFRfUEFSRU4gMzI4Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJB
Q0tFVCAzMzAKLSNkZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMy
Ci0jZGVmaW5lIERPVCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQot
I2RlZmluZSBFUVVBTCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMz
OAotI2RlZmluZSBEQVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEK
LSNkZWZpbmUgU1RBUiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0
Ci0jZGVmaW5lIExFRlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmlu
ZSBWRVJUSUNBTF9CQVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQg
MzQ5Ci0jZGVmaW5lIFFVRVNUSU9OIDM1MAotCiAKIAogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0
IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBU
aGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1Qg
RURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRl
ZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2Vk
LWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJp
YWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNl
bGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1
MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFN
IGNvbnRleHQtPnNjYW5uZXIKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZ
WURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3Nl
IGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlF
UlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5l
IFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxl
LiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0j
ZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RF
Q0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQogeworCisKICAgICBzdHJ1Y3QgewogICAg
ICAgICBUU291cmNlTG9jIGxpbmU7CiAgICAgICAgIHVuaW9uIHsKQEAgLTM0MCwxNyArMjUyLDE2
IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQRQogICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlz
dDsKICAgICAgICAgfTsKICAgICB9IGludGVybTsKLX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4g
ICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJ
VklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCi0KIC8qIENvcHkgdGhlIHNlY29uZCBwYXJ0
IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAogCkBAIC0zODAsOCArMjkxLDYgQEAgZXh0ZXJu
IHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24p
OwogfQogCiAKLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCi0KIAogI2lmZGVmIHNob3J0CiAj
IHVuZGVmIHNob3J0CkBAIC00NTYsMTQgKzM2NSwxNCBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7CiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3Rh
dGljIGludAotWVlJRCAoaW50IGkpCitZWUlEIChpbnQgeXlpKQogI2Vsc2UKIHN0YXRpYyBpbnQK
LVlZSUQgKGkpCi0gICAgaW50IGk7CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKICNlbmRpZgog
ewotICByZXR1cm4gaTsKKyAgcmV0dXJuIHl5aTsKIH0KICNlbmRpZgogCkBAIC01NDQsOSArNDUz
LDkgQEAgdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVt
YmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKIHsKLSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZ
UEUgeXl2czsKLSAgfTsKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2
c19hbGxvYzsKK307CiAKIC8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9u
ZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCiAjIGRlZmluZSBZWVNUQUNLX0dBUF9N
QVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKQEAgLTU4MCwxMiArNDg5LDEyIEBA
IHVuaW9uIHl5YWxsb2MKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyMgZGVmaW5lIFlZU1RBQ0tfUkVM
T0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCiAgICAgZG8JCQkJCQkJCQlcCiAgICAgICB7
CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRy
LT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJ
CQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAor
CVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKIAl5eW5ld2J5dGVzID0geXlzdGFj
a3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCiAJeXlwdHIg
Kz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAogICAgICAgfQkJCQkJCQkJCVwK
QEAgLTgxMiwxNiArNzIxLDE2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10g
PQogICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5
X3NwZWNpZmllZF90eXBlIiwKICAgInR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwg
InByZWNpc2lvbl9xdWFsaWZpZXIiLAogICAidHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBl
X3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKLSAgIkAxIiwgIkAyIiwg
InN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCisgICIkQDEi
LCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIs
CiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRp
YWxpemVyIiwKICAgImRlY2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxl
X3N0YXRlbWVudCIsCi0gICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiQDMiLCAiQDQiLCAic3RhdGVt
ZW50X25vX25ld19zY29wZSIsCi0gICJzdGF0ZW1lbnRfd2l0aF9zY29wZSIsICJANSIsICJANiIs
ICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgImNvbXBvdW5kX3N0YXRlbWVu
dCIsICIkQDMiLCAiJEA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAic3RhdGVtZW50
X3dpdGhfc2NvcGUiLCAiJEA1IiwgIiRANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIiwKICAgInN0YXRlbWVudF9saXN0IiwgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVj
dGlvbl9zdGF0ZW1lbnQiLAotICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlv
biIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIkA3IiwKLSAgIkA4IiwgIkA5IiwgImZvcl9pbml0
X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgInNl
bGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVu
dCIsICIkQDciLAorICAiJEA4IiwgIiRAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0
aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCiAgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFu
c2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKLSAgImZ1bmN0aW9uX2RlZmlu
aXRpb24iLCAiQDEwIiwgMAorICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIsICIkQDEwIiwgMAogfTsK
ICNlbmRpZgogCkBAIC0xMzQ1LDkgKzEyNTQsMTggQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXN0b3NbXSA9CiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAg
VGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKICAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24g
dG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJz
aW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisgICBPbmNl
IEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhv
d2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0
IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwg
d2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vzc2VkLiAgKi8KIAogI2Rl
ZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlz
IGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1X
dW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2Fybmlu
ZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBm
b3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ug
d2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2VuZGlmCiAKICNkZWZpbmUgWVlSRUNPVkVS
SU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC0xNTE4LDE3ICsxNDM2LDIwIEBAIHl5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCiAjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3By
aW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCit5eV9zdGFja19w
cmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKICNlbHNl
CiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9p
bnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlfc3RhY2tfcHJpbnQgKHl5
Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9p
bnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ci
KTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0
b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKIH0KIApAQCAtMTU2MywxMSArMTQ4NCwxMSBAQCB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNw
LCB5eXJ1bGUsIGNvbnRleHQpCiAgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwog
ICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAgewotICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIs
IHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKIAkJICAgICAgICYoeXl2c3BbKHl5aSArIDEp
IC0gKHl5bnJocyldKQogCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIGZwcmlu
dGYgKHN0ZGVyciwgIlxuIik7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiAgICAg
fQogfQogCkBAIC0xODQ5LDEwICsxNzcwLDggQEAgeXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwg
eXl2YWx1ZXAsIGNvbnRleHQpCiAJYnJlYWs7CiAgICAgfQogfQotDAogCiAvKiBQcmV2ZW50IHdh
cm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAjaWZkZWYgWVlQQVJTRV9Q
QVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHl5
cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTg3MSwxMCArMTc5MCw5IEBAIGludCB5
eXBhcnNlICgpOwogCiAKIAotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0t
LS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNo
X3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJT
RV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CkBAIC0xODk4LDc0ICsxODE2LDc1IEBAIHl5cGFyc2UgKGNvbnRleHQpCiAjZW5kaWYKICNlbmRp
ZgogewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIGxvb2thaGVhZCBz
eW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2th
aGVhZCBzeW1ib2wuICAqLwogWVlTVFlQRSB5eWx2YWw7CiAKLS8qIE51bWJlciBvZiBzeW50YXgg
ZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLQotICBpbnQgeXlzdGF0ZTsKLSAgaW50
IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJl
Zm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAv
KiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1i
ZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1
ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLwotICBj
aGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9U
IHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSAgLyogVGhyZWUgc3Rh
Y2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKLSAg
ICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAgICAgYHl5bHMnOiByZWxh
dGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJh
dGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8gcmVhbGxvY2F0ZSB0aGVt
IGVsc2V3aGVyZS4gICovCisgICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAg
Ki8KKyAgICBpbnQgeXluZXJyczsKIAotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5
cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNz
YTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1i
ZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8K
KyAgICBpbnQgeXllcnJzdGF0dXM7CiAKLSAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAg
Ki8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZUEUgKnl5dnMgPSB5eXZz
YTsKLSAgWVlTVFlQRSAqeXl2c3A7CisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6
CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0
ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgogCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1
IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxv
Y2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCiAKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwor
ICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5
eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CiAKLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAg
ICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUg
c3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUg
Knl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CiAKLSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZ
WUlOSVRERVBUSDsKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKIAorICBpbnQgeXluOworICBp
bnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNs
YXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CiAgIC8qIFRoZSB2YXJpYWJs
ZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCiAg
ICAgIGFjdGlvbiByb3V0aW5lcy4gICovCiAgIFlZU1RZUEUgeXl2YWw7CiAKKyNpZiBZWUVSUk9S
X1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0
ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1z
Z2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYK
KworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQog
CiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1
bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAg
Ki8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOwor
ICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5eXN0YXRlID0gMDsKICAg
eXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8q
IENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENh
dXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2lu
dGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNr
CiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBz
dGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAq
LwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBAIC0xOTk1LDcgKzE5MTQs
NiBAQCBpbnQgeXluZXJyczsKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2
ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZv
bGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ss
IGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRpb25hbCBhcm91bmQganVz
dCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0yMDAzLDcgKzE5MjEsNiBA
QCBpbnQgeXluZXJyczsKIAl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKIAkJ
ICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAogCQkgICAgJnl5dnMxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXZzcCksCi0KIAkJICAgICZ5eXN0YWNrc2l6ZSk7CiAKIAl5eXNzID0g
eXlzczE7CkBAIC0yMDI2LDkgKzE5NDMsOCBAQCBpbnQgeXluZXJyczsKIAkgICh1bmlvbiB5eWFs
bG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYg
KCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5
c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlz
c19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAj
ICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFD
S19GUkVFICh5eXNzMSk7CkBAIC0yMDM5LDcgKzE5NTUsNiBAQCBpbnQgeXluZXJyczsKICAgICAg
IHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUg
LSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2Vk
IHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAg
LTIwNDksNiArMTk2NCw5IEBAIGludCB5eW5lcnJzOwogCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwg
IkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CiAKKyAgaWYgKHl5c3RhdGUgPT0gWVlG
SU5BTCkKKyAgICBZWUFDQ0VQVDsKKwogICBnb3RvIHl5YmFja3VwOwogCiAvKi0tLS0tLS0tLS0t
LgpAQCAtMjA1NywxNiArMTk3NSwxNiBAQCBpbnQgeXluZXJyczsKIHl5YmFja3VwOgogCiAgIC8q
IERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFk
IGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFk
eSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQg
ZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3
aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAv
KiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9v
a2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09
IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBn
ZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAv
KiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBh
IHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVN
UFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNo
YXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5n
IGEgdG9rZW46ICIpKTsKQEAgLTIwOTgsMjAgKzIwMTYsMTYgQEAgeXliYWNrdXA6CiAgICAgICBn
b3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NF
UFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVl
LCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAg
ICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICov
CisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQg
KCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQg
dGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0g
WVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0
b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisr
eXl2c3AgPSB5eWx2YWw7CkBAIC0yMTgzLDE0ICsyMDk3LDE0IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPmdldFR5cGUoKSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDoKQEAgLTIy
MDcsNyArMjEyMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NToKQEAgLTIyMTYsNyArMjEzMCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA2OgpAQCAtMjIyNSwyMSArMjEzOSwyMSBAQCB5eXJlZHVjZToKICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgOToKQEAgLTIzMTYsMTQgKzIyMzAsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBv
cmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMToKQEAgLTI0MzYsNyArMjM1MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3Qg
ZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMjoKQEAgLTI0NTAsNyArMjM2NCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpA
QCAtMjQ2NCw3ICsyMzc4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzODcsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNToKQEAgLTI1NzMsMTQgKzI0ODcsMTQgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlIGZuQ2FsbDsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE2OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzoKQEAgLTI1ODksNyArMjUwMyw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxp
bmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1
OTcsNyArMjUxMSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTk6CkBAIC0yNjA1LDcgKzI1MTksNyBAQCB5eXJlZHVjZToKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAg
ICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTI3LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybU5vZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6
CkBAIC0yNjIxLDcgKzI1MzUsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU0NSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFy
YW0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU1NSwxNCBAQCB5eXJlZHVj
ZToKICAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1l
dGVyKHBhcmFtKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1O
b2RlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1
bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI3MDcsNyArMjYyMSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7
CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5n
LCB0eXBlLCBvcCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjoKQEAgLTI3MTgsNyArMjYz
Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFso
MSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5j
dGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI3
OgpAQCAtMjcyOSwxNCArMjY0MywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlwZShF
YnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3
IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyOToKQEAgLTI3NTAsNyArMjY2
NCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDMwOgpAQCAtMjc2NCw3ICsyNjc4LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzE6CkBA
IC0yNzg1LDI3ICsyNjk5LDI3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgO30K
KyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzM6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcE5lZ2F0aXZlOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDoKIAotICAgIHsgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyA7fQorICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dp
Y2FsTm90OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNToKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMzY6CkBAIC0yODE4LDcgKzI3MzIsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNzoKQEAgLTI4MzEsMTIgKzI3
NDUsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMzg6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDM5OgpAQCAtMjg0
OCw3ICsyNzYyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDA6CkBAIC0yODYwLDE3ICsyNzc0LDE3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDQxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MjoKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgNDM6CkBAIC0yODg0LDcgKzI3OTgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNDQ6CkBAIC0yODk4LDcgKzI4MTIsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNDU6CkBAIC0yOTEyLDcgKzI4MjYsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDY6CkBAIC0yOTI2LDEyICsyODQwLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NzoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNDg6CkBAIC0yOTQ1LDcgKzI4NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNDk6CkBAIC0yOTU5LDI3ICsyODczLDI3IEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MDoKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgNTE6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA1MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTQ6CkBAIC0yOTkzLDEyICsyOTA3LDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NToKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNTY6CkBAIC0zMDEyLDEyICsyOTI2LDEyIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9
CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTg6CkBA
IC0zMDMxLDEyICsyOTQ1LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA1OToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjA6CkBAIC0zMDU0LDEyICsyOTY4LDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg1KSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDYxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MjoKQEAgLTMwNzMsMzkg
KzI5ODcsMzkgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNjM6CiAKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IDt9CisgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA2NDoKIAotICAgIHsgRlJBR19WRVJUX09OTFkoIio9IiwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyA7
fQorICAgIHsgRlJBR19WRVJUX09OTFkoIio9IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA2NToKIAotICAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyA7fQorICAgIHsgRlJBR19W
RVJUX09OTFkoIi89IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5p
bnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0p
Lm9wID0gRU9wRGl2QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NjoKIAotICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BBZGRBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY3OgogCi0gICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3Vi
QXNzaWduOyA7fQorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjg6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNjk6CkBAIC0zMTE3LDcgKzMwMzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwog
ICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3MDoKQEAgLTMx
MjYsNyArMzA0MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJv
ckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3MToKQEAgLTMxNTcsNyArMzA3MSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90
eXBlOwogCiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzI6CkBAIC0zMTY2LDcgKzMwODAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRl
KQogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUt
PnNldE9wKEVPcERlY2xhcmF0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzM6CkBAIC0zMTc0LDcgKzMwODgsNyBAQCB5eXJl
ZHVjZToKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVj
aXNpb24oICh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlKS50eXBlLCAoeXl2c3BbKDIpIC0g
KDQpXS5pbnRlcm0ucHJlY2lzaW9uKSApOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc0OgpAQCAtMzIx
MywyMSArMzEyNywyMSBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gV2UncmUgYXQgdGhlIGlubmVy
IHNjb3BlIGxldmVsIG9mIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyBhbmQgYm9keSBzdGF0ZW1l
bnQuCiAgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHRvIHRoZSBzdXJyb3Vu
ZGluZyBzY29wZSBpbnN0ZWFkLgogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRPdXRl
ckxldmVsKCktPmluc2VydCgqKHl5dmFsLmludGVybSkuZnVuY3Rpb24pOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc2OgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NzoKQEAgLTMyMzksNyArMzE1
Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1
bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0pOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWxldGUgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
KS5wYXJhbS50eXBlOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzg6CkBA
IC0zMjYxLDcgKzMxNzUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
ZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAg
ICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNzk6CkBAIC0zMjgyLDcgKzMxOTYsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDgwOgpAQCAtMzI5Nyw3ICszMjExLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIG5l
dyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpfTsKICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKICAgICAgICAgKHl5
dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDgxOgpAQCAtMzMxOSw3ICszMjMzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW0gPSB7ICh5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0eXBlIH07CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmU7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA4MjoKQEAgLTMzMjgsNyArMzI0Miw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA4MzoKQEAgLTMzMzksNyArMzI1Myw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlw
ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA4NDoKQEAgLTMzNDgsNyArMzI2Miw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CiAgICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5s
aW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4NToKQEAgLTMzNTksMzUgKzMyNzMsMzUgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3JhcnksICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBl
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDg2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxp
ZmllcikgPSBFdnFJbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg4OgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxSW5PdXQ7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MDoKQEAg
LTMzOTUsMTQgKzMzMDksMTQgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUGFyYW1ldGVy
IHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9
OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDkyOgpAQCAtMzQyOCw3ICszMzQyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAg
ICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzY0LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZz
cFsoNCkgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDk0OgpAQCAtMzQ3OCw3ICszMzkyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5
eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZz
cFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxp
bmUpLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQxNiw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MjQsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6
CkBAIC0zNTMyLDcgKzM0NDYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKICAgICAgICAgICAgIHN5
bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgOTg6CkBAIC0zNTQ0LDcgKzM0NTgsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAg
ICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk5OgpAQCAtMzU4MCw3ICsz
NDk0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQog
ICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwog
ICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDA6CkBAIC0z
NjA0LDcgKzM1MTgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CiAgICAg
ICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMToKQEAgLTM2MjYs
NyArMzU0MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMDI6CkBAIC0zNjM5LDcgKzM1NTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEwMzoKQEAgLTM2NjMsMTQgKzM1NzcsMTQgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA1OgpAQCAt
MzY4MCw3ICszNTk0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxF
cnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxQXR0cmlidXRlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA2OgpAQCAtMzY5Miw3ICszNjA2LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cVZhcnlpbmdPdXQsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ0luLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTA3OgpAQCAtMzcwNCw3ICszNjE4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFy
aWFudFZhcnlpbmdPdXQsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
SW52YXJpYW50VmFyeWluZ0luLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA4OgpAQCAtMzcxMyw3ICszNjI3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
LCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDk6CkBAIC0zNzI3LDcgKzM2NDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDExMDoKQEAgLTM3MzUsMzUgKzM2NDksMzUgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lv
biA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5wcmVjaXNpb24pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTExOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnByZWNpc2lvbikgPSBFYnBIaWdoOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTEyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBN
ZWRpdW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTM6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDExNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDExNToKQEAgLTM3NzksNyArMzY5Myw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExNjoKQEAgLTM3ODcsNyArMzcwMSw3IEBA
IHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTc6CkBAIC0zNzk1LDcgKzM3MDksNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExODoKQEAgLTM4MDMsNyArMzcxNyw3IEBA
IHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDExOToKQEAgLTM4MTEsNyArMzcyNSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjA6CkBAIC0zODIwLDcgKzM3MzQsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMToKQEAgLTM4MjksNyAr
Mzc0Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIyOgpA
QCAtMzgzOCw3ICszNzUyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjM6CkBAIC0zODQ3LDcgKzM3NjEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTI0OgpAQCAtMzg1Niw3ICszNzcwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNToKQEAgLTM4NjUsNyArMzc3OSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjY6CkBAIC0zODc0LDcgKzM3ODgs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjc6CkBAIC0zODgz
LDcgKzM3OTcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjg6
CkBAIC0zODkyLDcgKzM4MDYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjk6CkBAIC0zOTAyLDcgKzM4MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDEzMDoKQEAgLTM5MTIsNyArMzgyNiw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMxOgpAQCAtMzkyMiw3ICsz
ODM2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoNCwgdHJ1ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MzI6CkBAIC0zOTMxLDcgKzM4NDUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09O
TFkoInNhbXBsZXIyRCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzM6CkBAIC0zOTQwLDcgKzM4NTQs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJlIiwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJl
LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTM0OgpAQCAtMzk1Myw3ICszODY3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckV4dGVybmFsT0VTLCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTM1OgpAQCAtMzk2Niw3ICszODgwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFJlY3QsIHF1YWwsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMzY6CkBAIC0zOTc1LDcgKzM4ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJU
X09OTFkoInN0cnVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzc6CkBAIC0zOTg5LDEyICszOTAzLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYg
PSAmc3RydWN0dXJlOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM4Ogog
Ci0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQt
PnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9u
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3Ry
aW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzk6CkBA
IC00MDEyLDEyICszOTI2LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDYpXS5s
ZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1
cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQwOgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50
ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlm
IChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zlcigp
OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDE6CkBAIC00MDI3LDE0ICszOTQxLDE0IEBAIHl5
cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwg
RXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4
aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTQyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlTGlzdCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxNDM6CkBAIC00MDUwLDcgKzM5NjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCoo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0NDoKQEAgLTQwODcsNyArNDAwMSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ1
OgpAQCAtNDA5NSwxNCArNDAwOSwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpc3QpID0gTmV3UG9vbFRUeXBlTGlzdCgpOwogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
TGluZSkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ2OgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykg
LSAoMyldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQ3OgpAQCAtNDExNCw3ICs0MDI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVk
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0
RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDg6CkBAIC00MTMxLDY3ICs0MDQ1LDY3IEBAIHl5cmVk
dWNlOgogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ5OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
NTA6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxNTE6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUzOgogCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU0OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU1
OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTU2OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
ID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU5OgogCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cG9wKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTYxOgpAQCAtNDIwMiw0NCArNDExNiw0NCBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRM
aW5lKCh5eXZzcFsoNSkgLSAoNSldLmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjI6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxNjM6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjQ6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
O30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTY1OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsg
O30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjY6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
O30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTY3OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsg
O30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY5OgpAQCAt
NDI1MCwzMSArNDE2NCwzMSBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMikgLSAo
MyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoMykgLSAoMyld
LmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcxOgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE3MjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7
IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTczOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGlj
X2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8
VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NDoKQEAgLTQyODMsNyArNDE5Nyw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1
KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFso
MykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRl
cm0ubm9kZVBhaXIpLCAoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc1OgpAQCAtNDI5MSw3ICs0MjA1LDcgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5u
b2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzY6CkBAIC00Mjk5LDcgKzQyMTMs
NyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5v
ZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxNzc6CkBAIC00MzA4LDcgKzQyMjIsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzg6
CkBAIC00MzI2LDEyICs0MjQwLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
MDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc5Ogog
Ci0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODA6CkBAIC00MzQw
LDEyICs0MjU0LDEyIEBAIHl5cmVkdWNlOgogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eXZzcFsoMSkgLSAoNildLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5l
c3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MToKIAot
ICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgKytjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODI6CkBAIC00MzU2LDEy
ICs0MjcwLDEyIEBAIHl5cmVkdWNlOgogCiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZz
cFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgp
XS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSk7CiAgICAg
ICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE4MzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyAr
K2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTg0OgpAQCAtNDM3MCwzNSArNDI4NCwzNSBAQCB5eXJlZHVjZToKICAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAt
ICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+
KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9j
YXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9k
ZTIpLCAoeXl2c3BbKDcpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAo
NyldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NToKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODk6CkBAIC00NDA2LDcgKzQzMjAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUy
ID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5MDoKQEAgLTQ0MTQs
NyArNDMyOCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2Rl
UGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE5MToKQEAgLTQ0MjUsNyArNDMzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAo
eXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTkyOgpAQCAtNDQzNiw3ICs0MzUwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5
eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxOTM6CkBAIC00NDQ3LDcgKzQzNjEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1
bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxOTQ6CkBAIC00NDYyLDcgKzQzNzYsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTU6CkBAIC00NDcwLDcgKzQzODQsNyBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTY6CkBAIC00NDc4LDcgKzQzOTIs
NyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgIGNvbnRleHQt
PnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE5NzoKQEAgLTQ0ODYsMjEgKzQ0MDAsMjEgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwogICAgICAgICBj
b250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTk6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDA6CkBA
IC00NTgwLDcgKzQ0OTQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAgY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAy
MDE6CkBAIC00NjA4LDExICs0NTIyLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldEVuZExp
bmUoKSk7CiAKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAg
IGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTQ2MjQsNyArNDUzNyw2IEBAIHl5cmVkdWNlOgog
CiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9m
IHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8s
IGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAg
bnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtNDY4OSw3ICs0NjAxLDcgQEAgeXllcnJsYWI6CiAK
ICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBh
bmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8qIElm
IGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4K
IAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQpA
QCAtNDcwNiw3ICs0NjE4LDcgQEAgeXllcnJsYWI6CiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdp
bGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9y
CisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0
aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC00
NzYzLDkgKzQ2NzUsNiBAQCB5eWVycmxhYjE6CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywg
eXlzc3ApOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0K
ICAgKisreXl2c3AgPSB5eWx2YWw7CiAKIApAQCAtNDc5MCw3ICs0Njk5LDcgQEAgeXlhYm9ydGxh
YjoKICAgeXlyZXN1bHQgPSAxOwogICBnb3RvIHl5cmV0dXJuOwogCi0jaWZuZGVmIHl5b3ZlcmZs
b3cKKyNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhhdXN0
ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ4MDEsNyArNDcxMCw3
IEBAIHl5ZXhoYXVzdGVkbGFiOgogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9
IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRv
a2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAppbmRleCAyMzk0NWI4Li4zZTQ2
MWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZ190YWIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZ190YWIuaApAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24g
Mi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtl
IHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAs
IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgCisgICAgICBDb3B5cmlnaHQgKEMp
IDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAg
Rm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5
b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCisgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQorICAgCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v
d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24s
IHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwogICAgcGFydCBvciBh
bGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsK
QEAgLTI5LDEwICsyNywxMSBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1
c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMg
dG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3
aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAg
dmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCisKIC8qIFRva2Vucy4gICovCiAjaWZuZGVmIFlZ
VE9LRU5UWVBFCiAjIGRlZmluZSBZWVRPS0VOVFlQRQpAQCAtMTM0LDEwOCArMTMzLDE0IEBACiAg
ICAgIFFVRVNUSU9OID0gMzUwCiAgICB9OwogI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmlu
ZSBJTlZBUklBTlQgMjU4Ci0jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIDI1OQotI2RlZmluZSBNRURJ
VU1fUFJFQ0lTSU9OIDI2MAotI2RlZmluZSBMT1dfUFJFQ0lTSU9OIDI2MQotI2RlZmluZSBQUkVD
SVNJT04gMjYyCi0jZGVmaW5lIEFUVFJJQlVURSAyNjMKLSNkZWZpbmUgQ09OU1RfUVVBTCAyNjQK
LSNkZWZpbmUgQk9PTF9UWVBFIDI2NQotI2RlZmluZSBGTE9BVF9UWVBFIDI2NgotI2RlZmluZSBJ
TlRfVFlQRSAyNjcKLSNkZWZpbmUgQlJFQUsgMjY4Ci0jZGVmaW5lIENPTlRJTlVFIDI2OQotI2Rl
ZmluZSBETyAyNzAKLSNkZWZpbmUgRUxTRSAyNzEKLSNkZWZpbmUgRk9SIDI3MgotI2RlZmluZSBJ
RiAyNzMKLSNkZWZpbmUgRElTQ0FSRCAyNzQKLSNkZWZpbmUgUkVUVVJOIDI3NQotI2RlZmluZSBC
VkVDMiAyNzYKLSNkZWZpbmUgQlZFQzMgMjc3Ci0jZGVmaW5lIEJWRUM0IDI3OAotI2RlZmluZSBJ
VkVDMiAyNzkKLSNkZWZpbmUgSVZFQzMgMjgwCi0jZGVmaW5lIElWRUM0IDI4MQotI2RlZmluZSBW
RUMyIDI4MgotI2RlZmluZSBWRUMzIDI4MwotI2RlZmluZSBWRUM0IDI4NAotI2RlZmluZSBNQVRS
SVgyIDI4NQotI2RlZmluZSBNQVRSSVgzIDI4NgotI2RlZmluZSBNQVRSSVg0IDI4NwotI2RlZmlu
ZSBJTl9RVUFMIDI4OAotI2RlZmluZSBPVVRfUVVBTCAyODkKLSNkZWZpbmUgSU5PVVRfUVVBTCAy
OTAKLSNkZWZpbmUgVU5JRk9STSAyOTEKLSNkZWZpbmUgVkFSWUlORyAyOTIKLSNkZWZpbmUgU1RS
VUNUIDI5MwotI2RlZmluZSBWT0lEX1RZUEUgMjk0Ci0jZGVmaW5lIFdISUxFIDI5NQotI2RlZmlu
ZSBTQU1QTEVSMkQgMjk2Ci0jZGVmaW5lIFNBTVBMRVJDVUJFIDI5NwotI2RlZmluZSBTQU1QTEVS
X0VYVEVSTkFMX09FUyAyOTgKLSNkZWZpbmUgU0FNUExFUjJEUkVDVCAyOTkKLSNkZWZpbmUgSURF
TlRJRklFUiAzMDAKLSNkZWZpbmUgVFlQRV9OQU1FIDMwMQotI2RlZmluZSBGTE9BVENPTlNUQU5U
IDMwMgotI2RlZmluZSBJTlRDT05TVEFOVCAzMDMKLSNkZWZpbmUgQk9PTENPTlNUQU5UIDMwNAot
I2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzA1Ci0jZGVmaW5lIExFRlRfT1AgMzA2Ci0jZGVmaW5l
IFJJR0hUX09QIDMwNwotI2RlZmluZSBJTkNfT1AgMzA4Ci0jZGVmaW5lIERFQ19PUCAzMDkKLSNk
ZWZpbmUgTEVfT1AgMzEwCi0jZGVmaW5lIEdFX09QIDMxMQotI2RlZmluZSBFUV9PUCAzMTIKLSNk
ZWZpbmUgTkVfT1AgMzEzCi0jZGVmaW5lIEFORF9PUCAzMTQKLSNkZWZpbmUgT1JfT1AgMzE1Ci0j
ZGVmaW5lIFhPUl9PUCAzMTYKLSNkZWZpbmUgTVVMX0FTU0lHTiAzMTcKLSNkZWZpbmUgRElWX0FT
U0lHTiAzMTgKLSNkZWZpbmUgQUREX0FTU0lHTiAzMTkKLSNkZWZpbmUgTU9EX0FTU0lHTiAzMjAK
LSNkZWZpbmUgTEVGVF9BU1NJR04gMzIxCi0jZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjIKLSNkZWZp
bmUgQU5EX0FTU0lHTiAzMjMKLSNkZWZpbmUgWE9SX0FTU0lHTiAzMjQKLSNkZWZpbmUgT1JfQVNT
SUdOIDMyNQotI2RlZmluZSBTVUJfQVNTSUdOIDMyNgotI2RlZmluZSBMRUZUX1BBUkVOIDMyNwot
I2RlZmluZSBSSUdIVF9QQVJFTiAzMjgKLSNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyOQotI2RlZmlu
ZSBSSUdIVF9CUkFDS0VUIDMzMAotI2RlZmluZSBMRUZUX0JSQUNFIDMzMQotI2RlZmluZSBSSUdI
VF9CUkFDRSAzMzIKLSNkZWZpbmUgRE9UIDMzMwotI2RlZmluZSBDT01NQSAzMzQKLSNkZWZpbmUg
Q09MT04gMzM1Ci0jZGVmaW5lIEVRVUFMIDMzNgotI2RlZmluZSBTRU1JQ09MT04gMzM3Ci0jZGVm
aW5lIEJBTkcgMzM4Ci0jZGVmaW5lIERBU0ggMzM5Ci0jZGVmaW5lIFRJTERFIDM0MAotI2RlZmlu
ZSBQTFVTIDM0MQotI2RlZmluZSBTVEFSIDM0MgotI2RlZmluZSBTTEFTSCAzNDMKLSNkZWZpbmUg
UEVSQ0VOVCAzNDQKLSNkZWZpbmUgTEVGVF9BTkdMRSAzNDUKLSNkZWZpbmUgUklHSFRfQU5HTEUg
MzQ2Ci0jZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDcKLSNkZWZpbmUgQ0FSRVQgMzQ4Ci0jZGVmaW5l
IEFNUEVSU0FORCAzNDkKLSNkZWZpbmUgUVVFU1RJT04gMzUwCi0KIAogCiAKICNpZiAhIGRlZmlu
ZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlv
biBZWVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5l
OwogICAgICAgICB1bmlvbiB7CkBAIC0yNjUsMTQgKzE3MCwxNSBAQCB0eXBlZGVmIHVuaW9uIFlZ
U1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAg
fSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7CisK
KworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5
c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVm
aW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEK
ICNlbmRpZgogCiAKIAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5kZXggNTQ0MTU1Ny4uNDA0MWM2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApAQCAt
NDUyLDcgKzQ1Miw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29u
c3QgeyByZXR1cm4gbmFtZTsgfQogCiAgICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRl
ZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRl
ZmluZWQ7IH0KKyAgICBib29sIGlzVXNlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9
CiAgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9CkBAIC01MzMsNiAr
NTMzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCiAgICAg
ICAgICAgICByaWdodFRvTGVmdChyaWdodFRvTGVmdCksCiAgICAgICAgICAgICBkZXB0aCgwKSB7
fQorICAgIHZpcnR1YWwgflRJbnRlcm1UcmF2ZXJzZXIoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKikge30KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKaW5k
ZXggYTE3YzMxOS4uMTk5OTBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKQEAgLTUwLDYgKzUwLDcgQEAg
TlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCkBAIC0zMDcsNyArMzA4LDcg
QEAgc3RydWN0IEF0b21UYWJsZV9SZWMgewogICAgIGludCBzaXplOwogfTsKIAotc3RhdGljIEF0
b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9Oworc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0g
eyB7IE5VTEwsIDAsIDAgfSwgeyBOVUxMLCAwLCAwLCAwIH0sIE5VTEwsIE5VTEwsIDAsIDAgfTsK
IEF0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CiAKIHN0YXRpYyBpbnQgQWRkQXRvbUZpeGVk
KEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRvbSk7CkBAIC00MzQsMTQg
KzQzNSwxNCBAQCBzdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25z
dCBjaGFyICpzKQogICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1wQXRvbVRhYmxlKSB7
CiAgICAgICAgICAgICAgICAgaW50IGlpOwogICAgICAgICAgICAgICAgIGNoYXIgc3RyWzIwMF07
Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3Jl
IHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIs
CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBIYXNoIGZh
aWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3JlYXNlIGhhc2ggdGFi
bGUgc2l6ZS4gKioqIiwKICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9UQUJMRV9NQVhfQ09M
TElTSU9OUyk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAKLSAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFzaD0lMDR4
LCBkZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOworICAgICAgICAgICAg
ICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhh
c2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKICAgICAg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICBmb3IgKGlp
ID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBl
bnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4
IHdpdGggXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlz
aW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxp
c2lvbltpaV1dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhz
dHIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSwxNCArNjg2LDE0IEBAIHZvaWQgUHJpbnRB
dG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCiAgICAgY2hhciBzdHJbMjAwXTsKIAogICAgIGZv
ciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKLSAgICAgICAgc3ByaW50
ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+
YW1hcFtpaV1dKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVkOiBcIiVz
XCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOwogICAg
ICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KLSAgICBzcHJpbnRmKHN0ciwgIkhhc2gg
dGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKKyAgICBzbnByaW50Zihz
dHIsIHNpemVvZihzdHIpLCAiSGFzaCB0YWJsZTogc2l6ZT0lZCwgZW50cmllcz0lZCwgY29sbGlz
aW9ucz0iLAogICAgICAgICAgICBhdGFibGUtPmh0YWJsZS5zaXplLCBhdGFibGUtPmh0YWJsZS5l
bnRyaWVzKTsKICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIGZvciAoaWkgPSAwOyBpaSA8
IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgc3ByaW50ZihzdHIs
ICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKKyAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIiAlZCIsIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tpaV0pOwogICAgICAg
ICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKaW5kZXggMTNhNWRm
MS4uYmZhOWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCkBAIC01MSw2ICs1MSw3IEBAIE5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAK
ICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNjc4LDcgKzY3OSw3IEBAIHN0YXRpYyBpbnQgQ1BQ
cHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogCQljYXNlIC0xOgogICAgICAgICAgICAgLy8g
RU9GCiAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNwcmFnbWEgZGlyZWN0aXZlIG11c3Qg
ZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlyZXR1cm4gdG9rZW47CisJCQlnb3RvIGZyZWVN
ZW1vcnlBbmRSZXR1cm5Ub2tlbjsKIAkJZGVmYXVsdDoKIAkJCVNyY1N0ck5hbWVbMF0gPSB0b2tl
bjsKIAkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOwpAQCAtNjg4LDEwICs2ODksOSBAQCBzdGF0aWMg
aW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHAp
OwogCUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7Ci0J
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwogCQorZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0b2tl
bkNvdW50OyArK2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyArNzg0
LDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGludCB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsKIAog
ICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewogICAgICAgICBpZiAoeXlsdmFscHAt
PnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVhZENQ
UGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJv
cih5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZl
cnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOwot
ICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+
c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRl
bnNpb24oeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUgQEAg
dm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJbnRN
YWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRp
b24gPSB7MH07CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJvbCAq
c3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0eXBl
cHAgdmFsID0gezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAs
IDB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCAwfTsKICAgICBpbnQgYXRvbSA9
IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29s
KTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUs
ICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQ
UF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwg
TUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0
b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5l
TnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
TUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAg
VW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxw
cC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4u
ODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBT
aC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9n
Lgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9n
bHVlLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuaCIKK30KKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERp
YWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBt
ZS4KKyAgICB9Cit9OworCitzdHJ1Y3QgSW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJh
c2U7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxl
eGVyOworfTsKKworc3RhdGljIGJvb2wgQ29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUsIHl5c3R5cGVwcCogeXlsdmFscHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBN
QVhfU1lNQk9MX05BTUVfTEVOKQorICAgIHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJV
RkZFUiBPVkVSRkxPVyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNw
eSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBpbnQgbGV4KElucHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkK
K3sKKyAgICBJbnB1dFNyY0xleGVyKiBzcmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAg
ICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4
KCZ0b2tlbik7CisgICAgc3dpdGNoICh0b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAv
LyBFT0YKKyAgICAgICAgZGVsZXRlIHNyYy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRp
YWdub3N0aWNzOworICAgICAgICBmcmVlKHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0
ID0gMDsKKyAgICAgICAgcmV0ID0gRU9GOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6SURFTlRJRklFUjoKKyAgICAgICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVl
LCB5eWx2YWxwcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9
CisgICAgICAgIHJldCA9IENQUF9JREVOVElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4u
dmFsdWUsIHl5bHZhbHBwKSkKKyAgICAgICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lu
dCA9IGF0b2kodG9rZW4udmFsdWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0g
Q1BQX0lOVENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09O
U1RfRkxPQVQ6CisgICAgICAgIENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7
CisgICAgICAgIHJldCA9IENQUF9GTE9BVENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfSU5DOgorICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBf
REVDX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6Cisg
ICAgICAgIHJldCA9IENQUF9SSUdIVF9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0xFOgorICAgICAgICByZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQ
UF9FUV9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAg
ICAgICByZXQgPSBDUFBfTkVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9BTkQ6CisgICAgICAgIHJldCA9IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQ
X09SX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lH
TjoKKyAgICAgICAgcmV0ID0gQ1BQX0FERF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lH
TjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046Cisg
ICAgICAgIHJldCA9IENQUF9NVUxfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfRElWX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAg
ICByZXQgPSBDUFBfTU9EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0xFRlRfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAg
IHJldCA9IENQUF9SSUdIVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9BTkRfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJl
dCA9IENQUF9YT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfT1JfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJl
cih0b2tlbi5sb2NhdGlvbi5saW5lKTsKKyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRp
b24uZmlsZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQoreworICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAg
ICBwcDo6VG9rZW5pemVyKiBsZXhlciA9IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsK
KyAgICBpZiAoIWxleGVyLT5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAg
ICAgICBkZWxldGUgbGV4ZXI7CisgICAgICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgSW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhl
ciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNp
emVvZihJbnB1dFNyY0xleGVyKSk7CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJh
c2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBp
bi0+bGV4ZXIgPSBsZXhlcjsKKworICAgIHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNk
M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7
CisKK0lucHV0U3JjKiBMZXhlcklucHV0U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJm
OS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNp
Zm5kZWYgX19NRU1PUllfSAogI2RlZmluZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYu
aD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJu
IE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGlu
dCBhbGlnbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyNTljYzQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4
dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBz
dGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBw
cmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAs
IDMpID09ICJHTF8iKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRh
aW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAo
bmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0
OjpDb250ZXh0KCkKLSAgICA6IG1MZXhlcihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAg
ICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0KLQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRl
c3Ryb3lMZXhlcigpOwotfQotCi1ib29sIENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBp
bml0TGV4ZXIoKTsKLQotICAgIC8vIFRPRE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9z
IGhlcmUgc28gdGhhdCB3ZSBkbyBub3QgbmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5
dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0KLWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAg
ICAgIFRva2VuVmVjdG9yKiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChz
dHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAg
ICBtSW5wdXQgPSBuZXcgSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0
ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8v
IFBhcnNlLgotICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgot
ICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVm
aW5lTWFjcm8ocHA6OlRva2VuOjpMb2NhdGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5W
ZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZl
Y3RvciogcmVwbGFjZW1lbnRzKQotewotICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5l
dyBNYWNybyh0eXBlLCBuYW1lLCBwYXJhbWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAo
aXNNYWNyb05hbWVSZXNlcnZlZChuYW1lKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3Ap
OiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlz
TWFjcm9EZWZpbmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5h
bWVdID0gbWFjcm8ucmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRl
eHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9T
ZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09
IG1NYWNyb3MuZW5kKCkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVy
cm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQo
Y29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFt
ZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0KLQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUu
Ci12b2lkIENvbnRleHQ6OnJlc2V0KCkKLXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVn
aW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVsZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIo
KTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRw
dXQgPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSwgaW50IHZhbHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBz
dHJlYW07Ci0gICAgc3RyZWFtIDw8IHZhbHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tl
bigwLCBJTlRfQ09OU1RBTlQsIG5ldyBzdGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBU
b2tlblZlY3RvciogcmVwbGFjZW1lbnRzID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7
Ci0KLSAgICBtTWFjcm9zW25hbWVdID0gbmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlbWVudHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29u
dGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0K
LSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5j
bHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQot
Y2xhc3MgQ29udGV4dAotewotICBwdWJsaWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0
KCk7Ci0KLSAgICBib29sIGluaXQoKTsKLSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAg
ICAgICBUb2tlblZlY3Rvciogb3V0cHV0KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4g
bUxleGVyOyB9Ci0gICAgaW50IHJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAg
ICBUb2tlblZlY3Rvciogb3V0cHV0KCkgeyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBk
ZWZpbmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZyogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1l
dGVycywKLSAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
KTsKLSAgICBib29sIHVuZGVmaW5lTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAg
IGJvb2wgaXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYg
c3RkOjptYXA8c3RkOjpzdHJpbmcsIE1hY3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0
KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAg
IHZvaWQgZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFs
dWUpOwotICAgIGJvb2wgcGFyc2UoKTsKLQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhh
bmRsZS4KLSAgICBJbnB1dCogbUlucHV0OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAg
IE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBEZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNw
cApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNz
LmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3Rp
Y3M6On5EaWFnbm9zdGljcygpCit7Cit9CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBp
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAg
IC8vIFRPRE8oYWxva3ApOiBLZWVwIGEgY291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAg
ICBwcmludChpZCwgbG9jLCB0ZXh0KTsKK30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdu
b3N0aWNzOjpzZXZlcml0eShJRCBpZCkKK3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYm
IChpZCA8IEVSUk9SX0VORCkpCisgICAgICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQg
PiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBX
QVJOSU5HOworCisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmgKQEAgLTAsMCArMSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3Bh
Y2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciBy
ZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVz
cG9uc2libGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNz
IERpYWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBF
UlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1P
UlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAor
ICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAg
ICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAg
ICAgTUFDUk9fUkVERUZJTkVELAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJ
T05fRElSRUNUSVZFLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAg
V0FSTklOR19CRUdJTiwKKyAgICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FS
TklOR19FTkQKKyAgICB9OworCisgICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZv
aWQgcmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7Cisg
ICAgICAgIEVSUk9SLAorICAgICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZl
cml0eShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhh
bmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisK
K25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xh
c3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNs
YXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRs
aW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlhdGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxl
cgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKwor
ICAgIC8vIEhhbmRsZSBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24m
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGJlaGF2aW9yKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25z
dCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB2ZXJzaW9uKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43ZjA2MThkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApA
QCAtMCwwICsxLDQ3OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJz
ZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRl
IDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3Rp
dmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1h
Y3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5o
IgorCituYW1lc3BhY2Ugeworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZp
bmUoImRlZmluZSIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigi
dW5kZWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYoImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
cmVjdGl2ZUVycm9yKCJlcnJvciIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVQcmFnbWEoInByYWdtYSIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVF
eHRlbnNpb24oImV4dGVuc2lvbiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVWZXJzaW9uKCJ2ZXJzaW9uIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFt
ZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZp
eGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9
PSAiR0xfIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5n
IHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUu
ZmluZCgiX18iKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVk
UGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExl
eGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3Ap
OiBJbXBsZW1lbnQgbWUuCisgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAg
cHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJl
Y3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRv
a2VuaXplcih0b2tlbml6ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdu
b3N0aWNzKGRpYWdub3N0aWNzKSwKKyAgICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5k
bGVyKQoreworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sK
KyAgICBkbworICAgIHsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAg
aWYgKHRva2VuLT50eXBlID09ICcjJykgcGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hp
bGUgKHRva2VuLT50eXBlID09ICdcbicpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAn
IycpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUg
PT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVEZWZpbmUpCisgICAgICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAg
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAg
ICBwYXJzZVVuZGVmKHRva2VuKTsKKyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVJZikKKyAgICAgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlm
ICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRl
Zih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZu
ZGVmKQorICAgICAgICAgICAgcGFyc2VJZm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisg
ICAgICAgICAgICBwYXJzZUVsaWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQorICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7Cisg
ICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
ICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVQcmFnbWEpCisgICAgICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAg
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAg
ICAgICAgcGFyc2VFeHRlbnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4p
OworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAg
ICAgICAgICBwYXJzZUxpbmUodG9rZW4pOworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUg
IT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+dmFsdWUpOworCisgICAgd2hpbGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgewor
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJW
RUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE1hY3JvIG1hY3JvOworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVP
Ymo7CisgICAgbWFjcm8ubmFtZSA9IHRva2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRp
bmdTcGFjZSgpKQorICAgIHsKKyAgICAgICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVj
dCBhcmd1bWVudHMuCisgICAgICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAg
ICAgICBkbyB7CisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAg
ICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZh
bHVlKTsKKworICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21t
YS4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9j
YXRpb24gYmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAv
LyBsaXN0LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFs
cygpIHRvCisgICAgICAgIC8vIGNvbXBhcmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRp
b24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9i
YWNrKCp0b2tlbik7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRl
ciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURF
RklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwg
bWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVy
ID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3Jv
U2V0LT5lbmQoKSkKKyAgICAgICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRv
a2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFz
c2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIg
ZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyKTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5k
ZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNz
aW9uUGFyc2VyIGV4cHJlc3Npb25QYXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7
CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAw
OworICAgIGlmICghZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQor
ICAgIHsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUu
IEhhbmRsZSBpdC4KKyAgICAvLyBUT0RPKGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4K
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQorewor
ICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAg
Ly8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVJZm5kZWYpOworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3Zv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRP
RE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRWxzZSk7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9r
cCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVF
bGlmKTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFbmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IElt
cGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUVycm9yKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBT
dGF0ZQorICAgIHsKKyAgICAgICAgUFJBR01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisg
ICAgICAgIFBSQUdNQV9WQUxVRSwKKyAgICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAg
Ym9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50
IHN0YXRlID0gUFJBR01BX05BTUU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAg
IHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpM
QVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBQUkFHTUFfTkFNRToKKyAgICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJ
RklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2
YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2Vu
LT50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgUklHSFRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tl
bi0+dHlwZSA9PSAnKScpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0g
dmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFHTUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4K
KyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBX
aXRob3V0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJF
TiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAg
IH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBm
b3IgZW1wdHkgcHJhZ21hLgorICAgIHsKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRs
ZVByYWdtYSh0b2tlbi0+bG9jYXRpb24sIG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3Rh
dGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhU
X0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3Ry
aW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0
YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAg
aWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUg
PSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9O
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxp
ZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAg
ICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24s
IG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lv
bihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
VmVyc2lvbik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJF
UgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7
CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRv
aSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05V
TUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFu
ZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTog
SW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUp
OworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQs
IG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRl
ICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFu
ZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGlj
IExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tl
bml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAg
ICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAg
ICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShU
b2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2
b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
SWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihU
b2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2
b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVy
OworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGlj
czsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8v
IG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZF
X1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJz
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Mzk1MDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCwwICsxLDE5MTUgQEAKKy8qIEEg
Qmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMi4gICovCisKKy8qIFNrZWxldG9u
IGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAor
ICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEw
IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIg
dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1h
eSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0
aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5k
ZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2Vs
ZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVk
IHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5
LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBp
dHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBl
eGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5n
CisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisg
ICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBM
QUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Cisg
ICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAg
Ki8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBv
ciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBz
aG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0
IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21l
IHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmlu
ZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9O
CisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0
cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2Rl
ZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNC4yIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNk
ZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisj
ZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAw
CisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxv
Y2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhl
IHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAg
ICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9y
ICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5l
IHl5Y2hhciAgICAgICAgICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcK
KyNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBw
YXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhp
cyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4
cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6
OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKwor
CitzdGF0aWMgaW50IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGlj
IHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisK
KworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlE
RUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICov
CisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZp
bmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAor
I2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9L
RU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKworLyogVG9rZW5z
LiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQ
dXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhl
ciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50
eXBlIHsKKyAgICAgQ09OU1RfSU5UID0gMjU4LAorICAgICBPUF9PUiA9IDI1OSwKKyAgICAgT1Bf
QU5EID0gMjYwLAorICAgICBPUF9ORSA9IDI2MSwKKyAgICAgT1BfRVEgPSAyNjIsCisgICAgIE9Q
X0dFID0gMjYzLAorICAgICBPUF9MRSA9IDI2NCwKKyAgICAgT1BfUklHSFQgPSAyNjUsCisgICAg
IE9QX0xFRlQgPSAyNjYsCisgICAgIFVOQVJZID0gMjY3CisgICB9OworI2VuZGlmCisKKworCisj
aWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5
cGVkZWYgaW50IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZp
bmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwor
IyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworCisjaWZkZWYgc2hvcnQK
KyMgdW5kZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZ
VFlQRV9VSU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5
dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBF
X0lOVDggeXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYg
c2hvcnQgaW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0
eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5U
MTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNo
b3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRl
ZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlm
IGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZp
bmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMg
IGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNp
Z25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlT
SVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZ
WUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBk
Z2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlm
bmRlZiBZWV8KKyMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKwor
LyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisj
aWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkg
KCh2b2lkKSAoZSkpCisjZWxzZQorIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRp
ZgorCisvKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91
dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChu
KSAobikKKyNlbHNlCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIGludAorWVlJRCAoaW50IHl5aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkp
CisgICAgaW50IHl5aTsKKyNlbmRpZgoreworICByZXR1cm4geXlpOworfQorI2VuZGlmCisKKyNp
ZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNl
ciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMu
ICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxM
T0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWls
dGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAg
aW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMg
ICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQor
IyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EK
KyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRl
ZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAg
ICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYK
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5
IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZS
RUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZ
WVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkg
b25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEg
cGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNh
ZmVseQorICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEg
c2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGls
ZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5k
aWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZ
WVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAg
ZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMg
IGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAg
ICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAo
ZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9I
CisjICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVm
IFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBt
YWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQor
IyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5l
ZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9p
ZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAg
ZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cg
fHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisg
ICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lT
X1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHBy
b3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYwor
eworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsK
KworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3Rh
Y2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVv
ZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0
byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAq
LworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5
cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJ
TVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09Q
WQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlD
T1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20s
IChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFko
VG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICBZWVNJWkVf
VCB5eWk7CQkJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkg
ICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKFlZ
SUQgKDApKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMg
b2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlT
SVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVs
ZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2Yg
dGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0
aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FU
RShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJ
CQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0
YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2Fs
bG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSAr
IFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgq
eXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKwor
I2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBz
dGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBp
biBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBO
dW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRT
IC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZ
TlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyog
WVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIK
KworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9u
ZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhV
VE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25l
ZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9L
KQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xh
dGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAg
MiwgICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAg
ICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9
OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJI
UyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAg
ICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEs
ICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2Mywg
ICAgNjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5
MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycg
UkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4
LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQs
ICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAg
IDYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAy
OSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5
LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxMSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAg
ICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAg
ICAtMSwgICAgMjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4
LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAg
IDI2LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1
bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAgNzQsICAgIDc0LCAgICA4MSwgICAgODIsICAg
IDg1LCAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywKKyAgICAgMTAwLCAgIDEwMywgICAxMDYs
ICAgMTA5LCAgIDExMiwgICAxMTUsICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LAorICAgICAx
NDAsICAgMTUzLCAgIDE1NiwgICAxNTksICAgMTYyLCAgIDE2NSwgICAxNjgKK307CisjZW5kaWYK
KworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZ
VE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVN
LgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywg
bm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQor
eworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIs
ICJPUF9BTkQiLCAiJ3wnIiwKKyAgIideJyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwn
IiwgIic+JyIsICJPUF9HRSIsICJPUF9MRSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicr
JyIsICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIs
ICInKCciLCAiJyknIiwgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307Cisj
ZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVy
bmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAq
Lworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwg
ICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAg
IDI2MSwKKyAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2
LCAgICA0MywgICAgNDUsICAgIDQyLAorICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAg
MTI2LCAgICA0MCwgICAgNDEKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wg
bnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9
OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhh
bmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJb
XSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAz
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NU
QVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RB
VEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8u
ICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAy
NCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAg
MTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAy
MSwKKyAgICAgIDIwLCAgICAxOQorfTsKKworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAg
NywgICAgIDgKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUg
b2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQ
QUNUX05JTkYgLTExCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAg
ICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwg
ICAgNjgsICAgLTExLAorICAgICAtMTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMs
ICAgMTU0LAorICAgICAxNTQsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAg
MzcsICAgIDMxLCAgICAzMSwgICAtMTEsCisgICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdP
VE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0K
K3sKKyAgICAgLTExLCAgIC0xMSwgICAgLTIKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRF
LU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUs
IHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisg
ICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlz
LgorICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxF
X05JTkYgLTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgIDEsCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAyLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAor
ICAgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAx
OCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAg
MjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisg
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAg
MjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsCisgICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
IDMsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAx
OCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisg
ICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAg
OSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxCit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBU
aGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRl
IFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sK
KyAgICAgICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
OCwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZp
bmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIg
PSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNk
ZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5
YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZ
WUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3Jh
cmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlF
UlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJz
aW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGlu
IHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlz
b24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisg
ICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRl
ZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9t
IHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qg
d29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdl
IHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVz
ZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5k
aWYKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUg
WVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9
PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNo
YXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAg
ICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNL
ICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlc
CisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7
CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZ
WVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMg
MCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAg
dGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVm
aW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAor
IyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJ
CQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3Rf
bGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJl
bnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChD
dXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAor
CX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVu
dCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNM
T0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0g
KEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9j
b2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisK
KworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJl
YW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9u
bHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFy
ZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5U
CisjIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAor
IyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYg
KEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2Mp
LmZpcnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29s
dW1uKQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZv
aWQpIDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcg
d2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRl
ZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUg
WVlMRVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVn
Z2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRG
CisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJ
TlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlG
UFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1C
T0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJ
CQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3lt
Ym9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBc
CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJ
CSAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVl
X3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0
IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1i
b2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAg
IEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5
eXZhbHVlcCkKKyAgICByZXR1cm47CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklO
VAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRv
a251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7Cisj
IGVuZGlmCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7
CisgICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFBy
aW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBl
LCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxz
ZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1
ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNl
bmRpZgoreworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRw
dXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5U
RiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1i
b2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAg
WVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNr
X3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRz
IHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9p
bnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQK
K3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJv
dHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAo
c3RkZXJyLCAiU3RhY2sgbm93Iik7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0
b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2Rv
IHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAo
KEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0
IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlT
VFlQRSAqeXl2c3AsIGludCB5eXJ1bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGlj
IHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNU
WVBFICp5eXZzcDsKKyAgICBpbnQgeXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5k
aWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWdu
ZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJy
LCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVs
ZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZv
ciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChz
dGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5
aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVD
RV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5
X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgw
KSkKKworLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5p
bml0aWFsaXplZCBzbyB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8K
K2ludCB5eWRlYnVnOworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihB
cmdzKQorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24pCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JF
RFVDRV9QUklOVChSdWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQ
VEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZ
WUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhE
RVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9u
bHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgor
CisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVu
ZGVmaW5lZCBpZgorICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlN
QVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFy
aXRobWV0aWMuICAqLworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEgg
MTAwMDAKKyNlbmRpZgorCisMCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlz
dHJsZW4KKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAg
ZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2Yg
WVlTVFIuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRp
YyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2Vu
ZGlmCit7CisgIFlZU0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5d
OyB5eWxlbisrKQorICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgor
IyBlbmRpZgorCisjIGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYg
ZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0
cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcg
dGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgor
eXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGlj
IGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAg
IGNvbnN0IGNoYXIgKnl5c3JjOworI2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAg
Y29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9
ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgor
IyBlbmRpZgorCisjIGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRl
bnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMg
YW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUK
KyAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVz
cyB0aGUgc3RyaW5nCisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNr
c2xhc2ggKG90aGVyIHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFr
ZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0
ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUg
YmVlbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0
IGNoYXIgKnl5c3RyKQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJ
WkVfVCB5eW4gPSAwOworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZv
ciAoOzspCisJc3dpdGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcs
JzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAg
IGlmICgqKyt5eXAgIT0gJ1xcJykKKwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJ
ICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJ
ICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAg
Y2FzZSAnIic6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkg
ICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQor
CisgIGlmICghIHl5cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVy
biB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5
IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tl
bgorICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBv
ZiBieXRlcyBjb3BpZWQsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4g
IElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNw
ZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1l
c3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMg
ZHVyaW5nCisgICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50
YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAg
aW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4g
JiYgeXluIDw9IFlZTEFTVCkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBp
bnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUw
ID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXpl
ID0geXlzaXplMDsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292
ZXJmbG93ID0gMDsKKyAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0g
NSB9OworICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TV07CisgICAgICBpbnQgeXl4OworCisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRl
eHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQg
b24gdGhlIGZseS4gICovCisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIp
OworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIp
OworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBv
ciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hh
ciAqeXlmbXQ7CisgICAgICBjaGFyIGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25z
dCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAg
c3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3Jt
YXRbc2l6ZW9mIHl5dW5leHBlY3RlZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJ
CSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChz
aXplb2YgeXlvciAtIDEpKV07CisgICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0
aW5nOworCisgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBu
ZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0g
eXluIDwgMCA/IC15eW4gOiAwOworCisgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90
aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNU
IC0geXluICsgMTsKKyAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8g
eXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAg
eXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZv
cm1hdCwgeXl1bmV4cGVjdGVkKTsKKworICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwg
eXl4ZW5kOyArK3l5eCkKKwlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0g
WVlURVJST1IpCisJICB7CisJICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0pCisJICAgICAgeworCQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsK
KwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJ
ICAgICAgfQorCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNp
emUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVf
b3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOwor
CSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9
IHl5b3I7CisJICB9CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUx
ID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5
c2l6ZTEgPCB5eXNpemUpOworICAgICAgeXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5
c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJl
c3VsdCkKKwl7CisJICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUg
dXNlcidzIG5hbWUgc3BhY2UuCisJICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBl
dmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUg
d3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAg
aW50IHl5aSA9IDA7CisJICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJ
ICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkK
KwkJeworCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYg
Kz0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9
CisJICAgIH0KKwl9CisgICAgICByZXR1cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZ
WUVSUk9SX1ZFUkJPU0UgKi8KKwwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhp
cyBzeW1ib2wuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGlu
dCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0
YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkK
KyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5
dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFs
dWVwKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAi
RGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5
eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0
OgorCWJyZWFrOworICAgIH0KK30KKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2lu
Zy1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJT
RV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwor
aW50IHl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOwor
I2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCisKKworCisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZ
UEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZv
aWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAo
Q29udGV4dCAqY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgQ29u
dGV4dCAqY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJv
bC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2th
aGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKyAgICAvKiBOdW1iZXIgb2Ygc3lu
dGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3Rh
dGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2Fn
ZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNr
cyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAg
ICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIg
dG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93
CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUg
c3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Cisg
ICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAv
KiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklU
REVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZ
WVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8q
IExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVy
LiAgKi8KKyAgaW50IHl5dG9rZW47CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4g
c2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5l
cy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVm
ZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNo
YXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1Qg
eXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNU
QUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIg
b2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8g
emVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0g
MDsKKworICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7Cisg
IHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3Rh
cnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOwor
ICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBi
ZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0
ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0
aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUg
d2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisgIHl5c3NwID0geXlz
czsKKyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0
IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVu
IHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLwor
ICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAo
eXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhl
IGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8K
KyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92
ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhl
IHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBm
b3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMx
ID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sg
cG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEg
aW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBj
b25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0
CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVy
ZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAor
CQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7Cisg
ICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9D
QVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQg
dGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3Rh
Y2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOwor
ICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFY
REVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5
eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNU
QUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1
c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNL
X1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUK
KwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0K
KyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlz
cyArIHl5c2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAg
ICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJ
CSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyAr
IHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklO
VEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5
eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKwor
LyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6
CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0
ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0
byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5
eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRl
ZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24n
dCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkg
b3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9
PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0
b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIg
PD0gWVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9Cisg
IGVsc2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAg
ICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tl
biBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2Ug
dGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlM
QVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0
OworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBp
ZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAg
ICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50
IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IK
KyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07
CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklO
VCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2Fy
ZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0
ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJy
ZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0
ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNl
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERv
IGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVk
dWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAq
LworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBs
ZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgor
CisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFn
ZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVz
ZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVu
Y29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9p
ZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6
ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5U
ICh5eW4pOworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsK
KyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gKHl5dnNwWygxKSAtICgxKV0pOworICAgICAg
ICBZWUFDQ0VQVDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEyOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDE3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAg
eworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBp
ZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwg
IiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4
dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAg
ICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygz
KSAtICgzKV0pID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsK
KyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5
dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5z
dHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JU
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSAvICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICogKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIy
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+
ICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2
c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQg
KCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAo
eXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisK
KyAgKisreXl2c3AgPSB5eXZhbDsKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRo
ZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJh
c2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVt
YmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0g
eXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYm
IHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5
c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290
b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRl
Y3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCBy
ZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAg
Kyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXpl
ID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9j
IDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgewor
CSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8
PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5
eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2di
dWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikg
WVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19h
bGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7
CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlm
ICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQp
IHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAo
Y29udGV4dCwgeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4
dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKwor
ICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFu
ZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNj
YXJkIGl0LiAgKi8KKworICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1
cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVP
RikKKwkgICAgWVlBQk9SVDsKKwl9CisgICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJ
ICB5eWNoYXIgPSBZWUVNUFRZOworCX0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byBy
ZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2Vu
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
KTsKKyAgICB9CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJy
b3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5d
LCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsK
KworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0
bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5
cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFi
b3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXly
ZXR1cm47CisKKyNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXll
eGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVk
bGFiOgorICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5
cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoK
KyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlz
Y2FyZGluZyBsb29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8q
IERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmln
Z2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAo
eXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3Ag
IT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJ
CSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEp
OworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZ
WVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5
eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAv
KiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsK
K30KKworCisKKworCitpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9r
ZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigp
KTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0
eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0g
T1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1Bf
UklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9M
RUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNh
c2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBi
cmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwn
OiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsK
KyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBl
ID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAg
IGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEn
OyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2Ug
JygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVh
azsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0
aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUg
IT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30K
Kwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sK
KyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJ
RF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29u
KTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBh
cnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhl
cihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4
cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAg
Q29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7
CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47
CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNv
bnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNh
c2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwg
IiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFM
X0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RXhwcmVzc2lvblBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2Vy
LmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3Qg
VG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJl
c3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisg
ICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgor
ICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAg
IExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30g
IC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVT
U0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJz
ZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg0Mzk1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMjYxIEBACisvKgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVT
IHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1Ug
QUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhF
IEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZp
bmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRp
ZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4K
KyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRl
ICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29u
dGV4dAoreworICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVy
KiBsZXhlcjsKKyAgICBwcDo6VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30g
IC8vIG5hbWVzcGFjZQorJX0KKworJWRlZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIK
KyVwYXJzZS1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNv
bnRleHR9CisKKyV7CitzdGF0aWMgaW50IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRl
eHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBy
ZWFzb24pOworJX0KKworJXRva2VuIENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FO
RAorJWxlZnQgJ3wnCislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVs
ZWZ0ICc8JyAnPicgT1BfTEUgT1BfR0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcr
JyAnLScKKyVsZWZ0ICcqJyAnLycgJyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAg
ICA6IGV4cHJlc3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSAkMTsKKyAgICAg
ICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBDT05TVF9JTlQKKyAg
ICB8IGV4cHJlc3Npb24gT1BfT1IgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYn
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiBPUF9ORSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uIE9QX0VRIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID09ICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JzwnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiBPUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
JDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4
cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQz
OworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lP
Tl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwg
JDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFt
LnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJP
UlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAg
ICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFVOQVJZ
IHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9uICVwcmVj
IFVOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9u
ICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHBy
ZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXls
ZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisK
KyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tl
bi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAg
ICAqbHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENP
TlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjog
dHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUg
PSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNh
c2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBi
cmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4n
OiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsK
KyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBl
ID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAg
IGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyon
OyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2Ug
J34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVh
azsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUg
Y3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXIt
PmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBw
IHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdu
b3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAg
IGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9
IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQg
PSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAo
cmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRp
b24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRl
eCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02
LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4K
LQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAK
LUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJp
bmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1T
aXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUlu
aXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFT
U0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wg
SW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwK
KyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0g
ICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAg
ICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3Vu
dDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0x
OworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0p
IDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZT
aXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50
IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJl
YWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBl
eGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwg
YnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6
ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9
IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJy
b3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21S
ZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1p
bihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21S
ZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCAr
PSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBB
ZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisg
ICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQog
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYg
KGMgPT0gJy8nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5
IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAg
ICAgIGdldENoYXIoKTsgIC8vIEVhdCAnLycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9
IGtTdGF0ZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBF
YXQgJyonLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgLy8gTm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAg
ICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChj
ID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0g
YzsKLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVu
dDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAg
ICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRo
IHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIExpbmUgYnJlYWtzIGFyZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAg
IGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICArK21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1S
ZWFkTG9jLmNJbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7
Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hhcigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9G
OwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0g
c3RyW21TaXplKytdOwotCi0gICAgLy8gU3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJy
ZW50IG9uZSBpcyBmdWxseSByZWFkLgotICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUlu
ZGV4KTsKLSAgICAvLyBXZSBuZXZlciByZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VS
VChsZW5ndGggIT0gMCk7Ci0gICAgaWYgKCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0g
J1wwJykpIHx8Ci0gICAgICAgICgobGVuZ3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQot
ICAgICAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQg
SW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRp
b24uCi0gICAgaW50IGluZGV4ID0gbUluZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAg
aW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAgICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAg
bUluZGV4ID0gaW5kZXg7Ci0gICAgbVNpemUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12
b2lkIElucHV0Ojpzd2l0Y2hUb05leHRTdHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBt
Q291bnQpOwotCi0gICAgbVNpemUgPSAwOwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRl
eDsKLSAgICB9IHdoaWxlICghZW9mKCkgJiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQot
Ym9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4
IDwgbUNvdW50KTsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAg
ICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGgg
PT0gMCkgfHwgKChsZW5ndGggPCAwKSAmJiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElu
cHV0OjpzdHJpbmdMZW5ndGgoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3Vu
dCk7Ci0gICAgcmV0dXJuIG1MZW5ndGggPyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVy
biBuUmVhZDsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aAppbmRleCA1YTFiNWQxLi5kYWM3MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAg
LTcsNjYgKzcsNDAgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9y
PgorCiBuYW1lc3BhY2UgcHAKIHsKIAotLy8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdz
IGludG8gaW5wdXQgYnVmZmVyLgotLy8gU3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJl
YWRzIGlucHV0IGZvciBMZXhlci4KIGNsYXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1
dCgpOwogICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNv
bnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJy
b3JOb25lLAotICAgICAgICBrRXJyb3JVbmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBl
cnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJvcjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5k
ZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0Yg
aGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25z
dCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8g
YnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8gYnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAgLy8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEg
d2hpdGVzcGFjZS4gSXQgcmVhZHMgb25seSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNv
IHRoYXQgdGhlIGxleGVyIGhhcyBvcHBvcnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1i
ZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCBy
ZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50
IG1heFNpemUpOwogCi1wcml2YXRlOgotICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRp
b24KICAgICB7Ci0gICAgICAgIGtTdGF0ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21t
ZW50LAotICAgICAgICBrU3RhdGVCbG9ja0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0lu
ZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRl
eC4KIAotICAgIGludCBnZXRDaGFyKCk7Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dp
dGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRoZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8g
VGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAg
ICB2b2lkIHN3aXRjaFRvTmV4dFN0cmluZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Z2l2ZW4gc3RyaW5nIGlzIGVtcHR5LgotICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgp
OwotICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8g
UmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAg
ICBpbnQgc3RyaW5nTGVuZ3RoKGludCBpbmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5k
ZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9j
KCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0
LgogICAgIGludCBtQ291bnQ7CiAgICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAg
Y29uc3QgaW50KiBtTGVuZ3RoOwotCi0gICAgLy8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAg
IGludCBtSW5kZXg7ICAgLy8gSW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVk
LgotICAgIGludCBtU2l6ZTsgICAgLy8gU2l6ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgor
ICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5k
IHN0YXRlLgotICAgIEVycm9yIG1FcnJvcjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRp
b24gbVJlYWRMb2M7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIo
KQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4
ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAKaW5kZXggZmNjY2E5Ni4uYjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmNwcApAQCAtNiwzOSArNiwxNyBAQAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBw
YXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAg
OiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1lKG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFy
YW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1lbnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFj
cm86On5NYWNybygpCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25z
dAogewotICAgIGRlbGV0ZSBtTmFtZTsKLQotICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFtZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5l
bmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0g
ICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBs
YWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNlbWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAg
ICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwotICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3Ro
ZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAg
ICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxh
Y2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCmluZGV4IGUyNDMzMDYuLjYzYjMwNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC03LDQ1ICs3LDMyIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9N
QUNST19IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1
ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2Ug
cHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0g
IHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAgICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAg
ICBrVHlwZUZ1bmMKICAgICB9OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIg
cGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcq
IG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9r
ZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFy
YW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5W
ZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBU
eXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBh
cmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBlcXVh
bHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6
OnN0cmluZyBuYW1lOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJhbWV0ZXJzOwor
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3Bh
Y2UgcHAKLSNlbmRpZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wZjEzZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAg
LTAsMCArMSwyOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgi
CisKK25hbWVzcGFjZSBwcAoreworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVy
KiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
IDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURp
YWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChU
b2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBt
TGV4ZXItPmxleCh0b2tlbik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGZlOWVlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApAQCAtMCww
ICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TUFDUk9fRVhQQU5ERVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VY
UEFOREVSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5j
bHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNz
OworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4p
OworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhw
YW5kZXIpOworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0Owor
ICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAK
KyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjEy
Y2ZhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAt
Niw0NyArNiwyOSBAQAogCiAjaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1l
c3BhY2UgcHAKIHsKIAotUHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IoKSA6IG1Db250ZXh0KE5V
TEwpCitQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKSA6CisgICAgbVRva2VuaXplcihkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZVBh
cnNlcigmbVRva2VuaXplciwgJm1NYWNyb1NldCwgZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRs
ZXIpLAorICAgIG1NYWNyb0V4cGFuZGVyKCZtRGlyZWN0aXZlUGFyc2VyLCAmbU1hY3JvU2V0LCBk
aWFnbm9zdGljcykKIHsKIH0KIAotUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKK2Jvb2wg
UHJlcHJvY2Vzc29yOjppbml0KGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdKQogewotICAgIGRlbGV0ZSBtQ29udGV4dDsKLX0KLQotYm9vbCBQcmVwcm9j
ZXNzb3I6OmluaXQoKQotewotICAgIG1Db250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJu
IG1Db250ZXh0LT5pbml0KCk7Ci19Ci0KLWJvb2wgUHJlcHJvY2Vzc29yOjpwcm9jZXNzKGludCBj
b3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewot
ICAgIEFTU0VSVCgoY291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNv
dW50IDwgMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmVzZXQoKTsKLQotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5n
LCBsZW5ndGgsICZtVG9rZW5zKTsKKyAgICByZXR1cm4gbVRva2VuaXplci5pbml0KGNvdW50LCBz
dHJpbmcsIGxlbmd0aCk7CiB9CiAKLXZvaWQgUHJlcHJvY2Vzc29yOjpyZXNldCgpCit2b2lkIFBy
ZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0b2tlbikKIHsKLSAgICBzdGQ6OmZvcl9lYWNoKG1Ub2tl
bnMuYmVnaW4oKSwgbVRva2Vucy5lbmQoKSwgRGVsZXRlKCkpOwotICAgIG1Ub2tlbnMuY2xlYXIo
KTsKKyAgICBtTWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwogfQogCiB9ICAvLyBuYW1lc3BhY2Ug
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKaW5kZXggODg1YmI3MC4u
ZGRiZTEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKQEAgLTcs
MzQgKzcsNDIgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9I
XwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAKLSNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAi
RGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4
cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1j
bGFzcyBDb250ZXh0OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVy
OwogCiBjbGFzcyBQcmVwcm9jZXNzb3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3Nvcigp
OwotICAgIH5QcmVwcm9jZXNzb3IoKTsKKyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzLCBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKIAotICAgIGJv
b2wgaW5pdCgpOworICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50
cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lm
aWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVj
aWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5V
TEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8v
IElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFy
cmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNv
cnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0
aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29y
cmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0
IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7
CiAKLSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdKTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbVRva2Vucy5iZWdpbigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtVG9rZW5zLmVuZCgpOyB9CisgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
IAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3Ip
OworICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwogCi0gICAg
Ly8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAg
Q29udGV4dCogbUNvbnRleHQ7Ci0gICAgVG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91dHB1dC4K
KyAgICBNYWNyb1NldCBtTWFjcm9TZXQ7CisgICAgVG9rZW5pemVyIG1Ub2tlbml6ZXI7CisgICAg
RGlyZWN0aXZlUGFyc2VyIG1EaXJlY3RpdmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtTWFj
cm9FeHBhbmRlcjsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNjk4MjYxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwz
OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJD
RV9MT0NBVElPTl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FU
SU9OX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAg
ICBTb3VyY2VMb2NhdGlvbigpIDogZmlsZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2Nh
dGlvbihpbnQgZiwgaW50IGwpIDogZmlsZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAoZmlsZSA9PSBvdGhlci5maWxlKSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9
CisKKyAgICBpbnQgZmlsZTsKKyAgICBpbnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJo
cykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBy
aHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKaW5kZXggYTJlNzU5Yy4uODkzZDA3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApAQCAtNiw1MCArNiw0OCBAQAogCiAjaW5jbHVk
ZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGlu
dCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQg
a0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1l
c3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQg
bGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxl
IDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAg
IHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9u
KCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24o
TG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhj
b25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+
IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlv
bkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAg
ICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhl
ci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAot
VG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZh
bHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAg
ICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0
KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsK
KyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tl
bjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFk
aW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9
IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFE
SU5HX1NQQUNFOwogfQogCiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBv
dXQsIGNvbnN0IFRva2VuJiB0b2tlbikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAg
ICB7Ci0gICAgICBjYXNlIElOVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6
Ci0gICAgICBjYXNlIElERU5USUZJRVI6Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkp
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNf
Y2FzdDxjaGFyPih0b2tlbi50eXBlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYg
KHRva2VuLmhhc0xlYWRpbmdTcGFjZSgpKQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0
IDw8IHRva2VuLnZhbHVlOwogICAgIHJldHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAK
IAorfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVh
MTJiLi4wMmZkMGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsODMg
QEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRl
IDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKKyNpbmNsdWRlICJTb3VyY2VMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAot
Y2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tlbgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQg
TG9jYXRpb247Ci0gICAgc3RhdGljIExvY2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBp
bnQgZmlsZSk7Ci0gICAgc3RhdGljIHZvaWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBp
bnQqIGxpbmUsIGludCogZmlsZSk7CisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNU
ID0gMCwgIC8vIEVPRi4KIAotICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAg
VG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwot
ICAgIH5Ub2tlbigpOworICAgICAgICBJREVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24g
bG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbVZhbHVlOyB9CisgICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1Rf
RkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4p
OworICAgICAgICBPUF9JTkMsCisgICAgICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAg
ICAgICAgT1BfUklHSFQsCisgICAgICAgIE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAg
T1BfRVEsCisgICAgICAgIE9QX05FLAorICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwK
KyAgICAgICAgT1BfT1IsCisgICAgICAgIE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9B
U1NJR04sCisgICAgICAgIE9QX01VTF9BU1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisg
ICAgICAgIE9QX01PRF9BU1NJR04sCisgICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBP
UF9SSUdIVF9BU1NJR04sCisgICAgICAgIE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9B
U1NJR04sCisgICAgICAgIE9QX09SX0FTU0lHTgorICAgIH07CisgICAgZW51bSBGbGFncworICAg
IHsKKyAgICAgICAgQVRfU1RBUlRfT0ZfTElORSAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFE
SU5HX1NQQUNFID0gMSA8PCAxCisgICAgfTsKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAg
ICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1WYWx1ZTsKKyAgICBUb2tlbigpIDogdHlw
ZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxl
YWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVy
biAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0
T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7
IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0
SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgaW50IHR5cGU7CisgICAgaW50IGZs
YWdzOworICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVl
OwogfTsKIAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRl
ZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICBy
ZXR1cm4gbGhzLmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxz
KHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt
JiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2My
YjQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzM1IEBACisj
bGluZSAxNiAiLi9Ub2tlbml6ZXIubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMg
YXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisK
KyNsaW5lIDEzICIuL1Rva2VuaXplci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNo
b3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisj
ZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2Rl
ZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZF
UlNJT04gMzUKKyNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhf
QkVUQQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmlj
IG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBo
ZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMg
aGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lm
bmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUg
PGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBk
ZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwK
KworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1
ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9z
IGZvciBpbnQgdHlwZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+
Cit0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4
X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4
X3VpbnQxNl90OwordHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMy
X3QgZmxleF91aW50MzJfdDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90
OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQz
Ml90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91
aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlw
ZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAg
KC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAg
ICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJ
TlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElO
VDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lm
bmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAg
KDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01B
WCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmlu
ZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMy
X01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRp
ZgorCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8q
IFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5l
IFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1
aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERD
X18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENf
XykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QK
KyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisK
Ky8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisv
KiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBh
biB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhl
IHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0
IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisg
Ki8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFy
KSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
Q0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCog
eXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVz
IHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFu
dCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5
Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVu
ZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5
bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUg
eXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmlu
ZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQg
Y29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwK
KyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBi
eSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJ
TiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3Rh
cnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVH
SU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgK
KyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0
IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIg
Zm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRF
X0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwg
YWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5l
IFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICov
CisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYK
KworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0
ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFU
RV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkK
KworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVG
X1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZG
RVJfU1RBVEU7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2Rl
ZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIK
KworICAgICNkZWZpbmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0
IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVh
bS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVj
dHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19h
cmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAor
CQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZG
U0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19h
cmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0
ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5
eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNp
emVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NU
QVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJf
c3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8q
IGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9u
IGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMs
IG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9z
aXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8g
eXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50
IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3
ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBp
dCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5
X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBp
bnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5w
dXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0
byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGlu
ZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNv
bnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICde
JyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICog
bm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8
IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVt
biBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBi
dWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2Zp
bGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVS
X05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVl
biBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3
ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UK
KwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3Jl
LiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0
aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hl
biB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIK
KwkgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh
bm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkg
Ki8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZ
X1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFj
Y2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0
byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0
YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICov
CisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8q
IFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhl
IGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4g
Rm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3Zv
aWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3Zv
aWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUg
KmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9kZWxldGVfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2Zs
dXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9p
ZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIs
RklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVG
RkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9C
VUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3ZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Cit2b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmlu
ZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJh
Y3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXsgXAorICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZl
cih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisj
ZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICl7XAorICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1
ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRf
Qk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1
c2VyIHNlY3QzICovCisKKyNkZWZpbmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdS
QVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0
YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3Rh
dGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50
X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5
eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVy
IHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICog
Y29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9E
T19CRUZPUkVfQUNUSU9OIFwKKwl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9
IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2Nw
OyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVm
aW5lIFlZX05VTV9SVUxFUyAzNworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlz
IHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNl
IGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJf
dCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgIDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAg
ICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5
LAorICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAg
ICA1LCAgICA1LAorICAgICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMw
LCAgIDI1LCAgIDEyLCAgIDIzLAorICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAg
IDI2LCAgIDEwLCAgICA5LCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0
LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAg
IDIyLCAgICAzLCAgICA1LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEw
LCAgIDExLCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAor
ICAgICAgIDEwLCAgIDEwLCAgICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9lY1syNTZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAg
MSwgICAgOSwKKyAgICAgICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwg
ICAxNSwgICAxNiwgICAxNiwKKyAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAx
NywgICAxNywgICAgOSwgICAgOSwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAg
ICAgICAgOSwgICAgMSwgICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMSwKKworICAgICAgIDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAg
ICA5LCAgICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
MjddID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwg
ICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYmFzZVs4OV0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2
LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAg
IDIzLCAgMTU5LCAgMTExLCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2
LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAor
ICAgICAgIDY1LCAgIDczLCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5
LCAgMTU5LAorICAgICAgMTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAg
IDMyLCAgIDU2LCAgIDgzLAorICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5
LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAg
MTU5LCAgMTU5LCAgIDk4LCAgICAwLCAgMTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUy
LCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAg
MTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4
MywgICAgMSwgICA4NCwgICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4Mywg
ICA4NiwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4NywgICA4MywgICA4MywgICAyMCwgICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAy
MSwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4Mywg
ICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAg
ICAgICA0NywgICA1MCwgICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwg
ICA3MiwKKyAgICAgICA4MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQor
ICAgIHsgICAwLAorICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEy
LCAgIDEzLCAgIDE0LCAgIDE1LAorICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAg
IDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1
LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAg
IDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYx
LCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAor
ICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUw
LCAgIDUyLAorICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAg
IDgxLCAgIDgxLCAgIDUwLAorICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUwLAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAg
IDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAgIDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUw
LCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMs
ICAgODMsICAgNTAsICAgNTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisg
ICAgICAgNzQsICAgNzQsICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYs
ICAgNjcsCisgICAgICAgNzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAg
NzgsICAgNzgsICAgMzgsCisgICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEs
ICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAg
MjgsICAgNjQsICAgMzQsICAgMzMsICAgNjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAs
ICAgNzAsICAgNzAsICAgNzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywg
ICAgMywgICAgNCwgICAgNCwKKyAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAg
NCwgICAxNywgICA1OCwgICAxOSwgICAxNiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywg
ICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAy
MCwgICAyMiwgICAyMiwgICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwg
ICAyMSwgICAyMSwgICAyNCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAg
ICAgICA0OSwgICA0OSwgICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwg
ICA0OSwKKyAgICAgICA1MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0
NywgICA0NywgICA0NywKKyAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0Nywg
ICA0NywgICA1MCwgICA1MCwgICA1MCwKKworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAg
IDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAgIDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAg
IDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAg
ICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAg
IDgyLAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5
LCAgIDg2LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAg
IDg4LCAgICA1LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMg
ZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hp
Y2ggZmxleCBtaXNzZWQuCisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3Rf
ZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAor
I2RlZmluZSBZWV9NT1JFX0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQK
Ky8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVj
aWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBW
aXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRI
SVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisj
aW5jbHVkZSAiVG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1
ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6
OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZh
cmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5
eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0g
MDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAg
IHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2Rl
ZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQq
IGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAg
ICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQo
KSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+
PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsr
KTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxl
ID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVU
KGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVh
ZChidWYsIG1heFNpemUpOworCisjZGVmaW5lIElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEK
KworI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhv
bGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0
IHl5Z3V0c190CisgICAgeworCisgICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBm
bGV4LiAqLworICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3Qg
YXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50
IHNjYW5uZXIuICovCisgICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlf
YnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6
ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAg
WVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5
LiAqLworICAgIGNoYXIgeXlfaG9sZF9jaGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGlu
dCB5eWxlbmdfcjsKKyAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAg
IGludCB5eV9zdGFydDsKKyAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAg
IGludCB5eV9zdGFydF9zdGFja19wdHI7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwor
ICAgIGludCAqeXlfc3RhcnRfc3RhY2s7CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50
IHl5bGluZW5vX3I7CisgICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4
dF9yOworICAgIGludCB5eV9tb3JlX2ZsYWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAg
WVlTVFlQRSAqIHl5bHZhbF9yOworCisgICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsg
LyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNl
IFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRw
dXQgaW4gc2VjdGlvbiAxLiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IK
KyAgICAKKyAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBw
bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZ
X0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNz
b3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24t
cmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ry
b3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKwordm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCitGSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBw
c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBw
Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKKyAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAgICAKKyAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFt
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50
IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9u
IDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVy
biBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNp
Zm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXlj
b25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZ
WV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICog
LHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisj
aWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5k
aWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2gg
cmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9T
SVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hl
ZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQg
dG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwn
cywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5
dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1
ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxM
LAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNk
ZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyon
OyBcCisJCWludCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAg
ICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChj
aGFyKSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9G
QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0
ID0gbjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAo
cmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWlu
KSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9G
QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVh
azsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0g
XAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNv
cnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3
YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1
c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRl
bWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSBy
ZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0
YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5D
UgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEg
ZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFM
X0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisv
KiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwor
CisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUg
c28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYg
WVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwK
KyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2Nf
cGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXgg
XAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxs
b2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKwor
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0
ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNF
Ul9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1
dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmlu
ZSBZWV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZ
X1VTRVJfQUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMg
YWxsIHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0
ZXIgaW50IHl5X2FjdDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKKworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5
Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJf
SU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCAp
CisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAo
ICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0
ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
CisJCQkJcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9
CisKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICgg
MSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5
eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9z
aXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4u
CisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5
X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2Mg
PSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5
X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4NCApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJ
CX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5
eV9jdXJyZW50X3N0YXRlICE9IDgzICk7CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zOworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZTsKKworeXlfZmluZF9hY3Rpb246CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0
YXRlXTsKKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFi
ZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5
eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDog
LyogbXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9S
RV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2Ug
MToKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBM
aW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNv
bW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVM
RV9TRVRVUAoreyBCRUdJTihDT01NRU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxF
X1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsK
K2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsr
eXlsaW5lbm87IH0KKwlZWV9CUkVBSworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQg
YXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgaWYgKHl5
ZXh0cmEtPmxpbmVTdGFydCkgeworICAgICAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgICAgICByZXR1cm4geXl0ZXh0WzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHl5ZXh0
cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRp
b24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykpOworICAgIH0KK30KKwlZWV9CUkVBSwor
Y2FzZSA4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitj
YXNlIDk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2Fz
ZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8q
IEFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUg
YSBudW1iZXIuICovCisvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBm
bG9hdHMuICovCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXls
aW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0
ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfSU5DOworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ERUM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xF
RlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hU
OworfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30K
KwlZWV9CUkVBSworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFL
CitjYXNlIDE5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2Fz
ZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIx
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNl
IDI3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitj
YXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVB
SworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZ
X0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQor
CVlZX0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOwor
fQorCVlZX0JSRUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFL
CitjYXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVl
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdc
bicpOworICAgIHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNz
OjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBw
OjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVB
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
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90
b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1i
ZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0
IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9T
VEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9
CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICgg
Yi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1
Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9z
aXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXpl
ICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJv
b20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlf
Y2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQor
CQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9i
dWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigK
KwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwor
CQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisK
KwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAt
CisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFk
ID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7
CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25f
Y2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlf
bl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURK
ICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0
KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBF
T0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxz
ZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3Qp
ICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVz
IHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5
Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsK
KwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxs
b2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUg
LHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0
X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19t
b3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisK
Kwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
MF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0g
Z2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKwor
ICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsK
KwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9z
dGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5
X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFS
IHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYg
KCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkg
eXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3Vy
cmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJh
bnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0
YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGlj
IHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVu
dF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFt
OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwor
CXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlf
Q0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsK
KwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQor
CQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9
ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf
Y3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNw
bHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQor
ICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworewor
CWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlm
ICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8q
IHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJu
LgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMg
d2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVs
c2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNl
IEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19u
X2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tl
biBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9r
ZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAq
IHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhl
IEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJ
CQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQo
eXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9C
X0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSAp
CisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJ
CQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5
c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5
Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19i
dWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0g
KisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZ
X05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5w
dXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rp
b24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAq
LworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxl
ICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisv
KiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVm
ZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJf
U1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4g
V2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJ
ICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9z
dGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nh
bm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJu
OworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9y
bWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9o
b2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+
eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXln
LT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVm
ZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3Qg
YWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0Yg
KHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBp
cyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkg
KiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0
YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55
eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxp
emUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBX
aGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUu
CisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxl
LCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7
CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJ
Yi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJh
Y3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8g
cHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9
IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7
CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30K
KworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQg
d2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
IGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisK
KwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQg
cG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RB
VEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikg
Yi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5u
ZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAq
IFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUg
c2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4K
KyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBi
LCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBl
cnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0
X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMg
dGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisg
ICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZm
ZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5l
bm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsK
KyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0g
MDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVy
cm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4g
T24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0
aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZG
RVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZv
aWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisK
KwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZp
cnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4g
IFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55
eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZb
MF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZG
RVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRv
IHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUu
IFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3Nhcnku
CisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZ
WV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYg
KG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNr
KHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90
b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2gg
b3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Bv
cyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2No
YXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0
cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJ
CXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwor
CXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBv
ZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRo
ZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
Cit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAo
IVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NV
UlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5V
TEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4
aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitz
dGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKwor
CQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRv
bid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdl
IHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBv
biB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXln
LT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJ
CQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJ
CQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVy
X3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywg
MCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJ
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZl
cl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJ
bmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJ
aW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9f
YWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJ
CQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAh
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25s
eSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
Kwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFz
ZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMg
b2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmpl
Y3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFU
RSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3Mu
ICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIo
KSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2Fy
ZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWIt
Pnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25f
Y2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+
eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0
YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5l
ciApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRl
IHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2Fu
IGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5h
dGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lgor
ICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2
YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLwor
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgp
IHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0
ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRl
cyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXpl
X3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5j
bHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsg
MjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYg
KQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5
dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVm
W2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xl
bisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYs
biAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZl
ciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRo
aXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRv
bmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKwor
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRp
ZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwg
bXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVz
cygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisj
ZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNl
dHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4p
OyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0
W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRl
eHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlf
Y19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxl
c3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRo
b2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQg
dGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBH
ZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBj
dXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Cisg
ICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBz
dHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklM
RSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOwor
fQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhl
IGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVy
biB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRo
ZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNj
YW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30K
KworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJl
cgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBz
ZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwor
ICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3Rz
LiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2Zh
dGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5u
ZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRo
ZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNv
bHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2Nv
bHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlj
b2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBk
b2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0g
aW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9p
biAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBp
bl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVi
dWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOwor
fQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhv
ZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0
X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lk
IHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2li
bGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMg
dGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0
aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50Lgor
ICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3Rl
YWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCog
cHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Cisg
ICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAq
cHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1
dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAg
ICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9i
YWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRo
ZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBj
b252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90
ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMg
aXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24s
IHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0
aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdp
bGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICov
CisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5
c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlf
eXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0
cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0g
RUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15
X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAg
IGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFs
cy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xv
YmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5
eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9p
bml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRp
b24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICog
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFs
bG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7Cisg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55
eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisj
aWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsK
KyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOwor
I2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9y
LCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisg
ICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50
IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ry
b3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIp
OworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55
eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxM
OworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAg
ICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUK
KyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8K
KyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBt
YWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAs
IHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisK
Ky8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0
X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOwor
CWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgor
CisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJ
Zm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisK
K3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAg
KHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkv
KiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3Ro
CisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFu
ZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3
aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2Fz
dGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5k
IGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBh
c3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIs
IHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNo
YXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCitu
YW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25v
c3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5u
ZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDAp
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0
dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBs
ZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6
bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFs
dWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZM
aW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4t
PnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQu
bGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKwor
Ym9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVM
TCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRs
ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUp
OworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40MTE0MDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpF
Ul9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNs
dWRlICJJbnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6
ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAg
eworICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5w
dXQ7CisgICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tl
biBsb2NhdGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElu
cHV0OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAv
LyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAg
ICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3Bh
Y2U7CisgICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGlu
aXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToK
KyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGlu
aXRTY2FubmVyKCk7CisgICAgdm9pZCBkZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhh
bmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2Fu
bmVyIGV4dHJhLgorfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTE0N2E0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmwKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNM
IEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAg
UHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xp
YnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBO
RUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQorfQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCit0eXBlZGVmIHN0ZDo6c3Ry
aW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBV
c2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51
bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQg
ICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5n
U3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAg
XAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9j
ID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2Nhbkxv
Yy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgp
KSkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQt
Pmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXgg
Kz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGls
ZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJl
c3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlv
biBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBi
aXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9u
IGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdM
SU5FICAgICBcbnxccnxcclxuCitJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQ
VU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5U
ICAgICAgWzEtOV1bMC05XSoKK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVD
SU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAg
WzAtOV0KK0VYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFM
X0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisg
ICAgLyogTGluZSBjb21tZW50ICovCisiLy8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1l
bnQgKi8KKyAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVk
LiAqLworICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAq
LyAKKyIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVO
VD4iKiIKKzxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIg
eworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7
Cit9CisKKyMgeworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBw
cmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7Cisg
ICAgICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRl
eHRbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4
dCwgeXlsZW5nKSk7CisgICAgfQorfQorCit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwor
fQorCit7REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09O
U1RBTlR9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7
RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwor
fQorCisgICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJ
VH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlk
IGludGVnZXJzIGFuZCBmbG9hdHMuICovCisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntE
SUdJVH0rW19hLXpBLVowLTkuXSopIHsKKyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7
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
biAnXG4nOworfQorCisuIHsKKyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpE
aWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9
CisKKzwqPjw8RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZv
ciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1h
bnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6
OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBz
SW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2Fu
TG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkg
cmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8g
ZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBz
Y2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5l
bm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2Mt
PmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RB
UlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5
dGVybWluYXRlKCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9r
ZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNv
bnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5p
emVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5p
dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQg
PiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1
dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVy
KCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2Vu
LT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7
CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAg
IG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+
c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQu
bGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigp
Cit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250
ZXh0LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgw
LCBtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ry
b3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47
CisKKyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJh
dGVfcGFyc2VyLnNoCmluZGV4IDViMzJmNzEuLmU5YzcwYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3Bh
cnNlci5zaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9i
YXNoCi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogCi0jIEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAt
IHBwX2xleC5jcHAsIHBwX3RhYi5oLCBhbmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91
cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1p
bnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFf
bGV4LmNwcAoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0
X2Rpci8kMgogZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJj
ZSAkaW5wdXRfZmlsZQogfQogCiBydW5fYmlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rp
ci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNl
PSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNj
LmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1
dF9maWxlCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRf
ZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRw
dXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAj
IEdlbmVyYXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2Zs
ZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIu
eSBFeHByZXNzaW9uUGFyc2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubAorKysgL2Rldi9udWxsCkBA
IC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNl
ZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgot
aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQot
SUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFy
c2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0
by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsK
LSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNs
dWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAg
ICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1
bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2Rl
ZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0
cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBl
eHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9u
IG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVl
bnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRp
b24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BB
Q0UgICAgICBbIFx0XQotSEFTSCAgICAgICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJ
RVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58
Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09O
U1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZB
LUZdKwotCi1ESUdJVCAgICAgICAgICAgICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAg
W2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJ
VH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0KLXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtI
QVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2
YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9E
RUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0g
ICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVy
biBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlm
ZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lG
TkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVybiBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyBy
ZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1lbmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0i
ZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsgfQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNI
X0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4
dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVy
biBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxpbmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJ
REVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9
fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5z
dmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NP
TlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05T
VEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3Ry
aW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQ
VU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRbMF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9y
ZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsK
LSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRl
KCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciog
c3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0g
e0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRv
IGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8v
IHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxM
OwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAg
IGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUp
OwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6
cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlf
TlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+
ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9
PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAg
ICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5l
LCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAg
IHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4
ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAg
ICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRF
T0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3Iu
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6
OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5
eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBD
b250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXls
ZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTUxOTNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAg
QEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1t
YXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VO
RVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNo
LiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9Q
QVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFy
c2VyCi0lbmFtZS1wcmVmaXg9InBwIgotJWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29u
dGV4dCogY29udGV4dH0KLQotJXVuaW9uIHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmlu
Zyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlz
dDsKLX0KLQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxs
b2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAot
ICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFs
QmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lk
IHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2Vu
IEhBU0ggSEFTSF9VTkRFRgotJXRva2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBI
QVNIX0VMU0UgSEFTSF9FTElGIEhBU0hfRU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1Ig
SEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJT04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2Vu
IDxzdmFsPiBIQVNIX0RFRklORV9PQkogSEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJ
TlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RBTlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJh
dG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4g
cGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1lbnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xp
c3QKLSUlCi0KLWlucHV0Ci0gICAgOiAvKiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwot
Ci1saW5lCi0gICAgOiB0ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xp
bmUKLSAgICA6ICdcbicKLSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8o
YWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNv
bnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVn
aW4oKSwgJDEtPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJv
bF9saW5lCi0gICAgOiBIQVNIICdcbicKLSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVu
dF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5l
LCBwcDo6TWFjcm86OmtUeXBlT2JqLCAkMSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hf
REVGSU5FX0ZVTkMgJygnIHBhcmFtZXRlcl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicg
ewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86
OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElG
SUVSICdcbicgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0g
ICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRp
b25hbEJsb2NrKGNvbnRleHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNI
X0lGREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNv
bnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9J
Rk5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29u
dGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9F
TElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicg
ewotICAgIH0KLSAgICB8IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFs
QmxvY2soY29udGV4dCk7Ci0gICAgfQotICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNI
X1BSQUdNQSAnXG4nCi0gICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJ
T04gJ1xuJwotICAgIHwgSEFTSF9MSU5FICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAg
IDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1l
dGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElG
SUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVz
aF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAg
ICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlzdCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0g
JDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJ
REVOVElGSUVSLCAkMykpOwotICAgIH0KLQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0
aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAg
ICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0
aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQy
KTsKLSAgICB9Ci07Ci0KLXRva2VuX2xpc3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBu
ZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0g
ICAgfCB0b2tlbl9saXN0IHRva2VuIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1
c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5F
RCBJREVOVElGSUVSIHsKLSAgICB9Ci0gICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7
Ci0gICAgfQotICAgIHwgdG9rZW4KLTsKLQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAg
ICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0g
ICAgfCBJTlRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3Rf
bGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewot
ICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQs
ICQxKTsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRv
a2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9y
Ci0gICAgOiAnWycgeyAkJCA9ICdbJzsgfQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8
ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsg
JCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7
JzsgfQotICAgIHwgJ30nIHsgJCQgPSAnfSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0g
ICAgfCAnKycgeyAkJCA9ICcrJzsgfQotICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcv
JyB7ICQkID0gJy8nOyB9Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQg
PSAnJSc7IH0KLSAgICB8ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8Jzsg
fQotICAgIHwgJyYnIHsgJCQgPSAnJic7IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAg
fCAnPScgeyAkJCA9ICc9JzsgfQotICAgIHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7
ICQkID0gJzonOyB9Ci0gICAgfCAnOycgeyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAn
LCc7IH0KLSAgICB8ICc/JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZ
WUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikK
LXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwg
Ym9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29u
dGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFy
c2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAg
PyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX2xleC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2U3Y2MuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHBfbGV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNjggKzAsMCBAQAotI2xp
bmUgMTYgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xl
eC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGlj
YWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgot
I2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZF
UlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZp
cnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmlj
IGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUg
PHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxl
eCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZp
bmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5
IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lP
Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlm
IHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICov
Ci0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4
X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3Qg
ZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBp
bnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNl
bHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQg
ZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3Vp
bnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAh
IEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhf
TUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5k
ZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQot
I2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAg
ICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhf
TUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZp
bmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJf
TUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYK
LSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUp
Ci0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAg
ICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJf
TUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVY
SU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2Ut
Y2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxz
ZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJl
IGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9V
U0VfQ09OU1QKLQotI2VuZGlmICAvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyog
ISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3Qg
Y29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9u
IGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3Nz
aWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGlu
dGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBu
ZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNp
Z25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1ND
X1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3Bh
cXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5l
IFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlm
Ci0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBm
YXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNk
ZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZp
bmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgot
I2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5
eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMg
bWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQg
dGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAq
IGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9
IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2
YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0
aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5
LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZp
bmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBh
IGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9F
TkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJz
dGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJl
c3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
MAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZf
U0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBi
dWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBp
biB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZ
X0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQ
RURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUK
LXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlm
Ci0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRf
T0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBX
ZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJl
Y2F1c2UgaXQgcmVxdWlyZXMKLSAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlh
YmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAg
ICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRT
SURFIHBwbGV4LiAKLSAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtl
IHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1
JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9h
Y3QgaXMKLSAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlh
YmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xF
U1NfTElORU5PKG4pIFwKLSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5
eWw7XAotICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwg
KVwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQot
ICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMg
YmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRv
IFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAot
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2Fy
ZyAtIFlZX01PUkVfQURKOyBcCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8gXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVm
aW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0K
LSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAgIHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0g
ICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAq
eXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8K
LQotICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJv
b20gZm9yIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5
X2J1Zl9zaXplOwotCi0gICAgLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAg
IGludCB5eV9uX2NoYXJzOwotCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0g
aS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0
IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0Lgot
ICAgICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlz
IGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYg
d2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQot
ICAgICAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcg
aW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNoIG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lz
X2ludGVyYWN0aXZlOwotCi0gICAgLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0
IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBi
ZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAg
Ki8KLSAgICBpbnQgeXlfYXRfYm9sOwotCi0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUg
bGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291
bnQuICovCi0gICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVm
ZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGlu
dCB5eV9maWxsX2J1ZmZlcjsKLQotICAgIGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5l
IFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVu
IGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2Vz
cwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBp
bmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlu
cHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNo
IG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUg
YmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSks
IHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBw
b2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JV
RkZFUl9FT0ZfUEVORElORyAyCi0KLSAgICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVy
IHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZm
ZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICog
UmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9D
VVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3Bd
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZp
b3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sg
aXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1
c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9i
dWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAo
RklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90
b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZl
cl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0
aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3Rh
dGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3Rh
dGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBw
X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9z
dHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMg
KHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZv
aWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJl
YWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZy
ZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZl
ciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVy
YWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAg
ICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAg
IH0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAg
ICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAot
ICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9s
OyBcCi0gICAgfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3Jh
cChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZ
WV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9w
dHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxf
dHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7
Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVu
IG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1
cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55
eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9i
cCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdc
MCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVM
RVMgMjMKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90
IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3Nhcnku
ICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVy
aWZ5OwotICAgIGZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgMjQsICAgMjMsICAgMjEsICAgMjIsICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAg
MTcsICAgMTcsICAgMjEsICAgIDEsICAgMjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAs
Ci0gICAgICAgIDAsICAgMTgsICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAg
IDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTks
ICAgMTgsICAgMTcsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgMTcsICAgIDAsICAgIDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAs
ICAgIDAsICAgIDAsICAgMTYsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0g
ICAgICAgMTIsICAgIDAsICAgIDYsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAs
ICAgIDAsCi0gICAgICAgIDcsICAgMTMsICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAg
IDAsICAgIDAsICAgIDIsCi0KLSAgICAgICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwot
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIs
ICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAg
IDYsICAgIDEsICAgIDUsICAgIDUsICAgIDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgs
ICAgIDUsICAgIDgsICAgIDksICAgIDUsICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAg
MTEsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAg
MTMsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAg
MTUsICAgMTYsICAgMTUsICAgMTUsCi0gICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUs
ICAgIDEsICAgMTcsICAgMTMsICAgMTMsICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwg
ICAxNSwgICAyMiwgICAxNSwgICAxNSwgICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAy
NywgICAxNSwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAg
ICAxNSwgICAxNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAg
IDIsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAg
ICAgIDQsICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAg
IDUsCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcs
ICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAs
ICAgMTgsICAxODQsICAxODUsICAgMTEsICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0g
ICAgICAgIDAsICAxNjQsICAgMzksICAgNzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzks
ICAgNDQsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAx
NjIsICAgNDYsICAxNjAsCi0gICAgICAxNTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcs
ICAgNjUsICAgIDAsICAxNTMsICAxNTQsCi0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAg
NjcsICAxNDUsICAxNTIsICAxNTAsICAxMzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMs
ICAxNDQsICAxNDQsICAxNDAsICAxMzUsICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAx
MzUsICAxMzYsICAxMjUsICAxMzQsICAxMjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAg
ICAxMjQsICAxMjgsICAxMjgsICAxODUsICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAx
ODUsCi0gICAgICAxODUsICAxMTIsICAxODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAs
ICAxMDcsICAgODYsCi0gICAgICAxODUsICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAx
ODUsICAgOTcsICAgMTAsICAxODUsCi0KLSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDEx
MCwgIDExNCwgIDExOCwgIDEyMSwgIDEyNiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfZGVmWzExMV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAg
MTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0
LAotICAgICAgMTA4LCAgIDEwLCAgMTA2LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAg
MTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA4LCAgMTA2LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAg
MTEwLCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X254dFsyMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAg
NiwgICAgNSwgICAgNywgICAgNCwgICAgNywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwg
ICAxMCwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAg
ICAgICAgNiwgICAgNSwgICAgNywgICAxNCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwg
ICAxMCwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAx
OCwgICAxOCwgICAxOSwKLSAgICAgICAyNSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwg
ICAyMCwgICAzNSwgICAxOSwgICAxOSwKLSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAz
NywgICAzNywgICAzNywgICAzNywgICAzNywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwg
ICAyMiwgICAyMiwgICAyNSwgICAyMCwgICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAy
MCwgICAyNywgICA0MywgICAzNywgICAzNywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAg
ICA1MSwgICA1MSwgICA5NSwgICA1NCwgICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAy
OSwKLSAgICAgICA1NSwgICA2MCwgICAzMCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwg
IDEwMCwgIDEwMCwKLQotICAgICAgIDk3LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAg
IDkzLCAgIDk2LCAgIDk1LCAgMTAxLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDEx
LCAgIDExLCAgIDExLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAg
IDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAg
IDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgx
LAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAg
IDcyLCAgIDcxLAotICAgICAgIDcwLCAgIDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0
LCAgIDYzLCAgIDYyLCAgIDYxLAotICAgICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAg
IDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0
LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
Ci0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7
ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwg
ICAxOCwgICAgMSwgICAgMiwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwg
ICAxOCwgICA5OSwgICAgMiwgICAgOSwgICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAg
OSwgICAxMywgICAgOSwgICAxMywgICAxNiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAg
ICAxNiwgICAyMCwgICAxNywgICAyMCwgICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5
NiwKLSAgICAgICAgOSwgICAxMCwgICAxMCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwg
ICAyOSwgICAyNSwKLSAgICAgICAyOSwgICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAz
NywgICAzNSwgICAyOSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwg
ICA1MCwgICA1MCwgICA1MCwgICAxNCwgICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAx
NCwgICA1MSwgICA1MSwgICA1MSwgICAxNCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0
LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAyLCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAg
MTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2
LAotICAgICAgMTA2LCAgMTA3LCAgIDg3LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAg
IDg2LCAgIDg1LAotICAgICAgMTA5LCAgMTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEw
LCAgMTEwLCAgMTEwLCAgIDg0LAotICAgICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAg
IDc1LCAgIDczLCAgIDcyLCAgIDcxLCAgIDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0
LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYwLCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAg
IDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0
LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAot
ICAgICAgIDI4LCAgIDI0LCAgIDEyLCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMs
IHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAw
LCAxLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlz
IHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3Nl
ZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2Rl
ZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01P
UkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9y
IEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8g
MjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21w
aWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIK
LQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxv
Yy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0
X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChi
dWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChi
dWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1l
KGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZp
bmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29udGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0
ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0K
LSAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhU
UkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhl
IGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBG
SUxFICp5eWluX3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAv
Kio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNr
X21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5
eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9o
b2xkX2NoYXI7Ci0gICAgaW50IHl5X25fY2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNo
YXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAg
IGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNr
X3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9z
dGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNo
YXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBp
bnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21v
cmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7
Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0
c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQ
RSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8K
LSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVm
aW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3Qq
IHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2Rl
ZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2Jh
bHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMg
Zm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQg
cHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlf
RVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBz
ZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0
X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0
X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91
dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9s
aW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUg
KiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZ
WVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZ
TFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2
b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlk
ZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVm
IFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3Jh
cCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1z
dGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5
c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0
aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVy
KTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
c3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMg
aW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAg
IHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nh
bm5lcik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSAgICAKLSAgICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0gICAgCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNo
IHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNo
ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2Vk
IHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVM
J3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5
eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0
dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVM
TCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0j
ZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAg
ICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0g
MDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkp
ICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFy
KSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10g
PSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkg
XAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFp
bGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBc
Ci0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3Vs
dCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwK
LSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAg
ICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBp
biBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAg
ICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNs
ZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlm
Ci0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdy
aXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0
ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVy
cyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVm
IHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRp
ZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sg
Z3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRf
U1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lm
bmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFs
X2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxp
emF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJh
dGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICog
ZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlf
REVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlT
VFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNj
YW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZ
WVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQg
dGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBo
YXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVh
Y2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0j
ZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBc
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAg
ICAgICAgICAgICh5eXRleHRbeXlsZW5nIC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FD
VElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUg
d29yay4KLSAqLwotWVlfREVDTAotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3Vy
cmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lz
dGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXls
bG9jID0geXlsbG9jX3BhcmFtOwotCi0gICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAg
ewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAg
ICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0
ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUg
Ki8KLQotICAgICAgICBpZiAoICEgeXlpbiApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0K
LSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0g
ICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7Ci0gICAgICAgIH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29w
cyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICov
Ci0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2Jw
IHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAg
ICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5
X2NwOwotCi0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRv
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAg
ICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAg
ICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAg
ICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0
ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OwotCi15eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdOwotCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYg
KCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlf
YWN0XSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAg
Zm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97
IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAg
ICAgICAgICB9Ci0KLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFj
Y2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsg
LyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyog
bXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RP
X0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
LSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNh
biBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVj
dHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7
Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxF
X1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAzOgotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0
aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JF
Rk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsK
LSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
NjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJ
RjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVG
SU5FRDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9FUlJPUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6
OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0g
bmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5U
OwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZM
T0FUX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NF
VFVQCi17IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoK
LS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXls
aW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JS
RUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwot
Ci0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3Vu
dCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAg
IGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRl
eHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAg
ICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1
dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVu
ZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywg
dGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2Vl
biBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVy
ZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRo
aXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAg
ICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgot
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1
Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4g
dGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2
ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNp
bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAq
IGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAg
ICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAg
ICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsK
LQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSgg
eXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVk
IHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0
IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFu
ZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhv
dyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5n
IChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRv
IGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkp
LgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlf
TlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAg
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYg
KCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyog
Q29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2Nf
YnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7
Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkg
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRf
bmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRl
eHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Ag
c28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtl
IGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBz
Y2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVM
TCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlf
TlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFS
VCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWct
Pnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAg
ICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7
Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAg
ICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5
X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290
byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAg
ImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwot
ICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nh
bm5pbmcgb25lIHRva2VuICovCi19IC8qIGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4
dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEg
Y29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0g
KiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50
IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0
YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZjsKLSAgICByZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVn
aXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYg
KCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAg
ImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQi
ICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIg
PT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhp
cyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRl
eHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAv
KiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAg
ICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0
IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICov
Ci0KLSAgICAvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwot
ICAgIG51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0
X3B0cikgLSAxOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkK
LSAgICAgICAgKihkZXN0KyspID0gKihzb3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcg
KQotICAgICAgICAvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byBy
ZXR1cm4gYW4gRU9GLAotICAgICAgICAgKiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8K
LSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzID0gMDsKLQotICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90
b19yZWFkID0KLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Np
emUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8
PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBn
cm93IGl0LiAqLwotCi0gICAgICAgICAgICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VS
UkVOVF9CVUZGRVI7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAg
ICAgICAgICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAg
ICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAg
ICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGIt
Pnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAg
ICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNs
dWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJl
YWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVy
ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBi
LT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAg
ICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJy
b3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXln
LT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAg
ICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSAp
Ci0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAg
LyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5
eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAg
ICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAg
ICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHBy
ZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7
Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5V
RV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJf
dG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAg
ICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5
IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyAr
IG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQg
KikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5l
ciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYg
KQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
eXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9
IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyog
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9C
IGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9w
cmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0
YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0
YXRlICs9IFlZX0FUX0JPTCgpOwotCi0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAg
ICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50
X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0
YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9u
eHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAg
ICAgICB9Ci0KLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05V
TF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3Rlcgot
ICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJl
bnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJh
bnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVz
ZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9
IHl5Zy0+eXlfY19idWZfcDsKLQotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAg
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxl
ICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50
X3N0YXRlICkKLSAgICAgICAgewotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0g
MTA1ICkKLSAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwot
ICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1
cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQotICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3Vy
cmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVz
Ci0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAg
IHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAg
IGludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQot
ICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAg
ICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVy
IHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0
aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYg
bm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwot
ICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJl
YWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAg
ICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyog
VGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBz
ZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tl
biBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBt
YXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRp
bmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8g
bWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQg
dGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNU
X0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAg
ICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJl
c3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJP
VUdIKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5u
ZXIgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAg
ICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICop
IHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sICkKLSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7
Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsK
LX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBz
d2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUg
QSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRp
dGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlu
cHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsK
LSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9p
bml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAg
IHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEg
ZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5w
dXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZm
ZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJl
IGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAot
ICAgICAqICAgICAgcHBwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVm
ZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFj
ayAoeXlzY2FubmVyKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIg
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAg
ICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICov
Ci0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25f
Y2hhcnM7Ci0gICAgICAgIH0KLQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBX
ZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwot
ICAgICAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMg
ZmxhZwotICAgICAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNv
IGl0J3Mgc2FmZQotICAgICAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAq
LwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGlj
IHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsK
LSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVm
X3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3Rh
dGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRo
ZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZ
WV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9T
VEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZ
X0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAs
eXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55
eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAgICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFj
dGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0
byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlf
Y2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2Fu
bmVyKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICog
QHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0
ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJS
RU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAg
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAg
IGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55
eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5l
ciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICog
VGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBz
YW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgot
ICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIs
IEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9
IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+
eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAg
LyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9w
cm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dl
dF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVz
ZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVO
VF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9i
c19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7
Ci0gICAgCi0gICAgZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJl
ZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4K
LSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZ
WV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBiLT55eV9uX2NoYXJzID0gMDsKLQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQt
b2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0
aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAg
KiBhIGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7Ci0KLSAgICBiLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAg
IGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9O
RVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRl
IG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBz
dGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vz
c2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3Rh
dGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICBpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3Ag
ZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JV
RkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3
aXRjaF90b19idWZmZXIuICovCi0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVt
b3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBU
aGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFj
a190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQg
ZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1
c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIGludCBudW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1
ZmZlcl9zdGFjaykgewotCi0gICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3Ig
MiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5u
ZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lk
IGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAg
ICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZl
cl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7
Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3Rh
Y2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0g
ICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBw
dXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXpl
ICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCAr
IGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
eXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55
eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyog
emVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVy
X3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZm
ZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVy
IGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0g
c2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxv
Y2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2Fu
X2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8
fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAg
ICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8q
IFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZl
cigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRh
a2UgY2FyZSBvZiBFT0IncyAqLwotICAgIGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBi
YXNlOwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUg
PSAwOwotICAgIGItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19p
bnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1
ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAg
ICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19
Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRo
ZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBh
IHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQg
dG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAg
ICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICAKLSAgICByZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNj
YW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRo
ZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJv
bSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVy
IHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVy
IHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2Jq
ZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAq
IHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAg
ICBpbnQgaTsKLSAgICAKLSAgICAvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVk
aW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsg
MjsKLSAgICBidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICgg
ISBidWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xl
bjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRl
c19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQot
ICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCki
ICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ug
c2hvdWxkIHRocm93IGl0Ci0gICAgICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0g
ICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0
YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3Rh
cnRfc3RhY2tfZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsK
LQotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lO
Q1I7Ci0gICAgICAgIG5ld19zaXplID0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVv
ZiggaW50ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAg
ICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlz
Y2FubmVyICk7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IChpbnQgKikgcHByZWFsbG9jKCh2b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3Np
emUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkK
LSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3Rh
cnQtY29uZGl0aW9uIHN0YWNrIiApOwotICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihu
ZXdfc3RhdGUpOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkK
LSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93
IiApOwotCi0gICAgQkVHSU4oeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNr
X3B0cl0pOwotfQotCi0gICAgc3RhdGljIGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHJldHVybiB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZ
X0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5
Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkg
ZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVS
RSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMg
Y29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwK
LSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmdd
ID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0
ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWct
Pnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAg
ICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAo
IDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVj
dCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBz
Y2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZ
X0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5l
bm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxp
bmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JV
RkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsK
LX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdl
dF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQot
LyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJy
ZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LQotY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJu
IHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBp
cyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBU
aGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VY
VFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXll
eHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1i
ZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQg
aWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9C
VUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQg
d2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5l
X251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGlu
ZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12
b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBl
eGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAg
eXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5
c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0
IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICog
aW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9f
YnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJ
TEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRf
c3RyIDsKLX0KLQotaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVi
dWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcg
OwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1Z
WVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJu
IHl5bHZhbDsKLX0KLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQot
Ci1ZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1
cm4geXlsbG9jOwotfQotICAgIAotdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19w
YXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFt
OwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNw
ZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAq
IHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5l
ciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5k
bGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQot
aW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0
cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFs
bG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJf
eXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJl
dHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1
Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAg
ICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwot
Ci0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0v
KiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2lu
aXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIg
YXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpw
b2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2Fs
bCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVz
dCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVl
IGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0g
KiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRS
QV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91
c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09
IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAg
fQotICAgIAotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVv
Ziggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0
cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhw
b3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVh
c2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5
Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95
eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9n
bG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUg
bm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZy
b20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0g
ICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2Nf
YnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9z
dGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55
eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxM
OwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWlu
ID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAq
KSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVy
ZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQot
ICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxl
eF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVy
cy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAg
IC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAg
ICB3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBOVUxMOwotICAgICAgICBwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAg
ICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ID0gTlVMTDsKLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8K
LSAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAg
ICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxz
LiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4
dCB0aW1lCi0gICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2Nj
dXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJv
eSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNj
YW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAw
OwotfQotCi0vKgotICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVm
IHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29u
c3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3Rl
ciBpbnQgaTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0g
czJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5
X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAg
ICA7Ci0KLSAgICByZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXpl
X3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1h
bGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXpl
X3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNo
YXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVu
dGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAg
KiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0
dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFz
c2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFs
IHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNz
aWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikg
cHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2Mo
KSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGlu
dCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1k
ZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0
aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVu
KCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAg
Zm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChz
dHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5w
dXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwot
ICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigp
ID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05V
TEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6
OlRva2VuOjpkZWNvZGVMb2NhdGlvbihwcGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxl
KTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRf
bGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQot
ICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlm
IChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4
ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5p
dF9leHRyYSh0aGlzLCZtTGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJl
c3RhcnQoMCxtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRl
c3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95
KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhN2I2YWEwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MDcyICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
LSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
LQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8q
IEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyog
U2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0v
KiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlv
bnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNk
ZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXls
dmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8q
IFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQot
ICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBh
bmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5
eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0g
ICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZO
REVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwK
LSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9F
UlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9O
ID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwK
LSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjcz
LAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAot
ICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2Rl
ZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2
MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZp
bmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5E
SUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVm
aW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUg
SEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVG
SU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NP
TlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklF
UiAyNzYKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9u
cy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRl
ZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRl
ICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2Rl
ZmluZSBZWURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURF
QlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVy
cm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJP
Ul9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZ
RVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAg
Ki8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5k
aWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xB
UkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6
c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3Iq
IHRsaXN0OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0j
IGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXdu
ICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNf
VFJJVklBTCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZ
WUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJz
dF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFz
dF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xl
c2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVE
IDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRo
ZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5
eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRp
YyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24p
OwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4
dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6
Q29udGV4dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0j
aWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4
Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5
cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vs
c2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZ
UEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRl
ZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNl
Ci10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJ
WkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZ
UEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0j
IGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZ
WVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9N
QVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMK
LSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJp
c29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMg
IGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3Mg
dW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVk
IGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkp
Ci0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVu
dGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBj
b25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNl
Ci0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAot
WVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNl
bmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZs
b3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3Ig
bWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNU
QUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05V
Q19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlm
IGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgK
LSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01T
Q19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZp
bmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAh
IGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAx
Ci0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgot
Ci0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9k
eScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0
eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVN
Ci0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRo
ZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMg
c21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2Ug
YWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVt
YmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jh
cnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAz
MiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQot
IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
X01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVz
cGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1B
TExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8
IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NU
RExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRl
ZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5l
ZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9p
ZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
LSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVF
IGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsg
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgot
IyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9T
RSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVk
IF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZ
TFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklB
TCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkg
YWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5
dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsK
LQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3Rh
Y2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVv
ZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0
byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAq
LwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5
cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAg
ICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9t
IEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJs
YXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBf
X0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1
aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBl
bHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8g
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZ
U0laRV9UIHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291
bnQpOyB5eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAg
ZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9u
IHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNU
QUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRo
ZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFj
ay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUg
bmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0la
RV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5
cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAm
eXlwdHItPlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5
c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAg
IHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0g
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlE
ICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJt
aW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0
IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9L
RU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0v
KiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAg
MTIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVT
ICA2MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNU
QVRFUyAgOTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIg
Y29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZp
bmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5
dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0g
Qmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgIDIyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICA0MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIz
LCAgICAyNCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0Niwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMx
LCAgICA0MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8q
IFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVt
YmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXBy
aHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAg
ICAxMSwgICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4
LCAgICA0MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAg
IDY1LCAgICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAg
ODMsCi0gICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywg
ICAxMDUsICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDEx
OSwgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAg
IDEzNSwgICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0g
ICAgIDE1MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVk
IGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
cmhzW10gPQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwg
ICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1
NSwgICAgMjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAg
ICAyMiwgICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAg
IC0xLAotICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIs
ICAgIC0xLCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAg
MjIsICAgIC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwg
ICAgLTEsICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAot
ICAgICAgMjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0x
LCAgICAxNiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAg
IDIxLCAgICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEs
ICAgIDU0LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAg
LTEsICAgIDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAt
MSwgICAgNTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAg
ICAtMSwgICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4
LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAg
IDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAg
MzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwg
ICAgMzgsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAt
MSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAg
ICAtMSwgICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAt
LSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAg
ICA2MywgICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0g
ICAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcs
ICAgMTEwLCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAx
MjIsICAgMTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwg
ICAxNTcsICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3
OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3
LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAg
MTk1LCAgIDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNl
bmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQot
LyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJP
TC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9L
RU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVb
XSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VO
REVGIiwgIkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VM
U0UiLCAiSEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9S
IiwgIkhBU0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJI
QVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NP
TlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygn
IiwgIicpJyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICIn
fSciLCAiJy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwg
Iid8JyIsICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAot
ICAiJGFjY2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUi
LAotICAicmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9s
aXN0IiwgInRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3Bl
cmF0b3IiLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlM
RVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9r
ZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10g
PQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEs
ICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAy
NjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3Niwg
ICAgMTAsICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAot
ICAgICAxMjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3
LCAgICA5NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAg
IDU5LCAgICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIg
b2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDks
ICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAg
NTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAg
ICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAg
ICA1NCwgICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3
LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwg
ICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICov
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIs
ICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywK
LSAgICAgICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAg
ICAgMCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAy
LCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19Owot
Ci0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGgg
aW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0
aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3Iu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAy
LCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjMsICAgICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwg
ICAgNjEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LAotICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAg
ICAgMjUsICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAg
ICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIz
LCAgICAgMCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdP
VE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10g
PQotewotICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMs
ICAgIDU1LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtT
VEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwot
ICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3
LCAgIC0xOCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAt
NTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0g
ICAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUs
ICAgIDMxLCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3
LCAgIC01NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAg
ICAgIC0xLCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0
IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0
b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0
aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRB
QkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAg
ICA3NCwgICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0g
ICAgICA4NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcy
LCAgICA2NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAg
IDg0LCAgICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAg
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NTQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LAotICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDcxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1z
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwg
ICAgMjEsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAot
ICAgICAgMjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0
OSwgICAgMjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAg
ICAyMSwgICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0g
ICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDExLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAg
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5
LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQot
LyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nl
c3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAg
ICAgNTcsICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAg
ICAyMSwgICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIy
LCAgICAyMiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAg
IDIyLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIs
ICAgIDIyLCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1Miwg
ICAgMjEsCi0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMg
PSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlF
TVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQg
ICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIK
LSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9S
IGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQot
ICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwg
Zm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEs
IHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0K
LSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFD
S1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAg
ICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9
IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13
aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJS
Q09ERSAgIDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4g
ZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRv
IHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBS
SFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAo
KFJocylbS10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVM
VChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJI
U0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29s
dW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQp
Lmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAg
IChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsg
ICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0
X2xpbmUgICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAg
ICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCku
bGFzdF9jb2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1
bW47ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQg
LS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBu
b3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29u
J3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cu
ICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklB
TAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAg
ICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExv
YykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFz
dF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElP
Tl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZ
TEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0j
aWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9j
LCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5
bGxvYykKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0j
aWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnBy
aW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAg
ICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQg
KDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2Nh
dGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJ
TlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9V
VFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VT
RUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0g
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2
b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5
bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25w
LCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlT
VFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5
eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAo
IXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0Ug
KGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0g
ICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVs
c2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAg
ewotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQu
ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmlu
dCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZh
bHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29u
dGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7
Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0g
ICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBj
b250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJ
TlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0g
ICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwot
Ci0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJ
TlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQs
IHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5
eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFBy
aW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChp
bmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9t
LCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQg
KGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQx
NiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0g
IGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVm
aW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAg
ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlS
VUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5
dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0j
ZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUs
IGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAg
aW50IHl5cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQg
eXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5
eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBz
dGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXls
bm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAw
OyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAg
ICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhz
W3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEp
IC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4i
KTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRv
IHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0g
ICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdo
aWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0
IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBj
b2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5l
IFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBW
YWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMg
ZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQot
LyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAq
LwotI2lmbmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYK
LQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAo
ZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9k
IGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJl
c3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFD
S19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lv
biBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5l
IFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQot
IyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NU
UklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRo
ZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQot
I2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIg
Knl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsg
eXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19
Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBf
X0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAg
IGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNU
LCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZ
REVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3Rh
dGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0j
ZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAq
eXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9
IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysg
PSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19
Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlS
RVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5
Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5
ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVj
ZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNv
bW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAg
WVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5v
dCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAg
IHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAq
eXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7
Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7
Ci0KLSAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBj
YXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVv
dGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAg
ICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3Vn
aC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXly
ZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1ww
JzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVz
OiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIp
OwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRp
ZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5l
eHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4g
dGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5n
IG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGlu
ZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3Bp
ZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBl
cnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVy
ZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJ
WkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5
Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNU
X05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAg
ICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJ
WkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlT
SVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBp
bnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJH
U19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NF
X0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMg
aXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAg
ICAgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBl
bmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBz
dGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVj
dGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAg
ICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXpl
b2YgeXlleHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAg
ICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZ
WVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAg
IFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwot
Ci0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1l
LiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGlu
dCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VO
UzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5
dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsK
LQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBp
ZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7
Ci0gICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0g
ICAgICAgICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXpl
MDsKLSAgICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0
bmFtZVt5eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRu
YW1lW3l5eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUp
OwotICAgICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5
eWZtdCwgeXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAg
ICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJs
ZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwot
ICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAg
ICByZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0g
ICAgICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5h
bWUgc3BhY2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlm
IHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3Jv
bmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAg
ICAgaW50IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAg
ICAgICB7Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlp
IDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwg
eXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0K
LSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29j
aWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hh
ciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0
aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1
Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBj
b25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVw
OwotICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0Owot
I2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0g
IFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5n
IjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBi
cmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3Npbmct
cHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJT
RV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwot
aW50IHl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAo
KTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyot
LS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJT
RV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAot
eXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFS
U0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZ
WVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotaW50Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFy
c2UgKGNvbnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgot
ewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhl
IHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5
bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5l
cnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZ
TFRZUEUgeXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1
bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2Vz
IGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4g
YXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRv
a2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNz
YWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsK
LSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXpl
b2YgeXltc2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xz
OgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQg
dG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgot
Ci0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxs
b3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQot
ICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQ
VEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNz
cDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNh
W1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZz
cDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5J
VERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAg
LyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwot
ICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5
eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5
c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJl
dHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJv
dXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGlu
dCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIp
KTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsK
LSAgeXljaGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICov
Ci0KLSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1l
bnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9u
IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVt
ZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2
c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8q
IEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAg
Ki8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5
bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAg
Z290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0
YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToK
LSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2Nh
dGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0
YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRl
OgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9
IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhl
IHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0g
eXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
Ci0gICAgICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMg
aW50bwotICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAg
IHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsK
LQotICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBz
aXplIG9mIHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAg
VGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdv
IGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3Zl
cmZsb3cgaXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIiksCi0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAg
ICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAg
Jnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3Np
emUpOwotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5
dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFD
S19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyog
RXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8
PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3Np
emUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFj
a3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9
IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2Mg
KikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAo
ISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FU
RSAoeXlzcyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxP
Q0FURSAoeXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9
IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0j
ZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUg
LSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXls
cyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUg
aW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3Rh
Y2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQot
ICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0
YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0t
LS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8g
YXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQot
ICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhh
dmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91
dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQot
ICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5
IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Yg
b3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBU
WSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIp
KTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9G
KQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0g
ICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lN
Qk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwot
ICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tF
TiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0
aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5
biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXlu
ID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9
PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5
biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZ
RklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2Ug
ZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBp
ZiAoeXllcnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9v
ay1haGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tl
biwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1
bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIg
PSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAq
Kyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVm
YXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4g
PT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4g
aXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5
cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1
bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lz
ZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBi
ZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3Qg
cmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBt
YWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mg
d2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZh
bCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxM
T0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0Vf
UFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0g
ICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6
OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNl
cnQob3V0LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3Bb
KDEpIC0gKDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAo
MildLnRsaXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAg
ICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUs
IHBwOjpNYWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2
c3BbKDIpIC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoK
LQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0p
LmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFs
KSwgKHl5dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4
dC0+dW5kZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9j
ayhjb250ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRp
dGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAt
ICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7
Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3Jv
RGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0K
LSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAg
ICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyMzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6
VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRv
a2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEp
IC0gKDEpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAg
ICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAt
ICgzKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2
YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+
cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEp
IC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3Bb
KDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0g
ICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAg
ICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCkt
PnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoK
LQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0
X2xpbmUsICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6
VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNw
WygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0g
KDEpXSkuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwp
KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUs
IElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14n
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
Jic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
J34nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICc9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJzonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICc7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAq
LwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+
ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxl
bik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAq
Kyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQn
IHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAg
IHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0
aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5d
OwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlm
ICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9
PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5
eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRl
OwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxh
YiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5n
IGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1
cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAg
IHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UK
LSAgICAgIHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0
ZSwgeXljaGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2Mg
PCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxs
b2MgPSAyICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlh
bGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNU
QUNLX0FMTE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAg
ICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNU
QUNLX0FMTE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNn
X2FsbG9jID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXlt
c2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0g
ICAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5
bXNnX2FsbG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNn
LCB5eXN0YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5
eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXls
bG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAh
PSAwKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXll
cnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQg
dG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBp
dC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAg
IHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4s
ICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAg
ICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tl
biBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJy
bGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVS
Uk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hl
biB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVs
IHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAg
Ki8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5
ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZ
RVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVy
cmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGgg
c3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVy
cnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMu
ICAqLwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwot
ICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJS
T1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0g
PT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0g
ICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxl
IHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFC
T1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVj
dCAoIkVycm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5
eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAq
eXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBp
ZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7
Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRl
bXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1h
aGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAo
eXlsb2MsICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0g
IC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0
aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAg
Z290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3Vs
dCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0
ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVk
bGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAg
eXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5
eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46
Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVz
dHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2Vu
LCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5
bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJP
UlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAg
IHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3Nw
XSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0K
LSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZS
RUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5
eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1
cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0K
LQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6
OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRp
dGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7
Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4g
eXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTFlZjgwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEx
OSArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8K
LQotLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGlu
IEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAy
LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNp
YWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMK
LSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1
dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0
aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNr
ZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2Vs
ZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0
aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92
ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0
b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNl
ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlz
b24uICAqLwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUg
WVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwg
c28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAg
Ki8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VO
REVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAot
ICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNI
X0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYs
Ci0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBI
QVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNI
X0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJ
TkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05T
VEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9r
ZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZp
bmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5E
RUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2Rl
ZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VS
Uk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04g
MjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2Rl
ZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0j
ZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVm
aW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRl
ZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAg
ICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7
Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMu
ICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVz
Y2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQg
MQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVm
aW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0
cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwot
ICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmlu
ZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0j
IGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklB
TCAxCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRp
bHMuaApAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29t
bW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwor
CisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRv
cj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFy
YXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBc
CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91
dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RM
VVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewot
Ci1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJh
dG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewot
ICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6
OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy90b2tlbl90eXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvdG9rZW5fdHlwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8K
LSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUg
InBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBF
X0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcmVwcm9jZXNzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQ
UFN0cnVjdCAqY3BwOwogaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIo
Q1BQU3RydWN0ICpjcHApOwogaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGlu
dCBodHNpemUpOwotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0
U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCmluZGV4IDYwYjY2YmQuLmFkNDNmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBA
IC01OSw2ICs1OSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9n
bHVlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBTdHJp
bmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0
U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBTY2Fu
RnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNy
YyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03Myw3
ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlw
ZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAs
ICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1
dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0YXRp
YyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApAQCAt
MTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZyZWVD
UFAoKSk7CiB9CiAKKy8vIERlZmluZSB0aGlzIHRvIDEgdG8gdXNlIHRoZSBuZXcgbGV4ZXIuCisj
ZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVSIDAKKworaW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3Ry
dWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBfVVNFX05FV19MRVhFUgorICAgIElucHV0U3JjKiBpbiA9
IExleGVySW5wdXRTcmMoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICBpZiAoIWluKSByZXR1
cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworI2Vsc2UKKyAgICBjcHAtPlBhV2hp
Y2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAtPlBhQXJn
YyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAgU2NhbkZy
b21TdHJpbmcoc3RyaW5nWzBdKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiAvKgogICog
c3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmlu
Z3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCmluZGV4IDIzM2QxZGMuLmI2N2MxZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5ICs2OSw5IEBAIHR5cGVkZWYgc3RydWN0IElucHV0U3Jj
IHsKIH0gSW5wdXRTcmM7CiAKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8g
SW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCi1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hh
ciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5nIG1l
bnRpb25lZC4KK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogaW50IGNo
ZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVw
dGx5IAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBt
c2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwordm9pZCBDUFBFcnJvclRvSW5mb0xv
Zyhjb25zdCBjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFk
ZXIncy5JbmZvLmxvZwogdm9pZCBTZXRMaW5lTnVtYmVyKGludCk7CiB2b2lkIFNldFN0cmluZ051
bWJlcihpbnQpOwogdm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
aAppbmRleCBjMTlmNzljLi4yMzIwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaApAQCAtMTA1
LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNj
b3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqQWRkU3ltYm9sKFNvdXJj
ZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKIFN5
bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwogU3ltYm9s
ICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRv
SW5mb0xvZyhjaGFyICopOwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOwog
CiAKICNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmlu
ZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwpAQCAtNTAsNiArNTAs
NyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYgKzI2Niw4IEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJl
YW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhf
U1RSSU5HX0xFTiArIDFdOwogICAgIGludCBsdG9rZW4sIGxlbjsKICAgICBjaGFyIGNoOworICAg
IGludCBiYXNlLCBhY2N1bTsKKyAgICBjaGFyIGNoX3ZhbDsKIAogICAgIGx0b2tlbiA9IGxSZWFk
Qnl0ZShwVG9rKTsKICAgICBpZiAobHRva2VuID49IDApIHsKQEAgLTMxNSwxOCArMzE4LDQxIEBA
IGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAg
ICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVhZEJ5
dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVf
TEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3lt
Ym9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAgICAg
ICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAg
ICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7
CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPCBN
QVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoX3Zh
bCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4ZGln
aXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdhJyAr
IDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJhc2Up
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2UgKyBj
aF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFz
c2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9u
YW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5eWx2
YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAgdm9p
ZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkgewogICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lE
RU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAg
c3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lk
ZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAgICAgc3ByaW50Zihz
dHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7
CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRv
bVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50Zigi
JWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVt
cFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFs
cHApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4p
OworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2Vu
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNn
KHN0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAppbmRleCA4NzY2ZGY5Li5kYmY0YTJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmICFkZWZpbmVkKF9fVE9LRU5T
X0gpCiAjZGVmaW5lIF9fVE9LRU5TX0ggMQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWI1ODEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgiCisKKy8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4
ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgor
Ly8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElm
IHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpv
dmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQg
ZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBm
b3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgp
OworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBl
bmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBo
aXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQu
CisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFw
aC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBs
ZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1i
b2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAg
ICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
VXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rp
b25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRG
dW5jdGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhG
dW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1
bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAi
QSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOwor
ICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9y
KGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2lu
ay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5l
KCkpOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1l
bnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6
IFdlIHNob3VsZCByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBiZWluZyB0
ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAgIC8vIGluIGFsbCBhdmFpbGFibGUgc2FtcGxpbmcgb3Bl
cmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xTTCBFUy4KKyAgICAvLyBUaGlzIGluY2x1ZGVzIG92ZXJs
b2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0dXJlMkQsIHRleHR1cmVDdWJlLCBhbmQgb3RoZXJzLgor
ICAgIGlmIChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgIT0g
InRleHR1cmUyRChzMjE7dmYyOyIgfHwKKyAgICAgICAgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51
bWJlcigpICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGJlZ2luRXJyb3IocGFyYW1ldGVy
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24g
ZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSBzZWNvbmQg
YXJndW1lbnQiCisgICAgICAgICAgPDwgIiBvZiBhIHRleHR1cmUyRCBjYWxsLlxuIjsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhT
ZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50
ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBv
biBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5c
biI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRH
cmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkp
OworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMg
bm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9w
KCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIg
aXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAg
ICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJh
dG9yLlxuIjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MzA3OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJf
VElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFE
RVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBz
aW5rKQorICAgICAgICA6IG1TaW5rKHNpbmspCisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQor
CisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdy
YXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRl
cik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2Vs
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBu
b2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25z
dCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisKKwlUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAg
ICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RS
SUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAg
KzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxl
cihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAg
ICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9k
ZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0
dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCww
ICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJ
Q1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RS
SUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisg
ICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwg
bVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9y
Y2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7
IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8v
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2Zk
My4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIyIEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBk
ZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUg
c3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2Vl
IGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5
OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBj
dXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRh
cHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNE
Rk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAg
IHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1
cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RE
SVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQ
T09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJu
IEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChi
b29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERX
T1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAt
MTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJl
bmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVu
ZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwg
RDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBE
M0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAyODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBj
bGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wg
Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdl
dFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09M
IGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLmNh
MmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcApAQCAtNTY1LDYgKzU2NSw4IEBAIEVHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQoKSBjb25zdAogICAgIHJldHVybiBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKIH0K
IAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTU3NSw2ICs1
NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAg
ICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJ
RGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBpZiAo
bURlcHRoU3RlbmNpbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwCmluZGV4IDY2Y2Q1YzAuLjgyMGY2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcApAQCAtMjIsNiArMjIs
NyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgpAQCAtMzEwLDYgKzMxMSw3IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQo
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBv
cnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlz
cGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVt
aW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0
RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwogCiAgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9
IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKIApAQCAtNDA1LDYgKzQw
NywxMSBAQCB2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICBtQ2FjaGVkQ3Vy
cmVudFByb2dyYW0gPSBOVUxMOwogfQogCit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGly
dHkoKQoreworICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworfQorCiB2b2lkIENvbnRleHQ6
Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAgICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0Vf
Q09OVEVYVF9PTl9SRVNFVF9FWFQpCkBAIC0xNjQ2LDYgKzE2NTMsMTIgQEAgYm9vbCBDb250ZXh0
OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCiAgICAgICBjYXNlIEdM
X1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVz
ZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFt
cyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBi
b29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAq
dHlwZSwgdW5zaWduZWQgaW50ICpudQogICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6
CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKICAgICAgIGNhc2UgR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dS
QU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JN
QVRTX09FUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAg
ICAgICAqbnVtUGFyYW1zID0gMTsKQEAgLTE4MzUsMTMgKzE4NTAsMzEgQEAgYm9vbCBDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAK
KyAgICAvLyBpZiB0aGVyZSBpcyBubyBjb2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6
ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUg
aGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4K
KyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsK
KyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9y
YnVmZmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9i
amVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXROdWxsQ29sb3JidWZmZXIoKTsKKyAgICB9Cisg
ICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0
byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKICAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNp
Z25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRl
clRhcmdldFNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBy
ZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOwogICAgIGlmIChyZW5kZXJUYXJnZXRTZXJp
YWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRh
cmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRl
eHQgbXVzdCBiZSBsb3N0CiAgICAgICAgIH0KICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFy
Z2V0KDAsIHJlbmRlclRhcmdldCk7CkBAIC0xODU2LDI1ICsxODg5LDI3IEBAIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CiAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldERlcHRoU3RlbmNp
bCgpOworICAgICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1
ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0
aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0
aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0g
c3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAgICAgICAgIGlmICghZGVwdGhTdGVu
Y2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1
bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAgICAgICBzdGVuY2lsYnVm
ZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCiAgICAgaWYg
KGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKQEAgLTE4
ODcsOSArMTkyMiwxNCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdu
b3JlVmlld3BvcnQpCiAgICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CiAg
ICAgfQogCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOworICAgIH0KKwogICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFs
aXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQo
KTsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZl
ck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJl
IGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAsMjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0g
JiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdM
aW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpOworICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBm
IC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCiAg
ICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29y
ZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hh
ZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmpl
Y3QtPmdldER4Q29vcmRMb2NhdGlvbigpOworICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1C
aW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOwogICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRz
U2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0
SGVpZ2h0IC8gMi4wZjsKICAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9y
dFdpZHRoIC8gMi4wZiwgaCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3Rh
dGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29y
ZCwgMSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29vcmQs
IDEsIHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhE
ZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
RHhEZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVh
cikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0
LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0g
cHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQg
ZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CiAg
ICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVh
cn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwg
bmVhckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRo
UmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNl
OwogICAgIH0KIApAQCAtMTk5MCwxOCArMjAzMSwxOSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVu
ZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUo
R0xlbnVtIGRyYXdNb2RlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJy
ZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAgIEdMZW51bSBhZGp1c3RlZEZy
b250RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7CiAKLSAgICBHTGludCBm
cm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdM
aW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CiAg
ICAgR0xpbnQgY2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3Jh
bU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7CisgICAgcHJvZ3JhbUJp
bmFyeS0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7CiAKLSAgICBHTGludCBwb2lu
dHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsK
KyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxp
bmVzTG9jYXRpb24oKTsKICAgICBHTGludCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShk
cmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVz
LCAxLCAmYWx3YXlzRnJvbnQpOworICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9p
bnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAogICAgIEQzREFEQVBURVJfSURFTlRJRklF
UjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKICAgICBi
b29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAy
OwpAQCAtMjI4MCwxOCArMjMyMiwyMCBAQCBHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZl
cihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtbwogdm9pZCBD
b250ZXh0OjphcHBseVNoYWRlcnMoKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBn
ZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBpZiAocHJvZ3JhbU9iamVj
dC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtU2VyaWFsKQogICAgIHsKLSAgICAgICAg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0
VmVydGV4U2hhZGVyKCk7Ci0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFk
ZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQaXhlbFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFk
ZXIoKTsKKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dy
YW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7CiAKICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXIocGl4ZWxTaGFkZXIpOwogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOwor
ICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgICAgIG1BcHBs
aWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpOwogICAgIH0KIAot
ICAgIHByb2dyYW1PYmplY3QtPmFwcGx5VW5pZm9ybXMoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5h
cHBseVVuaWZvcm1zKCk7CiB9CiAKIC8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVy
IHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKQEAgLTIzMTEsMzAgKzIzNTUsMzIgQEAg
dm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkKIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJl
cyhTYW1wbGVyVHlwZSB0eXBlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRD
dXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBpbnQgc2FtcGxlckNvdW50ID0g
KHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBz
YW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKICAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRU
ZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVT
ZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwogICAgIGludCBkM2RTYW1wbGVyT2Zm
c2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBM
RVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxl
clJhbmdlKHR5cGUpOworICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRV
c2VkU2FtcGxlclJhbmdlKHR5cGUpOwogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsg
c2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5
cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAor
ICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGlu
Zyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5k
ZXgKICAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zm
c2V0OwogCiAgICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKICAgICAgICAgewotICAgICAg
ICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVy
VGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIFRleHR1cmVUeXBl
IHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUs
IHNhbXBsZXJJbmRleCk7CiAKICAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1w
bGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKIAotICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVT
ZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJh
bWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJl
LT5nZXRUZXh0dXJlKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlh
bFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJl
LT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRU
ZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0Rp
cnR5UGFyYW1ldGVycygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKQEAgLTIzNTEs
NyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBl
KQogICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhh
c0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdl
cygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0yMzYxLDcgKzI0MDcsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMo
U2FtcGxlclR5cGUgdHlwZSkKICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVy
ZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1
cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYXBwbGllZFRleHR1
cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAg
ICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2Vy
aWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMjQ1MSw2ICsyNDk3LDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4
ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzM4
LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBk
ZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVz
OjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNr
ZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CkBAIC0yOTUyLDcgKzMwMDAsNyBAQCB2b2lk
IENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbgogICAgIGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVy
ZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhm
YWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCkt
PnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zMDQyLDcgKzMwOTAsNyBAQCB2b2lkIENv
bnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZAogICAgIGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMo
KTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxz
ZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZh
bGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zNDUyLDYgKzM1MDAsMTEgQEAgYm9vbCBDb250
ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAogICAgIHJldHVybiBt
U3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4
dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MzAsNyBA
QCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8vbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3NCwx
MSBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNwZWNp
ZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgewor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7Cisg
ICAgfQorCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCAiOwogICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBAIC00
MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3Jj
WDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEKIAogICAgICAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKICAgICAgICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
LCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhG
X05PTkUpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwg
PSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRo
U3RlbmNpbCgpOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0
Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQz
RFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICAgICAgewpAQCAtNDExNSw2ICs0MTgwLDggQEAg
R0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tN
QVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9
ICZlbGVtZW50c1swXTsKIAorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0
aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6
OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICAg
ICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7CiAgICAgICAgICAgICBl
bGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7CiAgICAgICAgICAgICBlbGVt
ZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQt
PlVzYWdlSW5kZXggPSBwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGkpOworICAgICAgICAgICAg
ZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7
CiAgICAgICAgICAgICBlbGVtZW50Kys7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDhkY2NmMGYuLmM3
ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQog
ICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RF
Q0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNI
RV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEKICAgICB7CkBAIC0yODIsNiAr
MjgyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogCiAgICAgdm9pZCBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVh
bCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAt
NDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkg
Y29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29s
IHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpA
QCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0
MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJl
czsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBt
U3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwog
ICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4IDcz
MGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1E
ZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQogCiBS
ZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUs
IEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50IEZy
YW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQogCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNv
bG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RTdXJm
YWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVm
ZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2ls
YnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAgQEAg
UmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0dXJu
IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1
ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZm
ZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQor
ICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRo
LW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0g
ZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAg
ICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZm
ZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJi
dWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAg
ICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKwor
ICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9y
YnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSAr
MjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAg
ICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsK
IAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMx
ICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5
cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVy
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9S
TUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAg
ICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBp
bnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09
IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0
KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygp
KSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZl
ci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1h
dChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVy
ZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3Jt
YXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJl
czo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNk
Zm9ybWF0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KIAogICAgICAgICB3aWR0aCA9IGNvbG9yYnVm
ZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0
KCk7CiAgICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQ7CisgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7
CiAgICAgfQogCiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CkBAIC0zMDIs
MTEgKzM0MCw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlm
IChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBpZiAobURlcHRo
YnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsgICAvLyBSZXF1aXJlcyBHTF9PRVNfZGVw
dGhfdGV4dHVyZQotICAgICAgICB9Ci0KICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1
ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhidWZmZXIpCkBAIC0zMTksMTkgKzM1Miw0NCBA
QCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHdpZHRoID09IDApCisgICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+
Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQo
KTsKKyAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2Ug
aWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05T
OworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RG
b3JtYXQoKTsKKworICAgICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1
aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhGb3JtYXQoZDNkZm9ybWF0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQog
ICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwor
ICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAg
ICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNz
aW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRo
ICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxl
cyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5
OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3Rl
bmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1
ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVu
Y2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1
ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVu
ZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYg
KG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhl
aWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6
SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0
ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4
dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAg
RDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisg
ICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBw
YXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5H
TEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRo
VGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
c2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7
CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAg
ICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNh
bXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5n
QXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9
IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdl
dEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBs
ZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQg
KzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYg
bVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZl
IGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUg
c2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0
ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1
ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkK
ICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAg
ICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVu
dCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsK
ICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXgg
YjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1
ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZm
ZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVy
KCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51
bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7
CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2ls
YnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVm
ZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xv
cmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBhNWUzOGJmLi4xODRhMDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiAr
OCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCArMTgsMjQgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAot
I2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBB
TkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTDMKLSNlbmRpZgotCiBuYW1lc3BhY2UgZ2wKIHsKIHVuc2lnbmVkIGludCBQcm9ncmFtOjpt
Q3VycmVudFNlcmlhbCA9IDE7Ci1jb25zdCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgi
OwotCi1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAg
IHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlm
b3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2ln
bmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUo
UHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkK
LXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXpl
OwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEs
IDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkK
LXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQorQXR0
cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gX25hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3Jt
TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwg
dW5zaWduZWQgaW50IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCitBdHRyaWJ1dGVCaW5k
aW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKIH0KIAogUHJvZ3JhbTo6UHJvZ3JhbShSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlciht
YW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAg
bURldmljZSA9IGdldERldmljZSgpOwogICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAg
bVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAg
ICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7
Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0g
ICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7Ci0KKyAgICBtUHJvZ3JhbUJp
bmFyeSA9IE5VTEw7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOwotCiAgICAgbVJlZkNvdW50
ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsxMTMsNyBAQCBpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRT
aGFkZXJzQ291bnQoKSBjb25zdAogICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSAr
IChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7CiB9CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
UHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxl
OwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIo
KQotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpi
aW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQordm9p
ZCBBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwg
Y29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMp
CiAgICAgewpAQCAtMTc1LDI2NDkgKzEyNiwyODAgQEAgdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmli
dXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0KIAot
R0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit2
b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNo
YXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmlu
ZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7CisgICAgbUF0
dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CiB9CiAK
LWludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKKy8vIExp
bmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNo
aW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywg
ZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEg
bGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkKIHsKLSAgICBBU1NFUlQoYXR0
cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7
Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB1
bmxpbmsoZmFsc2UpOworCisgICAgbVByb2dyYW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsK
KyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5LT5saW5rKG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdt
ZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHVubGluayhmYWxzZSk7
CisgICAgfQogfQogCi0vLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxl
ciBpbmRleCB1c2VkLgotR0xpbnQgUHJvZ3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVy
VHlwZSB0eXBlKQoraW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBm
b3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2Nh
dGlvbisrKQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJu
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAg
ICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1BdHRy
aWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xv
Y2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwor
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSBp
bmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEg
RGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBh
bmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQcm9ncmFtOjpnZXRTYW1wbGVy
TWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorLy8g
UmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSBy
ZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBk
ZXN0cm95KQogewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAgc3dp
dGNoICh0eXBlKQorICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVk
CiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQot
ICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIGlm
IChtRnJhZ21lbnRTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJl
VW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAg
ICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRnJhZ21l
bnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CiAKLSAgICAgICAgaWYgKG1TYW1wbGVy
c1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKICAg
ICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVy
LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKICAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQog
Ci0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8
IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2lj
YWxUZXh0dXJlVW5pdDsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBt
UHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi0vLyBS
ZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5
cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0
aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVy
ZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK1Byb2dy
YW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHN3aXRjaCAodHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwot
ICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAg
ICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNh
c2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2Yo
bVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotICAgICAgICBBU1NFUlQobVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7CisgICAgcmV0dXJuIG1Qcm9ncmFt
QmluYXJ5OwogfQogCi1HTGludCBQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJp
bmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVu
bGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5OworfQogCi0g
ICAgLy8gU3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUg
c3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAg
IHNpemVfdCBjbG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0g
c3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewot
ICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsK
LSAgICAgICAgbmFtZS5lcmFzZShvcGVuKTsKLSAgICB9Cit2b2lkIFByb2dyYW06OnJlbGVhc2Uo
KQoreworICAgIG1SZWZDb3VudC0tOwogCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIGlmIChtUmVmQ291bnQg
PT0gMCAmJiBtRGVsZXRlU3RhdHVzKQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBsb2NhdGlvbjsKLSAgICAgICAgfQorICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQ
cm9ncmFtKG1IYW5kbGUpOwogICAgIH0KLQotICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0KiB2KQordm9pZCBQcm9ncmFtOjphZGRSZWYoKQogewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9G
TE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisgICAgbVJlZkNvdW50Kys7Cit9CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAoreworICAg
IHJldHVybiBtUmVmQ291bnQ7Cit9CiAKLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKK3Vuc2ln
bmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFs
OworfQogCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cit1bnNpZ25lZCBp
bnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsr
OworfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9
IDA7Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0g
MDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkK
K2ludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobVByb2dy
YW1CaW5hcnkpCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0SW5mb0xvZyhidWZTaXplLCBs
ZW5ndGgsIGluZm9Mb2cpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZM
T0FUX1ZFQzIpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFsw
XSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFy
Z2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJn
ZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgICAgIGluZm9Mb2dbMF0gPSAn
XDAnOwogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MjsgKytpKQorICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIGVs
c2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMp
CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKyAgICBpbnQgdG90YWwg
PSAwOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAg
ICBpZiAobVZlcnRleFNoYWRlcikKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQg
PSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
KyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRh
cmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAg
ICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHNoYWRl
cnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKyAgICAg
ICAgdG90YWwrKzsKKyAgICB9CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAq
IDM7ICsraSkKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRv
dGFsIDwgbWF4Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwogICAg
ICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKICAgICB9Ci0gICAgZWxzZSAKKworICAgIGlmIChj
b3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKmNvdW50ID0gdG90
YWw7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5p
Zm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikK
K3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hh
ciAqbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmli
dXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgZWxzZQogICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVb
MF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCi0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdM
ZmxvYXQpICogY291bnQpOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXpl
ID0gMTsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorR0xpbnQgUHJvZ3Jh
bTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRl
Q291bnQoKTsKICAgICB9Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWln
aHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQg
KnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVB
dHRyaWJ1dGVNYXhMZW5ndGgoKQogewotICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJn
ZXRXaWR0aCwgc3JjV2lkdGgpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0
SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7
IHgrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAo
VCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVh
ciB1bmZpbGxlZCByaWdodCBzaWRlCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0
OyB5KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgZm9yIChpbnQg
eCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwog
ICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNy
Y0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5p
Zm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
VW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKyAg
ICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0g
J1wwJzsKKyAgICAgICAgfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgaWYgKGxl
bmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIH0KIAot
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwy
LDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1
ZSArPSA0OworICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKICAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0
cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ICE9IEdMX0ZMT0FUX01BVDMpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2
ZVVuaWZvcm1Db3VudCgpOwogICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAg
dGFyZ2V0ICs9IDEyOwotICAgICAgICB2YWx1ZSArPSA5OworICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKKyAg
ICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KK30KIAotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdl
dCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQordm9pZCBQcm9ncmFtOjpmbGFn
Rm9yRGVsZXRpb24oKQoreworICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOworfQogCi0gICAgcmV0
dXJuIHRydWU7Citib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK2Jvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQoKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
XzJEIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQor
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAg
ICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIs
Ci0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihH
TGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAg
ICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRV
bmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFt
cykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQg
YnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAg
aW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5
cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUlu
dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAu
MGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAg
ICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50
ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlm
b3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZl
ciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCBy
ZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJn
ZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAg
ICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9
IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5
cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yo
R0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAg
IHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ly8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17
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
QmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNo
YXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAg
aWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdP
UkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRl
eHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENP
TVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElM
RV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJj
ZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmco
IiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6
OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291
cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwot
ICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5h
cnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVz
dWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxM
LCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQot
ICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdl
ID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAg
ICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxu
JXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBl
cnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRT
aGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNl
KCk7Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsK
LX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1
c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAg
cmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51
bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50
IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0g
ICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFy
eWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQo
dmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxl
Q29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYm
ICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFp
bGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYm
IGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
ID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4Kysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9
IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2
YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
ciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFj
a2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4
XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3Rv
cnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFj
a2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5n
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5h
bWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJl
Z2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3Jz
OyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFd
IHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJz
OwotfQotCi1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhM
U0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2ln
bm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9
IC0xOwotICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0g
ICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0x
OwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUK
LSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9
IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0g
ICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBj
b250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5n
VmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJl
Z2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0g
bUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNo
ZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQg
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0g
aW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhh
dCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91
dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5n
IiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMg
PyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZT
X0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJ
bmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
bVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VDogICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0
ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAg
ICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsK
LSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9u
IDogUE9TSVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIr
KykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6
IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAg
ICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiAr
IHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0g
ICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAg
ICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAh
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewot
ICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1
dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xu
IjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUu
eCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3Np
dGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnog
PSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQot
ICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAg
ICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Q
b2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhf
U00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0Zy
YWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcg
KyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVn
aXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBt
VmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2
YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJb
IiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRl
eEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIK
LSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQ
U19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZh
cnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsg
aisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
biA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVn
aXN0ZXJzKSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAg
ewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhD
T09SRDA7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRG
YWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBW
RkFDRTtcbiI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29s
b3JbMV0gOiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlu
cHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBm
bG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRh
aW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlu
cHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29v
cmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQg
Y2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLngg
KiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3
KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlm
IChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7
XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Q
b2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlu
cHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZh
cnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0
cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIK
LSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExp
bmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNo
aW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywg
ZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEg
bGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsK
LQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGls
ZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhT
aGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNM
KCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBp
ZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4
UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2
c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAq
dmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRl
eFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFy
eSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVy
dGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCks
ICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBp
eGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4
UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5h
cnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
dmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxp
bmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZv
cm1zKG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJl
IHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAg
ICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0
aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4
Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAg
ICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFs
ZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAg
ICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBE
aXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5r
QXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0g
ICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0
QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlv
biAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0
ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7
Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0
aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0
cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9u
cyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9j
YXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxv
Y2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9u
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVG
aXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwot
Ci0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXgg
KyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0
dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRl
ci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1l
KTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5k
ZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRp
b24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAo
bUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRp
bmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAg
ICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBE
M0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRp
b25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxl
RGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7
IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25z
dGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0g
Y29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFu
ZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShj
b25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBi
aW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRl
ZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewot
ICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVS
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNE
WEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUo
TlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUg
dnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNv
bnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9
PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3Rk
OjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291
bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZz
Q29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50
KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXgg
KyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBj
YXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50czsgYXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVj
dE1lbWJlcnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQo
Y29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2Ny
aXB0aW9uQ291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0
cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBz
dHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0g
ICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1O
UzoKLSAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZv
cm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZf
bmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERl
c2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAg
ICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAg
ICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkK
LSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFu
dFRhYmxlUFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZv
cm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5p
Zm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkg
LSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNp
emU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1M
b2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBh
bmQgc2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZM
T0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9B
VF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0g
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
RkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0
byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3Jh
dGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29t
cGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDAp
Ci0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
X25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBf
bmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVj
dG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltE
M0Q5X01BWF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxP
QVQ0IHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChqIDwgd2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0
b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAx
LjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNf
Qk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwot
ICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgo
cHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFY
X0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xf
RkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09M
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwot
ICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsK
LSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1Q
TEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJ
bmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBm
aXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
LSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9h
dCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAg
IGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAg
ICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0s
IGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9h
dCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBB
U1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2Fn
ZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KLS8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMg
YSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAotLy8gbWVz
c2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBw
YXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVk
KGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17Ci0gICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwot
Ci0gICAgc2l6ZV90IGZvdW5kOwotICAgIGRvCi0gICAgewotICAgICAgICBmb3VuZCA9IG1zZy5m
aW5kKGZha2VwYXRoKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxlbihmYWtlcGF0aCkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cyk7Ci0KLSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZv
aWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewot
ICAgIGlmICghZm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNo
YXIgaW5mb1sxMDI0XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFy
ZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZh
cmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0
cmxlbihpbmZvKTsKLQotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xv
ZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBp
bmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9
IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xl
bmd0aCArIGluZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cp
OwotICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBk
ZWxldGVbXSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQot
Ci12b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCi17Ci0gICAgaWYgKG1JbmZvTG9nKQotICAg
IHsKLSAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IE5VTEw7
Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtl
ZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dy
YW06OnVubGluayhib29sIGRlc3Ryb3kpCi17Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0
IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAg
ICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
VmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxl
YXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhl
Y3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0u
bmFtZS5jbGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9
Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2Ft
cGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotCi0gICAg
d2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9y
bXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBt
RHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0g
ICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9
IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVz
TG9jYXRpb24gPSAtMTsKLQotICAgIG1Vbmlmb3JtSW5kZXguY2xlYXIoKTsKLQotICAgIG1QaXhl
bEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigpOwotCi0gICAgZGVsZXRlW10g
bUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCi0gICAgbUxpbmtlZCA9IGZhbHNlOwot
fQotCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKLXsKLSAgICByZXR1cm4gbUxpbmtlZDsKLX0K
LQotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFs
aWRhdGVkOwotfQotCi12b2lkIFByb2dyYW06OnJlbGVhc2UoKQotewotICAgIG1SZWZDb3VudC0t
OwotCi0gICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCi0gICAgewotICAg
ICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwotICAgIH0KLX0K
LQotdm9pZCBQcm9ncmFtOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi11bnNp
Z25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVm
Q291bnQ7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAotewot
ICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJp
YWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi1pbnQgUHJvZ3JhbTo6
Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBz
dHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAg
ICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAg
ICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1
ZlNpemUpCi0gICAgewotICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0g
ICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdM
c2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQot
ICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRl
ci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQot
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhD
b3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRT
aGFkZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9
Ci0KLSAgICBpZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9
Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xz
aXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwot
ICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBh
dHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3Rp
dmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgewotICAg
ICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFt
ZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAg
ICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0
YW5jZQotCi0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKLX0K
LQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQotewotICAgIGludCBj
b3VudCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExl
bmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1
dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9
IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVu
Z3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBt
YXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVt
ICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZv
cm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGlu
dCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6
ZSgpOyB1bmlmb3JtKyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5u
YW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0
aXZlVW5pZm9ybSsrOwotICAgIH0KLQotICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNp
emUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNv
dW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5n
IHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyAr
PSAiWzBdIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3Ry
KCksIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAg
ICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihu
YW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1d
LT5hcnJheVNpemU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKLX0K
LQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpbnQgY291
bnQgPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBjb3VudDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgp
Ci17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRl
eCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7
Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBt
VW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZv
cm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNb
dW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW06OmZs
YWdGb3JEZWxldGlvbigpCi17Ci0gICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVs
ZXRlU3RhdHVzOwotfQotCi12b2lkIFByb2dyYW06OnZhbGlkYXRlKCkKLXsKLSAgICByZXNldElu
Zm9Mb2coKTsKLQotICAgIGlmICghaXNMaW5rZWQoKSkgCi0gICAgewotICAgICAgICBhcHBlbmRU
b0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0g
ICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9v
bCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBw
cm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAg
IC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwg
dGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFu
ZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdl
dENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5p
dFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAg
ICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1w
bGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dO
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZs
aWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIs
IHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5p
dF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3Rp
dmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJz
VlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMg
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVV
bml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlw
ZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dF
cnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1
cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJpLCBJRDNEWENvbnN0YW50
VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFu
dFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigp
KTsKLSAgICBpZiAoaGFuZGxlKQotICAgIHsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoaGFu
ZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICByaS0+cmVnaXN0ZXJJbmRleCA9IGNv
bnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291
bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIHJpLT5yZWdp
c3RlclNldCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQ7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRo
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtOjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBt
RHhDb29yZExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsK
LX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQ
b2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXggNjE4MzBjNi4uMWI0MjM5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5j
bHVkZSA8ZDNkY29tcGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9y
PgogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1
LDQyICsyMywxNyBAQCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRl
cjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcg
YSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitjbGFzcyBBdHRyaWJ1dGVC
aW5kaW5ncwogewotICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZf
bmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAg
Ym9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBHTGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6
OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplOwotCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBib29sIGRpcnR5OwotCi0g
ICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0Owot
ICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0g
ICAgfTsKLQotICAgIFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7Ci19Owor
ICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGlu
Z3MoKTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRz
IG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KLXsK
LSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBp
bnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVM
b2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRy
aWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIHN0ZDo6
c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50
IGluZGV4OworICBwcml2YXRlOgorICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRl
QmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogfTsKIAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQs
NDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIg
KnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAg
ICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIEdMdWludCBn
ZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50
aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBp
bmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4
dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxl
clR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcg
bmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5p
Zm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wg
Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpw
YXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0
aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAg
R0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24o
KSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Owot
Ci0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7
CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlua2VkKCk7CisgICAgdm9pZCBzZXRQ
cm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOworICAgIFByb2dyYW1C
aW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkg
Y29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVp
IG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKQEAgLTEzMSw5MSAr
NzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAg
Ym9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCi0gICAgdm9pZCB2YWxpZGF0ZSgp
OwotICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9vbCBp
c1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0
OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0
ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAg
Ly8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmlu
YXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRU
YWJsZSAqKmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZh
bHNlKTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRd
KTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcygp
OwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
LQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFu
ZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpz
dHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
LSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBs
eVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0g
ICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlV
bmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQz
RFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2
KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUgKmNv
bnN0YW50VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3Qg
Y2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5m
bywgLi4uKTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2lnbmVk
IGludCBpc3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAg
ICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZl
cnRleFNoYWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpzdHJp
bmcgbVZlcnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdz
OwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3Rh
bnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25z
dGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRp
bmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtN
QVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FU
VFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZl
OwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBl
IHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZv
cm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5k
ZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0
aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBt
RHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAg
ICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3Jh
bUJpbmFyeTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotICAg
IGNoYXIgKm1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVkIGlu
dCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0wLDAgKzEsMjU4MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9n
cmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjgu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFk
ZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMK
KyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK2NvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxm
YWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsy
MF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAg
cmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qg
c3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0
eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3Jt
KF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9y
bUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVk
IGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0
cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30K
KworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgw
LCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24o
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQg
aW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0o
X25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1C
aW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKwor
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVM
TDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0g
TlVMTDsKKworICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisK
KyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRl
eCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQor
CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
OyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBs
ZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKworICAgIG1E
eERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAg
ICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0g
LTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7Cisg
ICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxl
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsK
KyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
bUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlm
b3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Cisg
ICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1JbmZv
TG9nOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVs
U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICBy
ZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRB
dHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAg
IHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVb
aW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRl
eChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAg
JiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVy
biBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1v
cmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJu
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAg
ICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJl
dHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3Bv
bmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4
ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXgpCit7CisgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAg
ICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBs
ZXJzUFNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBs
ZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7
CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJl
VW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1
cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8g
UmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0
eXBlIGFuZAorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3Ig
dGhlIHZlcnRleCBzaGFkZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxl
clRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgp
Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoK
KyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9m
KG1TYW1wbGVyc1BTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRl
eHR1cmVUeXBlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7
CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAg
ICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsK
K30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5n
IG5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJp
cCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQK
KyAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNs
b3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1
YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBu
YW1lLmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9
IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0g
MDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlm
IChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAw
OworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7
CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdl
dFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAg
dGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0
YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAg
IHRhcmdldFsyXSA9IHZbMl07CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAg
ICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAg
IHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
aW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNI
ZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQoreworICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lk
dGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWln
aHQpOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7Cisg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3Jj
V2lkdGggKyB4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdo
dCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgewor
ICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwor
ICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3Ig
KGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0
YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKwor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3Nl
TWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCAr
PSAxMjsKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAh
PSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAg
ICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7
CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAg
ICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVv
ZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAq
IDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICog
MywKKyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0K
KyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisK
KyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICog
c2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
CisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJl
ZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAg
ICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlm
b3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJh
bnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0g
VW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBv
bmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVu
aWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBt
ZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMg
bGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWly
ZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAg
ICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQs
Mz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZv
cm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlm
b3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAg
ICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5h
bENvdW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfSU5UOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNp
emVvZihHTGludCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAg
ICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
Ky8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3Qg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bXMoKQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1V
bmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsK
KyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09M
OiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3Jt
bmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIDMsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZF
QzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBH
TF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBp
KTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlV
bmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhM
U0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMK
K0lEM0QxMEJsb2IgKlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpo
bHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRh
YmxlKQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0
cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBm
bGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8
PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdz
IHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6
OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9
IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwi
XG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRo
LmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQz
RDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBO
VUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0
aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9y
TWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50
ZXIoKTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAg
ICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7
CisKKyAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2Fn
ZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1
bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+
KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAg
ICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJp
bmFyeS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJl
dHVybiBiaW5hcnk7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5n
IHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBM
YW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBS
ZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5z
dWNjZXNmdWwKK2ludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29u
dGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1Zl
Y3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAo
VmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFy
eWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNv
dW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAg
ICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2Vz
czsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdb
ciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MgJiYgbSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIg
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7
IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAx
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1b
eF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAm
JiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1b
Y29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRU
b0luZm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3Ry
KCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMg
PSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQor
ICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNr
aW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lz
dGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwg
c3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwg
VmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgp
IHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAg
IGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2
dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAg
IC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5
aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBp
bnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKwor
ICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0g
Y29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlm
IChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJl
Z2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVk
ID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0g
dmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91
dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1
dC0+c2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9m
IHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0
LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygi
RnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBp
bnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJD
T0xPUiIgOiAiVEVYQ09PUkQiKTsKKworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBV
VFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXgg
PSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChh
dHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZl
cnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhD
T09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0lu
ZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2
ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7
CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAg
ICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0g
PyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVn
aXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9p
bnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBn
bF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtc
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBV
VCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAg
ICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRy
aXgKKyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Q
b3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAt
IGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRp
b24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1
dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAg
ICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBi
eSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1b
eF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExT
TCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9
ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2
ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7
XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCAr
PSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBz
dHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQor
ICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBU
RVhDT09SRDA7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9u
dEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDog
VkZBQ0U7XG4iOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29s
b3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlu
cHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxv
YXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlu
cyB0aGUgcmVuZGVyIHRhcmdldCBoZWlnaHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdl
dCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0
LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQg
Y29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2Vu
dGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJo
dykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICog
ZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsK
KyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxp
bmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNl
IDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2
YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAg
IGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcg
KyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAi
ICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJy
YXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgor
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQg
b3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojps
aW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAg
ICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hh
ZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNo
YWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFk
ZXItPmdldEhMU0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKHBpeGVsSExTTCwgdmVydGV4
SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsK
KyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9m
aWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJf
MCI7CisKKyAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkodmVy
dGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAg
SUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkocGl4ZWxITFNMLmNfc3Ry
KCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJp
bmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4
ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5
LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAo
dmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVz
dWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVs
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAg
IHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYg
bVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmli
dXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9GUkFHTUVOVF9TSEFERVIsIG1D
b25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoR0xf
VkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0
aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBn
bF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8g
bm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJh
bmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAg
ICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7
CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9D
b29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAg
bUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNP
ckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsK
KworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRy
aWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0
cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAw
OworCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24K
KyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9
IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsK
KworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxv
Y2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2Nh
dGlvbl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11
bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3Qg
YW4gZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVts
b2NhdGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxl
Um93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2Nh
dGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBp
cyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRv
bid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRl
cmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRy
aWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisg
ICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1
dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0x
KSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAg
ICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRM
b2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChh
dmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVY
X0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3Ry
KCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUlu
ZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRy
aWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisg
ICAgeworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dz
ID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUlu
ZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4Kytd
ID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0
YW50VGFibGUgKmNvbnN0YW50VGFibGUpCit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBj
b25zdGFudFRhYmxlRGVzY3JpcHRpb247CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZj
b25zdGFudFRhYmxlRGVzY3JpcHRpb24pOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3Rh
bnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29u
c3RhbnRzOyBjb25zdGFudEluZGV4KyspCisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0
YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7
CisKKyAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAg
ICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERl
c2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnRI
YW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
QWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNo
YWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1
bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZp
bmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxl
LCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJp
bmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBE
M0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENv
bnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICAgICAg
ICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5
TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworCisgICAgICAgICAgICBpZiAo
cHNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3Rh
bnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBs
ZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFu
Z2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRl
ciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICh2c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5k
ZXgodnNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8
IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQ
VF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7
CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgo
c2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBl
eGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQo
KS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisg
ICAgeworICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNj
cmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMt
PkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRs
ZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4g
MSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2Ny
aXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAi
LiIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBj
YXNlIEQzRFhQQ19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNl
IEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAg
ICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1l
ICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQor
eworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRp
b24sIF9uYW1lKTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50
IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51
bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsK
KyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0g
R0xfRlJBR01FTlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7
CisgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChj
b25zdGFudERlc2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9y
bXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBt
VW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
dW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1
c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVV
bmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25z
dCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93
cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RY
UFRfU0FNUExFUjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgor
ICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBM
RVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwor
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9J
TlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3Rh
bnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNx
dWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ly8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6
c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKQoreworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiAr
IG5hbWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQ
cm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUp
Cit7CisgICAgc3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBh
bnkgc3RydWN0dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3
aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykK
KyAgICB7CisgICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAg
Ly8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycp
CisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuYW1lLnN1YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZs
b2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xW
ZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnBzLmZsb2F0NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0g
MCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8
IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBz
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZv
cm0tPnZzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6
IDA7CisgICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6
Om1heChwc0NvdW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNE
OV9NQVhfQk9PTF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlD
b3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAh
PSBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xW
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9h
dDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9
CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlm
b3JtLT52cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZl
cnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbaV0sIDAsIDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJ
bmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRl
eCA9IHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAg
ICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5m
bG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2Ft
cGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJz
dEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4
ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAg
IEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNU
T1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RP
UjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7Cisg
ICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3Ip
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwor
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7
CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRV
bmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQp
dlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAg
fQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNU
T1I0ICp2ZWN0b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
CisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZs
b2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3Rvciwg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCisvLyBhcHBlbmQg
YSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgorLy8gVGhlIEQzRCBj
b21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcg
b3IgZXJyb3IgCisvLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9m
IHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgordm9pZCBQcm9ncmFtQmluYXJ5Ojph
cHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBzdGQ6
OnN0cmluZyBtc2cobWVzc2FnZSk7CisKKyAgICBzaXplX3QgZm91bmQ7CisgICAgZG8KKyAgICB7
CisgICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOworICAgICAgICBpZiAoZm91bmQg
IT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1zZy5lcmFzZShm
b3VuZCwgc3RybGVuKGZha2VwYXRoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGZv
dW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKworICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIs
IG1zZy5jX3N0cigpKTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2co
Y29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaWYgKCFmb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBpbmZvWzEwMjRdOworCisgICAgdmFfbGlz
dCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOworICAgIHZzbnByaW50Zihp
bmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJnKTsK
KworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworCisgICAgaWYgKCFtSW5m
b0xvZykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFd
OworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAg
Y2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOworICAg
ICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7CisgICAgICAgIHN0cmNweShuZXdMb2cgKyBs
b2dMZW5ndGgsIGluZm8pOworCisgICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworICAgICAgICBt
SW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6cmVzZXRJ
bmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10g
bUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRl
ZDsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAorewor
ICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CisgICAgfQor
fQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAg
IGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAg
eworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4o
bUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKwor
ICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQor
fQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0
ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBp
bnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
YWN0aXZlQXR0cmlidXRlKys7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsK
KyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm5hbWUuY19zdHIoKTsKKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7
CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAg
ICB9CisgICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScg
aW5zdGFuY2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sK
KyAgICBpbnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAg
ICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3Rp
dmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAg
Zm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNr
aXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3Jt
ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1
bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYg
KG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
Y3RpdmVVbmlmb3JtID09IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQo
dW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0
aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAg
eworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7
CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJu
Y3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXpl
IC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6
ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9y
bXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm1Db3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5p
Zm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsr
KQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBh
cmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGgg
PSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBu
dW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgp
ICsgMSk7CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXko
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50
aW5nIGluICJbMF0iLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3Rk
OjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZSgpCit7CisgICAg
cmVzZXRJbmZvTG9nKCk7CisKKyAgICBhcHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0
ZVNhbXBsZXJzKHRydWUpKQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykK
K3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9m
IGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBp
bWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRl
UHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50
cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5n
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRF
WFRVUkVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxl
cnNQU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0
ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAo
JWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQs
IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRl
eHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMg
cmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVy
c1BTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsg
KytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2Fs
VGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRd
ICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJl
IGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRp
b247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZy
b250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9u
OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGM3MTcyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgKQEAgLTAsMCArMSwyMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFBy
b2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJv
Z3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JB
TV9CSU5BUllfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNs
dWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJl
cHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAg
ICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVk
IGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgp
OworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7
ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBV
bmRlY29yYXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAg
IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdp
c3RlckluZm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsK
KyAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9
IDA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNv
bnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24u
UmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FU
NDogIGZsb2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNv
bnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50
KWNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3Rl
ckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisK
KyAgICAgICAgaW50IGZsb2F0NEluZGV4OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAg
ICAgICBpbnQgYm9vbEluZGV4OworCisgICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07
CisKKyAgICBSZWdpc3RlckluZm8gcHM7CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8g
U3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0g
YXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3Jt
TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwg
dW5zaWduZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBp
cyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3
b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sK
KyAgcHVibGljOgorICAgIFByb2dyYW1CaW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOwor
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJl
Y3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0lu
ZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhT
YW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJl
VHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCk7CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlw
ZSB0eXBlKTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1l
KTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAg
ICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRV
bmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFt
cyk7CisgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMaW50ICpwYXJhbXMpOworCisgICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGlu
dCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNp
emVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNv
bnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKwor
ICAgIGJvb2wgbGluayhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3Ms
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpOworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRl
Q291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwor
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoKTsKKyAgICBib29sIHZhbGlk
YXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25z
dDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBz
dGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAg
IC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICBwcml2YXRlOgorICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBp
bGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENv
bnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIp
OworICAgIGJvb2wgbGlua1ZhcnlpbmdzKHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3Ry
aW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNo
YWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoY29uc3QgQXR0
cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1Vu
aWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7
CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUg
JmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24s
IGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBs
eVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOworICAgIHZvaWQg
YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGlu
dCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9n
U2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9n
KGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICAgIElEaXJlY3QzRERldmlj
ZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFi
bGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7CisKKyAg
ICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgorICAgIElEM0RYQ29uc3Rh
bnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25z
dGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVY
X0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwor
CisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAgICAg
ICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVU
eXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICBH
THVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8
VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAg
VW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9j
YXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhDb29yZExv
Y2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBHTGludCBt
RHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsK
KworICAgIGNoYXIgKm1JbmZvTG9nOworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNl
bmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYw
MDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVy
biBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZm
ZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1w
bGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZm
ZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQo
dGFyZ2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQu
c2V0KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biBy
ZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGlu
ZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2Uu
Cit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisK
K3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQor
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBv
biBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNl
CitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5j
aWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7
Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQo
dGV4dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVu
ZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJl
LnNldChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7
Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJl
dHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJp
YWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxl
bWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdl
dCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUp
OworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0
dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVy
ZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBu
b3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KQogewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJl
TWFwLT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6
cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkK
IHsKLSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVN
YXAtPnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBv
biBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNl
CitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRl
clRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdl
dCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQp
OwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhT
dGVuY2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVy
biBOVUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29u
c3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVy
ZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9
Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0g
Ci1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAor
CitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6
OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RG
b3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25l
ZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1
cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAK
Ky8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZl
cjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5j
ZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7
CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0
CiAgICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQo
KQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6Omdl
dERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2ls
KCk7CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVm
ZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAg
cmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0
dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigp
CiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5
ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdl
dCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2ls
YnVmZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBp
ZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigp
OworICAgIH0KKwogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2
MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNl
IGdsCiB7Ci1jbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1
YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERl
cHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJm
YWNlKTsKIH07CiAKLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRl
eHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVu
ZGVyYnVmZmVyVGV4dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgp
OwogCiAgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAg
ICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkg
KzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAK
ICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4
dHVyZSk7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUy
RCk7CiAKLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGlu
Z1BvaW50ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307
CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAo
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFy
Z2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQ
b2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFy
Z2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9TaGFkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuY3BwCmluZGV4IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBA
IHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICppbmZvTG9nKQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9M
b2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1p
bihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGlu
Zm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQp
c3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cs
IGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBp
bmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lk
IFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3Vy
Y2UpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1p
bihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZm
ZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4o
c291cmNlKSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAg
ICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhd
ID0gJ1wwJzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5oCmluZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBl
ZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0g
ICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAg
cHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5k
bGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBB
dHRyaWJ1dGVBcnJheTsKIAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewot
ICAgIGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAg
IHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVp
bnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwCmluZGV4IDI5MTc3ZDIuLjFhZjA4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAtMzEsOCArMzEsMTIg
QEAgdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAx
OwogCiBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSkKIHsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUKQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9
PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVy
biBEM0RGTVRfRFhUMTsKICAgICB9CkBAIC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIAog
c3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQog
eworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNoKGZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZN
VF9MODoKQEAgLTk1LDYgKzEwMywyMSBAQCBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5k
ZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMg
aW5saW5lIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOwor
CisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdl
IHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRl
cmFibGUgfHwgKElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1
c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2Fn
ZTsKK30KKwogSW1hZ2U6OkltYWdlKCkKIHsKICAgICBtV2lkdGggPSAwOyAKQEAgLTE1NSw2ICsx
NzgsOCBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2Ug
PSBOVUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07
CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFT
U0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQogICAgIHsKQEAgLTE3OCw3ICsyMDMsNyBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNl
KCkKICAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291bnQ7CiAgICAgICAgIH0K
IAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJl
cXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0RDNE
Rm9ybWF0KCksCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRl
eHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxM
LCBkM2RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQpAQCAtMjY0LDcgKzI4OSw3IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZh
Y2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
CiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7
CiAKLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKKyAgICBpZiAoc291cmNl
U3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQogICAgIHsKICAgICAgICAg
UkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0yODQsMTAgKzMwOSwxOSBAQCB2b2lkIEltYWdlOjp1cGRh
dGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeQogfQogCiAvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkg
eG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0
L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0
cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCisvLyBpbnRv
IHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlIGF0IGxvY2tlZC5wQml0cyB3aXRoIGxvY2tlZC5Q
aXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICppbnB1dCkKIHsKKyAgICBSRUNUIGxvY2tSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOworCisgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1Jl
Y3QpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9y
bWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwogICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkg
LSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwogCkBAIC0yOTcsMjkgKzMzMSwzNiBAQCB2b2lk
IEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsK
ICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2Fk
QWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOworICAgICAgICAgICAg
bG9hZEx1bWluYW5jZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKICAgICAgICAgICAgIGlmIChz
dXBwb3J0c1NTRTIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkUkdCQVVC
eXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5
dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAg
ICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQkdS
QURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMyOCw3ICszNjksNyBAQCB2b2lkIEltYWdlOjpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
KyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zMzcsNyArMzc4
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0
NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICB9CkBAIC0zNDYsNyArMzg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQK
ICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9S
R0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNTYsMTkgKzM5Nywx
OSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICB7CiAgICAgICAgICAgLy8gZmxv
YXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBz
dG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAg
ICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2Fk
QWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBs
b2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUZs
b2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzc4LDI4ICs0MTksMzAgQEAgdm9pZCBJbWFnZTo6
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQKICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JI
YWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CisKKyAgICB1bmxvY2so
KTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRB
bHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq
c291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAg
ewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKQEAgLTQxOSw3ICs0NjIsNDcgQEAg
dm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGgKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwor
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7CisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9t
bV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CisKKyAgICAgICAgaW50IHg7CisgICAgICAgIC8vIE1ha2Ugb3V0
cHV0IHdyaXRlcyBhbGlnbmVkCisgICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
c291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgNyA8IHdp
ZHRoOyB4ICs9IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9
IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNl
W3hdKSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJpdCwgbWFr
ZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJvCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3Vu
cGFja2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAgICAgICAgICAgLy8gSW50ZXJs
ZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvCisg
ICAgICAgICAgICBfX20xMjhpIGxvID0gX21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRlLCBzb3Vy
Y2VEYXRhKTsKKyAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVy
b1dpZGUsIHNvdXJjZURhdGEpOworCisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRl
cnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCBsbyk7CisgICAgICAgICAgICBfbW1fc3Rv
cmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXIKKyAgICAgICAgZm9y
ICg7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTQyOCw3ICs1MTEs
NyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQ
aXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxm
bG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyMiw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFI
YWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1MzEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDU5LDE3ICs1NDIsMTYgQEAgdm9pZCBJ
bWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJv
b2wgbmF0aXZlKSBjb25zdAogewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhlbCA9IG5h
dGl2ZT8gMTogNDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwogICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOworICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAKICAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAg
IHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00OTcsNyArNTc5LDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0
ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CkBAIC01MDgsNyArNTkwLDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
KnNvdXJjZSA9IE5VTEw7CkBAIC01MTcsNyArNTk5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUyOCwxNyArNjEw
LDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29u
c3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAyOiA0OwogICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVz
UGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgCiAgICAgICAgIGlmICghbmF0aXZlKSAg
IC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICB7CkBAIC01NTcsNyArNjM4LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC01NjYsNyArNjQ3LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2kKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2
KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU3Nyw3ICs2NTgsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01ODYsNyArNjY3LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngr
MF07CkBAIC01OTcsNyArNjc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFs
ZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICB9CiB9
CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdC
VUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02MDYsNyArNjg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJH
QlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOwpA
QCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12
b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC02MzgsNyArNzE5LDcgQEAgdm9pZCBJbWFnZTo6
bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAg
ICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC02NDcsNyArNzI4LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9m
ZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NTgsNyArNzM5LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRS
R0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZz
ZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NzgsNyAr
NzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6
OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRh
U1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCAqc291cmNlID0gTlVMTDsKQEAgLTY4OCw3ICs3NjksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7
CiAgICAgICAgIGludCB4ID0gMDsKIAogICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxp
Z25lZApAQCAtNzIwLDcgKzgwMSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NF
MihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRS
R0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBAIC03MjgsNyArODA5LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXoKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA0KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAg
ewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQog
Ci12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0
NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKQEAgLTc0Nyw3ICs4MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
QTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzU5LDcgKzg0MCw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1
NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc2
OCw3ICs4NDksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0g
c291cmNlW3hdOwpAQCAtNzgwLDcgKzg2MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6
OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTc4OSwxMiArODcwLDEyIEBAIHZvaWQgSW1hZ2U6Omxv
YWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAg
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAx
Nik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBtZW1j
cHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IE5VTEw7CkBAIC04MDMsMTIgKzg4NCwxMiBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
QUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogODsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwogICAg
IH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEJH
UkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKQEAgLTgxNywyNSArODk4LDQzIEBAIHZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQog
CiB2b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KSB7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDAp
OworICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB0
cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdo
dCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBs
b2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21w
dXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0U2l6
ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBp
bnB1dCA9ICgoY2hhciopaW5wdXQpICsgaW5wdXRTaXplICsgaW5wdXRQaXRjaDsKKwogICAgIHN3
aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAgICAgewogICAgICAgICBjYXNlIEQzREZNVF9EWFQxOgot
ICAgICAgICAgIGxvYWREWFQxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERY
VDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDM6
Ci0gICAgICAgICAgbG9hZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2Fk
RFhUM0RhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhU
NToKLSAgICAgICAgICBsb2FkRFhUNURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxv
YWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHVubG9jaygp
OwogfQogCiBzdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQg
aW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewpAQCAtOTQ4LDExICsxMDQ3LDkgQEAg
c3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291
cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QKICAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSAr
IDIsIGRlc3QgKyAyKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZz
ZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQo
d2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQo
aW5wdXRQaXRjaCAlIDggPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUgOCA9PSAwKTsK
QEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogOCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGludHNBY3Jvc3M7IHggKz0gMikKICAgICAgICAgICAgICAgICB7CkBAIC05OTYsMTEgKzEwOTMs
OSBAQCB2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUg
NCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0
aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwogICAgIEFTU0VSVChv
dXRwdXRQaXRjaCAlIDE2ID09IDApOwpAQCAtMTAzNSw3ICsxMTMwLDcgQEAgdm9pZCBJbWFnZTo6
bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsg
Kyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAq
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCiAgICAgICAgICAg
ICAgICAgewpAQCAtMTA0NiwxMSArMTE0MSw5IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQzRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2Fk
RFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0g
MCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQg
PT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNo
ICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBAIC0xMDg1
LDcgKzExNzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNB
Y3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAgICAgICB7CkBAIC0xMjY3LDkgKzEzNjAsOSBAQCB2
b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsCiAgICAgbURpcnR5ID0gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0
b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogbVJlbmRlclRh
cmdldChyZW5kZXJUYXJnZXQpLAotICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0
dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSksCitUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2Uo
RFdPUkQgdXNhZ2UpCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLAorICAgICAgbUQzRFBvb2woZ2V0
RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbCh1c2FnZSkpLAogICAgICAgbVRleHR1cmVTZXJpYWwo
aXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7CiB9CkBAIC0xMjgwLDcgKzEzNzMsNyBAQCBUZXh0dXJl
U3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5k
ZXJUYXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJldHVy
biAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCkpICE9IDA7CiB9CiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0
CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAgRDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQb29sOwogfQogCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6
Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9CisKIHVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAtMTQ1MCwxNSArMTU0OCw3IEBAIHZvaWQgVGV4dHVyZTo6
c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdl
ICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2so
JmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51
bmxvY2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
fQogfQpAQCAtMTQ2Nyw1MiArMTU1NywxNiBAQCB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJ
bWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaQogewog
ICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxM
KTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lk
dGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBD
b21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3Nl
ZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0
UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5w
dXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2Ut
PnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0
YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwog
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0KIAogYm9vbCBUZXh0dXJlOjpz
dWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRo
ICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFn
ZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1h
Z2UtPmdldEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0g
aW1hZ2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAh
PSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWRE
YXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdl
LT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5s
b2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTUyMSwzNyArMTU3NSw5IEBA
IGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnCiAKIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVz
c2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5n
ZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAg
ewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIFJF
Q1QgdXBkYXRlUmVnaW9uOwotICAgICAgICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0g
ICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgdXBk
YXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lv
bi50b3AgPSB5b2Zmc2V0OwotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCAmdXBkYXRlUmVnaW9uKTsK
LQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsK
LSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgs
IGhlaWdodCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEo
eG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdl
dEhlaWdodCgpKSwgd2lkdGgsIGhlaWdodCwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0K
KyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0K
IApAQCAtMTY2NywyMyArMTY5MywyNyBAQCBib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdl
dChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJl
Y3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJl
bmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4
dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFj
ZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRl
clRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewogICAg
IG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1
cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRh
cmdldCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJp
YWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNE
Rk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6
IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscywgaXNSZW5kZXJU
YXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAm
bVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIC8vIGlmIHRo
ZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQg
YXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBz
a2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhl
aWdodCA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3
aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRl
eHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTY5NSw2ICsxNzI1LDggQEAgVGV4dHVy
ZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3Vy
ZmFjZUxldmVsKGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9
IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEwLDIwIEBAIEdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWln
aHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4
dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFy
cmF5WzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29u
c3QKK0dMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25z
dAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVs
IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdM
X05PTkU7CiB9CiAKLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitE
M0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFn
ZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBE
M0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIwNDksMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2Uo
R0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0wK
ICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwog
ICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBE
M0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7
Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxl
KGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsK
KyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFs
c2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRl
eHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdl
dCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZt
dCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1JbW11dGFibGUgPSB0cnVlOwogCiAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKQEAgLTIwNzQs
OCArMjEwNyw4IEBAIGJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0CiAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFM
Rl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENv
bnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRJ
bnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5z
dXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0Zp
bHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjE1Nyw5
ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0
Citib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElz
Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworfQorCitib29sIFRleHR1cmUy
RDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNEZXB0aFRleHR1
cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5
ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNzMsMTEgKzIyMTEsMTEg
QEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQogICAgIEdMc2l6ZWkgd2lkdGggPSBt
SW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJy
YXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lk
dGgsIGhlaWdodCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQz
REZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZv
cm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVz
YWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2Ug
PSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVu
ZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVs
cywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgCiAgICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yMjE3LDkgKzIyNTUsMTAgQEAgdm9pZCBU
ZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgIEdMc2l6ZWkgd2lkdGgg
PSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1J
bWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwogICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlv
bkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFn
ZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUlt
YWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0
VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1
ZSk7CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVs
cywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhl
aWdodCk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAg
LTIyMzIsOCArMjI3MSw4IEBAIHZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KQogICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwg
bVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICB7ICAgCiAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgc291
cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAg
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgIH0KIApAQCAt
MjMxNSwxMiArMjM1NCwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVm
ZmVyKEdMZW51bSB0YXJnZXQpCiAKICAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgp
LCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUNvbG9y
YnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0
dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBy
b3h5OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVCh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CkBAIC0yMzMzLDYgKzIzNzQsMzMgQEAgSURpcmVjdDNE
U3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAKICAg
ICB1cGRhdGVUZXh0dXJlKCk7CiAgICAgCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVw
dGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwor
fQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJl
MkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVy
ZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVRleHR1cmUoKTsKKworICAg
IC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNE
ZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsKIH0KIApAQCAtMjM1MywxOCArMjQyMSwy
MiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VDdWJlTWFw
OjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50
IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFy
Z2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJl
TWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkK
KyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJl
bmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKIHsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxz
LCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBn
ZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQg
YXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBz
a2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDApCiAgICAg
ewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxz
LCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0OCw4IEBAIFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBT
dXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjUyOCwzNiBAQCBHTGVudW0gVGV4
dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VC
RV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdl
dFdpZHRoKCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xz
aXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXpl
aSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVp
Z2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVD
dWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFy
cmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5
cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlb
MF1bMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQp
XVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsK
IH0KIAotRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNE
Rk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1h
dCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykK
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9
CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjY1Nyw4
IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9
PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIo
KSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMg
JiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlm
ICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9
PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIo
KSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIg
IT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjc1
NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2Vk
KCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KCkpOworICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJl
TWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yNjk0LDExICsyNzY5LDExIEBAIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJl
Rm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQz
ZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXpl
LCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9y
YWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yNzQyLDkgKzI4MTcsMTAgQEAgdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICB7CiAgICAgICAgIEdMc2l6
ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMaW50IGxl
dmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0
ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBk
M2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQg
ZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgdHJ1ZSk7CisgICAgICAgIG5ld1Rl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgc2l6ZSk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAg
IHsKQEAgLTI3NTksOCArMjgzNSw4IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1Jl
bmRlclRhcmdldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0
KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBk
ZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0yOTI5LDEwICszMDA1
LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplCiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRy
YWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFy
Z2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRU
ZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3Rv
cmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxz
LCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAgICAg
bUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2
ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwxMiArMzEyNSwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKIAogICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNl
XSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywg
dGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIo
aWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOwogICAg
IH0KIAogICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsKQEAgLTMwODcsNCArMzE2NSw0IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJl
Q3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKICAgICByZXR1cm4gbVRleFN0
b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUu
LjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGly
dHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFs
c2U7fQogCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25z
dCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAK
QEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFzcyBJbWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKKyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
aW5wdXQpOwogCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhh
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQg
bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFs
cGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25z
dDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVt
aW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRM
dW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFI
YWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5
dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQg
bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFs
ZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQg
bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1
NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwor
ICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQg
bG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owog
CiAgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
cmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2ICsxMjcsOSBAQCBjbGFzcyBJbWFnZQogCiAgICAgdm9p
ZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAgICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxv
Y2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOworICAgIHZvaWQgdW5sb2NrKCk7CisKICAgICBH
THNpemVpIG1XaWR0aDsKICAgICBHTHNpemVpIG1IZWlnaHQ7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7
CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBjbGFzcyBJbWFnZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KTsKKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSk7CiAKICAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNv
bnN0OwogICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7CiAgICAgRDNEUE9PTCBnZXRQb29sKCkg
Y29uc3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRl
clRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UpOwogCi0gICAgY29uc3Qg
Ym9vbCBtUmVuZGVyVGFyZ2V0OworICAgIGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKICAgICBjb25z
dCBEM0RQT09MIG1EM0RQb29sOwogCiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2Vy
aWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBAQCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50
T2JqZWN0CiAgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFVzYWdl
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNT
YW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3Nl
ZCgpIGNvbnN0ID0gMDsKIAogICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgp
OwogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdl
dCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291
bnRPYmplY3QKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9
IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQg
YXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5l
dmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6
Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmU7Ci0KICAgICB2b2lkIHNldElt
YWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1h
Z2UpOwogICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsK
ICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwpAQCAtMjU4LDcgKzI1Miw3IEBAIGNsYXNzIFRleHR1
cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgogICAgIGV4
cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJl
KTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVTdG9y
YWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTJEKCk7CiAKQEAg
LTI4NiwxMSArMjgwLDEyIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhl
aWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRX
aWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2
ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29u
c3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
Ym9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChH
TGludCBsZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwpA
QCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAg
dm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJD
b21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwogCkBAIC0zMDksNiArMzAzLDExIEBA
IGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIFJlbmRlcmJ1
ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwogCisgIHByb3RlY3RlZDoKKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOworICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFs
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7CisKICAg
cHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIApAQCAt
MzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAg
ICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7
CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKQEAgLTM0MSw3ICszMzksNyBA
QCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJl
U3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJv
b2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywg
RDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKTsKIAogICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOwogCkBAIC0zNjksMTEgKzM2NywxMSBAQCBjbGFzcyBU
ZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
YXJnZXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwp
IGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFU
IGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3Jt
YXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVz
c2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1h
Z2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKICAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zOTEsNyArMzg5LDYgQEAgY2xh
c3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZvaWQgc3RvcmFnZShHTHNp
emVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwogCiAgICAg
dmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
cygpOwogCkBAIC0zOTksNiArMzk2LDEwIEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGlj
IFRleHR1cmUKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNl
KTsKIAorICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAgLTQwNiw3ICs0MDcsNiBAQCBjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAq
Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzQ3ViZUNvbXBsZXRl
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcwZjQ3NWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0
YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJH
TEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsx
MjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGlu
dCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJp
YnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAg
ICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnko
KTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFu
c2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRl
eChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUlu
ZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJ
bmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3Rv
cmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMg
dGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBA
QCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJv
bVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9y
bWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNl
IGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5
IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgot
dGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9G
TE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpG
aXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNp
b25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdM
aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVE
LCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsK
IAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFs
dWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEp
CiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IGVlOGVjYTku
Ljk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIv
RmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1
LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVTdWJJ
bWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUg
b25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIGNoZWNrVGV4dHVy
ZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgLy8gdmFsaWRh
dGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAg
c3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIGludmFsaWQgPHR5
cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4g
Y29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgorICAgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9B
TFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxG
X0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBH
TF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIHN3aXRjaCAo
Zm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAg
IH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUp
CiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGNvbXByZXNzZWQgIT0g
dGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+
aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9O
RSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxl
dmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQogICAgIHsKLSAgICAgICAgaWYg
KCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwgCisg
ICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgo
MCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJl
LT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBib29sIHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUp
Cit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQgIT0g
dGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYg
KGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVzc2VkKQorICAgIHsK
KyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0
aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQg
IT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hl
Y2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9y
IFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
CiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRy
dWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUs
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUp
KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1h
Z2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTEwMiw3ICsxMjM1
LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJ
c0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVy
ZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUs
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwg
dGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0Rl
cHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwz
MSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBH
TGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7CiAg
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBHTGVu
dW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAq
dGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFs
aWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
IGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1
cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxy
ZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhjdWJlKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFk
eSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IHRleHR1
cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKICAgICAgICAg
ICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiArMTU2OCw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNz
ZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAg
ICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5n
ZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVS
RV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQg
PSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9N
QVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2Fz
dDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0NDAsMjggKzI2
MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgy
ZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgw
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVN
aXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpA
QCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24o
R0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4g
cHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBOVUxMOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0z
MjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJv
Z3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAgICAgICAgICAgICBjYXNlIEdM
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09F
UzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZv
aWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+
Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1z
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFt
cykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRl
eHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFt
cykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlv
biwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4Nzks
MTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dy
YW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlm
b3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYg
KzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyB2YWxp
ZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAg
ICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKKyAg
ICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgICAg
IC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElE
X09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewogICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1NCw3IEBAIHZvaWQgX19zdGRj
YWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJu
YWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9P
RVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBAIC01MDU4LDcg
KzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1
cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
OgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVO
Q0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4Mywy
MyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlw
bGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRv
ZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0
b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
ZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRh
cmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRz
IDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4
NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZ2w6
OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKCFjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0
IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3ODUsMjkgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRp
bmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMg
PT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3Jt
YXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQs
IHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAog
ICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRh
dGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVu
cGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyAr
NTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50
LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJv
Z3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2
KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihs
b2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9y
bTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwg
dikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIsNyArNjE3NCwxMyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24s
IGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9j
YXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2
MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFs
dWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYw
MTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJp
bmFyeS0+dmFsaWRhdGUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02NDYzLDYgKzY4MjEsNzkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNE
T0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQKICAg
ICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJv
Z3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkp
Cit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVu
Z3RoID0gMHglMC44cCwgYmluYXJ5Rm9ybWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCki
LAorICAgICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5h
cnkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICpiaW5hcnlGb3JtYXQgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAg
ICAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50
IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQo
IihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4
JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBi
aW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9C
SU5BUllfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhj
b25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcg
KzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3Rk
Y2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKgogICAgICAgICB7ImdsVmVydGV4QXR0
cmliRGl2aXNvckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5
cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEV9LAogICAgICAgICB7ImdsRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSln
bERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKLSAgICB9OworICAgICAgICB7ImdsR2V0UHJv
Z3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5
T0VTfSwgICAgfTsKIAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVu
c2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagppbmRl
eCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCkBAIC00MDEsNiArNDAxLDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJp
bmFyeS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmlu
YXJ5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UXVlcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXggNjU4OWViMS4uNDQxMDVjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9y
bWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQorewor
ICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9
PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0
ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENv
bXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBj
YXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMz
LDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQp
CiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBv
ZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3Jt
YXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVy
biAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1h
dChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkK
QEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxm
b3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NP
TVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAv
LyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFj
dFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FU
X09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAg
ICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBA
IC03NjcsNiArNzQxLDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xl
bnVtIGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdM
X05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdM
X1JHQkE0OgogICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKQEAgLTk2NSw2ICs5NDAsMTYgQEAg
Ym9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitib29sIElzRGVwdGhGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQp
Cit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKworYm9v
bCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJu
IChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVz
RnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAppbmRleCA4ODIzOGRjLi5lZDE1
MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAorY29uc3Qg
RDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywn
VCcsJ1onKSkpOworY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1B
S0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgZ2wKIHsKIApAQCAtMzYs
OSArMzksOSBAQCBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KQogR0xzaXplaSBDb21wdXRlQ29tcHJl
c3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQpOwogR0xzaXplaSBDb21wdXRl
Q29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQpOwogYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0
dXJlKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0
YXJnZXQpOwogYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJv
b2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiBH
TGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogR0xlbnVtIEV4dHJh
Y3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAKQEAgLTc5LDYgKzgyLDggQEAgR0x1aW50
IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpOwogR0x1aW50IEdldFN0ZW5jaWxT
aXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZP
Uk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJm
YWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7
Citib29sIElzU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6
ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBl
KTsKIAo=
</data>
<flag name="commit-queue"
          id="155436"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147931</attachid>
            <date>2012-06-15 18:16:49 -0700</date>
            <delta_ts>2012-06-15 18:43:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1045152</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi4yZDg1OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbik7Cit9CisKIHZvaWQgVFBhcnNlQ29udGV4dDo6
d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKSB7CkBAIC0yMjksNiArMjM0
LDExIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICB2
YV9lbmQobWFya2VyKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdh
cm5pbmcobG9jLCByZWFzb24sIHRva2VuLCAiJXMiLCAiIik7Cit9CisKIC8vCiAvLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KIC8vCkBA
IC0yNjUsMTMgKzI3NSwxMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeQogICAgIHN3aXRjaCgg
dHlwZSApewogICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAi
Tm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiJXMiLCAiIiApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAo
aW50KSIsICIiLCAiJXMiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMzIzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
KiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0
ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9u
ZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMzQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQq
IG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM3NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCog
bm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYg
c3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIs
IG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDcgKzQwOCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQx
NCw3ICs0MjQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhw
cmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MzAsNyArNDQwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJv
ckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYg
KGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkg
YWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJv
bmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00NDksMjQgKzQ1OSwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09
IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIp
OwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUg
cmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0
dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUzOSw1MSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVj
dG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVs
bCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNv
bnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUt
PmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBu
b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0
eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVu
b3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBj
b25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2Rl
LT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50
IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NTg1LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs2MTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3
ICs2MjUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMx
LDcgKzY0Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2NTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjU4LDcgKzY3MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAg
ICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYg
CiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVy
cyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNjkwLDE0ICs3MDIsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVF
cnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50
ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUg
YSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcyNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUo
dHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTczMSw3ICs3NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzc5LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3
IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFy
cmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBp
bmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgyOCw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUs
IFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVp
bHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MzUsNyAr
ODQ3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCAqbm9kZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogCiAgICAgICAgIGludCBmcmFnRGF0YVZh
bHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIo
KVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhh
dmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICIlcyIsICJnbF9GcmFnRGF0YSBjYW4gb25s
eSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg4Miw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBt
dXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRp
YWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04OTEsNyArOTAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JD
aGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiVzIiwiIik7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUg
PSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiwxMSArOTE4LDExIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlCiBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2Vk
IG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpLCAiJXMiLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzAsMTIgKzk4MiwxMiBAQCBjb25zdCBURnVu
Y3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBj
YWxsLCBib29sICpidQogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGlu
ZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5h
bWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJv
ciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAyNyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1CiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8KQEAgLTEwMzAsNyArMTA0Miw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0g
aW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24t
bWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTI0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwog
ICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIApAQCAtMTMwMSw3ICsxMzEzLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJt
VHkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzQ1
LDcgKzEzNTcsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1
cm4gMDsKQEAgLTEzODAsNyArMTM5Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQyOCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0
cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBh
bGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAg
ICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4K
ICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBu
b3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ2NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE1MDIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCmluZGV4IDNlMDU3NjMuLmRlNzkyNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC03Myw5ICs3MywxMSBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgX19wcmludGZsaWtl
KDUsIDYpOworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNv
biwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywg
Y29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgX19wcmludGZsaWtlKDUsIDYpOworICAgIHZv
aWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbik7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKICAgICBib29sIHBhcnNlVmVjdG9yRmll
bGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29s
QWxsb2MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxv
Yy5jcHAKaW5kZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNl
bmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvb3NpbmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRp
b246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hh
ciB2YWwsIGNvCiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVz
c2FnZS4gIEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZF
UikKLSAgICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMg
JUl1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNz
ZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRl
IGFsbG9jYXRpb24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6
ZSwgZGF0YSgpKTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xB
bGxvYzogRGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAg
ICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERh
bWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAg
ICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgw
ICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRiNDBkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKQEAg
LTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZV
TkNUSU9OCisjZGVmaW5lIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1
ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitjbGFzcyBSZW5h
bWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUmVu
YW1lRnVuY3Rpb24oY29uc3QgVFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5n
JiBuZXdGdW5jdGlvbk5hbWUpCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBm
YWxzZSkKKyAgICAsIG1PbGRGdW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQorICAgICwgbU5l
d0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgewor
ICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBpZiAoKG9wID09
IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgp
ID09IG1PbGRGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5j
dGlvbk5hbWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Y29uc3QgVFN0cmluZyYgbU9sZEZ1bmN0aW9uTmFtZTsKKyAgICBjb25zdCBUU3RyaW5nJiBtTmV3
RnVuY3Rpb25OYW1lOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKaW5k
ZXggOTFjNDdlNy4uMjY1MjhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoSGFuZGxlLmgKQEAgLTI0LDYgKzI0LDEzIEBACiAKIGNsYXNzIExvbmdOYW1l
TWFwOwogY2xhc3MgVENvbXBpbGVyOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaDsKKworLy8KKy8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKKy8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisvLworYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKIAogLy8KIC8vIFRoZSBiYXNlIGNsYXNz
IHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCkBAIC03MCw2ICs3
Nyw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVy
biB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZC4KICAgICBib29sIGRldGVj
dFJlY3Vyc2lvbihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIn
cyBpbnRlcm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCisg
ICAgdm9pZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0K
ICAgICAvLyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMgQXBwZW5kaXgg
QS4KICAgICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwpAQCAt
NzksNiArODgsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
VEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFzc2VzIHRoZSByZXN0cmljdGlvbnMgdGhhdCBh
aW0gdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4KKyAgICBib29sIGVuZm9yY2VUaW1pbmdSZXN0
cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgpOworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVycy4KKyAgICBib29s
IGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3Qp
OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVy
IGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCisgICAgLy8gZmxvdyBvciBpbiBv
cGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgorICAg
IGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBl
bmRlbmN5R3JhcGgmIGdyYXBoKTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRo
IGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRl
bnNpb25CZWhhdmlvcigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKaW5kZXggMTNmMTFiNS4uNTZmNWM3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5n
LmNwcApAQCAtNzIsMTIgKzcyLDE0IEBAIHN0YXRpYyB2b2lkIGdldFZhcmlhYmxlSW5mbyhTaFNo
YWRlckluZm8gdmFyVHlwZSwKICAgICBpbnQgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCA9
IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwogICAgIEFTU0VSVChjaGVja0FjdGl2ZVVuaWZvcm1B
bmRBdHRyaWJNYXhMZW5ndGhzKGhhbmRsZSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCkp
OwogICAgIHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIGFjdGl2ZVVuaWZvcm1B
bmRBdHRyaWJMZW5ndGgpOworICAgIG5hbWVbYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCAt
IDFdID0gMDsKICAgICBpZiAobWFwcGVkTmFtZSkgewogICAgICAgICAvLyBUaGlzIHNpemUgbXVz
dCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKICAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xF
TkdUSCBpbiBTaEdldEluZm8sIGJlbG93LgogICAgICAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0
aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWRO
YW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJu
Y3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1l
TGVuZ3RoKTsKKyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAw
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggZWRiZWE5OS4uNjhmMDI5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCkBA
IC0xNiw5ICsxNiwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKICNp
bmNsdWRlIDxzdGRpby5oPgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKKwogLy8KIC8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBh
IHBsYWNlIHRvIGxpdmUuCiAvLwpAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFRUeXBlOjpidWlsZE1h
bmdsZWROYW1lKFRTdHJpbmcmIG1hbmdsZWROYW1lKQogICAgIG1hbmdsZWROYW1lICs9IHN0YXRp
Y19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0FycmF5KCkp
IHsKICAgICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgYXJy
YXlTaXplKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlT
aXplKTsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwogICAgICAgICBtYW5nbGVkTmFtZSAr
PSBidWY7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQzOTg1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFT
VCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBz
dGF0ZW1lbnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCi0KLSNp
bmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhM
U0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFy
c2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNv
bnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3JhcnlJbmRleCA9
IDA7Ci19Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
LXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0gICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci19Ci0KLWJv
b2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBt
T3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAi
O1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgImlmKCI7Ci0g
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAg
ICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwg
IiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
LSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAg
ICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ImVsc2VcbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUlu
ZGV4OwotCi0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRD
b25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsK
LSAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0K
LSAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotaW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICBy
ZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRhM2JhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNz
IE91dHB1dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJt
U2VsZWN0aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpj
b25zdCBtT3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0j
ZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4MmViYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBh
c3NpZ25lZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJh
bnNsYXRvciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1l
c3BhY2Ugc2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29u
dGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0g
MDsKK30KKwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKK30K
KworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNM
LT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9
IHRydWU7IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlm
aWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJi
b29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAg
ICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRM
ZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIg
PSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYoIXMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMg
PSB5OyBlbHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBs
aWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAi
Ym9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlmKHMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2Ug
cyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAg
ICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhM
U0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIg
PDwgaSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91
dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4i
CisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9
IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRl
eDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJ
bml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7Cisg
ICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7Cisg
ICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc2YTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0
LmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2ly
Y3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJh
dG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xE
U0hPUlRDSVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitj
bGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91
dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAq
bm9kZSk7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSop
OworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24g
Km5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9k
ZSk7CisKKyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRw
dXRITFNMOworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8v
IENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTY2MWQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdy
YXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFwaDo6flRE
ZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsg
KytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAg
ICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdy
YXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFy
Z3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3Jh
cGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RH
cmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rp
b25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYg
KGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkK
KyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxs
KTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRl
bmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkK
K3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAu
ZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wg
PSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAg
IFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29u
ZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVy
bVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKworICAgICAg
ICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAg
ICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNhdmUgYWxs
IHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0
cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVy
bVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1
c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFw
aFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxl
Y3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBo
TG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9v
cCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7
CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsKK30KKwor
VEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVy
bUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNh
bE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rl
cy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQorCitjb25z
dCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25z
dCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3Ao
KS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFu
ZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5YzM1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgiCisKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFw
aE5vZGU7CitjbGFzcyBUR3JhcGhQYXJlbnROb2RlOworY2xhc3MgVEdyYXBoQXJndW1lbnQ7Citj
bGFzcyBUR3JhcGhGdW5jdGlvbkNhbGw7CitjbGFzcyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3Jh
cGhTZWxlY3Rpb247CitjbGFzcyBUR3JhcGhMb29wOworY2xhc3MgVEdyYXBoTG9naWNhbE9wOwor
Y2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ7CisKK3R5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0
eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRl
ZiBzdGQ6OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBUR3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2FsbCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisK
Ky8vCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgZGVwZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitj
bGFzcyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBu
b2RlKSA6IGludGVybU5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpOworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwor
fTsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBt
YXkgaGF2ZSBjaGlsZHJlbi4KKy8vCitjbGFzcyBUR3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRH
cmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5v
ZGUpIDogVEdyYXBoTm9kZShub2RlKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUo
KSB7fQorICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9kZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChu
b2RlICE9IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5pbnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
OworcHJpdmF0ZToKKyAgICBUR3JhcGhOb2RlU2V0IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8v
CisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJn
dW1lbnQgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJn
dW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnRO
dW1iZXIpCisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisg
ICAgICAgICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3VtZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwg
flRHcmFwaEFyZ3VtZW50KCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRl
cm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0
ZSgpOyB9CisgICAgaW50IGdldEFyZ3VtZW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3Vt
ZW50TnVtYmVyOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51
bWJlcjsKK307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdy
YXBoRnVuY3Rpb25DYWxsIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAg
IFRHcmFwaEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwp
CisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAg
dmlydHVhbCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVn
YXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgc3lt
Ym9scy4KKy8vCitjbGFzcyBUR3JhcGhTeW1ib2wgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7
CitwdWJsaWM6CisgICAgVEdyYXBoU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkg
OiBUR3JhcGhQYXJlbnROb2RlKGludGVybVN5bWJvbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhT
eW1ib2woKSB7fQorICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNv
bnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KTsKK307CisKKy8vCisvLyBIYW5kbGUgaWYgc3RhdGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRv
cnMuCisvLworY2xhc3MgVEdyYXBoU2VsZWN0aW9uIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVi
bGljOgorICAgIFRHcmFwaFNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rp
b24pIDogVEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rpb24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBo
U2VsZWN0aW9uKCkge30KKyAgICBjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3
aGlsZSBsb29wcy4KKy8vCitjbGFzcyBUR3JhcGhMb29wIDogcHVibGljIFRHcmFwaE5vZGUgewor
cHVibGljOgorICAgIFRHcmFwaExvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBo
Tm9kZShpbnRlcm1Mb29wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNv
bnN0IFRJbnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNMb29wTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUg
bG9naWNhbCBhbmQsIG9yLgorLy8KK2NsYXNzIFRHcmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3Jh
cGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50
ZXJtTG9naWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1
YWwgflRHcmFwaExvZ2ljYWxPcCgpIHt9CisgICAgY29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50
ZXJtTG9naWNhbE9wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2Rl
KCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRPcFN0cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7
Cit9OworCisvLworLy8gQSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNh
bGxzLCBjb25kaXRpb25zIGV0Yy4KKy8vCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVy
ZmFjZSB0byB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8v
IERlcGVuZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9m
IHRoZSBwcm92aWRlZCAiY3JlYXRlLi4uIiBtZXRob2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5v
Ym9keSBlbHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkgb2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBO
b2RlcyBtYXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVk
IG5vZGVzIHdpbGwgZXhpc3Qgd2hpbGUgdGhlCisvLyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNl
IGV4aXN0cy4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lH
cmFwaCgpOworICAgIFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKwor
ICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9s
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7
CisgICAgfQorCisgICAgVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1w
bGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xz
LmVuZCgpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1
bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzLmVuZCgpOworICAgIH0KKworICAgIFRHcmFwaEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7
CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRl
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9u
KiBjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAg
ICBUR3JhcGhMb29wKiBjcmVhdGVMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBU
R3JhcGhMb2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dp
Y2FsT3ApOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBU
U3ltYm9sSWRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBU
U3ltYm9sSWRQYWlyOworCisgICAgVEdyYXBoTm9kZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdy
YXBoU3ltYm9sVmVjdG9yIG1TYW1wbGVyU3ltYm9sczsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9y
IG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHM7CisgICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1h
cDsKK307CisKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNl
cnMgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNp
ZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9k
LgorLy8KKy8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBu
b2RlcyB5b3Ugd2FudCB2aXNpdGVkLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgw
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9s
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogc2Vs
ZWN0aW9uKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVj
dGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0TG9vcChUR3JhcGhMb29wKiBsb29wKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dp
Y2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApIHt9OworCisgICAgaW50IGdldERlcHRo
KCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9CisgICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsg
KyttRGVwdGg7IH0KKyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisg
ICAgdm9pZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNpdGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1h
cmtWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsgbVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9Cisg
ICAgYm9vbCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0
ZWQuZmluZChub2RlKSAhPSBtVmlzaXRlZC5lbmQoKTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURl
cHRoOworICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0ZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNDk4NzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwCkBAIC0wLDAgKzEsMjM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vob2xkZXIKKyAg
ICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xl
ZnRTdWJ0cmVlOworCitURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcjo6VFN1YnRyZWVQbGFjZWhvbGRlcgorICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
OjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlOworCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChUSW50ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lH
cmFwaCogZ3JhcGgpCit7CisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgYnVpbGRlcihncmFw
aCk7CisgICAgYnVpbGRlci5idWlsZChub2RlKTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICBzd2l0Y2ggKGludGVybUFnZ3JlZ2F0ZS0+Z2V0T3AoKSkg
eworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihpbnRl
cm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6IHZpc2l0
RnVuY3Rpb25DYWxsKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiB2
aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlz
aXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQor
eworICAgIC8vIEN1cnJlbnRseSwgd2UgZG8gbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0
aW9ucy4KKyAgICBpZiAoaW50ZXJtQWdncmVnYXRlLT5nZXROYW1lKCkgIT0gIm1haW4oIikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdh
dGUpOworfQorCisvLyBUYWtlcyBhbiBleHByZXNzaW9uIGxpa2UgImYoeCkiIGFuZCBjcmVhdGVz
IGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisvLyAieCAtPiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9u
IGNhbGwiLgordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQoreworICAgIFRHcmFwaEZ1bmN0
aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gbUdyYXBoLT5jcmVhdGVGdW5jdGlvbkNhbGwoaW50ZXJt
RnVuY3Rpb25DYWxsKTsKKworICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsIGFy
Z3VtZW50cy4KKyAgICBpbnQgYXJndW1lbnROdW1iZXIgPSAwOworICAgIFRJbnRlcm1TZXF1ZW5j
ZSYgaW50ZXJtQXJndW1lbnRzID0gaW50ZXJtRnVuY3Rpb25DYWxsLT5nZXRTZXF1ZW5jZSgpOwor
ICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gaW50ZXJtQXJn
dW1lbnRzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGludGVybUFyZ3VtZW50cy5lbmQoKTsK
KyAgICAgICAgICsraXRlciwgKythcmd1bWVudE51bWJlcikKKyAgICB7CisgICAgICAgIFROb2Rl
U2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBUSW50ZXJt
Tm9kZSogaW50ZXJtQXJndW1lbnQgPSAqaXRlcjsKKyAgICAgICAgaW50ZXJtQXJndW1lbnQtPnRy
YXZlcnNlKHRoaXMpOworCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXJndW1lbnROb2Rl
cyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoQXJndW1lbnQq
IGFyZ3VtZW50ID0gbUdyYXBoLT5jcmVhdGVBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFy
Z3VtZW50TnVtYmVyKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVO
b2RlKGFyZ3VtZW50Tm9kZXMsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGFyZ3VtZW50LT5hZGRE
ZXBlbmRlbnROb2RlKGZ1bmN0aW9uQ2FsbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQ
dXNoIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBmdW5jdGlvbiBjYWxsIGludG8gdGhlIGN1
cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSBy
ZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBjYWxsLgorICAgIC8vIFRodXMsIGFuIGV4cHJlc3Npb24g
bGlrZSAieSA9IGYoeCkiIHdpbGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKyAgICAv
LyAieCAtPiBhcmd1bWVudCAwIC0+IGZ1bmN0aW9uIGNhbGwgLT4geSIuCisgICAgLy8gVGhpcyBs
aW5lIGVzc2VudGlhbGx5IHBhc3NlcyB0aGUgZnVuY3Rpb24gY2FsbCBub2RlIGJhY2sgdXAgdG8g
YW4gZWFybGllciB2aXNpdEFzc2lnbm1lbnQKKyAgICAvLyBjYWxsLCB3aGljaCB3aWxsIGNyZWF0
ZSB0aGUgY29ubmVjdGlvbiAiZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICBtTm9kZVNldHMuaW5z
ZXJ0SW50b1RvcFNldChmdW5jdGlvbkNhbGwpOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFn
Z3JlZ2F0ZSkKK3sKKyAgICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gaW50ZXJtQWdncmVn
YXRlLT5nZXRTZXF1ZW5jZSgpOworICAgIGZvcihUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOyBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0
ZXIpCisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtQ2hpbGQgPSAqaXRlcjsKKyAg
ICAgICAgaW50ZXJtQ2hpbGQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogaW50ZXJtU3lt
Ym9sKQoreworICAgIC8vIFB1c2ggdGhpcyBzeW1ib2wgaW50byB0aGUgc2V0IG9mIGRlcGVuZGVu
dCBzeW1ib2xzIGZvciB0aGUgY3VycmVudCBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbgorICAgIC8v
IHRoYXQgd2UgYXJlIHRyYXZlcnNpbmcuCisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBtR3Jh
cGgtPmdldE9yQ3JlYXRlU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgbU5vZGVTZXRzLmluc2Vy
dEludG9Ub3BTZXQoc3ltYm9sKTsKKworICAgIC8vIElmIHRoaXMgc3ltYm9sIGlzIHRoZSBjdXJy
ZW50IGxlZnRtb3N0IHN5bWJvbCB1bmRlciBhbiBhc3NpZ25tZW50LCByZXBsYWNlIHRoZSBwcmV2
aW91cworICAgIC8vIGxlZnRtb3N0IHN5bWJvbCB3aXRoIHRoaXMgc3ltYm9sLgorICAgIGlmICgh
bUxlZnRtb3N0U3ltYm9scy5lbXB0eSgpICYmIG1MZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0KKyAg
ICAgICAgJlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpIHsKKyAgICAg
ICAgbUxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgbUxlZnRtb3N0U3ltYm9scy5wdXNo
KHN5bWJvbCk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5KQoreworICAg
IFRPcGVyYXRvciBvcCA9IGludGVybUJpbmFyeS0+Z2V0T3AoKTsKKyAgICBpZiAob3AgPT0gRU9w
SW5pdGlhbGl6ZSB8fCBpbnRlcm1CaW5hcnktPm1vZGlmaWVzU3RhdGUoKSkKKyAgICAgICAgdmlz
aXRBc3NpZ25tZW50KGludGVybUJpbmFyeSk7CisgICAgZWxzZSBpZiAob3AgPT0gRU9wTG9naWNh
bEFuZCB8fCBvcCA9PSBFT3BMb2dpY2FsT3IpCisgICAgICAgIHZpc2l0TG9naWNhbE9wKGludGVy
bUJpbmFyeSk7CisgICAgZWxzZQorICAgICAgICB2aXNpdEJpbmFyeUNoaWxkcmVuKGludGVybUJp
bmFyeSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OnZpc2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Bc3NpZ25tZW50KQor
eworICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUFzc2lnbm1lbnQtPmdldExl
ZnQoKTsKKyAgICBpZiAoIWludGVybUxlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIFRHcmFw
aFN5bWJvbCogbGVmdG1vc3RTeW1ib2wgPSBOVUxMOworCisgICAgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIo
dGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAg
ICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbGVmdG1vc3RTeW1i
b2wgPSBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpOworCisgICAgICAgICAgICAvLyBBZnRlciB0cmF2
ZXJzaW5nIHRoZSBsZWZ0IHN1YnRyZWUgb2YgdGhpcyBhc3NpZ25tZW50LCB3ZSBzaG91bGQgaGF2
ZSBmb3VuZCBhIHJlYWwKKyAgICAgICAgICAgIC8vIGxlZnRtb3N0IHN5bWJvbCwgYW5kIHRoZSBs
ZWZ0bW9zdCBzeW1ib2wgc2hvdWxkIG5vdCBiZSBhIHBsYWNlaG9sZGVyLgorICAgICAgICAgICAg
QVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprTGVm
dFN1YnRyZWUpOworICAgICAgICAgICAgQVNTRVJUKGxlZnRtb3N0U3ltYm9sICE9ICZUTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0Umln
aHQoKSkgeworICAgICAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3Vi
dHJlZSk7CisgICAgICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFzc2lnbm1lbnROb2RlcyA9IG1Ob2Rl
U2V0cy5nZXRUb3BTZXQoKSkKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5n
bGVOb2RlKGFzc2lnbm1lbnROb2RlcywgbGVmdG1vc3RTeW1ib2wpOworICAgIH0KKworICAgIC8v
IFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGFzc2lnbm1lbnQgaW50byB0aGUgY3Vy
cmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJl
c3VsdCBvZiB0aGlzIGFzc2lnbm1lbnQuCisgICAgLy8gQW4gZXhwcmVzc2lvbiBsaWtlICJhID0g
KGIgPSBjKSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZSAiYyAtPiBiIC0+IGEi
LgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGxlZnRtb3N0IHN5bWJv
bCBvZiB0aGUgbmVzdGVkIGFzc2lnbm1lbnQgKCJiIiBpbiB0aGlzCisgICAgLy8gZXhhbXBsZSkg
YmFjayB1cCB0byB0aGUgZWFybGllciB2aXNpdEFzc2lnbm1lbnQgY2FsbCBmb3IgdGhlIG91dGVy
IGFzc2lnbm1lbnQsIHdoaWNoIHdpbGwKKyAgICAvLyBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImIg
LT4gYSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQobGVmdG1vc3RTeW1ib2wpOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcChUSW50ZXJt
QmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJt
TGVmdCA9IGludGVybUxvZ2ljYWxPcC0+Z2V0TGVmdCgpKSB7CisgICAgICAgIFROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGlu
dGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGxl
ZnROb2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoTG9n
aWNhbE9wKiBsb2dpY2FsT3AgPSBtR3JhcGgtPmNyZWF0ZUxvZ2ljYWxPcChpbnRlcm1Mb2dpY2Fs
T3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUobGVmdE5v
ZGVzLCBsb2dpY2FsT3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1UeXBl
ZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywg
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVy
bVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSogaW50ZXJtQmluYXJ5
KQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1CaW5hcnktPmdl
dExlZnQoKSkKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAo
VEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUJpbmFyeS0+Z2V0UmlnaHQoKSkgewor
ICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cih0aGlzLCBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKTsKKyAgICAg
ICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKworYm9vbCBURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUNv
bmRpdGlvbiA9IGludGVybVNlbGVjdGlvbi0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5v
ZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVy
bUNvbmRpdGlvbi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCog
Y29uZGl0aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uID0gbUdyYXBoLT5jcmVhdGVTZWxlY3Rpb24oaW50ZXJt
U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2Rl
KGNvbmRpdGlvbk5vZGVzLCBzZWxlY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KFRJbnRlcm1Ob2RlKiBpbnRlcm1UcnVlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldFRydWVC
bG9jaygpKQorICAgICAgICBpbnRlcm1UcnVlQmxvY2stPnRyYXZlcnNlKHRoaXMpOworCisgICAg
aWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1GYWxzZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRG
YWxzZUJsb2NrKCkpCisgICAgICAgIGludGVybUZhbHNlQmxvY2stPnRyYXZlcnNlKHRoaXMpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKQoreworICAgIGlm
IChUSW50ZXJtVHlwZWQqIGludGVybUNvbmRpdGlvbiA9IGludGVybUxvb3AtPmdldENvbmRpdGlv
bigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlz
KTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBp
ZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgp
KSB7CisgICAgICAgICAgICBUR3JhcGhMb29wKiBsb29wID0gbUdyYXBoLT5jcmVhdGVMb29wKGlu
dGVybUxvb3ApOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
Y29uZGl0aW9uTm9kZXMsIGxvb3ApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFRJbnRl
cm1Ob2RlKiBpbnRlcm1Cb2R5ID0gaW50ZXJtTG9vcC0+Z2V0Qm9keSgpKQorICAgICAgICBpbnRl
cm1Cb2R5LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUV4
cHJlc3Npb24gPSBpbnRlcm1Mb29wLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgIGludGVybUV4
cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK3Zv
aWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVO
b2RlKFRQYXJlbnROb2RlU2V0KiBub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0
Cit7CisgICAgZm9yIChUUGFyZW50Tm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVz
LT5iZWdpbigpOyBpdGVyICE9IG5vZGVzLT5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAg
VEdyYXBoUGFyZW50Tm9kZSogY3VycmVudE5vZGUgPSAqaXRlcjsKKyAgICAgICAgY3VycmVudE5v
ZGUtPmFkZERlcGVuZGVudE5vZGUobm9kZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzdjMjllMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKQEAgLTAsMCArMSwx
ODQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVO
Q1lfR1JBUEhfQlVJTERFUl9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lf
R1JBUEhfQlVJTERFUl9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaCIKKworLy8KKy8vIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMs
IGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4gYnkgdHJhdmVyc2luZyBhCisvLyBpbnRl
cm1lZGlhdGUgdHJlZS4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBidWlsZChUSW50
ZXJtTm9kZSogbm9kZSwgVERlcGVuZGVuY3lHcmFwaCogZ3JhcGgpOworCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCitw
cml2YXRlOgorICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUR3JhcGhTeW1ib2wqPiBUU3ltYm9sU3Rh
Y2s7CisgICAgdHlwZWRlZiBzdGQ6OnNldDxUR3JhcGhQYXJlbnROb2RlKj4gVFBhcmVudE5vZGVT
ZXQ7CisKKyAgICAvLworICAgIC8vIEZvciBjb2xsZWN0aW5nIHRoZSBkZXBlbmRlbnQgbm9kZXMg
b2YgYXNzaWdubWVudHMsIGNvbmRpdGlvbnMsIGV0Yy4KKyAgICAvLyB3aGlsZSB0cmF2ZXJzaW5n
IHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKyAgICAvLworICAgIC8vIFRoaXMgZGF0YSBzdHJ1Y3R1
cmUgaXMgc3RhY2sgb2Ygc2V0cy4gRWFjaCBzZXQgY29udGFpbnMgZGVwZW5kZW5jeSBncmFwaCBw
YXJlbnQgbm9kZXMuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFN0YWNrIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFROb2RlU2V0U3RhY2soKSB7fTsKKyAgICAgICAgflROb2RlU2V0U3RhY2so
KSB7IGNsZWFyKCk7IH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBh
ZnRlciBhIHB1c2hTZXQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgdG9wIHNldCBp
cyBlbXB0eS4KKyAgICAgICAgVFBhcmVudE5vZGVTZXQqIGdldFRvcFNldCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAg
ICBUUGFyZW50Tm9kZVNldCogdG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBy
ZXR1cm4gIXRvcFNldC0+ZW1wdHkoKSA/IHRvcFNldCA6IE5VTEw7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHB1c2hTZXQoKSB7IG5vZGVTZXRzLnB1c2gobmV3IFRQYXJlbnROb2RlU2V0KCkp
OyB9CisgICAgICAgIHZvaWQgcG9wU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2RlU2V0cy50b3AoKTsK
KyAgICAgICAgICAgIG5vZGVTZXRzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9w
cyB0aGUgdG9wIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8gdGhlIG5ldyB0b3Agc2V0Lgor
ICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHB1c2hTZXQuCisg
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHNldCBiZWxvdyB0aGUgdG9wIHNldCwgdGhlIHRvcCBz
ZXQgaXMganVzdCBkZWxldGVkLgorICAgICAgICB2b2lkIHBvcFNldEludG9OZXh0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAg
IFRQYXJlbnROb2RlU2V0KiBvbGRUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
IG5vZGVTZXRzLnBvcCgpOworCisgICAgICAgICAgICBpZiAoIW5vZGVTZXRzLmVtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogbmV3VG9wU2V0ID0gbm9kZVNldHMudG9w
KCk7CisgICAgICAgICAgICAgICAgbmV3VG9wU2V0LT5pbnNlcnQob2xkVG9wU2V0LT5iZWdpbigp
LCBvbGRUb3BTZXQtPmVuZCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRl
IG9sZFRvcFNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvZXMgbm90aGluZyBpZiB0aGVy
ZSBpcyBubyB0b3Agc2V0LgorICAgICAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGVy
ZSBpcyBubyB0b3Agc2V0IGlmIHdlIGFyZSB2aXNpdGluZworICAgICAgICAvLyBzeW1ib2xzIHRo
YXQgYXJlIG5vdCB1bmRlciBhbiBhc3NpZ25tZW50IG9yIGNvbmRpdGlvbi4KKyAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0byB0cmFjayB0aG9zZSBzeW1ib2xzLgorICAgICAgICB2b2lkIGluc2Vy
dEludG9Ub3BTZXQoVEdyYXBoUGFyZW50Tm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBub2RlU2V0cy50b3AoKS0+aW5zZXJ0KG5vZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICghbm9kZVNldHMu
ZW1wdHkoKSkKKyAgICAgICAgICAgICAgICBwb3BTZXQoKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRQYXJlbnROb2RlU2V0Kj4gVFBhcmVu
dE5vZGVTZXRTdGFjazsKKworICAgICAgICBUUGFyZW50Tm9kZVNldFN0YWNrIG5vZGVTZXRzOwor
ICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVz
IGEgbmV3IG5vZGUgc2V0IHdoZW4gaW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3Rh
bmNlIGdvZXMgb3V0IG9mIHNjb3BlLCBpdCBhbmQgcG9wcyB0aGUgbm9kZSBzZXQuCisgICAgLy8K
KyAgICBjbGFzcyBUTm9kZVNldE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5v
ZGVTZXRNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAg
ICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAg
ICAgICB+VE5vZGVTZXRNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldCgpOyB9CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOworICAgIH07CisKKyAgICAvLworICAg
IC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcHVzaGVzIGEgbmV3IG5vZGUgc2V0IHdoZW4g
aW5zdGFudGlhdGVkLgorICAgIC8vIFdoZW4gdGhlIGluc3RhbmNlIGdvZXMgb3V0IG9mIHNjb3Bl
LCBpdCBhbmQgcG9wcyB0aGUgdG9wIG5vZGUgc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0bwor
ICAgIC8vIHRoZSBuZXcgdG9wIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRQ
cm9wYWdhdGluZ01haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAg
ICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9Cisg
ICAgICAgIH5UTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXRJbnRv
TmV4dCgpOyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUTm9kZVNldFN0YWNrJiBzZXRzOwor
ICAgIH07CisKKyAgICAvLworICAgIC8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mga2VlcHMg
dHJhY2sgb2YgdGhlIGxlZnRtb3N0IHN5bWJvbCB3aGlsZSB3ZSdyZSBleHBsb3JpbmcgYW4KKyAg
ICAvLyBhc3NpZ25tZW50LgorICAgIC8vIEl0IHdpbGwgcHVzaCB0aGUgcGxhY2Vob2xkZXIgc3lt
Ym9sIGtMZWZ0U3VidHJlZSB3aGVuIGluc3RhbnRpYXRlZCB1bmRlciBhIGxlZnQgc3VidHJlZSwK
KyAgICAvLyBhbmQga1JpZ2h0U3VidHJlZSB1bmRlciBhIHJpZ2h0IHN1YnRyZWUuCisgICAgLy8g
V2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSwgaXQgd2lsbCBwb3AgdGhlIGxlZnRtb3N0IHN5bWJv
bCBhdCB0aGUgdG9wIG9mIHRoZSBzY29wZS4KKyAgICAvLyBEdXJpbmcgdHJhdmVyc2FsLCB0aGUg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgd2lsbCByZXBsYWNlIGtMZWZ0U3VidHJlZSB3aXRoIGEg
cmVhbCBzeW1ib2wuCisgICAgLy8ga1JpZ2h0U3VidHJlZSB3aWxsIG5ldmVyIGJlIHJlcGxhY2Vk
IGJ5IGEgcmVhbCBzeW1ib2wgYmVjYXVzZSB3ZSBhcmUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0Cisg
ICAgLy8gc3ltYm9sLgorICAgIC8vCisgICAgY2xhc3MgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
ciB7CisgICAgcHVibGljOgorICAgICAgICBjbGFzcyBUU3VidHJlZVBsYWNlaG9sZGVyIDogcHVi
bGljIFRHcmFwaFN5bWJvbCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFRTdWJ0cmVl
UGxhY2Vob2xkZXIoKSA6IFRHcmFwaFN5bWJvbChOVUxMKSB7fQorICAgICAgICB9OworCisgICAg
ICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVyIGtMZWZ0U3VidHJlZTsKKyAgICAgICAgc3Rh
dGljIFRTdWJ0cmVlUGxhY2Vob2xkZXIga1JpZ2h0U3VidHJlZTsKKworICAgICAgICBUTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5LCBUU3Vi
dHJlZVBsYWNlaG9sZGVyJiBzdWJ0cmVlKQorICAgICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMo
ZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZHNQ
bGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0U3ltYm9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3lt
Ym9scy50b3AoKSAhPSAmc3VidHJlZTsKKyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVy
U3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIH5UTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAg
ICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIFRTeW1ib2xTdGFjayYgbGVmdG1vc3RTeW1ib2xzOworICAgICAgICBib29sIG5l
ZWRzUGxhY2Vob2xkZXJTeW1ib2w7CisgICAgfTsKKworICAgIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1HcmFwaChncmFwaCkge30KKyAgICB2b2lk
IGJ1aWxkKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKSB7IGludGVybU5vZGUtPnRyYXZlcnNlKHRo
aXMpOyB9CisKKyAgICB2b2lkIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKFRQYXJl
bnROb2RlU2V0KiBub2RlcywgVEdyYXBoTm9kZSogbm9kZSkgY29uc3Q7CisKKyAgICB2b2lkIHZp
c2l0QXNzaWdubWVudChUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdExvZ2ljYWxPcChU
SW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5h
cnkqKTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUq
KTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0
YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOworfQorCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBh
cmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1
bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8g
IgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5h
bWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVu
Y3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1
dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rp
b25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBz
eW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wt
PmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAg
ICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVj
dGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsg
PDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNp
dExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNh
bE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sK
KyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVy
KQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1T
aW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAg
ICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDQ3ZGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9I
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0
aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5j
eUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsK
KworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
RVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApAQCAtMCww
ICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0
cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9p
ZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisK
K3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2
ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAv
LyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBo
VHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShn
cmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERl
cHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNp
dEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZl
cnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2
ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdy
YXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+
dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExv
Z2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaApp
bmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0
OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAK
LWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uODhlN2M5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0xLDYgKzEsNiBA
QAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUs
NyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCku
CiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTU5LDYgKzE1OSw3IEBA
IE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAg
LTE2Niw2ICsxNjcsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYiICAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NSwyMSBAQCBPICAgICAgICAgICBbMC03XQogImh2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Cisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Cisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisi
c2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQog
ImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0x
OTMsNyArMjA0LDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogMFt4WF17SH0rICAgICAgICAgeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAs
IDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9KyAgICAgICAgICAgICB7IGNvbnRleHQt
PmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIp
OyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KKzB7RH0rICAgICAgICAgICAgIHsgY29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQpOyBj
b250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtEfSsgICAgICAgICAgICAgIHsgeXlsdmFs
LT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAK
IHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0Pihh
dG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CkBAIC0yNTYsNyArMjY3
LDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogWyBcdFx2XG5cZlxyXSAgIHsgIH0KIDwqPjw8RU9G
Pj4gICAgICB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQotPCo+
LiAgICAgICAgICAgIHsgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgIlVua25vd24gY2hhciIs
IHl5dGV4dCwgIiIpOyByZXR1cm4gMDsgfQorPCo+LiAgICAgICAgICAgIHsgY29udGV4dC0+d2Fy
bmluZyh5eWxpbmVubywgIlVua25vd24gY2hhciIsIHl5dGV4dCk7IHJldHVybiAwOyB9CiAKICUl
CiAKQEAgLTI3OCwyMCArMjg5LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC00MjcsNyArNDM4LDcgQEAgdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2Vucywg
aW50IG51bVRva2VucykKICAgICB9CiB9CiAKLXZvaWQgU3RvcmVTdHIoY2hhciAqc3RyaW5nKQor
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtNTM1LDcgKzU0Niw3IEBAIGludCBjaGVja190
eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlz
Y2FubmVyKSB7CiAgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kikg
eXlzY2FubmVyOwogCi0gICAgeXlleHRyYS0+ZXJyb3IoeXlsaW5lbm8sICJJbGxlZ2FsIHVzZSBv
ZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+ZXJyb3IoeXlsaW5l
bm8sICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0KTsKICAgICB5eWV4dHJh
LT5yZWNvdmVyKCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC01NDQsOSArNTU1LDkgQEAgdm9pZCB5
eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAg
IHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5u
ZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJy
b3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVs
c2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIi
KTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAg
ICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtNTY4LDE5ICs1NzksMTUgQEAgaW50
IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIHJldHVybiB5
eWxleF9kZXN0cm95KHNjYW5uZXIpOwogfQogCi12b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAg
ICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
KyAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIHl5cmVzdGFy
dChOVUxMLCBjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNl
TG9jKDAsIDEpLCBjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVPRiA9IGZh
bHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMgPSBjb250
ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3Ry
aW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9
IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21T
dHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50
LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy55CmluZGV4IGQ2Yzg4NjkuLmZhNGFmY2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQpAQCAtODQsMjEgKzg0LDIx
IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hh
ciogcmVhc29uKTsKICNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChj
b250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBj
b250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25s
eSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMs
IEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVS
KSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwg
IiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywg
TCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURF
UikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVu
dCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3Io
TCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBA
IHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEu
c3ltYm9sOwogICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAo
c3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRl
Y2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJp
bmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJp
YWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAt
MTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUg
c3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQx
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
dmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2
LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhwcmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3Zl
cmZsb3cgZm9yIGNvbnN0YW50cwogICAgICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49
ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRl
Z2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAg
cG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VU
IGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNB
cnJheSgpICYmICEkMS0+aXNNYXRyaXgoKSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAg
ICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5v
dCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlz
IG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgk
MS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMzEwLDcgKzMxMCw3IEBAIHBvc3RmaXhfZXhwcmVzc2lv
bgogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsK
ICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRv
dCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM1NSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lv
bgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZp
ZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMg
bm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
MCk7CkBAIC0zNzMsNyArMzczLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICBi
b29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmll
bGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlmIChmaWVsZHMg
PT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1
cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MDUsMTMgKzQw
NSwxMyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm8g
c3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICQkID0g
JDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVx
dWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQz
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJp
eCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICB9CkBAIC01
MjYsNyArNTI2LDcgQEAgZnVuY3Rpb25fY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgcXVh
bCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9y
Q2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRT
ZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50
IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4i
LCAiRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU1
MSw3ICs1NTEsNyBAQCBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAogICAgICAgICAkJCA9ICQxOwog
ICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2FsbF9nZW5lcmlj
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBw
b3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9k
cyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAkJCA9ICQzOwogICAgIH0KQEAgLTY0Nyw3ICs2NDcsNyBAQCBmdW5jdGlvbl9pZGVu
dGlmaWVyCiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmco
JDEudHlwZSksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQxLnR5
cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwpA
QCAtMTAwNywxMiArMTAwNywxMiBAQCBmdW5jdGlvbl9wcm90b3R5cGUKICAgICAgICAgVEZ1bmN0
aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAgICAgICBpZiAocHJldkRlYykgewog
ICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJu
VHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJs
b2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRS
ZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNh
bWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVh
bGlmaWVyKCkgIT0gJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2
ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMDYwLDcgKzEwNjAs
NyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCiAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1
bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNl
cHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewpA
QCAtMTA3NCw3ICsxMDc0LDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwogZnVu
Y3Rpb25faGVhZGVyCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRf
UEFSRU4gewogICAgICAgICBpZiAoJDEucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFs
aWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFs
aWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMg
bm90IGludm9sdmVkIGFzIHdlbGwuLi4KQEAgLTEwOTUsNyArMTA5NSw3IEBAIHBhcmFtZXRlcl9k
ZWNsYXJhdG9yCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICA6IHR5cGVfc3BlY2lmaWVyIElERU5U
SUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKQEAgLTExOTEsNyAr
MTE5MSw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlz
dCBDT01NQSBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUudHlwZSA9PSBFYnRJbnZh
cmlhbnQgJiYgISQzLnN5bWJvbCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQz
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMu
c3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfQogCkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24KICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwogICAgIH0KICAgICB8
IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNL
RVQgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5zaXplZCBhcnJheSBkZWNs
YXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90
IHN1cHBvcnRlZCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIAogICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSk7CkBAIC0x
MzY0LDcgKzEzNjQsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24KICAgICAgICAgJCQudHlwZS5zZXRC
YXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICQyLmxpbmUpOwogICAg
ICAgICBpZiAoISQyLnN5bWJvbCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIu
c3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTE0MzgsNyAr
MTQzOCw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAvLyAgICAgICAgJCQudmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywg
JDEpOwogLy8gICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqJCQudmFy
aWFibGUpKSB7Ci0vLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmlu
aXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKy8vICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5n
ZXROYW1lKCkuY19zdHIoKSk7CiAvLyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIC8v
ICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byBkZWxldGUgJCQudmFyaWFibGUsIHRoZSBwb29s
IHBvcCB3aWxsIHRha2UgY2FyZSBvZiBpdAogLy8gICAgICAgIH0KQEAgLTE0NTAsMjYgKzE0NTAs
MjYgQEAgZnVsbHlfc3BlY2lmaWVkX3R5cGUKICAgICAgICAgJCQgPSAkMTsKIAogICAgICAgICBp
ZiAoJDEuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQxLnNldEFycmF5
KGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3Bl
Y2lmaWVyICB7CiAgICAgICAgIGlmICgkMi5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCQx
LnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKICAgICAgICAgICAgICgkMi50eXBlID09IEVi
dEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQx
LnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0KSAmJgogICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09
IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGlu
dCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9ICQyOwpAQCAtMTY1NCw3ICsx
NjU0LDcgQEAgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKICAgICB9CiAgICAgfCBTQU1QTEVSX0VY
VEVSTkFMX09FUyB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdM
X09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICQx
LmxpbmUpOwpAQCAtMTY2Myw3ICsxNjYzLDcgQEAgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKICAg
ICB9CiAgICAgfCBTQU1QTEVSMkRSRUNUIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0
c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3Qi
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQg
dHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRFJlY3QiLCAkMS5s
aW5lKTsKQEAgLTE3MTksNyArMTcxOSw3IEBAIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgJDItPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8ICQkLT5zaXplKCk7ICsraikgewog
ICAgICAgICAgICAgICAgIGlmICgoKiQkKVtqXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAoKiQy
KVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoKiQyKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJl
OiIsICJzdHJ1Y3QiLCAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwgImR1cGxpY2F0
ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgIiVzIiwgKCokMilbaV0udHlw
ZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xOTY2LDE0
ICsxOTY2LDE0IEBAIGZvcl9yZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQKICAgICA6IENP
TlRJTlVFIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVs
IDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBz
dGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51
ZSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAi
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRl
bWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk4MSw3IEBAIGp1bXBf
c3RhdGVtZW50CiAgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAgICAgICAgIGlm
IChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lk
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1
ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTE5ODksMTAgKzE5ODksMTAgQEAganVtcF9zdGF0ZW1lbnQKICAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxp
bmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5j
dGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5
cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJl
dHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcg
dHlwZToiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yMDM3LDcgKzIwMzcsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkg
aGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVu
Y3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2
RGVjLT5zZXREZWZpbmVkKCk7CkBAIC0yMDQ3LDcgKzIwNDcsNyBAQCBmdW5jdGlvbl9kZWZpbml0
aW9uCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWlu
IikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0
YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90
IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Vm9pZCkgewpAQCAtMjA3OSw3ICsyMDc5LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMDUsNyArMjEwNSw3IEBA
IGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyBy
ZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KICAgICAgICAgLy8gICBNYXkg
YmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQog
ICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEg
dmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFs
dWU6IiwgIiIsICIlcyIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCA1OWI3Mjk5Li5kYzFkZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAi
Li9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTkxLDYgKzE5MSwx
MSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwogdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAjZW5kaWYKIAorI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJ
WkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6
ZV90OworI2VuZGlmCisKICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKICNkZWZpbmUg
RU9CX0FDVF9FTkRfT0ZfRklMRSAxCiAjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCkBAIC0y
MDQsNyArMjA5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJf
U1RBVEU7CiAgICAgICovCiAgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAogICAgICAg
ICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAgICAg
eXlfc2l6ZV90IHl5bDtcCiAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXls
ZW5nOyArK3l5bCApXAogICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKVwKICAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XApAQCAtMjI2LDExICsy
MzEsNiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsK
IAogI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5u
ZXIgKQogCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZf
WVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQogI2lmbmRlZiBZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKQEAgLTI0OCw3ICsyNDgsNyBAQCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCiAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1
Ziwgbm90IGluY2x1ZGluZyBFT0IKIAkgKiBjaGFyYWN0ZXJzLgogCSAqLwotCWludCB5eV9uX2No
YXJzOworCXl5X3NpemVfdCB5eV9uX2NoYXJzOwogCiAJLyogV2hldGhlciB3ZSAib3duIiB0aGUg
YnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAogCSAqIGFuZCBjYW4gcmVhbGxv
YygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCkBAIC0zMjcsNyArMzI3
LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUg
KmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwog
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9T
VEFURSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwogdm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKQEAgLTM4Myw4ICszODMsOCBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9l
cnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAkqeXlfY3Ag
PSAnXDAnOyBcCiAJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JV
TEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVM
RVMgMTU1CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTU2CiAvKiBUaGlzIHN0cnVjdCBpcyBu
b3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2Fy
eS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC0zOTIsNTUgKzM5Miw1OCBAQCBzdHJ1Y3Qg
eXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5
X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0MjZdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDU5XSA9CiAgICAgeyAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAx
NDUsICAxNDUsCi0gICAgICAxMzAsICAxMzYsICAxNDEsICAxMjUsICAxMjYsICAxMzQsICAxMzMs
ICAxMjIsICAxMzEsICAxMjksCi0gICAgICAxMzUsICAgOTQsICAgOTQsICAxMjMsICAxMTksICAx
MzcsICAxMjQsICAxMzgsICAxNDIsICAgOTAsCi0gICAgICAxMjcsICAxMjgsICAxNDAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAxMjAsICAxMzksICAxMjEsICAxMzIsICAgIDMsICAgIDQsICAgIDMsCi0g
ICAgICAxNDQsICAxNDcsICAxNDMsICAxMTYsICAxMDIsICAxMjEsICAxMTAsICAxMDUsICAxMDAs
ICAxMDgsCi0gICAgICAgOTgsICAxMDksICAgOTksICAgOTcsICAgIDIsICAgIDEsICAxMDEsICAg
OTYsICAgOTIsICAgOTMsCi0gICAgICAgIDAsICAgIDAsICAgOTQsICAxMjgsICAxMjAsICAxMjcs
ICAxMTcsICAxMTMsICAxMTUsICAxMTQsCi0gICAgICAxMTgsICAgOTAsICAxMDYsICAxMTIsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICAxNywgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMCwgICAyMiwKLSAg
ICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
IDEwNywgIDExMSwgICAgNSwgIDE0MywKLSAgICAgICAgMCwgICAgMSwgICA5NiwgICAgMCwgICAg
MCwgICA5NSwgICA5MSwgIDEwMywgIDEwNCwgICA1MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAxOCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyNiwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMywgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgICAwLCAgIDk3LAotICAgICAgICAwLCAgIDk2LCAgIDkwLCAg
IDI4LCAgIDkwLCAgIDkwLCAgIDg3LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDIxLCAgIDUzLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDU4LCAgIDcyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LAotICAgICAgIDkwLCAgIDY5LCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDU2LCAgIDI5LCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDM2LAotICAgICAgIDM3LCAgIDM4LCAgIDI3LCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LAotICAgICAgIDUxLCAgIDEyLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDgzLCAgIDg0LCAgIDg1LCAgIDkwLAotCi0gICAgICAg
MzAsICAgNzMsICAgMjUsICAgODAsICAgODEsICAgODIsICAgIDcsICAgNzcsICAgNzgsICAgNzks
Ci0gICAgICAgOTAsICAgMjQsICAgNzUsICAgOTAsICAgOTAsICAgMzksICAgNDAsICAgNDEsICAg
OTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgNzAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
NTIsICAgOTAsICAgODksICAgOTAsICAgOTAsCi0gICAgICAgMTksICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgNzEsICAgNjYsICAgNjEsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgNzYsICAgNTcsICAgOTAsICAgNjQsICAgMzIsICAgOTAsICAgODYsCi0gICAgICAgNjUs
ICAgNDksICAgNTksICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNjAsICAgMzEsICAgOTAsICAgOTAsICAgOTAsICAgIDgsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgNTQsICAgMTMsICAgOTAsICAgMTQsICAgOTAsICAg
OTAsICAgMTYsICAgNjcsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNjIsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgNTUsICAgNzQsCi0KLSAgICAgICA2MywgICAxMSwgICA2OCwgICAgNiwg
ICA4OCwgICAxMCwgICA0NSwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5
MCwgICA0NiwgICA5MCwgICA5MCwgICA5MCwgICA0OCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA0NywgICAgMAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMTU2LCAgMTU0LCAgMTUzLCAgMTUzLAorICAgICAgMTM4LCAgMTQ0LCAgMTQ5LCAg
MTMzLCAgMTM0LCAgMTQyLCAgMTQxLCAgMTMwLCAgMTM5LCAgMTM3LAorICAgICAgMTQzLCAgMTAy
LCAgMTAyLCAgMTMxLCAgMTI3LCAgMTQ1LCAgMTMyLCAgMTQ2LCAgMTUwLCAgIDk4LAorICAgICAg
MTM1LCAgMTM2LCAgMTQ4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTI4LCAgMTQ3LCAgMTI5LCAgMTQw
LCAgICAzLCAgICA0LCAgICAzLAorICAgICAgMTUyLCAgMTU1LCAgMTUxLCAgMTI0LCAgMTEwLCAg
MTI5LCAgMTE4LCAgMTEzLCAgMTA4LCAgMTE2LAorICAgICAgMTA2LCAgMTE3LCAgMTA3LCAgMTA1
LCAgICAyLCAgICAxLCAgMTA5LCAgMTA0LCAgMTAwLCAgMTAxLAorICAgICAgICAwLCAgICAwLCAg
MTAyLCAgMTM2LCAgMTI4LCAgMTM1LCAgMTI1LCAgMTIxLCAgMTIzLCAgMTIyLAorICAgICAgMTI2
LCAgIDk4LCAgMTE0LCAgMTIwLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMTcsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgMjAsICAgMjIsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAxMTUsICAxMTksICAgIDUsCisgICAgICAxNTEs
ICAgIDAsICAgIDEsICAxMDQsICAgIDAsICAgIDAsICAxMDMsICAgOTksICAxMTEsICAxMTIsCisg
ICAgICAgNTAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgMTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgMjYsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgMjMsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAg
ICAgICA5OCwgICAgMCwgIDEwNSwgICAgMCwgIDEwNCwgICA5OCwgICAyOCwgICA5OCwgICA5OCwg
ICA5NSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAy
MSwgICA1MywgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA2OSwgICA5OCwgICA5OCwgICA1OCwg
ICA3MywgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA3MCwgICAgOSwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NiwgICAyOSwgICA5OCwgICA5OCwKKyAgICAg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAzNiwgICAzNywgICAzOCwgICAyNywgICA5OCwgICA5
OCwKKyAgICAgICA5OCwgICAxNSwgICA0MiwgICA0MywgICA0NCwgICA1MSwgICAxMiwgICA5OCwg
ICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDgyLCAgIDgzLCAgIDg0LCAgIDk4LCAgIDMwLCAg
IDc0LCAgIDI1LCAgIDg1LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDc5LCAgIDgwLCAgIDgx
LCAgIDk4LCAgIDI0LCAgIDc3LCAgIDk4LCAgIDk4LAorICAgICAgIDM5LCAgIDQwLCAgIDQxLCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDcxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDUyLCAgIDk4LCAgIDk3LCAgIDk4LCAgIDk4LCAgIDE5LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgIDcyLCAgIDY2LCAgIDYxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDc4LAorICAgICAgIDU3LCAgIDk4LCAgIDY0LCAgIDMyLCAgIDk4LCAgIDk0LCAgIDY1
LCAgIDQ5LCAgIDc2LCAgIDU5LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDYwLCAgIDMxLAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgICA4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU0LAorICAgICAgIDEzLCAgIDk4LCAg
IDE0LCAgIDk4LCAgIDk4LCAgIDE2LCAgIDY3LCAgIDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAg
NjIsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTUsICAgNzUsICAgNjMs
CisgICAgICAgMTEsICAgNjgsICAgIDYsICAgOTYsICAgMTAsICAgODgsICAgNDUsICAgODksICAg
OTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgNDYsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgNDgsICAgOTgsCisgICAgICAgOTIsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTAsICAgOTgsICAgOTEsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgNDcsICAgOTMsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDUwLDE1ICs0NTMsMTUgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAg
ICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAg
IDE3LAotICAgICAgIDE4LCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIwLCAgIDIwLCAgIDIx
LCAgIDIyLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgICAxLCAgIDI3LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDI3LAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMx
LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMyLCAgIDMxLAotICAgICAgIDMxLCAgIDMzLCAgIDM0LCAg
IDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDM1LCAgIDMxLCAgIDMxLAotICAgICAgIDM2LCAgICAx
LCAgIDM3LCAgIDM4LCAgIDMxLCAgICAxLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLAotCi0gICAg
ICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgMzEsICAgNDgsICAgNDksICAgNTAsICAg
NTEsCi0gICAgICAgNTIsICAgNTMsICAgMzEsICAgNTQsICAgNTUsICAgNTYsICAgNTcsICAgNTgs
ICAgNTksICAgNjAsCi0gICAgICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTgsICAgMTksICAgMjAsICAgMjAsICAgMjAs
ICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAg
IDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisgICAgICAgMzIsICAgMzIs
ICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAgMzIsCisgICAgICAg
MzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYsICAgMzIsICAgMzIs
CisgICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAgNDAsICAgNDEsICAg
NDIsICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0
OSwgICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1Niwg
ICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2MiwgICA2MywgICA2NCwgICA2
NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKQEAgLTQ3NSwyMDEgKzQ3OCwyMTQgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY3XSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQogICAgIHsgICAwLAogICAgICAgICAx
LCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAog
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAg
ICAzLCAgICAzLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAx
LCAgICAxLCAgICAxLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAzLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAg
ICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAg
ICA0LAogICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxCisg
ICAgICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDMxXSA9CitzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0NjRdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAg
MCwgICA2NCwgICA2NSwgICA3NCwgICAgMCwgIDYyNywgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAg
IDYwMiwgICA0NSwgIDEzNSwgIDYyOCwgIDYyOCwgIDYwMSwgIDEzMiwgIDYyOCwgIDEzMSwgIDEy
OSwKLSAgICAgIDE0MywgIDE1NSwgIDE2MywgIDU5OSwgIDYyOCwgIDE3OSwgIDU5OSwgICA0Nywg
IDYyOCwgICAgMCwKLSAgICAgIDYyOCwgIDYyOCwgIDEyNiwgICA5OCwgIDEwOCwgIDE0NywgIDE1
OCwgIDE1OCwgIDE2NSwgIDU3MCwKLSAgICAgIDEzMCwgIDEwNywgIDU2OSwgIDE0OCwgIDE1Niwg
IDU2MywgIDE3MiwgIDU3NiwgIDE3NCwgIDE4MSwKLSAgICAgIDE3NywgIDE5NSwgIDU3MiwgIDYy
OCwgIDE3MywgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYwMywKLSAgICAgIDYyOCwgIDYyOCwg
ICAgMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAgIDYy
OCwgIDYyOCwgIDYyOCwgIDIzMywgIDYyOCwgICAgMCwgIDYyOCwgIDIzOSwgIDI1NSwgIDI3MSwK
LSAgICAgIDI4NywgICAgMCwgIDMwMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDU5MiwgIDYyOCwgIDYy
OCwgIDYyOCwKLSAgICAgIDU5MSwgICAgMCwgIDYyOCwgIDYyOCwgIDU2NCwgIDU1NywgIDU2MCwg
IDU2OCwgIDU2NywgIDU1NCwKLQotICAgICAgNTY5LCAgNTU2LCAgNTYyLCAgNTUwLCAgNTQ3LCAg
NTYwLCAgNTQ3LCAgNTQ0LCAgNTQ0LCAgNTUwLAotICAgICAgNTM4LCAgNTQ1LCAgNTQyLCAgNTUy
LCAgNTM4LCAgNTQ0LCAgNTQ3LCAgNTQ4LCAgICAwLCAgMTg3LAotICAgICAgNTQ3LCAgMjQxLCAg
NTMzLCAgNTQ2LCAgNTM3LCAgNTM5LCAgNTI5LCAgNTQzLCAgNTQwLCAgNTQyLAotICAgICAgNTI1
LCAgNTMwLCAgNTI3LCAgNTE2LCAgMTkyLCAgNTMwLCAgNTI2LCAgNTI4LCAgNTE3LCAgNTIwLAot
ICAgICAgMjc0LCAgNTI1LCAgNTE3LCAgNTI5LCAgMTE0LCAgNTIyLCAgNjI4LCAgNjI4LCAgNjI4
LCAgICAwLAotICAgICAgMzE2LCAgICAwLCAgMzIyLCAgMzM4LCAgMzQ0LCAgMzUxLCAgICAwLCAg
NjI4LCAgNjI4LCAgICAwLAotICAgICAgNTE0LCAgNTE4LCAgNTI3LCAgNTI0LCAgNTA4LCAgNTA4
LCAgMjA1LCAgNTIzLCAgNTIwLCAgNTIwLAotICAgICAgNTE4LCAgNTE1LCAgNTA3LCAgNTEzLCAg
NTAwLCAgNTExLCAgNTE0LCAgICAwLCAgNTExLCAgNDk5LAotICAgICAgNTA2LCAgNTAzLCAgNTA3
LCAgNTAwLCAgNDg5LCAgNDg4LCAgNTAxLCAgNTA0LCAgNTAxLCAgNDk2LAotICAgICAgNDg3LCAg
MjQ3LCAgNDkyLCAgNDk1LCAgNDg2LCAgNDgzLCAgNDg3LCAgNDkzLCAgNDg0LCAgNDc1LAotCi0g
ICAgICA0NzgsICA0NzYsICA0ODYsICA0NzIsICA0NzAsICA0NzAsICA0NzIsICA0NjksICA0ODAs
ICA0NzksCi0gICAgICAzMjgsICA0NzQsICA0NjksICA0NTgsICAyNjAsICA0NzYsICA0NzgsICA0
NjcsICAzNTgsICAzNjYsCi0gICAgICAzNzIsICAzNzgsICA0NjgsICAgIDAsICA0NjYsICAyNzYs
ICAgIDAsICA0NTgsICA0NTYsICA0NjQsCi0gICAgICA0NTMsICA0NzAsICA0NTksICAyOTEsICAg
IDAsICAgIDAsICA0NTMsICA0NjMsICA0NjMsICA0NDgsCi0gICAgICAzMDUsICAgIDAsICAgIDAs
ICA0NTAsICAzMjcsICA0NTEsICA0NDUsICA0NDQsICA0NDUsICA0NDQsCi0gICAgICAzODIsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NDAsICA0NDEsICA0NDYsICA0MzcsCi0gICAg
ICA0NTAsICA0NDUsICA0NDQsICA0MzYsICA0NDAsICA0MzIsICA0MzUsICA0MzksICA0NDQsICA0
NDMsCi0gICAgICA0MzQsICAgIDAsICAgIDAsICA0NDAsICA0MjksICA0MjksICA0MzQsICA0MzMs
ICA0MzAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICA0MjAsICA0MzIsICA0MzQsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICA0MjIsICA0MjMsICA0MTcs
ICA0MjcsICAgIDAsICAgIDAsICAgIDAsICA0MTgsCi0KLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgIDQyNSwgICAg
MCwgICAgMCwgIDQyMywgIDQxOSwgICAgMCwgICAgMCwgICAgMCwgIDQxNSwgIDQxMSwKLSAgICAg
IDQxNiwgIDQwNiwgIDQxOSwgIDQwNSwgIDQxOCwgIDQwNywgIDQxNCwgICAgMCwgIDQxMiwgIDQx
NCwKLSAgICAgIDM5OCwgIDQwNywgIDQxMywgIDQwOCwgIDM5NiwgICAgMCwgIDM5OCwgICAgMCwg
IDM5NywgIDQwMCwKLSAgICAgICAgMCwgIDM4OSwgIDM4OCwgIDM4OCwgIDQwMSwgICAgMCwgIDQw
MywgICAgMCwgIDQwMiwgIDQwMSwKLSAgICAgIDM4NiwgIDM5OSwgIDM4NiwgICAgMCwgICAgMCwg
IDM4OSwgICAgMCwgICAgMCwgIDM4MSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDM3
OCwgIDM4OSwgIDM4MiwgIDM4OCwgIDM4NSwgIDM4MCwgIDM3MiwKLSAgICAgIDM4MiwgICAgMCwg
ICAgMCwgIDM2NSwgIDM3MSwgIDM2MCwgICAgMCwgIDM2OSwgIDM2NiwgIDM1NiwKLSAgICAgIDM4
NSwgIDM2NCwgICAgMCwgICAgMCwgIDM2NCwgICAgMCwgIDM2MiwgIDM2MSwgICAgMCwgICAgMCwK
LSAgICAgIDM2MCwgIDMyMywgIDMwOCwgICAgMCwgIDI5OCwgIDMxOCwgIDI3MCwgIDI2NSwgICAg
MCwgICAgMCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMjc5
LCAgMjcxLCAgMjQwLCAgMjQwLAotICAgICAgMjM4LCAgMjM3LCAgMjI2LCAgICAwLCAgMjA4LCAg
MTg4LCAgMTkwLCAgICAwLCAgMTg2LCAgMTczLAotICAgICAgMTg3LCAgMTY0LCAgMTU4LCAgICAw
LCAgNjI4LCAgNDE1LCAgNDE3LCAgNDE5LCAgNDIzLCAgMTg2CisgICAgICAgIDAsICAgIDAsICAg
NjUsICAgNjYsICAgNzUsICAgIDAsICA2ODAsICA2ODEsICA2ODEsICA2ODEsCisgICAgICA2NTQs
ICAgNDUsICAxMzcsICA2ODEsICA2ODEsICA2NTMsICAxMzQsICA2ODEsICAxMzMsICAxMzEsCisg
ICAgICAxNDYsICAxNTksICAxNjgsICA2NTEsICA2ODEsICAxODYsICA2NTEsICAgNDcsICA2ODEs
ICAgIDAsCisgICAgICA2ODEsICA2ODEsICAxMjgsICAxMDAsICAxMTAsICAxNTIsICAxNTYsICAx
NDYsICAxNjYsICA2MjIsCisgICAgICAxNzMsICAxMDksICA2MjEsICAxMjYsICAxNzcsICA2MTUs
ICAxNzgsICA2MjgsICAxODcsICAxODQsCisgICAgICAxNDEsICAxOTcsICA2MjQsICA2ODEsICAx
NTcsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2NTYsCisgICAgICA2ODEsICA2ODEsICAgIDAs
ICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsCisgICAgICA2ODEsICA2
ODEsICA2ODEsICAyMzYsICA2ODEsICAgIDAsICA2ODEsICAyNDMsICAyNzMsICAyODIsCisgICAg
ICAzMDQsICAgIDAsICAzMTQsICA2ODEsICA2ODEsICA2ODEsICA2NDQsICA2ODEsICA2ODEsICA2
ODEsCisgICAgICA2NDMsICAgIDAsICA2ODEsICA2ODEsICA2MTYsICA2MDksICA2MTIsICA2MjAs
ICA2MTksICA2MDYsCisKKyAgICAgIDYyMSwgIDYwOCwgIDYxNCwgIDYwMiwgIDU5OSwgIDYxMiwg
IDU5OSwgIDU5NiwgIDU5NiwgIDYwMiwKKyAgICAgIDU5MCwgIDE4OSwgIDU5NSwgIDYwNSwgIDU5
MSwgIDU5NywgIDYwMCwgIDYwMSwgICAgMCwgIDIxNiwKKyAgICAgIDYwMCwgIDE4OCwgIDU4Niwg
IDU5OSwgIDU5MCwgIDU5MiwgIDU4MiwgIDU5NiwgIDU5MywgIDU5NSwKKyAgICAgIDU3OCwgIDU4
MywgIDU4MCwgIDU2OSwgIDE4MywgIDU3NywgIDU4MiwgIDU3OCwgIDU4MCwgIDU2OSwKKyAgICAg
IDU3MiwgIDIyMCwgIDU3NywgIDU2OSwgIDU4MSwgIDE3NiwgIDU3NCwgIDY4MSwgIDY4MSwgIDY4
MSwKKyAgICAgICAgMCwgIDMzMSwgICAgMCwgIDM0NCwgIDM2MSwgIDI5MCwgIDM3NCwgICAgMCwg
IDY4MSwgIDY4MSwKKyAgICAgICAgMCwgIDU2NiwgIDU3MCwgIDU3OSwgIDU3NiwgIDU2MCwgIDU2
MCwgIDIxNSwgIDU3NSwgIDU3MiwKKyAgICAgIDU3MiwgIDU3MCwgIDU2NywgIDU1OSwgIDU2NSwg
IDU1MiwgIDU2MywgIDU0OSwgIDU2NSwgICAgMCwKKyAgICAgIDU2MiwgIDU1MCwgIDU1NywgIDU1
NCwgIDU1OCwgIDU1MSwgIDU0MCwgIDUzOSwgIDU1MiwgIDU1NSwKKyAgICAgIDU1MiwgIDU0Nywg
IDUzOCwgIDI2MCwgIDU0MywgIDU0NiwgIDUzNywgIDUzNCwgIDUzOCwgIDU0NCwKKworICAgICAg
NTM1LCAgNTI2LCAgNTI5LCAgNTI3LCAgNTM3LCAgNTIzLCAgNTIxLCAgNTM0LCAgNTIwLCAgNTIy
LAorICAgICAgNTE5LCAgNTMwLCAgNTI5LCAgMjgzLCAgNTI0LCAgNTE5LCAgNTA4LCAgMjY0LCAg
NTI2LCAgNTI4LAorICAgICAgNTE3LCAgMzgxLCAgMzg4LCAgMzk1LCAgNDAyLCAgNTE4LCAgICAw
LCAgNTE2LCAgMzIwLCAgICAwLAorICAgICAgNTA4LCAgNTA2LCAgNTE0LCAgNTAzLCAgNTIwLCAg
NTA5LCAgMzM2LCAgICAwLCAgICAwLCAgNTAzLAorICAgICAgNTEzLCAgNTEzLCAgICAwLCAgNDk4
LCAgMzQ5LCAgICAwLCAgICAwLCAgNTAwLCAgMzY2LCAgNTAxLAorICAgICAgNDk1LCAgNDk0LCAg
NDk1LCAgNDk0LCAgNDA3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNDkw
LCAgNDkxLCAgNDk2LCAgNDg3LCAgNTAwLCAgNDk1LCAgNDk0LCAgNDg2LCAgNDkwLCAgNDgyLAor
ICAgICAgNDg1LCAgNDg5LCAgNDk0LCAgNDgwLCAgNDkyLCAgNDgzLCAgICAwLCAgICAwLCAgNDg5
LCAgNDc4LAorICAgICAgNDc4LCAgNDgzLCAgNDgyLCAgNDc5LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDY5LCAgNDgxLAorICAgICAgNDgzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNDcxLCAgNDcyLCAgNDY2LAorCisgICAgICA0NzYsICAgIDAsICAgIDAsICAgIDAs
ICA0NjcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA0NzQsICAgIDAsICAgIDAsICA0NzIsICA0NjgsCisgICAgICAgIDAs
ICAgIDAsICAgIDAsICA0NjQsICA0NjAsICA0NjUsICA0NTUsICA0NjgsICA0NTQsICA0NjcsCisg
ICAgICA0NTYsICA0NjMsICAgIDAsICA0NjEsICA0NjMsICA0NDcsICA0NDksICA0NTUsICA0NjEs
ICA0NTYsCisgICAgICA0NDQsICAgIDAsICA0NDYsICAgIDAsICA0NDUsICA0NDgsICAgIDAsICA0
MzcsICA0MzYsICA0MzYsCisgICAgICA0NDksICAgIDAsICA0NTEsICAgIDAsICA0NTAsICA0NDks
ICA0MzQsICA0NDcsICA0MzQsICAgIDAsCisgICAgICAgIDAsICA0MzcsICAgIDAsICAgIDAsICA0
MjksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0MjYsICA0MzcsICA0MzAs
ICA0MzYsICA0MzMsICA0MjgsICA0MjAsICA0MzIsICAgIDAsICAgIDAsCisgICAgICA0MjUsICA0
MzIsICA0MjEsICAgIDAsICA0MzAsICA0MjcsICA0MTcsICA0MTEsICA0MjUsICAgIDAsCisgICAg
ICAgIDAsICA0MjUsICAgIDAsICA0MjMsICA0MjIsICAgIDAsICAgIDAsICA0MjEsICA0MDcsICA0
MTksCisKKyAgICAgICAgMCwgIDQxMCwgIDQzMSwgIDQzMCwgIDQyOSwgIDQwMCwgIDM5NiwgICAg
MCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQyMSwg
IDI1MCwgIDQyMSwgIDQxMSwgIDM4NCwKKyAgICAgIDM5MiwgIDM5NCwgIDM5MCwgIDM5MiwgIDM5
MSwgIDM5MCwgIDM5MywgIDM5MCwgIDM5MSwgIDM4OCwKKyAgICAgICAgMCwgIDMzMiwgIDM0Mywg
IDMxNywgIDMyOSwgIDMxMywgIDMxNywgIDMwNCwgIDMyMSwgIDI5MSwKKyAgICAgICAgMCwgIDMw
MiwgIDI4MCwgIDI3MSwgIDI1NSwgIDI2MiwgICAgMCwgIDI1NiwgICAgMCwgIDIzMiwKKyAgICAg
IDIwNiwgIDIxMiwgIDE0OCwgIDE1OSwgIDExMywgICAgMCwgICAgMCwgIDY4MSwgIDQ0MiwgIDQ0
NCwKKyAgICAgIDQ0NiwgIDQ1MCwgIDE2MQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Rl
Zls0NjRdID0KICAgICB7ICAgMCwKLSAgICAgIDQyNSwgICAgMSwgIDQyNiwgIDQyNiwgIDQyNSwg
ICAgNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyOCwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQzMCwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwg
IDQyNywgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI4LAotICAgICAgNDI1LCAg
NDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDMwLCAgNDI1LCAgNDI1LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgICAwLCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1CisgICAgICA0NTgsICAgIDEsICA0NTksICA0NTksICA0NTgsICAgIDUs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NjEsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NjMsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NjAs
ICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ2MSwgIDQ1OCwg
IDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgICAgMCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY5NV0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs3NDldID0KICAgICB7ICAgMCwK
ICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAx
NiwgICAxNywKICAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywKLSAgICAgICAyNCwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAy
OSwgICAzMCwgICAzMCwgICAzMCwgICAzMCwKLSAgICAgICAzMCwgICAzMCwgICAzMCwgICAzMCwg
ICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKLSAgICAgICAzNiwgICAzNywgICAz
OCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywgICA0NCwKLSAgICAgICA0NSwg
ICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1MywgICAzMCwKLSAg
ICAgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwgICA1OSwgICA2NSwg
ICA2NiwKLSAgICAgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2MSwgICA2MiwgICAg
OCwgICAgOCwgICAgOCwKKyAgICAgICAyMywgICAyNCwgICAyNSwgICAyNiwgICAyNywgICAyOCwg
ICAyOSwgICAzMCwgICAzMCwgICAzMCwKKyAgICAgICAzMCwgICAzMCwgICAzMCwgICAzMCwgICAz
MCwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwKKyAgICAgICAzNSwgICAzNiwgICAzNywg
ICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywKKyAgICAgICA0NCwgICA0
NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1MywKKyAgICAg
ICAzMCwgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwgICA1OSwgICA2
NSwKKyAgICAgICA2NiwgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2MSwgICA2Miwg
ICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAg
OCwgICAgOCwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwg
ICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKIAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4LAogICAgICAgICA4LCAgICA4
LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorICAgICAg
IDYzLCAgICA4LCAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LAogICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4
LCAgICA4LCAgICA4LCAgICA4LAotICAgICAgIDY3LCAgIDcwLCAgIDcyLCAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDkzLAotICAgICAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2
LCAgIDczLCAgIDcxLCAgIDc2LCAgMTIwLCAgIDY4LCAgIDk3LAotICAgICAgMjE2LCAgIDk4LCAg
MjE3LCAgIDk0LCAgMTIxLCAgIDk5LCAgIDc3LCAgIDc4LCAgMTE2LCAgIDc5LAotICAgICAgIDc5
LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgMTE3LCAgIDgzLCAgIDgzLCAgIDgzLAot
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgxLCAgMTAwLCAgMTIzLCAgMTE4LCAgMTU3
LCAgIDgyLAotICAgICAgMTI0LCAgNDI0LCAgIDgxLCAgNDIzLCAgMTI1LCAgMTAxLCAgMTQ3LCAg
IDgxLCAgMTAyLCAgIDg2LAotCi0gICAgICAxMDMsICAgODcsICAgODgsICAxMTAsICAxMDQsICAg
ODEsICAxMDcsICAxMjYsICAxMDgsICAxMDUsCi0gICAgICAxMjgsICAxMTEsICAxMzIsICAxMTIs
ICAgODIsICAxMDYsICAxMTMsICAxMDksICA0MjIsICAxMzMsCi0gICAgICAxMzQsICA0MjEsICAx
MTQsICAxMzcsICA0MjAsICAxMjksICAxMzgsICAxNDEsICAxMzAsICAxMzUsCi0gICAgICAyMDQs
ICAxNDIsICAxMzYsICAxNDMsICAxMzksICAxODQsICAxNDgsICAxNDQsICAxODUsICAxODYsCi0g
ICAgICA0MTksICAxNDAsICAxODcsICA0MTgsICAxODgsICAyMDUsICAxNDUsICAgNzQsICAgNzQs
ICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsICAyMjksCi0gICAgICAyMzAsICA0MTcsICAxNTEsICAyNTQsICAyNTUsICAyNTYs
ICA0MTYsICAgNzgsICAxNTQsICAgNzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAg
ODAsICAxNTEsICAyODAsICAyODEsICAyODIsICA0MTUsCi0gICAgICA0MTQsICAxNTQsICA0MTMs
ICAgNzgsICAgODEsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAx
OTAsICAyODgsICAyODksICAyOTAsICA0MTIsICAxNTUsICAgODEsICAxNTUsICAxOTEsCi0KLSAg
ICAgICA4MSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDI5NywgIDI5OCwg
IDI5OSwKLSAgICAgIDQxMSwgIDQxMCwgICA3OCwgICA4MSwgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywKLSAgICAgIDIxMSwgIDMwNCwgIDMwNSwgIDMwNiwgIDQwOSwgIDIxOSwg
IDQwOCwgIDIxOSwgIDIxMiwgICA4MSwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIy
MCwgIDIyMCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MSwg
IDMwOCwgIDMwOSwgIDMxMCwgIDQwNywgIDIyMSwgIDQwNiwgIDIyMSwKLSAgICAgIDQwNSwgIDE1
NCwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDE1NiwgIDE1NiwKLSAgICAg
IDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NCwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwKLSAgICAgIDE1NiwgIDI3NSwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwg
IDQwNCwgIDI3NiwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIy
MiwgIDIyMiwgIDIyMiwgIDIyMiwKLSAgICAgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwg
IDIyMiwgIDIyMiwgIDIyMiwgIDMxNiwgIDMxNywKLQotICAgICAgMzE4LCAgMzk2LCAgNDAzLCAg
NDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk1LCAgMzk0LCAgMzkzLAotICAgICAgMzkyLCAgMzkx
LCAgMzk3LCAgMzkwLCAgMzk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDkyLAotICAgICAg
IDkyLCAgMTUwLCAgMTUwLCAgMTUyLCAgMzg5LCAgMTUyLCAgMTUyLCAgMzg4LCAgMzg3LCAgMzg2
LAotICAgICAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAg
Mzc3LCAgMzc2LAotICAgICAgMzc1LCAgMzc0LCAgMzczLCAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5
LCAgMzY4LCAgMzY3LCAgMzY2LAotICAgICAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLCAgMzYxLCAg
MzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LAotICAgICAgMzU1LCAgMzU0LCAgMzUzLCAgMzUy
LCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LAotICAgICAgMzQ1LCAgMzQ0LCAg
MzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LAotICAgICAgMzM1
LCAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LAot
ICAgICAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0
LCAgMzEzLAotCi0gICAgICAzMTIsICAzMTEsICAzMDcsICAzMDMsICAzMDIsICAzMDEsICAzMDAs
ICAyOTYsICAyOTUsICAyOTQsCi0gICAgICAyOTMsICAyOTIsICAyOTEsICAyODcsICAyODYsICAy
ODUsICAyODQsICAyODMsICAyNzksICAyNzgsCi0gICAgICAyNzcsICAyNzQsICAyNzMsICAyNzIs
ICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsCi0gICAgICAyNjUsICAyNjQsICAy
NjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTMsCi0gICAgICAyNTIs
ICAyNTEsICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQsICAyNDMsCi0g
ICAgICAyNDIsICAyNDEsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQs
ICAyMzMsCi0gICAgICAyMzIsICAyMzEsICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAy
MjMsICAyMTgsICAyMTUsCi0gICAgICAyMTQsICAyMTMsICAyMTAsICAyMDksICAyMDgsICAyMDcs
ICAyMDYsICAyMDMsICAyMDIsICAyMDEsCi0gICAgICAyMDAsICAxOTksICAxOTgsICAxOTcsICAx
OTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksCi0gICAgICAxODMsICAxODIsICAxODEs
ICAxODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCi0KLSAgICAgIDE3Mywg
IDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwKLSAg
ICAgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE0OSwgIDE0NiwgIDEzMSwg
IDEyNywKLSAgICAgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwgIDQyNSwgICAg
NywgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsICAgIDgsCisgICAg
ICAgIDgsICAgIDgsICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
NzQsCisgICAgICAgNzQsICAgNzQsICAgOTMsICAxMTksICAgNzUsICAgOTUsICAgOTYsICAgNzMs
ICAgNzEsICAgNzYsCisgICAgICAxMjAsICAgNjgsICAgOTcsICAxNTgsICAgOTgsICAxMjMsICAg
OTQsICAxMjEsICAgOTksICAxMjQsCisgICAgICAgNzcsICAgNzgsICA0NTcsICAgNzksICAgNzks
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsCisgICAgICAgNzgsICAxNDgsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODEsCisgICAgICAgODUsICAxMDAs
ICAxNDIsICA0NTYsICAgODIsICAxMDcsICAxNDMsICAxMDgsICAgODEsICAxMDMsCisKKyAgICAg
IDQ1NSwgIDEwMSwgICA4MSwgIDEwNCwgIDEwMiwgIDExMCwgIDEwOSwgICA4NiwgIDEwNSwgICA4
NywKKyAgICAgICA4OCwgICA4MSwgIDExNiwgIDExMSwgIDEwNiwgIDExMiwgIDEyNSwgIDEyOCwg
IDExMywgICA4MiwKKyAgICAgIDExNywgIDE0OSwgIDIwNiwgIDIxOSwgIDExNCwgIDIyMCwgIDEz
MiwgIDEzOCwgIDE3OCwgIDEyNiwKKyAgICAgIDEzOSwgIDExOCwgIDEyOSwgIDEzMywgIDEzNCwg
IDEzMCwgIDE0NCwgIDIwNywgIDE0MCwgIDE5MiwKKyAgICAgIDE0NSwgIDE3OSwgIDQ1NCwgIDEz
NSwgIDEzNiwgIDE0MSwgIDEzNywgIDE5MywgIDQ1MywgIDE0NiwKKyAgICAgICA3NCwgICA3NCwg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgIDE1NCwgIDE1NCwgIDE1NCwKKyAgICAgIDE1
NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDQ1MiwgIDE4NiwgIDE1MiwgIDIxNCwgIDE4NywgIDE4OCwK
KyAgICAgIDIzMiwgIDIzMywgIDE4OSwgIDE1NSwgIDE5MCwgIDIxNSwgIDI1OCwgIDI1OSwgIDI2
MCwgIDE1MiwKKyAgICAgIDI4NSwgIDI4NiwgIDI4NywgIDQyMiwgIDQyMywgICA3OCwgIDE1NSwg
ICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3OCwgIDQ1
MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKworICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDgx
LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgNDUwLCAg
IDgxLCAgMTU2LCAgNDQ5LCAgMTU2LCAgIDgxLCAgNDQ4LCAgMTU3LCAgMTU3LAorICAgICAgMTU3
LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgIDgxLCAgIDc4LCAgMjgwLCAgIDgzLCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgMjgxLCAgMjkzLCAgMjk0LCAgMjk1
LCAgNDQ3LAorICAgICAgMjIyLCAgNDQ2LCAgMjIyLCAgNDQ1LCAgIDgxLCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjIzLCAgMjIzLAorICAgICAgMjIzLCAgMjIzLCAgMzAyLCAgMzAzLCAgMzA0LCAgNDQ0
LCAgNDQzLCAgIDgxLCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAg
MTU0LCAgMzA5LCAgMzEwLCAgMzExLCAgNDQyLCAgNDQxLAorICAgICAgMjI0LCAgNDQwLCAgMjI0
LCAgNDM5LCAgMTU1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMzEzLCAgMzE0LCAgMzE1LCAgNDM4LCAgNDM3LCAgMTU1LCAgMTU3LCAgMTU3LAorICAg
ICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAg
MjIzLAorCisgICAgICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUs
ICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAzMjEsICAz
MjIsICAzMjMsICA0MDMsICA0MDQsICA0MDUsICA0MzYsCisgICAgICA0MzUsICA0MzQsICA0MzMs
ICA0MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MDYsCisgICAgICA0MjYsICA0
MDcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsICAgOTIsICAxNTEsICAxNTEsCisgICAg
ICAxNTMsICA0MjUsICAxNTMsICAxNTMsICA0MjQsICA0MjEsICA0MjAsICA0MTksICA0MTgsICA0
MTcsCisgICAgICA0MTYsICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDks
ICA0MDgsICA0MDIsCisgICAgICA0MDEsICA0MDAsICAzOTksICAzOTgsICAzOTcsICAzOTYsICAz
OTUsICAzOTQsICAzOTMsICAzOTIsCisgICAgICAzOTEsICAzOTAsICAzODksICAzODgsICAzODcs
ICAzODYsICAzODUsICAzODQsICAzODMsICAzODIsCisgICAgICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsICAzNzIsCisKKyAgICAgIDM3MSwgIDM3
MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwKKyAgICAg
IDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywgIDM1
MiwKKyAgICAgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwg
IDM0MywgIDM0MiwKKyAgICAgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMz
NSwgIDMzNCwgIDMzMywgIDMzMiwKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywg
IDMyNiwgIDMyNSwgIDMyNCwgIDMyMCwgIDMxOSwKKyAgICAgIDMxOCwgIDMxNywgIDMxNiwgIDMx
MiwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwgIDMwMSwgIDMwMCwKKyAgICAgIDI5OSwgIDI5OCwg
IDI5NywgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4NCwKKyAgICAgIDI4
MywgIDI4MiwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwK
KyAgICAgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2
MywgIDI2MiwKKyAgICAgIDI2MSwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI1Miwg
IDI1MSwgIDI1MCwgIDI0OSwKKworICAgICAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAg
MjQzLCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LAorICAgICAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1
LCAgMjM0LCAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjIxLCAg
MjE4LCAgMjE3LCAgMjE2LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LAorICAgICAgMjA4
LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LAor
ICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkxLCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLAorICAgICAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAg
MTcwLCAgMTY5LCAgMTY4LAorICAgICAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYy
LCAgMTYxLCAgMTYwLCAgMTU5LCAgMTUwLAorICAgICAgMTQ3LCAgMTMxLCAgMTI3LCAgMTIyLCAg
MTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDU4LAorICAgICAgICA3LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisg
ICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9jaGtbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC02NzcsOCArNjkz
LDggQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdID0KICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgNCwgICAxMiwgICAxMiwKLSAgICAgICAyOCwgICAyOCwgICAgMywgICAgNCwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwKKyAgICAgICAxMiwg
ICAyOCwgICAyOCwgICAgMywgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwKIApAQCAtNjg2LDcyICs3MDIsNzcgQEAgc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2Noa1s2OTVdID0KICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKLSAgICAg
ICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAz
MywKLSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywgICAyMSwgICA0Miwg
ICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0MiwgICAzNSwgICAy
MSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwg
ICAyMywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAy
NiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAgICA0NCwgIDQyMywg
ICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAyNiwKLQotICAgICAg
IDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1LCAgIDM4LCAgIDM3
LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAgIDM5LCAgIDM4LCAg
NDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5LCAgIDQ3LCAgIDUw
LCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAgIDUyLCAgIDUwLCAg
MTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUwLCAgMTIwLCAgNDE2
LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3LAotICAgICAgMTY3
LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAgIDc4LCAgIDc5LAot
ICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1LCAgMjE1LCAgMjE1
LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAgIDgwLCAgIDgwLCAg
IDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2LCAgMjI2LCAgNDA5
LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEsICAgODEsICAgODEs
ICAgODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0MDgsICA0MDcsICAg
ODMsICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAxNDEs
ICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAxNDEsICAgODMsCi0g
ICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMsICAxNTMsICAxNTMs
ICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAyNDUsICAzOTYsICAx
NTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQsICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAx
NTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyMTEsICAyMTks
ICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0gICAgICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEsICAyMjEsCi0gICAg
ICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyNTEsICAy
NTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4NSwgIDM4MiwgIDM4
MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwgIDM4MSwgIDQyNiwg
IDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQyOCwgIDQyOSwgIDM3
MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2NywgIDM2NiwgIDM2NSwg
IDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAgICAgIDM0OSwgIDM0
NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwKLSAgICAg
IDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwgIDMy
NCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMSwg
IDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4NSwgIDI4NCwgIDI3
OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwgIDI3MCwgIDI2OSwg
IDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2MiwgIDI2MSwgIDI2
MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAgICAgMjQ3LCAgMjQ2
LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAgMjMxLAotICAgICAg
MjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjE0LCAgMjEz
LAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjA1LCAgMjA0LCAg
MjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1
LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAg
MTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAgMTY5LCAgMTY4LCAg
MTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0LAotICAgICAgMTQz
LCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLAot
ICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIz
LCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAg
MTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAx
MDMsICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcsICAgOTYsICAgOTUs
ICAgOTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAgNDMsICAgNDAsICAg
MjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3LCAgIDE5LCAgIDIw
LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAgIDMzLCAgIDQyLCAg
IDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQyLCAgIDEzLCAgIDM1
LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAorICAgICAgIDIxLCAg
IDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLAorICAg
ICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4LCAgIDUxLCAgIDM4
LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcsICAgMzYsICAgMzks
ICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAgNDEsICAgMzksICAg
MzcsICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEsICAgNTUsICAxMzUs
ICAxNDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisgICAgICAgNTAsICAg
NDEsICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAsICAxMjIsCisgICAg
ICAgNTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAxMjIsICA0NTEsICAg
NTIsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzgs
ICAgNzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0NTAsICAxMjAsICAg
NzQsICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAsICAgNzgsICAxMjAs
ICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAyMTgsICAyMTgsICA0
MTcsICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAgNzks
ICAgNzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAgODAsCisKKyAgICAg
ICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwgICA3OSwgIDQ0NCwg
ICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MCwgICA4
MywgIDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
IDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0MiwgIDE1MiwgIDQ0
MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAgIDE1MiwgIDE1Miwg
IDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1NCwKKyAgICAgIDE1
NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwgIDQzNywgIDQzNiwK
KyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwgIDQzMywgIDQzMiwg
IDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDIy
MiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIyLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAgMjI0LCAgMjI0LCAg
MjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1
LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAgMzg4LCAgNDMwLAor
ICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIx
LCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDYwLCAg
NDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYyLCAgNDE4LCAgNDE2
LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAgNDAwLCAgMzk5LCAg
Mzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzgz
LCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAorICAgICAgMzczLCAg
MzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAg
ICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAgMzQzLCAgMzQxLCAg
MzQwLAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzIsICAz
MzEsICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTEsICAy
OTAsICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAsICAyNzksICAyNzYs
ICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisgICAgICAyNjgsICAy
NjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQsICAyNTMsCisgICAg
ICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAyNDAsICAyMzYsICAy
MzUsCisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYsICAyMjEsICAyMjAs
ICAyMTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAy
MDksICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEs
ICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAxOTMsICAxOTIsICAx
OTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAgICAgIDE4NCwgIDE4
MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAg
IDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2
MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwgIDE0MCwgIDEzOSwg
IDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEzMSwgIDEzMCwgIDEy
OSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDExOCwg
IDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDExMCwgIDEwOSwgIDEw
OCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAgIDEwMSwgIDEwMCwg
ICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2MCwKKyAgICAgICA1
MywgICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4CiAgICAg
fSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9s
LiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsx
NDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
MTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEsNyBAQCBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9Owor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9
OwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBj
YXRjaAogICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcxLDcg
Kzc5Miw3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9l
b2xbMTQ4XSA9CiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTgyMSw4ICs4NDIsOCBAQCBzdHJ1Y3Qg
eXlndXRzX3QKICAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBv
ZiBzdGFjay4gKi8KICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwg
U3RhY2sgYXMgYW4gYXJyYXkuICovCiAgICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5
X25fY2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOworICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOwor
ICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKICAgICBjaGFyICp5eV9jX2J1Zl9wOwogICAgIGludCB5
eV9pbml0OwogICAgIGludCB5eV9zdGFydDsKQEAgLTg3NSw3ICs4OTYsNyBAQCBGSUxFICp5eWdl
dF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBv
dXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotaW50IHl5Z2V0X2xlbmcgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworeXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwogCiBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIApAQCAtMTA4Niwx
MyArMTEwNywxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAo
IHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0g
NDU5ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkJfQog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5X2N1
cnJlbnRfc3RhdGUgIT0gNDI1ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NTgg
KTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CiAJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBAIC0xNDgxLDIyMCArMTUw
MiwyNTIgQEAgWVlfUlVMRV9TRVRVUAogCVlZX0JSRUFLCiBjYXNlIDkwOgogWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTQ6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTc6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKIHsKICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7IAogICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKIH0K
IAlZWV9CUkVBSwotY2FzZSA5MToKK2Nhc2UgOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+
bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDkyOgorY2FzZSAxMDA6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4
LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDkzOgorY2FzZSAxMDE6CiBZWV9SVUxFX1NFVFVQCi17IGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250
ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KK3sgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJ
bnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVy
biAwO30KIAlZWV9CUkVBSwotY2FzZSA5NDoKK2Nhc2UgMTAyOgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5NToKK2Nhc2UgMTAzOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4o
RkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NjoKK2Nhc2UgMTA0OgogWVlfUlVM
RV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5
dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NzoKK2Nh
c2UgMTA1OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVB
SwotY2FzZSA5ODoKK2Nhc2UgMTA2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFERF9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTk6CitjYXNlIDEwNzoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihTVUJfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMDoKK2Nhc2UgMTA4Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE1VTF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTAxOgorY2FzZSAxMDk6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRElWX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDI6CitjYXNlIDExMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihNT0RfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMzoKK2Nhc2UgMTExOgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKExFRlRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNDoK
K2Nhc2UgMTEyOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDU6CitjYXNlIDExMzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihB
TkRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNjoKK2Nhc2UgMTE0OgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKFhPUl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA3OgorY2Fz
ZSAxMTU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwODoKK2Nhc2UgMTE2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKElOQ19PUCk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMDk6CitjYXNlIDExNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJl
dHVybihERUNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEwOgorY2FzZSAxMTg6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oQU5EX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMToKK2Nhc2Ug
MTE5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDExMjoKK2Nhc2UgMTIwOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhPUl9PUCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMTM6CitjYXNlIDEyMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihM
RV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTQ6CitjYXNlIDEyMjoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihHRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTU6CitjYXNlIDEyMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihFUV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTY6Citj
YXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihORV9PUCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMTc6CitjYXNlIDEyNToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX09QKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDExODoKK2Nhc2UgMTI2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKFJJR0hUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExOToKK2Nhc2UgMTI3OgogWVlfUlVM
RV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjA6CitjYXNlIDEyODoKIFlZX1JVTEVfU0VUVVAKIHsg
Y29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDEyMToKK2Nhc2UgMTI5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklH
SFRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIyOgorY2FzZSAxMzA6CiBZWV9SVUxFX1NF
VFVQCiB7IGlmIChjb250ZXh0LT5pblR5cGVQYXJlbikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0g
ZmFsc2U7IHJldHVybihDT01NQSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjM6CitjYXNlIDEzMToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKENPTE9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNDoK
K2Nhc2UgMTMyOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxz
ZTsgcmV0dXJuKEVRVUFMKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNToKK2Nhc2UgMTMzOgogWVlf
UlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgY29udGV4dC0+aW5U
eXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MjY6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSBm
YWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNzoKK2Nhc2Ug
MTM1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyODoKK2Nhc2UgMTM2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJB
Q0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjk6CitjYXNlIDEzNzoKIFlZX1JVTEVfU0VUVVAK
IHsgQkVHSU4oRklFTERTKTsgIHJldHVybihET1QpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMwOgor
Y2FzZSAxMzg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihCQU5HKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEzMToKK2Nhc2UgMTM5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oREFTSCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMzI6CitjYXNlIDE0MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFRJ
TERFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMzoKK2Nhc2UgMTQxOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4oUExVUyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzQ6CitjYXNlIDE0MjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFNUQVIpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM1OgorY2FzZSAx
NDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTTEFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MzY6CitjYXNlIDE0NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBFUkNFTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTM3OgorY2FzZSAxNDU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZU
X0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzODoKK2Nhc2UgMTQ2OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM5OgorY2FzZSAx
NDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihWRVJUSUNBTF9CQVIpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTQwOgorY2FzZSAxNDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDQVJFVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxNDE6CitjYXNlIDE0OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
KEFNUEVSU0FORCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDI6CitjYXNlIDE1MDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKFFVRVNUSU9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MzoKK2Nhc2Ug
MTUxOgogWVlfUlVMRV9TRVRVUAogeyAKICAgICBCRUdJTihJTklUSUFMKTsKQEAgLTE3MDIsMTIg
KzE3NTUsMTIgQEAgWVlfUlVMRV9TRVRVUAogICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJT047CiB9
CiAJWVlfQlJFQUsKLWNhc2UgMTQ0OgorY2FzZSAxNTI6CiBZWV9SVUxFX1NFVFVQCiB7fQogCVlZ
X0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMTUz
OgorLyogcnVsZSAxNTMgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAogeyAgfQogCVlZ
X0JSRUFLCkBAIC0xNzE2LDExICsxNzY5LDExIEBAIGNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQp
OgogY2FzZSBZWV9TVEFURV9FT0YoRklFTERTKToKIHsgY29udGV4dC0+QWZ0ZXJFT0YgPSB0cnVl
OyB5eXRlcm1pbmF0ZSgpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ2OgorY2FzZSAxNTQ6CiBZWV9S
VUxFX1NFVFVQCi17IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5
eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KK3sgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgIlVu
a25vd24gY2hhciIsIHl5dGV4dCk7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3Ogor
Y2FzZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0xOTA5LDcgKzE5
NjIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
KQogCiAJZWxzZQogCQl7Ci0JCQlpbnQgbnVtX3RvX3JlYWQgPQorCQkJeXlfc2l6ZV90IG51bV90
b19yZWFkID0KIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1i
ZXJfdG9fbW92ZSAtIDE7CiAKIAkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKQEAgLTE5MjMs
NyArMTk3Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIpCiAKIAkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCiAJCQkJewotCQkJCWludCBu
ZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBi
LT55eV9idWZfc2l6ZSAqIDI7CiAKIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQogCQkJCQliLT55
eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CkBAIC0xOTU0LDcgKzIwMDcsNyBAQCBz
dGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCS8q
IFJlYWQgaW4gbW9yZSBkYXRhLiAqLwogCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotCQkJeXlnLT55eV9uX2NoYXJzLCAo
c2l6ZV90KSBudW1fdG9fcmVhZCApOworCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCAp
OwogCiAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKIAkJfQpAQCAtMjAxNiw3ICsyMDY5LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1
OSApCiAJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOwpAQCAtMjA0NSwxMSArMjA5OCwxMSBAQCBzdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCXdoaWxlICggeXlfY2hrW3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewog
CQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlp
ZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQ1OSApCiAJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJfQogCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQyNSk7
CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDU4KTsKIAogCXJldHVybiB5eV9p
c19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KQEAgLTIwNzksNyArMjEzMiw3IEBAIHN0
YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAKIAkJZWxz
ZQogCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwogCQkJKyt5eWctPnl5X2NfYnVmX3A7CiAKIAkJCXN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQpAQCAtMjEwMyw3ICsyMTU2
LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
IAkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CiAJCQkJCXsKIAkJCQkJaWYgKCB5eXdyYXAo
eXlzY2FubmVyICkgKQotCQkJCQkJcmV0dXJuIEVPRjsKKwkJCQkJCXJldHVybiAwOwogCiAJCQkJ
CWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCiAJCQkJCQlZWV9ORVdf
RklMRTsKQEAgLTIzNjYsNyArMjQxOSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCiAgKi8KIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAo
eXlzY2FuX3QgeXlzY2FubmVyKQogewotCWludCBudW1fdG9fYWxsb2M7CisJeXlfc2l6ZV90IG51
bV90b19hbGxvYzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CiAKIAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CkBAIC0yNDY0LDEy
ICsyNTE3LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgogICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3Qg
Y2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5
eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlZWV9CVUZG
RVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG47Ci0JaW50IGk7CisJeXlfc2l6
ZV90IG4sIGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGlu
ZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBA
IC0yNjE5LDcgKzI2NzEsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIp
CiAvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCiAgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotaW50IHl5Z2V0X2xlbmcgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CiAgICAgcmV0dXJuIHl5bGVuZzsKQEAgLTI5MTIsMjAgKzI5NjQsMjAgQEAgdm9pZCBDUFBE
ZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxp
bmVubywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1z
ZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5l
bm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7
CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNo
YXIgKm1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAg
IFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTMwNjEsNyArMzExMyw3IEBAIHZvaWQgSGFuZGxlUHJh
Z21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQogfQogCi12b2lk
IFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5n
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTMx
NjksNyArMzIyMSw3IEBAIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogaW50
IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogCi0gICAgeXlleHRyYS0+ZXJy
b3IoeXlsaW5lbm8sICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7
CisgICAgeXlleHRyYS0+ZXJyb3IoeXlsaW5lbm8sICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3
b3JkIiwgeXl0ZXh0KTsKICAgICB5eWV4dHJhLT5yZWNvdmVyKCk7CiAgICAgcmV0dXJuIDA7CiB9
CkBAIC0zMTc4LDkgKzMyMzAsOSBAQCB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAgIGlmIChjb250ZXh0LT5BZnRl
ckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBl
Y3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24s
ICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5
eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiB9CkBAIC0zMjAyLDE5ICszMjU0LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsKIH0K
IAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCog
Y29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVyKTsK
ICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRleHQtPnNjYW5uZXIp
OwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSW5pdCBwcmVw
cm9jZXNzb3IuCiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0g
MDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0g
Y291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFzdEZpcnN0
U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVy
biBJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFi
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5j
cHAKaW5kZXggMzdhMGYwNS4uMDkyYTM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCkBAIC0yNjMsNyArMjYzLDcgQEAK
IAogCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTM2MCwyMSArMzYw
LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlm
IChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAg
ICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAg
Y29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMg
b25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZ
KFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hB
REVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3Io
TCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NI
QURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFn
bWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJy
b3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQpAQCAtMjE1Nyw3ICsyMTU3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICh5eXZzcFso
MSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxl
OwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKQEAg
LTIxNjYsNyArMjE2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wK
ICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFibGUg
ZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4o
c3ltYm9sKTsKQEAgLTIyMDEsNyArMjIwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAvLyBjaGVj
ayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAgICAgICAvLwogICAgICAgICBpZiAoYWJz
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSkgPj0gKDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25z
dGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIi
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CkBAIC0yMjQ3
LDkgKzIyNDcsOSBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3lt
Ym9sTm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
NCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdl
dFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAi
Iik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZl
Y3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFso
MykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgewpAQCAtMjMzMCw3ICsyMzMwLDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJj
YW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogCkBAIC0yMzc1LDcgKzIzNzUsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJv
dyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxl
bWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVt
ZW50ZWQgeWV0IiwgIi4iKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwogICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKQEAgLTIz
OTMsNyArMjM5Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0g
ZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAg
ICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxk
cyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIs
ICJJbnRlcm5hbCBFcnJvciIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0yNDI1LDEzICsyNDI1LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0u
dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2
ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9CkBAIC0yNTU2LDcgKzI1NTYs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0
ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5n
ZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAi
Q29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJh
bWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRM
aW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5v
dXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNTg2LDcgKzI1ODYsNyBAQCB5eXJlZHVjZToK
ICAgY2FzZSAxNzoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiLCAiIik7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwg
Im1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
OwogICAgIDt9CkBAIC0yNjk3LDcgKzI2OTcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9wID09IEVPcE51
bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNT
dHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9h
dDsKQEAgLTMxOTEsMTIgKzMxOTEsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRGdW5jdGlvbiog
cHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkp
OwogICAgICAgICBpZiAocHJldkRlYykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJl
dHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1
cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUg
cmV0dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1
cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25z
IG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigp
ICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2
ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxl
eCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0
ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBh
cmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTMyNTMsNyArMzI1Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAg
IC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5v
dCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
ImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5
eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTMyNjgsNyArMzI2OCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5v
IHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBx
dWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEg
c2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMzI4OSw3ICszMjg5LDcgQEAg
eXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBv
ZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKQEAgLTM0MTAsNyArMzQxMCw3IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlw
ZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyld
LmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAidW5kZWNsYXJl
ZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogCkBAIC0zNTM4LDcgKzM1MzgsNyBAQCB5eXJlZHVjZToKICAgY2FzZSA5ODoKIAog
ICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikg
LSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25z
IG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7
CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwg
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKQEAgLTM2MTYsNyArMzYxNiw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwg
RXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgaWYgKCEoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN5bWJvbCkKICAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAidW5k
ZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVj
bGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3Ry
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMzYzNSw3ICsz
NjM1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFy
cmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CkBA
IC0zNjQ2LDE5ICszNjQ2LDE5IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0
ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKICAgICAgICAgICAgICgoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3Ig
aW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5x
dWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxp
ZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8
fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdP
dXQpICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CkBAIC0zOTQ3LDcgKzM5NDcsNyBAQCB5eXJlZHVjZToK
IAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRl
cm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgRlJB
R19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CkBAIC0zOTYwLDcgKzM5NjAsNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xl
IikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9y
dGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0Iiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKQEAgLTQwNDQsNyArNDA0NCw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8ICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5zaXplKCk7ICsr
aikgewogICAgICAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0udHlwZUxpc3QpKVtqXS50
eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAoKih5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlz
dCkpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCooeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCooeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4g
c3RydWN0dXJlOiIsICJzdHJ1Y3QiLCAiJXMiLCAoKih5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlTGlzdCkpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtNDQyMSw3ICs0NDIxLDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBv
bmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkg
YWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4
KS5saW5lKTsKQEAgLTQ0MzIsNyArNDQzMiw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7CkBAIC00NDQ0LDcgKzQ0NDQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cFJldHVybiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgaWYgKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9u
LXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIDt9CkBAIC00NDU2LDEwICs0
NDU2LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUp
OwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRW
b2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgp
LmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxp
bmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hp
bmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGlu
ZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgIDt9CkBAIC00NTE3LDcgKzQ1MTcsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIC8vCiAgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBi
b2R5LgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7
CkBAIC00NTI3LDcgKzQ1MjcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBh
bnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtNDU1OSw3ICs0NTU5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0
aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAi
cmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1ODksNyArNDU4OSw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVl
IGlmIHJldHVybiB0eXBlICE9IHZvaWQgPwogICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUg
YXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCiAgICAgICAgIGlmIChj
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYm
ICEgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGRvZXMgbm90
IHJldHVybiBhIHZhbHVlOiIsICIiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1
ZToiLCAiIiwgIiVzIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFt
ZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oCmluZGV4IDU0NDE1NTcuLjQwNDFjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQ1Miw3
ICs0NTIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG5hbWU7IH0KIAogICAgIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVk
ID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVk
OyB9CisgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7
IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQogICAg
IGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQpAQCAtNTMzLDYgKzUzMyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAogICAgICAgICAg
ICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAogICAgICAgICAgICAgZGVwdGgoMCkge30KKyAg
ICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCmluZGV4IGEx
N2MzMTkuLjM5MTU4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNp
bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKIApAQCAtMzA3LDcgKzMwOCw3IEBAIHN0
cnVjdCBBdG9tVGFibGVfUmVjIHsKICAgICBpbnQgc2l6ZTsKIH07CiAKLXN0YXRpYyBBdG9tVGFi
bGUgbGF0YWJsZSA9IHsgeyAwIH0gfTsKK3N0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyBO
VUxMLCAwLCAwIH0sIHsgTlVMTCwgMCwgMCwgezB9IH0sIE5VTEwsIE5VTEwsIDAsIDAgfTsKIEF0
b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CiAKIHN0YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0
b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRvbSk7CkBAIC00MzQsMTQgKzQz
NSwxNCBAQCBzdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBj
aGFyICpzKQogICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1wQXRvbVRhYmxlKSB7CiAg
ICAgICAgICAgICAgICAgaW50IGlpOwogICAgICAgICAgICAgICAgIGNoYXIgc3RyWzIwMF07Ci0g
ICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRo
YW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCisg
ICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBIYXNoIGZhaWxl
ZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3JlYXNlIGhhc2ggdGFibGUg
c2l6ZS4gKioqIiwKICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9UQUJMRV9NQVhfQ09MTElT
SU9OUyk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAKLSAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBk
ZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOworICAgICAgICAgICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9
JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKICAgICAgICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICBmb3IgKGlpID0g
MDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRy
eSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBz
aXplb2Yoc3RyKSwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdp
dGggXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlzaW9u
W2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lv
bltpaV1dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSwxNCArNjg2LDE0IEBAIHZvaWQgUHJpbnRBdG9t
VGFibGUoQXRvbVRhYmxlICphdGFibGUpCiAgICAgY2hhciBzdHJbMjAwXTsKIAogICAgIGZvciAo
aWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKLSAgICAgICAgc3ByaW50Zihz
dHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1h
cFtpaV1dKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVkOiBcIiVzXCIi
LCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOwogICAgICAg
ICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KLSAgICBzcHJpbnRmKHN0ciwgIkhhc2ggdGFi
bGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKKyAgICBzbnByaW50ZihzdHIs
IHNpemVvZihzdHIpLCAiSGFzaCB0YWJsZTogc2l6ZT0lZCwgZW50cmllcz0lZCwgY29sbGlzaW9u
cz0iLAogICAgICAgICAgICBhdGFibGUtPmh0YWJsZS5zaXplLCBhdGFibGUtPmh0YWJsZS5lbnRy
aWVzKTsKICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIGZvciAoaWkgPSAwOyBpaSA8IEhB
U0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgc3ByaW50ZihzdHIsICIg
JWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBz
aXplb2Yoc3RyKSwgIiAlZCIsIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tpaV0pOwogICAgICAgICBD
UFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKaW5kZXggMTNhNWRmMS4u
OGExMDc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCkBAIC01MSw2ICs1MSw3IEBAIE5WSURJQSBIQVMgQkVF
TiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxz
dHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKICNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNjc4LDcgKzY3OSw3IEBAIHN0YXRpYyBpbnQgQ1BQcHJh
Z21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogCQljYXNlIC0xOgogICAgICAgICAgICAgLy8gRU9G
CiAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNwcmFnbWEgZGlyZWN0aXZlIG11c3QgZW5k
IHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlyZXR1cm4gdG9rZW47CisJCQlnb3RvIGZyZWVNZW1v
cnlBbmRSZXR1cm5Ub2tlbjsKIAkJZGVmYXVsdDoKIAkJCVNyY1N0ck5hbWVbMF0gPSB0b2tlbjsK
IAkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOwpAQCAtNjg4LDEwICs2ODksOSBAQCBzdGF0aWMgaW50
IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOwog
CUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7Ci0JdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwogCQorZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNv
dW50OyArK2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyArNzg0LDYg
QEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsKIAogICAg
IGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewogICAgICAgICBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxp
bmUoeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJvcih5
eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZlcnNp
b25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOwotICAg
ICAgICAgICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2Nf
aWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRlbnNp
b24oeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUgQEAgdm9p
ZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRpb24g
PSB7MH07CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJvbCAqc3lt
Ym9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0eXBlcHAg
dmFsID0gezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9
OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCB7MH19OwogICAgIGludCBhdG9tID0g
MDsKIAogICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wp
OwogICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwg
IiVkIiwgdmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9O
QU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQ
X0lOVENPTlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
bmFtZSk7CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBN
QUNST19TKTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwg
eXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKIAlpZiAoYXRv
bSA9PSBfX0xJTkVfX0F0b20pIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldExpbmVO
dW1iZXIoKTsKLSAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2
YWxwcC0+c2NfaW50KTsKKyAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBN
QVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwogICAgICAgICBV
bmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwogICAgICAgICByZXR1cm4gMTsK
ICAgICB9CiAgICAgaWYgKGF0b20gPT0gX19GSUxFX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBw
LT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIoKTsKLSAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+
c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgc25wcmludGYoeXls
dmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5bHZhbHBw
LT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHAp
OwogICAgICAgICByZXR1cm4gMTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAppbmRleCBkYjRjMTg0Li44
MDJlMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKQEAgLTczLDggKzczLDggQEAgdm9pZCAgQ1BQU2hJbmZv
TG9nTXNnKGNvbnN0IGNoYXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNo
LkluZm8uTG8KIHZvaWQgIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKTsgLy8g
UHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZvIGxvZwogdm9pZCAgSGFuZGxlUHJhZ21h
KGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAvLyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250
YWluZXIuCiB2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7ICAgICAgICAgICAgICAgICAgIC8vICNl
cnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lkICBDUFBFcnJvclRvSW5mb0xvZyhjaGFyKik7
ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2guSW5mby5sb2cgICAu
Ci12b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lkICBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2guSW5mby5sb2cu
Cit2b2lkICBTdG9yZVN0cihjb25zdCBjaGFyKik7ICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCiB2b2lkICBTZXRMaW5lTnVtYmVyKGludCk7ICAg
ICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAogdm9pZCAgU2V0U3RyaW5nTnVt
YmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51bWJlci4gICAgCiBpbnQg
ICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVu
dCBTdHJpbmcgTnVtYmVyLiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhM2E1YWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zbGdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oIgorfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Y3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCIKKworY2xhc3MgRGlh
Z25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNzCit7Citwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6
U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIHRleHQpCisgICAgeworICAgICAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1l
LgorICAgIH0KK307CisKK3N0cnVjdCBJbnB1dFNyY0xleGVyCit7CisgICAgSW5wdXRTcmMgYmFz
ZTsKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4
ZXI7Cit9OworCitzdGF0aWMgYm9vbCBDb3B5U3ltYm9sTmFtZShjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBpZiAobmFtZS5sZW5ndGgoKSA+IE1B
WF9TWU1CT0xfTkFNRV9MRU4pCisgICAgeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiQlVG
RkVSIE9WRVJGTE9XIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3RyY3B5
KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbmFtZS5jX3N0cigpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGludCBsZXgoSW5wdXRTcmMqIGluLCB5eXN0eXBlcHAqIHl5bHZhbHBwKQor
eworICAgIElucHV0U3JjTGV4ZXIqIHNyYyA9ICgoSW5wdXRTcmNMZXhlciAqKWluKTsKKworICAg
IGludCByZXQgPSAwOworICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICBzcmMtPmxleGVyLT5sZXgo
JnRva2VuKTsKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUpCisgICAgeworICAgIGNhc2UgMDogIC8v
IEVPRgorICAgICAgICBkZWxldGUgc3JjLT5sZXhlcjsKKyAgICAgICAgZGVsZXRlIHNyYy0+ZGlh
Z25vc3RpY3M7CisgICAgICAgIGZyZWUoc3JjKTsKKyAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQg
PSAwOworICAgICAgICByZXQgPSBFT0Y7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRv
a2VuOjpJREVOVElGSUVSOgorICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUs
IHl5bHZhbHBwKSkKKyAgICAgICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgdG9rZW4udmFsdWUuY19zdHIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0ID0gQ1BQX0lERU5USUZJRVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgIGlmIChDb3B5U3ltYm9sTmFtZSh0b2tlbi52
YWx1ZSwgeXlsdmFscHApKQorICAgICAgICB7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50
ID0gYXRvaSh0b2tlbi52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBD
UFBfSU5UQ09OU1RBTlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpDT05T
VF9GTE9BVDoKKyAgICAgICAgQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKTsK
KyAgICAgICAgcmV0ID0gQ1BQX0ZMT0FUQ09OU1RBTlQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9JTkM6CisgICAgICAgIHJldCA9IENQUF9JTkNfT1A7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ERUM6CisgICAgICAgIHJldCA9IENQUF9E
RUNfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDoKKyAg
ICAgICAgcmV0ID0gQ1BQX1JJR0hUX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfTEU6CisgICAgICAgIHJldCA9IENQUF9MRV9PUDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOgorICAgICAgICByZXQgPSBDUFBfR0VfT1A7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUToKKyAgICAgICAgcmV0ID0gQ1BQ
X0VRX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6CisgICAg
ICAgIHJldCA9IENQUF9ORV9PUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0FORDoKKyAgICAgICAgcmV0ID0gQ1BQX0FORF9PUDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX1hPUjoKKyAgICAgICAgcmV0ID0gQ1BQX1hPUl9PUDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOgorICAgICAgICByZXQgPSBDUFBf
T1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BRERfQVNTSUdO
OgorICAgICAgICByZXQgPSBDUFBfQUREX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9TVUJfQVNTSUdO
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjoKKyAg
ICAgICAgcmV0ID0gQ1BQX01VTF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9ESVZfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfRElWX0FTU0lHTjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR046CisgICAgICAg
IHJldCA9IENQUF9NT0RfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTEVGVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9MRUZUX0FTU0lHTjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjoKKyAgICAgICAg
cmV0ID0gQ1BQX1JJR0hUX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0FORF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9BTkRfQVNTSUdOOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjoKKyAgICAgICAgcmV0
ID0gQ1BQX1hPUl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9PUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9PUl9BU1NJR047CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBTZXRMaW5lTnVtYmVy
KHRva2VuLmxvY2F0aW9uLmxpbmUpOworICAgIFNldFN0cmluZ051bWJlcih0b2tlbi5sb2NhdGlv
bi5maWxlKTsKKyAgICByZXR1cm4gcmV0OworfQorCitJbnB1dFNyYyogTGV4ZXJJbnB1dFNyYyhp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10p
Cit7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzID0gbmV3IERpYWdub3N0aWNzOworICAg
IHBwOjpUb2tlbml6ZXIqIGxleGVyID0gbmV3IHBwOjpUb2tlbml6ZXIoZGlhZ25vc3RpY3MpOwor
ICAgIGlmICghbGV4ZXItPmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBsZXhlcjsKKyAgICAgICAgZGVsZXRlIGRpYWdub3N0aWNzOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnB1dFNyY0xleGVyKiBpbiA9IChJbnB1dFNyY0xleGVy
ICopIG1hbGxvYyhzaXplb2YoSW5wdXRTcmNMZXhlcikpOworICAgIG1lbXNldChpbiwgMCwgc2l6
ZW9mKElucHV0U3JjTGV4ZXIpKTsKKyAgICBpbi0+YmFzZS5saW5lID0gMTsKKyAgICBpbi0+YmFz
ZS5zY2FuID0gbGV4OworICAgIGluLT5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworICAgIGlu
LT5sZXhlciA9IGxleGVyOworCisgICAgcmV0dXJuICZpbi0+YmFzZTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9sZXhlcl9nbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxM2Qz
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9HTFVFX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9HTFVFX0hfCisKK3N0cnVjdCBJbnB1dFNyYzsK
KworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfTEVYRVJfR0xVRV9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5
Li41ZmNhZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lm
bmRlZiBfX01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5o
PgorCiB0eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4g
TWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50
IGFsaWduKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0
LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1
ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAi
dG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0
ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHBy
ZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwg
MykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFp
bmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChu
YW1lLT5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6
OkNvbnRleHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAg
ICAgbU91dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVz
dHJveUxleGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGlu
aXRMZXhlcigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3Mg
aGVyZSBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0
aW1lIGluIHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAg
ICAgVG9rZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0
cmluZyAhPSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAg
IG1JbnB1dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQg
PSBvdXRwdXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8g
UGFyc2UuCi0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0g
ICAgcmVzZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZp
bmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZl
Y3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVj
dG9yKiByZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3
IE1hY3JvKHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChp
c01hY3JvTmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNN
YWNyb0RlZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0
IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFt
ZV0gPSBtYWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6dW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1Nl
dDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0g
bU1hY3Jvcy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJy
b3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChj
b25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1l
KSAhPSBtTWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4K
LXZvaWQgQ29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdp
bigpLCBtTWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigp
OwotCi0gICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1
dCA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0
cmVhbTsKLSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2Vu
KDAsIElOVF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRv
a2VuVmVjdG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsK
LQotICAgIG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Db250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQot
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNs
dWRlICJNYWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1j
bGFzcyBDb250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQo
KTsKLQotICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAg
ICAgIFRva2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBt
TGV4ZXI7IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAg
IFRva2VuVmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRl
ZmluZU1hY3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0
ZXJzLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMp
OwotICAgIGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAg
Ym9vbCBpc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBz
dGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQo
KTsKLSAgICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAg
dm9pZCBkZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1
ZSk7Ci0gICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFu
ZGxlLgotICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAg
TWFjcm9TZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNw
YWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3Bw
CkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3Mu
aCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGlj
czo6fkRpYWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAg
Ly8gVE9ETyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAg
IHByaW50KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25v
c3RpY3M6OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYg
KGlkIDwgRVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+
IFdBUk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdB
Uk5JTkc7CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk0MjFlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFj
ZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJl
cG9ydGluZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNw
b25zaWJsZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3Mg
RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIGVudW0gSUQKKyAgICB7CisgICAgICAgIEVS
Uk9SX0JFR0lOLAorICAgICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01FTU9S
WSwKKyAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVSLAor
ICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8sCisg
ICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAgICAg
ICBVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAg
ICBNQUNST19SRURFRklORUQsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAg
ICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIElO
VkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VORCwKKworICAgICAgICBX
QVJOSU5HX0JFR0lOLAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBXQVJO
SU5HX0VORAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOworCisgICAgdm9p
ZCByZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgZW51bSBTZXZlcml0eQorICAgIHsKKyAg
ICAgICAgRVJST1IsCisgICAgICAgIFdBUk5JTkcKKyAgICB9OworICAgIFNldmVyaXR5IHNldmVy
aXR5KElEIGlkKTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5MWUxYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiRGlyZWN0aXZlSGFuZGxlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFu
ZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKwor
bmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFz
cyBmb3IgaGFuZGxpbmcgZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xh
c3MgdG8gbm90aWZ5IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBk
aXJlY3RpdmVzLiBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxp
bmcgdGhlbSBpbiBhbiBhcHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVy
Cit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisg
ICAgLy8gSGFuZGxlIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYg
bG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgYmVoYXZpb3IpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHZlcnNpb24pID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdmMDYxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCkBA
IC0wLDAgKzEsNDc5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNl
ci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUg
PHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2
ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFj
cm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgi
CisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmlu
ZSgiZGVmaW5lIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1
bmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZigiaWYiKTsKK3N0
YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7CitzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CitzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsc2UoImVsc2UiKTsKK3N0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlRXJyb3IoImVycm9yIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZVByYWdtYSgicHJhZ21hIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUV4
dGVuc2lvbigiZXh0ZW5zaW9uIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZVZlcnNpb24oInZlcnNpb24iKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
TGluZSgibGluZSIpOworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1l
UmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4
ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09
ICJHTF8iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcg
dHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5m
aW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERlZmluZWRQ
YXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERlZmluZWRQYXJzZXIoTGV4
ZXIqIGxleGVyKSA6IG1MZXhlcihsZXhlcikgeyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IEltcGxlbWVudCBtZS4KKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgIH0KKworICBw
cml2YXRlOgorICAgIExleGVyKiBtTGV4ZXI7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVj
dGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9r
ZW5pemVyKHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRs
ZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQorewor
ICAgIGRvCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICBp
ZiAodG9rZW4tPnR5cGUgPT0gJyMnKSBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgfSB3aGls
ZSAodG9rZW4tPnR5cGUgPT0gJ1xuJyk7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT50eXBlID09ICcj
Jyk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSA9
PSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZURlZmluZSkKKyAgICAgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVVbmRlZikKKyAgICAgICAgICAg
IHBhcnNlVW5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmKQorICAgICAgICAgICAgcGFyc2VJZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYg
KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCisgICAgICAgICAgICBwYXJzZUlmZGVm
KHRva2VuKTsKKyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5k
ZWYpCisgICAgICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRv
a2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSkKKyAgICAgICAgICAgIHBhcnNlRWxzZSh0b2tl
bik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxpZikKKyAg
ICAgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRW5kaWYpCisgICAgICAgICAgICBwYXJzZUVuZGlmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZVByYWdtYSkKKyAgICAgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCisgICAgICAg
ICAgICBwYXJzZUV4dGVuc2lvbih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbikKKyAgICAgICAgICAgIHBhcnNlVmVyc2lvbih0b2tlbik7
CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAg
ICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgfQorCisgICAgaWYgKCh0b2tlbi0+dHlwZSAh
PSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gMCkpCisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT52YWx1ZSk7CisKKyAgICB3aGlsZSAodG9rZW4tPnR5cGUgIT0gJ1xuJykKKyAgICB7Cisg
ICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSAwKSB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZF
RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9i
ajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGlu
Z1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0
IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFs
dWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0IGNvbW1h
LgorICAgICAgICB9IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOworCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB0b2tlbiBsb2Nh
dGlvbiBiZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50CisgICAgICAgIC8v
IGxpc3QuIFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tlbjo6ZXF1YWxz
KCkgdG8KKyAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCisgICAgICAgIHRva2VuLT5sb2NhdGlv
biA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2Jh
Y2soKnRva2VuKTsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAg
ICAvLyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0aW9uLgorICAgIE1hY3JvU2V0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKG1hY3JvLm5hbWUpOworICAgIGlmIChpdGVy
ICE9IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3JvLmVxdWFscyhpdGVyLT5zZWNvbmQpKQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVG
SU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5uYW1lKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtTWFjcm9TZXQtPmluc2VydChzdGQ6Om1ha2VfcGFpcihtYWNyby5uYW1lLCBt
YWNybykpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZihUb2tlbiogdG9r
ZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpOworCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIg
PSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9T
ZXQtPmVuZCgpKQorICAgICAgICBtTWFjcm9TZXQtPmVyYXNlKGl0ZXIpOworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9r
ZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgYXNz
ZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWYpOworCisgICAgRGVmaW5lZFBhcnNlciBk
ZWZpbmVkUGFyc2VyKG1Ub2tlbml6ZXIpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRl
cigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Np
b25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsK
KyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IDA7
CisgICAgaWYgKCFleHByZXNzaW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbikpCisg
ICAgeworICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGRpYWdub3N0aWMuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIGEgdmFsaWQgI2lmIGRpcmVjdGl2ZS4g
SGFuZGxlIGl0LgorICAgIC8vIFRPRE8oYWxva3ApOiBQdXNoIGNvbmRpdGlvbmFsIGJsb2NrLgor
fQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7Cisg
ICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVJZmRlZik7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICAv
LyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUlmbmRlZik7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9E
TyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVFbHNlKTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2tw
KTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVs
aWYpOworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1w
bGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKTsK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlRXJyb3IpOworCisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAm
JiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3RyZWFtIDw8
ICp0b2tlbjsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgbURp
cmVjdGl2ZUhhbmRsZXItPmhhbmRsZUVycm9yKHRva2VuLT5sb2NhdGlvbiwgc3RyZWFtLnN0cigp
KTsKK30KKworLy8gUGFyc2VzIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0u
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQoreworICAg
IGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVByYWdtYSk7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBQUkFHTUFfTkFNRSwKKyAgICAgICAgTEVGVF9QQVJFTiwKKyAg
ICAgICAgUFJBR01BX1ZBTFVFLAorICAgICAgICBSSUdIVF9QQVJFTgorICAgIH07CisKKyAgICBi
b29sIHZhbGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKKyAgICBpbnQg
c3RhdGUgPSBQUkFHTUFfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
d2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxB
U1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIFBSQUdNQV9OQU1FOgorICAgICAgICAgICAgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcoJyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKKyAgICAgICAgICAgIHZh
bHVlID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4t
PnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2Vu
LT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFsaWQgPSB2
YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJhZ21hLgor
ICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAgIC8vIFdp
dGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVO
ICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7CisgICAg
fQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90aWZ5IGZv
ciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxl
UHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3Nl
cnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pOworCisgICAgZW51bSBTdGF0
ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBFWFRf
QkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJp
bmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAgICBp
ZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9
IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046
CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0g
VG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlk
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZh
bGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAg
ICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwg
bmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9u
KFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVW
ZXJzaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFZFUlNJT05fTlVNQkVS
CisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCB2ZXJzaW9uID0gMDsK
KyAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
VkVSU0lPTl9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24gPSBhdG9p
KHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVN
QkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAodmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5k
bGVWZXJzaW9uKHRva2VuLT5sb2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJ
bXBsZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSk7
CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwg
bURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDlmZDI5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUg
IkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCitu
YW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5k
bGVyOworY2xhc3MgVG9rZW5pemVyOworCitjbGFzcyBEaXJlY3RpdmVQYXJzZXIgOiBwdWJsaWMg
TGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2Vu
aXplciwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAg
ICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAg
IERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOworCisgICAgdmlydHVhbCB2b2lk
IGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKERpcmVjdGl2ZVBhcnNlcik7CisKKyAgICB2b2lkIHBhcnNlRGlyZWN0aXZlKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZURlZmluZShUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VVbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJZihUb2tlbiogdG9r
ZW4pOworICAgIHZvaWQgcGFyc2VJZmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJ
Zm5kZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxzZShUb2tlbiogdG9rZW4pOwor
ICAgIHZvaWQgcGFyc2VFbGlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVuZGlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVycm9yKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFeHRlbnNpb24oVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VMaW5lKFRva2VuKiB0b2tlbik7CisKKyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7
CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNz
OworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVf
UEFSU0VSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzOTUwNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCkBAIC0wLDAgKzEsMTkxNSBAQAorLyogQSBC
aXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KKworLyogU2tlbGV0b24g
aW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgCisg
ICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2
ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5
IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRo
ZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRl
ciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxm
IGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQg
dmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHks
IGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0
c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4
Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcK
KyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAg
IAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExB
TFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAg
IHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAq
LworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9y
IFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNo
b3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQg
b3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUg
dW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5l
IG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04K
KyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRw
dXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVm
aW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2Rl
ZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNk
ZWZpbmUgWVlQVVJFIDEKKworLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAK
KworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworLyogVXNpbmcgbG9j
YXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vic3RpdHV0ZSB0aGUg
dmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlwYXJzZSAgICAgICAg
IHBwcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAgICAgIHBwbGV4CisjZGVmaW5lIHl5ZXJyb3Ig
ICAgICAgICBwcGVycm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICBwcGx2YWwKKyNkZWZpbmUg
eXljaGFyICAgICAgICAgIHBwY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAgICAgcHBkZWJ1Zwor
I2RlZmluZSB5eW5lcnJzICAgICAgICAgcHBuZXJycworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBh
cnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlz
IGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhw
cmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFt
PgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1
ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6
VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorCisK
K3N0YXRpYyBpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMg
dm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKwor
CisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURF
QlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8K
KyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisj
ZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tF
Tl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCisvKiBUb2tlbnMu
ICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5
cGUgeworICAgICBDT05TVF9JTlQgPSAyNTgsCisgICAgIE9QX09SID0gMjU5LAorICAgICBPUF9B
TkQgPSAyNjAsCisgICAgIE9QX05FID0gMjYxLAorICAgICBPUF9FUSA9IDI2MiwKKyAgICAgT1Bf
R0UgPSAyNjMsCisgICAgIE9QX0xFID0gMjY0LAorICAgICBPUF9SSUdIVCA9IDI2NSwKKyAgICAg
T1BfTEVGVCA9IDI2NiwKKyAgICAgVU5BUlkgPSAyNjcKKyAgIH07CisjZW5kaWYKKworCisKKyNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlw
ZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmlu
ZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisj
IGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyNlbmRpZgorCisKKy8qIENvcHkgdGhlIHNl
Y29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisKKyNpZmRlZiBzaG9ydAor
IyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlU
WVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0
eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVf
SU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5
cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQx
NgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hv
cnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVm
IF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYg
ZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmlu
ZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAg
aW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMg
IGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2ln
bmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJ
WkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZ
RU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRn
ZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZu
ZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisv
KiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNp
ZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAo
KHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlm
CisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0
IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4p
IChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZSUQgKHl5aSkK
KyAgICBpbnQgeXlpOworI2VuZGlmCit7CisgIHJldHVybiB5eWk7Cit9CisjZW5kaWYKKworI2lm
ICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2Vy
IGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4g
ICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExP
Q0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0
aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBp
bmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
IGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisj
ICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQor
IyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVm
aW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICAg
IGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkg
R0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJF
RShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZuZGVmIFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBv
bmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBw
YWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2Fm
ZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBz
bGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxl
ci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFD
S19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRp
ZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZ
U1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBk
ZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAg
aWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisgICAgICAg
JiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAgICYmIChk
ZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RETElCX0gK
KyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYg
WVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1h
bGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisj
ICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVk
IF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lk
IGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBl
bmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8
fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAg
ICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNf
VFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJv
cGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7
CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9Owor
CisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFj
ayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9m
ICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRv
IGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICov
CisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlw
ZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElN
VU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZ
CisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNP
UFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwg
KENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9U
IHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAg
ICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJ
RCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBv
bGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJ
WkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJ
CQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3Rh
Y2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxs
b2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsg
WVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5
eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorCisj
ZW5kaWYKKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0
YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgMTQKKy8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGlu
IFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNzUKKworLyogWVlOVE9LRU5TIC0tIE51
bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDI3CisvKiBZWU5OVFMg
LS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAgMworLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDI2CisvKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlOU1RBVEVTICA1Mgor
CisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1BWFVU
T0sgICAyNjcKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAorICAoKHVuc2lnbmVk
IGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0sp
CisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0
ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAyMSwgICAgIDgsICAgICAyLAorICAgICAgMjUsICAgIDI2LCAgICAxOSwgICAgMTcsICAgICAy
LCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAg
ICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMjIKK307
CisKKyNpZiBZWURFQlVHCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhT
IHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAg
IDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsCisgICAgICAzMSwg
ICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAg
ICA2NywKKyAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkx
Cit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBS
SFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQoreworICAgICAgMjgs
ICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAgIDI5LCAgICAgNCwg
ICAgMjksCisgICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAg
NiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAgICAgLTEsICAgIDI5
LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAgICAtMSwgICAgMjks
CisgICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDExLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxOSwgICAgMjksICAg
IC0xLCAgICAyMywKKyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAgICAtMSwgICAgMTgs
ICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1LCAgICAyOSwgICAg
MjYsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVs
ZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgICA3NCwgICAgNzQsICAgIDgxLCAgICA4MiwgICAg
ODUsICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk3LAorICAgICAxMDAsICAgMTAzLCAgIDEwNiwg
ICAxMDksICAgMTEyLCAgIDExNSwgICAxMTgsICAgMTIxLCAgIDEyNCwgICAxMjcsCisgICAgIDE0
MCwgICAxNTMsICAgMTU2LCAgIDE1OSwgICAxNjIsICAgMTY1LCAgIDE2OAorfTsKKyNlbmRpZgor
CisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorLyogWVlU
TkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0u
CisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBu
b250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Cit7
CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiQ09OU1RfSU5UIiwgIk9QX09SIiwg
Ik9QX0FORCIsICInfCciLAorICAiJ14nIiwgIicmJyIsICJPUF9ORSIsICJPUF9FUSIsICInPCci
LCAiJz4nIiwgIk9QX0dFIiwgIk9QX0xFIiwKKyAgIk9QX1JJR0hUIiwgIk9QX0xFRlQiLCAiJysn
IiwgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJVTkFSWSIsICInISciLAorICAiJ34nIiwg
IicoJyIsICInKSciLCAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9uIiwgMAorfTsKKyNl
bmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJu
YWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAg
IDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAg
MjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYs
ICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAgMjY3LCAgICAzMywgICAx
MjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjkKK307
CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFu
ZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltd
ID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKworLyogWVlERUZBQ1RbU1RB
VEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCisgICBTVEFU
RS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4g
IFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0
LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAx
NCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIx
LAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAgICAgLTEsICAgICA3
LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBv
ZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLworI2RlZmluZSBZWVBB
Q1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAg
ICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAg
ICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywgICAtMTEsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAgMTMwLCAgIDE0Mywg
ICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgIDM3LCAgICAz
NywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsKKworLyogWVlQR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQor
eworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUt
TlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwg
c2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAg
IG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMu
CisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVf
TklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQoreworICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4
LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAy
MCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAg
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKK307CisKK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAy
MCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAg
MywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDE4
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAg
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRo
ZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUg
U1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQorewor
ICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI4
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgIDAsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOQorfTsKKworI2RlZmlu
ZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9
IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2Rl
ZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlh
Ym9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZ
RVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFy
aWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVS
Uk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNp
b24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4g
dXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNv
biAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAg
IGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVm
aW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20g
dGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3
b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ug
d2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNl
cywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRp
ZgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZ
WUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09
IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hh
ciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAg
ICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sg
KDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwK
KyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJ
CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKworCisjZGVmaW5lIFlZ
VEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0t
IFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAw
LCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0
aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCisKKyNkZWZp
bmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisj
IGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJ
CQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9s
aW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAoQ3VycmVudCkuZmly
c3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVu
dCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1
cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJ
fQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50
KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xP
QyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAo
Q3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2Nv
bHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKwor
CisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVh
bS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25s
eSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJl
IHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQK
KyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCisj
ICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAo
RmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYyku
Zmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1
bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3
aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVm
aW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRlZmluZSBZ
WUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdn
aW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYK
KyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklO
VEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQ
UklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJP
TF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJ
CSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1i
b2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwK
KyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJ
ICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAg
RklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29u
c3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoIXl5
dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBpZmRlZiBZWVBSSU5U
CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9r
bnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMg
ZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKwlicmVhazsK
KyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJp
bnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUs
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVl
cCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZ
U1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2Vu
ZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1
dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRG
ICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJv
bF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpOworICBZ
WUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tf
cHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMg
fAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2lu
dDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAor
eXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90
dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChz
dGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRv
bSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5U
RiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJc
biIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8g
ewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgo
Qm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQg
dGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNU
WVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMg
dm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZ
UEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRp
ZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIs
ICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlp
ICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRleHQpOworICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNF
X1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlf
cmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZSUQgKDAp
KQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmlu
aXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwor
aW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFy
Z3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlv
bikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVE
VUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBU
SCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZ
SU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERF
UFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25s
eQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisK
KyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5k
ZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1B
WERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJp
dGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAx
MDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0
cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBk
ZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZ
WVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3Rh
dGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGlj
IFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5k
aWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07
IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBk
ZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3Rw
Y3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0
aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5
eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMg
Y2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAg
Y29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBj
b25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0g
J1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVu
dHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBh
bmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQor
ICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNz
IHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tz
bGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtl
biBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3Rl
YWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBi
ZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3Qg
Y2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0la
RV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9y
ICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywn
OgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAg
aWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkg
ICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkg
ICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBj
YXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAg
ICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisK
KyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJu
IHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkg
aW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2Vu
CisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAg
SWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVy
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3Bl
Y2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgorICAgbWVz
c2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBk
dXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0laRV9UCit5eXN5bnRh
eF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBp
bnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAm
JiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlu
dCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAg
PSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUg
PSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGludCB5eXNpemVfb3Zl
cmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1
IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVN
XTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4
dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBv
biB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7
CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7
CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9y
ICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5n
ICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlmCisgICAgICBjaGFy
ICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0
IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBz
dGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAg
IHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAgY2hhciB5eWZvcm1h
dFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJ
ICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJICAgICAgICogKHNp
emVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rp
bmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5l
Z2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5
eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3Ro
IHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1Qg
LSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5
eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAxOworCisgICAgICB5
eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9y
bWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5
eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZ
WVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUgPSB5eXNpemUwOwor
CQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkg
ICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6
ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9v
dmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJ
ICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0g
eXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEg
PSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlz
aXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisgICAgICBpZiAoeXlz
aXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVz
dWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1
c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2
ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3
cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBp
bnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkg
ICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQor
CQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiAr
PSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0K
KwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZ
RVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlz
IHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50
IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3Rh
dGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQor
ICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2
YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1
ZXApOworICBZWVVTRSAoY29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJE
ZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5
bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6
CisJYnJlYWs7CisgICAgfQorfQorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5n
LXByb3RvdHlwZXMuICAqLworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitp
bnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7Cisj
ZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQ
QVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9p
ZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChD
b250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250
ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9s
LiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2Fo
ZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51bWJlciBvZiBzeW50
YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0
ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdl
cyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tz
IGFuZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAg
ICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0
byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cK
KyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBz
dGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8q
IFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRE
RVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZ
U0laRV9UIHl5c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyog
TG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIu
ICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBz
ZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVz
LiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZm
ZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hh
ciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5
eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVmaW5lIFlZUE9QU1RB
Q0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyogVGhlIG51bWJlciBv
ZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6
ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAw
OworCisgIHl5dG9rZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMgPSB5eXZzYTsKKyAg
eXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFy
dGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7Cisg
IHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJl
IHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3Rl
IG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRo
ZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3
YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAgeXlzc3AgPSB5eXNz
OworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlu
ZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQg
aGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4g
cHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisg
IHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5
eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUg
Y3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwor
ICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3Zl
cmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUg
c3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZv
cmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEg
PSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyogRWFjaCBzdGFjayBw
b2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBp
biB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNv
bmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQK
KwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJm
bG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6
ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJ
CSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAg
ICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NB
VEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0
aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFj
a3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7Cisg
ICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhE
RVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5
YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RB
Q0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVz
dGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tf
UkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQor
IyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNz
ICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJ
ICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsg
eXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5
c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisv
Ki0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoK
KworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3Qg
YWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRv
IGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBnb3RvIHl5ZGVm
YXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBv
ciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09
IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRv
a2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8
PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZ
WURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAg
ZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAg
IFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXls
bG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2Vu
IFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0
aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxB
U1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7
CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlm
ICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXllcnJsYWI7CisgICAg
ICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgLyogQ291bnQg
dG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgor
ICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsK
KworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5U
ICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJk
IHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRl
ID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJl
bnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRl
XTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8g
YSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1
Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICov
CisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxl
bWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisK
KyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdl
LgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNl
cnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5j
b25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lk
cyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXpl
ZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJTlQg
KHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisgICAgewor
ICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSAoeXl2c3BbKDEpIC0gKDEpXSk7CisgICAgICAg
IFlZQUNDRVBUOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OgorCisgICAg
eworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAg
eworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGlm
ICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAi
ICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0
ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAg
ICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMp
IC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0
cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IH4g
KHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSArICh5eXZz
cFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAo
Ii0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5
eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKwor
ICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhl
IHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFz
ZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1i
ZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5
eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYg
eXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlz
dGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3Rv
W3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVj
dGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJl
cG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICAr
K3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yIikpOworI2Vsc2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUg
PSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2Mg
PCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJ
ICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9
IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5
YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1
ZikKKwkgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZ
WVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKKwkgICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2Fs
bG9jID0geXlhbGxvYzsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsK
KwkJeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYg
KDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkg
eXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yIChj
b250ZXh0LCB5eW1zZyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICB5eWVycm9yIChjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKwkgICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7CisJICB9CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisg
IGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5k
IGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2Nh
cmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVy
biBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9G
KQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJy
b3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkg
IHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJl
dXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4u
ICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQg
ZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21w
aWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlF
UlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4g
dXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5
eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BT
VEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
K3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlF
UlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNo
IHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisg
ICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBB
Q1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXlu
IDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5
eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9
CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3Qg
aGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZ
WUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlz
dG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAg
ICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworICAgIH0KKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJv
ciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0s
IHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOwor
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRs
YWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXly
ZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJv
cnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJl
dHVybjsKKworI2lmICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4
aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRs
YWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXly
ZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgor
ICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNj
YXJkaW5nIGxvb2thaGVhZCIsCisJCSB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKyAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAorICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5
eWxlbik7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAh
PSB5eXNzKQorICAgIHsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJ
ICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7
CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZ
U1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5
bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8q
IE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwor
fQorCisKKworCisKK2ludCB5eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tl
bjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpDT05TVF9JTlQ6CisgICAgICAgICpsdmFscCA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkp
OworICAgICAgICB0eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0FORDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTkU6IHR5cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
RVE6IHR5cGUgPSBPUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5
cGUgPSBPUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBP
UF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9S
SUdIVDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xF
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
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDkyZDA1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
aApAQCAtMCwwICsxLDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1l
c3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBU
b2tlbjsKKworY2xhc3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVz
c2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAg
ICBib29sIHBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6Cisg
ICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAg
TGV4ZXIqIG1MZXhlcjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNT
SU9OX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODQzOTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMg
cHJlcHJvY2Vzc29yIGV4cHJlc3Npb24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJz
ZXIuc2guIERPIE5PVCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNlbGlmIGRlZmlu
ZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlm
CisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0Pgor
I2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUg
IkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250
ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIq
IGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAg
Ly8gbmFtZXNwYWNlCislfQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgor
JXBhcnNlLXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29u
dGV4dH0KKworJXsKK3N0YXRpYyBpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCogY29udGV4
dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CislfQorCisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5E
CislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxl
ZnQgJzwnICc+JyBPUF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysn
ICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAg
IDogZXhwcmVzc2lvbiB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9ICQxOworICAgICAg
ICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lOVAorICAg
IHwgZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJicg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNz
aW9uIE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAgIH0KKyAg
ICB8IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4nIGV4cHJl
c3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAn
PCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAgfCBleHBy
ZXNzaW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJScgZXhw
cmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBl
eHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAk
MSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0u
c3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9S
VDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAg
ICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMgVU5BUlkg
eworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMg
VU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Npb24g
JXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygnIGV4cHJl
c3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2ludCB5eWxl
eChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKwor
ICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2Vu
LT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAg
ICpsdmFscCA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICB0eXBlID0gQ09O
U1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0
eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9
IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBPUF9O
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBPUF9FUTsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOworICAgICAgY2Fz
ZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJy
ZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6
IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwor
ICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUg
PSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAg
Y2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7
IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAn
fic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFr
OworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBj
dXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+
bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAg
eworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2Uo
VG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAg
Y29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0g
bUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9
IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChy
ZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlv
biwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCmluZGV4
IDY5NGMzYmQuLmMzZGU5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKQEAgLTYs
MTU5ICs2LDQ5IEBACiAKICNpbmNsdWRlICJJbnB1dC5oIgogCi0jaW5jbHVkZSA8Y3N0ZGlvPgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgcHAKIHsKIAot
SW5wdXQ6OklucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSkKLSAgICA6IG1Db3VudChjb3VudCksCi0gICAgICBtU3RyaW5nKHN0cmlu
ZyksCi0gICAgICBtTGVuZ3RoKGxlbmd0aCksCi0gICAgICBtSW5kZXgoLTEpLAotICAgICAgbVNp
emUoMCksCi0gICAgICBtRXJyb3Ioa0Vycm9yTm9uZSksCi0gICAgICBtU3RhdGUoa1N0YXRlSW5p
dGlhbCkKK0lucHV0OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDApCiB7Ci0gICAgQVNT
RVJUKG1Db3VudCA+PSAwKTsKLSAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKIH0KIAotYm9vbCBJ
bnB1dDo6ZW9mKCkgY29uc3QKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQoY291bnQpLAor
ICAgIG1TdHJpbmcoc3RyaW5nKQogewotICAgIEFTU0VSVChtSW5kZXggPD0gbUNvdW50KTsKLSAg
ICByZXR1cm4gbUluZGV4ID09IG1Db3VudDsKKyAgICBhc3NlcnQobUNvdW50ID49IDApOworICAg
IG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvdW50
OyArK2kpCisgICAgeworICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ldIDogLTE7
CisgICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4obVN0cmluZ1tpXSkg
OiBsZW4pOworICAgIH0KIH0KIAotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNp
emUpCitpbnQgSW5wdXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKIHsKLSAgICBpbnQg
bnJlYWQgPSAwOwotICAgIGludCBzdGFydEluZGV4ID0gbUluZGV4OwotICAgIC8vIEtlZXAgcmVh
ZGluZyB1bnRpbCB0aGUgYnVmZmVyIGlzIGZ1bGwgb3IgdGhlIGN1cnJlbnQgc3RyaW5nIGlzIGV4
aGF1c3RlZC4KLSAgICB3aGlsZSAoKG1JbmRleCA9PSBzdGFydEluZGV4KSAmJiAobnJlYWQgPCBi
dWZTaXplKSkKKyAgICBpbnQgblJlYWQgPSAwOworICAgIHdoaWxlICgoblJlYWQgPCBtYXhTaXpl
KSAmJiAobVJlYWRMb2Muc0luZGV4IDwgbUNvdW50KSkKICAgICB7Ci0gICAgICAgIGludCBjID0g
Z2V0Q2hhcigpOwotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtU3RhdGUgPT0ga1N0YXRlQmxvY2tDb21tZW50KQotICAgICAgICAgICAgICAgIG1FcnJv
ciA9IGtFcnJvclVuZXhwZWN0ZWRFT0Y7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAobVN0YXRlKQorICAgICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJl
YWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRleDsKKyAgICAgICAgc2l6ZSA9IHN0ZDo6bWlu
KHNpemUsIG1heFNpemUpOworICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJl
YWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAgICAgIG5SZWFkICs9
IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOworCisgICAgICAgIC8vIEFk
dmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KKyAg
ICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCiAg
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIGtTdGF0ZUluaXRpYWw6Ci0gICAgICAgICAgICBpZiAo
YyA9PSAnLycpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUG90ZW50aWFsbHkg
YSBjb21tZW50LgotICAgICAgICAgICAgICAgIHN3aXRjaCAocGVla0NoYXIoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgICAgICAg
ICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0g
a1N0YXRlTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVh
dCAnKicuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUJsb2NrQ29tbWVudDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYSBjb21tZW50LgotICAgICAgICAgICAgICAgICAg
ICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUxpbmVDb21tZW50OgotICAgICAgICAgICAgaWYgKGMg
PT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBj
OwotICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlQmxvY2tDb21tZW50
OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIChwZWVrQ2hhcigpID09ICcvJykpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgIC8vIEVhdCAnLycuCi0gICAg
ICAgICAgICAgICAgYnVmW25yZWFkKytdID0gJyAnOyAgLy8gUmVwbGFjZSBjb21tZW50IHdpdGgg
d2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFsOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTGluZSBicmVha3MgYXJlIG5ldmVyIHNraXBwZWQuCi0gICAgICAgICAgICAgICAg
YnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OworICAgICAgICAgICAgbVJl
YWRMb2MuY0luZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBucmVhZDsK
LX0KLQotaW50IElucHV0OjpnZXRDaGFyKCkKLXsKLSAgICBpZiAoZW9mKCkpIHJldHVybiBFT0Y7
Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGMgPSBz
dHJbbVNpemUrK107Ci0KLSAgICAvLyBTd2l0Y2ggdG8gbmV4dCBzdHJpbmcgaWYgdGhlIGN1cnJl
bnQgb25lIGlzIGZ1bGx5IHJlYWQuCi0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5k
ZXgpOwotICAgIC8vIFdlIG5ldmVyIHJlYWQgZnJvbSBlbXB0eSBzdHJpbmcuCi0gICAgQVNTRVJU
KGxlbmd0aCAhPSAwKTsKLSAgICBpZiAoKChsZW5ndGggPCAwKSAmJiAoc3RyW21TaXplXSA9PSAn
XDAnKSkgfHwKLSAgICAgICAgKChsZW5ndGggPiAwKSAmJiAobVNpemUgPT0gbGVuZ3RoKSkpCi0g
ICAgICAgIHN3aXRjaFRvTmV4dFN0cmluZygpOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0KLWludCBJ
bnB1dDo6cGVla0NoYXIoKQotewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlv
bi4KLSAgICBpbnQgaW5kZXggPSBtSW5kZXg7Ci0gICAgaW50IHNpemUgPSBtU2l6ZTsKLSAgICBp
bnQgYyA9IGdldENoYXIoKTsKLQotICAgIC8vIFJlc3RvcmUgcmVhZCBwb3NpdGlvbi4KLSAgICBt
SW5kZXggPSBpbmRleDsKLSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLXZv
aWQgSW5wdXQ6OnN3aXRjaFRvTmV4dFN0cmluZygpCi17Ci0gICAgQVNTRVJUKG1JbmRleCA8IG1D
b3VudCk7Ci0KLSAgICBtU2l6ZSA9IDA7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgICsrbUluZGV4
OwotICAgIH0gd2hpbGUgKCFlb2YoKSAmJiBpc1N0cmluZ0VtcHR5KG1JbmRleCkpOwotfQotCi1i
b29sIElucHV0Ojppc1N0cmluZ0VtcHR5KGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXgg
PCBtQ291bnQpOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhdOwotICAg
IGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICByZXR1cm4gKGxlbmd0aCA9
PSAwKSB8fCAoKGxlbmd0aCA8IDApICYmIChzdHJbMF0gPT0gJ1wwJykpOwotfQotCi1pbnQgSW5w
dXQ6OnN0cmluZ0xlbmd0aChpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50
KTsKLSAgICByZXR1cm4gbUxlbmd0aCA/IG1MZW5ndGhbaW5kZXhdIDogLTE7CisgICAgcmV0dXJu
IG5SZWFkOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5o
CmluZGV4IDVhMWI1ZDEuLmRhYzczNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaApAQCAt
Nyw2NiArNyw0MCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KICNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAKKyNpbmNsdWRlIDx2ZWN0b3I+
CisKIG5hbWVzcGFjZSBwcAogewogCi0vLyBSZWFkcyB0aGUgZ2l2ZW4gc2V0IG9mIHN0cmluZ3Mg
aW50byBpbnB1dCBidWZmZXIuCi0vLyBTdHJpcHMgY29tbWVudHMuCisvLyBIb2xkcyBhbmQgcmVh
ZHMgaW5wdXQgZm9yIExleGVyLgogY2xhc3MgSW5wdXQKIHsKICAgcHVibGljOgorICAgIElucHV0
KCk7CiAgICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKIAotICAgIGVudW0gRXJyb3IKLSAgICB7Ci0gICAgICAgIGtFcnJv
ck5vbmUsCi0gICAgICAgIGtFcnJvclVuZXhwZWN0ZWRFT0YKLSAgICB9OwotICAgIEVycm9yIGVy
cm9yKCkgY29uc3QgeyByZXR1cm4gbUVycm9yOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IHN0cmluZ0luZGV4
KCkgY29uc3QgeyByZXR1cm4gbUluZGV4OyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIEVPRiBo
YXMgcmVhY2hlZC4KLSAgICBib29sIGVvZigpIGNvbnN0OworICAgIGludCBjb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CiAKLSAgICAvLyBSZWFkcyB1cCB0byBi
dWZTaXplIGNoYXJhY3RlcnMgaW50byBidWYuCi0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgcmVhZC4KLSAgICAvLyBJdCByZXBsYWNlcyBlYWNoIGNvbW1lbnQgYnkgYSB3
aGl0ZXNwYWNlLiBJdCByZWFkcyBvbmx5IG9uZSBzdHJpbmcKLSAgICAvLyBhdCBhIHRpbWUgc28g
dGhhdCB0aGUgbGV4ZXIgaGFzIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGUgc3RyaW5nIG51bWJl
cgotICAgIC8vIGZvciBtZWFuaW5nZnVsIGRpYWdub3N0aWMgbWVzc2FnZXMuCi0gICAgaW50IHJl
YWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSk7CisgICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQg
bWF4U2l6ZSk7CiAKLXByaXZhdGU6Ci0gICAgZW51bSBTdGF0ZQorICAgIHN0cnVjdCBMb2NhdGlv
bgogICAgIHsKLSAgICAgICAga1N0YXRlSW5pdGlhbCwKLSAgICAgICAga1N0YXRlTGluZUNvbW1l
bnQsCi0gICAgICAgIGtTdGF0ZUJsb2NrQ29tbWVudAotICAgIH07CisgICAgICAgIGludCBzSW5k
ZXg7ICAvLyBTdHJpbmcgaW5kZXg7CisgICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4
LgogCi0gICAgaW50IGdldENoYXIoKTsKLSAgICBpbnQgcGVla0NoYXIoKTsKLSAgICAvLyBTd2l0
Y2hlcyBpbnB1dCBidWZmZXIgdG8gdGhlIG5leHQgbm9uLWVtcHR5IHN0cmluZy4KLSAgICAvLyBU
aGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IHN0cmluZyBpcyBmdWxseSByZWFkLgotICAg
IHZvaWQgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBn
aXZlbiBzdHJpbmcgaXMgZW1wdHkuCi0gICAgYm9vbCBpc1N0cmluZ0VtcHR5KGludCBpbmRleCk7
Ci0gICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIHN0cmluZy4KLSAgICAvLyBS
ZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgZm9yIG51bGwtdGVybWluYXRlZCBzdHJpbmdzLgotICAg
IGludCBzdHJpbmdMZW5ndGgoaW50IGluZGV4KTsKKyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRl
eCgwKSwgY0luZGV4KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2Mo
KSBjb25zdCB7IHJldHVybiBtUmVhZExvYzsgfQogCisgIHByaXZhdGU6CiAgICAgLy8gSW5wdXQu
CiAgICAgaW50IG1Db3VudDsKICAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsKLSAgICBj
b25zdCBpbnQqIG1MZW5ndGg7Ci0KLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAg
aW50IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQu
Ci0gICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNjYW5uZWQuCisg
ICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwogCi0gICAgLy8gQ3VycmVudCBlcnJvciBhbmQg
c3RhdGUuCi0gICAgRXJyb3IgbUVycm9yOwotICAgIFN0YXRlIG1TdGF0ZTsKKyAgICBMb2NhdGlv
biBtUmVhZExvYzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TGV4ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjYzZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5MZXhlcigp
Cit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4NWNlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9M
RVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhl
cgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmNwcAppbmRleCBmY2NjYTk2Li5iMmUzMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwCkBAIC02LDM5ICs2LDE3IEBACiAKICNpbmNsdWRlICJNYWNyby5oIgogCi0jaW5j
bHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCisjaW5jbHVkZSAiVG9r
ZW4uaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLU1hY3JvOjpNYWNybyhUeXBlIHR5cGUsCi0gICAg
ICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHBh
cmFtZXRlcnMsCi0gICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykKLSAgICA6
IG1UeXBlKHR5cGUpLAotICAgICAgbU5hbWUobmFtZSksCi0gICAgICBtUGFyYW1ldGVycyhwYXJh
bWV0ZXJzKSwKLSAgICAgIG1SZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKQotewotfQotCi1NYWNy
bzo6fk1hY3JvKCkKK2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgZGVsZXRlIG1OYW1lOwotCi0gICAgaWYgKG1QYXJhbWV0ZXJzKQotICAgIHsKLSAg
ICAgICAgc3RkOjpmb3JfZWFjaChtUGFyYW1ldGVycy0+YmVnaW4oKSwgbVBhcmFtZXRlcnMtPmVu
ZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUGFyYW1ldGVyczsKLSAgICB9Ci0KLSAg
ICBpZiAobVJlcGxhY2VtZW50cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVJlcGxh
Y2VtZW50cy0+YmVnaW4oKSwgbVJlcGxhY2VtZW50cy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAg
ICAgZGVsZXRlIG1SZXBsYWNlbWVudHM7Ci0gICAgfQorICAgIHJldHVybiAodHlwZSA9PSBvdGhl
ci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgorICAgICAgICAg
ICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAgICAocmVwbGFj
ZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKaW5kZXggZTI0MzMwNi4uNjNiMzA1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyby5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTcsNDUgKzcsMzIgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01B
Q1JPX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogCisjaW5jbHVk
ZSA8bWFwPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KIG5hbWVzcGFjZSBw
cAogewogCi1jbGFzcyBNYWNybworc3RydWN0IFRva2VuOworCitzdHJ1Y3QgTWFjcm8KIHsKLSAg
cHVibGljOgogICAgIGVudW0gVHlwZQogICAgIHsKICAgICAgICAga1R5cGVPYmosCiAgICAgICAg
IGtUeXBlRnVuYwogICAgIH07CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9pbnRlciBw
YXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0cmluZyog
bmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICBUb2tl
blZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9yKiBwYXJh
bWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBUb2tlblZl
Y3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsgfQotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQotICAgIFR5
cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9yKiBtUGFy
YW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29sIGVxdWFs
cyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgVHlwZSB0eXBlOworICAgIHN0ZDo6
c3RyaW5nIG5hbWU7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcmFtZXRlcnM7Cisg
ICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKIH07CiAKLX0gIC8vIG5hbWVzcGFj
ZSBwcAotI2VuZGlmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwordHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0OwogCit9ICAvLyBuYW1lc3BhY2UgcHAK
KyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBmMTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApAQCAt
MCwwICsxLDI4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4ZXIq
IGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykg
OgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlh
Z25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRv
a2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIG1M
ZXhlci0+bGV4KHRva2VuKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZmU5ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9N
QUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQ
QU5ERVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNs
dWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7
CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAg
IE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7
CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWFjcm9FeHBh
bmRlcik7CisKKyAgICBMZXhlciogbUxleGVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7Cisg
ICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
I2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKaW5kZXggZWY0OWU1Ny4uMTJj
ZmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCkBAIC02
LDQ3ICs2LDI5IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4
dC5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVz
cGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVM
TCkKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKGRpYWdub3N0aWNzKSwKKyAgICBtRGlyZWN0aXZlUGFy
c2VyKCZtVG9rZW5pemVyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxl
ciksCisgICAgbU1hY3JvRXhwYW5kZXIoJm1EaXJlY3RpdmVQYXJzZXIsICZtTWFjcm9TZXQsIGRp
YWdub3N0aWNzKQogewogfQogCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IoKQorYm9vbCBQ
cmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp
bnQgbGVuZ3RoW10pCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OwotfQotCi1ib29sIFByZXByb2Nl
c3Nvcjo6aW5pdCgpCi17Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29udGV4dDsKLSAgICByZXR1cm4g
bUNvbnRleHQtPmluaXQoKTsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNv
dW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCi17Ci0g
ICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291
bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXNldCgpOwotCi0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcs
IGxlbmd0aCwgJm1Ub2tlbnMpOworICAgIHJldHVybiBtVG9rZW5pemVyLmluaXQoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJl
cHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vu
cy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigp
OworICAgIG1NYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAppbmRleCA4ODViYjcwLi5k
ZGJlMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApAQCAtNywz
NCArNyw0MiBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hf
CiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJE
aXJlY3RpdmVQYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgIk1hY3JvRXhw
YW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLWNs
YXNzIENvbnRleHQ7CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7
CiAKIGNsYXNzIFByZXByb2Nlc3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7
Ci0gICAgflByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogCi0gICAgYm9v
bCBpbml0KCk7CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBzcGVjaWZp
ZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6IHNwZWNp
ZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGggaXMgTlVM
TCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgLy8g
SWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8gYW4gYXJy
YXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0aGUgY29y
cmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50IGluIHRo
ZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLyBjb3Jy
ZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRlIHRoYXQg
dGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGluaXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
IAotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtVG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOwog
CiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7
CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKLSAgICAv
LyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBD
b250ZXh0KiBtQ29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0cHV0Lgor
ICAgIE1hY3JvU2V0IG1NYWNyb1NldDsKKyAgICBUb2tlbml6ZXIgbVRva2VuaXplcjsKKyAgICBE
aXJlY3RpdmVQYXJzZXIgbURpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1NYWNy
b0V4cGFuZGVyOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2Nh
dGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApAQCAtMCwwICsxLDM4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNF
X0xPQ0FUSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJ
T05fSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbgoreworICAg
IFNvdXJjZUxvY2F0aW9uKCkgOiBmaWxlKDApLCBsaW5lKDApIHsgfQorICAgIFNvdXJjZUxvY2F0
aW9uKGludCBmLCBpbnQgbCkgOiBmaWxlKGYpLCBsaW5lKGwpIHsgfQorCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgU291cmNlTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIChmaWxlID09IG90aGVyLmZpbGUpICYmIChsaW5lID09IG90aGVyLmxpbmUpOworICAgIH0K
KworICAgIGludCBmaWxlOworICAgIGludCBsaW5lOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhz
KQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJo
cykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAppbmRleCBhMmU3NTljLi44OTNkMDcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCkBAIC02LDUwICs2LDQ4IEBACiAKICNpbmNsdWRl
ICJUb2tlbi5oIgogCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgY29uc3QgaW50
IGtMb2NhdGlvbkxpbmVTaXplID0gMTY7ICAvLyBpbiBiaXRzLgotc3RhdGljIGNvbnN0IGludCBr
TG9jYXRpb25MaW5lTWFzayA9ICgxIDw8IGtMb2NhdGlvbkxpbmVTaXplKSAtIDE7Ci0KIG5hbWVz
cGFjZSBwcAogewogCi1Ub2tlbjo6TG9jYXRpb24gVG9rZW46OmVuY29kZUxvY2F0aW9uKGludCBs
aW5lLCBpbnQgZmlsZSkKK3ZvaWQgVG9rZW46OnJlc2V0KCkKIHsKLSAgICByZXR1cm4gKGZpbGUg
PDwga0xvY2F0aW9uTGluZVNpemUpIHwgKGxpbmUgJiBrTG9jYXRpb25MaW5lTWFzayk7CisgICAg
dHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291cmNlTG9jYXRpb24o
KTsKKyAgICB2YWx1ZS5jbGVhcigpOwogfQogCi12b2lkIFRva2VuOjpkZWNvZGVMb2NhdGlvbihM
b2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKQorYm9vbCBUb2tlbjo6ZXF1YWxzKGNv
bnN0IFRva2VuJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoZmlsZSkgKmZpbGUgPSBsb2MgPj4g
a0xvY2F0aW9uTGluZVNpemU7Ci0gICAgaWYgKGxpbmUpICpsaW5lID0gbG9jICYga0xvY2F0aW9u
TGluZU1hc2s7CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAg
IChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAgICAgICAgICAgKGxvY2F0aW9uID09IG90aGVy
LmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodmFsdWUgPT0gb3RoZXIudmFsdWUpOwogfQogCi1U
b2tlbjo6VG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFs
dWUpCi0gICAgOiBtTG9jYXRpb24obG9jYXRpb24pLAotICAgICAgbVR5cGUodHlwZSksCi0gICAg
ICBtVmFsdWUodmFsdWUpCit2b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQp
CiB7CisgICAgaWYgKHN0YXJ0KQorICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9MSU5FOwor
ICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7CiB9CiAKLVRva2Vu
Ojp+VG9rZW4oKSB7Ci0gICAgZGVsZXRlIG1WYWx1ZTsKK3ZvaWQgVG9rZW46OnNldEhhc0xlYWRp
bmdTcGFjZShib29sIHNwYWNlKQoreworICAgIGlmIChzcGFjZSkKKyAgICAgICAgZmxhZ3MgfD0g
SEFTX0xFQURJTkdfU1BBQ0U7CisgICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+SEFTX0xFQURJ
TkdfU1BBQ0U7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91
dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKQotICAg
IHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05TVEFOVDoK
LSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFsdWUoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0YXRpY19j
YXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAo
dG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBvdXQg
PDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFjZSBwcAog
Cit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCmluZGV4IDRmNWEx
MmIuLjAyZmQwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApAQCAtNyw0MiArNyw4MyBA
QAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1j
bGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGludCBM
b2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGlu
dCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGlu
dCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIExBU1Qg
PSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHN0cmluZy4KLSAgICBU
b2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0g
ICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAKLSAgICBMb2NhdGlvbiBs
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAgIGludCB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyogdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAorICAgICAgICBDT05TVF9G
TE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbik7
CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAg
ICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBP
UF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAor
ICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FT
U0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAg
ICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9Q
X1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FT
U0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAg
eworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJ
TkdfU1BBQ0UgPSAxIDw8IDEKKyAgICB9OwogCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAg
IGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIFRva2VuKCkgOiB0eXBl
KDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhj
b25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
aXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVh
ZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJu
IChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRP
ZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRI
YXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBpbnQgdHlwZTsKKyAgICBpbnQgZmxh
Z3M7CisgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7
CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVm
IFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJl
dHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMo
cmhzKTsKK30KIAogZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0m
IG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJi
NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzMzUgQEAKKyNs
aW5lIDE2ICIuL1Rva2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisKKwor
I2xpbmUgMTMgIi4vVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hv
cnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNk
ZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVm
aW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVS
U0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9C
RVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMg
b3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhl
YWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBo
ZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZu
ZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8
aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRl
ZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAor
CisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVk
aW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3Mg
Zm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmlu
ZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4K
K3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhf
dDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhf
dWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJf
dCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7
Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMy
X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3Vp
bnQzMl90OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBl
cy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAo
LTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAg
ICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElO
VDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5U
OF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZu
ZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNl
bmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAo
MjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFY
ICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5l
IFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJf
TUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlm
CisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyog
VGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUg
WVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVp
cmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENf
XykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19f
KSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAor
I2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKwor
LyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8q
IFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFu
IHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUg
c2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQg
YXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAq
LworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIp
IGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1ND
QU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5
eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMg
dGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50
IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXln
LT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5n
IHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXls
aW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5
eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5l
IHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBj
b25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAor
ICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5
IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lO
IHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFy
dCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJ
TiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAor
ICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQg
LSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBm
b3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVf
RU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBh
Y3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUg
WVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8K
KyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgor
CisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRl
IHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRF
X0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQor
CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZf
WVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZF
Ul9TVEFURTsKKyNlbmRpZgorCisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVm
aW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgor
CisgICAgI2RlZmluZSBZWV9MRVNTX0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQg
dGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFt
LiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2Fy
ZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJ
CSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZT
RVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2Fy
ZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRl
eHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5
dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfVFlQ
RURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6
ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyog
aW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24g
aW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywg
bm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3Np
emVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQg
eXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdl
IGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0
LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlf
aXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlu
cHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1
dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRv
IG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5l
LgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29u
c2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14n
IHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBu
b3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwg
VGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1u
IGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1
ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmls
bF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJf
TkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVu
IHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdl
IG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQor
CSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUu
ICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRo
b3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVu
IHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3Igor
CSAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2Fu
bmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAq
LworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlf
U1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNj
ZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRv
IHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3Rh
dGUiLgorICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8K
KyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyog
U2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUg
YnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBG
b3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9p
ZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9p
ZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAq
ZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1
c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lk
IHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixG
SUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZG
RVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29u
c3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBw
cF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owordm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3ZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5l
IHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFj
dGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiAp
eyBcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVy
KHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNk
ZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKXtcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9C
T0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVz
ZXIgc2VjdDMgKi8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JB
UAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3Rh
dGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0
ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRf
c3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZm
ZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5
Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIg
dGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBj
b3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RP
X0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0g
KHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7
IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZp
bmUgWVlfTlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMg
c3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2Ug
aXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90
IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAgICAg
IDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDks
CisgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMsICAg
IDUsICAgIDUsCisgICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAgMzAs
ICAgMjUsICAgMTIsICAgMjMsCisgICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEsICAg
MjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTQs
ICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIsICAg
MjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAgMTAs
ICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsCisg
ICAgICAgMTAsICAgMTAsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAg
ICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAx
LCAgICA5LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAg
IDE1LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3
LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAg
IDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAorICAg
ICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAg
IDIxLAorCisgICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYsICAg
IDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsy
N10gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAg
ICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9iYXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAgMjYs
ICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIsICAg
MjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAgNDYs
ICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQsCisg
ICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTks
ICAxNTksCisgICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMsICAg
MzIsICAgNTYsICAgODMsCisgICAgICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAxNTks
ICAxNTksICAgMTksICAgIDAsICAxNTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAsICAx
NTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAgNTIs
ICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAsICAx
MjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAgIDgz
LCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAg
IDg2LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAgIDIx
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgzLCAg
IDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAorICAg
ICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAg
IDcyLAorICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9Cisg
ICAgeyAgIDAsCisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIs
ICAgMTMsICAgMTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAg
MjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUs
ICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzksICAg
NTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAgNjEs
ICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYsCisg
ICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAgNTAs
ICAgNTIsCisgICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEsICAg
ODEsICAgODEsICAgNTAsCisgICAgICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAgNjgs
ICAgNjgsICAgNjgsICAgNjYsICAgNTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcsICAg
NjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAgNTAs
ICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4Mywg
ICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwKKyAg
ICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1Niwg
ICA2NywKKyAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwgICA3
OCwgICA3OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4MSwg
ICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAy
OCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3MCwg
ICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAg
ICAzLCAgICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0
LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAgIDIw
LCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIxLCAg
IDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAorICAg
ICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAg
IDQ5LAorICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3
LCAgIDQ3LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAg
IDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAg
NTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNjcs
ICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjksICAg
NjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisgICAg
ICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAg
ODIsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAgIDks
ICAgODYsICAgODYsCisgICAgICAgODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgsICAg
ODgsICAgIDUsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBk
ZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGlj
aCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9k
ZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisj
ZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAor
LyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNp
ZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyNp
bmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVk
ZSAiVG9rZW4uaCIKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6
U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFy
aWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5
Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAw
OyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAg
eXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVm
aW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAg
ICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgp
KSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49
IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4Kysp
OyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUg
PSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQo
YnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFk
KGJ1ZiwgbWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQor
CisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9s
ZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3Qg
eXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZs
ZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBh
cmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQg
c2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9i
dWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZ
WV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgaW50IHl5X25fY2hhcnM7CisgICAgaW50
IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAg
aW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAg
aW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Cisg
ICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQg
eXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0
X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZ
WVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAv
KiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2Ug
WVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1
dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgor
ICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgcHBs
ZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlf
RVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3Nv
ciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgcHBsZXhfZGVzdHJv
eSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBz
ZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBn
ZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0X3RleHQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKwordm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
dm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQg
Y2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24g
MS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorZXh0ZXJu
IGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisjZW5kaWYKKworI2lm
bmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNv
bnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZ
X05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRp
ZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCBy
ZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJ
WkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVk
IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0
byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdz
LAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0
ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVm
ZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEws
CisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2Rl
ZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7
IFwKKwkJaW50IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZb
bl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNo
YXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZB
VEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQg
PSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChy
ZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4p
KSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZB
VEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFr
OyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBc
CisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29y
cmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdh
bnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVz
ZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVt
ZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJl
dHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3Rh
cnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNS
CisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBm
YXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxf
RVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQorI2VuZGlmCisKKy8q
IGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisK
Ky8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBz
byB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZ
WV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgcHBsZXggXAor
ICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19w
YXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNMIGludCBwcGxleCBc
CisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxv
Y19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisv
KiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRl
eHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VS
X0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0
ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5l
IFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlf
VVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBh
bGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3Rl
ciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLworCisgICAgeXlsdmFsID0g
eXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAheXln
LT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9J
TklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkK
KwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICgg
ISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQg
PSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0K
KwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0K
KworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAx
ICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3Np
dGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4K
KwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlf
Y3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
KwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkJ
fQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5
X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlvbjoJLyogVGhpcyBsYWJl
bCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJCXN3aXRjaCAoIHl5
X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLworCQkJY2FzZSAwOiAv
KiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JF
X0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKworY2FzZSAx
OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNvbW1lbnQgKi8KKy8qIExp
bmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisvKiBUaGUgY29t
bWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitjYXNlIDI6CitZWV9SVUxF
X1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVf
U0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSwor
Y2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgKyt5
eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXll
eHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKwlZWV9C
UkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMgaXMgb25seSB2YWxpZCBh
dCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICBpZiAoeXll
eHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7
CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXlleHRy
YS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVS
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlv
bih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQorCVlZX0JSRUFLCitj
YXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCVlZX0JSRUFLCitjYXNl
IDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKwlZWV9CUkVBSworLyog
QW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBh
IG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZs
b2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxp
bmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRl
eHQsIHl5bGVuZykpOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVG
VDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQor
CVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9C
UkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNl
IDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
Mjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsK
K30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7
IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlf
UlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xu
Jyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6
OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykpOworfQorCVlZX0JSRUFL
CitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQp
OgoreworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBF
T0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAg
IHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2Nh
dGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBz
dGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXgg
IT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBp
ZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBp
bnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5k
ZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAg
IH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxp
bmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVO
VCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFL
CisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0
Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkv
KiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNv
dXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRo
ZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxl
ZAorCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBj
b25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2Jh
bHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhp
cyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2st
dXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJ
CXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsK
KwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9S
TUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3Ag
Ijw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVy
LCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50
ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRy
YW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250
cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICgg
eXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJ
eXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2th
eSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9u
LiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhl
YWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRv
IGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24n
dAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJ
CQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9
IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5
eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRf
c3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSAr
K3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsK
KwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJ
CX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHBwd3JhcCh5eXNj
YW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAq
IHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlm
IHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJ
CQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9O
VUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0
IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJU
KTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJ
CQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVX
X0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciAr
IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJ
Z290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55
eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJ
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJS
T1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91
bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2Fu
bmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHBwbGV4ICovCisKKy8qIHl5X2dldF9uZXh0
X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBj
b2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJ
RU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBv
c2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJcmVnaXN0
ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJl
Z2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVt
YmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAx
XSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVy
cm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0
aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3Ag
LSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1h
dGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBh
cyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJ
CQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8g
dGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0Jf
QUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4g
Ki8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJ
bnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRl
c3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRv
IHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1
c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQlpbnQgbnVtX3Rv
X3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJl
cl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBO
b3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3Qg
YSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NU
QVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0K
KwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVm
X3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3Np
emUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUg
Kj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9v
bSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9j
aF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJ
CQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1
ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAor
CQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJ
CQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKwor
CQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0K
KwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQg
PiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsK
KworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9j
aGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCWlmICggeXlnLT55eV9u
X2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREog
KQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQlwcHJlc3RhcnQo
eXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVP
Ql9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNl
CisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkg
KHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMg
dGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXln
LT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxv
Yygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAs
eXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRf
bmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21v
dmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwor
CXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlsw
XTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBn
ZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisg
ICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwor
CXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0
YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlf
Y3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIg
eXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5
eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJy
ZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFu
c2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3Rh
dGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwlyZWdpc3RlciBZWV9D
SEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJewor
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJ
CXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
KwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0g
KHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOworCisJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9j
dXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3Bs
dXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisg
ICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJ
aW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYg
KCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyog
eXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4u
CisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBp
dCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3
YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxz
ZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSB5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dp
dGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2Ug
RU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25f
YigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2Vu
IGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tl
biBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICog
dGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUg
RU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJ
CSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0Jf
QUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkK
KwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJ
CXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlz
Y2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXln
LT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAq
Kyt5eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlf
Tk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1
dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlv
biBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICov
CisgICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PQorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5u
ZXIpOworCX0KKworCXBwX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUg
LHl5c2Nhbm5lcik7CisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8q
KiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZm
ZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9T
VEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RPLiBX
ZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkg
KiB3aXRoCisJICoJCXBwcG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQlwcHB1c2hfYnVmZmVyX3N0
YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47
CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3Jt
YXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWct
Pnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZm
ZXI7CisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24ndCBh
Y3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAo
cHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlz
IGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAq
IHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5
X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlpbiA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6
ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVh
bS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdo
ZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4K
KyAqLworICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUs
IGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsK
KyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwli
LT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFj
dGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBw
dXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0g
KGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlmICgg
ISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsK
KworCXBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOworfQor
CisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3
aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAg
YiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsKKwor
CWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBw
b3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFU
RSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCXBwZnJlZSgodm9pZCAqKSBi
LT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5l
ciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgorICog
VGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBz
YW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgor
ICovCisgICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIs
IEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9IGVy
cm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKworCXBwX2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5wdXRf
ZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0
aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAg
ICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZl
ci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVu
byBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewor
ICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAw
OworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJy
bm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBP
biB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRo
ZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZF
Ui4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9p
ZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKwor
CS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmly
c3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAg
VGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5
X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1Zlsw
XTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQlwcF9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8g
dGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4g
VGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4K
KyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZ
X0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAo
bmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwcGVuc3VyZV9idWZmZXJfc3RhY2so
eXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3Rv
X2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBv
dXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9z
ID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3Rz
LiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9m
IHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhl
IG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICgh
WVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVM
TDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1ZmZl
cl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhp
c3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0
YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CWludCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJ
CS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9u
J3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2Ug
dXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9u
IHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAxOworCQl5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYworCQkJ
CQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJ
CQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJf
c3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAw
LCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpeworCisJCS8qIElu
Y3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlp
bnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19h
bGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJ
CQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEg
eXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5
IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwor
CX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3Rs
eSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNl
IHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBv
ZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRF
IGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4g
Ki8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2Yo
IHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigp
IiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJl
IG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9j
aGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55
eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3Rh
dHVzID0gWVlfQlVGRkVSX05FVzsKKworCXBwX3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVy
ICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUg
dG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4g
ZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0
ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisg
KiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZh
bHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZ
WV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkg
d2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRl
cyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5
dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVz
ICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVf
dCBuOworCWludCBpOworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNs
dWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAy
OworCWJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiAp
CisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0
ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZb
aV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVu
KzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHBwX3NjYW5fYnVmZmVyKGJ1Zixu
ICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVy
IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhp
cyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9u
ZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOworfQorCisj
aWZuZGVmIFlZX0VYSVRfRkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlm
CisKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBt
c2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNz
KCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNk
ZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0
dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7
IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRb
eXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4
dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9j
X2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhv
ZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0
aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdl
dCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1
cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitpbnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0
cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxF
ICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9
CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUg
Y3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCitpbnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJu
IHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnBwZ2V0X3RleHQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhl
IHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nh
bm5lci4KKyAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICovCit2b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQor
CisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVy
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNl
dF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMu
ICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0
YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5l
cik7IAorICAgIAorICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhl
IGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29s
dW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMg
b25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29s
dW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNv
bHVtbiA9IGNvbHVtbl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRv
ZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBp
bl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHBwc2V0X2lu
IChGSUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGlu
X3N0ciA7Cit9CisKK3ZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1
ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9
CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9k
cyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRf
bHZhbCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQg
cHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJs
ZSBBUEkgKi8KKworLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0
aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rp
b24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisg
KiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVh
ZCBvZiB1c2luZyBvdXIgbWFjcm9zLgorICovCisKK2ludCBwcGxleF9pbml0KHl5c2Nhbl90KiBw
dHJfeXlfZ2xvYmFscykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAg
ICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpw
dHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0
c190ICksIE5VTEwgKTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAg
ICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBC
eSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVh
dmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscyww
eDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2Jh
bHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhl
IHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNv
bnZlbnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3Rl
IGhvd2V2ZXIsIHRoYXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBp
dCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwg
dG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRp
b24pLgorICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2ls
bCBiZSBhdmFpbGFibGUgdG8gcHBhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8K
KworaW50IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlz
Y2FuX3QqIHB0cl95eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95
eWd1dHM7CisKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRz
KTsKKworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBF
SU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMg
PSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlf
eXlndXRzICk7CisJCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAg
ZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBC
eSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxz
LiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9i
YWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHBwc2V0X2V4dHJh
ICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5
X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2lu
aXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlv
biBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxs
b2NhdGUgaGVyZS4KKyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IDA7CisgICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5
X2luaXQgPSAwOworICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9z
dGFja19wdHIgPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNp
ZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0Owor
I2Vsc2UKKyAgICB5eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7Cisj
ZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3Is
IHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiBwcGxleF9pbml0KCkKKyAgICAgKi8KKyAg
ICByZXR1cm4gMDsKK30KKworLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQg
YW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJv
eWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQlwcF9k
ZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7
CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXBwZnJlZSh5eWctPnl5
X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7
CisKKyAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAg
IHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55
eV9zdGFydF9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBp
cyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQor
ICAgICAqIHBwbGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwor
ICAgIHl5X2luaXRfZ2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1h
aW4gc3RydWN0IChyZWVudHJhbnQgb25seSkuICovCisgICAgcHBmcmVlICggeXlzY2FubmVyICwg
eXlzY2FubmVyICk7CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKwor
LyoKKyAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRf
cHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIg
KiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJ
Zm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisK
KyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25z
dCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlm
b3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwor
dm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CXJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqcHByZWFsbG9jICAo
dm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8q
IFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgK
KwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5k
IHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdp
dGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0
bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQg
ZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFz
c2lnbm1lbnQuCisJICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwg
c2l6ZSApOworfQorCit2b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hh
ciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK25h
bWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9z
dGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5l
cigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkg
cmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1
cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxl
bmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjps
ZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1
ZSwmdG9rZW4tPmxvY2F0aW9uLG1IYW5kbGUpOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxp
bmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+
dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5s
ZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCiti
b29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxM
KSAmJiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxl
ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7
CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQxMTQwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDUzIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1
ZGUgIklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgor
CituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXpl
ciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7
CisgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1
dDsKKyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2Vu
IGxvY2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5w
dXQ6Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8v
IGlmIHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAg
ICAgICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFj
ZTsKKyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5p
dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pOworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgor
ICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIpOworICAgIGJvb2wgaW5p
dFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7CisKKyAgICB2b2lkKiBtSGFu
ZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5u
ZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTQ3YTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIubApAQCAtMCwwICsxLDMxOSBAQAorLyoKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wg
RVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQ
cmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli
cmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5F
RUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0b3B7CisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4g
RE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKKyNpbmNsdWRl
ICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYgc3RkOjpzdHJp
bmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVz
ZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVt
YmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAg
ICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5
bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBc
CisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2Mg
PSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9j
LT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkp
KSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+
bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsg
eXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAr
PSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl
KDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVz
dWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0aW9u
IG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJp
c29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24g
ZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJ
TkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BV
TkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQg
ICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJ
TUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAgICBb
MC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxf
Q09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAg
ICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29tbWVu
dCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQu
ICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICov
IAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5U
PiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7
CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsK
K30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHBy
ZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIGlmICh5eWV4dHJhLT5saW5lU3RhcnQpIHsKKyAg
ICAgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICAgICAgcmV0dXJuIHl5dGV4
dFswXTsKKyAgICB9IGVsc2UgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpKTsKKyAgICB9Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9
CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05T
VEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtG
UkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9
CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lU
fSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQg
aW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJ
R0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsK
K30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisiPDwiIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKyI8PSIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsK
K30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKyIhPSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOworfQorInx8
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisiLT0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorIi89IiB7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKK30KKyI8PD0iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKyIm
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9Cisi
fD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRPUn0geworICAgIHl5bHZhbC0+
YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKworWyBcdFx2
XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQorCit7TkVXTElORX0gewor
ICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJu
ICdcbic7Cit9CisKKy4geworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30K
KworPCo+PDxFT0Y+PiB7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9y
IGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFu
dWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6
SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJ
bmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5M
b2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25seSBy
ZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBl
bmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNj
YW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVu
byA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+
bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFS
VCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0
ZXJtaW5hdGUoKTsKK30KKworJSUKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29u
dGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6
ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+
IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0
ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIo
KTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4t
PnR5cGUgPSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsK
KworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAg
bUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5z
ZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5s
ZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkK
K3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRl
eHQsICZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAs
IG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJv
eVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsK
KworICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0
ZV9wYXJzZXIuc2gKaW5kZXggNWIzMmY3MS4uZTljNzBiMSAxMDA3NTUKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFy
c2VyLnNoCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jh
c2gKLSMgQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAKLSMgR2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0g
cHBfbGV4LmNwcCwgcHBfdGFiLmgsIGFuZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3Vz
IGNvbXBvbmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlu
cHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9s
ZXguY3BwCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRf
ZGlyLyQyCiBmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNl
ICRpbnB1dF9maWxlCiB9CiAKIHJ1bl9iaXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGly
LyQxLnkKLW91dHB1dF9oZWFkZXI9JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9
JHNjcmlwdF9kaXIvJDFfdGFiLmNwcAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2Mu
YyAtLWRlZmluZXM9JG91dHB1dF9oZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0
X2ZpbGUKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9k
aXIvJDIKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1
dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0KIAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMg
R2VuZXJhdGUgcHJlcHJvY2Vzc29yCi1ydW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxl
eCBUb2tlbml6ZXIubCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55
IEV4cHJlc3Npb25QYXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjI3Y2EwNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCisrKyAvZGV2L251bGwKQEAg
LTEsMTgxICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFp
bnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2Vk
IG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1o
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1J
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2guCi0qLwotCi0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewot
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1
ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAg
IHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVt
biArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVm
aW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRy
YS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4
dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24g
bm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVu
dHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlv
biBwcmVmaXg9InBwIgotJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFD
RSAgICAgIFsgXHRdCi1IQVNIICAgICAgICBee0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklF
UiAgW19hLXpBLVpdW19hLXpBLVowLTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwm
fj0hOjssP10KLQotREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05T
VEFOVCAgICAgICAgMFswLTddKgotSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEt
Rl0rCi0KLURJR0lUICAgICAgICAgICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBb
ZUVdWystXT97RElHSVR9KwotRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lU
fSspfCh7RElHSVR9KyIuIikKLQotJSUKLQote0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hB
U0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3Zh
bCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RF
RklORV9PQko7Ci19Ci17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0KLXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJu
IEhBU0hfVU5ERUY7IH0KLQote0hBU0h9aWYgeyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZk
ZWYgeyByZXR1cm4gSEFTSF9JRkRFRjsgfQote0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZO
REVGOyB9Ci17SEFTSH1lbHNlIHsgcmV0dXJuIEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJl
dHVybiBIQVNIX0VMSUY7IH0KLXtIQVNIfWVuZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJk
ZWZpbmVkIiB7IHJldHVybiBERUZJTkVEOyB9Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hf
RVJST1I7IH0KLXtIQVNIfXByYWdtYSB7IHJldHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0
ZW5zaW9uIHsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJu
IEhBU0hfVkVSU0lPTjsgfQote0hBU0h9bGluZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lE
RU5USUZJRVJ9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBJREVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2
YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09O
U1RBTlQ7Ci19Ci0KLSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNU
QU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BV
TkNUVUFUT1J9IHsgcmV0dXJuIHl5dGV4dFswXTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3Jl
IHdoaXRlc3BhY2UgKi8gfQotCi1cbiB7Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwot
ICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0KLTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUo
KTsgfQotCi0lJQotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBz
dHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7
SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8g
ZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8g
c3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7
Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAg
aWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7
Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0Ojpy
ZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9O
VUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5l
cnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09
IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAg
ICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUs
ICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAg
eXlzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhl
cik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAg
ICAgICBpZiAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVP
RikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4K
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5
bGV4X2luaXRfZXh0cmEodGhpcywgJm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHl5cmVzdGFydCgwLCBtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENv
bnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxl
eF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1NTE5M2FiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBA
QAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1h
ciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElDSCBHRU5F
UkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBU
aGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BB
UkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVyZS1wYXJz
ZXIKLSVuYW1lLXByZWZpeD0icHAiCi0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3BwOjpDb250
ZXh0KiBjb250ZXh0fQotCi0ldW5pb24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5n
KiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0
OwotfQotCi0lewotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxv
Y3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0g
ICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxC
bG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQg
cG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0ldG9rZW4g
SEFTSCBIQVNIX1VOREVGCi0ldG9rZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZOREVGIEhB
U0hfRUxTRSBIQVNIX0VMSUYgSEFTSF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9FUlJPUiBI
QVNIX1BSQUdNQSBIQVNIX0VYVEVOU0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0ldG9rZW4g
PHN2YWw+IEhBU0hfREVGSU5FX09CSiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2YWw+IElO
VF9DT05TVEFOVCBGTE9BVF9DT05TVEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4gb3BlcmF0
b3IKLSV0eXBlIDx0dmFsPiBjb25kaXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRsaXN0PiBw
YXJhbWV0ZXJfbGlzdCByZXBsYWNlbWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9rZW5fbGlz
dAotJSUKLQotaW5wdXQKLSAgICA6IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5lCi07Ci0K
LWxpbmUKLSAgICA6IHRleHRfbGluZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRleHRfbGlu
ZQotICAgIDogJ1xuJwotICAgIHwgdG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29u
dGV4dC0+b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQxLT5iZWdp
bigpLCAkMS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1jb250cm9s
X2xpbmUKLSAgICA6IEhBU0ggJ1xuJwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxhY2VtZW50
X2xpc3QgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUs
IHBwOjpNYWNybzo6a1R5cGVPYmosICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwgSEFTSF9E
RUZJTkVfRlVOQyAnKCcgcGFyYW1ldGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7
Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6
a1R5cGVGdW5jLCAkMSwgJDMsICQ1KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElERU5USUZJ
RVIgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAgIH0KLSAg
ICB8IEhBU0hfSUYgY29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlv
bmFsQmxvY2soY29udGV4dCwgJDIgPyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8IEhBU0hf
SUZERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29u
dGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lG
TkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250
ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0VM
SUYgY29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0UgJ1xuJyB7
Ci0gICAgfQotICAgIHwgSEFTSF9FTkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxC
bG9jayhjb250ZXh0KTsKLSAgICB9Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8IEhBU0hf
UFJBR01BICdcbicKLSAgICB8IEhBU0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hfVkVSU0lP
TiAnXG4nCi0gICAgfCBIQVNIX0xJTkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0Ci0gICAg
OiAvKiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1wYXJhbWV0
ZXJfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElERU5USUZJ
RVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNo
X2JhY2sobmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkpOwotICAg
IH0KLSAgICB8IHBhcmFtZXRlcl9saXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xpbmUsIElE
RU5USUZJRVIsICQzKSk7Ci0gICAgfQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBjb25kaXRp
b25hbF90b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAg
JCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBjb25kaXRp
b25hbF90b2tlbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIp
OwotICAgIH0KLTsKLQotdG9rZW5fbGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAkJCA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAg
ICB8IHRva2VuX2xpc3QgdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVz
aF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBERUZJTkVE
IElERU5USUZJRVIgewotICAgIH0KLSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIgJyknIHsK
LSAgICB9Ci0gICAgfCB0b2tlbgotOwotCi10b2tlbgotICAgIDogb3BlcmF0b3IgewotICAgICAg
ICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAgIH0KLSAg
ICB8IElOVF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9s
aW5lLCBJTlRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFOVCB7Ci0g
ICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwg
JDEpOwotICAgIH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3BlcmF0b3IK
LSAgICA6ICdbJyB7ICQkID0gJ1snOyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQotICAgIHwg
JzwnIHsgJCQgPSAnPCc7IH0KLSAgICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAnKCcgeyAk
JCA9ICcoJzsgfQotICAgIHwgJyknIHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQkID0gJ3sn
OyB9Ci0gICAgfCAnfScgeyAkJCA9ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7IH0KLSAg
ICB8ICcrJyB7ICQkID0gJysnOyB9Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAgIHwgJy8n
IHsgJCQgPSAnLyc7IH0KLSAgICB8ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScgeyAkJCA9
ICclJzsgfQotICAgIHwgJ14nIHsgJCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0gJ3wnOyB9
Ci0gICAgfCAnJicgeyAkJCA9ICcmJzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0KLSAgICB8
ICc9JyB7ICQkID0gJz0nOyB9Ci0gICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwgJzonIHsg
JCQgPSAnOic7IH0KLSAgICB8ICc7JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAkJCA9ICcs
JzsgfQotICAgIHwgJz8nIHsgJCQgPSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVycm9yKFlZ
TFRZUEUqIGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQot
ewotfQotCi12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBi
b29sIGNvbmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250
ZXh0KiBjb250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJz
ZSgpCi17Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/
IHRydWUgOiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXgu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfbGV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3ZTdjYy4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcF9sZXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI2OCArMCwwIEBACi0jbGlu
ZSAxNiAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5P
VCBFRElUIQotCi0KLQotI2xpbmUgMTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4
LmNwcCIKLQotI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNh
bCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0j
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhf
U1VCTUlOT1JfVkVSU0lPTiA+IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmly
c3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMg
aXNzdWVzLiAqLwotCi0vKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8
c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotCi0vKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4
IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmlu
ZSBGTEVYSU5UX0gKLQotLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkg
c3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9O
X18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYg
eW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8K
LSNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9T
IDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhf
aW50OF90OwotdHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBm
bGV4X2ludDE2X3Q7Ci10eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGlu
dDMyX3QgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vs
c2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBm
bGV4X2ludDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVk
IGNoYXIgZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWlu
dDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEg
Qzk5ICovCi0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9N
SU4KLSNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRl
ZiBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0j
ZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAg
KC0yMTQ3NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9N
QVggICAgICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmlu
ZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9N
QVgKLSNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgot
I2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkK
LSNlbmRpZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAg
ICAgKDY1NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9N
QVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJ
TlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1j
bGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNl
ICAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUg
ZGVmaW5lZCBhcyAxLiAqLwotI2lmIGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VT
RV9DT05TVAotCi0jZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAh
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
LQotI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9P
Rl9GSUxFIDEKLSNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdl
IHNwZWNpZmljYWxseSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVj
YXVzZSBpdCByZXF1aXJlcwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFi
bGUgeXlfYWN0LiBTaW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAg
ICAqICAgICAgIGV4aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJ
REUgcHBsZXguIAotICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2Ug
eXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUl
IHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2Fj
dCBpcwotICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFi
bGUtLSBzbyBpdCBpcyBub3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVT
U19MSU5FTk8obikgXAotICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5
bDtcCi0gICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCAp
XAotICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0g
ICAgCi0vKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBi
YWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8g
XAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0
ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAg
IFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0g
ICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJn
IC0gWVlfTU9SRV9BREo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZp
bmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQot
I2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVf
VAotdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAg
ICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5
eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwot
Ci0gICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9v
bSBmb3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlf
YnVmX3NpemU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hf
YnVmLCBub3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAg
aW50IHl5X25fY2hhcnM7Ci0KLSAgICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBp
LmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQg
dG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0g
ICAgICovCi0gICAgaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMg
aXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3
ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0g
ICAgICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBp
bnB1dCBhZnRlcgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7Ci0KLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQg
dGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJl
IGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAq
LwotICAgIGludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBs
aW5lIGNvdW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3Vu
dC4gKi8KLSAgICAKLSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZm
ZXIgd2hlbiB3ZSByZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50
IHl5X2ZpbGxfYnVmZmVyOwotCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUg
WVlfQlVGRkVSX05FVyAwCi0jZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4g
YW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNz
Ci0gICAgICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGlu
ZGljYXRlIHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5w
dXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2gg
b2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBi
YWNraW5nLXVwLgotICAgICAqCi0gICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwg
d2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwg
c28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBv
aW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVG
RkVSX0VPRl9QRU5ESU5HIDIKLQotICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZG
RVJfU1RBVEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIg
c3RhdGVzIGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZl
ciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBS
ZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NV
UlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0g
XAotICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlv
dXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBp
cyBub3QKLSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVz
ZSBvbmx5LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1
ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChG
SUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3Rv
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlf
QlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVy
X3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRp
YyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0
aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0
aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBf
c2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAo
eXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9p
ZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJl
ZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVy
IHBwX2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJh
Y3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAg
ICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAg
fQotCi0jZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nh
bm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAg
ICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0g
ICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKLSAgICB9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFw
KG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZ
X0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0
ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90
cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsK
LXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0
YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4g
bWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVw
IHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5
dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1ww
JzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxF
UyAyMwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3Qg
dXNlZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4g
Ki8KLXN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJp
Znk7Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2FjY2VwdFsxMDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAyNCwgICAyMywgICAyMSwgICAyMiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAx
NywgICAxNywgICAyMSwgICAgMSwgICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwK
LSAgICAgICAgMCwgICAxOCwgICAxNywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAg
MCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwg
ICAxOCwgICAxNywgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAxNywgICAgMCwgICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAxNiwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAg
ICAgICAxMiwgICAgMCwgICAgNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwg
ICAgMCwKLSAgICAgICAgNywgICAxMywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAg
MCwgICAgMCwgICAgMiwKLQotICAgICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwg
ICAgMywKLSAgICAgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAg
NiwgICAgMSwgICAgNSwgICAgNSwgICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwg
ICAgNSwgICAgOCwgICAgOSwgICAgNSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAx
MSwgICAxMSwgICAxMSwgICAxMSwgICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAg
ICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAx
MywKLSAgICAgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwg
ICAxNSwgICAxNSwKLSAgICAgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAx
NSwgICAxNiwgICAxNSwgICAxNSwKLSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwg
ICAgMSwgICAxNywgICAxMywgICAxMywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAg
IDE1LCAgIDIyLCAgIDE1LCAgIDE1LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3
LCAgIDE1LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAg
IDE1LCAgIDE1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X21ldGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MiwgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAg
ICAgNCwgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAg
NSwKLSAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywg
ICAgNywgICAgNywKLSAgICAgICAgNywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwg
ICAxOCwgIDE4NCwgIDE4NSwgICAxMSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAg
ICAgICAgMCwgIDE2NCwgICAzOSwgICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwg
ICA0NCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2
MiwgICA0NiwgIDE2MCwKLSAgICAgIDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0Nywg
ICA2NSwgICAgMCwgIDE1MywgIDE1NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2
NywgIDE0NSwgIDE1MiwgIDE1MCwgIDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0Mywg
IDE0NCwgIDE0NCwgIDE0MCwgIDEzNSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEz
NSwgIDEzNiwgIDEyNSwgIDEzNCwgIDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAg
IDEyNCwgIDEyOCwgIDEyOCwgIDE4NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4
NSwKLSAgICAgIDE4NSwgIDExMiwgIDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwg
IDEwNywgICA4NiwKLSAgICAgIDE4NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4
NSwgICA5NywgICAxMCwgIDE4NSwKLQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEw
LCAgMTE0LCAgMTE4LCAgMTIxLCAgMTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAx
MDYsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQs
Ci0gICAgICAxMDgsICAgMTAsICAxMDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAx
MDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDgsICAxMDYsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQs
ICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAx
MTAsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfbnh0WzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2
LCAgICA1LCAgICA3LCAgICA0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAg
IDEwLCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAg
ICAgICA2LCAgICA1LCAgICA3LCAgIDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAg
IDEwLAotICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4
LCAgIDE4LCAgIDE5LAotICAgICAgIDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAg
IDIwLCAgIDM1LCAgIDE5LCAgIDE5LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3
LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAg
IDIyLCAgIDIyLCAgIDI1LCAgIDIwLCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIw
LCAgIDI3LCAgIDQzLCAgIDM3LCAgIDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAg
IDUxLCAgIDUxLCAgIDk1LCAgIDU0LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5
LAotICAgICAgIDU1LCAgIDYwLCAgIDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAg
MTAwLCAgMTAwLAotCi0gICAgICAgOTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAg
OTMsICAgOTYsICAgOTUsICAxMDEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEs
ICAgMTEsICAgMTEsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAg
MTYsICAgMzgsICAgMzgsICAgMzgsICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgs
ICAgOTgsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAg
OTAsICAgODksICAgODgsICAgODcsICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEs
Ci0gICAgICAgODAsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAg
NzIsICAgNzEsCi0gICAgICAgNzAsICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQs
ICAgNjMsICAgNjIsICAgNjEsCi0gICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAg
NDksICAgNDgsICAgNDcsICAgNDYsICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQs
ICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwK
LSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAg
IH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsg
ICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAg
IDE4LCAgICAxLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAg
IDE4LCAgIDk5LCAgICAyLCAgICA5LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5
LCAgIDEzLCAgICA5LCAgIDEzLCAgIDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAg
IDE2LCAgIDIwLCAgIDE3LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2
LAotICAgICAgICA5LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAg
IDI5LCAgIDI1LAotICAgICAgIDI5LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3
LCAgIDM1LCAgIDI5LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAg
IDUwLCAgIDUwLCAgIDUwLCAgIDE0LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0
LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQs
ICAgMTQsICAgOTgsICAxMDIsICAxMDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAx
MDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYs
Ci0gICAgICAxMDYsICAxMDcsICAgODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAg
ODYsICAgODUsCi0gICAgICAxMDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAs
ICAxMTAsICAxMTAsICAgODQsCi0gICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAg
NzUsICAgNzMsICAgNzIsICAgNzEsICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQs
ICAgNjMsICAgNjIsICAgNjEsICAgNjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAg
NTUsICAgNTQsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQs
ICAgNDMsICAgNDIsICAgNDAsICAgMzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0g
ICAgICAgMjgsICAgMjQsICAgMTIsICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywg
dHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAs
IDEsIDAsICAgICB9OwotCi0vKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMg
dGhhdCBpdCdsbCBjYXRjaAotICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2Vk
LgotICovCi0jZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVm
aW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9S
RV9BREogMAotI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3Ig
R0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAy
MDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgot
Ci0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9j
LT5maXJzdF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3Rf
Y29sdW1uID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1
ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1
ZiwgbWF4U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUo
Y29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmlu
ZSBZWV9FWFRSQV9UWVBFIHBwOjpDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRl
IG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQot
ICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRS
QV9UWVBFIHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUg
Z2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJ
TEUgKnl5aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8q
KjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
bWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5
X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hv
bGRfY2hhcjsKLSAgICBpbnQgeXlfbl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hh
ciAqeXlfY19idWZfcDsKLSAgICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAg
aW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tf
cHRyOwotICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0
YWNrOwotICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hh
ciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGlu
dCB5eV9mbGV4X2RlYnVnX3I7Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9y
ZV9mbGFnOwotICAgIGludCB5eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsK
LQotICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRz
X3QgKi8KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi0gICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBF
IGFyZSBpbmNsdWRlZAotICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwot
ICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZp
bmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCog
c2Nhbm5lcik7Ci0KLWludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVm
aW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFs
cy4KLSAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBm
b3IgY29udmVuaWVuY2UuICovCi0KLWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBw
cHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9F
WFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNl
dF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi1GSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRf
aW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRf
b3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LWludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xp
bmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAq
IHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZ
U1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlM
VFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZv
aWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0gICAgCi0vKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRk
ZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYg
WVlfU0tJUF9ZWVdSQVAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFw
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0
YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlz
Y2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRp
YyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIp
OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1z
dGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBp
bnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAg
c3RhdGljIHZvaWQgeXlfcHVzaF9zdGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2Fu
bmVyKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotICAgIAotICAgIHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSAgICAKLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2gg
cmVhZC4gKi8KLSNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9T
SVpFIDgxOTIKLSNlbmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hl
ZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQg
dG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwn
cywKLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5
dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1
ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxM
LAotICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNk
ZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIGludCBjID0gJyonOyBcCi0gICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAw
OyBuIDwgbWF4X3NpemUgJiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkg
IT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIp
IGM7IFwKLSAgICAgICAgaWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9
IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBc
Ci0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWls
ZWQiICk7IFwKLSAgICAgICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwK
LSAgICAgICAgeyBcCi0gICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAot
ICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAg
ICAgICAgICAgICB7IFwKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGlu
IGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAg
ICAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xl
YXJlcnIoeXlpbik7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYK
LQotLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3Jp
dGUgInl5dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRl
ciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJz
IHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYg
eXl0ZXJtaW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlm
Ci0KLS8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBn
cm93cy4gKi8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9T
VEFDS19JTkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZu
ZGVmIFlZX0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxf
ZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6
YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0
aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBl
YXNpbHkgYWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9E
RUNMX0lTX09VUlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNU
WVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nh
bm5lcik7Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZ
U1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0
aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhh
dmUgYmVlbiBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlf
VVNFUl9BQ1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFj
aCBydWxlLiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNl
bmRpZgotCi0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwK
LSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAg
ICAgICAgICAgKHl5dGV4dFt5eWxlbmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNU
SU9OCi0KLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3
b3JrLgotICovCi1ZWV9ERUNMCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2FjdDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxs
b2MgPSB5eWxsb2NfcGFyYW07Ci0KLSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7
Ci0gICAgICAgIHl5Zy0+eXlfaW5pdCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAg
ICAgWVlfVVNFUl9JTklUOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQotICAgICAgICAgICAgeXlnLT55eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAq
LwotCi0gICAgICAgIGlmICggISB5eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQot
ICAgICAgICBpZiAoICEgeXlvdXQgKQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAg
ICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0KLSAgICAgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3Bz
IHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8K
LSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAg
cG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAg
ICAgICAqIHRoZSBjdXJyZW50IHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlf
Y3A7Ci0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgKz0gWVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8K
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2Vj
W1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3Vy
cmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAg
ICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAg
ICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAg
Kyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRl
ICE9IDEwNCApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
LSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7
Ci0KLXl5X2ZpbmRfYWN0aW9uOgotICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV07Ci0KLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBm
b3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAo
IHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sg
eXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAg
ICAgICAgIH0KLQotZG9fYWN0aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNj
ZXNzIEVPRiBhY3Rpb25zLiAqLwotCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAv
KiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBt
dXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9f
QkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7
Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAg
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwot
ICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2Fu
IG1hdGNoIGVvbCAqLwotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsK
LVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVf
U0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNl
IDM6Ci0qeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRp
bmcgdXAgeXl0ZXh0ICovCi15eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVG
T1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewot
ICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBIQVNIX0RFRklORV9GVU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSA5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElG
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJ
TkVEOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX0VSUk9SOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBIQVNIX1BSQUdNQTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSF9FWFRFTlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTc6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6
c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBu
ZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7
Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFs
LT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxP
QVRfQ09OU1RBTlQ7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiB5eXRleHRbMF07IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VU
VVAKLXsgLyogSWdub3JlIHdoaXRlc3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgot
LyogcnVsZSAyMiBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxp
bmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJF
QUsKLWNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0K
LSAgICBjYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50
IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAg
aW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4
dF9wdHIpIC0gMTsKLQotICAgICAgICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9S
RV9BQ1RJT04uICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAg
ICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0
IHNvdXJjZS4gIEl0J3MKLSAgICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5l
ZCBiZWNhdXNlIHRoZSB1c2VyCi0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBh
IG5ldyBzb3VyY2UgYW5kIGNhbGxlZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0
aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVu
IFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJl
IGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhp
cyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAg
ICAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0g
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVm
X3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0
aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZl
IGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2lu
Y2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICog
ZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAg
ICAgICogaW4gaW5wdXQoKS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1
Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdICkKLSAgICAgICAgICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAg
ICAgICAgeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owot
Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5
eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQg
dG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3Qg
aGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5k
IGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93
IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcg
KGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8g
aXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSku
Ci0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9O
VUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5
eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAo
IHl5X25leHRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBD
b25zdW1lIHRoZSBOVUwuICovCi0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsK
LSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50
X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBn
b3RvIHl5X2ZpbmRfYWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICBlbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiA9IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSAp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVj
YXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9u
ZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4
dCwgd2UgY2FuIG5vdyBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBz
byB0aGF0IGlmIHNvbWUgdG90YWwKLSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2Ug
ZmxleCBpdHNlbGYpIHdhbnRzIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNj
YW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxM
LCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9O
VUxMIHdpbGwgZ2V0IHJldHVybmVkLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7Ci0KLSAgICAgICAgICAgICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJU
KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
KQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ft
b3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAg
IHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsK
LQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAg
eXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAg
ICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlf
YnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3Rv
IHl5X2ZpbmRfYWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAi
ZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0g
ICAgfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2Fu
bmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0
X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBj
b2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAq
ICBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQg
cG9zaXRpb24KLSAqICBFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAg
cmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
OwotICAgIHJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdp
c3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAo
IHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAi
ZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIg
KTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9
PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlz
IGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4
dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8q
IFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAg
ICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQg
cHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8K
LQotICAgIC8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0g
ICAgbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyKSAtIDE7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQot
ICAgICAgICAqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyAp
Ci0gICAgICAgIC8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJl
dHVybiBhbiBFT0YsCi0gICAgICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25f
Y2hhcnMgPSAwOwotCi0gICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3Rv
X3JlYWQgPQotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9
IDAgKQotICAgICAgICAgICAgeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdy
b3cgaXQuICovCi0KLSAgICAgICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBj
dXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJS
RU5UX0JVRkZFUjsKLQotICAgICAgICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAg
ICAgICAgICAgICAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAg
ICAgICAgICAgaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+
eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAg
ICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1
ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVh
bGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIg
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
LyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGIt
Pnl5X2NoX2J1ZiA9IDA7Ci0KLSAgICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAg
ICAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJv
ciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWct
Pnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAg
ICAgICAgbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXpl
IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAg
ICAgICAgfQotCi0gICAgICAgIGlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkK
LSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAv
KiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5
Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAg
IH0KLQotICAgIGlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAg
IGlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJl
c3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsK
LSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
Ci0gICAgICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICBlbHNlCi0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU47Ci0KLSAgICBpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90
b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAg
ICAgLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkg
bmVlZC4gKi8KLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsg
bnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAq
KSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVy
ICk7Ci0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiAp
Ci0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0g
bnVtYmVyX3RvX21vdmU7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKLQotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5
eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0Ig
Y2hhciB3YXMgcmVhY2hlZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3Rh
dGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3Rh
dGUgKz0gWVlfQVRfQk9MKCk7Ci0KLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAg
IHsKLSAgICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1ND
X1RPX1VJKCp5eV9jcCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlf
Y2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRl
ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gMTA1ICkKLSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLQotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVM
X3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0g
KgotICogc3lub3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVu
dF9zdGF0ZSApOwotICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICByZWdpc3RlciBpbnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNl
ZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOwotCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBp
ZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUg
KCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRf
c3RhdGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9k
ZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAx
MDUgKQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0g
ICAgICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3Vy
cmVudF9zdGF0ZSA9PSAxMDQpOwotCi0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJy
ZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMK
LSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAg
c3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAg
aW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0g
ICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAg
ICAgIHsKLSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIg
d2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRo
ZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBu
b3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0g
ICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVh
bGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAg
ICAgIGludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAg
ICAgICAgICArK3l5Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBU
aGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNl
ZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2Vu
IGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1h
dGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGlu
Zy4gIEJ1dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBt
YXRjaGluZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0
aGUgRU9CX0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1Rf
RU5EX09GX0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAg
ICAgIC8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVz
dGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9V
R0gqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5l
ciApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjoKLSAgICAgICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRy
ICsgb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikg
eXlnLT55eV9jX2J1Zl9wOyAvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55
eV9jX2J1Zl9wID0gJ1wwJzsgICAgLyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9o
b2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2F0X2JvbCA9IChjID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9hdF9ib2wgKQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsK
LSAgICAgICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwot
fQotI2VuZGlmICAvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3
aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBB
IHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0
aW9uIHRvIEBjIElOSVRJQUwgLgotICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5w
dXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRl
X2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2lu
aXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1
dCBidWZmZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
ICAgIHZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZl
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUg
YWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0g
ICAgICogICAgICBwcHBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZm
ZXJfc3RhdGUobmV3X2J1ZmZlcik7Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAg
ICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0g
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKLSAgICAgICAgfQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdl
IGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0g
ICAgICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBm
bGFnCi0gICAgICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28g
aXQncyBzYWZlCi0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICov
Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMg
dm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAg
eXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwot
ICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZf
cDsKLX0KLQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0
ZS4KLSAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhl
IGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZ
X0JVRl9TSVpFLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBA
cmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NU
QVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlf
QlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5
eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5
X2J1Zl9zaXplID0gc2l6ZTsKLQotICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0
ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRv
IHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
Ci0gICAgaWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5
X2lzX291cl9idWZmZXIgPSAxOwotCi0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5u
ZXIpOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBA
cGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRl
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgIGlmICggISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJF
TlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAg
aWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5
X2NoX2J1ZiAseXlzY2FubmVyICk7Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVy
ICk7Ci19Ci0KLS8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBU
aGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNh
bWUgYnVmZmVyLAotICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0g
Ki8KLSAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwg
RklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0g
ZXJybm87Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCi0gICAgcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55
eV9pbnB1dF9maWxlID0gZmlsZTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAv
KiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3By
b2JhYmx5XwotICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0
X25leHRfYnVmZmVyLgotICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNl
dCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5U
X0JVRkZFUil7Ci0gICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2Jz
X2NvbHVtbiA9IDA7Ci0gICAgfQotCi0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsK
LSAgICAKLSAgICBlcnJubyA9IG9lcnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVk
IGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgot
ICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZ
X0NVUlJFTlRfQlVGRkVSLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLSAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGItPnl5X25fY2hhcnMgPSAwOwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1v
Zi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRp
b24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAq
IGEgamFtIGluIHRoYXQgc3RhdGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKLQotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAg
Yi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05F
VzsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUg
b250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0
YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNz
YXJ5LgotICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0
ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIGlmIChuZXdfYnVmZmVyID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3Bp
ZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZG
RVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xk
IGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5
X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9
IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBl
eGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKQotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dp
dGNoX3RvX2J1ZmZlci4gKi8KLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
LSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1v
dmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRo
ZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyKTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcDsKLQotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwotICAgIH0KLX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBk
b2VzIG5vdCBleGlzdC4KLSAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVz
aC4KLSAqLwotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgaW50IG51bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrKSB7Ci0KLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAy
IGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5l
ciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQg
YW4KLSAgICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAg
ICAgICovCi0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1z
ZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAg
ICAgICAgLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1
c2guICovCi0gICAgICAgIGludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUg
Ki87Ci0KLSAgICAgICAgbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsg
Z3Jvd19zaXplOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopcHByZWFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5
eWctPnl5X2J1ZmZlcl9zdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5
X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6
ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXggPSBudW1fdG9fYWxsb2M7Ci0gICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIg
YnVmZmVyLgotICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBz
aXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9j
YXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
YnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8
Ci0gICAgICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAg
ICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyog
VGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVy
KCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFr
ZSBjYXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJh
c2U7Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9
IDA7Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2lu
dGVyYWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVm
ZmVyID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAg
IHBwX3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0K
LQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhl
IG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEg
c3RyLgotICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3
bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0
byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAg
ICAgIHBwX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nh
bl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIAotICAgIHJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nh
bm5lcik7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhl
IGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9t
IGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIg
dG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIg
cG9pbnRlZCB0byBieSBAYSBieXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmpl
Y3QuCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
WVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAg
IGludCBpOwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRp
bmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAy
OwotICAgIGJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGJ1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVu
OyArK2kgKQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVz
X2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0g
ICAgYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkK
LSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIg
KTsKLQotICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBz
aG91bGQgdGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAg
ICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3Rh
dGljIHZvaWQgeXlfcHVzaF9zdGF0ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIGlmICggeXlnLT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFy
dF9zdGFja19kZXB0aCApCi0gICAgICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwot
Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5D
UjsKLSAgICAgICAgbmV3X3NpemUgPSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9m
KCBpbnQgKTsKLQotICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAg
ICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNj
YW5uZXIgKTsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
ID0gKGludCAqKSBwcHJlYWxsb2MoKHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6
ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQot
ICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFy
dC1jb25kaXRpb24gc3RhY2siICk7Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3Rh
Y2tbeXlnLT55eV9zdGFydF9zdGFja19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5l
d19zdGF0ZSk7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIGlmICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ci
ICk7Ci0KLSAgICBCRUdJTih5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyXSk7Ci19Ci0KLSAgICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9z
dGFja19wdHIgLSAxXTsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlf
RVhJVF9GQUlMVVJFIDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXlj
b25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBm
cHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJF
ICk7Ci19Ci0KLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBj
b2RlLiAqLwotCi0jdW5kZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAot
ICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0
LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZ
X0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10g
PSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQg
KyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+
eXlfY19idWZfcDsgXAotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAg
ICB5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICgg
MCApCi0KLS8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0
IG1lbWJlcnMuICovCi0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNj
YW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlf
RVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0
dXJuIHl5ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVu
byAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJF
TlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGlu
ZW5vOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwot
fQotCi0vKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHJldHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgot
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0
X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0v
KiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5
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
Ci0gICAgCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRy
X3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBv
c2UgYnVncyBpbgotICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFz
ZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXln
dXRzX3QpKTsKLSAgICAKLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5
X2dsb2JhbHMpOwotICAgIAotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2ds
b2JhbHMgKTsKLX0KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBu
b24tcmVlbnRyYW50IHNjYW5uZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJv
bSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19i
dWZfcCA9IChjaGFyICopIDA7Ci0gICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0
YXJ0ID0gMDsKLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7
Ci0KLS8qIERlZmluZWQgaW4gbWFpbi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4g
PSBzdGRpbjsKLSAgICB5eW91dCA9IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICop
IDA7Ci0gICAgeXlvdXQgPSAoRklMRSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJl
IHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0g
ICAgICogcHBsZXhfaW5pdCgpCi0gICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4
X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJz
LiAqLwotaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAg
LyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAg
IHdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IE5VTEw7Ci0gICAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAg
IH0KLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXln
LT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sg
PSBOVUxMOwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwot
ICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAg
IHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMu
IFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0
IHRpbWUKLSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1
ci4gKi8KLSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95
IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nh
bm5lciAsIHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYg
eXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25z
dCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVy
IGludCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBz
MltpXTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlf
ZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgcmVnaXN0ZXIgaW50IG47Ci0gICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAg
IDsKLQotICAgIHJldHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFs
bG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hh
ciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50
YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAq
IHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0
ZXIKLSAgICAgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNz
aWdubWVudCBmcm9tCi0gICAgICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwg
d2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3Np
Z25tZW50LgotICAgICAqLwotICAgIHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBw
dHIsIHNpemUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgZnJlZSggKGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygp
IGZvciAoY2hhciAqKSBjYXN0ICovCi19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJs
ZXMiCi0KLXN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50
IGxlbikKLXsKLSAgICAvLyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRl
ZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRo
ZSBsYXN0IEhTUEFDRS4KLSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4o
IiNkZWZpbmUgIikgPT0gODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBm
b3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0
cltpXSA9PSAnICcpIHx8IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG5hbWUgPSBuZXcgc3RkOjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICBy
ZXR1cm4gbmFtZTsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1
dChjaGFyKiBidWYsIGludCBtYXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0g
ICAgd2hpbGUgKCFtSW5wdXQtPmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkg
PT0gcHA6OklucHV0OjprRXJyb3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVM
TCkpCi0gICAgewotICAgICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6
VG9rZW46OmRlY29kZUxvY2F0aW9uKHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUp
OwotICAgICAgICBmaWxlID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9s
aW5lbm8ocHA6OlRva2VuOjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0g
ICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYg
KG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhl
cigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0
X2V4dHJhKHRoaXMsJm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVz
dGFydCgwLG1MZXhlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVz
dHJveUxleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3ko
bUxleGVyKTsKLSAgICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHBfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE3YjZhYTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIw
NzIgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICov
Ci0KLS8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJz
ZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAx
LCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p
Ci0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot
ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBh
IHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29u
dGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRp
c3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9u
ZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcg
dGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNl
ciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
Ci0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24p
IHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUg
c2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBs
aWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQg
dGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMg
YWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIg
b2YgQmlzb24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkg
UmljaGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxs
ZWQgInNlbWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93
IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1
c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2
YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFj
cm9zLgotICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5j
bHVkZSBmaWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkg
YXJlIG5vdGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwot
Ci0vKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyog
Qmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBT
a2VsZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8q
IFB1cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9u
cy4gICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCAxCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlh
YmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2Rl
ZmluZSB5eWxleCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2
YWwgIHBwbHZhbAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVi
dWcKLSNkZWZpbmUgeXluZXJycyBwcG5lcnJzCi0jZGVmaW5lIHl5bGxvYyBwcGxsb2MKLQotLyog
VG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0g
ICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFu
ZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5
dG9rZW50eXBlIHsKLSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAg
ICAgSEFTSF9JRiA9IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5E
RUYgPSAyNjIsCi0gICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAot
ICAgICBIQVNIX0VORElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VS
Uk9SID0gMjY3LAotICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04g
PSAyNjksCi0gICAgIEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAot
ICAgICBIQVNIX0RFRklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMs
Ci0gICAgIElOVF9DT05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0g
ICAgIElERU5USUZJRVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVm
aW5lIEhBU0ggMjU4Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYw
Ci0jZGVmaW5lIEhBU0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmlu
ZSBIQVNIX0VMU0UgMjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJ
RiAyNjUKLSNkZWZpbmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZp
bmUgSEFTSF9QUkFHTUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBI
QVNIX1ZFUlNJT04gMjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJ
TkVfT0JKIDI3MgotI2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09O
U1RBTlQgMjc0Ci0jZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVS
IDI3NgotCi0KLQotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KLQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVm
aW5lIFlZREVCVUcgMQotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVC
VUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJy
b3IgbWVzc2FnZXMuICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9S
X1ZFUkJPU0UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlF
UlJPUl9WRVJCT1NFIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAq
LwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRp
ZgotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFS
RUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpz
dHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3Rvciog
dGxpc3Q7Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMg
ZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24g
Ki8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19U
UklWSUFMIDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZ
TFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0
X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0
X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVz
Y2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQg
MQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLS8qIENvcHkgdGhl
IHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi1leHRlcm4gaW50IHl5
bGV4KFlZU1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGlj
IHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNv
bnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7
Ci0KLXN0YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0
LCBib29sIGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpD
b250ZXh0KiBjb250ZXh0KTsKLQotCi0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNp
ZmRlZiBzaG9ydAotIyB1bmRlZiBzaG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgK
LXR5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2ln
bmVkIGNoYXIgeXl0eXBlX3VpbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlw
ZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxz
ZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQ
RV9VSU5UMTYKLXR5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVm
IFlZVFlQRV9JTlQxNgotdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UK
LXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0la
RV9UCi0jIGlmZGVmIF9fU0laRV9UWVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQ
RV9fCi0jIGVsaWYgZGVmaW5lZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMg
ZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZ
U0laRV9UIHVuc2lnbmVkIGludAotIyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01B
WElNVU0gKChZWVNJWkVfVCkgLTEpCi0KLSNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwot
IyAgaWYgRU5BQkxFX05MUwotIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlz
b24tcnVudGltZSIsIG1zZ2lkKQotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAg
ZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1
bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQg
bGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkK
LSNlbHNlCi0jIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50
aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNv
bmRpdGlvbnMuICAqLwotI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UK
LSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1Z
WUlEIChpbnQgaSkKLSNlbHNlCi1zdGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2Vu
ZGlmCi17Ci0gIHJldHVybiBpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxv
dyB8fCBZWUVSUk9SX1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBt
YWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RB
Q0tfVVNFX0FMTE9DQQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVD
X18KLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYg
ZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAot
IyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVND
X1ZFUgotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLwotIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEg
ZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KLSMgICAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEK
LSMgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZkZWYgWVlTVEFDS19BTExPQwotICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5
JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5
ICovOyB9IHdoaWxlIChZWUlEICgwKSkKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
LSAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhl
IGJvdHRvbSBvZiB0aGUgc3RhY2ssCi0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBz
bWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQotICAgICAgIGludm9rZSBh
bGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1i
ZXIKLSAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFy
eSBzdGFjayBzbG90cy4gICovCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMy
IC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLwotIyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0j
ICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSBZWVNJWkVfTUFYSU1VTQotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNw
bHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAotICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RE
TElCX0ggMQotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVm
aW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVk
IF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lk
ICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
IyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUg
ZnJlZQotIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0j
IGVuZGlmCi0jZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NF
ICovCi0KLQotI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQg
X19jcGx1c3BsdXMgXAotICAgICB8fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlM
VFlQRV9JU19UUklWSUFMIFwKLSAgICAgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFM
ICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBh
bGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0
eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgICBZWUxUWVBFIHl5bHM7Ci19Owot
Ci0vKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFj
ayBhbmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9m
ICh1bmlvbiB5eWFsbG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRv
IGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICov
Ci0jIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlw
ZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAotICAgICAg
KyAyICogWVlTVEFDS19HQVBfTUFYSU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20g
RlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3Zlcmxh
cC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9f
R05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVp
bHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVs
c2UKLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgICAgICBcCi0gICAgICBkbyAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlT
SVpFX1QgeXlpOyAgICAgICAgICAgICBcCi0gICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3Vu
dCk7IHl5aSsrKSAgIFwKLSAgICAgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07ICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBl
bmRpZgotIyBlbmRpZgotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24g
dG8gdGhlIG5ldyBvbmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RB
Q0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhl
IHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNr
LiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBu
ZXh0Ci0gICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKSAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpF
X1QgeXluZXdieXRlczsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlw
dHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5
eXB0ci0+U3RhY2s7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlz
dGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAg
eXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQg
KDApKQotCi0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1p
bmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMgotLyogWVlMQVNUIC0tIExhc3Qg
aW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDI0NwotCi0vKiBZWU5UT0tF
TlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDcKLS8q
IFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAx
MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMg
IDYyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RB
VEVTICA5MQotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBj
b3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmlu
ZSBZWU1BWFVUT0sgICAyNzYKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0
cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBC
aXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
IDQzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAzNywgICAgNDAsICAgICAyLAotICAgICAgMjMs
ICAgIDI0LCAgICAzNiwgICAgMzMsICAgIDI1LCAgICAzNCwgICAgMzIsICAgIDM1LCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgIDQ0LCAgICA0NSwKLSAgICAgIDI4LCAgICA0MiwgICAgMjksICAgIDQ2LCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAyNiwgICAgIDIsICAgIDI3LCAgICAzOCwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDMwLCAgICAzOSwgICAgMzEs
ICAgIDQxLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0jaWYgWVlERUJVRwotLyog
WVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1i
ZXIgWVlOIGluCi0gICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJo
c1tdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNywgICAgIDksICAg
IDExLCAgICAxMywgICAgMTYsICAgIDE5LAotICAgICAgMjMsICAgIDMwLCAgICAzNCwgICAgMzgs
ICAgIDQyLCAgICA0NiwgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksCi0gICAgICA2MiwgICAg
NjUsICAgIDY4LCAgICA3MSwgICAgNzIsICAgIDc0LCAgICA3NSwgICAgNzcsICAgIDgxLCAgICA4
MywKLSAgICAgIDg2LCAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5OSwgICAxMDEsICAgMTAzLCAg
IDEwNSwgICAxMDcsICAgMTA5LAotICAgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5
LCAgIDEyMSwgICAxMjMsICAgMTI1LCAgIDEyNywgICAxMjksCi0gICAgIDEzMSwgICAxMzMsICAg
MTM1LCAgIDEzNywgICAxMzksICAgMTQxLCAgIDE0MywgICAxNDUsICAgMTQ3LCAgIDE0OSwKLSAg
ICAgMTUxLCAgIDE1MywgICAxNTUKLX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQg
bGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXly
aHNbXSA9Ci17Ci0gICAgICA0OCwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAg
ICAtMSwgICAgNTAsICAgIC0xLCAgICA1MSwKLSAgICAgIC0xLCAgICAyMiwgICAgLTEsICAgIDU1
LCAgICAyMiwgICAgLTEsICAgICAzLCAgICAyMiwgICAgLTEsICAgIDE3LAotICAgICAgNTIsICAg
IDIyLCAgICAtMSwgICAgMTgsICAgIDIzLCAgICA1MywgICAgMjQsICAgIDUyLCAgICAyMiwgICAg
LTEsCi0gICAgICAgNCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDUsICAgIDU0LCAgICAyMiwg
ICAgLTEsICAgICA2LCAgICAyMSwKLSAgICAgIDIyLCAgICAtMSwgICAgIDcsICAgIDIxLCAgICAy
MiwgICAgLTEsICAgICA5LCAgICA1NCwgICAgMjIsICAgIC0xLAotICAgICAgIDgsICAgIDIyLCAg
ICAtMSwgICAgMTAsICAgIDIyLCAgICAtMSwgICAgMTIsICAgIDIyLCAgICAtMSwgICAgMTMsCi0g
ICAgICAyMiwgICAgLTEsICAgIDE0LCAgICAyMiwgICAgLTEsICAgIDE1LCAgICAyMiwgICAgLTEs
ICAgIDE2LCAgICAyMiwKLSAgICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAg
MjEsICAgIC0xLCAgICA1MywgICAgMjUsICAgIDIxLAotICAgICAgLTEsICAgIDU2LCAgICAtMSwg
ICAgNTQsICAgIDU2LCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA1NSwgICAgNTcsCi0gICAgICAt
MSwgICAgMTEsICAgIDIxLCAgICAtMSwgICAgMTEsICAgIDIzLCAgICAyMSwgICAgMjQsICAgIC0x
LCAgICA1NywKLSAgICAgIC0xLCAgICA1OCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjAsICAg
IC0xLCAgICAyMSwgICAgLTEsICAgIDI2LAotICAgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgs
ICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIzLCAgICAtMSwgICAgMjQsCi0gICAgICAtMSwgICAg
MzAsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAz
NCwKLSAgICAgIC0xLCAgICAzNSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAg
ICAzOCwgICAgLTEsICAgIDM5LAotICAgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0x
LCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDQsCi0gICAgICAtMSwgICAgNDUsICAg
IC0xLCAgICAyNSwgICAgLTEsICAgIDQ2LCAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0t
IHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAgNjMsICAg
IDYzLCAgICA2NSwgICAgNjksICAgIDcwLCAgICA3NCwgICAgNzUsICAgIDg0LCAgICA4NSwKLSAg
ICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA1LCAgIDEwNywg
ICAxMTAsICAgMTExLAotICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTE5LCAgIDEy
MiwgICAxMjMsICAgMTI3LCAgIDEzMywgICAxMzcsCi0gICAgIDE0NCwgICAxNDgsICAgMTU1LCAg
IDE1NywgICAxNTksICAgMTYzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3OCwKLSAgICAgMTc5
LCAgIDE4MCwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcs
ICAgMTg4LAotICAgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAx
OTUsICAgMTk2LCAgIDE5NywgICAxOTgsCi0gICAgIDE5OSwgICAyMDAsICAgMjAxCi19OwotI2Vu
ZGlmCi0KLSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0v
KiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9M
LU5VTS4KLSAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tF
TlMsIG5vbnRlcm1pbmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtd
ID0KLXsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJIQVNIIiwgIkhBU0hfVU5E
RUYiLCAiSEFTSF9JRiIsCi0gICJIQVNIX0lGREVGIiwgIkhBU0hfSUZOREVGIiwgIkhBU0hfRUxT
RSIsICJIQVNIX0VMSUYiLCAiSEFTSF9FTkRJRiIsCi0gICJERUZJTkVEIiwgIkhBU0hfRVJST1Ii
LCAiSEFTSF9QUkFHTUEiLCAiSEFTSF9FWFRFTlNJT04iLCAiSEFTSF9WRVJTSU9OIiwKLSAgIkhB
U0hfTElORSIsICJIQVNIX0RFRklORV9PQkoiLCAiSEFTSF9ERUZJTkVfRlVOQyIsICJJTlRfQ09O
U1RBTlQiLAotICAiRkxPQVRfQ09OU1RBTlQiLCAiSURFTlRJRklFUiIsICInXFxuJyIsICInKCci
LCAiJyknIiwgIicsJyIsICInWyciLAotICAiJ10nIiwgIic8JyIsICInPiciLCAiJ3snIiwgIid9
JyIsICInLiciLCAiJysnIiwgIictJyIsICInLyciLCAiJyonIiwKLSAgIiclJyIsICInXiciLCAi
J3wnIiwgIicmJyIsICInficiLCAiJz0nIiwgIichJyIsICInOiciLCAiJzsnIiwgIic/JyIsCi0g
ICIkYWNjZXB0IiwgImlucHV0IiwgImxpbmUiLCAidGV4dF9saW5lIiwgImNvbnRyb2xfbGluZSIs
Ci0gICJyZXBsYWNlbWVudF9saXN0IiwgInBhcmFtZXRlcl9saXN0IiwgImNvbmRpdGlvbmFsX2xp
c3QiLCAidG9rZW5fbGlzdCIsCi0gICJjb25kaXRpb25hbF90b2tlbiIsICJ0b2tlbiIsICJvcGVy
YXRvciIsIDAKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxF
WC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tl
biBZWUxFWC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9
Ci17Ci0gICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwg
ICAyNjIsICAgMjYzLCAgIDI2NCwKLSAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2
OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAotICAgICAyNzUsICAgMjc2LCAg
ICAxMCwgICAgNDAsICAgIDQxLCAgICA0NCwgICAgOTEsICAgIDkzLCAgICA2MCwgICAgNjIsCi0g
ICAgIDEyMywgICAxMjUsICAgIDQ2LCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0MiwgICAgMzcs
ICAgIDk0LCAgIDEyNCwKLSAgICAgIDM4LCAgIDEyNiwgICAgNjEsICAgIDMzLCAgICA1OCwgICAg
NTksICAgIDYzCi19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBv
ZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwg
ICAgNDksICAgIDUwLCAgICA1MCwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1
MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCi0gICAg
ICA1MSwgICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTIsICAgIDUzLCAgICA1MywgICAgNTMsICAg
IDU0LCAgICA1NCwKLSAgICAgIDU1LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcs
ICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwg
ICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAg
ICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1i
ZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8K
LXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwg
ICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLAot
ICAgICAgIDYsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAg
ICAwLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwKLSAgICAgICAxLCAgICAgMiwgICAgIDIs
ICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEKLX07Ci0K
LS8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBp
biBzdGF0ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRo
aW5nIGVsc2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDIs
ICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAy
MywgICAgIDAsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAgNiwgICAgNDMsICAgIDQ0LCAg
ICA2MSwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQ1LAotICAgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
Ci0gICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgMCwKLSAgICAgIDMwLCAgICAzNSwgICAgIDgsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI4LCAgICAzNCwgICAgIDAsICAgICAwLAotICAgICAgMTYsICAgICAwLCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsCi0gICAg
ICAyNSwgICAgIDcsICAgIDMxLCAgICAxMSwgICAgMzIsICAgICAwLCAgICAxMiwgICAgMjksICAg
IDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAgOSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMs
ICAgICAwLCAgICAzMywgICAgIDAsICAgIDI3LAotICAgICAgMTAKLX07Ci0KLS8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9
Ci17Ci0gICAgICAtMSwgICAgIDEsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDY4LCAgICA4Mywg
ICAgNTUsICAgIDY5LCAgICA1NiwKLSAgICAgIDU3LCAgICA1MQotfTsKLQotLyogWVlQQUNUW1NU
QVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0g
ICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtNTUKLXN0YXRpYyBjb25zdCB5
eXR5cGVfaW50MTYgeXlwYWN0W10gPQotewotICAgICAtNTUsICAgIDczLCAgIC01NSwgICAtMTcs
ICAgLTE4LCAgIDE0NSwgICAtMTAsICAgIC05LCAgIC0xNiwgICAxNDUsCi0gICAgICAtOCwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI3LCAgIDIwMSwgICAgMjgsICAgLTU1LCAgIC01
NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIDE3MywKLSAg
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDMwLCAgIC0xOSwgICAgLTMsICAgLTU1LCAgIC01NSwg
ICAgMzEsICAgIDMyLAotICAgICAtNTUsICAgMTA5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgICAzMywgICAyMDEsCi0gICAgICAyOSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgIDM1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTE1LCAgIC0xMSwgICAyMDEsICAgIDM2LCAgIC01NSwgICAgMzcs
ICAgLTU1LAotICAgICAtNTUKLX07Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KLXsKLSAgICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtMjcsICAgLTU1LCAgICA1MSwgICAgNjAsICAgLTU0LAotICAg
ICAgLTEsICAgLTU1Ci19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQg
dG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRv
a2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRo
ZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFC
TEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Ci17Ci0gICAgICA1MCwgICAgNzcsICAg
IDc0LCAgICA1MywgICAgNzUsICAgIDUyLCAgICA2MCwgICAgNzcsICAgIDU0LCAgICA4NSwKLSAg
ICAgIDg2LCAgICA1OCwgICAgNTksICAgIDg3LCAgICA2MiwgICAgNTAsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDc2LAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKLSAgICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNzIs
ICAgIDY3LAotICAgICAgODIsICAgIDcwLCAgICA3MywgICAgNzgsICAgIDc5LCAgICA4MSwgICAg
ODQsICAgIDg5LCAgICA4OCwgICAgOTAsCi0gICAgICA2MSwgICAgNDksICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcyLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2
LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDUwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgNDUsCi0gICAgICA1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICA4MCwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksCi0gICAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA1
NCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
Ci0gICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgNzEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUKLX07Ci0KLXN0
YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAgIDU1LCAg
ICAyMSwgICAgMjEsICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDYxLCAgICAxMSwgICAgMjQsCi0g
ICAgICAyNSwgICAgMjEsICAgIDIxLCAgICAyNCwgICAgMjIsICAgIDE2LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDQ5
LCAgICAyMiwKLSAgICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAg
IDIxLCAgICAyMSwgICAgODUsICAgIDIyLAotICAgICAgIDksICAgICAxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2OSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA4NSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAg
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
MTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2Ci19OwotCi0v
KiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vz
c2luZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICA0OCwgICAgIDAsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
Ci0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTUsCi0gICAg
ICA1NywgICAgNTgsICAgIDIyLCAgICAyMSwgICAgMTEsICAgIDU0LCAgICA1NiwgICAgNTcsICAg
IDIxLCAgICAyMSwKLSAgICAgIDIyLCAgICA1NCwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIs
ICAgIDIyLCAgICAyMiwgICAgNTIsICAgIDU1LAotICAgICAgMjMsICAgIDIyLCAgICA1NywgICAg
MjIsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDU2LCAgICAyMiwgICAgMjIsCi0gICAgICAyMiwg
ICAgMjIsICAgIDIxLCAgICA1MywgICAgMjEsICAgIDI0LCAgICAyNSwgICAgMjQsICAgIDUyLCAg
ICAyMSwKLSAgICAgIDIyCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9
IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVN
UFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAg
ICBnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgot
I2RlZmluZSBZWUVSUk9SICAgICBnb3RvIHl5ZXJyb3JsYWIKLQotCi0vKiBMaWtlIFlZRVJST1Ig
ZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0g
ICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBm
b3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwg
dGhpcyBjYW4gZ28uICAqLwotCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKLQot
I2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNL
VVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
IHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0g
KFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xB
VEUgKHl5Y2hhcik7ICAgICAgICAgICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoMSk7ICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxzZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdo
aWxlIChZWUlEICgwKSkKLQotCi0jZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJD
T0RFICAgMjU2Ci0KLQotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBm
cm9tIFJIU1sxXSB0byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8g
dGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJI
U1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgo
UmhzKVtLXSkKLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxU
KEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhT
TE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7ICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1
bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICBcCi0gICAgICAoQ3VycmVudCku
bGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOyAgICAgXAotICAgICAg
KEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3Rf
bGluZSAgID0gICAgICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAg
ICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5s
YXN0X2NvbHVtbiA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVt
bjsgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB3aGlsZSAoWVlJRCAoMCkpCi0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAt
LSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5v
dCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24n
dCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4g
ICovCi0KLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFM
Ci0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCi0gICAg
IGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsICAgICAgICAgIFwKLSAgICAgICAgICAoTG9j
KS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sIFwKLSAgICAgICAgICAoTG9jKS5sYXN0
X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlM
RVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNp
ZmRlZiBZWUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2Ms
IFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXls
bG9jKQotI2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNp
ZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJp
bnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRv
IHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAg
ICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAo
MCkpCi0KLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0
aW9uKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlf
c3ltYm9sX3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
IFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNF
RCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZv
aWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZ
U1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9j
YXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3lt
Ym9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAs
IGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNU
WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5
bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICgh
eXl2YWx1ZXApCi0gICAgcmV0dXJuOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAo
Y29udGV4dCk7Ci0jIGlmZGVmIFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAg
ICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxz
ZQotICBZWVVTRSAoeXlvdXRwdXQpOwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7
Ci0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50
IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250
ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsK
LSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAg
ICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAg
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0K
LSAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwg
eXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5
b3V0cHV0LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJp
bnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGlu
Y2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20s
IHl5dHlwZV9pbnQxNiAqdG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAo
Ym90dG9tLCB0b3ApCi0gICAgeXl0eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2
ICp0b3A7Ci0jZW5kaWYKLXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAg
Zm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
ICVkIiwgKmJvdHRvbSk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAg
ICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJV
TEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2
c3AsIFlZTFRZUEUgKnl5bHNwLCBpbnQgeXlydWxlLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNl
bHNlCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwg
Y29udGV4dCkKLSAgICBZWVNUWVBFICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBp
bnQgeXlydWxlOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5
eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5
bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0
YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAxLCB5eWxu
byk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7
IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAg
JCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNb
eXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkg
LSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJo
cyldKSAgICAgICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIp
OwotICAgIH0KLX0KLQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8g
eyAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKLSAg
ICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQg
aXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNv
ZXhpc3QuICAqLwotaW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUg
WVlEUFJJTlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0v
KiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICov
Ci0jaWZuZGVmIFlZSU5JVERFUFRICi0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgot
Ci0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChl
ZmZlY3RpdmUgb25seQotICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2Qg
aXMgdXNlZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVz
dWx0cyBhcmUgdW5kZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNL
X0JZVEVTIChZWU1BWERFUFRIKQotICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9u
IGludGVnZXIgYXJpdGhtZXRpYy4gICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUg
WVlNQVhERVBUSCAxMDAwMAotI2VuZGlmCi0KLQwKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0j
IGlmbmRlZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0gKLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhl
IGxlbmd0aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0j
ZWxzZQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAq
eXlzdHI7Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5
eXN0clt5eWxlbl07IHl5bGVuKyspCi0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0K
LSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9f
R0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAg
ZGVmaW5lIHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1Qs
IHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlE
RVNULiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0
aWMgY2hhciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNl
bHNlCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5
eWRlc3Q7Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0g
eXlkZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9
ICp5eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0K
LSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJF
UyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkK
LSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXll
cnJvci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNl
c3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29t
bWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZ
WVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90
IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAg
d291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5
eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsK
LSAgICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsK
LQotICAgICAgZm9yICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNh
c2UgJ1wnJzoKLSAgICAgIGNhc2UgJywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7Ci0KLSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAg
ICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdo
LiAgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJl
c1t5eW5dID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj
YXNlICciJzoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAn
OwotICAgICAgICByZXR1cm4geXluOwotICAgICAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6
IDsKLSAgICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7
Ci0KLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlm
Ci0KLS8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4
cGVjdGVkIHRva2VuCi0gICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Ci0gICBjb3B5IGFueXRoaW5n
OyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKLSAgIGNvcGll
ZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVy
cm9yIgotICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJm
bG93IG9jY3VycyBkdXJpbmcKLSAgIHNpemUgY2FsY3VsYXRpb24uICAqLwotc3RhdGljIFlZU0la
RV9UCi15eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXlj
aGFyKQotewotICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOwotCi0gIGlmICghIChZWVBBQ1Rf
TklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAg
IHsKLSAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0la
RV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJ
WkVfVCB5eXNpemUgPSB5eXNpemUwOwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGlu
dCB5eXNpemVfb3ZlcmZsb3cgPSAwOwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNXTsKLSAgICAgIGludCB5eXg7Ci0KLSMgaWYgMAotICAgICAgLyogVGhpcyBp
cyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQotICAg
ICBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywg
ZXhwZWN0aW5nICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywg
ZXhwZWN0aW5nICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Ci0jIGVu
ZGlmCi0gICAgICBjaGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0
YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0
aW5nICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAg
ICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0gICAgICAgICAgICArIHNpemVv
ZiB5eWV4cGVjdGluZyAtIDEKLSAgICAgICAgICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNIC0gMikKLSAgICAgICAgICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAg
IGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZ
WCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAg
WVlDSEVDSy4gICovCi0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0K
LSAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUu
ICAqLwotICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50
IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5T
OwotICAgICAgaW50IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0
eXBlXTsKLSAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwot
Ci0gICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgIGlm
ICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLSAgICAgIHsK
LSAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAg
ICAgICAgICB7Ci0gICAgICAgIHl5Y291bnQgPSAxOwotICAgICAgICB5eXNpemUgPSB5eXNpemUw
OwotICAgICAgICB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRu
YW1lW3l5eF07Ci0gICAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5h
bWVbeXl4XSk7Ci0gICAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7
Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5
Zm10LCB5eXByZWZpeCk7Ci0gICAgICAgIHl5cHJlZml4ID0geXlvcjsKLSAgICAgIH0KLQotICAg
ICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxl
biAoeXlmKTsKLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0g
ICAgICB5eXNpemUgPSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotICAg
IHJldHVybiBZWVNJWkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotICAgIHsKLSAg
ICAgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFt
ZSBzcGFjZS4KLSAgICAgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYg
dGhlIHRyYW5zbGF0aW9uCi0gICAgICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9u
ZyBudW1iZXIgb2YgIiVzInMuICAqLwotICAgICAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0gICAg
ICBpbnQgeXlpID0gMDsKLSAgICAgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0gICAg
ICAgIHsKLSAgICAgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkg
PCB5eWNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5
eWFyZ1t5eWkrK10pOwotICAgICAgICAgIHl5ZiArPSAyOwotICAgICAgICB9Ci0gICAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmKys7Ci0gICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAgIHJldHVybiB5eXNpemU7Ci0gICAgfQotfQot
I2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2Np
YXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFy
ICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRp
b25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVj
dCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIGNv
bnN0IGNoYXIgKnl5bXNnOwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7
Ci0gICAgWVlMVFlQRSAqeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0j
ZW5kaWYKLXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAg
WVlVU0UgKGNvbnRleHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmci
OwotICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9u
cCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgIGJy
ZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1w
cm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1p
bnQgeXlwYXJzZSAocHA6OkNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgp
OwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0t
LS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNF
X1BBUkFNCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15
eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJT
RV9QQVJBTSkKLSAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZ
UEFSU0VfUEFSQU0gKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1pbnQKLXl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJz
ZSAoY29udGV4dCkKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17
Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUg
c2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXls
dmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVy
cnM7Ci0vKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlM
VFlQRSB5eWxsb2M7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3Vs
dDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMg
ZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBh
cyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9r
ZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3Nh
Z2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwot
ICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVv
ZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6
Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0
byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0K
LSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxv
dyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0g
IC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBU
SF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3Nw
OwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2Fb
WVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNw
OwotCi0gIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCi0gIFlZTFRZUEUgeXlsc2FbWVlJTklU
REVQVEhdOwotICBZWUxUWVBFICp5eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotICAv
KiBUaGUgbG9jYXRpb25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0g
IFlZTFRZUEUgeXllcnJvcl9yYW5nZVsyXTsKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5
dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlz
dGFja3NpemUgPSBZWUlOSVRERVBUSDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0
dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91
dGluZXMuICAqLwotICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0gIC8qIFRo
ZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAg
IEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50
IHl5bGVuID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikp
OwotCi0gIHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwot
ICB5eWNoYXIgPSBZWUVNUFRZOyAgICAgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8K
LQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVu
dCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24g
dGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1l
bnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZz
cCA9IHl5dnM7Ci0gIHl5bHNwID0geXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyog
SW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAq
LwotICB5eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXls
bG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotICBn
b3RvIHl5c2V0c3RhdGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3Rh
dGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgot
ICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0
aW9uIHN0YWNrcwotICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3Rh
dGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6
Ci0gICp5eXNzcCA9IHl5c3RhdGU7Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0g
eXlzc3ApCi0gICAgewotICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUg
dGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5
eXNzcCAtIHl5c3MgKyAxOwotCi0jaWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotICAgIC8qIEdp
dmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YK
LSAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBp
bnRvCi0gICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAg
eXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwot
Ci0gICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNp
emUgb2YgdGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBU
aGlzIHVzZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28g
ZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVy
ZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSwKLSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAg
ICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAm
eXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6
ZSk7Ci0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5eXZzID0geXl2
czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBF
eHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9
IHl5c3RhY2tzaXplKQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6
ZSAqPSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNr
c2l6ZSA9IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0g
eXlzczsKLSAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAq
KSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICgh
IHl5cHRyKQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRF
ICh5eXNzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9D
QVRFICh5eWxzKTsKLSMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0g
eXlzc2EpCi0gICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYKLSNl
bmRpZiAvKiBubyB5eW92ZXJmbG93ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAt
IDE7Ci0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5eWxz
ICsgeXlzaXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBp
bmNyZWFzZWQgdG8gJWx1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFj
a3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0g
ICAgWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3Rh
dGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0t
LgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBh
cHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0g
ICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0
IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3Rh
dGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0g
IC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkg
aGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBv
ciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZ
KQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikp
OwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0Yp
Ci0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRG
ICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAg
ICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1C
T0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0g
ICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VO
IGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rp
b24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXlu
IHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4g
PSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09
IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLSAgICBnb3RvIHl5ZXJybGFiOwotICAgICAgeXlu
ID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlG
SU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBl
cnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlm
ICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29r
LWFoZWFkIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2Vu
LCAmeXlsdmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVu
bGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9
IFlZRU1QVFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gICor
K3l5bHNwID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZh
dWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9
PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBp
cyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXly
Mlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVs
dCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNl
LCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJl
aGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCBy
ZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1h
a2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3
YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFs
ID0geXl2c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCi0gIFlZTExP
Q19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0gIFlZX1JFRFVDRV9Q
UklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDc6Ci0KLSAg
ICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6
VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2Vy
dChvdXQtPmVuZCgpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmJlZ2luKCksICh5eXZzcFso
MSkgLSAoMildLnRsaXN0KS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgKHl5dnNwWygxKSAtICgy
KV0udGxpc3QpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAg
ICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDMpXSkuZmlyc3RfbGluZSwg
cHA6Ok1hY3JvOjprVHlwZU9iaiwgKHl5dnNwWygxKSAtICgzKV0uc3ZhbCksIE5VTEwsICh5eXZz
cFsoMikgLSAoMyldLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgot
Ci0gICAgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDYpXSku
Zmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICh5eXZzcFsoMSkgLSAoNildLnN2YWwp
LCAoeXl2c3BbKDMpIC0gKDYpXS50bGlzdCksICh5eXZzcFsoNSkgLSAoNildLnRsaXN0KSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDExOgotCi0gICAgewotICAgICAgICBjb250ZXh0
LT51bmRlZmluZU1hY3JvKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2Nr
KGNvbnRleHQsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSA/IHRydWUgOiBmYWxzZSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0
aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0g
KDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsK
LSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDE1OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQot
ICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAg
IHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDIzOgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDI1OgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDI2OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpU
b2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9r
ZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkg
LSAoMSldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgzKV0udGxpc3QpOwotICAg
ICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDMpIC0g
KDMpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygzKSAtICgzKV0uc3ZhbCkpKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5w
dXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyOToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkg
LSAoMildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFso
MikgLSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAg
ICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRs
aXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+
cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzI6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgot
Ci0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3Rf
bGluZSwgKHl5dnNwWygxKSAtICgxKV0uaXZhbCksIE5VTEwpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpU
b2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAoeXl2c3Bb
KDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM3OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAo
MSldKS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkp
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwg
SURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzOToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ1snOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNDA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICddJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDQxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPCc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNDM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcoJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDQ0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKSc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3snOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd9JzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDQ3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNDk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICctJzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDUwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyonOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICclJzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3wn
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcm
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
fic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
Jz0nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICchJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnOic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJzsnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICcsJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnPyc7IDt9Ci0gICAgYnJlYWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICov
Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4g
JCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVu
KTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICor
K3l5dnNwID0geXl2YWw7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcg
dGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAg
dGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRo
ZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07
Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYg
KDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09
ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5
c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFi
IC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcg
ZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVz
KQotICAgIHsKLSAgICAgICsreXluZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAg
eXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQot
ICAgICAgewotICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRl
LCB5eWNoYXIpOwotICAgIGlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLSAgICAgIHsKLSAgICAgICAgWVlTSVpFX1QgeXlhbGxv
YyA9IDIgKiB5eXNpemU7Ci0gICAgICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFs
bG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICAgeXlhbGxvYyA9IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTTsKLSAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAg
ICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RB
Q0tfQUxMT0MgKHl5YWxsb2MpOwotICAgICAgICBpZiAoeXltc2cpCi0gICAgICAgICAgeXltc2df
YWxsb2MgPSB5eWFsbG9jOwotICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICB5eW1z
ZyA9IHl5bXNnYnVmOwotICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAg
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICBpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXlt
c2dfYWxsb2MpCi0gICAgICB7Ci0gICAgICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2cs
IHl5c3RhdGUsIHl5Y2hhcik7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5
bXNnKTsKLSAgICAgIH0KLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxs
b2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotICAgICAgICBpZiAoeXlzaXplICE9
IDApCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0KLSAgICAgIH0KLSNl
bmRpZgotICAgIH0KLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsbG9jOwotCi0gIGlmICh5eWVy
cnN0YXR1cyA9PSAzKQotICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0
byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KLQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1
cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZ
WUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9Ci0gICAgICBlbHNlCi0gICAgewotICAgICAg
eXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAg
IH0KLSAgICB9Ci0KLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2Vu
IGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJs
YWIxOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJS
T1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLXl5ZXJyb3JsYWI6Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVu
IHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwg
eXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAq
LwotICBpZiAoLypDT05TVENPTkQqLyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgeXll
cnJvcl9yYW5nZVswXSA9IHl5bHNwWzEteXlsZW5dOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUg
c3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlF
UlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJy
bGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBz
eW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJy
c3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4g
ICovCi0KLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0g
ICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJP
UjsKLSAgICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9
PSBZWVRFUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAg
ICAgICAgICBpZiAoMCA8IHl5bikKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUg
dGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJP
UlQ7Ci0KLSAgICAgIHl5ZXJyb3JfcmFuZ2VbMF0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5
eXNzcDsKLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlm
ICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsK
LQotICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVt
cHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFo
ZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5
eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAg
LyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBn
b3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0
ID0gMDsKLSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQg
PSAxOwotICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRs
YWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5
eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5
cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoK
LSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgIHl5dG9rZW4s
ICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3lt
Ym9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9S
VCBvciBZWUFDQ0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3Bd
LCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQot
I2lmbmRlZiB5eW92ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJF
RSAoeXlzcyk7Ci0jZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5
bXNnYnVmKQotICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3Vy
ZSBZWUlEIGlzIHVzZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQot
Ci0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6
Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsK
LWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5
eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAK
LQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcF90YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMWVmODA2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5
ICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwot
Ci0vKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4g
QwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIs
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lh
bCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwot
ICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0
ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRo
YXQgd29yayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tl
bGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxl
dG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRo
ZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3Zl
IHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRv
biBhbmQgdGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNw
ZWNpYWwgZXhjZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNv
bi4gICovCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZ
WVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBz
byB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAq
LwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5E
RUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0g
ICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hf
RUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwK
LSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhB
U0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hf
TElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklO
RV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNU
QU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tl
bnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmlu
ZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRF
RiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVm
aW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJS
T1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAy
NjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVm
aW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNk
ZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZp
bmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVm
aW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAg
IGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsK
LSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4g
ICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNj
ZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAx
Ci0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZp
bmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3Ry
dWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0g
IGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5l
IHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMg
ZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFM
IDEKLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGls
cy5oCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21t
b24gcHJlcHJvY2Vzc29yIHV0aWxpdGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9QUFVUSUxTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisK
Ky8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9y
PSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJh
dGlvbnMgZm9yIGEgY2xhc3MuCisjZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
eXBlTmFtZSkgXAorICBUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwK
KyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWNlNTAuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0
aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
c3RsX3V0aWxzLmg6IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0jaWZuZGVmIENPTU1PTl9TVExV
VElMU19IXwotI2RlZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0K
LXN0cnVjdCBEZWxldGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgb3BlcmF0
b3IoKSAoVCB4KSB7IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3QgRGVsZXRlU2Vjb25kCi17Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKHN0ZDo6
cGFpcjxBLCBCPiYgeCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IHBwCi0jZW5kaWYgLy8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3Rva2VuX3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzYTk0MS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwot
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotCi0jaW5jbHVkZSAi
cHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVf
SF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAppbmRleCA4OGQxOTZmLi4xNTA1NmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3ByZXByb2Nlc3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaApAQCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQ
U3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihD
UFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRT
dHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5j
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMKaW5kZXggNjBiNjZiZC4uYWQ0M2Y5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKQEAg
LTU5LDYgKzU5LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogI2VuZGlmCiAKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAKIHR5cGVkZWYgc3RydWN0IFN0cmlu
Z0lucHV0U3JjIHsKQEAgLTY2LDYgKzY3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRT
cmMgewogICAgIGNoYXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0aWMgaW50IFNjYW5G
cm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3Jj
ICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVPRjsKQEAgLTczLDcg
Kzc2LDcgQEAgc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogCiBzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwg
JmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0
c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKIAogc3RhdGlj
IGludCBieXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwogCkBAIC0x
MjYsNiArMTI5LDI1IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJlZUNQ
UCgpKTsKIH0KIAorLy8gRGVmaW5lIHRoaXMgdG8gMSB0byB1c2UgdGhlIG5ldyBsZXhlci4KKyNk
ZWZpbmUgQ1BQX1VTRV9ORVdfTEVYRVIgMAorCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1
Y3QgKmNwcCwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKQoreworI2lmIENQUF9VU0VfTkVXX0xFWEVSCisgICAgSW5wdXRTcmMqIGluID0g
TGV4ZXJJbnB1dFNyYyhjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIGlmICghaW4pIHJldHVy
biAxOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW47CisjZWxzZQorICAgIGNwcC0+UGFXaGlj
aFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFBcmdj
ICAgICA9IGNvdW50OworICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBTY2FuRnJv
bVN0cmluZyhzdHJpbmdbMF0pOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBz
dHJfZ2V0Y2goKQogICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlwbGUgc3RyaW5n
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKaW5kZXggMjMzZDFkYy4uYjY3YzFkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMg
ewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJ
bnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFy
ICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVu
dGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiBpbnQgY2hl
Y2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0
bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1z
ZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVycm9yVG9JbmZvTG9n
KGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRl
cidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0U3RyaW5nTnVt
YmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
CmluZGV4IGMxOWY3OWMuLjIzMjAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCkBAIC0xMDUs
NyArMTA1LDcgQEAgU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2Nv
cGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpBZGRTeW1ib2woU291cmNl
TG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpOwogU3lt
Ym9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7CiBTeW1ib2wg
Kkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Ci12b2lkIENQUEVycm9yVG9J
bmZvTG9nKGNoYXIgKik7Cit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7CiAK
IAogI2VuZGlmIC8vICFkZWZpbmVkKF9fU1lNQk9MU19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5k
ZXggZDY1OGMxMi4uYjk0YzA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3
IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21w
aWxlci91dGlsLmgiCkBAIC0yNjUsNiArMjY2LDggQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVh
bSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9T
VFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAg
aW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRC
eXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAg
aW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAg
ICAgICBsZW4gPSAwOworCSAgICBhY2N1bSA9IDA7CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0
ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9M
RU4pIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBzeW1i
b2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9r
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewogICAgICAg
ICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiYXNlID0gODsK
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGJhc2UgPSAxMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1B
WF9TWU1CT0xfTkFNRV9MRU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hfdmFs
ID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoY2gpKQorICAgICAgICAgICAgICAg
ICAgICBjaF92YWwgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdp
dChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsg
MTA7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hfdmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFt
ZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNo
X3ZhbDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgYXNz
ZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFs
cHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgIHl5bHZh
bHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lk
IER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURF
TlRJRklFUjoKICAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBz
cHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRl
bnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRB
dG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0
ciwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
KyAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9t
U3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIl
ZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZhbCk7CkBAIC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1w
VG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBp
ZiAodG9rZW4gPj0gMTI3KQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7
CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2co
c3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmluZGV4IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuaApAQCAtNDgsNiArNDgsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNf
SCkKICNkZWZpbmUgX19UT0tFTlNfSCAxCiAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlYjU4MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAKQEAgLTAsMCArMSw4NSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
SGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0
cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCIKKworLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhl
Y3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCisv
LyBjYW4gdmFyeSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGFyZ3VtZW50cy4gSWYg
c28sIHdlIHNob3VsZCByZXN0cmljdCB0aG9zZSBhcyB3ZWxsLgordm9pZCBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3Jh
cGgmIGdyYXBoKQoreworICAgIG1OdW1FcnJvcnMgPSAwOworCisgICAgLy8gRklYTUUobXZ1am92
aWMpOiBUaGUgZGVwZW5kZW5jeSBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBm
dW5jdGlvbiBjYWxscyByaWdodCBub3csCisgICAgLy8gc28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZv
ciB0aGVtLgorICAgIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShncmFwaCk7
CisKKyAgICAvLyBTdGFydGluZyBmcm9tIGVhY2ggc2FtcGxlciwgdHJhdmVyc2UgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGggYW5kIGdlbmVyYXRlIGFuIGVycm9yIGVhY2ggdGltZSB3ZQorICAgIC8vIGhp
dCBhIG5vZGUgd2hlcmUgc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4K
KyAgICBmb3IgKFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBo
LmJlZ2luU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxl
clN5bWJvbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFN5bWJv
bCogc2FtcGxlclN5bWJvbCA9ICppdGVyOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAg
ICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxV
c2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKFRGdW5jdGlv
bkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxscygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1
bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gKml0ZXI7CisgICAgICAgIGJlZ2luRXJyb3IoZnVu
Y3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgIG1TaW5rIDw8ICJB
IGNhbGwgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgbm90IHBlcm1pdHRlZC5cbiI7Cisg
ICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3Io
Y29uc3QgVEludGVybU5vZGUqIG5vZGUpCit7CisgICAgKyttTnVtRXJyb3JzOworICAgIG1TaW5r
LnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUo
KSk7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVu
dChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIC8vIEZJWE1FKG12dWpvdmljKTog
V2Ugc2hvdWxkIHJlc3RyaWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGJlaW5nIHRl
eHR1cmUgY29vcmRpbmF0ZXMgCisgICAgLy8gaW4gYWxsIGF2YWlsYWJsZSBzYW1wbGluZyBvcGVy
YXRpb25zIHN1cHBvcnRlZCBpbiBHTFNMIEVTLgorICAgIC8vIFRoaXMgaW5jbHVkZXMgb3Zlcmxv
YWRlZCBzaWduYXR1cmVzIG9mIHRleHR1cmUyRCwgdGV4dHVyZUN1YmUsIGFuZCBvdGhlcnMuCisg
ICAgaWYgKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSAhPSAi
dGV4dHVyZTJEKHMyMTt2ZjI7IiB8fAorICAgICAgICBwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVt
YmVyKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXIt
PmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBk
ZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIHNlY29uZCBh
cmd1bWVudCIKKyAgICAgICAgICA8PCAiIG9mIGEgdGV4dHVyZTJEIGNhbGwuXG4iOworfQorCit2
b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNl
bGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRl
cm1TZWxlY3Rpb24oKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9u
IGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50Llxu
IjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7
CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBu
b3QgcGVybWl0dGVkIGluIGEgbG9vcCBjb25kaXRpb24uXG4iOworfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wKQoreworICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3Ao
KSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgorICAg
ICAgICAgIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIgb3BlcmF0
b3IuXG4iOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkzMDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9U
SU1JTkdfSF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURF
Ul9USU1JTkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1
YmxpYzoKKyAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNp
bmspCisgICAgICAgIDogbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisK
KyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3Jh
cGgpOworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9w
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5v
ZGUpOworICAgIHZvaWQgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0
IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKworCVRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAg
IGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJ
Q1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MjRjNmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKQEAgLTAsMCAr
MSwxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zzo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVy
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAg
IG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBtU2luay5sb2NhdGlvbihub2Rl
LT5nZXRMaW5lKCkpOworICAgICAgICBtU2luayA8PCAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0
ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xOWEwNWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCkBAIC0wLDAg
KzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklD
VF9WRVJURVhfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJ
Q1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6
CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAg
ICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBt
U2luayhzaW5rKQorICAgICAgICAsIG1OdW1FcnJvcnMoMCkge30KKworICAgIHZvaWQgZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgeyByb290LT50cmF2ZXJzZSh0aGlzKTsg
fQorICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworcHJpdmF0ZToKKyAgICBUSW5m
b1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAppbmRleCA2YTVjZmQz
Li4wY2MwYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5jcHAKQEAgLTk5Miw2ICs5OTIsMjIgQEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVy
ZVN1cHBvcnQoKQogICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDUpKTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRl
cHRoIHRleHR1cmVzIGluIERpcmVjdDNEOQorLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBz
dXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUg
aHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6
OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1
cnJlbnREaXNwbGF5TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFw
dGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKKworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RG
TVRfSU5UWikpOworICAgIGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNB
R0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAg
cmV0dXJuIGludHogJiYgbnVsbDsKK30KKwogYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVy
ZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJ
U1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBP
T0wgRGlzcGxheTo6Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKICAgICByZXR1cm4g
RDNEUE9PTF9ERUZBVUxUOwogfQogCi1EM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJv
b2wgcmVuZGVyYWJsZSkgY29uc3QKK0QzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdP
UkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKICAgICB7CkBAIC0x
MDg5LDcgKzExMDUsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVu
ZGVyYWJsZSkgY29uc3QKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFyZW5k
ZXJhYmxlKQorICAgICAgICBpZiAoISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEQz
RFBPT0xfTUFOQUdFRDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0Rpc3BsYXkuaAppbmRleCA1MDI4NDMxLi40ZjdkYmQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaApAQCAtNzgsMTAgKzc4LDExIEBAIGNs
YXNzIERpc3BsYXkKICAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRDNEUE9PTCBn
ZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0
VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzRFBPT0wg
Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeURldmljZUxvc3QoKTsKICAgICBib29sIGlzRGV2aWNlTG9zdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKaW5kZXggMDdhZDNjZi4uY2Ey
Y2VlYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
Y3BwCkBAIC01NjUsNiArNTY1LDggQEAgRUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwogfQog
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpn
ZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNTc1LDYgKzU3
Nyw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmICht
RGVwdGhTdGVuY2lsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvQ29udGV4dC5jcHAKaW5kZXggNjZjZDVjMC4uODIwZjY0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0yMiw2ICsyMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zy
YW1lQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
U2hhZGVyLmgiCkBAIC0zMTAsNiArMzExLDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKICAgICAgICAgbVN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJh
YmxlVGV4dHVyZXMpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNw
bGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1p
bmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0g
bURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwogCkBAIC00MDUsNiArNDA3
LDExIEBAIHZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIG1DYWNoZWRDdXJy
ZW50UHJvZ3JhbSA9IE5VTEw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0
eSgpCit7CisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Cit9CisKIHZvaWQgQ29udGV4dDo6
bWFya0NvbnRleHRMb3N0KCkKIHsKICAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9D
T05URVhUX09OX1JFU0VUX0VYVCkKQEAgLTE2NDYsNiArMTY1MywxMiBAQCBib29sIENvbnRleHQ6
OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKICAgICAgIGNhc2UgR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKICAgICAgICAgKnBhcmFtcyA9IG1SZXNl
dFN0cmF0ZWd5OwogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklO
QVJZX0ZPUk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1zID0gMTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1z
ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MzcsNiArMTc1MCw4IEBAIGJv
b2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0
eXBlLCB1bnNpZ25lZCBpbnQgKm51CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoK
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAgICAgY2FzZSBHTF9S
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JB
TV9CSU5BUllfRk9STUFUU19PRVM6CisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1B
VFNfT0VTOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOwpAQCAtMTgzNSwxMyArMTg1MCwzMSBAQCBib29sIENvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAor
ICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXpl
IGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBo
YXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJh
bWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgewor
ICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3Ji
dWZmZXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAg
ICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRv
IGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKCk7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJl
bmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlh
bCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFy
Z2V0KCk7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdl
dCkKICAgICAgICAgeworICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5l
eHBlY3RlZGx5IG51bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QKICAgICAgICAgfQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJn
ZXQoMCwgcmVuZGVyVGFyZ2V0KTsKQEAgLTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdl
dERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5j
aWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAg
ewogICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyKCktPmdldFNlcmlhbCgpOworICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVm
ZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3Qt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRo
U3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRo
U3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBz
dGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5j
aWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2VyaWFsKCk7CisgICAgICAgIHN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAo
ZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4
Nyw5ICsxOTIyLDE0IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25v
cmVWaWV3cG9ydCkKICAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKICAg
ICB9CiAKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2ls
LT5SZWxlYXNlKCk7CisgICAgfQorCiAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxp
emVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgp
OworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVy
T2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUg
bG9zdApAQCAtMTk2MCwyNiArMjAwMCwyNyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAm
JiBtRHhVbmlmb3Jtc0RpcnR5KQogICAgIHsKICAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICAgICAgR0xp
bnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCk7CisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtQmluYXJ5LT5nZXRE
eEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOwogICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYg
LyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9n
cmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKKyAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CiAKICAg
ICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3Jk
IGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLiBUaGUgYXBwcm9hY2ggZGVwZW5kcyBvbiBTaGFk
ZXIgTW9kZWwgMy4wIHN1cHBvcnQuCi0gICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbU9iamVj
dC0+Z2V0RHhDb29yZExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0RHhDb29yZExvY2F0aW9uKCk7CiAgICAgICAgIGZsb2F0IGggPSBtU3VwcG9ydHNT
aGFkZXJNb2RlbDMgPyBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgOiBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgLyAyLjBmOwogICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0
V2lkdGggLyAyLjBmLCBoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0
ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhl
aWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtNGZ2KGNvb3Jk
LCAxLCB3aHh5KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwg
MSwgd2h4eSk7CiAKLSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtT2JqZWN0LT5nZXREeERl
cHRoTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5nZXRE
eERlcHRoTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFy
KSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwogCi0gICAgICAgIEdMaW50IGRlcHRoUmFuZ2UgPSBw
cm9ncmFtT2JqZWN0LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpOworICAgICAgICBHTGludCBk
ZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKICAg
ICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZhciwgekZhciAtIHpOZWFy
fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBu
ZWFyRmFyRGlmZik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYoZGVwdGhS
YW5nZSwgMSwgbmVhckZhckRpZmYpOwogICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7
CiAgICAgfQogCkBAIC0xOTkwLDE4ICsyMDMxLDE5IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5k
ZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShH
TGVudW0gZHJhd01vZGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJl
bnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogCiAgICAgR0xlbnVtIGFkanVzdGVkRnJv
bnRGYWNlID0gYWRqdXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKIAotICAgIEdMaW50IGZy
b250Q0NXID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xp
bnQgZnJvbnRDQ1cgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKICAg
ICBHTGludCBjY3cgPSAoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFt
T2JqZWN0LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKKyAgICBwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50
c09yTGluZXMgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwor
ICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGlu
ZXNMb2NhdGlvbigpOwogICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRy
YXdNb2RlKTsKLSAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMs
IDEsICZhbHdheXNGcm9udCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2lu
dHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVS
OSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJv
b2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7
CkBAIC0yMjgwLDE4ICsyMzIyLDIwIEBAIEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVy
KGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vCiB2b2lkIENv
bnRleHQ6OmFwcGx5U2hhZGVycygpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGlmIChwcm9ncmFtT2JqZWN0
LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpCiAgICAgewotICAgICAgICBJ
RGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRW
ZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRl
ciA9IHByb2dyYW1PYmplY3QtPmdldFBpeGVsU2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRl
cigpOworICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0UGl4ZWxTaGFkZXIoKTsKIAogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihwaXhlbFNoYWRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0
ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5kaXJ0eUFsbFVuaWZvcm1zKCk7Cisg
ICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICAgICAgbUFwcGxp
ZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCi0g
ICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlVbmlmb3JtcygpOworICAgIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybXMoKTsKIH0KIAogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIg
c3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQpAQCAtMjMxMSwzMCArMjM1NSwzMiBAQCB2
b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQogdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KFNhbXBsZXJUeXBlIHR5cGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1
cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGludCBzYW1wbGVyQ291bnQgPSAo
dHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5IHNh
bXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQogICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRl
eHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNl
cmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7CiAgICAgaW50IGQzZFNhbXBsZXJPZmZz
ZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExF
UjA7Ci0gICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1PYmplY3QtPmdldFVzZWRTYW1wbGVy
UmFuZ2UodHlwZSk7CisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVz
ZWRTYW1wbGVyUmFuZ2UodHlwZSk7CiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBz
YW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAg
ICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2FtcGxlck1hcHBpbmcodHlw
ZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Cisg
ICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5n
KHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRl
eAogICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZz
ZXQ7CiAKICAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJU
ZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOworICAgICAgICAgICAgVGV4dHVyZVR5cGUg
dGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwg
c2FtcGxlckluZGV4KTsKIAogICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBs
ZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwogCi0gICAgICAg
ICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4
dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFt
ZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUt
PmdldFRleHR1cmUoKTsKIAogICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFs
W3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUt
Pmhhc0RpcnR5UGFyYW1ldGVycygpKQorICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGly
dHlQYXJhbWV0ZXJzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwpAQCAtMjM1MSw3
ICsyMzk3LDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFz
RGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2Vz
KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTIzNjEsNyArMjQwNyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhT
YW1wbGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
KGQzZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVy
ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworICAg
ICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJp
YWw7CiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yNDUxLDYgKzI0OTcsNyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhl
bHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CisgICAgICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3Mzgs
NiArMjc4NSw3IEBAIHZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKICAgICAgICAgICAgIGRl
cHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJl
bGVhc2UoKTsKIAogICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6
OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKICAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tl
ZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKQEAgLTI5NTIsNyArMzAwMCw3IEBAIHZvaWQg
Q29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJl
cygpOwogCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZh
bHNlKSkKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+
dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KQEAgLTMwNDIsNyArMzA5MCw3IEBAIHZvaWQgQ29u
dGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygp
OwogCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNl
KSkKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFs
aWRhdGVTYW1wbGVycyhmYWxzZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgIH0KQEAgLTM0NTIsNiArMzUwMCwxMSBAQCBib29sIENvbnRl
eHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1T
dXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9y
dHNEZXB0aFRleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0
dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKQEAgLTM2NzcsNiArMzczMCw3IEBA
IHZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAgICAgfQogCiAgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7CisgICAgLy9tRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7CiAgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKIApAQCAtMzcyMCw2ICszNzc0LDEx
IEBAIHZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwogCiAgICAgLy8gQU5HTEUtc3BlY2lm
aWMgZXh0ZW5zaW9ucworICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICB7Cisg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKKyAg
ICB9CisKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0
ICI7CiAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQogICAgIHsKQEAgLTQw
NDMsNyArNDEwMiwxMyBAQCB2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNY
MCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMQogCiAgICAgICAgIGlmIChi
bGl0RGVwdGhTdGVuY2lsKQogICAgICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCks
IE5VTEwsIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIEQzRFRFWEZf
Tk9ORSk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRj
aFJlY3QocmVhZERlcHRoU3RlbmNpbCwgTlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNE
VEVYRl9OT05FKTsKKworICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwogCiAgICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgICAgICB7CkBAIC00MTE1LDYgKzQxODAsOCBAQCBH
TGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UsIFRyYW5zbAogICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01B
WF9WRVJURVhfQVRUUklCUyArIDFdOwogICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0g
JmVsZW1lbnRzWzBdOwogCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewogICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3Rp
dmUpCkBAIC00MTcwLDcgKzQyMzcsNyBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6
YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbAogICAgICAg
ICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKICAgICAgICAgICAgIGVs
ZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAgIGVsZW1l
bnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+
VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgICAgICBl
bGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsK
ICAgICAgICAgICAgIGVsZW1lbnQrKzsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKaW5kZXggOGRjY2YwZi4uYzc4
M2Y2YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250
ZXh0LmgKQEAgLTI1MSw3ICsyNTEsNyBAQCBjbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCiAg
IHByaXZhdGU6CiAgICAgVUlOVCBtTWF4THJ1OwogCi0gICAgZW51bSB7IE5VTV9WRVJURVhfREVD
TF9DQUNIRV9FTlRSSUVTID0gMTYgfTsKKyAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hF
X0VOVFJJRVMgPSAzMiB9OwogCiAgICAgc3RydWN0IFZCRGF0YQogICAgIHsKQEAgLTI4Miw2ICsy
ODIsNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKICAgICB2b2lkIG1hcmtBbGxTdGF0
ZURpcnR5KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBAIC00
OTUsNiArNDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1
cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBj
b25zdDsKKyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wg
c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIy
VGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CkBA
IC02MTcsNiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQx
NlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
OwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1T
dXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAg
ICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXggNzMw
ZmZmYy4uZGNkODI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5G
cmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURl
cHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwg
R0x1aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJh
bWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpn
ZXRSZW5kZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29s
b3JidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZh
Y2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsKIH0K
IAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZm
ZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxi
dWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBS
ZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1cm4g
bVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVm
ZmVyOjpnZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZl
ciAgPSBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRl
cHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisg
ICAgeworICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgt
b25seSBGQk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkg
d2lkdGggID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBk
ZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAg
ICAgd2lkdGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZl
ci0+Z2V0SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1
ZmZlcigwLCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAg
ICAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3Ji
dWZmZXJUeXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsy
NzIsMTEgQEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1
ZmZlcjo6Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAg
ICBpbnQgc2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwog
CiAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEg
KzMwMSwzOCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlw
ZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXIt
PmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JN
QVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAg
ICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGlu
dGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3Jt
YXQgPT0gR0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQo
KSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkp
IHx8IAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVy
LT5nZXREM0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0
KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpKSB8fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1h
dCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVz
OjpJc0RlcHRoRm9ybWF0KGQzZGZvcm1hdCkgfHwgZHgyZXM6OklzU3RlbmNpbEZvcm1hdChkM2Rm
b3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZm
ZXItPmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQo
KTsKICAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X01JU1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsK
ICAgICB9CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwx
MSArMzQwLDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYg
KG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0
aF90ZXh0dXJlCi0gICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVm
ZmVyKCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBA
IEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
OworICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBp
ZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7
CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZv
cm1hdCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVp
cmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAg
ICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7Cisg
ICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAg
ICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3Np
bmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGgg
IT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRI
ZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVz
ICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM0MSwxMSArMzk5
LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1TdGVu
Y2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVm
ZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQotCiAgICAgICAgIHN0ZW5j
aWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFzdGVuY2lsYnVm
ZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAo
bVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAg
ICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVp
Z2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJ
c1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBE
M0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAg
ICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBh
cnQKKyAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdM
RV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghZHgyZXM6OklzU3RlbmNpbEZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChz
YW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsK
KyAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAg
ICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2Ft
cGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdB
dHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0g
c3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxl
cyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM3OCwxNCAr
NDU3LDE3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUiAmJiBt
U3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIC8vIGlmIHdlIGhhdmUg
Ym90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgdGhleSBtdXN0IHJlZmVyIHRvIHRoZSBz
YW1lIG9iamVjdAorICAgIC8vIHNpbmNlIHdlIG9ubHkgc3VwcG9ydCBwYWNrZWRfZGVwdGhfc3Rl
bmNpbCBhbmQgbm90IHNlcGFyYXRlIGRlcHRoIGFuZCBzdGVuY2lsCisgICAgaWYgKGRlcHRoYnVm
ZmVyICYmIHN0ZW5jaWxidWZmZXIgJiYgKGRlcHRoYnVmZmVyICE9IHN0ZW5jaWxidWZmZXIpKQog
ICAgIHsKLSAgICAgICAgaWYgKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAg
ICBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCkgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CisgICAgfQorCisgICAgLy8gd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50
IHRvIGJlIGNvbXBsZXRlCisgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwog
ICAgIH0KIAogICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAppbmRleCBi
NzNmOWEwLi4xNGQ5YzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIEZyYW1lYnVm
ZmVyCiAgICAgUmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOwogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0RGVwdGhidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIo
KTsKKyAgICBSZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcigpOwogCiAgICAgR0xlbnVt
IGdldENvbG9yYnVmZmVyVHlwZSgpOwogICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKTsK
QEAgLTczLDYgKzc0LDggQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gbVN0ZW5jaWxi
dWZmZXJUeXBlOwogICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZm
ZXJQb2ludGVyOwogCisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtTnVsbENvbG9y
YnVmZmVyUG9pbnRlcjsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihGcmFtZWJ1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uY3BwCmluZGV4IGE1ZTM4YmYuLjE4NGEwMmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApAQCAtOCw2ICs4
LDcgQEAKIC8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogCiAjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCiAKQEAgLTE3LDY0ICsxOCwyNCBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0j
aWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMMwotI2VuZGlmCi0KIG5hbWVzcGFjZSBnbAogewogdW5zaWduZWQgaW50IFByb2dyYW06Om1D
dXJyZW50U2VyaWFsID0gMTsKLWNvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7
Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsKLSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAg
c3ByaW50ZihidWZmZXIsICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVuaWZv
cm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQ
cm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQot
ewotICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7
Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwg
MCwgYnl0ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQot
ewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19CiAKLWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCitBdHRy
aWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBfbmFtZS5j
b21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOwogfQogCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1
bnNpZ25lZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9y
bShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK0F0dHJpYnV0ZUJpbmRp
bmdzOjp+QXR0cmlidXRlQmluZGluZ3MoKQogewogfQogCiBQcm9ncmFtOjpQcm9ncmFtKFJlc291
cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1h
bmFnZXIpLCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKIHsKLSAgICBt
RGV2aWNlID0gZ2V0RGV2aWNlKCk7CiAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKICAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsK
LSAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAg
ICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQorICAgIG1Qcm9ncmFtQmlu
YXJ5ID0gTlVMTDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KICAgICBtUmVmQ291bnQg
PSAwOwogfQogCkBAIC0xNTIsMTcgKzExMyw3IEBAIGludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNo
YWRlcnNDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsg
KG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsKIH0KIAotSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQ
cm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCi17Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7
Ci19Ci0KLUlEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigp
Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOwotfQotCi12b2lkIFByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit2b2lk
IEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBj
b25zdCBjaGFyICpuYW1lKQogewogICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykK
ICAgICB7CkBAIC0xNzUsMjY0OSArMTI2LDI4MCBAQCB2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogfQogCi1H
THVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3Zv
aWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hh
ciAqbmFtZSkKIHsKLSAgICBpZiAobmFtZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5n
KG5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKKyAgICBtQXR0
cmlidXRlQmluZGluZ3MuYmluZEF0dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKIH0KIAot
aW50IFByb2dyYW06OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQorLy8gTGlu
a3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hp
bmcgdXAgdGhlaXIgdmFyeWluZ3MsCisvLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBk
ZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBs
aXN0IG9mIHVuaWZvcm1zCit2b2lkIFByb2dyYW06OmxpbmsoKQogewotICAgIEFTU0VSVChhdHRy
aWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
LSAgICAKLSAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworICAgIHVu
bGluayhmYWxzZSk7CisKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5Owor
ICAgIGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21l
bnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsK
KyAgICB9CiB9CiAKLS8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVy
IGluZGV4IHVzZWQuCi1HTGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJU
eXBlIHR5cGUpCitpbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGZv
ciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0
aW9uKyspCiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4g
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobUF0dHJp
YnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9j
YXRpb25dLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Cisg
ICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gLTE7CiB9CiAKLS8vIFJldHVybnMgdGhlIGlu
ZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBE
aXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFu
ZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNhbXBsZXJN
YXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCisvLyBS
ZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJl
LWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRl
c3Ryb3kpCiB7Ci0gICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpCisgICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQK
ICAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotCi0g
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgaWYg
KG1GcmFnbWVudFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVV
bml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAg
ICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKIAotICAgICAgICBpZiAobVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIt
PnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAK
LSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwg
KEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gbG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICBkZWxldGUgbVByb2dyYW1CaW5hcnk7CisgICAgICAgIG1Q
cm9ncmFtQmluYXJ5ID0gTlVMTDsKICAgICB9Ci0KLSAgICByZXR1cm4gLTE7CiB9CiAKLS8vIFJl
dHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlw
ZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJUZXh0dXJl
VHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorUHJvZ3Jh
bUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgc3dpdGNoICh0eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBs
ZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0g
ICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAg
IHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgY2Fz
ZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZiht
U2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKKyAgICByZXR1cm4gbVByb2dyYW1C
aW5hcnk7CiB9CiAKLUdMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmlu
ZyBuYW1lKQordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkpCiB7Ci0gICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisgICAgdW5s
aW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Cit9CiAKLSAg
ICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBz
dWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAg
c2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0g
ICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwot
ICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KK3ZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgp
Cit7CisgICAgbVJlZkNvdW50LS07CiAKLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBt
VW5pZm9ybUluZGV4LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7
IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgaWYgKG1SZWZDb3VudCA9
PSAwICYmIG1EZWxldGVTdGF0dXMpCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRleFts
b2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGxvY2F0aW9uOwotICAgICAgICB9CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVBy
b2dyYW0obUhhbmRsZSk7CiAgICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFByb2dy
YW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQqIHYpCit2b2lkIFByb2dyYW06OmFkZFJlZigpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZM
T0FUKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKyAgICBtUmVmQ291bnQrKzsKK30KIAotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SZWZDb3VudDsKK30KIAotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwordW5zaWdu
ZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7
Cit9CiAKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK3Vuc2lnbmVkIGlu
dCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7
Cit9CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0g
MDsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAw
OwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQor
aW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmIChtUHJvZ3Jh
bUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dy
YW1CaW5hcnktPmdldEluZm9Mb2dMZW5ndGgoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIFByb2dyYW06OmdldEluZm9M
b2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0g
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nKGJ1ZlNpemUsIGxl
bmd0aCwgaW5mb0xvZyk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDMikKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgICAgIGlmIChidWZTaXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBd
ID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJn
ZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdl
dCArPSA0OwotICAgICAgICAgICAgdiArPSAyOworICAgICAgICAgICAgaW5mb0xvZ1swXSA9ICdc
MCc7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CiAKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1z
ID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAy
OyArK2kpCisgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2
W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxz
ZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNo
YWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykK
IHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworICAgIGludCB0b3RhbCA9
IDA7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAg
IGlmIChtVmVydGV4U2hhZGVyKQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAgICAgICAgc2hhZGVy
c1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUoKTsKICAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworICAgICAg
ICB0b3RhbCsrOworICAgIH0KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MzsgKytpKQorICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90
YWwgPCBtYXhDb3VudCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7CiAgICAg
ICAgIH0KKworICAgICAgICB0b3RhbCsrOwogICAgIH0KLSAgICBlbHNlIAorCisgICAgaWYgKGNv
dW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAqY291bnQgPSB0b3Rh
bDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlm
b3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQor
dm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5p
Zm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1
dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisgICAgICAgIGlmIChidWZzaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVsw
XSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICB9CiAKLSAgICAgICAgbWVt
Y3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xm
bG9hdCkgKiBjb3VudCk7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKnNpemUg
PSAxOwogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OworfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9CitHTGludCBQcm9ncmFt
OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCit7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVD
b3VudCgpOwogICAgIH0KLSAgICBlbHNlIAorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdo
dCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAq
dGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCgpCiB7Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdl
dFdpZHRoLCBzcmNXaWR0aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRI
ZWlnaHQsIHNyY0hlaWdodCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsg
eCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChU
KXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFy
IHVuZmlsbGVkIHJpZ2h0IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7
IHkrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBmb3IgKGludCB4
ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CiAg
ICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3Jj
SGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgZWxzZQogICAgIHsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9CisgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorICAg
ICAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAn
XDAnOworICAgICAgICB9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAobGVu
Z3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgfQogCi0g
ICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIs
MiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVl
ICs9IDQ7CisgICAgICAgICpzaXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOwogICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRy
aXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUMykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
VW5pZm9ybUNvdW50KCk7CiAgICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0
YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1h
dHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKIHsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgo
KTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQorfQogCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
LQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0g
ICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0
ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Cit2b2lkIFByb2dyYW06OmZsYWdG
b3JEZWxldGlvbigpCit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorYm9vbCBQ
cm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5pc1ZhbGlkYXRlZCgpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
MkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAg
ICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwK
LSAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAg
bWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdM
aW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsg
KytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9W
RUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAg
ICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVu
aWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1z
KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBi
dWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBp
bnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlw
ZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
OCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9z
ZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5
cGUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50
ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAg
c3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAg
ICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAot
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRl
cm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZv
cm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVy
IGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJl
cXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwot
ICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdl
dFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA4KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMzoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMs
Myw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRV
bmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0g
VW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlw
ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50
ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50Owot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQg
KiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihH
TGludCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAg
dW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAg
ewotICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0v
LyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsK
LSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMu
YmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZv
cm0tPmRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdl
dFVuaWZvcm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0
YXJnZXRVbmlmb3JtLT5kYXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0t
PnR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCAzLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBw
bHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAg
ICAgICAgYXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJp
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJy
YXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6
ICAgYXBwbHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUg
b2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBC
bG9iICpQcm9ncmFtOjpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hh
ciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBp
ZiAoIWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09S
RCByZXN1bHQ7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4
dDsKLSAgICBpZiAocGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09N
UElMRV9ERUJVRzsKLSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElM
RV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxF
X1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNl
UGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygi
I2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6
c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3Vy
Y2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0g
ICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFy
eSA9IE5VTEw7Ci0gICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1
bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEws
ICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0g
ICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2Ug
PSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4l
cyIsIGhsc2wpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVy
cm9yTWVzc2FnZS0+UmVsZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNo
YWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2Uo
KTsKLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5Owot
fQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVz
aW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCBy
ZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVt
YmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQg
UHJvZ3JhbTo6cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
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
YXBwZW5kVG9JbmZvTG9nKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFt
ZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVn
aXN0ZXJzID0gMDsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7
IHIrKykKLSAgICB7Ci0gICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0g
fHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZWdpc3RlcnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExT
TC5lbXB0eSgpIHx8IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdu
bWVudHMKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0g
LTE7Ci0gICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigp
OyB2dHhWYXIgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAg
ICB7Ci0gICAgICAgIHZ0eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7
Ci0gICAgfQotCi0gICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQot
ICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0g
e05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAg
ICBpZiAocmVnaXN0ZXJzIDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNv
bnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdW
ZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAo
cmVnaXN0ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVn
aXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBt
RnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hl
ZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9
IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBp
bnB1dC0+c2l6ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0
IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0
cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmci
LCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/
ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNf
SU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0lu
ZGV4ID0gMDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBt
VmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChhdHRyaWJ1dGUtPnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OiAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDMgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQg
IjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5h
bWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAg
ICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwot
ICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24g
OiBQT1NJVElPTjtcbiI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisr
KQotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDog
KHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsg
c3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9
Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5n
U2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVy
dGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4
SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAg
ICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAg
ICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0
cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9
IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0
ZS0+bmFtZSkgKyAiID0gIjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1
dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRl
eEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCAr
PSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4i
OwotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAi
ICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54
ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0
aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9
IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0g
ICAgaWYgKG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1Bv
aW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9T
TTMpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJh
Z0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIHZhcnlpbmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7
Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgajsKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBv
dXRwdXQudiIgKyBzdHIocik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdp
c3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hh
cmVkUmVnaXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1b
eF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1W
ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBtVmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZh
cnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsi
ICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4
SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgot
ICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBT
X0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWlu
ZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFy
eWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBq
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBu
ID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdp
c3RlcnMpICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7
Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENP
T1JEMDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZh
Y2luZykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZG
QUNFO1xuIjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xv
clsxXSA6IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5w
dXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZs
b2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChzbTMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFp
bnMgdGhlIHJlbmRlciB0YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJn
ZXQoKQotICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb29yZC55ID0gZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29y
ZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBj
ZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAq
IHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcp
ICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYg
KG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtc
biI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykK
LSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1Bv
aW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5w
dXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0
ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5
aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFy
eWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3Ry
KGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
bVBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
Z2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
IiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgot
ICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlu
a3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hp
bmcgdXAgdGhlaXIgdmFyeWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBk
ZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBs
aXN0IG9mIHVuaWZvcm1zCi12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwot
Ci0gICAgaWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxl
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNo
YWRlciB8fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0wo
KTsKLSAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlm
ICghbGlua1ZhcnlpbmdzKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZz
XzJfMCI7Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4
UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5
ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNv
bnN0YW50VGFibGVQUyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQot
ICAgIHsKLSAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0
ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0
ZXhFeGVjdXRhYmxlKTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwg
Jm1QaXhlbEV4ZWN1dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4
ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhS
ZXN1bHQpICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFy
eS0+UmVsZWFzZSgpOwotICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2
ZXJ0ZXhCaW5hcnkgPSBOVUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAg
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlu
a1VuaWZvcm1zKG1Db25zdGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9y
bXMobUNvbnN0YW50VGFibGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUg
c2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAg
ICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRp
b25hbCBkZWNvcmF0aW9uCi0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhD
b29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAg
ICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxm
UGl4ZWxTaXplIik7Ci0gICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAg
ICAgICAgIG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0K
LQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERp
cmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtB
dHRyaWJ1dGVzKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAg
ICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZv
ciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRB
dHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9u
ICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRl
cyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsK
LQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlw
ZSk7Ci0KLSAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3Rp
dmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRy
aWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJvd3M7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25z
IHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2Nh
dGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9j
YXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24K
LSAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZp
cnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0K
LSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCAr
IHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0
cmlidXRlLT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIEZhaWwgdG8gbGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0
cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVy
LT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUp
OwotICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIg
PSAwOyByIDwgcm93czsgcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRl
eFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlv
biA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmICht
QXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGlu
Z1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFt
OjpsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAg
IEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQz
RFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlv
bkNvdW50ID0gMTsKLQotICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsg
Y29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0
YW50SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5k
bGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNv
bnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJp
bmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVm
aW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0g
ICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVz
Y3JpcHRpb24uUmVnaXN0ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RY
SEFORExFIHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShO
VUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2
c0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29u
c3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09
IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAg
ICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5p
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6
Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3Vu
dCBleGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnND
b25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQp
ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCkt
PmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1
cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUp
ID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCAr
IDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNh
c2UgRDNEWFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzOyBhcnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0
TWVtYmVyczsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChj
b25zdGFudEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFO
VF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3Jp
cHRpb25Db3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2Ny
aXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3Ry
dWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0
cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRl
ZmluZVVuaWZvcm0oZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFu
dERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAg
ICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5T
OgotICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9y
bShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lKQotewotICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVz
Y3JpcHRpb24sIF9uYW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAg
IEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAg
IEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQot
ICAgIHsKLSAgICAgICAgZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
bml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50
VGFibGVQUyk7Ci0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9y
bS0+dnMsIG1Db25zdGFudFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlm
b3JtKTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAt
IDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6
ZTsgKytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxv
Y2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQot
ewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFu
ZCBzY2FsYXJzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RDNEWFBUX0JPT0w6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29s
dW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxP
QVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
RkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBj
b25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uUm93cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRv
IG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0
ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21w
YXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAg
ewotICAgICAgICByZXR1cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChf
bmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9u
YW1lLnN1YnN0cigzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lk
IFByb2dyYW06OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0
b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0Qz
RDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9B
VDQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCA0OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGogPCB3aWR0aCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3Rv
cltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEu
MGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19C
T09MKQotICAgIHsKLSAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQg
OiAwOwotICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0
ID09IEQzRFhSU19CT09MID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0g
ICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChw
c0NvdW50LCB2c0NvdW50KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhf
Qk9PTF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9G
QUxTRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
U2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRC
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkK
LSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewot
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0g
ICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewot
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBM
RVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAg
IGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rlcklu
ZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZp
cnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwot
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0
dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewot
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0s
IDAsIDApOwotCi0gICAgICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYo
dGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlf
TUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0
KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAg
YXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZl
Y3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZs
b2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAg
ICAgIHYgKz0gNDsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwg
Y291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjph
cHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0
ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAg
ICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdl
IHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBh
IGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCi0vLyBtZXNz
YWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBh
dGggZnJvbSB0aGUgbG9nLgotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQo
Y29uc3QgY2hhciAqbWVzc2FnZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7Ci0K
LSAgICBzaXplX3QgZm91bmQ7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZp
bmQoZmFrZXBhdGgpOwotICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKLQotICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0g
ICAgaWYgKCFmb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hh
ciBpbmZvWzEwMjRdOwotCi0gICAgdmFfbGlzdCB2YXJhcmc7Ci0gICAgdmFfc3RhcnQodmFyYXJn
LCBmb3JtYXQpOwotICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFy
YXJnKTsKLSAgICB2YV9lbmQodmFyYXJnKTsKLQotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3Ry
bGVuKGluZm8pOwotCi0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIG1JbmZvTG9n
ID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobUluZm9Mb2csIGlu
Zm8pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0g
c3RybGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVu
Z3RoICsgaW5mb0xlbmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7
Ci0gICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOwotCi0gICAgICAgIGRl
bGV0ZVtdIG1JbmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKLSAgICB9Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAg
ewotICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2Vk
IHN0YXRlLCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3Jh
bTo6dW5saW5rKGJvb2wgZGVzdHJveSkKLXsKLSAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3Qg
YmVpbmcgZGVzdHJ1Y3RlZAotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1W
ZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVh
c2UoKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBpZiAobUNvbnN0YW50VGFibGVQUykKLSAgICB7Ci0gICAgICAgIG1Db25z
dGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCi0gICAgewotICAgICAgICBtQ29u
c3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxM
OwotICAgIH0KLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5u
YW1lLmNsZWFyKCk7Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0K
LQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1w
bGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0KLSAgICB3
aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jt
cy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIG1E
eERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0g
LTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IC0xOwotCi0gICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOwotCi0gICAgbVBpeGVs
SExTTC5jbGVhcigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7Ci0KLSAgICBkZWxldGVbXSBt
SW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICBtTGlua2VkID0gZmFsc2U7Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQotewotICAgIHJldHVybiBtTGlua2VkOwotfQot
Ci1ib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1WYWxp
ZGF0ZWQ7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07
Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAg
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7Ci0gICAgfQotfQot
Ci12b2lkIFByb2dyYW06OmFkZFJlZigpCi17Ci0gICAgbVJlZkNvdW50Kys7Ci19Ci0KLXVuc2ln
bmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZD
b3VudDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlh
bCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLWludCBQcm9ncmFtOjpn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0
cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQotewotICAg
IGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBpbmRl
eCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAg
ICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVm
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAg
ICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KLX0K
LQotdm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKLXsKLSAgICBpbnQgdG90YWwgPSAwOwotCi0g
ICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVy
LT5nZXRIYW5kbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvdGFsKys7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICB7Ci0gICAgICAgIGlmICh0b3RhbCA8IG1heENv
dW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNo
YWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0K
LQotICAgIGlmIChjb3VudCkKLSAgICB7Ci0gICAgICAgICpjb3VudCA9IHRvdGFsOwotICAgIH0K
LX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKQotewotICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0g
ICAgdW5zaWduZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0
dHJpYnV0ZTsKLSAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2
ZUF0dHJpYnV0ZSsrOwotICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1l
LmNfc3RyKCk7Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAg
ICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAg
ICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3Rh
bmNlCi0KLSAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaW50IGNv
dW50ID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAg
ICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVu
Z3RoKCkKLXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0g
c3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5n
dGgoKSArIDEpLCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1h
eExlbmd0aDsKLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9y
bXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IHVuaWZvcm07Ci0gICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXpl
KCk7IHVuaWZvcm0rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5h
bWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3Rp
dmVVbmlmb3JtKys7Ci0gICAgfQotCi0gICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6
ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291
bnQoKQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcg
c3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9y
bXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9
ICJbMF0iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIo
KSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAg
ICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5h
bWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
PmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotewotICAgIGludCBjb3Vu
dCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgp
OwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8
IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkK
LXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4
ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQotICAgIHsK
LSAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOwotICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1
bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Zmxh
Z0ZvckRlbGV0aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxl
dGVTdGF0dXM7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQotewotICAgIHJlc2V0SW5m
b0xvZygpOwotCi0gICAgaWYgKCFpc0xpbmtlZCgpKSAKLSAgICB7Ci0gICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAg
ICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0cnVlKSkK
LSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVycyhib29s
IGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHBy
b2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCi0gICAg
Ly8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0
aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJheXMgYW5k
IERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KLQot
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwotICAgIFRl
eHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1cmVVbml0
VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAg
IGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBs
ZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04p
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1
cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxp
Y3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwg
dW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0
XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNW
U1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1
bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZVVu
aXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBl
W3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vy
cm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUg
c2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVy
ZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjppbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRU
YWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RYSEFORExFIGhhbmRsZSA9IGNvbnN0YW50
VGFibGUtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPl9uYW1lLmNfc3RyKCkp
OwotICAgIGlmIChoYW5kbGUpCi0gICAgewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQg
PSAxOwotICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5k
bGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3Vu
dCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lz
dGVyU2V0ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSAwOwotICAgIH0KLX0KLQotR0xp
bnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
eENvb3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwot
fQotCi1HTGludCBQcm9ncmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBv
aW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uaAppbmRleCA2MTgzMGM2Li4xYjQyMzlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAog
I2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNs
dWRlIDxkM2Rjb21waWxlci5oPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+
CiAjaW5jbHVkZSA8c2V0PgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUs
NDIgKzIzLDE3IEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVy
OwogY2xhc3MgVmVydGV4U2hhZGVyOwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBh
IHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KK2NsYXNzIEF0dHJpYnV0ZUJp
bmRpbmdzCiB7Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBi
b29sIGlzQXJyYXkoKTsKLQotICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6
c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJh
eVNpemU7Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAg
ICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0g
ICAgICAgIGludCByZWdpc3RlckluZGV4OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAg
ICB9OwotCi0gICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07Cisg
IHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncygpOworICAgIH5BdHRyaWJ1dGVCaW5kaW5n
cygpOwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMg
b2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgotewot
ICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGlu
dCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxv
Y2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldEF0dHJp
YnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OwogCi0gICAgc3RkOjpz
dHJpbmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQg
aW5kZXg7CisgIHByaXZhdGU6CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVC
aW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107CiB9OwogCiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0
NSArNDcsMTIgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAq
c2hhZGVyKTsKICAgICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKIAotICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQogICAgIHZvaWQgYmluZEF0dHJpYnV0
ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgR0x1aW50IGdl
dEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVyTWFwcGlu
ZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBUZXh0
dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCk7Ci0gICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVy
VHlwZSB0eXBlKTsKLQotICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBu
YW1lKTsKLSAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwot
ICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAgYm9vbCBn
ZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBh
cmFtcyk7Ci0gICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1
ZlNpemUsIEdMaW50ICpwYXJhbXMpOwotCi0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRp
b24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBH
TGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEhhbGZQaXhl
bFNpemVMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigp
IGNvbnN0OwotICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsK
IAogICAgIHZvaWQgbGluaygpOwotICAgIGJvb2wgaXNMaW5rZWQoKTsKKyAgICB2b2lkIHNldFBy
b2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgUHJvZ3JhbUJp
bmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworCiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdDsKICAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmluZm9Mb2cpOwogICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkg
bWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwpAQCAtMTMxLDkxICs3
MSwyNCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKICAgICBi
b29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKLSAgICB2b2lkIHZhbGlkYXRlKCk7
Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKTsKICAgICBib29sIGlz
VmFsaWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKLSAgICBzdGF0aWMgc3Rk
OjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAv
LyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5h
cnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRh
YmxlICoqY29uc3RhbnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFs
c2UpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0p
OwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1dGVzKCk7
Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwot
Ci0gICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxl
KTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5k
bGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0
cmluZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwot
ICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0
YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBib29sIGFwcGx5
VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAg
ICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wg
YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9pZCBhcHBseVVu
aWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNE
WFZFQ1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYp
OwotCi0gICAgdm9pZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSk7Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBj
aGFyICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZv
LCAuLi4pOwotICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IGlzc3VlU2VyaWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAg
IEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVydGV4U2hhZGVyICptVmVy
dGV4U2hhZGVyOwogCi0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmlu
ZyBtVmVydGV4SExTTDsKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7
CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgSUQzRFhDb25zdGFu
dFRhYmxlICptQ29uc3RhbnRUYWJsZVBTOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0
YW50VGFibGVWUzsKLQotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGlu
Z1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01B
WF9WRVJURVhfQVRUUklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRU
UklCU107Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7
Ci0gICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUg
dGV4dHVyZVR5cGU7Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdl
OwotICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6
OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9y
bXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRl
eDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRo
UmFuZ2VMb2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1E
eENvb3JkTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAg
IEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFt
QmluYXJ5OwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRo
YXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0gICAg
Y2hhciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAgICAgdW5zaWduZWQgaW50
IG1SZWZDb3VudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDgxZjdiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKQEAgLTAsMCArMSwyNTgzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dy
YW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgIWRl
ZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NP
TVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwor
I2VuZGlmCisKK25hbWVzcGFjZSBnbAoreworY29uc3QgY2hhciAqZmFrZXBhdGggPSAiQzpcXGZh
a2VwYXRoIjsKKworc3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIw
XTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICBy
ZXR1cm4gYnVmZmVyOworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCisgICAgOiB0eXBlKHR5
cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0o
X25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3Jt
SW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOworICAgIGRhdGEgPSBuZXcgdW5zaWduZWQg
Y2hhcltieXRlc107CisgICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRy
dWU7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkKK3sKKyAgICBkZWxldGVbXSBkYXRhOworfQor
Citib29sIFVuaWZvcm06OmlzQXJyYXkoKQoreworICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAs
IDMsICJhcl8iKSA9PSAwOworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBp
bnQgaW5kZXgpIAorICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShf
bmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK3sKK30KKworUHJvZ3JhbUJp
bmFyeTo6UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgbURldmljZSA9IGdldERldmljZSgpOworCisg
ICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxM
OworICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlVlMgPSBO
VUxMOworCisgICAgbUluZm9Mb2cgPSBOVUxMOworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKwor
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4
KyspCisgICAgeworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisK
KyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFs
c2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxl
cnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAgbUR4
RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAg
IG1EeENvb3JkTG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAt
MTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uID0gLTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sKKyAg
ICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUt
PlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgewor
ICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmICht
Q29uc3RhbnRUYWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAg
bUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVuaWZv
cm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKKyAg
ICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgZGVsZXRlW10gbUluZm9M
b2c7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxT
aGFkZXIoKQoreworICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQoreworICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAg
eworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtp
bmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4
KGludCBhdHRyaWJ1dGVJbmRleCkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAm
JiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgCisgICAgcmV0dXJu
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKK30KKworLy8gUmV0dXJucyBvbmUgbW9y
ZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICByZXR1cm4g
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAg
ICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9u
ZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhl
bCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCkKK3sKKyAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKKworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOworCisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKwor
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAobG9naWNhbFRleHR1cmVV
bml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBS
ZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5
cGUgYW5kCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0
aGUgdmVydGV4IHNoYWRlcikuCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVy
VGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgor
ICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2Yo
bVNhbXBsZXJzUFNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGU7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsK
KyAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBURVhUVVJFXzJEOwor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcg
bmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKKworICAgIC8vIFN0cmlw
IGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAor
ICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xv
c2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOworICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5n
OjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vi
c2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5h
bWUuZXJhc2Uob3Blbik7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1JbmRleC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYg
KG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgorICAgICAgICAgICAgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9GTE9BVCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7
CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsK
KyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAgdiArPSAxOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0
WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0
YXJnZXRbMl0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRh
cmdldCArPSA0OworICAgICAgICAgICAgdiArPSAyOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisg
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdl
dFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAg
dGFyZ2V0WzJdID0gdlsyXTsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAg
ICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICAgICAg
diwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBp
bnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hl
aWdodD4KK3ZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0
aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdo
dCk7CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNX
aWR0aCArIHhdOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0
IHNpZGUKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICB7Cisg
ICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAo
aW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRh
cmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gODsKKyAgICAgICAgdmFsdWUgKz0gNDsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9
IDEyOworICAgICAgICB2YWx1ZSArPSA5OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDQpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDE2OworICAg
ICAgICB2YWx1ZSArPSAxNjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8CisgICAgICAgIHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAorICAgICAgICB0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xpbnQpLAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9m
KEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgor
CisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0lOVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAz
LAorICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBz
aXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisK
KyAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaAorICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVk
Qnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAg
ICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBV
bmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9u
ZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIG1l
bWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
KworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
CisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJl
ZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAg
ICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlm
b3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgewor
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogOCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwz
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9y
bS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZv
cm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAg
ICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFs
Q291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9JTlQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6
ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQoreworICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAg
IHsKKyAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
Ly8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
cygpCit7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVu
aWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1Yikgewor
ICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworCisgICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRV
bmlmb3JtLT50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6
ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1u
YnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFy
cmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVu
aWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lO
VF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwor
SUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhs
c2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFi
bGUpCit7CisgICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgRFdPUkQgcmVzdWx0OworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZs
YWdzIHw9IEQzRENPTVBJTEVfREVCVUc7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3Mg
fD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0g
c3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJc
blxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGgu
Y19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMOworICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNE
MTBCbG9iICpiaW5hcnkgPSBOVUxMOworICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5V
TEw7CisgICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRo
LCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JN
ZXNzYWdlKTsKKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBj
aGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRl
cigpOworCisgICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKKyAgICAg
ICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsK
KworICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JNZXNzYWdl
ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3Vs
dCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4o
YmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgYmlu
YXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0
dXJuIGJpbmFyeTsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcg
cmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExh
bmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1
Y2Nlc2Z1bAoraW50IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK3sKKyAgICBDb250
ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVj
dG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSkgKiB2YXJ5aW5nLT5zaXplOworICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291
bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAg
ICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNz
OyByKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0
cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJs
ZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKKworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1ty
ICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3VjY2Vz
cyAmJiBtID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9
IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hd
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4
XSA/IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsg
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYm
IHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtj
b2x1bW5dKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
cjsgeSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIo
KSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9
IDA7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisg
ICAgeworICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tp
bmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0
ZXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBz
dGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkg
fHwgdmVydGV4SExTTC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyBmcmFnVmFyKyspCisgICAgeworICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKKyAgICAgICAg
ZnJhZ1Zhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgdnR4VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKKyAgICB7CisgICAgICAgIHZ0
eFZhci0+cmVnID0gLTE7CisgICAgICAgIHZ0eFZhci0+Y29sID0gLTE7CisgICAgfQorCisgICAg
Ly8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQorICAgIGNvbnN0IFZhcnlp
bmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OworICAgIGlu
dCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZywgZnJhZ21lbnRTaGFkZXIpOworCisg
ICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMgPSBj
b250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5n
VmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgaWYg
KHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCisgICAgeworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVn
aXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQg
PSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0
cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0
LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2Yg
dGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQt
PmNvbCA9IGlucHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJG
cmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlu
cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNP
TE9SIiA6ICJURVhDT09SRCIpOworCisgICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVU
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9
IDA7CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGF0
dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
dmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZs
b2F0NCAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExT
TCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOworICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgdmVy
dGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENP
T1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOworCisgICAgICAgIHNlbWFudGljSW5k
ZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgIH0KKworICAgIHZl
cnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsK
KworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAgeworICAgICAg
ICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/
IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7CisKKyAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsg
dmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdp
c3RlcnMpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2lu
dFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGds
X1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xu
IgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVU
IG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAg
ICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAg
ICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJp
eAorICAgICAgICB7CisgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAg
ICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bv
c2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55IC0g
ZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlv
bi53KSAqIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi53ID0gZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1Bv
aW50U2l6ZSAmJiBzbTMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOworICAgIH0KKworICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9
CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxl
Um93Q291bnQodmFyeWluZy0+dHlwZSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOworICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5
IG11bHRpcGxlIHZhcnlpbmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4
XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0
OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0g
InoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZl
cnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhM
U0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJd
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dz
ID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtc
biI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
b3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93
Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlp
bmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0
cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRF
WENPT1JEMDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250
RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBW
RkFDRTtcbiI7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xv
clsxXSA6IENPTE9SO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5w
dXQpXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9h
dCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7CisgICAgICAgIAorICAgICAg
ICBpZiAoc20zKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5z
IHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0
KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQu
ZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC55ID0gZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZCBj
b250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50
ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3
KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC55ID0gLShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBk
eF9Db29yZC55ICsgZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56
ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQgPSBpbnB1dC5nbF9Qb2ludENvb3JkO1xuIjsKKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgewor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGlu
ZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2Ug
PD0gMC4wKSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAg
aWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIg
KyB2YXJ5aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJh
eSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ID0gaW5wdXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBw
aXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisg
ICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBv
dXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0
LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6Omxp
bmsoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAg
IGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCF2ZXJ0ZXhTaGFk
ZXIgfHwgIXZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hh
ZGVyLT5nZXRITFNMKCk7CisgICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRl
ci0+Z2V0SExTTCgpOworCisgICAgaWYgKCFsaW5rVmFyeWluZ3MocGl4ZWxITFNMLCB2ZXJ0ZXhI
TFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwor
ICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2Zp
bGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8w
IjsKKworICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeSh2ZXJ0
ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJ
RDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShwaXhlbEhMU0wuY19zdHIo
KSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4Qmlu
YXJ5ICYmIHBpeGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhl
bFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnkt
PkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2
ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1
bHQpKTsKKworICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxC
aW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAg
cGl4ZWxCaW5hcnkgPSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBt
UGl4ZWxFeGVjdXRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1
dGVzKGF0dHJpYnV0ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNv
bnN0YW50VGFibGVQUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9W
RVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRo
ZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGds
XyBhbmQgZHhfCisgICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBu
b3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAgIG1EeERlcHRoUmFu
Z2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOworICAgICAg
ICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsK
KyAgICAgICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nv
b3JkIik7CisgICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiKTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7CisgICAgICAgICAgICBt
RHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09y
TGluZXMiKTsKKworICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJp
YnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFBy
b2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRy
aWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7
CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgor
ICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJp
YnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0g
YXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwor
CisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9j
YXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0
aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTXVs
dGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBh
biBlcnJvcgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xv
Y2F0aW9uXSA9ICphdHRyaWJ1dGU7CisKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVS
b3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0
aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlz
IHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9u
J3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVy
YXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJp
YnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAg
ICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0
ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
ICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAg
ICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExv
Y2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2
YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhf
QVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIo
KSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5k
ZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAg
ICB7CisgICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleCht
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3Mg
PSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5k
ZXhdLnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykK
KyAgICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10g
PSBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNv
bnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNv
bnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFu
dEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25z
dGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3Rh
bnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsK
KworICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAg
ICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNv
bnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVz
Y3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudEhh
bmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBB
ZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hh
ZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVs
ICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAg
IEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlO
YW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChw
c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFu
dCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3Jp
cHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVS
RV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxl
clJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVy
IHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHZzQ29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRl
eCh2c0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwg
Z2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBU
X1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChz
YW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4
Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAg
ICB7CisgICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2Ny
aXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAg
ICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAg
ICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxl
LCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAx
KSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3Jp
cHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIu
IikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNh
c2UgRDNEWFBDX1NDQUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2Ug
RDNEWFBDX01BVFJJWF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAg
ICByZXR1cm4gZGVmaW5lVW5pZm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUg
KyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7
CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlv
biwgX25hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQg
bG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVt
IHR5cGUgPSB1bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgewor
ICAgICAgICBkZWxldGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBH
TF9GUkFHTUVOVF9TSEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsK
KyAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNv
bnN0YW50RGVzY3JpcHRpb24pOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAg
ICAgICByZXR1cm4gdW5pZm9ybS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jt
cy5wdXNoX2JhY2sodW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1V
bmlmb3Jtcy5zaXplKCkgLSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1
bmlmb3JtLT5hcnJheVNpemU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVz
aF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVu
aWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0
IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dz
ID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQ
VF9TQU1QTEVSMkQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29s
dW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExF
Ul9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lO
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9J
TlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFu
dERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1
YXJlIG1hdHJpY2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisv
LyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpz
dHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUpCit7CisgICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1l
LmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsg
bmFtZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
K3sKKyAgICBzdGQ6OnN0cmluZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFu
eSBzdHJ1Y3R1cmUgZmllbGQgZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdo
aWxlICgocG9zID0gbmFtZS5maW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQor
ICAgIHsKKyAgICAgICAgbmFtZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgdGhlIGxlYWRpbmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykK
KyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5hbWUuc3Vic3RyKDMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxv
YXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZl
Y3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
cHMuZmxvYXQ0SW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xf
RkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICog
NCArIGpdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwg
dGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHND
b3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+dnMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDog
MDsKKyAgICAgICAgaW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6
bWF4KHBzQ291bnQsIHZzQ291bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5
X01BWF9CT09MX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNv
dW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9
IEdMX0ZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0
NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0K
KyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZv
cm0tPnZzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNv
dW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9y
W0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQp
dltpXSwgMCwgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlcklu
ZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4
ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAg
ICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZs
b2F0NEluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1w
bGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0
SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgg
Pj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RP
UjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9S
NCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAg
ICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Cisg
ICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0g
PSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsK
KworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVu
aWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2
WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9
CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1u
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RP
UjQgKnZlY3RvcikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAw
KTsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKKy8vIGFwcGVuZCBh
IHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhlIHByb2dyYW0gaW5mbyBsb2cuCisvLyBUaGUgRDNEIGNv
bXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBmaWxlIHBhdGggaW4gc29tZSBvZiB0aGUgd2FybmluZyBv
ciBlcnJvciAKKy8vIG1lc3NhZ2VzLCBzbyBsZXRzIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2Yg
dGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9tIHRoZSBsb2cuCit2b2lkIFByb2dyYW1CaW5hcnk6OmFw
cGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIHN0ZDo6
c3RyaW5nIG1zZyhtZXNzYWdlKTsKKworICAgIHNpemVfdCBmb3VuZDsKKyAgICBkbworICAgIHsK
KyAgICAgICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGlmIChmb3VuZCAh
PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgeworICAgICAgICAgICAgbXNnLmVyYXNlKGZv
dW5kLCBzdHJsZW4oZmFrZXBhdGgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoZm91
bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworCisgICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwg
bXNnLmNfc3RyKCkpOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyhj
b25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpZiAoIWZvcm1hdCkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyIGluZm9bMTAyNF07CisKKyAgICB2YV9saXN0
IHZhcmFyZzsKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CisgICAgdnNucHJpbnRmKGlu
Zm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOwor
CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisKKyAgICBpZiAoIW1JbmZv
TG9nKQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTGVuZ3RoICsgMV07
CisgICAgICAgIHN0cmNweShtSW5mb0xvZywgaW5mbyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJsZW4obUluZm9Mb2cpOworICAgICAgICBj
aGFyICpuZXdMb2cgPSBuZXcgY2hhcltsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMV07CisgICAg
ICAgIHN0cmNweShuZXdMb2csIG1JbmZvTG9nKTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZyArIGxv
Z0xlbmd0aCwgaW5mbyk7CisKKyAgICAgICAgZGVsZXRlW10gbUluZm9Mb2c7CisgICAgICAgIG1J
bmZvTG9nID0gbmV3TG9nOworICAgIH0KK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpyZXNldElu
Zm9Mb2coKQoreworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBt
SW5mb0xvZzsKKyAgICAgICAgbUluZm9Mb2cgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVk
OworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9
CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAg
aWYgKGJ1ZlNpemUgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKG1JbmZvTG9nKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbiht
SW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7
CisgICAgICAgIH0KKworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisg
ICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9
CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5
cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRl
cworICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGlu
dCBhdHRyaWJ1dGU7CisgICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRl
eCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBh
Y3RpdmVBdHRyaWJ1dGUrKzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgewor
ICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0u
bmFtZS5jX3N0cigpOworCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsK
KyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBp
bnN0YW5jZQorCisgICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsK
K30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQorewor
ICAgIGludCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0
dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAg
IHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tp
cCBvdmVyIGludGVybmFsIHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0g
PSAwOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVu
aWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAo
bVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFj
dGl2ZVVuaWZvcm0gPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1
bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRo
YW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7
CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsK
KworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5j
cHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUg
LSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAg
ICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXpl
ID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+dHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4Kysp
CisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFy
ZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9
IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51
bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkg
KyAxKTsKKyAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRp
bmcgaW4gIlswXSIuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
bWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKCkKK3sKKyAgICBy
ZXNldEluZm9Mb2coKTsKKworICAgIGFwcGx5VW5pZm9ybXMoKTsKKyAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnModHJ1ZSkpCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKQor
eworICAgIC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2Yg
ZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGlt
YWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQ
cm9ncmFtIHdpbGwgZmFpbCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRz
IHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5z
aWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4
dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURjsgKytpKQorICAgIHsKKyAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVY
VFVSRV9VTktOT1dOOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVy
c1BTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQg
PSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICgl
ZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwg
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4
dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyBy
ZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJz
UFNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyAr
K2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxU
ZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAobG9nRXJyb3JzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
IT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICht
U2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUg
aW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGlu
dCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlv
bjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUR4Q29vcmRMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhI
YWxmUGl4ZWxTaXplTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJv
bnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzcxNzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW1CaW5hcnkuaApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9n
cmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFN
X0JJTkFSWV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1
ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJh
Z21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVw
cmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7
CisKKyAgICBjb25zdCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsg
ICAvLyBEZWNvcmF0ZWQgbmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVu
ZGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAg
dW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lz
dGVySW5mbworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZmxvYXQ0SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOwor
ICAgICAgICAgICAgYm9vbEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0g
MDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RYUlNfQk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckluZGV4OyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0
OiAgZmxvYXQ0SW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQp
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
Q291bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgZmxvYXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAg
ICAgIGludCBib29sSW5kZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsK
KworICAgIFJlZ2lzdGVySW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBT
dHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBh
cnJheXMgdG8gaGFuZGxlcworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1
bnNpZ25lZCBpbnQgaW5kZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlz
IHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdv
dWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQorewor
ICBwdWJsaWM6CisgICAgUHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisK
KyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVj
dDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0
cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5k
ZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNh
bXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVU
eXBlIGdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KTsKKyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBl
IHR5cGUpOworCisgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0z
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlm
b3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVu
aWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1z
KTsKKyAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6
ZSwgR0xpbnQgKnBhcmFtcyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigp
IGNvbnN0OworICAgIEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50
IGdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAg
IHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisg
ICAgYm9vbCBsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRl
cik7CisgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9M
b2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAg
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50
LCBHTHVpbnQgKnNoYWRlcnMpOworCisgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50
IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdM
ZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVD
b3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAg
dm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Cisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybU1heExlbmd0aCgpOworCisgICAgdm9pZCB2YWxpZGF0ZSgpOworICAgIGJvb2wgdmFsaWRh
dGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycyk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0
OworCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0
ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAg
Ly8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFByb2dyYW1CaW5hcnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGls
ZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29u
c3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhjb25z
dCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7
CisgICAgYm9vbCBsaW5rVmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJp
bmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRy
aWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5p
Zm9ybXMoR0xlbnVtIHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsK
KyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAm
Y29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0
aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVu
dW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwg
Y29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9v
bCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5
VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7CisgICAgdm9pZCBh
cHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50
IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOworCisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dT
YW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2co
Y29uc3QgY2hhciAqaW5mbywgLi4uKTsKKyAgICB2b2lkIHJlc2V0SW5mb0xvZygpOworCisgICAg
c3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOworCisgICAgSURpcmVjdDNERGV2aWNl
OSAqbURldmljZTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJs
ZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAg
IC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgSUQzRFhDb25zdGFu
dFRhYmxlICptQ29uc3RhbnRUYWJsZVBTOworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0
YW50VGFibGVWUzsKKworICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhf
QVRUUklCU107CisgICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisK
KyAgICBzdHJ1Y3QgU2FtcGxlcgorICAgIHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAg
IEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5
cGU7CisgICAgfTsKKworICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFNdOworICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURl07CisgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgIEdM
dWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxV
bmlmb3JtKj4gVW5pZm9ybUFycmF5OworICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBV
bmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKKworICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2Nh
dGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOworICAgIEdMaW50IG1EeENvb3JkTG9j
YXRpb247CisgICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworICAgIEdMaW50IG1E
eEZyb250Q0NXTG9jYXRpb247CisgICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwor
CisgICAgY2hhciAqbUluZm9Mb2c7CisgICAgYm9vbCBtVmFsaWRhdGVkOworfTsKK30KKworI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKaW5kZXggNjAw
NDI1NS4uNGI5MTFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcApAQCAtNjMsNjggKzYzLDE0NCBAQCBHTHVpbnQg
UmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShnZXREM0RGb3JtYXQoKSk7CiB9CiAKLVJlbmRlcmJ1ZmZl
clRleHR1cmU6OlJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRh
cmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJbXBs
ZW1lbnRhdGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0
YXJnZXQpCit7CisgICAgbVRleHR1cmUyRC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6flJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpCit7CisgICAgbVRleHR1cmUyRC5z
ZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJl
ZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5n
IGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4K
K3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkQtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwor
dm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkQtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
K0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNp
bCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU3RlbmNpbChtVGFyZ2V0KTsK
K30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgoMCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldCh0
ZXh0dXJlKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwogfQogCi1SZW5k
ZXJidWZmZXJUZXh0dXJlOjp+UmVuZGVyYnVmZmVyVGV4dHVyZSgpCitHTGVudW0gUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUu
c2V0KE5VTEwpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsK
K30KKworRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RDNERm9ybWF0KDApOworfQorCitHTHNp
emVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlh
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlh
bChtVGFyZ2V0KTsKK30KKworLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVt
ZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0
KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7
Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXAoKQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQoTlVMTCk7CiB9CiAKIC8vIFRleHR1
cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJl
bmNlcyB2aWEKIC8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5v
dGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
CiB7Ci0gICAgbVRleHR1cmUtPmFkZFByb3h5UmVmKHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVN
YXAtPmFkZFByb3h5UmVmKHByb3h5KTsKIH0KIAotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjpy
ZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQog
ewotICAgIG1UZXh0dXJlLT5yZWxlYXNlUHJveHkocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1h
cC0+cmVsZWFzZVByb3h5KHByb3h5KTsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlclRleHR1cmU6OmdldFJlbmRlclRhcmdldCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
K0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0
KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7
CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXREZXB0aFN0
ZW5jaWwoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJu
IE5VTEw7CiB9CiAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0V2lkdGgoKSBjb25z
dAorR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAog
ewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0K
LSAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKKworR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbVRleHR1cmUtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KLSAK
LUdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CisK
K0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApOwogfQogCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEQzREZv
cm1hdCgpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmU6OmdldFNhbXBsZXMoKSBjb25zdAorR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVk
IGludCBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTZXJpYWwoKSBjb25zdAordW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAogewotICAgIHJl
dHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKIH0KIAor
Ly8vLy8vIFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKwogUmVuZGVyYnVmZmVy
OjpSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNl
KSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsK
QEAgLTE1MiwxMSArMjI4LDE1IEBAIHZvaWQgUmVuZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29uc3QK
ICAgICBSZWZDb3VudE9iamVjdDo6cmVsZWFzZSgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiB9CiAKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0
RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwo
KTsKQEAgLTI0MywxMSArMzIzLDE1IEBAIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5SZW5kZXJidWZm
ZXJTdG9yYWdlKCkKIHsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBy
ZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1
cm4gTlVMTDsKQEAgLTM1Niw2ICs0NDAsOCBAQCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkK
ICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkg
KkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0
KQpAQCAtNDI4LDggKzUxNCwxNSBAQCBEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxi
dWZmZXIoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogeworICAgIGlm
IChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7
CisgICAgfQorCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCmluZGV4IDYw
ZWMwNTguLmU2ZDVkZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaApAQCAtMjEsNyArMjEsOCBAQAogCiBuYW1lc3BhY2Ug
Z2wKIHsKLWNsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcDsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVw
dGhTdGVuY2lsYnVmZmVyOwpAQCAtNTgsMTIgKzU5LDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZQogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZh
Y2UpOwogfTsKIAotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4
dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
KFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CiAKLSAgICB2aXJ0dWFsIH5SZW5k
ZXJidWZmZXJUZXh0dXJlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKICAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogICAg
IHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwpAQCAtODAsOSAr
ODEsMzcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAog
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0
dXJlKTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJE
KTsKIAotICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlPiBtVGV4dHVyZTsKKyAgICBCaW5kaW5n
UG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOworICAgIEdMZW51bSBtVGFyZ2V0OworfTsK
KworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisKKyAgICB2aXJ0dWFsIH5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJn
ZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOworCisgICAgQmluZGluZ1Bv
aW50ZXIgPFRleHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXA7CiAgICAgR0xlbnVtIG1UYXJn
ZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1No
YWRlci5jcHAKaW5kZXggYWM1OGFiZS4uNTdmZDNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcApAQCAtMTAyLDE0ICsxMDIsMTQgQEAg
dm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChtSW5mb0xv
ZykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5m
b0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICB9CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywg
aW5kZXgpOworICAgICAgICB9CiAKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGlu
Zm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZvaWQg
U2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKHNvdXJj
ZSkKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAoc291cmNlKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihz
b3VyY2UpKTsKKyAgICAgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOworICAg
ICAgICB9CiAKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGJ1ZmZlcltpbmRleF0g
PSAnXDAnOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmgKaW5kZXggOWM3YzBkZi4uNDMwODNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCkBAIC00Miw3ICs0Miw3IEBAIHR5cGVk
ZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwogCiBjbGFzcyBTaGFkZXIKIHsKLSAg
ICBmcmllbmQgUHJvZ3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBw
dWJsaWM6CiAgICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRs
ZSk7CkBAIC0xMjgsNyArMTI4LDcgQEAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0
dHJpYnV0ZUFycmF5OwogCiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0g
ICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAg
cHVibGljOgogICAgIFZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWlu
dCBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5jcHAKaW5kZXggMjkxNzdkMi4uMWFmMDhjYiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCkBAIC0zMSw4ICszMSwxMiBA
QCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlhbCA9IDE7
CiAKIHN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQogewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQpCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgeworICAg
ICAgICByZXR1cm4gRDNERk1UX0lOVFo7CisgICAgfQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgICAgICAgZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQogICAgIHsKICAgICAgICAgcmV0dXJu
IEQzREZNVF9EWFQxOwogICAgIH0KQEAgLTc1LDYgKzc5LDEwIEBAIHN0YXRpYyBEM0RGT1JNQVQg
Q29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogCiBz
dGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiB7
CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KICAgICBzd2l0Y2goZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1U
X0w4OgpAQCAtOTUsNiArMTAzLDIxIEBAIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRl
cmFibGUoRDNERk9STUFUIGZvcm1hdCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBp
bmxpbmUgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSkKK3sKKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7CisK
KyAgICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2Ug
fD0gRDNEVVNBR0VfREVQVEhTVEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVy
YWJsZSB8fCAoSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVz
YWdlIHw9IEQzRFVTQUdFX1JFTkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdl
OworfQorCiBJbWFnZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IApAQCAtMTU1LDYgKzE3
OCw4IEBAIHZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFRleHR1cmU5
ICpuZXdUZXh0dXJlID0gTlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9
IE5VTEw7CiAgICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1FTTsK
KyAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7CisgICAgQVNT
RVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVy
ZSBmb3IgZGVwdGggdGV4dHVyZXMKIAogICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9
IDApCiAgICAgewpAQCAtMTc4LDcgKzIwMyw3IEBAIHZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2Uo
KQogICAgICAgICAgICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKICAgICAgICAgfQog
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVx
dWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBnZXREM0RG
b3JtYXQoKSwKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4
dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEws
IGQzZEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCkBAIC0yNjQsNyArMjg5LDcgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFj
ZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHkK
IHsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsK
IAotICAgIGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQorICAgIGlmIChzb3VyY2VT
dXJmYWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCiAgICAgewogICAgICAgICBS
RUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgbUhlaWdodCk7CiAKQEAgLTI4NCwxMCArMzA5LDE5IEBAIHZvaWQgSW1hZ2U6OnVwZGF0
ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5CiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4
b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQv
dHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRw
dXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KKy8vIGludG8g
dGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgbG9ja2VkLnBCaXRzIHdpdGggbG9ja2VkLlBp
dGNoIGJ5dGVzIGluIGJldHdlZW4gZWFjaCBsaW5lLgogdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CisgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKmlucHV0KQogeworICAgIFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURf
UkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVj
dCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlUGl0Y2god2lkdGgsIG1Gb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7CiAgICAgaW5wdXQgPSAoKGNoYXIqKWlucHV0KSAt
IGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7CiAKQEAgLTI5NywyOSArMzMxLDM2IEBAIHZvaWQg
SW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0CiAgICAgICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewog
ICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRB
bHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBs
b2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1h
dCgpID09IEQzREZNVF9BOEw4KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1
cHBvcnRzU1NFMigpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5
dGVEYXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0
ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OworICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAg
ICAgICAgbG9hZEJHUkFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JB
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzI4LDcgKzM2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0CiAgICAgICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwor
ICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszNzgs
NyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAg
ICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0
NDREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KQEAgLTM0Niw3ICszODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAog
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM1NiwxOSArMzk3LDE5
IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0CiAgICAgICAgIHsKICAgICAgICAgICAvLyBmbG9h
dCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0
b3JlZCB0aGF0IHdheSBpbiBEM0QKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAg
ICAgbG9hZEFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRB
bHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwg
b3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxv
YWRSR0JBRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNzgsMjggKzQxOSwzMCBAQCB2b2lkIEltYWdlOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodAogICAgICAgICB7CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNv
bnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4g
RDNECiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZG
bG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhh
bGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KKworICAgIHVubG9jaygp
OwogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFs
cGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwpAQCAtNDA4LDcgKzQ1MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDE5LDcgKzQ2Miw0NyBAQCB2
b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhh
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Cisg
ICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKKyAgICBfX20xMjhpIHplcm9XaWRlID0gX21t
X3NldHplcm9fc2kxMjgoKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
CisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKKworICAgICAgICBpbnQgeDsKKyAgICAgICAgLy8gTWFrZSBvdXRw
dXQgd3JpdGVzIGFsaWduZWQKKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0
PGludHB0cl90PigmZGVzdFt4XSkgJiAweEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
b3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lk
dGg7IHggKz0gOCkKKyAgICAgICAgeworICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0g
X21tX2xvYWRsX2VwaTY0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2Vb
eF0pKTsKKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtl
IHRoZSBsb3dlciBieXRlIHRvIHplcm8KKyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5w
YWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisgICAgICAgICAgICAvLyBJbnRlcmxl
YXZlIGVhY2ggMTZiaXQgdG8gMzJiaXQsIG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KKyAg
ICAgICAgICAgIF9fbTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJj
ZURhdGEpOworICAgICAgICAgICAgX19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJv
V2lkZSwgc291cmNlRGF0YSk7CisKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVy
cHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIGxvKTsKKyAgICAgICAgICAgIF9tbV9zdG9y
ZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcgorICAgICAgICBmb3Ig
KDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDI4LDcgKzUxMSw3
IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CkBAIC00MzksNyArNTIyLDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2kKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhh
bGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtNDQ4LDcgKzUzMSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwog
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CkBAIC00NTksMTcgKzU0MiwxNiBAQCB2b2lkIElt
YWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9v
bCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0
aXZlPyAxOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0
UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKIAogICAg
ICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKICAgICAgICAg
ewpAQCAtNDg4LDcgKzU3MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQog
Ci12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTQ5Nyw3ICs1NzksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQg
KiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUwOCw3ICs1OTAsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAq
c291cmNlID0gTlVMTDsKQEAgLTUxNyw3ICs1OTksNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhv
ZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewog
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwpAQCAtNTI4LDE3ICs2MTAs
MTYgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25z
dCBpbnQgZGVzdEJ5dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
IAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQ
ZXJQaXhlbDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICAKICAgICAgICAgaWYgKCFuYXRpdmUpICAg
Ly8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTU1Nyw3ICs2MzgsNyBA
QCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVt
aW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTU2Niw3ICs2NDcsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYp
OworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwpAQCAtNTc3LDcgKzY1OCw3IEBAIHZvaWQgSW1hZ2U6
OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFI
YWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTU4Niw3ICs2NjcsNyBAQCB2b2lkIElt
YWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCsw
XTsKQEAgLTU5Nyw3ICs2NzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxm
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZQogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hh
ciAqc291cmNlID0gTlVMTDsKQEAgLTYwNiw3ICs2ODcsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
VUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAg
ICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07CkBA
IC02MTcsNyArNjk4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOwpAQCAtNjI2LDcgKzcwNyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKQEAgLTYzOCw3ICs3MTksNyBAQCB2b2lkIEltYWdlOjps
b2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
dm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAg
ICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTY0Nyw3ICs3MjgsNyBAQCB2b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zm
c2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY1OCw3ICs3MzksNyBA
QCB2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJH
QkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7CkBAIC02NjcsNyArNzQ4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNl
dCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY3OCw3ICs3
NTksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6
bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFT
U0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgaW50
ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjg4LDcgKzc2OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JB
VUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zm
c2V0ICogNCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
ICAgICAgICAgaW50IHggPSAwOwogCiAgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGln
bmVkCkBAIC03MjAsNyArODAxLDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0Uy
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEcKICAgICB9CiB9
CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJH
QkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVk
IGludCAqc291cmNlID0gTlVMTDsKQEAgLTcyOCw3ICs4MDksNyBAQCB2b2lkIEltYWdlOjpsb2Fk
UkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpegogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7CiAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7
CkBAIC03MzgsNyArODE5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICB9CiB9CiAK
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTQ0
NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzQ3LDcgKzgyOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JB
NDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03NTksNyArODQwLDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzY4
LDcgKzg0OSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBz
b3VyY2VbeF07CkBAIC03ODAsNyArODYxLDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZs
b2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzg5LDEyICs4NzAsMTIgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXoKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2
KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIG1lbWNw
eShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq
c291cmNlID0gTlVMTDsKQEAgLTgwMywxMiArODg0LDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JB
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4OworICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2g7CiAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7CiAgICAg
fQogfQogCi12b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQkdS
QURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtODE3LDI1ICs4OTgsNDMgQEAgdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUK
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCo0KTsKICAgICB9CiB9CiAK
IHZvaWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsKKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7
CisgICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworCisgICAgUkVDVCBsb2NrUmVjdCA9IHRy
YW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0
KTsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxv
Y2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gLUNvbXB1
dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1Gb3JtYXQpOworICAgIEdMc2l6ZWkgaW5wdXRTaXpl
ID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1Gb3JtYXQpOworICAgIGlu
cHV0ID0gKChjaGFyKilpbnB1dCkgKyBpbnB1dFNpemUgKyBpbnB1dFBpdGNoOworCiAgICAgc3dp
dGNoIChnZXREM0RGb3JtYXQoKSkKICAgICB7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0g
ICAgICAgICAgbG9hZERYVDFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhU
MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoK
LSAgICAgICAgICBsb2FkRFhUM0RhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWRE
WFQzRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEQzREZNVF9EWFQ1
OgotICAgICAgICAgIGxvYWREWFQ1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9h
ZERYVDVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgdW5sb2NrKCk7
CiB9CiAKIHN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7CkBAIC05NDgsMTEgKzEwNDcsOSBAQCBz
dGF0aWMgdm9pZCBGbGlwQ29weURYVDVCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3Vy
Y2UsIHVuc2lnbmVkIGludCogZGVzdAogICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsg
MiwgZGVzdCArIDIpOwogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkRFhUMURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9mZnNl
dCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh3
aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VSVChp
bnB1dFBpdGNoICUgOCA9PSAwKTsKICAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwpA
QCAtOTg1LDcgKzEwODIsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQg
KiA4KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKIAogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW50c0Fjcm9zczsgeCArPSAyKQogICAgICAgICAgICAgICAgIHsKQEAgLTk5NiwxMSArMTA5Myw5
IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2Fk
RFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRo
ID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91
dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBAIC0xMDM1LDcgKzExMzAsNyBAQCB2b2lkIEltYWdlOjps
b2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyAr
K3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAg
ICAgICB7CkBAIC0xMDQ2LDExICsxMTQxLDkgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRE
WFQ1RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAw
KTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7CiAgICAgQVNTRVJUKHdpZHRoICUgNCA9
PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7CiAgICAgQVNTRVJUKGlucHV0UGl0Y2gg
JSAxNiA9PSAwKTsKICAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAwKTsKQEAgLTEwODUs
NyArMTE3OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoKTsKIAogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fj
cm9zczsgeCArPSA0KQogICAgICAgICAgICAgICAgIHsKQEAgLTEyNjcsOSArMTM2MCw5IEBAIHZv
aWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwKICAgICBtRGlydHkgPSB0cnVlOwogfQogCi1UZXh0dXJlU3Rv
cmFnZTo6VGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFy
Z2V0KHJlbmRlclRhcmdldCksCi0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1
cmVQb29sKG1SZW5kZXJUYXJnZXQpKSwKK1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShE
V09SRCB1c2FnZSkKKyAgICA6IG1EM0RVc2FnZSh1c2FnZSksCisgICAgICBtRDNEUG9vbChnZXRE
aXNwbGF5KCktPmdldFRleHR1cmVQb29sKHVzYWdlKSksCiAgICAgICBtVGV4dHVyZVNlcmlhbChp
c3N1ZVRleHR1cmVTZXJpYWwoKSkKIHsKIH0KQEAgLTEyODAsNyArMTM3Myw3IEBAIFRleHR1cmVT
dG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc1JlbmRl
clRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJu
IChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVO
Q0lMKSkgIT0gMDsKIH0KIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QK
QEAgLTEyOTMsNiArMTM4NiwxMSBAQCBEM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkg
Y29uc3QKICAgICByZXR1cm4gbUQzRFBvb2w7CiB9CiAKK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpn
ZXRVc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EM0RVc2FnZTsKK30KKwogdW5zaWduZWQg
aW50IFRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbVRleHR1cmVTZXJpYWw7CkBAIC0xNDUwLDE1ICsxNTQ4LDcgQEAgdm9pZCBUZXh0dXJlOjpz
ZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2Ug
KmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExP
Q0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygm
bG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVu
bG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdl
LT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9
CiB9CkBAIC0xNDY3LDUyICsxNTU3LDE2IEBAIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppCiB7CiAg
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9j
a2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwp
OwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENv
bXB1dGVDb21wcmVzc2VkU2l6ZShpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2Vk
RGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCAtaW5wdXRQ
aXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1
dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+
dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRh
KDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7CiAg
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCiBib29sIFRleHR1cmU6OnN1
YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGgg
KyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdl
LT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKElzQ29tcHJlc3NlZChpbWFn
ZS0+Z2V0Rm9ybWF0KCkpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBp
bWFnZS0+Z2V0Rm9ybWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCiAgICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERh
dGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2Ut
PmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhl
bHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxv
Y2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNTIxLDM3ICsxNTc1LDkgQEAg
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWcKIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsK
LSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVD
VCB1cGRhdGVSZWdpb247Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAg
ICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRh
dGVSZWdpb24uYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9u
LnRvcCA9IHlvZmZzZXQ7Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwot
Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwot
ICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4
b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0
SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQor
ICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQog
CkBAIC0xNjY3LDIzICsxNjkzLDI3IEBAIGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0
KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVj
dDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKHRydWUpLCBtUmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0
dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNl
VGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVy
VGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7CiAgICAg
bVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVy
ZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFy
Z2V0KSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlh
bCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RG
T1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDog
VGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0
b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0KICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRh
cmdldCgpID8gRDNEVVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZt
VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhl
IHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBh
cyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNr
aXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVp
Z2h0ID4gMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2
aWNlKCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdp
ZHRoLCBoZWlnaHQsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4
dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNjk1LDYgKzE3MjUsOCBAQCBUZXh0dXJl
U3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJm
YWNlTGV2ZWwoaW50IGxldmVsKQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
TlVMTDsKQEAgLTE3NzgsMTkgKzE4MTAsMjAgQEAgR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdo
dChHTGludCBsZXZlbCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMZW51bSBUZXh0
dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJy
YXlbMF0uZ2V0Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUoKSBjb25z
dAorR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKKyAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0Qz
REZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEQz
REZNVF9VTktOT1dOOwogfQogCiB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSB0eXBlKQpAQCAtMjAxNiwxMCArMjA0OSwxMCBAQCB2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShH
THNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTAog
ICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAg
ICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwogICAgIEQz
REZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsK
LSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
ZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwor
ICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxz
ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4
dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0
KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10
LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMjA3NCw4
ICsyMTA3LDggQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5h
bEZvcm1hdCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxG
X0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIo
KSkpCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29u
dGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldElu
dGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKICAgICB7CiAgICAgICAgIGlmIChtTWFnRmls
dGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CkBAIC0yMTU3LDkg
KzIxOTAsMTQgQEAgYm9vbCBUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QK
K2Jvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICByZXR1cm4gSXND
b21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJE
Ojppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBJc0RlcHRoVGV4dHVy
ZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE3MywxMSArMjIxMSwxMSBA
QCB2b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiAgICAgR0xzaXplaSB3aWR0aCA9IG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCk7CiAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS5nZXRIZWlnaHQoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNE
Rm9ybWF0KCk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKGZvcm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKTsKKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9y
bWF0KCk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNh
Z2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCByZW5k
ZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxz
LCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAKICAgICBpZiAobVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKQogICAgIHsKQEAgLTIyMTcsOSArMjI1NSwxMCBAQCB2b2lkIFRl
eHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICAgICAgR0xzaXplaSB3aWR0aCA9
IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUlt
YWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9u
TGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdl
QXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1h
Z2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRU
ZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVl
KTsKIAotICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxz
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHRydWUpOworICAgICAgICBuZXdUZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVp
Z2h0KTsKIAogICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAt
MjIzMiw4ICsyMjcxLDggQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgp
CiAgICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBt
VGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAgIHsgICAKICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0y
MzE1LDEyICsyMzU0LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCkKIAogICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQog
ICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCks
IG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOworICAgICAgICBtQ29sb3Ji
dWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyRCh0aGlzLCB0YXJnZXQpKTsKICAgICB9CiAKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRl
eHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEKTsKQEAgLTIzMzMsNiArMjM3NCwzMyBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIAogICAg
IHVwZGF0ZVRleHR1cmUoKTsKICAgICAKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0
aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgoMCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Cit9
CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUy
RDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCit7CisgICAgQVNTRVJUKHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJl
IGlzIGNyZWF0ZWQKKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAg
Ly8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0Rl
cHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwogfQogCkBAIC0yMzUzLDE4ICsyNDIxLDIy
IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpCiAgICAgcmV0dXJuIG1UZXhTdG9yYWdlOwogfQogCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQg
c2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJn
ZXQpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVD
dWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVN
YXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKQor
ICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQogewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMs
IGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBh
cyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNr
aXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMs
IGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAg
IH0KIH0KIApAQCAtMjM3Niw2ICsyNDQ4LDggQEAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4
dHVyZVN0b3JhZ2VDdWJlTWFwKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1
cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0yNDU0LDM1ICsyNTI4LDM2IEBAIEdMZW51bSBUZXh0
dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJF
X01BUDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwp
IGNvbnN0CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0
V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVts
ZXZlbF0uZ2V0V2lkdGgoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTHNp
emVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNpemVp
IFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldEhlaWdodCgpOworICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRIZWln
aHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZUN1
YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VHlw
ZSgpIGNvbnN0CitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVsw
XVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCld
W2xldmVsXS5nZXRGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBHTF9OT05FOwog
fQogCi1EM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RG
T1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQor
ICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRE
M0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0K
IAogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQpAQCAtMjU4Miw4ICsyNjU3LDgg
QEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
KSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAgaWYg
KChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09
IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
KSB8fAorICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjY3OSw5ICsyNzU0
LDkgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQo
KSBjb25zdAorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJu
YWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKSk7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTI2OTQsMTEgKzI3NjksMTEgQEAgdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgR0xzaXplaSBzaXplID0gbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxl
dmVscyhzaXplLCAwKTsKLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0RDNERm9ybWF0KCk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0FOR0xFKTsKKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0RDNERm9ybWF0KCk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNk
Zm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBmb3JtYXQsIHNpemUs
IHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICBpZiAobVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKQogICAgIHsKQEAgLTI3NDIsOSArMjgxNywxMCBAQCB2b2lkIFRleHR1
cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgIHsKICAgICAgICAgR0xzaXpl
aSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2
ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQg
PSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQz
ZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBk
M2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQU5HTEUsIHRydWUpOwogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVz
YWdlLCBzaXplKTsKIAogICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAg
ewpAQCAtMjc1OSw4ICsyODM1LDggQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVu
ZGVyVGFyZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQo
ZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNl
KSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI5MjksMTAgKzMwMDUs
MTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4
dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJh
Y3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRl
eHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJn
ZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRl
eHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMs
IGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0
dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKICAgICBt
SW1tdXRhYmxlID0gdHJ1ZTsKIAogICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZl
bHM7IGxldmVsKyspCkBAIC0zMDQ5LDEyICszMTI1LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVy
ZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQogCiAgICAgaWYgKG1GYWNl
UHJveGllc1tmYWNlXSA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2Vd
ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0
YXJnZXQpKTsKKyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihp
ZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKIH0KIAorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpOwpAQCAtMzA4Nyw0ICszMTY1LDQgQEAgVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVD
dWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKaW5kZXggMTlhNmViNS4u
MmU2MzEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmgKQEAgLTUzLDkgKzUzLDYgQEAgY2xhc3MgSW1hZ2UKICAgICB2b2lkIG1hcmtEaXJ0
eSgpIHttRGlydHkgPSB0cnVlO30KICAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxz
ZTt9CiAKLSAgICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0
IFJFQ1QgKnJlY3QpOwotICAgIHZvaWQgdW5sb2NrKCk7Ci0KICAgICBib29sIGlzUmVuZGVyYWJs
ZUZvcm1hdCgpIGNvbnN0OwogICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIApA
QCAtNzAsNTUgKzY3LDU3IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCB1cGRhdGVTdXJmYWNlKElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCk7CiAKLSAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBs
b2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxw
aGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0
OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1p
bmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5j
ZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhh
bGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBs
b2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JIYWxm
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBs
b2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKICAgICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7Cisg
ICAgdm9pZCBsb2FkRFhUMURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0Rh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdm9pZCBsb2FkRFhUM0RhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAK
ICAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQpOwpAQCAtMTI4LDYgKzEyNyw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lk
IGNyZWF0ZVN1cmZhY2UoKTsKIAorICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9j
a2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdM
c2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsK
QEAgLTE0NCwyMCArMTQ2LDIxIEBAIGNsYXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQog
ewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpOworICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlKCk7CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29u
c3Q7CiAgICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBj
b25zdDsKKyAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlU2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBi
b29sIG1SZW5kZXJUYXJnZXQ7CisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0
IEQzRFBPT0wgbUQzRFBvb2w7CiAKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJp
YWw7CkBAIC0xOTAsMTQgKzE5Myw3IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRP
YmplY3QKICAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2Uo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1Nh
bXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2Vk
KCkgY29uc3QgPSAwOwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7
CiAgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KSA9IDA7CkBAIC0yMTYsOCArMjEyLDYgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3Vu
dE9iamVjdAogICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0g
c3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBh
dCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2
ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoK
LSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1h
Z2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSk7CiAgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwog
ICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMsIEltYWdlICppbWFnZSk7CkBAIC0yNTgsNyArMjUyLDcgQEAgY2xhc3MgVGV4dHVy
ZVN0b3JhZ2UyRCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6CiAgICAgZXhw
bGljaXQgVGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUp
OwotICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCk7CisgICAgVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAt
Mjg2LDExICsyODAsMTIgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAg
IHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVp
IGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVp
Z2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZv
cm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdp
ZHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25z
dDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBi
b29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdM
aW50IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29t
cHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBA
IC0zMDEsNyArMjk2LDYgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2
b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKQEAgLTMwOSw2ICszMDMsMTEgQEAg
Y2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0z
MTYsNyArMzE1LDYgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1
YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAg
ICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsK
IAogICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OwpAQCAtMzQxLDcgKzMzOSw3IEBA
IGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9v
bCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7CiAKQEAgLTM2OSwxMSArMzY3LDExIEBAIGNsYXNzIFRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRh
cmdldCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBs
ZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQg
Z2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1h
dChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNz
ZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFn
ZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpOwogICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKQEAgLTM5MSw3ICszODksNiBAQCBjbGFz
cyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNDb21wcmVzc2VkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBz
KCk7CiAKQEAgLTM5OSw2ICszOTYsMTAgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMg
VGV4dHVyZQogCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2Up
OwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVDdWJlTWFwKTsKIApAQCAtNDA2LDcgKzQwNyw2IEBAIGNsYXNzIFRleHR1cmVDdWJl
TWFwIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpn
ZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVmVydGV4RGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKaW5kZXggOTViYzNmYi4uNzBmNDc1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRh
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9W
ZXJ0ZXhEYXRhTWFuYWdlci5jcHAKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgiCkBAIC0xMjgsMTAgKzEy
OSwxMSBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdAogCiAgICAgY29uc3QgVmVydGV4QXR0cmli
dXRlQXJyYXkgJmF0dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogICAg
IFByb2dyYW0gKnByb2dyYW0gPSBtQ29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OwogCiAgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHRyYW5z
bGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4
KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgICAgIHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5k
ZXhdLmFjdGl2ZSA9IChwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUlu
ZGV4KSAhPSAtMSk7CiAgICAgfQogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBzdG9y
YWdlIHNpemUgcGVyIHVzZWQgYnVmZmVyLCBhbmQgaW52YWxpZGF0ZSBzdGF0aWMgYnVmZmVycyB0
aGF0IGRvbid0IGNvbnRhaW4gbWF0Y2hpbmcgYXR0cmlidXRlcwpAQCAtNDQ4LDggKzQ1MCw4IEBA
IHN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzCiB0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1
Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3Jt
YWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwogCiAvLyBVc2Ug
YSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkg
bWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZM
T0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZp
eGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xp
bnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQs
IGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9Owog
CiAvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1
ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkK
IC8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKaW5kZXggZWU4ZWNhOS4u
OTVkYjU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9G
ZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC01NCwyNiArNTUs
MTIxIEBAIGJvb2wgdmFsaWRJbWFnZVNpemUoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkKKy8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBv
bmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KK2Jvb2wgY2hlY2tUZXh0dXJl
Rm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK3sKKyAgICAvLyB2YWxpZGF0
ZSA8Zm9ybWF0PiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdM
X0JHUkFfRVhUOgorICAgICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lM
X09FUzoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gaW52YWxpZCA8dHlw
ZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBj
b21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0hBTEZf
RkxPQVRfT0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAg
fQorfQorYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkK
IHsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0
ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5p
c0NvbXByZXNzZWQobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05F
ICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIGlmIChmb3Jt
YXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgaWYgKGNvbXByZXNzZWQpCiAgICAgewotICAgICAgICBpZiAo
KHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fCAKKyAg
ICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgw
KSkgfHwKICAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUt
PmdldEhlaWdodCgwKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwpAQCAtODksNiArMTg1LDQzIEBAIGJvb2wgdmFsaWRh
dGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVTdWJJbWFn
ZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkK
K3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0
ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAo
Zm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQpCisgICAgewor
ICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRo
KHRhcmdldCwgMCkpIHx8CisgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAh
PSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdl
dCwgbGV2ZWwpIHx8CisgICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWln
aHQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiAvLyBjaGVj
ayBmb3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3Ig
UmVhZFBpeGVscwogYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQogewpAQCAtMTA5NCw3ICsxMjI3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMK
ICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1
cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwg
d2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTAyLDcgKzEyMzUs
NyBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2ZmcwogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUs
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJl
KSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwg
d2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0
ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnN1YkltYWdlQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTI1OCw2ICsxMzkxLDE5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0xMzU1LDIzICsxNTAxLDMx
IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIEdM
ZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIEdMZW51
bSB0ZXh0dXJlRm9ybWF0ID0gR0xfUkdCQTsKIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlv
ZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXgyZCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRl
eHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOworICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKIAotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVy
ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJl
YWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhv
ZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRleGN1YmUpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5
IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
IAogICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQogICAgICAgICAg
ICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KQpAQCAtMTQxNCw2ICsxNTY4LDkgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQzX0FOR0xFOgogICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtMjMwNiwxOSArMjQ2MywyMSBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3Nl
ZCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHRleHRhcmdldCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdl
dFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJF
XzJEKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9
IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKQEAgLTIzMjYsMTEgKzI0ODUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01B
UCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0
PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwpAQCAtMjQ0MCwyOCArMjYw
Niw0MSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpCiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlOwotCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJk
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDAp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4Y3ViZS0+aXNDb21wcmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1p
cG1hcHMoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC0yNzU5LDEyICsyOTM4LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlvbihH
THVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBw
cm9ncmFtT2JqZWN0LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBwcm9ncmFtQmluYXJ5LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMjE4LDcgKzMzOTgsNyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBu
YW1lLCBHTGludCogcGFyYW1zKQogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2Jq
ZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKQEAgLTMy
NDEsNiArMzQyMSw5IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9n
cmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCiAgICAgICAgICAgICAgIGNhc2UgR0xf
QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJv
Z3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VT
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTM3NjYsMTIgKzM5NDksMTggQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBidWZTaXoKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5n
ZXRVbmlmb3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zODAwLDEyICszOTg5LDE4IEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCogcGFyYW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CkBAIC0zODQwLDE3ICs0MDM1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGds
R2V0blVuaWZvcm1pdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
YnVmU2l6CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9u
LCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg3OSwx
NyArNDA3NSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3Jh
bSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpCiAKICAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2
KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTM5MzAsMTIgKzQxMjcsMTMgQEAgaW50IF9fc3RkY2FsbCBnbEdldFVuaWZv
cm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7CisgICAg
ICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTUwMTIsNiAr
NTIxMCwyNiBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIHZhbGlk
YXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UXzI0XzhfT0VTOgorICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucworICAg
ICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAgICAg
Ly8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURf
T1BFUkFUSU9OCiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKQEAgLTUwMjQsNyArNTI0Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGNhc2UgR0xfUkdCOgpAQCAtNTAzNiw3ICs1MjU0LDcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgpAQCAtNTA0OSw3ICs1MjY3LDcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09F
UzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKQEAgLTUwNTgsNyAr
NTI3Niw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8gZXJyb3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVy
ZXMgYXJlIGhhbmRsZWQgYmVsb3cKQEAgLTUwNjYsOCArNTI4NCwyNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFs
Zm9ybWF0LCBHTAogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRToKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
CiAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6
CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5D
SUxfT0VTOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGJvcmRlciAhPSAwKQpAQCAtNTE0Niw2ICs1MzgzLDIz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0aXBs
ZSBsZXZlbHMsCisgICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9l
cyBub3QKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0gMCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtNTQxNiw2ICs1NjcwLDI1IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3Rv
cmFnZTJERVhUKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFy
Z2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBBTkdMRV9kZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMg
MS1sZXZlbCB0ZXh0dXJlcworICAgICAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCkBAIC01NDg0
LDE0ICs1NzU3LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFnbDo6
Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICBpZiAoIWNoZWNr
VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQg
YnkgaGVscGVyIGZ1bmN0aW9uCiAgICAgICAgIH0KIAogICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwpAQCAtNTUxNywxMSArNTc4NSwyOSBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRh
cmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGlu
ZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9
PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1h
dCwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAgICAg
ICAgICAgICB9CkBAIC01NTI5LDcgKzU4MTUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50CiAg
ICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNl
dCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTU3OCw3ICs1
ODY0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01
NjIyLDcgKzU5MTQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTFpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CkBAIC01NjY4LDcgKzU5NjYsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQs
IHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTU3MTQsNyArNjAxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0y
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU3NjAsNyArNjA3MCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTgwNiw3ICs2MTIyLDEzIEBAIHZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
M2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTg1Miw3ICs2MTc0LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODk4LDcgKzYyMjYsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTM4LDcgKzYy
NzIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1
ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTU5NzgsNyArNjMxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9y
bU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjAx
OCw3ICs2MzY0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02MDU0LDcgKzY0MDYsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2Jq
ZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBA
IC02MDkyLDcgKzY0NDQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBwcm9ncmFtT2JqZWN0LT52YWxpZGF0ZSgpOworICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmlu
YXJ5LT52YWxpZGF0ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTY0NjMsNiArNjgyMSw3OSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RP
RVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAg
IH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYnVmU2l6ZSA9ICVzLCBsZW5n
dGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIs
CisgICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFy
eSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworCisgICAg
ICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpsZW5n
dGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQg
cHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0gMHgleCwgYmluYXJ5ID0gMHgl
MC44cCwgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJp
bmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1hdCAhPSBHTF9QUk9HUkFNX0JJ
TkFSWV9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJpbmFyeShOVUxMKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNv
bnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24KQEAgLTY0OTksNyAr
NjkzMCw4IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRj
YWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRy
aWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSln
bERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9n
cmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlP
RVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5z
aW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCmluZGV4
IDdkMmI2NDkuLjNiYzgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKQEAgLTQwMSw2ICs0MDEsMTAgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmlu
YXJ5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
LlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDkxLDYgKzQ5NSwxMCBAQAogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5h
cnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxR
dWVyeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIxLi40NDEwNWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGll
cy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRp
ZXMuY3BwCkBAIC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3Jt
YXQpCiAgICAgfQogfQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7Cisg
ICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09
IEdMX0RFUFRIX1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRl
cywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29t
cHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVM6CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNh
c2UgR0xfRkxPQVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMs
NTMgKzM0OCw2IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkK
ICAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRh
cmdldCh0YXJnZXQpOwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9m
IHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1h
dFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82
XzU6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpA
QCAtNDA3LDYgKzM3NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZv
cm1hdCkKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDog
ICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThf
RVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09N
UE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICBy
ZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUzogICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8v
IFVuc3VwcG9ydGVkCiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0
VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9F
WFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRf
T0VTOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfSU5UXzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAg
LTc2Nyw2ICs3NDEsNyBAQCBEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVu
dW0gZm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xf
Tk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xf
UkdCQTQ6CiAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzog
ICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAtOTY1LDYgKzk0MCwxNiBAQCBi
b29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgSXNEZXB0aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkK
K3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29s
IElzU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4g
KHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNG
cm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAo
dHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCmluZGV4IDg4MjM4ZGMuLmVkMTUx
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuaApAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBE
M0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdU
JywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFL
RUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5
ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCiBHTHNpemVpIENvbXB1dGVDb21wcmVz
c2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCk7CiBHTHNpemVpIENvbXB1dGVD
b21wcmVzc2VkU2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCk7CiBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1
cmUoR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7CiBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9v
bCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdM
ZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiBHTGVudW0gRXh0cmFj
dFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIApAQCAtNzksNiArODIsOCBAQCBHTHVpbnQg
R2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7CiBHTHVpbnQgR2V0U3RlbmNpbFNp
emUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwogYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9S
TUFUIHN1cmZhY2VGb3JtYXQpOwogYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZh
Y2VGb3JtYXQpOworYm9vbCBJc0RlcHRoRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsK
K2Jvb2wgSXNTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIAogR0xzaXpl
aSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCBlMGUzZTVjLi5mNzNjNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5
NDEsNiArMzk0MSw5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0RldGVjdFJlY3Vyc2lvbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9FeHRlbnNpb25CZWhhdmlvci5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9Gb3JMb29wVW5yb2xsLmggXApAQCAtMzk2MCw3ICszOTYzLDIwIEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlhZ25vc3RpY3MuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nl
c3MuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3NjYW5uZXIuaCBcCkBAIC0zOTc1LDE0ICszOTkxLDE2IEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUG9v
bEFsbG9jLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmll
ckFsaXZlLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbW92ZVRy
ZWUuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rp
b24uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9s
LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvdXRpbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oIFwKQEAgLTM5OTUsNiArNDAxMywxMCBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0NvZGVHZW5HTFNMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
Q29tcGlsZXIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1
Zy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9nbHNsYW5nX2xleC5jcHAgXApAQCAtNDAxOSwxMCArNDA0MSwxMSBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xh
dG9yR0xTTC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmNwcCBcCi0gICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRp
bC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJp
YWJsZUluZm8uY3BwIFwKQEAgLTQwMzIsNyArNDA1NSwxOSBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmMgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBc
CisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>
<flag name="commit-queue"
          id="155527"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147934</attachid>
            <date>2012-06-15 18:43:27 -0700</date>
            <delta_ts>2012-06-16 11:14:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1045243</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi4yZDg1OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbik7Cit9CisKIHZvaWQgVFBhcnNlQ29udGV4dDo6
d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKSB7CkBAIC0yMjksNiArMjM0
LDExIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICB2
YV9lbmQobWFya2VyKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdh
cm5pbmcobG9jLCByZWFzb24sIHRva2VuLCAiJXMiLCAiIik7Cit9CisKIC8vCiAvLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KIC8vCkBA
IC0yNjUsMTMgKzI3NSwxMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeQogICAgIHN3aXRjaCgg
dHlwZSApewogICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAi
Tm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiJXMiLCAiIiApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAo
aW50KSIsICIiLCAiJXMiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMzIzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
KiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0
ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9u
ZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMzQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQq
IG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM3NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCog
bm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYg
c3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIs
IG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDcgKzQwOCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQx
NCw3ICs0MjQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhw
cmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MzAsNyArNDQwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJv
ckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYg
KGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkg
YWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJv
bmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00NDksMjQgKzQ1OSwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09
IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIp
OwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUg
cmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0
dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUzOSw1MSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVj
dG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVs
bCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNv
bnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUt
PmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBu
b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0
eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVu
b3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBj
b25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2Rl
LT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50
IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NTg1LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs2MTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3
ICs2MjUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMx
LDcgKzY0Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2NTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjU4LDcgKzY3MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAg
ICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYg
CiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVy
cyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNjkwLDE0ICs3MDIsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVF
cnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50
ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUg
YSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcyNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUo
dHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTczMSw3ICs3NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzc5LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3
IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFy
cmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBp
bmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgyOCw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUs
IFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVp
bHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MzUsNyAr
ODQ3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCAqbm9kZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogCiAgICAgICAgIGludCBmcmFnRGF0YVZh
bHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIo
KVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhh
dmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICIlcyIsICJnbF9GcmFnRGF0YSBjYW4gb25s
eSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg4Miw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBt
dXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRp
YWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04OTEsNyArOTAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JD
aGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiVzIiwiIik7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUg
PSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiwxMSArOTE4LDExIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlCiBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2Vk
IG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpLCAiJXMiLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzAsMTIgKzk4MiwxMiBAQCBjb25zdCBURnVu
Y3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBj
YWxsLCBib29sICpidQogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGlu
ZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5h
bWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJv
ciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAyNyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1CiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8KQEAgLTEwMzAsNyArMTA0Miw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0g
aW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24t
bWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTI0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwog
ICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIApAQCAtMTMwMSw3ICsxMzEzLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJt
VHkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzQ1
LDcgKzEzNTcsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1
cm4gMDsKQEAgLTEzODAsNyArMTM5Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQyOCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0
cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBh
bGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAg
ICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4K
ICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBu
b3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ2NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE1MDIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCmluZGV4IDNlMDU3NjMuLmEyYWUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC03Myw5ICs3MywxMyBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgCisgICAgICAgICAg
ICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAg
IHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgNSwgNikpKTsKKyAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgcmVj
b3ZlcigpOwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmluZGV4IGE2MDBjMDIuLjll
ZjRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5o
PgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBA
IC0xNTgsMTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5z
aWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjbwogCiAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRm
KGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQg
MHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1z
ZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
CiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAg
ICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0
ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2cs
IHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2Nh
dGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2Ug
aW4gZ3VhcmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxF
Ul9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFu
ZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJp
bmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rp
b25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rp
b25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0g
bm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBF
T3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQor
ICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5j
dGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBA
IC0yNCw2ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsK
K2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRl
bnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNw
ZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyBy
ZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBjbGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1
cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUq
IHJvb3QpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNj
b3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBz
aGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBt
YW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hh
ZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0
dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFm
ZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNh
biBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNo
YWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAg
ICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAg
IGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBA
QCBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAg
aW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKICAgICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5k
bGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZh
ckluZm8ubmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBu
YW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBl
ZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5
CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxv
dy4KICAgICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1h
eE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZv
Lm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBl
ZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmlu
ZGV4IGVkYmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8v
CiAvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAg
LTU2LDcgKzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5n
bGVkTmFtZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRO
b21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIw
XTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWRO
YW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIK
KworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwg
dGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMu
YmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQor
fQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBU
R3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rp
b25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVu
dCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1G
dW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBu
ZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJ
ZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVy
ICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAq
aXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGlu
dGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2Vy
dChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBj
b2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVp
Y2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgp
KSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9u
KGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOwor
ICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCog
bG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2Jh
Y2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxP
cCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2Fs
T3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7
CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9w
OjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxM
OworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5n
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcw
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIzNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZTsKKworVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vo
b2xkZXIKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVp
bGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQo
bm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAg
c3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5j
dGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihp
bnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdl
IGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFn
Z3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4g
ZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlr
ZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAv
LyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3Vt
ZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGlu
dGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJn
dW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0g
Kml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAg
ICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3Jl
YXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAg
ICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1
bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNh
bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9s
IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQg
c3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlp
ZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBm
dW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMg
dGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25t
ZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0
aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25D
YWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVD
aGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVn
aW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRo
aXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJl
bnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5n
LgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisK
KyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5k
ZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBz
eW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHko
KSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9CisgICAgICAgICZUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9w
KCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKwor
Ym9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1C
aW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmlu
YXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5h
cnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNh
bE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAg
ICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1M
ZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9s
ID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWlu
dGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50
b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVl
IG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAg
ICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBu
b3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAh
PSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1Jp
Z2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRl
cm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMs
IGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBz
eW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50
LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNz
ZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25t
ZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIg
dmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxs
CisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5p
bnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3At
PmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0
VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdy
YXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJt
TG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5
cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVy
bUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmln
aHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rp
b24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0
TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVT
ZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1
ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
VHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJt
RmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBp
bnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1D
b25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29u
ZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25k
aXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBo
TG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAg
IGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGlu
dGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+
Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlz
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9k
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5v
ZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rl
cy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJl
bnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5v
ZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTg0IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVh
dGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0
aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xh
c3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRl
bmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0
ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisgICAgLy8KKyAgICAvLyBG
b3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRp
b25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUu
CisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVh
Y2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5vZGVzLgorICAgIC8vCisg
ICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFN0
YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAg
ICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNl
dCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkg
PyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBu
b2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Cisg
ICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMg
aXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAg
ICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKworICAg
ICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgICAgIG5l
d1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAg
ICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBh
cmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNz
aWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sg
dGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVu
dE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbm9kZVNldHMudG9wKCkt
Pmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAg
ICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGlu
c3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwg
aXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWlu
dGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5t
Tm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5l
cigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRT
dGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlz
IGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBX
aGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBu
b2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2Rl
IHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNzaWdubWVudC4KKyAgICAv
LyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBp
bnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRy
ZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2Nv
cGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
IHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtS
aWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1
c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5bWJvbC4KKyAgICAvLwor
ICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgY2xhc3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1YmxpYyBUR3JhcGhTeW1ib2wgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBUU3VidHJlZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhT
eW1ib2woTlVMTCkge30KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgVFN1YnRyZWVQbGFj
ZWhvbGRlciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVy
IGtSaWdodFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1YnRyZWVQbGFjZWhvbGRlciYgc3VidHJl
ZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJv
bHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0
bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7
CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAg
ICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2sm
IGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOwor
ICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBn
cmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAg
ICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJp
bmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBURGVwZW5k
ZW5jeUdyYXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5
bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZmYzQ4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dElu
ZGVudGF0aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERlcHRoKCk7ICsraSkK
KyAgICAgICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgb3V0cHV0
SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdl
dEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKKyAgICAgICAgICA8PCBwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0
U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAgICAgICAgPDwgc3ltYm9sLT5nZXRJbnRl
cm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJzZWxlY3Rpb25cbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9vcCBjb25kaXRp
b25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsK
KyAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAi
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbVNpbmsgPDwgIlxuIjsKKwor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFw
aE5vZGUqIHN5bWJvbCA9ICppdGVyOworICAgICAgICBtU2luayA8PCAiLS0tIERlcGVuZGVuY3kg
Z3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAg
ICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtU2luayA8PCAiXG4iOworICAg
IH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKyNkZWZpbmUgQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZv
U2lua0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lk
IG91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0
ZToKKyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBt
U2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ODU3NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8g
VGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHRocm91Z2ggdGhlIGdy
YXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3ZvaWQgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhU
cmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQorCit2b2lkIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKworICAgIGdyYXBoVHJh
dmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOworCisgICAgLy8gVmlzaXQgdGhlIHBhcmVudCBub2Rl
J3MgY2hpbGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1EZXBlbmRlbnRO
b2Rlcy5lbmQoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUq
IG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNlci0+aXNWaXNpdGVkKG5v
ZGUpKQorICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0K
KworICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOworfQorCit2b2lkIFRHcmFw
aEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVudCh0aGlzKTsKKyAgICBU
R3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdy
YXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRGdW5jdGlvbkNhbGwodGhp
cyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQor
Cit2b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFNlbGVjdGlvbih0
aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9vcCh0aGlzKTsKKyAgICBU
R3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKaW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBA
IC04LDkgKzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19p
bml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2Zp
bmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3Nj
YW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVy
biBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmlu
ZGV4IDlhMDM5NGIuLjg4ZTdjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRI
RSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogCiAldG9wewogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBAQCBPICAgICAgICAgICBbMC03XQogImV4
dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJu
YWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2Ui
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY3LDcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAidW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAi
aW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRw
dXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEy
ICsxNzUsMjEgQEAgTyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
ZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNCw3IEBAIE8gICAgICAg
ICAgIFswLTddCiAKIDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7
IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQotMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFs
aWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Ciswe0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1
cm4gMDt9CiB7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0
LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQpAQCAtMjU2LDcgKzI2Nyw3IEBAIE8gICAgICAgICAgIFswLTdd
CiAKIFsgXHRcdlxuXGZccl0gICB7ICB9CiA8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRl
ckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KLTwqPi4gICAgICAgICAgICB7IGNvbnRleHQt
Pndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7
IH0KKzwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3du
IGNoYXIiLCB5eXRleHQpOyByZXR1cm4gMDsgfQogCiAlJQogCkBAIC0yNzgsMjAgKzI4OSwyMCBA
QCB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHZvaWQgQ1BQV2FybmluZ1Rv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIp
OwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtNDI3LDcgKzQzOCw3IEBAIHZvaWQg
SGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQog
fQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hh
ciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNy
YzsKQEAgLTUzNSw3ICs1NDYsNyBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIp
IHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5
eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0
cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4
dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVz
ZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVy
biAwOwogfQpAQCAtNTQ0LDkgKzU1NSw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQt
PkFmdGVyRU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1
bmV4cGVjdGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJl
YXNvbiwgInVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIH0KQEAgLTU2OCwxOSArNTc5LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsK
IH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5l
cik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nh
bm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKICAgICAKICAgICAvLyBJbml0
IHByZXByb2Nlc3Nvci4KICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hT
dHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAg
ICAgPSBjb3VudDsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAg
cmV0dXJuIEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQppbmRl
eCBkNmM4ODY5Li5mYTRhZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKQEAgLTg0LDIxICs4NCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZS
QUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAogICAgIH0gIFwKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAg
ICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2YXJpYWJs
ZV9pZGVudGlmaWVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYg
KCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0
ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcmltYXJ5X2V4
cHJlc3Npb24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAg
ICAgICAgLy8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwpAQCAtMjM1LDkgKzIzNSw5IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4
KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9s
Tm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJy
YXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAg
LTMxMCw3ICszMTAsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5
IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXki
LCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAg
LTM1NSw3ICszNTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5v
dCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MDUsMTMgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5
cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJl
IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9y
LCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJl
cXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAk
My5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIGZ1bmN0aW9u
X2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBl
ZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5n
ZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAn
aW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVy
cm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAi
Iik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9
CkBAIC02NDcsNyArNjQ3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVm
YXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVs
bCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29u
c3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0
eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMDcsMTIgQEAg
ZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhh
dmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3Ry
aW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3Zl
cmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmll
clN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dp
dGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1l
dGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICco
dm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
JDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIGZ1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVs
bHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQx
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxs
b3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
ciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZp
ZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5x
dWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4u
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUg
KyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQx
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAn
dm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
JDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBpbml0X2RlY2xhcmF0
b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAg
ICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMjk4
LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQi
LCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIu
c3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0MzgsNyBAQCBzaW5nbGVfZGVjbGFy
YXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhh
dmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2Yg
aXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDUwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90
eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAo
JDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3Vw
cG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZh
bHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY2
Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVD
VCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xNzE5LDcgKzE3MTks
NyBAQCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCok
JClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0u
dHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1
cmU6IiwgInN0cnVjdCIsICIlcyIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk2NiwxNCArMTk2NiwxNCBAQCBmb3JfcmVzdF9z
dGF0ZW1lbnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAg
ICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBp
biBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IEJSRUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBz
dGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEu
bGluZSk7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJO
IFNFTUlDT0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsx
OTg5LDEwIEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5
cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3
ICsyMDM3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAt
MjA0Nyw3ICsyMDQ3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA3
OSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2
YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAg
ICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJu
IHR5cGUgIT0gdm9pZCA/CiAgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHBy
b2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKICAgICAgICAgaWYgKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0
LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAiJXMiLCAkMS5mdW5j
dGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5OS4uZGMxZGYxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCkBAIC0xLDYgKzEsNiBAQAogI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE5MSw2ICsxOTEsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNj
YW5fdDsKIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwog
I2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5l
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQog
I2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjA0LDcgKzIwOSw3IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogICAgICAqLwogICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAg
ICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAg
ICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAtLXl5bGluZW5vO1wKQEAgLTIyNiwxMSArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAKICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJl
ciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJ
ICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9j
aGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQg
c2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXlj
b25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAog
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5
cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMs
OCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2db
XSAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNf
aW5mbwpAQCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2lu
dDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAg
MTM2LCAgMTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAg
ICAgMTM1LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAg
IDkwLAotICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5
LCAgMTIxLCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAg
MTE2LCAgMTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5
LCAgIDk5LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAg
ICAwLCAgICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0
LAotICAgICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMs
Ci0gICAgICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAx
MDQsICAgNTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAg
MCwgICA5NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4Nywg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1
MywgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAg
OSwgICAzMywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICAzNiwKLSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0
MiwgICA0MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA4MywgICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAg
IDgxLCAgIDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1
LCAgIDkwLCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAg
IDkwLAotICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYx
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAg
IDY0LCAgIDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAg
IDkwLCAgIDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDU0LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0
LAotCi0gICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAg
OTAsICAgNDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAK
KyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1
MywgIDE1MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwg
IDEzMCwgIDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0
NSwgIDEzMiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAg
ICAgIDE1MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwg
IDExNiwKKyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEw
NCwgIDEwMCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwg
IDEyNSwgIDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgMTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAw
LCAgICAwLCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAg
IDAsICAxMDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAg
MzQsICAgMzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgNTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgMzYsICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAg
NDIsICAgNDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA4MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwK
KyAgICAgICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5
OCwgICA5OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5Nywg
ICA5OCwgICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2
NiwgICA2MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1Nywg
ICA5OCwgICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwg
ICAzMSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwg
ICA2NywgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2
LCAgIDk2LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDQ2LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAg
IDk4LAorICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4
LCAgIDkxLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAg
IDkzLCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KQEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwg
ICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwg
ICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAy
NCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywK
LSAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MiwgICAzMSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzNSwgICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAg
MSwgICAzOSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAg
IDMxLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYx
LCAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIz
LCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4
LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQs
ICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisg
ICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAs
ICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0
NzgsMjE0IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X21ldGFbNjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAg
NCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
NDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAg
IDAsICA2MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2Mjgs
ICA2MjgsICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAx
NjMsICA1OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2Mjgs
ICA2MjgsICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0g
ICAgICAxMzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQs
ICAxODEsCi0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2
MjgsICA2MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2
MjgsICAgIDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAs
ICA2MjgsICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAg
IDAsICA2MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAg
ICAgIDU2OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwg
IDU1MCwKLSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0
OCwgICAgMCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwg
IDUyOSwgIDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5
MiwgIDUzMCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywg
IDUyOSwgIDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAg
MCwgIDMyMiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAg
IDUxNCwgIDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUy
MCwKLSAgICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwg
IDUxMSwgIDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUw
MSwgIDUwNCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4Niwg
IDQ4MywgIDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAg
NDcyLCAgNDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0
LCAgNDY5LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAg
MzcyLCAgMzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0
LAotICAgICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAg
NDYzLCAgNDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1
LCAgNDQ0LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2
LCAgNDQwLCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAg
ICAwLCAgNDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAw
LCAgNDE4LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAg
IDAsICAgIDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUs
ICA0MTgsICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0
MTMsICA0MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAs
ICAzODksICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0g
ICAgICAzODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAz
ODUsICAzODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAs
ICAgIDAsICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAz
NjQsICAgIDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgs
ICAgIDAsICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAg
ICAgIDIzOCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4Niwg
IDE3MywKLSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQx
OSwgIDQyMywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAg
NjgwLCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgx
LCAgNjUzLCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAg
NjUxLCAgNjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgx
LCAgMTI4LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAg
MTczLCAgMTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0
LAorICAgICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjgxLCAgNjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAg
ICAwLCAgNjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAg
NjgxLCAgNjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2
MjEsICA2MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIs
CisgICAgICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAg
IDAsICAyMTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIs
ICA1OTYsICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1
NzcsICA1ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1Njks
ICA1ODEsICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAg
IDAsICAzNDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAs
ICA1NjYsICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisg
ICAgICA1NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUs
ICAgIDAsCisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1
MzksICA1NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYs
ICA1MzcsICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywg
IDUzNywgIDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUy
OSwgIDI4MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywg
IDM4MSwgIDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAg
ICAgIDUwOCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwg
IDUwMywKKyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUw
MCwgIDM2NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUw
MCwgIDQ5NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwg
IDQ4MCwgIDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4
MywgIDQ4MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAg
IDQ4MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2
NiwKKworICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAg
ICAwLCAgICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYw
LCAgNDY1LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAg
NDYxLCAgNDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAw
LCAgNDQ2LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAg
NDQ5LCAgICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAw
LAorICAgICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIw
LCAgNDMyLCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAg
NDI3LCAgNDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIz
LCAgNDIyLCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAs
ICA0MzEsICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQs
CisgICAgICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAz
OTEsICAzODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcs
ICAzMDQsICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAy
NjIsICAgIDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTks
ICAxMTMsICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAx
NjEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0g
ICAgICA0MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAg
NDU4LCAgICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NTgsICA0NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAg
IDAsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAs
ICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAg
MTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAg
ICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAg
MzAsCi0gICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAg
NDIsICAgMzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAg
NTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEs
ICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAg
MjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAs
CisgICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAg
MzMsICAgMzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEs
ICAgNDIsICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAg
NDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQs
ICAgNTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAg
OTEsICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAg
ICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
ICAgIDgsCiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAg
ICAgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA5MywKLSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEy
MCwgICA2OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwg
ICA3NywgICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4Mywg
ICA4NSwgICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQy
NCwgICA4MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAg
ICAgMTAzLCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAg
MTA1LAotICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5
LCAgNDIyLCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAg
MTM4LCAgMTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5
LCAgMTg0LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAg
NDE4LCAgMTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0
LCAgIDc0LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAg
MjMwLCAgNDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAg
MjgyLCAgNDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAg
NDEyLCAgMTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAs
ICAgNzgsICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAy
MTEsICAzMDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEs
Ci0gICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcs
ICAyMjEsICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTQsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0g
ICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYs
ICAzMTcsCi0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwg
IDM5NSwgIDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1
OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1Miwg
IDM4OSwgIDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4
MywgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwg
IDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAg
ICAgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1Nywg
IDM1NiwKLSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwg
IDMzOSwgIDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywg
IDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAg
MzExLCAgMzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAg
ICAgMjkzLCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAg
Mjc4LAotICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4
LCAgMjY3LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAg
MjU5LCAgMjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAg
MjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMx
LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAg
MjE0LCAgMjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAx
LAotICAgICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAg
MTkyLCAgMTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3
LCAgMTc2LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAx
NjAsICAxNTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUs
ICAgODksICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAg
IDkzLCAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIw
LCAgIDY4LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAor
ICAgICAgIDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5
LCAgIDgwLAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3
LCAgMTQzLCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQs
ICAxMDIsICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAx
MTYsICAxMTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcs
ICAxNDksICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisg
ICAgICAxMzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAs
ICAxOTIsCisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAx
OTMsICA0NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0
NTIsICAxODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODks
ICAxNTUsICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAy
ODYsICAyODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1Niwg
ICA4MSwgIDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgICA4MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0
NiwgIDIyMiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAg
IDIyMywgIDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwg
IDQ0MiwgIDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwg
IDQzOCwgIDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAg
NDA1LCAgNDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5
LCAgNDI4LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDU4LCAgIDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUz
LCAgNDI0LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAg
NDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAx
LCAgNDAwLCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAor
ICAgICAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzgyLAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAz
NjYsICAzNjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgs
ICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAz
NDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEs
ICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisg
ICAgICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksCisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAz
MDUsICAzMDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEs
ICAyOTAsICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAy
NzcsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjks
ICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAy
NTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAg
ICAgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwg
IDIzOSwKKyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIy
OSwgIDIyOCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywg
IDIxMiwgIDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIw
MiwgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwg
IDE5MSwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3
NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAg
IDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
MCwKKyAgICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwg
ICA2NCwgIDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAg
MTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4
Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9
CiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAg
MzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUs
ICAgMzUsICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0g
ICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMs
ICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAg
NDEsICA0MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYs
ICAgNTUsICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwg
ICAzNywgICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0
OSwgICAzOSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwg
IDQyMCwgICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAg
ICAgIDEzNSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwg
IDEyMCwKLSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3
NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5
MiwgIDE5MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3
OCwgIDQxMCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAg
ICA4MCwgIDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEy
MiwKLQotICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0
LCAgMjM0LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4
LCAgMTUxLCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUz
LCAgIDgzLCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAg
MzkzLCAgMTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1
LAotICAgICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMjE5LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEs
ICAzOTEsICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAz
NzYsICAzNzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAz
NjksICAzNjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAz
NDIsICAzNDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAz
MjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUs
ICAyOTQsICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0g
ICAgICAyNzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUs
ICAyNjQsCi0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTAsICAyNDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIz
OCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwg
IDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIw
OSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwg
IDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAg
ICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4Miwg
IDE4MSwKLSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3
MiwgIDE3MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2Mywg
IDE2MiwgIDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEz
OCwgIDEzNywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDEx
NywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAg
ICAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAg
IDk5LAotICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUz
LCAgIDQ4LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAg
ICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwKKyAgICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwg
ICAxNywgICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAz
MywgICA0MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwg
ICA1MSwgIDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAg
NDUzLCAgIDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2
LAorICAgICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAg
IDM5LCAgIDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5
LCAgIDUwLCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAg
IDQ3LCAgIDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5
LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4
LCAgIDc4LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAor
ICAgICAgMTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0
LCAgIDc0LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAg
IDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4
LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzks
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAg
ODAsICAgODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjks
ICA0NDMsCisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0Mzks
ICA0MzgsICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAyNDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUs
ICA0MzQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAx
NTUsICAyNDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsCisKKyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1
NSwgIDI1NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywg
IDQyNiwgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4
OCwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAg
IDQ2MiwgIDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQw
NCwKKyAgICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5Miwg
IDM4OSwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3
NywgIDM3NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2Miwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0
OSwgIDM0OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAg
MzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAx
LAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAg
MjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcy
LCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAg
MjYzLCAgMjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4
LCAgMjQ0LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAg
MjMyLCAgMjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2
LCAgMjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAor
ICAgICAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAx
NzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAs
ICAxNjksICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAx
NDUsICAxNDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYs
ICAxMzQsICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisg
ICAgICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsCisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAx
MDQsICAxMDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAg
NDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29s
ZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwg
MCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAg
ICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhp
bmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJF
SkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC04MjEsOCArODQyLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVG
RkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwog
ICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxl
bmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7
CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3Rh
cnQ7CkBAIC04NzUsNyArODk2LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVf
dCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDcsMTMgQEAgeXlfbWF0Y2g6
CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQy
NiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOwor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDIsMjUyIEBAIFlZX1JVTEVfU0VUVVAK
IAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQ
CiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6Citj
YXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2Ug
MTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAx
OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0
YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwg
eXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2Ug
OTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6
CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0
PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgor
Y2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2Fz
ZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5
OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2Fz
ZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
RVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6
CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNl
IDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5U
eXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJu
KExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxF
X1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJF
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1
cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2Fz
ZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFS
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2Ug
MTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xF
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgor
Y2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsg
CiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU1LDEyIEBAIFlZX1JVTEVfU0VU
VVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoK
K2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBy
dWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRj
aCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc2
OSwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJ
RUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9
Cit7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQpOyBy
ZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRV
UAogRUNITzsKIAlZWV9CUkVBSwpAQCAtMTkwOSw3ICsxOTYyLDcgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCWVsc2UKIAkJewotCQkJaW50
IG51bV90b19yZWFkID0KKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CiAJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCiAJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCkBAIC0xOTIzLDcgKzE5NzYsNyBAQCBzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJ
CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OwpAQCAtMTk1NCw3ICsyMDA3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8K
IAkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVy
X3RvX21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsK
KwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAogCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CiAJCX0KQEAgLTIwMTYsNyAr
MjA2OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2
ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIw
NDUsMTEgKzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChp
bnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJy
ZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRf
c3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cjsKIAkJCSsreXlnLT55eV9jX2J1Zl9wOwogCiAJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKQEAgLTIxMDMsNyArMjE1Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgogCQkJCQl7CiAJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJl
dHVybiBFT0Y7CisJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQogCQkJCQkJWVlfTkVXX0ZJTEU7CkBAIC0yMzY2LDcgKzI0MTks
NyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogICovCiBz
dGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxNywxMSBAQCBZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVm
OwotCXl5X3NpemVfdCBuOwotCWludCBpOworCXl5X3NpemVfdCBuLCBpOwogICAgIAogCS8qIEdl
dCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVP
QidzLiAqLwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjYxOSw3ICsyNjcxLDcgQEAgRklM
RSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCiAgKi8KLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreXlfc2l6ZV90
IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7
CkBAIC0yOTEyLDIwICsyOTY0LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC0zMDYxLDcgKzMxMTMsNyBAQCB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5z
LCBpbnQgbnVtVG9rZW5zKQogICAgIH0KIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcp
Cit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMTY5LDcgKzMyMjEsNyBAQCBpbnQgY2hl
Y2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5
bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXll
eHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzE3OCw5ICszMjMwLDkgQEAg
dm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikg
ewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRl
eHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0
KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzIwMiwxOSArMzI1NCwx
NSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
eXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVP
RiA9IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMg
PSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAg
ID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJM
ZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2Nh
bkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAs
IGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLjA5MmEz
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmNwcApAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwyMSBAQCBleHRlcm4gdm9pZCB5eWVy
cm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5l
IEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAog
ICAgIH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
ICAgICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZy
YWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OyAgXAogICAgIH0gIFwKIH0KQEAgLTIxNTcsNyArMjE1Nyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CkBAIC0yMTY2LDcgKzIxNjYsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBj
YW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMjAxLDcgKzIy
MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25z
dGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwpAQCAtMjI0Nyw5ICsyMjQ3LDkgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTIzMzAsNyArMjMz
MCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAi
Iik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQyNSwxMyArMjQyNSwxMyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQg
aW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQg
c2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmll
bGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVm
dCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUg
Y2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJv
ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjU4Niw3ICsyNTg2LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTc6CiAKICAgICB7Ci0g
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1l
dGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9y
dGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICA7fQpAQCAtMjY5Nyw3ICsy
Njk3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0zMTkxLDEyICszMTkxLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjUzLDcgKzMyNTMsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZp
cnN0IGlzIHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBl
eGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQg
dHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
LnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCB5eXJl
ZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBm
dW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVk
IGFzIHdlbGwuLi4KQEAgLTMyODksNyArMzI4OSw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZykpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQg
JiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBh
cyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzUzOCw3ICsz
NTM4LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgOTg6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBl
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSk7CkBAIC0zNjE2LDcgKzM2MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MzUsNyArMzYzNSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtMzY0NiwxOSArMzY0NiwxOSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAgKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
OwpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0
ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtMzk2MCw3ICszOTYw
LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNF
eHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJl
Y3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpLT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0g
KCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5h
bWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBp
biBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVM
aXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0Iiwg
IiVzIiwgKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRG
aWVsZE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjEsNyArNDQyMSw3
IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wQ29udGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDMyLDcgKzQ0
MzIsNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwpAQCAtNDQ0NCw3ICs0NDQ0LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDQ1NiwxMCArNDQ1NiwxMCBAQCB5eXJlZHVjZToKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVu
Y3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5u
b3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
KSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxp
bmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDUx
Nyw3ICs0NTE3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDU1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTg5LDcgKzQ1ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8/PyBD
aGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lk
ID8KICAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBv
biBpbnRlcm1lZGlhdGUgY29kZQogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICIlcyIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCA1
NDQxNTU3Li40MDQxYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2
b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
VXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGlt
aXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyBy
ZXR1cm4gb3B0aW1pemU7IH0KQEAgLTUzMyw2ICs1MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9M
ZWZ0KSwKICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZl
cnNlcigpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KSB7fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4zOTE1OGQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAg
ICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07
CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAs
IDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRh
YmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5k
SGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAgIGlm
IChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsK
ICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRm
KHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29s
bGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBj
b2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFY
X0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisg
ICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlk
ZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRh
YmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBA
IC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
KQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5l
eHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAm
YXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVk
LCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFi
bGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dN
c2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05T
OyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291
bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFi
bGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAg
LTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQot
CQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJCWRl
ZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICog
eXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNo
YXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1
cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUgKGFs
bFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1lc3Nh
Z2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7
CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9IGVs
c2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAgICAg
dG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7
CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20p
IHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxvYyBs
b2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9T
eW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNyb1N5
bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFsID0g
ezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAgICBtYWNyby5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2YWwuc2NfaW50ID0gdmFs
dWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBzbnBy
aW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUp
OwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7CiAg
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwogICAgIHN5bWJvbCA9IEFk
ZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4
OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQog
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7CiAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNwcmlu
dGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
IHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAi
JWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RB
TlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChhdG9tID09
IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVt
YmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFs
cHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAg
ICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvCiB2b2lkICBDUFBXYXJu
aW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2Vz
IGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1U
b2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3Ry
aW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5n
Lgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBh
bGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciop
OyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGlj
ayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3Qg
Y2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQg
bGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2OSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBwOjpE
aWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0aWNz
KiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJvb2wg
Q29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXlsdmFs
cHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
IHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4KElu
cHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVyKiBz
cmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6
VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNoICh0
b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRlIHNy
Yy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBmcmVl
KHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0gRU9G
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAgICAg
ICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9JREVO
VElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgor
ICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUuY19z
dHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENvcHlT
eW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9GTE9B
VENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5DOgor
ICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9P
UDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAgICBy
ZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJldCA9
IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6
CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0FE
RF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJfQVNT
SUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxfQVNT
SUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjoK
KyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lHTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJR047
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5lKTsK
KyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhlciA9
IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7CisgICAg
ICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
SW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0
U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7Cisg
ICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+
ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKworICAg
IHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklucHV0
U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2RlZmlu
ZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVt
b3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQ
b29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTljYzQz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGlj
IGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAg
ICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSBy
ZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVu
ZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1MZXhl
cihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0K
LQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1ib29s
IENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8vIFRP
RE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBub3Qg
bmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0K
LWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQp
Ci17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1
dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1
aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3VjY2Vz
cyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJu
IHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2Nh
dGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotewot
ICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBwYXJh
bWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChuYW1l
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQotICAg
IHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qg
c3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAgewot
ICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0K
LQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0KCkK
LXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVs
ZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7
Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lkIENv
bnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZh
bHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZh
bHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5ldyBz
dGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
ID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVdID0g
bmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRl
ICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJs
aWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQoKTsK
LSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0
KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJlYWRJ
bnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0KCkg
eyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46Okxv
Y2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAg
ICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5lTWFj
cm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQoY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1h
Y3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIo
KTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1hY3Jv
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2UoKTsK
LQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlucHV0
OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBE
ZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0
PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9
CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEg
Y291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsK
K30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkK
K3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAg
ICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQg
PCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAsMCAr
MSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19I
XworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJj
ZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNz
YWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcg
YW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1Ymxp
YzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5U
RVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURfQ0hB
UkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwK
KyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9C
RUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZF
LAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAg
VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisgICAg
dmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAgICBX
QVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVy
KCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNU
SVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2
ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50
cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFz
c2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlh
dGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAgdmly
dHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9y
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2Yg
Zm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdt
YShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVD
VElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRl
ICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlm
Iik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5h
bWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2Vy
dmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4
ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tl
bikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgICAg
IG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxl
eGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0
b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAg
IG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAg
ICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcjJykg
cGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdcbicp
OworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAg
ICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgICAg
IHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFyc2VJ
Zm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQor
ICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAg
ICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24odG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24p
CisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9rZW4p
OworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAgd2hp
bGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
PT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVP
Rl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVm
aW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVS
ZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3Jv
OworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRv
a2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAg
ICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFj
cm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAodG9r
ZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
eworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5l
Y2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxz
byBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBh
cmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwor
ICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJl
ZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYm
ICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5p
bnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2Vu
LT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgbU1h
Y3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBU
T0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVy
KTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNy
b1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25QYXJz
ZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgo
dG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lvblBh
cnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBUT0RP
KGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBs
ZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVu
dCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUu
CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihU
b2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBh
c3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKworICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVF
cnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFn
bWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJB
R01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAg
ICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAg
ICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFH
TUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUu
CisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+
IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24s
IG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9O
QU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAg
IGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAg
IGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlk
ICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
aWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JF
SEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lP
Tl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVS
U0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYg
KHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRp
b24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2Vu
KiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2Vy
dCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIgbWFj
cm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1h
Y3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNz
IERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsK
KworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJl
Y3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKwor
ICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJz
ZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZk
ZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Cisg
ICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9r
ZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9T
ZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVy
KiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmY4Mzk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApAQCAtMCwwICsxLDE5MTUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdO
VSBCaXNvbiAyLjQuMi4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNv
bidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k
YXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl
LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor
LyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0
aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9u
IGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2Us
IHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9y
IHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMg
YSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIg
b3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1
c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMg
dG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3
aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNl
cHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZl
cnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3
cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2lu
YWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVm
aW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJp
bmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBs
b2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBi
eSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMg
d2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1i
b2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJl
bG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNP
TiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
NC4yIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5
YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1
c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICov
CisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZ
TFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBu
YW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4
ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2RlZmlu
ZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIK
KyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAg
IHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2lu
Y2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3Bh
Y2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
OworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQq
IHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KGludCog
bHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAg
Ki8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5h
YmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NF
CisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNl
bHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRo
ZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9L
RU5fVEFCTEUgMAorI2VuZGlmCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZ
UEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBz
eW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cg
YWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQ09OU1RfSU5UID0g
MjU4LAorICAgICBPUF9PUiA9IDI1OSwKKyAgICAgT1BfQU5EID0gMjYwLAorICAgICBPUF9ORSA9
IDI2MSwKKyAgICAgT1BfRVEgPSAyNjIsCisgICAgIE9QX0dFID0gMjYzLAorICAgICBPUF9MRSA9
IDI2NCwKKyAgICAgT1BfUklHSFQgPSAyNjUsCisgICAgIE9QX0xFRlQgPSAyNjYsCisgICAgIFVO
QVJZID0gMjY3CisgICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYg
ISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRl
ZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNM
QVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7
CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisj
aWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBj
aGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0
eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWlu
dDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2
IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZp
bmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90
CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRp
ZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZ
XworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJM
RV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUi
LCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8o
bXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlh
YmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVm
aW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBk
ZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlv
biwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAg
Ki8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IHl5
aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKKyNlbmRpZgor
eworICByZXR1cm4geXlpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8
fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxs
b2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tf
VVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18K
KyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVm
aW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZF
UgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
IyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMg
ICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMg
aWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3
YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICov
OyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAg
ICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJv
dHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFs
bCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxv
Y2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIK
KyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBz
dGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8q
IHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZ
U1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBp
Zm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9D
IHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5l
ZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0gg
MQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZ
TUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxs
b2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVu
ZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQor
IyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlm
CisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisK
KworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1
c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19U
UklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBz
dGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19h
bGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQor
CisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9i
amVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAg
IG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAor
ICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJv
bSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAg
ICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlp
ID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5
aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5k
aWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcg
b25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZl
IHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5k
IFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2Ug
WVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3Rh
Y2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJ
CVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdi
eXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXpl
KTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMg
PSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwK
Kwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJ
CQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0g
U3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklO
QUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUg
WVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
KyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxl
cy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0
YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgp
IC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVm
aW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlU
UkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRP
SyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxF
WF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYs
ICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQ
UkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIg
WVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1td
ID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1
LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAg
IDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUs
ICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBg
LTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAg
ICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5
LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjks
CisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAg
MjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwg
ICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlS
TElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5l
ZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAg
MCwgICAgNzQsICAgIDc0LCAgICA4MSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEsICAgIDk0
LCAgICA5NywKKyAgICAgMTAwLCAgIDEwMywgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTUsICAg
MTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LAorICAgICAxNDAsICAgMTUzLCAgIDE1NiwgICAxNTks
ICAgMTYyLCAgIDE2NSwgICAxNjgKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJP
Ul9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3Ry
aW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5h
bHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRp
YyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIk
dW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAgIide
JyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwgIic+JyIsICJPUF9HRSIsICJPUF9M
RSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicrJyIsICInLSciLCAiJyonIiwgIicvJyIs
ICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIsICInKCciLCAiJyknIiwgIiRhY2NlcHQi
LCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5U
CisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAy
NTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwg
ICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAor
ICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307Cisj
IGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1
bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQor
eworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywK
KyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVs
ZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vz
bid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVm
YXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0
W10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwg
ICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIs
ICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsK
KworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFD
VFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmlu
ZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEs
ICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAg
ICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEw
LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEs
CisgICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAg
LTIKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBz
dGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBu
ZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRl
LiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBz
eW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAg
IDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAg
ICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVj
a1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
Cit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0
aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcs
ICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVz
ID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVN
UFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFj
Y2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJP
UgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5
ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJh
bnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2Ug
R0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93
ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQg
aXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3
aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVm
aW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMg
aXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1
bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5n
LCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZv
ciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3
YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09WRVJJ
TkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJ
CQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEp
CQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAg
ICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRF
ICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3Rv
IHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fu
bm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlc
Cit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJS
Q09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZy
b20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0
aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhT
WzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChS
aHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAo
TikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
Kwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywg
MSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChS
aHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhT
TE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZ
WVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJ
CQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJl
bnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJ
CQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0J
CVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlc
CisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQg
LS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBu
b3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29u
J3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cu
ICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJ
XAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAg
IChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYK
KworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRz
LiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNv
bnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwor
I2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZw
cmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJ
CQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJ
ICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkp
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGlu
dCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRl
eHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47Cisg
IFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXAp
OworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0eXBl
KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAq
eXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFt
ZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAo
IiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiki
KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0
ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9p
bnQxNiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRv
bSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYg
Knl5dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Cisg
IGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQg
eXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90
KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlf
U1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVi
dWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8g
YmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUs
IENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAo
eXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXly
dWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5
cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJs
aW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVs
ZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4i
KTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJ
CQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1
bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBw
cmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBt
dWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyog
IVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19Q
UklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlm
IC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRo
ZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJ
TklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhl
IHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBz
dGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZh
bHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19B
TExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3
aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVm
IFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNp
ZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19H
TElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgor
IyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4g
KGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5
c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVu
OworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVl
OworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0
cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVm
aW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8q
IENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1p
bmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwg
Y29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVz
dCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2Vu
ZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7
CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisK
KyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRu
YW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlw
cGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0
IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRv
dWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlu
cyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJh
Y2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlS
RVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBv
ZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpF
X1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAo
Knl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hh
ciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXAp
CisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3Ry
aXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkg
ICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICov
CisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7
CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJl
cykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAg
ICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJl
dHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3Ry
KSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3Ig
bWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0
YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNs
dWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRv
IG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0
aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYg
YW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZ
WVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0
aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0
LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAg
cmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUg
KHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1l
W3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0g
eyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAq
eXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisj
IGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxl
IGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNv
bnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBl
Y3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9y
W10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAor
CQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NF
X0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAg
ICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZ
WVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZ
Q0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisg
ICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAg
Ki8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5
eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsK
KyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlw
ZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKwor
ICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXlj
aGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlm
ICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5
eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5l
eHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNv
dW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5
eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5
eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5
ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5
Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAg
eXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4g
WVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBz
cHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAg
ICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgor
CSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAg
Ki8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAo
KCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYm
IHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1l
cnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UK
KwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1
cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVs
ZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAor
eXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFs
dWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRleHQp
OworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xf
UFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNo
ICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKwor
LyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKyNpZmRl
ZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFy
c2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNv
bnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBB
UlNFX1BBUkFNICovCisKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50
Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5k
aWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgor
I2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisv
KiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQ
RSB5eWx2YWw7CisKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwor
ICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAg
ICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8g
c2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFy
YXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0
aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5
dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOwor
ICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3Rh
Y2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5
dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwor
ICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47Cisg
IC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0
aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7
CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9m
IHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91
bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXRva2VuID0gMDsKKyAg
eXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5
eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFy
ID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0
aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2
ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZl
ciBpbml0aWFsaXplZC4gICovCisgIHl5c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisg
IGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBz
dGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6
CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9j
YXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBz
dGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0
ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8
PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRo
ZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9
IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2
ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgor
CSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8K
KwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYg
Knl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0
aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5
b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKwor
CXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92
ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVz
dGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0
ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5
eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5
cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5p
b24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkp
OworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9D
QVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5
eXZzKTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJ
ICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5
eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5
eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJT
dGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBz
dGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNr
dXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUg
cHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
CisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0
byBsb29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5
eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3du
ID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8K
KworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFy
ID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAg
eXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93
IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRv
a2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0
IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElm
IHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBv
ciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4g
Kz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXlu
XSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07
CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZ
VEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdv
dG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVy
cm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYg
KHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2th
aGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICov
CisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5
eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBk
byB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAg
ICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51
bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsK
KworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZv
bGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBp
cyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9u
IGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUg
cGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0
aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNw
WzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikK
KyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1
bHQpID0gKHl5dnNwWygxKSAtICgxKV0pOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYm
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09
IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZz
cFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIw
OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAo
eXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMildKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisKKworICAgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAm
eXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKwor
ICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUg
d2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3Bw
ZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisg
IHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNd
ICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5
Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVd
OworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisg
IGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFs
cmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisg
IGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJP
Ul9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsK
KyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5
c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9j
IDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0g
MiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19N
QVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7
CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVs
c2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9m
IHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8
PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywg
eXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQor
CWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7
CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAg
fQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykK
KyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2Fo
ZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYg
KHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2Yg
aW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9Cisg
ICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAg
ICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0K
KyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0
ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxhYjE7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhl
IHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVy
cm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICovCisg
IGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
CisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4g
PSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0gKnl5c3Nw
OworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21tb24g
Y29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVy
cmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAgeXluICs9
IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAg
ICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9wIHRo
ZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4u
ICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAgICB5eWRl
c3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNv
bnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5c3NwOwor
ICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgKisreXl2c3Ag
PSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1C
T0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5
c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhl
cmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2Vw
dGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMg
aGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0
bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVmaW5lZCh5
eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4
aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0
LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZ
KQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkg
eXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JU
IG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5
eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVy
ZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2Vu
ZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2Vk
LiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXlsZXgo
aW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAg
ICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAq
bHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNU
X0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlw
ZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBP
UF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2Ug
J3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVh
azsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0
eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAg
ICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0g
JysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNh
c2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBi
cmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34n
OiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsK
KyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3Vy
cmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxl
eCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsK
KworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0
aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRv
a2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNv
bnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1M
ZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSBy
ZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0
KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmQwNTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFS
U0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERp
YWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Np
b25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVy
LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9r
ZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlh
Z25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yZTg0Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55CkBAIC0wLDAgKzEsMjYxIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250
YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9u
LgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4
cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUg
aXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKwor
I2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lv
blBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisj
aW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9rZW4q
IHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorJX0KKworJWRl
ZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29udGV4dCAq
Y29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0aWMgaW50
IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJv
cihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0KKworJXRva2VuIENP
TlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wnCislbGVmdCAnXicK
KyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicgT1BfTEUgT1BfR0UK
KyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUn
CislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAgICAg
ICAqKGNvbnRleHQtPnJlc3VsdCkgPSAkMTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOwor
CitleHByZXNzaW9uCisgICAgOiBDT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBe
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9Q
X0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAo
JDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7Cisg
ICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAk
MSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lv
biB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29u
dGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pF
Uk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNz
aW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8
ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0K
KyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOwor
ICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAt
ICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAg
JCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQk
ID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0g
Y29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBhdG9pKHRva2VuLT52
YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hU
OiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6
IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVh
azsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0
eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAg
ICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0g
Jy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNh
c2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBi
cmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEn
OiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsK
KyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBl
ID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8g
QWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisg
ICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1
cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6
RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykg
OgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorewor
fQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1
bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBt
RGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRv
a2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9
IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2Ug
MDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVk
ZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBt
Q291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5n
dGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtF
cnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6
IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAg
c3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1
dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsK
LSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291
bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAg
aW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hf
YmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWlu
dCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNo
YXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3Rh
cnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBp
cyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKCht
SW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFk
ID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8
IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYg
KGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJs
b2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9G
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0
ZSkKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExv
Yy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExv
Yy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExv
Yy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFj
aGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5k
ZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAn
LycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAg
ICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAg
ICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3Rh
dGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3Rh
dGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09
ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsr
XSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAg
ICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9
PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFy
ZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAr
K21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAg
ICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hh
cigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3Ry
ID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8g
U3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgot
ICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciBy
ZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYg
KCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVu
Z3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJp
bmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAg
ICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUlu
ZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAg
ICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNp
emUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRT
dHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAw
OwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkg
JiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0
eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0
IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVu
Z3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAm
JiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGgg
PyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAot
Ly8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8g
U3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNs
YXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAg
ICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JV
bmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1F
cnJvcjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRl
eDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBl
b2YoKSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAg
ICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2lu
ZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3Ro
W2luZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8g
YnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAg
Ly8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25s
eSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBv
cnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1
bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNp
emUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgot
ICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0
ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9j
a0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4Owor
ICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7
Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRo
ZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUg
Y3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmlu
ZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5Lgot
ICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVl
IGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBp
bmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAg
ICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRM
b2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAg
Y29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0g
ICAgLy8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXgg
b2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8g
U2l6ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxl
bmd0aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJv
cjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3Bw
CkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZp
cnR1YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAw
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5
Ni4uYjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwx
NyBAQAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2lu
Y2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAog
ewogCi1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAg
IFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1O
YW1lKG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFj
ZW1lbnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3Jv
OjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsK
LQotICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBh
cmFtZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAg
ICBkZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0g
ICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBs
YWNlbWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRz
OwotICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAg
KG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIu
cGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNl
bWVudHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5o
CmluZGV4IGUyNDMzMDYuLjYzYjMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDMyIEBA
CiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJp
bmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LSNpbmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0
cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUK
ICAgICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OwogCi0g
ICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhU
eXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5W
ZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7
Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsg
fQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5h
bWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJu
IG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3Ry
aW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0
b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBj
b25zdDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJhbWV0ZXJzOworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiBy
ZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1hY3Jv
PiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEzZjY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwyOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitN
YWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAor
ICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQor
eworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgLy8g
VE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBtTGV4ZXItPmxleCh0b2tlbik7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlOWVlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVy
IDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBs
ZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisg
ICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgTGV4ZXIqIG1M
ZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjEyY2ZhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwyOSBAQAogCiAjaW5jbHVk
ZSAiUHJlcHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRp
bHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotUHJlcHJvY2Vz
c29yOjpQcmVwcm9jZXNzb3IoKSA6IG1Db250ZXh0KE5VTEwpCitQcmVwcm9jZXNzb3I6OlByZXBy
b2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXpl
cihkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZVBhcnNlcigmbVRva2VuaXplciwgJm1NYWNy
b1NldCwgZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgIG1NYWNyb0V4cGFuZGVy
KCZtRGlyZWN0aXZlUGFyc2VyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcykKIHsKIH0KIAotUHJl
cHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0KGludCBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQogewotICAgIGRl
bGV0ZSBtQ29udGV4dDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1D
b250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Ci19Ci0K
LWJvb2wgUHJlcHJvY2Vzc29yOjpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAm
JiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBO
VUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzZXQoKTsKLQotICAgIHJldHVy
biBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAg
ICByZXR1cm4gbVRva2VuaXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKLXZv
aWQgUHJlcHJvY2Vzc29yOjpyZXNldCgpCit2b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0
b2tlbikKIHsKLSAgICBzdGQ6OmZvcl9lYWNoKG1Ub2tlbnMuYmVnaW4oKSwgbVRva2Vucy5lbmQo
KSwgRGVsZXRlKCkpOwotICAgIG1Ub2tlbnMuY2xlYXIoKTsKKyAgICBtTWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmgKaW5kZXggODg1YmI3MC4uZGRiZTEyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKQEAgLTcsMzQgKzcsNDIgQEAKICNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5j
bHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0OworY2xhc3MgRGlh
Z25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IK
IHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOwotICAgIH5QcmVwcm9jZXNzb3IoKTsK
KyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50
OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5n
dGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJz
IHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5n
IGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3Vt
ZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90
aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBh
IHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Yg
c3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250
YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2
YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBu
dWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBib29sIHByb2Nlc3MoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
LSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5iZWdpbigp
OyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmVuZCgp
OyB9CisgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOworICAgIFBQX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwogCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQg
c3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAg
VG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91dHB1dC4KKyAgICBNYWNyb1NldCBtTWFjcm9TZXQ7
CisgICAgVG9rZW5pemVyIG1Ub2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIG1EaXJlY3Rp
dmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtTWFjcm9FeHBhbmRlcjsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmls
ZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmls
ZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxl
KSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBp
bnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRp
b24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVx
dWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMu
ZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKaW5kZXggYTJlNzU5Yy4uODkzZDA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcApAQCAtNiw1MCArNiw0OCBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2
OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8
PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46Okxv
Y2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRv
a2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8
IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0g
MDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsK
IH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUs
IGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAg
IGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3Mp
ICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAg
ICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxv
Y2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxv
Y2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0
ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sK
KyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAg
IGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOwogfQogCiBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikK
IHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9DT05T
VEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJRVI6
Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBlKCkp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgp
KQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAgIHJl
dHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi4wMmZkMGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsODMgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9I
XwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVj
dG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3VyY2VM
b2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tl
bgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGljIExv
Y2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGljIHZv
aWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7Cisg
ICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAgIC8v
IFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24s
IGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAgICBJ
REVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9Cisg
ICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisgICAg
ICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAg
IE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAor
ICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAg
IE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9B
U1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisg
ICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAg
IE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FT
U0lHTgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0Zf
TElORSAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFID0gMSA8PCAxCisgICAg
fTsKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpz
dHJpbmcqIG1WYWx1ZTsKKyAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBs
aW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBi
b29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9M
SU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisg
ICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVB
RElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3Bh
Y2UpOworCisgICAgaW50IHR5cGU7CisgICAgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4m
IGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2Vu
JiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6
Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tl
bik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfVE9LRU5fSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYjQyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzM1IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIubCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXplci5j
cHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwg
c2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2Rl
ZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJ
T04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0
LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlz
c3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBp
bnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUg
RkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5
c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9f
KSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5l
IF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlv
dSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisj
aWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAx
CisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2lu
dDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxl
eF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQz
Ml90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNlbHNl
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxl
eF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQx
Nl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5
OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlO
CisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYg
SU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2Vu
ZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgt
MjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFY
ICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUg
SU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFY
CisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNp
Zm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisj
ZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFY
ICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xh
c3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkv
KiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZp
bmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NP
TlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3Bs
dXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAor
I2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9m
LWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5l
Z2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBm
b3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZl
LAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNo
YXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUko
YykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9p
bnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyog
Rm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxv
dykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5
eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4
dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5l
IHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlf
ZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyBy
ZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlz
Z3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5p
dGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIg
KgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRo
YXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0
ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8K
KyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNU
QVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4g
c3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHBy
b2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8q
IFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisj
ZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJ
WkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2Rl
ZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxF
IDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19M
SU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBj
aGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZ
WV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJ
d2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9w
dHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5l
IFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYK
KworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5w
dXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJ
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
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
aGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBhbGxv
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
Pnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAor
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAzNworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0
aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVj
dCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQz
Ml90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4
NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAgIDM2
LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAgIDMzLCAgIDMz
LCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAgICAgICA0LCAg
IDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAorICAg
ICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLCAg
IDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1
LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAg
IDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5
LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEwLCAgICAwCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNSwg
ICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAgICAgOSwgICAx
MCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAgICAg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwgICAx
OCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwgICAgOSwgICAy
NSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAgIDIx
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0
LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAgMCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQorICAgIHsg
ICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5
LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIxLCAg
IDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAw
LCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDczLCAgMTU5LCAg
MTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAgMTU5LCAgMTU5
LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAorICAgICAg
IDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5
LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAwLCAg
MTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5
LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAg
MTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICAyMCwgICA4
MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAyMCwg
ICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4Mywg
ICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwgICA4MywgICA1
MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4MywgICA4Mywg
ICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAorICAg
ICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMw
LCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAg
IDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQz
LCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAg
IDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAgIDUzLCAgIDUz
LCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAorICAgICAg
IDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUw
LAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAg
IDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAgNTAs
ICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNjcsICAg
NjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAgNzgsICAgNzgs
ICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCisgICAgICAg
MzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIs
CisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMsICAg
NjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAgNzUs
ICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKKyAgICAg
ICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwgICAx
NiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwgICAy
MCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwg
ICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwgICAyNywgICA0
MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1MiwgICA0Mywg
ICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKKyAgICAgICA1
MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1MCwK
KworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAg
IDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4
LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAg
IDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcy
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAorICAgICAgIDg3
LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAg
fSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xs
IGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNk
ZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3Jl
KCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisj
ZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHBy
ZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJv
Y2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
MnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYg
c3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7
CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0
cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VT
RVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRy
dWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24q
IHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUg
KChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2Mt
PnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAt
PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5
eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2Mt
PmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
CisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisjZGVm
aW5lIElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9UWVBF
IHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2Yg
dGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisgICAg
LyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZ
UEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9i
YWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklMRSAq
eXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBp
bmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7
IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVm
ZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9j
aGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFyICp5
eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQg
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7
CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7
CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5
eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5
X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2Zs
YWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisg
ICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAq
LworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
KyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJl
IGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAg
IyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5
eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2Fu
bmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgor
ICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBj
b252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJB
X1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2V4
dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9pbiAg
KEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9vdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50
IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbGluZW5v
IChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogcHBn
ZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQ
RSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBF
ICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCBw
cHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBi
eSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9T
S0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBwcHdyYXAgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGlj
IHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5f
dCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGlu
dCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRp
YyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3Vu
dCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVB
RF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBD
b3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0
LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNp
bmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRl
KCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCAp
CisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJl
c3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3Vs
dCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRl
cmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYg
KCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBF
T0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwK
KwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBt
YXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJy
bm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89
MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKwor
LyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUg
Inl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0
aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRv
IGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0
ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisK
Ky8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93
cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFD
S19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVm
IFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJy
b3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRp
b24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9u
IG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNp
bHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNM
X0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBF
ICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
cik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZ
UEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUg
YmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBy
dWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRp
ZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUg
bWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9E
RUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAv
KiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXln
LT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7Cisj
ZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJ
LyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3Rk
aW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisKKwkJcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQt
b2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisK
KwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2Nw
OworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRv
CisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlf
Y3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgzICk7
CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKworeXlfZmluZF9hY3Rpb246CisJ
CXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVf
QUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2Vz
cyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5n
IG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkv
KiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
KwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKKworCVlZ
X0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3Vu
dGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBz
aW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihDT01NRU5U
KTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2Fz
ZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4g
bWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsreXlsaW5lbm87IH0KKwlZWV9CUkVBSwor
Y2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgaWYgKHl5ZXh0cmEtPmxpbmVTdGFydCkgeworICAg
ICAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgICAgICByZXR1cm4geXl0ZXh0
WzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQs
IHl5bGVuZykpOworICAgIH0KK30KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdp
dGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCisvKiBSdWxlIHRv
IGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCitjYXNlIDExOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9C
UkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorCVlZX0JSRUFL
CitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZX0JSRUFLCitjYXNlIDE2
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVBSworY2FzZSAxNzoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09S
OworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNT
SUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJf
QVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9N
VUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMxOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMyOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzM6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAg
ICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9TRVRV
UAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6
CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICArK3l5
bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOwor
fQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVu
bywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5J
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
ID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZG
RVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJ
CQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICgg
bmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8g
ODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9i
dWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAq
LworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdl
IGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+
eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2Fu
bmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmIt
Pnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAt
IDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJ
CQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRh
dGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19y
ZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlp
ZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBF
T0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJ
fQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9D
T05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJ
CS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5l
ZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90
b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQor
CisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
ICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsK
K30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9y
ZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVy
IHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0g
eXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyAr
K3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNb
WVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0K
KwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJ
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlf
dHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJh
Y3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucygg
Y3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05V
TF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVu
dXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
cyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgz
KTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lm
bmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlu
cHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0
byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAq
YmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsg
aWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlp
ZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJ
CQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQg
d2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2Nl
ZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8g
Y29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJ
CQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBi
dWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJ
CQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJ
eworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJ
CQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9O
RVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJ
fQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBm
b3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZl
IHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJ
cmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1l
ZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlu
cHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0
YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAo
RklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lk
IHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw
bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZm
ZXJfc3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAg
Ki8KKwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBi
dXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3
cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlz
IHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9
CisKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9w
OworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRl
LgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUg
Y2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlf
QlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBy
ZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RB
VEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5l
ciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOwor
CisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNp
emUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBj
aGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigp
IiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZp
bGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBw
cF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIg
KTsKKworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6
ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRp
bWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFz
IGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBw
X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZm
ZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2Zp
bGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVu
IHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0
YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNl
LCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLwor
ICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5v
ID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+
eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiog
RGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5Q
VVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZs
dXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJ
cmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28g
ZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICog
YSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9
CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0
ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxv
Y2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIg
VGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJ
cmV0dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRv
cC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3Bp
ZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKwor
LyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQu
CisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQly
ZXR1cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIp
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxv
Y2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3Bh
Y2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwor
CWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlz
IGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBz
Y2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBh
dm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAg
ICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlp
ZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAg
CisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJ
cmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJi
aXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
CisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1l
bXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwg
Z3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVk
IGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgor
ICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8
IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkg
ICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZv
cmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXpl
ID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1
Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwor
CWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsK
KwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9m
aWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisK
KwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisK
Ky8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBu
ZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0
ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8g
c2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAg
ICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
c3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIp
OworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZl
biBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBl
IGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNj
YW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50
ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lgor
ICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0
ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZF
Ul9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkv
KiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGlu
ZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFs
bG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0g
MDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1
ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEg
YiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7
CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxk
IHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUK
KyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRh
bF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
CSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9G
QUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rp
b24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBc
CisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAor
CXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykg
dG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZv
ciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1i
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBw
Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2Nv
bHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5
Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQg
c3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJ
TEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0
OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQg
dGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhp
cyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9k
ZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRy
YSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBs
aW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVt
YmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25s
eSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9D
VVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5v
IGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVu
byA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBw
YXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQg
YnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAg
ICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZm
ZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisK
Ky8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJy
ZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3
aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0
X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91
dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChp
bnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9
IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9j
ICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFs
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFy
YW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAg
eXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxs
b2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2lu
aXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBp
dCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRo
ZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNp
dGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4K
KyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAg
ICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2Fu
X3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBp
ZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2Vz
LiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0
c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMg
cHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUg
c2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlz
IGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkg
dGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24g
YWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmlu
ZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxs
b2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJh
KFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyAp
CisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0
cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICgg
c2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgq
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVs
ZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3Qg
eXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRy
X3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRo
ZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
ZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisK
KyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlf
Y19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5
X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5V
TEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5
aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxF
ICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0
dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5
CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBw
bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5u
ZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwor
CXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhl
IHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5l
cik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUg
c3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9z
dGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwor
CisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJl
ZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxl
ZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5
c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9u
bHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nh
bm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5
IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxl
eF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytp
ICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4K
K3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiAp
CisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9j
KCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBp
biB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRo
YXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZv
aWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNh
dXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJ
ICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252
ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVy
biAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZy
ZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikg
cHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVm
aW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6
ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorewor
ICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6
flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6
ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
KGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRl
eHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0
U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFu
ZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7
CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRv
a2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29u
dGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2Fu
bmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgm
bUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3Rh
cnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRl
c3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1
cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1ZGUg
IkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAg
cHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBsb2Nh
dGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sK
KyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRo
ZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVw
IGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNj
YW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGluZVN0
YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsK
KyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9pZCBk
ZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxl
LgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40OTE0N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKQEAg
LTAsMCArMSwzMTkgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFp
bnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2Vk
IG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Cito
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJ
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCislewor
I2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAg
ICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisi
Ly8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFr
cyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50
IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5U
KTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5F
fSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpT
b3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQor
Cit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQ
T05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
KyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICov
Cisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsK
KyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJ
RF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9j
YXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7
Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9
CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
QU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQor
Ij4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsK
K30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsK
K30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwor
ICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5
bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5
eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFS
QUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRp
b24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8v
IFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8g
U2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBp
bnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUg
ZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAg
ICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAg
ICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxs
b2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7Cisg
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291
cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisK
K25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFn
bm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nh
bm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwg
MCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcs
IGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52
YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFy
dE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRv
a2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250
ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9
CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09
IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDViMzJm
NzEuLmU5YzcwYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJz
ZXIuc2gKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0j
IEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBh
bmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
LmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAt
LW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5f
Ymlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRz
Y3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAK
LWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVh
ZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3Jp
cHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVz
IC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9
CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3Nvcgot
cnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVy
LmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlv
biBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmlu
ZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3Rf
bGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9
IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNp
emUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNo
YXIqIHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXIt
aW50ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNv
bi1sb2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24g
ZXh0cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAg
ICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAg
ICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUl
Ci0KLXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVO
VElGSUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVm
aW5le0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFj
dE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7
Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNI
fWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7
IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJl
dHVybiBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFT
SH1lbmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5F
RDsgfQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEg
eyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VY
VEVOU0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNI
fWxpbmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFs
LT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURF
TlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFE
RUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7
RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7
Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRl
eHRbMF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4g
ewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwot
fQotCi08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJp
bmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8v
IFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgot
ICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4
OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4g
LSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwg
KHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6
OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQot
Ci1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50
IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1
dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtF
cnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAg
ICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9j
YXRpb24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUg
PSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46
OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0g
bUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3Io
KSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZt
TGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQot
ewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAg
IG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vz
c29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3Ig
R3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4
OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNF
Ui4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1
ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0j
ZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgot
JWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9u
IHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4q
IHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQg
eXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0
aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6
Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29u
KTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRl
eHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6
OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2Vu
IEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hf
RU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJ
T04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkog
SEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RB
TlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0
aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1l
bnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAv
KiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUK
LSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRv
a2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgot
ICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAg
ICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAg
ICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicK
LSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBj
b250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAk
MSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRl
cl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZp
bmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7
Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBjb250
ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFs
X2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8g
dHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7
Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsK
LSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xu
JyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5E
SUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQot
ICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNI
X0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5F
ICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5V
TEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5
ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEu
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlz
dCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2Jh
Y2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0K
LQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAg
IH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xp
c3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAg
ICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwot
Ci1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0g
ICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsK
LQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAx
LmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAg
ICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7
Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVO
VElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsg
fQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAg
fCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7
ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAn
fSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQot
ICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAn
KicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQk
ID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7
IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAg
IHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycg
eyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0g
Jz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0K
LXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAx
OwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAv
LyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEz
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lO
VF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkg
ZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZF
UlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0j
ZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRm
b3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4g
c3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5k
IHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlv
bnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBz
eXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3Qu
ICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9f
ID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
YmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4
L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9N
QUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhf
dCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1
aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5
cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFy
IGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBp
bnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2Yg
aW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAg
ICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElO
VDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01J
TgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlm
Ci0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykK
LSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAg
ICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAg
ICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVm
aW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2
X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNp
Zm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3
Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQu
ICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8K
LQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBk
ZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBk
ZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZk
ZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5
Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmlu
ZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkg
c2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJh
eSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8g
aW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAq
IGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50
KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9U
Ci10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwg
dGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9z
IGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgot
I2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFf
cgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRl
eHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19s
aW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Jz
X2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0v
KiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRh
a2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdh
eSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0g
Ki8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRl
IHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBo
YW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBh
bGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJU
ICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0v
KiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwot
I2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAx
KQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZp
bGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkK
LQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQg
aW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0la
RSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2gg
dG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8K
LSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2Yo
eXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNk
ZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9B
Q1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUg
dGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAg
KiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNz
KCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2Fu
bmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAg
ICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmll
ZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBu
b24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3Jt
YWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRo
IGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAg
ICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZv
ciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5
bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQg
dGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFt
LiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAg
ICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3Ag
PSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAg
ICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMs
IHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3Np
emVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZp
bmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAg
IHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAg
ICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3Vy
cmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQg
YnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJh
Y3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IK
LSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAg
LyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVk
IGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQg
ZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19v
dXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5w
dXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlu
cHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQo
KSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNo
IG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyog
V2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5l
LgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0
Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwot
Ci0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQg
eXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0g
ICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAg
IGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmlu
ZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQg
dGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0
aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICog
c2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdl
IG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhv
dWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAg
ICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRv
ICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNv
bnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlu
cHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAg
ICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHBy
b3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQot
ICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5l
cmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBz
dGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZl
cl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdo
ZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4g
d2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9j
cmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3Rh
dGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0j
ZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
LHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNl
LHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBw
cF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50
IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3Qg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNk
ZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAg
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAg
IFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50
ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9s
KGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAg
ICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVn
aW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBf
WVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5
eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3Vy
cmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJv
ciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBh
ZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUK
LSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUg
WVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAg
ICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAot
ICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5m
bwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5
eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIs
ICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAg
MjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcs
ICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAg
IDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAs
ICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMs
ICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAg
ICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAg
IDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUs
ICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAg
MTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0g
ICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMs
ICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwg
ICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAz
MCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRh
WzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYs
ICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAg
IDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcs
ICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jh
c2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEs
ICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAg
NzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAx
NTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQs
Ci0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAx
MzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUs
ICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAx
MjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUs
ICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAx
ODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUs
ICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0K
LSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEy
NiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEx
MV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2
LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0K
LSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAg
NywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwg
ICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAx
NCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwg
ICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAy
NSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwK
LSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAz
NywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwg
ICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAz
NywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwg
ICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAz
MCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3
LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAot
ICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIz
LCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAg
IDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAy
LCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAg
IDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4
LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAg
IDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAg
ICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAg
IDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwg
ICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAx
NiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwg
ICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAx
MCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwg
ICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAg
ICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwg
ICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAx
NCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAy
LCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAg
MTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3
LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAg
MTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAg
ICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAg
IDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYw
LCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAg
IDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5
LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAg
ICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQK
LSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhl
IGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFu
eSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1Qg
cmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNl
ZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgot
QmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1h
cjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4
Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRl
X3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElP
TiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5v
OyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsg
IFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAot
ICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3Rh
dGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxl
bik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29u
dGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5u
ZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5v
dCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAg
ICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhl
IG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwot
ICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFj
ay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBz
dGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25f
Y2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50
IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRf
c3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBl
IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0g
ICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9y
ZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9j
X3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlf
aW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBn
byBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBm
cm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwg
eXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19y
Ci0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhf
aW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIp
OwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2
aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1p
bnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1
ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19m
bGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUg
dXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBw
Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUg
KiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFm
dGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMg
aW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYg
X19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlm
Ci0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5j
cHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5k
aWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5
eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZ
X05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3Rh
dGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0
aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91
bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JF
QURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyog
Q29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1
dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBz
aW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0
ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQg
KQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJy
ZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAg
ICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAg
ICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9
PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBp
ZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3Vs
dCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3Np
emUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAg
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAg
ICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0
ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQot
ICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2Ug
dGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJl
YWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5
dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmll
cyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NU
QVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0K
LS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHBy
b3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5l
ciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgot
ICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJu
IGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxU
WVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RF
Q0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZ
WV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1
bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0j
aWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQot
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlf
QlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxF
X1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5n
IC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nh
bm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewot
ICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3Rl
ciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0g
ICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQg
PSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRp
ZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlf
c3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlp
biApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkK
LSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5U
X0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAg
ICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAg
IH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyBy
ZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0K
LSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24g
aW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4u
Ci0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZ
X0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsK
LSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9
IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlf
bWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAg
ICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZ
X0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXls
ZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkK
LSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5
Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjog
IC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQot
ICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAg
ICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAg
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmlu
ZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAv
KiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5z
dmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hf
REVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55
eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5
eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRy
YWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVO
QzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFT
SF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5T
SU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmlu
Zyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNw
YWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVv
bCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAg
ICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJ
TklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlf
UlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGlu
Y2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAg
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAg
ICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAg
ICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQK
LSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQot
ICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQg
b3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8g
ZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwg
bWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBO
b3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9u
Ci0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19i
dWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3Qg
dGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFu
c2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAg
Q29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAg
ICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlf
bmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAg
ICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5
X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICog
Zm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAg
KiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAg
ICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAg
ICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAg
ICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAg
ICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAg
eXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5
eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5
eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBp
bgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0g
ICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0g
ICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwot
ICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0
aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFu
b3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4K
LSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAg
ICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAg
ICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owot
Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0
ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAg
ICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8q
IGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBp
biBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0
aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FO
IC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9F
TkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpz
b3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3Zl
LCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9u
J3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAg
IGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0g
MSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNo
YXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5h
bCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9P
Rl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0
Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxh
c3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICgg
aSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihz
b3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0
aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAg
KiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAg
ICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAg
ICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAg
ICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNf
b3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdf
c2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3Np
emUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1
Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGIt
Pnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hh
ciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNo
YXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hf
YnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRv
bid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAg
ICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9F
UlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZl
ciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2No
X2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVh
ZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICov
Ci0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3Qp
IG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlf
bl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09
IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0Jf
QUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JV
RkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQot
ICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9z
aXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3Np
emVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+
eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7
Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5
eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07
Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0g
Z2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQot
ICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0g
ICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5
eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwot
ICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9z
dGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwot
ICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAg
ICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlf
Y3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEg
dHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4
dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0
YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5
X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9u
cy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAg
IHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
ICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQot
ICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRl
ZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZf
cCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2Nf
YnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAg
ICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUg
ZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAg
ICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVm
X3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlf
Z19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0
ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3Jl
Ci0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0g
ICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAot
ICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAg
ICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3Rh
dHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsK
LQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9O
RVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
cHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2Fz
dCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8q
IHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9j
X2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9
PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkK
LSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0g
ICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZ
X05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5w
dXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rp
b24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAq
LwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4K
LSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19i
dWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVu
dGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVy
X3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwot
ICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBv
dXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdo
ZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHBy
b2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBh
dCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdv
IGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5
eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0g
ICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5
eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBh
bmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUg
aW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1
ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAo
RklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9C
VUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAg
ICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6
ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxv
YyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9i
dWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQot
ICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwot
fQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRl
ZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJl
IGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwot
Ci0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXpl
cyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGlt
ZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMg
ZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBf
aW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNo
X2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0g
ICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBi
dWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQg
ZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJ
biB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4u
Ci0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55
eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQot
ICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJy
bm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4
dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIg
c3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVz
aF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsK
LQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBU
aGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVy
IHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgot
ICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAg
ICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9i
dWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAg
Yi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlf
Q1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3
IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxs
IGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdf
YnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBO
VUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2Fu
bmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1
ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAg
ICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxh
Y2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMg
dGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4g
MCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VS
UkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19
Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3Vh
cmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1f
dG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAg
IC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9u
J3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFj
ay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0
ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9f
YWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5
X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBi
dWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jv
d19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19h
bGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5
eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMu
Ki8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAg
IH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3Rs
eSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNl
IHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBv
ZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JV
RkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlz
Y2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVm
X3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAg
IGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9i
dWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+
eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIg
LHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nh
bl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQg
Y2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhl
IG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNf
bGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAg
IGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBH
ZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBF
T0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBw
cGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0K
LSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ld
ID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xl
bisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihi
dWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkg
dG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICog
YXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9
IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUg
KGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAg
ICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0g
eXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2
b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAg
ICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwot
ICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3Rh
dGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAo
IC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55
eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGlj
IGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5
eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNp
Zm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYK
LQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIs
IG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5
eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVz
cwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8q
IFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXls
ZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFj
cm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
LSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAot
ICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0
aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0
IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiog
R2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUg
Y3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQg
c3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJ
TEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsK
LX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRo
ZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1
cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0
aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBz
Y2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVk
IHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19
Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1i
ZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBw
c2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0
aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBj
b2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBp
cyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9j
b2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5
Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMg
ZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFt
IGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRf
aW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0g
aW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2Rl
YnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsK
LX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRo
b2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNl
dF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9p
ZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNp
YmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVz
IHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5j
dGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4K
LSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0
ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3Qq
IHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
KnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXln
dXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAg
ICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8q
IEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBM
ZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxz
LDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xv
YmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICog
Y29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5v
dGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFz
IGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29u
LCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJh
dGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3
aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAq
LwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5
eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15
X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1
dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xv
YmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZk
dW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAot
ICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBz
ZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICBy
ZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBp
bnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRp
YWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgot
ICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBk
b24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sg
PSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAg
IHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7
Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4u
YyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBz
dGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUg
KikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBv
biBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAg
ICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJl
ZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNr
LCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZF
Uil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5l
ciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBw
cHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNj
YW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ry
b3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlf
c3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
TlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBh
IG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBp
cyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9i
YWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50
cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAg
ICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwg
dXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lk
IHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0g
MDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lm
ZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAg
IGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0K
LSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lk
ICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBh
Y2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3Ro
IEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFu
eSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lv
bnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICBy
ZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQg
cHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChj
aGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwot
fQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0
cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlu
cHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklF
Un0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNT
RVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAg
ICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkg
Pj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ld
ID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5n
KHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVz
cGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6
ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2Yo
KSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9u
ZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50
IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihw
cGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1
dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2Rl
TG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+
cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0g
TlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1l
bnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91
IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBv
ZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAg
dW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0
c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlm
aWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2
ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRv
biBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBM
QUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0g
ICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAg
Ki8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBv
ciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBz
aG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0
IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21l
IHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmlu
ZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9O
Ci0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0
cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2Rl
ZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVm
aW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2Rl
ZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9O
RUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMu
ICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2Rl
ZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXlj
aGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBu
ZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZ
VE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAg
ICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0gg
PSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAg
IEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VM
U0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwK
LSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9Q
UkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJ
T04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0g
MjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAy
NzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0g
ICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBI
QVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2
MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmlu
ZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQg
MjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2Rl
ZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmlu
ZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFT
SF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9B
VF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0
aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3Bh
cnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUg
WVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBF
bmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAK
LSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRl
ZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYK
LQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJM
RQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNU
WVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZ
UEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpU
b2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcg
b2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lm
ICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29s
dW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0j
IGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXdu
ICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNf
VFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRl
Y2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlM
VFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSog
bGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3Rh
dGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQot
LyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hv
cnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5
eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsK
LSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBl
X2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBl
ZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQ
RV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYg
WVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQ
RV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6
ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9U
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0
ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlT
SVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMg
ZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQot
Ci0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBp
bmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
ICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMg
IGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lk
Ci0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdz
IGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNf
XwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0Uo
ZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBz
dXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYg
bGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3Rh
dGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0K
LSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0K
LS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vz
c2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZ
U1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FS
R19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFs
bG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFs
bG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EK
LSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxp
Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NU
RExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRp
ZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MK
LSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZp
bmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkp
Ci0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1
YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAot
ICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNv
IHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMg
NDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9y
IGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIw
MDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9D
Ci0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0K
LSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJ
Ql9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykg
XAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGlu
Y2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
aWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAg
ZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMg
ICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMg
IGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQg
ZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwg
KGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAg
ICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQot
Ci0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElN
VU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZ
Ci0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNP
UFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwg
KENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAg
XAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAg
IChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVs
b2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0g
ICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5k
IG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6
ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3Rh
Y2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBz
aXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZ
RklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVm
aW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwot
I2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xB
VEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4g
ICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNk
ZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFu
c2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAg
ICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUs
Ci0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAot
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9m
IHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAq
Lwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAg
IDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAx
OSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAg
ICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcy
LCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAg
IDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAg
ICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwg
ICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0
MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19
OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAg
NTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywg
ICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAy
MywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAg
ICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0g
ICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQs
ICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAg
LTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwg
ICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAt
MSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1
LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAg
IDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEs
ICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAg
NTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAy
NiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAg
ICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0x
LCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAg
IC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAg
ICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0Mywg
ICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0
NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxl
IG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3
MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAg
ICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEy
LCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMs
ICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAx
NjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4Miwg
ICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5
MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4
LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZ
WUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAt
LSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRl
cm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwot
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9y
IiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFT
SF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hf
RU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hf
RVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVf
T0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNU
QU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwK
LSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSci
LCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9
JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJs
aW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIs
ICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAi
Y29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0K
LSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tl
biBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAg
IDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0g
ICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIs
ICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAg
NDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0Niwg
ICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAz
OCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYK
LQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAg
ICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAg
IDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEs
ICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwg
ICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAg
ICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgs
ICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5n
IHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAg
MSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1F
XSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3
aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwot
ICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcs
Ci0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAg
ICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAg
ICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAg
MTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwg
ICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAg
ICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0g
ICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZ
VEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZp
bmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0K
LXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAg
ICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAg
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAg
ICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1
LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMs
ICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwg
ICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19Owot
Ci0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3
LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyog
WVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5V
TS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1
Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBk
byB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4g
ICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1
MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAg
ICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3
MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkw
LAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwg
ICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
IDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAg
ICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAg
MzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAg
MjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwg
ICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAg
MjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAy
MiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0x
LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAg
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDEx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTks
ICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17
Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAg
MjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwg
ICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAg
ICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIy
LCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAg
IDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQot
I2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4g
ICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZ
WUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2Rl
ZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290
byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3Iu
ICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlv
biB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZl
cnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2Rl
ZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkg
ICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAg
ICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAg
ICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVy
cm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi
KSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2Rl
ZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgot
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExP
Q19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5l
OyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSku
Zmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9D
IChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAg
ICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAg
ICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQot
I2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9u
IHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTog
ZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVu
IHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FU
SU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQt
JWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmly
c3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1
bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3
aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVm
aW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0j
IGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFi
bGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZ
WUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmlu
ZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFy
Z3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1C
T0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRs
ZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24s
IGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRw
dXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5
b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsK
LSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBS
SU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5
dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsK
LSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5
eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNv
bnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9p
ZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0
IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVz
ICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
Im50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5
eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0g
IHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9t
IGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNl
bHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlw
ZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyAr
K2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRv
bSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5
X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUg
KFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVj
ZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0g
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2
b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50
IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAq
eXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwot
ICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsK
LSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVs
dSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBi
ZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQot
ICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
LSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAg
ICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRl
eHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5l
IFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZz
cCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVn
OwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAot
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgot
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRp
ZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlm
IGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3Ry
bGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVf
VAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAot
eXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZ
U0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQot
ICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkK
LSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mg
b2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNo
YXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlz
dHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIg
Knl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAq
eXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAg
Y29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RS
IGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFz
aGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3Rp
YyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5n
Ci0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVy
IHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRu
YW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4g
dGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1z
dGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3Ry
KQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAw
OwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAg
c3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcs
JzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6
Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAg
IHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5
eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsK
LSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5
cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAo
eXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNV
TFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFS
IHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3Bp
ZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxU
IGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwg
cmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBk
by4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBz
aXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNo
YXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZ
TEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
LSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsK
LSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAg
Y2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBp
bnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUg
dHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZs
eS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwot
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7
Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhw
ZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNo
YXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9m
IHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAg
ICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAg
ICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9
IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0
byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50
IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBi
b3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNr
bGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwg
WVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0g
MTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5
c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhi
ZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09
IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNv
dW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6
ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNp
emUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNp
emVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNp
emUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAg
ICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7
Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVf
b3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsK
LQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07
Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBh
cyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24n
dCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAg
ICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8K
LSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3
aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5
eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewot
ICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAg
ICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJP
U0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0v
KkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1z
dGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZ
U1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRp
b25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZh
bHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBp
ZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBl
KQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8q
IFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRl
ZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFy
c2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAg
fAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQ
QVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29u
dGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNv
bnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBz
eW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBm
b3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5
eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tl
bnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXll
cnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0
ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZF
UkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQg
c2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1
ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQot
ICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQg
dG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAg
ICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFj
a3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byBy
ZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAq
LwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5
c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMg
dmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQ
RSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24g
c3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXls
cyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0
aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2Vb
Ml07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChO
KSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7
Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQg
bG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5
eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24g
dGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBz
eW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAg
eXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAg
IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFj
ayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9u
IHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBz
dGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6
ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5
bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQg
bG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUg
ICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxs
b2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5
eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVu
IHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBq
dXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNr
cy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwot
Ci0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8q
IEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVu
dHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lm
ZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVh
bGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0
aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICov
Ci0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9p
bnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEg
aW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAg
ICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1p
Z2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0g
ICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsK
LSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1B
WERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0g
ICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxv
YyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFD
S19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19S
RUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZ
WVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19G
UkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAg
ICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5
eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0g
IFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0K
LSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0t
LS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBn
aXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlm
IHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJz
dCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVh
ZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBB
Q1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEg
bG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZ
WUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5
bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVY
OwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9
IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQg
b2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZ
VFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBp
cyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJv
cGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAg
ICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9r
ZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0
b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAo
eXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05J
TkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5
cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0K
LSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXll
cnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZ
X1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0K
LSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAg
aWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUg
PSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290
byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBh
Y3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXlu
ID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFi
OwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUg
dG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxF
TiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoK
LSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNl
dHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQg
YW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5n
IHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNt
YWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBi
ZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0g
IC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxz
cCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAo
eXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFs
b2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250
ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygx
KSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgp
KTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFj
cm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5
eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4
dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6
a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxp
c3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3Bb
KDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0g
ICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0g
KDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29u
dGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25h
bEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMp
XS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNv
bnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFs
LnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5
dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5
eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5m
aXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVz
aF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAo
MSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIp
XS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0g
KDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBw
cDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSld
Lml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRf
Q09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9r
ZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkg
LSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFr
OwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZh
bCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5
eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVj
dGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24g
dGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVk
dWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3Rv
W3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0
ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9
IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAt
IFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBl
cnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFi
OgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0
aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVy
cnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRl
eHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5
eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXlt
c2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0p
Ci0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAg
ICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAg
ICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNn
KTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAg
ICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAg
eXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0g
ICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAg
ICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAg
ICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxz
ZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJv
cl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0g
ICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tl
biBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNo
YXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9m
IGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7
Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlz
Y2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRl
eHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ug
d2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0g
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsx
LXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
LSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9S
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJl
YWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAg
ewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1Rf
TklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4g
JiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsK
LSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0g
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJl
bnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0g
ICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3Jh
bmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAg
ICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZ
WVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19Q
UklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAg
WVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9
IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdl
IHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJs
ZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0g
MSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tl
bi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNw
LCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0g
WVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIg
LS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsK
LQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9u
IGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4
dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwg
dGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0Yg
JiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJk
aW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250
ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2gg
YWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdo
aWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBw
b3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0
KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBp
ZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYg
WVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAg
cmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19
Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wg
Y29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQq
IGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkK
LXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1
ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBh
cnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNl
IGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNy
ZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBC
aXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0
ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEK
LSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVy
c2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlm
IHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2Vs
ZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2Vw
dGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAg
IEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAg
VGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAq
LwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0
aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRl
YnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUg
ewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lG
ID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwK
LSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hf
RU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcs
Ci0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAg
ICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hf
REVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5U
X0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJ
RklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAy
NTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUg
SEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxT
RSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2Rl
ZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BS
QUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lP
TiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcy
Ci0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQK
LSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQot
Ci0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0
cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0
bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMg
ZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24g
Ki8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19U
UklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5l
ZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBm
aXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQg
bGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRp
ZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93
IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11
c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2Rl
ZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUo
Y29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RM
IHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9O
X1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsg
fQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRl
IHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9T
VExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRD
UFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IElu
aXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9t
U3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAq
YXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmFk
NDNmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNlbmRp
ZgogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdXRpbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2
Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBT
dHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpz
KTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03Myw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9m
X3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQg
bm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0
YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAm
bm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAm
ZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3Jj
ICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApAQCAtMTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJl
ZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKKy8vIERlZmluZSB0
aGlzIHRvIDEgdG8gdXNlIHRoZSBuZXcgbGV4ZXIuCisjZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVS
IDAKKworaW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBf
VVNFX05FV19MRVhFUgorICAgIElucHV0U3JjKiBpbiA9IExleGVySW5wdXRTcmMoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKKyAgICBpZiAoIWluKSByZXR1cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9IGluOworI2Vsc2UKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFB
cmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAt
PlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyNl
bmRpZgorICAgIHJldHVybiAwOworfQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNh
cmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
CmluZGV4IDIzM2QxZGMuLmI2N2MxZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5
ICs2OSw5IEBAIHR5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJ
bml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5l
ci4gCi1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2Fu
bmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5nIG1lbnRpb25lZC4KK2ludCBJbml0U2Nhbm5l
cklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5m
b0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIn
cy5JbmZvLmxvZwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOyAgIC8vIHN0
aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRM
aW5lTnVtYmVyKGludCk7CiB2b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwogdm9pZCBJbmNMaW5l
TnVtYmVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAppbmRleCBjMTlmNzljLi4yMzIwM2Rh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3N5bWJvbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaApAQCAtMTA1LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3
U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2lu
ZCBraW5kKTsKIFN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3Bl
LCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2wo
U2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZT
Y29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwordm9pZCBD
UFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOwogCiAKICNlbmRpZiAvLyAhZGVmaW5lZChf
X1NZTUJPTFNfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmluZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYg
KzI2Niw4IEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwogICAgIGlu
dCBsdG9rZW4sIGxlbjsKICAgICBjaGFyIGNoOworICAgIGludCBiYXNlLCBhY2N1bTsKKyAgICBj
aGFyIGNoX3ZhbDsKIAogICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICBpZiAobHRv
a2VuID49IDApIHsKQEAgLTMxNSwxOCArMzE4LDQxIEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJl
YW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNj
dW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3
aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Cisg
ICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYg
KGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAg
IGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAg
ICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAg
aWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAg
ICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAg
ICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRl
KHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAq
ZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICBzd2l0
Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2Ug
Q1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRB
dG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NU
UkNPTlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50Zihz
dHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FU
Q09OU1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2
YWwpOwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBU
b2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tl
bikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aAppbmRleCA4NzY2ZGY5Li5kYmY0YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYg
KzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0gg
MQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
cGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3ZWI1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
CkBAIC0wLDAgKzEsODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5m
b1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKKy8vIEZJWE1FKG12
dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWlu
IG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3Qg
dGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVt
RXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3Jh
cGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93
LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJv
bSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0
ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7
CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICAr
K2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRl
cjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2Fs
bCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVu
Y3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVk
IGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2Rl
KQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsK
KyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKK3sKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIHNob3VsZCByZXN0cmljdCBzYW1w
bGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBiZWluZyB0ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAg
IC8vIGluIGFsbCBhdmFpbGFibGUgc2FtcGxpbmcgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xT
TCBFUy4KKyAgICAvLyBUaGlzIGluY2x1ZGVzIG92ZXJsb2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0
dXJlMkQsIHRleHR1cmVDdWJlLCBhbmQgb3RoZXJzLgorICAgIGlmIChwYXJhbWV0ZXItPmdldElu
dGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgIT0gInRleHR1cmUyRChzMjE7dmYyOyIgfHwK
KyAgICAgICAgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpICE9IDEpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQiCisgICAgICAgICAgPDwg
IiBvZiBhIHRleHR1cmUyRCBjYWxsLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAg
YmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHBy
ZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3Ag
Y29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVy
cm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBl
eHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUg
bGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdl
dE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTc5MzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitj
bGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
IDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IG1TaW5rKHNp
bmspCisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJp
Y3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3Jz
KCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExv
Z2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7CisKKwlUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1J
TkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgi
CisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkp
IHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAg
bVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxu
IjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5H
X0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2Ns
YXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBt
TnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkg
eyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklD
VF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTky
LDIyIEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9E
WFQ1KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3Qz
RDkKKy8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdl
IGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0
cy9EM0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0
KCkgY29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RF
UFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51
bGwgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZ
UEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9
CisKIGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxh
eU1vZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAot
RDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitE
M0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAg
IGlmIChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9P
TCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQog
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEo
dXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXgg
NTAyODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVh
bCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVy
YWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVz
YWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAg
Ym9vbCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLmNhMmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtNTY1LDYgKzU2NSw4IEBA
IEVHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAogICAgIHJl
dHVybiBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTU3NSw2ICs1NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNl
OSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFj
ZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IDY2
Y2Q1YzAuLjgyMGY2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMx
MSw3IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBl
Z2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9
IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKICAgICAgICAg
bVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1E
aXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBw
b3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwog
CiAgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleElu
ZGV4ID49ICgxIDw8IDE2KTsKIApAQCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENvbnRleHQ6Om1h
cmtBbGxTdGF0ZURpcnR5KCkKICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwogfQog
Cit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQoreworICAgIG1EeFVuaWZvcm1z
RGlydHkgPSB0cnVlOworfQorCiB2b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAg
ICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCkBA
IC0xNjQ2LDYgKzE2NTMsMTIgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJB
VEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAg
ICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FO
R0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFy
YW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudQog
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKQEAg
LTE4MzUsMTMgKzE4NTAsMzEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29s
IGlnbm9yZVZpZXdwb3J0KQogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBj
b2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50
CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5
IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
cmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXROdWxsQ29sb3JidWZmZXIoKTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmpl
Y3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRl
clRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNl
cmlhbCgpOwogICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJn
ZXRTZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAg
IH0KICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBA
IC0xODU2LDI1ICsxODg5LDI3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9v
bCBpZ25vcmVWaWV3cG9ydCkKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7CiAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQogICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVw
dGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAg
fQogICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldFNlcmlhbCgpOworICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwog
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0
KCk7CiAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAs
MjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0
KQogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAg
ICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgp
OworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9n
cmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBo
YWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24o
KTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBm
IC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJm
dihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCiAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBh
cmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWlu
Z3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0Lgot
ICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigp
OworICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlv
bigpOwogICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKICAgICAgICAg
R0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZp
ZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1T
dGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdM
aW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAg
IEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAg
ICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFy
KSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAx
LCBkeik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6
KTsKIAotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5h
cnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRp
ZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsK
ICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCAr
MjAzMSwxOSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmll
d3BvcnQpCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsKIAogICAgIEdMZW51bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmco
bVN0YXRlLmZyb250RmFjZSk7CiAKLSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3Qt
PmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CiAgICAgR0xpbnQgY2N3ID0gKGFkanVzdGVk
RnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihm
cm9udENDVywgMSwgJmNjdyk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9u
dENDVywgMSwgJmNjdyk7CiAKLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVj
dC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVz
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGlu
dCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zy
b250KTsKIAogICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxh
eS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2Vk
ID0gaWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwpAQCAtMjI4MCwxOCArMjMyMiwyMCBA
QCBHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSBtbwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQog
ewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAg
IFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisKICAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxp
ZWRQcm9ncmFtU2VyaWFsKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
dmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
aXhlbFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFk
ZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVy
KCk7CiAKICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJv
Z3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5k
aXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dy
YW1PYmplY3QtPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5
VW5pZm9ybXMoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8v
IEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKQEAgLTIzMTEsMzAgKzIzNTUsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKCkKIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewog
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CiAKICAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVy
IHR5cGUKICAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0g
U0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVy
ZVNlcmlhbFZTOwogICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9Q
SVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFu
Z2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBz
YW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwog
CiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJh
bmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHBy
b2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8g
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAg
IC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBs
ZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0
dXJlVW5pdCAhPSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVy
ZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxl
ckluZGV4KTsKKyAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAg
ICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwg
dGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkp
CisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0
ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFz
RGlydHlJbWFnZXMoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0
ZXh0dXJlLT5nZXRXcmFwUygpOwogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBU
ID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKQEAgLTIzNTEsNyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4
dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVS
LCBkM2RNaXBGaWx0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBs
ZXIsIGQzZFRleHR1cmUpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDcs
NyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKICAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBs
ZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9
IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4
dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ1MSw2
ICsyNDk3LDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzM4LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRl
eHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZv
cm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7CkBAIC0yOTUyLDcgKzMwMDAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbgogICAg
IGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3Vy
cmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJy
ZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2Up
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICB9CkBAIC0zMDQyLDcgKzMwOTAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZAogICAgIGFw
cGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50
UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9
CkBAIC0zNDUyLDYgKzM1MDAsMTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMoKSBjb25zdAogICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4
dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMz
MmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MzAsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRl
bnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19y
Z2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3NCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJl
X3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAo
c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBAIC00MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBD
b250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEKIAogICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKICAgICAg
ICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERl
cHRoU3RlbmNpbCgpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0
ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWws
IE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAg
ICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAg
ICAgICAgICAgewpAQCAtNDExNSw2ICs0MTgwLDggQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcg
QEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBh
dHRyaWJ1dGVzW2ldLnR5cGU7CiAgICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNM
TUVUSE9EX0RFRkFVTFQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtLT5n
ZXRTZW1hbnRpY0luZGV4KGkpOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHBy
b2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CiAgICAgICAgICAgICBlbGVtZW50Kys7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCmluZGV4IDhkY2NmMGYuLmM3ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcg
QEAgY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1h
eExydTsKIAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07
CisgICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAg
IHN0cnVjdCBWQkRhdGEKICAgICB7CkBAIC0yODIsNiArMjgyLDcgQEAgY2xhc3MgQ29udGV4dAog
ICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpOwogCiAgICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFy
a0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgp
OwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENv
bnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wg
c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNz
IENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1
bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwog
ICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4IDczMGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
Ojpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBA
IC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsK
QEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJl
bmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9p
bnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5n
ZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVy
KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVm
ZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4
cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
OworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXIt
PmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsK
KyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVy
KHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOwor
fQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZm
ZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3
aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAg
ICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJU
eXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkK
KyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVm
ZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRl
cm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBI
QSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAor
ICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQz
MkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAo
ZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFn
ZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAg
ICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0
LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAg
ICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0
c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xf
TFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlO
QU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3Jt
YXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgIH0KIAogICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAg
ICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNhbXBsZXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7Cisg
ICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgUmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJC
VUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsgICAvLyBSZXF1aXJlcyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAgICAgICB9Ci0K
ICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICgh
ZGVwdGhidWZmZXIpCkBAIC0zMTksMTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpCiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAg
ICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewot
ICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAg
IGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6
OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFU
IGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAg
Ly8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0
dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgy
ZXM6OklzRGVwdGhGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkK
KyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3
aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVy
LT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2Ft
cGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVG
RkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1
ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1
IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVu
Y2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxi
dWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
KQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0
ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0
ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBP
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5j
aWxGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0
ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVm
ZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5n
ZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRo
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5j
ZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBk
ZXB0aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYm
IChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0
aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8
fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlh
bCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5l
ZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlm
IChtaXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAq
Z2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpn
ZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsK
ICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNz
IEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRp
bmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRl
eCBhNWUzOGJmLi4xODRhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4K
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCAr
MTgsMjQgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgZ2wKIHsKIHVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25z
dCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50
IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAg
OiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlm
b3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWdu
ZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9
IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwot
fQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0
ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0g
MDsKIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAg
ICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVt
ZW50KSwgaW5kZXgoaW5kZXgpCitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdz
KCkKIHsKIH0KIAogUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdM
dWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUp
LCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwog
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0K
LSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9
IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
Ci0gICAgdW5saW5rKCk7Ci0KKyAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgbURlbGV0
ZVN0YXR1cyA9IGZhbHNlOwotCiAgICAgbVJlZkNvdW50ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsx
MTMsNyBAQCBpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAogICAg
IHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDog
MCk7CiB9CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIo
KQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4
RXhlY3V0YWJsZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQordm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6Ymlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAg
ICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgewpAQCAtMTc1LDI2NDkgKzEy
NiwyODAgQEAgdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4
LCBjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJp
YnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5h
bWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0
dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAor
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQ
cm9ncmFtOjpsaW5rKCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB1bmxpbmsoZmFsc2UpOworCisgICAgbVBy
b2dyYW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5
LT5saW5rKG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVy
KSkKKyAgICB7CisgICAgICAgIHVubGluayhmYWxzZSk7CisgICAgfQogfQogCi0vLyBSZXR1cm5z
IG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJv
Z3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEF0dHJpYnV0
ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBj
b25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5m
aW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CiAgICAgfQorCisgICAg
cmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBp
bmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNo
YWRlcikuCi1HTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBl
LCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmpl
Y3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVj
dGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQogewotICAgIEdMaW50IGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChkZXN0
cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCiAgICAgewotICAgICAgY2FzZSBTQU1Q
TEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVy
c1ZTWzBdKSk7CiAKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQorICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9n
aWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVy
ZVVuaXQ7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAg
ICBtVmVydGV4U2hhZGVyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJl
VW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAg
ZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAg
ICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUg
Zm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0
dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFBy
b2dyYW1CaW5hcnkoKQogewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNB
TVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2Ft
cGxlcnNWU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJl
VHlwZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRFWFRVUkVfMkQ7CisgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1HTGludCBQcm9n
cmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6
c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHVu
c2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5OworfQogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Cit2b2lkIFByb2dyYW06OnJlbGVhc2UoKQoreworICAgIG1SZWZDb3VudC0tOwog
Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1z
OyBsb2NhdGlvbisrKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQog
ICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAm
JgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3Jp
cHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQor
ICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwogICAgIH0K
LQotICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBQcm9ncmFt
OjphZGRSZWYoKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgbVJlZkNvdW50Kys7
Cit9CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCit1bnNpZ25lZCBpbnQgUHJv
Z3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7Cit9CiAK
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJp
YWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFsOworfQogCi0gICAgICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQ7Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwo
KQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQogCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBd
ID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRb
Ml0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKK2ludCBQcm9ncmFtOjpnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVu
Z3RoKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0SW5mb0xvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAoYnVmU2l6ZSA+IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYg
Kz0gMjsKKyAgICAgICAgICAgIGluZm9Mb2dbMF0gPSAnXDAnOwogICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwogCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICBpZiAobGVu
Z3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5n
dGggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQs
IEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKKyAgICBpbnQgdG90YWwgPSAwOwogCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICBpZiAobVZlcnRleFNoYWRlcikKICAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4
Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAg
ICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRl
ci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CiAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICBpZiAobUZyYWdt
ZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBt
RnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwogICAgICAgICB9CisKKyAgICAgICAgdG90YWwr
KzsKICAgICB9Ci0gICAgZWxzZSAKKworICAgIGlmIChjb3VudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgKmNvdW50ID0gdG90YWw7CiAgICAgfQotCi0gICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzQpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAoYnVmc2l6ZSA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQs
Ci0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAg
ICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK30KIAotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKQoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
UHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKICAgICB9Ci0gICAgZWxz
ZSAKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNy
Y0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQogewot
ICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAg
IGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0g
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgaWYgKG1Qcm9ncmFt
QmluYXJ5KQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0
V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwogICAgIH0KLSAgICAvLyBjbGVhciB1bmZp
bGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdo
dDsgeSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9
CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit2b2lkIFByb2dyYW06OmdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQogCi0gICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIH0KIAotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OworICAgICAgICAqc2l6ZSA9
IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2
YWx1ZSArPSA5OworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFt
QmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQs
ND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUg
Kz0gMTY7Ci0gICAgfQordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1E
ZWxldGVTdGF0dXMgPSB0cnVlOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW06
OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1
czsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBj
b25zdAogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQo
KTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50
KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29s
ZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICog
c2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBs
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
YW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
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
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAot
ICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
MywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJu
YWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFy
Z2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChm
bG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVl
cmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBp
ZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4
dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwg
cmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5p
Zm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVu
dENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZv
cm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0
UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBh
cmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBy
b2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2lu
ZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxV
bmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1z
LmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAg
ICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAg
ICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAg
ICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRV
bmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAy
LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3Jt
bmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAg
YXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJz
IGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRv
QmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxh
Z3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUo
KSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRF
QlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwot
I2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNl
bmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwot
ICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBh
dGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAg
d3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VU
ZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxz
bDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJs
b2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBz
dHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdz
LCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0g
ICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVz
c2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0
aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJB
Q0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRp
Y19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFu
dFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3Mg
aW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20g
W09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0
aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVn
aXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewot
ICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5n
LT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIg
fHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYm
IGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZh
cnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0
b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8
IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsg
eV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9
IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3Bh
Y2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVt
biA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSBy
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9
IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQg
bm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVt
YmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3Ig
KGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBp
ZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFj
a2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06Omxp
bmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExT
TC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIr
KykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5j
b2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIg
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJl
ZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0
aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0
ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5n
VmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlu
cHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0
cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQt
Pm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAh
PSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVy
dGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWlu
ZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcg
PSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsK
LQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMg
ZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0
ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7
Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBz
dHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExT
TCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
InN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCBy
ZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChw
YWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVy
cykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQg
bWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAg
ICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0
cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVB
dHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4
SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91
dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9u
LnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bv
c2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigo
aW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xu
IjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdp
c3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYg
cGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJl
ZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wg
Kz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxu
IjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWlu
ZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlm
ICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBp
ICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxv
YXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAg
ICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQ
b3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAg
bVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAg
ICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5n
bF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhl
aWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3Jk
LnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0
IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJh
Z0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4
X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29y
ZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRo
LnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xf
UG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmICht
RnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9u
dENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsK
LSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmct
PnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZh
cnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
aik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+
bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsi
ICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0
LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExT
TCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtc
biIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29s
b3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAot
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQ
cm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hh
ZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXIt
PmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4
ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBt
VmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBv
cnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIg
KnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18w
IiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRv
QmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJs
ZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4
ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAg
aWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
dmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4
QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAg
IEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQq
KXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQot
ICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZl
cnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4
ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
cGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAg
ICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJs
ZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtB
dHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJs
ZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVj
b3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBw
cmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAg
ICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0
aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ci
KTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsg
ICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1h
cHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0g
dXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5z
aWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRo
YXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVy
YXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRy
aWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1
dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9j
YXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
cm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxv
Y2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0
ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAv
LyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAg
ICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRp
b25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxh
YmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9v
IG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0g
PSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsK
LSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBz
dGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
LnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBp
bmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQ
cm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewot
ICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRp
b25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29u
c3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVND
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFu
dERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25z
dGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAg
ICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3Rh
bnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRU
YWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlw
dGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0
IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBh
bHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhB
TkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNv
bnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRT
YW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBs
ZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8g
VEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAg
ICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNo
YWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnRE
ZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJh
eUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsg
ZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxl
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsK
LQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9u
OwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291
bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDog
IiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxl
LCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3Ry
dWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6
Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09C
SkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwg
bmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1
bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAg
ICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0t
PnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1
bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxl
cyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxp
emVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZT
KTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAg
IG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9y
bUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dy
YW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FN
UExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5D
b2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVD
MywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVy
biAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNv
cmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAm
JiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
Il8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1l
LnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJf
IikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQg
PT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3
aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JP
T0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGlu
dCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wg
PyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291
bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0g
c3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAg
ICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4
LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2
KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
SW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNv
bnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdElu
ZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9
IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2
ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwot
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7
Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRV
bmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwg
KGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0g
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
Ci17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3Qg
ZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0K
LX0KLQotLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxv
Zy4KLS8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21l
IG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFs
bCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQg
UHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17
Ci0gICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAg
IGRvCi0gICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKLSAgICAgICAg
aWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
c2cuZXJhc2UoZm91bmQsIHN0cmxlbihmYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmRUb0luZm9M
b2coIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZv
TG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZh
X2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmlu
dGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFy
Zyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICgh
bUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGgg
KyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAg
ICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsK
LSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9n
ICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAg
ICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OnJlc2V0SW5m
b0xvZygpCi17Ci0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1J
bmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtp
bmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kp
Ci17Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7
Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtUGl4ZWxFeGVj
dXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29u
c3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgp
OwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsK
LSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBt
U2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCi0gICAgewotICAg
ICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1V
c2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5p
Zm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0x
OwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9j
YXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLQotICAgIG1V
bmlmb3JtSW5kZXguY2xlYXIoKTsKLQotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVy
dGV4SExTTC5jbGVhcigpOwotCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cg
PSBOVUxMOwotCi0gICAgbUxpbmtlZCA9IGZhbHNlOwotfQotCi1ib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKLXsKLSAgICByZXR1cm4gbUxpbmtlZDsKLX0KLQotYm9vbCBQcm9ncmFtOjppc1ZhbGlk
YXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dy
YW06OnJlbGVhc2UoKQotewotICAgIG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9
PSAwICYmIG1EZWxldGVTdGF0dXMpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5k
ZWxldGVQcm9ncmFtKG1IYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjphZGRSZWYo
KQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVm
Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQot
Ci11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3Vy
cmVudFNlcmlhbCsrOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAg
aWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZv
TG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBp
bmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0
YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNo
YWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQot
ICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIp
Ci0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAg
ewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAv
LyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVB
dHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRy
aWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0K
LSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcg
PSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0
cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0g
PSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICps
ZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7
ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
dW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExl
bmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17
Ci0gICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5p
Zm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAgewot
ICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0KLQot
ICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBi
ZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXpl
ID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBu
YW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlw
ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUlu
ZGV4KyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9
IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51
bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkg
KyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRp
bmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAg
bURlbGV0ZVN0YXR1cyA9IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVs
ZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFBy
b2dyYW06OnZhbGlkYXRlKCkKLXsKLSAgICByZXNldEluZm9Mb2coKTsKLQotICAgIGlmICghaXNM
aW5rZWQoKSkgCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5v
dCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxz
ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAg
ICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8g
aWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQg
dHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwg
YW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2ls
bCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1
ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5
cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05P
V047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0
aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVy
c1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRz
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9n
RXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRo
ZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJv
cnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJF
X1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMg
b2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0
ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0
VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3Jt
OjpSZWdpc3RlckluZm8gKnJpLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17
Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFt
ZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQotICAg
IHsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNEWENPTlNU
QU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICByaS0+cmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJTZXQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJpLT5y
ZWdpc3RlckNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhS
YW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9u
OwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3Jk
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0
RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2Nh
dGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXgg
NjE4MzBjNi4uMWI0MjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dS
QU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywxNyBAQCBjbGFzcyBSZXNv
dXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsK
IAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0K
LXN0cnVjdCBVbmlmb3JtCitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwogewotICAgIFVuaWZvcm0o
R0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSk7Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBj
b25zdCBHTGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNv
cmF0ZWQgbmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVk
IG5hbWUKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQg
Y2hhciAqZGF0YTsKLSAgICBib29sIGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwot
ICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRl
eDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5m
byBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7Ci19OworICBwdWJsaWM6CisgICAgQXR0cmlidXRl
QmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotLy8gU3RydWN0IHVzZWQg
Zm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhh
bmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KLXsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4OworICBwcml2YXRlOgorICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJ
QlNdOwogfTsKIAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dy
YW0KICAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5k
ZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1
cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAg
IEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGlu
dCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsK
LQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAg
ICBib29sIGlzTGlua2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnko
KTsKKwogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKQEAgLTEzMSw5MSArNzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlv
bigpIGNvbnN0OwogCi0gICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1w
bGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJl
cGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlm
b3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJz
Y29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0p
OwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNv
bnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwog
ICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFy
eWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5n
cygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1z
KElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlm
b3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBi
b29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlm
b3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwot
ICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9v
bCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAg
IHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3Rl
ckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0
SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0g
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdt
ZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6
c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0
cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1W
ZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6
OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
LSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAg
IGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNh
bXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2Fs
VGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0K
LSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBT
YW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwot
ICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZv
cm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1V
bmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdM
aW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0
aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxp
bmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxl
dGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBk
ZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJv
b2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuY3BwCkBAIC0wLDAgKzEsMjU4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdM
IHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wK
K3sKK2NvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5n
IHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5p
Zm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJh
eVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFy
cmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNl
dChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5p
Zm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5
KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKwor
VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUo
UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50
KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQor
eworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBO
VUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBT
ID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0g
TlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNl
bWFudGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAg
ICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOworICAgIH0KKworICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7
CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2Nh
dGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
CisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7
CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
bUNvbnN0YW50VGFibGVWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFj
aygpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJp
bmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7
CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1
dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1w
bGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5n
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1Q
TEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4
dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0
dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0Owor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBl
IGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4
dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0K
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAg
ICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFy
Z2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1h
dHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3Jj
V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRh
cmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAg
dGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0g
OTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
X0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1F
eHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNb
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsg
aW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tp
bmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlm
b3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Cit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1V
bmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsK
KyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzog
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZv
cm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9W
RUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQg
c2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5h
cnk6OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxl
LCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsK
KyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlm
IChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVH
OworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0
VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwi
IikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxz
bCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19z
dHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291
cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsK
KyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENv
bXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBw
cm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJy
b3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBj
aGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRU
b0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7
CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdl
LT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3Rh
bnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmlu
YXJ5OjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhp
bXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAg
aW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsK
KyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0g
MyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9
IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFi
bGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
OyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47
IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2
YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wg
PSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVt
bl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNl
W2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47
CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNr
IHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tp
bmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1b
M10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0ws
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUg
dmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIg
IT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAg
ICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAg
ICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8g
dGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlp
bmdzKHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBI
TFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWlu
Z1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1
dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlu
cHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXgg
dmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwg
b3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlu
cHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisg
ICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpz
dHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKwor
ICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBV
VFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsg
ciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBh
Y2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAy
IDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0
ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0K
KworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7Cisg
ICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7
CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6
aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRl
KGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3Vu
dChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRl
eEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVs
U2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGds
X1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4i
OworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsK
KyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChn
bF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
QVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9G
cmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7
CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lz
dGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFy
ZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hd
ID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0
ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+
bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGop
ICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisg
ICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7Cisg
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwor
ICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIg
ZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAg
IHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAg
ICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWln
aHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkg
LSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdp
ZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29v
cmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7
XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsg
ZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53
ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChp
bnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisK
KyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4i
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9y
WzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRp
bmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8
ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
Q29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
dGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0
ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlm
ICghbGlua1ZhcnlpbmdzKHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZz
XzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkodmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQ
cm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkg
PSBjb21waWxlVG9CaW5hcnkocGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25z
dGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAg
ICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4
U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4
RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZt
UGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVs
UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZl
cnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKwor
ICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxp
bmtVbmlmb3JtcyhHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50
VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNo
ZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAg
Ly8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBk
ZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxT
aXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAg
IGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVy
bWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZl
cnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmli
dXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7Cisg
ICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0
dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24g
IT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVz
IGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwor
CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2
ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJp
YnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMg
fD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0
aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRp
b24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFt
ZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5k
QXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5k
ZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJU
RVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBh
dmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmli
dXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXgg
PSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dD
b3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtcyhHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUp
Cit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247
CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24p
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5k
ZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4Kysp
CisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5U
X0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFu
dERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25D
b3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYg
KCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRp
b24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2Yg
YSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlm
b3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBk
ZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOworCisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBs
ZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisg
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJF
X0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENf
U1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBm
aWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRM
RSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFu
ZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmll
bGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9
IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5k
ZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnRE
ZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAg
ICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoK
KyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0o
c2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5O
YW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9y
bShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0g
PSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1
bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENo
ZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsK
KworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07
CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlm
b3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9W
RVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKwor
ICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5
cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwor
ICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kp
CisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24o
X25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7
CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5k
IHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBE
M0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
VkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8g
bWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRl
Y29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1l
LmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRl
VW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29y
YXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgi
Ll8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVw
bGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRl
Y29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4g
bmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAi
YXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0
aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05T
VEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwg
dGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwg
d2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJ
bmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwor
ICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8g
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291
bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7
CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4
ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0
YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xW
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0K
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNh
bXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0
Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJ
bmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NElu
ZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2
WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jt
bml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3Vu
dCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAg
IH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9h
dCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29u
c3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAg
IH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7CisgICAgfQorfQorCisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRo
ZSBwcm9ncmFtIGluZm8gbG9nLgorLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2Ug
ZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywg
c28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJv
bSB0aGUgbG9nLgordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQo
Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisK
KyAgICBzaXplX3QgZm91bmQ7CisgICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZp
bmQoZmFrZXBhdGgpOworICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKworICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
Cit7CisgICAgaWYgKCFmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2hhciBpbmZvWzEwMjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQo
dmFyYXJnLCBmb3JtYXQpOworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1h
dCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3Ro
ID0gc3RybGVuKGluZm8pOworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1J
bmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9M
b2csIGluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVu
Z3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJb
bG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5m
b0xvZyk7CisgICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAg
ICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9
Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUlu
Zm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZv
TG9nID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKworaW50IFByb2dyYW1CaW5h
cnk6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1
cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9M
b2cpCit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7
CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAg
IG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
aW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgewor
ICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7Cisg
ICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0
aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAo
YXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAg
fQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3Ry
aW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAg
ICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAt
IDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUg
PSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0g
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisg
ICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQor
eworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1h
eCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsg
MSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3Ro
OworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3Jt
cworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
dW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUo
KTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2
ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXpl
KCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBz
dHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0g
IlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAg
IGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFt
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50
IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUlu
ZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4
KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVt
cHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAo
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBh
cHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQorICAgIHsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFj
dGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJl
ZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0
aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAor
ICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElE
X09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7
CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0
XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVy
ZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1
bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
IiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5
cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGlu
ZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0g
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3Jk
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jZGM3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKQEAgLTAsMCArMSwy
MjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6
OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVs
YXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFn
ZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVy
dGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAg
flVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5
cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cisg
ICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7
CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9
IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAg
IGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNv
dW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4
OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisg
ICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7
CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0
aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVj
dCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5z
aWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcg
YSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3Jh
bUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1C
aW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZl
cnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7
CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5
cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xp
bnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdl
dFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0x
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3Jt
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisg
ICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXRE
eERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMo
KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIGJvb2wgbGluayhjb25zdCBBdHRy
aWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIGludCBnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKwor
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgdmFsaWRhdGUoKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJv
cnMpOworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0
cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFBy
ZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5p
Zm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVy
c2NvcmUKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFt
QmluYXJ5KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpo
bHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRh
YmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRd
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1Zhcnlpbmdz
KHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKwor
ICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElE
M0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9
ICIiKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBh
cHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFu
ICp2KTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1l
c3NhZ2UpOworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7
CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKKworICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGR1cmluZyBsaW5raW5nLgorICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRy
aWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2Vt
YW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAg
ICB7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1w
bGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1T
YW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWlu
dCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsK
KyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5k
ZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVw
dGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAg
IEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKKworICAgIGNoYXIgKm1JbmZvTG9nOwor
ICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9H
UkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6
Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUo
Z2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJU
ZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQp
CisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKwor
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0
ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJl
MkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0
dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVy
ZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBu
b3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0
KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVp
Z2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRl
cmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJu
YWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8v
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1Jl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0
dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sK
KyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVy
ZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQ
cm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQ
cm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7
CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFz
ZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7
CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJU
YXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZl
clRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRI
ZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0K
IAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitE
M0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29u
c3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25z
dAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1w
bGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBp
ZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkK
IHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2
b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJl
bGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBA
QCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQw
LDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAg
RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1
ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7
CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOwor
Y2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZm
ZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4
LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRl
eHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6
CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBs
ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4g
bVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUu
LjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewogICAg
IGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7
Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAg
ICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0g
ICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAg
ICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChj
aGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAg
ICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAg
IH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNp
emUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2Mw
ZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBW
YXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAg
ZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFk
ZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3
ZDIuLjFhZjA4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcApAQCAtMzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwogCiBzdGF0aWMgRDNERk9STUFUIENv
bnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAg
ICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAg
ICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJ
c0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRa
OworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBA
IC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNo
KGZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBA
QCBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkK
IHsKICAgICBtV2lkdGggPSAwOyAKQEAgLTE1NSw2ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVh
dGVTdXJmYWNlKCkKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQz
ZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1U
X0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAK
ICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsy
MDMsNyBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICAgICAgICAgIGxldmVsVG9G
ZXRjaCA9IHVwc2FtcGxlQ291bnQ7CiAgICAgICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdo
dCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1
ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3
VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDcg
KzI4OSw3IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5CiB7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFj
ZSAhPSBkZXN0U3VyZmFjZSkKKyAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNl
ICE9IGRlc3RTdXJmYWNlKQogICAgIHsKICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4
ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0y
ODQsMTAgKzMwOSwxOSBAQCB2b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogfQogCiAvLyBTdG9yZSB0
aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhl
aWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8g
dGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0
ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFu
Z2xlIGF0IGxvY2tlZC5wQml0cyB3aXRoIGxvY2tlZC5QaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVh
Y2ggbGluZS4KIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBSRUNU
IGxvY2tSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIG1IZWlnaHQpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQpOwogICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAt
IDEpOwogCkBAIC0yOTcsMjkgKzMzMSwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBpZiAoc3VwcG9ydHNTU0UyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9h
ZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
LSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfTDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBn
ZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfUkdCQToKICAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAg
LTMyOCw3ICszNjksNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAg
IGxvYWRSR0I1NjVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwogICAgICAgICB9CkBAIC0zMzcsNyArMzc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyAr
Mzg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CkBAIC0zNTYsMTkgKzM5NywxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodAogICAgICAgICB7CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRl
ZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAg
ICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBs
b2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
UkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpA
QCAtMzc4LDI4ICs0MTksMzAgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgewog
ICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJH
UkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CisKKyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3
ICs0NTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaAogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gMDsKQEAgLTQxOSw3ICs0NjIsNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGgK
ICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAqZGVzdCA9
IE5VTEw7CisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisKKyAg
ICAgICAgaW50IHg7CisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCisgICAg
ICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYg
MHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVz
dFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgNyA8IHdpZHRoOyB4ICs9IDgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVy
cHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7CisgICAgICAgICAgICAvLyBJ
bnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJpdCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJv
CisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNv
dXJjZURhdGEpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0
LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvCisgICAgICAgICAgICBfX20xMjhpIGxvID0g
X21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIF9f
bTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworCisg
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeF0pLCBsbyk7CisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2Fz
dDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlIHRoZSByZW1haW5kZXIKKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
b3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2Fk
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKQEAgLTQyOCw3ICs1MTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwor
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyMiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1
MzEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAwOwpAQCAtNDU5LDE3ICs1NDIsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0K
IH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAg
IGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsKICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwogCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RC
eXRlc1BlclBpeGVsOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8g
QkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5V
TEw7CkBAIC00OTcsNyArNTc5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07CkBAIC01MDgsNyArNTkwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcs
NyArNTk5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWQKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUyOCwxNyArNjEwLDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVs
ID0gbmF0aXZlPyAyOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
ICAgICAgICAgCiAgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZv
cm1hdAogICAgICAgICB7CkBAIC01NTcsNyArNjM4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBA
IC01NjYsNyArNjQ3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2kKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCsw
XTsKQEAgLTU3Nyw3ICs2NTgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7CkBAIC01ODYsNyArNjY3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
OCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjc4LDcgQEAg
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02
MDYsNyArNjg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcs
NyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
NDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
CkBAIC02MzgsNyArNzE5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaQogICAgIH0KIH0KIAot
dm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9
IE5VTEw7CkBAIC02NDcsNyArNzI4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3ggKiAzICsgMF07CkBAIC02NTgsNyArNzM5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0
OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NzgsNyArNzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0wKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTY4
OCw3ICs3NjksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAog
ICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwMSw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC03MjgsNyArODA5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0
NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0
Nyw3ICs4MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0g
c291cmNlW3hdOwpAQCAtNzU5LDcgKzg0MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc2OCw3ICs4NDksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2
MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAg
LTc4OSwxMiArODcwLDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAq
IDE2KTsKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMs
MTIgKzg4NCwxMiBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1j
cHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyNSAr
ODk4LDQzIEBAIHZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KSB7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zmc2V0ICUg
NCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVD
VCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRo
LCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6
ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpICsg
aW5wdXRTaXplICsgaW5wdXRQaXRjaDsKKwogICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAg
ICAgewogICAgICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERYVDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhUM0RhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIHVubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBGbGlw
Q29weURYVDFCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewpAQCAtOTQ4LDExICsxMDQ3LDkgQEAgc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1
QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QK
ICAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKIH0KIAotdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VS
VCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGgg
PT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7CiAg
ICAgQVNTRVJUKG91dHB1dFBpdGNoICUgOCA9PSAwKTsKQEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKICAg
ICAgICAgICAgICAgICB7CkBAIC05OTYsMTEgKzEwOTMsOSBAQCB2b2lkIEltYWdlOjpsb2FkRFhU
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQg
JSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lk
dGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5w
dXRQaXRjaCAlIDE2ID09IDApOwogICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwpA
QCAtMTAzNSw3ICsxMTMwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogMTYpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbnRzQWNyb3NzOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAgewpAQCAtMTA0NiwxMSArMTE0
MSw5IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQg
JSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdp
ZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJU
KG91dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBAIC0xMDg1LDcgKzExNzgsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0
OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAg
ICAgICAgICB7CkBAIC0xMjY3LDkgKzEzNjAsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAg
ICAgbURpcnR5ID0gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQotICAgIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpLAotICAg
ICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSks
CitUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtRDNE
VXNhZ2UodXNhZ2UpLAorICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9v
bCh1c2FnZSkpLAogICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7
CiB9CkBAIC0xMjgwLDcgKzEzNzMsNyBAQCBUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdl
KCkKIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewotICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7CiB9CiAKIGJvb2wg
VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAg
RDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQ
b29sOwogfQogCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtRDNEVXNhZ2U7Cit9CisKIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAt
MTQ1MCwxNSArMTU0OCw3IEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+
bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAg
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTU1Nywx
NiBAQCB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsK
LSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdp
ZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0K
KyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIH0KIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBp
eGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAg
ICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KIApAQCAtMTUyMSwzNyArMTU3NSw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
CiAKIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0g
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlv
ZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3Jt
YXQgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAg
ICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdo
dCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZz
ZXQgKyBoZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFn
ZS0+bG9jaygmbG9ja2VkLCAmdXBkYXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0
ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNp
emUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAg
ICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdo
dCwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRT
aXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAg
ICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTY5MywyNyBA
QCBib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJl
U3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4
dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3Jh
Z2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1
cmU7CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywg
RDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdl
dCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJp
YWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6
OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNh
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwg
bVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQog
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRl
eHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHdpZHRoLCBoZWlnaHQsIGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdl
dFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIApAQCAtMTY5NSw2ICsxNzI1LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9y
YWdlMkQoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEw
LDIwIEBAIEdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQot
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6Omdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1h
dCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBU
ZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXRE
M0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBd
LmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3Jt
YXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9p
ZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIw
NDksMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6
OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4
dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVy
dFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJU
YXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdl
dFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhT
dG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBk
M2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBu
ZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWln
aHQpOwogICAgIG1JbW11dGFibGUgPSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKQEAgLTIwNzQsOCArMjEwNyw4IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAg
ICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9I
QUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0
ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8ICht
TWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjE1Nyw5ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21w
cmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0
SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOworfQorCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0
dXJlKCkgY29uc3QKQEAgLTIxNzMsMTEgKzIyMTEsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQogICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgp
OwogICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9S
TUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJv
b2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmICht
VXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFU
IGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVz
YWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAg
ICB7CkBAIC0yMjE3LDkgKzIyNTUsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCgpCiAgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgp
OwogICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
OworICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxl
dmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1U
ZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTIyMzIsOCArMjI3MSw4IEBAIHZvaWQg
VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkKICAgICAgICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1Rl
eFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMxNSwxMiArMjM1NCwxNCBAQCBSZW5k
ZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCiAKICAg
ICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwogfQogCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7
CkBAIC0yMzMzLDYgKzIzNzQsMzMgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAg
CisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0Rl
cHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKworICAgIHVwZGF0ZVRleHR1cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVh
bGx5IGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbCgwKTsKIH0KIApAQCAtMjM1MywxOCArMjQyMSwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4
dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0
KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1B
VCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVz
YWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNE
VVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0
OCw4IEBAIFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAg
ICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpA
QCAtMjQ1NCwzNSArMjUyOCwzNiBAQCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgp
IGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJl
Q3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVp
Z2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFn
ZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwot
fQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVD
dWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpn
ZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjY1Nyw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9G
TE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkp
KQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjc1NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsK
LSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVy
biBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0CkBAIC0yNjk0LDExICsyNzY5LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNv
bnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNE
Rk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAK
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNk
dXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7
CkBAIC0yNzQyLDkgKzI4MTcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVu
ZGVyVGFyZ2V0KCkKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBd
WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNp
emUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAg
ICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZv
cm1hdCwgc2l6ZSwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAg
aWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjgzNSw4IEBA
IHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogCkBAIC0yOTI5LDEwICszMDA1LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVN
YXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSBzaXplCiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7
CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQs
IHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNh
Z2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRh
cmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVs
cywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwx
MiArMzEyNSwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCkKIAogICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNl
UHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtRmFjZVBy
b3hpZXNbZmFjZV07CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3Vy
ZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsK
ICAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKQEAgLTMwODcsNCAr
MzE2NSw0IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkKICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2
IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAg
ICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2Nr
KEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lk
IHVubG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBE
M0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFz
cyBJbWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2Fk
QWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NF
MihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBs
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZvaWQgbG9hZERYVDFEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERY
VDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZERYVDVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2
ICsxMjcsOSBAQCBjbGFzcyBJbWFnZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAg
ICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJl
Y3QpOworICAgIHZvaWQgdW5sb2NrKCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNp
emVpIG1IZWlnaHQ7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBj
bGFzcyBJbWFnZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxp
Y2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0
dXJlU3RvcmFnZShEV09SRCB1c2FnZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgp
OwogCiAgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7CiAgICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNh
Z2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFy
Z2V0KSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2UpOwogCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAg
IGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAg
ICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBA
QCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdy
YXBUKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0
VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBj
b25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2
IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29u
c3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEp
OyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZh
bHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUg
cmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmU7Ci0KICAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJ
bWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
OwpAQCAtMjU4LDcgKzI1Miw3IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4
dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQo
SURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJE
KGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9v
bCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9S
TUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTJEKCk7CiAKQEAgLTI4NiwxMSArMjgwLDEyIEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJn
ZXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQz
REZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRl
eEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VU
ZXhJbWFnZSgpOwogCkBAIC0zMDksNiArMzAzLDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1Ymxp
YyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpOwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRE
ZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIApAQCAtMzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRl
eHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29t
cGxldGUoKSBjb25zdDsKQEAgLTM0MSw3ICszMzksNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVT
dG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVs
cywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQg
dXNhZ2UsIGludCBzaXplKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgp
OwogCkBAIC0zNjksMTEgKzM2NywxMSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CkBAIC0zOTEsNyArMzg5LDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZQogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzk2LDEw
IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURp
cmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAg
LTQwNiw3ICs0MDcsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdl
dCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCk7CiAKICAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFn
ZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBA
IC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
dmVydGV4Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERh
dGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
VHJhbnNsYXQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNv
bnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJp
YnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5h
Y3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEp
OworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJp
bmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAog
ICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZl
ciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNo
aW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUg
OiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBE
MwogdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlw
ZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBm
b3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdl
bmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0
PEdMdWludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9G
SVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBE
M0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVj
dGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1
c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1h
bGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IGVlOGVjYTkuLjk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VT
aXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNz
ZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUp
CisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMg
ZnJvbSB0YWJsZSAzLjQuCitib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUpCit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KKworICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVN
CisgICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZB
TElEX09QRVJBVElPTgorICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAg
Y2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9S
R0I6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0Xzhf
T0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkp
CisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwog
ICAgIH0KIAotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0
ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlm
IChjb21wcmVzc2VkKQogICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0
aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9
IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVp
Z2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBj
b21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJl
c3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRh
cmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZv
cm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
IH0KKworICAgIGlmIChjb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQg
IT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAg
ICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgMCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5
b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBm
b3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRS
ZWFkRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyAr
MTIyNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xD
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnMKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2
b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENv
cHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTAogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJE
KGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwg
dGV4MmQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQs
IGxldmVsLCBHTF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVy
ZUZvcm1hdCA9IHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1h
dCkKQEAgLTE0MTQsNiArMTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0
NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVy
ZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJl
c3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1
LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgt
PmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBH
TF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4o
dGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQo
dGV4dGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJk
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3Vi
ZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBp
bnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdM
Y2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmli
dXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0
QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRp
b24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElO
S19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKSAhPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQogICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEg6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
IGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZv
cm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAK
ICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9n
cmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAm
YnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5p
Zm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1m
dihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5n
ZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihs
b2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0
MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVu
aWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGlu
dCogcGFyYW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9u
LCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0
MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVj
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8
Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3Jt
YXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8
dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0
LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNl
IEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
QEAgLTUwMzYsNyArNTI1NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAg
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFs
Zm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8v
IGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBA
IC01MDY2LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAor
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAg
aWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiAr
NTY3MCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
QU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAg
ICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUo
Zm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09
IDAgfHwgcGl4ZWxzID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAg
ICAgICB9CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNE
ZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lk
dGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1
ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6
OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFs
c2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1h
dCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYw
MTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJp
dihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYw
LDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU4NTIsNyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01
OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNv
dW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZv
aWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFs
aWRhdGUoKTsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDYzLDYgKzY4MjEs
NzkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0g
cHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9y
bWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1
ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQg
PSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmlu
YXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgs
IGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisg
ICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsK
ICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNv
bnN0IGNoYXIgKgogICAgICAgICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEV9LAogICAgICAgICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFO
R0xFfSwKLSAgICB9OworICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30s
CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKIAogICAgIGZvciAo
aW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lv
bik7IGV4dCsrKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagppbmRleCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIudmNwcm9qCkBAIC00MDEsNiArNDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAKaW5kZXggNjU4OWViMS4uNDQxMDVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwx
NyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJ
c0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQ
VEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGlu
IGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8g
VmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20g
dGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwot
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZv
cm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQp
CiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVu
dW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1J
TkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVO
VDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0K
QEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1
cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9F
WFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdS
QThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Cisg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9V
TlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAg
ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05P
TkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC03NjcsNiArNzQxLDcgQEAgRDNERk9S
TUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2FzZSBHTF9S
R0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZN
VF9BOFI4RzhCODsKQEAgLTk2NSw2ICs5NDAsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNE
Rk9STUFUIHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVw
dGhGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNl
Rm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKworYm9vbCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9S
TUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZN
VF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RN
VUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVf
Tk9OTUFTS0FCTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuaAppbmRleCA4ODIzOGRjLi5lZDE1MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkg
QEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0g
KChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9S
TUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wn
KSkpOworCiBuYW1lc3BhY2UgZ2wKIHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1
dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
YWxpZ25tZW50KQogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgs
IEdMZW51bSBmb3JtYXQpOwogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQo
R0xlbnVtIGZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9v
bCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFs
VGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCk7CiAKQEAgLTc5LDYgKzgyLDggQEAgR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQg
ZGVwdGhGb3JtYXQpOwogR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9y
bWF0KTsKIGJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJv
b2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0
aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTBl
M2U1Yy4uZjczYzUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTQxLDYgKzM5NDEsOSBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0NvbW1vbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlYnVnLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwK
QEAgLTM5NjAsNyArMzk2MywyMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkg
ewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21w
aWxlLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2xlbmd0aF9saW1pdHMuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAorICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRp
b24uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXApAQCAtMzk3NSwx
NCArMzk5MSwxNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmggXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckVTU0wuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMu
aCBcCi0gICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0Lmgg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCkBAIC0z
OTk1LDYgKzQwMTMsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAgXAogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIFwK
QEAgLTQwMTksMTAgKzQwNDEsMTEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEp
IHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcCBcCkBAIC00MDMy
LDcgKzQwNTUsMTkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1
Y3QuYyBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2xleGVyX2dsdWUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmMgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="commit-queue"
          id="155530"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147977</attachid>
            <date>2012-06-16 11:14:32 -0700</date>
            <delta_ts>2012-06-19 11:38:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1055779</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi4yZDg1OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbik7Cit9CisKIHZvaWQgVFBhcnNlQ29udGV4dDo6
d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKSB7CkBAIC0yMjksNiArMjM0
LDExIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICB2
YV9lbmQobWFya2VyKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdh
cm5pbmcobG9jLCByZWFzb24sIHRva2VuLCAiJXMiLCAiIik7Cit9CisKIC8vCiAvLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KIC8vCkBA
IC0yNjUsMTMgKzI3NSwxMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeQogICAgIHN3aXRjaCgg
dHlwZSApewogICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAi
Tm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiJXMiLCAiIiApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAo
aW50KSIsICIiLCAiJXMiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMzIzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
KiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0
ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9u
ZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMzQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQq
IG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM3NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCog
bm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYg
c3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIs
IG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDcgKzQwOCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQx
NCw3ICs0MjQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhw
cmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MzAsNyArNDQwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJv
ckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYg
KGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkg
YWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJv
bmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00NDksMjQgKzQ1OSwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09
IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIp
OwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUg
cmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0
dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUzOSw1MSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVj
dG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVs
bCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNv
bnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUt
PmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBu
b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0
eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVu
b3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBj
b25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2Rl
LT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50
IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NTg1LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs2MTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3
ICs2MjUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMx
LDcgKzY0Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2NTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjU4LDcgKzY3MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAg
ICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYg
CiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVy
cyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNjkwLDE0ICs3MDIsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVF
cnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50
ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUg
YSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcyNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUo
dHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTczMSw3ICs3NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzc5LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3
IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFy
cmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBp
bmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgyOCw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUs
IFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVp
bHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MzUsNyAr
ODQ3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCAqbm9kZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogCiAgICAgICAgIGludCBmcmFnRGF0YVZh
bHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIo
KVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhh
dmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICIlcyIsICJnbF9GcmFnRGF0YSBjYW4gb25s
eSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg4Miw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBt
dXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRp
YWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04OTEsNyArOTAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JD
aGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiVzIiwiIik7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUg
PSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiwxMSArOTE4LDExIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlCiBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2Vk
IG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpLCAiJXMiLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzAsMTIgKzk4MiwxMiBAQCBjb25zdCBURnVu
Y3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBj
YWxsLCBib29sICpidQogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGlu
ZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5h
bWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJv
ciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAyNyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1CiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8KQEAgLTEwMzAsNyArMTA0Miw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0g
aW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24t
bWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTI0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwog
ICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIApAQCAtMTMwMSw3ICsxMzEzLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJt
VHkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzQ1
LDcgKzEzNTcsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1
cm4gMDsKQEAgLTEzODAsNyArMTM5Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQyOCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0
cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBh
bGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAg
ICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4K
ICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBu
b3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ2NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE1MDIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCmluZGV4IDNlMDU3NjMuLmEyYWUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC03Myw5ICs3MywxMyBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgCisgICAgICAgICAg
ICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAg
IHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgNSwgNikpKTsKKyAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgcmVj
b3ZlcigpOwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmluZGV4IGE2MDBjMDIuLjll
ZjRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5o
PgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBA
IC0xNTgsMTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5z
aWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjbwogCiAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRm
KGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQg
MHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1z
ZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
CiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAg
ICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0
ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2cs
IHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2Nh
dGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2Ug
aW4gZ3VhcmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxF
Ul9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFu
ZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJp
bmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rp
b25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rp
b25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0g
bm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBF
T3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQor
ICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5j
dGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBA
IC0yNCw2ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsK
K2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRl
bnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNw
ZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyBy
ZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBjbGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1
cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUq
IHJvb3QpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNj
b3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBz
aGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBt
YW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hh
ZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0
dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFm
ZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNh
biBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNo
YWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAg
ICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAg
IGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBA
QCBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAg
aW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKICAgICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5k
bGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZh
ckluZm8ubmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBu
YW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBl
ZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5
CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxv
dy4KICAgICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1h
eE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZv
Lm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBl
ZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmlu
ZGV4IGVkYmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8v
CiAvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAg
LTU2LDcgKzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5n
bGVkTmFtZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRO
b21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIw
XTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWRO
YW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIK
KworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwg
dGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMu
YmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQor
fQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBU
R3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rp
b25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVu
dCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1G
dW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBu
ZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJ
ZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVy
ICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAq
aXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGlu
dGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2Vy
dChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBj
b2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVp
Y2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgp
KSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9u
KGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOwor
ICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCog
bG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2Jh
Y2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxP
cCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2Fs
T3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7
CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9w
OjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxM
OworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5n
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcw
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIzNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZTsKKworVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vo
b2xkZXIKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVp
bGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQo
bm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAg
c3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5j
dGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihp
bnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdl
IGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFn
Z3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4g
ZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlr
ZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAv
LyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3Vt
ZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGlu
dGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJn
dW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0g
Kml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAg
ICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3Jl
YXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAg
ICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1
bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNh
bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9s
IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQg
c3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlp
ZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBm
dW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMg
dGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25t
ZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0
aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25D
YWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVD
aGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVn
aW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRo
aXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJl
bnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5n
LgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisK
KyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5k
ZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBz
eW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHko
KSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9CisgICAgICAgICZUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9w
KCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKwor
Ym9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1C
aW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmlu
YXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5h
cnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNh
bE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAg
ICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1M
ZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9s
ID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWlu
dGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50
b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVl
IG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAg
ICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBu
b3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAh
PSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1Jp
Z2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRl
cm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMs
IGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBz
eW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50
LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNz
ZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25t
ZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIg
dmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxs
CisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5p
bnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3At
PmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0
VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdy
YXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJt
TG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5
cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVy
bUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmln
aHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rp
b24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0
TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVT
ZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1
ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
VHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJt
RmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBp
bnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1D
b25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29u
ZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25k
aXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBo
TG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAg
IGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGlu
dGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+
Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlz
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9k
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5v
ZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rl
cy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJl
bnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5v
ZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTg0IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVh
dGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0
aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xh
c3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRl
bmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0
ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisgICAgLy8KKyAgICAvLyBG
b3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRp
b25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUu
CisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVh
Y2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5vZGVzLgorICAgIC8vCisg
ICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFN0
YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAg
ICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNl
dCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkg
PyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBu
b2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Cisg
ICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMg
aXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAg
ICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKworICAg
ICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgICAgIG5l
d1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAg
ICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBh
cmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNz
aWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sg
dGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVu
dE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbm9kZVNldHMudG9wKCkt
Pmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAg
ICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGlu
c3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwg
aXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWlu
dGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5t
Tm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5l
cigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRT
dGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlz
IGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBX
aGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBu
b2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2Rl
IHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNzaWdubWVudC4KKyAgICAv
LyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBp
bnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRy
ZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2Nv
cGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
IHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtS
aWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1
c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5bWJvbC4KKyAgICAvLwor
ICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgY2xhc3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1YmxpYyBUR3JhcGhTeW1ib2wgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBUU3VidHJlZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhT
eW1ib2woTlVMTCkge30KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgVFN1YnRyZWVQbGFj
ZWhvbGRlciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVy
IGtSaWdodFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1YnRyZWVQbGFjZWhvbGRlciYgc3VidHJl
ZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJv
bHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0
bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7
CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAg
ICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2sm
IGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOwor
ICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBn
cmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAg
ICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJp
bmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBURGVwZW5k
ZW5jeUdyYXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5
bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZmYzQ4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dElu
ZGVudGF0aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERlcHRoKCk7ICsraSkK
KyAgICAgICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgb3V0cHV0
SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdl
dEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKKyAgICAgICAgICA8PCBwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0
U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAgICAgICAgPDwgc3ltYm9sLT5nZXRJbnRl
cm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJzZWxlY3Rpb25cbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9vcCBjb25kaXRp
b25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsK
KyAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAi
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbVNpbmsgPDwgIlxuIjsKKwor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFw
aE5vZGUqIHN5bWJvbCA9ICppdGVyOworICAgICAgICBtU2luayA8PCAiLS0tIERlcGVuZGVuY3kg
Z3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAg
ICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtU2luayA8PCAiXG4iOworICAg
IH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKyNkZWZpbmUgQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZv
U2lua0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lk
IG91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0
ZToKKyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBt
U2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ODU3NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8g
VGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHRocm91Z2ggdGhlIGdy
YXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3ZvaWQgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhU
cmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQorCit2b2lkIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKworICAgIGdyYXBoVHJh
dmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOworCisgICAgLy8gVmlzaXQgdGhlIHBhcmVudCBub2Rl
J3MgY2hpbGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1EZXBlbmRlbnRO
b2Rlcy5lbmQoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUq
IG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNlci0+aXNWaXNpdGVkKG5v
ZGUpKQorICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0K
KworICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOworfQorCit2b2lkIFRHcmFw
aEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVudCh0aGlzKTsKKyAgICBU
R3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdy
YXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRGdW5jdGlvbkNhbGwodGhp
cyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQor
Cit2b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFNlbGVjdGlvbih0
aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9vcCh0aGlzKTsKKyAgICBU
R3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKaW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBA
IC04LDkgKzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19p
bml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2Zp
bmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3Nj
YW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVy
biBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmlu
ZGV4IDlhMDM5NGIuLjg4ZTdjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRI
RSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogCiAldG9wewogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBAQCBPICAgICAgICAgICBbMC03XQogImV4
dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJu
YWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2Ui
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY3LDcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAidW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAi
aW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRw
dXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEy
ICsxNzUsMjEgQEAgTyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
ZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNCw3IEBAIE8gICAgICAg
ICAgIFswLTddCiAKIDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7
IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQotMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFs
aWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Ciswe0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1
cm4gMDt9CiB7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0
LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQpAQCAtMjU2LDcgKzI2Nyw3IEBAIE8gICAgICAgICAgIFswLTdd
CiAKIFsgXHRcdlxuXGZccl0gICB7ICB9CiA8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRl
ckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KLTwqPi4gICAgICAgICAgICB7IGNvbnRleHQt
Pndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7
IH0KKzwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3du
IGNoYXIiLCB5eXRleHQpOyByZXR1cm4gMDsgfQogCiAlJQogCkBAIC0yNzgsMjAgKzI4OSwyMCBA
QCB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHZvaWQgQ1BQV2FybmluZ1Rv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIp
OwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtNDI3LDcgKzQzOCw3IEBAIHZvaWQg
SGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQog
fQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hh
ciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNy
YzsKQEAgLTUzNSw3ICs1NDYsNyBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIp
IHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5
eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0
cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4
dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVz
ZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVy
biAwOwogfQpAQCAtNTQ0LDkgKzU1NSw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQt
PkFmdGVyRU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1
bmV4cGVjdGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJl
YXNvbiwgInVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIH0KQEAgLTU2OCwxOSArNTc5LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsK
IH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5l
cik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nh
bm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKICAgICAKICAgICAvLyBJbml0
IHByZXByb2Nlc3Nvci4KICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hT
dHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAg
ICAgPSBjb3VudDsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAg
cmV0dXJuIEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQppbmRl
eCBkNmM4ODY5Li5mYTRhZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKQEAgLTg0LDIxICs4NCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZS
QUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAogICAgIH0gIFwKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAg
ICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2YXJpYWJs
ZV9pZGVudGlmaWVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYg
KCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0
ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcmltYXJ5X2V4
cHJlc3Npb24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAg
ICAgICAgLy8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwpAQCAtMjM1LDkgKzIzNSw5IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4
KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9s
Tm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJy
YXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAg
LTMxMCw3ICszMTAsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5
IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXki
LCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAg
LTM1NSw3ICszNTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5v
dCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MDUsMTMgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5
cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJl
IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9y
LCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJl
cXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAk
My5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIGZ1bmN0aW9u
X2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBl
ZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5n
ZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAn
aW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVy
cm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAi
Iik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9
CkBAIC02NDcsNyArNjQ3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVm
YXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVs
bCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29u
c3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0
eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMDcsMTIgQEAg
ZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhh
dmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3Ry
aW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3Zl
cmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmll
clN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dp
dGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1l
dGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICco
dm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
JDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIGZ1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVs
bHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQx
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxs
b3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
ciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZp
ZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5x
dWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4u
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUg
KyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQx
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAn
dm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
JDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBpbml0X2RlY2xhcmF0
b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAg
ICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMjk4
LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQi
LCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIu
c3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0MzgsNyBAQCBzaW5nbGVfZGVjbGFy
YXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhh
dmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2Yg
aXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDUwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90
eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAo
JDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3Vw
cG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZh
bHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY2
Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVD
VCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xNzE5LDcgKzE3MTks
NyBAQCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCok
JClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0u
dHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1
cmU6IiwgInN0cnVjdCIsICIlcyIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk2NiwxNCArMTk2NiwxNCBAQCBmb3JfcmVzdF9z
dGF0ZW1lbnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAg
ICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBp
biBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IEJSRUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBz
dGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEu
bGluZSk7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJO
IFNFTUlDT0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsx
OTg5LDEwIEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5
cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3
ICsyMDM3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAt
MjA0Nyw3ICsyMDQ3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA3
OSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2
YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAg
ICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJu
IHR5cGUgIT0gdm9pZCA/CiAgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHBy
b2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKICAgICAgICAgaWYgKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0
LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAiJXMiLCAkMS5mdW5j
dGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5OS4uZGMxZGYxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCkBAIC0xLDYgKzEsNiBAQAogI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE5MSw2ICsxOTEsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNj
YW5fdDsKIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwog
I2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5l
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQog
I2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjA0LDcgKzIwOSw3IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogICAgICAqLwogICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAg
ICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAg
ICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAtLXl5bGluZW5vO1wKQEAgLTIyNiwxMSArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAKICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJl
ciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJ
ICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9j
aGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQg
c2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXlj
b25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAog
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5
cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMs
OCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2db
XSAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNf
aW5mbwpAQCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2lu
dDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAg
MTM2LCAgMTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAg
ICAgMTM1LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAg
IDkwLAotICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5
LCAgMTIxLCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAg
MTE2LCAgMTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5
LCAgIDk5LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAg
ICAwLCAgICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0
LAotICAgICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMs
Ci0gICAgICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAx
MDQsICAgNTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAg
MCwgICA5NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4Nywg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1
MywgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAg
OSwgICAzMywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICAzNiwKLSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0
MiwgICA0MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA4MywgICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAg
IDgxLCAgIDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1
LCAgIDkwLCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAg
IDkwLAotICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYx
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAg
IDY0LCAgIDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAg
IDkwLCAgIDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDU0LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0
LAotCi0gICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAg
OTAsICAgNDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAK
KyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1
MywgIDE1MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwg
IDEzMCwgIDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0
NSwgIDEzMiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAg
ICAgIDE1MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwg
IDExNiwKKyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEw
NCwgIDEwMCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwg
IDEyNSwgIDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgMTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAw
LCAgICAwLCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAg
IDAsICAxMDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAg
MzQsICAgMzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgNTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgMzYsICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAg
NDIsICAgNDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA4MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwK
KyAgICAgICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5
OCwgICA5OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5Nywg
ICA5OCwgICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2
NiwgICA2MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1Nywg
ICA5OCwgICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwg
ICAzMSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwg
ICA2NywgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2
LCAgIDk2LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDQ2LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAg
IDk4LAorICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4
LCAgIDkxLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAg
IDkzLCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KQEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwg
ICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwg
ICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAy
NCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywK
LSAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MiwgICAzMSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzNSwgICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAg
MSwgICAzOSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAg
IDMxLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYx
LCAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIz
LCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4
LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQs
ICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisg
ICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAs
ICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0
NzgsMjE0IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X21ldGFbNjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAg
NCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
NDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAg
IDAsICA2MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2Mjgs
ICA2MjgsICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAx
NjMsICA1OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2Mjgs
ICA2MjgsICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0g
ICAgICAxMzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQs
ICAxODEsCi0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2
MjgsICA2MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2
MjgsICAgIDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAs
ICA2MjgsICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAg
IDAsICA2MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAg
ICAgIDU2OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwg
IDU1MCwKLSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0
OCwgICAgMCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwg
IDUyOSwgIDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5
MiwgIDUzMCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywg
IDUyOSwgIDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAg
MCwgIDMyMiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAg
IDUxNCwgIDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUy
MCwKLSAgICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwg
IDUxMSwgIDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUw
MSwgIDUwNCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4Niwg
IDQ4MywgIDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAg
NDcyLCAgNDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0
LCAgNDY5LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAg
MzcyLCAgMzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0
LAotICAgICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAg
NDYzLCAgNDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1
LCAgNDQ0LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2
LCAgNDQwLCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAg
ICAwLCAgNDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAw
LCAgNDE4LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAg
IDAsICAgIDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUs
ICA0MTgsICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0
MTMsICA0MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAs
ICAzODksICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0g
ICAgICAzODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAz
ODUsICAzODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAs
ICAgIDAsICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAz
NjQsICAgIDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgs
ICAgIDAsICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAg
ICAgIDIzOCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4Niwg
IDE3MywKLSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQx
OSwgIDQyMywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAg
NjgwLCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgx
LCAgNjUzLCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAg
NjUxLCAgNjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgx
LCAgMTI4LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAg
MTczLCAgMTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0
LAorICAgICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjgxLCAgNjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAg
ICAwLCAgNjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAg
NjgxLCAgNjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2
MjEsICA2MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIs
CisgICAgICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAg
IDAsICAyMTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIs
ICA1OTYsICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1
NzcsICA1ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1Njks
ICA1ODEsICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAg
IDAsICAzNDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAs
ICA1NjYsICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisg
ICAgICA1NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUs
ICAgIDAsCisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1
MzksICA1NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYs
ICA1MzcsICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywg
IDUzNywgIDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUy
OSwgIDI4MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywg
IDM4MSwgIDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAg
ICAgIDUwOCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwg
IDUwMywKKyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUw
MCwgIDM2NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUw
MCwgIDQ5NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwg
IDQ4MCwgIDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4
MywgIDQ4MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAg
IDQ4MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2
NiwKKworICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAg
ICAwLCAgICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYw
LCAgNDY1LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAg
NDYxLCAgNDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAw
LCAgNDQ2LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAg
NDQ5LCAgICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAw
LAorICAgICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIw
LCAgNDMyLCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAg
NDI3LCAgNDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIz
LCAgNDIyLCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAs
ICA0MzEsICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQs
CisgICAgICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAz
OTEsICAzODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcs
ICAzMDQsICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAy
NjIsICAgIDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTks
ICAxMTMsICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAx
NjEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0g
ICAgICA0MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAg
NDU4LCAgICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NTgsICA0NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAg
IDAsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAs
ICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAg
MTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAg
ICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAg
MzAsCi0gICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAg
NDIsICAgMzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAg
NTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEs
ICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAg
MjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAs
CisgICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAg
MzMsICAgMzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEs
ICAgNDIsICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAg
NDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQs
ICAgNTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAg
OTEsICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAg
ICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
ICAgIDgsCiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAg
ICAgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA5MywKLSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEy
MCwgICA2OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwg
ICA3NywgICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4Mywg
ICA4NSwgICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQy
NCwgICA4MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAg
ICAgMTAzLCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAg
MTA1LAotICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5
LCAgNDIyLCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAg
MTM4LCAgMTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5
LCAgMTg0LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAg
NDE4LCAgMTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0
LCAgIDc0LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAg
MjMwLCAgNDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAg
MjgyLCAgNDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAg
NDEyLCAgMTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAs
ICAgNzgsICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAy
MTEsICAzMDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEs
Ci0gICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcs
ICAyMjEsICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTQsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0g
ICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYs
ICAzMTcsCi0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwg
IDM5NSwgIDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1
OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1Miwg
IDM4OSwgIDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4
MywgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwg
IDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAg
ICAgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1Nywg
IDM1NiwKLSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwg
IDMzOSwgIDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywg
IDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAg
MzExLCAgMzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAg
ICAgMjkzLCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAg
Mjc4LAotICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4
LCAgMjY3LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAg
MjU5LCAgMjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAg
MjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMx
LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAg
MjE0LCAgMjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAx
LAotICAgICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAg
MTkyLCAgMTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3
LCAgMTc2LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAx
NjAsICAxNTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUs
ICAgODksICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAg
IDkzLCAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIw
LCAgIDY4LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAor
ICAgICAgIDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5
LCAgIDgwLAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3
LCAgMTQzLCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQs
ICAxMDIsICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAx
MTYsICAxMTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcs
ICAxNDksICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisg
ICAgICAxMzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAs
ICAxOTIsCisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAx
OTMsICA0NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0
NTIsICAxODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODks
ICAxNTUsICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAy
ODYsICAyODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1Niwg
ICA4MSwgIDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgICA4MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0
NiwgIDIyMiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAg
IDIyMywgIDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwg
IDQ0MiwgIDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwg
IDQzOCwgIDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAg
NDA1LCAgNDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5
LCAgNDI4LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDU4LCAgIDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUz
LCAgNDI0LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAg
NDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAx
LCAgNDAwLCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAor
ICAgICAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzgyLAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAz
NjYsICAzNjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgs
ICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAz
NDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEs
ICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisg
ICAgICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksCisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAz
MDUsICAzMDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEs
ICAyOTAsICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAy
NzcsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjks
ICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAy
NTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAg
ICAgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwg
IDIzOSwKKyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIy
OSwgIDIyOCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywg
IDIxMiwgIDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIw
MiwgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwg
IDE5MSwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3
NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAg
IDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
MCwKKyAgICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwg
ICA2NCwgIDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAg
MTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4
Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9
CiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAg
MzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUs
ICAgMzUsICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0g
ICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMs
ICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAg
NDEsICA0MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYs
ICAgNTUsICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwg
ICAzNywgICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0
OSwgICAzOSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwg
IDQyMCwgICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAg
ICAgIDEzNSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwg
IDEyMCwKLSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3
NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5
MiwgIDE5MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3
OCwgIDQxMCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAg
ICA4MCwgIDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEy
MiwKLQotICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0
LCAgMjM0LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4
LCAgMTUxLCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUz
LCAgIDgzLCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAg
MzkzLCAgMTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1
LAotICAgICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMjE5LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEs
ICAzOTEsICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAz
NzYsICAzNzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAz
NjksICAzNjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAz
NDIsICAzNDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAz
MjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUs
ICAyOTQsICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0g
ICAgICAyNzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUs
ICAyNjQsCi0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTAsICAyNDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIz
OCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwg
IDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIw
OSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwg
IDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAg
ICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4Miwg
IDE4MSwKLSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3
MiwgIDE3MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2Mywg
IDE2MiwgIDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEz
OCwgIDEzNywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDEx
NywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAg
ICAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAg
IDk5LAotICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUz
LCAgIDQ4LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAg
ICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwKKyAgICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwg
ICAxNywgICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAz
MywgICA0MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwg
ICA1MSwgIDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAg
NDUzLCAgIDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2
LAorICAgICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAg
IDM5LCAgIDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5
LCAgIDUwLCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAg
IDQ3LCAgIDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5
LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4
LCAgIDc4LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAor
ICAgICAgMTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0
LCAgIDc0LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAg
IDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4
LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzks
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAg
ODAsICAgODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjks
ICA0NDMsCisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0Mzks
ICA0MzgsICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAyNDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUs
ICA0MzQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAx
NTUsICAyNDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsCisKKyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1
NSwgIDI1NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywg
IDQyNiwgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4
OCwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAg
IDQ2MiwgIDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQw
NCwKKyAgICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5Miwg
IDM4OSwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3
NywgIDM3NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2Miwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0
OSwgIDM0OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAg
MzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAx
LAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAg
MjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcy
LCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAg
MjYzLCAgMjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4
LCAgMjQ0LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAg
MjMyLCAgMjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2
LCAgMjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAor
ICAgICAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAx
NzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAs
ICAxNjksICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAx
NDUsICAxNDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYs
ICAxMzQsICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisg
ICAgICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsCisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAx
MDQsICAxMDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAg
NDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29s
ZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwg
MCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAg
ICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhp
bmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJF
SkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC04MjEsOCArODQyLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVG
RkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwog
ICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxl
bmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7
CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3Rh
cnQ7CkBAIC04NzUsNyArODk2LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVf
dCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDcsMTMgQEAgeXlfbWF0Y2g6
CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQy
NiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOwor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDIsMjUyIEBAIFlZX1JVTEVfU0VUVVAK
IAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQ
CiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6Citj
YXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2Ug
MTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAx
OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0
YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwg
eXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2Ug
OTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6
CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0
PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgor
Y2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2Fz
ZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5
OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2Fz
ZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
RVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6
CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNl
IDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5U
eXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJu
KExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxF
X1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJF
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1
cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2Fz
ZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFS
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2Ug
MTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xF
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgor
Y2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsg
CiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU1LDEyIEBAIFlZX1JVTEVfU0VU
VVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoK
K2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBy
dWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRj
aCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc2
OSwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJ
RUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9
Cit7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQpOyBy
ZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRV
UAogRUNITzsKIAlZWV9CUkVBSwpAQCAtMTkwOSw3ICsxOTYyLDcgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCWVsc2UKIAkJewotCQkJaW50
IG51bV90b19yZWFkID0KKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CiAJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCiAJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCkBAIC0xOTIzLDcgKzE5NzYsNyBAQCBzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJ
CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OwpAQCAtMTk1NCw3ICsyMDA3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8K
IAkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVy
X3RvX21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsK
KwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAogCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CiAJCX0KQEAgLTIwMTYsNyAr
MjA2OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2
ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIw
NDUsMTEgKzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChp
bnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJy
ZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRf
c3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cjsKIAkJCSsreXlnLT55eV9jX2J1Zl9wOwogCiAJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKQEAgLTIxMDMsNyArMjE1Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgogCQkJCQl7CiAJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJl
dHVybiBFT0Y7CisJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQogCQkJCQkJWVlfTkVXX0ZJTEU7CkBAIC0yMzY2LDcgKzI0MTks
NyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogICovCiBz
dGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxNywxMSBAQCBZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVm
OwotCXl5X3NpemVfdCBuOwotCWludCBpOworCXl5X3NpemVfdCBuLCBpOwogICAgIAogCS8qIEdl
dCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVP
QidzLiAqLwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjYxOSw3ICsyNjcxLDcgQEAgRklM
RSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCiAgKi8KLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreXlfc2l6ZV90
IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7
CkBAIC0yOTEyLDIwICsyOTY0LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC0zMDYxLDcgKzMxMTMsNyBAQCB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5z
LCBpbnQgbnVtVG9rZW5zKQogICAgIH0KIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcp
Cit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMTY5LDcgKzMyMjEsNyBAQCBpbnQgY2hl
Y2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5
bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXll
eHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzE3OCw5ICszMjMwLDkgQEAg
dm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikg
ewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRl
eHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0
KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzIwMiwxOSArMzI1NCwx
NSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
eXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVP
RiA9IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMg
PSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAg
ID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJM
ZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2Nh
bkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAs
IGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLjA5MmEz
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmNwcApAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwyMSBAQCBleHRlcm4gdm9pZCB5eWVy
cm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5l
IEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAog
ICAgIH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
ICAgICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZy
YWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OyAgXAogICAgIH0gIFwKIH0KQEAgLTIxNTcsNyArMjE1Nyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CkBAIC0yMTY2LDcgKzIxNjYsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBj
YW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMjAxLDcgKzIy
MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25z
dGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwpAQCAtMjI0Nyw5ICsyMjQ3LDkgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTIzMzAsNyArMjMz
MCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAi
Iik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQyNSwxMyArMjQyNSwxMyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQg
aW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQg
c2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmll
bGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVm
dCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUg
Y2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJv
ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjU4Niw3ICsyNTg2LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTc6CiAKICAgICB7Ci0g
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1l
dGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9y
dGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICA7fQpAQCAtMjY5Nyw3ICsy
Njk3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0zMTkxLDEyICszMTkxLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjUzLDcgKzMyNTMsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZp
cnN0IGlzIHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBl
eGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQg
dHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
LnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCB5eXJl
ZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBm
dW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVk
IGFzIHdlbGwuLi4KQEAgLTMyODksNyArMzI4OSw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZykpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQg
JiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBh
cyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzUzOCw3ICsz
NTM4LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgOTg6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBl
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSk7CkBAIC0zNjE2LDcgKzM2MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MzUsNyArMzYzNSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtMzY0NiwxOSArMzY0NiwxOSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAgKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
OwpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0
ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtMzk2MCw3ICszOTYw
LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNF
eHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJl
Y3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpLT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0g
KCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5h
bWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBp
biBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVM
aXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0Iiwg
IiVzIiwgKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRG
aWVsZE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjEsNyArNDQyMSw3
IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wQ29udGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDMyLDcgKzQ0
MzIsNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwpAQCAtNDQ0NCw3ICs0NDQ0LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDQ1NiwxMCArNDQ1NiwxMCBAQCB5eXJlZHVjZToKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVu
Y3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5u
b3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
KSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxp
bmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDUx
Nyw3ICs0NTE3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDU1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTg5LDcgKzQ1ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8/PyBD
aGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lk
ID8KICAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBv
biBpbnRlcm1lZGlhdGUgY29kZQogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICIlcyIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCA1
NDQxNTU3Li40MDQxYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2
b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
VXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGlt
aXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyBy
ZXR1cm4gb3B0aW1pemU7IH0KQEAgLTUzMyw2ICs1MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9M
ZWZ0KSwKICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZl
cnNlcigpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KSB7fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4zOTE1OGQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAg
ICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07
CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAs
IDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRh
YmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5k
SGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAgIGlm
IChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsK
ICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRm
KHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29s
bGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBj
b2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFY
X0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisg
ICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlk
ZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRh
YmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBA
IC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
KQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5l
eHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAm
YXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVk
LCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFi
bGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dN
c2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05T
OyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291
bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFi
bGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAg
LTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQot
CQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJCWRl
ZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICog
eXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNo
YXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1
cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUgKGFs
bFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1lc3Nh
Z2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7
CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9IGVs
c2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAgICAg
dG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7
CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20p
IHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxvYyBs
b2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9T
eW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNyb1N5
bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFsID0g
ezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAgICBtYWNyby5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2YWwuc2NfaW50ID0gdmFs
dWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBzbnBy
aW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUp
OwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7CiAg
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwogICAgIHN5bWJvbCA9IEFk
ZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4
OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQog
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7CiAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNwcmlu
dGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
IHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAi
JWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RB
TlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChhdG9tID09
IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVt
YmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFs
cHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAg
ICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvCiB2b2lkICBDUFBXYXJu
aW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2Vz
IGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1U
b2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3Ry
aW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5n
Lgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBh
bGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciop
OyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGlj
ayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3Qg
Y2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQg
bGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2OSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBwOjpE
aWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0aWNz
KiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJvb2wg
Q29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXlsdmFs
cHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
IHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4KElu
cHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVyKiBz
cmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6
VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNoICh0
b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRlIHNy
Yy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBmcmVl
KHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0gRU9G
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAgICAg
ICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9JREVO
VElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgor
ICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUuY19z
dHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENvcHlT
eW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9GTE9B
VENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5DOgor
ICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9P
UDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAgICBy
ZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJldCA9
IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6
CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0FE
RF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJfQVNT
SUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxfQVNT
SUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjoK
KyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lHTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJR047
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5lKTsK
KyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhlciA9
IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7CisgICAg
ICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
SW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0
U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7Cisg
ICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+
ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKworICAg
IHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklucHV0
U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2RlZmlu
ZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVt
b3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQ
b29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTljYzQz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGlj
IGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAg
ICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSBy
ZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVu
ZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1MZXhl
cihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0K
LQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1ib29s
IENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8vIFRP
RE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBub3Qg
bmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0K
LWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQp
Ci17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1
dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1
aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3VjY2Vz
cyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJu
IHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2Nh
dGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotewot
ICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBwYXJh
bWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChuYW1l
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQotICAg
IHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qg
c3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAgewot
ICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0K
LQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0KCkK
LXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVs
ZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7
Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lkIENv
bnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZh
bHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZh
bHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5ldyBz
dGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
ID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVdID0g
bmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRl
ICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJs
aWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQoKTsK
LSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0
KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJlYWRJ
bnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0KCkg
eyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46Okxv
Y2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAg
ICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5lTWFj
cm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQoY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1h
Y3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIo
KTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1hY3Jv
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2UoKTsK
LQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlucHV0
OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBE
ZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0
PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9
CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEg
Y291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsK
K30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkK
K3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAg
ICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQg
PCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAsMCAr
MSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19I
XworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJj
ZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNz
YWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcg
YW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1Ymxp
YzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5U
RVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURfQ0hB
UkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwK
KyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9C
RUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZF
LAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAg
VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisgICAg
dmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAgICBX
QVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVy
KCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNU
SVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2
ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50
cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFz
c2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlh
dGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAgdmly
dHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9y
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2Yg
Zm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdt
YShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVD
VElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRl
ICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlm
Iik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5h
bWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2Vy
dmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4
ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tl
bikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgICAg
IG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxl
eGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0
b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAg
IG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAg
ICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcjJykg
cGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdcbicp
OworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAg
ICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgICAg
IHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFyc2VJ
Zm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQor
ICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAg
ICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24odG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24p
CisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9rZW4p
OworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAgd2hp
bGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
PT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVP
Rl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVm
aW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVS
ZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3Jv
OworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRv
a2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAg
ICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFj
cm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAodG9r
ZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
eworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5l
Y2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxz
byBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBh
cmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwor
ICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJl
ZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYm
ICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5p
bnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2Vu
LT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgbU1h
Y3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBU
T0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVy
KTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNy
b1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25QYXJz
ZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgo
dG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lvblBh
cnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBUT0RP
KGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBs
ZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVu
dCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUu
CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihU
b2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBh
c3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKworICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVF
cnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFn
bWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJB
R01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAg
ICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAg
ICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFH
TUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUu
CisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+
IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24s
IG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9O
QU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAg
IGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAg
IGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlk
ICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
aWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JF
SEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lP
Tl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVS
U0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYg
KHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRp
b24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2Vu
KiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2Vy
dCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIgbWFj
cm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1h
Y3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNz
IERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsK
KworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJl
Y3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKwor
ICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJz
ZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZk
ZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Cisg
ICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9r
ZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9T
ZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVy
KiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmY4Mzk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApAQCAtMCwwICsxLDE5MTUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdO
VSBCaXNvbiAyLjQuMi4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNv
bidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k
YXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl
LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor
LyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0
aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9u
IGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2Us
IHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9y
IHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMg
YSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIg
b3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1
c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMg
dG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3
aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNl
cHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZl
cnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3
cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2lu
YWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVm
aW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJp
bmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBs
b2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBi
eSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMg
d2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1i
b2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJl
bG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNP
TiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
NC4yIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5
YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1
c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICov
CisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZ
TFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBu
YW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4
ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2RlZmlu
ZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIK
KyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAg
IHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2lu
Y2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3Bh
Y2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
OworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQq
IHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KGludCog
bHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAg
Ki8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5h
YmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NF
CisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNl
bHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRo
ZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9L
RU5fVEFCTEUgMAorI2VuZGlmCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZ
UEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBz
eW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cg
YWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQ09OU1RfSU5UID0g
MjU4LAorICAgICBPUF9PUiA9IDI1OSwKKyAgICAgT1BfQU5EID0gMjYwLAorICAgICBPUF9ORSA9
IDI2MSwKKyAgICAgT1BfRVEgPSAyNjIsCisgICAgIE9QX0dFID0gMjYzLAorICAgICBPUF9MRSA9
IDI2NCwKKyAgICAgT1BfUklHSFQgPSAyNjUsCisgICAgIE9QX0xFRlQgPSAyNjYsCisgICAgIFVO
QVJZID0gMjY3CisgICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYg
ISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRl
ZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNM
QVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7
CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisj
aWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBj
aGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0
eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWlu
dDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2
IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZp
bmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90
CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRp
ZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZ
XworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJM
RV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUi
LCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8o
bXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlh
YmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVm
aW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBk
ZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlv
biwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAg
Ki8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IHl5
aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKKyNlbmRpZgor
eworICByZXR1cm4geXlpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8
fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxs
b2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tf
VVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18K
KyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVm
aW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZF
UgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
IyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMg
ICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMg
aWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3
YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICov
OyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAg
ICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJv
dHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFs
bCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxv
Y2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIK
KyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBz
dGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8q
IHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZ
U1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBp
Zm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9D
IHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5l
ZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0gg
MQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZ
TUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxs
b2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVu
ZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQor
IyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlm
CisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisK
KworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1
c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19U
UklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBz
dGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19h
bGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQor
CisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9i
amVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAg
IG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAor
ICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJv
bSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAg
ICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlp
ID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5
aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5k
aWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcg
b25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZl
IHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5k
IFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2Ug
WVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3Rh
Y2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJ
CVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdi
eXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXpl
KTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMg
PSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwK
Kwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJ
CQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0g
U3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklO
QUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUg
WVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
KyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxl
cy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0
YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgp
IC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVm
aW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlU
UkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRP
SyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxF
WF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYs
ICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQ
UkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIg
WVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1td
ID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1
LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAg
IDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUs
ICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBg
LTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAg
ICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5
LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjks
CisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAg
MjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwg
ICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlS
TElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5l
ZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAg
MCwgICAgNzQsICAgIDc0LCAgICA4MSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEsICAgIDk0
LCAgICA5NywKKyAgICAgMTAwLCAgIDEwMywgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTUsICAg
MTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LAorICAgICAxNDAsICAgMTUzLCAgIDE1NiwgICAxNTks
ICAgMTYyLCAgIDE2NSwgICAxNjgKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJP
Ul9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3Ry
aW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5h
bHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRp
YyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIk
dW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAgIide
JyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwgIic+JyIsICJPUF9HRSIsICJPUF9M
RSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicrJyIsICInLSciLCAiJyonIiwgIicvJyIs
ICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIsICInKCciLCAiJyknIiwgIiRhY2NlcHQi
LCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5U
CisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAy
NTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwg
ICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAor
ICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307Cisj
IGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1
bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQor
eworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywK
KyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVs
ZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vz
bid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVm
YXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0
W10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwg
ICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIs
ICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsK
KworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFD
VFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmlu
ZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEs
ICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAg
ICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEw
LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEs
CisgICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAg
LTIKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBz
dGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBu
ZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRl
LiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBz
eW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAg
IDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAg
ICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVj
a1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
Cit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0
aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcs
ICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVz
ID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVN
UFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFj
Y2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJP
UgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5
ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJh
bnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2Ug
R0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93
ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQg
aXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3
aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVm
aW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMg
aXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1
bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5n
LCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZv
ciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3
YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09WRVJJ
TkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJ
CQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEp
CQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAg
ICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRF
ICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3Rv
IHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fu
bm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlc
Cit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJS
Q09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZy
b20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0
aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhT
WzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChS
aHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAo
TikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
Kwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywg
MSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChS
aHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhT
TE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZ
WVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJ
CQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJl
bnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJ
CQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0J
CVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlc
CisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQg
LS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBu
b3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29u
J3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cu
ICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJ
XAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAg
IChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYK
KworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRz
LiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNv
bnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwor
I2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZw
cmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJ
CQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJ
ICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkp
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGlu
dCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRl
eHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47Cisg
IFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXAp
OworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0eXBl
KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAq
eXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFt
ZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAo
IiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiki
KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0
ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9p
bnQxNiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRv
bSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYg
Knl5dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Cisg
IGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQg
eXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90
KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlf
U1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVi
dWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8g
YmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUs
IENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAo
eXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXly
dWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5
cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJs
aW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVs
ZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4i
KTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJ
CQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1
bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBw
cmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBt
dWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyog
IVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19Q
UklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlm
IC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRo
ZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJ
TklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhl
IHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBz
dGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZh
bHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19B
TExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3
aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVm
IFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNp
ZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19H
TElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgor
IyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4g
KGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5
c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVu
OworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVl
OworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0
cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVm
aW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8q
IENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1p
bmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwg
Y29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVz
dCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2Vu
ZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7
CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisK
KyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRu
YW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlw
cGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0
IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRv
dWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlu
cyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJh
Y2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlS
RVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBv
ZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpF
X1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAo
Knl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hh
ciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXAp
CisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3Ry
aXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkg
ICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICov
CisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7
CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJl
cykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAg
ICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJl
dHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3Ry
KSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3Ig
bWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0
YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNs
dWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRv
IG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0
aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYg
YW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZ
WVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0
aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0
LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAg
cmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUg
KHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1l
W3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0g
eyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAq
eXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisj
IGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxl
IGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNv
bnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBl
Y3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9y
W10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAor
CQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NF
X0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAg
ICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZ
WVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZ
Q0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisg
ICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAg
Ki8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5
eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsK
KyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlw
ZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKwor
ICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXlj
aGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlm
ICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5
eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5l
eHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNv
dW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5
eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5
eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5
ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5
Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAg
eXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4g
WVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBz
cHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAg
ICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgor
CSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAg
Ki8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAo
KCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYm
IHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1l
cnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UK
KwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1
cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVs
ZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAor
eXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFs
dWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRleHQp
OworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xf
UFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNo
ICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKwor
LyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKyNpZmRl
ZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFy
c2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNv
bnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBB
UlNFX1BBUkFNICovCisKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50
Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5k
aWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgor
I2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisv
KiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQ
RSB5eWx2YWw7CisKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwor
ICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAg
ICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8g
c2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFy
YXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0
aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5
dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOwor
ICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3Rh
Y2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5
dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwor
ICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47Cisg
IC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0
aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7
CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9m
IHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91
bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXRva2VuID0gMDsKKyAg
eXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5
eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFy
ID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0
aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2
ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZl
ciBpbml0aWFsaXplZC4gICovCisgIHl5c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisg
IGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBz
dGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6
CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9j
YXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBz
dGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0
ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8
PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRo
ZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9
IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2
ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgor
CSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8K
KwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYg
Knl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0
aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5
b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKwor
CXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92
ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVz
dGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0
ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5
eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5
cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5p
b24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkp
OworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9D
QVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5
eXZzKTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJ
ICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5
eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5
eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJT
dGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBz
dGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNr
dXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUg
cHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
CisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0
byBsb29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5
eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3du
ID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8K
KworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFy
ID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAg
eXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93
IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRv
a2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0
IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElm
IHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBv
ciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4g
Kz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXlu
XSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07
CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZ
VEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdv
dG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVy
cm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYg
KHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2th
aGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICov
CisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5
eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBk
byB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAg
ICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51
bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsK
KworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZv
bGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBp
cyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9u
IGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUg
cGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0
aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNw
WzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikK
KyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1
bHQpID0gKHl5dnNwWygxKSAtICgxKV0pOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYm
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09
IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZz
cFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIw
OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAo
eXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMildKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisKKworICAgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAm
eXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKwor
ICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUg
d2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3Bw
ZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisg
IHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNd
ICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5
Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVd
OworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisg
IGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFs
cmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisg
IGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJP
Ul9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsK
KyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5
c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9j
IDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0g
MiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19N
QVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7
CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVs
c2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9m
IHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8
PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywg
eXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQor
CWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7
CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAg
fQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykK
KyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2Fo
ZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYg
KHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2Yg
aW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9Cisg
ICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAg
ICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0K
KyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0
ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxhYjE7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhl
IHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVy
cm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICovCisg
IGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
CisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4g
PSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0gKnl5c3Nw
OworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21tb24g
Y29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVy
cmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAgeXluICs9
IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAg
ICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9wIHRo
ZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4u
ICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAgICB5eWRl
c3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNv
bnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5c3NwOwor
ICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgKisreXl2c3Ag
PSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1C
T0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5
c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhl
cmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2Vw
dGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMg
aGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0
bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVmaW5lZCh5
eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4
aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0
LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZ
KQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkg
eXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JU
IG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5
eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVy
ZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2Vu
ZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2Vk
LiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXlsZXgo
aW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAg
ICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAq
bHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNU
X0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlw
ZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBP
UF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2Ug
J3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVh
azsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0
eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAg
ICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0g
JysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNh
c2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBi
cmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34n
OiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsK
KyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3Vy
cmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxl
eCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsK
KworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0
aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRv
a2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNv
bnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1M
ZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSBy
ZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0
KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmQwNTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFS
U0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERp
YWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Np
b25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVy
LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9r
ZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlh
Z25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yZTg0Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55CkBAIC0wLDAgKzEsMjYxIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250
YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9u
LgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4
cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUg
aXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKwor
I2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lv
blBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisj
aW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9rZW4q
IHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorJX0KKworJWRl
ZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29udGV4dCAq
Y29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0aWMgaW50
IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJv
cihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0KKworJXRva2VuIENP
TlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wnCislbGVmdCAnXicK
KyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicgT1BfTEUgT1BfR0UK
KyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUn
CislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAgICAg
ICAqKGNvbnRleHQtPnJlc3VsdCkgPSAkMTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOwor
CitleHByZXNzaW9uCisgICAgOiBDT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBe
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9Q
X0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAo
JDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7Cisg
ICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAk
MSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lv
biB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29u
dGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pF
Uk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNz
aW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8
ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0K
KyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOwor
ICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAt
ICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAg
JCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQk
ID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0g
Y29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBhdG9pKHRva2VuLT52
YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hU
OiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6
IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVh
azsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0
eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAg
ICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0g
Jy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNh
c2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBi
cmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEn
OiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsK
KyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBl
ID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8g
QWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisg
ICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1
cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6
RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykg
OgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorewor
fQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1
bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBt
RGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRv
a2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9
IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2Ug
MDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVk
ZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBt
Q291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5n
dGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtF
cnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6
IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAg
c3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1
dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsK
LSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291
bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAg
aW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hf
YmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWlu
dCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNo
YXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3Rh
cnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBp
cyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKCht
SW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFk
ID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8
IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYg
KGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJs
b2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9G
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0
ZSkKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExv
Yy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExv
Yy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExv
Yy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFj
aGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5k
ZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAn
LycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAg
ICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAg
ICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3Rh
dGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3Rh
dGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09
ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsr
XSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAg
ICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9
PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFy
ZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAr
K21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAg
ICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hh
cigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3Ry
ID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8g
U3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgot
ICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciBy
ZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYg
KCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVu
Z3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJp
bmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAg
ICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUlu
ZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAg
ICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNp
emUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRT
dHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAw
OwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkg
JiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0
eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0
IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVu
Z3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAm
JiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGgg
PyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAot
Ly8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8g
U3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNs
YXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAg
ICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JV
bmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1F
cnJvcjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRl
eDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBl
b2YoKSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAg
ICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2lu
ZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3Ro
W2luZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8g
YnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAg
Ly8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25s
eSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBv
cnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1
bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNp
emUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgot
ICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0
ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9j
a0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4Owor
ICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7
Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRo
ZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUg
Y3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmlu
ZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5Lgot
ICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVl
IGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBp
bmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAg
ICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRM
b2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAg
Y29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0g
ICAgLy8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXgg
b2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8g
U2l6ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxl
bmd0aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJv
cjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3Bw
CkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZp
cnR1YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAw
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5
Ni4uYjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwx
NyBAQAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2lu
Y2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAog
ewogCi1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAg
IFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1O
YW1lKG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFj
ZW1lbnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3Jv
OjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsK
LQotICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBh
cmFtZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAg
ICBkZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0g
ICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBs
YWNlbWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRz
OwotICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAg
KG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIu
cGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNl
bWVudHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5o
CmluZGV4IGUyNDMzMDYuLjYzYjMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDMyIEBA
CiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJp
bmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LSNpbmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0
cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUK
ICAgICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OwogCi0g
ICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhU
eXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5W
ZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7
Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsg
fQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5h
bWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJu
IG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3Ry
aW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0
b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBj
b25zdDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJhbWV0ZXJzOworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiBy
ZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1hY3Jv
PiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEzZjY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwyOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitN
YWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAor
ICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQor
eworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgLy8g
VE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBtTGV4ZXItPmxleCh0b2tlbik7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlOWVlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVy
IDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBs
ZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisg
ICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgTGV4ZXIqIG1M
ZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjEyY2ZhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwyOSBAQAogCiAjaW5jbHVk
ZSAiUHJlcHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRp
bHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotUHJlcHJvY2Vz
c29yOjpQcmVwcm9jZXNzb3IoKSA6IG1Db250ZXh0KE5VTEwpCitQcmVwcm9jZXNzb3I6OlByZXBy
b2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXpl
cihkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZVBhcnNlcigmbVRva2VuaXplciwgJm1NYWNy
b1NldCwgZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgIG1NYWNyb0V4cGFuZGVy
KCZtRGlyZWN0aXZlUGFyc2VyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcykKIHsKIH0KIAotUHJl
cHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0KGludCBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQogewotICAgIGRl
bGV0ZSBtQ29udGV4dDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1D
b250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Ci19Ci0K
LWJvb2wgUHJlcHJvY2Vzc29yOjpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAm
JiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBO
VUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzZXQoKTsKLQotICAgIHJldHVy
biBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAg
ICByZXR1cm4gbVRva2VuaXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKLXZv
aWQgUHJlcHJvY2Vzc29yOjpyZXNldCgpCit2b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0
b2tlbikKIHsKLSAgICBzdGQ6OmZvcl9lYWNoKG1Ub2tlbnMuYmVnaW4oKSwgbVRva2Vucy5lbmQo
KSwgRGVsZXRlKCkpOwotICAgIG1Ub2tlbnMuY2xlYXIoKTsKKyAgICBtTWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmgKaW5kZXggODg1YmI3MC4uZGRiZTEyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKQEAgLTcsMzQgKzcsNDIgQEAKICNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5j
bHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0OworY2xhc3MgRGlh
Z25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IK
IHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOwotICAgIH5QcmVwcm9jZXNzb3IoKTsK
KyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50
OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5n
dGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJz
IHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5n
IGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3Vt
ZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90
aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBh
IHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Yg
c3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250
YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2
YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBu
dWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBib29sIHByb2Nlc3MoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
LSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5iZWdpbigp
OyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmVuZCgp
OyB9CisgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOworICAgIFBQX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwogCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQg
c3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAg
VG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91dHB1dC4KKyAgICBNYWNyb1NldCBtTWFjcm9TZXQ7
CisgICAgVG9rZW5pemVyIG1Ub2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIG1EaXJlY3Rp
dmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtTWFjcm9FeHBhbmRlcjsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmls
ZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmls
ZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxl
KSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBp
bnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRp
b24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVx
dWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMu
ZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKaW5kZXggYTJlNzU5Yy4uODkzZDA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcApAQCAtNiw1MCArNiw0OCBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2
OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8
PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46Okxv
Y2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRv
a2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8
IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0g
MDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsK
IH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUs
IGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAg
IGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3Mp
ICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAg
ICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxv
Y2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxv
Y2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0
ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sK
KyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAg
IGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOwogfQogCiBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikK
IHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9DT05T
VEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJRVI6
Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBlKCkp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgp
KQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAgIHJl
dHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi4wMmZkMGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsODMgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9I
XwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVj
dG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3VyY2VM
b2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tl
bgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGljIExv
Y2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGljIHZv
aWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7Cisg
ICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAgIC8v
IFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24s
IGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAgICBJ
REVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9Cisg
ICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisgICAg
ICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAg
IE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAor
ICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAg
IE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9B
U1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisg
ICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAg
IE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FT
U0lHTgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0Zf
TElORSAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFID0gMSA8PCAxCisgICAg
fTsKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpz
dHJpbmcqIG1WYWx1ZTsKKyAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBs
aW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBi
b29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9M
SU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisg
ICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVB
RElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3Bh
Y2UpOworCisgICAgaW50IHR5cGU7CisgICAgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4m
IGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2Vu
JiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6
Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tl
bik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfVE9LRU5fSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYjQyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzM1IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIubCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXplci5j
cHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwg
c2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2Rl
ZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJ
T04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0
LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlz
c3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBp
bnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUg
RkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5
c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9f
KSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5l
IF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlv
dSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisj
aWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAx
CisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2lu
dDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxl
eF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQz
Ml90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNlbHNl
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxl
eF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQx
Nl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5
OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlO
CisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYg
SU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2Vu
ZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgt
MjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFY
ICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUg
SU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFY
CisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNp
Zm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisj
ZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFY
ICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xh
c3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkv
KiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZp
bmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NP
TlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3Bs
dXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAor
I2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9m
LWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5l
Z2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBm
b3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZl
LAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNo
YXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUko
YykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9p
bnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyog
Rm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxv
dykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5
eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4
dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5l
IHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlf
ZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyBy
ZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlz
Z3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5p
dGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIg
KgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRo
YXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0
ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8K
KyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNU
QVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4g
c3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHBy
b2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8q
IFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisj
ZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJ
WkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2Rl
ZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxF
IDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19M
SU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBj
aGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZ
WV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJ
d2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9w
dHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5l
IFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYK
KworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5w
dXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJ
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
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
aGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBhbGxv
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
Pnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAor
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAzNworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0
aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVj
dCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQz
Ml90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4
NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAgIDM2
LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAgIDMzLCAgIDMz
LCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAgICAgICA0LCAg
IDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAorICAg
ICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLCAg
IDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1
LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAg
IDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5
LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEwLCAgICAwCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNSwg
ICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAgICAgOSwgICAx
MCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAgICAg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwgICAx
OCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwgICAgOSwgICAy
NSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAgIDIx
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0
LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAgMCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQorICAgIHsg
ICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5
LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIxLCAg
IDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAw
LCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDczLCAgMTU5LCAg
MTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAgMTU5LCAgMTU5
LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAorICAgICAg
IDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5
LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAwLCAg
MTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5
LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAg
MTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICAyMCwgICA4
MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAyMCwg
ICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4Mywg
ICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwgICA4MywgICA1
MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4MywgICA4Mywg
ICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAorICAg
ICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMw
LCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAg
IDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQz
LCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAg
IDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAgIDUzLCAgIDUz
LCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAorICAgICAg
IDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUw
LAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAg
IDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAgNTAs
ICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNjcsICAg
NjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAgNzgsICAgNzgs
ICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCisgICAgICAg
MzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIs
CisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMsICAg
NjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAgNzUs
ICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKKyAgICAg
ICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwgICAx
NiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwgICAy
MCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwg
ICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwgICAyNywgICA0
MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1MiwgICA0Mywg
ICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKKyAgICAgICA1
MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1MCwK
KworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAg
IDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4
LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAg
IDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcy
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAorICAgICAgIDg3
LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAg
fSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xs
IGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNk
ZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3Jl
KCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisj
ZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHBy
ZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJv
Y2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
MnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYg
c3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7
CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0
cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VT
RVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRy
dWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24q
IHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUg
KChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2Mt
PnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAt
PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5
eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2Mt
PmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
CisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisjZGVm
aW5lIElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9UWVBF
IHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2Yg
dGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisgICAg
LyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZ
UEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9i
YWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklMRSAq
eXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBp
bmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7
IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVm
ZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9j
aGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFyICp5
eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQg
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7
CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7
CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5
eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5
X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2Zs
YWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisg
ICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAq
LworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
KyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJl
IGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAg
IyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5
eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2Fu
bmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgor
ICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBj
b252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJB
X1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2V4
dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9pbiAg
KEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9vdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50
IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbGluZW5v
IChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogcHBn
ZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQ
RSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBF
ICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCBw
cHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBi
eSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9T
S0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBwcHdyYXAgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGlj
IHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5f
dCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGlu
dCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRp
YyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3Vu
dCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVB
RF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBD
b3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0
LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNp
bmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRl
KCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCAp
CisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJl
c3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3Vs
dCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRl
cmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYg
KCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBF
T0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwK
KwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBt
YXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJy
bm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89
MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKwor
LyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUg
Inl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0
aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRv
IGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0
ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisK
Ky8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93
cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFD
S19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVm
IFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJy
b3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRp
b24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9u
IG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNp
bHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNM
X0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBF
ICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
cik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZ
UEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUg
YmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBy
dWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRp
ZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUg
bWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9E
RUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAv
KiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXln
LT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7Cisj
ZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJ
LyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3Rk
aW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisKKwkJcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQt
b2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisK
KwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2Nw
OworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRv
CisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlf
Y3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgzICk7
CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKworeXlfZmluZF9hY3Rpb246CisJ
CXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVf
QUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2Vz
cyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5n
IG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkv
KiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
KwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKKworCVlZ
X0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3Vu
dGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBz
aW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihDT01NRU5U
KTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2Fz
ZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4g
bWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsreXlsaW5lbm87IH0KKwlZWV9CUkVBSwor
Y2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgaWYgKHl5ZXh0cmEtPmxpbmVTdGFydCkgeworICAg
ICAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgICAgICByZXR1cm4geXl0ZXh0
WzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQs
IHl5bGVuZykpOworICAgIH0KK30KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdp
dGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCisvKiBSdWxlIHRv
IGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCitjYXNlIDExOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9C
UkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorCVlZX0JSRUFL
CitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZX0JSRUFLCitjYXNlIDE2
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVBSworY2FzZSAxNzoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09S
OworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNT
SUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJf
QVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9N
VUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMxOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMyOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzM6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAg
ICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9TRVRV
UAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6
CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICArK3l5
bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOwor
fQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVu
bywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5J
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
ID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZG
RVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJ
CQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICgg
bmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8g
ODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9i
dWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAq
LworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdl
IGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+
eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2Fu
bmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmIt
Pnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAt
IDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJ
CQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRh
dGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19y
ZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlp
ZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBF
T0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJ
fQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9D
T05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJ
CS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5l
ZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90
b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQor
CisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
ICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsK
K30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9y
ZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVy
IHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0g
eXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyAr
K3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNb
WVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0K
KwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJ
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlf
dHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJh
Y3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucygg
Y3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05V
TF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVu
dXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
cyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgz
KTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lm
bmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlu
cHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0
byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAq
YmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsg
aWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlp
ZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJ
CQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQg
d2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2Nl
ZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8g
Y29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJ
CQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBi
dWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJ
CQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJ
eworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJ
CQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9O
RVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJ
fQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBm
b3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZl
IHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJ
cmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1l
ZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlu
cHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0
YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAo
RklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lk
IHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw
bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZm
ZXJfc3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAg
Ki8KKwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBi
dXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3
cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlz
IHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9
CisKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9w
OworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRl
LgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUg
Y2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlf
QlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBy
ZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RB
VEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5l
ciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOwor
CisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNp
emUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBj
aGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigp
IiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZp
bGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBw
cF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIg
KTsKKworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6
ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRp
bWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFz
IGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBw
X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZm
ZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2Zp
bGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVu
IHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0
YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNl
LCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLwor
ICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5v
ID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+
eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiog
RGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5Q
VVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZs
dXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJ
cmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28g
ZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICog
YSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9
CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0
ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxv
Y2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIg
VGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJ
cmV0dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRv
cC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3Bp
ZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKwor
LyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQu
CisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQly
ZXR1cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIp
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxv
Y2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3Bh
Y2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwor
CWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlz
IGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBz
Y2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBh
dm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAg
ICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlp
ZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAg
CisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJ
cmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJi
aXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
CisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1l
bXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwg
Z3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVk
IGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgor
ICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8
IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkg
ICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZv
cmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXpl
ID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1
Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwor
CWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsK
KwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9m
aWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisK
KwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisK
Ky8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBu
ZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0
ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8g
c2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAg
ICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
c3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIp
OworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZl
biBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBl
IGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNj
YW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50
ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lgor
ICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0
ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZF
Ul9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkv
KiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGlu
ZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFs
bG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0g
MDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1
ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEg
YiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7
CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxk
IHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUK
KyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRh
bF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
CSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9G
QUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rp
b24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBc
CisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAor
CXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykg
dG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZv
ciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1i
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBw
Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2Nv
bHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5
Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQg
c3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJ
TEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0
OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQg
dGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhp
cyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9k
ZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRy
YSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBs
aW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVt
YmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25s
eSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9D
VVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5v
IGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVu
byA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBw
YXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQg
YnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAg
ICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZm
ZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisK
Ky8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJy
ZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3
aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0
X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91
dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChp
bnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9
IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9j
ICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFs
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFy
YW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAg
eXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxs
b2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2lu
aXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBp
dCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRo
ZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNp
dGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4K
KyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAg
ICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2Fu
X3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBp
ZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2Vz
LiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0
c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMg
cHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUg
c2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlz
IGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkg
dGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24g
YWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmlu
ZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxs
b2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJh
KFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyAp
CisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0
cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICgg
c2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgq
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVs
ZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3Qg
eXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRy
X3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRo
ZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
ZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisK
KyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlf
Y19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5
X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5V
TEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5
aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxF
ICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0
dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5
CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBw
bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5u
ZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwor
CXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhl
IHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5l
cik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUg
c3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9z
dGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwor
CisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJl
ZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxl
ZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5
c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9u
bHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nh
bm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5
IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxl
eF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytp
ICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4K
K3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiAp
CisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9j
KCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBp
biB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRo
YXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZv
aWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNh
dXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJ
ICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252
ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVy
biAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZy
ZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikg
cHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVm
aW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6
ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorewor
ICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6
flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6
ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
KGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRl
eHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0
U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFu
ZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7
CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRv
a2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29u
dGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2Fu
bmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgm
bUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3Rh
cnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRl
c3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1
cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1ZGUg
IkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAg
cHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBsb2Nh
dGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sK
KyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRo
ZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVw
IGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNj
YW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGluZVN0
YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsK
KyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9pZCBk
ZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxl
LgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40OTE0N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKQEAg
LTAsMCArMSwzMTkgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFp
bnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2Vk
IG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Cito
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJ
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCislewor
I2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAg
ICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisi
Ly8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFr
cyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50
IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5U
KTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5F
fSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpT
b3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQor
Cit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQ
T05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
KyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICov
Cisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsK
KyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJ
RF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9j
YXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7
Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9
CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
QU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQor
Ij4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsK
K30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsK
K30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwor
ICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5
bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5
eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFS
QUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRp
b24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8v
IFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8g
U2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBp
bnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUg
ZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAg
ICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAg
ICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxs
b2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7Cisg
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291
cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisK
K25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFn
bm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nh
bm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwg
MCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcs
IGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52
YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFy
dE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRv
a2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250
ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9
CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09
IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDViMzJm
NzEuLmU5YzcwYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJz
ZXIuc2gKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0j
IEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBh
bmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
LmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAt
LW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5f
Ymlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRz
Y3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAK
LWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVh
ZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3Jp
cHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVz
IC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9
CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3Nvcgot
cnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVy
LmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlv
biBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmlu
ZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3Rf
bGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9
IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNp
emUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNo
YXIqIHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXIt
aW50ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNv
bi1sb2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24g
ZXh0cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAg
ICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAg
ICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUl
Ci0KLXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVO
VElGSUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVm
aW5le0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFj
dE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7
Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNI
fWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7
IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJl
dHVybiBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFT
SH1lbmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5F
RDsgfQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEg
eyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VY
VEVOU0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNI
fWxpbmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFs
LT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURF
TlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFE
RUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7
RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7
Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRl
eHRbMF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4g
ewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwot
fQotCi08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJp
bmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8v
IFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgot
ICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4
OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4g
LSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwg
KHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6
OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQot
Ci1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50
IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1
dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtF
cnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAg
ICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9j
YXRpb24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUg
PSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46
OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0g
bUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3Io
KSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZt
TGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQot
ewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAg
IG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vz
c29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3Ig
R3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4
OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNF
Ui4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1
ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0j
ZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgot
JWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9u
IHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4q
IHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQg
eXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0
aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6
Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29u
KTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRl
eHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6
OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2Vu
IEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hf
RU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJ
T04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkog
SEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RB
TlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0
aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1l
bnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAv
KiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUK
LSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRv
a2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgot
ICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAg
ICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAg
ICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicK
LSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBj
b250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAk
MSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRl
cl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZp
bmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7
Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBjb250
ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFs
X2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8g
dHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7
Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsK
LSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xu
JyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5E
SUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQot
ICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNI
X0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5F
ICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5V
TEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5
ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEu
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlz
dCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2Jh
Y2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0K
LQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAg
IH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xp
c3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAg
ICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwot
Ci1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0g
ICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsK
LQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAx
LmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAg
ICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7
Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVO
VElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsg
fQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAg
fCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7
ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAn
fSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQot
ICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAn
KicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQk
ID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7
IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAg
IHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycg
eyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0g
Jz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0K
LXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAx
OwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAv
LyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEz
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lO
VF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkg
ZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZF
UlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0j
ZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRm
b3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4g
c3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5k
IHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlv
bnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBz
eXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3Qu
ICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9f
ID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
YmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4
L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9N
QUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhf
dCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1
aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5
cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFy
IGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBp
bnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2Yg
aW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAg
ICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElO
VDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01J
TgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlm
Ci0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykK
LSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAg
ICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAg
ICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVm
aW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2
X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNp
Zm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3
Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQu
ICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8K
LQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBk
ZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBk
ZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZk
ZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5
Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmlu
ZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkg
c2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJh
eSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8g
aW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAq
IGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50
KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9U
Ci10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwg
dGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9z
IGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgot
I2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFf
cgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRl
eHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19s
aW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Jz
X2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0v
KiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRh
a2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdh
eSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0g
Ki8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRl
IHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBo
YW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBh
bGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJU
ICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0v
KiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwot
I2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAx
KQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZp
bGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkK
LQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQg
aW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0la
RSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2gg
dG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8K
LSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2Yo
eXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNk
ZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9B
Q1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUg
dGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAg
KiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNz
KCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2Fu
bmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAg
ICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmll
ZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBu
b24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3Jt
YWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRo
IGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAg
ICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZv
ciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5
bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQg
dGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFt
LiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAg
ICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3Ag
PSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAg
ICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMs
IHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3Np
emVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZp
bmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAg
IHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAg
ICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3Vy
cmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQg
YnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJh
Y3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IK
LSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAg
LyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVk
IGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQg
ZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19v
dXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5w
dXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlu
cHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQo
KSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNo
IG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyog
V2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5l
LgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0
Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwot
Ci0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQg
eXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0g
ICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAg
IGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmlu
ZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQg
dGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0
aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICog
c2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdl
IG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhv
dWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAg
ICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRv
ICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNv
bnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlu
cHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAg
ICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHBy
b3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQot
ICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5l
cmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBz
dGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZl
cl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdo
ZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4g
d2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9j
cmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3Rh
dGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0j
ZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
LHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNl
LHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBw
cF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50
IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3Qg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNk
ZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAg
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAg
IFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50
ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9s
KGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAg
ICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVn
aW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBf
WVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5
eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3Vy
cmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJv
ciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBh
ZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUK
LSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUg
WVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAg
ICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAot
ICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5m
bwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5
eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIs
ICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAg
MjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcs
ICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAg
IDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAs
ICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMs
ICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAg
ICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAg
IDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUs
ICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAg
MTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0g
ICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMs
ICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwg
ICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAz
MCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRh
WzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYs
ICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAg
IDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcs
ICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jh
c2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEs
ICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAg
NzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAx
NTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQs
Ci0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAx
MzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUs
ICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAx
MjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUs
ICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAx
ODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUs
ICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0K
LSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEy
NiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEx
MV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2
LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0K
LSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAg
NywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwg
ICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAx
NCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwg
ICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAy
NSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwK
LSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAz
NywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwg
ICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAz
NywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwg
ICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAz
MCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3
LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAot
ICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIz
LCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAg
IDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAy
LCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAg
IDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4
LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAg
IDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAg
ICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAg
IDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwg
ICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAx
NiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwg
ICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAx
MCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwg
ICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAg
ICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwg
ICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAx
NCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAy
LCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAg
MTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3
LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAg
MTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAg
ICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAg
IDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYw
LCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAg
IDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5
LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAg
ICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQK
LSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhl
IGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFu
eSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1Qg
cmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNl
ZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgot
QmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1h
cjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4
Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRl
X3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElP
TiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5v
OyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsg
IFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAot
ICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3Rh
dGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxl
bik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29u
dGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5u
ZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5v
dCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAg
ICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhl
IG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwot
ICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFj
ay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBz
dGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25f
Y2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50
IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRf
c3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBl
IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0g
ICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9y
ZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9j
X3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlf
aW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBn
byBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBm
cm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwg
eXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19y
Ci0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhf
aW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIp
OwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2
aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1p
bnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1
ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19m
bGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUg
dXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBw
Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUg
KiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFm
dGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMg
aW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYg
X19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlm
Ci0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5j
cHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5k
aWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5
eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZ
X05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3Rh
dGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0
aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91
bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JF
QURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyog
Q29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1
dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBz
aW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0
ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQg
KQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJy
ZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAg
ICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAg
ICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9
PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBp
ZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3Vs
dCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3Np
emUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAg
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAg
ICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0
ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQot
ICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2Ug
dGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJl
YWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5
dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmll
cyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NU
QVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0K
LS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHBy
b3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5l
ciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgot
ICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJu
IGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxU
WVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RF
Q0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZ
WV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1
bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0j
aWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQot
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlf
QlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxF
X1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5n
IC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nh
bm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewot
ICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3Rl
ciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0g
ICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQg
PSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRp
ZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlf
c3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlp
biApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkK
LSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5U
X0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAg
ICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAg
IH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyBy
ZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0K
LSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24g
aW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4u
Ci0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZ
X0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsK
LSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9
IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlf
bWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAg
ICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZ
X0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXls
ZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkK
LSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5
Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjog
IC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQot
ICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAg
ICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAg
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmlu
ZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAv
KiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5z
dmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hf
REVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55
eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5
eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRy
YWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVO
QzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFT
SF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5T
SU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmlu
Zyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNw
YWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVv
bCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAg
ICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJ
TklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlf
UlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGlu
Y2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAg
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAg
ICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAg
ICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQK
LSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQot
ICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQg
b3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8g
ZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwg
bWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBO
b3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9u
Ci0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19i
dWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3Qg
dGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFu
c2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAg
Q29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAg
ICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlf
bmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAg
ICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5
X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICog
Zm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAg
KiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAg
ICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAg
ICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAg
ICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAg
ICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAg
eXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5
eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5
eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBp
bgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0g
ICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0g
ICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwot
ICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0
aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFu
b3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4K
LSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAg
ICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAg
ICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owot
Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0
ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAg
ICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8q
IGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBp
biBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0
aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FO
IC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9F
TkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpz
b3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3Zl
LCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9u
J3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAg
IGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0g
MSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNo
YXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5h
bCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9P
Rl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0
Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxh
c3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICgg
aSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihz
b3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0
aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAg
KiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAg
ICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAg
ICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAg
ICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNf
b3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdf
c2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3Np
emUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1
Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGIt
Pnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hh
ciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNo
YXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hf
YnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRv
bid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAg
ICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9F
UlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZl
ciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2No
X2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVh
ZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICov
Ci0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3Qp
IG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlf
bl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09
IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0Jf
QUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JV
RkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQot
ICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9z
aXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3Np
emVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+
eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7
Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5
eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07
Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0g
Z2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQot
ICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0g
ICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5
eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwot
ICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9z
dGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwot
ICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAg
ICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlf
Y3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEg
dHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4
dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0
YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5
X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9u
cy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAg
IHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
ICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQot
ICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRl
ZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZf
cCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2Nf
YnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAg
ICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUg
ZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAg
ICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVm
X3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlf
Z19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0
ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3Jl
Ci0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0g
ICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAot
ICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAg
ICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3Rh
dHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsK
LQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9O
RVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
cHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2Fz
dCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8q
IHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9j
X2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9
PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkK
LSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0g
ICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZ
X05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5w
dXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rp
b24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAq
LwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4K
LSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19i
dWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVu
dGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVy
X3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwot
ICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBv
dXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdo
ZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHBy
b2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBh
dCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdv
IGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5
eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0g
ICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5
eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBh
bmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUg
aW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1
ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAo
RklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9C
VUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAg
ICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6
ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxv
YyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9i
dWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQot
ICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwot
fQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRl
ZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJl
IGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwot
Ci0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXpl
cyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGlt
ZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMg
ZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBf
aW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNo
X2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0g
ICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBi
dWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQg
ZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJ
biB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4u
Ci0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55
eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQot
ICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJy
bm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4
dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIg
c3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVz
aF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsK
LQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBU
aGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVy
IHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgot
ICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAg
ICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9i
dWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAg
Yi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlf
Q1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3
IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxs
IGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdf
YnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBO
VUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2Fu
bmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1
ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAg
ICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxh
Y2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMg
dGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4g
MCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VS
UkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19
Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3Vh
cmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1f
dG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAg
IC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9u
J3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFj
ay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0
ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9f
YWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5
X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBi
dWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jv
d19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19h
bGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5
eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMu
Ki8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAg
IH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3Rs
eSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNl
IHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBv
ZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JV
RkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlz
Y2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVm
X3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAg
IGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9i
dWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+
eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIg
LHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nh
bl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQg
Y2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhl
IG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNf
bGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAg
IGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBH
ZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBF
T0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBw
cGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0K
LSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ld
ID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xl
bisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihi
dWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkg
dG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICog
YXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9
IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUg
KGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAg
ICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0g
eXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2
b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAg
ICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwot
ICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3Rh
dGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAo
IC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55
eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGlj
IGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5
eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNp
Zm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYK
LQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIs
IG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5
eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVz
cwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8q
IFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXls
ZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFj
cm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
LSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAot
ICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0
aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0
IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiog
R2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUg
Y3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQg
c3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJ
TEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsK
LX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRo
ZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1
cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0
aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBz
Y2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVk
IHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19
Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1i
ZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBw
c2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0
aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBj
b2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBp
cyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9j
b2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5
Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMg
ZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFt
IGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRf
aW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0g
aW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2Rl
YnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsK
LX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRo
b2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNl
dF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9p
ZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNp
YmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVz
IHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5j
dGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4K
LSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0
ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3Qq
IHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
KnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXln
dXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAg
ICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8q
IEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBM
ZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxz
LDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xv
YmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICog
Y29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5v
dGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFz
IGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29u
LCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJh
dGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3
aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAq
LwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5
eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15
X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1
dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xv
YmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZk
dW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAot
ICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBz
ZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICBy
ZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBp
bnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRp
YWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgot
ICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBk
b24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sg
PSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAg
IHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7
Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4u
YyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBz
dGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUg
KikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBv
biBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAg
ICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJl
ZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNr
LCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZF
Uil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5l
ciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBw
cHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNj
YW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ry
b3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlf
c3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
TlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBh
IG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBp
cyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9i
YWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50
cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAg
ICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwg
dXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lk
IHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0g
MDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lm
ZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAg
IGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0K
LSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lk
ICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBh
Y2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3Ro
IEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFu
eSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lv
bnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICBy
ZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQg
cHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChj
aGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwot
fQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0
cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlu
cHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklF
Un0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNT
RVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAg
ICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkg
Pj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ld
ID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5n
KHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVz
cGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6
ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2Yo
KSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9u
ZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50
IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihw
cGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1
dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2Rl
TG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+
cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0g
TlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1l
bnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91
IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBv
ZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAg
dW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0
c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlm
aWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2
ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRv
biBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBM
QUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0g
ICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAg
Ki8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBv
ciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBz
aG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0
IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21l
IHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmlu
ZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9O
Ci0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0
cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2Rl
ZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVm
aW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2Rl
ZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9O
RUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMu
ICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2Rl
ZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXlj
aGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBu
ZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZ
VE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAg
ICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0gg
PSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAg
IEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VM
U0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwK
LSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9Q
UkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJ
T04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0g
MjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAy
NzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0g
ICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBI
QVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2
MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmlu
ZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQg
MjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2Rl
ZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmlu
ZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFT
SF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9B
VF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0
aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3Bh
cnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUg
WVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBF
bmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAK
LSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRl
ZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYK
LQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJM
RQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNU
WVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZ
UEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpU
b2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcg
b2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lm
ICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29s
dW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0j
IGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXdu
ICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNf
VFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRl
Y2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlM
VFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSog
bGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3Rh
dGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQot
LyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hv
cnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5
eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsK
LSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBl
X2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBl
ZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQ
RV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYg
WVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQ
RV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6
ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9U
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0
ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlT
SVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMg
ZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQot
Ci0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBp
bmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
ICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMg
IGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lk
Ci0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdz
IGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNf
XwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0Uo
ZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBz
dXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYg
bGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3Rh
dGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0K
LSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0K
LS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vz
c2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZ
U1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FS
R19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFs
bG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFs
bG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EK
LSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxp
Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NU
RExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRp
ZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MK
LSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZp
bmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkp
Ci0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1
YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAot
ICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNv
IHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMg
NDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9y
IGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIw
MDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9D
Ci0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0K
LSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJ
Ql9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykg
XAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGlu
Y2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
aWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAg
ZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMg
ICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMg
IGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQg
ZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwg
KGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAg
ICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQot
Ci0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElN
VU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZ
Ci0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNP
UFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwg
KENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAg
XAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAg
IChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVs
b2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0g
ICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5k
IG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6
ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3Rh
Y2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBz
aXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZ
RklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVm
aW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwot
I2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xB
VEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4g
ICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNk
ZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFu
c2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAg
ICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUs
Ci0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAot
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9m
IHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAq
Lwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAg
IDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAx
OSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAg
ICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcy
LCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAg
IDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAg
ICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwg
ICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0
MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19
OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAg
NTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywg
ICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAy
MywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAg
ICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0g
ICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQs
ICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAg
LTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwg
ICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAt
MSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1
LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAg
IDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEs
ICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAg
NTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAy
NiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAg
ICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0x
LCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAg
IC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAg
ICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0Mywg
ICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0
NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxl
IG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3
MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAg
ICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEy
LCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMs
ICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAx
NjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4Miwg
ICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5
MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4
LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZ
WUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAt
LSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRl
cm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwot
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9y
IiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFT
SF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hf
RU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hf
RVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVf
T0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNU
QU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwK
LSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSci
LCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9
JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJs
aW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIs
ICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAi
Y29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0K
LSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tl
biBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAg
IDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0g
ICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIs
ICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAg
NDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0Niwg
ICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAz
OCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYK
LQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAg
ICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAg
IDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEs
ICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwg
ICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAg
ICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgs
ICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5n
IHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAg
MSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1F
XSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3
aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwot
ICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcs
Ci0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAg
ICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAg
ICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAg
MTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwg
ICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAg
ICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0g
ICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZ
VEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZp
bmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0K
LXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAg
ICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAg
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAg
ICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1
LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMs
ICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwg
ICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19Owot
Ci0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3
LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyog
WVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5V
TS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1
Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBk
byB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4g
ICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1
MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAg
ICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3
MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkw
LAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwg
ICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
IDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAg
ICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAg
MzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAg
MjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwg
ICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAg
MjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAy
MiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0x
LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAg
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDEx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTks
ICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17
Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAg
MjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwg
ICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAg
ICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIy
LCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAg
IDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQot
I2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4g
ICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZ
WUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2Rl
ZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290
byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3Iu
ICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlv
biB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZl
cnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2Rl
ZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkg
ICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAg
ICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAg
ICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVy
cm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi
KSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2Rl
ZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgot
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExP
Q19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5l
OyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSku
Zmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9D
IChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAg
ICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAg
ICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQot
I2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9u
IHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTog
ZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVu
IHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FU
SU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQt
JWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmly
c3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1
bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3
aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVm
aW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0j
IGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFi
bGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZ
WUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmlu
ZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFy
Z3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1C
T0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRs
ZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24s
IGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRw
dXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5
b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsK
LSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBS
SU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5
dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsK
LSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5
eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNv
bnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9p
ZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0
IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVz
ICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
Im50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5
eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0g
IHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9t
IGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNl
bHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlw
ZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyAr
K2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRv
bSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5
X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUg
KFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVj
ZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0g
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2
b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50
IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAq
eXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwot
ICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsK
LSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVs
dSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBi
ZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQot
ICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
LSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAg
ICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRl
eHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5l
IFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZz
cCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVn
OwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAot
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgot
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRp
ZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlm
IGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3Ry
bGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVf
VAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAot
eXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZ
U0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQot
ICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkK
LSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mg
b2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNo
YXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlz
dHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIg
Knl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAq
eXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAg
Y29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RS
IGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFz
aGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3Rp
YyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5n
Ci0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVy
IHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRu
YW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4g
dGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1z
dGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3Ry
KQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAw
OwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAg
c3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcs
JzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6
Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAg
IHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5
eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsK
LSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5
cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAo
eXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNV
TFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFS
IHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3Bp
ZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxU
IGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwg
cmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBk
by4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBz
aXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNo
YXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZ
TEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
LSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsK
LSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAg
Y2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBp
bnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUg
dHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZs
eS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwot
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7
Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhw
ZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNo
YXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9m
IHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAg
ICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAg
ICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9
IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0
byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50
IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBi
b3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNr
bGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwg
WVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0g
MTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5
c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhi
ZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09
IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNv
dW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6
ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNp
emUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNp
emVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNp
emUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAg
ICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7
Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVf
b3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsK
LQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07
Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBh
cyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24n
dCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAg
ICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8K
LSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3
aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5
eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewot
ICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAg
ICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJP
U0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0v
KkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1z
dGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZ
U1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRp
b25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZh
bHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBp
ZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBl
KQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8q
IFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRl
ZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFy
c2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAg
fAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQ
QVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29u
dGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNv
bnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBz
eW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBm
b3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5
eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tl
bnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXll
cnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0
ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZF
UkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQg
c2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1
ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQot
ICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQg
dG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAg
ICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFj
a3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byBy
ZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAq
LwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5
c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMg
dmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQ
RSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24g
c3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXls
cyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0
aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2Vb
Ml07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChO
KSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7
Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQg
bG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5
eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24g
dGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBz
eW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAg
eXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAg
IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFj
ayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9u
IHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBz
dGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6
ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5
bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQg
bG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUg
ICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxs
b2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5
eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVu
IHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBq
dXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNr
cy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwot
Ci0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8q
IEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVu
dHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lm
ZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVh
bGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0
aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICov
Ci0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9p
bnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEg
aW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAg
ICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1p
Z2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0g
ICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsK
LSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1B
WERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0g
ICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxv
YyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFD
S19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19S
RUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZ
WVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19G
UkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAg
ICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5
eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0g
IFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0K
LSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0t
LS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBn
aXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlm
IHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJz
dCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVh
ZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBB
Q1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEg
bG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZ
WUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5
bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVY
OwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9
IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQg
b2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZ
VFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBp
cyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJv
cGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAg
ICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9r
ZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0
b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAo
eXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05J
TkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5
cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0K
LSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXll
cnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZ
X1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0K
LSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAg
aWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUg
PSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290
byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBh
Y3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXlu
ID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFi
OwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUg
dG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxF
TiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoK
LSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNl
dHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQg
YW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5n
IHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNt
YWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBi
ZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0g
IC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxz
cCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAo
eXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFs
b2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250
ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygx
KSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgp
KTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFj
cm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5
eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4
dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6
a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxp
c3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3Bb
KDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0g
ICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0g
KDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29u
dGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25h
bEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMp
XS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNv
bnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFs
LnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5
dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5
eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5m
aXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVz
aF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAo
MSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIp
XS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0g
KDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBw
cDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSld
Lml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRf
Q09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9r
ZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkg
LSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFr
OwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZh
bCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5
eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVj
dGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24g
dGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVk
dWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3Rv
W3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0
ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9
IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAt
IFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBl
cnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFi
OgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0
aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVy
cnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRl
eHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5
eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXlt
c2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0p
Ci0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAg
ICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAg
ICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNn
KTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAg
ICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAg
eXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0g
ICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAg
ICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAg
ICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxz
ZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJv
cl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0g
ICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tl
biBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNo
YXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9m
IGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7
Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlz
Y2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRl
eHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ug
d2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0g
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsx
LXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
LSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9S
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJl
YWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAg
ewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1Rf
TklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4g
JiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsK
LSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0g
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJl
bnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0g
ICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3Jh
bmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAg
ICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZ
WVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19Q
UklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAg
WVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9
IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdl
IHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJs
ZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0g
MSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tl
bi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNw
LCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0g
WVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIg
LS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsK
LQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9u
IGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4
dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwg
dGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0Yg
JiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJk
aW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250
ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2gg
YWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdo
aWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBw
b3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0
KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBp
ZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYg
WVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAg
cmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19
Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wg
Y29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQq
IGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkK
LXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1
ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBh
cnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNl
IGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNy
ZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBC
aXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0
ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEK
LSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVy
c2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlm
IHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2Vs
ZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2Vw
dGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAg
IEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAg
VGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAq
LwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0
aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRl
YnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUg
ewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lG
ID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwK
LSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hf
RU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcs
Ci0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAg
ICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hf
REVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5U
X0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJ
RklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAy
NTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUg
SEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxT
RSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2Rl
ZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BS
QUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lP
TiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcy
Ci0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQK
LSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQot
Ci0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0
cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0
bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMg
ZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24g
Ki8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19U
UklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5l
ZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBm
aXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQg
bGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRp
ZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93
IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11
c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2Rl
ZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUo
Y29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RM
IHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9O
X1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsg
fQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRl
IHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9T
VExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRD
UFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IElu
aXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9t
U3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAq
YXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmFk
NDNmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNlbmRp
ZgogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdXRpbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2
Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBT
dHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpz
KTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03Myw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9m
X3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQg
bm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0
YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAm
bm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAm
ZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3Jj
ICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApAQCAtMTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJl
ZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKKy8vIERlZmluZSB0
aGlzIHRvIDEgdG8gdXNlIHRoZSBuZXcgbGV4ZXIuCisjZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVS
IDAKKworaW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBf
VVNFX05FV19MRVhFUgorICAgIElucHV0U3JjKiBpbiA9IExleGVySW5wdXRTcmMoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKKyAgICBpZiAoIWluKSByZXR1cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9IGluOworI2Vsc2UKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFB
cmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAt
PlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyNl
bmRpZgorICAgIHJldHVybiAwOworfQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNh
cmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
CmluZGV4IDIzM2QxZGMuLmI2N2MxZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5
ICs2OSw5IEBAIHR5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJ
bml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5l
ci4gCi1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2Fu
bmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5nIG1lbnRpb25lZC4KK2ludCBJbml0U2Nhbm5l
cklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5m
b0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIn
cy5JbmZvLmxvZwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOyAgIC8vIHN0
aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRM
aW5lTnVtYmVyKGludCk7CiB2b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwogdm9pZCBJbmNMaW5l
TnVtYmVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAppbmRleCBjMTlmNzljLi4yMzIwM2Rh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3N5bWJvbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaApAQCAtMTA1LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3
U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2lu
ZCBraW5kKTsKIFN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3Bl
LCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2wo
U2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZT
Y29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwordm9pZCBD
UFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOwogCiAKICNlbmRpZiAvLyAhZGVmaW5lZChf
X1NZTUJPTFNfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmluZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYg
KzI2Niw4IEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwogICAgIGlu
dCBsdG9rZW4sIGxlbjsKICAgICBjaGFyIGNoOworICAgIGludCBiYXNlLCBhY2N1bTsKKyAgICBj
aGFyIGNoX3ZhbDsKIAogICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICBpZiAobHRv
a2VuID49IDApIHsKQEAgLTMxNSwxOCArMzE4LDQxIEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJl
YW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNj
dW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3
aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Cisg
ICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYg
KGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAg
IGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAg
ICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAg
aWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAg
ICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAg
ICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRl
KHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAq
ZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICBzd2l0
Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2Ug
Q1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRB
dG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NU
UkNPTlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50Zihz
dHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FU
Q09OU1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2
YWwpOwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBU
b2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tl
bikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aAppbmRleCA4NzY2ZGY5Li5kYmY0YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYg
KzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0gg
MQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
cGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3ZWI1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
CkBAIC0wLDAgKzEsODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5m
b1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKKy8vIEZJWE1FKG12
dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWlu
IG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3Qg
dGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVt
RXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3Jh
cGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93
LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJv
bSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0
ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7
CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICAr
K2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRl
cjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2Fs
bCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVu
Y3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVk
IGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2Rl
KQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsK
KyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKK3sKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIHNob3VsZCByZXN0cmljdCBzYW1w
bGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBiZWluZyB0ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAg
IC8vIGluIGFsbCBhdmFpbGFibGUgc2FtcGxpbmcgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xT
TCBFUy4KKyAgICAvLyBUaGlzIGluY2x1ZGVzIG92ZXJsb2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0
dXJlMkQsIHRleHR1cmVDdWJlLCBhbmQgb3RoZXJzLgorICAgIGlmIChwYXJhbWV0ZXItPmdldElu
dGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgIT0gInRleHR1cmUyRChzMjE7dmYyOyIgfHwK
KyAgICAgICAgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpICE9IDEpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQiCisgICAgICAgICAgPDwg
IiBvZiBhIHRleHR1cmUyRCBjYWxsLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAg
YmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHBy
ZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3Ag
Y29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVy
cm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBl
eHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUg
bGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdl
dE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTc5MzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitj
bGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
IDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IG1TaW5rKHNp
bmspCisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJp
Y3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3Jz
KCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExv
Z2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7CisKKwlUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1J
TkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgi
CisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkp
IHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAg
bVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxu
IjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5H
X0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2Ns
YXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBt
TnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkg
eyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklD
VF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTky
LDIyIEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9E
WFQ1KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3Qz
RDkKKy8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdl
IGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0
cy9EM0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0
KCkgY29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RF
UFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51
bGwgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZ
UEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9
CisKIGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxh
eU1vZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAot
RDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitE
M0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAg
IGlmIChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9P
TCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQog
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEo
dXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXgg
NTAyODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVh
bCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVy
YWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVz
YWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAg
Ym9vbCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLmNhMmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtNTY1LDYgKzU2NSw4IEBA
IEVHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAogICAgIHJl
dHVybiBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTU3NSw2ICs1NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNl
OSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFj
ZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IDY2
Y2Q1YzAuLjgyMGY2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMx
MSw3IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBl
Z2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9
IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKICAgICAgICAg
bVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1E
aXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBw
b3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwog
CiAgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleElu
ZGV4ID49ICgxIDw8IDE2KTsKIApAQCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENvbnRleHQ6Om1h
cmtBbGxTdGF0ZURpcnR5KCkKICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwogfQog
Cit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQoreworICAgIG1EeFVuaWZvcm1z
RGlydHkgPSB0cnVlOworfQorCiB2b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAg
ICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCkBA
IC0xNjQ2LDYgKzE2NTMsMTIgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJB
VEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAg
ICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FO
R0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFy
YW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudQog
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKQEAg
LTE4MzUsMTMgKzE4NTAsMzEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29s
IGlnbm9yZVZpZXdwb3J0KQogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBj
b2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50
CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5
IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
cmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXROdWxsQ29sb3JidWZmZXIoKTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmpl
Y3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRl
clRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNl
cmlhbCgpOwogICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJn
ZXRTZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAg
IH0KICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBA
IC0xODU2LDI1ICsxODg5LDI3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9v
bCBpZ25vcmVWaWV3cG9ydCkKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7CiAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQogICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVw
dGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAg
fQogICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldFNlcmlhbCgpOworICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwog
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0
KCk7CiAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAs
MjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0
KQogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAg
ICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgp
OworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9n
cmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBo
YWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24o
KTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBm
IC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJm
dihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCiAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBh
cmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWlu
Z3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0Lgot
ICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigp
OworICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlv
bigpOwogICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKICAgICAgICAg
R0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZp
ZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1T
dGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdM
aW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAg
IEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAg
ICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFy
KSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAx
LCBkeik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6
KTsKIAotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5h
cnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRp
ZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsK
ICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCAr
MjAzMSwxOSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmll
d3BvcnQpCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsKIAogICAgIEdMZW51bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmco
bVN0YXRlLmZyb250RmFjZSk7CiAKLSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3Qt
PmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CiAgICAgR0xpbnQgY2N3ID0gKGFkanVzdGVk
RnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihm
cm9udENDVywgMSwgJmNjdyk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9u
dENDVywgMSwgJmNjdyk7CiAKLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVj
dC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVz
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGlu
dCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zy
b250KTsKIAogICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxh
eS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2Vk
ID0gaWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwpAQCAtMjI4MCwxOCArMjMyMiwyMCBA
QCBHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSBtbwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQog
ewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAg
IFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisKICAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxp
ZWRQcm9ncmFtU2VyaWFsKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
dmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
aXhlbFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFk
ZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVy
KCk7CiAKICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJv
Z3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5k
aXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dy
YW1PYmplY3QtPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5
VW5pZm9ybXMoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8v
IEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKQEAgLTIzMTEsMzAgKzIzNTUsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKCkKIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewog
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CiAKICAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVy
IHR5cGUKICAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0g
U0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVy
ZVNlcmlhbFZTOwogICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9Q
SVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFu
Z2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBz
YW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwog
CiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJh
bmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHBy
b2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8g
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAg
IC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBs
ZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0
dXJlVW5pdCAhPSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVy
ZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxl
ckluZGV4KTsKKyAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAg
ICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwg
dGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkp
CisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0
ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFz
RGlydHlJbWFnZXMoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0
ZXh0dXJlLT5nZXRXcmFwUygpOwogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBU
ID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKQEAgLTIzNTEsNyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4
dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVS
LCBkM2RNaXBGaWx0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBs
ZXIsIGQzZFRleHR1cmUpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDcs
NyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKICAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBs
ZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9
IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4
dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ1MSw2
ICsyNDk3LDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzM4LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRl
eHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZv
cm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7CkBAIC0yOTUyLDcgKzMwMDAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbgogICAg
IGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3Vy
cmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJy
ZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2Up
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICB9CkBAIC0zMDQyLDcgKzMwOTAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZAogICAgIGFw
cGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50
UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9
CkBAIC0zNDUyLDYgKzM1MDAsMTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMoKSBjb25zdAogICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4
dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMz
MmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MzAsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRl
bnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19y
Z2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3NCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJl
X3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAo
c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBAIC00MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBD
b250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEKIAogICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKICAgICAg
ICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERl
cHRoU3RlbmNpbCgpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0
ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWws
IE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAg
ICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAg
ICAgICAgICAgewpAQCAtNDExNSw2ICs0MTgwLDggQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcg
QEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBh
dHRyaWJ1dGVzW2ldLnR5cGU7CiAgICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNM
TUVUSE9EX0RFRkFVTFQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtLT5n
ZXRTZW1hbnRpY0luZGV4KGkpOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHBy
b2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CiAgICAgICAgICAgICBlbGVtZW50Kys7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCmluZGV4IDhkY2NmMGYuLmM3ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcg
QEAgY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1h
eExydTsKIAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07
CisgICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAg
IHN0cnVjdCBWQkRhdGEKICAgICB7CkBAIC0yODIsNiArMjgyLDcgQEAgY2xhc3MgQ29udGV4dAog
ICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpOwogCiAgICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFy
a0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgp
OwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENv
bnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wg
c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNz
IENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1
bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwog
ICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4IDczMGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
Ojpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBA
IC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsK
QEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJl
bmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9p
bnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5n
ZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVy
KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVm
ZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4
cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
OworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXIt
PmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsK
KyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVy
KHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOwor
fQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZm
ZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3
aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAg
ICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJU
eXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkK
KyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVm
ZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRl
cm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBI
QSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAor
ICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQz
MkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAo
ZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFn
ZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAg
ICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0
LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAg
ICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0
c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xf
TFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlO
QU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3Jt
YXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgIH0KIAogICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAg
ICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNhbXBsZXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7Cisg
ICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgUmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJC
VUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsgICAvLyBSZXF1aXJlcyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAgICAgICB9Ci0K
ICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICgh
ZGVwdGhidWZmZXIpCkBAIC0zMTksMTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpCiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAg
ICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewot
ICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAg
IGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6
OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFU
IGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAg
Ly8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0
dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgy
ZXM6OklzRGVwdGhGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkK
KyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3
aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVy
LT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2Ft
cGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVG
RkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1
ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1
IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVu
Y2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxi
dWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
KQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0
ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0
ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBP
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5j
aWxGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0
ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVm
ZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5n
ZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRo
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5j
ZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBk
ZXB0aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYm
IChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0
aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8
fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlh
bCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5l
ZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlm
IChtaXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAq
Z2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpn
ZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsK
ICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNz
IEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRp
bmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRl
eCBhNWUzOGJmLi4xODRhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4K
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCAr
MTgsMjQgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgZ2wKIHsKIHVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25z
dCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50
IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAg
OiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlm
b3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWdu
ZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9
IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwot
fQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0
ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0g
MDsKIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAg
ICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVt
ZW50KSwgaW5kZXgoaW5kZXgpCitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdz
KCkKIHsKIH0KIAogUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdM
dWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUp
LCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwog
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0K
LSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9
IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
Ci0gICAgdW5saW5rKCk7Ci0KKyAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgbURlbGV0
ZVN0YXR1cyA9IGZhbHNlOwotCiAgICAgbVJlZkNvdW50ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsx
MTMsNyBAQCBpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAogICAg
IHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDog
MCk7CiB9CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIo
KQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4
RXhlY3V0YWJsZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQordm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6Ymlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAg
ICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgewpAQCAtMTc1LDI2NDkgKzEy
NiwyODAgQEAgdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4
LCBjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJp
YnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5h
bWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0
dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAor
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQ
cm9ncmFtOjpsaW5rKCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB1bmxpbmsoZmFsc2UpOworCisgICAgbVBy
b2dyYW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5
LT5saW5rKG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVy
KSkKKyAgICB7CisgICAgICAgIHVubGluayhmYWxzZSk7CisgICAgfQogfQogCi0vLyBSZXR1cm5z
IG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJv
Z3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEF0dHJpYnV0
ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBj
b25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5m
aW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CiAgICAgfQorCisgICAg
cmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBp
bmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNo
YWRlcikuCi1HTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBl
LCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmpl
Y3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVj
dGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQogewotICAgIEdMaW50IGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChkZXN0
cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCiAgICAgewotICAgICAgY2FzZSBTQU1Q
TEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVy
c1ZTWzBdKSk7CiAKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQorICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9n
aWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVy
ZVVuaXQ7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAg
ICBtVmVydGV4U2hhZGVyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJl
VW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAg
ZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAg
ICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUg
Zm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0
dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFBy
b2dyYW1CaW5hcnkoKQogewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNB
TVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2Ft
cGxlcnNWU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJl
VHlwZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRFWFRVUkVfMkQ7CisgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1HTGludCBQcm9n
cmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6
c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHVu
c2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5OworfQogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Cit2b2lkIFByb2dyYW06OnJlbGVhc2UoKQoreworICAgIG1SZWZDb3VudC0tOwog
Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1z
OyBsb2NhdGlvbisrKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQog
ICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAm
JgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3Jp
cHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQor
ICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwogICAgIH0K
LQotICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBQcm9ncmFt
OjphZGRSZWYoKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgbVJlZkNvdW50Kys7
Cit9CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCit1bnNpZ25lZCBpbnQgUHJv
Z3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7Cit9CiAK
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJp
YWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFsOworfQogCi0gICAgICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQ7Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwo
KQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQogCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBd
ID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRb
Ml0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKK2ludCBQcm9ncmFtOjpnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVu
Z3RoKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0SW5mb0xvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAoYnVmU2l6ZSA+IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYg
Kz0gMjsKKyAgICAgICAgICAgIGluZm9Mb2dbMF0gPSAnXDAnOwogICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwogCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICBpZiAobGVu
Z3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5n
dGggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQs
IEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKKyAgICBpbnQgdG90YWwgPSAwOwogCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICBpZiAobVZlcnRleFNoYWRlcikKICAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4
Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAg
ICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRl
ci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CiAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICBpZiAobUZyYWdt
ZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBt
RnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwogICAgICAgICB9CisKKyAgICAgICAgdG90YWwr
KzsKICAgICB9Ci0gICAgZWxzZSAKKworICAgIGlmIChjb3VudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgKmNvdW50ID0gdG90YWw7CiAgICAgfQotCi0gICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzQpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAoYnVmc2l6ZSA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQs
Ci0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAg
ICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK30KIAotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKQoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
UHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKICAgICB9Ci0gICAgZWxz
ZSAKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNy
Y0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQogewot
ICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAg
IGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0g
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgaWYgKG1Qcm9ncmFt
QmluYXJ5KQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0
V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwogICAgIH0KLSAgICAvLyBjbGVhciB1bmZp
bGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdo
dDsgeSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9
CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit2b2lkIFByb2dyYW06OmdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQogCi0gICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIH0KIAotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OworICAgICAgICAqc2l6ZSA9
IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2
YWx1ZSArPSA5OworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFt
QmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQs
ND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUg
Kz0gMTY7Ci0gICAgfQordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1E
ZWxldGVTdGF0dXMgPSB0cnVlOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW06
OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1
czsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBj
b25zdAogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQo
KTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50
KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29s
ZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICog
c2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBs
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
YW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
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
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAot
ICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
MywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJu
YWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFy
Z2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChm
bG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVl
cmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBp
ZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4
dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwg
cmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5p
Zm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVu
dENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZv
cm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0
UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBh
cmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBy
b2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2lu
ZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxV
bmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1z
LmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAg
ICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAg
ICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAg
ICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRV
bmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAy
LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3Jt
bmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAg
YXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJz
IGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRv
QmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxh
Z3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUo
KSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRF
QlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwot
I2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNl
bmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwot
ICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBh
dGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAg
d3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VU
ZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxz
bDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJs
b2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBz
dHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdz
LCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0g
ICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVz
c2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0
aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJB
Q0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRp
Y19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFu
dFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3Mg
aW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20g
W09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0
aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVn
aXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewot
ICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5n
LT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIg
fHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYm
IGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZh
cnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0
b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8
IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsg
eV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9
IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3Bh
Y2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVt
biA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSBy
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9
IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQg
bm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVt
YmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3Ig
KGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBp
ZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFj
a2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06Omxp
bmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExT
TC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIr
KykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5j
b2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIg
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJl
ZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0
aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0
ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5n
VmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlu
cHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0
cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQt
Pm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAh
PSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVy
dGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWlu
ZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcg
PSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsK
LQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMg
ZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0
ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7
Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBz
dHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExT
TCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
InN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCBy
ZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChw
YWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVy
cykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQg
bWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAg
ICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0
cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVB
dHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4
SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91
dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9u
LnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bv
c2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigo
aW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xu
IjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdp
c3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYg
cGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJl
ZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wg
Kz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxu
IjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWlu
ZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlm
ICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBp
ICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxv
YXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAg
ICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQ
b3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAg
bVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAg
ICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5n
bF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhl
aWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3Jk
LnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0
IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJh
Z0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4
X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29y
ZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRo
LnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xf
UG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmICht
RnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9u
dENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsK
LSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmct
PnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZh
cnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
aik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+
bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsi
ICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0
LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExT
TCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtc
biIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29s
b3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAot
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQ
cm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hh
ZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXIt
PmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4
ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBt
VmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBv
cnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIg
KnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18w
IiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRv
QmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJs
ZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4
ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAg
aWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
dmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4
QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAg
IEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQq
KXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQot
ICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZl
cnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4
ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
cGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAg
ICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJs
ZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtB
dHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJs
ZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVj
b3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBw
cmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAg
ICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0
aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ci
KTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsg
ICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1h
cHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0g
dXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5z
aWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRo
YXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVy
YXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRy
aWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1
dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9j
YXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
cm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxv
Y2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0
ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAv
LyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAg
ICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRp
b25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxh
YmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9v
IG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0g
PSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsK
LSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBz
dGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
LnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBp
bmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQ
cm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewot
ICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRp
b25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29u
c3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVND
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFu
dERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25z
dGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAg
ICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3Rh
bnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRU
YWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlw
dGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0
IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBh
bHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhB
TkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNv
bnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRT
YW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBs
ZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8g
VEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAg
ICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNo
YWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnRE
ZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJh
eUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsg
ZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxl
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsK
LQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9u
OwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291
bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDog
IiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxl
LCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3Ry
dWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6
Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09C
SkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwg
bmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1
bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAg
ICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0t
PnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1
bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxl
cyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxp
emVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZT
KTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAg
IG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9y
bUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dy
YW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FN
UExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5D
b2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVD
MywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVy
biAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNv
cmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAm
JiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
Il8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1l
LnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJf
IikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQg
PT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3
aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JP
T0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGlu
dCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wg
PyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291
bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0g
c3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAg
ICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4
LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2
KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
SW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNv
bnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdElu
ZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9
IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2
ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwot
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7
Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRV
bmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwg
KGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0g
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
Ci17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3Qg
ZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0K
LX0KLQotLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxv
Zy4KLS8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21l
IG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFs
bCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQg
UHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17
Ci0gICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAg
IGRvCi0gICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKLSAgICAgICAg
aWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
c2cuZXJhc2UoZm91bmQsIHN0cmxlbihmYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmRUb0luZm9M
b2coIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZv
TG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZh
X2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmlu
dGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFy
Zyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICgh
bUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGgg
KyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAg
ICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsK
LSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9n
ICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAg
ICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OnJlc2V0SW5m
b0xvZygpCi17Ci0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1J
bmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtp
bmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kp
Ci17Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7
Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtUGl4ZWxFeGVj
dXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29u
c3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgp
OwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsK
LSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBt
U2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCi0gICAgewotICAg
ICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1V
c2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5p
Zm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0x
OwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9j
YXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLQotICAgIG1V
bmlmb3JtSW5kZXguY2xlYXIoKTsKLQotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVy
dGV4SExTTC5jbGVhcigpOwotCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cg
PSBOVUxMOwotCi0gICAgbUxpbmtlZCA9IGZhbHNlOwotfQotCi1ib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKLXsKLSAgICByZXR1cm4gbUxpbmtlZDsKLX0KLQotYm9vbCBQcm9ncmFtOjppc1ZhbGlk
YXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dy
YW06OnJlbGVhc2UoKQotewotICAgIG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9
PSAwICYmIG1EZWxldGVTdGF0dXMpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5k
ZWxldGVQcm9ncmFtKG1IYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjphZGRSZWYo
KQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVm
Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQot
Ci11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3Vy
cmVudFNlcmlhbCsrOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAg
aWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZv
TG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBp
bmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0
YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNo
YWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQot
ICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIp
Ci0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAg
ewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAv
LyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVB
dHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRy
aWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0K
LSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcg
PSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0
cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0g
PSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICps
ZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7
ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
dW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExl
bmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17
Ci0gICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5p
Zm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAgewot
ICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0KLQot
ICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBi
ZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXpl
ID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBu
YW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlw
ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUlu
ZGV4KyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9
IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51
bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkg
KyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRp
bmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAg
bURlbGV0ZVN0YXR1cyA9IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVs
ZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFBy
b2dyYW06OnZhbGlkYXRlKCkKLXsKLSAgICByZXNldEluZm9Mb2coKTsKLQotICAgIGlmICghaXNM
aW5rZWQoKSkgCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5v
dCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxz
ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAg
ICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8g
aWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQg
dHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwg
YW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2ls
bCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1
ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5
cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05P
V047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0
aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVy
c1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRz
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9n
RXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRo
ZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJv
cnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJF
X1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMg
b2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0
ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0
VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3Jt
OjpSZWdpc3RlckluZm8gKnJpLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17
Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFt
ZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQotICAg
IHsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNEWENPTlNU
QU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICByaS0+cmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJTZXQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJpLT5y
ZWdpc3RlckNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhS
YW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9u
OwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3Jk
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0
RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2Nh
dGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXgg
NjE4MzBjNi4uMWI0MjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dS
QU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywxNyBAQCBjbGFzcyBSZXNv
dXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsK
IAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0K
LXN0cnVjdCBVbmlmb3JtCitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwogewotICAgIFVuaWZvcm0o
R0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSk7Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBj
b25zdCBHTGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNv
cmF0ZWQgbmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVk
IG5hbWUKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQg
Y2hhciAqZGF0YTsKLSAgICBib29sIGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwot
ICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRl
eDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5m
byBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7Ci19OworICBwdWJsaWM6CisgICAgQXR0cmlidXRl
QmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotLy8gU3RydWN0IHVzZWQg
Zm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhh
bmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KLXsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4OworICBwcml2YXRlOgorICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJ
QlNdOwogfTsKIAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dy
YW0KICAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5k
ZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1
cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAg
IEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGlu
dCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsK
LQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAg
ICBib29sIGlzTGlua2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnko
KTsKKwogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKQEAgLTEzMSw5MSArNzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlv
bigpIGNvbnN0OwogCi0gICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1w
bGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJl
cGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlm
b3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJz
Y29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0p
OwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNv
bnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwog
ICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFy
eWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5n
cygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1z
KElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlm
b3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBi
b29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlm
b3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwot
ICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9v
bCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAg
IHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3Rl
ckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0
SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0g
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdt
ZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6
c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0
cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1W
ZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6
OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
LSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAg
IGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNh
bXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2Fs
VGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0K
LSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBT
YW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwot
ICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZv
cm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1V
bmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdM
aW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0
aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxp
bmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxl
dGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBk
ZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJv
b2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuY3BwCkBAIC0wLDAgKzEsMjU4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdM
IHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wK
K3sKK2NvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5n
IHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5p
Zm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJh
eVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFy
cmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNl
dChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5p
Zm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5
KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKwor
VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUo
UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50
KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQor
eworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBO
VUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBT
ID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0g
TlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNl
bWFudGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAg
ICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOworICAgIH0KKworICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7
CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2Nh
dGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
CisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7
CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
bUNvbnN0YW50VGFibGVWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFj
aygpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJp
bmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7
CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1
dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1w
bGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5n
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1Q
TEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4
dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0
dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0Owor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBl
IGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4
dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0K
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAg
ICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFy
Z2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1h
dHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3Jj
V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRh
cmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAg
dGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0g
OTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
X0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1F
eHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNb
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsg
aW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tp
bmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlm
b3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Cit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1V
bmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsK
KyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzog
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZv
cm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9W
RUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQg
c2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5h
cnk6OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxl
LCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsK
KyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlm
IChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVH
OworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0
VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwi
IikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxz
bCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19z
dHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291
cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsK
KyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENv
bXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBw
cm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJy
b3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBj
aGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRU
b0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7
CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdl
LT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3Rh
bnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmlu
YXJ5OjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhp
bXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAg
aW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsK
KyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0g
MyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9
IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFi
bGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
OyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47
IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2
YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wg
PSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVt
bl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNl
W2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47
CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNr
IHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tp
bmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1b
M10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0ws
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUg
dmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIg
IT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAg
ICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAg
ICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8g
dGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlp
bmdzKHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBI
TFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWlu
Z1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1
dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlu
cHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXgg
dmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwg
b3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlu
cHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisg
ICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpz
dHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKwor
ICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBV
VFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsg
ciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBh
Y2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAy
IDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0
ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0K
KworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7Cisg
ICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7
CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6
aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRl
KGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3Vu
dChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRl
eEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVs
U2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGds
X1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4i
OworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsK
KyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChn
bF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
QVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9G
cmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7
CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lz
dGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFy
ZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hd
ID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0
ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+
bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGop
ICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisg
ICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7Cisg
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwor
ICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIg
ZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAg
IHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAg
ICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWln
aHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkg
LSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdp
ZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29v
cmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7
XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsg
ZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53
ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChp
bnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisK
KyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4i
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9y
WzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRp
bmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8
ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
Q29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
dGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0
ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlm
ICghbGlua1ZhcnlpbmdzKHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZz
XzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkodmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQ
cm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkg
PSBjb21waWxlVG9CaW5hcnkocGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25z
dGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAg
ICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4
U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4
RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZt
UGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVs
UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZl
cnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKwor
ICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxp
bmtVbmlmb3JtcyhHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50
VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNo
ZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAg
Ly8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBk
ZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxT
aXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAg
IGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVy
bWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZl
cnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmli
dXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7Cisg
ICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0
dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24g
IT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVz
IGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwor
CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2
ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJp
YnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMg
fD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0
aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRp
b24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFt
ZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5k
QXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5k
ZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJU
RVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBh
dmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmli
dXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXgg
PSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dD
b3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtcyhHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUp
Cit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247
CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24p
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5k
ZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4Kysp
CisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5U
X0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFu
dERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25D
b3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYg
KCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRp
b24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2Yg
YSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlm
b3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBk
ZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOworCisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBs
ZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisg
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJF
X0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENf
U1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBm
aWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRM
RSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFu
ZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmll
bGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9
IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5k
ZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnRE
ZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAg
ICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoK
KyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0o
c2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5O
YW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9y
bShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0g
PSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1
bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENo
ZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsK
KworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07
CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlm
b3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9W
RVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKwor
ICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5
cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwor
ICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kp
CisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24o
X25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7
CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5k
IHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBE
M0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
VkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8g
bWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRl
Y29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1l
LmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRl
VW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29y
YXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgi
Ll8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVw
bGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRl
Y29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4g
bmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAi
YXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0
aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05T
VEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwg
dGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwg
d2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJ
bmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwor
ICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8g
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291
bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7
CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4
ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0
YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xW
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0K
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNh
bXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0
Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJ
bmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NElu
ZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2
WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jt
bml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3Vu
dCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAg
IH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9h
dCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29u
c3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAg
IH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7CisgICAgfQorfQorCisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRo
ZSBwcm9ncmFtIGluZm8gbG9nLgorLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2Ug
ZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywg
c28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJv
bSB0aGUgbG9nLgordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQo
Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisK
KyAgICBzaXplX3QgZm91bmQ7CisgICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZp
bmQoZmFrZXBhdGgpOworICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKworICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
Cit7CisgICAgaWYgKCFmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2hhciBpbmZvWzEwMjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQo
dmFyYXJnLCBmb3JtYXQpOworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1h
dCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3Ro
ID0gc3RybGVuKGluZm8pOworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1J
bmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9M
b2csIGluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVu
Z3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJb
bG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5m
b0xvZyk7CisgICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAg
ICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9
Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUlu
Zm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZv
TG9nID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKworaW50IFByb2dyYW1CaW5h
cnk6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1
cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9M
b2cpCit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7
CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAg
IG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
aW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgewor
ICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7Cisg
ICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0
aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAo
YXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAg
fQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3Ry
aW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAg
ICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAt
IDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUg
PSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0g
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisg
ICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQor
eworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1h
eCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsg
MSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3Ro
OworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3Jt
cworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
dW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUo
KTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2
ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXpl
KCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBz
dHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0g
IlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAg
IGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFt
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50
IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUlu
ZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4
KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVt
cHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAo
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBh
cHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQorICAgIHsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFj
dGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJl
ZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0
aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAor
ICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElE
X09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7
CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0
XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVy
ZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1
bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
IiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5
cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGlu
ZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0g
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3Jk
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jZGM3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKQEAgLTAsMCArMSwy
MjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6
OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVs
YXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFn
ZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVy
dGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAg
flVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5
cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cisg
ICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7
CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9
IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAg
IGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNv
dW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4
OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisg
ICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7
CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0
aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVj
dCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5z
aWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcg
YSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3Jh
bUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1C
aW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZl
cnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7
CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5
cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xp
bnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdl
dFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0x
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3Jt
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisg
ICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXRE
eERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMo
KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIGJvb2wgbGluayhjb25zdCBBdHRy
aWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIGludCBnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKwor
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgdmFsaWRhdGUoKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJv
cnMpOworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0
cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFBy
ZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5p
Zm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVy
c2NvcmUKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFt
QmluYXJ5KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpo
bHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRh
YmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRd
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1Zhcnlpbmdz
KHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKwor
ICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElE
M0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9
ICIiKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBh
cHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFu
ICp2KTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1l
c3NhZ2UpOworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7
CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKKworICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGR1cmluZyBsaW5raW5nLgorICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRy
aWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2Vt
YW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAg
ICB7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1w
bGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1T
YW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWlu
dCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsK
KyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5k
ZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVw
dGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAg
IEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKKworICAgIGNoYXIgKm1JbmZvTG9nOwor
ICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9H
UkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6
Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUo
Z2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJU
ZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQp
CisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKwor
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0
ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJl
MkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0
dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVy
ZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBu
b3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0
KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVp
Z2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRl
cmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJu
YWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8v
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1Jl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0
dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sK
KyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVy
ZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQ
cm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQ
cm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7
CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFz
ZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7
CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJU
YXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZl
clRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRI
ZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0K
IAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitE
M0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29u
c3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25z
dAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1w
bGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBp
ZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkK
IHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2
b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJl
bGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBA
QCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQw
LDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAg
RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1
ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7
CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOwor
Y2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZm
ZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4
LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRl
eHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6
CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBs
ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4g
bVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUu
LjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewogICAg
IGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7
Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAg
ICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0g
ICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAg
ICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChj
aGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAg
ICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAg
IH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNp
emUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2Mw
ZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBW
YXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAg
ZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFk
ZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3
ZDIuLjFhZjA4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcApAQCAtMzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwogCiBzdGF0aWMgRDNERk9STUFUIENv
bnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAg
ICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAg
ICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJ
c0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRa
OworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBA
IC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNo
KGZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBA
QCBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkK
IHsKICAgICBtV2lkdGggPSAwOyAKQEAgLTE1NSw2ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVh
dGVTdXJmYWNlKCkKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQz
ZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1U
X0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAK
ICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsy
MDMsNyBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICAgICAgICAgIGxldmVsVG9G
ZXRjaCA9IHVwc2FtcGxlQ291bnQ7CiAgICAgICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdo
dCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1
ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3
VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDcg
KzI4OSw3IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5CiB7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFj
ZSAhPSBkZXN0U3VyZmFjZSkKKyAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNl
ICE9IGRlc3RTdXJmYWNlKQogICAgIHsKICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4
ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0y
ODQsMTAgKzMwOSwxOSBAQCB2b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogfQogCiAvLyBTdG9yZSB0
aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhl
aWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8g
dGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0
ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFu
Z2xlIGF0IGxvY2tlZC5wQml0cyB3aXRoIGxvY2tlZC5QaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVh
Y2ggbGluZS4KIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBSRUNU
IGxvY2tSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIG1IZWlnaHQpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQpOwogICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAt
IDEpOwogCkBAIC0yOTcsMjkgKzMzMSwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBpZiAoc3VwcG9ydHNTU0UyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9h
ZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
LSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfTDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBn
ZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfUkdCQToKICAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAg
LTMyOCw3ICszNjksNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAg
IGxvYWRSR0I1NjVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwogICAgICAgICB9CkBAIC0zMzcsNyArMzc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyAr
Mzg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CkBAIC0zNTYsMTkgKzM5NywxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodAogICAgICAgICB7CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRl
ZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAg
ICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBs
b2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
UkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpA
QCAtMzc4LDI4ICs0MTksMzAgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgewog
ICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJH
UkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CisKKyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3
ICs0NTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaAogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gMDsKQEAgLTQxOSw3ICs0NjIsNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGgK
ICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAqZGVzdCA9
IE5VTEw7CisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisKKyAg
ICAgICAgaW50IHg7CisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCisgICAg
ICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYg
MHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVz
dFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgNyA8IHdpZHRoOyB4ICs9IDgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVy
cHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7CisgICAgICAgICAgICAvLyBJ
bnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJpdCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJv
CisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNv
dXJjZURhdGEpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0
LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvCisgICAgICAgICAgICBfX20xMjhpIGxvID0g
X21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIF9f
bTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworCisg
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeF0pLCBsbyk7CisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2Fz
dDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlIHRoZSByZW1haW5kZXIKKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
b3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2Fk
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKQEAgLTQyOCw3ICs1MTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwor
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyMiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1
MzEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAwOwpAQCAtNDU5LDE3ICs1NDIsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0K
IH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAg
IGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsKICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwogCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RC
eXRlc1BlclBpeGVsOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8g
QkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5V
TEw7CkBAIC00OTcsNyArNTc5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07CkBAIC01MDgsNyArNTkwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcs
NyArNTk5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWQKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUyOCwxNyArNjEwLDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVs
ID0gbmF0aXZlPyAyOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
ICAgICAgICAgCiAgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZv
cm1hdAogICAgICAgICB7CkBAIC01NTcsNyArNjM4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBA
IC01NjYsNyArNjQ3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2kKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCsw
XTsKQEAgLTU3Nyw3ICs2NTgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7CkBAIC01ODYsNyArNjY3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
OCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjc4LDcgQEAg
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02
MDYsNyArNjg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcs
NyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
NDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
CkBAIC02MzgsNyArNzE5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaQogICAgIH0KIH0KIAot
dm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9
IE5VTEw7CkBAIC02NDcsNyArNzI4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3ggKiAzICsgMF07CkBAIC02NTgsNyArNzM5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0
OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NzgsNyArNzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0wKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTY4
OCw3ICs3NjksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAog
ICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwMSw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC03MjgsNyArODA5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0
NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0
Nyw3ICs4MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0g
c291cmNlW3hdOwpAQCAtNzU5LDcgKzg0MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc2OCw3ICs4NDksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2
MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAg
LTc4OSwxMiArODcwLDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAq
IDE2KTsKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMs
MTIgKzg4NCwxMiBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1j
cHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyNSAr
ODk4LDQzIEBAIHZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KSB7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zmc2V0ICUg
NCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVD
VCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRo
LCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6
ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpICsg
aW5wdXRTaXplICsgaW5wdXRQaXRjaDsKKwogICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAg
ICAgewogICAgICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERYVDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhUM0RhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIHVubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBGbGlw
Q29weURYVDFCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewpAQCAtOTQ4LDExICsxMDQ3LDkgQEAgc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1
QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QK
ICAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKIH0KIAotdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VS
VCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGgg
PT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7CiAg
ICAgQVNTRVJUKG91dHB1dFBpdGNoICUgOCA9PSAwKTsKQEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKICAg
ICAgICAgICAgICAgICB7CkBAIC05OTYsMTEgKzEwOTMsOSBAQCB2b2lkIEltYWdlOjpsb2FkRFhU
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQg
JSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lk
dGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5w
dXRQaXRjaCAlIDE2ID09IDApOwogICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwpA
QCAtMTAzNSw3ICsxMTMwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogMTYpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbnRzQWNyb3NzOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAgewpAQCAtMTA0NiwxMSArMTE0
MSw5IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQg
JSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdp
ZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJU
KG91dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBAIC0xMDg1LDcgKzExNzgsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0
OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAg
ICAgICAgICB7CkBAIC0xMjY3LDkgKzEzNjAsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAg
ICAgbURpcnR5ID0gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQotICAgIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpLAotICAg
ICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSks
CitUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtRDNE
VXNhZ2UodXNhZ2UpLAorICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9v
bCh1c2FnZSkpLAogICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7
CiB9CkBAIC0xMjgwLDcgKzEzNzMsNyBAQCBUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdl
KCkKIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewotICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7CiB9CiAKIGJvb2wg
VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAg
RDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQ
b29sOwogfQogCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtRDNEVXNhZ2U7Cit9CisKIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAt
MTQ1MCwxNSArMTU0OCw3IEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+
bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAg
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTU1Nywx
NiBAQCB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsK
LSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdp
ZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0K
KyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIH0KIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBp
eGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAg
ICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KIApAQCAtMTUyMSwzNyArMTU3NSw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
CiAKIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0g
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlv
ZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3Jt
YXQgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAg
ICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdo
dCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZz
ZXQgKyBoZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFn
ZS0+bG9jaygmbG9ja2VkLCAmdXBkYXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0
ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNp
emUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAg
ICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdo
dCwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRT
aXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAg
ICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTY5MywyNyBA
QCBib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJl
U3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4
dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3Jh
Z2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1
cmU7CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywg
RDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdl
dCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJp
YWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6
OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNh
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwg
bVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQog
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRl
eHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHdpZHRoLCBoZWlnaHQsIGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdl
dFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIApAQCAtMTY5NSw2ICsxNzI1LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9y
YWdlMkQoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEw
LDIwIEBAIEdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQot
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6Omdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1h
dCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBU
ZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXRE
M0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBd
LmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3Jt
YXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9p
ZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIw
NDksMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6
OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4
dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVy
dFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJU
YXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdl
dFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhT
dG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBk
M2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBu
ZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWln
aHQpOwogICAgIG1JbW11dGFibGUgPSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKQEAgLTIwNzQsOCArMjEwNyw4IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAg
ICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9I
QUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0
ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8ICht
TWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjE1Nyw5ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21w
cmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0
SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOworfQorCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0
dXJlKCkgY29uc3QKQEAgLTIxNzMsMTEgKzIyMTEsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQogICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgp
OwogICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9S
TUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJv
b2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmICht
VXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFU
IGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVz
YWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAg
ICB7CkBAIC0yMjE3LDkgKzIyNTUsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCgpCiAgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgp
OwogICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
OworICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxl
dmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1U
ZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTIyMzIsOCArMjI3MSw4IEBAIHZvaWQg
VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkKICAgICAgICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1Rl
eFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMxNSwxMiArMjM1NCwxNCBAQCBSZW5k
ZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCiAKICAg
ICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwogfQogCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7
CkBAIC0yMzMzLDYgKzIzNzQsMzMgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAg
CisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0Rl
cHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKworICAgIHVwZGF0ZVRleHR1cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVh
bGx5IGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbCgwKTsKIH0KIApAQCAtMjM1MywxOCArMjQyMSwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4
dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0
KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1B
VCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVz
YWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNE
VVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0
OCw4IEBAIFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAg
ICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpA
QCAtMjQ1NCwzNSArMjUyOCwzNiBAQCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgp
IGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJl
Q3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVp
Z2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFn
ZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwot
fQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVD
dWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpn
ZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjY1Nyw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9G
TE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkp
KQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjc1NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsK
LSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVy
biBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0CkBAIC0yNjk0LDExICsyNzY5LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNv
bnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNE
Rk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAK
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNk
dXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7
CkBAIC0yNzQyLDkgKzI4MTcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVu
ZGVyVGFyZ2V0KCkKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBd
WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNp
emUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAg
ICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZv
cm1hdCwgc2l6ZSwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAg
aWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjgzNSw4IEBA
IHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogCkBAIC0yOTI5LDEwICszMDA1LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVN
YXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSBzaXplCiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7
CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQs
IHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNh
Z2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRh
cmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVs
cywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwx
MiArMzEyNSwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCkKIAogICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNl
UHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtRmFjZVBy
b3hpZXNbZmFjZV07CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3Vy
ZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsK
ICAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKQEAgLTMwODcsNCAr
MzE2NSw0IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkKICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2
IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAg
ICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2Nr
KEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lk
IHVubG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBE
M0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFz
cyBJbWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2Fk
QWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NF
MihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBs
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZvaWQgbG9hZERYVDFEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERY
VDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZERYVDVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2
ICsxMjcsOSBAQCBjbGFzcyBJbWFnZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAg
ICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJl
Y3QpOworICAgIHZvaWQgdW5sb2NrKCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNp
emVpIG1IZWlnaHQ7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBj
bGFzcyBJbWFnZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxp
Y2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0
dXJlU3RvcmFnZShEV09SRCB1c2FnZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgp
OwogCiAgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7CiAgICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNh
Z2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFy
Z2V0KSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2UpOwogCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAg
IGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAg
ICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBA
QCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdy
YXBUKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0
VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBj
b25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2
IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29u
c3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEp
OyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZh
bHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUg
cmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmU7Ci0KICAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJ
bWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
OwpAQCAtMjU4LDcgKzI1Miw3IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4
dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQo
SURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJE
KGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9v
bCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9S
TUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTJEKCk7CiAKQEAgLTI4NiwxMSArMjgwLDEyIEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJn
ZXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQz
REZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRl
eEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VU
ZXhJbWFnZSgpOwogCkBAIC0zMDksNiArMzAzLDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1Ymxp
YyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpOwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRE
ZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIApAQCAtMzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRl
eHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29t
cGxldGUoKSBjb25zdDsKQEAgLTM0MSw3ICszMzksNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVT
dG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVs
cywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQg
dXNhZ2UsIGludCBzaXplKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgp
OwogCkBAIC0zNjksMTEgKzM2NywxMSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CkBAIC0zOTEsNyArMzg5LDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZQogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzk2LDEw
IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURp
cmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAg
LTQwNiw3ICs0MDcsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdl
dCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCk7CiAKICAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFn
ZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBA
IC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
dmVydGV4Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERh
dGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
VHJhbnNsYXQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNv
bnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJp
YnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5h
Y3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEp
OworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJp
bmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAog
ICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZl
ciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNo
aW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUg
OiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBE
MwogdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlw
ZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBm
b3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdl
bmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0
PEdMdWludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9G
SVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBE
M0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVj
dGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1
c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1h
bGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IGVlOGVjYTkuLjk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VT
aXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNz
ZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUp
CisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMg
ZnJvbSB0YWJsZSAzLjQuCitib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUpCit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KKworICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVN
CisgICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZB
TElEX09QRVJBVElPTgorICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAg
Y2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9S
R0I6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0Xzhf
T0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkp
CisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwog
ICAgIH0KIAotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0
ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlm
IChjb21wcmVzc2VkKQogICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0
aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9
IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVp
Z2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBj
b21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJl
c3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRh
cmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZv
cm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
IH0KKworICAgIGlmIChjb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQg
IT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAg
ICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgMCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5
b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBm
b3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRS
ZWFkRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyAr
MTIyNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xD
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnMKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2
b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENv
cHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTAogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJE
KGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwg
dGV4MmQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQs
IGxldmVsLCBHTF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVy
ZUZvcm1hdCA9IHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1h
dCkKQEAgLTE0MTQsNiArMTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0
NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVy
ZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJl
c3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1
LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgt
PmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBH
TF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4o
dGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQo
dGV4dGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJk
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3Vi
ZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBp
bnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdM
Y2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmli
dXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0
QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRp
b24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElO
S19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKSAhPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQogICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEg6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
IGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZv
cm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAK
ICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9n
cmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAm
YnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5p
Zm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1m
dihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5n
ZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihs
b2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0
MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVu
aWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGlu
dCogcGFyYW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9u
LCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0
MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVj
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8
Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3Jt
YXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8
dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0
LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNl
IEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
QEAgLTUwMzYsNyArNTI1NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAg
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFs
Zm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8v
IGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBA
IC01MDY2LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAor
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAg
aWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiAr
NTY3MCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
QU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAg
ICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUo
Zm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09
IDAgfHwgcGl4ZWxzID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAg
ICAgICB9CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNE
ZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lk
dGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1
ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6
OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFs
c2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1h
dCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYw
MTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJp
dihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYw
LDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU4NTIsNyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01
OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNv
dW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZv
aWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFs
aWRhdGUoKTsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDYzLDYgKzY4MjEs
NzkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0g
cHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9y
bWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1
ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQg
PSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmlu
YXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgs
IGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisg
ICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsK
ICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNv
bnN0IGNoYXIgKgogICAgICAgICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEV9LAogICAgICAgICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFO
R0xFfSwKLSAgICB9OworICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30s
CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKIAogICAgIGZvciAo
aW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lv
bik7IGV4dCsrKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagppbmRleCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIudmNwcm9qCkBAIC00MDEsNiArNDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAKaW5kZXggNjU4OWViMS4uNDQxMDVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwx
NyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJ
c0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQ
VEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGlu
IGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8g
VmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20g
dGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwot
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZv
cm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQp
CiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVu
dW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1J
TkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVO
VDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0K
QEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1
cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9F
WFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdS
QThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Cisg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9V
TlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAg
ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05P
TkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC03NjcsNiArNzQxLDcgQEAgRDNERk9S
TUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2FzZSBHTF9S
R0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZN
VF9BOFI4RzhCODsKQEAgLTk2NSw2ICs5NDAsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNE
Rk9STUFUIHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVw
dGhGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNl
Rm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKworYm9vbCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9S
TUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZN
VF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RN
VUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVf
Tk9OTUFTS0FCTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuaAppbmRleCA4ODIzOGRjLi5lZDE1MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkg
QEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0g
KChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9S
TUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wn
KSkpOworCiBuYW1lc3BhY2UgZ2wKIHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1
dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
YWxpZ25tZW50KQogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgs
IEdMZW51bSBmb3JtYXQpOwogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQo
R0xlbnVtIGZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9v
bCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFs
VGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCk7CiAKQEAgLTc5LDYgKzgyLDggQEAgR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQg
ZGVwdGhGb3JtYXQpOwogR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9y
bWF0KTsKIGJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJv
b2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0
aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBmMzU5NDFjLi41MWFiYTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjI5OCw2ICsy
Mjk4LDE1IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNw
cApAQCAtMjMxOCwyMCArMjMyNyw1MSBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3Bwc3RydWN0LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5jCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9MZXhlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlv
bi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3Bw
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVl
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1l
RnVuY3Rpb24uaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
U2VhcmNoU3ltYm9sLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvU2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdXRpbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCAwNWIzYTY2Li40MDFkYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTU4NDEsNiArNTg0MSwxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaC5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorICAg
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXApAQCAtNTg4NSw4ICs1ODk0LDMzIEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAorICAgIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5j
cHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbGV4ZXJfZ2x1ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgXAorICAgIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzLmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgg
XAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNz
aW9uUGFyc2VyLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAg
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0xleGVyLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKyAgICBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5o
IFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKyAgICBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4u
Y3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jIFwKQEAgLTU5MDAsNiArNTkzNCw3IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZl
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNw
cCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBc
CisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9u
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wu
Y3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9s
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNw
cCBcCkBAIC01OTA4LDYgKzU5NDMsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmggXAorICAgIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01OTE1LDggKzU5NTQsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTZWxlY3QuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdXRpbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTBlM2U1Yy4uZjcz
YzUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTQxLDYgKzM5NDEsOSBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0NvbW1vbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFu
dFVuaW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlYnVnLmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKQEAgLTM5NjAs
NyArMzk2MywyMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0
aF9saW1pdHMuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2xleGVyX2dsdWUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAor
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcGFyc2VyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXApAQCAtMzk3NSwxNCArMzk5MSwx
NiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9TaEhhbmRsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCkBAIC0zOTk1LDYgKzQw
MTMsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIFwKQEAgLTQwMTks
MTAgKzQwNDEsMTEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcCBcCkBAIC00MDMyLDcgKzQwNTUs
MTkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbWVtb3J5LmMgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZVBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
by5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="commit-queue"
          id="155580"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148375</attachid>
            <date>2012-06-19 11:38:14 -0700</date>
            <delta_ts>2012-06-19 14:31:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1050318</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi4yZDg1OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbik7Cit9CisKIHZvaWQgVFBhcnNlQ29udGV4dDo6
d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKSB7CkBAIC0yMjksNiArMjM0
LDExIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICB2
YV9lbmQobWFya2VyKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdh
cm5pbmcobG9jLCByZWFzb24sIHRva2VuLCAiJXMiLCAiIik7Cit9CisKIC8vCiAvLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KIC8vCkBA
IC0yNjUsMTMgKzI3NSwxMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeQogICAgIHN3aXRjaCgg
dHlwZSApewogICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAi
Tm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiJXMiLCAiIiApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAo
aW50KSIsICIiLCAiJXMiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMzIzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
KiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0
ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9u
ZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMzQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQq
IG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM3NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCog
bm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYg
c3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIs
IG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDcgKzQwOCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQx
NCw3ICs0MjQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhw
cmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MzAsNyArNDQwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJv
ckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYg
KGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkg
YWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJv
bmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00NDksMjQgKzQ1OSwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09
IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIp
OwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUg
cmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0
dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUzOSw1MSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVj
dG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVs
bCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNv
bnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUt
PmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBu
b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0
eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVu
b3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBj
b25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2Rl
LT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50
IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NTg1LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs2MTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3
ICs2MjUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMx
LDcgKzY0Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2NTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjU4LDcgKzY3MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAg
ICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYg
CiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVy
cyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNjkwLDE0ICs3MDIsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVF
cnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50
ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUg
YSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcyNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUo
dHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTczMSw3ICs3NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzc5LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3
IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFy
cmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBp
bmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgyOCw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUs
IFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVp
bHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MzUsNyAr
ODQ3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCAqbm9kZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogCiAgICAgICAgIGludCBmcmFnRGF0YVZh
bHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIo
KVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhh
dmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICIlcyIsICJnbF9GcmFnRGF0YSBjYW4gb25s
eSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg4Miw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBt
dXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRp
YWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04OTEsNyArOTAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JD
aGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiVzIiwiIik7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUg
PSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiwxMSArOTE4LDExIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlCiBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2Vk
IG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpLCAiJXMiLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzAsMTIgKzk4MiwxMiBAQCBjb25zdCBURnVu
Y3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBj
YWxsLCBib29sICpidQogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGlu
ZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5h
bWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJv
ciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAyNyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1CiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8KQEAgLTEwMzAsNyArMTA0Miw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0g
aW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24t
bWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTI0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwog
ICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIApAQCAtMTMwMSw3ICsxMzEzLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJt
VHkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzQ1
LDcgKzEzNTcsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1
cm4gMDsKQEAgLTEzODAsNyArMTM5Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQyOCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0
cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBh
bGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAg
ICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4K
ICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBu
b3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ2NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE1MDIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCmluZGV4IDNlMDU3NjMuLmEyYWUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC03Myw5ICs3MywxMyBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgCisgICAgICAgICAg
ICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAg
IHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgNSwgNikpKTsKKyAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgcmVj
b3ZlcigpOwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmluZGV4IGE2MDBjMDIuLjll
ZjRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5o
PgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBA
IC0xNTgsMTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5z
aWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjbwogCiAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRm
KGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQg
MHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1z
ZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
CiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAg
ICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0
ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2cs
IHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2Nh
dGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2Ug
aW4gZ3VhcmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxF
Ul9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFu
ZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJp
bmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rp
b25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rp
b25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0g
bm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBF
T3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQor
ICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5j
dGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBA
IC0yNCw2ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsK
K2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRl
bnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNw
ZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyBy
ZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBjbGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1
cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUq
IHJvb3QpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNj
b3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBz
aGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBt
YW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hh
ZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0
dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFm
ZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNh
biBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNo
YWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAg
ICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAg
IGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBA
QCBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAg
aW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKICAgICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5k
bGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZh
ckluZm8ubmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBu
YW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBl
ZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5
CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxv
dy4KICAgICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1h
eE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZv
Lm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBl
ZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmlu
ZGV4IGVkYmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8v
CiAvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAg
LTU2LDcgKzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5n
bGVkTmFtZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRO
b21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIw
XTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWRO
YW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIK
KworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwg
dGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMu
YmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQor
fQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBU
R3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rp
b25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVu
dCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1G
dW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBu
ZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJ
ZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVy
ICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAq
aXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGlu
dGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2Vy
dChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBj
b2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVp
Y2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgp
KSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9u
KGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOwor
ICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCog
bG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2Jh
Y2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxP
cCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2Fs
T3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7
CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9w
OjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxM
OworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5n
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcw
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIzNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZTsKKworVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vo
b2xkZXIKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVp
bGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQo
bm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAg
c3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5j
dGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihp
bnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdl
IGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFn
Z3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4g
ZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlr
ZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAv
LyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3Vt
ZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGlu
dGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJn
dW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0g
Kml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAg
ICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3Jl
YXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAg
ICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1
bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNh
bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9s
IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQg
c3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlp
ZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBm
dW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMg
dGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25t
ZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0
aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25D
YWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVD
aGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVn
aW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRo
aXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJl
bnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5n
LgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisK
KyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5k
ZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBz
eW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHko
KSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9CisgICAgICAgICZUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9w
KCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKwor
Ym9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1C
aW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmlu
YXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5h
cnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNh
bE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAg
ICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1M
ZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9s
ID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWlu
dGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50
b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVl
IG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAg
ICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBu
b3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAh
PSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1Jp
Z2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRl
cm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMs
IGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBz
eW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50
LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNz
ZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25t
ZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIg
dmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxs
CisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5p
bnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3At
PmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0
VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdy
YXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJt
TG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5
cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVy
bUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmln
aHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rp
b24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0
TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVT
ZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1
ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
VHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJt
RmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBp
bnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1D
b25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29u
ZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25k
aXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBo
TG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAg
IGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGlu
dGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+
Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlz
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9k
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5v
ZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rl
cy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJl
bnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5v
ZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTg0IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVh
dGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0
aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xh
c3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRl
bmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0
ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisgICAgLy8KKyAgICAvLyBG
b3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRp
b25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUu
CisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVh
Y2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5vZGVzLgorICAgIC8vCisg
ICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFN0
YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAg
ICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNl
dCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkg
PyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBu
b2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Cisg
ICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMg
aXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAg
ICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKworICAg
ICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgICAgIG5l
d1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAg
ICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBh
cmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNz
aWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sg
dGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVu
dE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbm9kZVNldHMudG9wKCkt
Pmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAg
ICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGlu
c3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwg
aXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWlu
dGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5t
Tm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5l
cigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRT
dGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlz
IGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBX
aGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBu
b2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2Rl
IHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNzaWdubWVudC4KKyAgICAv
LyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBp
bnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRy
ZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2Nv
cGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
IHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtS
aWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1
c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5bWJvbC4KKyAgICAvLwor
ICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgY2xhc3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1YmxpYyBUR3JhcGhTeW1ib2wgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBUU3VidHJlZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhT
eW1ib2woTlVMTCkge30KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgVFN1YnRyZWVQbGFj
ZWhvbGRlciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVy
IGtSaWdodFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1YnRyZWVQbGFjZWhvbGRlciYgc3VidHJl
ZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJv
bHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0
bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7
CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAg
ICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2sm
IGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOwor
ICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBn
cmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAg
ICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJp
bmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBURGVwZW5k
ZW5jeUdyYXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5
bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZmYzQ4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dElu
ZGVudGF0aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERlcHRoKCk7ICsraSkK
KyAgICAgICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgb3V0cHV0
SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdl
dEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKKyAgICAgICAgICA8PCBwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0
U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAgICAgICAgPDwgc3ltYm9sLT5nZXRJbnRl
cm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJzZWxlY3Rpb25cbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9vcCBjb25kaXRp
b25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsK
KyAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAi
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbVNpbmsgPDwgIlxuIjsKKwor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFw
aE5vZGUqIHN5bWJvbCA9ICppdGVyOworICAgICAgICBtU2luayA8PCAiLS0tIERlcGVuZGVuY3kg
Z3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAg
ICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtU2luayA8PCAiXG4iOworICAg
IH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKyNkZWZpbmUgQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZv
U2lua0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lk
IG91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0
ZToKKyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBt
U2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ODU3NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8g
VGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHRocm91Z2ggdGhlIGdy
YXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3ZvaWQgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhU
cmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQorCit2b2lkIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKworICAgIGdyYXBoVHJh
dmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOworCisgICAgLy8gVmlzaXQgdGhlIHBhcmVudCBub2Rl
J3MgY2hpbGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1EZXBlbmRlbnRO
b2Rlcy5lbmQoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUq
IG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNlci0+aXNWaXNpdGVkKG5v
ZGUpKQorICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0K
KworICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOworfQorCit2b2lkIFRHcmFw
aEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVudCh0aGlzKTsKKyAgICBU
R3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdy
YXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRGdW5jdGlvbkNhbGwodGhp
cyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQor
Cit2b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFNlbGVjdGlvbih0
aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9vcCh0aGlzKTsKKyAgICBU
R3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKaW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBA
IC04LDkgKzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19p
bml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2Zp
bmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3Nj
YW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVy
biBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmlu
ZGV4IDlhMDM5NGIuLjg4ZTdjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRI
RSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogCiAldG9wewogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBAQCBPICAgICAgICAgICBbMC03XQogImV4
dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJu
YWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2Ui
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY3LDcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAidW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAi
aW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRw
dXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEy
ICsxNzUsMjEgQEAgTyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
ZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNCw3IEBAIE8gICAgICAg
ICAgIFswLTddCiAKIDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7
IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQotMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFs
aWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Ciswe0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1
cm4gMDt9CiB7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0
LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQpAQCAtMjU2LDcgKzI2Nyw3IEBAIE8gICAgICAgICAgIFswLTdd
CiAKIFsgXHRcdlxuXGZccl0gICB7ICB9CiA8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRl
ckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KLTwqPi4gICAgICAgICAgICB7IGNvbnRleHQt
Pndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7
IH0KKzwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3du
IGNoYXIiLCB5eXRleHQpOyByZXR1cm4gMDsgfQogCiAlJQogCkBAIC0yNzgsMjAgKzI4OSwyMCBA
QCB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHZvaWQgQ1BQV2FybmluZ1Rv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIp
OwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtNDI3LDcgKzQzOCw3IEBAIHZvaWQg
SGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQog
fQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hh
ciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNy
YzsKQEAgLTUzNSw3ICs1NDYsNyBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIp
IHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5
eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0
cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4
dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVz
ZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVy
biAwOwogfQpAQCAtNTQ0LDkgKzU1NSw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQt
PkFmdGVyRU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1
bmV4cGVjdGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJl
YXNvbiwgInVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIH0KQEAgLTU2OCwxOSArNTc5LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsK
IH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5l
cik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nh
bm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKICAgICAKICAgICAvLyBJbml0
IHByZXByb2Nlc3Nvci4KICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hT
dHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAg
ICAgPSBjb3VudDsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAg
cmV0dXJuIEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQppbmRl
eCBkNmM4ODY5Li5mYTRhZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKQEAgLTg0LDIxICs4NCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZS
QUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAogICAgIH0gIFwKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAg
ICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2YXJpYWJs
ZV9pZGVudGlmaWVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYg
KCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0
ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcmltYXJ5X2V4
cHJlc3Npb24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAg
ICAgICAgLy8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwpAQCAtMjM1LDkgKzIzNSw5IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4
KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9s
Tm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJy
YXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAg
LTMxMCw3ICszMTAsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5
IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXki
LCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAg
LTM1NSw3ICszNTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5v
dCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MDUsMTMgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5
cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJl
IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9y
LCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJl
cXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAk
My5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIGZ1bmN0aW9u
X2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBl
ZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5n
ZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAn
aW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVy
cm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAi
Iik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9
CkBAIC02NDcsNyArNjQ3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVm
YXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVs
bCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29u
c3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0
eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMDcsMTIgQEAg
ZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhh
dmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3Ry
aW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3Zl
cmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmll
clN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dp
dGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1l
dGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICco
dm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
JDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIGZ1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVs
bHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQx
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxs
b3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
ciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZp
ZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5x
dWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4u
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUg
KyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQx
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAn
dm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
JDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBpbml0X2RlY2xhcmF0
b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAg
ICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMjk4
LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQi
LCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIu
c3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0MzgsNyBAQCBzaW5nbGVfZGVjbGFy
YXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhh
dmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2Yg
aXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDUwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90
eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAo
JDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3Vw
cG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZh
bHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY2
Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVD
VCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xNzE5LDcgKzE3MTks
NyBAQCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCok
JClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0u
dHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1
cmU6IiwgInN0cnVjdCIsICIlcyIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk2NiwxNCArMTk2NiwxNCBAQCBmb3JfcmVzdF9z
dGF0ZW1lbnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAg
ICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBp
biBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IEJSRUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBz
dGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEu
bGluZSk7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJO
IFNFTUlDT0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsx
OTg5LDEwIEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5
cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3
ICsyMDM3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAt
MjA0Nyw3ICsyMDQ3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA3
OSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2
YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAg
ICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJu
IHR5cGUgIT0gdm9pZCA/CiAgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHBy
b2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKICAgICAgICAgaWYgKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0
LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAiJXMiLCAkMS5mdW5j
dGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5OS4uZGMxZGYxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCkBAIC0xLDYgKzEsNiBAQAogI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE5MSw2ICsxOTEsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNj
YW5fdDsKIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwog
I2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5l
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQog
I2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjA0LDcgKzIwOSw3IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogICAgICAqLwogICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAg
ICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAg
ICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAtLXl5bGluZW5vO1wKQEAgLTIyNiwxMSArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAKICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJl
ciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJ
ICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9j
aGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQg
c2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXlj
b25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAog
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5
cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMs
OCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2db
XSAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNf
aW5mbwpAQCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2lu
dDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAg
MTM2LCAgMTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAg
ICAgMTM1LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAg
IDkwLAotICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5
LCAgMTIxLCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAg
MTE2LCAgMTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5
LCAgIDk5LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAg
ICAwLCAgICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0
LAotICAgICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMs
Ci0gICAgICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAx
MDQsICAgNTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAg
MCwgICA5NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4Nywg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1
MywgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAg
OSwgICAzMywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICAzNiwKLSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0
MiwgICA0MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA4MywgICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAg
IDgxLCAgIDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1
LCAgIDkwLCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAg
IDkwLAotICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYx
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAg
IDY0LCAgIDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAg
IDkwLCAgIDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDU0LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0
LAotCi0gICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAg
OTAsICAgNDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAK
KyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1
MywgIDE1MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwg
IDEzMCwgIDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0
NSwgIDEzMiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAg
ICAgIDE1MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwg
IDExNiwKKyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEw
NCwgIDEwMCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwg
IDEyNSwgIDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgMTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAw
LCAgICAwLCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAg
IDAsICAxMDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAg
MzQsICAgMzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgNTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgMzYsICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAg
NDIsICAgNDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA4MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwK
KyAgICAgICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5
OCwgICA5OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5Nywg
ICA5OCwgICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2
NiwgICA2MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1Nywg
ICA5OCwgICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwg
ICAzMSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwg
ICA2NywgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2
LCAgIDk2LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDQ2LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAg
IDk4LAorICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4
LCAgIDkxLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAg
IDkzLCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KQEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwg
ICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwg
ICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAy
NCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywK
LSAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MiwgICAzMSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzNSwgICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAg
MSwgICAzOSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAg
IDMxLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYx
LCAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIz
LCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4
LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQs
ICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisg
ICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAs
ICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0
NzgsMjE0IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X21ldGFbNjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAg
NCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
NDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAg
IDAsICA2MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2Mjgs
ICA2MjgsICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAx
NjMsICA1OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2Mjgs
ICA2MjgsICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0g
ICAgICAxMzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQs
ICAxODEsCi0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2
MjgsICA2MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2
MjgsICAgIDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAs
ICA2MjgsICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAg
IDAsICA2MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAg
ICAgIDU2OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwg
IDU1MCwKLSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0
OCwgICAgMCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwg
IDUyOSwgIDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5
MiwgIDUzMCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywg
IDUyOSwgIDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAg
MCwgIDMyMiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAg
IDUxNCwgIDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUy
MCwKLSAgICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwg
IDUxMSwgIDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUw
MSwgIDUwNCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4Niwg
IDQ4MywgIDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAg
NDcyLCAgNDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0
LCAgNDY5LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAg
MzcyLCAgMzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0
LAotICAgICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAg
NDYzLCAgNDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1
LCAgNDQ0LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2
LCAgNDQwLCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAg
ICAwLCAgNDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAw
LCAgNDE4LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAg
IDAsICAgIDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUs
ICA0MTgsICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0
MTMsICA0MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAs
ICAzODksICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0g
ICAgICAzODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAz
ODUsICAzODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAs
ICAgIDAsICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAz
NjQsICAgIDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgs
ICAgIDAsICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAg
ICAgIDIzOCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4Niwg
IDE3MywKLSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQx
OSwgIDQyMywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAg
NjgwLCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgx
LCAgNjUzLCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAg
NjUxLCAgNjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgx
LCAgMTI4LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAg
MTczLCAgMTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0
LAorICAgICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjgxLCAgNjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAg
ICAwLCAgNjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAg
NjgxLCAgNjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2
MjEsICA2MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIs
CisgICAgICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAg
IDAsICAyMTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIs
ICA1OTYsICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1
NzcsICA1ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1Njks
ICA1ODEsICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAg
IDAsICAzNDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAs
ICA1NjYsICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisg
ICAgICA1NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUs
ICAgIDAsCisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1
MzksICA1NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYs
ICA1MzcsICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywg
IDUzNywgIDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUy
OSwgIDI4MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywg
IDM4MSwgIDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAg
ICAgIDUwOCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwg
IDUwMywKKyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUw
MCwgIDM2NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUw
MCwgIDQ5NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwg
IDQ4MCwgIDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4
MywgIDQ4MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAg
IDQ4MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2
NiwKKworICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAg
ICAwLCAgICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYw
LCAgNDY1LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAg
NDYxLCAgNDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAw
LCAgNDQ2LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAg
NDQ5LCAgICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAw
LAorICAgICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIw
LCAgNDMyLCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAg
NDI3LCAgNDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIz
LCAgNDIyLCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAs
ICA0MzEsICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQs
CisgICAgICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAz
OTEsICAzODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcs
ICAzMDQsICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAy
NjIsICAgIDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTks
ICAxMTMsICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAx
NjEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0g
ICAgICA0MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAg
NDU4LCAgICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NTgsICA0NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAg
IDAsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAs
ICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAg
MTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAg
ICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAg
MzAsCi0gICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAg
NDIsICAgMzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAg
NTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEs
ICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAg
MjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAs
CisgICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAg
MzMsICAgMzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEs
ICAgNDIsICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAg
NDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQs
ICAgNTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAg
OTEsICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAg
ICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
ICAgIDgsCiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAg
ICAgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA5MywKLSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEy
MCwgICA2OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwg
ICA3NywgICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4Mywg
ICA4NSwgICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQy
NCwgICA4MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAg
ICAgMTAzLCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAg
MTA1LAotICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5
LCAgNDIyLCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAg
MTM4LCAgMTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5
LCAgMTg0LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAg
NDE4LCAgMTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0
LCAgIDc0LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAg
MjMwLCAgNDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAg
MjgyLCAgNDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAg
NDEyLCAgMTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAs
ICAgNzgsICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAy
MTEsICAzMDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEs
Ci0gICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcs
ICAyMjEsICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTQsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0g
ICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYs
ICAzMTcsCi0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwg
IDM5NSwgIDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1
OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1Miwg
IDM4OSwgIDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4
MywgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwg
IDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAg
ICAgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1Nywg
IDM1NiwKLSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwg
IDMzOSwgIDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywg
IDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAg
MzExLCAgMzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAg
ICAgMjkzLCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAg
Mjc4LAotICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4
LCAgMjY3LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAg
MjU5LCAgMjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAg
MjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMx
LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAg
MjE0LCAgMjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAx
LAotICAgICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAg
MTkyLCAgMTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3
LCAgMTc2LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAx
NjAsICAxNTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUs
ICAgODksICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAg
IDkzLCAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIw
LCAgIDY4LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAor
ICAgICAgIDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5
LCAgIDgwLAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3
LCAgMTQzLCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQs
ICAxMDIsICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAx
MTYsICAxMTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcs
ICAxNDksICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisg
ICAgICAxMzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAs
ICAxOTIsCisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAx
OTMsICA0NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0
NTIsICAxODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODks
ICAxNTUsICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAy
ODYsICAyODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1Niwg
ICA4MSwgIDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgICA4MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0
NiwgIDIyMiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAg
IDIyMywgIDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwg
IDQ0MiwgIDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwg
IDQzOCwgIDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAg
NDA1LCAgNDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5
LCAgNDI4LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDU4LCAgIDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUz
LCAgNDI0LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAg
NDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAx
LCAgNDAwLCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAor
ICAgICAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzgyLAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAz
NjYsICAzNjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgs
ICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAz
NDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEs
ICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisg
ICAgICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksCisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAz
MDUsICAzMDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEs
ICAyOTAsICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAy
NzcsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjks
ICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAy
NTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAg
ICAgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwg
IDIzOSwKKyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIy
OSwgIDIyOCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywg
IDIxMiwgIDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIw
MiwgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwg
IDE5MSwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3
NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAg
IDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
MCwKKyAgICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwg
ICA2NCwgIDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAg
MTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4
Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9
CiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAg
MzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUs
ICAgMzUsICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0g
ICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMs
ICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAg
NDEsICA0MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYs
ICAgNTUsICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwg
ICAzNywgICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0
OSwgICAzOSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwg
IDQyMCwgICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAg
ICAgIDEzNSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwg
IDEyMCwKLSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3
NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5
MiwgIDE5MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3
OCwgIDQxMCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAg
ICA4MCwgIDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEy
MiwKLQotICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0
LCAgMjM0LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4
LCAgMTUxLCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUz
LCAgIDgzLCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAg
MzkzLCAgMTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1
LAotICAgICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMjE5LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEs
ICAzOTEsICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAz
NzYsICAzNzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAz
NjksICAzNjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAz
NDIsICAzNDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAz
MjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUs
ICAyOTQsICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0g
ICAgICAyNzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUs
ICAyNjQsCi0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTAsICAyNDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIz
OCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwg
IDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIw
OSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwg
IDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAg
ICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4Miwg
IDE4MSwKLSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3
MiwgIDE3MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2Mywg
IDE2MiwgIDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEz
OCwgIDEzNywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDEx
NywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAg
ICAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAg
IDk5LAotICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUz
LCAgIDQ4LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAg
ICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwKKyAgICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwg
ICAxNywgICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAz
MywgICA0MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwg
ICA1MSwgIDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAg
NDUzLCAgIDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2
LAorICAgICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAg
IDM5LCAgIDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5
LCAgIDUwLCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAg
IDQ3LCAgIDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5
LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4
LCAgIDc4LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAor
ICAgICAgMTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0
LCAgIDc0LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAg
IDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4
LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzks
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAg
ODAsICAgODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjks
ICA0NDMsCisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0Mzks
ICA0MzgsICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAyNDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUs
ICA0MzQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAx
NTUsICAyNDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsCisKKyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1
NSwgIDI1NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywg
IDQyNiwgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4
OCwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAg
IDQ2MiwgIDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQw
NCwKKyAgICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5Miwg
IDM4OSwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3
NywgIDM3NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2Miwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0
OSwgIDM0OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAg
MzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAx
LAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAg
MjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcy
LCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAg
MjYzLCAgMjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4
LCAgMjQ0LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAg
MjMyLCAgMjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2
LCAgMjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAor
ICAgICAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAx
NzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAs
ICAxNjksICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAx
NDUsICAxNDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYs
ICAxMzQsICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisg
ICAgICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsCisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAx
MDQsICAxMDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAg
NDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29s
ZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwg
MCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAg
ICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhp
bmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJF
SkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC04MjEsOCArODQyLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVG
RkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwog
ICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxl
bmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7
CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3Rh
cnQ7CkBAIC04NzUsNyArODk2LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVf
dCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDcsMTMgQEAgeXlfbWF0Y2g6
CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQy
NiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOwor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDIsMjUyIEBAIFlZX1JVTEVfU0VUVVAK
IAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQ
CiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6Citj
YXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2Ug
MTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAx
OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0
YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwg
eXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2Ug
OTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6
CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0
PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgor
Y2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2Fz
ZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5
OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2Fz
ZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
RVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6
CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNl
IDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5U
eXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJu
KExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxF
X1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJF
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1
cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2Fz
ZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFS
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2Ug
MTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xF
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgor
Y2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsg
CiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU1LDEyIEBAIFlZX1JVTEVfU0VU
VVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoK
K2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBy
dWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRj
aCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc2
OSwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJ
RUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9
Cit7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQpOyBy
ZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRV
UAogRUNITzsKIAlZWV9CUkVBSwpAQCAtMTkwOSw3ICsxOTYyLDcgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCWVsc2UKIAkJewotCQkJaW50
IG51bV90b19yZWFkID0KKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CiAJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCiAJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCkBAIC0xOTIzLDcgKzE5NzYsNyBAQCBzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJ
CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OwpAQCAtMTk1NCw3ICsyMDA3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8K
IAkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVy
X3RvX21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsK
KwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAogCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CiAJCX0KQEAgLTIwMTYsNyAr
MjA2OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2
ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIw
NDUsMTEgKzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChp
bnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJy
ZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRf
c3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cjsKIAkJCSsreXlnLT55eV9jX2J1Zl9wOwogCiAJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKQEAgLTIxMDMsNyArMjE1Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgogCQkJCQl7CiAJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJl
dHVybiBFT0Y7CisJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQogCQkJCQkJWVlfTkVXX0ZJTEU7CkBAIC0yMzY2LDcgKzI0MTks
NyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogICovCiBz
dGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxNywxMSBAQCBZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVm
OwotCXl5X3NpemVfdCBuOwotCWludCBpOworCXl5X3NpemVfdCBuLCBpOwogICAgIAogCS8qIEdl
dCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVP
QidzLiAqLwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjYxOSw3ICsyNjcxLDcgQEAgRklM
RSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCiAgKi8KLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreXlfc2l6ZV90
IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7
CkBAIC0yOTEyLDIwICsyOTY0LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC0zMDYxLDcgKzMxMTMsNyBAQCB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5z
LCBpbnQgbnVtVG9rZW5zKQogICAgIH0KIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcp
Cit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMTY5LDcgKzMyMjEsNyBAQCBpbnQgY2hl
Y2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5
bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXll
eHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzE3OCw5ICszMjMwLDkgQEAg
dm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikg
ewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRl
eHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0
KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzIwMiwxOSArMzI1NCwx
NSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
eXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVP
RiA9IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMg
PSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAg
ID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJM
ZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2Nh
bkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAs
IGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLjA5MmEz
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmNwcApAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwyMSBAQCBleHRlcm4gdm9pZCB5eWVy
cm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5l
IEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAog
ICAgIH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
ICAgICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZy
YWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OyAgXAogICAgIH0gIFwKIH0KQEAgLTIxNTcsNyArMjE1Nyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CkBAIC0yMTY2LDcgKzIxNjYsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBj
YW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMjAxLDcgKzIy
MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25z
dGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwpAQCAtMjI0Nyw5ICsyMjQ3LDkgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTIzMzAsNyArMjMz
MCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAi
Iik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQyNSwxMyArMjQyNSwxMyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQg
aW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQg
c2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmll
bGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVm
dCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUg
Y2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJv
ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjU4Niw3ICsyNTg2LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTc6CiAKICAgICB7Ci0g
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1l
dGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9y
dGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICA7fQpAQCAtMjY5Nyw3ICsy
Njk3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0zMTkxLDEyICszMTkxLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjUzLDcgKzMyNTMsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZp
cnN0IGlzIHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBl
eGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQg
dHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
LnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCB5eXJl
ZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBm
dW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVk
IGFzIHdlbGwuLi4KQEAgLTMyODksNyArMzI4OSw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZykpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQg
JiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBh
cyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzUzOCw3ICsz
NTM4LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgOTg6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBl
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSk7CkBAIC0zNjE2LDcgKzM2MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MzUsNyArMzYzNSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtMzY0NiwxOSArMzY0NiwxOSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAgKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
OwpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0
ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtMzk2MCw3ICszOTYw
LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNF
eHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJl
Y3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpLT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0g
KCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5h
bWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBp
biBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVM
aXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0Iiwg
IiVzIiwgKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRG
aWVsZE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjEsNyArNDQyMSw3
IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wQ29udGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDMyLDcgKzQ0
MzIsNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwpAQCAtNDQ0NCw3ICs0NDQ0LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDQ1NiwxMCArNDQ1NiwxMCBAQCB5eXJlZHVjZToKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVu
Y3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5u
b3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
KSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxp
bmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDUx
Nyw3ICs0NTE3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDU1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTg5LDcgKzQ1ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8/PyBD
aGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lk
ID8KICAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBv
biBpbnRlcm1lZGlhdGUgY29kZQogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICIlcyIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCA1
NDQxNTU3Li40MDQxYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2
b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
VXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGlt
aXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyBy
ZXR1cm4gb3B0aW1pemU7IH0KQEAgLTUzMyw2ICs1MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9M
ZWZ0KSwKICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZl
cnNlcigpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KSB7fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4zOTE1OGQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAg
ICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07
CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAs
IDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRh
YmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5k
SGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAgIGlm
IChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsK
ICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRm
KHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29s
bGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBj
b2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFY
X0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisg
ICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlk
ZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRh
YmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBA
IC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
KQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5l
eHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAm
YXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVk
LCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFi
bGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dN
c2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05T
OyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291
bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFi
bGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAg
LTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQot
CQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJCWRl
ZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICog
eXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNo
YXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1
cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUgKGFs
bFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1lc3Nh
Z2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7
CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9IGVs
c2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAgICAg
dG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7
CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20p
IHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxvYyBs
b2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9T
eW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNyb1N5
bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFsID0g
ezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAgICBtYWNyby5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2YWwuc2NfaW50ID0gdmFs
dWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBzbnBy
aW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUp
OwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7CiAg
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwogICAgIHN5bWJvbCA9IEFk
ZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4
OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQog
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7CiAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNwcmlu
dGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
IHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAi
JWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RB
TlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChhdG9tID09
IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVt
YmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFs
cHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAg
ICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvCiB2b2lkICBDUFBXYXJu
aW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2Vz
IGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1U
b2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3Ry
aW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5n
Lgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBh
bGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciop
OyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGlj
ayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3Qg
Y2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQg
bGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2OSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBwOjpE
aWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0aWNz
KiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJvb2wg
Q29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXlsdmFs
cHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
IHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4KElu
cHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVyKiBz
cmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6
VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNoICh0
b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRlIHNy
Yy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBmcmVl
KHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0gRU9G
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAgICAg
ICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9JREVO
VElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgor
ICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUuY19z
dHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENvcHlT
eW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9GTE9B
VENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5DOgor
ICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9P
UDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAgICBy
ZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJldCA9
IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6
CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0FE
RF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJfQVNT
SUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxfQVNT
SUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjoK
KyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lHTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJR047
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5lKTsK
KyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhlciA9
IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7CisgICAg
ICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
SW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0
U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7Cisg
ICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+
ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKworICAg
IHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklucHV0
U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2RlZmlu
ZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVt
b3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQ
b29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTljYzQz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGlj
IGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAg
ICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSBy
ZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVu
ZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1MZXhl
cihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0K
LQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1ib29s
IENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8vIFRP
RE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBub3Qg
bmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0K
LWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQp
Ci17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1
dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1
aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3VjY2Vz
cyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJu
IHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2Nh
dGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotewot
ICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBwYXJh
bWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChuYW1l
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQotICAg
IHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qg
c3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAgewot
ICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0K
LQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0KCkK
LXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVs
ZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7
Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lkIENv
bnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZh
bHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZh
bHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5ldyBz
dGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
ID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVdID0g
bmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRl
ICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJs
aWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQoKTsK
LSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0
KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJlYWRJ
bnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0KCkg
eyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46Okxv
Y2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAg
ICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5lTWFj
cm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQoY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1h
Y3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIo
KTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1hY3Jv
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2UoKTsK
LQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlucHV0
OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBE
ZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0
PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9
CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEg
Y291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsK
K30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkK
K3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAg
ICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQg
PCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAsMCAr
MSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19I
XworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJj
ZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNz
YWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcg
YW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1Ymxp
YzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5U
RVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURfQ0hB
UkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwK
KyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9C
RUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZF
LAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAg
VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisgICAg
dmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAgICBX
QVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVy
KCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNU
SVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2
ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50
cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFz
c2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlh
dGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAgdmly
dHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9y
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2Yg
Zm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdt
YShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVD
VElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRl
ICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlm
Iik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5h
bWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2Vy
dmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4
ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tl
bikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgICAg
IG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxl
eGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0
b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAg
IG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAg
ICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcjJykg
cGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdcbicp
OworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAg
ICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgICAg
IHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFyc2VJ
Zm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQor
ICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAg
ICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24odG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24p
CisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9rZW4p
OworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAgd2hp
bGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
PT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVP
Rl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVm
aW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVS
ZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3Jv
OworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRv
a2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAg
ICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFj
cm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAodG9r
ZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
eworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5l
Y2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxz
byBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBh
cmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwor
ICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJl
ZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYm
ICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5p
bnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2Vu
LT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgbU1h
Y3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBU
T0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVy
KTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNy
b1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25QYXJz
ZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgo
dG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lvblBh
cnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBUT0RP
KGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBs
ZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVu
dCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUu
CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihU
b2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBh
c3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKworICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVF
cnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFn
bWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJB
R01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAg
ICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAg
ICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFH
TUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUu
CisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+
IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24s
IG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9O
QU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAg
IGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAg
IGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlk
ICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
aWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JF
SEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lP
Tl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVS
U0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYg
KHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRp
b24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2Vu
KiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2Vy
dCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIgbWFj
cm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1h
Y3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNz
IERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsK
KworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJl
Y3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKwor
ICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJz
ZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZk
ZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Cisg
ICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9r
ZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9T
ZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVy
KiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmY4Mzk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApAQCAtMCwwICsxLDE5MTUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdO
VSBCaXNvbiAyLjQuMi4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNv
bidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k
YXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl
LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor
LyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0
aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9u
IGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2Us
IHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9y
IHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMg
YSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIg
b3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1
c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMg
dG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3
aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNl
cHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZl
cnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3
cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2lu
YWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVm
aW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJp
bmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBs
b2NhbAorICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBi
eSB1c2VyIG1hY3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMg
d2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1i
b2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJl
bG93LiAgKi8KKworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNP
TiAxCisKKy8qIEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
NC4yIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5
YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1
c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICov
CisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZ
TFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBu
YW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4
ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2RlZmlu
ZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIK
KyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAg
IHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2lu
Y2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3Bh
Y2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
OworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQq
IHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KGludCog
bHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAg
Ki8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5h
YmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NF
CisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNl
bHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRo
ZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9L
RU5fVEFCTEUgMAorI2VuZGlmCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZ
UEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBz
eW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cg
YWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQ09OU1RfSU5UID0g
MjU4LAorICAgICBPUF9PUiA9IDI1OSwKKyAgICAgT1BfQU5EID0gMjYwLAorICAgICBPUF9ORSA9
IDI2MSwKKyAgICAgT1BfRVEgPSAyNjIsCisgICAgIE9QX0dFID0gMjYzLAorICAgICBPUF9MRSA9
IDI2NCwKKyAgICAgT1BfUklHSFQgPSAyNjUsCisgICAgIE9QX0xFRlQgPSAyNjYsCisgICAgIFVO
QVJZID0gMjY3CisgICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYg
ISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRl
ZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNM
QVJFRCAxCisjZW5kaWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7
CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisj
aWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBj
aGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0
eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWlu
dDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2
IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZp
bmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90
CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRp
ZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZ
XworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJM
RV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUi
LCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8o
bXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlh
YmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVm
aW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBk
ZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlv
biwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAg
Ki8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IHl5
aSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKKyNlbmRpZgor
eworICByZXR1cm4geXlpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8
fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxs
b2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tf
VVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18K
KyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVm
aW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZF
UgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
IyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMg
ICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMg
aWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3
YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICov
OyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAg
ICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJv
dHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFs
bCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxv
Y2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIK
KyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBz
dGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8q
IHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZ
U1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBp
Zm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9D
IHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5l
ZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0gg
MQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZ
TUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxs
b2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVu
ZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQor
IyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlm
CisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisK
KworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1
c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19U
UklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBz
dGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19h
bGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQor
CisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9i
amVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAg
IG5vdCBvdmVybGFwLiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAor
ICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJv
bSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAg
ICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlp
ID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5
aV07CQlcCisJfQkJCQkJXAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5k
aWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcg
b25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZl
IHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5k
IFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2Ug
WVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3Rh
Y2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJ
CVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdi
eXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXpl
KTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMg
PSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwK
Kwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJ
CQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0g
U3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklO
QUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUg
WVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
KyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxl
cy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0
YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgp
IC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVm
aW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlU
UkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRP
SyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxF
WF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYs
ICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQ
UkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIg
WVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1td
ID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1
LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAg
IDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUs
ICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBg
LTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAg
ICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5
LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjks
CisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAg
MjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwg
ICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlS
TElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5l
ZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAg
MCwgICAgNzQsICAgIDc0LCAgICA4MSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEsICAgIDk0
LCAgICA5NywKKyAgICAgMTAwLCAgIDEwMywgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTUsICAg
MTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LAorICAgICAxNDAsICAgMTUzLCAgIDE1NiwgICAxNTks
ICAgMTYyLCAgIDE2NSwgICAxNjgKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJP
Ul9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3Ry
aW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5h
bHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRp
YyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIk
dW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAgIide
JyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwgIic+JyIsICJPUF9HRSIsICJPUF9M
RSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicrJyIsICInLSciLCAiJyonIiwgIicvJyIs
ICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIsICInKCciLCAiJyknIiwgIiRhY2NlcHQi
LCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5U
CisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAy
NTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwg
ICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAor
ICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307Cisj
IGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1
bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQor
eworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywK
KyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVs
ZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vz
bid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVm
YXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0
W10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwg
ICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIs
ICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsK
KworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFD
VFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmlu
ZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEs
ICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAg
ICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEw
LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEs
CisgICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAg
LTIKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBz
dGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBu
ZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRl
LiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBz
eW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAg
IDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAg
ICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVj
a1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
Cit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0
aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcs
ICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVz
ID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVN
UFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFj
Y2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJP
UgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5
ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJh
bnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2Ug
R0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93
ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQg
aXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3
aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVm
aW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMg
aXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1
bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5n
LCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZv
ciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3
YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09WRVJJ
TkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJ
CQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEp
CQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAg
ICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRF
ICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3Rv
IHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fu
bm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlc
Cit3aGlsZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJS
Q09ERQkyNTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZy
b20gUkhTWzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0
aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhT
WzBdIChhbHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChS
aHMpW0tdKQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAo
TikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
Kwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywg
MSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChS
aHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhT
TE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZ
WVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJ
CQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJl
bnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJ
CQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0J
CVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlc
CisgICAgd2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQg
LS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBu
b3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29u
J3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cu
ICAqLworCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJ
XAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAg
IChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYK
KworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRz
LiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNv
bnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwor
I2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZw
cmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJ
CQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJ
ICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkp
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGlu
dCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRl
eHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47Cisg
IFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXAp
OworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0eXBl
KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAq
eXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFt
ZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAo
IiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiki
KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0
ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9p
bnQxNiAqeXl0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRv
bSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYg
Knl5dG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Cisg
IGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQg
eXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90
KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlf
U1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVi
dWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8g
YmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUs
IENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAo
eXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXly
dWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5
cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJs
aW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVs
ZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4i
KTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJ
CQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1
bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBw
cmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBt
dWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyog
IVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19Q
UklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlm
IC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRo
ZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJ
TklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhl
IHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBz
dGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZh
bHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19B
TExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3
aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVm
IFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNp
ZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19H
TElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgor
IyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4g
KGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5
c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVu
OworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVl
OworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0
cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVm
aW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8q
IENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1p
bmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwg
Y29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVz
dCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2Vu
ZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7
CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisK
KyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRu
YW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlw
cGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0
IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRv
dWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlu
cyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJh
Y2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlS
RVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBv
ZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpF
X1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAo
Knl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hh
ciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXAp
CisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3Ry
aXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkg
ICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICov
CisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7
CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJl
cykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAg
ICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJl
dHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3Ry
KSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3Ig
bWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0
YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNs
dWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRv
IG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0
aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYg
YW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZ
WVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0
aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0
LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAg
cmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUg
KHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1l
W3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0g
eyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAq
eXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisj
IGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxl
IGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNv
bnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBl
Y3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9y
W10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAor
CQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NF
X0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAg
ICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZ
WVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZ
Q0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisg
ICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAg
Ki8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5
eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsK
KyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlw
ZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKwor
ICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXlj
aGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlm
ICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5
eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5l
eHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNv
dW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5
eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5
eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5
ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5
Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAg
eXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4g
WVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBz
cHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAg
ICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgor
CSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAg
Ki8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAo
KCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYm
IHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1l
cnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UK
KwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1
cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVs
ZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAor
eXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFs
dWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRleHQp
OworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xf
UFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNo
ICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKwor
LyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKyNpZmRl
ZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFy
c2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNv
bnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBB
UlNFX1BBUkFNICovCisKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50
Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5k
aWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNl
CitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgor
I2VuZGlmCit7CisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisv
KiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQ
RSB5eWx2YWw7CisKKyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwor
ICAgIGludCB5eW5lcnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAg
ICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8g
c2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFy
YXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0
aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5
dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOwor
ICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3Rh
Y2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5
dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwor
ICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47Cisg
IC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0
aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7
CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9m
IHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91
bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXRva2VuID0gMDsKKyAg
eXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5
eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFy
ID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0
aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2
ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZl
ciBpbml0aWFsaXplZC4gICovCisgIHl5c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisg
IGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBz
dGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6
CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9j
YXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBz
dGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0
ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8
PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRo
ZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9
IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2
ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgor
CSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8K
KwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYg
Knl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0
aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5
b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKwor
CXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92
ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVz
dGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0
ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5
eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5
cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5p
b24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkp
OworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9D
QVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5
eXZzKTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJ
ICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5
eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5
eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJT
dGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBz
dGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNr
dXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUg
cHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
CisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0
byBsb29rYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5
eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3du
ID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8K
KworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFy
ID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAg
eXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93
IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRv
a2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0
IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElm
IHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBv
ciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4g
Kz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXlu
XSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07
CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZ
VEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdv
dG8geXlyZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVy
cm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYg
KHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2th
aGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICov
CisgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5
eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBk
byB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAg
ICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51
bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsK
KworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUg
b2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZv
bGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBp
cyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9u
IGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUg
cGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0
aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNw
WzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikK
KyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1
bHQpID0gKHl5dnNwWygxKSAtICgxKV0pOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYm
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09
IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZz
cFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIw
OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAo
eXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMildKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisKKworICAgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAm
eXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKwor
ICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUg
d2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3Bw
ZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisg
IHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNd
ICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5
Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVd
OworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisg
IGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFs
cmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisg
IGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJP
Ul9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsK
KyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5
c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9j
IDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0g
MiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19N
QVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7
CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVs
c2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9m
IHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8
PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywg
eXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQor
CWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7
CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAg
fQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykK
KyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2Fo
ZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYg
KHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2Yg
aW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9Cisg
ICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAg
ICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0K
KyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0
ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxhYjE7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhl
IHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVy
cm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICovCisg
IGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
CisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4g
PSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0gKnl5c3Nw
OworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21tb24g
Y29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVy
cmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAgeXluICs9
IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAg
ICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9wIHRo
ZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4u
ICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAgICB5eWRl
c3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNv
bnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5c3NwOwor
ICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgKisreXl2c3Ag
PSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1C
T0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5
c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhl
cmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2Vw
dGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMg
aGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0
bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVmaW5lZCh5
eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4
aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0
LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZ
KQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkg
eXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JU
IG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5
eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVy
ZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2Vu
ZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2Vk
LiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXlsZXgo
aW50KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAg
ICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAq
bHZhbHAgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNU
X0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlw
ZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBP
UF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2Ug
J3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVh
azsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0
eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAg
ICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0g
JysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNh
c2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBi
cmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34n
OiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsK
KyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3Vy
cmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxl
eCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsK
KworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0
aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRv
a2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNv
bnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1M
ZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSBy
ZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0
KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmQwNTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFS
U0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERp
YWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Np
b25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVy
LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9r
ZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlh
Z25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yZTg0Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55CkBAIC0wLDAgKzEsMjYxIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250
YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9u
LgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4
cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUg
aXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKwor
I2lmIGRlZmluZWQoX19HTlVDX18pCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lv
blBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisj
aW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9rZW4q
IHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorJX0KKworJWRl
ZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29udGV4dCAq
Y29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0aWMgaW50
IHl5bGV4KGludCogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJv
cihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0KKworJXRva2VuIENP
TlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wnCislbGVmdCAnXicK
KyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicgT1BfTEUgT1BfR0UK
KyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUn
CislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAgICAg
ICAqKGNvbnRleHQtPnJlc3VsdCkgPSAkMTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOwor
CitleHByZXNzaW9uCisgICAgOiBDT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBe
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9Q
X0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAo
JDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7Cisg
ICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAk
MSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lv
biB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29u
dGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pF
Uk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNz
aW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8
ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0K
KyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOwor
ICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAt
ICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAg
JCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQk
ID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0g
Y29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBhdG9pKHRva2VuLT52
YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0xFOiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hU
OiB0eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6
IHR5cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVh
azsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0
eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAg
ICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0g
Jy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNh
c2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBi
cmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEn
OiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsK
KyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBl
ID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8g
QWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisg
ICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1
cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6
RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykg
OgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorewor
fQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1
bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBt
RGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRv
a2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9
IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2Ug
MDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVk
ZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBt
Q291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5n
dGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtF
cnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6
IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAg
c3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1
dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsK
LSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291
bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAg
aW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hf
YmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWlu
dCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNo
YXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3Rh
cnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBp
cyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKCht
SW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFk
ID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8
IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYg
KGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJs
b2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9G
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0
ZSkKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExv
Yy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExv
Yy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExv
Yy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFj
aGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5k
ZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAn
LycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAg
ICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAg
ICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3Rh
dGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3Rh
dGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09
ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsr
XSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAg
ICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9
PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFy
ZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAr
K21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAg
ICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hh
cigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3Ry
ID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8g
U3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgot
ICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciBy
ZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYg
KCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVu
Z3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJp
bmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAg
ICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUlu
ZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAg
ICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNp
emUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRT
dHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAw
OwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkg
JiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0
eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0
IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVu
Z3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAm
JiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGgg
PyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAot
Ly8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8g
U3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNs
YXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAg
ICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JV
bmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1F
cnJvcjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRl
eDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBl
b2YoKSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAg
ICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2lu
ZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3Ro
W2luZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8g
YnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAg
Ly8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25s
eSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBv
cnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1
bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNp
emUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgot
ICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0
ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9j
a0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4Owor
ICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7
Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRo
ZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUg
Y3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmlu
ZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5Lgot
ICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVl
IGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBp
bmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAg
ICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRM
b2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAg
Y29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0g
ICAgLy8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXgg
b2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8g
U2l6ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxl
bmd0aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJv
cjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3Bw
CkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZp
cnR1YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAw
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5
Ni4uYjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwx
NyBAQAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2lu
Y2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAog
ewogCi1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAg
IFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1O
YW1lKG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFj
ZW1lbnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3Jv
OjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsK
LQotICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBh
cmFtZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAg
ICBkZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0g
ICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBs
YWNlbWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRz
OwotICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAg
KG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIu
cGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNl
bWVudHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5o
CmluZGV4IGUyNDMzMDYuLjYzYjMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDMyIEBA
CiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJp
bmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LSNpbmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0
cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUK
ICAgICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OwogCi0g
ICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhU
eXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5W
ZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7
Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsg
fQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5h
bWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJu
IG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3Ry
aW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0
b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBj
b25zdDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJhbWV0ZXJzOworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiBy
ZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1hY3Jv
PiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEzZjY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwyOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitN
YWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAor
ICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQor
eworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgLy8g
VE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBtTGV4ZXItPmxleCh0b2tlbik7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlOWVlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVy
IDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBs
ZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisg
ICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgTGV4ZXIqIG1M
ZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjEyY2ZhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwyOSBAQAogCiAjaW5jbHVk
ZSAiUHJlcHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRp
bHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotUHJlcHJvY2Vz
c29yOjpQcmVwcm9jZXNzb3IoKSA6IG1Db250ZXh0KE5VTEwpCitQcmVwcm9jZXNzb3I6OlByZXBy
b2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXpl
cihkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZVBhcnNlcigmbVRva2VuaXplciwgJm1NYWNy
b1NldCwgZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgIG1NYWNyb0V4cGFuZGVy
KCZtRGlyZWN0aXZlUGFyc2VyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcykKIHsKIH0KIAotUHJl
cHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0KGludCBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQogewotICAgIGRl
bGV0ZSBtQ29udGV4dDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1D
b250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Ci19Ci0K
LWJvb2wgUHJlcHJvY2Vzc29yOjpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAm
JiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBO
VUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzZXQoKTsKLQotICAgIHJldHVy
biBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAg
ICByZXR1cm4gbVRva2VuaXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKLXZv
aWQgUHJlcHJvY2Vzc29yOjpyZXNldCgpCit2b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0
b2tlbikKIHsKLSAgICBzdGQ6OmZvcl9lYWNoKG1Ub2tlbnMuYmVnaW4oKSwgbVRva2Vucy5lbmQo
KSwgRGVsZXRlKCkpOwotICAgIG1Ub2tlbnMuY2xlYXIoKTsKKyAgICBtTWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmgKaW5kZXggODg1YmI3MC4uZGRiZTEyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKQEAgLTcsMzQgKzcsNDIgQEAKICNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5j
bHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0OworY2xhc3MgRGlh
Z25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IK
IHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOwotICAgIH5QcmVwcm9jZXNzb3IoKTsK
KyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50
OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5n
dGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJz
IHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5n
IGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3Vt
ZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90
aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBh
IHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Yg
c3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250
YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2
YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBu
dWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBib29sIHByb2Nlc3MoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
LSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5iZWdpbigp
OyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmVuZCgp
OyB9CisgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOworICAgIFBQX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwogCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQg
c3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAg
VG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91dHB1dC4KKyAgICBNYWNyb1NldCBtTWFjcm9TZXQ7
CisgICAgVG9rZW5pemVyIG1Ub2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIG1EaXJlY3Rp
dmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtTWFjcm9FeHBhbmRlcjsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmls
ZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmls
ZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxl
KSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBp
bnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRp
b24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVx
dWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMu
ZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKaW5kZXggYTJlNzU5Yy4uODkzZDA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcApAQCAtNiw1MCArNiw0OCBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2
OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8
PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46Okxv
Y2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRv
a2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8
IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0g
MDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsK
IH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUs
IGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAg
IGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3Mp
ICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAg
ICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxv
Y2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxv
Y2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0
ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sK
KyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAg
IGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOwogfQogCiBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikK
IHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9DT05T
VEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJRVI6
Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBlKCkp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgp
KQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAgIHJl
dHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi4wMmZkMGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsODMgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9I
XwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVj
dG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3VyY2VM
b2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tl
bgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGljIExv
Y2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGljIHZv
aWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7Cisg
ICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAgIC8v
IFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24s
IGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAgICBJ
REVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9Cisg
ICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisgICAg
ICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAg
IE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAor
ICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAg
IE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9B
U1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisg
ICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAg
IE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FT
U0lHTgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0Zf
TElORSAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFID0gMSA8PCAxCisgICAg
fTsKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpz
dHJpbmcqIG1WYWx1ZTsKKyAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBs
aW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBi
b29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9M
SU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisg
ICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVB
RElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3Bh
Y2UpOworCisgICAgaW50IHR5cGU7CisgICAgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4m
IGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2Vu
JiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6
Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tl
bik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfVE9LRU5fSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYjQyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzM1IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIubCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXplci5j
cHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwg
c2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2Rl
ZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJ
T04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0
LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlz
c3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBp
bnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUg
RkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5
c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9f
KSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5l
IF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlv
dSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisj
aWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAx
CisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2lu
dDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxl
eF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQz
Ml90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNlbHNl
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxl
eF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQx
Nl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5
OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlO
CisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYg
SU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2Vu
ZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgt
MjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFY
ICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUg
SU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFY
CisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNp
Zm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisj
ZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFY
ICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xh
c3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkv
KiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZp
bmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NP
TlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3Bs
dXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAor
I2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9m
LWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5l
Z2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBm
b3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZl
LAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNo
YXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUko
YykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9p
bnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyog
Rm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxv
dykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5
eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4
dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5l
IHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlf
ZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyBy
ZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlz
Z3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5p
dGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIg
KgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRo
YXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0
ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8K
KyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNU
QVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4g
c3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHBy
b2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8q
IFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisj
ZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJ
WkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2Rl
ZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxF
IDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19M
SU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBj
aGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZ
WV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJ
d2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9w
dHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5l
IFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYK
KworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5w
dXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJ
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
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
aGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBhbGxv
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
Pnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAor
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAzNworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0
aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVj
dCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQz
Ml90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4
NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAgIDM2
LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAgIDMzLCAgIDMz
LCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAgICAgICA0LCAg
IDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAorICAg
ICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLCAg
IDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1
LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAg
IDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5
LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEwLCAgICAwCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNSwg
ICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAgICAgOSwgICAx
MCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAgICAg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwgICAx
OCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwgICAgOSwgICAy
NSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAgIDIx
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0
LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAgMCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQorICAgIHsg
ICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5
LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIxLCAg
IDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAw
LCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDczLCAgMTU5LCAg
MTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAgMTU5LCAgMTU5
LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAorICAgICAg
IDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5
LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAwLCAg
MTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5
LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAg
MTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICAyMCwgICA4
MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAyMCwg
ICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4Mywg
ICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwgICA4MywgICA1
MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4MywgICA4Mywg
ICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAorICAg
ICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMw
LCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAg
IDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQz
LCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAg
IDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAgIDUzLCAgIDUz
LCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAorICAgICAg
IDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUw
LAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAg
IDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAgNTAs
ICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNjcsICAg
NjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAgNzgsICAgNzgs
ICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCisgICAgICAg
MzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIs
CisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMsICAg
NjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAgNzUs
ICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKKyAgICAg
ICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwgICAx
NiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwgICAy
MCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwg
ICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwgICAyNywgICA0
MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1MiwgICA0Mywg
ICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKKyAgICAgICA1
MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1MCwK
KworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAg
IDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4
LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAg
IDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcy
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAorICAgICAgIDg3
LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAg
fSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xs
IGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNk
ZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3Jl
KCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisj
ZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHBy
ZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJv
Y2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
MnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK3R5cGVkZWYg
c3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7
CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0
cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VT
RVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRy
dWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24q
IHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUg
KChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2Mt
PnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAt
PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5
eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2Mt
PmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
CisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisjZGVm
aW5lIElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9UWVBF
IHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2Yg
dGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisgICAg
LyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZ
UEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9i
YWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklMRSAq
eXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBp
bmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7
IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVm
ZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9j
aGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFyICp5
eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQg
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7
CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7
CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5
eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5
X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2Zs
YWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisg
ICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAq
LworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
KyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJl
IGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAg
IyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5
eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2Fu
bmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgor
ICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBj
b252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJB
X1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2V4
dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9pbiAg
KEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9vdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50
IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbGluZW5v
IChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogcHBn
ZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQ
RSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBF
ICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCBw
cHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBi
eSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9T
S0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBwcHdyYXAgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGlj
IHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5f
dCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGlu
dCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisj
ZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRp
YyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3Vu
dCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVB
RF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBD
b3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0
LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNp
bmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRl
KCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCAp
CisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJl
c3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3Vs
dCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRl
cmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYg
KCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBF
T0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwK
KwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBt
YXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJy
bm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89
MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKwor
LyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUg
Inl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0
aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRv
IGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0
ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisK
Ky8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93
cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFD
S19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVm
IFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJy
b3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRp
b24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9u
IG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNp
bHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNM
X0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBF
ICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5l
cik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZ
UEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUg
YmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBy
dWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRp
ZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUg
bWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9E
RUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAv
KiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXln
LT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7Cisj
ZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJ
LyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3Rk
aW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisKKwkJcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQt
b2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisK
KwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2Nw
OworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRv
CisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlf
Y3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgzICk7
CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKworeXlfZmluZF9hY3Rpb246CisJ
CXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVf
QUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2Vz
cyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5n
IG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkv
KiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
KwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKKworCVlZ
X0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3Vu
dGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBz
aW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihDT01NRU5U
KTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2Fz
ZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4g
bWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsreXlsaW5lbm87IH0KKwlZWV9CUkVBSwor
Y2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgaWYgKHl5ZXh0cmEtPmxpbmVTdGFydCkgeworICAg
ICAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgICAgICByZXR1cm4geXl0ZXh0
WzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQs
IHl5bGVuZykpOworICAgIH0KK30KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdp
dGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCisvKiBSdWxlIHRv
IGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCitjYXNlIDExOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9C
UkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorCVlZX0JSRUFL
CitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZX0JSRUFLCitjYXNlIDE2
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVBSworY2FzZSAxNzoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09S
OworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNT
SUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJf
QVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9N
VUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMxOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMyOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzM6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAg
ICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9TRVRV
UAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6
CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICArK3l5
bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOwor
fQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0cmEtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVu
bywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpKTsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5J
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
ID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZG
RVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJ
CQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICgg
bmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8g
ODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9i
dWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAq
LworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdl
IGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+
eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2Fu
bmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmIt
Pnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAt
IDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJ
CQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRh
dGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19y
ZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlp
ZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBF
T0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJ
fQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9D
T05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJ
CS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5l
ZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90
b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQor
CisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
ICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsK
K30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9y
ZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVy
IHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0g
eXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyAr
K3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNb
WVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0K
KwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJ
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlf
dHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJh
Y3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucygg
Y3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05V
TF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVu
dXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
cyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgz
KTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lm
bmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlu
cHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0
byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAq
YmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsg
aWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlp
ZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJ
CQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQg
d2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2Nl
ZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8g
Y29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJ
CQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBi
dWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJ
CQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJ
eworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJ
CQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9O
RVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJ
fQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBm
b3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZl
IHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJ
cmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1l
ZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlu
cHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0
YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAo
RklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lk
IHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw
bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZm
ZXJfc3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAg
Ki8KKwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBi
dXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3
cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlz
IHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9
CisKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9w
OworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRl
LgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUg
Y2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlf
QlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBy
ZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RB
VEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5l
ciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOwor
CisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNp
emUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBj
aGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigp
IiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZp
bGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBw
cF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIg
KTsKKworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6
ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRp
bWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFz
IGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBw
X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZm
ZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2Zp
bGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVu
IHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0
YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNl
LCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLwor
ICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5v
ID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+
eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiog
RGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5Q
VVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZs
dXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJ
cmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28g
ZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICog
YSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9
CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0
ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxv
Y2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIg
VGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJ
cmV0dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRv
cC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3Bp
ZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKwor
LyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQu
CisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQly
ZXR1cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIp
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxv
Y2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3Bh
Y2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwor
CWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlz
IGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBz
Y2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBh
dm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAg
ICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlp
ZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAg
CisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJ
cmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJi
aXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
CisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1l
bXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwg
Z3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVk
IGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgor
ICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIK
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8
IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkg
ICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZv
cmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXpl
ID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1
Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwor
CWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsK
KwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9m
aWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisK
KwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisK
Ky8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBu
ZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0
ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8g
c2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAg
ICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
c3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIp
OworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZl
biBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBl
IGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNj
YW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50
ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lgor
ICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0
ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZF
Ul9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkv
KiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGlu
ZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFs
bG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0g
MDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1
ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEg
YiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7
CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxk
IHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUK
KyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRh
bF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
CSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9G
QUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rp
b24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBc
CisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAor
CXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykg
dG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZv
ciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1i
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBw
Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2Nv
bHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5
Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQg
c3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJ
TEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0
OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQg
dGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhp
cyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9k
ZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRy
YSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBs
aW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVt
YmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25s
eSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9D
VVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5v
IGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVu
byA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBw
YXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQg
YnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAg
ICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZm
ZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisK
Ky8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJy
ZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3
aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0
X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91
dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChp
bnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9
IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9j
ICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFs
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFy
YW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAg
eXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxs
b2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2lu
aXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBp
dCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRo
ZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNp
dGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4K
KyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAg
ICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2Fu
X3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBp
ZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2Vz
LiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0
c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMg
cHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUg
c2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlz
IGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkg
dGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24g
YWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmlu
ZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxs
b2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJh
KFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyAp
CisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0
cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICgg
c2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgq
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBl
eHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVs
ZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3Qg
eXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRy
X3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRo
ZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
ZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisK
KyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlf
Y19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5
X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5V
TEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5
aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxF
ICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0
dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5
CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBw
bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5u
ZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwor
CXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhl
IHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5l
cik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUg
c3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9z
dGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwor
CisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJl
ZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxl
ZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5
c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9u
bHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nh
bm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5
IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxl
eF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytp
ICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4K
K3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiAp
CisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9j
KCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBp
biB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRo
YXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZv
aWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNh
dXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJ
ICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252
ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVy
biAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZy
ZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikg
cHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVm
aW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6
ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorewor
ICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6
flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6
ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
KGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRl
eHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0
U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFu
ZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7
CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRv
a2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29u
dGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2Fu
bmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgm
bUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3Rh
cnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRl
c3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1
cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1ZGUg
IkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAg
cHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBsb2Nh
dGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sK
KyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRo
ZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVw
IGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNj
YW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGluZVN0
YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsK
KyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9pZCBk
ZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxl
LgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40OTE0N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKQEAg
LTAsMCArMSwzMTkgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFp
bnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2Vk
IG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Cito
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJ
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCislewor
I2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAg
ICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisi
Ly8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFr
cyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50
IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5U
KTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5F
fSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpT
b3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQor
Cit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQ
T05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
KyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICov
Cisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsK
KyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJ
RF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9j
YXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7
Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9
CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
QU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQor
Ij4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsK
K30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsK
K30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwor
ICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5
bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5
eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFS
QUNURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRp
b24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8v
IFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8g
U2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBp
bnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUg
ZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAg
ICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAg
ICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxs
b2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7Cisg
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291
cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisK
K25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFn
bm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nh
bm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwg
MCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcs
IGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52
YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFy
dE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRv
a2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250
ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9
CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09
IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDViMzJm
NzEuLmU5YzcwYjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJz
ZXIuc2gKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0j
IEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBh
bmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
LmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAt
LW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5f
Ymlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRz
Y3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAK
LWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVh
ZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3Jp
cHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVz
IC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9
CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3Nvcgot
cnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVy
LmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlv
biBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0
dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmlu
ZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3Rf
bGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9
IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNp
emUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNo
YXIqIHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXIt
aW50ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNv
bi1sb2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24g
ZXh0cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAg
ICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAg
ICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUl
Ci0KLXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVO
VElGSUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVm
aW5le0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFj
dE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7
Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNI
fWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7
IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJl
dHVybiBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFT
SH1lbmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5F
RDsgfQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEg
eyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VY
VEVOU0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNI
fWxpbmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFs
LT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURF
TlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFE
RUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7
RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7
Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRl
eHRbMF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4g
ewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwot
fQotCi08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJp
bmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8v
IFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgot
ICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4
OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4g
LSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwg
KHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6
OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQot
Ci1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50
IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1
dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtF
cnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAg
ICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9j
YXRpb24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUg
PSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46
OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0g
bUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3Io
KSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZt
TGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQot
ewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAg
IG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vz
c29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3Ig
R3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4
OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNF
Ui4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1
ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0j
ZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgot
JWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9u
IHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4q
IHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQg
eXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0
aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6
Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29u
KTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRl
eHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6
OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2Vu
IEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hf
RU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJ
T04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkog
SEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RB
TlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0
aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1l
bnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAv
KiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUK
LSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRv
a2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgot
ICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAg
ICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAg
ICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicK
LSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBj
b250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAk
MSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRl
cl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZp
bmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7
Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBjb250
ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFs
X2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8g
dHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7
Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsK
LSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9E
ZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xu
JyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5E
SUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQot
ICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNI
X0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5F
ICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5V
TEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5
ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEu
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlz
dCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2Jh
Y2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0K
LQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAg
IH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAk
JCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xp
c3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAg
ICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwot
Ci1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0g
ICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsK
LQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAx
LmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAg
ICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7
Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVO
VElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsg
fQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAg
fCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7
ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAn
fSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQot
ICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAn
KicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQk
ID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7
IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAg
IHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycg
eyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0g
Jz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0K
LXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAx
OwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAv
LyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEz
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lO
VF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkg
ZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZF
UlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0j
ZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRm
b3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4g
c3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5k
IHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlv
bnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBz
eXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3Qu
ICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9f
ID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
YmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4
L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9N
QUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhf
dCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1
aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5
cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFy
IGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBp
bnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2Yg
aW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAg
ICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElO
VDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01J
TgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlm
Ci0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykK
LSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAg
ICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAg
ICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVm
aW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2
X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNp
Zm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3
Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQu
ICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8K
LQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBk
ZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBk
ZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZk
ZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5
Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmlu
ZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkg
c2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJh
eSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8g
aW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAq
IGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50
KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9U
Ci10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwg
dGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9z
IGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgot
I2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFf
cgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRl
eHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19s
aW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Jz
X2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0v
KiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRh
a2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdh
eSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0g
Ki8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRl
IHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBo
YW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBh
bGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJU
ICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0v
KiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwot
I2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAx
KQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZp
bGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkK
LQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQg
aW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0la
RSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2gg
dG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8K
LSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2Yo
eXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNk
ZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9B
Q1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUg
dGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAg
KiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNz
KCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2Fu
bmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAg
ICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmll
ZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBu
b24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3Jt
YWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRo
IGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAg
ICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZv
ciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5
bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQg
dGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFt
LiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAg
ICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3Ag
PSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAg
ICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAg
ICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMs
IHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3Np
emVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZp
bmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAg
IHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAg
ICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3Vy
cmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQg
YnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJh
Y3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IK
LSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAg
LyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVk
IGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQg
ZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19v
dXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5w
dXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlu
cHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQo
KSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNo
IG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyog
V2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5l
LgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0
Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwot
Ci0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQg
eXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0g
ICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAg
IGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmlu
ZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQg
dGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0
aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICog
c2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdl
IG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhv
dWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAg
ICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRv
ICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNv
bnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlu
cHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAg
ICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHBy
b3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQot
ICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5l
cmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBz
dGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZl
cl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdo
ZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4g
d2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9j
cmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3Rh
dGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0j
ZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
LHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNl
LHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBw
cF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50
IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3Qg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNk
ZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAg
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAg
IFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50
ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9s
KGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAg
ICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVn
aW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBf
WVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5
eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3Vy
cmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJv
ciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBh
ZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUK
LSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUg
WVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAg
ICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAot
ICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5m
bwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5
eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIs
ICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAg
MjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcs
ICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAg
IDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAs
ICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMs
ICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAg
ICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAg
IDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUs
ICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAg
MTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0g
ICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMs
ICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwg
ICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAz
MCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRh
WzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYs
ICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAg
IDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcs
ICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jh
c2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEs
ICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAg
NzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAx
NTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQs
Ci0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAx
MzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUs
ICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAx
MjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUs
ICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAx
ODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUs
ICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0K
LSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEy
NiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEx
MV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2
LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0K
LSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAg
NywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwg
ICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAx
NCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwg
ICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAy
NSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwK
LSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAz
NywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwg
ICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAz
NywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwg
ICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAz
MCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3
LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAot
ICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIz
LCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAg
IDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAy
LCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAg
IDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4
LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAg
IDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAg
ICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAg
IDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwg
ICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAx
NiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwg
ICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAx
MCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwg
ICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAg
ICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwg
ICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAx
NCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAy
LCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAg
MTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3
LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAg
MTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAg
ICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAg
IDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYw
LCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAg
IDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5
LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAg
ICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAg
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQK
LSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhl
IGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFu
eSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1Qg
cmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNl
ZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgot
QmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1h
cjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4
Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRl
X3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElP
TiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5v
OyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsg
IFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAot
ICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3Rh
dGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxl
bik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29u
dGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5u
ZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5v
dCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAg
ICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhl
IG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwot
ICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFj
ay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBz
dGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25f
Y2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50
IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRf
c3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBl
IHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0g
ICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9y
ZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9j
X3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlf
aW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBn
byBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBm
cm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwg
eXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19y
Ci0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhf
aW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIp
OwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2
aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1p
bnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1
ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19m
bGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUg
dXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBw
Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUg
KiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFm
dGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMg
aW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYg
X19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlm
Ci0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5j
cHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5k
aWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5
eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZ
X05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3Rh
dGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGlj
IHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0
aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91
bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JF
QURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyog
Q29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1
dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBz
aW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0
ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQg
KQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJy
ZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAg
ICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAg
ICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9
PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBp
ZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3Vs
dCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3Np
emUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAg
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAg
ICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0
ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQot
ICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2Ug
dGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJl
YWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5
dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmll
cyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NU
QVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0K
LS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHBy
b3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5l
ciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgot
ICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJu
IGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxU
WVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RF
Q0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZ
WV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1
bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0j
aWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQot
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlf
QlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxF
X1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5n
IC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nh
bm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewot
ICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3Rl
ciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0g
ICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQg
PSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRp
ZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlf
c3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlp
biApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkK
LSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5U
X0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAg
ICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAg
IH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyBy
ZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0K
LSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24g
aW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4u
Ci0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZ
X0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsK
LSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9
IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlf
bWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAg
ICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZ
X0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXls
ZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkK
LSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5
Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjog
IC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQot
ICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAg
ICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAg
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmlu
ZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAv
KiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5z
dmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hf
REVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55
eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5
eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRy
YWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVO
QzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFT
SF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5T
SU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmlu
Zyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNw
YWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVv
bCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAg
ICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJ
TklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlf
UlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGlu
Y2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAg
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAg
ICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAg
ICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQK
LSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQot
ICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQg
b3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8g
ZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwg
bWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBO
b3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9u
Ci0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19i
dWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3Qg
dGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFu
c2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAg
Q29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAg
ICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlf
bmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAg
ICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5
X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICog
Zm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAg
KiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAg
ICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAg
ICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAg
ICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAg
ICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAg
eXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5
eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5
eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBp
bgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0g
ICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0g
ICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwot
ICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0
aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFu
b3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4K
LSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAg
ICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAg
ICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owot
Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0
ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAg
ICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8q
IGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBp
biBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0
aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FO
IC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9F
TkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpz
b3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3Zl
LCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9u
J3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAg
IGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0g
MSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNo
YXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5h
bCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9P
Rl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0
Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxh
c3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICgg
aSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihz
b3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0
aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAg
KiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAg
ICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAg
ICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAg
ICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNf
b3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdf
c2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3Np
emUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1
Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGIt
Pnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hh
ciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNo
YXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hf
YnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRv
bid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAg
ICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9F
UlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZl
ciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2No
X2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVh
ZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICov
Ci0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3Qp
IG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlf
bl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09
IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0Jf
QUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JV
RkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQot
ICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9z
aXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3Np
emVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+
eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7
Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5
eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07
Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0g
Z2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQot
ICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0g
ICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5
eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwot
ICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9z
dGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwot
ICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAg
ICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlf
Y3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEg
dHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4
dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0
YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5
X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9u
cy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAg
IHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
ICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQot
ICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRl
ZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZf
cCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2Nf
YnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAg
ICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUg
ZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAg
ICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVm
X3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlf
Z19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0
ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3Jl
Ci0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0g
ICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAot
ICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAg
ICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3Rh
dHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsK
LQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9O
RVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
cHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2Fz
dCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8q
IHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9j
X2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9
PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkK
LSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0g
ICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZ
X05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5w
dXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rp
b24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAq
LwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4K
LSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19i
dWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVu
dGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVy
X3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwot
ICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBv
dXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdo
ZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHBy
b2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBh
dCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdv
IGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5
eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0g
ICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5
eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBh
bmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUg
aW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1
ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAo
RklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9C
VUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAg
ICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6
ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxv
YyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9i
dWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQot
ICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwot
fQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRl
ZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJl
IGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwot
Ci0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXpl
cyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGlt
ZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMg
ZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBf
aW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNo
X2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0g
ICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBi
dWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQg
ZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJ
biB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4u
Ci0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55
eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQot
ICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJy
bm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4
dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIg
c3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVz
aF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsK
LQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBU
aGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVy
IHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgot
ICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAg
ICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9i
dWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAg
Yi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlf
Q1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3
IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxs
IGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdf
YnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBO
VUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2Fu
bmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1
ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAg
ICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxh
Y2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMg
dGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4g
MCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VS
UkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19
Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3Vh
cmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1f
dG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAg
IC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9u
J3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFj
ay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0
ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9f
YWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5
X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNr
LCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3Rv
X2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBi
dWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jv
d19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19h
bGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5
eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMu
Ki8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAg
IH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3Rs
eSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNl
IHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBv
ZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JV
RkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlz
Y2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVm
X3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAg
IGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9i
dWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+
eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIg
LHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nh
bl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQg
Y2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhl
IG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RB
VEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNf
bGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAg
IGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBH
ZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBF
T0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBw
cGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0K
LSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ld
ID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xl
bisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihi
dWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkg
dG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICog
YXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9
IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUg
KGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAg
ICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0g
eXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYg
KCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2
b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAg
ICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwot
ICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3Rh
dGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAo
IC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55
eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGlj
IGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5
eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNp
Zm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYK
LQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIs
IG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5
eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVz
cwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8q
IFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXls
ZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFj
cm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
LSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAot
ICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0
aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0
IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiog
R2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUg
Y3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQg
c3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJ
TEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsK
LX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRo
ZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1
cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0
aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBz
Y2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVk
IHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19
Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1i
ZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBw
c2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0
aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBj
b2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBp
cyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICgh
IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9j
b2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5
Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMg
ZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFt
IGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRf
aW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0g
aW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2Rl
YnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsK
LX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRo
b2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNl
dF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9p
ZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNp
YmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVz
IHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5j
dGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4K
LSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0
ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3Qq
IHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
KnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXln
dXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAg
ICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8q
IEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBM
ZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxz
LDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xv
YmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0
aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICog
Y29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5v
dGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFz
IGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29u
LCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJh
dGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3
aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAq
LwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5
eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15
X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1
dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xv
YmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZk
dW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAot
ICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBz
ZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICBy
ZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBp
bnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRp
YWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgot
ICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBk
b24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sg
PSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAg
IHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7
Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4u
YyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBz
dGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUg
KikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBv
biBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAg
ICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJl
ZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNr
LCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZF
Uil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5l
ciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBw
cHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNj
YW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ry
b3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlf
c3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
TlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBh
IG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBp
cyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9i
YWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50
cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAg
ICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwg
dXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lk
IHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0g
MDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lm
ZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAg
IGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0K
LSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lk
ICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBh
Y2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3Ro
IEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFu
eSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lv
bnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICBy
ZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQg
cHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChj
aGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwot
fQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0
cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlu
cHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklF
Un0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNT
RVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAg
ICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkg
Pj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ld
ID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5n
KHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVz
cGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6
ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2Yo
KSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9u
ZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50
IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihw
cGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1
dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2Rl
TG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+
cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNT
RVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0g
TlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1l
bnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91
IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBv
ZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAg
dW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0
c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlm
aWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2
ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRv
biBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBM
QUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0g
ICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAg
Ki8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBv
ciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBz
aG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0
IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21l
IHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmlu
ZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9O
Ci0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0
cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2Rl
ZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVm
aW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2Rl
ZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9O
RUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMu
ICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2Rl
ZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXlj
aGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBu
ZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZ
VE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50
byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAg
ICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0gg
PSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAg
IEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VM
U0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwK
LSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9Q
UkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJ
T04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0g
MjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAy
NzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0g
ICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBI
QVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2
MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmlu
ZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQg
MjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2Rl
ZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmlu
ZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFT
SF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9B
VF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0
aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3Bh
cnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUg
WVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBF
bmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAK
LSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRl
ZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYK
LQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJM
RQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNU
WVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZ
UEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpU
b2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcg
b2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lm
ICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29s
dW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0j
IGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXdu
ICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNf
VFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRl
Y2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlM
VFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSog
bGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3Rh
dGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQot
LyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hv
cnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5
eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsK
LSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBl
X2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBl
ZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQ
RV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYg
WVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQ
RV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6
ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9U
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0
ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlT
SVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMg
ZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQot
Ci0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBp
bmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
ICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMg
IGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lk
Ci0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdz
IGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNf
XwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0Uo
ZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBz
dXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYg
bGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3Rh
dGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0K
LSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0K
LS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vz
c2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZ
U1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FS
R19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFs
bG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFs
bG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EK
LSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxp
Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NU
RExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRp
ZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MK
LSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZp
bmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkp
Ci0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1
YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAot
ICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNv
IHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMg
NDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9y
IGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIw
MDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9D
Ci0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0K
LSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJ
Ql9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykg
XAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGlu
Y2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
aWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAg
ZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMg
ICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMg
IGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQg
ZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwg
KGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAg
ICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQot
Ci0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElN
VU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZ
Ci0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNP
UFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwg
KENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAg
XAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAg
IChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVs
b2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0g
ICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5k
IG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6
ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3Rh
Y2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBz
aXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZ
RklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVm
aW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwot
I2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xB
VEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4g
ICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNk
ZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFu
c2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAg
ICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUs
Ci0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAot
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9m
IHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAq
Lwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAg
IDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAx
OSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAg
ICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcy
LCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAg
IDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAg
ICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwg
ICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0
MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19
OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAg
NTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywg
ICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAy
MywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAg
ICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0g
ICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQs
ICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAg
LTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwg
ICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAt
MSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1
LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAg
IDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEs
ICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAg
NTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAy
NiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAg
ICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0x
LCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAg
IC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAg
ICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0Mywg
ICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0
NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxl
IG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3
MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAg
ICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEy
LCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMs
ICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAx
NjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4Miwg
ICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5
MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4
LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZ
WUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAt
LSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRl
cm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwot
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9y
IiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFT
SF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hf
RU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hf
RVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVf
T0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNU
QU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwK
LSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSci
LCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9
JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJs
aW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIs
ICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAi
Y29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0K
LSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tl
biBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAg
IDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0g
ICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIs
ICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAg
NDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0Niwg
ICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAz
OCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYK
LQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAg
ICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAg
IDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEs
ICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwg
ICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAg
ICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgs
ICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5n
IHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAg
MSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1F
XSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3
aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwot
ICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcs
Ci0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAg
ICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAg
ICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAg
MTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwg
ICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAg
ICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0g
ICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZ
VEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZp
bmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0K
LXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAg
ICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAg
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAg
ICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1
LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMs
ICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwg
ICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19Owot
Ci0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3
LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyog
WVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5V
TS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1
Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBk
byB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4g
ICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1
MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAg
ICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3
MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkw
LAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwg
ICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
IDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAg
ICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAg
MzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAg
MjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwg
ICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAg
MjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAy
MiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0x
LCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAg
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDEx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTks
ICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17
Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAg
MjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwg
ICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAg
ICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIy
LCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAg
IDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQot
I2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4g
ICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZ
WUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2Rl
ZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290
byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3Iu
ICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlv
biB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZl
cnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2Rl
ZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkg
ICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAg
ICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAg
ICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVy
cm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi
KSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2Rl
ZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgot
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExP
Q19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5l
OyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSku
Zmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9D
IChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAg
ICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAg
ICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQot
I2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9u
IHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTog
ZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVu
IHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FU
SU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQt
JWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmly
c3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1
bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9p
ZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3
aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVm
aW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0j
IGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFi
bGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZ
WUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmlu
ZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFy
Z3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1C
T0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRs
ZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24s
IGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRw
dXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5
b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsK
LSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBS
SU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5
dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsK
LSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5
eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNv
bnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9p
ZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0
IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVz
ICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwg
Im50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5
eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0g
IHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9j
YXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9t
IGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNl
bHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlw
ZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyAr
K2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRv
bSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5
X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUg
KFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVj
ZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0g
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2
b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50
IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAq
eXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29u
dGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwot
ICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsK
LSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVs
dSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBi
ZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQot
ICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
LSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAg
ICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRl
eHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5l
IFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZz
cCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVn
OwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAot
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgot
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRp
ZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlm
IGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3Ry
bGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVf
VAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAot
eXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZ
U0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQot
ICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkK
LSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mg
b2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNo
YXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlz
dHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIg
Knl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAq
eXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAg
Y29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0j
IGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RS
IGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFz
aGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3Rp
YyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5n
Ci0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVy
IHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRu
YW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4g
dGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1z
dGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3Ry
KQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAw
OwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAg
c3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcs
JzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6
Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAg
IHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5
eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsK
LSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5
cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAo
eXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNV
TFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFS
IHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3Bp
ZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxU
IGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwg
cmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBk
by4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBz
aXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNo
YXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZ
TEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
LSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsK
LSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAg
Y2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBp
bnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUg
dHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZs
eS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwot
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7
Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhw
ZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNo
YXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9m
IHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAg
ICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAg
ICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9
IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0
byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50
IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBi
b3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNr
bGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwg
WVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0g
MTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5
c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhi
ZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09
IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNv
dW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6
ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNp
emUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNp
emVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNp
emUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAg
ICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7
Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVf
b3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsK
LQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07
Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBh
cyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24n
dCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAg
ICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8K
LSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3
aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5
eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewot
ICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAg
ICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJP
U0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0v
KkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1z
dGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZ
U1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRp
b25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZh
bHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBp
ZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5
eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBl
KQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8q
IFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRl
ZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFy
c2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAg
fAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQ
QVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29u
dGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNv
bnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBz
eW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBm
b3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5
eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tl
bnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXll
cnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0
ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZF
UkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQg
c2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1
ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQot
ICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQg
dG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAg
ICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFj
a3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byBy
ZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAq
LwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5
c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMg
dmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQ
RSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24g
c3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXls
cyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0
aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2Vb
Ml07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChO
KSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7
Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQg
bG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5
eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24g
dGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBz
eW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAg
eXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAg
IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFj
ayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9u
IHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBz
dGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6
ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5
bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQg
bG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUg
ICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxs
b2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5
eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVu
IHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBq
dXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNr
cy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwot
Ci0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8q
IEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVu
dHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lm
ZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVh
bGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0
aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICov
Ci0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9p
bnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEg
aW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAg
ICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1p
Z2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0g
ICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsK
LSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyog
bm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3du
IHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1B
WERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0g
ICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxv
YyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFD
S19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19S
RUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZ
WVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19G
UkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAq
LwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZz
ICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAg
ICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5
eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0g
IFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0K
LSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0t
LS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBn
aXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlm
IHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJz
dCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVh
ZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBB
Q1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEg
bG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZ
WUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5
bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVY
OwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9
IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQg
b2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZ
VFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBp
cyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJv
cGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAg
ICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9r
ZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0
b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAo
eXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05J
TkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5
cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0K
LSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXll
cnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZ
X1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0K
LSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAg
aWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUg
PSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290
byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBh
Y3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXlu
ID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFi
OwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUg
dG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxF
TiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoK
LSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNl
dHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQg
YW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5n
IHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNt
YWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBi
ZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0g
IC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxz
cCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAo
eXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFs
b2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250
ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygx
KSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgp
KTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFj
cm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5
eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4
dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6
a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxp
c3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3Bb
KDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0g
ICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0g
KDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29u
dGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25h
bEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMp
XS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNv
bnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFs
LnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5
dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5
eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5m
aXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVz
aF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAo
MSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIp
XS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0g
KDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBw
cDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSld
Lml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRf
Q09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9r
ZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkg
LSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFr
OwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZh
bCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5
eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVj
dGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24g
dGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVk
dWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3Rv
W3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0
ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9
IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAt
IFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBl
cnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFi
OgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0
aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVy
cnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRl
eHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5
eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXlt
c2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0p
Ci0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAg
ICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAg
ICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNn
KTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAg
ICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAg
eXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0g
ICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAg
ICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAg
ICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxz
ZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJv
cl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0g
ICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tl
biBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNo
YXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9m
IGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7
Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlz
Y2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRl
eHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ug
d2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0g
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsx
LXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNL
ICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
LSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9S
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJl
YWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAg
ewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1Rf
TklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4g
JiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsK
LSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0g
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJl
bnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0g
ICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3Jh
bmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAg
ICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZ
WVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19Q
UklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAg
WVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9
IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdl
IHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJs
ZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0g
MSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tl
bi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNw
LCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0g
WVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIg
LS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsK
LQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9u
IGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4
dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwg
dGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0Yg
JiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJk
aW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250
ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2gg
YWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdo
aWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBw
b3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0
KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBp
ZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYg
WVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAg
cmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQ
RSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19
Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wg
Y29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQq
IGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkK
LXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1
ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF90YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBh
cnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNl
IGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNy
ZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBC
aXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0
ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEK
LSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVy
c2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlm
IHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2Vs
ZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2Vw
dGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAg
IEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAg
VGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAq
LwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0
aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRl
YnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUg
ewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lG
ID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwK
LSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hf
RU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcs
Ci0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAg
ICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hf
REVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5U
X0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJ
RklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAy
NTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUg
SEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxT
RSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2Rl
ZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BS
QUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lP
TiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcy
Ci0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQK
LSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQot
Ci0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0
cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0
bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMg
ZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24g
Ki8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19U
UklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5l
ZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBm
aXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQg
bGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRp
ZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93
IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11
c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2Rl
ZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUo
Y29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RM
IHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9O
X1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsg
fQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRl
IHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9T
VExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRD
UFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IElu
aXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9t
U3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAq
YXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmFk
NDNmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNlbmRp
ZgogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdXRpbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2
Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBT
dHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpz
KTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03Myw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9m
X3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQg
bm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0
YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAm
bm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAm
ZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3Jj
ICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApAQCAtMTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJl
ZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKKy8vIERlZmluZSB0
aGlzIHRvIDEgdG8gdXNlIHRoZSBuZXcgbGV4ZXIuCisjZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVS
IDAKKworaW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBf
VVNFX05FV19MRVhFUgorICAgIElucHV0U3JjKiBpbiA9IExleGVySW5wdXRTcmMoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKKyAgICBpZiAoIWluKSByZXR1cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9IGluOworI2Vsc2UKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFB
cmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAt
PlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyNl
bmRpZgorICAgIHJldHVybiAwOworfQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNh
cmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
CmluZGV4IDIzM2QxZGMuLmI2N2MxZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5
ICs2OSw5IEBAIHR5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJ
bml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5l
ci4gCi1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2Fu
bmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5nIG1lbnRpb25lZC4KK2ludCBJbml0U2Nhbm5l
cklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5m
b0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIn
cy5JbmZvLmxvZwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOyAgIC8vIHN0
aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRM
aW5lTnVtYmVyKGludCk7CiB2b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwogdm9pZCBJbmNMaW5l
TnVtYmVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAppbmRleCBjMTlmNzljLi4yMzIwM2Rh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3N5bWJvbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaApAQCAtMTA1LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3
U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2lu
ZCBraW5kKTsKIFN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3Bl
LCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2wo
U2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZT
Y29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwordm9pZCBD
UFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOwogCiAKICNlbmRpZiAvLyAhZGVmaW5lZChf
X1NZTUJPTFNfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmluZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYg
KzI2Niw4IEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwogICAgIGlu
dCBsdG9rZW4sIGxlbjsKICAgICBjaGFyIGNoOworICAgIGludCBiYXNlLCBhY2N1bTsKKyAgICBj
aGFyIGNoX3ZhbDsKIAogICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICBpZiAobHRv
a2VuID49IDApIHsKQEAgLTMxNSwxOCArMzE4LDQxIEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJl
YW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNj
dW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3
aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Cisg
ICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYg
KGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAg
IGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAg
ICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAg
aWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAg
ICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAg
ICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRl
KHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAq
ZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICBzd2l0
Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2Ug
Q1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRB
dG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NU
UkNPTlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50Zihz
dHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FU
Q09OU1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2
YWwpOwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBU
b2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tl
bikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aAppbmRleCA4NzY2ZGY5Li5kYmY0YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYg
KzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0gg
MQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
cGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3ZWI1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
CkBAIC0wLDAgKzEsODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5m
b1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKKy8vIEZJWE1FKG12
dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWlu
IG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3Qg
dGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVt
RXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3Jh
cGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93
LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJv
bSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0
ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7
CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICAr
K2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRl
cjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2Fs
bCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVu
Y3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVk
IGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2Rl
KQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsK
KyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKK3sKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIHNob3VsZCByZXN0cmljdCBzYW1w
bGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBiZWluZyB0ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAg
IC8vIGluIGFsbCBhdmFpbGFibGUgc2FtcGxpbmcgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xT
TCBFUy4KKyAgICAvLyBUaGlzIGluY2x1ZGVzIG92ZXJsb2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0
dXJlMkQsIHRleHR1cmVDdWJlLCBhbmQgb3RoZXJzLgorICAgIGlmIChwYXJhbWV0ZXItPmdldElu
dGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgIT0gInRleHR1cmUyRChzMjE7dmYyOyIgfHwK
KyAgICAgICAgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpICE9IDEpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQiCisgICAgICAgICAgPDwg
IiBvZiBhIHRleHR1cmUyRCBjYWxsLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAg
YmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHBy
ZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3Ag
Y29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVy
cm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBl
eHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUg
bGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdl
dE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTc5MzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitj
bGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
IDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IG1TaW5rKHNp
bmspCisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJp
Y3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3Jz
KCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExv
Z2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7CisKKwlUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1J
TkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgi
CisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkp
IHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAg
bVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxu
IjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5H
X0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2Ns
YXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBt
TnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5v
ZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkg
eyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklD
VF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTky
LDIyIEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4g
U1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUs
IGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9E
WFQ1KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3Qz
RDkKKy8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdl
IGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0
cy9EM0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0
KCkgY29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RF
UFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51
bGwgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZ
UEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9
CisKIGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxh
eU1vZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAot
RDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitE
M0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAg
IGlmIChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9P
TCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQog
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEo
dXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXgg
NTAyODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVh
bCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVy
YWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVz
YWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAg
Ym9vbCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLmNhMmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtNTY1LDYgKzU2NSw4IEBA
IEVHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAogICAgIHJl
dHVybiBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTU3NSw2ICs1NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNl
OSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFj
ZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IDY2
Y2Q1YzAuLjgyMGY2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMx
MSw3IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBl
Z2w6OlN1cmZhY2UgKnN1cmZhY2UpCiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9
IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKICAgICAgICAg
bVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1E
aXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBw
b3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwog
CiAgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleElu
ZGV4ID49ICgxIDw8IDE2KTsKIApAQCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENvbnRleHQ6Om1h
cmtBbGxTdGF0ZURpcnR5KCkKICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwogfQog
Cit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQoreworICAgIG1EeFVuaWZvcm1z
RGlydHkgPSB0cnVlOworfQorCiB2b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAg
ICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCkBA
IC0xNjQ2LDYgKzE2NTMsMTIgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJB
VEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAg
ICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FO
R0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFy
YW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudQog
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKQEAg
LTE4MzUsMTMgKzE4NTAsMzEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29s
IGlnbm9yZVZpZXdwb3J0KQogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBj
b2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50
CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5
IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
cmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXROdWxsQ29sb3JidWZmZXIoKTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmpl
Y3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRl
clRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNl
cmlhbCgpOwogICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJn
ZXRTZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAg
IH0KICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBA
IC0xODU2LDI1ICsxODg5LDI3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9v
bCBpZ25vcmVWaWV3cG9ydCkKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7CiAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQogICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVw
dGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAg
fQogICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldFNlcmlhbCgpOworICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwog
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0
KCk7CiAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAs
MjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0
KQogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAg
ICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgp
OworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9n
cmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBo
YWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24o
KTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBm
IC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJm
dihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCiAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBh
cmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWlu
Z3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0Lgot
ICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigp
OworICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlv
bigpOwogICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKICAgICAgICAg
R0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZp
ZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1T
dGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdM
aW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAg
IEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAg
ICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFy
KSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAx
LCBkeik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6
KTsKIAotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5h
cnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRp
ZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsK
ICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCAr
MjAzMSwxOSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmll
d3BvcnQpCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsKIAogICAgIEdMZW51bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmco
bVN0YXRlLmZyb250RmFjZSk7CiAKLSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3Qt
PmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CiAgICAgR0xpbnQgY2N3ID0gKGFkanVzdGVk
RnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihm
cm9udENDVywgMSwgJmNjdyk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9u
dENDVywgMSwgJmNjdyk7CiAKLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVj
dC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVz
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGlu
dCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zy
b250KTsKIAogICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxh
eS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2Vk
ID0gaWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwpAQCAtMjI4MCwxOCArMjMyMiwyMCBA
QCBHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSBtbwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQog
ewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAg
IFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisKICAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxp
ZWRQcm9ncmFtU2VyaWFsKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
dmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
aXhlbFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFk
ZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVy
KCk7CiAKICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJv
Z3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5k
aXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dy
YW1PYmplY3QtPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5
VW5pZm9ybXMoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8v
IEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKQEAgLTIzMTEsMzAgKzIzNTUsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKCkKIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewog
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CiAKICAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVy
IHR5cGUKICAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0g
U0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVy
ZVNlcmlhbFZTOwogICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9Q
SVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFu
Z2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBz
YW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwog
CiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJh
bmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHBy
b2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8g
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAg
IC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBs
ZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0
dXJlVW5pdCAhPSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVy
ZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxl
ckluZGV4KTsKKyAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAg
ICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwg
dGV4dHVyZVR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkp
CisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0
ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFz
RGlydHlJbWFnZXMoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1
cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0
ZXh0dXJlLT5nZXRXcmFwUygpOwogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBU
ID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKQEAgLTIzNTEsNyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4
dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVS
LCBkM2RNaXBGaWx0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBs
ZXIsIGQzZFRleHR1cmUpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDcs
NyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKICAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBs
ZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9
IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4
dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ1MSw2
ICsyNDk3LDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzM4LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRl
eHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZv
cm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7CkBAIC0yOTUyLDcgKzMwMDAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbgogICAg
IGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3Vy
cmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJy
ZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2Up
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICB9CkBAIC0zMDQyLDcgKzMwOTAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZAogICAgIGFw
cGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50
UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9
CkBAIC0zNDUyLDYgKzM1MDAsMTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMoKSBjb25zdAogICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4
dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMz
MmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MzAsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRl
bnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19y
Z2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3NCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJl
X3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAo
c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBAIC00MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBD
b250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEKIAogICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKICAgICAg
ICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERl
cHRoU3RlbmNpbCgpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0
ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWws
IE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAg
ICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAg
ICAgICAgICAgewpAQCAtNDExNSw2ICs0MTgwLDggQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsK
ICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcg
QEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBh
dHRyaWJ1dGVzW2ldLnR5cGU7CiAgICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNM
TUVUSE9EX0RFRkFVTFQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtLT5n
ZXRTZW1hbnRpY0luZGV4KGkpOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHBy
b2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CiAgICAgICAgICAgICBlbGVtZW50Kys7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCmluZGV4IDhkY2NmMGYuLmM3ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcg
QEAgY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1h
eExydTsKIAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07
CisgICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAg
IHN0cnVjdCBWQkRhdGEKICAgICB7CkBAIC0yODIsNiArMjgyLDcgQEAgY2xhc3MgQ29udGV4dAog
ICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpOwogCiAgICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFy
a0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgp
OwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENv
bnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wg
c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNz
IENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1
bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwog
ICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4IDczMGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xv
cmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
Ojpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBA
IC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsK
QEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJl
bmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9p
bnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5n
ZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVy
KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVm
ZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4
cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
OworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXIt
PmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsK
KyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVy
KHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBv
aW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOwor
fQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZm
ZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3
aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAg
ICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJU
eXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkK
KyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVm
ZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRl
cm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBI
QSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAor
ICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQz
MkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAo
ZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFn
ZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAg
ICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0
LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAg
ICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0
c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xf
TFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlO
QU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3Jt
YXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgIH0KIAogICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAg
ICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNhbXBsZXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7Cisg
ICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgUmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJC
VUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsgICAvLyBSZXF1aXJlcyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAgICAgICB9Ci0K
ICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICgh
ZGVwdGhidWZmZXIpCkBAIC0zMTksMTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpCiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAg
ICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewot
ICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAg
IGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6
OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFU
IGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAg
Ly8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0
dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgy
ZXM6OklzRGVwdGhGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkK
KyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3
aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVy
LT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2Ft
cGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVG
RkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1
ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1
IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVu
Y2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxi
dWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
KQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0
ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0
ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBP
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5j
aWxGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0
ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVm
ZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5n
ZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRo
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5j
ZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBk
ZXB0aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYm
IChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0
aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8
fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlh
bCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5l
ZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlm
IChtaXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAq
Z2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpn
ZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsK
ICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNz
IEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRp
bmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRl
eCBhNWUzOGJmLi4xODRhMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4K
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCAr
MTgsMjQgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgZ2wKIHsKIHVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25z
dCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50
IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAg
OiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlm
b3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWdu
ZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9
IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwot
fQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0
ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0g
MDsKIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAg
ICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVt
ZW50KSwgaW5kZXgoaW5kZXgpCitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdz
KCkKIHsKIH0KIAogUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdM
dWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUp
LCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwog
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0K
LSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9
IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
Ci0gICAgdW5saW5rKCk7Ci0KKyAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgbURlbGV0
ZVN0YXR1cyA9IGZhbHNlOwotCiAgICAgbVJlZkNvdW50ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsx
MTMsNyBAQCBpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAogICAg
IHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDog
MCk7CiB9CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIo
KQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4
RXhlY3V0YWJsZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQordm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6Ymlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAg
ICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgewpAQCAtMTc1LDI2NDkgKzEy
NiwyODAgQEAgdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4
LCBjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJp
YnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5h
bWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0
dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAor
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQ
cm9ncmFtOjpsaW5rKCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB1bmxpbmsoZmFsc2UpOworCisgICAgbVBy
b2dyYW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5
LT5saW5rKG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVy
KSkKKyAgICB7CisgICAgICAgIHVubGluayhmYWxzZSk7CisgICAgfQogfQogCi0vLyBSZXR1cm5z
IG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJv
Z3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEF0dHJpYnV0
ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBj
b25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5m
aW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CiAgICAgfQorCisgICAg
cmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFn
ZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBp
bmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNo
YWRlcikuCi1HTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBl
LCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQorLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmpl
Y3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVj
dGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQogewotICAgIEdMaW50IGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChkZXN0
cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCiAgICAgewotICAgICAgY2FzZSBTQU1Q
TEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVy
c1ZTWzBdKSk7CiAKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQorICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9n
aWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVy
ZVVuaXQ7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAg
ICBtVmVydGV4U2hhZGVyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJl
VW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAg
ZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAg
ICAgfQotCi0gICAgcmV0dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUg
Zm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0
dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFBy
b2dyYW1CaW5hcnkoKQogewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNB
TVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2Ft
cGxlcnNWU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJl
VHlwZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRFWFRVUkVfMkQ7CisgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1HTGludCBQcm9n
cmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6
c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHVu
c2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5OworfQogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Cit2b2lkIFByb2dyYW06OnJlbGVhc2UoKQoreworICAgIG1SZWZDb3VudC0tOwog
Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1z
OyBsb2NhdGlvbisrKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQog
ICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAm
JgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3Jp
cHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQor
ICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwogICAgIH0K
LQotICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBQcm9ncmFt
OjphZGRSZWYoKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgbVJlZkNvdW50Kys7
Cit9CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCit1bnNpZ25lZCBpbnQgUHJv
Z3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7Cit9CiAK
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJp
YWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFsOworfQogCi0gICAgICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQ7Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwo
KQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQogCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBd
ID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRb
Ml0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKK2ludCBQcm9ncmFtOjpnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVu
Z3RoKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KQordm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0SW5mb0xvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAoYnVmU2l6ZSA+IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYg
Kz0gMjsKKyAgICAgICAgICAgIGluZm9Mb2dbMF0gPSAnXDAnOwogICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwogCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICBpZiAobGVu
Z3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5n
dGggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQs
IEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKKyAgICBpbnQgdG90YWwgPSAwOwogCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICBpZiAobVZlcnRleFNoYWRlcikKICAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4
Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAg
ICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRl
ci0+Z2V0SGFuZGxlKCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CiAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICBpZiAobUZyYWdt
ZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBt
RnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwogICAgICAgICB9CisKKyAgICAgICAgdG90YWwr
KzsKICAgICB9Ci0gICAgZWxzZSAKKworICAgIGlmIChjb3VudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgKmNvdW50ID0gdG90YWw7CiAgICAgfQotCi0gICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzQpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAoYnVmc2l6ZSA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgfQogCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQs
Ci0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAg
ICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK30KIAotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKQoreworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
UHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKICAgICB9Ci0gICAgZWxz
ZSAKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNy
Y0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQogewot
ICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAg
IGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0g
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgaWYgKG1Qcm9ncmFt
QmluYXJ5KQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0
V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwogICAgIH0KLSAgICAvLyBjbGVhciB1bmZp
bGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdo
dDsgeSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9
CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit2b2lkIFByb2dyYW06OmdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQogCi0gICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIH0KIAotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OworICAgICAgICAqc2l6ZSA9
IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2
YWx1ZSArPSA5OworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFt
QmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQs
ND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUg
Kz0gMTY7Ci0gICAgfQordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1E
ZWxldGVTdGF0dXMgPSB0cnVlOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW06
OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1
czsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBj
b25zdAogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQo
KTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50
KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29s
ZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICog
c2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBs
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
YW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
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
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAot
ICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
MywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJu
YWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFy
Z2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChm
bG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVl
cmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBp
ZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4
dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwg
cmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5p
Zm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVu
dENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZv
cm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0
UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBh
cmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBy
b2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2lu
ZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxV
bmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1z
LmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAg
ICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAg
ICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAg
ICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRV
bmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAy
LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3Jt
bmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAg
YXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJz
IGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRv
QmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxh
Z3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUo
KSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRF
QlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwot
I2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNl
bmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwot
ICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBh
dGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAg
d3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VU
ZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxz
bDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJs
b2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBz
dHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdz
LCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0g
ICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVz
c2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0
aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJB
Q0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRp
Y19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFu
dFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3Mg
aW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20g
W09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0
aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVn
aXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewot
ICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5n
LT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIg
fHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYm
IGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZh
cnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0
b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8
IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsg
eV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9
IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3Bh
Y2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVt
biA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSBy
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9
IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQg
bm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVt
YmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3Ig
KGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBp
ZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFj
a2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06Omxp
bmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExT
TC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIr
KykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5j
b2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIg
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJl
ZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0
aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0
ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5n
VmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlu
cHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0
cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQt
Pm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAh
PSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVy
dGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWlu
ZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcg
PSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsK
LQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMg
ZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0
ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7
Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBz
dHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExT
TCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
InN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCBy
ZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChw
YWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVy
cykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQg
bWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAg
ICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0
cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVB
dHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4
SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91
dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9u
LnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bv
c2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigo
aW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xu
IjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdp
c3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYg
cGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJl
ZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wg
Kz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxu
IjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWlu
ZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlm
ICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBp
ICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxv
YXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAg
ICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQ
b3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAg
bVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAg
ICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5n
bF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhl
aWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3Jk
LnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0
IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJh
Z0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4
X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29y
ZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRo
LnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xf
UG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmICht
RnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9u
dENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsK
LSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmct
PnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZh
cnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
aik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+
bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsi
ICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0
LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExT
TCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtc
biIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29s
b3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAot
Ly8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0
ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQ
cm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hh
ZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXIt
PmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4
ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBt
VmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBv
cnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIg
KnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18w
IiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRv
QmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJs
ZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4
ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAg
aWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
dmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4
QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAg
IEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQq
KXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQot
ICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZl
cnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4
ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
cGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAg
ICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJs
ZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtB
dHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJs
ZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVj
b3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBw
cmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAg
ICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0
aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ci
KTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsg
ICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1h
cHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0g
dXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5z
aWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRo
YXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVy
YXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRy
aWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1
dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9j
YXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
cm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxv
Y2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0
ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAv
LyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAg
ICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRp
b25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxh
YmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9v
IG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0g
PSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsK
LSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBz
dGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
LnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBp
bmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQ
cm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewot
ICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRp
b25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29u
c3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVND
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFu
dERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25z
dGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAg
ICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3Rh
bnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRU
YWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlw
dGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0
IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBh
bHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhB
TkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNv
bnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRT
YW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBs
ZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8g
VEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAg
ICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNo
YWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnRE
ZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJh
eUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsg
ZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxl
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsK
LQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9u
OwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291
bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDog
IiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxl
LCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3Ry
dWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6
Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09C
SkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwg
bmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1
bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAg
ICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0t
PnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1
bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxl
cyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxp
emVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZT
KTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAg
IG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9y
bUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dy
YW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FN
UExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5D
b2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVD
MywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVy
biAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNv
cmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAm
JiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
Il8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1l
LnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJf
IikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQg
PT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3
aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JP
T0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGlu
dCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wg
PyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291
bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0g
c3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAg
ICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4
LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2
KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
SW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNv
bnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdElu
ZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9
IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2
ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwot
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7
Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRV
bmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwg
KGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0g
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
Ci17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3Qg
ZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0K
LX0KLQotLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxv
Zy4KLS8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21l
IG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFs
bCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQg
UHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17
Ci0gICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAg
IGRvCi0gICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKLSAgICAgICAg
aWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
c2cuZXJhc2UoZm91bmQsIHN0cmxlbihmYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmRUb0luZm9M
b2coIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZv
TG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZh
X2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmlu
dGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFy
Zyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICgh
bUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGgg
KyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAg
ICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsK
LSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9n
ICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAg
ICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OnJlc2V0SW5m
b0xvZygpCi17Ci0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1J
bmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtp
bmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kp
Ci17Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7
Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtUGl4ZWxFeGVj
dXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29u
c3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgp
OwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsK
LSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBt
U2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCi0gICAgewotICAg
ICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1V
c2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5p
Zm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0x
OwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9j
YXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLQotICAgIG1V
bmlmb3JtSW5kZXguY2xlYXIoKTsKLQotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVy
dGV4SExTTC5jbGVhcigpOwotCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cg
PSBOVUxMOwotCi0gICAgbUxpbmtlZCA9IGZhbHNlOwotfQotCi1ib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKLXsKLSAgICByZXR1cm4gbUxpbmtlZDsKLX0KLQotYm9vbCBQcm9ncmFtOjppc1ZhbGlk
YXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dy
YW06OnJlbGVhc2UoKQotewotICAgIG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9
PSAwICYmIG1EZWxldGVTdGF0dXMpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5k
ZWxldGVQcm9ncmFtKG1IYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjphZGRSZWYo
KQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVm
Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQot
Ci11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3Vy
cmVudFNlcmlhbCsrOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAg
aWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZv
TG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBp
bmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0
YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNo
YWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQot
ICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIp
Ci0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAg
ewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAv
LyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVB
dHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRy
aWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0K
LSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcg
PSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0
cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0g
PSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICps
ZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7
ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
dW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExl
bmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17
Ci0gICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5p
Zm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAgewot
ICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0KLQot
ICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBi
ZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXpl
ID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBu
YW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlw
ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUlu
ZGV4KyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9
IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51
bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkg
KyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRp
bmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAg
bURlbGV0ZVN0YXR1cyA9IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVs
ZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFBy
b2dyYW06OnZhbGlkYXRlKCkKLXsKLSAgICByZXNldEluZm9Mb2coKTsKLQotICAgIGlmICghaXNM
aW5rZWQoKSkgCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5v
dCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxz
ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAg
ICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8g
aWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQg
dHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwg
YW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2ls
bCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1
ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5
cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05P
V047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0
aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVy
c1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRz
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9n
RXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRo
ZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJv
cnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJF
X1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMg
b2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0
ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0
VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3Jt
OjpSZWdpc3RlckluZm8gKnJpLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17
Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFt
ZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQotICAg
IHsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNEWENPTlNU
QU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICByaS0+cmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJTZXQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJpLT5y
ZWdpc3RlckNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhS
YW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9u
OwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3Jk
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0
RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2Nh
dGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXgg
NjE4MzBjNi4uMWI0MjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dS
QU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywxNyBAQCBjbGFzcyBSZXNv
dXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsK
IAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0K
LXN0cnVjdCBVbmlmb3JtCitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwogewotICAgIFVuaWZvcm0o
R0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSk7Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBj
b25zdCBHTGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNv
cmF0ZWQgbmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVk
IG5hbWUKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQg
Y2hhciAqZGF0YTsKLSAgICBib29sIGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwot
ICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRl
eDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5m
byBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7Ci19OworICBwdWJsaWM6CisgICAgQXR0cmlidXRl
QmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotLy8gU3RydWN0IHVzZWQg
Zm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhh
bmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KLXsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4OworICBwcml2YXRlOgorICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJ
QlNdOwogfTsKIAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dy
YW0KICAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5k
ZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1
cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAg
IEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGlu
dCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsK
LQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAg
ICBib29sIGlzTGlua2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnko
KTsKKwogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKQEAgLTEzMSw5MSArNzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlv
bigpIGNvbnN0OwogCi0gICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1w
bGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJl
cGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlm
b3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJz
Y29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0p
OwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNv
bnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwog
ICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFy
eWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5n
cygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1z
KElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlm
b3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBi
b29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlm
b3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwot
ICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9v
bCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAg
IHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3Rl
ckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9p
ZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0
SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0g
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdt
ZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6
c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0
cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1W
ZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6
OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
LSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAg
IGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNh
bXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2Fs
VGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0K
LSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBT
YW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwot
ICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZv
cm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1V
bmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdM
aW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0
aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxp
bmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxl
dGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBk
ZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJv
b2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuY3BwCkBAIC0wLDAgKzEsMjU4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdM
IHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wK
K3sKK2NvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5n
IHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5p
Zm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJh
eVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFy
cmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNl
dChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5p
Zm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5
KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKwor
VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUo
UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50
KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQor
eworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBO
VUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBT
ID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0g
TlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNl
bWFudGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAg
ICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOworICAgIH0KKworICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7
CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2Nh
dGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
CisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7
CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAo
bUNvbnN0YW50VGFibGVWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFj
aygpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJp
bmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7
CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1
dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1w
bGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5n
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1Q
TEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4
dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0
dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0Owor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBl
IGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4
dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0K
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAg
ICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFy
Z2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1h
dHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3Jj
V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRh
cmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAg
dGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0g
OTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
X0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1F
eHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNb
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsg
aW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tp
bmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlm
b3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Cit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1V
bmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsK
KyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzog
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZv
cm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9W
RUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQg
c2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5h
cnk6OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxl
LCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsK
KyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlm
IChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVH
OworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0
VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwi
IikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxz
bCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19z
dHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291
cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsK
KyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENv
bXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBw
cm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJy
b3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBj
aGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRU
b0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7
CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdl
LT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3Rh
bnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmlu
YXJ5OjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhp
bXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAg
aW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsK
KyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0g
MyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9
IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFi
bGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
OyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47
IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2
YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wg
PSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVt
bl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNl
W2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47
CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNr
IHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tp
bmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1b
M10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFyeWluZ3Moc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0ws
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUg
dmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIg
IT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAg
ICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAg
ICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8g
dGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlp
bmdzKHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBI
TFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWlu
Z1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQg
Z2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1
dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlu
cHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXgg
dmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwg
b3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlu
cHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisg
ICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpz
dHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKwor
ICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBV
VFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsg
ciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBh
Y2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAy
IDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0
ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29y
ZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0K
KworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7Cisg
ICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7
CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6
aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRl
KGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3Vu
dChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRl
eEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVs
U2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGds
X1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4i
OworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsK
KyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChn
bF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
QVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9G
cmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7
CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lz
dGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFy
ZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hd
ID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0
ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+
bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGop
ICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisg
ICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7Cisg
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwor
ICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIg
ZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAg
IHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAg
ICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWln
aHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkg
LSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdp
ZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29v
cmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7
XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsg
ZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53
ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChp
bnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisK
KyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4i
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9y
WzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRp
bmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8
ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
Q29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
dGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0
ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlm
ICghbGlua1ZhcnlpbmdzKHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZz
XzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkodmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQ
cm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkg
PSBjb21waWxlVG9CaW5hcnkocGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25z
dGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAg
ICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4
U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4
RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZt
UGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVs
UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZl
cnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKwor
ICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxp
bmtVbmlmb3JtcyhHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50
VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNo
ZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAg
Ly8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBk
ZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxT
aXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAg
IGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVy
bWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZl
cnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmli
dXRlcyhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7Cisg
ICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1
dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0
dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24g
IT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVz
IGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwor
CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2
ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJp
YnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMg
fD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0
aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRp
b24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFt
ZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5k
QXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5k
ZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJU
RVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBh
dmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmli
dXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXgg
PSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dD
b3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtcyhHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUp
Cit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247
CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24p
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5k
ZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4Kysp
CisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5U
X0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFu
dERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25D
b3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYg
KCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRp
b24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2Yg
YSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlm
b3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBk
ZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOworCisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBs
ZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisg
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJF
X0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENf
U1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBm
aWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRM
RSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFu
ZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmll
bGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9
IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5k
ZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnRE
ZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAg
ICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoK
KyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0o
c2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5O
YW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9y
bShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0g
PSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1
bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENo
ZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsK
KworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07
CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlm
b3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9W
RVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKwor
ICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5
cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwor
ICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kp
CisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24o
X25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7
CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5k
IHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBE
M0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
VkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNj
cmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8g
bWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRl
Y29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1l
LmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRl
VW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29y
YXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgi
Ll8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVw
bGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRl
Y29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4g
bmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAi
YXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0
aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05T
VEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwg
dGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwg
d2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJ
bmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwor
ICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8g
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291
bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7
CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4
ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0
YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xW
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0K
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNh
bXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0
Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJ
bmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NElu
ZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2
WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jt
bml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3Vu
dCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAg
IH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9h
dCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29u
c3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAg
IH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7CisgICAgfQorfQorCisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRo
ZSBwcm9ncmFtIGluZm8gbG9nLgorLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2Ug
ZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywg
c28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJv
bSB0aGUgbG9nLgordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQo
Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisK
KyAgICBzaXplX3QgZm91bmQ7CisgICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZp
bmQoZmFrZXBhdGgpOworICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKworICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p
Cit7CisgICAgaWYgKCFmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2hhciBpbmZvWzEwMjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQo
dmFyYXJnLCBmb3JtYXQpOworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1h
dCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3Ro
ID0gc3RybGVuKGluZm8pOworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1J
bmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9M
b2csIGluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVu
Z3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJb
bG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5m
b0xvZyk7CisgICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAg
ICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9
Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUlu
Zm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZv
TG9nID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKworaW50IFByb2dyYW1CaW5h
cnk6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1
cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9M
b2cpCit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7
CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAg
IG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
aW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgewor
ICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7Cisg
ICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0
aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAo
YXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAg
fQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3Ry
aW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAg
ICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAt
IDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUg
PSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0g
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisg
ICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQor
eworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1h
eCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsg
MSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3Ro
OworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3Jt
cworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
dW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUo
KTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2
ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXpl
KCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBz
dHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0g
IlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAg
IGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFt
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50
IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUlu
ZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4
KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVt
cHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAo
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBh
cHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQorICAgIHsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFj
dGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJl
ZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0
aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAor
ICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElE
X09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7
CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0
XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVy
ZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1
bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
IiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5
cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGlu
ZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0g
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3Jk
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jZGM3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKQEAgLTAsMCArMSwy
MjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6
OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVs
YXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFn
ZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVy
dGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAg
flVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5
cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cisg
ICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7
CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9
IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAg
IGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNv
dW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4
OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisg
ICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7
CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0
aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVj
dCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5z
aWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcg
YSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3Jh
bUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1C
aW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFk
ZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZl
cnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7
CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5
cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xp
bnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdl
dFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0x
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3Jt
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisg
ICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXRE
eERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMo
KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIGJvb2wgbGluayhjb25zdCBBdHRy
aWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIGludCBnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKwor
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgdmFsaWRhdGUoKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJv
cnMpOworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0
cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFBy
ZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5p
Zm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVy
c2NvcmUKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFt
QmluYXJ5KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpo
bHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRh
YmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRd
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1Zhcnlpbmdz
KHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKwor
ICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElE
M0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9
ICIiKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBh
cHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFu
ICp2KTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1l
c3NhZ2UpOworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7
CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKKworICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGR1cmluZyBsaW5raW5nLgorICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRy
aWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2Vt
YW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAg
ICB7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1w
bGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1T
YW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWlu
dCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsK
KyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5k
ZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVw
dGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAg
IEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKKworICAgIGNoYXIgKm1JbmZvTG9nOwor
ICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9H
UkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6
Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUo
Z2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJU
ZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQp
CisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKwor
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0
ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJl
MkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0
dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVy
ZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBu
b3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4
dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRh
cmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0
KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVp
Z2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRl
cmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJu
YWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8v
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1Jl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0
dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sK
KyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVy
ZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQ
cm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQ
cm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7
CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFz
ZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7
CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJU
YXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZl
clRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRI
ZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0K
IAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitE
M0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29u
c3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25z
dAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1w
bGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBp
ZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkK
IHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2
b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJl
bGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBA
QCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQw
LDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAg
RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1
ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7
CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJldHVybiBt
RGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOwor
Y2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZm
ZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4
LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRl
eHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6
CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBs
ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4g
bVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUu
LjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewogICAg
IGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7
Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAg
ICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0g
ICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAg
ICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChj
aGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAg
ICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAg
IH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBz
dGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNp
emUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2Mw
ZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBW
YXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAg
ZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFk
ZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3
ZDIuLjFhZjA4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcApAQCAtMzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwogCiBzdGF0aWMgRDNERk9STUFUIENv
bnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAg
ICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAg
ICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJ
c0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRa
OworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBA
IC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNo
KGZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBA
QCBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkK
IHsKICAgICBtV2lkdGggPSAwOyAKQEAgLTE1NSw2ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVh
dGVTdXJmYWNlKCkKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQz
ZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1U
X0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAK
ICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsy
MDMsNyBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICAgICAgICAgIGxldmVsVG9G
ZXRjaCA9IHVwc2FtcGxlQ291bnQ7CiAgICAgICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdo
dCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1
ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3
VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDcg
KzI4OSw3IEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5CiB7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFj
ZSAhPSBkZXN0U3VyZmFjZSkKKyAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNl
ICE9IGRlc3RTdXJmYWNlKQogICAgIHsKICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4
ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0y
ODQsMTAgKzMwOSwxOSBAQCB2b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogfQogCiAvLyBTdG9yZSB0
aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhl
aWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8g
dGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0
ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFu
Z2xlIGF0IGxvY2tlZC5wQml0cyB3aXRoIGxvY2tlZC5QaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVh
Y2ggbGluZS4KIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBSRUNU
IGxvY2tSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIG1IZWlnaHQpOworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQpOwogICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAt
IDEpOwogCkBAIC0yOTcsMjkgKzMzMSwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBpZiAoc3VwcG9ydHNTU0UyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9h
ZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
LSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfTDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBn
ZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfUkdCQToKICAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAg
LTMyOCw3ICszNjksNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAg
IGxvYWRSR0I1NjVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwogICAgICAgICB9CkBAIC0zMzcsNyArMzc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyAr
Mzg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CkBAIC0zNTYsMTkgKzM5NywxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodAogICAgICAgICB7CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRl
ZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAg
ICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBs
b2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
UkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpA
QCAtMzc4LDI4ICs0MTksMzAgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgewog
ICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJH
UkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CisKKyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3
ICs0NTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaAogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gMDsKQEAgLTQxOSw3ICs0NjIsNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGgK
ICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAqZGVzdCA9
IE5VTEw7CisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisKKyAg
ICAgICAgaW50IHg7CisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCisgICAg
ICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYg
MHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVz
dFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgNyA8IHdpZHRoOyB4ICs9IDgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVy
cHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7CisgICAgICAgICAgICAvLyBJ
bnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJpdCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJv
CisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNv
dXJjZURhdGEpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0
LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvCisgICAgICAgICAgICBfX20xMjhpIGxvID0g
X21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIF9f
bTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworCisg
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeF0pLCBsbyk7CisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2Fz
dDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlIHRoZSByZW1haW5kZXIKKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
b3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2Fk
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKQEAgLTQyOCw3ICs1MTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwor
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyMiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1
MzEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAwOwpAQCAtNDU5LDE3ICs1NDIsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0K
IH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAg
IGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsKICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwogCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RC
eXRlc1BlclBpeGVsOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8g
QkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpegogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5V
TEw7CkBAIC00OTcsNyArNTc5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07CkBAIC01MDgsNyArNTkwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcs
NyArNTk5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWQKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUyOCwxNyArNjEwLDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVs
ID0gbmF0aXZlPyAyOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
ICAgICAgICAgCiAgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZv
cm1hdAogICAgICAgICB7CkBAIC01NTcsNyArNjM4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBA
IC01NjYsNyArNjQ3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2kKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCsw
XTsKQEAgLTU3Nyw3ICs2NTgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7CkBAIC01ODYsNyArNjY3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
OCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjc4LDcgQEAg
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02
MDYsNyArNjg3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcs
NyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
NDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
CkBAIC02MzgsNyArNzE5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaQogICAgIH0KIH0KIAot
dm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9
IE5VTEw7CkBAIC02NDcsNyArNzI4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3ggKiAzICsgMF07CkBAIC02NTgsNyArNzM5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0
OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NzgsNyArNzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0wKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTY4
OCw3ICs3NjksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAog
ICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwMSw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC03MjgsNyArODA5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0
NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0
Nyw3ICs4MjgsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0g
c291cmNlW3hdOwpAQCAtNzU5LDcgKzg0MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc2OCw3ICs4NDksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2
MSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAg
LTc4OSwxMiArODcwLDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAq
IDE2KTsKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMs
MTIgKzg4NCwxMiBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1j
cHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyNSAr
ODk4LDQzIEBAIHZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0
KSB7CisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zmc2V0ICUg
NCA9PSAwKTsKKworICAgIFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVD
VCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRo
LCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6
ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpICsg
aW5wdXRTaXplICsgaW5wdXRQaXRjaDsKKwogICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAg
ICAgewogICAgICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgbG9hZERYVDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBsb2FkRFhUM0RhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgIGxvYWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIHVubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBGbGlw
Q29weURYVDFCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewpAQCAtOTQ4LDExICsxMDQ3LDkgQEAgc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1
QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QK
ICAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKIH0KIAotdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VS
VCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGgg
PT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7CiAg
ICAgQVNTRVJUKG91dHB1dFBpdGNoICUgOCA9PSAwKTsKQEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKICAg
ICAgICAgICAgICAgICB7CkBAIC05OTYsMTEgKzEwOTMsOSBAQCB2b2lkIEltYWdlOjpsb2FkRFhU
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQg
JSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lk
dGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5w
dXRQaXRjaCAlIDE2ID09IDApOwogICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwpA
QCAtMTAzNSw3ICsxMTMwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogMTYpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbnRzQWNyb3NzOyB4ICs9IDQpCiAgICAgICAgICAgICAgICAgewpAQCAtMTA0NiwxMSArMTE0
MSw5IEBAIHZvaWQgSW1hZ2U6OmxvYWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQg
JSA0ID09IDApOwogICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdp
ZHRoID09IDEpOwogICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJU
KG91dHB1dFBpdGNoICUgMTYgPT0gMCk7CkBAIC0xMDg1LDcgKzExNzgsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZQogICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0
OyArK3kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAg
ICAgICAgICB7CkBAIC0xMjY3LDkgKzEzNjAsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAg
ICAgbURpcnR5ID0gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQotICAgIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpLAotICAg
ICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSks
CitUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtRDNE
VXNhZ2UodXNhZ2UpLAorICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9v
bCh1c2FnZSkpLAogICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7
CiB9CkBAIC0xMjgwLDcgKzEzNzMsNyBAQCBUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdl
KCkKIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewotICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7CiB9CiAKIGJvb2wg
VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAg
RDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQ
b29sOwogfQogCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtRDNEVXNhZ2U7Cit9CisKIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAt
MTQ1MCwxNSArMTU0OCw3IEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+
bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAg
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTU1Nywx
NiBAQCB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsK
LSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdp
ZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0K
KyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIH0KIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBp
eGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAg
ICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KIApAQCAtMTUyMSwzNyArMTU3NSw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
CiAKIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0g
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlv
ZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3Jt
YXQgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAg
ICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdo
dCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZz
ZXQgKyBoZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFn
ZS0+bG9jaygmbG9ja2VkLCAmdXBkYXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0
ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNp
emUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAg
ICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdo
dCwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRT
aXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAg
ICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTY5MywyNyBA
QCBib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJl
U3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4
dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3Jh
Z2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1
cmU7CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywg
RDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdl
dCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJp
YWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6
OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNh
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwg
bVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQog
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRl
eHR1cmUgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHdpZHRoLCBoZWlnaHQsIGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdl
dFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIApAQCAtMTY5NSw2ICsxNzI1LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9y
YWdlMkQoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEw
LDIwIEBAIEdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQot
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6Omdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1h
dCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBU
ZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXRE
M0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBd
LmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3Jt
YXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9p
ZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIw
NDksMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6
OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4
dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVy
dFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJU
YXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdl
dFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhT
dG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBk
M2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBu
ZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWln
aHQpOwogICAgIG1JbW11dGFibGUgPSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKQEAgLTIwNzQsOCArMjEwNyw4IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAg
ICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9I
QUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0
ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8ICht
TWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjE1Nyw5ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21w
cmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0
SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOworfQorCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0
dXJlKCkgY29uc3QKQEAgLTIxNzMsMTEgKzIyMTEsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQogICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgp
OwogICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9S
TUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJv
b2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmICht
VXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFU
IGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVz
YWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAg
ICB7CkBAIC0yMjE3LDkgKzIyNTUsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCgpCiAgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgp
OwogICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
OworICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxl
dmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1U
ZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTIyMzIsOCArMjI3MSw4IEBAIHZvaWQg
VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkKICAgICAgICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1Rl
eFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMxNSwxMiArMjM1NCwxNCBAQCBSZW5k
ZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCiAKICAg
ICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwogfQogCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7
CkBAIC0yMzMzLDYgKzIzNzQsMzMgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAg
CisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0Rl
cHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKworICAgIHVwZGF0ZVRleHR1cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVh
bGx5IGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbCgwKTsKIH0KIApAQCAtMjM1MywxOCArMjQyMSwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4
dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0
KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1B
VCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVz
YWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNE
VVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
CisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KKyAgICBpZiAoc2l6ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0
OCw4IEBAIFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAg
ICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpA
QCAtMjQ1NCwzNSArMjUyOCwzNiBAQCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgp
IGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJl
Q3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVp
Z2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFn
ZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwot
fQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVD
dWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpn
ZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjY1Nyw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVy
bmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9G
TE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkp
KQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjc1NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsK
LSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVy
biBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0CkBAIC0yNjk0LDExICsyNzY5LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNv
bnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNE
Rk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAK
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNk
dXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7
CkBAIC0yNzQyLDkgKzI4MTcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVu
ZGVyVGFyZ2V0KCkKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBd
WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNp
emUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAg
ICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZv
cm1hdCwgc2l6ZSwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAg
aWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjgzNSw4IEBA
IHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogCkBAIC0yOTI5LDEwICszMDA1LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVN
YXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSBzaXplCiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7
CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQs
IHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNh
Z2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRh
cmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVs
cywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwx
MiArMzEyNSwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCkKIAogICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNl
UHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtRmFjZVBy
b3hpZXNbZmFjZV07CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3Vy
ZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsK
ICAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKQEAgLTMwODcsNCAr
MzE2NSw0IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkKICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2
IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAg
ICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2Nr
KEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lk
IHVubG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBE
M0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFz
cyBJbWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2Fk
QWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NF
MihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBs
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZvaWQgbG9hZERYVDFEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERY
VDNEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZERYVDVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2
ICsxMjcsOSBAQCBjbGFzcyBJbWFnZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAg
ICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJl
Y3QpOworICAgIHZvaWQgdW5sb2NrKCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNp
emVpIG1IZWlnaHQ7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBj
bGFzcyBJbWFnZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxp
Y2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0
dXJlU3RvcmFnZShEV09SRCB1c2FnZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgp
OwogCiAgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2Vk
KCkgY29uc3Q7CiAgICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNh
Z2UoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFy
Z2V0KSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2UpOwogCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAg
IGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAg
ICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBA
QCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdy
YXBUKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0
VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBj
b25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2
IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29u
c3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEp
OyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZh
bHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUg
cmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmU7Ci0KICAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJ
bWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
OwpAQCAtMjU4LDcgKzI1Miw3IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4
dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQo
SURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJE
KGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9v
bCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9S
TUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTJEKCk7CiAKQEAgLTI4NiwxMSArMjgwLDEyIEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJn
ZXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQz
REZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRl
eEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VU
ZXhJbWFnZSgpOwogCkBAIC0zMDksNiArMzAzLDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1Ymxp
YyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpOwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRE
ZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIApAQCAtMzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRl
eHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29t
cGxldGUoKSBjb25zdDsKQEAgLTM0MSw3ICszMzksNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVT
dG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVs
cywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQg
dXNhZ2UsIGludCBzaXplKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgp
OwogCkBAIC0zNjksMTEgKzM2NywxMSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CkBAIC0zOTEsNyArMzg5LDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZQogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzk2LDEw
IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURp
cmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAg
LTQwNiw3ICs0MDcsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdl
dCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCk7CiAKICAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFn
ZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBA
IC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
dmVydGV4Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERh
dGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
VHJhbnNsYXQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNv
bnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJp
YnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5h
Y3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEp
OworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJp
bmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAog
ICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZl
ciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNo
aW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUg
OiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBE
MwogdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21U
eXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlw
ZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBm
b3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdl
bmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0
PEdMdWludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9G
SVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBE
M0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVj
dGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1
c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1h
bGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4IGVlOGVjYTkuLjk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VT
aXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNz
ZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUp
CisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMg
ZnJvbSB0YWJsZSAzLjQuCitib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUpCit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2Ug
R0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgor
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KKworICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVN
CisgICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZB
TElEX09QRVJBVElPTgorICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAg
Y2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9S
R0I6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0Xzhf
T0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkp
CisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwog
ICAgIH0KIAotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0
ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlm
IChjb21wcmVzc2VkKQogICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0
aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9
IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVp
Z2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBj
b21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJl
c3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRh
cmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZv
cm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
IH0KKworICAgIGlmIChjb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQg
IT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAg
ICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgMCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5
b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBm
b3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRS
ZWFkRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyAr
MTIyNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xD
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnMKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2
b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENv
cHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTAogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJE
KGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwg
dGV4MmQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQs
IGxldmVsLCBHTF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVy
ZUZvcm1hdCA9IHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1h
dCkKQEAgLTE0MTQsNiArMTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0
NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVy
ZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJl
c3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1
LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgt
PmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBH
TF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4o
dGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQo
dGV4dGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJk
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3Vi
ZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBp
bnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdM
Y2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmli
dXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0
QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRp
b24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElO
S19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKSAhPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQogICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEg6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
IGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZv
cm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAK
ICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9n
cmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAm
YnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5p
Zm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1m
dihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5n
ZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihs
b2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0
MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVu
aWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGlu
dCogcGFyYW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9u
LCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0
MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVj
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8
Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3Jt
YXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8
dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0
LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNl
IEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
QEAgLTUwMzYsNyArNTI1NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAg
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFs
Zm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8v
IGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBA
IC01MDY2LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAor
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAg
aWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiAr
NTY3MCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
QU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAg
ICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUo
Zm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09
IDAgfHwgcGl4ZWxzID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAg
ICAgICB9CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNE
ZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lk
dGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1
ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6
OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0
dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFs
c2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1h
dCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYw
MTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJp
dihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYw
LDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU4NTIsNyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01
OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNv
dW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZv
aWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFs
aWRhdGUoKTsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDYzLDYgKzY4MjEs
NzkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0g
cHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9y
bWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1
ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQg
PSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmlu
YXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgs
IGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisg
ICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsK
ICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNv
bnN0IGNoYXIgKgogICAgICAgICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEV9LAogICAgICAgICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFO
R0xFfSwKLSAgICB9OworICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30s
CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKIAogICAgIGZvciAo
aW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lv
bik7IGV4dCsrKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagppbmRleCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIudmNwcm9qCkBAIC00MDEsNiArNDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAKaW5kZXggNjU4OWViMS4uNDQxMDVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwx
NyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJ
c0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQ
VEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGlu
IGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8g
VmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20g
dGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwot
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZv
cm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQp
CiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVu
dW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1J
TkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVO
VDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0K
QEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1
cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9F
WFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdS
QThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Cisg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9V
TlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAg
ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05P
TkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC03NjcsNiArNzQxLDcgQEAgRDNERk9S
TUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0
Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2FzZSBHTF9S
R0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZN
VF9BOFI4RzhCODsKQEAgLTk2NSw2ICs5NDAsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNE
Rk9STUFUIHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVw
dGhGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNl
Rm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKworYm9vbCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9S
TUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZN
VF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RN
VUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVf
Tk9OTUFTS0FCTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuaAppbmRleCA4ODIzOGRjLi5lZDE1MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkg
QEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0g
KChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9S
TUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wn
KSkpOworCiBuYW1lc3BhY2UgZ2wKIHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1
dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
YWxpZ25tZW50KQogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgs
IEdMZW51bSBmb3JtYXQpOwogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQo
R0xlbnVtIGZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9v
bCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFs
VGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCk7CiAKQEAgLTc5LDYgKzgyLDggQEAgR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQg
ZGVwdGhGb3JtYXQpOwogR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9y
bWF0KTsKIGJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJv
b2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0
aEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBmMzU5NDFjLi4xNWE5NzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjI5OCw2ICsy
Mjk4LDE1IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNw
cApAQCAtMjMxOCwyMCArMjMyNywyOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3Bwc3RydWN0LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJv
bC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1ZlcnNpb25HTFNMLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAotICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3V0
aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggMDViM2E2Ni4uYzAyNTdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01
ODQxLDYgKzU4NDEsMTUgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIFwKQEAg
LTU4ODUsNiArNTg5NCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGlt
aXRzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbGV4ZXJfZ2x1ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKQEAgLTU5MDAs
NiArNTkxMSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTA4LDYgKzU5MjAsMTAgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zl
cnNpb25HTFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Zl
cnNpb25HTFNMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01
OTE1LDggKzU5MzEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTBl
M2U1Yy4uMTU4ZGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTQxLDYgKzM5NDEsOSBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0NvbW1vbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlYnVnLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwK
QEAgLTM5NjAsNiArMzk2Myw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBp
bGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbGVuZ3RoX2xpbWl0cy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCkBAIC0zOTc1
LDE0ICszOTc5LDE2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yRVNTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yR0xTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFu
c2xhdG9ySExTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UeXBl
cy5oIFwKLSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5oIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKQEAg
LTM5OTUsNiArNDAwMSwxMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcCBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAor
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAg
XApAQCAtNDAxOSwxMCArNDAyOSwxMSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9
MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCi0gICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQw
MzIsNiArNDA0Myw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3Ry
dWN0LmMgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9sZXhlcl9nbHVlLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwK
</data>
<flag name="commit-queue"
          id="156083"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148426</attachid>
            <date>2012-06-19 14:31:29 -0700</date>
            <delta_ts>2012-06-20 11:12:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1059834</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi4yZDg1OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbik7Cit9CisKIHZvaWQgVFBhcnNlQ29udGV4dDo6
d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKSB7CkBAIC0yMjksNiArMjM0
LDExIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICB2
YV9lbmQobWFya2VyKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdh
cm5pbmcobG9jLCByZWFzb24sIHRva2VuLCAiJXMiLCAiIik7Cit9CisKIC8vCiAvLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KIC8vCkBA
IC0yNjUsMTMgKzI3NSwxMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeQogICAgIHN3aXRjaCgg
dHlwZSApewogICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAi
Tm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiJXMiLCAiIiApOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAo
aW50KSIsICIiLCAiJXMiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMzIzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVk
KiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0
ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9u
ZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMzQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQq
IG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM3NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCog
bm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYg
c3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIs
IG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDcgKzQwOCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAg
ICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24g
cmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQx
NCw3ICs0MjQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRl
cm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhw
cmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MzAsNyArNDQwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJv
ckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYg
KGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkg
YWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJv
bmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00NDksMjQgKzQ1OSwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
cmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIu
Y29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09
IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18i
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIp
OwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUg
cmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0
dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUzOSw1MSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVj
dG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBh
cmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeElu
TWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBt
YXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJv
bSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVs
bCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNv
bnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUt
PmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBu
b3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BD
b25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXpl
KCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0
eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVu
b3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBj
b25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2Rl
LT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50
IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxl
cih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NTg1LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNr
KGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs2MTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlz
VmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3
ICs2MjUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMx
LDcgKzY0Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2NTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjU4LDcgKzY3MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAg
ICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYg
CiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVy
cyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNjkwLDE0ICs3MDIsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVF
cnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50
ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUg
YSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcyNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUo
dHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTczMSw3ICs3NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzc5LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3
IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBk
aWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFy
cmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBp
bmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgyOCw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUs
IFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVp
bHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MzUsNyAr
ODQ3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCAqbm9kZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogCiAgICAgICAgIGludCBmcmFnRGF0YVZh
bHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIo
KVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhh
dmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICIlcyIsICJnbF9GcmFnRGF0YSBjYW4gb25s
eSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg4Miw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBt
dXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRp
YWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04OTEsNyArOTAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JD
aGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlm
ICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiVzIiwiIik7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUg
PSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiwxMSArOTE4LDExIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlCiBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2Vk
IG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpLCAiJXMiLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NzAsMTIgKzk4MiwxMiBAQCBjb25zdCBURnVu
Y3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBj
YWxsLCBib29sICpidQogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGlu
ZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5h
bWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJv
ciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBj
YXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAyNyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmll
ciwgVFB1CiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2Yg
cXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8KQEAgLTEwMzAsNyArMTA0Miw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0g
aW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24t
bWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTI0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwog
ICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIApAQCAtMTMwMSw3ICsxMzEzLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJt
VHkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzQ1
LDcgKzEzNTcsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1
cm4gMDsKQEAgLTEzODAsNyArMTM5Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQyOCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0
cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBh
bGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAg
ICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4K
ICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBu
b3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyAr
MTQ2NSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNv
bnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xf
U1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkwLDggKzE1MDIsOSBAQCBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAg
IHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQg
ZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAK
ICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCmluZGV4IDNlMDU3NjMuLmEyYWUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC03Myw5ICs3MywxMyBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgCisgICAgICAgICAg
ICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAg
IHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciog
cmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgNSwgNikpKTsKKyAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgcmVj
b3ZlcigpOwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmluZGV4IGE2MDBjMDIuLjll
ZjRmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5o
PgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBA
IC0xNTgsMTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5z
aWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjbwogCiAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0
byBiZSBoZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRm
KGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQg
MHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1z
ZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
CiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAg
ICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0
ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2cs
IHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2Nh
dGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2Ug
aW4gZ3VhcmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxF
Ul9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFu
ZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJp
bmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rp
b25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rp
b25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0g
bm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBF
T3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQor
ICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5j
dGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBA
IC0yNCw2ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsK
K2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRl
bnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNw
ZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyBy
ZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBjbGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1
cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUq
IHJvb3QpOworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNj
b3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBz
aGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBt
YW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hh
ZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0
dGFja3MuCisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiBy
b290LCBib29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFm
ZmVjdCBjb250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNh
biBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNo
YWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAg
ICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAg
IGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBA
QCBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAg
aW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKICAgICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5k
bGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZh
ckluZm8ubmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBu
YW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBl
ZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5
CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxv
dy4KICAgICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1h
eE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZv
Lm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBl
ZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmlu
ZGV4IGVkYmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8v
CiAvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAg
LTU2LDcgKzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5n
bGVkTmFtZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRO
b21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIw
XTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWRO
YW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIK
KworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwg
dGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMu
YmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQor
fQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBU
R3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rp
b25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVu
dCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1G
dW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBu
ZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVy
bUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJ
ZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVy
ICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAq
aXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGlu
dGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2Vy
dChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBj
b2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVp
Y2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgp
KSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9u
KGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOwor
ICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCog
bG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2Jh
Y2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxP
cCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2Fs
T3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7
CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9w
OjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxM
OworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5n
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcw
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIzNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZTsKKworVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vo
b2xkZXIKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVp
bGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQo
bm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAg
c3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5j
dGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dy
ZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihp
bnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdl
IGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFn
Z3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4g
ZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlr
ZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9
IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAv
LyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3Vt
ZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGlu
dGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJn
dW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1h
aW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0g
Kml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAg
ICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3Jl
YXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAg
ICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1
bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNh
bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9s
IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQg
c3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24g
Y2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlp
ZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBm
dW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMg
dGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25t
ZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0
aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25D
YWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVD
aGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVn
aW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRo
aXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJl
bnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5n
LgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisK
KyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5k
ZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBz
eW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHko
KSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9CisgICAgICAgICZUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9w
KCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKwor
Ym9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1C
aW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmlu
YXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5h
cnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNh
bE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAg
ICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1M
ZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9s
ID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWlu
dGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50
b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVl
IG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAg
ICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBu
b3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAh
PSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1Jp
Z2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRl
cm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMs
IGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1i
b2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBz
eW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50
LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNz
ZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25t
ZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIg
dmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxs
CisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5p
bnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3At
PmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2Rl
U2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0
VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdy
YXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJt
TG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNo
aWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5
cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVy
bUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmln
aHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24p
Cit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rp
b24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0
TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVT
ZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
biA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1
ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
VHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJt
RmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBp
bnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1D
b25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNl
dE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29u
ZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25k
aXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBo
TG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAg
IGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGlu
dGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+
Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlz
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9k
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5v
ZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rl
cy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJl
bnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5v
ZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTg0IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVh
dGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0
aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xh
c3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRl
bmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0
ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisgICAgLy8KKyAgICAvLyBG
b3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRp
b25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUu
CisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVh
Y2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5vZGVzLgorICAgIC8vCisg
ICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFN0
YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAg
ICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJl
bnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNl
dCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkg
PyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBu
b2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7Cisg
ICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMg
aXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
byBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAg
ICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9w
U2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKworICAg
ICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgICAgIG5l
d1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAg
ICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBh
cmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNz
aWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sg
dGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVu
dE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbm9kZVNldHMudG9wKCkt
Pmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYg
c3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAg
ICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGlu
c3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwg
aXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWlu
dGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5t
Tm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5l
cigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRT
dGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlz
IGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBX
aGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBu
b2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2Rl
IHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3Rvcnkt
Pm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAv
LyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNzaWdubWVudC4KKyAgICAv
LyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBp
bnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRy
ZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2Nv
cGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
IHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtS
aWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1
c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5bWJvbC4KKyAgICAvLwor
ICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgY2xhc3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1YmxpYyBUR3JhcGhTeW1ib2wgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBUU3VidHJlZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhT
eW1ib2woTlVMTCkge30KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgVFN1YnRyZWVQbGFj
ZWhvbGRlciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVy
IGtSaWdodFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1YnRyZWVQbGFjZWhvbGRlciYgc3VidHJl
ZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJv
bHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0
bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7
CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAg
ICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
ZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5w
b3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2sm
IGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOwor
ICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBn
cmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAg
ICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJp
bmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBURGVwZW5k
ZW5jeUdyYXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5
bWJvbFN0YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZmYzQ4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dElu
ZGVudGF0aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERlcHRoKCk7ICsraSkK
KyAgICAgICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgb3V0cHV0
SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdl
dEFyZ3VtZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKKyAgICAgICAgICA8PCBwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlv
bkNhbGwqIGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0
U3ltYm9sKCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAgICAgICAgPDwgc3ltYm9sLT5nZXRJbnRl
cm1TeW1ib2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJzZWxlY3Rpb25cbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
Cit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9vcCBjb25kaXRp
b25cbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3Ao
VEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsK
KyAgICBtU2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAi
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbVNpbmsgPDwgIlxuIjsKKwor
ICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luKCk7IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFw
aE5vZGUqIHN5bWJvbCA9ICppdGVyOworICAgICAgICBtU2luayA8PCAiLS0tIERlcGVuZGVuY3kg
Z3JhcGggc3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAg
ICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtU2luayA8PCAiXG4iOworICAg
IH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKyNkZWZpbmUgQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKworY2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZv
U2lua0Jhc2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3Vt
ZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1
bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lk
IG91dHB1dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0
ZToKKyAgICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBt
U2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQ
SF9PVVRQVVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ODU3NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8g
VGhlc2UgbWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHRocm91Z2ggdGhlIGdy
YXBoIGFuZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3ZvaWQgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhU
cmF2ZXJzZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQorCit2b2lkIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKworICAgIGdyYXBoVHJh
dmVyc2VyLT5pbmNyZW1lbnREZXB0aCgpOworCisgICAgLy8gVmlzaXQgdGhlIHBhcmVudCBub2Rl
J3MgY2hpbGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbURlcGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1EZXBlbmRlbnRO
b2Rlcy5lbmQoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUq
IG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNlci0+aXNWaXNpdGVkKG5v
ZGUpKQorICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0K
KworICAgIGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOworfQorCit2b2lkIFRHcmFw
aEFyZ3VtZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVudCh0aGlzKTsKKyAgICBU
R3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdy
YXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRGdW5jdGlvbkNhbGwodGhp
cyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQor
Cit2b2lkIFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFNlbGVjdGlvbih0
aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9vcCh0aGlzKTsKKyAgICBU
R3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKaW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBA
IC04LDkgKzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19p
bml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2Zp
bmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3Nj
YW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVy
biBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmlu
ZGV4IDlhMDM5NGIuLjg4ZTdjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRI
RSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogCiAldG9wewogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBAQCBPICAgICAgICAgICBbMC03XQogImV4
dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJu
YWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2Ui
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY3LDcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAidW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAi
aW5wdXQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRw
dXQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEy
ICsxNzUsMjEgQEAgTyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
ZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNCw3IEBAIE8gICAgICAg
ICAgIFswLTddCiAKIDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7
IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQotMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFs
aWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Ciswe0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1
cm4gMDt9CiB7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0
LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQpAQCAtMjU2LDcgKzI2Nyw3IEBAIE8gICAgICAgICAgIFswLTdd
CiAKIFsgXHRcdlxuXGZccl0gICB7ICB9CiA8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRl
ckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KLTwqPi4gICAgICAgICAgICB7IGNvbnRleHQt
Pndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7
IH0KKzwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3du
IGNoYXIiLCB5eXRleHQpOyByZXR1cm4gMDsgfQogCiAlJQogCkBAIC0yNzgsMjAgKzI4OSwyMCBA
QCB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHZvaWQgQ1BQV2FybmluZ1Rv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIp
OwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtNDI3LDcgKzQzOCw3IEBAIHZvaWQg
SGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQog
fQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hh
ciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNy
YzsKQEAgLTUzNSw3ICs1NDYsNyBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIp
IHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5
eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0
cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4
dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVz
ZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVy
biAwOwogfQpAQCAtNTQ0LDkgKzU1NSw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQt
PkFmdGVyRU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1
bmV4cGVjdGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJl
YXNvbiwgInVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIH0KQEAgLTU2OCwxOSArNTc5LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsK
IH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5l
cik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nh
bm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKICAgICAKICAgICAvLyBJbml0
IHByZXByb2Nlc3Nvci4KICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hT
dHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAg
ICAgPSBjb3VudDsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAg
cmV0dXJuIEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQppbmRl
eCBkNmM4ODY5Li5mYTRhZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKQEAgLTg0LDIxICs4NCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZS
QUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAogICAgIH0gIFwKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAg
ICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2YXJpYWJs
ZV9pZGVudGlmaWVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYg
KCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0
ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcmltYXJ5X2V4
cHJlc3Npb24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAg
ICAgICAgLy8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwpAQCAtMjM1LDkgKzIzNSw5IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4
KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9s
Tm9kZSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJy
YXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAg
LTMxMCw3ICszMTAsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5
IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXki
LCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAg
LTM1NSw3ICszNTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5v
dCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MDUsMTMgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5
cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJl
IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9y
LCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJl
cXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAk
My5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIGZ1bmN0aW9u
X2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBl
ZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5n
ZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAn
aW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgZnVuY3Rpb25f
Y2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVy
cm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAi
Iik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9
CkBAIC02NDcsNyArNjQ3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVm
YXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVs
bCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29u
c3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0
eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMDcsMTIgQEAg
ZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhh
dmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3Ry
aW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3Zl
cmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmll
clN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dp
dGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1l
dGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICco
dm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
JDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIGZ1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVs
bHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQx
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxs
b3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
ciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZp
ZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5x
dWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4u
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUg
KyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQx
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAn
dm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
JDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBpbml0X2RlY2xhcmF0
b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAg
ICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMjk4
LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQi
LCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIu
c3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0MzgsNyBAQCBzaW5nbGVfZGVjbGFy
YXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhh
dmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2Yg
aXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDUwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90
eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qg
c3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAo
JDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3Vw
cG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZh
bHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFs
IikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY2
Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVD
VCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xNzE5LDcgKzE3MTks
NyBAQCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCok
JClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1l
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0u
dHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1
cmU6IiwgInN0cnVjdCIsICIlcyIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTk2NiwxNCArMTk2NiwxNCBAQCBmb3JfcmVzdF9z
dGF0ZW1lbnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAg
ICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBp
biBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IEJSRUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBz
dGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEu
bGluZSk7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJO
IFNFTUlDT0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsx
OTg5LDEwIEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZh
bHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5
cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3
ICsyMDM3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAt
MjA0Nyw3ICsyMDQ3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA3
OSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhl
IHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2
YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAg
ICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJu
IHR5cGUgIT0gdm9pZCA/CiAgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHBy
b2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKICAgICAgICAgaWYgKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0
LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlv
bi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAiJXMiLCAkMS5mdW5j
dGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5OS4uZGMxZGYxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCkBAIC0xLDYgKzEsNiBAQAogI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE5MSw2ICsxOTEsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNj
YW5fdDsKIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwog
I2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5l
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQog
I2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjA0LDcgKzIwOSw3IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogICAgICAqLwogICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAg
ICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAg
ICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAtLXl5bGluZW5vO1wKQEAgLTIyNiwxMSArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAKICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJl
ciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJ
ICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9j
aGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQg
c2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXlj
b25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAog
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5
cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMs
OCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2db
XSAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNf
aW5mbwpAQCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2lu
dDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAg
MTM2LCAgMTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAg
ICAgMTM1LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAg
IDkwLAotICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5
LCAgMTIxLCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAg
MTE2LCAgMTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5
LCAgIDk5LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAg
ICAwLCAgICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0
LAotICAgICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMs
Ci0gICAgICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAx
MDQsICAgNTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAg
MCwgICA5NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4Nywg
ICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1
MywgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAg
OSwgICAzMywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICAzNiwKLSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0
MiwgICA0MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA4MywgICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAg
IDgxLCAgIDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1
LCAgIDkwLCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAg
IDkwLAotICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYx
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAg
IDY0LCAgIDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAg
IDkwLCAgIDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDU0LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0
LAotCi0gICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAg
OTAsICAgNDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAK
KyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1
MywgIDE1MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwg
IDEzMCwgIDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0
NSwgIDEzMiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwg
ICA5OCwgICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAg
ICAgIDE1MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwg
IDExNiwKKyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEw
NCwgIDEwMCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwg
IDEyNSwgIDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgMTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAw
LCAgICAwLCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAg
IDAsICAxMDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAg
OTgsICAgOTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAg
MzQsICAgMzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgNTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgMzYsICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAg
NDIsICAgNDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5
OCwgICA4MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwK
KyAgICAgICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5
OCwgICA5OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5Nywg
ICA5OCwgICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2
NiwgICA2MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1Nywg
ICA5OCwgICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwg
ICAzMSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwg
ICA2NywgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2
LCAgIDk2LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDQ2LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAg
IDk4LAorICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4
LCAgIDkxLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAg
IDkzLCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KQEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwg
ICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAx
MSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwg
ICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAy
NCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywK
LSAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MiwgICAzMSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzNSwgICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAg
MSwgICAzOSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAg
IDMxLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYx
LCAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIz
LCAgIDI0LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4
LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQs
ICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisg
ICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAs
ICAgNjEsCisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0
NzgsMjE0IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X21ldGFbNjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAg
NCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
NDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAg
IDAsICA2MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2Mjgs
ICA2MjgsICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAx
NjMsICA1OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2Mjgs
ICA2MjgsICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0g
ICAgICAxMzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQs
ICAxODEsCi0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2
MjgsICA2MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2
MjgsICAgIDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAs
ICA2MjgsICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAg
IDAsICA2MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAg
ICAgIDU2OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwg
IDU1MCwKLSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0
OCwgICAgMCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwg
IDUyOSwgIDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5
MiwgIDUzMCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywg
IDUyOSwgIDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAg
MCwgIDMyMiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAg
IDUxNCwgIDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUy
MCwKLSAgICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwg
IDUxMSwgIDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUw
MSwgIDUwNCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4Niwg
IDQ4MywgIDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAg
NDcyLCAgNDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0
LCAgNDY5LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAg
MzcyLCAgMzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0
LAotICAgICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAg
NDYzLCAgNDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1
LCAgNDQ0LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2
LCAgNDQwLCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAg
ICAwLCAgNDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAw
LCAgNDE4LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAg
IDAsICAgIDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUs
ICA0MTgsICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0
MTMsICA0MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAs
ICAzODksICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0g
ICAgICAzODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAz
ODUsICAzODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAs
ICAgIDAsICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAz
NjQsICAgIDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgs
ICAgIDAsICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAg
ICAgIDIzOCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4Niwg
IDE3MywKLSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQx
OSwgIDQyMywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAg
NjgwLCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgx
LCAgNjUzLCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAg
NjUxLCAgNjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgx
LCAgMTI4LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAg
MTczLCAgMTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0
LAorICAgICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjgxLCAgNjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAg
ICAwLCAgNjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgx
LCAgNjgxLCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAg
NjgxLCAgNjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2
MjEsICA2MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIs
CisgICAgICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAg
IDAsICAyMTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIs
ICA1OTYsICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1
NzcsICA1ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1Njks
ICA1ODEsICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAg
IDAsICAzNDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAs
ICA1NjYsICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisg
ICAgICA1NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUs
ICAgIDAsCisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1
MzksICA1NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYs
ICA1MzcsICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywg
IDUzNywgIDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUy
OSwgIDI4MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywg
IDM4MSwgIDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAg
ICAgIDUwOCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwg
IDUwMywKKyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUw
MCwgIDM2NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUw
MCwgIDQ5NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwg
IDQ4MCwgIDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4
MywgIDQ4MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAg
IDQ4MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2
NiwKKworICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAg
ICAwLCAgICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYw
LCAgNDY1LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAg
NDYxLCAgNDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAw
LCAgNDQ2LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAg
NDQ5LCAgICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAw
LAorICAgICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIw
LCAgNDMyLCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAg
NDI3LCAgNDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIz
LCAgNDIyLCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAs
ICA0MzEsICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQs
CisgICAgICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAz
OTEsICAzODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcs
ICAzMDQsICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAy
NjIsICAgIDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTks
ICAxMTMsICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAx
NjEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0g
ICAgICA0MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAg
NDU4LCAgICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NTgsICA0NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAg
IDAsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAs
ICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAg
MTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAg
ICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAg
MzAsCi0gICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAg
NDIsICAgMzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAg
NTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEs
ICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAg
MjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAs
CisgICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAg
MzMsICAgMzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEs
ICAgNDIsICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAg
NDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQs
ICAgNTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAg
OTEsICAgNjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAg
ICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
ICAgIDgsCiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAg
ICAgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA5MywKLSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEy
MCwgICA2OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwg
ICA3NywgICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgICA3OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4Mywg
ICA4NSwgICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQy
NCwgICA4MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAg
ICAgMTAzLCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAg
MTA1LAotICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5
LCAgNDIyLCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAg
MTM4LCAgMTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5
LCAgMTg0LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAg
NDE4LCAgMTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0
LCAgIDc0LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAg
MjMwLCAgNDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5
LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAg
MjgyLCAgNDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAg
NDEyLCAgMTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAs
ICAgNzgsICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAy
MTEsICAzMDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEs
Ci0gICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAx
NTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcs
ICAyMjEsICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTQsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0g
ICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYs
ICAzMTcsCi0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwg
IDM5NSwgIDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1
OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1Miwg
IDM4OSwgIDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4
MywgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwg
IDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAg
ICAgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1Nywg
IDM1NiwKLSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwg
IDMzOSwgIDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywg
IDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAg
MzExLCAgMzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAg
ICAgMjkzLCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAg
Mjc4LAotICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4
LCAgMjY3LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAg
MjU5LCAgMjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAg
MjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMx
LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAg
MjE0LCAgMjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAx
LAotICAgICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAg
MTkyLCAgMTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3
LCAgMTc2LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAx
NjAsICAxNTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUs
ICAgODksICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAg
IDkzLCAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIw
LCAgIDY4LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAor
ICAgICAgIDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5
LCAgIDgwLAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3
LCAgMTQzLCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQs
ICAxMDIsICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAx
MTYsICAxMTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcs
ICAxNDksICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisg
ICAgICAxMzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAs
ICAxOTIsCisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAx
OTMsICA0NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0
NTIsICAxODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODks
ICAxNTUsICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAy
ODYsICAyODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1Niwg
ICA4MSwgIDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgICA4MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0
NiwgIDIyMiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAg
IDIyMywgIDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwg
IDQ0MiwgIDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwg
IDQzOCwgIDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAg
NDA1LCAgNDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5
LCAgNDI4LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDU4LCAgIDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUz
LCAgNDI0LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAg
NDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAx
LCAgNDAwLCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAor
ICAgICAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzgyLAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAz
NjYsICAzNjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgs
ICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAz
NDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEs
ICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisg
ICAgICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksCisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAz
MDUsICAzMDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEs
ICAyOTAsICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAy
NzcsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjks
ICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAy
NTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAg
ICAgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwg
IDIzOSwKKyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIy
OSwgIDIyOCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywg
IDIxMiwgIDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIw
MiwgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwg
IDE5MSwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3
NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAg
IDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
MCwKKyAgICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwg
ICA2NCwgIDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAw
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAg
MTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4
Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9
CiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAg
MzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUs
ICAgMzUsICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0g
ICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMs
ICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAg
NDEsICA0MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYs
ICAgNTUsICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwg
ICAzNywgICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0
OSwgICAzOSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwg
IDQyMCwgICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAg
ICAgIDEzNSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwg
IDEyMCwKLSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3
NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5
MiwgIDE5MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3
OCwgIDQxMCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAg
ICA4MCwgIDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEy
MiwKLQotICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0
LCAgMjM0LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4
LCAgMTUxLCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUz
LCAgIDgzLCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAg
MzkzLCAgMTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1
LAotICAgICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMjE5LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEs
ICAzOTEsICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAz
NzYsICAzNzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAz
NjksICAzNjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAz
NDIsICAzNDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAz
MjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUs
ICAyOTQsICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0g
ICAgICAyNzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUs
ICAyNjQsCi0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTAsICAyNDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIz
OCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwg
IDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIw
OSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwg
IDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAg
ICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4Miwg
IDE4MSwKLSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3
MiwgIDE3MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2Mywg
IDE2MiwgIDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEz
OCwgIDEzNywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDEx
NywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAg
ICAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAg
IDk5LAotICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUz
LCAgIDQ4LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAg
ICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwKKyAgICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwg
ICAxNywgICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAz
MywgICA0MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwg
ICA1MSwgIDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAg
NDUzLCAgIDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2
LAorICAgICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAg
IDM5LCAgIDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5
LCAgIDUwLCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAg
IDQ3LCAgIDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5
LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4
LCAgIDc4LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAor
ICAgICAgMTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0
LCAgIDc0LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAg
IDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4
LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzks
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAg
ODAsICAgODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjks
ICA0NDMsCisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0Mzks
ICA0MzgsICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAyNDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUs
ICA0MzQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAx
NTUsICAyNDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsCisKKyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1
NSwgIDI1NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywg
IDQyNiwgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4
OCwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAg
IDQ2MiwgIDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQw
NCwKKyAgICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5Miwg
IDM4OSwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3
NywgIDM3NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2Miwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0
OSwgIDM0OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAg
MzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAx
LAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAg
MjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcy
LCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAg
MjYzLCAgMjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4
LCAgMjQ0LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAg
MjMyLCAgMjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2
LCAgMjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAor
ICAgICAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAx
NzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAs
ICAxNjksICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAx
NDUsICAxNDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYs
ICAxMzQsICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisg
ICAgICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQs
ICAxMTMsCisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAx
MDQsICAxMDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAg
NDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29s
ZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwg
MCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAg
ICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhp
bmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJF
SkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC04MjEsOCArODQyLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVG
RkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwog
ICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxl
bmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7
CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3Rh
cnQ7CkBAIC04NzUsNyArODk2LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVf
dCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDcsMTMgQEAgeXlfbWF0Y2g6
CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQy
NiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOwor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDIsMjUyIEBAIFlZX1JVTEVfU0VUVVAK
IAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQ
CiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6Citj
YXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2Ug
MTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAx
OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0
YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwg
eXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2Ug
OTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5
eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6
CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0
PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgor
Y2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2Fz
ZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5
OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2Fz
ZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
RVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6
CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNl
IDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5U
eXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJu
KExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxF
X1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJF
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1
cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2Fz
ZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFS
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2Ug
MTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xF
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgor
Y2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsg
CiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU1LDEyIEBAIFlZX1JVTEVfU0VU
VVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoK
K2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBy
dWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRj
aCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc2
OSwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJ
RUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT53
YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9
Cit7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQpOyBy
ZXR1cm4gMDsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRV
UAogRUNITzsKIAlZWV9CUkVBSwpAQCAtMTkwOSw3ICsxOTYyLDcgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCWVsc2UKIAkJewotCQkJaW50
IG51bV90b19yZWFkID0KKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CiAJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCiAJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCkBAIC0xOTIzLDcgKzE5NzYsNyBAQCBzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJ
CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OwpAQCAtMTk1NCw3ICsyMDA3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8K
IAkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVy
X3RvX21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsK
KwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAogCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CiAJCX0KQEAgLTIwMTYsNyAr
MjA2OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2
ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIw
NDUsMTEgKzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChp
bnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21l
dGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9p
c19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJy
ZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRf
c3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cjsKIAkJCSsreXlnLT55eV9jX2J1Zl9wOwogCiAJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKQEAgLTIxMDMsNyArMjE1Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgogCQkJCQl7CiAJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJl
dHVybiBFT0Y7CisJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQogCQkJCQkJWVlfTkVXX0ZJTEU7CkBAIC0yMzY2LDcgKzI0MTks
NyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogICovCiBz
dGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxNywxMSBAQCBZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2Fu
X2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVm
OwotCXl5X3NpemVfdCBuOwotCWludCBpOworCXl5X3NpemVfdCBuLCBpOwogICAgIAogCS8qIEdl
dCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVP
QidzLiAqLwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjYxOSw3ICsyNjcxLDcgQEAgRklM
RSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCiAgKi8KLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreXlfc2l6ZV90
IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7
CkBAIC0yOTEyLDIwICsyOTY0LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC0zMDYxLDcgKzMxMTMsNyBAQCB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5z
LCBpbnQgbnVtVG9rZW5zKQogICAgIH0KIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcp
Cit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMTY5LDcgKzMyMjEsNyBAQCBpbnQgY2hl
Y2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1
c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5
bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXll
eHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzE3OCw5ICszMjMwLDkgQEAg
dm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikg
ewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRl
eHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0
KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzIwMiwxOSArMzI1NCwx
NSBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
eXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVP
RiA9IGZhbHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMg
PSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAg
ID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJM
ZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2Nh
bkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAs
IGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLjA5MmEz
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmNwcApAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwyMSBAQCBleHRlcm4gdm9pZCB5eWVy
cm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5l
IEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAog
ICAgIH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
ICAgICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZy
YWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OyAgXAogICAgIH0gIFwKIH0KQEAgLTIxNTcsNyArMjE1Nyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CkBAIC0yMTY2LDcgKzIxNjYsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBj
YW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMjAxLDcgKzIy
MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25z
dGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwpAQCAtMjI0Nyw5ICsyMjQ3LDkgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBv
ZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0
U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTIzMzAsNyArMjMz
MCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAi
Iik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQyNSwxMyArMjQyNSwxMyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQg
aW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQg
c2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmll
bGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVm
dCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUg
Y2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJv
ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjU4Niw3ICsyNTg2LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTc6CiAKICAgICB7Ci0g
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1l
dGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9y
dGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICA7fQpAQCAtMjY5Nyw3ICsy
Njk3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0zMTkxLDEyICszMTkxLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjUzLDcgKzMyNTMsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZp
cnN0IGlzIHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBl
eGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQg
dHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
LnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCB5eXJl
ZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBm
dW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVk
IGFzIHdlbGwuLi4KQEAgLTMyODksNyArMzI4OSw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZykpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQg
JiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVk
IGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBh
cyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzUzOCw3ICsz
NTM4LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgOTg6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBl
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSk7CkBAIC0zNjE2LDcgKzM2MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MzUsNyArMzYzNSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtMzY0NiwxOSArMzY0NiwxOSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAgKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
OwpAQCAtMzk0Nyw3ICszOTQ3LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0
ZXJuYWxPRVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtMzk2MCw3ICszOTYw
LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNF
eHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJl
Y3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpLT5z
aXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0g
KCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5h
bWUoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBp
biBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVM
aXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0Iiwg
IiVzIiwgKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRG
aWVsZE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjEsNyArNDQyMSw3
IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wQ29udGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDMyLDcgKzQ0
MzIsNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIs
ICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwpAQCAtNDQ0NCw3ICs0NDQ0LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDQ1NiwxMCArNDQ1NiwxMCBAQCB5eXJlZHVjZToKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVu
Y3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5u
b3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
KSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxp
bmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDUx
Nyw3ICs0NTE3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDU1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTg5LDcgKzQ1ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8/PyBD
aGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lk
ID8KICAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBv
biBpbnRlcm1lZGlhdGUgY29kZQogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICIlcyIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCA1
NDQxNTU3Li40MDQxYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2
b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
VXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGlt
aXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyBy
ZXR1cm4gb3B0aW1pemU7IH0KQEAgLTUzMyw2ICs1MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9M
ZWZ0KSwKICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZl
cnNlcigpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KSB7fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4zOTE1OGQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAg
ICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07
CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAs
IDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRh
YmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5k
SGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAgIGlm
IChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsK
ICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRm
KHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29s
bGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBj
b2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFY
X0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisg
ICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlk
ZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRh
YmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBA
IC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
KQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5l
eHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAm
YXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVk
LCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFi
bGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dN
c2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05T
OyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291
bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFi
bGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAg
LTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQot
CQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJCWRl
ZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICog
eXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNo
YXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1
cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUgKGFs
bFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1lc3Nh
Z2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7
CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9IGVs
c2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAgICAg
dG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7
CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20p
IHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxvYyBs
b2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9T
eW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNyb1N5
bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFsID0g
ezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAgICBtYWNyby5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2YWwuc2NfaW50ID0gdmFs
dWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBzbnBy
aW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUp
OwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7CiAg
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwogICAgIHN5bWJvbCA9IEFk
ZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4
OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQog
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7CiAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNwcmlu
dGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
IHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAi
JWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RB
TlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChhdG9tID09
IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVt
YmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFs
cHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAg
ICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvCiB2b2lkICBDUFBXYXJu
aW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2Vz
IGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1U
b2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3Ry
aW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5n
Lgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBh
bGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciop
OyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGlj
ayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3Qg
Y2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250
ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQg
bGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2xleGVyX2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yYTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2OSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBwOjpE
aWFnbm9zdGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW5wdXRTcmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0aWNz
KiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJvb2wg
Q29weVN5bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXlsdmFs
cHApCit7CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAg
IHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IG5hbWUuY19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4KElu
cHV0U3JjKiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVyKiBz
cmMgPSAoKElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6
VG9rZW4gdG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNoICh0
b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRlIHNy
Yy0+bGV4ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBmcmVl
KHNyYyk7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0gRU9G
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAgICAg
ICAgaWYgKENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHRva2VuLnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9JREVO
VElGSUVSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgor
ICAgICAgICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUuY19z
dHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENvcHlT
eW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9GTE9B
VENPTlNUQU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5DOgor
ICAgICAgICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9P
UDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAgICBy
ZXQgPSBDUFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RToKKyAgICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJldCA9
IENQUF9BTkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6
CisgICAgICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0FE
RF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJfQVNT
SUdOOgorICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxfQVNT
SUdOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjoK
KyAgICAgICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lHTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJR047
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgorICAg
ICAgICByZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5lKTsK
KyAgICBTZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhlciA9
IG5ldyBwcDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7CisgICAg
ICAgIGRlbGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
SW5wdXRTcmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0
U3JjTGV4ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7Cisg
ICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+
ZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKworICAg
IHJldHVybiAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaApAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
TEVYRVJfR0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklucHV0
U3JjKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSk7CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2RlZmlu
ZSBfX01FTU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVt
b3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQ
b29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTljYzQz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGlj
IGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAg
ICBBU1NFUlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSBy
ZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVu
ZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1MZXhl
cihOVUxMKSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0K
LQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1ib29s
IENvbnRleHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8vIFRP
RE8oYWxva3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBub3Qg
bmVlZCB0bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0K
LWJvb2wgQ29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQp
Ci17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1
dCAhPSBOVUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1
aWx0SW5NYWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3VjY2Vz
cyA9IHBhcnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJu
IHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2Nh
dGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotewot
ICAgIHN0ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBwYXJh
bWV0ZXJzLCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChuYW1l
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQotICAg
IHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qg
c3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9zLmZpbmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAgewot
ICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUp
Ci17Ci0gICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0K
LQotLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0KCkK
LXsKLSAgICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVs
ZXRlU2Vjb25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7
Ci0gICAgbUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lkIENv
bnRleHQ6OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZh
bHVlKQotewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZh
bHVlOwotICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5ldyBz
dGQ6OnN0cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
ID0gbmV3IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVdID0g
bmV3IE1hY3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBzdGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9DT05URVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRl
ICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJs
aWM6Ci0gICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQoKTsK
LSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0
KTsKLQotICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJlYWRJ
bnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0KCkg
eyByZXR1cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46Okxv
Y2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAg
ICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5lTWFj
cm8oY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQoY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1h
Y3JvKj4gTWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIo
KTsKLSAgICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1hY3Jv
KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2UoKTsK
LQotICAgIHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlucHV0
OwotICAgIFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBE
ZWZpbmVkIG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0
PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9
CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEg
Y291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsK
K30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkK
K3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAg
ICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQg
PCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAsMCAr
MSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19I
XworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJj
ZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNz
YWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcg
YW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1Ymxp
YzoKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5U
RVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURfQ0hB
UkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwK
KyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9C
RUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZF
LAorICAgICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAg
VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisgICAg
dmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAgICBX
QVJOSU5HCisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNhOTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVy
KCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFhZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNU
SVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2
ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50
cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFz
c2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlh
dGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAgdmly
dHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9y
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2Yg
Zm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdt
YShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVD
VElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRl
ICJUb2tlbi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3Rp
dmVFbHNlKCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlm
Iik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOworc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOwor
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5h
bWVzcGFjZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2Vy
dmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4
ZXIpIHsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tl
bikKKyAgICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgICAg
IG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxl
eGVyOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0
b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAg
IG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAg
ICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcjJykg
cGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdcbicp
OworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgeworICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAg
ICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKKyAg
ICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgICAg
IHBhcnNlSWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUlmZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFyc2VJ
Zm5kZWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUVsc2UpCisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQor
ICAgICAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAg
ICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24odG9r
ZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24p
CisgICAgICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9rZW4p
OworICAgIH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IDApKQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAgd2hp
bGUgKHRva2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
PT0gMCkgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVP
Rl9JTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVm
aW5lKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVS
ZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3Jv
OworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRv
a2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAg
ICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFj
cm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAodG9r
ZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
eworICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5l
Y2Vzc2FyeSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxz
byBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBh
cmUgbWFjcm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwor
ICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJl
ZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYm
ICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5p
bnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2Vu
LT52YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgbU1h
Y3JvU2V0LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBU
T0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVy
KTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNy
b1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25QYXJz
ZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgo
dG9rZW4pOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lvblBh
cnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgaGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBUT0RP
KGFsb2twKTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBs
ZW1lbnQgbWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVu
dCBtZS4KKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUu
CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihU
b2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBh
c3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKworICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVF
cnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFn
bWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJB
R01BX05BTUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAg
ICAgICAgUklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAg
ICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlk
ICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46Cisg
ICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFH
TUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUu
CisgICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+
IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24s
IG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9O
QU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAg
IGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAg
IGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlk
ICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
aWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JF
SEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lP
Tl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVS
U0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYg
KHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRp
b24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2Vu
KiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2Vy
dCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIgbWFj
cm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
CkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1h
Y3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNz
IERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsK
KworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJl
Y3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKwor
ICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJz
ZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZk
ZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Cisg
ICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRv
a2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9r
ZW4pOworCisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9T
ZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVy
KiBtRGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjExNTY4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApAQCAtMCwwICsxLDE5NTggQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdO
VSBCaXNvbiAyLjUuICAqLworCisvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtl
IHBhcnNlcnMgaW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwg
MjAwMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVp
dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5
b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxs
IG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisg
ICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3Qg
aXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9k
aWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0
aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxl
dG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVj
aWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1
bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlv
bi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisv
KiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwg
YnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJz
ZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRo
IHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBU
aGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkg
bWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJl
IHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAg
ZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5H
RVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNv
biBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICov
CisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi41IgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8K
KyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICov
CisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVT
SCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5n
IGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUg
dGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAg
ICAgICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVy
cm9yICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVm
aW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVi
dWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJz
dCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRv
LWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9u
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNp
bmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9r
ZW4uaCIKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0
aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiog
dG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisKKworc3RhdGlj
IGludCB5eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5
ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworCisKKy8qIEVu
YWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAor
I2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVm
IFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJS
T1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgor
CisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxF
CisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisKKy8qIFRva2Vucy4gICovCisj
aWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0
b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdn
ZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7Cisg
ICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1BfT1IgPSAyNTksCisgICAgIE9QX0FORCA9IDI2
MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9QX0VRID0gMjYyLAorICAgICBPUF9HRSA9IDI2
MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9QX1JJR0hUID0gMjY1LAorICAgICBPUF9MRUZU
ID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAgfTsKKyNlbmRpZgorCisKKworI2lmICEgZGVm
aW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGlu
dCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5
cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworLyogQ29weSB0aGUgc2Vjb25kIHBh
cnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVm
IHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlO
VDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWlu
dDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5
dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
dHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZ
WVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBl
ZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpF
X1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVk
IHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJ
WkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRl
IDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5l
IFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50
CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAt
MSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVf
TkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQg
KCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlf
CisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHBy
ZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLworI2lmICEgZGVm
aW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkg
KGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyog
SWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3Rh
bnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisj
ZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBp
bnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAgIGlu
dCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZp
bmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tl
cyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKwor
IyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAg
IGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxv
Y2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUg
PGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBk
ZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlm
IGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxz
ZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9B
TExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAgICAg
ZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlm
CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lm
eSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19G
UkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYg
WVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5
IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBh
IHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBz
YWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBh
IHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBp
bGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVu
ZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUg
WVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisj
ICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKKyAg
ICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAorCSAgICAg
JiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxp
Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIEVYSVRf
U1VDQ0VTUworIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyMgICBlbmRpZgorIyAgZW5kaWYK
KyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAh
IGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlm
bmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJl
ZSAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRl
ZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBB
IHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8K
K3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUg
eXl2c19hbGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVu
IG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dB
UF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2Yg
YW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisg
ICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4p
ICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsg
WVlTVEFDS19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCisKKy8qIFJl
bG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQor
ICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFu
ZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZl
cyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEg
cHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8J
CQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJ
XAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0
YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3Np
emUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0g
eXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAg
ICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVE
ICYmIFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8u
ICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBp
Zm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAg
IGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5
IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVm
aW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwK
KwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5
eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAg
ICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICFZWUNPUFlf
TkVFREVEICovCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlv
biBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRl
eCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAt
LSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlO
TlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgor
LyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAg
NTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVz
cG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlN
QVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFu
c2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAg
ICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAor
ICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIy
Cit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0
IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMs
ICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAg
MzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2
MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAg
ICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxl
cycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAg
IDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAg
IDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAy
OSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAg
ICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAg
IDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwg
ICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAor
ICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5
LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAg
IDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjks
ICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJl
IHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAgNzYsICAgIDc2LCAgICA4MywgICAgODQs
ICAgIDg3LCAgICA5MCwgICAgOTMsICAgIDk2LCAgICA5OSwKKyAgICAgMTAyLCAgIDEwNSwgICAx
MDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LAorICAg
ICAxNDIsICAgMTU1LCAgIDE1OCwgICAxNjEsICAgMTY0LCAgIDE2NywgICAxNzAKK307CisjZW5k
aWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8q
IFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wt
TlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VO
Uywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10g
PQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9P
UiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAgIideJyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAi
JzwnIiwgIic+JyIsICJPUF9HRSIsICJPUF9MRSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwg
IicrJyIsICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+
JyIsICInKCciLCAiJyknIiwgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307
CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIElu
dGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0u
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAg
MCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4
LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAg
MjY2LCAgICA0MywgICAgNDUsICAgIDQyLAorICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMs
ICAgMTI2LCAgICA0MCwgICAgNDEKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1i
b2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0
IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNU
W1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1O
VU0uCisgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcg
ZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAg
IDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAy
NSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwg
ICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0t
TlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAg
ICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXgg
aW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLwor
I2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0
W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywg
ICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAg
MTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAs
ICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsK
KworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZ
WVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisg
ICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1
bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5
bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXRhYmxlW10gPQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAg
MzIsICAgIDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAg
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAg
ICAgMzEsICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIKK307CisKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQo
eXlzdGF0ZSkgXAorICAoKHl5c3RhdGUpID09ICgtMTEpKQorCisjZGVmaW5lIHl5dGFibGVfdmFs
dWVfaXNfZXJyb3IoeXl0YWJsZV92YWx1ZSkgXAorICBZWUlEICgwKQorCitzdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDggeXljaGVja1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAg
IDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsCisgICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisg
ICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAg
ICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxCit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGlu
dGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRF
LU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAg
ICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAg
MjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXll
cnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVN
UFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUg
WVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRs
YWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9S
IGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQor
ICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwg
Zm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEs
IHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4g
IE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40
LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNj
dXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQg
WVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBH
Q0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkg
YWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQg
dG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdo
aWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKwor
I2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNL
VVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVN
UFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAo
VG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgWVlQ
T1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJ
CQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXllcnJvciAo
Y29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAgICBZ
WUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQorCisKKyNk
ZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RF
RkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJ
ZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVu
ZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8K
KworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9DX0RF
RkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAorICAg
IGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQp
LmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChDdXJy
ZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKwkg
IChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlc
CisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1
bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAg
KEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJICAg
IFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2Nv
bHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDAp
Lmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNl
bmRpZgorCisKKy8qIFRoaXMgbWFjcm8gaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGli
aWxpdHkuICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgZGVmaW5lIFlZX0xPQ0FU
SU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorI2VuZGlmCisKKworLyogWVlMRVggLS0g
Y2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZ
WUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQor
I2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlmCisK
Ky8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMg
aWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisK
KyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVn
KQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKwor
IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJ
ICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJ
CQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkg
IFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZh
bHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAg
XAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVU
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCov
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQK
K3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZ
UEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0
aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVl
cCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZ
U1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2Vu
ZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7
CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5U
ICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVT
RSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBk
ZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91
dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0
ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGlu
dCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRl
eHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZ
WUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVs
c2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBl
XSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVl
cCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMg
Qk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNr
X3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5
dHlwZV9pbnQxNiAqeXlib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgor
eworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0b20g
PD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9t
OworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRv
bSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAg
eXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDAp
KQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Citg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9y
ZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0
KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNv
bnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0
ICpjb250ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGlu
dCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpc
biIsCisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJl
ZHVjZWQuICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgewor
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAg
ICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwg
Y29udGV4dCk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisj
IGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVi
dWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2Uu
ICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBj
YW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRl
ZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlw
ZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3Ap
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLwor
CisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tz
LiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2Vu
ZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cg
dG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1l
dGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRo
ZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZ
U1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVj
aXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRl
ZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisK
KyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9T
VFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0
aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikK
KyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFy
ICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7
IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOwor
fQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQg
X19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMg
ICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVT
VCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZ
WURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQor
I2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIg
Knl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5eWQg
PSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsr
ID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOwor
fQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZ
UkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2Fy
eQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5
eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5l
Y2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBj
b21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4g
IFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBu
b3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Cisg
ICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIg
Knl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAg
eworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3Ry
OworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcn
OgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2Fz
ZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3Ry
aXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAg
aWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAg
YnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXlu
XSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1b3Rl
czogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5c3Ry
KTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMgZW5k
aWYKKworLyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0Ms
IGFuIGVycm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuIFlZVE9LRU4g
Zm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAgIFlZU1NQLgorCisgICBSZXR1cm4g
MCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNH
IGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNh
c2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBi
eXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRv
byBsYXJnZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5eXN5bnRheF9lcnJvciAoWVlTSVpF
X1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAgICAgICAgICAgICAgeXl0eXBlX2lu
dDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1l
cnIgKDAsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwor
ICBZWVNJWkVfVCB5eXNpemUxOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TSA9IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KKyAgY29u
c3QgY2hhciAqeXlmb3JtYXQgPSAwOworICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCisg
IGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAvKiBO
dW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBw
ZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsKKworICAvKiBUaGVy
ZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gQXNzdW1l
IFlZRkFJTCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNlZQor
ICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8y
MDA5LTEyL21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlzIGZp
bmUgYXMgaXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlvbi4KKyAgICAgLSBJ
ZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24s
IHRoZW4KKyAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBpcyBp
ZiB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0
IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgIHRva2VucyBiZWNhdXNlIHRo
ZXJlIGFyZSBub25lLgorICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2Fo
ZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKKyAgICAgICB0aGlzIHN0YXRlIGlzIGEgY29u
c2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAorICAgICAgIGRldGVj
dGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVybWlu
ZQorICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tlbiB0
byByZXBvcnQuICBJbiB0aGF0CisgICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5
bnRheCBlcnJvciIuCisgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFk
IGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKKyAgICAgICBjb25zaXN0ZW50IHN0YXRlIHdp
dGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhCisgICAgICAgcHJl
dmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24tZGVm
YXVsdAorICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVs
YXRlZCB5eWNoYXIuCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBk
ZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5mb3Jt
YXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVyZm9y
bSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCisg
ICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMs
IHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJl
ZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZl
ciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBvbmUg
ZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3Qg
YmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3Rh
dGUuCisgICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCisgICAgeworICAgICAgaW50IHl5
biA9IHl5cGFjdFsqeXlzc3BdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0
b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAg
ICB7CisgICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQg
bmVnYXRpdmUgaW5kZXhlcyBpbgorICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jk
cywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAgICAgIHRoaXMgc3Rh
dGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgICAgIGludCB5
eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBi
b3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICBpbnQgeXlj
aGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICAgICAgaW50IHl5eGVuZCA9IHl5Y2hl
Y2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgICAgIGlu
dCB5eXg7CisKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsr
eXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9
IFlZVEVSUk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5
dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
eXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgeXlzaXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVb
eXl4XTsKKyAgICAgICAgICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5
eXRuYW1lW3l5eF0pOworICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQor
ICAgICAgICAgICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSkpCisgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICB5eXNpemUg
PSB5eXNpemUxOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgc3dpdGNo
ICh5eWNvdW50KQorICAgIHsKKyMgZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJyZWFr
CisgICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAgWVlDQVNFXygx
LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMiwg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpKTsKKyAgICAg
IFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAl
cyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNSwgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBv
ciAlcyIpKTsKKyMgdW5kZWYgWVlDQVNFXworICAgIH0KKworICB5eXNpemUxID0geXlzaXplICsg
eXlzdHJsZW4gKHl5Zm9ybWF0KTsKKyAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6
ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICByZXR1cm4gMjsKKyAgeXlzaXplID0g
eXlzaXplMTsKKworICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsKKyAgICAgICp5
eW1zZ19hbGxvYyA9IDIgKiB5eXNpemU7CisgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19h
bGxvYworICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElN
VU0pKQorICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisgICAg
ICByZXR1cm4gMTsKKyAgICB9CisKKyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5n
ZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBi
ZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBhIHN0cmluZyB3
aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworICB7CisgICAgY2hhciAqeXlwID0g
Knl5bXNnOworICAgIGludCB5eWkgPSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkg
IT0gJ1wwJykKKyAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYg
eXlpIDwgeXljb3VudCkKKyAgICAgICAgeworICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5
cCwgeXlhcmdbeXlpKytdKTsKKyAgICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICB9Cisg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB5eXArKzsKKyAgICAgICAgICB5eWZvcm1h
dCsrOworICAgICAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogWVlFUlJPUl9W
RVJCT1NFICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZ
WVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAor
eXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3Qg
Y2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAg
ICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZ
VVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsK
KyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAp
OworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsK
KyAgICB9Cit9CisKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5
cGVzLiAgKi8KKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Cisj
ZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAq
LworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFy
c2UgKENvbnRleHQgKmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisj
ZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCisKKworLyotLS0tLS0tLS0tLgorfCB5eXBhcnNl
LiAgfAorYC0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJT
RV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAq
WVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250
ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0
ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFk
IHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51bWJlciBvZiBzeW50YXgg
ZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsK
KyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBl
bmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFu
ZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAg
IGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0byB0
aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAg
ICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0
ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5
eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBU
SF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZU0la
RV9UIHl5c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9v
a2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAq
LworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1h
bnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAg
Ki8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIg
Zm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5
eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1z
Z19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0so
TikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBz
eW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJv
IHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOwor
CisgIHl5dG9rZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMgPSB5eXZzYTsKKyAgeXlz
dGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGlu
ZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5
bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJl
YWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9u
ZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkg
c3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0
ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAgeXlzc3AgPSB5eXNzOwor
ICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdz
dGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVy
ZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVz
aGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5
c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNz
ICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3Vy
cmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAg
ICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZs
b3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3Rh
Y2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNl
IHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5
eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyogRWFjaCBzdGFjayBwb2lu
dGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1
c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRp
dGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkg
ICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93
IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAg
ICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAg
IH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUK
KyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUg
c3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3Np
emUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAg
ICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBU
SDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxs
b2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tf
QllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVM
T0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlm
ICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBl
bmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsg
eXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZ
RFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAo
dW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlz
dGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3Rh
dGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0t
LS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKwor
ICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAg
UmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxy
ZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRv
IHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgIGdv
dG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4g
aWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZ
WUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5
eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFk
aW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAo
eXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsK
KyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Cisg
ICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIp
OworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVp
bmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9y
LCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAw
IHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5
ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgewor
ICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8geXll
cnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisK
KyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXll
cnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKwor
ICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsK
KworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3
c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBm
b3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRl
ZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdv
dG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXly
ZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1
Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5v
bnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBg
JCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZB
TCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlz
b24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlW
QUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwg
YW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQg
dW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9S
RURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAy
OgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSAoeXl2c3BbKDEpIC0gKDEp
XSk7CisgICAgICAgIFlZQUNDRVBUOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSBeICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAg
eworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7
CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkg
LSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigp
KTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisKKyAgICB7CisgICAgICAgIGlm
ICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAi
IC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0
ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAg
ICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAo
MildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjU6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSArICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIC8qIFVz
ZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1
aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRp
b24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVs
eSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0
cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwKKyAgICAgYnV0IHRo
YXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBzZW1hbnRpYyBhY3Rpb24gaW52
b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRl
ciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRo
ZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAgIGluY29ycmVjdCBkZXN0cnVj
dG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4gIEluIHRoZQorICAgICBjYXNl
IG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQg
bGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3lu
dGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29rYWhlYWQgaXMgdHJhbnNsYXRl
ZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwg
Jnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8qIE5v
dyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0
YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNr
IHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0g
eXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlz
c3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVs
c2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5
eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2
ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVz
ZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0
b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIp
OworCisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXlu
ZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlf
KCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50
YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7CisgICAgICAgIGNoYXIg
Y29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7CisgICAgICAgIGludCB5eXN5bnRh
eF9lcnJvcl9zdGF0dXM7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFY
X0VSUk9SOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAg
ICAgeXltc2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1
cyA9PSAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikK
KyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9
IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgh
eXltc2cpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVm
OworICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAg
ICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4
X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9
IHl5bXNnOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yIChj
b250ZXh0LCB5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIp
CisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYgWVlTWU5U
QVhfRVJST1IKKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisg
ICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVh
ZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5
eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlu
cHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAg
ICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAg
IHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9Cisg
ICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVy
IHNoaWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOwor
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1
c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJv
cmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBp
ZiAoLypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90
IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAor
ICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0g
MDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsK
KyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNv
ZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJs
YWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3Jl
bWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3Rb
eXlzdGF0ZV07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorCXsK
KwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYm
IHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVb
eXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAg
IC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVy
cm9yIHRva2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKwor
ICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0s
IHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9
ICp5eXNzcDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisg
ICorK3l5dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8K
KyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNw
KTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQ
VCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFC
T1JUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYg
IWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0t
IG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJv
ciAoY29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7Cisg
IC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIg
IT0gWVlFTVBUWSkKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9v
a2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgICAgICB1c2VyIHNlbWFu
dGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB5eXRva2Vu
ID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlz
Y2FyZGluZyBsb29rYWhlYWQiLAorICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwg
Y29udGV4dCk7CisgICAgfQorICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUg
cnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQ
VC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5
c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAo
IkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7
CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYg
KHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZ
RVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJl
dHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KGludCogbHZhbHAs
IENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2Vu
KiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAg
eworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgKmx2YWxwID0gYXRv
aSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVh
azsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9MRTogdHlwZSA9IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9SSUdIVDogdHlwZSA9IE9QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9MRUZUOiB0eXBlID0gT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9
ICd8JzsgYnJlYWs7CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBj
YXNlICcmJzogdHlwZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+Jzsg
YnJlYWs7CisgICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICct
JzogdHlwZSA9ICctJzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7
CisgICAgICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlw
ZSA9ICcvJzsgYnJlYWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAg
ICBjYXNlICchJzogdHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+
JzsgYnJlYWs7CisgICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNl
ICcpJzogdHlwZSA9ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KworICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlz
IHZhbGlkLgorICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOwor
CisgICAgcmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiByZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Np
b25QYXJzZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9z
dGljcykKK3sKK30KKworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4s
IGludCogcmVzdWx0KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdu
b3N0aWNzID0gbURpYWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAg
Y29udGV4dC50b2tlbiA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAg
IGludCByZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7Cisg
ICAgICBjYXNlIDA6CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl
IDI6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVN
T1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworI2Rl
ZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KKworI2luY2x1
ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsK
K2NsYXNzIExleGVyOworc3RydWN0IFRva2VuOworCitjbGFzcyBFeHByZXNzaW9uUGFyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKTsKKworICAgIGJvb2wgcGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJl
c3VsdCk7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXhw
cmVzc2lvblBhcnNlcik7CisKKyAgICBMZXhlciogbUxleGVyOworICAgIERpYWdub3N0aWNzKiBt
RGlhZ25vc3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWNiNjc2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpAQCAtMCww
ICsxLDI2MyBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIFlh
Y2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KKworSUYgWU9V
IE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNo
LAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHBh
cnNlci4KKyovCisKKyV7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVk
KF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFy
aWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIK
KyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0
NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRl
IDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHsK
K3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAg
ICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1
bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCislfQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1w
cmVmaXg9InBwIgorJXBhcnNlLXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7
Q29udGV4dCAqY29udGV4dH0KKworJXsKK3N0YXRpYyBpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29u
dGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgor
JWxlZnQgT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9F
USBPUF9ORQorJWxlZnQgJzwnICc+JyBPUF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdI
VAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQor
CitpbnB1dAorICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9
ICQxOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENP
TlNUX0lOVAorICAgIHwgZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
J14nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiAnJicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uIE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gJz4nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnPCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ID4+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysn
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiAnJScgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwg
IiAlICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigp
OworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3Rp
Y3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09
IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRl
eHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAg
ICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAk
MzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMg
VU5BUlkgeworICAgICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24g
JXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJl
c3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysn
IGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAg
IHwgJygnIGV4cHJlc3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUl
CisKK2ludCB5eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0
eXBlID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBz
d2l0Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9J
TlQ6CisgICAgICAgICpsdmFscCA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAg
ICB0eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0FORDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6
IHR5cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUg
PSBPUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9H
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFr
OworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5
cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAg
ICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAn
PCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJy
ZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6
IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwor
ICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUg
PSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRv
a2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250
ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5
ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJ
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9j
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCitu
YW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVy
KiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwK
KyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBh
cnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250
ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250
ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Cisg
ICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRv
a2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
cmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwCmluZGV4IDY5NGMzYmQuLmMzZGU5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5jcHAKQEAgLTYsMTU5ICs2LDQ5IEBACiAKICNpbmNsdWRlICJJbnB1dC5oIgogCi0jaW5jbHVk
ZSA8Y3N0ZGlvPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3Bh
Y2UgcHAKIHsKIAotSW5wdXQ6OklucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKLSAgICA6IG1Db3VudChjb3VudCksCi0gICAgICBt
U3RyaW5nKHN0cmluZyksCi0gICAgICBtTGVuZ3RoKGxlbmd0aCksCi0gICAgICBtSW5kZXgoLTEp
LAotICAgICAgbVNpemUoMCksCi0gICAgICBtRXJyb3Ioa0Vycm9yTm9uZSksCi0gICAgICBtU3Rh
dGUoa1N0YXRlSW5pdGlhbCkKK0lucHV0OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDAp
CiB7Ci0gICAgQVNTRVJUKG1Db3VudCA+PSAwKTsKLSAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsK
IH0KIAotYm9vbCBJbnB1dDo6ZW9mKCkgY29uc3QKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291
bnQoY291bnQpLAorICAgIG1TdHJpbmcoc3RyaW5nKQogewotICAgIEFTU0VSVChtSW5kZXggPD0g
bUNvdW50KTsKLSAgICByZXR1cm4gbUluZGV4ID09IG1Db3VudDsKKyAgICBhc3NlcnQobUNvdW50
ID49IDApOworICAgIG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVu
Z3RoW2ldIDogLTE7CisgICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4o
bVN0cmluZ1tpXSkgOiBsZW4pOworICAgIH0KIH0KIAotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1
ZiwgaW50IGJ1ZlNpemUpCitpbnQgSW5wdXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkK
IHsKLSAgICBpbnQgbnJlYWQgPSAwOwotICAgIGludCBzdGFydEluZGV4ID0gbUluZGV4OwotICAg
IC8vIEtlZXAgcmVhZGluZyB1bnRpbCB0aGUgYnVmZmVyIGlzIGZ1bGwgb3IgdGhlIGN1cnJlbnQg
c3RyaW5nIGlzIGV4aGF1c3RlZC4KLSAgICB3aGlsZSAoKG1JbmRleCA9PSBzdGFydEluZGV4KSAm
JiAobnJlYWQgPCBidWZTaXplKSkKKyAgICBpbnQgblJlYWQgPSAwOworICAgIHdoaWxlICgoblJl
YWQgPCBtYXhTaXplKSAmJiAobVJlYWRMb2Muc0luZGV4IDwgbUNvdW50KSkKICAgICB7Ci0gICAg
ICAgIGludCBjID0gZ2V0Q2hhcigpOwotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUgPT0ga1N0YXRlQmxvY2tDb21tZW50KQotICAgICAgICAg
ICAgICAgIG1FcnJvciA9IGtFcnJvclVuZXhwZWN0ZWRFT0Y7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobVN0YXRlKQorICAgICAgICBpbnQgc2l6ZSA9
IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRleDsKKyAgICAgICAgc2l6
ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOworICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQs
IG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAg
ICAgIG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOworCisg
ICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50
IHN0cmluZy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9j
LnNJbmRleF0pCiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIGtTdGF0ZUluaXRpYWw6Ci0gICAg
ICAgICAgICBpZiAoYyA9PSAnLycpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8g
UG90ZW50aWFsbHkgYSBjb21tZW50LgotICAgICAgICAgICAgICAgIHN3aXRjaCAocGVla0NoYXIo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcvJzoKLSAgICAg
ICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICAg
ICAgbVN0YXRlID0ga1N0YXRlTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgICAgICAgICAgICAgIGdldENo
YXIoKTsgIC8vIEVhdCAnKicuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUJs
b2NrQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYSBjb21tZW50LgotICAgICAg
ICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUxpbmVDb21tZW50OgotICAgICAg
ICAgICAgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZb
bnJlYWQrK10gPSBjOwotICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRl
QmxvY2tDb21tZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIChwZWVrQ2hhcigpID09
ICcvJykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgIC8vIEVh
dCAnLycuCi0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gJyAnOyAgLy8gUmVwbGFjZSBj
b21tZW50IHdpdGggd2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJ
bml0aWFsOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gTGluZSBicmVha3MgYXJlIG5ldmVyIHNraXBwZWQuCi0gICAg
ICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OworICAg
ICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJl
dHVybiBucmVhZDsKLX0KLQotaW50IElucHV0OjpnZXRDaGFyKCkKLXsKLSAgICBpZiAoZW9mKCkp
IHJldHVybiBFT0Y7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0g
ICAgaW50IGMgPSBzdHJbbVNpemUrK107Ci0KLSAgICAvLyBTd2l0Y2ggdG8gbmV4dCBzdHJpbmcg
aWYgdGhlIGN1cnJlbnQgb25lIGlzIGZ1bGx5IHJlYWQuCi0gICAgaW50IGxlbmd0aCA9IHN0cmlu
Z0xlbmd0aChtSW5kZXgpOwotICAgIC8vIFdlIG5ldmVyIHJlYWQgZnJvbSBlbXB0eSBzdHJpbmcu
Ci0gICAgQVNTRVJUKGxlbmd0aCAhPSAwKTsKLSAgICBpZiAoKChsZW5ndGggPCAwKSAmJiAoc3Ry
W21TaXplXSA9PSAnXDAnKSkgfHwKLSAgICAgICAgKChsZW5ndGggPiAwKSAmJiAobVNpemUgPT0g
bGVuZ3RoKSkpCi0gICAgICAgIHN3aXRjaFRvTmV4dFN0cmluZygpOwotCi0gICAgcmV0dXJuIGM7
Ci19Ci0KLWludCBJbnB1dDo6cGVla0NoYXIoKQotewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQg
cmVhZCBwb3NpdGlvbi4KLSAgICBpbnQgaW5kZXggPSBtSW5kZXg7Ci0gICAgaW50IHNpemUgPSBt
U2l6ZTsKLSAgICBpbnQgYyA9IGdldENoYXIoKTsKLQotICAgIC8vIFJlc3RvcmUgcmVhZCBwb3Np
dGlvbi4KLSAgICBtSW5kZXggPSBpbmRleDsKLSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLXZvaWQgSW5wdXQ6OnN3aXRjaFRvTmV4dFN0cmluZygpCi17Ci0gICAgQVNTRVJU
KG1JbmRleCA8IG1Db3VudCk7Ci0KLSAgICBtU2l6ZSA9IDA7Ci0gICAgZG8KLSAgICB7Ci0gICAg
ICAgICsrbUluZGV4OwotICAgIH0gd2hpbGUgKCFlb2YoKSAmJiBpc1N0cmluZ0VtcHR5KG1JbmRl
eCkpOwotfQotCi1ib29sIElucHV0Ojppc1N0cmluZ0VtcHR5KGludCBpbmRleCkKLXsKLSAgICBB
U1NFUlQoaW5kZXggPCBtQ291bnQpOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1tt
SW5kZXhdOwotICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICByZXR1
cm4gKGxlbmd0aCA9PSAwKSB8fCAoKGxlbmd0aCA8IDApICYmIChzdHJbMF0gPT0gJ1wwJykpOwot
fQotCi1pbnQgSW5wdXQ6OnN0cmluZ0xlbmd0aChpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGlu
ZGV4IDwgbUNvdW50KTsKLSAgICByZXR1cm4gbUxlbmd0aCA/IG1MZW5ndGhbaW5kZXhdIDogLTE7
CisgICAgcmV0dXJuIG5SZWFkOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5oCmluZGV4IDVhMWI1ZDEuLmRhYzczNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuaApAQCAtNyw2NiArNyw0MCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
SU5QVVRfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAKKyNpbmNs
dWRlIDx2ZWN0b3I+CisKIG5hbWVzcGFjZSBwcAogewogCi0vLyBSZWFkcyB0aGUgZ2l2ZW4gc2V0
IG9mIHN0cmluZ3MgaW50byBpbnB1dCBidWZmZXIuCi0vLyBTdHJpcHMgY29tbWVudHMuCisvLyBI
b2xkcyBhbmQgcmVhZHMgaW5wdXQgZm9yIExleGVyLgogY2xhc3MgSW5wdXQKIHsKICAgcHVibGlj
OgorICAgIElucHV0KCk7CiAgICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKIAotICAgIGVudW0gRXJyb3IKLSAgICB7Ci0g
ICAgICAgIGtFcnJvck5vbmUsCi0gICAgICAgIGtFcnJvclVuZXhwZWN0ZWRFT0YKLSAgICB9Owot
ICAgIEVycm9yIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbUVycm9yOyB9Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50
IHN0cmluZ0luZGV4KCkgY29uc3QgeyByZXR1cm4gbUluZGV4OyB9Ci0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIEVPRiBoYXMgcmVhY2hlZC4KLSAgICBib29sIGVvZigpIGNvbnN0OworICAgIGludCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0
aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CiAKLSAgICAvLyBS
ZWFkcyB1cCB0byBidWZTaXplIGNoYXJhY3RlcnMgaW50byBidWYuCi0gICAgLy8gUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZC4KLSAgICAvLyBJdCByZXBsYWNlcyBlYWNoIGNv
bW1lbnQgYnkgYSB3aGl0ZXNwYWNlLiBJdCByZWFkcyBvbmx5IG9uZSBzdHJpbmcKLSAgICAvLyBh
dCBhIHRpbWUgc28gdGhhdCB0aGUgbGV4ZXIgaGFzIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGUg
c3RyaW5nIG51bWJlcgotICAgIC8vIGZvciBtZWFuaW5nZnVsIGRpYWdub3N0aWMgbWVzc2FnZXMu
Ci0gICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSk7CisgICAgaW50IHJlYWQoY2hh
ciogYnVmLCBpbnQgbWF4U2l6ZSk7CiAKLXByaXZhdGU6Ci0gICAgZW51bSBTdGF0ZQorICAgIHN0
cnVjdCBMb2NhdGlvbgogICAgIHsKLSAgICAgICAga1N0YXRlSW5pdGlhbCwKLSAgICAgICAga1N0
YXRlTGluZUNvbW1lbnQsCi0gICAgICAgIGtTdGF0ZUJsb2NrQ29tbWVudAotICAgIH07CisgICAg
ICAgIGludCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7CisgICAgICAgIGludCBjSW5kZXg7ICAv
LyBDaGFyIGluZGV4LgogCi0gICAgaW50IGdldENoYXIoKTsKLSAgICBpbnQgcGVla0NoYXIoKTsK
LSAgICAvLyBTd2l0Y2hlcyBpbnB1dCBidWZmZXIgdG8gdGhlIG5leHQgbm9uLWVtcHR5IHN0cmlu
Zy4KLSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IHN0cmluZyBpcyBmdWxs
eSByZWFkLgotICAgIHZvaWQgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgZW1wdHkuCi0gICAgYm9vbCBpc1N0cmluZ0VtcHR5
KGludCBpbmRleCk7Ci0gICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIHN0cmlu
Zy4KLSAgICAvLyBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgZm9yIG51bGwtdGVybWluYXRlZCBz
dHJpbmdzLgotICAgIGludCBzdHJpbmdMZW5ndGgoaW50IGluZGV4KTsKKyAgICAgICAgTG9jYXRp
b24oKSA6IHNJbmRleCgwKSwgY0luZGV4KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRp
b24mIHJlYWRMb2MoKSBjb25zdCB7IHJldHVybiBtUmVhZExvYzsgfQogCisgIHByaXZhdGU6CiAg
ICAgLy8gSW5wdXQuCiAgICAgaW50IG1Db3VudDsKICAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0
cmluZzsKLSAgICBjb25zdCBpbnQqIG1MZW5ndGg7Ci0KLSAgICAvLyBDdXJyZW50IHJlYWQgcG9z
aXRpb24uCi0gICAgaW50IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJl
aW5nIHNjYW5uZWQuCi0gICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5
IHNjYW5uZWQuCisgICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwogCi0gICAgLy8gQ3VycmVu
dCBlcnJvciBhbmQgc3RhdGUuCi0gICAgRXJyb3IgbUVycm9yOwotICAgIFN0YXRlIG1TdGF0ZTsK
KyAgICBMb2NhdGlvbiBtUmVhZExvYzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdjNjYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4
ZXI6On5MZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4NWNlYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9MRVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOwor
CitjbGFzcyBMZXhlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmNwcAppbmRleCBmY2NjYTk2Li5iMmUzMDg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm8uY3BwCkBAIC02LDM5ICs2LDE3IEBACiAKICNpbmNsdWRlICJNYWNy
by5oIgogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCisj
aW5jbHVkZSAiVG9rZW4uaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLU1hY3JvOjpNYWNybyhUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgVG9r
ZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2Vt
ZW50cykKLSAgICA6IG1UeXBlKHR5cGUpLAotICAgICAgbU5hbWUobmFtZSksCi0gICAgICBtUGFy
YW1ldGVycyhwYXJhbWV0ZXJzKSwKLSAgICAgIG1SZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKQot
ewotfQotCi1NYWNybzo6fk1hY3JvKCkKK2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYg
b3RoZXIpIGNvbnN0CiB7Ci0gICAgZGVsZXRlIG1OYW1lOwotCi0gICAgaWYgKG1QYXJhbWV0ZXJz
KQotICAgIHsKLSAgICAgICAgc3RkOjpmb3JfZWFjaChtUGFyYW1ldGVycy0+YmVnaW4oKSwgbVBh
cmFtZXRlcnMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUGFyYW1ldGVyczsK
LSAgICB9Ci0KLSAgICBpZiAobVJlcGxhY2VtZW50cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9y
X2VhY2gobVJlcGxhY2VtZW50cy0+YmVnaW4oKSwgbVJlcGxhY2VtZW50cy0+ZW5kKCksIERlbGV0
ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1SZXBsYWNlbWVudHM7Ci0gICAgfQorICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAm
JgorICAgICAgICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAg
ICAgICAocmVwbGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7CiB9CiAKIH0gIC8vIG5h
bWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKaW5kZXggZTI0MzMwNi4uNjNiMzA1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm8uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTcsNDUgKzcsMzIgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19I
XwogCisjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+
CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0K
IG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBNYWNybworc3RydWN0IFRva2VuOworCitzdHJ1Y3Qg
TWFjcm8KIHsKLSAgcHVibGljOgogICAgIGVudW0gVHlwZQogICAgIHsKICAgICAgICAga1R5cGVP
YmosCiAgICAgICAgIGtUeXBlRnVuYwogICAgIH07CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAg
b2YgcG9pbnRlciBwYXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBz
dGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAg
ICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJp
bmcqIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2Vu
VmVjdG9yKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBj
b25zdCBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2Vt
ZW50czsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3Jv
KTsKLQotICAgIFR5cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2Vu
VmVjdG9yKiBtUGFyYW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAg
ICBib29sIGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgVHlwZSB0eXBl
OworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBh
cmFtZXRlcnM7CisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKIH07CiAKLX0g
IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwor
dHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0OwogCit9ICAvLyBu
YW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcApAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3Jv
RXhwYW5kZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhw
YW5kZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1Nl
dCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0
KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK3ZvaWQgTWFjcm9FeHBh
bmRlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50
IG1lLgorICAgIG1MZXhlci0+bGV4KHRva2VuKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kZmU5ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFj
cm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3Mg
RGlhZ25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAg
cHVibGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9T
ZXQsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRv
a2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oTWFjcm9FeHBhbmRlcik7CisKKyAgICBMZXhlciogbUxleGVyOworICAgIE1hY3JvU2V0KiBt
TWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5h
bWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5E
RVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKaW5kZXgg
ZWY0OWU1Ny4uMTJjZmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuY3BwCkBAIC02LDQ3ICs2LDI5IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5j
bHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2Vu
LmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDog
bUNvbnRleHQoTlVMTCkKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIq
IGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKGRpYWdub3N0aWNzKSwKKyAgICBt
RGlyZWN0aXZlUGFyc2VyKCZtVG9rZW5pemVyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcywgZGly
ZWN0aXZlSGFuZGxlciksCisgICAgbU1hY3JvRXhwYW5kZXIoJm1EaXJlY3RpdmVQYXJzZXIsICZt
TWFjcm9TZXQsIGRpYWdub3N0aWNzKQogewogfQogCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNz
b3IoKQorYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OwotfQotCi1i
b29sIFByZXByb2Nlc3Nvcjo6aW5pdCgpCi17Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29udGV4dDsK
LSAgICByZXR1cm4gbUNvbnRleHQtPmluaXQoKTsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OnBy
b2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVu
Z3RoW10pCi17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwot
ICAgIGlmICgoY291bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXNldCgpOwotCi0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNv
dW50LCBzdHJpbmcsIGxlbmd0aCwgJm1Ub2tlbnMpOworICAgIHJldHVybiBtVG9rZW5pemVyLmlu
aXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0
KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9y
X2VhY2gobVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRv
a2Vucy5jbGVhcigpOworICAgIG1NYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CiB9CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAppbmRl
eCA4ODViYjcwLi5kZGJlMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuaApAQCAtNywzNCArNyw0MiBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJF
UFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1Jf
SF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIK
KyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1
ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKIAogbmFtZXNwYWNl
IHBwCiB7CiAKLWNsYXNzIENvbnRleHQ7CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CiAKIGNsYXNzIFByZXByb2Nlc3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJl
cHJvY2Vzc29yKCk7Ci0gICAgflByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIp
OwogCi0gICAgYm9vbCBpbml0KCk7CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3Ry
aW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBs
ZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBs
ZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0
ZWQuCisgICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2lu
dHMgdG8gYW4gYXJyYXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFj
aCBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBl
bGVtZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUK
KyAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGlu
ZGljYXRlIHRoYXQgdGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBi
b29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKTsKIAotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tl
biogdG9rZW4pOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
ZXByb2Nlc3Nvcik7CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nv
cik7CiAKLSAgICAvLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0
KCk7Ci0KLSAgICBDb250ZXh0KiBtQ29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAg
Ly8gT3V0cHV0LgorICAgIE1hY3JvU2V0IG1NYWNyb1NldDsKKyAgICBUb2tlbml6ZXIgbVRva2Vu
aXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgbURpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4
cGFuZGVyIG1NYWNyb0V4cGFuZGVyOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Tb3VyY2VMb2NhdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApA
QCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9T
T1VSQ0VfTE9DQVRJT05fSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2Nh
dGlvbgoreworICAgIFNvdXJjZUxvY2F0aW9uKCkgOiBmaWxlKDApLCBsaW5lKDApIHsgfQorICAg
IFNvdXJjZUxvY2F0aW9uKGludCBmLCBpbnQgbCkgOiBmaWxlKGYpLCBsaW5lKGwpIHsgfQorCisg
ICAgYm9vbCBlcXVhbHMoY29uc3QgU291cmNlTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIChmaWxlID09IG90aGVyLmZpbGUpICYmIChsaW5lID09IG90aGVyLmxp
bmUpOworICAgIH0KKworICAgIGludCBmaWxlOworICAgIGludCBsaW5lOworfTsKKworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VM
b2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNl
TG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0Vf
TE9DQVRJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAppbmRleCBhMmU3NTljLi44
OTNkMDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCkBAIC02LDUwICs2LDQ4IEBA
CiAKICNpbmNsdWRlICJUb2tlbi5oIgogCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0
aWMgY29uc3QgaW50IGtMb2NhdGlvbkxpbmVTaXplID0gMTY7ICAvLyBpbiBiaXRzLgotc3RhdGlj
IGNvbnN0IGludCBrTG9jYXRpb25MaW5lTWFzayA9ICgxIDw8IGtMb2NhdGlvbkxpbmVTaXplKSAt
IDE7Ci0KIG5hbWVzcGFjZSBwcAogewogCi1Ub2tlbjo6TG9jYXRpb24gVG9rZW46OmVuY29kZUxv
Y2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSkKK3ZvaWQgVG9rZW46OnJlc2V0KCkKIHsKLSAgICBy
ZXR1cm4gKGZpbGUgPDwga0xvY2F0aW9uTGluZVNpemUpIHwgKGxpbmUgJiBrTG9jYXRpb25MaW5l
TWFzayk7CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291
cmNlTG9jYXRpb24oKTsKKyAgICB2YWx1ZS5jbGVhcigpOwogfQogCi12b2lkIFRva2VuOjpkZWNv
ZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKQorYm9vbCBUb2tl
bjo6ZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoZmlsZSkgKmZp
bGUgPSBsb2MgPj4ga0xvY2F0aW9uTGluZVNpemU7Ci0gICAgaWYgKGxpbmUpICpsaW5lID0gbG9j
ICYga0xvY2F0aW9uTGluZU1hc2s7CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYm
CisgICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAgICAgICAgICAgKGxvY2F0
aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodmFsdWUgPT0gb3RoZXIudmFs
dWUpOwogfQogCi1Ub2tlbjo6VG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6
OnN0cmluZyogdmFsdWUpCi0gICAgOiBtTG9jYXRpb24obG9jYXRpb24pLAotICAgICAgbVR5cGUo
dHlwZSksCi0gICAgICBtVmFsdWUodmFsdWUpCit2b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5l
KGJvb2wgc3RhcnQpCiB7CisgICAgaWYgKHN0YXJ0KQorICAgICAgICBmbGFncyB8PSBBVF9TVEFS
VF9PRl9MSU5FOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7
CiB9CiAKLVRva2VuOjp+VG9rZW4oKSB7Ci0gICAgZGVsZXRlIG1WYWx1ZTsKK3ZvaWQgVG9rZW46
OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQoreworICAgIGlmIChzcGFjZSkKKyAgICAg
ICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7CisgICAgZWxzZQorICAgICAgICBmbGFncyAm
PSB+SEFTX0xFQURJTkdfU1BBQ0U7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6
Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9B
VF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9r
ZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0
IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7
CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5h
bWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5o
CmluZGV4IDRmNWExMmIuLjAyZmQwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApAQCAt
Nyw0MiArNyw4MyBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFt
PgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFj
ZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0
eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24o
aW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2Nh
dGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7Cisg
ICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHN0
cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5n
KiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAKLSAg
ICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAgIGlu
dCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyog
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAorICAg
ICAgICBDT05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUb2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBP
UF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dF
LAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAg
ICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAg
ICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElW
X0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04s
CisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAg
ICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOCisgICAgfTsKKyAgICBlbnVt
IEZsYWdzCisgICAgeworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICA9IDEgPDwgMCwKKyAgICAg
ICAgSEFTX0xFQURJTkdfU1BBQ0UgPSAxIDw8IDEKKyAgICB9OwogCi0gICAgTG9jYXRpb24gbUxv
Y2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIFRv
a2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBi
b29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVn
YXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNv
bnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lk
IHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9Cisg
ICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBpbnQgdHlwZTsK
KyAgICBpbnQgZmxhZ3M7CisgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpz
dHJpbmcgdmFsdWU7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0
b3I7Ci10eXBlZGVmIFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhz
KQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4g
IWxocy5lcXVhbHMocmhzKTsKK30KIAogZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNl
IHBwCiAjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZDQ4ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApAQCAtMCwwICsx
LDIzMzkgQEAKKyNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRo
aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBF
RElUIQorCisKKworI2xpbmUgMTMgIi4vVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5U
X0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBm
bGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVS
U0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhf
U1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNk
ZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZv
cm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBz
dGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQg
c3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9u
cyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5
c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4g
Ki8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18g
Pj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBi
ZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgv
bWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01B
Q1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8
aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90
IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVp
bnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlw
ZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIg
ZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGlu
dCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVk
IGludCBmbGV4X3VpbnQzMl90OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBp
bnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAg
ICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5U
MTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlO
CisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYK
KyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQor
I2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAg
ICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAg
ICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZp
bmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZf
TUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lm
bmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5Njcy
OTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1
c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4g
Ki8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKwor
LyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZp
bmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmlu
ZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZ
X1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0
CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlf
TlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25l
ZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5k
ZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3Rl
YWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3Vi
bGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVu
c2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9U
WVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlw
ZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNl
IHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0
aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZp
bmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNk
ZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IK
KyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5v
KQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1
bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50
ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEg
cGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9y
Y2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisj
ZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUg
Y3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVk
CisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMg
aXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5
Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0
aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZp
bmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKwor
LyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4g
Ki8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNk
ZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0
IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYz
ODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhv
bGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVm
aW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0
YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5l
IFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0la
RV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXpl
X3Q7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBF
T0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAg
ICNkZWZpbmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBm
aXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8K
KyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Yg
c2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAo
bik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlf
Y3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwK
KwkJeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZ
WV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFn
YWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0
KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlf
Y2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJl
bnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZl
ciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgor
CSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4K
KwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhl
IGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBp
dC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBh
biAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVz
aW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0
ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVy
CisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8q
IFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGlu
ZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNo
LCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5
eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVt
bjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRv
IGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4K
KwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKwor
I2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyog
V2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHBy
b2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8g
aW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1
dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0
b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmct
dXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhl
IHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2Vy
IGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5l
dyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJ
fTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92
aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAq
IGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJh
bAorICogInNjYW5uZXIgc3RhdGUiLgorICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3Rh
Y2ssIG9yIE5VTEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1
ZmZlcl9zdGFjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJf
c3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogTlVMTCkKKworLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVu
IHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdl
IG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcF0KKwordm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3Jl
YXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2
b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Cit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBu
ZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZ
WV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2Rl
ZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5
eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5
eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBf
c2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
K1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3Np
emVfdCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICpwcGFsbG9jICh5eV9zaXpl
X3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgor
CisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlm
ICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFj
ayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAg
ICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwK
Kwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNf
aW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwK
KwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisg
ICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7
IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg
XAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBwcHdyYXAobikg
MQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hB
UjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5
dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5z
ICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRj
aGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0
ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0
ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXln
LT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9j
X2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VO
RF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5l
ciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5z
X2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0
OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAg
eyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAg
MzUsICAgMzUsICAgMzMsCisgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgMzMsICAgMzMsICAgIDksCisgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAg
IDgsICAgMzMsICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisgICAgICAgIDQsICAgMzQsICAgMzUs
ICAgMTksICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsICAgMjMsCisgICAgICAgMTMsICAg
MjQsICAgMTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCisgICAg
ICAgMTEsICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAg
MzEsCisgICAgICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAs
ICAgMTEsICAgIDEsCisgICAgICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAg
MjksICAgIDAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgIDAKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAg
ICAzLAorICAgICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2
LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAgICA5LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAg
ICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2
LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAg
IDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIx
LAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDI0LCAgIDIzLCAgIDIzLAorICAgICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAg
ICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAgICAgMjIsICAgMjEsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsCisgICAgICAg
MjMsICAgMjMsICAgIDksICAgMjYsICAgIDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAx
LCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAg
ICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAg
ICAgIDAsICAgIDAsICAgMjQsICAgMjYsICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAx
MjgsCisgICAgICAxNTksICAxMTIsICAgMjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAs
ICAgMjksICAgMzYsCisgICAgICAgNDYsICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAg
NDcsICAgIDAsICAxNTksICAgODQsCisgICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTks
ICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksCisgICAgICAxNTksICAxNTksICAgNjEsICAx
NTksICAgIDAsICAxNTksICAgNzMsICAgMzIsICAgNTYsICAgODMsCisgICAgICAgOTUsICAgNjgs
ICAgIDAsICAgMzEsICAxNTksICAxNTksICAxNTksICAgMTksICAgIDAsICAxNTksCisgICAgICAx
NTksICAxNTksICAxNTksICAgIDAsICAxNTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAs
CisgICAgICAgIDAsICAxMTcsICAgNTIsICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAg
OTcsICAxMTIsCisgICAgICAxMjAsICAxMjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAs
ICAxNTIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0g
PQorICAgIHsgICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3
LAorICAgICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDg1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQz
LCAgIDQzLCAgIDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDYsICAgIDcsICAgIDgs
ICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCisgICAgICAgMTYsICAg
MTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAg
ICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAg
MzAsCisgICAgICAgMzYsICAgMzksICAgNTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcs
ICAgNDQsICAgNDAsCisgICAgICAgNjEsICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAg
NDMsICAgNDYsICAgNDcsICAgNzYsCisgICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUs
ICAgNTAsICAgNTAsICAgNTEsICAgNTAsICAgNTIsCisgICAgICAgNTMsICAgNTMsICAgNTMsICAg
NTcsICAgNTgsICAgNjIsICAgODEsICAgODEsICAgODEsICAgNTAsCisgICAgICAgNDksICAgNDks
ICAgNjMsICAgNjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgsICAgNjYsICAgNTAsCisgICAgICAg
NTAsICAgNjcsICAgNjksICAgNjcsICAgNjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEs
CisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAg
NTAsICAgNTAsCisKKyAgICAgICA4MywgICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3
MywgICA4MywgICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2Nywg
ICA4MiwgICA4MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAgICA3OCwgICA3OCwgICA4MywgICA4
MywgICA3OSwgICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwg
ICA4MCwgICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAy
OCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwK
KyAgICAgICA3MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAg
NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0g
PQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2
LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAg
IDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0
LAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAg
IDIwLCAgIDIwLAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDcz
LCAgIDczLCAgIDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAg
IDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQz
LCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAg
IDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAg
NzQsICAgNzQsICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEs
CisgICAgICAgNTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAg
MjMsICAgNjcsCisgICAgICAgNjksICAgNjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjks
ICAgNzIsICAgNzIsICAgMTUsCisgICAgICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAg
ODEsICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODYsICAgMTAsICAgIDksICAgODYsICAgODYsCisgICAgICAgODcsICAgIDcsICAg
ODcsICAgODcsICAgODcsICAgODgsICAgODgsICAgIDUsICAgODMsICAgODMsCisgICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworLyog
VGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAq
IGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpF
Q1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVf
dXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmls
ZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29y
LgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3Jh
bW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5h
c3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX3BhcnNlci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUg
IkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVD
X18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1
bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1
cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6
U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFy
aWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5
Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAw
OyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAg
eXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVm
aW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAg
ICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgp
KSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49
IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4Kysp
OyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUg
PSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQo
YnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFk
KGJ1ZiwgbWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQor
CisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9s
ZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3Qg
eXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZs
ZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBh
cmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQg
c2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9i
dWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZ
WV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Cisg
ICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5
X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3Rh
Y2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAg
Y2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9s
ZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7
CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5p
dF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBo
ZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9t
IGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXln
LT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisg
ICAgCitpbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5p
dF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwor
CisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNp
YmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQg
cHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFn
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNl
cl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK3ZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCit5eV9zaXplX3QgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIg
KnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGluZW5vICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJl
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFt
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZ
UEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorLyogTWFjcm9z
IGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlv
bnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZk
ZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisjZWxzZQorZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vu
ZGlmCisjZW5kaWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0
cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisj
ZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVu
ICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVm
IFlZX05PX0lOUFVUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNs
dXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVm
aW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhl
IGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVD
SE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBt
aWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmlu
ZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBH
ZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lm
bmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7
IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJeXlfc2l6ZV90IG47IFwKKwkJZm9yICggbiA9IDA7IG4g
PCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAh
PSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xu
JyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJy
b3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVy
IGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJ
ZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5
eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5U
UikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVy
IGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQlj
bGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1p
LWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5h
dGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJu
IiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4g
YWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQor
I2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVy
IG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lm
bmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUK
KyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxf
RVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwg
eXlzY2FubmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1
cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJh
dGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFy
YW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAx
CisKK2V4dGVybiBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxf
cGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2Rl
ZmluZSBZWV9ERUNMIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNl
bmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1
cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgor
I2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisj
aWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZp
bmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5u
ZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwly
ZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAq
eXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29t
bWVudCAqLworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXls
bG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQg
PSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJ
CWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBz
dGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlp
ZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICkgeworCQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBw
b3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyog
eXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9m
CisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJ
CXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJ
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJewor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJ
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5
X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0g
eXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisK
K2RvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rp
b25zLiAqLworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9u
IHN3aXRjaCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhl
IGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5
eV9maW5kX2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8q
IEJsb2NrIGNvbW1lbnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3Qg
cmV0dXJuZWQuICovCisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFj
ZS4gKi8gCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9S
VUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wg
Ki8KK1lZX1JVTEVfU0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBC
RUdJTihJTklUSUFMKTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlcy4KKyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7
CisgICAgfQorfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5U
SUZJRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1Rf
SU5UOworfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9G
TE9BVDsKK30KKwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJ
VH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxs
IGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklO
VkFMSURfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJj
ZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykpOworfQorCVlZX0JSRUFLCitjYXNl
IDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30K
KwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJ
R047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9B
U1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xF
RlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5
eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0
cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUg
MzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87Cisg
ICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVu
byksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQs
IHl5bGVuZykpOworfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nh
c2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgoreworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5v
dCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3Ig
RU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5w
dXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9j
OworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwor
ICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8g
V2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUK
KyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0g
c0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRl
eE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsK
KyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAg
ICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8s
IHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Cisg
ICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxF
X1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsK
KwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4g
Ki8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWct
Pnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9S
RV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2Fubmlu
ZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQg
dGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBh
dCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdl
IGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVG
RkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBk
byBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFu
IHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBp
bnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJl
IHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhl
IGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxy
ZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAo
c2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5k
LW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4g
aW5wdXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3
YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJ
CQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5
eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0
aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVz
ZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5
IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGlu
dG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkg
Ki8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3Rh
dGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRo
ZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJ
ZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQln
b3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7
CisKKwkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTog
YmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigp
IHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJ
ICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2Ug
ZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2Ug
cmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgor
CQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0
ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0K
KworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9
CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
KworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JF
X0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJ
ZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRj
aCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHBw
bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1
ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglF
T0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUg
c2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0g
ZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0
X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisK
KwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwg
ZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwor
CWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJ
eyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8K
KwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9
PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9C
LCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJu
IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0
Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQu
CisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8q
IFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0
byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJl
cl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0Zf
UEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRv
IHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJ
ZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAo
IG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZl
ciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
KworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9w
IC0gYi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7
CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYg
KCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUg
LyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2No
X2J1ZiA9IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMu
ICovCisJCQkJCXBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUg
KyAyICx5eXNjYW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwg
d2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBi
LT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNj
YW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAm
Yi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3Zl
IC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkK
KwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUg
ZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsK
KworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hh
cnM7CisJCX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVt
YmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1Rf
RU5EX09GX0ZJTEU7CisJCQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJ
ZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9Q
RU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0
ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8K
KwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUg
KyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWct
Pnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisv
KiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBF
T0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3Rh
dGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3Ag
KQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19U
T19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
CisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGls
ZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVu
dF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQl5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlf
Y107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVM
X3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisg
KgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50
X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5z
ICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRl
cGVuZGluZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5
X2NfYnVmX3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
ID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQp
IHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0
ICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOworCisJ
cmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZ
X05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBj
aGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUq
IHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3Qs
IHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
KwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7
CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVy
KCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJ
CQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3
ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQg
dG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2Vl
ZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBj
b25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJ
CSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1
ZmZlciBzdGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJ
CS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7
CisJCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJ
CWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdf
RklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIp
OworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQor
CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9
CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5
dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0
dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlh
dGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0
X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0
IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklM
RSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9i
dWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlu
cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBw
X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFj
ZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJf
c3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8K
KwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwor
CQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRp
ZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQg
dGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFw
KCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNl
dCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisK
K3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwor
fQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgor
ICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hh
cmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVG
X1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1
cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUg
cHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJ
LyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUg
Z2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVm
X3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiAp
OworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUg
LHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4K
KyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9k
ZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZG
RVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsK
KworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMg
b3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVz
IGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1
cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2lu
aXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIo
YiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBw
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3
ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAg
IGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0g
MTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlf
aXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNo
ZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0
dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlv
biB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBq
YW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJ
Yi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOwor
CWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NV
UlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisK
Ky8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBi
ZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0
ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhl
IG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
Lwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0
dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJs
b2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVm
ZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9
CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4g
Ki8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsr
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQg
ZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisg
KiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1
cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NV
UlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0
ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2Ug
Zm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9u
IGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkg
KiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0
byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAg
ICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOwor
CQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJ
CSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0
YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsK
KwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRv
IHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyog
YXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZl
cl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0
YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJ
CW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwg
MCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0
aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lm
aWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZl
cgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZm
ZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0
aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6
ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwK
KwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5
IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJ
YiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9z
aXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5
X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAw
OworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6
ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55
eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7
CisKKwlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9
CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRo
ZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBh
IHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQg
dG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAg
ICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICAKKwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5u
ZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBn
aXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBh
IEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRv
IHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBv
aW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5
Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbiwgaTsKKyAgICAK
KwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFp
bGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBw
cGFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBp
ID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKwor
CWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCki
ICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hv
dWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxV
UkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9m
YXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJ
VF9GQUlMVVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNl
Y3Rpb24gMyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJ
ZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBc
CisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1Nf
TElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hv
bGRfY2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJn
OyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55
eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0g
XAorCXdoaWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9u
cykgdG8gc3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRh
IGZvciB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBu
dW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50
IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlm
ICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0
X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IHl5Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRw
dXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K0ZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworeXlfc2l6ZV90IHBwZ2V0
X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisK
Ky8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQg
ZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFy
YW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5u
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBw
cHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQg
IGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5l
bm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBz
ZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAg
ICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVt
bi4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYg
YW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZG
RVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0
aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5f
bm87Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJk
IHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFi
bGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBA
c2VlIHBwX3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9z
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2
b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0
X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxl
eF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBh
bmQgeXlsbG9jICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUg
KiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5
eWx2YWxfcGFyYW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZ
TFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxs
b2MgPSB5eWxsb2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8q
IHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRz
ZWxmLCBzbyBpdCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24n
dCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3
ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3Vy
IG1hY3Jvcy4KKyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMp
CisKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0g
RUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMg
PSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7
CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVO
T01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAw
eEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9y
IHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3Ry
dWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9n
bG9iYWxzICk7Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9u
YWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRh
a2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0
CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxv
Y2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMg
ZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1
c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxl
IHRvIHBwYWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9p
bml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlf
Z2xvYmFscyApCisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAg
cHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAo
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBw
cGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQor
ICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVN
OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAw
eEFBLCB3ZSBleHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgw
MCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVv
ZihzdHJ1Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZp
bmVkLCAqcHRyX3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMg
KCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUg
YXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisg
ICAgICovCisKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAg
IHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAg
ICB5eWctPnl5X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsK
KyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrID0gIE5VTEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5J
VAorICAgIHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlp
biA9IChGSUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAv
KiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUg
Y2FsbGVkIGJ5CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9
CisKKy8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRy
YW50IHNjYW5uZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVt
ZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERl
c3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sg
LHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVz
dHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55
eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sg
PSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGlu
IGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgp
IGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2ds
b2JhbHMoIHl5c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVl
bnRyYW50IG9ubHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwor
ICAgIHl5c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5h
bCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBp
IDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVF
RF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNb
bl07ICsrbiApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2Mg
KHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQg
KikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5
X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAo
Y2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50
YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRo
YXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIK
KwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVu
dCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1
bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAq
LworCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwor
dm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSgg
KGNoYXIgKikgcHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwor
fQorCisjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgewor
CitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRs
ZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rv
a2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisg
ICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJl
dHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tl
bikKK3sKKyAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2Nh
dGlvbixtSGFuZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0Lmxp
bmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsK
KworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsK
KyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6
OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5p
dF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tl
bml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAg
ICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUg
PSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgor
I2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBw
Cit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4
ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8v
IFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91
bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBi
ZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1
ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6Okxv
Y2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJv
b2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7Cisg
ICAgdm9pZCBkZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5u
ZXIgaGFuZGxlLgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsK
KworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9U
T0tFTklaRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjhkNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmwKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZp
bGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nv
ci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdy
YW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODku
YXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5l
cmF0ZV9wYXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQor
fQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3Mu
aCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdn
ZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgor
Cit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlv
biBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFj
ayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2Rl
ZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5l
U3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9B
Q1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4
dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6
OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAg
ICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0
aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9j
LT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAg
ICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5l
ID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwg
bWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXpl
KTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCisl
b3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCislb3B0aW9uIHBy
ZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgor
JXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVOVElGSUVSICBbX2EtekEt
Wl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQor
CitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFMX0NPTlNUQU5UICAgICAg
ICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKKworRElH
SVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tE
SUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJ
VH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisiLy8iW15cclxuXSoKKwor
ICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3Vu
dGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5
IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQorPENPTU1FTlQ+
W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87
IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7Cisg
ICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBz
dGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICBpZiAoeXlleHRy
YS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Cisg
ICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXlleHRyYS0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5
eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQorCit7SURFTlRJRklFUn0g
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5U
fXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCisoe0RJR0lUfSt7
RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBh
IHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKyAgICAvKiBSdWxlIHRv
IGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCisoe0RJR0lUfStbX2Et
ekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsKKyAgICB5eWV4dHJhLT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8s
IHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
KHl5dGV4dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9
CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
RVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorIl5eIiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNT
SUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FT
U0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9B
U1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9S
SUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BVTkNUVUFU
T1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRl
eHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7
IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEs
ICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5
bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5
dGV4dCwgeXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9O
IGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlv
biBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRy
YS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5z
Y2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAt
IDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAg
ICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBh
dCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0lu
ZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9
IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZp
bGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7
CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlm
aWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Iik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7
CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFu
ZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKwor
VG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCiti
b29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNl
OworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisK
KyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAg
cmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRv
a2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5s
b2NhdGlvbiwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4
dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdc
bic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFj
ZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5p
emVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4
X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxM
KQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1I
YW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJh
dGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDViMzJmNzEuLmU5YzcwYjEgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKQEAgLTEsMjcg
KzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0jIEdlbmVyYXRlcyBHTFNM
IEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBhbmQgcHBfdGFiLmNwcAor
IyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgog
CiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1dF9zb3Vy
Y2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0
cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0
ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5fYmlzb24oKQogewotaW5w
dXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3Rh
Yi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0tbm8tbGlu
ZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRv
dXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRw
dXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFj
Yy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHNjcmlwdF9kaXI9
JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggcHAKLXJ1
bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jpc29u
IEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
LmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAu
bAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXBy
b2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElP
TiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5v
OyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsg
IFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAot
ICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3Rh
dGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxl
bik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVv
cHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVv
cHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0cmEtdHlwZT0icHA6
OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAgICAgXntIU1BBQ0V9KiN7
SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKLVBVTkNUVUFUT1Ig
IFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05
XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NPTlNU
QU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAgICAgICBbMC05XQotRVhQ
T05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0KLXtIQVNIfSB7IHJl
dHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS9bIFx0XG5d
IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRl
eHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci17SEFTSH11bmRl
ZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlmIHsgcmV0dXJuIEhB
U0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLXtIQVNIfWlmbmRl
ZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVybiBIQVNIX0VMU0U7
IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1lbmRpZiB7IHJldHVy
biBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsgfQotCi17SEFTSH1l
cnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyByZXR1cm4gSEFTSF9Q
UkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQote0hB
U0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxpbmUgeyByZXR1cm4g
SEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0
ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLQot
e0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5U
fSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0p
fCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5z
dmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRf
Q09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRbMF07IH0KLQotWyBc
dFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewotICAgICsreXlsaW5l
bm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi08Kj48PEVPRj4+
ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNy
b05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJp
bmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAg
Ly8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIg
JiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpz
dHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0t
aSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQn
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBp
ICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAg
ewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0g
ICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAg
ICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0g
ICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0g
MCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24oeXlnZXRfbGlu
ZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmlu
Z0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9u
KGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1
ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6
OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxv
a3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwot
fQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBO
VUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVCht
TGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55IGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55CisrKyAvZGV2L251
bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24g
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6
Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlP
VSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFy
c2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIK
LQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcg
MQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgotJWxvY2F0aW9ucwotJXBh
cnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9uIHsKLSAgICBpbnQgaXZh
bDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6
OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSog
bHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9y
KFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZv
aWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0
aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRl
eHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2VuIEhBU0hfSUYgSEFTSF9J
RkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hfRU5ESUYgREVGSU5FRAot
JXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJT04gSEFTSF9WRVJTSU9O
IEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkogSEFTSF9ERUZJTkVfRlVO
QwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RBTlQgSURFTlRJRklFUgot
JXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0aW9uYWxfdG9rZW4gdG9r
ZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1lbnRfbGlzdCBjb25kaXRp
b25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAvKiBlbXB0eSAqLwotICAg
IHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xf
bGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7
Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9r
ZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChv
dXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICQxOwot
ICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicKLSAgICB8IEhBU0hfREVG
SU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVN
YWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAkMSwgTlVMTCwgJDIpOwot
ICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRlcl9saXN0ICcpJyByZXBs
YWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJz
dF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7Ci0gICAgfQotICAgIHwg
SEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1h
Y3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0g
ICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsK
LSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hD
b25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0g
ICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENv
bmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0g
ICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgfQotICAg
IHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAg
ICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQotICAgIHwgSEFTSF9FUlJP
UiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4n
Ci0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5FICdcbicKLTsKLQotcmVw
bGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IHRv
a2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxM
OyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9y
OwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURF
TlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlzdCAnLCcgSURFTlRJRklF
UiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tl
bihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0KLQotY29uZGl0aW9uYWxf
bGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IGNvbmRp
dGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAg
ICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xpc3QKLSAgICA6IHRva2Vu
IHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9i
YWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi1jb25kaXRpb25hbF90
b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0gICAgfCBERUZJTkVEICco
JyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsKLQotdG9rZW4KLSAgICA6
IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsICQx
LCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBw
cDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwg
RkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGlu
ZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAg
ICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKTsKLSAg
ICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsgfQotICAgIHwgJ10nIHsg
JCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+
JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7ICQkID0gJyknOyB9Ci0g
ICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAnfSc7IH0KLSAgICB8ICcu
JyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQotICAgIHwgJy0nIHsgJCQg
PSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsg
fQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAg
fCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7IH0KLSAgICB8ICd+JyB7
ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAgIHwgJyEnIHsgJCQgPSAn
ISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycgeyAkJCA9ICc7JzsgfQot
ICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUl
Ci0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6
Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsK
LWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5
eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICJjb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0
IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVm
aW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmlu
ZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJ
T04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVU
QQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9y
IGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFk
ZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVh
ZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRl
ZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGlu
dHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZp
bmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQot
LyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGlu
ZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZv
ciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUg
X19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10
eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7
Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3Vp
bnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3Qg
ZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90Owot
dHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90
OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50
MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMu
ICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0x
MjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAg
ICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQz
Ml9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhf
TUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRl
ZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5k
aWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIx
NDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAg
ICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBV
SU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01B
WAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgot
Ci0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRo
ZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZ
X1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVp
cmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENf
XykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBkZWZpbmVkIChfX1NURENf
XykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlfVVNFX0NPTlNU
Ci0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QKLSNlbmRpZgot
Ci0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9OVUxMIDAKLQot
LyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8g
YW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRo
ZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBp
dCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJsZSBjYXN0Lgot
ICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hh
cikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlf
U0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBlZGVmIHZvaWQq
IHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1
cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJh
bnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmluZSB5eW91dCB5
eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2RlZmluZSB5eWxl
bmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgotI2RlZmluZSB5
eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCi0jZGVmaW5l
IHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKLSNkZWZp
bmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRlciBhIHN0YXJ0
IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIs
Ci0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMg
YnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNkZWZpbmUgQkVH
SU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0
YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKLSAqIHRvIEJF
R0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4
Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFy
dCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rpb24gbnVtYmVy
IGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmluZSBZWV9TVEFU
RV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0vKiBTcGVjaWFs
IGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwotI2RlZmlu
ZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2RlZmluZSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAq
LwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAotI2VuZGlm
Ci0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3Rh
dGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZpbmUgWVlfU1RB
VEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkp
Ci0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVG
RkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSNk
ZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAy
Ci0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVs
ZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAgKiAgICAgICBhY2Nlc3Mg
dG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywg
aXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwg
eXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAgICBPbmUgb2J2aW91cyBz
b2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3
Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nh
bm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBh
cyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgotICAgICAqLwot
ICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAgIGRvIHsgXAotICAg
ICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5
bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXls
XSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLSAgICAg
ICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBt
YXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwotI2RlZmluZSB5
eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2Fy
ZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0g
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIFlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2Jw
ICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAgICAgIFlZX0RPX0JFRk9S
RV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAgICAgICB9IFwKLSAgICB3
aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0
ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLSNlbmRpZgot
Ci0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfU1RSVUNUX1lZ
X0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAgIHsKLSAgICBGSUxFICp5
eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyogaW5wdXQgYnVm
ZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBp
biBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVz
LCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICov
Ci0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVtYmVyIG9mIGNoYXJhY3Rl
cnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAgICAgKiBjaGFyYWN0
ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAgLyogV2hldGhlciB3ZSAi
b3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFu
ZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0g
ICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOwotCi0g
ICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBz
bywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdh
bnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJl
IHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNoIG5ld2xpbmUuCi0gICAg
ICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAgICAqIElmIHNv
LCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQot
ICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwotCi0gICAgaW50IHl5X2Jz
X2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNfY29sdW1uOyAv
Kio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8g
ZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0
LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAgIGludCB5eV9idWZmZXJf
c3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9S
TUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZ
X0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSBy
ZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICog
c3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9m
Ci0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0
dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICog
KHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5n
IGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAg
ICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAgICB9OwotI2VuZGlmIC8q
ICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZv
ciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICogZnV0dXJlIHdlIHdh
bnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5l
ciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4K
LSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5
X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQot
Ci0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0
IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFs
dWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQot
Ci12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChG
SUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZGVsZXRl
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBw
cF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5lIFlZX0ZMVVNI
X0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKLQot
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAo
eXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NU
QVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNk
ZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2lu
dGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAg
IHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0g
XAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19p
bnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAotICAg
IHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAq
LwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVk
ZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwot
Ci0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0
ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5
c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVu
dCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRp
bmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FD
VElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxlbmcgPSAoc2l6
ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsg
XAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLQot
I2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAyNAotLyog
VGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAgYnV0IGl0cyBwcmVz
ZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwotICAgIHsKLSAgICBm
bGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0gICAgfTsK
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1XSA9Ci0gICAgeyAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIsICAgMjAsICAgMjAsICAg
MTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgMjEsICAgMTksICAgMTks
ICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcsICAgMTcsICAgMjEsICAg
IDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMTks
ICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0g
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgIDksICAgIDgsICAgIDAs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAsICAgIDAsICAgIDAsICAg
MTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMsICAgIDQsICAgIDAsICAg
IDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAgICAgMywgICAgMCwgICAx
NCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAgIDEsICAgIDcsCi0gICAg
ICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUsICAgMTAsICAgMTEsICAg
MTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAgMTIsICAgIDUs
ICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0gICAgICAgIDUsICAgIDEs
ICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMsICAgMTgsCi0KLSAgICAg
ICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwgICAyMywgICAyNCwgICAy
NSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAzMiwg
ICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAg
fSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzM0XSA9Ci0gICAgeyAg
IDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDEs
ICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDcsICAg
IDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcs
ICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDcsICAgIDcKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTExXSA9Ci0gICAg
eyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEsICAxODUsICAxODUsICAg
MjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAgNzEsICAgMTIsICAgMzIs
ICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxNjIsICAg
NjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAxNTcsICAxNTAsICAxNTIs
ICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQsCi0gICAgICAgNjIsICAx
NTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAxMzksICAgNzYsCi0gICAg
ICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUsICAxNDEsICAxNDAsICAx
NDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAxMjcsICAxODUsICAxODUs
ICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUsICAxMjIsICAxMjUsICAx
MjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAxODUsICAxMjAsICAxMTMs
ICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUsICAxODUsICAxMDUsICAg
NzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0KLSAgICAgIDE4NSwgIDEw
MywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEyNiwgIDEzMgotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzExMV0gPQotICAgIHsgICAw
LAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA3LCAgMTA3
LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2LCAgMTA2LCAgMTA0LCAg
IDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMTAsICAx
MDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0KLSAgICB7ICAgMCwKLSAg
ICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAgNywgICAgNywgICAgOCwg
ICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgIDEwNCwgICAx
MiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAxNCwgICAgNywgICAgNywg
ICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgIDEwNCwgIDEw
MywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAyNSwgICAyMCwgICAxNSwg
ICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwKLSAgICAgICAzNSwgICAz
NiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICA5OSwKLSAgICAg
ICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwgICAxNSwgICA0MSwgICAy
NiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAzNywgICAzNywgICA1MCwg
ICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwgICA1OSwgICA1MSwgICA1
MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAzMCwgICAzMSwgICA1MSwg
ICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3LCAgIDMzLCAgIDM0LCAg
MTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAotICAgICAgIDExLCAgIDEx
LCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAg
IDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDk4LCAgIDkzLCAgIDky
LAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAg
MTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg1LCAgIDg0
LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAg
IDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAgIDY5LCAgIDY4LCAgIDY3
LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAgICAgIDU4LCAgIDU3LCAg
IDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDQ1LAotICAgICAgIDQw
LCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgNSwg
ICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwKLSAgICAgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAg
ICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwgICAgOSwgICAgOSwgICAg
OSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAxNiwgICAgOSwgICAxNywg
ICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwgICAyMCwgICAyMCwgICAz
NiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAxMCwgICAxMCwgICAxMCwg
ICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwgICAxMCwgICAxNCwgICAy
OSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwg
ICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwgICAxNCwKLSAgICAgICA0
MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAxNCwgICA5OCwgICA5OCwK
LQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAyLCAgIDkzLCAgIDkwLCAg
IDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1
LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3LCAgMTA3LCAgMTA4LCAg
MTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAgMTA5LCAgMTA5LCAgMTEw
LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAgICAgIDgyLCAgIDc5LCAg
IDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAgIDcwLAotICAgICAgIDY5
LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYwLCAgIDU5LCAgIDU4LAot
ICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3
LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5LCAgIDM0LCAgIDMzLCAg
IDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAgICAzLCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotLyog
VGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzI0XSA9Ci0gICAg
eyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBiZWhpbmQg
dGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVD
VCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0
X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVj
dGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4
IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9z
b2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJ
RlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSov
Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNp
bmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAg
ICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXlj
b2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQot
I2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5
ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5n
KiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSNkZWZpbmUg
SU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29udGV4dCoKLQotLyogSG9s
ZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3Qg
eXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZs
ZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBh
cmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQg
c2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9i
dWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZ
WV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25fY2hhcnM7Ci0gICAgaW50
IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAg
aW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAg
aW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0g
ICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQg
eXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0
X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZ
WVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAv
KiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2Ug
WVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1
dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgot
ICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgcHBs
ZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlf
RVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3Nv
ciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBsZXhfZGVzdHJv
eSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBz
ZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBn
ZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3RleHQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
dm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQg
Y2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24g
MS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4
dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJu
IGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lm
bmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNv
bnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZ
X05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRp
ZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCBuZXdfc3Rh
dGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0aWMgaW50IHl5X3RvcF9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8g
c2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNk
ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0
aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYg
RUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5n
IG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVm
aW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8q
IEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0j
aWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwK
LSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBc
Ci0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBpbnQgbjsgXAot
ICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAgICAgICAgICAg
KGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAgICAgICAg
ICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4nICkgXAotICAg
ICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gRU9GICYm
IGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBp
biBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47IFwKLSAgICAg
ICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0wOyBcCi0gICAg
ICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAm
JiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgaWYoIGVycm5v
ICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgICAg
ICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGVycm5vPTA7
IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAg
ICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3Jy
ZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2Fu
dCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNl
Ci0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1l
bnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0
dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFy
dC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IK
LSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZh
dGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9GQVRBTF9F
UlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotLyog
ZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KLQot
LyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNv
IHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZuZGVmIFlZ
X0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCBwcGxleCBcCi0g
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwK
LSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9j
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICovCi0KLS8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4
dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZX1VTRVJf
QUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBleGVjdXRl
ZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNkZWZpbmUg
WVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBp
ZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5nIC0gMV0gPT0gJ1xuJyk7
IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3
aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotICAgIHJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCwg
Knl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFs
X3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0gICAgaWYgKCAheXlnLT55
eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYg
WVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0gICAgICAgIGlm
ICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyog
Zmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlpbiApCi0gICAgICAgICAg
ICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAgICAgIHl5
b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLSAg
ICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgcHBfY3JlYXRlX2J1
ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIH0KLQotICAgIHdoaWxl
ICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0gICAg
ICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwot
Ci0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9m
IHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwot
ICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwoteXlf
bWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAgICAgICAgIGlm
ICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQg
aW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5
eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxl
ICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0g
eXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJ
T047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxl
X2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
eXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0g
ICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAg
fXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotICAgICAgICBzd2l0Y2gg
KCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAg
ICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAvKiB1bmRvIHRo
ZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAgICp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNh
c2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0
IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1h
Y3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0K
LSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVu
ZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlf
Y3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8K
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0KLSAgICBZWV9C
UkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9VTkRFRjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZERUY7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9J
Rk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1ZFUlNJT047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfTElO
RTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElE
RU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDIw
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9T
RVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0
WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0
ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAotRUNI
TzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7
Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9C
IGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkg
KHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZm
ZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAg
IGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JV
RkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJs
ZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVz
dCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAq
IHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICog
Y29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAg
ICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UK
LSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3Nz
aWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBu
ZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25f
Y2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9m
IHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAg
ICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0
ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0Ig
dG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3
aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAg
ICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxs
eSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQot
ICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dl
dF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdl
J3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNp
dGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19z
dGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3Nz
aWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8g
YnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2ls
bCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25l
eHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVy
KTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsK
LQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5
X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAg
ICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7
Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FD
VF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCBw
cHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAg
ICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAg
ICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAg
ICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAg
ICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAg
ICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAg
ICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZ
X1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9u
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxF
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAg
ICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAg
ICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAg
ICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAg
ICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5
eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwot
ICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0g
ICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8g
YWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAg
ICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8qIGVuZCBvZiBwcGxleCAq
LwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIK
LSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9B
Q1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nh
bm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVu
ZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwotICAgIGludCBy
ZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5k
IG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwg
dGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVP
Qiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdl
IG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0gICAgICAgICAgICAg
KiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FD
VF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAvKiBUcnkgdG8g
cmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3Rh
cnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1i
ZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihzb3VyY2UrKyk7Ci0KLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBu
b3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAgKiBqdXN0IGZvcmNlIGFu
IEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29t
IGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAgICAvKiBqdXN0IGEgc2hv
cnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAgIFlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1
Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGIt
Pnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdfc2l6ZSA9IGItPnl5X2J1
Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAg
ICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9
IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQotICAgICAgICAg
ICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotICAgICAg
ICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9z
aXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8K
LSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAgICBpZiAoICEg
Yi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAg
ICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsK
LQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfdG9f
bW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90b19yZWFkID4g
WVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JFQURfQlVG
X1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAgICAgIFlZX0lO
UFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3Zl
XSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7
Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkK
LSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxF
OwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElO
RzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAgICByZXRfdmFs
ID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9
IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAx
KTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAq
KSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYs
bmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAg
eXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4g
cmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBq
dXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0YXRpYyB5eV9z
dGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3Rl
ciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsK
LSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0gICAgZm9yICggeXlfY3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7
ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgq
eXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAgICBpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgfQot
ICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAg
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsK
LX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0
aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0ZSA9IHl5X3Ry
eV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRo
aXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdp
c3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAgIHJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAg
ICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAg
ICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAgICAgICB5eV9jdXJyZW50
X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
eXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQotICAgIHJldHVybiB5eV9p
c19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19JTlBVVAot
I2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Agbm93IHBvaW50
cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAgKiBJZiB0aGlz
IG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0gICAgICAg
ICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZm
ZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAg
ICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5eWctPnl5X2Nf
YnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyogbmVlZCBtb3Jl
IGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAg
ICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotICAgICAg
ICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotICAgICAgICAg
ICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAgICAgICAgICAg
ICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAgICAgICAgICAg
ICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAgICAgICAgICAg
ICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAgICAgICAgKi8K
LQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotICAgICAg
ICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9F
TkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSNpZmRl
ZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBjID0g
Kih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hh
cidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4
dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0gICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9PSAnXG4nKTsKLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkKLSAgICAgICAgICAgCi0g
ICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07
Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0K
LS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICog
QHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVz
ZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHBy
ZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsK
LSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxl
ICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQot
Ci0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyog
VE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBi
b2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAg
ICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24g
Zm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0g
eXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRo
aXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0
aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdy
YXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdvIGFoZWFkIGFuZCBhbHdh
eXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3Ag
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hh
ciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBh
biBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4K
LSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4g
aW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KLSAq
LwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGlu
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsK
LSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVy
KCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAgICAvKiB5eV9jaF9idWYg
aGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNl
Ci0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0g
ICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6
ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVy
KCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHBwX2luaXRfYnVm
ZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogRGVzdHJv
eSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0
ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBw
b3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZF
Ul9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHBw
ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0gICAgcHBmcmVlKCh2
b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxp
emVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUg
dGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0
YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZ
WV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotCi17
Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNoX2J1ZmZlcihiICx5eXNj
YW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlfZmlsbF9i
dWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBf
aW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQo
KSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdl
IGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAg
aWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAx
OwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9p
c19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBE
aXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBV
VCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1
c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsKLQotICAgIC8qIFdlIGFs
d2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2Vz
Ci0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNl
Y29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGIt
Pnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZb
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9idWZfcG9zID0gJmItPnl5
X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0
YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIg
KQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1
c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMK
LSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBz
dGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0
YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lk
IHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotICAgIC8q
IFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQg
aW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotICAgIC8q
IGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAgcHBfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
aWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0g
KiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwb3Bf
YnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICghWVlfQ1VSUkVO
VF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
TlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15
eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsK
LSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19Ci0KLS8qIEFsbG9jYXRl
cyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBm
b3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1fdG9fYWxsb2M7Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAgIC8qIEZpcnN0IGFsbG9j
YXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlz
Ci0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5z
dGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRo
ZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAg
ICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBh
bGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayAp
Ci0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFy
ZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXplID0gOCAvKiBh
cmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9IHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAg
ICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCki
ICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAgICAgICAgbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBn
cm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KLX0KLQotLyoqIFNl
dHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1z
cGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIg
YnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVy
IGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0g
ICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0In
cy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBh
bGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAg
aWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplIC0g
MjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAgIGItPnl5X2J1Zl9wb3Mg
PSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAwOwotICAg
IGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6
ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+eXlfYXRfYm9sID0gMTsK
LSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZ
X0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwot
Ci0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZy
b20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVk
IHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICog
QG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1
ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgp
IHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0
ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRl
cyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNoYXIgKmJ1ZjsKLSAg
ICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBHZXQgbWVtb3J5IGZvciBm
dWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLSAgICBu
ID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nh
bm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICBmb3IgKCBpID0g
MDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXlieXRlc1tpXTsK
LQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVy
KTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBp
biBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRo
aXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICogYXdheSB3aGVuIHdlJ3Jl
IGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICByZXR1
cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAgbmV3X3N0YXRl
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgIHl5
X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICs9
IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0geXlnLT55eV9zdGFydF9z
dGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHBh
bGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
eXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2b2lkICopIHl5Zy0+eXlf
c3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGlmICggISB5eWct
Pnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIG1l
bW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwotICAgICAgICB9Ci0KLSAg
ICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyKytdID0gWVlfU1RB
UlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcG9w
X3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIC0teXlnLT55eV9zdGFy
dF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJzdGFydC1jb25kaXRp
b24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55eV9zdGFydF9zdGFja1t5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGljIGludCB5eV90b3Bfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWctPnl5X3N0YXJ0X3N0
YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNpZm5kZWYgWVlfRVhJVF9G
QUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGljIHZvaWQg
eXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4
aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3
b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxl
c3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBv
ZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9
IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAg
ICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5
X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZf
cCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAg
ICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBm
dW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRlZmlu
ZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAg
ICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4g
bnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWlu
dCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X2luICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdldCB0
aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2Vu
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdl
dF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsZW5nOwotfQot
Ci0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNlci1kZWZpbmVk
IGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgotICogQHBh
cmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2Fu
bmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQg
cHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8qKiBTZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2xpbmVubyAoaW50
ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogbGlu
ZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBw
c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0g
ICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBjb2x1
bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlm
IGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdp
dGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1uID0gY29sdW1u
X25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2Fy
ZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0ciBBIHJlYWRh
YmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5f
c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3RyIDsKLX0KLQot
dm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQotdm9pZCBwcHNl
dF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5X2Zs
ZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwg
YW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBF
ICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsdmFsID0g
eXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9pZCBwcHNldF9sbG9jIChZ
WUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXls
bG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQSSAqLwotCi0v
KiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0
c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNu
J3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRoYXQncyB3aHkg
d2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91
ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxz
KQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCAp
OwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBF
Tk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNldHRpbmcgdG8g
MHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZv
ciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0
cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlf
Z2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlv
bmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVudGlvbiBvZiB0
YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhh
dAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxs
b2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlz
IGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0gKiBUaGUg
dXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJs
ZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1pbnQgcHBsZXhf
aW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5
X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKLQotICAg
IHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwotCi0gICAgaWYg
KHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5f
dCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsK
LSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNldHRp
bmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZl
IGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgw
MCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0cmEgKHl5X3Vz
ZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5pdF9n
bG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9i
YWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRo
ZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBo
ZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
MDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5pdCA9
IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0
ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55eV9z
dGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVmIFlZ
X1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxzZQot
ICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRpZgot
Ci0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ug
d2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwotICAgIHJldHVy
biAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9u
LXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVh
Y2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHBw
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBwcHBvcF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYu
ICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNv
bmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5
c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKLQotICAgIC8q
IFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQg
c2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRp
YWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIp
OwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8K
LSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBO
VUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5l
cy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNw
eSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSAp
Ci0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RS
TEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBz
W25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lk
ICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
cmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJlYWxsb2MgICh2
b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJz
LCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQg
d29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysr
IGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUg
dG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0
aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikg
cmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgcHBmcmVlICh2b2lkICog
cHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAg
IC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZ
VEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShj
b25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBv
ZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBq
dXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVu
ID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyog
bmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAg
IHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBs
ZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBB
U1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWlu
dCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQg
bnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAg
ICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAg
ICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxl
ID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihwcGdldF9saW5lbm8obUxl
eGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgo
KTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwg
ZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNp
emUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JV
bmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVw
b3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9v
bCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0K
LSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0K
LSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5
IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlz
b24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4
OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg
b3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2Yg
eW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJz
ZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhl
cmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBt
YXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdo
aWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBv
dXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwot
ICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3Bl
Y2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24g
aW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBz
a2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0
aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5
bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQK
LSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBl
dmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBl
eHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4
Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGli
cmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUg
U1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZp
bmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZF
UlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05f
TkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQot
Ci0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBT
dWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5
eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBw
ZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNk
ZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5
eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRl
ZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRh
YmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRo
ZW0uICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhB
U0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAy
NjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAg
IEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9
IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0g
ICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAg
IEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNI
X0RFRklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FU
X0NPTlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0v
KiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQot
I2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNI
X0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0
Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhB
U0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVO
U0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcx
Ci0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAy
NzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUK
LSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBv
ZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29u
dGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMu
ICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBF
bmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJP
U0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQot
I2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcg
dGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlU
T0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5l
ZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGlu
dCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAg
ICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8K
LQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMg
ZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxU
WVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxU
WVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFz
dF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBl
IFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZ
WUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5k
aWYKLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
Ci0KLQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZv
aWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAg
ICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2Yg
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
JiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYg
KGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJf
SAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRl
ZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQg
bWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUK
LSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmlu
ZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZv
aWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
IGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93
IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAot
ICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQ
RV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVk
IFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBl
IHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlv
biB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAg
WVlMVFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdl
ZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tf
R0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBv
ZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgK
LSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgo
TikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAo
WVlMVFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkg
Q09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlv
biBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVk
IF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENv
dW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVv
ZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQp
ICAgICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5
eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChG
cm9tKVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hp
bGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJv
bSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJs
ZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YK
LSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRp
b24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVk
IGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19S
RUxPQ0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAg
ICBcCi0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19H
QVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7
ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUg
bnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIK
LS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1Qg
ICAyNDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmlu
ZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICov
Ci0jZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICov
Ci0jZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4g
ICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJp
c29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZ
VU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xB
VEUoWVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgp
IDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRS
QU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZ
TEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0g
ICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQw
LCAgICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAg
IDMyLCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAg
NDIsICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAg
ICAyLCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAzMCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
Ci0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsK
LQotI2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMg
c3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAg
NCwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAg
ICAzMCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAg
IDU5LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUs
ICAgIDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAg
OTksICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywg
ICAxMTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAot
ICAgICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1
LCAgIDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAt
LSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAg
LTEsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwg
ICAgMjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAg
ICAxNywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0
LCAgICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAg
ICA1LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEs
ICAgICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwK
LSAgICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAy
MiwgICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAg
ICAxNSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1
LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAg
IC0xLCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAg
NTUsICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywg
ICAgMjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAx
OSwgICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAg
ICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAg
IDI0LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEs
ICAgIDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAg
LTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwg
ICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAot
ICAgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0K
LS8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2Fz
IGRlZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewot
ICAgICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1
LCAgICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAg
MTAzLCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQs
ICAgMTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAx
NDQsICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3
MiwgICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAg
IDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTky
LCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAg
MjAwLCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0Ug
fHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBv
ZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwg
c3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNo
YXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQi
LCAiSEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNI
X0lGTkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVG
SU5FRCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhB
U0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVG
SU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJ
RVIiLCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCci
LCAiJz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIs
Ci0gICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzon
IiwgIic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGlu
ZSIsICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlz
dCIsICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9r
ZW4iLCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklO
VAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVz
cG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAg
MjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYs
ICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwK
LSAgICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5
MywgICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAg
ICA0NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYx
LCAgICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5d
IC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAg
IDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAg
ICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwg
ICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1
MywgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAg
ICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0v
KiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lk
ZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17
Ci0gICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDIsICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAg
ICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwg
ICAgIDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1
bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9l
c24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRl
ZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFj
dFtdID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAg
IDYsICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
NSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAg
ICA4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAg
ICAgIDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAg
MCwgICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAg
ICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEw
Ci19OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBl
X2ludDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEK
LX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBv
cnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYg
LTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAg
ICA3MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAg
MTQ1LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEs
ICAgIDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAot
ICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAg
IC0zLCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAg
MjksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAg
ICAzNiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05U
RVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0g
ICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEs
ICAgIDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1Rb
U1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3Np
dGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hp
Y2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNU
IHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZ
VEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewot
ICAgICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3
LCAgICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAg
IDUwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4
LCAgICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAg
IDQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0g
ICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAy
MCwgICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAy
MywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAg
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywg
ICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAgMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsK
LSAgICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2
MSwgICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAg
ICAxNiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwg
ICAgMjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAy
MiwgICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAg
ICAgMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
ODUsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAot
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAg
MjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0g
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgLTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBu
dW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAq
Lwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAg
NDgsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwKLSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAg
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1
NCwgICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAg
ICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIz
LCAgICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIs
ICAgIDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAg
MjUsICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9r
ICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlF
TVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0K
LSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAg
ICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0K
LQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMg
aGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1l
YW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3Vw
cGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAg
ICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVz
KQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1k
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZ
ICYmIHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
eXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZ
UE9QU1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1
cDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZ
RVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAg
ICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNl
dCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0
aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUg
cHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUg
WVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRl
ZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAo
TikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5m
aXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAo
Q3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAg
XAotICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Rf
bGluZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhz
LCBOKS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUg
ICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhz
LCAwKS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9j
b2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0Mg
KFJocywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyog
WVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0g
ICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYg
d2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUg
bG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlm
IFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExv
YykgICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAg
ICBcCi0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0g
ICAgICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMg
IGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYK
LSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBh
cmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4
ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5
eWxleCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlm
IHJlcXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGlu
Y2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRl
ZmluZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJn
cykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlk
ZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAg
IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUs
IFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0g
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlE
ICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0
aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0
cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUg
Y29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQot
c3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2
YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGlu
dCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZ
UEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsK
LSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9j
YXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5
cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0s
ICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dp
dGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZv
aWQKLXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25w
LCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0g
ICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwot
ICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5U
T0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5
dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5
eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9j
YXRpb25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1
ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0
KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAg
dG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9p
ZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9t
OwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJy
LCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAg
ICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgo
Qm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBS
ZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2Vf
cHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNv
bnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlM
VFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsK
LSNlbmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1
bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChz
dGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAg
ICAgeXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAg
Ki8KLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZw
cmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3By
aW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAg
ICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNw
Wyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnBy
aW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklO
VChSdWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcp
ICAgICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUs
IGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmlu
dCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0
aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZ
REVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BS
SU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklO
VChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8q
ICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBw
YXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklU
REVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0
YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFj
ayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVl
IHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExP
Q19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRo
IGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZ
TUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZ
WUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElC
Q19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAg
ZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNv
bnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3Ry
KQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwot
ICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwot
ICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNw
eQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5l
ZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENv
cHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0
aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29u
c3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwg
eXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlm
Ci17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0K
LSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAg
cmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1l
cnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGlu
ZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0
J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJs
ZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBh
biBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tz
bGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMg
aXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3
aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QK
LXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5
c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBj
b25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXAp
Ci0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290
byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgq
Kyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAg
ICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXly
ZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAg
ICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBk
b19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVy
biB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAt
IHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVz
c2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRl
IFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRp
bmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5v
dAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4g
b3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJ
WkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9u
LiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBp
bnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsK
LQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0
dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5
Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5
dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9U
IHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlh
cmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlm
IDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZv
cm1hdHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNv
bnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBl
Y3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9y
W10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAot
ICAgICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2Yg
eXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwot
Ci0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2
ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXlu
IDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5
eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0g
eXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXlj
aGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlh
cmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1h
dCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4
ZW5kOyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0g
WVlURVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9T
RV9BUkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAg
ICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3Rl
ZCAtIDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFy
Z1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsg
eXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0g
KHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5
eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5
b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUx
ID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5
c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5
c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5
eXJlc3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdl
cyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5l
ZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBz
dHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5
cCA9IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAq
eXlmKSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5
ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCAr
PSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAg
ICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAg
ICAgICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4g
eXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFz
ZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlk
ZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVw
LCBZWUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3Rh
dGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9u
cCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAg
IFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNF
ICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAg
IHl5bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5
eXZhbHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAg
ICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2Fybmlu
Z3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFN
Ci0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYK
LSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNl
bHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAq
LwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0q
LwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1p
bnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNl
bmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkK
LSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7
Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50
IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJv
bC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28g
ZmFyLiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhl
YWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQg
eXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVm
b3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8q
IExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJl
ci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVm
ZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNo
YXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1Qg
eXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFj
a3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAg
ICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0
ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0g
ZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50
MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAg
eXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAq
LwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNh
OwotICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZ
WUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZ
WUxUWVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRl
ZCBhbmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUg
WVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4p
KQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZh
cmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0
aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQ
RSB5eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUg
cmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJl
IHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
U3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAw
OwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9r
ZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAg
ICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNv
IHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAg
ICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5
c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQ
RV9JU19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3Jl
IHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0
X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4g
PSAwOwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0
ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwg
dGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVk
LiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3Nw
Kys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsg
eXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVu
dCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAg
WVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cK
LSAgICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3Rh
Y2suICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZv
cmNlIHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAq
eXl2czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZ
UEUgKnl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlz
IGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQg
c3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBh
cm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUg
dW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAo
WVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAg
ICAgICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlz
czE7Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAq
LwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
LSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAg
ICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFi
OwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFj
a3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAg
ICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFj
a3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0g
ICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7
Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRF
Ci0gICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0g
ICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNz
cCA9IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsK
LSAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWdu
ZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0
ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1
cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXli
YWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVu
dCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFu
ZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0g
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBn
b3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tl
biBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVy
IFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3Rv
IHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAg
ewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5
eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0K
LQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9r
ZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAg
ICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQot
ICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAo
IlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0
aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZ
WUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5
dnNwID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBj
dXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlz
dGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVk
dWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0t
IERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5
cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGgu
ICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBp
bXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEn
LgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2Fy
YmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAg
IHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAg
IHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBh
dm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlh
bGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9j
YXRpb24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXls
ZW4pOwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAg
ICAgICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1h
Y3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsK
LSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3Qp
LT5iZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVs
ZXRlICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgOToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAt
ICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyld
LnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8o
KHl5bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2
c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUp
IC0gKDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAg
IHsKLSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFs
KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBw
dXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0
cnVlIDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsK
LSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0Rl
ZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQs
ICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3
OgotCi0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5V
TEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
LnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1
c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVO
VElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkg
LSAoMyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6
VG9rZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFso
MykgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAg
ICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCkt
PnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpU
b2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkg
LSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAg
ICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MzU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNw
WygxKSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElO
VF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpU
b2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZz
cFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAt
ICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICdbJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5p
dmFsKSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUg
MTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZ
X1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQot
ICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwot
Ci0gIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWlu
ZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBv
cHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0K
LSAgeXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VO
U10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYg
eXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0
ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0K
LSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3Qg
YWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8K
LSAgaWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVS
Uk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRh
eF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNp
emUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAg
ICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXpl
IDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAg
ICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAh
PSB5eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXlt
c2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNn
KQotICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgIHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBz
aXplb2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNp
emUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlz
eW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgm
eXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAg
ICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAg
ICAgICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0g
ICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5
bGxvYzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0
IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAg
ICBlcnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0g
ICAgewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAg
ICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAg
ZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAg
ICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXlj
aGFyID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4u
ICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQg
ZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21w
aWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlF
UlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4g
dXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5
eWVycm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5
bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5
eXNzcDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29t
bW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
eXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRl
ZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0g
ICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFT
VCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4g
PSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVz
ZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3Ag
PT0geXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNw
OwotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3Nb
eXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsK
LSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAg
KisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyog
VXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBv
ZgotICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwot
ICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5
eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZ
TUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAg
eXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMg
aGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNj
ZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21l
cyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJv
cnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92
ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15
eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkg
ZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0j
ZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZ
RU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIs
Ci0gICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8g
bm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJl
ZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxl
bik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5
eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAg
ICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9Q
U1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNz
YSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NF
Ci0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNl
bmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5
cmVzdWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENv
bmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewot
fQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19
Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVn
ID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQot
fSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBH
TlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlh
Y2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkw
LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0g
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg
eW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAq
LwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3
b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tl
bGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNo
b2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5l
cmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0g
ICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQg
eW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2ls
bCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBm
aWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNl
bnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAg
dmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRP
S0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8g
dGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAg
a25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0g
MjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBI
QVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNF
ID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0g
ICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJB
R01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9O
ID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3
MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0
LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAg
fTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFT
SF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEK
LSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUg
SEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2
NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZp
bmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUg
SEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hf
REVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRf
Q09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLSNpZiAhIGRlZmlu
ZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlv
biBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAg
ICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExp
bmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUg
WVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZ
U1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRp
ZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RF
Q0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBp
bnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19
IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwg
YmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5l
IFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE2NGVhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0
cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0
aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUm
KTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKwor
I2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxf
dXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFjZTUw
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQot
I2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0K
LW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0
IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9p
ZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19IXwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZ
UEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKaW5kZXgg
ODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKQEAgLTQ3LDUg
KzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7
CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IEluaXRBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNo
YXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRv
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmFkNDNmOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNlbmRpZgogCiAjaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogCiB0
eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2Nyw4IEBAIHR5cGVkZWYg
c3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsK
IAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGlu
dCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJl
dHVybiBFT0Y7CkBAIC03Myw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMg
KmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAq
aW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBl
b2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGlj
IElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29w
LCAwLCAwIH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKTsKIApAQCAtMTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkK
ICAgICByZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKKy8vIERlZmluZSB0aGlzIHRvIDEgdG8gdXNl
IHRoZSBuZXcgbGV4ZXIuCisjZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVSIDAKKworaW50IEluaXRT
Y2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBfVVNFX05FV19MRVhFUgor
ICAgIElucHV0U3JjKiBpbiA9IExleGVySW5wdXRTcmMoY291bnQsIHN0cmluZywgbGVuZ3RoKTsK
KyAgICBpZiAoIWluKSByZXR1cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworI2Vs
c2UKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmlu
ZzsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBs
ZW5ndGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyNlbmRpZgorICAgIHJldHVy
biAwOworfQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBm
cm9tIG11bHRpcGxlIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCmluZGV4IDIzM2QxZGMu
LmI2N2MxZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5ICs2OSw5IEBAIHR5cGVk
ZWYgc3RydWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJbml0U2Nhbm5lcihDUFBT
dHJ1Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCi1pbnQgU2NhbkZy
b21TdHJpbmcoY29uc3QgY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQg
ZnJvbSB0aGUgc3RyaW5nIG1lbnRpb25lZC4KK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVj
dCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pOwogaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYg
d2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAg
IC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwordm9p
ZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2cs
bGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRMaW5lTnVtYmVyKGludCk7
CiB2b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwogdm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaAppbmRleCBjMTlmNzljLi4yMzIwM2RhIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuaApAQCAtMTA1LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxv
YyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJv
bCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3lt
Ym9sa2luZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwg
aW50IGF0b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20p
Owotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwordm9pZCBDUFBFcnJvclRvSW5mb0xv
Zyhjb25zdCBjaGFyICopOwogCiAKICNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5jCmluZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYgKzI2Niw4IEBAIGludCBS
ZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNo
YXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwogICAgIGludCBsdG9rZW4sIGxlbjsK
ICAgICBjaGFyIGNoOworICAgIGludCBiYXNlLCBhY2N1bTsKKyAgICBjaGFyIGNoX3ZhbDsKIAog
ICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICBpZiAobHRva2VuID49IDApIHsKQEAg
LTMxNSwxOCArMzE4LDQxIEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lO
VENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAg
ICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBj
aCA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7
CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2gg
PSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNo
KSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0
b2xvd2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAg
fHwgY2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0g
PSBhY2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUo
cFRvayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1ww
JzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5
eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHko
eXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6
CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0
LDEwICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFt
ICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAg
ICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElG
SUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJs
ZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVv
ZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXls
dmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIp
LCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CiAgICAg
ICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOwpAQCAtNDI3LDkg
KzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywg
eXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJp
bnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAg
ICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgdG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRm
KHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9m
KHN0ciksICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIENQUERlYnVnTG9nTXNnKHN0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAppbmRleCA4NzY2ZGY5
Li5kYmY0YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lm
ICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0ggMQogCisjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCiAKICNk
ZWZpbmUgRU9GX1NZICgtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWI1
ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsODUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKKy8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8g
bm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlr
ZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBp
bnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4K
K3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhj
b25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsKKwor
ICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3Vw
cG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNvIHdl
IGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIs
IHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNo
IHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVl
cyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBpdGVy
ICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgewor
ICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgY2xl
YXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAg
IH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7
CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3Jh
cGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3Jh
cGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAg
eworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOworICAg
ICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOwor
ICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5v
dCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsrbU51
bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2Nh
dGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAv
LyBGSVhNRShtdnVqb3ZpYyk6IFdlIHNob3VsZCByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2
YWx1ZXMgZnJvbSBiZWluZyB0ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAgIC8vIGluIGFsbCBhdmFp
bGFibGUgc2FtcGxpbmcgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xTTCBFUy4KKyAgICAvLyBU
aGlzIGluY2x1ZGVzIG92ZXJsb2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0dXJlMkQsIHRleHR1cmVD
dWJlLCBhbmQgb3RoZXJzLgorICAgIGlmIChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2Fs
bCgpLT5nZXROYW1lKCkgIT0gInRleHR1cmUyRChzMjE7dmYyOyIgfHwKKyAgICAgICAgcGFyYW1l
dGVyLT5nZXRBcmd1bWVudE51bWJlcigpICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGJl
Z2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgbVNpbmsg
PDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVk
IHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQiCisgICAgICAgICAgPDwgIiBvZiBhIHRleHR1cmUy
RCBjYWxsLlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNp
dFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9y
KHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHBy
ZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRp
dGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29w
LT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVu
dCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsK
K30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChU
R3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+
Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVu
ZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUg
b2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAg
ICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTc5MzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCkBAIC0wLDAg
KzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklD
VF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNU
UklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitjbGFzcyBUSW5mb1NpbmtC
YXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIDogVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IG1TaW5rKHNpbmspCisgICAgICAgICwg
bU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFRE
ZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1
cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBo
QXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRH
cmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNv
bnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisKKwlUSW5mb1Np
bmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7
CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgKytt
TnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAg
bVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNpbmsgPDwgIlNhbXBs
ZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsKKyAgICB9Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jh
c2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJbmZv
U2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9
CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsgcm9v
dC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51bUVy
cm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsK
K3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJvcnM7
Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVS
X1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIyIEBAIGJvb2wgRGlz
cGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7CiB9CiAKKy8v
IHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8vIHdlIGFsc28g
d2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRo
LW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3Mu
aHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAg
ICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0
ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICBib29s
IGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNE
Rk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJvb2wgRGlzcGxh
eTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVy
YWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CkBAIC0xMDgx
LDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNwbGF5
OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3BsYXk6
OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9
IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRU
ZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNB
R0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAyODQzMS4uNGY3ZGJk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAg
LTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4VGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0RldmljZUxv
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3Bw
CmluZGV4IDA3YWQzY2YuLmNhMmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtNTY1LDYgKzU2NSw4IEBAIEVHTGludCBTdXJmYWNl
Ojppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAogICAgIHJldHVybiBtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRh
cmdldCkKQEAgLTU3NSw2ICs1NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0
UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVu
Y2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IDY2Y2Q1YzAuLjgyMGY2NDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMxMSw3IEBAIHZvaWQgQ29u
dGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1
cmZhY2UpCiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRG
bG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZtU3Vw
cG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5h
bmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKICAg
ICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1p
bmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVy
ZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwogCiAgICAgICAgIG1TdXBw
b3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2
KTsKIApAQCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5
KCkKICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwogfQogCit2b2lkIENvbnRleHQ6
Om1hcmtEeFVuaWZvcm1zRGlydHkoKQoreworICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwor
fQorCiB2b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAgICAgaWYgKG1SZXNldFN0
cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCkBAIC0xNjQ2LDYgKzE2NTMs
MTIgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJh
bXMpCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAg
ICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IDE7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09F
UzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworICAgICAgICBi
cmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0x
NzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
dW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudQogICAgICAgY2FzZSBHTF9U
RVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01B
UDoKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKKyAgICAg
IGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgY2FzZSBHTF9Q
Uk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKQEAgLTE4MzUsMTMgKzE4NTAs
MzEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0
KQogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
IGZhbHNlKTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBjb2xvciBhdHRhY2htZW50
IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50CisgICAgLy8gdG8ga2Vl
cCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlm
IGRlcHRoIHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9
IE5VTEw7CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAh
PSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZm
ZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXROdWxsQ29sb3Ji
dWZmZXIoKTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAg
ICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQg
PSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVidWZm
ZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCByZW5k
ZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOwogICAgIGlm
IChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCiAgICAg
ewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJP
YmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAg
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigicmVuZGVy
IHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAgIH0KICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBAIC0xODU2LDI1ICsxODg5
LDI3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9y
dCkKICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CiAgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsK
LSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVy
KCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVy
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgIGRlcHRoU3Rl
bmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0
aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgZGVwdGhidWZm
ZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogICAgIGVsc2UgaWYg
KGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVu
Y2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAgICAg
ICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkRlcHRo
IHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldFNlcmlhbCgpOwor
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7
CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZm
ZXJTZXJpYWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVu
ZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0
aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwogICAgIGlmICghbVJlbmRl
clRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQogICAgIHsKLSAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRh
cmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
Ly8gQ29udGV4dCBtdXN0IGJlIGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAsMjcgQEAgYm9vbCBDb250
ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgIGlmIChtU3Rh
dGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOwogCi0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXRE
eEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xm
bG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVp
Z2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXpl
LCAxLCB4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVs
U2l6ZSwgMSwgeHkpOwogCiAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29t
cHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJv
YWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBj
b29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOworICAgICAgICBHTGlu
dCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOwogICAgICAgICBm
bG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0
IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKICAgICAgICAgR0xmbG9hdCB3aHh5WzRd
ID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAy
LjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkg
KyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpb
Ml0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAg
ICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBH
TGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhS
YW5nZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIs
IHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0z
ZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5p
Zm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCArMjAzMSwxOSBAQCBib29s
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiB2b2lkIENv
bnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAgIFByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAg
IEdMZW51bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFj
ZSk7CiAKLSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dM
b2NhdGlvbigpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9u
dENDV0xvY2F0aW9uKCk7CiAgICAgR0xpbnQgY2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdM
X0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNj
dyk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7
CiAKLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNP
ckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGludCBhbHdheXNGcm9udCA9
ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAgIHByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAogICAgIEQz
REFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRhcHRlcklk
ZW50aWZpZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRlbnRpZmllci0+
VmVuZG9ySWQgIT0gMHgxMDAyOwpAQCAtMjI4MCwxOCArMjMyMiwyMCBAQCBHTGVudW0gQ29udGV4
dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSBtbwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQogewogICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAg
ICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtU2VyaWFs
KQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0g
cHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAgIElEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQaXhlbFNoYWRlcigpOwor
ICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7CiAKICAgICAgICAg
bURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGly
dHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1z
KCk7CiAgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNl
cmlhbCgpOwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5VW5pZm9ybXMoKTsKKyAg
ICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8vIEFwcGxpZXMgdGhlIHRl
eHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKQEAgLTIz
MTEsMzAgKzIzNTUsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkKIHZvaWQgQ29u
dGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewogICAgIFByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBp
bnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFu
Z2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKICAgICB1bnNp
Z25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwogICAg
IGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNE
VkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2Jq
ZWN0LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBzYW1wbGVyUmFuZ2UgPSBw
cm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwogCiAgICAgZm9yIChpbnQg
c2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdl
dFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUg
aW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtQmluYXJ5
LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0
dXJlIGltYWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5k
ZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkK
ICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFt
T2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKKyAgICAg
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxl
clRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAgICAgICAgIFRleHR1cmUg
KnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5
UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICBp
ZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4
dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmQz
ZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAgICAgICAgICAgICBpZiAo
ZDNkVGV4dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
cHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFs
IHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFw
UygpOwogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0
V3JhcFQoKTsKQEAgLTIzNTEsNyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJl
cyhTYW1wbGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxp
ZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlh
bCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0
dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUp
OwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDcsNyBAQCB2b2lkIENvbnRl
eHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKICAgICAgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0
dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdldFRl
eHR1cmVTZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGly
dHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ1MSw2ICsyNDk3LDcgQEAgdm9p
ZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNzM4LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0
ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOworICAgICAgICAg
ICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
dGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7CiAgICAgICAg
ICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CkBAIC0yOTUy
LDcgKzMwMDAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50
IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbgogICAgIGFwcGx5U2hhZGVycygp
OwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+
dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5n
ZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zMDQyLDcg
KzMwOTAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZAogICAgIGFwcGx5U2hhZGVycygpOwog
ICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFs
aWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQ
cm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zNDUyLDYgKzM1
MDAsMTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBj
b25zdAogICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJp
dEluZGljZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBA
IC0zNjc3LDYgKzM3MzAsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQog
ICAgIH0KIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCAiOworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2Jp
bmFyeSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAK
QEAgLTM3MjAsNiArMzc3NCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmco
KQogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAog
ICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9k
ZXB0aF90ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfZnJhbWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
IT0gMCkKICAgICB7CkBAIC00MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBDb250ZXh0OjpibGl0RnJh
bWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3Jj
WTEKIAogICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKICAgICAgICAgewotICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNp
bCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkq
IHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwor
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0
aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgIHJlYWREZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKIAogICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICAgICAgewpAQCAt
NDExNSw2ICs0MTgwLDggQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVj
bGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICBEM0RWRVJURVhF
TEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKICAgICBEM0RWRVJURVhF
TEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKICAgICAgICAgaWYg
KGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcgQEAgR0xlbnVtIFZlcnRl
eERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBUcmFuc2wKICAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5
cGU7CiAgICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7
CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAg
ICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4
KGkpOworICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdl
dFNlbWFudGljSW5kZXgoaSk7CiAgICAgICAgICAgICBlbGVtZW50Kys7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CmluZGV4IDhkY2NmMGYuLmM3ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4
RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVu
dW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5V
TV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEK
ICAgICB7CkBAIC0yODIsNiArMjgyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgbWFrZUN1
cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogCiAg
ICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0
eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29s
IHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9v
bCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5z
dGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBi
b29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBv
cnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuY3BwCmluZGV4IDczMGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3
IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVu
Y2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJi
dWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDgg
QEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAg
IHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMs
OCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1
ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAg
LTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1
ZmZlcigpCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVu
ZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5k
ZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Cisg
ICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBp
ZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVw
dGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFu
dWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwg
aGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1
ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQs
IEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxi
dWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJh
bWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZl
clR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwo
KQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAg
aW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdB
dHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUp
CiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21w
cmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwor
ICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3Jt
YXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwK
KyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAg
ICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1
ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQx
NkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgy
ZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0
MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxv
YXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJh
YmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNv
bG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAg
ICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJ
c1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KIAogICAgICAg
ICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICBoZWlnaHQgPSBjb2xv
cmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0
U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CisgICAgICAgIG1pc3NpbmdB
dHRhY2htZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZl
ciA9IE5VTEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewot
ICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsgICAvLyBS
ZXF1aXJlcyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAgICAgICB9Ci0KICAgICAgICAgZGVwdGhi
dWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhidWZmZXIpCkBA
IC0zMTksMTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAgICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lk
dGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IGRlcHRo
YnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJh
YmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGRl
cHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgLy8gZGVwdGggdGV4dHVy
ZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhGb3Jt
YXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1p
c3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVm
ZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhl
aWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7
CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAh
PSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAg
ICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNz
KCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAg
ICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAg
IH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAg
ICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGgg
PT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgo
KTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAg
ICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNl
IGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJ
T05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdl
dEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVu
dHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRo
X3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9y
bWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRh
Y2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdl
dFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQo
KTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7Cisg
ICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9
IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAg
ICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikK
KyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRoZXkg
bXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1cHBv
cnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNp
bAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZlciAh
PSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAg
c3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5jaWxi
dWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBhdCBs
ZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0YWNo
bWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01J
U1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApAQCAtNDksNiArNDks
NyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIo
KTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVy
ICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZm
ZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0
RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAg
ICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJi
dWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJlbmRl
cmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBhNWUzOGJmLi4xODRh
MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1By
b2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIK
IAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCArMTgsMjQgQEAKIAogI2lu
Y2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3BhY2UgZ2wKIHsKIHVuc2ln
bmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25zdCBjaGFyICpmYWtlcGF0
aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hh
ciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKLSAgICByZXR1cm4g
YnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBf
bmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJy
YXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXpl
KHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107
Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVu
aWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQogCi1ib29sIFVuaWZv
cm06OmlzQXJyYXkoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsK
LSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKIH0KIAotVW5pZm9y
bUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3Jh
bTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5k
ZXgpCitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKIH0KIAogUHJv
Z3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDog
bVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3Vl
U2VyaWFsKCkpCiB7Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwogICAgIG1GcmFnbWVudFNo
YWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0
YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBt
SW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7
Ci0KKyAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNl
OwotCiAgICAgbVJlZkNvdW50ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsxMTMsNyBAQCBpbnQgUHJv
Z3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAogICAgIHJldHVybiAobVZlcnRl
eFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7CiB9CiAKLUlEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQotewotICAgIHJldHVy
biBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFt
OjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0K
LQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25z
dCBjaGFyICpuYW1lKQordm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0
aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpZiAoaW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgewpAQCAtMTc1LDI2NDkgKzEyNiwyODAgQEAgdm9pZCBQ
cm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpu
YW1lKQogICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNv
bnN0IGNoYXIgKm5hbWUpCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRl
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0u
bmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihp
bmRleCwgbmFtZSk7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRy
aWJ1dGVJbmRleCkKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4
ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRo
ZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5k
IGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkK
IHsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJp
YnV0ZUluZGV4XTsKKyAgICB1bmxpbmsoZmFsc2UpOworCisgICAgbVByb2dyYW1CaW5hcnkgPSBu
ZXcgUHJvZ3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5LT5saW5rKG1BdHRyaWJ1
dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAg
ICAgIHVubGluayhmYWxzZSk7CisgICAgfQogfQogCi0vLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4g
dGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJvZ3JhbTo6Z2V0VXNlZFNh
bXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRB
dHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAogewotICAgIHN3
aXRjaCAodHlwZSkKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhF
TDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1B
dHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQog
Ci0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBj
b3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3Ig
dGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQ
cm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KQorLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5r
ZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9n
cmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQogewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5p
dCA9IC0xOwotCi0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVj
dCBiZWluZyBkZXN0cnVjdGVkCiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAg
ICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNh
bXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpCisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Cisg
ICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CiAKLSAg
ICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICBpZiAo
bVZlcnRleFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0
ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAg
ICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVy
ID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxv
Z2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFt
QmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgfQotCi0gICAgcmV0
dXJuIC0xOwogfQogCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGly
ZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNo
YWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFt
OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQog
ewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0g
ICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZiht
U2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwot
ICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAg
ICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7Cisg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1HTGludCBQcm9ncmFtOjpnZXRVbmlmb3Jt
TG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFy
eShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHVuc2lnbmVkIGludCBzdWJz
Y3JpcHQgPSAwOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtQmluYXJ5OworfQogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9y
IGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRf
bGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7
Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5n
dGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9w
ZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVuKTsKLSAgICB9Cit2b2lk
IFByb2dyYW06OnJlbGVhc2UoKQoreworICAgIG1SZWZDb3VudC0tOwogCi0gICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQor
ICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQogICAgIHsKLSAgICAgICAg
aWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQorICAgICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwogICAgIH0KLQotICAgIHJldHVybiAt
MTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBQcm9ncmFtOjphZGRSZWYoKQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgbVJlZkNvdW50Kys7Cit9CiAKLSAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7Cit9CiAKLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2VyaWFsOworfQogCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOworfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAg
ICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAg
ICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAg
ICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTCkKK2ludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QK
K3sKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CiAgICAgfQog
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9p
ZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0
SW5mb0xvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogICAgIH0KLQotICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFd
OwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7
Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAg
ICAgIGluZm9Mb2dbMF0gPSAnXDAnOwogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAg
ICB9CiAgICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJv
Z3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50
LCBHTHVpbnQgKnNoYWRlcnMpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKyAgICBpbnQgdG90YWwgPSAwOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfRkxPQVRfVkVDMykKKyAgICBpZiAobVZlcnRleFNoYWRlcikKICAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAg
ICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0g
PSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdl
dFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsK
KyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7
CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChH
TGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMzsKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CiAKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXIt
PmdldEhhbmRsZSgpOwogICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKICAgICB9Ci0gICAg
ZWxzZSAKKworICAgIGlmIChjb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgKmNvdW50ID0gdG90YWw7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtUHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUs
IG5hbWUpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQp
CisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAg
ICAgfQogCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCi0gICAgICAgICAgICAg
ICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAgICAqdHlwZSA9IEdMX05P
TkU7CisgICAgICAgICpzaXplID0gMTsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBm
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGlm
IChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKICAgICB9Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAg
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lk
dGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQg
dHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCitHTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQogewotICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0gICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsK
LSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsK
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJp
YnV0ZU1heExlbmd0aCgpOwogICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0g
ICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQp
MDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50
IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdM
ZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3Jh
bUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0
eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9N
QVQyKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQogCi0gICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9
IDA7CisgICAgICAgIH0KIAotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3Nl
TWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCAr
PSA4OwotICAgICAgICB2YWx1ZSArPSA0OworICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0
eXBlID0gR0xfTk9ORTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbVByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIH0KLQotICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICBlbHNl
CiAgICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQs
IHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2YWx1ZSArPSA5OworICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1ib29sIFBy
b2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3Rp
dmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0g
R0xfRkxPQVRfTUFUNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
IHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1
ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQor
dm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1EZWxldGVTdGF0dXMgPSB0
cnVlOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRl
bGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKIH0KIAotYm9vbCBQ
cm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQoKTsKICAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRV
bmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikK
LXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAq
IGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQot
ICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
LQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAg
ICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
LSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xpbnQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQp
OwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVD
NCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVu
c3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXpl
KQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXpl
KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5
dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwy
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1z
LCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5h
bENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlw
ZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5p
Zm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ld
ID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAq
IHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yo
R0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQ
YXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNb
aV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUg
dGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAg
ICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50
LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5z
cG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewot
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29t
cG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVu
aWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBl
KHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFt
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBh
cmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxs
VW5pZm9ybXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZv
cm1zOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhp
cyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6
YXBwbHlVbmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJh
dG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1
ZTsgKyt1YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAg
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxv
YXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50
ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFu
ICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIDEsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBh
cHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdl
dFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUs
IDQsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZv
cm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfMkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVD
MjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21w
aWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJs
ZSBiaW5hcmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0
YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0
ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAg
ICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZs
YWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAg
ZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAg
IHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VU
ZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmlu
ZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJj
ZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAg
ICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2Fn
ZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZh
a2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAm
ZXJyb3JNZXNzYWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBj
b25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVy
UG9pbnRlcigpOwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsK
LSAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNz
YWdlKTsKLQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JN
ZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAg
IHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERX
T1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZh
cnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFk
aW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEK
LS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBp
ZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAg
ICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWlu
Z1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBt
RnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9
IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAg
ICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0g
PT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFy
eWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFj
a2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAw
ICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxl
OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJs
ZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlp
bmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBz
cGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5
aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1u
XSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtj
b2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWlu
ZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVn
aXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8
IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVsw
XSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17
Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5
aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
ZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0g
bUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAg
ICAgIGZyYWdWYXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9
Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdnR4VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAg
ICB2dHhWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8g
dGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlp
bmdzKHBhY2tpbmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0
IGRlY2xhcmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAg
Y29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNv
bnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7
Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5w
dXQgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewot
ICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0
cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8
fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMg
ZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFt
ZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwot
ICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAg
ICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2gg
YW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlp
bmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4
SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRl
cmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0
cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQzeDMgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQ
VVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7
IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdp
c3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3Ry
KHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFn
Q29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAg
IHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBp
bnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJl
Z2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0
ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmli
dXRlLT5uYW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAt
IGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4
ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Q
b3NpdGlvbi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAm
JiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2lu
dFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11
bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAh
PSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCAr
PSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9
ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBt
VmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkg
KyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
cm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhl
bEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0g
ICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwot
ICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5n
U2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0g
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGds
X1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIg
ICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAi
fTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3Qg
UFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAg
ICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztc
biI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBkeF9Db29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRl
eHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBn
bF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9W
UG9zLnkgLSAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdo
dC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdl
dCgpCi0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0Lmds
X0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56
ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4i
OwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
bTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlu
cHV0LmdsX1BvaW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52
RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93
Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAg
ICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0i
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3Mg
PiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4i
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xv
clswXTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4
ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRo
ZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5k
IGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkK
LXsKLSAgICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21l
bnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdt
ZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5n
ZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAg
Y29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwz
KCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9
IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwot
Ci0gICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhI
TFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNE
MTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCks
IHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFy
eSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZm
ZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxS
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5H
ZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVy
dGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQot
ICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5h
cnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVj
dXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
dGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2Ug
Z2xfIGFuZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRv
IG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhS
YW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAg
ICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIp
OwotICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
Q29vcmQiKTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAg
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRz
T3JMaW5lcyIpOwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBH
TCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwot
Ym9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRM
b2NhdGlvbnMgPSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRp
bmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUg
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAg
aW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0g
ICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRp
b24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9u
XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlw
bGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBl
cnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0
aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9u
ID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRv
byBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3Qg
aGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRv
ciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1
dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAg
IHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUt
Pm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGds
QmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJs
ZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhf
VkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEg
fHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0
dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGlu
ZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJs
ZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQot
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRy
aWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0g
ICAgewotICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkg
IT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwot
ICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXRE
ZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRp
b24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExF
IGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJ
bmRleCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3Rh
bnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9u
Q291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlm
ICghZGVmaW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0
YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0v
LyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQp
Ci1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRI
YW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6
OnN0cmluZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0
ID09IEQzRFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAg
ICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0
YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAg
IGlmIChwc0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHND
b25zdGFudCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50
RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDog
VEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBs
ZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwg
c2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
LiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBs
ZXJJbmRleCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcklu
ZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0g
RDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6
Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNv
dW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29u
dGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFz
cykKLSAgICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFu
dERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFi
bGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAg
ICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAg
ICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxk
SGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0
aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNl
IEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQz
RFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAg
cmV0dXJuIGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmlu
ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRl
VW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBh
bHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1
bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBp
ZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAg
ICAgIGlmIChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9
IHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5p
Zm9ybS0+cHMsIG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRs
ZXModW5pZm9ybSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlm
b3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9
IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgu
cHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZv
cm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09
IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9T
QU1QTEVSMkQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9D
VUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoK
LSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERl
c2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJl
IG1hdHJpY2VzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBU
aGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJp
bmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17
Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUo
MCwgMywgImR4XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVu
ZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25h
bWVbMF0gPT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBfbmFtZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYp
Ci17Ci0gICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAg
IEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYg
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQg
KiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29w
eUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3Rv
cltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
U2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29s
VmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5m
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbaV0sIDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
U2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0
b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChz
YW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0g
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFT
U0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0
IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQo
KGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiAr
PSAzOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwg
dmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5p
Zm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsK
LSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rvcltp
XSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChm
bG9hdCl2WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jt
bml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0g
RDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotLy8gYXBwZW5k
IGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KLS8vIFRoZSBEM0Qg
Y29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRoZSB3YXJuaW5n
IG9yIGVycm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBv
ZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3JhbTo6YXBwZW5k
VG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17Ci0gICAgc3RkOjpzdHJp
bmcgbXNnKG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAgIGRvCi0gICAgewotICAg
ICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IHN0
ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQs
IHN0cmxlbihmYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAh
PSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cu
Y19zdHIoKSk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwot
ICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9m
KGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXpl
X3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICghbUluZm9Mb2cpCi0gICAg
ewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAg
c3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
c2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xv
ZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5
KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBp
bmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBu
ZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCi17Ci0gICAg
aWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOwotICAgICAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9i
amVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3Ry
dWN0aW9uCi12b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCi17Ci0gICAgaWYgKGRl
c3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmICht
RnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsK
LSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAg
ewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0g
ICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25z
dGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQot
ICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29u
c3RhbnRUYWJsZVZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbUxpbmtl
ZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtp
bmRleF0gPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNQ
U1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCi0g
ICAgewotICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVy
UmFuZ2UgPSAwOwotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2so
KTsKLSAgICB9Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0
aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLQotICAgIG1Vbmlmb3JtSW5kZXguY2xl
YXIoKTsKLQotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigp
OwotCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCi0gICAg
bUxpbmtlZCA9IGZhbHNlOwotfQotCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKLXsKLSAgICBy
ZXR1cm4gbUxpbmtlZDsKLX0KLQotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAot
ewotICAgIHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dyYW06OnJlbGVhc2UoKQot
ewotICAgIG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVT
dGF0dXMpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1I
YW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjphZGRSZWYoKQotewotICAgIG1SZWZD
b3VudCsrOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAot
ewotICAgIHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRT
ZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwot
fQotCi1pbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
SW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKG1JbmZvTG9nKQot
ICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4o
bUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0g
ICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbmZvTG9nW2luZGV4XSA9
ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGgg
PSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdM
c2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAg
aW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAg
aWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90
YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAg
ICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0
b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291
bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRl
KEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpz
aXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW5h
Y3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwot
ICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRy
aWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAg
aWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0
dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0KLSAgICBpZiAoYnVmc2l6
ZSA+IDApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3Ry
aW5nLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAg
ICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4o
bmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEg
c2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRl
eCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4
XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFj
dGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAg
ICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmli
dXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZl
VW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBv
dmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAw
OwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZv
cm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAgewotICAgICAgICBpZiAobVVu
aWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2
ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0KLQotICAgIEFTU0VSVCh1bmlm
b3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4g
Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKLQot
ICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm5jcHko
bmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAx
XSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAg
Kmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpzaXplID0g
bVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1
bmlmb3JtXS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50
KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1z
ID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXgg
PSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewot
ICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAi
ZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
VW5pZm9ybU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlm
b3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAs
IDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGlu
dCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAg
ICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1h
eExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQot
Ci12b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAgbURlbGV0ZVN0YXR1cyA9
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFByb2dyYW06OnZhbGlkYXRl
KCkKLXsKLSAgICByZXNldEluZm9Mb2coKTsKLQotICAgIGlmICghaXNMaW5rZWQoKSkgCi0gICAg
ewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3Nm
dWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlk
YXRlU2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1W
YWxpZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZh
bGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3Rp
dmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZl
ciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhl
IGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAg
ICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9P
UEVSQVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewot
ICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyAr
K2kpCi0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxU
ZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
IT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
U2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUg
aW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmICht
U2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5p
Zm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIs
IHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBl
ICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3Rpbmcg
dHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1T
YW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6aW5pdGlhbGl6ZUNvbnN0
YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8g
KnJpLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWEhBTkRM
RSBoYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlm
b3JtLT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQotICAgIHsKLSAgICAgICAgVUlO
VCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3Rh
bnREZXNjcmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5H
ZXRDb25zdGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9u
Q291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICByaS0+
cmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKLSAgICAg
ICAgcmktPnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7
Ci0gICAgICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJT
ZXQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0g
MDsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQ
cm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0
aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpn
ZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xp
bnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXggNjE4MzBjNi4uMWI0MjM5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1
ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+
Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywxNyBAQCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBj
bGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0
cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3Jt
CitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwogewotICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7Ci0KLSAgICB+
VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBHTGVudW0gdHlw
ZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAg
ICBib29sIGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsKLSAgICAgICAg
aW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleDsKLSAgICAgICAgaW50
IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdp
c3RlckluZm8gdnM7Ci19OworICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGluZ3MoKTsKKyAg
ICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5n
IHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBV
bmlmb3JtTG9jYXRpb24KLXsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcg
Jl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgICB2
b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUp
OworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBj
b25zdDsKIAotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7
Ci0gICAgdW5zaWduZWQgaW50IGluZGV4OworICBwcml2YXRlOgorICAgIHN0ZDo6c2V0PHN0ZDo6
c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogfTsKIAogY2xh
c3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGRl
dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0Nv
dW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVy
KCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0KICAg
ICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5h
bWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsK
LSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xp
bnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJU
eXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRT
YW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9j
YXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVu
aWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
OwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1N
YXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRy
aXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdl
dER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAg
R0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNM
b2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9p
ZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlua2Vk
KCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGludCBn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0dGFj
aGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFk
ZXJzKTsKQEAgLTEzMSw5MSArNzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIHZvaWQgZmxhZ0Zv
ckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCi0g
ICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vy
cm9ycyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50
IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0
cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNj
b3JlCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6
c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEw
QmxvYiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2Zp
bGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5r
KGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFy
eWluZyAqcGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9v
bCBsaW5rQXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRU
YWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhI
QU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZv
cm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlV
bmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlm
b3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwg
Y29uc3QgR0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxl
cyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNE
WENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9M
b2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9M
b2coY29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2
aWNlOSAqbURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAg
IFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhM
U0w7Ci0gICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3Mg
bUF0dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxF
eGVjdXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxl
OwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENv
bnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmlu
Zz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUg
bUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJ
bmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0g
ICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0g
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1T
YW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVy
c1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNl
ZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsK
LQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBV
bmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxv
Y2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0K
LSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2Nh
dGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhl
bFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9n
cmFtQmluYXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8g
RmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8g
bG9uZ2VyIGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsK
IAogICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0w
LDAgKzEsMjU4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxl
bWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0
cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUg
PHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
KQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK2NvbnN0IGNoYXIg
KmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sK
KyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShH
TGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6
OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7CisgICAg
aW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBk
YXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRl
cyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAg
ZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAgICByZXR1
cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxvY2F0aW9u
OjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
ZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6
dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgp
Cit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1EZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBt
Q29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICBtVmFs
aWRhdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5k
ZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNb
aW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAg
IHsKKyAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKwor
ICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJh
bmdlID0gMDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRo
TG9jYXRpb24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAg
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJv
Z3JhbUJpbmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAg
ICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhF
eGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25z
dGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVW
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1V
bmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKwor
ICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dy
YW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJs
ZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4
U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWludCBQ
cm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQorewor
ICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJUKGF0
dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMp
OworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9CisK
Ky8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQu
CitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhF
TDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVu
aXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4
ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVy
KS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5
cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xpbnQgbG9naWNhbFRleHR1
cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1Q
TEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0
dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0Owor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAg
ICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1T
YW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
aWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGlu
dClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJl
dHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERp
cmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBz
aGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3Jh
bUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZiht
U2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoK
KyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9m
KG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRl
eHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9
IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJp
ZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdb
Jyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAo
b3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkK
KyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNf
c3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHVuc2lnbmVk
IGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykK
KyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUg
JiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2Ny
aXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikK
K3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAg
ICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZM
T0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2
WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9
IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29s
ZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9G
TE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0g
dlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAgICAgICAgICB0YXJnZXRb
M10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICog
NCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RS
VUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQg
c3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0
YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFy
Z2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lk
dGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsg
eSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0g
PSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBj
bGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVp
Z2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJn
ZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdp
ZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVk
IGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5
KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChU
KTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDg7Cisg
ICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FU
X01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7
CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRy
aXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAx
Nik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAg
IHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwK
KyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVv
ZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
KEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMy
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAg
ICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBH
TGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZb
aV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1j
cHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQp
ICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAg
ICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0
ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHBy
b3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7Cisg
ICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
c3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Cisg
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5z
aWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5p
Zm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVu
aWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoK
KyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xm
bG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGlu
dCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBw
cm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgewor
ICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5p
Zm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIs
NCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVu
dENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlu
dGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJn
ZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFs
bFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlm
b3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0g
dHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRo
aXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW1C
aW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+
OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsg
dWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAg
ICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAg
ICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9W
RUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5i
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJy
YXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJn
ZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
SU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5p
Zm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9y
bSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ly8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4
ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0Jp
bmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50
VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdz
ID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkp
CisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJV
RworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNl
bHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5k
aWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAg
ICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRo
ICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdy
aXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4
dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7
CisgICAgfQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9i
ICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3Ry
bGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywg
MCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAg
IHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3Nh
Z2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgIFRSQUNF
KCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNf
Y2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRU
YWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWlu
Z3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25z
dCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3Rv
cnMoKTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0g
PSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0
b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciAr
IHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3Vj
Y2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBh
dmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9
IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0g
PSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3Rv
cnM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNl
W3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZh
cnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9
ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2
YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwor
ICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5
aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFj
a2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3Moc3RkOjpz
dHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVy
ICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYg
KHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3Rl
ciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gZnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAgICAgZnJhZ1Zhci0+
cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIGZvciAo
VmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKysp
CisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2dHhWYXItPmNvbCA9
IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZp
bGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0
XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcsIGZy
YWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1
dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAg
IGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBj
b25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1Zl
Y3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1
dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAg
ICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0
ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91
dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNf
c3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAg
ICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAg
bWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkg
dmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1Nl
bWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKworICAgIHZlcnRleEhMU0wg
Kz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAg
aW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9y
IGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRl
ICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIg
IjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRl
LT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKwor
ICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRp
b24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsg
cisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0
IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIg
KyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5n
U2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0
ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAg
dmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAg
ICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCAr
PSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1
dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21h
aW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9z
aXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55
ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3Np
dGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEu
MCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Q
b3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsK
KyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihy
KTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAg
Ly8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhI
TFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsK
KworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5
aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93
cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIg
KyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2
YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20z
KSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7
XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1Bv
aW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQy
IGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAi
fTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3Qg
UFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9
O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAg
ICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4i
OworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
ZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWlnaHQuIFNlZSBDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9z
LnkgLSAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8y
LCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgp
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChp
bnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xf
UG9pbnRDb29yZDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
b250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNp
bmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAw
LjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdp
bigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcr
KykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlp
bmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9
IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIg
KyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAg
ICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xu
IgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVC
aW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRl
ci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwaXhl
bEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6c3RyaW5nIHZlcnRl
eEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlmICghbGlua1Zhcnlpbmdz
KHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4
dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29u
c3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBj
b21waWxlVG9CaW5hcnkodmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0
YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5h
cnkocGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwor
CisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhS
RVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCop
dmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Cisg
ICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigo
RFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxl
KTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYg
U1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNl
KCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFy
eSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZl
cnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFsaW5rQXR0cmlidXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIs
IHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9G
UkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFsaW5rVW5pZm9ybXMoR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVWUykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1k
ZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVk
IHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAg
ICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Rl
cHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7CisgICAgICAg
ICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udEND
VyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRleHQtPm1hcmtE
eFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMgdGhlIG1hcHBp
bmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNh
Z2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRy
aWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50
IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBh
IGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRy
aWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2
ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAg
ICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmco
YXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0
IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUxp
bmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBz
YW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAgICAgICAg
ICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2ZSBhdHRyaWJ1dGUgKCVz
KSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0
cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRp
b24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsg
YXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChB
dHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQo
KTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVC
aW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24K
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZp
cnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisK
KyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCAr
IHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0
cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0
cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXIt
PmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7
CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4
W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhHTGVudW0g
c2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCit7CisgICAgRDNEWENP
TlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247CisKKyAgICBjb25zdGFu
dFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRh
YmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCisgICAgeworICAgICAg
ICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQo
MCwgY29uc3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnRE
ZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRI
YW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3Jt
KHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3Vu
ZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJu
cyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQ
cm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5E
TEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlv
bi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24u
TmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJs
ZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwor
CisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2Ft
cGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVy
SW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRF
WFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1V
c2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0lu
Zm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJs
ZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAgICAg
aWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlw
dGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJF
XzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2lj
YWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxl
clJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFu
Z2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlZlcnRleCBzaGFk
ZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAo
JWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJ
bmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZp
ZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9
IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisK
KyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgICAg
ICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0
YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIi
OworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZpZWxk
SGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1l
ICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19W
RUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNE
WFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFu
dERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVy
LCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3Rk
OjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3Jt
KGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkg
ZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0t
Pm5hbWUpOworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2Nh
dGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKwor
ICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29u
c3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAg
IHVuaWZvcm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlv
biA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAg
ICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGlu
dCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAg
ICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZv
cm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9n
cmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFu
dERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0
YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNE
WFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3Jp
cHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMy
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAg
IHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRp
b24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQ
VF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExT
TDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRl
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywg
ImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOwor
fQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAg
IAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXpl
X3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIu
Iik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBp
ZiAobmFtZVswXSA9PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29s
ZWFuICp2KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0
XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+
dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kg
KiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBz
LmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0g
MCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnND
b3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihj
b3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VS
VChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBib29s
VmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURl
dmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5k
ZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAg
ICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgewor
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OworICAgIH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0g
MCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5i
b29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNv
bnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5m
bG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
MWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAg
IEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0g
RDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4
ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAg
IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5k
ZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4
OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0
SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJl
VW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZv
cm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxv
YXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBw
bHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVj
dG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKwor
ICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZv
cm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5
VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAg
ICAgICB2ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0s
IGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJp
bmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+
cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0
b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRh
cmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25z
dCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAg
fQorfQorCisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8g
bG9nLgorLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNv
bWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUg
YWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVz
c2FnZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisKKyAgICBzaXplX3QgZm91
bmQ7CisgICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOwor
ICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKworICAgIGFwcGVu
ZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5
OjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaWYgKCFm
b3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBpbmZvWzEw
MjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQp
OworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKKyAg
ICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8p
OworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNo
YXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1J
bmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5m
b0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7CisgICAgICAg
IHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAgICAgIGRlbGV0ZVtdIG1J
bmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisgICAgewor
ICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gTlVMTDsKKyAg
ICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAg
ICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2dM
ZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZv
TG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2coR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50
IGluZGV4ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmICht
SW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXpl
IC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9n
LCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0g
PSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3Ro
ID0gaW5kZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJp
YnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVy
IGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0g
MDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0gMDsg
YXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAg
ICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3Rp
dmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgfQorCisgICAgaWYgKGJ1
ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAgICBzdHJuY3B5KG5hbWUs
IHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKwor
ICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3Ry
bGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5
cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQgYXR0
cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9n
cmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBtYXhM
ZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFBy
b2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpu
YW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVk
IGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBm
b3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMs
ICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAg
ICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4
IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCisKKyAgICBpZiAo
YnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9y
bXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNB
cnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAg
IH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKKyAg
ICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOworCisg
ICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKwor
ICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9y
bXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3Jt
SW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9
CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQorewor
ICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAg
ICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZv
cm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5k
ZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZv
cm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5n
dGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojp2
YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBhcHBseVVuaWZvcm1zKCk7
CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQorICAgIHsKKyAgICAgICAgbVZhbGlk
YXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVmFsaWRhdGVk
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVy
cyhib29sIGxvZ0Vycm9ycykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBp
biBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1l
CisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9n
cmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJh
eXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJv
ci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwor
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1
cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7Cisg
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2Yg
Y29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICgl
ZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlw
ZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2Ft
cGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhj
ZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4
dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVu
aXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0
byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0u
dGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Cit9CisKK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29v
cmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9n
cmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
RHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jZGM3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKQEAgLTAsMCArMSwyMjAgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3Mu
IEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1f
QklOQVJZX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+
CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisv
LyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3Ry
dWN0IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKwor
ICAgIGJvb2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qg
c3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsK
KworICAgIHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBz
YW1wbGVySW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAg
ICAgcmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25z
dCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNv
bnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckluZGV4OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6
IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVn
aXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7Cisg
ICAgICAgICAgICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNv
dW50OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4OworICAgICAgICBpbnQg
c2FtcGxlckluZGV4OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisgICAgICAgIGludCByZWdp
c3RlckNvdW50OworICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7CisgICAgUmVnaXN0ZXJJ
bmZvIHZzOworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2Vs
ZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRp
b24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5n
IG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGluZGV4
OworfTsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBp
cyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNz
IFByb2dyYW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1CaW5hcnkoKTsKKyAgICB+
UHJvZ3JhbUJpbmFyeSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNo
YWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOwor
CisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAg
IGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICBHTGludCBn
ZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlcklu
ZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUg
dHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBs
ZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlv
bihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OworCisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisgICAgR0xpbnQgZ2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24o
KSBjb25zdDsKKyAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGlu
dCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJv
bnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFw
cGx5VW5pZm9ybXMoKTsKKworICAgIGJvb2wgbGluayhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAm
YXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4
U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7
CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENv
dW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0
aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQg
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVN
YXhMZW5ndGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAg
IEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUo
KTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOworICAgIGJvb2wg
aXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0
dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJz
Y29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKKworICAg
IElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFy
ICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKKworICAgIGlu
dCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKHN0ZDo6c3RyaW5nJiBw
aXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua0F0
dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsK
KworICAgIGJvb2wgbGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJs
ZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29s
IGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3Jt
ICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0
aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1uZnYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBs
eVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9y
bTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2
ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAgIHZv
aWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZv
aWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNl
dEluZm9Mb2coKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKwor
ICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRl
eEV4ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5n
LgorICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENv
bnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0
dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhf
VkVSVEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJv
b2wgYWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRl
eHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BT
W01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5
cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJy
YXkgbVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBV
bmlmb3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGlu
dCBtRHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAg
ICBHTGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50
c09yTGluZXNMb2NhdGlvbjsKKworICAgIGNoYXIgKm1JbmZvTG9nOworICAgIGJvb2wgbVZhbGlk
YXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4
ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUo
KSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkp
OwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUg
KnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0g
dGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUp
OworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQor
eworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1h
aW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBS
ZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1
cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlS
ZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94
eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJv
eHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNl
UHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0
aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOwor
fQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsK
LSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhl
aWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUo
KQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZv
cm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMo
KSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4
dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1
YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5V
TEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVu
Y2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBw
cm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7
CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
Cit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsK
KyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3Qz
RFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRS
ZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVu
ZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
VGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5j
aWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1
cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhl
aWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhl
aWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJu
YWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6Omdl
dEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVy
bmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3Jt
YXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5n
ZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVy
biAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkg
Y29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFs
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCht
VGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8v
Ly8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQo
aW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZl
cjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAor
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRh
cmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5j
ZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJT
dG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRl
clRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3Rl
bmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZm
ZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVm
ZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhT
dGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0
aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIx
LDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJE
OworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xv
cmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBj
bGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
MkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5k
ZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwog
Ci0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBw
dWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRl
eHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBH
TGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDog
cHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQp
OworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZv
aWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRo
U3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAg
dmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9y
bWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFw
OwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKQEAg
LTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewogICAgIGludCBpbmRleCA9IDA7
CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAg
ICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsK
LSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAg
ICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4o
YnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHko
aW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUp
Ci0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcs
MTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAgICAgaW50IGluZGV4ID0g
MDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAg
ICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0g
ICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYg
KHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXpl
IC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBz
b3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAg
ICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAt
NDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAog
Y2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFBy
b2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1h
bmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQ
cm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5h
Z2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3ZDIuLjFhZjA4Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNw
cApAQCAtMzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVu
dFRleHR1cmVTZXJpYWwgPSAxOwogCiBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9y
bWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAgICBpZiAoZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShm
b3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgIH0KKyAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAg
ICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBAIC03NSw2ICs3OSwxMCBA
QCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSkKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShE
M0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNoKGZvcm1hdCkKICAgICB7
CiAgICAgICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBAQCBzdGF0aWMgYm9vbCBJ
c1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQg
ZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgRFdP
UkQgZDNkdXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7
CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKKyAgICB9CisgICAg
ZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNk
Zm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisg
ICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CisgICAgfQor
ICAgIHJldHVybiBkM2R1c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkKIHsKICAgICBtV2lkdGgg
PSAwOyAKQEAgLTE1NSw2ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAg
ICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0g
RDNEUE9PTF9TWVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQz
REZvcm1hdCgpOworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBz
aG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAobVdpZHRo
ICE9IDAgJiYgbUhlaWdodCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsyMDMsNyBAQCB2b2lkIElt
YWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxl
Q291bnQ7CiAgICAgICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgp
LT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNo
ICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0
RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZl
bFRvRmV0Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7
CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDcgKzI4OSw3IEBAIHZvaWQg
SW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5CiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UgPSBnZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFj
ZSkKKyAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNl
KQogICAgIHsKICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0yODQsMTAgKzMwOSwxOSBA
QCB2b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFj
ZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogfQogCiAvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFu
Z2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVs
cyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhl
bCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBl
YWNoIGxpbmUuCisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlIGF0IGxvY2tlZC5w
Qml0cyB3aXRoIGxvY2tlZC5QaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KIHZvaWQg
SW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBSRUNUIGxvY2tSZWN0ID0gdHJh
bnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQp
OworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9j
aygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSAtQ29tcHV0
ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwogICAgIGlucHV0
ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwogCkBAIC0yOTcs
MjkgKzMzMSwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1G
b3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAg
bG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydHNT
U0UyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxv
YWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRf
TDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwg
b3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgICAgICBsb2Fk
THVtaW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBs
b2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JVQnl0
ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToK
ICAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAg
ICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMyOCw3ICszNjksNyBA
QCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAg
ICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CkBAIC0zMzcsNyArMzc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAg
c3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBs
b2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyArMzg3LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUxRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9
CkBAIC0zNTYsMTkgKzM5NywxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICB7
CiAgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3Qg
QkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBH
TF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5j
ZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
ICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdC
RmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzc4LDI4ICs0MTks
MzAgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgewogICAgICAgICAgIC8vIGZs
b2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUg
c3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAg
ICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAg
IGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9h
dERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAg
ICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAg
ICB9CisKKyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTEsNyBAQCB2b2lk
IEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
CiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhv
ZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKQEAg
LTQxOSw3ICs0NjIsNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGgKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURh
dGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7CisgICAgX19t
MTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisKKyAgICAgICAgaW50IHg7Cisg
ICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCisgICAgICAgIGZvciAoeCA9IDA7
ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHgg
PCB3aWR0aCk7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoOyB4ICsgNyA8IHdpZHRoOyB4ICs9IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9f
bTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0
IF9fbTEyOGkqPigmc291cmNlW3hdKSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2gg
Ynl0ZSB0byAxNmJpdCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJvCisgICAgICAgICAgICBz
b3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAg
ICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dl
ciAxNmJpdCB0byB6ZXJvCisgICAgICAgICAgICBfX20xMjhpIGxvID0gX21tX3VucGFja2xvX2Vw
aTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1f
dW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworCisgICAgICAgICAgICBfbW1f
c3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCBsbyk7Cisg
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeCArIDRdKSwgaGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1h
aW5kZXIKKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVM
TDsKQEAgLTQyOCw3ICs1MTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaQogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAt
NDM5LDcgKzUyMiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAgICAgfQogfQogCi12b2lk
IEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhh
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1MzEsNyBAQCB2b2lkIElt
YWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAg
ICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDU5LDE3
ICs1NDIsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAgIGNvbnN0IGludCBkZXN0
Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOwor
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7CiAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRp
b24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpegogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00OTcsNyAr
NTc5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAg
ICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CkBAIC01MDgsNyAr
NTkwLDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcsNyArNTk5LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKQEAgLTUyOCwxNyArNjEwLDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkCiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
IGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAyOiA0
OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgCiAgICAg
ICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICB7
CkBAIC01NTcsNyArNjM4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAot
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC01NjYsNyArNjQ3LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2kKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zmxv
YXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewog
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU3Nyw3ICs2
NTgsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01ODYs
NyArNjY3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjc4LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2
b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02MDYsNyArNjg3LDcgQEAg
dm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC02MzgsNyArNzE5
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC02NDcs
NyArNzI4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAg
ICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
CkBAIC02NTgsNyArNzM5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAK
LXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJH
QkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0OCw3IEBAIHZvaWQgSW1h
Z2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAg
ICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAz
ICsgMF07CkBAIC02NzgsNyArNzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICB9
CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6
OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAg
IGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTY4OCw3ICs3NjksNyBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAogICAgICAgICAvLyBNYWtl
IG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwMSw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBAIC03MjgsNyArODA5LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKICAgICAgICAgewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRS
R0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0Nyw3ICs4MjgsNyBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Cisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAg
ICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAt
NzU5LDcgKzg0MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lk
IEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKQEAgLTc2OCw3ICs4NDksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQog
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2MSw3IEBAIHZvaWQgSW1h
Z2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTc4OSwxMiArODcwLDEy
IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKICAgICB9CiB9
CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6Omxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMsMTIgKzg4NCwxMiBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAg
KyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNl
LCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
dm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyNSArODk4LDQzIEBAIHZvaWQg
SW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
ICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KSB7CisgICAgQVNTRVJU
KHhvZmZzZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKworICAg
IFJFQ1QgbG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkg
aW5wdXRQaXRjaCA9IC1Db21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0
LCBtRm9ybWF0KTsKKyAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpICsgaW5wdXRTaXplICsgaW5w
dXRQaXRjaDsKKwogICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAgICAgewogICAgICAgICBj
YXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgbG9hZERYVDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICBsb2FkRFhUM0RhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgIGxvYWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgIGJyZWFrOwogICAg
IH0KKworICAgIHVubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1
bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewpAQCAt
OTQ4LDExICsxMDQ3LDkgQEAgc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKGNvbnN0
IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QKICAgRmxpcENvcHlEWFQx
QmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZERY
VDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9
PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9
PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1
dFBpdGNoICUgOCA9PSAwKTsKQEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERY
VDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKICAgICAgICAgICAgICAgICB7
CkBAIC05OTYsMTEgKzEwOTMsOSBAQCB2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDNEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAg
IEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwg
d2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09
IDApOwogICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwpAQCAtMTAzNSw3ICsxMTMw
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4
ICs9IDQpCiAgICAgICAgICAgICAgICAgewpAQCAtMTA0NiwxMSArMTE0MSw5IEBAIHZvaWQgSW1h
Z2U6OmxvYWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAg
IEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAg
IEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUg
MTYgPT0gMCk7CkBAIC0xMDg1LDcgKzExNzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQog
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MjY3LDkgKzEzNjAsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAgICAgbURpcnR5ID0gdHJ1
ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0
KQotICAgIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpLAotICAgICAgbUQzRFBvb2woZ2V0
RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSksCitUZXh0dXJlU3RvcmFn
ZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLAor
ICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbCh1c2FnZSkpLAogICAg
ICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7CiB9CkBAIC0xMjgwLDcg
KzEzNzMsNyBAQCBUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKIAogYm9vbCBUZXh0
dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0OworICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8
IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7CiB9CiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6
OmlzTWFuYWdlZCgpIGNvbnN0CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAgRDNEUE9PTCBUZXh0dXJl
U3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQb29sOwogfQogCitEV09S
RCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNh
Z2U7Cit9CisKIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAtMTQ1MCwxNSArMTU0OCw3
IEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAg
ICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwg
aW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5s
b2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFn
ZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTU1NywxNiBAQCB2b2lkIFRleHR1
cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCBJbWFnZSAqaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+
bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQ
aXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAg
IGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGlt
YWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMp
ICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2Ut
PmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhl
aWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0K
IAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
CiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdo
dCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAgIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1Qg
bG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5V
TEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zm
c2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9h
ZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAt
MTUyMSwzNyArMTU3NSw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnCiAKIGJvb2wgVGV4dHVy
ZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsg
eG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+
Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gZ2V0SW50ZXJu
YWxGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAgICB1cGRhdGVSZWdpb24u
bGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdodCA9IHhvZmZzZXQgKyB3
aWR0aDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0g
ICAgICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAgICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2Vk
LCAmdXBkYXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aCh3aWR0aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29t
cHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGltYWdlLT5s
b2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQs
IGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdodCwgLWlucHV0UGl0Y2gs
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRj
aCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9j
aygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTY5MywyNyBAQCBib29sIFRleHR1cmU6
OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3Vy
ZmFjZTkgKnNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJl
U3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjpp
c3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0
M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVO
REVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1
ZVNlcmlhbCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CiB9CiAKLVRleHR1
cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1
cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVy
U3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNl
cmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewotICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQs
IGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZv
cm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMg
c2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFu
ZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1h
dCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTY5NSw2
ICsxNzI1LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQogICAgIH0K
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVy
ZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEwLDIwIEBAIEdMc2l6ZWkg
VGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAgICAgICAgIHJldHVybiAw
OwogfQogCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVy
ZTJEOjpnZXRUeXBlKCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRUeXBl
KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQor
ICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1hdCgpOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQz
REZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
OworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJl
ZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIwNDksMTAgQEAgdm9pZCBU
ZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0wKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVy
bmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShk
M2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBo
ZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3Jh
Z2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1JbW11
dGFibGUgPSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsg
bGV2ZWwrKykKQEAgLTIwNzQsOCArMjEwNyw4IEBAIGJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJD
b21wbGV0ZSgpIGNvbnN0CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAot
ICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFs
Rm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNG
bG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0g
R0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkp
IHx8CisgICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewog
ICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdM
X05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAg
ICAgICAgewpAQCAtMjE1Nyw5ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENv
bXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlMkQ6Omlz
Q29tcHJlc3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxl
dmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
KSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOwor
fQorCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKIH0KIAogSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAg
LTIxNzMsMTEgKzIyMTEsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQogICAg
IEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0g
Y3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1J
bWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0
ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFn
ZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVy
ZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7
Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0
dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yMjE3LDkg
KzIyNTUsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAg
ICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgICAgICBH
THNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwogICAgICAgICBHTGlu
dCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9S
TUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEM0RG
T1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0
dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICAg
ICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBk
M2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5V
TEwpCiAgICAgICAgIHsKQEAgLTIyMzIsOCArMjI3MSw4IEBAIHZvaWQgVGV4dHVyZTJEOjpjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFy
Z2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAg
ICAgICB7ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAg
ICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAg
ICAgICAgICAgIH0KIApAQCAtMjMxNSwxMiArMjM1NCwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1
cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCiAKICAgICBpZiAobUNvbG9yYnVm
ZmVyUHJveHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3
IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQp
KTsKKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5l
dyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
KQogewogICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CkBAIC0yMzMzLDYgKzIz
NzQsMzMgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAgCisgICAgLy8gZW5zdXJl
IHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKDApKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0
U3VyZmFjZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3Qz
RFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQorewor
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0
ZVRleHR1cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4
dHVyZQorICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsKIH0KIApA
QCAtMjM1MywxOCArMjQyMSwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAotVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNE
Rk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JE
IHVzYWdlLCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkK
IHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQogICAgIG1U
ZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRl
eHR1cmUoc2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVSVEFS
R0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMg
c2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFu
ZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBp
ZiAoc2l6ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRl
eHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0OCw4IEBAIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAgICAgfQogfQogCisvLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1
YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7
CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjUy
OCwzNiBAQCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0
dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6Omdl
dFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lk
dGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtm
YWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICBy
ZXR1cm4gMDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxl
dmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVs
XS5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJn
ZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0K
IAotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4
dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJ
bnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RG
b3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5
WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0
YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
RDNERk1UX1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
QEAgLTI1ODIsOCArMjY1Nyw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBs
ZXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgoZ2V0
SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0g
R0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFS
RVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAg
IHsKQEAgLTI2NzksOSArMjc1NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3Vi
ZUNvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlQ3Vi
ZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJl
c3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXND
b21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVybiBJc0NvbXByZXNzZWQo
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yNjk0LDEx
ICsyNzY5LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewogICAg
IEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAgR0xpbnQg
bGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVy
VGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0g
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0g
R2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxl
dmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwog
CiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yNzQyLDkgKzI4
MTcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAg
ICB7CiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7
CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAg
ICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Cisg
ICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQo
KTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAgICBuZXdUZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgdHJ1
ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxl
dmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdl
ICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjgzNSw4IEBAIHZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
bmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICAgICAgfQog
CkBAIC0yOTI5LDEwICszMDA1LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xz
aXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplCiAgICAgR0xl
bnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVu
dW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFU
IGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNv
bnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQp
ICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdP
UkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAog
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgc2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZl
bCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwxMiArMzEyNSwxNCBAQCBS
ZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdl
dCkKIAogICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKICAgICB7Ci0gICAgICAg
IG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1
ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9
IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRo
aXMsIHRhcmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVD
dWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQoSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKQEAgLTMwODcsNCArMzE2NSw0IEBAIFRleHR1
cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkK
ICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVy
ZS5oCmluZGV4IDE5YTZlYjUuLjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2IEBAIGNsYXNzIEltYWdl
CiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJrQ2xl
YW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNU
ICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCiAg
ICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFzcyBJbWFnZQogICAgIHZv
aWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9p
ZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRBbHBo
YUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1
bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
QWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5j
ZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lk
IGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JIYWxmRmxv
YXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0
YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRS
R0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2
b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqaW5wdXQpOworICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDVEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2ICsxMjcsOSBAQCBjbGFz
cyBJbWFnZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAgICBIUkVTVUxUIGxvY2so
RDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOworICAgIHZvaWQg
dW5sb2NrKCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNpemVpIG1IZWlnaHQ7CiAg
ICAgR0xlbnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBjbGFzcyBJbWFnZQogY2xh
c3MgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShEV09S
RCB1c2FnZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgYm9vbCBp
c1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7CiAgICAg
RDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKICAg
ICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7
CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2UpOwogCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAgIGNvbnN0IERXT1JEIG1E
M0RVc2FnZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBAQCBjbGFzcyBUZXh0dXJl
IDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CiAg
ICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lk
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0
KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJi
dWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2IEBAIGNsYXNzIFRleHR1
cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09N
UExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRl
eHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdl
ci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmU7
Ci0KICAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwpAQCAtMjU4LDcgKzI1
Miw3IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsK
ICAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVy
ZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQz
REZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdP
UkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJl
U3RvcmFnZTJEKCk7CiAKQEAgLTI4NiwxMSArMjgwLDEyIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1
YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBn
ZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEltYWdl
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1
YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bXByZXNzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3Vy
ZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwogCkBA
IC0zMDksNiArMzAzLDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwog
CisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOwor
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xl
bnVtIHRhcmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZTJEKTsKIApAQCAtMzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1Ymxp
YyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsK
QEAgLTM0MSw3ICszMzksNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogY2xh
c3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1
YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZv
cm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXpl
KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOwogCkBAIC0zNjksMTEg
KzM2NywxMSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2
aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRI
ZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFs
Rm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0
V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0
SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0
SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0z
OTEsNyArMzg5LDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogICAg
IHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHNpemUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzk2LDEwIEBAIGNsYXNzIFRleHR1
cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFj
ZUluZGV4KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAgLTQwNiw3ICs0MDcsNiBA
QCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVh
bCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBi
b29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1
YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBA
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lv
bi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVw
YXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAg
IGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRl
eEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsg
YXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAg
ICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3Jh
bS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFu
c2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50
aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWlu
ZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRh
dGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMK
QEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBl
bmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdM
ZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RW
VF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5
cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0
IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXpl
LXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJ
WEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQz
RFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBn
bDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9h
dDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZv
ciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVs
dFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCmluZGV4IGVlOGVjYTkuLjk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZm
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhh
dCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQu
Citib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
Cit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFy
eSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9S
R0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNh
c2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKwor
ICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxp
ZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Cisg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JB
OgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6Cisg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgor
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6
CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
KyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9S
R0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
ICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
ICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJv
b2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlm
IChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQog
ICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5n
ZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0g
dGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYm
IGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4
NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJl
LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChj
b21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAh
PSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAl
IDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0
ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAg
ICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVT
dWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZl
bCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdl
dCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBn
bENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpA
QCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldElu
dGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7
CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAg
ICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwg
aGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5
IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0
KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVT
dWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05F
LCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1
YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRl
eHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4
dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0
YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiAr
MTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0
YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFy
Z2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19z
dGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFj
aG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9
IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVf
TUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZl
bCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1h
cChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGds
R2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRp
b24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpA
QCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50
IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBO
VUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJ
REFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlz
VmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JB
TV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2
LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xp
bmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1z
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwx
MiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3Jh
bSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2Vk
KCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9j
YXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwg
cGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlv
biwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdl
dFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlm
b3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAg
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dy
YW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZv
cm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0K
IAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFy
eSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZf
RkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBl
PiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5W
QUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRp
b24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAg
ICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRf
T0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1
NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFM
Rl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUw
NDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZv
ciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQs
MjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkK
QEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQg
IT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVw
dGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdM
RV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBO
VUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4
dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAo
bGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9U
RVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkK
KyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09
IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
bjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1
MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9y
bWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0
dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlv
ZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0y
ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291
bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEy
MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIs
NyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFu
cwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2
NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0g
IT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9n
cmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGds
VmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDYzLDYgKzY4MjEsNzkgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJp
bmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSAqYmluYXJ5Rm9y
bWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgs
IGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9ybWF0ID0gMHglMC44cCwg
YmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwg
YmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQgPSBHTF9QUk9HUkFNX0JJ
TkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dy
YW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5n
dGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJpbmFyeUZvcm1hdCA9
IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3Jh
bSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaW5hcnlGb3Jt
YXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFByb2dyYW1C
aW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwg
Z2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0
ZW5zaW9uCkBAIC02NDk5LDcgKzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKgogICAg
ICAgICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEV9LAogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKLSAgICB9Owor
ICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xQ
cm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5
cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKIAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4
dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLnZjcHJvagppbmRleCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCkBAIC00
MDEsNiArNDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5
MSw2ICs0OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXgg
NjU4OWViMS4uNDQxMDVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29t
cHJlc3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShH
TGVudW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8
CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJu
cyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQg
Q29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3
ICszMDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUpCiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2ln
bmVkIGludCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
ICAgICAgICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KEdMZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9y
bWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9v
bCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewot
ICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0g
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JB
OgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0g
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09F
UzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToK
LSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0Ip
OwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBH
TGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1h
dChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAg
ICAgICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9C
R1JBX0VYVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2Ug
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5D
SUxfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDks
OSBAQCBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9B
VF9PRVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJl
dHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsK
KyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdM
X1VOU0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAg
ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBw
b3J0ZWQKICAgICB9CiB9CkBAIC03NjcsNiArNzQxLDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkKICAg
ICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05V
TEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAg
Y2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKQEAg
LTk2NSw2ICs5NDAsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhGb3JtYXQoRDNERk9S
TUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZN
VF9JTlRaKTsKK30KKworYm9vbCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3Jt
YXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKwog
R0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBF
IHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGll
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApp
bmRleCA4ODIzOGRjLi5lZDE1MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkgQEAKIAogI2luY2x1ZGUg
PHN0cmluZz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1B
S0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxM
ID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3Bh
Y2UgZ2wKIHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVp
IHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KQogR0xz
aXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQp
OwogR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCk7
Citib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChH
TGVudW0gdGFyZ2V0KTsKLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSk7CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQpOwogR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAKQEAgLTc5
LDYgKzgyLDggQEAgR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpOwog
R0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKIGJvb2wgSXNG
bG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDE2Rm9y
bWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0aEZvcm1hdChEM0RGT1JN
QVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgc3VyZmFj
ZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVM
VElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBmMzU5NDFjLi41
MWFiYTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjI5OCw2ICsyMjk4LDE1IEBAIElGIChF
TkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9Db2RlR2VuR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvbXBpbGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcApAQCAtMjMxOCwyMCAr
MjMyNyw1MSBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0
LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9sZXhlcl9nbHVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJl
c3Npb25QYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTGV4ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
VmVyc2lvbkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1
aXQuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRl
TGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9WYXJpYWJsZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAw
NWIzYTY2Li40MDFkYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4NDEs
NiArNTg0MSwxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBc
CisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorICAgIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBc
CisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRp
bnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJl
Y3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3RSZWN1cnNpb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4
dGVuc2lvbkJlaGF2aW9yLmggXApAQCAtNTg4NSw4ICs1ODk0LDMzIEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHAgXAorICAgIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL21lbW9yeS5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAg
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorICAgIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBc
CisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAgIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTGV4ZXIuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwKKyAgICBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKyAgICBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKyAgICBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5o
IFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbml6ZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5j
IFwKQEAgLTU5MDAsNiArNTkzNCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTA4LDYg
KzU5NDMsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAor
ICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCisgICAgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01OTE1LDggKzU5NTQsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
SExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMu
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5j
cHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
aCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRp
bC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTBlM2U1Yy4uYzczMWNjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC0zOTQxLDYgKzM5NDEsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdM
PTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21tb24uaCBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKQEAgLTM5NjAsNyArMzk2NCwy
MCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMu
aCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xl
eGVyX2dsdWUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZVBhcnNlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAorICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvcGFyc2VyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXApAQCAtMzk3NSwxNCArMzk5MiwxNyBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9SZW1vdmVUcmVlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9TaEhhbmRsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1i
b2xUYWJsZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmggXApAQCAtMzk5NSw2ICs0MDE1LDEx
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgXApAQCAtNDAx
OSwxMCArNDA0NCwxMiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCi0gICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQwMzIs
NyArNDA1OSwxOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bGV4ZXJfZ2x1ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlUGFyc2VyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
Y3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNw
cCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>
<flag name="commit-queue"
          id="156150"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148608</attachid>
            <date>2012-06-20 11:12:38 -0700</date>
            <delta_ts>2012-06-27 23:53:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1060056</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmZmZWMyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDMgQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MkMyMDNBOTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwMzlDMTU4OTU3RTAwMERF
OUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMkMyMDNBQTE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDM5RDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi87IH07CisJCUEyQzIwM0FCMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQzIwMzlFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCAqLzsgfTsKKwkJQTJDMjAzQUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
QzIwMzlGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07
CisJCUEyQzIwM0FEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTAx
NTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEy
QzIwM0FFMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0ExMTU4OTU3RTAw
MERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTJDMjAzQUYxNTg5
NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0EyMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyQzIwM0IwMTU4OTU3
RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTJDMjAzQTMxNTg5NTdFMDAwREU5QzM3IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyQzIwM0IxMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyQzIwM0E1MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTJDMjAzQjIxNTg5NTdFMDAwREU5QzM3IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E2MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyQzIwM0IzMTU4OTU3RTAwMERFOUMzNyAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNBNzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMkMyMDNCNDE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0E4MTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMkMyMDNEODE1ODk1ODE4MDBERTlD
MzcgLyogbGV4ZXJfZ2x1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMkMyMDNCQTE1ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87
IH07CisJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCQjE1ODk1ODE4MDBE
RTlDMzcgLyogbGV4ZXJfZ2x1ZS5oICovOyB9OworCQlBMkMyMDNEQTE1ODk1ODE4MDBERTlDMzcg
LyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTJDMjAzQkQxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmNwcCAqLzsg
fTsKKwkJQTJDMjAzREIxNTg5NTgxODAwREU5QzM3IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNCRTE1ODk1ODE4MDBE
RTlDMzcgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTJDMjAzREMxNTg5NTgxODAwREU5QzM3
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovOyB9OworCQlBMkMyMDNERDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTJD
MjAzQzAxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTJD
MjAzREUxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDMTE1ODk1ODE4MDBERTlD
MzcgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTJDMjAzREYxNTg5NTgxODAwREU5
QzM3IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzQzIxNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5oICovOyB9OworCQlBMkMyMDNFMDE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEy
QzIwM0UxMTU4OTU4MTgwMERFOUMzNyAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDNDE1ODk1ODE4MDBERTlD
MzcgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMkMyMDNFMzE1ODk1ODE4MDBERTlD
MzcgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTJDMjAzQzcxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTJD
MjAzRTQxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDODE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQu
aCAqLzsgfTsKKwkJQTJDMjAzRTUxNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0M5MTU4OTU4MTgw
MERFOUMzNyAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyQzIwM0U2MTU4OTU4MTgwMERFOUMzNyAv
KiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTJDMjAzQ0ExNTg5NTgxODAwREU5QzM3IC8qIExleGVyLmggKi87IH07CisJCUEyQzIwM0U3MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDQjE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwICov
OyB9OworCQlBMkMyMDNFODE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0NDMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5oICovOyB9OworCQlBMkMyMDNFOTE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9F
eHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJ
CUEyQzIwM0VBMTU4OTU4MTgwMERFOUMzNyAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNDRTE1ODk1ODE4MDBERTlD
MzcgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMkMyMDNFQzE1ODk1ODE4MDBERTlDMzcg
LyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyQzIwM0QwMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuY3BwICov
OyB9OworCQlBMkMyMDNFRDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMTE1ODk1ODE4
MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyQzIwM0VFMTU4OTU4MTgwMERF
OUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTJDMjAzRDIxNTg5NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9u
LmggKi87IH07CisJCUEyQzIwM0VGMTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNEMzE1ODk1ODE4
MDBERTlDMzcgLyogVG9rZW4uY3BwICovOyB9OworCQlBMkMyMDNGMDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyQzIwM0Q0MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbi5oICovOyB9OworCQlBMkMyMDNGMTE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyQzIwM0Q1MTU4OTU4MTgwMERFOUMzNyAvKiBUb2tlbml6
ZXIuY3BwICovOyB9OworCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMkMyMDNENjE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBA
IC02Myw3ICsxMDAsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsK
LQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxMzksNDcgQEAKIAkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEz
QUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUMxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVu
ZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDM5RDE1
ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzOUYxNTg5NTdF
MDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0Ex
MTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0EyMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyQzIwM0EzMTU4OTU3RTAwMERFOUMzNyAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBNzE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNBODE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRp
bnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCOTE1ODk1
ODAyMDBERTlDMzcgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCQTE1
ODk1ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTJDMjAzQkIxNTg5NTgxODAwREU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNCRTE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQkYxNTg5NTgxODAwREU5QzM3IC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
QzIwM0MwMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzExNTg5NTgxODAwREU5QzM3IC8qIERpcmVjdGl2ZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDMjE1ODk1ODE4MDBE
RTlDMzcgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDNzE1ODk1ODE4MDBE
RTlDMzcgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDODE1ODk1ODE4
MDBERTlDMzcgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQzkxNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExl
eGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzQ0ExNTg5NTgxODAw
REU5QzM3IC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NCMTU4OTU4MTgwMERFOUMz
NyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNy
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0NDMTU4OTU4MTgwMERF
OUMzNyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcg
LyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAz
Q0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMkMyMDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QxMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9j
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyQzIwM0QyMTU4OTU4MTgwMERFOUMzNyAv
KiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3Vy
Y2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNEMzE1ODk1
ODE4MDBERTlDMzcgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMyMDNENDE1
ODk1ODE4MDBERTlDMzcgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTJDMjAzRDUxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMkMy
MDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29k
ZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5LDggKzI0Niw2
IEBACiAJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
bmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAw
RjM1QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIy
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI5LDggKzMwNCw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCkBAIC0yNTUsNiArMzI4LDYxIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMkMyMDM5QjE1ODk1N0UwMDBE
RTlDMzcgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyQzIwMzlDMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyQzIwMzlEMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMkMyMDM5RTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTJDMjAzOUYxNTg5NTdFMDAwREU5QzM3IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMkMyMDNBMDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMkMyMDNBMTE1ODk1N0UwMDBERTlDMzcgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTJDMjAzQTIxNTg5NTdFMDAwREU5QzM3IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMkMyMDNBNDE1ODk1N0Uw
MDBERTlDMzcgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMkMyMDNBNTE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTJDMjAzQTYxNTg5NTdFMDAwREU5QzM3IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMkMyMDNBNzE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyQzIwM0E4MTU4
OTU3RTAwMERFOUMzNyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MkMyMDNCQzE1ODk1ODE4MDBERTlDMzcgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCRDE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25v
c3RpY3MuY3BwICovLAorCQkJCUEyQzIwM0JFMTU4OTU4MTgwMERFOUMzNyAvKiBEaWFnbm9zdGlj
cy5oICovLAorCQkJCUEyQzIwM0JGMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLywKKwkJCQlBMkMyMDNDMDE1ODk1ODE4MDBERTlDMzcgLyogRGlyZWN0aXZlSGFuZGxl
ci5oICovLAorCQkJCUEyQzIwM0MxMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovLAorCQkJCUEyQzIwM0MyMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDMzE1ODk1ODE4MDBERTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8sCisJCQkJQTJDMjAzQzQxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLywKKwkJCQlBMkMyMDNDNzE1ODk1ODE4MDBERTlDMzcgLyogSW5wdXQuY3BwICovLAorCQkJ
CUEyQzIwM0M4MTU4OTU4MTgwMERFOUMzNyAvKiBJbnB1dC5oICovLAorCQkJCUEyQzIwM0M5MTU4
OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTJDMjAzQ0ExNTg5NTgxODAwREU5
QzM3IC8qIExleGVyLmggKi8sCisJCQkJQTJDMjAzQ0IxNTg5NTgxODAwREU5QzM3IC8qIE1hY3Jv
LmNwcCAqLywKKwkJCQlBMkMyMDNDQzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uaCAqLywKKwkJ
CQlBMkMyMDNDRDE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJ
QTJDMjAzQ0UxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMkMy
MDNEMDE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMkMyMDNE
MTE1ODk1ODE4MDBERTlDMzcgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTJDMjAzRDIxNTg5
NTgxODAwREU5QzM3IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTJDMjAzRDMxNTg5NTgx
ODAwREU5QzM3IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMkMyMDNENDE1ODk1ODE4MDBERTlDMzcg
LyogVG9rZW4uaCAqLywKKwkJCQlBMkMyMDNENTE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMkMyMDNENjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0yODUsNiArNDEzLDEwIEBACiAJCUZCMzlEMTg1MTIwMEYyNjIwMDA4
OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTJDMjAzQjYxNTg5NTgwMjAwREU5QzM3IC8qIERldGVjdERpc2NvbnRpbnVpdHku
Y3BwICovLAorCQkJCUEyQzIwM0I3MTU4OTU4MDIwMERFOUMzNyAvKiBEZXRlY3REaXNjb250aW51
aXR5LmggKi8sCisJCQkJQTJDMjAzQjgxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi8sCisJCQkJQTJDMjAzQjkxNTg5NTgwMjAwREU5QzM3IC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovLAogCQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMTg4MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCkBA
IC0zMzQsOCArNDY2LDYgQEAKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAot
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCSk7
CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcg
KzUwMCw2IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0
NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3
MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYy
RUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJE
MSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovLAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8q
IEZvckxvb3BVbnJvbGwuY3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBG
b3JMb29wVW5yb2xsLmggKi8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmgg
Ki8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5MCwxMyArNTA5LDE2IEBACiAJCQkJRkIzOUQyMjUxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovLAorCQkJCUEyQzIwMzlCMTU4OTU3RTAwMERFOUMzNyAvKiBkZXBncmFwaCAq
LywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAq
LywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8s
CiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8s
CisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAor
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJ
OTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBGQjEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURDQjAw
MkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1
IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAg
LTQxMCwzMyArNTMyLDQyIEBACiAJCQkJRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFw
LmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAog
CQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJ
CQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJ
CUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEw
QUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYz
NUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8q
IE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVy
LmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8s
CiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUZC
MzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYx
MjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEy
MDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAw
MDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMkMyMDNBMzE1ODk1N0UwMDBERTlDMzcg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyog
U2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2Vh
cmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICov
LAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTJD
MjAzQTQxNTg5NTdFMDAwREU5QzM3IC8qIHRpbWluZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYx
MDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5
IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJ
CQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJF
MTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1
ODQsOSBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMkMyMDNCQTE1ODk1
ODE4MDBERTlDMzcgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8sCisJCQkJQTJDMjAzQkIxNTg5NTgxODAw
REU5QzM3IC8qIGxleGVyX2dsdWUuaCAqLywKKwkJCQlBMkMyMDNCQzE1ODk1ODE4MDBERTlDMzcg
LyogbmV3ICovLAogCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJ
CQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEy
MDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY0MiwyNSBAQAogCQkJ
CTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRl
Y3RSZWN1cnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FBMTU4OTU3RTAwMERFOUMz
NyAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0FDMTU4OTU3
RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMkMyMDNBRTE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMkMyMDNCMDE1ODk1N0UwMDBERTlDMzcgLyogUmVuYW1lRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0IyMTU4OTU3RTAwMERFOUMzNyAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNCNDE1
ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyQzIwM0Q5MTU4OTU4MTgwMERFOUMzNyAvKiBsZXhlcl9nbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMkMyMDNEQjE1ODk1ODE4MDBERTlDMzcgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyQzIwM0REMTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNERjE1ODk1ODE4MDBERTlDMzcgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFMTE1ODk1ODE4MDBE
RTlDMzcgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRTQx
NTg5NTgxODAwREU5QzM3IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMkMyMDNFNjE1
ODk1ODE4MDBERTlDMzcgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIwM0U4MTU4
OTU4MTgwMERFOUMzNyAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTJDMjAzRUExNTg5
NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyQzIw
M0VEMTU4OTU4MTgwMERFOUMzNyAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyQzIwM0VFMTU4OTU4MTgwMERFOUMzNyAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTJDMjAzRjAxNTg5NTgxODAwREU5QzM3IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMkMyMDNGMjE1ODk1ODE4MDBERTlDMzcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTU4OCw3ICs3NDEsNiBAQAogCQkJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NTYsMjQgQEAKIAkJCQlBMEFBQkU0ODEzQUZF
OTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5
NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzQTkxNTg5NTdFMDAwREU5QzM3IC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNBQjE1ODk1N0UwMDBE
RTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MkMyMDNBRDE1ODk1N0UwMDBERTlDMzcgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0FGMTU4OTU3RTAwMERFOUMzNyAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNCMTE1ODk1N0UwMDBERTlD
MzcgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMkMyMDNCMzE1ODk1N0UwMDBERTlDMzcgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRDgxNTg5NTgxODAwREU5QzM3IC8qIGxleGVy
X2dsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzREExNTg5NTgxODAwREU5QzM3IC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RDMTU4OTU4MTgwMERF
OUMzNyAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyQzIwM0RF
MTU4OTU4MTgwMERFOUMzNyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTJDMjAzRTAxNTg5NTgxODAwREU5QzM3IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTJDMjAzRTMxNTg5NTgxODAwREU5QzM3IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyQzIwM0U1MTU4OTU4MTgwMERFOUMzNyAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMkMyMDNFNzE1ODk1ODE4MDBERTlDMzcgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRTkxNTg5NTgxODAwREU5QzM3IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRUMxNTg5NTgxODAwREU5QzM3IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMkMyMDNFRjE1ODk1ODE4MDBERTlD
MzcgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTJDMjAzRjExNTg5NTgxODAwREU5
QzM3IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5n
ZUxvZwppbmRleCA1MDI5MjA3Li4zYWM2ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzI4IEBACisyMDEyLTA2LTE0ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFk
b2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFVwZGF0
ZWQgQU5HTEUgdG8gcjExNDcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaDoKKyAgICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMv
Y29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5
RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dl
YkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChU
Q29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlz
Y29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVj
dExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9v
cERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xv
b3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6
dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gp
OgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoK
KyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFs
aXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlz
aXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgor
ICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpk
ZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAg
ICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6
CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChSZW5h
bWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24pOgor
ICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2ly
Y3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0
cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVu
Zm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6Cisg
ICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUU3VidHJl
ZVBsYWNlaG9sZGVyOjpUU3VidHJlZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVu
dE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChU
SW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFBy
aW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5j
OgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAg
KFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRGlhZ25vc3RpY3Mp
OgorICAgICAgICAoRGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKElucHV0U3JjTGV4ZXIp
OgorICAgICAgICAoQ29weVN5bWJvbE5hbWUpOgorICAgICAgICAobGV4KToKKyAgICAgICAgKExl
eGVySW5wdXRTcmMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQ
YXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0
aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUxpbmUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBh
cnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJy
b3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAg
ICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1
dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAgICAgICAocHApOgorICAgICAgICAo
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6
OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlv
bik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChw
cDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6
On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3Jv
OjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
OgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgor
ICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpl
cXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoK
KyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpU
b2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOgorICAgICAgICAo
cHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChwcDo6VG9rZW46
OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5nU3BhY2UpOgor
ICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5
X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQp
OgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgor
ICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZl
cik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVy
KToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nh
bl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9l
cnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgor
ICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBw
Z2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgor
ICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAg
KHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQp
OgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAg
ICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xs
b2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAg
ICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAg
ICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9j
KToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6Cisg
ICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omxl
eCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
VG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAo
SW5pdFNjYW5uZXJJbnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAg
KFJlYWRUb2tlbik6CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpi
ZWdpbkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAg
ICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBv
cnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICog
c3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMv
bGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRF
eHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6
CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcDoKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpp
c3N1ZVNlcmlhbCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoUHJvZ3Jh
bSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRp
Y0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAg
ICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1Zhcnlpbmdz
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omxp
bmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1
bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGVuZFRvSW5mb0xvZyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cmVzZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0SW5mb0xvZyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VM
b2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6Cisg
ICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJl
Z2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAg
ICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAg
ICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OkNvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0
ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRh
U1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
RmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDFEYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERYVDNEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZERYVDVEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAg
ICAgKFRleHR1cmUpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0
dXJlMkQpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
Y3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aEZvcm1hdCk6CisgICAgICAg
IChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZHgyZXMp
OgorCiAyMDEyLTAzLTI2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgs
MTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlm
CiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYg
KzE0OTIsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09N
UFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXgg
YTNmYzkzNS4uOWE0YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0
IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZF
UlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2Yg
dGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJl
Zml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewog
ICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNI
X1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBz
dWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18i
IHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4u
CisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8v
CisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVz
IHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQt
aW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8v
CisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93
c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0
LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVu
Y3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxp
a2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdD
b2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAg
Ly8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0g
U2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBl
ZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgw
MDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0
YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMg
PSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAg
Ly8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0
aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJh
dGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5z
aXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgor
ICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIg
dGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBT
SF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJp
bnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZwor
ICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9u
bHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8g
LSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBv
cHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBU
aGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dS
QVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDQwOWI2MjIuLjhmMzU5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nyw5ICs0NywzMCBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0
QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0
MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQx
QUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDgg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYw
MzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29u
c3QuY3BwICovOyB9OworCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlB
MjU2MzY2RDE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2MTE1OEE0
RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNTYz
NjZFMTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NjMxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNTYzNjZGMTU4
QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2NTE1OEE0RjIxMDBCRDE0
MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjU2MzY3MDE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2ODE1OEE0RjIyMDBC
RDE0MEMgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY2QTE1OEE0
RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlB
MjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3MjE1OEE0RjlC
MDBCRDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyNTYzNjc3MTU4
QTRGOUQwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2NzQxNThBNEY5QzAwQkQxNDBDIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi87IH07CisJCUEyNTYzNjdBMTU4QTRGQkYwMEJEMTQw
QyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI1NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyNTYzNjdEMTU4QTRGRTgwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwICovOyB9OworCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY3RjE1
OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi87IH07CisJCUEyNTYzNkQxMTU4QTUy
NzMwMEJEMTQwQyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovOyB9OworCQlBMjU2MzZEMjE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjU2MzY4NTE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJ
CUEyNTYzNkQzMTU4QTUyNzMwMEJEMTQwQyAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2ODcxNThBNTA4RjAw
QkQxNDBDIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNTYzNkQ0MTU4QTUyNzMw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjg5MTU4QTUwOEYwMEJEMTQwQyAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDUxNThBNTI3MzAwQkQxNDBDIC8qIElucHV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYz
NjhEMTU4QTUwOEYwMEJEMTQwQyAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNTYzNkQ2MTU4QTUy
NzMwMEJEMTQwQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjU2MzZENzE1OEE1MjczMDBCRDE0MEMgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI1NjM2OTExNThBNTA4RjAwQkQxNDBD
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI1NjM2RDgxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3Jv
RXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9Owor
CQlBMjU2MzZEOTE1OEE1MjczMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNTYzNjk2MTU4QTUwOEYwMEJE
MTQwQyAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OworCQlBMjU2MzZEQTE1OEE1MjczMDBCRDE0
MEMgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI1NjM2OTkxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI1
NjM2REIxNThBNTI3MzAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjU2MzY5QjE1OEE1MDhGMDBCRDE0MEMgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92
ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1
NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJv
bHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQs
NyArMTI1LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9y
eS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURD
QTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9r
ZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDcsNiArMTY3LDUzIEBACiAJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkz
MDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXgg
PSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCUEyNTYzNjVGMTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NjAxNThBNEYyMTAw
QkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NjExNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjYyMTU4QTRGMjEwMEJEMTQw
QyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjMxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2NDE1OEE0RjIx
MDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzY2NTE1OEE0RjIxMDBCRDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY2
NjE1OEE0RjIxMDBCRDE0MEMgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2NjgxNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NTYzNjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkExNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NkIxNThBNEYyMjAwQkQxNDBDIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVp
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3MzE1OEE0RjlCMDBC
RDE0MEMgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNTYzNjc0MTU4QTRGOUMwMEJEMTQwQyAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2NzUxNThBNEY5QzAwQkQxNDBD
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2NzgxNThBNEZCRTAwQkQxNDBDIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3OTE1OEE0RkJFMDBCRDE0MEMgLyogRGV0ZWN0UmVj
dXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0
MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY3QzE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2N0Ux
NThBNTA4NDAwQkQxNDBDIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY3RjE1OEE1MDg0MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBsZXhlcl9nbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODAxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVyX2dsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGV4ZXJfZ2x1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4MzE1OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4NDE1OEE1MDhGMDBCRDE0
MEMgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODUxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNTYzNjg2MTU4QTUwOEYwMEJEMTQwQyAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2ODcxNThBNTA4RjAwQkQxNDBDIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
ODE1OEE1MDhGMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY4OTE1OEE1MDhGMDBCRDE0MEMgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEExNThBNTA4RjAwQkQxNDBD
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY4
RDE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2
MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2OEYx
NThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1NjM2
OTAxNThBNTA4RjAwQkQxNDBDIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjkxMTU4
QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjky
MTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjU2MzY5MzE1OEE1
MDhGMDBCRDE0MEMgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI1NjM2OTQxNThBNTA4RjAwQkQxNDBDIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjU2MzY5NjE1OEE1MDhGMDBCRDE0MEMgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk3MTU4QTUwOEYwMEJEMTQw
QyAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
cHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNTYzNjk4MTU4QTUw
OEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjU2MzY5OTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjU2MzY5QTE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI1
NjM2OUIxNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjU2MzY5QzE1OEE1MDhGMDBCRDE0MEMgLyogVG9rZW5pemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGlicHJlcHJvY2Vzc29yLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnByZXByb2Nlc3Nvci5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIg
LyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
YnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVF
QSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI0NSw2IEBACiAJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFu
c2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUxQkY1
RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJv
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI1NiwxMyBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyNTYzNkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjE3LDYgKzI5
MCwxMCBAQAogCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY4MjE1OEE1
MDhGMDBCRDE0MEMgLyogbmV3ICovLAorCQkJCUEyNTYzNjdFMTU4QTUwODQwMEJEMTQwQyAvKiBs
ZW5ndGhfbGltaXRzLmggKi8sCisJCQkJQTI1NjM2N0YxNThBNTA4NDAwQkQxNDBDIC8qIGxleGVy
X2dsdWUuY3BwICovLAorCQkJCUEyNTYzNjgwMTU4QTUwODQwMEJEMTQwQyAvKiBsZXhlcl9nbHVl
LmggKi8sCiAJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKIAkJCQk5
Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAogCQkJCTU4MEIyQTMxRjdDNTFB
NTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCkBAIC0yNDEsMTUgKzMxOCwyNyBAQAogCQkxOTZE
QjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJv
Y2Vzc29yICovLAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAq
LywKKwkJCQlBMjU2MzY3QjE1OEE0RkU3MDBCRDE0MEMgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwICovLAorCQkJCUEyNTYzNjdDMTU4QTRGRTcwMEJEMTQwQyAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNM
LmNwcCAqLywKIAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJ
CQkJMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBG
RUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRl
cGdyYXBoICovLAorCQkJCUEyNTYzNjcyMTU4QTRGOUIwMEJEMTQwQyAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCAqLywKKwkJCQlBMjU2MzY3MzE1OEE0RjlCMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5oICovLAorCQkJCUEyNTYzNjc4MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovLAorCQkJCUEyNTYzNjc5MTU4QTRGQkUwMEJEMTQwQyAvKiBEZXRlY3RS
ZWN1cnNpb24uaCAqLywKIAkJCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVu
cm9sbC5jcHAgKi8sCiAJCQkJMTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJv
bGwuaCAqLywKKwkJCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAor
CQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJ
M0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNG
MzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVE
M0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5
NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAv
KiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTI1OCwxMSArMzQ3LDE2IEBACiAJCQkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2
MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMz
NzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVFQUZDNjE4QTNC
MzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0Nzcg
LyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGlu
dGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBN
TWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
CiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAogCQkJ
CTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJNDhCNzQw
MkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcxLDIwICszNjUs
MjQgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCiAJ
CQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUwQzkwREY2RDUw
NEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTgg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAogCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUEyNTYzNjY2MTU4QTRGMjEwMEJEMTQwQyAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIy
OEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5
REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFF
MTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUy
MTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIx
IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQlBMjU2MzY2NzE1OEE0RjIyMDBCRDE0MEMgLyogdGltaW5nICovLAogCQkJ
CTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJ
RDUzREREMENERjE1RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5Miwy
OSArMzkwLDE3IEBACiAJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhM
U0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJ
CQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI1NjM2
NzQxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI1
NjM2NzUxNThBNEY5QzAwQkQxNDBDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFF
NzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRF
RjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAy
IC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAyNTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFy
aWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFi
bGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNM
LmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQyRkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAq
LywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1
Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2
RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCi0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2
IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyog
Z2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNs
YW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQu
Y3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJ
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7
CkBAIC0zMjksNiArNDE1LDYxIEBACiAJCQkpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQTI1NjM2NUUxNThBNEYyMTAwQkQxNDBDIC8qIGRlcGdyYXBoICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjU2MzY1RjE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjU2MzY2MDE1OEE0RjIxMDBC
RDE0MEMgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI1NjM2NjExNThBNEYyMTAwQkQx
NDBDIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyNTYzNjYyMTU4QTRG
MjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTI1NjM2NjMx
NThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI1
NjM2NjQxNThBNEYyMTAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJ
CUEyNTYzNjY1MTU4QTRGMjEwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTI1NjM2NjcxNThBNEYyMjAwQkQxNDBDIC8qIHRpbWluZyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2NjgxNThBNEYyMjAw
QkQxNDBDIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNTYz
NjY5MTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8s
CisJCQkJQTI1NjM2NkExNThBNEYyMjAwQkQxNDBDIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCAqLywKKwkJCQlBMjU2MzY2QjE1OEE0RjIyMDBCRDE0MEMgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI1NjM2ODIxNThBNTA4RjAwQkQxNDBDIC8qIG5l
dyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI1NjM2
ODMxNThBNTA4RjAwQkQxNDBDIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjU2MzY4NDE1
OEE1MDhGMDBCRDE0MEMgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjU2MzY4NTE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI1NjM2ODYxNThBNTA4
RjAwQkQxNDBDIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjU2MzY4NzE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjU2MzY4ODE1OEE1MDhG
MDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2ODkxNThBNTA4RjAw
QkQxNDBDIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNTYzNjhBMTU4QTUwOEYw
MEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI1NjM2OEQxNThBNTA4RjAw
QkQxNDBDIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjU2MzY4RTE1OEE1MDhGMDBCRDE0MEMgLyog
SW5wdXQuaCAqLywKKwkJCQlBMjU2MzY4RjE1OEE1MDhGMDBCRDE0MEMgLyogTGV4ZXIuY3BwICov
LAorCQkJCUEyNTYzNjkwMTU4QTUwOEYwMEJEMTQwQyAvKiBMZXhlci5oICovLAorCQkJCUEyNTYz
NjkxMTU4QTUwOEYwMEJEMTQwQyAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI1NjM2OTIxNThBNTA4
RjAwQkQxNDBDIC8qIE1hY3JvLmggKi8sCisJCQkJQTI1NjM2OTMxNThBNTA4RjAwQkQxNDBDIC8q
IE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNTYzNjk0MTU4QTUwOEYwMEJEMTQwQyAvKiBN
YWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI1NjM2OTYxNThBNTA4RjAwQkQxNDBDIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI1NjM2OTcxNThBNTA4RjAwQkQxNDBDIC8qIFByZXByb2Nl
c3Nvci5oICovLAorCQkJCUEyNTYzNjk4MTU4QTUwOEYwMEJEMTQwQyAvKiBTb3VyY2VMb2NhdGlv
bi5oICovLAorCQkJCUEyNTYzNjk5MTU4QTUwOEYwMEJEMTQwQyAvKiBUb2tlbi5jcHAgKi8sCisJ
CQkJQTI1NjM2OUExNThBNTA4RjAwQkQxNDBDIC8qIFRva2VuLmggKi8sCisJCQkJQTI1NjM2OUIx
NThBNTA4RjAwQkQxNDBDIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI1NjM2OUMxNThBNTA4
RjAwQkQxNDBDIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MzQ0LDYgKzQ4NSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRy
YW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0
cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjU2MzZFMDE1OEE1MjczMDBCRDE0MEMgLyogbGli
cHJlcHJvY2Vzc29yLmEgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4Myw2ICs1MjUsMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAq
LzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0
aWMiOwogCQl9OworCQlBMjU2MzZBQjE1OEE1MjczMDBCRDE0MEMgLyogcHJlcHJvY2Vzc29yICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IEEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0g
KAorCQkJCUEyNTYzNkFDMTU4QTUyNzMwMEJEMTQwQyAvKiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NkRDMTU4QTUyNzMwMEJEMTQwQyAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVs
ZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVw
cm9jZXNzb3I7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IEEyNTYzNkUwMTU4QTUyNzMwMEJEMTQwQyAvKiBsaWJwcmVwcm9jZXNzb3Iu
YSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5z
dGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9o
bHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3
ICs1NjcsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4x
IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7
CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU4MCw3IEBACiAJCQkJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4OTJDN0EzNjk1
MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0
NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjU2MzZBQjE1OEE1MjczMDBC
RDE0MEMgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs1OTMsMjkgQEAKIAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENF
ODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZE
ODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NjE1OEE0RjlEMDBCRDE0MEMgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY3NzE1OEE0RjlEMDBCRDE0
MEMgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjdB
MTU4QTRGQkYwMEJEMTQwQyAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI1NjM2N0QxNThBNEZFODAwQkQxNDBDIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworCQlBMjU2MzZBQzE1OEE1MjczMDBCRDE0MEMgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyNTYzNkQxMTU4QTUyNzMwMEJEMTQw
QyAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZEMjE1OEE1Mjcz
MDBCRDE0MEMgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjU2
MzZEMzE1OEE1MjczMDBCRDE0MEMgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNTYzNkQ0MTU4QTUyNzMwMEJEMTQwQyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ1MTU4QTUyNzMwMEJEMTQwQyAvKiBJbnB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzZENjE1OEE1MjczMDBCRDE0MEMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2RDcxNThBNTI3MzAwQkQxNDBDIC8qIE1hY3JvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ4MTU4QTUyNzMwMEJEMTQwQyAvKiBNYWNyb0V4
cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkQ5MTU4QTUyNzMwMEJEMTQwQyAv
KiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI1NjM2REExNThBNTI3MzAw
QkQxNDBDIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNkRCMTU4QTUyNzMw
MEJEMTQwQyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjY3LDEz
IEBACiAJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAogCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjU2MzY2QzE1OEE0RjIyMDBCRDE0MEMgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZEMTU4QTRGMjIwMEJEMTQwQyAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjZF
MTU4QTRGMjIwMEJEMTQwQyAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI1NjM2NkYxNThBNEYyMjAwQkQxNDBDIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYzNjcwMTU4QTRGMjIwMEJEMTQwQyAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNTYz
NjcxMTU4QTRGMjIwMEJEMTQwQyAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjU2MzY4MTE1OEE1MDg1MDBCRDE0MEMgLyogbGV4ZXJfZ2x1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NTIsMzAgQEAKIAkJCX07CiAJCQluYW1lID0g
RGVidWc7CiAJCX07CisJCUEyNTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlBMjU2MzZERjE1OEE1MjczMDBCRDE0MEMgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09S
X0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQki
XCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBwcmVwcm9jZXNzb3I7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2
RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQli
dWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzg4NywxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7
CiAJCX07CisJCUEyNTYzNkREMTU4QTUyNzMwMEJEMTQwQyAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEy
NTYzNkRFMTU4QTUyNzMwMEJEMTQwQyAvKiBEZWJ1ZyAqLywKKwkJCQlBMjU2MzZERjE1OEE1Mjcz
MDBCRDE0MEMgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsK
IAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIu
LjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5n
bGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgor
CiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQyMS4uNjFiYjU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBA
CiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZp
bmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUg
QlVJTERfUkVWSVNJT04gMTE0NwogCiAjZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBN
QUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMg
aXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcg
dG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291
cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZl
YzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdl
YmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFsw
XSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhb
MF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10p
KTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVj
Mihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmds
X21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBt
b2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21v
ZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2Qo
eFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAg
ICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4
KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2
ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25G
cmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZs
b2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZl
YzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
dmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBj
b3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2Vf
ZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9l
bXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3Qo
dmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5l
IHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNl
cnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBm
bG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxl
Y3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNo
YXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
ICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25O
b3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtG
dW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBX
aW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1Niwx
MCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcs
MzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9Owog
CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25B
dGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkg
ZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3Vu
ZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVy
IGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFf
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlv
bkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8y
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07
CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlm
eUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0
YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAg
ICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2Qx
XzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAg
IC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlv
biB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwg
ZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZl
YzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIp
OwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwot
Ci0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBU
RnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlv
bkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZl
YzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7
CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxv
YXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1v
ZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2
ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywg
dmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQp
OwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxv
YXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCmluZGV4IGYyN2NiNzUuLmMwYTY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTAsOCArMTAsMTggQEAKICNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdMQmFz
ZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9XRUJH
TF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNlIHsK
IGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzMyw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0
ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dF
QkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAgICAg
IGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAvLyBG
aXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhlIGFj
dHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzEsMTIgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAg
ICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElP
TlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9v
dCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAg
ICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9y
LWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6
TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1
LDEyICsyNTEsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9k
ZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBU
Q29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBW
YWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwog
ICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVy
cm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFk
ZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGlt
aW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4K
KyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRB
bGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENv
bXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
ZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlv
bnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcg
cmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmlj
dGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30K
Kwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJv
b3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZv
cm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGlu
ZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNp
YyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8g
Z3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BEaXNj
b250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4g
bUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBpZiAo
bUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNlIEVP
cENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAgY2Fz
ZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9vbCBE
ZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9
CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsKKyAg
ICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisKK2Jv
b2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQor
eworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3Jh
ZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVudE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUg
Km5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlv
bkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIg
fHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAgICAg
ICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNvbnNl
cnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAgICAg
ICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRp
bGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRo
ZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNp
dGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0
aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2Rl
ZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBh
IGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3Mg
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVj
dGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3Mg
Zm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERl
dGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3Rl
ZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7
CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAq
bm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFp
bnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAg
Ly8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNl
OTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0
UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWlu
IGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAg
LTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwog
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1
LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90
IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWls
dEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1
MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwg
dHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTcwYjEyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0aGVpciBvcGVyYXRv
ciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGlj
aCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdn
cmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3
YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGlu
ZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjph
ZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kCiAgICAg
Ly8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUx
ID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2Rl
UGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2Rl
MiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9k
ZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0
cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNl
bGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFs
c2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVy
KCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7
CiAKICAgICByZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2Ux
YTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBA
QCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBp
c0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAg
ICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFt
IDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsK
ICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJ
WkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCmluZGV4IDY5YjhjMjYuLmI1ZjM4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAog
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIK
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIy
LDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5m
b2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xk
U2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7
CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4
dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1Rl
eHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7
CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxz
ZTsKQEAgLTc1LDE1ICs4MywyMSBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRl
eHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29w
ZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6
fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBt
VW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7Cisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0
aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRv
IGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIApAQCAtMjgyLDYgKzI5Niw3MiBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxvZDAg
aW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgorICAg
ICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1
cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCAx
IC0gdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
akxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0
KHQueCwgLXQueSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCiAgICAgewpAQCAtODk3LDcgKzk3Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDUzLDkgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSkKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ld
LnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgp
ICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIg
PT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
MDU0LDEyICsxMTM0LDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMTUsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUp
CiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
cmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5v
cm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1k
ZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAg
ICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVv
dXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgo
IiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERG
ZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
bnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjgyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0
YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1V
bmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM5Niw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8
PCAobU91dHB1dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBd
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
YXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9s
LT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAg
ICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIp
XG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzZXF1ZW5jZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RW5kTGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUwLDU0ICsxNDYxLDEwNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNM
b29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9i
aWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFBy
b2ooIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRMb2QiKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzQ2LDEx
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5n
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0
ZW1lbnQKICAgICB7Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENv
bmRpdGlvbigpKTsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSAr
MTc2MywxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2so
KSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9j
aygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4i
OwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2
MTQsMTAgKzE3NzcsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsK
IAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAg
ICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzk0
LDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uICpub2RlKQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3Ap
CisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BE
aXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29w
KG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODQ2LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpu
b2RlKQogCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRCb2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
TGluZSgpKTsKQEAgLTE2OTQsNiArMTg2NCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAor
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzIsNiArMTkwNCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgewor
ICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAg
ICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0
YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTQxLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNjEsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAg
ICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8
PSBNQVhfTE9PUF9JVEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjpt
aW4oMjU1LCBpdGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0g
aW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJh
dGlvbnMpOwogCiAgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGlu
ZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA5
OSw4IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUo
KSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0g
MjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElP
TlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3
ICsyMTk2LDcgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9
ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0
eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJp
bmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsg
YXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjQ5LDggQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMjEsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5n
ICZuYW1lLCBjb25zdCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmll
bGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIg
KyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlT
dHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFt
ZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAg
ICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYyMCwxNCBAQCBUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0
IFRUeXBlICZ0eXBlKQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUo
KS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgy
NGJjMDcuLmVhMjhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsK
LWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBU
U3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmlu
ZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3Rh
dGljIFRTdHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3Qg
VFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUp
OwogICAgIGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJv
b2wgaGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRw
dXRUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0
LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNp
ZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2Vz
VGV4dHVyZUN1YmU7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pM
b2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKIAogICAgIGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1l
cworCisgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRw
dXRMb2QwRnVuY3Rpb247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAppbmRleCA0MzFmOGQxLi5mMTI3NDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDcgKzUyLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29t
cFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTExNCwyMCArMTE0LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0
W2ldICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxl
Z2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTQ5LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNp
emUsIFRNCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgp
ICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNv
bXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsK
ICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE2LDYgKzIxNiwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bG9jLAogICAgICsrbnVtRXJyb3JzOwogfQogCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorewor
ICAgIGVycm9yKGxvYywgcmVhc29uLCB0b2tlbiwgIiVzIiwgIiIpOworfQorCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgewpAQCAt
MjI5LDYgKzIzNCwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsCiAgICAgdmFfZW5kKG1hcmtlcik7CiB9CiAKK3ZvaWQgVFBhcnNlQ29udGV4dDo6d2Fybmlu
ZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbikK
K3sKKyAgICB3YXJuaW5nKGxvYywgcmVhc29uLCB0b2tlbiwgIiVzIiwgIiIpOworfQorCiAvLwog
Ly8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdv
cmsuCiAvLwpAQCAtMjY1LDEzICsyNzUsMTMgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNp
b25FcnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHkKICAg
ICBzd2l0Y2goIHR5cGUgKXsKICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICBpZiggcHJlY2lz
aW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVj
aXNpb24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJv
ciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiVzIiwg
IiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVmaW5l
ZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIChp
bnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBz
cGVjaWZpZWQgKGludCkiLCAiIiwgIiVzIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzEzLDcgKzMyMyw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJ
bnRlcm1UeXBlZCogbm9kCiAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2
ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGlj
YXRlIGNvbXBvbmVudHMiLCBvcCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMjQsNyArMzM0LDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVElu
dGVybVR5cGVkKiBub2QKICAgICAgICAgZGVmYXVsdDogCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIs
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3ApOwogCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM2NCw3ICszNzQsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50
ZXJtVHlwZWQqIG5vZAogICAgIH0KIAogICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9k
ZSA9PSAwICYmIHN5bU5vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3ApOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM5OCw3ICs0
MDgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQq
IG5vZGUpCiAgICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBl
eHByZXNzaW9uIHJlcXVpcmVkIiwgIiIsICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJjb25zdGFudCBleHByZXNzaW9uIHJlcXVpcmVkIiwgIiIpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00MTQsNyArNDI0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JD
aGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQogICAgIGlmIChub2Rl
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAx
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJp
bnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKG5vZGUt
PmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtNDMwLDcgKzQ0MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
Z2xvYmFsRXJyb3JDaGVjayhpbnQgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRva2Vu
KQogICAgIGlmIChnbG9iYWwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKGxp
bmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4sICIiKTsKKyAgICBlcnJv
cihsaW5lLCAib25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtNDQ5LDI0ICs0NTksMjYgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpy
ZXNlcnZlZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpCiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc2VydmVkRXJyTXNnID0gInJlc2VydmVkIGJ1aWx0LWlu
IG5hbWUiOwogICAgIGlmICghc3ltYm9sVGFibGUuYXRCdWlsdEluTGV2ZWwoKSkgewogICAgICAg
ICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDMsICJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIsICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKSB7
CisgICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iLCAiIik7CisgICAg
ICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
ZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIpOworICAgICAgICAg
ICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNoYWRl
clNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBpZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwg
ImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJjc3NfIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlkZW50aWZpZXIuZmluZCgiX18iKSAhPSBUU3RyaW5n
OjpucG9zKSB7Ci0gICAgICAgICAgICAvL2Vycm9yKGxpbmUsICJUd28gY29uc2VjdXRpdmUgdW5k
ZXJzY29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiIsIGlkZW50aWZpZXIuY19zdHIo
KSwgIiIsICIiKTsKLSAgICAgICAgICAgIC8vcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsICJUd28gY29uc2VjdXRpdmUgdW5kZXJz
Y29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiIsIGxpbmUpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlkZW50aWZpZXJzIGNvbnRh
aW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIChfXykgYXJlIHJlc2VydmVkIGFzIHBv
c3NpYmxlIGZ1dHVyZSBrZXl3b3JkcyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTI3LDUxICs1MzksNTEgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRl
cm1Ob2RlKiBub2RlLCBURnVuY3Rpb24KICAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNv
bnN0KTsKIAogICAgIGlmICh0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0QXJyYXlTaXplKCkg
IT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJh
eSBjb25zdHJ1Y3RvciBuZWVkcyBvbmUgYXJndW1lbnQgcGVyIGFycmF5IGVsZW1lbnQiLCAiY29u
c3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBjb25zdHJ1Y3RvciBu
ZWVkcyBvbmUgYXJndW1lbnQgcGVyIGFycmF5IGVsZW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGFycmF5QXJnICYmIG9wICE9IEVP
cENvbnN0cnVjdFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIGZy
b20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlm
IChtYXRyaXhJbk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7CiAgICAgICAgIGlmIChmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCkgIT0gMSkgewotICAgICAgICAgIGVycm9yKGxpbmUsICJjb25z
dHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50Iiwg
ImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rpbmcg
bWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVj
dG9yIik7CiAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAob3ZlckZ1bGwpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInRvbyBtYW55IGFyZ3VtZW50cyIs
ICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInRvbyBtYW55IGFyZ3Vt
ZW50cyIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CiAgICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYm
IGludCh0eXBlLT5nZXRTdHJ1Y3QoKS0+c2l6ZSgpKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50
KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3Rv
ciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxk
cyIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBp
ZiAoIXR5cGUtPmlzTWF0cml4KCkgfHwgIW1hdHJpeEluTWF0cml4KSB7CiAgICAgICAgIGlmICgo
b3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0
T2JqZWN0U2l6ZSgpKSB8fAogICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92
aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFRJbnRlcm1UeXBlZCAqdHlwZWQgPSBu
b2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogMDsKICAgICBpZiAodHlwZWQgPT0gMCkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5
cGUiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rv
ciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiBJc1NhbXBsZXIodHlwZWQtPmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodHlwZWQtPmdldEJhc2ljVHlw
ZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEg
dm9pZCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBj
b252ZXJ0IGEgdm9pZCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTU4NSw3ICs1OTcsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogYm9vbCBU
UGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHB1YlR5cGUpCiB7CiAgICAgaWYgKHB1YlR5cGUu
dHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0
eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogCkBAIC01OTksNyArNjExLDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgVFAKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKIHsKICAgICBpZiAodHlwZS0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwgdHlwZS0+aXNNYXRyaXgoKSB8
fCB0eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJl
c3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBl
eHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAog
CkBAIC02MTMsNyArNjI1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQogYm9vbCBUUGFyc2VDb250ZXh0Ojpi
b29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQogewogICAg
IGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4
IHx8IChwVHlwZS5zaXplID4gMSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhw
cmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFu
IGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
CiAKQEAgLTYzMSw3ICs2NDMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUudHlw
ZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlwZS50
eXBlKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBU
eXBlLnR5cGUpKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NDMsNyArNjU1
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUKIHsKICAgICBpZiAoKHBUeXBlLnF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwg
cFR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgJiYKICAgICAgICAgcFR5cGUudHlwZSA9
PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGgg
YSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdl
dFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTY1OCw3ICs2NzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmll
ciwgYwogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZx
SW5PdXQpICYmIAogICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0
ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICBlcnJvcihsaW5l
LCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0
cmluZygpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0
cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTY5MCwxNCArNzAyLDE0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNp
emUpCiB7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhwci0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CiAgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpICE9IEVidEludCkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBt
dXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVz
c2lvbiIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgc2l6ZSA9IGNv
bnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKIAogICAgIGlmIChz
aXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6
ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKICAgICAgICAgc2l6ZSA9IDE7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcxMyw3ICs3MjUsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhw
ciwgaW50JiBzaXplKQogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiB7CiAgICAgaWYgKCh0eXBlLnF1YWxpZmll
ciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmll
ciIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwg
VFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC03MzEsNyArNzQzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojph
cnJheVR5cGVFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogICAgIC8vIENh
biB0aGUgdHlwZSBiZSBhbiBhcnJheT8KICAgICAvLwogICAgIGlmICh0eXBlLmFycmF5KSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5
cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0
Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC03NjcsMzQgKzc3OSwzNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVj
ayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdAogCiAgICAgICAg
IGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBkZWxl
dGUgdmFyaWFibGU7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5z
ZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50
aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50
aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAg
ICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKICAgICAg
ICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJy
YXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlT
aXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBh
cnJheSB3aXRoIHNpemUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIu
Y19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUo
dHlwZSkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJh
eSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJl
bnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogCiAgICAgICAgIFRUeXBlKiB0ID0gdmFyaWFibGUtPmdldEFycmF5SW5mb3Jt
YXRpb25UeXBlKCk7CiAgICAgICAgIHdoaWxlICh0ICE9IDApIHsKICAgICAgICAgICAgIGlmICh0
LT5nZXRNYXhBcnJheVNpemUoKSA+IHR5cGUuYXJyYXlTaXplKSB7Ci0gICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJoaWdoZXIgaW5kZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0aGUgYXJyYXkiLCBpZGVudGlm
aWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdC0+c2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKQEAgLTgxNiw3
ICs4MjgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3lt
Ym9sICpub2RlLCBUVHlwZSogdHlwZSwgaW50IHNpemUsCiAgICAgYm9vbCBidWlsdEluID0gZmFs
c2U7CiAgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRTeW1i
b2woKSwgJmJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBlcnJvcihs
aW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2Rl
LT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwpA
QCAtODM1LDcgKzg0Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJ
bnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKIAogICAgICAgICBpbnQg
ZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0Q29u
c3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CiAgICAgICAgIGlmIChmcmFnRGF0YVZhbHVlIDw9
IHNpemUpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBj
YW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMi
LCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiJXMiLCAiZ2xfRnJhZ0Rh
dGEgY2FuIG9ubHkgaGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZm
ZXJzIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTg3
MCw3ICs4ODIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2so
aW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaQogICAgIC8vCiAgICAgaWYgKHR5
cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZx
VGVtcG9yYXJ5OwotICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVy
ICdjb25zdCcgbXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVz
dCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtODkxLDcgKzkwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9u
SW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
CiAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7
CiAKICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICBl
cnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAi
Iik7CisgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIlcyIsIiIpOwogICAgICAgICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAg
IHZhcmlhYmxlID0gMDsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05MDYsMTEgKzkxOCwxMSBA
QCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9y
Q2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVh
bGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25z
dCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJx
dWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBu
b3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVhbGlmaWVy
ID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7CisgICAgICAg
IGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJT
dHJpbmcocXVhbGlmaWVyKSwgIiVzIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVy
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTcwLDEyICs5ODIsMTIgQEAg
Y29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRG
dW5jdGlvbiogY2FsbCwgYm9vbCAqYnUKICAgICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91
bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
bm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5j
X3N0cigpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKCFzeW1ib2wtPmlz
RnVuY3Rpb24oKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3Rl
ZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJm
dW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEwMDMsNyArMTAxNSw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1CiAgICAgICAgIC8vCiAgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgm
aWRlbnRpZmllciwgdHlwZSk7CiAgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFy
aWFibGUpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFi
bGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVk
ZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVz
ZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKICAgICAgICAgICAgIC8vIHBvcCB3
aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5CkBAIC0xMDE1LDcgKzEwMjcsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdQogICAgIC8vCiAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwogICAgIGlmICgocXVhbGlmaWVyICE9IEV2
cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0g
RXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhp
cyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0
cmluZygpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhp
cyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0
cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vCkBAIC0xMDMwLDcg
KzEwNDIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNl
TG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogICAgICAgICB9CiAgICAgICAgIGlm
ICh0eXBlICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgIGVycm9yKGxp
bmUsICIgbm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7
CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmco
KSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEyMzQsMTQg
KzEyNDYsMTQgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdElu
KGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFQKICAgICAgICAgYnJlYWs7CiAKICAg
ICBkZWZhdWx0OgotICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9u
IiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlv
biIsICIiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBu
b2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKICAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEzMDEsNyArMTMxMyw3IEBAIFRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMmIGZpZWxk
cywgVEludGVybVR5CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7IC8vIFRoZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBh
Z2dyZWdhdGUgbm9kZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVy
cm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2
ZWN0b3IiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTM0NSw3ICsxMzU3LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAg
IGludCBzaXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7
CiAgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5p
b25BcnJheVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRo
ZSBtYXRyaXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zm
c2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0xMzgwLDcgKzEzOTIsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2Rl
LCBUUwogICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CiAgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5k
ZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJh
eSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xNDE2LDcgKzE0MjgsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbgogCiAgICAgICAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3Rh
bmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxs
IGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAgICB9IGVsc2UgewotICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3Ii
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVj
dHVyZSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xNDMzLDcgKzE0NDUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVj
bGFyYXRpb24oaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpCiAgICAgLy8gVGhl
eSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhlciwgYnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHRo
aXMgaGVyZQogICAgIC8vIHNvIHdlIGRvbid0IHJlbHkgb24gdGhlIEdMU0wgY29tcGlsZXIgdG8g
Y2F0Y2ggaXQuCiAgICAgaWYgKHN0cnVjdE5lc3RpbmdMZXZlbCA+IDEpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2Vk
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0
aW9ucyBhcmUgbm90IGFsbG93ZWQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0xNDUzLDcgKzE0NjUsNyBAQCBjb25zdCBpbnQga1dlYkdMTWF4U3RydWN0TmVzdGluZyA9IDQ7
CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soVFNvdXJjZUxv
YyBsaW5lLCBjb25zdCBUVHlwZSYgZmllbGRUeXBlKQogewotICAgIGlmIChzaGFkZXJTcGVjICE9
IFNIX1dFQkdMX1NQRUMpIHsKKyAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykp
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTQ5MCw4ICsxNTAyLDkgQEAg
aW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQp
KQogICAgICAgICByZXR1cm4gMTsKIAotICAgIGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBs
ZW5ndGgsIGNvbnRleHQpOwotICAgIGludCBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7
CisgICAgaW50IGVycm9yID0gZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29u
dGV4dCk7CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNv
bnRleHQpOwogCiAgICAgZ2xzbGFuZ19maW5hbGl6ZShjb250ZXh0KTsKICAgICBGaW5hbGl6ZVBy
ZXByb2Nlc3NvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuaAppbmRleCAzZTA1NzYzLi44ZGZiNmYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaApAQCAtMTEsNiAr
MTEsMTAgQEAKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1N5bWJvbFRhYmxlLmgiCiAKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgX19h
dHRyaWJ1dGVfXyh4KQorI2VuZGlmCisKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29s
IHdob2xlUm93OwogICAgIGJvb2wgd2hvbGVDb2w7CkBAIC03Myw5ICs3NywxMyBAQCBzdHJ1Y3Qg
VFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAogICAgIHZvaWQgZXJyb3IoVFNv
dXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikgCisgICAgICAgICAgICAgICBf
X2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOworICAgIHZvaWQg
ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4pOwogICAgIHZvaWQgd2FybmluZyhUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciogcmVhc29u
LCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJ
bmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9G
b3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAo
X19wcmludGZfXywgNSwgNikpKTsKKyAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBsb2MsIGNv
bnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCmluZGV4IGE2MDBjMDIuLjllZjRmNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBAIC0xNTgs
MTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQg
Y2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjbwogCiAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBo
ZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2Vy
dE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxu
IiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQ
b29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAg
ICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAgICAgICAg
ICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxv
Y2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVv
Zihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBh
dCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwog
I2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3Vh
cmQgYmxvY2siKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9SZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1JlbmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2ZkYjQwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5B
TUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLwor
Ly8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkg
Y2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9s
ZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1l
KG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1l
KSB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+
Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5j
dGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAg
ICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5h
bWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBAIC0yNCw2
ICsyNCwxMyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKK2NsYXNz
IFREZXBlbmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkg
c3BlY3MgdGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1Mg
U2hhZGVycyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3Bl
Yyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5l
ZCB0byB0aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBj
bGVhclJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24g
aXMgZGV0ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3Qp
OworICAgIC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5n
IHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50
ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIg
ZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRl
ZCBpbiBHTFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRp
b25zKFRJbnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBU
cmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50
ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBh
c3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3Mu
CisgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBi
b29sIG91dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2Vz
IG5vdCB1c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBj
b250cm9sIAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBl
bmQgb24gdGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRp
bWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAgICAgLy8g
R2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0
IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3Bw
CmluZGV4IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0
aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAgaW50IGFj
dGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAg
ICBBU1NFUlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFj
dGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8u
bmFtZS5jX3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2Fj
dGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUp
IHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAg
ICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAg
ICAgICAgaW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsK
ICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBl
ZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBl
ZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVb
bWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmluZGV4IGVk
YmVhOTkuLjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJj
b21waWxlci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUg
PGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBU
VHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcg
KzU3LDcgQEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFt
ZSkKICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKLSAg
ICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdbJzsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnXSc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4NWU2Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
ZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0aGUgc2Vs
ZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1ZGUgImNv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
LSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5m
b2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExT
TCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExT
TCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNlbGVjdDo6
dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRl
bXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1wb3JhcnlJ
bmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlmIChub2Rl
LT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1UZW1wb3Jh
cnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsK
LSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRl
bXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xu
IjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkg
PDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2Rl
LT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8
ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5mb2xkU2Vs
ZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGlu
dCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAg
IH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICBu
b2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG5v
ZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24o
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5k
SW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6OmdldE5l
eHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOwotfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNl
bGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZv
bGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVyYXRv
ciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xE
U0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIu
aCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBVbmZvbGRT
ZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xk
U2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwot
Ci0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGludCBnZXRO
ZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29udGV4dCAm
bUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAgICBpbnQg
bVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VM
RUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3MiBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVy
c2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRl
bWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdo
aWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9y
aWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9ydENpcmN1
aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNM
ICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNM
KQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXgg
PSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbVRlbXBv
cmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgc3dp
dGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAg
ICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1
bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisgICAgICAg
IC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZigh
cykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5k
ZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAg
ICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0
cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwg
ImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0
KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0
IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8
PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAg
ICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hpY2gg
dW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwKKyAgICAg
ICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlm
KHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUlu
ZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAg
ICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBp
ICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91
dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8
ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0
KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0
IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8
PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1
dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRv
ICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+dXNlc1Rl
cm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7
CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUo
KSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAg
IG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2Nr
KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAi
OworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3Vp
dDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpbnQg
cmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgp
KQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9
CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlmIChub2Rl
LT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCkt
PnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZElu
ZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJjdWl0Ojpn
ZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsK
K30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBv
dXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmluZSBDT01Q
SUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBz
aAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0Q2lyY3Vp
dChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKworICAg
IHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRUZW1wb3Jh
cnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsK
KyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5
SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0w
LDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcx
OCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERl
cGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkK
K3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7
Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3Ig
KFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4o
KTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFw
aE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitU
R3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhB
cmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxs
LCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7Cisg
ICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlv
bkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdy
YXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hf
YmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0
aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsK
K30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChU
SW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsK
KworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1T
eW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsK
KyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3lt
Ym9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMu
cHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5
bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWly
KTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0
aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4K
KyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAg
ICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7Cisg
ICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVy
bVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJl
dHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0
ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9
IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9v
cCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sK
KyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50
ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAg
cmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRP
cFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAg
IHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3Ry
aW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lf
R1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKwor
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2lu
Y2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9k
ZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xh
c3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9v
cDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRH
cmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2Rl
Kj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4g
VEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNh
bGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRl
cGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6Cisg
ICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9Cisg
ICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAg
ICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBk
ZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3Mg
VEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3Jh
cGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5v
ZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMu
aW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNl
dCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJn
dW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1
bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1
cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51
bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9p
ZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citw
cml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1
bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3Jh
cGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUo
aW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgp
IHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkg
Y29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9s
IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1i
b2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJt
U3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRB
c1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0
YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlv
biA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVElu
dGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0
aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVElu
dGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJt
Tm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8v
IEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBo
TG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRl
cm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9v
cCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBU
R3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBo
TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGlu
dGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAg
IGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJu
IGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BT
dHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBn
cmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8g
VGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0
aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3Vs
ZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0
aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5
IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVy
IGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQor
Ly8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVu
Y3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigp
OyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rp
b25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3Jh
cGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rp
b25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3Jl
YXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7Cisg
ICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1T
eW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxl
Y3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50
ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2Fs
T3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRl
ZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3Rk
OjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5v
ZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJv
bHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOwor
ICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNp
bmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAor
Ly8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNz
IGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1
c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitj
bGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rp
b24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNh
bE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQor
ICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1l
bnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlz
aXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7
IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUq
IG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5k
KCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNp
dGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODcwYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApAQCAtMCwwICsxLDIzNCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmgiCisKK1REZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFp
bmVyOjpUU3VidHJlZVBsYWNlaG9sZGVyCisgICAgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRM
ZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtMZWZ0U3VidHJlZTsKKworVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OlRTdWJ0cmVlUGxhY2Vob2xkZXIK
KyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6
a1JpZ2h0U3VidHJlZTsKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVElu
dGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7
Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgc3dpdGNo
IChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjog
dmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1B
Z2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5v
dCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFnZ3JlZ2F0
ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZpc2l0QWdn
cmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4gZXhwcmVz
c2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorLy8g
InggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0
aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFw
aC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAvLyBSdW4g
dGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3VtZW50TnVt
YmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1
bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAgICAgaXRl
ciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJndW1lbnRO
dW1iZXIpCisgICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7
CisgICAgICAgIGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBpZiAo
VFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsK
KyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJn
dW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAgICAgICBj
b25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7
CisgICAgICAgICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRo
aXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9s
cyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4K
KyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEg
ZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlv
biBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1
bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50Cisg
ICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNh
bGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsK
K30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJl
bihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVybVNlcXVl
bmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3Io
VEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsg
aXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEludGVybU5v
ZGUqIGludGVybUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRoaXMgc3lt
Ym9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNz
aWdubWVudCBvciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgorICAg
IFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1T
eW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisKKyAgICAv
LyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4g
YXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBzeW1ib2wg
d2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBt
TGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9CisgICAgICAgICZUTGVmdG1vc3RTeW1ib2xNYWludGFp
bmVyOjprUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9wKCk7Cisg
ICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKworYm9vbCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1CaW5hcnkt
PmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmluYXJ5LT5t
b2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkpOwor
ICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9yKQor
ICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAgICAgICAg
dmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVEludGVy
bUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGludGVybUxl
ZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1MZWZ0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0gTlVM
TDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVy
KHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXI6OmtMZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsK
KworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRo
aXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAv
LyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUg
YSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmVExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a0xlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIEFTU0VS
VChsZWZ0bW9zdFN5bWJvbCAhPSAmVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6a1JpZ2h0U3Vi
dHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdo
dCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9z
dFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9z
dFN5bWJvbE1haW50YWluZXI6OmtSaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2Rl
U2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMsIGxlZnRt
b3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2Yg
dGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBzeW1ib2xz
IHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50LgorICAg
IC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBkZXBlbmRl
bmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFs
bHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25tZW50ICgi
YiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIgdmlzaXRB
c3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxsCisgICAg
Ly8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldExl
ZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2RlU2V0TWFp
bnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdyYXBoLT5j
cmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0
aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtTG9naWNh
bE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXI6OmtS
aWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAg
fQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVu
KFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBp
bnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQt
PnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBp
bnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgVExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6a1JpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlz
KTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7Cisg
ICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rpb24tPmdl
dENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRh
aW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRzLmdl
dFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG1H
cmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAgICBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0aW9uKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1ZUJsb2Nr
ID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtVHJ1ZUJs
b2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtRmFsc2VC
bG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBpbnRlcm1G
YWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1Db25kaXRp
b24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50
YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9u
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25O
b2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoTG9vcCog
bG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAgIGNvbm5l
Y3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGludGVybUxv
b3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+Z2V0RXhw
cmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlzKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpj
b25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5vZGVTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rlcy0+ZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJlbnROb2Rl
ID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5vZGUpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzI5ZTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTg0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2RlZmluZSBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5jbHVkZSAi
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVhdGVzIGEg
ZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBl
dGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3Jh
cGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6c3Rh
Y2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdy
YXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisgICAgLy8KKyAgICAvLyBGb3IgY29s
bGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBl
dGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisgICAg
Ly8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0
IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5vZGVzLgorICAgIC8vCisgICAgY2xh
c3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFN0YWNrKCkg
e307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAgICAgLy8g
VGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBS
ZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJlbnROb2Rl
U2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5v
ZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BT
ZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0
cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNldCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAg
ICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNv
bnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQg
YmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAgICAgICAg
dm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9k
ZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0g
bm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKworICAgICAgICAg
ICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVFBhcmVudE5vZGVT
ZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgICAgIG5ld1RvcFNl
dC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAgICAgLy8g
VGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlz
aXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVu
dCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ug
c3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUq
IG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2Vy
dChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcG9w
U2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgc3RkOjpz
dGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAgICAgVFBh
cmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBp
bnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRp
YXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5k
IHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNl
dHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsg
c2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYg
c2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNz
IHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRo
ZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNl
dCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4K
KyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2Rl
U2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01h
aW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBp
bnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wg
d2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNzaWdubWVudC4KKyAgICAvLyBJdCB3
aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50
aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5k
ZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0
IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCisg
ICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwg
cmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtSaWdodFN1
YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2Ug
YXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5bWJvbC4KKyAgICAvLworICAgIGNs
YXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgY2xh
c3MgVFN1YnRyZWVQbGFjZWhvbGRlciA6IHB1YmxpYyBUR3JhcGhTeW1ib2wgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBUU3VidHJlZVBsYWNlaG9sZGVyKCkgOiBUR3JhcGhTeW1ib2wo
TlVMTCkge30KKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgVFN1YnRyZWVQbGFjZWhvbGRl
ciBrTGVmdFN1YnRyZWU7CisgICAgICAgIHN0YXRpYyBUU3VidHJlZVBsYWNlaG9sZGVyIGtSaWdo
dFN1YnRyZWU7CisKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVwZW5kZW5j
eUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVFN1YnRyZWVQbGFjZWhvbGRlciYgc3VidHJlZSkKKyAg
ICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5
bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7CisgICAg
ICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAgICBsZWZ0
bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+VExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsK
KyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRt
b3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAgIH07
CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkK
KyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAg
LCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25uZWN0TXVs
dGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5vZGUq
IG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSop
OworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlz
aXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9u
RGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBURGVwZW5kZW5jeUdy
YXBoKiBtR3JhcGg7CisgICAgVE5vZGVTZXRTdGFjayBtTm9kZVNldHM7CisgICAgVFN5bWJvbFN0
YWNrIG1MZWZ0bW9zdFN5bWJvbHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBI
X0RFUEVOREVOQ1lfR1JBUEhfQlVJTERFUl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzQ4
OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcApAQCAtMCwwICsxLDY1IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oIgorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEluZGVudGF0
aW9uKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldERlcHRoKCk7ICsraSkKKyAgICAg
ICAgbVNpbmsgPDwgIiAgIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNp
dEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgb3V0cHV0SW5kZW50
YXRpb24oKTsKKyAgICBtU2luayA8PCAiYXJndW1lbnQgIiA8PCBwYXJhbWV0ZXItPmdldEFyZ3Vt
ZW50TnVtYmVyKCkgPDwgIiBvZiBjYWxsIHRvICIKKyAgICAgICAgICA8PCBwYXJhbWV0ZXItPmdl
dEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbChUR3JhcGhGdW5jdGlvbkNhbGwq
IGZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8
ICJmdW5jdGlvbiBjYWxsICIgPDwgIGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxs
KCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKQoreworICAgIG91dHB1dEluZGVudGF0
aW9uKCk7CisgICAgbVNpbmsgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1ib2woKS0+Z2V0U3ltYm9s
KCkgPDwgIiAoc3ltYm9sIGlkOiAiCisgICAgICAgICAgPDwgc3ltYm9sLT5nZXRJbnRlcm1TeW1i
b2woKS0+Z2V0SWQoKSA8PCAiKVxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBvdXRw
dXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJzZWxlY3Rpb25cbiI7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7Cisg
ICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAibG9vcCBjb25kaXRpb25cbiI7
Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3AoVEdyYXBo
TG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBt
U2luayA8PCAibG9naWNhbCAiIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKSA8PCAiXG4iOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6Om91dHB1dEFsbFNwYW5uaW5nVHJlZXMo
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbVNpbmsgPDwgIlxuIjsKKworICAgIGZv
ciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luKCk7
IGl0ZXIgIT0gZ3JhcGguZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUq
IHN5bWJvbCA9ICppdGVyOworICAgICAgICBtU2luayA8PCAiLS0tIERlcGVuZGVuY3kgZ3JhcGgg
c3Bhbm5pbmcgdHJlZSAtLS1cbiI7CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAgICAgICBz
eW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtU2luayA8PCAiXG4iOworICAgIH0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JB
UEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKwor
Y2xhc3MgVERlcGVuZGVuY3lHcmFwaE91dHB1dCA6IHB1YmxpYyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0KFRJbmZvU2lua0Jh
c2UmIHNpbmspIDogbVNpbmsoc2luaykge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRH
cmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZ1bmN0aW9u
Q2FsbChUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCk7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKKyAgICB2b2lkIG91dHB1
dEFsbFNwYW5uaW5nVHJlZXMoVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworcHJpdmF0ZToKKyAg
ICB2b2lkIG91dHB1dEluZGVudGF0aW9uKCk7CisKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsK
K307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ODU3NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworLy8gVGhlc2Ug
bWV0aG9kcyBkbyBhIGJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHRocm91Z2ggdGhlIGdyYXBoIGFu
ZCBtYXJrIHZpc2l0ZWQgbm9kZXMuCisKK3ZvaWQgVEdyYXBoTm9kZTo6dHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJz
ZXItPm1hcmtWaXNpdGVkKHRoaXMpOworfQorCit2b2lkIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIFRH
cmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKworICAgIGdyYXBoVHJhdmVyc2Vy
LT5pbmNyZW1lbnREZXB0aCgpOworCisgICAgLy8gVmlzaXQgdGhlIHBhcmVudCBub2RlJ3MgY2hp
bGRyZW4uCisgICAgZm9yIChUR3JhcGhOb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbURl
cGVuZGVudE5vZGVzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IG1EZXBlbmRlbnROb2Rlcy5l
bmQoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUg
PSAqaXRlcjsKKyAgICAgICAgaWYgKCFncmFwaFRyYXZlcnNlci0+aXNWaXNpdGVkKG5vZGUpKQor
ICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworICAgIH0KKworICAg
IGdyYXBoVHJhdmVyc2VyLT5kZWNyZW1lbnREZXB0aCgpOworfQorCit2b2lkIFRHcmFwaEFyZ3Vt
ZW50Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikK
K3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRBcmd1bWVudCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoRnVu
Y3Rpb25DYWxsOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRGdW5jdGlvbkNhbGwodGhpcyk7Cisg
ICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lk
IFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U3ltYm9sKHRoaXMpOworICAg
IFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBU
R3JhcGhTZWxlY3Rpb246OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBo
VHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFNlbGVjdGlvbih0aGlzKTsK
KyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdy
YXBoTG9vcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9vcCh0aGlzKTsKKyAgICBUR3JhcGhO
b2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoTG9naWNhbE9w
Ojp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sK
KyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb2dpY2FsT3AodGhpcyk7CisgICAgVEdyYXBoTm9k
ZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKaW5kZXggMjZmMTQ1Ny4uM2E0NWRhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCkBAIC04LDkg
KzgsOSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFs
aXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXpl
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3NjYW4oaW50
IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBpbnQg
Z2xzbGFuZ19zY2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiBleHRlcm4gaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCmluZGV4IDlh
MDM5NGIuLjg4ZTdjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcubApAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogCiAldG9wewogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTE1OSw2ICsxNTksNyBAQCBPICAgICAgICAgICBbMC03XQogImV4dGVybiIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJuYWwiICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2UiICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY3LDcgQEAgTyAgICAgICAgICAg
WzAtN10KICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImZpeGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
dW5zaWduZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzdXBl
cnAiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAiaW5wdXQi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRwdXQiICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEyICsxNzUs
MjEgQEAgTyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
ICJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2
ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzQi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMiIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNCw3IEBAIE8gICAgICAgICAgIFsw
LTddCiAKIDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQs
IDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7IHl5bHZh
bC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQot
MHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0
YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9Ciswe0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxp
ZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9
CiB7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAw
KTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5bHZhbC0+
bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9B
VENPTlNUQU5UKTsgfQpAQCAtMjU2LDcgKzI2Nyw3IEBAIE8gICAgICAgICAgIFswLTddCiAKIFsg
XHRcdlxuXGZccl0gICB7ICB9CiA8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRlckVPRiA9
IHRydWU7IHl5dGVybWluYXRlKCk7IH0KLTwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5p
bmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KKzwq
Pi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIi
LCB5eXRleHQpOyByZXR1cm4gMDsgfQogCiAlJQogCkBAIC0yNzgsMjAgKzI4OSwyMCBAQCB2b2lk
IENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xv
Zyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRl
eHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53YXJuaW5n
KHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hh
ciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5
eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0luZm9M
b2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBt
c2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtNDI3LDcgKzQzOCw3IEBAIHZvaWQgSGFuZGxl
UHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiAgICAgfQogfQogCi12
b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3Ry
aW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAg
LTUzNSw3ICs1NDYsNyBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGlu
dCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNf
dCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVy
cm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIp
OworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQg
d29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwog
fQpAQCAtNTQ0LDkgKzU1NSw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQtPkFmdGVy
RU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVj
dGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwg
InVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
IH0KQEAgLTU2OCwxOSArNTc5LDE1IEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKICAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsKIH0KIAot
dm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7CiAg
ICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nhbm5lcik7
CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKICAgICAKICAgICAvLyBJbml0IHByZXBy
b2Nlc3Nvci4KICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hTdHIgPSAw
OwotICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAgICAgPSBj
b3VudDsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0Rmlyc3RT
dGF0ZW1lbnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgcmV0dXJu
IEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55IGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQppbmRleCBkNmM4
ODY5Li5mYTRhZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nLnkKQEAgLTg0LDIxICs4NCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZSQUdfVkVS
VF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFH
TUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJU
RVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAg
Y29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMg
b25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwK
IH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNo
YWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBc
CisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJz
IG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBc
CiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJy
b3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7
ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAgICAgICAg
IGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKICAgICAgICAgY29uc3QgVFZhcmlh
YmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCB2YXJpYWJsZV9pZGVu
dGlmaWVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIg
Y2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYgKCEgc3lt
Ym9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAk
MS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIwNiw3ICsyMDYsNyBAQCBwcmltYXJ5X2V4cHJlc3Np
b24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAg
Ly8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3Rh
bnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwpAQCAtMjM1LDkgKzIzNSw5IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgIHwgcG9z
dGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklHSFRfQlJB
Q0tFVCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4KCkgJiYg
ISQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9sTm9kZSgp
KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJv
bE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19z
dHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2
ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBv
ciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTMxMCw3
ICszMTAsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJl
c3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBv
cGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAgLTM1NSw3
ICszNTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBs
ZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3Myw3IEBAIHBvc3Rm
aXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CiAgICAg
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwg
RXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInN0
cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MDUsMTMgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0
cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMu
c3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBt
YXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJp
bmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIGZ1bmN0aW9uX2NhbGwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSku
dHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9
PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24i
LCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRl
cm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAn
b3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5l
KCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQn
IHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgZnVuY3Rpb25fY2FsbF9v
cl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Np
b24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQz
LmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02
NDcsNyArNjQ3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDog
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0
IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMDcsMTIgQEAgZnVuY3Rp
b25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkp
KTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRS
ZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhl
IHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFt
ZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmlu
ZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmll
cnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCkn
IiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fu
bm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFy
YW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIGZ1bmN0aW9u
X2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxp
ZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFs
bG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0x
MDk1LDcgKzEwOTUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1l
CiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUg
PT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCci
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTEsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlz
dAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAg
IGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMjk4LDcgQEAg
c2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElG
SUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVu
c2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3Ry
KCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJv
bCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5n
LCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgc2luZ2xlX2RlY2xh
cmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0MzgsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24K
IC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxl
ID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJy
ZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8g
ZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8v
ICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDUwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAg
ICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9y
dGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJy
YXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYm
CiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9y
IGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVh
bGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFy
cmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY2Myw3IEBA
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBw
b3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVS
VF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xNzE5LDcgKzE3MTksNyBAQCBz
dHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9
IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCokJClbal0u
dHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwgImR1cGxp
Y2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0udHlwZS0+
Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6Iiwg
InN0cnVjdCIsICIlcyIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3RyKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTk2NiwxNCArMTk2NiwxNCBAQCBmb3JfcmVzdF9zdGF0ZW1l
bnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBp
ZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29w
cyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGlu
dWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJS
RUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1l
bnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7
CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlD
T0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0
dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lk
IGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTg5LDEw
IEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rp
b25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwg
InJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lk
IGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJl
bnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6Iiwg
InJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5j
dGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDM3
LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8v
IFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFz
IGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3
ICsyMDQ3LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAo
ZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlv
bi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5j
dGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJu
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA3OSw3IEBA
IGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFt
ZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlh
YmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVk
ZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAg
IC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUg
IT0gdm9pZCA/CiAgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3Mg
cGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKICAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRG
dW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5j
dGlvblJldHVybnNWYWx1ZSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
ImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlvbi0+Z2V0
TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1
bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAiJXMiLCAkMS5mdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggNTliNzI5OS4uZGMxZGYxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3Bw
CkBAIC0xLDYgKzEsNiBAQAogI2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE5MSw2ICsxOTEsMTEgQEAgdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsK
IHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogI2VuZGlm
CiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmlu
ZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjA0LDcgKzIwOSw3IEBAIHR5cGVkZWYgc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwogICAgICAqLwogICAgICNkZWZpbmUg
IFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAg
IGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAgICAg
ICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAtLXl5bGluZW5vO1wKQEAgLTIyNiwxMSArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCgg
YywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlf
c2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2Rl
ZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCkBA
IC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJICogY2hh
cmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9jaGFyczsK
IAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3Jl
YXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxk
IGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
IAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBz
aXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmlu
ZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBj
aGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCAq
eXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5cmVhbGxv
YyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMsOCArMzgz
LDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19idWZfcCA9
IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRfT0ZfQlVG
RkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAogICAg
YnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwpA
QCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2ludDMyX3Qg
eXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAgMTM2LCAg
MTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAgICAgMTM1
LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAgIDkwLAot
ICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5LCAgMTIx
LCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAgMTE2LCAg
MTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5LCAgIDk5
LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAgICAwLCAg
ICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0LAotICAg
ICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMsCi0gICAg
ICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAxMDQsICAg
NTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAgMCwgICA5
NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4NywgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1MywgICA5
MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAgOSwgICAz
MywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAzNiwK
LSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0MiwgICA0
MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA4Mywg
ICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAgIDgxLCAg
IDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1LCAgIDkw
LCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAgIDkwLAot
ICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYxLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAgIDY0LCAg
IDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAgIDkwLCAg
IDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDU0
LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0LAotCi0g
ICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAgOTAsICAg
NDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1MywgIDE1
MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwgIDEzMCwg
IDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0NSwgIDEz
MiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAgICAgIDE1
MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwgIDExNiwK
KyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEwNCwgIDEw
MCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwgIDEyNSwg
IDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
MTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAwLCAgICAw
LCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAgIDk4LCAg
IDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAgIDAsICAx
MDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgsCisgICAg
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAgMzQsICAg
MzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
NTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMzYs
ICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAgNDIsICAg
NDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA4
MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwKKyAgICAg
ICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5OCwgICA5
OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5NywgICA5OCwg
ICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2NiwgICA2
MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1NywgICA5OCwg
ICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwgICAzMSwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwgICA2Nywg
ICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2LCAgIDk2
LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDQ2
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAgIDk4LAor
ICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4LCAgIDkx
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAgIDkzLCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAx
MiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwgICAxNiwg
ICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAyNCwgICAy
NSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywKLSAgICAg
ICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAz
MSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzNSwg
ICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAgMSwgICAz
OSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3
LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAgIDMxLCAg
IDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYxLCAgIDYy
LCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0
LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAg
IDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5
LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisgICAgICAg
NTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEs
CisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0NzgsMjE0
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
NjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywKLSAg
ICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgNCwgICAg
NCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDY0XSA9
CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAgIDAsICA2
MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2MjgsICA2Mjgs
ICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAxNjMsICA1
OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2MjgsICA2Mjgs
ICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0gICAgICAx
MzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQsICAxODEs
Ci0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2MjgsICA2
MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2MjgsICAg
IDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAsICA2Mjgs
ICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAgIDAsICA2
MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAgICAgIDU2
OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwgIDU1MCwK
LSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0OCwgICAg
MCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwgIDUyOSwg
IDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5MiwgIDUz
MCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywgIDUyOSwg
IDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAgMCwgIDMy
MiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDUxNCwg
IDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUyMCwKLSAg
ICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwgIDUxMSwg
IDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUwMSwgIDUw
NCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4NiwgIDQ4Mywg
IDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAgNDcyLCAg
NDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0LCAgNDY5
LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAgMzcyLCAg
Mzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0LAotICAg
ICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAgNDYzLCAg
NDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1LCAgNDQ0
LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2LCAgNDQw
LCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAgICAwLCAg
NDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAwLCAgICAw
LCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAg
ICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAwLCAgNDE4
LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAgIDAsICAg
IDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUsICA0MTgs
ICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0MTMsICA0
MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAsICAzODks
ICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0gICAgICAz
ODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAzODUsICAz
ODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAsICAgIDAs
ICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAzNjQsICAg
IDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgsICAgIDAs
ICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAgICAgIDIz
OCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4NiwgIDE3MywK
LSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQxOSwgIDQy
MywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAgNjgwLCAg
NjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgxLCAgNjUz
LCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAgNjUxLCAg
NjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgxLCAgMTI4
LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAgMTczLCAg
MTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0LAorICAg
ICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAgICAwLCAg
NjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAgNjgxLCAg
NjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2MjEsICA2
MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIsCisgICAg
ICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAgIDAsICAy
MTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIsICA1OTYs
ICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1NzcsICA1
ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1NjksICA1ODEs
ICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAgIDAsICAz
NDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAsICA1NjYs
ICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisgICAgICA1
NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUsICAgIDAs
CisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1MzksICA1
NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYsICA1Mzcs
ICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywgIDUzNywg
IDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUyOSwgIDI4
MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywgIDM4MSwg
IDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAgICAgIDUw
OCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwgIDUwMywK
KyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUwMCwgIDM2
NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUwMCwgIDQ5
NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwgIDQ4MCwg
IDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4MywgIDQ4
MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAgIDQ4Mywg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2NiwKKwor
ICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAgICAwLCAg
ICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYwLCAgNDY1
LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAgNDYxLCAg
NDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAwLCAgNDQ2
LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAgNDQ5LCAg
ICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAwLAorICAg
ICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIwLCAgNDMy
LCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAgNDI3LCAg
NDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIzLCAgNDIy
LCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAsICA0MzEs
ICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQsCisgICAg
ICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAzOTEsICAz
ODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcsICAzMDQs
ICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAyNjIsICAg
IDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTksICAxMTMs
ICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAxNjEKICAg
ICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICA0
MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAgNDU4LCAg
ICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0
NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAgIDAsICA0
NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTksICAg
MjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjQs
ICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAgMzAsCi0g
ICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQs
ICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAg
MzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAs
ICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAgNTUsICAg
NTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEsICAgNjAs
ICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAgMjMsICAg
MjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsCisgICAg
ICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAg
MzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIs
ICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAg
NTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQsICAgNTUs
ICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAgOTEsICAg
NjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAgICAgICAg
IDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
CiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAgICAgICA2
NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA5MywK
LSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEyMCwgICA2
OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwgICA3Nywg
ICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3
OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4NSwg
ICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQyNCwgICA4
MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAgICAgMTAz
LCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAgMTA1LAot
ICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5LCAgNDIy
LCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAgMTM4LCAg
MTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5LCAgMTg0
LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAgNDE4LCAg
MTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0
LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAgMjMwLCAg
NDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5LAotICAg
ICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAgMjgyLCAg
NDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAgNDEyLCAg
MTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAsICAgNzgs
ICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAyMTEsICAz
MDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEsCi0gICAg
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcsICAyMjEs
ICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTQs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAsICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0gICAgICAy
MjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYsICAzMTcs
Ci0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5NSwg
IDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1OCwgICA1
OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1MiwgIDM4OSwg
IDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4MywgIDM4
MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwgIDM3NCwg
IDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAgICAgIDM2
NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwK
LSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0
NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwg
IDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMz
MCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwg
IDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAgMzExLCAg
MzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAgICAgMjkz
LCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAgMjc4LAot
ICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3
LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3
LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LCAg
MjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMxLCAgMjI4
LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAgMjE0LCAg
MjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAxLAotICAg
ICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAx
NTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUsICAgODks
ICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUs
ICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcwLCAgIDcy
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDkzLCAg
MTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIwLCAgIDY4
LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAorICAgICAg
IDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgw
LAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3LCAgMTQz
LCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQsICAxMDIs
ICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAxMTYsICAx
MTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcsICAxNDks
ICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisgICAgICAx
MzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAsICAxOTIs
CisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAxOTMsICA0
NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0NTIsICAx
ODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODksICAxNTUs
ICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAyODYsICAy
ODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzks
ICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAgODAsCisK
KyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1NiwgICA4MSwg
IDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgICA4
MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0NiwgIDIy
MiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAgIDIyMywg
IDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1NCwKKyAg
ICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwgIDQ0Miwg
IDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwgIDQzOCwg
IDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAg
ICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAgNDA1LCAg
NDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4
LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUzLCAgNDI0
LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAgNDE0LCAg
NDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAxLCAgNDAw
LCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAorICAgICAg
MzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzgy
LAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAg
MzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAz
NjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcs
ICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAzNDksICAz
NDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEsICAzNDAs
ICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisgICAgICAz
MzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAzMTks
CisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsICAyOTAs
ICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAyNzcsICAy
NzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjksICAyNjgs
ICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAgICAgIDI0
OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwK
KyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIyOSwgIDIy
OCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIw
MSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MSwg
IDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3NiwgIDE3
NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAgIDE2Nywg
IDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1MCwKKyAg
ICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwg
IDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAwLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0g
ICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiAr
NzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAsICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAgMzQsICAg
MzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUsICAgMzUs
ICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0gICAgICAg
MjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMsICAgMjMs
Ci0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAgNDEsICA0
MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYsICAgNTUs
ICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwgICAzNywg
ICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0OSwgICAz
OSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwgIDQyMCwg
ICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAgICAgIDEz
NSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwgIDEyMCwK
LSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3NCwgICA3
NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5MiwgIDE5
MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3OCwgIDQx
MCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwg
IDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEyMiwKLQot
ICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0LCAgMjM0
LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4LCAgMTUx
LCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgz
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAgMzkzLCAg
MTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LAotICAg
ICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEsICAzOTEs
ICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAzNzYsICAz
NzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0MjcsCi0gICAg
ICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAzNjksICAz
NjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMsICAzNTIs
ICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAz
NDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAs
ICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAzMjEsICAz
MjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUsICAyOTQs
ICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0gICAgICAy
NzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQs
Ci0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTAsICAy
NDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIz
NywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwgIDIyMywg
IDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIwOSwgIDIw
OCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwg
IDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAgICAgIDE5
MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwK
LSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3
MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2Miwg
IDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEzOCwgIDEz
NywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwg
IDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDExNywgIDEx
NiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAgICAgMTA4
LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LAot
ICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4
LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAgICA3LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICAgNSwg
ICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAg
ICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAzMywgICA0
MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwgICA1MSwg
IDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAgNDUzLCAg
IDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2LAorICAg
ICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAgIDM5LCAg
IDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5LCAgIDUw
LCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAgIDQ3LCAg
IDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5LCAgIDQ5
LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4LCAgIDc4
LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAorICAgICAg
MTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0LCAgIDc0
LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAgIDc5LCAg
IDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4LCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzksICAxNTYs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAgODAsICAg
ODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisgICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjksICA0NDMs
CisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0MzksICA0Mzgs
ICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAy
NDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUsICA0MzQs
ICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAy
NDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAgICAxNTcs
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCisK
KyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1NSwgIDI1
NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwg
IDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4OCwgIDQ1
OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAgIDQ2Miwg
IDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwKKyAg
ICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5MiwgIDM4OSwg
IDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3NywgIDM3
NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2MiwgIDM1OSwg
IDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAxLAorICAg
ICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAgMjgyLCAg
MjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcx
LCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAg
MjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4LCAgMjQ0
LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAgMjMyLCAg
MjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2LCAgMjE1
LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAorICAgICAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2
LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAg
MTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAxNzgsICAx
NzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAxNDUsICAx
NDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYsICAxMzQs
ICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisgICAgICAx
MjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMs
CisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAx
MDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUs
ICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAgNDAsICAg
MjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywg
dHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwgMCwgMCwg
MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
CkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVf
Y2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAw
LCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC04MjEsOCArODQyLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5X2J1ZmZl
cl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVGRkVSX1NU
QVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwogICAgIGNo
YXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxlbmdfcjsK
KyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CiAgICAg
Y2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3RhcnQ7CkBA
IC04NzUsNyArODk2LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
IAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVfdCB5eWdl
dF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDcsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3
aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3Vy
cmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5
eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGls
ZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDIsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9C
UkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5
NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAg
ICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVy
biBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5
OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7
IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgog
WVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJl
dHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlf
UlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVt
YmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6Citj
YXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQs
IDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNl
IDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0
YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXls
dmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJu
KEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5Ogor
Y2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxf
QVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRV
UAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAx
MTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lH
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6
CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2Fz
ZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6
CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0
OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNl
IDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgor
Y2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNl
OyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFy
ZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsg
Y29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0
ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRf
UEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
KExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5
OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9U
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6
CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
U0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
Mzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
VkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAx
NDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAg
QkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU1LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAg
ICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2Ug
MTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0
NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wg
Ki8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc2OSwxMSBA
QCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6
CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT53YXJuaW5n
KHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9Cit7IGNv
bnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQpOyByZXR1cm4g
MDsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NzoKK2Nhc2UgMTU1OgogWVlfUlVMRV9TRVRVUAogRUNI
TzsKIAlZWV9CUkVBSwpAQCAtMTkwOSw3ICsxOTYyLDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCWVsc2UKIAkJewotCQkJaW50IG51bV90
b19yZWFkID0KKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CiAJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCiAJCXdoaWxlICgg
bnVtX3RvX3JlYWQgPD0gMCApCkBAIC0xOTIzLDcgKzE5NzYsNyBAQCBzdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCQlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7
CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJCQkJaWYg
KCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUg
LyA4OwpAQCAtMTk1NCw3ICsyMDA3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KIAkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKwkJCXl5
Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAogCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CiAJCX0KQEAgLTIwMTYsNyArMjA2OSw3
IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJ
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIwNDUsMTEg
KzIwOTgsMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiAp
CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0g
PSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0
YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7
CiB9CkBAIC0yMDc5LDcgKzIxMzIsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAo
eXlzY2FuX3QgeXlzY2FubmVyKQogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICov
Ci0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJ
eXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKIAkJ
CSsreXlnLT55eV9jX2J1Zl9wOwogCiAJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5
c2Nhbm5lciApICkKQEAgLTIxMDMsNyArMjE1Niw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRf
YnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxF
OgogCQkJCQl7CiAJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiBF
T0Y7CisJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgKQogCQkJCQkJWVlfTkVXX0ZJTEU7CkBAIC0yMzY2LDcgKzI0MTksNyBAQCB2
b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogICovCiBzdGF0aWMg
dm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLQlpbnQg
bnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5eWctPnl5
X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxNywxMSBAQCBZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRo
ZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVz
X2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVz
ICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVmOwotCXl5
X3NpemVfdCBuOwotCWludCBpOworCXl5X3NpemVfdCBuLCBpOwogICAgIAogCS8qIEdldCBtZW1v
cnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAq
LwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjYxOSw3ICsyNjcxLDcgQEAgRklMRSAqeXln
ZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBj
dXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAg
Ki8KLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreXlfc2l6ZV90IHl5Z2V0
X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7CkBAIC0y
OTEyLDIwICsyOTY0LDIwIEBAIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQog
dm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9D
T05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIiwgIiIp
OworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2b2lkIENQ
UFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHAp
OwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0K
IAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9yVG9JbmZv
TG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5
eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBAIC0zMDYx
LDcgKzMxMTMsNyBAQCB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQg
bnVtVG9rZW5zKQogICAgIH0KIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2b2lk
IFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7
CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMTY5LDcgKzMyMjEsNyBAQCBpbnQgY2hlY2tfdHlw
ZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nh
bm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5
c2Nhbm5lcjsKIAotICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5vLCAiSWxsZWdhbCB1c2Ugb2Yg
cmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGluZW5v
LCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCk7CiAgICAgeXlleHRyYS0+
cmVjb3ZlcigpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzE3OCw5ICszMjMwLDkgQEAgdm9pZCB5
eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAg
IHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5u
ZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJy
b3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVs
c2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIi
KTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAg
ICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzIwMiwxOSArMzI1NCwxNSBAQCBp
bnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgcmV0dXJu
IHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAg
ICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4o
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
LAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0
YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJj
ZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVPRiA9IGZh
bHNlOwogICAgIAogICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgogICAgIGNwcC0+cEMgPSBjb250
ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3Ry
aW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9
IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21T
dHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50
LCBzdHJpbmcsIGxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDM3YTBmMDUuLjA5MmEzNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3Rh
Yi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
dGFiLmNwcApAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwyMSBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZSQUdf
VkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9G
UkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9W
RVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0g
IFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7
ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFk
ZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9
ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+
c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAog
ICAgIH0gIFwKIH0KQEAgLTIxNTcsNyArMjE1Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBjb25z
dCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsKICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKICAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAg
ICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CkBAIC0yMTY2LDcgKzIxNjYsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25s
eSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlz
VmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMjAxLDcgKzIyMDEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMK
ICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49
ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGlu
dGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwpAQCAtMjI0Nyw5ICsyMjQ3LDkgQEAgeXlyZWR1Y2U6CiAgICAg
ewogICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwg
bWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwg
b3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qg
b2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKQEAgLTIzMzAsNyArMjMzMCw3IEBA
IHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBh
biBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAi
IG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
bm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29uc3QgVFR5
cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQyNSwxMyArMjQyNSwxMyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3Ry
dWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24g
cmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIs
ICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmllbGQgc2Vs
ZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5k
IHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
ICAgICAgICAgfQpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1
YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExp
bmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNz
ZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90
IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjU4Niw3ICsyNTg2LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTc6CiAKICAgICB7Ci0gICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMg
YXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwg
IiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICA7fQpAQCAtMjY5Nyw3ICsyNjk3LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgY29u
c3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5
cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkp
OwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAg
ICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0zMTkxLDEyICszMTkxLDEyIEBAIHl5
cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rp
b24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAg
ICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5
cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5n
ZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQ
YXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmll
cnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBl
LT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJp
bmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjUzLDcgKzMyNTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlz
IHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQg
Zm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBl
eGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFt
LnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjY4LDcgKzMyNjgsNyBAQCB5eXJlZHVjZToK
IAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFs
aWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFs
aWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0
aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlv
biByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdl
bGwuLi4KQEAgLTMyODksNyArMzI4OSw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxs
ZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmlu
ZykpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5
eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZh
cmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzUzOCw3ICszNTM4LDcg
QEAgeXlyZWR1Y2U6CiAgIGNhc2UgOTg6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25z
IG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZz
cFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7
CkBAIC0zNjE2LDcgKzM2MTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSku
dHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBh
cyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gMDsKQEAgLTM2MzUsNyArMzYzNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwogCiAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90
IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNl
dEFycmF5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtMzY0NiwxOSArMzY0NiwxOSBAQCB5eXJlZHVj
ZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5h
cnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYm
CiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0
Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAgKCh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9v
bCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwpAQCAt
Mzk0Nyw3ICszOTQ3LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5z
dXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxP
RVMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtMzk2MCw3ICszOTYwLDcgQEAg
eXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNh
bXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFH
X1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
CkBAIC00MDQ0LDcgKzQwNDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpLT5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAoeXl2YWwu
aW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBpZiAoKCoo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCooeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1
Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0ubGlu
ZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgIiVzIiwg
KCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5h
bWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjEsNyArNDQyMSw3IEBAIHl5
cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29u
dGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDMyLDcgKzQ0MzIsNyBA
QCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxp
bmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFr
LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwpAQCAtNDQ0NCw3ICs0NDQ0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBh
IHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEg
dmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICA7fQpAQCAtNDQ1NiwxMCArNDQ1NiwxMCBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25S
ZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJm
dW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1
bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICA7fQpAQCAtNDUxNyw3ICs0
NTE3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0
aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5j
dGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
bGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWlu
IikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5s
aW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBw
YXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChm
dW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAg
LTQ1NTksNyArNDU1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIEluc2VydCB0
aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2Vy
dCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAg
ICB9CkBAIC00NTg5LDcgKzQ1ODksNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8/PyBDaGVjayB0
aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KICAg
ICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRl
cm1lZGlhdGUgY29kZQogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1Zh
bHVlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0pLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiZnVu
Y3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICIlcyIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCA1NDQxNTU3
Li40MDQxYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oCkBAIC00NTIsNyArNDUyLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNl
dFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRl
ZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgp
IGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJv
b2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4g
b3B0aW1pemU7IH0KQEAgLTUzMyw2ICs1MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwb3N0
VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwK
ICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigp
IHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQog
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24q
KSB7fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4zOTE1OGQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxz
dHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAgaW50
IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitzdGF0
aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHsw
fSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwog
CiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAq
cywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFzaExv
YyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKICAgICAgICAgICAgIGlmIChjcHAt
Pm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAg
ICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAi
KioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVh
c2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9u
cy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3
IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwg
aGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAi
KioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNp
b25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7
CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29s
bGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAg
ICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24g
dHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBh
dGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUs
MTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAg
IGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVl
OyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxl
LT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdz
W2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9
Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xs
aXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNp
emU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFi
bGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3Ry
KTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsr
KSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lp
XSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0
YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpAQCAt
NTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4K
IAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3
ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJ
Y2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0
dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6
CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAg
LTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFs
cHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilh
bGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tl
bjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CiAJCWZyZWUgKGFsbFRva2Vu
c1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0g
ICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIp
IHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CkBAIC04
NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAg
ICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4g
PSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CiAgICAg
ICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKICAg
ICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7
CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVl
KSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFNvdXJjZUxvYyBsb2NhdGlv
biA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wg
bWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBNYWNyb1N5bWJvbCBt
YWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAu
MCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9r
ZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0g
ICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2
YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAg
IFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJv
bCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBA
QCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNv
bnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXls
dmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJp
bnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5
eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5
bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklM
RV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7
Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNj
X2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJP
TF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tl
bihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03
Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAg
Ly8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9J
bmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8g
aW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMp
OyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZv
aWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9p
ZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3Bw
IGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAg
ICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgor
dm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwg
Y3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciop
OyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgog
dm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBu
dW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8g
U2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVy
X2dsdWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9sZXhlcl9nbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
YTNhNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9sZXhlcl9nbHVlLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor
ZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUu
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKK30KKyNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmgiCisKK2NsYXNzIERpYWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9z
dGljcworeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorICAgIHsKKyAgICAgICAg
Ly8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICB9Cit9OworCitzdHJ1Y3QgSW5wdXRT
cmNMZXhlcgoreworICAgIElucHV0U3JjIGJhc2U7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFn
bm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworfTsKKworc3RhdGljIGJvb2wgQ29weVN5
bWJvbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHl5c3R5cGVwcCogeXlsdmFscHApCit7
CisgICAgaWYgKG5hbWUubGVuZ3RoKCkgPiBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgIHsKKyAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIG5hbWUu
Y19zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGV4KElucHV0U3Jj
KiBpbiwgeXlzdHlwZXBwKiB5eWx2YWxwcCkKK3sKKyAgICBJbnB1dFNyY0xleGVyKiBzcmMgPSAo
KElucHV0U3JjTGV4ZXIgKilpbik7CisKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBwcDo6VG9rZW4g
dG9rZW47CisgICAgc3JjLT5sZXhlci0+bGV4KCZ0b2tlbik7CisgICAgc3dpdGNoICh0b2tlbi50
eXBlKQorICAgIHsKKyAgICBjYXNlIDA6ICAvLyBFT0YKKyAgICAgICAgZGVsZXRlIHNyYy0+bGV4
ZXI7CisgICAgICAgIGRlbGV0ZSBzcmMtPmRpYWdub3N0aWNzOworICAgICAgICBmcmVlKHNyYyk7
CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gMDsKKyAgICAgICAgcmV0ID0gRU9GOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6SURFTlRJRklFUjoKKyAgICAgICAgaWYg
KENvcHlTeW1ib2xOYW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHRva2Vu
LnZhbHVlLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJldCA9IENQUF9JREVOVElGSUVS
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAg
ICBpZiAoQ29weVN5bWJvbE5hbWUodG9rZW4udmFsdWUsIHl5bHZhbHBwKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2kodG9rZW4udmFsdWUuY19zdHIoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gQ1BQX0lOVENPTlNUQU5UOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ6CisgICAgICAgIENvcHlTeW1ib2xO
YW1lKHRva2VuLnZhbHVlLCB5eWx2YWxwcCk7CisgICAgICAgIHJldCA9IENQUF9GTE9BVENPTlNU
QU5UOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfSU5DOgorICAgICAg
ICByZXQgPSBDUFBfSU5DX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfREVDOgorICAgICAgICByZXQgPSBDUFBfREVDX09QOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9PUDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOgorICAgICAgICByZXQgPSBD
UFBfTEVfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRToKKyAg
ICAgICAgcmV0ID0gQ1BQX0dFX09QOworICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfRVE6CisgICAgICAgIHJldCA9IENQUF9FUV9PUDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX05FOgorICAgICAgICByZXQgPSBDUFBfTkVfT1A7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6CisgICAgICAgIHJldCA9IENQUF9B
TkRfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9YT1I6CisgICAg
ICAgIHJldCA9IENQUF9YT1JfT1A7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9PUjoKKyAgICAgICAgcmV0ID0gQ1BQX09SX09QOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjoKKyAgICAgICAgcmV0ID0gQ1BQX0FERF9BU1NJ
R047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOgor
ICAgICAgICByZXQgPSBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX01VTF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9NVUxfQVNTSUdOOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjoKKyAgICAg
ICAgcmV0ID0gQ1BQX0RJVl9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9NT0RfQVNTSUdOOgorICAgICAgICByZXQgPSBDUFBfTU9EX0FTU0lHTjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfTEVGVF9BU1NJR047CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9SSUdIVF9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9SSUdIVF9BU1NJR047CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOgorICAgICAgICBy
ZXQgPSBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX1hPUl9BU1NJR046CisgICAgICAgIHJldCA9IENQUF9YT1JfQVNTSUdOOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOgorICAgICAgICByZXQgPSBD
UFBfT1JfQVNTSUdOOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgU2V0TGluZU51bWJlcih0b2tlbi5sb2NhdGlvbi5saW5lKTsKKyAgICBT
ZXRTdHJpbmdOdW1iZXIodG9rZW4ubG9jYXRpb24uZmlsZSk7CisgICAgcmV0dXJuIHJldDsKK30K
KworSW5wdXRTcmMqIExleGVySW5wdXRTcmMoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcyA9IG5ldyBEaWFnbm9zdGljczsKKyAgICBwcDo6VG9rZW5pemVyKiBsZXhlciA9IG5ldyBw
cDo6VG9rZW5pemVyKGRpYWdub3N0aWNzKTsKKyAgICBpZiAoIWxleGVyLT5pbml0KGNvdW50LCBz
dHJpbmcsIGxlbmd0aCkpCisgICAgeworICAgICAgICBkZWxldGUgbGV4ZXI7CisgICAgICAgIGRl
bGV0ZSBkaWFnbm9zdGljczsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSW5wdXRT
cmNMZXhlciogaW4gPSAoSW5wdXRTcmNMZXhlciAqKSBtYWxsb2Moc2l6ZW9mKElucHV0U3JjTGV4
ZXIpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyY0xleGVyKSk7CisgICAgaW4t
PmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGxleDsKKyAgICBpbi0+ZGlhZ25v
c3RpY3MgPSBkaWFnbm9zdGljczsKKyAgICBpbi0+bGV4ZXIgPSBsZXhlcjsKKworICAgIHJldHVy
biAmaW4tPmJhc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaApA
QCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfTEVYRVJfR0xVRV9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJf
R0xVRV9IXworCitzdHJ1Y3QgSW5wdXRTcmM7CisKK0lucHV0U3JjKiBMZXhlcklucHV0U3JjKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0dMVUVfSF8KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9tZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbWVtb3J5LmgKaW5kZXggYjNhZTJmOS4uNWZjYWRiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCkBAIC00NSw2ICs0NSw4IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZm5kZWYgX19NRU1PUllfSAogI2RlZmluZSBfX01F
TU9SWV9ICiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9v
bF9yZWMgTWVtb3J5UG9vbDsKIAogZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNp
emVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTljYzQzLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgot
I2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1
ZGUgInN0bF91dGlscy5oIgotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGljIGJvb2wg
aXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBBU1NF
UlQobmFtZSk7Ci0KLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZl
ZC4KLSAgICBpZiAobmFtZS0+c3Vic3RyKDAsIDMpID09ICJHTF8iKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2Nv
cmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS0+ZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LW5hbWVzcGFjZSBwcAotewotCi1Db250ZXh0OjpDb250ZXh0KCkKLSAgICA6IG1MZXhlcihOVUxM
KSwKLSAgICAgIG1JbnB1dChOVUxMKSwKLSAgICAgIG1PdXRwdXQoTlVMTCkKLXsKLX0KLQotQ29u
dGV4dDo6fkNvbnRleHQoKQotewotICAgIGRlc3Ryb3lMZXhlcigpOwotfQotCi1ib29sIENvbnRl
eHQ6OmluaXQoKQotewotICAgIHJldHVybiBpbml0TGV4ZXIoKTsKLQotICAgIC8vIFRPRE8oYWxv
a3ApOiBEZWZpbmUgYnVpbHQtaW4gbWFjcm9zIGhlcmUgc28gdGhhdCB3ZSBkbyBub3QgbmVlZCB0
bwotICAgIC8vIGRlZmluZSB0aGVtIGV2ZXJ5dGltZSBpbiBwcm9jZXNzKCkuCi19Ci0KLWJvb2wg
Q29udGV4dDo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxl
bmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQpCi17Ci0g
ICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkgJiYgKG91dHB1dCAhPSBO
VUxMKSk7Ci0KLSAgICAvLyBTZXR1cC4KLSAgICBtSW5wdXQgPSBuZXcgSW5wdXQoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKLSAgICBtT3V0cHV0ID0gb3V0cHV0OwotICAgIGRlZmluZUJ1aWx0SW5N
YWNybygiR0xfRVMiLCAxKTsKLQotICAgIC8vIFBhcnNlLgotICAgIGJvb2wgc3VjY2VzcyA9IHBh
cnNlKCk7Ci0KLSAgICAvLyBDbGVhbnVwLgotICAgIHJlc2V0KCk7Ci0gICAgcmV0dXJuIHN1Y2Nl
c3M7Ci19Ci0KLWJvb2wgQ29udGV4dDo6ZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2NhdGlvbiBs
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotewotICAgIHN0
ZDo6YXV0b19wdHI8TWFjcm8+IG1hY3JvKG5ldyBNYWNybyh0eXBlLCBuYW1lLCBwYXJhbWV0ZXJz
LCByZXBsYWNlbWVudHMpKTsKLSAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZChuYW1lKSkKLSAg
ICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9EZWZpbmVkKG5hbWUpKQotICAgIHsKLSAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIG1NYWNyb3NbKm5hbWVdID0gbWFjcm8ucmVsZWFzZSgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OnVuZGVmaW5lTWFjcm8oY29uc3Qgc3RkOjpz
dHJpbmcqIG5hbWUpCi17Ci0gICAgTWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9zLmZp
bmQoKm5hbWUpOwotICAgIGlmIChpdGVyID09IG1NYWNyb3MuZW5kKCkpCi0gICAgewotICAgICAg
ICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIG1NYWNyb3MuZXJhc2UoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6aXNNYWNyb0RlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0g
ICAgcmV0dXJuIG1NYWNyb3MuZmluZCgqbmFtZSkgIT0gbU1hY3Jvcy5lbmQoKTsKLX0KLQotLy8g
UmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi12b2lkIENvbnRleHQ6OnJlc2V0KCkKLXsKLSAg
ICBzdGQ6OmZvcl9lYWNoKG1NYWNyb3MuYmVnaW4oKSwgbU1hY3Jvcy5lbmQoKSwgRGVsZXRlU2Vj
b25kKCkpOwotICAgIG1NYWNyb3MuY2xlYXIoKTsKLQotICAgIGRlbGV0ZSBtSW5wdXQ7Ci0gICAg
bUlucHV0ID0gTlVMTDsKLQotICAgIG1PdXRwdXQgPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6
OmRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZhbHVlKQot
ewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZhbHVlOwot
ICAgIFRva2VuKiB0b2tlbiA9IG5ldyBUb2tlbigwLCBJTlRfQ09OU1RBTlQsIG5ldyBzdGQ6OnN0
cmluZyhzdHJlYW0uc3RyKCkpKTsKLSAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzID0gbmV3
IHBwOjpUb2tlblZlY3RvcigxLCB0b2tlbik7Ci0KLSAgICBtTWFjcm9zW25hbWVdID0gbmV3IE1h
Y3JvKE1hY3JvOjprVHlwZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBz
dGQ6OnN0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhODEyNzQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9DT05URVhUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05U
RVhUX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRlICJUb2tl
bi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJsaWM6Ci0g
ICAgQ29udGV4dCgpOwotICAgIH5Db250ZXh0KCk7Ci0KLSAgICBib29sIGluaXQoKTsKLSAgICBi
b29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0KTsKLQot
ICAgIHZvaWQqIGxleGVyKCkgeyByZXR1cm4gbUxleGVyOyB9Ci0gICAgaW50IHJlYWRJbnB1dChj
aGFyKiBidWYsIGludCBtYXhTaXplKTsKLSAgICBUb2tlblZlY3Rvciogb3V0cHV0KCkgeyByZXR1
cm4gbU91dHB1dDsgfQotCi0gICAgYm9vbCBkZWZpbmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9u
IGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgcHA6Ok1hY3JvOjpUeXBlIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgIHBw
OjpUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICBib29sIHVuZGVmaW5lTWFjcm8oY29u
c3Qgc3RkOjpzdHJpbmcqIG5hbWUpOwotICAgIGJvb2wgaXNNYWNyb0RlZmluZWQoY29uc3Qgc3Rk
OjpzdHJpbmcqIG5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKENvbnRleHQpOwotICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIE1hY3JvKj4g
TWFjcm9TZXQ7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBpbml0TGV4ZXIoKTsKLSAg
ICB2b2lkIGRlc3Ryb3lMZXhlcigpOwotICAgIHZvaWQgZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIGJvb2wgcGFyc2UoKTsKLQotICAg
IHZvaWQqIG1MZXhlcjsgIC8vIExleGVyIGhhbmRsZS4KLSAgICBJbnB1dCogbUlucHV0OwotICAg
IFRva2VuVmVjdG9yKiBtT3V0cHV0OwotICAgIE1hY3JvU2V0IG1NYWNyb3M7ICAvLyBEZWZpbmVk
IG1hY3Jvcy4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9z
dGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorCitu
YW1lc3BhY2UgcHAKK3sKKworRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9CisKK3Zv
aWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiB0ZXh0KQoreworICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEgY291bnQg
b2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsKK30KKwor
RGlhZ25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKK3sKKyAg
ICBpZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAgICAgIHJl
dHVybiBFUlJPUjsKKworICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJO
SU5HX0VORCkpCisgICAgICAgIHJldHVybiBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZhbHNlKTsK
KyAgICByZXR1cm4gRVJST1I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlh
Z25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2M5NDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKQEAgLTAsMCArMSw2NiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NU
SUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworCisj
aW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0
aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4K
Ky8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcgYW5kIHBy
aW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAg
ICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxf
RVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVS
LAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAor
ICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAg
ICAgRU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAg
TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAorICAgICAgICBJ
TlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklP
UiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICBJTlZBTElE
X1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAg
ICAgICBFUlJPUl9FTkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAgVU5SRUNP
R05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklOR19FTkQKKyAgICB9OworCisgICAgdmlydHVh
bCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VM
b2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAgICAgICBXQVJOSU5H
CisgICAgfTsKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNh
OTFlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKCkKK3sK
K30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhZWVj
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtMCwwICsxLDQzIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX0hB
TkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgU291
cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2ZXMuCisv
LyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50cyBhYm91
dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFzc2VzIGFy
ZSByZXNwb25zaWJsZSBmb3IKKy8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlhdGUgbWFu
bmVyLgorY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+
RGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKKworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2YgZm9ybTog
I3ByYWdtYSBuYW1lWyh2YWx1ZSldCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25z
dCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRl
bnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9ICAvLyBu
YW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA2MThkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApAQCAtMCwwICsxLDQ3OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+Cisj
aW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25v
c3RpY3MuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXhwcmVz
c2lvblBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tl
bi5oIgorI2luY2x1ZGUgIlRva2VuaXplci5oIgorCituYW1lc3BhY2Ugeworc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVj
dGl2ZUlmZGVmKCJpZmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJ
Zm5kZWYoImlmbmRlZiIpOworc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNl
KCJlbHNlIik7CitzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYoImVsaWYi
KTsKK3N0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7Citz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInByYWdtYSIpOworc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOworc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CitzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKK30gIC8vIG5hbWVzcGFj
ZQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgor
ICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK25hbWVz
cGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1
YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlcikgOiBtTGV4ZXIobGV4ZXIpIHsg
fQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAg
ICB7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAgICAgIG1MZXhl
ci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVyOwor
fTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAgIG1NYWNy
b1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAgICBtRGly
ZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcjJykgcGFyc2VE
aXJlY3RpdmUodG9rZW4pOworICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICdcbicpOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQorewor
ICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSAnIycpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAgICAgICAg
ICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlVW5kZWYpCisgICAgICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKKyAgICAgICAg
ZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgICAgIHBhcnNl
SWYodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlm
ZGVmKQorICAgICAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRv
a2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICAgICAgcGFyc2VJZm5kZWYo
dG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsc2Up
CisgICAgICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgICAgICBwYXJzZUVsaWYodG9rZW4pOwor
ICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQorICAgICAg
ICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAgICAgICAg
ICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAgICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAgICAgICAgcGFyc2VFeHRlbnNpb24odG9rZW4pOwor
ICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCisgICAg
ICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgICAgICBwYXJzZUxpbmUodG9rZW4pOworICAg
IH0KKworICAgIGlmICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IDAp
KQorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworCisgICAgd2hpbGUgKHRv
a2VuLT50eXBlICE9ICdcbicpCisgICAgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gMCkg
eworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9E
SVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKTsK
KworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZl
ZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3JvOworICAg
IG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRva2VuLT52
YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAgICAgLy8g
RnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1hY3JvLnR5
cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFjcm8ucGFy
YW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsgIC8vIEdldCBjb21tYS4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5
cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7
CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoKHRva2VuLT50
eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAg
ICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2Fy
eSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxv
d3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBhcmUgbWFj
cm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgICAg
ICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5p
dGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+Zmlu
ZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNy
by5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFj
cm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNlcnQo
c3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZVVuZGVmKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1
ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgbU1hY3JvU2V0
LT5lcmFzZShpdGVyKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFs
b2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUlmKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyKTsKKyAg
ICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIsIG1NYWNyb1NldCwg
bURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Npb25QYXJzZXIoJm1h
Y3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4p
OworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIGlmICghZXhwcmVzc2lvblBhcnNlci5w
YXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IFJlcG9ydCBkaWFnbm9zdGljLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ug
aGF2ZSBhIHZhbGlkICNpZiBkaXJlY3RpdmUuIEhhbmRsZSBpdC4KKyAgICAvLyBUT0RPKGFsb2tw
KTogUHVzaCBjb25kaXRpb25hbCBibG9jay4KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQg
bWUuCisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpOworICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlm
bmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4K
KyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYpOworICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Uo
VG9rZW4qIHRva2VuKQoreworICAgIC8vIFRPRE8oYWxva3ApOiBJbXBsZW1lbnQgbWUuCisgICAg
YXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSk7CisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiog
dG9rZW4pCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiogdG9rZW4p
Cit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEltcGxlbWVudCBtZS4KKyAgICBhc3NlcnQodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZik7CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKQorewor
ICAgIGFzc2VydCh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKTsKKworICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdo
aWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNU
KSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0
b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2Yg
Zm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
UHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVQcmFnbWEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJBR01BX05B
TUUsCisgICAgICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAgICAgICAg
UklHSFRfUEFSRU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpz
dHJpbmcgbmFtZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaChz
dGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAgICAgICAg
ICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0
b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0
b2tlbi0+dHlwZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQ
UkFHTUFfVkFMVUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAg
ICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46CisgICAgICAg
ICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9r
ZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFHTUFfTkFN
RSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUg
PT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCisgICAg
aWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+IFBSQUdN
QV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsKKyAgICAg
ICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24sIG5hbWUs
IHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lv
bihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
RXh0ZW5zaW9uKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAor
ICAgICAgICBDT0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wg
dmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBz
dGF0ZSA9IEVYVF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGls
ZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEVYVF9OQU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0
b2tlbi0+dHlwZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBp
ZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGJl
aGF2aW9yID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9S
ICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
SU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRs
ZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0
KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbik7CisKKyAgICBlbnVtIFN0YXRlCisg
ICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0g
dHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1C
RVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5
cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9O
VU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpD
T05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlk
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZh
bGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAg
ICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZl
cnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tl
bikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgorICAgIGFzc2VydCh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBh
bmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBh
bmRlci5sZXgodG9rZW4pOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjQ5ZmQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCkBAIC0w
LDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJF
Q1RJVkVfUEFSU0VSX0hfCisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgi
CisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdu
b3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xh
c3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJl
Y3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOwor
CisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VE
ZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9r
ZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VF
cnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZl
cnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOwor
CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7Cisg
ICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBtRGly
ZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNz
aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjExNTY4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNw
cApAQCAtMCwwICsxLDE5NTggQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNv
biAyLjUuICAqLworCisvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNl
cnMgaW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0y
MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2
ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5
IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRo
ZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRl
ciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxm
IGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQg
dmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHks
IGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0
c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4
Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcK
KyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAg
IAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExB
TFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAg
IHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAq
LworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9y
IFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNo
b3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQg
b3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUg
dW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5l
IG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04K
KyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRw
dXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVm
aW5lIFlZQklTT05fVkVSU0lPTiAiMi41IgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZp
bmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVm
aW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVTSCAwCisK
Ky8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0
aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKy8qIFN1YnN0aXR1dGUgdGhlIHZh
cmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisjZGVmaW5lIHl5cGFyc2UgICAgICAgICBw
cHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICBwcGxleAorI2RlZmluZSB5eWVycm9yICAg
ICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAgICAgICAgcHBsdmFsCisjZGVmaW5lIHl5
Y2hhciAgICAgICAgICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNk
ZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0
IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBm
aWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQh
CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVy
YXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
dW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2Vy
LmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRl
ICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIK
KworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBk
aWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47
CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisKKworc3RhdGljIGludCB5
eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3Io
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworCisKKy8qIEVuYWJsaW5n
IHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlm
CisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJS
T1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVS
Qk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBF
bmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRl
ZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIENP
TlNUX0lOVCA9IDI1OCwKKyAgICAgT1BfT1IgPSAyNTksCisgICAgIE9QX0FORCA9IDI2MCwKKyAg
ICAgT1BfTkUgPSAyNjEsCisgICAgIE9QX0VRID0gMjYyLAorICAgICBPUF9HRSA9IDI2MywKKyAg
ICAgT1BfTEUgPSAyNjQsCisgICAgIE9QX1JJR0hUID0gMjY1LAorICAgICBPUF9MRUZUID0gMjY2
LAorICAgICBVTkFSWSA9IDI2NworICAgfTsKKyNlbmRpZgorCisKKworI2lmICEgZGVmaW5lZCBZ
WVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGludCBZWVNU
WVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5cGUgWVlT
VFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZ
UEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2Yg
dXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0
CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0
eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7Cisj
ZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9p
bnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRl
ZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVf
VUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQg
eXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZ
VFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBl
X2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVf
XworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVf
dAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAm
JiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRk
ZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0la
RV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVu
ZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKwor
I2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisj
ICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNv
bi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBk
ZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVu
dXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBs
aW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQor
I2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogSWRlbnRp
dHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29u
ZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZ
SUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlpKQorICAgIGludCB5eWk7
CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIHl5
b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxv
Y2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRl
ZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVm
IF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMg
ICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9j
YS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVk
IF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmlu
ZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0Ff
SCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAgICAgZGVmaW5l
IEVYSVRfU1VDQ0VTUyAwCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBl
bmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0Mn
cyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0
cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYgWVlTVEFD
S19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBn
dWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ug
c2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkK
KyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdo
dGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFs
bG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVuZGlmCisj
IGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFD
S19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisjICBpZiAo
ZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKKyAgICAgICAm
JiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAorCSAgICAgJiYgKGRl
ZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIEVYSVRfU1VDQ0VT
UworIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlm
bmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAhIGRlZmlu
ZWQgbWFsbG9jICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZ
WUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAh
IGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVmaW5lZCB5
eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVkIHl5b3Zl
cmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRlZmluZWQg
WVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUg
dGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9u
IHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19h
bGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBh
bGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJ
TVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJy
YXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVs
ZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNp
emVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFD
S19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZX05FRURFRCAxCisKKy8qIFJlbG9jYXRl
IFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9j
YWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcg
bnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUg
bmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVy
bHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJ
CQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZ
Q09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0g
Jnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBz
aXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdi
eXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGls
ZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYmIFlZ
Q09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUg
c291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYg
WVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywg
RnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZ
U0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJ
XAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGls
ZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICFZWUNPUFlfTkVFREVE
ICovCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0
ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZ
WVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1i
ZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0t
IE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJV
TEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKwor
LyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGlu
ZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9L
ICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBp
bnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQor
CisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVb
XSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAg
MjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwg
ICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAg
IDUsICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9Owor
CisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBz
eW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1
LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAg
IDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAg
NjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQor
fTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhT
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAg
ICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAg
IDI5LAorICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYs
ICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAg
IDgsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwg
ICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAor
ICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAxMSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAg
LTEsICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAt
MSwgICAgMjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAg
ICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2
LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUg
bnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAgNzYsICAgIDc2LCAgICA4MywgICAgODQsICAgIDg3
LCAgICA5MCwgICAgOTMsICAgIDk2LCAgICA5OSwKKyAgICAgMTAyLCAgIDEwNSwgICAxMDgsICAg
MTExLCAgIDExNCwgICAxMTcsICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LAorICAgICAxNDIs
ICAgMTU1LCAgIDE1OCwgICAxNjEsICAgMTY0LCAgIDE2NywgICAxNzAKK307CisjZW5kaWYKKwor
I2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5B
TUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgor
ICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9u
dGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQorewor
ICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkNPTlNUX0lOVCIsICJPUF9PUiIsICJP
UF9BTkQiLCAiJ3wnIiwKKyAgIideJyIsICInJiciLCAiT1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwg
Iic+JyIsICJPUF9HRSIsICJPUF9MRSIsCisgICJPUF9SSUdIVCIsICJPUF9MRUZUIiwgIicrJyIs
ICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVU5BUlkiLCAiJyEnIiwKKyAgIid+JyIsICIn
KCciLCAiJyknIiwgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5k
aWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFs
IHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAy
NTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2
MSwKKyAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAg
ICA0MywgICAgNDUsICAgIDQyLAorICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2
LCAgICA0MCwgICAgNDEKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVt
YmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwK
KyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9Owor
CisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQg
c2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9
Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRF
LU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCisg
ICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0
byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAyNSwKKyAg
ICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEw
LCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTcs
ICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAgICAgLTEs
ICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlU
QUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLworI2RlZmlu
ZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQor
eworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywgICAtMTEs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAgMTMwLCAg
IDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgIDM3
LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsKKworLyog
WVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3Rv
W10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZWVBBQ1Rb
U1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3Np
dGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hp
Y2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBl
cnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRhYmxlW10gPQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAg
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIKK307CisKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoeXlzdGF0
ZSkgXAorICAoKHl5c3RhdGUpID09ICgtMTEpKQorCisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNf
ZXJyb3IoeXl0YWJsZV92YWx1ZSkgXAorICBZWUlEICgwKQorCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDggeXljaGVja1tdID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAg
ICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisg
ICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIw
LCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxCit9OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFs
IG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAg
ICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAg
IDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAor
ICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJ
KHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQor
I2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NF
UFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNk
ZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2Vw
dCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8g
ZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdD
Qy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMg
Y2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVy
dGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBO
RVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQu
ICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlM
CisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3Bw
J3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQg
dGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFr
ZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdp
bGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmlu
ZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9r
ZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYm
IHl5bGVuID09IDEpCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4p
OwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgWVlQT1BTVEFD
SyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJ
XAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXllcnJvciAoY29udGV4
dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAgICBZWUVSUk9S
OwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQorCisKKyNkZWZpbmUg
WVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQg
LS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlz
IDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAg
IHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2Rl
ZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQK
KyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAorICAgIGRvCQkJ
CQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0
X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChDdXJyZW50KS5m
aXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKwkgIChDdXJy
ZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlcCisJICAo
Q3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47CVwK
Kwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJICAgIFlZUkhT
TE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9
IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3Rf
Y29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgor
CisKKy8qIFRoaXMgbWFjcm8gaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHku
ICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGlu
ZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9Q
QVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UK
KyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVu
YWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVm
IFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJ
XAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitk
byB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJ
CSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBj
b250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAg
IH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9p
ZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29u
dGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7
CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlm
ZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91
dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlv
dXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0
OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5
cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAg
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisK
KyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29u
dGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9N
IHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50
ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vsc2UKK3N0
YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5dHlwZV9p
bnQxNiAqeXlib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgoreworICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0
b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZWUZQUklOVEYg
KHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9w
KQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3Rh
Y2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBS
ZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2Vf
cHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQp
CisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7
CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklO
VEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJ
ICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQu
ICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAm
KHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4
dCk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmlu
ZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJ
CVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAorfSB3aGls
ZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBp
cyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29l
eGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZ
WURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFs
dWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRl
ZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8q
IFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8K
KyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisK
Ky8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVm
ZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBp
cyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1
bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tf
QllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24g
aW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZ
WU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisKKyMgaWZu
ZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdf
SAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVu
Z3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyNlbHNl
CitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFyICp5eXN0
cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5c3Ry
W3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOworfQorIyAg
ZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgX19HTElC
Q19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZp
bmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0
dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1Qu
ICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBj
aGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UK
K3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVz
dDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5eWQgPSB5eWRl
c3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsrID0gKnl5
cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOworfQorIyAg
ZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRo
ZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQorICAg
cXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9y
LiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2Fy
eSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwg
b3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RS
IGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBub3QgY29w
eTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0CisgICB3b3Vs
ZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIgKnl5cmVz
LCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAgeworICAg
ICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOworCisg
ICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAg
Y2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwn
OgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVv
dGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5
cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7
CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdc
MCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwor
ICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKKwor
ICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMgZW5kaWYKKwor
LyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVy
cm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuIFlZVE9LRU4gZm9yIHRo
ZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAgIFlZU1NQLgorCisgICBSZXR1cm4gMCBpZiAq
WVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzCisg
ICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFs
c28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcy4g
IFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJn
ZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5eXN5bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5
bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAgICAgICAgICAgICAgeXl0eXBlX2ludDE2ICp5
eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAs
IHl5dG5hbWVbeXl0b2tlbl0pOworICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICBZWVNJ
WkVfVCB5eXNpemUxOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUg
fTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KKyAgY29uc3QgY2hh
ciAqeXlmb3JtYXQgPSAwOworICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCisgIGNoYXIg
Y29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAvKiBOdW1iZXIg
b2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKKyAg
ICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0gMDsKKworICAvKiBUaGVyZSBhcmUg
bWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CisgICAgIC0gQXNzdW1lIFlZRkFJ
TCBpcyBub3QgdXNlZC4gIEl0J3MgdG9vIGZsYXdlZCB0byBjb25zaWRlci4gIFNlZQorICAgICAg
IDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEy
L21zZzAwMDI0Lmh0bWw+CisgICAgICAgZm9yIGRldGFpbHMuICBZWUVSUk9SIGlzIGZpbmUgYXMg
aXQgZG9lcyBub3QgaW52b2tlIHRoaXMKKyAgICAgICBmdW5jdGlvbi4KKyAgICAgLSBJZiB0aGlz
IHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4K
KyAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUg
ZGVmYXVsdCBhY3Rpb24KKyAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2Us
IGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAorICAgICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFy
ZSBub25lLgorICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHBy
ZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKKyAgICAgICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVu
dCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAorICAgICAgIGRldGVjdGluZyB0
aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVybWluZQorICAg
ICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tlbiB0byByZXBv
cnQuICBJbiB0aGF0CisgICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBl
cnJvciIuCisgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3Qg
YmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKKyAgICAgICBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBk
ZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhCisgICAgICAgcHJldmlvdXMg
aW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24tZGVmYXVsdAor
ICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5
eWNoYXIuCisgICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRz
IG9uIHN0YXRlcyB0byBoYXZlCisgICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24s
IGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVyZm9ybSBleHRy
YSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCisgICAgICAg
c2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRl
IG1lcmdpbmcKKyAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlv
bnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhl
IGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBvbmUgZXhjZXB0
aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKKyAg
ICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCisg
ICovCisgIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCisgICAgeworICAgICAgaW50IHl5biA9IHl5
cGFjdFsqeXlzc3BdOworICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07
CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAgICB7Cisg
ICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRp
dmUgaW5kZXhlcyBpbgorICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tp
cCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgorICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVj
YXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgICAgIGludCB5eXhiZWdp
biA9IHl5biA8IDAgPyAteXluIDogMDsKKyAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMg
b2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgICAgICBpbnQgeXljaGVja2xp
bSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0g
PCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgICAgIGludCB5eXg7
CisKKyAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQor
ICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVS
Uk9SCisgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVb
eXl4ICsgeXluXSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoeXljb3Vu
dCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgeXlz
aXplID0geXlzaXplMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsK
KyAgICAgICAgICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1l
W3l5eF0pOworICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQorICAgICAg
ICAgICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisg
ICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICB5eXNpemUgPSB5eXNp
emUxOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgc3dpdGNoICh5eWNv
dW50KQorICAgIHsKKyMgZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJyZWFrCisgICAg
ICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOworICAgICAgWVlDQVNFXygxLCBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMiwgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpKTsKKyAgICAgIFlZQ0FT
RV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAl
cyIpKTsKKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIp
KTsKKyMgdW5kZWYgWVlDQVNFXworICAgIH0KKworICB5eXNpemUxID0geXlzaXplICsgeXlzdHJs
ZW4gKHl5Zm9ybWF0KTsKKyAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICByZXR1cm4gMjsKKyAgeXlzaXplID0geXlzaXpl
MTsKKworICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsKKyAgICAgICp5eW1zZ19h
bGxvYyA9IDIgKiB5eXNpemU7CisgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYwor
ICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQor
ICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24g
dGhlIHVzZXIncyBuYW1lIHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlv
ciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRo
ZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworICB7CisgICAgY2hhciAqeXlwID0gKnl5bXNn
OworICAgIGludCB5eWkgPSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1ww
JykKKyAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwg
eXljb3VudCkKKyAgICAgICAgeworICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlh
cmdbeXlpKytdKTsKKyAgICAgICAgICB5eWZvcm1hdCArPSAyOworICAgICAgICB9CisgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICB5eXArKzsKKyAgICAgICAgICB5eWZvcm1hdCsrOwor
ICAgICAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NF
ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdT
VVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGlj
IHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBF
ICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0
cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAq
eXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250
ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChj
b250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlf
U1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisg
IHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9
Cit9CisKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAg
Ki8KKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQor
aW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lm
IGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENv
bnRleHQgKmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYg
LyogISBZWVBBUlNFX1BBUkFNICovCisKKworLyotLS0tLS0tLS0tLgorfCB5eXBhcnNlLiAgfAor
YC0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJB
TSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJT
RV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250ZXh0ICpj
b250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK2lu
dCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJv
bC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3Jz
IHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAv
KiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVk
LiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVp
ciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZz
JzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3Rh
Y2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0
byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFj
ay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVf
aW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1h
bnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Cisg
ICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZU0laRV9UIHl5
c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFk
IHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBp
bnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2
YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAg
WVlTVFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVy
cm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1
ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxv
YyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAo
eXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xz
IG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4g
bm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5
dG9rZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMgPSB5eXZzYTsKKyAgeXlzdGFja3Np
emUgPSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJz
ZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMg
PSAwOworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAq
LworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVt
ZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBv
biB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxl
bWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAgeXlzc3AgPSB5eXNzOworICB5eXZz
cCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAt
LSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhl
IHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAg
U28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7
CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlz
dGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1
c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlT
SVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAg
ICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBV
c2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSBy
ZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwor
CXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyogRWFjaCBzdGFjayBwb2ludGVyIGFk
ZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1c2UgaW4g
dGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRpdGlvbmFs
IGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1
bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93IChZWV8o
Im1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlz
c3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlz
dGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNl
bHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sg
b3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJ
Z290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAo
WVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKwor
ICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5
cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMg
KHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwor
CVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUg
KHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNz
MSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgor
I2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXpl
IC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWdu
ZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3RhdGUgPT0g
WVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0t
LS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBE
byBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBh
CisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhv
dXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgIGdvdG8geXlk
ZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFy
IDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9r
ZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtl
IHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZ
TEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAg
aWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisgICAgICAgIGdvdG8geXllcnJsYWI7
CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgLyog
Q291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBl
cnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0
dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBE
aXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKKworICB5
eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhl
IGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5
eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXly
ZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2Ug
LS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0
aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8s
IGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAk
MScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBn
YXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAg
ICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAg
ICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0
IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0
aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0Vf
UFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisg
ICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSAoeXl2c3BbKDEpIC0gKDEpXSk7Cisg
ICAgICAgIFlZQUNDRVBUOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSBeICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
PD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
LSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMp
IC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7CisgICAg
ICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyld
KSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAg
ICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2
c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8
PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZ
QUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMjI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAoMildKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI0
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAr
ICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIC8qIFVzZXIgc2Vt
YW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwor
ICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRpb24uICBX
ZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZv
cmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xh
dGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwKKyAgICAgYnV0IHRoYXQgdHJh
bnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBzZW1hbnRpYyBhY3Rpb24gaW52b2tlcwor
ICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRl
cmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNl
IG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAgIGluY29ycmVjdCBkZXN0cnVjdG9yIG1p
Z2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4gIEluIHRoZQorICAgICBjYXNlIG9mIFlZ
RVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZAor
ICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVy
cm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29rYWhlYWQgaXMgdHJhbnNsYXRlZC4gICov
CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9j
KTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8qIE5vdyBgc2hp
ZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisg
ICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFu
ZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5
eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Cisg
IGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRl
XSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAg
ICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0
YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVy
cmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRl
c3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2Vt
YW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9
IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBUWSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisg
IC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMg
ZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsK
KyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3IiKSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5UQVhfRVJST1IgeXlzeW50YXhfZXJy
b3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7CisgICAgICAgIGNoYXIgY29uc3Qg
Knl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7CisgICAgICAgIGludCB5eXN5bnRheF9lcnJv
cl9zdGF0dXM7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9S
OworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDApCisgICAgICAgICAgeXlt
c2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAx
KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICAg
ICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAgICAgICAgICB5eW1zZyA9IChjaGFy
ICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIGlmICgheXltc2cp
CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOworICAg
ICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICAgICAgICAgICAg
ICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9y
X3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNn
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB5eWVycm9yIChjb250ZXh0
LCB5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIpCisgICAg
ICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYgWVlTWU5UQVhfRVJS
T1IKKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgewor
ICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tl
biBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIg
PD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAg
Ki8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxz
ZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9r
ZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQor
CisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0
aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJy
b3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNv
ZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0
aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypD
T05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xh
aW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0
aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290
byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9y
IGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgor
ICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMg
dGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0
ZV07CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorCXsKKwkgIHl5
biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hl
Y2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsK
KwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBv
cCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRv
a2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAg
eXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5
dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKwor
ICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21l
cyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Y2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNv
bWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Ym9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmlu
ZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9y
eSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29u
dGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZh
bGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlF
TVBUWSkKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFk
IHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgICAgICB1c2VyIHNlbWFudGljIGFj
dGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB5eXRva2VuID0gWVlU
UkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGlu
ZyBsb29rYWhlYWQiLAorICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CisgICAgfQorICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3
aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICov
CisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
KyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNsZWFu
dXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7CisgICAg
ICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5c3Mg
IT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJST1Jf
VkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJldHVybiBZ
WUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KGludCogbHZhbHAsIENvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tl
biA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAg
ICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgKmx2YWxwID0gYXRvaSh0b2tl
bi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9HRTogdHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9MRTogdHlwZSA9IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9S
SUdIVDogdHlwZSA9IE9QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9M
RUZUOiB0eXBlID0gT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8Jzsg
YnJlYWs7CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcm
JzogdHlwZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7
CisgICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlw
ZSA9ICctJzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAg
ICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcv
JzsgYnJlYWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNl
ICchJzogdHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJl
YWs7CisgICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzog
dHlwZSA9ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAg
IC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlk
LgorICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAg
cmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJz
ZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
K3sKK30KKworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCog
cmVzdWx0KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNz
ID0gbURpYWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4
dC50b2tlbiA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCBy
ZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBj
YXNlIDA6CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RXhwcmVzc2lvblBhcnNlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KKworI2luY2x1ZGUgInBw
X3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNz
IExleGVyOworc3RydWN0IFRva2VuOworCitjbGFzcyBFeHByZXNzaW9uUGFyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKTsKKworICAgIGJvb2wgcGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCk7
CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXhwcmVzc2lv
blBhcnNlcik7CisKKyAgICBMZXhlciogbUxleGVyOworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2Vy
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9FeHByZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWNiNjc2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpAQCAtMCwwICsxLDI2
MyBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3Jh
bW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KKworSUYgWU9VIE1PRElG
WSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJ
Q0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHBhcnNlci4K
KyovCisKKyV7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUu
CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlm
IGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQor
I2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2lu
Y2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHsKK3N0cnVj
dCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6
TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9
OworfSAgLy8gbmFtZXNwYWNlCislfQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9
InBwIgorJXBhcnNlLXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4
dCAqY29udGV4dH0KKworJXsKK3N0YXRpYyBpbnQgeXlsZXgoaW50KiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbik7CislfQorCisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQg
T1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9O
RQorJWxlZnQgJzwnICc+JyBPUF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxl
ZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1
dAorICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9ICQxOwor
ICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lO
VAorICAgIHwgZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8
fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biAnJicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBl
eHByZXNzaW9uIE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
PT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4n
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiAnPCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJl
c3Npb24geworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAn
JScgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIg
PDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJ
VklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAg
WVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkg
eworICAgICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMg
VU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24g
JXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJl
c3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygn
IGV4cHJlc3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2lu
dCB5eWxleChpbnQqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0g
MDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2gg
KHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Cisg
ICAgICAgICpsdmFscCA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICB0eXBl
ID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDog
dHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUg
PSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBPUF9F
UTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOworICAg
ICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAn
Xic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2Fz
ZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJy
ZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6
IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOwor
ICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUg
PSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAg
Y2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7
IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZh
dWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlm
IHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5s
ZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3Io
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3Bh
Y2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhl
ciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBt
RGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6
cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7
CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0Lmxl
eGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJl
c3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dp
dGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBi
cmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5s
b2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09
IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
CmluZGV4IDY5NGMzYmQuLmMzZGU5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAK
QEAgLTYsMTU5ICs2LDQ5IEBACiAKICNpbmNsdWRlICJJbnB1dC5oIgogCi0jaW5jbHVkZSA8Y3N0
ZGlvPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgcHAK
IHsKIAotSW5wdXQ6OklucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSkKLSAgICA6IG1Db3VudChjb3VudCksCi0gICAgICBtU3RyaW5n
KHN0cmluZyksCi0gICAgICBtTGVuZ3RoKGxlbmd0aCksCi0gICAgICBtSW5kZXgoLTEpLAotICAg
ICAgbVNpemUoMCksCi0gICAgICBtRXJyb3Ioa0Vycm9yTm9uZSksCi0gICAgICBtU3RhdGUoa1N0
YXRlSW5pdGlhbCkKK0lucHV0OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDApCiB7Ci0g
ICAgQVNTRVJUKG1Db3VudCA+PSAwKTsKLSAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKIH0KIAot
Ym9vbCBJbnB1dDo6ZW9mKCkgY29uc3QKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQoY291
bnQpLAorICAgIG1TdHJpbmcoc3RyaW5nKQogewotICAgIEFTU0VSVChtSW5kZXggPD0gbUNvdW50
KTsKLSAgICByZXR1cm4gbUluZGV4ID09IG1Db3VudDsKKyAgICBhc3NlcnQobUNvdW50ID49IDAp
OworICAgIG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bUNvdW50OyArK2kpCisgICAgeworICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ld
IDogLTE7CisgICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4obVN0cmlu
Z1tpXSkgOiBsZW4pOworICAgIH0KIH0KIAotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50
IGJ1ZlNpemUpCitpbnQgSW5wdXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKIHsKLSAg
ICBpbnQgbnJlYWQgPSAwOwotICAgIGludCBzdGFydEluZGV4ID0gbUluZGV4OwotICAgIC8vIEtl
ZXAgcmVhZGluZyB1bnRpbCB0aGUgYnVmZmVyIGlzIGZ1bGwgb3IgdGhlIGN1cnJlbnQgc3RyaW5n
IGlzIGV4aGF1c3RlZC4KLSAgICB3aGlsZSAoKG1JbmRleCA9PSBzdGFydEluZGV4KSAmJiAobnJl
YWQgPCBidWZTaXplKSkKKyAgICBpbnQgblJlYWQgPSAwOworICAgIHdoaWxlICgoblJlYWQgPCBt
YXhTaXplKSAmJiAobVJlYWRMb2Muc0luZGV4IDwgbUNvdW50KSkKICAgICB7Ci0gICAgICAgIGlu
dCBjID0gZ2V0Q2hhcigpOwotICAgICAgICBpZiAoYyA9PSBFT0YpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtU3RhdGUgPT0ga1N0YXRlQmxvY2tDb21tZW50KQotICAgICAgICAgICAgICAg
IG1FcnJvciA9IGtFcnJvclVuZXhwZWN0ZWRFT0Y7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAobVN0YXRlKQorICAgICAgICBpbnQgc2l6ZSA9IG1MZW5n
dGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRleDsKKyAgICAgICAgc2l6ZSA9IHN0
ZDo6bWluKHNpemUsIG1heFNpemUpOworICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQsIG1TdHJp
bmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAgICAgIG5S
ZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOworCisgICAgICAg
IC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmlu
Zy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRl
eF0pCiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIGtTdGF0ZUluaXRpYWw6Ci0gICAgICAgICAg
ICBpZiAoYyA9PSAnLycpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gUG90ZW50
aWFsbHkgYSBjb21tZW50LgotICAgICAgICAgICAgICAgIHN3aXRjaCAocGVla0NoYXIoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAg
ICAgICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0
YXRlID0ga1N0YXRlTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsg
IC8vIEVhdCAnKicuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUJsb2NrQ29t
bWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYSBjb21tZW50LgotICAgICAgICAgICAg
ICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUxpbmVDb21tZW50OgotICAgICAgICAgICAg
aWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZbbnJlYWQr
K10gPSBjOwotICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlQmxvY2tD
b21tZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIChwZWVrQ2hhcigpID09ICcvJykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgIC8vIEVhdCAnLycu
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gJyAnOyAgLy8gUmVwbGFjZSBjb21tZW50
IHdpdGggd2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFs
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgLy8gTGluZSBicmVha3MgYXJlIG5ldmVyIHNraXBwZWQuCi0gICAgICAgICAg
ICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OworICAgICAgICAg
ICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotaW50IElucHV0OjpnZXRDaGFyKCkKLXsKLSAgICBpZiAoZW9mKCkpIHJldHVy
biBFT0Y7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50
IGMgPSBzdHJbbVNpemUrK107Ci0KLSAgICAvLyBTd2l0Y2ggdG8gbmV4dCBzdHJpbmcgaWYgdGhl
IGN1cnJlbnQgb25lIGlzIGZ1bGx5IHJlYWQuCi0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0
aChtSW5kZXgpOwotICAgIC8vIFdlIG5ldmVyIHJlYWQgZnJvbSBlbXB0eSBzdHJpbmcuCi0gICAg
QVNTRVJUKGxlbmd0aCAhPSAwKTsKLSAgICBpZiAoKChsZW5ndGggPCAwKSAmJiAoc3RyW21TaXpl
XSA9PSAnXDAnKSkgfHwKLSAgICAgICAgKChsZW5ndGggPiAwKSAmJiAobVNpemUgPT0gbGVuZ3Ro
KSkpCi0gICAgICAgIHN3aXRjaFRvTmV4dFN0cmluZygpOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0K
LWludCBJbnB1dDo6cGVla0NoYXIoKQotewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVhZCBw
b3NpdGlvbi4KLSAgICBpbnQgaW5kZXggPSBtSW5kZXg7Ci0gICAgaW50IHNpemUgPSBtU2l6ZTsK
LSAgICBpbnQgYyA9IGdldENoYXIoKTsKLQotICAgIC8vIFJlc3RvcmUgcmVhZCBwb3NpdGlvbi4K
LSAgICBtSW5kZXggPSBpbmRleDsKLSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLXZvaWQgSW5wdXQ6OnN3aXRjaFRvTmV4dFN0cmluZygpCi17Ci0gICAgQVNTRVJUKG1JbmRl
eCA8IG1Db3VudCk7Ci0KLSAgICBtU2l6ZSA9IDA7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgICsr
bUluZGV4OwotICAgIH0gd2hpbGUgKCFlb2YoKSAmJiBpc1N0cmluZ0VtcHR5KG1JbmRleCkpOwot
fQotCi1ib29sIElucHV0Ojppc1N0cmluZ0VtcHR5KGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQo
aW5kZXggPCBtQ291bnQpOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhd
OwotICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICByZXR1cm4gKGxl
bmd0aCA9PSAwKSB8fCAoKGxlbmd0aCA8IDApICYmIChzdHJbMF0gPT0gJ1wwJykpOwotfQotCi1p
bnQgSW5wdXQ6OnN0cmluZ0xlbmd0aChpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwg
bUNvdW50KTsKLSAgICByZXR1cm4gbUxlbmd0aCA/IG1MZW5ndGhbaW5kZXhdIDogLTE7CisgICAg
cmV0dXJuIG5SZWFkOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5oCmluZGV4IDVhMWI1ZDEuLmRhYzczNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aApAQCAtNyw2NiArNyw0MCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRf
SF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAKKyNpbmNsdWRlIDx2
ZWN0b3I+CisKIG5hbWVzcGFjZSBwcAogewogCi0vLyBSZWFkcyB0aGUgZ2l2ZW4gc2V0IG9mIHN0
cmluZ3MgaW50byBpbnB1dCBidWZmZXIuCi0vLyBTdHJpcHMgY29tbWVudHMuCisvLyBIb2xkcyBh
bmQgcmVhZHMgaW5wdXQgZm9yIExleGVyLgogY2xhc3MgSW5wdXQKIHsKICAgcHVibGljOgorICAg
IElucHV0KCk7CiAgICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdKTsKIAotICAgIGVudW0gRXJyb3IKLSAgICB7Ci0gICAgICAg
IGtFcnJvck5vbmUsCi0gICAgICAgIGtFcnJvclVuZXhwZWN0ZWRFT0YKLSAgICB9OwotICAgIEVy
cm9yIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbUVycm9yOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRo
ZSBpbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IHN0cmlu
Z0luZGV4KCkgY29uc3QgeyByZXR1cm4gbUluZGV4OyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IEVPRiBoYXMgcmVhY2hlZC4KLSAgICBib29sIGVvZigpIGNvbnN0OworICAgIGludCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CiAKLSAgICAvLyBSZWFkcyB1
cCB0byBidWZTaXplIGNoYXJhY3RlcnMgaW50byBidWYuCi0gICAgLy8gUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZC4KLSAgICAvLyBJdCByZXBsYWNlcyBlYWNoIGNvbW1lbnQg
YnkgYSB3aGl0ZXNwYWNlLiBJdCByZWFkcyBvbmx5IG9uZSBzdHJpbmcKLSAgICAvLyBhdCBhIHRp
bWUgc28gdGhhdCB0aGUgbGV4ZXIgaGFzIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGUgc3RyaW5n
IG51bWJlcgotICAgIC8vIGZvciBtZWFuaW5nZnVsIGRpYWdub3N0aWMgbWVzc2FnZXMuCi0gICAg
aW50IHJlYWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSk7CisgICAgaW50IHJlYWQoY2hhciogYnVm
LCBpbnQgbWF4U2l6ZSk7CiAKLXByaXZhdGU6Ci0gICAgZW51bSBTdGF0ZQorICAgIHN0cnVjdCBM
b2NhdGlvbgogICAgIHsKLSAgICAgICAga1N0YXRlSW5pdGlhbCwKLSAgICAgICAga1N0YXRlTGlu
ZUNvbW1lbnQsCi0gICAgICAgIGtTdGF0ZUJsb2NrQ29tbWVudAotICAgIH07CisgICAgICAgIGlu
dCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7CisgICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFy
IGluZGV4LgogCi0gICAgaW50IGdldENoYXIoKTsKLSAgICBpbnQgcGVla0NoYXIoKTsKLSAgICAv
LyBTd2l0Y2hlcyBpbnB1dCBidWZmZXIgdG8gdGhlIG5leHQgbm9uLWVtcHR5IHN0cmluZy4KLSAg
ICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IHN0cmluZyBpcyBmdWxseSByZWFk
LgotICAgIHZvaWQgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBnaXZlbiBzdHJpbmcgaXMgZW1wdHkuCi0gICAgYm9vbCBpc1N0cmluZ0VtcHR5KGludCBp
bmRleCk7Ci0gICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIHN0cmluZy4KLSAg
ICAvLyBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgZm9yIG51bGwtdGVybWluYXRlZCBzdHJpbmdz
LgotICAgIGludCBzdHJpbmdMZW5ndGgoaW50IGluZGV4KTsKKyAgICAgICAgTG9jYXRpb24oKSA6
IHNJbmRleCgwKSwgY0luZGV4KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJl
YWRMb2MoKSBjb25zdCB7IHJldHVybiBtUmVhZExvYzsgfQogCisgIHByaXZhdGU6CiAgICAgLy8g
SW5wdXQuCiAgICAgaW50IG1Db3VudDsKICAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsK
LSAgICBjb25zdCBpbnQqIG1MZW5ndGg7Ci0KLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRpb24u
Ci0gICAgaW50IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNj
YW5uZWQuCi0gICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNjYW5u
ZWQuCisgICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwogCi0gICAgLy8gQ3VycmVudCBlcnJv
ciBhbmQgc3RhdGUuCi0gICAgRXJyb3IgbUVycm9yOwotICAgIFN0YXRlIG1TdGF0ZTsKKyAgICBM
b2NhdGlvbiBtUmVhZExvYzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjYz
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5M
ZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4NWNlYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0xleGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9MRVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFz
cyBMZXhlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAK
KyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L01hY3JvLmNwcAppbmRleCBmY2NjYTk2Li5iMmUzMDg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uY3BwCkBAIC02LDM5ICs2LDE3IEBACiAKICNpbmNsdWRlICJNYWNyby5oIgog
Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCisjaW5jbHVk
ZSAiVG9rZW4uaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLU1hY3JvOjpNYWNybyhUeXBlIHR5cGUs
Ci0gICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgVG9rZW5WZWN0
b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykK
LSAgICA6IG1UeXBlKHR5cGUpLAotICAgICAgbU5hbWUobmFtZSksCi0gICAgICBtUGFyYW1ldGVy
cyhwYXJhbWV0ZXJzKSwKLSAgICAgIG1SZXBsYWNlbWVudHMocmVwbGFjZW1lbnRzKQotewotfQot
Ci1NYWNybzo6fk1hY3JvKCkKK2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIp
IGNvbnN0CiB7Ci0gICAgZGVsZXRlIG1OYW1lOwotCi0gICAgaWYgKG1QYXJhbWV0ZXJzKQotICAg
IHsKLSAgICAgICAgc3RkOjpmb3JfZWFjaChtUGFyYW1ldGVycy0+YmVnaW4oKSwgbVBhcmFtZXRl
cnMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUGFyYW1ldGVyczsKLSAgICB9
Ci0KLSAgICBpZiAobVJlcGxhY2VtZW50cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2go
bVJlcGxhY2VtZW50cy0+YmVnaW4oKSwgbVJlcGxhY2VtZW50cy0+ZW5kKCksIERlbGV0ZSgpKTsK
LSAgICAgICAgZGVsZXRlIG1SZXBsYWNlbWVudHM7Ci0gICAgfQorICAgIHJldHVybiAodHlwZSA9
PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgorICAg
ICAgICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAgICAo
cmVwbGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7CiB9CiAKIH0gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKaW5kZXggZTI0MzMwNi4uNjNiMzA1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTcsNDUgKzcsMzIgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogCisj
aW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KIG5hbWVz
cGFjZSBwcAogewogCi1jbGFzcyBNYWNybworc3RydWN0IFRva2VuOworCitzdHJ1Y3QgTWFjcm8K
IHsKLSAgcHVibGljOgogICAgIGVudW0gVHlwZQogICAgIHsKICAgICAgICAga1R5cGVPYmosCiAg
ICAgICAgIGtUeXBlRnVuYwogICAgIH07CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9p
bnRlciBwYXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0
cmluZyogbmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAg
ICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9y
KiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBU
b2tlblZlY3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsg
fQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQot
ICAgIFR5cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9y
KiBtUGFyYW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29s
IGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgVHlwZSB0eXBlOworICAg
IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcmFtZXRl
cnM7CisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKIH07CiAKLX0gIC8vIG5h
bWVzcGFjZSBwcAotI2VuZGlmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwordHlwZWRl
ZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0OwogCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyb0V4cGFuZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBmMTNmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNw
cApAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5k
ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIo
TGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAg
ICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6
bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogSW1wbGVtZW50IG1lLgor
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kZmU5ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFD
Uk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIK
KyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25v
c3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGlj
OgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0
b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWFj
cm9FeHBhbmRlcik7CisKKyAgICBMZXhlciogbUxleGVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9T
ZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKaW5kZXggZWY0OWU1
Ny4uMTJjZmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3Bw
CkBAIC02LDQ3ICs2LDI5IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAi
Q29udGV4dC5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAK
IG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRl
eHQoTlVMTCkKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVj
dGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKGRpYWdub3N0aWNzKSwKKyAgICBtRGlyZWN0
aXZlUGFyc2VyKCZtVG9rZW5pemVyLCAmbU1hY3JvU2V0LCBkaWFnbm9zdGljcywgZGlyZWN0aXZl
SGFuZGxlciksCisgICAgbU1hY3JvRXhwYW5kZXIoJm1EaXJlY3RpdmVQYXJzZXIsICZtTWFjcm9T
ZXQsIGRpYWdub3N0aWNzKQogewogfQogCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IoKQor
Ym9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpbnQgbGVuZ3RoW10pCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OwotfQotCi1ib29sIFBy
ZXByb2Nlc3Nvcjo6aW5pdCgpCi17Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29udGV4dDsKLSAgICBy
ZXR1cm4gbUNvbnRleHQtPmluaXQoKTsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3Mo
aW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10p
Ci17Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwotICAgIGlm
ICgoY291bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXNldCgpOwotCi0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBz
dHJpbmcsIGxlbmd0aCwgJm1Ub2tlbnMpOworICAgIHJldHVybiBtVG9rZW5pemVyLmluaXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3Zv
aWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2go
bVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5j
bGVhcigpOworICAgIG1NYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CiB9CiAKIH0gIC8vIG5hbWVz
cGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAppbmRleCA4ODVi
YjcwLi5kZGJlMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApA
QCAtNywzNCArNyw0MiBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VT
U09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAot
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNs
dWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgIk1h
Y3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKIAogbmFtZXNwYWNlIHBwCiB7
CiAKLWNsYXNzIENvbnRleHQ7CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhh
bmRsZXI7CiAKIGNsYXNzIFByZXByb2Nlc3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vz
c29yKCk7Ci0gICAgflByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogCi0g
ICAgYm9vbCBpbml0KCk7CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBz
cGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6
IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGgg
aXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisg
ICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8g
YW4gYXJyYXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0
aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50
IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAv
LyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRl
IHRoYXQgdGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGlu
aXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKIAotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtVG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9r
ZW4pOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nl
c3Nvcik7CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAK
LSAgICAvLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0K
LSAgICBDb250ZXh0KiBtQ29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0
cHV0LgorICAgIE1hY3JvU2V0IG1NYWNyb1NldDsKKyAgICBUb2tlbml6ZXIgbVRva2VuaXplcjsK
KyAgICBEaXJlY3RpdmVQYXJzZXIgbURpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVy
IG1NYWNyb0V4cGFuZGVyOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3Vy
Y2VMb2NhdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApAQCAtMCww
ICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
U09VUkNFX0xPQ0FUSU9OX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0Vf
TE9DQVRJT05fSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbgor
eworICAgIFNvdXJjZUxvY2F0aW9uKCkgOiBmaWxlKDApLCBsaW5lKDApIHsgfQorICAgIFNvdXJj
ZUxvY2F0aW9uKGludCBmLCBpbnQgbCkgOiBmaWxlKGYpLCBsaW5lKGwpIHsgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgU291cmNlTG9jYXRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChmaWxlID09IG90aGVyLmZpbGUpICYmIChsaW5lID09IG90aGVyLmxpbmUpOwor
ICAgIH0KKworICAgIGludCBmaWxlOworICAgIGludCBsaW5lOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlv
biYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRp
b24mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJ
T05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAppbmRleCBhMmU3NTljLi44OTNkMDcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCkBAIC02LDUwICs2LDQ4IEBACiAKICNp
bmNsdWRlICJUb2tlbi5oIgogCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgY29u
c3QgaW50IGtMb2NhdGlvbkxpbmVTaXplID0gMTY7ICAvLyBpbiBiaXRzLgotc3RhdGljIGNvbnN0
IGludCBrTG9jYXRpb25MaW5lTWFzayA9ICgxIDw8IGtMb2NhdGlvbkxpbmVTaXplKSAtIDE7Ci0K
IG5hbWVzcGFjZSBwcAogewogCi1Ub2tlbjo6TG9jYXRpb24gVG9rZW46OmVuY29kZUxvY2F0aW9u
KGludCBsaW5lLCBpbnQgZmlsZSkKK3ZvaWQgVG9rZW46OnJlc2V0KCkKIHsKLSAgICByZXR1cm4g
KGZpbGUgPDwga0xvY2F0aW9uTGluZVNpemUpIHwgKGxpbmUgJiBrTG9jYXRpb25MaW5lTWFzayk7
CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291cmNlTG9j
YXRpb24oKTsKKyAgICB2YWx1ZS5jbGVhcigpOwogfQogCi12b2lkIFRva2VuOjpkZWNvZGVMb2Nh
dGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKQorYm9vbCBUb2tlbjo6ZXF1
YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoZmlsZSkgKmZpbGUgPSBs
b2MgPj4ga0xvY2F0aW9uTGluZVNpemU7Ci0gICAgaWYgKGxpbmUpICpsaW5lID0gbG9jICYga0xv
Y2F0aW9uTGluZU1hc2s7CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAg
ICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAgICAgICAgICAgKGxvY2F0aW9uID09
IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodmFsdWUgPT0gb3RoZXIudmFsdWUpOwog
fQogCi1Ub2tlbjo6VG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmlu
ZyogdmFsdWUpCi0gICAgOiBtTG9jYXRpb24obG9jYXRpb24pLAotICAgICAgbVR5cGUodHlwZSks
Ci0gICAgICBtVmFsdWUodmFsdWUpCit2b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wg
c3RhcnQpCiB7CisgICAgaWYgKHN0YXJ0KQorICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9M
SU5FOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7CiB9CiAK
LVRva2VuOjp+VG9rZW4oKSB7Ci0gICAgZGVsZXRlIG1WYWx1ZTsKK3ZvaWQgVG9rZW46OnNldEhh
c0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQoreworICAgIGlmIChzcGFjZSkKKyAgICAgICAgZmxh
Z3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7CisgICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+SEFT
X0xFQURJTkdfU1BBQ0U7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05T
VEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFs
dWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0
YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAg
ICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFj
ZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCmluZGV4
IDRmNWExMmIuLjAyZmQwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApAQCAtNyw0MiAr
Nyw4MyBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2lu
Y2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAog
ewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVm
IGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxp
bmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBs
b2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAg
IExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHN0cmluZy4K
LSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1
ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAKLSAgICBMb2Nh
dGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAgIGludCB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyogdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAorICAgICAgICBD
T05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
b2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZU
LAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAg
ICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1Bf
WE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1Bf
U1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lH
TiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAg
ICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1Bf
WE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOCisgICAgfTsKKyAgICBlbnVtIEZsYWdz
CisgICAgeworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICA9IDEgPDwgMCwKKyAgICAgICAgSEFT
X0xFQURJTkdfU1BBQ0UgPSAxIDw8IDEKKyAgICB9OwogCi0gICAgTG9jYXRpb24gbUxvY2F0aW9u
OwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIFRva2VuKCkg
OiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVx
dWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBh
bnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsg
cmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0
U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9p
ZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBpbnQgdHlwZTsKKyAgICBp
bnQgZmxhZ3M7CisgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcg
dmFsdWU7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10
eXBlZGVmIFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQorewor
ICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5l
cXVhbHMocmhzKTsKK30KIAogZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAj
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zZDQ4ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzMzkg
QEAKKyNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQor
CisKKworI2xpbmUgMTMgIi4vVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdO
RUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICov
CisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAy
CisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlO
T1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUg
RkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3Bl
Y2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFy
ZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRh
cmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLwor
CisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMg
aGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKwor
I2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5
OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUg
aW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBt
YWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUwor
I2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlw
ZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhf
dWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90
IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1
aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9p
bnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4
X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYg
dW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBm
bGV4X3VpbnQzMl90OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3Jh
bCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAg
ICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlO
ICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVm
aW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5k
ZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlm
CisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2
NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAg
ICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlO
VDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisj
ZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBV
SU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQor
I2VuZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMK
KworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNk
ZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5
IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChf
X1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9f
U1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9D
T05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5k
aWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAw
CisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFy
IHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJ
ZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJl
YXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2Fz
dC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVk
IGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVG
X1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2
b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMg
KHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVl
bnRyYW50IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlv
dXQgeXlnLT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUg
eXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZp
bmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2Rl
ZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisj
ZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBz
dGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1l
dGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9u
IHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5l
IEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVu
dCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0
byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9y
IGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlf
c3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51
bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlf
U1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3Bl
Y2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNk
ZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUg
WVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZl
ci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNl
bmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25l
IHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZ
X1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5
cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZ
X0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisj
ZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Cisj
ZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNU
X0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZp
bmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAi
biIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZp
bmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGlu
ZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwK
KyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXln
LT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JF
X0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICov
IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5
eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZG
RVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVm
OwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9z
aXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBi
eXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLwor
CXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQg
aW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8K
Kwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZl
ciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBp
dCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkg
Ki8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50
ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0
ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9m
IGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICog
ZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRo
ZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkg
KiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhl
cndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19s
aW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoq
PCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwg
dGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8K
KwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmlu
ZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBh
biBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MK
KwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNh
dGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3Vy
Y2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMg
dG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJ
ICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1
cyB0byAibmV3IgorCSAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBj
b250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1
dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNl
bmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1h
Y3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVy
ZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICog
InNjYW5uZXIgc3RhdGUiLgorICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9y
IE5VTEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9z
dGFjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tb
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDog
TlVMTCkKKworLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtu
b3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQg
YW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcF0KKwordm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwordm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1
ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1
ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBw
X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
K3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Cit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVm
ZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZ
WV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5u
ZXIpCisKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXpl
X3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9z
dHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBs
ZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVm
aW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAg
ICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwK
KwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJh
Y3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAo
eXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAg
ICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9
IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0K
KworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9i
b2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2Rl
ZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwor
dHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9y
CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9z
dGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQg
eXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFu
ZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0Lgor
ICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5
X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9C
VUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAg
IGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8K
Kwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAs
CisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAg
MzUsICAgMzMsCisgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgMzMsICAgIDksCisgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAg
MzMsICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisgICAgICAgIDQsICAgMzQsICAgMzUsICAgMTks
ICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsICAgMjMsCisgICAgICAgMTMsICAgMjQsICAg
MTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCisgICAgICAgMTEs
ICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisg
ICAgICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEs
ICAgIDEsCisgICAgICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAg
IDAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgIDAKKyAgICB9IDsKKworc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAor
ICAgICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAx
LCAgICA3LCAgICA4LCAgICAxLCAgICA5LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAg
IDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2
LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAg
IDIwLCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAg
ICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0
LCAgIDIzLCAgIDIzLAorICAgICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAg
IDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsCisgICAgICAgMjMsICAg
MjMsICAgIDksICAgMjYsICAgIDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAy
LCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAxLCAg
ICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAs
ICAgIDAsICAgMjQsICAgMjYsICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCisg
ICAgICAxNTksICAxMTIsICAgMjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjks
ICAgMzYsCisgICAgICAgNDYsICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAg
IDAsICAxNTksICAgODQsCisgICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTks
ICAxNTksICAxNTksICAxNTksICAxNTksCisgICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAg
IDAsICAxNTksICAgNzMsICAgMzIsICAgNTYsICAgODMsCisgICAgICAgOTUsICAgNjgsICAgIDAs
ICAgMzEsICAxNTksICAxNTksICAxNTksICAgMTksICAgIDAsICAxNTksCisgICAgICAxNTksICAx
NTksICAxNTksICAgIDAsICAxNTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCisgICAg
ICAgIDAsICAxMTcsICAgNTIsICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAx
MTIsCisgICAgICAxMjAsICAxMjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIK
KyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAg
IHsgICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAg
ICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAg
IDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQz
LCAgIDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDks
ICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAg
MTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUs
ICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCisg
ICAgICAgMzYsICAgMzksICAgNTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQs
ICAgNDAsCisgICAgICAgNjEsICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAg
NDYsICAgNDcsICAgNzYsCisgICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAs
ICAgNTAsICAgNTEsICAgNTAsICAgNTIsCisgICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAg
NTgsICAgNjIsICAgODEsICAgODEsICAgODEsICAgNTAsCisgICAgICAgNDksICAgNDksICAgNjMs
ICAgNjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgsICAgNjYsICAgNTAsCisgICAgICAgNTAsICAg
NjcsICAgNjksICAgNjcsICAgNjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCisgICAg
ICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAg
NTAsCisKKyAgICAgICA4MywgICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4
MywgICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4Miwg
ICA4MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3
OSwgICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwg
ICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAy
OCwgICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKKyAgICAg
ICA3MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mwor
ICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAg
IHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1
LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAg
IDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAg
ICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAg
IDIwLAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDcz
LCAgIDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAg
IDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQz
LCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAg
IDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgNzQsICAg
NzQsICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCisgICAg
ICAgNTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAg
NjcsCisgICAgICAgNjksICAgNjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIs
ICAgNzIsICAgMTUsCisgICAgICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAg
ODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODYsICAgMTAsICAgIDksICAgODYsICAgODYsCisgICAgICAgODcsICAgIDcsICAgODcsICAg
ODcsICAgODcsICAgODgsICAgODgsICAgIDUsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
CisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworLyogVGhlIGlu
dGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1
c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVq
ZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9i
dXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250
YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFz
ZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoK
K2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisK
K0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3Bh
cnNlci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdu
b3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisv
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
aXZlcy4KKyAgICBpZiAoeXlleHRyYS0+bGluZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNz
aWduKDEsIHl5dGV4dFswXSk7CisgICAgICAgIHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNl
IHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAg
fQorfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsK
K30KKwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3Ig
LntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFs
aWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURf
TlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0
aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZykpOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
RVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOwor
fQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9C
UkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNT
SUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdI
VF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRb
MF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxl
YWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2Fu
IG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87CisgICAgeXls
dmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVu
ZykpOworfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlf
U1RBVEVfRU9GKENPTU1FTlQpOgoreworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZv
a2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRv
a2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7Cisg
ICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAg
IGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlm
IChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAg
ICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4
TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsg
eXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5
eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAo
WVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGlu
ZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQor
ICAgIHl5dGVybWluYXRlKCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQ
CitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyog
QW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJ
aW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4
dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5l
dyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBo
YXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5l
dyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUg
dG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFu
ZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywg
YmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3Np
Ymx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBz
b3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRl
c3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0
IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBo
YXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2Ug
YWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1
ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQo
KS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVh
bGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0
OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5u
ZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVM
CisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBk
b2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGph
bW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQg
YmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKwor
CQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5
eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwor
CisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwu
ICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQor
CQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0
X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxF
OgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJ
CQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVz
ZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhh
dmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlf
Y19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBp
dHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJu
IHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkg
KiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlf
U1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJ
CWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJ
CWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJ
CXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJ
CXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1Rf
TUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWct
Pnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsK
KwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVs
dDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVy
cm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwor
CQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHBwbGV4ICov
CisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgor
ICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNU
X0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5p
bmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9m
IGZpbGUKKyAqLworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsK
KwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAo
IHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBz
Y2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBE
b24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYg
KCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkK
KwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwor
CQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9B
Q1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBz
b21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkg
Ki8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0
byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFy
dCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9w
IC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19t
b3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElO
RyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVy
biBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQor
CQl7CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90
b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdy
b3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1
ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKworCQkJ
aW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+
eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJ
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdf
c2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4Owor
CQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9
IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJ
CQkJCXBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5
eXNjYW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9u
J3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9j
aF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIg
aW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlf
Y2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsK
KworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51
bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4g
Ki8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVt
YmVyX3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKworCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJ
CX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3Rv
X21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09G
X0ZJTEU7CisJCQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQor
CQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5H
OworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47
CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRo
ZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlf
c2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXln
LT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWctPnl5X25f
Y2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKiB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hh
ciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlw
ZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQorCQl7
CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgq
eXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7
CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQl5eV9jID0geXlf
bWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJ
CX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5z
IC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICog
c3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRl
ICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlf
c3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJl
Z2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGlu
ZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVm
X3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlf
Y3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJ
CX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJ
CXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkg
eXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOworCisJcmV0dXJu
IHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX0lO
UFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0
ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBF
T0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4g
d2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9j
X2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19i
dWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5
X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkr
K3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNj
YW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBU
aGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBh
Y2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJ
CQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4g
IEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRl
ci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRv
IEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBz
dGF0dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFM
TFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJ
CWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICgg
ISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsK
KyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vs
c2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJ
Y2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwlj
ID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQg
Y2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAq
LworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7
Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBz
d2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUg
QSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRp
dGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlu
cHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1
ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRj
aF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlz
IGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUo
KTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9
PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJ
CXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlz
IHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9u
bHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMg
Y2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4K
KwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRp
YyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5
eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJ
eXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lu
cHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisv
KiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBh
cmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVy
IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhl
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3Jl
YXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBw
YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlm
ICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBf
Y3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlf
Y2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4g
YmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJz
LgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUg
KyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJ
Yi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nh
bm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBw
YXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJ
aWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAv
KiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBw
ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVp
bml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxl
ZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBh
IHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVm
ZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlz
Y2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVy
ID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRf
YnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3Ig
dGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24n
dCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChi
ICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAg
ICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50
ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBh
bGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBi
ZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVz
dWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOwor
CisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1
ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0
aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4g
dGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlf
YnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5
X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRf
QlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQ
dXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVz
CisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUg
c3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBz
dGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9p
ZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOwor
CisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlz
IGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkv
KiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlp
ZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBw
cF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92
ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhl
IG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisK
KwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRf
QlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhl
IHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0
IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlm
ICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1
c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2Fu
bmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9p
ZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAg
Ki8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVv
ZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAo
ICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJ
CW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0
dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBh
cmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRy
YXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAor
CQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJ
CQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJ
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZl
cl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNo
YXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICog
QHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3
bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIg
fHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAg
IGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdv
dCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZ
WV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkg
LHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0g
c2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9w
b3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWIt
Pnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwli
LT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxs
X2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlw
cF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8q
KiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0
IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4K
KyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2Nh
biBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBw
cF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAK
KwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwor
fQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBi
eXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNv
cHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4K
KyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQg
dG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICov
CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMs
IHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JV
RkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbiwgaTsKKyAgICAKKwkvKiBH
ZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBF
T0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9j
KG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsg
aSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1Zltf
eXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiAp
CisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisK
KwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRo
cm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNk
ZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9l
cnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2
b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlM
VVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24g
MyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAor
CQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJ
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdo
aWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8g
c3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0
aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
LworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Cisg
ICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0
X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVt
biAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJF
TlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29s
dW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3Ry
ZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUg
KnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0Owor
fQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworeXlfc2l6ZV90IHBwZ2V0X2xlbmcg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBH
ZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4g
VGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNl
cl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9l
eHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVu
dCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVf
bnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMg
b25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGlu
ZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxp
bmVubyA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAq
IEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5w
dXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQor
ICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBi
dWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9
CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBj
dXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3Ry
ZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBw
X3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBw
c2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5
eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVn
IChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1
ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXls
bG9jICovCisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICByZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXls
dmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxf
cGFyYW07Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUg
KiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5
eWxsb2NfcGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4
X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBz
byBpdCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtl
IHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBs
aWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jv
cy4KKyAqLworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sK
KyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFM
OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlz
Y2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAg
ICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVh
c2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5
Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxz
ICk7Cit9CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkg
YXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0
aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0
aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQg
YnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rp
b24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRl
ZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBw
YWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4
dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cyApCisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRf
ZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3Ig
cmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1
Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAq
cHRyX3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRy
X3l5X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9y
IHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICov
CisKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+
eXlfY19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
IE5VTEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAg
IHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChG
SUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3Ig
ZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVk
IGJ5CisgICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8q
IHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNj
YW5uZXJzLiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAq
LworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5V
TEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kg
dGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nh
bm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0
aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFy
dF9zdGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxM
OworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9u
LXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNh
bGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMo
IHl5c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50
IG9ubHkpLiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5
c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGls
aXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlf
ZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsg
KytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJM
RU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsr
biApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3Np
emVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFs
bG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAq
KSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25z
IHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNl
IHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBi
ZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9t
CisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBj
b252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJl
dHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBw
cGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIg
KikgcHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisj
ZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tl
bml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQor
eworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXpl
cjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tl
bml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNv
bnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBp
bml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sK
KyAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixt
SGFuZGxlKTsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFy
dCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAg
IHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBt
Q29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRT
Y2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRy
YSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJl
c3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6
OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxM
OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE0MDZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1
ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBs
b2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJh
Y2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNl
IHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVk
IHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9u
IHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGlu
ZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9p
ZCBkZXN0cm95U2Nhbm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFu
ZGxlLgorICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTkla
RVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zYjhkNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwK
QEAgLTAsMCArMSwzMjQgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jh
c2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6
CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAor
CitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9w
YXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCisl
eworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNp
bmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBi
eSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBl
ZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxU
WVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxl
IChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZ
WV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4
dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQg
PSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5p
bnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0
aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdo
aWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2Fu
TG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5k
ZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAg
ICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXls
aW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2Fu
TG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6
ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKwor
JX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9u
IHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCislb3B0aW9uIHByZWZpeD0i
cHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgorJXggQ09N
TUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVOVElGSUVSICBbX2EtekEtWl1bX2Et
ekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQorCitERUNJ
TUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAt
N10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKKworRElHSVQgICAg
ICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0r
CitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4i
KQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisiLy8iW15cclxuXSoKKworICAgIC8q
IEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0g
bm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2lu
Z2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQorPENPTU1FTlQ+W14qXHJc
bl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KKzxD
T01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVH
SU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBv
ZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICBpZiAoeXlleHRyYS0+bGlu
ZVN0YXJ0KSB7CisgICAgICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgICAg
IHJldHVybiB5eXRleHRbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVu
bywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nKHl5dGV4dCwgeXlsZW5nKSk7CisgICAgfQorfQorCit7SURFTlRJRklFUn0geworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJ
REVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVY
QURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCisoe0RJR0lUfSt7RVhQT05F
TlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNP
TlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJ
VH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKyAgICAvKiBSdWxlIHRvIGNhdGNo
IGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCisoe0RJR0lUfStbX2EtekEtWjAt
OS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsKKyAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGlu
ZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4
dCwgeXlsZW5nKSk7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVD
OworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9
CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorIl5eIiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOwor
fQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsK
K30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047
Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9B
U1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1Jf
QVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsK
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07
Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwor
e05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicp
OworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+
cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5v
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHl5dGV4dCwg
eXlsZW5nKSk7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5v
dCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3Ig
RU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5w
dXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9j
OworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwor
ICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8g
V2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUK
KyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0g
c0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRl
eE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsK
KyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAg
ICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8s
IHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Cisg
ICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rv
a2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDAp
Cit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5p
emVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRv
a2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAg
IGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBt
Q29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJu
IGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQor
eworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5sb2NhdGlv
biwgbUhhbmRsZSk7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5l
U3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisK
KyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7Cisg
ICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjpp
bml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRf
ZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tl
bml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAg
ICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUg
PSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFy
c2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmluZGV4IDViMzJmNzEuLmU5YzcwYjEgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L2dlbmVyYXRlX3BhcnNlci5zaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKQEAgLTEsMjcgKzEsMjYg
QEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0jIEdlbmVyYXRlcyBHTFNMIEVTIHBy
ZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBhbmQgcHBfdGFiLmNwcAorIyBHZW5l
cmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgogCiBydW5f
ZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1dF9zb3VyY2U9JHNj
cmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3Nv
dXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0k
b3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5fYmlzb24oKQogewotaW5wdXRfZmls
ZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCi1v
dXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0tbm8tbGluZXMgLS1z
a2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRf
c291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291
cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0t
b3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHNjcmlwdF9kaXI9JChkaXJu
YW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggcHAKLXJ1bl9iaXNv
biBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jpc29uIEV4cHJl
c3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyN2NhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubAorKysg
L2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlz
IGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAg
ICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAg
ICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGls
ZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJl
c3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0
ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0l
fQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24g
eXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVvcHRpb24g
c3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0cmEtdHlwZT0icHA6OkNvbnRl
eHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAgICAgXntIU1BBQ0V9KiN7SFNQQUNF
fSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKLVBVTkNUVUFUT1IgIFtdWzw+
KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTld
KgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NPTlNUQU5UICAw
W3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAgICAgICBbMC05XQotRVhQT05FTlRf
UEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElH
SVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0KLXtIQVNIfSB7IHJldHVybiBI
QVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS9bIFx0XG5dIHsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJ
RVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci17SEFTSH11bmRlZntIU1BB
Q0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlmIHsgcmV0dXJuIEhBU0hfSUY7
IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLXtIQVNIfWlmbmRlZiB7IHJl
dHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVybiBIQVNIX0VMU0U7IH0KLXtI
QVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1lbmRpZiB7IHJldHVybiBIQVNI
X0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsgfQotCi17SEFTSH1lcnJvciB7
IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyByZXR1cm4gSEFTSF9QUkFHTUE7
IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQote0hBU0h9dmVy
c2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxpbmUgeyByZXR1cm4gSEFTSF9M
SU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3Ry
aW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLQote0RFQ0lN
QUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Ci0g
ICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJB
Q1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5zdmFsID0g
bmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RB
TlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRbMF07IH0KLQotWyBcdFx2XGZd
KyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewotICAgICsreXlsaW5lbm87IHl5
Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi08Kj48PEVPRj4+ICAgICB7
IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUo
Y29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMg
b2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAgLy8gV2Ug
anVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIgJiYgKGxl
biA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpzdHJpbmcq
IG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLSAg
ICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQnKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBpICsgMSwg
bGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
QVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1p
bnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50
IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAgICAgICAg
ICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0gICAgICAg
ICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0gMCwgZmls
ZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24oeXlnZXRfbGluZW5vKG1M
ZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4
KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9uKGxpbmUs
IGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4
U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJv
clVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBS
ZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1i
b29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBOVUxMKTsK
LQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4ZXIpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIp
OwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55IGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTUxOTNhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55CisrKyAvZGV2L251bGwKQEAg
LTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9z
b2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJ
RlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNo
LAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xh
bmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2Rl
ZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotJX0K
LQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgotJWxvY2F0aW9ucwotJXBhcnNlLXBh
cmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9uIHsKLSAgICBpbnQgaXZhbDsKLSAg
ICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2Vu
VmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAs
IFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZ
UEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVz
aENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsK
LXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwot
JX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBI
QVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hfRU5ESUYgREVGSU5FRAotJXRva2Vu
IEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJT04gSEFTSF9WRVJTSU9OIEhBU0hf
TElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkogSEFTSF9ERUZJTkVfRlVOQwotJXRv
a2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RBTlQgSURFTlRJRklFUgotJXR5cGUg
PGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0
eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1lbnRfbGlzdCBjb25kaXRpb25hbF9s
aXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAvKiBlbXB0eSAqLwotICAgIHwgaW5w
dXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xfbGluZQot
OwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0
b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVu
ZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgIH0K
LTsKLQotY29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicKLSAgICB8IEhBU0hfREVGSU5FX09C
SiByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhA
MS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAkMSwgTlVMTCwgJDIpOwotICAgIH0K
LSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRlcl9saXN0ICcpJyByZXBsYWNlbWVu
dF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5l
LCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7Ci0gICAgfQotICAgIHwgSEFTSF9V
TkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCQy
KTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAg
IHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9
Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRp
b25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQot
ICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlv
bmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQot
ICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFT
SF9FTFNFICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBv
cENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQotICAgIHwgSEFTSF9FUlJPUiAnXG4n
Ci0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4nCi0gICAg
fCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5FICdcbicKLTsKLQotcmVwbGFjZW1l
bnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IHRva2VuX2xp
c3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0g
ICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAg
ICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklF
UiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlzdCAnLCcgSURFTlRJRklFUiB7Ci0g
ICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMy5m
aXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0KLQotY29uZGl0aW9uYWxfbGlzdAot
ICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0
b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbmFs
X2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+
cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xpc3QKLSAgICA6IHRva2VuIHsKLSAg
ICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQx
KTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsKLSAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi1jb25kaXRpb25hbF90b2tlbgot
ICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0gICAgfCBERUZJTkVEICcoJyBJREVO
VElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsKLQotdG9rZW4KLSAgICA6IG9wZXJh
dG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsICQxLCBOVUxM
KTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9r
ZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgRkxPQVRf
Q09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxP
QVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQg
PSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKTsKLSAgICB9Ci07
Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsgfQotICAgIHwgJ10nIHsgJCQgPSAn
XSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+JzsgfQot
ICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7ICQkID0gJyknOyB9Ci0gICAgfCAn
eycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAnfSc7IH0KLSAgICB8ICcuJyB7ICQk
ID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQotICAgIHwgJy0nIHsgJCQgPSAnLSc7
IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsgfQotICAg
IHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcg
eyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7IH0KLSAgICB8ICd+JyB7ICQkID0g
J34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAgIHwgJyEnIHsgJCQgPSAnISc7IH0K
LSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycgeyAkJCA9ICc7JzsgfQotICAgIHwg
JywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZv
aWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4
dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxC
bG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wg
Q29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNl
KHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcxN2U3Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNjgg
KzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCIKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAot
Ci0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZM
RVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9G
TEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUK
LSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2Vu
ZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBp
bGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAq
LwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJy
bm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4g
Ki8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVY
SU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVz
Lmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChf
X1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5
IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRp
bnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQg
dHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERD
X0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVm
IGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBl
ZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90
OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91
aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRl
ZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsK
LSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0j
aWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0j
ZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAg
KC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4g
ICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0j
ZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQx
Nl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNp
Zm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2
NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAg
ICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZf
TUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2Rl
ZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5k
aWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29u
c3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9D
T05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9f
U1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQot
I2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBkZWZpbmVkIChfX1NURENfXykgKi8K
LSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlfVVNFX0NPTlNUCi0jZGVm
aW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QKLSNlbmRpZgotCi0vKiBS
ZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9OVUxMIDAKLQotLyogUHJv
bW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5z
aWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWdu
ZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBh
biA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJsZSBjYXN0LgotICovCi0j
ZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykK
LQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5F
Ul9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBlZGVmIHZvaWQqIHl5c2Nh
bl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUg
Ymlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nh
bm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmluZSB5eW91dCB5eWctPnl5
b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2RlZmluZSB5eWxlbmcgeXln
LT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgotI2RlZmluZSB5eWxpbmVu
byAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCi0jZGVmaW5lIHl5Y29s
dW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKLSNkZWZpbmUgeXlf
ZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRlciBhIHN0YXJ0IGNvbmRp
dGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCi0gKiBi
dXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhl
ICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNkZWZpbmUgQkVHSU4geXln
LT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0
YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKLSAqIHRvIEJFR0lOIHRv
IHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4Ci0gKiBj
b21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEp
IC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rpb24gbnVtYmVyIGZvciBF
T0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmluZSBZWV9TVEFURV9FT0Yo
c3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0vKiBTcGVjaWFsIGFjdGlv
biBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwotI2RlZmluZSBZWV9O
RVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2RlZmluZSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwotI2lm
bmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAotI2VuZGlmCi0KLS8q
IFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVy
IGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZpbmUgWVlfU1RBVEVfQlVG
X1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCi0KLSNp
Zm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9C
VUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NU
QVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSNkZWZpbmUg
RU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAg
ICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5f
bWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhl
IGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291
bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNz
KCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlv
biBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3Ci0gICAg
ICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwg
YmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJl
Z2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgotICAgICAqLwotICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAg
ICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5
bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLSAgICAgICAgICAg
IH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVk
IGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwotI2RlZmluZSB5eWxlc3Mo
bikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAg
ICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXls
ZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJ
T047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAo
IDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5
c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLSNlbmRpZgotCi0jaWZu
ZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZF
Ul9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAgIHsKLSAgICBGSUxFICp5eV9pbnB1
dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyogaW5wdXQgYnVmZmVyICov
Ci0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1
dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3Qg
aW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAg
eXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh
ZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgot
ICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0
aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4g
cmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICog
ZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOwotCi0gICAgLyog
V2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5k
Ci0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8g
dXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0
b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNoIG5ld2xpbmUuCi0gICAgICovCi0g
ICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyogV2hldGhlciB3ZSdyZSBjb25zaWRl
cmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAgICAqIElmIHNvLCAnXicg
cnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQotICAgICAq
IG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwotCi0gICAgaW50IHl5X2JzX2xpbmVu
bzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRo
ZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0
aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAg
ICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAgIGludCB5eV9idWZmZXJfc3RhdHVz
OwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEK
LSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRl
eHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9Q
RU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICogc3RpbGwg
aGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0gICAg
ICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0dWFsbHkg
c2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICogKHZpYSBw
cHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0g
ICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAgICovCi0j
ZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAgICB9OwotI2VuZGlmIC8qICFZWV9T
VFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nl
c3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICogZnV0dXJlIHdlIHdhbnQgdG8g
cHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0
ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KLSAqLwot
I2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZl
cl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQotCi0vKiBT
YW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBi
dWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZv
ciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQotCi12b2lk
IHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lk
IHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpm
aWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZGVsZXRlX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9mbHVz
aF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQg
cHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJ
TEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZF
UiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKLQotWVlfQlVG
RkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25z
dCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBw
X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUg
eXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0
aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0g
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFj
dGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAotICAgIHsgXAot
ICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRf
Ym9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAqLwotCi0j
ZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5z
aWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwotCi0jZGVm
aW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90
IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1td
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0
ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0
aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBc
Ci0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxlbmcgPSAoc2l6ZV90KSAo
eXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotICAg
ICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLQotI2RlZmlu
ZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAyNAotLyogVGhpcyBz
dHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAgYnV0IGl0cyBwcmVzZW5jZSBp
cyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwotICAgIHsKLSAgICBmbGV4X2lu
dDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0gICAgfTsKLXN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1XSA9Ci0gICAgeyAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIsICAgMjAsICAgMjAsICAgMTgsICAg
MTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgMjEsICAgMTksICAgMTksICAgMTgs
ICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAg
IDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMTksICAgMTcs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgIDksICAgIDgsICAgIDAsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAg
IDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMsICAgIDQsICAgIDAsICAgIDAsICAg
IDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAgICAgMywgICAgMCwgICAxNCwgICAg
MAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9Ci0g
ICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDIsICAg
IDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAgIDEsICAgIDcsCi0gICAgICAgIDUs
ICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUsICAgMTAsICAgMTEsICAgMTEsCi0g
ICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAgMTIsICAgIDUsICAgIDUs
ICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0gICAgICAgIDUsICAgIDEsICAgIDUs
ICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMsICAgMTgsCi0KLSAgICAgICAxOSwg
ICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwgICAyMywgICAyNCwgICAyNSwKLSAg
ICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAzMiwgICAxNSwg
ICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzM0XSA9Ci0gICAgeyAgIDAsCi0g
ICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEs
ICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDcsICAgIDUsICAg
IDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcs
ICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDcsICAgIDcKLSAgICB9IDsK
LQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTExXSA9Ci0gICAgeyAgIDAs
Ci0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEsICAxODUsICAxODUsICAgMjEsICAg
MjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAgNzEsICAgMTIsICAgMzIsICAgMzQs
ICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxNjIsICAgNjQsICAg
IDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAxNTcsICAxNTAsICAxNTIsICAxNTcs
ICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQsCi0gICAgICAgNjIsICAxNTUsICAx
NDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAxMzksICAgNzYsCi0gICAgICAgODUs
ICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUsICAxNDEsICAxNDAsICAxNDAsCi0g
ICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAxMjcsICAxODUsICAxODUsICAxMzEs
ICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUsICAxMjIsICAxMjUsICAxMjIsICAx
MjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAxODUsICAxMjAsICAxMTMsICAxMjcs
ICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUsICAxODUsICAxMDUsICAgNzYsICAg
ODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0KLSAgICAgIDE4NSwgIDEwMywgIDE4
NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEyNiwgIDEzMgotICAgIH0gOwotCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzExMV0gPQotICAgIHsgICAwLAotICAg
ICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA3LCAgMTA3LCAgICA5
LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2LCAgMTA2LCAgMTA0LCAgIDE0LCAg
IDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA2
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAg
MTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA5LCAg
MTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMTAsICAxMDQsICAg
IDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAg
NCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAgNywgICAgNywgICAgOCwgICAgOSwK
LSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgIDEwNCwgICAxMiwgICAg
NCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAxNCwgICAgNywgICAgNywgICAgOCwg
ICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgIDEwNCwgIDEwMywgICAx
MiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAyNSwgICAyMCwgICAxNSwgICAyMSwg
ICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwKLSAgICAgICAzNSwgICAzNiwgICAz
NSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICA5OSwKLSAgICAgICAyMSwg
ICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwgICAxNSwgICA0MSwgICAyNiwKLSAg
ICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAzNywgICAzNywgICA1MCwgICA0NCwg
ICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwgICA1OSwgICA1MSwgICA1MSwgICA1
MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAzMCwgICAzMSwgICA1MSwgICA1MSwg
ICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3LCAgIDMzLCAgIDM0LCAgMTAxLCAg
MTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAotICAgICAgIDExLCAgIDExLCAgIDEx
LCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAg
IDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDk4LCAgIDkzLCAgIDkyLAotICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAg
IDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg1LCAgIDg0LCAgIDgz
LCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAg
IDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAgIDY5LCAgIDY4LCAgIDY3LCAgIDY2
LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAgICAgIDU4LCAgIDU3LCAgIDU2LCAg
IDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDQ1LAotICAgICAgIDQwLCAgIDM5
LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sy
MTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgNSwgICAxNSwg
ICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAgOCwg
ICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwgICAgOSwgICAgOSwgICAgOSwKLSAg
ICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAxNiwgICAgOSwgICAxNywgICAxOSwg
ICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwgICAyMCwgICAyMCwgICAzNiwgICAz
NiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAxMCwgICAxMCwgICAxMCwgICAyNSwg
ICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwgICAxMCwgICAxNCwgICAyOSwgICAz
NywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICA5NSwg
ICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwgICAxNCwKLSAgICAgICA0MSwgICA0
NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAxNCwgICA5OCwgICA5OCwKLQotICAg
ICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAyLCAgIDkzLCAgIDkwLCAgIDg5LCAg
MTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA2
LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3LCAgMTA3LCAgMTA4LCAgMTA4LCAg
MTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAgMTA5LCAgMTA5LCAgMTEwLCAgMTEw
LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAgICAgIDgyLCAgIDc5LCAgIDc4LCAg
IDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAgIDcwLAotICAgICAgIDY5LCAgIDY2
LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYwLCAgIDU5LCAgIDU4LAotICAgICAg
IDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2
LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5LCAgIDM0LCAgIDMzLCAgIDMyLCAg
IDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotLyogVGFibGUg
b2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzI0XSA9Ci0gICAgeyAgIDAs
Ci0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBk
ZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGlj
aCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9k
ZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCi0j
ZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAot
LyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNp
ZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSNp
bmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRl
ICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5
eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4g
Kz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmlu
ZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEt
PnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRy
YWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSNkZWZpbmUgSU5JVElB
TCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29udGV4dCoKLQotLyogSG9sZHMgdGhl
IGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3QgeXlndXRz
X3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICov
Ci0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBhcmUgdGhl
IHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9idWZmZXJf
c3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXplX3QgeXlf
YnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZWV9CVUZG
RVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0g
ICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25fY2hhcnM7Ci0gICAgaW50IHl5bGVu
Z19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAgaW50IHl5
X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5
X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50
ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5l
bm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0X3I7Ci0g
ICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZWVNUWVBF
ICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQg
c3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQ
RSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBz
ZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgotICAgIAot
ICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgcHBsZXhfaW5p
dCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFf
VFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRo
b2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJh
bnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBsZXhfZGVzdHJveSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfb3V0
ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGVu
ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
dm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBw
cHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAg
IAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFs
bCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24gMS4KLSAq
LwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAi
QyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJuIGludCBw
cHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiB5
eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNo
YXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURf
U1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2Fu
X3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRlZiBf
X2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNl
bHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotCi0j
ZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCBuZXdfc3RhdGUgLHl5
c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAg
dXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUg
WVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFz
dCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwot
LyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0
IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVD
SE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMg
aW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh
ZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVm
IFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gICAg
ICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBpbnQgbjsgXAotICAgICAg
ICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAgICAgICAgICAgKGMgPSBn
ZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAgICAgICAgICAgIGJ1
ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4nICkgXAotICAgICAgICAg
ICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gRU9GICYmIGZlcnJv
ciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4
IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47IFwKLSAgICAgICAgfSBc
Ci0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgIHdo
aWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJy
b3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgaWYoIGVycm5vICE9IEVJ
TlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgICAgICAgICAg
YnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGVycm5vPTA7IFwKLSAg
ICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfVwK
LVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVz
YWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2FudCBhbiBl
eHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBz
b21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgot
ICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZ
X05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25k
aXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZp
bmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZhdGFsIGVy
cm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9GQVRBTF9FUlJPUiht
c2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotLyogZW5kIHRh
YmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KLQotLyogRGVm
YXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1
c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZuZGVmIFlZX0RFQ0wK
LSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCBwcGxleCBcCi0gICAgICAg
ICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKLSAgICAg
ICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFt
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICovCi0KLS8qIENvZGUg
ZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQg
eXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZX1VTRVJfQUNUSU9O
Ci0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBleGVjdXRlZCBhdCB0
aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNkZWZpbmUgWVlfQlJF
QUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBpZiAoIHl5
bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5nIC0gMV0gPT0gJ1xuJyk7IFwKLSAg
ICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBk
b2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRl
X3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2Jw
OwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFt
OwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0gICAgaWYgKCAheXlnLT55eV9pbml0
ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNF
Ul9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0gICAgICAgIGlmICggISB5
eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qg
c3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlpbiApCi0gICAgICAgICAgICB5eWlu
ID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAgICAgIHl5b3V0ID0g
c3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLSAgICAgICAg
ICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIH0KLQotICAgIHdoaWxlICggMSAp
ICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0gICAgICAgIHsK
LSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgLyogU3VwcG9ydCBv
ZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAg
ICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBz
dGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAg
ICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0
YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwoteXlfbWF0Y2g6
Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlciBZWV9DSEFS
IHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAgICAgICAgIGlmICggeXlf
YWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAx
MDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5
eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsK
LSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlf
Y3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNj
ZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047Ci0K
LSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeXlsOwot
ICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0gICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxl
KDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwgaXMgdXNl
ZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotICAgICAgICBzd2l0Y2ggKCB5eV9h
Y3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgICAg
IGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAvKiB1bmRvIHRoZSBlZmZl
Y3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAgICp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyOgot
LyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyAv
KiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19idWZfcCA9
IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWlu
ICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFt
ZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0KLSAgICBZ
WV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZm
ZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0g
MTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0KLSAgICBZWV9CUkVBSwot
Y2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9VTkRFRjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9JRk5ERUY7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9F
TFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhB
U0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfTElORTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3Zh
bCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJ
RVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXls
dmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
SU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAot
ewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDIwOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjE6
Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLSAgICBZWV9CUkVB
SwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAot
ewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwot
fQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5h
dGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAotRUNITzsKLSAg
ICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAg
ICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIu
ICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2Nw
IC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBv
ZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICgg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9O
RVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcg
ZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0
IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2lu
dGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHBwbGV4
KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lz
dGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBn
bG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAg
ICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBh
Ci0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMg
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05P
Uk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0
IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBm
aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAq
IGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAg
ICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhl
Ci0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRo
ZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAo
IHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5V
TC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAg
ICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2
aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5v
dyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgp
IGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9l
c24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0
eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQg
amFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4g
bW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3Rh
dGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQot
ICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAg
ICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0g
Kyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5
X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAg
ICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5
c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRf
T0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCBwcHdyYXAo
eXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAg
ICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAg
ICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAq
IGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAg
KiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAg
ICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRF
X0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4
dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAg
ICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5
eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdv
dG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5u
ZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAg
ICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAg
ICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAot
ICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9u
IGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAv
KiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8qIGVuZCBvZiBwcGxleCAqLwotCi0v
KiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKLSAqCi0g
KiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9BQ1RfTEFT
VF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcg
ZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBm
aWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9w
dHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwotICAgIGludCByZXRfdmFs
OwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAgICBZWV9GQVRBTF9FUlJP
UigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1
ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
ZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1
ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9w
IC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28K
LSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0gICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNo
ZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0gICAgICAgICAgICAgKiBwcm9j
ZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9MQVNU
X01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAvKiBUcnkgdG8gcmVhZCBt
b3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2Yg
YnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAt
IHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9f
bW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihzb3VyY2UrKyk7Ci0KLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJf
RU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3Vh
cmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAgKiBqdXN0IGZvcmNlIGFuIEVPRgot
ICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKCBu
dW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRo
ZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAgICAvKiBqdXN0IGEgc2hvcnRlciBu
YW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAgIFlZX0JVRkZFUl9TVEFU
RSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29m
ZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2No
X2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXpl
ICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAgICAgICAg
ICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9IDI7Ci0K
LSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQotICAgICAgICAgICAgICAg
ICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotICAgICAgICAgICAg
ICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KLSAgICAg
ICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlf
Y2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAg
ICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotICAg
ICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNl
dF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfdG9fbW92ZSAt
IDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90b19yZWFkID4gWVlfUkVB
RF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7
Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAgICAgIFlZX0lOUFVUKCAo
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0g
ICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7Ci0KLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2No
YXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAg
ICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAg
ICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNU
X0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElORzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0gRU9C
X0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hh
cnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9z
aXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1i
ZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJl
YWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3Np
emUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAgeXlnLT55
eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4gcmV0X3Zh
bDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJl
Zm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJl
Z2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFy
ICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLSAgICB5
eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0gICAgZm9yICggeXlfY3AgPSB5eWct
Pnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlf
Y3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3Ag
PyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAgICBpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgIHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgfQotICAgICAg
ICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFb
KHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQp
IHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQot
LyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVM
IGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxf
dHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFy
IG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBj
aGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlf
YyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7
Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRl
OwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAg
fQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNf
amFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQotICAgIHJldHVybiB5eV9pc19qYW0g
PyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19JTlBVVAotI2lmZGVm
IF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5k
aWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0
aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAgKiBJZiB0aGlzIG9jY3Vy
cyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0gICAgICAgICAqIHZh
bGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0g
ICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5eWctPnl5X2NfYnVmX3Ag
PSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyogbmVlZCBtb3JlIGlucHV0
ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRl
eHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAg
ICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotICAgICAgICAgICAg
ICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotICAgICAgICAgICAgICAg
ICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAg
ICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAgICAgICAgICAgICAgICAg
ICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAgICAgICAgICAgICAgICAq
IHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAgICAgICAgICAgICAgICAq
IFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAgICAgICAgICAgICAgICAg
KiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAg
ICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotICAgICAgICAgICAg
ICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHBw
d3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU9GOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2Nw
bHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwot
I2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBjID0gKih1bnNp
Z25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICov
Ci0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwot
ICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0gICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9PSAnXG4nKTsKLSAgICBpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkKLSAgICAgICAgICAgCi0gICAgZG97
IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0KLSAg
ICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJ
bW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFt
IGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhl
IHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0
ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAo
eXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAg
ICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9
Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNj
YW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiog
U3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVy
IFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RB
VEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogVE9ETy4g
V2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0g
ICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAg
ICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09
IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dp
dGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25s
eSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBp
cyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0
IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsK
LX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5
eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1
dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBw
YXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91
YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAg
IFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAK
LSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7
Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAgICAvKiB5eV9jaF9idWYgaGFzIHRv
IGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCi0gICAg
ICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0gICAgICov
Ci0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7
Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHBwX2luaXRfYnVmZmVyKGIs
ZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogRGVzdHJveSB0aGUg
YnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZm
ZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2
b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgg
YiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVy
ZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFU
RSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHBwZnJlZSgo
dm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0gICAgcHBmcmVlKCh2b2lkICop
IGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEg
YnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBv
bmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkg
b3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotCi17Ci0gICAg
aW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIp
OwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIg
PSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9i
dWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0
aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0
IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAgaWYgKGIg
IT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOwotICAg
ICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9pc19pbnRl
cmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJk
IGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxs
IGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwg
dXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsKLQotICAgIC8qIFdlIGFsd2F5cyBu
ZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAg
ICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBj
YXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGItPnl5X2No
X2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1
ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAg
ICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1c2hlcyB0
aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKLSAqICB0
aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjawot
ICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgot
ICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwcHVz
aF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotICAgIC8qIFRoaXMg
YmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3Jt
YXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIC8qIE9ubHkg
cHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAgIGlmIChZ
WV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotICAgIC8qIGNvcGll
ZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwot
fQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJl
c2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwb3BfYnVmZmVy
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICghWVlfQ1VSUkVOVF9CVUZG
RVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
LSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5
X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAg
ICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUg
c3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQg
bGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYg
KCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24g
aXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAg
ICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBv
ZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0
IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAgICAgICB5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAg
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAgICB5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3Ig
YSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJh
cnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBp
ZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0K
LSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAgICAgICAgbWVtc2V0KHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3Np
emUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KLX0KLQotLyoqIFNldHVwIHRo
ZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZp
ZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVy
Ci0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZl
cgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRo
ZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0gICAgaWYg
KCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
Ci0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8K
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsgIC8q
ICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAgIGItPnl5X2J1Zl9wb3MgPSBiLT55
eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAwOwotICAgIGItPnl5
X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLSAg
ICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+eXlfYXRfYm9sID0gMTsKLSAgICBi
LT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwotCi0gICAg
cmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
YSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBA
ZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmlu
ZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBy
ZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICogQG5vdGUg
SWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRo
ZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlfQlVGRkVS
X1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4o
eXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwK
LSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhl
IGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5
Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNoYXIgKmJ1ZjsKLSAgICB5eV9z
aXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1
ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLSAgICBuID0gX3l5
Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8
IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXlieXRlc1tpXTsKLQotICAg
IGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAg
ICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9z
Y2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVm
ZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICogYXdheSB3aGVuIHdlJ3JlIGRvbmUu
Ci0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICByZXR1cm4gYjsK
LX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAgbmV3X3N0YXRlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID49
IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgIHl5X3NpemVf
dCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICs9IFlZX1NU
QVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0geXlnLT55eV9zdGFydF9zdGFja19k
ZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3Rh
Y2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHBhbGxvYyhu
ZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeXlnLT55
eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2b2lkICopIHl5Zy0+eXlfc3RhcnRf
c3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0
YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIG1lbW9yeSBl
eHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwotICAgICAgICB9Ci0KLSAgICB5eWct
Pnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyKytdID0gWVlfU1RBUlQ7Ci0K
LSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRl
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIC0teXlnLT55eV9zdGFydF9zdGFj
a19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJzdGFydC1jb25kaXRpb24gc3Rh
Y2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5
X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGljIGludCB5eV90b3Bfc3RhdGUgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5
Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNpZm5kZWYgWVlfRVhJVF9GQUlMVVJF
Ci0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgeXlfZmF0
YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
ICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZ
X0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBp
biBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxlc3Mobikg
XAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0
aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsg
XAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5
dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1
Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwK
LSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlv
bnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0
YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGxpbmUg
bnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWlu
dCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVy
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdl
dF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVy
biB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X2luICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdldCB0aGUgb3V0
cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5
eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9sZW5n
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsZW5nOwotfQotCi0vKiog
R2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEu
IFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgotICogQHBhcmFtIHVz
ZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgot
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRf
ZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJl
bnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5l
X251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogbGluZW5vIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xp
bmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXls
aW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCi0g
KiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlu
cHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkK
LSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8g
YnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1uID0gY29sdW1uX25vOwot
fQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUg
Y3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0
cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHNlZSBw
cF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3RyIDsKLX0KLQotdm9pZCBw
cHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAg
eXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQotdm9pZCBwcHNldF9kZWJ1
ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5X2ZsZXhfZGVi
dWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5
bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5
bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsdmFsID0geXlsdmFs
X3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9pZCBwcHNldF9sbG9jIChZWUxUWVBF
ICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsbG9jID0g
eXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQSSAqLwotCi0vKiBwcGxl
eF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwg
c28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFr
ZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRoYXQncyB3aHkgd2UgZXhw
bGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNy
b3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQotCi17
Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZB
TDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5
c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOwotCi0g
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwg
d2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxl
YXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5
eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFs
cyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5
IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVudGlvbiBvZiB0YWtpbmcg
dGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAotICog
dGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVk
IGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0
aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0gKiBUaGUgdXNlciBk
ZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBw
cGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdF9l
eHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2Jh
bHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKLQotICAgIHBwc2V0
X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwotCi0gICAgaWYgKHB0cl95
eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBh
bGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKLSAgICAK
LSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01F
TTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNldHRpbmcgdG8g
MHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4
MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXpl
b2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVm
aW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxz
ICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1l
IGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgot
ICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKLSAg
ICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5pdCA9IDA7Ci0g
ICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7
Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9z
dGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVmIFlZX1NURElO
SVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxzZQotICAgIHl5
aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRpZgotCi0gICAg
LyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJl
IGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwotICAgIHJldHVybiAwOwot
fQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50
cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxl
bWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBwcHBvcF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0g
ICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlv
biBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5l
ciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKLQotICAgIC8qIFJlc2V0
IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0
aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwotCi0g
ICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KLSAgICBw
cGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBOVUxMOwot
ICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KLSAq
LwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hh
ciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCi0gICAg
ICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1z
dGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyAr
K24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lkICpwcGFs
bG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmV0dXJu
ICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJlYWxsb2MgICh2b2lkICog
cHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgLyogVGhl
IGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAg
ICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQg
dGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mg
d2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93
IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9p
ZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2gg
ZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxv
YyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgcHBmcmVlICh2b2lkICogcHRyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNl
ZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVT
X05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBj
aGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUg
Zm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5l
ZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkp
OyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9
IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAg
ICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBp
IC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQo
bmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250
ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQg
PSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlu
cHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5y
ZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsK
LSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihwcGdldF9saW5lbm8obUxleGVyKSwg
JmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAg
ICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSks
bUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNpemUpOwot
Ci0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JVbmV4cGVj
dGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVy
cm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9vbCBDb250
ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBp
ZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICBw
cGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhN2I2YWEwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBC
aXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZ
YWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5
MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQot
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0
IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAg
Ki8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIg
d29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNr
ZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91ciBj
aG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2Vu
ZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgot
ICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0
IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdp
bGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRwdXQg
ZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGlj
ZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3BlY2lhbCBl
eGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAg
IHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRv
biB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUgb3Jp
Z2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJvbHMg
ZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAgIGlu
ZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZv
ciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRl
ZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlv
bnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBz
eW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BBQ0Ui
IGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlC
SVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04g
IjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAi
eWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQotCi0vKiBV
c2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBTdWJzdGl0
dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNl
IHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBwZXJyb3IK
LSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNkZWZpbmUg
eXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5eWxsb2Mg
cHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZ
WVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBz
byB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAq
LwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5E
RUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0g
ICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hf
RUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwK
LSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhB
U0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hf
TElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklO
RV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNU
QU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tl
bnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmlu
ZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRF
RiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVm
aW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJS
T1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAy
NjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVm
aW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNk
ZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZp
bmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2Vy
IGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQh
Ci0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+
bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwot
I2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGlu
ZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMg
dW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UK
LSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRv
a2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9U
QUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFs
OwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6
VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLQotICAg
IFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwg
YmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5l
IFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYm
ICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17
Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5l
OwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZ
UEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBF
X0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQot
Ci0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQot
ZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxl
eGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAg
ICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29u
dGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9u
YWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5j
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
ZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmlu
ZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAg
ICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1B
TExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9j
ICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBk
ZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NU
RExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0g
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJl
ZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlm
Ci0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZ
RVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAm
JiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19U
UklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZU1RZ
UEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQg
aXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFs
bG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQ
RSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25l
IGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01B
WElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBh
cnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4g
ZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAo
c2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQ
RSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkgQ09VTlQg
b2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwot
ICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05V
Q19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBc
Ci0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihG
cm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpICAgICAg
XAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5eWkgPSAw
OyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChGcm9tKVt5
eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZ
SUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMg
b2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlT
SVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVs
ZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2Yg
dGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0
aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FU
RShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICBcCi0g
ICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlu
ZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFY
SU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAg
ICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVy
IG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIKLS8qIFlZ
TEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAyNDcK
LQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5U
T0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVm
aW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVm
aW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0j
ZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5ERUZU
T0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlY
KSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZ
TUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFU
RVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAg
Ki8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAg
MCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQwLCAgICAg
MiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAgIDMyLCAg
ICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAgNDIsICAg
IDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAgICAyLCAg
ICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAzMCwg
ICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsKLQotI2lm
IFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9s
IG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAg
IDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAgICAzMCwg
ICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5LAot
ICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUsICAgIDc3
LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTksICAg
MTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywgICAxMTUs
ICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAotICAgICAx
MzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1LCAgIDE0
NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAt
MSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAgLTEsICAg
IDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwgICAgMjIs
ICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAgICAxNywK
LSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0LCAgICA1
MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA1LCAg
ICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEsICAgICA3
LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwKLSAgICAg
ICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAyMiwgICAg
LTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAgICAxNSwg
ICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1LCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAgIC0xLCAg
ICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNTUsICAg
IDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywgICAgMjEs
ICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAxOSwgICAg
LTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAgICAyNywg
ICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0LAot
ICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDMz
LCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAg
IDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAgLTEs
ICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAotICAgICAg
LTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0KLS8qIFlZ
UkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmlu
ZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAgICAg
IDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1LCAgICA4
NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAgMTAzLCAg
IDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE4
LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAxNDQsICAg
MTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAx
NzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwg
ICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5
MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAgMjAwLCAg
IDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlU
T0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUg
c3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRp
bmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNv
bnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSEFT
SCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNIX0lGTkRF
RiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVGSU5FRCIs
ICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhBU0hfVkVS
U0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVGSU5FX0ZV
TkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJRVIiLCAi
J1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCciLCAiJz4n
IiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIsCi0gICIn
JSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzonIiwgIic7
JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGluZSIsICJj
b250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlzdCIsICJj
b25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9rZW4iLCAi
dG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyog
WVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGlu
ZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2
IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAg
IDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3
LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAg
Mjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5MywgICAg
NjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAgICA0Nywg
ICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYxLCAgICAz
MywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0tIFN5
bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAgIDQ4LCAg
ICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAgICAgIDUx
LCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEs
ICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAg
NTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAgICA1Niwg
ICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4LCAgICA1
OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4
LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0vKiBZWVIy
W1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBy
dWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAg
ICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAg
ICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAgICAgMSwg
ICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEs
ICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8g
cmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBz
cGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRlZmF1bHQg
aXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0K
LXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgIDYsICAg
IDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0NSwKLSAg
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1Mywg
ICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAgICA4LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAgICAgIDE2
LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAs
ICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAgMCwgICAg
MTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAgICAgMCwg
ICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEwCi19Owot
Ci0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEKLX07Ci0K
LS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24g
ZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTU1Ci1z
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAgICA3Mywg
ICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAgMTQ1LAot
ICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEsICAgIDI4
LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAgIC0zLCAg
IC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAgMjksICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAgICAzNiwg
ICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05URVJNLU5V
TV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEsICAgIDYw
LCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUt
TlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwg
c2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAg
IG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMu
Ci0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVf
TklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewotICAgICAg
NTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3LCAgICA1
NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAgIDUwLCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAgICA2NSwg
ICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4LCAgICA3
OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAgIDQ5LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1MCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAg
ODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywKLSAg
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAg
ICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2MSwgICAg
MTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAgICAxNiwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwgICAgMjIs
ICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwgICAg
MjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAgICAgMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgODUsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsCi0g
ICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1
LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIg
b2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgNDgsICAg
ICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAg
ICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1NCwgICAg
NTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAgICAyMiwg
ICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIzLCAgICAy
MiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIsICAgIDIy
LAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAgMjUsICAg
IDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9rICAgICAo
eXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkK
LSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZp
bmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3Rv
IHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0KLQotLyog
TGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0
ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcg
b2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRl
ZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAgICBnb3Rv
IHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0j
ZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1kbyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5
bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXl0b2tl
biA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9QU1RB
Q0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAgICAxCi0j
ZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJS
RU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNl
dCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlv
dXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUgWVlSSFNM
T0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZ
WUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9s
aW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAoQ3VycmVu
dCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgXAotICAg
ICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsg
ICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5s
YXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChD
dXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5s
YXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4g
PSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywg
MCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9D
QVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlz
IG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25v
dwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRp
b25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZ
UEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAg
ICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAgICBcCi0g
ICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0gICAgICAg
ICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMgIGRlZmlu
ZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYKLSNlbmRp
ZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVu
dHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXls
dmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAo
Jnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVl
c3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUg
PHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZ
WUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAg
ICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1Zykg
ICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKLX0g
d2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkK
LQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5
bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBp
bnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3Qg
KiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGlj
IHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAs
IHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5
cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29u
c3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRp
ZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25w
KTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZ
WU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZh
bHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5
eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wg
b24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5
X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6
Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklM
RSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBw
OjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMp
Ci0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0p
OwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1l
W3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25w
KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmlu
dCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKLSAg
WVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNr
X3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRz
IHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9p
bnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlf
c3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAg
IHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3Rh
Y2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklO
VEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7
Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAg
ICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVn
KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9t
KSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQg
dGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQg
KFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNvbnRleHQq
IGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5
bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlMVFlQRSAq
eXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRp
ZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIs
ICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAgICAgeXly
dWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAg
Zm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmludGYg
KHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChz
dGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2
c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkg
KyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAo
c3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxl
KSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAg
ICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRl
eHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJz
ZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBw
YXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcg
Ki8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRp
dGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURF
QlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIn
cyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEgg
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
eXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAg
ICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19u
b3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAg
IT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8q
IEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0g
ICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVh
azsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJl
c1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBkb19ub3Rf
c3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0
cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVz
OwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBh
Ym91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RB
VEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhl
IHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAg
Y29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxk
IGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5h
cnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFY
SU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8K
LXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlz
dGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBp
ZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7
Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0p
OwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6
ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAg
ICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMg
dGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBv
ciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5
eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3Rpbmdb
XSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAi
IG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotICAgICAg
ICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlFUlJPUl9W
RVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2YgeXlvciAt
IDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAg
ICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRl
eGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/
IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNr
IGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsg
MTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xp
bSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0g
PSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1
bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyAr
K3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJS
T1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAgeXlz
aXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFd
ID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFyZ1t5eWNv
dW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFt
ZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6
ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5eWZtdCA9
IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5b3I7Ci0g
ICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlz
aXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEg
PCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9v
dmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3Vs
dCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0
aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhh
dmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBzdHJpbmcg
d2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5cCA9IHl5
cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAh
PSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9
PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRu
YW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAgICAgICAg
fQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAgICAg
IHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4geXlzaXpl
OwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUg
bWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVj
dCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxU
WVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZv
aWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29u
dGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZ
UEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0
KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNFICh5eWxv
Y2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVm
YXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3MgZnJv
bSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYg
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9p
ZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNl
IC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1p
bnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotCi0K
LQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwotCi0j
aWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5
cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRpZgot
I2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNl
Ci1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5k
aWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hh
cjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICov
Ci1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAg
Ki8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQgc3lt
Ym9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQgeXluOwot
ICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVy
cm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2st
YWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICov
Ci0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZv
ciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXlt
c2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2df
YWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFja3MgYW5k
IHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2
cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8g
bG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2lu
dGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdo
ZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBl
X2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZ
WVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBF
IHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBF
ICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQg
ZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUgWVlQT1BT
VEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQotCi0g
IFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxl
cyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAg
ICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxv
YzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNl
ZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBl
ZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRp
bmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwotICB5
eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9rZW4gdG8g
YmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2Fz
dGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQg
dGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhl
IHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5c3NwID0g
eXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19U
UklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNp
bmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xpbmUg
ICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOwot
I2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQ
dXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0g
eXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZh
bHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28g
cHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0K
LSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFj
a3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2Vk
IHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpF
X1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAg
IHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBV
c2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRo
ZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEg
PSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5
bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ss
IGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQg
anVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZp
bmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJt
ZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAo
Knl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAot
ICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAg
ICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0g
ICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBp
Zm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxz
ZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAgICBpZiAo
WVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAg
ICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUp
Ci0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0eXBlX2lu
dDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVu
aW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUp
KTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlT
VEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0gICAg
WVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAg
aWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9
Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5
c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAgICAg
IHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwg
IlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgbG9u
ZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAx
IDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwg
IkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQot
LyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6
Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0
ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24n
dCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQg
dG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0gIHl5biA9
IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBnb3RvIHl5
ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBk
b24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1Q
VFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlmICh5eWNo
YXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5n
IGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBpZiAoeXlj
aGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAg
fQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwot
ICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWws
ICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcg
dG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0
YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8
IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3RvIHl5ZGVm
YXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAgewotICAg
ICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5eWVycmxh
YjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICBp
ZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNo
aWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBzdGF0
dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAvKiBT
aGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0
aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hp
ZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikK
LSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5dnNwID0g
eXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50
IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07
Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEg
cmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNl
OgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwot
ICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1l
bnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0g
ICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4K
LSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJz
IHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29u
ZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMg
YQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQu
ICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRpb24u
ICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwot
ICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAg
Y2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4K
LSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAg
ICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5iZWdp
bigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICh5
eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgOToK
LQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICgzKV0p
LmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyldLnN2YWwp
LCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNw
WygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2c3BbKDEp
IC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUpIC0gKDYp
XS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAg
ICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBwdXNoQ29u
ZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0cnVlIDog
ZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAgICAg
ICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQo
KHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250
ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3OgotCi0g
ICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFj
ayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVS
LCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMyld
LnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4o
KHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMykgLSAo
MyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5
dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkg
PSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hf
YmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZl
Y3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSld
LnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5
eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAt
ICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFs
KSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElOVF9DT05T
VEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigo
eXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZzcFsoMSkg
LSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdbJzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzwn
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc+
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
KCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
JyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5p
dmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBv
ZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJP
TF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBP
UFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5
c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8q
IE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0
IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBi
YWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXlu
ID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAq
eXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0g
IGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290
byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxyZWFk
eSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYg
KCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZF
UkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9y
IikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJv
ciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYg
eXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAgICAgIFlZ
U0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5
YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgICAgIHl5
YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAhPSB5eW1z
Z2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXltc2cgPSAo
Y2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNnKQotICAg
ICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHsK
LSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2Yg
eXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNpemUgJiYg
eXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlzeW50YXhf
ZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgmeXlsbG9j
LCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAgICAgICB5
eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAgICAgICAg
aWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9
Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bGxvYzsK
LQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVk
IGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJv
ciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewot
ICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlm
ICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAgZWxzZQot
ICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAg
ICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0g
WVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9v
ay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwot
ICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGlj
aXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMg
bGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBh
bmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgot
ICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9y
bGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90
IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAot
ICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0g
MDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsK
LSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNv
ZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJs
YWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNy
ZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0geXlwYWN0
W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0gICAgICB5
eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5
eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5eXRh
YmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBj
YW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0geXlz
cykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwotICAg
ICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlzdGF0
ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAg
IHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwot
ICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisreXl2
c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyogVXNpbmcg
WVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgotICAg
ICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwotICBZWUxM
T0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5eWxzcCA9
IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9Q
UklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0
ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFi
OgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6
Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJmbG93
Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1
c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYK
LQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1QVFkp
Ci0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0gICAg
ICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8gbm90IHJl
Y2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAg
ICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0g
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQot
ICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5
eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sg
KDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAg
ICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlm
ICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgot
ICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0
KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlv
bmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12
b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5h
bWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsK
LSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8g
bmFtZXNwYWNlIHBwCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTFlZjgwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlr
ZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAw
LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBv
cHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0v
KiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRo
YXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24g
YW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwg
c28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3Ig
dXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBh
IHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBv
cHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVz
ZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0
byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdp
dGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlv
biB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lv
biAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQ
RQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5
bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBh
Ym91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0gMjU4LAot
ICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBIQVNIX0lG
REVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNFID0gMjYz
LAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0gICAgIERF
RklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJBR01BID0g
MjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9OID0gMjcw
LAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3MiwKLSAg
ICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0LAotICAg
ICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAgfTsKLSNl
bmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRF
RiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZp
bmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9F
TElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2NgotI2Rl
ZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFT
SF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9M
SU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hfREVGSU5F
X0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RB
TlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLSNpZiAhIGRlZmluZWQgWVlT
VFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNU
WVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6
VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTQ4
OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQ
RSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0K
LQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVE
Ci10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmly
c3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZ
UEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0
aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZ
UEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE2NGVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBf
dXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
UFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9y
IGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJp
dmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAg
ICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlm
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFjZTUwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQotI2lmbmRl
ZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0KLW5hbWVz
cGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAg
ICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0IERlbGV0
ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9pZCBvcGVy
YXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19IXwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RP
S0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8K
LQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKaW5kZXggODhkMTk2
Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKQEAgLTQ3LDUgKzQ3LDQg
QEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CiBpbnQg
SW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxl
ICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMp
OwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmFkNDNmOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5j
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jCkBAIC01OSw2ICs1OSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9sZXhlcl9nbHVlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogCiB0eXBlZGVm
IHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CkBAIC02Niw2ICs2Nyw4IEBAIHR5cGVkZWYgc3RydWN0
IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsKIAorc3Rh
dGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGludCBlb2Zf
c2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJldHVybiBF
T0Y7CkBAIC03Myw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGlu
dCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5w
dXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGljIElucHV0
U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wLCAwLCAw
IH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKTsKIApAQCAtMTI2LDYgKzEyOSwyNSBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAgICBy
ZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKKy8vIERlZmluZSB0aGlzIHRvIDEgdG8gdXNlIHRoZSBu
ZXcgbGV4ZXIuCisjZGVmaW5lIENQUF9VU0VfTkVXX0xFWEVSIDAKKworaW50IEluaXRTY2FubmVy
SW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyNpZiBDUFBfVVNFX05FV19MRVhFUgorICAgIElu
cHV0U3JjKiBpbiA9IExleGVySW5wdXRTcmMoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICBp
ZiAoIWluKSByZXR1cm4gMTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworI2Vsc2UKKyAg
ICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAg
ICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7
CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyNlbmRpZgorICAgIHJldHVybiAwOwor
fQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11
bHRpcGxlIHN0cmluZ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCmluZGV4IDIzM2QxZGMuLmI2N2Mx
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCkBAIC02OSw5ICs2OSw5IEBAIHR5cGVkZWYgc3Ry
dWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3Qg
KmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCi1pbnQgU2NhbkZyb21TdHJp
bmcoY29uc3QgY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0
aGUgc3RyaW5nIG1lbnRpb25lZC4KK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3Bw
LCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pOwogaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0
IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0
aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwordm9pZCBDUFBF
cnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBp
bnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRMaW5lTnVtYmVyKGludCk7CiB2b2lk
IFNldFN0cmluZ051bWJlcihpbnQpOwogdm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaAppbmRleCBjMTlmNzljLi4yMzIwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuaApAQCAtMTA1LDcgKzEwNSw3IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9j
LCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqQWRk
U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9sa2lu
ZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0
b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwotdm9p
ZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICopOwogCiAKICNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3Rva2Vucy5jCmluZGV4IGQ2NThjMTIuLmI5NGMwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwpA
QCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUu
aD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
ZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYgKzI2Niw4IEBAIGludCBSZWFkVG9r
ZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNoYXIgc3Ry
aW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwogICAgIGludCBsdG9rZW4sIGxlbjsKICAgICBj
aGFyIGNoOworICAgIGludCBiYXNlLCBhY2N1bTsKKyAgICBjaGFyIGNoX3ZhbDsKIAogICAgIGx0
b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICBpZiAobHRva2VuID49IDApIHsKQEAgLTMxNSwx
OCArMzE4LDQxIEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNU
QU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhf
U1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAg
ICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBs
UmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAn
WCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAg
ICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVh
ZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdo
aWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2Vy
KGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hf
dmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1
bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAg
ICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxw
cC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lu
dD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2Nf
aW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEwICs0
NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFtICpzLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAg
IGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgot
ICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXls
dmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIp
LCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAg
ICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXCIl
c1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CiAgICAgICAgICAg
ICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOwpAQCAtNDI3LDkgKzQ1Myw5
IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlw
ZXBwICogeXlsdmFscHApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0
ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
dG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwg
IiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks
ICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAppbmRleCA4NzY2ZGY5Li5kYmY0
YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmICFkZWZp
bmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0ggMQogCisjaW5jbHVkZSA8c3RkaW8u
aD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCiAKICNkZWZpbmUg
RU9GX1NZICgtMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWI1ODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJj
b21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgiCisKKy8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtu
b3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4s
IHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBh
cmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4KK3ZvaWQg
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsKKworICAgIC8v
IEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3VwcG9ydCB1
c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNvIHdlIGdlbmVy
YXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
VXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIsIHRyYXZl
cnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNoIHRpbWUg
d2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBhcmUg
bm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBpdGVyICE9IGdy
YXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAg
ICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgY2xlYXJWaXNp
dGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30K
Kwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVk
RnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAg
Zm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVn
aW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5k
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAg
ICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOworICAgICAgICBi
ZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAg
ICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5vdCBwZXJt
aXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
OjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsrbU51bUVycm9y
czsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihu
b2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBGSVhN
RShtdnVqb3ZpYyk6IFdlIHNob3VsZCByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMg
ZnJvbSBiZWluZyB0ZXh0dXJlIGNvb3JkaW5hdGVzIAorICAgIC8vIGluIGFsbCBhdmFpbGFibGUg
c2FtcGxpbmcgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgaW4gR0xTTCBFUy4KKyAgICAvLyBUaGlzIGlu
Y2x1ZGVzIG92ZXJsb2FkZWQgc2lnbmF0dXJlcyBvZiB0ZXh0dXJlMkQsIHRleHR1cmVDdWJlLCBh
bmQgb3RoZXJzLgorICAgIGlmIChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5n
ZXROYW1lKCkgIT0gInRleHR1cmUyRChzMjE7dmYyOyIgfHwKKyAgICAgICAgcGFyYW1ldGVyLT5n
ZXRBcmd1bWVudE51bWJlcigpICE9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGJlZ2luRXJy
b3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgbVNpbmsgPDwgIkFu
IGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJl
IHRoZSBzZWNvbmQgYXJndW1lbnQiCisgICAgICAgICAgPDwgIiBvZiBhIHRleHR1cmUyRCBjYWxs
LlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVj
dGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVj
dGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9u
IGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFs
IHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJ
bnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50
ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBv
biBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBs
b2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAg
ICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5
MzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCkBAIC0wLDAgKzEsMzkg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFH
TUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9G
UkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOwor
CitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIDogVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IG1TaW5rKHNpbmspCisgICAgICAgICwgbU51bUVy
cm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRl
bmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51
bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1l
bnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNl
bGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExv
b3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2Fs
T3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJ
bnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisKKwlUSW5mb1NpbmtCYXNl
JiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAg
aWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgKyttTnVtRXJy
b3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgbVNpbmsu
bG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNpbmsgPDwgIlNhbXBsZXJzIGFy
ZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9U
SU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09NUElMRVJf
VElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisK
K2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jh
c2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2Up
CisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisKKyAg
ICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsgcm9vdC0+dHJh
dmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51bUVycm9yczsg
fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKK3ByaXZh
dGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJvcnM7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlO
R19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAK
aW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIyIEBAIGJvb2wgRGlzcGxheTo6
Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7CiB9CiAKKy8vIHdlIHVz
ZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8vIHdlIGFsc28gd2FudCBO
VUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkg
RkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3MuaHRtbAor
Ym9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICBEM0RE
SVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNw
bGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICBib29sIGludHog
PSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVf
VEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNERk1UX05V
TEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJvb2wgRGlzcGxheTo6Z2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkK
IHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CkBAIC0xMDgxLDcgKzEw
OTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0
CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNwbGF5OjpnZXRU
ZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3BsYXk6OmdldFRl
eHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwp
CiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJl
UG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQ
VEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAyODQzMS4uNGY3ZGJkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKQEAgLTc4LDEw
ICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7CisgICAgdmly
dHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0RldmljZUxvc3QoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCmluZGV4
IDA3YWQzY2YuLmNhMmNlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmNwcApAQCAtNTY1LDYgKzU2NSw4IEBAIEVHTGludCBTdXJmYWNlOjppc1Bv
c3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAogICAgIHJldHVybiBtUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkK
QEAgLTU3NSw2ICs1NzcsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVy
VGFyZ2V0KCkKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkK
IHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmluZGV4IDY2Y2Q1YzAuLjgyMGY2NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcApA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMxMSw3IEBAIHZvaWQgQ29udGV4dDo6
bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
CiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2
VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4
dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAg
bVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBt
RGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOwogCiAgICAgICAgIG1TdXBwb3J0czMy
Yml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKIApA
QCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAg
ICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwogfQogCit2b2lkIENvbnRleHQ6Om1hcmtE
eFVuaWZvcm1zRGlydHkoKQoreworICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworfQorCiB2
b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCiB7CiAgICAgaWYgKG1SZXNldFN0cmF0ZWd5
ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCkBAIC0xNjQ2LDYgKzE2NTMsMTIgQEAg
Ym9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCiAg
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpw
YXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05V
TV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IDE7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAg
ICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNzM3LDYg
KzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5h
bWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudQogICAgICAgY2FzZSBHTF9URVhUVVJF
X0JJTkRJTkdfMkQ6CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKICAg
ICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKKyAgICAgIGNhc2Ug
R0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgY2FzZSBHTF9QUk9HUkFN
X0JJTkFSWV9GT1JNQVRTX09FUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKQEAgLTE4MzUsMTMgKzE4NTAsMzEgQEAg
Ym9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZhbHNl
KTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBjb2xvciBhdHRhY2htZW50IHdlIG11
c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50CisgICAgLy8gdG8ga2VlcCB0aGUg
RDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRlcHRo
IHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7
CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
bmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXROdWxsQ29sb3JidWZmZXIo
KTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBF
UlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZvciBGQk8uIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJn
ZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOwogICAgIGlmIChyZW5k
ZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCiAgICAgewotICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdl
dCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAgIH0KICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBAIC0xODU2LDI1ICsxODg5LDI3IEBA
IGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKICAg
ICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CiAgICAgaWYgKGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAg
ICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdl
dERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbCA9
IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5j
aWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgZGVwdGhidWZmZXJTZXJp
YWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgewot
ICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZl
cigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgZGVw
dGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAgICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAgICAg
ICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAg
fQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJp
YWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiAgICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAg
IGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwogICAgIGlmICghbVJlbmRlclRhcmdl
dERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQogICAgIHsKLSAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29u
dGV4dCBtdXN0IGJlIGxvc3QKQEAgLTE5NjAsMjYgKzIwMDAsMjcgQEAgYm9vbCBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQogICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwog
Ci0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCB4
eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsK
LSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4
eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwg
MSwgeHkpOwogCiAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5n
IGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRl
cGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBjb29yZCA9
IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOworICAgICAgICBHTGludCBjb29y
ZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOwogICAgICAgICBmbG9hdCBo
ID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDogbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKICAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21T
dGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5p
Zm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9i
amVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7
KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAgICAgICBw
cm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAgIHByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBHTGludCBk
ZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKKyAg
ICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxv
Y2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIs
IHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYoZGVw
dGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5pZm9ybXNE
aXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCArMjAzMSwxOSBAQCBib29sIENvbnRl
eHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCiB2b2lkIENvbnRleHQ6
OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAgIEdMZW51
bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7CiAK
LSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlv
bigpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xv
Y2F0aW9uKCk7CiAgICAgR0xpbnQgY2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7
Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7Cisg
ICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7CiAKLSAg
ICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVz
TG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGludCBhbHdheXNGcm9udCA9ICFpc1Ry
aWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihw
b2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAgIHByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAogICAgIEQzREFEQVBU
RVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRhcHRlcklkZW50aWZp
ZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRlbnRpZmllci0+VmVuZG9y
SWQgIT0gMHgxMDAyOwpAQCAtMjI4MCwxOCArMjMyMiwyMCBAQCBHTGVudW0gQ29udGV4dDo6YXBw
bHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSBtbwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQogewogICAgIFByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBpZiAo
cHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtU2VyaWFsKQogICAg
IHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQaXhlbFNoYWRlcigpOworICAgICAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNo
YWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7CiAKICAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxV
bmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CiAg
ICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgp
OwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5VW5pZm9ybXMoKTsKKyAgICBwcm9n
cmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8vIEFwcGxpZXMgdGhlIHRleHR1cmVz
IGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKQEAgLTIzMTEsMzAg
KzIzNTUsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkKIHZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBpbnQgc2Ft
cGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2Yg
RGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKICAgICB1bnNpZ25lZCBp
bnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBw
bGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwogICAgIGludCBk
M2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVY
VEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFt
QmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwogCiAgICAgZm9yIChpbnQgc2FtcGxl
ckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBs
ZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2Ug
dW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtQmluYXJ5LT5nZXRT
YW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGlt
YWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBk
M2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKICAgICAg
ICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtT2JqZWN0
LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKKyAgICAgICAgICAg
IFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1
cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwo
KTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0g
IT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1l
dGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICBpZiAoYXBw
bGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+
aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmQzZFRleHR1
cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoZDNkVGV4
dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVk
VGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwo
KSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQo
KTsKQEAgLTIzNTEsNyArMjM5Nyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1w
bGVyVHlwZSB0eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxl
clN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8
IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBs
aWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5o
YXNEaXJ0eUltYWdlcygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDcsNyBAQCB2b2lkIENvbnRleHQ6OmFw
cGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKICAgICAgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlw
ZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
YXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ1MSw2ICsyNDk3LDcgQEAgdm9pZCBDb250
ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0yNzM4LDYgKzI3ODUsNyBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQg
bWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgZGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
U2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7CiAgICAgICAgICAgICBz
dGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CkBAIC0yOTUyLDcgKzMw
MDAsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbgogICAgIGFwcGx5U2hhZGVycygpOwogICAg
IGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRh
dGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9n
cmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zMDQyLDcgKzMwOTAs
NyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZAogICAgIGFwcGx5U2hhZGVycygpOwogICAgIGFw
cGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVT
YW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFt
QmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zNDUyLDYgKzM1MDAsMTEg
QEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAog
ICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCitib29sIENv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBw
b3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGlj
ZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBAIC0zNjc3
LDYgKzM3MzAsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIH0K
IAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAi
OworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAi
OwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAKQEAgLTM3
MjAsNiArMzc3NCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAogICAgIC8v
IEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVz
KCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90
ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkK
ICAgICB7CkBAIC00MDQzLDcgKzQxMDIsMTMgQEAgdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZm
ZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEKIAog
ICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKICAgICAgICAgewotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERl
cHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBO
VUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRE
ZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5j
aWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICAgICAgewpAQCAtNDExNSw2
ICs0MTgwLDggQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRp
b24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2wKICAgICBEM0RWRVJURVhFTEVNRU5U
OSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKICAgICBEM0RWRVJURVhFTEVNRU5U
OSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjM3LDcgQEAgR0xlbnVtIFZlcnRleERlY2xh
cmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBU
cmFuc2wKICAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7CiAg
ICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7CiAgICAg
ICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAg
ICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGkpOwor
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFu
dGljSW5kZXgoaSk7CiAgICAgICAgICAgICBlbGVtZW50Kys7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4
IDhkY2NmMGYuLmM3ODNmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4RGVjbGFy
YXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVudW0geyBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5VTV9WRVJU
RVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEKICAgICB7
CkBAIC0yODIsNiArMjgyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgbWFrZUN1cnJlbnQo
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogCiAgICAgdm9p
ZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0
TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBv
cnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNM
dW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25z
dDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBw
b3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2lu
ZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1T
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1p
bmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7
CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCmluZGV4IDczMGZmZmMuLmRjZDgyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3IEBAIEZy
YW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDggQEAgdW5z
aWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAgIHJldHVy
biAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpG
cmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMsOCBAQCBJ
RGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAgICAgcmV0
dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFj
ZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1ZmZlciAq
ZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE5Niw2
ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigp
CiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZm
ZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVu
ZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRl
cHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZm
ZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK
KyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6
ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFudWxsYnVm
ZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05P
TkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIp
OworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZm
ZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7
CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBH
TGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhl
aWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2ht
ZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAg
ewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3Mo
KQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1D
b2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2Vk
KGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAg
ICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsK
KworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAgIGludGVy
bmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFi
bGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1h
dChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgyZXM6Oklz
RmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZv
cm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4
dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29s
b3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAg
ICAgIGlmIChkeDJlczo6SXNEZXB0aEZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5j
aWxGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KIAogICAgICAgICB3aWR0
aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZl
ci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxl
cygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CisgICAgICAgIG1pc3NpbmdBdHRhY2ht
ZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5V
TEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNz
KCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewotICAgICAg
ICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsgICAvLyBSZXF1aXJl
cyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAgICAgICB9Ci0KICAgICAgICAgZGVwdGhidWZmZXIg
PSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhidWZmZXIpCkBAIC0zMTks
MTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAgICAgIGlmIChtRGVwdGhidWZmZXJU
eXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBk
ZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IGRlcHRoYnVmZmVy
LT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRl
cHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVm
ZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisg
ICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUp
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGRlcHRoYnVm
ZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRh
Y2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhGb3JtYXQoZDNk
Zm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdB
dHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
OwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAg
ICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0
aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBA
IC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAog
ICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlm
IChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KLQog
ICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAgIGlm
ICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkK
KyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAg
ICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5h
bEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwg
aGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNlIGlmIChJ
c0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwor
ICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZv
cm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29t
ZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxGb3JtYXQoZDNkZm9ybWF0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50
KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRo
KCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAg
ICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAg
ICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5j
aWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7
CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAv
LyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRoZXkgbXVzdCBy
ZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgcGFj
a2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbAorICAg
IGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZlciAhPSBzdGVu
Y2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgc3RlbmNp
bGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8
fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5jaWxidWZmZXIt
PmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBv
bmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdf
QVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApAQCAtNDksNiArNDksNyBAQCBj
bGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoKTsKICAg
ICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRT
dGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoKTsK
IAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgR0xl
bnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+
IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZl
cj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBhNWUzOGJmLi4xODRhMDJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0u
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5j
cHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKIAogI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNyw2NCArMTgsMjQgQEAKIAogI2luY2x1ZGUg
PHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
KQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3BhY2UgZ2wKIHsKIHVuc2lnbmVkIGlu
dCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25zdCBjaGFyICpmYWtlcGF0aCA9ICJD
OlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZm
ZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVy
OwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShf
bmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXpl
KGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUp
ICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0gICAg
bWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZvcm06
On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQogCi1ib29sIFVuaWZvcm06Omlz
QXJyYXkoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICBy
ZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKIH0KIAotVW5pZm9ybUxvY2F0
aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBp
bnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3JhbTo6dW5k
ZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCitB
dHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKIH0KIAogUHJvZ3JhbTo6
UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291
cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFs
KCkpCiB7Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwogICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFi
bGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBtSW5mb0xv
ZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7Ci0KKyAg
ICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOwotCiAg
ICAgbVJlZkNvdW50ID0gMDsKIH0KIApAQCAtMTUyLDE3ICsxMTMsNyBAQCBpbnQgUHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAogICAgIHJldHVybiAobVZlcnRleFNoYWRl
ciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7CiB9CiAKLUlEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQotewotICAgIHJldHVybiBtUGl4
ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRW
ZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFy
ICpuYW1lKQordm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdM
dWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpZiAoaW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlMpCiAgICAgewpAQCAtMTc1LDI2NDkgKzEyNiwyODAgQEAgdm9pZCBQcm9ncmFt
OjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQog
ICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5k
ZXgsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9
PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwg
bmFtZSk7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJ
bmRleCkKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hh
ZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50
byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxl
Y3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkKIHsKLSAg
ICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUlu
ZGV4XTsKKyAgICB1bmxpbmsoZmFsc2UpOworCisgICAgbVByb2dyYW1CaW5hcnkgPSBuZXcgUHJv
Z3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5LT5saW5rKG1BdHRyaWJ1dGVCaW5k
aW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHVu
bGluayhmYWxzZSk7CisgICAgfQogfQogCi0vLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhp
Z2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJvZ3JhbTo6Z2V0VXNlZFNhbXBsZXJS
YW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1
dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAogewotICAgIHN3aXRjaCAo
dHlwZSkKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAg
ICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJf
VkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1
dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGxvY2F0aW9uOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQogCi0vLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNw
b25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBp
eGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQcm9ncmFt
OjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4KQorLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3Rh
dGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1
bmxpbmsoYm9vbCBkZXN0cm95KQogewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0x
OwotCi0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWlu
ZyBkZXN0cnVjdGVkCiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBB
U1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJz
UFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUp
CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8
IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CiAKLSAgICAgICAg
aWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICBpZiAobVZlcnRl
eFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVM
TDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxU
ZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5
OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CiAgICAgfQotCi0gICAgcmV0dXJuIC0x
OwogfQogCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0Qg
OSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBh
bmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtOjpnZXRT
YW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5k
ZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotICAgICAg
ICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1
cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7CisgICAgcmV0
dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1HTGludCBQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRp
b24oc3RkOjpzdHJpbmcgbmFtZSkKK3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeShQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQg
PSAwOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmlu
YXJ5OworfQogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCBy
ZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9v
ZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7Ci0gICAg
aWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAt
IDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAx
KS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVuKTsKLSAgICB9Cit2b2lkIFByb2dy
YW06OnJlbGVhc2UoKQoreworICAgIG1SZWZDb3VudC0tOwogCi0gICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
bG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIGlm
IChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQogICAgIHsKLSAgICAgICAgaWYgKG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQorICAgICAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwogICAgIH0KLQotICAgIHJldHVybiAtMTsKIH0K
IAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBQcm9ncmFtOjphZGRSZWYoKQogewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisgICAgbVJlZkNvdW50Kys7Cit9CiAKLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBj
b25zdAoreworICAgIHJldHVybiBtUmVmQ291bnQ7Cit9CiAKLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2VyaWFsOworfQogCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7
Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVybiBtQ3Vy
cmVudFNlcmlhbCsrOworfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAg
IHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAg
dGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiAr
PSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTCkKK2ludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAg
ICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CiAgICAgfQogICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBQcm9n
cmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpp
bmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5p
Zm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0SW5mb0xv
ZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAg
ICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAg
ICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgICAgIGlu
Zm9Mb2dbMF0gPSAnXDAnOwogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJV
RTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9CiAg
ICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVp
bnQgKnNoYWRlcnMpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKyAg
ICBpbnQgdG90YWwgPSAwOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDMykKKyAgICBpZiAobVZlcnRleFNoYWRlcikKICAgICB7Ci0gICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFd
OwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9
IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKKyAgICAg
ICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7CiAgICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMzsKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2
W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhh
bmRsZSgpOwogICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKICAgICB9Ci0gICAgZWxzZSAK
KworICAgIGlmIChjb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
KmNvdW50ID0gdG90YWw7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJv
Z3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdikKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUp
OwogICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
bGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgfQog
Ci0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCi0gICAgICAgICAgICAgICB2LCA0
ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7Cisg
ICAgICAgICpzaXplID0gMTsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
R0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKTsKICAgICB9Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGlu
dCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNw
b3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCitHTGludCBQcm9ncmFt
OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQogewotICAgIGludCBjb3B5V2lkdGggPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3Rk
OjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0gICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29w
eUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdp
ZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5SGVpZ2h0OyB5KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZU1h
eExlbmd0aCgpOwogICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9y
IChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAg
ICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0
VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAg
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBu
YW1lKTsKICAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQor
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAg
ICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IDA7Cisg
ICAgICAgIH0KIAotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4
PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSA4Owot
ICAgICAgICB2YWx1ZSArPSA0OworICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0g
R0xfTk9ORTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpz
ZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSkKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5h
cnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIH0KLQotICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICBlbHNlCiAgICAg
ewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVl
KTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2YWx1ZSArPSA5OworICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCi1ib29sIFByb2dyYW06
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0
aCgpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlm
b3JtTWF4TGVuZ3RoKCk7CiAgICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxP
QVRfTUFUNCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9h
dCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQordm9pZCBQ
cm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOwor
fQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKIH0KIAotYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQoKTsKICAgICB9Ci0KLSAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FN
UExFUl9DVUJFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xp
bnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwg
MyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
ICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAg
IH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
ZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0
aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAg
IHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdl
dFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50
ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+
dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVv
ZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9h
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMg
PSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9n
cmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50
ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHBy
b3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0g
ICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0
LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50
ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywg
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291
bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9y
bXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBp
bmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwot
ICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9n
cmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlV
bmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHVi
ID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1
YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYg
PSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0g
KEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEs
IGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVu
aWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIp
OyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYp
OyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJf
MkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBj
YXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBh
cHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdl
dFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUs
IGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0
aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5h
cmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhs
c2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFi
bGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZs
YWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3Mg
fD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0g
c3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJc
blxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGgu
Y19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNE
MTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5V
TEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRo
LCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JN
ZXNzYWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBj
aGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRl
cigpOwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAg
ICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsK
LQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3Vs
dCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4o
YmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmlu
YXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcg
cmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExh
bmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1
Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5n
W11bNF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25z
dCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3Rv
cnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQg
bSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1Zl
Y3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
ICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFz
dWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29s
IGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4Kysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
ID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0
XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3Bh
Y2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBu
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4
VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5d
ID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIs
IHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJz
Ci0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZh
cnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBw
YWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAg
aWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJl
Z2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1Zh
ciA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZy
YWdWYXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
dnR4VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhW
YXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJl
Z2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RP
UlNfU00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBh
Y2tpbmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xh
cmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3Qg
Ym9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGlu
dCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygp
OwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0g
bUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAg
ICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9
IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRw
dXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBu
b3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0
cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAg
ICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1h
dGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZl
cnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCAr
PSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBp
bnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRl
ICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMg
IjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUo
YXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAi
O1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIK
LSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0
IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBy
ZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5n
W3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEp
KTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNp
emUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsg
IjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
Ci0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7
Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClc
biIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6
Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAg
bVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hh
bGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXpl
LnkgKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgot
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlv
bi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMp
Ci0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUg
PSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0la
RV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93
czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJv
b2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxl
IHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNr
aW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4
SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+
IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtc
biI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wg
Kz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0g
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAg
ICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsg
dmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAm
JiBzbTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50
Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxv
YXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VU
UFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWlu
KFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAo
bUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9D
b29yZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkg
LSAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBj
ZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0g
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdD
b29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlu
cHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAg
IH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0g
ICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0Lmds
X1BvaW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRG
YWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+
PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFy
eWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dz
OyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNM
ICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAg
ICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtc
biIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hh
ZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50
byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxl
Y3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAg
ICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFk
ZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hh
ZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNM
KCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3Qg
Y2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAi
dnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRl
eHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAg
SUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNf
c3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9i
ICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVs
UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBw
aXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2lu
dGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZm
ZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVs
UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUND
RUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAg
ICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2Uo
KTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBO
VUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2Ug
dW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFu
ZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCBy
ZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAg
ICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAg
ICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQi
KTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5l
cyIpOwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRy
aWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQ
cm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlv
bnMgPSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9j
YXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxv
Y2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAg
IGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1l
LmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0
aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9
ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcg
dG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBh
IGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRy
aWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0g
bVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAg
ICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUp
OwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0
dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVS
b3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4
ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZh
aWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0
ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0g
bVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0Nv
dW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAg
bVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9u
ID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewot
ICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0
dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRU
YWJsZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlw
dGlvbjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJ
TlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZj
b25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3Rh
bnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29u
c3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0
YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNj
KGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZv
dW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1
cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29s
IFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAg
IEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlO
YW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChw
c0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFu
dCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3Jp
cHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVS
RV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxl
clJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVy
IHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRl
eCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwg
Z2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBU
X1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChz
YW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4
Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAg
ICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2Ny
aXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAg
ICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAg
ICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxl
LCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAx
KSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBu
YW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQ
Q19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19N
QVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJu
IGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZv
cm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9y
bShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5
IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3Jt
LT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9j
YXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlm
IChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+
cHMsIG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5p
Zm9ybSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5w
dXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlm
b3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlm
b3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9i
YWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAg
Ly8gVmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVS
MkQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
U0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9P
TF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJp
Y2VzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9N
QVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1l
dGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJv
Z3JhbTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAg
aWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywg
ImR4XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3Jh
dGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0g
PT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFt
ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0g
ICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wg
Ym9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNF
KSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBq
XSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0
aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50
IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9
IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9y
LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgs
IHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JP
T0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0
YW50Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4
ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8
PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0s
IDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmly
c3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhS
U19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVy
SW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8
PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0s
IChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBw
bHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwot
ICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9y
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRp
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikK
LXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBE
M0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQz
RFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2
WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRh
cmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgs
IChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7
Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAg
ewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJT
X0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotLy8gYXBwZW5kIGEgc2Fu
dGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KLS8vIFRoZSBEM0QgY29tcGls
ZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRoZSB3YXJuaW5nIG9yIGVy
cm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlz
IGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZv
TG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17Ci0gICAgc3RkOjpzdHJpbmcgbXNn
KG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAgIGRvCi0gICAgewotICAgICAgICBm
b3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxl
bihmYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6
OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cuY19zdHIo
KSk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZh
X3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8p
LCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5m
b0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAg
ICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5
KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90
IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5l
dyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xv
ZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsK
LQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7
Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCi17Ci0gICAgaWYgKG1J
bmZvTG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOwotICAgICAgICBtSW5m
b0xvZyA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0
byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9u
Ci12b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCi17Ci0gICAgaWYgKGRlc3Ryb3kp
ICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21l
bnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFz
ZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4
U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAg
ICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0
YWJsZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewot
ICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRh
YmxlUFMgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQotICAgIHsK
LSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3RhbnRU
YWJsZVZTID0gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJp
YnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0g
PSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNQU1tpbmRl
eF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCi0gICAgewot
ICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Ug
PSAwOwotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAg
ICB9Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0aExvY2F0
aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAgICBtRHhQ
b2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLQotICAgIG1Vbmlmb3JtSW5kZXguY2xlYXIoKTsK
LQotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigpOwotCi0g
ICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCi0gICAgbUxpbmtl
ZCA9IGZhbHNlOwotfQotCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKLXsKLSAgICByZXR1cm4g
bUxpbmtlZDsKLX0KLQotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAotewotICAg
IHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dyYW06OnJlbGVhc2UoKQotewotICAg
IG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMp
Ci0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUp
OwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsr
OwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAotewotICAg
IHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwo
KSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3Jh
bTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi1p
bnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtSW5mb0xv
ZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3Jh
bTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsK
LSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQot
Ci0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7
Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRl
eDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkg
bWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAgaW50IHRv
dGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRv
dGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0g
bVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsr
OwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAo
dG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0g
PSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG90
YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291bnQgPSB0
b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUg
YXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwotICAgIHVu
c2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0
ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0KLSAgICBpZiAoYnVmc2l6ZSA+IDAp
Ci0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBi
dWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAgICAgIGlm
IChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xl
ICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQot
ewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7
IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1l
LmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICBmb3Ig
KGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5k
ZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
c2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBvdmVyIGlu
dGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAg
IHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBt
VW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1z
W3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZVVuaWZv
cm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0KLQotICAgIEFTU0VSVCh1bmlmb3JtIDwg
bVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKLQotICAgICAg
ICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm5jcHkobmFtZSwg
c3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdc
MCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0
aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpzaXplID0gbVVuaWZv
cm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsK
LSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVu
aWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAg
ICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikg
IT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBjb3VudDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBp
bnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5k
ZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
ZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJk
eF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICAgIGlm
IChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCi0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0
aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lk
IFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFByb2dyYW06OnZhbGlkYXRlKCkKLXsK
LSAgICByZXNldEluZm9Mb2coKTsKLQotICAgIGlmICghaXNMaW5rZWQoKSkgCi0gICAgewotICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBs
aW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlkYXRlU2Ft
cGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0
ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZhbGlkYXRl
U2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2Ft
cGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0
aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJl
bnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAvLyBE
cmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJ
T04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAgICAg
ICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kpCi0g
ICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJl
VW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobG9n
RXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVY
VFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxl
cnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBs
ZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2Ug
dW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
cnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0
ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAo
JWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQs
IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9IHRl
eHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMg
cmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVy
c1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6aW5pdGlhbGl6ZUNvbnN0YW50SGFu
ZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJpLCBJ
RDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWEhBTkRMRSBoYW5k
bGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5f
bmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQotICAgIHsKLSAgICAgICAgVUlOVCBkZXNj
cmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNj
cmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25z
dGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQp
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICByaS0+cmVnaXN0
ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKLSAgICAgICAgcmkt
PnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7Ci0gICAg
ICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQ7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gMDsKLSAg
ICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFt
OjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0
aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhh
bGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBt
RHhQb2ludHNPckxpbmVzTG9jYXRpb247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXggNjE4MzBjNi4uMWI0MjM5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEx
LDkgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQz
ZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFk
ZXIuaCIKQEAgLTI1LDQyICsyMywxNyBAQCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBG
cmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCBy
ZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitjbGFz
cyBBdHRyaWJ1dGVCaW5kaW5ncwogewotICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7Ci0KLSAgICB+VW5pZm9y
bSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBHTGVudW0gdHlwZTsKLSAg
ICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0
IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBib29s
IGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsKLSAgICAgICAgaW50IHJl
Z2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleDsKLSAgICAgICAgaW50IHJlZ2lz
dGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdpc3Rlcklu
Zm8gdnM7Ci19OworICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGluZ3MoKTsKKyAgICB+QXR0
cmlidXRlQmluZGluZ3MoKTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZv
cm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3Jt
TG9jYXRpb24KLXsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgICB2b2lkIGJp
bmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAg
IGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsK
IAotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7Ci0gICAg
dW5zaWduZWQgaW50IGluZGV4OworICBwcml2YXRlOgorICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5n
PiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogfTsKIAogY2xhc3MgUHJv
Z3JhbQpAQCAtNzQsNDUgKzQ3LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGRldGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkg
Y29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7Ci0g
ICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0KICAgICB2b2lk
IGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOwot
ICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAgICBp
bnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQgZ2V0
U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5
cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1wbGVy
UmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24o
c3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0y
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAg
IGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgy
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
LSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAg
ICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVu
aWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
LQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4RGVw
dGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkg
Y29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250
Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlv
bigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBs
eVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlua2VkKCk7Cisg
ICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwor
ICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGludCBnZXRJbmZv
TG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hh
ZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsK
QEAgLTEzMSw5MSArNzEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIHZvaWQgZmxhZ0ZvckRlbGV0
aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCi0gICAgdm9p
ZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycyk7
CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNl
cmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRl
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCi0g
ICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEwQmxvYiAq
Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElE
M0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5rKGJvb2wg
ZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBsaW5r
QXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAq
Y29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUg
JmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlw
dGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0g
ICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xm
bG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3Jt
Mml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAg
IHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3Qg
R0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNEWENvbnN0
YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5p
dGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29u
c3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2aWNlOSAq
bURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRl
eFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhMU0w7Ci0g
ICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJp
YnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRh
YmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAg
IElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50
VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0
dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUgbUxpbmtl
ZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRleFtN
QVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAg
IFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVy
c1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQotICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlmb3Jt
QXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9u
PiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAgICBH
TGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsK
LSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVM
b2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9ncmFtQmlu
YXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2Vy
IGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsKIAogICAg
IHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA4MWY3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0wLDAgKzEs
MjU4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMg
dGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8g
YW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4x
MC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPHN0cmlu
Zz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2Rl
ZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK2NvbnN0IGNoYXIgKmZha2Vw
YXRoID0gIkM6XFxmYWtlcGF0aCI7CisKK3N0ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBj
aGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVk
IiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0g
dHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQor
ICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVj
b3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7CisgICAgaW50IGJ5
dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0g
bmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7Cisg
ICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRl
W10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAgICByZXR1cm4gX25h
bWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxvY2F0aW9uOjpVbmlm
b3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVu
dCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNv
cmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9
CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1EZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3Rh
bnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICBtVmFsaWRhdGVk
ID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0g
LTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhd
LmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0g
MDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRp
b24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJp
bmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4
ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRh
YmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jt
cy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIGRl
bGV0ZVtdIG1JbmZvTG9nOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW1CaW5h
cnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30K
KworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVy
KCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWludCBQcm9ncmFt
QmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlm
IChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1MaW5r
ZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0
ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
IAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9CisKKy8vIFJl
dHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCitHTGlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAg
ICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNlIFNBTVBMRVJf
VkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAt
MTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4ICgwLTE1
IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVu
c2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0
ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJ
WEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9z
aXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5p
dCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVy
c1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGxv
Z2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRD
b250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNE
IDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIg
YW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFy
eTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FN
UExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAg
ICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1w
bGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
VEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0aW9u
KHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisK
KyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRo
ZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Cisg
ICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAh
PSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKKyAgICB7
CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkp
OworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50
IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7
CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKKyAg
ICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0
YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0g
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZF
QzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwor
ICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Cisg
ICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikK
KyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9W
RUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsK
KyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAgICAgICAgICB0YXJnZXRbM10gPSAw
OworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDM7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAg
ICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lk
dGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRX
aWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVp
Z2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgr
KykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1
bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5
KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0
aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsg
eF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRv
bS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisg
ICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9h
dCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDg7CisgICAgICAg
IHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7CisgICAg
ICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdl
dCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8
fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKKyAgICAg
ICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGlu
dCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAg
diwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAg
ICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVk
IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAg
IGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNo
ICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1J
bnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAg
ICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAw
LjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCks
CisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFy
YW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRl
ZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAg
ICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihw
YXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFs
Q291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBl
KTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlm
b3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFs
Q291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICog
c2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZv
cm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3Jtczsg
aW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsK
KyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJv
Z3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVy
YXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0g
dWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAg
ICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZs
b2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGlu
dCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVh
biAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlm
b3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZF
QzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNp
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJy
YXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQ29t
cGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFi
bGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeShj
b25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUg
Kipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsK
KyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAg
eworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAg
ICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisg
ICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKwor
ICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAg
c291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3Rk
OjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmls
ZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXpl
KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAg
fQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJv
ck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhs
c2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJp
bmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdl
dEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQobWVz
c2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVz
IiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7CisgICAgICAg
IGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxj
b25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7
CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2Vu
ZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wg
RVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBh
Z2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywg
b3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIp
Cit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBpbnQg
bWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsK
KworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0Nv
dW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0gPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0g
biAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wg
YXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
biAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hd
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsg
eCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsg
ci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFi
bGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAm
JiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNr
aW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8
IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07
CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9
IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Bh
Y2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdW
ZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFy
eWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7CisgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5n
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGlu
dCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1ty
XVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3Moc3RkOjpzdHJpbmcm
IHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKHBpeGVs
SExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3Np
Z25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBmcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAgICAgZnJhZ1Zhci0+cmVnID0g
LTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCisgICAg
eworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwor
ICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKKyAg
ICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtO
VUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcsIGZyYWdtZW50
U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNs
YXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0
IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBp
bnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMo
KTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAg
Ym9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+
c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBt
YXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkp
OworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAg
ICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVu
ZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4
IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGlj
ID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKworICAgIHZlcnRleEhMU0wgKz0gInN0
cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNl
bWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJp
YnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAi
OyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAg
ICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAg
ICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQ
T1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQor
ICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBh
Y2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIo
cikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFk
ZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
dmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAi
ID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4g
MSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCArPSAidHJh
bnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsg
ZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAg
ICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtc
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19P
VVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24u
dztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCisgICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiAr
IHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAg
ICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlv
bjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5n
LT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2
YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKKyAgICAg
ICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKKwor
ICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVn
aXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYm
IHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihzaGFy
ZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9
ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2
ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIg
KyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAg
IHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5y
ZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5
aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3Mg
PSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGop
OworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsg
IiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5n
U2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20zKSB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29v
cmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1Bv
aW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VU
UFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgor
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWlu
KFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAg
ICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29v
cmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWlnaHQuIFNlZSBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAw
LjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50
ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3Jk
LnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisK
KyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgewor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRD
b29yZDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFj
aW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBk
eF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDog
KGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIo
aikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xf
bWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rKGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXND
b21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wg
PSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wg
PSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKHBpeGVs
SExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hh
ciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18z
XzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxl
VG9CaW5hcnkodmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFi
bGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkocGl4
ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAg
aWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQg
dmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4
QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgICAg
IEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQq
KXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKwor
ICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZl
cnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VF
REVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7Cisg
ICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5V
TEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4
ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFsaW5rQXR0cmlidXRlcyhhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRl
eFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhHTF9GUkFHTUVO
VF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5r
VW5pZm9ybXMoR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVWUykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0
ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZp
eGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAgICAgICAg
ICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFu
Z2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7CisgICAgICAgICAgICBt
RHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOwor
ICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9u
KCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRleHQtPm1hcmtEeFVuaWZv
cm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0
d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5k
aWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVC
aW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
ciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRM
b2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRp
bmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUg
PSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlu
dCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmli
dXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGds
QmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0
dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxv
Y2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtl
ZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYg
KHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBs
b2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBs
b2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmli
dXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5n
cy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJl
ZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAg
ICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3Mg
PiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRl
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZh
aWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRl
W2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNl
bWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAg
ICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChpbnQgciA9IDA7IHIg
PCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJp
YnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhHTGVudW0gc2hhZGVy
LCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCit7CisgICAgRDNEWENPTlNUQU5U
VEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247CisKKyAgICBjb25zdGFudFRhYmxl
LT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVz
Y3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCisgICAgeworICAgICAgICBEM0RY
SEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29u
c3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlw
dGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUs
ICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRl
ciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0
aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVl
IGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFt
QmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNv
bnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdp
c3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5H
ZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworCisgICAg
ICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlcklu
ZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVf
Q1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVz
ZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4
ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5H
ZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNh
bXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5U
eXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwor
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0
dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdl
ID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlZlcnRleCBzaGFkZXIgc2Ft
cGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIs
IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRp
b24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwg
Y29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgICAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVz
YyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIiOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZpZWxkSGFuZGxl
LCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3Ry
dWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6
CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09C
SkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2Ny
aXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25z
dCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0
YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5l
ZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUp
OworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+
PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKworICAgIGlm
IChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnRE
ZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZv
cm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisK
KyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5p
Zm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRl
eCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtQmlu
YXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVz
Y3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX1NB
TVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9C
T09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
Q29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZF
QzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29s
dW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9B
VF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1
cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVj
b3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIp
ICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCitz
dGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAgIAorICAg
IC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9z
ID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7Cisg
ICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFt
ZVswXSA9PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAg
fQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5h
bWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2
KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAg
ICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0
aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJ
bmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAg
ICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnNDb3VudCA9
IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAq
IHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5
Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBib29sVmVjdG9y
W2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29s
SW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAg
IH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5k
ZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0
NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJ
bmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhW
RUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZF
Q1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsK
KworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OworCisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXgg
KyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZz
LmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwor
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAg
ICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNv
dW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxv
YXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5VW5pZm9y
bW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3Jb
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2
WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2
ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50
LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxv
YXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVu
aWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9h
dCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQor
CisvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgor
Ly8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2Yg
dGhlIHdhcm5pbmcgb3IgZXJyb3IgCisvLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9j
Y3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgordm9pZCBQcm9n
cmFtQmluYXJ5OjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkK
K3sKKyAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CisKKyAgICBzaXplX3QgZm91bmQ7Cisg
ICAgZG8KKyAgICB7CisgICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOworICAgICAg
ICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKworICAgIGFwcGVuZFRvSW5m
b0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBl
bmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaWYgKCFmb3JtYXQp
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBpbmZvWzEwMjRdOwor
CisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOworICAg
IHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9l
bmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworCisg
ICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5m
b0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9n
KTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5mb0xlbmd0
aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7CisgICAgICAgIHN0cmNw
eShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9n
OworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbUJp
bmFyeTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAg
ICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICB9Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1
cm4gbVZhbGlkYXRlZDsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2dMZW5ndGgo
KSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSAr
IDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50IGluZGV4
ID0gMDsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmIChtSW5mb0xv
ZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5m
b0xvZywgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5k
ZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGluYWN0
aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKKyAg
ICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmli
dXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlm
IChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVBdHRy
aWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUg
PiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmlu
ZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAg
ICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5h
bWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNp
bmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0
ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJ
bmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGgg
PSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQor
eworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBh
Y3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVu
aWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIHsK
KyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8i
KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICB9CisK
KyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3Qg
YmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCisKKyAgICBpZiAoYnVmc2l6
ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgIH0KKwor
ICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKKyAgICAgICAg
bmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOworCisgICAgKnR5
cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIHVu
c2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVu
aWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGlu
dCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZv
cm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBp
ZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3Vu
aWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5u
YW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0g
MzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4
TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBhcHBseVVuaWZvcm1zKCk7CisgICAg
aWYgKCF2YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9
IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhib29s
IGxvZ0Vycm9ycykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHBy
b2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAg
Ly8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0
aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5k
IERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKwor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRl
eHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1cmVVbml0
VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAg
IGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBs
ZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1
cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxp
Y3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwg
dW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0
XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNW
U1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1
bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVu
aXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBl
W3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vy
cm9ycykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUg
c2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVy
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9u
dENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGlu
ZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlv
bjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
ZGM3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKQEAgLTAsMCArMSwyMjAgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxl
bWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRlZiBMSUJH
TEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZ
X0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9T
aGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxw
ZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVu
aWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25h
bWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJv
b2wgaXNBcnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBu
YW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5
U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAg
IHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVy
SW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVn
aXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckluZGV4OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBs
ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJD
b3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7CisgICAgICAg
ICAgICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50Owor
ICAgICAgICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4OworICAgICAgICBpbnQgc2FtcGxl
ckluZGV4OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisgICAgICAgIGludCByZWdpc3RlckNv
dW50OworICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7CisgICAgUmVnaXN0ZXJJbmZvIHZz
OworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRz
IG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sK
KyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBp
bnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7
CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworfTsK
KworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUg
c3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNzIFByb2dy
YW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1CaW5hcnkoKTsKKyAgICB+UHJvZ3Jh
bUJpbmFyeSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigp
OworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAg
R0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBn
ZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICBHTGludCBnZXRTYW1w
bGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsK
KyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5n
ZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6
OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9v
bCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAg
IGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJv
b2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisg
ICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
ZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisgICAgR0xpbnQgZ2V0RHhEZXB0aFJh
bmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25z
dDsKKyAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXRE
eEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dM
b2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkg
Y29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5p
Zm9ybXMoKTsKKworICAgIGJvb2wgbGluayhjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmli
dXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAg
dm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpp
bmZvTG9nKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBH
THNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0
cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
aW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5n
dGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNo
YXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50
IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoKTsKKyAg
ICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOworICAgIGJvb2wgaXNWYWxp
ZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0
ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQor
ICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKKworICAgIElEM0Qx
MEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9m
aWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKKworICAgIGludCBwYWNr
VmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua0F0dHJpYnV0
ZXMoY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAg
IGJvb2wgbGlua1VuaWZvcm1zKEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0
IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVh
dGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
OworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAgIHZvaWQgYXBw
ZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZvaWQgYXBw
ZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldEluZm9M
b2coKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICAgIElE
aXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1Q
aXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1
dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgorICAg
IElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50
VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0
ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVY
X0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0
aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1cmVU
eXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVkZWYg
c3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVu
aWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3Jt
SW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRHhE
ZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGlu
dCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsK
KyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbjsKKworICAgIGNoYXIgKm1JbmZvTG9nOworICAgIGJvb2wgbVZhbGlkYXRlZDsK
K307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
Y3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2Mywx
NDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25z
dAogICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQog
Ci1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1
cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0
KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQor
CitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAg
IG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWlu
IHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJi
dWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2Yg
YSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihw
cm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHko
cHJveHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJu
IG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5j
aWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitH
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBt
VGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgw
KTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewot
ICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJu
YWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQz
REZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgw
KTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25z
dAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5k
ZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwg
R0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAu
c2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwog
fQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291
bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVz
LiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRl
cmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2
b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAg
bVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBt
VGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZh
Y2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJU
YXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFy
Z2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNE
U3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6Omdl
dFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdp
ZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJl
dHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgp
IGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3Jt
YXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVy
bmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1
ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0
dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RG
b3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwog
fQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QK
K3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0
KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRh
cmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisK
IFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJm
YWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFu
Y2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVs
ZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRS
ZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgp
OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5k
ZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdl
Ojp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdl
dCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
c3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQog
SURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgp
CiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5D
b2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJl
Y3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAo
bVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+
RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2ls
KCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5j
aWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAK
IAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xh
c3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZl
cjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBS
ZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVy
YnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJs
aWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBw
dWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZm
ZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZl
clRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMg
UmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFs
KCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVu
ZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1
ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7
CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0g
bVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisg
ICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRk
UHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJv
eHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVy
bmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKwor
ICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAg
IEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwx
NCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAg
ICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAg
ICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAo
bUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6
ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xv
ZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0
NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAot
ICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAg
IG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJj
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2Us
IGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBi
dWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyAr
NDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3Mg
U2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1C
aW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIs
IEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8
QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGlj
IFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFt
QmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3ZDIuLjFhZjA4Y2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAt
MzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1
cmVTZXJpYWwgPSAxOwogCiBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAgIH0KKyAgICBlbHNlIGlm
IChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBAIC03NSw2ICs3OSwxMCBAQCBzdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNoKGZvcm1hdCkKICAgICB7CiAgICAg
ICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBAQCBzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10
LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgRFdPUkQgZDNk
dXNhZ2UgPSAwOworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAg
ICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKKyAgICB9CisgICAgZWxzZSBp
Zihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAm
JiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgewor
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CisgICAgfQorICAgIHJl
dHVybiBkM2R1c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkKIHsKICAgICBtV2lkdGggPSAwOyAK
QEAgLTE1NSw2ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICBJRGly
ZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkg
Km5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9P
TF9TWVNURU1NRU07CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1h
dCgpOworICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQg
bmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAobVdpZHRoICE9IDAg
JiYgbUhlaWdodCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsyMDMsNyBAQCB2b2lkIEltYWdlOjpj
cmVhdGVTdXJmYWNlKCkKICAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291bnQ7
CiAgICAgICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVh
dGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwg
TlVMTCwgZ2V0RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNl
KCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0
Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7CiAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDcgKzI4OSw3IEBAIHZvaWQgSW1hZ2U6
OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5CiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBn
ZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKKyAg
ICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQogICAg
IHsKICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwogCkBAIC0yODQsMTAgKzMwOSwxOSBAQCB2b2lk
IEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeQogfQogCiAvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRl
c2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9y
ZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0
YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxp
bmUuCisvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlIGF0IGxvY2tlZC5wQml0cyB3
aXRoIGxvY2tlZC5QaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KIHZvaWQgSW1hZ2U6
OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBSRUNUIGxvY2tSZWN0ID0gdHJhbnNmb3Jt
UGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOworCisg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9j
a2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSAtQ29tcHV0ZVBpdGNo
KHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwogICAgIGlucHV0ID0gKChj
aGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwogCkBAIC0yOTcsMjkgKzMz
MSwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQp
CiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFs
cGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1p
bmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwor
ICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RG
TVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdC
VUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKICAgICAg
ICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9CR1JB
X0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAg
ICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMyOCw3ICszNjksNyBAQCB2b2lk
IEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsK
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBA
IC0zMzcsNyArMzc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNo
IChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
ICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdC
QTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyArMzg3LDcgQEAgdm9pZCBJbWFnZTo6
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQKICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUxRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0z
NTYsMTkgKzM5NywxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodAogICAgICAgICB7CiAgICAg
ICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwg
YXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBHTF9BTFBI
QToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9h
ZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCRmxvYXRE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzc4LDI4ICs0MTksMzAgQEAg
dm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQKICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRB
bHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAg
ICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxv
YWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CisK
KyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTEsNyBAQCB2b2lkIEltYWdl
Ojpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQg
KiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKQEAgLTQxOSw3
ICs0NjIsNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGgKICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0Uy
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7CisgICAgX19tMTI4aSB6
ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CisKKyAgICAgICAgaW50IHg7CisgICAgICAg
IC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCisgICAgICAgIGZvciAoeCA9IDA7ICgocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHggPCB3aWR0
aCk7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
OyB4ICsgNyA8IHdpZHRoOyB4ICs9IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fbTEyOGkg
c291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEy
OGkqPigmc291cmNlW3hdKSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggYnl0ZSB0
byAxNmJpdCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJvCisgICAgICAgICAgICBzb3VyY2VE
YXRhID0gX21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAgICAgICAg
ICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJp
dCB0byB6ZXJvCisgICAgICAgICAgICBfX20xMjhpIGxvID0gX21tX3VucGFja2xvX2VwaTE2KHpl
cm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNr
aGlfZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworCisgICAgICAgICAgICBfbW1fc3RvcmVf
c2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCBsbyk7CisgICAgICAg
ICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCAr
IDRdKSwgaGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXIK
KyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAg
LTQyOCw3ICs1MTEsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaQogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDM5LDcg
KzUyMiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpCiAgICAgfQogfQogCi12b2lkIEltYWdl
Ojpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZs
b2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1MzEsNyBAQCB2b2lkIEltYWdlOjps
b2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAg
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAg
ICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDU5LDE3ICs1NDIs
MTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQ
ZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOworICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2g7CiAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9y
bWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3ICs1NzAsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
egogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3Zv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00OTcsNyArNTc5LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CkBAIC01MDgsNyArNTkwLDcg
QEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZs
b2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcsNyArNTk5LDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAg
IHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAg
LTUyOCwxNyArNjEwLDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkCiAgICAgfQogfQogCi12
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0
CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAyOiA0OwogICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAg
IHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgCiAgICAgICAgIGlm
ICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICB7CkBAIC01
NTcsNyArNjM4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLAogICAgIH0KIH0KIAotdm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC01NjYsNyArNjQ3LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2kKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsg
eG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU3Nyw3ICs2NTgsNyBA
QCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01ODYsNyArNjY3
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjc4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emUKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02MDYsNyArNjg3LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zm
c2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
ICogMyArIDJdOwpAQCAtNjE3LDcgKzY5OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6Omxv
YWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MDcsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
UkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC02MzgsNyArNzE5LDcgQEAg
dm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaQogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC02NDcsNyArNzI4
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0
UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAg
ewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02
NTgsNyArNzM5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemUKICAgICB9CiB9CiAKLXZvaWQg
SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc0OCw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAg
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAg
ICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
CkBAIC02NzgsNyArNzU5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0wKICAgICB9CiB9CiAK
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRS
R0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTY4OCw3ICs3NjksNyBAQCB2b2lkIElt
YWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAogICAgICAgICAvLyBNYWtlIG91dHB1
dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwMSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JB
VUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBAIC03MjgsNyArODA5LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXoKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewpAQCAtNzM4LDcgKzgxOSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5
dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0Nyw3ICs4MjgsNyBAQCB2b2lkIElt
YWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzU5LDcg
Kzg0MCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdl
Ojpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKQEAgLTc2OCw3ICs4NDksNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZQogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2MSw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTc4OSwxMiArODcwLDEyIEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICAr
IHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwog
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JB
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMsMTIgKzg4NCwxMiBAQCB2b2lkIElt
YWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zm
c2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0
aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyNSArODk4LDQzIEBAIHZvaWQgSW1hZ2U6
OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAq
IDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7
CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KSB7CisgICAgQVNTRVJUKHhvZmZz
ZXQgJSA0ID09IDApOworICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKworICAgIFJFQ1Qg
bG9ja1JlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgbUhlaWdodCk7CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkgaW5wdXRQ
aXRjaCA9IC1Db21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAgICBHTHNp
emVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtRm9y
bWF0KTsKKyAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpICsgaW5wdXRTaXplICsgaW5wdXRQaXRj
aDsKKwogICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCiAgICAgewogICAgICAgICBjYXNlIEQz
REZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgbG9hZERYVDFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAg
ICAgICAgICBsb2FkRFhUM0RhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwor
ICAgICAgICAgIGxvYWREWFQ1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgIGJyZWFrOwogICAgIH0KKwor
ICAgIHVubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1bGwoY29u
c3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewpAQCAtOTQ4LDEx
ICsxMDQ3LDkgQEAgc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKGNvbnN0IHVuc2ln
bmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QKICAgRmxpcENvcHlEWFQxQmxvY2tI
YWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZERYVDFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsK
ICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsK
ICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNo
ICUgOCA9PSAwKTsKQEAgLTk4NSw3ICsxMDgyLDcgQEAgdm9pZCBJbWFnZTo6bG9hZERYVDFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUK
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKICAgICAgICAgICAgICAgICB7CkBAIC05
OTYsMTEgKzEwOTMsOSBAQCB2b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgIH0KIH0KIAotdm9p
ZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VS
VCh5b2Zmc2V0ICUgNCA9PSAwKTsKICAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGgg
PT0gMiB8fCB3aWR0aCA9PSAxKTsKICAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwog
ICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwpAQCAtMTAzNSw3ICsxMTMwLDcgQEAg
dm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGUKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0IC8gNDsgKyt5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwog
CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQp
CiAgICAgICAgICAgICAgICAgewpAQCAtMTA0NiwxMSArMTE0MSw5IEBAIHZvaWQgSW1hZ2U6Omxv
YWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOjpsb2FkRFhUNURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeG9m
ZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VS
VCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwogICAgIEFTU0VS
VChpbnB1dFBpdGNoICUgMTYgPT0gMCk7CiAgICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0g
MCk7CkBAIC0xMDg1LDcgKzExNzgsNyBAQCB2b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZQogICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhv
ZmZzZXQgKiAxNik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKICAgICAgICAgICAgICAgICB7CkBAIC0xMjY3LDkg
KzEzNjAsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsCiAgICAgbURpcnR5ID0gdHJ1ZTsKIH0K
IAotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotICAg
IDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpLAotICAgICAgbUQzRFBvb2woZ2V0RGlzcGxh
eSgpLT5nZXRUZXh0dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSksCitUZXh0dXJlU3RvcmFnZTo6VGV4
dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLAorICAgICAg
bUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbCh1c2FnZSkpLAogICAgICAgbVRl
eHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7CiB9CkBAIC0xMjgwLDcgKzEzNzMs
NyBAQCBUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKIAogYm9vbCBUZXh0dXJlU3Rv
cmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
OworICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVT
QUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7CiB9CiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFu
YWdlZCgpIGNvbnN0CkBAIC0xMjkzLDYgKzEzODYsMTEgQEAgRDNEUE9PTCBUZXh0dXJlU3RvcmFn
ZTo6Z2V0UG9vbCgpIGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQb29sOwogfQogCitEV09SRCBUZXh0
dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9
CisKIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAtMTQ1MCwxNSArMTU0OCw3IEBAIHZv
aWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMsIEltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewot
ICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
aW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2Ut
PmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
ICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5sb2FkRGF0
YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0
VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTU1NywxNiBAQCB2b2lkIFRleHR1cmU6OnNl
dENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExP
Q0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygm
bG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChp
bWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGludCBp
bnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCksIGltYWdl
LT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGltYWdlLT5s
b2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5w
dXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRD
b21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0KIAogYm9v
bCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0g
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlv
ZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChJc0Nv
bXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAg
aWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2Vk
OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwot
Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
aW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBo
ZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTUyMSwz
NyArMTU3NSw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnCiAKIGJvb2wgVGV4dHVyZTo6c3Vi
SW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNl
dCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVp
Z2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gZ2V0SW50ZXJuYWxGb3Jt
YXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7
Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAgICB1cGRhdGVSZWdpb24ubGVmdCA9
IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsK
LSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgICAg
IHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCAmdXBk
YXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0
aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3Nl
ZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdo
dCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdodCwgLWlucHV0UGl0Y2gsIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwot
ICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTY5MywyNyBAQCBib29sIFRleHR1cmU6OmNvcHlU
b1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkg
KnNvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3Rv
cmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFn
ZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNl
cmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0
dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFS
R0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlh
bCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CiB9CiAKLVRleHR1cmVTdG9y
YWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9y
YWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50
IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChS
ZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVs
cywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwg
Z2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAod2lk
dGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTY5NSw2ICsxNzI1
LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQogICAgIH0KIH0KIAor
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3Jh
Z2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxODEwLDIwIEBAIEdMc2l6ZWkgVGV4dHVy
ZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogfQog
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpn
ZXRUeXBlKCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KEdMaW50
IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCk7Cisg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1h
dCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAg
IGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTIwMTYsMTAgKzIwNDksMTAgQEAgdm9pZCBUZXh0dXJl
MkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0wKICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwogICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9y
bWF0KTsKICAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZv
cm1hdCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQs
IG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQs
IHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1JbW11dGFibGUg
PSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykKQEAgLTIwNzQsOCArMjEwNyw4IEBAIGJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0
ZSgpIGNvbnN0CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAotICAgIGlm
ICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0
KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxP
QVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Cisg
ICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0
Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAg
ICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAg
ewpAQCAtMjE1Nyw5ICsyMTkwLDE0IEBAIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRl
KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJl
c3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7Cisg
ICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworfQorCiti
b29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKIH0KIAogSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNzMs
MTEgKzIyMTEsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQogICAgIEdMc2l6
ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRp
b25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFy
cmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdl
KGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgCiAg
ICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yMjE3LDkgKzIyNTUs
MTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgICAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwogICAgICAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGZv
cm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEM0RGT1JNQVQg
ZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIERXT1JEIGQz
ZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICAgICAgbmV3
VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAg
ICAgICAgIHsKQEAgLTIyMzIsOCArMjI3MSw4IEBAIHZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRl
c3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICB7
ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgZGVzdC0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgp
OworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjMxNSwxMiArMjM1NCwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6
Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCiAKICAgICBpZiAobUNvbG9yYnVmZmVyUHJv
eHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAg
ICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlclByb3h5OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3Qz
RFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQogewog
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CkBAIC0yMzMzLDYgKzIzNzQsMzMg
QEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAgCisgICAgLy8gZW5zdXJlIHRoaXMg
aXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKDApKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFj
ZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQoreworICAgIEFT
U0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVy
bHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVM
TCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVRleHR1
cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQor
ICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
ICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsKIH0KIApAQCAtMjM1
MywxOCArMjQyMSwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAotVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFU
IGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVyZVN0b3Jh
Z2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0
b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdl
LCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKIHsKLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQogICAgIG1UZXh0dXJl
ID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUo
c2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVSVEFSR0VUIDog
MCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAoc2l6
ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUo
c2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBO
VUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjQ0OCw4IEBAIFRleHR1cmVTdG9yYWdl
Q3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7CiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjUyOCwzNiBA
QCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdM
X1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRo
KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlb
MF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRI
ZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVts
ZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xl
bnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1
YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQo
KSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQp
XVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1U
X1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKQEAgLTI1
ODIsOCArMjY1Nyw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFM
Rl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYg
KG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYm
IG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAg
LTI2NzksOSArMjc1NCw5IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBs
ZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVz
c2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yNjk0LDExICsyNzY5
LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIEdMc2l6
ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAgR0xpbnQgbGV2ZWxz
ID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0
ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4
dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywg
Zm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwogCiAgICAg
aWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yNzQyLDkgKzI4MTcsMTAg
QEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICB7CiAg
ICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAg
ICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAgICBEM0RG
T1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAg
IEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAg
ICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAgICBuZXdUZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgdHJ1ZSk7Cisg
ICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywg
ZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5V
TEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjgzNSw4IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRv
UmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0y
OTI5LDEwICszMDA1LDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplCiAgICAgR0xlbnVtIGZv
cm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVudW0gdHlw
ZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFUIGQzZGZt
dCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNvbnN0IGJv
b2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmICht
VXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdPUkQgZDNk
dXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRl
bGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwg
c2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7
IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwxMiArMzEyNSwxNCBAQCBSZW5kZXJi
dWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKIAog
ICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GYWNl
UHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRl
eHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBS
ZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRh
cmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07CiB9CiAKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQoSXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKQEAgLTMwODcsNCArMzE2NSw0IEBAIFRleHR1cmVTdG9y
YWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKICAgICBy
ZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmlu
ZGV4IDE5YTZlYjUuLjJlNjMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC01Myw5ICs1Myw2IEBAIGNsYXNzIEltYWdlCiAgICAg
dm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJrQ2xlYW4oKSB7
bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2Nr
ZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCiAgICAgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7CiAKQEAgLTcwLDU1ICs2Nyw1NyBAQCBjbGFzcyBJbWFnZQogICAgIHZvaWQgdXBk
YXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRBbHBoYUhhbGZG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5j
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVt
aW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRS
R0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxv
YWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUhh
bGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2Fk
QkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5wdXQpOworICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZv
aWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKQEAgLTEyOCw2ICsxMjcsOSBAQCBjbGFzcyBJbWFn
ZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAgICBIUkVTVUxUIGxvY2soRDNETE9D
S0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOworICAgIHZvaWQgdW5sb2Nr
KCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNpemVpIG1IZWlnaHQ7CiAgICAgR0xl
bnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0NiwyMSBAQCBjbGFzcyBJbWFnZQogY2xhc3MgVGV4
dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShEV09SRCB1c2Fn
ZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgYm9vbCBpc1JlbmRl
clRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7CiAgICAgRDNEUE9P
TCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKICAgICB1bnNp
Z25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKICAg
cHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UpOwog
Ci0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAgIGNvbnN0IERXT1JEIG1EM0RVc2Fn
ZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAgICAgY29uc3QgdW5zaWduZWQgaW50
IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxOTMsNyBAQCBjbGFzcyBUZXh0dXJlIDogcHVi
bGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CiAgICAgR0xl
bnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xp
bnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0KICAgICB2aXJ0
dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Z2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIxMiw2IEBAIGNsYXNzIFRleHR1cmUgOiBw
dWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVf
VEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUg
dGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNh
dXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAog
ICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmU7Ci0KICAg
ICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1h
Z2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwpAQCAtMjU4LDcgKzI1Miw3IEBA
IGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVi
bGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1
cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1B
VCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOworICAg
IFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNh
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFn
ZTJEKCk7CiAKQEAgLTI4NiwxMSArMjgwLDEyIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBU
ZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBH
THNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0g
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWln
aHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEltYWdlKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAg
ICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5Niw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBU
ZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNz
ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwogCkBAIC0zMDks
NiArMzAzLDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0
dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwogCisgIHBy
b3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOworICAgIHZp
cnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsK
KyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRh
cmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVy
ZTJEKTsKIApAQCAtMzE2LDcgKzMxNSw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0
dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJl
bmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKQEAgLTM0
MSw3ICszMzksNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogY2xhc3MgVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1YmxpYzoK
LSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwg
aW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKTsKIAog
ICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOwogCkBAIC0zNjksMTEgKzM2Nywx
MSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFs
IEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQo
R0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0SW50ZXJu
YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zOTEsNyAr
Mzg5LDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZvaWQg
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNp
emUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzk2LDEwIEBAIGNsYXNzIFRleHR1cmVDdWJl
TWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4
KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAgLTQwNiw3ICs0MDcsNiBAQCBjbGFz
cyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlz
Q3ViZUNvbXBsZXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1YmMzZmIu
LjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBACiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0u
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgpA
QCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVy
dGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAgIGNvbnN0
IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJp
YnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmli
dXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewot
ICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0
U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVk
W2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRl
eChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUg
cmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3Rh
dGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0
OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBH
TFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdMZW51bSBm
cm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9B
VD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsg
fTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHBy
ZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZs
b2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0
cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZM
T0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4
ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25S
dWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGlu
dCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZh
dWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVl
cyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmlu
ZGV4IGVlOGVjYTkuLjk1ZGI1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgpA
QCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
dmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhhdCBmb3Jt
YXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29s
IGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7Cisg
ICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkg
YmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBH
TF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIC8v
IGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxpZCA8Zm9y
bWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgorICAgIHN3
aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAg
Y2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0K
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwg
ZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29t
cHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGNv
bXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXByZXNzZWQg
IT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChmb3Jt
YXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkK
KyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVy
bmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQogICAgIHsK
LSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0
aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVy
ZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdo
dCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4NSw0MyBA
QCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNv
bXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
fQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVz
c2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0g
MCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5n
ZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBh
cmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBH
TF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3Jt
YXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAgIGVs
c2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFn
ZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xf
Tk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1
NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAg
ICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFs
Rm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAg
ICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lz
dGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVs
KTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFn
ZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdM
X05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0
aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhj
dWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUg
PSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZv
cm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAz
LjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiArMTU2OCw5
IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4
LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkg
IT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxs
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RF
WFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUg
PSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAg
LTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVu
dW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgy
ZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21w
cmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVy
ZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0QXR0
cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFt
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIx
OCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBOVUxMOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9T
VEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRh
dGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1p
dihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAgICAgICAg
ICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5B
UllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2LDEyICsz
OTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3Jh
bSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJv
Z3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVm
U2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4
OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xp
bnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24s
IE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1
ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZv
cm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYo
R0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJv
Z3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qt
PmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNh
bGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFt
ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2Nh
dGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAorICAg
ICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkg
YmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRf
T0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21i
aW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9F
TlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4g
c2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAg
ewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2b2lkIF9f
c3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGlu
dGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1NCw3IEBA
IHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9B
VF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyAr
NTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xf
SEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6
CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21w
cmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQsMjcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUx
NDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
VEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0
YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0
aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8
IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xl
bnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0
aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBv
bmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxz
ICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAg
ICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1MTcsMTEg
KzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1
cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBu
b3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQs
IGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1
YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhv
ZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwg
dikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9j
YXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0y
aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBj
b3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEyMiwxMyBA
QCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIsNyArNjE3
NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00
ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTg5
OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9u
LCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFs
dWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2NDA2LDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAm
JiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9
IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQpAQCAtNjA5Miw3ICs2NDQ0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVmFsaWRh
dGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDYzLDYgKzY4MjEsNzkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeU9F
UyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCB2
b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJ1ZlNp
emUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9ybWF0ID0gMHglMC44cCwgYmluYXJ5
ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5
Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQgPSBHTF9QUk9HUkFNX0JJTkFSWV9B
TkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1CaW5h
cnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpCit7
CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJpbmFyeUZvcm1hdCA9IDB4JXgs
IGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmlu
YXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaW5hcnlGb3JtYXQgIT0g
R0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFByb2dyYW1CaW5hcnko
TlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwog
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQ
cm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9u
CkBAIC02NDk5LDcgKzY5MzAsOCBAQCBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKgogICAgICAgICB7
ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEV9LAogICAgICAgICB7Imds
RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7ImdsRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKLSAgICB9OworICAgICAg
ICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xQcm9ncmFt
QmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQ
cm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKIAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNp
emVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQogICAgIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LnZjcHJvagppbmRleCA3ZDJiNjQ5Li4zYmM4MzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCkBAIC00MDEsNiAr
NDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5MSw2ICs0
OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXggNjU4OWVi
MS4uNDQxMDVjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3Nl
ZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0g
Zm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAg
ICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUg
c2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0
ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUs
MTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNp
Z25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAg
ICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBDaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3
aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVudW0g
RXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAgICBj
YXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VY
VDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VT
OiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VT
OwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBAQCBH
TGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7
CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBH
TF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lH
TkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAg
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQK
ICAgICB9CiB9CkBAIC03NjcsNiArNzQxLDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7Cisg
ICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAg
ICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBH
TF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKQEAgLTk2NSw2
ICs5NDAsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhGb3JtYXQoRDNERk9STUFUIHN1
cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRa
KTsKK30KKworYm9vbCBJc1N0ZW5jaWxGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7
CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXpl
aSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUp
CiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAppbmRleCA4
ODIzOGRjLi5lZDE1MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvdXRpbGl0aWVzLmgKQEAgLTE2LDYgKzE2LDkgQEAKIAogI2luY2x1ZGUgPHN0cmlu
Zz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VS
Q0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChE
M0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgZ2wK
IHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRo
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KQogR0xzaXplaSBD
b21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQpOwogR0xz
aXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCk7Citib29s
IElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0g
dGFyZ2V0KTsKLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSk7CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwog
R0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAKQEAgLTc5LDYgKzgy
LDggQEAgR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpOwogR0x1aW50
IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDMy
Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQz
REZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0aEZvcm1hdChEM0RGT1JNQVQgc3Vy
ZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1h
dCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1Q
TEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBmMzU5NDFjLi41MWFiYTI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjI5OCw2ICsyMjk4LDE1IEBAIElGIChFTkFCTEVf
V0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2Rl
R2VuR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcApAQCAtMjMxOCwyMCArMjMyNyw1
MSBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9s
ZXhlcl9nbHVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2xleGVyX2dsdWUuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNz
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZUhhbmRsZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9QcmVwcm9jZXNzb3IuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lv
bkdMU0wuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9W
YXJpYWJsZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwNWIzYTY2
Li40MDFkYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4NDEsNiArNTg0
MSwxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZWJ1Zy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisgICAg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorICAgIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCisgICAg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHku
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1
cnNpb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmggXApAQCAtNTg4NSw4ICs1ODk0LDMzIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5jcHAgXAorICAgIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJfZ2x1ZS5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5j
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorICAgIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5j
cHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisgICAg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAgIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBc
CisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwKKyAgICBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNw
cCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKyAgICBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKyAgICBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAg
ICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuY3BwIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKQEAg
LTU5MDAsNiArNTkzNCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTA4LDYgKzU5NDMs
MTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZlcnNpb25HTFNMLmggXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorICAgIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oIFwKKyAgICBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCisgICAgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckVTU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JHTFNMLmNwcCBcCkBAIC01OTE1LDggKzU5NTQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5j
cHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExT
TC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisg
ICAgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3Vp
dC5jcHAgXAorICAgIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0
aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oIFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTBlM2U1Yy4uYzczMWNjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0zOTQxLDYgKzM5NDEsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21tb24uaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKQEAgLTM5NjAsNyArMzk2NCwyMCBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xleGVyX2ds
dWUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNl
ci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5o
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFy
c2VyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zY2FubmVyLmggXApAQCAtMzk3NSwxNCArMzk5MiwxNyBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9SZW1vdmVUcmVlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Jl
bmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaEhh
bmRsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmggXApAQCAtMzk5NSw2ICs0MDE1LDExIEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2RlYnVnLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgXApAQCAtNDAxOSwxMCAr
NDA0NCwxMiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgXAorICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCi0gICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQwMzIsNyArNDA1
OSwxOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGV4ZXJf
Z2x1ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9tZW1vcnkuYyBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>
<flag name="commit-queue"
          id="156401"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149888</attachid>
            <date>2012-06-27 23:53:04 -0700</date>
            <delta_ts>2012-06-28 00:28:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1715512</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLjhiNzM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDODE1OUMy
MUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNF
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
QTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
RDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Yy
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9OworCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAq
LzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1
MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJ
CUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
Ki87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlD
MjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIx
Q0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2
ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlB
MjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2
ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1
QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xT
TC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhF
NjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsK
QEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQy
QUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9
OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYgKzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZF
OTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2
MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25v
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3Rp
Y3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGlj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NEMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNz
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QyMTU5QzIx
Q0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENDE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENTE1OUMy
MUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDYxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDcxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U0
MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNzE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5k
ZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJGMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzUxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMw
MDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJB
TkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlGQjM5RDE4NjEy
MDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDE4
NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIsMTUgKzI0OSwxMSBAQAogCQlGQjM5RDFD
MDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQx
QzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyog
U3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0IxMjAwRjI2MjAwMDg4
RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gdGV4dC54bWw7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9qOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQzMTIw
MEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAogCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5m
b2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNo
YWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMzNiw2MiBAQAogCQkJcGF0aCA9IENvbmZp
Z3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI2NTY3QzUx
NTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi8s
CisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1
NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2
NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1
NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1
NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
Q0UxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2
N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
LAorCQkJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2
NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4
NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5
IC8qIFByZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBT
b3VyY2VMb2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bi5jcHAgKi8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJ
CQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2
NTY3RTgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBuZXc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMy
M0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0g
ZGVwZ3JhcGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1
OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2
ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAor
CQkJKTsKKwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlGQjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4
OEU2OSAvKiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlE
MTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2
MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIw
MEYyNjIwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2
MjAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkg
LyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVj
dERpc2NvbnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovLAogCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTMyNywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNo
SGFuZGxlLmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCAqLywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAq
LywKLQkJCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNw
cm9qICovLAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wu
dmNwcm9qICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLywKIAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAq
LywKIAkJCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5
RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFE
MzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3Qjgx
NTlDMjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWlu
Y2x1ZGVJbkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYg
QEAKIAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVC
RDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJE
MSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91
dHB1dEVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRF
U1NMLmggKi8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuaCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJ
CQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
ICovLAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAw
ODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmggKi8sCisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJ
CTQ5OTUxQzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJ
CTQ5OTUxQzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2
N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJF
MTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNB
RkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZF
ODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0Iw
MDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xz
bGFuZ190YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
X3RhYi5oICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8s
CiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlG
QjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBA
QAogCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywK
IAkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJ
CUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJ
CUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LywKIAkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oICovLAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovLAogCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywK
IAkJCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlG
QjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZC
MzlEMjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJ
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
CiAJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIz
ODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURD
QjAwMkQ0MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEw
MDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJF
QkQxIC8qIE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAv
KiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuY3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNM
LmggKi8sCisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCAqLywKKwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJ
CQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlG
QjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0
MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4
NTM5IC8qIFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVw
cm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5
MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5
QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYz
NUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWlu
ZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3Bw
ICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICov
LAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8s
CiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJ
CQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAw
RjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYw
MDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyog
dXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAw
ODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZC
MzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1
QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyog
Y29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMw
MDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0
QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAv
KiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAv
KiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vz
c29yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291
cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC01ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAw
MDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAw
RjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1Mzkg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMy
MUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmI2OTQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUzIEBACisyMDEyLTA2LTI3
ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAg
ICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5n
bGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBp
bGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6Cisg
ICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAo
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAg
IChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNo
KToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6
OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRp
ZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFk
aWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGlu
dWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6
OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgor
ICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNz
Ojp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGlj
cyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3Ip
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVy
OjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChU
RGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToK
KyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlv
clN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAg
ICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0
KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRl
eHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAg
ICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91
dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Omhl
YWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZp
c2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6
CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0
SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNp
emUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0
ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVu
c2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0
QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAg
KFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAg
ICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6
VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJl
bmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZh
cmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAg
ICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0
Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFy
eSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6Cisg
ICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6
OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6
CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3Bw
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9y
Q3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlv
bik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3Jh
cGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToK
KyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6
VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFy
ZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3Jh
cGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1
bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgor
ICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3lt
Ym9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24p
OgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAo
VEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVj
dGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAg
ICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBo
TG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRH
cmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAg
ICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVn
aW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVy
U3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6
OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJr
VmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3Rh
Y2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6Omdl
dFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNl
dFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1h
aW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAg
ICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWlu
ZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dp
Y2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5p
bmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAg
ICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToK
KyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGds
c2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5n
X3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAg
KFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFn
Z3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJ
bnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHBy
YWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNy
byk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25kaXRpb25hbERpcmVj
dGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxFT0QpOgorICAgICAg
ICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJlZGVmaW5lZCk6Cisg
ICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZp
bmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjps
ZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAgICAgICAocHA6OkRp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Up
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVBy
YWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgorICAgICAgICAocHA6
OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0
aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25J
Zik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAg
ICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBh
cnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFy
c2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6Oklu
cHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oOgorICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0
Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5w
dXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6Okxv
Y2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6TWFjcm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChwcCk6CisgICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpU
b2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6On5NYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgor
ICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05l
eHRUb2tlbkxlZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3Jv
KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6
OmNvbGxlY3RNYWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VN
YWNyb1BhcmFtcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5k
ZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
OjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRl
cjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFj
cm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4
dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJv
Y2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQp
OgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nl
c3Nvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRp
b246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHA6CisgICAgICAgIChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAg
ICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAg
IChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oOgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tl
bik6CisgICAgICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRv
a2VuOjpoYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNh
YmxlZCk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAg
ICAgICAoeXlfdHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9n
ZXRfcHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAg
IChpbnB1dCk6CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1
ZmZlcik6CisgICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVh
dGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5p
dF9idWZmZXIpOgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9i
dWZmZXJfc3RhdGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAg
IChwcF9zY2FuX3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5
X2ZhdGFsX2Vycm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xp
bmVubyk6CisgICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAg
ICAgICAocHBnZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRf
dGV4dCk6CisgICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgor
ICAgICAgICAocHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBw
c2V0X291dCk6CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6
CisgICAgICAgIChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAo
cHBnZXRfbGxvYyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQp
OgorICAgICAgICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMp
OgorICAgICAgICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgor
ICAgICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChw
cHJlYWxsb2MpOgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5p
emVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6c2V0RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVt
YmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5l
cik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENv
bnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5l
cmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJ
bnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6
CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbFVzYWdlKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OmJlZ2luRXJyb3IpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNT
YW1wbGluZ09wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgor
ICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVz
dHJpY3Rpb25zKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJv
cnMpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlz
cGxheS5oOgorICAgICAgICAoRGlzcGxheSk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcDoKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OmluaXRpYWxpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpz
d2FwUmVjdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3Vi
Y2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4pOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpzd2FwKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcik6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpZHRoKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
SGVpZ2h0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldFN3YXBJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
c2V0Qm91bmRUZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wv
bGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0Q2xlYXJEZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNDdWxsRmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxNb2Rl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEZXB0aFRlc3RF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJs
ZW5kKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRC
bGVuZENvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNl
dEZpbGwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Ft
cGxlQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclRlc3QpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGl0aGVyRW5hYmxl
ZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFZpZXdwb3J0UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1z
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QWN0aXZlU2Ft
cGxlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFj
dGl2ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrQWxpZ25t
ZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja1JldmVy
c2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVTaGFk
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZlbmNlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVR
dWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjplbmRRdWVy
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmVuY2UpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGbG9hdHYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzeW5jKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3TGluZUxvb3ApOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnJlY29yZEludmFsaWRFbnVtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24p
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldEVycm9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZXNldFN0
YXR1cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNFdmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzT2Nj
bHVzaW9uUXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVy
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2
ZWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmN1bGxTa2lwc0RyYXcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmlzVHJpYW5nbGVNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdFJlbmRl
cmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6On5GcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldE51bGxDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOgorICAgICAg
ICAoRnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChnbCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJp
bmRpbmdzKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRp
bmdzKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpJbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjp+SW5mb0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpJbmZvTG9nOjpnZXRMb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZFNh
bml0aXplZCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kKToKKyAgICAgICAgKGdsOjpJ
bmZvTG9nOjpyZXNldCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6flByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmF0dGFjaFNo
YWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCk6CisgICAgICAgIChnbDo6QXR0cmli
dXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rKToK
KyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRQ
cm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dmFsaWRhdGUpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1Byb2dyYW0uaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKEF0dHJpYnV0ZUJpbmRpbmdz
KToKKyAgICAgICAgKEluZm9Mb2cpOgorICAgICAgICAoUHJvZ3JhbSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAgICAgICAgKGdsOjpzdHIpOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToK
KyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFk
ZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1h
dHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0
cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAg
KGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdp
c3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAg
ICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAg
ICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJl
bGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVu
Y2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChn
bDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIp
OgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0
VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAg
IChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAg
ICAgICAoZ2w6OkltYWdlOjp+SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6aXNSZW5kZXJhYmxlRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OnNldE1hbmFnZWRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZEFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1p
bmFuY2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRl
RGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkUkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdl
Ojp+VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1
cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJp
YWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRNaW5GaWx0ZXIpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnNldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBUKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWluRmlsdGVy
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwVCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFn
ZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycyk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6aGFzRGlydHlJbWFnZXMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnJlc2V0RGlydHkpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aXNJ
bW11dGFibGUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRC
bGl0dGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJE
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVy
ZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWln
aHQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OnJlZGVmaW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJ
bWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omlz
RGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0
aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9z
Wik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmZhY2VJbmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVm
aW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2Vu
ZXJhdGVNaXBtYXBzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoSW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6
OkltYWdlOjptYXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEZvcm1h
dCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldFR5cGUpOgorICAgICAgICAoZ2w6OkltYWdlOjpp
c0RpcnR5KToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUpOgor
ICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAgICAg
ICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGds
OjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUp
OgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAg
IChnbDo6RXh0cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0cmFjdFR5cGUpOgorICAgICAg
ICAoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAg
ICAoZHgyZXM6OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQpOgorICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgyZXM6OklzU3RlbmNpbFRleHR1
cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisgICAgICAgIChnbCk6CisgICAg
ICAgIChkeDJlcyk6CisKIDIwMTItMDYtMjIgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJm
aWVsZEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTYW5pdGl6ZSBHTFNMIGNvZGUg
dXNpbmcgQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9n
bDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgsMTEgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8qIEdMX0FO
R0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Cisj
ZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRl
bnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIsMTEgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2Vu
ZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3By
b2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggYTNmYzkzNS4uOWE0
YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJz
aW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVu
dGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1Cisj
ZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2lu
ZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3
ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9T
UEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMg
PSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhl
IFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAg
Ly8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBE
aXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENT
UyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFn
Q29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQt
aW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0
KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVy
IHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVj
dGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlz
IG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8v
IEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBh
c3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25t
ZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9k
ZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVj
OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewog
ICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8v
IFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBk
cml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAg
U0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBh
biBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0
aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8g
dGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2Ug
dGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNw
ZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVT
VFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBl
bmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmlj
dGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVm
ZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVy
IHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRh
aW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5
cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAw
CiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQwOWI2MjIuLjU2NWRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyog
ZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJE
MjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgy
NSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdC
MzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRv
ckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjEx
MUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZF
IC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhD
IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9
OworCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9Owor
CQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEw
MDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9
OworCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMx
QTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4
cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIw
MTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tl
bi5jcHAgKi87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4Mzgx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMy
NEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi87IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUz
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICov
OyB9OworCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07
CisJCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAgKi87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsg
fTsKKwkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1
OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJl
bW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9s
cy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3
MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVC
RThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJj
ZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3
OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJs
ZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThE
Q0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVt
b3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAw
NzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRC
IC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CkBAIC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBR
dWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNs
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMx
M0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyog
RGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlh
Z25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMz
MUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9u
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyRjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBf
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVw
cm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9s
aW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0
UmVjdXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
cmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYw
MEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRl
Y3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5
QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2
ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlF
OTkwMiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRy
YW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1P
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEw
QkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMy
MUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xh
dG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2
MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hT
eW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KwkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5
M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZE
QSAvKiBjcHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0
LmMgKi8sCisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LywKIAkJCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMx
Mzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMx
QTAwMEU1N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBh
cnNlci5oICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmgg
Ki8sCiAJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0
MSwxNSArMzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRG
REI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENC
RURGMUM5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1
NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVC
NzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAx
N0M0NCAvKiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29t
cGlsZXIuY3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
KwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0
QjE1OUMzMjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJF
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0Mx
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAv
KiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGds
c2xhbmcuaCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXgu
Y3BwICovLAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAg
Ki8sCisJCQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJ
CQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0Iy
OTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3
QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAog
CQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJ
CQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEy
MDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywK
IAkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAotCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCiAJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8s
Ci0JCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2
MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdF
NUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJE
NDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFC
NTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEz
QjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBB
IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3Nv
dXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1
dEVTU0wuY3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NM
LmggKi8sCiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
LApAQCAtMjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyog
T3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0
cHV0SExTTC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhM
U0wuaCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAg
Ki8sCiAJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywK
IAkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlC
NjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAy
ODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0
RjAwRTU3QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAv
KiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlm
aWVyQWxpdmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJl
ZS5jcHAgKi8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAq
LywKKwkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywK
IAkJCQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJ
CQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2
NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAw
QTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVG
QUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAq
LywKIAkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
LAogCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAog
CQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBA
IC0yOTIsMjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5z
bGF0b3JITFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmgg
Ki8sCi0JCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8s
Ci0JCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJ
CUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAor
CQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywK
KwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIx
NUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFE
NTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzEx
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8q
IFZhcmlhYmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJz
aW9uR0xTTC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25H
TFNMLmggKi8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
LQkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50
ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
Ci0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJ
CUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5
OTAyIC8qIHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNv
bXBpbGVyOwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
CisJCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAor
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAor
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0
NCw2ICs0OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xh
dG9yX2NvbW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFu
c2xhdG9yX2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJh
bnNsYXRvcl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2Nv
bW1vbi5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJy
YXJ5LnN0YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJ
YnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFt
ZSA9IHByZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9o
bHNsIiAqLzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZl
cnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJ
CWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVu
LAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXBy
b2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3
IEBACiAJCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
LAogCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJ
CQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlB
MjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsK
IC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0
QjRCREU3QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRT
ZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8q
IFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBF
NTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OworCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4
NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4
QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0
ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdC
QkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5
QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
KwkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJ
CSk7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVk
ZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JC
RSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0Vc
IiIsCisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMg
PSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUg
PSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJ
CX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYg
KzkxMSwxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0Mw
MEU1N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
cHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBE
ZWJ1ZyAqLywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xh
dG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIuLjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBA
CiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmlu
ZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJ
TFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVy
c2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5k
ZXggMjAzYzQyMS4uYmRkMTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQog
I2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5l
IEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVm
aW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZ
KHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5h
bWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiBy
ZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9l
bXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5
WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4
KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4o
eVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQg
eCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFu
KHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNv
cyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00
MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2Vt
dSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsg
cmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5
WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0
dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJd
KSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVf
ZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAg
Y29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CiB9OwogCiBj
b25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsg
fSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2Vt
dV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVf
cHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkg
eyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmds
X2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIs
CiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIs
CisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgp
IC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3Rh
bmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2Uo
dmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0
LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+
PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0
aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVj
NCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAw
LjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAo
TikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2
ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywg
dmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQp
IgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJp
dmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1v
ZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAt
MTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBX
b3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAv
LyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRh
bjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExF
X18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVz
ZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIK
ICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRv
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Cisg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFf
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UK
KyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEw
ICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0g
ewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODks
NyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAg
ZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFf
MTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9u
RG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25S
ZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
CmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBA
IC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAg
ICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4x
XzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25B
dGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFu
M18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80
LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAv
LyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0
IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVu
Y3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRl
OgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAg
ICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAg
IFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBU
RnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0
aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1v
ZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGYyN2NiNzUuLmNhYjgwNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApAQCAtOCwxMCArOCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMg
c3BlYykKK3sKKyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNI
X0NTU19TSEFERVJTX1NQRUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1i
b2xUYWJsZSgKQEAgLTEyMyw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcg
YXMgd2VsbC4KLSAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKQorICAgIGlmIChp
c1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGgg
b2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3Mu
CkBAIC0xNjEsNiArMTcyLDEyIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIq
IGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAm
IFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNo
YWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NT
aGFkZXIocm9vdCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VS
X0lOREVYKSkKICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRl
Z2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBAIGJvb2wg
VENvbXBpbGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCiAgICAgfQogfQog
Cit2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sK
KyAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICBy
b290LT50cmF2ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2
YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwogICAgIHJldHVybiB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCiti
b29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCwgYm9vbCBvdXRwdXRHcmFwaCkKK3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9T
UEVDKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVz
dCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7
CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0
cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFn
bWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRH
cmFwaCkgeworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1Np
bmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFw
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgfQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2lu
ay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAg
IHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJl
dHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpj
b2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMjMyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBD
b250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBv
ZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChp
bXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlv
bnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsK
K30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUt
PmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAg
bUxvb3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BE
aXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdy
YWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFk
aWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAg
ICAgY2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGll
bnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmICht
R3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisK
KyAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAg
bmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0
dXJlQ3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2Fs
bGVkLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQg
dG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRP
cGVyYXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9k
ZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9k
ZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YmRhNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApAQCAtMCwwICsxLDUwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3
aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBm
dW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3Jh
ZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNU
RElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisK
K25hbWVzcGFjZSBzaAoreworLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEg
dmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51
aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJh
dmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJv
b2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51
aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rp
b25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlv
biA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBt
R3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24o
VEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJ
U0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVmOTNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VM
b2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdu
b3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBz
ZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
KyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJv
ciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4
KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUp
KTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIg
PDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQor
Cit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQzYTEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDM5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBD
T01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9z
dGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9z
dGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsK
KworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAg
IHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHRva2VuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisK
KyAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYg
bUluZm9TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhh
bmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjZhYjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlh
Z25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVx
dWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIgPT0g
a1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxl
KSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJu
IEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsK
KyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAg
IDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxl
cigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0wo
IlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1p
emUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wgcHJh
Z21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAgICAg
IC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFs
aWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BS
QUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnZh
bGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21h
IHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdv
ZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisgICAg
VEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlh
Z25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3Ii
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh
bm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3Ig
aXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJp
dHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
KyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAgICAg
Y2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0eSA9
IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbURp
YWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3ZvaWQg
VERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9u
KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAodmVy
c2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9
IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25v
c3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNp
b24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDNkZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJl
Y3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoK
KyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAor
ICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEo
KSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBt
UHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAg
IFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
SVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAppbmRleCBlOWJiYTRiLi42MDQwOTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RXh0ZW5zaW9uQmVoYXZpb3IuaApAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9FWFRFTlNJT05f
QkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURf
CiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVk
ZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAgICAgRUJoUmVx
dWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsyMSwxNyBAQCB0
eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJl
aGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAg
ICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICBy
ZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJldHVybiAid2Fy
biI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlzYWJsZSI7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2goYikKKyAgICB7
CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVC
aEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndh
cm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVm
YXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0cmluZywgVEJl
aGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9u
IG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2
aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNlOTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1w
bGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRz
KFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykK
IHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0
cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2Vz
KQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
IiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdC
dWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0
dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRp
YWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAg
IGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHJlc291cmNlcykpOwor
ICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291
cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKICAgICAvLwogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3Jk
IiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdD
b29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShF
YnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJh
Z0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250
RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsK
KworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBn
bF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAg
ICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZh
aWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19T
UEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAg
IDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcg
KzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJp
YWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjog
eworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9D
U1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBU
aGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0
YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQwY2Y1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRM
UyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NU
TFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgo
dGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sK
KyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJz
ZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0
aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExT
VmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBh
cnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250
ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYg
KGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVl
ZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQ
YXJzZUNvbnRleHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmluZGV4IDc2MGZkMDku
LmFhNTNiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApAQCAtMTMsNCArMTMsMTQgQEAg
Ym9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBUUGFyc2VDb250
ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVy
biBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5l
IEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0
cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4u
OTJjNDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5v
ZGUsCiAvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFu
IGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8g
aXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVn
YXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRl
cm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0
b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1O
b2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZVBhaXIgbm9kCiAgICAgLy8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYg
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAo
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7
CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9k
ZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5v
ZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAg
IH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihj
b25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCog
Y29uZCwgVEludGVybVR5cGVkKiB0cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgog
ICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9u
KGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAg
IG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
IG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0NDQsOSArMTQ0
NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24o
VEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1DCiAgICAgcmV0dXJuIGFkZENvbnN0YW50VW5p
b24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5n
ZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJh
eSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRU
b1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQotewotICAgIGFzc2VydCgh
cHJhZ21hVGFibGUpOwotICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOwotICAg
ICpwcmFnbWFUYWJsZSA9IHBUYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4
IDBjN2UxYTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyAr
MTUsOSBAQCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuY3BwCmluZGV4IDY5YjhjMjYuLmQ3ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIg
QEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAs
MTMgKzIyLDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hh
ciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwog
fQogCiBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAg
ICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBt
VW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlz
KTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0g
ZmFsc2U7CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNv
bnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1V
c2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxz
ZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQg
PSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAg
IG1TY29wZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBm
YWxzZTsKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRl
bGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgp
CiB7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250
aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2
ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQg
aGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1Cb2R5LmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRl
ci5jX3N0cigpOworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
CiB9CiAKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1
LDI1ICsyMTksMTEgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwg
IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVy
ZSBmZXRjaCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBh
bm90aGVyLiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBh
Y2NvcmRpbmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9t
IGxlZnQiLCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAg
ICAgIC8vIGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rp
b25zIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAg
ICAgICAgLy8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVu
Y3Rpb25zIGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSBzaW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+
IDEtWSwgd2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAv
LyBUaGUgdGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVz
ZSB0aGUgcHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwot
ICAgICAgICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1os
IHdoaWNoIGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gRm9yIGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBb
LTEsIDFdIC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3Ig
dGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndy
b25nIHNpZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFu
Z2luZyB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJv
dWdob3V0IHRoZSBjb2RlLgotICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQog
ICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MjMyLDcgKzIzMiw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBi
aWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
cHJvaihzLCBmbG9hdDQodC54LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikp
O1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgog
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQu
dykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtc
biIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAg
ICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
ICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQueiwgMSAtICh0LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQudywgMSAtICh0LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0
LngsIC10LnksIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkUocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlh
cyhzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBh
dmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNl
ZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
LCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2Qw
X2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVs
b2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBu
b2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC05NzMsOSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEp
CiAgICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAi
LCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Zl
Y3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7
IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIp
OyBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgogICAgICAgICBtVXNlc1hvciA9IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIiki
KTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMi
IDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApA
QCAtMTEzMSw5ICsxMjAxLDM2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotICAg
ICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIs
ICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5
KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BG
d2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAt
MTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0
aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZp
c2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDog
IigiKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWlu
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFp
bigiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigi
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZh
cmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
IAotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0g
c2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1
bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAg
ICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdl
dFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
YXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3Vt
ZW50U3RyaW5nKHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJn
dW1lbnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2Vx
dWVuY2UuYmVnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAg
ICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAg
ICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0Nywx
MDYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVu
bWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9
IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIg
OiAiKCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikK
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWxvZDApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2ooIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2pMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAg
ewpAQCAtMTU4MywxMSArMTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgaWYgKG5vZGUtPnVz
ZXNUZXJuYXJ5T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9s
ZFNlbGVjdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91dCA8PCAicyIgPDwg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CiAgICAgfQogICAg
IGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0
LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1VbmZvbGRTaG9ydENp
cmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAgICAgICBvdXQgPDwg
ImlmKCI7CiAKQEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKIAogICAgICAgICBp
ZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8PCAiO31cbiI7Cisg
ICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCiAgICAg
ICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgIG91
dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKIAogYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIGlmICghbUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBp
ZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAg
ICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiAK
ICAgICBvdXQgPDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAs
MTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCAqbm9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2
ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3Rh
dGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVy
c2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wg
T3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAg
LTE3NTksOSArMTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJ
bnRlcm1Ob2RlICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMg
d2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNw
bGl0dGluZyB0aGVtCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OwogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJv
b2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAv
IGluY3JlbWVudDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAg
ICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2ZSBs
b29wCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlh
bCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucyk7CisgICAgICAgICAgICAg
ICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhf
TE9PUF9JVEVSQVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAgICAgICAgICAgIC8vIGZvcihp
bnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQogCkBAIC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7
CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAgICAg
ICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IE1B
WF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9u
cyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlw
ZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAg
ICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRG
aWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZp
ZWxkLmdldEZpZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4
IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEz
NSw3ICsyMzA3LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlw
ZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEkKICAgICAgICAgewogICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5n
ZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAg
c3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVG
aWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAi
O1xuIjsKICAgICAgICAgfQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0
LDQgKzI2MDYsMTQgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3Qg
VFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKICAgICAKICAgICByZXR1cm4gZGVj
b3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNv
bnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
c3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAppbmRleCA4MjRiYzA3Li5lYTI4YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKQEAgLTE1LDcgKzE1LDcg
QEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRT
aG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgogewpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKIAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1l
bnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmlu
ZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9z
dFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgogICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5
cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVj
dCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENp
cmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFt
cwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29s
IG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0
MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1
bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZv
ciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgIGJvb2wgbUluc2lkZURp
c2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggNDMxZjhkMS4uNzliZGRlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xMCwzMyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRl
ICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMi
IHsKLWV4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVBy
ZXByb2Nlc3NvcigpOwotZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAq
bmFtZSwgaW50IHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtC
YXNlJiBzaW5rLAotICAgICAgICAgICAgICAgICAgICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291
cmNlTG9jIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4
dHJhSW5mbykKLXsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6
ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5r
LmxvY2F0aW9uKGxvYyk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCBy
ZWFzb24gPDwgIiAiIDw8IGV4dHJhSW5mbyA8PCAiXG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZp
bmVFeHRlbnNpb25NYWNyb3MoY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikK
LXsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwg
MSk7Ci0gICAgfQotfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmlu
ZywgaW50IHZlY1NpemUsIFRWCiB7CiAgICAgZmllbGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcu
c2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+
PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZp
ZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZl
Y3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVj
dG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VN
YXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNCiAg
ICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNvbXBTdHJpbmdb
MF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJp
bmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZp
ZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKICAgICAgICAg
aWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsK
QEAgLTE3MCw3ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRz
KGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycg
fHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICcz
JykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbG9jLAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJy
b3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAg
ICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZl
cnQgZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGlu
ZSwgIiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDEx
IEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKIHsKLSAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAgICAgICAgICJubyBv
cGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAgICAgIG9wLCBvcGVy
YW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMg
dGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAgICAgICAg
ICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJy
b3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
fQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9w
RXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCiAvLwogdm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcg
b3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhp
c3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKLSAg
ICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBh
Y2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCBy
aWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAg
ICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBy
aWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9y
KGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAK
IH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBU
UHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyArMjQyLDEz
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFBy
ZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5CiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2Fz
ZSBFYnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAg
ICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0
KSIsICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3Bl
Y2lmaWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJl
Y2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBw
cmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1
ZV0rKzsgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxl
IGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3Qg
aGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMDEsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAm
JiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzc5LDEwICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAvLwogICAg
IC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCiAgICAg
Ly8KLSAgICBpZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdl
KTsKKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAi
XCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29u
c3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
Y2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBu
b2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRv
a2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MzAsNyArNDE1
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29s
IGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2Nv
cGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFs
IHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwy
NiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRF
cnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5h
dEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywg
ImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
Z2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8i
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFk
ZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwg
IndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZl
ZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmds
XyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
Il93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYm
IGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRp
Zmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3Io
bGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29y
ZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQogCkBAIC01MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogICAgICAg
ICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXko
KSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxl
bWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJv
bSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0Fy
cmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0g
ICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2Fu
IG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihs
aW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkp
ICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhl
IG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4
SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6
ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CiAgICAgICAgICAgICAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkp
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZv
ciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAwOwog
ICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBh
cmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBl
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAo
b3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcgKzU3Miw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9k
ZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHVi
VHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
IGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAg
LTU5OSw3ICs1ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUAogYm9vbCBUUGFyc2VDb250
ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQog
ewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJy
YXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5
cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVs
c2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
IHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZQog
ewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRl
KSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmlu
ZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0
NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0g
RXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAgICAgICAgdHlwZS5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBh
cmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjkwLDE0ICs2Nzcs
MTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBU
SW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCiBib29sIFRQYXJzZUNvbnRl
eHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkK
IHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBh
cnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgs
NyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwogICAgIC8v
CiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNs
YXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBv
ZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2NywzNCArNzU0LDM0IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGlu
c2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBl
Y3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlz
QXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJh
eSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFy
aWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJy
YXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQg
PSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQg
IT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJh
eVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVl
IGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVz
ZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6
ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJv
bCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
bm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlw
ZSwgaW50IHNpemUsCiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYgKG5vZGUtPmdldFN5bWJv
bCgpID09ICJnbF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCogZnJhZ0RhdGEgPSBzeW1i
b2xUYWJsZS5maW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdEluKTsKLSAgICAgICAgaWYg
KGZyYWdEYXRhID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBkZWZpbmVkIiwgbGluZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZnJh
Z0RhdGEpOwogCiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKICAgICAg
ICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1
cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAg
dG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAg
ICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlw
ZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJs
ZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFs
aWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZp
ZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsK
ICAgICAgICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4
OTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxp
ZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJp
bmcocXVhbGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CkBAIC05MjQs
OCArOTA4LDkgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHAKIAogYm9vbCBUUGFyc2VDb250ZXh0
OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24p
CiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAg
aWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4
dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNp
b24pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09
IEVCaFdhcm4pIHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNp
b24gKyAiIGlzIGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAi
ZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRl
bnNpb24pCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hh
ciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0
ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25C
ZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9u
KTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0
aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUp
OworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxvYywgZXh0TmFtZSwgYmVo
YXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShp
bnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6
OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxl
LCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlUHJhZ21hKGxvYywgbmFt
ZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3MCwxMiArOTY5
LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGludCBs
aW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1CiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0
aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3lt
Ym9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUg
ZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHUKICAgICAvLwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAoKHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlm
aWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLwpAQCAt
MTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogCiAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxp
emVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7
CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3Qg
aW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBv
aW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFy
cmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90
IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTIz
OSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29u
c3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwg
IiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUt
PmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSog
dHlwZSwgaW50CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QsIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3Ry
dWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwg
cGFyYW1Db3VudCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUo
KS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIg
PDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIs
ICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwog
ICAgIH0KIApAQCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeQog
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2Vk
Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVu
Y3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFn
Z3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgot
ICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZl
Y3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHkKIAogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMu
b2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNb
aV0gPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIFQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAi
WyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOwor
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwg
aW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAt
MTM0NSw3ICsxMzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAgIGludCBz
aXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRy
aXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFMK
ICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXgg
Pj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRl
eCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICci
IDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0K
QEAgLTEzODAsNyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CiAg
ICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyArMTQzMiw3
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYg
aWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7
CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0
OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2Vk
IGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8g
c28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KICAgICBp
ZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVt
YmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxs
b3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3
IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRU
eXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykg
eworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBl
JiBmaWVsZFQKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0
aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1
Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVzdGlu
ZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBu
ZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkuY19z
dHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVuY2Ug
b2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIgPDwg
a1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4dHJh
SW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgyLDEw
NSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGlmICgoY291bnQgPT0gMCkg
fHwgKHN0cmluZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAvLyBzZXR1cCBw
cmVwcm9jZXNzb3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
KTsKLQogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAgIHJldHVy
biAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7
Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQgZXJyb3Ig
PSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpZiAo
IWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAKICAgICBn
bHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0g
ICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6
IDE7Ci19Ci0KLU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJz
ZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KLSAgICAvLwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIAotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNl
IENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgo
KQotewotICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
OwotCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFy
c2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19J
TkRFWDsKLQotICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKLX0KLQotYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFy
c2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0g
ICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAo
bHBUaHJlYWREYXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHBUaHJlYWREYXRhLT5scEds
b2JhbFBhcnNlQ29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
cmVlUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNv
bnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0KQotICAg
ICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0K
IAotVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAg
Ly8KLSAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAotICAgIC8vCiAKLSAg
ICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJl
YWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgp
KTsKLQotICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmgKaW5kZXggM2UwNTc2My4uOGRlZThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lm
bmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29s
OwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDog
b3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZv
bGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBl
ZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91
dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3Qg
Y2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRp
YXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAg
IGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAg
ICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwK
ICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBA
IHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUo
TlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAg
ICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAg
ICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlz
KSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAg
ICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAg
ICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1l
ZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5n
dWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBh
bmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxh
bmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIg
Y29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBA
IC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7
CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5l
cjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZv
U2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVh
c29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVj
dCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxp
ZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wg
ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVu
c2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAg
ICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0
KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVj
Ci17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQ
YXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKaW5k
ZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNr
R3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNv
CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0
J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAg
ICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUg
YWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBz
aXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRp
b24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgp
KTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFt
YWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJp
bnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAl
enUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1Rl
eHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29s
QWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmNzQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitz
dHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVk
IG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRy
dWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRp
bWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVi
dWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAt
MCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKyNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQorICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBUU3RyaW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdG
dW5jdGlvbk5hbWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAppbmRl
eCA5MWM0N2U3Li4yNjUyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVN
YXA7CiBjbGFzcyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBX
ZWJHTCBzcGVjLAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3
LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0
UmVjdXJzaW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidz
IGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAg
ICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQog
ICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBB
LgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03
OSw2ICs4OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhU
SW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFp
bSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3Ry
aWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wg
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9w
ZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAg
Ym9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVu
ZGVuY3lHcmFwaCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGgg
ZGVmYXVsdCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCAxM2YxMWI1Li41NmY1YzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCkBAIC03MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hh
ZGVySW5mbyB2YXJUeXBlLAogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoID0g
MSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYk1heExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKSk7
CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYkxlbmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoIC0g
MV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0
IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVO
R1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5h
bWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAgICAgIHN0cm5j
cHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVM
ZW5ndGgpOworICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcAppbmRleCBlZGJlYTk5Li42OGYwMjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKQEAg
LTE2LDkgKzE2LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEg
cGxhY2UgdG8gbGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgVFR5cGU6OmJ1aWxkTWFu
Z2xlZE5hbWUoVFN0cmluZyYgbWFuZ2xlZE5hbWUpCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkg
ewogICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJh
eVNpemUpOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNp
emUpOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9
IGJ1ZjsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKaW5kZXggOTZk
N2YxMC4uZjQxZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAK
IFRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAppbmRleCA3NjdkMGJmLi5kNjllYzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAppbmRleCA5NjQyZTFlLi41Mzc3
OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVi
dWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNl
QnVmZmVyTGVuID0gMTAyNDsKQEAgLTI4LDcgKzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFy
ICpmb3JtYXQsIC4uLikgewogICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4s
IGZvcm1hdCwgYXJncyk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNv
bnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFj
ZShidWYpOwogICAgIH0KIH0KIH0gIC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBU
R3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50
OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3Mg
VEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxP
cDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0
OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5
cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9y
OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisv
LworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9k
ZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRo
YXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1Ymxp
YyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2Rl
KiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnRO
b2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBp
ZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9Owor
CisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFw
aEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxs
KQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1B
cmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1l
bnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNz
IFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQor
ICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFn
Z3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdy
YXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2wo
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3Bl
cmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2Vs
ZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJt
U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2Rl
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBh
bmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRH
cmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAg
ICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFu
ZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMg
VEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2
aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdl
dEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5
Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBp
bnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8v
CisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9u
ZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFu
ZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgor
Ly8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3Jl
YXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0
YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAg
VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRl
bmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9
CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5
bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdp
bigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
U2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3lt
Ym9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1l
bnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1i
ZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNy
ZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVj
dGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7
CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7Cisg
ICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJt
TG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAg
IFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZl
Y3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9s
SWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
IFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBz
cGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1l
dGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBm
b3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVw
dGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5
bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQq
IHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFw
aEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
ZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXRE
ZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgo
KSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0K
KworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9p
ZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsg
fQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1W
aXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50
IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsK
KyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
QWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFn
Z3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5j
dGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0
QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7Cisg
ICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25z
LgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAg
ICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7
Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2Fs
bCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5j
dGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1l
bnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBp
bnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVu
dHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAg
ICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJn
dW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1l
bnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
YXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVu
ZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVu
dCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3Vs
dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtl
ICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4
IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBl
YXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRo
ZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVn
YXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUt
PmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikK
KyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
Cit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5
bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhh
dCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+
Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQg
bGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3Vz
CisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVm
dG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0
U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVm
dG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRl
cm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOwor
ICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0
ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlm
IChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlz
aXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5
Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGlu
dGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJt
TGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0
bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhl
IGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEg
cmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5
bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1v
c3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJ
bnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7
CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCog
YXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5
bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMg
YXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwor
ICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBB
biBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBh
c3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGlu
IHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdu
bWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNy
ZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1Rv
cFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkp
IHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7
CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRl
TG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+
Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVm
dCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAg
ICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRo
aXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAg
IGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRD
b25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRU
b3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3Jh
cGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9
IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9j
ay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxv
Y2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFs
c2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9u
ID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxv
b3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29w
LT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
aWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJl
c3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9
ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAg
ICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYyMzJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRl
cGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRj
LiBieSB0cmF2ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNr
PFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFw
aFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxl
Y3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRj
LgorICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8v
CisgICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBj
b250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNz
IFROb2RlU2V0U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9
OworICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0
dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNl
dCogZ2V0VG9wU2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2Rl
U2V0cy50b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0
IDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMu
cHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250
ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJl
bG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZv
aWQgcG9wU2V0SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVT
ZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAg
IGlmICghbm9kZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0
KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQt
Pmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRo
aXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0
aW5nCisgICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5
bWJvbHMuCisgICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBu
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQo
bm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNl
dCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3Rh
Y2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJl
bnROb2RlU2V0U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0
ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBw
b3BzIHRoZSBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7
CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRz
KSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNl
dHMucG9wU2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBw
dXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUg
aW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQg
YW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisg
ICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNl
dHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWlu
dGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdo
aWxlIHdlJ3JlIGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2ls
bCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlh
dGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVy
IGEgcmlnaHQgc3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3
aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAg
IC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJl
cGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0
cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFy
ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFz
cyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRH
cmFwaFN5bWJvbCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3Rv
cnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMu
dG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBt
UmlnaHRTdWJ0cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQg
YnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhp
cyk7IH0KKworICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVu
dE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlz
aXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSop
OworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVu
Y3Rpb25DYWxsKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3Jl
Z2F0ZSopOworCisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1i
b2wgbVJpZ2h0U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBU
Tm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9s
czsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9C
VUlMREVSX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJn
dW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9m
IGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxs
KCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQorewor
ICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8
PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJc
biI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6
ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIp
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIg
PDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBn
cmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQo
KTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Cisg
ICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxu
IjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAxNDQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhz
aW5rKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJv
bCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9u
Q2FsbCogZnVuY3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExv
Z2ljYWxPcCogbG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50
YXRpb24oKTsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cApAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0
aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rl
cy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhp
cyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7
CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRH
cmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4o
KTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBp
ZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50
cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRl
Y3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVy
c2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBn
cmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRy
YXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBo
VHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAppbmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFy
c2VDb250ZXh0OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAg
ICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFu
Z19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYjlhMzAyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdf
bGV4LmNwcCkuCiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiAr
MzgsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNw
cCkuCiAlewogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIu
aCIKIApAQCAtMTU5LDYgKzE2MCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03
XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
Zml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNp
Z25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBA
QCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10K
IAogMFt4WF17SH0rICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9
KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
KzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9j
dGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtE
fSsgICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyBy
ZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQog
CisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXBy
b2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZp
bmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwK
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwK
ICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5z
Y2FubmVyOwpAQCAtMjcyLDI2ICsyODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJl
cigpCiB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5z
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0s
ICJvcHRpbWl6ZSIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
IihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXpl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwi
IGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
M10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQg
dG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAg
ICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVi
dWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVn
JyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29u
dGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJh
Z21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAg
ICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8v
IEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24g
Y2Fubm90IHJlY29nbml6ZQotICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxl
bWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8v
ICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21h
IG5hbWUgaW4gcHJhZ21hVGFibGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51
bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5z
WzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJh
Z21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAg
ICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAg
ICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAg
ICAgfSAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAg
ICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRT
dHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBd
ID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01B
X1RBQkxFCi0gICAgfQorCisgICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYg
KHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9r
ZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURp
cmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3Jl
U3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSAr
MzkzLDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1z
ZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3Ip
Ci17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVy
biBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkK
LSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxl
IiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICgh
c3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBi
ZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVo
YXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2
aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBp
dGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFs
bCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAg
aWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxl
KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+
ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhh
dmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2
aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWly
ZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAg
IGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAg
ICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBz
dXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5o
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0K
IH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNh
bid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOwotCi0gICAg
YnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGludCBsZW4gPSAwOworCisj
aWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxl
biA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUo
KTsKKyAgICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNw
eShidWYsIHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlz
Y2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2Vu
ZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwor
ICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0
dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01
NDQsOSArNDUwLDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9G
IiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBl
Y3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAt
NTY1LDIyICs0NzEsNDMgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwogICAgIAogICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworI2VuZGlmCisgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNj
YW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQt
PnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
SW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vz
c29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxz
ZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNw
cC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0g
ICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChj
cHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBt
YWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAh
PSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9D
RVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXIt
PmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IGQ2Yzg4NjkuLmFiNGFhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3Io
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJB
R19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBU
VmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRp
ZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhw
cmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAg
ICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93Iiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBj
b25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgo
KSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xO
b2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJh
eSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAt
MjU0LDcgKzI1NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKICAgICAgICAg
ICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAk
My0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25z
dCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3LDcgKzI3MCwxMCBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJh
cnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5s
aW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3Bl
cmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMu
d2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpA
QCAtMzczLDcgKzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDAp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MTEsMTMg
QEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlw
ZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2gg
ZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTAwLDkg
KzUwNiwxMCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigk
MS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVk
Kj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTUyNiw3ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZx
SW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fu
bm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTUxLDcgKzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90
IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJt
ZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1NCw3IEBAIGZ1bmN0aW9u
X2lkZW50aWZpZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0
cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7CkBAIC0xMDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICBU
RnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1i
b2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVj
KSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNjAsNyAr
MTA2Nyw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFu
IGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xMDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJz
CiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIg
TEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQx
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxl
ciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsxMTAyLDcgQEAgcGFyYW1l
dGVyX2RlY2xhcmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDogdHlwZV9zcGVjaWZpZXIg
SURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQpAQCAtMTE5
MSw3ICsxMTk4LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8IGluaXRfZGVjbGFyYXRv
cl9saXN0IENPTU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVi
dEludmFyaWFudCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgfQog
ICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5
IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9u
cyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKTsK
QEAgLTEzNjQsNyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAkJC50eXBl
LnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDIubGluZSk7
CiAgICAgICAgIGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMTQz
OCw3ICsxNDQ1LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3Ry
aW5nLCAkMSk7CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCok
JC52YXJpYWJsZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJl
ZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFi
bGUtPmdldE5hbWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhl
IHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQpAQCAtMTQ1MCwyNiAr
MTQ1NywyNiBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAg
ICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlw
ZV9zcGVjaWZpZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5
cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gJDI7CkBAIC0xNjU0
LDcgKzE2NjEsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBM
RVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lv
bigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VT
IiwgJDEubGluZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogICAgIH0KICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJE
UmVjdCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIs
ICQxLmxpbmUpOwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVzdF9zdGF0ZW1lbnQKIGp1
bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIi
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3Rh
dGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJSRUFLIFNF
TUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CkBAIC0x
OTgxLDcgKzE5ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTk2LDEwIEBAIGp1
bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1
cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0
aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5j
dGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDQ0LDcgQEAg
ZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3ICsyMDU0
LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA4Niw3IEBAIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMg
d2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0
aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9
CkBAIC0yMTE2LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAKICAgICAgICAgLy8g
c3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBv
dGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3Jt
YXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6
ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250
ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJh
Z21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6
ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFn
bWEoKS5kZWJ1Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRBc0FnZ3JlZ2F0ZSgpKQog
ICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoJDMtPmdldEFzQWdn
cmVnYXRlKCktPmdldEVuZExpbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRleCA1OWI3Mjk5Li5kMjlkOTM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4IEBAIHN0YXRpYyB2b2lkIHl5X2Zh
dGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCSp5
eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9O
VU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05V
TV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0
IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVj
ZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0
cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMy
X3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQy
Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0
NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwg
IDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDEx
OSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAg
MywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwg
IDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEw
MSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwg
IDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDEx
MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIy
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAw
LCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAg
OTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcs
ICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAg
MTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAg
ICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwg
ICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0
MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAg
ICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5
MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAg
ICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAx
NDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMs
ICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisg
ICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjks
ICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAx
MTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcs
ICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAg
IDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAg
ICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAg
IDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDEx
MiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAg
IDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAg
IDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAg
IDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAg
MzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAs
ICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAg
NDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgs
ICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQs
ICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAg
OTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAg
ICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwg
ICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4
OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAg
IDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcs
CiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAs
ICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAg
MjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAg
MzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYs
ICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0K
LSAgICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1
MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1Nywg
ICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2
NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwg
ICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAy
NywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwg
ICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAg
ICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwg
ICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0
MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMy
LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAg
IDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0
LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
CisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAot
ICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMx
LCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAg
IDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3
LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAg
MTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcy
LCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAg
NjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAg
ICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAg
MjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4
LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAg
NTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1
NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIs
ICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAy
NDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAg
ICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1
MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2Mjgs
ICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAg
IDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgs
ICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1
MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMs
ICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0
ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUs
Ci0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwg
IDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3
OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2Niwg
IDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5
MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwg
ICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4
MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywK
LSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0
NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwg
IDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQz
NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywg
IDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1
LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAot
ICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEy
LCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAg
ICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAw
LCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAg
ICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAg
ICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAg
ICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAg
ICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1
LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAy
MDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgs
ICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAg
MCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAg
IDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEz
MSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0Nywg
IDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1
NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3Nywg
IDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4
MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwg
ICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4
MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwK
KyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4
MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwg
IDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAg
NjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1
LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAg
NTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4
LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAor
ICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgx
LCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAg
ICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYw
LCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAg
NTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3
LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAg
NTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisg
ICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAs
ICA1MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAy
NjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgs
ICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1
MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAs
ICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0
OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAg
ICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0
ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAs
ICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwg
ICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2
NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwg
IDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAg
MCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwg
IDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAg
MCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywg
IDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQy
NSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwK
KyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQw
NywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzky
LCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAg
MzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAw
LCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAor
ICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQy
LCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAg
NDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMw
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0
MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwg
ICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKwor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAg
NDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
Njk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsg
ICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMw
LAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAg
IDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYy
LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAg
IDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0
LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAor
ICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5
LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAg
IDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisg
ICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAg
OTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAg
ODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgs
ICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAx
NDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEw
NCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwg
IDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQy
MSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAg
IDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4
NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwg
ICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1
MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwg
IDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3
OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwg
IDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4
MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwK
LQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAg
Mjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAg
MjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAg
IDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1
LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAot
ICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0
MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIs
ICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0g
ICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcs
ICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAz
NjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAz
NDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAg
ICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAz
MjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUs
ICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwg
IDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4
NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3Mywg
IDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2
NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAg
IDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0
MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwg
IDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwg
IDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4Miwg
IDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAg
MTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAg
MTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1
LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwK
KyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5Niwg
ICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEy
MywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwg
IDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKwor
ICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1
LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAg
MTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIw
LCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAg
MTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0
LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAg
MTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5
LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAg
MTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4
LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAs
ICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0
NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQs
ICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQs
ICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAs
ICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAy
MjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcs
CisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMy
MSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwg
IDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQy
NiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwK
KyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQx
OCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwg
IDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwg
IDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3
OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAor
ICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUz
LCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAg
MzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2
LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAg
Mjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAg
ICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAg
MjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0
LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAg
MjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAy
MjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAg
ICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIs
ICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAx
NzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMs
ICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAx
MjIsICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
CisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4
ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAg
ICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAg
IDEyLCAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAot
ICAgICAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIw
LCAgIDMzLAotICAgICAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLCAg
IDQyLCAgIDEzLCAgIDM1LAotICAgICAgMTQ1LCAgIDM1LCAgMTQ1LCAgIDMzLCAgIDQyLCAgIDM1
LCAgIDIxLCAgIDIyLCAgIDQxLCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAg
IDIyLCAgIDIzLCAgIDQxLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDI2LCAgIDIyLCAgIDM2LCAgIDQ0LCAgIDQxLCAgNDMwLCAgIDIyLAotICAgICAgIDQ0LCAg
NDIzLCAgIDIzLCAgNDIyLCAgIDQ1LCAgIDM2LCAgIDU1LCAgIDIyLCAgIDM2LCAgIDI2LAotCi0g
ICAgICAgMzcsICAgMjYsICAgMjYsICAgMzksICAgMzcsICAgMjMsICAgMzgsICAgNDUsICAgMzgs
ICAgMzcsCi0gICAgICAgNDcsICAgMzksICAgNDksICAgMzksICAgMjIsICAgMzcsICAgMzksICAg
MzgsICA0MjEsICAgNDksCi0gICAgICAgNDksICA0MjAsICAgMzksICAgNTAsICA0MTksICAgNDcs
ICAgNTAsICAgNTEsICAgNDcsICAgNDksCi0gICAgICAxMzUsICAgNTEsICAgNDksICAgNTIsICAg
NTAsICAxMjAsICAgNTUsICAgNTIsICAxMjAsICAxMjAsCi0gICAgICA0MTcsICAgNTAsICAxMjAs
ICA0MTYsICAxMjAsICAxMzUsICAgNTIsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAg
NzQsICAgNzQsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAxNjcsCi0gICAg
ICAxNjcsICA0MTUsICAgNzQsICAxOTIsICAxOTIsICAxOTIsICA0MTMsICAgNzksICAgNzgsICAg
NzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzQsICAyMTUsICAyMTUs
ICAyMTUsICA0MTIsCi0gICAgICA0MTEsICAgNzgsICA0MTAsICAgODAsICAgNzksICAgODAsICAg
ODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAxMjIsICAyMjYsICAyMjYsICAyMjYs
ICA0MDksICAgODEsICAgNzksICAgODEsICAxMjIsCi0KLSAgICAgICA4MCwgICA4MSwgICA4MSwg
ICA4MSwgICA4MSwgICA4MSwgICA4MSwgIDIzNCwgIDIzNCwgIDIzNCwKLSAgICAgIDQwOCwgIDQw
NywgICA4MywgICA4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
IDE0MSwgIDI0MSwgIDI0MSwgIDI0MSwgIDM5OCwgIDE1MSwgIDM5NywgIDE1MSwgIDE0MSwgICA4
MywKLSAgICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MywgIDI0NSwgIDI0NSwgIDI0NSwgIDM5
NiwgIDE1NCwgIDM5NSwgIDE1NCwKLSAgICAgIDM5MywgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NSwgIDE1NSwKLSAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1MywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDIxMSwg
IDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDM5MiwgIDIxMSwKLSAgICAgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwK
LSAgICAgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDI1
MSwgIDI1MSwKLQotICAgICAgMjUxLCAgMzgxLCAgMzkxLCAgMzg4LCAgMzg3LCAgMzg1LCAgMzgy
LCAgMzgwLCAgMzc5LCAgMzc4LAotICAgICAgMzc2LCAgMzc1LCAgMzgxLCAgMzc0LCAgMzgxLCAg
NDI2LCAgNDI2LCAgNDI2LCAgNDI2LCAgNDI3LAotICAgICAgNDI3LCAgNDI4LCAgNDI4LCAgNDI5
LCAgMzcxLCAgNDI5LCAgNDI5LCAgMzcwLCAgMzY5LCAgMzY4LAotICAgICAgMzY3LCAgMzY2LCAg
MzY1LCAgMzY0LCAgMzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLAotICAgICAgMzQ5
LCAgMzQ3LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LAot
ICAgICAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1
LCAgMzI0LAotICAgICAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAg
MzExLCAgMzAwLCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0
LCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LAotICAgICAgMjc1LCAgMjc0LCAgMjcxLCAgMjcwLCAg
MjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LAotICAgICAgMjYzLCAgMjYyLCAgMjYx
LCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LAotCi0gICAgICAyNDcs
ICAyNDYsICAyNDQsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzMsICAyMzIsICAyMzEsCi0g
ICAgICAyMzAsICAyMjksICAyMjgsICAyMjUsICAyMjMsICAyMTgsICAyMTcsICAyMTYsICAyMTQs
ICAyMTMsCi0gICAgICAyMTIsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAy
MDQsICAyMDMsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYs
ICAxOTUsICAxOTQsICAxOTMsICAxOTEsCi0gICAgICAxOTAsICAxODksICAxODgsICAxODcsICAx
ODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsCi0gICAgICAxODAsICAxNzksICAxNzcs
ICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsCi0gICAgICAxNjksICAx
NjgsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsCi0gICAg
ICAxNDMsICAxNDIsICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAx
MzIsCi0gICAgICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQs
ICAxMjMsICAxMjEsCi0gICAgICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAx
MTIsICAxMTEsICAxMTAsICAxMDksCi0KLSAgICAgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEw
NCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OSwKLSAgICAgICA5OCwgICA5NywgICA5Niwg
ICA5NSwgICA5MSwgICA4NywgICA2MCwgICA1MywgICA0OCwgICA0NiwKLSAgICAgICA0MywgICA0
MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgIDUsICAgIDUsICAgMTMsICAgMTcsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMzMsICAg
NDIsICAgMjEsICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsCisgICAgICAgNDIsICAgMTMs
ICAgMzUsICA0NjMsICAgMzUsICAgNDQsICAgMzMsICAgNDIsICAgMzUsICAgNDQsCisgICAgICAg
MjEsICAgMjIsICA0NTUsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIs
CisgICAgICAgMjMsICAgNTUsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjIsCisgICAgICAgMjYsICAgMzYsICAgNTEsICA0NTQsICAgMjIsICAgMzgsICAgNTEs
ICAgMzgsICAgMjMsICAgMzcsCisKKyAgICAgIDQ1MywgICAzNiwgICAyMiwgICAzNywgICAzNiwg
ICAzOSwgICAzOCwgICAyNiwgICAzNywgICAyNiwKKyAgICAgICAyNiwgICAyMywgICA0MSwgICAz
OSwgICAzNywgICAzOSwgICA0NSwgICA0NywgICAzOSwgICAyMiwKKyAgICAgICA0MSwgICA1NSwg
IDEzNSwgIDE0NiwgICAzOSwgIDE0NiwgICA0OSwgICA1MCwgIDExMiwgICA0NSwKKyAgICAgICA1
MCwgICA0MSwgICA0NywgICA0OSwgICA0OSwgICA0NywgICA1MiwgIDEzNSwgICA1MCwgIDEyMiwK
KyAgICAgICA1MiwgIDExMiwgIDQ1MiwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIDEyMiwgIDQ1
MSwgICA1MiwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3OCwgICA3OCwgICA3OCwKKyAgICAgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDQ1MCwgIDEy
MCwgICA3NCwgIDE0MiwgIDEyMCwgIDEyMCwKKyAgICAgIDE2OCwgIDE2OCwgIDEyMCwgICA3OCwg
IDEyMCwgIDE0MiwgIDE5NCwgIDE5NCwgIDE5NCwgICA3NCwKKyAgICAgIDIxOCwgIDIxOCwgIDIx
OCwgIDQxNywgIDQxNywgICA3OSwgICA3OCwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA4MCwgIDQ0OCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKwor
ICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDc5LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAorICAgICAgMTU2LCAgNDQ2LCAgIDgwLCAgIDgxLCAgNDQ1LCAgIDgxLCAgIDc5LCAg
NDQ0LCAgIDgxLCAgIDgxLAorICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgw
LCAgIDgzLCAgMjE0LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgMjE0LCAgMjI5LCAgMjI5LCAgMjI5LCAgNDQzLAorICAgICAgMTUyLCAgNDQyLCAgMTUy
LCAgNDQwLCAgIDgzLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAg
MTUyLCAgMjM3LCAgMjM3LCAgMjM3LCAgNDM5LCAgNDM4LCAgIDgzLCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgNDM3LCAg
NDM2LAorICAgICAgMTU1LCAgNDM1LCAgMTU1LCAgNDM0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1
LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTU1LCAgMjQ5LCAgMjQ5LCAgMjQ5LCAgNDMzLCAg
NDMyLCAgMTU0LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorCisgICAgICAyMjIsICAyMjIsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjQsCisgICAgICAyMjQsICAy
MjQsICAyMjQsICAyMjQsICAyMjQsICAyMjQsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAg
ICAyMjUsICAyMjUsICAyMjUsICAyNTUsICAyNTUsICAyNTUsICAzODgsICAzODgsICAzODgsICA0
MzAsCisgICAgICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsICA0MjIs
ICA0MjEsICAzODgsCisgICAgICA0MjAsICAzODgsICA0NTksICA0NTksICA0NTksICA0NTksICA0
NjAsICA0NjAsICA0NjEsICA0NjEsCisgICAgICA0NjIsICA0MTksICA0NjIsICA0NjIsICA0MTgs
ICA0MTYsICA0MDcsICA0MDYsICA0MDUsICA0MDQsCisgICAgICA0MDMsICA0MDIsICA0MDAsICAz
OTksICAzOTgsICAzOTUsICAzOTQsICAzOTIsICAzODksICAzODcsCisgICAgICAzODYsICAzODUs
ICAzODMsICAzODIsICAzODEsICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCisgICAgICAz
NzMsICAzNzIsICAzNzEsICAzNjUsICAzNjIsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
CisgICAgICAzNTMsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDYsICAzNDUsICAzNDMsICAz
NDEsICAzNDAsCisKKyAgICAgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMz
MiwgIDMzMSwgIDMzMCwgIDMyOSwKKyAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwg
IDMyMCwgIDMxOSwgIDMxNiwgIDMwNSwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5
MSwgIDI5MCwgIDI4OSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3OSwg
IDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwKKyAgICAgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI1NCwgIDI1MywK
KyAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OCwgIDI0NCwgIDI0MiwgIDI0MSwgIDI0MCwgIDIz
NiwgIDIzNSwKKyAgICAgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNiwgIDIyMSwg
IDIyMCwgIDIxOSwgIDIxNywKKyAgICAgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwgIDIxMSwgIDIx
MCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwKKyAgICAgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwg
IDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5MywgIDE5
MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwKKworICAgICAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAor
ICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLAorICAgICAgMTYyLCAgMTQ3LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTQxLCAgMTQwLCAg
MTM5LCAgMTM4LCAgMTM3LAorICAgICAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMxLCAgMTMw
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LAorICAgICAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAg
MTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLAorICAgICAgMTExLCAgMTEwLCAgMTA5
LCAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLAorICAgICAgMTAxLCAg
MTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLAorICAg
ICAgIDUzLCAgIDQ4LCAgIDQ2LCAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgK
ICAgICB9IDsKIAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzE0OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsxNTZdID0KICAgICB7ICAgMCwKIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYwLDcgKzc4MSw3IEBAIHN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAg
IH07CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwg
ICAgIH07CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0
J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03
NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21h
dGNoX2VvbFsxNDhdID0KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2LDYgKzgwNyw3IEBAIFdI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtOTQ0
LDcgKzk2Niw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBc
CiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTEw
ODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJ
CX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5
eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
NDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3ICsx
MTI1LDcgQEAgeXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9zaXpl
X3QgeXlsOworCQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQogCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4MSwy
MjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcg
PSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5l
cik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIi
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3Zlcigp
OyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VU
VVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoK
IFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
X2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
OTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihB
RERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNl
IDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEw
NzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJ
TkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6
CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAx
MjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVG
VF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoK
IFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihT
RU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NF
VFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlf
UlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2Fz
ZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEz
MzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRl
eHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBh
cmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6
CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJ
R0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxF
X1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToK
K2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToK
K2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FS
RVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6
CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0x
NzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNU
SU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAog
e30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitj
YXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsg
IH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihD
T01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9G
ID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBj
aGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2Fz
ZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIwNzAs
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQog
CQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDEx
ICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIpCiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYg
KQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9z
dGF0ZSA9PSA0NTgpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OwogfQpAQCAtMjg5NCwxMCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI5MDYsMjYgKzI5NjUsMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTI5ODAsODggKzMwMzksMTUgQEAgdm9pZCBEZWNMaW5lTnVt
YmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tl
bnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1sw
XSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1p
emUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQot
ICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2Zm
XCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3Rl
ZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAg
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJk
ZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVi
dWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBw
cmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQot
ICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAg
ICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAg
Ly8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1w
bGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAg
Ly8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxl
bWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFn
bWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAo
bnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tl
bnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBw
cmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAg
ICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAg
ICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRh
YmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQo
VFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBd
IF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFH
TUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0
b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21h
RGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3Rv
cmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtMzA4Myw3
MSArMzA2OSwzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hF
cnJNc2cgPSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2
aW9yKQotewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICBy
ZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlv
cikpCi0gICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlz
YWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBp
ZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIp
ICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBFQmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lv
bkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRC
ZWhhdmlvcihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0
b3IgaXRlcjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZv
ciBhbGwgZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAg
ICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVu
YWJsZSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fu
bm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBi
ZWhhdmlvclZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRl
ciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJl
cXVpcmU6Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNp
b24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAg
ICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAg
ICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBu
b3Qgc3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4
dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7
CiB9CiB9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgogCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAo
YnVmLCBtYXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0g
bWF4X3NpemUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93
LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAg
ICBpbnQgbGVuID0gMDsKKworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6
OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5s
ZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAg
OiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
IHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4u
bG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0g
ICAgYnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4
X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsK
KyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJl
dHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAt
MzE3OCw5ICszMTI2LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0Yp
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQg
RU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5l
eHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5l
bm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpA
QCAtMzE5OSwyMiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAg
ICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nh
bm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVX
X1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0
LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRl
eHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4K
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJv
Y2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7Cisj
ZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAg
IGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5Q
YUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNw
cC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7
Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1
dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlm
ICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0
ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8o
aXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCmluZGV4IDM3YTBmMDUuLmQ1ODUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtMSwyNCArMSwy
MiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAg
IENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjcsNyBAQAog
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2
ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklT
T05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAogLyogUHVyZSBwYXJzZXJz
LiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUg
WVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyog
VXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogCiAKKy8qIENv
cHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJh
dGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2Vu
ZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKworLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKwor
LyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJs
aW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5l
IFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlU
T0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2ICsyMTUsMTQgQEAKICAg
ICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5l
IElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElV
TV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJ
U0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAot
I2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElO
VF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVm
aW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElG
IDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJW
RUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElW
RUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZF
QzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJ
WDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5l
IElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5
MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJV
Q1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5l
IFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJf
RVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVO
VElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQg
MzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0j
ZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUg
UklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2Rl
ZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2Rl
ZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNk
ZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNT
SUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAot
I2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmlu
ZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJ
R04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0j
ZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5l
IFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hU
X0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBD
T0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZp
bmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5l
IFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQ
RVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAz
NDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUg
QU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAotLyogQ29weSB0aGUg
Zmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
LSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0j
IHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNl
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0
b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5f
VEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlT
VFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0zNDAs
MTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlz
dCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBv
ZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMzYwLDI4ICsyNzEs
MjYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAg
IGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBj
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFE
RVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYg
b2YgeWFjYy5jLiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1Niwx
NCArMzY1LDE0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkK
K1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1
cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQg
Kik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KIC8qIEEgdHlwZSB0aGF0IGlz
IHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxv
YwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5
cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhl
IHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRo
ZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24g
eXlhbGxvYykgLSAxKQpAQCAtNTgwLDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3Rh
Y2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1Qg
eXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXpl
KTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHIt
PlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNr
X2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNr
KSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9m
ICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAg
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAy
MDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwg
ICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAot
ICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4
LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAg
NzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUs
ICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4
NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4
NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAg
IDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkx
LCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAx
MTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDEx
NzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwg
IDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4
MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAg
MTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0g
ICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcs
ICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2
NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwg
IDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgw
NiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1
LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAx
ODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAs
ICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5
MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1
NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAg
MjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAg
NDI2LCAgIDQzNiwgICA0NDksICAgNDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAg
ICAgNTc5LCAgIDU4MywgICA1OTAsICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwg
ICA2ODUsICAgNjg4LAorICAgICA2OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDcz
NiwgICA3MzcsICAgNzQ2LCAgIDc1OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAg
IDc4MywgICA3OTMsICAgODAzLCAgIDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUw
LCAgIDg1NCwgICA4NTgsICAgODYyLCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEs
ICAgOTA0LAorICAgICA5MDUsICAgOTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5
MzksICAgOTQwLCAgIDk0NCwgICA5NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwg
IDEwMDUsICAxMDQzLCAgMTA0NiwgIDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTEx
NCwgIDExNDMsICAxMTQ4LCAgMTE1OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgy
LAorICAgIDExODgsICAxMTk1LCAgMTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAx
Mjg5LCAgMTMwNywgIDEzMTUsCisgICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgs
ICAxNDkxLCAgMTQ5NywgIDE1MDUsICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1
NDEsICAxNTQ0LCAgMTU1MCwgIDE1NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAg
IDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAg
MTYyOSwgIDE2MzQsCisgICAgMTY0MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcx
LCAgMTY4MCwgIDE2ODUsICAxNjk4LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAx
NzI0LCAgMTczOSwgIDE3NzUsICAxNzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMs
ICAxODE3LCAgMTgxOCwgIDE4MjQsICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwg
IDE4MzMsCisgICAgMTgzMywgIDE4MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0
OSwgIDE4NDksICAxODU0LCAgMTg1NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAg
MTg4MSwgIDE4ODksICAxODkzLCAgMTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMw
LCAgMTkzMCwgIDE5MzcsICAxOTM3LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMs
CisgICAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIw
MTksICAyMDI2LCAgMjAyOSwKKyAgICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIs
MTYgKzcyMSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImlu
aXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZp
ZWRfdHlwZSIsCiAgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNp
b25fcXVhbGlmaWVyIiwKICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZp
ZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIs
ICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIs
CiAgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1l
bnQiLAotICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19u
ZXdfc2NvcGUiLAotICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91
bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAz
IiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Nj
b3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAg
ICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3Rh
dGVtZW50IiwKLSAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1l
bnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25f
cmVzdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3
IiwKKyAgIiRAOCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIs
ICJmb3JfcmVzdF9zdGF0ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25f
dW5pdCIsICJleHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwg
IkAxMCIsIDAKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYK
IApAQCAtMTM0NSw5ICsxMjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9z
W10gPQogCiAvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKIApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQg
KHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0
eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGlj
IHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJv
dHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwg
eXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZv
ciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAl
ZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisg
ICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9
CiAKQEAgLTE1NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxl
LCBjb250ZXh0KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5
eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAk
JWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5
eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKIAkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApA
QCAtMTg0OSwxMCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBm
cm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2
b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAo
KTsKIAogCiAKLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0K
ICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5
OCw3NCArMTgxNiw3NSBAQCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAg
LyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBz
byBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0g
IGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJy
b3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1h
aGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8K
LSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9y
IGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1z
Z2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQg
dGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZz
JzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBs
b2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50
ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hl
cmUuICAqLworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAg
aW50IHl5bmVycnM7CiAKLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2
IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5
dHlwZV9pbnQxNiAqeXlzc3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOwogCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZ
U1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZ
U1RZUEUgKnl5dnNwOworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNl
bWFudGljIHZhbHVlcy4KIAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5
cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3Ag
LT0gKE4pLCB5eXNzcCAtPSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAg
Ki8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOwor
ICAgIFlZU1RZUEUgKnl5dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVz
dWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRv
a2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQg
dG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rp
b24gcm91dGluZXMuICAqLwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUu
ICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7Cisg
IFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZp
bmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGlu
dCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9
IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3Rh
dHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRv
a2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAg
ICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBz
byB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAg
ICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5
eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50
IHl5bmVycnM7CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwogCi0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRl
cy4gIFRoaXMgdXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3
byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5
bmVycnM7CiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6
ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpA
QCAtMjAyNiw5ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZ
WVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRy
KQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZ
WVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2Ms
IHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAo
eXlzczEpOwpAQCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9
IHl5c3MgKyB5eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAot
CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVc
biIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYg
KzE5NjQsOSBAQCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmlu
ZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisg
ICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIw
NTcsMTYgKzE5NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHBy
b3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAg
IGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBk
byB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0
b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1Rf
TklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
ay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2Vu
OiAiKSk7CkBAIC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJl
ZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAg
IC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBv
ZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJy
c3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBT
aGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlm
dGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQot
ICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAq
LworICB5eWNoYXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0g
eXlsdmFsOwpAQCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRT
eW1ib2wqIHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBj
b25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAg
VFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJl
IGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJp
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8g
Y2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ci
LCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIxMzks
MjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFso
MSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjI2
Niw3ICsyMTgwLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8
PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5n
ZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJy
YXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBh
cHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwg
Ii4iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlm
IChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVy
cm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUsMTgg
KzIzNDUsMTggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBz
dWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0
cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjoKQEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsy
Mzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUo
KSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBU
eXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJ
bnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQg
dHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwg
PT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVl
IGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJy
b3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3Rh
bnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJz
LiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAi
bWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUx
OCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTk6CkBAIC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5v
ZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIx
LDcgKzI1NDIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUi
LCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJp
bmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9u
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0ICsy
NjUwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MzA6CkBAIC0yNzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3MDYs
MjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzMjoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExv
Z2ljYWxOb3Q7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4MTgs
NyArMjczOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4ODQs
NyArMjgwNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoK
QEAgLTI4OTgsNyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0NToKQEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoK
QEAgLTI5NDUsNyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0OToKQEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NjoK
QEAgLTMwMTIsMTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5NTIs
MTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjE6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA2MzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNl
IDY0OgogCi0gICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZF
UlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BNdWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAgeyBG
UkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3Np
Z247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9CisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3Vi
QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToK
QEAgLTMxMTcsNyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFy
YXRpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVj
aXNpb24pICk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsK
ICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJu
IHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5cmVk
dWNlOgogICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1
bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCiAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA3NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIo
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5wYXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc5OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1
bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQg
YXMgd2VsbC4uLgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDgwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSld
LmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1w
b3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBv
cmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0p
LnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDkwOgpAQCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkpIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9
PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
IApAQCAtMzQyOCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSld
LmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDk0OgpAQCAtMzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDE5
ICszNDUzLDE5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRl
ZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJy
YXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQsNyAr
MzUyNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICszNTM3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0
SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBA
IC0zNjI2LDcgKzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVjZToK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0
LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNz
IGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAg
ICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wg
fHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0zNjgw
LDcgKzM2MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFB
dHRyaWJ1dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5n
SW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1
bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OToKQEAgLTM3MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1
bTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEx
NzoKQEAgLTM3OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE5
OgpAQCAtMzgxMSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICszNzUw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBAIC0z
ODM4LDcgKzM3NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyMzoKQEAgLTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMsNyAr
MzgwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoKQEAg
LTM4OTIsNyArMzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyOToKQEAgLTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4NDMs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSg0LCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMjoK
QEAgLTM5MzEsNyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEsMzMg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0
ZXJuYWxPRVMsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1
bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAtMzk4
OSwxMiArMzkxMCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24o
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNw
WygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24o
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsgaWYg
KGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7
IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywxNCAr
Mzk0OCwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
TGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+
cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00MDg3
LDcgKzQwMDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
bmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyArNDA1
Miw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXpl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9CisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAgIHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAw
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcgKzQy
MDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVj
dGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyArNDIx
Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpAQCAt
NDI5OSw3ICs0MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTgwOgpAQCAtNDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0g
KDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgy
OgpAQCAtNDM1NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1do
aWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5
dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgp
LmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3Is
ICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwg
cmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAo
eXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTA6CkBAIC00NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dl
ZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0LDEw
ICs0MzY1LDEwIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTQ6CkBAIC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNW
YWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24g
cmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVl
Um9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4
dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDUx
Nyw3ICs0NDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFt
ZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAg
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAgICAg
ICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6
ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlz
IGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUo
Y29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQ
cmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRl
eHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAK
LS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAg
ICB9CkBAIC00NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFs
OwogCi0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0
ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUg
d2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAg
Ki8KQEAgLTQ2ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9
PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3IEBA
IHl5ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAg
dG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAgeXll
cnJsYWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAg
aWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFs
OwogCiAKQEAgLTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsK
ICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlv
dmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxhYjoK
ICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0g
WVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj
dGlvbiB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQg
KzEsMjIgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tl
bGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAg
Q29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAg
IAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAK
ICAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29u
LiAgKi8KIAorCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUg
WVlUT0tFTlRZUEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAog
ICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2Rl
ZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNk
ZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBB
VFRSSUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAy
NjUKLSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5l
IEJSRUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5l
IEVMU0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NB
UkQgMjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJW
RUMzIDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElW
RUMzIDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVD
MyAyODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFU
UklYMyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZp
bmUgT1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0g
MjkxCi0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9J
RF9UWVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2Rl
ZmluZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0j
ZGVmaW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5l
IFRZUEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09O
U1RBTlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNU
SU9OIDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZp
bmUgSU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2Rl
ZmluZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2Rl
ZmluZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0j
ZGVmaW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFE
RF9BU1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdO
IDMyMQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0j
ZGVmaW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VC
X0FTU0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4g
MzI4Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAK
LSNkZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5l
IERPVCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBF
UVVBTCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmlu
ZSBEQVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUg
U1RBUiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5l
IExFRlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNB
TF9CQVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVm
aW5lIFFVRVNUSU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZp
bmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwog
ICAgIHN0cnVjdCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpA
QCAtMjY1LDE0ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBU
VHlwZUxpc3QqIHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGlu
ZSAxNTI5IG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5o
CmluZGV4IDU0NDE1NTcuLmFmNzhmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQzMywxNSArNDMzLDE1IEBAIHBy
b3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNl
OwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci10eXBlZGVmIFRNYXA8VFN0
cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8gTm9kZXMgdGhhdCBvcGVyYXRl
IG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCiAvLwogY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewogcHVibGljOgotICAgIFRJbnRl
cm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFs
c2UpLCBwcmFnbWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxz
ZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0
b3IobyksIHByYWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAg
ICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxz
ZSksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRl
cm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRl
ZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQogCiAgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwpAQCAtNDUy
LDE0ICs0NTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25z
dCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVm
aW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZp
bmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0K
ICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNl
dERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1
cm4gZGVidWc7IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpOwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25z
dCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQgc2V0RW5kTGluZShUU291cmNl
TG9jIGxpbmUpIHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291cmNlTG9jIGdldEVuZExpbmUo
KSBjb25zdCB7IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRh
YmxlICpwcmFnbWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExpbmU7CiAKICAgICAvLyBJZiBz
ZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVt
dWxhdGVkIG9uZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RW
aXNpdChwb3N0VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAog
ICAgICAgICAgICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkg
e307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IHt9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Np
bmNsdWRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRl
LmgKaW5kZXggOWY5MzkzYS4uOWIzYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaApAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fc3VuKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fR05VX18pIHx8IGRlZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQo
X19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAj
ZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBh
MTdjMzE5Li4zOTE1OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAj
aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBz
dHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRh
YmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsg
TlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBB
dG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChB
dG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0
MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcykKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewog
ICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwot
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAor
ICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNo
PSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50
cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3
aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lv
bltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNp
b25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3Ry
KTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRv
bVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3Ig
KGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYo
c3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFt
YXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wi
IiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRh
YmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50
cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAi
ICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAg
Q1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEu
LjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAj
aWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHBy
YWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVP
RgogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVu
ZCB3aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVt
b3J5QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47
CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGlu
dCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsK
IAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5D
b3VudDsgKytpKSB7CiAJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2
IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3Io
eXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJz
aW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5z
aW9uKHl5bHZhbHBwKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZv
aWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFj
cm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9u
ID0gezB9OworICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5
bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBw
IHZhbCA9IHswfTsKKyAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAw
fTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9
IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29s
KTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUs
ICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQ
UF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwg
TUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0
b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5l
TnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
TUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAg
VW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxw
cC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4u
ODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBT
aC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9n
Lgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNh
ZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBf
X01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0
eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5
UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWdu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5f
dHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVk
IHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0g
IkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0
d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5m
aW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRl
eHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91
dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxl
eGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhl
cigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBz
byB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGlu
IHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9r
ZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAh
PSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1
dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRw
dXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2Uu
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVz
ZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNy
byhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3Rvciog
cGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3Jv
KHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0Rl
ZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9y
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBt
YWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5k
ZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRl
cmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jv
cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBz
dGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBt
TWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQg
Q29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBt
TWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0g
ICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsK
LSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElO
VF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVj
dG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAg
IG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBD
b250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQot
ICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7
IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2Vu
VmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1h
Y3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBw
cDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAg
IGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBp
c01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBk
ZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0g
ICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgot
ICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9T
ZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRp
YWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9E
TyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50
KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6
OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwg
RVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5J
TkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7
CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc1YTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaApAQCAtMCwwICsxLDgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGlu
ZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJs
ZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25v
c3RpY3MKK3sKKyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVS
Uk9SLAorICAgICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAg
ICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9N
RU1PUlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJF
UiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAg
ICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgRElSRUNUSVZFX0lOVkFMSURfTkFNRSwK
KyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAor
ICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgTUFDUk9fUFJFREVG
SU5FRF9VTkRFRklORUQsCisgICAgICAgIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAor
ICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIE1BQ1JPX1RPT19NQU5ZX0FSR1Ms
CisgICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAorICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVELAor
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNU
SVZFLAorICAgICAgICBJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0ZJTEVf
TlVNQkVSLAorICAgICAgICBJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICBFUlJPUl9F
TkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklO
R19FTkQKKyAgICB9OworCisgICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQg
cmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFNldmVyaXR5IHNldmVyaXR5KElEIGlkKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2E5MWUxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
SGFuZGxlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVj
dGl2ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
RElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgaGFuZGxp
bmcgZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90aWZ5
IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBE
ZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxpbmcgdGhlbSBpbiBh
biBhcHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisgICAgLy8gSGFuZGxl
IHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pID0g
MDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4
NWE5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsODk5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorCisjaW5j
bHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5o
IgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKK25hbWVzcGFj
ZSB7CitlbnVtIERpcmVjdGl2ZVR5cGUKK3sKKyAgICBESVJFQ1RJVkVfTk9ORSwKKyAgICBESVJF
Q1RJVkVfREVGSU5FLAorICAgIERJUkVDVElWRV9VTkRFRiwKKyAgICBESVJFQ1RJVkVfSUYsCisg
ICAgRElSRUNUSVZFX0lGREVGLAorICAgIERJUkVDVElWRV9JRk5ERUYsCisgICAgRElSRUNUSVZF
X0VMU0UsCisgICAgRElSRUNUSVZFX0VMSUYsCisgICAgRElSRUNUSVZFX0VORElGLAorICAgIERJ
UkVDVElWRV9FUlJPUiwKKyAgICBESVJFQ1RJVkVfUFJBR01BLAorICAgIERJUkVDVElWRV9FWFRF
TlNJT04sCisgICAgRElSRUNUSVZFX1ZFUlNJT04sCisgICAgRElSRUNUSVZFX0xJTkUKK307Cit9
ICAvLyBuYW1lc3BhY2UKKworc3RhdGljIERpcmVjdGl2ZVR5cGUgZ2V0RGlyZWN0aXZlKGNvbnN0
IHBwOjpUb2tlbiogdG9rZW4pCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVEZWZpbmUoImRlZmluZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlVW5kZWYoInVuZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZigiaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlm
ZGVmKCJpZmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZu
ZGVmKCJpZm5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVs
c2UoImVsc2UiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVuZGlmKCJl
bmRpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXJyb3IoImVy
cm9yIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInBy
YWdtYSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXh0ZW5zaW9u
KCJleHRlbnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVZl
cnNpb24oInZlcnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZUxpbmUoImxpbmUiKTsKKworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBwcDo6VG9rZW46OklERU5U
SUZJRVIpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsKKworICAgIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9ERUZJ
TkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVVbmRlZikKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9VTkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGOworICAgIGVsc2UgaWYg
KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJ
VkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYp
CisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTFNFOwor
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxpZikKKyAgICAgICAgcmV0
dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0
aXZlRW5kaWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRU5ESUY7CisgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKKyAgICAgICAgcmV0dXJuIERJUkVDVElW
RV9FUlJPUjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVByYWdtYSkK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVhU
RU5TSU9OOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9WRVJTSU9OOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9MSU5FOwor
CisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9vbCBpc0NvbmRpdGlv
bmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAgIHN3aXRjaCAoZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgY2FzZSBESVJF
Q1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICBjYXNlIERJ
UkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAgICAgIGNhc2UgRElS
RUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9r
ZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wgaXNFT0QoY29uc3Qg
cHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBlID09ICdcbicpIHx8
ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0aWMgdm9pZCBza2lw
VW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICB3aGls
ZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0b2tlbik7CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVk
LgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3Jl
cyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0JiBtYWNyb1NldCkK
K3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYWNyb1NldC5maW5k
KG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8gaXRlci0+c2Vjb25k
LnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERlZmlu
ZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERlZmluZWRQYXJzZXIo
TGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9TZXQqIG1hY3JvU2V0
LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgICAg
IG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgICAgIG1E
aWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHByb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnZhbHVlICE9IGtEZWZp
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wgcGFyZW4gPSBmYWxzZTsK
KyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0g
JygnKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJlbiA9IHRydWU7CisgICAgICAgICAgICBt
TGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3Jv
U2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4cHJlc3Npb24g
PSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAgICAgaWYgKHBh
cmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAg
ICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgaGF2ZSBhIHZhbGlkIGRlZmluZWQgb3BlcmF0b3IuCisgICAgICAgIC8vIENv
bnZlcnQgdGhlIGN1cnJlbnQgdG9rZW4gaW50byBhIENPTlNUX0lOVCB0b2tlbi4KKyAgICAgICAg
dG9rZW4tPnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgICAgICB0b2tlbi0+dmFsdWUgPSBl
eHByZXNzaW9uOworICAgIH0KKworICBwcml2YXRlOgorICAgIExleGVyKiBtTGV4ZXI7CisgICAg
Y29uc3QgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNz
OworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tl
bml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9T
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVy
KiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAgIG1N
YWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAgICBt
RGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46
OlBQX0hBU0gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlRGlyZWN0aXZlKHRva2VuKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2subG9jYXRpb24sIGJsb2NrLnR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBlID09ICdcbicpKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3Nl
cnQodG9rZW4tPnR5cGUgPT0gVG9rZW46OlBQX0hBU0gpOworCisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tl
bik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBleGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91
cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYg
KHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7
CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElS
RUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpE
SVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfREVGSU5F
OgorICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBESVJFQ1RJVkVfVU5ERUY6CisgICAgICAgIHBhcnNlVW5kZWYodG9rZW4pOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICBwYXJzZUlmKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAgcGFy
c2VJZmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUZO
REVGOgorICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRUxTRToKKyAgICAgICAgcGFyc2VFbHNlKHRva2VuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAg
ICBwYXJzZUVuZGlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9FUlJPUjoKKyAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfUFJBR01BOgorICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRVhURU5TSU9OOgorICAgICAgICBw
YXJzZUV4dGVuc2lvbih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJ
VkVfVkVSU0lPTjoKKyAgICAgICAgcGFyc2VWZXJzaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9MSU5FOgorICAgICAgICBwYXJzZUxpbmUodG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiogdG9r
ZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0RFRklO
RSk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVkKHRva2VuLT52YWx1ZSwgKm1NYWNyb1NldCkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9f
UFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3JvOworICAgIG1hY3JvLnR5
cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRva2VuLT52YWx1ZTsKKwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlID09ICcoJyAm
JiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAgICAgLy8gRnVuY3Rpb24t
bGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1hY3JvLnR5cGUgPSBNYWNy
bzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5w
dXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICcsJyk7
CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKKyAgICAgICAgeworICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBHZXQg
JyknLgorICAgIH0KKworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB0b2tl
biBsb2NhdGlvbiBiZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50CisgICAg
ICAgIC8vIGxpc3QuIFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tlbjo6
ZXF1YWxzKCkgdG8KKyAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCisgICAgICAgIHRva2VuLT5s
b2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5w
dXNoX2JhY2soKnRva2VuKTsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKCFtYWNyby5yZXBsYWNlbWVudHMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIC8v
IFdoaXRlc3BhY2UgcHJlY2VkaW5nIHRoZSByZXBsYWNlbWVudCBsaXN0IGlzIG5vdCBjb25zaWRl
cmVkIHBhcnQgb2YKKyAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGxpc3QgZm9yIGVpdGhlciBm
b3JtIG9mIG1hY3JvLgorICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZnJvbnQoKS5zZXRIYXNM
ZWFkaW5nU3BhY2UoZmFsc2UpOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciBtYWNybyByZWRl
ZmluaXRpb24uCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQt
PmZpbmQobWFjcm8ubmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSAmJiAh
bWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hY3JvLm5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1NYWNyb1NldC0+aW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKG1hY3JvLm5hbWUsIG1hY3JvKSk7Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVU5ERUYpOworCisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm9TZXQ6Oml0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpZiAoaXRlciAh
PSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5wcmVk
ZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtTWFjcm9TZXQtPmVyYXNlKGl0
ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30K
Kwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRik7CisgICAgcGFyc2VDb25k
aXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZkZWYo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9JRkRFRik7CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKTsKKyAgICBwYXJzZUNvbmRp
dGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRv
a2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJ
VkVfRUxTRSk7CisKKyAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNF
X1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisg
ICAgeworICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5l
LgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNFX0FGVEVS
X0VMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxzZUdyb3VwID0gdHJ1ZTsK
KyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3JvdXA7CisgICAgYmxvY2su
Zm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIGV4dHJh
IHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tp
cFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUVsaWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OkNPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYg
KGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0
IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdy
b3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNP
TkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9jay5m
b3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFyc2UgdGhlIGV4cHJl
c3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1pdCBhIGRpYWdub3N0
aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQg
ZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBibG9jay5za2lwR3Jv
dXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVz
c2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VO
RElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VORElGX1dJ
VEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1Db25kaXRpb25hbFN0YWNrLnBvcF9iYWNr
KCk7CisKKyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2VuZGlmLgorICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4q
IHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9F
UlJPUik7CisKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzdHJlYW0gPDwgKnRva2VuOwor
ICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBtRGlyZWN0aXZlSGFu
ZGxlci0+aGFuZGxlRXJyb3IodG9rZW4tPmxvY2F0aW9uLCBzdHJlYW0uc3RyKCkpOworfQorCisv
LyBQYXJzZXMgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXS4KK3ZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1BSQUdNQSk7CisKKyAgICBlbnVtIFN0YXRl
CisgICAgeworICAgICAgICBQUkFHTUFfTkFNRSwKKyAgICAgICAgTEVGVF9QQVJFTiwKKyAgICAg
ICAgUFJBR01BX1ZBTFVFLAorICAgICAgICBSSUdIVF9QQVJFTgorICAgIH07CisKKyAgICBib29s
IHZhbGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKKyAgICBpbnQgc3Rh
dGUgPSBQUkFHTUFfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIFBSQUdNQV9OQU1FOgorICAgICAgICAgICAgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAg
ICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoKKyAgICAg
ICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcoJyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKKyAgICAgICAgICAgIHZhbHVl
ID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5
cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50
eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFsaWQgPSB2YWxp
ZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJhZ21hLgorICAg
ICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAgIC8vIFdpdGhv
dXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVOICsg
MSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90aWZ5IGZvciBl
bXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlUHJh
Z21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKworICAgIGVudW0g
U3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAg
RVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6
c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicp
ICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5h
bWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENP
TE9OOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJ
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2
YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlm
ICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNU
SVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRp
b24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVy
c2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX1ZFUlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IHZl
cnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRl
KyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVSOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgdmVy
c2lvbiA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0g
VkVSU0lPTl9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhh
bmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0
KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0xJTkUpOworCisgICAgZW51bSBTdGF0
ZQorICAgIHsKKyAgICAgICAgTElORV9OVU1CRVIsCisgICAgICAgIEZJTEVfTlVNQkVSCisgICAg
fTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7
CisgICAgaW50IHN0YXRlID0gTElORV9OVU1CRVI7CisKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3Jv
RXhwYW5kZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIG1hY3Jv
RXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0
YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIExJTkVfTlVNQkVSOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbGluZSA9
IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBGSUxFX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRklMRV9OVU1CRVIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodmFsaWQpIGZpbGUgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgfQor
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRlICE9IEZJ
TEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgIH0KKyAgICBpZiAodmFsaWQpCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5z
ZXRMaW5lTnVtYmVyKGxpbmUpOworICAgICAgICBpZiAoc3RhdGUgPT0gRklMRV9OVU1CRVIgKyAx
KSBtVG9rZW5pemVyLT5zZXRGaWxlTnVtYmVyKGZpbGUpOworICAgIH0KK30KKworYm9vbCBEaXJl
Y3RpdmVQYXJzZXI6OnNraXBwaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobUNvbmRpdGlvbmFsU3Rh
Y2suZW1wdHkoKSkgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYg
YmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgcmV0dXJuIGJsb2NrLnNraXBC
bG9jayB8fCBibG9jay5za2lwR3JvdXA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUNvbmRpdGlvbmFsSWYoVG9rZW4qIHRva2VuKQoreworICAgIENvbmRpdGlvbmFsQmxvY2sgYmxv
Y2s7CisgICAgYmxvY2sudHlwZSA9IHRva2VuLT52YWx1ZTsKKyAgICBibG9jay5sb2NhdGlvbiA9
IHRva2VuLT5sb2NhdGlvbjsKKworICAgIGlmIChza2lwcGluZygpKQorICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBjb25kaXRpb25hbCBibG9jayBpcyBpbnNpZGUgYW5vdGhlciBjb25kaXRpb25hbCBn
cm91cAorICAgICAgICAvLyB3aGljaCBpcyBza2lwcGVkLiBBcyBhIGNvbnNlcXVlbmNlIHRoaXMg
d2hvbGUgYmxvY2sgaXMgc2tpcHBlZC4KKyAgICAgICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8gcGFy
c2UgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBtaWdodAorICAgICAgICAvLyBlbWl0
IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
KyAgICAgICAgYmxvY2suc2tpcEJsb2NrID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwor
CisgICAgICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICAgICAgc3dpdGNoIChkaXJlY3RpdmUp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRjoKKyAgICAgICAgICAgIGV4
cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24g
PSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uSWZkZWYodG9rZW4pID09IDAgPyAxIDogMDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVz
c2lvbiA9PSAwOworICAgICAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9
IDA7CisgICAgfQorICAgIG1Db25kaXRpb25hbFN0YWNrLnB1c2hfYmFjayhibG9jayk7Cit9CisK
K2ludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKSB8fAorICAg
ICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxJRikpOworCisgICAg
RGVmaW5lZFBhcnNlciBkZWZpbmVkUGFyc2VyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdu
b3N0aWNzKTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIs
IG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Np
b25QYXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisKKyAgICBpbnQgZXhwcmVz
c2lvbiA9IDA7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIGV4cHJlc3Npb25Q
YXJzZXIucGFyc2UodG9rZW4sICZleHByZXNzaW9uKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUg
YXJlIHRva2VucyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KKyAgICBpZiAoIWlzRU9EKHRva2VuKSkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2ludCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAorICAg
ICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisKKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIE1hY3JvU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAg
aW50IGV4cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAxIDogMDsKKworICAg
IC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjaWZkZWYgZXhwcmVzc2lvbi4KKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVhMDFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlUGFyc2VyLmgKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgi
CisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNv
dXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsK
K2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVj
dGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFy
c2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCog
bWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywK
KyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAg
ICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZv
aWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tl
bik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VF
bHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAg
ICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJv
b2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiog
dG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGlu
dCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRp
dGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNv
dXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAg
Ym9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBi
b29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAg
ICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwK
KyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVs
c2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBzdGQ6OnZl
Y3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsKKyAgICBUb2tlbml6ZXIq
IG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyog
bURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJj
MzcxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCkBAIC0wLDAgKzEsMTky
OCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KKwor
LyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2
LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsg
aXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9y
IGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFs
dGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2Vy
IHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisg
ICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRo
ZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAq
LworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFs
bG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGlj
IiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdp
biB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3Bh
Y2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFz
IHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhl
cmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0
bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJ
TkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlm
eSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lv
bi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCisKKy8qIFNrZWxldG9uIG5h
bWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJz
ZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZp
bmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwor
LyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vi
c3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlw
YXJzZSAgICAgICAgIHBwcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAgICAgIHBwbGV4CisjZGVm
aW5lIHl5ZXJyb3IgICAgICAgICBwcGVycm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICBwcGx2
YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHBwY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAg
ICAgcHBkZWJ1ZworI2RlZmluZSB5eW5lcnJzICAgICAgICAgcHBuZXJycworCisKKy8qIENvcHkg
dGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNo
LiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkg
dGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4
cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxp
Yj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVS
KQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Cisj
ZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2Vu
ZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7Cisg
ICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOwor
ICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNw
YWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4
dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisj
IGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1l
c3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJC
T1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1Jf
VkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNp
Zm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKwor
CisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZ
UEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBH
REIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVu
dW0geXl0b2tlbnR5cGUgeworICAgICBDT05TVF9JTlQgPSAyNTgsCisgICAgIE9QX09SID0gMjU5
LAorICAgICBPUF9BTkQgPSAyNjAsCisgICAgIE9QX05FID0gMjYxLAorICAgICBPUF9FUSA9IDI2
MiwKKyAgICAgT1BfR0UgPSAyNjMsCisgICAgIE9QX0xFID0gMjY0LAorICAgICBPUF9SSUdIVCA9
IDI2NSwKKyAgICAgT1BfTEVGVCA9IDI2NiwKKyAgICAgVU5BUlkgPSAyNjcKKyAgIH07CisjZW5k
aWYKKworCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19E
RUNMQVJFRAordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklB
TCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0
aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyNlbmRpZgorCisKKy8q
IENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisKKyNp
ZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgK
K3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlw
ZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxz
ZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQ
RV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVm
IFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UK
K3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0la
RV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQ
RV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMg
ZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZ
U0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01B
WElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFC
TEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxp
YmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZ
WV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMg
ZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYK
KyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5n
IiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmlu
ZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0
eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRl
ZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOworI2VuZGlmCit7CisgIHJldHVybiB5eWk7Cit9Cisj
ZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisv
KiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nh
cnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNU
QUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdf
SU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
IF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxv
Yy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxv
Y2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisj
ICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIu
aD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERM
SUJfSAorIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYK
KyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisg
ICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5l
IFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQor
IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFy
YW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAg
ICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3
ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQw
OTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBh
IGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBk
ZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2
ICovCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQwor
IyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01B
WElNVU0KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisj
ICBlbmRpZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJf
SCBcCisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwK
KwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRl
IDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRl
ZiBfU1RETElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlm
CisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYg
ISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5k
ZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUg
JiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQg
eXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92
ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVk
IFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBl
IHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlv
biB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNf
YWxsb2M7Cit9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUg
YWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFY
SU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFy
cmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBl
bGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChz
aXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RB
Q0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8u
ICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBp
Zm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAg
IGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5
IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVm
aW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwK
KwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5
eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAg
ICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFD
SyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZh
cmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJl
ciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBs
b2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFs
aWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNU
QUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAor
ICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0
ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9m
ICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZ
SUQgKDApKQorCisjZW5kaWYKKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRl
cm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgMTQKKy8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNzUKKworLyogWVlO
VE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDI3
CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5U
UyAgMworLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVM
RVMgIDI2CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlO
U1RBVEVTICA1MgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJl
ciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2Rl
ZmluZSBZWU1BWFVUT0sgICAyNjcKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAor
ICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6
IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAorICAgICAgMjUsICAgIDI2LCAgICAxOSwg
ICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMjIKK307CisKKyNpZiBZWURFQlVHCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0
aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAw
LCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcs
CisgICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAg
NTksICAgIDYzLCAgICA2NywKKyAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwg
ICAgODgsICAgIDkxCit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2Yg
dGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQor
eworICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAg
IDI5LCAgICAgNCwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAg
ICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAg
ICAtMSwgICAgMjksCisgICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAg
IDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwg
ICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAx
OSwgICAgMjksICAgIC0xLCAgICAyMywKKyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAg
ICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1
LCAgICAyOSwgICAgMjYsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxp
bmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgICA4NywgICAgODcsICAgIDk0
LCAgICA5NSwgICAgOTgsICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTEwLAorICAgICAxMTMsICAg
MTE2LCAgIDExOSwgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0LCAgIDEzNywgICAx
NDAsCisgICAgIDE1MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzUsICAgMTc4LCAgIDE4MQor
fTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9U
QUJMRQorLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9s
IFNZTUJPTC1OVU0uCisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQg
WVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5
dG5hbWVbXSA9Cit7CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiQ09OU1RfSU5U
IiwgIk9QX09SIiwgIk9QX0FORCIsICInfCciLAorICAiJ14nIiwgIicmJyIsICJPUF9ORSIsICJP
UF9FUSIsICInPCciLCAiJz4nIiwgIk9QX0dFIiwgIk9QX0xFIiwKKyAgIk9QX1JJR0hUIiwgIk9Q
X0xFRlQiLCAiJysnIiwgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJVTkFSWSIsICInISci
LAorICAiJ34nIiwgIicoJyIsICInKSciLCAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9u
IiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5V
TV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZ
TEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sK
KyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAgICA5
NCwgICAgMzgsICAgMjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0LCAg
IDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAgMjY3
LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5d
IC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAg
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjkKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3Np
bmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAg
ICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKworLyog
WVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0
YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcg
ZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAg
IDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAy
NSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwg
ICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0t
TlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAg
ICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXgg
aW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLwor
I2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0
W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywg
ICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAg
MTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAs
ICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsK
KworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZ
WVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisg
ICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1
bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZ
REVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVm
aW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10g
PQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAor
ICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisg
ICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKK307
CisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCisgICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisg
ICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAgMywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAgICAg
OCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tTVEFU
RS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1i
b2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlz
dG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOQor
fTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFy
aW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlF
T0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJP
UlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKwor
CisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBo
ZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVh
bmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBw
bGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVh
cnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVk
CisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBp
dCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJy
bGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxs
eSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJz
IGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAg
ICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41
LiAgKi8KKyNlbmRpZgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykK
KworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBp
ZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwK
KyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJ
CQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAg
IH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJy
b3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAg
ICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKwor
CisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgor
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExP
Q19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwK
KyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJy
ZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAo
Q3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlc
CisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5l
OwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Rf
Y29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwK
KwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAor
CSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJz
dF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhz
LCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkp
CisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9J
U19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAg
ICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3Rf
bGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExv
YykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxl
LCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxp
bmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhf
UEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNl
CisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBF
bmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRl
ZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRl
ZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJ
CVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAor
ZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJ
CQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisg
ICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwg
Y29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAg
ICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9z
eW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNv
bnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZv
aWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNv
bnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgor
eworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBp
ZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlv
dXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5
b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVs
dDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQs
IGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29u
dGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0
eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpj
b250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJ
TlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisg
ICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwor
CisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNv
bnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
K3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRP
TSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmlu
dCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVf
aW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAg
WVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5
dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRG
IChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRv
cCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0
YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
UmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNl
X3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKKyNl
bHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0
KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisgICAgQ29udGV4dCAqY29u
dGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOworICBpbnQgeXlp
OworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJ
TlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAor
CSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2Vk
LiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1i
b2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAg
Jih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRl
eHQpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZp
bmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJ
CQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQg
aXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNv
ZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUg
WVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisv
KiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICov
CisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgor
CisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChl
ZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2Qg
aXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVz
dWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNL
X0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9u
IGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUg
WVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisj
IGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhl
IGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisj
ZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAq
eXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5
eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30K
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9f
R0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAg
ZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1Qs
IHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlE
RVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNl
bHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5
eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0g
eXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9
ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30K
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJF
UyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkK
KyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXll
cnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNl
c3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29t
bWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZ
WVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90
IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAg
d291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5
eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsK
KyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsK
KworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoK
KwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2Ug
J1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlm
ICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJy
ZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0g
PSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6
IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7
CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlm
CisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4
cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5n
OyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGll
ZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVy
cm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJm
bG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0la
RV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXlj
aGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1Rf
TklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAg
IHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJ
WkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGlu
dCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBp
cyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBj
b25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4
cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlm
CisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRp
YyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5n
ICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAg
Y2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVj
dGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJ
ICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4
ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZl
IHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQg
eXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJv
dW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2ts
aW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZ
WU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAx
OworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlz
dHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJl
Z2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4
ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9W
RVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUg
PSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwor
CQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07
CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJ
ICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAg
IHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAg
ICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVy
ZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisg
ICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAg
ICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmlu
Z2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVk
IGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmlu
ZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXly
ZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcp
CisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkg
PCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10p
OworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAg
eXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQor
I2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2Np
YXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFy
ICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQp
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAg
WVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBZ
WVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykKKyAg
ICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwg
eXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAg
ICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZy
b20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lk
ICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2Ug
LyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5
cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNl
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFS
QU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50
Cit5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4
dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBv
ZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51
bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAg
ICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBl
cnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAv
KiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8g
c3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAg
ICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93
IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKwor
ICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5J
VERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNz
cDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5
eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZz
cDsKKworICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJl
c3VsdDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0
b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2Vk
IHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0
aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9T
RQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXpl
LiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwor
ICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVm
aW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyog
VGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAg
ICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBp
bnQgeXlsZW4gPSAwOworCisgIHl5dG9rZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMg
PSB5eXZzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChz
dGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0
YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMu
CisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAg
ICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2su
CisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAg
eXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBp
biB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3
aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2
ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0
YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRl
OworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAg
IC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxl
bWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKwor
I2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVh
bGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUg
JidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlT
VFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyog
RWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhl
CisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8g
YmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0
IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAg
Ki8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eXZzcCksCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMg
PSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZ
U1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAg
IC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQ
VEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tz
aXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tz
aXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNz
OworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3Mp
OworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFD
S19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEp
OworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAg
eXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAt
IDE7CisKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRv
ICVsdVxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAg
IGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQor
CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7
CisKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5
YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSov
Cit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBj
dXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9u
ZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRl
Y2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICov
CisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAg
ICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRv
a2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRo
ZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICBp
ZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
UmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAg
aWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlF
T0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikp
OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAm
eXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24g
c2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBl
cnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXlu
IDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290
byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAg
IHsKKyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXll
cnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisK
KyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXll
cnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKwor
ICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsK
KworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3
c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBm
b3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRl
ZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdv
dG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXly
ZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1
Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5v
bnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBg
JCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZB
TCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlz
b24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlW
QUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwg
YW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQg
dW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9S
RURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAy
OgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+
KCh5eXZzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFlZQUNDRVBUOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
IT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
IDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygz
KSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisK
KyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZz
cFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5j
X3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAhICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAo
eXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjU6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MikgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZh
bCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8q
IE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0
IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBi
YWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXlu
ID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAq
eXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Cisg
IGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290
byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFk
eSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYg
KCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZF
UkJPU0UKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworI2Vs
c2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0
ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZ
WVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICog
eXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNU
QUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElN
VU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkgICAgICBZWVNUQUNLX0ZSRUUgKHl5
bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKKwkg
ICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKKwkgICAgZWxzZQor
CSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5
bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0
YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yIChjb250ZXh0LCB5eW1zZyk7CisJICB9CisJZWxz
ZQorCSAgeworCSAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKwkg
ICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJICB9Cisg
ICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAg
IHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQg
dG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICBpZiAoeXlj
aGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1
dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KKyAgICAg
IGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5
eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAg
IH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBz
aGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
K3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNl
ciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3Js
YWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYg
KC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAg
ICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7
CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7Cisg
IGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2Rl
IGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFi
MToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1l
bnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5
c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlU
RVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0g
PT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAg
aWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1
cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICov
CisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1
Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4
dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICAqKyt5eXZzcCA9IHl5
bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9Q
UklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0
ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFi
OgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJl
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6
CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJldHVybjsKKworI2lmICFkZWZpbmVkKHl5b3Zl
cmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVz
dGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91
Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisJCSB5eXRv
a2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZQUJPUlQgb3Ig
WVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAgICAgIHl5ZGVz
dHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNv
bnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93
CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYK
KyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RB
Q0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAq
LworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisKK2ludCB5eWxleChZWVNU
WVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAg
ICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAq
bHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAwKTsKKyAgICAgICAg
dHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9B
TkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0
eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0g
T1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsK
KyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBl
ID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAg
IGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwn
OyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2Ug
JysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVh
azsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0
eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAg
ICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0g
JygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAg
ZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tl
biBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4
dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9O
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFt
ZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciog
bGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisg
ICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJz
ZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250
ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4
dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4
dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAg
IHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAg
ICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tl
bi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJl
dCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCAr
MSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VY
UFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNT
SU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7
CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2Ns
YXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIo
TGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJz
ZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4
ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM2YzdiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMjc0IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1Ro
aXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nv
ciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJl
cHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1
dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Np
b25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNp
bmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlw
ZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0CisjZWxzZQor
I2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAv
LyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6
OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBw
OjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisl
fQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgorJXBhcnNlLXBhcmFtIHtD
b250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKworJXsKK3N0
YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGlj
IHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0K
KworJXRva2VuIENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wn
CislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicg
T1BfTEUgT1BfR0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0
ICcqJyAnLycgJyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Np
b24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsK
KyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBDT05TVF9J
TlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
fHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+
JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAk
MzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAi
IDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpE
SVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJl
YW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAg
IFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZ
IHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVj
IFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9u
ICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHBy
ZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICco
JyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5
cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lO
VDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwg
MCk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTog
dHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9
IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IE9Q
X1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gT1Bf
TEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7CisgICAgICBj
YXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsg
YnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBjYXNlICc8
JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7
CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICclJzogdHlw
ZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7CisgICAg
ICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlwZSA9ICch
JzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAgICBjYXNl
ICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJl
YWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFuY2UgdG8g
dGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlmICh0eXBl
ICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCit7
CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNv
bik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25Q
YXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4
ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworYm9vbCBF
eHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQoreworICAg
IENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNz
OworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9IHRva2Vu
OworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBhcnNlKCZj
b250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6CisgICAgICBj
YXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChm
YWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5B
TF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAKaW5kZXggNjk0YzNiZC4uYzNkZTk1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmNwcApAQCAtNiwxNTkgKzYsNDkgQEAKIAogI2luY2x1ZGUgIklucHV0Lmgi
CiAKLSNpbmNsdWRlIDxjc3RkaW8+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdHJpbmc+
CiAKIG5hbWVzcGFjZSBwcAogewogCi1JbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotICAgIDogbUNvdW50KGNvdW50
KSwKLSAgICAgIG1TdHJpbmcoc3RyaW5nKSwKLSAgICAgIG1MZW5ndGgobGVuZ3RoKSwKLSAgICAg
IG1JbmRleCgtMSksCi0gICAgICBtU2l6ZSgwKSwKLSAgICAgIG1FcnJvcihrRXJyb3JOb25lKSwK
LSAgICAgIG1TdGF0ZShrU3RhdGVJbml0aWFsKQorSW5wdXQ6OklucHV0KCkgOiBtQ291bnQoMCks
IG1TdHJpbmcoMCkKIHsKLSAgICBBU1NFUlQobUNvdW50ID49IDApOwotICAgIHN3aXRjaFRvTmV4
dFN0cmluZygpOwogfQogCi1ib29sIElucHV0Ojplb2YoKSBjb25zdAorSW5wdXQ6OklucHV0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkg
OgorICAgIG1Db3VudChjb3VudCksCisgICAgbVN0cmluZyhzdHJpbmcpCiB7Ci0gICAgQVNTRVJU
KG1JbmRleCA8PSBtQ291bnQpOwotICAgIHJldHVybiBtSW5kZXggPT0gbUNvdW50OworICAgIGFz
c2VydChtQ291bnQgPj0gMCk7CisgICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGludCBsZW4gPSBs
ZW5ndGggPyBsZW5ndGhbaV0gOiAtMTsKKyAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2sobGVuIDwg
MCA/IHN0cmxlbihtU3RyaW5nW2ldKSA6IGxlbik7CisgICAgfQogfQogCi1pbnQgSW5wdXQ6OnJl
YWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSkKK2ludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGlu
dCBtYXhTaXplKQogewotICAgIGludCBucmVhZCA9IDA7Ci0gICAgaW50IHN0YXJ0SW5kZXggPSBt
SW5kZXg7Ci0gICAgLy8gS2VlcCByZWFkaW5nIHVudGlsIHRoZSBidWZmZXIgaXMgZnVsbCBvciB0
aGUgY3VycmVudCBzdHJpbmcgaXMgZXhoYXVzdGVkLgotICAgIHdoaWxlICgobUluZGV4ID09IHN0
YXJ0SW5kZXgpICYmIChucmVhZCA8IGJ1ZlNpemUpKQorICAgIGludCBuUmVhZCA9IDA7CisgICAg
d2hpbGUgKChuUmVhZCA8IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5kZXggPCBtQ291bnQpKQog
ICAgIHsKLSAgICAgICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0gICAgICAgIGlmIChjID09IEVPRikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZSA9PSBrU3RhdGVCbG9ja0NvbW1lbnQp
Ci0gICAgICAgICAgICAgICAgbUVycm9yID0ga0Vycm9yVW5leHBlY3RlZEVPRjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtU3RhdGUpCisgICAgICAg
IGludCBzaXplID0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdIC0gbVJlYWRMb2MuY0luZGV4Owor
ICAgICAgICBzaXplID0gc3RkOjptaW4oc2l6ZSwgbWF4U2l6ZSk7CisgICAgICAgIG1lbWNweShi
dWYgKyBuUmVhZCwgbVN0cmluZ1ttUmVhZExvYy5zSW5kZXhdICsgbVJlYWRMb2MuY0luZGV4LCBz
aXplKTsKKyAgICAgICAgblJlYWQgKz0gc2l6ZTsKKyAgICAgICAgbVJlYWRMb2MuY0luZGV4ICs9
IHNpemU7CisKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVhY2hlZCB0aGUgZW5k
IG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2MuY0luZGV4ID09IG1MZW5n
dGhbbVJlYWRMb2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAgIGNhc2Uga1N0YXRlSW5p
dGlhbDoKLSAgICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChwZWVrQ2hhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
Jy8nOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJy8nLgotICAgICAg
ICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAg
ICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRl
ID0ga1N0YXRlQmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIGNvbW1l
bnQuCi0gICAgICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlTGluZUNvbW1l
bnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRl
SW5pdGlhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
Y2FzZSBrU3RhdGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgKHBl
ZWtDaGFyKCkgPT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRDaGFy
KCk7ICAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSAnICc7ICAv
LyBSZXBsYWNlIGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIG1TdGF0
ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFrcyBhcmUgbmV2ZXIgc2tp
cHBlZC4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKyttUmVhZExvYy5z
SW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwogICAgICAgICB9CiAgICAg
fQotCi0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6OmdldENoYXIoKQotewotICAg
IGlmIChlb2YoKSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdb
bUluZGV4XTsKLSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAgIC8vIFN3aXRjaCB0byBu
ZXh0IHN0cmluZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVhZC4KLSAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIgcmVhZCBmcm9tIGVt
cHR5IHN0cmluZy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgIGlmICgoKGxlbmd0aCA8
IDApICYmIChzdHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAoKGxlbmd0aCA+IDApICYm
IChtU2l6ZSA9PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0KLSAg
ICByZXR1cm4gYzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17Ci0gICAgLy8gU2F2ZSB0
aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9IG1JbmRleDsKLSAgICBp
bnQgc2l6ZSA9IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwotCi0gICAgLy8gUmVzdG9y
ZSByZWFkIHBvc2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAgIG1TaXplID0gc2l6ZTsK
LSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0U3RyaW5nKCkKLXsK
LSAgICBBU1NFUlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXplID0gMDsKLSAgICBkbwot
ICAgIHsKLSAgICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigpICYmIGlzU3RyaW5n
RW1wdHkobUluZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1wdHkoaW50IGluZGV4
KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIg
PSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5kZXgp
OwotICAgIHJldHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwgMCkgJiYgKHN0clswXSA9
PSAnXDAnKSk7Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGludCBpbmRleCkKLXsKLSAg
ICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVuZ3RoID8gbUxlbmd0aFtp
bmRleF0gOiAtMTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKaW5kZXggNWExYjVkMS4uZGFjNzM0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCkBAIC03LDY2ICs3LDQwIEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRf
SF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7CiAKLS8vIFJlYWRzIHRo
ZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4KLS8vIFN0cmlwcyBjb21t
ZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCiBjbGFzcyBJbnB1dAog
ewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0gICAgZW51bSBFcnJv
cgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vycm9yVW5leHBlY3RlZEVP
RgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtRXJyb3I7IH0KLQot
ICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHN0cmluZyBjdXJyZW50bHkgYmVpbmcgc2Nhbm5l
ZC4KLSAgICBpbnQgc3RyaW5nSW5kZXgoKSBjb25zdCB7IHJldHVybiBtSW5kZXg7IH0KLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgRU9GIGhhcyByZWFjaGVkLgotICAgIGJvb2wgZW9mKCkgY29uc3Q7
CisgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbUNvdW50OyB9CisgICAgY29uc3QgY2hh
ciogc3RyaW5nKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbVN0cmluZ1tpbmRleF07IH0KKyAg
ICBpbnQgbGVuZ3RoKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aFtpbmRleF07IH0K
IAotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBpbnRvIGJ1Zi4KLSAgICAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotICAgIC8vIEl0IHJlcGxh
Y2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRzIG9ubHkgb25lIHN0cmlu
ZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMgb3Bwb3J0dW5pdHkgdG8g
dXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5pbmdmdWwgZGlhZ25vc3Rp
YyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKTsKKyAgICBp
bnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0ZToKLSAgICBlbnVtIFN0
YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBrU3RhdGVJbml0aWFsLAot
ICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRlQmxvY2tDb21tZW50Ci0g
ICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50
IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hhcigpOwotICAgIGludCBw
ZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0byB0aGUgbmV4dCBub24t
ZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgc3Ry
aW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0eS4KLSAgICBib29sIGlz
U3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUg
Z2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgbnVsbC10
ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChpbnQgaW5kZXgpOworICAg
ICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9CisgICAgfTsKKyAgICBj
b25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1SZWFkTG9jOyB9CiAKKyAg
cHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50OwogICAgIGNvbnN0IGNoYXIq
IGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsKLQotICAgIC8vIEN1cnJl
bnQgcmVhZCBwb3NpdGlvbi4KLSAgICBpbnQgbUluZGV4OyAgIC8vIEluZGV4IG9mIHN0cmluZyBj
dXJyZW50bHkgYmVpbmcgc2Nhbm5lZC4KLSAgICBpbnQgbVNpemU7ICAgIC8vIFNpemUgb2Ygc3Ry
aW5nIGFscmVhZHkgc2Nhbm5lZC4KKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7CiAKLSAg
ICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBtRXJyb3I7Ci0gICAgU3Rh
dGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2M2NjNlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApAQCAtMCwwICsx
LDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkxleGVyLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitMZXhlcjo6fkxleGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
Yjg1Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApAQCAtMCwwICsxLDI1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgVG9rZW47CisKK2NsYXNzIExleGVyCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5MZXhl
cigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pID0gMDsKK307CisKK30g
IC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCmluZGV4IGZjY2NhOTYuLmIyZTMwODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKQEAgLTYsMzkgKzYsMTcgQEAKIAogI2lu
Y2x1ZGUgIk1hY3JvLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotTWFjcm86
Ok1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAg
ICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICBUb2tlblZlY3Rv
ciogcmVwbGFjZW1lbnRzKQotICAgIDogbVR5cGUodHlwZSksCi0gICAgICBtTmFtZShuYW1lKSwK
LSAgICAgIG1QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLAotICAgICAgbVJlcGxhY2VtZW50cyhyZXBs
YWNlbWVudHMpCi17Ci19Ci0KLU1hY3JvOjp+TWFjcm8oKQorYm9vbCBNYWNybzo6ZXF1YWxzKGNv
bnN0IE1hY3JvJiBvdGhlcikgY29uc3QKIHsKLSAgICBkZWxldGUgbU5hbWU7Ci0KLSAgICBpZiAo
bVBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1QYXJhbWV0ZXJzLT5i
ZWdpbigpLCBtUGFyYW1ldGVycy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1Q
YXJhbWV0ZXJzOwotICAgIH0KLQotICAgIGlmIChtUmVwbGFjZW1lbnRzKQotICAgIHsKLSAgICAg
ICAgc3RkOjpmb3JfZWFjaChtUmVwbGFjZW1lbnRzLT5iZWdpbigpLCBtUmVwbGFjZW1lbnRzLT5l
bmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVJlcGxhY2VtZW50czsKLSAgICB9Cisg
ICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90
aGVyLm5hbWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMp
ICYmCisgICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKIH0K
IAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAppbmRleCBlMjQz
MzA2Li43ZWMwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw0NSArNywzOCBAQAogI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1
ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
VG9rZW4uaCIKLQogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9rZW47
CisKK3N0cnVjdCBNYWNybwogewotICBwdWJsaWM6CiAgICAgZW51bSBUeXBlCiAgICAgewogICAg
ICAgICBrVHlwZU9iaiwKICAgICAgICAga1R5cGVGdW5jCiAgICAgfTsKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNl
KSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhj
b25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBv
aW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAg
ICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3Rv
ciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3Qg
VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7
IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0K
LSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3Rv
ciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9v
bCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlw
ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAg
ICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIHBwCi0j
ZW5kaWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFwPHN0
ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDE1NGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCkBAIC0wLDAgKzEs
MzY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVz
cGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7CisgcHVibGlj
OgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisgICAgVG9r
ZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5zLT5zd2Fw
KG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlmIChtSXRl
ciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+cmVzZXQo
KTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIrKzsKKyAg
ICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBUb2tlblZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4
cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1Nl
dCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4cGFuZGVy
Ojp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkp
IHBvcE1hY3JvKCk7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRva2VuKTsKKwor
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVkKCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgICAgICBpZiAoaXRlciA9PSBtTWFj
cm9TZXQtPmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY29uc3QgTWFjcm8m
IG1hY3JvID0gaXRlci0+c2Vjb25kOworICAgICAgICBpZiAobWFjcm8uZGlzYWJsZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIElmIGEgcGFydGljdWxhciB0b2tlbiBpcyBub3QgZXhwYW5k
ZWQsIGl0IGlzIG5ldmVyIGV4cGFuZGVkLgorICAgICAgICAgICAgdG9rZW4tPnNldEV4cGFuc2lv
bkRpc2FibGVkKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpICYmICFpc05leHRUb2tlbkxlZnRQ
YXJlbigpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdG9rZW4gaW1tZWRpYXRl
bHkgYWZ0ZXIgdGhlIG1hY3JvIG5hbWUgaXMgbm90IGEgJygnLAorICAgICAgICAgICAgLy8gdGhp
cyBtYWNybyBzaG91bGQgbm90IGJlIGV4cGFuZGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBwdXNoTWFjcm8obWFjcm8sICp0b2tlbik7CisgICAgfQorfQorCit2
b2lkIE1hY3JvRXhwYW5kZXI6OmdldFRva2VuKFRva2VuKiB0b2tlbikKK3sKKyAgICBpZiAobVJl
c2VydmVUb2tlbi5nZXQoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9ICptUmVzZXJ2ZVRva2Vu
OworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBGaXJzdCBwb3AgYWxsIGVtcHR5IG1hY3JvIGNvbnRleHRzLgorICAgIHdoaWxl
ICghbUNvbnRleHRTdGFjay5lbXB0eSgpICYmIG1Db250ZXh0U3RhY2suYmFjaygpLT5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgcG9wTWFjcm8oKTsKKyAgICB9CisKKyAgICBpZiAoIW1Db250ZXh0
U3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9IG1Db250ZXh0U3RhY2suYmFj
aygpLT5nZXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxleGVyLT5sZXgo
dG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjp1bmdldFRva2VuKGNvbnN0
IFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOwor
ICAgICAgICBjb250ZXh0LT51bmdldCgpOworICAgICAgICBhc3NlcnQoY29udGV4dC0+aW5kZXgg
Pj0gMCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5k
ZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFt
UmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9r
ZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5M
ZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7CisK
KyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOworICAgIHVuZ2V0VG9rZW4odG9r
ZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNo
TWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmllcikKK3sKKyAg
ICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAgICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5z
aW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURF
TlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudmFsdWUgPT0gbWFjcm8ubmFtZSk7CisK
KyAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworICAgIGlmICghZXhwYW5kTWFj
cm8obWFjcm8sIGlkZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5zaW9uIHVudGlsIGl0IGlz
IHBvcHBlZCBvZmYgdGhlIHN0YWNrLgorICAgIG1hY3JvLmRpc2FibGVkID0gdHJ1ZTsKKworICAg
IE1hY3JvQ29udGV4dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7CisgICAgY29udGV4dC0+
bWFjcm8gPSAmbWFjcm87CisgICAgY29udGV4dC0+cmVwbGFjZW1lbnRzLnN3YXAocmVwbGFjZW1l
bnRzKTsKKyAgICBtQ29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygpCit7CisgICAgYXNzZXJ0
KCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0g
bUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgbUNvbnRleHRTdGFjay5wb3BfYmFjaygpOworCisg
ICAgYXNzZXJ0KGNvbnRleHQtPmVtcHR5KCkpOworICAgIGFzc2VydChjb250ZXh0LT5tYWNyby0+
ZGlzYWJsZWQpOworICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9IGZhbHNlOworICAgIGRl
bGV0ZSBjb250ZXh0OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKGNvbnN0
IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9r
ZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVj
dG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIHJlcGxhY2VtZW50cy0+Y2xlYXIoKTsK
KyAgICBpZiAobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCisgICAgeworICAgICAgICBy
ZXBsYWNlbWVudHMtPmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVuZCgpKTsKKworICAgICAg
ICBpZiAobWFjcm8ucHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtMaW5lID0gIl9fTElORV9fIjsKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7CisKKyAgICAgICAgICAgIGFzc2Vy
dChyZXBsYWNlbWVudHMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIFRva2VuJiByZXBsID0g
cmVwbGFjZW1lbnRzLT5mcm9udCgpOworICAgICAgICAgICAgaWYgKG1hY3JvLm5hbWUgPT0ga0xp
bmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7
CisgICAgICAgICAgICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0ZpbGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAg
ICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7CisgICAgICAgICAgICAg
ICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQobWFjcm8udHlwZSA9PSBNYWNy
bzo6a1R5cGVGdW5jKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+IGFyZ3M7CisgICAg
ICAgIGFyZ3MucmVzZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7CisgICAgICAgIGlmICgh
Y29sbGVjdE1hY3JvQXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3MpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlcGxhY2VNYWNyb1BhcmFtcyhtYWNybywgYXJncywg
cmVwbGFjZW1lbnRzKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcGxh
Y2VtZW50cy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxh
Y2VtZW50cy0+YXQoaSk7CisgICAgICAgIGlmIChpID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpbmhlcml0cyB0
aGUgcGFkZGluZworICAgICAgICAgICAgLy8gcHJvcGVydGllcyBvZiB0aGUgaWRlbnRpZmllciB0
b2tlbi4KKyAgICAgICAgICAgIHJlcGwuc2V0QXRTdGFydE9mTGluZShpZGVudGlmaWVyLmF0U3Rh
cnRPZkxpbmUoKSk7CisgICAgICAgICAgICByZXBsLnNldEhhc0xlYWRpbmdTcGFjZShpZGVudGlm
aWVyLmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXBsLmxvY2F0aW9u
ID0gaWRlbnRpZmllci5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFj
cm9Bcmc+KiBhcmdzKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7
CisgICAgYXNzZXJ0KHRva2VuLnR5cGUgPT0gJygnKTsKKworICAgIGFyZ3MtPnB1c2hfYmFjayhN
YWNyb0FyZygpKTsKKyAgICBmb3IgKGludCBvcGVuUGFyZW5zID0gMTsgb3BlblBhcmVucyAhPSAw
OyApCisgICAgeworICAgICAgICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgICAgIGlmICh0b2tl
bi50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVu
dGlmaWVyLnZhbHVlKTsKKyAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAg
ICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2Vu
IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisgICAgICAgIHN3aXRjaCAodG9rZW4u
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgKytvcGVu
UGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAtLW9wZW5QYXJlbnM7CisgICAgICAgICAg
ICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgJywnOgorICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBz
ZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKKyAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0
b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAg
ICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09
IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICAgICAgICAgIGlzQXJnID0gb3Bl
blBhcmVucyAhPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpc0FyZykKKyAgICAgICAgeworICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9
IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3Qg
cGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2Vu
LnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRv
a2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBw
YXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVt
cHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3VtZW50LgorICAgIGlmIChw
YXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3MtPmNsZWFyKCk7CisgICAgfQorICAgIC8vIFZhbGlk
YXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFy
YW1zLnNpemUoKSkKKyAgICB7CisgICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNp
emUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KKyAgICAgICAgICAgIERpYWdub3N0aWNz
OjpNQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RP
T19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVy
LmxvY2F0aW9uLCBpZGVudGlmaWVyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZvcmUgc3Vic3RpdHV0aW9u
LgorICAgIC8vIFRoaXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5IGJl
Zm9yZSB0aGV5IGFyZQorICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1hY3JvIGJvZHkuCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAg
IE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5hdChpKTsKKyAgICAgICAgVG9rZW5MZXhlciBsZXhlcigm
YXJnKTsKKyAgICAgICAgTWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4ZXIsIG1NYWNyb1NldCwg
bURpYWdub3N0aWNzKTsKKworICAgICAgICBhcmcuY2xlYXIoKTsKKyAgICAgICAgZXhwYW5kZXIu
bGV4KCZ0b2tlbik7CisgICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuOjpMQVNUKQor
ICAgICAgICB7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgICAg
IGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNy
byYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxNYWNyb0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7
CisgICAgICAgIGNvbnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAg
ICAgICBpZiAocmVwbC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMu
CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMg
ZXZlcnkgdGltZS4KKyAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0
aCB0aGUgcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gc3RkOjpmaW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVy
cy5iZWdpbigpLCBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnZhbHVlKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpQXJnID0gc3RkOjpkaXN0YW5jZShtYWNyby5w
YXJhbWV0ZXJzLmJlZ2luKCksIGl0ZXIpOworICAgICAgICBjb25zdCBNYWNyb0FyZyYgYXJnID0g
YXJnc1tpQXJnXTsKKyAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgaVJlcGwgPSByZXBsYWNl
bWVudHMtPnNpemUoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRz
LT5lbmQoKSwgYXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNl
bWVudCB0b2tlbiBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBt
YWNybyByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCku
c2V0SGFzTGVhZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKwor
fSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTA0ZWJhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPG1l
bW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
Ik1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1h
Y3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgfk1hY3JvRXhw
YW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKKwor
ICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4oY29u
c3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlzTmV4dFRva2VuTGVmdFBhcmVuKCk7CisKKyAg
ICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlm
aWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisKKyAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0
IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVu
dHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFjcm9Bcmc7CisgICAgYm9v
bCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7CisgICAgdm9pZCByZXBsYWNlTWFjcm9Q
YXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICBzdHJ1Y3QgTWFj
cm9Db250ZXh0CisgICAgeworICAgICAgICBjb25zdCBNYWNybyogbWFjcm87CisgICAgICAgIHNp
emVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKwor
ICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgwKSB7IH0KKyAgICAgICAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7
IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRl
eCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9CisgICAgfTsKKworICAg
IExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGlj
cyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tl
bjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNS
T19FWFBBTkRFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNw
cAppbmRleCBlZjQ5ZTU3Li4yMTkwMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5jcHAKQEAgLTYsNDcgKzYsMTA4IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNz
b3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1
ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNv
bnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5j
bHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nv
cigpIDogbUNvbnRleHQoTlVMTCkKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCiB7CisgICAgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2Vu
aXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAg
ICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERp
YWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciog
ZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAg
dG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1h
Y3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigm
ZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1By
ZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIp
Cit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0
aXZlSGFuZGxlcik7CiB9CiAKIFByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCiB7Ci0gICAg
ZGVsZXRlIG1Db250ZXh0OworICAgIGRlbGV0ZSBtSW1wbDsKIH0KIAotYm9vbCBQcmVwcm9jZXNz
b3I6OmluaXQoKQorYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCiB7Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29u
dGV4dDsKLSAgICByZXR1cm4gbUNvbnRleHQtPmluaXQoKTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBt
YWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJlZGVmaW5l
TWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwg
a0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKworICAgIHJl
dHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAot
Ym9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCit2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5l
TWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQogewotICAgIEFTU0VSVCgoY291bnQg
Pj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmlu
ZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CisKKyAgICBUb2tlbiB0b2tlbjsKKyAgICB0
b2tlbi50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKKyAgICB0b2tlbi52YWx1ZSA9IHN0cmVhbS5z
dHIoKTsKIAotICAgIHJlc2V0KCk7CisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8ucHJlZGVm
aW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNy
by5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsK
IAotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZt
VG9rZW5zKTsKKyAgICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsKIH0KIAotdm9pZCBQ
cmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2Vu
KQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBE
ZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOworICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZh
bHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAgICAgIG1JbXBsLT5tYWNy
b0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBw
cmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3Npbmcg
dG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAgICAgICAvLyBkaWFnbm9z
dGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAgICAgICAgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX05V
TUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZh
bGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9
CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuaAppbmRleCA4ODViYjcwLi41ZmUzNWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuaApAQCAtNywzNCArNyw0MSBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
VG9rZW4uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xh
c3MgQ29udGV4dDsKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsK
K3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOwogCiBjbGFzcyBQcmVwcm9j
ZXNzb3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3Nv
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpOwogICAgIH5QcmVwcm9jZXNzb3IoKTsKIAotICAgIGJvb2wgaW5pdCgpOwotCi0gICAg
Ym9vbCBwcm9jZXNzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7Ci0gICAgVG9rZW5JdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1Ub2tlbnMuYmVnaW4oKTsgfQotICAgIFRva2VuSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbVRva2Vucy5lbmQoKTsgfQorICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBv
ZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmlu
Zzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVu
Z3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVu
Z3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVk
LgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRz
IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2gg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxl
bWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisg
ICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9v
bCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgorICAgIHZvaWQgcHJl
ZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKKworICAgIHZvaWQgbGV4
KFRva2VuKiB0b2tlbik7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUHJlcHJvY2Vzc29yKTsKLQotICAgIC8vIFJlc2V0IHRvIGluaXRpYWxpemVkIHN0YXRlLgot
ICAgIHZvaWQgcmVzZXQoKTsKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJv
Y2Vzc29yKTsKIAotICAgIENvbnRleHQqIG1Db250ZXh0OwotICAgIFRva2VuVmVjdG9yIG1Ub2tl
bnM7ICAvLyBPdXRwdXQuCisgICAgUHJlcHJvY2Vzc29ySW1wbCogbUltcGw7CiB9OwogCiB9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODI2MTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworCituYW1lc3BhY2UgcHAK
K3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZp
bGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZp
bGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmls
ZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQorCisgICAgaW50IGZpbGU7CisgICAg
aW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5l
cXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiAhbGhz
LmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uY3BwCmluZGV4IGEyZTc1OWMuLjk2MDM4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKQEAgLTYsNTAgKzYsNTYgQEAKIAogI2luY2x1ZGUgIlRva2VuLmgiCiAKLSNpbmNsdWRl
ICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZVNpemUgPSAx
NjsgIC8vIGluIGJpdHMuCi1zdGF0aWMgY29uc3QgaW50IGtMb2NhdGlvbkxpbmVNYXNrID0gKDEg
PDwga0xvY2F0aW9uTGluZVNpemUpIC0gMTsKLQogbmFtZXNwYWNlIHBwCiB7CiAKLVRva2VuOjpM
b2NhdGlvbiBUb2tlbjo6ZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKQordm9pZCBU
b2tlbjo6cmVzZXQoKQogewotICAgIHJldHVybiAoZmlsZSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkg
fCAobGluZSAmIGtMb2NhdGlvbkxpbmVNYXNrKTsKKyAgICB0eXBlID0gMDsKKyAgICBmbGFncyA9
IDA7CisgICAgbG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgIHZhbHVlLmNsZWFyKCk7
CiB9CiAKLXZvaWQgVG9rZW46OmRlY29kZUxvY2F0aW9uKExvY2F0aW9uIGxvYywgaW50KiBsaW5l
LCBpbnQqIGZpbGUpCitib29sIFRva2VuOjplcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dAogewotICAgIGlmIChmaWxlKSAqZmlsZSA9IGxvYyA+PiBrTG9jYXRpb25MaW5lU2l6ZTsKLSAg
ICBpZiAobGluZSkgKmxpbmUgPSBsb2MgJiBrTG9jYXRpb25MaW5lTWFzazsKKyAgICByZXR1cm4g
KHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKGZsYWdzID09IG90aGVyLmZsYWdz
KSAmJgorICAgICAgICAgICAobG9jYXRpb24gPT0gb3RoZXIubG9jYXRpb24pICYmCisgICAgICAg
ICAgICh2YWx1ZSA9PSBvdGhlci52YWx1ZSk7CiB9CiAKLVRva2VuOjpUb2tlbihMb2NhdGlvbiBs
b2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSkKLSAgICA6IG1Mb2NhdGlvbihs
b2NhdGlvbiksCi0gICAgICBtVHlwZSh0eXBlKSwKLSAgICAgIG1WYWx1ZSh2YWx1ZSkKK3ZvaWQg
VG9rZW46OnNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCkKIHsKKyAgICBpZiAoc3RhcnQpCisg
ICAgICAgIGZsYWdzIHw9IEFUX1NUQVJUX09GX0xJTkU7CisgICAgZWxzZQorICAgICAgICBmbGFn
cyAmPSB+QVRfU1RBUlRfT0ZfTElORTsKIH0KIAotVG9rZW46On5Ub2tlbigpIHsKLSAgICBkZWxl
dGUgbVZhbHVlOwordm9pZCBUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpCit7
CisgICAgaWYgKHNwYWNlKQorICAgICAgICBmbGFncyB8PSBIQVNfTEVBRElOR19TUEFDRTsKKyAg
ICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5IQVNfTEVBRElOR19TUEFDRTsKK30KKwordm9pZCBU
b2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKQoreworICAgIGlmIChkaXNh
YmxlKQorICAgICAgICBmbGFncyB8PSBFWFBBTlNJT05fRElTQUJMRUQ7CisgICAgZWxzZQorICAg
ICAgICBmbGFncyAmPSB+RVhQQU5TSU9OX0RJU0FCTEVEOwogfQogCiBzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikKIHsKLSAgICBz
d2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9DT05TVEFOVDoKLSAg
ICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJRVI6Ci0gICAgICAg
IG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBlKCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgpKQorICAgICAg
ICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAgIHJldHVybiBvdXQ7
CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi41MjMxMDIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmgKQEAgLTcsNDIgKzcsOTQgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwogCisjaW5j
bHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogCi0j
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3VyY2VMb2NhdGlvbi5o
IgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tlbgogewotICBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGljIExvY2F0aW9uIGVu
Y29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGljIHZvaWQgZGVjb2Rl
TG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7CisgICAgZW51bSBU
eXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAgIC8vIFRha2VzIG93
bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBl
LCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAgICBJREVOVElGSUVS
ID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtTG9jYXRp
b247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qg
c3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisgICAgICAgIENP
TlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisgICAgICAgIE9QX0RF
QywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAgIE9QX0xFLAor
ICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAorICAgICAgICBP
UF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAgIE9QX0FERF9B
U1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9BU1NJR04sCisg
ICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisgICAgICAgIE9Q
X0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAgIE9QX0FORF9B
U1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FTU0lHTiwKIAot
ICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcq
IG1WYWx1ZTsKKyAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyB0b2tlbiB0eXBlcy4KKyAgICAgICAg
Ly8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgYnkgdGhlIHByZXByb2Nlc3NvciBpbnRlcm5hbGx5Lgor
ICAgICAgICAvLyBQcmVwcm9jZXNzb3IgY2xpZW50cyBtdXN0IG5vdCBkZXBlbmQgb3IgY2hlY2sg
Zm9yIHRoZW0uCisgICAgICAgIFBQX0hBU0gsCisgICAgICAgIFBQX05VTUJFUiwKKyAgICAgICAg
UFBfT1RIRVIKKyAgICB9OworICAgIGVudW0gRmxhZ3MKKyAgICB7CisgICAgICAgIEFUX1NUQVJU
X09GX0xJTkUgICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJTkdfU1BBQ0UgID0gMSA8PCAx
LAorICAgICAgICBFWFBBTlNJT05fRElTQUJMRUQgPSAxIDw8IDIKKyAgICB9OworCisgICAgVG9r
ZW4oKSA6IHR5cGUoMCksIGZsYWdzKDApIHsgfQorCisgICAgdm9pZCByZXNldCgpOworICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdG9rZW4gb24gbGluZS4KKyAgICAvLyBJdCBkaXNyZWdh
cmRzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgYm9vbCBhdFN0YXJ0T2ZMaW5lKCkgY29u
c3QgeyByZXR1cm4gKGZsYWdzICYgQVRfU1RBUlRfT0ZfTElORSkgIT0gMDsgfQorICAgIHZvaWQg
c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KTsKKworICAgIGJvb2wgaGFzTGVhZGluZ1NwYWNl
KCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgSEFTX0xFQURJTkdfU1BBQ0UpICE9IDA7IH0KKyAg
ICB2b2lkIHNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKTsKKworICAgIGJvb2wgZXhwYW5z
aW9uRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBFWFBBTlNJT05fRElTQUJMRUQp
ICE9IDA7IH0KKyAgICB2b2lkIHNldEV4cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSk7CisK
KyAgICBpbnQgdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgU291cmNlTG9jYXRp
b24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CiB9OwogCi10eXBlZGVmIHN0ZDo6
dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVmIFRva2VuVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tl
biYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9r
ZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KIAogZXh0ZXJuIHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRv
a2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JhOGJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzNDUgQEAKKyNsaW5lIDE2ICIuL1Rva2VuaXplci5s
IgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5l
cmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisKKworI2xpbmUgMTMgIi4vVG9rZW5pemVy
LmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNh
bCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhf
U1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmly
c3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMg
aXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4
IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmlu
ZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkg
c3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9O
X18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYg
eW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8K
KyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9T
IDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhf
aW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBm
bGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGlu
dDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vs
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
ZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgI2RlZmluZSBZWV9MRVNT
X0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVk
IGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3Mo
bikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJ
CVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwK
Kwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0
X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZp
bmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRp
ZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9p
bnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisK
KwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZv
ciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKwor
CS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRp
bmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdo
ZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwK
KwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBp
dCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8q
IFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFu
ZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVz
ZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZl
dGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUg
YmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZl
IG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0
X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisg
ICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8q
IFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRo
ZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlf
YnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVG
RkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3Rp
bGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZ
WV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVh
ZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxs
IGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAq
IHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUg
RU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgcHByZXN0YXJ0KCkp
LCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9p
bnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJf
RU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMg
aW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRl
cyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUiLgorICoKKyAqIFJldHVybnMg
dGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9C
VUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2FtZSBhcyBwcmV2aW91cyBtYWNy
bywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAor
ICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
CisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlu
cHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVy
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9C
VUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQg
cHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworc3RhdGljIHZvaWQg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lk
IHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lk
IHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1
ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZ
WV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0
IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICpwcGFs
bG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqcHByZWFsbG9jICh2
b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lk
ICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3Jl
YXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5
c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9i
b2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2Jv
bCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmlu
ZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5
eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91
c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNj
YW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBo
YXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAt
IHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlf
YnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBc
CisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDM3Cisj
ZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGlu
IHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3Ry
dWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2lu
dDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0
Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzgsICAg
MzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDksCisgICAgICAgIDksICAgMzMsICAg
MzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisgICAgICAgIDQs
ICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsICAgMjMsCisg
ICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEs
ICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAg
MTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYs
ICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAg
IDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgIDAK
KyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAg
IHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA1
LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAgICA5LAorICAgICAgICA5LCAg
IDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE2LAorICAg
ICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5LCAgICA5LCAg
IDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIx
LCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAorICAgICAgICA5LCAgICAxLCAgICA5LCAg
IDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAgICAgMjIsICAg
MjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAg
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYsICAgIDksICAgIDksICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsgICAwLAorICAg
ICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5XSA9CisgICAg
eyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAgMjYsICAxNTgsICAxNTksICAxNTAsICAx
NTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIsICAgMjMsICAxNTksICAxMTEsICAgMjEs
ICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAgNDYsICAgMzYsICAxMDAsICAgNDUsICAg
IDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQsCisgICAgICAgNjUsICAgNzMsICAxNTks
ICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksCisgICAgICAxNTksICAx
NTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMsICAgMzIsICAgNTYsICAgODMsCisgICAg
ICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAxNTksICAxNTksICAgMTksICAgIDAsICAx
NTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAsICAxNTksICAxNTksICAgOTgsICAgIDAs
ICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAgNTIsICAgOTAsICAgODAsICAxNTksICAx
NTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAsICAxMjMsICAxNTksICAxNDAsICAgMjgs
ICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0LCAgIDg0LCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDIwLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLAorICAg
ICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIw
LCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgz
LCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAg
IDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAgIDgzLCAgIDgz
LCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDYs
ICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCisg
ICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMs
ICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjksICAg
MzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzksICAgNTksICAgMzEsICAgNjAsICAgMzEs
ICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAgNjEsICAgMzcsICAgNDUsICAgNDIsICAg
NDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYsCisgICAgICAgNDgsICAgNDgsICAgNDks
ICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAgNTAsICAgNTIsCisgICAgICAgNTMsICAg
NTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEsICAgODEsICAgODEsICAgNTAsCisgICAg
ICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgsICAgNjYsICAg
NTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcsICAgNjcsICAgNTAsICAgNjUsICAgNzEs
ICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIsICAgNTAsICAg
NTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4MywgICA4MywgICA1MCwgICA1MCwgICA1
MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA2Nywg
ICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAgICA3OCwgICA3
OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAzOCwKKyAgICAg
ICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4
MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAzNCwgICAzMywg
ICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3
NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAgICA0LAorICAg
ICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAg
IDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5
LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0
LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAg
IDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAgIDUyLCAgIDQz
LCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAg
IDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUw
LAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAgNTEsICAgNzks
ICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcsICAgNzgsICAg
NzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjksICAgNjksICAgODAsICAgODAsICAgNjks
ICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisgICAgICAgMTIsICAgNzIsICAgNzIsICAg
NzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAgIDksICAgODYsICAgODYsCisgICAgICAg
ODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgsICAgODgsICAgIDUsICAgODMsICAgODMs
CisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAg
ICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQn
bGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLwor
I2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1v
cmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAK
KyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVw
cm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
KworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRl
ZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2Zh
dGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21p
c3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwor
dHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQg
eXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5l
IHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7
IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxl
KDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5z
Y2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlu
cHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2Nhbkxv
Yy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2Nhbkxv
Yy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZp
bmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJh
LT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5l
IENPTU1FTlQgMQorCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4
dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIu
ICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0
b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAv
KiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5v
bi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAg
IHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4g
Ki8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFj
ay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sg
YXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgaW50IHl5X25fY2hh
cnM7CisgICAgaW50IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5
X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3Rh
Y2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAg
Y2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9s
ZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7
CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5p
dF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBo
ZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9t
IGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXln
LT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisg
ICAgCitpbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5p
dF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwor
CisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNp
YmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQg
cHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFn
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNl
cl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK3ZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCitpbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0
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
aW50IGMgPSAnKic7IFwKKwkJaW50IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAm
JiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24g
KSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1
ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSAp
IFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsg
XAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAor
CQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYg
ZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsg
XAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsg
XAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWlu
KTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVy
IHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAq
IHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRo
YXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFj
aGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRl
cm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMg
Ynkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFS
VF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisv
KiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZp
bmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQor
I2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90
b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIg
LSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAq
LworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBp
bnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNM
IGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlf
REVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxl
LCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lm
bmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JS
RUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9T
RVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24g
d2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9z
dGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9i
cDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLworCisg
ICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwor
CisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZk
ZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWct
Pnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAq
LworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQg
KQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewor
CQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQor
CisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8K
KwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4
dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRz
IHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBj
dXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkg
eXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlvbjoJ
LyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJ
CXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwor
CQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2Yg
WVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJ
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNvbW1l
bnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICov
CisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitjYXNl
IDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisK
KwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVf
U0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFM
KTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJhLT5s
aW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOworfQor
CVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCVlZ
X0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKwlZ
WV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJ
VH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50
ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05V
TUJFUjsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5D
OworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZ
X0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVB
SworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAy
OToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitj
YXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
eXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0
OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAg
IHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgorY2Fz
ZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90
IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBF
T0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1
dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7
CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Cisg
ICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBX
ZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQor
ICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBz
SW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4
TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwor
ICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAg
IGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywg
eXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAg
ICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVf
U0VUVVAKK0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJewor
CQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAq
LworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+
eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JF
X0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5n
IGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0
aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0
IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2Ug
aGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZG
RVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRv
IHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4g
cG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlu
cHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
bnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUg
d2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUg
Zmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJl
YWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChz
aW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQt
b2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBp
bnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlzIHdh
cyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJ
CXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5
c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRo
ZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNl
IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkg
b2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50
byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAq
LworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0
ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhl
IE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQll
bHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09G
X0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsK
KworCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBi
ZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkg
dG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkg
KiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBm
bGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSBy
ZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJ
CQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3Qg
PSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQor
CisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0K
KworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXlnLT55eV9jX2J1Zl9wID0K
KwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwor
CisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVPQl9BQ1Rf
TEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9
IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlk
ZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJu
YWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQgb2YgcHBs
ZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVm
ZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVP
Ql9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBz
Y2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBl
bmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRf
cHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKwor
CWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRhbCBm
bGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOworCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQorCQl7
IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwor
CQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09
IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0Is
IHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1cm4g
RU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRj
aGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4K
KwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJLyog
VHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRv
IHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVy
X3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9Q
RU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7CisKKwll
bHNlCisJCXsKKwkJCWludCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxlICggbnVtX3Rv
X3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3Jv
dyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVm
ZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOworCisJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlp
bnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9
IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxz
ZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIg
KikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJcHBy
ZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5l
ciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24g
aXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAhIGItPnl5X2NoX2J1ZiAp
CisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBi
dWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZb
eXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOworCisJCQl9
CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQorCQkJbnVtX3RvX3Jl
YWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLworCQlZ
WV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9f
bW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOworCisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
KwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsKKwkJaWYgKCBudW1iZXJf
dG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRf
T0ZfRklMRTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKKwkJCX0KKworCQllbHNl
CisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJ
Tkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUp
ID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQg
dGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5
eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5
eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCXl5Zy0+eXlf
bl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBj
aGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCisJ
CXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJ
KCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJ
CXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwor
CQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsK
KwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJh
bnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisg
KiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3Rh
dGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5
eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJ
cmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5k
aW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
KwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQor
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7CisKKwlyZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJh
Y3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhl
IEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhl
biB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5
X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJ
aW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsreXln
LT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMg
aGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3Vt
dWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkg
KiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0
IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgor
CQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9C
X0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1
cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxMVEhS
T1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKKworCQkJCQlpZiAoICEg
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7Cisj
aWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNl
CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNh
c2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9
ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNo
YXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8K
Kwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOwor
fQorI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dp
dGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEg
cmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRp
b24gdG8gQGMgSU5JVElBTCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1
dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JV
RkZFUiApeworICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5pdF9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZm
ZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9zd2l0Y2hf
dG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBl
bnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVyX3N0YXRlKCk7
CisJICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0g
bmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7
CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBz
d2l0Y2ggZHVyaW5nCisJICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5
IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNh
bGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJ
ICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMg
dm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1
dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoq
IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJh
bSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBi
dWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0
ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2Ny
ZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2No
X2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJl
Y2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4K
KwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWIt
Pnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5u
ZXIpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFy
YW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZGVsZXRlX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlm
ICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyog
Tm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVy
ICkKKwkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwlwcGZy
ZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5p
dGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQg
bW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSBw
cHJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZl
ciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
CisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nh
bm5lcik7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9
IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1
ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRo
cm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qg
d2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAh
PSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAg
ICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxs
IGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUg
Y2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3Vh
bGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
ICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKwor
CWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhl
IGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRo
YXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1
Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwor
ICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0
YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3Rh
dGUuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQg
cHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKwor
CXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBj
b3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
KwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyog
T25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYg
KFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20gcHBf
c3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
Kwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVz
IGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBu
ZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJ
cHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JV
RkZFUikgeworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBz
dGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBs
ZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaW50IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+
eXlfYnVmZmVyX3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAy
IGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJ
ICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51
bV90b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQo
eXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1f
dG9fYWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9
CisKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBh
IHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93
IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsg
Z3Jvd19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKiopcHByZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJ
bnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQks
IHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2so
KSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55
eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSBudW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIg
YnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBz
aXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9j
YXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
YnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAg
ICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3Np
emUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVh
dmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVS
X1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5u
ZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAy
OwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+
eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1
dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNf
aW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIg
PSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJcHBfc3dpdGNo
X3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRv
IHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFy
YW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMg
dGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgcHBfc2Nhbl9i
eXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJu
IHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoq
IFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRo
ZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBh
IGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFy
YW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBh
IGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVG
RkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsK
KwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9y
eSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICov
CisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNj
YW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXli
eXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNf
bGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwli
ID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9G
QVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQn
cyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAor
CSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAx
OworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZ
X0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5
Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAkodm9pZCkgZnBy
aW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwor
fQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4g
Ki8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJ
CS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJ
eXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5
X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAg
KQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBt
ZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2Fu
bmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VY
VFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVy
biB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9saW5lbm8g
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5U
X0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWxpbmVu
bzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9jb2x1bW4gICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZF
UikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNvbHVtbjsKK30K
KworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9v
dXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsKK30KKworLyoq
IEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50
IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKwor
Y2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBu
ZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUg
ZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJB
X1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRy
YSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIu
CisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYg
YW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZG
RVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0
aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251
bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9u
dW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lk
IHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlz
dHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlf
ZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nh
bm5lcik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRo
ZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5w
dXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVm
ZmVyCisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUg
KiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3Ry
IDsKK30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwor
fQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNU
WVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
bHZhbDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZ
WUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4g
eXlsbG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJh
bSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwor
fQorICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNp
YWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRo
ZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBh
cyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUg
dGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50
IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95
eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlf
Z2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVy
biAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBt
ZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisg
ICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBw
cGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQs
IGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMg
dGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2lu
dGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAo
YW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBo
YW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGlu
IHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0
aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9U
WVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAg
c3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2Vy
X2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3Ry
dWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9i
YWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwor
ICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7
CisgICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxz
KTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50
cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhf
ZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Cisg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAo
Y2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7
CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9z
dGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBE
ZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47
CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAg
IHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVu
Y2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBw
bGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95
IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2lu
dCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0
aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9D
VVJSRU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNl
bGYuICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRp
dGlvbiBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nh
bm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJl
c2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nh
bm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxp
emF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwor
CisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAg
ICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxM
OworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4K
KyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwly
ZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwor
fQorCit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxv
d2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFy
KiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFO
U0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2lu
dGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkg
KiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikg
cmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICog
cHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBz
ZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxF
U19OQU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tlbml6
ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4
dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIo
KQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkK
K3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDAp
ICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0g
SW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsK
K30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8g
V2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5
ZmlsZW5vLgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOworfQorCit2b2lkIFRva2Vu
aXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNldF9saW5lbm8obGluZSxt
SGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAg
dG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnZhbHVlLCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRs
ZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5l
KG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5
cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVh
ZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkg
JiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9
PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOwor
ICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNjRhMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1NyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRl
ICJJbnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIg
OiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgewor
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7
CisgICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBs
b2NhdGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0
OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBp
ZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAg
ICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7
CisgICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KTsKKworICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7CisgICAgdm9pZCBzZXRMaW5l
TnVtYmVyKGludCBsaW5lKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
KworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIp
OworICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7CisK
KyAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisgICAgQ29udGV4dCBtQ29u
dGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQw
MWM3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApAQCAtMCwwICsxLDMyOSBAQAorLyoK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmlj
YXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3Vh
bCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBG
SUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0b3B7
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5pemVy
LmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNp
ZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5
eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdtaXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQ
RTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51
c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2Rl
ZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAg
ICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0g
MTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZh
bHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3
aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRy
YS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXgg
PCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNj
YW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNj
YW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8g
PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXll
eHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFw
IG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRn
ZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlw
ZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxu
fFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1Ig
IFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05
XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNU
QU5UICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQ
T05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5l
IGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAg
IC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAg
LyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7
IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENP
TU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXll
eHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7
CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0
dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6
UFBfT1RIRVI7Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJ
TUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0gewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFM
X0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAv
KiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJl
IGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMg
YW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2Et
ekEtWjAtOS5dKikgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9Cisi
LS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
UklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOwor
fQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJe
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwor
e1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJl
dHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFj
ZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+
YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwt
PmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOwor
fQorCis8Kj48PEVPRj4+IHsKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBm
b3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBt
YW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQg
c0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2Nh
bkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5
IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8v
IGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsg
c2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGlu
ZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9j
LT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NU
QVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5
eXRlcm1pbmF0ZSgpOworfQorCislJQorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRv
a2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2Vu
aXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6Omlu
aXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50
ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5w
dXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5l
cigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAg
ICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFj
cm8geXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1uKGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lk
IFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8o
bGluZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQor
eworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5sb2NhdGlv
biwgbUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0
YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0g
dG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNv
bnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsK
K30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUg
PT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlm
IChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3ko
bUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKaW5kZXggNWIz
MmY3MS4uZTljNzBiMSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3Bh
cnNlci5zaApAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jhc2gKLSMgQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAK
LSMgR2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0gcHBfbGV4LmNwcCwgcHBfdGFiLmgs
IGFuZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgR0xTTCBF
UyBwcmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
JDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3BwCitpbnB1dF9maWxlPSRz
Y3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCiBmbGV4IC0tbm9saW5l
IC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHJ1
bl9iaXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkKLW91dHB1dF9oZWFkZXI9
JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfdGFiLmNw
cAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRlZmluZXM9JG91dHB1dF9o
ZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK2lucHV0X2ZpbGU9JHNj
cmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGlu
ZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
IH0KIAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMgR2VuZXJhdGUgcHJlcHJvY2Vzc29y
Ci1ydW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxleCBUb2tlbml6ZXIubCBUb2tlbml6
ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25QYXJzZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHAubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3Y2Ew
NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcC5sCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0
aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0ldG9wewot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0
ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVm
aW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJz
dF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1u
ID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVz
dWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4
U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3Qg
Y2hhciogc3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZl
ci1pbnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJp
c29uLWxvY2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlvbiBwcmVmaXg9InBwIgotJW9wdGlv
biBleHRyYS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFDRSAgICAgIFsgXHRdCi1IQVNIICAg
ICAgICBee0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVow
LTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KLQotREVDSU1BTF9D
T05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgot
SEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCi0KLURJR0lUICAgICAgICAg
ICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KwotRlJB
Q1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKLQot
JSUKLQote0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUo
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9PQko7Ci19Ci17SEFTSH1k
ZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRy
YWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVO
QzsKLX0KLXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJuIEhBU0hfVU5ERUY7IH0KLQote0hB
U0h9aWYgeyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZkZWYgeyByZXR1cm4gSEFTSF9JRkRF
RjsgfQote0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci17SEFTSH1lbHNlIHsg
cmV0dXJuIEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJldHVybiBIQVNIX0VMSUY7IH0KLXtI
QVNIfWVuZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJkZWZpbmVkIiB7IHJldHVybiBERUZJ
TkVEOyB9Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLXtIQVNIfXByYWdt
YSB7IHJldHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0ZW5zaW9uIHsgcmV0dXJuIEhBU0hf
RVhURU5TSU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQote0hB
U0h9bGluZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lERU5USUZJRVJ9IHsKLSAgICB5eWx2
YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJ
REVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVY
QURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmco
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0KLSh7RElHSVR9
K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8p
IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BVTkNUVUFUT1J9IHsgcmV0dXJuIHl5
dGV4dFswXTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3JlIHdoaXRlc3BhY2UgKi8gfQotCi1c
biB7Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07
Ci19Ci0KLTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotCi0lJQotCi1zdGQ6OnN0
cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAg
Ly8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7
SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0Uu
Ci0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09
IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxl
biAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8
fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0
ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19
Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBp
bnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlu
cHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6
a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAg
ICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVM
b2NhdGlvbih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmls
ZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgeXlzZXRfbGluZW5vKHBwOjpUb2tl
bjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQg
PSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJv
cigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5bGV4X2luaXRfZXh0cmEodGhpcywg
Jm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtTGV4
ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigp
Ci17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxleF9kZXN0cm95KG1MZXhlcik7Ci0g
ICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcC55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE5M2FiLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFS
U0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5j
bHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkK
LSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVuYW1lLXByZWZpeD0icHAi
Ci0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3BwOjpDb250ZXh0KiBjb250ZXh0fQotCi0ldW5p
b24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tl
biogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotCi0lewotZXh0ZXJuIGlu
dCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0
YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBw
OjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFz
b24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29u
dGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0ldG9rZW4gSEFTSCBIQVNIX1VOREVGCi0ldG9r
ZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZOREVGIEhBU0hfRUxTRSBIQVNIX0VMSUYgSEFT
SF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9FUlJPUiBIQVNIX1BSQUdNQSBIQVNIX0VYVEVO
U0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0ldG9rZW4gPHN2YWw+IEhBU0hfREVGSU5FX09C
SiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2YWw+IElOVF9DT05TVEFOVCBGTE9BVF9DT05T
VEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4gb3BlcmF0b3IKLSV0eXBlIDx0dmFsPiBjb25k
aXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRsaXN0PiBwYXJhbWV0ZXJfbGlzdCByZXBsYWNl
bWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9rZW5fbGlzdAotJSUKLQotaW5wdXQKLSAgICA6
IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5lCi07Ci0KLWxpbmUKLSAgICA6IHRleHRfbGlu
ZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRleHRfbGluZQotICAgIDogJ1xuJwotICAgIHwg
dG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4cGFuZCBtYWNyb3Mu
Ci0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+b3V0cHV0KCk7Ci0gICAg
ICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQxLT5iZWdpbigpLCAkMS0+ZW5kKCkpOwotICAg
ICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1jb250cm9sX2xpbmUKLSAgICA6IEhBU0ggJ1xu
JwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAg
IGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmos
ICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwgSEFTSF9ERUZJTkVfRlVOQyAnKCcgcGFyYW1l
dGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRl
ZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAkMSwgJDMsICQ1
KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIGNv
bnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAgIH0KLSAgICB8IEhBU0hfSUYgY29uZGl0aW9u
YWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgJDIg
PyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8IEhBU0hfSUZERUYgSURFTlRJRklFUiAnXG4n
IHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNy
b0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGTkRFRiBJREVOVElGSUVSICdcbicg
ewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNy
b0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0VMSUYgY29uZGl0aW9uYWxfbGlzdCAn
XG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0UgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9F
TkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0KTsKLSAgICB9
Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8IEhBU0hfUFJBR01BICdcbicKLSAgICB8IEhB
U0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hfVkVSU0lPTiAnXG4nCi0gICAgfCBIQVNIX0xJ
TkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0Ci0gICAgOiAvKiBlbXB0eSAqLyB7ICQkID0g
TlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1wYXJhbWV0ZXJfbGlzdAotICAgIDogLyogZW1w
dHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihA
MS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkpOwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9s
aXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hf
YmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQzKSk7Ci0gICAg
fQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBjb25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAg
ICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0g
ICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBjb25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsKLQotdG9rZW5f
bGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0g
ICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IHRva2VuX2xpc3QgdG9rZW4g
ewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07
Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBERUZJTkVEIElERU5USUZJRVIgewotICAgIH0K
LSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIgJyknIHsKLSAgICB9Ci0gICAgfCB0b2tlbgot
OwotCi10b2tlbgotICAgIDogb3BlcmF0b3IgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4o
QDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAgIH0KLSAgICB8IElOVF9DT05TVEFOVCB7Ci0g
ICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICQx
KTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpU
b2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgJDEpOwotICAgIH0KLSAgICB8IElE
RU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURF
TlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3BlcmF0b3IKLSAgICA6ICdbJyB7ICQkID0gJ1sn
OyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQotICAgIHwgJzwnIHsgJCQgPSAnPCc7IH0KLSAg
ICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAnKCcgeyAkJCA9ICcoJzsgfQotICAgIHwgJykn
IHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQkID0gJ3snOyB9Ci0gICAgfCAnfScgeyAkJCA9
ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7IH0KLSAgICB8ICcrJyB7ICQkID0gJysnOyB9
Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAgIHwgJy8nIHsgJCQgPSAnLyc7IH0KLSAgICB8
ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScgeyAkJCA9ICclJzsgfQotICAgIHwgJ14nIHsg
JCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0gJ3wnOyB9Ci0gICAgfCAnJicgeyAkJCA9ICcm
JzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0KLSAgICB8ICc9JyB7ICQkID0gJz0nOyB9Ci0g
ICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwgJzonIHsgJCQgPSAnOic7IH0KLSAgICB8ICc7
JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAkJCA9ICcsJzsgfQotICAgIHwgJz8nIHsgJCQg
PSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLCBwcDo6Q29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQotCi12b2lkIHB1c2hDb25k
aXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbikKLXsKLX0K
LQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KQotewotfQot
Ci1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17Ci0gICAgeXlkZWJ1ZyA9
IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUgOiBmYWxzZTsKLX0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3ZTdjYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjI2OCArMCwwIEBACi0jbGluZSAxNiAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0KLQotI2xpbmUg
MTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCIKLQotI2RlZmluZSAgWVlf
SU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBi
eSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFKT1Jf
VkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZM
RVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAK
LSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxh
dGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdp
biBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBl
bmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0
aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5
IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5v
dC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9O
X18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0ICht
YXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlU
X01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50
OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Owot
dHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNo
YXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAK
LXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2ln
bmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBv
ZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4g
ICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUg
SU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJf
TUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5k
aWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3
KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAg
ICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFY
ICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNk
ZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5U
MTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgot
I2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5
NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19j
cGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxp
ZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAq
LwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwotI2lm
IGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZW5kaWYgIC8q
IGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVzICovCi0KLSNp
ZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAotI2Vsc2UKLSNkZWZpbmUg
eXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCi0jZGVm
aW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJs
eSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFy
cmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAotICogd2Ugd2FudCB0
byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQot
ICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBp
bnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KLSNpZm5k
ZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVS
X1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyogRm9yIGNvbnZlbmllbmNl
LCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKLSAgIGFyZSBtYWNy
b3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9y
Ci0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRy
YV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5lIHl5dGV4dCB5eWctPnl5
dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Jz
X2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCi0K
LS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8g
dGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkg
d2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBvZiBCRUdJTi4K
LSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgotCi0vKiBUcmFuc2xh
dGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVy
IGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRF
IGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgWVlfU1RB
UlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCi0K
LS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICov
Ci0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSAr
IDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcg
ZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIg
KQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8qIFNpemUgb2YgZGVmYXVs
dCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0jZGVmaW5lIFlZX0JVRl9T
SVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3Vn
aCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KLSAq
LwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVv
Zih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQot
I2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRlZiBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0IHRo
ZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcwotICAg
ICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxl
c3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4aXN0aW5nIHNj
YW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgcHBsZXguIAotICAgICAqICAg
ICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRy
aWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBh
IG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAqICAgICAgIG5v
cm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qgd29y
dGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAotICAgICAg
ICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0gICAgICAgICAgICAgICAg
Zm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAgIC0t
eXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBSZXR1cm4gYWxsIGJ1
dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJl
YW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAg
ICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGlu
dCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVz
c19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAg
ICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAg
ICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0g
ICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCgg
YywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlf
c2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotI2Rl
ZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0g
ICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAg
ICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBj
dXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1
dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hh
cmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBO
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVP
QgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgaW50IHl5X25fY2hhcnM7Ci0KLSAg
ICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0
ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3Vs
ZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lz
X291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBp
bnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3Ig
aW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5zdGVhZCBvZiBmcmVh
ZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotICAgICAqIGVh
Y2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLSAgICAv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBt
YXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7
Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwotICAgIGlu
dCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLSAgICAvKiBX
aGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUK
LSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0g
ICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVm
aW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1
dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJr
IHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAg
KiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAg
V2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0
aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0g
ICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMg
dG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4g
Y29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcg
aW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQot
ICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KLQotLyogV2Ug
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
ICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxp
bnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVf
dCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKLQot
I2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAg
ICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19p
bnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAgfQotCi0jZGVmaW5lIHl5X3NldF9i
b2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAot
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZl
cih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9Ci0KLSNkZWZpbmUg
WVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBC
ZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJ
UF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50
IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBj
dXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25l
eHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vy
cm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25l
IGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRo
ZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmlu
ZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAot
ICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAyMwotI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIs
Ci0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFuc19p
bmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxleF9pbnQzMl90
IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsx
MDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNCwgICAyMywgICAyMSwgICAy
MiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAxNywgICAxNywgICAyMSwgICAgMSwg
ICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAxOCwgICAx
NywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwgICAxOCwgICAxNywgICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwg
ICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAxNiwgICAg
MCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAgICAgICAxMiwgICAgMCwgICAgNiwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwKLSAgICAgICAgNywgICAx
MywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAgMCwgICAgMCwgICAgMiwKLQotICAg
ICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgNCwgICAg
NCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNSwgICAgNSwg
ICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwgICAgNSwgICAgOCwgICAgOSwgICAg
NSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwg
ICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAxMywKLSAgICAgICAxNSwgICAxNSwg
ICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwKLSAgICAgICAx
NSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNiwgICAxNSwgICAxNSwK
LSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwgICAgMSwgICAxNywgICAxMywgICAx
MywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDE1LCAgIDIyLCAgIDE1LCAgIDE1
LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3LCAgIDE1LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAgIDE1LCAgIDE1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21l
dGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAgMywgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAgICAgNCwgICAgNCwgICAgNSwgICAg
NiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNSwKLSAgICAgICAgNywgICAgNywg
ICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKLSAgICAgICAg
NywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAxOCwgIDE4NCwgIDE4NSwgICAx
MSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAgICAgICAgMCwgIDE2NCwgICAzOSwg
ICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwgICA0NCwKLSAgICAgICAgMCwgICAg
MCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2MiwgICA0NiwgIDE2MCwKLSAgICAg
IDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0NywgICA2NSwgICAgMCwgIDE1MywgIDE1
NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2NywgIDE0NSwgIDE1MiwgIDE1MCwg
IDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0MywgIDE0NCwgIDE0NCwgIDE0MCwgIDEz
NSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEzNSwgIDEzNiwgIDEyNSwgIDEzNCwg
IDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAgIDEyNCwgIDEyOCwgIDEyOCwgIDE4
NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4NSwKLSAgICAgIDE4NSwgIDExMiwg
IDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwgIDEwNywgICA4NiwKLSAgICAgIDE4
NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4NSwgICA5NywgICAxMCwgIDE4NSwK
LQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEwLCAgMTE0LCAgMTE4LCAgMTIxLCAg
MTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZb
MTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDYsICAxMDYsICAxMDQsICAxMDQs
ICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQsCi0gICAgICAxMDgsICAgMTAsICAx
MDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDgsICAxMDYsICAxMDQsCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAxMTAsICAxMDQsICAxMDQsCi0KLSAg
ICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzIxOV0g
PQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA1LCAgICA3LCAgICA0LCAg
ICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAgIDEwLCAgIDE1LCAgIDE1LCAgIDE1
LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAgICAgICA2LCAgICA1LCAgICA3LCAg
IDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDEwLAotICAgICAgIDE2LCAgIDE2
LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE5LAotICAgICAg
IDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAgIDIwLCAgIDM1LCAgIDE5LCAgIDE5
LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAg
IDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAgIDIw
LCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIwLCAgIDI3LCAgIDQzLCAgIDM3LCAg
IDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDk1LCAgIDU0
LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5LAotICAgICAgIDU1LCAgIDYwLCAg
IDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAgMTAwLCAgMTAwLAotCi0gICAgICAg
OTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAgOTMsICAgOTYsICAgOTUsICAxMDEs
Ci0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMjMsICAg
MjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAgMTYsICAgMzgsICAgMzgsICAgMzgs
ICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgsICAgOTgsICAxMDIsICAxMDIsICAx
MDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAgOTAsICAgODksICAgODgsICAgODcs
ICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEsCi0gICAgICAgODAsICAgNzksICAg
NzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAgNzEsCi0gICAgICAgNzAs
ICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEsCi0g
ICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAgNDYs
ICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQsICAgIDMsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAgIDE4LCAgICAxLCAgICAyLCAgICAy
LAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAg
ICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAgIDE4LCAgIDk5LCAgICAyLCAgICA5
LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5LCAgIDEzLCAgICA5LCAgIDEzLCAg
IDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAgIDE2LCAgIDIwLCAgIDE3LCAgIDIw
LCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2LAotICAgICAgICA5LCAgIDEwLCAg
IDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAgIDI5LCAgIDI1LAotICAgICAgIDI5
LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM1LCAgIDI5LCAgIDM1LAot
ICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDE0
LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0LCAgIDUxLCAgIDUxLCAgIDUxLCAg
IDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQsICAgMTQsICAgOTgsICAxMDIsICAx
MDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAxMDUsICAxMDUsICAxMDUsICAxMDUs
ICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYsCi0gICAgICAxMDYsICAxMDcsICAg
ODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAgODYsICAgODUsCi0gICAgICAxMDks
ICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAgODQsCi0g
ICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzMsICAgNzIsICAgNzEs
ICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEsICAg
NjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAgNTUsICAgNTQsICAgNTMsICAgNTIs
ICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQsICAgNDMsICAgNDIsICAgNDAsICAg
MzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0gICAgICAgMjgsICAgMjQsICAgMTIs
ICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1h
dGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRj
aF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDAsICAgICB9OwotCi0vKiBU
aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAotICog
YW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVmaW5lIFJFSkVD
VCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxl
IGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3Iu
Ci1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFt
bWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFz
cHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVk
ZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZX1VTRVJfQUNU
SU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsaW5l
bm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXljb2x1bW4gKyAx
OyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
Ci0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAgCi1z
dGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQg
bGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpD
b250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nh
bm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQotICAgIC8qIFVzZXItZGVmaW5lZC4g
Tm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKLQot
ICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0
aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7
Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0
YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9m
IHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBT
dGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hvbGRfY2hhcjsKLSAgICBpbnQgeXlf
bl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBp
bnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFy
dF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5
cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0K
LSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9t
b3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxs
b2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5
eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0
IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAq
IGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZh
bCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9j
X3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCBwcGxl
eF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5l
cik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRl
IHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0K
LWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2Rl
YnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVn
X2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJh
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQ
RSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9pbiAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAq
cHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9saW5lbm8gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3Mg
YWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9u
cyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRl
ZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3Ry
bmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNl
bmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4g
KHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYg
WVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVzaF9z
dGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAgIHN0
YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIEFt
b3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYgWVlf
UkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgotCi0v
KiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0
cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0
IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2UgZndy
aXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBu
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQgaW4g
InJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVmLHJl
c3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBcCi0g
ICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAot
ICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsg
KytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBj
ID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0gICAgICAg
IGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZWV9GQVRB
TF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAgICAgcmVz
dWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhf
c2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBcCi0gICAg
ICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwKLSAgICAg
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQi
ICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0gXAotICAg
ICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwKLSAgICAg
ICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xvbiBh
ZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAt
Ci0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVz
ZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVu
cmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZpbmUg
eXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBlbnRy
aWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYgWVlf
U1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5kaWYK
LQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCi0j
ZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5l
cikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQg
cHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2Fu
bmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMu
Ci0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1leHRl
cm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZ
TFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgWVlf
REVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0s
IFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYgLyog
IVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2gg
cnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0gKi8K
LSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRpZgot
Ci0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRlZiBZ
WV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JV
TEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAgICAgICAgICAgKHl5dGV4dFt5eWxl
bmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNUSU9OCi0KLS8qKiBUaGUgbWFpbiBz
Y2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1ZWV9ERUNMCi17
Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2FjdDsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci0K
LSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfaW5p
dCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAgICAgWVlfVVNFUl9JTklUOwotI2Vu
ZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAgICAgICAgICAgeXlnLT55
eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0gICAgICAgIGlmICggISB5
eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQotICAgICAgICBpZiAoICEgeXlvdXQg
KQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAgICAgICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAg
ICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAg
ICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLSAgICAgICAgKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlv
biBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAqIHRoZSBjdXJyZW50IHJ1
bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7Ci0KLSAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0g
WVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
OwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
ID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDEwNCApOwotICAgICAgICB5
eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9uOgot
ICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLSAgICAgICAg
WVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0Zf
QlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5
eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicg
KQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAg
eXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAgICAgICAgIH0KLQotZG9fYWN0aW9u
OiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwot
Ci0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9u
IHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAg
ICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAg
ICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9m
aW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLwotKnl5X2Nw
ID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047
IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFT
SF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDM6Ci0qeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4
dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9G
VU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElGOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJTkVEOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VSUk9SOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1BSQUdNQTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FWFRF
TlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE2OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxODoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3Ry
aW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiB5eXRleHRbMF07IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsgLyogSWdub3JlIHdoaXRl
c3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgotLyogcnVsZSAyMiBjYW4gbWF0Y2gg
ZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwot
ICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVfRU9G
KElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjM6Ci1Z
WV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0KLSAgICBjYXNlIFlZX0VORF9PRl9C
VUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3Qg
aW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgICAg
ICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0gICAgICAg
ICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JFX1lZX01PUkVf
T0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAv
KiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAgICAg
ICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCi0g
ICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxl
ZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJl
Ci0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFu
ZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0
byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9u
IChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQgd2ls
bCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmls
ZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgIC8q
IE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRp
b24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9j
X2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFz
dCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRy
YW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSku
ICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5wdXQoKS4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIHsg
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgeXlfc3RhdGVfdHlwZSB5
eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4
dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAg
ICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAg
ICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICog
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAg
KiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAg
ICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAg
ICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0g
ICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KLQot
ICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRf
c3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25leHRfc3RhdGUgKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBOVUwuICovCi0g
ICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3Rv
IHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlIHN3aXRjaCAo
IHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUg
c2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAK
LSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwK
LSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRv
Ci0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJu
IHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0g
YW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVk
LgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
ICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAg
ICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAg
ICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7
Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAg
ICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwotICAg
ICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2YgYWN0aW9u
IHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KLX0g
LyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFk
IGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBh
Y3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0JfQUNUX0NPTlRJTlVFX1ND
QU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqICBFT0JfQUNU
X0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVzdCA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNoYXIg
KnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3RvX21v
dmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBE
b24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAg
ICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9
PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUg
Y2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZp
bmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5E
X09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmly
c3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1vdmUg
bGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUgPSAo
aW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBmb3Ig
KCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykgPSAq
KHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0IGRv
IHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAgICAg
ICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3RvX3JlYWQgPQotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAgICAgICAgeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLSAgICAgICAg
ICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAg
ICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotICAgICAg
ICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoaW50KSAoeXln
LT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAgICAgICAgICAgaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG5l
d19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdf
c2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlf
YnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Yi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IChj
aGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0Ig
Y2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9j
aF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLyogQ2FuJ3QgZ3JvdyBpdCwgd2Ug
ZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IDA7Ci0KLSAg
ICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVm
ZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlf
Y2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgIGlm
ICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAvKiBSZWFkIGluIG1vcmUgZGF0YS4g
Ki8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycywgKHNpemVf
dCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIGlmICggeXlnLT55
eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAgIGlmICggbnVtYmVyX3RvX21vdmUg
PT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVP
Ql9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5l
cik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgWVlf
QlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBlbHNl
Ci0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLSAgICBpZiAoKHl5
X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBhcnJh
eSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLSAgICAgICAgeXlf
c2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXln
LT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0gICAgICAgIGlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIg
KTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7Ci0gICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAg
IHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlsw
XTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
LSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLwot
Ci0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0gWVlfQVRfQk9MKCk7Ci0K
LSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8
IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAgcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7
Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAg
ICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLQotICAgIHJldHVybiB5
eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2Ug
YSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAqICBu
ZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwotICovCi0gICAg
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQg
eXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRp
b25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0g
ICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19z
dGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICB7Ci0g
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLSAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSAxMDQpOwot
Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZu
ZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5w
dXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAgaW50IGM7Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlf
Y19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0g
ICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhl
biBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAg
ICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIGludCBvZmZzZXQgPSB5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19i
dWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5u
ZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVs
YXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZv
cmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4K
LSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENI
Ci0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAg
ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBz
dGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAgICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZ
X05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICAg
ICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOyAvKiBj
YXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgICAg
LyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5
X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IChj
ID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wg
KQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1bW49MDsK
LSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwotfQotI2VuZGlmICAvKiBpZm5kZWYg
WVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBp
bnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQG5vdGUgVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgot
ICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKLSAgICAgICAg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVy
LgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfc3dpdGNoX3Rv
X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMg
ZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICogICAgICBwcHBvcF9idWZm
ZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgIGlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNo
IG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cg
d2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GIChwcHdyYXAoKSkg
cHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0gICAgICogdG8g
Z28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9
IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
LSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAg
IHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKLX0KLQotLyoqIEFsbG9jYXRl
IGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAqIEBwYXJhbSBmaWxlIEEg
cmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6
ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIg
IChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZ
X0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZTsKLQot
ICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBz
aXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFs
bG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGItPnl5X2No
X2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOwot
Ci0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwotCi0gICAgcmV0dXJuIGI7
Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVh
dGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NU
QVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1
cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAgaWYgKCBiLT55eV9pc19vdXJfYnVm
ZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7
Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8qIEluaXRpYWxp
emVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0
aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICogc3VjaCBh
cyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0aWMgdm9pZCBw
cF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgcHBfZmx1
c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55eV9pbnB1dF9maWxlID0gZmlsZTsK
LSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50
IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNhbGxl
ZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAgICAq
IEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVt
bi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIGIt
Pnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAgfQot
Ci0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBu
ZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1ZmZl
ciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2Zs
dXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGItPnl5X25fY2hhcnMgPSAw
OwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZm
ZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFtIGluIHRoYXQgc3RhdGUu
Ci0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwot
ICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGItPnl5
X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAgYi0+eXlfYXRfYm9sID0gMTsKLSAg
ICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIGlmICggYiA9PSBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBu
ZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdp
bGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09
IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNj
YW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAg
ICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAg
ICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVw
bGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdf
YnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAg
ICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0
b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21l
cyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotICAgIGlmIChZWV9D
VVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAgIH0K
LX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAqICBH
dWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3RhdGljIHZvaWQg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgaW50IG51
bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci0KLSAgICAg
ICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBk
b24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0
YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAgICAgICAgICogaW1tZWRp
YXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAgICAgICovCi0gICAgICAgIG51bV90
b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu
dW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3Rh
Y2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1f
dG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAgICAgICAgLyogSW5jcmVhc2UgdGhl
IGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0gICAgICAgIGludCBn
cm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLSAgICAgICAgbnVtX3Rv
X2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotICAgICAgICB5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9j
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWctPnl5X2J1ZmZlcl9zdGFjaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAg
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90
cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZl
cl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0g
ICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVj
dGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICogQHBhcmFtIGJh
c2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVz
IG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2Jq
ZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2Us
IHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJf
U1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBiYXNlW3NpemUt
Ml0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3NpemUtMV0gIT0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUg
cm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsKLQotICAgIGIgPSAoWVlf
QlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5
eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0g
ICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFy
cyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICBi
LT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIHBwX3N3aXRjaF90b19idWZmZXIo
YiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgp
IHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFtIHl5c3Ry
IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBz
dGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5
IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBp
bnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hh
ciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotICAgIHJldHVybiBwcF9z
Y2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0KLS8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4
dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRl
cy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxl
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRl
cy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0
aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50ICBfeXlieXRl
c19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0g
ICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIGludCBpOwotICAgIAotICAgIC8q
IEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5n
IEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFyICop
IHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsK
LQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZb
aV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNf
bGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYiA9IHBwX3NjYW5fYnVmZmVy
KGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIC8qIEl0J3Mgb2th
eSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLSAgICAg
KiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJfYnVmZmVy
ID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVzaF9zdGF0
ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggeXln
LT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCApCi0gICAg
ICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwotCi0gICAgICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5DUjsKLSAgICAgICAgbmV3X3NpemUg
PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9mKCBpbnQgKTsKLQotICAgICAgICBp
ZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcHJlYWxsb2Mo
KHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAg
ICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFydC1jb25kaXRpb24gc3RhY2siICk7
Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFj
a19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5ld19zdGF0ZSk7Ci19Ci0KLSAgICBz
dGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlm
ICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQotICAgICAgICBZWV9GQVRBTF9FUlJP
UiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ciICk7Ci0KLSAgICBCRUdJTih5eWct
Pnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyXSk7Ci19Ci0KLSAgICBzdGF0
aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJu
IHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHIgLSAxXTsKLX0KLQot
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNlbmRp
ZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xu
IiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5l
IHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXls
ZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAg
LyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5
eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19t
YWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsg
XAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBc
Ci0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotICAgICAg
ICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBt
ZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBH
ZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRy
YSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8q
KiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRo
ZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1
dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
RklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWlu
OwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2Yg
dGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICpwcGdldF90ZXh0ICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiogU2V0
IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhl
IHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVk
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsK
LX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5lX251
bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQg
cHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhp
c3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5
X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNj
YW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiogU2V0
IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfY29sdW1uIChpbnQg
IGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29sdW1u
IGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYg
KCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0
X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAg
eXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhp
cyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBAcGFy
YW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCBwcHNl
dF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5aW4g
PSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgcHBnZXRf
ZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2RlYnVn
OwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29yIG1l
dGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lkIHBw
c2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnBwZ2V0X2xsb2Mg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAgCi12
b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2VyLXZp
c2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0
ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1
bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50
LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGlu
c3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdCh5eXNjYW5f
dCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg
ICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5
eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
LyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMu
IExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2Jh
bHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5pdF9n
bG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4X2luaXRfZXh0cmEgaGFz
IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCi0g
KiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4g
Tm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwg
YXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSByZWFz
b24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xh
cmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50
IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxkLgot
ICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgZHVt
bXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5
Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5v
ID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgKnB0cl95eV9n
bG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwg
JmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
Ci0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2lu
aXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpw
dHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICBw
cHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAg
IHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGlj
IGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5p
dGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIu
Ci0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNv
IGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0g
ICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0g
MDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFp
bi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9
IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklM
RSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5v
IG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogcHBsZXhfaW5pdCgpCi0g
ICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGgg
cmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHBwbGV4X2Rlc3Ry
b3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3Rh
Y2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxlKFlZX0NVUlJFTlRfQlVG
RkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAgICAg
IHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIC8qIERlc3Ryb3kg
dGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5
c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogRGVz
dHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXlnLT55
eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sg
PSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGlu
IGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxleCgp
IGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0X2ds
b2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVl
bnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwot
ICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5h
bCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkg
PSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgotCi0j
aWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3Qg
Y2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IG47Ci0g
ICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKLQotICAgIHJldHVybiBuOwot
fQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZv
aWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5n
IGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIq
IGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQgdXNlIHZvaWQqIGdlbmVy
aWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAgICAgKiBiZWNhdXNlIGJv
dGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0gICAgICog
YW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJz
aW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotICAgICAqLwotICAg
IHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9p
ZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgZnJlZSgg
KGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICov
Ci19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLXN0ZDo6c3RyaW5nKiBl
eHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBUaGUg
aW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElG
SUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAgICBB
U1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsKLQot
ICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0gMTsg
aSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChzdHJb
aV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpzdHJp
bmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotbmFt
ZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhT
aXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQtPmVv
ZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JO
b25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAgICBp
bnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0aW9u
KHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0gbUlu
cHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9saW5lbm8ocHA6OlRva2VuOjplbmNv
ZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0
LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBw
cDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1M
ZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0X2V4dHJhKHRoaXMsJm1MZXhlcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1MZXhlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4ZXIg
PSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YjZhYTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNzIgKzAsMCBAQAotLyogQSBCaXNv
biBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGltcGxl
bWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJp
Z2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5
b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxs
IG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0g
ICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3Qg
aXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9k
aWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0
aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxl
dG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVj
aWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1
bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlv
bi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBD
IExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkK
LSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIu
ICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5
IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlz
IHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJsZXMsIGFzIHRoZXkgbWln
aHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAgVGhlcmUgYXJlIHNv
bWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bwotICAgZGVm
aW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMg
T04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJZGVudGlmeSBCaXNvbiBv
dXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24gdmVyc2lvbi4gICovCi0j
ZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRvbiBuYW1lLiAgKi8KLSNk
ZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFyc2Vycy4gICovCi0j
ZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQ
X05FRURFRCAxCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1l
cy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5eWxleCAgIHBwbGV4Ci0j
ZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBwbHZhbAotI2RlZmluZSB5
eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZpbmUgeXluZXJycyBw
cG5lcnJzCi0jZGVmaW5lIHl5bGxvYyBwcGxsb2MKLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYg
WVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAg
ICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgSEFT
SCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwKLSAg
ICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhBU0hf
RUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0gMjY1
LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBIQVNI
X1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hfVkVS
U0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9PQkog
PSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFOVCA9
IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAyNzYK
LSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVmaW5l
IEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZERUYg
MjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0jZGVm
aW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVGSU5F
RCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4Ci0j
ZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0jZGVm
aW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmluZSBI
QVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5lIEZM
T0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0vKiBDb3B5
IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmlu
ZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotCi0KLS8q
IEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcg
MAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwotI2lm
ZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgZGVmaW5lIFlZ
RVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKLSNlbmRp
ZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RB
QkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZ
U1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlT
VFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6
OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0vKiBMaW5lIDE4
NyBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQ
RSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0j
aWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5
cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9j
b2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsK
LSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIg
ZGVjbGFyYXRpb25zLiAgKi8KLQotCi1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZ
WUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQgeXllcnJvcihZWUxUWVBF
KiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQqIGNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hD
b25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1z
dGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLQot
Ci0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNpZmRlZiBzaG9ydAotIyB1bmRlZiBz
aG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlUWVBFX1VJTlQ4
IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4
OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5
cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXR5
cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYgWVlU
WVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlwZWRl
ZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0laRV9U
WVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5lZCBz
aXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpF
X1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgaW5jbHVkZSA8
c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZ
WVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAot
IyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEp
Ci0KLSNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwotIyAgaWYgRU5BQkxFX05MUwotIyAg
IGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
IyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQot
IyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNn
aWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fybmlu
Z3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05V
Q19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKLSNlbHNlCi0jIGRlZmluZSBZWVVT
RShlKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRv
IHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwotI2lmbmRl
ZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UKLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKLSNlbHNlCi1z
dGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2VuZGlmCi17Ci0gIHJldHVybiBpOwot
fQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UK
LQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVj
ZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgaWYg
WVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFf
QVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBpbmNsdWRlIDxt
YWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICBkZWZpbmUg
YWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9j
YQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgIGlmbmRlZiBf
U1RETElCX0gKLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICAgIGVuZGlmCi0jICAgIGVu
ZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlTVEFDS19BTExP
QwotICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRl
ZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgw
KSkKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUgT1MgbWlnaHQg
Z3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ss
Ci0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAg
U28gd2UgY2Fubm90IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVk
cyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0byBhbGxvdyBm
b3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCi0j
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2Eg
MjAwNiAqLwotIyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxM
T0MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlTVEFDS19BTExP
Q19NQVhJTVVNCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1V
TQotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggXAotICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9j
KSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCi0jICAg
aW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
ICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwot
IyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZU0laRV9UKTsg
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgot
IyAgaWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5l
ZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYgLyogISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lmICghIGRlZmlu
ZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotICAgICB8
fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKLSAg
ICAgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklB
TCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sg
bWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZ
U1RZUEUgeXl2czsKLSAgICBZWUxUWVBFIHl5bHM7Ci19OwotCi0vKiBUaGUgc2l6ZSBvZiB0aGUg
bWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwot
IyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEp
Ci0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBz
dGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0jIGRlZmluZSBZWVNUQUNLX0JZ
VEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZ
U1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAotICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFY
SU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3Vy
Y2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNP
UFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9t
LCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMgICBkZWZpbmUgWVlDT1BZ
KFRvLCBGcm9tLCBDb3VudCkgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAg
ICBcCi0gICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKLSAgICAg
ICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBS
ZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUK
LSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBh
bmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2
ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBh
IHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFjay4gICovCi0j
IGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKSAgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpFX1QgeXluZXdieXRlczsgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlz
aXplKTsgICAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2s7ICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpT
dGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXluZXdieXRlcyAv
IHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyog
WVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNk
ZWZpbmUgWVlGSU5BTCAgMgotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICov
Ci0jZGVmaW5lIFlZTEFTVCAgIDI0NwotCi0vKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1p
bmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDcKLS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Yg
bm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAxMgotLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDYyCi0vKiBZWU5SVUxFUyAtLSBO
dW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICA5MQotCi0vKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNzYKLQot
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKHVu
c2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5E
RUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRy
YW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgMjIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQzLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAzNywgICAgNDAsICAgICAyLAotICAgICAgMjMsICAgIDI0LCAgICAzNiwgICAgMzMs
ICAgIDI1LCAgICAzNCwgICAgMzIsICAgIDM1LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQ0LCAgICA0
NSwKLSAgICAgIDI4LCAgICA0MiwgICAgMjksICAgIDQ2LCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAyNiwgICAgIDIsICAgIDI3LCAgICAzOCwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgIDMwLCAgICAzOSwgICAgMzEsICAgIDQxLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQs
Ci0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxCi19OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXgg
b2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KLXsKLSAgICAgICAwLCAg
ICAgMCwgICAgIDMsICAgICA0LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywgICAgMTYsICAg
IDE5LAotICAgICAgMjMsICAgIDMwLCAgICAzNCwgICAgMzgsICAgIDQyLCAgICA0NiwgICAgNTAs
ICAgIDUzLCAgICA1NiwgICAgNTksCi0gICAgICA2MiwgICAgNjUsICAgIDY4LCAgICA3MSwgICAg
NzIsICAgIDc0LCAgICA3NSwgICAgNzcsICAgIDgxLCAgICA4MywKLSAgICAgIDg2LCAgICA4OCwg
ICAgOTEsICAgIDk0LCAgICA5OSwgICAxMDEsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTA5LAot
ICAgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5LCAgIDEyMSwgICAxMjMsICAgMTI1
LCAgIDEyNywgICAxMjksCi0gICAgIDEzMSwgICAxMzMsICAgMTM1LCAgIDEzNywgICAxMzksICAg
MTQxLCAgIDE0MywgICAxNDUsICAgMTQ3LCAgIDE0OSwKLSAgICAgMTUxLCAgIDE1MywgICAxNTUK
LX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJI
Uy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Ci17Ci0gICAgICA0OCwg
ICAgIDAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgNTAsICAgIC0xLCAg
ICA1MSwKLSAgICAgIC0xLCAgICAyMiwgICAgLTEsICAgIDU1LCAgICAyMiwgICAgLTEsICAgICAz
LCAgICAyMiwgICAgLTEsICAgIDE3LAotICAgICAgNTIsICAgIDIyLCAgICAtMSwgICAgMTgsICAg
IDIzLCAgICA1MywgICAgMjQsICAgIDUyLCAgICAyMiwgICAgLTEsCi0gICAgICAgNCwgICAgMjEs
ICAgIDIyLCAgICAtMSwgICAgIDUsICAgIDU0LCAgICAyMiwgICAgLTEsICAgICA2LCAgICAyMSwK
LSAgICAgIDIyLCAgICAtMSwgICAgIDcsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA5LCAgICA1
NCwgICAgMjIsICAgIC0xLAotICAgICAgIDgsICAgIDIyLCAgICAtMSwgICAgMTAsICAgIDIyLCAg
ICAtMSwgICAgMTIsICAgIDIyLCAgICAtMSwgICAgMTMsCi0gICAgICAyMiwgICAgLTEsICAgIDE0
LCAgICAyMiwgICAgLTEsICAgIDE1LCAgICAyMiwgICAgLTEsICAgIDE2LCAgICAyMiwKLSAgICAg
IC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICA1MywgICAg
MjUsICAgIDIxLAotICAgICAgLTEsICAgIDU2LCAgICAtMSwgICAgNTQsICAgIDU2LCAgICAtMSwg
ICAgNTcsICAgIC0xLCAgICA1NSwgICAgNTcsCi0gICAgICAtMSwgICAgMTEsICAgIDIxLCAgICAt
MSwgICAgMTEsICAgIDIzLCAgICAyMSwgICAgMjQsICAgIC0xLCAgICA1NywKLSAgICAgIC0xLCAg
ICA1OCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjAsICAgIC0xLCAgICAyMSwgICAgLTEsICAg
IDI2LAotICAgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEs
ICAgIDIzLCAgICAtMSwgICAgMjQsCi0gICAgICAtMSwgICAgMzAsICAgIC0xLCAgICAzMSwgICAg
LTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwKLSAgICAgIC0xLCAgICAzNSwg
ICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzOCwgICAgLTEsICAgIDM5LAot
ICAgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQz
LCAgICAtMSwgICAgNDQsCi0gICAgICAtMSwgICAgNDUsICAgIC0xLCAgICAyNSwgICAgLTEsICAg
IDQ2LCAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1
bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAgNjMsICAgIDYzLCAgICA2NSwgICAgNjksICAg
IDcwLCAgICA3NCwgICAgNzUsICAgIDg0LCAgICA4NSwKLSAgICAgIDg4LCAgICA5MSwgICAgOTQs
ICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMTAsICAgMTExLAotICAgICAx
MTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTE5LCAgIDEyMiwgICAxMjMsICAgMTI3LCAgIDEz
MywgICAxMzcsCi0gICAgIDE0NCwgICAxNDgsICAgMTU1LCAgIDE1NywgICAxNTksICAgMTYzLCAg
IDE2NiwgICAxNjksICAgMTcyLCAgIDE3OCwKLSAgICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTgy
LCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAotICAgICAxODksICAg
MTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5NywgICAx
OTgsCi0gICAgIDE5OSwgICAyMDAsICAgMjAxCi19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8
IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1d
IC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUg
dGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICov
Ci1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJy
b3IiLCAiJHVuZGVmaW5lZCIsICJIQVNIIiwgIkhBU0hfVU5ERUYiLCAiSEFTSF9JRiIsCi0gICJI
QVNIX0lGREVGIiwgIkhBU0hfSUZOREVGIiwgIkhBU0hfRUxTRSIsICJIQVNIX0VMSUYiLCAiSEFT
SF9FTkRJRiIsCi0gICJERUZJTkVEIiwgIkhBU0hfRVJST1IiLCAiSEFTSF9QUkFHTUEiLCAiSEFT
SF9FWFRFTlNJT04iLCAiSEFTSF9WRVJTSU9OIiwKLSAgIkhBU0hfTElORSIsICJIQVNIX0RFRklO
RV9PQkoiLCAiSEFTSF9ERUZJTkVfRlVOQyIsICJJTlRfQ09OU1RBTlQiLAotICAiRkxPQVRfQ09O
U1RBTlQiLCAiSURFTlRJRklFUiIsICInXFxuJyIsICInKCciLCAiJyknIiwgIicsJyIsICInWyci
LAotICAiJ10nIiwgIic8JyIsICInPiciLCAiJ3snIiwgIid9JyIsICInLiciLCAiJysnIiwgIict
JyIsICInLyciLCAiJyonIiwKLSAgIiclJyIsICInXiciLCAiJ3wnIiwgIicmJyIsICInficiLCAi
Jz0nIiwgIichJyIsICInOiciLCAiJzsnIiwgIic/JyIsCi0gICIkYWNjZXB0IiwgImlucHV0Iiwg
ImxpbmUiLCAidGV4dF9saW5lIiwgImNvbnRyb2xfbGluZSIsCi0gICJyZXBsYWNlbWVudF9saXN0
IiwgInBhcmFtZXRlcl9saXN0IiwgImNvbmRpdGlvbmFsX2xpc3QiLCAidG9rZW5fbGlzdCIsCi0g
ICJjb25kaXRpb25hbF90b2tlbiIsICJ0b2tlbiIsICJvcGVyYXRvciIsIDAKLX07Ci0jZW5kaWYK
LQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRv
a2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAgMCwgICAyNTYs
ICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwK
LSAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3
MiwgICAyNzMsICAgMjc0LAotICAgICAyNzUsICAgMjc2LCAgICAxMCwgICAgNDAsICAgIDQxLCAg
ICA0NCwgICAgOTEsICAgIDkzLCAgICA2MCwgICAgNjIsCi0gICAgIDEyMywgICAxMjUsICAgIDQ2
LCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0MiwgICAgMzcsICAgIDk0LCAgIDEyNCwKLSAgICAg
IDM4LCAgIDEyNiwgICAgNjEsICAgIDMzLCAgICA1OCwgICAgNTksICAgIDYzCi19OwotIyBlbmRp
ZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZ
TiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAg
ICAgICAwLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDUwLCAgICA1MCwg
ICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1
MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAg
ICA1MiwgICAgNTIsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwKLSAgICAgIDU1
LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcs
ICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwg
ICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1
OCwgICAgNTgKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3Np
bmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLAotICAgICAgIDYsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMiwKLSAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEKLX07Ci0KLS8qIFlZREVGQUNUW1NUQVRFLU5B
TUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAgU1RBVEUtTlVN
IHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJv
Ci0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDM2LCAgICAz
NywKLSAgICAgIDM4LCAgICAgNiwgICAgNDMsICAgIDQ0LCAgICA2MSwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgNDIsICAgIDQ1LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCi0gICAgICA1NiwgICAgNTcsICAg
IDU4LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgMCwKLSAg
ICAgIDMwLCAgICAzNSwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI4LCAgICAzNCwg
ICAgIDAsICAgICAwLAotICAgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsCi0gICAgICAyNSwgICAgIDcsICAgIDMxLCAg
ICAxMSwgICAgMzIsICAgICAwLCAgICAxMiwgICAgMjksICAgIDEzLCAgICAxNCwKLSAgICAgIDE1
LCAgICAgOSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzMywgICAgIDAs
ICAgIDI3LAotICAgICAgMTAKLX07Ci0KLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAgIDEs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDY4LCAgICA4MywgICAgNTUsICAgIDY5LCAgICA1NiwK
LSAgICAgIDU3LCAgICA1MQotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4g
WVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFURS1OVU0uICAqLwotI2Rl
ZmluZSBZWVBBQ1RfTklORiAtNTUKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10g
PQotewotICAgICAtNTUsICAgIDczLCAgIC01NSwgICAtMTcsICAgLTE4LCAgIDE0NSwgICAtMTAs
ICAgIC05LCAgIC0xNiwgICAxNDUsCi0gICAgICAtOCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI3LCAgIDIwMSwgICAgMjgsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAot
ICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIDE3MywKLSAgICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgIDMwLCAgIC0xOSwgICAgLTMsICAgLTU1LCAgIC01NSwgICAgMzEsICAgIDMyLAotICAgICAt
NTUsICAgMTA5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAz
MywgICAyMDEsCi0gICAgICAyOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDM1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTE1
LCAgIC0xMSwgICAyMDEsICAgIDM2LCAgIC01NSwgICAgMzcsICAgLTU1LAotICAgICAtNTUKLX07
Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXlwZ290b1tdID0KLXsKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
MjcsICAgLTU1LCAgICA1MSwgICAgNjAsICAgLTU0LAotICAgICAgLTEsICAgLTU1Ci19OwotCi0v
KiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUt
TlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJl
ZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8s
IGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9y
LiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5dGFibGVbXSA9Ci17Ci0gICAgICA1MCwgICAgNzcsICAgIDc0LCAgICA1MywgICAgNzUsICAg
IDUyLCAgICA2MCwgICAgNzcsICAgIDU0LCAgICA4NSwKLSAgICAgIDg2LCAgICA1OCwgICAgNTks
ICAgIDg3LCAgICA2MiwgICAgNTAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDc2LAotICAgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNzIsICAgIDY3LAotICAgICAgODIsICAg
IDcwLCAgICA3MywgICAgNzgsICAgIDc5LCAgICA4MSwgICAgODQsICAgIDg5LCAgICA4OCwgICAg
OTAsCi0gICAgICA2MSwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDcyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAg
MCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDUwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0g
ICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICA1
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4
LCAgICAxOSwKLSAgICAgIDIwLCAgICA4MCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCi0gICAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA1NCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAgMCwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKLSAg
ICAgIDQ0LCAgICA0NSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDE4
LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUKLX07Ci0KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50
OCB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAgIDU1LCAgICAyMSwgICAgMjEsICAgIDIzLCAg
ICAyMiwgICAgMjIsICAgIDYxLCAgICAxMSwgICAgMjQsCi0gICAgICAyNSwgICAgMjEsICAgIDIx
LCAgICAyNCwgICAgMjIsICAgIDE2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLAotICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDQ5LCAgICAyMiwKLSAgICAgIDIxLCAg
ICAyMywgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIxLCAgICAyMSwgICAgODUsICAg
IDIyLAotICAgICAgIDksICAgICAxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA2OSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAg
LTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICA4NSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAot
ICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAg
MTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAx
OSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgLTEsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCi0g
ICAgICA0NSwgICAgNDYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2Ci19OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAt
LSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0
YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0K
LXsKLSAgICAgICAwLCAgICA0OCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAg
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTUsCi0gICAgICA1NywgICAgNTgsICAgIDIyLCAg
ICAyMSwgICAgMTEsICAgIDU0LCAgICA1NiwgICAgNTcsICAgIDIxLCAgICAyMSwKLSAgICAgIDIy
LCAgICA1NCwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNTIs
ICAgIDU1LAotICAgICAgMjMsICAgIDIyLCAgICA1NywgICAgMjIsICAgIDIxLCAgICAyMywgICAg
MjIsICAgIDU2LCAgICAyMiwgICAgMjIsCi0gICAgICAyMiwgICAgMjIsICAgIDIxLCAgICA1Mywg
ICAgMjEsICAgIDI0LCAgICAyNSwgICAgMjQsICAgIDUyLCAgICAyMSwKLSAgICAgIDIyCi19Owot
Ci0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJp
biAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5l
IFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICBnb3RvIHl5YWNjZXB0bGFiCi0j
ZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICBn
b3RvIHl5ZXJyb3JsYWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJv
ci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRoZSB0cmFuc2l0
aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0Mg
dmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLwotCi0j
ZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkco
KSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAg
ICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAo
eXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7ICAgICAgICAg
ICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoMSk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1
cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxlIChZWUlEICgwKSkKLQotCi0j
ZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgMjU2Ci0KLQotLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
Ci0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKLSNpZm5kZWYgWVlM
TE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAg
ICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xp
bmU7ICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAx
KS5maXJzdF9jb2x1bW47ICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNM
T0MgKFJocywgTikubGFzdF9saW5lOyAgICAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1u
ICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAgIFwKLSAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAgICBcCi0gICAg
ICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgXAotICAgICAg
KEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgXAot
ICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkp
Ci0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0KLSNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFMCi0jICBkZWZpbmUgWVlfTE9DQVRJ
T05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4l
ZC0lZC4lZCIsICAgICAgICAgIFwKLSAgICAgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5m
aXJzdF9jb2x1bW4sIFwKLSAgICAgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2Nv
bHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2
b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgn
IHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNpZmRlZiBZWUxFWF9QQVJBTQotIyBk
ZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UK
LSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jKQotI2VuZGlmCi0KLS8qIEVu
YWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCi0KLSMgaWZuZGVm
IFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYg
QXJnczsgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVmaW5lIFlZX1NZ
TUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAgICAgIFwKLWRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRp
dGxlKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIs
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFR5cGUsIFZhbHVlLCBMb2NhdGlv
biwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCog
Y29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAq
eXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICgheXl2YWx1ZXApCi0gICAgcmV0dXJu
OwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0jIGlmZGVmIFlZ
UFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1dCwg
eXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAoeXlvdXRwdXQp
OwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAg
IGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50
IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICog
Y29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2
b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0
aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAg
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29u
c3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAg
aWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4g
JXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQg
KHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsK
LSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXls
b2NhdGlvbnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZy
b20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15
eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoYm90dG9tLCB0b3ApCi0gICAgeXl0
eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp0b3A7Ci0jZW5kaWYKLXsKLSAg
WVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7
ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90
dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
eXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAotfSB3aGls
ZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVk
dWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGlj
IHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNwLCBp
bnQgeXlydWxlLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlf
cmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwgY29udGV4dCkKLSAgICBZWVNUWVBF
ICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBpbnQgeXlydWxlOwotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07
Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVd
OwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUg
JWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xz
IGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKysp
Ci0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0g
ICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWld
LAotICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAg
ICAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29u
dGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLQotIyBkZWZp
bmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
XAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5
dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0vKiBO
b256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVk
IHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwotaW50IHl5ZGVi
dWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCi0jIGRl
ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVm
aW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBUSCAtLSBpbml0
aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmIFlZSU5JVERFUFRI
Ci0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERFUFRIIC0tIG1h
eGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQotICAgaWYg
dGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0KLSAgIERvIG5v
dCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlm
Ci0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQot
ICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4g
ICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAotI2Vu
ZGlmCi0KLQwKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0cmxlbgotIyAg
aWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBkZWZpbmUgeXlz
dHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICov
Ci0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIFlZU0la
RV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGljIFlZU0laRV9U
Ci15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5kaWYKLXsKLSAg
WVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKysp
Ci0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9T
VFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNw
eQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVz
cyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAo
Y2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi15
eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAgY29uc3QgY2hh
ciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0OwotICBjb25zdCBjaGFy
ICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKLSAg
ICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlT
VFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBhbmQgYmFja3Ns
YXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQotICAgaGV1cmlz
dGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJp
bmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3Ro
ZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5
dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVy
biB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBiZWVuLiAgKi8K
LXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlz
dHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAgIFlZU0laRV9UIHl5biA9
IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9yICg7OykKLSAg
ICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2Ug
JywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0KLSAgICAgIGNhc2UgJ1xc
JzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAgICAg
ICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICciJzoKLSAgICAgICAgaWYg
KHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAgICAgICByZXR1cm4geXlu
OwotICAgICAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0KLSAgaWYgKCEg
eXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5
ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkgaW50byBZWVJF
U1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCi0gICBZWUNI
QVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNv
cGllZCwKLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNV
TFQgaXMgbnVsbCwgZG8gbm90Ci0gICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKLSAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNl
LCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgotICAgbWVzc2FnZSB3aWxs
IGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKLSAg
IHNpemUgY2FsY3VsYXRpb24uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXN5bnRheF9lcnJvciAo
Y2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQotewotICBpbnQgeXluID0g
eXlwYWN0W3l5c3RhdGVdOwotCi0gIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0g
WVlMQVNUKSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCB5eXR5cGUg
PSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1l
cnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUw
OwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAw
OwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0gICAg
ICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLSAgICAg
IGludCB5eXg7Ci0KLSMgaWYgMAotICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRo
ZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQotICAgICBjb25zdHJ1Y3RlZCBvbiB0aGUg
Zmx5LiAgKi8KLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7Ci0gICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7Ci0gICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7
Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9y
ICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Ci0jIGVuZGlmCi0gICAgICBjaGFyICp5eWZt
dDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5l
eHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAgICAgIHN0YXRp
YyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZvcm1hdFtzaXpl
b2YgeXl1bmV4cGVjdGVkCi0gICAgICAgICAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLSAg
ICAgICAgICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKLSAgICAgICAg
ICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4
ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZl
IHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgWVlDSEVDSy4gICovCi0gICAgICBp
bnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAgICAgIC8qIFN0YXkgd2l0aGlu
IGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAgaW50IHl5Y2hl
Y2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0g
PCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAgICAgaW50IHl5Y291bnQg
PSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKLSAgICAgIHl5Zm10ID0g
eXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0gICAgICBmb3IgKHl5eCA9IHl5
eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0g
PT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLSAgICAgIHsKLSAgICAgICAgaWYgKHl5Y291bnQg
PT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAgICAgICAgICB7Ci0gICAgICAgIHl5
Y291bnQgPSAxOwotICAgICAgICB5eXNpemUgPSB5eXNpemUwOwotICAgICAgICB5eWZvcm1hdFtz
aXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0gICAgICAgIHl5
c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7Ci0gICAgICAgIHl5
c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICAgIHl5c2l6ZSA9IHl5
c2l6ZTE7Ci0gICAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Ci0gICAg
ICAgIHl5cHJlZml4ID0geXlvcjsKLSAgICAgIH0KLQotICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0
KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKLSAgICAgIHl5c2l6
ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5eXNpemUgPSB5eXNpemUx
OwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotICAgIHJldHVybiBZWVNJWkVfTUFYSU1V
TTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotICAgIHsKLSAgICAgIC8qIEF2b2lkIHNwcmludGYs
IGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLSAgICAgICAgIERv
bid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0gICAg
ICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAq
LwotICAgICAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0gICAgICBpbnQgeXlpID0gMDsKLSAgICAg
IHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAo
Knl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotICAgICAgICB7
Ci0gICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotICAgICAg
ICAgIHl5ZiArPSAyOwotICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmKys7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAgIHJldHVybiB5eXNpemU7Ci0gICAgfQotfQotI2VuZGlmIC8qIFlZRVJST1JfVkVS
Qk9TRSAqLwotDAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K
LS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
LXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwg
WVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29u
dGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2
YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIGNvbnN0IGNoYXIgKnl5bXNnOwotICAg
IGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSAqeXlsb2Nh
dGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5
dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0g
IGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQg
KHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5
cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQwKLQot
LyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlw
YXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAocHA6OkNvbnRl
eHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyog
ISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2Uu
ICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlICh2b2lkICpZWVBBUlNF
X1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKLSAgICB2b2lkICpZ
WVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHBwOjpD
b250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29udGV4dCkKLSAgICBwcDo6
Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFk
IHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhl
IGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Yg
c3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0vKiBMb2NhdGlvbiBkYXRh
IGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2M7Ci0KLSAgaW50
IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5
eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNs
YXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1Jf
VkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRl
ZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNn
YnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgot
Ci0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0g
ICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0
YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRv
IHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4g
ICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAq
eXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNU
WVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0gIC8qIFRoZSBsb2NhdGlv
biBzdGFjay4gICovCi0gIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwotICBZWUxUWVBFICp5
eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotICAvKiBUaGUgbG9jYXRpb25zIHdoZXJl
IHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gIFlZTFRZUEUgeXllcnJvcl9yYW5n
ZVsyXTsKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0g
KE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBU
SDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFu
ZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAqLwotICBZWVNUWVBF
IHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBv
biB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5v
IHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQ
UklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwot
ICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOyAg
ICAgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0
YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRp
b24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhl
IHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFs
aXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0gIHl5bHNwID0g
eXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVs
dCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAqLwotICB5eWxsb2MuZmlyc3RfbGlu
ZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5
bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGlu
IHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdo
ZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZl
IGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3Rh
Y2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7
Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAg
LyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVt
ZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0j
aWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byBy
ZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAgICB0aGVzZSBzbyB0aGF0
IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAgbWVtb3J5LiAg
Ki8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9
IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotCi0gICAgLyogRWFjaCBzdGFjayBw
b2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgZGF0
YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAg
ICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQg
bWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8K
LSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICZ5
eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAgICAgJnl5dnMxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVv
ZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0gICAgeXlscyA9IHl5bHMx
OwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5eXZzID0geXl2czE7Ci0gICAgICB9Ci0jZWxzZSAv
KiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBv
d24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAgICAgaWYgKFlZ
TUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7Ci0K
LSAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1bmlvbiB5eWFs
bG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNU
QUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLSAgICBZWVNUQUNL
X1JFTE9DQVRFICh5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKLSMgIHVuZGVm
IFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICBZWVNUQUNL
X0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYKLSNlbmRpZiAvKiBubyB5eW92ZXJmbG93
ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5
dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKLQotICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAot
ICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKLSAgICB9Ci0K
LSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsK
LQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAt
LS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5n
IGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4g
aWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZp
cnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFo
ZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZ
UEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQg
YSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8q
IFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQg
c3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlM
RVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFy
ID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVu
ZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2Vu
IGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBw
cm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwot
ICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0
b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5
eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlm
ICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVf
TklORikKLSAgICBnb3RvIHl5ZXJybGFiOwotICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8g
eXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsK
LQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1
cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5
eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
LQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwot
ICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0
ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gICorK3l5bHNwID0geXlsbG9jOwotICBn
b3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0
IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5
eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJs
YWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVs
ZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZ
TEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9u
OgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUg
c2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRl
ZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25p
bmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQg
c21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5
IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0K
LSAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5
bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNo
ICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRPRE8o
YWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNv
bnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAoeXl2c3Bb
KDEpIC0gKDIpXS50bGlzdCktPmJlZ2luKCksICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KS0+ZW5k
KCkpOwotICAgICAgICBkZWxldGUgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVN
YWNybygoeXlsc3BbKDEpIC0gKDMpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwg
KHl5dnNwWygxKSAtICgzKV0uc3ZhbCksIE5VTEwsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAgICBjb250
ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDYpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3Jv
OjprVHlwZUZ1bmMsICh5eXZzcFsoMSkgLSAoNildLnN2YWwpLCAoeXl2c3BbKDMpIC0gKDYpXS50
bGlzdCksICh5eXZzcFsoNSkgLSAoNildLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDExOgotCi0gICAgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCh5eXZz
cFsoMikgLSAoMyldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI6Ci0K
LSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICh5eXZzcFsoMikg
LSAoMyldLnRsaXN0KSA/IHRydWUgOiBmYWxzZSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDEzOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBj
b250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlv
bmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAo
MyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE1OgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQotICAgIHsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2so
Y29udGV4dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIzOgotCi0gICAgeyAoeXl2
YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI1OgotCi0gICAgeyAo
eXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI2OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gKHl5dnNwWygxKSAtICgzKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5w
dXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDMpIC0gKDMpXSkuZmlyc3RfbGluZSwgSURF
TlRJRklFUiwgKHl5dnNwWygzKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRv
a2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAt
ICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyOToKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAg
ICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNo
X2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAo
MildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikg
LSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6Ci0KLSAgICB7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgewotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3
IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgKHl5dnNwWygxKSAtICgx
KV0uaXZhbCksIE5VTEwpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNjoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEp
XSkuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
dHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBGTE9B
VF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpU
b2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygx
KSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJ1snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDA6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICddJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQxOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnPCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDM6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICcoJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ0Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDY6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ3
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0
ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NDk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICctJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyonOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICclJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3wnOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcmJzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfic7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz0nOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICchJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDU5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOic7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzsnOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcsJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPyc7IDt9Ci0gICAgYnJl
YWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCi0KLSAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5
dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZ
WV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2YWw7Ci0gICor
K3l5bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVk
dWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBv
biB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciBy
ZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdv
dG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0
YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRl
ID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXlu
IC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5n
IGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJs
YWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXlu
ZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29u
dGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAgewotICAgIFlZU0laRV9U
IHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgIGlmICh5
eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSkKLSAgICAgIHsKLSAgICAgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAg
ICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCi0gICAgICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKLSAg
ICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlt
c2cpOwotICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOwot
ICAgICAgICBpZiAoeXltc2cpCi0gICAgICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOwotICAgICAg
ICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICBpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0gICAgICB7Ci0g
ICAgICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0g
ICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5bXNnKTsKLSAgICAgIH0KLSAgICBl
bHNlCi0gICAgICB7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3lu
dGF4IGVycm9yIikpOwotICAgICAgICBpZiAoeXlzaXplICE9IDApCi0gICAgICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICB5eWVy
cm9yX3JhbmdlWzBdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsK
LSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRv
a2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5
Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQg
b2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9S
VDsKLSAgICB9Ci0gICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBk
aXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgIH0KLSAgICB9Ci0KLSAgLyogRWxz
ZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycm9ybGFi
IC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJyb3JsYWI6Ci0K
LSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIg
aW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUg
bmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAqLwotICBpZiAoLypDT05TVENPTkQq
LyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNw
WzEteXlsZW5dOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3
aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RB
Q0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2gg
cmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9yICg7OykKLSAg
ICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoeXluICE9IFlZUEFD
VF9OSU5GKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJPUjsKLSAgICAgIGlmICgwIDw9IHl5
biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKLSAgICAgICAg
ewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAgICAgICAgICBpZiAoMCA8IHl5bikK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
LSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3Jf
cmFuZ2VbMF0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAot
ICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAg
IFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAg
ICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsKLQotICB5eWVycm9yX3JhbmdlWzFd
ID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFu
Z2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0MgaXMgYXZhaWxh
YmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2Ug
LSAxKSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRv
a2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2
c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAt
LSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVy
bjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxh
YiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJu
OwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rp
b24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5eWVycm9yICgmeXlsbG9jLCBjb250
ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFs
bCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVP
RiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2Nh
cmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNv
bnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGlj
aCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCi0g
IFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92ZXJmbG93Ci0g
IGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0jZW5kaWYKLSNp
ZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLwot
ICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLXZvaWQgeXllcnJvcihZWUxU
WVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsK
LX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9v
bCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4
dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2Uo
KQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0
cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVmODA2Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbnRlcmZh
Y2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMp
IDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot
ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2
ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkg
Y3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhl
IEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVy
IHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYg
YQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2
ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwg
aWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRz
ZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhj
ZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwot
ICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCi0g
ICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIFRva2Vucy4g
ICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0
IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIg
ZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlw
ZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hf
SUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYy
LAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFT
SF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2
NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAot
ICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFT
SF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJ
TlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVO
VElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNI
IDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmlu
ZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9F
TFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0j
ZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hf
UFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJT
SU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAy
NzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3
NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQot
Ci0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xB
UkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6
c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3Iq
IHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0KLSAgICBZWVNUWVBFOwot
IyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3
biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lT
X1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZp
bmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50
IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGlu
dCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBv
YnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVD
TEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3MTY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCkBAIC0wLDAgKzEsMTggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21tb24gcHJlcHJvY2Vzc29yIHV0aWxp
dGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxs
b3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMg
bXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MuCisj
ZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAorICBUeXBlTmFt
ZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwKKyAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTk3NTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cmVwcm9jZXNzb3IudmNwcm9qCkBAIC0wLDAgKzEsMzkzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVj
dFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJwcmVwcm9jZXNzb3Ii
CisJUHJvamVjdEdVSUQ9IntGQkUzMkRGMy0wRkIwLTRGMkYtQTQyNC0yQzIxQkQ3QkMzMjV9Igor
CVJvb3ROYW1lc3BhY2U9InByZXByb2Nlc3NvciIKKwlLZXl3b3JkPSJXaW4zMlByb2oiCisJVGFy
Z2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZv
cm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJ
Lz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1
cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50
ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRp
b25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0
b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0
b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9u
PSIwIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJ
CQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJ
UnVudGltZUxpYnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2Fy
bmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ9IjQiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0
OzQ3MDIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4K
KwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJl
Y3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlh
dGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9
IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEi
CisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rp
b25zPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJ
QiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2lu
Zz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9
IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
MyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FM
aW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RC
dWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRp
b24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRp
cikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZp
Z3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFH
ZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJv
eHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIK
KwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCVByZXByb2Nlc3NvckRl
ZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIK
KwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjEiCisJCQkJ
VXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5B
c0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjc7NDcwMiIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxk
RXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgor
CQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGly
ZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1
cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGlt
aXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJy
YXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJv
cj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJl
bmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3Vy
Y2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2Fz
bTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJB
MzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9z
dGljcy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cRGlyZWN0aXZlSGFuZGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHByZXNzaW9uUGFyc2VyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTGV4ZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1h
Y3JvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxNYWNyb0V4cGFuZGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJ
CUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgorCQkJVW5pcXVlSWRlbnRpZmllcj0i
ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCisJCQk+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhhbmRsZXIuaCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHBy
ZXNzaW9uUGFyc2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cSW5wdXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxMZXhlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXE1hY3JvLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHBwX3V0aWxzLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29yLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU291cmNlTG9jYXRpb24uaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbi5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2Vu
aXplci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xv
YmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxf
dXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFjZTUw
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQot
I2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0K
LW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0
IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9p
ZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19IXwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZ
UEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKaW5kZXgg
ODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKQEAgLTQ3LDUg
KzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7
CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IEluaXRBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNo
YXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRv
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmZkZTg1M2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jCkBAIC02Niw2ICs2Niw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lu
cHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1
dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03
Myw3ICs3NSw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlz
dHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7
IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9p
bnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0
YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApA
QCAtMTI2LDYgKzEyOCwxNiBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZy
ZWVDUFAoKSk7CiB9CiAKK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7
CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7
CisgICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7CisgICAgY3BwLT5QYVN0ckxlbiAgID0gbGVu
Z3RoOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgcmV0dXJuIDA7Cit9CisK
IC8qCiAgKiBzdHJfZ2V0Y2goKQogICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlw
bGUgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKaW5kZXggMjMzZDFkYy4uYjY3YzFkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
SW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3Bw
KTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhj
b25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBz
dHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7
CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBF
T0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tp
bmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8g
dGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0
U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oCmluZGV4IGMxOWY3OWMuLmU3ZDBiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
CkBAIC0xMDUsNyArMTA1LDYgQEAgU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNj
b3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpBZGRTeW1i
b2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtp
bmQpOwogU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7
CiBTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Ci12b2lkIENQ
UEVycm9yVG9JbmZvTG9nKGNoYXIgKik7CiAKIAogI2VuZGlmIC8vICFkZWZpbmVkKF9fU1lNQk9M
U19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5kZXggZDY1OGMxMi4uYjk0YzA1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNp
bmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCkBAIC0yNjUsNiArMjY2LDgg
QEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHAp
CiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tl
biwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hf
dmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0g
MCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRv
aywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICAgICBsZW4gPSAwOworCSAgICBhY2N1bSA9IDA7
CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAn
MCcpIHsKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAg
ICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0g
J3gnIHx8IGNoID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4r
K10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwogICAgICAgICAgICAgICAg
ICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBiYXNlID0gODsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGlz
ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSBjaCAtICcwJzsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNo
X3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hf
dmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAg
ICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKKyAgICAgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bl0gPSAnXDAnOwogICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAg
c3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlICcoJzoKICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7
CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9r
ZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAgICAgICAgY2FzZSBDUFBfVFlQ
RUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNj
X2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RB
TlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRh
YmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6
ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lk
ZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFO
VDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZhbCk7CkBA
IC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3Ry
ZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQotICAgICAgICAgICAg
ICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7Cisg
ICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21T
dHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmluZGV4
IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaApAQCAtNDgsNiArNDgsNyBA
QCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUgX19UT0tFTlNfSCAxCiAKKyNp
bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIu
aCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTM4YjczMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKQEAgLTAs
MCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKK1Jlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYg
c2luaykKKyAgICA6IG1TaW5rKHNpbmspCisgICAgLCBtTnVtRXJyb3JzKDApCit7CisgICAgLy8g
U2FtcGxpbmcgb3BzIGZvdW5kIG9ubHkgaW4gZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMu
aW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0O2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7ZjE7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5k
IGluIGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRChzMjE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
MkRQcm9qKHMyMTt2ZjQ7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUo
c0MxO3ZmMzsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgT0VTX0VHTF9pbWFn
ZV9leHRlcm5hbC4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoMTt2ZjI7Iik7
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmMzsiKTsKKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBs
aW5nIG9wcyBwcm92aWRlZCBieSBBUkJfdGV4dHVyZV9yZWN0YW5nbGUuCisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUmVjdCgxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsiKTsKK30KKworLy8gRklYTUUobXZ1am92aWMpOiBX
ZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9u
cyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBjYW4gdmFyeSBiYXNlZCBvbiB0aGUgdmFsdWUgb2Yg
dGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3VsZCByZXN0cmljdCB0aG9zZSBhcyB3
ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rp
b25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1OdW1FcnJvcnMgPSAw
OworCisgICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVwZW5kZW5jeSBncmFwaCBkb2VzIG5v
dCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxscyByaWdodCBub3csCisgICAgLy8g
c28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgorICAgIHZhbGlkYXRlVXNlckRlZmluZWRG
dW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisKKyAgICAvLyBTdGFydGluZyBmcm9tIGVhY2ggc2Ft
cGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGdlbmVyYXRlIGFuIGVycm9y
IGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBhIG5vZGUgd2hlcmUgc2FtcGxlciBkZXBlbmRlbnQg
dmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBmb3IgKFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAg
IGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAg
ICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5bWJvbCA9ICppdGVyOworICAgICAg
ICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgaXRlciAh
PSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgICsraXRlcikK
KyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gKml0ZXI7
CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24g
aXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpCit7CisgICAg
KyttTnVtRXJyb3JzOworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5r
LmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Cit9CisKK2Jvb2wgUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6aXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWludGVybUZ1bmN0aW9uQ2FsbC0+aXNV
c2VyRGVmaW5lZCgpICYmCisgICAgICAgICAgIG1TYW1wbGluZ09wcy5maW5kKGludGVybUZ1bmN0
aW9uQ2FsbC0+Z2V0TmFtZSgpKSAhPSBtU2FtcGxpbmdPcHMuZW5kKCk7Cit9CisKK3ZvaWQgUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCog
cGFyYW1ldGVyKQoreworICAgIC8vIFRleHR1cmUgY2FjaGUgYWNjZXNzIHRpbWUgbWlnaHQgbGVh
ayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisgICAgLy8gVGh1cywgd2UgcmVzdHJpY3Qgc2FtcGxl
ciBkZXBlbmRlbnQgdmFsdWVzIGZyb20gYWZmZWN0aW5nIHRoZSBjb29yZGluYXRlIG9yIExPRCBi
aWFzIG9mIGEKKyAgICAvLyBzYW1wbGluZyBvcGVyYXRpb24uCisgICAgaWYgKGlzU2FtcGxpbmdP
cChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKSkgeworICAgICAgICBzd2l0Y2gg
KHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSkgeworICAgICAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgICAgIC8vIFNlY29uZCBhcmd1bWVudCAoY29vcmQpCisgICAgICAgICAgICAg
ICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAg
ICAgICAgICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVy
IGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIg
Y29vcmRpbmF0ZSBhcmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLy8g
VGhpcmQgYXJndW1lbnQgKGJpYXMpCisgICAgICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgICAgICAgICBtU2luayA8PCAi
QW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8g
YmUgdGhlIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgYmlhcyBhcmd1bWVudCBvZiBhIHNh
bXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IChzYW1wbGVyKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiog
c2VsZWN0aW9uKQoreworICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rp
b24oKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxl
ciBpcyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7CisgICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIGluIGEgbG9vcCBjb25kaXRpb24uXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQor
eworICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7CisgICAg
bVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVy
bWl0dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgorICAgICAgICAgIDw8
IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkxNjVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8K
KyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdf
SF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAg
ICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspOworICAg
IHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7
CisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
bik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOwor
Citwcml2YXRlOgorICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSk7
CisgICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGJvb2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7CisKKyAgICBUSW5mb1NpbmtC
YXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8
VFN0cmluZz4gU3RyaW5nU2V0OworICAgIFN0cmluZ1NldCBtU2FtcGxpbmdPcHM7Cit9OworCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5H
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGM2Y2YKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgor
Cit2b2lkIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBub2RlKQoreworICAgIGlmIChJc1NhbXBsZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKSB7
CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJv
cik7CisgICAgICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG1T
aW5rIDw8ICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiI7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YTA1ZmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hf
CisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19I
XworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFz
cyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmspCisgICAgICAgICwgbU51
bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2Rl
KiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50IG51bUVycm9ycygpIHsg
cmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGlu
dCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1Rf
VkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0Rpc3BsYXkuY3BwCmluZGV4IDZhNWNmZDMuLjBjYzBiOTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcApAQCAtOTkyLDYgKzk5Miwy
MiBAQCBib29sIERpc3BsYXk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCiAgICAgcmV0dXJuIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhU
NSkpOwogfQogCisvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5
CisvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBj
YW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKKy8vIHNlZSBodHRwOi8vYXJhcy1wLmluZm8vdGV4dHMv
RDNEOUdQVUhhY2tzLmh0bWwKK2Jvb2wgRGlzcGxheTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OworCisgICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9ERVBU
SFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSk7CisgICAgYm9vbCBudWxs
ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBF
X1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAgICByZXR1cm4gaW50eiAmJiBudWxsOworfQor
CiBib29sIERpc3BsYXk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcs
IGJvb2wgKnJlbmRlcmFibGUpCiB7CiAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlN
b2RlOwpAQCAtMTA4MSw3ICsxMDk3LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRCdWZmZXJQb29s
KERXT1JEIHVzYWdlKSBjb25zdAogICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7CiB9CiAKLUQz
RFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdAorRDNE
UE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKIHsKICAgICBp
ZiAobUQzZDlFeCAhPSBOVUxMKQogICAgIHsKQEAgLTEwODksNyArMTEwNSw3IEBAIEQzRFBPT0wg
RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdAogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIXJlbmRlcmFibGUpCisgICAgICAgIGlmICghKHVz
YWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJTCB8IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmluZGV4IDUw
Mjg0MzEuLjRmN2RiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5oCkBAIC03OCwxMCArNzgsMTEgQEAgY2xhc3MgRGlzcGxheQogICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CiAgICAgdmlydHVhbCBib29s
IGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVl
cnlTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFi
bGUpIGNvbnN0OworICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwogICAgIGJv
b2wgaXNEZXZpY2VMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcAppbmRleCAwN2FkM2NmLi4wMzhiMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKQEAgLTEsNjM3ICsxLDY4MiBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6
U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCi0vLyBzdWNoIGFz
IHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMu
Ci0vLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VH
TCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgPHRjaGFyLmg+Ci0KLSNpbmNs
dWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0j
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgPGR3bWFwaS5oPgotCi1uYW1l
c3BhY2UgZWdsCi17Ci0KLW5hbWVzcGFjZQotewotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKLWNvbnN0IGludCB2ZXJzaW9uV2luZG93czcgPSBN
QUtFV09SRCgweDAxLCAweDA2KTsKLQotLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVy
YXRpbmcgc3lzdGVtIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBvcmRlcmluZwotLy8gY29tcGFy
aXNvbi4KLWludCBnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkKLXsKLSAgICBEV09SRCB2ZXJzaW9u
ID0gR2V0VmVyc2lvbigpOwotICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZl
cnNpb24pKTsKLSAgICBpbnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7
Ci0gICAgcmV0dXJuIE1BS0VXT1JEKG1pbm9yVmVyc2lvbiwgbWFqb3JWZXJzaW9uKTsKLX0KLX0K
LQotU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZp
ZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAKLSAgICA6IG1E
aXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLXsKLSAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0
ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVRleHR1cmVGb3JtYXQgPSBFR0xf
Tk9fVEVYVFVSRTsKLSAgICBtVGV4dHVyZVRhcmdldCA9IEVHTF9OT19URVhUVVJFOwotCi0gICAg
bVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsg
ICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAgICBtUmVu
ZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVG
RkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgc2V0U3dhcEludGVy
dmFsKDEpOwotCi0gICAgc3ViY2xhc3NXaW5kb3coKTsKLX0KLQotU3VyZmFjZTo6U3VyZmFjZShE
aXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxl
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGVudW0gdGV4dHVyZUZvcm1hdCwgRUdM
ZW51bSB0ZXh0dXJlVHlwZSkKLSAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwp
LCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0
aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQot
ewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAg
ICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBt
VGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7Ci0gICAgbVRleHR1cmVUYXJnZXQgPSB0ZXh0
dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJ
U1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0
IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKLSAgICBtU3dhcEJl
aGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0xOwot
ICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQotU3VyZmFjZTo6flN1cmZhY2UoKQotewotICAg
IHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6
aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4
dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpCi0g
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZv
ciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQsCi0gICAgLy8gdG8gbWluaW1pemUg
dGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvCi0g
ICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBzY3JlZW4uCi0gICAgaWYgKG1XaW5kb3cgJiYg
KGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgewotICAg
ICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBIUkVTVUxUIHJlc3VsdCA9IER3bUlzQ29tcG9z
aXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwotICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
ICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNl
bnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJlc2VudFBhcmFtcywgMCwgc2l6ZW9mKHByZXNl
bnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BS
RVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7Ci0K
LSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNl
bnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgRVJSKCJV
bmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpyZWxlYXNl
KCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
Ci0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1UZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwotICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKLXsK
LSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4o
bVdpZHRoLCBtSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBSRUNUIHdpbmRvd1JlY3Q7Ci0gICAgaWYg
KCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVjdCkpCi0gICAgewot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotCi0gICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZl
IHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKHdpbmRvd1JlY3QucmlnaHQgLSB3aW5kb3dSZWN0
LmxlZnQsIHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3ApOwotfQotCi1ib29sIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXRE
ZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSogcHJlc2VydmVkUmVuZGVy
VGFyZ2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgJiYgbVJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IG1SZW5kZXJU
YXJnZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBt
ZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwotICAgIC8vIGJlZm9yZSByZWFsbG9jYXRp
bmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgotICAg
IGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAgcmVsZWFzZSgpOwotCi0gICAg
RDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lv
bigpID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCk7Ci0K
LSAgICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hpbmcgd2hlbiByZXNpemluZyB3
aW5kb3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNpZGUgb2YgdGhlIFdNX1BBSU5U
IGNhbGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2JsZW0gaW4KLSAgICAvLyBzaW5n
bGUgcHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vhcmx5IG5vdGljZWFibGUgaW4g
bXVsdGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVyZWZvcmUsIGlmIHRoZSBjcmVh
dG9yIHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAgICAvLyB0aGUgY3VycmVudCBw
cm9jZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdPUkQgd2luZG93UElEOwotICAg
IEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2luZG93UElEKTsKLSAgICBpZiAo
d2luZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAgICB7Ci0gICAgICAgIHVzZUZs
aXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMgaGFyZHdhcmUgZG9lcyBub3Qg
c3VwcG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhlciB0aGUKLSAgICAvLyBkZXZp
Y2UgZm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3QgMzItYml0LgotICAgIEhEQyBk
ZXZpY2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmljZUZvcm1hdEJpdHMgPSBHZXRE
ZXZpY2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0gICAgUmVsZWFzZURDKDAsIGRl
dmljZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVyU2l6ZSAhPSAzMiB8fCBkZXZp
Y2VGb3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMgYWx3YXlzIFZTWU5DZWQKLSAg
ICBpZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggZG9lcyBub3QgcHJlc2Vy
dmUgdGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAg
ICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9y
bWF0OwotICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1c2Ug
RDNEU1dBUEVGRkVDVF9GTElQRVguCi0gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIERpcmVjdFgg
ZG9jcyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0byAxCi0gICAgLy8gb3Ig
Mi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNwZWN1bGF0ZSB0aGF0IGVp
dGhlciBpdCBpcwotICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0IHRlbGxpbmcgdXMsIG9y
IGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0Ci0gICAgLy8gYmVoaW5kIHRoZSBzY2VuZXMg
a25vd2luZyB0aGF0IHdlIGRvbid0IG5lZWQgbW9yZS4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5G
bGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRv
d0hhbmRsZSgpOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1F
OiBVbmltcGxlbWVudGVkCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2
YWwgPSBtUHJlc2VudEludGVydmFsOwotICAgIC8vIFVzZSBmbGlwRXggb24gV2luNyBvciBncmVh
dGVyLgotICAgIGlmKHVzZUZsaXBFeCkKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZl
Y3QgPSBEM0RTV0FQRUZGRUNUX0ZMSVBFWDsKLSAgICBlbHNlCi0gICAgICBwcmVzZW50UGFyYW1l
dGVycy5Td2FwRWZmZWN0ID0gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPyBEM0RTV0FQRUZGRUNU
X0NPUFkgOiBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2lu
ZG93ZWQgPSBUUlVFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJh
Y2tidWZmZXJXaWR0aDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0g
YmFja2J1ZmZlckhlaWdodDsKLQotICAgIGlmIChtV2luZG93KQotICAgIHsKLSAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVy
cywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhBTkRMRSAqcFNoYXJlSGFu
ZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgp
KSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwg
MSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZB
VUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7Ci0gICAgfQotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0g
RDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zm
c2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLQot
ICAgICAgICAKLSAgICAgICAgaWYgKHByZXNlcnZlZFJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYo
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbURpc3Bs
YXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JV
RkZFUl9UWVBFX01PTk8sICZtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKCFwcmVzZXJ2ZWRS
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5k
b3csIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0
KTsKLSAgICB9Ci0KLSAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAg
IG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4g
c3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRp
Y19jYXN0PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAg
ICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQsICZyZWN0LCBt
UmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICBwcmVzZXJ2ZWRS
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBE
M0RGTVRfVU5LTk9XTikKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVw
dGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVu
Y2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0gICAg
fQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8
fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgi
LCByZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVySGVpZ2h0OwotCi0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKLXsKLSAg
ICByZXR1cm4gbVdpbmRvdzsKLX0KLQotCi0jZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQo
IkVnbDo6U3VyZmFjZU93bmVyIikKLSNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6
U3VyZmFjZVBhcmVudFduZFByb2MiKQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNl
V2luZG93UHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFN
IGxwYXJhbSkKLXsKLSAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkKLSAgewotICAgICAgU3VyZmFj
ZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZh
Y2VQcm9wZXJ0eSkpOwotICAgICAgaWYoc3VyZikKLSAgICAgIHsKLSAgICAgICAgICBzdXJmLT5j
aGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgICAgfQotICB9Ci0gIFdORFBST0MgcHJl
dlduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJl
bnRXbmRQcm9jKSk7Ci0gIHJldHVybiBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwg
bWVzc2FnZSwgd3BhcmFtLCBscGFyYW0pOwotfQotCi12b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2lu
ZG93KCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgRFdPUkQgcHJvY2Vzc0lkOwotICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93
VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOwotICAgIGlmIChwcm9jZXNzSWQg
IT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpIHx8IHRocmVhZElkICE9IEdldEN1cnJlbnRUaHJlYWRJ
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldExhc3RFcnJvcigw
KTsKLSAgICBMT05HX1BUUiBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBH
V0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9j
KSk7Ci0gICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NV
Q0NFU1MpCi0gICAgewotICAgICAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5
LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNldFByb3AobVdpbmRvdywg
a1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7Ci0g
ICAgbVdpbmRvd1N1YmNsYXNzZWQgPSB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnVuc3ViY2xh
c3NXaW5kb3coKQotewotICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFzcwotICAgIExPTkdfUFRSIHBhcmVu
dFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQ
YXJlbnRXbmRQcm9jKSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBT
dXJmYWNlV2luZG93UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBp
cyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQotICAgIC8vIGh3bmQg
YXMgd2VsbCBhbmQgZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wg
Y29udGV4dC4gVGhlCi0gICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVp
dGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIEVHTCBjb250ZXh0
LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4KLSAg
ICBpZihwYXJlbnRXbmRGdW5jKQotICAgIHsKLSAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMg
PSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7
Ci0gICAgICAgIEFTU0VSVChwcmV2V25kRnVuYyA9PSByZWludGVycHJldF9jYXN0PExPTkdfUFRS
PihTdXJmYWNlV2luZG93UHJvYykpOwotICAgIH0KLQotICAgIFJlbW92ZVByb3AobVdpbmRvdywg
a1N1cmZhY2VQcm9wZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJv
Yyk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpj
aGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCi17Ci0gICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYg
KCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0
byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdp
ZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9
IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50
V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAg
ICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkKLSAgICB7Ci0gICAgICAg
IHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwotICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRo
aXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29u
dGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwg
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1EV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGlu
dGVydmFsKQotewotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X1RIUkVFOwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXAoKQotewotICAg
IGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKEVHTGludCB4LCBFR0xpbnQg
eSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICh4IDwgMCB8fCB5IDwg
MCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1BBUkFNRVRFUiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmICghbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQpCi0gICAgewotICAgICAgICAvLyBTcGVjIGlzIG5vdCBjbGVhciBhYm91
dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2Nl
bmUoKTsKLQotICAgICAgICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICB4LCBt
SGVpZ2h0IC0geSAtIGhlaWdodCwKLSAgICAgICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IG1XaWR0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IG1XaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChyZWN0LmJvdHRvbSA+IG1IZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3Qu
Ym90dG9tID0gbUhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmxlZnQgPT0g
cmVjdC5yaWdodCB8fCByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKLQotICAg
ICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QgfHwg
cmVzdWx0ID09IEQzREVSUl9ERVZJQ0VIVU5HIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFUkVN
T1ZFRCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xP
U1QsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVdpZHRoOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi1J
RGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwot
ICAgIH0KLQotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJl
OSAqU3VyZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5U
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAg
IH0KLQotICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpz
ZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlmIChtU3dhcEludGVydmFs
ID09IGludGVydmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBt
U3dhcEludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1T
d2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJ
bnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50
ZXJ2YWwoKSk7Ci0KLSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2Fw
SW50ZXJ2YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVu
dW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0
dXJlRm9ybWF0OwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRC
b3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRl
eHR1cmU7Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0
Rm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1h
dDsKLX0KLX0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFN1cmZhY2UuY3BwOiBJbXBs
ZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3Vy
ZmFjZQ0KKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcg
YW55IGJhY2sgYnVmZmVycy4NCisvLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4NCisNCisjaW5jbHVk
ZSA8dGNoYXIuaD4NCisNCisjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCINCisNCisjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiDQorDQor
I2luY2x1ZGUgImxpYkVHTC9tYWluLmgiDQorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiDQor
DQorI2luY2x1ZGUgPGR3bWFwaS5oPg0KKw0KK25hbWVzcGFjZSBlZ2wNCit7DQorDQorbmFtZXNw
YWNlDQorew0KK2NvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwg
MHgwNik7DQorY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VXT1JEKDB4MDEsIDB4MDYp
Ow0KKw0KKy8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBh
IGZvcm1hdCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcNCisvLyBjb21wYXJpc29uLg0KK2ludCBnZXRD
b21wYXJhYmxlT1NWZXJzaW9uKCkNCit7DQorICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJzaW9u
KCk7DQorICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsNCisg
ICAgaW50IG1pbm9yVmVyc2lvbiA9IEhJQllURShMT1dPUkQodmVyc2lvbikpOw0KKyAgICByZXR1
cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOw0KK30NCit9DQorDQorU3Vy
ZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSFdO
RCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSANCisgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpDQorew0KKyAgICBtU3dhcENoYWlu
ID0gTlVMTDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsNCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZzY3JlZW5UZXh0dXJl
ID0gTlVMTDsNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCisgICAgbVRleHR1cmUgPSBOVUxM
Ow0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJFOw0KKyAgICBtVGV4dHVyZVRh
cmdldCA9IEVHTF9OT19URVhUVVJFOw0KKw0KKyAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xp
bnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0
dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVG
RkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7DQorICAgIG1T
d2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVydmFsKDEpOw0KKw0KKyAgICBzdWJj
bGFzc1dpbmRvdygpOw0KK30NCisNCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXks
IGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUeXBl
KQ0KKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwpLCBtQ29uZmlnKGNvbmZp
ZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0aCksIG1IZWlnaHQoaGVp
Z2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQ0KK3sNCisgICAgbVN3YXBD
aGFpbiA9IE5VTEw7DQorICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgbURlcHRoU3RlbmNp
bCA9IE5VTEw7DQorICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICBtT2Zmc2NyZWVuVGV4
dHVyZSA9IE5VTEw7DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7DQorICAgIG1UZXh0
dXJlID0gTlVMTDsNCisgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlRm9ybWF0Ow0KKyAgICBt
VGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOw0KKw0KKyAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9
IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1p
bmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JB
Q0tfQlVGRkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7DQor
ICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVydmFsKDEpOw0KK30NCisN
CitTdXJmYWNlOjp+U3VyZmFjZSgpDQorew0KKyAgICB1bnN1YmNsYXNzV2luZG93KCk7DQorICAg
IHJlbGVhc2UoKTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjppbml0aWFsaXplKCkNCit7DQorICAg
IEFTU0VSVCghbVN3YXBDaGFpbiAmJiAhbU9mZnNjcmVlblRleHR1cmUgJiYgIW1EZXB0aFN0ZW5j
aWwpOw0KKw0KKyAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpDQorICAgICAgcmV0dXJuIGZhbHNl
Ow0KKw0KKyAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywg
aWYgd2UgYXJlIGNvbXBvc2l0ZWQsDQorICAgIC8vIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2Yg
cXVldWluZyBkb25lIGJ5IERXTSBiZXR3ZWVuIG91ciBjYWxscyB0bw0KKyAgICAvLyBwcmVzZW50
IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4NCisgICAgaWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFi
bGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgew0KKyAgICAgIEJPT0wgaXND
b21wb3NpdGVkOw0KKyAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3NpdGlvbkVuYWJs
ZWQoJmlzQ29tcG9zaXRlZCk7DQorICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIGlzQ29t
cG9zaXRlZCkgew0KKyAgICAgICAgRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1z
Ow0KKyAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2VudFBhcmFt
cykpOw0KKyAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BSRVNFTlRf
UEFSQU1FVEVSUyk7DQorICAgICAgICBwcmVzZW50UGFyYW1zLmNCdWZmZXIgPSAyOw0KKw0KKyAg
ICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNlbnRQ
YXJhbXMpOw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBzZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOw0KKyAgICAg
IH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpy
ZWxlYXNlKCkNCit7DQorICAgIGlmIChtU3dhcENoYWluKQ0KKyAgICB7DQorICAgICAgICBtU3dh
cENoYWluLT5SZWxlYXNlKCk7DQorICAgICAgICBtU3dhcENoYWluID0gTlVMTDsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobUJhY2tCdWZmZXIpDQorICAgIHsNCisgICAgICAgIG1CYWNrQnVmZmVyLT5S
ZWxlYXNlKCk7DQorICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIH0NCisNCisgICAg
aWYgKG1EZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bU9mZnNjcmVlblRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5S
ZWxlYXNlKCk7DQorICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisN
CisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtVGV4dHVyZS0+cmVsZWFzZVRl
eEltYWdlKCk7DQorICAgICAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigp
DQorew0KKyAgICBpZiAoIW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXNldFN3
YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOw0KKyAgICB9DQorDQorICAgIFJFQ1Qgd2luZG93UmVj
dDsNCisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVj
dCkpDQorICAgIHsNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorDQorICAgICAgICBFUlIoIkNv
dWxkIG5vdCByZXRyaWV2ZSB0aGUgd2luZG93IGRpbWVuc2lvbnMiKTsNCisgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVj
dC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0
LnRvcCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZm
ZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpDQorew0KKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7DQorDQorICAgIGlmIChkZXZpY2UgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIC8v
IEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFu
ZCByZWxlYXNlIGFsbCByZXNvdXJjZXMNCisgICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVt
IHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuDQorICAgIGRldmlj
ZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7DQorDQorICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsNCisgICAgSFJFU1VMVCByZXN1bHQ7DQorDQorICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0Ow0KKyAgICAvLyBXZSBzZXQgQmFja0J1ZmZlckNvdW50ID0gMSBldmVu
IHdoZW4gd2UgdXNlIEQzRFNXQVBFRkZFQ1RfRkxJUEVYLg0KKyAgICAvLyBXZSBkbyB0aGlzIGJl
Y2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRv
IDENCisgICAgLy8gb3IgMi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNw
ZWN1bGF0ZSB0aGF0IGVpdGhlciBpdCBpcw0KKyAgICAvLyBmb3JjaW5nIGl0IHRvIDIgd2l0aG91
dCB0ZWxsaW5nIHVzLCBvciBiZXR0ZXIsIGRvaW5nIHNvbWV0aGluZyBzbWFydA0KKyAgICAvLyBi
ZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLg0KKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOw0KKyAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsNCisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOw0KKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhE
ZXZpY2VXaW5kb3cgPSBnZXRXaW5kb3dIYW5kbGUoKTsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMu
TXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBs
ZW1lbnRlZA0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxU
SVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkDQorICAgIHByZXNlbnRQYXJh
bWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gbVByZXNlbnRJbnRlcnZhbDsNCisgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsNCisgICAg
cHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOw0KKyAgICBwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7DQorICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0Ow0KKw0KKyAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUNCisgICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhp
c3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4NCisgICAgaWYg
KG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsNCisg
ICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtQmFja0J1ZmZl
cikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsNCisgICAgICAgIG1C
YWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
DQorICAgIHsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0
ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAg
ICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIG1TaGFyZUhhbmRsZSA9
IE5VTEw7DQorICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsNCisgICAgaWYgKCFtV2lu
ZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQ0KKyAgICB7DQorICAgICAg
ICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOw0KKyAgICB9DQorDQorICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgs
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJl
LCBwU2hhcmVIYW5kbGUpOw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1
bHQpOw0KKyAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2
aWNlTG9zdCgpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
ICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgZmFsc2UpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0Ow0KKw0KKyAgICByZXN1bHQgPSBt
T2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsNCisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgaWYgKG9sZFJlbmRlclRhcmdl
dCkNCisgICAgew0KKyAgICAgICAgUkVDVCByZWN0ID0NCisgICAgICAgIHsNCisgICAgICAgICAg
ICAwLCAwLA0KKyAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodA0KKyAgICAgICAgfTsNCisNCisg
ICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZWN0LnJpZ2h0
ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOw0KKyAgICAgICAgfQ0KKw0KKyAg
ICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckhlaWdodCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVjdC5ib3R0
b20gPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZy
ZWN0LCBEM0RURVhGX05PTkUpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsN
CisNCisgICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAg
IGlmIChtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFk
ZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7DQorDQor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFk
ZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3Vs
dCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmKGlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0
QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsNCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgaWYgKG1D
b25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pDQorICAgIHsNCisg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFt
ZXRlcnMuTXVsdGlTYW1wbGVUeXBlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwg
RkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBE
M0RFUlJfSU5WQUxJRENBTEwpOw0KKw0KKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3Vs
dCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmKGlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIG1XaWR0aCA9IHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsNCisgICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJIZWlnaHQ7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IGZhbHNl
Ow0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xp
bnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQorICAgIGlm
ICghbVN3YXBDaGFpbikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisN
CisgICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkNCisgICAgew0KKyAgICAgICAgd2lkdGggPSBt
V2lkdGggLSB4Ow0KKyAgICB9DQorDQorICAgIGlmICh5ICsgaGVpZ2h0ID4gbUhlaWdodCkNCisg
ICAgew0KKyAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7DQorICAgIH0NCisNCisgICAgaWYg
KHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVl
Ow0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5n
ZXREZXZpY2UoKTsNCisNCisgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucw0K
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsN
CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJ
RCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBG
QUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBE
M0RDVUxMX05PTkUpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExB
TkVFTkFCTEUsIDApOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxF
X0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9S
RUQpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwg
RkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5B
QkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAgIGRl
dmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclRh
cmdldCgwLCBtQmFja0J1ZmZlcik7DQorICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFj
ZShOVUxMKTsNCisNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJl
KTsNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwg
RDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7DQorICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5U
KTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQz
RFRFWEZfUE9JTlQpOw0KKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsNCisNCisgICAgRDNEVklFV1BPUlQ5
IHZpZXdwb3J0ID0gezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07DQorICAgIGRl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsNCisNCisgICAgZmxvYXQgeDEgPSB4IC0gMC41
ZjsNCisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsNCisgICAg
ZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7DQorICAgIGZsb2F0IHkyID0gKG1IZWlnaHQg
LSB5KSAtIDAuNWY7DQorDQorICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7DQorICAg
IGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOw0KKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lk
dGgpIC8gZmxvYXQobVdpZHRoKTsNCisgICAgZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBmbG9h
dChtSGVpZ2h0KTsNCisNCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAx
LjBmLCB1MSwgdjJ9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEu
MGYsIHUyLCB2Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4w
ZiwgdTIsIHYxfSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBm
LCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYNCisNCisgICAgbURpc3BsYXktPnN0
YXJ0U2NlbmUoKTsNCisgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVG
QU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsNCisgICAgbURpc3BsYXktPmVuZFNjZW5l
KCk7DQorDQorICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsNCisNCisgICAgUkVDVCBy
ZWN0ID0NCisgICAgew0KKyAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsDQorICAgICAg
ICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5DQorICAgIH07DQorDQorICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOw0KKw0K
KyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oZ2xH
ZXRDdXJyZW50Q29udGV4dCgpKTsNCisgICAgaWYgKGNvbnRleHQpDQorICAgIHsNCisgICAgICAg
IGNvbnRleHQtPm1hcmtBbGxTdGF0ZURpcnR5KCk7DQorICAgIH0NCisNCisgICAgaWYgKGlzRGV2
aWNlTG9zdEVycm9yKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlE
ZXZpY2VMb3N0KCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgIH0NCisNCisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgY2hlY2tGb3JPdXRPZkRhdGVT
d2FwQ2hhaW4oKTsNCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK0hXTkQgU3VyZmFjZTo6
Z2V0V2luZG93SGFuZGxlKCkNCit7DQorICAgIHJldHVybiBtV2luZG93Ow0KK30NCisNCisNCisj
ZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVyIikNCisjZGVm
aW5lIGtQYXJlbnRXbmRQcm9jIF9URVhUKCJFZ2w6OlN1cmZhY2VQYXJlbnRXbmRQcm9jIikNCisN
CitzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhIV05EIGh3bmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkNCit7DQorICBpZiAobWVz
c2FnZSA9PSBXTV9TSVpFKQ0KKyAgew0KKyAgICAgIFN1cmZhY2UqIHN1cmYgPSByZWludGVycHJl
dF9jYXN0PFN1cmZhY2UqPihHZXRQcm9wKGh3bmQsIGtTdXJmYWNlUHJvcGVydHkpKTsNCisgICAg
ICBpZihzdXJmKQ0KKyAgICAgIHsNCisgICAgICAgICAgc3VyZi0+Y2hlY2tGb3JPdXRPZkRhdGVT
d2FwQ2hhaW4oKTsNCisgICAgICB9DQorICB9DQorICBXTkRQUk9DIHByZXZXbmRGdW5jID0gcmVp
bnRlcnByZXRfY2FzdDxXTkRQUk9DID4oR2V0UHJvcChod25kLCBrUGFyZW50V25kUHJvYykpOw0K
KyAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNzYWdlLCB3cGFy
YW0sIGxwYXJhbSk7DQorfQ0KKw0KK3ZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3coKQ0KK3sN
CisgICAgaWYgKCFtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisN
CisgICAgRFdPUkQgcHJvY2Vzc0lkOw0KKyAgICBEV09SRCB0aHJlYWRJZCA9IEdldFdpbmRvd1Ro
cmVhZFByb2Nlc3NJZChtV2luZG93LCAmcHJvY2Vzc0lkKTsNCisgICAgaWYgKHByb2Nlc3NJZCAh
PSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElk
KCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRMYXN0RXJy
b3IoMCk7DQorICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5k
b3csIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRv
d1Byb2MpKTsNCisgICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVS
Uk9SX1NVQ0NFU1MpDQorICAgIHsNCisgICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgU2V0UHJvcChtV2luZG93LCBrU3Vy
ZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOw0KKyAgICBTZXRQ
cm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4ob2xk
V25kUHJvYykpOw0KKyAgICBtV2luZG93U3ViY2xhc3NlZCA9IHRydWU7DQorfQ0KKw0KK3ZvaWQg
U3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygpDQorew0KKyAgICBpZighbVdpbmRvd1N1YmNsYXNz
ZWQpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICAvLyB1bi1zdWJj
bGFzcw0KKyAgICBMT05HX1BUUiBwYXJlbnRXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxMT05H
X1BUUj4oR2V0UHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYykpOw0KKw0KKyAgICAvLyBDaGVj
ayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJvYy4NCisgICAgLy8gSWYg
dGhpcyBhc3NlcnQgZmFpbHMsIHRoZW4gaXQgaXMgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBoYXMg
c3ViY2xhc3NlZCB0aGUNCisgICAgLy8gaHduZCBhcyB3ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xh
c3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBUaGUNCisgICAgLy8gYXBwbGlj
YXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlh
bGl6aW5nIHRoZQ0KKyAgICAvLyBFR0wgY29udGV4dCwgb3IgdG8gdW5zdWJjbGFzcyBiZWZvcmUg
ZGVzdHJveWluZyB0aGUgRUdMIGNvbnRleHQuDQorICAgIGlmKHBhcmVudFduZEZ1bmMpDQorICAg
IHsNCisgICAgICAgIExPTkdfUFRSIHByZXZXbmRGdW5jID0gU2V0V2luZG93TG9uZ1B0cihtV2lu
ZG93LCBHV0xQX1dORFBST0MsIHBhcmVudFduZEZ1bmMpOw0KKyAgICAgICAgQVNTRVJUKHByZXZX
bmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7
DQorICAgIH0NCisNCisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5KTsN
CisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7DQorICAgIG1XaW5kb3dT
dWJjbGFzc2VkID0gZmFsc2U7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRh
dGVTd2FwQ2hhaW4oKQ0KK3sNCisgICAgUkVDVCBjbGllbnQ7DQorICAgIGlmICghR2V0Q2xpZW50
UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpDQorICAgIHsNCisgICAgICAgIEFTU0VS
VChmYWxzZSk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8gR3Jv
dyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3Jv
dyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLg0KKyAgICBpbnQgY2xpZW50V2lkdGgg
PSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsNCisgICAgaW50IGNsaWVudEhlaWdodCA9IGNs
aWVudC5ib3R0b20gLSBjbGllbnQudG9wOw0KKyAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdp
ZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOw0KKw0KKyAg
ICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkNCisgICAgew0KKyAgICAg
ICAgcmVzZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7DQorICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09
IHRoaXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJl
bnRDb250ZXh0KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5
KCkpLCB0aGlzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9
DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorRFdPUkQgU3VyZmFjZTo6Y29udmVydEludGVy
dmFsKEVHTGludCBpbnRlcnZhbCkNCit7DQorICAgIHN3aXRjaChpbnRlcnZhbCkNCisgICAgew0K
KyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOw0KKyAg
ICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOw0KKyAgICAgIGNhc2Ug
MjogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOw0KKyAgICAgIGNhc2UgMzogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7DQorICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9GT1VSOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsNCit9DQorDQor
Ym9vbCBTdXJmYWNlOjpzd2FwKCkNCit7DQorICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lk
dGgsIG1IZWlnaHQpOw0KK30NCisNCitib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50
IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpDQorew0KKyAgICBpZiAo
IW1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQ0KKyAgICB7DQorICAgICAgICAvLyBTcGVjIGlzIG5v
dCBjbGVhciBhYm91dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4NCisgICAgICAgIHJldHVy
biB0cnVlOw0KKyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gc3dhcFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVdpZHRoOw0KK30NCisNCitFR0xpbnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtSGVpZ2h0Ow0KK30NCisNCitFR0xpbnQgU3VyZmFjZTo6
aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtUG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZDsNCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lE
aXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgaWYg
KG1SZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigp
Ow0KKyAgICB9DQorDQorICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0Ow0KK30NCisNCisvLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldERlcHRo
U3RlbmNpbCgpDQorew0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAg
bURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1EZXB0aFN0
ZW5jaWw7DQorfQ0KKw0KK0lEaXJlY3QzRFRleHR1cmU5ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5U
ZXh0dXJlKCkNCit7DQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0KKyAgICAg
ICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBt
T2Zmc2NyZWVuVGV4dHVyZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwo
RUdMaW50IGludGVydmFsKQ0KK3sNCisgICAgaWYgKG1Td2FwSW50ZXJ2YWwgPT0gaW50ZXJ2YWwp
DQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgbVN3YXBJbnRl
cnZhbCA9IGludGVydmFsOw0KKyAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRl
cnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsNCisgICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwo
KSk7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3YXBJbnRl
cnZhbCk7DQorICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7DQorfQ0KKw0KK0VHTGVu
dW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRl
eHR1cmVGb3JtYXQ7DQorfQ0KKw0KK0VHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmVUYXJnZXQ7DQorfQ0KKw0KK3ZvaWQgU3Vy
ZmFjZTo6c2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpDQorew0KKyAgICBt
VGV4dHVyZSA9IHRleHR1cmU7DQorfQ0KKw0KK2dsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJv
dW5kVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK0Qz
REZPUk1BVCBTdXJmYWNlOjpnZXRGb3JtYXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7DQorfQ0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCmluZGV4IDM1MjYwZGUuLjQwYmQ3MDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCkBAIC02OSw2ICs2OSw3
IEBAIHByaXZhdGU6CiAKICAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKICAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1
ZmZlcjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNj
cmVlblRleHR1cmU7CkBAIC03OCw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdWJjbGFz
c1dpbmRvdygpOwogICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOwogICAgIGJvb2wgcmVzZXRT
d2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOworICAg
IGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQpOwogICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFs
KTsKIAogICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhhdCB0
aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmNwcAppbmRleCA0YjdmOWUxLi41MDg5ZDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCkBAIC0xMTA4LDYgKzExMDgs
MTEgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUG9zdFN1YkJ1ZmZlck5WKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGkKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAg
aWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7
CisgICAgICAgIH0KKwogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKaW5kZXggNjZjZDVjMC4u
MWI0NjY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCkBAIC0xLDQyNzYgKzEsNDMzOSBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2lu
ZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcKLS8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJ
dCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0K
LSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1
ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0jdW5kZWYgZmFyCi0KLW5h
bWVzcGFjZSBnbAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAgQVNTRVJUKHJvYnVzdEFj
Y2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAgbURpc3BsYXkgPSBOVUxM
OwotICAgIG1EZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJh
c2VIYW5kbGUoMCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYp
OwotCi0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOwotICAgIG1T
dGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250RmFjZSA9IEdMX0NDVzsK
LSAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdM
X0xFU1M7Ci0gICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gR0xfT05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBo
YSA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsK
LSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgbVN0YXRl
LmJsZW5kQ29sb3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7Ci0g
ICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxw
aGEgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zdGVu
Y2lsRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7Ci0gICAgbVN0
YXRlLnN0ZW5jaWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSAtMTsK
LSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1JlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IC0gMTsKLSAgICBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEZhaWwg
PSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xf
S0VFUDsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsKLSAgICBtU3RhdGUu
cG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cyA9IDAuMGY7Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwotICAg
IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFn
ZVZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBmYWxzZTsK
LSAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGl0aGVyID0gdHJ1
ZTsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFOwotICAgIG1T
dGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9OVF9DQVJFOwotCi0gICAg
bVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAg
ICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIgPSAwLjBmOwotICAgIG1T
dGF0ZS56RmFyID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0gICAgbVN0YXRl
LnNjaXNzb3JZID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5
TW9kZS5IZWlnaHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsKLSAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gdHJ1
ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAgIG1TdGF0ZS5kZXB0aE1h
c2sgPSB0cnVlOwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKLSAg
ICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7Ci0gICAg
fQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6Ci0gICAg
Ly8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAg
aGF2ZSB0d29kaW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZl
Y3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICAgIC8vIEluIG9yZGVy
IHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkg
YXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVz
IGFyZSAwLgotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOwotICAg
IG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7Ci0KLSAgICBt
U3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVmZmVyKDApOwotICAgIGJp
bmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwotICAg
IGJpbmRUZXh0dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICBiaW5k
RHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0KLSAgICBtU3Rh
dGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0Owot
ICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJv
d09yZGVyID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7Ci0gICAgbUxpbmVMb29w
SUIgPSBOVUxMOwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0gICAgbUludmFsaWRWYWx1
ZSA9IGZhbHNlOwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgbU91dE9mTWVt
b3J5ID0gZmFsc2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwot
Ci0gICAgbUhhc0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7
Ci0gICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJlc2V0U3RyYXRlZ3kgPSAo
bm90aWZ5UmVzZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VU
X05PVElGSUNBVElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7Ci0K
LSAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQzVGV4
dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBmYWxzZTsKLSAgICBt
U3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzID0gZmFsc2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7Ci0gICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBO
VUxMOwotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkK
LXsKLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0gICAgewotICAgICAgICBQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3Rh
dGUuY3VycmVudFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRnJh
bWVidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1G
cmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRmVu
Y2VNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdp
bigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlNYXAuZW1wdHkoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAg
fQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCi0gICAgewotICAg
ICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7Ci0gICAg
ICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigp
KTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9D
T1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBs
ZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJd
LnNldChOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0
eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBtSW5jb21w
bGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUuYXJy
YXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5V
TEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwotCi0gICAgbVRleHR1cmUy
RFplcm8uc2V0KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOwotCi0g
ICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFn
ZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLQotICAgIGlm
IChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVh
c2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxheSA9IGRpc3BsYXk7Ci0g
ICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmICghbUhhc0JlZW5D
dXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+Z2V0RGV2aWNl
Q2FwcygpOwotCi0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFu
YWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5k
ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0
aGlzKTsKLQotICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2aWNlQ2Fwcy5QaXhl
bFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAgICAgICAgbVN1cHBvcnRz
VmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpOwotICAg
ICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXktPmdldE5vblBvd2VyMlRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtRGlzcGxheS0+
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9
IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50
KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUp
OwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4VGV4dHVy
ZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURp
bWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1l
bnNpb24pICsgMTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1
YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRl
eHR1cmVMZXZlbD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4
Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlTGV2ZWwpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJCdWZmZXJGb3JtYXRz
W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgICAg
ICBEM0RGTVRfWDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAg
ICAgRDNERk1UX0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50IG1heCA9IDA7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZlckZvcm1hdHMpIC8gc2l6
ZW9mKEQzREZPUk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCAqbXVsdGlz
YW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAg
ICAgICAgICAgIG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9y
bWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBw
b3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1q
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pd
ICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBs
ZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXktPmdl
dEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMg
PSBtRGlzcGxheS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0
c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAg
ICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJlU3VwcG9y
dCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUNVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1EaXNw
bGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsKLSAgICAgICAgbVN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5
LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBv
cnQoKTsKLQotICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhW
ZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7Ci0KLSAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cyA9IDA7Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwotICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmcoKTsK
LQotICAgICAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0
WSA9IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgo
KTsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7
Ci0KLSAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZ
ID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7
Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7Ci0K
LSAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXcmFwIHRo
ZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2ln
biB0aGVtIHRvIHRoZSAnMCcgbmFtZXMKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJl
bmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBzdXJmYWNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAg
IENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJl
bmRlclRhcmdldCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWxidWZmZXJa
ZXJvID0gbmV3IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKGNvbG9yYnVmZmVy
WmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7Ci0KLSAgICBzZXRGcmFtZWJ1ZmZlclplcm8o
ZnJhbWVidWZmZXJaZXJvKTsKLQotICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlm
IChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICB9Ci0gICAgCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIHNldCBhbGwgb2YgdGhlIHN0YXRlLXJlbGF0ZWQgZGlydHkgZmxhZ3MsIHNvIHRo
YXQgYWxsIHN0YXRlIGlzIHNldCBkdXJpbmcgbmV4dCBwcmUtZHJhdy4KLXZvaWQgQ29udGV4dDo6
bWFya0FsbFN0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlh
bFBTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4
dHVyZVNlcmlhbFZTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwg
PSAwOwotICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsKLSAgICBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAw
OwotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCA9IGZhbHNlOwotICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRl
clRhcmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKLQotICAgIG1DbGVhclN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1
ZTsKLSAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Qb2x5Z29uT2Zmc2V0U3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAg
IG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7Ci0gICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0g
ICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjptYXJr
Q29udGV4dExvc3QoKQotewotICAgIGlmIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRF
WFRfT05fUkVTRVRfRVhUKQotICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9VTktOT1dOX0NPTlRF
WFRfUkVTRVRfRVhUOwotICAgIG1Db250ZXh0TG9zdCA9IHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6aXNDb250ZXh0TG9zdCgpCi17Ci0gICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKQotewotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVk
OwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsKLSAgICBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUu
YWxwaGEgPSBhbHBoYTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRl
cHRoKQotewotICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0aDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCi17Ci0gICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gc3RlbmNpbDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShi
b29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVkKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKLSAgICAgICAgbUN1bGxTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVuYWJs
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsTW9k
ZSAhPSBtb2RlKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0gbW9kZTsKLSAgICAg
ICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
RnJvbnRGYWNlKEdMZW51bSBmcm9udCkKLXsKLSAgICBpZiAobVN0YXRlLmZyb250RmFjZSAhPSBm
cm9udCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9udDsKLSAgICAgICAg
bUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVw
dGhUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCAhPSBlbmFi
bGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAg
IG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0Rl
cHRoVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZGVwdGhUZXN0Owot
fQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKQotewotICAg
IGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7Ci0gICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBm
bG9hdCB6RmFyKQotewotICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOwotICAgIG1TdGF0ZS56RmFy
ID0gekZhcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJs
ZW5kID0gZW5hYmxlZDsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi1ib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLmJsZW5kOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRmFjdG9ycyhHTGVudW0g
c291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVz
dEFscGhhKQotewotICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gc291cmNlUkdCIHx8
Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJjZUFscGhhIHx8Ci0gICAg
ICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAotICAgICAgICBtU3RhdGUuZGVz
dEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCID0gc291cmNlUkdCOwotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJH
QjsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsKLSAgICAg
ICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOwotICAgICAgICBtQmxlbmRTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihm
bG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBp
ZiAobVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAotICAgICAgICBtU3RhdGUuYmxlbmRD
b2xvci5ncmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlICE9
IGJsdWUgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpCi0gICAg
ewotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmdyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUg
PSBibHVlOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IGFscGhhOwotICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQot
ewotICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fAotICAg
ICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pCi0gICAgewot
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOwotICAgICAgICBt
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsKLSAgICAgICAgbUJsZW5k
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxU
ZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICE9IGVuYWJs
ZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOwotICAgICAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojpp
c1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zdGVuY2ls
VGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2ls
RnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKQotewotICAgIGlmICht
U3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxSZWYgIT0gc3RlbmNpbFJlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gc3Rl
bmNpbE1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2lsRnVu
YzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNp
bFJlZiA6IDA7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrOwotICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVu
Y2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0
ZW5jaWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFj
a01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrRnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
ID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7Ci0gICAgICAgIG1T
dGF0ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7Ci0gICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxX
cml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNr
V3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRl
LnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNpbEJhY2tXcml0ZW1hc2s7
Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENv
bnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0
ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi17Ci0gICAg
aWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAotICAgICAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7Ci0gICAgICAgIG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKLSAg
ICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51
bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3RlbmNpbEJhY2tGYWls
IHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsK
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3Rh
dGUucG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZp
bGxFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxs
OwotCi19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZh
Y3RvciwgR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0
b3IgIT0gZmFjdG9yIHx8Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5p
dHMpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IGZhY3RvcjsK
LSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOwotICAgICAgICBtUG9s
eWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGly
dHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUFscGhhVG9Db3Zl
cmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxl
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQ292
ZXJhZ2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdl
OwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZh
bHVlLCBib29sIGludmVydCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUg
IT0gdmFsdWUgfHwKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVy
dCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gdmFsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsKLSAgICAgICAgbVNh
bXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTY2lz
c29yVGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBl
bmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsKLSAg
ICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4
dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2Np
c3NvclRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRl
LmRpdGhlciA9IGVuYWJsZWQ7Ci0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN0YXRlLmRpdGhlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRMaW5lV2lkdGgoR0xm
bG9hdCB3aWR0aCkKLXsKLSAgICBtU3RhdGUubGluZVdpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0
ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRlLmZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50OwotICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0
aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3JpdGUKLSAgICAvLyBkZHgs
IGRkeF9jb2Fyc2UsIG9yIGRkeF9maW5lIGRlcGVuZGluZyBvbiB0aGUgaGludC4KLSAgICAvLyBJ
Z25vcmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUg
aGludC4KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtU3RhdGUudmlld3Bv
cnRYID0geDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0geTsKLSAgICBtU3RhdGUudmlld3BvcnRX
aWR0aCA9IHdpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGhlaWdodDsKLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8
fCBtU3RhdGUuc2Npc3NvclkgIT0geSB8fCAKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCAh
PSB3aWR0aCB8fCBtU3RhdGUuc2Npc3NvckhlaWdodCAhPSBoZWlnaHQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc2Npc3NvclggPSB4OwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSB5OwotICAg
ICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29y
SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4s
IGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICBpZiAobVN0YXRlLmNvbG9yTWFza1JlZCAh
PSByZWQgfHwgbVN0YXRlLmNvbG9yTWFza0dyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhICE9IGFscGhh
KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHJlZDsKLSAgICAgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVl
ID0gYmx1ZTsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gYWxwaGE7Ci0gICAgICAg
IG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERl
cHRoTWFzayhib29sIG1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgIT0gbWFzaykK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSBtYXNrOwotICAgICAgICBtTWFza1N0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRBY3RpdmVTYW1w
bGVyKHVuc2lnbmVkIGludCBhY3RpdmUpCi17Ci0gICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBh
Y3RpdmU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBj
b25zdAotewotICAgIHJldHVybiBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQg
Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1
ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQo
KTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0
OjpnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIFF1ZXJ5ICpxdWVy
eU9iamVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBxdWVyeU9iamVjdCA9IG1T
dGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9F
WFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHF1ZXJ5
T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250
ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQotewotICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7Ci19Ci0KLWNvbnN0IHZvaWQgKkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVy
OwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0
cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0
YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENvbnRleHQ6OmdldFBh
Y2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsK
LX0KLQotdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQot
ewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRl
cihib29sIHJldmVyc2VSb3dPcmRlcikKLXsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRl
ciA9IHJldmVyc2VSb3dPcmRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJv
d09yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7
Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtUmVz
b3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZVByb2dyYW0oKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVQcm9ncmFt
KCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0g
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotR0x1
aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5jcmVhdGVUZXh0dXJlKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZm
ZXIoKTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQotR0x1aW50
IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZy
YW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtRnJhbWVidWZmZXJN
YXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1HTHVpbnQgQ29u
dGV4dDo6Y3JlYXRlRmVuY2UoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVB
bGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GZW5jZU1hcFtoYW5kbGVdID0gbmV3IEZlbmNl
KG1EaXNwbGF5KTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51
c2VkIHF1ZXJ5IG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbVF1
ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBD
b250ZXh0OjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBpZiAobVJlc291cmNl
TWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAgICBkZXRhY2hCdWZmZXIo
YnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVy
KGJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIp
Ci17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgIG1DYWNoZWRDdXJyZW50UHJv
Z3JhbSA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4
dHVyZSkKLXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkK
LSAgICB7Ci0gICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgbVJl
c291cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAobVJl
c291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAg
ICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAg
bVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewot
ICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1
ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCAh
PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZyYW1lYnVm
ZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFzZShmcmFtZWJ1
ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWlu
dCBmZW5jZSkKLXsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VN
YXAuZmluZChmZW5jZSk7Ci0KLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgp
KQotICAgIHsKLSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmpl
Y3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAg
IG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVl
cnlPYmplY3QgPSBtUXVlcnlNYXAuZmluZChxdWVyeSk7Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0ICE9
IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeUhhbmRsZUFsbG9jYXRvci5y
ZWxlYXNlKHF1ZXJ5T2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vj
b25kKQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeU9iamVjdC0+c2Vjb25kLT5yZWxlYXNl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVF1ZXJ5TWFwLmVyYXNlKHF1ZXJ5T2JqZWN0KTsKLSAg
ICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKEdMdWludCBoYW5kbGUpCi17Ci0g
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwotfQotCi1TaGFk
ZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2Vy
LT5nZXRQcm9ncmFtKGhhbmRsZSk7Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUo
R0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVy
ZShoYW5kbGUpOwotfQotCi1SZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihH
THVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJi
dWZmZXIoaGFuZGxlKTsKLX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1
ZmZlcigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZm
ZXIpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwotfQotCi12b2lkIENvbnRleHQ6OmJp
bmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmFycmF5QnVm
ZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEVsZW1l
bnRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJp
bmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEKTsKLQotICAgIG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRl
eHR1cmUodGV4dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChH
THVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxv
Y2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4
dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAg
IHsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZl
cigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsK
LX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cikKLXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAg
ICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAg
ICB9Ci0KLSAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci0KLSAgICBt
Qm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewot
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihyZW5kZXJi
dWZmZXIpOwotCi0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dy
YW0pCi17Ci0gICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsK
LSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAgIC8vIE11
c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25seSBnZXRz
IGZsYWdnZWQuCi0KLSAgICBpZiAocHJpb3JQcm9ncmFtICE9IHByb2dyYW0pCi0gICAgewotICAg
ICAgICBQcm9ncmFtICpuZXdQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLSAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXIt
PmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsKLSAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFt
ID0gTlVMTDsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KG5ld1Byb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkUHJvZ3JhbSkKLSAgICAgICAg
ewotICAgICAgICAgICAgb2xkUHJvZ3JhbS0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5
KQotewotICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1
ZXJ5RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIAotICAgIC8vIG9mIHplcm8sIGlmIHRoZSBh
Y3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhl
ICAKLSAgICAvLyB0YXJnZXRzIEFOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEFOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULCBpZiAgCi0gICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBm
b3IgZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4g
Ci0gICAgLy8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2gg
PHRhcmdldD4sIG9yIGlmIDxpZD4gaXMgdGhlCi0gICAgLy8gYWN0aXZlIHF1ZXJ5IG9iamVjdCBu
YW1lIGZvciBhbnkgcXVlcnkgdHlwZSwgdGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzCi0g
ICAgLy8gZ2VuZXJhdGVkLgotCi0gICAgLy8gRW5zdXJlIG5vIG90aGVyIHF1ZXJpZXMgYXJlIGFj
dGl2ZQotICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24gYXJlIHN1
cHBvcnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrCi0gICAgLy8gc2VwYXJhdGVseSB0aGF0Ogot
ICAgIC8vICAgIGEpIFRoZSBxdWVyeSBJRCBwYXNzZWQgaXMgbm90IHRoZSBjdXJyZW50IGFjdGl2
ZSBxdWVyeSBmb3IgYW55IHRhcmdldC90eXBlCi0gICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFj
dGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlCi0g
ICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCi0gICAgLy8gICAgICAgbm8gcXVlcnkgbWF5IGJl
IGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRzIGVpdGhlci4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwg
dGFyZ2V0KTsKLQotICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdl
blF1ZXJpZXMKLSAgICBpZiAoIXF1ZXJ5T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBmb3IgdHlw
ZSBtaXNtYXRjaAotICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlwZSgpICE9IHRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQot
Ci0gICAgLy8gc2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldAotICAgIG1T
dGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5T2JqZWN0KTsKLQotICAgIC8vIGJlZ2lu
IHF1ZXJ5Ci0gICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZW5k
UXVlcnkoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBRdWVyeVR5cGUgcVR5cGU7Ci0KLSAgICBzd2l0
Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDog
Ci0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsg
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOwotCi0gICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5V
TEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKLQotICAgIG1TdGF0ZS5hY3RpdmVRdWVy
eVtxVHlwZV0uc2V0KE5VTEwpOwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVy
byhGcmFtZWJ1ZmZlciAqYnVmZmVyKQotewotICAgIGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07
Ci0gICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwotICAgIGlmIChtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyID09IDApCi0gICAgewotICAgICAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBi
dWZmZXI7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
UmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQotewotICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKLSAgICByZW5k
ZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKLX0KLQotRnJhbWVidWZm
ZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAg
RnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZp
bmQoaGFuZGxlKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJhbWVidWZmZXJNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1GZW5jZSAq
Q29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBGZW5jZU1hcDo6
aXRlcmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZlbmNl
ID09IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsKLSAgICB9Ci19
Ci0KLVF1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25lZCBpbnQgaGFuZGxlLCBib29sIGNy
ZWF0ZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1
ZXJ5TWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChxdWVyeSA9PSBtUXVlcnlNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcXVlcnktPnNlY29uZCA9IG5ldyBRdWVyeShoYW5kbGUsIHR5cGUpOwotICAgICAgICAgICAg
cXVlcnktPnNlY29uZC0+YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1ZXJ5
LT5zZWNvbmQ7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwotfQotCi1CdWZmZXIgKkNv
bnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldEN1cnJlbnRQ
cm9ncmFtKCkKLXsKLSAgICBpZiAoIW1DYWNoZWRDdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAg
ICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0o
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50
UHJvZ3JhbTsKLX0KLQotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUu
YWN0aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOwotfQotCi1UZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
Q3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJF
X0NVQkUpKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWdu
ZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCi17Ci0gICAgR0x1aW50IHRleGlkID0g
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7Ci0KLSAgICBpZiAodGV4
aWQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFs
IHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7Ci0gICAgICAg
ICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBl
XVtzYW1wbGVyXS5nZXQoKTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0g
cG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQotewotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewot
ICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICAqcGFyYW1zID0gR0xfVFJV
RTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZl
cnQ7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0
ZS5jb2xvck1hc2tSZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVl
bjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yTWFza0JsdWU7Ci0gICAgICAgIHBh
cmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbEZh
Y2U7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2U7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNU
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhU
ZXN0OyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNz
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0
OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxl
YXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBn
ZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBh
IGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0g
ICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291
bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1h
a2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2gg
KHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVy
YWdlVmFsdWU7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25P
ZmZzZXRGYWN0b3I7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBn
bDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gZ2w6
OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGdsOjpB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0
c1NoYWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDog
Z2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVh
cjsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWUuYmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBo
YTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1T
dGF0ZS5ibGVuZENvbG9yLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuYmxlbmRD
b2xvci5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBERVBU
SF9DTEVBUl9WQUxVRSBpcyBub3QgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEludGVnZXJ2
IGltcGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwg
ZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdl
dEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVp
cmUgY29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRp
ZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIFlvdSBtYXkgZmluZCBpdCBpbiAK
LSAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFS
WUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdl
dE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURF
Ul9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1B
VFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJh
bXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAg
Ly9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxl
bnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0gICAgICBjYXNlIEdMX0RS
QVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFt
ZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzog
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5w
YWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOUEFD
S19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQ
X0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElW
RV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVO
QzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7ICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0
aFBhc3M7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDog
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JM
RU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FM
UEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0
ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dS
SVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBn
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAKLSAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9T
QU1QTEVTX0FOR0xFOgotICAgICAgICB7Ci0gICAgICAgICAgICBHTHNpemVpIG1heFNhbXBsZXMg
PSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAh
PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtYXhTYW1wbGVz
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAg
ICAgICAgIAotICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkg
IT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQ6ICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9G
T1JNQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9IHN0ZDo6bWF4KGdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24oKSwgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSk7Ci0gICAg
ICAgICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247Ci0gICAgICAgICAgICBwYXJhbXNbMV0g
PSBtYXhEaW1lbnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAq
cGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOwotICAgICAgICAgICAg
ICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUu
dmlld3BvcnRZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsKLSAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0OwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5z
Y2lzc29yWDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICBw
YXJhbXNbMl0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3Rh
dGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFD
RV9NT0RFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgot
ICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVy
ID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAg
KnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3Jl
ZW5TaXplKCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRBbHBo
YVNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9E
RVBUSF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotCi0gICAg
ICAgICAgICBpZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KTsKLQotICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxl
ciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RF
WFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FU
SU9OX1NUUkFURUdZX0VYVDoKLSAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5OwotICAg
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
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAq
dHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJ
RVdQT1JUOgotICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgewotICAgICAgICAg
ICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgotICAgICAg
Y2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgY2FzZSBHTF9ERVBUSF9XUklU
RU1BU0s6Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9G
QUNFIHRocm91Z2ggRElUSEVSIGFyZSBuYXR1cmFsIHRvIElzRW5hYmxlZCwKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJv
dWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMuCi0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRTogLy8gRm9yIHRoaXMgcHVycG9zZSwgdGhleSBhcmUgdHJlYXRlZCBoZXJlIGFz
IGJvb2wtbmF0dXJhbAotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6Ci0gICAgICBjYXNl
IEdMX1NDSVNTT1JfVEVTVDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOgotICAgICAgY2Fz
ZSBHTF9ERVBUSF9URVNUOgotICAgICAgY2FzZSBHTF9CTEVORDoKLSAgICAgIGNhc2UgR0xfRElU
SEVSOgotICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0g
MTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVN
QVNLOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAg
ICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOgotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9V
TklUUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgY2FzZSBH
TF9ERVBUSF9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDoKLSAgICAgICAg
ewotICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0U6Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToK
LSAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBl
ID0gR0xfRkxPQVQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0NPTE9SOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FU
OwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVw
dGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5nbGUgYW5kCi0vLyBzY2lzc29yIHJl
Y3RhbmdsZSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLWJvb2wgQ29udGV4dDo6YXBwbHlSZW5k
ZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZm
ZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgYm9vbCByZW5kZXJU
YXJnZXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwoKTsKLSAgICBpZiAo
cmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQotICAgIHsK
LSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9z
dAotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJU
YXJnZXQpOwotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdl
dFNlcmlhbDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsgLy8gU2Npc3NvciBh
cmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0tIHRoaXMgaXMgZGlm
ZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuCi0gICAgICAgIHJlbmRlclRhcmdl
dENoYW5nZWQgPSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9
Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
YnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAg
ICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRo
IHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0U2VyaWFsKCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYg
KCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2VyaWFsKCk7Ci0gICAgfQot
Ci0gICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
fHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJT
ZXJpYWwgfHwKLSAgICAgICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsKLSAgICAg
ICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwotICAgICAg
ICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOwotICAg
ICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
bVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQotICAg
IHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUg
bG9zdAotICAgICAgICB9Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRh
cmdldERlc2MpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsK
LSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgRDNEVklFV1BP
UlQ5IHZpZXdwb3J0OwotCi0gICAgZmxvYXQgek5lYXIgPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7
Ci0gICAgZmxvYXQgekZhciA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOwotCi0gICAgaWYgKGlnbm9y
ZVZpZXdwb3J0KQotICAgIHsKLSAgICAgICAgdmlld3BvcnQuWCA9IDA7Ci0gICAgICAgIHZpZXdw
b3J0LlkgPSAwOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IG1SZW5kZXJUYXJnZXREZXNjLldp
ZHRoOwotICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7
Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOwotICAgICAgICB2aWV3cG9ydC5NYXhaID0g
MS4wZjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KG1TdGF0ZS52aWV3cG9ydFgsIG1TdGF0ZS52aWV3cG9ydFksIG1TdGF0ZS52
aWV3cG9ydFdpZHRoLCBtU3RhdGUudmlld3BvcnRIZWlnaHQsIG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCk7Ci0gICAgICAgIHZpZXdwb3J0LlggPSBjbGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNf
Y2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICB2aWV3cG9ydC5Z
ID0gY2xhbXAocmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVz
Yy5IZWlnaHQpKTsKLSAgICAgICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgp
IC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOwotICAgICAgICB2aWV3cG9ydC5IZWln
aHQgPSBjbGFtcChyZWN0LmJvdHRvbSAtIHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
bVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0Llkp
KTsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IHpOZWFyOwotICAgICAgICB2aWV3cG9ydC5NYXha
ID0gekZhcjsKLSAgICB9Ci0KLSAgICBpZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9y
dC5IZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5n
IHRvIHJlbmRlcgotICAgIH0KLQotICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmll
d3BvcnRJbml0aWFsaXplZCB8fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXpl
b2YgbVNldFZpZXdwb3J0KSAhPSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0Vmlld3Bv
cnQoJnZpZXdwb3J0KTsKLSAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0gICAgICAg
IG1WaWV3cG9ydEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qg
cmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUuc2Npc3NvclgsIG1TdGF0ZS5zY2lzc29y
WSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIG1SZW5kZXJUYXJn
ZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChyZWN0LmxlZnQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAg
ICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1S
ZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1w
KHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0
aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRvbSwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgIEdMaW50IGhh
bGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYg
LyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2
KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKLQotICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVz
ZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCku
IFRoZSBhcHByb2FjaCBkZXBlbmRzIG9uIFNoYWRlciBNb2RlbCAzLjAgc3VwcG9ydC4KLSAgICAg
ICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtT2JqZWN0LT5nZXREeENvb3JkTG9jYXRpb24oKTsKLSAg
ICAgICAgZmxvYXQgaCA9IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodCA6IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGY7Ci0gICAgICAgIEdMZmxvYXQg
d2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIGgsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdp
ZHRoIC8gMi4wZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmll
d3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1P
YmplY3QtPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwotCi0gICAgICAgIEdMaW50IGRl
cHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxv
YXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9
OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7Ci0K
LSAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhSYW5n
ZUxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpG
YXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYo
ZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIGZp
eGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywg
c3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6
YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJP
YmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMZW51bSBhZGp1c3RlZEZyb250
RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0KLSAgICBHTGludCBmcm9u
dENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOwotICAgIEdMaW50
IGNjdyA9IChhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOwotCi0gICAgR0xpbnQgcG9pbnRzT3JM
aW5lcyA9IHByb2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7Ci0gICAg
R0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsK
LQotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0
QWRhcHRlcklkZW50aWZpZXIoKTsKLSAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRl
bnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwotICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkg
Y2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKLSAgICAvLyB3
cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRz
LiBJbnN0ZWFkLAotICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3JpdGUgbWFzayBidXQgbW9k
aWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgLy8gZHJhd2luZyBpcyBkb25lLgot
ICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFp
bD9pZD0xNjkKLQotICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQot
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0
Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBhZGp1c3RlZEZyb250RmFjZSkpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RhdGVE
aXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9U
UlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBl
czJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
cHRoU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghemVyb0NvbG9yTWFza0Fs
bG93ZWQgJiYgKG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0g
ICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBtTWFza1N0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAg
ICAgaWYgKG1TdGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAg
IGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAg
ICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0
YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdC
QSh1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9y
bTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5j
KG1TdGF0ZS5zb3VyY2VCbGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVz
dEJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsK
LQotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNl
QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1T
dGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVh
dGlvblJHQiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFC
TEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUu
c291cmNlQmxlbmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUu
ZGVzdEJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19CTEVORE9QQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRF
cXVhdGlvbkFscGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQ
QVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsU3Rh
dGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnN0
ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lE
RURTVEVOQ0lMTU9ERSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRl
ZCBieSBEM0Q5Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NX
X1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAgICAgY29uc3QgRDNEUkVO
REVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOwot
ICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJ
VEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAgICAgIGlmIChtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgCi0gICAg
ICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8
IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJh
Y2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJv
bnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwg
bWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0g
KDEgPDwgc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNf
Q0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbFJl
ZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0
YXRlLnN0ZW5jaWxNYXNrKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTEZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NX
X1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7Ci0KLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NX
ID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6
IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0K
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRl
LnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNr
UmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NX
X1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFj
a0ZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxa
RkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNE
UlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxz
ZTsKLSAgICAgICAgbUZyb250RmFjZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1N
YXNrU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGludCBjb2xvck1hc2sgPSBlczJkeDo6Q29u
dmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4s
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRl
LmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSk7Ci0gICAgICAgIGlmIChjb2xv
ck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93ZWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcg
d2lsbCBiZSBkcmF3bi4KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7
Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBE
M0RCTEVORF9aRVJPKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFU1RCTEVORCwgRDNEQkxFTkRfT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1BfQUREKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNr
ID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAobVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQ
VEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cywgLShpbnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOwotICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0
aEJpYXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVQVEhCSUFTLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU2FtcGxlU3RhdGVEaXJ0eSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50
ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxl
Q292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1w
bGVzKCk7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1hc2sg
PDw9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VWYWx1ZSA+PSB0aHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBmOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFzayB8PSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUNvdmVyYWdlSW52ZXJ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hc2sg
PSB+bWFzazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGl0aGVyU3RhdGVEaXJ0
eSkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVO
QUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbURpdGhlclN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb250ZXh0OjphcHBseVZlcnRl
eEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdM
c2l6ZWkgKnJlcGVhdERyYXcpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVz
W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5h
Z2VyLT5wcmVwYXJlVmVydGV4RGF0YShmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNl
cyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVj
bGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgZ2V0Q3VycmVudFByb2dyYW0oKSwgaW5zdGFu
Y2VzLCByZXBlYXREcmF3KTsKLX0KLQotLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVu
dCBhcnJheSBiaW5kaW5ncyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLUdMZW51bSBDb250ZXh0
OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwg
R0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8p
Ci17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRh
KHR5cGUsIGNvdW50LCBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBp
bmRleEluZm8pOwotCi0gICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwot
ICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gQXBwbGllcyB0aGUgc2hhZGVy
cyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29u
dGV4dDo6YXBwbHlTaGFkZXJzKCkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
Q3VycmVudFByb2dyYW0oKTsKLSAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0g
bUFwcGxpZWRQcm9ncmFtU2VyaWFsKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0g
ICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBp
eGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRl
cik7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAgICAg
bUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7Ci0gICAg
fQotCi0gICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlVbmlmb3JtcygpOwotfQotCi0vLyBBcHBsaWVz
IHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Ci12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQotewotICAgIGFwcGx5VGV4dHVyZXMoU0FN
UExFUl9QSVhFTCk7Ci0KLSAgICBpZiAobVN1cHBvcnRzVmVydGV4VGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9WRVJURVgpOwotICAgIH0KLX0KLQotLy8gRm9y
IGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0
YWdlLAotLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2Ug
dW5pdCBhbmQgdGV4dHVyZSB0eXBlLAotLy8gYW5kIHNldHMgdGhlIHRleHR1cmUgYW5kIGl0cyBh
ZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZlKS4KLXZvaWQg
Q29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQotewotICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgaW50IHNhbXBsZXJD
b3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
OiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERpcmVj
dDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCi0gICAgdW5zaWduZWQgaW50ICph
cHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gbUFwcGxpZWRU
ZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsKLSAgICBpbnQgZDNkU2Ft
cGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRV
UkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0VXNl
ZFNhbXBsZXJSYW5nZSh0eXBlKTsKLQotICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNh
bXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspCi0gICAgewotICAgICAg
ICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBl
LCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKLSAg
ICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0Owot
Ci0gICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAg
VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVy
ZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKLQotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVy
ZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0
ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUo
KTsKLQotICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFy
YW1ldGVycygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBtaW5GaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNaW5GaWx0ZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdG
aWx0ZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0
YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1UsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdy
YXAod3JhcFMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVX
cmFwKHdyYXBUKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdG
aWx0ZXIobWFnRmlsdGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEM0RURVhUVVJFRklM
VEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQz
ZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRlcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwg
RDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlcklu
ZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJ
bWFnZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQz
ZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgp
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwotICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsKLSAgICAgICAgICAgICAg
ICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBsZXJS
YW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5kZXgrKykKLSAgICB7
Ci0gICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsg
ZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7Ci0gICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlh
bFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIt
PmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZl
ci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21w
dXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tBbGlnbm1lbnQpOwotICAg
IC8vIHNpemVkIHF1ZXJ5IHNhbml0eSBjaGVjawotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAg
ICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0OwotICAgICAgICBp
ZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRh
cmdldCgpOwotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAg
IC8vIENvbnRleHQgbXVzdCBiZSBsb3N0LCByZXR1cm4gc2lsZW50bHkKLSAgICB9Ci0KLSAgICBE
M0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwot
Ci0gICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCi0g
ICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29s
dmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQK
LSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1Bp
eGVscyA9IGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0g
NCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlO
VChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYg
dHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7
Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3Jp
dGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBk
ZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5
IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4
ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxz
KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5T
dXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVN
TUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQg
PSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3VyZmFj
ZSk7Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgcmVuZGVyVGFyZ2V0ID0gTlVM
TDsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBz
b21ldGltZXMgcHJvZHVjZSBtb3JlIGVycm9yCi0gICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2Ug
ZG9jdW1lbnRlZC4KLSAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAg
ICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlc2MuSGVpZ2h0KTsKLSAgICByZWN0LmxlZnQgPSBj
bGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAg
cmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVp
Z2h0KSk7Ci0gICAgcmVjdC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRv
bSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICByZXN1bHQgPSBz
eXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybjsgICAv
LyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQotICAgIH0KLQotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0ICpk
ZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKLQotICAgIHVuc2lnbmVkIGNoYXIgKnNv
dXJjZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRl
cigpKQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7
Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5Q
aXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2gg
PSAtbG9jay5QaXRjaDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90
dG9tIC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBE
M0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgot
ICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBGYXN0IHBhdGggZm9yIEVYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBnaXZlbgotICAgICAg
ICAgICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBu
bwotICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lgot
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAg
ICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQpICogNCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQg
ZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkg
KyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAg
ICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwot
ICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
MiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdi
ICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2Ig
JiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFy
Z2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJn
YiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4
RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAq
ICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4
MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9
IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQ
aXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBp
bnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAw
M0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4w
ZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAw
MDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBp
biBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0g
ICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3Vy
Y2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAg
YiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0g
ICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBz
dG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBhYmdyWzRdOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhGbG9hdDE2
VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0
UGl0Y2gpLCA0KTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gYWJnclszXTsKLSAgICAgICAg
ICAgICAgICAgICAgYiA9IGFiZ3JbMl07Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBhYmdyWzFd
OwotICAgICAgICAgICAgICAgICAgICByID0gYWJnclswXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3Ag
R0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAv
LyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAg
ICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBv
ZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBz
byBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlw
ZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0
ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAg
ICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAg
ICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAot
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAg
IGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41Zikg
PDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX1RZUEUKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotCi0gICAg
c3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0
ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OKTsKLSAgICB9Ci0KLSAgICBEV09SRCBmbGFncyA9IDA7Ci0KLSAgICBpZiAobWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOwotCi0gICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xF
QVJfVEFSR0VUOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9C
VUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVSX0JJVDsK
LSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERl
cHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IEQzRENMRUFSX1pCVUZGRVI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHVpbnQgc3Rl
bmNpbFVubWFza2VkID0gMHgwOwotCi0gICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAg
ICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVu
Y2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVs
bC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAgZGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxTaXplID0gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKLSAgICAgICAgICAg
IHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKLQotICAgICAgICAg
ICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChtYXNrICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRhcmdl
dCh0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1
dCBub3QgdGhlIHZpZXdwb3J0Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
RDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYWxwaGEpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08
OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVh
clZhbHVlLmJsdWUpKTsKLSAgICBmbG9hdCBkZXB0aCA9IGNsYW1wMDEobVN0YXRlLmRlcHRoQ2xl
YXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgJiAw
eDAwMDAwMEZGOwotCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGR4MmVzOjpHZXRBbHBoYVNp
emUobVJlbmRlclRhcmdldERlc2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNrQWxw
aGE7Ci0KLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBE
M0RDTEVBUl9TVEVOQ0lMKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNp
bFVubWFza2VkOwotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3Mg
JiBEM0RDTEVBUl9UQVJHRVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1
ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBu
ZWVkTWFza2VkU3RlbmNpbENsZWFyKQotICAgIHsKLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMg
YWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxsIGlz
IHNhdmVkLgotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBw
YXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAotICAgICAgICAvLyAg
dGhhdCBwYXRoIGlzIHRha2VuLgotICAgICAgICBIUkVTVUxUIGhyOwotICAgICAgICBpZiAobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9
IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1F
TU9SWSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklU
RUVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpS
SFcgfCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2UoMCwgTlVMTCwgMCwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRT
U19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4
dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFS
RzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhyID0gbURldmljZS0+
RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlICE9IE5VTEwpOwotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0
YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZS0+Q2FwdHVyZSgpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRF
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pG
VU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotCi0g
ICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgZXMyZHg6
OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dy
ZWVuLCBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAmIEQzRENMRUFSX1NURU5D
SUwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5j
aWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxaRkFJTCwg
RDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RU
T1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcx
LCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
VEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0gICAgICAgIGZvcihpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZsb2F0IHF1YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRoZSB0YXJn
ZXQsIGFsaWduZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzCi0gICAgICAgIHF1YWRbMF1bMF0gPSAtMC41
ZjsKLSAgICAgICAgcXVhZFswXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7
Ci0gICAgICAgIHF1YWRbMF1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsK
LQotICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwot
ICAgICAgICBxdWFkWzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKLSAg
ICAgICAgcXVhZFsxXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMV1bM10gPSAxLjBmOwotCi0g
ICAgICAgIHF1YWRbMl1bMF0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsxXSA9IC0wLjVmOwot
ICAgICAgICBxdWFkWzJdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsyXVszXSA9IDEuMGY7Ci0K
LSAgICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsKLSAg
ICAgICAgcXVhZFszXVsxXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzNdWzJdID0gMC4wZjsKLSAg
ICAgICAgcXVhZFszXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUo
KTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAs
IDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAgICAgIGlmIChmbGFncyAmIEQzRENM
RUFSX1pCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkNs
ZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZsYWdzKQotICAgIHsKLSAgICAgICAgbURl
dmljZS0+Q2xlYXIoMCwgTlVMTCwgZmxhZ3MsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBpZiAoIW1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwot
ICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2
ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVD
b3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBw
bHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOwotICAg
IEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihmaXJzdCwgY291bnQsIGluc3RhbmNlcywg
JnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRl
U2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAg
ewotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3TGluZUxv
b3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KGluc3RhbmNlcyA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVy
ICpjb3VudGluZ0lCID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3Vu
dCk7Ci0gICAgICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGlj
ZXMoY291bnRpbmdJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBtQXBwbGll
ZElCU2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhl
ZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgcHJpbWl0aXZlQ291bnQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3Vu
dGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2
ZUNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKLSAgICBpbnQgcHJp
bWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUs
IGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFy
Z2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhcHBseVN0
YXRlKG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87Ci0gICAgR0xl
bnVtIGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZp
bmRleEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5k
ZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKLSAgICBHTHNpemVpIHJl
cGVhdERyYXcgPSAxOwotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5J
bmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9
Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAo
IWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+c3RhcnRT
Y2VuZSgpOwotCi0gICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8u
bWluSW5kZXgpOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZl
VHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRl
eENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBi
bG9jayBpcyBmYWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVlCi12b2lkIENvbnRleHQ6
OnN5bmMoYm9vbCBibG9jaykKLXsKLSAgICBtRGlzcGxheS0+c3luYyhibG9jayk7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBp
bmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpCi0gICAgewotICAgICAgICBCdWZmZXIgKmlu
ZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKLSAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAg
ICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kZXhCdWZmZXItPmRh
dGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgVUlOVCBzdGFydEluZGV4ID0gMDsKLSAgICBi
b29sIHN1Y2NlZWRlZCA9IGZhbHNlOwotCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkp
Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNp
emVvZih1bnNpZ25lZCBpbnQpOwotCi0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1E
ZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAg
bUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKTsK
LQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVMb29wSUItPm1hcChzcGFj
ZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRp
Y2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgp
OwotICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHNwYWNlTmVl
ZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotCi0gICAgICAgIGlm
ICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3
IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUs
IEQzREZNVF9JTkRFWDE2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikK
LSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5l
ZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAg
ICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8g
Tm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOwotICAgICAgICAgICAgICAgIHN1Y2NlZWRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KHN1Y2NlZWRlZCkKLSAgICB7Ci0gICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5l
TG9vcElCLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgbUFwcGxpZWRJ
QlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKEQzRFBUX0xJTkVTVFJJUCwgLW1pbkluZGV4
LCBtaW5JbmRleCwgY291bnQsIHN0YXJ0SW5kZXgsIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgbG9vcGluZyBpbmRleCBidWZm
ZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRW51bSgpCi17
Ci0gICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUoKQotewotICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOwotfQotCi12b2lkIENvbnRl
eHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCi17Ci0gICAgbU91
dE9mTWVtb3J5ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVi
dWZmZXJPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0
cnVlOwotfQotCi0vLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0
cyBmbGFnLCBpZiBhbnkuCi0vLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAx
My4KLUdMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1JbnZhbGlkRW51bSkK
LSAgICB7Ci0gICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBH
TF9JTlZBTElEX0VOVU07Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkVmFsdWUpCi0gICAgewot
ICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfVkFMVUU7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQotICAgIHsKLSAg
ICAgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKG1PdXRPZk1lbW9yeSkKLSAgICB7Ci0g
ICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9PVVRfT0Zf
TUVNT1JZOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKQot
ICAgIHsKLSAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUdMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0
YXR1cygpCi17Ci0gICAgaWYgKG1SZXNldFN0YXR1cyA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0g
ICAgICAgIGJvb2wgbG9zdCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOwotCi0gICAgICAg
IGlmIChsb3N0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNl
TG9zdCgpOyAgIC8vIFNldHMgbVJlc2V0U3RhdHVzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBH
TGVudW0gc3RhdHVzID0gbVJlc2V0U3RhdHVzOwotCi0gICAgaWYgKG1SZXNldFN0YXR1cyAhPSBH
TF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0
dGFibGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJS
T1I7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9v
bCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuICht
UmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsKLX0KLQotYm9v
bCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dXBwb3J0c1NoYWRlck1vZGVsMzsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5n
VmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1B
WF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7Ci19Ci0KLXVu
c2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBj
b25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCk7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9y
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19T
TTI7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBj
b25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBy
ZXF1ZXN0ZWQ7Ci0gICAgfQotCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25z
dF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKLSAgICBp
ZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxU
SVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRb
aV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNPY2Ns
dXNpb25RdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDNU
ZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0Zsb2F0MzJUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5l
YXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVy
ZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhSZW5kZXJidWZm
ZXJEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQg
Q29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4
aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwotfQotCi1ib29sIENvbnRl
eHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3Vw
cG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdElu
ZGljZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsKLX0KLQotYm9vbCBD
b250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9y
dHNJbnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIyOgot
ICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0IGlzIGJvdW5kLCBh
bGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQgY29udGV4dAotICAgIC8v
IChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNl
dCB0byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgewot
ICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0
KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaFRleHR1
cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
My44IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBpdCBp
cyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0dXJl
IG9iamVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8KLQotICAg
IGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0g
ICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCkgPT0gdGV4
dHVyZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTEyOgot
ICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMg
YXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhlbiBpdCBpcwot
ICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBh
IHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGljaCB0aGlzCi0g
ICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZm
ZXIuCi0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJh
d0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCi0gICAg
ewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDc6Ci0g
ICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFy
Z2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaAotICAgIC8vIEJpbmRG
cmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZG
RVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1
ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIo
MCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZm
ZXIpCi0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6Ci0gICAgLy8g
SWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVS
IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCi0gICAgLy8gaGFk
IGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6
ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKSA9PSByZW5kZXJidWZmZXIp
Ci0gICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwotICAgIH0KLQotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToKLSAgICAvLyBJZiBhIHJlbmRl
cmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8g
dGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAgICAvLyB0aGVuIGl0IGlzIGFzIGlm
IEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1
ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhp
cyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4K
LQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1l
YnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIp
Ci0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5k
ZXJidWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRl
eHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVU
ZXh0dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09IE5VTEwpCi0gICAgewotICAgICAg
ICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKLQotICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsbHMgdGhyb3Vn
aCB0byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAgICAgICAgICAgICAgaW5j
b21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAx
LCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3Vi
ZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwot
Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBs
ZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgw
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
LSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0KLSAgICAgICAgICAgICAgdCA9IGlu
Y29tcGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51bSBk
cmF3TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9k
ZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQotewotICAgIHN3
aXRjaCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICBj
YXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICBjYXNlIEdMX0xJ
TkVTOgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0
dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKLXsKLSAgICBBU1NFUlQo
aW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJd
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2
YWx1ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGlu
ZGV4KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBp
bmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tRGl2aXNv
ciA9IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVy
Ci0vLyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNp
b25zCi12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIG1FeHRlbnNp
b25TdHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVy
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJl
X2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0
X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3Qg
IjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIGlm
IChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOwotICAgIH0KLQotICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKLQotICAgIGlmIChzdXBwb3J0
c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOwotICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLQotICAgIC8vIEFOR0xFLXNw
ZWNpZmljIGV4dGVuc2lvbnMKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUgIjsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJy
YXlzICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfcGFja19y
ZXZlcnNlX3Jvd19vcmRlciAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDMgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV90ZXh0dXJlX3VzYWdlICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdHJh
bnNsYXRlZF9zaGFkZXJfc291cmNlICI7Ci0KLSAgICAvLyBPdGhlciB2ZW5kb3Itc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKLSAgICB9Ci0KLSAgICBzdGQ6
OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9v
ZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6aW5pdFJlbmRlcmVyU3Ry
aW5nKCkKLXsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3Bs
YXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0KLSAgICBtUmVuZGVyZXJTdHJpbmcgPSAiQU5H
TEUgKCI7Ci0gICAgbVJlbmRlcmVyU3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOwot
ICAgIG1SZW5kZXJlclN0cmluZyArPSAiKSI7Ci19Ci0KLWNvbnN0IGNoYXIgKkNvbnRleHQ6Omdl
dFJlbmRlcmVyU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nLmNf
c3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBH
TGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQot
ewotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0KLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJh
bWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGludCByZWFkQnVmZmVyV2lkdGggPSByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IHJlYWRCdWZm
ZXJIZWlnaHQgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgp
OwotICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IGRyYXdCdWZmZXJIZWlnaHQgPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOwotCi0gICAgUkVDVCBzb3VyY2VS
ZWN0OwotICAgIFJFQ1QgZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3JjWDAgPCBzcmNYMSkKLSAgICB7
Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gwOwotICAgICAgICBzb3VyY2VSZWN0LnJp
Z2h0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMDsKLSAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMTsKLSAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gwOwotICAgICAgICBkZXN0UmVjdC5yaWdodCA9
IGRzdFgwOwotICAgIH0KLQotICAgIGlmIChzcmNZMCA8IHNyY1kxKQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RS
ZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRv
bSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAg
IGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICAgICAgc291cmNl
UmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0
LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSRUNUIHNv
dXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFNjaXNzb3JlZFJl
Y3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgewotICAg
ICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZl
ciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKLSAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRo
ZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCog
b2YgdGhlCi0gICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3Nvclks
IHJhdGhlciB0aGFuIHRoZSBib3R0b20uCi0gICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0
YXRlLnNjaXNzb3JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYgPSBtU3RhdGUu
c2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3Qu
bGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qu
bGVmdCArPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+
IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1T
dGF0ZS5zY2lzc29yV2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQg
PSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICAgICAgc291
cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsKLSAgICAgICAgICAg
IGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20gLSAo
bVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwotICAgICAgICAgICAgZGVz
dFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQ7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOwot
ICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAgUkVDVCBzb3VyY2VUcmlt
bWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUkVDVCBkZXN0VHJpbW1lZFJlY3Qg
PSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9m
IHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2Vz
LgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAgICB7Ci0gICAgICAgIGlu
dCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7
Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID4gcmVhZEJ1ZmZlcldp
ZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1lZFJlY3QucmlnaHQg
LSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID0gcmVh
ZEJ1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7Ci0g
ICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewotICAgICAg
ICBpbnQgeURpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QudG9wOwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC50b3AgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wICs9IHlEaWZm
OwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPiByZWFkQnVmZmVy
SGVpZ2h0KQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gc291cmNlVHJpbW1lZFJlY3QuYm90
dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
ID0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsK
LSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QubGVmdCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQg
Kz0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRyYXdC
dWZmZXJXaWR0aCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5y
aWdodCAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID0g
ZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlm
ZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewotICAg
ICAgICBpbnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCArPSB5RGlm
ZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA+IGRyYXdCdWZmZXJI
ZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90dG9t
IC0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA9IGRy
YXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5RGlm
ZjsKLSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJlYWRC
dWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLSBzb3VyY2VU
cmltbWVkUmVjdC5sZWZ0IDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdCdWZmZXJIZWlnaHQgfHwK
LSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCBk
cmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICE9IDAgfHwg
ZGVzdFRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgIT0gMCB8
fCBkZXN0VHJpbW1lZFJlY3QubGVmdCAhPSAwKQotICAgIHsKLSAgICAgICAgcGFydGlhbEJ1ZmZl
ckNvcHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJ
VCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlwZSA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZG
RVI7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWREcmF3VHlwZSA9IGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAgICAgICAgZHJh
d0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7Ci0g
ICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fAotICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBC
bGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24i
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgYmxp
dFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIChHTF9ERVBU
SF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIFJl
bmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpk
cmF3RFNCdWZmZXIgPSBOVUxMOwotCi0gICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRl
cHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3RoIGEg
ZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KLQot
ICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2ls
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAg
ICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkg
IT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBi
bGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3
RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNp
bCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xlLWJ1
ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkcmF3
RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgCi0gICAgICAg
ICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERl
cHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0gICAg
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1JlbmRlclRhcmdl
dCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNv
dXJjZVRyaW1tZWRSZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1JlbmRlclRhcmdldCwgJmRlc3RUcmltbWVkUmVjdCwgRDNEVEVYRl9O
T05FKTsKLQotICAgICAgICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgZHJhd1JlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJh
bWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVM
TCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFp
bGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24g
PSBOVUxMOwotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsKLSAgICB9
Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVT
OyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0
ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0g
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9n
cmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICAqcmVw
ZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRU
UklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwot
Ci0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4
ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlz
b3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGJy
ZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUg
PT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBEM0RWRVJURVhFTEVN
RU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAgICBEM0RWRVJURVhFTEVN
RU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdHJlYW0gPSBpOwotCi0gICAg
ICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5n
IHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2VkLgotICAgICAgICAgICAg
ICAgIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAw
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0g
PSBpbmRleGVkQXR0cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRB
IHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2lu
Z0VuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0dHJpYnV0ZXNbaV0u
c2VyaWFsIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgIT0g
YXR0cmlidXRlc1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLm9mZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0ZXNbaV0u
dmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUp
OwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsID0gYXR0cmlidXRl
c1tpXS5zZXJpYWw7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUg
PSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Ci0gICAgICAgICAgICBlbGVtZW50LT5P
ZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlw
ZTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsK
LSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAg
ICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgo
aSk7Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklC
UykKLSAgICB7Ci0gICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVx
KGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhF
TEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVudCsrKSA9IGVuZDsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKLSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICplbnRyeSA9ICZtVmVydGV4
RGVjbENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywg
ZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5
KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAgICAgIGlmKGVudHJ5LT52
ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50cnktPnZlcnRleERlY2xh
cmF0aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZlcnRleERl
Y2xhcmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJS
T1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFzdENh
Y2hlID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4
RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3VudCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwot
ICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgLy8g
bUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZl
IHRvIHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQotICAgIG1lbWNweShsYXN0
Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBz
aXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xh
cmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgZGV2
aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsK
LSAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICBs
YXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9S
OwotfQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkKLXsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsK
LSAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNl
dFZEZWNsID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNl
cyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCi19Ci0KLX0KLQotZXh0ZXJuICJDIgot
ewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNo
YXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotfQotCi12b2lkIGdsRGVz
dHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgZGVsZXRlIGNvbnRleHQ7
Ci0KLSAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQotICAgIHsKLSAgICAgICAg
Z2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIH0KLX0KLQotdm9pZCBnbE1h
a2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBnbDo6bWFrZUN1cnJlbnQoY29udGV4dCwgZGlz
cGxheSwgc3VyZmFjZSk7Ci19Ci0KLWdsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCkK
LXsKLSAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKLX0KLX0KKy8vDQorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4N
CisvLw0KKw0KKy8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFz
cywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nDQorLy8gcmVuZGVyaW5nIG9w
ZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xD
b250ZXh0Lg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIg0KKw0KKyNpbmNsdWRl
IDxhbGdvcml0aG0+DQorDQorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiDQorDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIg0K
KyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9C
bGl0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCINCisjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCINCisj
aW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVy
LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiDQor
I2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiDQorDQorI3VuZGVmIG5lYXIN
CisjdW5kZWYgZmFyDQorDQorbmFtZXNwYWNlIGdsDQorew0KK0NvbnRleHQ6OkNvbnRleHQoY29u
c3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwg
Ym9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1Db25maWcoY29uZmlnKQ0K
K3sNCisgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRl
ZA0KKw0KKyAgICBtRGlzcGxheSA9IE5VTEw7DQorICAgIG1EZXZpY2UgPSBOVUxMOw0KKw0KKyAg
ICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsNCisNCisgICAgc2V0Q2xl
YXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsNCisNCisgICAgbVN0YXRlLmRlcHRoQ2xl
YXJWYWx1ZSA9IDEuMGY7DQorICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7DQorDQor
ICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOw0KKyAgICBtU3RhdGUuY3VsbE1vZGUgPSBHTF9C
QUNLOw0KKyAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOw0KKyAgICBtU3RhdGUuZGVwdGhU
ZXN0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9MRVNTOw0KKyAgICBtU3Rh
dGUuYmxlbmQgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOw0K
KyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsNCisgICAgbVN0YXRlLmRlc3RC
bGVuZFJHQiA9IEdMX1pFUk87DQorICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87
DQorICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7DQorICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsNCisgICAgbVN0YXRlLmJsZW5kQ29s
b3IucmVkID0gMDsNCisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOw0KKyAgICBtU3Rh
dGUuYmxlbmRDb2xvci5ibHVlID0gMDsNCisgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSAw
Ow0KKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsNCisgICAgbVN0YXRlLnN0ZW5jaWxG
dW5jID0gR0xfQUxXQVlTOw0KKyAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7DQorICAgIG1TdGF0
ZS5zdGVuY2lsTWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOw0K
KyAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOw0KKyAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAwOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOw0KKyAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsNCisgICAgbVN0YXRlLnN0ZW5jaWxG
YWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VF
UDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsNCisgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aEZhaWwgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7DQor
ICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsNCisgICAgbVN0YXRlLnBvbHln
b25PZmZzZXRVbml0cyA9IDAuMGY7DQorICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2Ug
PSBmYWxzZTsNCisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7DQorICAgIG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
SW52ZXJ0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOw0KKyAgICBt
U3RhdGUuZGl0aGVyID0gdHJ1ZTsNCisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IEdM
X0RPTlRfQ0FSRTsNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBH
TF9ET05UX0NBUkU7DQorDQorICAgIG1TdGF0ZS5saW5lV2lkdGggPSAxLjBmOw0KKw0KKyAgICBt
U3RhdGUudmlld3BvcnRYID0gMDsNCisgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7DQorICAgIG1T
dGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7DQorICAgIG1T
dGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsNCisgICAg
bVN0YXRlLnpOZWFyID0gMC4wZjsNCisgICAgbVN0YXRlLnpGYXIgPSAxLjBmOw0KKw0KKyAgICBt
U3RhdGUuc2Npc3NvclggPSAwOw0KKyAgICBtU3RhdGUuc2Npc3NvclkgPSAwOw0KKyAgICBtU3Rh
dGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7DQorICAgIG1TdGF0
ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Ow0KKw0KKyAgICBt
U3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsNCisgICAgbVN0YXRlLmNvbG9yTWFza0dyZWVuID0g
dHJ1ZTsNCisgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29s
b3JNYXNrQWxwaGEgPSB0cnVlOw0KKyAgICBtU3RhdGUuZGVwdGhNYXNrID0gdHJ1ZTsNCisNCisg
ICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBtUmVzb3VyY2VN
YW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOw0KKyAgICAgICAgbVJlc291
cmNlTWFuYWdlci0+YWRkUmVmKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAg
ICBtUmVzb3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigpOw0KKyAgICB9DQorDQor
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDgzOg0KKyAgICAvLyBJ
biB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZl
IHR3b2RpbWVuc2lvbmFsDQorICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZlY3Rv
cnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLg0KKyAgICAvLyBJbiBvcmRlciB0
aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBsb3N0LCB0aGV5IGFy
ZSB0cmVhdGVkIGFzIHRleHR1cmUNCisgICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMg
YXJlIDAuDQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNldChuZXcgVGV4dHVyZTJEKDApKTsNCisg
ICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsNCisNCisg
ICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSAwOw0KKyAgICBiaW5kQXJyYXlCdWZmZXIoMCk7DQor
ICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7DQorICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgw
KTsNCisgICAgYmluZFRleHR1cmUyRCgwKTsNCisgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsN
CisgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsN
CisNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisNCisgICAgbVN0YXRlLnBhY2tB
bGlnbm1lbnQgPSA0Ow0KKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gNDsNCisgICAgbVN0
YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsNCisNCisgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gTlVMTDsNCisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOw0KKyAgICBtQmxpdCA9
IE5VTEw7DQorICAgIG1MaW5lTG9vcElCID0gTlVMTDsNCisNCisgICAgbUludmFsaWRFbnVtID0g
ZmFsc2U7DQorICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsNCisgICAgbUludmFsaWRPcGVyYXRp
b24gPSBmYWxzZTsNCisgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQorICAgIG1JbnZhbGlkRnJh
bWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgbUhhc0JlZW5DdXJyZW50ID0gZmFs
c2U7DQorICAgIG1Db250ZXh0TG9zdCA9IGZhbHNlOw0KKyAgICBtUmVzZXRTdGF0dXMgPSBHTF9O
T19FUlJPUjsNCisgICAgbVJlc2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVzZXRzID8gR0xfTE9TRV9D
T05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpOw0KKyAg
ICBtUm9idXN0QWNjZXNzID0gcm9idXN0QWNjZXNzOw0KKw0KKyAgICBtU3VwcG9ydHNEWFQxVGV4
dHVyZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gZmFsc2U7DQorICAg
IG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNFdmVudFF1ZXJp
ZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IGZhbHNlOw0KKyAg
ICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSAwOw0KKyAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVMTDsNCisgICAgbWFy
a0FsbFN0YXRlRGlydHkoKTsNCit9DQorDQorQ29udGV4dDo6fkNvbnRleHQoKQ0KK3sNCisgICAg
aWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3Vy
cmVudFByb2dyYW0pOw0KKyAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1G
cmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGVGcmFtZWJ1ZmZl
cihtRnJhbWVidWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOw0KKyAgICB9DQorDQorICAgIHdoaWxl
ICghbUZlbmNlTWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5j
ZU1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hpbGUgKCFtUXVlcnlNYXAu
ZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCkt
PmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1w
dHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVn
aW4oKS0+c2Vjb25kOw0KKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlT
YW1wbGVTdXBwb3J0LmJlZ2luKCkpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspDQorICAgIHsNCisgICAgICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFNfVlRGOyBzYW1wbGVyKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9DT1VOVDsg
dHlwZSsrKQ0KKyAgICB7DQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChO
VUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRU
UklCUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1C
b3VuZEJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5hY3RpdmVR
dWVyeVtpXS5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNl
dChOVUxMKTsNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7DQorICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOw0KKw0KKyAgICBtVGV4dHVyZTJEWmVyby5z
ZXQoTlVMTCk7DQorICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOw0KKw0KKyAgICBk
ZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOw0KKyAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7
DQorICAgIGRlbGV0ZSBtQmxpdDsNCisgICAgZGVsZXRlIG1MaW5lTG9vcElCOw0KKw0KKyAgICBp
ZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSkNCisgICAgew0KKyAgICAgICAgbU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PnJlbGVhc2UoKTsNCit9DQorDQordm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIG1EaXNwbGF5ID0g
ZGlzcGxheTsNCisgICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAg
aWYgKCFtSGFzQmVlbkN1cnJlbnQpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2VDYXBzID0gbURp
c3BsYXktPmdldERldmljZUNhcHMoKTsNCisNCisgICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9
IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisgICAgICAgIG1JbmRleERh
dGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcywgbURldmljZSk7DQorICAgICAg
ICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOw0KKw0KKyAgICAgICAgbVN1cHBvcnRzU2hhZGVyTW9k
ZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywg
MCk7DQorICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID0gbURpc3BsYXktPmdldFZlcnRl
eFRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0g
bURpc3BsYXktPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9y
dHNJbnN0YW5jaW5nID0gbURpc3BsYXktPmdldEluc3RhbmNpbmdTdXBwb3J0KCk7DQorDQorICAg
ICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmlj
ZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQp
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsNCisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURp
bWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsNCisgICAgICAgIG1NYXhSZW5kZXJi
dWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsNCisgICAgICAgIG1NYXhUZXh0
dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7DQorICAgICAgICBUUkFD
RSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1h
eFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkIiwNCisgICAgICAg
ICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1N
YXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwpOw0KKw0KKyAgICAgICAg
Y29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9DQorICAgICAgICB7DQorICAg
ICAgICAgICAgRDNERk1UX0E4UjhHOEI4LA0KKyAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOCwN
CisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LA0KKyAgICAgICAgICAgIEQzREZNVF9EMjRTOA0K
KyAgICAgICAgfTsNCisNCisgICAgICAgIGludCBtYXggPSAwOw0KKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFU
KTsgKytpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkg
PSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07DQorICAgICAgICAgICAg
bURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBt
dWx0aXNhbXBsZUFycmF5KTsNCisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRl
ckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsNCisNCisgICAgICAgICAgICBm
b3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBq
ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpDQorICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7DQorICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA9IG1heDsNCisNCisgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IG1EaXNwbGF5
LT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllcyA9IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsNCisgICAgICAgIG1T
dXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsN
CisgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQzVGV4dHVy
ZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5n
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsNCisgICAg
ICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVy
ZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzKTsNCisgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
ID0gbURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlz
cGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOw0KKw0KKyAgICAgICAgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOw0KKw0K
KyAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7DQorICAgICAgICBpZiAo
c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7DQorICAgICAgICB9DQorICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoc3VwcG9y
dHNEWFQ1VGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorDQorICAgICAgICBpbml0RXh0ZW5z
aW9uU3RyaW5nKCk7DQorICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmcoKTsNCisNCisgICAgICAg
IG1TdGF0ZS52aWV3cG9ydFggPSAwOw0KKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7DQor
ICAgICAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7DQorICAg
ICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsNCisNCisg
ICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7DQorICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAw
Ow0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7DQor
ICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOw0KKw0K
KyAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICAvLyBXcmFw
IHRoZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFz
c2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFtZXMNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlZmF1
bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOw0K
Kw0KKyAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3IENvbG9yYnVmZmVyKGRl
ZmF1bHRSZW5kZXJUYXJnZXQpOw0KKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNp
bGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7DQorICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKGNv
bG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7DQorDQorICAgIHNldEZyYW1l
YnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOw0KKw0KKyAgICBpZiAoZGVmYXVsdFJlbmRlclRh
cmdldCkNCisgICAgew0KKyAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0K
KyAgICB9DQorDQorICAgIGlmIChkZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIGRlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICB9DQorICAgIA0KKyAgICBtYXJrQWxsU3RhdGVEaXJ0
eSgpOw0KK30NCisNCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUt
cmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0
IHByZS1kcmF3Lg0KK3ZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQ0KK3sNCisgICAg
Zm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdCsrKQ0KKyAgICB7
DQorICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7DQorICAgIH0NCisNCisg
ICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyB0KyspDQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTW3RdID0gMDsN
CisgICAgfQ0KKw0KKyAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSAwOw0KKyAgICBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
PSAwOw0KKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOw0KKyAgICBtQXBwbGll
ZElCU2VyaWFsID0gMDsNCisgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7DQor
ICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgIG1SZW5kZXJUYXJnZXREZXNj
SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisgICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFy
a1N0YXRlRGlydHkoKTsNCisNCisgICAgbUNsZWFyU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1D
dWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOw0KKyAg
ICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVBvbHlnb25PZmZzZXRTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVNh
bXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQorICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
Ow0KKyAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQ0KK3sNCisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRy
dWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkNCit7DQorICAgIGlm
IChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKQ0KKyAgICAg
ICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVDsNCisgICAgbUNv
bnRleHRMb3N0ID0gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkN
Cit7DQorICAgIHJldHVybiBtQ29udGV4dExvc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBo
YSkNCit7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVkOw0KKyAgICBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47DQorICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZSA9IGJsdWU7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEgPSBh
bHBoYTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKQ0K
K3sNCisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOw0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkNCit7DQorICAgIG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbEZh
Y2UoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVk
KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOw0KKyAgICAgICAg
bUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6Omlz
Q3VsbEZhY2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpDQorew0KKyAg
ICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5j
dWxsTW9kZSA9IG1vZGU7DQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCkNCit7DQor
ICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZnJvbnRGYWNlID0gZnJvbnQ7DQorICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCkN
Cit7DQorICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0
eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJs
ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpDQorew0KKyAgICBpZiAo
bVN0YXRlLmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5k
ZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7DQorICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIs
IGZsb2F0IHpGYXIpDQorew0KKyAgICBtU3RhdGUuek5lYXIgPSB6TmVhcjsNCisgICAgbVN0YXRl
LnpGYXIgPSB6RmFyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxl
ZCkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmQgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0
cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25z
dA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5ibGVuZDsNCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBz
b3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuc291cmNl
QmxlbmRSR0IgIT0gc291cmNlUkdCIHx8DQorICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YSAhPSBzb3VyY2VBbHBoYSB8fA0KKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0
UkdCIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7DQorICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VC
bGVuZEFscGhhID0gc291cmNlQWxwaGE7DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEg
PSBkZXN0QWxwaGE7DQorICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVl
biwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpDQorew0KKyAgICBpZiAobVN0YXRlLmJsZW5kQ29s
b3IucmVkICE9IHJlZCB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gIT0gZ3Jl
ZW4gfHwNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fA0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdy
ZWVuID0gZ3JlZW47DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsNCisg
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7DQorICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5k
RXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbikNCit7DQor
ICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fA0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0aW9uKQ0KKyAgICB7DQor
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOw0KKyAgICAgICAg
bVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IGFscGhhRXF1YXRpb247DQorICAgICAgICBtQmxl
bmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0
ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
IT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZW5hYmxl
ZDsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN0YXRlLnN0ZW5jaWxUZXN0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQ
YXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNp
bE1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGdW5jICE9IHN0ZW5jaWxGdW5jIHx8
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8DQorICAgICAgICBt
U3RhdGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNpbE1hc2spDQorICAgIHsNCisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYg
PSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNpbFJlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3Rl
bmNpbE1hc2sgPSBzdGVuY2lsTWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhH
TGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5j
aWxCYWNrTWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5j
aWxCYWNrRnVuYyB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmICE9IHN0ZW5jaWxC
YWNrUmVmIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0ZW5jaWxCYWNr
TWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IHN0ZW5jaWxC
YWNrRnVuYzsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2lsQmFja1Jl
ZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
TWFzayA9IHN0ZW5jaWxCYWNrTWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsV3JpdGVtYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVt
YXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0
eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dy
aXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRl
LnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQ0KKyAgICB7DQor
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFz
azsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdM
ZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQ0K
K3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fA0KKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsIHx8
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWls
Ow0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0
aEZhaWw7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFz
c0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0N
Cit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0
ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwNCisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWls
Ow0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mg
PSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7DQorICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZp
bGwoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAh
PSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBl
bmFibGVkOw0KKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7DQorDQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xm
bG9hdCB1bml0cykNCit7DQorICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciAhPSBm
YWN0b3IgfHwNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5pdHMpDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOw0KKyAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOw0KKyAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6
OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0
YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBt
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsNCisgICAgICAgIG1TYW1wbGVT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzU2FtcGxl
QWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9
IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJs
ZWQ7DQorICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNh
bXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCkNCit7DQorICAg
IGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fA0KKyAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVydCkNCisgICAgew0KKyAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsNCisgICAgICAgIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydCA9IGludmVydDsNCisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5h
YmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkNCisgICAg
ew0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsNCisgICAgICAgIG1TY2lz
c29yU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1Nj
aXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JU
ZXN0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERpdGhlcihib29sIGVuYWJsZWQpDQorew0K
KyAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZGl0aGVyID0gZW5hYmxlZDsNCisgICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGl0aGVyRW5hYmxlZCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRM
aW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkNCit7DQorICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0
aDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhp
bnQpDQorew0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gaGludDsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KEdMZW51bSBoaW50
KQ0KK3sNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50Ow0K
KyAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8gc2hhZGVyIHRyYW5zbGF0b3Igc28g
d2UgY2FuIHdyaXRlDQorICAgIC8vIGRkeCwgZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5k
aW5nIG9uIHRoZSBoaW50Lg0KKyAgICAvLyBJZ25vcmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9y
IGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUgaGludC4NCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkNCit7DQorICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4Ow0KKyAgICBtU3RhdGUudmll
d3BvcnRZID0geTsNCisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsNCisgICAgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNj
aXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpDQorew0KKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZ
ICE9IHkgfHwgDQorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1TdGF0
ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnNjaXNz
b3JYID0geDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7DQorICAgICAgICBtU3RhdGUu
c2Npc3NvcldpZHRoID0gd2lkdGg7DQorICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhl
aWdodDsNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQor
DQordm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wg
Ymx1ZSwgYm9vbCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJl
ZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwNCisgICAgICAgIG1TdGF0ZS5j
b2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhICE9IGFscGhhKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOw0KKyAgICAgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1
ZSA9IGJsdWU7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsNCisgICAg
ICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sg
IT0gbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7DQorICAg
ICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKQ0KK3sNCisgICAgbVN0YXRl
LmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJh
bWVidWZmZXI7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5k
bGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7DQorfQ0K
Kw0KK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsNCit9DQorDQorR0x1aW50IENvbnRl
eHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
YXJyYXlCdWZmZXIuaWQoKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5
KEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBOVUxM
Ow0KKyAgICANCisgICAgc3dpdGNoICh0YXJnZXQpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6DQorICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3Rp
dmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoNCisg
ICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVm
YXVsdDoNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorICAgIH0NCisNCisgICAgaWYgKHF1ZXJ5
T2JqZWN0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7DQorICAg
IH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBh
dHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkNCit7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZDsNCit9DQorDQorY29uc3QgVmVydGV4
QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgYm9vbCBub3JtYWxpemVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpDQorew0KKyAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7DQor
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7DQorICAg
IG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7DQorICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7
DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRl
Ow0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2lu
dGVyOw0KK30NCisNCitjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOw0KK30NCisNCitjb25zdCBWZXJ0ZXhB
dHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmlidXRlcygpDQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQ
YWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkNCit7DQorICAgIG1TdGF0ZS5wYWNrQWxpZ25t
ZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisg
ICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsNCit9DQorDQorR0xpbnQgQ29u
dGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93
T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpDQorew0KKyAgICBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucGFja1JldmVy
c2VSb3dPcmRlcjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpDQorew0K
KyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVyKCk7DQorfQ0KKw0KK0dM
dWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VN
YW5hZ2VyLT5jcmVhdGVQcm9ncmFtKCk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVT
aGFkZXIoR0xlbnVtIHR5cGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3Jl
YXRlU2hhZGVyKHR5cGUpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgp
DQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZSgpOw0KK30N
CisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkNCit7DQorICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsNCit9DQorDQorLy8gUmV0
dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQ0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVG
cmFtZWJ1ZmZlcigpDQorew0KKyAgICBHTHVpbnQgaGFuZGxlID0gbUZyYW1lYnVmZmVySGFuZGxl
QWxsb2NhdG9yLmFsbG9jYXRlKCk7DQorDQorICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0g
TlVMTDsNCisNCisgICAgcmV0dXJuIGhhbmRsZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNy
ZWF0ZUZlbmNlKCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVBbGxvY2F0
b3IuYWxsb2NhdGUoKTsNCisNCisgICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobURp
c3BsYXkpOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCisvLyBSZXR1cm5zIGFuIHVu
dXNlZCBxdWVyeSBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkNCit7DQorICAg
IEdMdWludCBoYW5kbGUgPSBtUXVlcnlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsNCisNCisg
ICAgbVF1ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQ0KK3sNCisgICAg
aWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQ0KKyAgICB7DQorICAgICAg
ICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAgbVJlc291cmNlTWFu
YWdlci0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRl
U2hhZGVyKEdMdWludCBzaGFkZXIpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVT
aGFkZXIoc2hhZGVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUHJvZ3JhbShwcm9n
cmFtKTsNCisgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsNCit9DQorDQordm9pZCBD
b250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQ0KK3sNCisgICAgaWYgKG1SZXNv
dXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpDQorICAgIHsNCisgICAgICAgIGRldGFj
aFRleHR1cmUodGV4dHVyZSk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVs
ZXRlVGV4dHVyZSh0ZXh0dXJlKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJi
dWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikNCit7DQorICAgIGlmIChtUmVzb3VyY2VNYW5hZ2Vy
LT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNo
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorICAgIH0NCisgICAgDQorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAg
IEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGZyYW1lYnVmZmVyKTsNCisNCisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9
IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNoRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpOw0KKw0KKyAgICAgICAgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsNCisgICAgICAgIGRlbGV0ZSBmcmFt
ZWJ1ZmZlck9iamVjdC0+c2Vjb25kOw0KKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZy
YW1lYnVmZmVyT2JqZWN0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZl
bmNlKEdMdWludCBmZW5jZSkNCit7DQorICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVj
dCA9IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsNCisNCisgICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1G
ZW5jZU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsNCisgICAgICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+
c2Vjb25kOw0KKyAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkNCit7DQorICAg
IFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsN
CisgICAgaWYgKHF1ZXJ5T2JqZWN0ICE9IG1RdWVyeU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAg
ICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVlcnlPYmplY3QtPmZpcnN0KTsNCisg
ICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vjb25kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsNCisgICAgICAgIH0NCisgICAgICAgIG1R
dWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7DQorICAgIH0NCit9DQorDQorQnVmZmVyICpDb250
ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsNCit9DQorDQorU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRTaGFkZXIoaGFuZGxlKTsNCit9DQorDQorUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShH
THVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dy
YW0oaGFuZGxlKTsNCit9DQorDQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQg
aGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFu
ZGxlKTsNCit9DQorDQorUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJi
dWZmZXIoaGFuZGxlKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFt
ZWJ1ZmZlcigpDQorew0KKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRGcmFt
ZWJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZm
ZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikNCit7DQorICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOw0KKw0KKyAg
ICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpDQor
ew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsN
CisNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpDQor
ew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUs
IFRFWFRVUkVfMkQpOw0KKw0KKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpDQorew0KKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRV
UkVfQ1VCRSk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21T
dGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpDQorew0K
KyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkNCisgICAgew0KKyAgICAgICAg
bUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOw0KKyAgICB9
DQorDQorICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7
DQorICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQorICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7DQorICAg
IH0NCisNCisgICAgbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0KKw0KKyAg
ICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9u
KHJlbmRlcmJ1ZmZlcik7DQorDQorICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsNCit9DQorDQordm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFt
KEdMdWludCBwcm9ncmFtKQ0KK3sNCisgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbTsNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsgICAg
ICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3
aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLg0KKw0KKyAgICBpZiAocHJpb3JQcm9ncmFtICE9IHBy
b2dyYW0pDQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOw0KKyAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3Jh
bSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsNCisgICAgICAg
IG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5
ID0gdHJ1ZTsNCisNCisgICAgICAgIGlmIChuZXdQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAg
ICAgICBpZiAob2xkUHJvZ3JhbSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBvbGRQcm9ncmFt
LT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpi
ZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkNCit7DQorICAgIC8vIEZyb20g
RVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3
aXRoIGFuIDxpZD4gIA0KKyAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5IG9iamVj
dCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAgDQorICAgIC8vIHRhcmdl
dHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZB
VElWRV9FWFQsIGlmICANCisgICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBmb3IgZWl0aGVyIHRhcmdl
dCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4gDQorICAgIC8vIGV4aXN0
aW5nIHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBvciBp
ZiA8aWQ+IGlzIHRoZQ0KKyAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIGFueSBx
dWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMNCisgICAgLy8gZ2VuZXJh
dGVkLg0KKw0KKyAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBhcmUgYWN0aXZlDQorICAg
IC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24gYXJlIHN1cHBvcnRlZCwg
d2Ugd2lsbCBuZWVkIHRvIGNoZWNrDQorICAgIC8vIHNlcGFyYXRlbHkgdGhhdDoNCisgICAgLy8g
ICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJlbnQgYWN0aXZlIHF1ZXJ5
IGZvciBhbnkgdGFyZ2V0L3R5cGUNCisgICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBx
dWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlDQorICAgIC8v
ICAgICAgIG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BB
U1NFRF9DT05TRVJWQVRJVkVfRVhULA0KKyAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUgYWN0
aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLg0KKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAg
aWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgUXVlcnlUeXBlIHFUeXBlOw0KKyAgICBzd2l0Y2ggKHRhcmdldCkN
CisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogDQorICAgICAg
ICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgDQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiANCisgICAg
ICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgDQorICAg
ICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiANCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gZ2V0
UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7DQorDQorICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3
YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMNCisgICAgaWYgKCFxdWVyeU9iamVjdCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAg
fQ0KKw0KKyAgICAvLyBjaGVjayBmb3IgdHlwZSBtaXNtYXRjaA0KKyAgICBpZiAocXVlcnlPYmpl
Y3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgLy8gc2V0IHF1ZXJ5IGFzIGFj
dGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldA0KKyAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVd
LnNldChxdWVyeU9iamVjdCk7DQorDQorICAgIC8vIGJlZ2luIHF1ZXJ5DQorICAgIHF1ZXJ5T2Jq
ZWN0LT5iZWdpbigpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJn
ZXQpDQorew0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorDQorICAgIHN3aXRjaCAodGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiANCisgICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IA0KKyAgICAg
ICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyANCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisg
ICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOw0KKw0KKyAgICBpZiAocXVlcnlPYmplY3QgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgfQ0KKw0KKyAgICBxdWVyeU9iamVjdC0+ZW5kKCk7DQorDQorICAgIG1TdGF0ZS5h
Y3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEZy
YW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQ0KK3sNCisgICAgZGVsZXRlIG1GcmFt
ZWJ1ZmZlck1hcFswXTsNCisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOw0KKyAgICBp
ZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSAwKQ0KKyAgICB7DQorICAgICAgICBtQm91bmRE
cmF3RnJhbWVidWZmZXIgPSBidWZmZXI7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcikN
Cit7DQorICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRl
cmJ1ZmZlci5nZXQoKTsNCisgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRl
cmJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZy
YW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZnJh
bWVidWZmZXItPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitGZW5jZSAqQ29udGV4dDo6Z2V0RmVu
Y2UodW5zaWduZWQgaW50IGhhbmRsZSkNCit7DQorICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5j
ZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChmZW5jZSA9PSBtRmVuY2VN
YXAuZW5kKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIGVs
c2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7DQorICAgIH0NCit9DQor
DQorUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUsIGJvb2wgY3Jl
YXRlLCBHTGVudW0gdHlwZSkNCit7DQorICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeSA9IG1R
dWVyeU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChxdWVyeSA9PSBtUXVlcnlNYXAuZW5k
KCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7DQor
ICAgICAgICAgICAgcXVlcnktPnNlY29uZC0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAg
ICByZXR1cm4gcXVlcnktPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitCdWZmZXIgKkNvbnRleHQ6
OmdldEFycmF5QnVmZmVyKCkNCit7DQorICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0
KCk7DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkNCit7
DQorICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0KK30NCisNCitQ
cm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpDQorew0KKyAgICBpZiAoIW1DYWNo
ZWRDdXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFt
ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOw0K
KyAgICB9DQorICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07DQorfQ0KKw0KK1RleHR1
cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkNCit7DQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVY
VFVSRV8yRCkpOw0KK30NCisNCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1
YmVNYXAoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0
U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOw0KK30N
CisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2Ft
cGxlciwgVGV4dHVyZVR5cGUgdHlwZSkNCit7DQorICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOw0KKw0KKyAgICBpZiAodGV4aWQgPT0g
MCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1
cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQNCisgICAgew0KKyAgICAgICAgc3dpdGNoICh0eXBlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsNCisgICAgICAg
ICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVb
dHlwZV1bc2FtcGxlcl0uZ2V0KCk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYo
R0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcykNCit7DQorICAgIHN3aXRjaCAocG5hbWUp
DQorICAgIHsNCisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJh
bXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VJbnZlcnQ7ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRF
TUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoNCisgICAgICAgIHBh
cmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3Rh
dGUuY29sb3JNYXNrR3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNr
Qmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsNCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbDsgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FM
UEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
Y2lzc29yVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsVGVzdDsgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfRElU
SEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7ICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNT
X0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBw
bmFtZSwgR0xmbG9hdCAqcGFyYW1zKQ0KK3sNCisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NM
RUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRGbG9hdHYgaW1wbGVtZW50
YXRpb24NCisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcw0KKyAgICAvLyBHZXRJbnRlZ2Vy
diBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZl
cnNpb24gaW4gYW55DQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5j
ZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4NCisgICAgc3dpdGNoIChwbmFtZSkNCisgICAg
ew0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0
b3I7ICBicmVhazsNCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBn
bDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7DQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOg0KKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpO
ZWFyOw0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7DQorICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOg0KKyAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5ibHVlOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6
DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7DQorICAgICAgICBw
YXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jv
b2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQ0KK3sN
CisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBp
biBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50YXRpb24NCisgICAgLy8gYmVjYXVz
ZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBF
UyAyLjAgc3BlYyBuYW1lcw0KKyAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5
IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55DQorICAgIC8v
IGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBs
aWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIA0KKyAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYu
DQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhf
QVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFy
YW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IGdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVu
aWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVS
X1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNp
b24oKTsgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7DQorICAgICAgLy9jYXNlIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJB
V19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFDQorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9Q
QUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrUmV2
ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJ
R05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElO
VDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyBi
cmVhazsNCisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNr
OyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19G
VU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NU
RU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJj
ZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0RT
VF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsg
ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOyAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKTsgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAg
ICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICANCisgICAg
ICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7DQorICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsN
CisgICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQor
ICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgDQorICAgICAg
Y2FzZSBHTF9TQU1QTEVTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisgICAgICAgICAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6DQor
ICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOg0KKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7DQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBlbHNlIA0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRf
RElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjpt
YXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpKTsNCisgICAgICAgICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247DQorICAg
ICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQ7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpw
YXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1ZJRVdQT1JUOg0KKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LnZpZXdwb3J0WDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7DQorICAg
ICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsNCisgICAgICAgIHBhcmFtc1sz
XSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU0NJU1NPUl9CT1g6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7DQor
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7DQorICAgICAgICBwYXJhbXNbMl0g
PSBtU3RhdGUuc2Npc3NvcldpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNz
b3JIZWlnaHQ7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RF
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAgICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOg0KKyAg
ICAgIGNhc2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsNCisNCisgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURf
QklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsNCisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZl
ci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkxV
RV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJlYWs7DQor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZm
ZXItPmdldEFscGhhU2l6ZSgpOyBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCk7DQorDQorICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0
aFNpemUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6DQorICAg
ICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKw0KKyAgICAgICAgICAg
IGlmIChzdGVuY2lsYnVmZmVyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOg0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBn
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVT
YW1wbGVyXS5pZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYg
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1h
eGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uaWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICAgICpwYXJhbXMgPSBtUmVz
ZXRTdHJhdGVneTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1f
QklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgKnBhcmFtcyA9IDE7DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAg
KnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOw0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xl
bnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQ0KK3sNCisg
ICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVkIGZvciBERVBUSF9DTEVB
Ul9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uDQorICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0
aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhp
cyBpcyBkdWUNCisgICAgLy8gdG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxs
eSBhcyBhIGZsb2F0LCBhbmQgc28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uDQorICAgIC8vIGlm
IHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRoaXMgY29udmVyc2lv
biBpcyBhbHJlYWR5IGltcGxlbWVudGVkIA0KKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBj
YWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFi
bGUsIHdlDQorICAgIC8vIHBsYWNlIERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4g
VGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nDQorICAgIC8vIGFw
cGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0
dXJlRm9ybWF0czsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
U0hBREVSX0JJTkFSWV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0g
R0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6DQorICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlM6DQorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzoNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoNCisg
ICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZG
RVJfU0laRToNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6DQorICAg
ICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6DQorICAgICAgY2FzZSBH
TF9BUlJBWV9CVUZGRVJfQklORElORzoNCisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJ
Tkc6DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzoNCisgICAgICBjYXNlIEdM
X0NVUlJFTlRfUFJPR1JBTToNCisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOg0KKyAgICAg
IGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToNCisgICAgICBjYXNlIEdMX1VO
UEFDS19BTElHTk1FTlQ6DQorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoNCisg
ICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOg0KKyAgICAg
IGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOg0KKyAgICAgIGNh
c2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoNCisgICAgICBjYXNl
IEdMX0RFUFRIX0JJVFM6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6DQorICAgICAgY2Fz
ZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfQ1VMTF9G
QUNFX01PREU6DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOg0KKyAgICAgIGNhc2UgR0xfQUNU
SVZFX1RFWFRVUkU6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6DQorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1ZBTFVFX01BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfRkFJTDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBU
SF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6DQorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfRkFJTDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
DQorICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjoNCisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToNCisgICAgICBjYXNlIEdMX0JMRU5E
X0RTVF9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6DQorICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBI
QToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6
DQorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRV
UkVfU0laRToNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6DQorICAg
ICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAg
ICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6DQorICAgICAgY2FzZSBH
TF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoNCisgICAgICBjYXNlIEdMX1RFWFRV
UkVfQklORElOR18yRDoNCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoN
CisgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6DQorICAgICAg
Y2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgY2FzZSBHTF9Q
Uk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsNCisgICAgICAgIH0NCisg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7DQorICAgICAgICAg
ICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNl
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhf
VklFV1BPUlRfRElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsN
CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoN
CisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAq
bnVtUGFyYW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU0hBREVSX0NPTVBJTEVSOg0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVS
VDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoNCisgICAgICBjYXNlIEdMX0NVTExf
RkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVSIGFyZSBuYXR1
cmFsIHRvIElzRW5hYmxlZCwNCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVyaWVz
Lg0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBw
dXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFsDQorICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6DQorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6DQorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOg0KKyAg
ICAgIGNhc2UgR0xfQkxFTkQ6DQorICAgICAgY2FzZSBHTF9ESVRIRVI6DQorICAgICAgY2FzZSBH
TF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0
eXBlID0gR0xfQk9PTDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsNCisgICAgICAgIH0N
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsNCisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRkFDVE9SOg0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6DQorICAgICAgY2FzZSBHTF9E
RVBUSF9DTEVBUl9WQUxVRToNCisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6DQorICAgICAgICB7
DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1z
ID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFOg0KKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFOg0KKyAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6DQorICAgICAgICB7DQorICAgICAgICAg
ICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsNCisgICAg
ICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6
DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoNCisgICAgICAgIHsNCisgICAgICAgICAgICAq
dHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Ow0KKyAgICAgICAg
fQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUg
cmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJl
Y3RhbmdsZSBhbmQNCisvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGlyZWN0M0QgOSBkZXZp
Y2UNCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQp
DQorew0KKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsNCisNCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9i
amVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwg
ZmFsc2UpOw0KKyAgICB9DQorDQorICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1l
bnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQNCisgICAgLy8gdG8g
a2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxl
IGlmIGRlcHRoIHRleHR1cmluZy4NCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmpl
Y3QgPSBOVUxMOw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlw
ZSgpICE9IEdMX05PTkUpDQorICAgIHsNCisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOw0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dE51bGxDb2xvcmJ1ZmZlcigpOw0KKyAgICB9DQorICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0
KQ0KKyAgICB7DQorICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgYm9vbCBy
ZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7DQorICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJn
ZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOw0KKyAgICBpZiAocmVu
ZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQ0KKyAgICB7DQor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0
ZWRseSBudWxsLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11
c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0
KDAsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9
IHJlbmRlclRhcmdldFNlcmlhbDsNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7
IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQgdG8gcmVuZGVyIHRhcmdldCdzIHNpemUt
LSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHJlbmRlciB0YXJnZXRzLg0KKyAgICAg
ICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7DQorICAgICAgICByZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
ID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2VyaWFsID0gMDsNCisgICAg
dW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOw0KKyAgICBpZiAoZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgIHsNCisgICAg
ICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhidWZmZXIoKTsNCisgICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWwoKTsNCisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIp
Ow0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7DQorICAg
IH0NCisgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgIGRl
cHRoU3RlbmNpbCA9IHN0ZW5jaWxidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOw0KKyAgICAgICAg
aWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJEZXB0aCBz
dGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBzdGVuY2lsYnVmZmVyU2Vy
aWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7DQorICAgIH0NCisNCisgICAgaWYgKGRl
cHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwNCisgICAgICAg
IHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8DQor
ICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQ0KKyAgICB7DQorICAgICAgICBtRGV2
aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7DQorICAgICAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7DQorICAgICAgICBtQXBw
bGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOw0KKyAgICAgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVy
VGFyZ2V0Q2hhbmdlZCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgICAg
ICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QNCisgICAgICAgIH0NCisgICAgICAgIHJlbmRl
clRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRhcmdldERlc2MpOw0KKyAgICAgICAgbVJlbmRlclRh
cmdldERlc2NJbml0aWFsaXplZCA9IHRydWU7DQorICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQ7DQorDQorICAgIGZs
b2F0IHpOZWFyID0gY2xhbXAwMShtU3RhdGUuek5lYXIpOw0KKyAgICBmbG9hdCB6RmFyID0gY2xh
bXAwMShtU3RhdGUuekZhcik7DQorDQorICAgIGlmIChpZ25vcmVWaWV3cG9ydCkNCisgICAgew0K
KyAgICAgICAgdmlld3BvcnQuWCA9IDA7DQorICAgICAgICB2aWV3cG9ydC5ZID0gMDsNCisgICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7DQorICAgICAgICB2
aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7DQorICAgICAgICB2aWV3
cG9ydC5NaW5aID0gMC4wZjsNCisgICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydFgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkp
Ow0KKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgIHZpZXdw
b3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9y
dC5YKSk7DQorICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFtcChtU3RhdGUudmlld3BvcnRI
ZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0g
c3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOw0KKyAgICAgICAgdmlld3BvcnQuTWluWiA9
IHpOZWFyOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7DQorICAgIH0NCisNCisgICAg
aWYgKHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApDQorICAgIHsN
CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcg0KKyAgICB9DQor
DQorICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmlld3BvcnRJbml0aWFsaXplZCB8
fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXplb2YgbVNldFZpZXdwb3J0KSAh
PSAwKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOw0K
KyAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7DQorICAgICAgICBtVmlld3BvcnRJbml0
aWFsaXplZCA9IHRydWU7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KKw0KKyAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAo
bVN0YXRlLnNjaXNzb3JUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1QgcmVjdDsN
CisgICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAgICAgIHJl
Y3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJl
bmRlclRhcmdldERlc2MuSGVpZ2h0KSk7DQorICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1w
KG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAgICAgIHJlY3QuYm90dG9t
ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICB9DQorDQor
ICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZvcm1zRGlydHkpDQorICAgIHsNCisgICAg
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOw0KKyAgICAg
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKTsNCisNCisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCB4eVsy
XSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsNCisg
ICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkp
Ow0KKw0KKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xf
RnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLg0KKyAgICAgICAgR0xpbnQgY29v
cmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxv
YXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9y
dEhlaWdodCAvIDIuMGYsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0
ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgLyAyLjBmfTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29v
cmQsIDEsIHdoeHkpOw0KKw0KKyAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5n
ZXREeERlcHRoTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6
TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJp
bmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOw0KKw0KKyAgICAgICAgR0xpbnQgZGVw
dGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7DQorICAg
ICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0gek5lYXJ9
Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBu
ZWFyRmFyRGlmZik7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0
aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywgc3RlbmNpbGlu
ZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFwcGx5U3Rh
dGUoR0xlbnVtIGRyYXdNb2RlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIEZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBHTGludCBm
cm9udENDVyA9IHByb2dyYW1CaW5hcnktPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOw0KKyAgICBH
TGludCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOw0KKyAgICBwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsNCisNCisgICAgR0xpbnQgcG9p
bnRzT3JMaW5lcyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7
DQorICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsNCisg
ICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlz
RnJvbnQpOw0KKw0KKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURp
c3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7DQorICAgIGJvb2wgemVyb0NvbG9yTWFza0Fs
bG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7DQorICAgIC8vIEFwcGFyZW50
bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29s
b3INCisgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNv
cnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwNCisgICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0
ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQgbm8NCisgICAgLy8gZHJh
d2luZyBpcyBkb25lLg0KKyAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9q
ZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5DQorDQorICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwg
bUZyb250RmFjZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NV
TExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZy
b250RmFjZSkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gZmFsc2U7DQor
ICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlm
IChtU3RhdGUuZGVwdGhUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlz
b24obVN0YXRlLmRlcHRoRnVuYykpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEQzRFpCX0ZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkg
PSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIXplcm9Db2xvck1hc2tBbGxvd2VkICYmICht
TWFza1N0YXRlRGlydHkgfHwgbUJsZW5kU3RhdGVEaXJ0eSkpDQorICAgIHsNCisgICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KKw0KKyAgICBpZiAobUJsZW5kU3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAg
aWYgKG1TdGF0ZS5ibGVuZCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisNCisgICAgICAgICAg
ICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYNCisgICAg
ICAgICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0JMRU5ERkFDVE9SLCBlczJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5ibGVuZENvbG9yKSk7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RD
T0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNv
bnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5k
RnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uUkdCKSk7DQorDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCANCisgICAgICAgICAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiAhPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgfHwgDQorICAgICAgICAgICAg
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOw0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZXMyZHg6
OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZEFscGhhKSk7DQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNv
bnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRF
TkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9u
dEZhY2VEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBm
cmFtZWJ1ZmZlck9iamVjdC0+aGFzU3RlbmNpbCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1P
REUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5
DQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lM
UkVGID0gRDNEUlNfU1RFTkNJTFJFRjsNCisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFU
RVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7DQorICAgICAg
ICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNL
ID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsNCisgICAgICAgICAgICBpZiAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8IA0KKyAgICAgICAg
ICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgDQor
ICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9u
dC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBt
YXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmDQor
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5j
aWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7DQorDQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ss
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDog
RDNEUlNfQ0NXX1NURU5DSUxGVU5DLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsNCisNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5z
dGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhT
dGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwg
OiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCANCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1Mg
OiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
KSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJ
TFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2ls
QmFja0Z1bmMpKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVO
Q0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0
YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxN
QVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsNCisN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBE
M0RSU19DQ1dfU1RFTkNJTFpGQUlMLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZh
aWwpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1Ms
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICAgICAgbUZyb250RmFjZURpcnR5ID0g
ZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1NYXNrU3RhdGVEaXJ0eSkNCisgICAgew0KKyAg
ICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xv
ck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5j
b2xvck1hc2tBbHBoYSk7DQorICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xv
ck1hc2tBbGxvd2VkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBncmVlbiBj
aGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4NCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RC
TEVORF9PTkUpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIEQzREJMRU5ET1BfQUREKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLCBjb2xvck1hc2spOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6
IEZBTFNFKTsNCisNCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQor
DQorICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlm
IChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxF
REVQVEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7DQorICAg
ICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsNCisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCop
JmRlcHRoQmlhcykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UN
CisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
TE9QRVNDQUxFREVQVEhCSUFTLCAwKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19ERVBUSEJJQVMsIDApOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1TYW1wbGVT
dGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3Zl
cmFnZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNv
dmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7DQor
ICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZs
b2F0IHRocmVzaG9sZCA9IDAuNWY7DQorDQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBsZXMoKTsgKytpKQ0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+PSB0aHJl
c2hvbGQpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZXNob2xkICs9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOw0K
KyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJ
bnZlcnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7DQor
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX01VTFRJU0FNUExFTUFTSywgbWFzayk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1EaXRoZXJTdGF0ZURp
cnR5KQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRI
RVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOw0KKw0KKyAgICAgICAgbURp
dGhlclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KK30NCisNCitHTGVudW0gQ29udGV4dDo6
YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQ0KK3sNCisgICAgVHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107DQorDQorICAgIEdMZW51bSBlcnIgPSBt
VmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmli
dXRlcywgaW5zdGFuY2VzKTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIGVycjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVZlcnRleERlY2xh
cmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJy
ZW50UHJvZ3JhbSgpLCBpbnN0YW5jZXMsIHJlcGVhdERyYXcpOw0KK30NCisNCisvLyBBcHBsaWVz
IHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5
IGRldmljZQ0KK0dMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xh
dGVkSW5kZXhEYXRhICppbmRleEluZm8pDQorew0KKyAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0
YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7DQorDQorICAgIGlmIChlcnIgPT0g
R0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBt
QXBwbGllZElCU2VyaWFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldElu
ZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7DQorICAgICAgICAgICAgbUFwcGxpZWRJQlNl
cmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJl
dHVybiBlcnI7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25z
dGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVNoYWRl
cnMoKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFt
KCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwo
KSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRl
cigpOw0KKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dy
YW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7DQorDQorICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlcihwaXhlbFNoYWRlcik7DQorICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
dmVydGV4U2hhZGVyKTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMo
KTsNCisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNl
cmlhbCgpOw0KKyAgICB9DQorDQorICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsN
Cit9DQorDQorLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRo
ZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpDQorew0K
KyAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOw0KKw0KKyAgICBpZiAobVN1cHBvcnRz
VmVydGV4VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZF
UlRFWCk7DQorICAgIH0NCit9DQorDQorLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLA0KKy8vIGxvb2tzIHVwIHRoZSBjb3Jy
ZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUgdHlwZSwNCisv
LyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRl
IChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLg0KK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhT
YW1wbGVyVHlwZSB0eXBlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1
cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGludCBzYW1wbGVyQ291bnQg
PSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5
IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQ0KKyAgICB1bnNpZ25lZCBpbnQgKmFwcGxp
ZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1
cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOw0KKyAgICBpbnQgZDNkU2FtcGxl
ck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVT
QU1QTEVSMDsNCisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRT
YW1wbGVyUmFuZ2UodHlwZSk7DQorDQorICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNh
bXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspDQorICAgIHsNCisgICAg
ICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5
cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleA0K
KyAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0
Ow0KKw0KKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxl
clRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7DQorDQorICAgICAgICAgICAgVGV4dHVy
ZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7
DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1
cmVTZXJpYWwoKTsNCisNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkg
fHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRl
eHR1cmUoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpDQorICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtz
YW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMo
KSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdldFdyYXBUKCk7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0
ZXIoKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3Jh
cCh3cmFwUykpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVX
cmFwKHdyYXBUKSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2Ft
cGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1h
Z0ZpbHRlcihtYWdGaWx0ZXIpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBEM0RURVhUVVJF
RklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIs
ICZkM2RNaXBGaWx0ZXIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsN
CisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7DQorICAgICAgICAgICAgICAg
ICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxb
c2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOw0KKyAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RT
YW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgYXBwbGllZFRleHR1cmVT
ZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleFNlcmlhbDsNCisgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+cmVzZXREaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVs
c2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsNCisgICAgICAgICAgICAgICAgYXBwbGll
ZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBsZXJSYW5n
ZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5kZXgrKykNCisgICAgew0K
KyAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXJJbmRleCAr
IGQzZFNhbXBsZXJPZmZzZXQsIE5VTEwpOw0KKyAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gPSAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykNCit7DQorICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBHTHNp
emVpIG91dHB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIG1TdGF0
ZS5wYWNrQWxpZ25tZW50KTsNCisgICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrDQorICAg
IGlmIChidWZTaXplKQ0KKyAgICB7DQorICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0
UGl0Y2ggKiBoZWlnaHQ7DQorICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICBpZiAoIXJlbmRl
clRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOyAgIC8vIENvbnRleHQgbXVzdCBiZSBs
b3N0LCByZXR1cm4gc2lsZW50bHkNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
YzsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsNCisNCisgICAgaWYgKGRlc2Mu
TXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpDQorICAgIHsNCisgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJl
dGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldA0KKyAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7DQorICAgIH0NCisNCisgICAgSFJFU1VMVCByZXN1bHQ7DQorICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsNCisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9
ICFnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgpIDw9IDQgJiYg
bURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhl
aWdodCkgPT0gZGVzYy5IZWlnaHQgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Mu
Rm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFOw0KKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMpDQorICAgIHsN
CisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3Jp
dGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkNCisgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwg
ZGVzYy5Gb3JtYXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsN
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAv
LyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQ0KKyAgICAgICAgICAgIGRpcmVj
dFRvUGl4ZWxzID0gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKCFkaXJl
Y3RUb1BpeGVscykNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zm
c2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOw0KKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOw0KKyAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXN1
bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3Vy
ZmFjZSk7DQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICByZW5kZXJUYXJnZXQg
PSBOVUxMOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIHN5
c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisNCisgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0
IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3INCisgICAgICAgIC8vIGNvZGVz
IHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4NCisgICAgICAgIGlmIChjaGVja0RldmljZUxvc3QocmVz
dWx0KSkNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAg
ICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAg
ICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgIH0NCisNCisgICAgaWYgKGRpcmVj
dFRvUGl4ZWxzKQ0KKyAgICB7DQorICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUkVDVCByZWN0Ow0KKyAgICByZWN0Lmxl
ZnQgPSBjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOw0KKyAgICBy
ZWN0LnRvcCA9IGNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOw0K
KyAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
ZGVzYy5XaWR0aCkpOw0KKyAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOw0KKw0KKyAgICBEM0RMT0NLRURfUkVDVCBs
b2NrOw0KKyAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3Qs
IEQzRExPQ0tfUkVBRE9OTFkpOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsN
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNl
KCk7DQorDQorICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJh
dGUNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCop
cGl4ZWxzOw0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7DQorICAgIGludCBpbnB1dFBp
dGNoOw0KKyAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7DQorICAgICAgICBpbnB1dFBpdGNoID0gLWxvY2su
UGl0Y2g7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSAodW5z
aWduZWQgY2hhciopbG9jay5wQml0czsNCisgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNo
Ow0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcDsgaisrKQ0KKyAgICB7DQorICAgICAgICBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4
UjhHOEI4ICYmDQorICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmDQorICAgICAg
ICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuDQorICAgICAgICAg
ICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubw0K
KyAgICAgICAgICAgIC8vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4NCisg
ICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwNCisgICAgICAgICAgICAg
ICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsDQorICAgICAgICAgICAgICAgICAgIChyZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIDQpOw0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5s
ZWZ0OyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZmxvYXQgcjsNCisgICAgICAgICAg
ICBmbG9hdCBnOw0KKyAgICAgICAgICAgIGZsb2F0IGI7DQorICAgICAgICAgICAgZmxvYXQgYTsN
CisNCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCop
KHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAgICAgICAg
ICAgYSA9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAo
MS4wZiAvIDB4MDAxRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkg
KiAoMS4wZiAvIDB4MDdFMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4Rjgw
MCkgKiAoMS4wZiAvIDB4RjgwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisg
ICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsNCisg
ICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7
DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAz
RTApOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8g
MHg3QzAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kiko
c291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7DQorICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBm
IC8gMHgwMDAwRkYwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYw
MDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoNCisg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICBiID0g
KHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7DQorICAgICAgICAgICAg
ICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7DQor
ICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgw
MEZGMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoNCisgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGlu
dCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAgICAg
ICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOw0KKyAg
ICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAw
MDAzRkYpOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAo
MS4wZiAvIDB4MDAwRkZDMDApOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgz
RkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOw0KKyAgICAgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQg
Zm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5
IHJvdW5kDQorICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAq
IGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAqKChm
bG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOw0KKyAgICAgICAg
ICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0
Y2gpICsgMik7DQorICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAx
NiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIx
NkY6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZv
cm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSBy
b3VuZA0KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWJncls0XTsNCisNCisgICAgICAgICAg
ICAgICAgICAgIEQzRFhGbG9hdDE2VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJj
ZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpLCA0KTsNCisNCisgICAgICAgICAgICAgICAgICAg
IGEgPSBhYmdyWzNdOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IGFiZ3JbMl07DQorICAgICAg
ICAgICAgICAgICAgICBnID0gYWJnclsxXTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSBhYmdy
WzBdOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FDQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAg
IHJldHVybjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAu
NWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgy
NTUgKiBiICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOw0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6DQorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7DQorICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsN
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRf
UkVWX0VYVDoNCisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAg
OSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMA0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgICAg
ICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAg
IDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8DQorICAgICAgICAgICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0
cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwN
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVm
KSA8PCA0KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiBiICsgMC41ZikgPDwgMCk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoNCisgICAg
ICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRo
ZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAg
NiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMA0KKyAgICAgICAgICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8
ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAx
c3QgY29tcG9uZW50ICAgICB8DQorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
Lg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVA0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQ0KKyAgICAgICAgICAg
ICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpXSA9IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
YiArIDAuNWYpIDw8IDApIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOw0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsNCisNCisgICAgc3lzdGVt
U3VyZmFjZS0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0Zmll
bGQgbWFzaykNCit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBEV09SRCBmbGFncyA9IDA7DQorDQorICAgIGlmICht
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgbWFzayAmPSB+R0xf
Q09MT1JfQlVGRkVSX0JJVDsNCisNCisgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBm
bGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYg
KG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5H
TF9ERVBUSF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJh
bWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsNCisgICAgICAgIH0N
CisgICAgfQ0KKw0KKyAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOw0KKw0KKyAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgbWFzayAm
PSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOw0KKyAgICAgICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJE
ZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAgICAgICAg
ICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2M7DQorICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNj
KCZkZXNjKTsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisNCisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBkeDJlczo6R2V0U3RlbmNpbFNpemUo
ZGVzYy5Gb3JtYXQpOw0KKyAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3Rl
bmNpbFNpemUpIC0gMTsNCisNCisgICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4
MCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NU
RU5DSUw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICht
YXNrICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENs
aXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3Bv
cnQNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIEQzRENPTE9SIGNv
bG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhh
KSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZCksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5i
bHVlKSk7DQorICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVl
KTsNCisgICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAw
MEZGOw0KKw0KKyAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6ZSht
UmVuZGVyVGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsN
CisNCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZsYWdzICYgRDNE
Q0xFQVJfU1RFTkNJTCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2ls
VW5tYXNrZWQ7DQorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3Mg
JiBEM0RDTEVBUl9UQVJHRVQpICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVuICYmDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tC
bHVlICYmIGFscGhhVW5tYXNrZWQpOw0KKw0KKyAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIg
fHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikNCisgICAgew0KKyAgICAgICAgLy8gU3RhdGUgd2hp
Y2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBj
YWxsIGlzIHNhdmVkLg0KKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5
IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQNCisgICAg
ICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uDQorICAgICAgICBIUkVTVUxUIGhyOw0KKyAgICAg
ICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBociA9IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOw0KKyAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhy
ID09IEVfT1VUT0ZNRU1PUlkpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQz
REZJTExfU09MSUQpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9S
KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
QUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNv
bG9yKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRU1BU0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGZvcihp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7DQorICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygm
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9S
WSk7DQorICAgICAgICB9DQorDQorICAgICAgICBBU1NFUlQobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKTsNCisNCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5V
TEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
LT5DYXB0dXJlKCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5B
QkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVO
QywgRDNEQ01QX0FMV0FZUyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsNCisgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsN
CisNCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29s
b3JNYXNrR3JlZW4sIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEp
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAm
IEQzRENMRUFSX1NURU5DSUwpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywg
RDNEQ01QX0FMV0FZUyk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBE
M0RTVEVOQ0lMT1BfUkVQTEFDRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0N
CisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKyAgICAgICAgbURldmljZS0+U2V0RlZGKEQz
REZWRl9YWVpSSFcpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQ
QVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBE
M0RUQV9URkFDVE9SKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsN
CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNv
bG9yKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
TUFTSywgMHhGRkZGRkZGRik7DQorDQorICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZsb2F0IHF1
YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRoZSB0YXJnZXQsIGFsaWdu
ZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzDQorICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7DQorICAg
ICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsNCisgICAg
ICAgIHF1YWRbMF1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7DQorDQor
ICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOw0KKyAg
ICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7DQorICAg
ICAgICBxdWFkWzFdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMV1bM10gPSAxLjBmOw0KKw0K
KyAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOw0KKyAgICAgICAgcXVhZFsyXVsxXSA9IC0wLjVm
Ow0KKyAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzJdWzNdID0gMS4w
ZjsNCisNCisgICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAu
NWY7DQorICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzNdWzJdID0g
MC4wZjsNCisgICAgICAgIHF1YWRbM11bM10gPSAxLjBmOw0KKw0KKyAgICAgICAgbURpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9U
UklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsNCisNCisgICAgICAgIGlm
IChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVSLCBjb2xvciwg
ZGVwdGgsIHN0ZW5jaWwpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlLT5BcHBseSgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UgaWYg
KGZsYWdzKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFncywg
Y29sb3IsIGRlcHRoLCBzdGVuY2lsKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcykNCit7DQorICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQor
DQorICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsNCisgICAgaW50IHByaW1pdGl2
ZUNvdW50Ow0KKw0KKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNv
dW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkNCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOw0KKw0KKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoZmFsc2UpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisg
ICAgYXBwbHlTdGF0ZShtb2RlKTsNCisNCisgICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsNCisg
ICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9DQorDQorICAgIGFwcGx5U2hhZGVycygp
Ow0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0o
KS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQor
ICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9M
T09QKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9O
RSwgTlVMTCwgMCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAw
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVyICpjb3VudGluZ0lC
ID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7DQorICAgICAg
ICAgICAgaWYgKGNvdW50aW5nSUIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3Vu
dGluZ0lCLT5nZXRCdWZmZXIoKSk7DQorICAgICAgICAgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVk
UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7
DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEg
Y291bnRpbmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAw
LCBwcmltaXRpdmVDb3VudCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250
ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQ0KK3sNCisgICAgaWYg
KCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFpbmRpY2VzICYmICFt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEQzRFBSSU1JVElWRVRZUEUg
cHJpbWl0aXZlVHlwZTsNCisgICAgaW50IHByaW1pdGl2ZUNvdW50Ow0KKw0KKyAgICBpZighZXMy
ZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnBy
aW1pdGl2ZUNvdW50KSkNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOw0K
Kw0KKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
Ow0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgYXBwbHlTdGF0ZShtb2RlKTsNCisN
CisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87DQorICAgIEdMZW51bSBlcnIgPSBh
cHBseUluZGV4QnVmZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsN
CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKGVycik7DQorICAgIH0NCisNCisgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5m
by5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7DQorICAgIEdMc2l6ZWkgcmVwZWF0
RHJhdyA9IDE7DQorICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5JbmRl
eCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOw0KKyAgICBpZiAoZXJyICE9
IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsNCisgICAg
fQ0KKw0KKyAgICBhcHBseVNoYWRlcnMoKTsNCisgICAgYXBwbHlUZXh0dXJlcygpOw0KKw0KKyAg
ICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVT
YW1wbGVycyhmYWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQ0K
KyAgICB7DQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOw0KKw0KKyAgICAgICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRyYXdMaW5l
TG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsgICANCisgICAg
ICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWlu
ZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJ
bmZvLnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQorLy8gSW1wbGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMg
ZmFsc2UsIGdsRmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQ0KK3ZvaWQgQ29udGV4dDo6c3luYyhi
b29sIGJsb2NrKQ0KK3sNCisgICAgbURpc3BsYXktPnN5bmMoYmxvY2spOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgpDQorew0KKyAgICAvLyBHZXQgdGhlIHJhdyBp
bmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcNCisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpKQ0KKyAgICB7DQorICAgICAgICBCdWZmZXIg
KmluZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsNCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOw0K
KyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZl
ci0+ZGF0YSgpKSArIG9mZnNldDsNCisgICAgfQ0KKw0KKyAgICBVSU5UIHN0YXJ0SW5kZXggPSAw
Ow0KKyAgICBib29sIHN1Y2NlZWRlZCA9IGZhbHNlOw0KKw0KKyAgICBpZiAoc3VwcG9ydHMzMmJp
dEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNv
dW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KTsNCisNCisgICAgICAgIGlmICghbUxpbmVM
b29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1U
X0lOREVYMzIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1MaW5lTG9vcElCKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVk
ZWQsIEdMX1VOU0lHTkVEX0lOVCk7DQorDQorICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOw0K
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsNCisgICAgICAgICAg
ICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBp
ZiAoZGF0YSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkN
CisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAv
LyBOb24taW5kZXhlZCBkcmF3DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVtpXSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoNCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQq
PihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVsw
XTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
Ow0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51
bm1hcCgpOw0KKyAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGNvbnN0
IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsN
CisNCisgICAgICAgIGlmICghbUxpbmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAg
bUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9J
TkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMTYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgaWYgKG1MaW5lTG9vcElCKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1MaW5lTG9vcElC
LT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKTsNCisNCisgICAg
ICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRh
dGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VO
ZWVkZWQsICZvZmZzZXQpKTsNCisgICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gMjsN
CisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoZGF0YSkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3DQorICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7
DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOg0KKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOw0KKyAgICAgICAgICAgICAgICBz
dWNjZWVkZWQgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAg
ICANCisgICAgaWYgKHN1Y2NlZWRlZCkNCisgICAgew0KKyAgICAgICAgaWYgKG1BcHBsaWVkSUJT
ZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxpbmVMb29wSUItPmdldEJ1ZmZlcigpKTsNCisgICAg
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRf
TElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQp
Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGEgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkNCit7DQorICAgIG1JbnZhbGlkRW51bSA9IHRydWU7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkNCit7DQorICAgIG1J
bnZhbGlkVmFsdWUgPSB0cnVlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRP
cGVyYXRpb24oKQ0KK3sNCisgICAgbUludmFsaWRPcGVyYXRpb24gPSB0cnVlOw0KK30NCisNCit2
b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkNCit7DQorICAgIG1PdXRPZk1lbW9yeSA9
IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3Bl
cmF0aW9uKCkNCit7DQorICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0cnVlOw0K
K30NCisNCisvLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0cyBm
bGFnLCBpZiBhbnkuDQorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMu
DQorR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkNCit7DQorICAgIGlmIChtSW52YWxpZEVudW0p
DQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfRU5VTTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRWYWx1ZSkN
CisgICAgew0KKyAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfVkFMVUU7DQorICAgIH0NCisNCisgICAgaWYgKG1JbnZhbGlkT3BlcmF0
aW9uKQ0KKyAgICB7DQorICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIGlmICht
T3V0T2ZNZW1vcnkpDQorICAgIHsNCisgICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOw0KKw0K
KyAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7DQorICAgIH0NCisNCisgICAgaWYgKG1J
bnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pDQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkRnJh
bWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgICAgIHJldHVybiBHTF9JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gR0xfTk9fRVJS
T1I7DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0YXR1cygpDQorew0KKyAgICBp
ZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBib29sIGxv
c3QgPSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsNCisNCisgICAgICAgIGlmIChsb3N0KQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7ICAg
Ly8gU2V0cyBtUmVzZXRTdGF0dXMNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBHTGVudW0g
c3RhdHVzID0gbVJlc2V0U3RhdHVzOw0KKw0KKyAgICBpZiAobVJlc2V0U3RhdHVzICE9IEdMX05P
X0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBpZiAobURpc3BsYXktPnRlc3REZXZpY2VSZXNldHRh
YmxlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJS
T1I7DQorICAgICAgICB9DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiBzdGF0dXM7DQorfQ0K
Kw0KK2Jvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKQ0KK3sNCisgICAg
cmV0dXJuIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsN
Cit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOw0KK30NCisNCitpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZF
Q1RPUlNfU00yOw0KK30NCisNCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0
ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7DQorfQ0K
Kw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBn
ZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsNCit9DQorDQoraW50IENvbnRleHQ6
OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NN
MyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOw0KK30NCisNCitpbnQgQ29udGV4
dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFN1
cHBvcnRlZFNhbXBsZXM7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVk
U2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdA0KK3sNCisgICAg
aWYgKHJlcXVlc3RlZCA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gcmVxdWVzdGVkOw0K
KyAgICB9DQorDQorICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0
b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7DQorICAgIGlmIChpdHIg
PT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0x
Ow0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElT
QU1QTEVfMTZfU0FNUExFUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBpZiAoaXRyLT5zZWNvbmRb
aV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gaTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdA0KK3sN
CisgICAgcmV0dXJuIG1TdXBwb3J0c0V2ZW50UXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBw
b3J0c09jY2x1c2lvblF1ZXJpZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQx
VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsN
Cit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6
OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNE
WFQ1VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVy
ZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlczsNCit9
DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jv
b2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisN
Citib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3Vw
cG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBv
cnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1h
eGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhS
ZW5kZXJidWZmZXJEaW1lbnNpb247DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNp
b247DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsNCit9DQor
DQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNM
dW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5h
bmNlVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsNCit9DQorDQor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN1cHBvcnRzMzJiaXRJbmRpY2VzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNpbmc7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0KKyAgICAvLyBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMjoNCisgICAgLy8gSWYgYSBidWZmZXIgb2Jq
ZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5ncyB0byB0aGF0IG9i
amVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0DQorICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQg
dGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLg0KKw0KKyAgICBp
ZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBt
U3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGlu
dCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1
dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxM
KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1
cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjggcGFnZSA4NDoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBp
dCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0
dXJlIG9iamVjdCBhcmUNCisgICAgLy8gcmVib3VuZCB0byB0ZXh0dXJlIG9iamVjdCB6ZXJvDQor
DQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBl
KyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5p
ZCgpID09IHRleHR1cmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biA0LjQgcGFnZSAxMTI6DQorICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3
aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1
ZmZlciwgdGhlbiBpdCBpcw0KKyAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQg
YmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9p
bnQgdG8gd2hpY2ggdGhpcw0KKyAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJl
bnRseSBib3VuZCBmcmFtZWJ1ZmZlci4NCisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1
ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZm
ZXIpDQorICAgIHsNCisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0
dXJlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1
ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAgIGRyYXdGcmFtZWJ1ZmZl
ci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6
OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoNCisgICAgLy8gSWYgYSBmcmFtZWJ1
ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlz
IGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaA0KKyAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJl
ZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZl
ciBvZiB6ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1
ZmZlcikNCisgICAgew0KKyAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikNCisgICAg
ew0KKyAgICAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAgfQ0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5Og0KKyAgICAvLyBJ
ZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIg
aXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXINCisgICAgLy8gaGFk
IGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6
ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZl
cikNCisgICAgew0KKyAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsNCisgICAgfQ0KKw0KKyAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTE6DQorICAgIC8vIElm
IGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRh
Y2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLA0KKyAgICAvLyB0aGVuIGl0
IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBh
IHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50DQorICAgIC8vIHBvaW50IHRv
IHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJh
bWVidWZmZXIuDQorDQorICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFk
RnJhbWVidWZmZXIoKTsNCisgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQ0KKyAgICB7DQor
ICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
Ow0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVy
ICE9IHJlYWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5k
ZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KK30NCisNCitUZXh0dXJl
ICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBlKQ0KK3sNCisg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7DQorDQorICAg
IGlmICh0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNv
bG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9Ow0KKw0KKyAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
DQorICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRVUkVfMkQNCisN
CisgICAgICAgICAgY2FzZSBURVhUVVJFXzJEOg0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklO
Q09NUExFVEVfVEVYVFVSRV9JRCk7DQorICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0
SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0KKyAg
ICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBicmVhazsNCisNCisgICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6DQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3
IFRleHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7DQorDQorICAg
ICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwg
Y29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0K
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorDQorICAgICAgICAgICAgICB0ID0g
aW5jb21wbGV0ZUN1YmU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQodCk7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIHQ7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Y3VsbFNraXBz
RHJhdyhHTGVudW0gZHJhd01vZGUpDQorew0KKyAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYm
IG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShk
cmF3TW9kZSk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRy
YXdNb2RlKQ0KK3sNCisgICAgc3dpdGNoIChkcmF3TW9kZSkNCisgICAgew0KKyAgICAgIGNhc2Ug
R0xfVFJJQU5HTEVTOg0KKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOg0KKyAgICAgIGNhc2Ug
R0xfVFJJQU5HTEVfU1RSSVA6DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICBjYXNlIEdM
X1BPSU5UUzoNCisgICAgICBjYXNlIEdMX0xJTkVTOg0KKyAgICAgIGNhc2UgR0xfTElORV9MT09Q
Og0KKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmYWxz
ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZXMpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKTsNCisNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1
cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtp
bmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsNCisgICAgbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsNCisgICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsNCisN
CisgICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1ZShpbmRleCk7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQ0KK3sNCisgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUyk7DQorDQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0g
ZGl2aXNvcjsNCit9DQorDQorLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIN
CisvLyBPRVMgZXh0ZW5zaW9ucw0KKy8vIEVYVCBleHRlbnNpb25zDQorLy8gVmVuZG9yIGV4dGVu
c2lvbnMNCit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQ0KK3sNCisgICAgbUV4
dGVuc2lvblN0cmluZyA9ICIiOw0KKw0KKyAgICAvLyBPRVMgZXh0ZW5zaW9ucw0KKyAgICBpZiAo
c3VwcG9ydHMzMmJpdEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOw0KKyAgICB9DQorDQorICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOw0KKyAgICAvL21F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsNCisgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsNCisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7DQorDQorICAgIGlmIChzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOw0KKyAgICB9DQorICAg
IGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAiOw0KKyAgICB9DQorICAgIGlmIChz
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7DQorICAgIH0NCisNCisg
ICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7DQorICAgIH0NCisNCisgICAg
Ly8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzT2NjbHVz
aW9uUXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9F
WFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOw0KKw0KKyAgICBpZiAoc3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOw0KKyAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlICI7DQorDQorICAgIC8vIEFOR0xFLXNw
ZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQ0KKyAg
ICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJl
ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfYmxpdCAiOw0KKyAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApDQor
ICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlICI7DQorICAgIH0NCisNCisgICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygp
KQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5j
ZWRfYXJyYXlzICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOw0KKw0KKyAgICBpZiAoc3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgIjsNCisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7DQorDQorICAgIC8v
IE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zDQorICAgIGlmIChzdXBwb3J0c0V2ZW50
UXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9m
ZW5jZSAiOw0KKyAgICB9DQorDQorICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4
dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7DQorICAgIGlmIChlbmQgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXpl
KGVuZCsxKTsNCisgICAgfQ0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNp
b25TdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIo
KTsNCit9DQorDQordm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcoKQ0KK3sNCisgICAg
RDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVy
SWRlbnRpZmllcigpOw0KKw0KKyAgICBtUmVuZGVyZXJTdHJpbmcgPSAiQU5HTEUgKCI7DQorICAg
IG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5EZXNjcmlwdGlvbjsNCisgICAgbVJlbmRl
cmVyU3RyaW5nICs9ICIpIjsNCit9DQorDQorY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UmVuZGVy
ZXJTdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1SZW5kZXJlclN0cmluZy5jX3N0cigp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQg
ZHN0WTEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQ0K
K3sNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+
Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwNCisgICAgICAgICFk
cmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpbnQgcmVhZEJ1ZmZl
cldpZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOw0K
KyAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCk7DQorICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQorICAgIGludCBkcmF3QnVmZmVy
SGVpZ2h0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsN
CisNCisgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICBSRUNUIGRlc3RSZWN0Ow0KKw0KKyAgICBp
ZiAoc3JjWDAgPCBzcmNYMSkNCisgICAgew0KKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3Jj
WDA7DQorICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDE7DQorICAgICAgICBkZXN0UmVj
dC5sZWZ0ID0gZHN0WDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgxOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDE7DQor
ICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7DQorICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0gc3JjWDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgwOw0KKyAgICB9DQorDQor
ICAgIGlmIChzcmNZMCA8IHNyY1kxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7DQorICAgICAgICBz
b3VyY2VSZWN0LnRvcCA9IHNyY1kwOw0KKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7DQor
ICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNy
Y1kwOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7DQorICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTE7DQorICAgIH0N
CisNCisgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNlUmVjdDsNCisgICAgUkVD
VCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0Ow0KKw0KKyAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0KQ0KKyAgICB7DQorICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBk
ZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QNCisgICAg
ICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgZGVzdFJlY3QgaXMgbm93IGluIEQzRC1zdHlsZSBjb29y
ZGluYXRlcywgc28gdGhlICp0b3AqIG9mIHRoZQ0KKyAgICAgICAgLy8gcmVjdCB3aWxsIGJlIGNo
ZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4NCisgICAgICAg
IGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7DQorICAg
ICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsNCisgICAg
ICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmxlZnQgKz0geERpZmY7DQorICAgICAgICB9DQor
DQorICAgICAgICBpZiAoZGVzdFJlY3QucmlnaHQgPiBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUu
c2Npc3NvcldpZHRoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RS
ZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOw0KKyAg
ICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnJpZ2h0ID0gbVN0YXRlLnNjaXNzb3JYICsgbVN0
YXRlLnNjaXNzb3JXaWR0aDsNCisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0
IC09IHhEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1T
dGF0ZS5zY2lzc29yWSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgeURpZmYgPSBtU3Rh
dGUuc2Npc3NvclkgLSBkZXN0UmVjdC50b3A7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJl
Y3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJl
Y3QudG9wICs9IHlEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGRlc3RSZWN0LmJv
dHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Np
c3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3Jl
ZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQ7DQor
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7DQorICAg
IGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOw0KKw0KKyAgICBSRUNUIHNvdXJjZVRyaW1t
ZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsNCisgICAgUkVDVCBkZXN0VHJpbW1lZFJlY3Qg
PSBkZXN0U2Npc3NvcmVkUmVjdDsNCisNCisgICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9u
IHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQg
b2YgdGhlIGJvdW5kcyBvZiANCisgICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZh
Y2VzLg0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QubGVmdCA8IDApDQorICAgIHsNCisgICAg
ICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgc291
cmNlVHJpbW1lZFJlY3QubGVmdCA9IDA7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCAr
PSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiBy
ZWFkQnVmZmVyV2lkdGgpDQorICAgIHsNCisgICAgICAgIGludCB4RGlmZiA9IHNvdXJjZVRyaW1t
ZWRSZWN0LnJpZ2h0IC0gcmVhZEJ1ZmZlcldpZHRoOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qucmln
aHQgLT0geERpZmY7DQorICAgIH0NCisNCisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8
IDApDQorICAgIHsNCisgICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50
b3A7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgPSAwOw0KKyAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnRvcCArPSB5RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1l
ZFJlY3QuYm90dG9tID4gcmVhZEJ1ZmZlckhlaWdodCkNCisgICAgew0KKyAgICAgICAgaW50IHlE
aWZmID0gc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsNCisgICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQ7DQorICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB4RGlmZiA9IDAg
LSBkZXN0VHJpbW1lZFJlY3QubGVmdDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0g
MDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7DQorICAgIH0NCisN
CisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRyYXdCdWZmZXJXaWR0aCkNCisgICAg
ew0KKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZl
cldpZHRoOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID0gZHJhd0J1ZmZlcldpZHRo
Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7DQorICAgIH0NCisN
CisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC50b3AgPCAwKQ0KKyAgICB7DQorICAgICAgICBpbnQg
eURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVj
dC50b3AgPSAwOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOw0KKyAg
ICB9DQorDQorICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdo
dCkNCisgICAgew0KKyAgICAgICAgaW50IHlEaWZmID0gZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAt
IGRyYXdCdWZmZXJIZWlnaHQ7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJh
d0J1ZmZlckhlaWdodDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5RGlm
ZjsNCisgICAgfQ0KKw0KKyAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7DQorICAg
IGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSBzb3VyY2VUcmltbWVkUmVjdC50b3AgPCBy
ZWFkQnVmZmVySGVpZ2h0IHx8DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNv
dXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgDQorICAgICAgICBkZXN0
VHJpbW1lZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdCdWZmZXJIZWln
aHQgfHwNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtIGRlc3RUcmltbWVkUmVjdC5s
ZWZ0IDwgZHJhd0J1ZmZlcldpZHRoIHx8DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3Ag
IT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVm
dCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApDQorICAgIHsNCisgICAgICAgIHBh
cnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8y
RCB8fA0KKyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkg
PT0gR0xfUkVOREVSQlVGRkVSOw0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8
DQorICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9SRU5ERVJCVUZGRVI7DQorICAgICAgICBpZiAoIXZhbGlkUmVhZFR5cGUgfHwgIXZhbGlkRHJh
d1R5cGUgfHwNCisgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCkt
PmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
RDNERm9ybWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJDb2xvciBidWZmZXIg
Zm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBi
eSB0aGlzIGltcGxlbWVudGF0aW9uIik7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYgKHBh
cnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOw0KKw0K
KyAgICB9DQorDQorICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1
ZmZlciA9IE5VTEw7DQorICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
DQorDQorICAgICAgICAvLyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5k
IGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIHNvIGlmIHdlIGhhdmUNCisgICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLg0KKw0KKyAgICAgICAgaWYgKG1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlclR5cGUoKSB8fA0KKyAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAg
ICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0
cnVlOw0KKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCk7DQorICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor
DQorICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fA0KKyAgICAgICAg
ICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZv
cm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3Jt
YXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgcmVh
ZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAgICAg
ICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChwYXJ0aWFs
QnVmZmVyQ29weSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVm
ZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1l
bnRhdGlvbi4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOyAvLyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZA0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1w
bGVzKCkgIT0gMCkgfHwgDQorICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAmJiByZWFkRFNCdWZm
ZXItPmdldFNhbXBsZXMoKSAhPSAwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAg
ICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOw0KKw0KKyAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJn
ZXQpDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRSZW5k
ZXJUYXJnZXQgPSByZWFkRnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRSZW5kZXJUYXJnZXQsICZzb3VyY2VUcmltbWVkUmVjdCwg
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOw0KKw0KKyAgICAg
ICAgICAgIHJlYWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBkcmF3UmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJB
TkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQorICAgICAg
ICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAg
ICBpZiAoYmxpdERlcHRoU3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5j
aWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOw0KKw0KKyAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZERlcHRoU3RlbmNpbCwg
TlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsNCisNCisgICAgICAg
ICAgICByZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgZHJhd0RlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5H
TEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOw0KKyAgICAgICAg
ICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0K
Kw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1N
YXhMcnUoMCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NB
Q0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52
ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7DQorICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxy
dUNvdW50ID0gMDsNCisgICAgfQ0KK30NCisNCitWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVy
dGV4RGVjbGFyYXRpb25DYWNoZSgpDQorew0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9W
RVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChtVmVy
dGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCitHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6
YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywg
R0xzaXplaSAqcmVwZWF0RHJhdykNCit7DQorICAgICpyZXBlYXREcmF3ID0gMTsNCisNCisgICAg
aW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7DQorICAgIGludCBpbnN0
YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7DQorDQorICAgIGlmIChpbnN0YW5j
ZXMgPiAwKQ0KKyAgICB7DQorICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRv
IGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDANCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXNbaV0uYWN0aXZlKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYg
KGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0KKyAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDAp
DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhl
ZEF0dHJpYnV0ZSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9W
RVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJpYnV0ZSA9IGk7DQorICAgICAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxz
ZSBicmVhazsgICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1
dGUNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOw0KKyAg
ICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsNCisNCisgICAgUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsN
CisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisg
ICAgew0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGludCBzdHJlYW0gPSBpOw0KKw0KKyAgICAgICAgICAgIGlmIChpbnN0YW5jZXMg
PiAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9u
IEFUSSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0
dHJpYnV0ZXMgYXJlIGluc3RhbmNlZC4NCisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOw0KKyAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkNCisgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAwOw0KKyAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQ0KKyAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4
ZWRBdHRyaWJ1dGU7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
ICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7DQorICAgICAgICAgICAgICAgICAgICANCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkNCisgICAgICAgICAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7DQorICAgICAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNF
REFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsNCisgICAgICAgICAgICAgICAgICAgIG1J
bnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0
dHJpYnV0ZXNbaV0uc2VyaWFsIHx8DQorICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8DQorICAgICAgICAgICAgICAgIG1B
cHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uoc3RyZWFt
LCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJp
YnV0ZXNbaV0uc3RyaWRlKTsNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5z
ZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRW
QnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsNCisgICAgICAgICAgICAg
ICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsNCisg
ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOw0K
KyAgICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7DQorICAgICAgICAgICAgZWxlbWVudC0+
VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsNCisgICAgICAgICAgICBlbGVtZW50LT5NZXRob2Qg
PSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7DQorICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBE
M0RERUNMVVNBR0VfVEVYQ09PUkQ7DQorICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9
IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7DQorICAgICAgICAgICAgZWxlbWVu
dCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBp
bnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0KKyAgICB7DQorICAgICAg
ICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7DQorICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5U
OSBlbmQgPSBEM0RERUNMX0VORCgpOw0KKyAgICAqKGVsZW1lbnQrKykgPSBlbmQ7DQorDQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykN
CisgICAgew0KKyAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhE
ZWNsQ2FjaGVbaV07DQorICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywg
ZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5
KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQorICAgICAg
ICAgICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1Ow0KKyAgICAgICAgICAgIGlmKGVudHJ5
LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4
RGVjbGFyYXRpb24pOw0KKyAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZl
cnRleERlY2xhcmF0aW9uOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm4g
R0xfTk9fRVJST1I7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgVmVydGV4RGVjbENhY2hl
RW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7DQorDQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAg
ICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNv
dW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENh
Y2hlW2ldOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRl
eERlY2xhcmF0aW9uICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsNCisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24gPSBOVUxMOw0KKyAgICAgICAgLy8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJl
cGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5DQorICAgICAgICAvLyBhYm91dCBp
dC4NCisgICAgfQ0KKw0KKyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxl
bWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7
DQorICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlv
bihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgbUxhc3RTZXRWRGVjbCA9IGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247DQorICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSAr
K21NYXhMcnU7DQorDQorICAgIHJldHVybiBHTF9OT19FUlJPUjsNCit9DQorDQordm9pZCBWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpDQorew0KKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtQXBw
bGllZFZCc1tpXS5zZXJpYWwgPSAwOw0KKyAgICB9DQorDQorICAgIG1MYXN0U2V0VkRlY2wgPSBO
VUxMOw0KKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBi
ZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkDQorfQ0KKw0KK30NCisNCitleHRlcm4gIkMiDQorew0K
K2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywg
Y29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wg
cm9idXN0QWNjZXNzKQ0KK3sNCisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNo
YXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOw0KK30NCisNCit2b2lkIGds
RGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpDQorew0KKyAgICBkZWxldGUgY29u
dGV4dDsNCisNCisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkNCisgICAgew0K
KyAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICBnbDo6bWFrZUN1cnJl
bnQoY29udGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7DQorfQ0KKw0KK2dsOjpDb250ZXh0ICpnbEdl
dEN1cnJlbnRDb250ZXh0KCkNCit7DQorICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOw0KK30N
Cit9DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
aAppbmRleCA4ZGNjZjBmLi40ZDQ3Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApAQCAtMjUxLDcgKzI1MSw3IEBAIGNsYXNzIFZlcnRl
eERlY2xhcmF0aW9uQ2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1NYXhMcnU7CiAKLSAgICBl
bnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9OworICAgIGVudW0geyBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAgICBzdHJ1Y3QgVkJEYXRh
CiAgICAgewpAQCAtMjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQKIAogICAgIHZvaWQgbWFr
ZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwog
Ci0gICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxs
U3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpA
QCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQx
NlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVz
KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0
OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9v
bCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2Vz
OwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4
IDczMGZmZmMuLjc2ZDQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVy
Ojp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAg
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQog
CiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50
IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQog
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZl
cjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
bUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAg
QEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0
dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFt
ZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxi
dWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVy
KQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRl
cHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNp
emVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8Cisg
ICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxi
dWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5k
ZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsK
KyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0K
KworICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENv
bG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMs
OSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJh
bWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7
CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1
ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcw
LDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAg
ICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNE
Rk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAg
ICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0
ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9y
bWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1
ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZv
cm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rm
b3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIt
PmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChk
eDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2ls
VGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQogCiAgICAgICAg
IHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9y
YnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRT
YW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0
dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVy
ID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0g
ICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJl
cXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0gICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1
ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAg
LTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0
aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhi
dWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFi
bGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVw
dGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQo
KSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVw
dGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJl
IGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNEZXB0aFRleHR1
cmVGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXIt
PmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1w
bGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhl
aWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQog
ICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7
Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51
bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
d2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJC
VUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
OworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVy
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9E
SU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZm
ZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0
YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJl
Rm9ybWF0KGQzZGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlm
IChtaXNzaW5nQXR0YWNobWVudCkKICAgICAgICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVu
Y2lsYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgp
IHx8IGhlaWdodCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNh
bXBsZXMoKSkKICAgICAgICAgewpAQCAtMzc4LDE0ICs0NTcsMTcgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCisgICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwg
YnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ug
d2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVw
dGggYW5kIHN0ZW5jaWwKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAo
ZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCiAgICAgewotICAgICAgICBpZiAoZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwK
LSAgICAgICAgICAgIHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KSAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVk
IHRvIGhhdmUgYXQgbGVhc3Qgb25lIGF0dGFjaG1lbnQgdG8gYmUgY29tcGxldGUKKyAgICBpZiAo
bWlzc2luZ0F0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCmluZGV4IGI3M2Y5YTAuLjE0ZDljMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgK
QEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5kZXJidWZmZXIgKmdl
dENvbG9yYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwogICAg
IFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
TnVsbENvbG9yYnVmZmVyKCk7CiAKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7CiAg
ICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOwpAQCAtNzMsNiArNzQsOCBAQCBjbGFzcyBG
cmFtZWJ1ZmZlcgogICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7CiAgICAgQmluZGluZ1Bv
aW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7CiAKKyAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyOworCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKaW5kZXgg
YTVlMzhiZi4uZjI4YTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwCkBAIC04LDYgKzgsNyBAQAogLy8gYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIApAQCAtMTcsMjI2MSAr
MTgsODUgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgZ2wKIHsKLXVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25z
dCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50
IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAg
OiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlm
b3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWdu
ZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9
IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwot
fQotCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5jb21wYXJl
KDAsIDMsICJhcl8iKSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlv
bihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFt
ZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3JhbTo6UHJv
Z3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291cmNl
TWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkp
Ci17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotICAgIG1GcmFnbWVudFNoYWRlciA9IE5V
TEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
TlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVQ
UyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9
IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7Ci0KLSAgICBt
RGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Qcm9ncmFt
Ojp+UHJvZ3JhbSgpCi17Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXR0
YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhT
aGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAg
bUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNo
YWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhf
U0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwot
ICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFE
RVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZy
YWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7
Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK2NvbnN0IGNoYXIgKiBjb25zdCBnX2Zh
a2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFBy
b2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1W
ZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOwotfQordW5z
aWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKIAotSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5nczo6QXR0
cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQogCi1J
RGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQorQXR0cmli
dXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOwogfQogCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCitJbmZvTG9nOjpJbmZvTG9nKCkgOiBtSW5mb0xv
ZyhOVUxMKQogewotICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsK
LSAgICB9CiB9CiAKLUdMdWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQorSW5mb0xvZzo6fkluZm9Mb2coKQogewotICAgIGlmIChuYW1lKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5k
ZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIC0xOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCi1pbnQgUHJvZ3JhbTo6
Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCi17Ci0gICAgQVNTRVJUKGF0dHJp
YnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOwot
ICAgIAotICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Ci19CiAKLS8v
IFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCi1H
TGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCitpbnQg
SW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHR5cGUpCisgICAgaWYg
KCFtSW5mb0xvZykKICAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIHJl
dHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoK
LSAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotfQotCi0v
LyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3Jy
ZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhl
IHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQcm9n
cmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4KQotewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVy
c1BTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotCi0g
ICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChsb2dpY2FsVGV4dHVyZVVu
aXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8vIFJl
dHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlw
ZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJUZXh0dXJl
VHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5k
ZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotICAgICAg
ICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1
cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQotewotICAg
IHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOwotCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1i
b29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
MF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAgIHRhcmdl
dFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0
ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdl
dCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAg
dGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2
ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgcmV0
dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIEluZm9Mb2c6OmdldExvZyhHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
RkxPQVRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OworICAgIGludCBpbmRleCA9IDA7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAg
ICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07
Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0g
ICAgICAgICAgICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgaWYgKG1J
bmZvTG9nKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAg
ICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKICAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQp
ICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Cisg
ICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAw
LjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQg
dGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdo
dD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Ci17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7
Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7
Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0
aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNp
ZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50
IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xf
RkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFs
dWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2
YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQs
IHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAxNjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FN
UExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VC
RSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAg
ICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Ci17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkg
KiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAgICAgICAg
ICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3Jt
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVy
IGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJl
cXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwot
ICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdl
dFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRy
aXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFs
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAx
LjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAg
ICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxD
b3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYo
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
cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAg
ICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBw
bGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAg
Zm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2lu
KCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5k
aXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5
VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywg
Yik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5p
Zm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAg
IGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFw
cGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRo
ZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAq
UHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFo
bHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVz
dWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0g
ICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVf
REVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQ
X09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGgg
PSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5l
IDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmlu
ZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4
dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAg
ICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBO
VUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0g
RDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFp
biIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQotICAgIGlm
IChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNv
bnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgIGFw
cGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBo
bHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1l
c3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJD
b25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQ
b2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0K
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgQ29u
dGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1Zl
Y3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAo
VmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2
YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1u
Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0g
ICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNj
ZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUg
PSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWls
YWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsK
LSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2lu
Z1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
ciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJs
ZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHld
W3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09
IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5
XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBu
ICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1ty
XVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVu
ZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVy
cyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
Ci0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBh
Y2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVn
aXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQot
Ci1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1w
dHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRz
Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwot
ICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4
VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0gICAgewot
ICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwotICAg
IH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxM
fTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0
LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9y
cyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lz
dGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVy
cyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBm
YWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRw
dXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQt
PnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0lu
Zm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0
aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+
Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkZy
YWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5w
dXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09M
T1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVU
XG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9
IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
YXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAg
ICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBz
ZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9
Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9T
SVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAg
ICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNr
aW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihy
KSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZl
cnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0
ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAg
ICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5h
bWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50
eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihp
bnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKLSAg
ICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBn
bF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGds
X1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xf
UG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlm
IChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBt
VmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNp
emUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSAr
ICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29y
ZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAg
ICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICog
cm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIg
PSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJl
Z2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09
ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4
SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5n
LT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0
cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wg
Kz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBV
VFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
LSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0
cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsg
biArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJz
KSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7
XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtc
biI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAg
ICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0g
OiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxu
IgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBy
aHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRo
ZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkK
LSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4
X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFn
Q29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29u
dGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVy
LnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcp
ICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4
X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56
ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7XG4iOwot
ICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAg
ewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNP
ckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZG
YWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWlu
Zy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSAr
ICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21h
aW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
UFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRo
ZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVw
IHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJt
aW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBv
ZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAg
IGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIg
fHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0g
ICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxp
bmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmls
ZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAi
OwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4
QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2Zp
bGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNv
bXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFu
dFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hh
ZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhl
Y3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQ
aXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4
ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0
KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4
QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlm
b3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1D
b25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJj
aGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAgICAgICAg
IC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwg
ZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4Q29vcmRM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAgICAgIG1E
eEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVs
U2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAgICAgICAg
ICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8v
IERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3Qz
RCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmli
dXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmli
dXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAt
MSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91
bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwot
Ci0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0
dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRl
LT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAx
IDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9u
ID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUt
PnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZy
ZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAg
ICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dz
ID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0
ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBG
YWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0
ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0
U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAg
ICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsg
ciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0
cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0dHJp
YnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9j
YXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlu
a1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RY
Q09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09O
U1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRpb25Db3Vu
dCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3Jp
cHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0
YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudElu
ZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3Rh
bnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFu
dEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkg
c2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
ZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRlZmluZVVu
aWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewotICAgIGlm
IChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEWEhBTkRM
RSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwg
Y29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25z
dGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29u
c3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RY
UFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAw
OwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgo
c2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhj
ZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3Rh
bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRN
YXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRF
WFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4
VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQz
RFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFy
cmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsg
YXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJl
cnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RY
SEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3Rh
bnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVT
QyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9u
Q291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0
YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdElu
ZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJy
YXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVV
bmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNj
cmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBj
YXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAg
ICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29u
c3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0
aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGlu
dCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVu
dW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlh
bGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFudFRhYmxl
UFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnZz
LCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7
Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsr
aSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlv
bihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RF
U0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAg
ICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2Nh
bGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQ
VF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09M
X1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgot
ICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3Rh
bnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
TUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRj
aCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRy
aWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgw
LCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5h
bWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoX25hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5z
dWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9pZCBQcm9n
cmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01B
WF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8
Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwg
d2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkK
LSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsK
LSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAg
ICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3Vu
dCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xf
Q09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAg
ewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZM
T0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
fQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0K
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
c2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleDsK
LQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdElu
ZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4
LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAw
KTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdl
dFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5
VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3Jb
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2
WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2
ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50
LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlV
bmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQz
RFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgaWYgKGxlbmd0aCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNf
RkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKICAg
ICB9CiB9CiAKIC8vIGFwcGVuZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhlIHByb2dyYW0gaW5m
byBsb2cuCiAvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBmaWxlIHBhdGggaW4g
c29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKIC8vIG1lc3NhZ2VzLCBzbyBsZXRzIHJlbW92
ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9tIHRoZSBsb2cuCi12
b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdl
KQordm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsK
ICAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CiAKICAgICBzaXplX3QgZm91bmQ7CiAgICAg
ZG8KICAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOworICAgICAgICBm
b3VuZCA9IG1zZy5maW5kKGdfZmFrZXBhdGgpOwogICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpz
dHJpbmc6Om5wb3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3Ry
bGVuKGZha2VwYXRoKSk7CisgICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxlbihnX2Zh
a2VwYXRoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKTsKIAotICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsK
KyAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YXBw
ZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQordm9pZCBJbmZvTG9nOjphcHBl
bmQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgaWYgKCFmb3JtYXQpCiAgICAgewpA
QCAtMjMwNCw3ICsxMjksNyBAQCB2b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikKICAgICB9CiB9CiAKLXZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9n
KCkKK3ZvaWQgSW5mb0xvZzo6cmVzZXQoKQogewogICAgIGlmIChtSW5mb0xvZykKICAgICB7CkBA
IC0yMzEzLDk5ICsxMzgsMTcwIEBAIHZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKICAgICB9
CiB9CiAKLS8vIFJldHVybnMgdGhlIHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRl
LCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5s
aW5rKGJvb2wgZGVzdHJveSkKK1Byb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5h
Z2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUo
aGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQogewotICAgIGlmIChkZXN0cm95KSAgIC8v
IE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtRnJh
Z21lbnRTaGFkZXIgPSBOVUxMOworICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1Qcm9n
cmFtQmluYXJ5ID0gTlVMTDsKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CisgICAgbVJlZkNv
dW50ID0gMDsKK30KIAotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9CitQcm9ncmFtOjp+UHJvZ3JhbSgpCit7Cisg
ICAgdW5saW5rKHRydWUpOwogCi0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgaWYgKG1W
ZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIG1WZXJ0
ZXhTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUp
CisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxM
OworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9Cit9CiAKLSAgICBp
ZiAobUNvbnN0YW50VGFibGVQUykKK2Jvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAq
c2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVS
KQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOwotICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICB9CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAg
IGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNo
YWRlciopc2hhZGVyOworICAgICAgICBtVmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAg
IHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3Rh
bnRUYWJsZVZTID0gTlVMTDsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1GcmFnbWVudFNo
YWRlci0+YWRkUmVmKCk7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaW5kZXgrKykKK2Jvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAq
c2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVS
KQogICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwot
ICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9CisgICAgICAgIGlmICht
VmVydGV4U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVh
c2UoKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYg
KHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7Ci0gICAgICAg
IG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1GcmFnbWVu
dFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAg
ICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVy
c0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAo
bUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCit2b2lk
IEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBj
b25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykK
ICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7CisgICAgICAg
IH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwogICAg
IH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4
LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5iaW5kQXR0cmli
dXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOworfQorCisvLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9m
IHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5n
cywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRy
aWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCisvLyBhIGxpc3Qgb2YgdW5pZm9ybXMKK3Zv
aWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAgdW5saW5rKGZhbHNlKTsKIAotICAgIG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlID0gMDsKLSAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKyAg
ICBtSW5mb0xvZy5yZXNldCgpOwogCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKKyAg
ICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OworICAgIGlmICghbVByb2dyYW1C
aW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVy
LCBtVmVydGV4U2hhZGVyKSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygp
OwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsK
ICAgICB9Cit9CiAKLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0
aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKK2ludCBBdHRyaWJ1dGVCaW5kaW5nczo6
Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKK3sKKyAg
ICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBs
b2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9u
XS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQogCi0g
ICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworICAgIHJldHVybiAtMTsKK30KIAotICAgIG1QaXhl
bEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigpOworLy8gUmV0dXJucyB0aGUg
cHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBv
ciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQorewor
ICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCisgICAgeworICAg
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtRnJhZ21l
bnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7
CisgICAgICAgIH0KIAotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVM
TDsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxM
OworICAgICAgICB9CisgICAgfQogCi0gICAgbUxpbmtlZCA9IGZhbHNlOworICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUHJvZ3JhbUJpbmFyeTsKKyAgICAg
ICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtOjppc0xp
bmtlZCgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkKIHsKLSAg
ICByZXR1cm4gbUxpbmtlZDsKKyAgICByZXR1cm4gbVByb2dyYW1CaW5hcnk7CiB9CiAKLWJvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJp
bmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHJldHVybiBtVmFsaWRh
dGVkOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmlu
YXJ5OwogfQogCiB2b2lkIFByb2dyYW06OnJlbGVhc2UoKQpAQCAtMjQ0MCwzNSArMzM2LDEyIEBA
IHVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCiAKIGludCBQcm9ncmFtOjpnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxl
bihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3RoKCk7
CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYg
KG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbmZv
TG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmdldExvZyhi
dWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogfQogCiB2b2lkIFByb2dyYW06OmdldEF0dGFjaGVk
U2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJz
KQpAQCAtMjUwMywxNTIgKzM3Niw5NiBAQCB2b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZQogCiB2b2lk
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5h
bWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKLSAgICB1bnNpZ25l
ZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOwot
ICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBh
dHRyaWJ1dGUrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlQXR0cmli
dXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUp
OwogICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAgICAgewotICAgICAg
ICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5j
X3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAgICAg
ICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCisgICAgICAgIGlmIChidWZzaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAgICAgfQotICAg
IH0KIAotICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNl
Ci0KLSAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOworICAgICAg
ICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKKyAgICB9CiB9CiAKIEdMaW50
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQgPSAw
OwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
Lm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAg
fQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRl
TWF4TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0
dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAg
aWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0
ZU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCiB2b2lkIFByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIC8vIFNr
aXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3Jt
ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0gPSAwOyB1
bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFy
ZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKLSAgICAgICAg
ewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVVbmlmb3Jt
Kys7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRl
eCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBBU1NF
UlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxl
ciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCisg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3Vu
aWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXko
KSkKKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmcgKz0gIlswXSI7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBu
YW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KICAgICAgICAgaWYgKGxlbmd0aCkKICAgICAgICAg
ewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgICpsZW5n
dGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9y
bV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwor
ICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICB9CiB9CiAK
IEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaW50IGNvdW50
ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
bnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAg
ICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAs
IDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgr
KykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgp
ICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXko
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50
aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3Rk
OjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3Ro
OwogfQogCiB2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCkBAIC0yNjYzLDE2MSArNDgw
LDI4IEBAIGJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAogCiB2b2lk
IFByb2dyYW06OnZhbGlkYXRlKCkKIHsKLSAgICByZXNldEluZm9Mb2coKTsKKyAgICBtSW5mb0xv
Zy5yZXNldCgpOwogCi0gICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVu
IHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgbVByb2dyYW1CaW5hcnktPnZhbGlkYXRlKG1JbmZvTG9nKTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxp
ZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZhbGlk
YXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUg
c2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0
byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1
cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAv
LyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVS
QVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAg
ICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kp
Ci0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0
dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
VG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0g
VEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2Ft
cGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNh
bXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1h
Z2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2Ft
cGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1
bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9y
bSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVu
aXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9
IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlw
ZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1w
bGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IG1JbmZvTG9nLmFwcGVuZCgiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtl
ZC4iKTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQcm9ncmFtOjppbml0
aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJl
Z2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK2Jvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIEQzRFhIQU5ETEUgaGFuZGxlID0g
Y29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+X25hbWUu
Y19zdHIoKSk7Ci0gICAgaWYgKGhhbmRsZSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAg
ewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNv
bnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24u
UmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlclNldDsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5pc1ZhbGlk
YXRlZCgpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICByaS0+cmVnaXN0ZXJDb3Vu
dCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLUdMaW50IFByb2dyYW06
OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhS
YW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFt
OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0
aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4
RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVz
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247
Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtLmgKaW5kZXggNjE4MzBjNi4uMjQ0NzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElC
R0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29t
cGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUg
PHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywzNiBA
QCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZl
cnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwg
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKLQotICAg
IH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQotICAgIGNvbnN0IEdMZW51bSB0
eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCi0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQotICAgIGNv
bnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGdf
ZmFrZXBhdGg7CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Citj
bGFzcyBBdHRyaWJ1dGVCaW5kaW5ncworeworICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGlu
Z3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotICAgIHN0cnVjdCBSZWdpc3Rlcklu
Zm8KLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNldDsKLSAgICAgICAgaW50IHJlZ2lzdGVy
SW5kZXg7Ci0gICAgICAgIGludCByZWdpc3RlckNvdW50OwotICAgIH07CisgICAgdm9pZCBiaW5k
QXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICBp
bnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3Q7CiAK
LSAgICBSZWdpc3RlckluZm8gcHM7Ci0gICAgUmVnaXN0ZXJJbmZvIHZzOworICBwcml2YXRlOgor
ICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FU
VFJJQlNdOwogfTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2Vs
ZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRp
b24KK2NsYXNzIEluZm9Mb2cKIHsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAg
cHVibGljOgorICAgIEluZm9Mb2coKTsKKyAgICB+SW5mb0xvZygpOwogCi0gICAgc3RkOjpzdHJp
bmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQgaW5k
ZXg7CisgICAgaW50IGdldExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0TG9nKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKworICAgIHZvaWQgYXBw
ZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldCgpOworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmZvTG9nKTsKKyAgICBjaGFyICptSW5mb0xvZzsKIH07
CiAKIGNsYXNzIFByb2dyYW0KQEAgLTc0LDQ1ICs2NiwxMiBAQCBjbGFzcyBQcm9ncmFtCiAgICAg
Ym9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwogICAgIGludCBnZXRBdHRhY2hlZFNo
YWRlcnNDb3VudCgpIGNvbnN0OwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhl
bFNoYWRlcigpOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigp
OwotCiAgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBj
aGFyICpuYW1lKTsKLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAq
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
ICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOwogCiAgICAgdm9pZCBsaW5rKCk7Ci0gICAgYm9vbCBp
c0xpbmtlZCgpOworICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5KTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5KCk7CisKICAg
ICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CiAgICAgdm9pZCBn
ZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWlu
dCAqc2hhZGVycyk7CkBAIC0xMzIsOTAgKzkxLDI0IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29s
IGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHZhbGlkYXRlKCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKTsKICAgICBib29sIGlzVmFs
aWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAK
LSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKLSAgICBzdGF0aWMgc3RkOjpz
dHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBS
ZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnko
Y29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxl
ICoqY29uc3RhbnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2Up
OwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pOwot
ICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1dGVzKCk7Ci0g
ICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotCi0g
ICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAg
IFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBib29sIGFwcGx5VW5p
Zm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBw
bHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9pZCBhcHBseVVuaWZv
cm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZF
Q1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3Rh
bnRUYWJsZSk7Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFy
ICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAu
Li4pOwotICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGlzc3VlU2VyaWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEZy
YWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVydGV4U2hhZGVyICptVmVydGV4
U2hhZGVyOwogCi0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmluZyBt
VmVydGV4SExTTDsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJ
RDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7Ci0gICAgSUQzRFhDb25zdGFudFRh
YmxlICptQ29uc3RhbnRUYWJsZVZTOworICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVC
aW5kaW5nczsKIAotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tN
QVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9W
RVJURVhfQVRUUklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklC
U107Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7Ci0g
ICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUgdGV4
dHVyZVR5cGU7Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwot
ICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7
Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsK
LSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRoUmFu
Z2VMb2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeENv
b3JkTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdM
aW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmlu
YXJ5OwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQg
dGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0gICAgY2hh
ciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAgICAgdW5zaWduZWQgaW50IG1S
ZWZDb3VudDsKIApAQCAtMjI1LDYgKzExOCw4IEBAIGNsYXNzIFByb2dyYW0KIAogICAgIFJlc291
cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKICAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsK
KworICAgIEluZm9Mb2cgbUluZm9Mb2c7CiB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI4ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApAQCAt
MCwwICsxLDI0ODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBs
ZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVj
dHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRl
IDxzdHJpbmc+CisKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworbmFtZXNwYWNlIGdsCit7CitzdGQ6OnN0cmlu
ZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNucHJpbnRmKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSkKKyAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFt
ZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJy
YXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBh
cnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICBtZW1z
ZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKK30KKworVW5pZm9ybTo6flVu
aWZvcm0oKQoreworICAgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK2Jvb2wgVW5pZm9ybTo6aXNBcnJh
eSgpCit7CisgICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDA7Cit9CisK
K1VuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCisgICAgOiBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1lbnQoZWxlbWVu
dCksIGluZGV4KGluZGV4KQoreworfQorCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KCkK
K3sKKyAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
TlVMTDsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVQ
UyA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7CisKKyAgICBtVmFsaWRhdGVk
ID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0g
LTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhd
LmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0g
MDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRp
b24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJp
bmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4
ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRh
YmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jt
cy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KK30KKworSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbFNoYWRlcigpCit7Cisg
ICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QXR0cmlidXRlTG9jYXRp
b24oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmFtZSkKKyAgICB7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09
IHN0ZDo6c3RyaW5nKG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0
ZUluZGV4KQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAKKyAgICByZXR1cm4gbVNlbWFudGljSW5k
ZXhbYXR0cmlidXRlSW5kZXhdOworfQorCisvLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhp
Z2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VXNlZFNh
bXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIHJldHVybiBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgcmV0dXJuIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGly
ZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQg
MC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRTYW1w
bGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQor
eworICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBs
ZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7
CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXpl
b2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworCisgICAgICAgIGlmICht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBs
b2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIHRl
eHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKKy8vIGlu
ZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hh
ZGVyKS4KK1RleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXh0dXJlVHlwZShT
YW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1sw
XSkpOworICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwor
ICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAg
ICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBz
aXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworICAgICAgICBBU1NF
UlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICByZXR1cm4gbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworCisgICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCisgICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKKyAgICAgICAgICAg
IHRhcmdldFsyXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwor
ICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7
CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Cisg
ICAgICAgICAgICB2ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
KyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0
OworICAgICAgICAgICAgdiArPSAzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9m
KEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgordm9pZCB0
cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBp
bnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKKyAgICBpbnQg
Y29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKKworICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCisgICAgeworICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQorICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCisgICAgZm9yIChpbnQgeSA9IHNyY0hl
aWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9B
VF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7
CisgICAgICAgIHRhcmdldCArPSA4OworICAgICAgICB2YWx1ZSArPSA0OworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgz
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQor
eworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0
LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTI7CisgICAgICAg
IHZhbHVlICs9IDk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
NCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTY7CisgICAgICAgIHZhbHVlICs9
IDE2OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCks
CisgICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCisgICAgICAgICAg
ICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisg
ICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywg
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICBj
b3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZs
b2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAor
ICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB7CisgICAgICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAg
eworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMTIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0
LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29t
cG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAo
VW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZs
b2F0UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBt
VW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFs
bCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICBm
b3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4o
KSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7CisgICAgICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRp
cnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBi
KTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlm
b3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAg
YXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBw
bHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEMTBCbG9iICpQ
cm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3Rh
bnRUYWJsZSkKK3sKKyAgICBpZiAoIWhsc2wpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICBEV09SRCByZXN1bHQ7CisgICAgVUlOVCBmbGFncyA9IDA7CisgICAgc3Rk
OjpzdHJpbmcgc291cmNlVGV4dDsKKyAgICBpZiAocGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAg
ICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAgZmxh
Z3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7CisjZWxzZQorICAgICAgICBm
bGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOworI2VuZGlmCisKKyAgICAgICAg
c3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7CisgICAgICAgIHNvdXJjZVRl
eHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5n
KCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOworICAgICAgICB3cml0ZUZpbGUoc291cmNl
UGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUw7CisgICAgICAgIHNvdXJjZVRleHQgPSBobHNsOworICAgIH0KKworICAg
IElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdl
ID0gTlVMTDsKKyAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZ19m
YWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwg
JmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAg
Y29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZl
clBvaW50ZXIoKTsKKworICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNzYWdlKTsK
KyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNz
YWdlKTsKKworICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JN
ZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERX
T1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAg
ICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg
ICAgcmV0dXJuIGJpbmFyeTsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZh
cnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFk
aW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEK
Ky8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBp
ZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlcikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAg
IGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5n
VmVjdG9ycygpOworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpbnQgbiA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOworICAgICAgICBp
bnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0g
NCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWlu
Z1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0g
MDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYm
ICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBi
b29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4
KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+
cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzcGFj
ZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5n
VmVjdG9yczsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+
PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1
bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVz
IiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3Rl
cnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4
VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8
IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAg
ICB7CisgICAgICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiByZWdpc3RlcnM7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKElu
Zm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0
ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVy
dGV4U2hhZGVyKQoreworICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVz
ZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciBmcmFnVmFyID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBm
cmFnVmFyICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKKyAg
ICB7CisgICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOworICAgICAgICBmcmFnVmFyLT5jb2wgPSAt
MTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSB2ZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZ0eFZhcisrKQorICAgIHsKKyAgICAgICAgdnR4VmFyLT5yZWcgPSAtMTsK
KyAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKKyAgICB9CisKKyAgICAvLyBNYXAgdGhlIHZhcnlp
bmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCisgICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhf
VkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07CisgICAgaW50IHJlZ2lzdGVycyA9IHBh
Y2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICBpZiAo
cmVnaXN0ZXJzIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCisgICAgQ29udGV4
dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQt
PnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBpZiAocmVnaXN0
ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBs
ZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7
CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFt
ZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0
cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJU
eXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdt
ZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91
dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlu
cHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0
Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHZh
cnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUu
Y19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRF
WENPT1JEIik7CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQyeDIgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICB2ZXJ0ZXhITFNMICs9
IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDogVEVYQ09PUkQiICsgc3Ry
KHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisKKyAgICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgfQorCisgICAgdmVydGV4SExTTCAr
PSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgInN0
cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOworCisgICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAgIGludCByZWdp
c3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNr
aW5nW3JdWzFdID8gMiA6IDEpKTsKKworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQi
ICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2Vt
YW50aWMgKyBzdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAi
O1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBz
bTMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
IDogUFNJWkU7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19J
TlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgICIgKyBkZWNv
cmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7CisKKyAgICAgICAgaWYgKFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4CisgICAgICAg
IHsKKyAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAgICAgIH0KKwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJp
YnV0ZS0+bmFtZSkgKyAiKTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAt
IGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24ueSArIGR4X0hhbGZQ
aXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICog
MC41O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBn
bF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXpl
ICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9p
bnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BP
SU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAgIH0KKworICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2
YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3Vu
dCh2YXJ5aW5nLT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
cm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHIg
PSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAgICAgICAgICAgIHZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlw
bGUgdmFyeWluZ3MKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBh
Y2tpbmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIi4i
OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4SExT
TCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
ID0gIiArIHZhcnlpbmctPm5hbWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiO1xuIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICBwaXhlbEhMU0wgKz0gInN0cnVj
dCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lz
dGVycykgKyAiO1xuIjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQw
O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
CisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xu
IjsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgorICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDog
Q09MT1I7XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dClcbiIK
KyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9
IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKyAgICAgICAgCisgICAgICAgIGlmIChz
bTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29y
ZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGR4X0Nvb3JkIGNv
bnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRl
ci55LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQorICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcp
ICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhf
Q29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAq
IHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOwor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5n
bF9Qb2ludENvb3JkLnk7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250
RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2Ug
Pj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7CisgICAgfQorCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKKyAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1
dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1
dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKCFmcmFnbWVudFNo
YWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hh
ZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RkOjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsK
KyAgICBzdGQ6OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisK
KyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhlbEhMU0wsIHZlcnRleEhMU0wsIGZy
YWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29u
c3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkg
PyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNv
bnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOworCisg
ICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHZl
cnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAg
IElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHBpeGVs
SExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlm
ICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBIUkVTVUxUIHZl
cnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOworICAgICAgICBI
UkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilw
aXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAg
ICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0
ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NFRURF
RChwaXhlbFJlc3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOworICAg
ICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBOVUxM
OworICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKG1WZXJ0ZXhFeGVj
dXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bGlua0F0dHJpYnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmluZGluZ3MsIGZyYWdtZW50U2hhZGVy
LCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5m
b0xvZywgR0xfRlJBR01FTlRfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVBTKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIG1Db25z
dGFudFRhYmxlVlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNl
YXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KKyAgICAgICAg
ICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9u
YWwgZGVjb3JhdGlvbgorICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7CisgICAgICAgICAgICBtRHhEZXB0aExvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOworICAgICAgICAgICAgbUR4Q29v
cmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKKyAgICAgICAgICAg
IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBp
eGVsU2l6ZSIpOworICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKKyAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOworCisgICAgICAg
ICAgICBjb250ZXh0LT5tYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CisKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBE
ZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQgRGlyZWN0M0Qg
OSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua0F0
dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKQoreworICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsK
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisg
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBh
dHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisK
KyAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2Nh
dGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRp
b25dLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0
aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFu
IGVycm9yCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9j
YXRpb25dID0gKmF0dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRp
b24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0
b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0
IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0
b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1
dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAg
eworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVC
aW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAg
IC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAg
ICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2Nh
dGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFp
bGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRv
byBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhd
ID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7
CisgICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBz
dGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
LnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBp
bmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFk
ZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RB
TlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKworICAgIGNvbnN0YW50VGFi
bGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQz
RFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBj
b25zdGFudEluZGV4KTsKKworICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2Ny
aXB0aW9uOworICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRs
ZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5m
b0xvZywgc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50
IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBS
ZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCiti
b29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVt
IHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2Ny
aXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNEWEhB
TkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVM
TCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgdnND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBE
M0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQg
PSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjpt
YXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBl
eGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodnNDb25z
dGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsg
aTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8g
VEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAg
ICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEs
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBE
M0RYUENfU1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBh
cnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7
IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1i
ZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNE
WEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0
YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RF
U0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlv
bkNvdW50ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRp
b24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJ
bmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFy
cmF5SW5kZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBu
YW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQ
Q19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19N
QVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJu
IGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVu
aWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1l
KTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0g
dW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01F
TlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYg
KHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERl
c2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9i
YWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMu
c2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+
YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhV
bmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAg
IC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExF
UjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMy
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlw
dGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRy
aWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
TUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBt
ZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQor
eworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmlu
YXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0
dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBv
cyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7Cisg
ICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3Zl
IHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgewor
ICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1
YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNE
OV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0
NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/
IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9
IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVu
aWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0
YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJv
b2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAg
ICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0Nv
dW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9P
TF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxT
RTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJ
bmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwg
dmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAg
IAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5i
b29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwor
ICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAs
IDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdl
dFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlm
IChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRl
eCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4
ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0g
dGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAg
ICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisg
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhW
RUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZF
Q1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAg
ICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBj
b3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5h
cnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZs
b2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAg
YXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0
b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZs
b2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4
ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0
VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcworICAg
IHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGludCBhdHRy
aWJ1dGU7CisgICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVB
dHRyaWJ1dGUrKzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAg
ICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5j
X3N0cigpOworCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAg
ICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5j
ZQorCisgICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKwor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGlu
dCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJp
YnV0ZU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1h
eExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
Lm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5p
Zm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVy
IGludGVybmFsIHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwor
ICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0g
PCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZVVu
aWZvcm0gPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKKworICAg
ICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFt
ZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9
ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxl
bmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVu
aWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+dHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNv
dW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAg
eworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAz
LCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisK
KyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZv
cm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZv
cm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5j
b21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVu
Z3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsK
KyAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4g
IlswXSIuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChs
ZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVu
Z3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cp
Cit7CisgICAgYXBwbHlVbmlmb3JtcygpOworICAgIGlmICghdmFsaWRhdGVTYW1wbGVycygmaW5m
b0xvZykpCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpCit7CisgICAg
Ly8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJl
bnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQorICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5p
dCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0g
d2lsbCBmYWlsLCBhbmQKKyAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBp
c3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKKyAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5p
dFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNf
VlRGOyArK2kpCisgICAgeworICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VO
S05PV047CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBp
eGVsU2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0u
YWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1w
bGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVk
cyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVy
ZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRU
eXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
Zm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1
cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQo
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNv
bmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQp
LiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5
OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRo
UmFuZ2VMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUR4Q29vcmRMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOWM1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApAQCAt
MCwwICsxLDIxMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZpbmVz
IHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8v
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIu
MTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+Cisj
aW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7Citj
bGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2lu
Z2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xlbnVt
IHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7
CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7CisKKyAgICBjb25zdCBH
TGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQg
bmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUK
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAgdW5zaWduZWQgY2hhciAq
ZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lzdGVySW5mbworICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQ0SW5k
ZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOworICAgICAgICAgICAgYm9v
bEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlv
bi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNf
Qk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0OiAgZmxvYXQ0SW5kZXgg
PSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlv
bi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQpY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZmxv
YXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAgICAgIGludCBib29sSW5k
ZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsKKworICAgIFJlZ2lzdGVy
SW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBmb3Ig
Y29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxl
cworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsK
KyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2Yg
bGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0
byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQoreworICBwdWJsaWM6CisgICAg
UHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisKKyAgICBJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24o
Y29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0
ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUs
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVUeXBlIGdldFNhbXBsZXJU
ZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsK
KyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOworCisgICAg
R0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdl
dFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OworICAgIEdM
aW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4Q29vcmRMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQg
Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlBbGxV
bmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisgICAgYm9vbCBsaW5rKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2ZUF0dHJp
YnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2
ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIHZhbGlkYXRlKEluZm9Mb2cg
JmluZm9Mb2cpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKTsK
KyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcg
ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5k
IGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0o
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3Jl
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFy
eSk7CisKKyAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxl
ICoqY29uc3RhbnRUYWJsZSk7CisKKyAgICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0
cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29s
IGxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdz
ICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFi
bGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAiIik7CisgICAg
Ym9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgVW5p
Zm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3Jt
bmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wg
YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5p
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9S
NCAqdmVjdG9yKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5
ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhF
eGVjdXRhYmxlOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBkdXJpbmcgbGlua2luZy4K
KyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7CisgICAgSUQzRFhDb25z
dGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRy
aWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAgeworICAgICAgICBib29s
IGFjdGl2ZTsKKyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBUZXh0
dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICB9OworCisgICAgU2FtcGxlciBtU2FtcGxlcnNQU1tN
QVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKyAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2U7CisgICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7CisgICAgVW5pZm9ybUFycmF5
IG1Vbmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5p
Zm9ybUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworCisgICAgR0xpbnQg
bUR4RGVwdGhSYW5nZUxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247CisgICAg
R0xpbnQgbUR4Q29vcmRMb2NhdGlvbjsKKyAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRp
b247CisgICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhQb2ludHNP
ckxpbmVzTG9jYXRpb247CisKKyAgICBib29sIG1WYWxpZGF0ZWQ7Cit9OworfQorCisjZW5kaWYg
ICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAppbmRleCA2MDA0MjU1
Li40YjkxMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCkBAIC02Myw2OCArNjMsMTQ0IEBAIEdMdWludCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKICAgICByZXR1cm4gZHgy
ZXM6OkdldFN0ZW5jaWxTaXplKGdldEQzREZvcm1hdCgpKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4
dHVyZTo6UmVuZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0
KSA6IG1UYXJnZXQodGFyZ2V0KQorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTJEIEltcGxlbWVu
dGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4
dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdl
dCkKK3sKKyAgICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCkKK3sKKyAgICBtVGV4dHVyZTJELnNldChO
VUxMKTsKK30KKworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJl
bmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMg
cHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRS
ZW5kZXJUYXJnZXQobVRhcmdldCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkK
K3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJnZXQpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUuc2V0KHRleHR1
cmUpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQoMCk7CiB9CiAKLVJlbmRlcmJ1
ZmZlclRleHR1cmU6On5SZW5kZXJidWZmZXJUZXh0dXJlKCkKK0dMZW51bSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQo
TlVMTCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KDApOworfQor
CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREM0RGb3JtYXQoMCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
MDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1U
YXJnZXQpOworfQorCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRh
dGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDog
bVRhcmdldCh0YXJnZXQpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKK30K
KworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCgpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKIH0KIAogLy8gVGV4dHVyZXMg
bmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2Vz
IHZpYQogLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5
IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjph
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsK
LSAgICBtVGV4dHVyZS0+YWRkUHJveHlSZWYocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1hcC0+
YWRkUHJveHlSZWYocHJveHkpOwogfQogCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OnJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0g
ICAgbVRleHR1cmUtPnJlbGVhc2VQcm94eShwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5y
ZWxlYXNlUHJveHkocHJveHkpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
VGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKIH0K
IAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldERlcHRoU3RlbmNp
bCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVM
TDsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRXaWR0aCgpIGNvbnN0CitH
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAot
R0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAorCitHTHNpemVp
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIHJl
dHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldEhlaWdodChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAotR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKKworR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRE
M0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpn
ZXREM0RGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0RDNERm9ybWF0
KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RDNERm9ybWF0KEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9CiAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0U2FtcGxlcygpIGNvbnN0CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFNlcmlhbCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwogfQogCisvLy8v
Ly8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCiBSZW5kZXJidWZmZXI6OlJl
bmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDog
UmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAgQVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwpAQCAt
MTUyLDExICsyMjgsMTUgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnJlbGVhc2UoKSBjb25zdAogICAg
IFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsK
ICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0
aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwpA
QCAtMjQzLDExICszMjMsMTUgQEAgUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0
b3JhZ2UoKQogewogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVy
biBOVUxMOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBO
VUxMOwpAQCAtMzU2LDYgKzQ0MCw4IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogICAg
IH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqQ29s
b3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBA
IC00MjgsOCArNTE0LDE1IEBAIERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZl
cigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CisgICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAg
ICB9CisKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKaW5kZXggNjBlYzA1
OC4uZTZkNWRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCkBAIC0yMSw3ICsyMSw4IEBACiAKIG5hbWVzcGFjZSBnbAog
ewotY2xhc3MgVGV4dHVyZTsKK2NsYXNzIFRleHR1cmUyRDsKK2NsYXNzIFRleHR1cmVDdWJlTWFw
OwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aFN0
ZW5jaWxidWZmZXI7CkBAIC01OCwxMiArNTksMTIgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJm
YWNlCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlckludGVyZmFjZSk7
CiB9OwogCi1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZQorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJl
ICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKIAotICAgIHZpcnR1YWwgflJlbmRlcmJ1
ZmZlclRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKTsKIAog
ICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CiAgICAgdm9p
ZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CkBAIC04MCw5ICs4MSwz
NyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVy
ZmFjZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUp
OworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkQpOwog
Ci0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmU+IG1UZXh0dXJlOworICAgIEJpbmRpbmdQb2lu
dGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9OworCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRl
cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgp
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKICAgICBHTGVudW0gbVRhcmdldDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAppbmRleCBhYzU4YWJlLi41N2ZkM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCkBAIC0xMDIsMTQgKzEwMiwxNCBAQCB2b2lk
IFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKG1JbmZvTG9nKQor
ICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVm
U2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgIG1lbWNweShpbmZvTG9n
LCBtSW5mb0xvZywgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKG1JbmZvTG9nKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihtSW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRl
eCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAgICAgICAgaW5mb0xv
Z1tpbmRleF0gPSAnXDAnOwogICAgIH0KIApAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgdm9pZCBTaGFk
ZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhcgogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAoc291cmNlKQor
ICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVm
U2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBz
b3VyY2UsIGluZGV4KTsKLSAgICB9CisgICAgICAgIGlmIChzb3VyY2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJj
ZSkpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7CisgICAgICAg
IH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdc
MCc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaAppbmRleCA5YzdjMGRmLi40MzA4M2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdHlwZWRlZiBz
dGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7CiAKIGNsYXNzIFNoYWRlcgogewotICAgIGZy
aWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1Ymxp
YzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsK
QEAgLTEyOCw3ICsxMjgsNyBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmli
dXRlQXJyYXk7CiAKIGNsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBm
cmllbmQgUHJvZ3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBwdWJs
aWM6CiAgICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhh
bmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmNwcAppbmRleCAyOTE3N2QyLi41Y2NmOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTEsMzA5MCArMSwyOTA5IEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6
OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKLS8vIFRleHR1cmUyRCBhbmQg
VGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVk
Ci0vLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2
My4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDxkM2R4OXRl
eC5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGludHJpbi5oPgotCi0jaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0JsaXQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLQotbmFtZXNwYWNl
IGdsCi17Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlh
bCA9IDE7Ci0KLXN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQzOwotICAgIH0KLSAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMy
RjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgaWYgKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250
ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
Zm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQotc3RhdGljIGJvb2wgSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICBjYXNlIEQzREZNVF9B
OEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUltYWdlOjpJbWFnZSgpCi17
Ci0gICAgbVdpZHRoID0gMDsgCi0gICAgbUhlaWdodCA9IDA7Ci0gICAgbUZvcm1hdCA9IEdMX05P
TkU7Ci0gICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotCi0gICAgbVN1cmZhY2UgPSBOVUxM
OwotCi0gICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVN
TUVNOwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLX0KLQotSW1hZ2U6On5JbWFn
ZSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVh
c2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVh
c2UpCi17Ci0gICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhl
aWdodCB8fAotICAgICAgICBtRm9ybWF0ICE9IGZvcm1hdCB8fAotICAgICAgICBtVHlwZSAhPSB0
eXBlIHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1XaWR0aCA9IHdp
ZHRoOwotICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0
OwotICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3Jt
YXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9IENvbnZlcnRUZXh0dXJl
Rm9ybWF0VHlwZShtRm9ybWF0LCBtVHlwZSk7Ci0KLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1
cmZhY2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKLXsK
LSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNE
UE9PTF9TWVNURU1NRU07Ci0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVx
dWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVp
Z2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9
IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaXNN
dWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwotICAgICAg
ICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
cXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8PSAxOwot
ICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAocmVx
dWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBs
ZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2Uo
KS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRj
aCArIDEsIE5VTEwsIGdldEQzREZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVk
LiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwg
Jm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgIG1EM0RQ
b29sID0gcG9vbFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOjpsb2NrKEQzRExPQ0tFRF9SRUNU
ICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotCi0gICAgaWYgKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tl
ZFJlY3QsIHJlY3QsIDApOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBJbWFnZTo6dW5sb2NrKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOjppc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gSXNUZXh0dXJlRm9ybWF0UmVuZGVy
YWJsZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFnZTo6Z2V0RDNERm9ybWF0
KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2Ug
aGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcg
YnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsK
LQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqSW1hZ2U6
OmdldFN1cmZhY2UoKQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIHJldHVybiBtU3Vy
ZmFjZTsKLX0KLQotdm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgRDNEWExv
YWRTdXJmYWNlRnJvbVN1cmZhY2Uoc3VyZmFjZSwgTlVMTCwgTlVMTCwgbVN1cmZhY2UsIE5VTEws
IE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVz
YygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotCi0g
ICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1EM0RQb29sID0gZGVzYy5Qb29sOwotfQotCi12
b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNl
KCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLQotICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9N
QU5BR0VEKQotICAgICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhMb2Fk
U3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVjdCwgc291cmNlU3VyZmFj
ZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBk
ZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyAKLSAgICAgICAgICAgIFBPSU5UIHBvaW50ID0ge3Jl
Y3QubGVmdCwgcmVjdC50b3B9OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZp
Y2UoKS0+VXBkYXRlU3VyZmFjZShzb3VyY2VTdXJmYWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZw
b2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi0vLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkg
eG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0
L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0
cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCi12b2lkIElt
YWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSAtQ29tcHV0
ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwotICAgIGlucHV0
ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwotCi0gICAgc3dp
dGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
c3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAg
ICAgICAgICAgIGxvYWRBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAg
ICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9y
bWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAg
IGlmIChzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBsb2FkQkdSQURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBm
bG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3Jl
IHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
ICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWlu
YW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxv
YXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxM
OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RC
eXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0K
LSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5
KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBO
VUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVN
TU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlv
biBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhl
bCA9IG5hdGl2ZT8gMjogNDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNv
dXJjZSwgd2lkdGggKiAyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
c291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngr
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJj
ZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhG
RjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2Jh
ICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAm
IDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxv
YXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhv
ZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogOCk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDog
MTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIF9f
bTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZmMDBmZik7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKLSAgICAg
ICAgaW50IHggPSAwOwotCi0gICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCi0g
ICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0p
ICYgMTUpICE9IDApICYmIHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbeF0gPSAoX3Jv
dGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyAzIDwgd2lkdGg7IHggKz0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1X3NpMTI4KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8vIE1h
c2sgb3V0IGcgYW5kIGEsIHdoaWNoIGRvbid0IGNoYW5nZQotICAgICAgICAgICAgX19tMTI4aSBn
YUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJyTWFzaywgc291cmNlRGF0YSk7Ci0gICAg
ICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyQ29tcG9u
ZW50cyA9IF9tbV9hbmRfc2kxMjgoc291cmNlRGF0YSwgYnJNYXNrKTsKLSAgICAgICAgICAgIC8v
IFN3YXAgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBiclN3YXBwZWQgPSBfbW1fc2h1ZmZs
ZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25lbnRzLCBfTU1fU0hVRkZMRSgy
LCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsKLSAgICAgICAgICAgIF9fbTEy
OGkgcmVzdWx0ID0gX21tX29yX3NpMTI4KGdhQ29tcG9uZW50cywgYnJTd2FwcGVkKTsKLSAgICAg
ICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4
XSksIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQZXJmb3JtIGxlZnRvdmVyIHdy
aXRlcwotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9
IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBj
b25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA0KTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChy
Z2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYg
MHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4
MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4g
MTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0
KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNl
dCAqIDE2KTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4Owot
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsK
LSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCo0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdCB7Ci0gICAg
c3dpdGNoIChnZXREM0RGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgICAgbG9hZERYVDFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgICBsb2FkRFhUM0RhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEQzREZNVF9EWFQ1
OgotICAgICAgICAgIGxvYWREWFQ1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1bGwoY29uc3Qg
dW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDEg
YmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC0xXSBjb2xvcjAuCi0gIC8vIFsyLTNdIGNvbG9yMS4K
LSAgLy8gWzQtN10gY29sb3IgYml0bWFwLCAyIGJpdHMgcGVyIHBpeGVsLgotICAvLyBTbyBlYWNo
IG9mIHRoZSA0LTcgYnl0ZXMgcmVwcmVzZW50cyBvbmUgbGluZSwgZmxpcHBpbmcgYSBibG9jayBp
cyBqdXN0Ci0gIC8vIGZsaXBwaW5nIHRob3NlIGJ5dGVzLgotCi0gIC8vIEZpcnN0IDMyLWJpdHMg
aXMgdHdvIFJHQjU2NSBjb2xvcnMgc2hhcmVkIGJ5IHRpbGUgYW5kIGRvZXMgbm90IG5lZWQgdG8g
YmUgbW9kaWZpZWQuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0KLSAgLy8gU2Vjb25kIDMyLWJp
dHMgY29udGFpbnMgNCByb3dzIG9mIDQgMi1iaXQgaW50ZXJwb2xhbnRzIGJldHdlZW4gdGhlIGNv
bG9ycy4gQWxsIHJvd3Mgc2hvdWxkIGJlIGZsaXBwZWQuCi0gIGRlc3RbMV0gPSAoc291cmNlWzFd
ID4+IDI0KSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA8PCA4KSAmIDB4MDBGRjAwMDApIHwK
LSAgICAgICAgICAgICgoc291cmNlWzFdID4+IDgpICYgMHgwMDAwRkYwMCkgfAotICAgICAgICAg
ICAgKHNvdXJjZVsxXSA8PCAyNCk7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9m
IGEgRFhUMSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURY
VDFCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVz
dCkgewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0gc291cmNlWzBdOwotICBk
ZXN0WzFdID0gKChzb3VyY2VbMV0gPDwgOCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAgICAo
KHNvdXJjZVsxXSA+PiA4KSAmIDB4MDAwMDAwRkYpOwotfQotCi0vLyBGbGlwcyBhIGZ1bGwgRFhU
MyBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDNCbG9j
a0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewot
ICAvLyBBIERYVDMgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC03XSAgYWxwaGEgYml0bWFwLCA0
IGJpdHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIEZpcnN0
IGFuZCBTZWNvbmQgMzIgYml0cyBhcmUgNGJpdCBwZXIgcGl4ZWwgYWxwaGEgYW5kIG5lZWQgdG8g
YmUgZmxpcHBlZC4KLSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8
PCAxNik7Ci0gIGRlc3RbMV0gPSAoc291cmNlWzBdID4+IDE2KSB8IChzb3VyY2VbMF0gPDwgMTYp
OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92ZSBmdW5jdGlv
bi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQot
Ly8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQzIGJsb2NrIGluIHRoZSB5IGRpcmVj
dGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUu
Ci0gIGRlc3RbMF0gPSAoc291cmNlWzFdID4+IDE2KSB8IChzb3VyY2VbMV0gPDwgMTYpOwotICBG
bGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlw
cyBhIGZ1bGwgRFhUNSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlw
Q29weURYVDVCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewotICAvLyBBIERYVDUgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMF0gICAgYWxw
aGEwLgotICAvLyBbMV0gICAgYWxwaGExLgotICAvLyBbMi03XSAgYWxwaGEgYml0bWFwLCAzIGJp
dHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIFRoZSBhbHBo
YSBiaXRtYXAgZG9lc24ndCBlYXNpbHkgbWFwIGxpbmVzIHRvIGJ5dGVzLCBzbyB3ZSBoYXZlIHRv
Ci0gIC8vIGludGVycHJldCBpdCBjb3JyZWN0bHkuICBFeHRyYWN0ZWQgZnJvbQotICAvLyBodHRw
Oi8vd3d3Lm9wZW5nbC5vcmcvcmVnaXN0cnkvc3BlY3MvRVhUL3RleHR1cmVfY29tcHJlc3Npb25f
czN0Yy50eHQgOgotICAvLwotICAvLyAgIFRoZSA2ICJiaXRzIiBieXRlcyBvZiB0aGUgYmxvY2sg
YXJlIGRlY29kZWQgaW50byBvbmUgNDgtYml0IGludGVnZXI6Ci0gIC8vCi0gIC8vICAgICBiaXRz
ID0gYml0c18wICsgMjU2ICogKGJpdHNfMSArIDI1NiAqIChiaXRzXzIgKyAyNTYgKiAoYml0c18z
ICsKLSAgLy8gICAgICAgICAgICAgICAgICAgMjU2ICogKGJpdHNfNCArIDI1NiAqIGJpdHNfNSkp
KSkKLSAgLy8KLSAgLy8gICBiaXRzIGlzIGEgNDgtYml0IHVuc2lnbmVkIGludGVnZXIsIGZyb20g
d2hpY2ggYSB0aHJlZS1iaXQgY29udHJvbCBjb2RlCi0gIC8vICAgaXMgZXh0cmFjdGVkIGZvciBh
IHRleGVsIGF0IGxvY2F0aW9uICh4LHkpIGluIHRoZSBibG9jayB1c2luZzoKLSAgLy8KLSAgLy8g
ICAgICAgY29kZSh4LHkpID0gYml0c1szKig0KnkreCkrMS4uMyooNCp5K3gpKzBdCi0gIC8vCi0g
IC8vICAgd2hlcmUgYml0IDQ3IGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGFuZCBiaXQgMCBpcyB0
aGUgbGVhc3QKLSAgLy8gICBzaWduaWZpY2FudCBiaXQuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPihzb3VyY2UpKTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0g
IHVuc2lnbmVkIGludCBsaW5lXzBfMSA9IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5
dGVzWzNdICsgMjU2ICogc291cmNlQnl0ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8yXzMg
PSBzb3VyY2VCeXRlc1s1XSArIDI1NiAqIChzb3VyY2VCeXRlc1s2XSArIDI1NiAqIHNvdXJjZUJ5
dGVzWzddKTsKLSAgLy8gc3dhcCBsaW5lcyAwIGFuZCAxIGluIGxpbmVfMF8xLgotICB1bnNpZ25l
ZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAwMCkgPj4gMTIpOwotICAvLyBz
d2FwIGxpbmVzIDIgYW5kIDMgaW4gbGluZV8yXzMuCi0gIHVuc2lnbmVkIGludCBsaW5lXzNfMiA9
ICgobGluZV8yXzMgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChsaW5lXzJfMyAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RCeXRlc1swXSA9IHNvdXJj
ZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sxXTsKLSAgZGVzdEJ5dGVz
WzJdID0gbGluZV8zXzIgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAobGluZV8zXzIgJiAweGZm
MDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzNfMiAmIDB4ZmYwMDAwKSA+PiAxNjsK
LSAgZGVzdEJ5dGVzWzVdID0gbGluZV8xXzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbNl0gPSAobGlu
ZV8xXzAgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s3XSA9IChsaW5lXzFfMCAmIDB4ZmYw
MDAwKSA+PiAxNjsKLQotICAvLyBBbmQgZmxpcCB0aGUgRFhUMSBibG9jayB1c2luZyB0aGUgYWJv
dmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyAyLCBkZXN0ICsg
Mik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEgRFhUNSBibG9jayBpbiB0
aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDVCbG9ja0hhbGYoY29uc3Qg
dW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUgbGF5
b3V0IGFib3ZlLgotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNl
KSk7Ci0gIHVuc2lnbmVkIGNoYXIqIGRlc3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihzdGF0aWNfY2FzdDx2b2lkKj4oZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEg
PSBzb3VyY2VCeXRlc1syXSArIDI1NiAqIChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5
dGVzWzRdKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5lXzBfMSAmIDB4MDAwZmZm
KSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVfMF8xICYgMHhmZmYw
MDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNlQnl0ZXNbMF07Ci0gIGRlc3RCeXRl
c1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNbMl0gPSBsaW5lXzFfMCAmIDB4ZmY7
Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVz
WzRdID0gKGxpbmVfMV8wICYgMHhmZjAwMDApID4+IDE2OwotICBGbGlwQ29weURYVDFCbG9ja0hh
bGYoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUMURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwot
ICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwot
ICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2gg
JSA4ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBS
b3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NB
Y3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jv
c3MgKiAyOwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAx
XSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3Nz
OyB4ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQxQmxv
Y2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQg
PT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDAp
OwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0ID09
IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRjaCAl
IDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNl
IGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAv
IDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dpdGNo
IChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAgICAgICAgICAg
ICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBG
bGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwotCi0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQzQmxvY2tGdWxsKHNvdXJjZSArIHgs
IGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zm
c2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJU
KHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJU
KGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAw
KTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0gICAgLy8gUm91bmQgd2lk
dGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQgYmxvY2tzQWNyb3NzID0g
KHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxvY2tzQWNyb3NzICogNDsK
LQotICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3Vy
Y2VbeCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gc291cmNlW3ggKyAyXTsK
LSAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsgM107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tG
dWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBn
bENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUg
Zm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkKLXsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2Ny
aXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAgIAot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uo
ZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0
LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1h
dGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4
cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBS
RUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwg
ZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhl
bFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBSRUNUIGRlc3RSZWN0ID0g
e3hvZmZzZXQsIGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRlc3RZT2Zmc2V0ICsgaGVp
Z2h0fTsKLQotICAgIGlmIChpc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIHJl
c3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRl
c3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBOVUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJf
Qk9YLCAwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJDb3B5aW5nIHN1cmZhY2VzIHVuZXhwZWN0ZWRseSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKLSAg
ICAgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZz
b3VyY2VSZWN0LCAwKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJjZSBzdXJmYWNlIChyZWN0
YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAg
ICAgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFp
bGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBp
bnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsK
LSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
ZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopc291cmNlTG9jay5wQml0
czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVz
dExvY2sucEJpdHM7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uRm9ybWF0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdl
dEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
cihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9
IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAg
ICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSBzb3VyY2VbeCAqIDQgKyAzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
ICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRl
c3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICBzd2l0
Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3Vy
Y2VbeCAqIDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
XSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
ZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAo
cmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9
IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlVubG9ja1JlY3QoKTsKLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0KLSAgICBtRGlydHkgPSB0cnVlOwotfQotCi1UZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCks
Ci0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKG1SZW5kZXJUYXJn
ZXQpKSwKLSAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQotewotfQot
Ci1UZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBUZXh0dXJl
U3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBjb25zdAotewotICAg
IHJldHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0KLQotRDNEUE9PTCBUZXh0
dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RQb29sOwotfQot
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAot
ewotICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFRleHR1
cmVTZXJpYWwrKzsKLX0KLQotVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQgaWQpIDogUmVmQ291bnRP
YmplY3QoaWQpCi17Ci0gICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsK
LSAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOwotICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsKLSAg
ICBtV3JhcFQgPSBHTF9SRVBFQVQ7Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAg
bVVzYWdlID0gR0xfTk9ORTsKLSAgICAKLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotCi0gICAg
bUltbXV0YWJsZSA9IGZhbHNlOwotfQotCi1UZXh0dXJlOjp+VGV4dHVyZSgpCi17Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikK
LXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0g
ICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1pbkZpbHRlciAhPSBmaWx0ZXIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAg
ICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0
ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewot
ICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIG1EaXJ0
eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRl
ICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVtIHdy
YXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFUOgot
ICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBF
QVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOwotICAgICAgICAgICAgICAgIG1E
aXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVt
IHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFU
OgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9S
RVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOwotICAgICAgICAgICAgICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFVzYWdlKEdM
ZW51bSB1c2FnZSkKLXsKLSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
Tk9ORToKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToKLSAgICAg
ICAgbVVzYWdlID0gdXNhZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldE1p
bkZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5GaWx0ZXI7Ci19Ci0KLUdMZW51bSBU
ZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWFnRmlsdGVyOwot
fQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAotewotICAgIHJldHVybiBtV3Jh
cFM7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1XcmFwVDsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFVzYWdlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVVzYWdlOwotfQotCi12b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBp
eGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2Ut
PmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGlt
YWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlOjpz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywg
SW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+
bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQ
aXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAg
IGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGlt
YWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMp
ICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBp
bWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgp
KQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoSXNDb21wcmVzc2VkKGltYWdlLT5nZXRGb3JtYXQo
KSkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGltYWdlLT5nZXRGb3Jt
YXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB0
cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkp
LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSkKLXsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVp
Z2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247
Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRlUmVn
aW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9t
ID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7
Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gg
PSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAgaW50
IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQp
OwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zv
cm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0
aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykg
KyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQotewotICAgIGlmICghaXNTYW1wbGVy
Q29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZShmYWxzZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpOwot
fQotCi1ib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1EaXJ0eVBhcmFtZXRlcnM7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aGFzRGlydHlJbWFnZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtRGlydHlJbWFnZXM7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6
cmVzZXREaXJ0eSgpCi17Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IGZhbHNlOwotICAgIG1EaXJ0
eUltYWdlcyA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0VGV4dHVyZVNl
cmlhbCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNl
KTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7
Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVt
IHRhcmdldCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1
ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwo
dGFyZ2V0KSA6IDA7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW1tdXRhYmxlOwotfQotCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVs
cyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKLXsKLSAgICBpZiAoKGlzUG93
Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51
bWJlciBvZiBsZXZlbHMKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gT3BlbkdM
IEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3QgZG9lcyBub3QgcGVybWl0IE5QT1Qg
bWlwbWFwcy4KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1HTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUpOwotfQotCi1pbnQgVGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRM
ZXZlbENvdW50KCkgOiAwOwotfQotCi1CbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKLXsKLSAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LT5n
ZXRCbGl0dGVyKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21N
YW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgICAgIGlmIChmcm9tTWFuYWdlZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdCwgTlVMTCwgTlVM
TCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gZ2V0RGlzcGxheSgpOwotICAgICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
ZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwg
ZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJl
OSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UodHJ1ZSksIG1SZW5kZXJUYXJnZXRT
ZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKLXsKLSAgICBtVGV4dHVy
ZSA9IHN1cmZhY2VUZXh0dXJlOwotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFn
ZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Ym9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBt
UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
d2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVS
VEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjp+
VGV4dHVyZVN0b3JhZ2UyRCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQotewotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwg
JnN1cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7
Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlh
bDsKLX0KLQotVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpCi17
Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29s
b3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7Ci19Ci0KLVRleHR1cmUy
RDo6flRleHR1cmUyRCgpCi17Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAKLSAgICBp
ZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKE5V
TEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBXZSBuZWVkIHRv
IG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBh
cyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBub3QgYXR0ZW1w
dCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkgd2hpY2ggaGFz
IGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6
OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGlmIChtUHJv
eHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Qcm94eVJlZnMg
PT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1HTGVudW0gVGV4
dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFXzJEOwot
fQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50
ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKLX0KLQotRDNERk9STUFUIFRleHR1cmUyRDo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0RDNE
Rm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUpCi17Ci0gICAgcmVsZWFzZVRleEltYWdlKCk7Ci0KLSAgICBib29sIHJlZGVmaW5lZCA9IG1J
bWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGZh
bHNlKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRlZmluZWQpCi0gICAgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICAgICAgbVRleFN0
b3JhZ2UgPSBOVUxMOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4
dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIHJlbGVh
c2VUZXhJbWFnZSgpOwotCi0gICAgR0xlbnVtIGZvcm1hdDsKLQotICAgIHN3aXRjaChzdXJmYWNl
LT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAg
ICAgZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lk
dGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotCi0g
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsKLQotICAgIG1EaXJ0eUltYWdl
cyA9IHRydWU7Ci0gICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1TdXJmYWNlLT5zZXRCb3Vu
ZFRleHR1cmUodGhpcyk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlVGV4SW1hZ2UoKQot
ewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRl
eHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnJlZGVmaW5lKEdMX1JHQkEsIDAs
IDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3Nl
ZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQotdm9p
ZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVCht
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotCi0gICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RM
ZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgIGlm
IChkZXN0TGV2ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1h
Z2VBcnJheVtsZXZlbF07Ci0gICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgICAgICBkZXN0
TGV2ZWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRl
eHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7
Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotCi0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
TF9VTlNJR05FRF9CWVRFKTsKLSAgIAotICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVu
ZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHko
MCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4
U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgaWYgKHdp
ZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1w
KHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgo
KSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90
dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQotICAgICAg
ICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoMCwgaGVpZ2h0
LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBm
b3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxl
YXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpCi17Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKCFtSW1hZ2VB
cnJheVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNT
YW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29w
eSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2
ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVj
dCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENv
bG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9
IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRX
aWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50
b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldEhlaWdodCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFu
c2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0
SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVy
VGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwg
ZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBH
TGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIEdM
ZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLSAgICBEM0RGT1JN
QVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAg
Y29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZTJEKGxldmVscywgZDNkZm10LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgIG1J
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
fQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250
ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50
ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCi0gICAgewotICAgICAgICBpZiAobU1hZ0ZpbHRl
ciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRl
ciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBucG90U3VwcG9ydCA9
IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCk7Ci0KLSAgICBpZiAoIW5w
b3RTdXBwb3J0KQotICAgIHsKLSAgICAgICAgaWYgKChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8Ci0gICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBH
TF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtaXBtYXBwaW5n
KQotICAgIHsKLSAgICAgICAgaWYgKCFucG90U3VwcG9ydCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmUyRDo6aXNN
aXBtYXBDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdl
QXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBd
LmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IHEgPSBsb2cyKHN0ZDo6
bWF4KHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0g
cTsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9y
bWF0KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWln
aHQgPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlMkQ6Omlz
Q29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5h
bEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJh
c2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3Qz
RCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMKLXZvaWQgVGV4dHVy
ZTJEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQp
OwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsK
LSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
Zm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwot
Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0g
ICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsK
LSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZv
aWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykKLSAgICB7Ci0gICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0K
LSAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1h
Z2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFn
ZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRX
aWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkKLSAgICB7Ci0g
ICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgICAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgICAgICBH
TGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotCi0gICAgICAg
IG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBtVGV4U3RvcmFnZS0+Z2V0
U3VyZmFjZUxldmVsKGkpOwotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5h
Z2VkKCkpKQotICAgICAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICAgICBkZWxldGUg
bmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
IGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhT
dG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6
OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdo
IHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVs
cy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0
V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgewotICAgICAgICByZWRlZmluZUltYWdlKGks
IG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpID4+IGksIDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSk7Ci0g
ICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkgLSAxKTsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2Uo
KTsKLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFuKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0u
Z2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdl
dFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwg
TlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRV
UkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobUNvbG9yYnVmZmVyUHJv
eHkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Ci19Ci0KLUlEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIEFT
U0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVy
bHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1
cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsK
LX0KLQotVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVy
ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOwotfQotCi1U
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0
dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQotewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGlz
UmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBv
b2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1h
cCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCi17Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJl
KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1
cmZhY2UoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNl
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1
YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19
Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWwgKyBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Ci19Ci0KLVRleHR1
cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0g
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5
UmVmc1tpXSA9IDA7Ci0gICAgfQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFw
KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1G
YWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwot
ICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNv
dW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVz
IGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hp
bGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNv
dW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28g
dGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRp
b24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAg
ICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlS
ZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7
IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAg
ICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlS
ZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBj
b25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCi1HTHNpemVpIFRl
eHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biAwOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwp
IGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldEhlaWdodCgpOwot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVsw
XS5nZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RG
T1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotfQotCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQot
Ci12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMiwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhl
bHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0
SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17
Ci0gICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwg
bGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBU
ZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKLQotICAgIGlmIChsZXZl
bCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAgICAgICBBU1NFUlQoZGVzdExldmVsICE9
IE5VTEwpOwotCi0gICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAg
ICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAg
ICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1h
Z2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4
dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0
KV1bbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCks
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLS8v
IFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBs
ZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpOwotCi0gICAgYm9vbCBtaXBtYXBwaW5nOwotCi0gICAgc3dpdGNoIChtTWluRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFS
OgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQ
X05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0
KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmIChnZXRXcmFwUygpICE9IEdMX0NMQU1Q
X1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghbWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlmICghaXNDdWJlQ29tcGxl
dGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghaXNNaXBtYXBDdWJlQ29tcGxldGUo
KSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmVDdWJlTWFwOjpp
c0N1YmVDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdp
ZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXRXaWR0aCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFdpZHRoKCkgIT0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fAotICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0Rm9ybWF0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFR5
cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKTsKLQotICAgIGludCBxID0gbG9nMihzaXplKTsKLQotICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAx
OyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZv
cm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5n
ZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEs
IHNpemUgPj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBjb25zdAotewotICAg
IHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7Ci19Ci0KLUlEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6
IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2Ug
ZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIDApOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVy
ZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgcmVu
ZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewot
ICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdl
ZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVU
ZXh0dXJlKCkKLXsKLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAg
ICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0KLSAgICAgICAg
ICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+
Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICBpZiAobUltYWdlQXJy
YXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQotICAgIHsKLSAgICAgICAgR0xzaXplaSBzaXplID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3Jl
YXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VB
cnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgdHJ1ZSk7Ci0KLSAg
ICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8
IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLSAgICAgICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVz
dC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
d1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdl
KGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBU
ZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNl
SW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDEpOwotICAg
IE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7
Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9
PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOwotCi0gICAg
aWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAg
ICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRl
eCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdl
LT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdpZHRoID09IGhl
aWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5s
ZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5n
ZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNl
UmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwot
Ci0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgw
LCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmdldFdpZHRoKCkpOwotCi0g
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJl
TWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdl
dCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAg
ICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRXaWR0aCgpOwotCi0gICAgaWYgKHhv
ZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZh
Y2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVs
XS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21w
bGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNv
cHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFt
VGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxD
b3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zv
cm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3Vy
Y2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFt
cChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0
V2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBp
ZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNv
cHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQo
KSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKLXsKLSAgICBH
TGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIEdM
ZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLSAgICBEM0RGT1JN
QVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAg
Y29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7Ci0gICAgbUltbXV0
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
XSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywg
dGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKLX0KLQot
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCkKLXsKLSAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsK
LQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBp
ZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCAwKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2Ug
KlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCisvLw0KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0K
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorLy8NCisNCisvLyBUZXh0dXJlLmNwcDog
SW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMN
CisvLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUg
b2JqZWN0cyBhbmQgcmVsYXRlZA0KKy8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
Ig0KKw0KKyNpbmNsdWRlIDxkM2R4OXRleC5oPg0KKw0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQor
I2luY2x1ZGUgPGludHJpbi5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisNCisj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCINCisjaW5jbHVkZSAi
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiDQorDQorbmFtZXNwYWNlIGdsDQorew0KK3Vuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFsID0gMTsNCisNCitzdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkNCit7DQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwNCisgICAgICAgICAgICAgZm9y
bWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQ0KKyAgICB7DQorICAgICAg
ICByZXR1cm4gRDNERk1UX0RYVDE7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpDQorICAgIHsNCisgICAgICAgIHJldHVy
biBEM0RGTVRfRFhUMzsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIEQzREZN
VF9EWFQ1Ow0KKyAgICB9DQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRkxPQVQpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMyRjsNCisgICAgfQ0KKyAgICBlbHNl
IGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4g
RDNERk1UX0ExNkIxNkcxNlIxNkY7DQorICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQ0KKyAgICB7DQorICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5D
RSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250ZXh0KCktPnN1
cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfQThMODsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGZvcm1h
dCA9PSBHTF9SR0IpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4
RzhCODsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCit9DQorDQorc3RhdGljIGJv
b2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQ0KK3sNCisgICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgIH0NCisgICAgc3dpdGNoKGZvcm1hdCkNCisgICAgew0KKyAgICAgIGNhc2UgRDNERk1U
X0w4Og0KKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgY2FzZSBEM0RGTVRfRFhUMToN
CisgICAgICBjYXNlIEQzREZNVF9EWFQzOg0KKyAgICAgIGNhc2UgRDNERk1UX0RYVDU6DQorICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6DQorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoN
CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOg0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpDQorew0KKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7DQorDQorICAgIGlmIChkM2RmbXQgPT0g
RDNERk1UX0lOVFopDQorICAgIHsNCisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRI
U1RFTkNJTDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUpKSkNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNB
R0VfUkVOREVSVEFSR0VUOw0KKyAgICB9DQorICAgIHJldHVybiBkM2R1c2FnZTsNCit9DQorDQor
SW1hZ2U6OkltYWdlKCkNCit7DQorICAgIG1XaWR0aCA9IDA7IA0KKyAgICBtSGVpZ2h0ID0gMDsN
CisgICAgbUZvcm1hdCA9IEdMX05PTkU7DQorICAgIG1UeXBlID0gR0xfVU5TSUdORURfQllURTsN
CisNCisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBtRGlydHkgPSBmYWxzZTsNCisNCisg
ICAgbUQzRFBvb2wgPSBEM0RQT09MX1NZU1RFTU1FTTsNCisgICAgbUQzREZvcm1hdCA9IEQzREZN
VF9VTktOT1dOOw0KK30NCisNCitJbWFnZTo6fkltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFj
ZSkNCisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgfQ0KK30NCisN
Citib29sIEltYWdlOjpyZWRlZmluZShHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxlYXNlKQ0KK3sNCisgICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fA0KKyAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwNCisgICAg
ICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8DQorICAgICAgICBtVHlwZSAhPSB0eXBlIHx8DQorICAg
ICAgICBmb3JjZVJlbGVhc2UpDQorICAgIHsNCisgICAgICAgIG1XaWR0aCA9IHdpZHRoOw0KKyAg
ICAgICAgbUhlaWdodCA9IGhlaWdodDsNCisgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7DQorICAg
ICAgICBtVHlwZSA9IHR5cGU7DQorICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRo
YXQgd2lsbCBiZSB1c2VkDQorICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVGb3Jt
YXRUeXBlKG1Gb3JtYXQsIG1UeXBlKTsNCisNCisgICAgICAgIGlmIChtU3VyZmFjZSkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIG1T
dXJmYWNlID0gTlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAg
ICB9DQorDQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBJbWFnZTo6Y3JlYXRlU3Vy
ZmFjZSgpDQorew0KKyAgICBpZihtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0K
KyAgICB9DQorDQorICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOw0KKyAgICBjb25zdCBEM0RQ
T09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBjb25zdCBEM0RGT1JNQVQg
ZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7DQorICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNE
Rk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVz
DQorDQorICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApDQorICAgIHsNCisgICAg
ICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOw0KKyAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGgg
PSBtV2lkdGg7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0Ow0KKyAg
ICAgICAgaWYgKElzQ29tcHJlc3NlZChtRm9ybWF0KSAmJiAobVdpZHRoICUgNCAhPSAwIHx8IG1I
ZWlnaHQgJSA0ICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJvb2wgaXNNdWx0NCA9
IGZhbHNlOw0KKyAgICAgICAgICAgIGludCB1cHNhbXBsZUNvdW50ID0gMDsNCisgICAgICAgICAg
ICB3aGlsZSAoIWlzTXVsdDQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXF1
ZXN0V2lkdGggPDw9IDE7DQorICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQgPDw9IDE7DQor
ICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsNCisgICAgICAgICAgICAgICAgaWYgKHJl
cXVlc3RXaWR0aCAlIDQgPT0gMCAmJiByZXF1ZXN0SGVpZ2h0ICUgNCA9PSAwKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1
cHNhbXBsZUNvdW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxl
dmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVM
TCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBzdXJm
YWNlIGZhaWxlZC4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7DQorICAgICAgICB9DQorDQorICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwo
bGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7DQorICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNl
KCk7DQorICAgIH0NCisNCisgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOw0KKyAgICBtRGlydHkg
PSBmYWxzZTsNCisgICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7DQorfQ0KKw0KK0hSRVNVTFQgSW1h
Z2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpDQor
ew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJS
X0lOVkFMSURDQUxMOw0KKw0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIHJl
c3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCByZWN0LCAwKTsNCisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorDQorICAgICAgICBtRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnVubG9j
aygpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7DQorICAgIH0NCit9DQorDQorYm9vbCBJbWFnZTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QNCit7ICAgIA0KKyAgICByZXR1cm4gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShn
ZXREM0RGb3JtYXQoKSk7DQorfQ0KKw0KK0QzREZPUk1BVCBJbWFnZTo6Z2V0RDNERm9ybWF0KCkg
Y29uc3QNCit7DQorICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBo
YXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QNCisgICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcg
YnkgdGhlIGNhbGxlcg0KKyAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7
DQorDQorICAgIHJldHVybiBtRDNERm9ybWF0Ow0KK30NCisNCitJRGlyZWN0M0RTdXJmYWNlOSAq
SW1hZ2U6OmdldFN1cmZhY2UoKQ0KK3sNCisgICAgY3JlYXRlU3VyZmFjZSgpOw0KKw0KKyAgICBy
ZXR1cm4gbVN1cmZhY2U7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQ0KK3sNCisgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICB7
DQorICAgICAgICBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxM
LCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAgIG1T
dXJmYWNlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7
DQorICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOw0KKyAgICBBU1NFUlQoZGVzYy5Qb29sID09
IEQzRFBPT0xfTUFOQUdFRCk7DQorDQorICAgIG1TdXJmYWNlID0gc3VyZmFjZTsNCisgICAgbUQz
RFBvb2wgPSBkZXNjLlBvb2w7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOw0KKw0KKyAgICBpZiAoc291cmNlU3Vy
ZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICBS
RUNUIHJlY3Q7DQorICAgICAgICByZWN0LmxlZnQgPSB4b2Zmc2V0Ow0KKyAgICAgICAgcmVjdC50
b3AgPSB5b2Zmc2V0Ow0KKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsNCisg
ICAgICAgIHJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsNCisNCisgICAgICAgIGlmICht
RDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0U3VyZmFjZSwgTlVM
TCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDAp
Ow0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTog
c291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBkZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyANCisg
ICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsNCisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1
cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsNCisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFN0b3Jl
IHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgs
aGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dA0KKy8vIGlu
dG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuDQordm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLA0KKyAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqaW5wdXQpDQorew0KKyAgICBSRUNUIGxvY2tSZWN0ID0NCisgICAgew0K
KyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwNCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9m
ZnNldCArIGhlaWdodA0KKyAgICB9Ow0KKw0KKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7DQor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOw0KKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAg
ICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCk7DQorDQorICAgIHN3aXRjaCAodHlwZSkNCisgICAgew0KKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAgICAgICBpZiAoc3VwcG9y
dHNTU0UyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRh
U1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToNCisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZN
VF9MOCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RG
b3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAg
IGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c1NTRTIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRS
R0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNl
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoNCisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0N
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6DQor
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xf
UkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6DQorICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xfUkdC
QToNCisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6DQorICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xfUkdC
QToNCisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZMT0FUOg0KKyAgICAgICAgc3dpdGNoIChtRm9y
bWF0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVy
dGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QN
CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToNCisgICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQor
ICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6DQorICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRA0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBoYUhh
bGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0K
KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAg
ICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOw0KKyAgICB9DQorDQorICAgIHVubG9jaygpOw0KK30NCisNCit2b2lkIEltYWdlOjps
b2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0K
KyAgICANCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJj
ZVt4XTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkQWxwaGFE
YXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsNCisg
ICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7DQorDQorICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsN
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisNCisgICAg
ICAgIGludCB4Ow0KKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQNCisgICAg
ICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYg
MHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0Ow0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBpNjQo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOw0KKyAgICAgICAg
ICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRl
IHRvIHplcm8NCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVy
b1dpZGUsIHNvdXJjZURhdGEpOw0KKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJp
dCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybw0KKyAgICAgICAgICAgIF9f
bTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOw0KKyAg
ICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJj
ZURhdGEpOw0KKw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0
PF9fbTEyOGkqPigmZGVzdFt4XSksIGxvKTsNCisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgo
cmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOw0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXINCisgICAgICAgIGZvciAoOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0Ow0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlW3hdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
MDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKw0KKyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdS
QTggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24g
Zm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsNCisNCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAxLjBmOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5z
aWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsN
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICANCisgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJH
UkE4IGRlc3RpbmF0aW9uIGZvcm1hdA0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICog
Mik7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisg
ICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsN
CisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsy
KngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsN
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDJdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbMip4KzFdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisg
ICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBz
b3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2Vb
eCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4g
Mik7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAz
KSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOw0KKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3Qg
PSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7
DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IHNvdXJjZVt4ICogMyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7DQor
ICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3ggKiAzICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQg
ZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNp
Z25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAgICBfX20xMjhpIGJyTWFzayA9IF9tbV9zZXQxX2Vw
aTMyKDB4MDBmZjAwZmYpOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7DQorICAgICAgICBpbnQgeCA9IDA7DQorDQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0
ZXMgYWxpZ25lZA0KKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0
cl90PigmZGVzdFt4XSkgJiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAg
ICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhm
ZjAwZmYwMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsg
eCArPSA0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9t
bV9sb2FkdV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hd
KSk7DQorICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBhbmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdl
DQorICAgICAgICAgICAgX19tMTI4aSBnYUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJy
TWFzaywgc291cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcg0KKyAg
ICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21tX2FuZF9zaTEyOChzb3VyY2VEYXRh
LCBick1hc2spOw0KKyAgICAgICAgICAgIC8vIFN3YXAgYiBhbmQgcg0KKyAgICAgICAgICAgIF9f
bTEyOGkgYnJTd2FwcGVkID0gX21tX3NodWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2
KGJyQ29tcG9uZW50cywgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAz
LCAwLCAxKSk7DQorICAgICAgICAgICAgX19tMTI4aSByZXN1bHQgPSBfbW1fb3Jfc2kxMjgoZ2FD
b21wb25lbnRzLCBiclN3YXBwZWQpOw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWlu
dGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIHJlc3VsdCk7DQorICAgICAgICB9DQor
DQorICAgICAgICAvLyBQZXJmb3JtIGxlZnRvdmVyIHdyaXRlcw0KKyAgICAgICAgZm9yICg7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2Jh
ID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYg
MHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVu
c2lnbmVkIGludCAqZGVzdCA9IE5VTEw7DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsNCisNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisg
ICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJn
YmEgJiAweGZmMDBmZjAwKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdl
Ojpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjAp
IDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsN
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwg
KChyZ2JhICYgMHhGMDAwKSA+PiAxMik7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
KChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkg
Pj4gMyk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+
PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAw
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNl
ID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7DQorICAg
IH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsNCisgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7DQor
ICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisg
ICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsNCisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09
IDApOw0KKyAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7DQorDQorICAgIFJFQ1QgbG9ja1Jl
Y3QgPSB7DQorICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsNCisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9
DQorDQorICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRo
LCBoZWlnaHQsIG1Gb3JtYXQpOw0KKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsNCisgICAgaW50IHJvd3MgPSBpbnB1dFNpemUg
LyBpbnB1dFBpdGNoOw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkNCisgICAg
ew0KKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2Nr
ZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQ
aXRjaCk7DQorICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KKy8vIFRoaXMgaW1wbGVt
ZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRl
eHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcw0KK3ZvaWQgSW1hZ2U6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpDQor
ew0KKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOw0KKyAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzY3JpcHRpb247DQorICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRp
b24pOw0KKyAgICANCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVl
blBsYWluU3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNj
cmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVM
TCk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7DQorICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgcmVzdWx0
ID0gZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0
RGF0YSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJS
KCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7DQorICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgUkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHgg
KyB3aWR0aCwgeSArIGhlaWdodH07DQorICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9m
ZnNldCwgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsNCisNCisgICAgaWYgKGlz
UmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1
cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNlKCksIE5VTEwsICZkZXN0UmVjdCwgcmVuZGVyVGFy
Z2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7DQorICAgICAg
ICANCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisgICAgICAg
ICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsNCisgICAgICAg
IHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNl
UmVjdCwgMCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3Rh
bmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07
DQorICAgICAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsNCisgICAgICAg
IA0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3RhbmdsZSBt
aWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5Vbmxv
Y2tSZWN0KCk7DQorICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisN
CisgICAgICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFy
Kilzb3VyY2VMb2NrLnBCaXRzOw0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAo
dW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7DQorDQorICAgICAgICAgICAgc3dpdGNoIChk
ZXNjcmlwdGlvbi5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoNCisg
ICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
DQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNo
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6DQorICAgICAgICAgICAgICAgIHN3aXRj
aChnZXREM0RGb3JtYXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0w4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQg
PSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0N
CisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsN
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOw0KKyAgICAg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9BMVI1RzVCNToNCisgICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZv
cm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4
ICogMiArIDFdICYgMHg3QzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9
IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisN
CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gKHNpZ25lZCBjaGFyKXNv
dXJjZVt4ICogMiArIDFdID4+IDc7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGRlZmF1
bHQ6DQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgdW5sb2NrKCk7DQorICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5VbmxvY2tSZWN0KCk7DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFz
ZSgpOw0KKw0KKyAgICBtRGlydHkgPSB0cnVlOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZTo6VGV4
dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpDQorICAgIDogbUQzRFVzYWdlKHVzYWdlKSwNCisgICAg
ICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKHVzYWdlKSksDQorICAgICAg
bVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpDQorew0KK30NCisNCitUZXh0dXJl
U3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkNCit7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZVN0b3Jh
Z2U6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QNCit7DQorICAgIHJldHVybiAobUQzRFVzYWdlICYg
KEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7DQor
fQ0KKw0KK2Jvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCk7DQorfQ0KKw0KK0QzRFBPT0wgVGV4
dHVyZVN0b3JhZ2U6OmdldFBvb2woKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1EM0RQb29sOw0K
K30NCisNCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1EM0RVc2FnZTsNCit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpn
ZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsN
Cit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwo
KQ0KK3sNCisgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOw0KK30NCisNCitUZXh0
dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkNCit7DQorICAgIG1N
aW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7DQorICAgIG1NYWdGaWx0ZXIgPSBH
TF9MSU5FQVI7DQorICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsNCisgICAgbVdyYXBUID0gR0xfUkVQ
RUFUOw0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgbVVzYWdlID0gR0xfTk9O
RTsNCisgICAgDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorDQorICAgIG1JbW11dGFibGUg
PSBmYWxzZTsNCit9DQorDQorVGV4dHVyZTo6flRleHR1cmUoKQ0KK3sNCit9DQorDQorLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBw
YXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7
DQorICAgIHN3aXRjaCAoZmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0K
KyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRl
cikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7
DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0
Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVy
KQ0KK2Jvb2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpDQorew0KKyAgICBz
d2l0Y2ggKGZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoNCisgICAgICBj
YXNlIEdMX0xJTkVBUjoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAh
PSBmaWx0ZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0g
ZmlsdGVyOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisvLyBSZXR1
cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJh
bWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkNCit7DQorICAgIHN3
aXRjaCAod3JhcCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfUkVQRUFUOg0KKyAgICAgIGNhc2Ug
R0xfQ0xBTVBfVE9fRURHRToNCisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQ
YXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7DQorICAgICAgICB9DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgfQ0KK30NCisNCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChH
TGVudW0gd3JhcCkNCit7DQorICAgIHN3aXRjaCAod3JhcCkNCisgICAgew0KKyAgICAgIGNhc2Ug
R0xfUkVQRUFUOg0KKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToNCisgICAgICBjYXNlIEdM
X01JUlJPUkVEX1JFUEVBVDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVdyYXBUICE9
IHdyYXApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOw0K
KyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAgZGVmYXVsdDoN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQ0K
K2Jvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQ0KK3sNCisgICAgc3dpdGNoICh1
c2FnZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTk9ORToNCisgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6DQorICAgICAgICBtVXNhZ2UgPSB1c2FnZTsNCisgICAg
ICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbU1pbkZpbHRlcjsNCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldE1h
Z0ZpbHRlcigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1hZ0ZpbHRlcjsNCit9DQorDQorR0xl
bnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtV3JhcFM7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVdyYXBUOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1Vc2FnZTsNCit9DQorDQordm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQ0KK3sNCisg
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBpbWFnZS0+bG9hZERhdGEo
MCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5
cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0K
KyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwg
cGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQor
ew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2Fk
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorDQor
ICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3Nl
ZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKQ0KK3sNCisgICAgaWYgKHBpeGVscyAhPSBOVUxMKQ0KKyAgICB7DQor
ICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRl
eHR1cmU6OmdldFRleHR1cmUoKQ0KK3sNCisgICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKGZh
bHNlKSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0K
KyAgICB1cGRhdGVUZXh0dXJlKCk7DQorDQorICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpOw0K
K30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbURpcnR5UGFyYW1ldGVyczsNCit9DQorDQorYm9vbCBUZXh0dXJlOjpoYXNEaXJ0
eUltYWdlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbURpcnR5SW1hZ2VzOw0KK30NCisNCit2
b2lkIFRleHR1cmU6OnJlc2V0RGlydHkoKQ0KK3sNCisgICAgbURpcnR5UGFyYW1ldGVycyA9IGZh
bHNlOw0KKyAgICBtRGlydHlJbWFnZXMgPSBmYWxzZTsNCit9DQorDQordW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1
cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsNCisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCkgOiAwOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBUZXh0dXJlU3RvcmFn
ZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7DQorICAgIHJldHVybiB0ZXh0dXJlID8gdGV4
dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOw0KK30NCisNCitib29sIFRl
eHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtSW1tdXRhYmxlOw0K
K30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgY29uc3QNCit7DQorICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIo
aGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzDQor
ICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhv
dXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLg0KKyAg
ICAgICAgcmV0dXJuIDE7DQorICAgIH0NCit9DQorDQorR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25M
ZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIGNyZWF0aW9uTGV2ZWxz
KHNpemUsIHNpemUpOw0KK30NCisNCitpbnQgVGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExl
dmVsQ291bnQoKSA6IDA7DQorfQ0KKw0KK0JsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQ0KK3sN
CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsNCisgICAgcmV0dXJuIGNvbnRl
eHQtPmdldEJsaXR0ZXIoKTsNCit9DQorDQorYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJn
ZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJv
b2wgZnJvbU1hbmFnZWQpDQorew0KKyAgICBpZiAoc291cmNlICYmIGRlc3QpDQorICAgIHsNCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0Ow0KKw0KKyAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNl
KGRlc3QsIE5VTEwsIE5VTEwsIHNvdXJjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAw
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7DQorICAgICAgICAgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7DQorDQorICAgICAgICAg
ICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsNCisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0
cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdl
MkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKSA6
IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCksIG1SZW5kZXJUYXJnZXRTZXJp
YWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkNCit7DQorICAgIG1UZXh0dXJl
ID0gc3VyZmFjZVRleHR1cmU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9y
YWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0
aCwgaW50IGhlaWdodCkNCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1SZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkNCit7DQorICAgIG1U
ZXh0dXJlID0gTlVMTDsNCisgICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9z
aXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUNCisg
ICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3Jl
YXRpb24NCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQ0KKyAgICB7DQorICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscywg
Z2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7DQorDQorICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQ0K
K3sNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtVGV4dHVyZS0+UmVsZWFz
ZSgpOw0KKyAgICB9DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4N
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkN
Cit7DQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYg
KG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJmYWNlKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHN1cmZhY2U7DQorfQ0KKw0KK0lE
aXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4
dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsNCit9DQorDQorVGV4dHVyZTJE
OjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpDQorew0KKyAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7DQorICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBOVUxMOw0KKyAgICBtUHJveHlSZWZzID0gMDsNCit9DQorDQorVGV4dHVyZTJEOjp+VGV4dHVy
ZTJEKCkNCit7DQorICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsNCisNCisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIA0KKyAgICBpZiAo
bVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVM
TCk7DQorICAgICAgICBtU3VyZmFjZSA9IE5VTEw7DQorICAgIH0NCit9DQorDQorLy8gV2UgbmVl
ZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3Rp
bmcgYXMgDQorLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBh
dHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgDQorLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkgd2hp
Y2ggaGFzIGJlZW4gZGVsZXRlZC4NCit2b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIG1Qcm94eVJlZnMrKzsNCit9DQorDQordm9p
ZCBUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sN
CisgICAgaWYgKG1Qcm94eVJlZnMgPiAwKQ0KKyAgICAgICAgbVByb3h5UmVmcy0tOw0KKw0KKyAg
ICBpZiAobVByb3h5UmVmcyA9PSAwKQ0KKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxM
Ow0KK30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIEdMX1RFWFRVUkVfMkQ7DQorfQ0KKw0KK0dMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0
aChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0u
Z2V0V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0dMc2l6
ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICBy
ZXR1cm4gMDsNCit9DQorDQorR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZv
cm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gR0xfTk9ORTsNCit9DQorDQorRDNE
Rk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgcmVsZWFzZVRleEltYWdlKCk7
DQorDQorICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAgICBpZiAobVRleFN0b3Jh
Z2UgJiYgcmVkZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAg
ICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUy
RDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHR5cGUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJE
OjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgcmVsZWFzZVRl
eEltYWdlKCk7DQorDQorICAgIEdMZW51bSBmb3JtYXQ7DQorDQorICAgIHN3aXRjaChzdXJmYWNl
LT5nZXRGb3JtYXQoKSkNCisgICAgew0KKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAg
ICAgICAgZm9ybWF0ID0gR0xfUkdCQTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4Og0KKyAgICAgICAgZm9ybWF0ID0gR0xfUkdCOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3JtYXQsIHN1
cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05FRF9CWVRF
LCB0cnVlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7DQor
DQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIG1TdXJmYWNlID0gc3VyZmFjZTsNCisg
ICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZSh0aGlzKTsNCit9DQorDQordm9pZCBUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSgpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisg
ICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7DQorICAgICAgICBtU3VyZmFj
ZSA9IE5VTEw7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgICAgIG1UZXhTdG9yYWdlID0g
TlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xfUkdCQSwgMCwgMCwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
DQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdM
X1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1h
Z2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOw0KK30NCisNCit2b2lkIFRleHR1
cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdl
QXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxldmVsIDwg
bGV2ZWxDb3VudCgpKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExl
dmVsID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAgICBp
ZiAoZGVzdExldmVsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZt
SW1hZ2VBcnJheVtsZXZlbF07DQorICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVz
dExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisNCisgICAgICAgICAg
ICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1Yklt
YWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQ0KKyAgICB7DQorICAgICAg
ICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisg
ICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0K
K3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0K
KyAgIA0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkN
CisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8
ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAgICAgICAgaWYgKHdpZHRo
ICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7
DQorICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHg7DQorICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSB5ICsgaGVpZ2h0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQor
DQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAs
IDAsIGRlc3QpOw0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
Ow0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkNCit7
DQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgo
KSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7DQorICAgIH0N
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIW1J
bWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYm
ICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsNCisNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9
IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOw0KKw0KKyAgICAgICAgICAgIGlm
IChkZXN0KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5j
b3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCks
IHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOw0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkNCit7DQorICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5h
bGZvcm1hdCk7DQorICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9y
bWF0KTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShm
b3JtYXQsIHR5cGUpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2Rm
bXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQorDQorICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAg
IG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUs
IHRydWUpOw0KKyAgICAgICAgd2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiAxKTsNCisgICAg
ICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsNCisgICAgfQ0KKw0KKyAgICBm
b3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5y
ZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2
ZWwpOw0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgMkQgdGV4
dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
OC4yIHBhZ2UgODUuDQorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QN
Cit7DQorICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBp
ZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICB9DQorDQorICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOw0KKw0KKyAgICBz
d2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJFU1Q6DQorICAg
ICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7DQorICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6DQorICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoNCisgICAg
ICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KDAp
ID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
cigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkNCisg
ICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRl
ciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIGJvb2wgbnBvdFN1cHBvcnQgPSBnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpOw0KKw0KKyAgICBpZiAoIW5wb3RTdXBwb3J0KQ0KKyAgICB7DQor
ICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdp
ZHRoKSkgfHwNCisgICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFICYm
ICFpc1BvdzIoaGVpZ2h0KSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChtaXBtYXBwaW5nKQ0KKyAgICB7DQor
ICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgh
aXNQb3cyKHdpZHRoKSB8fCAhaXNQb3cyKGhlaWdodCkpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKCFpc01pcG1hcENvbXBsZXRlKCkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVl
Ow0KK30NCisNCisvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLg0KK2Jvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlmIChpc0ltbXV0YWJsZSgp
KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVp
IHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsNCisgICAgR0xzaXplaSBoZWlnaHQg
PSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsNCisNCisgICAgaWYgKHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0K
KyAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOw0KKw0KKyAgICBmb3Ig
KGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9y
bWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdl
QXJyYXlbMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lk
dGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJl
c3NlZChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorYm9vbCBUZXh0dXJlMkQ6OmlzRGVwdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50
ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0
dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4U3RvcmFn
ZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsNCit9DQorDQorLy8gQ29u
c3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGlt
YWdlcw0KK3ZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkNCit7DQorICAgIEdMc2l6ZWkg
d2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9
IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlv
bkxldmVscyh3aWR0aCwgaGVpZ2h0KTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFy
cmF5WzBdLmdldEQzREZvcm1hdCgpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVV
c2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7
DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQs
IGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgDQorICAgIGlmIChtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorICAgICAgICAgICAgbUltYWdl
QXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKCkNCit7DQorICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQor
DQorICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAg
IHsNCisgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07DQorDQorICAg
ICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb21t
aXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKSwgbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2
b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkNCit7DQorICAgIFRleHR1cmVT
dG9yYWdlMkQgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOw0KKw0KKyAgICBpZiAobUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKSAhPSAwICYmIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpICE9IDApDQor
ICAgIHsNCisgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgp
Ow0KKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsN
CisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOw0K
KyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
Ow0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisgICAgICAgIG5ld1RleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdp
ZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5n
ZXRTdXJmYWNlTGV2ZWwoaSk7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOw0KKw0KKyAgICAgICAgICAg
ICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5p
c01hbmFnZWQoKSkpDQorICAgICAgICAgICAgICAgIHsgICANCisgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7DQorICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNv
dXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVs
ZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkg
c291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxl
YXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOw0KKw0KKyAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVN
aXBtYXBzKCkNCit7DQorICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF0uZ2V0
V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdo
IHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVs
cy4NCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdl
dFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSk7DQorICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykNCisgICAgew0KKyAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksDQorICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpID4+
IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXS5nZXRUeXBl
KCkpOw0KKyAgICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNS
ZW5kZXJUYXJnZXQoKSkNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOw0KKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwoaSk7DQorDQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVM
TCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94Rmls
dGVyKHVwcGVyLCBsb3dlcik7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICh1
cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGlmIChsb3dlciAh
PSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ld
Lm1hcmtDbGVhbigpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9h
ZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5V
TEwsIG1JbWFnZUFycmF5W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhfRklM
VEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCIgZmFp
bGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQorUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5k
ZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkg
PT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5Ow0KK30NCisNCisvLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBj
cmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpDQorICAgIHsNCisgICAg
ICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRleHR1cmUoKTsNCisgICAg
DQorICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUNCisgICAgaWYgKGlz
RGVwdGgoMCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIHJl
dHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOw0KK30NCisNCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRV
UkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVh
dGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpDQorICAgIHsNCisgICAgICAg
IHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRleHR1cmUoKTsNCisNCisgICAg
Ly8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlDQorICAgIGlmICghaXNE
ZXB0aCgwKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0
dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KK1RleHR1cmVTdG9y
YWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpDQorew0KKyAgICBp
ZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKSkNCisgICAgew0KKyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisg
ICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOw0KK30NCisNCitU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpDQorICAgIDogVGV4dHVyZVN0
b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVDdWJlU2VyaWFscygpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBOVUxMOw0KKyAgICAv
LyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBh
biBpbmNvbXBsZXRlIHRleHR1cmUNCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24NCisgICAgaWYgKHNpemUgPiAwKQ0KKyAgICB7
DQorICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZl
bHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOw0KKw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9y
YWdlQ3ViZU1hcCgpDQorew0KKyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgIH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVN
YXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpDQorew0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7DQorDQorICAgIGlmIChtVGV4dHVyZSkNCisgICAg
ew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uo
ZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsNCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJu
IHN1cmZhY2U7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7
DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsNCit9
DQorDQorVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJl
KGlkKQ0KK3sNCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7IGkrKykNCisgICAgew0KKyAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsNCisg
ICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0gMDsNCisgICAgfQ0KK30NCisNCitUZXh0dXJlQ3Vi
ZU1hcDo6flRleHR1cmVDdWJlTWFwKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsg
aSsrKQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAgICB9DQor
DQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KK30N
CisNCisvLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5k
ZXJidWZmZXJzIGFjdGluZyBhcyANCisvLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRo
YXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgDQorLy8gcHJveHkgcmVmZXJlbmNl
cyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLA0KKy8v
IHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0IGEgbmV3IGF0dGVtcHQgYXQg
cmVmZXJlbmNpbmcNCisvLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uDQordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobUZhY2VQcm94
aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7DQorICAg
IH0NCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpDQorew0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykNCisg
ICAgew0KKyAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQ0KKyAgICAgICAgICAgICAg
ICBtRmFjZVByb3h5UmVmc1tpXS0tOw0KKw0KKyAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVm
c1tpXSA9PSAwKQ0KKyAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOw0KK30NCisNCitH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLmdldFdpZHRoKCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiAwOw0KK30NCisN
CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS5nZXRIZWlnaHQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFj
ZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRGb3JtYXQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAg
cmV0dXJuIEdMX05PTkU7DQorfQ0KKw0KK0QzREZPUk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNE
Rm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7DQor
ICAgIGVsc2UNCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsNCit9DQorDQordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0K
K30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJ
bWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQor
fQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldElt
YWdlKDUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZElt
YWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
DQorew0KKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChm
YWNlKV1bbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChp
bnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgQVNTRVJUKG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7DQorDQorICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RMZXZl
bCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7DQorICAgICAgICBBU1NFUlQoZGVzdExldmVsICE9IE5V
TEwpOw0KKw0KKyAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07DQorICAg
ICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsNCisNCisgICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsN
CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2Uo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQ0K
KyAgICB7DQorICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQ0KKyAgICB7DQorICAgICAgICBjb21taXRS
ZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCk7DQorICAgIH0NCit9DQorDQorLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNv
bXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4NCiti
b29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0DQorew0KKyAgICBp
bnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7DQorDQorICAgIGJvb2wgbWlw
bWFwcGluZzsNCisNCisgICAgc3dpdGNoIChtTWluRmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgICAgbWlwbWFwcGlu
ZyA9IGZhbHNlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAgICAg
IGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01J
UE1BUF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsNCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwNCisgICAgICAgIChnZXRJbnRlcm5h
bEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0hBTEZfRkxP
QVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkN
CisgICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoZ2V0V3JhcFMo
KSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8
fCBtaXBtYXBwaW5nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIW1pcG1hcHBpbmcpDQorICAgIHsNCisgICAg
ICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAg
ICBpZiAoIWlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkpICAgLy8gQWxzbyB0ZXN0cyBmb3IgaXNDdWJl
Q29tcGxldGUoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gVGVzdHMgZm9y
IGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
Ny4xMCBwYWdlIDgxLg0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29u
c3QNCit7DQorICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIDw9IDAgfHwgbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGZvciAo
dW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICB7DQorICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRXaWR0aCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lk
dGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fA0KKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VdWzBdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZv
cm1hdCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9
IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQor
fQ0KKw0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QN
Cit7DQorICAgIGlmIChpc0ltbXV0YWJsZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1
ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVswXVswXS5nZXRXaWR0aCgpOw0KKw0KKyAgICBpbnQgcSA9IGxvZzIoc2l6ZSk7DQorDQor
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICB7DQorICAgICAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspDQorICAgICAgICB7DQor
ICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRGb3JtYXQoKSAhPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0VHlwZSgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdl
dCwgbGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisNCisvLyBDb25zdHJ1
Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2Vz
LCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQ0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0
ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKTsNCisgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7DQor
ICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsN
CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZh
bHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsN
CisNCisgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkNCisgICAgew0KKyAgICAgICAg
aW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZl
bCk7DQorICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlVGV4dHVyZSgpDQorew0KKyAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XTsNCisNCisgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5n
ZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpuZXdUZXhTdG9yYWdlID0g
TlVMTDsNCisNCisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgIT0gMCkNCisg
ICAgew0KKyAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KTsNCisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOw0KKyAg
ICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgp
Ow0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisgICAgICAgIG5ld1RleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgc2l6ZSk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgICAg
IGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykNCisgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhT
dG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0g
bmV3VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRl
clRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpDQorICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3Rv
cmFnZTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsN
CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsNCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQor
DQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOw0KK30NCisNCit1bnNpZ25lZCBpbnQg
VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkNCit7DQorICAgIE1FVEFfQVNT
RVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCA9PSAxKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOw0KKyAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7DQorICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA0KTsN
CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOw0KKw0KKyAgICByZXR1cm4gZmFjZSAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6cmVkZWZpbmVJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkNCit7DQorICAgIGJvb2wg
cmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVk
ZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZv
ciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgbVRleFN0b3Jh
Z2UgPSBOVUxMOw0KKw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30N
CisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorDQorICAg
IGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgaWYgKCFtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkNCisgICAgew0K
KyAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1
ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2Ug
fHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5tYXJrQ2xlYW4oKTsNCisNCisgICAg
ICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOw0KKw0KKyAgICAgICAgaWYgKHdpZHRoID4gMCAm
JiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBSRUNUIHNv
dXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsNCisgICAgICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQor
DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3Qp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVu
ZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOw0KKyAgICAgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRXaWR0aCgpOw0KKw0K
KyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6
ZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOw0KKyAg
ICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdl
dFJlbmRlclRhcmdldCgpOw0KKw0KKyAgICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgew0KKyAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7DQorICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgdW5z
aWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOw0KKw0KKyAgICBpZiAoIW1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRl
eFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQor
ICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHVwZGF0ZVRl
eHR1cmUoKTsNCisNCisgICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0geDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0K
KyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0
LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQorDQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7DQor
DQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJh
eVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7DQorICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzaXplKQ0KK3sNCisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0
KGludGVybmFsZm9ybWF0KTsNCisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50
ZXJuYWxmb3JtYXQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsN
CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNk
Zm10LCBkM2R1c2FnZSwgc2l6ZSk7DQorICAgIG1JbW11dGFibGUgPSB0cnVlOw0KKw0KKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICB7DQorICAg
ICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCBzaXpl
LCBzaXplLCB0eXBlLCB0cnVlKTsNCisgICAgICAgICAgICBzaXplID0gc3RkOjptYXgoMSwgc2l6
ZSA+PiAxKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBsZXZlbCA9IGxl
dmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
DQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmlu
ZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAg
ICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgZmFj
ZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2Us
IGxldmVsKTsNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1h
bmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQ0KK3sNCisg
ICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmICghZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFpc1Bv
dzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRo
ZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4NCisgICAgdW5zaWdu
ZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpOw0KKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykNCisgICAgew0KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0Rm9ybWF0KCksDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5n
ZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdldFR5cGUoKSk7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0g
MDsgZiA8IDY7IGYrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaS0xKTsNCisgICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOw0KKw0KKyAgICAgICAg
ICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQ0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBl
ciwgbG93ZXIpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmICh1
cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICBpZiAobG93
ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0ubWFya0NsZWFuKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7
IGYgPCA2OyBmKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0KKyAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RY
TG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5V
TEwsIE5VTEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEws
IEQzRFhfRklMVEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkp
Ow0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zd
W2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCitSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCkNCit7DQorICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5k
ZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZh
Y2VJbmRleCh0YXJnZXQpOw0KKw0KKyAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwp
DQorICAgIHsNCisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIo
aWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOw0KKyAg
ICB9DQorDQorICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07DQorfQ0KKw0KKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6Omdl
dFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgQVNTRVJUKElzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0
ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVy
ZSgpOw0KKyAgICANCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0
YXJnZXQsIDApOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpDQorew0KKyAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChy
ZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkNCisgICAgew0K
KyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOw0KK30NCisNCit9DQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAppbmRleCAxOWE2ZWI1Li44MGUyODhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aApAQCAtMSw0MzMgKzEsNDI3IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmg6
IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgY29uY3JldGUg
ZGVyaXZlZAotLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1l
bnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1RFWFRVUkVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8KLQotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5j
bHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29t
bW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotbmFtZXNwYWNlIGVnbAotewot
Y2xhc3MgU3VyZmFjZTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBCbGl0OwotY2xhc3Mg
RnJhbWVidWZmZXI7Ci0KLWVudW0KLXsKLSAgICAvLyBUaGVzZSBhcmUgdGhlIG1heGltdW1zIHRo
ZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydAotICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBh
cmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNhcHMKLSAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJp
ZWQgZnJvbSB0aGUgQ29udGV4dAotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUg
PSAxNjM4NCwKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0g
MTYzODQsCi0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgPSAxNSAgIC8v
IDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCi19OwotCi1jbGFzcyBJbWFnZQotewotICBwdWJs
aWM6Ci0gICAgSW1hZ2UoKTsKLSAgICB+SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZpbmUoR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBi
b29sIGZvcmNlUmVsZWFzZSk7Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9
Ci0gICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQotCi0gICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2
b2lkIHVubG9jaygpOwotCi0gICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKLSAg
ICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qg
e3JldHVybiBtSGVpZ2h0O30KLSAgICBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Qge3JldHVybiBt
Rm9ybWF0O30KLSAgICBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0IHtyZXR1cm4gbVR5cGU7fQotICAg
IGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURpcnR5O30KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwotCi0gICAgdm9pZCBzZXRNYW5hZ2VkU3Vy
ZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgdm9pZCB1cGRhdGVTdXJmYWNl
KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIGxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJH
QkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQzRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQ1
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLQotICAg
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1h
Z2UpOwotCi0gICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBHTHNpemVpIG1XaWR0aDsK
LSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1Gb3JtYXQ7Ci0gICAgR0xlbnVtIG1U
eXBlOwotCi0gICAgYm9vbCBtRGlydHk7Ci0KLSAgICBEM0RQT09MIG1EM0RQb29sOyAgIC8vIGNh
biBvbmx5IGJlIEQzRFBPT0xfU1lTVEVNTUVNIG9yIEQzRFBPT0xfTUFOQUdFRCBzaW5jZSBpdCBu
ZWVkcyB0byBiZSBsb2NrYWJsZS4KLSAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsKLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptU3VyZmFjZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlCi17
Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwotCi0gICAgYm9vbCBpc1JlbmRl
clRhcmdldCgpIGNvbnN0OwotICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgRDNEUE9P
TCBnZXRQb29sKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAgIGNvbnN0IGJvb2wgbVJlbmRlclRhcmdl
dDsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50
IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2Vy
aWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50VGV4dHVyZVNlcmlhbDsK
LX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgflRleHR1
cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25z
dCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29s
IHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3
cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFVzYWdl
KEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7Ci0gICAg
R0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0
OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRVc2FnZSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBEM0RGT1JN
QVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBj
b25zdCA9IDA7Ci0KLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKLQotICAgIGJvb2wgaGFzRGly
dHlQYXJhbWV0ZXJzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXJ0eUltYWdlcygpIGNvbnN0Owot
ICAgIHZvaWQgcmVzZXREaXJ0eSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFs
KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KTsKLQotICAgIGJvb2wgaXNJbW11dGFibGUoKSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25zdCBH
THVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7ICAg
Ly8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFsdWUg
aXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZXNv
dXJjZSBtYW5hZ2VyLgotCi0gIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTsKLQotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdl
KEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0g
ICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0KLSAgICBHTGludCBj
cmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3Q7Ci0gICAg
R0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkg
PSAwOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KSA9IDA7Ci0KLSAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIEJsaXQgKmdldEJsaXR0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJv
b2wgZnJvbU1hbmFnZWQpOwotCi0gICAgR0xlbnVtIG1NaW5GaWx0ZXI7Ci0gICAgR0xlbnVtIG1N
YWdGaWx0ZXI7Ci0gICAgR0xlbnVtIG1XcmFwUzsKLSAgICBHTGVudW0gbVdyYXBUOwotICAgIGJv
b2wgbURpcnR5UGFyYW1ldGVyczsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgYm9vbCBtRGly
dHlJbWFnZXM7Ci0KLSAgICBib29sIG1JbW11dGFibGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7Ci0KLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSA9IDA7Ci19OwotCi1jbGFzcyBUZXh0
dXJlU3RvcmFnZTJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVy
ZSk7Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMkQoKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNl
TGV2ZWwoaW50IGxldmVsKTsKLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0
dXJlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UyRCk7Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbVRleHR1cmU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1SZW5kZXJUYXJnZXRTZXJpYWw7
Ci19OwotCi1jbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgVGV4dHVyZTJEKEdMdWludCBpZCk7Ci0KLSAgICB+VGV4dHVyZTJEKCk7Ci0K
LSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZv
aWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVh
bCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lk
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xp
bnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
RDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3Rv
cmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xl
bnVtIHRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZTJEKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0gICAgdm9p
ZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVtJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2Uy
RCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsKLQotICAgIC8vIEEg
c3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVy
IHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBh
Y3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJh
Y2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBp
ZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2Ug
Y291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8v
IHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2Yg
dGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5Owot
ICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJl
U3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJv
b2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgp
OwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNl
VGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRl
eHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwotCi0gICAgSURpcmVjdDNE
Q3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4
dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAoR0x1aW50IGlk
KTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0
OwotICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3
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
LQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVu
dW0gZmFjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZUN1YmVNYXApOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1h
cCAqbVRleFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBj
b3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJl
Y2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4g
YSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291
bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBw
b2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIg
dG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0
IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVy
YnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVm
c1s2XTsKLX07Ci19Ci0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
DQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1cmUuaDog
RGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkDQorLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1l
bnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQNCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0KKyNpZm5kZWYgTElCR0xF
U1YyX1RFWFRVUkVfSF8NCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hfDQorDQorI2luY2x1
ZGUgPHZlY3Rvcj4NCisNCisjZGVmaW5lIEdMX0FQSUNBTEwNCisjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+DQorI2luY2x1ZGUgPGQzZDkuaD4NCisNCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiDQor
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisNCitu
YW1lc3BhY2UgZWdsDQorew0KK2NsYXNzIFN1cmZhY2U7DQorfQ0KKw0KK25hbWVzcGFjZSBnbA0K
K3sNCitjbGFzcyBCbGl0Ow0KK2NsYXNzIEZyYW1lYnVmZmVyOw0KKw0KK2VudW0NCit7DQorICAg
IC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0
DQorICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNh
cHMNCisgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQNCisgICAg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LA0KKyAgICBJTVBMRU1FTlRB
VElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorDQorICAgIElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJF
X1NJWkUNCit9Ow0KKw0KK2NsYXNzIEltYWdlDQorew0KKyAgcHVibGljOg0KKyAgICBJbWFnZSgp
Ow0KKyAgICB+SW1hZ2UoKTsNCisNCisgICAgYm9vbCByZWRlZmluZShHTGVudW0gZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxl
YXNlKTsNCisgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9DQorICAgIHZvaWQg
bWFya0NsZWFuKCkge21EaXJ0eSA9IGZhbHNlO30NCisNCisgICAgYm9vbCBpc1JlbmRlcmFibGVG
b3JtYXQoKSBjb25zdDsNCisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Ow0KKw0K
KyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQ0KKyAgICBHTHNp
emVpIGdldEhlaWdodCgpIGNvbnN0IHtyZXR1cm4gbUhlaWdodDt9DQorICAgIEdMZW51bSBnZXRG
b3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQ0KKyAgICBHTGVudW0gZ2V0VHlwZSgpIGNv
bnN0IHtyZXR1cm4gbVR5cGU7fQ0KKyAgICBib29sIGlzRGlydHkoKSBjb25zdCB7cmV0dXJuIG1T
dXJmYWNlICYmIG1EaXJ0eTt9DQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7
DQorDQorICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOw0KKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsNCisNCisgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsDQorICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7DQorDQorICAg
IHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRBbHBo
YURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRBbHBoYUZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVt
aW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQor
ICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBo
YUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAg
dm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9h
ZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsNCisgICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisg
ICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0K
KyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZENv
bXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICppbnB1dCk7DQorDQorICAgIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7DQorDQorICBwcml2YXRlOg0KKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSW1hZ2UpOw0KKw0KKyAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsN
CisNCisgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBS
RUNUICpyZWN0KTsNCisgICAgdm9pZCB1bmxvY2soKTsNCisNCisgICAgR0xzaXplaSBtV2lkdGg7
DQorICAgIEdMc2l6ZWkgbUhlaWdodDsNCisgICAgR0xlbnVtIG1Gb3JtYXQ7DQorICAgIEdMZW51
bSBtVHlwZTsNCisNCisgICAgYm9vbCBtRGlydHk7DQorDQorICAgIEQzRFBPT0wgbUQzRFBvb2w7
ICAgLy8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNp
bmNlIGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLg0KKyAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsN
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOw0KK307DQorDQorY2xhc3MgVGV4
dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdl
KERXT1JEIHVzYWdlKTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsNCisNCisg
ICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Ow0KKyAgICBib29sIGlzTWFuYWdlZCgpIGNv
bnN0Ow0KKyAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsNCisgICAgRFdPUkQgZ2V0VXNhZ2Uo
KSBjb25zdDsNCisgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsNCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJn
ZXQpIGNvbnN0ID0gMDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZSk7DQorDQorICAgIGNvbnN0IERXT1JEIG1EM0RVc2FnZTsNCisg
ICAgY29uc3QgRDNEUE9PTCBtRDNEUG9vbDsNCisNCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1U
ZXh0dXJlU2VyaWFsOw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlVGV4dHVyZVNlcmlh
bCgpOw0KKw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50VGV4dHVyZVNlcmlhbDsN
Cit9Ow0KKw0KK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QNCit7DQorICBw
dWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsNCisNCisgICAgdmlydHVh
bCB+VGV4dHVyZSgpOw0KKw0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsNCisNCisgICAgdmlydHVhbCBHTGVudW0gZ2V0
VGFyZ2V0KCkgY29uc3QgPSAwOw0KKw0KKyAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsNCisgICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7DQorICAgIGJvb2wg
c2V0V3JhcFMoR0xlbnVtIHdyYXApOw0KKyAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsN
CisgICAgYm9vbCBzZXRVc2FnZShHTGVudW0gdXNhZ2UpOw0KKw0KKyAgICBHTGVudW0gZ2V0TWlu
RmlsdGVyKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsNCisgICAg
R0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0Ow0K
KyAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCBib29sIGlzU2Ft
cGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOw0KKw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KmdldFRleHR1cmUoKTsNCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9
IDA7DQorDQorICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3Q7DQorICAgIGJvb2wg
aGFzRGlydHlJbWFnZXMoKSBjb25zdDsNCisgICAgdm9pZCByZXNldERpcnR5KCk7DQorICAgIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCk7DQorICAgIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7DQorDQorICAgIGJvb2wgaXNJbW11dGFibGUo
KSBjb25zdDsNCisNCisgICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RFWFRVUkVf
SUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFu
IGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBp
cyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuDQorDQorICBwcm90
ZWN0ZWQ6DQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQorICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAg
Ym9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQorDQorICAgIEdMaW50IGNy
ZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsNCisgICAg
R0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsNCisNCisgICAgdmlydHVh
bCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOw0KKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRleHR1cmUoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKSA9IDA7DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7DQor
DQorICAgIHN0YXRpYyBCbGl0ICpnZXRCbGl0dGVyKCk7DQorICAgIHN0YXRpYyBib29sIGNvcHlU
b1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7DQorDQorICAgIEdMZW51bSBtTWluRmlsdGVyOw0K
KyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsNCisgICAgR0xlbnVtIG1XcmFwUzsNCisgICAgR0xlbnVt
IG1XcmFwVDsNCisgICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOw0KKyAgICBHTGVudW0gbVVzYWdl
Ow0KKw0KKyAgICBib29sIG1EaXJ0eUltYWdlczsNCisNCisgICAgYm9vbCBtSW1tdXRhYmxlOw0K
Kw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOw0K
Kw0KKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KSA9IDA7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFnZTJEIDogcHVibGljIFRleHR1
cmVTdG9yYWdlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZTJE
KElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7DQorICAgIFRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsNCisNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOw0KKyAgICBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQorDQorICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBj
b25zdDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlU3RvcmFnZTJEKTsNCisNCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOw0KKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsNCit9Ow0KKw0KK2NsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNp
dCBUZXh0dXJlMkQoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmUyRCgpOw0KKw0KKyAgICB2
b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKyAgICB2b2lkIHJl
bGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisNCisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7DQorDQorICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQg
bGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
DQorICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAg
IEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBib29sIGlz
Q29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNEZXB0aChHTGludCBs
ZXZlbCkgY29uc3Q7DQorDQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldENvbXBy
ZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAg
ICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9p
ZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb3B5SW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsNCisgICAgdmlydHVhbCB2
b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOw0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsN
CisgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOw0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7DQorDQorICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByb3RlY3RlZDoNCisgICAgZnJpZW5k
IGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKyAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7DQorDQorICBwcml2
YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsNCisNCisgICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsN
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7DQorDQorICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lk
IHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7DQorICAgIHZvaWQgY29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOw0KKw0KKyAgICBJbWFnZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOw0KKw0KKyAgICBUZXh0dXJlU3RvcmFnZTJEICptVGV4U3RvcmFn
ZTsNCisgICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBp
bnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVm
ZXJlbmNlcywNCisgICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMg
cHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcNCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3
aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBj
b3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJl
bmRlcmJ1ZmZlci4NCisgICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsNCisgICAg
dW5zaWduZWQgaW50IG1Qcm94eVJlZnM7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIFRleHR1
cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2Fn
ZSwgaW50IHNpemUpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUN1YmVNYXAoKTsN
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNl
VGFyZ2V0LCBpbnQgbGV2ZWwpOw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7DQorDQorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsNCisNCisgIHByaXZhdGU6DQorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOw0KKw0KKyAgICBJ
RGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3MgVGV4dHVyZUN1YmVNYXAg
OiBwdWJsaWMgVGV4dHVyZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZUN1
YmVNYXAoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmVDdWJlTWFwKCk7DQorDQorICAgIHZv
aWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAgIHZvaWQgcmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdDsNCisgICAgDQorICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNpemVpIGdldEhlaWdodChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBi
b29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorDQor
ICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2
b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBz
ZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorDQorICAgIHZvaWQgc2V0
Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKw0KKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsNCisgICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2b2lkIHN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKTsN
CisNCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7DQorDQorICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAgdmlydHVhbCBSZW5kZXJi
dWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgc3RhdGljIHVu
c2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7DQorICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsNCisNCisg
IHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7
DQorDQorICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgp
IGNvbnN0Ow0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7DQorICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpOw0KKw0KKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7DQorICAg
IGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsNCisNCisgICAgdm9pZCBzZXRJbWFn
ZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOw0KKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5WzZdW0lNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAq
bVRleFN0b3JhZ2U7DQorDQorICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNv
dW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsDQorICAgIC8vIGJl
Y2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4g
YSBiaW5kaW5nIHBvaW50ZXINCisgICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdv
dWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nDQorICAgIC8v
IHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRl
ciB0byBiZSBzZXQgdG8gTlVMTCBpZg0KKyAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywg
YnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuDQorICAgIFJl
bmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOw0KKyAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJv
eHlSZWZzWzZdOw0KK307DQorfQ0KKw0KICNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hf
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAppbmRleCA5
NWJjM2ZiLi43MGY0NzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApAQCAtMTMsNiArMTMsNyBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3ZlcnRleGNvbnZlcnNp
b24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJl
cGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0CiAKICAg
ICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmYXR0cmlicyA9IG1Db250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJ1dGVzKCk7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7
IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQog
ICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dy
YW0tPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICAgICAgdHJh
bnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dyYW1CaW5hcnktPmdldFNlbWFu
dGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKICAgICB9CiAKICAgICAvLyBEZXRlcm1p
bmUgdGhlIHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNlZCBidWZmZXIsIGFuZCBpbnZhbGlk
YXRlIHN0YXRpYyBidWZmZXJzIHRoYXQgZG9uJ3QgY29udGFpbiBtYXRjaGluZyBhdHRyaWJ1dGVz
CkBAIC00NDgsOCArNDUwLDggQEAgc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNhc3Q8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDMKIHRlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNE
VlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0
eXBlPiB7IH07CiAKIC8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28gdGhh
dCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6
ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9G
SVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBE
M0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252
ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxv
YXQ8R0xpbnQsIDE2PiB7IH07CiAKIC8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBm
b3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1
bHRWYWx1ZXMgKGkuZS4gMC8xKQogLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcAppbmRleCBlZThlY2E5Li5mYmEyNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKQEAgLTU0LDI2ICs1NSwxMjEgQEAgYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQorLy8gVmVyaWZ5IHRo
YXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40
LgorYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
KQoreworICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xf
UkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAg
IGNhc2UgR0xfQUxQSEE6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisK
KyAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgIC8vIGludmFs
aWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04K
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdC
QToKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgor
ICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Cisg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GTE9BVDoK
KyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfUkdC
OgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
UkdCQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAg
ICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAg
ICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAg
c3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5D
SUxfT0VTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
ICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0sIGZhbHNlKTsKKyAgICB9Cit9Citib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChi
b29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgIGlmIChjb21w
cmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBp
ZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KCkpCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoY29tcHJlc3NlZCkK
ICAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+
Z2V0V2lkdGgoMCkpIHx8IAorICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9
IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAogICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAm
JiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CkBAIC04OSw2ICsx
ODUsNDMgQEAgYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wgY29tcHJlc3NlZCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAo
Y29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGgg
IT0gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKKyAgICAgICAgICAgIChoZWlnaHQg
JSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4
dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwKKyAgICAgICAgeW9mZnNldCArIGhlaWdo
dCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIC8vIGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBl
IHRoYXQgYXJlIHZhbGlkIGZvciBSZWFkUGl4ZWxzCiBib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUo
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7CkBAIC0xMDk0LDcgKzEyMjcsNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2ZmcwogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRh
dGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBs
ZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZl
bCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExMDIsNyArMTIzNSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJn
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xMjU4LDYgKzEzOTEsMTkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsZm9ybWEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
QEAgLTEzNTUsMjMgKzE1MDEsMzEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0wKICAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpOwogICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOwogICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxM
OworICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwogCiAgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgs
IGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleDJkKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFk
eSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleDJkLT5nZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleDJkOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgdGV4Y3ViZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXhj
dWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gdGV4Y3ViZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0xlbnVtIHRl
eHR1cmVGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0g
dGFibGUgMy45CiAgICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpCkBAIC0xNDE0LDYg
KzE1NjgsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0yMzA2LDE5ICsyNDYzLDIxIEBAIHZvaWQg
X19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKHRleC0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmUyRCAqPih0ZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgpAQCAtMjMyNiwxMSArMjQ4NSwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gdAogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAh
PSBHTF9URVhUVVJFX0NVQkVfTUFQKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJF
X01BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwgbGV2
ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CkBAIC0yNDQwLDI4ICsyNjA2LDQxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBt
YXAoR0xlbnVtIHRhcmdldCkKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KICAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4MmQtPmlzRGVwdGgoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+Z2VuZXJhdGVNaXBt
YXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlw
bWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI3NTksMTIgKzI5MzgsMTMgQEAgaW50IF9fc3RkY2FsbCBn
bEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJpYnV0ZUxvY2F0aW9uKG5h
bWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEF0dHJpYnV0ZUxvY2F0
aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
QEAgLTMyMTgsNyArMzM5OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWlu
dCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkgIT0g
TlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkFM
SURBVEVfU1RBVFVTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5p
c1ZhbGlkYXRlZCgpOwpAQCAtMzI0MSw2ICszNDIxLDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BST0dS
QU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMzc2
NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1m
dihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlv
biwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4MDAs
MTIgKzM5ODksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtZnYoR0x1aW50IHByb2dy
YW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpCiAKICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxv
Y2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEws
IHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NDAsMTcgKzQwMzUsMTgg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXoKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRp
b24sICZidWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5n
ZXRVbmlmb3JtaXYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC0zODc5LDE3ICs0MDc1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VW5p
Zm9ybWl2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcykKIAog
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzkzMCwxMiArNDEyNywxMyBAQCBpbnQg
X19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIqIG5hbWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1M
b2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlm
b3JtTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtNTAxMiw2ICs1MjEwLDI2IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9
CiAKKyAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9IQUxG
X0ZMT0FUX09FUzoKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlw
ZT4gY29tYmluYXRpb25zCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElO
VkFMSURfRU5VTQorICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0
aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAg
ICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgpAQCAtNTAyNCw3ICs1MjQyLDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FU
X09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CkBAIC01MDM2LDcgKzUy
NTQsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6CkBAIC01
MDQ5LDcgKzUyNjcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0JH
UkFfRVhUOgpAQCAtNTA1OCw3ICs1Mjc2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBm
b3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwpAQCAtNTA2Niw4ICs1Mjg0
LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VT
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYm9yZGVyICE9IDAp
CkBAIC01MTQ2LDYgKzUzODMsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRl
cHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKKyAgICAgICAgICAgICAgICAvLyBidXQgQU5H
TEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0g
TlVMTCB8fCBsZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NDE2LDYgKzU2NzAsMjUgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGYKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3Rl
eHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCisgICAgICAgICAgICAgICAgaWYg
KGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3NTcsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIWdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4
ZWxzID09IE5VTEwpCisgICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQs
IHR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KICAgICAgICAgfQogCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CkBAIC01
NTE3LDExICs1Nzg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZv
cm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4
dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJl
IGRvZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFs
aWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyArNTgxNSw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhl
aWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCisgICAgICAg
ICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQog
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU2MjIsNyArNTkxNCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2NjgsNyArNTk2NiwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTcxNCw3ICs2MDE4LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTc2MCw3ICs2MDcwLDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODA2LDcgKzYx
MjIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNp
dihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODUy
LDcgKzYxNzQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4OTgsNyArNjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU5MzgsNyArNjI3MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTk3OCw3ICs2MzE4LDEz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJh
bnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwNTQsNyAr
NjQwNiw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwcm9ncmFt
ICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAocHJv
Z3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTY0NjMsNiArNjgxNSw3OSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5T0VT
KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3JtYXQsIHZv
aWQgKmJpbmFyeSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYnVmU2l6
ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBiaW5hcnkg
PSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlG
b3JtYXQsIGJpbmFyeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklOQVJZX0FO
R0xFOworCisgICAgICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFy
eU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0gMHgleCwg
YmluYXJ5ID0gMHglMC44cCwgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5h
cnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1hdCAhPSBH
TF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJpbmFyeShO
VUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFBy
b2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24K
QEAgLTY0OTksNyArNjkyNCw4IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqCiAgICAgICAgIHsi
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAg
IHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1C
aW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFBy
b2dyYW1CaW5hcnlPRVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6
ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
dmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
dmNwcm9qCmluZGV4IDdkMmI2NDkuLjNiYzgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKQEAgLTQwMSw2ICs0
MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDkxLDYgKzQ5
NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAppbmRleCA3Y2EyZDlmLi43YmIy
MjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
dGh1dGlsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRo
dXRpbC5oCkBAIC03MCwyNiArNzAsNiBAQCBpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0
IHgpCiAgICAgfQogfQogCi1pbmxpbmUgUkVDVCB0cmFuc2Zvcm1QaXhlbFJlY3QoR0xpbnQgeCwg
R0xpbnQgeSwgR0xpbnQgdywgR0xpbnQgaCwgR0xpbnQgc3VyZmFjZUhlaWdodCkKLXsKLSAgICBS
RUNUIHJlY3QgPSB7eCwKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAtIHkgLSBoLAot
ICAgICAgICAgICAgICAgICB4ICsgdywKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAt
IHl9OwotICAgIHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgaW50IHRyYW5zZm9ybVBpeGVsWU9m
ZnNldChHTGludCB5b2Zmc2V0LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAg
IHJldHVybiBzdXJmYWNlSGVpZ2h0IC0geW9mZnNldCAtIGg7Ci19Ci0KLWlubGluZSBHTGVudW0g
YWRqdXN0V2luZGluZyhHTGVudW0gd2luZGluZykKLXsKLSAgICBBU1NFUlQod2luZGluZyA9PSBH
TF9DVyB8fCB3aW5kaW5nID09IEdMX0NDVyk7Ci0gICAgcmV0dXJuIHdpbmRpbmcgPT0gR0xfQ1cg
PyBHTF9DQ1cgOiBHTF9DVzsKLX0KLQogaW5saW5lIGJvb2wgc3VwcG9ydHNTU0UyKCkKIHsKICAg
ICBzdGF0aWMgYm9vbCBjaGVja2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXggNjU4OWViMS4uYTdjNjJk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9y
bWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQorewor
ICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9
PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0
ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENv
bXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBj
YXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMz
LDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQp
CiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBv
ZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3Jt
YXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVy
biAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1h
dChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkK
QEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxm
b3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NP
TVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAv
LyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFj
dFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FU
X09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAg
ICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBA
IC02MzgsOSArNjEyLDYgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVt
IGN1YmVGYWNlKQogewogICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVNQVBfRkFD
RV9QT1NJVElWRV9YOwogCi0gICAgLy8gTWFwIGEgY3ViZSBtYXAgdGV4dHVyZSB0YXJnZXQgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgIEQzRCBzdXJmYWNlIGluZGV4LiBOb3RlIHRoYXQgdGhlCi0gICAg
Ly8gWSBmYWNlcyBhcmUgc3dhcHBlZCBiZWNhdXNlIHRoZSBZIGNvb3JkaW5hdGUgdG8gdGhlIHRl
eHR1cmUgbG9va3VwIGludHJpbnNpYyBmdW5jdGlvbnMKLSAgICAvLyBhcmUgbmVnYXRlZCBpbiB0
aGUgcGl4ZWwgc2hhZGVyLgogICAgIHN3aXRjaCAoY3ViZUZhY2UpCiAgICAgewogICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CkBAIC02NTAsMTAgKzYyMSwxMCBAQCBE
M0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpCiAgICAgICAg
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X1BPU0lUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVf
WTsKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOwogICAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAg
ICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7CkBAIC03NjcsNiArNzM4LDcgQEAg
RDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAg
ICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAg
ICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2Fz
ZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9BOFI4RzhCODsKQEAgLTc5NCw2ICs3NjYsMTAgQEAgbmFtZXNwYWNlIGR4MmVzCiAK
IHVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKIHsK
KyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJl
dHVybiA4OworICAgIH0KICAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKICAgICB7CiAgICAgICBj
YXNlIEQzREZNVF9EMjRGUzg6CkBAIC05MDQsNiArODgwLDEwIEBAIHVuc2lnbmVkIGludCBHZXRC
bHVlU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCiAKIHVuc2lnbmVkIGludCBHZXREZXB0aFNp
emUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQogeworICAgIGlmIChkZXB0aEZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiAyNDsKKyAgICB9CiAgICAgc3dpdGNoIChk
ZXB0aEZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6ICByZXR1
cm4gMTY7CkBAIC05NjUsNiArOTQ1LDE2IEBAIGJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJc0RlcHRoVGV4
dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZh
Y2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3RlbmNpbFRleHR1cmVGb3Jt
YXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0
ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCkBAIC05OTEsNiArOTgxLDEwIEBAIEdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogCiBHTGVudW0gQ29udmVydERlcHRo
U3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
CisgICAgfQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0Qx
NjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGll
cy5oCmluZGV4IDg4MjM4ZGMuLmNmMjI0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5jbHVk
ZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCko
TUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05V
TEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVz
cGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6
ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCiBH
THNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1h
dCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0
KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZv
cm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIApAQCAt
NzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7
CiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwogYm9vbCBJ
c0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogYm9vbCBJc0Zsb2F0MTZG
b3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZUZvcm1h
dChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbFRleHR1cmVGb3JtYXQo
RDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlz
YW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggNmQzZGE3Zi4uMzhlMzJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIzMTMsNyAr
MjMxMywyMCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGlj
cy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RE
aXNjb250aW51aXR5LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCkBAIC0yMzIx
LDYgKzIzMzQsNyBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1l
ZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9p
bnRlcm1PdXQuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1UcmF2ZXJzZS5jcHAKQEAgLTIzMzMsMjIgKzIzNDcsNTIgQEAgSUYgKEVOQUJMRV9X
RUJHTCkKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNl
Q29uc3QuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUhlbHBlci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1ByYWdtYS5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5j
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9MZXhlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8u
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVu
Y3Rpb24uaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2Vh
cmNoU3ltYm9sLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE4ODQ4ODkuLjczOGE5
NzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yNyAgTWF4IFZ1am92aWMg
IDxtdnVqb3ZpY0BhZG9iZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEFOR0xFIGluIFdlYktpdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgdG8gcjExNzAuCisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogVGFyZ2V0LnByaToKKwogMjAxMi0wNi0yNyAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBFbGVtZW50OjplbGVtZW50UmFy
ZURhdGEoKSBhbmQgRWxlbWVudDo6ZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkgcHJpdmF0ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzVlYzJlYy4uMDg2NjEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01ODk4LDggKzU4OTgsMjEgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRV
bmlvbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3RSZWN1cnNpb24uY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGV0ZWN0UmVjdXJzaW9uLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXApAQCAtNTkxMiw2ICs1OTI1LDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZUdsb2JhbHMuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBcCkBAIC01OTM1LDYgKzU5NDksNyBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9QYXJzZUhlbHBlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmggXApAQCAtNTk0NCw2ICs1OTU5LDI5IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9sZW5ndGhfbGltaXRzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Mu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmMgXApAQCAtNTk1Nyw2ICs1OTk1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKQEAgLTU5
NjUsNiArNjAwNCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9yRVNTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuY3BwIFwKQEAgLTU5NzIsOCArNjAxNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNw
cCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2ly
Y3VpdC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCA3Yjk2Yjc2Li42NDBmOWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTYs
NyArMzk1NiwxMyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbW1vbi5oIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlYnVnLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIFwKQEAgLTM5NzEsMTEgKzM5NzcsMjQgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9NTWFwLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01hcExvbmdW
YXJpYWJsZU5hbWVzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL29z
aW5jbHVkZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9QcmFnbWEu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NvbXBpbGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBcCkBAIC0zOTkwLDE0ICs0
MDA5LDE3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
R0xTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
SExTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UeXBlcy5oIFwK
LSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCkBAIC00
MDEwLDEzICs0MDMyLDIxIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
dGFiLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5mb1Npbmsu
Y3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNw
cCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9JbnRl
cm1lZGlhdGUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9pbnRl
cm1PdXQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9JbnRlcm1U
cmF2ZXJzZS5jcHAgXApAQCAtNDAzNCwxMCArNDA2NCwxMiBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1No
YWRlckxhbmcuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1i
b2xUYWJsZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmNwcCBcCi0gICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJs
ZUluZm8uY3BwIFwKQEAgLTQwNDgsNiArNDA4MCwxNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyby5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBc
CisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="commit-queue"
          id="158010"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149894</attachid>
            <date>2012-06-28 00:28:00 -0700</date>
            <delta_ts>2012-06-28 11:15:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1715360</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLjhiNzM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDODE1OUMy
MUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNF
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
QTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
RDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Yy
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9OworCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAq
LzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1
MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJ
CUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
Ki87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlD
MjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIx
Q0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2
ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlB
MjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2
ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1
QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xT
TC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhF
NjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsK
QEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQy
QUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9
OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYgKzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZF
OTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2
MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25v
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3Rp
Y3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGlj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NEMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNz
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QyMTU5QzIx
Q0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENDE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENTE1OUMy
MUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDYxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDcxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U0
MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNzE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5k
ZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJGMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzUxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMw
MDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJB
TkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlGQjM5RDE4NjEy
MDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDE4
NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIsMTUgKzI0OSwxMSBAQAogCQlGQjM5RDFD
MDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQx
QzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyog
U3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0IxMjAwRjI2MjAwMDg4
RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gdGV4dC54bWw7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9qOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQzMTIw
MEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAogCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5m
b2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNo
YWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMzNiw2MiBAQAogCQkJcGF0aCA9IENvbmZp
Z3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI2NTY3QzUx
NTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi8s
CisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1
NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2
NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1
NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1
NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
Q0UxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2
N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
LAorCQkJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2
NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4
NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5
IC8qIFByZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBT
b3VyY2VMb2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bi5jcHAgKi8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJ
CQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2
NTY3RTgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBuZXc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMy
M0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0g
ZGVwZ3JhcGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1
OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2
ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAor
CQkJKTsKKwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlGQjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4
OEU2OSAvKiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlE
MTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2
MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIw
MEYyNjIwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2
MjAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkg
LyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVj
dERpc2NvbnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovLAogCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTMyNywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNo
SGFuZGxlLmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCAqLywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAq
LywKLQkJCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNw
cm9qICovLAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wu
dmNwcm9qICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLywKIAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAq
LywKIAkJCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5
RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFE
MzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3Qjgx
NTlDMjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWlu
Y2x1ZGVJbkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYg
QEAKIAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVC
RDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJE
MSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91
dHB1dEVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRF
U1NMLmggKi8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuaCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJ
CQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
ICovLAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAw
ODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmggKi8sCisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJ
CTQ5OTUxQzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJ
CTQ5OTUxQzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2
N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJF
MTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNB
RkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZF
ODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0Iw
MDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xz
bGFuZ190YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
X3RhYi5oICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8s
CiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlG
QjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBA
QAogCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywK
IAkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJ
CUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJ
CUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LywKIAkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oICovLAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovLAogCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywK
IAkJCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlG
QjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZC
MzlEMjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJ
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
CiAJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIz
ODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURD
QjAwMkQ0MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEw
MDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJF
QkQxIC8qIE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAv
KiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuY3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNM
LmggKi8sCisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCAqLywKKwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJ
CQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlG
QjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0
MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4
NTM5IC8qIFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVw
cm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5
MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5
QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYz
NUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWlu
ZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3Bw
ICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICov
LAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8s
CiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJ
CQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAw
RjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYw
MDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyog
dXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAw
ODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZC
MzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1
QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyog
Y29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMw
MDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0
QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAv
KiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAv
KiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vz
c29yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291
cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC01ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAw
MDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAw
RjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1Mzkg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMy
MUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmI2OTQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUzIEBACisyMDEyLTA2LTI3
ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAg
ICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5n
bGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBp
bGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6Cisg
ICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAo
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAg
IChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNo
KToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6
OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRp
ZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFk
aWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGlu
dWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6
OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgor
ICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNz
Ojp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGlj
cyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3Ip
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVy
OjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChU
RGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToK
KyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlv
clN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAg
ICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0
KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRl
eHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAg
ICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91
dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Omhl
YWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZp
c2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6
CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0
SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNp
emUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0
ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVu
c2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0
QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAg
KFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAg
ICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6
VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJl
bmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZh
cmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAg
ICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0
Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFy
eSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6Cisg
ICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6
OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6
CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3Bw
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9y
Q3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlv
bik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3Jh
cGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToK
KyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6
VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFy
ZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3Jh
cGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1
bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgor
ICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3lt
Ym9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24p
OgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAo
VEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVj
dGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAg
ICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBo
TG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRH
cmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAg
ICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVn
aW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVy
U3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6
OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJr
VmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3Rh
Y2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6Omdl
dFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNl
dFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1h
aW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAg
ICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWlu
ZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dp
Y2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5p
bmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAg
ICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToK
KyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGds
c2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5n
X3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAg
KFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFn
Z3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJ
bnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHBy
YWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNy
byk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25kaXRpb25hbERpcmVj
dGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxFT0QpOgorICAgICAg
ICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJlZGVmaW5lZCk6Cisg
ICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZp
bmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjps
ZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAgICAgICAocHA6OkRp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Up
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVBy
YWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgorICAgICAgICAocHA6
OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0
aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25J
Zik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAg
ICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBh
cnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFy
c2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6Oklu
cHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oOgorICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0
Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5w
dXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6Okxv
Y2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6TWFjcm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChwcCk6CisgICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpU
b2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6On5NYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgor
ICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05l
eHRUb2tlbkxlZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3Jv
KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6
OmNvbGxlY3RNYWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VN
YWNyb1BhcmFtcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5k
ZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
OjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRl
cjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFj
cm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4
dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJv
Y2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQp
OgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nl
c3Nvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRp
b246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHA6CisgICAgICAgIChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAg
ICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAg
IChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oOgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tl
bik6CisgICAgICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRv
a2VuOjpoYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNh
YmxlZCk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAg
ICAgICAoeXlfdHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9n
ZXRfcHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAg
IChpbnB1dCk6CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1
ZmZlcik6CisgICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVh
dGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5p
dF9idWZmZXIpOgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9i
dWZmZXJfc3RhdGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAg
IChwcF9zY2FuX3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5
X2ZhdGFsX2Vycm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xp
bmVubyk6CisgICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAg
ICAgICAocHBnZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRf
dGV4dCk6CisgICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgor
ICAgICAgICAocHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBw
c2V0X291dCk6CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6
CisgICAgICAgIChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAo
cHBnZXRfbGxvYyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQp
OgorICAgICAgICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMp
OgorICAgICAgICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgor
ICAgICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChw
cHJlYWxsb2MpOgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5p
emVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6c2V0RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVt
YmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5l
cik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENv
bnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5l
cmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJ
bnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6
CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbFVzYWdlKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OmJlZ2luRXJyb3IpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNT
YW1wbGluZ09wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgor
ICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVz
dHJpY3Rpb25zKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJv
cnMpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlz
cGxheS5oOgorICAgICAgICAoRGlzcGxheSk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcDoKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OmluaXRpYWxpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpz
d2FwUmVjdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3Vi
Y2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4pOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpzd2FwKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcik6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpZHRoKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
SGVpZ2h0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldFN3YXBJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
c2V0Qm91bmRUZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wv
bGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0Q2xlYXJEZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNDdWxsRmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxNb2Rl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEZXB0aFRlc3RF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJs
ZW5kKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRC
bGVuZENvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNl
dEZpbGwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Ft
cGxlQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclRlc3QpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGl0aGVyRW5hYmxl
ZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFZpZXdwb3J0UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1z
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QWN0aXZlU2Ft
cGxlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFj
dGl2ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrQWxpZ25t
ZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja1JldmVy
c2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVTaGFk
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZlbmNlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVR
dWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjplbmRRdWVy
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmVuY2UpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGbG9hdHYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzeW5jKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3TGluZUxvb3ApOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnJlY29yZEludmFsaWRFbnVtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24p
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldEVycm9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZXNldFN0
YXR1cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNFdmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzT2Nj
bHVzaW9uUXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVy
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2
ZWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmN1bGxTa2lwc0RyYXcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmlzVHJpYW5nbGVNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdFJlbmRl
cmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6On5GcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldE51bGxDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOgorICAgICAg
ICAoRnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChnbCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJp
bmRpbmdzKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRp
bmdzKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpJbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjp+SW5mb0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpJbmZvTG9nOjpnZXRMb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZFNh
bml0aXplZCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kKToKKyAgICAgICAgKGdsOjpJ
bmZvTG9nOjpyZXNldCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6flByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmF0dGFjaFNo
YWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCk6CisgICAgICAgIChnbDo6QXR0cmli
dXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rKToK
KyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRQ
cm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dmFsaWRhdGUpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1Byb2dyYW0uaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKEF0dHJpYnV0ZUJpbmRpbmdz
KToKKyAgICAgICAgKEluZm9Mb2cpOgorICAgICAgICAoUHJvZ3JhbSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAgICAgICAgKGdsOjpzdHIpOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToK
KyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFk
ZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1h
dHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0
cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAg
KGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdp
c3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAg
ICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAg
ICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJl
bGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVu
Y2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChn
bDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIp
OgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0
VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAg
IChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAg
ICAgICAoZ2w6OkltYWdlOjp+SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6aXNSZW5kZXJhYmxlRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OnNldE1hbmFnZWRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZEFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1p
bmFuY2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRl
RGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkUkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdl
Ojp+VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1
cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJp
YWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRNaW5GaWx0ZXIpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnNldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBUKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWluRmlsdGVy
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwVCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFn
ZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycyk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6aGFzRGlydHlJbWFnZXMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnJlc2V0RGlydHkpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aXNJ
bW11dGFibGUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRC
bGl0dGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJE
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVy
ZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWln
aHQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OnJlZGVmaW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJ
bWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omlz
RGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0
aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9z
Wik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmZhY2VJbmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVm
aW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2Vu
ZXJhdGVNaXBtYXBzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoSW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6
OkltYWdlOjptYXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEZvcm1h
dCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldFR5cGUpOgorICAgICAgICAoZ2w6OkltYWdlOjpp
c0RpcnR5KToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUpOgor
ICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAgICAg
ICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGds
OjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUp
OgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAg
IChnbDo6RXh0cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0cmFjdFR5cGUpOgorICAgICAg
ICAoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAg
ICAoZHgyZXM6OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQpOgorICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgyZXM6OklzU3RlbmNpbFRleHR1
cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisgICAgICAgIChnbCk6CisgICAg
ICAgIChkeDJlcyk6CisKIDIwMTItMDYtMjIgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJm
aWVsZEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTYW5pdGl6ZSBHTFNMIGNvZGUg
dXNpbmcgQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9n
bDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgsMTEgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8qIEdMX0FO
R0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Cisj
ZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRl
bnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIsMTEgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2Vu
ZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3By
b2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggYTNmYzkzNS4uOWE0
YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJz
aW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVu
dGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1Cisj
ZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2lu
ZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3
ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9T
UEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMg
PSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhl
IFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAg
Ly8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBE
aXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENT
UyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFn
Q29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQt
aW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0
KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVy
IHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVj
dGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlz
IG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8v
IEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBh
c3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25t
ZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9k
ZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVj
OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewog
ICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8v
IFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBk
cml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAg
U0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBh
biBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0
aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8g
dGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2Ug
dGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNw
ZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVT
VFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBl
bmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmlj
dGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVm
ZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVy
IHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRh
aW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5
cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAw
CiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQwOWI2MjIuLjU2NWRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyog
ZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJE
MjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgy
NSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdC
MzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRv
ckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjEx
MUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZF
IC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhD
IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9
OworCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9Owor
CQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEw
MDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9
OworCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMx
QTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4
cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIw
MTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tl
bi5jcHAgKi87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4Mzgx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMy
NEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi87IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUz
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICov
OyB9OworCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07
CisJCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAgKi87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsg
fTsKKwkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1
OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJl
bW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9s
cy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3
MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVC
RThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJj
ZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3
OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJs
ZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThE
Q0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVt
b3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAw
NzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRC
IC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CkBAIC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBR
dWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNs
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMx
M0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyog
RGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlh
Z25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMz
MUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9u
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyRjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBf
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVw
cm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9s
aW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0
UmVjdXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
cmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYw
MEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRl
Y3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5
QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2
ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlF
OTkwMiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRy
YW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1P
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEw
QkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMy
MUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xh
dG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2
MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hT
eW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KwkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5
M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZE
QSAvKiBjcHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0
LmMgKi8sCisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LywKIAkJCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMx
Mzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMx
QTAwMEU1N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBh
cnNlci5oICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmgg
Ki8sCiAJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0
MSwxNSArMzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRG
REI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENC
RURGMUM5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1
NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVC
NzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAx
N0M0NCAvKiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29t
cGlsZXIuY3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
KwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0
QjE1OUMzMjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJF
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0Mx
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAv
KiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGds
c2xhbmcuaCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXgu
Y3BwICovLAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAg
Ki8sCisJCQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJ
CQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0Iy
OTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3
QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAog
CQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJ
CQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEy
MDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywK
IAkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAotCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCiAJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8s
Ci0JCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2
MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdF
NUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJE
NDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFC
NTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEz
QjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBB
IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3Nv
dXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1
dEVTU0wuY3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NM
LmggKi8sCiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
LApAQCAtMjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyog
T3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0
cHV0SExTTC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhM
U0wuaCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAg
Ki8sCiAJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywK
IAkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlC
NjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAy
ODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0
RjAwRTU3QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAv
KiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlm
aWVyQWxpdmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJl
ZS5jcHAgKi8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAq
LywKKwkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywK
IAkJCQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJ
CQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2
NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAw
QTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVG
QUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAq
LywKIAkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
LAogCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAog
CQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBA
IC0yOTIsMjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5z
bGF0b3JITFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmgg
Ki8sCi0JCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8s
Ci0JCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJ
CUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAor
CQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywK
KwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIx
NUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFE
NTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzEx
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8q
IFZhcmlhYmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJz
aW9uR0xTTC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25H
TFNMLmggKi8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
LQkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50
ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
Ci0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJ
CUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5
OTAyIC8qIHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNv
bXBpbGVyOwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
CisJCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAor
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAor
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0
NCw2ICs0OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xh
dG9yX2NvbW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFu
c2xhdG9yX2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJh
bnNsYXRvcl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2Nv
bW1vbi5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJy
YXJ5LnN0YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJ
YnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFt
ZSA9IHByZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9o
bHNsIiAqLzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZl
cnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJ
CWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVu
LAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXBy
b2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3
IEBACiAJCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
LAogCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJ
CQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlB
MjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsK
IC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0
QjRCREU3QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRT
ZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8q
IFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBF
NTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OworCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4
NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4
QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0
ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdC
QkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5
QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
KwkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJ
CSk7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVk
ZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JC
RSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0Vc
IiIsCisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMg
PSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUg
PSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJ
CX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYg
KzkxMSwxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0Mw
MEU1N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
cHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBE
ZWJ1ZyAqLywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xh
dG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIuLjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBA
CiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmlu
ZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJ
TFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVy
c2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5k
ZXggMjAzYzQyMS4uYmRkMTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQog
I2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5l
IEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVm
aW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZ
KHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5h
bWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiBy
ZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9l
bXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5
WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4
KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4o
eVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQg
eCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFu
KHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNv
cyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00
MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2Vt
dSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsg
cmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5
WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0
dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJd
KSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVf
ZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAg
Y29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CiB9OwogCiBj
b25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsg
fSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2Vt
dV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVf
cHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkg
eyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmds
X2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIs
CiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIs
CisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgp
IC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3Rh
bmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2Uo
dmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0
LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+
PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0
aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVj
NCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAw
LjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAo
TikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2
ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywg
dmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQp
IgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJp
dmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1v
ZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAt
MTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBX
b3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAv
LyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRh
bjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExF
X18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVz
ZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIK
ICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRv
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Cisg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFf
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UK
KyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEw
ICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0g
ewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODks
NyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAg
ZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFf
MTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9u
RG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25S
ZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
CmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBA
IC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAg
ICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4x
XzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25B
dGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFu
M18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80
LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAv
LyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0
IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVu
Y3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRl
OgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAg
ICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAg
IFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBU
RnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0
aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1v
ZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGYyN2NiNzUuLmNhYjgwNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApAQCAtOCwxMCArOCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMg
c3BlYykKK3sKKyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNI
X0NTU19TSEFERVJTX1NQRUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1i
b2xUYWJsZSgKQEAgLTEyMyw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcg
YXMgd2VsbC4KLSAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKQorICAgIGlmIChp
c1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGgg
b2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3Mu
CkBAIC0xNjEsNiArMTcyLDEyIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIq
IGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAm
IFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNo
YWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NT
aGFkZXIocm9vdCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VS
X0lOREVYKSkKICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRl
Z2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBAIGJvb2wg
VENvbXBpbGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCiAgICAgfQogfQog
Cit2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sK
KyAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICBy
b290LT50cmF2ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2
YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwogICAgIHJldHVybiB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCiti
b29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCwgYm9vbCBvdXRwdXRHcmFwaCkKK3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9T
UEVDKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVz
dCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7
CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0
cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFn
bWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRH
cmFwaCkgeworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1Np
bmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFw
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgfQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2lu
ay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAg
IHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJl
dHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpj
b2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMjMyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBD
b250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBv
ZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChp
bXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlv
bnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsK
K30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUt
PmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAg
bUxvb3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BE
aXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdy
YWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFk
aWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAg
ICAgY2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGll
bnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmICht
R3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisK
KyAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAg
bmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0
dXJlQ3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2Fs
bGVkLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQg
dG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRP
cGVyYXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9k
ZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9k
ZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YmRhNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApAQCAtMCwwICsxLDUwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3
aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBm
dW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3Jh
ZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNU
RElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisK
K25hbWVzcGFjZSBzaAoreworLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEg
dmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51
aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJh
dmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJv
b2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51
aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rp
b25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlv
biA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBt
R3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24o
VEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJ
U0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVmOTNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VM
b2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdu
b3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBz
ZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
KyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJv
ciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4
KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUp
KTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIg
PDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQor
Cit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQzYTEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDM5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBD
T01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9z
dGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9z
dGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsK
KworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAg
IHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHRva2VuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisK
KyAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYg
bUluZm9TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhh
bmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjZhYjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlh
Z25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVx
dWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIgPT0g
a1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxl
KSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJu
IEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsK
KyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAg
IDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxl
cigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0wo
IlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1p
emUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wgcHJh
Z21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAgICAg
IC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFs
aWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BS
QUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnZh
bGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21h
IHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdv
ZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisgICAg
VEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlh
Z25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3Ii
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh
bm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3Ig
aXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJp
dHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
KyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAgICAg
Y2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0eSA9
IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbURp
YWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3ZvaWQg
VERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9u
KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAodmVy
c2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9
IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25v
c3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNp
b24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDNkZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJl
Y3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoK
KyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAor
ICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEo
KSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBt
UHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAg
IFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
SVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAppbmRleCBlOWJiYTRiLi42MDQwOTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RXh0ZW5zaW9uQmVoYXZpb3IuaApAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9FWFRFTlNJT05f
QkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURf
CiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVk
ZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAgICAgRUJoUmVx
dWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsyMSwxNyBAQCB0
eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJl
aGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAg
ICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICBy
ZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJldHVybiAid2Fy
biI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlzYWJsZSI7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2goYikKKyAgICB7
CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVC
aEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndh
cm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVm
YXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0cmluZywgVEJl
aGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9u
IG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2
aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNlOTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1w
bGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRz
KFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykK
IHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0
cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2Vz
KQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
IiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdC
dWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0
dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRp
YWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAg
IGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHJlc291cmNlcykpOwor
ICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291
cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKICAgICAvLwogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3Jk
IiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdD
b29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShF
YnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJh
Z0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250
RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsK
KworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBn
bF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAg
ICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZh
aWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19T
UEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAg
IDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcg
KzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJp
YWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjog
eworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9D
U1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBU
aGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0
YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQwY2Y1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRM
UyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NU
TFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgo
dGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sK
KyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJz
ZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0
aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExT
VmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBh
cnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250
ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYg
KGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVl
ZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQ
YXJzZUNvbnRleHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmluZGV4IDc2MGZkMDku
LmFhNTNiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApAQCAtMTMsNCArMTMsMTQgQEAg
Ym9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBUUGFyc2VDb250
ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVy
biBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5l
IEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0
cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4u
OTJjNDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5v
ZGUsCiAvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFu
IGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8g
aXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVn
YXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRl
cm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0
b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1O
b2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZVBhaXIgbm9kCiAgICAgLy8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYg
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAo
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7
CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9k
ZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5v
ZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAg
IH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihj
b25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCog
Y29uZCwgVEludGVybVR5cGVkKiB0cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgog
ICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9u
KGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAg
IG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
IG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0NDQsOSArMTQ0
NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24o
VEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1DCiAgICAgcmV0dXJuIGFkZENvbnN0YW50VW5p
b24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5n
ZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJh
eSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRU
b1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQotewotICAgIGFzc2VydCgh
cHJhZ21hVGFibGUpOwotICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOwotICAg
ICpwcmFnbWFUYWJsZSA9IHBUYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4
IDBjN2UxYTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyAr
MTUsOSBAQCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuY3BwCmluZGV4IDY5YjhjMjYuLmQ3ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIg
QEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAs
MTMgKzIyLDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hh
ciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwog
fQogCiBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAg
ICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBt
VW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlz
KTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0g
ZmFsc2U7CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNv
bnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1V
c2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxz
ZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQg
PSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAg
IG1TY29wZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBm
YWxzZTsKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRl
bGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgp
CiB7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250
aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2
ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQg
aGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1Cb2R5LmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRl
ci5jX3N0cigpOworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
CiB9CiAKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1
LDI1ICsyMTksMTEgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwg
IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVy
ZSBmZXRjaCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBh
bm90aGVyLiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBh
Y2NvcmRpbmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9t
IGxlZnQiLCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAg
ICAgIC8vIGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rp
b25zIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAg
ICAgICAgLy8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVu
Y3Rpb25zIGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSBzaW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+
IDEtWSwgd2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAv
LyBUaGUgdGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVz
ZSB0aGUgcHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwot
ICAgICAgICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1os
IHdoaWNoIGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gRm9yIGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBb
LTEsIDFdIC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3Ig
dGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndy
b25nIHNpZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFu
Z2luZyB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJv
dWdob3V0IHRoZSBjb2RlLgotICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQog
ICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MjMyLDcgKzIzMiw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBi
aWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
cHJvaihzLCBmbG9hdDQodC54LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikp
O1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgog
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQu
dykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtc
biIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAg
ICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
ICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQueiwgMSAtICh0LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQudywgMSAtICh0LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0
LngsIC10LnksIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkUocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlh
cyhzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBh
dmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNl
ZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
LCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2Qw
X2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVs
b2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBu
b2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC05NzMsOSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEp
CiAgICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAi
LCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Zl
Y3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7
IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIp
OyBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgogICAgICAgICBtVXNlc1hvciA9IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIiki
KTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMi
IDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApA
QCAtMTEzMSw5ICsxMjAxLDM2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotICAg
ICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIs
ICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5
KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BG
d2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAt
MTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0
aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZp
c2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDog
IigiKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWlu
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFp
bigiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigi
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZh
cmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
IAotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0g
c2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1
bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAg
ICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdl
dFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
YXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3Vt
ZW50U3RyaW5nKHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJn
dW1lbnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2Vx
dWVuY2UuYmVnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAg
ICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAg
ICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0Nywx
MDYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVu
bWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9
IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIg
OiAiKCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikK
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWxvZDApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2ooIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2pMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAg
ewpAQCAtMTU4MywxMSArMTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgaWYgKG5vZGUtPnVz
ZXNUZXJuYXJ5T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9s
ZFNlbGVjdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91dCA8PCAicyIgPDwg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CiAgICAgfQogICAg
IGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0
LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1VbmZvbGRTaG9ydENp
cmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAgICAgICBvdXQgPDwg
ImlmKCI7CiAKQEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKIAogICAgICAgICBp
ZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8PCAiO31cbiI7Cisg
ICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCiAgICAg
ICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgIG91
dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKIAogYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIGlmICghbUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBp
ZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAg
ICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiAK
ICAgICBvdXQgPDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAs
MTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCAqbm9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2
ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3Rh
dGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVy
c2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wg
T3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAg
LTE3NTksOSArMTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJ
bnRlcm1Ob2RlICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMg
d2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNw
bGl0dGluZyB0aGVtCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OwogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJv
b2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAv
IGluY3JlbWVudDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAg
ICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2ZSBs
b29wCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlh
bCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucyk7CisgICAgICAgICAgICAg
ICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhf
TE9PUF9JVEVSQVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAgICAgICAgICAgIC8vIGZvcihp
bnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQogCkBAIC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7
CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAgICAg
ICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IE1B
WF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9u
cyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlw
ZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAg
ICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRG
aWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZp
ZWxkLmdldEZpZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4
IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEz
NSw3ICsyMzA3LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlw
ZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEkKICAgICAgICAgewogICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5n
ZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAg
c3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVG
aWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAi
O1xuIjsKICAgICAgICAgfQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0
LDQgKzI2MDYsMTQgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3Qg
VFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKICAgICAKICAgICByZXR1cm4gZGVj
b3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNv
bnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
c3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAppbmRleCA4MjRiYzA3Li5lYTI4YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKQEAgLTE1LDcgKzE1LDcg
QEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRT
aG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgogewpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKIAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1l
bnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmlu
ZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9z
dFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgogICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5
cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVj
dCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENp
cmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFt
cwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29s
IG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0
MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1
bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZv
ciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgIGJvb2wgbUluc2lkZURp
c2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggNDMxZjhkMS4uNzliZGRlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xMCwzMyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRl
ICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMi
IHsKLWV4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVBy
ZXByb2Nlc3NvcigpOwotZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAq
bmFtZSwgaW50IHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtC
YXNlJiBzaW5rLAotICAgICAgICAgICAgICAgICAgICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291
cmNlTG9jIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4
dHJhSW5mbykKLXsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6
ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5r
LmxvY2F0aW9uKGxvYyk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCBy
ZWFzb24gPDwgIiAiIDw8IGV4dHJhSW5mbyA8PCAiXG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZp
bmVFeHRlbnNpb25NYWNyb3MoY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikK
LXsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwg
MSk7Ci0gICAgfQotfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmlu
ZywgaW50IHZlY1NpemUsIFRWCiB7CiAgICAgZmllbGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcu
c2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+
PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZp
ZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZl
Y3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVj
dG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VN
YXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNCiAg
ICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNvbXBTdHJpbmdb
MF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJp
bmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZp
ZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKICAgICAgICAg
aWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsK
QEAgLTE3MCw3ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRz
KGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycg
fHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICcz
JykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbG9jLAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJy
b3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAg
ICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZl
cnQgZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGlu
ZSwgIiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDEx
IEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKIHsKLSAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAgICAgICAgICJubyBv
cGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAgICAgIG9wLCBvcGVy
YW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMg
dGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAgICAgICAg
ICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJy
b3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
fQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9w
RXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCiAvLwogdm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcg
b3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhp
c3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKLSAg
ICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBh
Y2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCBy
aWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAg
ICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBy
aWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9y
KGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAK
IH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBU
UHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyArMjQyLDEz
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFBy
ZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5CiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2Fz
ZSBFYnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAg
ICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0
KSIsICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3Bl
Y2lmaWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJl
Y2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBw
cmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1
ZV0rKzsgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxl
IGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3Qg
aGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMDEsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAm
JiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzc5LDEwICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAvLwogICAg
IC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCiAgICAg
Ly8KLSAgICBpZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdl
KTsKKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAi
XCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29u
c3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
Y2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBu
b2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRv
a2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MzAsNyArNDE1
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29s
IGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2Nv
cGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFs
IHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwy
NiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRF
cnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5h
dEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywg
ImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
Z2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8i
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFk
ZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwg
IndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZl
ZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmds
XyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
Il93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYm
IGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRp
Zmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3Io
bGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29y
ZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQogCkBAIC01MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogICAgICAg
ICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXko
KSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxl
bWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJv
bSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0Fy
cmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0g
ICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2Fu
IG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihs
aW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkp
ICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhl
IG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4
SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6
ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CiAgICAgICAgICAgICAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkp
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZv
ciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAwOwog
ICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBh
cmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBl
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAo
b3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcgKzU3Miw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9k
ZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHVi
VHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
IGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAg
LTU5OSw3ICs1ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUAogYm9vbCBUUGFyc2VDb250
ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQog
ewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJy
YXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5
cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVs
c2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
IHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZQog
ewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRl
KSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmlu
ZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0
NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0g
RXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAgICAgICAgdHlwZS5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBh
cmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjkwLDE0ICs2Nzcs
MTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBU
SW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCiBib29sIFRQYXJzZUNvbnRl
eHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkK
IHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBh
cnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgs
NyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwogICAgIC8v
CiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNs
YXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBv
ZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2NywzNCArNzU0LDM0IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGlu
c2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBl
Y3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlz
QXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJh
eSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFy
aWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJy
YXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQg
PSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQg
IT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJh
eVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVl
IGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVz
ZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6
ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJv
bCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
bm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlw
ZSwgaW50IHNpemUsCiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYgKG5vZGUtPmdldFN5bWJv
bCgpID09ICJnbF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCogZnJhZ0RhdGEgPSBzeW1i
b2xUYWJsZS5maW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdEluKTsKLSAgICAgICAgaWYg
KGZyYWdEYXRhID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBkZWZpbmVkIiwgbGluZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZnJh
Z0RhdGEpOwogCiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKICAgICAg
ICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1
cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAg
dG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAg
ICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlw
ZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJs
ZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFs
aWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZp
ZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsK
ICAgICAgICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4
OTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxp
ZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJp
bmcocXVhbGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CkBAIC05MjQs
OCArOTA4LDkgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHAKIAogYm9vbCBUUGFyc2VDb250ZXh0
OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24p
CiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAg
aWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4
dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNp
b24pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09
IEVCaFdhcm4pIHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNp
b24gKyAiIGlzIGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAi
ZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRl
bnNpb24pCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hh
ciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0
ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25C
ZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9u
KTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0
aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUp
OworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxvYywgZXh0TmFtZSwgYmVo
YXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShp
bnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6
OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxl
LCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlUHJhZ21hKGxvYywgbmFt
ZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3MCwxMiArOTY5
LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGludCBs
aW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1CiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0
aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3lt
Ym9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUg
ZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHUKICAgICAvLwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAoKHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlm
aWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLwpAQCAt
MTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogCiAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxp
emVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7
CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3Qg
aW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBv
aW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFy
cmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90
IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTIz
OSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29u
c3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwg
IiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUt
PmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSog
dHlwZSwgaW50CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QsIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3Ry
dWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwg
cGFyYW1Db3VudCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUo
KS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIg
PDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIs
ICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwog
ICAgIH0KIApAQCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeQog
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2Vk
Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVu
Y3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFn
Z3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgot
ICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZl
Y3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHkKIAogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMu
b2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNb
aV0gPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIFQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAi
WyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOwor
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwg
aW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAt
MTM0NSw3ICsxMzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAgIGludCBz
aXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRy
aXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFMK
ICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXgg
Pj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRl
eCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICci
IDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0K
QEAgLTEzODAsNyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CiAg
ICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyArMTQzMiw3
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYg
aWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7
CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0
OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2Vk
IGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8g
c28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KICAgICBp
ZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVt
YmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxs
b3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3
IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRU
eXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykg
eworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBl
JiBmaWVsZFQKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0
aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1
Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVzdGlu
ZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBu
ZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkuY19z
dHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVuY2Ug
b2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIgPDwg
a1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4dHJh
SW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgyLDEw
NSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGlmICgoY291bnQgPT0gMCkg
fHwgKHN0cmluZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAvLyBzZXR1cCBw
cmVwcm9jZXNzb3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
KTsKLQogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAgIHJldHVy
biAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7
Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQgZXJyb3Ig
PSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpZiAo
IWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAKICAgICBn
bHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0g
ICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6
IDE7Ci19Ci0KLU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJz
ZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KLSAgICAvLwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIAotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNl
IENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgo
KQotewotICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
OwotCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFy
c2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19J
TkRFWDsKLQotICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKLX0KLQotYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFy
c2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0g
ICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAo
bHBUaHJlYWREYXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHBUaHJlYWREYXRhLT5scEds
b2JhbFBhcnNlQ29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
cmVlUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNv
bnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0KQotICAg
ICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0K
IAotVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAg
Ly8KLSAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAotICAgIC8vCiAKLSAg
ICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJl
YWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgp
KTsKLQotICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmgKaW5kZXggM2UwNTc2My4uOGRlZThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lm
bmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29s
OwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDog
b3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZv
bGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBl
ZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91
dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3Qg
Y2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRp
YXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAg
IGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAg
ICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwK
ICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBA
IHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUo
TlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAg
ICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAg
ICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlz
KSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAg
ICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAg
ICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1l
ZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5n
dWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBh
bmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxh
bmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIg
Y29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBA
IC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7
CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5l
cjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZv
U2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVh
c29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVj
dCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxp
ZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wg
ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVu
c2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAg
ICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0
KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVj
Ci17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQ
YXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKaW5k
ZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNr
R3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNv
CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0
J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAg
ICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUg
YWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBz
aXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRp
b24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgp
KTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFt
YWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJp
bnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAl
enUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1Rl
eHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29s
QWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmNzQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitz
dHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVk
IG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRy
dWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRp
bWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVi
dWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAt
MCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKyNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQorICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBUU3RyaW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdG
dW5jdGlvbk5hbWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAppbmRl
eCA5MWM0N2U3Li4yNjUyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVN
YXA7CiBjbGFzcyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBX
ZWJHTCBzcGVjLAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3
LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0
UmVjdXJzaW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidz
IGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAg
ICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQog
ICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBB
LgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03
OSw2ICs4OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhU
SW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFp
bSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3Ry
aWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wg
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9w
ZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAg
Ym9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVu
ZGVuY3lHcmFwaCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGgg
ZGVmYXVsdCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCAxM2YxMWI1Li41NmY1YzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCkBAIC03MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hh
ZGVySW5mbyB2YXJUeXBlLAogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoID0g
MSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYk1heExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKSk7
CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYkxlbmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoIC0g
MV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0
IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVO
R1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5h
bWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAgICAgIHN0cm5j
cHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVM
ZW5ndGgpOworICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcAppbmRleCBlZGJlYTk5Li42OGYwMjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKQEAg
LTE2LDkgKzE2LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEg
cGxhY2UgdG8gbGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgVFR5cGU6OmJ1aWxkTWFu
Z2xlZE5hbWUoVFN0cmluZyYgbWFuZ2xlZE5hbWUpCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkg
ewogICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJh
eVNpemUpOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNp
emUpOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9
IGJ1ZjsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKaW5kZXggOTZk
N2YxMC4uZjQxZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAK
IFRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAppbmRleCA3NjdkMGJmLi5kNjllYzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAppbmRleCA5NjQyZTFlLi41Mzc3
OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVi
dWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNl
QnVmZmVyTGVuID0gMTAyNDsKQEAgLTI4LDcgKzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFy
ICpmb3JtYXQsIC4uLikgewogICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4s
IGZvcm1hdCwgYXJncyk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNv
bnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFj
ZShidWYpOwogICAgIH0KIH0KIH0gIC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBU
R3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50
OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3Mg
VEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxP
cDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0
OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5
cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9y
OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisv
LworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9k
ZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRo
YXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1Ymxp
YyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2Rl
KiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnRO
b2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBp
ZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9Owor
CisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFw
aEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxs
KQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1B
cmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1l
bnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNz
IFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQor
ICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFn
Z3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdy
YXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2wo
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3Bl
cmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2Vs
ZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJt
U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2Rl
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBh
bmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRH
cmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAg
ICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFu
ZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMg
VEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2
aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdl
dEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5
Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBp
bnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8v
CisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9u
ZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFu
ZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgor
Ly8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3Jl
YXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0
YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAg
VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRl
bmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9
CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5
bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdp
bigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
U2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3lt
Ym9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1l
bnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1i
ZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNy
ZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVj
dGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7
CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7Cisg
ICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJt
TG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAg
IFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZl
Y3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9s
SWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
IFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBz
cGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1l
dGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBm
b3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVw
dGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5
bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQq
IHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFw
aEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
ZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXRE
ZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgo
KSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0K
KworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9p
ZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsg
fQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1W
aXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50
IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsK
KyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
QWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFn
Z3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5j
dGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0
QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7Cisg
ICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25z
LgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAg
ICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7
Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2Fs
bCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5j
dGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1l
bnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBp
bnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVu
dHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAg
ICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJn
dW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1l
bnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
YXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVu
ZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVu
dCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3Vs
dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtl
ICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4
IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBl
YXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRo
ZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVn
YXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUt
PmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikK
KyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
Cit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5
bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhh
dCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+
Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQg
bGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3Vz
CisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVm
dG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0
U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVm
dG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRl
cm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOwor
ICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0
ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlm
IChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlz
aXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5
Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGlu
dGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJt
TGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0
bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhl
IGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEg
cmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5
bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1v
c3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJ
bnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7
CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCog
YXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5
bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMg
YXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwor
ICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBB
biBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBh
c3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGlu
IHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdu
bWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNy
ZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1Rv
cFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkp
IHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7
CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRl
TG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+
Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVm
dCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAg
ICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRo
aXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAg
IGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRD
b25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRU
b3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3Jh
cGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9
IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9j
ay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxv
Y2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFs
c2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9u
ID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxv
b3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29w
LT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
aWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJl
c3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9
ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAg
ICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYyMzJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRl
cGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRj
LiBieSB0cmF2ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNr
PFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFw
aFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxl
Y3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRj
LgorICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8v
CisgICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBj
b250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNz
IFROb2RlU2V0U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9
OworICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0
dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNl
dCogZ2V0VG9wU2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2Rl
U2V0cy50b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0
IDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMu
cHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250
ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJl
bG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZv
aWQgcG9wU2V0SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVT
ZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAg
IGlmICghbm9kZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0
KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQt
Pmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRo
aXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0
aW5nCisgICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5
bWJvbHMuCisgICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBu
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQo
bm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNl
dCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3Rh
Y2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJl
bnROb2RlU2V0U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0
ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBw
b3BzIHRoZSBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7
CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRz
KSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNl
dHMucG9wU2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBw
dXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUg
aW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQg
YW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisg
ICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNl
dHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWlu
dGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdo
aWxlIHdlJ3JlIGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2ls
bCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlh
dGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVy
IGEgcmlnaHQgc3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3
aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAg
IC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJl
cGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0
cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFy
ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFz
cyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRH
cmFwaFN5bWJvbCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3Rv
cnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMu
dG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBt
UmlnaHRTdWJ0cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQg
YnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhp
cyk7IH0KKworICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVu
dE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlz
aXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSop
OworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVu
Y3Rpb25DYWxsKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3Jl
Z2F0ZSopOworCisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1i
b2wgbVJpZ2h0U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBU
Tm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9s
czsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9C
VUlMREVSX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJn
dW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9m
IGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxs
KCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQorewor
ICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8
PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJc
biI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6
ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIp
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIg
PDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBn
cmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQo
KTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Cisg
ICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxu
IjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAxNDQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhz
aW5rKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJv
bCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9u
Q2FsbCogZnVuY3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExv
Z2ljYWxPcCogbG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50
YXRpb24oKTsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cApAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0
aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rl
cy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhp
cyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7
CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRH
cmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4o
KTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBp
ZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50
cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRl
Y3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVy
c2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBn
cmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRy
YXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBo
VHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAppbmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFy
c2VDb250ZXh0OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAg
ICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFu
Z19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYjlhMzAyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdf
bGV4LmNwcCkuCiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiAr
MzgsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNw
cCkuCiAlewogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIu
aCIKIApAQCAtMTU5LDYgKzE2MCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03
XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
Zml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNp
Z25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBA
QCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10K
IAogMFt4WF17SH0rICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9
KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
KzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9j
dGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtE
fSsgICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyBy
ZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQog
CisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXBy
b2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZp
bmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwK
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwK
ICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5z
Y2FubmVyOwpAQCAtMjcyLDI2ICsyODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJl
cigpCiB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5z
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0s
ICJvcHRpbWl6ZSIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
IihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXpl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwi
IGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
M10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQg
dG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAg
ICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVi
dWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVn
JyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29u
dGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJh
Z21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAg
ICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8v
IEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24g
Y2Fubm90IHJlY29nbml6ZQotICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxl
bWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8v
ICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21h
IG5hbWUgaW4gcHJhZ21hVGFibGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51
bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5z
WzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJh
Z21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAg
ICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAg
ICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAg
ICAgfSAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAg
ICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRT
dHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBd
ID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01B
X1RBQkxFCi0gICAgfQorCisgICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYg
KHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9r
ZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURp
cmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3Jl
U3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSAr
MzkzLDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1z
ZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3Ip
Ci17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVy
biBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkK
LSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxl
IiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICgh
c3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBi
ZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVo
YXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2
aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBp
dGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFs
bCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAg
aWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxl
KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+
ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhh
dmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2
aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWly
ZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAg
IGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAg
ICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBz
dXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5o
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0K
IH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNh
bid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOwotCi0gICAg
YnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGludCBsZW4gPSAwOworCisj
aWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxl
biA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUo
KTsKKyAgICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNw
eShidWYsIHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlz
Y2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2Vu
ZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwor
ICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0
dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01
NDQsOSArNDUwLDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9G
IiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBl
Y3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAt
NTY1LDIyICs0NzEsNDMgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwogICAgIAogICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworI2VuZGlmCisgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNj
YW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQt
PnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
SW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vz
c29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxz
ZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNw
cC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0g
ICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChj
cHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBt
YWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAh
PSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9D
RVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXIt
PmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IGQ2Yzg4NjkuLmFiNGFhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3Io
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJB
R19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBU
VmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRp
ZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhw
cmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAg
ICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93Iiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBj
b25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgo
KSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xO
b2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJh
eSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAt
MjU0LDcgKzI1NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKICAgICAgICAg
ICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAk
My0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25z
dCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3LDcgKzI3MCwxMCBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJh
cnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5s
aW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3Bl
cmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMu
d2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpA
QCAtMzczLDcgKzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDAp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MTEsMTMg
QEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlw
ZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2gg
ZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTAwLDkg
KzUwNiwxMCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigk
MS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVk
Kj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTUyNiw3ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZx
SW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fu
bm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTUxLDcgKzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90
IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJt
ZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1NCw3IEBAIGZ1bmN0aW9u
X2lkZW50aWZpZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0
cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7CkBAIC0xMDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICBU
RnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1i
b2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVj
KSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNjAsNyAr
MTA2Nyw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFu
IGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xMDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJz
CiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIg
TEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQx
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxl
ciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsxMTAyLDcgQEAgcGFyYW1l
dGVyX2RlY2xhcmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDogdHlwZV9zcGVjaWZpZXIg
SURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQpAQCAtMTE5
MSw3ICsxMTk4LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8IGluaXRfZGVjbGFyYXRv
cl9saXN0IENPTU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVi
dEludmFyaWFudCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgfQog
ICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5
IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9u
cyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKTsK
QEAgLTEzNjQsNyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAkJC50eXBl
LnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDIubGluZSk7
CiAgICAgICAgIGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMTQz
OCw3ICsxNDQ1LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3Ry
aW5nLCAkMSk7CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCok
JC52YXJpYWJsZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJl
ZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFi
bGUtPmdldE5hbWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhl
IHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQpAQCAtMTQ1MCwyNiAr
MTQ1NywyNiBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAg
ICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlw
ZV9zcGVjaWZpZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5
cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gJDI7CkBAIC0xNjU0
LDcgKzE2NjEsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBM
RVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lv
bigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VT
IiwgJDEubGluZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogICAgIH0KICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJE
UmVjdCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIs
ICQxLmxpbmUpOwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVzdF9zdGF0ZW1lbnQKIGp1
bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIi
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3Rh
dGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJSRUFLIFNF
TUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CkBAIC0x
OTgxLDcgKzE5ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTk2LDEwIEBAIGp1
bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1
cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0
aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5j
dGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDQ0LDcgQEAg
ZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3ICsyMDU0
LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA4Niw3IEBAIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMg
d2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0
aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9
CkBAIC0yMTE2LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAKICAgICAgICAgLy8g
c3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBv
dGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3Jt
YXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6
ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250
ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJh
Z21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6
ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFn
bWEoKS5kZWJ1Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRBc0FnZ3JlZ2F0ZSgpKQog
ICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoJDMtPmdldEFzQWdn
cmVnYXRlKCktPmdldEVuZExpbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRleCA1OWI3Mjk5Li5kMjlkOTM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4IEBAIHN0YXRpYyB2b2lkIHl5X2Zh
dGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCSp5
eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9O
VU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05V
TV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0
IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVj
ZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0
cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMy
X3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQy
Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0
NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwg
IDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDEx
OSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAg
MywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwg
IDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEw
MSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwg
IDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDEx
MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIy
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAw
LCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAg
OTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcs
ICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAg
MTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAg
ICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwg
ICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0
MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAg
ICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5
MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAg
ICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAx
NDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMs
ICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisg
ICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjks
ICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAx
MTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcs
ICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAg
IDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAg
ICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAg
IDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDEx
MiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAg
IDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAg
IDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAg
IDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAg
MzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAs
ICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAg
NDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgs
ICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQs
ICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAg
OTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAg
ICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwg
ICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4
OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAg
IDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcs
CiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAs
ICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAg
MjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAg
MzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYs
ICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0K
LSAgICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1
MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1Nywg
ICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2
NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwg
ICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAy
NywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwg
ICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAg
ICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwg
ICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0
MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMy
LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAg
IDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0
LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
CisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAot
ICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMx
LCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAg
IDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3
LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAg
MTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcy
LCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAg
NjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAg
ICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAg
MjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4
LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAg
NTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1
NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIs
ICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAy
NDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAg
ICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1
MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2Mjgs
ICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAg
IDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgs
ICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1
MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMs
ICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0
ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUs
Ci0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwg
IDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3
OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2Niwg
IDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5
MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwg
ICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4
MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywK
LSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0
NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwg
IDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQz
NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywg
IDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1
LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAot
ICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEy
LCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAg
ICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAw
LCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAg
ICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAg
ICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAg
ICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAg
ICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1
LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAy
MDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgs
ICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAg
MCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAg
IDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEz
MSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0Nywg
IDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1
NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3Nywg
IDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4
MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwg
ICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4
MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwK
KyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4
MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwg
IDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAg
NjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1
LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAg
NTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4
LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAor
ICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgx
LCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAg
ICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYw
LCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAg
NTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3
LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAg
NTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisg
ICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAs
ICA1MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAy
NjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgs
ICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1
MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAs
ICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0
OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAg
ICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0
ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAs
ICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwg
ICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2
NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwg
IDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAg
MCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwg
IDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAg
MCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywg
IDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQy
NSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwK
KyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQw
NywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzky
LCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAg
MzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAw
LCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAor
ICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQy
LCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAg
NDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMw
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0
MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwg
ICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKwor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAg
NDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
Njk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsg
ICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMw
LAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAg
IDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYy
LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAg
IDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0
LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAor
ICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5
LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAg
IDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisg
ICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAg
OTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAg
ODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgs
ICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAx
NDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEw
NCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwg
IDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQy
MSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAg
IDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4
NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwg
ICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1
MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwg
IDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3
OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwg
IDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4
MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwK
LQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAg
Mjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAg
MjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAg
IDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1
LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAot
ICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0
MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIs
ICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0g
ICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcs
ICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAz
NjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAz
NDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAg
ICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAz
MjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUs
ICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwg
IDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4
NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3Mywg
IDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2
NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAg
IDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0
MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwg
IDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwg
IDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4Miwg
IDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAg
MTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAg
MTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1
LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwK
KyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5Niwg
ICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEy
MywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwg
IDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKwor
ICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1
LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAg
MTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIw
LCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAg
MTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0
LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAg
MTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5
LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAg
MTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4
LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAs
ICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0
NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQs
ICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQs
ICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAs
ICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAy
MjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcs
CisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMy
MSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwg
IDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQy
NiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwK
KyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQx
OCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwg
IDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwg
IDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3
OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAor
ICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUz
LCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAg
MzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2
LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAg
Mjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAg
ICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAg
MjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0
LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAg
MjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAy
MjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAg
ICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIs
ICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAx
NzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMs
ICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAx
MjIsICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
CisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4
ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAg
ICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAg
IDEyLCAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAot
ICAgICAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIw
LCAgIDMzLAotICAgICAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLCAg
IDQyLCAgIDEzLCAgIDM1LAotICAgICAgMTQ1LCAgIDM1LCAgMTQ1LCAgIDMzLCAgIDQyLCAgIDM1
LCAgIDIxLCAgIDIyLCAgIDQxLCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAg
IDIyLCAgIDIzLCAgIDQxLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDI2LCAgIDIyLCAgIDM2LCAgIDQ0LCAgIDQxLCAgNDMwLCAgIDIyLAotICAgICAgIDQ0LCAg
NDIzLCAgIDIzLCAgNDIyLCAgIDQ1LCAgIDM2LCAgIDU1LCAgIDIyLCAgIDM2LCAgIDI2LAotCi0g
ICAgICAgMzcsICAgMjYsICAgMjYsICAgMzksICAgMzcsICAgMjMsICAgMzgsICAgNDUsICAgMzgs
ICAgMzcsCi0gICAgICAgNDcsICAgMzksICAgNDksICAgMzksICAgMjIsICAgMzcsICAgMzksICAg
MzgsICA0MjEsICAgNDksCi0gICAgICAgNDksICA0MjAsICAgMzksICAgNTAsICA0MTksICAgNDcs
ICAgNTAsICAgNTEsICAgNDcsICAgNDksCi0gICAgICAxMzUsICAgNTEsICAgNDksICAgNTIsICAg
NTAsICAxMjAsICAgNTUsICAgNTIsICAxMjAsICAxMjAsCi0gICAgICA0MTcsICAgNTAsICAxMjAs
ICA0MTYsICAxMjAsICAxMzUsICAgNTIsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAg
NzQsICAgNzQsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAxNjcsCi0gICAg
ICAxNjcsICA0MTUsICAgNzQsICAxOTIsICAxOTIsICAxOTIsICA0MTMsICAgNzksICAgNzgsICAg
NzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzQsICAyMTUsICAyMTUs
ICAyMTUsICA0MTIsCi0gICAgICA0MTEsICAgNzgsICA0MTAsICAgODAsICAgNzksICAgODAsICAg
ODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAxMjIsICAyMjYsICAyMjYsICAyMjYs
ICA0MDksICAgODEsICAgNzksICAgODEsICAxMjIsCi0KLSAgICAgICA4MCwgICA4MSwgICA4MSwg
ICA4MSwgICA4MSwgICA4MSwgICA4MSwgIDIzNCwgIDIzNCwgIDIzNCwKLSAgICAgIDQwOCwgIDQw
NywgICA4MywgICA4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
IDE0MSwgIDI0MSwgIDI0MSwgIDI0MSwgIDM5OCwgIDE1MSwgIDM5NywgIDE1MSwgIDE0MSwgICA4
MywKLSAgICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MywgIDI0NSwgIDI0NSwgIDI0NSwgIDM5
NiwgIDE1NCwgIDM5NSwgIDE1NCwKLSAgICAgIDM5MywgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NSwgIDE1NSwKLSAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1MywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDIxMSwg
IDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDM5MiwgIDIxMSwKLSAgICAgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwK
LSAgICAgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDI1
MSwgIDI1MSwKLQotICAgICAgMjUxLCAgMzgxLCAgMzkxLCAgMzg4LCAgMzg3LCAgMzg1LCAgMzgy
LCAgMzgwLCAgMzc5LCAgMzc4LAotICAgICAgMzc2LCAgMzc1LCAgMzgxLCAgMzc0LCAgMzgxLCAg
NDI2LCAgNDI2LCAgNDI2LCAgNDI2LCAgNDI3LAotICAgICAgNDI3LCAgNDI4LCAgNDI4LCAgNDI5
LCAgMzcxLCAgNDI5LCAgNDI5LCAgMzcwLCAgMzY5LCAgMzY4LAotICAgICAgMzY3LCAgMzY2LCAg
MzY1LCAgMzY0LCAgMzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLAotICAgICAgMzQ5
LCAgMzQ3LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LAot
ICAgICAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1
LCAgMzI0LAotICAgICAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAg
MzExLCAgMzAwLCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0
LCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LAotICAgICAgMjc1LCAgMjc0LCAgMjcxLCAgMjcwLCAg
MjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LAotICAgICAgMjYzLCAgMjYyLCAgMjYx
LCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LAotCi0gICAgICAyNDcs
ICAyNDYsICAyNDQsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzMsICAyMzIsICAyMzEsCi0g
ICAgICAyMzAsICAyMjksICAyMjgsICAyMjUsICAyMjMsICAyMTgsICAyMTcsICAyMTYsICAyMTQs
ICAyMTMsCi0gICAgICAyMTIsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAy
MDQsICAyMDMsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYs
ICAxOTUsICAxOTQsICAxOTMsICAxOTEsCi0gICAgICAxOTAsICAxODksICAxODgsICAxODcsICAx
ODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsCi0gICAgICAxODAsICAxNzksICAxNzcs
ICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsCi0gICAgICAxNjksICAx
NjgsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsCi0gICAg
ICAxNDMsICAxNDIsICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAx
MzIsCi0gICAgICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQs
ICAxMjMsICAxMjEsCi0gICAgICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAx
MTIsICAxMTEsICAxMTAsICAxMDksCi0KLSAgICAgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEw
NCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OSwKLSAgICAgICA5OCwgICA5NywgICA5Niwg
ICA5NSwgICA5MSwgICA4NywgICA2MCwgICA1MywgICA0OCwgICA0NiwKLSAgICAgICA0MywgICA0
MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgIDUsICAgIDUsICAgMTMsICAgMTcsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMzMsICAg
NDIsICAgMjEsICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsCisgICAgICAgNDIsICAgMTMs
ICAgMzUsICA0NjMsICAgMzUsICAgNDQsICAgMzMsICAgNDIsICAgMzUsICAgNDQsCisgICAgICAg
MjEsICAgMjIsICA0NTUsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIs
CisgICAgICAgMjMsICAgNTUsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjIsCisgICAgICAgMjYsICAgMzYsICAgNTEsICA0NTQsICAgMjIsICAgMzgsICAgNTEs
ICAgMzgsICAgMjMsICAgMzcsCisKKyAgICAgIDQ1MywgICAzNiwgICAyMiwgICAzNywgICAzNiwg
ICAzOSwgICAzOCwgICAyNiwgICAzNywgICAyNiwKKyAgICAgICAyNiwgICAyMywgICA0MSwgICAz
OSwgICAzNywgICAzOSwgICA0NSwgICA0NywgICAzOSwgICAyMiwKKyAgICAgICA0MSwgICA1NSwg
IDEzNSwgIDE0NiwgICAzOSwgIDE0NiwgICA0OSwgICA1MCwgIDExMiwgICA0NSwKKyAgICAgICA1
MCwgICA0MSwgICA0NywgICA0OSwgICA0OSwgICA0NywgICA1MiwgIDEzNSwgICA1MCwgIDEyMiwK
KyAgICAgICA1MiwgIDExMiwgIDQ1MiwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIDEyMiwgIDQ1
MSwgICA1MiwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3OCwgICA3OCwgICA3OCwKKyAgICAgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDQ1MCwgIDEy
MCwgICA3NCwgIDE0MiwgIDEyMCwgIDEyMCwKKyAgICAgIDE2OCwgIDE2OCwgIDEyMCwgICA3OCwg
IDEyMCwgIDE0MiwgIDE5NCwgIDE5NCwgIDE5NCwgICA3NCwKKyAgICAgIDIxOCwgIDIxOCwgIDIx
OCwgIDQxNywgIDQxNywgICA3OSwgICA3OCwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA4MCwgIDQ0OCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKwor
ICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDc5LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAorICAgICAgMTU2LCAgNDQ2LCAgIDgwLCAgIDgxLCAgNDQ1LCAgIDgxLCAgIDc5LCAg
NDQ0LCAgIDgxLCAgIDgxLAorICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgw
LCAgIDgzLCAgMjE0LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgMjE0LCAgMjI5LCAgMjI5LCAgMjI5LCAgNDQzLAorICAgICAgMTUyLCAgNDQyLCAgMTUy
LCAgNDQwLCAgIDgzLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAg
MTUyLCAgMjM3LCAgMjM3LCAgMjM3LCAgNDM5LCAgNDM4LCAgIDgzLCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgNDM3LCAg
NDM2LAorICAgICAgMTU1LCAgNDM1LCAgMTU1LCAgNDM0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1
LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTU1LCAgMjQ5LCAgMjQ5LCAgMjQ5LCAgNDMzLCAg
NDMyLCAgMTU0LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorCisgICAgICAyMjIsICAyMjIsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjQsCisgICAgICAyMjQsICAy
MjQsICAyMjQsICAyMjQsICAyMjQsICAyMjQsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAg
ICAyMjUsICAyMjUsICAyMjUsICAyNTUsICAyNTUsICAyNTUsICAzODgsICAzODgsICAzODgsICA0
MzAsCisgICAgICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsICA0MjIs
ICA0MjEsICAzODgsCisgICAgICA0MjAsICAzODgsICA0NTksICA0NTksICA0NTksICA0NTksICA0
NjAsICA0NjAsICA0NjEsICA0NjEsCisgICAgICA0NjIsICA0MTksICA0NjIsICA0NjIsICA0MTgs
ICA0MTYsICA0MDcsICA0MDYsICA0MDUsICA0MDQsCisgICAgICA0MDMsICA0MDIsICA0MDAsICAz
OTksICAzOTgsICAzOTUsICAzOTQsICAzOTIsICAzODksICAzODcsCisgICAgICAzODYsICAzODUs
ICAzODMsICAzODIsICAzODEsICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCisgICAgICAz
NzMsICAzNzIsICAzNzEsICAzNjUsICAzNjIsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
CisgICAgICAzNTMsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDYsICAzNDUsICAzNDMsICAz
NDEsICAzNDAsCisKKyAgICAgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMz
MiwgIDMzMSwgIDMzMCwgIDMyOSwKKyAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwg
IDMyMCwgIDMxOSwgIDMxNiwgIDMwNSwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5
MSwgIDI5MCwgIDI4OSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3OSwg
IDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwKKyAgICAgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI1NCwgIDI1MywK
KyAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OCwgIDI0NCwgIDI0MiwgIDI0MSwgIDI0MCwgIDIz
NiwgIDIzNSwKKyAgICAgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNiwgIDIyMSwg
IDIyMCwgIDIxOSwgIDIxNywKKyAgICAgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwgIDIxMSwgIDIx
MCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwKKyAgICAgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwg
IDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5MywgIDE5
MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwKKworICAgICAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAor
ICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLAorICAgICAgMTYyLCAgMTQ3LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTQxLCAgMTQwLCAg
MTM5LCAgMTM4LCAgMTM3LAorICAgICAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMxLCAgMTMw
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LAorICAgICAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAg
MTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLAorICAgICAgMTExLCAgMTEwLCAgMTA5
LCAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLAorICAgICAgMTAxLCAg
MTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLAorICAg
ICAgIDUzLCAgIDQ4LCAgIDQ2LCAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgK
ICAgICB9IDsKIAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzE0OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsxNTZdID0KICAgICB7ICAgMCwKIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYwLDcgKzc4MSw3IEBAIHN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAg
IH07CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwg
ICAgIH07CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0
J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03
NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21h
dGNoX2VvbFsxNDhdID0KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2LDYgKzgwNyw3IEBAIFdI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtOTQ0
LDcgKzk2Niw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBc
CiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTEw
ODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJ
CX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5
eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
NDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3ICsx
MTI1LDcgQEAgeXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9zaXpl
X3QgeXlsOworCQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQogCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4MSwy
MjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcg
PSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5l
cik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIi
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3Zlcigp
OyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VU
VVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoK
IFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
X2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
OTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihB
RERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNl
IDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEw
NzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJ
TkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6
CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAx
MjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVG
VF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoK
IFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihT
RU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NF
VFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlf
UlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2Fz
ZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEz
MzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRl
eHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBh
cmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6
CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJ
R0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxF
X1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToK
K2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToK
K2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FS
RVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6
CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0x
NzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNU
SU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAog
e30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitj
YXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsg
IH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihD
T01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9G
ID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBj
aGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2Fz
ZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIwNzAs
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQog
CQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDEx
ICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIpCiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYg
KQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9z
dGF0ZSA9PSA0NTgpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OwogfQpAQCAtMjg5NCwxMCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI5MDYsMjYgKzI5NjUsMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTI5ODAsODggKzMwMzksMTUgQEAgdm9pZCBEZWNMaW5lTnVt
YmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tl
bnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1sw
XSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1p
emUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQot
ICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2Zm
XCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3Rl
ZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAg
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJk
ZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVi
dWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBw
cmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQot
ICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAg
ICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAg
Ly8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1w
bGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAg
Ly8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxl
bWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFn
bWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAo
bnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tl
bnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBw
cmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAg
ICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAg
ICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRh
YmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQo
VFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBd
IF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFH
TUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0
b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21h
RGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3Rv
cmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtMzA4Myw3
MSArMzA2OSwzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hF
cnJNc2cgPSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2
aW9yKQotewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICBy
ZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlv
cikpCi0gICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlz
YWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBp
ZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIp
ICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBFQmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lv
bkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRC
ZWhhdmlvcihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0
b3IgaXRlcjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZv
ciBhbGwgZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAg
ICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVu
YWJsZSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fu
bm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBi
ZWhhdmlvclZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRl
ciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJl
cXVpcmU6Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNp
b24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAg
ICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAg
ICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBu
b3Qgc3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4
dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7
CiB9CiB9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgogCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAo
YnVmLCBtYXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0g
bWF4X3NpemUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93
LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAg
ICBpbnQgbGVuID0gMDsKKworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6
OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5s
ZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAg
OiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
IHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4u
bG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0g
ICAgYnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4
X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsK
KyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJl
dHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAt
MzE3OCw5ICszMTI2LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0Yp
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQg
RU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5l
eHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5l
bm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpA
QCAtMzE5OSwyMiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAg
ICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nh
bm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVX
X1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0
LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRl
eHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4K
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJv
Y2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7Cisj
ZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAg
IGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5Q
YUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNw
cC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7
Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1
dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlm
ICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0
ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8o
aXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCmluZGV4IDM3YTBmMDUuLmQ1ODUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtMSwyNCArMSwy
MiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAg
IENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjcsNyBAQAog
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2
ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklT
T05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAogLyogUHVyZSBwYXJzZXJz
LiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUg
WVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyog
VXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogCiAKKy8qIENv
cHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJh
dGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2Vu
ZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKworLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKwor
LyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJs
aW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5l
IFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlU
T0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2ICsyMTUsMTQgQEAKICAg
ICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5l
IElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElV
TV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJ
U0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAot
I2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElO
VF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVm
aW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElG
IDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJW
RUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElW
RUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZF
QzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJ
WDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5l
IElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5
MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJV
Q1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5l
IFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJf
RVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVO
VElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQg
MzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0j
ZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUg
UklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2Rl
ZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2Rl
ZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNk
ZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNT
SUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAot
I2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmlu
ZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJ
R04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0j
ZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5l
IFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hU
X0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBD
T0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZp
bmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5l
IFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQ
RVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAz
NDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUg
QU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAotLyogQ29weSB0aGUg
Zmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
LSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0j
IHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNl
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0
b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5f
VEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlT
VFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0zNDAs
MTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlz
dCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBv
ZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMzYwLDI4ICsyNzEs
MjYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAg
IGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBj
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFE
RVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYg
b2YgeWFjYy5jLiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1Niwx
NCArMzY1LDE0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkK
K1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1
cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQg
Kik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KIC8qIEEgdHlwZSB0aGF0IGlz
IHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxv
YwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5
cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhl
IHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRo
ZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24g
eXlhbGxvYykgLSAxKQpAQCAtNTgwLDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3Rh
Y2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1Qg
eXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXpl
KTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHIt
PlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNr
X2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNr
KSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9m
ICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAg
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAy
MDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwg
ICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAot
ICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4
LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAg
NzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUs
ICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4
NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4
NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAg
IDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkx
LCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAx
MTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDEx
NzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwg
IDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4
MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAg
MTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0g
ICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcs
ICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2
NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwg
IDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgw
NiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1
LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAx
ODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAs
ICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5
MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1
NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAg
MjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAg
NDI2LCAgIDQzNiwgICA0NDksICAgNDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAg
ICAgNTc5LCAgIDU4MywgICA1OTAsICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwg
ICA2ODUsICAgNjg4LAorICAgICA2OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDcz
NiwgICA3MzcsICAgNzQ2LCAgIDc1OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAg
IDc4MywgICA3OTMsICAgODAzLCAgIDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUw
LCAgIDg1NCwgICA4NTgsICAgODYyLCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEs
ICAgOTA0LAorICAgICA5MDUsICAgOTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5
MzksICAgOTQwLCAgIDk0NCwgICA5NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwg
IDEwMDUsICAxMDQzLCAgMTA0NiwgIDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTEx
NCwgIDExNDMsICAxMTQ4LCAgMTE1OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgy
LAorICAgIDExODgsICAxMTk1LCAgMTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAx
Mjg5LCAgMTMwNywgIDEzMTUsCisgICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgs
ICAxNDkxLCAgMTQ5NywgIDE1MDUsICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1
NDEsICAxNTQ0LCAgMTU1MCwgIDE1NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAg
IDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAg
MTYyOSwgIDE2MzQsCisgICAgMTY0MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcx
LCAgMTY4MCwgIDE2ODUsICAxNjk4LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAx
NzI0LCAgMTczOSwgIDE3NzUsICAxNzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMs
ICAxODE3LCAgMTgxOCwgIDE4MjQsICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwg
IDE4MzMsCisgICAgMTgzMywgIDE4MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0
OSwgIDE4NDksICAxODU0LCAgMTg1NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAg
MTg4MSwgIDE4ODksICAxODkzLCAgMTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMw
LCAgMTkzMCwgIDE5MzcsICAxOTM3LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMs
CisgICAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIw
MTksICAyMDI2LCAgMjAyOSwKKyAgICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIs
MTYgKzcyMSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImlu
aXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZp
ZWRfdHlwZSIsCiAgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNp
b25fcXVhbGlmaWVyIiwKICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZp
ZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIs
ICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIs
CiAgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1l
bnQiLAotICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19u
ZXdfc2NvcGUiLAotICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91
bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAz
IiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Nj
b3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAg
ICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3Rh
dGVtZW50IiwKLSAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1l
bnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25f
cmVzdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3
IiwKKyAgIiRAOCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIs
ICJmb3JfcmVzdF9zdGF0ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25f
dW5pdCIsICJleHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwg
IkAxMCIsIDAKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYK
IApAQCAtMTM0NSw5ICsxMjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9z
W10gPQogCiAvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKIApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQg
KHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0
eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGlj
IHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJv
dHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwg
eXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZv
ciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAl
ZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisg
ICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9
CiAKQEAgLTE1NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxl
LCBjb250ZXh0KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5
eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAk
JWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5
eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKIAkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApA
QCAtMTg0OSwxMCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBm
cm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2
b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAo
KTsKIAogCiAKLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0K
ICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5
OCw3NCArMTgxNiw3NSBAQCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAg
LyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBz
byBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0g
IGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJy
b3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1h
aGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8K
LSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9y
IGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1z
Z2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQg
dGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZz
JzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBs
b2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50
ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hl
cmUuICAqLworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAg
aW50IHl5bmVycnM7CiAKLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2
IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5
dHlwZV9pbnQxNiAqeXlzc3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOwogCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZ
U1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZ
U1RZUEUgKnl5dnNwOworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNl
bWFudGljIHZhbHVlcy4KIAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5
cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3Ag
LT0gKE4pLCB5eXNzcCAtPSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAg
Ki8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOwor
ICAgIFlZU1RZUEUgKnl5dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVz
dWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRv
a2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQg
dG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rp
b24gcm91dGluZXMuICAqLwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUu
ICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7Cisg
IFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZp
bmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGlu
dCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9
IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3Rh
dHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRv
a2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAg
ICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBz
byB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAg
ICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5
eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50
IHl5bmVycnM7CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwogCi0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRl
cy4gIFRoaXMgdXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3
byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5
bmVycnM7CiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6
ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpA
QCAtMjAyNiw5ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZ
WVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRy
KQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZ
WVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2Ms
IHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAo
eXlzczEpOwpAQCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9
IHl5c3MgKyB5eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAot
CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVc
biIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYg
KzE5NjQsOSBAQCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmlu
ZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisg
ICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIw
NTcsMTYgKzE5NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHBy
b3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAg
IGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBk
byB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0
b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1Rf
TklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
ay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2Vu
OiAiKSk7CkBAIC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJl
ZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAg
IC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBv
ZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJy
c3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBT
aGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlm
dGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQot
ICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAq
LworICB5eWNoYXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0g
eXlsdmFsOwpAQCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRT
eW1ib2wqIHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBj
b25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAg
VFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJl
IGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJp
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8g
Y2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ci
LCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIxMzks
MjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFso
MSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjI2
Niw3ICsyMTgwLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8
PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5n
ZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJy
YXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBh
cHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwg
Ii4iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlm
IChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVy
cm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUsMTgg
KzIzNDUsMTggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBz
dWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0
cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjoKQEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsy
Mzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUo
KSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBU
eXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJ
bnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQg
dHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwg
PT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVl
IGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJy
b3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3Rh
bnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJz
LiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAi
bWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUx
OCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTk6CkBAIC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5v
ZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIx
LDcgKzI1NDIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUi
LCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJp
bmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9u
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0ICsy
NjUwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MzA6CkBAIC0yNzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3MDYs
MjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzMjoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExv
Z2ljYWxOb3Q7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4MTgs
NyArMjczOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4ODQs
NyArMjgwNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoK
QEAgLTI4OTgsNyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0NToKQEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoK
QEAgLTI5NDUsNyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0OToKQEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NjoK
QEAgLTMwMTIsMTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5NTIs
MTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjE6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA2MzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNl
IDY0OgogCi0gICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZF
UlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BNdWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAgeyBG
UkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3Np
Z247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9CisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3Vi
QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToK
QEAgLTMxMTcsNyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFy
YXRpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVj
aXNpb24pICk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsK
ICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJu
IHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5cmVk
dWNlOgogICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1
bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCiAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA3NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIo
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5wYXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc5OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1
bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQg
YXMgd2VsbC4uLgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDgwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSld
LmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1w
b3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBv
cmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0p
LnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDkwOgpAQCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkpIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9
PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
IApAQCAtMzQyOCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSld
LmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDk0OgpAQCAtMzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDE5
ICszNDUzLDE5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRl
ZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJy
YXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQsNyAr
MzUyNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICszNTM3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0
SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBA
IC0zNjI2LDcgKzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVjZToK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0
LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNz
IGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAg
ICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wg
fHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0zNjgw
LDcgKzM2MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFB
dHRyaWJ1dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5n
SW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1
bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OToKQEAgLTM3MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1
bTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEx
NzoKQEAgLTM3OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE5
OgpAQCAtMzgxMSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICszNzUw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBAIC0z
ODM4LDcgKzM3NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyMzoKQEAgLTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMsNyAr
MzgwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoKQEAg
LTM4OTIsNyArMzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyOToKQEAgLTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4NDMs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSg0LCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMjoK
QEAgLTM5MzEsNyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEsMzMg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0
ZXJuYWxPRVMsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1
bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAtMzk4
OSwxMiArMzkxMCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24o
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNw
WygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24o
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsgaWYg
KGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7
IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywxNCAr
Mzk0OCwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
TGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+
cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00MDg3
LDcgKzQwMDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
bmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyArNDA1
Miw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXpl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9CisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAgIHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAw
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcgKzQy
MDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVj
dGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyArNDIx
Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpAQCAt
NDI5OSw3ICs0MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTgwOgpAQCAtNDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0g
KDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgy
OgpAQCAtNDM1NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1do
aWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5
dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgp
LmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3Is
ICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwg
cmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAo
eXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTA6CkBAIC00NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dl
ZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0LDEw
ICs0MzY1LDEwIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTQ6CkBAIC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNW
YWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24g
cmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVl
Um9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4
dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDUx
Nyw3ICs0NDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFt
ZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAg
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAgICAg
ICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6
ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlz
IGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUo
Y29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQ
cmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRl
eHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAK
LS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAg
ICB9CkBAIC00NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFs
OwogCi0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0
ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUg
d2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAg
Ki8KQEAgLTQ2ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9
PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3IEBA
IHl5ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAg
dG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAgeXll
cnJsYWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAg
aWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFs
OwogCiAKQEAgLTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsK
ICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlv
dmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxhYjoK
ICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0g
WVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj
dGlvbiB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQg
KzEsMjIgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tl
bGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAg
Q29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAg
IAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAK
ICAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29u
LiAgKi8KIAorCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUg
WVlUT0tFTlRZUEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAog
ICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2Rl
ZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNk
ZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBB
VFRSSUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAy
NjUKLSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5l
IEJSRUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5l
IEVMU0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NB
UkQgMjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJW
RUMzIDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElW
RUMzIDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVD
MyAyODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFU
UklYMyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZp
bmUgT1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0g
MjkxCi0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9J
RF9UWVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2Rl
ZmluZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0j
ZGVmaW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5l
IFRZUEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09O
U1RBTlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNU
SU9OIDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZp
bmUgSU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2Rl
ZmluZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2Rl
ZmluZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0j
ZGVmaW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFE
RF9BU1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdO
IDMyMQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0j
ZGVmaW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VC
X0FTU0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4g
MzI4Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAK
LSNkZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5l
IERPVCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBF
UVVBTCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmlu
ZSBEQVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUg
U1RBUiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5l
IExFRlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNB
TF9CQVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVm
aW5lIFFVRVNUSU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZp
bmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwog
ICAgIHN0cnVjdCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpA
QCAtMjY1LDE0ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBU
VHlwZUxpc3QqIHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGlu
ZSAxNTI5IG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5o
CmluZGV4IDU0NDE1NTcuLmFmNzhmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQzMywxNSArNDMzLDE1IEBAIHBy
b3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNl
OwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci10eXBlZGVmIFRNYXA8VFN0
cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8gTm9kZXMgdGhhdCBvcGVyYXRl
IG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCiAvLwogY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewogcHVibGljOgotICAgIFRJbnRl
cm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFs
c2UpLCBwcmFnbWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxz
ZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0
b3IobyksIHByYWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAg
ICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxz
ZSksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRl
cm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRl
ZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQogCiAgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwpAQCAtNDUy
LDE0ICs0NTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25z
dCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVm
aW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZp
bmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0K
ICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNl
dERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1
cm4gZGVidWc7IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpOwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25z
dCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQgc2V0RW5kTGluZShUU291cmNl
TG9jIGxpbmUpIHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291cmNlTG9jIGdldEVuZExpbmUo
KSBjb25zdCB7IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRh
YmxlICpwcmFnbWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExpbmU7CiAKICAgICAvLyBJZiBz
ZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVt
dWxhdGVkIG9uZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RW
aXNpdChwb3N0VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAog
ICAgICAgICAgICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkg
e307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IHt9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Np
bmNsdWRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRl
LmgKaW5kZXggOWY5MzkzYS4uOWIzYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaApAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fc3VuKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fR05VX18pIHx8IGRlZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQo
X19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAj
ZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBh
MTdjMzE5Li4zOTE1OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAj
aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBz
dHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRh
YmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsg
TlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBB
dG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChB
dG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0
MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcykKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewog
ICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwot
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAor
ICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNo
PSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50
cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3
aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lv
bltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNp
b25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3Ry
KTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRv
bVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3Ig
KGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYo
c3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFt
YXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wi
IiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRh
YmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50
cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAi
ICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAg
Q1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEu
LjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAj
aWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHBy
YWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVP
RgogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVu
ZCB3aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVt
b3J5QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47
CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGlu
dCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsK
IAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5D
b3VudDsgKytpKSB7CiAJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2
IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3Io
eXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJz
aW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5z
aW9uKHl5bHZhbHBwKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZv
aWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFj
cm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9u
ID0gezB9OworICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5
bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBw
IHZhbCA9IHswfTsKKyAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAw
fTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9
IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29s
KTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUs
ICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQ
UF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwg
TUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0
b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5l
TnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
TUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAg
VW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxw
cC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4u
ODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBT
aC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9n
Lgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNh
ZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBf
X01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0
eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5
UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWdu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5f
dHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVk
IHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0g
IkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0
d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5m
aW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRl
eHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91
dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxl
eGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhl
cigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBz
byB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGlu
IHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9r
ZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAh
PSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1
dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRw
dXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2Uu
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVz
ZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNy
byhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3Rvciog
cGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3Jv
KHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0Rl
ZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9y
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBt
YWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5k
ZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRl
cmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jv
cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBz
dGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBt
TWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQg
Q29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBt
TWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0g
ICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsK
LSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElO
VF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVj
dG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAg
IG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBD
b250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQot
ICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7
IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2Vu
VmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1h
Y3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBw
cDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAg
IGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBp
c01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBk
ZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0g
ICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgot
ICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9T
ZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRp
YWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9E
TyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50
KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6
OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwg
RVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5J
TkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7
CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc1YTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaApAQCAtMCwwICsxLDgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGlu
ZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJs
ZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25v
c3RpY3MKK3sKKyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVS
Uk9SLAorICAgICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAg
ICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9N
RU1PUlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJF
UiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAg
ICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgRElSRUNUSVZFX0lOVkFMSURfTkFNRSwK
KyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAor
ICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgTUFDUk9fUFJFREVG
SU5FRF9VTkRFRklORUQsCisgICAgICAgIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAor
ICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIE1BQ1JPX1RPT19NQU5ZX0FSR1Ms
CisgICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAorICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVELAor
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNU
SVZFLAorICAgICAgICBJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0ZJTEVf
TlVNQkVSLAorICAgICAgICBJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICBFUlJPUl9F
TkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklO
R19FTkQKKyAgICB9OworCisgICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQg
cmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFNldmVyaXR5IHNldmVyaXR5KElEIGlkKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2E5MWUxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
SGFuZGxlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVj
dGl2ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
RElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgaGFuZGxp
bmcgZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90aWZ5
IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBE
ZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxpbmcgdGhlbSBpbiBh
biBhcHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisgICAgLy8gSGFuZGxl
IHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pID0g
MDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4
NWE5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsODk5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorCisjaW5j
bHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisK
KyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuaCIK
KyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5o
IgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKK25hbWVzcGFj
ZSB7CitlbnVtIERpcmVjdGl2ZVR5cGUKK3sKKyAgICBESVJFQ1RJVkVfTk9ORSwKKyAgICBESVJF
Q1RJVkVfREVGSU5FLAorICAgIERJUkVDVElWRV9VTkRFRiwKKyAgICBESVJFQ1RJVkVfSUYsCisg
ICAgRElSRUNUSVZFX0lGREVGLAorICAgIERJUkVDVElWRV9JRk5ERUYsCisgICAgRElSRUNUSVZF
X0VMU0UsCisgICAgRElSRUNUSVZFX0VMSUYsCisgICAgRElSRUNUSVZFX0VORElGLAorICAgIERJ
UkVDVElWRV9FUlJPUiwKKyAgICBESVJFQ1RJVkVfUFJBR01BLAorICAgIERJUkVDVElWRV9FWFRF
TlNJT04sCisgICAgRElSRUNUSVZFX1ZFUlNJT04sCisgICAgRElSRUNUSVZFX0xJTkUKK307Cit9
ICAvLyBuYW1lc3BhY2UKKworc3RhdGljIERpcmVjdGl2ZVR5cGUgZ2V0RGlyZWN0aXZlKGNvbnN0
IHBwOjpUb2tlbiogdG9rZW4pCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVEZWZpbmUoImRlZmluZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlVW5kZWYoInVuZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZigiaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlm
ZGVmKCJpZmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZu
ZGVmKCJpZm5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVs
c2UoImVsc2UiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVsaWYo
ImVsaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVuZGlmKCJl
bmRpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXJyb3IoImVy
cm9yIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEoInBy
YWdtYSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXh0ZW5zaW9u
KCJleHRlbnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVZl
cnNpb24oInZlcnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZUxpbmUoImxpbmUiKTsKKworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBwcDo6VG9rZW46OklERU5U
SUZJRVIpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsKKworICAgIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9ERUZJ
TkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVVbmRlZikKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9VTkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGOworICAgIGVsc2UgaWYg
KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJ
VkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5kZWYp
CisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTFNFOwor
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxpZikKKyAgICAgICAgcmV0
dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0
aXZlRW5kaWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRU5ESUY7CisgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKKyAgICAgICAgcmV0dXJuIERJUkVDVElW
RV9FUlJPUjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVByYWdtYSkK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVhU
RU5TSU9OOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lvbikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9WRVJTSU9OOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9MSU5FOwor
CisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9vbCBpc0NvbmRpdGlv
bmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAgIHN3aXRjaCAoZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgY2FzZSBESVJF
Q1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICBjYXNlIERJ
UkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAgICAgIGNhc2UgRElS
RUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9r
ZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wgaXNFT0QoY29uc3Qg
cHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBlID09ICdcbicpIHx8
ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0aWMgdm9pZCBza2lw
VW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICB3aGls
ZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0b2tlbik7CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVk
LgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3Jl
cyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0JiBtYWNyb1NldCkK
K3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYWNyb1NldC5maW5k
KG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8gaXRlci0+c2Vjb25k
LnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERlZmlu
ZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERlZmluZWRQYXJzZXIo
TGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9TZXQqIG1hY3JvU2V0
LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgICAg
IG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgICAgIG1E
aWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHByb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnZhbHVlICE9IGtEZWZp
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wgcGFyZW4gPSBmYWxzZTsK
KyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0g
JygnKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJlbiA9IHRydWU7CisgICAgICAgICAgICBt
TGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3Jv
U2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4cHJlc3Npb24g
PSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAgICAgaWYgKHBh
cmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAg
ICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgaGF2ZSBhIHZhbGlkIGRlZmluZWQgb3BlcmF0b3IuCisgICAgICAgIC8vIENv
bnZlcnQgdGhlIGN1cnJlbnQgdG9rZW4gaW50byBhIENPTlNUX0lOVCB0b2tlbi4KKyAgICAgICAg
dG9rZW4tPnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgICAgICB0b2tlbi0+dmFsdWUgPSBl
eHByZXNzaW9uOworICAgIH0KKworICBwcml2YXRlOgorICAgIExleGVyKiBtTGV4ZXI7CisgICAg
Y29uc3QgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNz
OworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tl
bml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9T
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVy
KiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAorICAgIG1N
YWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAgICBt
RGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAgIHsKKyAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46
OlBQX0hBU0gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlRGlyZWN0aXZlKHRva2VuKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2subG9jYXRpb24sIGJsb2NrLnR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBlID09ICdcbicpKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3Nl
cnQodG9rZW4tPnR5cGUgPT0gVG9rZW46OlBQX0hBU0gpOworCisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tl
bik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBleGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91
cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYg
KHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7
CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElS
RUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpE
SVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfREVGSU5F
OgorICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBESVJFQ1RJVkVfVU5ERUY6CisgICAgICAgIHBhcnNlVW5kZWYodG9rZW4pOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICBwYXJzZUlmKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAgcGFy
c2VJZmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUZO
REVGOgorICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRUxTRToKKyAgICAgICAgcGFyc2VFbHNlKHRva2VuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgICBwYXJzZUVsaWYodG9r
ZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAg
ICBwYXJzZUVuZGlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9FUlJPUjoKKyAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfUFJBR01BOgorICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRVhURU5TSU9OOgorICAgICAgICBw
YXJzZUV4dGVuc2lvbih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJ
VkVfVkVSU0lPTjoKKyAgICAgICAgcGFyc2VWZXJzaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9MSU5FOgorICAgICAgICBwYXJzZUxpbmUodG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiogdG9r
ZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0RFRklO
RSk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVkKHRva2VuLT52YWx1ZSwgKm1NYWNyb1NldCkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9f
UFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3JvOworICAgIG1hY3JvLnR5
cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRva2VuLT52YWx1ZTsKKwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlID09ICcoJyAm
JiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAgICAgLy8gRnVuY3Rpb24t
bGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1hY3JvLnR5cGUgPSBNYWNy
bzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5w
dXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICcsJyk7
CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKKyAgICAgICAgeworICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBHZXQg
JyknLgorICAgIH0KKworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB0b2tl
biBsb2NhdGlvbiBiZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50CisgICAg
ICAgIC8vIGxpc3QuIFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tlbjo6
ZXF1YWxzKCkgdG8KKyAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCisgICAgICAgIHRva2VuLT5s
b2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5w
dXNoX2JhY2soKnRva2VuKTsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKCFtYWNyby5yZXBsYWNlbWVudHMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIC8v
IFdoaXRlc3BhY2UgcHJlY2VkaW5nIHRoZSByZXBsYWNlbWVudCBsaXN0IGlzIG5vdCBjb25zaWRl
cmVkIHBhcnQgb2YKKyAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGxpc3QgZm9yIGVpdGhlciBm
b3JtIG9mIG1hY3JvLgorICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZnJvbnQoKS5zZXRIYXNM
ZWFkaW5nU3BhY2UoZmFsc2UpOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciBtYWNybyByZWRl
ZmluaXRpb24uCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQt
PmZpbmQobWFjcm8ubmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSAmJiAh
bWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hY3JvLm5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1NYWNyb1NldC0+aW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKG1hY3JvLm5hbWUsIG1hY3JvKSk7Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVU5ERUYpOworCisgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm9TZXQ6Oml0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpZiAoaXRlciAh
PSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5wcmVk
ZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtTWFjcm9TZXQtPmVyYXNlKGl0
ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30K
Kwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRik7CisgICAgcGFyc2VDb25k
aXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZkZWYo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9JRkRFRik7CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKTsKKyAgICBwYXJzZUNvbmRp
dGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRv
a2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJ
VkVfRUxTRSk7CisKKyAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNF
X1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisg
ICAgeworICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5l
LgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNFX0FGVEVS
X0VMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxzZUdyb3VwID0gdHJ1ZTsK
KyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3JvdXA7CisgICAgYmxvY2su
Zm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIGV4dHJh
IHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tp
cFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUVsaWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OkNPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYg
KGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0
IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdy
b3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNP
TkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9jay5m
b3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFyc2UgdGhlIGV4cHJl
c3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1pdCBhIGRpYWdub3N0
aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQg
ZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBibG9jay5za2lwR3Jv
dXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVz
c2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VO
RElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VORElGX1dJ
VEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1Db25kaXRpb25hbFN0YWNrLnBvcF9iYWNr
KCk7CisKKyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2VuZGlmLgorICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9rZW4q
IHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9F
UlJPUik7CisKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzdHJlYW0gPDwgKnRva2VuOwor
ICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBtRGlyZWN0aXZlSGFu
ZGxlci0+aGFuZGxlRXJyb3IodG9rZW4tPmxvY2F0aW9uLCBzdHJlYW0uc3RyKCkpOworfQorCisv
LyBQYXJzZXMgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXS4KK3ZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1BSQUdNQSk7CisKKyAgICBlbnVtIFN0YXRl
CisgICAgeworICAgICAgICBQUkFHTUFfTkFNRSwKKyAgICAgICAgTEVGVF9QQVJFTiwKKyAgICAg
ICAgUFJBR01BX1ZBTFVFLAorICAgICAgICBSSUdIVF9QQVJFTgorICAgIH07CisKKyAgICBib29s
IHZhbGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKKyAgICBpbnQgc3Rh
dGUgPSBQUkFHTUFfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIFBSQUdNQV9OQU1FOgorICAgICAgICAgICAgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAg
ICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoKKyAgICAg
ICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcoJyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKKyAgICAgICAgICAgIHZhbHVl
ID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5
cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50
eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFsaWQgPSB2YWxp
ZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJhZ21hLgorICAg
ICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAgIC8vIFdpdGhv
dXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVOICsg
MSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90aWZ5IGZvciBl
bXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlUHJh
Z21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKworICAgIGVudW0g
U3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwKKyAgICAgICAg
RVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6
c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1FOworCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicp
ICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5h
bWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENP
TE9OOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJ
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2
YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlm
ICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElSRUNU
SVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkK
KyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRp
b24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVy
c2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX1ZFUlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IHZl
cnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0YXRl
KyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVSOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgdmVy
c2lvbiA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0g
VkVSU0lPTl9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhh
bmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0
KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0xJTkUpOworCisgICAgZW51bSBTdGF0
ZQorICAgIHsKKyAgICAgICAgTElORV9OVU1CRVIsCisgICAgICAgIEZJTEVfTlVNQkVSCisgICAg
fTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7
CisgICAgaW50IHN0YXRlID0gTElORV9OVU1CRVI7CisKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3Jv
RXhwYW5kZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIG1hY3Jv
RXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0
YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIExJTkVfTlVNQkVSOgorICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbGluZSA9
IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBGSUxFX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRklMRV9OVU1CRVIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodmFsaWQpIGZpbGUgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgfQor
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRlICE9IEZJ
TEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgIH0KKyAgICBpZiAodmFsaWQpCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5z
ZXRMaW5lTnVtYmVyKGxpbmUpOworICAgICAgICBpZiAoc3RhdGUgPT0gRklMRV9OVU1CRVIgKyAx
KSBtVG9rZW5pemVyLT5zZXRGaWxlTnVtYmVyKGZpbGUpOworICAgIH0KK30KKworYm9vbCBEaXJl
Y3RpdmVQYXJzZXI6OnNraXBwaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobUNvbmRpdGlvbmFsU3Rh
Y2suZW1wdHkoKSkgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYg
YmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgcmV0dXJuIGJsb2NrLnNraXBC
bG9jayB8fCBibG9jay5za2lwR3JvdXA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUNvbmRpdGlvbmFsSWYoVG9rZW4qIHRva2VuKQoreworICAgIENvbmRpdGlvbmFsQmxvY2sgYmxv
Y2s7CisgICAgYmxvY2sudHlwZSA9IHRva2VuLT52YWx1ZTsKKyAgICBibG9jay5sb2NhdGlvbiA9
IHRva2VuLT5sb2NhdGlvbjsKKworICAgIGlmIChza2lwcGluZygpKQorICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBjb25kaXRpb25hbCBibG9jayBpcyBpbnNpZGUgYW5vdGhlciBjb25kaXRpb25hbCBn
cm91cAorICAgICAgICAvLyB3aGljaCBpcyBza2lwcGVkLiBBcyBhIGNvbnNlcXVlbmNlIHRoaXMg
d2hvbGUgYmxvY2sgaXMgc2tpcHBlZC4KKyAgICAgICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8gcGFy
c2UgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBtaWdodAorICAgICAgICAvLyBlbWl0
IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
KyAgICAgICAgYmxvY2suc2tpcEJsb2NrID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwor
CisgICAgICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICAgICAgc3dpdGNoIChkaXJlY3RpdmUp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRjoKKyAgICAgICAgICAgIGV4
cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24g
PSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uSWZkZWYodG9rZW4pID09IDAgPyAxIDogMDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVz
c2lvbiA9PSAwOworICAgICAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9
IDA7CisgICAgfQorICAgIG1Db25kaXRpb25hbFN0YWNrLnB1c2hfYmFjayhibG9jayk7Cit9CisK
K2ludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKSB8fAorICAg
ICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxJRikpOworCisgICAg
RGVmaW5lZFBhcnNlciBkZWZpbmVkUGFyc2VyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdu
b3N0aWNzKTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJzZXIs
IG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJlc3Np
b25QYXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisKKyAgICBpbnQgZXhwcmVz
c2lvbiA9IDA7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIGV4cHJlc3Npb25Q
YXJzZXIucGFyc2UodG9rZW4sICZleHByZXNzaW9uKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUg
YXJlIHRva2VucyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KKyAgICBpZiAoIWlzRU9EKHRva2VuKSkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2ludCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAorICAg
ICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisKKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIE1hY3JvU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAg
aW50IGV4cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAxIDogMDsKKworICAg
IC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjaWZkZWYgZXhwcmVzc2lvbi4KKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVhMDFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlUGFyc2VyLmgKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgi
CisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNv
dXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsK
K2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVj
dGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFy
c2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCog
bWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywK
KyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAg
ICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZv
aWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tl
bik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VF
bHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAg
ICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJv
b2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiog
dG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGlu
dCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRp
dGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNv
dXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAg
Ym9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBi
b29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAg
ICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwK
KyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVs
c2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBzdGQ6OnZl
Y3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsKKyAgICBUb2tlbml6ZXIq
IG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyog
bURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJj
MzcxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCkBAIC0wLDAgKzEsMTky
OCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KKwor
LyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2
LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsg
aXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9y
IGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFs
dGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2Vy
IHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisg
ICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRo
ZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAq
LworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFs
bG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGlj
IiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdp
biB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3Bh
Y2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFz
IHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhl
cmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0
bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJ
TkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlm
eSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lv
bi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCisKKy8qIFNrZWxldG9uIG5h
bWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJz
ZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZp
bmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwor
LyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vi
c3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlw
YXJzZSAgICAgICAgIHBwcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAgICAgIHBwbGV4CisjZGVm
aW5lIHl5ZXJyb3IgICAgICAgICBwcGVycm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICBwcGx2
YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHBwY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAg
ICAgcHBkZWJ1ZworI2RlZmluZSB5eW5lcnJzICAgICAgICAgcHBuZXJycworCisKKy8qIENvcHkg
dGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNo
LiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkg
dGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4
cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxp
Yj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVS
KQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Cisj
ZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2Vu
ZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7Cisg
ICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOwor
ICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNw
YWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4
dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisj
IGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1l
c3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJC
T1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1Jf
VkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNp
Zm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKwor
CisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZ
UEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBH
REIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVu
dW0geXl0b2tlbnR5cGUgeworICAgICBDT05TVF9JTlQgPSAyNTgsCisgICAgIE9QX09SID0gMjU5
LAorICAgICBPUF9BTkQgPSAyNjAsCisgICAgIE9QX05FID0gMjYxLAorICAgICBPUF9FUSA9IDI2
MiwKKyAgICAgT1BfR0UgPSAyNjMsCisgICAgIE9QX0xFID0gMjY0LAorICAgICBPUF9SSUdIVCA9
IDI2NSwKKyAgICAgT1BfTEVGVCA9IDI2NiwKKyAgICAgVU5BUlkgPSAyNjcKKyAgIH07CisjZW5k
aWYKKworCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19E
RUNMQVJFRAordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklB
TCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0
aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyNlbmRpZgorCisKKy8q
IENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisKKyNp
ZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgK
K3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlw
ZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxz
ZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQ
RV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVm
IFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UK
K3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0la
RV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQ
RV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMg
ZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZ
U0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01B
WElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFC
TEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxp
YmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZ
WV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMg
ZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYK
KyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5n
IiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmlu
ZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0
eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRl
ZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOworI2VuZGlmCit7CisgIHJldHVybiB5eWk7Cit9Cisj
ZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisv
KiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nh
cnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNU
QUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdf
SU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
IF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxv
Yy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxv
Y2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisj
ICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIu
aD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERM
SUJfSAorIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYK
KyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisg
ICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5l
IFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQor
IyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFy
YW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAg
ICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3
ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQw
OTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBh
IGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBk
ZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2
ICovCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQwor
IyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01B
WElNVU0KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisj
ICBlbmRpZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJf
SCBcCisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwK
KwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRl
IDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRl
ZiBfU1RETElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlm
CisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYg
ISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5k
ZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUg
JiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQg
eXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92
ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVk
IFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBl
IHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlv
biB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNf
YWxsb2M7Cit9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUg
YWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFY
SU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFy
cmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBl
bGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChz
aXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RB
Q0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8u
ICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBp
Zm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAg
IGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5
IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVm
aW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwK
KwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5
eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAg
ICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFD
SyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZh
cmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJl
ciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBs
b2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFs
aWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNU
QUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAor
ICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0
ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9m
ICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZ
SUQgKDApKQorCisjZW5kaWYKKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRl
cm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgMTQKKy8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxNzUKKworLyogWVlO
VE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDI3
CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5U
UyAgMworLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVM
RVMgIDI2CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlO
U1RBVEVTICA1MgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJl
ciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2Rl
ZmluZSBZWU1BWFVUT0sgICAyNjcKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAor
ICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6
IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAorICAgICAgMjUsICAgIDI2LCAgICAxOSwg
ICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMjIKK307CisKKyNpZiBZWURFQlVHCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0
aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAw
LCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcs
CisgICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAg
NTksICAgIDYzLCAgICA2NywKKyAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwg
ICAgODgsICAgIDkxCit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2Yg
dGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQor
eworICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAg
IDI5LCAgICAgNCwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAg
ICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAg
ICAtMSwgICAgMjksCisgICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAg
IDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwg
ICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAx
OSwgICAgMjksICAgIC0xLCAgICAyMywKKyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAg
ICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1
LCAgICAyOSwgICAgMjYsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxp
bmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgICA4NywgICAgODcsICAgIDk0
LCAgICA5NSwgICAgOTgsICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTEwLAorICAgICAxMTMsICAg
MTE2LCAgIDExOSwgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0LCAgIDEzNywgICAx
NDAsCisgICAgIDE1MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzUsICAgMTc4LCAgIDE4MQor
fTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9U
QUJMRQorLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9s
IFNZTUJPTC1OVU0uCisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQg
WVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5
dG5hbWVbXSA9Cit7CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiQ09OU1RfSU5U
IiwgIk9QX09SIiwgIk9QX0FORCIsICInfCciLAorICAiJ14nIiwgIicmJyIsICJPUF9ORSIsICJP
UF9FUSIsICInPCciLCAiJz4nIiwgIk9QX0dFIiwgIk9QX0xFIiwKKyAgIk9QX1JJR0hUIiwgIk9Q
X0xFRlQiLCAiJysnIiwgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJVTkFSWSIsICInISci
LAorICAiJ34nIiwgIicoJyIsICInKSciLCAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9u
IiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5V
TV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZ
TEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sK
KyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAgICA5
NCwgICAgMzgsICAgMjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0LCAg
IDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAgMjY3
LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5d
IC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAg
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjkKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3Np
bmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAg
ICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKworLyog
WVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0
YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcg
ZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAg
IDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAy
NSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwg
ICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0t
TlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAg
ICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXgg
aW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLwor
I2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0
W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywg
ICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAg
MTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAs
ICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsK
KworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZ
WVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisg
ICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1
bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZ
REVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVm
aW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10g
PQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAor
ICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisg
ICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKK307
CisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCisgICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisg
ICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAgMywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAgICAg
OCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tTVEFU
RS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1i
b2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlz
dG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOQor
fTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFy
aW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlF
T0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJP
UlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKwor
CisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBo
ZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVh
bmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBw
bGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVh
cnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVk
CisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBp
dCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJy
bGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxs
eSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJz
IGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAg
ICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41
LiAgKi8KKyNlbmRpZgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykK
KworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBp
ZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwK
KyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJ
CQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAg
IH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJy
b3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAg
ICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKwor
CisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgor
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExP
Q19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwK
KyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJy
ZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAo
Q3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlc
CisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5l
OwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Rf
Y29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwK
KwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAor
CSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJz
dF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhz
LCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkp
CisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9J
U19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAg
ICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3Rf
bGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExv
YykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxl
LCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxp
bmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhf
UEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNl
CisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBF
bmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRl
ZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRl
ZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJ
CVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAor
ZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJ
CQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisg
ICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwg
Y29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAg
ICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9z
eW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNv
bnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZv
aWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNv
bnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgor
eworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBp
ZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlv
dXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5
b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVs
dDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQs
IGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29u
dGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0
eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpj
b250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJ
TlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisg
ICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwor
CisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNv
bnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
K3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRP
TSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmlu
dCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVf
aW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CisjZW5kaWYKK3sKKyAg
WVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90dG9tIDw9IHl5
dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKyAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAgWVlGUFJJTlRG
IChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRv
cCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0
YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
UmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNl
X3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKKyNl
bHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0
KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisgICAgQ29udGV4dCAqY29u
dGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOworICBpbnQgeXlp
OworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJ
TlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAor
CSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2Vk
LiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1i
b2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAg
Jih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRl
eHQpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZp
bmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJ
CQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hp
bGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQg
aXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNv
ZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUg
WVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisv
KiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICov
CisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgor
CisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChl
ZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2Qg
aXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVz
dWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNL
X0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9u
IGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUg
WVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisj
IGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhl
IGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisj
ZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAq
eXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5
eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30K
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9f
R0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAg
ZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1Qs
IHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlE
RVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNl
bHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5
eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0g
eXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9
ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30K
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJF
UyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkK
KyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXll
cnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNl
c3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29t
bWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZ
WVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90
IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAg
d291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5
eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsK
KyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsK
KworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoK
KwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2Ug
J1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlm
ICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJy
ZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0g
PSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6
IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7
CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlm
CisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4
cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcg
bnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5n
OyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGll
ZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVy
cm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJm
bG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0la
RV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXlj
aGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1Rf
TklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAg
IHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJ
WkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGlu
dCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBp
cyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBj
b25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4
cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlm
CisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRp
YyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5n
ICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAg
Y2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVj
dGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJ
ICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4
ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZl
IHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQg
eXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJv
dW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2ts
aW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZ
WU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAx
OworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlz
dHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJl
Z2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4
ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9W
RVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUg
PSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwor
CQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07
CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJ
ICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAg
IHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAg
ICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVy
ZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisg
ICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAg
ICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmlu
Z2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVk
IGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmlu
ZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXly
ZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcp
CisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkg
PCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10p
OworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAg
eXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQor
I2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2Np
YXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFy
ICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQp
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAg
WVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBZ
WVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykKKyAg
ICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwg
eXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAg
ICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZy
b20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lk
ICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2Ug
LyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5
cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNl
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFS
QU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50
Cit5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4
dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKy8qIFRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBv
ZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworICAgIC8qIE51
bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAg
ICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBl
cnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAv
KiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8g
c3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAg
ICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93
IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKwor
ICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5J
VERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNz
cDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5
eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZz
cDsKKworICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOworCisgIGludCB5eW47CisgIGludCB5eXJl
c3VsdDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0
b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2Vk
IHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0
aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZRVJST1JfVkVSQk9T
RQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXpl
LiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwor
ICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisjZGVm
aW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgLyog
VGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAg
ICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBp
bnQgeXlsZW4gPSAwOworCisgIHl5dG9rZW4gPSAwOworICB5eXNzID0geXlzc2E7CisgIHl5dnMg
PSB5eXZzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZWURQUklOVEYgKChz
dGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0
YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMu
CisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAg
ICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2su
CisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKyAg
eXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBp
biB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3
aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2
ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0
YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRl
OworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAg
IC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxl
bWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKwor
I2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVh
bGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUg
JidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlT
VFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisJLyog
RWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhl
CisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8g
YmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0
IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAg
Ki8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eXZzcCksCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMg
PSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZ
U1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAg
IC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQ
VEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tz
aXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tz
aXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNz
OworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3Mp
OworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFD
S19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEp
OworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAg
eXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAt
IDE7CisKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRv
ICVsdVxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAg
IGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQor
CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7
CisKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5
YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSov
Cit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBj
dXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9u
ZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRl
Y2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICov
CisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAg
ICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRv
a2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRo
ZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLworICBp
ZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
UmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAg
aWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlF
T0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikp
OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAm
eXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24g
c2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBl
cnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXlu
IDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290
byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAg
IHsKKyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXll
cnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisK
KyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJu
IG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXll
cnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKwor
ICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsK
KworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3
c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBm
b3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRl
ZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdv
dG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXly
ZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1
Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5v
bnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBg
JCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZB
TCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlz
b24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlW
QUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwg
YW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQg
dW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9S
RURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAy
OgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+
KCh5eXZzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFlZQUNDRVBUOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5
dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
IT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEwOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
IDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygz
KSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisK
KyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZz
cFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5j
X3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAhICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAo
eXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjU6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MikgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZh
bCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisgIC8q
IE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0
IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBi
YWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXlu
ID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAq
eXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Cisg
IGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290
byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFk
eSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYg
KCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZF
UkJPU0UKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworI2Vs
c2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0
ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZ
WVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICog
eXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNU
QUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElN
VU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkgICAgICBZWVNUQUNLX0ZSRUUgKHl5
bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKKwkg
ICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKKwkgICAgZWxzZQor
CSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5
bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0
YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yIChjb250ZXh0LCB5eW1zZyk7CisJICB9CisJZWxz
ZQorCSAgeworCSAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKwkg
ICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJICB9Cisg
ICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAg
IHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQg
dG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICBpZiAoeXlj
aGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1
dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KKyAgICAg
IGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5
eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAg
IH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBz
aGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
K3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNl
ciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3Js
YWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYg
KC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAg
ICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7
CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7Cisg
IGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2Rl
IGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFi
MToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1l
bnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5
c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlU
RVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0g
PT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAg
aWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1
cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICov
CisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1
Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4
dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICAqKyt5eXZzcCA9IHl5
bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9Q
UklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0
ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFi
OgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJl
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6
CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJldHVybjsKKworI2lmICFkZWZpbmVkKHl5b3Zl
cmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVz
dGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91
Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisJCSB5eXRv
a2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZQUJPUlQgb3Ig
WVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAgICAgIHl5ZGVz
dHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNv
bnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93
CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYK
KyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RB
Q0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAq
LworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisKK2ludCB5eWxleChZWVNU
WVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAg
ICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAq
bHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAwKTsKKyAgICAgICAg
dHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9B
TkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0
eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0g
T1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1BfR0U7
IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVhazsK
KyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBl
ID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAg
IGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwn
OyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2Ug
JysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVh
azsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0
eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAg
ICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0g
JygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAg
ZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tl
biBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4
dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9O
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFt
ZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciog
bGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisg
ICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJz
ZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250
ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4
dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4
dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAg
IHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAg
ICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tl
bi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJl
dCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCAr
MSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VY
UFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNT
SU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7
CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2Ns
YXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIo
TGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJz
ZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4
ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM2YzdiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMjc0IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1Ro
aXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nv
ciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJl
cHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1
dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Np
b25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNp
bmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlw
ZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0CisjZWxzZQor
I2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAv
LyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6
OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBw
OjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisl
fQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgorJXBhcnNlLXBhcmFtIHtD
b250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKworJXsKK3N0
YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGlj
IHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0K
KworJXRva2VuIENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wn
CislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicg
T1BfTEUgT1BfR0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0
ICcqJyAnLycgJyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Np
b24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsK
KyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBDT05TVF9J
TlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
fHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+
JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAk
MzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAi
IDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpE
SVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJl
YW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAg
IFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZ
IHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVj
IFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9u
ICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHBy
ZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICco
JyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5
cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lO
VDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwg
MCk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTog
dHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9
IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IE9Q
X1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gT1Bf
TEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7CisgICAgICBj
YXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsg
YnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBjYXNlICc8
JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7
CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICclJzogdHlw
ZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7CisgICAg
ICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlwZSA9ICch
JzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAgICBjYXNl
ICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJl
YWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFuY2UgdG8g
dGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlmICh0eXBl
ICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCit7
CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNv
bik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25Q
YXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4
ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworYm9vbCBF
eHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQoreworICAg
IENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNz
OworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9IHRva2Vu
OworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBhcnNlKCZj
b250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6CisgICAgICBj
YXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChm
YWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5B
TF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAKaW5kZXggNjk0YzNiZC4uYzNkZTk1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmNwcApAQCAtNiwxNTkgKzYsNDkgQEAKIAogI2luY2x1ZGUgIklucHV0Lmgi
CiAKLSNpbmNsdWRlIDxjc3RkaW8+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdHJpbmc+
CiAKIG5hbWVzcGFjZSBwcAogewogCi1JbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotICAgIDogbUNvdW50KGNvdW50
KSwKLSAgICAgIG1TdHJpbmcoc3RyaW5nKSwKLSAgICAgIG1MZW5ndGgobGVuZ3RoKSwKLSAgICAg
IG1JbmRleCgtMSksCi0gICAgICBtU2l6ZSgwKSwKLSAgICAgIG1FcnJvcihrRXJyb3JOb25lKSwK
LSAgICAgIG1TdGF0ZShrU3RhdGVJbml0aWFsKQorSW5wdXQ6OklucHV0KCkgOiBtQ291bnQoMCks
IG1TdHJpbmcoMCkKIHsKLSAgICBBU1NFUlQobUNvdW50ID49IDApOwotICAgIHN3aXRjaFRvTmV4
dFN0cmluZygpOwogfQogCi1ib29sIElucHV0Ojplb2YoKSBjb25zdAorSW5wdXQ6OklucHV0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkg
OgorICAgIG1Db3VudChjb3VudCksCisgICAgbVN0cmluZyhzdHJpbmcpCiB7Ci0gICAgQVNTRVJU
KG1JbmRleCA8PSBtQ291bnQpOwotICAgIHJldHVybiBtSW5kZXggPT0gbUNvdW50OworICAgIGFz
c2VydChtQ291bnQgPj0gMCk7CisgICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGludCBsZW4gPSBs
ZW5ndGggPyBsZW5ndGhbaV0gOiAtMTsKKyAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2sobGVuIDwg
MCA/IHN0cmxlbihtU3RyaW5nW2ldKSA6IGxlbik7CisgICAgfQogfQogCi1pbnQgSW5wdXQ6OnJl
YWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSkKK2ludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGlu
dCBtYXhTaXplKQogewotICAgIGludCBucmVhZCA9IDA7Ci0gICAgaW50IHN0YXJ0SW5kZXggPSBt
SW5kZXg7Ci0gICAgLy8gS2VlcCByZWFkaW5nIHVudGlsIHRoZSBidWZmZXIgaXMgZnVsbCBvciB0
aGUgY3VycmVudCBzdHJpbmcgaXMgZXhoYXVzdGVkLgotICAgIHdoaWxlICgobUluZGV4ID09IHN0
YXJ0SW5kZXgpICYmIChucmVhZCA8IGJ1ZlNpemUpKQorICAgIGludCBuUmVhZCA9IDA7CisgICAg
d2hpbGUgKChuUmVhZCA8IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5kZXggPCBtQ291bnQpKQog
ICAgIHsKLSAgICAgICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0gICAgICAgIGlmIChjID09IEVPRikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZSA9PSBrU3RhdGVCbG9ja0NvbW1lbnQp
Ci0gICAgICAgICAgICAgICAgbUVycm9yID0ga0Vycm9yVW5leHBlY3RlZEVPRjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtU3RhdGUpCisgICAgICAg
IGludCBzaXplID0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdIC0gbVJlYWRMb2MuY0luZGV4Owor
ICAgICAgICBzaXplID0gc3RkOjptaW4oc2l6ZSwgbWF4U2l6ZSk7CisgICAgICAgIG1lbWNweShi
dWYgKyBuUmVhZCwgbVN0cmluZ1ttUmVhZExvYy5zSW5kZXhdICsgbVJlYWRMb2MuY0luZGV4LCBz
aXplKTsKKyAgICAgICAgblJlYWQgKz0gc2l6ZTsKKyAgICAgICAgbVJlYWRMb2MuY0luZGV4ICs9
IHNpemU7CisKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVhY2hlZCB0aGUgZW5k
IG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2MuY0luZGV4ID09IG1MZW5n
dGhbbVJlYWRMb2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAgIGNhc2Uga1N0YXRlSW5p
dGlhbDoKLSAgICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChwZWVrQ2hhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
Jy8nOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJy8nLgotICAgICAg
ICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAg
ICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRl
ID0ga1N0YXRlQmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIGNvbW1l
bnQuCi0gICAgICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlTGluZUNvbW1l
bnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRl
SW5pdGlhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
Y2FzZSBrU3RhdGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgKHBl
ZWtDaGFyKCkgPT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRDaGFy
KCk7ICAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSAnICc7ICAv
LyBSZXBsYWNlIGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIG1TdGF0
ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFrcyBhcmUgbmV2ZXIgc2tp
cHBlZC4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKyttUmVhZExvYy5z
SW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwogICAgICAgICB9CiAgICAg
fQotCi0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6OmdldENoYXIoKQotewotICAg
IGlmIChlb2YoKSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdb
bUluZGV4XTsKLSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAgIC8vIFN3aXRjaCB0byBu
ZXh0IHN0cmluZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVhZC4KLSAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIgcmVhZCBmcm9tIGVt
cHR5IHN0cmluZy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgIGlmICgoKGxlbmd0aCA8
IDApICYmIChzdHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAoKGxlbmd0aCA+IDApICYm
IChtU2l6ZSA9PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0KLSAg
ICByZXR1cm4gYzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17Ci0gICAgLy8gU2F2ZSB0
aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9IG1JbmRleDsKLSAgICBp
bnQgc2l6ZSA9IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwotCi0gICAgLy8gUmVzdG9y
ZSByZWFkIHBvc2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAgIG1TaXplID0gc2l6ZTsK
LSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0U3RyaW5nKCkKLXsK
LSAgICBBU1NFUlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXplID0gMDsKLSAgICBkbwot
ICAgIHsKLSAgICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigpICYmIGlzU3RyaW5n
RW1wdHkobUluZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1wdHkoaW50IGluZGV4
KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIg
PSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5kZXgp
OwotICAgIHJldHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwgMCkgJiYgKHN0clswXSA9
PSAnXDAnKSk7Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGludCBpbmRleCkKLXsKLSAg
ICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVuZ3RoID8gbUxlbmd0aFtp
bmRleF0gOiAtMTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKaW5kZXggNWExYjVkMS4uZGFjNzM0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCkBAIC03LDY2ICs3LDQwIEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRf
SF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7CiAKLS8vIFJlYWRzIHRo
ZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4KLS8vIFN0cmlwcyBjb21t
ZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCiBjbGFzcyBJbnB1dAog
ewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0gICAgZW51bSBFcnJv
cgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vycm9yVW5leHBlY3RlZEVP
RgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtRXJyb3I7IH0KLQot
ICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHN0cmluZyBjdXJyZW50bHkgYmVpbmcgc2Nhbm5l
ZC4KLSAgICBpbnQgc3RyaW5nSW5kZXgoKSBjb25zdCB7IHJldHVybiBtSW5kZXg7IH0KLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgRU9GIGhhcyByZWFjaGVkLgotICAgIGJvb2wgZW9mKCkgY29uc3Q7
CisgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbUNvdW50OyB9CisgICAgY29uc3QgY2hh
ciogc3RyaW5nKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbVN0cmluZ1tpbmRleF07IH0KKyAg
ICBpbnQgbGVuZ3RoKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aFtpbmRleF07IH0K
IAotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBpbnRvIGJ1Zi4KLSAgICAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotICAgIC8vIEl0IHJlcGxh
Y2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRzIG9ubHkgb25lIHN0cmlu
ZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMgb3Bwb3J0dW5pdHkgdG8g
dXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5pbmdmdWwgZGlhZ25vc3Rp
YyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKTsKKyAgICBp
bnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0ZToKLSAgICBlbnVtIFN0
YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBrU3RhdGVJbml0aWFsLAot
ICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRlQmxvY2tDb21tZW50Ci0g
ICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50
IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hhcigpOwotICAgIGludCBw
ZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0byB0aGUgbmV4dCBub24t
ZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgc3Ry
aW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0eS4KLSAgICBib29sIGlz
U3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUg
Z2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgbnVsbC10
ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChpbnQgaW5kZXgpOworICAg
ICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9CisgICAgfTsKKyAgICBj
b25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1SZWFkTG9jOyB9CiAKKyAg
cHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50OwogICAgIGNvbnN0IGNoYXIq
IGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsKLQotICAgIC8vIEN1cnJl
bnQgcmVhZCBwb3NpdGlvbi4KLSAgICBpbnQgbUluZGV4OyAgIC8vIEluZGV4IG9mIHN0cmluZyBj
dXJyZW50bHkgYmVpbmcgc2Nhbm5lZC4KLSAgICBpbnQgbVNpemU7ICAgIC8vIFNpemUgb2Ygc3Ry
aW5nIGFscmVhZHkgc2Nhbm5lZC4KKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7CiAKLSAg
ICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBtRXJyb3I7Ci0gICAgU3Rh
dGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2M2NjNlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApAQCAtMCwwICsx
LDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkxleGVyLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitMZXhlcjo6fkxleGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
Yjg1Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApAQCAtMCwwICsxLDI1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgVG9rZW47CisKK2NsYXNzIExleGVyCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5MZXhl
cigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pID0gMDsKK307CisKK30g
IC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCmluZGV4IGZjY2NhOTYuLmIyZTMwODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKQEAgLTYsMzkgKzYsMTcgQEAKIAogI2lu
Y2x1ZGUgIk1hY3JvLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotTWFjcm86
Ok1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAg
ICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICBUb2tlblZlY3Rv
ciogcmVwbGFjZW1lbnRzKQotICAgIDogbVR5cGUodHlwZSksCi0gICAgICBtTmFtZShuYW1lKSwK
LSAgICAgIG1QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLAotICAgICAgbVJlcGxhY2VtZW50cyhyZXBs
YWNlbWVudHMpCi17Ci19Ci0KLU1hY3JvOjp+TWFjcm8oKQorYm9vbCBNYWNybzo6ZXF1YWxzKGNv
bnN0IE1hY3JvJiBvdGhlcikgY29uc3QKIHsKLSAgICBkZWxldGUgbU5hbWU7Ci0KLSAgICBpZiAo
bVBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1QYXJhbWV0ZXJzLT5i
ZWdpbigpLCBtUGFyYW1ldGVycy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1Q
YXJhbWV0ZXJzOwotICAgIH0KLQotICAgIGlmIChtUmVwbGFjZW1lbnRzKQotICAgIHsKLSAgICAg
ICAgc3RkOjpmb3JfZWFjaChtUmVwbGFjZW1lbnRzLT5iZWdpbigpLCBtUmVwbGFjZW1lbnRzLT5l
bmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVJlcGxhY2VtZW50czsKLSAgICB9Cisg
ICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90
aGVyLm5hbWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMp
ICYmCisgICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKIH0K
IAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAppbmRleCBlMjQz
MzA2Li43ZWMwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw0NSArNywzOCBAQAogI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1
ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
VG9rZW4uaCIKLQogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9rZW47
CisKK3N0cnVjdCBNYWNybwogewotICBwdWJsaWM6CiAgICAgZW51bSBUeXBlCiAgICAgewogICAg
ICAgICBrVHlwZU9iaiwKICAgICAgICAga1R5cGVGdW5jCiAgICAgfTsKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNl
KSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhj
b25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBv
aW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAg
ICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3Rv
ciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3Qg
VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7
IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0K
LSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3Rv
ciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9v
bCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlw
ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAg
ICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIHBwCi0j
ZW5kaWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFwPHN0
ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDE1NGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCkBAIC0wLDAgKzEs
MzY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVz
cGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7CisgcHVibGlj
OgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisgICAgVG9r
ZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5zLT5zd2Fw
KG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlmIChtSXRl
ciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+cmVzZXQo
KTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIrKzsKKyAg
ICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBUb2tlblZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4
cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1Nl
dCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4cGFuZGVy
Ojp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkp
IHBvcE1hY3JvKCk7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRva2VuKTsKKwor
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVkKCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgICAgICBpZiAoaXRlciA9PSBtTWFj
cm9TZXQtPmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY29uc3QgTWFjcm8m
IG1hY3JvID0gaXRlci0+c2Vjb25kOworICAgICAgICBpZiAobWFjcm8uZGlzYWJsZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIElmIGEgcGFydGljdWxhciB0b2tlbiBpcyBub3QgZXhwYW5k
ZWQsIGl0IGlzIG5ldmVyIGV4cGFuZGVkLgorICAgICAgICAgICAgdG9rZW4tPnNldEV4cGFuc2lv
bkRpc2FibGVkKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpICYmICFpc05leHRUb2tlbkxlZnRQ
YXJlbigpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdG9rZW4gaW1tZWRpYXRl
bHkgYWZ0ZXIgdGhlIG1hY3JvIG5hbWUgaXMgbm90IGEgJygnLAorICAgICAgICAgICAgLy8gdGhp
cyBtYWNybyBzaG91bGQgbm90IGJlIGV4cGFuZGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBwdXNoTWFjcm8obWFjcm8sICp0b2tlbik7CisgICAgfQorfQorCit2
b2lkIE1hY3JvRXhwYW5kZXI6OmdldFRva2VuKFRva2VuKiB0b2tlbikKK3sKKyAgICBpZiAobVJl
c2VydmVUb2tlbi5nZXQoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9ICptUmVzZXJ2ZVRva2Vu
OworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBGaXJzdCBwb3AgYWxsIGVtcHR5IG1hY3JvIGNvbnRleHRzLgorICAgIHdoaWxl
ICghbUNvbnRleHRTdGFjay5lbXB0eSgpICYmIG1Db250ZXh0U3RhY2suYmFjaygpLT5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgcG9wTWFjcm8oKTsKKyAgICB9CisKKyAgICBpZiAoIW1Db250ZXh0
U3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9IG1Db250ZXh0U3RhY2suYmFj
aygpLT5nZXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxleGVyLT5sZXgo
dG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjp1bmdldFRva2VuKGNvbnN0
IFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOwor
ICAgICAgICBjb250ZXh0LT51bmdldCgpOworICAgICAgICBhc3NlcnQoY29udGV4dC0+aW5kZXgg
Pj0gMCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5k
ZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFt
UmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9r
ZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5M
ZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7CisK
KyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOworICAgIHVuZ2V0VG9rZW4odG9r
ZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNo
TWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmllcikKK3sKKyAg
ICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAgICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5z
aW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURF
TlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudmFsdWUgPT0gbWFjcm8ubmFtZSk7CisK
KyAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworICAgIGlmICghZXhwYW5kTWFj
cm8obWFjcm8sIGlkZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5zaW9uIHVudGlsIGl0IGlz
IHBvcHBlZCBvZmYgdGhlIHN0YWNrLgorICAgIG1hY3JvLmRpc2FibGVkID0gdHJ1ZTsKKworICAg
IE1hY3JvQ29udGV4dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7CisgICAgY29udGV4dC0+
bWFjcm8gPSAmbWFjcm87CisgICAgY29udGV4dC0+cmVwbGFjZW1lbnRzLnN3YXAocmVwbGFjZW1l
bnRzKTsKKyAgICBtQ29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygpCit7CisgICAgYXNzZXJ0
KCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0g
bUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgbUNvbnRleHRTdGFjay5wb3BfYmFjaygpOworCisg
ICAgYXNzZXJ0KGNvbnRleHQtPmVtcHR5KCkpOworICAgIGFzc2VydChjb250ZXh0LT5tYWNyby0+
ZGlzYWJsZWQpOworICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9IGZhbHNlOworICAgIGRl
bGV0ZSBjb250ZXh0OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKGNvbnN0
IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9r
ZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVj
dG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIHJlcGxhY2VtZW50cy0+Y2xlYXIoKTsK
KyAgICBpZiAobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCisgICAgeworICAgICAgICBy
ZXBsYWNlbWVudHMtPmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVuZCgpKTsKKworICAgICAg
ICBpZiAobWFjcm8ucHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtMaW5lID0gIl9fTElORV9fIjsKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7CisKKyAgICAgICAgICAgIGFzc2Vy
dChyZXBsYWNlbWVudHMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIFRva2VuJiByZXBsID0g
cmVwbGFjZW1lbnRzLT5mcm9udCgpOworICAgICAgICAgICAgaWYgKG1hY3JvLm5hbWUgPT0ga0xp
bmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7
CisgICAgICAgICAgICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0ZpbGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAg
ICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7CisgICAgICAgICAgICAg
ICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQobWFjcm8udHlwZSA9PSBNYWNy
bzo6a1R5cGVGdW5jKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+IGFyZ3M7CisgICAg
ICAgIGFyZ3MucmVzZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7CisgICAgICAgIGlmICgh
Y29sbGVjdE1hY3JvQXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3MpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlcGxhY2VNYWNyb1BhcmFtcyhtYWNybywgYXJncywg
cmVwbGFjZW1lbnRzKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcGxh
Y2VtZW50cy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxh
Y2VtZW50cy0+YXQoaSk7CisgICAgICAgIGlmIChpID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpbmhlcml0cyB0
aGUgcGFkZGluZworICAgICAgICAgICAgLy8gcHJvcGVydGllcyBvZiB0aGUgaWRlbnRpZmllciB0
b2tlbi4KKyAgICAgICAgICAgIHJlcGwuc2V0QXRTdGFydE9mTGluZShpZGVudGlmaWVyLmF0U3Rh
cnRPZkxpbmUoKSk7CisgICAgICAgICAgICByZXBsLnNldEhhc0xlYWRpbmdTcGFjZShpZGVudGlm
aWVyLmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXBsLmxvY2F0aW9u
ID0gaWRlbnRpZmllci5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFj
cm9Bcmc+KiBhcmdzKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7
CisgICAgYXNzZXJ0KHRva2VuLnR5cGUgPT0gJygnKTsKKworICAgIGFyZ3MtPnB1c2hfYmFjayhN
YWNyb0FyZygpKTsKKyAgICBmb3IgKGludCBvcGVuUGFyZW5zID0gMTsgb3BlblBhcmVucyAhPSAw
OyApCisgICAgeworICAgICAgICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgICAgIGlmICh0b2tl
bi50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVu
dGlmaWVyLnZhbHVlKTsKKyAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAg
ICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2Vu
IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisgICAgICAgIHN3aXRjaCAodG9rZW4u
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgKytvcGVu
UGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAtLW9wZW5QYXJlbnM7CisgICAgICAgICAg
ICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgJywnOgorICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBz
ZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKKyAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0
b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAg
ICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09
IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICAgICAgICAgIGlzQXJnID0gb3Bl
blBhcmVucyAhPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpc0FyZykKKyAgICAgICAgeworICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9
IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3Qg
cGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2Vu
LnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRv
a2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBw
YXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVt
cHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3VtZW50LgorICAgIGlmIChw
YXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3MtPmNsZWFyKCk7CisgICAgfQorICAgIC8vIFZhbGlk
YXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFy
YW1zLnNpemUoKSkKKyAgICB7CisgICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNp
emUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KKyAgICAgICAgICAgIERpYWdub3N0aWNz
OjpNQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RP
T19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVy
LmxvY2F0aW9uLCBpZGVudGlmaWVyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZvcmUgc3Vic3RpdHV0aW9u
LgorICAgIC8vIFRoaXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5IGJl
Zm9yZSB0aGV5IGFyZQorICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1hY3JvIGJvZHkuCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAg
IE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5hdChpKTsKKyAgICAgICAgVG9rZW5MZXhlciBsZXhlcigm
YXJnKTsKKyAgICAgICAgTWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4ZXIsIG1NYWNyb1NldCwg
bURpYWdub3N0aWNzKTsKKworICAgICAgICBhcmcuY2xlYXIoKTsKKyAgICAgICAgZXhwYW5kZXIu
bGV4KCZ0b2tlbik7CisgICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuOjpMQVNUKQor
ICAgICAgICB7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgICAg
IGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNy
byYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxNYWNyb0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7
CisgICAgICAgIGNvbnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAg
ICAgICBpZiAocmVwbC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMu
CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMg
ZXZlcnkgdGltZS4KKyAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0
aCB0aGUgcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gc3RkOjpmaW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVy
cy5iZWdpbigpLCBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnZhbHVlKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpQXJnID0gc3RkOjpkaXN0YW5jZShtYWNyby5w
YXJhbWV0ZXJzLmJlZ2luKCksIGl0ZXIpOworICAgICAgICBjb25zdCBNYWNyb0FyZyYgYXJnID0g
YXJnc1tpQXJnXTsKKyAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgaVJlcGwgPSByZXBsYWNl
bWVudHMtPnNpemUoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRz
LT5lbmQoKSwgYXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNl
bWVudCB0b2tlbiBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBt
YWNybyByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCku
c2V0SGFzTGVhZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKwor
fSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTA0ZWJhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPG1l
bW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
Ik1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVyCit7
CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1h
Y3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgfk1hY3JvRXhw
YW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKKwor
ICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4oY29u
c3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlzTmV4dFRva2VuTGVmdFBhcmVuKCk7CisKKyAg
ICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlm
aWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisKKyAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0
IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVu
dHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFjcm9Bcmc7CisgICAgYm9v
bCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7CisgICAgdm9pZCByZXBsYWNlTWFjcm9Q
YXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICBzdHJ1Y3QgTWFj
cm9Db250ZXh0CisgICAgeworICAgICAgICBjb25zdCBNYWNybyogbWFjcm87CisgICAgICAgIHNp
emVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKwor
ICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgwKSB7IH0KKyAgICAgICAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7
IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRl
eCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9CisgICAgfTsKKworICAg
IExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGlj
cyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tl
bjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNS
T19FWFBBTkRFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNw
cAppbmRleCBlZjQ5ZTU3Li4yMTkwMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5jcHAKQEAgLTYsNDcgKzYsMTA4IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNz
b3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1
ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNv
bnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5j
bHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nv
cigpIDogbUNvbnRleHQoTlVMTCkKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCiB7CisgICAgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2Vu
aXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAg
ICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERp
YWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciog
ZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAg
dG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1h
Y3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigm
ZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1By
ZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIp
Cit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0
aXZlSGFuZGxlcik7CiB9CiAKIFByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCiB7Ci0gICAg
ZGVsZXRlIG1Db250ZXh0OworICAgIGRlbGV0ZSBtSW1wbDsKIH0KIAotYm9vbCBQcmVwcm9jZXNz
b3I6OmluaXQoKQorYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCiB7Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29u
dGV4dDsKLSAgICByZXR1cm4gbUNvbnRleHQtPmluaXQoKTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBt
YWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJlZGVmaW5l
TWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwg
a0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKworICAgIHJl
dHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAot
Ym9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCit2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5l
TWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQogewotICAgIEFTU0VSVCgoY291bnQg
Pj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmlu
ZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CisKKyAgICBUb2tlbiB0b2tlbjsKKyAgICB0
b2tlbi50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKKyAgICB0b2tlbi52YWx1ZSA9IHN0cmVhbS5z
dHIoKTsKIAotICAgIHJlc2V0KCk7CisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8ucHJlZGVm
aW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNy
by5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsK
IAotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZt
VG9rZW5zKTsKKyAgICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsKIH0KIAotdm9pZCBQ
cmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2Vu
KQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBE
ZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOworICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZh
bHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAgICAgIG1JbXBsLT5tYWNy
b0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBw
cmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3Npbmcg
dG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAgICAgICAvLyBkaWFnbm9z
dGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAgICAgICAgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX05V
TUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZh
bGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9
CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuaAppbmRleCA4ODViYjcwLi41ZmUzNWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuaApAQCAtNywzNCArNyw0MSBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
VG9rZW4uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xh
c3MgQ29udGV4dDsKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsK
K3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOwogCiBjbGFzcyBQcmVwcm9j
ZXNzb3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3Nv
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpOwogICAgIH5QcmVwcm9jZXNzb3IoKTsKIAotICAgIGJvb2wgaW5pdCgpOwotCi0gICAg
Ym9vbCBwcm9jZXNzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7Ci0gICAgVG9rZW5JdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1Ub2tlbnMuYmVnaW4oKTsgfQotICAgIFRva2VuSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbVRva2Vucy5lbmQoKTsgfQorICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBv
ZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmlu
Zzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVu
Z3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVu
Z3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVk
LgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRz
IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2gg
b2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxl
bWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisg
ICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9v
bCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgorICAgIHZvaWQgcHJl
ZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKKworICAgIHZvaWQgbGV4
KFRva2VuKiB0b2tlbik7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUHJlcHJvY2Vzc29yKTsKLQotICAgIC8vIFJlc2V0IHRvIGluaXRpYWxpemVkIHN0YXRlLgot
ICAgIHZvaWQgcmVzZXQoKTsKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJv
Y2Vzc29yKTsKIAotICAgIENvbnRleHQqIG1Db250ZXh0OwotICAgIFRva2VuVmVjdG9yIG1Ub2tl
bnM7ICAvLyBPdXRwdXQuCisgICAgUHJlcHJvY2Vzc29ySW1wbCogbUltcGw7CiB9OwogCiB9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODI2MTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworCituYW1lc3BhY2UgcHAK
K3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZp
bGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZp
bGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmls
ZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQorCisgICAgaW50IGZpbGU7CisgICAg
aW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5l
cXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiAhbGhz
LmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uY3BwCmluZGV4IGEyZTc1OWMuLjk2MDM4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKQEAgLTYsNTAgKzYsNTYgQEAKIAogI2luY2x1ZGUgIlRva2VuLmgiCiAKLSNpbmNsdWRl
ICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZVNpemUgPSAx
NjsgIC8vIGluIGJpdHMuCi1zdGF0aWMgY29uc3QgaW50IGtMb2NhdGlvbkxpbmVNYXNrID0gKDEg
PDwga0xvY2F0aW9uTGluZVNpemUpIC0gMTsKLQogbmFtZXNwYWNlIHBwCiB7CiAKLVRva2VuOjpM
b2NhdGlvbiBUb2tlbjo6ZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKQordm9pZCBU
b2tlbjo6cmVzZXQoKQogewotICAgIHJldHVybiAoZmlsZSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkg
fCAobGluZSAmIGtMb2NhdGlvbkxpbmVNYXNrKTsKKyAgICB0eXBlID0gMDsKKyAgICBmbGFncyA9
IDA7CisgICAgbG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgIHZhbHVlLmNsZWFyKCk7
CiB9CiAKLXZvaWQgVG9rZW46OmRlY29kZUxvY2F0aW9uKExvY2F0aW9uIGxvYywgaW50KiBsaW5l
LCBpbnQqIGZpbGUpCitib29sIFRva2VuOjplcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dAogewotICAgIGlmIChmaWxlKSAqZmlsZSA9IGxvYyA+PiBrTG9jYXRpb25MaW5lU2l6ZTsKLSAg
ICBpZiAobGluZSkgKmxpbmUgPSBsb2MgJiBrTG9jYXRpb25MaW5lTWFzazsKKyAgICByZXR1cm4g
KHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKGZsYWdzID09IG90aGVyLmZsYWdz
KSAmJgorICAgICAgICAgICAobG9jYXRpb24gPT0gb3RoZXIubG9jYXRpb24pICYmCisgICAgICAg
ICAgICh2YWx1ZSA9PSBvdGhlci52YWx1ZSk7CiB9CiAKLVRva2VuOjpUb2tlbihMb2NhdGlvbiBs
b2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSkKLSAgICA6IG1Mb2NhdGlvbihs
b2NhdGlvbiksCi0gICAgICBtVHlwZSh0eXBlKSwKLSAgICAgIG1WYWx1ZSh2YWx1ZSkKK3ZvaWQg
VG9rZW46OnNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCkKIHsKKyAgICBpZiAoc3RhcnQpCisg
ICAgICAgIGZsYWdzIHw9IEFUX1NUQVJUX09GX0xJTkU7CisgICAgZWxzZQorICAgICAgICBmbGFn
cyAmPSB+QVRfU1RBUlRfT0ZfTElORTsKIH0KIAotVG9rZW46On5Ub2tlbigpIHsKLSAgICBkZWxl
dGUgbVZhbHVlOwordm9pZCBUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpCit7
CisgICAgaWYgKHNwYWNlKQorICAgICAgICBmbGFncyB8PSBIQVNfTEVBRElOR19TUEFDRTsKKyAg
ICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5IQVNfTEVBRElOR19TUEFDRTsKK30KKwordm9pZCBU
b2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKQoreworICAgIGlmIChkaXNh
YmxlKQorICAgICAgICBmbGFncyB8PSBFWFBBTlNJT05fRElTQUJMRUQ7CisgICAgZWxzZQorICAg
ICAgICBmbGFncyAmPSB+RVhQQU5TSU9OX0RJU0FCTEVEOwogfQogCiBzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikKIHsKLSAgICBz
d2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElOVF9DT05TVEFOVDoKLSAg
ICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5USUZJRVI6Ci0gICAgICAg
IG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50eXBlKCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgpKQorICAgICAg
ICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwogICAgIHJldHVybiBvdXQ7
CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi41MjMxMDIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmgKQEAgLTcsNDIgKzcsOTQgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwogCisjaW5j
bHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogCi0j
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJTb3VyY2VMb2NhdGlvbi5o
IgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVjdCBUb2tlbgogewotICBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3RhdGljIExvY2F0aW9uIGVu
Y29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3RhdGljIHZvaWQgZGVjb2Rl
TG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSk7CisgICAgZW51bSBU
eXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAotICAgIC8vIFRha2VzIG93
bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBl
LCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAgICAgICBJREVOVElGSUVS
ID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtTG9jYXRp
b247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qg
c3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisgICAgICAgIENP
TlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMsCisgICAgICAgIE9QX0RF
QywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAgIE9QX0xFLAor
ICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAorICAgICAgICBP
UF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAgIE9QX0FERF9B
U1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9BU1NJR04sCisg
ICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisgICAgICAgIE9Q
X0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAgIE9QX0FORF9B
U1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FTU0lHTiwKIAot
ICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcq
IG1WYWx1ZTsKKyAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyB0b2tlbiB0eXBlcy4KKyAgICAgICAg
Ly8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgYnkgdGhlIHByZXByb2Nlc3NvciBpbnRlcm5hbGx5Lgor
ICAgICAgICAvLyBQcmVwcm9jZXNzb3IgY2xpZW50cyBtdXN0IG5vdCBkZXBlbmQgb3IgY2hlY2sg
Zm9yIHRoZW0uCisgICAgICAgIFBQX0hBU0gsCisgICAgICAgIFBQX05VTUJFUiwKKyAgICAgICAg
UFBfT1RIRVIKKyAgICB9OworICAgIGVudW0gRmxhZ3MKKyAgICB7CisgICAgICAgIEFUX1NUQVJU
X09GX0xJTkUgICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJTkdfU1BBQ0UgID0gMSA8PCAx
LAorICAgICAgICBFWFBBTlNJT05fRElTQUJMRUQgPSAxIDw8IDIKKyAgICB9OworCisgICAgVG9r
ZW4oKSA6IHR5cGUoMCksIGZsYWdzKDApIHsgfQorCisgICAgdm9pZCByZXNldCgpOworICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdG9rZW4gb24gbGluZS4KKyAgICAvLyBJdCBkaXNyZWdh
cmRzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgYm9vbCBhdFN0YXJ0T2ZMaW5lKCkgY29u
c3QgeyByZXR1cm4gKGZsYWdzICYgQVRfU1RBUlRfT0ZfTElORSkgIT0gMDsgfQorICAgIHZvaWQg
c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KTsKKworICAgIGJvb2wgaGFzTGVhZGluZ1NwYWNl
KCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgSEFTX0xFQURJTkdfU1BBQ0UpICE9IDA7IH0KKyAg
ICB2b2lkIHNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKTsKKworICAgIGJvb2wgZXhwYW5z
aW9uRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBFWFBBTlNJT05fRElTQUJMRUQp
ICE9IDA7IH0KKyAgICB2b2lkIHNldEV4cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSk7CisK
KyAgICBpbnQgdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgU291cmNlTG9jYXRp
b24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CiB9OwogCi10eXBlZGVmIHN0ZDo6
dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVmIFRva2VuVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tl
biYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7
Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9r
ZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KIAogZXh0ZXJuIHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRv
a2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JhOGJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzNDUgQEAKKyNsaW5lIDE2ICIuL1Rva2VuaXplci5s
IgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5l
cmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisKKworI2xpbmUgMTMgIi4vVG9rZW5pemVy
LmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNh
bCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhf
U1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmly
c3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMg
aXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4
IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmlu
ZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkg
c3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9O
X18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYg
eW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8K
KyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9T
IDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhf
aW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBm
bGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGlu
dDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vs
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
ZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgI2RlZmluZSBZWV9MRVNT
X0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVk
IGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3Mo
bikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJ
CVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwK
Kwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0
X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZp
bmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRp
ZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9p
bnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisK
KwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZv
ciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKwor
CS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRp
bmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdo
ZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwK
KwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBp
dCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8q
IFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFu
ZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVz
ZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZl
dGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUg
YmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZl
IG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0
X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisg
ICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8q
IFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRo
ZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlf
YnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVG
RkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3Rp
bGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZ
WV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVh
ZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxs
IGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAq
IHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUg
RU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgcHByZXN0YXJ0KCkp
LCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9p
bnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJf
RU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMg
aW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRl
cyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUiLgorICoKKyAqIFJldHVybnMg
dGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9C
VUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2FtZSBhcyBwcmV2aW91cyBtYWNy
bywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAor
ICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
CisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlu
cHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVy
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9C
VUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQg
cHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworc3RhdGljIHZvaWQg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lk
IHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lk
IHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1
ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZ
WV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0
IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICpwcGFs
bG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqcHByZWFsbG9jICh2
b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lk
ICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3Jl
YXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5
c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9i
b2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2Jv
bCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmlu
ZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5
eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91
c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNj
YW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBo
YXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAt
IHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlf
YnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBc
CisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDM3Cisj
ZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGlu
IHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3Ry
dWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2lu
dDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0
Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzgsICAg
MzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDksCisgICAgICAgIDksICAgMzMsICAg
MzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisgICAgICAgIDQs
ICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsICAgMjMsCisg
ICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEs
ICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAg
MTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYs
ICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAg
IDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgIDAK
KyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAg
IHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA1
LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAgICA5LAorICAgICAgICA5LCAg
IDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE2LAorICAg
ICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5LCAgICA5LCAg
IDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIx
LCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAorICAgICAgICA5LCAgICAxLCAgICA5LCAg
IDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAgICAgMjIsICAg
MjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAg
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYsICAgIDksICAgIDksICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsgICAwLAorICAg
ICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxCisg
ICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5XSA9CisgICAg
eyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAgMjYsICAxNTgsICAxNTksICAxNTAsICAx
NTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIsICAgMjMsICAxNTksICAxMTEsICAgMjEs
ICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAgNDYsICAgMzYsICAxMDAsICAgNDUsICAg
IDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQsCisgICAgICAgNjUsICAgNzMsICAxNTks
ICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksCisgICAgICAxNTksICAx
NTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMsICAgMzIsICAgNTYsICAgODMsCisgICAg
ICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAxNTksICAxNTksICAgMTksICAgIDAsICAx
NTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAsICAxNTksICAxNTksICAgOTgsICAgIDAs
ICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAgNTIsICAgOTAsICAgODAsICAxNTksICAx
NTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAsICAxMjMsICAxNTksICAxNDAsICAgMjgs
ICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0LCAgIDg0LCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDIwLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLAorICAg
ICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIw
LCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgz
LCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAg
IDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAgIDgzLCAgIDgz
LCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDYs
ICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCisg
ICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMs
ICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjksICAg
MzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzksICAgNTksICAgMzEsICAgNjAsICAgMzEs
ICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAgNjEsICAgMzcsICAgNDUsICAgNDIsICAg
NDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYsCisgICAgICAgNDgsICAgNDgsICAgNDks
ICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAgNTAsICAgNTIsCisgICAgICAgNTMsICAg
NTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEsICAgODEsICAgODEsICAgNTAsCisgICAg
ICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgsICAgNjYsICAg
NTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcsICAgNjcsICAgNTAsICAgNjUsICAgNzEs
ICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIsICAgNTAsICAg
NTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4MywgICA4MywgICA1MCwgICA1MCwgICA1
MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA2Nywg
ICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAgICA3OCwgICA3
OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAzOCwKKyAgICAg
ICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4
MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAzNCwgICAzMywg
ICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3
NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAgICA0LAorICAg
ICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAg
IDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5
LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0
LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAg
IDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAgIDUyLCAgIDQz
LCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAg
IDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUw
LAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAgNTEsICAgNzks
ICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcsICAgNzgsICAg
NzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjksICAgNjksICAgODAsICAgODAsICAgNjks
ICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisgICAgICAgMTIsICAgNzIsICAgNzIsICAg
NzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAgIDksICAgODYsICAgODYsCisgICAgICAg
ODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgsICAgODgsICAgIDUsICAgODMsICAgODMs
CisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAg
ICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQn
bGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLwor
I2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1v
cmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAK
KyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVw
cm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
KworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRl
ZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2Zh
dGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21p
c3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwor
dHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQg
eXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5l
IHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7
IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxl
KDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5z
Y2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlu
cHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2Nhbkxv
Yy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2Nhbkxv
Yy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZp
bmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJh
LT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5l
IENPTU1FTlQgMQorCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4
dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIu
ICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0
b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAv
KiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5v
bi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAg
IHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4g
Ki8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFj
ay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sg
YXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgaW50IHl5X25fY2hh
cnM7CisgICAgaW50IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5
X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3Rh
Y2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAg
Y2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9s
ZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7
CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5p
dF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBo
ZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9t
IGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXln
LT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisg
ICAgCitpbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5p
dF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwor
CisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNp
YmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQg
cHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFn
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNl
cl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK3ZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCitpbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0
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
aW50IGMgPSAnKic7IFwKKwkJaW50IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAm
JiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24g
KSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1
ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSAp
IFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsg
XAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAor
CQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYg
ZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsg
XAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsg
XAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWlu
KTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVy
IHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAq
IHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRo
YXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFj
aGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRl
cm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMg
Ynkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFS
VF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisv
KiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZp
bmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQor
I2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90
b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIg
LSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAq
LworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBp
bnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNM
IGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlf
REVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxl
LCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lm
bmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JS
RUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9T
RVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24g
d2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9z
dGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9i
cDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLworCisg
ICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwor
CisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZk
ZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWct
Pnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAq
LworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQg
KQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewor
CQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQor
CisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8K
KwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4
dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRz
IHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBj
dXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkg
eXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQor
CQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlvbjoJ
LyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJ
CXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwor
CQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2Yg
WVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJ
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNvbW1l
bnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICov
CisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitjYXNl
IDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisK
KwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVf
U0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFM
KTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJhLT5s
aW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOworfQor
CVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCVlZ
X0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKwlZ
WV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJ
VH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50
ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05V
TUJFUjsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5D
OworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZ
X0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVB
SworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAy
OToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitj
YXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
eXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0
OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAg
IHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgorY2Fz
ZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90
IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBF
T0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1
dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7
CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Cisg
ICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBX
ZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQor
ICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBz
SW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4
TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwor
ICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAg
IGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywg
eXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAg
ICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVf
U0VUVVAKK0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJewor
CQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAq
LworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+
eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JF
X0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5n
IGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0
aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0
IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2Ug
aGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZG
RVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRv
IHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4g
cG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlu
cHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
bnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUg
d2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUg
Zmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJl
YWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChz
aW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQt
b2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBp
bnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlzIHdh
cyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJ
CXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5
c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRo
ZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNl
IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkg
b2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50
byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAq
LworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0
ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhl
IE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQll
bHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09G
X0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsK
KworCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBi
ZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkg
dG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkg
KiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBm
bGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSBy
ZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJ
CQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3Qg
PSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQor
CisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0K
KworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXlnLT55eV9jX2J1Zl9wID0K
KwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwor
CisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVPQl9BQ1Rf
TEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9
IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlk
ZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJu
YWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQgb2YgcHBs
ZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVm
ZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVP
Ql9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBz
Y2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBl
bmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRf
cHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKwor
CWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRhbCBm
bGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOworCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQorCQl7
IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwor
CQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09
IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0Is
IHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1cm4g
RU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRj
aGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4K
KwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJLyog
VHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRv
IHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVy
X3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9Q
RU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7CisKKwll
bHNlCisJCXsKKwkJCWludCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxlICggbnVtX3Rv
X3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3Jv
dyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVm
ZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOworCisJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlp
bnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9
IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxz
ZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIg
KikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJcHBy
ZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5l
ciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24g
aXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAhIGItPnl5X2NoX2J1ZiAp
CisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBi
dWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZb
eXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOworCisJCQl9
CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQorCQkJbnVtX3RvX3Jl
YWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLworCQlZ
WV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9f
bW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOworCisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
KwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsKKwkJaWYgKCBudW1iZXJf
dG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRf
T0ZfRklMRTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKKwkJCX0KKworCQllbHNl
CisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJ
Tkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUp
ID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQg
dGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5
eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5
eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCXl5Zy0+eXlf
bl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBj
aGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCisJ
CXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJ
KCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJ
CXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwor
CQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsK
KwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJh
bnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisg
KiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3Rh
dGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5
eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJ
cmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5k
aW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
KwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQor
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7CisKKwlyZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJh
Y3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhl
IEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhl
biB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5
X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9u
X2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJ
aW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsreXln
LT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMg
aGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3Vt
dWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkg
KiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0
IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgor
CQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9C
X0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1
cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxMVEhS
T1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKKworCQkJCQlpZiAoICEg
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7Cisj
aWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNl
CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNh
c2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9
ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNo
YXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8K
Kwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOwor
fQorI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dp
dGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEg
cmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRp
b24gdG8gQGMgSU5JVElBTCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1
dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JV
RkZFUiApeworICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5pdF9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZm
ZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9zd2l0Y2hf
dG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBl
bnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVyX3N0YXRlKCk7
CisJICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0g
bmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7
CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBz
d2l0Y2ggZHVyaW5nCisJICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5
IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNh
bGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJ
ICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMg
dm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1
dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoq
IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJh
bSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBi
dWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0
ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2Ny
ZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2No
X2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJl
Y2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4K
KwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsg
MiAseXlzY2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWIt
Pnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5u
ZXIpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFy
YW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZGVsZXRlX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlm
ICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyog
Tm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVy
ICkKKwkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwlwcGZy
ZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5p
dGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQg
bW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSBw
cHJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZl
ciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
CisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nh
bm5lcik7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9
IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1
ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRo
cm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qg
d2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAh
PSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAg
ICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxs
IGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUg
Y2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3Vh
bGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
ICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKwor
CWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhl
IGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRo
YXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1
Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwor
ICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0
YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3Rh
dGUuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQg
cHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKwor
CXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBj
b3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
KwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyog
T25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYg
KFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20gcHBf
c3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
Kwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVz
IGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBu
ZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJ
cHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JV
RkZFUikgeworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBz
dGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBs
ZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaW50IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+
eXlfYnVmZmVyX3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAy
IGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJ
ICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51
bV90b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQo
eXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1f
dG9fYWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9
CisKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBh
IHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93
IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsg
Z3Jvd19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKiopcHByZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJ
bnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQks
IHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2so
KSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55
eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSBudW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIg
YnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBz
aXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9j
YXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5f
YnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAg
ICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3Np
emUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVh
dmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVS
X1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5u
ZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAy
OwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+
eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1
dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNf
aW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIg
PSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJcHBfc3dpdGNo
X3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRv
IHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFy
YW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMg
dGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgcHBfc2Nhbl9i
eXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJu
IHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoq
IFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRo
ZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBh
IGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFy
YW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBh
IGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVG
RkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsK
KwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9y
eSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICov
CisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNj
YW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXli
eXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNf
bGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwli
ID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9G
QVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQn
cyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAor
CSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAx
OworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZ
X0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5
Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAkodm9pZCkgZnBy
aW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwor
fQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4g
Ki8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJ
CS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQg
eXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJ
eXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5
X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAg
KQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBt
ZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2Fu
bmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VY
VFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVy
biB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9saW5lbm8g
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5U
X0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWxpbmVu
bzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9jb2x1bW4gICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZF
UikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNvbHVtbjsKK30K
KworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9v
dXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsKK30KKworLyoq
IEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50
IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKwor
Y2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBu
ZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUg
ZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJB
X1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRy
YSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIu
CisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYg
YW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZG
RVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0
aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251
bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9u
dW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lk
IHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlz
dHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlf
ZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nh
bm5lcik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRo
ZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5w
dXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVm
ZmVyCisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUg
KiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3Ry
IDsKK30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwor
fQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNU
WVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5
bHZhbDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZ
WUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4g
eXlsbG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJh
bSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwor
fQorICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNp
YWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRo
ZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBh
cyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUg
dGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50
IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95
eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlf
Z2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVy
biAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBt
ZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisg
ICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBw
cGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQs
IGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMg
dGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2lu
dGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAo
YW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBo
YW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGlu
IHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0
aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9U
WVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAg
c3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2Vy
X2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3Ry
dWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9i
YWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3Mg
aW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwor
ICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7
CisgICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxz
KTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7
Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50
cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhf
ZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Cisg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAo
Y2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7
CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9z
dGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBE
ZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47
CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAg
IHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVu
Y2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBw
bGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95
IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2lu
dCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0
aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9D
VVJSRU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNl
bGYuICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRp
dGlvbiBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nh
bm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJl
c2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nh
bm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxp
emF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwor
CisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAg
ICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxM
OworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4K
KyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwly
ZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwor
fQorCit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxv
d2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFy
KiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmlj
IHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFO
U0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2lu
dGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkg
KiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikg
cmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICog
cHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBz
ZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxF
U19OQU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tlbml6
ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4
dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIo
KQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkK
K3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDAp
ICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0g
SW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsK
K30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8g
V2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5
ZmlsZW5vLgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOworfQorCit2b2lkIFRva2Vu
aXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNldF9saW5lbm8obGluZSxt
SGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAg
dG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnZhbHVlLCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRs
ZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5l
KG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5
cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVh
ZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkg
JiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9
PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOwor
ICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNjRhMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1NyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRl
ICJJbnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIg
OiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgewor
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7
CisgICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBs
b2NhdGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0
OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBp
ZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAg
ICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7
CisgICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KTsKKworICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7CisgICAgdm9pZCBzZXRMaW5l
TnVtYmVyKGludCBsaW5lKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
KworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIp
OworICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7CisK
KyAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisgICAgQ29udGV4dCBtQ29u
dGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQw
MWM3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApAQCAtMCwwICsxLDMyOSBAQAorLyoK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmlj
YXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3Vh
bCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBG
SUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0b3B7
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5pemVy
LmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNp
ZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5
eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdtaXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQ
RTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51
c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2Rl
ZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAg
ICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0g
MTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZh
bHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3
aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRy
YS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXgg
PCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNj
YW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNj
YW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8g
PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXll
eHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFw
IG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRn
ZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlw
ZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxu
fFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1Ig
IFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05
XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNU
QU5UICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQ
T05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5l
IGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAg
IC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAg
LyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7
IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENP
TU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXll
eHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7
CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0
dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6
UFBfT1RIRVI7Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJ
TUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0gewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFM
X0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAv
KiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJl
IGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMg
YW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2Et
ekEtWjAtOS5dKikgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9Cisi
LS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
UklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOwor
fQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJe
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwor
e1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJl
dHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFj
ZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+
YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwt
PmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOwor
fQorCis8Kj48PEVPRj4+IHsKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBm
b3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBt
YW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQg
c0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2Nh
bkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5
IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8v
IGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsg
c2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGlu
ZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9j
LT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NU
QVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5
eXRlcm1pbmF0ZSgpOworfQorCislJQorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRv
a2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2Vu
aXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6Omlu
aXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50
ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5w
dXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5l
cigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAg
ICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFj
cm8geXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1uKGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lk
IFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8o
bGluZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQor
eworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5sb2NhdGlv
biwgbUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0
YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0g
dG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNv
bnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsK
K30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUg
PT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlm
IChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3ko
bUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKaW5kZXggNWIz
MmY3MS4uZTljNzBiMSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3Bh
cnNlci5zaApAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jhc2gKLSMgQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAK
LSMgR2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0gcHBfbGV4LmNwcCwgcHBfdGFiLmgs
IGFuZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgR0xTTCBF
UyBwcmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
JDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3BwCitpbnB1dF9maWxlPSRz
Y3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCiBmbGV4IC0tbm9saW5l
IC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHJ1
bl9iaXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkKLW91dHB1dF9oZWFkZXI9
JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfdGFiLmNw
cAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRlZmluZXM9JG91dHB1dF9o
ZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK2lucHV0X2ZpbGU9JHNj
cmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGlu
ZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
IH0KIAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMgR2VuZXJhdGUgcHJlcHJvY2Vzc29y
Ci1ydW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxleCBUb2tlbml6ZXIubCBUb2tlbml6
ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25QYXJzZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHAubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3Y2Ew
NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcC5sCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0
aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0ldG9wewot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0
ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVm
aW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJz
dF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1u
ID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVz
dWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4
U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3Qg
Y2hhciogc3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZl
ci1pbnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJp
c29uLWxvY2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlvbiBwcmVmaXg9InBwIgotJW9wdGlv
biBleHRyYS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFDRSAgICAgIFsgXHRdCi1IQVNIICAg
ICAgICBee0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVow
LTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KLQotREVDSU1BTF9D
T05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgot
SEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCi0KLURJR0lUICAgICAgICAg
ICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KwotRlJB
Q1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKLQot
JSUKLQote0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUo
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9PQko7Ci19Ci17SEFTSH1k
ZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRy
YWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVO
QzsKLX0KLXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJuIEhBU0hfVU5ERUY7IH0KLQote0hB
U0h9aWYgeyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZkZWYgeyByZXR1cm4gSEFTSF9JRkRF
RjsgfQote0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci17SEFTSH1lbHNlIHsg
cmV0dXJuIEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJldHVybiBIQVNIX0VMSUY7IH0KLXtI
QVNIfWVuZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJkZWZpbmVkIiB7IHJldHVybiBERUZJ
TkVEOyB9Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLXtIQVNIfXByYWdt
YSB7IHJldHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0ZW5zaW9uIHsgcmV0dXJuIEhBU0hf
RVhURU5TSU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQote0hB
U0h9bGluZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lERU5USUZJRVJ9IHsKLSAgICB5eWx2
YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJ
REVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVY
QURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmco
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0KLSh7RElHSVR9
K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8p
IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BVTkNUVUFUT1J9IHsgcmV0dXJuIHl5
dGV4dFswXTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3JlIHdoaXRlc3BhY2UgKi8gfQotCi1c
biB7Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07
Ci19Ci0KLTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotCi0lJQotCi1zdGQ6OnN0
cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAg
Ly8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7
SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0Uu
Ci0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09
IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxl
biAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8
fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0
ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19
Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBp
bnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlu
cHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6
a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAg
ICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVM
b2NhdGlvbih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmls
ZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgeXlzZXRfbGluZW5vKHBwOjpUb2tl
bjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQg
PSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJv
cigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5bGV4X2luaXRfZXh0cmEodGhpcywg
Jm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtTGV4
ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigp
Ci17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxleF9kZXN0cm95KG1MZXhlcik7Ci0g
ICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcC55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE5M2FiLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFS
U0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5l
cmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5j
bHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkK
LSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVuYW1lLXByZWZpeD0icHAi
Ci0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3BwOjpDb250ZXh0KiBjb250ZXh0fQotCi0ldW5p
b24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tl
biogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotCi0lewotZXh0ZXJuIGlu
dCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0
YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBw
OjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFz
b24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29u
dGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0ldG9rZW4gSEFTSCBIQVNIX1VOREVGCi0ldG9r
ZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZOREVGIEhBU0hfRUxTRSBIQVNIX0VMSUYgSEFT
SF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9FUlJPUiBIQVNIX1BSQUdNQSBIQVNIX0VYVEVO
U0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0ldG9rZW4gPHN2YWw+IEhBU0hfREVGSU5FX09C
SiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2YWw+IElOVF9DT05TVEFOVCBGTE9BVF9DT05T
VEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4gb3BlcmF0b3IKLSV0eXBlIDx0dmFsPiBjb25k
aXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRsaXN0PiBwYXJhbWV0ZXJfbGlzdCByZXBsYWNl
bWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9rZW5fbGlzdAotJSUKLQotaW5wdXQKLSAgICA6
IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5lCi07Ci0KLWxpbmUKLSAgICA6IHRleHRfbGlu
ZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRleHRfbGluZQotICAgIDogJ1xuJwotICAgIHwg
dG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4cGFuZCBtYWNyb3Mu
Ci0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+b3V0cHV0KCk7Ci0gICAg
ICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQxLT5iZWdpbigpLCAkMS0+ZW5kKCkpOwotICAg
ICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1jb250cm9sX2xpbmUKLSAgICA6IEhBU0ggJ1xu
JwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAg
IGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmos
ICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwgSEFTSF9ERUZJTkVfRlVOQyAnKCcgcGFyYW1l
dGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRl
ZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAkMSwgJDMsICQ1
KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIGNv
bnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAgIH0KLSAgICB8IEhBU0hfSUYgY29uZGl0aW9u
YWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgJDIg
PyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8IEhBU0hfSUZERUYgSURFTlRJRklFUiAnXG4n
IHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNy
b0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGTkRFRiBJREVOVElGSUVSICdcbicg
ewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNy
b0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0VMSUYgY29uZGl0aW9uYWxfbGlzdCAn
XG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0UgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9F
TkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0KTsKLSAgICB9
Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8IEhBU0hfUFJBR01BICdcbicKLSAgICB8IEhB
U0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hfVkVSU0lPTiAnXG4nCi0gICAgfCBIQVNIX0xJ
TkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0Ci0gICAgOiAvKiBlbXB0eSAqLyB7ICQkID0g
TlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1wYXJhbWV0ZXJfbGlzdAotICAgIDogLyogZW1w
dHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihA
MS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkpOwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9s
aXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hf
YmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQzKSk7Ci0gICAg
fQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBjb25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAg
ICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0g
ICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBjb25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsKLQotdG9rZW5f
bGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0g
ICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IHRva2VuX2xpc3QgdG9rZW4g
ewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07
Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBERUZJTkVEIElERU5USUZJRVIgewotICAgIH0K
LSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIgJyknIHsKLSAgICB9Ci0gICAgfCB0b2tlbgot
OwotCi10b2tlbgotICAgIDogb3BlcmF0b3IgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4o
QDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAgIH0KLSAgICB8IElOVF9DT05TVEFOVCB7Ci0g
ICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICQx
KTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpU
b2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgJDEpOwotICAgIH0KLSAgICB8IElE
RU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURF
TlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3BlcmF0b3IKLSAgICA6ICdbJyB7ICQkID0gJ1sn
OyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQotICAgIHwgJzwnIHsgJCQgPSAnPCc7IH0KLSAg
ICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAnKCcgeyAkJCA9ICcoJzsgfQotICAgIHwgJykn
IHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQkID0gJ3snOyB9Ci0gICAgfCAnfScgeyAkJCA9
ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7IH0KLSAgICB8ICcrJyB7ICQkID0gJysnOyB9
Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAgIHwgJy8nIHsgJCQgPSAnLyc7IH0KLSAgICB8
ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScgeyAkJCA9ICclJzsgfQotICAgIHwgJ14nIHsg
JCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0gJ3wnOyB9Ci0gICAgfCAnJicgeyAkJCA9ICcm
JzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0KLSAgICB8ICc9JyB7ICQkID0gJz0nOyB9Ci0g
ICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwgJzonIHsgJCQgPSAnOic7IH0KLSAgICB8ICc7
JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAkJCA9ICcsJzsgfQotICAgIHwgJz8nIHsgJCQg
PSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLCBwcDo6Q29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQotCi12b2lkIHB1c2hDb25k
aXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbikKLXsKLX0K
LQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KQotewotfQot
Ci1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17Ci0gICAgeXlkZWJ1ZyA9
IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUgOiBmYWxzZTsKLX0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3ZTdjYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjI2OCArMCwwIEBACi0jbGluZSAxNiAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0KLQotI2xpbmUg
MTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCIKLQotI2RlZmluZSAgWVlf
SU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBi
eSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFKT1Jf
VkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZM
RVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAK
LSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxh
dGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdp
biBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBl
bmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0
aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5
IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5v
dC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9O
X18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0ICht
YXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlU
X01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50
OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Owot
dHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNo
YXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAK
LXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2ln
bmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBv
ZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4g
ICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUg
SU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJf
TUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5k
aWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3
KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAg
ICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFY
ICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNk
ZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5U
MTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgot
I2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5
NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19j
cGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxp
ZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAq
LwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwotI2lm
IGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZW5kaWYgIC8q
IGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVzICovCi0KLSNp
ZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAotI2Vsc2UKLSNkZWZpbmUg
eXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCi0jZGVm
aW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJs
eSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFy
cmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAotICogd2Ugd2FudCB0
byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQot
ICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBp
bnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KLSNpZm5k
ZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVS
X1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyogRm9yIGNvbnZlbmllbmNl
LCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKLSAgIGFyZSBtYWNy
b3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9y
Ci0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRy
YV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5lIHl5dGV4dCB5eWctPnl5
dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Jz
X2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCi0K
LS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8g
dGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkg
d2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBvZiBCRUdJTi4K
LSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgotCi0vKiBUcmFuc2xh
dGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVy
IGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRF
IGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgWVlfU1RB
UlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCi0K
LS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICov
Ci0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSAr
IDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcg
ZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIg
KQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8qIFNpemUgb2YgZGVmYXVs
dCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0jZGVmaW5lIFlZX0JVRl9T
SVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3Vn
aCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KLSAq
LwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVv
Zih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQot
I2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRlZiBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0IHRo
ZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcwotICAg
ICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxl
c3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4aXN0aW5nIHNj
YW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgcHBsZXguIAotICAgICAqICAg
ICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRy
aWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBh
IG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAqICAgICAgIG5v
cm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qgd29y
dGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAotICAgICAg
ICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0gICAgICAgICAgICAgICAg
Zm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAgIC0t
eXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBSZXR1cm4gYWxsIGJ1
dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJl
YW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAg
ICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGlu
dCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVz
c19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAg
ICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAg
ICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0g
ICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCgg
YywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlf
c2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotI2Rl
ZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0g
ICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAg
ICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBj
dXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1
dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hh
cmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBO
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVP
QgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgaW50IHl5X25fY2hhcnM7Ci0KLSAg
ICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0
ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3Vs
ZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lz
X291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBp
bnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3Ig
aW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5zdGVhZCBvZiBmcmVh
ZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotICAgICAqIGVh
Y2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLSAgICAv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBt
YXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7
Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwotICAgIGlu
dCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLSAgICAvKiBX
aGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUK
LSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0g
ICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVm
aW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1
dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJr
IHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAg
KiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAg
V2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0
aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0g
ICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMg
dG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4g
Y29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcg
aW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQot
ICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KLQotLyogV2Ug
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
ICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxp
bnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVf
dCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKLQot
I2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAg
ICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19p
bnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAgfQotCi0jZGVmaW5lIHl5X3NldF9i
b2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAot
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZl
cih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9Ci0KLSNkZWZpbmUg
WVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBC
ZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJ
UF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50
IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBj
dXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25l
eHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vy
cm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25l
IGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRo
ZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmlu
ZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAot
ICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAyMwotI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIs
Ci0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFuc19p
bmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxleF9pbnQzMl90
IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsx
MDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNCwgICAyMywgICAyMSwgICAy
MiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAxNywgICAxNywgICAyMSwgICAgMSwg
ICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAxOCwgICAx
NywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwgICAxOCwgICAxNywgICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwg
ICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAxNiwgICAg
MCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAgICAgICAxMiwgICAgMCwgICAgNiwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwKLSAgICAgICAgNywgICAx
MywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAgMCwgICAgMCwgICAgMiwKLQotICAg
ICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgNCwgICAg
NCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNSwgICAgNSwg
ICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwgICAgNSwgICAgOCwgICAgOSwgICAg
NSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwg
ICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAxMywKLSAgICAgICAxNSwgICAxNSwg
ICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwKLSAgICAgICAx
NSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNiwgICAxNSwgICAxNSwK
LSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwgICAgMSwgICAxNywgICAxMywgICAx
MywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDE1LCAgIDIyLCAgIDE1LCAgIDE1
LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3LCAgIDE1LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAgIDE1LCAgIDE1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21l
dGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAgMywgICAgMSwgICAgMSwg
ICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAgICAgNCwgICAgNCwgICAgNSwgICAg
NiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNSwKLSAgICAgICAgNywgICAgNywg
ICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKLSAgICAgICAg
NywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAxOCwgIDE4NCwgIDE4NSwgICAx
MSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAgICAgICAgMCwgIDE2NCwgICAzOSwg
ICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwgICA0NCwKLSAgICAgICAgMCwgICAg
MCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2MiwgICA0NiwgIDE2MCwKLSAgICAg
IDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0NywgICA2NSwgICAgMCwgIDE1MywgIDE1
NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2NywgIDE0NSwgIDE1MiwgIDE1MCwg
IDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0MywgIDE0NCwgIDE0NCwgIDE0MCwgIDEz
NSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEzNSwgIDEzNiwgIDEyNSwgIDEzNCwg
IDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAgIDEyNCwgIDEyOCwgIDEyOCwgIDE4
NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4NSwKLSAgICAgIDE4NSwgIDExMiwg
IDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwgIDEwNywgICA4NiwKLSAgICAgIDE4
NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4NSwgICA5NywgICAxMCwgIDE4NSwK
LQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEwLCAgMTE0LCAgMTE4LCAgMTIxLCAg
MTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZb
MTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDYsICAxMDYsICAxMDQsICAxMDQs
ICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQsCi0gICAgICAxMDgsICAgMTAsICAx
MDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDgsICAxMDYsICAxMDQsCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAxMTAsICAxMDQsICAxMDQsCi0KLSAg
ICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzIxOV0g
PQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA1LCAgICA3LCAgICA0LCAg
ICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAgIDEwLCAgIDE1LCAgIDE1LCAgIDE1
LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAgICAgICA2LCAgICA1LCAgICA3LCAg
IDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDEwLAotICAgICAgIDE2LCAgIDE2
LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE5LAotICAgICAg
IDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAgIDIwLCAgIDM1LCAgIDE5LCAgIDE5
LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAg
IDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAgIDIw
LCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIwLCAgIDI3LCAgIDQzLCAgIDM3LCAg
IDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDk1LCAgIDU0
LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5LAotICAgICAgIDU1LCAgIDYwLCAg
IDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAgMTAwLCAgMTAwLAotCi0gICAgICAg
OTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAgOTMsICAgOTYsICAgOTUsICAxMDEs
Ci0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMjMsICAg
MjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAgMTYsICAgMzgsICAgMzgsICAgMzgs
ICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgsICAgOTgsICAxMDIsICAxMDIsICAx
MDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAgOTAsICAgODksICAgODgsICAgODcs
ICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEsCi0gICAgICAgODAsICAgNzksICAg
NzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAgNzEsCi0gICAgICAgNzAs
ICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEsCi0g
ICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAgNDYs
ICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQsICAgIDMsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAgIDE4LCAgICAxLCAgICAyLCAgICAy
LAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAg
ICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAgIDE4LCAgIDk5LCAgICAyLCAgICA5
LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5LCAgIDEzLCAgICA5LCAgIDEzLCAg
IDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAgIDE2LCAgIDIwLCAgIDE3LCAgIDIw
LCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2LAotICAgICAgICA5LCAgIDEwLCAg
IDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAgIDI5LCAgIDI1LAotICAgICAgIDI5
LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM1LCAgIDI5LCAgIDM1LAot
ICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDE0
LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0LCAgIDUxLCAgIDUxLCAgIDUxLCAg
IDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQsICAgMTQsICAgOTgsICAxMDIsICAx
MDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAxMDUsICAxMDUsICAxMDUsICAxMDUs
ICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYsCi0gICAgICAxMDYsICAxMDcsICAg
ODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAgODYsICAgODUsCi0gICAgICAxMDks
ICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAgODQsCi0g
ICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzMsICAgNzIsICAgNzEs
ICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEsICAg
NjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAgNTUsICAgNTQsICAgNTMsICAgNTIs
ICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQsICAgNDMsICAgNDIsICAgNDAsICAg
MzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0gICAgICAgMjgsICAgMjQsICAgMTIs
ICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1h
dGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRj
aF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDAsICAgICB9OwotCi0vKiBU
aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAotICog
YW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVmaW5lIFJFSkVD
VCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxl
IGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3Iu
Ci1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFt
bWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFz
cHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVk
ZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZX1VTRVJfQUNU
SU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsaW5l
bm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXljb2x1bW4gKyAx
OyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
Ci0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAgCi1z
dGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQg
bGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpD
b250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nh
bm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQotICAgIC8qIFVzZXItZGVmaW5lZC4g
Tm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKLQot
ICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0
aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7
Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0
YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9m
IHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBT
dGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hvbGRfY2hhcjsKLSAgICBpbnQgeXlf
bl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBp
bnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFy
dF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5
cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0K
LSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9t
b3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxs
b2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5
eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0
IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAq
IGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZh
bCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9j
X3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCBwcGxl
eF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5l
cik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRl
IHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0K
LWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2Rl
YnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVn
X2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJh
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQ
RSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9pbiAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAq
cHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9saW5lbm8gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3Mg
YWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9u
cyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRl
ZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3Ry
bmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNl
bmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4g
KHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYg
WVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVzaF9z
dGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAgIHN0
YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIEFt
b3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYgWVlf
UkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgotCi0v
KiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0
cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0
IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2UgZndy
aXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBu
dW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQgaW4g
InJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVmLHJl
c3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBcCi0g
ICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAot
ICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsg
KytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBj
ID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0gICAgICAg
IGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZWV9GQVRB
TF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAgICAgcmVz
dWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0gICAgICAg
IGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhf
c2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBcCi0gICAg
ICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwKLSAgICAg
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQi
ICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0gXAotICAg
ICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwKLSAgICAg
ICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xvbiBh
ZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAt
Ci0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVz
ZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVu
cmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZpbmUg
eXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBlbnRy
aWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYgWVlf
U1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5kaWYK
LQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCi0j
ZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5l
cikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQg
cHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2Fu
bmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMu
Ci0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1leHRl
cm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZ
TFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgWVlf
REVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0s
IFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYgLyog
IVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2gg
cnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0gKi8K
LSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRpZgot
Ci0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRlZiBZ
WV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JV
TEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAgICAgICAgICAgKHl5dGV4dFt5eWxl
bmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNUSU9OCi0KLS8qKiBUaGUgbWFpbiBz
Y2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1ZWV9ERUNMCi17
Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2FjdDsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci0K
LSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfaW5p
dCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAgICAgWVlfVVNFUl9JTklUOwotI2Vu
ZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAgICAgICAgICAgeXlnLT55
eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0gICAgICAgIGlmICggISB5
eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQotICAgICAgICBpZiAoICEgeXlvdXQg
KQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAgICAgICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAg
ICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAg
ICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLSAgICAgICAgKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlv
biBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAqIHRoZSBjdXJyZW50IHJ1
bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7Ci0KLSAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0g
WVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
OwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
ID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDEwNCApOwotICAgICAgICB5
eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9uOgot
ICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLSAgICAgICAg
WVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0Zf
QlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5
eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicg
KQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAg
eXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAgICAgICAgIH0KLQotZG9fYWN0aW9u
OiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwot
Ci0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9u
IHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAg
ICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAg
ICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9m
aW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLwotKnl5X2Nw
ID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047
IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFT
SF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDM6Ci0qeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4
dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9G
VU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElGOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJTkVEOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VSUk9SOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1BSQUdNQTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FWFRF
TlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE2OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxODoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3Ry
aW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiB5eXRleHRbMF07IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsgLyogSWdub3JlIHdoaXRl
c3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgotLyogcnVsZSAyMiBjYW4gbWF0Y2gg
ZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwot
ICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVfRU9G
KElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjM6Ci1Z
WV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0KLSAgICBjYXNlIFlZX0VORF9PRl9C
VUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3Qg
aW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgICAg
ICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0gICAgICAg
ICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JFX1lZX01PUkVf
T0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAv
KiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAgICAg
ICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCi0g
ICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxl
ZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJl
Ci0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFu
ZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0
byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9u
IChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQgd2ls
bCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmls
ZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgIC8q
IE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRp
b24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9j
X2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFz
dCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRy
YW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSku
ICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5wdXQoKS4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIHsg
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgeXlfc3RhdGVfdHlwZSB5
eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4
dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAg
ICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAg
ICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICog
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAg
KiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAg
ICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAg
ICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0g
ICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KLQot
ICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRf
c3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25leHRfc3RhdGUgKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBOVUwuICovCi0g
ICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3Rv
IHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlIHN3aXRjaCAo
IHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUg
c2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAK
LSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwK
LSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRv
Ci0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJu
IHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0g
YW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVk
LgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
ICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAg
ICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAg
ICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7
Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAg
ICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwotICAg
ICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2YgYWN0aW9u
IHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KLX0g
LyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFk
IGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBh
Y3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0JfQUNUX0NPTlRJTlVFX1ND
QU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqICBFT0JfQUNU
X0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVzdCA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNoYXIg
KnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3RvX21v
dmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBE
b24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAg
ICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9
PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUg
Y2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZp
bmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5E
X09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmly
c3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1vdmUg
bGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUgPSAo
aW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBmb3Ig
KCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykgPSAq
KHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0IGRv
IHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAgICAg
ICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3RvX3JlYWQgPQotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAgICAgICAgeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLSAgICAgICAg
ICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAg
ICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotICAgICAg
ICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoaW50KSAoeXln
LT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAgICAgICAgICAgaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG5l
d19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdf
c2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlf
YnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Yi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IChj
aGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0Ig
Y2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9j
aF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLyogQ2FuJ3QgZ3JvdyBpdCwgd2Ug
ZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IDA7Ci0KLSAg
ICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVm
ZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlf
Y2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgIGlm
ICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAvKiBSZWFkIGluIG1vcmUgZGF0YS4g
Ki8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycywgKHNpemVf
dCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIGlmICggeXlnLT55
eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAgIGlmICggbnVtYmVyX3RvX21vdmUg
PT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVP
Ql9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5l
cik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAgICAgICAgICAgICAgWVlf
QlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBlbHNl
Ci0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLSAgICBpZiAoKHl5
X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBhcnJh
eSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLSAgICAgICAgeXlf
c2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXln
LT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0gICAgICAgIGlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICBZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIg
KTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7Ci0gICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAg
IHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlsw
XTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
LSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLwot
Ci0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0gWVlfQVRfQk9MKCk7Ci0K
LSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8
IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAgcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7
Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAg
ICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLQotICAgIHJldHVybiB5
eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2Ug
YSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAqICBu
ZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwotICovCi0gICAg
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQg
eXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRp
b25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0g
ICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19z
dGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICB7Ci0g
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLSAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSAxMDQpOwot
Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZu
ZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5w
dXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAgaW50IGM7Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlf
Y19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0g
ICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhl
biBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAg
ICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIGludCBvZmZzZXQgPSB5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19i
dWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5u
ZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVs
YXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZv
cmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4K
LSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENI
Ci0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAg
ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBz
dGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAgICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZ
X05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICAg
ICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOyAvKiBj
YXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgICAg
LyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5
X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IChj
ID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wg
KQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1bW49MDsK
LSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwotfQotI2VuZGlmICAvKiBpZm5kZWYg
WVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBp
bnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQG5vdGUgVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgot
ICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKLSAgICAgICAg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVy
LgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfc3dpdGNoX3Rv
X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMg
ZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICogICAgICBwcHBvcF9idWZm
ZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgIGlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNo
IG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cg
d2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GIChwcHdyYXAoKSkg
cHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0gICAgICogdG8g
Z28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9
IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
LSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAg
IHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKLX0KLQotLyoqIEFsbG9jYXRl
IGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAqIEBwYXJhbSBmaWxlIEEg
cmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6
ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIg
IChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZ
X0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZTsKLQot
ICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBz
aXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFs
bG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGItPnl5X2No
X2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOwot
Ci0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwotCi0gICAgcmV0dXJuIGI7
Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVh
dGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NU
QVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1
cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAgaWYgKCBiLT55eV9pc19vdXJfYnVm
ZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7
Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8qIEluaXRpYWxp
emVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0
aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICogc3VjaCBh
cyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0aWMgdm9pZCBw
cF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgcHBfZmx1
c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55eV9pbnB1dF9maWxlID0gZmlsZTsK
LSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50
IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNhbGxl
ZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAgICAq
IEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVt
bi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIGIt
Pnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAgfQot
Ci0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBu
ZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1ZmZl
ciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2Zs
dXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGItPnl5X25fY2hhcnMgPSAw
OwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZm
ZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFtIGluIHRoYXQgc3RhdGUu
Ci0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwot
ICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGItPnl5
X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAgYi0+eXlfYXRfYm9sID0gMTsKLSAg
ICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIGlmICggYiA9PSBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBu
ZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdp
bGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09
IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNj
YW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAg
ICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAg
ICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVw
bGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdf
YnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAg
ICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0
b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21l
cyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotICAgIGlmIChZWV9D
VVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAgIH0K
LX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAqICBH
dWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3RhdGljIHZvaWQg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgaW50IG51
bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci0KLSAgICAg
ICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBk
b24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0
YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAgICAgICAgICogaW1tZWRp
YXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAgICAgICovCi0gICAgICAgIG51bV90
b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu
dW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3Rh
Y2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1f
dG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAgICAgICAgLyogSW5jcmVhc2UgdGhl
IGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0gICAgICAgIGludCBn
cm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLSAgICAgICAgbnVtX3Rv
X2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotICAgICAgICB5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9j
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWctPnl5X2J1ZmZlcl9zdGFjaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAg
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90
cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZl
cl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0g
ICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVj
dGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICogQHBhcmFtIGJh
c2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVz
IG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2Jq
ZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2Us
IHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJf
U1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBiYXNlW3NpemUt
Ml0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3NpemUtMV0gIT0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUg
cm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsKLQotICAgIGIgPSAoWVlf
QlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5
eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0g
ICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFy
cyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICBi
LT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIHBwX3N3aXRjaF90b19idWZmZXIo
YiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgp
IHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFtIHl5c3Ry
IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBz
dGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5
IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBp
bnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hh
ciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotICAgIHJldHVybiBwcF9z
Y2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0KLS8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4
dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRl
cy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxl
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRl
cy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0
aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50ICBfeXlieXRl
c19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0g
ICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIGludCBpOwotICAgIAotICAgIC8q
IEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5n
IEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFyICop
IHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsK
LQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZb
aV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNf
bGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYiA9IHBwX3NjYW5fYnVmZmVy
KGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIC8qIEl0J3Mgb2th
eSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLSAgICAg
KiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJfYnVmZmVy
ID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVzaF9zdGF0
ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggeXln
LT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCApCi0gICAg
ICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwotCi0gICAgICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5DUjsKLSAgICAgICAgbmV3X3NpemUg
PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9mKCBpbnQgKTsKLQotICAgICAgICBp
ZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcHJlYWxsb2Mo
KHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAg
ICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFydC1jb25kaXRpb24gc3RhY2siICk7
Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFj
a19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5ld19zdGF0ZSk7Ci19Ci0KLSAgICBz
dGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlm
ICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQotICAgICAgICBZWV9GQVRBTF9FUlJP
UiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ciICk7Ci0KLSAgICBCRUdJTih5eWct
Pnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyXSk7Ci19Ci0KLSAgICBzdGF0
aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJu
IHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHIgLSAxXTsKLX0KLQot
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNlbmRp
ZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xu
IiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5l
IHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXls
ZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAg
LyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5
eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19t
YWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsg
XAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBc
Ci0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotICAgICAg
ICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBt
ZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBH
ZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRy
YSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8q
KiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRo
ZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1
dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
RklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWlu
OwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2Yg
dGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICpwcGdldF90ZXh0ICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiogU2V0
IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhl
IHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVk
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsK
LX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5lX251
bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQg
cHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhp
c3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5
X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNj
YW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiogU2V0
IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfY29sdW1uIChpbnQg
IGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29sdW1u
IGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYg
KCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0
X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAg
eXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhp
cyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBAcGFy
YW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCBwcHNl
dF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5aW4g
PSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgcHBnZXRf
ZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2RlYnVn
OwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29yIG1l
dGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lkIHBw
c2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnBwZ2V0X2xsb2Mg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAgCi12
b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2VyLXZp
c2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0
ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1
bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50
LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGlu
c3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdCh5eXNjYW5f
dCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg
ICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5
eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewot
ICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
LyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMu
IExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2Jh
bHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5pdF9n
bG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4X2luaXRfZXh0cmEgaGFz
IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCi0g
KiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4g
Tm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwg
YXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSByZWFz
b24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xh
cmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50
IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxkLgot
ICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgZHVt
bXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5
Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5v
ID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgKnB0cl95eV9n
bG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwg
JmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
Ci0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2lu
aXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpw
dHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICBw
cHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAg
IHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGlj
IGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5p
dGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIu
Ci0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNv
IGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0g
ICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0g
MDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFp
bi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9
IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklM
RSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5v
IG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogcHBsZXhfaW5pdCgpCi0g
ICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGgg
cmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHBwbGV4X2Rlc3Ry
b3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3Rh
Y2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxlKFlZX0NVUlJFTlRfQlVG
RkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAgICAg
IHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIC8qIERlc3Ryb3kg
dGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5
c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogRGVz
dHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXlnLT55
eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sg
PSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGlu
IGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxleCgp
IGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0X2ds
b2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVl
bnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwot
ICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5h
bCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkg
PSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgotCi0j
aWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3Qg
Y2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IG47Ci0g
ICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKLQotICAgIHJldHVybiBuOwot
fQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZv
aWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5n
IGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIq
IGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQgdXNlIHZvaWQqIGdlbmVy
aWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAgICAgKiBiZWNhdXNlIGJv
dGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0gICAgICog
YW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJz
aW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotICAgICAqLwotICAg
IHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9p
ZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgZnJlZSgg
KGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICov
Ci19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLXN0ZDo6c3RyaW5nKiBl
eHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBUaGUg
aW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElG
SUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAgICBB
U1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsKLQot
ICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0gMTsg
aSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChzdHJb
aV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpzdHJp
bmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotbmFt
ZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhT
aXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQtPmVv
ZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JO
b25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAgICBp
bnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0aW9u
KHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0gbUlu
cHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9saW5lbm8ocHA6OlRva2VuOjplbmNv
ZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0
LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBw
cDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1M
ZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0X2V4dHJhKHRoaXMsJm1MZXhlcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1MZXhlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4ZXIg
PSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YjZhYTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNzIgKzAsMCBAQAotLyogQSBCaXNv
biBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGltcGxl
bWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJp
Z2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5
b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxs
IG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0g
ICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3Qg
aXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9k
aWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0
aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxl
dG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVj
aWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1
bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlv
bi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBD
IExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkK
LSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIu
ICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5
IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlz
IHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJsZXMsIGFzIHRoZXkgbWln
aHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAgVGhlcmUgYXJlIHNv
bWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bwotICAgZGVm
aW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMg
T04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJZGVudGlmeSBCaXNvbiBv
dXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24gdmVyc2lvbi4gICovCi0j
ZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRvbiBuYW1lLiAgKi8KLSNk
ZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFyc2Vycy4gICovCi0j
ZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQ
X05FRURFRCAxCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1l
cy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5eWxleCAgIHBwbGV4Ci0j
ZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBwbHZhbAotI2RlZmluZSB5
eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZpbmUgeXluZXJycyBw
cG5lcnJzCi0jZGVmaW5lIHl5bGxvYyBwcGxsb2MKLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYg
WVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAg
ICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgSEFT
SCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwKLSAg
ICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhBU0hf
RUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0gMjY1
LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBIQVNI
X1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hfVkVS
U0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9PQkog
PSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFOVCA9
IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAyNzYK
LSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVmaW5l
IEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZERUYg
MjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0jZGVm
aW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVGSU5F
RCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4Ci0j
ZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0jZGVm
aW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmluZSBI
QVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5lIEZM
T0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0vKiBDb3B5
IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmlu
ZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotCi0KLS8q
IEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcg
MAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwotI2lm
ZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgZGVmaW5lIFlZ
RVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKLSNlbmRp
ZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RB
QkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZ
U1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlT
VFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6
OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0vKiBMaW5lIDE4
NyBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQ
RSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0j
aWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5
cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9j
b2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsK
LSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIg
ZGVjbGFyYXRpb25zLiAgKi8KLQotCi1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZ
WUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQgeXllcnJvcihZWUxUWVBF
KiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQqIGNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hD
b25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1z
dGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLQot
Ci0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNpZmRlZiBzaG9ydAotIyB1bmRlZiBz
aG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlUWVBFX1VJTlQ4
IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4
OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5
cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXR5
cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYgWVlU
WVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlwZWRl
ZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0laRV9U
WVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5lZCBz
aXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpF
X1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgaW5jbHVkZSA8
c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZ
WVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAot
IyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEp
Ci0KLSNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwotIyAgaWYgRU5BQkxFX05MUwotIyAg
IGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
IyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQot
IyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNn
aWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fybmlu
Z3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05V
Q19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKLSNlbHNlCi0jIGRlZmluZSBZWVVT
RShlKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRv
IHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwotI2lmbmRl
ZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UKLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKLSNlbHNlCi1z
dGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2VuZGlmCi17Ci0gIHJldHVybiBpOwot
fQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UK
LQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVj
ZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgaWYg
WVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFf
QVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBpbmNsdWRlIDxt
YWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICBkZWZpbmUg
YWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9j
YQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgIGlmbmRlZiBf
U1RETElCX0gKLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICAgIGVuZGlmCi0jICAgIGVu
ZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlTVEFDS19BTExP
QwotICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRl
ZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgw
KSkKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUgT1MgbWlnaHQg
Z3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ss
Ci0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAg
U28gd2UgY2Fubm90IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVk
cyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0byBhbGxvdyBm
b3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCi0j
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2Eg
MjAwNiAqLwotIyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxM
T0MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlTVEFDS19BTExP
Q19NQVhJTVVNCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1V
TQotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggXAotICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9j
KSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCi0jICAg
aW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMg
ICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwot
IyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZU0laRV9UKTsg
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgot
IyAgaWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5l
ZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYgLyogISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lmICghIGRlZmlu
ZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotICAgICB8
fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKLSAg
ICAgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklB
TCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sg
bWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZ
U1RZUEUgeXl2czsKLSAgICBZWUxUWVBFIHl5bHM7Ci19OwotCi0vKiBUaGUgc2l6ZSBvZiB0aGUg
bWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwot
IyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEp
Ci0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBz
dGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0jIGRlZmluZSBZWVNUQUNLX0JZ
VEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZ
U1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAotICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFY
SU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3Vy
Y2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNP
UFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9t
LCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMgICBkZWZpbmUgWVlDT1BZ
KFRvLCBGcm9tLCBDb3VudCkgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAg
ICBcCi0gICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKLSAgICAg
ICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBS
ZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUK
LSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBh
bmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2
ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBh
IHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFjay4gICovCi0j
IGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKSAgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpFX1QgeXluZXdieXRlczsgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlz
aXplKTsgICAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2s7ICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpT
dGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXluZXdieXRlcyAv
IHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyog
WVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNk
ZWZpbmUgWVlGSU5BTCAgMgotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICov
Ci0jZGVmaW5lIFlZTEFTVCAgIDI0NwotCi0vKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1p
bmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDcKLS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Yg
bm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAxMgotLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDYyCi0vKiBZWU5SVUxFUyAtLSBO
dW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICA5MQotCi0vKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNzYKLQot
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKHVu
c2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5E
RUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRy
YW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgMjIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQzLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAzNywgICAgNDAsICAgICAyLAotICAgICAgMjMsICAgIDI0LCAgICAzNiwgICAgMzMs
ICAgIDI1LCAgICAzNCwgICAgMzIsICAgIDM1LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQ0LCAgICA0
NSwKLSAgICAgIDI4LCAgICA0MiwgICAgMjksICAgIDQ2LCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAyNiwgICAgIDIsICAgIDI3LCAgICAzOCwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgIDMwLCAgICAzOSwgICAgMzEsICAgIDQxLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQs
Ci0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxCi19OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXgg
b2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KLXsKLSAgICAgICAwLCAg
ICAgMCwgICAgIDMsICAgICA0LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywgICAgMTYsICAg
IDE5LAotICAgICAgMjMsICAgIDMwLCAgICAzNCwgICAgMzgsICAgIDQyLCAgICA0NiwgICAgNTAs
ICAgIDUzLCAgICA1NiwgICAgNTksCi0gICAgICA2MiwgICAgNjUsICAgIDY4LCAgICA3MSwgICAg
NzIsICAgIDc0LCAgICA3NSwgICAgNzcsICAgIDgxLCAgICA4MywKLSAgICAgIDg2LCAgICA4OCwg
ICAgOTEsICAgIDk0LCAgICA5OSwgICAxMDEsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTA5LAot
ICAgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5LCAgIDEyMSwgICAxMjMsICAgMTI1
LCAgIDEyNywgICAxMjksCi0gICAgIDEzMSwgICAxMzMsICAgMTM1LCAgIDEzNywgICAxMzksICAg
MTQxLCAgIDE0MywgICAxNDUsICAgMTQ3LCAgIDE0OSwKLSAgICAgMTUxLCAgIDE1MywgICAxNTUK
LX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJI
Uy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Ci17Ci0gICAgICA0OCwg
ICAgIDAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgNTAsICAgIC0xLCAg
ICA1MSwKLSAgICAgIC0xLCAgICAyMiwgICAgLTEsICAgIDU1LCAgICAyMiwgICAgLTEsICAgICAz
LCAgICAyMiwgICAgLTEsICAgIDE3LAotICAgICAgNTIsICAgIDIyLCAgICAtMSwgICAgMTgsICAg
IDIzLCAgICA1MywgICAgMjQsICAgIDUyLCAgICAyMiwgICAgLTEsCi0gICAgICAgNCwgICAgMjEs
ICAgIDIyLCAgICAtMSwgICAgIDUsICAgIDU0LCAgICAyMiwgICAgLTEsICAgICA2LCAgICAyMSwK
LSAgICAgIDIyLCAgICAtMSwgICAgIDcsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA5LCAgICA1
NCwgICAgMjIsICAgIC0xLAotICAgICAgIDgsICAgIDIyLCAgICAtMSwgICAgMTAsICAgIDIyLCAg
ICAtMSwgICAgMTIsICAgIDIyLCAgICAtMSwgICAgMTMsCi0gICAgICAyMiwgICAgLTEsICAgIDE0
LCAgICAyMiwgICAgLTEsICAgIDE1LCAgICAyMiwgICAgLTEsICAgIDE2LCAgICAyMiwKLSAgICAg
IC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICA1MywgICAg
MjUsICAgIDIxLAotICAgICAgLTEsICAgIDU2LCAgICAtMSwgICAgNTQsICAgIDU2LCAgICAtMSwg
ICAgNTcsICAgIC0xLCAgICA1NSwgICAgNTcsCi0gICAgICAtMSwgICAgMTEsICAgIDIxLCAgICAt
MSwgICAgMTEsICAgIDIzLCAgICAyMSwgICAgMjQsICAgIC0xLCAgICA1NywKLSAgICAgIC0xLCAg
ICA1OCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjAsICAgIC0xLCAgICAyMSwgICAgLTEsICAg
IDI2LAotICAgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEs
ICAgIDIzLCAgICAtMSwgICAgMjQsCi0gICAgICAtMSwgICAgMzAsICAgIC0xLCAgICAzMSwgICAg
LTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwKLSAgICAgIC0xLCAgICAzNSwg
ICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzOCwgICAgLTEsICAgIDM5LAot
ICAgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQz
LCAgICAtMSwgICAgNDQsCi0gICAgICAtMSwgICAgNDUsICAgIC0xLCAgICAyNSwgICAgLTEsICAg
IDQ2LCAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1
bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAgNjMsICAgIDYzLCAgICA2NSwgICAgNjksICAg
IDcwLCAgICA3NCwgICAgNzUsICAgIDg0LCAgICA4NSwKLSAgICAgIDg4LCAgICA5MSwgICAgOTQs
ICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMTAsICAgMTExLAotICAgICAx
MTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTE5LCAgIDEyMiwgICAxMjMsICAgMTI3LCAgIDEz
MywgICAxMzcsCi0gICAgIDE0NCwgICAxNDgsICAgMTU1LCAgIDE1NywgICAxNTksICAgMTYzLCAg
IDE2NiwgICAxNjksICAgMTcyLCAgIDE3OCwKLSAgICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTgy
LCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAotICAgICAxODksICAg
MTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5NywgICAx
OTgsCi0gICAgIDE5OSwgICAyMDAsICAgMjAxCi19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8
IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1d
IC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUg
dGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICov
Ci1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJy
b3IiLCAiJHVuZGVmaW5lZCIsICJIQVNIIiwgIkhBU0hfVU5ERUYiLCAiSEFTSF9JRiIsCi0gICJI
QVNIX0lGREVGIiwgIkhBU0hfSUZOREVGIiwgIkhBU0hfRUxTRSIsICJIQVNIX0VMSUYiLCAiSEFT
SF9FTkRJRiIsCi0gICJERUZJTkVEIiwgIkhBU0hfRVJST1IiLCAiSEFTSF9QUkFHTUEiLCAiSEFT
SF9FWFRFTlNJT04iLCAiSEFTSF9WRVJTSU9OIiwKLSAgIkhBU0hfTElORSIsICJIQVNIX0RFRklO
RV9PQkoiLCAiSEFTSF9ERUZJTkVfRlVOQyIsICJJTlRfQ09OU1RBTlQiLAotICAiRkxPQVRfQ09O
U1RBTlQiLCAiSURFTlRJRklFUiIsICInXFxuJyIsICInKCciLCAiJyknIiwgIicsJyIsICInWyci
LAotICAiJ10nIiwgIic8JyIsICInPiciLCAiJ3snIiwgIid9JyIsICInLiciLCAiJysnIiwgIict
JyIsICInLyciLCAiJyonIiwKLSAgIiclJyIsICInXiciLCAiJ3wnIiwgIicmJyIsICInficiLCAi
Jz0nIiwgIichJyIsICInOiciLCAiJzsnIiwgIic/JyIsCi0gICIkYWNjZXB0IiwgImlucHV0Iiwg
ImxpbmUiLCAidGV4dF9saW5lIiwgImNvbnRyb2xfbGluZSIsCi0gICJyZXBsYWNlbWVudF9saXN0
IiwgInBhcmFtZXRlcl9saXN0IiwgImNvbmRpdGlvbmFsX2xpc3QiLCAidG9rZW5fbGlzdCIsCi0g
ICJjb25kaXRpb25hbF90b2tlbiIsICJ0b2tlbiIsICJvcGVyYXRvciIsIDAKLX07Ci0jZW5kaWYK
LQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRv
a2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAgMCwgICAyNTYs
ICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwK
LSAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3
MiwgICAyNzMsICAgMjc0LAotICAgICAyNzUsICAgMjc2LCAgICAxMCwgICAgNDAsICAgIDQxLCAg
ICA0NCwgICAgOTEsICAgIDkzLCAgICA2MCwgICAgNjIsCi0gICAgIDEyMywgICAxMjUsICAgIDQ2
LCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0MiwgICAgMzcsICAgIDk0LCAgIDEyNCwKLSAgICAg
IDM4LCAgIDEyNiwgICAgNjEsICAgIDMzLCAgICA1OCwgICAgNTksICAgIDYzCi19OwotIyBlbmRp
ZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZ
TiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAg
ICAgICAwLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDUwLCAgICA1MCwg
ICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1
MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAg
ICA1MiwgICAgNTIsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwKLSAgICAgIDU1
LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcs
ICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwg
ICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1
OCwgICAgNTgKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3Np
bmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLAotICAgICAgIDYsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMiwKLSAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEKLX07Ci0KLS8qIFlZREVGQUNUW1NUQVRFLU5B
TUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAgU1RBVEUtTlVN
IHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJv
Ci0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDM2LCAgICAz
NywKLSAgICAgIDM4LCAgICAgNiwgICAgNDMsICAgIDQ0LCAgICA2MSwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgNDIsICAgIDQ1LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCi0gICAgICA1NiwgICAgNTcsICAg
IDU4LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgMCwKLSAg
ICAgIDMwLCAgICAzNSwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI4LCAgICAzNCwg
ICAgIDAsICAgICAwLAotICAgICAgMTYsICAgICAwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsCi0gICAgICAyNSwgICAgIDcsICAgIDMxLCAg
ICAxMSwgICAgMzIsICAgICAwLCAgICAxMiwgICAgMjksICAgIDEzLCAgICAxNCwKLSAgICAgIDE1
LCAgICAgOSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzMywgICAgIDAs
ICAgIDI3LAotICAgICAgMTAKLX07Ci0KLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAgIDEs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDY4LCAgICA4MywgICAgNTUsICAgIDY5LCAgICA1NiwK
LSAgICAgIDU3LCAgICA1MQotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4g
WVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFURS1OVU0uICAqLwotI2Rl
ZmluZSBZWVBBQ1RfTklORiAtNTUKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10g
PQotewotICAgICAtNTUsICAgIDczLCAgIC01NSwgICAtMTcsICAgLTE4LCAgIDE0NSwgICAtMTAs
ICAgIC05LCAgIC0xNiwgICAxNDUsCi0gICAgICAtOCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI3LCAgIDIwMSwgICAgMjgsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAot
ICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIDE3MywKLSAgICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgIDMwLCAgIC0xOSwgICAgLTMsICAgLTU1LCAgIC01NSwgICAgMzEsICAgIDMyLAotICAgICAt
NTUsICAgMTA5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAz
MywgICAyMDEsCi0gICAgICAyOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDM1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTE1
LCAgIC0xMSwgICAyMDEsICAgIDM2LCAgIC01NSwgICAgMzcsICAgLTU1LAotICAgICAtNTUKLX07
Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg
eXlwZ290b1tdID0KLXsKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
MjcsICAgLTU1LCAgICA1MSwgICAgNjAsICAgLTU0LAotICAgICAgLTEsICAgLTU1Ci19OwotCi0v
KiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUt
TlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJl
ZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8s
IGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9y
LiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5dGFibGVbXSA9Ci17Ci0gICAgICA1MCwgICAgNzcsICAgIDc0LCAgICA1MywgICAgNzUsICAg
IDUyLCAgICA2MCwgICAgNzcsICAgIDU0LCAgICA4NSwKLSAgICAgIDg2LCAgICA1OCwgICAgNTks
ICAgIDg3LCAgICA2MiwgICAgNTAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDc2LAotICAgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNzIsICAgIDY3LAotICAgICAgODIsICAg
IDcwLCAgICA3MywgICAgNzgsICAgIDc5LCAgICA4MSwgICAgODQsICAgIDg5LCAgICA4OCwgICAg
OTAsCi0gICAgICA2MSwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDcyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAg
MCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDUwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0g
ICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICA1
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4
LCAgICAxOSwKLSAgICAgIDIwLCAgICA4MCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCi0gICAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA1NCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAgMCwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKLSAg
ICAgIDQ0LCAgICA0NSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDE4
LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUKLX07Ci0KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50
OCB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAgIDU1LCAgICAyMSwgICAgMjEsICAgIDIzLCAg
ICAyMiwgICAgMjIsICAgIDYxLCAgICAxMSwgICAgMjQsCi0gICAgICAyNSwgICAgMjEsICAgIDIx
LCAgICAyNCwgICAgMjIsICAgIDE2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLAotICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDQ5LCAgICAyMiwKLSAgICAgIDIxLCAg
ICAyMywgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIxLCAgICAyMSwgICAgODUsICAg
IDIyLAotICAgICAgIDksICAgICAxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA2OSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAg
LTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICA4NSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAot
ICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAg
MTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAx
OSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgLTEsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCi0g
ICAgICA0NSwgICAgNDYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2Ci19OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAt
LSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0
YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0K
LXsKLSAgICAgICAwLCAgICA0OCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAg
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTUsCi0gICAgICA1NywgICAgNTgsICAgIDIyLCAg
ICAyMSwgICAgMTEsICAgIDU0LCAgICA1NiwgICAgNTcsICAgIDIxLCAgICAyMSwKLSAgICAgIDIy
LCAgICA1NCwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNTIs
ICAgIDU1LAotICAgICAgMjMsICAgIDIyLCAgICA1NywgICAgMjIsICAgIDIxLCAgICAyMywgICAg
MjIsICAgIDU2LCAgICAyMiwgICAgMjIsCi0gICAgICAyMiwgICAgMjIsICAgIDIxLCAgICA1Mywg
ICAgMjEsICAgIDI0LCAgICAyNSwgICAgMjQsICAgIDUyLCAgICAyMSwKLSAgICAgIDIyCi19Owot
Ci0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJp
biAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5l
IFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICBnb3RvIHl5YWNjZXB0bGFiCi0j
ZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICBn
b3RvIHl5ZXJyb3JsYWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJv
ci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRoZSB0cmFuc2l0
aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0Mg
dmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLwotCi0j
ZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkco
KSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAg
ICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAo
eXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7ICAgICAgICAg
ICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoMSk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1
cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxlIChZWUlEICgwKSkKLQotCi0j
ZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgMjU2Ci0KLQotLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
Ci0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKLSNpZm5kZWYgWVlM
TE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAg
ICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xp
bmU7ICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAx
KS5maXJzdF9jb2x1bW47ICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNM
T0MgKFJocywgTikubGFzdF9saW5lOyAgICAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1u
ICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAgIFwKLSAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAgICBcCi0gICAg
ICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAgICAgICAgXAotICAgICAg
KEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgXAot
ICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkp
Ci0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0KLSNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFMCi0jICBkZWZpbmUgWVlfTE9DQVRJ
T05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4l
ZC0lZC4lZCIsICAgICAgICAgIFwKLSAgICAgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5m
aXJzdF9jb2x1bW4sIFwKLSAgICAgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2Nv
bHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2
b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgn
IHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNpZmRlZiBZWUxFWF9QQVJBTQotIyBk
ZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UK
LSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jKQotI2VuZGlmCi0KLS8qIEVu
YWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCi0KLSMgaWZuZGVm
IFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYg
QXJnczsgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVmaW5lIFlZX1NZ
TUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAgICAgIFwKLWRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRp
dGxlKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIs
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFR5cGUsIFZhbHVlLCBMb2NhdGlv
biwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCog
Y29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAq
eXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICgheXl2YWx1ZXApCi0gICAgcmV0dXJu
OwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0jIGlmZGVmIFlZ
UFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1dCwg
eXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAoeXlvdXRwdXQp
OwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAg
IGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50
IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICog
Y29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2
b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0
aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAg
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29u
c3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAg
aWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4g
JXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQg
KHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsK
LSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXls
b2NhdGlvbnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZy
b20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15
eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoYm90dG9tLCB0b3ApCi0gICAgeXl0
eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp0b3A7Ci0jZW5kaWYKLXsKLSAg
WVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7
ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90
dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
eXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAotfSB3aGls
ZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVk
dWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGlj
IHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNwLCBp
bnQgeXlydWxlLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlf
cmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwgY29udGV4dCkKLSAgICBZWVNUWVBF
ICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBpbnQgeXlydWxlOwotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07
Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVd
OwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUg
JWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xz
IGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKysp
Ci0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0g
ICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWld
LAotICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAg
ICAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29u
dGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLQotIyBkZWZp
bmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
XAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5
dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0vKiBO
b256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVk
IHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwotaW50IHl5ZGVi
dWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCi0jIGRl
ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVm
aW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBUSCAtLSBpbml0
aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmIFlZSU5JVERFUFRI
Ci0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERFUFRIIC0tIG1h
eGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQotICAgaWYg
dGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0KLSAgIERvIG5v
dCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlm
Ci0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQot
ICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4g
ICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAotI2Vu
ZGlmCi0KLQwKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0cmxlbgotIyAg
aWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBkZWZpbmUgeXlz
dHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICov
Ci0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIFlZU0la
RV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGljIFlZU0laRV9U
Ci15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5kaWYKLXsKLSAg
WVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKysp
Ci0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9T
VFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNw
eQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVz
cyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAo
Y2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi15
eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAgY29uc3QgY2hh
ciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0OwotICBjb25zdCBjaGFy
ICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKLSAg
ICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlT
VFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBhbmQgYmFja3Ns
YXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQotICAgaGV1cmlz
dGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJp
bmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3Ro
ZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5
dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVy
biB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBiZWVuLiAgKi8K
LXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlz
dHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAgIFlZU0laRV9UIHl5biA9
IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9yICg7OykKLSAg
ICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2Ug
JywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0KLSAgICAgIGNhc2UgJ1xc
JzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAgICAg
ICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICciJzoKLSAgICAgICAgaWYg
KHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAgICAgICByZXR1cm4geXlu
OwotICAgICAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0KLSAgaWYgKCEg
eXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5
ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkgaW50byBZWVJF
U1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCi0gICBZWUNI
QVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNv
cGllZCwKLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNV
TFQgaXMgbnVsbCwgZG8gbm90Ci0gICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKLSAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNl
LCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgotICAgbWVzc2FnZSB3aWxs
IGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKLSAg
IHNpemUgY2FsY3VsYXRpb24uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXN5bnRheF9lcnJvciAo
Y2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQotewotICBpbnQgeXluID0g
eXlwYWN0W3l5c3RhdGVdOwotCi0gIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0g
WVlMQVNUKSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCB5eXR5cGUg
PSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1l
cnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUw
OwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAw
OwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0gICAg
ICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLSAgICAg
IGludCB5eXg7Ci0KLSMgaWYgMAotICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRo
ZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQotICAgICBjb25zdHJ1Y3RlZCBvbiB0aGUg
Zmx5LiAgKi8KLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7Ci0gICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7Ci0gICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7
Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9y
ICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Ci0jIGVuZGlmCi0gICAgICBjaGFyICp5eWZt
dDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5l
eHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAgICAgIHN0YXRp
YyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZvcm1hdFtzaXpl
b2YgeXl1bmV4cGVjdGVkCi0gICAgICAgICAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLSAg
ICAgICAgICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKLSAgICAgICAg
ICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4
ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZl
IHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgWVlDSEVDSy4gICovCi0gICAgICBp
bnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAgICAgIC8qIFN0YXkgd2l0aGlu
IGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAgaW50IHl5Y2hl
Y2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0g
PCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAgICAgaW50IHl5Y291bnQg
PSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKLSAgICAgIHl5Zm10ID0g
eXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0gICAgICBmb3IgKHl5eCA9IHl5
eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0g
PT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLSAgICAgIHsKLSAgICAgICAgaWYgKHl5Y291bnQg
PT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAgICAgICAgICB7Ci0gICAgICAgIHl5
Y291bnQgPSAxOwotICAgICAgICB5eXNpemUgPSB5eXNpemUwOwotICAgICAgICB5eWZvcm1hdFtz
aXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0gICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0gICAgICAgIHl5
c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7Ci0gICAgICAgIHl5
c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICAgIHl5c2l6ZSA9IHl5
c2l6ZTE7Ci0gICAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Ci0gICAg
ICAgIHl5cHJlZml4ID0geXlvcjsKLSAgICAgIH0KLQotICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0
KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKLSAgICAgIHl5c2l6
ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5eXNpemUgPSB5eXNpemUx
OwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotICAgIHJldHVybiBZWVNJWkVfTUFYSU1V
TTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotICAgIHsKLSAgICAgIC8qIEF2b2lkIHNwcmludGYs
IGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLSAgICAgICAgIERv
bid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0gICAg
ICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAq
LwotICAgICAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0gICAgICBpbnQgeXlpID0gMDsKLSAgICAg
IHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAo
Knl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotICAgICAgICB7
Ci0gICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotICAgICAg
ICAgIHl5ZiArPSAyOwotICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmKys7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAgIHJldHVybiB5eXNpemU7Ci0gICAgfQotfQotI2VuZGlmIC8qIFlZRVJST1JfVkVS
Qk9TRSAqLwotDAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K
LS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
LXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwg
WVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29u
dGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2
YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIGNvbnN0IGNoYXIgKnl5bXNnOwotICAg
IGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSAqeXlsb2Nh
dGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5
dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0g
IGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQg
KHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5
cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQwKLQot
LyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlw
YXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAocHA6OkNvbnRl
eHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyog
ISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2Uu
ICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlICh2b2lkICpZWVBBUlNF
X1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKLSAgICB2b2lkICpZ
WVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHBwOjpD
b250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29udGV4dCkKLSAgICBwcDo6
Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFk
IHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhl
IGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Yg
c3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0vKiBMb2NhdGlvbiBkYXRh
IGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2M7Ci0KLSAgaW50
IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5
eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNs
YXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1Jf
VkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRl
ZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNn
YnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgot
Ci0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0g
ICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0
YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRv
IHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4g
ICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAq
eXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNU
WVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0gIC8qIFRoZSBsb2NhdGlv
biBzdGFjay4gICovCi0gIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwotICBZWUxUWVBFICp5
eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotICAvKiBUaGUgbG9jYXRpb25zIHdoZXJl
IHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gIFlZTFRZUEUgeXllcnJvcl9yYW5n
ZVsyXTsKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0g
KE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBU
SDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFu
ZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAqLwotICBZWVNUWVBF
IHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBv
biB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5v
IHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQ
UklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwot
ICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOyAg
ICAgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0
YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRp
b24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhl
IHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFs
aXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0gIHl5bHNwID0g
eXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVs
dCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAqLwotICB5eWxsb2MuZmlyc3RfbGlu
ZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5
bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGlu
IHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdo
ZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZl
IGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3Rh
Y2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7
Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAg
LyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVt
ZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0j
aWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byBy
ZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAgICB0aGVzZSBzbyB0aGF0
IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAgbWVtb3J5LiAg
Ki8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9
IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotCi0gICAgLyogRWFjaCBzdGFjayBw
b2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgZGF0
YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAg
ICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQg
bWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8K
LSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICZ5
eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAgICAgJnl5dnMxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVv
ZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0gICAgeXlscyA9IHl5bHMx
OwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5eXZzID0geXl2czE7Ci0gICAgICB9Ci0jZWxzZSAv
KiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBv
d24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAgICAgaWYgKFlZ
TUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7Ci0K
LSAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1bmlvbiB5eWFs
bG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNU
QUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLSAgICBZWVNUQUNL
X1JFTE9DQVRFICh5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKLSMgIHVuZGVm
IFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICBZWVNUQUNL
X0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYKLSNlbmRpZiAvKiBubyB5eW92ZXJmbG93
ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5
dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKLQotICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAot
ICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKLSAgICB9Ci0K
LSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsK
LQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAt
LS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5n
IGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4g
aWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZp
cnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFo
ZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZ
UEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQg
YSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8q
IFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQg
c3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlM
RVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFy
ID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVu
ZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2Vu
IGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBw
cm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwot
ICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0
b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5
eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlm
ICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVf
TklORikKLSAgICBnb3RvIHl5ZXJybGFiOwotICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8g
eXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsK
LQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1
cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5
eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
LQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwot
ICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0
ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gICorK3l5bHNwID0geXlsbG9jOwotICBn
b3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0
IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5
eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJs
YWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVs
ZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZ
TEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9u
OgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUg
c2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRl
ZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25p
bmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQg
c21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5
IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0K
LSAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5
bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNo
ICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRPRE8o
YWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNv
bnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAoeXl2c3Bb
KDEpIC0gKDIpXS50bGlzdCktPmJlZ2luKCksICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KS0+ZW5k
KCkpOwotICAgICAgICBkZWxldGUgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVN
YWNybygoeXlsc3BbKDEpIC0gKDMpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwg
KHl5dnNwWygxKSAtICgzKV0uc3ZhbCksIE5VTEwsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAgICBjb250
ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDYpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3Jv
OjprVHlwZUZ1bmMsICh5eXZzcFsoMSkgLSAoNildLnN2YWwpLCAoeXl2c3BbKDMpIC0gKDYpXS50
bGlzdCksICh5eXZzcFsoNSkgLSAoNildLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDExOgotCi0gICAgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCh5eXZz
cFsoMikgLSAoMyldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI6Ci0K
LSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICh5eXZzcFsoMikg
LSAoMyldLnRsaXN0KSA/IHRydWUgOiBmYWxzZSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDEzOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBj
b250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlv
bmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAo
MyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE1OgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQotICAgIHsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2so
Y29udGV4dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIzOgotCi0gICAgeyAoeXl2
YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI1OgotCi0gICAgeyAo
eXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI2OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0p
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gKHl5dnNwWygxKSAtICgzKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5w
dXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDMpIC0gKDMpXSkuZmlyc3RfbGluZSwgSURF
TlRJRklFUiwgKHl5dnNwWygzKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRv
a2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAt
ICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyOToKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAg
ICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNo
X2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAo
MildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikg
LSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6Ci0KLSAgICB7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgewotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3
IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgKHl5dnNwWygxKSAtICgx
KV0uaXZhbCksIE5VTEwpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNjoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEp
XSkuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwu
dHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBGTE9B
VF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpU
b2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygx
KSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJ1snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDA6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICddJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQxOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnPCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDM6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICcoJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ0Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDY6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ3
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0
ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NDk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICctJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyonOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICclJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3wnOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcmJzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfic7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz0nOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICchJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDU5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOic7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzsnOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcsJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPyc7IDt9Ci0gICAgYnJl
YWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCi0KLSAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5
dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZ
WV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2YWw7Ci0gICor
K3l5bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVk
dWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBv
biB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciBy
ZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdv
dG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0
YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRl
ID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXlu
IC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5n
IGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJs
YWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXlu
ZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29u
dGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAgewotICAgIFlZU0laRV9U
IHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgIGlmICh5
eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSkKLSAgICAgIHsKLSAgICAgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAg
ICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCi0gICAgICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKLSAg
ICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlt
c2cpOwotICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOwot
ICAgICAgICBpZiAoeXltc2cpCi0gICAgICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOwotICAgICAg
ICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICBpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0gICAgICB7Ci0g
ICAgICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0g
ICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5bXNnKTsKLSAgICAgIH0KLSAgICBl
bHNlCi0gICAgICB7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3lu
dGF4IGVycm9yIikpOwotICAgICAgICBpZiAoeXlzaXplICE9IDApCi0gICAgICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICB5eWVy
cm9yX3JhbmdlWzBdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsK
LSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRv
a2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5
Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQg
b2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9S
VDsKLSAgICB9Ci0gICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBk
aXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgIH0KLSAgICB9Ci0KLSAgLyogRWxz
ZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycm9ybGFi
IC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJyb3JsYWI6Ci0K
LSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIg
aW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUg
bmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAqLwotICBpZiAoLypDT05TVENPTkQq
LyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNw
WzEteXlsZW5dOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3
aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RB
Q0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2gg
cmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9yICg7OykKLSAg
ICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoeXluICE9IFlZUEFD
VF9OSU5GKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJPUjsKLSAgICAgIGlmICgwIDw9IHl5
biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKLSAgICAgICAg
ewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAgICAgICAgICBpZiAoMCA8IHl5bikK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
LSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3Jf
cmFuZ2VbMF0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAot
ICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAg
IFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAg
ICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsKLQotICB5eWVycm9yX3JhbmdlWzFd
ID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFu
Z2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0MgaXMgYXZhaWxh
YmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2Ug
LSAxKSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRv
a2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2
c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAt
LSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVy
bjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxh
YiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJu
OwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rp
b24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5eWVycm9yICgmeXlsbG9jLCBjb250
ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFs
bCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVP
RiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2Nh
cmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNv
bnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGlj
aCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCi0g
IFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92ZXJmbG93Ci0g
IGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0jZW5kaWYKLSNp
ZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLwot
ICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLXZvaWQgeXllcnJvcihZWUxU
WVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsK
LX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9v
bCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4
dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2Uo
KQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0
cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVmODA2Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbnRlcmZh
Y2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMp
IDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot
ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2
ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkg
Y3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhl
IEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVy
IHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYg
YQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2
ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwg
aWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRz
ZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhj
ZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwot
ICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCi0g
ICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIFRva2Vucy4g
ICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyogUHV0
IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIg
ZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2VudHlw
ZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhBU0hf
SUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0gMjYy
LAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAgSEFT
SF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2
NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5LAot
ICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAgSEFT
SF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAgICBJ
TlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJREVO
VElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBIQVNI
IDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2RlZmlu
ZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9F
TFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0j
ZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hf
UFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJT
SU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09CSiAy
NzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3
NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYKLQot
Ci0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xB
UkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6
c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3Iq
IHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0KLSAgICBZWVNUWVBFOwot
IyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3
biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lT
X1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZp
bmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50
IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGlu
dCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBv
YnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVD
TEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3MTY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCkBAIC0wLDAgKzEsMTggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21tb24gcHJlcHJvY2Vzc29yIHV0aWxp
dGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxs
b3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMg
bXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MuCisj
ZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAorICBUeXBlTmFt
ZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwKKyAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTk3NTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cmVwcm9jZXNzb3IudmNwcm9qCkBAIC0wLDAgKzEsMzkzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVj
dFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJwcmVwcm9jZXNzb3Ii
CisJUHJvamVjdEdVSUQ9IntGQkUzMkRGMy0wRkIwLTRGMkYtQTQyNC0yQzIxQkQ3QkMzMjV9Igor
CVJvb3ROYW1lc3BhY2U9InByZXByb2Nlc3NvciIKKwlLZXl3b3JkPSJXaW4zMlByb2oiCisJVGFy
Z2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZv
cm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJ
Lz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1
cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50
ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRp
b25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0
b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0
b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9u
PSIwIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJ
CQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJ
UnVudGltZUxpYnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2Fy
bmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ9IjQiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0
OzQ3MDIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4K
KwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJl
Y3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlh
dGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9
IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEi
CisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rp
b25zPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJ
QiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2lu
Zz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9
IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
MyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FM
aW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RC
dWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRp
b24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRp
cikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZp
Z3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFH
ZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJv
eHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIK
KwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCVByZXByb2Nlc3NvckRl
ZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIK
KwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjEiCisJCQkJ
VXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5B
c0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjc7NDcwMiIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxk
RXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgor
CQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGly
ZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1
cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGlt
aXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJy
YXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJv
cj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJl
bmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3Vy
Y2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2Fz
bTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJB
MzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9z
dGljcy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cRGlyZWN0aXZlSGFuZGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHByZXNzaW9uUGFyc2VyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTGV4ZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1h
Y3JvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxNYWNyb0V4cGFuZGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJ
CUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgorCQkJVW5pcXVlSWRlbnRpZmllcj0i
ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCisJCQk+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhhbmRsZXIuaCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHBy
ZXNzaW9uUGFyc2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cSW5wdXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxMZXhlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXE1hY3JvLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHBwX3V0aWxzLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29yLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU291cmNlTG9jYXRpb24uaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbi5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2Vu
aXplci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xv
YmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxf
dXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDFjZTUw
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQot
I2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0K
LW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0
IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9p
ZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19IXwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZ
UEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKaW5kZXgg
ODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKQEAgLTQ3LDUg
KzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7
CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IEluaXRBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNo
YXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRv
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmZkZTg1M2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jCkBAIC02Niw2ICs2Niw4IEBAIHR5cGVkZWYgc3RydWN0IFN0cmluZ0lu
cHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsKIAorc3RhdGljIGludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGludCBlb2Zfc2NhbihJbnB1
dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJldHVybiBFT0Y7CkBAIC03
Myw3ICs3NSw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlz
dHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7
IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGljIElucHV0U3JjIGVvZl9p
bnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wLCAwLCAwIH07CiAKIHN0
YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKIApA
QCAtMTI2LDYgKzEyOCwxNiBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAgICByZXR1cm4gKEZy
ZWVDUFAoKSk7CiB9CiAKK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7
CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7
CisgICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7CisgICAgY3BwLT5QYVN0ckxlbiAgID0gbGVu
Z3RoOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgcmV0dXJuIDA7Cit9CisK
IC8qCiAgKiBzdHJfZ2V0Y2goKQogICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlw
bGUgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKaW5kZXggMjMzZDFkYy4uYjY3YzFkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
SW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3Bw
KTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhj
b25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBz
dHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7
CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBF
T0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tp
bmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8g
dGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0
U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oCmluZGV4IGMxOWY3OWMuLmU3ZDBiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
CkBAIC0xMDUsNyArMTA1LDYgQEAgU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNj
b3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpBZGRTeW1i
b2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtp
bmQpOwogU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7
CiBTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Ci12b2lkIENQ
UEVycm9yVG9JbmZvTG9nKGNoYXIgKik7CiAKIAogI2VuZGlmIC8vICFkZWZpbmVkKF9fU1lNQk9M
U19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5kZXggZDY1OGMxMi4uYjk0YzA1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNp
bmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCkBAIC0yNjUsNiArMjY2LDgg
QEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHAp
CiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tl
biwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hf
dmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0g
MCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRv
aywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICAgICBsZW4gPSAwOworCSAgICBhY2N1bSA9IDA7
CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAn
MCcpIHsKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAg
ICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0g
J3gnIHx8IGNoID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4r
K10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwogICAgICAgICAgICAgICAg
ICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBiYXNlID0gODsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGlz
ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSBjaCAtICcwJzsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNo
X3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hf
dmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAg
ICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKKyAgICAgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bl0gPSAnXDAnOwogICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAg
c3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlICcoJzoKICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7
CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9r
ZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAgICAgICAgY2FzZSBDUFBfVFlQ
RUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNj
X2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RB
TlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRh
YmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6
ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lk
ZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFO
VDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZhbCk7CkBA
IC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3Ry
ZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQotICAgICAgICAgICAg
ICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7Cisg
ICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21T
dHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmluZGV4
IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaApAQCAtNDgsNiArNDgsNyBA
QCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUgX19UT0tFTlNfSCAxCiAKKyNp
bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIu
aCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTM4YjczMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKQEAgLTAs
MCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKK1Jlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYg
c2luaykKKyAgICA6IG1TaW5rKHNpbmspCisgICAgLCBtTnVtRXJyb3JzKDApCit7CisgICAgLy8g
U2FtcGxpbmcgb3BzIGZvdW5kIG9ubHkgaW4gZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMu
aW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0O2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7ZjE7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5k
IGluIGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRChzMjE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
MkRQcm9qKHMyMTt2ZjQ7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUo
c0MxO3ZmMzsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgT0VTX0VHTF9pbWFn
ZV9leHRlcm5hbC4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoMTt2ZjI7Iik7
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmMzsiKTsKKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBs
aW5nIG9wcyBwcm92aWRlZCBieSBBUkJfdGV4dHVyZV9yZWN0YW5nbGUuCisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUmVjdCgxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsiKTsKK30KKworLy8gRklYTUUobXZ1am92aWMpOiBX
ZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9u
cyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBjYW4gdmFyeSBiYXNlZCBvbiB0aGUgdmFsdWUgb2Yg
dGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3VsZCByZXN0cmljdCB0aG9zZSBhcyB3
ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rp
b25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1OdW1FcnJvcnMgPSAw
OworCisgICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVwZW5kZW5jeSBncmFwaCBkb2VzIG5v
dCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxscyByaWdodCBub3csCisgICAgLy8g
c28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgorICAgIHZhbGlkYXRlVXNlckRlZmluZWRG
dW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisKKyAgICAvLyBTdGFydGluZyBmcm9tIGVhY2ggc2Ft
cGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGdlbmVyYXRlIGFuIGVycm9y
IGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBhIG5vZGUgd2hlcmUgc2FtcGxlciBkZXBlbmRlbnQg
dmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBmb3IgKFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAg
IGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAg
ICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5bWJvbCA9ICppdGVyOworICAgICAg
ICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgaXRlciAh
PSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgICsraXRlcikK
KyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gKml0ZXI7
CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24g
aXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpCit7CisgICAg
KyttTnVtRXJyb3JzOworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5r
LmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Cit9CisKK2Jvb2wgUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6aXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1
bmN0aW9uQ2FsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWludGVybUZ1bmN0aW9uQ2FsbC0+aXNV
c2VyRGVmaW5lZCgpICYmCisgICAgICAgICAgIG1TYW1wbGluZ09wcy5maW5kKGludGVybUZ1bmN0
aW9uQ2FsbC0+Z2V0TmFtZSgpKSAhPSBtU2FtcGxpbmdPcHMuZW5kKCk7Cit9CisKK3ZvaWQgUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCog
cGFyYW1ldGVyKQoreworICAgIC8vIFRleHR1cmUgY2FjaGUgYWNjZXNzIHRpbWUgbWlnaHQgbGVh
ayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisgICAgLy8gVGh1cywgd2UgcmVzdHJpY3Qgc2FtcGxl
ciBkZXBlbmRlbnQgdmFsdWVzIGZyb20gYWZmZWN0aW5nIHRoZSBjb29yZGluYXRlIG9yIExPRCBi
aWFzIG9mIGEKKyAgICAvLyBzYW1wbGluZyBvcGVyYXRpb24uCisgICAgaWYgKGlzU2FtcGxpbmdP
cChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKSkgeworICAgICAgICBzd2l0Y2gg
KHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSkgeworICAgICAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgICAgIC8vIFNlY29uZCBhcmd1bWVudCAoY29vcmQpCisgICAgICAgICAgICAg
ICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAg
ICAgICAgICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVy
IGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIg
Y29vcmRpbmF0ZSBhcmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLy8g
VGhpcmQgYXJndW1lbnQgKGJpYXMpCisgICAgICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0
ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgICAgICAgICBtU2luayA8PCAi
QW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8g
YmUgdGhlIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgYmlhcyBhcmd1bWVudCBvZiBhIHNh
bXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IChzYW1wbGVyKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiog
c2VsZWN0aW9uKQoreworICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rp
b24oKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxl
ciBpcyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxvb3AoKSk7CisgICAgbVNp
bmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0
dGVkIGluIGEgbG9vcCBjb25kaXRpb24uXG4iOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQor
eworICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7CisgICAg
bVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVy
bWl0dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwgIgorICAgICAgICAgIDw8
IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkxNjVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8K
KyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdf
SF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAg
ICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspOworICAg
IHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7
CisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
bik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOwor
Citwcml2YXRlOgorICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSk7
CisgICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGJvb2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7CisKKyAgICBUSW5mb1NpbmtC
YXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8
VFN0cmluZz4gU3RyaW5nU2V0OworICAgIFN0cmluZ1NldCBtU2FtcGxpbmdPcHM7Cit9OworCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5H
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGM2Y2YKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgor
Cit2b2lkIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBub2RlKQoreworICAgIGlmIChJc1NhbXBsZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKSB7
CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJv
cik7CisgICAgICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG1T
aW5rIDw8ICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiI7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YTA1ZmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hf
CisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19I
XworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFz
cyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmspCisgICAgICAgICwgbU51
bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2Rl
KiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50IG51bUVycm9ycygpIHsg
cmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGlu
dCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1Rf
VkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0Rpc3BsYXkuY3BwCmluZGV4IDZhNWNmZDMuLjBjYzBiOTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcApAQCAtOTkyLDYgKzk5Miwy
MiBAQCBib29sIERpc3BsYXk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpCiAgICAgcmV0dXJuIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhU
NSkpOwogfQogCisvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5
CisvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBj
YW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKKy8vIHNlZSBodHRwOi8vYXJhcy1wLmluZm8vdGV4dHMv
RDNEOUdQVUhhY2tzLmh0bWwKK2Jvb2wgRGlzcGxheTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OworCisgICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9ERVBU
SFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSk7CisgICAgYm9vbCBudWxs
ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBF
X1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAgICByZXR1cm4gaW50eiAmJiBudWxsOworfQor
CiBib29sIERpc3BsYXk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcs
IGJvb2wgKnJlbmRlcmFibGUpCiB7CiAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlN
b2RlOwpAQCAtMTA4MSw3ICsxMDk3LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRCdWZmZXJQb29s
KERXT1JEIHVzYWdlKSBjb25zdAogICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7CiB9CiAKLUQz
RFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdAorRDNE
UE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKIHsKICAgICBp
ZiAobUQzZDlFeCAhPSBOVUxMKQogICAgIHsKQEAgLTEwODksNyArMTEwNSw3IEBAIEQzRFBPT0wg
RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdAogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIXJlbmRlcmFibGUpCisgICAgICAgIGlmICghKHVz
YWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJTCB8IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmluZGV4IDUw
Mjg0MzEuLjRmN2RiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5oCkBAIC03OCwxMCArNzgsMTEgQEAgY2xhc3MgRGlzcGxheQogICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CiAgICAgdmlydHVhbCBib29s
IGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVl
cnlTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFi
bGUpIGNvbnN0OworICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwogICAgIGJv
b2wgaXNEZXZpY2VMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcAppbmRleCAwN2FkM2NmLi4wMzhiMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKQEAgLTEsNjM3ICsxLDY4MiBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6
U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCi0vLyBzdWNoIGFz
IHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMu
Ci0vLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VH
TCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgPHRjaGFyLmg+Ci0KLSNpbmNs
dWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0j
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgPGR3bWFwaS5oPgotCi1uYW1l
c3BhY2UgZWdsCi17Ci0KLW5hbWVzcGFjZQotewotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKLWNvbnN0IGludCB2ZXJzaW9uV2luZG93czcgPSBN
QUtFV09SRCgweDAxLCAweDA2KTsKLQotLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVy
YXRpbmcgc3lzdGVtIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBvcmRlcmluZwotLy8gY29tcGFy
aXNvbi4KLWludCBnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkKLXsKLSAgICBEV09SRCB2ZXJzaW9u
ID0gR2V0VmVyc2lvbigpOwotICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZl
cnNpb24pKTsKLSAgICBpbnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7
Ci0gICAgcmV0dXJuIE1BS0VXT1JEKG1pbm9yVmVyc2lvbiwgbWFqb3JWZXJzaW9uKTsKLX0KLX0K
LQotU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZp
ZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAKLSAgICA6IG1E
aXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLXsKLSAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0
ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVRleHR1cmVGb3JtYXQgPSBFR0xf
Tk9fVEVYVFVSRTsKLSAgICBtVGV4dHVyZVRhcmdldCA9IEVHTF9OT19URVhUVVJFOwotCi0gICAg
bVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsg
ICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAgICBtUmVu
ZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVG
RkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgc2V0U3dhcEludGVy
dmFsKDEpOwotCi0gICAgc3ViY2xhc3NXaW5kb3coKTsKLX0KLQotU3VyZmFjZTo6U3VyZmFjZShE
aXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxl
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGVudW0gdGV4dHVyZUZvcm1hdCwgRUdM
ZW51bSB0ZXh0dXJlVHlwZSkKLSAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwp
LCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0
aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQot
ewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAg
ICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBt
VGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7Ci0gICAgbVRleHR1cmVUYXJnZXQgPSB0ZXh0
dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJ
U1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0
IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKLSAgICBtU3dhcEJl
aGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0xOwot
ICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQotU3VyZmFjZTo6flN1cmZhY2UoKQotewotICAg
IHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6
aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4
dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpCi0g
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZv
ciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQsCi0gICAgLy8gdG8gbWluaW1pemUg
dGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvCi0g
ICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBzY3JlZW4uCi0gICAgaWYgKG1XaW5kb3cgJiYg
KGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgewotICAg
ICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBIUkVTVUxUIHJlc3VsdCA9IER3bUlzQ29tcG9z
aXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwotICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
ICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNl
bnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJlc2VudFBhcmFtcywgMCwgc2l6ZW9mKHByZXNl
bnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BS
RVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7Ci0K
LSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNl
bnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgRVJSKCJV
bmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpyZWxlYXNl
KCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
Ci0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1UZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwotICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKLXsK
LSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4o
bVdpZHRoLCBtSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBSRUNUIHdpbmRvd1JlY3Q7Ci0gICAgaWYg
KCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVjdCkpCi0gICAgewot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotCi0gICAgICAgIEVSUigiQ291bGQgbm90IHJldHJpZXZl
IHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKHdpbmRvd1JlY3QucmlnaHQgLSB3aW5kb3dSZWN0
LmxlZnQsIHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3ApOwotfQotCi1ib29sIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXRE
ZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSogcHJlc2VydmVkUmVuZGVy
VGFyZ2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgJiYgbVJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IG1SZW5kZXJU
YXJnZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQot
Ci0gICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBt
ZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwotICAgIC8vIGJlZm9yZSByZWFsbG9jYXRp
bmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgotICAg
IGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAgcmVsZWFzZSgpOwotCi0gICAg
RDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lv
bigpID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCk7Ci0K
LSAgICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hpbmcgd2hlbiByZXNpemluZyB3
aW5kb3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNpZGUgb2YgdGhlIFdNX1BBSU5U
IGNhbGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2JsZW0gaW4KLSAgICAvLyBzaW5n
bGUgcHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vhcmx5IG5vdGljZWFibGUgaW4g
bXVsdGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVyZWZvcmUsIGlmIHRoZSBjcmVh
dG9yIHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAgICAvLyB0aGUgY3VycmVudCBw
cm9jZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdPUkQgd2luZG93UElEOwotICAg
IEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2luZG93UElEKTsKLSAgICBpZiAo
d2luZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAgICB7Ci0gICAgICAgIHVzZUZs
aXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMgaGFyZHdhcmUgZG9lcyBub3Qg
c3VwcG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhlciB0aGUKLSAgICAvLyBkZXZp
Y2UgZm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3QgMzItYml0LgotICAgIEhEQyBk
ZXZpY2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmljZUZvcm1hdEJpdHMgPSBHZXRE
ZXZpY2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0gICAgUmVsZWFzZURDKDAsIGRl
dmljZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVyU2l6ZSAhPSAzMiB8fCBkZXZp
Y2VGb3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMgYWx3YXlzIFZTWU5DZWQKLSAg
ICBpZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggZG9lcyBub3QgcHJlc2Vy
dmUgdGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAg
ICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9y
bWF0OwotICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1c2Ug
RDNEU1dBUEVGRkVDVF9GTElQRVguCi0gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIERpcmVjdFgg
ZG9jcyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0byAxCi0gICAgLy8gb3Ig
Mi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNwZWN1bGF0ZSB0aGF0IGVp
dGhlciBpdCBpcwotICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0IHRlbGxpbmcgdXMsIG9y
IGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0Ci0gICAgLy8gYmVoaW5kIHRoZSBzY2VuZXMg
a25vd2luZyB0aGF0IHdlIGRvbid0IG5lZWQgbW9yZS4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5G
bGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRv
d0hhbmRsZSgpOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1F
OiBVbmltcGxlbWVudGVkCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2
YWwgPSBtUHJlc2VudEludGVydmFsOwotICAgIC8vIFVzZSBmbGlwRXggb24gV2luNyBvciBncmVh
dGVyLgotICAgIGlmKHVzZUZsaXBFeCkKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZl
Y3QgPSBEM0RTV0FQRUZGRUNUX0ZMSVBFWDsKLSAgICBlbHNlCi0gICAgICBwcmVzZW50UGFyYW1l
dGVycy5Td2FwRWZmZWN0ID0gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPyBEM0RTV0FQRUZGRUNU
X0NPUFkgOiBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2lu
ZG93ZWQgPSBUUlVFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJh
Y2tidWZmZXJXaWR0aDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0g
YmFja2J1ZmZlckhlaWdodDsKLQotICAgIGlmIChtV2luZG93KQotICAgIHsKLSAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVy
cywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhBTkRMRSAqcFNoYXJlSGFu
ZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgp
KSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwg
MSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZB
VUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7Ci0gICAgfQotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0g
RDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zm
c2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLQot
ICAgICAgICAKLSAgICAgICAgaWYgKHByZXNlcnZlZFJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYo
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbURpc3Bs
YXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JV
RkZFUl9UWVBFX01PTk8sICZtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKCFwcmVzZXJ2ZWRS
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5k
b3csIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0
KTsKLSAgICB9Ci0KLSAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAg
IG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4g
c3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRp
Y19jYXN0PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAg
ICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQsICZyZWN0LCBt
UmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICBwcmVzZXJ2ZWRS
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBE
M0RGTVRfVU5LTk9XTikKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVw
dGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVu
Y2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0gICAg
fQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8
fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgi
LCByZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVySGVpZ2h0OwotCi0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKLXsKLSAg
ICByZXR1cm4gbVdpbmRvdzsKLX0KLQotCi0jZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQo
IkVnbDo6U3VyZmFjZU93bmVyIikKLSNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6
U3VyZmFjZVBhcmVudFduZFByb2MiKQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNl
V2luZG93UHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFN
IGxwYXJhbSkKLXsKLSAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkKLSAgewotICAgICAgU3VyZmFj
ZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZh
Y2VQcm9wZXJ0eSkpOwotICAgICAgaWYoc3VyZikKLSAgICAgIHsKLSAgICAgICAgICBzdXJmLT5j
aGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgICAgfQotICB9Ci0gIFdORFBST0MgcHJl
dlduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJl
bnRXbmRQcm9jKSk7Ci0gIHJldHVybiBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwg
bWVzc2FnZSwgd3BhcmFtLCBscGFyYW0pOwotfQotCi12b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2lu
ZG93KCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgRFdPUkQgcHJvY2Vzc0lkOwotICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93
VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOwotICAgIGlmIChwcm9jZXNzSWQg
IT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpIHx8IHRocmVhZElkICE9IEdldEN1cnJlbnRUaHJlYWRJ
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldExhc3RFcnJvcigw
KTsKLSAgICBMT05HX1BUUiBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBH
V0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9j
KSk7Ci0gICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NV
Q0NFU1MpCi0gICAgewotICAgICAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5
LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNldFByb3AobVdpbmRvdywg
a1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7Ci0g
ICAgbVdpbmRvd1N1YmNsYXNzZWQgPSB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnVuc3ViY2xh
c3NXaW5kb3coKQotewotICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFzcwotICAgIExPTkdfUFRSIHBhcmVu
dFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQ
YXJlbnRXbmRQcm9jKSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBT
dXJmYWNlV2luZG93UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBp
cyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQotICAgIC8vIGh3bmQg
YXMgd2VsbCBhbmQgZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wg
Y29udGV4dC4gVGhlCi0gICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVp
dGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIEVHTCBjb250ZXh0
LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4KLSAg
ICBpZihwYXJlbnRXbmRGdW5jKQotICAgIHsKLSAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMg
PSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7
Ci0gICAgICAgIEFTU0VSVChwcmV2V25kRnVuYyA9PSByZWludGVycHJldF9jYXN0PExPTkdfUFRS
PihTdXJmYWNlV2luZG93UHJvYykpOwotICAgIH0KLQotICAgIFJlbW92ZVByb3AobVdpbmRvdywg
a1N1cmZhY2VQcm9wZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJv
Yyk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpj
aGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCi17Ci0gICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYg
KCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0
byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdp
ZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9
IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50
V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAg
ICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkKLSAgICB7Ci0gICAgICAg
IHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwotICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRo
aXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29u
dGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwg
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1EV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGlu
dGVydmFsKQotewotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X1RIUkVFOwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXAoKQotewotICAg
IGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0K
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKEVHTGludCB4LCBFR0xpbnQg
eSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICh4IDwgMCB8fCB5IDwg
MCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1BBUkFNRVRFUiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmICghbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQpCi0gICAgewotICAgICAgICAvLyBTcGVjIGlzIG5vdCBjbGVhciBhYm91
dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2Nl
bmUoKTsKLQotICAgICAgICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICB4LCBt
SGVpZ2h0IC0geSAtIGhlaWdodCwKLSAgICAgICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IG1XaWR0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IG1XaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChyZWN0LmJvdHRvbSA+IG1IZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3Qu
Ym90dG9tID0gbUhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmxlZnQgPT0g
cmVjdC5yaWdodCB8fCByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKLQotICAg
ICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QgfHwg
cmVzdWx0ID09IEQzREVSUl9ERVZJQ0VIVU5HIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFUkVN
T1ZFRCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xP
U1QsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVdpZHRoOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi1J
RGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwot
ICAgIH0KLQotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJl
OSAqU3VyZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5U
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAg
IH0KLQotICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpz
ZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlmIChtU3dhcEludGVydmFs
ID09IGludGVydmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBt
U3dhcEludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1T
d2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJ
bnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50
ZXJ2YWwoKSk7Ci0KLSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2Fw
SW50ZXJ2YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVu
dW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0
dXJlRm9ybWF0OwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRC
b3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRl
eHR1cmU7Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0
Rm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1h
dDsKLX0KLX0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFN1cmZhY2UuY3BwOiBJbXBs
ZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3Vy
ZmFjZQ0KKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcg
YW55IGJhY2sgYnVmZmVycy4NCisvLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4NCisNCisjaW5jbHVk
ZSA8dGNoYXIuaD4NCisNCisjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCINCisNCisjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiDQorDQor
I2luY2x1ZGUgImxpYkVHTC9tYWluLmgiDQorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiDQor
DQorI2luY2x1ZGUgPGR3bWFwaS5oPg0KKw0KK25hbWVzcGFjZSBlZ2wNCit7DQorDQorbmFtZXNw
YWNlDQorew0KK2NvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwg
MHgwNik7DQorY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VXT1JEKDB4MDEsIDB4MDYp
Ow0KKw0KKy8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBh
IGZvcm1hdCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcNCisvLyBjb21wYXJpc29uLg0KK2ludCBnZXRD
b21wYXJhYmxlT1NWZXJzaW9uKCkNCit7DQorICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJzaW9u
KCk7DQorICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsNCisg
ICAgaW50IG1pbm9yVmVyc2lvbiA9IEhJQllURShMT1dPUkQodmVyc2lvbikpOw0KKyAgICByZXR1
cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOw0KK30NCit9DQorDQorU3Vy
ZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSFdO
RCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSANCisgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpDQorew0KKyAgICBtU3dhcENoYWlu
ID0gTlVMTDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsNCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZzY3JlZW5UZXh0dXJl
ID0gTlVMTDsNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCisgICAgbVRleHR1cmUgPSBOVUxM
Ow0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJFOw0KKyAgICBtVGV4dHVyZVRh
cmdldCA9IEVHTF9OT19URVhUVVJFOw0KKw0KKyAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xp
bnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0
dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVG
RkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7DQorICAgIG1T
d2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVydmFsKDEpOw0KKw0KKyAgICBzdWJj
bGFzc1dpbmRvdygpOw0KK30NCisNCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXks
IGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUeXBl
KQ0KKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwpLCBtQ29uZmlnKGNvbmZp
ZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0aCksIG1IZWlnaHQoaGVp
Z2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQ0KK3sNCisgICAgbVN3YXBD
aGFpbiA9IE5VTEw7DQorICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgbURlcHRoU3RlbmNp
bCA9IE5VTEw7DQorICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICBtT2Zmc2NyZWVuVGV4
dHVyZSA9IE5VTEw7DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7DQorICAgIG1UZXh0
dXJlID0gTlVMTDsNCisgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlRm9ybWF0Ow0KKyAgICBt
VGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOw0KKw0KKyAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9
IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1p
bmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JB
Q0tfQlVGRkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7DQor
ICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVydmFsKDEpOw0KK30NCisN
CitTdXJmYWNlOjp+U3VyZmFjZSgpDQorew0KKyAgICB1bnN1YmNsYXNzV2luZG93KCk7DQorICAg
IHJlbGVhc2UoKTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjppbml0aWFsaXplKCkNCit7DQorICAg
IEFTU0VSVCghbVN3YXBDaGFpbiAmJiAhbU9mZnNjcmVlblRleHR1cmUgJiYgIW1EZXB0aFN0ZW5j
aWwpOw0KKw0KKyAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpDQorICAgICAgcmV0dXJuIGZhbHNl
Ow0KKw0KKyAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywg
aWYgd2UgYXJlIGNvbXBvc2l0ZWQsDQorICAgIC8vIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2Yg
cXVldWluZyBkb25lIGJ5IERXTSBiZXR3ZWVuIG91ciBjYWxscyB0bw0KKyAgICAvLyBwcmVzZW50
IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4NCisgICAgaWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFi
bGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgew0KKyAgICAgIEJPT0wgaXND
b21wb3NpdGVkOw0KKyAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3NpdGlvbkVuYWJs
ZWQoJmlzQ29tcG9zaXRlZCk7DQorICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIGlzQ29t
cG9zaXRlZCkgew0KKyAgICAgICAgRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1z
Ow0KKyAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2VudFBhcmFt
cykpOw0KKyAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BSRVNFTlRf
UEFSQU1FVEVSUyk7DQorICAgICAgICBwcmVzZW50UGFyYW1zLmNCdWZmZXIgPSAyOw0KKw0KKyAg
ICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNlbnRQ
YXJhbXMpOw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBzZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOw0KKyAgICAg
IH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpy
ZWxlYXNlKCkNCit7DQorICAgIGlmIChtU3dhcENoYWluKQ0KKyAgICB7DQorICAgICAgICBtU3dh
cENoYWluLT5SZWxlYXNlKCk7DQorICAgICAgICBtU3dhcENoYWluID0gTlVMTDsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobUJhY2tCdWZmZXIpDQorICAgIHsNCisgICAgICAgIG1CYWNrQnVmZmVyLT5S
ZWxlYXNlKCk7DQorICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIH0NCisNCisgICAg
aWYgKG1EZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bU9mZnNjcmVlblRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5S
ZWxlYXNlKCk7DQorICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisN
CisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtVGV4dHVyZS0+cmVsZWFzZVRl
eEltYWdlKCk7DQorICAgICAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigp
DQorew0KKyAgICBpZiAoIW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXNldFN3
YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOw0KKyAgICB9DQorDQorICAgIFJFQ1Qgd2luZG93UmVj
dDsNCisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVj
dCkpDQorICAgIHsNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorDQorICAgICAgICBFUlIoIkNv
dWxkIG5vdCByZXRyaWV2ZSB0aGUgd2luZG93IGRpbWVuc2lvbnMiKTsNCisgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVj
dC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0
LnRvcCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZm
ZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpDQorew0KKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7DQorDQorICAgIGlmIChkZXZpY2UgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIC8v
IEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFu
ZCByZWxlYXNlIGFsbCByZXNvdXJjZXMNCisgICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVt
IHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuDQorICAgIGRldmlj
ZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7DQorDQorICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsNCisgICAgSFJFU1VMVCByZXN1bHQ7DQorDQorICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0Ow0KKyAgICAvLyBXZSBzZXQgQmFja0J1ZmZlckNvdW50ID0gMSBldmVu
IHdoZW4gd2UgdXNlIEQzRFNXQVBFRkZFQ1RfRkxJUEVYLg0KKyAgICAvLyBXZSBkbyB0aGlzIGJl
Y2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRv
IDENCisgICAgLy8gb3IgMi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNw
ZWN1bGF0ZSB0aGF0IGVpdGhlciBpdCBpcw0KKyAgICAvLyBmb3JjaW5nIGl0IHRvIDIgd2l0aG91
dCB0ZWxsaW5nIHVzLCBvciBiZXR0ZXIsIGRvaW5nIHNvbWV0aGluZyBzbWFydA0KKyAgICAvLyBi
ZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLg0KKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOw0KKyAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsNCisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOw0KKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhE
ZXZpY2VXaW5kb3cgPSBnZXRXaW5kb3dIYW5kbGUoKTsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMu
TXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBs
ZW1lbnRlZA0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxU
SVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkDQorICAgIHByZXNlbnRQYXJh
bWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gbVByZXNlbnRJbnRlcnZhbDsNCisgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsNCisgICAg
cHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOw0KKyAgICBwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7DQorICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0Ow0KKw0KKyAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUNCisgICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhp
c3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4NCisgICAgaWYg
KG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsNCisg
ICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtQmFja0J1ZmZl
cikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsNCisgICAgICAgIG1C
YWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
DQorICAgIHsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0
ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAg
ICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIG1TaGFyZUhhbmRsZSA9
IE5VTEw7DQorICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsNCisgICAgaWYgKCFtV2lu
ZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQ0KKyAgICB7DQorICAgICAg
ICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOw0KKyAgICB9DQorDQorICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgs
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJl
LCBwU2hhcmVIYW5kbGUpOw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1
bHQpOw0KKyAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2
aWNlTG9zdCgpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
ICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgZmFsc2UpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0Ow0KKw0KKyAgICByZXN1bHQgPSBt
T2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsNCisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgaWYgKG9sZFJlbmRlclRhcmdl
dCkNCisgICAgew0KKyAgICAgICAgUkVDVCByZWN0ID0NCisgICAgICAgIHsNCisgICAgICAgICAg
ICAwLCAwLA0KKyAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodA0KKyAgICAgICAgfTsNCisNCisg
ICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZWN0LnJpZ2h0
ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOw0KKyAgICAgICAgfQ0KKw0KKyAg
ICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckhlaWdodCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVjdC5ib3R0
b20gPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZy
ZWN0LCBEM0RURVhGX05PTkUpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsN
CisNCisgICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAg
IGlmIChtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFk
ZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7DQorDQor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFk
ZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3Vs
dCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmKGlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0
QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsNCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgaWYgKG1D
b25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pDQorICAgIHsNCisg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFt
ZXRlcnMuTXVsdGlTYW1wbGVUeXBlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwg
RkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBE
M0RFUlJfSU5WQUxJRENBTEwpOw0KKw0KKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3Vs
dCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmKGlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIG1XaWR0aCA9IHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsNCisgICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJIZWlnaHQ7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IGZhbHNl
Ow0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xp
bnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQorICAgIGlm
ICghbVN3YXBDaGFpbikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisN
CisgICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkNCisgICAgew0KKyAgICAgICAgd2lkdGggPSBt
V2lkdGggLSB4Ow0KKyAgICB9DQorDQorICAgIGlmICh5ICsgaGVpZ2h0ID4gbUhlaWdodCkNCisg
ICAgew0KKyAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7DQorICAgIH0NCisNCisgICAgaWYg
KHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVl
Ow0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5n
ZXREZXZpY2UoKTsNCisNCisgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucw0K
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsN
CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJ
RCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBG
QUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBE
M0RDVUxMX05PTkUpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExB
TkVFTkFCTEUsIDApOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxF
X0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9S
RUQpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwg
RkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5B
QkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAgIGRl
dmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclRh
cmdldCgwLCBtQmFja0J1ZmZlcik7DQorICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFj
ZShOVUxMKTsNCisNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJl
KTsNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwg
RDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7DQorICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5U
KTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQz
RFRFWEZfUE9JTlQpOw0KKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsNCisNCisgICAgRDNEVklFV1BPUlQ5
IHZpZXdwb3J0ID0gezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07DQorICAgIGRl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsNCisNCisgICAgZmxvYXQgeDEgPSB4IC0gMC41
ZjsNCisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQpIC0gMC41ZjsNCisgICAg
ZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7DQorICAgIGZsb2F0IHkyID0gKG1IZWlnaHQg
LSB5KSAtIDAuNWY7DQorDQorICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7DQorICAg
IGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOw0KKyAgICBmbG9hdCB1MiA9ICh4ICsgd2lk
dGgpIC8gZmxvYXQobVdpZHRoKTsNCisgICAgZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBmbG9h
dChtSGVpZ2h0KTsNCisNCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7eDEsIHkxLCAwLjBmLCAx
LjBmLCB1MSwgdjJ9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEu
MGYsIHUyLCB2Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4w
ZiwgdTIsIHYxfSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHkyLCAwLjBmLCAxLjBm
LCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYNCisNCisgICAgbURpc3BsYXktPnN0
YXJ0U2NlbmUoKTsNCisgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVG
QU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsNCisgICAgbURpc3BsYXktPmVuZFNjZW5l
KCk7DQorDQorICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsNCisNCisgICAgUkVDVCBy
ZWN0ID0NCisgICAgew0KKyAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsDQorICAgICAg
ICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5DQorICAgIH07DQorDQorICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOw0KKw0K
KyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oZ2xH
ZXRDdXJyZW50Q29udGV4dCgpKTsNCisgICAgaWYgKGNvbnRleHQpDQorICAgIHsNCisgICAgICAg
IGNvbnRleHQtPm1hcmtBbGxTdGF0ZURpcnR5KCk7DQorICAgIH0NCisNCisgICAgaWYgKGlzRGV2
aWNlTG9zdEVycm9yKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlE
ZXZpY2VMb3N0KCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgIH0NCisNCisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgY2hlY2tGb3JPdXRPZkRhdGVT
d2FwQ2hhaW4oKTsNCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK0hXTkQgU3VyZmFjZTo6
Z2V0V2luZG93SGFuZGxlKCkNCit7DQorICAgIHJldHVybiBtV2luZG93Ow0KK30NCisNCisNCisj
ZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVyIikNCisjZGVm
aW5lIGtQYXJlbnRXbmRQcm9jIF9URVhUKCJFZ2w6OlN1cmZhY2VQYXJlbnRXbmRQcm9jIikNCisN
CitzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhIV05EIGh3bmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkNCit7DQorICBpZiAobWVz
c2FnZSA9PSBXTV9TSVpFKQ0KKyAgew0KKyAgICAgIFN1cmZhY2UqIHN1cmYgPSByZWludGVycHJl
dF9jYXN0PFN1cmZhY2UqPihHZXRQcm9wKGh3bmQsIGtTdXJmYWNlUHJvcGVydHkpKTsNCisgICAg
ICBpZihzdXJmKQ0KKyAgICAgIHsNCisgICAgICAgICAgc3VyZi0+Y2hlY2tGb3JPdXRPZkRhdGVT
d2FwQ2hhaW4oKTsNCisgICAgICB9DQorICB9DQorICBXTkRQUk9DIHByZXZXbmRGdW5jID0gcmVp
bnRlcnByZXRfY2FzdDxXTkRQUk9DID4oR2V0UHJvcChod25kLCBrUGFyZW50V25kUHJvYykpOw0K
KyAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNzYWdlLCB3cGFy
YW0sIGxwYXJhbSk7DQorfQ0KKw0KK3ZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3coKQ0KK3sN
CisgICAgaWYgKCFtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisN
CisgICAgRFdPUkQgcHJvY2Vzc0lkOw0KKyAgICBEV09SRCB0aHJlYWRJZCA9IEdldFdpbmRvd1Ro
cmVhZFByb2Nlc3NJZChtV2luZG93LCAmcHJvY2Vzc0lkKTsNCisgICAgaWYgKHByb2Nlc3NJZCAh
PSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElk
KCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRMYXN0RXJy
b3IoMCk7DQorICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5k
b3csIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRv
d1Byb2MpKTsNCisgICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVS
Uk9SX1NVQ0NFU1MpDQorICAgIHsNCisgICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgU2V0UHJvcChtV2luZG93LCBrU3Vy
ZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOw0KKyAgICBTZXRQ
cm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4ob2xk
V25kUHJvYykpOw0KKyAgICBtV2luZG93U3ViY2xhc3NlZCA9IHRydWU7DQorfQ0KKw0KK3ZvaWQg
U3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygpDQorew0KKyAgICBpZighbVdpbmRvd1N1YmNsYXNz
ZWQpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICAvLyB1bi1zdWJj
bGFzcw0KKyAgICBMT05HX1BUUiBwYXJlbnRXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxMT05H
X1BUUj4oR2V0UHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYykpOw0KKw0KKyAgICAvLyBDaGVj
ayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJvYy4NCisgICAgLy8gSWYg
dGhpcyBhc3NlcnQgZmFpbHMsIHRoZW4gaXQgaXMgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBoYXMg
c3ViY2xhc3NlZCB0aGUNCisgICAgLy8gaHduZCBhcyB3ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xh
c3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBUaGUNCisgICAgLy8gYXBwbGlj
YXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlh
bGl6aW5nIHRoZQ0KKyAgICAvLyBFR0wgY29udGV4dCwgb3IgdG8gdW5zdWJjbGFzcyBiZWZvcmUg
ZGVzdHJveWluZyB0aGUgRUdMIGNvbnRleHQuDQorICAgIGlmKHBhcmVudFduZEZ1bmMpDQorICAg
IHsNCisgICAgICAgIExPTkdfUFRSIHByZXZXbmRGdW5jID0gU2V0V2luZG93TG9uZ1B0cihtV2lu
ZG93LCBHV0xQX1dORFBST0MsIHBhcmVudFduZEZ1bmMpOw0KKyAgICAgICAgQVNTRVJUKHByZXZX
bmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7
DQorICAgIH0NCisNCisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5KTsN
CisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7DQorICAgIG1XaW5kb3dT
dWJjbGFzc2VkID0gZmFsc2U7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRh
dGVTd2FwQ2hhaW4oKQ0KK3sNCisgICAgUkVDVCBjbGllbnQ7DQorICAgIGlmICghR2V0Q2xpZW50
UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpDQorICAgIHsNCisgICAgICAgIEFTU0VS
VChmYWxzZSk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8gR3Jv
dyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3Jv
dyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLg0KKyAgICBpbnQgY2xpZW50V2lkdGgg
PSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsNCisgICAgaW50IGNsaWVudEhlaWdodCA9IGNs
aWVudC5ib3R0b20gLSBjbGllbnQudG9wOw0KKyAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdp
ZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOw0KKw0KKyAg
ICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkNCisgICAgew0KKyAgICAg
ICAgcmVzZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7DQorICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09
IHRoaXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJl
bnRDb250ZXh0KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5
KCkpLCB0aGlzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9
DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorRFdPUkQgU3VyZmFjZTo6Y29udmVydEludGVy
dmFsKEVHTGludCBpbnRlcnZhbCkNCit7DQorICAgIHN3aXRjaChpbnRlcnZhbCkNCisgICAgew0K
KyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOw0KKyAg
ICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOw0KKyAgICAgIGNhc2Ug
MjogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOw0KKyAgICAgIGNhc2UgMzogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7DQorICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9GT1VSOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsNCit9DQorDQor
Ym9vbCBTdXJmYWNlOjpzd2FwKCkNCit7DQorICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lk
dGgsIG1IZWlnaHQpOw0KK30NCisNCitib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50
IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpDQorew0KKyAgICBpZiAo
IW1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQ0KKyAgICB7DQorICAgICAgICAvLyBTcGVjIGlzIG5v
dCBjbGVhciBhYm91dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4NCisgICAgICAgIHJldHVy
biB0cnVlOw0KKyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gc3dhcFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVdpZHRoOw0KK30NCisNCitFR0xpbnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtSGVpZ2h0Ow0KK30NCisNCitFR0xpbnQgU3VyZmFjZTo6
aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtUG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZDsNCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lE
aXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgaWYg
KG1SZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigp
Ow0KKyAgICB9DQorDQorICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0Ow0KK30NCisNCisvLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldERlcHRo
U3RlbmNpbCgpDQorew0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAg
bURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1EZXB0aFN0
ZW5jaWw7DQorfQ0KKw0KK0lEaXJlY3QzRFRleHR1cmU5ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5U
ZXh0dXJlKCkNCit7DQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0KKyAgICAg
ICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBt
T2Zmc2NyZWVuVGV4dHVyZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwo
RUdMaW50IGludGVydmFsKQ0KK3sNCisgICAgaWYgKG1Td2FwSW50ZXJ2YWwgPT0gaW50ZXJ2YWwp
DQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgbVN3YXBJbnRl
cnZhbCA9IGludGVydmFsOw0KKyAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRl
cnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsNCisgICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwo
KSk7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3YXBJbnRl
cnZhbCk7DQorICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7DQorfQ0KKw0KK0VHTGVu
dW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRl
eHR1cmVGb3JtYXQ7DQorfQ0KKw0KK0VHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmVUYXJnZXQ7DQorfQ0KKw0KK3ZvaWQgU3Vy
ZmFjZTo6c2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpDQorew0KKyAgICBt
VGV4dHVyZSA9IHRleHR1cmU7DQorfQ0KKw0KK2dsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJv
dW5kVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK0Qz
REZPUk1BVCBTdXJmYWNlOjpnZXRGb3JtYXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7DQorfQ0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCmluZGV4IDM1MjYwZGUuLjQwYmQ3MDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCkBAIC02OSw2ICs2OSw3
IEBAIHByaXZhdGU6CiAKICAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKICAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1
ZmZlcjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNj
cmVlblRleHR1cmU7CkBAIC03OCw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdWJjbGFz
c1dpbmRvdygpOwogICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOwogICAgIGJvb2wgcmVzZXRT
d2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOworICAg
IGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQpOwogICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFs
KTsKIAogICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhhdCB0
aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmNwcAppbmRleCA0YjdmOWUxLi41MDg5ZDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCkBAIC0xMTA4LDYgKzExMDgs
MTEgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUG9zdFN1YkJ1ZmZlck5WKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGkKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAg
aWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7
CisgICAgICAgIH0KKwogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKaW5kZXggNjZjZDVjMC4u
MWI0NjY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCkBAIC0xLDQyNzYgKzEsNDMzOSBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2lu
ZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcKLS8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJ
dCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0K
LSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1
ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0jdW5kZWYgZmFyCi0KLW5h
bWVzcGFjZSBnbAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAgQVNTRVJUKHJvYnVzdEFj
Y2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAgbURpc3BsYXkgPSBOVUxM
OwotICAgIG1EZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJh
c2VIYW5kbGUoMCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYp
OwotCi0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOwotICAgIG1T
dGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250RmFjZSA9IEdMX0NDVzsK
LSAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdM
X0xFU1M7Ci0gICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gR0xfT05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBo
YSA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsK
LSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgbVN0YXRl
LmJsZW5kQ29sb3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7Ci0g
ICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxw
aGEgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zdGVu
Y2lsRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7Ci0gICAgbVN0
YXRlLnN0ZW5jaWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSAtMTsK
LSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1JlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IC0gMTsKLSAgICBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEZhaWwg
PSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xf
S0VFUDsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsKLSAgICBtU3RhdGUu
cG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cyA9IDAuMGY7Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwotICAg
IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFn
ZVZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBmYWxzZTsK
LSAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGl0aGVyID0gdHJ1
ZTsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFOwotICAgIG1T
dGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9OVF9DQVJFOwotCi0gICAg
bVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAg
ICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIgPSAwLjBmOwotICAgIG1T
dGF0ZS56RmFyID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0gICAgbVN0YXRl
LnNjaXNzb3JZID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5
TW9kZS5IZWlnaHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsKLSAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gdHJ1
ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAgIG1TdGF0ZS5kZXB0aE1h
c2sgPSB0cnVlOwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKLSAg
ICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7Ci0gICAg
fQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6Ci0gICAg
Ly8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAg
aGF2ZSB0d29kaW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZl
Y3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICAgIC8vIEluIG9yZGVy
IHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkg
YXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVz
IGFyZSAwLgotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOwotICAg
IG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7Ci0KLSAgICBt
U3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVmZmVyKDApOwotICAgIGJp
bmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwotICAg
IGJpbmRUZXh0dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICBiaW5k
RHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0KLSAgICBtU3Rh
dGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0Owot
ICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJv
d09yZGVyID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7Ci0gICAgbUxpbmVMb29w
SUIgPSBOVUxMOwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0gICAgbUludmFsaWRWYWx1
ZSA9IGZhbHNlOwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgbU91dE9mTWVt
b3J5ID0gZmFsc2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwot
Ci0gICAgbUhhc0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7
Ci0gICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJlc2V0U3RyYXRlZ3kgPSAo
bm90aWZ5UmVzZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VU
X05PVElGSUNBVElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7Ci0K
LSAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQzVGV4
dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBmYWxzZTsKLSAgICBt
U3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzID0gZmFsc2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7Ci0gICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBO
VUxMOwotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkK
LXsKLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0gICAgewotICAgICAgICBQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3Rh
dGUuY3VycmVudFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRnJh
bWVidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1G
cmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRmVu
Y2VNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdp
bigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlNYXAuZW1wdHkoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAg
fQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCi0gICAgewotICAg
ICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7Ci0gICAg
ICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigp
KTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9D
T1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBs
ZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJd
LnNldChOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0
eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBtSW5jb21w
bGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUuYXJy
YXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5V
TEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwotCi0gICAgbVRleHR1cmUy
RFplcm8uc2V0KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOwotCi0g
ICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFn
ZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLQotICAgIGlm
IChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVh
c2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxheSA9IGRpc3BsYXk7Ci0g
ICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmICghbUhhc0JlZW5D
dXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+Z2V0RGV2aWNl
Q2FwcygpOwotCi0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFu
YWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5k
ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0
aGlzKTsKLQotICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2aWNlQ2Fwcy5QaXhl
bFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAgICAgICAgbVN1cHBvcnRz
VmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpOwotICAg
ICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXktPmdldE5vblBvd2VyMlRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtRGlzcGxheS0+
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9
IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50
KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUp
OwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4VGV4dHVy
ZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURp
bWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1l
bnNpb24pICsgMTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1
YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRl
eHR1cmVMZXZlbD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4
Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlTGV2ZWwpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJCdWZmZXJGb3JtYXRz
W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgICAg
ICBEM0RGTVRfWDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAg
ICAgRDNERk1UX0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50IG1heCA9IDA7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZlckZvcm1hdHMpIC8gc2l6
ZW9mKEQzREZPUk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCAqbXVsdGlz
YW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAg
ICAgICAgICAgIG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9y
bWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBw
b3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1q
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pd
ICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBs
ZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXktPmdl
dEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMg
PSBtRGlzcGxheS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0
c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAg
ICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJlU3VwcG9y
dCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUNVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1EaXNw
bGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsKLSAgICAgICAgbVN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5
LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBv
cnQoKTsKLQotICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhW
ZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7Ci0KLSAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cyA9IDA7Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwotICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmcoKTsK
LQotICAgICAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0
WSA9IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgo
KTsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7
Ci0KLSAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZ
ID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7
Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7Ci0K
LSAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXcmFwIHRo
ZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2ln
biB0aGVtIHRvIHRoZSAnMCcgbmFtZXMKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJl
bmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBzdXJmYWNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAg
IENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJl
bmRlclRhcmdldCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWxidWZmZXJa
ZXJvID0gbmV3IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKGNvbG9yYnVmZmVy
WmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7Ci0KLSAgICBzZXRGcmFtZWJ1ZmZlclplcm8o
ZnJhbWVidWZmZXJaZXJvKTsKLQotICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlm
IChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICB9Ci0gICAgCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIHNldCBhbGwgb2YgdGhlIHN0YXRlLXJlbGF0ZWQgZGlydHkgZmxhZ3MsIHNvIHRo
YXQgYWxsIHN0YXRlIGlzIHNldCBkdXJpbmcgbmV4dCBwcmUtZHJhdy4KLXZvaWQgQ29udGV4dDo6
bWFya0FsbFN0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlh
bFBTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4
dHVyZVNlcmlhbFZTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwg
PSAwOwotICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsKLSAgICBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAw
OwotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCA9IGZhbHNlOwotICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRl
clRhcmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKLQotICAgIG1DbGVhclN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1
ZTsKLSAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Qb2x5Z29uT2Zmc2V0U3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAg
IG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7Ci0gICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0g
ICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjptYXJr
Q29udGV4dExvc3QoKQotewotICAgIGlmIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRF
WFRfT05fUkVTRVRfRVhUKQotICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9VTktOT1dOX0NPTlRF
WFRfUkVTRVRfRVhUOwotICAgIG1Db250ZXh0TG9zdCA9IHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6aXNDb250ZXh0TG9zdCgpCi17Ci0gICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKQotewotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVk
OwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsKLSAgICBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUu
YWxwaGEgPSBhbHBoYTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRl
cHRoKQotewotICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0aDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCi17Ci0gICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gc3RlbmNpbDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShi
b29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVkKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKLSAgICAgICAgbUN1bGxTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVuYWJs
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsTW9k
ZSAhPSBtb2RlKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0gbW9kZTsKLSAgICAg
ICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
RnJvbnRGYWNlKEdMZW51bSBmcm9udCkKLXsKLSAgICBpZiAobVN0YXRlLmZyb250RmFjZSAhPSBm
cm9udCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9udDsKLSAgICAgICAg
bUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVw
dGhUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCAhPSBlbmFi
bGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAg
IG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0Rl
cHRoVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZGVwdGhUZXN0Owot
fQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKQotewotICAg
IGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7Ci0gICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBm
bG9hdCB6RmFyKQotewotICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOwotICAgIG1TdGF0ZS56RmFy
ID0gekZhcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJs
ZW5kID0gZW5hYmxlZDsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi1ib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLmJsZW5kOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRmFjdG9ycyhHTGVudW0g
c291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVz
dEFscGhhKQotewotICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gc291cmNlUkdCIHx8
Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJjZUFscGhhIHx8Ci0gICAg
ICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAotICAgICAgICBtU3RhdGUuZGVz
dEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCID0gc291cmNlUkdCOwotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJH
QjsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsKLSAgICAg
ICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOwotICAgICAgICBtQmxlbmRTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihm
bG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBp
ZiAobVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAotICAgICAgICBtU3RhdGUuYmxlbmRD
b2xvci5ncmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlICE9
IGJsdWUgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpCi0gICAg
ewotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmdyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUg
PSBibHVlOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IGFscGhhOwotICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQot
ewotICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fAotICAg
ICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pCi0gICAgewot
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOwotICAgICAgICBt
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsKLSAgICAgICAgbUJsZW5k
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxU
ZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICE9IGVuYWJs
ZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOwotICAgICAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojpp
c1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zdGVuY2ls
VGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2ls
RnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKQotewotICAgIGlmICht
U3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxSZWYgIT0gc3RlbmNpbFJlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gc3Rl
bmNpbE1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2lsRnVu
YzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNp
bFJlZiA6IDA7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrOwotICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVu
Y2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0
ZW5jaWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFj
a01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrRnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
ID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7Ci0gICAgICAgIG1T
dGF0ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7Ci0gICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxX
cml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNr
V3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRl
LnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNpbEJhY2tXcml0ZW1hc2s7
Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENv
bnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0
ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi17Ci0gICAg
aWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAotICAgICAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7Ci0gICAgICAgIG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKLSAg
ICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51
bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3RlbmNpbEJhY2tGYWls
IHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsK
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3Rh
dGUucG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZp
bGxFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxs
OwotCi19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZh
Y3RvciwgR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0
b3IgIT0gZmFjdG9yIHx8Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5p
dHMpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IGZhY3RvcjsK
LSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOwotICAgICAgICBtUG9s
eWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGly
dHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUFscGhhVG9Db3Zl
cmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxl
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQ292
ZXJhZ2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdl
OwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZh
bHVlLCBib29sIGludmVydCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUg
IT0gdmFsdWUgfHwKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVy
dCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gdmFsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsKLSAgICAgICAgbVNh
bXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTY2lz
c29yVGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBl
bmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsKLSAg
ICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4
dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2Np
c3NvclRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRl
LmRpdGhlciA9IGVuYWJsZWQ7Ci0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN0YXRlLmRpdGhlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRMaW5lV2lkdGgoR0xm
bG9hdCB3aWR0aCkKLXsKLSAgICBtU3RhdGUubGluZVdpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0
ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRlLmZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50OwotICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0
aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3JpdGUKLSAgICAvLyBkZHgs
IGRkeF9jb2Fyc2UsIG9yIGRkeF9maW5lIGRlcGVuZGluZyBvbiB0aGUgaGludC4KLSAgICAvLyBJ
Z25vcmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUg
aGludC4KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtU3RhdGUudmlld3Bv
cnRYID0geDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0geTsKLSAgICBtU3RhdGUudmlld3BvcnRX
aWR0aCA9IHdpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGhlaWdodDsKLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8
fCBtU3RhdGUuc2Npc3NvclkgIT0geSB8fCAKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCAh
PSB3aWR0aCB8fCBtU3RhdGUuc2Npc3NvckhlaWdodCAhPSBoZWlnaHQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc2Npc3NvclggPSB4OwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSB5OwotICAg
ICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29y
SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4s
IGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICBpZiAobVN0YXRlLmNvbG9yTWFza1JlZCAh
PSByZWQgfHwgbVN0YXRlLmNvbG9yTWFza0dyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhICE9IGFscGhh
KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHJlZDsKLSAgICAgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVl
ID0gYmx1ZTsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gYWxwaGE7Ci0gICAgICAg
IG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERl
cHRoTWFzayhib29sIG1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgIT0gbWFzaykK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSBtYXNrOwotICAgICAgICBtTWFza1N0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRBY3RpdmVTYW1w
bGVyKHVuc2lnbmVkIGludCBhY3RpdmUpCi17Ci0gICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBh
Y3RpdmU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBj
b25zdAotewotICAgIHJldHVybiBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQg
Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1
ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQo
KTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0
OjpnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIFF1ZXJ5ICpxdWVy
eU9iamVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBxdWVyeU9iamVjdCA9IG1T
dGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9F
WFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHF1ZXJ5
T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250
ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQotewotICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7Ci19Ci0KLWNvbnN0IHZvaWQgKkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVy
OwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0
cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0
YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENvbnRleHQ6OmdldFBh
Y2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsK
LX0KLQotdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQot
ewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRl
cihib29sIHJldmVyc2VSb3dPcmRlcikKLXsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRl
ciA9IHJldmVyc2VSb3dPcmRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJv
d09yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7
Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtUmVz
b3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZVByb2dyYW0oKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVQcm9ncmFt
KCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0g
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotR0x1
aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5jcmVhdGVUZXh0dXJlKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZm
ZXIoKTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQotR0x1aW50
IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZy
YW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtRnJhbWVidWZmZXJN
YXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1HTHVpbnQgQ29u
dGV4dDo6Y3JlYXRlRmVuY2UoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVB
bGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GZW5jZU1hcFtoYW5kbGVdID0gbmV3IEZlbmNl
KG1EaXNwbGF5KTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51
c2VkIHF1ZXJ5IG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbVF1
ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBD
b250ZXh0OjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBpZiAobVJlc291cmNl
TWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAgICBkZXRhY2hCdWZmZXIo
YnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVy
KGJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIp
Ci17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgIG1DYWNoZWRDdXJyZW50UHJv
Z3JhbSA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4
dHVyZSkKLXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkK
LSAgICB7Ci0gICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgbVJl
c291cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAobVJl
c291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAg
ICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAg
bVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewot
ICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1
ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCAh
PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZyYW1lYnVm
ZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFzZShmcmFtZWJ1
ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWlu
dCBmZW5jZSkKLXsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VN
YXAuZmluZChmZW5jZSk7Ci0KLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgp
KQotICAgIHsKLSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmpl
Y3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAg
IG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVl
cnlPYmplY3QgPSBtUXVlcnlNYXAuZmluZChxdWVyeSk7Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0ICE9
IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeUhhbmRsZUFsbG9jYXRvci5y
ZWxlYXNlKHF1ZXJ5T2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vj
b25kKQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeU9iamVjdC0+c2Vjb25kLT5yZWxlYXNl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVF1ZXJ5TWFwLmVyYXNlKHF1ZXJ5T2JqZWN0KTsKLSAg
ICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKEdMdWludCBoYW5kbGUpCi17Ci0g
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwotfQotCi1TaGFk
ZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2Vy
LT5nZXRQcm9ncmFtKGhhbmRsZSk7Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUo
R0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVy
ZShoYW5kbGUpOwotfQotCi1SZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihH
THVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJi
dWZmZXIoaGFuZGxlKTsKLX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1
ZmZlcigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZm
ZXIpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwotfQotCi12b2lkIENvbnRleHQ6OmJp
bmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmFycmF5QnVm
ZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEVsZW1l
bnRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJp
bmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEKTsKLQotICAgIG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRl
eHR1cmUodGV4dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChH
THVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxv
Y2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4
dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAg
IHsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZl
cigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsK
LX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cikKLXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAg
ICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAg
ICB9Ci0KLSAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci0KLSAgICBt
Qm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewot
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihyZW5kZXJi
dWZmZXIpOwotCi0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dy
YW0pCi17Ci0gICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsK
LSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAgIC8vIE11
c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25seSBnZXRz
IGZsYWdnZWQuCi0KLSAgICBpZiAocHJpb3JQcm9ncmFtICE9IHByb2dyYW0pCi0gICAgewotICAg
ICAgICBQcm9ncmFtICpuZXdQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLSAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXIt
PmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsKLSAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFt
ID0gTlVMTDsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KG5ld1Byb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkUHJvZ3JhbSkKLSAgICAgICAg
ewotICAgICAgICAgICAgb2xkUHJvZ3JhbS0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5
KQotewotICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1
ZXJ5RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIAotICAgIC8vIG9mIHplcm8sIGlmIHRoZSBh
Y3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhl
ICAKLSAgICAvLyB0YXJnZXRzIEFOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEFOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULCBpZiAgCi0gICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBm
b3IgZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4g
Ci0gICAgLy8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2gg
PHRhcmdldD4sIG9yIGlmIDxpZD4gaXMgdGhlCi0gICAgLy8gYWN0aXZlIHF1ZXJ5IG9iamVjdCBu
YW1lIGZvciBhbnkgcXVlcnkgdHlwZSwgdGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzCi0g
ICAgLy8gZ2VuZXJhdGVkLgotCi0gICAgLy8gRW5zdXJlIG5vIG90aGVyIHF1ZXJpZXMgYXJlIGFj
dGl2ZQotICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24gYXJlIHN1
cHBvcnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrCi0gICAgLy8gc2VwYXJhdGVseSB0aGF0Ogot
ICAgIC8vICAgIGEpIFRoZSBxdWVyeSBJRCBwYXNzZWQgaXMgbm90IHRoZSBjdXJyZW50IGFjdGl2
ZSBxdWVyeSBmb3IgYW55IHRhcmdldC90eXBlCi0gICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFj
dGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlCi0g
ICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCi0gICAgLy8gICAgICAgbm8gcXVlcnkgbWF5IGJl
IGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRzIGVpdGhlci4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwg
dGFyZ2V0KTsKLQotICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdl
blF1ZXJpZXMKLSAgICBpZiAoIXF1ZXJ5T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBmb3IgdHlw
ZSBtaXNtYXRjaAotICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlwZSgpICE9IHRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQot
Ci0gICAgLy8gc2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldAotICAgIG1T
dGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5T2JqZWN0KTsKLQotICAgIC8vIGJlZ2lu
IHF1ZXJ5Ci0gICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZW5k
UXVlcnkoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBRdWVyeVR5cGUgcVR5cGU7Ci0KLSAgICBzd2l0
Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDog
Ci0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsg
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOwotCi0gICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5V
TEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKLQotICAgIG1TdGF0ZS5hY3RpdmVRdWVy
eVtxVHlwZV0uc2V0KE5VTEwpOwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVy
byhGcmFtZWJ1ZmZlciAqYnVmZmVyKQotewotICAgIGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07
Ci0gICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwotICAgIGlmIChtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyID09IDApCi0gICAgewotICAgICAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBi
dWZmZXI7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
UmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQotewotICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKLSAgICByZW5k
ZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKLX0KLQotRnJhbWVidWZm
ZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAg
RnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZp
bmQoaGFuZGxlKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJhbWVidWZmZXJNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1GZW5jZSAq
Q29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBGZW5jZU1hcDo6
aXRlcmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZlbmNl
ID09IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsKLSAgICB9Ci19
Ci0KLVF1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25lZCBpbnQgaGFuZGxlLCBib29sIGNy
ZWF0ZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1
ZXJ5TWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChxdWVyeSA9PSBtUXVlcnlNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcXVlcnktPnNlY29uZCA9IG5ldyBRdWVyeShoYW5kbGUsIHR5cGUpOwotICAgICAgICAgICAg
cXVlcnktPnNlY29uZC0+YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1ZXJ5
LT5zZWNvbmQ7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwotfQotCi1CdWZmZXIgKkNv
bnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldEN1cnJlbnRQ
cm9ncmFtKCkKLXsKLSAgICBpZiAoIW1DYWNoZWRDdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAg
ICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0o
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50
UHJvZ3JhbTsKLX0KLQotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUu
YWN0aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOwotfQotCi1UZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
Q3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJF
X0NVQkUpKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWdu
ZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCi17Ci0gICAgR0x1aW50IHRleGlkID0g
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7Ci0KLSAgICBpZiAodGV4
aWQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFs
IHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7Ci0gICAgICAg
ICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBl
XVtzYW1wbGVyXS5nZXQoKTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0g
cG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQotewotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewot
ICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICAqcGFyYW1zID0gR0xfVFJV
RTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZl
cnQ7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0
ZS5jb2xvck1hc2tSZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVl
bjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yTWFza0JsdWU7Ci0gICAgICAgIHBh
cmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbEZh
Y2U7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2U7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNU
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhU
ZXN0OyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNz
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0
OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxl
YXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBn
ZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBh
IGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0g
ICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291
bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1h
a2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2gg
KHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVy
YWdlVmFsdWU7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25P
ZmZzZXRGYWN0b3I7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBn
bDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gZ2w6
OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGdsOjpB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0
c1NoYWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDog
Z2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVh
cjsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWUuYmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBo
YTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1T
dGF0ZS5ibGVuZENvbG9yLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuYmxlbmRD
b2xvci5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBERVBU
SF9DTEVBUl9WQUxVRSBpcyBub3QgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEludGVnZXJ2
IGltcGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwg
ZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdl
dEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVp
cmUgY29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRp
ZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIFlvdSBtYXkgZmluZCBpdCBpbiAK
LSAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFS
WUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdl
dE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURF
Ul9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1B
VFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJh
bXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAg
Ly9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxl
bnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0gICAgICBjYXNlIEdMX0RS
QVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFt
ZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzog
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5w
YWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOUEFD
S19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQ
X0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElW
RV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVO
QzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7ICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0
aFBhc3M7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDog
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JM
RU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FM
UEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0
ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dS
SVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBn
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAKLSAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9T
QU1QTEVTX0FOR0xFOgotICAgICAgICB7Ci0gICAgICAgICAgICBHTHNpemVpIG1heFNhbXBsZXMg
PSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAh
PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtYXhTYW1wbGVz
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAg
ICAgICAgIAotICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkg
IT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQ6ICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9G
T1JNQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9IHN0ZDo6bWF4KGdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24oKSwgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSk7Ci0gICAg
ICAgICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247Ci0gICAgICAgICAgICBwYXJhbXNbMV0g
PSBtYXhEaW1lbnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAq
cGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOwotICAgICAgICAgICAg
ICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUu
dmlld3BvcnRZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsKLSAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0OwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5z
Y2lzc29yWDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICBw
YXJhbXNbMl0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3Rh
dGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFD
RV9NT0RFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgot
ICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVy
ID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAg
KnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3Jl
ZW5TaXplKCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRBbHBo
YVNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9E
RVBUSF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotCi0gICAg
ICAgICAgICBpZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KTsKLQotICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxl
ciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RF
WFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FU
SU9OX1NUUkFURUdZX0VYVDoKLSAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5OwotICAg
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
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAq
dHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJ
RVdQT1JUOgotICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgewotICAgICAgICAg
ICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgotICAgICAg
Y2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgY2FzZSBHTF9ERVBUSF9XUklU
RU1BU0s6Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9G
QUNFIHRocm91Z2ggRElUSEVSIGFyZSBuYXR1cmFsIHRvIElzRW5hYmxlZCwKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJv
dWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMuCi0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRTogLy8gRm9yIHRoaXMgcHVycG9zZSwgdGhleSBhcmUgdHJlYXRlZCBoZXJlIGFz
IGJvb2wtbmF0dXJhbAotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6Ci0gICAgICBjYXNl
IEdMX1NDSVNTT1JfVEVTVDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOgotICAgICAgY2Fz
ZSBHTF9ERVBUSF9URVNUOgotICAgICAgY2FzZSBHTF9CTEVORDoKLSAgICAgIGNhc2UgR0xfRElU
SEVSOgotICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0g
MTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVN
QVNLOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAg
ICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOgotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9V
TklUUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgY2FzZSBH
TF9ERVBUSF9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDoKLSAgICAgICAg
ewotICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0U6Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToK
LSAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBl
ID0gR0xfRkxPQVQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0NPTE9SOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FU
OwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVw
dGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5nbGUgYW5kCi0vLyBzY2lzc29yIHJl
Y3RhbmdsZSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLWJvb2wgQ29udGV4dDo6YXBwbHlSZW5k
ZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZm
ZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgYm9vbCByZW5kZXJU
YXJnZXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlh
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwoKTsKLSAgICBpZiAo
cmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQotICAgIHsK
LSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9z
dAotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJU
YXJnZXQpOwotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdl
dFNlcmlhbDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsgLy8gU2Npc3NvciBh
cmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0tIHRoaXMgaXMgZGlm
ZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuCi0gICAgICAgIHJlbmRlclRhcmdl
dENoYW5nZWQgPSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9
Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
YnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAg
ICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRo
IHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0U2VyaWFsKCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYg
KCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2VyaWFsKCk7Ci0gICAgfQot
Ci0gICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
fHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJT
ZXJpYWwgfHwKLSAgICAgICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsKLSAgICAg
ICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwotICAgICAg
ICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOwotICAg
ICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
bVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQotICAg
IHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUg
bG9zdAotICAgICAgICB9Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRh
cmdldERlc2MpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsK
LSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgRDNEVklFV1BP
UlQ5IHZpZXdwb3J0OwotCi0gICAgZmxvYXQgek5lYXIgPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7
Ci0gICAgZmxvYXQgekZhciA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOwotCi0gICAgaWYgKGlnbm9y
ZVZpZXdwb3J0KQotICAgIHsKLSAgICAgICAgdmlld3BvcnQuWCA9IDA7Ci0gICAgICAgIHZpZXdw
b3J0LlkgPSAwOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IG1SZW5kZXJUYXJnZXREZXNjLldp
ZHRoOwotICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7
Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOwotICAgICAgICB2aWV3cG9ydC5NYXhaID0g
MS4wZjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KG1TdGF0ZS52aWV3cG9ydFgsIG1TdGF0ZS52aWV3cG9ydFksIG1TdGF0ZS52
aWV3cG9ydFdpZHRoLCBtU3RhdGUudmlld3BvcnRIZWlnaHQsIG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCk7Ci0gICAgICAgIHZpZXdwb3J0LlggPSBjbGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNf
Y2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICB2aWV3cG9ydC5Z
ID0gY2xhbXAocmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVz
Yy5IZWlnaHQpKTsKLSAgICAgICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgp
IC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOwotICAgICAgICB2aWV3cG9ydC5IZWln
aHQgPSBjbGFtcChyZWN0LmJvdHRvbSAtIHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
bVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0Llkp
KTsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IHpOZWFyOwotICAgICAgICB2aWV3cG9ydC5NYXha
ID0gekZhcjsKLSAgICB9Ci0KLSAgICBpZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9y
dC5IZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5n
IHRvIHJlbmRlcgotICAgIH0KLQotICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmll
d3BvcnRJbml0aWFsaXplZCB8fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXpl
b2YgbVNldFZpZXdwb3J0KSAhPSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0Vmlld3Bv
cnQoJnZpZXdwb3J0KTsKLSAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0gICAgICAg
IG1WaWV3cG9ydEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qg
cmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUuc2Npc3NvclgsIG1TdGF0ZS5zY2lzc29y
WSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIG1SZW5kZXJUYXJn
ZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChyZWN0LmxlZnQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAg
ICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1S
ZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1w
KHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0
aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRvbSwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgIEdMaW50IGhh
bGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYg
LyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2
KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKLQotICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVz
ZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCku
IFRoZSBhcHByb2FjaCBkZXBlbmRzIG9uIFNoYWRlciBNb2RlbCAzLjAgc3VwcG9ydC4KLSAgICAg
ICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtT2JqZWN0LT5nZXREeENvb3JkTG9jYXRpb24oKTsKLSAg
ICAgICAgZmxvYXQgaCA9IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodCA6IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGY7Ci0gICAgICAgIEdMZmxvYXQg
d2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIGgsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdp
ZHRoIC8gMi4wZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmll
d3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1P
YmplY3QtPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwotCi0gICAgICAgIEdMaW50IGRl
cHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxv
YXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9
OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7Ci0K
LSAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhSYW5n
ZUxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpG
YXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYo
ZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIGZp
eGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywg
c3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6
YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJP
YmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMZW51bSBhZGp1c3RlZEZyb250
RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0KLSAgICBHTGludCBmcm9u
dENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOwotICAgIEdMaW50
IGNjdyA9IChhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOwotCi0gICAgR0xpbnQgcG9pbnRzT3JM
aW5lcyA9IHByb2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7Ci0gICAg
R0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsK
LQotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0
QWRhcHRlcklkZW50aWZpZXIoKTsKLSAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRl
bnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwotICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkg
Y2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKLSAgICAvLyB3
cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRz
LiBJbnN0ZWFkLAotICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3JpdGUgbWFzayBidXQgbW9k
aWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgLy8gZHJhd2luZyBpcyBkb25lLgot
ICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFp
bD9pZD0xNjkKLQotICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQot
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0
Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBhZGp1c3RlZEZyb250RmFjZSkpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RhdGVE
aXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9U
UlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBl
czJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURl
cHRoU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghemVyb0NvbG9yTWFza0Fs
bG93ZWQgJiYgKG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0g
ICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBtTWFza1N0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAg
ICAgaWYgKG1TdGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAg
IGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAg
ICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0
YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdC
QSh1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9y
bTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5j
KG1TdGF0ZS5zb3VyY2VCbGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVz
dEJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsK
LQotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNl
QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1T
dGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVh
dGlvblJHQiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFC
TEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUu
c291cmNlQmxlbmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUu
ZGVzdEJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19CTEVORE9QQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRF
cXVhdGlvbkFscGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQ
QVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsU3Rh
dGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnN0
ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lE
RURTVEVOQ0lMTU9ERSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRl
ZCBieSBEM0Q5Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NX
X1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAgICAgY29uc3QgRDNEUkVO
REVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOwot
ICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJ
VEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAgICAgIGlmIChtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgCi0gICAg
ICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8
IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJh
Y2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJv
bnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwg
bWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0g
KDEgPDwgc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNf
Q0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbFJl
ZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0
YXRlLnN0ZW5jaWxNYXNrKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTEZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NX
X1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7Ci0KLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NX
ID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6
IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0K
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRl
LnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNr
UmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NX
X1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFj
a0ZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxa
RkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNE
UlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxz
ZTsKLSAgICAgICAgbUZyb250RmFjZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1N
YXNrU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGludCBjb2xvck1hc2sgPSBlczJkeDo6Q29u
dmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4s
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRl
LmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSk7Ci0gICAgICAgIGlmIChjb2xv
ck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93ZWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcg
d2lsbCBiZSBkcmF3bi4KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7
Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBE
M0RCTEVORF9aRVJPKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFU1RCTEVORCwgRDNEQkxFTkRfT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1BfQUREKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNr
ID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAobVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQ
VEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cywgLShpbnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOwotICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0
aEJpYXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVQVEhCSUFTLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU2FtcGxlU3RhdGVEaXJ0eSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50
ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxl
Q292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1w
bGVzKCk7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1hc2sg
PDw9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VWYWx1ZSA+PSB0aHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBmOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFzayB8PSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUNvdmVyYWdlSW52ZXJ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hc2sg
PSB+bWFzazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGl0aGVyU3RhdGVEaXJ0
eSkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVO
QUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbURpdGhlclN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb250ZXh0OjphcHBseVZlcnRl
eEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdM
c2l6ZWkgKnJlcGVhdERyYXcpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVz
W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5h
Z2VyLT5wcmVwYXJlVmVydGV4RGF0YShmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNl
cyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVj
bGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgZ2V0Q3VycmVudFByb2dyYW0oKSwgaW5zdGFu
Y2VzLCByZXBlYXREcmF3KTsKLX0KLQotLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVu
dCBhcnJheSBiaW5kaW5ncyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLUdMZW51bSBDb250ZXh0
OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwg
R0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8p
Ci17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRh
KHR5cGUsIGNvdW50LCBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBp
bmRleEluZm8pOwotCi0gICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwot
ICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gQXBwbGllcyB0aGUgc2hhZGVy
cyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29u
dGV4dDo6YXBwbHlTaGFkZXJzKCkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
Q3VycmVudFByb2dyYW0oKTsKLSAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0g
bUFwcGxpZWRQcm9ncmFtU2VyaWFsKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0g
ICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBp
eGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRl
cik7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAgICAg
bUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7Ci0gICAg
fQotCi0gICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlVbmlmb3JtcygpOwotfQotCi0vLyBBcHBsaWVz
IHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Ci12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQotewotICAgIGFwcGx5VGV4dHVyZXMoU0FN
UExFUl9QSVhFTCk7Ci0KLSAgICBpZiAobVN1cHBvcnRzVmVydGV4VGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9WRVJURVgpOwotICAgIH0KLX0KLQotLy8gRm9y
IGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0
YWdlLAotLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2Ug
dW5pdCBhbmQgdGV4dHVyZSB0eXBlLAotLy8gYW5kIHNldHMgdGhlIHRleHR1cmUgYW5kIGl0cyBh
ZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZlKS4KLXZvaWQg
Q29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQotewotICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgaW50IHNhbXBsZXJD
b3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
OiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERpcmVj
dDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCi0gICAgdW5zaWduZWQgaW50ICph
cHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gbUFwcGxpZWRU
ZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsKLSAgICBpbnQgZDNkU2Ft
cGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRV
UkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0VXNl
ZFNhbXBsZXJSYW5nZSh0eXBlKTsKLQotICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNh
bXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspCi0gICAgewotICAgICAg
ICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBl
LCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKLSAg
ICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0Owot
Ci0gICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAg
VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVy
ZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKLQotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVy
ZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0
ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUo
KTsKLQotICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFy
YW1ldGVycygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBtaW5GaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNaW5GaWx0ZXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdG
aWx0ZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0
YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1UsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdy
YXAod3JhcFMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVX
cmFwKHdyYXBUKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdG
aWx0ZXIobWFnRmlsdGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEM0RURVhUVVJFRklM
VEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQz
ZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRlcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwg
RDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlcklu
ZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJ
bWFnZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQz
ZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgp
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwotICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsKLSAgICAgICAgICAgICAg
ICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBsZXJS
YW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5kZXgrKykKLSAgICB7
Ci0gICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsg
ZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7Ci0gICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlh
bFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIt
PmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZl
ci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21w
dXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tBbGlnbm1lbnQpOwotICAg
IC8vIHNpemVkIHF1ZXJ5IHNhbml0eSBjaGVjawotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAg
ICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0OwotICAgICAgICBp
ZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRh
cmdldCgpOwotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAg
IC8vIENvbnRleHQgbXVzdCBiZSBsb3N0LCByZXR1cm4gc2lsZW50bHkKLSAgICB9Ci0KLSAgICBE
M0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwot
Ci0gICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCi0g
ICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29s
dmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQK
LSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1Bp
eGVscyA9IGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0g
NCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlO
VChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYg
dHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7
Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3Jp
dGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBk
ZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5
IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4
ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxz
KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5T
dXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVN
TUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQg
PSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3VyZmFj
ZSk7Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgcmVuZGVyVGFyZ2V0ID0gTlVM
TDsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZh
Y2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBz
b21ldGltZXMgcHJvZHVjZSBtb3JlIGVycm9yCi0gICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2Ug
ZG9jdW1lbnRlZC4KLSAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAg
ICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlc2MuSGVpZ2h0KTsKLSAgICByZWN0LmxlZnQgPSBj
bGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAg
cmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVp
Z2h0KSk7Ci0gICAgcmVjdC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRv
bSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICByZXN1bHQgPSBz
eXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybjsgICAv
LyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQotICAgIH0KLQotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0ICpk
ZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKLQotICAgIHVuc2lnbmVkIGNoYXIgKnNv
dXJjZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRl
cigpKQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7
Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5Q
aXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2gg
PSAtbG9jay5QaXRjaDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90
dG9tIC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBE
M0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgot
ICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBGYXN0IHBhdGggZm9yIEVYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBnaXZlbgotICAgICAg
ICAgICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBu
bwotICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lgot
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAg
ICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQpICogNCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQg
ZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkg
KyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAg
ICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwot
ICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
MiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdi
ICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2Ig
JiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFy
Z2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJn
YiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4
RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAq
ICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4
MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9
IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQ
aXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBp
bnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAw
M0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4w
ZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAw
MDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBp
biBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0g
ICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3Vy
Y2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAg
YiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0g
ICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBz
dG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBhYmdyWzRdOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhGbG9hdDE2
VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0
UGl0Y2gpLCA0KTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gYWJnclszXTsKLSAgICAgICAg
ICAgICAgICAgICAgYiA9IGFiZ3JbMl07Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBhYmdyWzFd
OwotICAgICAgICAgICAgICAgICAgICByID0gYWJnclswXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3Ag
R0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAv
LyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAg
ICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBv
ZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBz
byBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlw
ZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0
ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAg
ICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAg
ICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAot
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAg
IGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41Zikg
PDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX1RZUEUKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotCi0gICAg
c3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0
ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OKTsKLSAgICB9Ci0KLSAgICBEV09SRCBmbGFncyA9IDA7Ci0KLSAgICBpZiAobWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOwotCi0gICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xF
QVJfVEFSR0VUOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9C
VUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVSX0JJVDsK
LSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERl
cHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdz
IHw9IEQzRENMRUFSX1pCVUZGRVI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHVpbnQgc3Rl
bmNpbFVubWFza2VkID0gMHgwOwotCi0gICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAg
ICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVu
Y2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVs
bC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAgZGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxTaXplID0gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKLSAgICAgICAgICAg
IHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKLQotICAgICAgICAg
ICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChtYXNrICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRhcmdl
dCh0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1
dCBub3QgdGhlIHZpZXdwb3J0Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
RDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYWxwaGEpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08
OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVh
clZhbHVlLmJsdWUpKTsKLSAgICBmbG9hdCBkZXB0aCA9IGNsYW1wMDEobVN0YXRlLmRlcHRoQ2xl
YXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgJiAw
eDAwMDAwMEZGOwotCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGR4MmVzOjpHZXRBbHBoYVNp
emUobVJlbmRlclRhcmdldERlc2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNrQWxw
aGE7Ci0KLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBE
M0RDTEVBUl9TVEVOQ0lMKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNp
bFVubWFza2VkOwotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3Mg
JiBEM0RDTEVBUl9UQVJHRVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1
ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBu
ZWVkTWFza2VkU3RlbmNpbENsZWFyKQotICAgIHsKLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMg
YWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxsIGlz
IHNhdmVkLgotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBw
YXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAotICAgICAgICAvLyAg
dGhhdCBwYXRoIGlzIHRha2VuLgotICAgICAgICBIUkVTVUxUIGhyOwotICAgICAgICBpZiAobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9
IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1F
TU9SWSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklU
RUVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpS
SFcgfCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2UoMCwgTlVMTCwgMCwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRT
U19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4
dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFS
RzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhyID0gbURldmljZS0+
RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlICE9IE5VTEwpOwotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0
YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZS0+Q2FwdHVyZSgpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRF
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pG
VU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotCi0g
ICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgZXMyZHg6
OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dy
ZWVuLCBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAmIEQzRENMRUFSX1NURU5D
SUwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0ZW5j
aWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxaRkFJTCwg
RDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RU
T1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcx
LCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
VEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0gICAgICAgIGZvcihpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZsb2F0IHF1YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRoZSB0YXJn
ZXQsIGFsaWduZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzCi0gICAgICAgIHF1YWRbMF1bMF0gPSAtMC41
ZjsKLSAgICAgICAgcXVhZFswXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7
Ci0gICAgICAgIHF1YWRbMF1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsK
LQotICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwot
ICAgICAgICBxdWFkWzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKLSAg
ICAgICAgcXVhZFsxXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMV1bM10gPSAxLjBmOwotCi0g
ICAgICAgIHF1YWRbMl1bMF0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsxXSA9IC0wLjVmOwot
ICAgICAgICBxdWFkWzJdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsyXVszXSA9IDEuMGY7Ci0K
LSAgICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsKLSAg
ICAgICAgcXVhZFszXVsxXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzNdWzJdID0gMC4wZjsKLSAg
ICAgICAgcXVhZFszXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUo
KTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAs
IDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAgICAgIGlmIChmbGFncyAmIEQzRENM
RUFSX1pCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkNs
ZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZsYWdzKQotICAgIHsKLSAgICAgICAgbURl
dmljZS0+Q2xlYXIoMCwgTlVMTCwgZmxhZ3MsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBpZiAoIW1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwot
ICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2
ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVD
b3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBw
bHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOwotICAg
IEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihmaXJzdCwgY291bnQsIGluc3RhbmNlcywg
JnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRl
U2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAg
ewotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3TGluZUxv
b3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KGluc3RhbmNlcyA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVy
ICpjb3VudGluZ0lCID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3Vu
dCk7Ci0gICAgICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGlj
ZXMoY291bnRpbmdJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBtQXBwbGll
ZElCU2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhl
ZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgcHJpbWl0aXZlQ291bnQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3Vu
dGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2
ZUNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKLSAgICBpbnQgcHJp
bWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUs
IGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFy
Z2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhcHBseVN0
YXRlKG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87Ci0gICAgR0xl
bnVtIGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZp
bmRleEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5k
ZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKLSAgICBHTHNpemVpIHJl
cGVhdERyYXcgPSAxOwotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5J
bmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9
Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAo
IWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+c3RhcnRT
Y2VuZSgpOwotCi0gICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8u
bWluSW5kZXgpOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZl
VHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRl
eENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBi
bG9jayBpcyBmYWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVlCi12b2lkIENvbnRleHQ6
OnN5bmMoYm9vbCBibG9jaykKLXsKLSAgICBtRGlzcGxheS0+c3luYyhibG9jayk7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBp
bmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpCi0gICAgewotICAgICAgICBCdWZmZXIgKmlu
ZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKLSAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAg
ICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kZXhCdWZmZXItPmRh
dGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgVUlOVCBzdGFydEluZGV4ID0gMDsKLSAgICBi
b29sIHN1Y2NlZWRlZCA9IGZhbHNlOwotCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkp
Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNp
emVvZih1bnNpZ25lZCBpbnQpOwotCi0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1E
ZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAg
bUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKTsK
LQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVMb29wSUItPm1hcChzcGFj
ZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDQ7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRp
Y2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgp
OwotICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHNwYWNlTmVl
ZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotCi0gICAgICAgIGlm
ICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3
IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUs
IEQzREZNVF9JTkRFWDE2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikK
LSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5l
ZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAg
ICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8g
Tm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOwotICAgICAgICAgICAgICAgIHN1Y2NlZWRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KHN1Y2NlZWRlZCkKLSAgICB7Ci0gICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5l
TG9vcElCLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgbUFwcGxpZWRJ
QlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKEQzRFBUX0xJTkVTVFJJUCwgLW1pbkluZGV4
LCBtaW5JbmRleCwgY291bnQsIHN0YXJ0SW5kZXgsIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgbG9vcGluZyBpbmRleCBidWZm
ZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRW51bSgpCi17
Ci0gICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUoKQotewotICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOwotfQotCi12b2lkIENvbnRl
eHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCi17Ci0gICAgbU91
dE9mTWVtb3J5ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVi
dWZmZXJPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0
cnVlOwotfQotCi0vLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0
cyBmbGFnLCBpZiBhbnkuCi0vLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAx
My4KLUdMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1JbnZhbGlkRW51bSkK
LSAgICB7Ci0gICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBH
TF9JTlZBTElEX0VOVU07Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkVmFsdWUpCi0gICAgewot
ICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfVkFMVUU7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQotICAgIHsKLSAg
ICAgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKG1PdXRPZk1lbW9yeSkKLSAgICB7Ci0g
ICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9PVVRfT0Zf
TUVNT1JZOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKQot
ICAgIHsKLSAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUdMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0
YXR1cygpCi17Ci0gICAgaWYgKG1SZXNldFN0YXR1cyA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0g
ICAgICAgIGJvb2wgbG9zdCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOwotCi0gICAgICAg
IGlmIChsb3N0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNl
TG9zdCgpOyAgIC8vIFNldHMgbVJlc2V0U3RhdHVzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBH
TGVudW0gc3RhdHVzID0gbVJlc2V0U3RhdHVzOwotCi0gICAgaWYgKG1SZXNldFN0YXR1cyAhPSBH
TF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0
dGFibGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJS
T1I7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9v
bCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuICht
UmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsKLX0KLQotYm9v
bCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dXBwb3J0c1NoYWRlck1vZGVsMzsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5n
VmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1B
WF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7Ci19Ci0KLXVu
c2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBj
b25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCk7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9y
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19T
TTI7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBj
b25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBy
ZXF1ZXN0ZWQ7Ci0gICAgfQotCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25z
dF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKLSAgICBp
ZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxU
SVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRb
aV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNPY2Ns
dXNpb25RdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDNU
ZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0Zsb2F0MzJUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5l
YXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVy
ZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhSZW5kZXJidWZm
ZXJEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQg
Q29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4
aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwotfQotCi1ib29sIENvbnRl
eHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3Vw
cG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdElu
ZGljZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsKLX0KLQotYm9vbCBD
b250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9y
dHNJbnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIyOgot
ICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0IGlzIGJvdW5kLCBh
bGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQgY29udGV4dAotICAgIC8v
IChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNl
dCB0byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgewot
ICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0
KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaFRleHR1
cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
My44IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBpdCBp
cyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0dXJl
IG9iamVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8KLQotICAg
IGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0g
ICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCkgPT0gdGV4
dHVyZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTEyOgot
ICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMg
YXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhlbiBpdCBpcwot
ICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBh
IHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGljaCB0aGlzCi0g
ICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZm
ZXIuCi0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJh
d0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCi0gICAg
ewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDc6Ci0g
ICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFy
Z2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaAotICAgIC8vIEJpbmRG
cmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZG
RVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1
ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIo
MCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZm
ZXIpCi0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6Ci0gICAgLy8g
SWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVS
IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCi0gICAgLy8gaGFk
IGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6
ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKSA9PSByZW5kZXJidWZmZXIp
Ci0gICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwotICAgIH0KLQotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToKLSAgICAvLyBJZiBhIHJlbmRl
cmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8g
dGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAgICAvLyB0aGVuIGl0IGlzIGFzIGlm
IEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1
ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhp
cyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4K
LQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1l
YnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIp
Ci0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5k
ZXJidWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRl
eHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVU
ZXh0dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09IE5VTEwpCi0gICAgewotICAgICAg
ICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKLQotICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsbHMgdGhyb3Vn
aCB0byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAgICAgICAgICAgICAgaW5j
b21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAx
LCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3Vi
ZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwot
Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBs
ZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgw
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
LSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0KLSAgICAgICAgICAgICAgdCA9IGlu
Y29tcGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51bSBk
cmF3TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9k
ZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQotewotICAgIHN3
aXRjaCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICBj
YXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICBjYXNlIEdMX0xJ
TkVTOgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0
dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKLXsKLSAgICBBU1NFUlQo
aW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJd
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2
YWx1ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGlu
ZGV4KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBp
bmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tRGl2aXNv
ciA9IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVy
Ci0vLyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNp
b25zCi12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIG1FeHRlbnNp
b25TdHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVy
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJl
X2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0
X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3Qg
IjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIGlm
IChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOwotICAgIH0KLQotICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKLQotICAgIGlmIChzdXBwb3J0
c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOwotICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLQotICAgIC8vIEFOR0xFLXNw
ZWNpZmljIGV4dGVuc2lvbnMKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUgIjsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJy
YXlzICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfcGFja19y
ZXZlcnNlX3Jvd19vcmRlciAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDMgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV90ZXh0dXJlX3VzYWdlICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdHJh
bnNsYXRlZF9zaGFkZXJfc291cmNlICI7Ci0KLSAgICAvLyBPdGhlciB2ZW5kb3Itc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKLSAgICB9Ci0KLSAgICBzdGQ6
OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9v
ZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6aW5pdFJlbmRlcmVyU3Ry
aW5nKCkKLXsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3Bs
YXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0KLSAgICBtUmVuZGVyZXJTdHJpbmcgPSAiQU5H
TEUgKCI7Ci0gICAgbVJlbmRlcmVyU3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOwot
ICAgIG1SZW5kZXJlclN0cmluZyArPSAiKSI7Ci19Ci0KLWNvbnN0IGNoYXIgKkNvbnRleHQ6Omdl
dFJlbmRlcmVyU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nLmNf
c3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBH
TGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQot
ewotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0KLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJh
bWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGludCByZWFkQnVmZmVyV2lkdGggPSByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IHJlYWRCdWZm
ZXJIZWlnaHQgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgp
OwotICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IGRyYXdCdWZmZXJIZWlnaHQgPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOwotCi0gICAgUkVDVCBzb3VyY2VS
ZWN0OwotICAgIFJFQ1QgZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3JjWDAgPCBzcmNYMSkKLSAgICB7
Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gwOwotICAgICAgICBzb3VyY2VSZWN0LnJp
Z2h0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMDsKLSAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMTsKLSAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gwOwotICAgICAgICBkZXN0UmVjdC5yaWdodCA9
IGRzdFgwOwotICAgIH0KLQotICAgIGlmIChzcmNZMCA8IHNyY1kxKQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RS
ZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRv
bSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAg
IGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICAgICAgc291cmNl
UmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0
LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSRUNUIHNv
dXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFNjaXNzb3JlZFJl
Y3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgewotICAg
ICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZl
ciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKLSAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRo
ZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCog
b2YgdGhlCi0gICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3Nvclks
IHJhdGhlciB0aGFuIHRoZSBib3R0b20uCi0gICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0
YXRlLnNjaXNzb3JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYgPSBtU3RhdGUu
c2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3Qu
bGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qu
bGVmdCArPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+
IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1T
dGF0ZS5zY2lzc29yV2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQg
PSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICAgICAgc291
cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsKLSAgICAgICAgICAg
IGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20gLSAo
bVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwotICAgICAgICAgICAgZGVz
dFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQ7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOwot
ICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAgUkVDVCBzb3VyY2VUcmlt
bWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUkVDVCBkZXN0VHJpbW1lZFJlY3Qg
PSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9m
IHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2Vz
LgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAgICB7Ci0gICAgICAgIGlu
dCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7
Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID4gcmVhZEJ1ZmZlcldp
ZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1lZFJlY3QucmlnaHQg
LSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID0gcmVh
ZEJ1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7Ci0g
ICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewotICAgICAg
ICBpbnQgeURpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QudG9wOwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC50b3AgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wICs9IHlEaWZm
OwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPiByZWFkQnVmZmVy
SGVpZ2h0KQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gc291cmNlVHJpbW1lZFJlY3QuYm90
dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
ID0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsK
LSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QubGVmdCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQg
Kz0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRyYXdC
dWZmZXJXaWR0aCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5y
aWdodCAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID0g
ZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlm
ZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewotICAg
ICAgICBpbnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCArPSB5RGlm
ZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA+IGRyYXdCdWZmZXJI
ZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90dG9t
IC0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA9IGRy
YXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5RGlm
ZjsKLSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJlYWRC
dWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLSBzb3VyY2VU
cmltbWVkUmVjdC5sZWZ0IDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdCdWZmZXJIZWlnaHQgfHwK
LSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCBk
cmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICE9IDAgfHwg
ZGVzdFRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgIT0gMCB8
fCBkZXN0VHJpbW1lZFJlY3QubGVmdCAhPSAwKQotICAgIHsKLSAgICAgICAgcGFydGlhbEJ1ZmZl
ckNvcHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJ
VCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlwZSA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZG
RVI7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWREcmF3VHlwZSA9IGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAgICAgICAgZHJh
d0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7Ci0g
ICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fAotICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBC
bGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24i
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgYmxp
dFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIChHTF9ERVBU
SF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIFJl
bmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpk
cmF3RFNCdWZmZXIgPSBOVUxMOwotCi0gICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRl
cHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3RoIGEg
ZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KLQot
ICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2ls
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAg
ICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkg
IT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBi
bGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3
RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNp
bCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xlLWJ1
ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkcmF3
RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgCi0gICAgICAg
ICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERl
cHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0gICAg
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1JlbmRlclRhcmdl
dCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNv
dXJjZVRyaW1tZWRSZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1JlbmRlclRhcmdldCwgJmRlc3RUcmltbWVkUmVjdCwgRDNEVEVYRl9O
T05FKTsKLQotICAgICAgICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgZHJhd1JlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJh
bWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVM
TCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFp
bGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24g
PSBOVUxMOwotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsKLSAgICB9
Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVT
OyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0
ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0g
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9n
cmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICAqcmVw
ZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRU
UklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwot
Ci0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4
ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlz
b3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGJy
ZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUg
PT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBEM0RWRVJURVhFTEVN
RU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAgICBEM0RWRVJURVhFTEVN
RU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdHJlYW0gPSBpOwotCi0gICAg
ICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5n
IHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2VkLgotICAgICAgICAgICAg
ICAgIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAw
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0g
PSBpbmRleGVkQXR0cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRB
IHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2lu
Z0VuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0dHJpYnV0ZXNbaV0u
c2VyaWFsIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgIT0g
YXR0cmlidXRlc1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLm9mZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0ZXNbaV0u
dmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUp
OwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsID0gYXR0cmlidXRl
c1tpXS5zZXJpYWw7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUg
PSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Ci0gICAgICAgICAgICBlbGVtZW50LT5P
ZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlw
ZTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsK
LSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAg
ICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgo
aSk7Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklC
UykKLSAgICB7Ci0gICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVx
KGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhF
TEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVudCsrKSA9IGVuZDsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKLSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICplbnRyeSA9ICZtVmVydGV4
RGVjbENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywg
ZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5
KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAgICAgIGlmKGVudHJ5LT52
ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50cnktPnZlcnRleERlY2xh
cmF0aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZlcnRleERl
Y2xhcmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJS
T1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFzdENh
Y2hlID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4
RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3VudCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwot
ICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgLy8g
bUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZl
IHRvIHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQotICAgIG1lbWNweShsYXN0
Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBz
aXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xh
cmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgZGV2
aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsK
LSAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICBs
YXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9S
OwotfQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkKLXsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsK
LSAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNl
dFZEZWNsID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNl
cyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCi19Ci0KLX0KLQotZXh0ZXJuICJDIgot
ewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9v
bCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNo
YXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotfQotCi12b2lkIGdsRGVz
dHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgZGVsZXRlIGNvbnRleHQ7
Ci0KLSAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQotICAgIHsKLSAgICAgICAg
Z2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIH0KLX0KLQotdm9pZCBnbE1h
a2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBnbDo6bWFrZUN1cnJlbnQoY29udGV4dCwgZGlz
cGxheSwgc3VyZmFjZSk7Ci19Ci0KLWdsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCkK
LXsKLSAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKLX0KLX0KKy8vDQorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4N
CisvLw0KKw0KKy8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFz
cywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nDQorLy8gcmVuZGVyaW5nIG9w
ZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xD
b250ZXh0Lg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIg0KKw0KKyNpbmNsdWRl
IDxhbGdvcml0aG0+DQorDQorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiDQorDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIg0K
KyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9C
bGl0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCINCisjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCINCisj
aW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVy
LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiDQor
I2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiDQorDQorI3VuZGVmIG5lYXIN
CisjdW5kZWYgZmFyDQorDQorbmFtZXNwYWNlIGdsDQorew0KK0NvbnRleHQ6OkNvbnRleHQoY29u
c3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwg
Ym9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1Db25maWcoY29uZmlnKQ0K
K3sNCisgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRl
ZA0KKw0KKyAgICBtRGlzcGxheSA9IE5VTEw7DQorICAgIG1EZXZpY2UgPSBOVUxMOw0KKw0KKyAg
ICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsNCisNCisgICAgc2V0Q2xl
YXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsNCisNCisgICAgbVN0YXRlLmRlcHRoQ2xl
YXJWYWx1ZSA9IDEuMGY7DQorICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7DQorDQor
ICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOw0KKyAgICBtU3RhdGUuY3VsbE1vZGUgPSBHTF9C
QUNLOw0KKyAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOw0KKyAgICBtU3RhdGUuZGVwdGhU
ZXN0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9MRVNTOw0KKyAgICBtU3Rh
dGUuYmxlbmQgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOw0K
KyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsNCisgICAgbVN0YXRlLmRlc3RC
bGVuZFJHQiA9IEdMX1pFUk87DQorICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87
DQorICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7DQorICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsNCisgICAgbVN0YXRlLmJsZW5kQ29s
b3IucmVkID0gMDsNCisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOw0KKyAgICBtU3Rh
dGUuYmxlbmRDb2xvci5ibHVlID0gMDsNCisgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSAw
Ow0KKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsNCisgICAgbVN0YXRlLnN0ZW5jaWxG
dW5jID0gR0xfQUxXQVlTOw0KKyAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7DQorICAgIG1TdGF0
ZS5zdGVuY2lsTWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOw0K
KyAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOw0KKyAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAwOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOw0KKyAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsNCisgICAgbVN0YXRlLnN0ZW5jaWxG
YWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VF
UDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsNCisgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aEZhaWwgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7DQor
ICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsNCisgICAgbVN0YXRlLnBvbHln
b25PZmZzZXRVbml0cyA9IDAuMGY7DQorICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2Ug
PSBmYWxzZTsNCisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7DQorICAgIG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
SW52ZXJ0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOw0KKyAgICBt
U3RhdGUuZGl0aGVyID0gdHJ1ZTsNCisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IEdM
X0RPTlRfQ0FSRTsNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBH
TF9ET05UX0NBUkU7DQorDQorICAgIG1TdGF0ZS5saW5lV2lkdGggPSAxLjBmOw0KKw0KKyAgICBt
U3RhdGUudmlld3BvcnRYID0gMDsNCisgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7DQorICAgIG1T
dGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7DQorICAgIG1T
dGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsNCisgICAg
bVN0YXRlLnpOZWFyID0gMC4wZjsNCisgICAgbVN0YXRlLnpGYXIgPSAxLjBmOw0KKw0KKyAgICBt
U3RhdGUuc2Npc3NvclggPSAwOw0KKyAgICBtU3RhdGUuc2Npc3NvclkgPSAwOw0KKyAgICBtU3Rh
dGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7DQorICAgIG1TdGF0
ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Ow0KKw0KKyAgICBt
U3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsNCisgICAgbVN0YXRlLmNvbG9yTWFza0dyZWVuID0g
dHJ1ZTsNCisgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29s
b3JNYXNrQWxwaGEgPSB0cnVlOw0KKyAgICBtU3RhdGUuZGVwdGhNYXNrID0gdHJ1ZTsNCisNCisg
ICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBtUmVzb3VyY2VN
YW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOw0KKyAgICAgICAgbVJlc291
cmNlTWFuYWdlci0+YWRkUmVmKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAg
ICBtUmVzb3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigpOw0KKyAgICB9DQorDQor
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDgzOg0KKyAgICAvLyBJ
biB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZl
IHR3b2RpbWVuc2lvbmFsDQorICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZlY3Rv
cnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLg0KKyAgICAvLyBJbiBvcmRlciB0
aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBsb3N0LCB0aGV5IGFy
ZSB0cmVhdGVkIGFzIHRleHR1cmUNCisgICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMg
YXJlIDAuDQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNldChuZXcgVGV4dHVyZTJEKDApKTsNCisg
ICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsNCisNCisg
ICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSAwOw0KKyAgICBiaW5kQXJyYXlCdWZmZXIoMCk7DQor
ICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7DQorICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgw
KTsNCisgICAgYmluZFRleHR1cmUyRCgwKTsNCisgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsN
CisgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsN
CisNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisNCisgICAgbVN0YXRlLnBhY2tB
bGlnbm1lbnQgPSA0Ow0KKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gNDsNCisgICAgbVN0
YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsNCisNCisgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gTlVMTDsNCisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOw0KKyAgICBtQmxpdCA9
IE5VTEw7DQorICAgIG1MaW5lTG9vcElCID0gTlVMTDsNCisNCisgICAgbUludmFsaWRFbnVtID0g
ZmFsc2U7DQorICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsNCisgICAgbUludmFsaWRPcGVyYXRp
b24gPSBmYWxzZTsNCisgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQorICAgIG1JbnZhbGlkRnJh
bWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgbUhhc0JlZW5DdXJyZW50ID0gZmFs
c2U7DQorICAgIG1Db250ZXh0TG9zdCA9IGZhbHNlOw0KKyAgICBtUmVzZXRTdGF0dXMgPSBHTF9O
T19FUlJPUjsNCisgICAgbVJlc2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVzZXRzID8gR0xfTE9TRV9D
T05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpOw0KKyAg
ICBtUm9idXN0QWNjZXNzID0gcm9idXN0QWNjZXNzOw0KKw0KKyAgICBtU3VwcG9ydHNEWFQxVGV4
dHVyZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gZmFsc2U7DQorICAg
IG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNFdmVudFF1ZXJp
ZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IGZhbHNlOw0KKyAg
ICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSAwOw0KKyAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVMTDsNCisgICAgbWFy
a0FsbFN0YXRlRGlydHkoKTsNCit9DQorDQorQ29udGV4dDo6fkNvbnRleHQoKQ0KK3sNCisgICAg
aWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3Vy
cmVudFByb2dyYW0pOw0KKyAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1G
cmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGVGcmFtZWJ1ZmZl
cihtRnJhbWVidWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOw0KKyAgICB9DQorDQorICAgIHdoaWxl
ICghbUZlbmNlTWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5j
ZU1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hpbGUgKCFtUXVlcnlNYXAu
ZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCkt
PmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1w
dHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVn
aW4oKS0+c2Vjb25kOw0KKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlT
YW1wbGVTdXBwb3J0LmJlZ2luKCkpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspDQorICAgIHsNCisgICAgICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFNfVlRGOyBzYW1wbGVyKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9DT1VOVDsg
dHlwZSsrKQ0KKyAgICB7DQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChO
VUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRU
UklCUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1C
b3VuZEJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5hY3RpdmVR
dWVyeVtpXS5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNl
dChOVUxMKTsNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7DQorICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOw0KKw0KKyAgICBtVGV4dHVyZTJEWmVyby5z
ZXQoTlVMTCk7DQorICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOw0KKw0KKyAgICBk
ZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOw0KKyAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7
DQorICAgIGRlbGV0ZSBtQmxpdDsNCisgICAgZGVsZXRlIG1MaW5lTG9vcElCOw0KKw0KKyAgICBp
ZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSkNCisgICAgew0KKyAgICAgICAgbU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PnJlbGVhc2UoKTsNCit9DQorDQordm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIG1EaXNwbGF5ID0g
ZGlzcGxheTsNCisgICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAg
aWYgKCFtSGFzQmVlbkN1cnJlbnQpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2VDYXBzID0gbURp
c3BsYXktPmdldERldmljZUNhcHMoKTsNCisNCisgICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9
IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisgICAgICAgIG1JbmRleERh
dGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcywgbURldmljZSk7DQorICAgICAg
ICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOw0KKw0KKyAgICAgICAgbVN1cHBvcnRzU2hhZGVyTW9k
ZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywg
MCk7DQorICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID0gbURpc3BsYXktPmdldFZlcnRl
eFRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0g
bURpc3BsYXktPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9y
dHNJbnN0YW5jaW5nID0gbURpc3BsYXktPmdldEluc3RhbmNpbmdTdXBwb3J0KCk7DQorDQorICAg
ICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmlj
ZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQp
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsNCisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURp
bWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsNCisgICAgICAgIG1NYXhSZW5kZXJi
dWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsNCisgICAgICAgIG1NYXhUZXh0
dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7DQorICAgICAgICBUUkFD
RSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1h
eFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkIiwNCisgICAgICAg
ICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1N
YXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwpOw0KKw0KKyAgICAgICAg
Y29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9DQorICAgICAgICB7DQorICAg
ICAgICAgICAgRDNERk1UX0E4UjhHOEI4LA0KKyAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOCwN
CisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LA0KKyAgICAgICAgICAgIEQzREZNVF9EMjRTOA0K
KyAgICAgICAgfTsNCisNCisgICAgICAgIGludCBtYXggPSAwOw0KKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFU
KTsgKytpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkg
PSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07DQorICAgICAgICAgICAg
bURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBt
dWx0aXNhbXBsZUFycmF5KTsNCisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRl
ckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsNCisNCisgICAgICAgICAgICBm
b3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBq
ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpDQorICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7DQorICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA9IG1heDsNCisNCisgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IG1EaXNwbGF5
LT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllcyA9IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsNCisgICAgICAgIG1T
dXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsN
CisgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQzVGV4dHVy
ZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5n
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsNCisgICAg
ICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVy
ZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzKTsNCisgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
ID0gbURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlz
cGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOw0KKw0KKyAgICAgICAgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOw0KKw0K
KyAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7DQorICAgICAgICBpZiAo
c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7DQorICAgICAgICB9DQorICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoc3VwcG9y
dHNEWFQ1VGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorDQorICAgICAgICBpbml0RXh0ZW5z
aW9uU3RyaW5nKCk7DQorICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmcoKTsNCisNCisgICAgICAg
IG1TdGF0ZS52aWV3cG9ydFggPSAwOw0KKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7DQor
ICAgICAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7DQorICAg
ICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsNCisNCisg
ICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7DQorICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAw
Ow0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7DQor
ICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOw0KKw0K
KyAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICAvLyBXcmFw
IHRoZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFz
c2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFtZXMNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlZmF1
bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOw0K
Kw0KKyAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3IENvbG9yYnVmZmVyKGRl
ZmF1bHRSZW5kZXJUYXJnZXQpOw0KKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNp
bGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7DQorICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKGNv
bG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7DQorDQorICAgIHNldEZyYW1l
YnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOw0KKw0KKyAgICBpZiAoZGVmYXVsdFJlbmRlclRh
cmdldCkNCisgICAgew0KKyAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0K
KyAgICB9DQorDQorICAgIGlmIChkZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIGRlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICB9DQorICAgIA0KKyAgICBtYXJrQWxsU3RhdGVEaXJ0
eSgpOw0KK30NCisNCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUt
cmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0
IHByZS1kcmF3Lg0KK3ZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQ0KK3sNCisgICAg
Zm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdCsrKQ0KKyAgICB7
DQorICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7DQorICAgIH0NCisNCisg
ICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyB0KyspDQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTW3RdID0gMDsN
CisgICAgfQ0KKw0KKyAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSAwOw0KKyAgICBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
PSAwOw0KKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOw0KKyAgICBtQXBwbGll
ZElCU2VyaWFsID0gMDsNCisgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7DQor
ICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgIG1SZW5kZXJUYXJnZXREZXNj
SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisgICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFy
a1N0YXRlRGlydHkoKTsNCisNCisgICAgbUNsZWFyU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1D
dWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOw0KKyAg
ICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVBvbHlnb25PZmZzZXRTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVNh
bXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQorICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
Ow0KKyAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQ0KK3sNCisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRy
dWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkNCit7DQorICAgIGlm
IChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKQ0KKyAgICAg
ICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVDsNCisgICAgbUNv
bnRleHRMb3N0ID0gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkN
Cit7DQorICAgIHJldHVybiBtQ29udGV4dExvc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBo
YSkNCit7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVkOw0KKyAgICBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47DQorICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZSA9IGJsdWU7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEgPSBh
bHBoYTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKQ0K
K3sNCisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOw0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkNCit7DQorICAgIG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbEZh
Y2UoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVk
KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOw0KKyAgICAgICAg
bUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6Omlz
Q3VsbEZhY2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpDQorew0KKyAg
ICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5j
dWxsTW9kZSA9IG1vZGU7DQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCkNCit7DQor
ICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZnJvbnRGYWNlID0gZnJvbnQ7DQorICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCkN
Cit7DQorICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0
eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJs
ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpDQorew0KKyAgICBpZiAo
bVN0YXRlLmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5k
ZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7DQorICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIs
IGZsb2F0IHpGYXIpDQorew0KKyAgICBtU3RhdGUuek5lYXIgPSB6TmVhcjsNCisgICAgbVN0YXRl
LnpGYXIgPSB6RmFyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxl
ZCkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmQgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0
cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25z
dA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5ibGVuZDsNCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBz
b3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuc291cmNl
QmxlbmRSR0IgIT0gc291cmNlUkdCIHx8DQorICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YSAhPSBzb3VyY2VBbHBoYSB8fA0KKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0
UkdCIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7DQorICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VC
bGVuZEFscGhhID0gc291cmNlQWxwaGE7DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEg
PSBkZXN0QWxwaGE7DQorICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVl
biwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpDQorew0KKyAgICBpZiAobVN0YXRlLmJsZW5kQ29s
b3IucmVkICE9IHJlZCB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gIT0gZ3Jl
ZW4gfHwNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fA0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdy
ZWVuID0gZ3JlZW47DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsNCisg
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7DQorICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5k
RXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbikNCit7DQor
ICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fA0KKyAgICAg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0aW9uKQ0KKyAgICB7DQor
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOw0KKyAgICAgICAg
bVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IGFscGhhRXF1YXRpb247DQorICAgICAgICBtQmxl
bmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0
ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
IT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZW5hYmxl
ZDsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN0YXRlLnN0ZW5jaWxUZXN0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQ
YXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNp
bE1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGdW5jICE9IHN0ZW5jaWxGdW5jIHx8
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8DQorICAgICAgICBt
U3RhdGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNpbE1hc2spDQorICAgIHsNCisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYg
PSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNpbFJlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3Rl
bmNpbE1hc2sgPSBzdGVuY2lsTWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhH
TGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5j
aWxCYWNrTWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5j
aWxCYWNrRnVuYyB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmICE9IHN0ZW5jaWxC
YWNrUmVmIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0ZW5jaWxCYWNr
TWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IHN0ZW5jaWxC
YWNrRnVuYzsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2lsQmFja1Jl
ZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
TWFzayA9IHN0ZW5jaWxCYWNrTWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsV3JpdGVtYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVt
YXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0
eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dy
aXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRl
LnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQ0KKyAgICB7DQor
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFz
azsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdM
ZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQ0K
K3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fA0KKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsIHx8
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWls
Ow0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0
aEZhaWw7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFz
c0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0N
Cit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0
ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwNCisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWls
Ow0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mg
PSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7DQorICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZp
bGwoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAh
PSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBl
bmFibGVkOw0KKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7DQorDQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xm
bG9hdCB1bml0cykNCit7DQorICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciAhPSBm
YWN0b3IgfHwNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5pdHMpDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOw0KKyAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOw0KKyAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6
OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0
YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBt
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsNCisgICAgICAgIG1TYW1wbGVT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzU2FtcGxl
QWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9
IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJs
ZWQ7DQorICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNh
bXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCkNCit7DQorICAg
IGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fA0KKyAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVydCkNCisgICAgew0KKyAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsNCisgICAgICAgIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydCA9IGludmVydDsNCisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5h
YmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkNCisgICAg
ew0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsNCisgICAgICAgIG1TY2lz
c29yU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1Nj
aXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JU
ZXN0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERpdGhlcihib29sIGVuYWJsZWQpDQorew0K
KyAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZGl0aGVyID0gZW5hYmxlZDsNCisgICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGl0aGVyRW5hYmxlZCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRM
aW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkNCit7DQorICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0
aDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhp
bnQpDQorew0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gaGludDsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KEdMZW51bSBoaW50
KQ0KK3sNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50Ow0K
KyAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8gc2hhZGVyIHRyYW5zbGF0b3Igc28g
d2UgY2FuIHdyaXRlDQorICAgIC8vIGRkeCwgZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5k
aW5nIG9uIHRoZSBoaW50Lg0KKyAgICAvLyBJZ25vcmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9y
IGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUgaGludC4NCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkNCit7DQorICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4Ow0KKyAgICBtU3RhdGUudmll
d3BvcnRZID0geTsNCisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsNCisgICAgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNj
aXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpDQorew0KKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZ
ICE9IHkgfHwgDQorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1TdGF0
ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnNjaXNz
b3JYID0geDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7DQorICAgICAgICBtU3RhdGUu
c2Npc3NvcldpZHRoID0gd2lkdGg7DQorICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhl
aWdodDsNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQor
DQordm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wg
Ymx1ZSwgYm9vbCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJl
ZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwNCisgICAgICAgIG1TdGF0ZS5j
b2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhICE9IGFscGhhKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOw0KKyAgICAgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1
ZSA9IGJsdWU7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsNCisgICAg
ICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sg
IT0gbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7DQorICAg
ICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKQ0KK3sNCisgICAgbVN0YXRl
LmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJh
bWVidWZmZXI7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5k
bGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7DQorfQ0K
Kw0KK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsNCit9DQorDQorR0x1aW50IENvbnRl
eHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
YXJyYXlCdWZmZXIuaWQoKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5
KEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBOVUxM
Ow0KKyAgICANCisgICAgc3dpdGNoICh0YXJnZXQpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6DQorICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3Rp
dmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoNCisg
ICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVm
YXVsdDoNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorICAgIH0NCisNCisgICAgaWYgKHF1ZXJ5
T2JqZWN0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7DQorICAg
IH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBh
dHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkNCit7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZDsNCit9DQorDQorY29uc3QgVmVydGV4
QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgYm9vbCBub3JtYWxpemVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpDQorew0KKyAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7DQor
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7DQorICAg
IG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7DQorICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7
DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRl
Ow0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2lu
dGVyOw0KK30NCisNCitjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOw0KK30NCisNCitjb25zdCBWZXJ0ZXhB
dHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmlidXRlcygpDQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQ
YWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkNCit7DQorICAgIG1TdGF0ZS5wYWNrQWxpZ25t
ZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisg
ICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsNCit9DQorDQorR0xpbnQgQ29u
dGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93
T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpDQorew0KKyAgICBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucGFja1JldmVy
c2VSb3dPcmRlcjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpDQorew0K
KyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVyKCk7DQorfQ0KKw0KK0dM
dWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VN
YW5hZ2VyLT5jcmVhdGVQcm9ncmFtKCk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVT
aGFkZXIoR0xlbnVtIHR5cGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3Jl
YXRlU2hhZGVyKHR5cGUpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgp
DQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZSgpOw0KK30N
CisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkNCit7DQorICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsNCit9DQorDQorLy8gUmV0
dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQ0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVG
cmFtZWJ1ZmZlcigpDQorew0KKyAgICBHTHVpbnQgaGFuZGxlID0gbUZyYW1lYnVmZmVySGFuZGxl
QWxsb2NhdG9yLmFsbG9jYXRlKCk7DQorDQorICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0g
TlVMTDsNCisNCisgICAgcmV0dXJuIGhhbmRsZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNy
ZWF0ZUZlbmNlKCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVBbGxvY2F0
b3IuYWxsb2NhdGUoKTsNCisNCisgICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobURp
c3BsYXkpOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCisvLyBSZXR1cm5zIGFuIHVu
dXNlZCBxdWVyeSBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkNCit7DQorICAg
IEdMdWludCBoYW5kbGUgPSBtUXVlcnlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsNCisNCisg
ICAgbVF1ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQ0KK3sNCisgICAg
aWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQ0KKyAgICB7DQorICAgICAg
ICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAgbVJlc291cmNlTWFu
YWdlci0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRl
U2hhZGVyKEdMdWludCBzaGFkZXIpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVT
aGFkZXIoc2hhZGVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUHJvZ3JhbShwcm9n
cmFtKTsNCisgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsNCit9DQorDQordm9pZCBD
b250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQ0KK3sNCisgICAgaWYgKG1SZXNv
dXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpDQorICAgIHsNCisgICAgICAgIGRldGFj
aFRleHR1cmUodGV4dHVyZSk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVs
ZXRlVGV4dHVyZSh0ZXh0dXJlKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJi
dWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikNCit7DQorICAgIGlmIChtUmVzb3VyY2VNYW5hZ2Vy
LT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNo
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorICAgIH0NCisgICAgDQorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAg
IEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGZyYW1lYnVmZmVyKTsNCisNCisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9
IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNoRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpOw0KKw0KKyAgICAgICAgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsNCisgICAgICAgIGRlbGV0ZSBmcmFt
ZWJ1ZmZlck9iamVjdC0+c2Vjb25kOw0KKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZy
YW1lYnVmZmVyT2JqZWN0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZl
bmNlKEdMdWludCBmZW5jZSkNCit7DQorICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVj
dCA9IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsNCisNCisgICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1G
ZW5jZU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsNCisgICAgICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+
c2Vjb25kOw0KKyAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkNCit7DQorICAg
IFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsN
CisgICAgaWYgKHF1ZXJ5T2JqZWN0ICE9IG1RdWVyeU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAg
ICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVlcnlPYmplY3QtPmZpcnN0KTsNCisg
ICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vjb25kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsNCisgICAgICAgIH0NCisgICAgICAgIG1R
dWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7DQorICAgIH0NCit9DQorDQorQnVmZmVyICpDb250
ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsNCit9DQorDQorU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRTaGFkZXIoaGFuZGxlKTsNCit9DQorDQorUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShH
THVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dy
YW0oaGFuZGxlKTsNCit9DQorDQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQg
aGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFu
ZGxlKTsNCit9DQorDQorUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJi
dWZmZXIoaGFuZGxlKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFt
ZWJ1ZmZlcigpDQorew0KKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRGcmFt
ZWJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZm
ZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikNCit7DQorICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOw0KKw0KKyAg
ICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpDQor
ew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsN
CisNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpDQor
ew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUs
IFRFWFRVUkVfMkQpOw0KKw0KKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpDQorew0KKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRV
UkVfQ1VCRSk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21T
dGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpDQorew0K
KyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkNCisgICAgew0KKyAgICAgICAg
bUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOw0KKyAgICB9
DQorDQorICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7
DQorICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQorICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7DQorICAg
IH0NCisNCisgICAgbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0KKw0KKyAg
ICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9u
KHJlbmRlcmJ1ZmZlcik7DQorDQorICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsNCit9DQorDQordm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFt
KEdMdWludCBwcm9ncmFtKQ0KK3sNCisgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbTsNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsgICAg
ICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3
aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLg0KKw0KKyAgICBpZiAocHJpb3JQcm9ncmFtICE9IHBy
b2dyYW0pDQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOw0KKyAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3Jh
bSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsNCisgICAgICAg
IG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5
ID0gdHJ1ZTsNCisNCisgICAgICAgIGlmIChuZXdQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAg
ICAgICBpZiAob2xkUHJvZ3JhbSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBvbGRQcm9ncmFt
LT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpi
ZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkNCit7DQorICAgIC8vIEZyb20g
RVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3
aXRoIGFuIDxpZD4gIA0KKyAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5IG9iamVj
dCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAgDQorICAgIC8vIHRhcmdl
dHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZB
VElWRV9FWFQsIGlmICANCisgICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBmb3IgZWl0aGVyIHRhcmdl
dCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4gDQorICAgIC8vIGV4aXN0
aW5nIHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBvciBp
ZiA8aWQ+IGlzIHRoZQ0KKyAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIGFueSBx
dWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMNCisgICAgLy8gZ2VuZXJh
dGVkLg0KKw0KKyAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBhcmUgYWN0aXZlDQorICAg
IC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24gYXJlIHN1cHBvcnRlZCwg
d2Ugd2lsbCBuZWVkIHRvIGNoZWNrDQorICAgIC8vIHNlcGFyYXRlbHkgdGhhdDoNCisgICAgLy8g
ICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJlbnQgYWN0aXZlIHF1ZXJ5
IGZvciBhbnkgdGFyZ2V0L3R5cGUNCisgICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBx
dWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlDQorICAgIC8v
ICAgICAgIG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BB
U1NFRF9DT05TRVJWQVRJVkVfRVhULA0KKyAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUgYWN0
aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLg0KKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAg
aWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgUXVlcnlUeXBlIHFUeXBlOw0KKyAgICBzd2l0Y2ggKHRhcmdldCkN
CisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogDQorICAgICAg
ICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgDQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiANCisgICAg
ICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgDQorICAg
ICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiANCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gZ2V0
UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7DQorDQorICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3
YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMNCisgICAgaWYgKCFxdWVyeU9iamVjdCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAg
fQ0KKw0KKyAgICAvLyBjaGVjayBmb3IgdHlwZSBtaXNtYXRjaA0KKyAgICBpZiAocXVlcnlPYmpl
Y3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgLy8gc2V0IHF1ZXJ5IGFzIGFj
dGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldA0KKyAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVd
LnNldChxdWVyeU9iamVjdCk7DQorDQorICAgIC8vIGJlZ2luIHF1ZXJ5DQorICAgIHF1ZXJ5T2Jq
ZWN0LT5iZWdpbigpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJn
ZXQpDQorew0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorDQorICAgIHN3aXRjaCAodGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiANCisgICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IA0KKyAgICAg
ICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyANCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisg
ICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOw0KKw0KKyAgICBpZiAocXVlcnlPYmplY3QgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgfQ0KKw0KKyAgICBxdWVyeU9iamVjdC0+ZW5kKCk7DQorDQorICAgIG1TdGF0ZS5h
Y3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEZy
YW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQ0KK3sNCisgICAgZGVsZXRlIG1GcmFt
ZWJ1ZmZlck1hcFswXTsNCisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOw0KKyAgICBp
ZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSAwKQ0KKyAgICB7DQorICAgICAgICBtQm91bmRE
cmF3RnJhbWVidWZmZXIgPSBidWZmZXI7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcikN
Cit7DQorICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRl
cmJ1ZmZlci5nZXQoKTsNCisgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRl
cmJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZy
YW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZnJh
bWVidWZmZXItPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitGZW5jZSAqQ29udGV4dDo6Z2V0RmVu
Y2UodW5zaWduZWQgaW50IGhhbmRsZSkNCit7DQorICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5j
ZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChmZW5jZSA9PSBtRmVuY2VN
YXAuZW5kKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIGVs
c2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7DQorICAgIH0NCit9DQor
DQorUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUsIGJvb2wgY3Jl
YXRlLCBHTGVudW0gdHlwZSkNCit7DQorICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeSA9IG1R
dWVyeU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChxdWVyeSA9PSBtUXVlcnlNYXAuZW5k
KCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7DQor
ICAgICAgICAgICAgcXVlcnktPnNlY29uZC0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAg
ICByZXR1cm4gcXVlcnktPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitCdWZmZXIgKkNvbnRleHQ6
OmdldEFycmF5QnVmZmVyKCkNCit7DQorICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0
KCk7DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkNCit7
DQorICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0KK30NCisNCitQ
cm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpDQorew0KKyAgICBpZiAoIW1DYWNo
ZWRDdXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFt
ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOw0K
KyAgICB9DQorICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07DQorfQ0KKw0KK1RleHR1
cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkNCit7DQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVY
VFVSRV8yRCkpOw0KK30NCisNCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1
YmVNYXAoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0
U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOw0KK30N
CisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2Ft
cGxlciwgVGV4dHVyZVR5cGUgdHlwZSkNCit7DQorICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOw0KKw0KKyAgICBpZiAodGV4aWQgPT0g
MCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1
cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQNCisgICAgew0KKyAgICAgICAgc3dpdGNoICh0eXBlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsNCisgICAgICAg
ICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVb
dHlwZV1bc2FtcGxlcl0uZ2V0KCk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYo
R0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcykNCit7DQorICAgIHN3aXRjaCAocG5hbWUp
DQorICAgIHsNCisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJh
bXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VJbnZlcnQ7ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRF
TUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoNCisgICAgICAgIHBh
cmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3Rh
dGUuY29sb3JNYXNrR3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNr
Qmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsNCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbDsgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FM
UEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
Y2lzc29yVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsVGVzdDsgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfRElU
SEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7ICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNT
X0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBw
bmFtZSwgR0xmbG9hdCAqcGFyYW1zKQ0KK3sNCisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NM
RUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRGbG9hdHYgaW1wbGVtZW50
YXRpb24NCisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcw0KKyAgICAvLyBHZXRJbnRlZ2Vy
diBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZl
cnNpb24gaW4gYW55DQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5j
ZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4NCisgICAgc3dpdGNoIChwbmFtZSkNCisgICAg
ew0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0
b3I7ICBicmVhazsNCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBn
bDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7DQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOg0KKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpO
ZWFyOw0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7DQorICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOg0KKyAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5ibHVlOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6
DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7DQorICAgICAgICBw
YXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jv
b2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQ0KK3sN
CisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBp
biBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50YXRpb24NCisgICAgLy8gYmVjYXVz
ZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBF
UyAyLjAgc3BlYyBuYW1lcw0KKyAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5
IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55DQorICAgIC8v
IGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBs
aWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIA0KKyAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYu
DQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhf
QVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFy
YW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IGdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVu
aWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVS
X1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNp
b24oKTsgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7DQorICAgICAgLy9jYXNlIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJB
V19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFDQorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9Q
QUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrUmV2
ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJ
R05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElO
VDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyBi
cmVhazsNCisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNr
OyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19G
VU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NU
RU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJj
ZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0RT
VF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsg
ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOyAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKTsgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAg
ICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICANCisgICAg
ICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7DQorICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsN
CisgICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQor
ICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgDQorICAgICAg
Y2FzZSBHTF9TQU1QTEVTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisgICAgICAgICAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6DQor
ICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOg0KKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7DQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBlbHNlIA0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRf
RElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjpt
YXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpKTsNCisgICAgICAgICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247DQorICAg
ICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQ7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpw
YXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1ZJRVdQT1JUOg0KKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LnZpZXdwb3J0WDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7DQorICAg
ICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsNCisgICAgICAgIHBhcmFtc1sz
XSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU0NJU1NPUl9CT1g6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7DQor
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7DQorICAgICAgICBwYXJhbXNbMl0g
PSBtU3RhdGUuc2Npc3NvcldpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNz
b3JIZWlnaHQ7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RF
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAgICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOg0KKyAg
ICAgIGNhc2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsNCisNCisgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURf
QklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsNCisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZl
ci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkxV
RV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJlYWs7DQor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZm
ZXItPmdldEFscGhhU2l6ZSgpOyBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCk7DQorDQorICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0
aFNpemUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6DQorICAg
ICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKw0KKyAgICAgICAgICAg
IGlmIChzdGVuY2lsYnVmZmVyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOg0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBn
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVT
YW1wbGVyXS5pZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYg
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1h
eGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uaWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICAgICpwYXJhbXMgPSBtUmVz
ZXRTdHJhdGVneTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1f
QklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgKnBhcmFtcyA9IDE7DQorICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAg
KnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOw0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xl
bnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQ0KK3sNCisg
ICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVkIGZvciBERVBUSF9DTEVB
Ul9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uDQorICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0
aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhp
cyBpcyBkdWUNCisgICAgLy8gdG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxs
eSBhcyBhIGZsb2F0LCBhbmQgc28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uDQorICAgIC8vIGlm
IHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRoaXMgY29udmVyc2lv
biBpcyBhbHJlYWR5IGltcGxlbWVudGVkIA0KKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBj
YWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFi
bGUsIHdlDQorICAgIC8vIHBsYWNlIERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4g
VGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nDQorICAgIC8vIGFw
cGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0
dXJlRm9ybWF0czsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
U0hBREVSX0JJTkFSWV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0g
R0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6DQorICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlM6DQorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzoNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoNCisg
ICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZG
RVJfU0laRToNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6DQorICAg
ICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6DQorICAgICAgY2FzZSBH
TF9BUlJBWV9CVUZGRVJfQklORElORzoNCisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJ
Tkc6DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzoNCisgICAgICBjYXNlIEdM
X0NVUlJFTlRfUFJPR1JBTToNCisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOg0KKyAgICAg
IGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToNCisgICAgICBjYXNlIEdMX1VO
UEFDS19BTElHTk1FTlQ6DQorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoNCisg
ICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOg0KKyAgICAg
IGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOg0KKyAgICAgIGNh
c2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoNCisgICAgICBjYXNl
IEdMX0RFUFRIX0JJVFM6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6DQorICAgICAgY2Fz
ZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfQ1VMTF9G
QUNFX01PREU6DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOg0KKyAgICAgIGNhc2UgR0xfQUNU
SVZFX1RFWFRVUkU6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6DQorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1ZBTFVFX01BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfRkFJTDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBU
SF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6DQorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfRkFJTDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
DQorICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjoNCisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToNCisgICAgICBjYXNlIEdMX0JMRU5E
X0RTVF9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6DQorICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBI
QToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6
DQorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRV
UkVfU0laRToNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6DQorICAg
ICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAg
ICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6DQorICAgICAgY2FzZSBH
TF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoNCisgICAgICBjYXNlIEdMX1RFWFRV
UkVfQklORElOR18yRDoNCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoN
CisgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6DQorICAgICAg
Y2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgY2FzZSBHTF9Q
Uk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsNCisgICAgICAgIH0NCisg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7DQorICAgICAgICAg
ICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNl
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhf
VklFV1BPUlRfRElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsN
CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoN
CisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAq
bnVtUGFyYW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU0hBREVSX0NPTVBJTEVSOg0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVS
VDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoNCisgICAgICBjYXNlIEdMX0NVTExf
RkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVSIGFyZSBuYXR1
cmFsIHRvIElzRW5hYmxlZCwNCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVyaWVz
Lg0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBw
dXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFsDQorICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6DQorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6DQorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOg0KKyAg
ICAgIGNhc2UgR0xfQkxFTkQ6DQorICAgICAgY2FzZSBHTF9ESVRIRVI6DQorICAgICAgY2FzZSBH
TF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0
eXBlID0gR0xfQk9PTDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsNCisgICAgICAgIH0N
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsNCisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRkFDVE9SOg0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6DQorICAgICAgY2FzZSBHTF9E
RVBUSF9DTEVBUl9WQUxVRToNCisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6DQorICAgICAgICB7
DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1z
ID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFOg0KKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFOg0KKyAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6DQorICAgICAgICB7DQorICAgICAgICAg
ICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsNCisgICAg
ICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6
DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoNCisgICAgICAgIHsNCisgICAgICAgICAgICAq
dHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Ow0KKyAgICAgICAg
fQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUg
cmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJl
Y3RhbmdsZSBhbmQNCisvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGlyZWN0M0QgOSBkZXZp
Y2UNCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQp
DQorew0KKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsNCisNCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9i
amVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwg
ZmFsc2UpOw0KKyAgICB9DQorDQorICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1l
bnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQNCisgICAgLy8gdG8g
a2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxl
IGlmIGRlcHRoIHRleHR1cmluZy4NCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmpl
Y3QgPSBOVUxMOw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlw
ZSgpICE9IEdMX05PTkUpDQorICAgIHsNCisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOw0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dE51bGxDb2xvcmJ1ZmZlcigpOw0KKyAgICB9DQorICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0
KQ0KKyAgICB7DQorICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgYm9vbCBy
ZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7DQorICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJn
ZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOw0KKyAgICBpZiAocmVu
ZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQ0KKyAgICB7DQor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0
ZWRseSBudWxsLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11
c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0
KDAsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9
IHJlbmRlclRhcmdldFNlcmlhbDsNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7
IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQgdG8gcmVuZGVyIHRhcmdldCdzIHNpemUt
LSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHJlbmRlciB0YXJnZXRzLg0KKyAgICAg
ICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7DQorICAgICAgICByZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
ID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2VyaWFsID0gMDsNCisgICAg
dW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOw0KKyAgICBpZiAoZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgIHsNCisgICAg
ICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhidWZmZXIoKTsNCisgICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWwoKTsNCisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIp
Ow0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7DQorICAg
IH0NCisgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgIGRl
cHRoU3RlbmNpbCA9IHN0ZW5jaWxidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOw0KKyAgICAgICAg
aWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJEZXB0aCBz
dGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBzdGVuY2lsYnVmZmVyU2Vy
aWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7DQorICAgIH0NCisNCisgICAgaWYgKGRl
cHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwNCisgICAgICAg
IHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8DQor
ICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQ0KKyAgICB7DQorICAgICAgICBtRGV2
aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7DQorICAgICAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7DQorICAgICAgICBtQXBw
bGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOw0KKyAgICAgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVy
VGFyZ2V0Q2hhbmdlZCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgICAg
ICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QNCisgICAgICAgIH0NCisgICAgICAgIHJlbmRl
clRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRhcmdldERlc2MpOw0KKyAgICAgICAgbVJlbmRlclRh
cmdldERlc2NJbml0aWFsaXplZCA9IHRydWU7DQorICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQ7DQorDQorICAgIGZs
b2F0IHpOZWFyID0gY2xhbXAwMShtU3RhdGUuek5lYXIpOw0KKyAgICBmbG9hdCB6RmFyID0gY2xh
bXAwMShtU3RhdGUuekZhcik7DQorDQorICAgIGlmIChpZ25vcmVWaWV3cG9ydCkNCisgICAgew0K
KyAgICAgICAgdmlld3BvcnQuWCA9IDA7DQorICAgICAgICB2aWV3cG9ydC5ZID0gMDsNCisgICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7DQorICAgICAgICB2
aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7DQorICAgICAgICB2aWV3
cG9ydC5NaW5aID0gMC4wZjsNCisgICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydFgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkp
Ow0KKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgIHZpZXdw
b3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9y
dC5YKSk7DQorICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFtcChtU3RhdGUudmlld3BvcnRI
ZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0g
c3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOw0KKyAgICAgICAgdmlld3BvcnQuTWluWiA9
IHpOZWFyOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7DQorICAgIH0NCisNCisgICAg
aWYgKHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApDQorICAgIHsN
CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcg0KKyAgICB9DQor
DQorICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmlld3BvcnRJbml0aWFsaXplZCB8
fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXplb2YgbVNldFZpZXdwb3J0KSAh
PSAwKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOw0K
KyAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7DQorICAgICAgICBtVmlld3BvcnRJbml0
aWFsaXplZCA9IHRydWU7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KKw0KKyAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAo
bVN0YXRlLnNjaXNzb3JUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1QgcmVjdDsN
CisgICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAgICAgIHJl
Y3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJl
bmRlclRhcmdldERlc2MuSGVpZ2h0KSk7DQorICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1w
KG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAgICAgIHJlY3QuYm90dG9t
ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICB9DQorDQor
ICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZvcm1zRGlydHkpDQorICAgIHsNCisgICAg
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOw0KKyAgICAg
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKTsNCisNCisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCB4eVsy
XSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsNCisg
ICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkp
Ow0KKw0KKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xf
RnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLg0KKyAgICAgICAgR0xpbnQgY29v
cmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxv
YXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9y
dEhlaWdodCAvIDIuMGYsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0
ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgLyAyLjBmfTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29v
cmQsIDEsIHdoeHkpOw0KKw0KKyAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5n
ZXREeERlcHRoTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6
TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJp
bmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOw0KKw0KKyAgICAgICAgR0xpbnQgZGVw
dGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7DQorICAg
ICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0gek5lYXJ9
Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBu
ZWFyRmFyRGlmZik7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0
aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywgc3RlbmNpbGlu
ZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFwcGx5U3Rh
dGUoR0xlbnVtIGRyYXdNb2RlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIEZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBHTGludCBm
cm9udENDVyA9IHByb2dyYW1CaW5hcnktPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOw0KKyAgICBH
TGludCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOw0KKyAgICBwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsNCisNCisgICAgR0xpbnQgcG9p
bnRzT3JMaW5lcyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7
DQorICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsNCisg
ICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlz
RnJvbnQpOw0KKw0KKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURp
c3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7DQorICAgIGJvb2wgemVyb0NvbG9yTWFza0Fs
bG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7DQorICAgIC8vIEFwcGFyZW50
bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29s
b3INCisgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNv
cnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwNCisgICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0
ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQgbm8NCisgICAgLy8gZHJh
d2luZyBpcyBkb25lLg0KKyAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9q
ZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5DQorDQorICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwg
bUZyb250RmFjZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NV
TExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZy
b250RmFjZSkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gZmFsc2U7DQor
ICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlm
IChtU3RhdGUuZGVwdGhUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlz
b24obVN0YXRlLmRlcHRoRnVuYykpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEQzRFpCX0ZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkg
PSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIXplcm9Db2xvck1hc2tBbGxvd2VkICYmICht
TWFza1N0YXRlRGlydHkgfHwgbUJsZW5kU3RhdGVEaXJ0eSkpDQorICAgIHsNCisgICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KKw0KKyAgICBpZiAobUJsZW5kU3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAg
aWYgKG1TdGF0ZS5ibGVuZCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisNCisgICAgICAgICAg
ICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYNCisgICAg
ICAgICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0JMRU5ERkFDVE9SLCBlczJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5ibGVuZENvbG9yKSk7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RD
T0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNv
bnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5k
RnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uUkdCKSk7DQorDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCANCisgICAgICAgICAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiAhPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgfHwgDQorICAgICAgICAgICAg
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOw0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZXMyZHg6
OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZEFscGhhKSk7DQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNv
bnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRF
TkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9u
dEZhY2VEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBm
cmFtZWJ1ZmZlck9iamVjdC0+aGFzU3RlbmNpbCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1P
REUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5
DQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lM
UkVGID0gRDNEUlNfU1RFTkNJTFJFRjsNCisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFU
RVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7DQorICAgICAg
ICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNL
ID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsNCisgICAgICAgICAgICBpZiAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8IA0KKyAgICAgICAg
ICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgDQor
ICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9u
dC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBt
YXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmDQor
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5j
aWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7DQorDQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ss
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDog
RDNEUlNfQ0NXX1NURU5DSUxGVU5DLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsNCisNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5z
dGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhT
dGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwg
OiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCANCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1Mg
OiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
KSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJ
TFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2ls
QmFja0Z1bmMpKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVO
Q0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0
YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxN
QVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsNCisN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBE
M0RSU19DQ1dfU1RFTkNJTFpGQUlMLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZh
aWwpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1Ms
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICAgICAgbUZyb250RmFjZURpcnR5ID0g
ZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1NYXNrU3RhdGVEaXJ0eSkNCisgICAgew0KKyAg
ICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xv
ck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5j
b2xvck1hc2tBbHBoYSk7DQorICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xv
ck1hc2tBbGxvd2VkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBncmVlbiBj
aGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4NCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RC
TEVORF9PTkUpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIEQzREJMRU5ET1BfQUREKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldS
SVRFRU5BQkxFLCBjb2xvck1hc2spOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6
IEZBTFNFKTsNCisNCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQor
DQorICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlm
IChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxF
REVQVEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7DQorICAg
ICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsNCisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCop
JmRlcHRoQmlhcykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UN
CisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
TE9QRVNDQUxFREVQVEhCSUFTLCAwKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19ERVBUSEJJQVMsIDApOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1TYW1wbGVT
dGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3Zl
cmFnZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNv
dmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7DQor
ICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZs
b2F0IHRocmVzaG9sZCA9IDAuNWY7DQorDQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBsZXMoKTsgKytpKQ0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+PSB0aHJl
c2hvbGQpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZXNob2xkICs9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOw0K
KyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJ
bnZlcnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7DQor
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX01VTFRJU0FNUExFTUFTSywgbWFzayk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1EaXRoZXJTdGF0ZURp
cnR5KQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRI
RVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOw0KKw0KKyAgICAgICAgbURp
dGhlclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KK30NCisNCitHTGVudW0gQ29udGV4dDo6
YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQ0KK3sNCisgICAgVHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107DQorDQorICAgIEdMZW51bSBlcnIgPSBt
VmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmli
dXRlcywgaW5zdGFuY2VzKTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIGVycjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVZlcnRleERlY2xh
cmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJy
ZW50UHJvZ3JhbSgpLCBpbnN0YW5jZXMsIHJlcGVhdERyYXcpOw0KK30NCisNCisvLyBBcHBsaWVz
IHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5
IGRldmljZQ0KK0dMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xh
dGVkSW5kZXhEYXRhICppbmRleEluZm8pDQorew0KKyAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0
YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7DQorDQorICAgIGlmIChlcnIgPT0g
R0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBt
QXBwbGllZElCU2VyaWFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldElu
ZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7DQorICAgICAgICAgICAgbUFwcGxpZWRJQlNl
cmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJl
dHVybiBlcnI7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25z
dGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVNoYWRl
cnMoKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFt
KCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwo
KSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRl
cigpOw0KKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dy
YW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7DQorDQorICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlcihwaXhlbFNoYWRlcik7DQorICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
dmVydGV4U2hhZGVyKTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMo
KTsNCisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNl
cmlhbCgpOw0KKyAgICB9DQorDQorICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsN
Cit9DQorDQorLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRo
ZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpDQorew0K
KyAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOw0KKw0KKyAgICBpZiAobVN1cHBvcnRz
VmVydGV4VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZF
UlRFWCk7DQorICAgIH0NCit9DQorDQorLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLA0KKy8vIGxvb2tzIHVwIHRoZSBjb3Jy
ZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUgdHlwZSwNCisv
LyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRl
IChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLg0KK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhT
YW1wbGVyVHlwZSB0eXBlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1
cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGludCBzYW1wbGVyQ291bnQg
PSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5
IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQ0KKyAgICB1bnNpZ25lZCBpbnQgKmFwcGxp
ZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1
cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOw0KKyAgICBpbnQgZDNkU2FtcGxl
ck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVT
QU1QTEVSMDsNCisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRT
YW1wbGVyUmFuZ2UodHlwZSk7DQorDQorICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNh
bXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspDQorICAgIHsNCisgICAg
ICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5
cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleA0K
KyAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0
Ow0KKw0KKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxl
clRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7DQorDQorICAgICAgICAgICAgVGV4dHVy
ZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7
DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1
cmVTZXJpYWwoKTsNCisNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkg
fHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1cmUtPmdldFRl
eHR1cmUoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpDQorICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtz
YW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMo
KSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdldFdyYXBUKCk7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0
ZXIoKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3Jh
cCh3cmFwUykpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVX
cmFwKHdyYXBUKSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2Ft
cGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1h
Z0ZpbHRlcihtYWdGaWx0ZXIpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBEM0RURVhUVVJF
RklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIs
ICZkM2RNaXBGaWx0ZXIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsN
CisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7DQorICAgICAgICAgICAgICAg
ICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxb
c2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOw0KKyAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RT
YW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgYXBwbGllZFRleHR1cmVT
ZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleFNlcmlhbDsNCisgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+cmVzZXREaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVs
c2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsNCisgICAgICAgICAgICAgICAgYXBwbGll
ZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBsZXJSYW5n
ZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5kZXgrKykNCisgICAgew0K
KyAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXJJbmRleCAr
IGQzZFNhbXBsZXJPZmZzZXQsIE5VTEwpOw0KKyAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gPSAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykNCit7DQorICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBHTHNp
emVpIG91dHB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIG1TdGF0
ZS5wYWNrQWxpZ25tZW50KTsNCisgICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrDQorICAg
IGlmIChidWZTaXplKQ0KKyAgICB7DQorICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0
UGl0Y2ggKiBoZWlnaHQ7DQorICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICBpZiAoIXJlbmRl
clRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOyAgIC8vIENvbnRleHQgbXVzdCBiZSBs
b3N0LCByZXR1cm4gc2lsZW50bHkNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
YzsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsNCisNCisgICAgaWYgKGRlc2Mu
TXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpDQorICAgIHsNCisgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJl
dGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldA0KKyAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7DQorICAgIH0NCisNCisgICAgSFJFU1VMVCByZXN1bHQ7DQorICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsNCisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9
ICFnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgpIDw9IDQgJiYg
bURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhl
aWdodCkgPT0gZGVzYy5IZWlnaHQgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Mu
Rm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFOw0KKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMpDQorICAgIHsN
CisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3Jp
dGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkNCisgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwg
ZGVzYy5Gb3JtYXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsN
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAv
LyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQ0KKyAgICAgICAgICAgIGRpcmVj
dFRvUGl4ZWxzID0gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKCFkaXJl
Y3RUb1BpeGVscykNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zm
c2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOw0KKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOw0KKyAg
ICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXN1
bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3Vy
ZmFjZSk7DQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICByZW5kZXJUYXJnZXQg
PSBOVUxMOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIHN5
c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisNCisgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0
IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3INCisgICAgICAgIC8vIGNvZGVz
IHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4NCisgICAgICAgIGlmIChjaGVja0RldmljZUxvc3QocmVz
dWx0KSkNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAg
ICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAg
ICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgIH0NCisNCisgICAgaWYgKGRpcmVj
dFRvUGl4ZWxzKQ0KKyAgICB7DQorICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUkVDVCByZWN0Ow0KKyAgICByZWN0Lmxl
ZnQgPSBjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOw0KKyAgICBy
ZWN0LnRvcCA9IGNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOw0K
KyAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
ZGVzYy5XaWR0aCkpOw0KKyAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOw0KKw0KKyAgICBEM0RMT0NLRURfUkVDVCBs
b2NrOw0KKyAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3Qs
IEQzRExPQ0tfUkVBRE9OTFkpOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsN
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNl
KCk7DQorDQorICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJh
dGUNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCop
cGl4ZWxzOw0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7DQorICAgIGludCBpbnB1dFBp
dGNoOw0KKyAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7DQorICAgICAgICBpbnB1dFBpdGNoID0gLWxvY2su
UGl0Y2g7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSAodW5z
aWduZWQgY2hhciopbG9jay5wQml0czsNCisgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNo
Ow0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcDsgaisrKQ0KKyAgICB7DQorICAgICAgICBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4
UjhHOEI4ICYmDQorICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmDQorICAgICAg
ICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuDQorICAgICAgICAg
ICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubw0K
KyAgICAgICAgICAgIC8vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4NCisg
ICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwNCisgICAgICAgICAgICAg
ICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsDQorICAgICAgICAgICAgICAgICAgIChyZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIDQpOw0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5s
ZWZ0OyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZmxvYXQgcjsNCisgICAgICAgICAg
ICBmbG9hdCBnOw0KKyAgICAgICAgICAgIGZsb2F0IGI7DQorICAgICAgICAgICAgZmxvYXQgYTsN
CisNCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCop
KHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAgICAgICAg
ICAgYSA9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAo
MS4wZiAvIDB4MDAxRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkg
KiAoMS4wZiAvIDB4MDdFMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4Rjgw
MCkgKiAoMS4wZiAvIDB4RjgwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisg
ICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsNCisg
ICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7
DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAz
RTApOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8g
MHg3QzAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kiko
c291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7DQorICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBm
IC8gMHgwMDAwRkYwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYw
MDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoNCisg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICBiID0g
KHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7DQorICAgICAgICAgICAg
ICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7DQor
ICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgw
MEZGMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoNCisgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGlu
dCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAgICAg
ICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOw0KKyAg
ICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAw
MDAzRkYpOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAo
MS4wZiAvIDB4MDAwRkZDMDApOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgz
RkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOw0KKyAgICAgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQg
Zm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5
IHJvdW5kDQorICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAq
IGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAqKChm
bG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOw0KKyAgICAgICAg
ICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0
Y2gpICsgMik7DQorICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAx
NiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIx
NkY6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZv
cm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSBy
b3VuZA0KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWJncls0XTsNCisNCisgICAgICAgICAg
ICAgICAgICAgIEQzRFhGbG9hdDE2VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJj
ZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpLCA0KTsNCisNCisgICAgICAgICAgICAgICAgICAg
IGEgPSBhYmdyWzNdOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IGFiZ3JbMl07DQorICAgICAg
ICAgICAgICAgICAgICBnID0gYWJnclsxXTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSBhYmdy
WzBdOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FDQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAg
IHJldHVybjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAu
NWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgy
NTUgKiBiICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOw0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6DQorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7DQorICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsN
CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRf
UkVWX0VYVDoNCisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAg
OSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMA0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgICAg
ICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAg
IDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8DQorICAgICAgICAgICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0
cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwN
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVm
KSA8PCA0KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiBiICsgMC41ZikgPDwgMCk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoNCisgICAg
ICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRo
ZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAg
NiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMA0KKyAgICAgICAgICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8
ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAx
c3QgY29tcG9uZW50ICAgICB8DQorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
Lg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVA0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQ0KKyAgICAgICAgICAg
ICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpXSA9IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
YiArIDAuNWYpIDw8IDApIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOw0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsNCisNCisgICAgc3lzdGVt
U3VyZmFjZS0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0Zmll
bGQgbWFzaykNCit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBEV09SRCBmbGFncyA9IDA7DQorDQorICAgIGlmICht
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgbWFzayAmPSB+R0xf
Q09MT1JfQlVGRkVSX0JJVDsNCisNCisgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBm
bGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYg
KG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5H
TF9ERVBUSF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJh
bWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsNCisgICAgICAgIH0N
CisgICAgfQ0KKw0KKyAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOw0KKw0KKyAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgbWFzayAm
PSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOw0KKyAgICAgICAgICAgIGlm
ICghZGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJE
ZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAgICAgICAg
ICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2M7DQorICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNj
KCZkZXNjKTsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisNCisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBkeDJlczo6R2V0U3RlbmNpbFNpemUo
ZGVzYy5Gb3JtYXQpOw0KKyAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3Rl
bmNpbFNpemUpIC0gMTsNCisNCisgICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4
MCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NU
RU5DSUw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICht
YXNrICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENs
aXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3Bv
cnQNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIEQzRENPTE9SIGNv
bG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhh
KSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZCksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5i
bHVlKSk7DQorICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVl
KTsNCisgICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAw
MEZGOw0KKw0KKyAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6ZSht
UmVuZGVyVGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsN
CisNCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZsYWdzICYgRDNE
Q0xFQVJfU1RFTkNJTCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2ls
VW5tYXNrZWQ7DQorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3Mg
JiBEM0RDTEVBUl9UQVJHRVQpICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVuICYmDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tC
bHVlICYmIGFscGhhVW5tYXNrZWQpOw0KKw0KKyAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIg
fHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikNCisgICAgew0KKyAgICAgICAgLy8gU3RhdGUgd2hp
Y2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBj
YWxsIGlzIHNhdmVkLg0KKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5
IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQNCisgICAg
ICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uDQorICAgICAgICBIUkVTVUxUIGhyOw0KKyAgICAg
ICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBociA9IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOw0KKyAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhy
ID09IEVfT1VUT0ZNRU1PUlkpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQz
REZJTExfU09MSUQpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9S
KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
QUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNv
bG9yKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRU1BU0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGZvcihp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7DQorICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygm
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9S
WSk7DQorICAgICAgICB9DQorDQorICAgICAgICBBU1NFUlQobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKTsNCisNCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5V
TEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
LT5DYXB0dXJlKCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5B
QkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVO
QywgRDNEQ01QX0FMV0FZUyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsNCisgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsN
CisNCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29s
b3JNYXNrR3JlZW4sIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEp
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAm
IEQzRENMRUFSX1NURU5DSUwpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywg
RDNEQ01QX0FMV0FZUyk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBE
M0RTVEVOQ0lMT1BfUkVQTEFDRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0N
CisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKyAgICAgICAgbURldmljZS0+U2V0RlZGKEQz
REZWRl9YWVpSSFcpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQ
QVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBE
M0RUQV9URkFDVE9SKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsN
CisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNv
bG9yKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
TUFTSywgMHhGRkZGRkZGRik7DQorDQorICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZsb2F0IHF1
YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRoZSB0YXJnZXQsIGFsaWdu
ZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzDQorICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7DQorICAg
ICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsNCisgICAg
ICAgIHF1YWRbMF1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7DQorDQor
ICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOw0KKyAg
ICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7DQorICAg
ICAgICBxdWFkWzFdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMV1bM10gPSAxLjBmOw0KKw0K
KyAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOw0KKyAgICAgICAgcXVhZFsyXVsxXSA9IC0wLjVm
Ow0KKyAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzJdWzNdID0gMS4w
ZjsNCisNCisgICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAu
NWY7DQorICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzNdWzJdID0g
MC4wZjsNCisgICAgICAgIHF1YWRbM11bM10gPSAxLjBmOw0KKw0KKyAgICAgICAgbURpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9U
UklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsNCisNCisgICAgICAgIGlm
IChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVSLCBjb2xvciwg
ZGVwdGgsIHN0ZW5jaWwpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlLT5BcHBseSgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UgaWYg
KGZsYWdzKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFncywg
Y29sb3IsIGRlcHRoLCBzdGVuY2lsKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcykNCit7DQorICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQor
DQorICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsNCisgICAgaW50IHByaW1pdGl2
ZUNvdW50Ow0KKw0KKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNv
dW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkNCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOw0KKw0KKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoZmFsc2UpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisg
ICAgYXBwbHlTdGF0ZShtb2RlKTsNCisNCisgICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsNCisg
ICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9DQorDQorICAgIGFwcGx5U2hhZGVycygp
Ow0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0o
KS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQor
ICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9M
T09QKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9O
RSwgTlVMTCwgMCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAw
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVyICpjb3VudGluZ0lC
ID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7DQorICAgICAg
ICAgICAgaWYgKGNvdW50aW5nSUIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3Vu
dGluZ0lCLT5nZXRCdWZmZXIoKSk7DQorICAgICAgICAgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVk
UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7
DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEg
Y291bnRpbmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0YW5jZWQuIik7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAw
LCBwcmltaXRpdmVDb3VudCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250
ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQ0KK3sNCisgICAgaWYg
KCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFpbmRpY2VzICYmICFt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEQzRFBSSU1JVElWRVRZUEUg
cHJpbWl0aXZlVHlwZTsNCisgICAgaW50IHByaW1pdGl2ZUNvdW50Ow0KKw0KKyAgICBpZighZXMy
ZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnBy
aW1pdGl2ZUNvdW50KSkNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOw0K
Kw0KKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
Ow0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgYXBwbHlTdGF0ZShtb2RlKTsNCisN
CisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87DQorICAgIEdMZW51bSBlcnIgPSBh
cHBseUluZGV4QnVmZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsN
CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKGVycik7DQorICAgIH0NCisNCisgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5m
by5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7DQorICAgIEdMc2l6ZWkgcmVwZWF0
RHJhdyA9IDE7DQorICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5JbmRl
eCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOw0KKyAgICBpZiAoZXJyICE9
IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsNCisgICAg
fQ0KKw0KKyAgICBhcHBseVNoYWRlcnMoKTsNCisgICAgYXBwbHlUZXh0dXJlcygpOw0KKw0KKyAg
ICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVT
YW1wbGVycyhmYWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQ0K
KyAgICB7DQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOw0KKw0KKyAgICAgICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRyYXdMaW5l
TG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsgICANCisgICAg
ICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWlu
ZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJ
bmZvLnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQorLy8gSW1wbGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMg
ZmFsc2UsIGdsRmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQ0KK3ZvaWQgQ29udGV4dDo6c3luYyhi
b29sIGJsb2NrKQ0KK3sNCisgICAgbURpc3BsYXktPnN5bmMoYmxvY2spOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgpDQorew0KKyAgICAvLyBHZXQgdGhlIHJhdyBp
bmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcNCisgICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpKQ0KKyAgICB7DQorICAgICAgICBCdWZmZXIg
KmluZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsNCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOw0K
KyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZl
ci0+ZGF0YSgpKSArIG9mZnNldDsNCisgICAgfQ0KKw0KKyAgICBVSU5UIHN0YXJ0SW5kZXggPSAw
Ow0KKyAgICBib29sIHN1Y2NlZWRlZCA9IGZhbHNlOw0KKw0KKyAgICBpZiAoc3VwcG9ydHMzMmJp
dEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNv
dW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KTsNCisNCisgICAgICAgIGlmICghbUxpbmVM
b29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1U
X0lOREVYMzIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1MaW5lTG9vcElCKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVk
ZWQsIEdMX1VOU0lHTkVEX0lOVCk7DQorDQorICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOw0K
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsNCisgICAgICAgICAg
ICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBp
ZiAoZGF0YSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkN
CisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAv
LyBOb24taW5kZXhlZCBkcmF3DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVtpXSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoNCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQq
PihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVsw
XTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
Ow0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51
bm1hcCgpOw0KKyAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGNvbnN0
IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsN
CisNCisgICAgICAgIGlmICghbUxpbmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAg
bUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9J
TkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMTYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgaWYgKG1MaW5lTG9vcElCKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1MaW5lTG9vcElC
LT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKTsNCisNCisgICAg
ICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRh
dGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VO
ZWVkZWQsICZvZmZzZXQpKTsNCisgICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gMjsN
CisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoZGF0YSkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3DQorICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7
DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOg0KKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOw0KKyAgICAgICAgICAgICAgICBz
dWNjZWVkZWQgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAg
ICANCisgICAgaWYgKHN1Y2NlZWRlZCkNCisgICAgew0KKyAgICAgICAgaWYgKG1BcHBsaWVkSUJT
ZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxpbmVMb29wSUItPmdldEJ1ZmZlcigpKTsNCisgICAg
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRf
TElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQp
Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGEgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkNCit7DQorICAgIG1JbnZhbGlkRW51bSA9IHRydWU7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkNCit7DQorICAgIG1J
bnZhbGlkVmFsdWUgPSB0cnVlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRP
cGVyYXRpb24oKQ0KK3sNCisgICAgbUludmFsaWRPcGVyYXRpb24gPSB0cnVlOw0KK30NCisNCit2
b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkNCit7DQorICAgIG1PdXRPZk1lbW9yeSA9
IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3Bl
cmF0aW9uKCkNCit7DQorICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0cnVlOw0K
K30NCisNCisvLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0cyBm
bGFnLCBpZiBhbnkuDQorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMu
DQorR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkNCit7DQorICAgIGlmIChtSW52YWxpZEVudW0p
DQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfRU5VTTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRWYWx1ZSkN
CisgICAgew0KKyAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfVkFMVUU7DQorICAgIH0NCisNCisgICAgaWYgKG1JbnZhbGlkT3BlcmF0
aW9uKQ0KKyAgICB7DQorICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIGlmICht
T3V0T2ZNZW1vcnkpDQorICAgIHsNCisgICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOw0KKw0K
KyAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7DQorICAgIH0NCisNCisgICAgaWYgKG1J
bnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pDQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkRnJh
bWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgICAgIHJldHVybiBHTF9JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gR0xfTk9fRVJS
T1I7DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0YXR1cygpDQorew0KKyAgICBp
ZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBib29sIGxv
c3QgPSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsNCisNCisgICAgICAgIGlmIChsb3N0KQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7ICAg
Ly8gU2V0cyBtUmVzZXRTdGF0dXMNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBHTGVudW0g
c3RhdHVzID0gbVJlc2V0U3RhdHVzOw0KKw0KKyAgICBpZiAobVJlc2V0U3RhdHVzICE9IEdMX05P
X0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBpZiAobURpc3BsYXktPnRlc3REZXZpY2VSZXNldHRh
YmxlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJS
T1I7DQorICAgICAgICB9DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiBzdGF0dXM7DQorfQ0K
Kw0KK2Jvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKQ0KK3sNCisgICAg
cmV0dXJuIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsN
Cit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOw0KK30NCisNCitpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZF
Q1RPUlNfU00yOw0KK30NCisNCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0
ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7DQorfQ0K
Kw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBn
ZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsNCit9DQorDQoraW50IENvbnRleHQ6
OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NN
MyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOw0KK30NCisNCitpbnQgQ29udGV4
dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFN1
cHBvcnRlZFNhbXBsZXM7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVk
U2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdA0KK3sNCisgICAg
aWYgKHJlcXVlc3RlZCA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gcmVxdWVzdGVkOw0K
KyAgICB9DQorDQorICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0
b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7DQorICAgIGlmIChpdHIg
PT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0x
Ow0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElT
QU1QTEVfMTZfU0FNUExFUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBpZiAoaXRyLT5zZWNvbmRb
aV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gaTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdA0KK3sN
CisgICAgcmV0dXJuIG1TdXBwb3J0c0V2ZW50UXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBw
b3J0c09jY2x1c2lvblF1ZXJpZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQx
VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsN
Cit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6
OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNE
WFQ1VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVy
ZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlczsNCit9
DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jv
b2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisN
Citib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3Vw
cG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBv
cnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1h
eGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhS
ZW5kZXJidWZmZXJEaW1lbnNpb247DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNp
b247DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsNCit9DQor
DQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNM
dW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5h
bmNlVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsNCit9DQorDQor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN1cHBvcnRzMzJiaXRJbmRpY2VzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNpbmc7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0KKyAgICAvLyBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMjoNCisgICAgLy8gSWYgYSBidWZmZXIgb2Jq
ZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5ncyB0byB0aGF0IG9i
amVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0DQorICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQg
dGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLg0KKw0KKyAgICBp
ZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBt
U3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGlu
dCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1
dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxM
KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1
cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjggcGFnZSA4NDoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBp
dCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0
dXJlIG9iamVjdCBhcmUNCisgICAgLy8gcmVib3VuZCB0byB0ZXh0dXJlIG9iamVjdCB6ZXJvDQor
DQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBl
KyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5p
ZCgpID09IHRleHR1cmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biA0LjQgcGFnZSAxMTI6DQorICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3
aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1
ZmZlciwgdGhlbiBpdCBpcw0KKyAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQg
YmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9p
bnQgdG8gd2hpY2ggdGhpcw0KKyAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJl
bnRseSBib3VuZCBmcmFtZWJ1ZmZlci4NCisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1
ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZm
ZXIpDQorICAgIHsNCisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0
dXJlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1
ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAgIGRyYXdGcmFtZWJ1ZmZl
ci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6
OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoNCisgICAgLy8gSWYgYSBmcmFtZWJ1
ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlz
IGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaA0KKyAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJl
ZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZl
ciBvZiB6ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1
ZmZlcikNCisgICAgew0KKyAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikNCisgICAg
ew0KKyAgICAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAgfQ0KK30NCisNCit2b2lk
IENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5Og0KKyAgICAvLyBJ
ZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIg
aXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXINCisgICAgLy8gaGFk
IGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6
ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZl
cikNCisgICAgew0KKyAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsNCisgICAgfQ0KKw0KKyAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTE6DQorICAgIC8vIElm
IGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRh
Y2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLA0KKyAgICAvLyB0aGVuIGl0
IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBh
IHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50DQorICAgIC8vIHBvaW50IHRv
IHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJh
bWVidWZmZXIuDQorDQorICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFk
RnJhbWVidWZmZXIoKTsNCisgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQ0KKyAgICB7DQor
ICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
Ow0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVy
ICE9IHJlYWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5k
ZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KK30NCisNCitUZXh0dXJl
ICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBlKQ0KK3sNCisg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7DQorDQorICAg
IGlmICh0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNv
bG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9Ow0KKw0KKyAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
DQorICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRVUkVfMkQNCisN
CisgICAgICAgICAgY2FzZSBURVhUVVJFXzJEOg0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklO
Q09NUExFVEVfVEVYVFVSRV9JRCk7DQorICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0
SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0KKyAg
ICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBicmVhazsNCisNCisgICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6DQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3
IFRleHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7DQorDQorICAg
ICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwg
Y29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0K
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorDQorICAgICAgICAgICAgICB0ID0g
aW5jb21wbGV0ZUN1YmU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQodCk7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIHQ7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Y3VsbFNraXBz
RHJhdyhHTGVudW0gZHJhd01vZGUpDQorew0KKyAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYm
IG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShk
cmF3TW9kZSk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRy
YXdNb2RlKQ0KK3sNCisgICAgc3dpdGNoIChkcmF3TW9kZSkNCisgICAgew0KKyAgICAgIGNhc2Ug
R0xfVFJJQU5HTEVTOg0KKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOg0KKyAgICAgIGNhc2Ug
R0xfVFJJQU5HTEVfU1RSSVA6DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICBjYXNlIEdM
X1BPSU5UUzoNCisgICAgICBjYXNlIEdMX0xJTkVTOg0KKyAgICAgIGNhc2UgR0xfTElORV9MT09Q
Og0KKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmYWxz
ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZXMpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKTsNCisNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1
cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtp
bmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsNCisgICAgbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsNCisgICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsNCisN
CisgICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1ZShpbmRleCk7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQ0KK3sNCisgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUyk7DQorDQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0g
ZGl2aXNvcjsNCit9DQorDQorLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIN
CisvLyBPRVMgZXh0ZW5zaW9ucw0KKy8vIEVYVCBleHRlbnNpb25zDQorLy8gVmVuZG9yIGV4dGVu
c2lvbnMNCit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQ0KK3sNCisgICAgbUV4
dGVuc2lvblN0cmluZyA9ICIiOw0KKw0KKyAgICAvLyBPRVMgZXh0ZW5zaW9ucw0KKyAgICBpZiAo
c3VwcG9ydHMzMmJpdEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOw0KKyAgICB9DQorDQorICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOw0KKyAgICAvL21F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsNCisgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsNCisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7DQorDQorICAgIGlmIChzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOw0KKyAgICB9DQorICAg
IGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAiOw0KKyAgICB9DQorICAgIGlmIChz
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7DQorICAgIH0NCisNCisg
ICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7DQorICAgIH0NCisNCisgICAg
Ly8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzT2NjbHVz
aW9uUXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9F
WFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOw0KKw0KKyAgICBpZiAoc3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOw0KKyAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlICI7DQorDQorICAgIC8vIEFOR0xFLXNw
ZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQ0KKyAg
ICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJl
ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfYmxpdCAiOw0KKyAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApDQor
ICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlICI7DQorICAgIH0NCisNCisgICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygp
KQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5j
ZWRfYXJyYXlzICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOw0KKw0KKyAgICBpZiAoc3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgIjsNCisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7DQorDQorICAgIC8v
IE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zDQorICAgIGlmIChzdXBwb3J0c0V2ZW50
UXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9m
ZW5jZSAiOw0KKyAgICB9DQorDQorICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4
dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7DQorICAgIGlmIChlbmQgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXpl
KGVuZCsxKTsNCisgICAgfQ0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNp
b25TdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIo
KTsNCit9DQorDQordm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcoKQ0KK3sNCisgICAg
RDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVy
SWRlbnRpZmllcigpOw0KKw0KKyAgICBtUmVuZGVyZXJTdHJpbmcgPSAiQU5HTEUgKCI7DQorICAg
IG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5EZXNjcmlwdGlvbjsNCisgICAgbVJlbmRl
cmVyU3RyaW5nICs9ICIpIjsNCit9DQorDQorY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UmVuZGVy
ZXJTdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1SZW5kZXJlclN0cmluZy5jX3N0cigp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQg
ZHN0WTEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQ0K
K3sNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+
Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwNCisgICAgICAgICFk
cmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpbnQgcmVhZEJ1ZmZl
cldpZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOw0K
KyAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCk7DQorICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQorICAgIGludCBkcmF3QnVmZmVy
SGVpZ2h0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsN
CisNCisgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICBSRUNUIGRlc3RSZWN0Ow0KKw0KKyAgICBp
ZiAoc3JjWDAgPCBzcmNYMSkNCisgICAgew0KKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3Jj
WDA7DQorICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDE7DQorICAgICAgICBkZXN0UmVj
dC5sZWZ0ID0gZHN0WDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgxOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDE7DQor
ICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7DQorICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0gc3JjWDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgwOw0KKyAgICB9DQorDQor
ICAgIGlmIChzcmNZMCA8IHNyY1kxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7DQorICAgICAgICBz
b3VyY2VSZWN0LnRvcCA9IHNyY1kwOw0KKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7DQor
ICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNy
Y1kwOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7DQorICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTE7DQorICAgIH0N
CisNCisgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNlUmVjdDsNCisgICAgUkVD
VCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0Ow0KKw0KKyAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0KQ0KKyAgICB7DQorICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBk
ZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QNCisgICAg
ICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgZGVzdFJlY3QgaXMgbm93IGluIEQzRC1zdHlsZSBjb29y
ZGluYXRlcywgc28gdGhlICp0b3AqIG9mIHRoZQ0KKyAgICAgICAgLy8gcmVjdCB3aWxsIGJlIGNo
ZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4NCisgICAgICAg
IGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7DQorICAg
ICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsNCisgICAg
ICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmxlZnQgKz0geERpZmY7DQorICAgICAgICB9DQor
DQorICAgICAgICBpZiAoZGVzdFJlY3QucmlnaHQgPiBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUu
c2Npc3NvcldpZHRoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RS
ZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOw0KKyAg
ICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnJpZ2h0ID0gbVN0YXRlLnNjaXNzb3JYICsgbVN0
YXRlLnNjaXNzb3JXaWR0aDsNCisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0
IC09IHhEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1T
dGF0ZS5zY2lzc29yWSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgeURpZmYgPSBtU3Rh
dGUuc2Npc3NvclkgLSBkZXN0UmVjdC50b3A7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJl
Y3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJl
Y3QudG9wICs9IHlEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGRlc3RSZWN0LmJv
dHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Np
c3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3Jl
ZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQ7DQor
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7DQorICAg
IGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOw0KKw0KKyAgICBSRUNUIHNvdXJjZVRyaW1t
ZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsNCisgICAgUkVDVCBkZXN0VHJpbW1lZFJlY3Qg
PSBkZXN0U2Npc3NvcmVkUmVjdDsNCisNCisgICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9u
IHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQg
b2YgdGhlIGJvdW5kcyBvZiANCisgICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZh
Y2VzLg0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QubGVmdCA8IDApDQorICAgIHsNCisgICAg
ICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgc291
cmNlVHJpbW1lZFJlY3QubGVmdCA9IDA7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCAr
PSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiBy
ZWFkQnVmZmVyV2lkdGgpDQorICAgIHsNCisgICAgICAgIGludCB4RGlmZiA9IHNvdXJjZVRyaW1t
ZWRSZWN0LnJpZ2h0IC0gcmVhZEJ1ZmZlcldpZHRoOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qucmln
aHQgLT0geERpZmY7DQorICAgIH0NCisNCisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8
IDApDQorICAgIHsNCisgICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50
b3A7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgPSAwOw0KKyAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnRvcCArPSB5RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1l
ZFJlY3QuYm90dG9tID4gcmVhZEJ1ZmZlckhlaWdodCkNCisgICAgew0KKyAgICAgICAgaW50IHlE
aWZmID0gc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsNCisgICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQ7DQorICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB4RGlmZiA9IDAg
LSBkZXN0VHJpbW1lZFJlY3QubGVmdDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0g
MDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7DQorICAgIH0NCisN
CisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRyYXdCdWZmZXJXaWR0aCkNCisgICAg
ew0KKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZl
cldpZHRoOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID0gZHJhd0J1ZmZlcldpZHRo
Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7DQorICAgIH0NCisN
CisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC50b3AgPCAwKQ0KKyAgICB7DQorICAgICAgICBpbnQg
eURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVj
dC50b3AgPSAwOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOw0KKyAg
ICB9DQorDQorICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdo
dCkNCisgICAgew0KKyAgICAgICAgaW50IHlEaWZmID0gZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAt
IGRyYXdCdWZmZXJIZWlnaHQ7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJh
d0J1ZmZlckhlaWdodDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5RGlm
ZjsNCisgICAgfQ0KKw0KKyAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7DQorICAg
IGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSBzb3VyY2VUcmltbWVkUmVjdC50b3AgPCBy
ZWFkQnVmZmVySGVpZ2h0IHx8DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNv
dXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgDQorICAgICAgICBkZXN0
VHJpbW1lZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdCdWZmZXJIZWln
aHQgfHwNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtIGRlc3RUcmltbWVkUmVjdC5s
ZWZ0IDwgZHJhd0J1ZmZlcldpZHRoIHx8DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3Ag
IT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVm
dCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApDQorICAgIHsNCisgICAgICAgIHBh
cnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8y
RCB8fA0KKyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkg
PT0gR0xfUkVOREVSQlVGRkVSOw0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8
DQorICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9SRU5ERVJCVUZGRVI7DQorICAgICAgICBpZiAoIXZhbGlkUmVhZFR5cGUgfHwgIXZhbGlkRHJh
d1R5cGUgfHwNCisgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCkt
PmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
RDNERm9ybWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJDb2xvciBidWZmZXIg
Zm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBi
eSB0aGlzIGltcGxlbWVudGF0aW9uIik7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgaWYgKHBh
cnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOw0KKw0K
KyAgICB9DQorDQorICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1
ZmZlciA9IE5VTEw7DQorICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
DQorDQorICAgICAgICAvLyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5k
IGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIHNvIGlmIHdlIGhhdmUNCisgICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNp
bCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLg0KKw0KKyAgICAgICAgaWYgKG1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlclR5cGUoKSB8fA0KKyAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAg
ICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0
cnVlOw0KKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCk7DQorICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor
DQorICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fA0KKyAgICAgICAg
ICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZv
cm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3Jt
YXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgcmVh
ZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAgICAg
ICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChwYXJ0aWFs
QnVmZmVyQ29weSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVm
ZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1l
bnRhdGlvbi4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOyAvLyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZA0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1w
bGVzKCkgIT0gMCkgfHwgDQorICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAmJiByZWFkRFNCdWZm
ZXItPmdldFNhbXBsZXMoKSAhPSAwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAg
ICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOw0KKw0KKyAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJn
ZXQpDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRSZW5k
ZXJUYXJnZXQgPSByZWFkRnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRSZW5kZXJUYXJnZXQsICZzb3VyY2VUcmltbWVkUmVjdCwg
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOw0KKw0KKyAgICAg
ICAgICAgIHJlYWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBkcmF3UmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJB
TkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQorICAgICAg
ICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAg
ICBpZiAoYmxpdERlcHRoU3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5j
aWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOw0KKw0KKyAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZERlcHRoU3RlbmNpbCwg
TlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsNCisNCisgICAgICAg
ICAgICByZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgZHJhd0RlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5H
TEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOw0KKyAgICAgICAg
ICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0K
Kw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1N
YXhMcnUoMCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NB
Q0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52
ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7DQorICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxy
dUNvdW50ID0gMDsNCisgICAgfQ0KK30NCisNCitWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVy
dGV4RGVjbGFyYXRpb25DYWNoZSgpDQorew0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9W
RVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChtVmVy
dGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCitHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6
YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywg
R0xzaXplaSAqcmVwZWF0RHJhdykNCit7DQorICAgICpyZXBlYXREcmF3ID0gMTsNCisNCisgICAg
aW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7DQorICAgIGludCBpbnN0
YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7DQorDQorICAgIGlmIChpbnN0YW5j
ZXMgPiAwKQ0KKyAgICB7DQorICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRv
IGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDANCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXNbaV0uYWN0aXZlKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYg
KGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0KKyAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDAp
DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhl
ZEF0dHJpYnV0ZSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9W
RVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJpYnV0ZSA9IGk7DQorICAgICAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxz
ZSBicmVhazsgICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1
dGUNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOw0KKyAg
ICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsNCisNCisgICAgUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsN
CisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisg
ICAgew0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGludCBzdHJlYW0gPSBpOw0KKw0KKyAgICAgICAgICAgIGlmIChpbnN0YW5jZXMg
PiAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9u
IEFUSSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0
dHJpYnV0ZXMgYXJlIGluc3RhbmNlZC4NCisgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOw0KKyAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkNCisgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAwOw0KKyAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQ0KKyAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4
ZWRBdHRyaWJ1dGU7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
ICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7DQorICAgICAgICAgICAgICAgICAgICANCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkNCisgICAgICAgICAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7DQorICAgICAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNF
REFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsNCisgICAgICAgICAgICAgICAgICAgIG1J
bnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0
dHJpYnV0ZXNbaV0uc2VyaWFsIHx8DQorICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8DQorICAgICAgICAgICAgICAgIG1B
cHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uoc3RyZWFt
LCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJp
YnV0ZXNbaV0uc3RyaWRlKTsNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5z
ZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRW
QnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsNCisgICAgICAgICAgICAg
ICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsNCisg
ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOw0K
KyAgICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7DQorICAgICAgICAgICAgZWxlbWVudC0+
VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsNCisgICAgICAgICAgICBlbGVtZW50LT5NZXRob2Qg
PSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7DQorICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBE
M0RERUNMVVNBR0VfVEVYQ09PUkQ7DQorICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9
IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7DQorICAgICAgICAgICAgZWxlbWVu
dCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBp
bnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0KKyAgICB7DQorICAgICAg
ICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7DQorICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5U
OSBlbmQgPSBEM0RERUNMX0VORCgpOw0KKyAgICAqKGVsZW1lbnQrKykgPSBlbmQ7DQorDQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykN
CisgICAgew0KKyAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhE
ZWNsQ2FjaGVbaV07DQorICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywg
ZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5
KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQorICAgICAg
ICAgICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1Ow0KKyAgICAgICAgICAgIGlmKGVudHJ5
LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4
RGVjbGFyYXRpb24pOw0KKyAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZl
cnRleERlY2xhcmF0aW9uOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm4g
R0xfTk9fRVJST1I7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgVmVydGV4RGVjbENhY2hl
RW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7DQorDQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAg
ICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNv
dW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENh
Y2hlW2ldOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRl
eERlY2xhcmF0aW9uICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsNCisgICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24gPSBOVUxMOw0KKyAgICAgICAgLy8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJl
cGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5DQorICAgICAgICAvLyBhYm91dCBp
dC4NCisgICAgfQ0KKw0KKyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxl
bWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7
DQorICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2Fj
aGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlv
bihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgbUxhc3RTZXRWRGVjbCA9IGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247DQorICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSAr
K21NYXhMcnU7DQorDQorICAgIHJldHVybiBHTF9OT19FUlJPUjsNCit9DQorDQordm9pZCBWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpDQorew0KKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtQXBw
bGllZFZCc1tpXS5zZXJpYWwgPSAwOw0KKyAgICB9DQorDQorICAgIG1MYXN0U2V0VkRlY2wgPSBO
VUxMOw0KKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBi
ZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkDQorfQ0KKw0KK30NCisNCitleHRlcm4gIkMiDQorew0K
K2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywg
Y29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wg
cm9idXN0QWNjZXNzKQ0KK3sNCisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNo
YXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOw0KK30NCisNCit2b2lkIGds
RGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpDQorew0KKyAgICBkZWxldGUgY29u
dGV4dDsNCisNCisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkNCisgICAgew0K
KyAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICBnbDo6bWFrZUN1cnJl
bnQoY29udGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7DQorfQ0KKw0KK2dsOjpDb250ZXh0ICpnbEdl
dEN1cnJlbnRDb250ZXh0KCkNCit7DQorICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOw0KK30N
Cit9DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
aAppbmRleCA4ZGNjZjBmLi40ZDQ3Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApAQCAtMjUxLDcgKzI1MSw3IEBAIGNsYXNzIFZlcnRl
eERlY2xhcmF0aW9uQ2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1NYXhMcnU7CiAKLSAgICBl
bnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9OworICAgIGVudW0geyBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAgICBzdHJ1Y3QgVkJEYXRh
CiAgICAgewpAQCAtMjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQKIAogICAgIHZvaWQgbWFr
ZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwog
Ci0gICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxs
U3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpA
QCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQx
NlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVz
KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0
OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9v
bCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2Vz
OwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmluZGV4
IDczMGZmZmMuLjc2ZDQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVy
Ojp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAg
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQog
CiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50
IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAgIHJldHVybiAwOwogfQog
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZl
cjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
bUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIE5VTEw7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAg
QEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCiAgICAgcmV0
dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFt
ZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxi
dWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVy
KQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRl
cHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNp
emVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8Cisg
ICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxi
dWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5k
ZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsK
KyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0K
KworICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENv
bG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMs
OSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJh
bWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7
CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1
ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcw
LDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAg
ICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZl
clR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNE
Rk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAg
ICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0
ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9y
bWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1
ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZv
cm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rm
b3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIt
PmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChk
eDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2ls
VGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQogCiAgICAgICAg
IHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9y
YnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRT
YW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0
dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVy
ID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0g
ICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJl
cXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0gICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1
ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAg
LTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0
aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhi
dWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFi
bGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVw
dGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQo
KSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVw
dGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJl
IGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNEZXB0aFRleHR1
cmVGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXIt
PmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1w
bGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhl
aWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQog
ICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7
Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51
bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
d2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJC
VUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
OworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVy
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9E
SU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZm
ZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0
YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJl
Rm9ybWF0KGQzZGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlm
IChtaXNzaW5nQXR0YWNobWVudCkKICAgICAgICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVu
Y2lsYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgp
IHx8IGhlaWdodCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNh
bXBsZXMoKSkKICAgICAgICAgewpAQCAtMzc4LDE0ICs0NTcsMTcgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCisgICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwg
YnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ug
d2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVw
dGggYW5kIHN0ZW5jaWwKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAo
ZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCiAgICAgewotICAgICAgICBpZiAoZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwK
LSAgICAgICAgICAgIHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KSAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVk
IHRvIGhhdmUgYXQgbGVhc3Qgb25lIGF0dGFjaG1lbnQgdG8gYmUgY29tcGxldGUKKyAgICBpZiAo
bWlzc2luZ0F0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCmluZGV4IGI3M2Y5YTAuLjE0ZDljMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgK
QEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5kZXJidWZmZXIgKmdl
dENvbG9yYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwogICAg
IFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
TnVsbENvbG9yYnVmZmVyKCk7CiAKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7CiAg
ICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOwpAQCAtNzMsNiArNzQsOCBAQCBjbGFzcyBG
cmFtZWJ1ZmZlcgogICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7CiAgICAgQmluZGluZ1Bv
aW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7CiAKKyAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyOworCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKaW5kZXgg
YTVlMzhiZi4uZjI4YTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwCkBAIC04LDYgKzgsNyBAQAogLy8gYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIApAQCAtMTcsMjI2MSAr
MTgsODUgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgZ2wKIHsKLXVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7Ci1jb25z
dCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBzdHIoaW50
IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAg
OiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlm
b3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWdu
ZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9
IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwot
fQotCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5jb21wYXJl
KDAsIDMsICJhcl8iKSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlv
bihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFt
ZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3JhbTo6UHJv
Z3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291cmNl
TWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkp
Ci17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotICAgIG1GcmFnbWVudFNoYWRlciA9IE5V
TEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
TlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVQ
UyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9
IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7Ci0KLSAgICBt
RGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Qcm9ncmFt
Ojp+UHJvZ3JhbSgpCi17Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXR0
YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhT
aGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAg
bUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNo
YWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhf
U0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwot
ICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFE
RVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZy
YWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7
Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK2NvbnN0IGNoYXIgKiBjb25zdCBnX2Zh
a2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFBy
b2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1W
ZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOwotfQordW5z
aWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKIAotSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5nczo6QXR0
cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQogCi1J
RGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQorQXR0cmli
dXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOwogfQogCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCitJbmZvTG9nOjpJbmZvTG9nKCkgOiBtSW5mb0xv
ZyhOVUxMKQogewotICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsK
LSAgICB9CiB9CiAKLUdMdWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQorSW5mb0xvZzo6fkluZm9Mb2coKQogewotICAgIGlmIChuYW1lKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5k
ZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIC0xOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCi1pbnQgUHJvZ3JhbTo6
Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCi17Ci0gICAgQVNTRVJUKGF0dHJp
YnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOwot
ICAgIAotICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Ci19CiAKLS8v
IFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCi1H
TGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCitpbnQg
SW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHR5cGUpCisgICAgaWYg
KCFtSW5mb0xvZykKICAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIHJl
dHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoK
LSAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotfQotCi0v
LyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3Jy
ZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhl
IHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQcm9n
cmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4KQotewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVy
c1BTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotCi0g
ICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChsb2dpY2FsVGV4dHVyZVVu
aXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8vIFJl
dHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlw
ZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJUZXh0dXJl
VHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5k
ZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwotICAgICAg
ICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1
cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQotewotICAg
IHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOwotCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1i
b29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
MF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAgIHRhcmdl
dFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0
ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdl
dCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAg
dGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2
ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgcmV0
dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIEluZm9Mb2c6OmdldExvZyhHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
RkxPQVRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OworICAgIGludCBpbmRleCA9IDA7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAg
ICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07
Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0g
ICAgICAgICAgICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgaWYgKG1J
bmZvTG9nKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAg
ICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKICAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQp
ICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Cisg
ICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAw
LjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQg
dGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdo
dD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Ci17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7
Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7
Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0
aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNp
ZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50
IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xf
RkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFs
dWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2
YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQs
IHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAxNjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FN
UExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VC
RSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAg
ICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Ci17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkg
KiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAgICAgICAg
ICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3Jt
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVy
IGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJl
cXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwot
ICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdl
dFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRy
aXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFs
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAx
LjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAg
ICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxD
b3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYo
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
cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAg
ICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBw
bGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAg
Zm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2lu
KCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5k
aXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5
VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywg
Yik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5p
Zm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAg
IGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFw
cGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRo
ZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAq
UHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFo
bHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVz
dWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0g
ICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVf
REVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQ
X09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGgg
PSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5l
IDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmlu
ZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4
dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAg
ICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBO
VUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0g
RDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFp
biIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQotICAgIGlm
IChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNv
bnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgIGFw
cGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBo
bHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1l
c3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJD
b25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQ
b2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0K
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgQ29u
dGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1Zl
Y3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAo
VmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2
YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1u
Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0g
ICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNj
ZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUg
PSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWls
YWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsK
LSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2lu
Z1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
ciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJs
ZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHld
W3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09
IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5
XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBu
ICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1ty
XVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVu
ZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVy
cyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
Ci0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBh
Y2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVn
aXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQot
Ci1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhMU0wuZW1w
dHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRz
Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwot
ICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4
VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0gICAgewot
ICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0xOwotICAg
IH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxM
fTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0
LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9y
cyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lz
dGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVy
cyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBm
YWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRw
dXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQt
PnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0lu
Zm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0
aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+
Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkZy
YWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5w
dXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09M
T1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVU
XG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9
IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
YXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAg
ICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBz
ZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9
Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9T
SVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAg
ICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNr
aW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihy
KSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZl
cnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0
ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAg
ICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5h
bWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50
eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihp
bnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKLSAg
ICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBn
bF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGds
X1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xf
UG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlm
IChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBt
VmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNp
emUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSAr
ICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29y
ZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAg
ICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICog
cm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIg
PSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJl
Z2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09
ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4
SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5n
LT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0
cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wg
Kz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBV
VFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
LSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0
cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsg
biArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJz
KSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7
XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtc
biI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAg
ICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0g
OiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxu
IgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBy
aHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRhaW5zIHRo
ZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkK
LSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4
X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFn
Q29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29u
dGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVy
LnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcp
ICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4
X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56
ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7XG4iOwot
ICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAg
ewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNP
ckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZG
YWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWlu
Zy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSAr
ICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21h
aW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
UFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRo
ZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVw
IHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJt
aW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBv
ZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAg
IGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIg
fHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0g
ICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxp
bmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmls
ZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAi
OwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4
QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2Zp
bGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNv
bXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFu
dFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hh
ZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhl
Y3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQ
aXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4
ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0
KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4
QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlm
b3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1D
b25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJj
aGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAgICAgICAg
IC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwg
ZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4Q29vcmRM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAgICAgIG1E
eEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVs
U2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAgICAgICAg
ICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8v
IERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3Qz
RCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmli
dXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmli
dXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAt
MSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91
bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwot
Ci0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0
dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRl
LT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAx
IDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9u
ID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUt
PnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZy
ZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAg
ICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dz
ID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0
ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBG
YWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0
ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0
U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAg
ICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsg
ciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0
cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0dHJp
YnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9j
YXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlu
a1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBEM0RY
Q09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBEM0RYQ09O
U1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRpb25Db3Vu
dCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3Jp
cHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0
YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudElu
ZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3Rh
bnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFu
dEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkg
c2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
ZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRlZmluZVVu
aWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewotICAgIGlm
IChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNEWEhBTkRM
RSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwg
Y29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25z
dGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29u
c3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RY
UFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAw
OwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgo
c2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhj
ZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3Rh
bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRN
YXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlw
ZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRF
WFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4
VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQz
RFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFy
cmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsg
YXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJl
cnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RY
SEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3Rh
bnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVT
QyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9u
Q291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0
YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdElu
ZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJy
YXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVV
bmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNj
cmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBj
YXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAg
ICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29u
c3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0
aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGlu
dCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVu
dW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5pdGlh
bGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFudFRhYmxl
UFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnZz
LCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7
Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsr
aSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlv
bihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RF
U0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAg
ICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2Nh
bGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQ
VF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09M
X1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgot
ICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3Rh
bnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
TUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRj
aCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGVBdHRy
aWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgw
LCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5h
bWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoX25hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5z
dWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9pZCBQcm9n
cmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01B
WF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0IHx8
Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwg
d2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAq
IDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkK
LSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsK
LSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAg
ICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3Vu
dCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xf
Q09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAg
ewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZM
T0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
fQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0K
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
c2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5h
Y3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleDsK
LQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdElu
ZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4
LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAw
KTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdl
dFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5
VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3Jb
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2
WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2
ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50
LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlV
bmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQz
RFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgaWYgKGxlbmd0aCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNf
RkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKICAg
ICB9CiB9CiAKIC8vIGFwcGVuZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhlIHByb2dyYW0gaW5m
byBsb2cuCiAvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBmaWxlIHBhdGggaW4g
c29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKIC8vIG1lc3NhZ2VzLCBzbyBsZXRzIHJlbW92
ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9tIHRoZSBsb2cuCi12
b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdl
KQordm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsK
ICAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CiAKICAgICBzaXplX3QgZm91bmQ7CiAgICAg
ZG8KICAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOworICAgICAgICBm
b3VuZCA9IG1zZy5maW5kKGdfZmFrZXBhdGgpOwogICAgICAgICBpZiAoZm91bmQgIT0gc3RkOjpz
dHJpbmc6Om5wb3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3Ry
bGVuKGZha2VwYXRoKSk7CisgICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxlbihnX2Zh
a2VwYXRoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKGZvdW5kICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKTsKIAotICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0cigpKTsK
KyAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YXBw
ZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQordm9pZCBJbmZvTG9nOjphcHBl
bmQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgaWYgKCFmb3JtYXQpCiAgICAgewpA
QCAtMjMwNCw3ICsxMjksNyBAQCB2b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikKICAgICB9CiB9CiAKLXZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9n
KCkKK3ZvaWQgSW5mb0xvZzo6cmVzZXQoKQogewogICAgIGlmIChtSW5mb0xvZykKICAgICB7CkBA
IC0yMzEzLDk5ICsxMzgsMTcwIEBAIHZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKICAgICB9
CiB9CiAKLS8vIFJldHVybnMgdGhlIHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRl
LCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5s
aW5rKGJvb2wgZGVzdHJveSkKK1Byb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5h
Z2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUo
aGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQogewotICAgIGlmIChkZXN0cm95KSAgIC8v
IE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtRnJh
Z21lbnRTaGFkZXIgPSBOVUxMOworICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1Qcm9n
cmFtQmluYXJ5ID0gTlVMTDsKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CisgICAgbVJlZkNv
dW50ID0gMDsKK30KIAotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9CitQcm9ncmFtOjp+UHJvZ3JhbSgpCit7Cisg
ICAgdW5saW5rKHRydWUpOwogCi0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgaWYgKG1W
ZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIG1WZXJ0
ZXhTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUp
CisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxM
OworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9Cit9CiAKLSAgICBp
ZiAobUNvbnN0YW50VGFibGVQUykKK2Jvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAq
c2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVS
KQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOwotICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICB9CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAg
IGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNo
YWRlciopc2hhZGVyOworICAgICAgICBtVmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAg
IHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3Rh
bnRUYWJsZVZTID0gTlVMTDsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1GcmFnbWVudFNo
YWRlci0+YWRkUmVmKCk7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaW5kZXgrKykKK2Jvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAq
c2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVS
KQogICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwot
ICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9CisgICAgICAgIGlmICht
VmVydGV4U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVh
c2UoKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYg
KHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7Ci0gICAgICAg
IG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1GcmFnbWVu
dFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAg
ICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVy
c0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAo
bUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCit2b2lk
IEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBj
b25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykK
ICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7CisgICAgICAg
IH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwogICAg
IH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4
LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5iaW5kQXR0cmli
dXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOworfQorCisvLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9m
IHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5n
cywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRy
aWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCisvLyBhIGxpc3Qgb2YgdW5pZm9ybXMKK3Zv
aWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAgdW5saW5rKGZhbHNlKTsKIAotICAgIG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlID0gMDsKLSAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKyAg
ICBtSW5mb0xvZy5yZXNldCgpOwogCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKKyAg
ICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OworICAgIGlmICghbVByb2dyYW1C
aW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVy
LCBtVmVydGV4U2hhZGVyKSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygp
OwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsK
ICAgICB9Cit9CiAKLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0
aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKK2ludCBBdHRyaWJ1dGVCaW5kaW5nczo6
Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKK3sKKyAg
ICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBs
b2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9u
XS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQogCi0g
ICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworICAgIHJldHVybiAtMTsKK30KIAotICAgIG1QaXhl
bEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigpOworLy8gUmV0dXJucyB0aGUg
cHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBv
ciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQorewor
ICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCisgICAgeworICAg
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtRnJhZ21l
bnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7
CisgICAgICAgIH0KIAotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVM
TDsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxM
OworICAgICAgICB9CisgICAgfQogCi0gICAgbUxpbmtlZCA9IGZhbHNlOworICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUHJvZ3JhbUJpbmFyeTsKKyAgICAg
ICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtOjppc0xp
bmtlZCgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkKIHsKLSAg
ICByZXR1cm4gbUxpbmtlZDsKKyAgICByZXR1cm4gbVByb2dyYW1CaW5hcnk7CiB9CiAKLWJvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJp
bmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAgIHJldHVybiBtVmFsaWRh
dGVkOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmlu
YXJ5OwogfQogCiB2b2lkIFByb2dyYW06OnJlbGVhc2UoKQpAQCAtMjQ0MCwzNSArMzM2LDEyIEBA
IHVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCiAKIGludCBQcm9ncmFtOjpnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxl
bihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3RoKCk7
CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYg
KG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbmZv
TG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmdldExvZyhi
dWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogfQogCiB2b2lkIFByb2dyYW06OmdldEF0dGFjaGVk
U2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJz
KQpAQCAtMjUwMywxNTIgKzM3Niw5NiBAQCB2b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZQogCiB2b2lk
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5h
bWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKLSAgICB1bnNpZ25l
ZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOwot
ICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBh
dHRyaWJ1dGUrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlQXR0cmli
dXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUp
OwogICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAgICAgewotICAgICAg
ICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5j
X3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKLSAgICAg
ICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCisgICAgICAgIGlmIChidWZzaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAgICAgfQotICAg
IH0KIAotICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNl
Ci0KLSAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOworICAgICAg
ICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKKyAgICB9CiB9CiAKIEdMaW50
IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQgPSAw
OwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
Lm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAg
fQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRl
TWF4TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0
dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAg
aWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0
ZU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCiB2b2lkIFByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAgIC8vIFNr
aXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3Jt
ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0gPSAwOyB1
bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFy
ZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKLSAgICAgICAg
ewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3RpdmVVbmlmb3Jt
Kys7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybShpbmRl
eCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBBU1NF
UlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxl
ciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCisg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3Vu
aWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXko
KSkKKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmcgKz0gIlswXSI7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAgICBu
YW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KICAgICAgICAgaWYgKGxlbmd0aCkKICAgICAgICAg
ewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgICpsZW5n
dGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9y
bV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwor
ICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICB9CiB9CiAK
IEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAgaW50IGNvdW50
ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
bnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAg
ICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAs
IDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgr
KykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgp
ICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXko
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50
aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3Rk
OjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3Ro
OwogfQogCiB2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCkBAIC0yNjYzLDE2MSArNDgw
LDI4IEBAIGJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAogCiB2b2lk
IFByb2dyYW06OnZhbGlkYXRlKCkKIHsKLSAgICByZXNldEluZm9Mb2coKTsKKyAgICBtSW5mb0xv
Zy5yZXNldCgpOwogCi0gICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVu
IHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgbVByb2dyYW1CaW5hcnktPnZhbGlkYXRlKG1JbmZvTG9nKTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxp
ZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZhbGlk
YXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUg
c2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0
byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1
cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAv
LyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVS
QVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAg
ICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kp
Ci0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0
dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
VG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0g
VEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2Ft
cGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNh
bXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1h
Z2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2Ft
cGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1
bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9y
bSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVu
aXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9
IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlw
ZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1w
bGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IG1JbmZvTG9nLmFwcGVuZCgiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtl
ZC4iKTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQcm9ncmFtOjppbml0
aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJl
Z2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK2Jvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIEQzRFhIQU5ETEUgaGFuZGxlID0g
Y29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+X25hbWUu
Y19zdHIoKSk7Ci0gICAgaWYgKGhhbmRsZSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAg
ewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNv
bnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24u
UmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlclNldDsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5pc1ZhbGlk
YXRlZCgpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICByaS0+cmVnaXN0ZXJDb3Vu
dCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLUdMaW50IFByb2dyYW06
OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhS
YW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFt
OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0
aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4
RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVz
TG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247
Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtLmgKaW5kZXggNjE4MzBjNi4uMjQ0NzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcgQEAKICNkZWZpbmUgTElC
R0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNkY29t
cGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUg
PHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTI1LDQyICsyMywzNiBA
QCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZl
cnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwg
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKLQotICAg
IH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQotICAgIGNvbnN0IEdMZW51bSB0
eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCi0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQotICAgIGNv
bnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGdf
ZmFrZXBhdGg7CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Citj
bGFzcyBBdHRyaWJ1dGVCaW5kaW5ncworeworICBwdWJsaWM6CisgICAgQXR0cmlidXRlQmluZGlu
Z3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotICAgIHN0cnVjdCBSZWdpc3Rlcklu
Zm8KLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNldDsKLSAgICAgICAgaW50IHJlZ2lzdGVy
SW5kZXg7Ci0gICAgICAgIGludCByZWdpc3RlckNvdW50OwotICAgIH07CisgICAgdm9pZCBiaW5k
QXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICBp
bnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3Q7CiAK
LSAgICBSZWdpc3RlckluZm8gcHM7Ci0gICAgUmVnaXN0ZXJJbmZvIHZzOworICBwcml2YXRlOgor
ICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FU
VFJJQlNdOwogfTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2Vs
ZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRp
b24KK2NsYXNzIEluZm9Mb2cKIHsKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAg
cHVibGljOgorICAgIEluZm9Mb2coKTsKKyAgICB+SW5mb0xvZygpOwogCi0gICAgc3RkOjpzdHJp
bmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQgaW5k
ZXg7CisgICAgaW50IGdldExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0TG9nKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKworICAgIHZvaWQgYXBw
ZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldCgpOworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmZvTG9nKTsKKyAgICBjaGFyICptSW5mb0xvZzsKIH07
CiAKIGNsYXNzIFByb2dyYW0KQEAgLTc0LDQ1ICs2NiwxMiBAQCBjbGFzcyBQcm9ncmFtCiAgICAg
Ym9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwogICAgIGludCBnZXRBdHRhY2hlZFNo
YWRlcnNDb3VudCgpIGNvbnN0OwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhl
bFNoYWRlcigpOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigp
OwotCiAgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBj
aGFyICpuYW1lKTsKLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAq
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
ICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOwogCiAgICAgdm9pZCBsaW5rKCk7Ci0gICAgYm9vbCBp
c0xpbmtlZCgpOworICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5KTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5KCk7CisKICAg
ICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CiAgICAgdm9pZCBn
ZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWlu
dCAqc2hhZGVycyk7CkBAIC0xMzIsOTAgKzkxLDI0IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29s
IGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHZhbGlkYXRlKCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKTsKICAgICBib29sIGlzVmFs
aWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAK
LSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKLSAgICBzdGF0aWMgc3RkOjpz
dHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBS
ZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnko
Y29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxl
ICoqY29uc3RhbnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2Up
OwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pOwot
ICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1dGVzKCk7Ci0g
ICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotCi0g
ICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAg
IFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBib29sIGFwcGx5VW5p
Zm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBw
bHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgdm9pZCBhcHBseVVuaWZv
cm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZF
Q1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3Rh
bnRUYWJsZSk7Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFy
ICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAu
Li4pOwotICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGlzc3VlU2VyaWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEZy
YWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVydGV4U2hhZGVyICptVmVydGV4
U2hhZGVyOwogCi0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmluZyBt
VmVydGV4SExTTDsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJ
RDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7Ci0gICAgSUQzRFhDb25zdGFudFRh
YmxlICptQ29uc3RhbnRUYWJsZVZTOworICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVC
aW5kaW5nczsKIAotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tN
QVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9W
RVJURVhfQVRUUklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklC
U107Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7Ci0g
ICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUgdGV4
dHVyZVR5cGU7Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwot
ICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7
Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsK
LSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRoUmFu
Z2VMb2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeENv
b3JkTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdM
aW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmlu
YXJ5OwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQg
dGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0gICAgY2hh
ciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAgICAgdW5zaWduZWQgaW50IG1S
ZWZDb3VudDsKIApAQCAtMjI1LDYgKzExOCw4IEBAIGNsYXNzIFByb2dyYW0KIAogICAgIFJlc291
cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKICAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsK
KworICAgIEluZm9Mb2cgbUluZm9Mb2c7CiB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI4ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApAQCAt
MCwwICsxLDI0ODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBs
ZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVj
dHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRl
IDxzdHJpbmc+CisKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworbmFtZXNwYWNlIGdsCit7CitzdGQ6OnN0cmlu
ZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNucHJpbnRmKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSkKKyAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFt
ZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJy
YXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBh
cnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICBtZW1z
ZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKK30KKworVW5pZm9ybTo6flVu
aWZvcm0oKQoreworICAgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK2Jvb2wgVW5pZm9ybTo6aXNBcnJh
eSgpCit7CisgICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDA7Cit9CisK
K1VuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCisgICAgOiBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1lbnQoZWxlbWVu
dCksIGluZGV4KGluZGV4KQoreworfQorCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KCkK
K3sKKyAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
TlVMTDsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVQ
UyA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7CisKKyAgICBtVmFsaWRhdGVk
ID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0g
LTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhd
LmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0g
MDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRp
b24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJp
bmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4
ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRh
YmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jt
cy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KK30KKworSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbFNoYWRlcigpCit7Cisg
ICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1WZXJ0ZXhF
eGVjdXRhYmxlOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QXR0cmlidXRlTG9jYXRp
b24oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmFtZSkKKyAgICB7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09
IHN0ZDo6c3RyaW5nKG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0
ZUluZGV4KQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAKKyAgICByZXR1cm4gbVNlbWFudGljSW5k
ZXhbYXR0cmlidXRlSW5kZXhdOworfQorCisvLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhp
Z2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VXNlZFNh
bXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIHJldHVybiBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgcmV0dXJuIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGly
ZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQg
MC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRTYW1w
bGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQor
eworICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBs
ZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7
CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXpl
b2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworCisgICAgICAgIGlmICht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBs
b2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIHRl
eHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKKy8vIGlu
ZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hh
ZGVyKS4KK1RleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXh0dXJlVHlwZShT
YW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1sw
XSkpOworICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwor
ICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAg
ICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBz
aXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworICAgICAgICBBU1NF
UlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICByZXR1cm4gbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworCisgICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCisgICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKKyAgICAgICAgICAg
IHRhcmdldFsyXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwor
ICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7
CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Cisg
ICAgICAgICAgICB2ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
KyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0
OworICAgICAgICAgICAgdiArPSAzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9m
KEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgordm9pZCB0
cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBp
bnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKKyAgICBpbnQg
Y29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKKworICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCisgICAgeworICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQorICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCisgICAgZm9yIChpbnQgeSA9IHNyY0hl
aWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9B
VF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7
CisgICAgICAgIHRhcmdldCArPSA4OworICAgICAgICB2YWx1ZSArPSA0OworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgz
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQor
eworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0
LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTI7CisgICAgICAg
IHZhbHVlICs9IDk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
NCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTY7CisgICAgICAgIHZhbHVlICs9
IDE2OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCks
CisgICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCisgICAgICAgICAg
ICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisg
ICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywg
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICBj
b3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZs
b2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXpl
ZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAor
ICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlm
b3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNp
emUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB7CisgICAgICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAg
eworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMTIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0
LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29t
cG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAo
VW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZs
b2F0UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBt
VW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFs
bCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICBm
b3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4o
KSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7CisgICAgICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRp
cnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBi
KTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlm
b3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAg
YXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBw
bHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEMTBCbG9iICpQ
cm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3Rh
bnRUYWJsZSkKK3sKKyAgICBpZiAoIWhsc2wpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICBEV09SRCByZXN1bHQ7CisgICAgVUlOVCBmbGFncyA9IDA7CisgICAgc3Rk
OjpzdHJpbmcgc291cmNlVGV4dDsKKyAgICBpZiAocGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAg
ICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAgZmxh
Z3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7CisjZWxzZQorICAgICAgICBm
bGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOworI2VuZGlmCisKKyAgICAgICAg
c3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7CisgICAgICAgIHNvdXJjZVRl
eHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5n
KCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOworICAgICAgICB3cml0ZUZpbGUoc291cmNl
UGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUw7CisgICAgICAgIHNvdXJjZVRleHQgPSBobHNsOworICAgIH0KKworICAg
IElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdl
ID0gTlVMTDsKKyAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZ19m
YWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwg
JmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAg
Y29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZl
clBvaW50ZXIoKTsKKworICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNzYWdlKTsK
KyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNz
YWdlKTsKKworICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JN
ZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERX
T1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAg
ICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg
ICAgcmV0dXJuIGJpbmFyeTsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZh
cnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFk
aW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEK
Ky8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBp
ZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlcikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAg
IGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5n
VmVjdG9ycygpOworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpbnQgbiA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOworICAgICAgICBp
bnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0g
NCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWlu
Z1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0g
MDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYm
ICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBi
b29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4
KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+
cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzcGFj
ZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5n
VmVjdG9yczsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+
PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1
bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVz
IiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3Rl
cnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4
VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8
IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAg
ICB7CisgICAgICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiByZWdpc3RlcnM7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKElu
Zm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0
ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVy
dGV4U2hhZGVyKQoreworICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVz
ZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciBmcmFnVmFyID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBm
cmFnVmFyICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKKyAg
ICB7CisgICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOworICAgICAgICBmcmFnVmFyLT5jb2wgPSAt
MTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSB2ZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZ0eFZhcisrKQorICAgIHsKKyAgICAgICAgdnR4VmFyLT5yZWcgPSAtMTsK
KyAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKKyAgICB9CisKKyAgICAvLyBNYXAgdGhlIHZhcnlp
bmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCisgICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhf
VkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07CisgICAgaW50IHJlZ2lzdGVycyA9IHBh
Y2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICBpZiAo
cmVnaXN0ZXJzIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCisgICAgQ29udGV4
dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQt
PnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBpZiAocmVnaXN0
ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBs
ZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7
CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFt
ZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0
cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJU
eXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdt
ZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91
dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlu
cHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0
Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHZh
cnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUu
Y19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRF
WENPT1JEIik7CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQyeDIgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICB2ZXJ0ZXhITFNMICs9
IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDogVEVYQ09PUkQiICsgc3Ry
KHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisKKyAgICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgfQorCisgICAgdmVydGV4SExTTCAr
PSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgInN0
cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOworCisgICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAgIGludCByZWdp
c3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNr
aW5nW3JdWzFdID8gMiA6IDEpKTsKKworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQi
ICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2Vt
YW50aWMgKyBzdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAi
O1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBz
bTMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
IDogUFNJWkU7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19J
TlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgICIgKyBkZWNv
cmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7CisKKyAgICAgICAgaWYgKFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4CisgICAgICAg
IHsKKyAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAgICAgIH0KKwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJp
YnV0ZS0+bmFtZSkgKyAiKTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAt
IGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24ueSArIGR4X0hhbGZQ
aXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICog
MC41O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBn
bF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXpl
ICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9p
bnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BP
SU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAgIH0KKworICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2
YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3Vu
dCh2YXJ5aW5nLT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
cm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHIg
PSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAgICAgICAgICAgIHZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlw
bGUgdmFyeWluZ3MKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBh
Y2tpbmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIi4i
OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4SExT
TCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
ID0gIiArIHZhcnlpbmctPm5hbWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiO1xuIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICBwaXhlbEhMU0wgKz0gInN0cnVj
dCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lz
dGVycykgKyAiO1xuIjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQw
O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
CisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xu
IjsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgorICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDog
Q09MT1I7XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dClcbiIK
KyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9
IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKyAgICAgICAgCisgICAgICAgIGlmIChz
bTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29y
ZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGR4X0Nvb3JkIGNv
bnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRl
ci55LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQorICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcp
ICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhf
Q29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAq
IHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOwor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5n
bF9Qb2ludENvb3JkLnk7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250
RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2Ug
Pj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7CisgICAgfQorCisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKKyAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1
dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1
dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKCFmcmFnbWVudFNo
YWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hh
ZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RkOjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsK
KyAgICBzdGQ6OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisK
KyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhlbEhMU0wsIHZlcnRleEhMU0wsIGZy
YWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29u
c3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkg
PyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNv
bnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOworCisg
ICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHZl
cnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAg
IElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHBpeGVs
SExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlm
ICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBIUkVTVUxUIHZl
cnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOworICAgICAgICBI
UkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilw
aXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAg
ICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0
ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NFRURF
RChwaXhlbFJlc3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOworICAg
ICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBOVUxM
OworICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKG1WZXJ0ZXhFeGVj
dXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bGlua0F0dHJpYnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmluZGluZ3MsIGZyYWdtZW50U2hhZGVy
LCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5m
b0xvZywgR0xfRlJBR01FTlRfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVBTKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIG1Db25z
dGFudFRhYmxlVlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNl
YXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KKyAgICAgICAg
ICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9u
YWwgZGVjb3JhdGlvbgorICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7CisgICAgICAgICAgICBtRHhEZXB0aExvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOworICAgICAgICAgICAgbUR4Q29v
cmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKKyAgICAgICAgICAg
IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBp
eGVsU2l6ZSIpOworICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKKyAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOworCisgICAgICAg
ICAgICBjb250ZXh0LT5tYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CisKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBE
ZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQgRGlyZWN0M0Qg
OSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua0F0
dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKQoreworICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsK
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisg
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBh
dHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisK
KyAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2Nh
dGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRp
b25dLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0
aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFu
IGVycm9yCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9j
YXRpb25dID0gKmF0dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRp
b24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0
b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0
IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0
b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1
dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAg
eworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVC
aW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAg
IC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAg
ICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2Nh
dGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFp
bGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRv
byBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhd
ID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7
CisgICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBz
dGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
LnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBp
bmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFk
ZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RB
TlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKworICAgIGNvbnN0YW50VGFi
bGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVE
ZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQz
RFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBj
b25zdGFudEluZGV4KTsKKworICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2Ny
aXB0aW9uOworICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRs
ZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5m
b0xvZywgc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50
IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBS
ZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCiti
b29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVt
IHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2Ny
aXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNEWEhB
TkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVM
TCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgdnND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBE
M0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQg
PSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjpt
YXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBl
eGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodnNDb25z
dGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsg
aTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8g
VEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAg
ICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEs
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBE
M0RYUENfU1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBh
cnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7
IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1i
ZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNE
WEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0
YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RF
U0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlv
bkNvdW50ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRp
b24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJ
bmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFy
cmF5SW5kZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBu
YW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQ
Q19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19N
QVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJu
IGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVu
aWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1l
KTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0g
dW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01F
TlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYg
KHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERl
c2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9i
YWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMu
c2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+
YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhV
bmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAg
IC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExF
UjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMy
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlw
dGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRy
aWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRf
TUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBt
ZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQor
eworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmlu
YXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAg
c3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0
dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBv
cyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7Cisg
ICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3Zl
IHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgewor
ICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1
YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNE
OV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0
NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/
IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9
IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVu
aWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0
YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJv
b2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAg
ICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0Nv
dW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9P
TF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxT
RTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJ
bmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwg
dmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAg
IAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5i
b29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwor
ICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAs
IDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdl
dFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlm
IChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRl
eCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4
ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0g
dGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAg
ICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOwor
ICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChj
b3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3Rv
cltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0
KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisg
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhW
RUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZF
Q1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAg
ICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBj
b3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5h
cnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZs
b2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAg
YXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0
b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZs
b2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4
ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0
VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Cit9CisKK3Zv
aWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcworICAg
IHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGludCBhdHRy
aWJ1dGU7CisgICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVB
dHRyaWJ1dGUrKzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAg
ICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5j
X3N0cigpOworCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAg
ICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5j
ZQorCisgICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKwor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGlu
dCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJp
YnV0ZU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1h
eExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
Lm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5p
Zm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVy
IGludGVybmFsIHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwor
ICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0g
PCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZVVu
aWZvcm0gPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKKworICAg
ICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFt
ZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9
ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxl
bmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVu
aWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+dHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNv
dW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAg
eworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAz
LCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisK
KyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZv
cm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZv
cm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5j
b21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVu
Z3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsK
KyAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4g
IlswXSIuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChs
ZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVu
Z3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cp
Cit7CisgICAgYXBwbHlVbmlmb3JtcygpOworICAgIGlmICghdmFsaWRhdGVTYW1wbGVycygmaW5m
b0xvZykpCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpCit7CisgICAg
Ly8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJl
bnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQorICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5p
dCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0g
d2lsbCBmYWlsLCBhbmQKKyAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBp
c3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKKyAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5p
dFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNf
VlRGOyArK2kpCisgICAgeworICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VO
S05PV047CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBp
eGVsU2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0u
YWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1w
bGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVk
cyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVy
ZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRU
eXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
Zm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1
cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQo
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNv
bmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQp
LiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5
OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRo
UmFuZ2VMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUR4Q29vcmRMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOWM1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApAQCAt
MCwwICsxLDIxMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZpbmVz
IHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8v
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIu
MTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+Cisj
aW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7Citj
bGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2lu
Z2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xlbnVt
IHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7
CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7CisKKyAgICBjb25zdCBH
TGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQg
bmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUK
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAgdW5zaWduZWQgY2hhciAq
ZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lzdGVySW5mbworICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQ0SW5k
ZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOworICAgICAgICAgICAgYm9v
bEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlv
bi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNf
Qk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0OiAgZmxvYXQ0SW5kZXgg
PSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlv
bi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQpY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZmxv
YXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAgICAgIGludCBib29sSW5k
ZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsKKworICAgIFJlZ2lzdGVy
SW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBmb3Ig
Y29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxl
cworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsK
KyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2Yg
bGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0
byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQoreworICBwdWJsaWM6CisgICAg
UHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisKKyAgICBJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24o
Y29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0
ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUs
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVUeXBlIGdldFNhbXBsZXJU
ZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsK
KyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOworCisgICAg
R0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdl
dFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OworICAgIEdM
aW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4Q29vcmRMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQg
Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlBbGxV
bmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisgICAgYm9vbCBsaW5rKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2ZUF0dHJp
YnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2
ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIHZhbGlkYXRlKEluZm9Mb2cg
JmluZm9Mb2cpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKTsK
KyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcg
ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5k
IGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0o
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3Jl
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFy
eSk7CisKKyAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxl
ICoqY29uc3RhbnRUYWJsZSk7CisKKyAgICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0
cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29s
IGxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdz
ICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFi
bGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAiIik7CisgICAg
Ym9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgVW5p
Zm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3Jt
bmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wg
YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5p
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9S
NCAqdmVjdG9yKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5
ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhF
eGVjdXRhYmxlOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBkdXJpbmcgbGlua2luZy4K
KyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7CisgICAgSUQzRFhDb25z
dGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRy
aWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAgeworICAgICAgICBib29s
IGFjdGl2ZTsKKyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBUZXh0
dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICB9OworCisgICAgU2FtcGxlciBtU2FtcGxlcnNQU1tN
QVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKyAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2U7CisgICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7CisgICAgVW5pZm9ybUFycmF5
IG1Vbmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5p
Zm9ybUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworCisgICAgR0xpbnQg
bUR4RGVwdGhSYW5nZUxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247CisgICAg
R0xpbnQgbUR4Q29vcmRMb2NhdGlvbjsKKyAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRp
b247CisgICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhQb2ludHNP
ckxpbmVzTG9jYXRpb247CisKKyAgICBib29sIG1WYWxpZGF0ZWQ7Cit9OworfQorCisjZW5kaWYg
ICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAppbmRleCA2MDA0MjU1
Li40YjkxMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCkBAIC02Myw2OCArNjMsMTQ0IEBAIEdMdWludCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKICAgICByZXR1cm4gZHgy
ZXM6OkdldFN0ZW5jaWxTaXplKGdldEQzREZvcm1hdCgpKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4
dHVyZTo6UmVuZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0
KSA6IG1UYXJnZXQodGFyZ2V0KQorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTJEIEltcGxlbWVu
dGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4
dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdl
dCkKK3sKKyAgICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCkKK3sKKyAgICBtVGV4dHVyZTJELnNldChO
VUxMKTsKK30KKworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJl
bmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMg
cHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRS
ZW5kZXJUYXJnZXQobVRhcmdldCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkK
K3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJnZXQpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUuc2V0KHRleHR1
cmUpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQoMCk7CiB9CiAKLVJlbmRlcmJ1
ZmZlclRleHR1cmU6On5SZW5kZXJidWZmZXJUZXh0dXJlKCkKK0dMZW51bSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQo
TlVMTCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KDApOworfQor
CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREM0RGb3JtYXQoMCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
MDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1U
YXJnZXQpOworfQorCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRh
dGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDog
bVRhcmdldCh0YXJnZXQpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKK30K
KworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCgpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKIH0KIAogLy8gVGV4dHVyZXMg
bmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2Vz
IHZpYQogLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5
IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjph
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsK
LSAgICBtVGV4dHVyZS0+YWRkUHJveHlSZWYocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1hcC0+
YWRkUHJveHlSZWYocHJveHkpOwogfQogCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OnJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0g
ICAgbVRleHR1cmUtPnJlbGVhc2VQcm94eShwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5y
ZWxlYXNlUHJveHkocHJveHkpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
VGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKIH0K
IAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldERlcHRoU3RlbmNp
bCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVM
TDsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRXaWR0aCgpIGNvbnN0CitH
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAot
R0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAorCitHTHNpemVp
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIHJl
dHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldEhlaWdodChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAotR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKKworR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRE
M0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpn
ZXREM0RGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0RDNERm9ybWF0
KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RDNERm9ybWF0KEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9CiAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6Z2V0U2FtcGxlcygpIGNvbnN0CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFNlcmlhbCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwogfQogCisvLy8v
Ly8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCiBSZW5kZXJidWZmZXI6OlJl
bmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDog
UmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAgQVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwpAQCAt
MTUyLDExICsyMjgsMTUgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnJlbGVhc2UoKSBjb25zdAogICAg
IFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsK
ICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0
aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwpA
QCAtMjQzLDExICszMjMsMTUgQEAgUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0
b3JhZ2UoKQogewogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVy
biBOVUxMOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBO
VUxMOwpAQCAtMzU2LDYgKzQ0MCw4IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogICAg
IH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqQ29s
b3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBA
IC00MjgsOCArNTE0LDE1IEBAIERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZl
cigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CisgICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAg
ICB9CisKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKaW5kZXggNjBlYzA1
OC4uZTZkNWRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCkBAIC0yMSw3ICsyMSw4IEBACiAKIG5hbWVzcGFjZSBnbAog
ewotY2xhc3MgVGV4dHVyZTsKK2NsYXNzIFRleHR1cmUyRDsKK2NsYXNzIFRleHR1cmVDdWJlTWFw
OwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aFN0
ZW5jaWxidWZmZXI7CkBAIC01OCwxMiArNTksMTIgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJm
YWNlCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlckludGVyZmFjZSk7
CiB9OwogCi1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZQorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJl
ICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKIAotICAgIHZpcnR1YWwgflJlbmRlcmJ1
ZmZlclRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKTsKIAog
ICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CiAgICAgdm9p
ZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CkBAIC04MCw5ICs4MSwz
NyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVy
ZmFjZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUp
OworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkQpOwog
Ci0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmU+IG1UZXh0dXJlOworICAgIEJpbmRpbmdQb2lu
dGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9OworCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRl
cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgp
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKICAgICBHTGVudW0gbVRhcmdldDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAppbmRleCBhYzU4YWJlLi41N2ZkM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCkBAIC0xMDIsMTQgKzEwMiwxNCBAQCB2b2lk
IFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKG1JbmZvTG9nKQor
ICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVm
U2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgIG1lbWNweShpbmZvTG9n
LCBtSW5mb0xvZywgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKG1JbmZvTG9nKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihtSW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRl
eCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAgICAgICAgaW5mb0xv
Z1tpbmRleF0gPSAnXDAnOwogICAgIH0KIApAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgdm9pZCBTaGFk
ZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhcgogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAoc291cmNlKQor
ICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVm
U2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBz
b3VyY2UsIGluZGV4KTsKLSAgICB9CisgICAgICAgIGlmIChzb3VyY2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJj
ZSkpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7CisgICAgICAg
IH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdc
MCc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaAppbmRleCA5YzdjMGRmLi40MzA4M2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdHlwZWRlZiBz
dGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7CiAKIGNsYXNzIFNoYWRlcgogewotICAgIGZy
aWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1Ymxp
YzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsK
QEAgLTEyOCw3ICsxMjgsNyBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmli
dXRlQXJyYXk7CiAKIGNsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBm
cmllbmQgUHJvZ3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBwdWJs
aWM6CiAgICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhh
bmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmNwcAppbmRleCAyOTE3N2QyLi41Y2NmOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTEsMzA5MCArMSwyOTA5IEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6
OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKLS8vIFRleHR1cmUyRCBhbmQg
VGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVk
Ci0vLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2
My4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDxkM2R4OXRl
eC5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGludHJpbi5oPgotCi0jaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0JsaXQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLQotbmFtZXNwYWNl
IGdsCi17Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlh
bCA9IDE7Ci0KLXN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQzOwotICAgIH0KLSAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMy
RjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgaWYgKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250
ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
Zm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQotc3RhdGljIGJvb2wgSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICBjYXNlIEQzREZNVF9B
OEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUltYWdlOjpJbWFnZSgpCi17
Ci0gICAgbVdpZHRoID0gMDsgCi0gICAgbUhlaWdodCA9IDA7Ci0gICAgbUZvcm1hdCA9IEdMX05P
TkU7Ci0gICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotCi0gICAgbVN1cmZhY2UgPSBOVUxM
OwotCi0gICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVN
TUVNOwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLX0KLQotSW1hZ2U6On5JbWFn
ZSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVh
c2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVh
c2UpCi17Ci0gICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhl
aWdodCB8fAotICAgICAgICBtRm9ybWF0ICE9IGZvcm1hdCB8fAotICAgICAgICBtVHlwZSAhPSB0
eXBlIHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1XaWR0aCA9IHdp
ZHRoOwotICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0
OwotICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3Jt
YXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9IENvbnZlcnRUZXh0dXJl
Rm9ybWF0VHlwZShtRm9ybWF0LCBtVHlwZSk7Ci0KLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1
cmZhY2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKLXsK
LSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNE
UE9PTF9TWVNURU1NRU07Ci0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVx
dWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVp
Z2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9
IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaXNN
dWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwotICAgICAg
ICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
cXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8PSAxOwot
ICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAocmVx
dWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBs
ZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2Uo
KS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRj
aCArIDEsIE5VTEwsIGdldEQzREZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVk
LiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwg
Jm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwotICAgIG1EM0RQ
b29sID0gcG9vbFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOjpsb2NrKEQzRExPQ0tFRF9SRUNU
ICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotCi0gICAgaWYgKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tl
ZFJlY3QsIHJlY3QsIDApOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBJbWFnZTo6dW5sb2NrKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOjppc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gSXNUZXh0dXJlRm9ybWF0UmVuZGVy
YWJsZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFnZTo6Z2V0RDNERm9ybWF0
KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2Ug
aGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcg
YnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsK
LQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqSW1hZ2U6
OmdldFN1cmZhY2UoKQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIHJldHVybiBtU3Vy
ZmFjZTsKLX0KLQotdm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgRDNEWExv
YWRTdXJmYWNlRnJvbVN1cmZhY2Uoc3VyZmFjZSwgTlVMTCwgTlVMTCwgbVN1cmZhY2UsIE5VTEws
IE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVz
YygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotCi0g
ICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1EM0RQb29sID0gZGVzYy5Qb29sOwotfQotCi12
b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNl
KCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLQotICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9N
QU5BR0VEKQotICAgICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhMb2Fk
U3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVjdCwgc291cmNlU3VyZmFj
ZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBk
ZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyAKLSAgICAgICAgICAgIFBPSU5UIHBvaW50ID0ge3Jl
Y3QubGVmdCwgcmVjdC50b3B9OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZp
Y2UoKS0+VXBkYXRlU3VyZmFjZShzb3VyY2VTdXJmYWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZw
b2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi0vLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkg
eG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0
L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0
cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCi12b2lkIElt
YWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSAtQ29tcHV0
ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwotICAgIGlucHV0
ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwotCi0gICAgc3dp
dGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
c3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAg
ICAgICAgICAgIGxvYWRBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAg
ICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9y
bWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAg
IGlmIChzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBsb2FkQkdSQURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBm
bG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3Jl
IHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
ICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWlu
YW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxv
YXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxM
OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RC
eXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0K
LSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5
KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBO
VUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVN
TU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlv
biBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhl
bCA9IG5hdGl2ZT8gMjogNDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNv
dXJjZSwgd2lkdGggKiAyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
c291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngr
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJj
ZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhG
RjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2Jh
ICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAm
IDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxv
YXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhv
ZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogOCk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDog
MTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIF9f
bTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZmMDBmZik7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKLSAgICAg
ICAgaW50IHggPSAwOwotCi0gICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCi0g
ICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0p
ICYgMTUpICE9IDApICYmIHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbeF0gPSAoX3Jv
dGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyAzIDwgd2lkdGg7IHggKz0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1X3NpMTI4KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8vIE1h
c2sgb3V0IGcgYW5kIGEsIHdoaWNoIGRvbid0IGNoYW5nZQotICAgICAgICAgICAgX19tMTI4aSBn
YUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJyTWFzaywgc291cmNlRGF0YSk7Ci0gICAg
ICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyQ29tcG9u
ZW50cyA9IF9tbV9hbmRfc2kxMjgoc291cmNlRGF0YSwgYnJNYXNrKTsKLSAgICAgICAgICAgIC8v
IFN3YXAgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBiclN3YXBwZWQgPSBfbW1fc2h1ZmZs
ZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25lbnRzLCBfTU1fU0hVRkZMRSgy
LCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsKLSAgICAgICAgICAgIF9fbTEy
OGkgcmVzdWx0ID0gX21tX29yX3NpMTI4KGdhQ29tcG9uZW50cywgYnJTd2FwcGVkKTsKLSAgICAg
ICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4
XSksIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQZXJmb3JtIGxlZnRvdmVyIHdy
aXRlcwotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9
IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBj
b25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA0KTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChy
Z2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYg
MHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4
MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4g
MTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0
KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNl
dCAqIDE2KTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4Owot
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsK
LSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCo0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdCB7Ci0gICAg
c3dpdGNoIChnZXREM0RGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgICAgbG9hZERYVDFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgICBsb2FkRFhUM0RhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEQzREZNVF9EWFQ1
OgotICAgICAgICAgIGxvYWREWFQ1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1bGwoY29uc3Qg
dW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDEg
YmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC0xXSBjb2xvcjAuCi0gIC8vIFsyLTNdIGNvbG9yMS4K
LSAgLy8gWzQtN10gY29sb3IgYml0bWFwLCAyIGJpdHMgcGVyIHBpeGVsLgotICAvLyBTbyBlYWNo
IG9mIHRoZSA0LTcgYnl0ZXMgcmVwcmVzZW50cyBvbmUgbGluZSwgZmxpcHBpbmcgYSBibG9jayBp
cyBqdXN0Ci0gIC8vIGZsaXBwaW5nIHRob3NlIGJ5dGVzLgotCi0gIC8vIEZpcnN0IDMyLWJpdHMg
aXMgdHdvIFJHQjU2NSBjb2xvcnMgc2hhcmVkIGJ5IHRpbGUgYW5kIGRvZXMgbm90IG5lZWQgdG8g
YmUgbW9kaWZpZWQuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0KLSAgLy8gU2Vjb25kIDMyLWJp
dHMgY29udGFpbnMgNCByb3dzIG9mIDQgMi1iaXQgaW50ZXJwb2xhbnRzIGJldHdlZW4gdGhlIGNv
bG9ycy4gQWxsIHJvd3Mgc2hvdWxkIGJlIGZsaXBwZWQuCi0gIGRlc3RbMV0gPSAoc291cmNlWzFd
ID4+IDI0KSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA8PCA4KSAmIDB4MDBGRjAwMDApIHwK
LSAgICAgICAgICAgICgoc291cmNlWzFdID4+IDgpICYgMHgwMDAwRkYwMCkgfAotICAgICAgICAg
ICAgKHNvdXJjZVsxXSA8PCAyNCk7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9m
IGEgRFhUMSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURY
VDFCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVz
dCkgewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0gc291cmNlWzBdOwotICBk
ZXN0WzFdID0gKChzb3VyY2VbMV0gPDwgOCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAgICAo
KHNvdXJjZVsxXSA+PiA4KSAmIDB4MDAwMDAwRkYpOwotfQotCi0vLyBGbGlwcyBhIGZ1bGwgRFhU
MyBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDNCbG9j
a0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewot
ICAvLyBBIERYVDMgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC03XSAgYWxwaGEgYml0bWFwLCA0
IGJpdHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIEZpcnN0
IGFuZCBTZWNvbmQgMzIgYml0cyBhcmUgNGJpdCBwZXIgcGl4ZWwgYWxwaGEgYW5kIG5lZWQgdG8g
YmUgZmxpcHBlZC4KLSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8
PCAxNik7Ci0gIGRlc3RbMV0gPSAoc291cmNlWzBdID4+IDE2KSB8IChzb3VyY2VbMF0gPDwgMTYp
OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92ZSBmdW5jdGlv
bi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQot
Ly8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQzIGJsb2NrIGluIHRoZSB5IGRpcmVj
dGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUu
Ci0gIGRlc3RbMF0gPSAoc291cmNlWzFdID4+IDE2KSB8IChzb3VyY2VbMV0gPDwgMTYpOwotICBG
bGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlw
cyBhIGZ1bGwgRFhUNSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlw
Q29weURYVDVCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewotICAvLyBBIERYVDUgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMF0gICAgYWxw
aGEwLgotICAvLyBbMV0gICAgYWxwaGExLgotICAvLyBbMi03XSAgYWxwaGEgYml0bWFwLCAzIGJp
dHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIFRoZSBhbHBo
YSBiaXRtYXAgZG9lc24ndCBlYXNpbHkgbWFwIGxpbmVzIHRvIGJ5dGVzLCBzbyB3ZSBoYXZlIHRv
Ci0gIC8vIGludGVycHJldCBpdCBjb3JyZWN0bHkuICBFeHRyYWN0ZWQgZnJvbQotICAvLyBodHRw
Oi8vd3d3Lm9wZW5nbC5vcmcvcmVnaXN0cnkvc3BlY3MvRVhUL3RleHR1cmVfY29tcHJlc3Npb25f
czN0Yy50eHQgOgotICAvLwotICAvLyAgIFRoZSA2ICJiaXRzIiBieXRlcyBvZiB0aGUgYmxvY2sg
YXJlIGRlY29kZWQgaW50byBvbmUgNDgtYml0IGludGVnZXI6Ci0gIC8vCi0gIC8vICAgICBiaXRz
ID0gYml0c18wICsgMjU2ICogKGJpdHNfMSArIDI1NiAqIChiaXRzXzIgKyAyNTYgKiAoYml0c18z
ICsKLSAgLy8gICAgICAgICAgICAgICAgICAgMjU2ICogKGJpdHNfNCArIDI1NiAqIGJpdHNfNSkp
KSkKLSAgLy8KLSAgLy8gICBiaXRzIGlzIGEgNDgtYml0IHVuc2lnbmVkIGludGVnZXIsIGZyb20g
d2hpY2ggYSB0aHJlZS1iaXQgY29udHJvbCBjb2RlCi0gIC8vICAgaXMgZXh0cmFjdGVkIGZvciBh
IHRleGVsIGF0IGxvY2F0aW9uICh4LHkpIGluIHRoZSBibG9jayB1c2luZzoKLSAgLy8KLSAgLy8g
ICAgICAgY29kZSh4LHkpID0gYml0c1szKig0KnkreCkrMS4uMyooNCp5K3gpKzBdCi0gIC8vCi0g
IC8vICAgd2hlcmUgYml0IDQ3IGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGFuZCBiaXQgMCBpcyB0
aGUgbGVhc3QKLSAgLy8gICBzaWduaWZpY2FudCBiaXQuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPihzb3VyY2UpKTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0g
IHVuc2lnbmVkIGludCBsaW5lXzBfMSA9IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5
dGVzWzNdICsgMjU2ICogc291cmNlQnl0ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8yXzMg
PSBzb3VyY2VCeXRlc1s1XSArIDI1NiAqIChzb3VyY2VCeXRlc1s2XSArIDI1NiAqIHNvdXJjZUJ5
dGVzWzddKTsKLSAgLy8gc3dhcCBsaW5lcyAwIGFuZCAxIGluIGxpbmVfMF8xLgotICB1bnNpZ25l
ZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAwMCkgPj4gMTIpOwotICAvLyBz
d2FwIGxpbmVzIDIgYW5kIDMgaW4gbGluZV8yXzMuCi0gIHVuc2lnbmVkIGludCBsaW5lXzNfMiA9
ICgobGluZV8yXzMgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChsaW5lXzJfMyAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RCeXRlc1swXSA9IHNvdXJj
ZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sxXTsKLSAgZGVzdEJ5dGVz
WzJdID0gbGluZV8zXzIgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAobGluZV8zXzIgJiAweGZm
MDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzNfMiAmIDB4ZmYwMDAwKSA+PiAxNjsK
LSAgZGVzdEJ5dGVzWzVdID0gbGluZV8xXzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbNl0gPSAobGlu
ZV8xXzAgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s3XSA9IChsaW5lXzFfMCAmIDB4ZmYw
MDAwKSA+PiAxNjsKLQotICAvLyBBbmQgZmxpcCB0aGUgRFhUMSBibG9jayB1c2luZyB0aGUgYWJv
dmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyAyLCBkZXN0ICsg
Mik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEgRFhUNSBibG9jayBpbiB0
aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDVCbG9ja0hhbGYoY29uc3Qg
dW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUgbGF5
b3V0IGFib3ZlLgotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNl
KSk7Ci0gIHVuc2lnbmVkIGNoYXIqIGRlc3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihzdGF0aWNfY2FzdDx2b2lkKj4oZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEg
PSBzb3VyY2VCeXRlc1syXSArIDI1NiAqIChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5
dGVzWzRdKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5lXzBfMSAmIDB4MDAwZmZm
KSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVfMF8xICYgMHhmZmYw
MDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNlQnl0ZXNbMF07Ci0gIGRlc3RCeXRl
c1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNbMl0gPSBsaW5lXzFfMCAmIDB4ZmY7
Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVz
WzRdID0gKGxpbmVfMV8wICYgMHhmZjAwMDApID4+IDE2OwotICBGbGlwQ29weURYVDFCbG9ja0hh
bGYoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUMURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwot
ICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwot
ICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2gg
JSA4ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBS
b3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NB
Y3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jv
c3MgKiAyOwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAx
XSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3Nz
OyB4ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQxQmxv
Y2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQg
PT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDAp
OwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0ID09
IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRjaCAl
IDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNl
IGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAv
IDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dpdGNo
IChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAgICAgICAgICAg
ICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBG
bGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwotCi0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQzQmxvY2tGdWxsKHNvdXJjZSArIHgs
IGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zm
c2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJU
KHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJU
KGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAw
KTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0gICAgLy8gUm91bmQgd2lk
dGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQgYmxvY2tzQWNyb3NzID0g
KHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxvY2tzQWNyb3NzICogNDsK
LQotICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3Vy
Y2VbeCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gc291cmNlW3ggKyAyXTsK
LSAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsgM107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tG
dWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBn
bENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUg
Zm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkKLXsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2Ny
aXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAgIAot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uo
ZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0
LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1h
dGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4
cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBS
RUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwg
ZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhl
bFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBSRUNUIGRlc3RSZWN0ID0g
e3hvZmZzZXQsIGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRlc3RZT2Zmc2V0ICsgaGVp
Z2h0fTsKLQotICAgIGlmIChpc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIHJl
c3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRl
c3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBOVUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJf
Qk9YLCAwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJDb3B5aW5nIHN1cmZhY2VzIHVuZXhwZWN0ZWRseSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsKLSAg
ICAgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZz
b3VyY2VSZWN0LCAwKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJjZSBzdXJmYWNlIChyZWN0
YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsKLSAg
ICAgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFp
bGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBp
bnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsK
LSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
ZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopc291cmNlTG9jay5wQml0
czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVz
dExvY2sucEJpdHM7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRpb24uRm9ybWF0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdl
dEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
cihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9
IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAg
ICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSBzb3VyY2VbeCAqIDQgKyAzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
ICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRl
c3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICBzd2l0
Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3Vy
Y2VbeCAqIDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
XSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
ZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAo
cmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9
IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlVubG9ja1JlY3QoKTsKLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0KLSAgICBtRGlydHkgPSB0cnVlOwotfQotCi1UZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCks
Ci0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKG1SZW5kZXJUYXJn
ZXQpKSwKLSAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQotewotfQot
Ci1UZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBUZXh0dXJl
U3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBjb25zdAotewotICAg
IHJldHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0KLQotRDNEUE9PTCBUZXh0
dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RQb29sOwotfQot
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAot
ewotICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFRleHR1
cmVTZXJpYWwrKzsKLX0KLQotVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQgaWQpIDogUmVmQ291bnRP
YmplY3QoaWQpCi17Ci0gICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsK
LSAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOwotICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsKLSAg
ICBtV3JhcFQgPSBHTF9SRVBFQVQ7Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAg
bVVzYWdlID0gR0xfTk9ORTsKLSAgICAKLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotCi0gICAg
bUltbXV0YWJsZSA9IGZhbHNlOwotfQotCi1UZXh0dXJlOjp+VGV4dHVyZSgpCi17Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikK
LXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0g
ICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1pbkZpbHRlciAhPSBmaWx0ZXIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAg
ICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0
ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewot
ICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIG1EaXJ0
eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRl
ICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVtIHdy
YXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFUOgot
ICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBF
QVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOwotICAgICAgICAgICAgICAgIG1E
aXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVt
IHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFU
OgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9S
RVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOwotICAgICAgICAgICAgICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFVzYWdlKEdM
ZW51bSB1c2FnZSkKLXsKLSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
Tk9ORToKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToKLSAgICAg
ICAgbVVzYWdlID0gdXNhZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldE1p
bkZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5GaWx0ZXI7Ci19Ci0KLUdMZW51bSBU
ZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWFnRmlsdGVyOwot
fQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAotewotICAgIHJldHVybiBtV3Jh
cFM7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1XcmFwVDsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFVzYWdlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVVzYWdlOwotfQotCi12b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBp
eGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2Ut
PmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGlt
YWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlOjpz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywg
SW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+
bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQ
aXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAg
IGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGlt
YWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMp
ICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBp
bWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgp
KQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoSXNDb21wcmVzc2VkKGltYWdlLT5nZXRGb3JtYXQo
KSkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGltYWdlLT5nZXRGb3Jt
YXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB0
cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkp
LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSkKLXsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVp
Z2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247
Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRlUmVn
aW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9t
ID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7
Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gg
PSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAgaW50
IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQp
OwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zv
cm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0
aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykg
KyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQotewotICAgIGlmICghaXNTYW1wbGVy
Q29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZShmYWxzZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpOwot
fQotCi1ib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1EaXJ0eVBhcmFtZXRlcnM7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aGFzRGlydHlJbWFnZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtRGlydHlJbWFnZXM7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6
cmVzZXREaXJ0eSgpCi17Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IGZhbHNlOwotICAgIG1EaXJ0
eUltYWdlcyA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0VGV4dHVyZVNl
cmlhbCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNl
KTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7
Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVt
IHRhcmdldCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1
ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwo
dGFyZ2V0KSA6IDA7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW1tdXRhYmxlOwotfQotCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVs
cyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKLXsKLSAgICBpZiAoKGlzUG93
Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51
bWJlciBvZiBsZXZlbHMKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gT3BlbkdM
IEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3QgZG9lcyBub3QgcGVybWl0IE5QT1Qg
bWlwbWFwcy4KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1HTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUpOwotfQotCi1pbnQgVGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRM
ZXZlbENvdW50KCkgOiAwOwotfQotCi1CbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKLXsKLSAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LT5n
ZXRCbGl0dGVyKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21N
YW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgICAgIGlmIChmcm9tTWFuYWdlZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdCwgTlVMTCwgTlVM
TCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gZ2V0RGlzcGxheSgpOwotICAgICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
ZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwg
ZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJl
OSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UodHJ1ZSksIG1SZW5kZXJUYXJnZXRT
ZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKLXsKLSAgICBtVGV4dHVy
ZSA9IHN1cmZhY2VUZXh0dXJlOwotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFn
ZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Ym9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBt
UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
d2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVS
VEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjp+
VGV4dHVyZVN0b3JhZ2UyRCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQotewotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwg
JnN1cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7
Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlh
bDsKLX0KLQotVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpCi17
Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29s
b3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7Ci19Ci0KLVRleHR1cmUy
RDo6flRleHR1cmUyRCgpCi17Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAKLSAgICBp
ZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKE5V
TEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBXZSBuZWVkIHRv
IG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBh
cyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBub3QgYXR0ZW1w
dCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkgd2hpY2ggaGFz
IGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6
OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGlmIChtUHJv
eHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Qcm94eVJlZnMg
PT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1HTGVudW0gVGV4
dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFXzJEOwot
fQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50
ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKLX0KLQotRDNERk9STUFUIFRleHR1cmUyRDo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0RDNE
Rm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUpCi17Ci0gICAgcmVsZWFzZVRleEltYWdlKCk7Ci0KLSAgICBib29sIHJlZGVmaW5lZCA9IG1J
bWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGZh
bHNlKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRlZmluZWQpCi0gICAgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICAgICAgbVRleFN0
b3JhZ2UgPSBOVUxMOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4
dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIHJlbGVh
c2VUZXhJbWFnZSgpOwotCi0gICAgR0xlbnVtIGZvcm1hdDsKLQotICAgIHN3aXRjaChzdXJmYWNl
LT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAg
ICAgZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lk
dGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotCi0g
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsKLQotICAgIG1EaXJ0eUltYWdl
cyA9IHRydWU7Ci0gICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1TdXJmYWNlLT5zZXRCb3Vu
ZFRleHR1cmUodGhpcyk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlVGV4SW1hZ2UoKQot
ewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRl
eHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLQotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnJlZGVmaW5lKEdMX1JHQkEsIDAs
IDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3Nl
ZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQotdm9p
ZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVCht
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotCi0gICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RM
ZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgIGlm
IChkZXN0TGV2ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1h
Z2VBcnJheVtsZXZlbF07Ci0gICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgICAgICBkZXN0
TGV2ZWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRl
eHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7
Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotCi0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
TF9VTlNJR05FRF9CWVRFKTsKLSAgIAotICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVu
ZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHko
MCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4
U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgaWYgKHdp
ZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1w
KHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgo
KSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90
dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQotICAgICAg
ICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoMCwgaGVpZ2h0
LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBm
b3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxl
YXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpCi17Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKCFtSW1hZ2VB
cnJheVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNT
YW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29w
eSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2
ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVj
dCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENv
bG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9
IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRX
aWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50
b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldEhlaWdodCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFu
c2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0
SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVy
VGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwg
ZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBH
TGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIEdM
ZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLSAgICBEM0RGT1JN
QVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAg
Y29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZTJEKGxldmVscywgZDNkZm10LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgIG1J
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
fQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250
ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50
ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCi0gICAgewotICAgICAgICBpZiAobU1hZ0ZpbHRl
ciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRl
ciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBucG90U3VwcG9ydCA9
IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCk7Ci0KLSAgICBpZiAoIW5w
b3RTdXBwb3J0KQotICAgIHsKLSAgICAgICAgaWYgKChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8Ci0gICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBH
TF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtaXBtYXBwaW5n
KQotICAgIHsKLSAgICAgICAgaWYgKCFucG90U3VwcG9ydCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmUyRDo6aXNN
aXBtYXBDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdl
QXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBd
LmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IHEgPSBsb2cyKHN0ZDo6
bWF4KHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0g
cTsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9y
bWF0KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWln
aHQgPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlMkQ6Omlz
Q29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5h
bEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJh
c2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3Qz
RCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMKLXZvaWQgVGV4dHVy
ZTJEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQp
OwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsK
LSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
Zm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwot
Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0g
ICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsK
LSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZv
aWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykKLSAgICB7Ci0gICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0K
LSAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1h
Z2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFn
ZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRX
aWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkKLSAgICB7Ci0g
ICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgICAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgICAgICBH
TGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotCi0gICAgICAg
IG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBtVGV4U3RvcmFnZS0+Z2V0
U3VyZmFjZUxldmVsKGkpOwotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5h
Z2VkKCkpKQotICAgICAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICAgICBkZWxldGUg
bmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
IGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhT
dG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6
OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdo
IHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVs
cy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0
V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgewotICAgICAgICByZWRlZmluZUltYWdlKGks
IG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpID4+IGksIDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSk7Ci0g
ICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkgLSAxKTsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2Uo
KTsKLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFuKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0u
Z2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdl
dFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwg
TlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRV
UkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobUNvbG9yYnVmZmVyUHJv
eHkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Ci19Ci0KLUlEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIEFT
U0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVy
bHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1
cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsK
LX0KLQotVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVy
ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOwotfQotCi1U
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0
dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQotewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGlz
UmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBv
b2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1h
cCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCi17Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJl
KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1
cmZhY2UoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNl
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1
YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19
Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWwgKyBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Ci19Ci0KLVRleHR1
cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0g
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5
UmVmc1tpXSA9IDA7Ci0gICAgfQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFw
KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1G
YWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwot
ICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNv
dW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVz
IGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hp
bGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNv
dW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28g
dGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRp
b24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAg
ICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlS
ZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7
IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAg
ICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlS
ZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBj
b25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCi1HTHNpemVpIFRl
eHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biAwOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwp
IGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldEhlaWdodCgpOwot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVsw
XS5nZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RG
T1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotfQotCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQot
Ci12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMiwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhl
bHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0
SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17
Ci0gICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwg
bGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBU
ZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKLQotICAgIGlmIChsZXZl
bCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAgICAgICBBU1NFUlQoZGVzdExldmVsICE9
IE5VTEwpOwotCi0gICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAg
ICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAg
ICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1h
Z2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4
dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0
KV1bbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCks
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLS8v
IFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBs
ZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpOwotCi0gICAgYm9vbCBtaXBtYXBwaW5nOwotCi0gICAgc3dpdGNoIChtTWluRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFS
OgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQ
X05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0
KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmIChnZXRXcmFwUygpICE9IEdMX0NMQU1Q
X1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghbWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlmICghaXNDdWJlQ29tcGxl
dGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghaXNNaXBtYXBDdWJlQ29tcGxldGUo
KSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmVDdWJlTWFwOjpp
c0N1YmVDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdp
ZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXRXaWR0aCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFdpZHRoKCkgIT0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fAotICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0Rm9ybWF0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFR5
cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKTsKLQotICAgIGludCBxID0gbG9nMihzaXplKTsKLQotICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAx
OyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZv
cm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5n
ZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEs
IHNpemUgPj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBjb25zdAotewotICAg
IHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7Ci19Ci0KLUlEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6
IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2Ug
ZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIDApOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVy
ZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgcmVu
ZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewot
ICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdl
ZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVU
ZXh0dXJlKCkKLXsKLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAg
ICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0KLSAgICAgICAg
ICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+
Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICBpZiAobUltYWdlQXJy
YXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQotICAgIHsKLSAgICAgICAgR0xzaXplaSBzaXplID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3Jl
YXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VB
cnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgdHJ1ZSk7Ci0KLSAg
ICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8
IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLSAgICAgICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVz
dC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
d1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdl
KGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBU
ZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNl
SW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDEpOwotICAg
IE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7
Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9
PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOwotCi0gICAg
aWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAg
ICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRl
eCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdl
LT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdpZHRoID09IGhl
aWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5s
ZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5n
ZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNl
UmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwot
Ci0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgw
LCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmdldFdpZHRoKCkpOwotCi0g
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJl
TWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdl
dCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAg
ICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRXaWR0aCgpOwotCi0gICAgaWYgKHhv
ZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZh
Y2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVs
XS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21w
bGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNv
cHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFt
VGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxD
b3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zv
cm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3Vy
Y2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFt
cChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0
V2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBp
ZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNv
cHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQo
KSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKLXsKLSAgICBH
TGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIEdM
ZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLSAgICBEM0RGT1JN
QVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAg
Y29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7Ci0gICAgbUltbXV0
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
XSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywg
dGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKLX0KLQot
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCkKLXsKLSAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsK
LQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBp
ZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCAwKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2Ug
KlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCisvLw0KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0K
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorLy8NCisNCisvLyBUZXh0dXJlLmNwcDog
SW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMN
CisvLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUg
b2JqZWN0cyBhbmQgcmVsYXRlZA0KKy8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
Ig0KKw0KKyNpbmNsdWRlIDxkM2R4OXRleC5oPg0KKw0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQor
I2luY2x1ZGUgPGludHJpbi5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisNCisj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCINCisjaW5jbHVkZSAi
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiDQorDQorbmFtZXNwYWNlIGdsDQorew0KK3Vuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFsID0gMTsNCisNCitzdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkNCit7DQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwNCisgICAgICAgICAgICAgZm9y
bWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQ0KKyAgICB7DQorICAgICAg
ICByZXR1cm4gRDNERk1UX0RYVDE7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpDQorICAgIHsNCisgICAgICAgIHJldHVy
biBEM0RGTVRfRFhUMzsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIEQzREZN
VF9EWFQ1Ow0KKyAgICB9DQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRkxPQVQpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMyRjsNCisgICAgfQ0KKyAgICBlbHNl
IGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4g
RDNERk1UX0ExNkIxNkcxNlIxNkY7DQorICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQ0KKyAgICB7DQorICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5D
RSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250ZXh0KCktPnN1
cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfQThMODsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGZvcm1h
dCA9PSBHTF9SR0IpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4
RzhCODsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCit9DQorDQorc3RhdGljIGJv
b2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQ0KK3sNCisgICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgIH0NCisgICAgc3dpdGNoKGZvcm1hdCkNCisgICAgew0KKyAgICAgIGNhc2UgRDNERk1U
X0w4Og0KKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgY2FzZSBEM0RGTVRfRFhUMToN
CisgICAgICBjYXNlIEQzREZNVF9EWFQzOg0KKyAgICAgIGNhc2UgRDNERk1UX0RYVDU6DQorICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6DQorICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoN
CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOg0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpDQorew0KKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7DQorDQorICAgIGlmIChkM2RmbXQgPT0g
RDNERk1UX0lOVFopDQorICAgIHsNCisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRI
U1RFTkNJTDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUpKSkNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNB
R0VfUkVOREVSVEFSR0VUOw0KKyAgICB9DQorICAgIHJldHVybiBkM2R1c2FnZTsNCit9DQorDQor
SW1hZ2U6OkltYWdlKCkNCit7DQorICAgIG1XaWR0aCA9IDA7IA0KKyAgICBtSGVpZ2h0ID0gMDsN
CisgICAgbUZvcm1hdCA9IEdMX05PTkU7DQorICAgIG1UeXBlID0gR0xfVU5TSUdORURfQllURTsN
CisNCisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBtRGlydHkgPSBmYWxzZTsNCisNCisg
ICAgbUQzRFBvb2wgPSBEM0RQT09MX1NZU1RFTU1FTTsNCisgICAgbUQzREZvcm1hdCA9IEQzREZN
VF9VTktOT1dOOw0KK30NCisNCitJbWFnZTo6fkltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFj
ZSkNCisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgfQ0KK30NCisN
Citib29sIEltYWdlOjpyZWRlZmluZShHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxlYXNlKQ0KK3sNCisgICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fA0KKyAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwNCisgICAg
ICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8DQorICAgICAgICBtVHlwZSAhPSB0eXBlIHx8DQorICAg
ICAgICBmb3JjZVJlbGVhc2UpDQorICAgIHsNCisgICAgICAgIG1XaWR0aCA9IHdpZHRoOw0KKyAg
ICAgICAgbUhlaWdodCA9IGhlaWdodDsNCisgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7DQorICAg
ICAgICBtVHlwZSA9IHR5cGU7DQorICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRo
YXQgd2lsbCBiZSB1c2VkDQorICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVGb3Jt
YXRUeXBlKG1Gb3JtYXQsIG1UeXBlKTsNCisNCisgICAgICAgIGlmIChtU3VyZmFjZSkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIG1T
dXJmYWNlID0gTlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAg
ICB9DQorDQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBJbWFnZTo6Y3JlYXRlU3Vy
ZmFjZSgpDQorew0KKyAgICBpZihtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0K
KyAgICB9DQorDQorICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOw0KKyAgICBjb25zdCBEM0RQ
T09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBjb25zdCBEM0RGT1JNQVQg
ZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7DQorICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNE
Rk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVz
DQorDQorICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApDQorICAgIHsNCisgICAg
ICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOw0KKyAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGgg
PSBtV2lkdGg7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0Ow0KKyAg
ICAgICAgaWYgKElzQ29tcHJlc3NlZChtRm9ybWF0KSAmJiAobVdpZHRoICUgNCAhPSAwIHx8IG1I
ZWlnaHQgJSA0ICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJvb2wgaXNNdWx0NCA9
IGZhbHNlOw0KKyAgICAgICAgICAgIGludCB1cHNhbXBsZUNvdW50ID0gMDsNCisgICAgICAgICAg
ICB3aGlsZSAoIWlzTXVsdDQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXF1
ZXN0V2lkdGggPDw9IDE7DQorICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQgPDw9IDE7DQor
ICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsNCisgICAgICAgICAgICAgICAgaWYgKHJl
cXVlc3RXaWR0aCAlIDQgPT0gMCAmJiByZXF1ZXN0SGVpZ2h0ICUgNCA9PSAwKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1
cHNhbXBsZUNvdW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxl
dmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVM
TCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBzdXJm
YWNlIGZhaWxlZC4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7DQorICAgICAgICB9DQorDQorICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwo
bGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7DQorICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNl
KCk7DQorICAgIH0NCisNCisgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOw0KKyAgICBtRGlydHkg
PSBmYWxzZTsNCisgICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7DQorfQ0KKw0KK0hSRVNVTFQgSW1h
Z2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpDQor
ew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJS
X0lOVkFMSURDQUxMOw0KKw0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIHJl
c3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCByZWN0LCAwKTsNCisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorDQorICAgICAgICBtRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnVubG9j
aygpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7DQorICAgIH0NCit9DQorDQorYm9vbCBJbWFnZTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QNCit7ICAgIA0KKyAgICByZXR1cm4gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShn
ZXREM0RGb3JtYXQoKSk7DQorfQ0KKw0KK0QzREZPUk1BVCBJbWFnZTo6Z2V0RDNERm9ybWF0KCkg
Y29uc3QNCit7DQorICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBo
YXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QNCisgICAgLy8gd2hpY2ggd291bGQgYmUgYSBidWcg
YnkgdGhlIGNhbGxlcg0KKyAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7
DQorDQorICAgIHJldHVybiBtRDNERm9ybWF0Ow0KK30NCisNCitJRGlyZWN0M0RTdXJmYWNlOSAq
SW1hZ2U6OmdldFN1cmZhY2UoKQ0KK3sNCisgICAgY3JlYXRlU3VyZmFjZSgpOw0KKw0KKyAgICBy
ZXR1cm4gbVN1cmZhY2U7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQ0KK3sNCisgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICB7
DQorICAgICAgICBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxM
LCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAgIG1T
dXJmYWNlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7
DQorICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOw0KKyAgICBBU1NFUlQoZGVzYy5Qb29sID09
IEQzRFBPT0xfTUFOQUdFRCk7DQorDQorICAgIG1TdXJmYWNlID0gc3VyZmFjZTsNCisgICAgbUQz
RFBvb2wgPSBkZXNjLlBvb2w7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOw0KKw0KKyAgICBpZiAoc291cmNlU3Vy
ZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICBS
RUNUIHJlY3Q7DQorICAgICAgICByZWN0LmxlZnQgPSB4b2Zmc2V0Ow0KKyAgICAgICAgcmVjdC50
b3AgPSB5b2Zmc2V0Ow0KKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsNCisg
ICAgICAgIHJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsNCisNCisgICAgICAgIGlmICht
RDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0U3VyZmFjZSwgTlVM
TCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDAp
Ow0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTog
c291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBkZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyANCisg
ICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsNCisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1
cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsNCisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFN0b3Jl
IHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgs
aGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dA0KKy8vIGlu
dG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuDQordm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLA0KKyAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqaW5wdXQpDQorew0KKyAgICBSRUNUIGxvY2tSZWN0ID0NCisgICAgew0K
KyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwNCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9m
ZnNldCArIGhlaWdodA0KKyAgICB9Ow0KKw0KKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7DQor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOw0KKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAg
ICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCk7DQorDQorICAgIHN3aXRjaCAodHlwZSkNCisgICAgew0KKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAgICAgICBpZiAoc3VwcG9y
dHNTU0UyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRh
U1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToNCisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZN
VF9MOCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RG
b3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAg
IGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c1NTRTIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRS
R0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNl
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoNCisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0N
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6DQor
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xf
UkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6DQorICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xfUkdC
QToNCisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6DQorICAg
ICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIGNhc2UgR0xfUkdC
QToNCisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZMT0FUOg0KKyAgICAgICAgc3dpdGNoIChtRm9y
bWF0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVy
dGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QN
CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToNCisgICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQor
ICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6DQorICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRA0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBoYUhh
bGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0K
KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAg
ICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOw0KKyAgICB9DQorDQorICAgIHVubG9jaygpOw0KK30NCisNCit2b2lkIEltYWdlOjps
b2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0K
KyAgICANCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJj
ZVt4XTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkQWxwaGFE
YXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsNCisg
ICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7DQorDQorICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsN
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisNCisgICAg
ICAgIGludCB4Ow0KKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQNCisgICAg
ICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYg
MHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0Ow0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBpNjQo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOw0KKyAgICAgICAg
ICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRl
IHRvIHplcm8NCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFja2xvX2VwaTgoemVy
b1dpZGUsIHNvdXJjZURhdGEpOw0KKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJp
dCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybw0KKyAgICAgICAgICAgIF9f
bTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOw0KKyAg
ICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dpZGUsIHNvdXJj
ZURhdGEpOw0KKw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0
PF9fbTEyOGkqPigmZGVzdFt4XSksIGxvKTsNCisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgo
cmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOw0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXINCisgICAgICAgIGZvciAoOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0Ow0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlW3hdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
MDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKw0KKyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdS
QTggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24g
Zm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsNCisNCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAxLjBmOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5z
aWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsN
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICANCisgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJH
UkE4IGRlc3RpbmF0aW9uIGZvcm1hdA0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICog
Mik7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisg
ICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsN
CisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsy
KngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsN
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDJdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbMip4KzFdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisg
ICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBz
b3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2Vb
eCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4g
Mik7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAz
KSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOw0KKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3Qg
PSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7
DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IHNvdXJjZVt4ICogMyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7DQor
ICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3ggKiAzICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQg
ZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNp
Z25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAgICBfX20xMjhpIGJyTWFzayA9IF9tbV9zZXQxX2Vw
aTMyKDB4MDBmZjAwZmYpOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7DQorICAgICAgICBpbnQgeCA9IDA7DQorDQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0
ZXMgYWxpZ25lZA0KKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0
cl90PigmZGVzdFt4XSkgJiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAg
ICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhm
ZjAwZmYwMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsg
eCArPSA0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9t
bV9sb2FkdV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hd
KSk7DQorICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBhbmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdl
DQorICAgICAgICAgICAgX19tMTI4aSBnYUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJy
TWFzaywgc291cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcg0KKyAg
ICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21tX2FuZF9zaTEyOChzb3VyY2VEYXRh
LCBick1hc2spOw0KKyAgICAgICAgICAgIC8vIFN3YXAgYiBhbmQgcg0KKyAgICAgICAgICAgIF9f
bTEyOGkgYnJTd2FwcGVkID0gX21tX3NodWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2
KGJyQ29tcG9uZW50cywgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAz
LCAwLCAxKSk7DQorICAgICAgICAgICAgX19tMTI4aSByZXN1bHQgPSBfbW1fb3Jfc2kxMjgoZ2FD
b21wb25lbnRzLCBiclN3YXBwZWQpOw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWlu
dGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIHJlc3VsdCk7DQorICAgICAgICB9DQor
DQorICAgICAgICAvLyBQZXJmb3JtIGxlZnRvdmVyIHdyaXRlcw0KKyAgICAgICAgZm9yICg7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2Jh
ID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYg
MHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVu
c2lnbmVkIGludCAqZGVzdCA9IE5VTEw7DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsNCisNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisg
ICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJn
YmEgJiAweGZmMDBmZjAwKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdl
Ojpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjAp
IDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsN
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwg
KChyZ2JhICYgMHhGMDAwKSA+PiAxMik7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
KChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkg
Pj4gMyk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+
PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAw
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNl
ID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7DQorICAg
IH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsNCisgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7DQor
ICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisg
ICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsNCisgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09
IDApOw0KKyAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7DQorDQorICAgIFJFQ1QgbG9ja1Jl
Y3QgPSB7DQorICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsNCisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9
DQorDQorICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRo
LCBoZWlnaHQsIG1Gb3JtYXQpOw0KKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsNCisgICAgaW50IHJvd3MgPSBpbnB1dFNpemUg
LyBpbnB1dFBpdGNoOw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkNCisgICAg
ew0KKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2Nr
ZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQ
aXRjaCk7DQorICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KKy8vIFRoaXMgaW1wbGVt
ZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRl
eHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcw0KK3ZvaWQgSW1hZ2U6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpDQor
ew0KKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOw0KKyAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzY3JpcHRpb247DQorICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRp
b24pOw0KKyAgICANCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVl
blBsYWluU3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNj
cmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVM
TCk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7DQorICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgcmVzdWx0
ID0gZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0
RGF0YSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJS
KCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7DQorICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgUkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHgg
KyB3aWR0aCwgeSArIGhlaWdodH07DQorICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9m
ZnNldCwgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsNCisNCisgICAgaWYgKGlz
UmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1
cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNlKCksIE5VTEwsICZkZXN0UmVjdCwgcmVuZGVyVGFy
Z2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7DQorICAgICAg
ICANCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisgICAgICAg
ICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisg
ICAgew0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9IHswfTsNCisgICAgICAg
IHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNl
UmVjdCwgMCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3Rh
bmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07
DQorICAgICAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsNCisgICAgICAg
IA0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3RhbmdsZSBt
aWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5Vbmxv
Y2tSZWN0KCk7DQorICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisN
CisgICAgICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFy
Kilzb3VyY2VMb2NrLnBCaXRzOw0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAo
dW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7DQorDQorICAgICAgICAgICAgc3dpdGNoIChk
ZXNjcmlwdGlvbi5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoNCisg
ICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
DQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNo
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6DQorICAgICAgICAgICAgICAgIHN3aXRj
aChnZXREM0RGb3JtYXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0w4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQg
PSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0N
CisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsN
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOw0KKyAgICAg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9BMVI1RzVCNToNCisgICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZv
cm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4
ICogMiArIDFdICYgMHg3QzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9
IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisN
CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gKHNpZ25lZCBjaGFyKXNv
dXJjZVt4ICogMiArIDFdID4+IDc7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGRlZmF1
bHQ6DQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgdW5sb2NrKCk7DQorICAgICAgICByZW5kZXJUYXJnZXREYXRh
LT5VbmxvY2tSZWN0KCk7DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFz
ZSgpOw0KKw0KKyAgICBtRGlydHkgPSB0cnVlOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZTo6VGV4
dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpDQorICAgIDogbUQzRFVzYWdlKHVzYWdlKSwNCisgICAg
ICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKHVzYWdlKSksDQorICAgICAg
bVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpDQorew0KK30NCisNCitUZXh0dXJl
U3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkNCit7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZVN0b3Jh
Z2U6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QNCit7DQorICAgIHJldHVybiAobUQzRFVzYWdlICYg
KEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7DQor
fQ0KKw0KK2Jvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCk7DQorfQ0KKw0KK0QzRFBPT0wgVGV4
dHVyZVN0b3JhZ2U6OmdldFBvb2woKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1EM0RQb29sOw0K
K30NCisNCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1EM0RVc2FnZTsNCit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpn
ZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsN
Cit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwo
KQ0KK3sNCisgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOw0KK30NCisNCitUZXh0
dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkNCit7DQorICAgIG1N
aW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7DQorICAgIG1NYWdGaWx0ZXIgPSBH
TF9MSU5FQVI7DQorICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsNCisgICAgbVdyYXBUID0gR0xfUkVQ
RUFUOw0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgbVVzYWdlID0gR0xfTk9O
RTsNCisgICAgDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorDQorICAgIG1JbW11dGFibGUg
PSBmYWxzZTsNCit9DQorDQorVGV4dHVyZTo6flRleHR1cmUoKQ0KK3sNCit9DQorDQorLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBw
YXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7
DQorICAgIHN3aXRjaCAoZmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0K
KyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRl
cikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7
DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0
Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVy
KQ0KK2Jvb2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpDQorew0KKyAgICBz
d2l0Y2ggKGZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoNCisgICAgICBj
YXNlIEdMX0xJTkVBUjoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAh
PSBmaWx0ZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0g
ZmlsdGVyOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisvLyBSZXR1
cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJh
bWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkNCit7DQorICAgIHN3
aXRjaCAod3JhcCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfUkVQRUFUOg0KKyAgICAgIGNhc2Ug
R0xfQ0xBTVBfVE9fRURHRToNCisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQ
YXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7DQorICAgICAgICB9DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgfQ0KK30NCisNCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChH
TGVudW0gd3JhcCkNCit7DQorICAgIHN3aXRjaCAod3JhcCkNCisgICAgew0KKyAgICAgIGNhc2Ug
R0xfUkVQRUFUOg0KKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToNCisgICAgICBjYXNlIEdM
X01JUlJPUkVEX1JFUEVBVDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVdyYXBUICE9
IHdyYXApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOw0K
KyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAgZGVmYXVsdDoN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQ0K
K2Jvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQ0KK3sNCisgICAgc3dpdGNoICh1
c2FnZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTk9ORToNCisgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6DQorICAgICAgICBtVXNhZ2UgPSB1c2FnZTsNCisgICAg
ICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbU1pbkZpbHRlcjsNCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldE1h
Z0ZpbHRlcigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1hZ0ZpbHRlcjsNCit9DQorDQorR0xl
bnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtV3JhcFM7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVdyYXBUOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1Vc2FnZTsNCit9DQorDQordm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQ0KK3sNCisg
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBpbWFnZS0+bG9hZERhdGEo
MCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5
cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0K
KyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwg
cGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCit9DQorDQor
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQor
ew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2Fk
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorDQor
ICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3Nl
ZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKQ0KK3sNCisgICAgaWYgKHBpeGVscyAhPSBOVUxMKQ0KKyAgICB7DQor
ICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRl
eHR1cmU6OmdldFRleHR1cmUoKQ0KK3sNCisgICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKGZh
bHNlKSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0K
KyAgICB1cGRhdGVUZXh0dXJlKCk7DQorDQorICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpOw0K
K30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbURpcnR5UGFyYW1ldGVyczsNCit9DQorDQorYm9vbCBUZXh0dXJlOjpoYXNEaXJ0
eUltYWdlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbURpcnR5SW1hZ2VzOw0KK30NCisNCit2
b2lkIFRleHR1cmU6OnJlc2V0RGlydHkoKQ0KK3sNCisgICAgbURpcnR5UGFyYW1ldGVycyA9IGZh
bHNlOw0KKyAgICBtRGlydHlJbWFnZXMgPSBmYWxzZTsNCit9DQorDQordW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1
cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsNCisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCkgOiAwOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBUZXh0dXJlU3RvcmFn
ZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7DQorICAgIHJldHVybiB0ZXh0dXJlID8gdGV4
dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOw0KK30NCisNCitib29sIFRl
eHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtSW1tdXRhYmxlOw0K
K30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgY29uc3QNCit7DQorICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIo
aGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzDQor
ICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhv
dXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLg0KKyAg
ICAgICAgcmV0dXJuIDE7DQorICAgIH0NCit9DQorDQorR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25M
ZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIGNyZWF0aW9uTGV2ZWxz
KHNpemUsIHNpemUpOw0KK30NCisNCitpbnQgVGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExl
dmVsQ291bnQoKSA6IDA7DQorfQ0KKw0KK0JsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQ0KK3sN
CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsNCisgICAgcmV0dXJuIGNvbnRl
eHQtPmdldEJsaXR0ZXIoKTsNCit9DQorDQorYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJn
ZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJv
b2wgZnJvbU1hbmFnZWQpDQorew0KKyAgICBpZiAoc291cmNlICYmIGRlc3QpDQorICAgIHsNCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0Ow0KKw0KKyAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNl
KGRlc3QsIE5VTEwsIE5VTEwsIHNvdXJjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAw
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7DQorICAgICAgICAgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7DQorDQorICAgICAgICAg
ICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsNCisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0
cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdl
MkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKSA6
IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCksIG1SZW5kZXJUYXJnZXRTZXJp
YWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkNCit7DQorICAgIG1UZXh0dXJl
ID0gc3VyZmFjZVRleHR1cmU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9y
YWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0
aCwgaW50IGhlaWdodCkNCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1SZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkNCit7DQorICAgIG1U
ZXh0dXJlID0gTlVMTDsNCisgICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgcG9z
aXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUNCisg
ICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3Jl
YXRpb24NCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQ0KKyAgICB7DQorICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscywg
Z2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7DQorDQorICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQ0K
K3sNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtVGV4dHVyZS0+UmVsZWFz
ZSgpOw0KKyAgICB9DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4N
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkN
Cit7DQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYg
KG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJmYWNlKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHN1cmZhY2U7DQorfQ0KKw0KK0lE
aXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4
dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsNCit9DQorDQorVGV4dHVyZTJE
OjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpDQorew0KKyAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7DQorICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBOVUxMOw0KKyAgICBtUHJveHlSZWZzID0gMDsNCit9DQorDQorVGV4dHVyZTJEOjp+VGV4dHVy
ZTJEKCkNCit7DQorICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsNCisNCisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIA0KKyAgICBpZiAo
bVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVM
TCk7DQorICAgICAgICBtU3VyZmFjZSA9IE5VTEw7DQorICAgIH0NCit9DQorDQorLy8gV2UgbmVl
ZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3Rp
bmcgYXMgDQorLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBh
dHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgDQorLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkgd2hp
Y2ggaGFzIGJlZW4gZGVsZXRlZC4NCit2b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIG1Qcm94eVJlZnMrKzsNCit9DQorDQordm9p
ZCBUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sN
CisgICAgaWYgKG1Qcm94eVJlZnMgPiAwKQ0KKyAgICAgICAgbVByb3h5UmVmcy0tOw0KKw0KKyAg
ICBpZiAobVByb3h5UmVmcyA9PSAwKQ0KKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxM
Ow0KK30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIEdMX1RFWFRVUkVfMkQ7DQorfQ0KKw0KK0dMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0
aChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0u
Z2V0V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0dMc2l6
ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICBy
ZXR1cm4gMDsNCit9DQorDQorR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZv
cm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gR0xfTk9ORTsNCit9DQorDQorRDNE
Rk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgcmVsZWFzZVRleEltYWdlKCk7
DQorDQorICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAgICBpZiAobVRleFN0b3Jh
Z2UgJiYgcmVkZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAg
ICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUy
RDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHR5cGUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJE
OjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgcmVsZWFzZVRl
eEltYWdlKCk7DQorDQorICAgIEdMZW51bSBmb3JtYXQ7DQorDQorICAgIHN3aXRjaChzdXJmYWNl
LT5nZXRGb3JtYXQoKSkNCisgICAgew0KKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAg
ICAgICAgZm9ybWF0ID0gR0xfUkdCQTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4Og0KKyAgICAgICAgZm9ybWF0ID0gR0xfUkdCOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3JtYXQsIHN1
cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05FRF9CWVRF
LCB0cnVlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9
IG5ldyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7DQor
DQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIG1TdXJmYWNlID0gc3VyZmFjZTsNCisg
ICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZSh0aGlzKTsNCit9DQorDQordm9pZCBUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSgpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisg
ICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7DQorICAgICAgICBtU3VyZmFj
ZSA9IE5VTEw7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgICAgIG1UZXhTdG9yYWdlID0g
TlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xfUkdCQSwgMCwgMCwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
DQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdM
X1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1h
Z2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOw0KK30NCisNCit2b2lkIFRleHR1
cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdl
QXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxldmVsIDwg
bGV2ZWxDb3VudCgpKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExl
dmVsID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAgICBp
ZiAoZGVzdExldmVsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZt
SW1hZ2VBcnJheVtsZXZlbF07DQorICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVz
dExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisNCisgICAgICAgICAg
ICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1Yklt
YWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQ0KKyAgICB7DQorICAgICAg
ICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisg
ICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0K
K3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0K
KyAgIA0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkN
CisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8
ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAgICAgICAgaWYgKHdpZHRo
ICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7
DQorICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHg7DQorICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSB5ICsgaGVpZ2h0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQor
DQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAs
IDAsIGRlc3QpOw0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
Ow0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkNCit7
DQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgo
KSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7DQorICAgIH0N
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIW1J
bWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYm
ICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsNCisNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9
IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOw0KKw0KKyAgICAgICAgICAgIGlm
IChkZXN0KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5j
b3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCks
IHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOw0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkNCit7DQorICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5h
bGZvcm1hdCk7DQorICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9y
bWF0KTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShm
b3JtYXQsIHR5cGUpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2Rm
bXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQorDQorICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAg
IG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUs
IHRydWUpOw0KKyAgICAgICAgd2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiAxKTsNCisgICAg
ICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsNCisgICAgfQ0KKw0KKyAgICBm
b3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5y
ZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2
ZWwpOw0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgMkQgdGV4
dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
OC4yIHBhZ2UgODUuDQorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QN
Cit7DQorICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBp
ZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICB9DQorDQorICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOw0KKw0KKyAgICBz
d2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJFU1Q6DQorICAg
ICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7DQorICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6DQorICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoNCisgICAg
ICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KDAp
ID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
cigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkNCisg
ICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRl
ciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIGJvb2wgbnBvdFN1cHBvcnQgPSBnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpOw0KKw0KKyAgICBpZiAoIW5wb3RTdXBwb3J0KQ0KKyAgICB7DQor
ICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdp
ZHRoKSkgfHwNCisgICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFICYm
ICFpc1BvdzIoaGVpZ2h0KSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChtaXBtYXBwaW5nKQ0KKyAgICB7DQor
ICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgh
aXNQb3cyKHdpZHRoKSB8fCAhaXNQb3cyKGhlaWdodCkpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKCFpc01pcG1hcENvbXBsZXRlKCkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVl
Ow0KK30NCisNCisvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLg0KK2Jvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlmIChpc0ltbXV0YWJsZSgp
KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVp
IHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsNCisgICAgR0xzaXplaSBoZWlnaHQg
PSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsNCisNCisgICAgaWYgKHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0K
KyAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOw0KKw0KKyAgICBmb3Ig
KGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9y
bWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdl
QXJyYXlbMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lk
dGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJl
c3NlZChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorYm9vbCBUZXh0dXJlMkQ6OmlzRGVwdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50
ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0
dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4U3RvcmFn
ZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsNCit9DQorDQorLy8gQ29u
c3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGlt
YWdlcw0KK3ZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkNCit7DQorICAgIEdMc2l6ZWkg
d2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9
IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlv
bkxldmVscyh3aWR0aCwgaGVpZ2h0KTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFy
cmF5WzBdLmdldEQzREZvcm1hdCgpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVV
c2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7
DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQs
IGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgDQorICAgIGlmIChtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorICAgICAgICAgICAgbUltYWdl
QXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKCkNCit7DQorICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQor
DQorICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAg
IHsNCisgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07DQorDQorICAg
ICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb21t
aXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKSwgbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2
b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkNCit7DQorICAgIFRleHR1cmVT
dG9yYWdlMkQgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOw0KKw0KKyAgICBpZiAobUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKSAhPSAwICYmIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpICE9IDApDQor
ICAgIHsNCisgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgp
Ow0KKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsN
CisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOw0K
KyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
Ow0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisgICAgICAgIG5ld1RleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdp
ZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5n
ZXRTdXJmYWNlTGV2ZWwoaSk7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOw0KKw0KKyAgICAgICAgICAg
ICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5p
c01hbmFnZWQoKSkpDQorICAgICAgICAgICAgICAgIHsgICANCisgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7DQorICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNv
dXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVs
ZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkg
c291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxl
YXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOw0KKw0KKyAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVN
aXBtYXBzKCkNCit7DQorICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF0uZ2V0
V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdo
IHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVs
cy4NCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdl
dFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSk7DQorICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykNCisgICAgew0KKyAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksDQorICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpID4+
IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXS5nZXRUeXBl
KCkpOw0KKyAgICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNS
ZW5kZXJUYXJnZXQoKSkNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOw0KKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwoaSk7DQorDQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVM
TCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94Rmls
dGVyKHVwcGVyLCBsb3dlcik7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICh1
cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGlmIChsb3dlciAh
PSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ld
Lm1hcmtDbGVhbigpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9h
ZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5V
TEwsIG1JbWFnZUFycmF5W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhfRklM
VEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCIgZmFp
bGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQorUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5k
ZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkg
PT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5Ow0KK30NCisNCisvLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBj
cmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpDQorICAgIHsNCisgICAg
ICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRleHR1cmUoKTsNCisgICAg
DQorICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUNCisgICAgaWYgKGlz
RGVwdGgoMCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICAgIHJl
dHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOw0KK30NCisNCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRV
UkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVh
dGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpDQorICAgIHsNCisgICAgICAg
IHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRleHR1cmUoKTsNCisNCisgICAg
Ly8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlDQorICAgIGlmICghaXNE
ZXB0aCgwKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0
dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KK1RleHR1cmVTdG9y
YWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpDQorew0KKyAgICBp
ZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKSkNCisgICAgew0KKyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisg
ICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOw0KK30NCisNCitU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpDQorICAgIDogVGV4dHVyZVN0
b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVDdWJlU2VyaWFscygpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBOVUxMOw0KKyAgICAv
LyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBh
biBpbmNvbXBsZXRlIHRleHR1cmUNCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24NCisgICAgaWYgKHNpemUgPiAwKQ0KKyAgICB7
DQorICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsNCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZl
bHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOw0KKw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9y
YWdlQ3ViZU1hcCgpDQorew0KKyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgIH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVN
YXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpDQorew0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7DQorDQorICAgIGlmIChtVGV4dHVyZSkNCisgICAg
ew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uo
ZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsNCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJu
IHN1cmZhY2U7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7
DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsNCit9
DQorDQorVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJl
KGlkKQ0KK3sNCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7IGkrKykNCisgICAgew0KKyAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsNCisg
ICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0gMDsNCisgICAgfQ0KK30NCisNCitUZXh0dXJlQ3Vi
ZU1hcDo6flRleHR1cmVDdWJlTWFwKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsg
aSsrKQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAgICB9DQor
DQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KK30N
CisNCisvLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5k
ZXJidWZmZXJzIGFjdGluZyBhcyANCisvLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRo
YXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgDQorLy8gcHJveHkgcmVmZXJlbmNl
cyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLA0KKy8v
IHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0IGEgbmV3IGF0dGVtcHQgYXQg
cmVmZXJlbmNpbmcNCisvLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uDQordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobUZhY2VQcm94
aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7DQorICAg
IH0NCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpDQorew0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykNCisg
ICAgew0KKyAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQ0KKyAgICAgICAgICAgICAg
ICBtRmFjZVByb3h5UmVmc1tpXS0tOw0KKw0KKyAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVm
c1tpXSA9PSAwKQ0KKyAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOw0KK30NCisNCitH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLmdldFdpZHRoKCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiAwOw0KK30NCisN
CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS5nZXRIZWlnaHQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFj
ZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRGb3JtYXQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAg
cmV0dXJuIEdMX05PTkU7DQorfQ0KKw0KK0QzREZPUk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNE
Rm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7DQor
ICAgIGVsc2UNCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsNCit9DQorDQordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0K
K30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJ
bWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQor
fQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldElt
YWdlKDUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZElt
YWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
DQorew0KKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChm
YWNlKV1bbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChp
bnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgQVNTRVJUKG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7DQorDQorICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RMZXZl
bCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7DQorICAgICAgICBBU1NFUlQoZGVzdExldmVsICE9IE5V
TEwpOw0KKw0KKyAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07DQorICAg
ICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsNCisNCisgICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsN
CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2Uo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQ0K
KyAgICB7DQorICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQ0KKyAgICB7DQorICAgICAgICBjb21taXRS
ZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCk7DQorICAgIH0NCit9DQorDQorLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNv
bXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4NCiti
b29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0DQorew0KKyAgICBp
bnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7DQorDQorICAgIGJvb2wgbWlw
bWFwcGluZzsNCisNCisgICAgc3dpdGNoIChtTWluRmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgICAgbWlwbWFwcGlu
ZyA9IGZhbHNlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAgICAg
IGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01J
UE1BUF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsNCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwNCisgICAgICAgIChnZXRJbnRlcm5h
bEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0hBTEZfRkxP
QVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkN
CisgICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoZ2V0V3JhcFMo
KSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8
fCBtaXBtYXBwaW5nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIW1pcG1hcHBpbmcpDQorICAgIHsNCisgICAg
ICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAg
ICBpZiAoIWlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkpICAgLy8gQWxzbyB0ZXN0cyBmb3IgaXNDdWJl
Q29tcGxldGUoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gVGVzdHMgZm9y
IGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
Ny4xMCBwYWdlIDgxLg0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29u
c3QNCit7DQorICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIDw9IDAgfHwgbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGZvciAo
dW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICB7DQorICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRXaWR0aCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lk
dGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fA0KKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VdWzBdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZv
cm1hdCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9
IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQor
fQ0KKw0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QN
Cit7DQorICAgIGlmIChpc0ltbXV0YWJsZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1
ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVswXVswXS5nZXRXaWR0aCgpOw0KKw0KKyAgICBpbnQgcSA9IGxvZzIoc2l6ZSk7DQorDQor
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICB7DQorICAgICAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspDQorICAgICAgICB7DQor
ICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRGb3JtYXQoKSAhPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0VHlwZSgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdl
dCwgbGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisNCisvLyBDb25zdHJ1
Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2Vz
LCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQ0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0
ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKTsNCisgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7DQor
ICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsN
CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZh
bHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsN
CisNCisgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkNCisgICAgew0KKyAgICAgICAg
aW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZl
bCk7DQorICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlVGV4dHVyZSgpDQorew0KKyAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XTsNCisNCisgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5n
ZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpuZXdUZXhTdG9yYWdlID0g
TlVMTDsNCisNCisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgIT0gMCkNCisg
ICAgew0KKyAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KTsNCisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOw0KKyAg
ICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgp
Ow0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisgICAgICAgIG5ld1RleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgc2l6ZSk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgICAg
IGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykNCisgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhT
dG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0g
bmV3VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRl
clRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpDQorICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3Rv
cmFnZTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsN
CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UpIHNvdXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsNCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQor
DQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOw0KK30NCisNCit1bnNpZ25lZCBpbnQg
VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkNCit7DQorICAgIE1FVEFfQVNT
RVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCA9PSAxKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOw0KKyAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7DQorICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA0KTsN
CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOw0KKw0KKyAgICByZXR1cm4gZmFjZSAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6cmVkZWZpbmVJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkNCit7DQorICAgIGJvb2wg
cmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVk
ZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZv
ciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgbVRleFN0b3Jh
Z2UgPSBOVUxMOw0KKw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30N
CisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorDQorICAg
IGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgaWYgKCFtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkNCisgICAgew0K
KyAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1
ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2Ug
fHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5tYXJrQ2xlYW4oKTsNCisNCisgICAg
ICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOw0KKw0KKyAgICAgICAgaWYgKHdpZHRoID4gMCAm
JiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBSRUNUIHNv
dXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsNCisgICAgICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQor
DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3Qp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVu
ZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOw0KKyAgICAgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRXaWR0aCgpOw0KKw0K
KyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6
ZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOw0KKyAg
ICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdl
dFJlbmRlclRhcmdldCgpOw0KKw0KKyAgICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgew0KKyAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7DQorICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgdW5z
aWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOw0KKw0KKyAgICBpZiAoIW1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRl
eFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQor
ICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHVwZGF0ZVRl
eHR1cmUoKTsNCisNCisgICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0geDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0K
KyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0
LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQorDQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7DQor
DQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJh
eVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7DQorICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzaXplKQ0KK3sNCisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0
KGludGVybmFsZm9ybWF0KTsNCisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50
ZXJuYWxmb3JtYXQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsN
CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNk
Zm10LCBkM2R1c2FnZSwgc2l6ZSk7DQorICAgIG1JbW11dGFibGUgPSB0cnVlOw0KKw0KKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICB7DQorICAg
ICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCBzaXpl
LCBzaXplLCB0eXBlLCB0cnVlKTsNCisgICAgICAgICAgICBzaXplID0gc3RkOjptYXgoMSwgc2l6
ZSA+PiAxKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBsZXZlbCA9IGxl
dmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
DQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmlu
ZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAg
ICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgZmFj
ZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2Us
IGxldmVsKTsNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1h
bmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQ0KK3sNCisg
ICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmICghZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFpc1Bv
dzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRo
ZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4NCisgICAgdW5zaWdu
ZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpOw0KKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykNCisgICAgew0KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0Rm9ybWF0KCksDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5n
ZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdldFR5cGUoKSk7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0g
MDsgZiA8IDY7IGYrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaS0xKTsNCisgICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOw0KKw0KKyAgICAgICAg
ICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQ0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBl
ciwgbG93ZXIpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmICh1
cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICBpZiAobG93
ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0ubWFya0NsZWFuKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7
IGYgPCA2OyBmKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0KKyAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RY
TG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5V
TEwsIE5VTEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEws
IEQzRFhfRklMVEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkp
Ow0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zd
W2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCitSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCkNCit7DQorICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5k
ZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZh
Y2VJbmRleCh0YXJnZXQpOw0KKw0KKyAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwp
DQorICAgIHsNCisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIo
aWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOw0KKyAg
ICB9DQorDQorICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07DQorfQ0KKw0KKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6Omdl
dFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgQVNTRVJUKElzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0
ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVy
ZSgpOw0KKyAgICANCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0
YXJnZXQsIDApOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpDQorew0KKyAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChy
ZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkNCisgICAgew0K
KyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOw0KK30NCisNCit9DQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAppbmRleCAxOWE2ZWI1Li44MGUyODhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aApAQCAtMSw0MzMgKzEsNDI3IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmg6
IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgY29uY3JldGUg
ZGVyaXZlZAotLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1l
bnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpZm5kZWYgTElCR0xFU1Yy
X1RFWFRVUkVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8KLQotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5j
bHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29t
bW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotbmFtZXNwYWNlIGVnbAotewot
Y2xhc3MgU3VyZmFjZTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBCbGl0OwotY2xhc3Mg
RnJhbWVidWZmZXI7Ci0KLWVudW0KLXsKLSAgICAvLyBUaGVzZSBhcmUgdGhlIG1heGltdW1zIHRo
ZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydAotICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBh
cmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNhcHMKLSAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJp
ZWQgZnJvbSB0aGUgQ29udGV4dAotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUg
PSAxNjM4NCwKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0g
MTYzODQsCi0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgPSAxNSAgIC8v
IDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCi19OwotCi1jbGFzcyBJbWFnZQotewotICBwdWJs
aWM6Ci0gICAgSW1hZ2UoKTsKLSAgICB+SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZpbmUoR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBi
b29sIGZvcmNlUmVsZWFzZSk7Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9
Ci0gICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQotCi0gICAgSFJFU1VMVCBs
b2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2
b2lkIHVubG9jaygpOwotCi0gICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKLSAg
ICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qg
e3JldHVybiBtSGVpZ2h0O30KLSAgICBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Qge3JldHVybiBt
Rm9ybWF0O30KLSAgICBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0IHtyZXR1cm4gbVR5cGU7fQotICAg
IGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURpcnR5O30KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwotCi0gICAgdm9pZCBzZXRNYW5hZ2VkU3Vy
ZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgdm9pZCB1cGRhdGVTdXJmYWNl
KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIGxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJH
QkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQzRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQ1
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLQotICAg
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1h
Z2UpOwotCi0gICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBHTHNpemVpIG1XaWR0aDsK
LSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1Gb3JtYXQ7Ci0gICAgR0xlbnVtIG1U
eXBlOwotCi0gICAgYm9vbCBtRGlydHk7Ci0KLSAgICBEM0RQT09MIG1EM0RQb29sOyAgIC8vIGNh
biBvbmx5IGJlIEQzRFBPT0xfU1lTVEVNTUVNIG9yIEQzRFBPT0xfTUFOQUdFRCBzaW5jZSBpdCBu
ZWVkcyB0byBiZSBsb2NrYWJsZS4KLSAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsKLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptU3VyZmFjZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlCi17
Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwotCi0gICAgYm9vbCBpc1JlbmRl
clRhcmdldCgpIGNvbnN0OwotICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgRDNEUE9P
TCBnZXRQb29sKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAgIGNvbnN0IGJvb2wgbVJlbmRlclRhcmdl
dDsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50
IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2Vy
aWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50VGV4dHVyZVNlcmlhbDsK
LX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgflRleHR1
cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25z
dCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29s
IHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3
cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFVzYWdl
KEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7Ci0gICAg
R0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0
OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRVc2FnZSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBEM0RGT1JN
QVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBj
b25zdCA9IDA7Ci0KLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKLQotICAgIGJvb2wgaGFzRGly
dHlQYXJhbWV0ZXJzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXJ0eUltYWdlcygpIGNvbnN0Owot
ICAgIHZvaWQgcmVzZXREaXJ0eSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFs
KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KTsKLQotICAgIGJvb2wgaXNJbW11dGFibGUoKSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25zdCBH
THVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7ICAg
Ly8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFsdWUg
aXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZXNv
dXJjZSBtYW5hZ2VyLgotCi0gIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTsKLQotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdl
KEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0g
ICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0KLSAgICBHTGludCBj
cmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3Q7Ci0gICAg
R0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkg
PSAwOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KSA9IDA7Ci0KLSAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIEJsaXQgKmdldEJsaXR0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJv
b2wgZnJvbU1hbmFnZWQpOwotCi0gICAgR0xlbnVtIG1NaW5GaWx0ZXI7Ci0gICAgR0xlbnVtIG1N
YWdGaWx0ZXI7Ci0gICAgR0xlbnVtIG1XcmFwUzsKLSAgICBHTGVudW0gbVdyYXBUOwotICAgIGJv
b2wgbURpcnR5UGFyYW1ldGVyczsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgYm9vbCBtRGly
dHlJbWFnZXM7Ci0KLSAgICBib29sIG1JbW11dGFibGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7Ci0KLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSA9IDA7Ci19OwotCi1jbGFzcyBUZXh0
dXJlU3RvcmFnZTJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVy
ZSk7Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMkQoKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNl
TGV2ZWwoaW50IGxldmVsKTsKLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0
dXJlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UyRCk7Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbVRleHR1cmU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1SZW5kZXJUYXJnZXRTZXJpYWw7
Ci19OwotCi1jbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgVGV4dHVyZTJEKEdMdWludCBpZCk7Ci0KLSAgICB+VGV4dHVyZTJEKCk7Ci0K
LSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZv
aWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVh
bCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lk
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xp
bnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
RDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3Rv
cmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xl
bnVtIHRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZTJEKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0gICAgdm9p
ZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVtJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2Uy
RCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsKLQotICAgIC8vIEEg
c3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVy
IHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBh
Y3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJh
Y2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBp
ZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2Ug
Y291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8v
IHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2Yg
dGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5Owot
ICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJl
U3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJv
b2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgp
OwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNl
VGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRl
eHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwotCi0gICAgSURpcmVjdDNE
Q3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4
dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAoR0x1aW50IGlk
KTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0
OwotICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3
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
LQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVu
dW0gZmFjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZUN1YmVNYXApOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1h
cCAqbVRleFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBj
b3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJl
Y2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4g
YSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291
bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBw
b2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIg
dG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0
IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVy
YnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVm
c1s2XTsKLX07Ci19Ci0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
DQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1cmUuaDog
RGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkDQorLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1l
bnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQNCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0KKyNpZm5kZWYgTElCR0xF
U1YyX1RFWFRVUkVfSF8NCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hfDQorDQorI2luY2x1
ZGUgPHZlY3Rvcj4NCisNCisjZGVmaW5lIEdMX0FQSUNBTEwNCisjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+DQorI2luY2x1ZGUgPGQzZDkuaD4NCisNCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiDQor
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisNCitu
YW1lc3BhY2UgZWdsDQorew0KK2NsYXNzIFN1cmZhY2U7DQorfQ0KKw0KK25hbWVzcGFjZSBnbA0K
K3sNCitjbGFzcyBCbGl0Ow0KK2NsYXNzIEZyYW1lYnVmZmVyOw0KKw0KK2VudW0NCit7DQorICAg
IC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0
DQorICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNh
cHMNCisgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQNCisgICAg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LA0KKyAgICBJTVBMRU1FTlRB
VElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorDQorICAgIElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJF
X1NJWkUNCit9Ow0KKw0KK2NsYXNzIEltYWdlDQorew0KKyAgcHVibGljOg0KKyAgICBJbWFnZSgp
Ow0KKyAgICB+SW1hZ2UoKTsNCisNCisgICAgYm9vbCByZWRlZmluZShHTGVudW0gZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxl
YXNlKTsNCisgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9DQorICAgIHZvaWQg
bWFya0NsZWFuKCkge21EaXJ0eSA9IGZhbHNlO30NCisNCisgICAgYm9vbCBpc1JlbmRlcmFibGVG
b3JtYXQoKSBjb25zdDsNCisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Ow0KKw0K
KyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQ0KKyAgICBHTHNp
emVpIGdldEhlaWdodCgpIGNvbnN0IHtyZXR1cm4gbUhlaWdodDt9DQorICAgIEdMZW51bSBnZXRG
b3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQ0KKyAgICBHTGVudW0gZ2V0VHlwZSgpIGNv
bnN0IHtyZXR1cm4gbVR5cGU7fQ0KKyAgICBib29sIGlzRGlydHkoKSBjb25zdCB7cmV0dXJuIG1T
dXJmYWNlICYmIG1EaXJ0eTt9DQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7
DQorDQorICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOw0KKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsNCisNCisgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsDQorICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7DQorDQorICAg
IHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRBbHBo
YURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRBbHBoYUZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVt
aW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQor
ICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBo
YUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAg
dm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9h
ZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsNCisgICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisg
ICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0K
KyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZENv
bXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICppbnB1dCk7DQorDQorICAgIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7DQorDQorICBwcml2YXRlOg0KKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSW1hZ2UpOw0KKw0KKyAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsN
CisNCisgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBS
RUNUICpyZWN0KTsNCisgICAgdm9pZCB1bmxvY2soKTsNCisNCisgICAgR0xzaXplaSBtV2lkdGg7
DQorICAgIEdMc2l6ZWkgbUhlaWdodDsNCisgICAgR0xlbnVtIG1Gb3JtYXQ7DQorICAgIEdMZW51
bSBtVHlwZTsNCisNCisgICAgYm9vbCBtRGlydHk7DQorDQorICAgIEQzRFBPT0wgbUQzRFBvb2w7
ICAgLy8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNp
bmNlIGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLg0KKyAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsN
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOw0KK307DQorDQorY2xhc3MgVGV4
dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdl
KERXT1JEIHVzYWdlKTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsNCisNCisg
ICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Ow0KKyAgICBib29sIGlzTWFuYWdlZCgpIGNv
bnN0Ow0KKyAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsNCisgICAgRFdPUkQgZ2V0VXNhZ2Uo
KSBjb25zdDsNCisgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsNCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJn
ZXQpIGNvbnN0ID0gMDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZSk7DQorDQorICAgIGNvbnN0IERXT1JEIG1EM0RVc2FnZTsNCisg
ICAgY29uc3QgRDNEUE9PTCBtRDNEUG9vbDsNCisNCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1U
ZXh0dXJlU2VyaWFsOw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlVGV4dHVyZVNlcmlh
bCgpOw0KKw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50VGV4dHVyZVNlcmlhbDsN
Cit9Ow0KKw0KK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QNCit7DQorICBw
dWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsNCisNCisgICAgdmlydHVh
bCB+VGV4dHVyZSgpOw0KKw0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsNCisNCisgICAgdmlydHVhbCBHTGVudW0gZ2V0
VGFyZ2V0KCkgY29uc3QgPSAwOw0KKw0KKyAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsNCisgICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7DQorICAgIGJvb2wg
c2V0V3JhcFMoR0xlbnVtIHdyYXApOw0KKyAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsN
CisgICAgYm9vbCBzZXRVc2FnZShHTGVudW0gdXNhZ2UpOw0KKw0KKyAgICBHTGVudW0gZ2V0TWlu
RmlsdGVyKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsNCisgICAg
R0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0Ow0K
KyAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCBib29sIGlzU2Ft
cGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOw0KKw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KmdldFRleHR1cmUoKTsNCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9
IDA7DQorDQorICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3Q7DQorICAgIGJvb2wg
aGFzRGlydHlJbWFnZXMoKSBjb25zdDsNCisgICAgdm9pZCByZXNldERpcnR5KCk7DQorICAgIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCk7DQorICAgIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7DQorDQorICAgIGJvb2wgaXNJbW11dGFibGUo
KSBjb25zdDsNCisNCisgICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RFWFRVUkVf
SUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFu
IGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBp
cyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuDQorDQorICBwcm90
ZWN0ZWQ6DQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQorICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAg
Ym9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQorDQorICAgIEdMaW50IGNy
ZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsNCisgICAg
R0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsNCisNCisgICAgdmlydHVh
bCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOw0KKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRleHR1cmUoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKSA9IDA7DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7DQor
DQorICAgIHN0YXRpYyBCbGl0ICpnZXRCbGl0dGVyKCk7DQorICAgIHN0YXRpYyBib29sIGNvcHlU
b1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7DQorDQorICAgIEdMZW51bSBtTWluRmlsdGVyOw0K
KyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsNCisgICAgR0xlbnVtIG1XcmFwUzsNCisgICAgR0xlbnVt
IG1XcmFwVDsNCisgICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOw0KKyAgICBHTGVudW0gbVVzYWdl
Ow0KKw0KKyAgICBib29sIG1EaXJ0eUltYWdlczsNCisNCisgICAgYm9vbCBtSW1tdXRhYmxlOw0K
Kw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOw0K
Kw0KKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KSA9IDA7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFnZTJEIDogcHVibGljIFRleHR1
cmVTdG9yYWdlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZTJE
KElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7DQorICAgIFRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsNCisNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOw0KKyAgICBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQorDQorICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBj
b25zdDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlU3RvcmFnZTJEKTsNCisNCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOw0KKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsNCit9Ow0KKw0KK2NsYXNz
IFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNp
dCBUZXh0dXJlMkQoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmUyRCgpOw0KKw0KKyAgICB2
b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKyAgICB2b2lkIHJl
bGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisNCisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7DQorDQorICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQg
bGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
DQorICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAg
IEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBib29sIGlz
Q29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNEZXB0aChHTGludCBs
ZXZlbCkgY29uc3Q7DQorDQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldENvbXBy
ZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAg
ICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9p
ZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb3B5SW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsNCisgICAgdmlydHVhbCB2
b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOw0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsN
CisgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOw0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7DQorDQorICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByb3RlY3RlZDoNCisgICAgZnJpZW5k
IGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKyAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7DQorDQorICBwcml2
YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsNCisNCisgICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsN
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7DQorDQorICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lk
IHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7DQorICAgIHZvaWQgY29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOw0KKw0KKyAgICBJbWFnZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOw0KKw0KKyAgICBUZXh0dXJlU3RvcmFnZTJEICptVGV4U3RvcmFn
ZTsNCisgICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBp
bnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVm
ZXJlbmNlcywNCisgICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMg
cHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcNCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3
aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBj
b3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJl
bmRlcmJ1ZmZlci4NCisgICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsNCisgICAg
dW5zaWduZWQgaW50IG1Qcm94eVJlZnM7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIFRleHR1
cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2Fn
ZSwgaW50IHNpemUpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUN1YmVNYXAoKTsN
CisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNl
VGFyZ2V0LCBpbnQgbGV2ZWwpOw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7DQorDQorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsNCisNCisgIHByaXZhdGU6DQorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOw0KKw0KKyAgICBJ
RGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3MgVGV4dHVyZUN1YmVNYXAg
OiBwdWJsaWMgVGV4dHVyZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZUN1
YmVNYXAoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmVDdWJlTWFwKCk7DQorDQorICAgIHZv
aWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAgIHZvaWQgcmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdDsNCisgICAgDQorICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNpemVpIGdldEhlaWdodChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBi
b29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorDQor
ICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2
b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBz
ZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorDQorICAgIHZvaWQgc2V0
Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKw0KKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsNCisgICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2b2lkIHN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKTsN
CisNCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7DQorDQorICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAgdmlydHVhbCBSZW5kZXJi
dWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgc3RhdGljIHVu
c2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7DQorICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsNCisNCisg
IHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7
DQorDQorICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgp
IGNvbnN0Ow0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7DQorICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpOw0KKw0KKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7DQorICAg
IGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsNCisNCisgICAgdm9pZCBzZXRJbWFn
ZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOw0KKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5WzZdW0lNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAq
bVRleFN0b3JhZ2U7DQorDQorICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNv
dW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsDQorICAgIC8vIGJl
Y2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4g
YSBiaW5kaW5nIHBvaW50ZXINCisgICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdv
dWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nDQorICAgIC8v
IHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRl
ciB0byBiZSBzZXQgdG8gTlVMTCBpZg0KKyAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywg
YnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuDQorICAgIFJl
bmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOw0KKyAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJv
eHlSZWZzWzZdOw0KK307DQorfQ0KKw0KICNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hf
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAppbmRleCA5
NWJjM2ZiLi43MGY0NzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApAQCAtMTMsNiArMTMsNyBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3ZlcnRleGNvbnZlcnNp
b24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJl
cGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0CiAKICAg
ICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmYXR0cmlicyA9IG1Db250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJ1dGVzKCk7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7
IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQog
ICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dy
YW0tPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICAgICAgdHJh
bnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dyYW1CaW5hcnktPmdldFNlbWFu
dGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKICAgICB9CiAKICAgICAvLyBEZXRlcm1p
bmUgdGhlIHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNlZCBidWZmZXIsIGFuZCBpbnZhbGlk
YXRlIHN0YXRpYyBidWZmZXJzIHRoYXQgZG9uJ3QgY29udGFpbiBtYXRjaGluZyBhdHRyaWJ1dGVz
CkBAIC00NDgsOCArNDUwLDggQEAgc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNhc3Q8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDMKIHRlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNE
VlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0
eXBlPiB7IH07CiAKIC8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28gdGhh
dCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6
ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9G
SVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBE
M0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252
ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxv
YXQ8R0xpbnQsIDE2PiB7IH07CiAKIC8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBm
b3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1
bHRWYWx1ZXMgKGkuZS4gMC8xKQogLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcAppbmRleCBlZThlY2E5Li5mYmEyNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKQEAgLTU0LDI2ICs1NSwxMjEgQEAgYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQorLy8gVmVyaWZ5IHRo
YXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40
LgorYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
KQoreworICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xf
UkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAg
IGNhc2UgR0xfQUxQSEE6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisK
KyAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgIC8vIGludmFs
aWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04K
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdC
QToKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgor
ICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Cisg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GTE9BVDoK
KyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfUkdC
OgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
UkdCQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAg
ICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAg
ICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAg
c3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5D
SUxfT0VTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
ICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0sIGZhbHNlKTsKKyAgICB9Cit9Citib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChi
b29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgIGlmIChjb21w
cmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBp
ZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KCkpCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoY29tcHJlc3NlZCkK
ICAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+
Z2V0V2lkdGgoMCkpIHx8IAorICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9
IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAogICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAm
JiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CkBAIC04OSw2ICsx
ODUsNDMgQEAgYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wgY29tcHJlc3NlZCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAo
Y29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGgg
IT0gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKKyAgICAgICAgICAgIChoZWlnaHQg
JSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4
dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwKKyAgICAgICAgeW9mZnNldCArIGhlaWdo
dCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIC8vIGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBl
IHRoYXQgYXJlIHZhbGlkIGZvciBSZWFkUGl4ZWxzCiBib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUo
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7CkBAIC0xMDk0LDcgKzEyMjcsNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2ZmcwogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRh
dGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBs
ZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZl
bCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTExMDIsNyArMTIzNSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJn
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xMjU4LDYgKzEzOTEsMTkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsZm9ybWEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
QEAgLTEzNTUsMjMgKzE1MDEsMzEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0wKICAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpOwogICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOwogICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxM
OworICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwogCiAgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgs
IGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleDJkKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFk
eSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleDJkLT5nZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleDJkOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgdGV4Y3ViZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXhj
dWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gdGV4Y3ViZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0xlbnVtIHRl
eHR1cmVGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0g
dGFibGUgMy45CiAgICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpCkBAIC0xNDE0LDYg
KzE1NjgsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0yMzA2LDE5ICsyNDYzLDIxIEBAIHZvaWQg
X19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKHRleC0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmUyRCAqPih0ZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgpAQCAtMjMyNiwxMSArMjQ4NSwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gdAogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAh
PSBHTF9URVhUVVJFX0NVQkVfTUFQKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJF
X01BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwgbGV2
ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CkBAIC0yNDQwLDI4ICsyNjA2LDQxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBt
YXAoR0xlbnVtIHRhcmdldCkKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KICAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4MmQtPmlzRGVwdGgoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+Z2VuZXJhdGVNaXBt
YXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlw
bWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI3NTksMTIgKzI5MzgsMTMgQEAgaW50IF9fc3RkY2FsbCBn
bEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJpYnV0ZUxvY2F0aW9uKG5h
bWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEF0dHJpYnV0ZUxvY2F0
aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
QEAgLTMyMTgsNyArMzM5OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWlu
dCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkgIT0g
TlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkFM
SURBVEVfU1RBVFVTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5p
c1ZhbGlkYXRlZCgpOwpAQCAtMzI0MSw2ICszNDIxLDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BST0dS
QU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMzc2
NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1m
dihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlv
biwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4MDAs
MTIgKzM5ODksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtZnYoR0x1aW50IHByb2dy
YW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpCiAKICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxv
Y2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEws
IHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NDAsMTcgKzQwMzUsMTgg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXoKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRp
b24sICZidWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5n
ZXRVbmlmb3JtaXYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC0zODc5LDE3ICs0MDc1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VW5p
Zm9ybWl2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcykKIAog
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzkzMCwxMiArNDEyNywxMyBAQCBpbnQg
X19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIqIG5hbWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1M
b2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlm
b3JtTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtNTAxMiw2ICs1MjEwLDI2IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9
CiAKKyAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9IQUxG
X0ZMT0FUX09FUzoKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlw
ZT4gY29tYmluYXRpb25zCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElO
VkFMSURfRU5VTQorICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0
aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAg
ICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgpAQCAtNTAyNCw3ICs1MjQyLDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FU
X09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CkBAIC01MDM2LDcgKzUy
NTQsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6CkBAIC01
MDQ5LDcgKzUyNjcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0JH
UkFfRVhUOgpAQCAtNTA1OCw3ICs1Mjc2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBm
b3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwpAQCAtNTA2Niw4ICs1Mjg0
LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VT
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYm9yZGVyICE9IDAp
CkBAIC01MTQ2LDYgKzUzODMsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRl
cHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKKyAgICAgICAgICAgICAgICAvLyBidXQgQU5H
TEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0g
TlVMTCB8fCBsZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NDE2LDYgKzU2NzAsMjUgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGYKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3Rl
eHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCisgICAgICAgICAgICAgICAgaWYg
KGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3NTcsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIWdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4
ZWxzID09IE5VTEwpCisgICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQs
IHR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KICAgICAgICAgfQogCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CkBAIC01
NTE3LDExICs1Nzg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZv
cm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4
dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJl
IGRvZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFs
aWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyArNTgxNSw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhl
aWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCisgICAgICAg
ICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQog
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU2MjIsNyArNTkxNCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2NjgsNyArNTk2NiwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTcxNCw3ICs2MDE4LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTc2MCw3ICs2MDcwLDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODA2LDcgKzYx
MjIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNp
dihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODUy
LDcgKzYxNzQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4OTgsNyArNjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU5MzgsNyArNjI3MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTk3OCw3ICs2MzE4LDEz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJh
bnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwNTQsNyAr
NjQwNiw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwcm9ncmFt
ICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAocHJv
Z3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTY0NjMsNiArNjgxNSw3OSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5T0VT
KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3JtYXQsIHZv
aWQgKmJpbmFyeSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYnVmU2l6
ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBiaW5hcnkg
PSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlG
b3JtYXQsIGJpbmFyeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklOQVJZX0FO
R0xFOworCisgICAgICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFy
eU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0gMHgleCwg
YmluYXJ5ID0gMHglMC44cCwgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5h
cnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1hdCAhPSBH
TF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJpbmFyeShO
VUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFBy
b2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24K
QEAgLTY0OTksNyArNjkyNCw4IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqCiAgICAgICAgIHsi
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAg
IHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1C
aW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFBy
b2dyYW1CaW5hcnlPRVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6
ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
dmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
dmNwcm9qCmluZGV4IDdkMmI2NDkuLjNiYzgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKQEAgLTQwMSw2ICs0
MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDkxLDYgKzQ5
NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAppbmRleCA3Y2EyZDlmLi43YmIy
MjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
dGh1dGlsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRo
dXRpbC5oCkBAIC03MCwyNiArNzAsNiBAQCBpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0
IHgpCiAgICAgfQogfQogCi1pbmxpbmUgUkVDVCB0cmFuc2Zvcm1QaXhlbFJlY3QoR0xpbnQgeCwg
R0xpbnQgeSwgR0xpbnQgdywgR0xpbnQgaCwgR0xpbnQgc3VyZmFjZUhlaWdodCkKLXsKLSAgICBS
RUNUIHJlY3QgPSB7eCwKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAtIHkgLSBoLAot
ICAgICAgICAgICAgICAgICB4ICsgdywKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAt
IHl9OwotICAgIHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgaW50IHRyYW5zZm9ybVBpeGVsWU9m
ZnNldChHTGludCB5b2Zmc2V0LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAg
IHJldHVybiBzdXJmYWNlSGVpZ2h0IC0geW9mZnNldCAtIGg7Ci19Ci0KLWlubGluZSBHTGVudW0g
YWRqdXN0V2luZGluZyhHTGVudW0gd2luZGluZykKLXsKLSAgICBBU1NFUlQod2luZGluZyA9PSBH
TF9DVyB8fCB3aW5kaW5nID09IEdMX0NDVyk7Ci0gICAgcmV0dXJuIHdpbmRpbmcgPT0gR0xfQ1cg
PyBHTF9DQ1cgOiBHTF9DVzsKLX0KLQogaW5saW5lIGJvb2wgc3VwcG9ydHNTU0UyKCkKIHsKICAg
ICBzdGF0aWMgYm9vbCBjaGVja2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXggNjU4OWViMS4uYTdjNjJk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9y
bWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQorewor
ICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9
PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0
ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENv
bXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICBj
YXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewpAQCAtMzMz
LDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQp
CiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBv
ZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3Jt
YXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVy
biAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVudW0gRXh0cmFjdEZvcm1h
dChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkK
QEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxm
b3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdMX0JHUkE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NP
TVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAv
LyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0gRXh0cmFj
dFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FU
X09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAg
ICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBA
IC02MzgsOSArNjEyLDYgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVt
IGN1YmVGYWNlKQogewogICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVNQVBfRkFD
RV9QT1NJVElWRV9YOwogCi0gICAgLy8gTWFwIGEgY3ViZSBtYXAgdGV4dHVyZSB0YXJnZXQgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgIEQzRCBzdXJmYWNlIGluZGV4LiBOb3RlIHRoYXQgdGhlCi0gICAg
Ly8gWSBmYWNlcyBhcmUgc3dhcHBlZCBiZWNhdXNlIHRoZSBZIGNvb3JkaW5hdGUgdG8gdGhlIHRl
eHR1cmUgbG9va3VwIGludHJpbnNpYyBmdW5jdGlvbnMKLSAgICAvLyBhcmUgbmVnYXRlZCBpbiB0
aGUgcGl4ZWwgc2hhZGVyLgogICAgIHN3aXRjaCAoY3ViZUZhY2UpCiAgICAgewogICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CkBAIC02NTAsMTAgKzYyMSwxMCBAQCBE
M0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpCiAgICAgICAg
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X1BPU0lUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVf
WTsKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOwogICAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAg
ICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7CkBAIC03NjcsNiArNzM4LDcgQEAg
RDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKICAg
ICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAg
ICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgY2Fz
ZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9BOFI4RzhCODsKQEAgLTc5NCw2ICs3NjYsMTAgQEAgbmFtZXNwYWNlIGR4MmVzCiAK
IHVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKIHsK
KyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJl
dHVybiA4OworICAgIH0KICAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKICAgICB7CiAgICAgICBj
YXNlIEQzREZNVF9EMjRGUzg6CkBAIC05MDQsNiArODgwLDEwIEBAIHVuc2lnbmVkIGludCBHZXRC
bHVlU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCiAKIHVuc2lnbmVkIGludCBHZXREZXB0aFNp
emUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQogeworICAgIGlmIChkZXB0aEZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiAyNDsKKyAgICB9CiAgICAgc3dpdGNoIChk
ZXB0aEZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6ICByZXR1
cm4gMTY7CkBAIC05NjUsNiArOTQ1LDE2IEBAIGJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJc0RlcHRoVGV4
dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZh
Y2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3RlbmNpbFRleHR1cmVGb3Jt
YXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0
ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCkBAIC05OTEsNiArOTgxLDEwIEBAIEdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogCiBHTGVudW0gQ29udmVydERlcHRo
U3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
CisgICAgfQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0Qx
NjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGll
cy5oCmluZGV4IDg4MjM4ZGMuLmNmMjI0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5jbHVk
ZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCko
TUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05V
TEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVz
cGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6
ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCiBH
THNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1h
dCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0
KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZv
cm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIApAQCAt
NzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7
CiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwogYm9vbCBJ
c0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogYm9vbCBJc0Zsb2F0MTZG
b3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZUZvcm1h
dChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNpbFRleHR1cmVGb3JtYXQo
RDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlz
YW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggNmQzZGE3Zi4uMzhlMzJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIzMTMsNyAr
MjMxMywyMCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGlj
cy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RE
aXNjb250aW51aXR5LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCkBAIC0yMzIx
LDYgKzIzMzQsNyBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1l
ZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9p
bnRlcm1PdXQuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1UcmF2ZXJzZS5jcHAKQEAgLTIzMzMsMjIgKzIzNDcsNTIgQEAgSUYgKEVOQUJMRV9X
RUJHTCkKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNl
Q29uc3QuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUhlbHBlci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1ByYWdtYS5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5j
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9MZXhlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8u
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVu
Y3Rpb24uaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2Vh
cmNoU3ltYm9sLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE4ODQ4ODkuLjczOGE5
NzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yNyAgTWF4IFZ1am92aWMg
IDxtdnVqb3ZpY0BhZG9iZS5jb20+CisKKyAgICAgICAgVXBkYXRlIEFOR0xFIGluIFdlYktpdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgdG8gcjExNzAuCisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogVGFyZ2V0LnByaToKKwogMjAxMi0wNi0yNyAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBFbGVtZW50OjplbGVtZW50UmFy
ZURhdGEoKSBhbmQgRWxlbWVudDo6ZW5zdXJlRWxlbWVudFJhcmVEYXRhKCkgcHJpdmF0ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzVlYzJlYy4uMDg2NjEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01ODk4LDggKzU4OTgsMjEgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRV
bmlvbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3RSZWN1cnNpb24uY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGV0ZWN0UmVjdXJzaW9uLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXApAQCAtNTkxMiw2ICs1OTI1LDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZUdsb2JhbHMuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBcCkBAIC01OTM1LDYgKzU5NDksNyBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9QYXJzZUhlbHBlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmggXApAQCAtNTk0NCw2ICs1OTU5LDI5IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9sZW5ndGhfbGltaXRzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Mu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmMgXApAQCAtNTk1Nyw2ICs1OTk1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKQEAgLTU5
NjUsNiArNjAwNCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9yRVNTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuY3BwIFwKQEAgLTU5NzIsOCArNjAxNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNw
cCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2ly
Y3VpdC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCA3Yjk2Yjc2Li45ZjUxYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTYs
NyArMzk1NiwxMyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbW1vbi5oIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlYnVnLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIFwKQEAgLTM5NzEsMTEgKzM5NzcsMjQgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9NTWFwLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01hcExvbmdW
YXJpYWJsZU5hbWVzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL29z
aW5jbHVkZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9QcmFnbWEu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NvbXBpbGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBcCkBAIC0zOTkwLDE0ICs0
MDA5LDE3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
R0xTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
SExTTC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UeXBlcy5oIFwK
LSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCkBAIC00
MDEwLDEzICs0MDMyLDIxIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
dGFiLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5mb1Npbmsu
Y3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNw
cCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9JbnRl
cm1lZGlhdGUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9pbnRl
cm1PdXQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9JbnRlcm1U
cmF2ZXJzZS5jcHAgXApAQCAtNDAyOSwxNSArNDA1OSwyOCBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3Bh
cnNlQ29uc3QuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Bvb2xB
bGxvYy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxp
dmUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9SZW1vdmVUcmVl
LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9s
LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNw
cCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwIFwKLSAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmNwcCBcCiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAg
XAo=
</data>
<flag name="commit-queue"
          id="158016"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149975</attachid>
            <date>2012-06-28 11:15:32 -0700</date>
            <delta_ts>2012-06-28 13:34:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1716208</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLjhiNzM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDODE1OUMy
MUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNF
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
QTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
RDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Yy
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9OworCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAq
LzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1
MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJ
CUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
Ki87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlD
MjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIx
Q0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2
ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlB
MjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2
ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1
QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xT
TC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhF
NjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsK
QEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQy
QUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9
OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYgKzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZF
OTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2
MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25v
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3Rp
Y3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGlj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NEMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNz
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QyMTU5QzIx
Q0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENDE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENTE1OUMy
MUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDYxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDcxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U0
MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNzE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5k
ZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJGMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzUxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMw
MDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJB
TkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlGQjM5RDE4NjEy
MDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDE4
NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIsMTUgKzI0OSwxMSBAQAogCQlGQjM5RDFD
MDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQx
QzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyog
U3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0IxMjAwRjI2MjAwMDg4
RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gdGV4dC54bWw7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9qOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQzMTIw
MEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAogCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5m
b2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNo
YWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMzNiw2MiBAQAogCQkJcGF0aCA9IENvbmZp
Z3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI2NTY3QzUx
NTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi8s
CisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1
NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2
NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1
NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1
NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
Q0UxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2
N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
LAorCQkJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2
NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4
NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5
IC8qIFByZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBT
b3VyY2VMb2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bi5jcHAgKi8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJ
CQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2
NTY3RTgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBuZXc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMy
M0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0g
ZGVwZ3JhcGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1
OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2
ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAor
CQkJKTsKKwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlGQjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4
OEU2OSAvKiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlE
MTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2
MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIw
MEYyNjIwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2
MjAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkg
LyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVj
dERpc2NvbnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovLAogCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTMyNywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNo
SGFuZGxlLmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCAqLywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAq
LywKLQkJCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNw
cm9qICovLAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wu
dmNwcm9qICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLywKIAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAq
LywKIAkJCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5
RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFE
MzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3Qjgx
NTlDMjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWlu
Y2x1ZGVJbkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYg
QEAKIAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVC
RDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJE
MSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91
dHB1dEVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRF
U1NMLmggKi8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuaCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJ
CQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
ICovLAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAw
ODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmggKi8sCisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJ
CTQ5OTUxQzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJ
CTQ5OTUxQzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2
N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJF
MTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNB
RkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZF
ODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0Iw
MDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xz
bGFuZ190YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
X3RhYi5oICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8s
CiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlG
QjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBA
QAogCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywK
IAkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJ
CUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJ
CUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LywKIAkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oICovLAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovLAogCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywK
IAkJCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlG
QjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZC
MzlEMjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJ
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
CiAJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIz
ODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURD
QjAwMkQ0MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEw
MDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJF
QkQxIC8qIE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAv
KiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuY3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNM
LmggKi8sCisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCAqLywKKwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJ
CQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlG
QjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0
MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4
NTM5IC8qIFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVw
cm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5
MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5
QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYz
NUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWlu
ZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3Bw
ICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICov
LAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8s
CiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJ
CQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAw
RjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYw
MDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyog
dXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAw
ODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZC
MzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1
QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyog
Y29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMw
MDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0
QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAv
KiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAv
KiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vz
c29yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291
cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC01ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAw
MDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAw
RjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1Mzkg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMy
MUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmI2OTQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUzIEBACisyMDEyLTA2LTI3
ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAg
ICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5n
bGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBp
bGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6Cisg
ICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAo
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAg
IChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNo
KToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6
OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRp
ZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFk
aWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGlu
dWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6
OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgor
ICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNz
Ojp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGlj
cyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3Ip
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVy
OjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChU
RGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToK
KyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlv
clN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAg
ICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0
KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRl
eHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAg
ICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91
dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Omhl
YWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZp
c2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6
CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0
SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNp
emUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0
ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVu
c2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0
QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAg
KFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAg
ICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6
VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJl
bmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZh
cmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAg
ICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0
Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFy
eSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6Cisg
ICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6
OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6
CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3Bw
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9y
Q3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlv
bik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3Jh
cGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToK
KyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6
VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFy
ZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3Jh
cGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1
bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgor
ICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3lt
Ym9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24p
OgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAo
VEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVj
dGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAg
ICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBo
TG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRH
cmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAg
ICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVn
aW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVy
U3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6
OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJr
VmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3Rh
Y2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6Omdl
dFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNl
dFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1h
aW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAg
ICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWlu
ZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dp
Y2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5p
bmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAg
ICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToK
KyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGds
c2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5n
X3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAg
KFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFn
Z3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJ
bnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHBy
YWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNy
byk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25kaXRpb25hbERpcmVj
dGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxFT0QpOgorICAgICAg
ICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJlZGVmaW5lZCk6Cisg
ICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZp
bmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjps
ZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAgICAgICAocHA6OkRp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Up
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVBy
YWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgorICAgICAgICAocHA6
OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0
aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25J
Zik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAg
ICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBh
cnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFy
c2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6Oklu
cHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oOgorICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0
Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5w
dXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6Okxv
Y2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6TWFjcm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChwcCk6CisgICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpU
b2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6On5NYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgor
ICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05l
eHRUb2tlbkxlZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3Jv
KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6
OmNvbGxlY3RNYWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VN
YWNyb1BhcmFtcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5k
ZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
OjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRl
cjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFj
cm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4
dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJv
Y2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQp
OgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nl
c3Nvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRp
b246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHA6CisgICAgICAgIChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAg
ICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAg
IChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oOgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tl
bik6CisgICAgICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRv
a2VuOjpoYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNh
YmxlZCk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAg
ICAgICAoeXlfdHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9n
ZXRfcHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAg
IChpbnB1dCk6CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1
ZmZlcik6CisgICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVh
dGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5p
dF9idWZmZXIpOgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9i
dWZmZXJfc3RhdGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAg
IChwcF9zY2FuX3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5
X2ZhdGFsX2Vycm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xp
bmVubyk6CisgICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAg
ICAgICAocHBnZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRf
dGV4dCk6CisgICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgor
ICAgICAgICAocHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBw
c2V0X291dCk6CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6
CisgICAgICAgIChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAo
cHBnZXRfbGxvYyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQp
OgorICAgICAgICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMp
OgorICAgICAgICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgor
ICAgICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChw
cHJlYWxsb2MpOgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5p
emVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6c2V0RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVt
YmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5l
cik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENv
bnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5l
cmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJ
bnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6
CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbFVzYWdlKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OmJlZ2luRXJyb3IpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNT
YW1wbGluZ09wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgor
ICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVz
dHJpY3Rpb25zKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJv
cnMpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlz
cGxheS5oOgorICAgICAgICAoRGlzcGxheSk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcDoKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OmluaXRpYWxpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpz
d2FwUmVjdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3Vi
Y2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4pOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpzd2FwKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcik6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpZHRoKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
SGVpZ2h0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldFN3YXBJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
c2V0Qm91bmRUZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wv
bGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0Q2xlYXJEZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNDdWxsRmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxNb2Rl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEZXB0aFRlc3RF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJs
ZW5kKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRC
bGVuZENvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNl
dEZpbGwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Ft
cGxlQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclRlc3QpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGl0aGVyRW5hYmxl
ZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFZpZXdwb3J0UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1z
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QWN0aXZlU2Ft
cGxlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFj
dGl2ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrQWxpZ25t
ZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja1JldmVy
c2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVTaGFk
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZlbmNlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVR
dWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjplbmRRdWVy
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmVuY2UpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGbG9hdHYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzeW5jKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3TGluZUxvb3ApOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnJlY29yZEludmFsaWRFbnVtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24p
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldEVycm9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZXNldFN0
YXR1cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNFdmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzT2Nj
bHVzaW9uUXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVy
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2
ZWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmN1bGxTa2lwc0RyYXcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmlzVHJpYW5nbGVNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdFJlbmRl
cmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6On5GcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldE51bGxDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOgorICAgICAg
ICAoRnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChnbCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJp
bmRpbmdzKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRp
bmdzKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpJbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjp+SW5mb0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpJbmZvTG9nOjpnZXRMb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZFNh
bml0aXplZCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kKToKKyAgICAgICAgKGdsOjpJ
bmZvTG9nOjpyZXNldCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6flByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmF0dGFjaFNo
YWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCk6CisgICAgICAgIChnbDo6QXR0cmli
dXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rKToK
KyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRQ
cm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dmFsaWRhdGUpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1Byb2dyYW0uaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKEF0dHJpYnV0ZUJpbmRpbmdz
KToKKyAgICAgICAgKEluZm9Mb2cpOgorICAgICAgICAoUHJvZ3JhbSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAgICAgICAgKGdsOjpzdHIpOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToK
KyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFk
ZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1h
dHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0
cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAg
KGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdp
c3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAg
ICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAg
ICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJl
bGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVu
Y2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChn
bDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIp
OgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0
VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAg
IChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAg
ICAgICAoZ2w6OkltYWdlOjp+SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6aXNSZW5kZXJhYmxlRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OnNldE1hbmFnZWRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZEFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1p
bmFuY2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRl
RGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkUkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdl
Ojp+VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1
cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJp
YWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRNaW5GaWx0ZXIpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnNldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBUKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWluRmlsdGVy
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwVCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFn
ZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycyk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6aGFzRGlydHlJbWFnZXMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnJlc2V0RGlydHkpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aXNJ
bW11dGFibGUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRC
bGl0dGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJE
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVy
ZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWln
aHQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OnJlZGVmaW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJ
bWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omlz
RGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0
aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9z
Wik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmZhY2VJbmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVm
aW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2Vu
ZXJhdGVNaXBtYXBzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoSW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6
OkltYWdlOjptYXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEZvcm1h
dCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldFR5cGUpOgorICAgICAgICAoZ2w6OkltYWdlOjpp
c0RpcnR5KToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUpOgor
ICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAgICAg
ICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGds
OjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUp
OgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAg
IChnbDo6RXh0cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0cmFjdFR5cGUpOgorICAgICAg
ICAoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAg
ICAoZHgyZXM6OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQpOgorICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgyZXM6OklzU3RlbmNpbFRleHR1
cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisgICAgICAgIChnbCk6CisgICAg
ICAgIChkeDJlcyk6CisKIDIwMTItMDYtMjIgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJm
aWVsZEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTYW5pdGl6ZSBHTFNMIGNvZGUg
dXNpbmcgQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9n
bDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgsMTEgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8qIEdMX0FO
R0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Cisj
ZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRl
bnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIsMTEgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2Vu
ZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3By
b2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggYTNmYzkzNS4uOWE0
YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJz
aW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVu
dGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1Cisj
ZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2lu
ZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3
ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9T
UEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMg
PSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhl
IFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAg
Ly8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBE
aXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENT
UyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFn
Q29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQt
aW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0
KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVy
IHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVj
dGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlz
IG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8v
IEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBh
c3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25t
ZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9k
ZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVj
OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewog
ICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8v
IFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBk
cml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAg
U0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBh
biBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0
aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8g
dGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2Ug
dGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNw
ZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVT
VFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBl
bmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmlj
dGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVm
ZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVy
IHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRh
aW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5
cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAw
CiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQwOWI2MjIuLjU2NWRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyog
ZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJE
MjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgy
NSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdC
MzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRv
ckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjEx
MUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZF
IC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhD
IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9
OworCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9Owor
CQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEw
MDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9
OworCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMx
QTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4
cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIw
MTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tl
bi5jcHAgKi87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4Mzgx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMy
NEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi87IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUz
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICov
OyB9OworCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07
CisJCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAgKi87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsg
fTsKKwkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1
OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJl
bW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9s
cy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3
MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVC
RThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJj
ZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3
OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJs
ZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThE
Q0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVt
b3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAw
NzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRC
IC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CkBAIC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBR
dWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNs
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMx
M0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyog
RGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlh
Z25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMz
MUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9u
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyRjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBf
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVw
cm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9s
aW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0
UmVjdXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
cmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYw
MEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRl
Y3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5
QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2
ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlF
OTkwMiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRy
YW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1P
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEw
QkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMy
MUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xh
dG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2
MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hT
eW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KwkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5
M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZE
QSAvKiBjcHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0
LmMgKi8sCisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LywKIAkJCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMx
Mzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMx
QTAwMEU1N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBh
cnNlci5oICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmgg
Ki8sCiAJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0
MSwxNSArMzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRG
REI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENC
RURGMUM5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1
NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVC
NzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAx
N0M0NCAvKiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29t
cGlsZXIuY3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
KwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0
QjE1OUMzMjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJF
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0Mx
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAv
KiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGds
c2xhbmcuaCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXgu
Y3BwICovLAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAg
Ki8sCisJCQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJ
CQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0Iy
OTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3
QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAog
CQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJ
CQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEy
MDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywK
IAkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAotCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCiAJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8s
Ci0JCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2
MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdF
NUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJE
NDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFC
NTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEz
QjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBB
IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3Nv
dXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1
dEVTU0wuY3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NM
LmggKi8sCiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
LApAQCAtMjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyog
T3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0
cHV0SExTTC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhM
U0wuaCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAg
Ki8sCiAJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywK
IAkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlC
NjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAy
ODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0
RjAwRTU3QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAv
KiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlm
aWVyQWxpdmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJl
ZS5jcHAgKi8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAq
LywKKwkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywK
IAkJCQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJ
CQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2
NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAw
QTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVG
QUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAq
LywKIAkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
LAogCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAog
CQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBA
IC0yOTIsMjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5z
bGF0b3JITFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmgg
Ki8sCi0JCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8s
Ci0JCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJ
CUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAor
CQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywK
KwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIx
NUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFE
NTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzEx
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8q
IFZhcmlhYmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJz
aW9uR0xTTC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25H
TFNMLmggKi8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
LQkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50
ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
Ci0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJ
CUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5
OTAyIC8qIHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNv
bXBpbGVyOwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
CisJCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAor
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAor
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0
NCw2ICs0OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xh
dG9yX2NvbW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFu
c2xhdG9yX2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJh
bnNsYXRvcl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2Nv
bW1vbi5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJy
YXJ5LnN0YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJ
YnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFt
ZSA9IHByZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9o
bHNsIiAqLzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZl
cnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJ
CWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVu
LAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXBy
b2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3
IEBACiAJCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
LAogCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJ
CQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlB
MjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsK
IC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0
QjRCREU3QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRT
ZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8q
IFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBF
NTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OworCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4
NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4
QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0
ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdC
QkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5
QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
KwkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJ
CSk7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVk
ZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JC
RSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0Vc
IiIsCisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMg
PSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUg
PSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJ
CX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYg
KzkxMSwxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0Mw
MEU1N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
cHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBE
ZWJ1ZyAqLywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xh
dG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIuLjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBA
CiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmlu
ZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJ
TFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVy
c2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5k
ZXggMjAzYzQyMS4uYmRkMTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQog
I2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5l
IEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVm
aW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZ
KHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5h
bWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiBy
ZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9l
bXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5
WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4
KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4o
eVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQg
eCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFu
KHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNv
cyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00
MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2Vt
dSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsg
cmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5
WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0
dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJd
KSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVf
ZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAg
Y29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CiB9OwogCiBj
b25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsg
fSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2Vt
dV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVf
cHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkg
eyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmds
X2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIs
CiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIs
CisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgp
IC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3Rh
bmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2Uo
dmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0
LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+
PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0
aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVj
NCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAw
LjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAo
TikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2
ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywg
dmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQp
IgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJp
dmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1v
ZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAt
MTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBX
b3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAv
LyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRh
bjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExF
X18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVz
ZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIK
ICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRv
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Cisg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFf
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UK
KyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEw
ICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0g
ewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODks
NyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAg
ZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFf
MTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9u
RG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25S
ZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
CmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBA
IC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAg
ICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4x
XzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25B
dGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFu
M18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80
LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAv
LyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0
IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVu
Y3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRl
OgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAg
ICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAg
IFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBU
RnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0
aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1v
ZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGYyN2NiNzUuLmNhYjgwNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApAQCAtOCwxMCArOCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMg
c3BlYykKK3sKKyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNI
X0NTU19TSEFERVJTX1NQRUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1i
b2xUYWJsZSgKQEAgLTEyMyw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcg
YXMgd2VsbC4KLSAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKQorICAgIGlmIChp
c1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGgg
b2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3Mu
CkBAIC0xNjEsNiArMTcyLDEyIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIq
IGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAm
IFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNo
YWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NT
aGFkZXIocm9vdCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VS
X0lOREVYKSkKICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRl
Z2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBAIGJvb2wg
VENvbXBpbGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCiAgICAgfQogfQog
Cit2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sK
KyAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICBy
b290LT50cmF2ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2
YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwogICAgIHJldHVybiB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCiti
b29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCwgYm9vbCBvdXRwdXRHcmFwaCkKK3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9T
UEVDKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVz
dCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7
CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0
cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFn
bWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRH
cmFwaCkgeworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1Np
bmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFw
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgfQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2lu
ay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAg
IHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJl
dHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpj
b2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMjMyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBD
b250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBv
ZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChp
bXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlv
bnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsK
K30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUt
PmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAg
bUxvb3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BE
aXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdy
YWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFk
aWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAg
ICAgY2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGll
bnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmICht
R3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisK
KyAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAg
bmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0
dXJlQ3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2Fs
bGVkLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQg
dG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRP
cGVyYXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9k
ZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9k
ZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YmRhNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApAQCAtMCwwICsxLDUwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3
aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBm
dW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3Jh
ZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNU
RElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisK
K25hbWVzcGFjZSBzaAoreworLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEg
dmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51
aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJh
dmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJv
b2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51
aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rp
b25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlv
biA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBt
R3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24o
VEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJ
U0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVmOTNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VM
b2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdu
b3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBz
ZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
KyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJv
ciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4
KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUp
KTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIg
PDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQor
Cit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQzYTEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDM5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBD
T01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9z
dGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9z
dGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsK
KworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAg
IHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHRva2VuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisK
KyAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYg
bUluZm9TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhh
bmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjZhYjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlh
Z25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVx
dWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIgPT0g
a1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxl
KSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJu
IEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsK
KyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAg
IDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxl
cigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0wo
IlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1p
emUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wgcHJh
Z21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAgICAg
IC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFs
aWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BS
QUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnZh
bGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21h
IHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdv
ZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisgICAg
VEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlh
Z25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3Ii
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh
bm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3Ig
aXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJp
dHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
KyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAgICAg
Y2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0eSA9
IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbURp
YWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3ZvaWQg
VERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9u
KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAodmVy
c2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9
IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25v
c3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNp
b24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDNkZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJl
Y3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoK
KyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAor
ICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEo
KSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBt
UHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAg
IFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
SVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAppbmRleCBlOWJiYTRiLi42MDQwOTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RXh0ZW5zaW9uQmVoYXZpb3IuaApAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9FWFRFTlNJT05f
QkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURf
CiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVk
ZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAgICAgRUJoUmVx
dWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsyMSwxNyBAQCB0
eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJl
aGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAg
ICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICBy
ZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJldHVybiAid2Fy
biI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlzYWJsZSI7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2goYikKKyAgICB7
CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVC
aEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndh
cm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVm
YXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0cmluZywgVEJl
aGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9u
IG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2
aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNlOTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1w
bGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRz
KFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykK
IHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0
cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2Vz
KQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
IiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdC
dWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0
dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRp
YWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAg
IGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHJlc291cmNlcykpOwor
ICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291
cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKICAgICAvLwogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3Jk
IiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdD
b29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShF
YnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJh
Z0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250
RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsK
KworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBn
bF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAg
ICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZh
aWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19T
UEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAg
IDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcg
KzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJp
YWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjog
eworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9D
U1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBU
aGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0
YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQwY2Y1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRM
UyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NU
TFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgo
dGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sK
KyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJz
ZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0
aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExT
VmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBh
cnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250
ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYg
KGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVl
ZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQ
YXJzZUNvbnRleHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmluZGV4IDc2MGZkMDku
LmFhNTNiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApAQCAtMTMsNCArMTMsMTQgQEAg
Ym9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBUUGFyc2VDb250
ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVy
biBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5l
IEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0
cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4u
OTJjNDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5v
ZGUsCiAvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFu
IGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8g
aXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVn
YXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRl
cm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0
b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1O
b2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZVBhaXIgbm9kCiAgICAgLy8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYg
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAo
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7
CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9k
ZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5v
ZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAg
IH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihj
b25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCog
Y29uZCwgVEludGVybVR5cGVkKiB0cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgog
ICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9u
KGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAg
IG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
IG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0NDQsOSArMTQ0
NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24o
VEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1DCiAgICAgcmV0dXJuIGFkZENvbnN0YW50VW5p
b24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5n
ZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJh
eSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRU
b1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQotewotICAgIGFzc2VydCgh
cHJhZ21hVGFibGUpOwotICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOwotICAg
ICpwcmFnbWFUYWJsZSA9IHBUYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4
IDBjN2UxYTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyAr
MTUsOSBAQCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuY3BwCmluZGV4IDY5YjhjMjYuLmQ3ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIg
QEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAs
MTMgKzIyLDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hh
ciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwog
fQogCiBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAg
ICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBt
VW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlz
KTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0g
ZmFsc2U7CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNv
bnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1V
c2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxz
ZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQg
PSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAg
IG1TY29wZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBm
YWxzZTsKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRl
bGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgp
CiB7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250
aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2
ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQg
aGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1Cb2R5LmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRl
ci5jX3N0cigpOworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
CiB9CiAKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1
LDI1ICsyMTksMTEgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwg
IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVy
ZSBmZXRjaCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBh
bm90aGVyLiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBh
Y2NvcmRpbmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9t
IGxlZnQiLCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAg
ICAgIC8vIGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rp
b25zIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAg
ICAgICAgLy8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVu
Y3Rpb25zIGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSBzaW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+
IDEtWSwgd2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAv
LyBUaGUgdGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVz
ZSB0aGUgcHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwot
ICAgICAgICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1os
IHdoaWNoIGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gRm9yIGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBb
LTEsIDFdIC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3Ig
dGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndy
b25nIHNpZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFu
Z2luZyB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJv
dWdob3V0IHRoZSBjb2RlLgotICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQog
ICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MjMyLDcgKzIzMiw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBi
aWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
cHJvaihzLCBmbG9hdDQodC54LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikp
O1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgog
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQu
dykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtc
biIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAg
ICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
ICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQueiwgMSAtICh0LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQudywgMSAtICh0LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0
LngsIC10LnksIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkUocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlh
cyhzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBh
dmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNl
ZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
LCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2Qw
X2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVs
b2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBu
b2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC05NzMsOSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEp
CiAgICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAi
LCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Zl
Y3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7
IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIp
OyBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgogICAgICAgICBtVXNlc1hvciA9IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIiki
KTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMi
IDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApA
QCAtMTEzMSw5ICsxMjAxLDM2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotICAg
ICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIs
ICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5
KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BG
d2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAt
MTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0
aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZp
c2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDog
IigiKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWlu
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFp
bigiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigi
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZh
cmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
IAotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0g
c2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1
bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAg
ICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdl
dFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
YXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3Vt
ZW50U3RyaW5nKHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJn
dW1lbnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2Vx
dWVuY2UuYmVnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAg
ICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAg
ICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0Nywx
MDYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVu
bWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9
IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIg
OiAiKCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikK
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWxvZDApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2ooIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2pMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAg
ewpAQCAtMTU4MywxMSArMTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgaWYgKG5vZGUtPnVz
ZXNUZXJuYXJ5T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9s
ZFNlbGVjdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91dCA8PCAicyIgPDwg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CiAgICAgfQogICAg
IGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0
LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1VbmZvbGRTaG9ydENp
cmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAgICAgICBvdXQgPDwg
ImlmKCI7CiAKQEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKIAogICAgICAgICBp
ZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8PCAiO31cbiI7Cisg
ICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCiAgICAg
ICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgIG91
dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKIAogYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIGlmICghbUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBp
ZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAg
ICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiAK
ICAgICBvdXQgPDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAs
MTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCAqbm9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2
ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3Rh
dGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVy
c2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wg
T3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAg
LTE3NTksOSArMTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJ
bnRlcm1Ob2RlICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMg
d2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNw
bGl0dGluZyB0aGVtCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OwogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJv
b2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAv
IGluY3JlbWVudDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAg
ICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2ZSBs
b29wCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlh
bCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucyk7CisgICAgICAgICAgICAg
ICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhf
TE9PUF9JVEVSQVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAgICAgICAgICAgIC8vIGZvcihp
bnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQogCkBAIC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7
CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAgICAg
ICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IE1B
WF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9u
cyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlw
ZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAg
ICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRG
aWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZp
ZWxkLmdldEZpZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4
IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEz
NSw3ICsyMzA3LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlw
ZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEkKICAgICAgICAgewogICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5n
ZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAg
c3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVG
aWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAi
O1xuIjsKICAgICAgICAgfQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0
LDQgKzI2MDYsMTQgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3Qg
VFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKICAgICAKICAgICByZXR1cm4gZGVj
b3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNv
bnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
c3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAppbmRleCA4MjRiYzA3Li5lYTI4YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKQEAgLTE1LDcgKzE1LDcg
QEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRT
aG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgogewpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKIAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1l
bnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmlu
ZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9z
dFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgogICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5
cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVj
dCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENp
cmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFt
cwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29s
IG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0
MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1
bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZv
ciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgIGJvb2wgbUluc2lkZURp
c2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggNDMxZjhkMS4uNzliZGRlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xMCwzMyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRl
ICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMi
IHsKLWV4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVBy
ZXByb2Nlc3NvcigpOwotZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAq
bmFtZSwgaW50IHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtC
YXNlJiBzaW5rLAotICAgICAgICAgICAgICAgICAgICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291
cmNlTG9jIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4
dHJhSW5mbykKLXsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6
ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5r
LmxvY2F0aW9uKGxvYyk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCBy
ZWFzb24gPDwgIiAiIDw8IGV4dHJhSW5mbyA8PCAiXG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZp
bmVFeHRlbnNpb25NYWNyb3MoY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikK
LXsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwg
MSk7Ci0gICAgfQotfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmlu
ZywgaW50IHZlY1NpemUsIFRWCiB7CiAgICAgZmllbGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcu
c2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+
PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZp
ZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZl
Y3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVj
dG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VN
YXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNCiAg
ICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNvbXBTdHJpbmdb
MF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJp
bmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZp
ZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKICAgICAgICAg
aWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsK
QEAgLTE3MCw3ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRz
KGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycg
fHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICcz
JykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbG9jLAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJy
b3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAg
ICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZl
cnQgZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGlu
ZSwgIiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDEx
IEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKIHsKLSAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAgICAgICAgICJubyBv
cGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAgICAgIG9wLCBvcGVy
YW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMg
dGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAgICAgICAg
ICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJy
b3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
fQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9w
RXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCiAvLwogdm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcg
b3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhp
c3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKLSAg
ICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBh
Y2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCBy
aWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAg
ICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBy
aWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9y
KGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAK
IH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBU
UHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyArMjQyLDEz
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFBy
ZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5CiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2Fz
ZSBFYnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAg
ICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0
KSIsICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3Bl
Y2lmaWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJl
Y2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBw
cmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1
ZV0rKzsgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxl
IGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3Qg
aGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMDEsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAm
JiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzc5LDEwICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAvLwogICAg
IC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCiAgICAg
Ly8KLSAgICBpZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdl
KTsKKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAi
XCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29u
c3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
Y2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBu
b2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRv
a2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MzAsNyArNDE1
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29s
IGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2Nv
cGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFs
IHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwy
NiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRF
cnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5h
dEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywg
ImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
Z2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8i
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFk
ZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwg
IndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZl
ZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmds
XyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
Il93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYm
IGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRp
Zmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3Io
bGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29y
ZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQogCkBAIC01MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogICAgICAg
ICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXko
KSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxl
bWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJv
bSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0Fy
cmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0g
ICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2Fu
IG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihs
aW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkp
ICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhl
IG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4
SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6
ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CiAgICAgICAgICAgICAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkp
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZv
ciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAwOwog
ICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBh
cmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBl
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAo
b3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcgKzU3Miw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9k
ZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHVi
VHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
IGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAg
LTU5OSw3ICs1ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUAogYm9vbCBUUGFyc2VDb250
ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQog
ewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJy
YXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5
cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVs
c2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
IHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZQog
ewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRl
KSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmlu
ZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0
NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0g
RXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAgICAgICAgdHlwZS5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBh
cmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjkwLDE0ICs2Nzcs
MTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBU
SW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCiBib29sIFRQYXJzZUNvbnRl
eHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkK
IHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBh
cnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgs
NyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwogICAgIC8v
CiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNs
YXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBv
ZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2NywzNCArNzU0LDM0IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGlu
c2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBl
Y3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlz
QXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJh
eSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFy
aWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJy
YXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQg
PSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQg
IT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJh
eVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVl
IGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVz
ZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6
ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJv
bCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
bm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlw
ZSwgaW50IHNpemUsCiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYgKG5vZGUtPmdldFN5bWJv
bCgpID09ICJnbF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCogZnJhZ0RhdGEgPSBzeW1i
b2xUYWJsZS5maW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdEluKTsKLSAgICAgICAgaWYg
KGZyYWdEYXRhID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBkZWZpbmVkIiwgbGluZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZnJh
Z0RhdGEpOwogCiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKICAgICAg
ICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1
cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAg
dG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAg
ICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlw
ZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJs
ZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFs
aWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZp
ZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsK
ICAgICAgICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4
OTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxp
ZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJp
bmcocXVhbGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CkBAIC05MjQs
OCArOTA4LDkgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHAKIAogYm9vbCBUUGFyc2VDb250ZXh0
OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24p
CiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAg
aWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4
dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNp
b24pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09
IEVCaFdhcm4pIHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNp
b24gKyAiIGlzIGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAi
ZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRl
bnNpb24pCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hh
ciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0
ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25C
ZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9u
KTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0
aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUp
OworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxvYywgZXh0TmFtZSwgYmVo
YXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShp
bnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6
OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxl
LCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlUHJhZ21hKGxvYywgbmFt
ZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3MCwxMiArOTY5
LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGludCBs
aW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1CiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0
aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3lt
Ym9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUg
ZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHUKICAgICAvLwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAoKHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlm
aWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLwpAQCAt
MTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogCiAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxp
emVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7
CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3Qg
aW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBv
aW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFy
cmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90
IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTIz
OSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29u
c3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwg
IiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUt
PmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSog
dHlwZSwgaW50CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QsIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3Ry
dWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwg
cGFyYW1Db3VudCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUo
KS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIg
PDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIs
ICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwog
ICAgIH0KIApAQCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeQog
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2Vk
Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVu
Y3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFn
Z3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgot
ICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZl
Y3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHkKIAogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMu
b2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNb
aV0gPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIFQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAi
WyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOwor
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwg
aW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAt
MTM0NSw3ICsxMzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAgIGludCBz
aXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRy
aXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFMK
ICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXgg
Pj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRl
eCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICci
IDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0K
QEAgLTEzODAsNyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CiAg
ICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyArMTQzMiw3
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYg
aWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7
CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0
OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2Vk
IGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8g
c28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KICAgICBp
ZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVt
YmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxs
b3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3
IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRU
eXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykg
eworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBl
JiBmaWVsZFQKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0
aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1
Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVzdGlu
ZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBu
ZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkuY19z
dHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVuY2Ug
b2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIgPDwg
a1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4dHJh
SW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgyLDEw
NSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGlmICgoY291bnQgPT0gMCkg
fHwgKHN0cmluZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAvLyBzZXR1cCBw
cmVwcm9jZXNzb3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
KTsKLQogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAgIHJldHVy
biAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7
Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQgZXJyb3Ig
PSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpZiAo
IWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAKICAgICBn
bHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0g
ICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6
IDE7Ci19Ci0KLU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJz
ZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KLSAgICAvLwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIAotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNl
IENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgo
KQotewotICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
OwotCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFy
c2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19J
TkRFWDsKLQotICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKLX0KLQotYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFy
c2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0g
ICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAo
bHBUaHJlYWREYXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHBUaHJlYWREYXRhLT5scEds
b2JhbFBhcnNlQ29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
cmVlUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNv
bnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0KQotICAg
ICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0K
IAotVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAg
Ly8KLSAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAotICAgIC8vCiAKLSAg
ICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJl
YWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgp
KTsKLQotICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmgKaW5kZXggM2UwNTc2My4uOGRlZThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lm
bmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29s
OwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDog
b3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZv
bGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBl
ZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91
dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3Qg
Y2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRp
YXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAg
IGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAg
ICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwK
ICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBA
IHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUo
TlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAg
ICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAg
ICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlz
KSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAg
ICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAg
ICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1l
ZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5n
dWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBh
bmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxh
bmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIg
Y29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBA
IC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7
CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5l
cjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZv
U2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVh
c29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVj
dCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxp
ZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wg
ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVu
c2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAg
ICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0
KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVj
Ci17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQ
YXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKaW5k
ZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNr
R3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNv
CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0
J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAg
ICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUg
YWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBz
aXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRp
b24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgp
KTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFt
YWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJp
bnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAl
enUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1Rl
eHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29s
QWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmNzQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitz
dHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVk
IG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRy
dWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRp
bWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVi
dWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAt
MCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKyNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQorICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBUU3RyaW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdG
dW5jdGlvbk5hbWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAppbmRl
eCA5MWM0N2U3Li4yNjUyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVN
YXA7CiBjbGFzcyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBX
ZWJHTCBzcGVjLAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3
LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0
UmVjdXJzaW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidz
IGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAg
ICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQog
ICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBB
LgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03
OSw2ICs4OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhU
SW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFp
bSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3Ry
aWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wg
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9w
ZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAg
Ym9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVu
ZGVuY3lHcmFwaCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGgg
ZGVmYXVsdCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCAxM2YxMWI1Li41NmY1YzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCkBAIC03MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hh
ZGVySW5mbyB2YXJUeXBlLAogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoID0g
MSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYk1heExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKSk7
CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYkxlbmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoIC0g
MV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0
IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVO
R1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5h
bWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAgICAgIHN0cm5j
cHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVM
ZW5ndGgpOworICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcAppbmRleCBlZGJlYTk5Li42OGYwMjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKQEAg
LTE2LDkgKzE2LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEg
cGxhY2UgdG8gbGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgVFR5cGU6OmJ1aWxkTWFu
Z2xlZE5hbWUoVFN0cmluZyYgbWFuZ2xlZE5hbWUpCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkg
ewogICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJh
eVNpemUpOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNp
emUpOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9
IGJ1ZjsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKaW5kZXggOTZk
N2YxMC4uZjQxZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAK
IFRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAppbmRleCA3NjdkMGJmLi5kNjllYzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAppbmRleCA5NjQyZTFlLi41Mzc3
OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVi
dWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNl
QnVmZmVyTGVuID0gMTAyNDsKQEAgLTI4LDcgKzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFy
ICpmb3JtYXQsIC4uLikgewogICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4s
IGZvcm1hdCwgYXJncyk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNv
bnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFj
ZShidWYpOwogICAgIH0KIH0KIH0gIC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBU
R3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50
OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3Mg
VEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxP
cDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0
OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5
cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9y
OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisv
LworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9k
ZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRo
YXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1Ymxp
YyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2Rl
KiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnRO
b2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBp
ZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9Owor
CisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFw
aEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxs
KQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1B
cmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1l
bnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNz
IFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQor
ICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFn
Z3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdy
YXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2wo
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3Bl
cmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2Vs
ZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJt
U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2Rl
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBh
bmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRH
cmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAg
ICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFu
ZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMg
VEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2
aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdl
dEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5
Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBp
bnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8v
CisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9u
ZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFu
ZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgor
Ly8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3Jl
YXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0
YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAg
VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRl
bmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9
CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5
bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdp
bigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
U2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3lt
Ym9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1l
bnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1i
ZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNy
ZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVj
dGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7
CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7Cisg
ICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJt
TG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAg
IFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZl
Y3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9s
SWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
IFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBz
cGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1l
dGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBm
b3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVw
dGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5
bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQq
IHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFw
aEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
ZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXRE
ZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgo
KSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0K
KworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9p
ZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsg
fQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1W
aXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50
IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsK
KyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
QWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFn
Z3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5j
dGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0
QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7Cisg
ICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25z
LgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAg
ICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7
Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2Fs
bCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5j
dGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1l
bnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBp
bnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVu
dHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAg
ICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJn
dW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1l
bnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
YXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVu
ZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVu
dCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3Vs
dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtl
ICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4
IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBl
YXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRo
ZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVn
YXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUt
PmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikK
KyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
Cit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5
bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhh
dCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+
Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQg
bGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3Vz
CisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVm
dG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0
U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVm
dG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRl
cm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOwor
ICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0
ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlm
IChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlz
aXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5
Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGlu
dGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJt
TGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0
bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhl
IGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEg
cmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5
bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1v
c3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJ
bnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7
CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCog
YXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5
bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMg
YXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwor
ICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBB
biBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBh
c3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGlu
IHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdu
bWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNy
ZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1Rv
cFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkp
IHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7
CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRl
TG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+
Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVm
dCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAg
ICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRo
aXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAg
IGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRD
b25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRU
b3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3Jh
cGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9
IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9j
ay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxv
Y2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFs
c2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9u
ID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxv
b3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29w
LT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
aWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJl
c3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9
ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAg
ICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYyMzJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRl
cGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRj
LiBieSB0cmF2ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNr
PFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFw
aFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxl
Y3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRj
LgorICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8v
CisgICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBj
b250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNz
IFROb2RlU2V0U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9
OworICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0
dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNl
dCogZ2V0VG9wU2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2Rl
U2V0cy50b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0
IDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMu
cHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250
ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJl
bG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZv
aWQgcG9wU2V0SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVT
ZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAg
IGlmICghbm9kZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0
KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQt
Pmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRo
aXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0
aW5nCisgICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5
bWJvbHMuCisgICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBu
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQo
bm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNl
dCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3Rh
Y2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJl
bnROb2RlU2V0U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0
ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBw
b3BzIHRoZSBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7
CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRz
KSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNl
dHMucG9wU2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBw
dXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUg
aW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQg
YW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisg
ICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNl
dHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWlu
dGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdo
aWxlIHdlJ3JlIGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2ls
bCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlh
dGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVy
IGEgcmlnaHQgc3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3
aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAg
IC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJl
cGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0
cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFy
ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFz
cyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRH
cmFwaFN5bWJvbCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3Rv
cnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMu
dG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBt
UmlnaHRTdWJ0cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQg
YnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhp
cyk7IH0KKworICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVu
dE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlz
aXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSop
OworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVu
Y3Rpb25DYWxsKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3Jl
Z2F0ZSopOworCisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1i
b2wgbVJpZ2h0U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBU
Tm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9s
czsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9C
VUlMREVSX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJn
dW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9m
IGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxs
KCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQorewor
ICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8
PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJc
biI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6
ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIp
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIg
PDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBn
cmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQo
KTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Cisg
ICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxu
IjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAxNDQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhz
aW5rKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJv
bCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9u
Q2FsbCogZnVuY3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExv
Z2ljYWxPcCogbG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50
YXRpb24oKTsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cApAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0
aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rl
cy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhp
cyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7
CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRH
cmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4o
KTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBp
ZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50
cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRl
Y3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVy
c2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBn
cmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRy
YXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBo
VHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAppbmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFy
c2VDb250ZXh0OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAg
ICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFu
Z19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYjlhMzAyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdf
bGV4LmNwcCkuCiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiAr
MzgsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNw
cCkuCiAlewogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIu
aCIKIApAQCAtMTU5LDYgKzE2MCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03
XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
Zml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNp
Z25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBA
QCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10K
IAogMFt4WF17SH0rICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9
KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
KzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9j
dGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtE
fSsgICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyBy
ZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQog
CisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXBy
b2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZp
bmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwK
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwK
ICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5z
Y2FubmVyOwpAQCAtMjcyLDI2ICsyODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJl
cigpCiB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5z
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0s
ICJvcHRpbWl6ZSIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
IihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXpl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwi
IGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
M10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQg
dG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAg
ICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVi
dWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVn
JyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29u
dGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJh
Z21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAg
ICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8v
IEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24g
Y2Fubm90IHJlY29nbml6ZQotICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxl
bWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8v
ICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21h
IG5hbWUgaW4gcHJhZ21hVGFibGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51
bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5z
WzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJh
Z21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAg
ICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAg
ICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAg
ICAgfSAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAg
ICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRT
dHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBd
ID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01B
X1RBQkxFCi0gICAgfQorCisgICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYg
KHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9r
ZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURp
cmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3Jl
U3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSAr
MzkzLDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1z
ZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3Ip
Ci17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVy
biBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkK
LSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxl
IiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICgh
c3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBi
ZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVo
YXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2
aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBp
dGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFs
bCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAg
aWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxl
KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+
ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhh
dmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2
aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWly
ZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAg
IGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAg
ICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBz
dXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5o
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0K
IH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNh
bid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOwotCi0gICAg
YnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGludCBsZW4gPSAwOworCisj
aWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxl
biA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUo
KTsKKyAgICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNw
eShidWYsIHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlz
Y2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2Vu
ZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwor
ICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0
dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01
NDQsOSArNDUwLDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9G
IiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBl
Y3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAt
NTY1LDIyICs0NzEsNDMgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwogICAgIAogICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworI2VuZGlmCisgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNj
YW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQt
PnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
SW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vz
c29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxz
ZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNw
cC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0g
ICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChj
cHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBt
YWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAh
PSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9D
RVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXIt
PmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IGQ2Yzg4NjkuLmFiNGFhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3Io
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJB
R19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBU
VmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRp
ZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhw
cmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAg
ICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93Iiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBj
b25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgo
KSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xO
b2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJh
eSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAt
MjU0LDcgKzI1NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKICAgICAgICAg
ICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAk
My0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25z
dCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3LDcgKzI3MCwxMCBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJh
cnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5s
aW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3Bl
cmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMu
d2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpA
QCAtMzczLDcgKzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDAp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MTEsMTMg
QEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlw
ZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2gg
ZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTAwLDkg
KzUwNiwxMCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigk
MS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVk
Kj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTUyNiw3ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZx
SW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fu
bm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTUxLDcgKzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90
IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJt
ZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1NCw3IEBAIGZ1bmN0aW9u
X2lkZW50aWZpZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0
cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7CkBAIC0xMDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICBU
RnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1i
b2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVj
KSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNjAsNyAr
MTA2Nyw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFu
IGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xMDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJz
CiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIg
TEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQx
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxl
ciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsxMTAyLDcgQEAgcGFyYW1l
dGVyX2RlY2xhcmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDogdHlwZV9zcGVjaWZpZXIg
SURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQpAQCAtMTE5
MSw3ICsxMTk4LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8IGluaXRfZGVjbGFyYXRv
cl9saXN0IENPTU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVi
dEludmFyaWFudCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgfQog
ICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5
IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9u
cyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKTsK
QEAgLTEzNjQsNyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAkJC50eXBl
LnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDIubGluZSk7
CiAgICAgICAgIGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMTQz
OCw3ICsxNDQ1LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3Ry
aW5nLCAkMSk7CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCok
JC52YXJpYWJsZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJl
ZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFi
bGUtPmdldE5hbWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhl
IHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQpAQCAtMTQ1MCwyNiAr
MTQ1NywyNiBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAg
ICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlw
ZV9zcGVjaWZpZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5
cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gJDI7CkBAIC0xNjU0
LDcgKzE2NjEsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBM
RVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lv
bigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VT
IiwgJDEubGluZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogICAgIH0KICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJE
UmVjdCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIs
ICQxLmxpbmUpOwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVzdF9zdGF0ZW1lbnQKIGp1
bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIi
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3Rh
dGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJSRUFLIFNF
TUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CkBAIC0x
OTgxLDcgKzE5ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTk2LDEwIEBAIGp1
bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1
cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0
aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5j
dGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDQ0LDcgQEAg
ZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3ICsyMDU0
LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA4Niw3IEBAIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMg
d2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0
aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9
CkBAIC0yMTE2LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAKICAgICAgICAgLy8g
c3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBv
dGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3Jt
YXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6
ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250
ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJh
Z21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6
ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFn
bWEoKS5kZWJ1Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRBc0FnZ3JlZ2F0ZSgpKQog
ICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoJDMtPmdldEFzQWdn
cmVnYXRlKCktPmdldEVuZExpbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRleCA1OWI3Mjk5Li5kMjlkOTM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4IEBAIHN0YXRpYyB2b2lkIHl5X2Zh
dGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCSp5
eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9O
VU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05V
TV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0
IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVj
ZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0
cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMy
X3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQy
Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0
NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwg
IDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDEx
OSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAg
MywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwg
IDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEw
MSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwg
IDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDEx
MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIy
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAw
LCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAg
OTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcs
ICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAg
MTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAg
ICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwg
ICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0
MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAg
ICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5
MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAg
ICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAx
NDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMs
ICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisg
ICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjks
ICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAx
MTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcs
ICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAg
IDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAg
ICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAg
IDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDEx
MiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAg
IDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAg
IDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAg
IDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAg
MzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAs
ICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAg
NDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgs
ICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQs
ICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAg
OTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAg
ICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwg
ICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4
OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAg
IDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcs
CiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAs
ICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAg
MjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAg
MzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYs
ICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0K
LSAgICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1
MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1Nywg
ICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2
NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwg
ICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAy
NywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwg
ICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAg
ICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwg
ICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0
MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMy
LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAg
IDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0
LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
CisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAot
ICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMx
LCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAg
IDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3
LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAg
MTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcy
LCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAg
NjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAg
ICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAg
MjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4
LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAg
NTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1
NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIs
ICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAy
NDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAg
ICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1
MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2Mjgs
ICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAg
IDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgs
ICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1
MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMs
ICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0
ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUs
Ci0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwg
IDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3
OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2Niwg
IDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5
MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwg
ICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4
MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywK
LSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0
NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwg
IDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQz
NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywg
IDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1
LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAot
ICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEy
LCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAg
ICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAw
LCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAg
ICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAg
ICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAg
ICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAg
ICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1
LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAy
MDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgs
ICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAg
MCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAg
IDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEz
MSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0Nywg
IDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1
NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3Nywg
IDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4
MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwg
ICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4
MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwK
KyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4
MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwg
IDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAg
NjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1
LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAg
NTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4
LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAor
ICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgx
LCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAg
ICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYw
LCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAg
NTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3
LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAg
NTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisg
ICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAs
ICA1MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAy
NjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgs
ICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1
MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAs
ICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0
OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAg
ICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0
ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAs
ICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwg
ICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2
NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwg
IDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAg
MCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwg
IDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAg
MCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywg
IDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQy
NSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwK
KyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQw
NywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzky
LCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAg
MzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAw
LCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAor
ICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQy
LCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAg
NDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMw
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0
MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwg
ICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKwor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAg
NDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
Njk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsg
ICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMw
LAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAg
IDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYy
LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAg
IDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0
LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAor
ICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5
LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAg
IDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisg
ICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAg
OTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAg
ODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgs
ICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAx
NDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEw
NCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwg
IDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQy
MSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAg
IDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4
NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwg
ICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1
MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwg
IDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3
OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwg
IDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4
MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwK
LQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAg
Mjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAg
MjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAg
IDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1
LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAot
ICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0
MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIs
ICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0g
ICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcs
ICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAz
NjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAz
NDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAg
ICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAz
MjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUs
ICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwg
IDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4
NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3Mywg
IDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2
NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAg
IDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0
MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwg
IDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwg
IDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4Miwg
IDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAg
MTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAg
MTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1
LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwK
KyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5Niwg
ICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEy
MywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwg
IDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKwor
ICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1
LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAg
MTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIw
LCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAg
MTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0
LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAg
MTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5
LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAg
MTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4
LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAs
ICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0
NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQs
ICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQs
ICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAs
ICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAy
MjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcs
CisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMy
MSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwg
IDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQy
NiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwK
KyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQx
OCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwg
IDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwg
IDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3
OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAor
ICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUz
LCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAg
MzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2
LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAg
Mjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAg
ICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAg
MjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0
LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAg
MjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAy
MjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAg
ICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIs
ICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAx
NzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMs
ICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAx
MjIsICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
CisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4
ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAg
ICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAg
IDEyLCAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAot
ICAgICAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIw
LCAgIDMzLAotICAgICAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLCAg
IDQyLCAgIDEzLCAgIDM1LAotICAgICAgMTQ1LCAgIDM1LCAgMTQ1LCAgIDMzLCAgIDQyLCAgIDM1
LCAgIDIxLCAgIDIyLCAgIDQxLCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAg
IDIyLCAgIDIzLCAgIDQxLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDI2LCAgIDIyLCAgIDM2LCAgIDQ0LCAgIDQxLCAgNDMwLCAgIDIyLAotICAgICAgIDQ0LCAg
NDIzLCAgIDIzLCAgNDIyLCAgIDQ1LCAgIDM2LCAgIDU1LCAgIDIyLCAgIDM2LCAgIDI2LAotCi0g
ICAgICAgMzcsICAgMjYsICAgMjYsICAgMzksICAgMzcsICAgMjMsICAgMzgsICAgNDUsICAgMzgs
ICAgMzcsCi0gICAgICAgNDcsICAgMzksICAgNDksICAgMzksICAgMjIsICAgMzcsICAgMzksICAg
MzgsICA0MjEsICAgNDksCi0gICAgICAgNDksICA0MjAsICAgMzksICAgNTAsICA0MTksICAgNDcs
ICAgNTAsICAgNTEsICAgNDcsICAgNDksCi0gICAgICAxMzUsICAgNTEsICAgNDksICAgNTIsICAg
NTAsICAxMjAsICAgNTUsICAgNTIsICAxMjAsICAxMjAsCi0gICAgICA0MTcsICAgNTAsICAxMjAs
ICA0MTYsICAxMjAsICAxMzUsICAgNTIsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAg
NzQsICAgNzQsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAxNjcsCi0gICAg
ICAxNjcsICA0MTUsICAgNzQsICAxOTIsICAxOTIsICAxOTIsICA0MTMsICAgNzksICAgNzgsICAg
NzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzQsICAyMTUsICAyMTUs
ICAyMTUsICA0MTIsCi0gICAgICA0MTEsICAgNzgsICA0MTAsICAgODAsICAgNzksICAgODAsICAg
ODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAxMjIsICAyMjYsICAyMjYsICAyMjYs
ICA0MDksICAgODEsICAgNzksICAgODEsICAxMjIsCi0KLSAgICAgICA4MCwgICA4MSwgICA4MSwg
ICA4MSwgICA4MSwgICA4MSwgICA4MSwgIDIzNCwgIDIzNCwgIDIzNCwKLSAgICAgIDQwOCwgIDQw
NywgICA4MywgICA4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
IDE0MSwgIDI0MSwgIDI0MSwgIDI0MSwgIDM5OCwgIDE1MSwgIDM5NywgIDE1MSwgIDE0MSwgICA4
MywKLSAgICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MywgIDI0NSwgIDI0NSwgIDI0NSwgIDM5
NiwgIDE1NCwgIDM5NSwgIDE1NCwKLSAgICAgIDM5MywgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NSwgIDE1NSwKLSAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1MywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDIxMSwg
IDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDM5MiwgIDIxMSwKLSAgICAgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwK
LSAgICAgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDI1
MSwgIDI1MSwKLQotICAgICAgMjUxLCAgMzgxLCAgMzkxLCAgMzg4LCAgMzg3LCAgMzg1LCAgMzgy
LCAgMzgwLCAgMzc5LCAgMzc4LAotICAgICAgMzc2LCAgMzc1LCAgMzgxLCAgMzc0LCAgMzgxLCAg
NDI2LCAgNDI2LCAgNDI2LCAgNDI2LCAgNDI3LAotICAgICAgNDI3LCAgNDI4LCAgNDI4LCAgNDI5
LCAgMzcxLCAgNDI5LCAgNDI5LCAgMzcwLCAgMzY5LCAgMzY4LAotICAgICAgMzY3LCAgMzY2LCAg
MzY1LCAgMzY0LCAgMzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLAotICAgICAgMzQ5
LCAgMzQ3LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LAot
ICAgICAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1
LCAgMzI0LAotICAgICAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAg
MzExLCAgMzAwLCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0
LCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LAotICAgICAgMjc1LCAgMjc0LCAgMjcxLCAgMjcwLCAg
MjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LAotICAgICAgMjYzLCAgMjYyLCAgMjYx
LCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LAotCi0gICAgICAyNDcs
ICAyNDYsICAyNDQsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzMsICAyMzIsICAyMzEsCi0g
ICAgICAyMzAsICAyMjksICAyMjgsICAyMjUsICAyMjMsICAyMTgsICAyMTcsICAyMTYsICAyMTQs
ICAyMTMsCi0gICAgICAyMTIsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAy
MDQsICAyMDMsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYs
ICAxOTUsICAxOTQsICAxOTMsICAxOTEsCi0gICAgICAxOTAsICAxODksICAxODgsICAxODcsICAx
ODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsCi0gICAgICAxODAsICAxNzksICAxNzcs
ICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsCi0gICAgICAxNjksICAx
NjgsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsCi0gICAg
ICAxNDMsICAxNDIsICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAx
MzIsCi0gICAgICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQs
ICAxMjMsICAxMjEsCi0gICAgICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAx
MTIsICAxMTEsICAxMTAsICAxMDksCi0KLSAgICAgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEw
NCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OSwKLSAgICAgICA5OCwgICA5NywgICA5Niwg
ICA5NSwgICA5MSwgICA4NywgICA2MCwgICA1MywgICA0OCwgICA0NiwKLSAgICAgICA0MywgICA0
MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgIDUsICAgIDUsICAgMTMsICAgMTcsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMzMsICAg
NDIsICAgMjEsICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsCisgICAgICAgNDIsICAgMTMs
ICAgMzUsICA0NjMsICAgMzUsICAgNDQsICAgMzMsICAgNDIsICAgMzUsICAgNDQsCisgICAgICAg
MjEsICAgMjIsICA0NTUsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIs
CisgICAgICAgMjMsICAgNTUsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjIsCisgICAgICAgMjYsICAgMzYsICAgNTEsICA0NTQsICAgMjIsICAgMzgsICAgNTEs
ICAgMzgsICAgMjMsICAgMzcsCisKKyAgICAgIDQ1MywgICAzNiwgICAyMiwgICAzNywgICAzNiwg
ICAzOSwgICAzOCwgICAyNiwgICAzNywgICAyNiwKKyAgICAgICAyNiwgICAyMywgICA0MSwgICAz
OSwgICAzNywgICAzOSwgICA0NSwgICA0NywgICAzOSwgICAyMiwKKyAgICAgICA0MSwgICA1NSwg
IDEzNSwgIDE0NiwgICAzOSwgIDE0NiwgICA0OSwgICA1MCwgIDExMiwgICA0NSwKKyAgICAgICA1
MCwgICA0MSwgICA0NywgICA0OSwgICA0OSwgICA0NywgICA1MiwgIDEzNSwgICA1MCwgIDEyMiwK
KyAgICAgICA1MiwgIDExMiwgIDQ1MiwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIDEyMiwgIDQ1
MSwgICA1MiwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3OCwgICA3OCwgICA3OCwKKyAgICAgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDQ1MCwgIDEy
MCwgICA3NCwgIDE0MiwgIDEyMCwgIDEyMCwKKyAgICAgIDE2OCwgIDE2OCwgIDEyMCwgICA3OCwg
IDEyMCwgIDE0MiwgIDE5NCwgIDE5NCwgIDE5NCwgICA3NCwKKyAgICAgIDIxOCwgIDIxOCwgIDIx
OCwgIDQxNywgIDQxNywgICA3OSwgICA3OCwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA4MCwgIDQ0OCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKwor
ICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDc5LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAorICAgICAgMTU2LCAgNDQ2LCAgIDgwLCAgIDgxLCAgNDQ1LCAgIDgxLCAgIDc5LCAg
NDQ0LCAgIDgxLCAgIDgxLAorICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgw
LCAgIDgzLCAgMjE0LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgMjE0LCAgMjI5LCAgMjI5LCAgMjI5LCAgNDQzLAorICAgICAgMTUyLCAgNDQyLCAgMTUy
LCAgNDQwLCAgIDgzLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAg
MTUyLCAgMjM3LCAgMjM3LCAgMjM3LCAgNDM5LCAgNDM4LCAgIDgzLCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgNDM3LCAg
NDM2LAorICAgICAgMTU1LCAgNDM1LCAgMTU1LCAgNDM0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1
LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTU1LCAgMjQ5LCAgMjQ5LCAgMjQ5LCAgNDMzLCAg
NDMyLCAgMTU0LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorCisgICAgICAyMjIsICAyMjIsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjQsCisgICAgICAyMjQsICAy
MjQsICAyMjQsICAyMjQsICAyMjQsICAyMjQsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAg
ICAyMjUsICAyMjUsICAyMjUsICAyNTUsICAyNTUsICAyNTUsICAzODgsICAzODgsICAzODgsICA0
MzAsCisgICAgICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsICA0MjIs
ICA0MjEsICAzODgsCisgICAgICA0MjAsICAzODgsICA0NTksICA0NTksICA0NTksICA0NTksICA0
NjAsICA0NjAsICA0NjEsICA0NjEsCisgICAgICA0NjIsICA0MTksICA0NjIsICA0NjIsICA0MTgs
ICA0MTYsICA0MDcsICA0MDYsICA0MDUsICA0MDQsCisgICAgICA0MDMsICA0MDIsICA0MDAsICAz
OTksICAzOTgsICAzOTUsICAzOTQsICAzOTIsICAzODksICAzODcsCisgICAgICAzODYsICAzODUs
ICAzODMsICAzODIsICAzODEsICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCisgICAgICAz
NzMsICAzNzIsICAzNzEsICAzNjUsICAzNjIsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
CisgICAgICAzNTMsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDYsICAzNDUsICAzNDMsICAz
NDEsICAzNDAsCisKKyAgICAgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMz
MiwgIDMzMSwgIDMzMCwgIDMyOSwKKyAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwg
IDMyMCwgIDMxOSwgIDMxNiwgIDMwNSwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5
MSwgIDI5MCwgIDI4OSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3OSwg
IDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwKKyAgICAgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI1NCwgIDI1MywK
KyAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OCwgIDI0NCwgIDI0MiwgIDI0MSwgIDI0MCwgIDIz
NiwgIDIzNSwKKyAgICAgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNiwgIDIyMSwg
IDIyMCwgIDIxOSwgIDIxNywKKyAgICAgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwgIDIxMSwgIDIx
MCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwKKyAgICAgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwg
IDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5MywgIDE5
MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwKKworICAgICAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAor
ICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLAorICAgICAgMTYyLCAgMTQ3LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTQxLCAgMTQwLCAg
MTM5LCAgMTM4LCAgMTM3LAorICAgICAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMxLCAgMTMw
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LAorICAgICAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAg
MTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLAorICAgICAgMTExLCAgMTEwLCAgMTA5
LCAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLAorICAgICAgMTAxLCAg
MTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLAorICAg
ICAgIDUzLCAgIDQ4LCAgIDQ2LCAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgK
ICAgICB9IDsKIAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzE0OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsxNTZdID0KICAgICB7ICAgMCwKIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYwLDcgKzc4MSw3IEBAIHN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAg
IH07CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwg
ICAgIH07CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0
J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03
NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21h
dGNoX2VvbFsxNDhdID0KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2LDYgKzgwNyw3IEBAIFdI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtOTQ0
LDcgKzk2Niw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBc
CiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTEw
ODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJ
CX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5
eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
NDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3ICsx
MTI1LDcgQEAgeXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9zaXpl
X3QgeXlsOworCQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQogCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4MSwy
MjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcg
PSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5l
cik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIi
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3Zlcigp
OyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VU
VVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoK
IFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
X2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
OTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihB
RERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNl
IDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEw
NzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJ
TkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6
CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAx
MjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVG
VF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoK
IFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihT
RU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NF
VFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlf
UlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2Fz
ZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEz
MzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRl
eHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBh
cmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6
CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJ
R0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxF
X1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToK
K2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToK
K2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FS
RVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6
CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0x
NzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNU
SU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAog
e30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitj
YXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsg
IH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihD
T01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9G
ID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBj
aGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2Fz
ZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIwNzAs
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQog
CQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDEx
ICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIpCiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYg
KQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9z
dGF0ZSA9PSA0NTgpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OwogfQpAQCAtMjg5NCwxMCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI5MDYsMjYgKzI5NjUsMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTI5ODAsODggKzMwMzksMTUgQEAgdm9pZCBEZWNMaW5lTnVt
YmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tl
bnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1sw
XSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1p
emUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQot
ICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2Zm
XCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3Rl
ZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAg
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJk
ZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVi
dWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBw
cmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQot
ICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAg
ICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAg
Ly8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1w
bGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAg
Ly8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxl
bWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFn
bWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAo
bnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tl
bnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBw
cmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAg
ICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAg
ICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRh
YmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQo
VFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBd
IF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFH
TUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0
b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21h
RGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3Rv
cmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtMzA4Myw3
MSArMzA2OSwzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hF
cnJNc2cgPSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2
aW9yKQotewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICBy
ZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlv
cikpCi0gICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlz
YWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBp
ZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIp
ICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBFQmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lv
bkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRC
ZWhhdmlvcihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0
b3IgaXRlcjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZv
ciBhbGwgZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAg
ICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVu
YWJsZSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fu
bm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBi
ZWhhdmlvclZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRl
ciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJl
cXVpcmU6Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNp
b24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAg
ICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAg
ICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBu
b3Qgc3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4
dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7
CiB9CiB9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgogCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAo
YnVmLCBtYXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0g
bWF4X3NpemUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93
LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAg
ICBpbnQgbGVuID0gMDsKKworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6
OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5s
ZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAg
OiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
IHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4u
bG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0g
ICAgYnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4
X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsK
KyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJl
dHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAt
MzE3OCw5ICszMTI2LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0Yp
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQg
RU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5l
eHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5l
bm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpA
QCAtMzE5OSwyMiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAg
ICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nh
bm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVX
X1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0
LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRl
eHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4K
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJv
Y2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7Cisj
ZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAg
IGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5Q
YUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNw
cC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7
Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1
dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlm
ICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0
ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8o
aXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCmluZGV4IDM3YTBmMDUuLmQ1ODUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtMSwyNCArMSwy
MiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAg
IENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjcsNyBAQAog
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2
ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklT
T05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAogLyogUHVyZSBwYXJzZXJz
LiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUg
WVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyog
VXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogCiAKKy8qIENv
cHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJh
dGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2Vu
ZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKworLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKwor
LyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJs
aW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5l
IFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlU
T0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2ICsyMTUsMTQgQEAKICAg
ICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5l
IElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElV
TV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJ
U0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAot
I2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElO
VF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVm
aW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElG
IDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJW
RUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElW
RUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZF
QzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJ
WDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5l
IElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5
MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJV
Q1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5l
IFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJf
RVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVO
VElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQg
MzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0j
ZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUg
UklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2Rl
ZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2Rl
ZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNk
ZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNT
SUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAot
I2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmlu
ZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJ
R04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0j
ZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5l
IFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hU
X0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBD
T0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZp
bmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5l
IFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQ
RVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAz
NDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUg
QU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAotLyogQ29weSB0aGUg
Zmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
LSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0j
IHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNl
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0
b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5f
VEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlT
VFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0zNDAs
MTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlz
dCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBv
ZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMzYwLDI4ICsyNzEs
MjYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAg
IGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBj
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFE
RVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYg
b2YgeWFjYy5jLiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1Niwx
NCArMzY1LDE0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkK
K1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1
cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQg
Kik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KIC8qIEEgdHlwZSB0aGF0IGlz
IHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxv
YwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5
cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhl
IHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRo
ZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24g
eXlhbGxvYykgLSAxKQpAQCAtNTgwLDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3Rh
Y2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1Qg
eXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXpl
KTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHIt
PlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNr
X2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNr
KSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9m
ICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAg
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAy
MDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwg
ICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAot
ICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4
LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAg
NzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUs
ICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4
NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4
NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAg
IDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkx
LCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAx
MTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDEx
NzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwg
IDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4
MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAg
MTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0g
ICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcs
ICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2
NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwg
IDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgw
NiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1
LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAx
ODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAs
ICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5
MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1
NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAg
MjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAg
NDI2LCAgIDQzNiwgICA0NDksICAgNDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAg
ICAgNTc5LCAgIDU4MywgICA1OTAsICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwg
ICA2ODUsICAgNjg4LAorICAgICA2OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDcz
NiwgICA3MzcsICAgNzQ2LCAgIDc1OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAg
IDc4MywgICA3OTMsICAgODAzLCAgIDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUw
LCAgIDg1NCwgICA4NTgsICAgODYyLCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEs
ICAgOTA0LAorICAgICA5MDUsICAgOTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5
MzksICAgOTQwLCAgIDk0NCwgICA5NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwg
IDEwMDUsICAxMDQzLCAgMTA0NiwgIDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTEx
NCwgIDExNDMsICAxMTQ4LCAgMTE1OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgy
LAorICAgIDExODgsICAxMTk1LCAgMTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAx
Mjg5LCAgMTMwNywgIDEzMTUsCisgICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgs
ICAxNDkxLCAgMTQ5NywgIDE1MDUsICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1
NDEsICAxNTQ0LCAgMTU1MCwgIDE1NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAg
IDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAg
MTYyOSwgIDE2MzQsCisgICAgMTY0MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcx
LCAgMTY4MCwgIDE2ODUsICAxNjk4LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAx
NzI0LCAgMTczOSwgIDE3NzUsICAxNzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMs
ICAxODE3LCAgMTgxOCwgIDE4MjQsICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwg
IDE4MzMsCisgICAgMTgzMywgIDE4MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0
OSwgIDE4NDksICAxODU0LCAgMTg1NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAg
MTg4MSwgIDE4ODksICAxODkzLCAgMTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMw
LCAgMTkzMCwgIDE5MzcsICAxOTM3LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMs
CisgICAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIw
MTksICAyMDI2LCAgMjAyOSwKKyAgICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIs
MTYgKzcyMSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImlu
aXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZp
ZWRfdHlwZSIsCiAgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNp
b25fcXVhbGlmaWVyIiwKICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZp
ZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIs
ICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIs
CiAgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1l
bnQiLAotICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19u
ZXdfc2NvcGUiLAotICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91
bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAz
IiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Nj
b3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAg
ICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3Rh
dGVtZW50IiwKLSAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1l
bnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25f
cmVzdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3
IiwKKyAgIiRAOCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIs
ICJmb3JfcmVzdF9zdGF0ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25f
dW5pdCIsICJleHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwg
IkAxMCIsIDAKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYK
IApAQCAtMTM0NSw5ICsxMjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9z
W10gPQogCiAvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKIApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQg
KHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0
eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGlj
IHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJv
dHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwg
eXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZv
ciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAl
ZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisg
ICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9
CiAKQEAgLTE1NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxl
LCBjb250ZXh0KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5
eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAk
JWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5
eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKIAkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApA
QCAtMTg0OSwxMCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBm
cm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2
b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAo
KTsKIAogCiAKLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0K
ICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5
OCw3NCArMTgxNiw3NSBAQCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAg
LyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBz
byBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0g
IGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJy
b3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1h
aGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8K
LSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9y
IGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1z
Z2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQg
dGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZz
JzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBs
b2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50
ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hl
cmUuICAqLworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAg
aW50IHl5bmVycnM7CiAKLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2
IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5
dHlwZV9pbnQxNiAqeXlzc3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOwogCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZ
U1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZ
U1RZUEUgKnl5dnNwOworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNl
bWFudGljIHZhbHVlcy4KIAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5
cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3Ag
LT0gKE4pLCB5eXNzcCAtPSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAg
Ki8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOwor
ICAgIFlZU1RZUEUgKnl5dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVz
dWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRv
a2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQg
dG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rp
b24gcm91dGluZXMuICAqLwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUu
ICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7Cisg
IFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZp
bmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGlu
dCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9
IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3Rh
dHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRv
a2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAg
ICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBz
byB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAg
ICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5
eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50
IHl5bmVycnM7CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwogCi0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRl
cy4gIFRoaXMgdXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3
byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5
bmVycnM7CiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6
ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpA
QCAtMjAyNiw5ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZ
WVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRy
KQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZ
WVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2Ms
IHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAo
eXlzczEpOwpAQCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9
IHl5c3MgKyB5eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAot
CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVc
biIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYg
KzE5NjQsOSBAQCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmlu
ZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisg
ICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIw
NTcsMTYgKzE5NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHBy
b3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAg
IGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBk
byB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0
b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1Rf
TklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
ay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2Vu
OiAiKSk7CkBAIC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJl
ZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAg
IC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBv
ZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJy
c3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBT
aGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlm
dGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQot
ICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAq
LworICB5eWNoYXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0g
eXlsdmFsOwpAQCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRT
eW1ib2wqIHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBj
b25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAg
VFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJl
IGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJp
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8g
Y2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ci
LCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIxMzks
MjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFso
MSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjI2
Niw3ICsyMTgwLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8
PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5n
ZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJy
YXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBh
cHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwg
Ii4iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlm
IChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVy
cm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUsMTgg
KzIzNDUsMTggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBz
dWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0
cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjoKQEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsy
Mzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUo
KSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBU
eXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJ
bnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQg
dHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwg
PT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVl
IGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJy
b3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3Rh
bnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJz
LiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAi
bWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUx
OCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTk6CkBAIC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5v
ZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIx
LDcgKzI1NDIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUi
LCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJp
bmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9u
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0ICsy
NjUwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MzA6CkBAIC0yNzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3MDYs
MjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzMjoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExv
Z2ljYWxOb3Q7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4MTgs
NyArMjczOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4ODQs
NyArMjgwNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoK
QEAgLTI4OTgsNyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0NToKQEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoK
QEAgLTI5NDUsNyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0OToKQEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NjoK
QEAgLTMwMTIsMTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5NTIs
MTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjE6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA2MzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNl
IDY0OgogCi0gICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZF
UlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BNdWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAgeyBG
UkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3Np
Z247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9CisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3Vi
QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToK
QEAgLTMxMTcsNyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFy
YXRpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVj
aXNpb24pICk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsK
ICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJu
IHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5cmVk
dWNlOgogICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1
bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCiAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA3NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIo
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5wYXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc5OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1
bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQg
YXMgd2VsbC4uLgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDgwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSld
LmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1w
b3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBv
cmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0p
LnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDkwOgpAQCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkpIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9
PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
IApAQCAtMzQyOCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSld
LmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDk0OgpAQCAtMzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDE5
ICszNDUzLDE5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRl
ZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJy
YXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQsNyAr
MzUyNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICszNTM3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0
SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBA
IC0zNjI2LDcgKzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVjZToK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0
LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNz
IGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAg
ICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wg
fHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0zNjgw
LDcgKzM2MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFB
dHRyaWJ1dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5n
SW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1
bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OToKQEAgLTM3MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1
bTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEx
NzoKQEAgLTM3OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE5
OgpAQCAtMzgxMSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICszNzUw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBAIC0z
ODM4LDcgKzM3NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyMzoKQEAgLTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMsNyAr
MzgwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoKQEAg
LTM4OTIsNyArMzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyOToKQEAgLTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4NDMs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSg0LCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMjoK
QEAgLTM5MzEsNyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEsMzMg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0
ZXJuYWxPRVMsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1
bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAtMzk4
OSwxMiArMzkxMCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24o
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNw
WygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24o
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsgaWYg
KGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7
IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywxNCAr
Mzk0OCwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
TGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+
cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00MDg3
LDcgKzQwMDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
bmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyArNDA1
Miw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXpl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9CisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAgIHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAw
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcgKzQy
MDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVj
dGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyArNDIx
Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpAQCAt
NDI5OSw3ICs0MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTgwOgpAQCAtNDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0g
KDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgy
OgpAQCAtNDM1NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1do
aWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5
dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgp
LmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3Is
ICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwg
cmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAo
eXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTA6CkBAIC00NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dl
ZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0LDEw
ICs0MzY1LDEwIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTQ6CkBAIC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNW
YWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24g
cmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVl
Um9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4
dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDUx
Nyw3ICs0NDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFt
ZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAg
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAgICAg
ICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6
ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlz
IGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUo
Y29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQ
cmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRl
eHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAK
LS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAg
ICB9CkBAIC00NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFs
OwogCi0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0
ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUg
d2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAg
Ki8KQEAgLTQ2ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9
PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3IEBA
IHl5ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAg
dG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAgeXll
cnJsYWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAg
aWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFs
OwogCiAKQEAgLTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsK
ICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlv
dmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxhYjoK
ICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0g
WVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj
dGlvbiB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQg
KzEsMjIgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tl
bGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAg
Q29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAg
IAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAK
ICAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29u
LiAgKi8KIAorCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUg
WVlUT0tFTlRZUEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAog
ICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2Rl
ZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNk
ZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBB
VFRSSUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAy
NjUKLSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5l
IEJSRUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5l
IEVMU0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NB
UkQgMjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJW
RUMzIDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElW
RUMzIDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVD
MyAyODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFU
UklYMyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZp
bmUgT1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0g
MjkxCi0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9J
RF9UWVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2Rl
ZmluZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0j
ZGVmaW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5l
IFRZUEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09O
U1RBTlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNU
SU9OIDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZp
bmUgSU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2Rl
ZmluZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2Rl
ZmluZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0j
ZGVmaW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFE
RF9BU1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdO
IDMyMQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0j
ZGVmaW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VC
X0FTU0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4g
MzI4Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAK
LSNkZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5l
IERPVCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBF
UVVBTCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmlu
ZSBEQVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUg
U1RBUiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5l
IExFRlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNB
TF9CQVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVm
aW5lIFFVRVNUSU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZp
bmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwog
ICAgIHN0cnVjdCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpA
QCAtMjY1LDE0ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBU
VHlwZUxpc3QqIHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGlu
ZSAxNTI5IG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5o
CmluZGV4IDU0NDE1NTcuLmFmNzhmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQzMywxNSArNDMzLDE1IEBAIHBy
b3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNl
OwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci10eXBlZGVmIFRNYXA8VFN0
cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8gTm9kZXMgdGhhdCBvcGVyYXRl
IG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCiAvLwogY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewogcHVibGljOgotICAgIFRJbnRl
cm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFs
c2UpLCBwcmFnbWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxz
ZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0
b3IobyksIHByYWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAg
ICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxz
ZSksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRl
cm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRl
ZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQogCiAgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwpAQCAtNDUy
LDE0ICs0NTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25z
dCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVm
aW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZp
bmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0K
ICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNl
dERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1
cm4gZGVidWc7IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpOwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25z
dCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQgc2V0RW5kTGluZShUU291cmNl
TG9jIGxpbmUpIHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291cmNlTG9jIGdldEVuZExpbmUo
KSBjb25zdCB7IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRh
YmxlICpwcmFnbWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExpbmU7CiAKICAgICAvLyBJZiBz
ZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVt
dWxhdGVkIG9uZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RW
aXNpdChwb3N0VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAog
ICAgICAgICAgICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkg
e307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IHt9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Np
bmNsdWRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRl
LmgKaW5kZXggOWY5MzkzYS4uOWIzYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaApAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fc3VuKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fR05VX18pIHx8IGRlZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQo
X19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAj
ZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBh
MTdjMzE5Li4zOTE1OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAj
aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBz
dHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRh
YmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsg
TlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBB
dG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChB
dG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0
MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcykKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewog
ICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwot
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAor
ICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNo
PSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50
cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3
aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lv
bltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNp
b25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3Ry
KTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRv
bVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3Ig
KGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYo
c3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFt
YXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wi
IiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRh
YmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50
cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAi
ICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAg
Q1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEu
LjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAj
aWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHBy
YWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVP
RgogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVu
ZCB3aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVt
b3J5QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47
CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGlu
dCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsK
IAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5D
b3VudDsgKytpKSB7CiAJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2
IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3Io
eXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJz
aW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5z
aW9uKHl5bHZhbHBwKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZv
aWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFj
cm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9u
ID0gezB9OworICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5
bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBw
IHZhbCA9IHswfTsKKyAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAw
fTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9
IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29s
KTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUs
ICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQ
UF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwg
TUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0
b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5l
TnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
TUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAg
VW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxw
cC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4u
ODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBT
aC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9n
Lgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNh
ZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBf
X01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0
eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5
UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWdu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5f
dHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVk
IHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0g
IkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0
d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5m
aW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRl
eHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91
dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxl
eGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhl
cigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBz
byB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGlu
IHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9r
ZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAh
PSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1
dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRw
dXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2Uu
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVz
ZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNy
byhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3Rvciog
cGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3Jv
KHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0Rl
ZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9y
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBt
YWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5k
ZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRl
cmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jv
cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBz
dGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBt
TWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQg
Q29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBt
TWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0g
ICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsK
LSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElO
VF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVj
dG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAg
IG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBD
b250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQot
ICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7
IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2Vu
VmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1h
Y3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBw
cDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAg
IGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBp
c01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBk
ZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0g
ICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgot
ICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9T
ZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRp
YWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9E
TyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50
KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6
OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwg
RVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5J
TkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7
CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc1YTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaApAQCAtMCwwICsxLDgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGlu
ZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJs
ZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25v
c3RpY3MKK3sKKyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVS
Uk9SLAorICAgICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAg
ICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9N
RU1PUlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJF
UiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAg
ICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgRElSRUNUSVZFX0lOVkFMSURfTkFNRSwK
KyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAor
ICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgTUFDUk9fUFJFREVG
SU5FRF9VTkRFRklORUQsCisgICAgICAgIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAor
ICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIE1BQ1JPX1RPT19NQU5ZX0FSR1Ms
CisgICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAorICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVELAor
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNU
SVZFLAorICAgICAgICBJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0ZJTEVf
TlVNQkVSLAorICAgICAgICBJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICBFUlJPUl9F
TkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklO
R19FTkQKKyAgICB9OworCisgICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQg
cmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFNldmVyaXR5IHNldmVyaXR5KElEIGlkKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUyMWEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3Bw
CkBAIC0wLDAgKzEsOCBAQAorLyoKKyBUaGlzIGZpbGUgaXMgYW4gYWxpYXMgZm9yIERpYWdub3N0
aWNzLmNwcCwgdXNlZCBmb3IgZ2VuZXJhdGluZworIGFuIG9iamVjdCBmaWxlIHdpdGggdGhlIG5h
bWUgRGlhZ25vc3RpY0Jhc2UubyBpbnN0ZWFkIG9mIERpYWdub3N0aWMuby4KKyBCZWNhdXNlIHRo
ZXJlIGFyZSBtdWx0aXBsZSBEaWFnbm9zdGljcy5jcHAgZmlsZXMgaW4gQU5HTEUgaW4gZGlmZmVy
ZW50CisgZm9sZGVycywgcGxhdGZvcm1zIHRoYXQgcHV0IG9iamVjdCBmaWxlcyBpbiB0aGUgc2Ft
ZSBmb2xkZXIgKGUuZy4gUVQpLAorIHNob3VsZCBpbmNsdWRlIHRoaXMgZmlsZSB0byBhdm9pZCBh
IG5hbWluZyBjb25mbGljdC4KKyovCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuY3BwIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTkxZTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJE
aXJlY3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitEaXJlY3RpdmVIYW5kbGVy
Ojp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1l
c3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZv
ciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0
byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8gcHJlcHJvY2Vzc29yIGRpcmVj
dGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCisvLyBoYW5kbGluZyB0
aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXIKK3sK
KyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7CisKKyAgICAv
LyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQorICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBi
ZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVy
c2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTg1YTkwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKQEAgLTAs
MCArMSw4OTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgi
CisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0
cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlSGFu
ZGxlci5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4
cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKwor
bmFtZXNwYWNlIHsKK2VudW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAor
ICAgIERJUkVDVElWRV9ERUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElW
RV9JRiwKKyAgICBESVJFQ1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBE
SVJFQ1RJVkVfRUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYs
CisgICAgRElSRUNUSVZFX0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNU
SVZFX0VYVEVOU0lPTiwKKyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElO
RQorfTsKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3Rp
dmUoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUlmKCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlSWZkZWYoImlmZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVJZm5kZWYoImlmbmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlRWxzZSgiZWxzZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0
aXZlRWxpZigiZWxpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
RW5kaWYoImVuZGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVF
cnJvcigiZXJyb3IiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVBy
YWdtYSgicHJhZ21hIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVF
eHRlbnNpb24oImV4dGVuc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlVmVyc2lvbigidmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBr
RGlyZWN0aXZlTGluZSgibGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tl
bjo6SURFTlRJRklFUikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYg
KHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQorICAgICAgICByZXR1cm4gRElSRUNU
SVZFX0RFRklORTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVm
KQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlSWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAg
ZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9JRkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7CisgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X0VMU0U7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKQorICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJRjsKKyAgICBl
bHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4g
RElSRUNUSVZFX0VSUk9SOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
UHJhZ21hKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVW
ZXJzaW9uKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X0xJTkU7CisKKyAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0YXRpYyBib29sIGlz
Q29uZGl0aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUpCit7CisgICAgc3dp
dGNoIChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICBj
YXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAg
IGNhc2UgRElSRUNUSVZFX0VMU0U6CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSB0b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0aWMgYm9vbCBpc0VP
RChjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHJldHVybiAodG9rZW4tPnR5cGUgPT0g
J1xuJykgfHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2
b2lkIHNraXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4qIHRva2VuKQorewor
ICAgIHdoaWxlKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBsZXhlci0+bGV4KHRva2Vu
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUg
cmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVu
ZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6TWFjcm9TZXQmIG1h
Y3JvU2V0KQoreworICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hY3Jv
U2V0LmZpbmQobmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVy
LT5zZWNvbmQucHJlZGVmaW5lZCA6IGZhbHNlOworfQorCituYW1lc3BhY2UgcHAKK3sKKworY2xh
c3MgRGVmaW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGVmaW5l
ZFBhcnNlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb1NldCog
bWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoK
KyAgICAgICAgbUxleGVyKGxleGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAg
ICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7CisKKyAgICAgICAg
bUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklE
RU5USUZJRVIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUg
IT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJlbiA9
IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhw
cmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIwIjsKKworICAgICAg
ICBpZiAocGFyZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsK
KyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT52
YWx1ZSA9IGV4cHJlc3Npb247CisgICAgfQorCisgIHByaXZhdGU6CisgICAgTGV4ZXIqIG1MZXhl
cjsKKyAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlh
Z25vc3RpY3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6
ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0
KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2
ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciks
CisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3Mp
LAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAg
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9
PSBUb2tlbjo6UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUo
dG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpM
QVNUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9j
ayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxv
Y2sudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgfSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0gJ1xuJykpOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQorewor
ICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0
aXZlKHRva2VuKTsKKworICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJs
b2NrL2dyb3VwLAorICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4K
KyAgICBpZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2ZShkaXJlY3RpdmUp
KQorICAgIHsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaChkaXJlY3RpdmUpCisgICAgeworICAgICAg
Y2FzZSBESVJFQ1RJVkVfTk9ORToKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRlZih0b2tlbik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgIHBhcnNlSWYo
dG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAg
ICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVD
VElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgICBwYXJzZUVsc2UodG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICAgIHBhcnNl
RWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6
CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBhcnNlUHJhZ21hKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FWFRFTlNJT046Cisg
ICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAgIHBhcnNlTGluZSh0
b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElW
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRv
a2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJ
VkVfREVGSU5FKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnZhbHVlLCAqbU1h
Y3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZF
RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAg
bWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZh
bHVlOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUg
PT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBG
dW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlw
ZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklE
RU5USUZJRVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJh
bWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUg
PT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsg
IC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAm
JiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQg
dGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1l
bnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dzIHVzIHRvIHJldXNl
IFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jvcy4KKyAgICAgICAg
dG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAgbWFjcm8ucmVwbGFj
ZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50IGxpc3QgaXMgbm90
IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3Ig
ZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5mcm9udCgp
LnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1h
Y3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1N
YWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVu
ZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3Jv
U2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1Nl
dDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgIGlm
IChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaXRlci0+c2Vj
b25kLnByZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYWNyb1NldC0+
ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiogdG9rZW4pCit7
CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKTsKKyAgICBw
YXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKQoreworICAg
IGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpOworICAgIHBh
cnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09
IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9j
ayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBC
bG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdo
b2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VM
U0VfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxvY2suZm91bmRFbHNlR3JvdXAg
PSB0cnVlOworICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFsaWRHcm91cDsKKyAg
ICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBh
cmUgZXh0cmEgdG9rZW5zIGFmdGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1Db25kaXRp
b25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNr
aXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsK
KyAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3Rp
Y3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91
bmRFbHNlR3JvdXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGJsb2NrLmZvdW5kVmFsaWRHcm91cCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCBwYXJzZSB0
aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEg
ZGlhZ25vc3RpYy4KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsKKyAgICAgICAgc2tp
cFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGludCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgIGJsb2Nr
LnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAg
PSBleHByZXNzaW9uICE9IDA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlm
KFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJF
Q1RJVkVfRU5ESUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
RU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3RhY2su
cG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjZW5k
aWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJv
cihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElS
RUNUSVZFX0VSUk9SKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAq
dG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJl
Y3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7
Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBh
c3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAgIGVu
dW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BBUkVO
LAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsKKwor
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOworICAg
IGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
KyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnZhbHVl
OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklE
RU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVO
OgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAg
ICAgdmFsdWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0
b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIFJJR0hUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gJyknKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICB2YWxp
ZCA9IHZhbGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAvLyBFbXB0eSBwcmFn
bWEuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRfUEFSRU4pIHx8ICAgICAg
Ly8gV2l0aG91dCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRf
UEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQpCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdN
QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsK
KyAgICB9CisgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3Rp
ZnkgZm9yIGVtcHR5IHByYWdtYS4KKyAgICB7CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5o
YW5kbGVQcmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQoreworICAg
IGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FWFRFTlNJT04pOworCisg
ICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAor
ICAgICAgICBFWFRfQkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7Cisg
ICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7
CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUg
IT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6Cisg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgQ09MT046CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6
JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+
dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2Vu
LT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAg
ICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAg
ICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xu
JykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Cisg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZh
bGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChz
dGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGly
ZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOwor
fQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBl
bnVtIFN0YXRlCisgICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1C
RVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBm
aWxlID0gMDsKKyAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5k
ZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7Cisg
ICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6Cisg
ICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlk
KSBsaW5lID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05V
TUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVl
LmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsK
KyAgICB9CisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3Rh
dGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tl
bml6ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05V
TUJFUiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCiti
b29sIERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25h
bEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxv
Y2suc2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxC
bG9jayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVlOworICAgIGJsb2NrLmxv
Y2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYgKHNraXBwaW5nKCkpCisgICAgewor
ICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBhbm90aGVyIGNvbmRp
dGlvbmFsIGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFzIGEgY29uc2VxdWVu
Y2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAgICAgICAvLyBCZSBjYXJlZnVsIG5v
dCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1pZ2h0CisgICAgICAg
IC8vIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0
b2tlbik7CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgICAgICBzd2l0Y2ggKGRp
cmVjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAg
ICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICAgICAgZXhw
cmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Np
b24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAwOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibG9jay5za2lwR3JvdXAg
PSBleHByZXNzaW9uID09IDA7CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJl
c3Npb24gIT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVzaF9iYWNrKGJsb2Nr
KTsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYp
IHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKSk7
CisKKyAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXplciwgbU1hY3JvU2V0
LCBtRGlhZ25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5l
ZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIg
ZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKworICAgIGlu
dCBleHByZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgZXhw
cmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisgICAgLy8gV2FybiBp
ZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgorICAgIGlmICghaXNFT0Qo
dG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30K
KworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYp
IHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
KTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFj
cm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVl
KTsKKyAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAw
OworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZmRlZiBleHByZXNz
aW9uLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2Vu
aXplciwgdG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNWEwMWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuaApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCisjaW5jbHVkZSAi
TGV4ZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCisjaW5j
bHVkZSAiU291cmNlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdu
b3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xh
c3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJl
Y3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOwor
CisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VE
ZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9r
ZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VF
cnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZl
cnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOwor
CisgICAgYm9vbCBza2lwcGluZygpIGNvbnN0OworICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElm
KFRva2VuKiB0b2tlbik7CisgICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7
CisgICAgaW50IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7CisKKyAgICBzdHJ1
Y3QgQ29uZGl0aW9uYWxCbG9jaworICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKKyAg
ICAgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIGJvb2wgc2tpcEJsb2NrOwor
ICAgICAgICBib29sIHNraXBHcm91cDsKKyAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7Cisg
ICAgICAgIGJvb2wgZm91bmRFbHNlR3JvdXA7CisKKyAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygp
IDoKKyAgICAgICAgICAgIHNraXBCbG9jayhmYWxzZSksCisgICAgICAgICAgICBza2lwR3JvdXAo
ZmFsc2UpLAorICAgICAgICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kRWxzZUdyb3VwKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAg
IHN0ZDo6dmVjdG9yPENvbmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOworICAgIFRv
a2VuaXplciogbVRva2VuaXplcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdu
b3N0aWNzKiBtRGlhZ25vc3RpY3M7CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhh
bmRsZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iYmMzNzFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTAs
MCArMSwxOTI4IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIu
ICAqLworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg
c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lh
bCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwor
ICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0
ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRo
YXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tl
bGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxl
dG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRo
ZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3Zl
IHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRv
biBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNw
ZWNpYWwgZXhjZXB0aW9uLgorICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBC
aXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNo
YXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAi
c2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hv
dWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIg
bmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlh
YmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3Mu
CisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRl
IGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUg
bm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8q
IElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNv
biB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKKworLyogU2tl
bGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQ
dXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBQdXNoIHBhcnNlcnMuICAq
LworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBV
TEwgMQorCisvKiBVc2luZyBsb2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAor
CisvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2Rl
ZmluZSB5eXBhcnNlICAgICAgICAgcHBwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBs
ZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAg
ICAgIHBwbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgcHBjaGFyCisjZGVmaW5lIHl5ZGVi
dWcgICAgICAgICBwcGRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICBwcG5lcnJzCisKKwor
LyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdn
ZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0Nf
VkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5j
bHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQo
X01TQ19WRVIpCit0eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3Ry
dG9pNjQKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZ
UEU7CisjZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisj
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRl
eHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciog
bGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAv
LyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0
KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogcmVhc29uKTsKKworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZ
REVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2Ug
ZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVS
Uk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUg
WVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUu
ICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNl
bmRpZgorCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZ
WVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBz
byB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAq
LworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1Bf
T1IgPSAyNTksCisgICAgIE9QX0FORCA9IDI2MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9Q
X0VRID0gMjYyLAorICAgICBPUF9HRSA9IDI2MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9Q
X1JJR0hUID0gMjY1LAorICAgICBPUF9MRUZUID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAg
fTsKKyNlbmRpZgorCisKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2ls
bCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlm
CisKKworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwor
CisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQ
RV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVk
ZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9J
TlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50
ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZk
ZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Cisj
ZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7
CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5k
ZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9f
U0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBk
ZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZ
WVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5l
ZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5j
bHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAg
ZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBl
bmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAor
IyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBi
eSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18K
KyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUp
IC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3Vw
cHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxp
bnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3Rh
dGljIGludAorWVlJRCAoeXlpKQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5
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
Ki8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZ
UEUgeXl2c19hbGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3
ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNL
X0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUg
b2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRo
CisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAo
KE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAg
ICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJP
TSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4g
ICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05V
Q19fCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRp
bl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UK
KyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJ
ewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChD
b3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJ
CVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9j
YXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAg
bG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBu
ZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0
aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJv
cGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJ
CQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAor
CVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNr
ID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUg
KiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3
aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBv
ZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlM
QVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQor
CisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRP
S0VOUyAgMjcKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZp
bmUgWVlOTlRTICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmlu
ZSBZWU5SVUxFUyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2Rl
ZmluZSBZWU5TVEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1i
b2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9L
ICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJ
CQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0
ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYs
ICAgIDE5LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIElu
ZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlS
SFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAg
MCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIz
LCAgICAyNywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAg
IDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIs
ICAgIDg1LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQg
bGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXly
aHNbXSA9Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAg
ICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5
LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAg
IDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAg
MjksCisgICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywg
ICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAx
MiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAg
ICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisg
ICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgIDIxLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwg
ICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAt
MSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBz
b3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4
NywgICAgOTQsICAgIDk1LCAgICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAg
IDExMywgICAxMTYsICAgMTE5LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAg
MTM3LCAgIDE0MCwKKyAgICAgMTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgs
ICAgMTgxCit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZ
WVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRo
ZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFy
dGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAq
Y29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJD
T05TVF9JTlQiLCAiT1BfT1IiLCAiT1BfQU5EIiwgIid8JyIsCisgICInXiciLCAiJyYnIiwgIk9Q
X05FIiwgIk9QX0VRIiwgIic8JyIsICInPiciLCAiT1BfR0UiLCAiT1BfTEUiLAorICAiT1BfUklH
SFQiLCAiT1BfTEVGVCIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlVOQVJZ
IiwgIichJyIsCisgICInficiLCAiJygnIiwgIicpJyIsICIkYWNjZXB0IiwgImlucHV0IiwgImV4
cHJlc3Npb24iLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1b
WVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAg
dG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVt
W10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAx
MjQsICAgIDk0LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2Mywg
ICAyNjQsICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAz
NywgICAyNjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZ
WVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVz
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywKKyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9
OworCisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdp
dGggaW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNv
bWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJy
b3IuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAg
ICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDIsICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYs
ICAgIDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9
Cit7CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAt
LSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5V
TS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eXBhY3RbXSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEs
ICAgIDI3LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAg
NDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAg
IDExNiwgICAxMzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEw
LCAgIC0xMCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAg
LTExCit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV9pbnQ4IHl5cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZ
WVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVN
LiAgSWYKKyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVj
ZSB0aGUgcnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRv
IHdoYXQgWVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAg
Ki8KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
dGFibGVbXSA9Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsCisgICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIs
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywK
KyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMgorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAg
ICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywK
KyAgICAgIDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAg
IDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAg
ICA5LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAor
ICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlT
VE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcK
KyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5Cit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5l
IHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2Rl
ZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZp
bmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJv
cmxhYgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyBy
ZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhl
IG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIg
aGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZB
SUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRl
cHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRv
IHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vzc2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdv
dG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3Vw
cHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4g
IE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNv
bWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVt
b3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBC
aXNvbiAyLjUuICAqLworI2VuZGlmCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJy
c3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJ
CQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJ
CQkJCQkJXAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAo
VmFsdWUpOwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJ
XAorICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJ
CQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAg
ICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikp
OyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQg
KDApKQorCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKwor
LyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBS
SFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0
aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRl
ZmluZWQpLiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5k
ZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywg
TikJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAor
CSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7
CVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9j
b2x1bW47CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5s
YXN0X2xpbmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywg
TikubGFzdF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJ
CQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUg
ICA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJl
bnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhT
TE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZ
WUlEICgwKSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBs
b2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9y
aWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIg
Y29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRl
ZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZ
WUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2Mp
CQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9j
KS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xp
bmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVgg
LS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRl
ZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFN
KQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlm
CisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisK
KyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlm
CisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRl
YnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkK
KworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24p
CQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAg
ewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJ
CQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUs
IFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJ
CSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNF
RCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZv
aWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZ
U1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAg
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0Owor
I2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4
dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBS
SU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZ
WVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAg
ICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5
eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250
ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0
cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAg
IGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAg
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Cisg
IGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0
eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBp
dHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0
YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQor
I2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAg
IHl5dHlwZV9pbnQxNiAqeXlib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRp
ZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0
b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90
dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisg
ICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5
eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUs
IGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250
ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Cisg
IGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwor
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1
KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5n
IHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAg
eworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAg
IHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJ
CSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAg
ICwgY29udGV4dCk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQor
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
IHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIFByZXZlbnQgd2Fy
bmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFy
c2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlm
CisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNl
CitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwor
CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1
c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBB
UlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50
Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQ
QVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNl
IChjb250ZXh0KQorICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyog
VGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGlj
IHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisg
ICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJy
czsKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQg
YmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsK
KworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVs
YXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVl
cy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywg
dG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50
MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZ
UEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAg
aW50IHl5cmVzdWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFi
bGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQor
ICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJP
Ul9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2Nh
dGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXlt
c2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlm
CisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkK
KworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBy
dWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4g
ICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsK
KyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7Cisg
IHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8q
IENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBw
b2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0
YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0
ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQu
ICAqLworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3Rh
dGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlz
IGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwg
Y2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwor
ICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVu
cyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9
IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAg
eworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tz
LCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3Mg
KyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5j
ZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0
aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAg
Ki8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6
ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMg
dXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBh
cmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEg
bWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAq
IHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7
CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBp
Zm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxz
ZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAo
WVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAg
eXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJ
eXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNz
MSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikg
WVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0
cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxv
YywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRl
ZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVF
ICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwor
CisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsg
eXlzaXplIC0gMTsKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNy
ZWFzZWQgdG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsK
KworICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsK
KyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5
c3RhdGUpKTsKKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisg
IGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0t
LS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2
ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdl
IG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0
cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRv
a2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9O
SU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29r
YWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAg
IH0KKworICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9r
ZW4gPSBZWUVPRjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5w
dXQuXG4iKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5
dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFj
dGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0
ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47Cisg
IGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikK
KyAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9
IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJ
Z290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOwor
ICAgIH0KKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhy
ZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykK
KyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAq
LworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxs
b2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZ
WUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdv
dG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQg
YWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5
biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxh
YjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxl
IHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlM
RU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246
CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBz
ZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVk
IGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmlu
ZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBz
bWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkg
YmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKwor
CisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAg
ICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19j
YXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0g
KHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4g
KHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxOToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyld
KSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAg
ICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAyMDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0g
PDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjQ6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAtICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygyKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXlu
XSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAw
OworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7
CisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJt
aW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2Ug
cG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8K
KworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9L
RU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0
YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsK
KworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5v
dCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAq
LworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZ
RVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgw
LCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19h
bGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxv
YyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9j
IDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxs
b2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAg
ICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNp
emVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNp
emUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXlt
c2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkg
IH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9y
IikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAg
IGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5k
IG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJ
fQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJ
CSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsK
Kwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2Vu
IGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJs
YWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJS
T1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KK3l5ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVu
IHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwg
eXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAq
LworICBpZiAoLypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5
eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29t
bW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVk
IGRlY3JlbWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5
eXBhY3RbeXlzdGF0ZV07CisgICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5
biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hl
Y2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsK
KwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBv
cCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRv
a2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAg
eXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5
dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKwor
ICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21l
cyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Y2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNv
bWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Ym9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmlu
ZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9y
eSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29u
dGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZh
bGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlF
TVBUWSkKKyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwK
KwkJIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUg
c3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlB
Qk9SVCBvciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tf
UFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAg
ICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5
eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5
b3ZlcmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsK
KyNlbmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisg
ICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMg
dXNlZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5
bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0g
MDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2gg
KHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Cisg
ICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwor
ICAgICAgICB0eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0FORDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfTkU6IHR5cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6
IHR5cGUgPSBPUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUg
PSBPUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9M
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdI
VDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7
IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAn
Xic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFr
OworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5
cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAg
ICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAn
JSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJy
ZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6
IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwor
CisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBu
ZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAw
KSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2
b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAg
IGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VY
UFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwor
fQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2Vy
KExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxl
eGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVz
c2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250
ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAg
ICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAg
ICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4
dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAx
OgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7
CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2Up
OworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJS
T1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDkyZDA1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApA
QCAtMCwwICsxLDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0VYUFJFU1NJT05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3Bh
Y2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tl
bjsKKworY2xhc3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lv
blBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBi
b29sIHBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4
ZXIqIG1MZXhlcjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9O
X1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzZjN2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLnkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJl
cHJvY2Vzc29yIGV4cHJlc3Npb24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNP
IE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xT
TCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIu
c2guIERPIE5PVCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBi
eSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3Rk
bGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2lu
Y2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19W
RVIpCit0eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQK
KyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7Cisj
ZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5l
IFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sK
KyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7
CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1l
c3BhY2UKKyV9CisKKyVkZWZpbmUgYXBpLnB1cmUKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2Ut
cGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQor
Cisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7
CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNv
bik7CislfQorCisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5ECisl
bGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxlZnQg
JzwnICc+JyBPUF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysnICct
JworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAgIDog
ZXhwcmVzc2lvbiB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGlu
dD4oJDEpOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6
IENPTlNUX0lOVAorICAgIHwgZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gJ14nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnJicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uIE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xF
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJz4nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnPCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxID4+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JysnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiAnJScgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEg
PDwgIiAlICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0
cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0K
KyAgICB9CisgICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQz
ID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+
cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAg
ICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEg
LyAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXBy
ZWMgVU5BUlkgeworICAgICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Np
b24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4
cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwg
JysnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQor
ICAgIHwgJygnIGV4cHJlc3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisK
KyUlCisKK2ludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47
CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6
Q09OU1RfSU5UOgorICAgICAgICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigp
LCBOVUxMLCAwKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0dFOiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xF
OiB0eXBlID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0
eXBlID0gT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5
cGUgPSBPUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsK
KyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBl
ID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAg
IGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0n
OyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2Ug
JyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVh
azsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0
eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAg
ICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0g
JyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2
YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAg
aWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4g
dHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhw
cmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgor
ICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQor
Citib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQp
Cit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlh
Z25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2Vu
ID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5
cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoK
KyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5s
b2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9JbnB1dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAi
SW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVn
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8
Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291
bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgp
LAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJv
ck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1D
b3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dp
dGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6
SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAg
ICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7
CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50
IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFj
ayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJ
bnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIq
IGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJ
bmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBm
dWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5k
ZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0g
MDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1D
b3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMg
PT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2Nr
Q29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkK
KyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5j
SW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAg
bWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5j
SW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5j
SW5kZXggKz0gc2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVk
IHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXgg
PT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBr
U3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAnLycu
Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAg
ICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAgICAg
ICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90
IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVM
aW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3RhdGUg
PSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcq
JyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9
ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAg
ICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFyZSBu
ZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK21S
ZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAgICAg
IH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hhcigp
Ci17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3RyID0g
bVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8gU3dp
dGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgotICAg
IGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciByZWFk
IGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYgKCgo
bGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVuZ3Ro
ID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJpbmco
KTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAgICAv
LyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUluZGV4
OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAgICAv
LyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNpemUg
PSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRTdHJp
bmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAwOwot
ICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkgJiYg
aXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0eShp
bnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0IGNo
YXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3Ro
KG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAmJiAo
c3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGluZGV4
KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGggPyBt
TGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFtZXNw
YWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAotLy8g
UmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8gU3Ry
aXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNsYXNz
IElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBl
bnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JVbmV4
cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJv
cjsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWlu
ZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsg
fQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2Yo
KSBjb25zdDsKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBj
b25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4
XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2lu
ZGV4XTsgfQogCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8gYnVm
LgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAgLy8g
SXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25seSBv
bmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBvcnR1
bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1bCBk
aWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUp
OworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgotICAg
IGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0ZUlu
aXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9ja0Nv
bW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAg
ICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7Ci0g
ICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRoZSBu
ZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY3Vy
cmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmluZygp
OwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5LgotICAg
IGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVuZ3Ro
IG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGZv
ciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBpbmRl
eCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9
OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7
IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAgY29u
c3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0gICAg
Ly8gQ3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXggb2Yg
c3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8gU2l6
ZSBvZiBzdHJpbmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0
aDsKIAotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJvcjsK
LSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAvLyBu
YW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCkBA
IC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2Ug
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwor
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgfkxleGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9MRVhFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5Ni4u
YjJlMzA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwxNyBA
QAogCiAjaW5jbHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1
ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewog
Ci1NYWNybzo6TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1l
LAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1l
KG5hbWUpLAotICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1l
bnRzKHJlcGxhY2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3JvOjpl
cXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsKLQot
ICAgIGlmIChtUGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFt
ZXRlcnMtPmJlZ2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBk
ZWxldGUgbVBhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAg
ewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNl
bWVudHMtPmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwot
ICAgIH0KKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5h
bWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFy
YW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVu
dHMpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCmlu
ZGV4IGUyNDMzMDYuLjdlYzAxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDM4IEBACiAj
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+
CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNp
bmNsdWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVj
dCBUb2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAg
ICB7CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OworICAgIHR5
cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmlu
ZWQoZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7CiAKLSAgICAvLyBUYWtlcyBvd25lcnNo
aXAgb2YgcG9pbnRlciBwYXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAg
ICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywK
LSAgICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQot
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpz
dHJpbmcqIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRv
a2VuVmVjdG9yKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAg
ICBjb25zdCBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxh
Y2VtZW50czsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1h
Y3JvKTsKLQotICAgIFR5cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRv
a2VuVmVjdG9yKiBtUGFyYW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsK
KyAgICBib29sIHByZWRlZmluZWQ7CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAg
VHlwZSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOworICAgIFJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3Bh
Y2UgcHAKLSNlbmRpZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40MTU0ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAg
LTAsMCArMSwzNjkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5o
IgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8
c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIFRva2VuTGV4ZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gVG9rZW5WZWN0b3I7CisK
KyAgICBUb2tlbkxleGVyKFRva2VuVmVjdG9yKiB0b2tlbnMpCisgICAgeworICAgICAgICB0b2tl
bnMtPnN3YXAobVRva2Vucyk7CisgICAgICAgIG1JdGVyID0gbVRva2Vucy5iZWdpbigpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAg
aWYgKG1JdGVyID09IG1Ub2tlbnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2Vu
LT5yZXNldCgpOworICAgICAgICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6TEFTVDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICp0b2tlbiA9ICptSXRl
cisrOworICAgICAgICB9CisgICAgfQorCisgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVG9rZW5MZXhlcik7CisKKyAgICBUb2tlblZlY3RvciBtVG9rZW5zOworICAg
IFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBtSXRlcjsKK307CisKK01hY3JvRXhwYW5kZXI6
Ok1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0
KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK01hY3Jv
RXhwYW5kZXI6On5NYWNyb0V4cGFuZGVyKCkKK3sKKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2su
ZW1wdHkoKSkgcG9wTWFjcm8oKTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpsZXgoVG9rZW4q
IHRva2VuKQoreworICAgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4odG9r
ZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0b2tlbi0+ZXhwYW5zaW9uRGlzYWJsZWQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25z
dCBNYWNybyYgbWFjcm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5v
dCBleHBhbmRlZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0
RXhwYW5zaW9uRGlzYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRv
a2VuTGVmdFBhcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBp
bW1lZGlhdGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAg
ICAvLyB0aGlzIG1hY3JvIHNob3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAg
IGlmIChtUmVzZXJ2ZVRva2VuLmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNl
cnZlVG9rZW47CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisg
ICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCkt
PmVtcHR5KCkpCisgICAgeworICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICgh
bUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRT
dGFjay5iYWNrKCktPmdldCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4
ZXItPmxleCh0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9r
ZW4oY29uc3QgVG9rZW4mIHRva2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5i
YWNrKCk7CisgICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0
LT5pbmRleCA+PSAwKTsKKyAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250
ZXh0LT5pbmRleF0gPT0gdG9rZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBh
c3NlcnQoIW1SZXNlcnZlVG9rZW4uZ2V0KCkpOworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0
KG5ldyBUb2tlbih0b2tlbikpOworICAgIH0KK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjppc05l
eHRUb2tlbkxlZnRQYXJlbigpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRv
a2VuKTsKKworICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7CisgICAgdW5nZXRU
b2tlbih0b2tlbik7CisKKyAgICByZXR1cm4gbHBhcmVuOworfQorCitib29sIE1hY3JvRXhwYW5k
ZXI6OnB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVy
KQoreworICAgIGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOworICAgIGFzc2VydCghaWRlbnRpZmll
ci5leHBhbnNpb25EaXNhYmxlZCgpKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci50eXBlID09IFRv
a2VuOjpJREVOVElGSUVSKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9PSBtYWNyby5u
YW1lKTsKKworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisgICAgaWYgKCFl
eHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50
aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVl
OworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKKyAgICBj
b250ZXh0LT5tYWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChy
ZXBsYWNlbWVudHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKK3sKKyAg
ICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNyb0NvbnRleHQqIGNv
bnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNr
KCk7CisKKyAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNzZXJ0KGNvbnRleHQt
Pm1hY3JvLT5kaXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7
CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFj
cm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVwbGFjZW1lbnRzLT5j
bGVhcigpOworICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKKyAgICB7Cisg
ICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOwor
CisgICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOworICAgICAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKKworICAgICAgICAg
ICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgVG9rZW4m
IHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAgICAgICBpZiAobWFjcm8ubmFt
ZSA9PSBrTGluZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRp
b24ubGluZTsKKyAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Cisg
ICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmlsZTsKKyAgICAg
ICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtYWNyby50eXBl
ID09IE1hY3JvOjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJn
czsKKyAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3Jv
LCBhcmdzLCByZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVwbGFjZW1lbnRzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRva2VuJiByZXBs
ID0gcmVwbGFjZW1lbnRzLT5hdChpKTsKKyAgICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGlu
aGVyaXRzIHRoZSBwYWRkaW5nCisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVu
dGlmaWVyIHRva2VuLgorICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZp
ZXIuYXRTdGFydE9mTGluZSgpKTsKKyAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNl
KGlkZW50aWZpZXIuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlcGwu
bG9jYXRpb24gPSBpZGVudGlmaWVyLmxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBt
YWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYg
aWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZl
Y3RvcjxNYWNyb0FyZz4qIGFyZ3MpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4o
JnRva2VuKTsKKyAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOworCisgICAgYXJncy0+cHVz
aF9iYWNrKE1hY3JvQXJnKCkpOworICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFy
ZW5zICE9IDA7ICkKKyAgICB7CisgICAgICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NB
VElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRp
b24sIGlkZW50aWZpZXIudmFsdWUpOworICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRv
a2VuLgorICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUg
aWYgdG9rZW4gaXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4KKyAgICAgICAgc3dpdGNo
ICh0b2tlbi50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAg
ICArK29wZW5QYXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIC0tb3BlblBhcmVuczsKKyAg
ICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAwOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVu
dHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAorICAgICAgICAgICAgLy8gdGhl
IGNvbW1hIHRva2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAor
ICAgICAgICAgICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgorICAgICAgICAgICAgaWYgKG9wZW5Q
YXJlbnMgPT0gMSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOworICAgICAgICAgICAgaXNB
cmcgPSBvcGVuUGFyZW5zICE9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGlzQXJnKQorICAgICAgICB7CisgICAgICAgICAgICBNYWNyb0Fy
ZyYgYXJnID0gYXJncy0+YmFjaygpOworICAgICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNl
IGlzIG5vdCBwYXJ0IG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAgICAgIGlmIChhcmcuZW1wdHko
KSkgdG9rZW4uc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKKyAgICAgICAgICAgIGFyZy5wdXNo
X2JhY2sodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgTWFjcm86OlBhcmFt
ZXRlcnMmIHBhcmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7CisgICAgLy8gSWYgdGhlcmUgaXMgb25s
eSBvbmUgZW1wdHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCisg
ICAgaWYgKHBhcmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJv
bnQoKS5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgYXJncy0+Y2xlYXIoKTsKKyAgICB9CisgICAg
Ly8gVmFsaWRhdGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGFyZ3MtPnNpemUo
KSAhPSBwYXJhbXMuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0g
YXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPworICAgICAgICAgICAgRGlh
Z25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9zdGljczo6
TUFDUk9fVE9PX01BTllfQVJHUzsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlk
ZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJz
dGl0dXRpb24uCisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlk
dWFsbHkgYmVmb3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9k
eS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQorICAgIHsK
KyAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOworICAgICAgICBUb2tlbkxleGVy
IGxleGVyKCZhcmcpOworICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1h
Y3JvU2V0LCBtRGlhZ25vc3RpY3MpOworCisgICAgICAgIGFyZy5jbGVhcigpOworICAgICAgICBl
eHBhbmRlci5sZXgoJnRva2VuKTsKKyAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46
OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAg
ICAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNv
bnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytp
KQorICAgIHsKKyAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNb
aV07CisgICAgICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1p
emUgdGhpcy4KKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3Jv
IHBhcmFtcyBldmVyeSB0aW1lLgorICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNh
Y2hlZCB3aXRoIHRoZSByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAgTWFjcm86OlBhcmFtZXRl
cnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICBtYWNyby5w
YXJhbWV0ZXJzLmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudmFsdWUpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6OmRpc3RhbmNl
KG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7CisgICAgICAgIGNvbnN0IE1hY3JvQXJn
JiBhcmcgPSBhcmdzW2lBcmddOworICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpUmVwbCA9
IHJlcGxhY2VtZW50cy0+c2l6ZSgpOworICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBs
YWNlbWVudHMtPmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKKyAgICAgICAgLy8gVGhl
IHJlcGxhY2VtZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCisgICAg
ICAgIC8vIG1hY3JvIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICByZXBsYWNlbWVudHMtPmF0
KGlSZXBsKS5zZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAg
fQorfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDRlYmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAK
K3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMg
TGV4ZXIKK3sKKyAgcHVibGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNy
b1NldCogbWFjcm9TZXQsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+
TWFjcm9FeHBhbmRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwor
CisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5k
ZXIpOworCisgICAgdm9pZCBnZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRU
b2tlbihjb25zdCBUb2tlbiYgdG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4o
KTsKKworICAgIGJvb2wgcHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4m
IGlkZW50aWZpZXIpOworICAgIHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFj
cm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4m
IGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJl
cGxhY2VtZW50cyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsK
KyAgICBib29sIGNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxh
Y2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0
cnVjdCBNYWNyb0NvbnRleHQKKyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAg
ICAgICAgc2l6ZV90IGluZGV4OworICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1l
bnRzOworCisgICAgICAgIE1hY3JvQ29udGV4dCgpIDogbWFjcm8oMCksIGluZGV4KDApIHsgfQor
ICAgICAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRz
LnNpemUoKTsgfQorICAgICAgICBjb25zdCBUb2tlbiYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1l
bnRzW2luZGV4KytdOyB9CisgICAgICAgIHZvaWQgdW5nZXQoKSB7IC0taW5kZXg7IH0KKyAgICB9
OworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERp
YWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVz
ZXJ2ZVRva2VuOworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7
Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwCmluZGV4IGVmNDllNTcuLjIxOTAxZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwxMDggQEAKIAogI2luY2x1ZGUgIlBy
ZXByb2Nlc3Nvci5oIgogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+
CisjaW5jbHVkZSA8c3N0cmVhbT4KIAotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5j
bHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIkRpYWdu
b3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8u
aCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNs
dWRlICJUb2tlbml6ZXIuaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLVByZXByb2Nlc3Nvcjo6UHJl
cHJvY2Vzc29yKCkgOiBtQ29udGV4dChOVUxMKQorc3RydWN0IFByZXByb2Nlc3NvckltcGwKIHsK
KyAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9TZXQ7Cisg
ICAgVG9rZW5pemVyIHRva2VuaXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFy
c2VyOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXByb2Nlc3Nv
ckltcGwoRGlhZ25vc3RpY3MqIGRpYWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVI
YW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAor
ICAgICAgICB0b2tlbml6ZXIoZGlhZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5p
emVyLCAmbWFjcm9TZXQsIGRpYWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBtYWNyb0V4
cGFuZGVyKCZkaXJlY3RpdmVQYXJzZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7CisgICAgfQor
fTsKKworUHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZl
SGFuZGxlcikKK3sKKyAgICBtSW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNz
LCBkaXJlY3RpdmVIYW5kbGVyKTsKIH0KIAogUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkK
IHsKLSAgICBkZWxldGUgbUNvbnRleHQ7CisgICAgZGVsZXRlIG1JbXBsOwogfQogCi1ib29sIFBy
ZXByb2Nlc3Nvcjo6aW5pdCgpCitib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKIHsKLSAgICBtQ29udGV4dCA9
IG5ldyBDb250ZXh0OwotICAgIHJldHVybiBtQ29udGV4dC0+aW5pdCgpOworICAgIHN0YXRpYyBj
b25zdCBpbnQga0dMU0xWZXJzaW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0YW5kYXJkIHByZS1k
ZWZpbmVkIG1hY3Jvcy4KKyAgICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKKyAgICBw
cmVkZWZpbmVNYWNybygiX19GSUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19WRVJT
SU9OX18iLCBrR0xTTFZlcnNpb24pOworICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOwor
CisgICAgcmV0dXJuIG1JbXBsLT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgp
OwogfQogCi1ib29sIFByZXByb2Nlc3Nvcjo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpw
cmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJU
KChjb3VudCA+PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8
fCAoc3RyaW5nID09IE5VTEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjpzdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2Vu
OworICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0g
c3RyZWFtLnN0cigpOwogCi0gICAgcmVzZXQoKTsKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNy
by5wcmVkZWZpbmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOwor
ICAgIG1hY3JvLm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2so
dG9rZW4pOwogCi0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxl
bmd0aCwgJm1Ub2tlbnMpOworICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQog
Ci12b2lkIFByZXByb2Nlc3Nvcjo6cmVzZXQoKQordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tl
biogdG9rZW4pCiB7Ci0gICAgc3RkOjpmb3JfZWFjaChtVG9rZW5zLmJlZ2luKCksIG1Ub2tlbnMu
ZW5kKCksIERlbGV0ZSgpKTsKLSAgICBtVG9rZW5zLmNsZWFyKCk7CisgICAgYm9vbCB2YWxpZFRv
a2VuID0gZmFsc2U7CisgICAgd2hpbGUgKCF2YWxpZFRva2VuKQorICAgIHsKKyAgICAgICAgbUlt
cGwtPm1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbi0+dHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5nIGlu
dGVybmFsIHByZXByb2Nlc3NpbmcgdG9rZW5zLgorICAgICAgICAgIC8vIENvbnZlcnQgcHJlcHJv
Y2Vzc2luZyB0b2tlbnMgdG8gY29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAorICAgICAgICAgIC8v
IGRpYWdub3N0aWNzLgorICAgICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6CisgICAgICAgICAg
ICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tl
bjo6UFBfTlVNQkVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBtSW1wbC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgdmFsaWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oCmluZGV4IDg4NWJiNzAuLjVmZTM1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1ByZXByb2Nlc3Nvci5oCkBAIC03LDM0ICs3LDQxIEBACiAjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1BSRVBST0NFU1NPUl9IXwogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNp
bmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCiAKIG5hbWVzcGFjZSBwcAog
ewogCi1jbGFzcyBDb250ZXh0OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVI
YW5kbGVyOworc3RydWN0IFByZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47CiAKIGNsYXNz
IFByZXByb2Nlc3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7CisgICAgUHJl
cHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcik7CiAgICAgflByZXByb2Nlc3NvcigpOwogCi0gICAgYm9vbCBpbml0KCk7
Ci0KLSAgICBib29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdKTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbVRva2Vucy5iZWdpbigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtVG9rZW5zLmVuZCgpOyB9CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAg
Ly8gc3RyaW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAg
ICAvLyBsZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAv
LyBJZiBsZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRl
cm1pbmF0ZWQuCisgICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBp
dCBwb2ludHMgdG8gYW4gYXJyYXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBm
b3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8g
RWFjaCBlbGVtZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBv
ZiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAw
IHRvIGluZGljYXRlIHRoYXQgdGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4K
KyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKKyAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCisgICAg
dm9pZCBwcmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOworCisgICAg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwotCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQg
c3RhdGUuCi0gICAgdm9pZCByZXNldCgpOworICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihQcmVwcm9jZXNzb3IpOwogCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAgVG9rZW5WZWN0
b3IgbVRva2VuczsgIC8vIE91dHB1dC4KKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKIH07
CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwor
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVz
cGFjZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlv
bigpIDogZmlsZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50
IGwpIDogZmlsZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBv
dGhlci5maWxlKSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmls
ZTsKKyAgICBpbnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291
cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1
cm4gbGhzLmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0
dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAKaW5kZXggYTJlNzU5Yy4uOTYwMzgwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmNwcApAQCAtNiw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAot
I2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5l
U2l6ZSA9IDE2OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1h
c2sgPSAoMSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAot
VG9rZW46OkxvY2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUp
Cit2b2lkIFRva2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxp
bmVTaXplKSB8IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAg
IGZsYWdzID0gMDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUu
Y2xlYXIoKTsKIH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBp
bnQqIGxpbmUsIGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3Ro
ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVT
aXplOwotICAgIGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAg
IHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3Ro
ZXIuZmxhZ3MpICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYK
KyAgICAgICAgICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExv
Y2F0aW9uIGxvY2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxv
Y2F0aW9uKGxvY2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVl
KQordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChz
dGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAg
ICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewot
ICAgIGRlbGV0ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBz
cGFjZSkKK3sKKyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQ
QUNFOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQor
Cit2b2lkIFRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAg
aWYgKGRpc2FibGUpCisgICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBl
bHNlCisgICAgICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0
cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQog
ewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNU
QU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoK
LSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkp
CisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0
dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbi5oCmluZGV4IDRmNWExMmIuLjUyMzEwMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW4uaApAQCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hf
CiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0
b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxv
Y2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2Vu
CiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9j
YXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9p
ZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAg
ICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8g
VGFrZXMgb3duZXJzaGlwIG9mIHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwg
aW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElE
RU5USUZJRVIgPSAyNTgsCiAKLSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1Mb2NhdGlvbjsgfQotICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAg
ICBjb25zdCBzdGQ6OnN0cmluZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAg
ICAgICAgQ09OU1RfSU5ULAorICAgICAgICBDT05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAg
ICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAg
T1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisg
ICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAg
T1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FT
U0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAg
ICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAg
T1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNT
SUdOLAogCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6
OnN0cmluZyogbVZhbHVlOworICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgor
ICAgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVy
bmFsbHkuCisgICAgICAgIC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBv
ciBjaGVjayBmb3IgdGhlbS4KKyAgICAgICAgUFBfSEFTSCwKKyAgICAgICAgUFBfTlVNQkVSLAor
ICAgICAgICBQUF9PVEhFUgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAg
QVRfU1RBUlRfT0ZfTElORSAgID0gMSA8PCAwLAorICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAg
PSAxIDw8IDEsCisgICAgICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgorICAgIH07CisK
KyAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7
CisgICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0
IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxp
bmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9Cisg
ICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFk
aW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0g
MDsgfQorICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgYm9v
bCBleHBhbnNpb25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9E
SVNBQkxFRCkgIT0gMDsgfQorICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNh
YmxlKTsKKworICAgIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3Vy
Y2VMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKIH07CiAKLXR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VG9rZW4qPiBUb2tlblZlY3RvcjsKLXR5cGVkZWYgVG9rZW5WZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIFRva2VuSXRlcmF0b3I7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVh
bHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBj
b25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQogCiBl
eHRlcm4gc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBU
b2tlbiYgdG9rZW4pOwogCiB9ICAvLyBuYW1lcHNhY2UgcHAKICNlbmRpZiAgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1RPS0VOX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmE4YmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuY3BwCkBAIC0wLDAgKzEsMjM0NSBAQAorI2xpbmUgMTYgIi4vVG9r
ZW5pemVyLmwiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9U
b2tlbml6ZXIuY3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyog
QSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1ND
QU5ORVIKKyNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9N
SU5PUl9WRVJTSU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYg
WVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgor
CisvKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1z
cGVjaWZpYyBpc3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisK
Ky8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9I
CisjZGVmaW5lIEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4g
Tm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERD
X1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlz
IHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50Lmgs
CisgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVz
LiAKKyAqLworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1J
VF9NQUNST1MgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4
X3QgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hv
cnQgaW50IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYg
dW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQg
ZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5k
aWYgLyogISBDOTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRl
ZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlm
CisjaWZuZGVmIElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3
NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAg
ICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmlu
ZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFY
CisjZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVm
IElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQor
I2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAg
ICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAg
ICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUg
VUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8q
ICEgRkxFWElOVF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBz
dG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QK
KworI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18g
dG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5l
IFlZX1VTRV9DT05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJ
LyogISBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29u
c3QgY29uc3QKKyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1
cG9uIGVuZC1vZi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBw
b3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAq
IGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBp
cyBuZWdhdGl2ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1
bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZ
X1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogQW4g
b3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVm
aW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2Vu
ZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFy
cyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8K
KyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNk
ZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdf
cgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1
ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRo
aXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8g
aXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MK
KyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFy
dCA9IDEgKyAyICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8g
YSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lOIHRvIHJldHVybiB0
byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CisgKiBjb21wYXRpYmls
aXR5LgorICovCisjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKKyNk
ZWZpbmUgWVlTVEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBv
ZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZ
WV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5n
ICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSBw
cHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9C
VUZfU0laRQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0
ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3Rl
ciBpbiB0aGUgbWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAo
KFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlf
VFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RB
VEUKK3R5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2Vu
ZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5l
IFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4i
IG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5l
IHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisg
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBc
CisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXln
LT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVf
VAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90
OworI2VuZGlmCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJ
TEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIg
Ki8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZm
ZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5n
IHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9z
aXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90
IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOwor
CisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVh
dGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQg
ZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVy
OworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBp
ZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdh
bnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdl
IHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50
IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJl
IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBi
ZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlp
bnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3Vu
dC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisg
ICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2Ug
cmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKwor
CWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmlu
ZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhl
cmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVm
ZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0
IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJ
ICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNl
IG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkg
c2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSBwcHJl
c3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICog
anVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZ
X0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVy
IHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZm
ZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICog
UmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9D
VVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3Bd
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZp
b3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sg
aXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1
c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9i
dWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHBwcmVzdGFydCAo
RklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX3N3aXRjaF90
b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK1lZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwdXNoX2J1ZmZl
cl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0
aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3Rh
dGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3Rh
dGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHBw
X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9z
dHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMg
KHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3Zv
aWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJl
YWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZy
ZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZl
ciBwcF9jcmVhdGVfYnVmZmVyCisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVy
YWN0aXZlKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRf
Ym9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAg
ICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9C
VUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLwor
CisjZGVmaW5lIHBwd3JhcChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYg
dW5zaWduZWQgY2hhciBZWV9DSEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisj
ZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nh
bl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1z
Z1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBw
YXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcg
YWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElP
TiBcCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlf
Y3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9
ICdcMCc7IFwKKwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVM
RVMgMzcKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90
IHVzZWQgaW4gdGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3Nhcnku
ICovCitzdHJ1Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5Owor
CWZsZXhfaW50MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9hY2NlcHRbODRdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAzOCwgICAzNiwgICAzNCwgICAzNSwgICAzNSwgICAzMywKKyAgICAgICAgNywgICAzMywgICAz
MywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAgOSwKKyAgICAgICAgOSwg
ICAzMywgICAzMywgICAzMywgICAgOCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKKyAg
ICAgICAgNCwgICAzNCwgICAzNSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwg
ICAyMywKKyAgICAgICAxMywgICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAg
OSwgICAxMSwgICAxMSwKKyAgICAgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwg
ICAxNywgICAxNSwgICAgOCwgICAzMSwKKyAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAg
NSwgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAgMSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwg
ICAxMCwgICAgOSwgICAyOCwgICAyOSwgICAgMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAx
MCwgICAgMAorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2
XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDIsICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCisgICAg
ICAgIDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAg
MTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDks
ICAgIDksICAgMTgsCisgICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAg
MjEsICAgMjEsICAgMjIsICAgMjEsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCisgICAgICAgIDksICAgIDEs
ICAgIDksICAgMjUsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAg
ICAyMiwgICAyMSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyNCwKKyAgICAgICAyMywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAg
fSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAg
IDAsCisgICAgICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDMsCisgICAgICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAg
IDUsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODld
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwg
IDE1MCwgIDE1OSwgIDE0NSwgIDEyOCwKKyAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDEx
MSwgICAyMSwgICAyNSwgICAzMCwgICAyOSwgICAzNiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwg
ICA0NSwgICAgMCwgICAxNiwgICA0NywgICAgMCwgIDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3
MywgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAg
IDE1OSwgIDE1OSwgICA2MSwgIDE1OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4
MywKKyAgICAgICA5NSwgICA2OCwgICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwg
ICAgMCwgIDE1OSwKKyAgICAgIDE1OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5
OCwgICAgMCwgIDExMCwgICAgMCwKKyAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwg
IDE1OSwgIDE1OSwgIDEwMSwgICA5NywgIDExMiwKKyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0
MCwgICAyOCwgIDE0NSwgIDE1MCwgIDE1MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgODMsICAgIDEsICAgODQs
ICAgODQsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAg
ICAgMjAsICAgODMsICAgODMsICAgODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAg
ODMsICAgMjAsICAgMjAsICAgNDcsCisgICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAg
ODYsICAgODMsICAgODMsICAgNDMsICAgNDMsICAgNjcsICAgODcsCisgICAgICAgNDcsICAgNTAs
ICAgODMsICAgNTEsICAgODgsICAgODMsICAgODMsICAgODMsICAgNjksICAgNzIsCisgICAgICAg
ODMsICAgODMsICAgIDAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgNiwgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwg
ICAxNSwKKyAgICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAy
MiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywg
ICAyOSwgICAzMCwgICAyOSwgICAzMCwKKyAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2
MCwgICAzMSwgICA0MSwgICA3NywgICA0NCwgICA0MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwg
ICA0MiwgICA0MywgICA0MywgICA0MywgICA0NiwgICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0
OCwgICA0OSwgICA1NCwgICA1NSwgICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAg
ICA1MywgICA1MywgICA1MywgICA1NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1
MCwKKyAgICAgICA0OSwgICA0OSwgICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwg
ICA2NiwgICA1MCwKKyAgICAgICA1MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2
NSwgICA3MSwgICA3MSwgICA3MSwKKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3Miwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKKworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAg
IDUwLCAgIDUwLCAgIDczLCAgIDczLCAgIDgzLCAgIDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAg
IDc4LCAgIDc4LCAgIDgzLCAgIDgzLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4
LAorICAgICAgIDM1LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAg
IDgyLCAgIDgyLAorICAgICAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0
LCAgIDMzLCAgIDY0LCAgIDY0LAorICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAg
IDc1LCAgIDc1LCAgIDgzLCAgICA1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9jaGtbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAg
IDQsCisgICAgICAgMTMsICAgMTYsICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgs
ICAgMTksICAgMTYsCisgICAgICAgMjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAg
MTgsICAgMTksICAgMjAsICAgNTQsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIs
ICAgNDgsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjEsICAgMjEsICAgMjEsICAg
MjQsICAgMjQsICAgMjcsICAgNzMsICAgNzMsICAgNzMsICAgMjEsCisgICAgICAgNDksICAgNDks
ICAgMjcsICAgNDMsICAgMzIsICAgNDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCisgICAgICAg
NTIsICAgNDMsICAgNDMsICAgNDMsICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcs
CisgICAgICAgNTIsICAgNTIsICAgNzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAg
NTAsICAgNTAsCisKKyAgICAgICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1
MSwgICA3OSwgICA3OSwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2Nywg
ICA3OCwgICA3OCwgICA3OCwgICAyMywgICA2NywKKyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4
MCwgICA2OSwgICA2OSwgICA2OSwgICA3MiwgICA3MiwgICAxNSwKKyAgICAgICAxMiwgICA3Miwg
ICA3MiwgICA3MiwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwK
KyAgICAgICA4NywgICAgNywgICA4NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MworICAgIH0gOworCisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMg
dGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2Vk
LgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVm
aW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9S
RV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3Ig
R0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAy
MDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworI2luY2x1ZGUgIlRva2Vu
aXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgor
CisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0
ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZ
U1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhl
IHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4K
KyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAg
ICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVu
byA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2Ug
PSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAg
IH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5
ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0lu
ZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
IChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAor
ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0
aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGlu
ZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXls
ZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsK
KworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9
IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAK
KyNkZWZpbmUgQ09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVy
OjpDb250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQg
c2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5l
ZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsK
KworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBp
biB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0
X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9m
IHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5
IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoq
PCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQg
eXlfbl9jaGFyczsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAg
ICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9z
dGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRl
X3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7
CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5
eV9tb3JlX2xlbjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZTFRZUEUgKiB5
eWxsb2NfcjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGlu
dCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBt
dXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAg
ICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5
bHZhbCB5eWctPnl5bHZhbF9yCisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXls
bG9jX3IKKyAgICAKK2ludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2ludCBw
cGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nh
bm5lcik7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBt
YWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICov
CisKK2ludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0
X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRl
YnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4
dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFf
VFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9p
biAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK2ludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hh
ciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8g
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVt
YmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFy
YW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNy
b3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0
aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyNlbHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Cisj
ZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhf
c3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsK
KyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJs
ZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5k
ZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8g
c2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNk
ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0
aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYg
RUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5n
IG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVm
aW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8q
IEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisj
aWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwK
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJ
CXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1h
eF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdc
bic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkg
XAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvcigg
eXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFp
bGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJu
bz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4p
KT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBc
CisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFp
bGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFy
ZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29s
b24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgp
OyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJl
Y2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91
dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVm
aW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2Yg
ZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVm
IFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2Vu
ZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJP
UgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNj
YW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMg
YW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQg
c2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0
ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKwor
ZXh0ZXJuIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJh
bSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5l
IFlZX0RFQ0wgaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlm
IC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBl
YWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgor
ICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5k
aWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5k
ZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZ
WV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBm
dW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lz
dGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9j
cCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50
ICovCisKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2Nf
cGFyYW07CisKKwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7
CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYg
KCAhIHl5Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0
IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICgg
ISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKSB7CisJCQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVh
Y2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQg
b2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9i
cCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJ
ICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVn
aXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlp
ZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7
CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9f
YWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMu
ICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dp
dGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZm
ZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2Zp
bmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxv
Y2sgY29tbWVudCAqLworLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1
cm5lZC4gKi8KKy8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAq
LyAKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVB
SworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVf
U0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLwor
WVlfUlVMRV9TRVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lO
KElOSVRJQUwpOworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
Ly8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJl
Y3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5
ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RI
RVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklF
UjsKK30KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FU
OworfQorCVlZX0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBv
ciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52
YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6UFBfTlVNQkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVG
VDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQor
CVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9C
UkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNl
IDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
Mjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsK
K30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7
IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlf
UlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xu
Jyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElB
TCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElP
TiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRp
b24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0
cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+
c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkg
LSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAg
ICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3Mg
YXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJ
bmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8g
PSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlm
aWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigp
OworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJh
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5
ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3Ogor
WVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVS
OgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9C
IGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2Nw
IC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUg
c2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJs
ZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVk
IHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywg
dGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJS
RU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxh
Y2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3Ro
ZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRo
ZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRo
YXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAq
IG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJ
CSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIK
KwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJ
CSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJ
CSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0
ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29m
X21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRv
IG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAq
IHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVz
IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3Nz
aWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFt
bWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkp
LgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJy
ZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZ
WV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29u
c3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9
CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7
CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2gg
KCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FD
VF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8q
IE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVw
CisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFm
dGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFu
b3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJ
CXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJ
CXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOwor
CQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7
CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2Nf
YnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0
OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2Fu
bmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2Ug
RU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJ
CXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJ
CX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlv
biBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVu
ZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBh
IG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9u
OgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNv
bnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0Zf
RklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWct
Pnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRf
dmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJ
ImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQi
ICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0g
MCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBF
T0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9S
RV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3Rlciwg
dGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJ
CXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8q
IFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9j
ZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9
CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3Qg
Y2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkg
PCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZG
RVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFu
dGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0g
MDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUg
KCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZm
ZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3Vy
cmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7
CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZf
cCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJ
eworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3
X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsK
KwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYg
PSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwor
CQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAs
eXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRv
bid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlf
Y2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVy
IGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5
X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7
CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQlu
dW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEu
ICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251
bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFk
ICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAo
IG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0Jf
QUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQor
CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9F
T0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJf
dG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8q
IEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQu
ICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJv
dXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJ
eXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30K
KworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0
aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
Kwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXln
LT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5
X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0
ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJ
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQp
IHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5
X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3Rl
cgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3Vy
cmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90
cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNl
ZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2Fj
Y2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19z
dGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9
IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+
PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsK
KworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRl
ZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0
aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVm
b3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYg
bm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAo
IHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5
eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0
ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwor
CQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlcigg
eXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJ
LyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2Un
dmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRv
CisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRp
bmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29u
c2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkg
KiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZm
ZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkv
KkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJewor
CQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJ
CWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdf
RklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIp
OworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQor
CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9
CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5
dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0
dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlh
dGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0
X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0
IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklM
RSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9i
dWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlu
cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBw
X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFj
ZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJf
c3RhdGUoKTsKKwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8K
KwlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwor
CQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRp
ZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQg
dGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFw
KCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNl
dCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisK
K3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwor
fQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgor
ICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hh
cmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVG
X1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1
cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUg
cHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJ
LyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUg
Z2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVm
X3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiAp
OworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUg
LHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4K
KyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9k
ZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZG
RVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsK
KworCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMg
b3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVz
IGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1
cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2lu
aXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIo
YiAseXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBw
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3
ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAg
IGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0g
MTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlf
aXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNo
ZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0
dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlv
biB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBq
YW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJ
Yi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOwor
CWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NV
UlJFTlRfQlVGRkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisK
Ky8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBi
ZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0
ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhl
IG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
Lwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0
dXJuOworCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJs
b2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVm
ZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9
CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4g
Ki8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsr
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQg
ZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisg
KiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1
cm47CisKKwlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NV
UlJFTlRfQlVGRkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0
ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2Ug
Zm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlm
ICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1
c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2Fu
bmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9p
ZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAg
Ki8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVv
ZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAo
ICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJ
CW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0
dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBh
cmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRy
YXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAor
CQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJ
CQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJ
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZl
cl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNo
YXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICog
QHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3
bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIg
fHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAg
IGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdv
dCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZ
WV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkg
LHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0g
c2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9w
b3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWIt
Pnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwli
LT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxs
X2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlw
cF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8q
KiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0
IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4K
KyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2Nh
biBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBw
cF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAK
KwlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwor
fQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBi
eXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNv
cHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4K
KyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQg
dG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICov
CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMs
IGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9T
VEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBH
ZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBF
T0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9j
KG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsg
aSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1Zltf
eXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKworCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiAp
CisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisK
KwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRo
cm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNk
ZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9l
cnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2
b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlM
VVJFICk7Cit9CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24g
MyBjb2RlLiAqLworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAor
CQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJ
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdo
aWxlICggMCApCisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8g
c3RydWN0IG1lbWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0
aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
LworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Cisg
ICAgcmV0dXJuIHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0
X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVt
biAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJF
TlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29s
dW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3Ry
ZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUg
KnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0Owor
fQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhl
IGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBk
YXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZp
bmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAo
WVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5l
IG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2
YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNh
bGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9
IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJh
bSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVm
ZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAg
ICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIi
ICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8q
KiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50
CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRj
aF90b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291
dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9
IG91dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQg
IGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJk
ZWJ1ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICov
CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3Bh
cmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07
Cit9CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHJldHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXls
bG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2Nf
cGFyYW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQg
aXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBp
cworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBz
Y2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5
IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAq
LworCitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBp
ZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3Qp
IHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAo
KnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBv
c2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAq
LworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190
KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9
CisKKy8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBs
ZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nh
bm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlz
IGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhp
cyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxz
byBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQg
dmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2Mg
aW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZ
X0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEg
KHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2Jh
bHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6
ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRy
X3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICBy
ZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBv
c2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFz
ZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXln
dXRzX3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5
X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2ds
b2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBu
b24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJv
bSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19i
dWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0
YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7
CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4g
PSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICop
IDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJl
IHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Cisg
ICAgICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4
X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJz
LiAqLworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAg
LyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdo
aWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJ
CXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0
YWNrIGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7
CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3Rh
cnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFj
ayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisg
ICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50
cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwg
aW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nh
bm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkp
LiAqLworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5l
ciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJv
dXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9z
dHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkK
KwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0
YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJ
CTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBz
aXplICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0
aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQg
dXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQq
IGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNl
IGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICog
YW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJz
aW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAo
dm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUg
KHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRy
ICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5l
IFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6
OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAg
IG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRv
a2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6
OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNv
dW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQu
aW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nh
bm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sK
KyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUg
bWFjcm8geXlmaWxlbm8uCisgICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3Zv
aWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVu
byhsaW5lLG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikK
K3sKKyAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlv
bixtSGFuZGxlKTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3Rh
cnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0
b2tlbi0+dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29u
dGV4dC5sZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwor
fQorCitib29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9
PSBOVUxMKSAmJiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmICht
SGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhh
bmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmI2NGEyODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsx
LDU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9L
RU5JWkVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKwor
I2luY2x1ZGUgIklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGls
cy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRv
a2VuaXplciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQK
KyAgICB7CisgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1
dCBpbnB1dDsKKyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8u
IFRva2VuIGxvY2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQg
b2YgSW5wdXQ6Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAg
ICAgIC8vIGlmIHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVy
LgorICAgICAgICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRp
bmdTcGFjZTsKKyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXpl
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJv
b2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pOworCisgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lk
IHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiog
dG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRv
a2VuaXplcik7CisgICAgYm9vbCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5u
ZXIoKTsKKworICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250
ZXh0IG1Db250ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBw
cAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDAxYzczMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCkBAIC0wLDAgKzEsMzI5
IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXgg
c3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3Nv
ZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElG
WSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8K
KworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKK30KKworJXsKKyNpbmNsdWRlICJU
b2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4u
aCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2Vu
ZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmlu
ZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNl
IHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1i
ZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXls
aW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1Nw
YWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwK
KyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9
ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2Mt
PnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkp
IFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5s
ZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5
eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9
IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUo
MCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1
bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyV9CisKKyVvcHRpb24g
bm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiByZWVudHJhbnQgYmlz
b24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBwcmVmaXg9InBwIgorJW9wdGlvbiBl
eHRyYS10eXBlPSJwcDo6VG9rZW5pemVyOjpDb250ZXh0KiIKKyV4IENPTU1FTlQKKworTkVXTElO
RSAgICAgXG58XHJ8XHJcbgorSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgorUFVO
Q1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KKworREVDSU1BTF9DT05TVEFOVCAg
ICAgIFsxLTldWzAtOV0qCitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgorSEVYQURFQ0lN
QUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCisKK0RJR0lUICAgICAgICAgICAgICAgIFsw
LTldCitFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KworRlJBQ1RJT05BTF9D
T05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKworJSUKKworICAg
IC8qIExpbmUgY29tbWVudCAqLworIi8vIlteXHJcbl0qCisKKyAgICAvKiBCbG9jayBjb21tZW50
ICovCisgICAgLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4g
Ki8KKyAgICAvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8g
CisiLyoiIHsgQkVHSU4oQ09NTUVOVCk7IH0KKzxDT01NRU5UPlteKlxyXG5dKworPENPTU1FTlQ+
IioiCis8Q09NTUVOVD57TkVXTElORX0geyArK3l5bGluZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsK
KyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOwor
fQorCisjIHsKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsK
KyAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6
OlRva2VuOjpQUF9PVEhFUjsKK30KKwore0lERU5USUZJRVJ9IHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30K
Kwore0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNU
QU5UfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46OkNPTlNUX0lOVDsKK30KKworKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZS
QUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9PykgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30K
KworICAgIC8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9
IG11c3QgYmUgYSBudW1iZXIuICovCisgICAgLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBp
bnRlZ2VycyBhbmQgZmxvYXRzLiAqLworKHtESUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElH
SVR9K1tfYS16QS1aMC05Ll0qKSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05VTUJFUjsKK30KKworIisrIiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lO
QzsKK30KKyItLSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKyI+PiIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9SSUdIVDsKK30KKyI8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsK
K30KKyI9PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyImJiIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9BTkQ7Cit9CisiXl4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOworfQorInx8IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorIis9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKyIq
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorIi89IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9Cisi
JT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9
CisiPj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdO
OworfQorIl49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisifD0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdO
OworfQorCit7UFVOQ1RVQVRPUn0geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7
CisgICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVh
ZGluZ1NwYWNlID0gdHJ1ZTsgfQorCit7TkVXTElORX0geworICAgICsreXlsaW5lbm87CisgICAg
eXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisKKy4geworICAg
IHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBf
T1RIRVI7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBp
bnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9G
IHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7
CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOwor
ICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAg
IGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2Ug
Y2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAg
ICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0lu
ZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1h
eDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAg
ICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBp
ZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5
bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAg
fQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2Vu
aXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7
CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVy
Ojp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2Vu
aXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBp
bnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlm
ICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29u
dGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGlu
aXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxl
KQoreworICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8v
IFNlZSBtYWNybyB5eWZpbGVuby4KKyAgICB5eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9
CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5c2V0
X2xpbmVubyhsaW5lLCBtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiog
dG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4t
PmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4t
PnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5l
U3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdT
cGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9
IGZhbHNlOworfQorCitib29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgo
bUhhbmRsZSA9PSBOVUxMKSAmJiB5eWxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7
CisgICAgaWYgKG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeXlsZXhf
ZGVzdHJveShtSGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNw
YWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaApp
bmRleCA1YjMyZjcxLi5lOWM3MGIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2Vu
ZXJhdGVfcGFyc2VyLnNoCkBAIC0xLDI3ICsxLDI2IEBACiAjIS9iaW4vYmFzaAotIyBDb3B5cmln
aHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICMgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIAotIyBHZW5lcmF0ZXMgR0xTTCBFUyBwcmVwcm9jZXNzb3IgLSBwcF9sZXguY3BwLCBw
cF90YWIuaCwgYW5kIHBwX3RhYi5jcHAKKyMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBv
ZiBHTFNMIEVTIHByZXByb2Nlc3Nvci4KIAogcnVuX2ZsZXgoKQogewotaW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMS5sCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX2xleC5jcHAKK2lucHV0
X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKIGZsZXgg
LS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
IH0KIAogcnVuX2Jpc29uKCkKIHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0
X2hlYWRlcj0kc2NyaXB0X2Rpci8kMV90YWIuaAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8k
MV90YWIuY3BwCi1iaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tZGVmaW5lcz0k
b3V0cHV0X2hlYWRlciAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQoraW5wdXRf
ZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgorYmlzb24g
LS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5w
dXRfZmlsZQogfQogCiBzY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKIAogIyBHZW5lcmF0ZSBwcmVw
cm9jZXNzb3IKLXJ1bl9mbGV4IHBwCi1ydW5fYmlzb24gcHAKK3J1bl9mbGV4IFRva2VuaXplci5s
IFRva2VuaXplci5jcHAKK3J1bl9iaXNvbiBFeHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBh
cnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2MjdjYTA0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBA
QAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNw
ZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0
IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1p
Y3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkg
VEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0K
LSV0b3B7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29t
cGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgi
Ci0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxs
b2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVubzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJz
dF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsg
ICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQo
YnVmLCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQo
YnVmLCBtYXhTaXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFt
ZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3Vu
cHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1i
cmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIHN0YWNrCi0lb3B0aW9uIHByZWZpeD0icHAi
Ci0lb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpDb250ZXh0KiIKLQotSFNQQUNFICAgICAgWyBcdF0K
LUhBU0ggICAgICAgIF57SFNQQUNFfSoje0hTUEFDRX0qCi1JREVOVElGSUVSICBbX2EtekEtWl1b
X2EtekEtWjAtOV0qCi1QVU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1E
RUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAw
WzAtN10qCi1IRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQg
ICAgICAgICAgICAgICAgWzAtOV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJ
VH0rCi1GUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0r
Ii4iKQotCi0lJQotCi17SEFTSH0geyByZXR1cm4gSEFTSDsgfQotCi17SEFTSH1kZWZpbmV7SFNQ
QUNFfSt7SURFTlRJRklFUn0vWyBcdFxuXSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1h
Y3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0K
LXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS8iKCIgewotICAgIHl5bHZhbC0+c3Zh
bCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RF
RklORV9GVU5DOwotfQote0hBU0h9dW5kZWZ7SFNQQUNFfSsgeyByZXR1cm4gSEFTSF9VTkRFRjsg
fQotCi17SEFTSH1pZiB7IHJldHVybiBIQVNIX0lGOyB9Ci17SEFTSH1pZmRlZiB7IHJldHVybiBI
QVNIX0lGREVGOyB9Ci17SEFTSH1pZm5kZWYgeyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLXtIQVNI
fWVsc2UgeyByZXR1cm4gSEFTSF9FTFNFOyB9Ci17SEFTSH1lbGlmIHsgcmV0dXJuIEhBU0hfRUxJ
RjsgfQote0hBU0h9ZW5kaWYgeyByZXR1cm4gSEFTSF9FTkRJRjsgfQotImRlZmluZWQiIHsgcmV0
dXJuIERFRklORUQ7IH0KLQote0hBU0h9ZXJyb3IgeyByZXR1cm4gSEFTSF9FUlJPUjsgfQote0hB
U0h9cHJhZ21hIHsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci17SEFTSH1leHRlbnNpb24geyByZXR1
cm4gSEFTSF9FWFRFTlNJT047IH0KLXtIQVNIfXZlcnNpb24geyByZXR1cm4gSEFTSF9WRVJTSU9O
OyB9Ci17SEFTSH1saW5lIHsgcmV0dXJuIEhBU0hfTElORTsgfQotCi17SURFTlRJRklFUn0gewot
ICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIElERU5USUZJRVI7Ci19Ci0KLXtERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RB
TlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0gewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6
OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLQot
KHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5U
X1BBUlR9PykgewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotCi17UFVOQ1RVQVRPUn0geyBy
ZXR1cm4geXl0ZXh0WzBdOyB9Ci0KLVsgXHRcdlxmXSsgeyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAq
LyB9Ci0KLVxuIHsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJuIHl5
dGV4dFswXTsKLX0KLQotPCo+PDxFT0Y+PiAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0KLSUlCi0K
LXN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikK
LXsKLSAgICAvLyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtI
U1BBQ0V9K3tJREVOVElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0
IEhTUEFDRS4KLSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZp
bmUgIikgPT0gODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGlu
dCBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9
PSAnICcpIHx8IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUg
PSBuZXcgc3RkOjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4g
bmFtZTsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFy
KiBidWYsIGludCBtYXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hp
bGUgKCFtSW5wdXQtPmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0g
ICAgewotICAgICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46
OmRlY29kZUxvY2F0aW9uKHl5Z2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAg
ICAgICBmaWxlID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICB5eXNldF9saW5lbm8o
cHA6OlRva2VuOjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSwgbUxleGVyKTsKLQotICAgICAg
ICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5w
dXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQot
ewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAoeXlsZXhfaW5pdF9leHRy
YSh0aGlzLCAmbUxleGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeXlyZXN0YXJ0
KDAsIG1MZXhlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJv
eUxleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQotICAgIHl5bGV4X2Rlc3Ryb3kobUxl
eGVyKTsKLSAgICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHAueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwLnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTkzYWIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHAueQorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVT
IHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJl
cHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVE
IFRPIFJVTiBnZW5lcmF0ZV9nbHNsX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xT
TCBFUyBQQVJTRVIuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQh
Ci0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+
bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLSV9Ci0KLSVwdXJlLXBhcnNlcgotJW5hbWUtcHJl
Zml4PSJwcCIKLSVsb2NhdGlvbnMKLSVwYXJzZS1wYXJhbSB7cHA6OkNvbnRleHQqIGNvbnRleHR9
Ci0KLSV1bmlvbiB7Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAg
cHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0KLSV7Ci1l
eHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4
ZXIpOwotc3RhdGljIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAg
ICAgICAgcHA6OkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHJlYXNvbik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250
ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25h
bEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSV9Ci0KLSV0b2tlbiBIQVNIIEhBU0hfVU5E
RUYKLSV0b2tlbiBIQVNIX0lGIEhBU0hfSUZERUYgSEFTSF9JRk5ERUYgSEFTSF9FTFNFIEhBU0hf
RUxJRiBIQVNIX0VORElGIERFRklORUQKLSV0b2tlbiBIQVNIX0VSUk9SIEhBU0hfUFJBR01BIEhB
U0hfRVhURU5TSU9OIEhBU0hfVkVSU0lPTiBIQVNIX0xJTkUKLSV0b2tlbiA8c3ZhbD4gSEFTSF9E
RUZJTkVfT0JKIEhBU0hfREVGSU5FX0ZVTkMKLSV0b2tlbiA8c3ZhbD4gSU5UX0NPTlNUQU5UIEZM
T0FUX0NPTlNUQU5UIElERU5USUZJRVIKLSV0eXBlIDxpdmFsPiBvcGVyYXRvcgotJXR5cGUgPHR2
YWw+IGNvbmRpdGlvbmFsX3Rva2VuIHRva2VuCi0ldHlwZSA8dGxpc3Q+IHBhcmFtZXRlcl9saXN0
IHJlcGxhY2VtZW50X2xpc3QgY29uZGl0aW9uYWxfbGlzdCB0b2tlbl9saXN0Ci0lJQotCi1pbnB1
dAotICAgIDogLyogZW1wdHkgKi8KLSAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZQotICAgIDog
dGV4dF9saW5lCi0gICAgfCBjb250cm9sX2xpbmUKLTsKLQotdGV4dF9saW5lCi0gICAgOiAnXG4n
Ci0gICAgfCB0b2tlbl9saXN0ICdcbicgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5k
IG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQo
KTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgJDEtPmJlZ2luKCksICQxLT5lbmQo
KSk7Ci0gICAgICAgIGRlbGV0ZSAkMTsKLSAgICB9Ci07Ci0KLWNvbnRyb2xfbGluZQotICAgIDog
SEFTSCAnXG4nCi0gICAgfCBIQVNIX0RFRklORV9PQkogcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsK
LSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjpr
VHlwZU9iaiwgJDEsIE5VTEwsICQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0RFRklORV9GVU5DICco
JyBwYXJhbWV0ZXJfbGlzdCAnKScgcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29u
dGV4dC0+ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICQx
LCAkMywgJDUpOwotICAgIH0KLSAgICB8IEhBU0hfVU5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAg
ICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygkMik7Ci0gICAgfQotICAgIHwgSEFTSF9JRiBj
b25kaXRpb25hbF9saXN0ICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250
ZXh0LCAkMiA/IHRydWUgOiBmYWxzZSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRkRFRiBJREVOVElG
SUVSICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0
LT5pc01hY3JvRGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfSUZOREVGIElERU5USUZJ
RVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0
LT5pc01hY3JvRGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfRUxJRiBjb25kaXRpb25h
bF9saXN0ICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRUxTRSAnXG4nIHsKLSAgICB9Ci0gICAg
fCBIQVNIX0VORElGICdcbicgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQp
OwotICAgIH0KLSAgICB8IEhBU0hfRVJST1IgJ1xuJwotICAgIHwgSEFTSF9QUkFHTUEgJ1xuJwot
ICAgIHwgSEFTSF9FWFRFTlNJT04gJ1xuJwotICAgIHwgSEFTSF9WRVJTSU9OICdcbicKLSAgICB8
IEhBU0hfTElORSAnXG4nCi07Ci0KLXJlcGxhY2VtZW50X2xpc3QKLSAgICA6IC8qIGVtcHR5ICov
IHsgJCQgPSBOVUxMOyB9Ci0gICAgfCB0b2tlbl9saXN0Ci0KLXBhcmFtZXRlcl9saXN0Ci0gICAg
OiAvKiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAg
ICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6
OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKSk7Ci0gICAgfQotICAgIHwgcGFy
YW1ldGVyX2xpc3QgJywnIElERU5USUZJRVIgewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAk
JC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDMuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDMp
KTsKLSAgICB9Ci0KLWNvbmRpdGlvbmFsX2xpc3QKLSAgICA6IGNvbmRpdGlvbmFsX3Rva2VuIHsK
LSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNr
KCQxKTsKLSAgICB9Ci0gICAgfCBjb25kaXRpb25hbF9saXN0IGNvbmRpdGlvbmFsX3Rva2VuIHsK
LSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwot
Ci10b2tlbl9saXN0Ci0gICAgOiB0b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZl
Y3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgdG9rZW5fbGlz
dCB0b2tlbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwot
ICAgIH0KLTsKLQotY29uZGl0aW9uYWxfdG9rZW4KLSAgICA6IERFRklORUQgSURFTlRJRklFUiB7
Ci0gICAgfQotICAgIHwgREVGSU5FRCAnKCcgSURFTlRJRklFUiAnKScgewotICAgIH0KLSAgICB8
IHRva2VuCi07Ci0KLXRva2VuCi0gICAgOiBvcGVyYXRvciB7Ci0gICAgICAgICQkID0gbmV3IHBw
OjpUb2tlbihAMS5maXJzdF9saW5lLCAkMSwgTlVMTCk7Ci0gICAgfQotICAgIHwgSU5UX0NPTlNU
QU5UIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElOVF9DT05T
VEFOVCwgJDEpOwotICAgIH0KLSAgICB8IEZMT0FUX0NPTlNUQU5UIHsKLSAgICAgICAgJCQgPSBu
ZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQot
ICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9s
aW5lLCBJREVOVElGSUVSLCAkMSk7Ci0gICAgfQotOwotCi1vcGVyYXRvcgotICAgIDogJ1snIHsg
JCQgPSAnWyc7IH0KLSAgICB8ICddJyB7ICQkID0gJ10nOyB9Ci0gICAgfCAnPCcgeyAkJCA9ICc8
JzsgfQotICAgIHwgJz4nIHsgJCQgPSAnPic7IH0KLSAgICB8ICcoJyB7ICQkID0gJygnOyB9Ci0g
ICAgfCAnKScgeyAkJCA9ICcpJzsgfQotICAgIHwgJ3snIHsgJCQgPSAneyc7IH0KLSAgICB8ICd9
JyB7ICQkID0gJ30nOyB9Ci0gICAgfCAnLicgeyAkJCA9ICcuJzsgfQotICAgIHwgJysnIHsgJCQg
PSAnKyc7IH0KLSAgICB8ICctJyB7ICQkID0gJy0nOyB9Ci0gICAgfCAnLycgeyAkJCA9ICcvJzsg
fQotICAgIHwgJyonIHsgJCQgPSAnKic7IH0KLSAgICB8ICclJyB7ICQkID0gJyUnOyB9Ci0gICAg
fCAnXicgeyAkJCA9ICdeJzsgfQotICAgIHwgJ3wnIHsgJCQgPSAnfCc7IH0KLSAgICB8ICcmJyB7
ICQkID0gJyYnOyB9Ci0gICAgfCAnficgeyAkJCA9ICd+JzsgfQotICAgIHwgJz0nIHsgJCQgPSAn
PSc7IH0KLSAgICB8ICchJyB7ICQkID0gJyEnOyB9Ci0gICAgfCAnOicgeyAkJCA9ICc6JzsgfQot
ICAgIHwgJzsnIHsgJCQgPSAnOyc7IH0KLSAgICB8ICcsJyB7ICQkID0gJywnOyB9Ci0gICAgfCAn
PycgeyAkJCA9ICc/JzsgfQotOwotCi0lJQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3As
IHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQg
cHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9u
KQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQp
Ci17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5
eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNl
OwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTdlN2NjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xl
eC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjY4ICswLDAgQEAKLSNsaW5lIDE2ICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQot
Ci0jbGluZSAxMyAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIgotCi0jZGVm
aW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2Vu
ZXJhdGVkIGJ5IGZsZXggKi8KLQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxF
WF9NQUpPUl9WRVJTSU9OIDIKLSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZp
bmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJT
SU9OID4gMAotI2RlZmluZSBGTEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3
aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0K
LS8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0KLS8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBl
IGRlZmluaXRpb25zICovCi0KLSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAot
Ci0vKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBv
ciBtYXkgbm90LiAqLwotCi0jaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERD
X1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElN
SVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUg
bGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NU
RENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0K
LSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBl
ZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsK
LXR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2lu
dDMyX3Q7Ci10eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBz
aWduZWQgY2hhciBmbGV4X2ludDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsK
LXR5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3Vp
bnQ4X3Q7IAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVk
ZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyog
TGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJ
TlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgot
I2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRl
ZiBJTlQzMl9NSU4KLSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDct
MSkKLSNlbmRpZgotI2lmbmRlZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAg
ICAgICgxMjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAg
ICAgICAgICAgICAgKDMyNzY3KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJ
TlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4
X01BWAotI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZu
ZGVmIFVJTlQxNl9NQVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQot
I2VuZGlmCi0jaWZuZGVmIFVJTlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAg
ICAoNDI5NDk2NzI5NVUpCi0jZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVy
IGlzIHZhbGlkLiAqLwotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UgICAvKiAhIF9fY3Bs
dXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEu
ICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNl
bmRpZiAgLyogZGVmaW5lZCAoX19TVERDX18pICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMg
Ki8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQot
I2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4g
Ki8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUs
IHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBpbnRlZ2VyIGZvciB1c2Ug
YXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3
ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVu
Y2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVu
c2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAq
LwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZ
X1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRpZgotCi0vKiBGb3IgY29u
dmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQotICAg
YXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi0jZGVmaW5lIHl5aW4geXln
LT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXln
LT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0
IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2Rl
YnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBv
dWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5n
IGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0gKiBkZWZpbml0aW9uIG9m
IEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8q
IFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4g
YmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhl
IFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0aWJpbGl0eS4KLSAqLwotI2RlZmlu
ZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlf
U1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBz
dGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiAr
IHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2lu
ZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5
c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBv
ZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUg
WVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgotCi0vKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFy
Z2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVm
ZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIp
ICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVS
X1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi10eXBlZGVmIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSNlbmRpZgotCi0jZGVmaW5lIEVP
Ql9BQ1RfQ09OVElOVUVfU0NBTiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2Rl
ZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotCi0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5
IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVp
cmVzCi0gICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNp
bmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhp
c3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSBwcGxleC4gCi0g
ICAgICogICAgICAgT25lIG9idmlvdXMgc29sdXRpb24gaXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9i
YWwuIEkgdHJpZWQgdGhhdCwgYW5kIHNhdwotICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2Ug
aGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlfYWN0IGlzCi0gICAgICog
ICAgICAgbm9ybWFsbHkgZGVjbGFyZWQgYXMgYSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlz
IG5vdCB3b3J0aCBpdC4KLSAgICAgKi8KLSAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBc
Ci0gICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKLSAgICAgICAg
ICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAg
ICAgICAgLS15eWxpbmVubztcCi0gICAgICAgICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVy
biBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlu
cHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsg
XAotICAgICAgICAvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAg
ICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5F
Tk8oeXlsZXNzX21hY3JvX2FyZyk7XAotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAotICAgICAgICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FE
SjsgXAotICAgICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWlu
ICovIFwKLSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5
eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNp
emVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NU
QVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJf
c3RhdGUKLSAgICB7Ci0gICAgRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2No
X2J1ZjsgICAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAg
ICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXpl
IG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAg
ICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQot
ICAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNs
dWRpbmcgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBpbnQgeXlfbl9jaGFy
czsKLQotICAgIC8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKLSAgICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBh
bmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBp
bnQgeXlfaXNfb3VyX2J1ZmZlcjsKLQotICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJh
Y3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0
ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFk
IG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0g
ICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsK
LQotICAgIC8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5n
IG9mIGEgbGluZS4KLSAgICAgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRo
ZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKLSAgICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5
X2F0X2JvbDsKLQotICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICov
Ci0gICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwotICAgIAot
ICAgIC8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJl
YWNoIHRoZQotICAgICAqIGVuZCBvZiBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZm
ZXI7Ci0KLSAgICBpbnQgeXlfYnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVX
IDAKLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVu
IHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVu
IHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3
ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55
IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8g
bWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotICAgICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0g
ICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhl
IHN0YXR1cyB0byAibmV3IgotICAgICAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1
c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQotICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBh
dCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJ
TkcgMgotCi0gICAgfTsKLSNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwot
Ci0vKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2Fz
ZSBpbiB0aGUKLSAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBh
IG1vcmUgZ2VuZXJhbAotICogInNjYW5uZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRv
cCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIg
KCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8geXln
LT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIDogTlVMTCkKLQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0
IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVM
TCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8K
LSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KLQotdm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2Zp
bGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJf
U1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci12b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JV
RkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3Bf
YnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotc3RhdGljIHZvaWQgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xv
YWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSICx5eXNjYW5uZXIpCi0KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAo
Y2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZG
RVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIg
KmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5
eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICos
eXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1
ZmZlcgotCi0jZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotICAg
IHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCi0gICAgICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9Ci0KLSNkZWZpbmUg
eXlfc2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKXtcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVh
dGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KLQot
I2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wp
Ci0KLS8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KLQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmlu
ZSBZWV9TS0lQX1lZV1JBUAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlw
ZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0K
LXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0
ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5
eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlf
ZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LS8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBi
ZWZvcmUgdGhlCi0gKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICov
Ci0jZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5
X2JwOyBcCi0gICAgeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXln
LT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXln
LT55eV9jX2J1Zl9wID0geXlfY3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDIzCi0jZGVmaW5l
IFlZX0VORF9PRl9CVUZGRVIgMjQKLS8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMg
c2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5
X3RyYW5zX2luZm8KLSAgICB7Ci0gICAgZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4
X2ludDMyX3QgeXlfbnh0OwotICAgIH07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzEwNV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDIzLCAg
IDIxLCAgIDIyLCAgIDIwLCAgIDIwLCAgIDE4LCAgIDE4LAotICAgICAgIDE3LCAgIDE3LCAgIDIx
LCAgICAxLCAgIDIxLCAgIDE5LCAgIDE5LCAgIDE4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAg
IDE4LCAgIDE3LCAgIDE3LCAgIDIxLCAgICAxLCAgICAxLCAgICAwLCAgICAwLCAgICAwLAotICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE5LCAgIDE4LCAgIDE3LCAg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICA1LCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAotICAgICAgIDE5LCAgIDE3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE3
LCAgICAwLCAgICA5LCAgICA4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAg
IDE2LCAgICAwLCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAgIDEwLAotICAgICAgIDEyLCAgICAw
LCAgICA2LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDExLCAgICAwLCAgICAwLAotICAgICAg
ICA3LCAgIDEzLCAgICA0LCAgICAwLCAgICAwLCAgICAwLCAgIDE1LCAgICAwLCAgICAwLCAgICAy
LAotCi0gICAgICAgIDMsICAgIDAsICAgMTQsICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAg
ICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA1
LCAgICA1LCAgICAxLCAgICA3LAotICAgICAgICA1LCAgICA1LCAgICA4LCAgICA1LCAgICA4LCAg
ICA5LCAgICA1LCAgIDEwLCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDEx
LCAgIDExLCAgIDEyLCAgIDEyLCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICAxLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDE0LCAgIDEzLAotICAgICAgIDE1
LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LAot
ICAgICAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE2LCAgIDE1
LCAgIDE1LAotICAgICAgICA1LCAgICAxLCAgICA1LCAgICA1LCAgIDE1LCAgICAxLCAgIDE3LCAg
IDEzLCAgIDEzLCAgIDE4LAotCi0gICAgICAgMTksICAgMjAsICAgMjEsICAgMTUsICAgMjIsICAg
MTUsICAgMTUsICAgMjMsICAgMjQsICAgMjUsCi0gICAgICAgMjYsICAgMjcsICAgMTUsICAgMjgs
ICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMTUsICAgMzMsCi0gICAgICAgMTUsICAgMTUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMy
X3QgeXlfbWV0YVszNF0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAyLCAgICAzLCAgICAx
LCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICA0LAotICAgICAgICA0LCAgICA0LCAg
ICA1LCAgICA2LCAgICA3LCAgICA3LCAgICA1LCAgICA1LCAgICA2LCAgICA1LAotICAgICAgICA3
LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAot
ICAgICAgICA3LCAgICA3LCAgICA3Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzExMV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgIDE4LCAgMTg0LCAg
MTg1LCAgIDExLCAgMTg1LCAgMTg1LCAgIDIxLCAgIDI4LCAgIDUzLAotICAgICAgICAwLCAgMTY0
LCAgIDM5LCAgIDcxLCAgIDEyLCAgIDMyLCAgIDM0LCAgICAxLCAgIDM5LCAgIDQ0LAotICAgICAg
ICAwLCAgICAwLCAgICAwLCAgMTYyLCAgIDY0LCAgICAwLCAgICAwLCAgMTYyLCAgIDQ2LCAgMTYw
LAotICAgICAgMTU3LCAgMTUwLCAgMTUyLCAgMTU3LCAgIDcwLCAgIDQ3LCAgIDY1LCAgICAwLCAg
MTUzLCAgMTU0LAotICAgICAgIDYyLCAgMTU1LCAgMTQ0LCAgMTQxLCAgIDY3LCAgMTQ1LCAgMTUy
LCAgMTUwLCAgMTM5LCAgIDc2LAotICAgICAgIDg1LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ0LCAg
MTQwLCAgMTM1LCAgMTQxLCAgMTQwLCAgMTQwLAotICAgICAgMTM4LCAgMTM1LCAgMTM2LCAgMTI1
LCAgMTM0LCAgMTI3LCAgMTg1LCAgMTg1LCAgMTMxLCAgMTIyLAotICAgICAgMTI0LCAgMTI4LCAg
MTI4LCAgMTg1LCAgMTIyLCAgMTI1LCAgMTIyLCAgMTI1LCAgMTIzLCAgMTg1LAotICAgICAgMTg1
LCAgMTEyLCAgMTg1LCAgMTIwLCAgMTEzLCAgMTI3LCAgIDk3LCAgICAwLCAgMTA3LCAgIDg2LAot
ICAgICAgMTg1LCAgMTg1LCAgMTA1LCAgIDc2LCAgIDgxLCAgIDM0LCAgMTg1LCAgIDk3LCAgIDEw
LCAgMTg1LAotCi0gICAgICAxODUsICAxMDMsICAxODUsICAxODUsICAxMTAsICAxMTQsICAxMTgs
ICAxMjEsICAxMjYsICAxMzIKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2RlZlsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNiwgIDEwNiwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNywgIDEwNywgICAgOSwgICAxOCwgIDEwNCwKLSAgICAgIDEwOCwg
ICAxMCwgIDEwNiwgIDEwNiwgIDEwNCwgICAxNCwgICAxNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwOCwgIDEwNiwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwOSwgIDEwNCwgIDEwNCwgIDExMCwgIDEwNCwgIDEw
NCwKLQotICAgICAgMTA0LCAgMTEwLCAgMTA0LCAgICAwLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9u
eHRbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcs
ICAgIDQsICAgIDcsICAgIDcsICAgIDgsICAgIDksCi0gICAgICAgMTAsICAgMTAsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAxMDQsICAgMTIsICAgIDQsICAgMTMsCi0gICAgICAgIDYsICAgIDUs
ICAgIDcsICAgMTQsICAgIDcsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTAsCi0gICAgICAg
MTYsICAgMTYsICAgMTYsICAxMDQsICAxMDMsICAgMTIsICAgMTcsICAgMTgsICAgMTgsICAgMTks
Ci0gICAgICAgMjUsICAgMjAsICAgMTUsICAgMjEsICAgMjYsICAgMzUsICAgMjAsICAgMzUsICAg
MTksICAgMTksCi0gICAgICAgMzUsICAgMzYsICAgMzUsICAgMzcsICAgMzcsICAgMzcsICAgMzcs
ICAgMzcsICAgMzcsICAgOTksCi0gICAgICAgMjEsICAgMTcsICAgMjIsICAgMjIsICAgMjIsICAg
MjUsICAgMjAsICAgMTUsICAgNDEsICAgMjYsCi0gICAgICAgNDIsICAgMjAsICAgMjcsICAgNDMs
ICAgMzcsICAgMzcsICAgMzcsICAgNTAsICAgNDQsICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAg
OTUsICAgNTQsICAgNTksICAgNTEsICAgNTEsICAgNTEsICAgMjgsICAgMjksCi0gICAgICAgNTUs
ICAgNjAsICAgMzAsICAgMzEsICAgNTEsICAgNTEsICAgNTEsICAgMzIsICAxMDAsICAxMDAsCi0K
LSAgICAgICA5NywgICAzMywgICAzNCwgIDEwMSwgIDEwMCwgIDEwMCwgICA5MywgICA5NiwgICA5
NSwgIDEwMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwg
ICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAxNiwgICA5NCwgICAxNiwgICAzOCwgICAz
OCwgICAzOCwgICA5OCwgICA5MywgICA5MiwKLSAgICAgICA5OCwgICA5OCwgICA5OCwgIDEwMiwg
IDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgICA5MSwKLSAgICAgICA5MCwgICA4OSwgICA4
OCwgICA4NywgICA4NiwgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA4MSwKLSAgICAgICA4MCwg
ICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3NSwgICA3NCwgICA3MywgICA3MiwgICA3MSwKLSAg
ICAgICA3MCwgICA2OSwgICA2OCwgICA2NywgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2Miwg
ICA2MSwKLSAgICAgICA1OCwgICA1NywgICA1NiwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0
NywgICA0NiwgICA0NSwKLSAgICAgICA0MCwgICAzOSwgICAyNCwgIDEwNCwgICAgMywgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDEsICAgIDUsICAgMTUsICAgIDUsICAgMTUsICAgMTgsICAgIDEsICAg
IDIsICAgIDIsCi0gICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIs
ICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDgsICAgIDgsICAgIDgsICAgMTgsICAgOTksICAg
IDIsICAgIDksICAgIDksICAgIDksICAgIDksCi0gICAgICAgMTMsICAgIDksICAgMTMsICAgIDks
ICAgMTMsICAgMTYsICAgIDksICAgMTcsICAgMTksICAgMTksCi0gICAgICAgMTYsICAgMjAsICAg
MTcsICAgMjAsICAgMjAsICAgMjAsICAgMzYsICAgMzYsICAgMzYsICAgOTYsCi0gICAgICAgIDks
ICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgMjUsICAgMTAsICAgMjUsICAgMjksICAgMjUsCi0g
ICAgICAgMjksICAgMTAsICAgMTQsICAgMjksICAgMzcsICAgMzcsICAgMzcsICAgMzUsICAgMjks
ICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAgOTUsICAgNDEsICAgNDUsICAgNTAsICAgNTAsICAg
NTAsICAgMTQsICAgMTQsCi0gICAgICAgNDEsICAgNDUsICAgMTQsICAgMTQsICAgNTEsICAgNTEs
ICAgNTEsICAgMTQsICAgOTgsICAgOTgsCi0KLSAgICAgICA5NCwgICAxNCwgICAxNCwgICA5OCwg
IDEwMiwgIDEwMiwgICA5MywgICA5MCwgICA4OSwgIDEwMiwKLSAgICAgIDEwNSwgIDEwNSwgIDEw
NSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNiwgIDEwNiwgIDEwNiwKLSAgICAgIDEwNiwg
IDEwNywgICA4NywgIDEwNywgIDEwOCwgIDEwOCwgIDEwOCwgIDEwOSwgICA4NiwgICA4NSwKLSAg
ICAgIDEwOSwgIDEwOSwgIDEwOSwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwg
ICA4NCwKLSAgICAgICA4MiwgICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3NSwgICA3MywgICA3
MiwgICA3MSwgICA3MCwKLSAgICAgICA2OSwgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2Miwg
ICA2MSwgICA2MCwgICA1OSwgICA1OCwKLSAgICAgICA1NywgICA1NiwgICA1NSwgICA1NCwgICA1
MywgICA1MiwgICA0OSwgICA0OCwgICA0NywgICA0NiwKLSAgICAgICA0NCwgICA0MywgICA0Miwg
ICA0MCwgICAzOSwgICAzNCwgICAzMywgICAzMiwgICAzMSwgICAzMCwKLSAgICAgICAyOCwgICAy
NCwgICAxMiwgICAgMywgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0Ci0gICAgfSA7Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUg
Y291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVf
Y2FuX21hdGNoX2VvbFsyNF0gPQotICAgIHsgICAwLAotMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgICAgIH07
Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNh
dGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZp
bmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkg
eXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVm
aW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1U
aGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXBy
b2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vz
c29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNj
eHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJV
TiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIK
LSNpbmNsdWRlICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlf
VVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUg
PSB5eWxpbmVubzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNv
bHVtbiArIDE7ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1h
eFNpemUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsK
LSAgICAKLXN0YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBz
dHIsIGludCBsZW4pOwotCi0jZGVmaW5lIElOSVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJBX1RZ
UEUgcHA6OkNvbnRleHQqCi0KLS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50
cmFudCBzY2FubmVyLiAqLwotc3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1k
ZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRy
YV9yOwotCi0gICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xh
cmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAq
eXlvdXRfcjsKLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0
b3Agb2Ygc3RhY2suICovCi0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2Fw
YWNpdHkgb2Ygc3RhY2suICovCi0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNr
OyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAg
IGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9w
OwotICAgIGludCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50
IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlf
c3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVi
dWdfcjsKLQotICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAg
aW50IHl5X21vcmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQ
RSAqIHl5bGxvY19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0
aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBU
aGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVk
Ci0gICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZp
bmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXln
LT55eWxsb2NfcgotICAgIAotaW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQot
aW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90
KiBzY2FubmVyKTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2Ug
YXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5j
ZS4gKi8KLQotaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQg
cHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2RlYnVnIChp
bnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgcHBn
ZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2V4dHJhIChZWV9F
WFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBw
Z2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9pbiAgKEZJTEUgKiBp
bl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci1jaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xp
bmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGlu
ZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9s
bG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9j
IChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8q
IE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRl
ZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JB
UAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlf
ZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4
X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlp
bnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCB5
eV9wdXNoX3N0YXRlIChpbnQgbmV3X3N0YXRlICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotICAgIAot
ICAgIHN0YXRpYyB2b2lkIHl5X3BvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAg
Ci0gICAgc3RhdGljIGludCB5eV90b3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAg
IAotLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwotI2lm
bmRlZiBZWV9SRUFEX0JVRl9TSVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgotI2Vu
ZGlmCi0KLS8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFu
ZGFyZCBvdXRwdXQuICovCi0jaWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0
cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93
IHVzZSBmd3JpdGUoKS4KLSAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcs
IDEsIHl5b3V0ICkKLSNlbmRpZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAi
YnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyByZXR1
cm5lZCBpbiAicmVzdWx0Ii4KLSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9JTlBV
VChidWYscmVzdWx0LG1heF9zaXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAn
Kic7IFwKLSAgICAgICAgaW50IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6
ZSAmJiBcCi0gICAgICAgICAgICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAh
PSAnXG4nOyArK24gKSBcCi0gICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAg
ICBpZiAoIGMgPT0gJ1xuJyApIFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwK
LSAgICAgICAgaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAg
ICAgICByZXN1bHQgPSBuOyBcCi0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwK
LSAgICAgICAgZXJybm89MDsgXAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYs
IDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7
IFwKLSAgICAgICAgICAgIGlmKCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsg
XAotICAgICAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVy
IGZhaWxlZCIgKTsgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAg
fSBcCi0gICAgICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsg
XAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1p
LWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5h
dGUoKTsiIC0KLSAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJu
IiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQotICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4g
YWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQot
I2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVy
IG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lm
bmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUK
LSNlbmRpZgotCi0vKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxf
RVJST1IKLSNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwg
eXlzY2FubmVyKQotI2VuZGlmCi0KLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1
cmVzIGFuZCBwcm90b3R5cGVzICovCi0KLS8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJh
dGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFy
YW1ldGVycy4KLSAqLwotI2lmbmRlZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAx
Ci0KLWV4dGVybiBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxf
cGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2Rl
ZmluZSBZWV9ERUNMIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNl
bmRpZiAvKiAhWVlfREVDTCAqLwotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1
cC4KLSAqLwotI2lmbmRlZiBZWV9VU0VSX0FDVElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgot
I2VuZGlmCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0j
aWZuZGVmIFlZX0JSRUFLCi0jZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZp
bmUgWVlfUlVMRV9TRVRVUCBcCi0gICAgaWYgKCB5eWxlbmcgPiAwICkgXAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IFwKLSAgICAgICAgICAgICAgICAoeXl0
ZXh0W3l5bGVuZyAtIDFdID09ICdcbicpOyBcCi0gICAgWVlfVVNFUl9BQ1RJT04KLQotLyoqIFRo
ZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZ
X0RFQ0wKLXsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0
OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19w
YXJhbTsKLQotICAgIGlmICggIXl5Zy0+eXlfaW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXln
LT55eV9pbml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lO
SVQ7Ci0jZW5kaWYKLQotICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAg
ICB5eWctPnl5X3N0YXJ0ID0gMTsgIC8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLSAgICAgICAg
aWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOwotCi0gICAgICAgIGlmICgg
ISB5eW91dCApCi0gICAgICAgICAgICB5eW91dCA9IHN0ZG91dDsKLQotICAgICAgICBpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVIgKSB7Ci0gICAgICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAg
ICAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgICAgICB9Ci0KLSAgICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9m
LWZpbGUgaXMgcmVhY2hlZCAqLwotICAgICAgICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOwotCi0gICAgICAgIC8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlf
Y3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgICAgICAvKiB5eV9icCBwb2ludHMgdG8gdGhl
IHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKLSAgICAgICAgICogdGhlIGN1
cnJlbnQgcnVuLgotICAgICAgICAgKi8KLSAgICAgICAgeXlfYnAgPSB5eV9jcDsKLQotICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLSAgICAgICAgeXlfY3VycmVudF9z
dGF0ZSArPSBZWV9BVF9CT0woKTsKLXl5X21hdGNoOgotICAgICAgICBkbwotICAgICAgICAgICAg
ewotICAgICAgICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUko
Knl5X2NwKV07Ci0gICAgICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgICAgICAgICAg
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAg
ICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTA0ICk7Ci0g
ICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9h
Y3Rpb246Ci0gICAgICAgIHl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQot
ICAgICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOwotCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZ
X0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgaW50IHl5bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7
IHl5bCA8IHl5bGVuZzsgKyt5eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0g
PT0gJ1xuJyApCi0gICAgICAgICAgICAgICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwot
ICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGlsZSgwKQotOwotICAgICAgICAgICAgfQotCi1k
b19hY3Rpb246ICAvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlv
bnMuICovCi0KLSAgICAgICAgc3dpdGNoICggeXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBv
ZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAgICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAq
LwotICAgICAgICAgICAgLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9O
ICovCi0gICAgICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAg
IHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBn
b3RvIHl5X2ZpbmRfYWN0aW9uOwotCi1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICov
Ci0qeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0ICovCi15eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAg
IHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBIQVNIX0RFRklORV9PQko7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMzoKLSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAv
KiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5z
dmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hf
REVGSU5FX0ZVTkM7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfVU5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSF9JRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBIQVNIX0lGREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgODoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxTRTsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMSUY7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFRklORUQ7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVJST1I7IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfUFJB
R01BOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX0VYVEVOU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBIQVNIX0xJTkU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNzoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBJREVOVElGSUVSOwotfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE4OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmlu
Zyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLSAgICBZWV9C
UkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcg
c3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsK
LX0KLSAgICBZWV9CUkVBSwotY2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHl5dGV4
dFswXTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyAvKiBJZ25v
cmUgd2hpdGVzcGFjZSAqLyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjI6Ci0vKiBydWxlIDIyIGNh
biBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVt
biA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSBZWV9T
VEFURV9FT0YoSU5JVElBTCk6Ci17IHl5dGVybWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAyMzoKLVlZX1JVTEVfU0VUVVAKLUVDSE87Ci0gICAgWVlfQlJFQUsKLQotICAgIGNhc2UgWVlf
RU5EX09GX0JVRkZFUjoKLSAgICAgICAgewotICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBtYXRj
aGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwot
Ci0gICAgICAgIC8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8K
LSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQKLQotICAgICAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIC8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQn
cwotICAgICAgICAgICAgICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhl
IHVzZXIKLSAgICAgICAgICAgICAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBh
bmQgY2FsbGVkCi0gICAgICAgICAgICAgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0
byBhc3N1cmUKLSAgICAgICAgICAgICAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9C
VUZGRVIgYW5kIG91cgotICAgICAgICAgICAgICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0
IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCi0gICAgICAgICAgICAgKiB0aGlzIGlzIHRoZSBmaXJz
dCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQotICAgICAgICAgICAgICogYmFjay11cCkg
dGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KLSAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
bnB1dF9maWxlID0geXlpbjsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRo
ZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNp
bmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1l
bnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5jZSBhbGwgc3RhdGVz
IG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBlbmQtb2YtYnVmZmVy
IHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAgICAgKiBpbiBpbnB1
dCgpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAg
ICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICB5eV9zdGF0
ZV90eXBlIHl5X25leHRfc3RhdGU7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwot
Ci0gICAgICAgICAgICAvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBO
VUwKLSAgICAgICAgICAgICAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0gICAgICAg
ICAgICAgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLSAgICAg
ICAgICAgICAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotICAg
ICAgICAgICAgICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0
Ci0gICAgICAgICAgICAgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRo
ZW4gaXQKLSAgICAgICAgICAgICAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KLSAgICAgICAgICAg
ICAqLwotCi0gICAgICAgICAgICB5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlf
Y3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0
ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5V
TC4gKi8KLSAgICAgICAgICAgICAgICB5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAg
ICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9h
Y3Rpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2Ug
c3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsK
LQotICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRh
a2VuIGNhcmUgaW4KLSAgICAgICAgICAgICAgICAgICAgICogeXlfZ2V0X25leHRfYnVmZmVyKCkg
dG8gaGF2ZSBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXl0ZXh0LCB3ZSBjYW4gbm93
IHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29t
ZSB0b3RhbAotICAgICAgICAgICAgICAgICAgICAgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikg
d2FudHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3
ZSByZXR1cm4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwsIGl0J2xsIHN0aWxs
IHdvcmsgLSBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwgd2lsbCBnZXQg
cmV0dXJuZWQuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICB5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAg
ICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAg
ICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0K
LSAgICAgICAgICAgICAgICAgICAgeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dDsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWct
Pnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZ
WV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotCi0gICAgICAgICAg
ICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVm
X3AgPQotICAgICAgICAgICAgICAgICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdOwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rp
b247Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNj
YW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBv
ZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tl
biAqLwotfSAvKiBlbmQgb2YgcHBsZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5
IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50
aW5nIGFuIGFjdGlvbjoKLSAqICBFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICog
IEVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFy
ICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0
ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1i
ZXJfdG9fbW92ZSwgaTsKLSAgICBpbnQgcmV0X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1
Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
cyArIDFdICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNj
YW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAg
ICB7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAq
LwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01P
UkVfQURKID09IDEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBh
IHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlz
IGFzIGEgZmluYWwgRU9GLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9C
X0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUg
RU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmly
c3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9f
bW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQot
ICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVz
dCsrKSA9ICooc291cmNlKyspOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyog
ZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwK
LSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0K
LSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBudW1fdG9fcmVhZCA9Ci0gICAg
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3Rv
X21vdmUgLSAxOwotCi0gICAgICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAg
ICAgICB7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQot
ICAgICAgICAgICAgLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVy
ICovCi0gICAgICAgICAgICBZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwot
Ci0gICAgICAgICAgICBpbnQgeXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChp
bnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOwotCi0gICAgICAgICAgICBpZiAo
IGItPnl5X2lzX291cl9idWZmZXIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIG5ld19zaXplIDw9IDAgKQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAr
PSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBiLT55eV9idWZfc2l6ZSAqPSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hf
YnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZv
ciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHByZWFsbG9jKCh2b2lkICop
IGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93
IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0g
MDsKLQotICAgICAgICAgICAgaWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBp
bnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9
ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9f
cmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAg
bnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9y
ZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJz
LCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOwotCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgaWYg
KCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgaWYgKCBudW1iZXJf
dG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRf
dmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICAs
eXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLSAgICAgICAgICAg
ICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQotICAg
IGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAgICAgICAvKiBFeHRlbmQg
dGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotICAg
ICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92
ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLSAgICAgICAg
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLSAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1
ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92
ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OwotCi0gICAgeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9wcmV2aW91
c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFj
aGVkICovCi0KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9C
T0woKTsKLQotICAgIGZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKLSAgICAgICAgewotICAgICAgICBy
ZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2Nw
KV0gOiAxKTsKLSAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJy
ZW50X3N0YXRlXTsKLSAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQot
ICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAg
ICAgICAgICAgfQotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotCi0gICAg
cmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkg
dG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNp
cwotICogIG5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0g
Ki8KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVf
dHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lz
dGVyIGludCB5eV9pc19qYW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1
cG9uIG9wdGlvbnMuICovCi0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVm
X3A7Ci0KLSAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOwotICAgIGlmICggeXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgIH0KLSAgICB3aGlsZSAoIHl5X2Noa1t5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAg
ICAgIHsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKLSAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAg
ICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgIHl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09
IDEwNCk7Ci0KLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19
Ci0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBp
bnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlu
cHV0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmCi0KLXsKLSAgICBpbnQgYzsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICBpZiAoICp5eWct
Pnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAg
ICAvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJl
dHVybi4KLSAgICAgICAgICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0
ZXJzLCB0aGVuIGl0J3MgYQotICAgICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2
ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5
eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICov
Ci0gICAgICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotICAgICAgICAgICAgaW50IG9mZnNl
dCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXln
LT55eV9jX2J1Zl9wOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIo
IHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBi
ZWNhdXNlIHl5X2dfbl9iKCkKLSAgICAgICAgICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3Zl
IGFjY3VtdWxhdGVkIGEKLSAgICAgICAgICAgICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRo
YXQgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRv
a2VuIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBp
bnB1dCgpLAotICAgICAgICAgICAgICAgICAgICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNv
bnNpZGVyLgotICAgICAgICAgICAgICAgICAgICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xB
U1RfTUFUQ0gKLSAgICAgICAgICAgICAgICAgICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4K
LSAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg
YnVmZmVyIHN0YXR1cy4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gLHl5
c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAg
ICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
ICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAg
ICAgICAgWVlfTkVXX0ZJTEU7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAg
ICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVm
X3A7IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAn
XDAnOyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICor
K3l5Zy0+eXlfY19idWZfcDsKLQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRf
Ym9sID0gKGMgPT0gJ1xuJyk7Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2F0X2JvbCApCi0gICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNv
bHVtbj0wOwotICAgIH13aGlsZSgwKQotOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0jZW5kaWYgIC8q
IGlmbmRlZiBZWV9OT19JTlBVVCAqLwotCi0vKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlm
ZmVyZW50IGlucHV0IHN0cmVhbS4KLSAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3Ry
ZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBU
aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5J
VElBTCAuCi0gKi8KLSAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewot
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgcHBfaW5pdF9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKLSAgICBwcF9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1
dCBidWZmZXIuCi0gKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9z
d2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxh
Y2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQotICAgICAqIHdpdGgKLSAgICAgKiAgICAgIHBw
cG9wX2J1ZmZlcl9zdGF0ZSgpOwotICAgICAqICAgICAgcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdf
YnVmZmVyKTsKLSAgICAgKi8KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7
Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAg
LyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAg
ICB9Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHBw
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFs
bHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHBw
d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBp
cyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAg
ICAgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRf
YnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWctPnl5X25fY2hh
cnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgeXlnLT55eXRl
eHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zOwotICAgIHl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2Zp
bGU7Ci0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiog
QWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFt
IGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1
ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRl
X2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUp
IHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwot
ICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBz
aXplOwotCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRo
YW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFy
ICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEg
Yi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZl
ciA9IDE7Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLSAgICBy
ZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVm
ZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIGIg
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAv
KiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7Ci0KLSAgICBpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQotICAgICAgICBwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNj
YW5uZXIgKTsKLQotICAgIHBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyog
SW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24g
aXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0g
KiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRp
YyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotICAgIGludCBvZXJybm8gPSBlcnJubzsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICBwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotICAgIGItPnl5X2lucHV0X2ZpbGUg
PSBmaWxlOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhl
IGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAg
ICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIu
Ci0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8g
b3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAg
ICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsK
LSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotICAgIGVy
cm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4g
T24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0
aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZG
RVIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZv
aWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIGlmICggISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYi0+eXlfbl9j
aGFycyA9IDA7Ci0KLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5k
LW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAgICogYSBqYW0gaW4gdGhh
dCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0g
ICAgYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07Ci0KLSAgICBiLT55eV9hdF9ib2wg
PSAxOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgaWYg
KCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFj
ay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVu
Y3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBh
cmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJf
U1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19i
dWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrKHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3
aXRjaF90b19idWZmZXIuICovCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAg
IHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwot
ICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2No
YXJzOwotICAgICAgICB9Ci0KLSAgICAvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3
aXNlLCByZXBsYWNlIHRvcC4gKi8KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAg
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IG5ld19idWZmZXI7Ci0KLSAgICAvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVy
LiAqLwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0
ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVu
dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCA+IDApCi0gICAgICAgIC0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0gICAg
aWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7
Ci0gICAgfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0
LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0
aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBpbnQgbnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsK
LQotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNp
bmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZlbiBu
ZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAgICAg
KiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAg
ICAgbnVtX3RvX2FsbG9jID0gMTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAo
ICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJv
dXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IG51bV90b19hbGxvYzsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNy
ZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAg
ICAgaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAg
ICBudW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0g
ICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilw
cHJlYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUg
bmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19h
bGxvYzsKLSAgICB9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBA
cGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUg
aW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBz
dGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFy
ICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZ
X0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGlmICggc2l6ZSA8IDIgfHwKLSAgICAgICAgIGJh
c2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLSAgICAgICAgIGJhc2Vbc2l6
ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICAvKiBUaGV5IGZvcmdvdCB0
byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
YiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAg
IGItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9C
J3MgKi8KLSAgICBiLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55
eV9pc19vdXJfYnVmZmVyID0gMDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55
eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OwotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAg
IGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgcHBfc3dpdGNoX3Rv
X2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRv
IHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFy
YW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMg
dGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQotICogICAgICAgcHBfc2Nhbl9i
eXRlcygpIGluc3RlYWQuCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCi0gICAgcmV0
dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKLX0KLQot
LyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMu
IFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9m
IEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBA
cGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5
IEBhIGJ5dGVzLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBA
cmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwotWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RB
VEUgYjsKLSAgICBjaGFyICpidWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgaW50IGk7Ci0gICAg
Ci0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0g
KGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRl
cygpIiApOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAg
ICAgIGJ1ZltpXSA9IHl5Ynl0ZXNbaV07Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1Zltf
eXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0gcHBfc2Nh
bl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9G
QVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyog
SXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBp
dAotICAgICAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291
cl9idWZmZXIgPSAxOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9w
dXNoX3N0YXRlIChpbnQgIG5ld19zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAg
aWYgKCB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA+PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRo
ICkKLSAgICAgICAgewotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemU7Ci0KLSAgICAgICAgeXln
LT55eV9zdGFydF9zdGFja19kZXB0aCArPSBZWV9TVEFSVF9TVEFDS19JTkNSOwotICAgICAgICBu
ZXdfc2l6ZSA9IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKiBzaXplb2YoIGludCApOwotCi0g
ICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIHl5Zy0+eXlf
c3RhcnRfc3RhY2sgPSAoaW50ICopIHBwYWxsb2MobmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBw
cmVhbGxvYygodm9pZCAqKSB5eWctPnl5X3N0YXJ0X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIg
KTsKLQotICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBtZW1vcnkgZXhwYW5kaW5nIHN0YXJ0LWNvbmRpdGlvbiBz
dGFjayIgKTsKLSAgICAgICAgfQotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0
YXJ0X3N0YWNrX3B0cisrXSA9IFlZX1NUQVJUOwotCi0gICAgQkVHSU4obmV3X3N0YXRlKTsKLX0K
LQotICAgIHN0YXRpYyB2b2lkIHl5X3BvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgaWYgKCAtLXl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIDwgMCApCi0gICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAic3RhcnQtY29uZGl0aW9uIHN0YWNrIHVuZGVyZmxvdyIgKTsKLQotICAgIEJF
R0lOKHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHJdKTsKLX0KLQot
ICAgIHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICByZXR1cm4geXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFd
OwotfQotCi0jaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQotI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUg
MgotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1z
ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVy
ciwgIiVzXG4iLCBtc2cgKTsKLSAgICBleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0KLQotLyog
UmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCi0KLSN1
bmRlZiB5eWxlc3MKLSNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAot
ICAgICAgICAvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAg
ICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8o
eXlsZXNzX21hY3JvX2FyZyk7XAotICAgICAgICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOyBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNy
b19hcmc7IFwKLSAgICAgICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBc
Ci0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5
bGVzc19tYWNyb19hcmc7IFwKLSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotLyogQWNj
ZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8K
LQotLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1ZWV9FWFRSQV9UWVBFIHBw
Z2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlleHRyYTsK
LX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87Ci19Ci0KLS8q
KiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXljb2x1bW47Ci19Ci0KLS8qKiBHZXQg
dGhlIGlucHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi1GSUxFICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0
dXJuIHl5aW47Ci19Ci0KLS8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfb3V0ICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlvdXQ7Ci19Ci0KLS8qKiBHZXQgdGhlIGxl
bmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5bGVuZzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0KLWNoYXIgKnBwZ2V0
X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eXRleHQ7Ci19Ci0K
LS8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hl
ZCBieSB0aGUgc2Nhbm5lci4KLSAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2Vy
X2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5ZXh0cmEgPSB1c2VyX2Rl
ZmluZWQgOwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFt
IGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
Lwotdm9pZCBwcHNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotCi0gICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1
ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAg
ICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVy
IiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0K
LS8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9jb2x1
bW4gKGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAv
KiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAg
ICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9y
KCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAg
ICAKLSAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKLX0KLQotLyoqIFNldCB0aGUgaW5wdXQgc3Ry
ZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKLSAqIGlucHV0IGJ1ZmZlci4K
LSAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgotICovCi12
b2lkIHBwc2V0X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgeXlpbiA9IGluX3N0ciA7Ci19Ci0KLXZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5b3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWlu
dCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5X2Zs
ZXhfZGVidWc7Ci19Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKLX0KLQotLyogQWNj
ZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KLQotWVlTVFlQRSAqIHBwZ2V0
X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWx2YWw7Ci19Ci0K
LXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLX0KLQotWVlMVFlQRSAqcHBn
ZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGxvYzsKLX0K
LSAgICAKLXZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLX0KLSAgICAKLS8q
IFVzZXItdmlzaWJsZSBBUEkgKi8KLQotLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2Ug
aXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCi0gKiB0aGUgT05MWSByZWVu
dHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3Qg
YXJndW1lbnQuCi0gKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJh
dGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgotICovCi0KLWludCBwcGxleF9pbml0
KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKLQotewotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAg
IH0KLQotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZigg
c3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKLQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0g
TlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0KLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRf
Z2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJf
eXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLQotICAgIHJldHVybiB5
eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotLyogcHBsZXhfaW5pdF9l
eHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93
cyB0aGUKLSAqIGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFy
Z3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQKLSAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBz
Y2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAotICogaXMg
dGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBv
d24gZGVjbGFyYXRpb24pLgotICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3Qg
YXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgdG8gcHBhbGxvYyBpbgotICogdGhlIHl5ZXh0cmEg
ZmllbGQuCi0gKi8KLQotaW50IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2Vy
X2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkKLQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCBkdW1teV95eWd1dHM7Ci0KLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAm
ZHVtbXlfeXlndXRzKTsKLQotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAg
ICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAq
cHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1
dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0gICAgCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAg
IH0KLSAgICAKLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCi0g
ICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBt
ZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotICAg
IAotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7Ci0g
ICAgCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQot
Ci1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQg
c2Nhbm5lci4KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ry
b3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KLSAgICAgKi8KLQotICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Ci0gICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIg
KikgMDsKLSAgICB5eWctPnl5X2luaXQgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnQgPSAwOwotCi0g
ICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tf
ZGVwdGggPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKLQotLyogRGVmaW5l
ZCBpbiBtYWluLmMgKi8KLSNpZmRlZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAg
IHl5b3V0ID0gc3Rkb3V0OwotI2Vsc2UKLSAgICB5eWluID0gKEZJTEUgKikgMDsKLSAgICB5eW91
dCA9IChGSUxFICopIDA7Ci0jZW5kaWYKLQotICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBT
ZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKLSAgICAgKiBwcGxleF9p
bml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcHBsZXhfZGVzdHJveSBpcyBm
b3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgcHBs
ZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBQb3AgdGhlIGJ1
ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlfQ1VS
UkVOVF9CVUZGRVIpewotICAgICAgICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIgKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
LSAgICAgICAgcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgLyog
RGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHBwZnJlZSh5eWctPnl5X2J1ZmZlcl9z
dGFjayAseXlzY2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAg
ICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJl
ZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFy
dF9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBv
cnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAq
IHBwbGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5
X2luaXRfZ2xvYmFscyggeXlzY2FubmVyKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3Ry
dWN0IChyZWVudHJhbnQgb25seSkuICovCi0gICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2Fu
bmVyICk7Ci0gICAgeXlzY2FubmVyID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAq
IEludGVybmFsIHV0aWxpdHkgcm91dGluZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1z
dGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwg
aW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAg
Zm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQotICAgICAgICBzMVtpXSA9IHMyW2ldOwotfQotI2Vu
ZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAo
eXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBp
bnQgbjsKLSAgICBmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKLSAgICAgICAgOwotCi0gICAgcmV0
dXJuIG47Ci19Ci0jZW5kaWYKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsK
LX0KLQotdm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIC8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBm
b2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1
c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9p
ZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJl
Y2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20K
LSAgICAgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50
IGNvbnZlcnNpb25zCi0gICAgICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAg
ICovCi0gICAgcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwot
fQotCi12b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBmcmVlKCAoY2hhciAqKSBwdHIgKTsgICAvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICop
IGNhc3QgKi8KLX0KLQotI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3RkOjpz
dHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAg
IC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0r
e0lERU5USUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNF
LgotICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9
PSA4OwotCi0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBs
ZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykg
fHwgKHN0cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBz
dGQ6OnN0cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwot
fQotCi1uYW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1Ziwg
aW50IG1heFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1J
bnB1dC0+ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6
OmtFcnJvck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2Rl
TG9jYXRpb24ocHBnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZp
bGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHBwc2V0X2xpbmVubyhwcDo6VG9r
ZW46OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQg
PSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJv
cigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHBwbGV4X2luaXRfZXh0cmEodGhpcywm
bUxleGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUxleGVy
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQot
ewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgcHBsZXhfZGVzdHJveShtTGV4ZXIpOwotICAg
IG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdGFiLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNmFhMC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcF90YWIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3MiArMCwwIEBACi0v
KiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0
b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0g
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0g
ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNl
cHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFy
dCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0
IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29y
ayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24g
b3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAg
QWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJz
ZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMK
LSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICov
Ci0KLS8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxs
bWFuLCBieQotICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMi
IHBhcnNlci4gICovCi0KLS8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2lu
IHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCi0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFj
ZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxlcywgYXMg
dGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0gICBUaGVy
ZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRv
Ci0gICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklO
RlJJTkdFUyBPTgotICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElkZW50aWZ5
IEJpc29uIG91dHB1dC4gICovCi0jZGVmaW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2ZXJzaW9u
LiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCi0KLS8qIFNrZWxldG9uIG5hbWUu
ICAqLwotI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBwYXJzZXJz
LiAgKi8KLSNkZWZpbmUgWVlQVVJFIDEKLQotLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KLSNkZWZp
bmUgWVlMU1BfTkVFREVEIDEKLQotLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0
aW9uIG5hbWVzLiAgKi8KLSNkZWZpbmUgeXlwYXJzZSBwcHBhcnNlCi0jZGVmaW5lIHl5bGV4ICAg
cHBsZXgKLSNkZWZpbmUgeXllcnJvciBwcGVycm9yCi0jZGVmaW5lIHl5bHZhbCAgcHBsdmFsCi0j
ZGVmaW5lIHl5Y2hhciAgcHBjaGFyCi0jZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZwotI2RlZmluZSB5
eW5lcnJzIHBwbmVycnMKLSNkZWZpbmUgeXlsbG9jIHBwbGxvYwotCi0vKiBUb2tlbnMuICAqLwot
I2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUg
dG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVn
Z2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewot
ICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0g
MjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAg
ICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5E
SUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0g
ICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAg
SEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVG
SU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NP
TlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklF
UiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgK
LSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFT
SF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAy
NjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmlu
ZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdN
QSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAy
NzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0j
ZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNk
ZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0K
LS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
Z2xzbGFuZ19wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgot
Ci0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAx
Ci0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUg
WVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4g
ICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBk
ZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0Ug
MAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZ
VE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNpZiAhIGRl
ZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1
bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsK
LSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8q
IExpbmUgMTg3IG9mIHlhY2MuYy4gICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlw
ZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUg
WVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2Vu
ZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNM
QVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50
IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZ
WUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJl
IHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZ
WUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQg
b2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSog
bHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9y
KFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZv
aWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0
aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRl
eHQpOwotCi0KLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNob3J0Ci0j
IHVuZGVmIHNob3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZ
UEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5
cGVfdWludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQRV9J
TlQ4IHl5dHlwZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVmIHNo
b3J0IGludCB5eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgotdHlw
ZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDE2
Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBzaG9y
dCBpbnQgeXl0eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZkZWYg
X19TSVpFX1RZUEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxpZiBk
ZWZpbmVkIHNpemVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5l
ZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICBp
bmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5zaWdu
ZWQgaW50Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0la
RV9UKSAtMSkKLQotI2lmbmRlZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVf
TkxTCi0jICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwg
bXNnaWQpCi0jICBlbmRpZgotIyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1z
Z2lkKSBtc2dpZAotIyBlbmRpZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJs
ZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmlu
ZWQgX19HTlVDX18KLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UKLSMgZGVm
aW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24s
IHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICov
Ci0jaWZuZGVmIGxpbnQKLSMgZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQot
I2Vsc2UKLXN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsKLSAgcmV0
dXJuIGk7Ci19Ci0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1Jf
VkVSQk9TRQotCi0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5l
IHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NB
Ci0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAgICBkZWZp
bmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9fQlVJ
TFRJTl9WQV9BUkdfSU5DUgotIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIF9fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgIGlu
Y2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
IGRlZmluZSBhbGxvY2EgX2FsbG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0MgYWxsb2NhCi0jICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBpbmNs
dWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICAg
aWZuZGVmIF9TVERMSUJfSAotIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAgZW5kaWYK
LSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZWVNU
QUNLX0FMTE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAq
LwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUg
KFlZSUQgKDApKQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRoZSBP
UyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRo
ZSBzdGFjaywKLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYg
Ynl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYg
TiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAgIHRv
IGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3Rz
LiAgKi8KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJs
ZSBjaXJjYSAyMDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19BTExP
QyBZWU1BTExPQwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZWVNU
QUNLX0FMTE9DX01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0la
RV9NQVhJTVVNCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZp
bmVkIF9TVERMSUJfSCBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5l
ZCBtYWxsb2MpIFwKLSAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUp
KSkKLSMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwotIyAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAg
ZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0Mg
bWFsbG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlT
SVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMg
IGVuZGlmCi0jICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYg
ISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRp
ZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYg
KCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBc
Ci0gICAgIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJ
QUwgXAotICAgICAgICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9J
U19UUklWSUFMKSkpCi0KLS8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFu
eSBzdGFjayBtZW1iZXIuICAqLwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50MTYgeXlz
czsKLSAgWVlTVFlQRSB5eXZzOwotICAgIFlZTFRZUEUgeXlsczsKLX07Ci0KLS8qIFRoZSBzaXpl
IG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4
dC4gICovCi0jIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxs
b2MpIC0gMSkKLQotLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhv
bGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZ
U1RBQ0tfQllURVMoTikgXAotICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNp
emVvZiAoWVlTVFlQRSkgKyBzaXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNL
X0dBUF9NQVhJTVVNKQotCi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAg
VGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZu
ZGVmIFlZQ09QWQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBk
ZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAo
VG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVNJWkVfVCB5eWk7ICAg
ICAgICAgICAgIFwKLSAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAg
XAotICAgICAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlm
Ci0KLS8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9u
ZS4gIFRoZQotICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0
aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZ
WVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZhbmNlIFlZ
UFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAgIHN0YWNr
LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVz
OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0
YWNrLCB5eXNpemUpOyAgICAgICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5TdGFjazsg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNp
emVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICB5eXB0ciArPSB5eW5l
d2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRp
ZgotCi0vKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUu
ICAqLwotI2RlZmluZSBZWUZJTkFMICAyCi0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRB
QkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMjQ3Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIg
b2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA0NwotLyogWVlOTlRTIC0tIE51
bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDEyCi0vKiBZWU5SVUxF
UyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjIKLS8qIFlZTlJV
TEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDkxCi0KLS8q
IFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8gWVlMRVguICAqLwotI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAg
IDI3NgotCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhd
IDogWVlVTkRFRlRPSykKLQotLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5dHJhbnNsYXRlW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAyMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDMsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgIDM3LCAgICA0MCwgICAgIDIsCi0gICAgICAyMywgICAgMjQsICAgIDM2
LCAgICAzMywgICAgMjUsICAgIDM0LCAgICAzMiwgICAgMzUsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
NDQsICAgIDQ1LAotICAgICAgMjgsICAgIDQyLCAgICAyOSwgICAgNDYsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgIDI2LCAgICAgMiwgICAgMjcsICAgIDM4LCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzAsICAgIDM5LCAgICAzMSwgICAgNDEsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAz
LCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAt
LSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAg
IFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAg
ICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAg
ICAxNiwgICAgMTksCi0gICAgICAyMywgICAgMzAsICAgIDM0LCAgICAzOCwgICAgNDIsICAgIDQ2
LCAgICA1MCwgICAgNTMsICAgIDU2LCAgICA1OSwKLSAgICAgIDYyLCAgICA2NSwgICAgNjgsICAg
IDcxLCAgICA3MiwgICAgNzQsICAgIDc1LCAgICA3NywgICAgODEsICAgIDgzLAotICAgICAgODYs
ICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk5LCAgIDEwMSwgICAxMDMsICAgMTA1LCAgIDEwNywg
ICAxMDksCi0gICAgIDExMSwgICAxMTMsICAgMTE1LCAgIDExNywgICAxMTksICAgMTIxLCAgIDEy
MywgICAxMjUsICAgMTI3LCAgIDEyOSwKLSAgICAgMTMxLCAgIDEzMywgICAxMzUsICAgMTM3LCAg
IDEzOSwgICAxNDEsICAgMTQzLCAgIDE0NSwgICAxNDcsICAgMTQ5LAotICAgICAxNTEsICAgMTUz
LCAgIDE1NQotfTsKLQotLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBy
dWxlcycgUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KLXsKLSAg
ICAgIDQ4LCAgICAgMCwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIC0xLCAgICA1MCwg
ICAgLTEsICAgIDUxLAotICAgICAgLTEsICAgIDIyLCAgICAtMSwgICAgNTUsICAgIDIyLCAgICAt
MSwgICAgIDMsICAgIDIyLCAgICAtMSwgICAgMTcsCi0gICAgICA1MiwgICAgMjIsICAgIC0xLCAg
ICAxOCwgICAgMjMsICAgIDUzLCAgICAyNCwgICAgNTIsICAgIDIyLCAgICAtMSwKLSAgICAgICA0
LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgNSwgICAgNTQsICAgIDIyLCAgICAtMSwgICAgIDYs
ICAgIDIxLAotICAgICAgMjIsICAgIC0xLCAgICAgNywgICAgMjEsICAgIDIyLCAgICAtMSwgICAg
IDksICAgIDU0LCAgICAyMiwgICAgLTEsCi0gICAgICAgOCwgICAgMjIsICAgIC0xLCAgICAxMCwg
ICAgMjIsICAgIC0xLCAgICAxMiwgICAgMjIsICAgIC0xLCAgICAxMywKLSAgICAgIDIyLCAgICAt
MSwgICAgMTQsICAgIDIyLCAgICAtMSwgICAgMTUsICAgIDIyLCAgICAtMSwgICAgMTYsICAgIDIy
LAotICAgICAgLTEsICAgIC0xLCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgLTEsICAg
IDUzLCAgICAyNSwgICAgMjEsCi0gICAgICAtMSwgICAgNTYsICAgIC0xLCAgICA1NCwgICAgNTYs
ICAgIC0xLCAgICA1NywgICAgLTEsICAgIDU1LCAgICA1NywKLSAgICAgIC0xLCAgICAxMSwgICAg
MjEsICAgIC0xLCAgICAxMSwgICAgMjMsICAgIDIxLCAgICAyNCwgICAgLTEsICAgIDU3LAotICAg
ICAgLTEsICAgIDU4LCAgICAtMSwgICAgMTksICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIxLCAg
ICAtMSwgICAgMjYsCi0gICAgICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5
LCAgICAtMSwgICAgMjMsICAgIC0xLCAgICAyNCwKLSAgICAgIC0xLCAgICAzMCwgICAgLTEsICAg
IDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LAotICAgICAgLTEs
ICAgIDM1LCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAzNywgICAgLTEsICAgIDM4LCAgICAtMSwg
ICAgMzksCi0gICAgICAtMSwgICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAt
MSwgICAgNDMsICAgIC0xLCAgICA0NCwKLSAgICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDI1LCAg
ICAtMSwgICAgNDYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUg
d2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA2MywgICAgNjMsICAgIDY1LCAg
ICA2OSwgICAgNzAsICAgIDc0LCAgICA3NSwgICAgODQsICAgIDg1LAotICAgICAgODgsICAgIDkx
LCAgICA5NCwgICAgOTcsICAgMTAwLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDExMCwgICAxMTEs
Ci0gICAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIyLCAgIDEyMywgICAx
MjcsICAgMTMzLCAgIDEzNywKLSAgICAgMTQ0LCAgIDE0OCwgICAxNTUsICAgMTU3LCAgIDE1OSwg
ICAxNjMsICAgMTY2LCAgIDE2OSwgICAxNzIsICAgMTc4LAotICAgICAxNzksICAgMTgwLCAgIDE4
MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsCi0gICAg
IDE4OSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsICAg
MTk3LCAgIDE5OCwKLSAgICAgMTk5LCAgIDIwMCwgICAyMDEKLX07Ci0jZW5kaWYKLQotI2lmIFlZ
REVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5BTUVbU1lN
Qk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAgRmly
c3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWlu
YWxzLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAiJGVu
ZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkhBU0giLCAiSEFTSF9VTkRFRiIsICJIQVNIX0lG
IiwKLSAgIkhBU0hfSUZERUYiLCAiSEFTSF9JRk5ERUYiLCAiSEFTSF9FTFNFIiwgIkhBU0hfRUxJ
RiIsICJIQVNIX0VORElGIiwKLSAgIkRFRklORUQiLCAiSEFTSF9FUlJPUiIsICJIQVNIX1BSQUdN
QSIsICJIQVNIX0VYVEVOU0lPTiIsICJIQVNIX1ZFUlNJT04iLAotICAiSEFTSF9MSU5FIiwgIkhB
U0hfREVGSU5FX09CSiIsICJIQVNIX0RFRklORV9GVU5DIiwgIklOVF9DT05TVEFOVCIsCi0gICJG
TE9BVF9DT05TVEFOVCIsICJJREVOVElGSUVSIiwgIidcXG4nIiwgIicoJyIsICInKSciLCAiJywn
IiwgIidbJyIsCi0gICInXSciLCAiJzwnIiwgIic+JyIsICIneyciLCAiJ30nIiwgIicuJyIsICIn
KyciLCAiJy0nIiwgIicvJyIsICInKiciLAotICAiJyUnIiwgIideJyIsICInfCciLCAiJyYnIiwg
Iid+JyIsICInPSciLCAiJyEnIiwgIic6JyIsICInOyciLCAiJz8nIiwKLSAgIiRhY2NlcHQiLCAi
aW5wdXQiLCAibGluZSIsICJ0ZXh0X2xpbmUiLCAiY29udHJvbF9saW5lIiwKLSAgInJlcGxhY2Vt
ZW50X2xpc3QiLCAicGFyYW1ldGVyX2xpc3QiLCAiY29uZGl0aW9uYWxfbGlzdCIsICJ0b2tlbl9s
aXN0IiwKLSAgImNvbmRpdGlvbmFsX3Rva2VuIiwgInRva2VuIiwgIm9wZXJhdG9yIiwgMAotfTsK
LSNlbmRpZgotCi0jIGlmZGVmIFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50
ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAgICAgICAw
LCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMs
ICAgMjY0LAotICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAy
NzEsICAgMjcyLCAgIDI3MywgICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgIDEwLCAgICA0MCwg
ICAgNDEsICAgIDQ0LCAgICA5MSwgICAgOTMsICAgIDYwLCAgICA2MiwKLSAgICAgMTIzLCAgIDEy
NSwgICAgNDYsICAgIDQzLCAgICA0NSwgICAgNDcsICAgIDQyLCAgICAzNywgICAgOTQsICAgMTI0
LAotICAgICAgMzgsICAgMTI2LCAgICA2MSwgICAgMzMsICAgIDU4LCAgICA1OSwgICAgNjMKLX07
Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0
IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10g
PQotewotICAgICAgIDAsICAgIDQ3LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA0OSwgICAgNTAs
ICAgIDUwLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwg
ICAgNTEsICAgIDUyLCAgICA1MiwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTQsICAgIDU0LAot
ICAgICAgNTUsICAgIDU1LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3
LCAgICA1NywgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAg
NTgsICAgIDU4LCAgICA1OAotfTsKLQotLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDMsCi0gICAgICAgNiwgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLCAg
ICAgMywgICAgIDEsICAgICAyLAotICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMQotfTsKLQotLyogWVlERUZBQ1Rb
U1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCi0gICBT
VEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBk
by4gIFplcm8KLSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAgICAgMiwgICAgIDAsICAgICAx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAg
MzYsICAgIDM3LAotICAgICAgMzgsICAgICA2LCAgICA0MywgICAgNDQsICAgIDYxLCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDUsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKLSAgICAgIDU2LCAg
ICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICAwLAotICAgICAgMzAsICAgIDM1LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjgs
ICAgIDM0LCAgICAgMCwgICAgIDAsCi0gICAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAyNCwKLSAgICAgIDI1LCAgICAgNywg
ICAgMzEsICAgIDExLCAgICAzMiwgICAgIDAsICAgIDEyLCAgICAyOSwgICAgMTMsICAgIDE0LAot
ICAgICAgMTUsICAgICA5LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDMz
LCAgICAgMCwgICAgMjcsCi0gICAgICAxMAotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0u
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0x
LCAgICAgMSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNjgsICAgIDgzLCAgICA1NSwgICAgNjks
ICAgIDU2LAotICAgICAgNTcsICAgIDUxCi19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJ
bmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRFLU5VTS4g
ICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC01NQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eXBhY3RbXSA9Ci17Ci0gICAgIC01NSwgICAgNzMsICAgLTU1LCAgIC0xNywgICAtMTgsICAgMTQ1
LCAgIC0xMCwgICAgLTksICAgLTE2LCAgIDE0NSwKLSAgICAgIC04LCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjcsICAgMjAxLCAgICAyOCwgICAtNTUsICAgLTU1LAotICAgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgMTczLAotICAgICAtNTUsICAgLTU1
LCAgIC01NSwgICAgMzAsICAgLTE5LCAgICAtMywgICAtNTUsICAgLTU1LCAgICAzMSwgICAgMzIs
Ci0gICAgIC01NSwgICAxMDksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgIDMzLCAgIDIwMSwKLSAgICAgIDI5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAgMzUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtMTUsICAgLTExLCAgIDIwMSwgICAgMzYsICAgLTU1LCAgICAzNywgICAtNTUsCi0gICAg
IC01NQotfTsKLQotLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfaW50OCB5eXBnb3RvW10gPQotewotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC0yNywgICAtNTUsICAgIDUxLCAgICA2MCwgICAtNTQsCi0gICAgICAtMSwgICAtNTUK
LX07Ci0KLS8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0
ZSBTVEFURS1OVU0uICBJZgotICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdh
dGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAg
SWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50
YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXl0YWJsZVtdID0KLXsKLSAgICAgIDUwLCAgICA3NywgICAgNzQsICAgIDUzLCAg
ICA3NSwgICAgNTIsICAgIDYwLCAgICA3NywgICAgNTQsICAgIDg1LAotICAgICAgODYsICAgIDU4
LCAgICA1OSwgICAgODcsICAgIDYyLCAgICA1MCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzYs
Ci0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA3MiwgICAgNjcsCi0gICAg
ICA4MiwgICAgNzAsICAgIDczLCAgICA3OCwgICAgNzksICAgIDgxLCAgICA4NCwgICAgODksICAg
IDg4LCAgICA5MCwKLSAgICAgIDYxLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgNzIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDIsICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgNTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwK
LSAgICAgIDU0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTgsICAgIDE5LAotICAgICAgMjAsICAgIDgwLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKLSAgICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDU0LCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAg
IDQzLAotICAgICAgNDQsICAgIDQ1LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3MSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAot
ICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NQotfTsKLQotc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Ci17Ci0gICAgICAgMSwgICAgNTUsICAgIDIxLCAgICAyMSwg
ICAgMjMsICAgIDIyLCAgICAyMiwgICAgNjEsICAgIDExLCAgICAyNCwKLSAgICAgIDI1LCAgICAy
MSwgICAgMjEsICAgIDI0LCAgICAyMiwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNDksICAgIDIyLAotICAg
ICAgMjEsICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDIxLCAg
ICA4NSwgICAgMjIsCi0gICAgICAgOSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDY5LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDg1LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
Ci0gICAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwK
LSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYKLX07Ci0KLS8qIFlZU1RPU1tTVEFU
RS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1i
b2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlz
dG9zW10gPQotewotICAgICAgIDAsICAgIDQ4LCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1NSwKLSAgICAgIDU3LCAgICA1OCwg
ICAgMjIsICAgIDIxLCAgICAxMSwgICAgNTQsICAgIDU2LCAgICA1NywgICAgMjEsICAgIDIxLAot
ICAgICAgMjIsICAgIDU0LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIy
LCAgICA1MiwgICAgNTUsCi0gICAgICAyMywgICAgMjIsICAgIDU3LCAgICAyMiwgICAgMjEsICAg
IDIzLCAgICAyMiwgICAgNTYsICAgIDIyLCAgICAyMiwKLSAgICAgIDIyLCAgICAyMiwgICAgMjEs
ICAgIDUzLCAgICAyMSwgICAgMjQsICAgIDI1LCAgICAyNCwgICAgNTIsICAgIDIxLAotICAgICAg
MjIKLX07Ci0KLSNkZWZpbmUgeXllcnJvayAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUg
eXljbGVhcmluICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAgICgtMikK
LSNkZWZpbmUgWVlFT0YgICAgICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8geXlhY2Nl
cHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJS
T1IgICAgIGdvdG8geXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2Fs
bCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhl
IHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBP
bmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4g
ICovCi0KLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgotCi0jZGVmaW5lIFlZUkVD
T1ZFUklORygpICAoISF5eWVycnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFs
dWUpICAgICAgICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKSAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFyID0gKFRv
a2VuKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsg
ICAgICAgICAgICAgICBcCi0gICAgICBZWVBPUFNUQUNLICgxKTsgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5v
dCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKFlZSUQgKDAp
KQotCi0KLSNkZWZpbmUgWVlURVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAyNTYKLQot
Ci0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv
IFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j
YXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg
ZGVmaW5lZCkuICAqLwotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lm
bmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhz
LCBOKSAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSku
Zmlyc3RfbGluZTsgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9D
IChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAg
PSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICBcCi0gICAgICAoQ3VycmVudCkubGFz
dF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgXAotICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAg
IFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICBc
Ci0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0g
ICAgICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZ
WUlEICgwKSkKLSNlbmRpZgotCi0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBs
b2NhdGlvbiBvbiB0aGUgc3RyZWFtLgotICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9y
aWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKLSAgIHdlIHdvbid0IGJyZWFrIHVzZXIg
Y29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KLQotI2lmbmRl
ZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSMgIGRlZmluZSBZ
WV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgIFwKLSAgICAgZnByaW50ZiAoRmls
ZSwgIiVkLiVkLSVkLiVkIiwgICAgICAgICAgXAotICAgICAgICAgIChMb2MpLmZpcnN0X2xpbmUs
IChMb2MpLmZpcnN0X2NvbHVtbiwgXAotICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2Mp
Lmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwg
TG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5n
IGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZTEVYX1BB
UkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0p
Ci0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0jZW5kaWYK
LQotLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQot
IyBpZm5kZWYgWVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYK
LQotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAotICAgIFlZ
RlBSSU5URiBBcmdzOyAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAg
ICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAo
eXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
JXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQg
KHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUs
IExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9s
X3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAq
IGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpD
b250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAg
ICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0g
ICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAg
ICByZXR1cm47Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLSMg
aWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJTlQgKHl5
b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZVVNFICh5
eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0
cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUg
Y29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQot
c3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAs
IHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5
cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29u
c3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRp
ZgotewotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9MT0NBVElP
Tl9QUklOVCAoeXlvdXRwdXQsICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICI6ICIpOwotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7
Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUg
c3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGlj
IHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2
ICp0b3ApCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkK
LSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKLSNlbmRp
ZgotewotICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsgYm90dG9t
IDw9IHRvcDsgKytib3R0b20pCi0gICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9t
KTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19Q
UklOVChCb3R0b20sIFRvcCkgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0
byBiZSByZWR1Y2VkLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAq
eXlsc3AsIGludCB5eXJ1bGUsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2
b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQotICAg
IFlZU1RZUEUgKnl5dnNwOwotICAgIFlZTFRZUEUgKnl5bHNwOwotICAgIGludCB5eXJ1bGU7Ci0g
ICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9IHl5cjJb
eXlydWxlXTsKLSAgaW50IHl5aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5l
W3l5cnVsZV07Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAl
ZCAobGluZSAlbHUpOlxuIiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKLSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkg
KyAxKTsKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxl
XSArIHl5aV0sCi0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkK
LSAgICAgICAgICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAg
ICAgLCBjb250ZXh0KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotfQot
Ci0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAgICAgICAg
ICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgXAotICAgIHl5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkp
Ci0KLS8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5p
dGlhbGl6ZWQgc28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1p
bnQgeXlkZWJ1ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJn
cykKLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9u
KQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRI
IC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJ
TklUREVQVEgKLSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQ
VEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5
Ci0gICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQot
ICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRl
ZmluZWQgaWYKLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFY
REVQVEgpCi0gICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0
aG1ldGljLiAgKi8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEw
MDAwCi0jZW5kaWYKLQotDAotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3Ry
bGVuCi0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRl
ZmluZSB5eXN0cmxlbiBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZ
U1RSLiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0
aWMgWVlTSVpFX1QKLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMg
WVlTSVpFX1QKLXl5c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRp
ZgotewotICBZWVNJWkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsg
eXlsZW4rKykKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMg
ZW5kaWYKLQotIyBpZm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRl
ZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBj
cHkgc3RwY3B5Ci0jICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRo
ZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5
c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBj
aGFyICoKLXl5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBj
b25zdCBjaGFyICp5eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNv
bnN0IGNoYXIgKnl5cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAn
XDAnKQotICAgIGNvbnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMg
ZW5kaWYKLQotIyBpZm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50
cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFu
ZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0g
ICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3Mg
dGhlIHN0cmluZwotICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3Ns
YXNoIChvdGhlciB0aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2Vu
IGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVh
ZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJl
ZW4uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBj
aGFyICp5eXN0cikKLXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpF
X1QgeXluID0gMDsKLSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3Ig
KDs7KQotICAgIHN3aXRjaCAoKisreXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAg
ICAgY2FzZSAnLCc6Ci0gICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAg
Y2FzZSAnXFwnOgotICAgICAgICBpZiAoKisreXlwICE9ICdcXCcpCi0gICAgICAgICAgZ290byBk
b19ub3Rfc3RyaXBfcXVvdGVzOwotICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAqeXlw
OwotICAgICAgICB5eW4rKzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJyInOgotICAg
ICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0gICAgICAgIHJl
dHVybiB5eW47Ci0gICAgICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQot
ICBpZiAoISB5eXJlcykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4g
eXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBp
bnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4K
LSAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgY29waWVkLAotICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJ
ZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVj
aWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNz
YWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1
cmluZwotICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4
X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17Ci0gIGlu
dCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYm
IHl5biA8PSBZWUxBU1QpKQotICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAgICAgaW50
IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9
IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9
IHl5c2l6ZTA7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVy
ZmxvdyA9IDA7Ci0gICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUg
fTsKLSAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1d
OwotICAgICAgaW50IHl5eDsKLQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0
IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0gICAgIGNvbnN0cnVjdGVk
IG9uIHRoZSBmbHkuICAqLwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMi
KTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMi
KTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVk
ICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAgICAgIGNo
YXIgKnl5Zm10OwotICAgICAgY2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNoYXIgY29u
c3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKLSAgICAg
IHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOwotICAg
ICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFyIHl5Zm9y
bWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKLSAgICAgICAgICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5n
IC0gMQotICAgICAgICAgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQot
ICAgICAgICAgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOwotICAgICAgY2hhciBjb25zdCAq
eXlwcmVmaXggPSB5eWV4cGVjdGluZzsKLQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYg
bmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICBZWUNIRUNLLiAgKi8K
LSAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3Rh
eSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBp
bnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXlj
aGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQg
eXljb3VudCA9IDE7Ci0KLSAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAg
eXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAo
eXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAgaWYgKHl5Y2hlY2tbeXl4
ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotICAgICAgewotICAgICAgICBpZiAo
eXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAgICAgIHsKLSAg
ICAgICAgeXljb3VudCA9IDE7Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgIHl5
Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAg
ICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLSAg
ICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgICAgeXlz
aXplID0geXlzaXplMTsKLSAgICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4
KTsKLSAgICAgICAgeXlwcmVmaXggPSB5eW9yOwotICAgICAgfQotCi0gICAgICB5eWYgPSBZWV8o
eXlmb3JtYXQpOwotICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAg
ICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7Ci0KLSAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCi0gICAgcmV0dXJuIFlZU0la
RV9NQVhJTVVNOwotCi0gICAgICBpZiAoeXlyZXN1bHQpCi0gICAgewotICAgICAgLyogQXZvaWQg
c3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAg
ICAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRp
b24KLSAgICAgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAi
JXMicy4gICovCi0gICAgICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKLSAgICAgIGludCB5eWkgPSAw
OwotICAgICAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKLSAgICAgICAgewotICAgICAg
ICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7
Ci0gICAgICAgICAgeXlmICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5eWYrKzsKLSAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgICAgcmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWVlF
UlJPUl9WRVJCT1NFICovCi0MCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMg
c3ltYm9sLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQg
eXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIHBwOjpDb250
ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0
eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hhciAqeXlt
c2c7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZWUxUWVBF
ICp5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBZ
WVVTRSAoeXl2YWx1ZXApOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4
dCk7Ci0KLSAgaWYgKCF5eW1zZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJP
TF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQotICBzd2l0
Y2ggKHl5dHlwZSkKLSAgICB7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQot
fQotDAotCi0vKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAq
LwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UK
LWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChw
cDo6Q29udGV4dCogY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNl
bmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwg
eXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQg
KllZUEFSU0VfUEFSQU0pCi0jZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAg
IHZvaWQgKllZUEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAq
LwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJz
ZSAocHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250ZXh0KQot
ICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyogVGhlIGxv
b2stYWhlYWQgc3ltYm9sLiAgKi8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1
ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0KLS8qIE51
bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLS8qIExvY2F0
aW9uIGRhdGEgZm9yIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYzsK
LQotICBpbnQgeXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1i
ZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8K
LSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFs
ICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYg
WVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMg
YWxsb2NhdGVkIHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNn
ID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwot
I2VuZGlmCi0KLSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3Mn
OiByZWxhdGVkIHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZh
bHVlcywKLSAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0
byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cK
LSAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgLyogVGhlIHN0YXRl
IHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBl
X2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgLyogVGhl
IHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07
Ci0gIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAgLyogVGhl
IGxvY2F0aW9uIHN0YWNrLiAgKi8KLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07Ci0gIFlZ
TFRZUEUgKnl5bHMgPSB5eWxzYTsKLSAgWVlMVFlQRSAqeXlsc3A7Ci0gIC8qIFRoZSBsb2NhdGlv
bnMgd2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KLSAgWVlMVFlQRSB5eWVy
cm9yX3JhbmdlWzJdOwotCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5
eXNzcCAtPSAoTiksIHl5bHNwIC09IChOKSkKLQotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZ
SU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMg
dmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0g
IFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBz
eW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJv
IHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwot
Ci0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0
ZSA9IDA7Ci0gIHl5ZXJyc3RhdHVzID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZ
RU1QVFk7ICAgICAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8qIEluaXRp
YWxpemUgc3RhY2sgcG9pbnRlcnMuCi0gICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFu
ZCBsb2NhdGlvbiBzdGFjawotICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZl
bCBhcyB0aGUgc3RhdGUgc3RhY2suCi0gICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVy
IGluaXRpYWxpemVkLiAgKi8KLQotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2czsKLSAg
eXlsc3AgPSB5eWxzOwotI2lmIFlZTFRZUEVfSVNfVFJJVklBTAotICAvKiBJbml0aWFsaXplIHRo
ZSBkZWZhdWx0IGxvY2F0aW9uIGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4gICovCi0gIHl5bGxvYy5m
aXJzdF9saW5lICAgPSB5eWxsb2MubGFzdF9saW5lICAgPSAxOwotICB5eWxsb2MuZmlyc3RfY29s
dW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMDsKLSNlbmRpZgotCi0gIGdvdG8geXlzZXRzdGF0
ZTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMg
Zm91bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBj
YXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0g
ICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5z
IHRoZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0g
eXlzdGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7
Ci0gICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3Ms
IGluIGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyAr
IDE7Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hh
bmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNl
IHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBt
ZW1vcnkuICAqLwotICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYg
Knl5c3MxID0geXlzczsKLSAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNo
IHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAg
ICAgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBi
ZSBhCi0gICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBi
dXQgdGhhdCBtaWdodAotICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFj
cm8uICAqLwotICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAg
ICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXlsc3ApLAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLSAgICB5eWxz
ID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsKLSAgICAgIH0K
LSNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAg
ICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3Rh
Y2sgb3VyIG93biB3YXkuICAqLwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUp
Ci0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAg
ICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhE
RVBUSDsKLQotICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIHVu
aW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxM
T0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0gICAg
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotICAg
IFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOwot
IyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAg
IFlZU1RBQ0tfRlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5
b3ZlcmZsb3cgKi8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5
dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAx
OwotCi0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAl
bHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0g
ICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFCT1JUOwot
ICAgIH0KLQotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlz
dGF0ZSkpOwotCi0gIGdvdG8geXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3Vw
LiAgfAotYC0tLS0tLS0tLS0tKi8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHBy
b2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVh
ZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0K
LSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRv
IGxvb2stYWhlYWQgdG9rZW4uICAqLwotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5
eW4gPT0gWVlQQUNUX05JTkYpCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3du
ID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICov
Ci0KLSAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9v
ay1haGVhZCBzeW1ib2wuICAqLwotICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAgewotICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAgICB5eWNo
YXIgPSBZWUxFWDsKLSAgICB9Ci0KLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAg
ICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJO
b3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHl5
dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5l
eHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0KLSAgLyog
SWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNl
IG9yIHRvCi0gICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5
biArPSB5eXRva2VuOwotICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5
eW5dICE9IHl5dG9rZW4pCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXlu
XTsKLSAgaWYgKHl5biA8PSAwKQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0g
WVlUQUJMRV9OSU5GKQotICAgIGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAg
ICAgZ290byB5eXJlZHVjZTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZ
QUNDRVBUOwotCi0gIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0
aHJlZSwgdHVybiBvZmYgZXJyb3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVz
KQotICAgIHl5ZXJyc3RhdHVzLS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4u
ICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVv
Zi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKLQot
ICB5eXN0YXRlID0geXluOwotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgKisreXlsc3AgPSB5eWxs
b2M7Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhl
IGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1
bHQ6Ci0gIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290
byB5eWVycmxhYjsKLSAgZ290byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIg
b2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAg
LyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRo
ZSBhY3Rpb246Ci0gICAgIGAkJCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dp
bmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5k
b2N1bWVudGVkIGFuZCBCaXNvbgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4g
IEFzc2lnbmluZyB0byBZWVZBTAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNl
ciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZ
WVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5
bGVuXTsKLQotICAvKiBEZWZhdWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5
bG9jLCAoeXlsc3AgLSB5eWxlbiksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwot
ICBzd2l0Y2ggKHl5bikKLSAgICB7Ci0gICAgICAgIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAg
Ly8gVE9ETyhhbG9rcCk6IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciog
b3V0ID0gY29udGV4dC0+b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCks
ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KS0+YmVnaW4oKSwgKHl5dnNwWygxKSAtICgyKV0udGxp
c3QpLT5lbmQoKSk7Ci0gICAgICAgIGRlbGV0ZSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQt
PmRlZmluZU1hY3JvKCh5eWxzcFsoMSkgLSAoMyldKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtU
eXBlT2JqLCAoeXl2c3BbKDEpIC0gKDMpXS5zdmFsKSwgTlVMTCwgKHl5dnNwWygyKSAtICgzKV0u
dGxpc3QpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAg
ICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKCh5eWxzcFsoMSkgLSAoNildKS5maXJzdF9saW5lLCBw
cDo6TWFjcm86OmtUeXBlRnVuYywgKHl5dnNwWygxKSAtICg2KV0uc3ZhbCksICh5eXZzcFsoMykg
LSAoNildLnRsaXN0KSwgKHl5dnNwWyg1KSAtICg2KV0udGxpc3QpKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTE6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFj
cm8oKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMjoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgKHl5
dnNwWygyKSAtICgzKV0udGxpc3QpID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNv
bnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICBwdXNo
Q29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNw
WygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6Ci0K
LSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgcG9wQ29uZGl0aW9u
YWxCbG9jayhjb250ZXh0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6Ci0KLSAg
ICB7ICh5eXZhbC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjU6Ci0K
LSAgICB7ICh5eXZhbC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwot
ICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDEp
IC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkp
KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDMpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50
bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMykgLSAoMyldKS5maXJzdF9s
aW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDMpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAyODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2
c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI5Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3Qp
OwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZh
bCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlz
dCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDMxOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNw
WygxKSAtICgyKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5
dnNwWygyKSAtICgyKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoK
LQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDM1OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZh
bCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pdmFsKSwgTlVMTCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM2
OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFso
MSkgLSAoMSldKS5maXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2
YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xp
bmUsIEZMT0FUX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBu
ZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAo
eXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM5
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnWyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0
MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ10nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NDE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDQyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA0MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJygnOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNDQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcpJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDQ1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAneyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA0NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ30nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNDc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcuJzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDQ4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKyc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcvJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDUxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA1MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNTM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfCc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA1NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNTY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd+JzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDU3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPSc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyEnOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc6JzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDYwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA2MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJywnOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc/JzsgO30K
LSAgICBicmVhazsKLQotCi0vKiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAgICAgZGVm
YXVsdDogYnJlYWs7Ci0gICAgfQotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5
eW5dLCAmeXl2YWwsICZ5eWxvYyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9
IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5eXZh
bDsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9m
IHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8s
IGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAg
bnVtYmVyIHJlZHVjZWQgYnkuICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRl
ID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRl
ICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAg
IHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVm
Z290b1t5eW4gLSBZWU5UT0tFTlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBk
ZXRlY3RpbmcgZXJyb3IgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWVycmxhYjoKLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9y
LCByZXBvcnQgdGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAg
ICAgKyt5eW5lcnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yICgmeXls
bG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7Ci0gICAg
WVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0g
ICAgaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExP
Q19NQVhJTVVNKQotICAgICAgewotICAgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6
ZTsKLSAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFD
S19BTExPQ19NQVhJTVVNKSkKLSAgICAgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJ
TVVNOwotICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgICAgICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7Ci0gICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlh
bGxvYyk7Ci0gICAgICAgIGlmICh5eW1zZykKLSAgICAgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxs
b2M7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgIHl5bXNnID0geXltc2didWY7
Ci0gICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotICAgICAgICAgIH0KLSAg
ICAgIH0KLQotICAgIGlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLSAg
ICAgIHsKLSAgICAgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXlj
aGFyKTsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2cpOwotICAgICAg
fQotICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwg
WVlfKCJzeW50YXggZXJyb3IiKSk7Ci0gICAgICAgIGlmICh5eXNpemUgIT0gMCkKLSAgICAgICAg
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgfQotICAgICAgfQotI2VuZGlmCi0gICAgfQot
Ci0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMp
Ci0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2st
YWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAg
ICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlm
IGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAg
ICBZWUFCT1JUOwotICAgIH0KLSAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgi
RXJyb3I6IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXls
bG9jLCBjb250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0gICAgfQotICAgIH0KLQot
ICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRp
bmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJv
cmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29k
ZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRo
ZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNP
TlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3JhbmdlWzBd
ID0geXlsc3BbMS15eWxlbl07Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRo
ZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAg
WVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNz
LCB5eXNzcCk7Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBh
bmQgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAg
LyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3Ig
KDs7KQotICAgIHsKLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4g
IT0gWVlQQUNUX05JTkYpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgaWYg
KDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQot
ICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgIGlmICgw
IDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgLyogUG9w
IHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9r
ZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKLQotICAgICAg
eXllcnJvcl9yYW5nZVswXSA9ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9w
cGluZyIsCi0gICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQp
OwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJ
TkFMKQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIHl5ZXJyb3Jf
cmFuZ2VbMV0gPSB5eWxsb2M7Ci0gIC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywgYnV0IHdv
dWxkIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YKLSAgICAgdGhlIGxvb2stYWhlYWQuICBZWUxPQyBp
cyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXllcnJv
cl9yYW5nZSAtIDEpLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0aGUg
ZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5
eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0
ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNj
ZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3Rv
IHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8g
eXlyZXR1cm47Ci0KLSNpZm5kZWYgeXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkg
ZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxs
b2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwot
ICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFy
ICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51
cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAotICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYywgY29udGV4dCk7Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBy
dWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBU
LiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOwotICB3aGlsZSAoeXlzc3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgi
Q2xlYW51cDogcG9wcGluZyIsCi0gICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxz
cCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3Zl
cmZsb3cKLSAgaWYgKHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNl
bmRpZgotI2lmIFlZRVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNl
ZC4gICovCi0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotdm9pZCB5eWVy
cm9yKFlZTFRZUEUqIGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVh
c29uKQotewotfQotCi12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250
ZXh0LCBib29sIGNvbmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBw
OjpDb250ZXh0KiBjb250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0
OjpwYXJzZSgpCi17Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykg
PT0gMCA/IHRydWUgOiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHBfdGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWY4MDYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdGFiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyog
QSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9u
IGludGVyZmFjZSBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwg
eW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFs
bCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawot
ICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0
IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1v
ZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5h
dGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2Vs
ZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3Bl
Y2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVz
dWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRp
b24uCi0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyog
VG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0g
ICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFu
ZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5
dG9rZW50eXBlIHsKLSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAg
ICAgSEFTSF9JRiA9IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5E
RUYgPSAyNjIsCi0gICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAot
ICAgICBIQVNIX0VORElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VS
Uk9SID0gMjY3LAotICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04g
PSAyNjksCi0gICAgIEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAot
ICAgICBIQVNIX0RFRklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMs
Ci0gICAgIElOVF9DT05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0g
ICAgIElERU5USUZJRVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVm
aW5lIEhBU0ggMjU4Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYw
Ci0jZGVmaW5lIEhBU0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmlu
ZSBIQVNIX0VMU0UgMjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJ
RiAyNjUKLSNkZWZpbmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZp
bmUgSEFTSF9QUkFHTUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBI
QVNIX1ZFUlNJT04gMjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJ
TkVfT0JKIDI3MgotI2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09O
U1RBTlQgMjc0Ci0jZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVS
IDI3NgotCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVf
SVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0g
ICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tl
blZlY3RvciogdGxpc3Q7Ci19Ci0vKiBMaW5lIDE0ODkgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZ
U1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAm
JiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQot
ewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGlu
ZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxU
WVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQ
RV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTcxNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKQEAgLTAsMCAr
MSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVwcm9jZXNz
b3IgdXRpbGl0aWVzCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKworLy8gQSBtYWNybyB0
byBkaXNhbGxvdyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucwor
Ly8gVGhpcyBtdXN0IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBj
bGFzcy4KKyNkZWZpbmUgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisg
IFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJh
dG9yPShjb25zdCBUeXBlTmFtZSYpCisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
UFBVVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3By
b2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhOTc1OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKQEAgLTAsMCArMSwzOTMgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QK
KwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9InByZXBy
b2Nlc3NvciIKKwlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdC
QzMyNX0iCisJUm9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9IldpbjMyUHJv
aiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJ
CTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0i
eDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJ
PENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIi
CisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSki
CisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0
YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQ
cm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRp
bWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztf
TElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0i
MyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIK
KwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJ
bmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0
MTI3OzQyNDQ7NDcwMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291
cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1
cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91
dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUlu
dGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0
aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5z
aWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05E
RUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2
ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5p
bmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9u
Rm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29u
ZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNv
bHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVy
bWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgor
CQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
WE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNl
cnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01J
RExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxk
PSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0i
MSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJ
CQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJ
CQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1
cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1
dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1l
ZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxk
RXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9u
bWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIK
KwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVu
dGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJ
CQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdh
cm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlz
YWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgor
CTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5h
bWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hw
ajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2
LUEwNjYtMkEzMkQ3NTJBMkZGfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XERpYWdub3N0aWNzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElu
cHV0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxMZXhlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii5cTWFjcm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZp
bGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVu
dGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2
ZVBhcnNlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXEV4cHJlc3Npb25QYXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2Nh
dGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFRva2VuLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cVG9rZW5pemVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVz
PgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3N0bF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBkMWNlNTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gc3RsX3V0aWxzLmg6IENvbW1vbiBTVEwgdXRpbGl0
aWVzLgotCi0jaWZuZGVmIENPTU1PTl9TVExVVElMU19IXwotI2RlZmluZSBDT01NT05fU1RMVVRJ
TFNfSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBEZWxldGUKLXsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBUPgotICAgIHZvaWQgb3BlcmF0b3IoKSAoVCB4KSB7IGRlbGV0ZSB4OyB9Ci19Owot
Ci1zdHJ1Y3QgRGVsZXRlU2Vjb25kCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4K
LSAgICB2b2lkIG9wZXJhdG9yKCkgKHN0ZDo6cGFpcjxBLCBCPiYgeCkgeyBkZWxldGUgeC5zZWNv
bmQ7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgLy8gQ09NTU9OX1NUTFVUSUxT
X0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzQzYTk0MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
VE9LRU5fVFlQRV9IXwotCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Mu
aAppbmRleCA4OGQxOTZmLi4xNTA1NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaApA
QCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVj
dCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21U
YWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmco
Y29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUs
IGludCBhdG9tKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKaW5kZXggNjBiNjZiZC4uZmRlODUzYyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKQEAgLTY2LDYgKzY2LDggQEAgdHlwZWRlZiBzdHJ1Y3Qg
U3RyaW5nSW5wdXRTcmMgewogICAgIGNoYXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0
aWMgaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9z
Y2FuKElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVP
RjsKQEAgLTczLDcgKzc1LDcgQEAgc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKQogCiBzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50
IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1
dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRT
cmMgZW9mX2lucHV0c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAg
fTsKIAogc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFs
cHApOwogCkBAIC0xMjYsNiArMTI4LDE2IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJl
dHVybiAoRnJlZUNQUCgpKTsKIH0KIAoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpj
cHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSkKK3sKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9
IHN0cmluZzsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVu
ICAgPSBsZW5ndGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4g
MDsKK30KKwogLyoKICAqIHN0cl9nZXRjaCgpCiAgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJv
bSBtdWx0aXBsZSBzdHJpbmdzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAppbmRleCAyMzNkMWRjLi5i
NjdjMWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaApAQCAtNjksOSArNjksOSBAQCB0eXBlZGVm
IHN0cnVjdCBJbnB1dFNyYyB7CiB9IElucHV0U3JjOwogCiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3Ry
dWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IFNjYW5Gcm9t
U3RyaW5nKGNvbnN0IGNoYXIgKik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZy
b20gdGhlIHN0cmluZyBtZW50aW9uZWQuCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3Qg
KmNwcCwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKTsKIGludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdl
IGhpdCBhIEVPRiBhYnJ1cHRseSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAv
LyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxp
bmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKIHZvaWQgU2V0TGluZU51bWJlcihpbnQpOwog
dm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKIHZvaWQgSW5jTGluZU51bWJlcih2b2lkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc3ltYm9scy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmgKaW5kZXggYzE5Zjc5Yy4uZTdkMGIwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmgKQEAgLTEwNSw3ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2Mg
KmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wg
KkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJv
bGtpbmQga2luZCk7CiBTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGlu
dCBhdG9tKTsKIFN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsK
LXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQo
X19TWU1CT0xTX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwppbmRleCBkNjU4YzEyLi5iOTRjMDVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmMKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHN0cmlu
Zy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NsZ2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2
ICsyNjYsOCBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKICAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKICAgICBp
bnQgbHRva2VuLCBsZW47CiAgICAgY2hhciBjaDsKKyAgICBpbnQgYmFzZSwgYWNjdW07CisgICAg
Y2hhciBjaF92YWw7CiAKICAgICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgaWYgKGx0
b2tlbiA+PSAwKSB7CkBAIC0zMTUsMTggKzMxOCw0MSBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3Ry
ZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKICAgICAgICAgICAgIGxlbiA9IDA7CisJICAgIGFj
Y3VtID0gMDsKICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAg
d2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgaWYg
KGNoID09ICcwJykgeworICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwor
ICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9u
YW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7CiAgICAgICAg
ICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4OwogICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaF92YWwgPSAtMTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNkaWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IGNoIC0gJzAn
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY2hfdmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsKKworICAgICAgICAgICAgICAg
IGlmIChjaF92YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAg
ICAgICAgICAgIGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFsOworICAgICAgICAgICAgICAg
IGNoID0gbFJlYWRCeXRlKHBUb2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3ltYm9s
X25hbWVbbGVuXSA9ICdcMCc7CiAgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAg
ICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAg
ICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgc3ltYm9sX25hbWUpOworICAg
ICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGFjY3VtOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgJygnOgogICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0
ZShwVG9rKTsKQEAgLTQxNCwxMCArNDQwLDEwIEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUg
KmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgc3dp
dGNoICh0b2tlbikgewogICAgICAgICBjYXNlIENQUF9JREVOVElGSUVSOgogICAgICAgICBjYXNl
IENQUF9UWVBFSURFTlRJRklFUjoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25w
cmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2
YWxwcC0+c2NfaWRlbnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9T
VFJDT05TVEFOVDoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wiIiwgR2V0QXRvbVN0
cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxw
cC0+c2NfaWRlbnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9GTE9B
VENPTlNUQU5UOgogICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19m
dmFsKTsKQEAgLTQyNyw5ICs0NTMsOSBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwg
VG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh0b2tlbiA+PSAxMjcpCi0gICAg
ICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9r
ZW4pKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwg
R2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIlYyIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJWMiLCB0b2tlbik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmgKaW5kZXggODc2NmRmOS4uZGJmNGEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCkBAIC00OCw2
ICs0OCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICNpZiAhZGVmaW5lZChfX1RPS0VOU19IKQogI2RlZmluZSBfX1RPS0VOU19I
IDEKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oIgogCiAjZGVmaW5lIEVPRl9TWSAoLTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41MzhiNzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cApAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1Np
bmtCYXNlJiBzaW5rKQorICAgIDogbVNpbmsoc2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sK
KyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1w
bGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBv
cHMgZm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlQ3ViZShzQzE7dmYzOyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNf
RUdMX2ltYWdlX2V4dGVybmFsLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgx
O3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIp
OworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAg
Ly8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVq
b3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBv
cGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2
YWx1ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRo
b3NlIGFzIHdlbGwuCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VS
ZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVy
cm9ycyA9IDA7CisKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBo
IGRvZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywK
KyAgICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20g
ZWFjaCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUg
YW4gZXJyb3IgZWFjaCB0aW1lIHdlCisgICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRl
cGVuZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOwor
ICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7
CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3Jh
cGgmIGdyYXBoKQoreworICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAg
KytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwg
PSAqaXRlcjsKKyAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0
aW9uQ2FsbCgpKTsKKyAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBm
dW5jdGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkK
K3sKKyAgICArK21OdW1FcnJvcnM7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAoreworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25D
YWxsLT5pc1VzZXJEZWZpbmVkKCkgJiYKKyAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50
ZXJtRnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBt
aWdodCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmlj
dCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUg
b3IgTE9EIGJpYXMgb2YgYQorICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNT
YW1wbGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAg
IHN3aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAg
ICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkp
OworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAg
ICAgPDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
ICAgICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9y
KHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50
IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNh
bXBsZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVy
bVNlbGVjdGlvbigpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24g
YSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4i
OworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3Jh
cGhMb29wKiBsb29wKQoreworICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsK
KyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5v
dCBwZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dp
Y2FsT3ApCit7CisgICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgp
KTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlz
IG5vdCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAg
ICAgICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRv
ci5cbiI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTE2NWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJ
TUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVS
X1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVi
bGljOgorICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2lu
ayk7CisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgm
IGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsg
fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiog
c2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3Ap
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2lj
YWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2Rl
KiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShj
b25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJ
bmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBz
dGQ6OnNldDxUU3RyaW5nPiBTdHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsK
K307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURF
Ul9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5
cGUoKSkpIHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAg
ICAgICAgbVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFk
ZXJzLlxuIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9U
SU1JTkdfSF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJf
VElNSU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUg
ImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
CisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAg
ICAgLCBtTnVtRXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVElu
dGVybU5vZGUqIHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJy
b3JzKCkgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7
CisgICAgaW50IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19S
RVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIs
NiArOTkyLDIyIEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICBy
ZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQz
REZNVF9EWFQ1KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBE
aXJlY3QzRDkKKy8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUg
dGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5m
by90ZXh0cy9EM0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7
CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNw
bGF5TW9kZSk7CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVT
QUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBi
b29sIG51bGwgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwg
RDNEUlRZUEVfU1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51
bGw7Cit9CisKIGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50
RGlzcGxheU1vZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1
ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsK
IH0KIAotRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNv
bnN0CitEM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAog
ewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAg
RDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAg
aWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFS
R0VUKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgK
aW5kZXggNTAyODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAg
dmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2Ns
dXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2lu
Z1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09S
RCB1c2FnZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wg
cmVuZGVyYWJsZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERX
T1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7
CiAgICAgYm9vbCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLjAzOGIxNjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMSw2MzcgKzEs
NjgyIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0
aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8v
IHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sg
YnVmZmVycy4KLS8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgotCi0jaW5jbHVkZSA8dGNoYXIuaD4K
LQotI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21h
aW4uaCIKLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSA8ZHdtYXBpLmg+
Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLQotbmFtZXNwYWNlCi17Ci1jb25zdCBpbnQgdmVyc2lvbldp
bmRvd3NWaXN0YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYpOwotY29uc3QgaW50IHZlcnNpb25XaW5k
b3dzNyA9IE1BS0VXT1JEKDB4MDEsIDB4MDYpOwotCi0vLyBSZXR1cm4gdGhlIHZlcnNpb24gb2Yg
dGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIG9yZGVyaW5nCi0v
LyBjb21wYXJpc29uLgotaW50IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQotewotICAgIERXT1JE
IHZlcnNpb24gPSBHZXRWZXJzaW9uKCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShM
T1dPUkQodmVyc2lvbikpOwotICAgIGludCBtaW5vclZlcnNpb24gPSBISUJZVEUoTE9XT1JEKHZl
cnNpb24pKTsKLSAgICByZXR1cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24p
OwotfQotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZp
ZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAot
ICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cp
LCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotewotICAg
IG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5k
ZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hh
cmVIYW5kbGUgPSBOVUxMOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1h
dCA9IEVHTF9OT19URVhUVVJFOwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7
Ci0KLSAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1ND
QUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwot
ICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9
IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRT
d2FwSW50ZXJ2YWwoMSk7Ci0KLSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpT
dXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hh
cmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9y
bWF0LCBFR0xlbnVtIHRleHR1cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5k
b3coTlVMTCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdp
ZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xf
RkFMU0UpCi17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5V
TEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBO
VUxMOwotICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgbVRleHR1cmUgPSBOVUxM
OwotICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4dHVyZUZvcm1hdDsKLSAgICBtVGV4dHVyZVRhcmdl
dCA9IHRleHR1cmVUeXBlOwotCi0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAg
KiBFR0xfRElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhl
bCBhc3BlY3QgcmF0aW8KLSAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAg
IG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFs
ID0gLTE7Ci0gICAgc2V0U3dhcEludGVydmFsKDEpOwotfQotCi1TdXJmYWNlOjp+U3VyZmFjZSgp
Ci17Ci0gICAgdW5zdWJjbGFzc1dpbmRvdygpOwotICAgIHJlbGVhc2UoKTsKLX0KLQotYm9vbCBT
dXJmYWNlOjppbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIW1Td2FwQ2hhaW4gJiYgIW1PZmZz
Y3JlZW5UZXh0dXJlICYmICFtRGVwdGhTdGVuY2lsKTsKLQotICAgIGlmICghcmVzZXRTd2FwQ2hh
aW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFt
ZXRlcnMgZm9yIHRoaXMgd2luZG93LCBpZiB3ZSBhcmUgY29tcG9zaXRlZCwKLSAgICAvLyB0byBt
aW5pbWl6ZSB0aGUgYW1vdW50IG9mIHF1ZXVpbmcgZG9uZSBieSBEV00gYmV0d2VlbiBvdXIgY2Fs
bHMgdG8KLSAgICAvLyBwcmVzZW50IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4KLSAgICBpZiAobVdp
bmRvdyAmJiAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEp
KSB7Ci0gICAgICBCT09MIGlzQ29tcG9zaXRlZDsKLSAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdt
SXNDb21wb3NpdGlvbkVuYWJsZWQoJmlzQ29tcG9zaXRlZCk7Ci0gICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkgJiYgaXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIERXTV9QUkVTRU5UX1BBUkFNRVRF
UlMgcHJlc2VudFBhcmFtczsKLSAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXpl
b2YocHJlc2VudFBhcmFtcykpOwotICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVv
ZihEV01fUFJFU0VOVF9QQVJBTUVURVJTKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jQnVmZmVy
ID0gMjsKLQotICAgICAgICByZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93
LCAmcHJlc2VudFBhcmFtcyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ICBFUlIoIlVuYWJsZSB0byBzZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQp
OwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6
OnJlbGVhc2UoKQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBD
aGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1S
ZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVu
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVRleHR1
cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAg
IG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hh
aW4oKQotewotICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3
YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsK
LSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3Qg
cmV0cmlldmUgdGhlIHdpbmRvdyBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdp
bmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0K
LWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJh
Y2tidWZmZXJIZWlnaHQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3Bs
YXktPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBwcmVzZXJ2
ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCAm
JiBtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0g
bVJlbmRlclRhcmdldDsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsK
LSAgICB9Ci0KLSAgICAvLyBFdmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8g
c3lzdGVtIG1lbW9yeSBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJl
YWxsb2NhdGluZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2li
bGUuCi0gICAgZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLSAgICByZWxlYXNlKCk7
Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0g
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBib29sIHVzZUZsaXBFeCA9IChnZXRDb21wYXJhYmxl
T1NWZXJzaW9uKCkgPj0gdmVyc2lvbldpbmRvd3M3KSAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZp
Y2UoKTsKLQotICAgIC8vIEZsaXBFeCBjYXVzZXMgdW5zZWVtbHkgc3RyZXRjaGluZyB3aGVuIHJl
c2l6aW5nIHdpbmRvd3MgQU5EIHdoZW4gb25lCi0gICAgLy8gZHJhd3Mgb3V0c2lkZSBvZiB0aGUg
V01fUEFJTlQgY2FsbGJhY2suIFdoaWxlIHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSBpbgotICAg
IC8vIHNpbmdsZSBwcm9jZXNzIGFwcGxpY2F0aW9ucywgaXQgaXMgcGFydGljdWFybHkgbm90aWNl
YWJsZSBpbiBtdWx0aXByb2Nlc3MKLSAgICAvLyBhcHBsaWNhdGlvbnMuIFRoZXJlZm9yZSwgaWYg
dGhlIGNyZWF0b3IgcHJvY2VzcyBvZiBvdXIgd2luZG93IGlzIG5vdCBpbgotICAgIC8vIHRoZSBj
dXJyZW50IHByb2Nlc3MsIGRpc2FibGUgdXNlIG9mIEZsaXBFeC4KLSAgICBEV09SRCB3aW5kb3dQ
SUQ7Ci0gICAgR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZ3aW5kb3dQSUQpOwot
ICAgIGlmICh3aW5kb3dQSUQgIT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpKQotICAgIHsKLSAgICAg
ICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBoYXJkd2FyZSBk
b2VzIG5vdCBzdXBwb3J0IEQzRFNXQVBFRkZFQ1RfRkxJUEVYIHdoZW4gZWl0aGVyIHRoZQotICAg
IC8vIGRldmljZSBmb3JtYXQgb3IgYmFjayBidWZmZXIgZm9ybWF0IGlzIG5vdCAzMi1iaXQuCi0g
ICAgSERDIGRldmljZUNvbnRleHQgPSBHZXREQygwKTsKLSAgICBpbnQgZGV2aWNlRm9ybWF0Qml0
cyA9IEdldERldmljZUNhcHMoZGV2aWNlQ29udGV4dCwgQklUU1BJWEVMKTsKLSAgICBSZWxlYXNl
REMoMCwgZGV2aWNlQ29udGV4dCk7Ci0gICAgaWYgKG1Db25maWctPm1CdWZmZXJTaXplICE9IDMy
IHx8IGRldmljZUZvcm1hdEJpdHMgIT0gMzIpCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBpcyBhbHdheXMgVlNZ
TkNlZAotICAgIGlmIChtU3dhcEludGVydmFsID09IDApCi0gICAgewotICAgICAgICB1c2VGbGlw
RXggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBkb2VzIG5v
dCBwcmVzZXJ2ZSB0aGUgYmFjayBidWZmZXIuCi0gICAgaWYgKG1Qb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0
ZW5jaWxGb3JtYXQ7Ci0gICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVu
IHdlIHVzZSBEM0RTV0FQRUZGRUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2Ug
RGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAg
ICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRl
IHRoYXQgZWl0aGVyIGl0IGlzCi0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGlu
ZyB1cywgb3IgYmV0dGVyLCBkb2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhl
IHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckZvcm1hdCA9IG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0g
Z2V0V2luZG93SGFuZGxlKCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFs
aXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAg
Ly8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRp
b25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43
IG9yIGdyZWF0ZXIuCi0gICAgaWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
U3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNl
bnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNX
QVBFRkZFQ1RfQ09QWSA6IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldp
ZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQ
YXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSEFORExFICpw
U2hhcmVIYW5kbGUgPSBOVUxMOwotICAgICAgICBpZiAobURpc3BsYXktPnNoYXJlSGFuZGxlU3Vw
cG9ydGVkKCkpIHsKLSAgICAgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
SGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBEM0RQ
T09MX0RFRkFVTFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICB9Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJl
c3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NU
KTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlu
cyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFz
ZSgpOwotCi0gICAgICAgIAotICAgICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtV2luZG93KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBE
M0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1SZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIXBy
ZXNlcnZlZFJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgSW52YWxpZGF0ZVJl
Y3QobVdpbmRvdywgTlVMTCwgRkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5k
ZXJUYXJnZXQpOwotICAgIH0KLQotICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICAwLCAwLAotICAg
ICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3Qu
cmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lk
dGgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9t
ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2Vu
ZSgpOwotICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KHByZXNlcnZlZFJlbmRlclRhcmdldCwg
JnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgIHBy
ZXNlcnZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9y
bWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0
aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9E
ZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxM
KTsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0gICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46
IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7Ci0gICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7Ci0KLSAgICBtUHJlc2VudEludGVydmFsRGlydHkgPSBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUo
KQotewotICAgIHJldHVybiBtV2luZG93OwotfQotCi0KLSNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0
eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIiKQotI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVY
VCgiRWdsOjpTdXJmYWNlUGFyZW50V25kUHJvYyIpCi0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IFN1cmZhY2VXaW5kb3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFt
LCBMUEFSQU0gbHBhcmFtKQotewotICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQotICB7Ci0gICAg
ICBTdXJmYWNlKiBzdXJmID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25k
LCBrU3VyZmFjZVByb3BlcnR5KSk7Ci0gICAgICBpZihzdXJmKQotICAgICAgewotICAgICAgICAg
IHN1cmYtPmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAgICB9Ci0gIH0KLSAgV05E
UFJPQyBwcmV2V25kRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHdu
ZCwga1BhcmVudFduZFByb2MpKTsKLSAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5j
LCBod25kLCBtZXNzYWdlLCB3cGFyYW0sIGxwYXJhbSk7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c3Vi
Y2xhc3NXaW5kb3coKQotewotICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBEV09SRCBwcm9jZXNzSWQ7Ci0gICAgRFdPUkQgdGhyZWFkSWQgPSBH
ZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7Ci0gICAgaWYgKHBy
b2Nlc3NJZCAhPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVu
dFRocmVhZElkKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0TGFz
dEVycm9yKDApOwotICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1X
aW5kb3csIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdp
bmRvd1Byb2MpKTsKLSAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0g
RVJST1JfU1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNl
UHJvcGVydHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2V0UHJvcCht
V2luZG93LCBrUGFyZW50V25kUHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFBy
b2MpKTsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6
dW5zdWJjbGFzc1dpbmRvdygpCi17Ci0gICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIHVuLXN1YmNsYXNzCi0gICAgTE9OR19Q
VFIgcGFyZW50V25kRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdp
bmRvdywga1BhcmVudFduZFByb2MpKTsKLQotICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlz
IHN0aWxsIFN1cmZhY2VXaW5kb3dQcm9jLgotICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0
aGVuIGl0IGlzIGxpa2VseSB0aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCi0gICAg
Ly8gaHduZCBhcyB3ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcg
aXRzIEVHTCBjb250ZXh0LiBUaGUKLSAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZp
ZWQgdG8gZWl0aGVyIHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gRUdM
IGNvbnRleHQsIG9yIHRvIHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250
ZXh0LgotICAgIGlmKHBhcmVudFduZEZ1bmMpCi0gICAgewotICAgICAgICBMT05HX1BUUiBwcmV2
V25kRnVuYyA9IFNldFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRX
bmRGdW5jKTsKLSAgICAgICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8
TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgfQotCi0gICAgUmVtb3ZlUHJvcCht
V2luZG93LCBrU3VyZmFjZVByb3BlcnR5KTsKLSAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJl
bnRXbmRQcm9jKTsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotfQotCi1ib29sIFN1
cmZhY2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKLXsKLSAgICBSRUNUIGNsaWVudDsK
LSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEdyb3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBX
ZSBuZWVkIHRvIGdyb3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KLSAgICBpbnQg
Y2xpZW50V2lkdGggPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsKLSAgICBpbnQgY2xpZW50
SGVpZ2h0ID0gY2xpZW50LmJvdHRvbSAtIGNsaWVudC50b3A7Ci0gICAgYm9vbCBzaXplRGlydHkg
PSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQo
KTsKLQotICAgIGlmIChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQotICAgIHsK
LSAgICAgICAgcmVzZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7Ci0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2Uo
KSkgPT0gdGhpcykKLSAgICAgICAgewotICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1
cnJlbnRDb250ZXh0KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNw
bGF5KCkpLCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLURXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChF
R0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgc3dpdGNoKGludGVydmFsKQotICAgIHsKLSAgICAgIGNh
c2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAgY2FzZSAx
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJldHVybiBE
M0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfVEhSRUU7Ci0gICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X0ZPVVI7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6c3dhcCgp
Ci17Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2Nl
bmUoKTsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHggPCAw
IHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFt
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMgbm90IGNs
ZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5
LT5lbmRTY2VuZSgpOwotCi0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVp
Z2h0IC0geQotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmVjdC5ib3R0b20gPSBtSGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3Qu
bGVmdCA9PSByZWN0LnJpZ2h0IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDAp
OwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNF
TE9TVCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VSRU1PVkVEKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NP
TlRFWFRfTE9TVCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBj
b25zdAotewotICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWln
aHQoKSBjb25zdAotewotICAgIHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6
aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5k
ZXJUYXJnZXQoKQotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJl
bmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7
Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRk
UmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLUlEaXJlY3Qz
RFRleHR1cmU5ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9m
ZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi12b2lkIFN1
cmZhY2U6OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1Td2Fw
SW50ZXJ2YWwgPT0gaW50ZXJ2YWwpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3Rk
OjptYXgobVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKLSAg
ICBtU3dhcEludGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1h
eFN3YXBJbnRlcnZhbCgpKTsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2
YWwobVN3YXBJbnRlcnZhbCk7Ci0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKLX0K
LQotRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmVGb3JtYXQ7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdl
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlVGFyZ2V0OwotfQotCi12b2lkIFN1cmZh
Y2U6OnNldEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIG1UZXh0
dXJlID0gdGV4dHVyZTsKLX0KLQotZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0
dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUQzREZPUk1BVCBTdXJm
YWNlOjpnZXRGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFy
Z2V0Rm9ybWF0OwotfQotfQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gU3VyZmFjZS5j
cHA6IEltcGxlbWVudHMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJh
d2luZyBzdXJmYWNlDQorLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGlu
Y2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLg0KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLg0KKw0K
KyNpbmNsdWRlIDx0Y2hhci5oPg0KKw0KKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIg0KKw0K
KyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUu
aCINCisNCisjaW5jbHVkZSAibGliRUdML21haW4uaCINCisjaW5jbHVkZSAibGliRUdML0Rpc3Bs
YXkuaCINCisNCisjaW5jbHVkZSA8ZHdtYXBpLmg+DQorDQorbmFtZXNwYWNlIGVnbA0KK3sNCisN
CituYW1lc3BhY2UNCit7DQorY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09S
RCgweDAwLCAweDA2KTsNCitjb25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgw
MSwgMHgwNik7DQorDQorLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lz
dGVtIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBvcmRlcmluZw0KKy8vIGNvbXBhcmlzb24uDQor
aW50IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQ0KK3sNCisgICAgRFdPUkQgdmVyc2lvbiA9IEdl
dFZlcnNpb24oKTsNCisgICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lv
bikpOw0KKyAgICBpbnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7DQor
ICAgIHJldHVybiBNQUtFV09SRChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7DQorfQ0KK30N
CisNCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29u
ZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIA0KKyAgICA6
IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBv
c3RTdWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkNCit7DQorICAgIG1T
d2FwQ2hhaW4gPSBOVUxMOw0KKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOw0KKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgbU9mZnNjcmVl
blRleHR1cmUgPSBOVUxMOw0KKyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBtVGV4dHVy
ZSA9IE5VTEw7DQorICAgIG1UZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7DQorICAgIG1U
ZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlv
ID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVy
bWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xf
QkFDS19CVUZGRVI7DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsN
CisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorDQor
ICAgIHN1YmNsYXNzV2luZG93KCk7DQorfQ0KKw0KK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAq
ZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50
IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4
dHVyZVR5cGUpDQorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25m
aWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhl
aWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpDQorew0KKyAg
ICBtU3dhcENoYWluID0gTlVMTDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVw
dGhTdGVuY2lsID0gTlVMTDsNCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZz
Y3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisg
ICAgbVRleHR1cmUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7
DQorICAgIG1UZXh0dXJlVGFyZ2V0ID0gdGV4dHVyZVR5cGU7DQorDQorICAgIG1QaXhlbEFzcGVj
dFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6
IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIg
PSBFR0xfQkFDS19CVUZGRVI7DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNF
UlZFRDsNCisgICAgbVN3YXBJbnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7
DQorfQ0KKw0KK1N1cmZhY2U6On5TdXJmYWNlKCkNCit7DQorICAgIHVuc3ViY2xhc3NXaW5kb3co
KTsNCisgICAgcmVsZWFzZSgpOw0KK30NCisNCitib29sIFN1cmZhY2U6OmluaXRpYWxpemUoKQ0K
K3sNCisgICAgQVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURl
cHRoU3RlbmNpbCk7DQorDQorICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkNCisgICAgICByZXR1
cm4gZmFsc2U7DQorDQorICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMg
d2luZG93LCBpZiB3ZSBhcmUgY29tcG9zaXRlZCwNCisgICAgLy8gdG8gbWluaW1pemUgdGhlIGFt
b3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvDQorICAgIC8v
IHByZXNlbnQgYW5kIHRoZSBhY3R1YWwgc2NyZWVuLg0KKyAgICBpZiAobVdpbmRvdyAmJiAoZ2V0
Q29tcGFyYWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7DQorICAgICAg
Qk9PTCBpc0NvbXBvc2l0ZWQ7DQorICAgICAgSFJFU1VMVCByZXN1bHQgPSBEd21Jc0NvbXBvc2l0
aW9uRW5hYmxlZCgmaXNDb21wb3NpdGVkKTsNCisgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkg
JiYgaXNDb21wb3NpdGVkKSB7DQorICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNl
bnRQYXJhbXM7DQorICAgICAgICBtZW1zZXQoJnByZXNlbnRQYXJhbXMsIDAsIHNpemVvZihwcmVz
ZW50UGFyYW1zKSk7DQorICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01f
UFJFU0VOVF9QQVJBTUVURVJTKTsNCisgICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7
DQorDQorICAgICAgICByZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAm
cHJlc2VudFBhcmFtcyk7DQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICAg
IEVSUigiVW5hYmxlIHRvIHNldCBwcmVzZW50IHBhcmFtZXRlcnM6IDB4JTA4WCIsIHJlc3VsdCk7
DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFN1
cmZhY2U6OnJlbGVhc2UoKQ0KK3sNCisgICAgaWYgKG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAg
ICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsNCisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0K
KyAgICB9DQorDQorICAgIGlmIChtQmFja0J1ZmZlcikNCisgICAgew0KKyAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsNCisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0K
Kw0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOw0KKyAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisN
CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICB9DQorDQor
ICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRl
eHR1cmUtPlJlbGVhc2UoKTsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisg
ICAgfQ0KKw0KKyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5y
ZWxlYXNlVGV4SW1hZ2UoKTsNCisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0K
KyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOw0KK30NCisNCitib29sIFN1cmZhY2U6OnJlc2V0U3dh
cENoYWluKCkNCit7DQorICAgIGlmICghbVdpbmRvdykNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IHJlc2V0U3dhcENoYWluKG1XaWR0aCwgbUhlaWdodCk7DQorICAgIH0NCisNCisgICAgUkVDVCB3
aW5kb3dSZWN0Ow0KKyAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3
aW5kb3dSZWN0KSkNCisgICAgew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisNCisgICAgICAg
IEVSUigiQ291bGQgbm90IHJldHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOw0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXNldFN3YXBDaGFpbih3
aW5kb3dSZWN0LnJpZ2h0IC0gd2luZG93UmVjdC5sZWZ0LCB3aW5kb3dSZWN0LmJvdHRvbSAtIHdp
bmRvd1JlY3QudG9wKTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQg
YmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkNCit7DQorICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgaWYgKGRl
dmljZSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisN
CisgICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBt
ZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcw0KKyAgICAvLyBiZWZvcmUgcmVhbGxvY2F0
aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4NCisg
ICAgZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsNCisNCisgICAgRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9Ow0KKyAgICBIUkVTVUxUIHJlc3VsdDsN
CisNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25m
aWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7DQorICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQg
PSAxIGV2ZW4gd2hlbiB3ZSB1c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguDQorICAgIC8vIFdlIGRv
IHRoaXMgYmVjYXVzZSBEaXJlY3RYIGRvY3MgYXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0
IHRoaXMgdG8gMQ0KKyAgICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwg
c28gd2Ugc3BlY3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlzDQorICAgIC8vIGZvcmNpbmcgaXQgdG8g
MiB3aXRob3V0IHRlbGxpbmcgdXMsIG9yIGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0DQor
ICAgIC8vIGJlaGluZCB0aGUgc2NlbmVzIGtub3dpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIG1vcmUu
DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7DQorICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9y
bWF0Ow0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFM
U0U7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsNCisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRvd0hhbmRsZSgpOw0KKyAgICBwcmVzZW50UGFy
YW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBVbmltcGxlbWVudGVkDQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9
IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQNCisgICAgcHJl
c2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFsOw0K
KyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJE
Ow0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7DQorICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsNCisgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7DQorDQorICAg
IC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUg
bmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQ0KKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBz
dGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLg0K
KyAgICBpZiAobVN3YXBDaGFpbikNCisgICAgew0KKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1C
YWNrQnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVu
VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsN
CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bURlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgp
Ow0KKyAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNoYXJl
SGFuZGxlID0gTlVMTDsNCisgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBp
ZiAoIW1XaW5kb3cgJiYgbURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpDQorICAgIHsN
CisgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7DQorICAgIH0NCisNCisgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0Vf
UkVOREVSVEFSR0VULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVl
blRleHR1cmUsIHBTaGFyZUhhbmRsZSk7DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAg
ew0KKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhs
WCIsIHJlc3VsdCk7DQorICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICBpZihpc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5u
b3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBmYWxzZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7DQorDQorICAgIHJl
c3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJn
ZXQpOw0KKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBpZiAob2xkUmVu
ZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBSRUNUIHJlY3QgPQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIDAsIDAsDQorICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0DQorICAgICAgICB9
Ow0KKw0KKyAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
Y3QucmlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7DQorICAgICAgICB9
DQorDQorICAgICAgICBpZiAocmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7DQorICAgICAg
ICB9DQorDQorICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRh
cmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7DQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOw0KKw0KKyAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0N
CisNCisgICAgaWYgKG1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWlu
KTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0
ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsNCisNCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxY
IiwgcmVzdWx0KTsNCisgICAgICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYo
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsN
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICByZXN1bHQgPSBtU3dhcENo
YWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZm
ZXIpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAg
ICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikNCisg
ICAgew0KKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNl
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVz
ZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVR
dWFsaXR5LCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVz
dWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhY
IiwgcmVzdWx0KTsNCisgICAgICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYo
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsN
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgbVdpZHRoID0gcHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOw0KKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5
ID0gZmFsc2U7DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFN1cmZhY2U6OnN3YXBS
ZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQ0KK3sN
CisgICAgaWYgKCFtU3dhcENoYWluKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAoeCArIHdpZHRoID4gbVdpZHRoKQ0KKyAgICB7DQorICAgICAgICB3
aWR0aCA9IG1XaWR0aCAtIHg7DQorICAgIH0NCisNCisgICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVp
Z2h0KQ0KKyAgICB7DQorICAgICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsNCisgICAgfQ0KKw0K
KyAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURp
c3BsYXktPmdldERldmljZSgpOw0KKw0KKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVy
YXRpb25zDQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJf
RkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RG
SUxMX1NPTElEKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RF
TkFCTEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VM
TE1PREUsIEQzRENVTExfTk9ORSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NMSVBQTEFORUVOQUJMRSwgMCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJ
VEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRF
RU5BQkxFX1JFRCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRF
RU5BQkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NP
UlRFU1RFTkFCTEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsN
CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorDQorICAgIGRldmljZS0+U2V0
UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVmZmVyKTsNCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKE5VTEwpOw0KKw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVl
blRleHR1cmUpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19D
T0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7DQorICAgIGRldmljZS0+
U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsN
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRF
WEZfUE9JTlQpOw0KKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJ
TFRFUiwgRDNEVEVYRl9QT0lOVCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOw0KKyAgICBk
ZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOw0KKw0KKyAgICBEM0RW
SUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsN
CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOw0KKw0KKyAgICBmbG9hdCB4MSA9
IHggLSAwLjVmOw0KKyAgICBmbG9hdCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVm
Ow0KKyAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsNCisgICAgZmxvYXQgeTIgPSAo
bUhlaWdodCAtIHkpIC0gMC41ZjsNCisNCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRo
KTsNCisgICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7DQorICAgIGZsb2F0IHUyID0g
KHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOw0KKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0
KSAvIGZsb2F0KG1IZWlnaHQpOw0KKw0KKyAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEs
IDAuMGYsIDEuMGYsIHUxLCB2Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwg
MC4wZiwgMS4wZiwgdTIsIHYyfSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAw
LjBmLCAxLjBmLCB1MiwgdjF9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MSwgeTIsIDAu
MGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdg0KKw0KKyAgICBtRGlz
cGxheS0+c3RhcnRTY2VuZSgpOw0KKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9U
UklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOw0KKyAgICBtRGlzcGxheS0+
ZW5kU2NlbmUoKTsNCisNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOw0KKw0KKyAg
ICBSRUNUIHJlY3QgPQ0KKyAgICB7DQorICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwN
CisgICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkNCisgICAgfTsNCisNCisgICAgSFJFU1VM
VCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwg
MCk7DQorDQorICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRl
eHQqPihnbEdldEN1cnJlbnRDb250ZXh0KCkpOw0KKyAgICBpZiAoY29udGV4dCkNCisgICAgew0K
KyAgICAgICAgY29udGV4dC0+bWFya0FsbFN0YXRlRGlydHkoKTsNCisgICAgfQ0KKw0KKyAgICBp
ZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXkt
Pm5vdGlmeURldmljZUxvc3QoKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0K
KyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAg
fQ0KKw0KKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBjaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbigpOw0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorSFdORCBT
dXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQ0KK3sNCisgICAgcmV0dXJuIG1XaW5kb3c7DQorfQ0K
Kw0KKw0KKyNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIi
KQ0KKyNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFBy
b2MiKQ0KKw0KK3N0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9jKEhXTkQg
aHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQ0KK3sNCisg
IGlmIChtZXNzYWdlID09IFdNX1NJWkUpDQorICB7DQorICAgICAgU3VyZmFjZSogc3VyZiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkp
Ow0KKyAgICAgIGlmKHN1cmYpDQorICAgICAgew0KKyAgICAgICAgICBzdXJmLT5jaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbigpOw0KKyAgICAgIH0NCisgIH0NCisgIFdORFBST0MgcHJldlduZEZ1
bmMgPSByZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQ
cm9jKSk7DQorICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocHJldlduZEZ1bmMsIGh3bmQsIG1lc3Nh
Z2UsIHdwYXJhbSwgbHBhcmFtKTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzdWJjbGFzc1dpbmRv
dygpDQorew0KKyAgICBpZiAoIW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisg
ICAgfQ0KKw0KKyAgICBEV09SRCBwcm9jZXNzSWQ7DQorICAgIERXT1JEIHRocmVhZElkID0gR2V0
V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOw0KKyAgICBpZiAocHJv
Y2Vzc0lkICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSB8fCB0aHJlYWRJZCAhPSBHZXRDdXJyZW50
VGhyZWFkSWQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFNl
dExhc3RFcnJvcigwKTsNCisgICAgTE9OR19QVFIgb2xkV25kUHJvYyA9IFNldFdpbmRvd0xvbmdQ
dHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJm
YWNlV2luZG93UHJvYykpOw0KKyAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9y
KCkgIT0gRVJST1JfU1VDQ0VTUykNCisgICAgew0KKyAgICAgICAgbVdpbmRvd1N1YmNsYXNzZWQg
PSBmYWxzZTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRQcm9wKG1XaW5k
b3csIGtTdXJmYWNlUHJvcGVydHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7DQor
ICAgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFO
RExFPihvbGRXbmRQcm9jKSk7DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsNCit9DQor
DQordm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkNCit7DQorICAgIGlmKCFtV2luZG93
U3ViY2xhc3NlZCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIC8v
IHVuLXN1YmNsYXNzDQorICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9j
YXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7DQorDQorICAg
IC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5kb3dQcm9jLg0KKyAg
ICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0
aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQ0KKyAgICAvLyBod25kIGFzIHdlbGwgYW5kIGRpZCBub3Qg
dW5zdWJjbGFzcyBiZWZvcmUgZGVzdHJveWluZyBpdHMgRUdMIGNvbnRleHQuIFRoZQ0KKyAgICAv
LyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNsYXNzIGJlZm9y
ZSBpbml0aWFsaXppbmcgdGhlDQorICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNz
IGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4NCisgICAgaWYocGFyZW50V25kRnVu
YykNCisgICAgew0KKyAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25n
UHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7DQorICAgICAgICBBU1NF
UlQocHJldlduZEZ1bmMgPT0gcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRv
d1Byb2MpKTsNCisgICAgfQ0KKw0KKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJv
cGVydHkpOw0KKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsNCisgICAg
bVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpjaGVja0Zv
ck91dE9mRGF0ZVN3YXBDaGFpbigpDQorew0KKyAgICBSRUNUIGNsaWVudDsNCisgICAgaWYgKCFH
ZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkNCisgICAgew0KKyAgICAg
ICAgQVNTRVJUKGZhbHNlKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAg
ICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVl
ZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uDQorICAgIGludCBjbGll
bnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0Ow0KKyAgICBpbnQgY2xpZW50SGVp
Z2h0ID0gY2xpZW50LmJvdHRvbSAtIGNsaWVudC50b3A7DQorICAgIGJvb2wgc2l6ZURpcnR5ID0g
Y2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7
DQorDQorICAgIGlmIChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQ0KKyAgICB7
DQorICAgICAgICByZXNldFN3YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsNCisg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZh
Y2UoKSkgPT0gdGhpcykNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGds
R2V0Q3VycmVudENvbnRleHQoKSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVu
dERpc3BsYXkoKSksIHRoaXMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgIH0NCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitEV09SRCBTdXJmYWNlOjpjb252
ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQ0KK3sNCisgICAgc3dpdGNoKGludGVydmFsKQ0K
KyAgICB7DQorICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElB
VEU7DQorICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7DQorICAg
ICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087DQorICAgICAgY2FzZSAz
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRTsNCisgICAgICBjYXNlIDQ6IHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7DQorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOw0K
K30NCisNCitib29sIFN1cmZhY2U6OnN3YXAoKQ0KK3sNCisgICAgcmV0dXJuIHN3YXBSZWN0KDAs
IDAsIG1XaWR0aCwgbUhlaWdodCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cG9zdFN1YkJ1ZmZl
cihFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQor
ICAgIGlmICghbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpDQorICAgIHsNCisgICAgICAgIC8vIFNw
ZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLg0KKyAgICAg
ICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsNCit9DQorDQorRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBtV2lkdGg7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRI
ZWlnaHQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1IZWlnaHQ7DQorfQ0KKw0KK0VHTGludCBT
dXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOw0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpDQorew0K
KyAgICBpZiAobVJlbmRlclRhcmdldCkNCisgICAgew0KKyAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7DQorfQ0KKw0K
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6
Z2V0RGVwdGhTdGVuY2lsKCkNCit7DQorICAgIGlmIChtRGVwdGhTdGVuY2lsKQ0KKyAgICB7DQor
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsNCit9DQorDQorSURpcmVjdDNEVGV4dHVyZTkgKlN1cmZhY2U6OmdldE9m
ZnNjcmVlblRleHR1cmUoKQ0KK3sNCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQ0KKyAgICB7
DQorICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAg
cmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnNldFN3YXBJ
bnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpDQorew0KKyAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBp
bnRlcnZhbCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBt
U3dhcEludGVydmFsID0gaW50ZXJ2YWw7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1heCht
U3dhcEludGVydmFsLCBtRGlzcGxheS0+Z2V0TWluU3dhcEludGVydmFsKCkpOw0KKyAgICBtU3dh
cEludGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJ
bnRlcnZhbCgpKTsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbCht
U3dhcEludGVydmFsKTsNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsNCit9DQor
DQorRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtVGV4dHVyZUZvcm1hdDsNCit9DQorDQorRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJl
VGFyZ2V0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsNCit9DQorDQor
dm9pZCBTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkNCit7
DQorICAgIG1UZXh0dXJlID0gdGV4dHVyZTsNCit9DQorDQorZ2w6OlRleHR1cmUyRCAqU3VyZmFj
ZTo6Z2V0Qm91bmRUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9
DQorDQorRDNERk9STUFUIFN1cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsNCit9DQorfQ0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKaW5kZXggMzUyNjBkZS4uNDBiZDcwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKQEAgLTY5
LDYgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwogICAg
IElEaXJlY3QzRFN3YXBDaGFpbjkgKm1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
Km1CYWNrQnVmZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwogICAg
IElEaXJlY3QzRFN1cmZhY2U5KiBtUmVuZGVyVGFyZ2V0OwogICAgIElEaXJlY3QzRFRleHR1cmU5
KiBtT2Zmc2NyZWVuVGV4dHVyZTsKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN1YmNsYXNzV2luZG93KCk7CiAgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CiAgICAgYm9v
bCByZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCk7CisgICAgYm9vbCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCk7CiAgICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQg
aW50ZXJ2YWwpOwogCiAgICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRv
dyB0aGF0IHRoZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCmluZGV4IDRiN2Y5ZTEuLjUwODlkMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKQEAgLTExMDgs
NiArMTEwOCwxMSBAQCBFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaQogCiAgICAgdHJ5CiAgICAgewor
ICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCiAgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CiAgICAgICAgIGVnbDo6U3VyZmFjZSAqZWds
U3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAppbmRleCA2
NmNkNWMwLi4xYjQ2NjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAKQEAgLTEsNDI3NiArMSw0MzM5IEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBDb250ZXh0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3Ms
IG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJh
dGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250
ZXh0LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0ZyYW1lQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvUXVlcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0
dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCIKLQotI3VuZGVmIG5lYXIKLSN1bmRlZiBm
YXIKLQotbmFtZXNwYWNlIGdsCi17Ci1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVz
ZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtQ29uZmlnKGNvbmZpZykKLXsKLSAgICBBU1NFUlQo
cm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVkCi0KLSAgICBtRGlzcGxh
eSA9IE5VTEw7Ci0gICAgbURldmljZSA9IE5VTEw7Ci0KLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0
b3Iuc2V0QmFzZUhhbmRsZSgwKTsKLQotICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4w
ZiwgMC4wZik7Ci0KLSAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKLSAgICBtU3Rh
dGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOwotCi0gICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7
Ci0gICAgbVN0YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKLSAgICBtU3RhdGUuZnJvbnRGYWNlID0g
R0xfQ0NXOwotICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGVwdGhG
dW5jID0gR0xfTEVTUzsKLSAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc291
cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9P
TkU7Ci0gICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmRlc3RC
bGVuZEFscGhhID0gR0xfWkVSTzsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZV
TkNfQUREOwotICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAg
ICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAwOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVu
ID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsKLSAgICBtU3RhdGUuYmxlbmRD
b2xvci5hbHBoYSA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7Ci0gICAgbVN0
YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsK
LSAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgbVN0
YXRlLnN0ZW5jaWxCYWNrUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAx
OwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVu
Y2lsRmFpbCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xf
S0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1T
dGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOwotICAg
IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsKLSAgICBtU3RhdGUucG9seWdvbk9m
ZnNldFVuaXRzID0gMC4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFs
c2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgPSAxLjBmOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9
IGZhbHNlOwotICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5kaXRo
ZXIgPSB0cnVlOwotICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7
Ci0gICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7
Ci0KLSAgICBtU3RhdGUubGluZVdpZHRoID0gMS4wZjsKLQotICAgIG1TdGF0ZS52aWV3cG9ydFgg
PSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRo
ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0
ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OwotICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7
Ci0gICAgbVN0YXRlLnpGYXIgPSAxLjBmOwotCi0gICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAg
ICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWct
Pm1EaXNwbGF5TW9kZS5XaWR0aDsKLSAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+
bURpc3BsYXlNb2RlLkhlaWdodDsKLQotICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOwot
ICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7Ci0gICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7Ci0gICAgbVN0YXRl
LmRlcHRoTWFzayA9IHRydWU7Ci0KLSAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCi0gICAg
ewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5h
Z2VyOwotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIo
KTsKLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4
MzoKLSAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9D
VUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsCi0gICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUg
c3RhdGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gICAgLy8g
SW4gb3JkZXIgdGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9z
dCwgdGhleSBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlCi0gICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hv
c2UgbmFtZXMgYXJlIDAuCi0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQobmV3IFRleHR1cmUyRCgw
KSk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsK
LQotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKLSAgICBiaW5kQXJyYXlCdWZmZXIoMCk7
Ci0gICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsKLSAgICBiaW5kVGV4dHVyZUN1YmVNYXAo
MCk7Ci0gICAgYmluZFRleHR1cmUyRCgwKTsKLSAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwot
ICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLQot
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0KLSAgICBtU3RhdGUucGFja0FsaWdubWVu
dCA9IDQ7Ci0gICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tS
ZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7
Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLSAgICBt
TGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLSAgICBtSW52
YWxpZFZhbHVlID0gZmFsc2U7Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBt
T3V0T2ZNZW1vcnkgPSBmYWxzZTsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0g
ZmFsc2U7Ci0KLSAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKLSAgICBtQ29udGV4dExvc3Qg
PSBmYWxzZTsKLSAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICBtUmVzZXRTdHJh
dGVneSA9IChub3RpZnlSZXNldHMgPyBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDogR0xf
Tk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCk7Ci0gICAgbVJvYnVzdEFjY2VzcyA9IHJvYnVzdEFj
Y2VzczsKLQotICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0
c0RYVDNUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNl
OwotICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c09jY2x1
c2lvblF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0g
MDsKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAgbU1hc2tlZENsZWFyU2F2ZWRT
dGF0ZSA9IE5VTEw7Ci0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotQ29udGV4dDo6fkNv
bnRleHQoKQotewotICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gIT0gMCkKLSAgICB7Ci0g
ICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9n
cmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIW1GcmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRnJhbWVi
dWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNl
TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCktPmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29u
ZDsKLSAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0
LmJlZ2luKCkpOwotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVS
RV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0g
MDsgc2FtcGxlciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxl
cisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1b
c2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdHlw
ZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAg
IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewot
ICAgICAgICBtU3RhdGUuYWN0aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIG1T
dGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7Ci0KLSAgICBt
VGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVM
TCk7Ci0KLSAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtSW5kZXhE
YXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUJsaXQ7Ci0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwot
Ci0gICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCi0gICAgewotICAgICAgICBtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdl
ci0+cmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIG1EaXNwbGF5ID0gZGlz
cGxheTsKLSAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKCFt
SGFzQmVlbkN1cnJlbnQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ2FwcyA9IG1EaXNwbGF5LT5n
ZXREZXZpY2VDYXBzKCk7Ci0KLSAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRl
eERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9
IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtQmxpdCA9IG5l
dyBCbGl0KHRoaXMpOwotCi0gICAgICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VD
YXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotICAgICAgICBt
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID0gbURpc3BsYXktPmdldFZlcnRleFRleHR1cmVTdXBwb3J0
KCk7Ci0gICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+Z2V0Tm9u
UG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1E
aXNwbGF5LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwotCi0gICAgICAgIG1NYXhUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lk
dGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1N
YXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXhU
ZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMihtTWF4VGV4
dHVyZURpbWVuc2lvbikgKyAxOwotICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0l
ZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0l
ZCwgTWF4VGV4dHVyZUxldmVsPSVkIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVEaW1lbnNp
b24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwg
bU1heFRleHR1cmVMZXZlbCk7Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZl
ckZvcm1hdHNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAg
ICAgICAgICAgIEQzREZNVF9YOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0g
ICAgICAgICAgICBEM0RGTVRfRDI0UzgKLSAgICAgICAgfTsKLQotICAgICAgICBpbnQgbWF4ID0g
MDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0
cykgLyBzaXplb2YoRDNERk9STUFUKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29s
ICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyAr
IDFdOwotICAgICAgICAgICAgbURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJC
dWZmZXJGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNh
bXBsZVN1cHBvcnRbcmVuZGVyQnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Owot
Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+
PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxl
QXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTWF4U3VwcG9y
dGVkU2FtcGxlcyA9IG1heDsKLQotICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtRGlz
cGxheS0+Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9u
UXVlcmllcyA9IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKLSAgICAgICAg
bVN1cHBvcnRzRFhUMVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgp
OwotICAgICAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUM1RleHR1
cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5n
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVz
ID0gbURpc3BsYXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAg
ICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0g
bURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0
dXJlU3VwcG9ydCgpOwotCi0gICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VD
YXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKLQotICAgICAgICBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzID0gMDsKLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0g
MjsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0K
LQotICAgICAgICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0gICAgICAgIGluaXRSZW5kZXJlclN0
cmluZygpOwotCi0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgICAgICBtU3RhdGUu
dmlld3BvcnRZID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5n
ZXRXaWR0aCgpOwotICAgICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRI
ZWlnaHQoKTsKLQotICAgICAgICBtU3RhdGUuc2Npc3NvclggPSAwOwotICAgICAgICBtU3RhdGUu
c2Npc3NvclkgPSAwOwotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0
V2lkdGgoKTsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWln
aHQoKTsKLQotICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8v
IFdyYXAgdGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBh
bmQgYXNzaWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgp
OwotCi0gICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1ZmZlcihk
ZWZhdWx0UmVuZGVyVGFyZ2V0KTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNp
bGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7Ci0gICAg
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29s
b3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsKLQotICAgIHNldEZyYW1lYnVm
ZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOwotCi0gICAgaWYgKGRlZmF1bHRSZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVs
ZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi0vLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFn
cywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lgotdm9pZCBD
b250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgdCA9IDA7IHQgPCBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0
dXJlU2VyaWFsUFNbdF0gPSAwOwotICAgIH0KLQotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgdCsrKQotICAgIHsKLSAgICAgICAgbUFw
cGxpZWRUZXh0dXJlU2VyaWFsVlNbdF0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkUHJvZ3Jh
bVNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOwotICAgIG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNl
cmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbElu
aXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAg
ICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGVj
bGFyYXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0eSgpOwotCi0gICAgbUNsZWFyU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGVwdGhTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIG1CbGVuZFN0YXRlRGly
dHkgPSB0cnVlOwotICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVBvbHlnb25P
ZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICBtRHhVbmlmb3Jtc0RpcnR5ID0g
dHJ1ZTsKLSAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRl
eHQ6Om1hcmtDb250ZXh0TG9zdCgpCi17Ci0gICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCi0gICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX1VOS05P
V05fQ09OVEVYVF9SRVNFVF9FWFQ7Ci0gICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsKLX0KLQotYm9v
bCBDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkKLXsKLSAgICByZXR1cm4gbUNvbnRleHRMb3N0Owot
fQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwg
ZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5y
ZWQgPSByZWQ7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwotICAg
IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5hbHBoYSA9IGFscGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgo
ZmxvYXQgZGVwdGgpCi17Ci0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwotfQot
Ci12b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsKLSAgICBtU3Rh
dGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1
bGxGYWNlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJs
ZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwotICAgICAgICBt
Q3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0N1bGxG
YWNlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAobVN0YXRl
LmN1bGxNb2RlICE9IG1vZGUpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2Rl
OwotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3RhdGUuZnJvbnRG
YWNlICE9IGZyb250KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250Owot
ICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0
ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsK
LSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRl
eHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kZXB0
aFRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAgIHsKLSAgICAg
ICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQg
ek5lYXIsIGZsb2F0IHpGYXIpCi17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7Ci0gICAgbVN0
YXRlLnpGYXIgPSB6RmFyOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBt
U3RhdGUuYmxlbmQgPSBlbmFibGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtU3RhdGUuYmxlbmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3Jz
KEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdM
ZW51bSBkZXN0QWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3Vy
Y2VSR0IgfHwKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEg
fHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0gICAgICAgIG1T
dGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUu
c291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0Ig
PSBkZXN0UkdCOwotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhh
OwotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0gICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVu
ZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQot
ewotICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAgICAgIG1TdGF0
ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9y
LmJsdWUgIT0gYmx1ZSB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBo
YSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKLSAgICAgICAg
bVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29s
b3IuYmx1ZSA9IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7
Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1
YXRpb24pCi17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9u
IHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOwotICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
IT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7
Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENv
bnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRl
LnN0ZW5jaWxUZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVt
IHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCi17Ci0g
ICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAgICAgICBtU3Rh
dGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFz
ayAhPSBzdGVuY2lsTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0
ZW5jaWxGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkg
PyBzdGVuY2lsUmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1h
c2s7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdM
aW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewotICAgIGlmICht
U3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKLSAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKLSAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0
YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAgICAgICAgbVN0
ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3Rl
bmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotewotICAgIGlm
IChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCi0g
ICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dy
aXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBH
TGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykK
LXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAot
ICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBh
c3MpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKLSAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQ
YXNzOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFp
bCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzcykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2ls
QmFja0ZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBt
U3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBvbHlnb25PZmZz
ZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNQb2x5Z29u
T2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9m
ZnNldEZpbGw7Ci0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdM
ZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cyAhPSB1bml0cykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0g
ZmFjdG9yOwotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Ci0gICAg
ICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENv
bnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYg
KG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxl
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQWxw
aGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9v
bCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAg
IG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNT
YW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xj
bGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSAhPSB2YWx1ZSB8fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQg
IT0gaW52ZXJ0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2
YWx1ZTsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OwotICAg
ICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JU
ZXN0ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFi
bGVkOwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9v
bCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dGF0ZS5zY2lzc29yVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFi
bGVkKQotewotICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6OnNldExpbmVX
aWR0aChHTGZsb2F0IHdpZHRoKQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCi17Ci0g
ICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3Rh
dGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7Ci0gICAgLy8gVE9ETzogUHJv
cGFnYXRlIHRoZSBoaW50IHRvIHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3cml0ZQotICAg
IC8vIGRkeCwgZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50Lgot
ICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRv
IGlnbm9yZSBoaW50LgotfQotCi12b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIG1TdGF0
ZS52aWV3cG9ydFggPSB4OwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OwotICAgIG1TdGF0ZS52
aWV3cG9ydFdpZHRoID0gd2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0
OwotfQotCi12b2lkIENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29y
WCAhPSB4IHx8IG1TdGF0ZS5zY2lzc29yWSAhPSB5IHx8IAotICAgICAgICBtU3RhdGUuc2Npc3Nv
cldpZHRoICE9IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IHg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9
IHk7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9v
bCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIGlmIChtU3RhdGUuY29sb3JN
YXNrUmVkICE9IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKLSAgICAg
ICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEg
IT0gYWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOwotICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmNvbG9y
TWFza0JsdWUgPSBibHVlOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsK
LSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0RGVwdGhNYXNrKGJvb2wgbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAh
PSBtYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7Ci0gICAgICAg
IG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEFj
dGl2ZVNhbXBsZXIodW5zaWduZWQgaW50IGFjdGl2ZSkKLXsKLSAgICBtU3RhdGUuYWN0aXZlU2Ft
cGxlciA9IGFjdGl2ZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7Ci19Ci0K
LUdMdWludCBDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAg
IHJldHVybiBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0
UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1
ZmZlci5pZCgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBj
b25zdAotewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKLX0KLQotR0x1aW50
IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgUXVl
cnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2Jq
ZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVF
UllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBp
ZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtLCBib29sIGVuYWJsZWQpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVt
LCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3Jt
YWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlk
ZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKLX0KLQotY29uc3Qgdm9p
ZCAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVt
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bVBvaW50ZXI7Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRW
ZXJ0ZXhBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsK
LX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsK
LSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4
dDo6Z2V0UGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxp
Z25tZW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGln
bm1lbnQpCi17Ci0gICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQot
R0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLnVucGFja0FsaWdubWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJz
ZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKQotewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJz
ZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwotfQotCi1ib29sIENvbnRleHQ6OmdldFBhY2tS
ZXZlcnNlUm93T3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgcmV0
dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1HTHVpbnQgQ29udGV4
dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0
ZVByb2dyYW0oKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlw
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOwot
fQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1SZXNv
dXJjZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1l
Ci1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIEdMdWludCBoYW5k
bGUgPSBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GcmFt
ZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLUdM
dWludCBDb250ZXh0OjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GZW5j
ZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBu
ZXcgRmVuY2UobURpc3BsYXkpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJu
cyBhbiB1bnVzZWQgcXVlcnkgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkKLXsK
LSAgICBHTHVpbnQgaGFuZGxlID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0K
LSAgICBtUXVlcnlNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQot
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIGlmICht
UmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFj
aEJ1ZmZlcihidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxl
dGVCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50
IHNoYWRlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAg
IG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgbUNhY2hlZEN1
cnJlbnRQcm9ncmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdM
dWludCB0ZXh0dXJlKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKHRl
eHR1cmUpKQotICAgIHsKLSAgICAgICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0K
LSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lk
IENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAg
IGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAg
ICB7Ci0gICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLSAg
ICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpCi17Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0g
bUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVy
T2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEZy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLQotICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxv
Y2F0b3IucmVsZWFzZShmcmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUg
ZnJhbWVidWZmZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNl
KGZyYW1lYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRmVu
Y2UoR0x1aW50IGZlbmNlKQotewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9
IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsKLQotICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VN
YXAuZW5kKCkpCi0gICAgewotICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShm
ZW5jZU9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZmVuY2VPYmplY3QtPnNlY29uZDsK
LSAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQotewotICAgIFF1ZXJ5TWFwOjppdGVy
YXRvciBxdWVyeU9iamVjdCA9IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsKLSAgICBpZiAocXVlcnlP
YmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgbVF1ZXJ5SGFuZGxlQWxs
b2NhdG9yLnJlbGVhc2UocXVlcnlPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHF1ZXJ5T2Jq
ZWN0LT5zZWNvbmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5T2JqZWN0LT5zZWNvbmQt
PnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgICAgICBtUXVlcnlNYXAuZXJhc2UocXVlcnlPYmpl
Y3QpOwotICAgIH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRs
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7Ci19
Ci0KLVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0
dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlcihoYW5kbGUpOwotfQotCi1Qcm9ncmFtICpD
b250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJj
ZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRUZXh0dXJlKGhhbmRsZSk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVy
YnVmZmVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVh
ZEZyYW1lYnVmZmVyKCkKLXsKLSAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRG
cmFtZWJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZm
ZXIoKQotewotICAgIHJldHVybiBtQm91bmREcmF3RnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUu
YXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0Ojpi
aW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQpOwotCi0gICAg
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5z
ZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVD
dWJlTWFwKEdMdWludCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4
dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV9DVUJFKTsKLQotICAgIG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4
dHVyZSh0ZXh0dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZl
cikpCi0gICAgewotICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZy
YW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1l
YnVmZmVyOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAg
IHsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZl
cigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsK
LQotICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZm
ZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9u
KHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJi
dWZmZXIocmVuZGVyYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSkKLXsKLSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtOwotICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAg
ICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBv
bmx5IGdldHMgZmxhZ2dlZC4KLQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKLSAg
ICB7Ci0gICAgICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNl
TWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOwotICAgICAgICBtQ2FjaGVkQ3VycmVu
dFByb2dyYW0gPSBOVUxMOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLQotICAg
ICAgICBpZiAobmV3UHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3UHJvZ3JhbS0+
YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRQcm9ncmFtKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgcXVlcnkpCi17Ci0gICAgLy8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElm
IEJlZ2luUXVlcnlFWFQgaXMgY2FsbGVkIHdpdGggYW4gPGlkPiAgCi0gICAgLy8gb2YgemVybywg
aWYgdGhlIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgPHRhcmdldD4gaXMgbm9uLXplcm8g
KGZvciB0aGUgIAotICAgIC8vIHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5Z
X1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsIGlmICAKLSAgICAvLyB0aGUgYWN0aXZl
IHF1ZXJ5IGZvciBlaXRoZXIgdGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFt
ZSBvZiBhbiAKLSAgICAvLyBleGlzdGluZyBxdWVyeSBvYmplY3Qgd2hvc2UgdHlwZSBkb2VzIG5v
dCBtYXRjaCA8dGFyZ2V0Piwgb3IgaWYgPGlkPiBpcyB0aGUKLSAgICAvLyBhY3RpdmUgcXVlcnkg
b2JqZWN0IG5hbWUgZm9yIGFueSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJ
T04gaXMKLSAgICAvLyBnZW5lcmF0ZWQuCi0KLSAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmll
cyBhcmUgYWN0aXZlCi0gICAgLy8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lv
biBhcmUgc3VwcG9ydGVkLCB3ZSB3aWxsIG5lZWQgdG8gY2hlY2sKLSAgICAvLyBzZXBhcmF0ZWx5
IHRoYXQ6Ci0gICAgLy8gICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJl
bnQgYWN0aXZlIHF1ZXJ5IGZvciBhbnkgdGFyZ2V0L3R5cGUKLSAgICAvLyAgICBiKSBUaGVyZSBh
cmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhl
IGNhc2UKLSAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKLSAgICAvLyAgICAgICBubyBxdWVy
eSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVy
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsK
LSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5
LCB0cnVlLCB0YXJnZXQpOwotCi0gICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3
aXRoIGdsR2VuUXVlcmllcwotICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIGNoZWNr
IGZvciB0eXBlIG1pc21hdGNoCi0gICAgaWYgKHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkgIT0gdGFy
Z2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0
Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlPYmplY3QpOwotCi0gICAg
Ly8gYmVnaW4gcXVlcnkKLSAgICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKLX0KLQotdm9pZCBDb250
ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQotewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLQot
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJU
KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVj
dCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAocXVlcnlPYmpl
Y3QgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgcXVlcnlPYmplY3QtPmVuZCgpOwotCi0gICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZl
ck1hcFswXTsKLSAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci0gICAgaWYgKG1TdGF0
ZS5kcmF3RnJhbWVidWZmZXIgPT0gMCkKLSAgICB7Ci0gICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1
ZmZlciA9IGJ1ZmZlcjsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVy
YnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOwot
ICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwotfQotCi1G
cmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkK
LXsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZm
ZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZl
ck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0K
LUZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZl
bmNlTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBp
ZiAoZmVuY2UgPT0gbUZlbmNlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmZW5jZS0+c2Vjb25kOwot
ICAgIH0KLX0KLQotUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUs
IGJvb2wgY3JlYXRlLCBHTGVudW0gdHlwZSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVl
cnkgPSBtUXVlcnlNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1h
cC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7Ci0gICAg
ICAgICAgICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcXVlcnktPnNlY29uZDsKLSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLUJ1
ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0
Q3VycmVudFByb2dyYW0oKQotewotICAgIGlmICghbUNhY2hlZEN1cnJlbnRQcm9ncmFtKQotICAg
IHsKLSAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0
UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgIH0KLSAgICByZXR1cm4gbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtOwotfQotCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgp
Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJl
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7Ci19Ci0KLVRleHR1cmVDdWJlTWFw
ICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRleHR1cmVDdWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIs
IFRFWFRVUkVfQ1VCRSkpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVy
ZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBHTHVpbnQg
dGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKLQotICAg
IGlmICh0ZXhpZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50
IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsK
LSAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8u
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW3R5cGVdW3NhbXBsZXJdLmdldCgpOwotfQotCi1ib29sIENvbnRleHQ6OmdldEJvb2xlYW52
KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpCi17Ci0gICAgc3dpdGNoIChwbmFtZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJhbXMg
PSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3Zl
cmFnZUludmVydDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcGFyYW1zWzBd
ID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9y
TWFza0dyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKLSAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxs
OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFH
RTogICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lT
U09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1
c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENvbnRleHQ6OmdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAg
ICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGlu
dGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3Rv
cmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMg
bmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBB
cyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBz
aG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLgotICAg
IHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VWYWx1ZTsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxV
RTogICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUu
cG9seWdvbk9mZnNldEZhY3RvcjsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9VTklUUzogICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzOyAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFt
c1swXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNb
MV0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBd
ID0gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9
IHN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01B
WF9TTTMgOiBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0
YXRlLnpOZWFyOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBwYXJhbXNbMF0g
PSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRl
LmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZh
bHVlLmFscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0g
ICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKLSAgICAgICAgcGFyYW1z
WzFdID0gbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0
ZS5ibGVuZENvbG9yLmJsdWU7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9y
LmFscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRJ
bnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5v
dGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0
SW50ZWdlcnYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBh
IGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0g
ICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291
bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1h
a2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5k
IGl0IGluIAotICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4KLSAgICBzd2l0Y2ggKHBuYW1lKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGds
OjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZh
cnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cygpOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTOiAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKTsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAg
ICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFy
YW1zID0gZ2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRN
YXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9O
VU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5B
UllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRl
ZCAqLyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7
Ci0gICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cg
ZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNh
c2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUu
ZHJhd0ZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRUFE
X0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVi
dWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9C
SU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5w
YWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRU5FUkFU
RV9NSVBNQVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1h
cEhpbnQ7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZh
dGl2ZUhpbnQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVu
Y2lsTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19GVU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVu
YzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjog
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2s7ICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2ls
UGFzc0RlcHRoUGFzczsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQ
VEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVu
ZEFscGhhOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1dy
aXRlbWFzazsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFM
VUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAotICAgICAgICBwYXJhbXNbMF0gPSBt
TnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1NBTVBMRVNfQU5HTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgbWF4
U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsKLSAgICAgICAgICAgIGlmIChtYXhT
YW1wbGVzICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1h
eFNhbXBsZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAg
ICAgICAgICAgICAgICAgCi0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIo
KTsKLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRV9CVUZGRVJTOgotICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNh
bXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoZ2V0TWF4
aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
KTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgICAgIHBh
cmFtc1sxXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1
cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklFV1BPUlQ6Ci0g
ICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7Ci0gICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS52aWV3cG9ydFk7Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdp
ZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLnNjaXNzb3JYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7Ci0g
ICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgIHBhcmFtc1sz
XSA9IG1TdGF0ZS5zY2lzc29ySGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
Q1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1v
ZGU7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdMX0dSRUVO
X0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQSEFfQklU
UzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29s
b3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAgICAgICAg
aWYgKGNvbG9yYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAo
cG5hbWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURf
QklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVf
QklUUzogICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXIt
PmdldEFscGhhU2l6ZSgpOyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0RFUFRIX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7
Ci0KLSAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAg
IGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNp
emUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUu
YWN0aXZlU2FtcGxlcl0uaWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVy
XS5pZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVNFVF9O
T1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRl
Z3k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldFF1ZXJ5
UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpu
dW1QYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVk
IGZvciBERVBUSF9DTEVBUl9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gaXMg
RkxPQVQgcmF0aGVyIHRoYW4gSU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVT
IDIuMCBzcGVjLiBUaGlzIGlzIGR1ZQotICAgIC8vIHRvIHRoZSBmYWN0IHRoYXQgaXQgaXMgc3Rv
cmVkIGludGVybmFsbHkgYXMgYSBmbG9hdCwgYW5kIHNvIHdvdWxkIHJlcXVpcmUgY29udmVyc2lv
bgotICAgIC8vIGlmIHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRo
aXMgY29udmVyc2lvbiBpcyBhbHJlYWR5IGltcGxlbWVudGVkIAotICAgIC8vIGluIHRoZSBjYXNl
IHRoYXQgb25lIGNhbGxzIGdsR2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBz
dGF0ZSB2YXJpYWJsZSwgd2UKLSAgICAvLyBwbGFjZSBERVBUSF9DTEVBUl9WQUxVRSB3aXRoIHRo
ZSBmbG9hdHMuIFRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZwot
ICAgIC8vIGFwcGxpY2F0aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAg
KnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0czsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdM
X0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICBjYXNlIEdMX01B
WF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNU
T1JTOgotICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAg
ICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9OVU1f
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOgotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBH
TF9SRU5ERVJCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOgot
ICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNF
X1JPV19PUkRFUl9BTkdMRToKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAgICAg
IGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAg
IGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2Fz
ZSBHTF9BTFBIQV9CSVRTOgotICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JJVFM6Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9GUk9OVF9G
QUNFOgotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9GVU5DOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfUkVGOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQ
VEhfUEFTUzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVG
OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfUEFTUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAgY2FzZSBH
TF9CTEVORF9EU1RfUkdCOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0gICAgICBj
YXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
QUxQSEE6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OgotICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9TSVpFOgotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAg
Y2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgIGNh
c2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5E
SU5HXzJEOgotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICBj
YXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAg
ICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BP
UlRfRElNUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAg
ICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfVklFV1BPUlQ6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgotICAgICAgICB7Ci0g
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Owot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6
Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICBjYXNlIEdMX0RF
UFRIX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAv
LyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLAotICAg
ICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0cmll
dmVkIHRocm91Z2ggdGhlIEdldHtUeXBlfXYgcXVlcmllcy4KLSAgICAgIGNhc2UgR0xfU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVk
IGhlcmUgYXMgYm9vbC1uYXR1cmFsCi0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToKLSAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6Ci0g
ICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6Ci0gICAgICBjYXNlIEdMX0JMRU5EOgotICAgICAgY2Fz
ZSBHTF9ESVRIRVI6Ci0gICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xP
Ul9XUklURU1BU0s6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKLSAg
ICAgICAgICAgICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6Ci0gICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX1VOSVRTOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6Ci0gICAg
ICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgot
ICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
SUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFOgotICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgewotICAgICAgICAg
ICAgKnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAg
ICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0g
R0xfRkxPQVQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJm
YWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQKLS8vIHNj
aXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotYm9vbCBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQotewotICAgIEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFm
cmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBib29s
IHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFy
Z2V0U2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOwot
ICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwp
Ci0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVz
dCBiZSBsb3N0Ci0gICAgICAgIH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAs
IHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVu
ZGVyVGFyZ2V0U2VyaWFsOwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBT
Y2lzc29yIGFyZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhp
cyBpcyBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICAgICAgcmVu
ZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNp
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwo
KTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZl
clNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZm
ZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwotICAg
ICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0
aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJp
YWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsK
LSAgICB9Ci0KLSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZl
clNlcmlhbCB8fAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNp
bGJ1ZmZlclNlcmlhbCB8fAotICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQotICAg
IHsKLSAgICAgICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwp
OwotICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7
Ci0gICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJp
YWw7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5n
ZWQpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQg
bXVzdCBiZSBsb3N0Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZt
UmVuZGVyVGFyZ2V0RGVzYyk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQg
PSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBE
M0RWSUVXUE9SVDkgdmlld3BvcnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRl
LnpOZWFyKTsKLSAgICBmbG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBp
ZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAg
ICAgdmlld3BvcnQuWSA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdl
dERlc2MuV2lkdGg7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodDsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0
Lk1heFogPSAxLjBmOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBSRUNUIHJlY3Qg
PSB0cmFuc2Zvcm1QaXhlbFJlY3QobVN0YXRlLnZpZXdwb3J0WCwgbVN0YXRlLnZpZXdwb3J0WSwg
bVN0YXRlLnZpZXdwb3J0V2lkdGgsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgbVJlbmRlclRhcmdl
dERlc2MuSGVpZ2h0KTsKLSAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKHJlY3QubGVmdCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgIHZp
ZXdwb3J0LlkgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJU
YXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVz
Yy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdw
b3J0LkhlaWdodCA9IGNsYW1wKHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmll
d3BvcnQuWSkpOwotICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7Ci0gICAgICAgIHZpZXdw
b3J0Lk1heFogPSB6RmFyOwotICAgIH0KLQotICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8
IHZpZXdwb3J0LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8v
IE5vdGhpbmcgdG8gcmVuZGVyCi0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQg
fHwgIW1WaWV3cG9ydEluaXRpYWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3Bv
cnQsIHNpemVvZiBtU2V0Vmlld3BvcnQpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRWaWV3cG9ydCgmdmlld3BvcnQpOwotICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsK
LSAgICAgICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRHhVbmlmb3Jt
c0RpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQotICAg
IHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KG1TdGF0ZS5zY2lzc29yWCwgbVN0YXRl
LnNjaXNzb3JZLCBtU3RhdGUuc2Npc3NvcldpZHRoLCBtU3RhdGUuc2Npc3NvckhlaWdodCwgbVJl
bmRlclRhcmdldERlc2MuSGVpZ2h0KTsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKHJl
Y3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7
Ci0gICAgICAgICAgICByZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0
ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXRE
ZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9t
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAg
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAg
R0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRo
LCAtMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVu
aWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwotCi0gICAgICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFy
eWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0
LgotICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlv
bigpOwotICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKLSAgICAgICAg
R0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZp
ZXdwb3J0V2lkdGggLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1T
dGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7Ci0KLSAgICAgICAg
R0xpbnQgZGVwdGggPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKLSAgICAg
ICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIp
IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEs
IGR6KTsKLQotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6
TmVhciwgekZhciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5p
Zm9ybTNmdihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7Ci0gICAgICAgIG1EeFVuaWZvcm1z
RGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGll
cyB0aGUgZml4ZWQtZnVuY3Rpb24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJs
ZW5kaW5nLCBzdGVuY2lsaW5nLCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBD
b250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgIEZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgR0xlbnVtIGFkanVz
dGVkRnJvbnRGYWNlID0gYWRqdXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKLQotICAgIEdM
aW50IGZyb250Q0NXID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0g
ICAgR0xpbnQgY2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3Jh
bU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7Ci0KLSAgICBHTGludCBw
b2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24o
KTsKLSAgICBHTGludCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0g
ICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlz
RnJvbnQpOwotCi0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNw
bGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93
ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7Ci0gICAgLy8gQXBwYXJlbnRseSBz
b21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgot
ICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5jb3JyZWN0
IHJlc3VsdHMuIEluc3RlYWQsCi0gICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNr
IGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQgbm8KLSAgICAvLyBkcmF3aW5nIGlz
IGRvbmUuCi0gICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1
ZXMvZGV0YWlsP2lkPTE2OQotCi0gICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNl
RGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6
OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGVw
dGhTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEQzRFpCX1RSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkZVTkMsIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF6ZXJvQ29s
b3JNYXNrQWxsb3dlZCAmJiAobU1hc2tTdGF0ZURpcnR5IHx8IG1CbGVuZFN0YXRlRGlydHkpKQot
ICAgIHsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCi0gICAg
ewotICAgICAgICBpZiAobVN0YXRlLmJsZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAg
ICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAm
JiBtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYm
Ci0gICAgICAgICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBI
QSAmJiBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19CTEVOREZBQ1RPUiwgZXMyZHg6OkNvbnZlcnRDb2xvcihtU3RhdGUuYmxlbmRDb2xvcikp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RD
T0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
b3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+
KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRC
bGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1T
dGF0ZS5kZXN0QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0JMRU5ET1AsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlv
blJHQikpOwotCi0gICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRS
R0IgIT0gbVN0YXRlLmRlc3RCbGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5i
bGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJB
VEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5j
KG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5j
KG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0
ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmICht
U3RhdGUuc3RlbmNpbFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmhhc1N0ZW5jaWwoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVu
c3VwcG9ydGVkIGJ5IEQzRDkKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBE
M0RSU19DQ1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25z
dCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJ
TE1BU0s7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NU
RU5DSUxXUklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYg
KG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8
fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJh
Y2tSZWYgfHwgCi0gICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5z
dGVuY2lsQmFja01hc2spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBh
cmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Ig
c3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCBy
ZWYKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgR0x1aW50IG1heFN0
ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdM
X0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFT
SywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMg
OiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5jKSk7Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdM
X0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5z
dGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhT
dGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsRmFpbCkpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NX
ID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBE
M0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsK
LQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklU
RU1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5D
SUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9u
dEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYs
IChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/
IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRq
dXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1df
U1RFTkNJTFpGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5D
SUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0
eSA9IGZhbHNlOwotICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAobU1hc2tTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaW50IGNvbG9yTWFzayA9IGVz
MmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAg
aWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28g
bm90aGluZyB3aWxsIGJlIGRyYXduLgotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JD
QkxFTkQsIEQzREJMRU5EX1pFUk8pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfREVTVEJMRU5ELCBEM0RCTEVORF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5k
ZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCi0gICAgewot
ICAgICAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BF
U0NBTEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsK
LSAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9m
ZnNldFVuaXRzLCAtKGludCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09S
RCopJmRlcHRoQmlhcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xP
UEVTQ0FMRURFUFRIQklBUywgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19ERVBUSEJJQVMsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbVBvbHlnb25PZmZz
ZXRTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5
KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5p
bXBsZW1lbnRlZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgaWYgKG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1h
c2sgPSAwOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsK
LQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3Qt
PmdldFNhbXBsZXMoKTsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbWFzayA8PD0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXNrIHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
U3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbWFzayA9IH5tYXNrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1EaXRoZXJT
dGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
RElUSEVSRU5BQkxFLCBtU3RhdGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBt
RGl0aGVyU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFw
cGx5VmVydGV4QnVmZmVyKEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0
dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4
RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywg
aW5zdGFuY2VzKTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
YXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgp
LCBpbnN0YW5jZXMsIHJlcGVhdERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFu
ZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVt
IENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmlu
ZGV4SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJ
bmRleERhdGEodHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGlu
ZGljZXMsIGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsK
LSAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1
ZmZlcik7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBBcHBsaWVzIHRo
ZSBzaGFkZXJzIGFuZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQot
dm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJp
YWwoKSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFk
ZXIoKTsKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dy
YW1PYmplY3QtPmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXIocGl4ZWxTaGFkZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgICAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0
dXJlcyhTQU1QTEVSX1BJWEVMKTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQot
Ci0vLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2
ZXJ0ZXggc3RhZ2UsCi0vLyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVy
ZSBpbWFnZSB1bml0IGFuZCB0ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBh
bmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUp
Lgotdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAg
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBpbnQg
c2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ug
b2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKLSAgICB1bnNpZ25l
ZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBt
QXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwotICAgIGlu
dCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVS
VEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0
LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4
ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKLSAgICB7
Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBw
aW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBp
bmRleAotICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJP
ZmZzZXQ7Ci0KLSAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBs
ZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwotCi0gICAgICAgICAgICBUZXh0dXJl
ICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsK
LQotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0g
dGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVy
cygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0
VGV4dHVyZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2Ft
cGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFz
RGlydHlQYXJhbWV0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRl
cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUt
PmdldE1hZ0ZpbHRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRU
ZXh0dXJlV3JhcCh3cmFwUykpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0
VGV4dHVyZVdyYXAod3JhcFQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29u
dmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRF
WFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmls
dGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVy
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RT
YW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtz
YW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5o
YXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmUoZDNkU2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRU
ZXh0dXJlKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFwcGxpZWRU
ZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxp
ZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAg
ICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0g
c2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsr
KQotICAgIHsKLSAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0g
IT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVy
SW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFt
ZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZy
YW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRj
aCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVu
dCk7Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0g
ICAgewotICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0g
ICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBy
ZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0K
LQotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygm
ZGVzYyk7Ci0KLSAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVf
Tk9ORSkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWly
ZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVy
IHRhcmdldAotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0Owot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRp
cmVjdFRvUGl4ZWxzID0gZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGlnbm1l
bnQoKSA8PSA0ICYmIG1EaXNwbGF5LT5pc0QzZDlFeERldmljZSgpICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0
aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JB
X0VYVCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgaWYgKGRpcmVjdFRvUGl4ZWxz
KQotICAgIHsKLSAgICAgICAgLy8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRs
ZSB0byB3cml0ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdzIG1lbW9yeQotICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5I
ZWlnaHQsIGRlc2MuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4
ZWxzKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQotICAgICAgICAgICAgZGly
ZWN0VG9QaXhlbHMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGlyZWN0
VG9QaXhlbHMpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3Jl
ZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9P
TF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxMKTsKLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0
ZW1TdXJmYWNlKTsKLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJn
ZXQgPSBOVUxMOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQz
RCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhh
biB0aG9zZSBkb2N1bWVudGVkLgotICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkp
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAg
IHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKLSAgICBSRUNUIHJlY3QgPSB0cmFuc2Zv
cm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVzYy5IZWlnaHQpOwotICAgIHJlY3Qu
bGVmdCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgp
KTsKLSAgICByZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
ZGVzYy5IZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJl
Y3QuYm90dG9tLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIHJl
c3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19SRUFE
T05MWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0
dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQg
c2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgdW5zaWduZWQg
Y2hhciAqc291cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChnZXRQYWNrUmV2ZXJz
ZVJvd09yZGVyKCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9j
ay5wQml0czsKLSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykg
KyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5w
dXRQaXRjaCA9IC1sb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAgaWYgKGRlc2MuRm9y
bWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVu
Ci0gICAgICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVy
cyB3aXRoIG5vCi0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGgg
YmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAg
ICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAg
ICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAg
ICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2Ug
KyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4w
ZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAw
MUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4
MDdFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8g
MHhGODAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShz
b3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBh
ID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIg
PSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBp
dGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgx
LjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAw
MDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChh
cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAg
ICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGog
KiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAg
ICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYp
OwotICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8g
MHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDAp
ICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVu
c2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAwMDAw
KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAv
IDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAw
KSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAm
IDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBm
b3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkg
cm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAqKChmbG9h
dCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAg
ICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkg
KyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNE
WEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkgKyBq
ICogaW5wdXRQaXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOwot
ICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAgICAgICAgICAgICAgICAgZyA9
IGFiZ3JbMV07Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
Ml0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBy
ICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUg
ZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2Vj
dGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxv
d3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEw
ICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRw
dXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8
IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiAr
IDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAg
ICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5z
ZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAg
IDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAg
NCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNy
ZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50
ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUg
Zmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAg
ICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEg
KyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9y
dCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAotICAg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfVFlQRQotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRw
dXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8
PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Y2xl
YXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVj
dCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8
fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsKLQotICAgIGlmICht
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NP
TE9SX0JVRkZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdM
X0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZG
RVJfQklUOwotICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAg
ICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
dWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJ
VDsKLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRE
ZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0
ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgICAg
ICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbFNpemUgPSBkeDJlczo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAg
ICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotCi0g
ICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVu
ZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0
YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5hbHBoYSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVu
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuYmx1ZSkpOwotICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUu
ZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJW
YWx1ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6Okdl
dEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xv
ck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChm
bGFncyAmIEQzRENMRUFSX1NURU5DSUwpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAh
PSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9
IChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIShtU3RhdGUuY29sb3JNYXNrUmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVl
biAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xv
ck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNs
ZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3
aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFy
IGNhbGwgaXMgc2F2ZWQuCi0gICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25s
eSBzb21lIHBhdGhzIHdpbGwgYmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAg
ICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAg
IGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGhyID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBF
X09VVE9GTUVNT1JZKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElE
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVO
QUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNE
RlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0
cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9Q
X1NFTEVDVEFSRzEpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUo
MCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFS
RzEpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNT
X0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3Ry
ZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBt
RGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwg
MCk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29s
b3JNYXNrR3JlZW4sIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEp
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xF
QVJfU1RFTkNJTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdB
WVMpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJF
Riwgc3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JF
UExBQ0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAg
ICAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVM
TCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKLSAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVF
KTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9S
T1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNU
QVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19B
TFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0KLSAgICAgICAgZm9y
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcg
dGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVsw
XSA9IC0wLjVmOwotICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0
IC0gMC41ZjsKLSAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10g
PSAxLjBmOwotCi0gICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAt
IDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAw
LjVmOwotICAgICAgICBxdWFkWzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEu
MGY7Ci0KLSAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0g
LTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0g
MS4wZjsKLQotICAgICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAw
LjVmOwotICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAw
LjBmOwotICAgICAgICBxdWFkWzNdWzNdID0gMS4wZjsKLQotICAgICAgICBtRGlzcGxheS0+c3Rh
cnRTY2VuZSgpOwotICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5H
TEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKGZsb2F0WzRdKSk7Ci0KLSAgICAgICAgaWYgKGZsYWdz
ICYgRDNEQ0xFQVJfWkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURl
dmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVu
Y2lsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9
IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFw
cGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2ls
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICgh
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2
ZVR5cGU7Ci0gICAgaW50IHByaW1pdGl2ZUNvdW50OwotCi0gICAgaWYoIWVzMmR4OjpDb252ZXJ0
UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3Vu
dCkpCi0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgaWYgKHBy
aW1pdGl2ZUNvdW50IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXBwbHlTdGF0ZShtb2RlKTsKLQotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9
IDE7Ci0gICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygp
OwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+
dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2Rl
KSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRy
YXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RhdGljSW5k
ZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRp
Y2VzKGNvdW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lCKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNl
cmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0SW5kaWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1BcHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7
IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRy
YXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRp
dmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwg
cHJpbWl0aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUu
Y3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwotICAg
IGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5
cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBwbHlS
ZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsK
LSAgICBHTGVudW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwg
dHlwZSwgJmluZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6ZWkgdmVydGV4Q291
bnQgPSBpbmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgIEdM
c2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJ
bmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIp
OwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQot
ICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5
LT5zdGFydFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGlu
ZGV4SW5mby5taW5JbmRleCk7ICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShw
cmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRl
eCwgdmVydGV4Q291bnQsIGluZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVDb3VudCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgZ2xGbHVz
aCB3aGVuIGJsb2NrIGlzIGZhbHNlLCBnbEZpbmlzaCB3aGVuIGJsb2NrIGlzIHRydWUKLXZvaWQg
Q29udGV4dDo6c3luYyhib29sIGJsb2NrKQotewotICAgIG1EaXNwbGF5LT5zeW5jKGJsb2NrKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4KQotewotICAgIC8vIEdldCB0
aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdMX05P
TkUgJiYgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSkKLSAgICB7Ci0gICAgICAgIEJ1
ZmZlciAqaW5kZXhCdWZmZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2Vz
KTsKLSAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1
ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBVSU5UIHN0YXJ0SW5kZXggPSAw
OwotICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoc3VwcG9ydHMzMmJpdElu
ZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCAr
IDEpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikK
LSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhC
dWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05F
RF9JTlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtTGluZUxvb3BJQi0+
bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zm
c2V0IC8gNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
YXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9y
dCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRp
Y2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRh
W2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUIt
PnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdCBpbnQg
c3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0KLSAg
ICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29w
SUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZG
RVJfU0laRSwgRDNERk1UX0lOREVYMTYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5l
TG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNl
KHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zm
c2V0ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7
Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gMjsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9O
RTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGlj
ZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylb
aV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAg
c3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBpZiAoc3VjY2VlZGVkKQotICAgIHsKLSAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwg
IT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRJbmRpY2VzKG1MaW5lTG9vcElCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAt
bWluSW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29waW5nIGlu
ZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRF
bnVtKCkKLXsKLSAgICBtSW52YWxpZEVudW0gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJl
Y29yZEludmFsaWRWYWx1ZSgpCi17Ci0gICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRPcGVy
YXRpb24gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkKLXsK
LSAgICBtT3V0T2ZNZW1vcnkgPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFs
aWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJh
dGlvbiA9IHRydWU7Ci19Ci0KLS8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQg
Y2xlYXIgaXRzIGZsYWcsIGlmIGFueS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIu
NSBwYWdlIDEzLgotR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobUludmFs
aWRFbnVtKQotICAgIHsKLSAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfRU5VTTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRWYWx1ZSkK
LSAgICB7Ci0gICAgICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9WQUxVRTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRPcGVyYXRpb24pCi0g
ICAgewotICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHJldHVy
biBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAobU91dE9mTWVtb3J5KQot
ICAgIHsKLSAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVy
YXRpb24pCi0gICAgewotICAgICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFs
c2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOwot
ICAgIH0KLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIENvbnRleHQ6Omdl
dFJlc2V0U3RhdHVzKCkKLXsKLSAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQot
ICAgIHsKLSAgICAgICAgYm9vbCBsb3N0ID0gbURpc3BsYXktPnRlc3REZXZpY2VMb3N0KCk7Ci0K
LSAgICAgICAgaWYgKGxvc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7ICAgLy8gU2V0cyBtUmVzZXRTdGF0dXMKLSAgICAgICAgfQotICAgIH0K
LQotICAgIEdMZW51bSBzdGF0dXMgPSBtUmVzZXRTdGF0dXM7Ci0KLSAgICBpZiAobVJlc2V0U3Rh
dHVzICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT50ZXN0RGV2
aWNlUmVzZXR0YWJsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBH
TF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwot
fQotCi1ib29sIENvbnRleHQ6OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkKLXsKLSAgICBy
ZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11
bVZhcnlpbmdWZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9k
ZWwzID8gTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsK
LX0KLQotdW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPyBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsKLX0KLQotdW5zaWduZWQgaW50IENv
bnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKTsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8g
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgOiBNQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTX1NNMjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBj
b25zdAotewotICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IENvbnRl
eHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1
ZXN0ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHJlcXVlc3RlZCA9PSAwKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHJlcXVlc3RlZDsKLSAgICB9Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wg
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQp
OwotICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9
IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChpdHIt
PnNlY29uZFtpXSAmJiBpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAt
MTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c0V2ZW50UXVlcmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBw
b3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNPY2Ns
dXNpb25RdWVyaWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotfQotCi1ib29sIENv
bnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBv
cnRzRFhUM1RleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUNVRleHR1cmVzOwotfQotCi1ib29s
IENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxv
YXQzMkxpbmVhckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJs
ZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFi
bGVUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsKLX0KLQotYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRN
YXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFJl
bmRlcmJ1ZmZlckRpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247Ci19
Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0
OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1
cmVMZXZlbDsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
czMyYml0SW5kaWNlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1
cmUoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlOwotfQot
Ci1ib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c0luc3RhbmNpbmc7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdM
dWludCBidWZmZXIpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBh
Z2UgMjI6Ci0gICAgLy8gSWYgYSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMg
Ym91bmQsIGFsbCBiaW5kaW5ncyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0
Ci0gICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykg
YXJlIHJlc2V0IHRvIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0g
YnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAg
ICB9Ci0KLSAgICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAg
IH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1
ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0
YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAzLjggcGFnZSA4NDoKLSAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0
ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0
IHRleHR1cmUgb2JqZWN0IGFyZQotICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVy
bwotCi0gICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5
cGUrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQo
KSA9PSB0ZXh0dXJlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFn
ZSAxMTI6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBp
bWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVu
IGl0IGlzCi0gICAgLy8gYXMgaWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVk
LCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNo
IHRoaXMKLSAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBm
cmFtZWJ1ZmZlci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFk
RnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAg
IGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdl
IDEwNzoKLSAgICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRv
IHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoCi0gICAg
Ly8gQmluZEZyYW1lYnVmZmVyIGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBG
UkFNRUJVRkZFUiBhbmQgZnJhbWVidWZmZXIgb2YgemVyby4KLQotICAgIGlmIChtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgYmluZFJlYWRGcmFt
ZWJ1ZmZlcigwKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBm
cmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVm
ZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToK
LSAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5E
RVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKLSAg
ICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBu
YW1lIG9mIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRl
cmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0gICAgfQotCi0g
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTExOgotICAgIC8vIElm
IGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRh
Y2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLAotICAgIC8vIHRoZW4gaXQg
aXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEg
cmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQKLSAgICAvLyBwb2ludCB0byB3
aGljaCB0aGlzIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1l
YnVmZmVyLgotCi0gICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFt
ZWJ1ZmZlcigpOwotICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKLQotICAgIGlmIChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBy
ZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0K
LQotICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFt
ZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRJbmNv
bXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBlKQotewotICAgIFRleHR1cmUgKnQgPSBtSW5j
b21wbGV0ZVRleHR1cmVzW3R5cGVdLmdldCgpOwotCi0gICAgaWYgKHQgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9
OwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxs
cyB0aHJvdWdoIHRvIFRFWFRVUkVfMkQKLQotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5l
dyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAgICAg
ICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVf
Q1VCRToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29t
cGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVS
RV9JRCk7Ci0KLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwg
Y29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLQotICAgICAgICAgICAg
ICB0ID0gaW5jb21wbGV0ZUN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwot
ICAgIH0KLQotICAgIHJldHVybiB0OwotfQotCi1ib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXco
R0xlbnVtIGRyYXdNb2RlKQotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRl
LmN1bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2Rl
KTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCi17
Ci0gICAgc3dpdGNoIChkcmF3TW9kZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoK
LSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJ
UDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgIGNh
c2UgR0xfTElORVM6Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgIGNhc2UgR0xfTElO
RV9TVFJJUDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQotewotICAg
IEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFd
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2
YWx1ZXNbMl07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1
ZVszXSA9IHZhbHVlc1szXTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlDdXJyZW50
VmFsdWUoaW5kZXgpOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3Io
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1EaXZpc29yID0gZGl2aXNvcjsKLX0KLQotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dp
bmcgb3JkZXIKLS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8gVmVuZG9y
IGV4dGVuc2lvbnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCi17Ci0gICAg
bUV4dGVuc2lvblN0cmluZyA9ICIiOwotCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAgICBpZiAo
c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0
MzJUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlcigpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1
cmVfbnBvdCAiOwotICAgIH0KLQotICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25z
Ci0gICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQotICAgIHsKLSAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7Ci0gICAg
fQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsK
LSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOwotCi0gICAgaWYg
KHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICI7Ci0gICAgfQotCi0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7Ci0gICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwotCi0gICAgLy8g
QU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
ICE9IDApCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c0luc3RhbmNp
bmcoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3Rh
bmNlZF9hcnJheXMgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVy
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0MyAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVy
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0NSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9B
TkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsKLQotICAgIC8vIE90aGVyIHZlbmRvci1z
cGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAg
ewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOwotICAgIH0KLQot
ICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xh
c3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNv
bnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotdm9pZCBDb250ZXh0Ojppbml0UmVu
ZGVyZXJTdHJpbmcoKQotewotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIg
PSBtRGlzcGxheS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKLQotICAgIG1SZW5kZXJlclN0cmlu
ZyA9ICJBTkdMRSAoIjsKLSAgICBtUmVuZGVyZXJTdHJpbmcgKz0gaWRlbnRpZmllci0+RGVzY3Jp
cHRpb247Ci0gICAgbVJlbmRlcmVyU3RyaW5nICs9ICIpIjsKLX0KLQotY29uc3QgY2hhciAqQ29u
dGV4dDo6Z2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyZXJT
dHJpbmcuY19zdHIoKTsKLX0KLQotdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQg
c3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RY
MSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2spCi17Ci0gICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFt
ZWJ1ZmZlcigpOwotICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKLQotICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAg
IWRyYXdGcmFtZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1l
YnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
cmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
SGVpZ2h0KCk7Ci0gICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSRUNU
IHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gx
KQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDA7Ci0gICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgwOwotICAg
ICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRz
dFgxOwotICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0
LnJpZ2h0ID0gZHN0WDA7Ci0gICAgfQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewot
ICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAg
ICAgZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJl
Y3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsK
LSAgICAgICAgZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAg
ZGVzdFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgIH0KLQotICAg
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
ICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNp
bCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJB
TkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1
KDApCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5U
UklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAw
OwotICAgIH0KLX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9u
Q2FjaGUoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hF
X0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZl
cnRleERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hl
W2ldLnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LUdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dy
YW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewot
ICAgICpyZXBlYXREcmF3ID0gMTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gTUFYX1ZF
UlRFWF9BVFRSSUJTOwotICAgIGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FU
VFJJQlM7Ci0KLSAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIEZpbmQg
YW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMAotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJT
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNb
aV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleGVkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1
dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgYnJlYWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0
cmlidXRlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRFZF
UlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZF
UlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7
Ci0KLSAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIER1ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGlu
c3RhbmNpbmcgd2hlbiBub25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAg
ICAgICAgICAgICAgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9IGlu
c3RhbmNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0
ZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFt
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9
IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3RhbmNlczsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTlNU
QU5DRURBVEEgfCBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3Ry
ZWFtU291cmNlRnJlcShzdHJlYW0sIGZyZXF1ZW5jeSk7Ci0gICAgICAgICAgICAgICAgICAgIG1J
bnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmli
dXRlc1tpXS5zZXJpYWwgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0
cmlkZSAhPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVk
VkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgYXR0cmli
dXRlc1tpXS52ZXJ0ZXhCdWZmZXIsIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ld
LnN0cmlkZSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgPSBh
dHRyaWJ1dGVzW2ldLnNlcmlhbDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1d
LnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBsaWVk
VkJzW3N0cmVhbV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAgIGVs
ZW1lbnQtPk9mZnNldCA9IDA7Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRl
c1tpXS50eXBlOwotICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9E
RUZBVUxUOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7Ci0gICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbS0+Z2V0U2VtYW50
aWNJbmRleChpKTsKLSAgICAgICAgICAgIGVsZW1lbnQrKzsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRF
WF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1JbnN0YW5jaW5n
RW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQz
RFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKihlbGVtZW50KyspID0g
ZW5kOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5U
UklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0g
Jm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVs
ZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVY
RUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewot
ICAgICAgICAgICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1OwotICAgICAgICAgICAgaWYo
ZW50cnktPnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVy
dGV4RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+
dmVydGV4RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBH
TF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlcnRleERlY2xDYWNoZUVudHJ5
ICpsYXN0Q2FjaGUgPSBtVmVydGV4RGVjbENhY2hlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYg
KG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9
IE5VTEwpCi0gICAgewotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxl
YXNlKCk7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAg
ICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRv
bid0IGhhdmUgdG8gd29ycnkKLSAgICAgICAgLy8gYWJvdXQgaXQuCi0gICAgfQotCi0gICAgbWVt
Y3B5KGxhc3RDYWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1l
bnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpOwotICAgIGRldmljZS0+Q3JlYXRlVmVy
dGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsK
LSAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFy
YXRpb24pOwotICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9u
OwotICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0KLSAgICByZXR1cm4gR0xf
Tk9fRVJST1I7Ci19Ci0KLXZvaWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGly
dHkoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgewotICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwotICAgIH0KLQotICAg
IG1MYXN0U2V0VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAg
Ly8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQKLX0KLQotfQotCi1leHRl
cm4gIkMiCi17Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVz
ZXRzLCBib29sIHJvYnVzdEFjY2VzcykKLXsKLSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNv
bmZpZywgc2hhcmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7Ci19Ci0KLXZv
aWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBkZWxldGUg
Y29udGV4dDsKLQotICAgIGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCi0gICAgewot
ICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotfQotCi12
b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlz
cGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGdsOjptYWtlQ3VycmVudChjb250
ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsKLX0KLQotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENv
bnRleHQoKQotewotICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOwotfQotfQorLy8NCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLg0KKy8vDQorDQorLy8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250
ZXh0IGNsYXNzLCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcNCisvLyByZW5k
ZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9u
IG9mIEVHTENvbnRleHQuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiDQorDQor
I2luY2x1ZGUgPGFsZ29yaXRobT4NCisNCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisN
CisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1
dGlsLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGli
R0xFU3YyL0JsaXQuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIg0K
KyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5j
ZS5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCINCisjaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIN
CisjaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJCdWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIg0KKyNpbmNsdWRlICJs
aWJHTEVTdjIvVGV4dHVyZS5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFn
ZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCINCisNCisjdW5k
ZWYgbmVhcg0KKyN1bmRlZiBmYXINCisNCituYW1lc3BhY2UgZ2wNCit7DQorQ29udGV4dDo6Q29u
dGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVD
b250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhj
b25maWcpDQorew0KKyAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmlt
cGxlbWVudGVkDQorDQorICAgIG1EaXNwbGF5ID0gTlVMTDsNCisgICAgbURldmljZSA9IE5VTEw7
DQorDQorICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOw0KKw0KKyAg
ICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOw0KKw0KKyAgICBtU3RhdGUu
ZGVwdGhDbGVhclZhbHVlID0gMS4wZjsNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0g
MDsNCisNCisgICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7DQorICAgIG1TdGF0ZS5jdWxsTW9k
ZSA9IEdMX0JBQ0s7DQorICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7DQorICAgIG1TdGF0
ZS5kZXB0aFRlc3QgPSBmYWxzZTsNCisgICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdMX0xFU1M7DQor
ICAgIG1TdGF0ZS5ibGVuZCA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBH
TF9PTkU7DQorICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOw0KKyAgICBtU3Rh
dGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsNCisgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0g
R0xfWkVSTzsNCisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsNCisg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOw0KKyAgICBtU3RhdGUu
YmxlbmRDb2xvci5yZWQgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7DQor
ICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5h
bHBoYSA9IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOw0KKyAgICBtU3RhdGUu
c3RlbmNpbEZ1bmMgPSBHTF9BTFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsNCisg
ICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gLTE7DQorICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNr
ID0gLTE7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7DQorICAgIG1T
dGF0ZS5zdGVuY2lsQmFja1JlZiA9IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAt
IDE7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOw0KKyAgICBtU3RhdGUu
c3RlbmNpbEZhaWwgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwg
PSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOw0K
KyAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aFBhc3MgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBm
YWxzZTsNCisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOw0KKyAgICBtU3Rh
dGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9D
b3ZlcmFnZSA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsNCisg
ICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBmOw0KKyAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VJbnZlcnQgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7
DQorICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOw0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBI
aW50ID0gR0xfRE9OVF9DQVJFOw0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZl
SGludCA9IEdMX0RPTlRfQ0FSRTsNCisNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7DQor
DQorICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOw0KKyAgICBtU3RhdGUudmlld3BvcnRZID0gMDsN
CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsN
CisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0
Ow0KKyAgICBtU3RhdGUuek5lYXIgPSAwLjBmOw0KKyAgICBtU3RhdGUuekZhciA9IDEuMGY7DQor
DQorICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQor
ICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisg
ICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7DQor
DQorICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNr
R3JlZW4gPSB0cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7DQorICAgIG1T
dGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7DQorICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVl
Ow0KKw0KKyAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIG1S
ZXNvdXJjZU1hbmFnZXIgPSBzaGFyZUNvbnRleHQtPm1SZXNvdXJjZU1hbmFnZXI7DQorICAgICAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsN
CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7DQorICAg
IH0NCisNCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6DQor
ICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVf
TUFQIGhhdmUgdHdvZGltZW5zaW9uYWwNCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3Rh
dGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uDQorICAgIC8vIElu
IG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3Qs
IHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQ0KKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9z
ZSBuYW1lcyBhcmUgMC4NCisNCisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQo
MCkpOw0KKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAoMCkp
Ow0KKw0KKyAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7DQorICAgIGJpbmRBcnJheUJ1ZmZl
cigwKTsNCisgICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZFRleHR1cmVD
dWJlTWFwKDApOw0KKyAgICBiaW5kVGV4dHVyZTJEKDApOw0KKyAgICBiaW5kUmVhZEZyYW1lYnVm
ZmVyKDApOw0KKyAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5kUmVuZGVyYnVm
ZmVyKDApOw0KKw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKw0KKyAgICBtU3Rh
dGUucGFja0FsaWdubWVudCA9IDQ7DQorICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0Ow0K
KyAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlciA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4
RGF0YU1hbmFnZXIgPSBOVUxMOw0KKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7DQorICAg
IG1CbGl0ID0gTlVMTDsNCisgICAgbUxpbmVMb29wSUIgPSBOVUxMOw0KKw0KKyAgICBtSW52YWxp
ZEVudW0gPSBmYWxzZTsNCisgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKyAgICBtSW52YWxp
ZE9wZXJhdGlvbiA9IGZhbHNlOw0KKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsNCisgICAgbUlu
dmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICBtSGFzQmVlbkN1cnJl
bnQgPSBmYWxzZTsNCisgICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7DQorICAgIG1SZXNldFN0YXR1
cyA9IEdMX05PX0VSUk9SOw0KKyAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNldHMgPyBH
TF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VY
VCk7DQorICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7DQorDQorICAgIG1TdXBwb3J0
c0RYVDFUZXh0dXJlcyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxz
ZTsNCisgICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gZmFsc2U7DQorICAgIG1TdXBwb3J0c0V2
ZW50UXVlcmllcyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFs
c2U7DQorICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOw0KKyAgICBtTWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IDA7DQorICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOw0K
KyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOw0KK30NCisNCitDb250ZXh0Ojp+Q29udGV4dCgpDQor
ew0KKyAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApDQorICAgIHsNCisgICAgICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSk7DQorICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7DQorICAgICAgICB9
DQorICAgICAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKyAgICB9DQorDQorICAgIHdo
aWxlICghbUZyYW1lYnVmZmVyTWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZy
YW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisg
ICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlRmVu
Y2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1R
dWVyeU1hcC5lbXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGVRdWVyeShtUXVlcnlNYXAu
YmVnaW4oKS0+Zmlyc3QpOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3Vw
cG9ydC5lbXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3Vw
cG9ydC5iZWdpbigpLT5zZWNvbmQ7DQorICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNl
KG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQg
dHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAgew0KKyAg
ICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBF
X0NPVU5UOyB0eXBlKyspDQorICAgIHsNCisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlw
ZV0uc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbaV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAgbVN0YXRl
LmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBtU3RhdGUuYXJyYXlC
dWZmZXIuc2V0KE5VTEwpOw0KKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxM
KTsNCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7DQorDQorICAgIG1UZXh0dXJl
MkRaZXJvLnNldChOVUxMKTsNCisgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7DQor
DQorICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7DQorICAgIGRlbGV0ZSBtSW5kZXhEYXRh
TWFuYWdlcjsNCisgICAgZGVsZXRlIG1CbGl0Ow0KKyAgICBkZWxldGUgbUxpbmVMb29wSUI7DQor
DQorICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQ0KKyAgICB7DQorICAgICAgICBtTWFz
a2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNl
TWFuYWdlci0+cmVsZWFzZSgpOw0KK30NCisNCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVn
bDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgbURp
c3BsYXkgPSBkaXNwbGF5Ow0KKyAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOw0K
Kw0KKyAgICBpZiAoIW1IYXNCZWVuQ3VycmVudCkNCisgICAgew0KKyAgICAgICAgbURldmljZUNh
cHMgPSBtRGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOw0KKw0KKyAgICAgICAgbVZlcnRleERhdGFN
YW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOw0KKyAgICAgICAg
bUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsN
CisgICAgICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7DQorDQorICAgICAgICBtU3VwcG9ydHNT
aGFkZXJNb2RlbDMgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVS
U0lPTigzLCAwKTsNCisgICAgICAgIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPSBtRGlzcGxheS0+
Z2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUgPSBtRGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAg
IG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsN
CisNCisgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGlu
dCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVy
ZUhlaWdodCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQp
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heEN1YmVU
ZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1h
eFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOw0KKyAgICAgICAg
bU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsNCisgICAg
ICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lv
bj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQiLA0K
KyAgICAgICAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVu
c2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7DQorDQor
ICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0NCisgICAgICAg
IHsNCisgICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsDQorICAgICAgICAgICAgRDNERk1UX1g4
UjhHOEI4LA0KKyAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsDQorICAgICAgICAgICAgRDNERk1U
X0QyNFM4DQorICAgICAgICB9Ow0KKw0KKyAgICAgICAgaW50IG1heCA9IDA7DQorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihE
M0RGT1JNQVQpOyArK2kpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1w
bGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsNCisgICAg
ICAgICAgICBtRGlzcGxheS0+Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KHJlbmRlckJ1ZmZlckZvcm1h
dHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOw0KKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBv
cnRbcmVuZGVyQnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Ow0KKw0KKyAgICAg
ICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0t
aikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5
W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkNCisgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsNCisgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIG1NYXhTdXBw
b3J0ZWRTYW1wbGVzID0gbWF4Ow0KKw0KKyAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0g
bURpc3BsYXktPmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNPY2Ns
dXNpb25RdWVyaWVzID0gbURpc3BsYXktPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOw0KKyAg
ICAgICAgbVN1cHBvcnRzRFhUMVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gbURp
c3BsYXktPmdldERYVDVUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRmxvYXQz
MlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMp
Ow0KKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0
MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0
c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNl
VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsNCisgICAg
ICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5h
bmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7DQorDQorICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAx
Nik7DQorDQorICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAg
ICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMjsNCisgICAgICAgIH0NCisgICAgICAg
IGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1O
dW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm
IChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1D
b21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlu
aXRFeHRlbnNpb25TdHJpbmcoKTsNCisgICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOw0KKw0K
KyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRZ
ID0gMDsNCisgICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgo
KTsNCisgICAgICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgp
Ow0KKw0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsNCisgICAgICAgIG1TdGF0ZS5zY2lz
c29yWSA9IDA7DQorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lk
dGgoKTsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0
KCk7DQorDQorICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOw0KKyAgICB9DQorDQorICAg
IC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0
cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcw0KKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVmYXVsdFJlbmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOw0KKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7DQorDQorICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3Ji
dWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7DQorICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVw
dGhTdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2ls
KTsNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVi
dWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsNCisNCisgICAg
c2V0RnJhbWVidWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7DQorDQorICAgIGlmIChkZWZhdWx0
UmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7DQorICAgIH0NCisNCisgICAgaWYgKGRlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAg
ICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7DQorICAgIH0NCisgICAgDQorICAgIG1hcmtBbGxT
dGF0ZURpcnR5KCk7DQorfQ0KKw0KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRo
ZSBzdGF0ZS1yZWxhdGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVy
aW5nIG5leHQgcHJlLWRyYXcuDQordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpDQor
ew0KKyAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0Kysp
DQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsNCisgICAg
fQ0KKw0KKyAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEY7IHQrKykNCisgICAgew0KKyAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNb
dF0gPSAwOw0KKyAgICB9DQorDQorICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7DQorICAg
IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsNCisgICAgbUFwcGxpZWREZXB0aGJ1ZmZl
clNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAg
IG1BcHBsaWVkSUJTZXJpYWwgPSAwOw0KKyAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBm
YWxzZTsNCisgICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVJlbmRlclRh
cmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGVjbGFyYXRpb25D
YWNoZS5tYXJrU3RhdGVEaXJ0eSgpOw0KKw0KKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1CbGVuZFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtUG9seWdvbk9m
ZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0g
dHJ1ZTsNCisgICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsNCisgICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7DQorICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpDQorew0KKyAgICBtRHhVbmlmb3Jtc0Rp
cnR5ID0gdHJ1ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjptYXJrQ29udGV4dExvc3QoKQ0KK3sN
CisgICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQp
DQorICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9VTktOT1dOX0NPTlRFWFRfUkVTRVRfRVhUOw0K
KyAgICBtQ29udGV4dExvc3QgPSB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmlzQ29udGV4
dExvc3QoKQ0KK3sNCisgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsNCit9DQorDQordm9pZCBDb250
ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZs
b2F0IGFscGhhKQ0KK3sNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7DQor
ICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsNCisgICAgbVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5ibHVlID0gYmx1ZTsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5h
bHBoYSA9IGFscGhhOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQg
ZGVwdGgpDQorew0KKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQ0KK3sNCisgICAgbVN0
YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNpbDsNCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRDdWxsRmFjZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9
IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7DQor
ICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29u
dGV4dDo6aXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5j
dWxsRmFjZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkN
Cit7DQorICAgIGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkNCisgICAgew0KKyAgICAgICAg
bVN0YXRlLmN1bGxNb2RlID0gbW9kZTsNCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7
DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9udDsNCisgICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9
IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBl
bmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkNCisgICAg
ew0KKyAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7DQorICAgICAgICBtRGVwdGhT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGVwdGhU
ZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsNCit9
DQorDQordm9pZCBDb250ZXh0OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykNCit7DQor
ICAgIGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykNCisgICAgew0KKyAgICAgICAg
bVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9h
dCB6TmVhciwgZmxvYXQgekZhcikNCit7DQorICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOw0KKyAg
ICBtU3RhdGUuekZhciA9IHpGYXI7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9v
bCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQ0KKyAgICB7
DQorICAgICAgICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOw0KKyAgICAgICAgbUJsZW5kU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0JsZW5kRW5hYmxl
ZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmJsZW5kOw0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwg
R0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VC
bGVuZEFscGhhICE9IHNvdXJjZUFscGhhIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdC
ICE9IGRlc3RSR0IgfHwNCisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxw
aGEpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJHQjsN
CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdCOw0KKyAgICAgICAgbVN0YXRl
LnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsNCisgICAgICAgIG1TdGF0ZS5kZXN0Qmxl
bmRBbHBoYSA9IGRlc3RBbHBoYTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZs
b2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUu
YmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVl
biAhPSBncmVlbiB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8
DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkNCisgICAgew0KKyAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IucmVkID0gcmVkOw0KKyAgICAgICAgbVN0YXRlLmJsZW5k
Q29sb3IuZ3JlZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBi
bHVlOw0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsNCisgICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
c2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9u
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8
DQorICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247DQor
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsNCisgICAg
ICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsVGVzdCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3Qg
PSBlbmFibGVkOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCitib29sIENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtU3RhdGUuc3RlbmNpbFRlc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWlu
dCBzdGVuY2lsTWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNp
bEZ1bmMgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxSZWYgfHwNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykNCisgICAgew0KKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7DQorICAgICAgICBtU3RhdGUuc3Rl
bmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsNCisgICAgICAgIG1T
dGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNr
UGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVp
bnQgc3RlbmNpbEJhY2tNYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMg
IT0gc3RlbmNpbEJhY2tGdW5jIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0g
c3RlbmNpbEJhY2tSZWYgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3Rl
bmNpbEJhY2tNYXNrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0g
c3RlbmNpbEJhY2tGdW5jOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5j
aWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tNYXNrID0gc3RlbmNpbEJhY2tNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0
ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxXcml0ZW1hc2sgPSBzdGVuY2lsV3JpdGVtYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykNCit7DQorICAgIGlm
IChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNr
V3JpdGVtYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2ls
RmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0
aEZhaWwgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2ls
UGFzc0RlcHRoUGFzcykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3Rl
bmNpbEZhaWw7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBzdGVuY2ls
UGFzc0RlcHRoRmFpbDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0
ZW5jaWxQYXNzRGVwdGhQYXNzOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhH
TGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBH
TGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsQmFja0ZhaWwgIT0gc3RlbmNpbEJhY2tGYWlsIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8fA0KKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0
aFBhc3MpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBzdGVuY2ls
QmFja0ZhaWw7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3Rl
bmNpbEJhY2tQYXNzRGVwdGhGYWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0Rl
cHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29u
T2Zmc2V0RmlsbChib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZz
ZXRGaWxsICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
RmlsbCA9IGVuYWJsZWQ7DQorICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVl
Ow0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJs
ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsNCisN
Cit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFj
dG9yLCBHTGZsb2F0IHVuaXRzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFj
dG9yICE9IGZhY3RvciB8fA0KKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1
bml0cykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0
b3I7DQorICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7DQorICAgICAg
ICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAg
IGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOw0KKyAgICAgICAg
bVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNh
bXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxlQ292
ZXJhZ2UgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
ID0gZW5hYmxlZDsNCisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCitib29sIENvbnRleHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQ0K
K3sNCisgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8DQorICAg
ICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQ0KKyAgICB7DQorICAg
ICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IHZhbHVlOw0KKyAgICAgICAgbVN0YXRl
LnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0Ow0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGly
dHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3Qo
Ym9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFibGVk
KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOw0KKyAgICAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRl
eHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
c2Npc3NvclRlc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxl
ZCkNCit7DQorICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5kaXRoZXIgPSBlbmFibGVkOw0KKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKQ0KK3sNCisgICAgbVN0YXRlLmxpbmVXaWR0
aCA9IHdpZHRoOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludChH
TGVudW0gaGludCkNCit7DQorICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50Ow0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xl
bnVtIGhpbnQpDQorew0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9
IGhpbnQ7DQorICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJhbnNs
YXRvciBzbyB3ZSBjYW4gd3JpdGUNCisgICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBkZHhfZmlu
ZSBkZXBlbmRpbmcgb24gdGhlIGhpbnQuDQorICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2
YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBoaW50Lg0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7DQorICAgIG1T
dGF0ZS52aWV3cG9ydFkgPSB5Ow0KKyAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHdpZHRoOw0K
KyAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkNCit7DQorICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8fCBtU3RhdGUu
c2Npc3NvclkgIT0geSB8fCANCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGgg
fHwgbVN0YXRlLnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuc2Npc3NvclggPSB4Ow0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsNCisgICAgICAg
IG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0ID0gaGVpZ2h0Ow0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVl
biwgYm9vbCBibHVlLCBib29sIGFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tS
ZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fA0KKyAgICAgICAg
bVN0YXRlLmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0g
YWxwaGEpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7DQorICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5jb2xv
ck1hc2tCbHVlID0gYmx1ZTsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhh
Ow0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lk
IENvbnRleHQ6OnNldERlcHRoTWFzayhib29sIG1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLmRl
cHRoTWFzayAhPSBtYXNrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFz
azsNCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9p
ZCBDb250ZXh0OjpzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpDQorew0KKyAg
ICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6
OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRl
LnJlYWRGcmFtZWJ1ZmZlcjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1
ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZl
cjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVp
bnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QWN0
aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QNCit7DQorICAgIFF1ZXJ5ICpxdWVyeU9iamVj
dCA9IE5VTEw7DQorICAgIA0KKyAgICBzd2l0Y2ggKHRhcmdldCkNCisgICAgew0KKyAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoNCisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7DQorICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVf
RVhUOg0KKyAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5Z
X1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisg
ICAgICBkZWZhdWx0Og0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBp
ZiAocXVlcnlPYmplY3QpDQorICAgIHsNCisgICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQo
KTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOw0KK30NCisNCitjb25z
dCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0pDQorew0KKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdM
ZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikNCit7DQorICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVm
ZmVyKTsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6
ZTsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsN
CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9y
bWFsaXplZDsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUg
PSBzdHJpZGU7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRl
ciA9IHBvaW50ZXI7DQorfQ0KKw0KK2NvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJp
YlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QNCit7DQorICAgIHJldHVybiBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7DQorfQ0KKw0KK2NvbnN0
IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkNCit7
DQorICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisgICAgbVN0YXRlLnBh
Y2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7DQorfQ0KKw0KK0dMaW50IENvbnRleHQ6OmdldFBhY2tB
bGlnbm1lbnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Ow0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQp
DQorew0KKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitH
TGludCBDb250ZXh0OjpnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UGFja1Jl
dmVyc2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcikNCit7DQorICAgIG1TdGF0ZS5wYWNr
UmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOw0KK30NCisNCitib29sIENvbnRleHQ6
OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrUmV2ZXJzZVJvd09yZGVyOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVy
KCkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsNCit9
DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQ0KK3sNCisgICAgcmV0dXJuIG1S
ZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0oKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVU
ZXh0dXJlKCkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJl
KCk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQ0KK3sNCisg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOw0KK30NCisN
CisvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lDQorR0x1aW50IENvbnRleHQ6
OmNyZWF0ZUZyYW1lYnVmZmVyKCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZm
ZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsNCisNCisgICAgbUZyYW1lYnVmZmVyTWFwW2hh
bmRsZV0gPSBOVUxMOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCitHTHVpbnQgQ29u
dGV4dDo6Y3JlYXRlRmVuY2UoKQ0KK3sNCisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRs
ZUFsbG9jYXRvci5hbGxvY2F0ZSgpOw0KKw0KKyAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBG
ZW5jZShtRGlzcGxheSk7DQorDQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KKy8vIFJldHVy
bnMgYW4gdW51c2VkIHF1ZXJ5IG5hbWUNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQ0K
K3sNCisgICAgR0x1aW50IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgp
Ow0KKw0KKyAgICBtUXVlcnlNYXBbaGFuZGxlXSA9IE5VTEw7DQorDQorICAgIHJldHVybiBoYW5k
bGU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpDQor
ew0KKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpDQorICAgIHsN
CisgICAgICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOw0KKyAgICB9DQorICAgIA0KKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsNCit9DQorDQordm9pZCBDb250ZXh0
OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dy
YW0oR0x1aW50IHByb2dyYW0pDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9n
cmFtKHByb2dyYW0pOw0KKyAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICBp
ZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkNCisgICAgew0KKyAgICAg
ICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KKw0KKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAgaWYgKG1SZXNvdXJj
ZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQ0KKyAgICB7DQorICAgICAg
ICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAg
bVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0K
K3sNCisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZy
YW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXJP
YmplY3QgIT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hG
cmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7DQorDQorICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVB
bGxvY2F0b3IucmVsZWFzZShmcmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVs
ZXRlIGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNvbmQ7DQorICAgICAgICBtRnJhbWVidWZmZXJNYXAu
ZXJhc2UoZnJhbWVidWZmZXJPYmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZl
bmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOw0KKw0KKyAgICBpZiAoZmVuY2VPYmpl
Y3QgIT0gbUZlbmNlTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBtRmVuY2VIYW5kbGVBbGxv
Y2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZlbmNl
T2JqZWN0LT5zZWNvbmQ7DQorICAgICAgICBtRmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOw0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQ0K
K3sNCisgICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5TWFwLmZpbmQo
cXVlcnkpOw0KKyAgICBpZiAocXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQ0KKyAgICB7
DQorICAgICAgICBtUXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVjdC0+Zmly
c3QpOw0KKyAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0LT5zZWNvbmQpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgcXVlcnlPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgbVF1ZXJ5TWFwLmVyYXNlKHF1ZXJ5T2JqZWN0KTsNCisgICAgfQ0KK30NCisNCitCdWZm
ZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1S
ZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOw0KK30NCisNCitTaGFkZXIgKkNvbnRl
eHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmdldFNoYWRlcihoYW5kbGUpOw0KK30NCisNCitQcm9ncmFtICpDb250ZXh0OjpnZXRQ
cm9ncmFtKEdMdWludCBoYW5kbGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+
Z2V0UHJvZ3JhbShoYW5kbGUpOw0KK30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJl
KEdMdWludCBoYW5kbGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4
dHVyZShoYW5kbGUpOw0KK30NCisNCitSZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1
ZmZlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFJlbmRlcmJ1ZmZlcihoYW5kbGUpOw0KK30NCisNCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0
UmVhZEZyYW1lYnVmZmVyKCkNCit7DQorICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUu
cmVhZEZyYW1lYnVmZmVyKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdG
cmFtZWJ1ZmZlcigpDQorew0KKyAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQ0K
K3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7
DQorDQorICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1
ZmZlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihi
dWZmZXIpOw0KKw0KKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIo
YnVmZmVyKSk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4
dHVyZSkNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24o
dGV4dHVyZSwgVEVYVFVSRV8yRCk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhU
VVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOw0K
K30NCisNCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkN
Cit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVy
ZSwgVEVYVFVSRV9DVUJFKTsNCisNCisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVf
Q1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9
DQorDQordm9pZCBDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cikNCit7DQorICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQor
ICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7
DQorICAgIH0NCisNCisgICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0K
K30NCisNCit2b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVm
ZmVyKQ0KK3sNCisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpDQorICAgIHsN
CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIo
KTsNCisgICAgfQ0KKw0KKyAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
DQorDQorICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVm
ZmVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5k
ZXJidWZmZXIpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFs
bG9jYXRpb24ocmVuZGVyYnVmZmVyKTsNCisNCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQo
Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnVz
ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pDQorew0KKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0g
bVN0YXRlLmN1cnJlbnRQcm9ncmFtOw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9n
cmFtOyAgICAgICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRl
LCBvdGhlcndpc2UgaXQgb25seSBnZXRzIGZsYWdnZWQuDQorDQorICAgIGlmIChwcmlvclByb2dy
YW0gIT0gcHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgUHJvZ3JhbSAqbmV3UHJvZ3JhbSA9IG1S
ZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7DQorICAgICAgICBQcm9ncmFtICpv
bGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOw0K
KyAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsNCisgICAgICAgIG1EeFVuaWZv
cm1zRGlydHkgPSB0cnVlOw0KKw0KKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pDQorICAgICAgICB7
DQorICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAg
ICANCisgICAgICAgIGlmIChvbGRQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9s
ZFByb2dyYW0tPnJlbGVhc2UoKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAg
Ly8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMg
Y2FsbGVkIHdpdGggYW4gPGlkPiAgDQorICAgIC8vIG9mIHplcm8sIGlmIHRoZSBhY3RpdmUgcXVl
cnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhlICANCisgICAg
Ly8gdGFyZ2V0cyBBTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURf
Q09OU0VSVkFUSVZFX0VYVCwgaWYgIA0KKyAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRo
ZXIgdGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiANCisgICAg
Ly8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRhcmdl
dD4sIG9yIGlmIDxpZD4gaXMgdGhlDQorICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBm
b3IgYW55IHF1ZXJ5IHR5cGUsIHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcw0KKyAgICAv
LyBnZW5lcmF0ZWQuDQorDQorICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3Rp
dmUNCisgICAgLy8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3Vw
cG9ydGVkLCB3ZSB3aWxsIG5lZWQgdG8gY2hlY2sNCisgICAgLy8gc2VwYXJhdGVseSB0aGF0Og0K
KyAgICAvLyAgICBhKSBUaGUgcXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3Rp
dmUgcXVlcnkgZm9yIGFueSB0YXJnZXQvdHlwZQ0KKyAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8g
YWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UN
CisgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsDQorICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1h
eSBiZSBhY3RpdmUgZm9yIGVpdGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuDQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQ0KKyAgICB7DQor
ICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorICAgIHN3aXRjaCAo
dGFyZ2V0KQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAN
CisgICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
IA0KKyAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZF
OyANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZh
bHNlKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmpl
Y3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsNCisNCisgICAgLy8gY2hlY2sgdGhh
dCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcw0KKyAgICBpZiAoIXF1ZXJ5T2Jq
ZWN0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICB9DQorDQorICAgIC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNoDQorICAgIGlmIChx
dWVyeU9iamVjdC0+Z2V0VHlwZSgpICE9IHRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICAvLyBzZXQgcXVl
cnkgYXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0DQorICAgIG1TdGF0ZS5hY3RpdmVRdWVy
eVtxVHlwZV0uc2V0KHF1ZXJ5T2JqZWN0KTsNCisNCisgICAgLy8gYmVnaW4gcXVlcnkNCisgICAg
cXVlcnlPYmplY3QtPmJlZ2luKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xl
bnVtIHRhcmdldCkNCit7DQorICAgIFF1ZXJ5VHlwZSBxVHlwZTsNCisNCisgICAgc3dpdGNoICh0
YXJnZXQpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IA0K
KyAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IA0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDog
DQorICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7
IA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDogDQorICAgICAgICBBU1NFUlQoZmFs
c2UpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFF1ZXJ5ICpxdWVyeU9iamVj
dCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7DQorDQorICAgIGlmIChxdWVyeU9i
amVjdCA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsNCisNCisgICAg
bVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpDQorew0KKyAgICBkZWxl
dGUgbUZyYW1lYnVmZmVyTWFwWzBdOw0KKyAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7
DQorICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IDApDQorICAgIHsNCisgICAgICAg
IG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGJ1ZmZlcjsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVy
YnVmZmVyKQ0KK3sNCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3Rh
dGUucmVuZGVyYnVmZmVyLmdldCgpOw0KKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3Jh
Z2UocmVuZGVyYnVmZmVyKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1l
YnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpDQorew0KKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRl
cmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOw0KKw0KKyAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJl
dHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0ZlbmNlICpDb250ZXh0
OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJh
dG9yIGZlbmNlID0gbUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZlbmNlID09
IG1GZW5jZU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0N
CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsNCisgICAg
fQ0KK30NCisNCitRdWVyeSAqQ29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwg
Ym9vbCBjcmVhdGUsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1
ZXJ5ID0gbVF1ZXJ5TWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKHF1ZXJ5ID09IG1RdWVy
eU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAg
ZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0
eXBlKTsNCisgICAgICAgICAgICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsNCisgICAgICAgIH0N
CisgICAgICAgIHJldHVybiBxdWVyeS0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0J1ZmZlciAq
Q29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1
ZmZlci5nZXQoKTsNCit9DQorDQorQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7DQor
fQ0KKw0KK1Byb2dyYW0gKkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKCkNCit7DQorICAgIGlm
ICghbUNhY2hlZEN1cnJlbnRQcm9ncmFtKQ0KKyAgICB7DQorICAgICAgICBtQ2FjaGVkQ3VycmVu
dFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbSk7DQorICAgIH0NCisgICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50UHJvZ3JhbTsNCit9DQor
DQorVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQ0KK3sNCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyLCBURVhUVVJFXzJEKSk7DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCgpDQorew0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVN
YXAqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJF
KSk7DQorfQ0KKw0KK1RleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVk
IGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKQ0KK3sNCisgICAgR0x1aW50IHRleGlkID0g
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7DQorDQorICAgIGlmICh0
ZXhpZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRp
YWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldA0KKyAgICB7DQorICAgICAgICBzd2l0Y2gg
KHR5cGUpDQorICAgICAgICB7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOw0K
KyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8u
Z2V0KCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVy
VGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5nZXQoKTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRC
b29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQ0KK3sNCisgICAgc3dpdGNo
IChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAg
ICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQ
VEhfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAg
ICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsNCisgICAgICAgIHBhcmFtc1sx
XSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5j
b2xvck1hc2tCbHVlOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhh
Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnBvbHlnb25PZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9T
QU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9D
b3ZlcmFnZTsgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNjaXNzb3JUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0
OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmJsZW5kOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVT
VF9BQ0NFU1NfRVhUOiAqcGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9GQUxT
RTsgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYo
R0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpDQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTog
REVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBp
bXBsZW1lbnRhdGlvbg0KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdl
dEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVp
cmUgY29udmVyc2lvbiBpbiBhbnkNCisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBk
aWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1l
KQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
U0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdl
VmFsdWU7ICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvcjsgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9
IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0g
Z2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7DQorICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9
IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0g
c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFY
X1NNMyA6IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsNCisgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBt
U3RhdGUuek5lYXI7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsNCisgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6DQorICAgICAgICBwYXJh
bXNbMF0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmFscGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9CTEVO
RF9DT0xPUjoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsNCisg
ICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOw0KKyAgICAgICAgcGFy
YW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1T
dGF0ZS5ibGVuZENvbG9yLmFscGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9
DQorDQorYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJh
bXMpDQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGlu
Y2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbg0KKyAgICAv
LyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQg
dGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRp
dmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkN
CisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxs
aW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gDQorICAgIC8vIENvbnRleHQ6Omdl
dEZsb2F0di4NCisgICAgc3dpdGNoIChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTUFY
X1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlM7ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzog
ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVh
azsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFy
YW1zID0gZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVhazsNCisgICAg
ICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAg
ICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0g
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsNCisgICAgICAvL2Nh
c2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0
byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUNCisgICAgICBjYXNlIEdMX0RSQVdf
RlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1
ZmZlcjsgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZG
RVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRl
LnBhY2tSZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VO
UEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0Fs
aWdubWVudDsgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01J
UE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGlu
dDsgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2
ZUhpbnQ7IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tG
dW5jOyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JF
RjogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJh
Y2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsOyAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQ
VEhfUEFTUzogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc291cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
QkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJs
ZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNU
X0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7
ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdC
OiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1VCUElY
RUxfQklUUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0la
RTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
OyAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RTogICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAg
IA0KKyAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsNCisg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpOw0KKyAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApDQorICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgIH0NCisgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAN
CisgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAg
ICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzoNCisgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygp
ICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDE7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAg
ICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsNCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIGVsc2UgDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0g
Z2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTsgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9W
SUVXUE9SVF9ESU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24g
PSBzdGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1U
ZXh0dXJlRGltZW5zaW9uKCkpOw0KKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lv
bjsNCisgICAgICAgICAgICBwYXJhbXNbMV0gPSBtYXhEaW1lbnNpb247DQorICAgICAgICB9DQor
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
Og0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
IGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgICBwYXJhbXNbMF0g
PSBtU3RhdGUudmlld3BvcnRYOw0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0
WTsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOw0KKyAgICAgICAg
cGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0Ow0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lz
c29yWDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsNCisgICAgICAgIHBh
cmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3Rh
dGUuc2Npc3NvckhlaWdodDsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9G
QUNFX01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJ
VFM6DQorICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRT
Og0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOw0KKw0KKyAgICAgICAg
ICAgIGlmIChjb2xvcmJ1ZmZlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNv
bG9yYnVmZmVyLT5nZXRHcmVlblNpemUoKTsgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9CTFVFX0JJVFM6ICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsNCisNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXIt
PmdldERlcHRoU2l6ZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9
DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklU
UzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorDQorICAg
ICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6DQorICAgICAgICB7DQorICAg
ICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2Ft
cGxlciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0K
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRl
LmFjdGl2ZVNhbXBsZXJdLmlkKCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVy
ID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5h
Y3RpdmVTYW1wbGVyXS5pZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOg0KKyAgICAgICAgKnBhcmFt
cyA9IG1SZXNldFN0cmF0ZWd5Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1f
UFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0gMTsNCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQor
ICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7DQorICAgICAgICBicmVh
azsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQor
ICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMp
DQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERF
UFRIX0NMRUFSX1ZBTFVFIGluIHRoaXMgaW1wbGVtZW50YXRpb24NCisgICAgLy8gaXMgRkxPQVQg
cmF0aGVyIHRoYW4gSU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBz
cGVjLiBUaGlzIGlzIGR1ZQ0KKyAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBp
bnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24NCisg
ICAgLy8gaWYgcmV0dXJuZWQgZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBj
b252ZXJzaW9uIGlzIGFscmVhZHkgaW1wbGVtZW50ZWQgDQorICAgIC8vIGluIHRoZSBjYXNlIHRo
YXQgb25lIGNhbGxzIGdsR2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0
ZSB2YXJpYWJsZSwgd2UNCisgICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUg
ZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcNCisg
ICAgLy8gYXBwbGljYXRpb24uDQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSBtTnVtQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAg
KnR5cGUgPSBHTF9JTlQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7DQorICAgICAgICB9
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoNCisg
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xf
TUFYX1ZBUllJTkdfVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6DQorICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1JF
TkRFUkJVRkZFUl9TSVpFOg0KKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFU
UzoNCisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVJfQklORElORzoNCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOg0KKyAgICAg
IGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOg0KKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6
DQorICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOg0KKyAgICAgIGNh
c2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9I
SU5UOg0KKyAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
DQorICAgICAgY2FzZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQor
ICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAg
ICAgIGNhc2UgR0xfREVQVEhfQklUUzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisg
ICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6DQorICAgICAgY2FzZSBH
TF9DVUxMX0ZBQ0VfTU9ERToNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6DQorICAgICAgY2Fz
ZSBHTF9BQ1RJVkVfVEVYVFVSRToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
Og0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoN
CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1ZBTFVFX01BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOg0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfUEFTU19ERVBUSF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQ
VEhfUEFTUzoNCisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6DQorICAgICAgY2FzZSBHTF9CTEVO
RF9TUkNfUkdCOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOg0KKyAgICAgIGNhc2Ug
R0xfQkxFTkRfRFNUX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQToNCisgICAg
ICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFU
SU9OX0FMUEhBOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6DQorICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVB
Ul9WQUxVRToNCisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6DQorICAgICAgY2FzZSBHTF9N
QVhfVEVYVFVSRV9TSVpFOg0KKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RToNCisgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOg0KKyAgICAgIGNhc2UgR0xfU0FNUExF
UzoNCisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToNCisgICAg
ICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOg0KKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9CSU5ESU5HXzJEOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NV
QkVfTUFQOg0KKyAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoN
CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICBj
YXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToN
CisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9
IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisg
ICAgICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX01BWF9WSUVXUE9SVF9ESU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0g
R0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9WSUVXUE9SVDoNCisgICAgICBjYXNlIEdMX1NDSVNT
T1JfQk9YOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAg
ICAgICAgICpudW1QYXJhbXMgPSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0VfSU5WRVJUOg0KKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2Ug
R0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIg
YXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLA0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RklMTDogICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12
IHF1ZXJpZXMuDQorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZv
ciB0aGlzIHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwNCisg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1RF
U1Q6DQorICAgICAgY2FzZSBHTF9CTEVORDoNCisgICAgICBjYXNlIEdMX0RJVEhFUjoNCisgICAg
ICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6DQorICAgICAgICB7DQorICAgICAg
ICAgICAgKnR5cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6
DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9VTklUUzoNCisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToNCisgICAgICBj
YXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOg0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDoNCisg
ICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6DQorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6DQorICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToNCisgICAgICAgIHsNCisg
ICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAy
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9DTEVB
Ul9WQUxVRToNCisgICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOg0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgICp0eXBlID0gR0xfRkxPQVQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBBcHBs
aWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmll
d3BvcnQgcmVjdGFuZ2xlIGFuZA0KKy8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQ0KK2Jvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVW
aWV3cG9ydCkNCit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OLCBmYWxzZSk7DQorICAgIH0NCisNCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3Ig
YXR0YWNobWVudCB3ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudA0KKyAg
ICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUg
cG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLg0KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IE5VTEw7DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAg
ZWxzZQ0KKyAgICB7DQorICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0TnVsbENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAgaWYgKCFyZW5kZXJidWZm
ZXJPYmplY3QpDQorICAgIHsNCisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJi
dWZmZXIgZm9yIEZCTy4iKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAg
ICBib29sIHJlbmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsNCisgICAgdW5zaWduZWQgaW50IHJl
bmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7DQorICAg
IGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpDQor
ICAgIHsNCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICAgICAgaWYgKCFyZW5kZXJUYXJn
ZXQpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIg
dW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENv
bnRleHQgbXVzdCBiZSBsb3N0DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5
ID0gdHJ1ZTsgLy8gU2Npc3NvciBhcmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0
J3Mgc2l6ZS0tIHRoaXMgaXMgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMu
DQorICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0
aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAw
Ow0KKyAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIGlmIChm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAg
ew0KKyAgICAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpOw0KKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5
IG51bGwuIik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgDQorICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKSAhPSBHTF9OT05FKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKyAg
ICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQor
ICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIo
IkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKw0KKyAg
ICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fA0K
KyAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJp
YWwgfHwNCisgICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQpDQorICAgIHsNCisgICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsNCisgICAg
ICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsNCisgICAg
ICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7DQor
ICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKyAgICB9DQorDQorICAg
IGlmIChkZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOw0KKyAgICB9DQorDQorICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8
fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsN
CisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7DQorICAgICAgICBt
UmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsNCisN
CisgICAgZmxvYXQgek5lYXIgPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7DQorICAgIGZsb2F0IHpG
YXIgPSBjbGFtcDAxKG1TdGF0ZS56RmFyKTsNCisNCisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQ0K
KyAgICB7DQorICAgICAgICB2aWV3cG9ydC5YID0gMDsNCisgICAgICAgIHZpZXdwb3J0LlkgPSAw
Ow0KKyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aDsNCisg
ICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsNCisgICAg
ICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IDEuMGY7
DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAo
bVN0YXRlLnZpZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNj
LldpZHRoKSk7DQorICAgICAgICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WSwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAg
ICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+
KHZpZXdwb3J0LlgpKTsNCisgICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydEhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7DQorICAgICAgICB2aWV3cG9y
dC5NaW5aID0gek5lYXI7DQorICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsNCisgICAgfQ0K
Kw0KKyAgICBpZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyDQor
ICAgIH0NCisNCisgICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRp
YWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmll
d3BvcnQpICE9IDApDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3
cG9ydCk7DQorICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsNCisgICAgICAgIG1WaWV3
cG9ydEluaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
Ow0KKyAgICB9DQorDQorICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkpDQorICAgIHsNCisgICAg
ICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVD
VCByZWN0Ow0KKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAg
ICAgICAgcmVjdC50b3AgPSBjbGFtcChtU3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICByZWN0LnJpZ2h0
ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVj
dC5ib3R0b20gPSBjbGFtcChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0KTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7DQorICAg
ICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQor
ICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkNCisgICAg
ew0KKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
DQorICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOw0KKw0KKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHBy
b2dyYW1CaW5hcnktPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7DQorICAgICAgICBHTGZs
b2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWln
aHR9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXpl
LCAxLCB4eSk7DQorDQorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1
dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkuDQorICAgICAgICBH
TGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOw0KKyAgICAg
ICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0IC8gMi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxv
YXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52
aWV3cG9ydEhlaWdodCAvIDIuMGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTRmdihjb29yZCwgMSwgd2h4eSk7DQorDQorICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1C
aW5hcnktPmdldER4RGVwdGhMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCBkelsyXSA9IHso
ekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07DQorICAgICAgICBw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7DQorDQorICAgICAgICBH
TGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KTsNCisgICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIg
LSB6TmVhcn07DQorICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFu
Z2UsIDEsIG5lYXJGYXJEaWZmKTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsN
CisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgZml4
ZWQtZnVuY3Rpb24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBz
dGVuY2lsaW5nLCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6
YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgRnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAg
IEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7
DQorICAgIEdMaW50IGNjdyA9IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7DQorICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOw0KKw0KKyAgICBH
TGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9j
YXRpb24oKTsNCisgICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01v
ZGUpOw0KKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEs
ICZhbHdheXNGcm9udCk7DQorDQorICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZp
ZXIgPSBtRGlzcGxheS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsNCisgICAgYm9vbCB6ZXJvQ29s
b3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsNCisgICAgLy8g
QXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEg
emVybyBjb2xvcg0KKyAgICAvLyB3cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBo
YXZlIGluY29ycmVjdCByZXN1bHRzLiBJbnN0ZWFkLA0KKyAgICAvLyBzZXQgYSBub256ZXJvIGNv
bG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubw0KKyAg
ICAvLyBkcmF3aW5nIGlzIGRvbmUuDQorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9h
bmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkNCisNCisgICAgaWYgKG1DdWxsU3RhdGVE
aXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuY3Vs
bEZhY2UpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBt
U3RhdGUuZnJvbnRGYWNlKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQz
RENVTExfTk9ORSk7DQorICAgICAgICB9DQorDQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBm
YWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkNCisgICAgew0KKyAg
ICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252ZXJ0
Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNl
DQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgRDNEWkJfRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURlcHRoU3Rh
dGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93
ZWQgJiYgKG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkNCisgICAgew0KKyAg
ICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgICAgICBtTWFza1N0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQ0KKyAgICB7DQor
ICAgICAgICBpZiAobVN0YXRlLmJsZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAg
ICAgICAgICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEg
JiYgbVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAm
Jg0KKyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FM
UEhBICYmIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29s
b3IpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNU
T1IsIEQzRENPTE9SX1JHQkEodW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpKSk7DQorICAgICAgICAgICAgfQ0K
Kw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBl
czJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsNCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252
ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsNCisNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJj
ZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IA0KKyAgICAgICAgICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCANCisgICAg
ICAgICAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gbVN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7DQorDQorICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEs
IGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhKSk7DQorICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhB
LCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsNCisgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBl
czJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFC
TEUsIEZBTFNFKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQ
SEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUJsZW5kU3Rh
dGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkg
fHwgbUZyb250RmFjZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxU
ZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJV
RSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURT
VEVOQ0lMTU9ERSwgVFJVRSk7DQorDQorICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVk
IGJ5IEQzRDkNCisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NX
X1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVGOw0KKyAgICAgICAgICAgIGNvbnN0IEQzRFJF
TkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVOQ0lMTUFTSzsN
CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxX
UklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOw0KKyAgICAgICAgICAgIGlmIChtU3Rh
dGUuc3RlbmNpbFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgDQor
ICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZiB8fCANCisgICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVu
Y2lsQmFja01hc2spDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFy
YXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBz
dGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOw0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAg
IH0NCisNCisgICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNp
bCByZWYNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICBHTHVpbnQg
bWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsN
CisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJ
TEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykp
Ow0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAo
bVN0YXRlLnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJl
ZiA6IG1heFN0ZW5jaWwpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1df
U1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7DQorDQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVO
Q0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwp
KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUws
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVO
Q0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NE
ZXB0aFBhc3MpKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0ND
V19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRl
LnN0ZW5jaWxCYWNrRnVuYykpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNf
Q0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNp
bCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01h
c2spOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJ
TCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0
ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxa
RkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVO
Q0lMUEFTUywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29u
dmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7DQorICAgICAg
ICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgICAgICBtRnJvbnRGYWNl
RGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQ0KKyAg
ICB7DQorICAgICAgICBpbnQgY29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0
YXRlLmNvbG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCANCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSwg
bVN0YXRlLmNvbG9yTWFza0FscGhhKTsNCisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAh
emVyb0NvbG9yTWFza0FsbG93ZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRW5hYmxl
IGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXdu
Lg0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVF
TkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOw0KKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9a
RVJPKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxF
TkQsIEQzREJMRU5EX09ORSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7DQorICAgICAgICB9DQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sg
PyBUUlVFIDogRkFMU0UpOw0KKw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7DQor
ICAgIH0NCisNCisgICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkNCisgICAgew0KKyAg
ICAgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NM
T1BFU0NBTEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3Ip
KTsNCisgICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHln
b25PZmZzZXRVbml0cywgLShpbnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOw0KKyAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICoo
KERXT1JEKikmZGVwdGhCaWFzKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAg
ICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7DQorICAgICAgICB9DQorDQorICAgICAg
ICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bVNhbXBsZVN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxw
aGFUb0NvdmVyYWdlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxw
aGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsNCisgICAgICAgIH0NCisNCisgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBU
UlVFKTsNCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOw0KKyAgICAgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsNCisNCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7DQorDQorICAg
ICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVl
ID49IHRocmVzaG9sZCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJlc2hvbGQgKz0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNr
IHw9IDE7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1hc2sgPSB+
bWFzazsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsNCisgICAgICAgIH0NCisgICAgICAg
IGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobURpdGhl
clN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7DQorDQorICAg
ICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBD
b250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpDQorew0KKyAgICBUcmFuc2xhdGVk
QXR0cmlidXRlIGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsNCisNCisgICAgR0xlbnVt
IGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3QsIGNvdW50
LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOw0KKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMs
IGdldEN1cnJlbnRQcm9ncmFtKCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7DQorfQ0KKw0KKy8v
IEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERp
cmVjdDNEIDkgZGV2aWNlDQorR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUs
IFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykNCit7DQorICAgIEdMZW51bSBlcnIgPSBt
SW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsNCisNCisgICAgaWYg
KGVyciA9PSBHTF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgaWYgKGluZGV4SW5mby0+c2Vy
aWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0SW5kaWNlcyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsNCisgICAgICAgICAgICBtQXBw
bGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgcmV0dXJuIGVycjsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hh
ZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFw
cGx5U2hhZGVycygpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVu
dFByb2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaWYgKHByb2dyYW1PYmplY3QtPmdl
dFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCkNCisgICAgew0KKyAgICAgICAgSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVy
dGV4U2hhZGVyKCk7DQorICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVy
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxTaGFkZXIoKTsNCisNCisgICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOw0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxV
bmlmb3JtcygpOw0KKyAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVj
dC0+Z2V0U2VyaWFsKCk7DQorICAgIH0NCisNCisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlm
b3JtcygpOw0KK30NCisNCisvLyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0
ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KCkNCit7DQorICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7DQorDQorICAgIGlmICht
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBhcHBseVRleHR1cmVzKFNB
TVBMRVJfVkVSVEVYKTsNCisgICAgfQ0KK30NCisNCisvLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNh
bXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsDQorLy8gbG9va3MgdXAg
dGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0
eXBlLA0KKy8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJp
bmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuDQordm9pZCBDb250ZXh0OjphcHBseVRl
eHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaW50IHNhbXBs
ZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERp
cmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlDQorICAgIHVuc2lnbmVkIGlu
dCAqYXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBs
aWVkVGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7DQorICAgIGludCBk
M2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVY
VEVYVFVSRVNBTVBMRVIwOw0KKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsNCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4
ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykNCisgICAg
ew0KKyAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1h
cHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0
IGluZGV4DQorICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBs
ZXJPZmZzZXQ7DQorDQorICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpDQorICAgICAgICB7
DQorICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsNCisNCisgICAgICAgICAg
ICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1
cmVUeXBlKTsNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpOw0KKw0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFt
ZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVy
ZS0+Z2V0VGV4dHVyZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkNCisg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFy
YW1ldGVycygpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7
DQorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdl
dE1hZ0ZpbHRlcigpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRl
eHR1cmVXcmFwKHdyYXBTKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0
VGV4dHVyZVdyYXAod3JhcFQpKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpD
b252ZXJ0TWFnRmlsdGVyKG1hZ0ZpbHRlcikpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1p
bkZpbHRlciwgJmQzZE1pcEZpbHRlcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5G
aWx0ZXIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsNCisgICAgICAg
ICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUlt
YWdlcygpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7DQorICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlKGQzZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4
dHVyZSgpKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBhcHBsaWVk
VGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOw0KKyAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5yZXNldERpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOw0KKyAgICAgICAgICAgICAg
ICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsNCisgICAgICAgICAgICB9
DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2Ft
cGxlclJhbmdlOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQ0K
KyAgICB7DQorICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAh
PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxl
ckluZGV4ICsgZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7DQorICAgICAgICAgICAgYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQor
DQordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQ0KK3sNCisg
ICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorDQor
ICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQor
ICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlw
ZSwgbVN0YXRlLnBhY2tBbGlnbm1lbnQpOw0KKyAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hl
Y2sNCisgICAgaWYgKGJ1ZlNpemUpDQorICAgIHsNCisgICAgICAgIGludCByZXF1aXJlZFNpemUg
PSBvdXRwdXRQaXRjaCAqIGhlaWdodDsNCisgICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVm
U2l6ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBt
dXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQ0KKyAgICB9DQorDQorICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjOw0KKyAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOw0KKw0KKyAgICBp
ZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkNCisgICAgew0K
KyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVz
aW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0DQorICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBib29sIGRpcmVjdFRv
UGl4ZWxzID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkg
PD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJg0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYm
IFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VY
VCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7DQorICAgIGlmIChkaXJlY3RUb1BpeGVscykN
CisgICAgew0KKyAgICAgICAgLy8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRs
ZSB0byB3cml0ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdzIG1lbW9yeQ0KKyAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2Mu
SGVpZ2h0LCBkZXNjLkZvcm1hdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZw
aXhlbHMpOw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlDQorICAgICAgICAg
ICAgZGlyZWN0VG9QaXhlbHMgPSBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBp
ZiAoIWRpcmVjdFRvUGl4ZWxzKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2Mu
Rm9ybWF0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7DQorICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7DQorICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQor
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBz
eXN0ZW1TdXJmYWNlKTsNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIHJlbmRl
clRhcmdldCA9IE5VTEw7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgLy8gSXQgdHVybnMg
b3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcg0KKyAgICAgICAg
Ly8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLg0KKyAgICAgICAgaWYgKGNoZWNrRGV2aWNl
TG9zdChyZXN1bHQpKQ0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
Ow0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKw0KKyAgICBp
ZiAoZGlyZWN0VG9QaXhlbHMpDQorICAgIHsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVh
c2UoKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHJlY3Q7DQorICAg
IHJlY3QubGVmdCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7
DQorICAgIHJlY3QudG9wID0gY2xhbXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVp
Z2h0KSk7DQorICAgIHJlY3QucmlnaHQgPSBjbGFtcCh4ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihkZXNjLldpZHRoKSk7DQorICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorDQorICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2s7DQorICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2Nr
LCAmcmVjdCwgRDNETE9DS19SRUFET05MWSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkN
CisgICAgew0KKyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIHN5c3RlbVN1cmZhY2Ut
PlJlbGVhc2UoKTsNCisNCisgICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0
byBnZW5lcmF0ZQ0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWdu
ZWQgY2hhciopcGl4ZWxzOw0KKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVk
IHNob3J0KilwaXhlbHM7DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsNCisgICAgaW50
IGlucHV0UGl0Y2g7DQorICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpDQorICAgIHsN
CisgICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBp
dGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsNCisgICAgICAgIGlucHV0UGl0Y2gg
PSAtbG9jay5QaXRjaDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJj
ZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOw0KKyAgICAgICAgaW5wdXRQaXRjaCA9IGxv
Y2suUGl0Y2g7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRv
bSAtIHJlY3QudG9wOyBqKyspDQorICAgIHsNCisgICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBE
M0RGTVRfQThSOEc4QjggJiYNCisgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYN
CisgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBFWFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4NCisg
ICAgICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3
aXRoIG5vDQorICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJl
bG93Lg0KKyAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLA0KKyAgICAg
ICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwNCisgICAgICAgICAgICAgICAg
ICAgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogNCk7DQorICAgICAgICAgICAgY29udGludWU7
DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQg
LSByZWN0LmxlZnQ7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmbG9hdCByOw0KKyAg
ICAgICAgICAgIGZsb2F0IGc7DQorICAgICAgICAgICAgZmxvYXQgYjsNCisgICAgICAgICAgICBm
bG9hdCBhOw0KKw0KKyAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1Og0KKyAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAg
ICAgICAgICAgICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgw
MDFGKSAqICgxLjBmIC8gMHgwMDFGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYg
MHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdi
ICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Og0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBh
cmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gp
Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAw
LjBmOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8g
MHgwMDFGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4w
ZiAvIDB4MDNFMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICog
KDEuMGYgLyAweDdDMDApOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25l
ZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisgICAgICAgICAg
ICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsN
CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAw
eDAwMDAwMEZGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDAp
ICogKDEuMGYgLyAweDAwMDBGRjAwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAm
IDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4Og0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRj
aCk7DQorDQorICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAg
ICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBG
RjAwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOg0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5z
aWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAg
ICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAw
MCk7DQorICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBm
IC8gMHgwMDAwMDNGRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZG
QzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFy
Z2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
MzJCMzJHMzJSMzJGOg0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQNCisgICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJj
ZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOw0KKyAgICAgICAgICAgICAgICAgICAg
ZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7DQor
ICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICog
aW5wdXRQaXRjaCkgKyAyKTsNCisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNv
dXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2
QjE2RzE2UjE2RjoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8g
ZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3Ro
ZXIgd2F5IHJvdW5kDQorICAgICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOw0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2
Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQpOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgYSA9IGFiZ3JbM107DQorICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsN
CisgICAgICAgICAgICAgICAgICAgIGcgPSBhYmdyWzFdOw0KKyAgICAgICAgICAgICAgICAgICAg
ciA9IGFiZ3JbMF07DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUUNCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
ICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6DQor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiByICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7
DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoNCisgICAgICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9CWVRFOg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsNCisg
ICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1
bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciAr
IDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRj
aCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsNCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNF9SRVZfRVhUOg0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRo
ZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBz
ZWN0aW9uDQorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZv
bGxvd3M6DQorICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEg
ICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQor
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAg
ICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAg
fCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwNCisgICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAg
Ly8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0
aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguDQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSAr
IGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8DQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41Zikg
PDwgOCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICog
ZyArIDAuNWYpIDw8IDQpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhU
Og0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNw
ZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAg
ICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDgg
ICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8v
IHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAg
fCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguDQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAo
KHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8DQorICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwg
NSkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiAr
IDAuNWYpIDw8IDApOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUDQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzU6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFDQorICAg
ICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0gDQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9y
dCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7DQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKw0KKyAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6Y2xlYXIo
R0xiaXRmaWVsZCBtYXNrKQ0KK3sNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmICghZnJhbWVidWZmZXJPYmplY3Qg
fHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIERXT1JEIGZsYWdzID0gMDsNCisNCisg
ICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNr
ICY9IH5HTF9DT0xPUl9CVUZGRVJfQklUOw0KKw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1RBUkdFVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0K
KyAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIG1h
c2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFz
ayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkN
CisgICAgICAgIHsNCisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7DQor
DQorICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAg
ICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAoZnJhbWVidWZm
ZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZm
ZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAg
ICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAg
ICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwt
PkdldERlc2MoJmRlc2MpOw0KKyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0K
Kw0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVu
Y2lsU2l6ZShkZXNjLkZvcm1hdCk7DQorICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4
MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOw0KKw0KKyAgICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNr
ZWQgIT0gMHgwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNE
Q0xFQVJfU1RFTkNJTDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgaWYgKG1hc2sgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOw0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkp
ICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRo
ZSB2aWV3cG9ydA0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgRDNE
Q09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWUuYWxwaGEpLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+
KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVh
clZhbHVlLmJsdWUpKTsNCisgICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENs
ZWFyVmFsdWUpOw0KKyAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAm
IDB4MDAwMDAwRkY7DQorDQorICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxw
aGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFz
a0FscGhhOw0KKw0KKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxh
Z3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9
IHN0ZW5jaWxVbm1hc2tlZDsNCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9
IChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3Jl
ZW4gJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNv
bG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7DQorDQorICAgIGlmIChuZWVkTWFza2VkQ29s
b3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyKQ0KKyAgICB7DQorICAgICAgICAvLyBT
dGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhl
IGNsZWFyIGNhbGwgaXMgc2F2ZWQuDQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVk
IGluIG9ubHkgc29tZSBwYXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhh
dA0KKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4NCisgICAgICAgIEhSRVNVTFQgaHI7
DQorICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGhyID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7DQorICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VM
TF9OT05FKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxM
TU9ERSwgRDNERklMTF9TT0xJRCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgMCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5V
TEwpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBUUlVFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRB
X1RGQUNUT1IpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RP
Uik7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZB
Q1RPUiwgY29sb3IpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7DQorICAgICAgICAgICAgDQorICAgICAgICAg
ICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAx
KTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0
ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09V
VE9GTUVNT1JZKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlICE9IE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNh
dmVkU3RhdGUtPkNhcHR1cmUoKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
DQorICAgICAgICB9DQorDQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
V1JJVEVFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOw0KKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFC
TEUsIDApOw0KKw0KKyAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1T
dGF0ZS5jb2xvck1hc2tHcmVlbiwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1h
c2tBbHBoYSkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDAp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYg
KGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwg
RkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5D
SUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMUkVGLCBzdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRl
bWFzayk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNE
U1RFTkNJTE9QX1JFUExBQ0UpOw0KKyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgbURldmljZS0+
U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcx
KTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
UkFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RG
QUNUT1IpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZB
Q1RPUiwgY29sb3IpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsNCisNCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
ZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdl
dCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMNCisgICAgICAgIHF1YWRbMF1bMF0gPSAtMC41
ZjsNCisgICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVm
Ow0KKyAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzBdWzNdID0gMS4w
ZjsNCisNCisgICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAu
NWY7DQorICAgICAgICBxdWFkWzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41
ZjsNCisgICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFsxXVszXSA9IDEu
MGY7DQorDQorICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzJdWzFd
ID0gLTAuNWY7DQorICAgICAgICBxdWFkWzJdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMl1b
M10gPSAxLjBmOw0KKw0KKyAgICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldp
ZHRoIC0gMC41ZjsNCisgICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRb
M11bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFszXVszXSA9IDEuMGY7DQorDQorICAgICAgICBt
RGlzcGxheS0+c3RhcnRTY2VuZSgpOw0KKyAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQ
KEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOw0KKw0KKyAg
ICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUp
Ow0KKyAgICAgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIs
IGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAg
ZWxzZSBpZiAoZmxhZ3MpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEws
IGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzKQ0KK3sNCisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0p
DQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQor
ICAgIH0NCisNCisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOw0KKyAgICBpbnQg
cHJpbWl0aXZlQ291bnQ7DQorDQorICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUo
bW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQ0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7DQorDQorICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFh
cHBseVJlbmRlclRhcmdldChmYWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAg
fQ0KKw0KKyAgICBhcHBseVN0YXRlKG1vZGUpOw0KKw0KKyAgICBHTHNpemVpIHJlcGVhdERyYXcg
PSAxOw0KKyAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBp
bnN0YW5jZXMsICZyZXBlYXREcmF3KTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKGVycik7DQorICAgIH0NCisNCisgICAgYXBwbHlT
aGFkZXJzKCk7DQorICAgIGFwcGx5VGV4dHVyZXMoKTsNCisNCisgICAgaWYgKCFnZXRDdXJyZW50
UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAg
IH0NCisNCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQ0KKyAgICB7DQorICAgICAgICBt
RGlzcGxheS0+c3RhcnRTY2VuZSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAobW9kZSA9PSBH
TF9MSU5FX0xPT1ApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50
LCBHTF9OT05FLCBOVUxMLCAwKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGluc3Rh
bmNlcyA+IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNv
dW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsN
CisgICAgICAgICAgICBpZiAoY291bnRpbmdJQikNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRp
Y2VzKGNvdW50aW5nSUItPmdldEJ1ZmZlcigpKTsNCisgICAgICAgICAgICAgICAgICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsNCisgICAgICAgICAgICAgICAg
fQ0KKw0KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkr
KykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+RHJh
d0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgMCwgY291bnQsIDAsIHByaW1pdGl2
ZUNvdW50KTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4i
KTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UN
CisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2
ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2
b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpDQorew0K
KyAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWluZGlj
ZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpDQorICAgIHsNCisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNEUFJJTUlU
SVZFVFlQRSBwcmltaXRpdmVUeXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQorDQorICAg
IGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVU
eXBlLCAmcHJpbWl0aXZlQ291bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7DQorDQorICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQorICAgICAg
ICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkp
DQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0YXRlKG1v
ZGUpOw0KKw0KKyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsNCisgICAgR0xlbnVt
IGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRl
eEluZm8pOw0KKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZXJyb3IoZXJyKTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHZlcnRleENvdW50ID0g
aW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsNCisgICAgR0xzaXpl
aSByZXBlYXREcmF3ID0gMTsNCisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZv
Lm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7DQorICAgIGlm
IChlcnIgIT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihlcnIp
Ow0KKyAgICB9DQorDQorICAgIGFwcGx5U2hhZGVycygpOw0KKyAgICBhcHBseVRleHR1cmVzKCk7
DQorDQorICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52
YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWN1bGxTa2lwc0RyYXco
bW9kZSkpDQorICAgIHsNCisgICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7DQorDQorICAg
ICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAg
IA0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwg
LShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50
LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBi
bG9jayBpcyBmYWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVlDQordm9pZCBDb250ZXh0
OjpzeW5jKGJvb2wgYmxvY2spDQorew0KKyAgICBtRGlzcGxheS0+c3luYyhibG9jayk7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkNCit7DQorICAgIC8vIEdldCB0
aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdw0KKyAgICBpZiAodHlwZSAhPSBHTF9O
T05FICYmIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpDQorICAgIHsNCisgICAgICAg
IEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0K
KyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5k
aWNlcyk7DQorICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGlu
ZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0Ow0KKyAgICB9DQorDQorICAgIFVJTlQgc3RhcnRJ
bmRleCA9IDA7DQorICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7DQorDQorICAgIGlmIChzdXBw
b3J0czMyYml0SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVk
ZWQgPSAoY291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOw0KKw0KKyAgICAgICAgaWYg
KCFtTGluZUxvb3BJQikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5l
dyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpF
LCBEM0RGTVRfSU5ERVgzMik7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxpbmVMb29w
SUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShz
cGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKTsNCisNCisgICAgICAgICAgICBVSU5UIG9mZnNl
dCA9IDA7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOw0KKyAg
ICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyA0Ow0KKyAgICAgICAgICAgIA0KKyAgICAg
ICAgICAgIGlmIChkYXRhKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9O
T05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsNCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVieXRlKj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGlj
ZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsNCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUxpbmVM
b29wSUItPnVubWFwKCk7DQorICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7DQorICAg
ICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAg
ICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQg
c2hvcnQpOw0KKw0KKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJ
TklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgxNik7DQorICAgICAgICB9DQor
DQorICAgICAgICBpZiAobUxpbmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxp
bmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOw0K
Kw0KKyAgICAgICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsNCisgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29wSUItPm1h
cChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZz
ZXQgLyAyOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcN
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g
aTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291
bnRdID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGlj
ZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0
YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07DQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOw0KKyAg
ICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6DQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAg
ICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVpbnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAg
IH0NCisNCisgICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQorICAgICAgICAg
ICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorICAgIA0KKyAgICBpZiAoc3VjY2VlZGVkKQ0KKyAgICB7DQorICAgICAgICBpZiAobUFw
cGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkp
Ow0KKyAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFs
KCk7DQorICAgICAgICB9DQorDQorICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2
ZShEM0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4
LCBjb3VudCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxk
IG5vdCBjcmVhdGUgYSBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOw0K
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQ0KK3sNCisgICAgbUludmFsaWRFbnVt
ID0gdHJ1ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQ0KK3sN
CisgICAgbUludmFsaWRWYWx1ZSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3Jk
SW52YWxpZE9wZXJhdGlvbigpDQorew0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQ0KK3sNCisgICAgbU91dE9m
TWVtb3J5ID0gdHJ1ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVi
dWZmZXJPcGVyYXRpb24oKQ0KK3sNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9
IHRydWU7DQorfQ0KKw0KKy8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xl
YXIgaXRzIGZsYWcsIGlmIGFueS4NCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUg
cGFnZSAxMy4NCitHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQ0KK3sNCisgICAgaWYgKG1JbnZh
bGlkRW51bSkNCisgICAgew0KKyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7DQorDQorICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9FTlVNOw0KKyAgICB9DQorDQorICAgIGlmIChtSW52YWxp
ZFZhbHVlKQ0KKyAgICB7DQorICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7DQorDQorICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9WQUxVRTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFs
aWRPcGVyYXRpb24pDQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7
DQorDQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgIH0NCisNCisg
ICAgaWYgKG1PdXRPZk1lbW9yeSkNCisgICAgew0KKyAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFs
c2U7DQorDQorICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsNCisgICAgfQ0KKw0KKyAg
ICBpZiAobUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikNCisgICAgew0KKyAgICAgICAgbUlu
dmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIHJldHVybiBH
TF9OT19FUlJPUjsNCit9DQorDQorR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkNCit7
DQorICAgIGlmIChtUmVzZXRTdGF0dXMgPT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAg
IGJvb2wgbG9zdCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOw0KKw0KKyAgICAgICAgaWYg
KGxvc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxv
c3QoKTsgICAvLyBTZXRzIG1SZXNldFN0YXR1cw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IEdMZW51bSBzdGF0dXMgPSBtUmVzZXRTdGF0dXM7DQorDQorICAgIGlmIChtUmVzZXRTdGF0dXMg
IT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmlj
ZVJlc2V0dGFibGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBH
TF9OT19FUlJPUjsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJuIHN0YXR1
czsNCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpDQor
ew0KKyAgICByZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQpOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7DQorfQ0KKw0KK2ludCBD
b250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZB
UllJTkdfVkVDVE9SU19TTTI7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhp
bXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBw
b3J0c1ZlcnRleFRleHR1cmUgPyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDog
MDsNCit9DQorDQordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUyArIGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOw0KK30NCisNCitpbnQg
Q29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlNfU00zIDogTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7DQorfQ0KKw0KK2lu
dCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtTWF4U3VwcG9ydGVkU2FtcGxlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE5lYXJlc3RT
dXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0DQor
ew0KKyAgICBpZiAocmVxdWVzdGVkID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXF1
ZXN0ZWQ7DQorICAgIH0NCisNCisgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25z
dF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsNCisgICAg
aWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpDQorICAgIHsNCisgICAgICAgIGlmIChpdHIt
PnNlY29uZFtpXSAmJiBpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHJldHVybiBpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJl
dHVybiAtMTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOw0KK30NCisNCitib29s
IENvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBw
b3J0c0RYVDFUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRl
eHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wg
Q29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1T
dXBwb3J0c0RYVDVUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MzJUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRleHR1
cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsNCit9
DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsNCit9DQorDQorYm9vbCBD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdA0KK3sNCisgICAgcmV0
dXJuIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisNCitpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1h
eGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4VGV4dHVy
ZURpbWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURp
bWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9u
Ow0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsNCit9DQorDQorYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOw0K
K30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFu
Y2luZygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzSW5zdGFuY2luZzsNCit9DQor
DQordm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikNCit7DQorICAgIC8v
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIyOg0KKyAgICAvLyBJZiBhIGJ1
ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRv
IHRoYXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQNCisgICAgLy8gKGkuZS4gaW4gdGhl
IHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uDQor
DQorICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgaWYg
KG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAg
IGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmlidXRlKyspDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIu
c2V0KE5VTEwpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDMuOCBwYWdlIDg0Og0KKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRl
bGV0ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0
aGF0IHRleHR1cmUgb2JqZWN0IGFyZQ0KKyAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0
IHplcm8NCisNCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09V
TlQ7IHR5cGUrKykNCisgICAgew0KKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBs
ZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3Nh
bXBsZXJdLmlkKCkgPT0gdGV4dHVyZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDQuNCBwYWdlIDExMjoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBk
ZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzDQorICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVy
ZTJEIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNo
bWVudCBwb2ludCB0byB3aGljaCB0aGlzDQorICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0
aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLg0KKw0KKyAgICBGcmFtZWJ1ZmZlciAqcmVh
ZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorICAgIEZyYW1lYnVmZmVyICpk
cmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0
dXJlKHRleHR1cmUpOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJh
d0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0Zy
YW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAg
Ly8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3Og0KKyAgICAvLyBJZiBh
IGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVC
VUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoDQorICAgIC8vIEJpbmRGcmFtZWJ1ZmZl
ciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZy
YW1lYnVmZmVyIG9mIHplcm8uDQorDQorICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09
IGZyYW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0K
KyAgICB9DQorDQorICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVy
KQ0KKyAgICB7DQorICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIp
DQorew0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6DQor
ICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRF
UkJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcg0KKyAg
ICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBu
YW1lIG9mIHplcm8uDQorDQorICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVu
ZGVyYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKyAgICB9
DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToNCisg
ICAgLy8gSWYgYSByZW5kZXJidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdl
IGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsDQorICAgIC8v
IHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVk
LCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQNCisgICAgLy8g
cG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBi
b3VuZCBmcmFtZWJ1ZmZlci4NCisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9
IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZmZXIpDQor
ICAgIHsNCisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcik7DQorICAgIH0NCisNCisgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlciAmJiBkcmF3RnJh
bWVidWZmZXIgIT0gcmVhZEZyYW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBkcmF3RnJhbWVi
dWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KKyAgICB9DQorfQ0KKw0K
K1RleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUp
DQorew0KKyAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsN
CisNCisgICAgaWYgKHQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgc3RhdGljIGNvbnN0IEdM
dWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07DQorDQorICAgICAgICBzd2l0Y2ggKHR5
cGUpDQorICAgICAgICB7DQorICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsNCisgICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gVEVYVFVS
RV8yRA0KKw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6DQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4
dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsNCisgICAgICAgICAgICAgICAgaW5jb21wbGV0
ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7DQorICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1
YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsN
CisNCisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7DQorICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAg
ICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1
YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7DQorICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisNCisgICAgICAgICAg
ICAgIHQgPSBpbmNvbXBsZXRlQ3ViZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICB9DQorDQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNl
dCh0KTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdDsNCit9DQorDQorYm9vbCBDb250ZXh0Ojpj
dWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSkNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3Vs
bEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5n
bGVNb2RlKGRyYXdNb2RlKTsNCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShH
TGVudW0gZHJhd01vZGUpDQorew0KKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQ0KKyAgICB7DQorICAg
ICAgY2FzZSBHTF9UUklBTkdMRVM6DQorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46DQorICAg
ICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAg
IGNhc2UgR0xfUE9JTlRTOg0KKyAgICAgIGNhc2UgR0xfTElORVM6DQorICAgICAgY2FzZSBHTF9M
SU5FX0xPT1A6DQorICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOg0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgcmV0
dXJuIGZhbHNlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQg
aW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykNCit7DQorICAgIEFTU0VSVChpbmRleCA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpOw0KKw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2lu
ZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOw0KKyAgICBtU3RhdGUu
dmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOw0KKyAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVz
WzNdOw0KKw0KKyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGluZGV4
KTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBp
bmRleCwgR0x1aW50IGRpdmlzb3IpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKTsNCisNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURp
dmlzb3IgPSBkaXZpc29yOw0KK30NCisNCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2lu
ZyBvcmRlcg0KKy8vIE9FUyBleHRlbnNpb25zDQorLy8gRVhUIGV4dGVuc2lvbnMNCisvLyBWZW5k
b3IgZXh0ZW5zaW9ucw0KK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpDQorew0K
KyAgICBtRXh0ZW5zaW9uU3RyaW5nID0gIiI7DQorDQorICAgIC8vIE9FUyBleHRlbnNpb25zDQor
ICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7DQorICAgIH0NCisNCisg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7DQor
ICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOw0K
KyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOw0KKyAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsNCisNCisgICAg
aWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgIjsNCisgICAgfQ0KKyAgICBp
ZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7DQorICAg
IH0NCisgICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7DQorICAgIH0NCisg
ICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsNCisgICAg
fQ0KKw0KKyAgICBpZiAoc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3QgIjsNCisgICAgfQ0K
Kw0KKyAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9y
dHNPY2NsdXNpb25RdWVyaWVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOw0KKyAgICB9DQorDQorICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7DQorICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7DQorDQorICAgIGlmIChzdXBwb3J0
c0RYVDFUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICI7DQorICAgIH0NCisNCisgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7DQorICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsNCisNCisgICAgLy8g
QU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVz
KCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRo
X3RleHR1cmUgIjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9ibGl0ICI7DQorICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
IT0gMCkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3VwcG9ydHNJbnN0
YW5jaW5nKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xF
X2luc3RhbmNlZF9hcnJheXMgIjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7DQorDQorICAgIGlmIChzdXBwb3J0
c0RYVDNUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsNCisgICAgfQ0KKyAgICBpZiAoc3Vw
cG9ydHNEWFQ1VGV4dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7DQorICAgIH0NCisNCisgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOw0KKyAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsNCisN
CisgICAgLy8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBv
cnRzRXZlbnRRdWVyaWVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX05WX2ZlbmNlICI7DQorICAgIH0NCisNCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBl
bmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsNCisgICAgaWYgKGVu
ZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
Zy5yZXNpemUoZW5kKzEpOw0KKyAgICB9DQorfQ0KKw0KK2NvbnN0IGNoYXIgKkNvbnRleHQ6Omdl
dEV4dGVuc2lvblN0cmluZygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmlu
Zy5jX3N0cigpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpDQor
ew0KKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdl
dEFkYXB0ZXJJZGVudGlmaWVyKCk7DQorDQorICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAo
IjsNCisgICAgbVJlbmRlcmVyU3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOw0KKyAg
ICBtUmVuZGVyZXJTdHJpbmcgKz0gIikiOw0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0Ojpn
ZXRSZW5kZXJlclN0cmluZygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5n
LmNfc3RyKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNy
Y1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCANCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2spDQorew0KKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZy
YW1lYnVmZmVyKCk7DQorICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fA0KKyAg
ICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlm
IChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGludCBy
ZWFkQnVmZmVyV2lkdGggPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdp
ZHRoKCk7DQorICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsNCisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsNCisgICAgaW50IGRy
YXdCdWZmZXJIZWlnaHQgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhl
aWdodCgpOw0KKw0KKyAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgIFJFQ1QgZGVzdFJlY3Q7DQor
DQorICAgIGlmIChzcmNYMCA8IHNyY1gxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBzcmNYMDsNCisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMTsNCisgICAgICAg
IGRlc3RSZWN0LmxlZnQgPSBkc3RYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7
DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBz
cmNYMTsNCisgICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMTsNCisgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSBzcmNYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7DQorICAg
IH0NCisNCisgICAgaWYgKHNyY1kwIDwgc3JjWTEpDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJl
Y3QuYm90dG9tID0gc3JjWTE7DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsNCisg
ICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTA7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBk
c3RZMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90
dG9tID0gc3JjWTA7DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMDsNCisgICAgICAg
IHNvdXJjZVJlY3QudG9wID0gc3JjWTE7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsN
CisgICAgfQ0KKw0KKyAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0Ow0K
KyAgICBSRUNUIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7DQorDQorICAgIGlmIChtU3Rh
dGUuc2Npc3NvclRlc3QpDQorICAgIHsNCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMg
b2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVz
dA0KKyAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0
eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCogb2YgdGhlDQorICAgICAgICAvLyByZWN0IHdp
bGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHNjaXNzb3JZLCByYXRoZXIgdGhhbiB0aGUgYm90dG9tLg0K
KyAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpDQorICAgICAgICB7
DQorICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNzb3JYIC0gZGVzdFJlY3QubGVm
dDsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JY
Ow0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCAr
IG1TdGF0ZS5zY2lzc29yV2lkdGgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IHhEaWZm
ID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0
aCk7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3Nv
clggKyBtU3RhdGUuc2Npc3NvcldpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJl
Y3QucmlnaHQgLT0geERpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3Qu
dG9wIDwgbVN0YXRlLnNjaXNzb3JZKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB5RGlm
ZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsNCisgICAgICAgICAgICBkZXN0U2Np
c3NvcmVkUmVjdC50b3AgPSBtU3RhdGUuc2Npc3Nvclk7DQorICAgICAgICAgICAgc291cmNlU2Np
c3NvcmVkUmVjdC50b3AgKz0geURpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVz
dFJlY3QuYm90dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgaW50IHlEaWZmID0gZGVzdFJlY3QuYm90dG9tIC0gKG1T
dGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KTsNCisgICAgICAgICAgICBkZXN0
U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3Nvckhl
aWdodDsNCisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsN
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxz
ZTsNCisgICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7DQorDQorICAgIFJFQ1Qgc291
cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0Ow0KKyAgICBSRUNUIGRlc3RUcmlt
bWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0Ow0KKw0KKyAgICAvLyBUaGUgc291cmNlICYgZGVz
dGluYXRpb24gcmVjdGFuZ2xlcyBhbHNvIG1heSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBm
YWxsIG91dCBvZiB0aGUgYm91bmRzIG9mIA0KKyAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJl
YWQgc3VyZmFjZXMuDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAg
ew0KKyAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7DQorICAg
ICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVj
dC5sZWZ0ICs9IHhEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5y
aWdodCA+IHJlYWRCdWZmZXJXaWR0aCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gc291
cmNlVHJpbW1lZFJlY3QucmlnaHQgLSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5yaWdodCA9IHJlYWRCdWZmZXJXaWR0aDsNCisgICAgICAgIGRlc3RUcmltbWVk
UmVjdC5yaWdodCAtPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJl
Y3QudG9wIDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHlEaWZmID0gMCAtIHNvdXJjZVRyaW1t
ZWRSZWN0LnRvcDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7DQorICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3Vy
Y2VUcmltbWVkUmVjdC5ib3R0b20gPiByZWFkQnVmZmVySGVpZ2h0KQ0KKyAgICB7DQorICAgICAg
ICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0
Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsN
CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgIH0NCisNCisg
ICAgaWYgKGRlc3RUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhE
aWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0
LmxlZnQgPSAwOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsNCisg
ICAgfQ0KKw0KKyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRo
KQ0KKyAgICB7DQorICAgICAgICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBk
cmF3QnVmZmVyV2lkdGg7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVm
ZmVyV2lkdGg7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsNCisg
ICAgfQ0KKw0KKyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApDQorICAgIHsNCisgICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOw0KKyAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnRvcCA9IDA7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURp
ZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVm
ZmVySGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3Qu
Ym90dG9tIC0gZHJhd0J1ZmZlckhlaWdodDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0
b20gPSBkcmF3QnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
IC09IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxz
ZTsNCisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0
LnRvcCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJp
Z2h0IC0gc291cmNlVHJpbW1lZFJlY3QubGVmdCA8IHJlYWRCdWZmZXJXaWR0aCB8fCANCisgICAg
ICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1
ZmZlckhlaWdodCB8fA0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1t
ZWRSZWN0LmxlZnQgPCBkcmF3QnVmZmVyV2lkdGggfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LnRvcCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVk
UmVjdC5sZWZ0ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LmxlZnQgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgcGFydGlhbEJ1ZmZlckNvcHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChtYXNr
ICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxp
ZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9U
RVhUVVJFXzJEIHx8DQorICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
clR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7DQorICAgICAgICBjb25zdCBib29sIHZhbGlkRHJh
d1R5cGUgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1RFWFRV
UkVfMkQgfHwNCisgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUjsNCisgICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAh
dmFsaWREcmF3VHlwZSB8fA0KKyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXREM0RGb3JtYXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkNvbG9y
IGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3Vw
cG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAg
ICBpZiAocGFydGlhbEJ1ZmZlckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkg
IT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRy
dWU7DQorDQorICAgIH0NCisNCisgICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8
IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpDQorICAgIHsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAq
cmVhZERTQnVmZmVyID0gTlVMTDsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVy
ID0gTlVMTDsNCisNCisgICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBz
dGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQ0KKyAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFu
ZCBzdGVuY2lsIGJ1ZmZlciwgaXQgd2lsbCBiZSB0aGUgc2FtZSBidWZmZXIuDQorDQorICAgICAg
ICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBp
ZiAocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyVHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgYmxpdERlcHRoU3Rl
bmNpbCA9IHRydWU7DQorICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisNCisgICAgICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkNCisgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8DQor
ICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdl
dEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICB9DQor
DQorICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOw0KKyAgICAgICAgICAg
ICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsN
CisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVu
Y2lsYnVmZmVyKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYg
KHBhcnRpYWxCdWZmZXJDb3B5KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiT25seSB3
aG9sZS1idWZmZXIgZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlz
IGltcGxlbWVudGF0aW9uLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkDQor
ICAgICAgICB9DQorDQorICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKSB8fCANCisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJl
YWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9DQorICAgIH0N
CisNCisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkNCisgICAg
ew0KKyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICBpZiAoYmxpdFJl
bmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSog
cmVhZFJlbmRlclRhcmdldCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQor
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3RnJh
bWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0KKw0KKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNvdXJjZVRyaW1t
ZWRSZWN0LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdSZW5kZXJUYXJnZXQsICZkZXN0VHJpbW1lZFJlY3QsIEQzRFRFWEZfTk9ORSk7DQor
DQorICAgICAgICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAg
IGRyYXdSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsN
CisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisN
CisgICAgICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5n
ZXREZXB0aFN0ZW5jaWwoKTsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0Rl
cHRoU3RlbmNpbCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhT
dGVuY2lsLCBOVUxMLCBkcmF3RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKw0K
KyAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBk
cmF3RGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVi
dWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQor
ICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQorVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNo
ZSgpIDogbU1heExydSgwKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVY
X0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtVmVydGV4RGVjbENh
Y2hlW2ldLnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsNCisgICAgICAgIG1WZXJ0ZXhEZWNsQ2Fj
aGVbaV0ubHJ1Q291bnQgPSAwOw0KKyAgICB9DQorfQ0KKw0KK1ZlcnRleERlY2xhcmF0aW9uQ2Fj
aGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAg
aWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQor
ICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBWZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNs
YXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5z
dGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQ0KK3sNCisgICAgKnJlcGVhdERyYXcgPSAxOw0K
Kw0KKyAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisgICAg
aW50IGluc3RhbmNlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisNCisgICAgaWYg
KGluc3RhbmNlcyA+IDApDQorICAgIHsNCisgICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRy
aWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMA0KKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlz
b3IgPT0gMCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleGVkQXR0cmlidXRlID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUg
PT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yICE9IDApDQorICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsN
CisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICBlbHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2Vk
IGF0dHJpYnV0ZQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChp
bmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgICAgICB9DQorICAgIH0N
CisNCisgICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsg
MV07DQorICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOw0KKw0K
KyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOw0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7DQorDQorICAgICAgICAgICAgaWYgKGlu
c3RhbmNlcyA+IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvLyBEdWUgdG8g
YSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBv
ZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2VkLg0KKyAgICAgICAgICAgICAgICBpZiAoaW5z
dGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7DQorICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDAp
DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFt
ID0gaW5kZXhlZEF0dHJpYnV0ZTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAg
ICAgICAgICAgICAgIFVJTlQgZnJlcXVlbmN5ID0gMTsNCisgICAgICAgICAgICAgICAgICAgIA0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQ0KKyAg
ICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9
IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3RhbmNlczsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0Vf
SU5TVEFOQ0VEQVRBIHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOw0KKyAgICAgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBkZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOw0KKyAgICAgICAgICAgICAg
ICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJp
YWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRW
QnNbc3RyZWFtXS5zdHJpZGUgIT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwNCisgICAgICAgICAg
ICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZShzdHJlYW0sIGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNl
dCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tz
dHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOw0KKyAgICAgICAgICAgICAgICBt
QXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOw0KKyAgICAg
ICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zm
c2V0Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBz
dHJlYW07DQorICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsNCisgICAgICAgICAgICBl
bGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBlOw0KKyAgICAgICAgICAgIGVsZW1lbnQt
Pk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsNCisgICAgICAgICAgICBlbGVtZW50LT5V
c2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2Fn
ZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsNCisgICAgICAgICAg
ICBlbGVtZW50Kys7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGluc3RhbmNlcyA9
PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgIHsN
CisgICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAx
KTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0g
ZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRF
WEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7DQorICAgICooZWxlbWVudCsrKSA9IGVuZDsN
CisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklF
UzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAm
bVZlcnRleERlY2xDYWNoZVtpXTsNCisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVs
ZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVY
RUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikNCisgICAgICAgIHsN
CisgICAgICAgICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7DQorICAgICAgICAgICAg
aWYoZW50cnktPnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5
LT52ZXJ0ZXhEZWNsYXJhdGlvbik7DQorICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBl
bnRyeS0+dmVydGV4RGVjbGFyYXRpb247DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAg
IHJldHVybiBHTF9OT19FUlJPUjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBWZXJ0ZXhE
ZWNsQ2FjaGVFbnRyeSAqbGFzdENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsNCisNCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAg
ICB7DQorICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNo
ZS0+bHJ1Q291bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0
ZXhEZWNsQ2FjaGVbaV07DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbGFzdENhY2hl
LT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0
ZXhEZWNsYXJhdGlvbiA9IE5VTEw7DQorICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0
byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkNCisgICAgICAgIC8v
IGFib3V0IGl0Lg0KKyAgICB9DQorDQorICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1l
bnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxF
TUVOVDkpKTsNCisgICAgZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywg
Jmxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBkZXZpY2UtPlNldFZlcnRleERl
Y2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBtTGFzdFNldFZE
ZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsNCisgICAgbGFzdENhY2hlLT5scnVD
b3VudCA9ICsrbU1heExydTsNCisNCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOw0KK30NCisNCit2
b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkNCit7DQorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgIHsNCisgICAg
ICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7DQorICAgIH0NCisNCisgICAgbUxhc3RTZXRW
RGVjbCA9IE5VTEw7DQorICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2Vz
IGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQNCit9DQorDQorfQ0KKw0KK2V4dGVybiAi
QyINCit7DQorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAq
Y29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpDQorew0KKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNv
bmZpZywgc2hhcmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7DQorfQ0KKw0K
K3ZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkNCit7DQorICAgIGRl
bGV0ZSBjb250ZXh0Ow0KKw0KKyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQ0K
KyAgICB7DQorICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7DQorICAg
IH0NCit9DQorDQordm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIGdsOjpt
YWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsNCit9DQorDQorZ2w6OkNvbnRl
eHQgKmdsR2V0Q3VycmVudENvbnRleHQoKQ0KK3sNCisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0
KCk7DQorfQ0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCmluZGV4IDhkY2NmMGYuLjRkNDdjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xh
c3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsK
IAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAg
ZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVj
dCBWQkRhdGEKICAgICB7CkBAIC0yODEsNyArMjgxLDggQEAgY2xhc3MgQ29udGV4dAogCiAgICAg
dm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7CiAKLSAgICB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdmlydHVhbCB2b2lk
IG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRM
b3N0KCk7CkBAIC00OTUsNiArNDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9y
dHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhh
VGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBv
cnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5n
KCkgY29uc3Q7CkBAIC02MTcsNiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWlu
YW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsK
KyAgICBib29sIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJp
dEluZGljZXM7CiAgICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5j
cHAKaW5kZXggNzMwZmZmYy4uNzZkNDI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJh
bWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVM
TCk7CiAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZm
ZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVM
TCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihH
TGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJu
IDA7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZy
YW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElE
aXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1
cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYg
KzIwMSwzMCBAQCBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkK
ICAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZm
ZXIgKkZyYW1lYnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZl
ciAqbnVsbGJ1ZmZlciAgPSBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVw
dGhidWZmZXIpCisgICAgeworICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZl
ciBmb3IgZGVwdGgtb25seSBGQk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIEdMc2l6ZWkgd2lkdGggID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZm
ZXIgfHwKKyAgICAgICAgd2lkdGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQg
IT0gbnVsbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0g
bmV3IFJlbmRlcmJ1ZmZlcigwLCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9O
RSwgMCkpOworICAgICAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3JidWZmZXJUeXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsK
QEAgLTI0Myw5ICsyNzIsMTEgQEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdM
ZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVp
Z2h0ID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1l
bnQgPSB0cnVlOwogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7
CkBAIC0yNzAsMzEgKzMwMSwzOCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygp
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNv
bG9yYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQo
Y29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGlu
dGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAg
ICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOwor
CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAg
aW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJu
YWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5n
ZXREM0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJs
ZVRleHR1cmVzKCkpIHx8IAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0
KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNG
bG9hdDMyRm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRl
cmFibGVUZXh0dXJlcygpKSB8fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9y
bWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0
dXJlcygpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAg
ICAgaWYgKGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJ
c1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CiAK
ICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0
ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICBzYW1wbGVzID0gY29sb3JidWZm
ZXItPmdldFNhbXBsZXMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICBt
aXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqZGVw
dGhidWZmZXIgPSBOVUxMOwpAQCAtMzAyLDExICszNDAsNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpCiAKICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQog
ICAgIHsKLSAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
ICAgLy8gUmVxdWlyZXMgR0xfT0VTX2RlcHRoX3RleHR1cmUKLSAgICAgICAgfQotCiAgICAgICAg
IGRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBpZiAoIWRlcHRoYnVm
ZmVyKQpAQCAtMzE5LDE5ICszNTIsNDQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAo
bURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQg
PSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRo
UmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0
aCAhPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdl
dEhlaWdodCgpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVw
dGhidWZmZXJUeXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3Jt
YXQgPSBkZXB0aGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIGRlcHRo
IHRleHR1cmUgYXR0YWNobWVudHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc0Rl
cHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQor
ICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdp
ZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0
aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXIt
PmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1w
bGVzKCkpCiAgICAgICAgIHsKQEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05F
KQogICAgIHsKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZG
RVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKLSAgICAgICAgfQotCiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVm
ZmVyKCk7CiAKICAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUg
QEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVm
ZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5j
aWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkp
CisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVy
VHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3Rl
bmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNp
bFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAg
ICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0
aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVu
Y2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVm
ZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJ
T05TOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0g
RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBl
ID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQg
c3RlbmNpbCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAv
LyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBh
cmF0ZSBkZXB0aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVm
ZmVyICYmIChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlm
IChkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUyB8fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAh
PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdl
dFNlcmlhbCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8v
IHdlIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQor
ICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuaApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1
ZmZlciAqZ2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVy
KCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVm
ZmVyICpnZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5
cGUoKTsKICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBA
IGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBC
aW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAg
IEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisK
ICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNw
cAppbmRleCBhNWUzOGJmLi5mMjhhOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVs
YXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFn
ZSAyOC4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0x
NywyMjYxICsxOCw4NSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBnbAogewotdW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0g
MTsKLWNvbnN0IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5n
IHN0cihpbnQgaSkKLXsKLSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIs
ICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xl
bnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSkKLSAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29y
YXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRl
cyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5l
dyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAg
IGRpcnR5ID0gdHJ1ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtd
IGRhdGE7Ci19Ci0KLWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1l
LmNvbXBhcmUoMCwgMywgImFyXyIpID09IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9y
bUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQs
IHVuc2lnbmVkIGludCBpbmRleCkgCi0gICAgOiBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlm
b3JtKF9uYW1lKSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9n
cmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBt
UmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVT
ZXJpYWwoKSkKLXsKLSAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgbUZyYWdtZW50U2hh
ZGVyID0gTlVMTDsKLSAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1
dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3Rh
bnRUYWJsZVBTID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1J
bmZvTG9nID0gTlVMTDsKLSAgICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsK
LQotICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0K
LVByb2dyYW06On5Qcm9ncmFtKCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZl
cnRleFNoYWRlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFz
ZSgpOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9n
cmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0
VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNo
YWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgbVZlcnRleFNoYWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAg
bVZlcnRleFNoYWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0
VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21l
bnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwot
ICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hT
aGFkZXIoU2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdM
X1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFk
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9
IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVy
ID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOworY29uc3QgY2hhciAqIGNv
bnN0IGdfZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci1pbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJl
dHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7
Ci19Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1JRGlyZWN0
M0RQaXhlbFNoYWRlcjkgKlByb2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRp
bmdzOjpBdHRyaWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7
CiB9CiAKLUlEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigp
CitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4g
bVZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0
aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKK0luZm9Mb2c6OkluZm9Mb2coKSA6
IG1JbmZvTG9nKE5VTEwpCiB7Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQot
ICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFt
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0
KG5hbWUpOwotICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9u
KGNvbnN0IGNoYXIgKm5hbWUpCitJbmZvTG9nOjp+SW5mb0xvZygpCiB7Ci0gICAgaWYgKG5hbWUp
Ci0gICAgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJp
YnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gLTE7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAKLWludCBQ
cm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NF
UlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsK
LX0KIAotLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXgg
dXNlZC4KLUdMaW50IFByb2dyYW06OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlw
ZSkKK2ludCBJbmZvTG9nOjpnZXRMZW5ndGgoKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkK
KyAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAg
ICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJf
VkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci19Ci0KLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAt
MTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1
IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdM
aW50IFByb2dyYW06OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7
Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgot
ICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2Yo
bVNhbXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1T
YW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJU
KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBd
KSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvZ2ljYWxU
ZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0
KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0K
LQotLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2Ft
cGxlciB0eXBlIGFuZAotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAt
MyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotVGV4dHVyZVR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxl
clRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgp
Ci17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoK
LSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9m
KG1TYW1wbGVyc1BTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRl
eHR1cmVUeXBlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7
Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAg
ICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsK
LX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUp
Ci17Ci0gICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkg
dHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBz
aXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0g
bmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBv
cyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlw
dCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVy
YXNlKG9wZW4pOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlm
b3JtSW5kZXguc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9j
YXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCi0g
ICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwot
Ci0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9h
dCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4w
ZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CiAgICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9GTE9BVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CisgICAgaW50IGluZGV4ID0gMDsKIAotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZb
MF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICBpZiAoYnVmU2l6ZSA+
IDApCiAgICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAg
ICBpZiAobUluZm9Mb2cpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cp
KTsKKyAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwogICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xmbG9hdCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNv
dW50KTsKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2
W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQg
c3JjSGVpZ2h0Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKLXsKLSAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNy
Y1dpZHRoKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3Jj
SGVpZ2h0KTsKLQotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0gICAg
ewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAq
IHNyY1dpZHRoICsgeF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQg
cmlnaHQgc2lkZQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQp
MDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAg
Zm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFy
Z2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0Owot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0g
ICAgICAgIHZhbHVlICs9IDk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
NCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+
KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTY7Ci0gICAgICAgIHZhbHVlICs9
IDE2OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FN
UExFUl9DVUJFKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAg
ICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9JTlRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICog
MiwKLSAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0K
LSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9m
KEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MzsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lO
VF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAg
ICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06Omdl
dFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFy
YW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRl
ZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAg
ICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5z
cG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3Jt
SW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8g
MC4wZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQp
LAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVu
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
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0g
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0g
ICAgewotICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQot
Ci0vLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0
IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkK
LXsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9y
bXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAg
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPmRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAg
ICAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCAzLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5U
OiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9y
bTJpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZF
QzQ6ICAgYXBwbHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNv
ZGUgb2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNE
MTBCbG9iICpQcm9ncmFtOjpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3Qg
Y2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAg
ICBpZiAoIWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBE
V09SRCByZXN1bHQ7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNl
VGV4dDsKLSAgICBpZiAocGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNE
Q09NUElMRV9ERUJVRzsKLSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09N
UElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01Q
SUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291
cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmlu
ZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0
ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBz
b3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7
Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJp
bmFyeSA9IE5VTEw7Ci0gICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICBy
ZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5V
TEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwot
Ci0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3Nh
Z2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAg
ICAgICAgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgi
XG4lcyIsIGhsc2wpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAg
IGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdl
dFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdl
dEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVh
c2UoKTsKLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5
OwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMs
IHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4w
MCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1p
bnQgUHJvZ3JhbTo6cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsK
LSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhW
YXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0g
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3Vu
dCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFi
bGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4g
JiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2
YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4g
JiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFibGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5y
ZWcgPSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHIt
LSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxl
ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYg
YXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0
OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKG0gPT0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9Owot
Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5Kysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBw
YWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNl
W3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgcisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFw
YWNraW5nW3JdW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSByOyB5IDwgciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlp
bmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+
bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQg
cmVnaXN0ZXJzID0gMDsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3Rv
cnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1b
MV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZWdpc3RlcnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3Rl
cnM7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVs
SExTTC5lbXB0eSgpIHx8IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNz
aWdubWVudHMKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVn
ID0gLTE7Ci0gICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdp
bigpOyB2dHhWYXIgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykK
LSAgICB7Ci0gICAgICAgIHZ0eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0g
LTE7Ci0gICAgfQotCi0gICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmls
ZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRd
ID0ge05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0K
LSAgICBpZiAocmVnaXN0ZXJzIDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0g
ICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9
IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlp
bmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBp
ZiAocmVnaXN0ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcg
cmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQg
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0
Y2hlZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1
dCA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAh
PSBpbnB1dC0+c2l6ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0
aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAg
b3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlp
bmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNt
MyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3Qg
VlNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRp
Y0luZGV4ID0gMDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUg
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDMgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0
eDQgIjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUt
Pm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0g
ICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
OwotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
ICJcbiIKLSAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRp
b24gOiBQT1NJVElPTjtcbiI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsg
cisrKQotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0
IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYi
ICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmICht
VmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0K
LSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAg
ICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRl
ICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJp
YnV0ZS0+bmFtZSkgKyAiID0gIjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZl
cnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExT
TCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7
XG4iOwotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6
ZS54ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bv
c2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwot
Ci0gICAgaWYgKG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGds
X1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01B
WF9TTTMpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xp
c3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsg
dmFyeWluZyAhPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAg
ICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJl
ZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAg
ICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRS
ZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0p
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
cl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
IG1WZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxOiBtVmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3
IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiAr
IHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0g
IlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVy
dGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xu
IgotICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0
IFBTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFy
eWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dz
OyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2Vt
YW50aWMgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
ZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAg
ICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRF
WENPT1JEMDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9u
dEZhY2luZykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6
IFZGQUNFO1xuIjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9D
b2xvclsxXSA6IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQg
aW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzbTMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29u
dGFpbnMgdGhlIHJlbmRlciB0YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJU
YXJnZXQoKQotICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0g
aW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGdsX0ZyYWdDb29yZC55ID0gZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9D
b29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFu
ZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiBy
aHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29y
ZDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4
X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAo
aW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0g
ICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50
eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIo
dmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVs
SExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsg
c3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgbVBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xu
IgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8g
TGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0
Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVz
LCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8g
YSBsaXN0IG9mIHVuaWZvcm1zCi12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygp
OwotCi0gICAgaWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21w
aWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRl
eFNoYWRlciB8fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhM
U0woKTsKLSAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAg
IGlmICghbGlua1ZhcnlpbmdzKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0
ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDog
InZzXzJfMCI7Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9y
dHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9i
ICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVy
dGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmlu
YXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAm
bUNvbnN0YW50VGFibGVQUyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5
KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVW
ZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1W
ZXJ0ZXhFeGVjdXRhYmxlKTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSwgJm1QaXhlbEV4ZWN1dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwg
cGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0
ZXhSZXN1bHQpICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJp
bmFyeS0+UmVsZWFzZSgpOwotICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAg
ICB2ZXJ0ZXhCaW5hcnkgPSBOVUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAg
ICAgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
bGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5p
Zm9ybXMobUNvbnN0YW50VGFibGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBh
cmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAg
ICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRk
aXRpb25hbCBkZWNvcmF0aW9uCi0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRo
TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBt
RHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAg
ICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9I
YWxmUGl4ZWxTaXplIik7Ci0gICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAg
ICAgICAgICAgIG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0K
LX0KLQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5k
IERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06Omxp
bmtBdHRyaWJ1dGVzKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0K
LSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBn
ZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0
aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmli
dXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0
ZTsKLQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJB
Y3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBh
dHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRp
b25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBs
b2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1W
ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQg
bG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRp
b24KLSAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0
dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0
ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7
Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRl
eCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwg
YXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgIC8vIEZhaWwgdG8gbGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hh
ZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5h
bWUpOwotICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgcm93czsgcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJ
bmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2Nh
dGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlm
IChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmlu
ZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2Nh
dGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9n
cmFtOjpsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewot
ICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAg
IEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlw
dGlvbkNvdW50ID0gMTsKLQotICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFi
bGVEZXNjcmlwdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0g
MDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNv
bnN0YW50SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUg
PSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRI
YW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3Jt
KGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhl
IGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBp
ZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6
ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17
Ci0gICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBM
RVIpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBE
M0RYSEFORExFIHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFt
ZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRM
RSB2c0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwg
Y29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBl
ID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJl
VW5pdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBz
dGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBj
b3VudCBleGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dnNDb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3Rh
bnQpICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0
KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRl
eHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNV
QkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRl
eCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGlt
dW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAg
IGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzOyBhcnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3Ry
dWN0TWVtYmVyczsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFu
dChjb25zdGFudEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05T
VEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVz
Y3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERl
c2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
c3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiAr
IHN0cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IWRlZmluZVVuaWZvcm0oZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25z
dGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoK
LSAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xV
TU5TOgotICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5p
Zm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1l
KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcg
Jl9uYW1lKQotewotICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50
RGVzY3JpcHRpb24sIF9uYW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAot
ICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwot
ICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAw
KQotICAgIHsKLSAgICAgICAgZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0
YW50VGFibGVQUyk7Ci0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5p
Zm9ybS0+dnMsIG1Db25zdGFudFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1
bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUo
KSAtIDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5
U2l6ZTsgKytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9y
bUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09O
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
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNv
cmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5j
b21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0o
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0g
ICAgewotICAgICAgICByZXR1cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlm
IChfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IF9uYW1lLnN1YnN0cigzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12
b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNp
emVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9y
W0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCA0OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGogPCB3aWR0aCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZl
Y3RvcltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6
IDEuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhS
U19CT09MKQotICAgIHsKLSAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291
bnQgOiAwOwotICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
U2V0ID09IEQzRFhSU19CT09MID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7
Ci0gICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1h
eChwc0NvdW50LCB2c0NvdW50KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9N
QVhfQk9PTF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBH
TF9GQUxTRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyU2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgs
IHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JP
T0wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3Rh
bnRCKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7
Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAg
ewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NB
TVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0g
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckluZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUp
OwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxU
ZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZb
MV0sIDAsIDApOwotCi0gICAgICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1u
aXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZs
b2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0g
ICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFT
U0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0
IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQo
KGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0g
ICAgICAgIHYgKz0gNDsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9y
bSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFt
OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZs
b2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICBpZiAobGVuZ3Ro
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19GTE9BVDQpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9y
LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgKmxlbmd0aCA9IGlu
ZGV4OwogICAgIH0KIH0KIAogLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJv
Z3JhbSBpbmZvIGxvZy4KIC8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUg
cGF0aCBpbiBzb21lIG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAogLy8gbWVzc2FnZXMsIHNvIGxl
dHMgcmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhl
IGxvZy4KLXZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIg
Km1lc3NhZ2UpCit2b2lkIEluZm9Mb2c6OmFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNz
YWdlKQogewogICAgIHN0ZDo6c3RyaW5nIG1zZyhtZXNzYWdlKTsKIAogICAgIHNpemVfdCBmb3Vu
ZDsKICAgICBkbwogICAgIHsKLSAgICAgICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7Cisg
ICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZ19mYWtlcGF0aCk7CiAgICAgICAgIGlmIChmb3VuZCAh
PSBzdGQ6OnN0cmluZzo6bnBvcykKICAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZv
dW5kLCBzdHJsZW4oZmFrZXBhdGgpKTsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3Ry
bGVuKGdfZmFrZXBhdGgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAoZm91bmQgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpOwogCi0gICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNf
c3RyKCkpOworICAgIGFwcGVuZCgiJXNcbiIsIG1zZy5jX3N0cigpKTsKIH0KIAotdm9pZCBQcm9n
cmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit2b2lkIEluZm9M
b2c6OmFwcGVuZChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICBpZiAoIWZvcm1hdCkK
ICAgICB7CkBAIC0yMzA0LDcgKzEyOSw3IEBAIHZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9n
KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNl
dEluZm9Mb2coKQordm9pZCBJbmZvTG9nOjpyZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQog
ICAgIHsKQEAgLTIzMTMsOTkgKzEzOCwxNzAgQEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2co
KQogICAgIH0KIH0KIAotLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5r
ZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9n
cmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQorUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFn
ZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwg
bUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ry
b3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJh
Z21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVs
ZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQor
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Cisg
ICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAg
ICBtUmVmQ291bnQgPSAwOworfQogCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFt
KCkKK3sKKyAgICB1bmxpbmsodHJ1ZSk7CiAKLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAg
ICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0
YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAg
ICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhl
Y3V0YWJsZSkKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZSA9IE5VTEw7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30K
IAotICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRF
WF9TSEFERVIpCiAgICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0
ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQogCi0gICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAo
VmVydGV4U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFE
RVIpCiAgICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZy
YWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRF
WF9TSEFERVIpCiAgICAgewotICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNs
ZWFyKCk7Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAg
ICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRl
ci0+cmVsZWFzZSgpOworICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAg
ZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsK
LSAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAo
bUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7
CisgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEg
OiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgr
KykKK3ZvaWQgQXR0cmlidXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQg
aW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNl
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFt
ZSk7CiAgICAgfQorfQorCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNM
IGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWly
IHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcg
dGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlm
b3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Ug
PSAwOworICAgIG1JbmZvTG9nLnJlc2V0KCk7CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0
eSgpKQorICAgIG1Qcm9ncmFtQmluYXJ5ID0gbmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFt
UHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21l
bnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jt
cy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmso
ZmFsc2UpOwogICAgIH0KK30KIAotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAg
IG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAg
bUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9
IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJp
bmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25z
dAoreworICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdb
bG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0g
ICAgbVBpeGVsSExTTC5jbGVhcigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1
cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxp
bmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ry
b3kpCit7CisgICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAg
ICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
ID0gTlVMTDsKKyAgICAgICAgfQogCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9M
b2cgPSBOVUxMOworICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRl
ciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5
OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dy
YW06OmlzTGlua2VkKCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnko
KQogewotICAgIHJldHVybiBtTGlua2VkOworICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0K
IAotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQ
cm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJu
IG1WYWxpZGF0ZWQ7CisgICAgdW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1CaW5hcnk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICsz
MzYsMTIgQEAgdW5zaWduZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dy
YW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAg
ewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1
cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRM
ZW5ndGgoKTsKIH0KIAogdm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0K
LSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNp
emUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywg
bUluZm9Mb2csIGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAg
ICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAg
IHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cu
Z2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0
QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQg
KnNoYWRlcnMpCkBAIC0yNTAzLDE1MiArMzc2LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRl
CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKIHsKLSAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAg
IHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRy
aWJ1dGU7Ci0gICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAg
ICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3Rp
dmVBdHRyaWJ1dGUgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgICAgIG1Qcm9ncmFtQmlu
YXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlw
ZSwgbmFtZSk7CiAgICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
XS5uYW1lLmNfc3RyKCk7Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUp
OwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KKyAgICAgICAgaWYgKGJ1ZnNp
emUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAg
Kmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAg
ICB9Ci0gICAgfQogCi0gICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScg
aW5zdGFuY2UKLQotICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7
CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOworICAgIH0KIH0K
IAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQogewotICAgIGludCBj
b3VudCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwot
ICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmli
dXRlQ291bnQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVB
dHRyaWJ1dGVNYXhMZW5ndGgoKQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewot
ICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHko
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5n
dGgpOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
QXR0cmlidXRlTWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3Jh
bTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0g
ICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2
ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9y
bSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgaWYgKG1Q
cm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2
ZVVuaWZvcm0rKzsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlm
b3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQot
ICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBi
ZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXpl
ID4gMCkKKyAgICBlbHNlCiAgICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5p
Zm9ybXNbdW5pZm9ybV0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
aXNBcnJheSgpKQorICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0g
ICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQogICAgICAgICBpZiAobGVuZ3RoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAg
ICAgKmxlbmd0aCA9IDA7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
PnR5cGU7CisgICAgICAgICpzaXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAg
IH0KIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBp
bnQgY291bnQgPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1z
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3Jt
SW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNv
bXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlm
b3JtQ291bnQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZv
cm1JbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICgh
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
bGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAg
Ly8gQ291bnRpbmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5n
dGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBt
YXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKQEAgLTI2NjMs
MTYxICs0ODAsMjggQEAgYm9vbCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0
CiAKIHZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAg
IG1JbmZvTG9nLnJlc2V0KCk7CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMg
bm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewotICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVTYW1wbGVycyh0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRl
ZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdv
IGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0
IHJlZmVyIHRvIHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBp
cyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFu
ZAotICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZB
TElEX09QRVJBVElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAg
ICB7Ci0gICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFu
Z2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9n
aWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBt
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1
bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4
dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAg
aWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxl
ciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAo
JWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVy
ZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGlj
dGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1
bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRd
ID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KyAgICAgICAgbUluZm9Mb2cuYXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVs
bHkgbGlua2VkLiIpOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dy
YW06OmluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5p
Zm9ybTo6UmVnaXN0ZXJJbmZvICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxl
KQorYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBo
YW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3Jt
LT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQz
RFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVz
Y3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgcmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNj
cmlwdGlvbi5SZWdpc3RlckNvdW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmlzVmFsaWRhdGVkKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdp
c3RlckNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBt
RHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2Nh
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENv
b3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbjsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW0uaAppbmRleCA2MTgzMGM2Li4yNDQ3MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2Rl
ZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRl
IDxkM2Rjb21waWxlci5oPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAj
aW5jbHVkZSA8c2V0PgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIg
KzIzLDM2IEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwog
Y2xhc3MgVmVydGV4U2hhZGVyOwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNp
bmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUp
OwotCi0gICAgflVuaWZvcm0oKTsKLQotICAgIGJvb2wgaXNBcnJheSgpOwotCi0gICAgY29uc3Qg
R0xlbnVtIHR5cGU7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVk
IG5hbWUKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1l
Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKK2V4dGVybiBjb25zdCBjaGFyICog
Y29uc3QgZ19mYWtlcGF0aDsKIAotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBk
aXJ0eTsKK2NsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1
dGVCaW5kaW5ncygpOworICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0gICAgc3RydWN0IFJl
Z2lzdGVySW5mbwotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQg
cmVnaXN0ZXJJbmRleDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKKyAgICB2
b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUp
OworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBj
b25zdDsKIAotICAgIFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7CisgIHBy
aXZhdGU6CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9W
RVJURVhfQVRUUklCU107CiB9OwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5p
Zm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZv
cm1Mb2NhdGlvbgorY2xhc3MgSW5mb0xvZwogewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpOworICBwdWJsaWM6CisgICAgSW5mb0xvZygpOworICAgIH5JbmZvTG9nKCk7CiAKLSAgICBz
dGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVk
IGludCBpbmRleDsKKyAgICBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRMb2co
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworCisgICAg
dm9pZCBhcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBl
bmQoY29uc3QgY2hhciAqaW5mbywgLi4uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgIHByaXZhdGU6
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZm9Mb2cpOworICAgIGNoYXIgKm1JbmZv
TG9nOwogfTsKIAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzY2LDEyIEBAIGNsYXNzIFByb2dy
YW0KICAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5k
ZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1
cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAg
IEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGlu
dCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsK
LQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAg
ICBib29sIGlzTGlua2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnko
KTsKKwogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKQEAgLTEzMiw5MCArOTEsMjQgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgdmFsaWRh
dGUoKTsKLSAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOwogICAgIGJv
b2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBj
b25zdDsKIAotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRp
YyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUp
OyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKLQogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKIAotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVU
b0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0
YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kg
PSBmYWxzZSk7CiAKLSAgICBpbnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdb
XVs0XSk7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3MoKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0
ZXMoKTsKLSAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSk7Ci0KLSAgICBib29sIGxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50
VGFibGUpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFu
dEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0
ZDo6c3RyaW5nIG5hbWUgPSAiIik7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSk7Ci0gICAgVW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wg
YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYp
OwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAg
Ym9vbCBhcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFw
cGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBEM0RYVkVDVE9SNCAqdmVjdG9yKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVh
biAqdik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVnaXN0ZXJJbmZvICpycywgSUQzRFhDb25zdGFudFRhYmxl
ICpjb25zdGFudFRhYmxlKTsKLQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNv
bnN0IGNoYXIgKm1lc3NhZ2UpOwotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIg
KmluZm8sIC4uLik7Ci0gICAgdm9pZCByZXNldEluZm9Mb2coKTsKLQogICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKIAotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7
CiAgICAgRnJhZ21lbnRTaGFkZXIgKm1GcmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIg
Km1WZXJ0ZXhTaGFkZXI7CiAKLSAgICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOwotICAgIHN0ZDo6
c3RyaW5nIG1WZXJ0ZXhITFNMOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxF
eGVjdXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxl
OwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENv
bnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0
dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVC
aW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1
dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLQotICAgIHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFj
dGl2ZTsKLSAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJl
VHlwZSB0ZXh0dXJlVHlwZTsKLSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhf
VEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2U7Ci0gICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4
RGVwdGhSYW5nZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4Q29vcmRMb2NhdGlvbjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247
Ci0gICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb247Ci0KLSAgICBib29sIG1MaW5rZWQ7CisgICAgUHJvZ3JhbUJpbmFyeSogbVBy
b2dyYW1CaW5hcnk7CiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UK
LSAgICBjaGFyICptSW5mb0xvZzsKLSAgICBib29sIG1WYWxpZGF0ZWQ7CiAKICAgICB1bnNpZ25l
ZCBpbnQgbVJlZkNvdW50OwogCkBAIC0yMjUsNiArMTE4LDggQEAgY2xhc3MgUHJvZ3JhbQogCiAg
ICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogICAgIGNvbnN0IEdMdWludCBt
SGFuZGxlOworCisgICAgSW5mb0xvZyBtSW5mb0xvZzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjhlNTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwCkBAIC0wLDAgKzEsMjQ4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5j
cHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dy
YW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKwor
I2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RD
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK3N0
ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmlu
dGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsK
K30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25h
bWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5
U2l6ZShhcnJheVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0
eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOwor
ICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlm
b3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3Jt
Ojppc0FycmF5KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0g
MDsKK30KKworVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAg
ICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVu
dChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1C
aW5hcnkoKQoreworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1
dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3Rh
bnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1W
YWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2VtYW50aWNJbmRleFtp
bmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNQ
U1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCisg
ICAgeworICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQor
CisgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVy
UmFuZ2UgPSAwOworCisgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVw
dGhMb2NhdGlvbiA9IC0xOworICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24gPSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7Cisg
ICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Q
cm9ncmFtQmluYXJ5KCkKK3sKKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRl
eEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgp
OworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJs
ZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgIH0K
KworICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUg
bVVuaWZvcm1zLmJhY2soKTsKKyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQor
fQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVy
KCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1
dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5k
ZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhd
Lm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQg
YXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0
cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2Vt
YW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhh
biB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5Ojpn
ZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2Vk
UGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBy
ZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcg
dG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hh
ZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXgpCit7CisgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NF
UlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNb
MF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3Nh
bXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRl
eCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAg
ICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAg
ICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+
PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGlt
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9n
aWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJu
cyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFu
ZAorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZl
cnRleCBzaGFkZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1
cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7Cisg
ICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAg
ICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1w
bGVyc1BTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKwor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUp
Cit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkg
dHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBz
aXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0g
bmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBv
cyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlw
dCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVy
YXNlKG9wZW4pOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlm
b3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9j
YXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAg
ICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAg
ICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKKyAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisg
ICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0g
PSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdl
dFsyXSA9IHZbMl07CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFy
Z2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKwor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisK
KyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQg
KiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4w
ZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRh
cmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+
Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQor
eworICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwor
ICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwor
CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGgg
KyB4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRl
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAg
ICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7
CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAg
ICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5
ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQs
IHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4
PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsK
KyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiti
b29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9G
TE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdl
dCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
NCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAg
dmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKwor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
dltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGlu
dCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAo
R0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAg
ICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAg
ICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9m
KEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgor
CisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
NDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAg
Ly8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBl
bm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVz
ID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYg
KCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50
eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3Nl
TWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
NCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9y
bUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENv
dW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1D
b21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHko
cGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAg
IC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2Ug
ZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRl
cyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlm
ICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFy
YW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5
cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50
ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAg
c3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBH
TGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5U
OgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihH
TGludCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFw
cGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQor
eworICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jt
cy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9y
bS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAg
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIDMsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBh
cHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6
ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3Jt
Mml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVD
NDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29k
ZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0Qx
MEJsb2IgKlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUg
Kipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsK
KyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAg
eworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAg
ICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisg
ICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKwor
ICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAg
c291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3Rk
OjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmls
ZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXpl
KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAg
fQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJv
ck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhs
c2wpLCBnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAm
YmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgewor
ICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+
R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgIGluZm9Mb2cuYXBwZW5kU2FuaXRpemVkKG1l
c3NhZ2UpOworICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4l
cyIsIG1lc3NhZ2UpOworCisgICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOworICAgICAg
ICBlcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8
Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUp
OworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KworICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICByZXR1cm4gYmluYXJ5OworfQorCisvLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdl
bmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdM
IEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBw
YWdlIDExMQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMs
IG9yIC0xIGlmIHVuc3VjY2VzZnVsCitpbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyKQoreworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0
KCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11
bVZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5
aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlu
dCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7Cisg
ICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMg
fHwgbSA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBt
YXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxl
OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5n
LT5jb2wgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG07IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyBy
ID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFp
bGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZh
aWxhYmxlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0g
MjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYq
dmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IHNwYWNlWzRdID0gezB9OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1h
eFZhcnlpbmdWZWN0b3JzOyB5KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKKworICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5d
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcGFjZVtj
b2x1bW5dID49IG4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIG47IHkrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5n
W3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOwor
CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgIGlmICghc3VjY2VzcykK
KyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZh
cnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2Vk
IHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7
IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdb
cl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFy
eWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJp
bmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IGZyYWdWYXIgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1Zh
cisrKQorICAgIHsKKyAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXIt
PmNvbCA9IC0xOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZh
ciA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJl
ZyA9IC0xOworICAgICAgICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0
aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0
ZXJzID0gcGFja1ZhcnlpbmdzKGluZm9Mb2csIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKwor
ICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0g
Y29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlm
IChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVn
aXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQg
PSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0
cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0
LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0
aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOworICAgICAgICAgICAgICAgIG91dHB1dC0+
Y29sID0gaW5wdXQtPmNvbDsKKworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFtYXRjaGVkKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJh
Z21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1
dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xP
UiIgOiAiVEVYQ09PUkQiKTsKKworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAw
OworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRy
aWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRl
eEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09S
RCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0
ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisK
KyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAg
aW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAz
IDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZh
cnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0
ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRT
aXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBt
YWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAg
Zm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
IiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAg
ICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgK
KyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1
dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3Np
dGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICsg
ZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRp
b24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1
dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAg
ICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBi
eSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1b
eF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExT
TCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9
ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2
ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7
XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCAr
PSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBz
dHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQor
ICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBU
RVhDT09SRDA7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9u
dEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDog
VkZBQ0U7XG4iOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29s
b3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlu
cHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxv
YXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4i
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhf
Q29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBh
bmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJo
dykgKiBkeF9Db29yZC55ICsgZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQu
eDtcbiI7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAt
IGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hh
ZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
Z2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1
dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+
IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBd
O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZy
YWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2
ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0
SExTTCgpOworICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhM
U0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKGluZm9Mb2csIHBpeGVsSExTTCwgdmVydGV4
SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsK
KyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9m
aWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJf
MCI7CisKKyAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5m
b0xvZywgdmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVW
Uyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xv
ZywgcGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwor
CisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhS
RVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCop
dmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Cisg
ICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigo
RFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxl
KTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYg
U1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNl
KCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFy
eSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZl
cnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFsaW5rQXR0cmlidXRlcyhpbmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21l
bnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlm
b3JtcyhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfVkVSVEVYX1NIQURF
UiwgbUNvbnN0YW50VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3Jt
cyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4Xwor
ICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUg
YWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERl
cHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAg
ICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAg
ICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJk
eF9IYWxmUGl4ZWxTaXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisK
KyAgICAgICAgICAgIGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBE
aXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5
OjpsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5n
cyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlv
bnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9j
YXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2Nh
dGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5u
YW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0
dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0
ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9u
OyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJp
YnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3Mg
KyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9u
ICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9u
KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRo
YXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0
dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsK
KyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygm
dXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAg
aWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5j
X3N0cigpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxp
bmsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFi
bGVJbmRleF0gPSAqYXR0cmlidXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQg
YXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
KQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0lu
ZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOworICAgICAgICBpbnQg
cm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0udHlwZSksIDEpOworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsg
cisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRl
eCsrXSA9IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xl
bnVtIHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQoreworICAgIEQz
RFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOworCisgICAgY29u
c3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3Rh
bnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0
YW50KDAsIGNvbnN0YW50SW5kZXgpOworCisgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0
YW50RGVzY3JpcHRpb247CisgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0
YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIGlmICghZGVmaW5lVW5p
Zm9ybShpbmZvTG9nLCBzaGFkZXIsIGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9u
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEg
Y29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9y
bXMKKy8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVm
aW5lZCkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9n
LCBHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUp
Cit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NB
TVBMRVIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBEM0RYSEFORExFIHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5
TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgICAgICAgRDNEWEhB
TkRMRSB2c0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVM
TCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKworICAgICAgICAgICAgaWYgKHBzQ29uc3Rh
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7
CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5U
eXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwor
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0
dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Ug
PSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlBpeGVsIHNoYWRlciBzYW1wbGVy
IGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25z
dGFudCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRl
eHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVS
Q1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlcklu
ZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhp
bXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAg
ICBjYXNlIEQzRFhQQ19TVFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50czsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0
cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3Rh
bnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09O
U1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRl
c2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGRE
ZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIg
KyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3Jp
cHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIu
IikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNh
c2UgRDNEWFBDX1NDQUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2Ug
RDNEWFBDX01BVFJJWF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAg
ICByZXR1cm4gZGVmaW5lVW5pZm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUg
KyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7
CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlv
biwgX25hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQg
bG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVt
IHR5cGUgPSB1bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgewor
ICAgICAgICBkZWxldGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBH
TF9GUkFHTUVOVF9TSEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsK
KyAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNv
bnN0YW50RGVzY3JpcHRpb24pOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAg
ICAgICByZXR1cm4gdW5pZm9ybS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jt
cy5wdXNoX2JhY2sodW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1V
bmlmb3Jtcy5zaXplKCkgLSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1
bmlmb3JtLT5hcnJheVNpemU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVz
aF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVu
aWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0
IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dz
ID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQ
VF9TQU1QTEVSMkQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29s
dW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExF
Ul9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lO
VDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9J
TlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFu
dERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1
YXJlIG1hdHJpY2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisv
LyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpz
dHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUpCit7CisgICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1l
LmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsg
bmFtZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
K3sKKyAgICBzdGQ6OnN0cmluZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFu
eSBzdHJ1Y3R1cmUgZmllbGQgZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdo
aWxlICgocG9zID0gbmFtZS5maW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQor
ICAgIHsKKyAgICAgICAgbmFtZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgdGhlIGxlYWRpbmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykK
KyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5hbWUuc3Vic3RyKDMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxv
YXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZl
Y3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
cHMuZmxvYXQ0SW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xf
RkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICog
NCArIGpdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwg
dGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHND
b3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+dnMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDog
MDsKKyAgICAgICAgaW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6
bWF4KHBzQ291bnQsIHZzQ291bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5
X01BWF9CT09MX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNv
dW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9
IEdMX0ZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0
NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0K
KyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZv
cm0tPnZzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNv
dW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9y
W0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQp
dltpXSwgMCwgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlcklu
ZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4
ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAg
ICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZs
b2F0NEluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1w
bGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0
SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgg
Pj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RP
UjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9S
NCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAg
ICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Cisg
ICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0g
PSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsK
KworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVu
aWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9B
VF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2
WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9
CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1u
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RP
UjQgKnZlY3RvcikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAw
KTsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsK
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1
dGVzCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7CisgICAgdW5zaWduZWQg
aW50IGF0dHJpYnV0ZTsKKyAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpZiAobUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7
CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
XS5uYW1lLmNfc3RyKCk7CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUp
OworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUn
IGluc3RhbmNlCisKKyAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBl
OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCit7
CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsg
YXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUu
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAg
IGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBT
a2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9y
bSA9IDA7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm07CisgICAgZm9yICh1bmlmb3JtID0gMDsg
dW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICB7CisgICAgICAgIGlm
IChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
YWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBhY3RpdmVVbmlmb3JtKys7CisgICAgfQorCisgICAgQVNTRVJU
KHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIg
dGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAg
IHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1l
OworCisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
bmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6
ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAg
ICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNp
emUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKKworICAgICp0eXBlID0gbVVuaWZv
cm1zW3VuaWZvcm1dLT50eXBlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVV
bmlmb3JtQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21w
YXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFt
QmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3Ro
ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
bnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgo
KSArIDEpOworICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3Vu
dGluZyBpbiAiWzBdIi4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0
ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAm
aW5mb0xvZykKK3sKKyAgICBhcHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBs
ZXJzKCZpbmZvTG9nKSkKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorfQor
Citib29sIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZykK
K3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9m
IGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBp
bWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRl
UHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50
cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5n
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRF
WFRVUkVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxl
cnNQU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0
ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVk
KSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBt
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0
dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZl
ciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNb
aV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kp
CisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
aW5mb0xvZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ct
PmFwcGVuZCgiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRF
WFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBs
ZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxl
cnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1
bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVV
bml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dMaW50IFByb2dy
YW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUR4RGVwdGhSYW5nZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERl
cHRoTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOworfQor
CitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtRHhDb29yZExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRE
eEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhl
bFNpemVMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKwor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5YzVlMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oCkBAIC0wLDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6
IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2Jq
ZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZ
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworCisjaW5jbHVkZSA8ZDNk
eDkuaD4KKyNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNs
dWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFnbWVudFNo
YWRlcjsKK2NsYXNzIFZlcnRleFNoYWRlcjsKKworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRp
bmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9y
bShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplKTsKKworICAgIH5Vbmlmb3JtKCk7CisKKyAgICBib29sIGlzQXJyYXkoKTsKKworICAg
IGNvbnN0IEdMZW51bSB0eXBlOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERl
Y29yYXRlZCBuYW1lCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0
ZWQgbmFtZQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25l
ZCBjaGFyICpkYXRhOworICAgIGJvb2wgZGlydHk7CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZv
CisgICAgeworICAgICAgICBSZWdpc3RlckluZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBm
bG9hdDRJbmRleCA9IC0xOworICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7CisgICAgICAg
ICAgICBib29sSW5kZXggPSAtMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0
YW50RGVzY3JpcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVyU2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEQzRFhSU19CT09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
SW5kZXg7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9h
dDRJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQpOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9
IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBmbG9hdDRJbmRleDsKKyAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50
IGJvb2xJbmRleDsKKworICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKKyAgICB9OworCisgICAg
UmVnaXN0ZXJJbmZvIHBzOworICAgIFJlZ2lzdGVySW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1
c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0
byBoYW5kbGVzCitzdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9u
KGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVk
IGludCBpbmRleCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBl
bGVtZW50OworICAgIHVuc2lnbmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMgaXMgdGhlIHJl
c3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUg
cGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5Cit7CisgIHB1Ymxp
YzoKKyAgICBQcm9ncmFtQmluYXJ5KCk7CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVM
b2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQg
YXR0cmlidXRlSW5kZXgpOworCisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5
cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0
U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXgpOworICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7
CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBz
ZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRy
aXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNl
dFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKKyAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOworICAg
IGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGlu
dCAqcGFyYW1zKTsKKworICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7
CisgICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhD
b29yZExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRp
b24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAg
ICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBk
aXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisKKyAgICBib29s
IGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENv
dW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0
aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQg
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVN
YXhMZW5ndGgoKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAg
IEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUo
SW5mb0xvZyAmaW5mb0xvZyk7CisgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmlu
Zm9Mb2cpOworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6
OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8v
IFByZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRl
VW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVu
ZGVyc2NvcmUKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9n
cmFtQmluYXJ5KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0
YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2cs
IHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKwor
ICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRl
QmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1z
KEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdM
ZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIi
KTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
KyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBs
eVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlV
bmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQz
RFhWRUNUT1I0ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2
KTsKKworICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
bVZlcnRleEV4ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBs
aW5raW5nLgorICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJ
RDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxp
bmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRl
eFtNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAg
ICAgIGJvb2wgYWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAg
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1w
bGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZT
W01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKwor
ICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlm
b3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0
aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAg
ICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKKworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisK
KyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4
IDYwMDQyNTUuLjRiOTExZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1
aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJl
dHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJi
dWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51
bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQg
SW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJn
ZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJl
MkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93
biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFj
dGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVu
Y2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9
CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOwor
fQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJl
MkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0
ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdl
dCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5z
ZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAot
UmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0
dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQo
MCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKwor
R0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRT
ZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRT
ZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIElt
cGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRh
cmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1
cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBU
ZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJl
ZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3
ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRl
eHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVD
dWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1
YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5k
ZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJl
bmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRh
cmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJn
ZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVw
dGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkg
KlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJl
dHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkg
Y29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7
CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisK
K0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9
Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1
cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRE
M0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNp
Z25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVk
IGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9
CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1
ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0
YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVM
TCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNv
bnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6
OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVy
YnVmZmVyU3RvcmFnZSgpCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAg
cmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZl
cigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRh
cmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVu
Y2lsYnVmZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVj
dDNEU3VyZmFjZTkgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJl
ZigpOworICAgIH0KKwogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRl
eCA2MGVjMDU4Li5lNmQ1ZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNw
YWNlIGdsCiB7Ci1jbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVy
ZUN1YmVNYXA7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNz
IERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50
ZXJmYWNlKTsKIH07CiAKLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJl
KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+
UmVuZGVyYnVmZmVyVGV4dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUy
RCgpOwogCiAgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
ICAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgw
LDkgKzgxLDM3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVy
VGV4dHVyZSk7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1
cmUyRCk7CiAKLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmlu
ZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsK
K307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1
ZmZlckludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVh
bCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYo
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisg
ICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVp
IGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRp
bmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBt
VGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuY3BwCmluZGV4IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0
IEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICppbmZvTG9nKQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUlu
Zm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6
Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5
KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChp
bnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9M
b2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAg
ICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2
b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBjaGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChz
b3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6
Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShi
dWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJs
ZW4oc291cmNlKSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5k
ZXhdID0gJ1wwJzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5oCmluZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0
eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7
Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAK
ICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBo
YW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRl
PiBBdHRyaWJ1dGVBcnJheTsKIAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgog
ewotICAgIGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5Owog
CiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBH
THVpbnQgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuY3BwCmluZGV4IDI5MTc3ZDIuLjVjY2Y4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAtMSwzMDkwICsx
LDI5MDkgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRz
IHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gVGV4dHVy
ZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5k
IHJlbGF0ZWQKLS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
NyBwYWdlIDYzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUg
PGQzZHg5dGV4Lmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW50cmluLmg+
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5
LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi1u
YW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0
dXJlU2VyaWFsID0gMTsKLQotc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5
cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8Ci0gICAgICAgIGZvcm1hdCA9PSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRf
RFhUMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEUpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1OwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJC
MzJHMzJSMzJGOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VT
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMTZCMTZHMTZSMTZGOwotICAgIH0KLSAg
ICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBpZiAo
Zm9ybWF0ID09IEdMX0xVTUlOQU5DRSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNl
VGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYm
IGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RDNERk1UX1g4UjhHOEI4OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4
RzhCODsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1zdGF0aWMg
Ym9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAg
c3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2Ug
RDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRf
RFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0g
ICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMy
RzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW1hZ2U6Oklt
YWdlKCkKLXsKLSAgICBtV2lkdGggPSAwOyAKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtRm9ybWF0
ID0gR0xfTk9ORTsKLSAgICBtVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0KLSAgICBtU3VyZmFj
ZSA9IE5VTEw7Ci0KLSAgICBtRGlydHkgPSBmYWxzZTsKLQotICAgIG1EM0RQb29sID0gRDNEUE9P
TF9TWVNURU1NRU07Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFn
ZTo6fkltYWdlKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFj
ZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6cmVkZWZpbmUoR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZv
cmNlUmVsZWFzZSkKLXsKLSAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1IZWln
aHQgIT0gaGVpZ2h0IHx8Ci0gICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8Ci0gICAgICAgIG1U
eXBlICE9IHR5cGUgfHwKLSAgICAgICAgZm9yY2VSZWxlYXNlKQotICAgIHsKLSAgICAgICAgbVdp
ZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Gb3JtYXQg
PSBmb3JtYXQ7Ci0gICAgICAgIG1UeXBlID0gdHlwZTsKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUg
ZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVy
dFRleHR1cmVGb3JtYXRUeXBlKG1Gb3JtYXQsIG1UeXBlKTsKLQotICAgICAgICBpZiAobVN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZh
Y2UoKQotewotICAgIGlmKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9V
c2UgPSBEM0RQT09MX1NZU1RFTU1FTTsKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0
ICE9IDApCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xz
aXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdo
dCA9IG1IZWlnaHQ7Ci0gICAgICAgIGlmIChJc0NvbXByZXNzZWQobUZvcm1hdCkgJiYgKG1XaWR0
aCAlIDQgIT0gMCB8fCBtSGVpZ2h0ICUgNCAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCBpc011bHQ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgdXBzYW1wbGVDb3VudCA9IDA7
Ci0gICAgICAgICAgICB3aGlsZSAoIWlzTXVsdDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmVxdWVzdFdpZHRoIDw8PSAxOwotICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQg
PDw9IDE7Ci0gICAgICAgICAgICAgICAgdXBzYW1wbGVDb3VudCsrOwotICAgICAgICAgICAgICAg
IGlmIChyZXF1ZXN0V2lkdGggJSA0ID09IDAgJiYgcmVxdWVzdEhlaWdodCAlIDQgPT0gMCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9
IHVwc2FtcGxlQ291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdl
dERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2
ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwg
TlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFj
ZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxU
b0ZldGNoLCAmbmV3U3VyZmFjZSk7Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7Ci0gICAgbURpcnR5ID0gZmFsc2U7Ci0g
ICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7Ci19Ci0KLUhSRVNVTFQgSW1hZ2U6OmxvY2soRDNETE9D
S0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpCi17Ci0gICAgY3JlYXRlU3Vy
ZmFjZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0KLSAg
ICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1Jl
Y3QobG9ja2VkUmVjdCwgcmVjdCwgMCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIEltYWdlOjp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6Omlz
UmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOjpnZXRE
M0RGb3JtYXQoKSBjb25zdAotewotICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRo
ZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKLSAgICAvLyB3aGljaCB3b3VsZCBi
ZSBhIGJ1ZyBieSB0aGUgY2FsbGVyCi0gICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VO
S05PV04pOwotCi0gICAgcmV0dXJuIG1EM0RGb3JtYXQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5
ICpJbWFnZTo6Z2V0U3VyZmFjZSgpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0
dXJuIG1TdXJmYWNlOwotfQotCi12b2lkIEltYWdlOjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAg
ICBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxMLCBtU3VyZmFj
ZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgbVN1cmZhY2UtPlJl
bGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNl
LT5HZXREZXNjKCZkZXNjKTsKLSAgICBBU1NFUlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdF
RCk7Ci0KLSAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7
Ci19Ci0KLXZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RT
dXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdl
dFN1cmZhY2UoKTsKLQotICAgIGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQotICAg
IHsKLSAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBE
M0RQT09MX01BTkFHRUQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
RDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdFN1cmZhY2UsIE5VTEwsICZyZWN0LCBzb3Vy
Y2VTdXJmYWNlLCBOVUxMLCAmcmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNU
RU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgUE9JTlQgcG9p
bnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRvcH07Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3Vy
ZmFjZSwgJnBvaW50KTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWdu
YXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBh
cyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3Rhbmds
ZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4K
LXZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9
IC1Db21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0g
ICAgaW5wdXQgPSAoKGNoYXIqKWlucHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7Ci0K
LSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxv
YWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRf
TDgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBn
ZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJH
QkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JB
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNTU1
MURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFz
IHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6
Ci0gICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBs
b2FkTHVtaW5hbmNlRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmxvYXQgdGV4dHVy
ZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhh
dCB3YXkgaW4gRDNECi0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRB
bHBoYUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFs
ZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAq
IDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIDgpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBjb25zdCBp
bnQgZGVzdEJ5dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDE6IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQ
aXhlbDsKLQotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3Jt
YXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSAgIC8vIEw4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxm
bG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RCeXRl
c1BlclBpeGVsID0gbmF0aXZlPyAyOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsy
KngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHko
ZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291
cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsy
KngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAy
KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykg
fCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
LSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAq
IDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZz
ZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUs
IE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7
Ci0gICAgX19tMTI4aSBick1hc2sgPSBfbW1fc2V0MV9lcGkzMigweDAwZmYwMGZmKTsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQp
OwotICAgICAgICBpbnQgeCA9IDA7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFs
aWduZWQKLSAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90Pigm
ZGVzdFt4XSkgJiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4
XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsgeCArPSA0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZHVfc2kxMjgo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOwotICAgICAgICAg
ICAgLy8gTWFzayBvdXQgZyBhbmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdlCi0gICAgICAgICAgICBf
X20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRh
KTsKLSAgICAgICAgICAgIC8vIE1hc2sgb3V0IGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkg
YnJDb21wb25lbnRzID0gX21tX2FuZF9zaTEyOChzb3VyY2VEYXRhLCBick1hc2spOwotICAgICAg
ICAgICAgLy8gU3dhcCBiIGFuZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyU3dhcHBlZCA9IF9t
bV9zaHVmZmxlaGlfZXBpMTYoX21tX3NodWZmbGVsb19lcGkxNihickNvbXBvbmVudHMsIF9NTV9T
SFVGRkxFKDIsIDMsIDAsIDEpKSwgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpOwotICAgICAgICAg
ICAgX19tMTI4aSByZXN1bHQgPSBfbW1fb3Jfc2kxMjgoZ2FDb21wb25lbnRzLCBiclN3YXBwZWQp
OwotICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+
KCZkZXN0W3hdKSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlcmZvcm0gbGVm
dG92ZXIgd3JpdGVzCi0gICAgICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBm
ZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgKmRlc3QgPSBOVUxMOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIDQpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAw
ZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAo
KHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhG
MDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAw
MEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAq
c291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkg
PDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChy
Z2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdi
YSAmIDB4MDAwMSkgPyAweEZGIDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAg
IGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAg
KyB4b2Zmc2V0ICogMTYpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNl
dCAqIDg7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIG1lbWNweShkZXN0LCBz
b3VyY2UsIHdpZHRoKjQpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
IHsKLSAgICBzd2l0Y2ggKGdldEQzREZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBEM0RG
TVRfRFhUMToKLSAgICAgICAgICBsb2FkRFhUMURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICAgIGxvYWREWFQz
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNE
Rk1UX0RYVDU6Ci0gICAgICAgICAgbG9hZERYVDVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVs
bChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8v
IEEgRFhUMSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTFdIGNvbG9yMC4KLSAgLy8gWzItM10g
Y29sb3IxLgotICAvLyBbNC03XSBjb2xvciBiaXRtYXAsIDIgYml0cyBwZXIgcGl4ZWwuCi0gIC8v
IFNvIGVhY2ggb2YgdGhlIDQtNyBieXRlcyByZXByZXNlbnRzIG9uZSBsaW5lLCBmbGlwcGluZyBh
IGJsb2NrIGlzIGp1c3QKLSAgLy8gZmxpcHBpbmcgdGhvc2UgYnl0ZXMuCi0KLSAgLy8gRmlyc3Qg
MzItYml0cyBpcyB0d28gUkdCNTY1IGNvbG9ycyBzaGFyZWQgYnkgdGlsZSBhbmQgZG9lcyBub3Qg
bmVlZCB0byBiZSBtb2RpZmllZC4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLQotICAvLyBTZWNv
bmQgMzItYml0cyBjb250YWlucyA0IHJvd3Mgb2YgNCAyLWJpdCBpbnRlcnBvbGFudHMgYmV0d2Vl
biB0aGUgY29sb3JzLiBBbGwgcm93cyBzaG91bGQgYmUgZmxpcHBlZC4KLSAgZGVzdFsxXSA9IChz
b3VyY2VbMV0gPj4gMjQpIHwKLSAgICAgICAgICAgICgoc291cmNlWzFdIDw8IDgpICYgMHgwMEZG
MDAwMCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDBGRjAwKSB8Ci0g
ICAgICAgICAgICAoc291cmNlWzFdIDw8IDI0KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIg
bGluZXMgb2YgYSBEWFQxIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZs
aXBDb3B5RFhUMUJsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQg
aW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSBzb3VyY2Vb
MF07Ci0gIGRlc3RbMV0gPSAoKHNvdXJjZVsxXSA8PCA4KSAmIDB4MDAwMEZGMDApIHwKLSAgICAg
ICAgICAgICgoc291cmNlWzFdID4+IDgpICYgMHgwMDAwMDBGRik7Ci19Ci0KLS8vIEZsaXBzIGEg
ZnVsbCBEWFQzIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5
RFhUM0Jsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBk
ZXN0KSB7Ci0gIC8vIEEgRFhUMyBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTddICBhbHBoYSBi
aXRtYXAsIDQgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAg
Ly8gRmlyc3QgYW5kIFNlY29uZCAzMiBiaXRzIGFyZSA0Yml0IHBlciBwaXhlbCBhbHBoYSBhbmQg
bmVlZCB0byBiZSBmbGlwcGVkLgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAoc291
cmNlWzFdIDw8IDE2KTsKLSAgZGVzdFsxXSA9IChzb3VyY2VbMF0gPj4gMTYpIHwgKHNvdXJjZVsw
XSA8PCAxNik7Ci0KLSAgLy8gQW5kIGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFib3Zl
IGZ1bmN0aW9uLgotICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCArIDIp
OwotfQotCi0vLyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDMgYmxvY2sgaW4gdGhl
IHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tIYWxmKGNvbnN0IHVu
c2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91
dCBhYm92ZS4KLSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8PCAx
Nik7Ci0gIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0K
LS8vIEZsaXBzIGEgZnVsbCBEWFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2
b2lkIEZsaXBDb3B5RFhUNUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5z
aWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhUNSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFsw
XSAgICBhbHBoYTAuCi0gIC8vIFsxXSAgICBhbHBoYTEuCi0gIC8vIFsyLTddICBhbHBoYSBiaXRt
YXAsIDMgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8g
VGhlIGFscGhhIGJpdG1hcCBkb2Vzbid0IGVhc2lseSBtYXAgbGluZXMgdG8gYnl0ZXMsIHNvIHdl
IGhhdmUgdG8KLSAgLy8gaW50ZXJwcmV0IGl0IGNvcnJlY3RseS4gIEV4dHJhY3RlZCBmcm9tCi0g
IC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9yZWdpc3RyeS9zcGVjcy9FWFQvdGV4dHVyZV9jb21w
cmVzc2lvbl9zM3RjLnR4dCA6Ci0gIC8vCi0gIC8vICAgVGhlIDYgImJpdHMiIGJ5dGVzIG9mIHRo
ZSBibG9jayBhcmUgZGVjb2RlZCBpbnRvIG9uZSA0OC1iaXQgaW50ZWdlcjoKLSAgLy8KLSAgLy8g
ICAgIGJpdHMgPSBiaXRzXzAgKyAyNTYgKiAoYml0c18xICsgMjU2ICogKGJpdHNfMiArIDI1NiAq
IChiaXRzXzMgKwotICAvLyAgICAgICAgICAgICAgICAgICAyNTYgKiAoYml0c180ICsgMjU2ICog
Yml0c181KSkpKQotICAvLwotICAvLyAgIGJpdHMgaXMgYSA0OC1iaXQgdW5zaWduZWQgaW50ZWdl
ciwgZnJvbSB3aGljaCBhIHRocmVlLWJpdCBjb250cm9sIGNvZGUKLSAgLy8gICBpcyBleHRyYWN0
ZWQgZm9yIGEgdGV4ZWwgYXQgbG9jYXRpb24gKHgseSkgaW4gdGhlIGJsb2NrIHVzaW5nOgotICAv
LwotICAvLyAgICAgICBjb2RlKHgseSkgPSBiaXRzWzMqKDQqeSt4KSsxLi4zKig0KnkreCkrMF0K
LSAgLy8KLSAgLy8gICB3aGVyZSBiaXQgNDcgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYW5kIGJp
dCAwIGlzIHRoZSBsZWFzdAotICAvLyAgIHNpZ25pZmljYW50IGJpdC4KLSAgY29uc3QgdW5zaWdu
ZWQgY2hhciogc291cmNlQnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0
Qnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRl
c3QpKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAo
c291cmNlQnl0ZXNbM10gKyAyNTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBs
aW5lXzJfMyA9IHNvdXJjZUJ5dGVzWzVdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzZdICsgMjU2ICog
c291cmNlQnl0ZXNbN10pOwotICAvLyBzd2FwIGxpbmVzIDAgYW5kIDEgaW4gbGluZV8wXzEuCi0g
IHVuc2lnbmVkIGludCBsaW5lXzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7
Ci0gIC8vIHN3YXAgbGluZXMgMiBhbmQgMyBpbiBsaW5lXzJfMy4KLSAgdW5zaWduZWQgaW50IGxp
bmVfM18yID0gKChsaW5lXzJfMyAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKGxpbmVfMl8zICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBd
ID0gc291cmNlQnl0ZXNbMF07Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBk
ZXN0Qnl0ZXNbMl0gPSBsaW5lXzNfMiAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzNf
MiAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfM18yICYgMHhmZjAwMDAp
ID4+IDE2OwotICBkZXN0Qnl0ZXNbNV0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1s2
XSA9IChsaW5lXzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzddID0gKGxpbmVfMV8w
ICYgMHhmZjAwMDApID4+IDE2OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5n
IHRoZSBhYm92ZSBmdW5jdGlvbi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIs
IGRlc3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQ1IGJs
b2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJsb2NrSGFs
Zihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8v
IFNlZSBsYXlvdXQgYWJvdmUuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQq
Pihzb3VyY2UpKTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBs
aW5lXzBfMSA9IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICog
c291cmNlQnl0ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYg
MHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEg
JiAweGZmZjAwMCkgPj4gMTIpOwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAg
ZGVzdEJ5dGVzWzFdID0gc291cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfMV8w
ICYgMHhmZjsKLSAgZGVzdEJ5dGVzWzNdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBk
ZXN0Qnl0ZXNbNF0gPSAobGluZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIEZsaXBDb3B5RFhU
MUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRE
WFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQg
PT0gMCk7Ci0gICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGgg
PT0gMSk7Ci0gICAgQVNTRVJUKGlucHV0UGl0Y2ggJSA4ID09IDApOwotICAgIEFTU0VSVChvdXRw
dXRQaXRjaCAlIDggPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVk
IGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQot
ICAgIC8vIFJvdW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50
IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJs
b2Nrc0Fjcm9zcyAqIDI7Ci0KLSAgICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNh
c2UgMToKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sK
LSAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRl
c3RbeCArIDFdID0gc291cmNlW3ggKyAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlu
dHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29w
eURYVDFCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVp
Z2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8g
NDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7Ci0KLSAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyB4LCBkZXN0
ICsgeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0
aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1
dFBpdGNoICUgMTYgPT0gMCk7Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7Ci0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRoIHVw
IGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0
aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDQ7Ci0KLSAg
ICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0
W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3gg
KyAxXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEZsaXBDb3B5RFhUM0Jsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVChoZWlnaHQgJSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQgLyA0OyArK3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0Z1bGwoc291
cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDVEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAg
ICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAg
ICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAl
IDE2ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBS
b3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NB
Y3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jv
c3MgKiA0OwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAx
XSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2Vb
eCArIDJdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0hhbGYoc291cmNlICsgeCwgZGVz
dCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
MTYpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4
ICs9IDQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbGlwQ29weURY
VDVCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gVGhpcyBpbXBs
ZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwg
dGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOjpjb3B5
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzY3JpcHRpb247Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7
Ci0gICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWlu
U3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlv
bi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+R2V0
UmVuZGVyVGFyZ2V0RGF0YShyZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldERhdGEpOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXRE
YXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBkZXNjcmlwdGlvbi5IZWlnaHQpOwotICAgIGludCBkZXN0WU9mZnNldCA9IHRyYW5z
Zm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1IZWlnaHQpOwotICAgIFJFQ1QgZGVz
dFJlY3QgPSB7eG9mZnNldCwgZGVzdFlPZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgZGVzdFlPZmZz
ZXQgKyBoZWlnaHR9OwotCi0gICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAg
ICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZ2V0U3VyZmFjZSgpLCBO
VUxMLCAmZGVzdFJlY3QsIHJlbmRlclRhcmdldERhdGEsIE5VTEwsICZzb3VyY2VSZWN0LCBEM0RY
X0ZJTFRFUl9CT1gsIDApOwotICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5
IGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0g
ezB9OwotICAgICAgICByZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNl
TG9jaywgJnNvdXJjZVJlY3QsIDApOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZh
Y2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRh
cmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0g
ezB9OwotICAgICAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1p
Z2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2Nr
UmVjdCgpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VM
b2NrLnBCaXRzOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBj
aGFyKilkZXN0TG9jay5wQml0czsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5G
b3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4
OgotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBz
d2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICog
NCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4Ogot
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCAr
IDNdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAg
ICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJl
ZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAg
ICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQg
Pj4gNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4
N0M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8
PCAxKSB8IChyZWQgPj4gNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICog
MiArIDFdID0gKHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2soKTsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgIH0KLQotICAgIHJlbmRlclRhcmdldERhdGEtPlJl
bGVhc2UoKTsKLQotICAgIG1EaXJ0eSA9IHRydWU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjpUZXh0
dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVy
VGFyZ2V0KSwKLSAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJl
bmRlclRhcmdldCkpLAotICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkp
Ci17Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQotewotfQotCi1ib29s
IFRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXQ7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQ
T09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBv
b2w7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQg
VGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJy
ZW50VGV4dHVyZVNlcmlhbCsrOwotfQotCi1UZXh0dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBS
ZWZDb3VudE9iamVjdChpZCkKLXsKLSAgICBtTWluRmlsdGVyID0gR0xfTkVBUkVTVF9NSVBNQVBf
TElORUFSOwotICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7Ci0gICAgbVdyYXBTID0gR0xfUkVQ
RUFUOwotICAgIG1XcmFwVCA9IEdMX1JFUEVBVDsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1
ZTsKLSAgICBtVXNhZ2UgPSBHTF9OT05FOwotICAgIAotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci0KLSAgICBtSW1tdXRhYmxlID0gZmFsc2U7Ci19Ci0KLVRleHR1cmU6On5UZXh0dXJlKCkKLXsK
LX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0g
ZmlsdGVyKQotewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBj
YXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1B
UF9MSU5FQVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtTWluRmlsdGVyID0gZmlsdGVyOwot
ICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0
dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikK
LSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAg
ICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0
ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhH
TGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9S
RVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJP
UkVEX1JFUEVBVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7Ci0gICAgICAgICAg
ICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBz
dGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFw
VChHTGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBH
TF9SRVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01J
UlJPUkVEX1JFUEVBVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7Ci0gICAgICAg
ICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNh
Z2Ugc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
VXNhZ2UoR0xlbnVtIHVzYWdlKQotewotICAgIHN3aXRjaCAodXNhZ2UpCi0gICAgewotICAgICAg
Y2FzZSBHTF9OT05FOgotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xF
OgotICAgICAgICBtVXNhZ2UgPSB1c2FnZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVy
ZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1pbkZpbHRlcjsKLX0KLQot
R0xlbnVtIFRleHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYWdG
aWx0ZXI7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwUygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1XcmFwUzsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVdyYXBUOwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtVXNhZ2U7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAg
ICBpZiAocGl4ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2Nr
ZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7
Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRl
eHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAg
ICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShpbWFnZS0+Z2V0
V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAg
ICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpLCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFn
ZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHdpZHRoICsgeG9m
ZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0
SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdl
dEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2Ut
PmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscyAhPSBOVUxM
KQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhv
ZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRI
ZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1h
Z2UgKmltYWdlKQotewotICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgo
KSB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAg
ICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGdldEludGVybmFsRm9ybWF0KCkpCi0gICAgewotICAgICAg
ICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAocGl4ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBSRUNUIHVwZGF0
ZVJlZ2lvbjsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICB1
cGRhdGVSZWdpb24ucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHVwZGF0ZVJlZ2lv
bi5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICB1cGRhdGVSZWdpb24udG9wID0g
eW9mZnNldDsKLQotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbik7Ci0KLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIGZvcm1hdCk7Ci0gICAgICAg
ICAgICBpbnQgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCk7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQo
KSksIHdpZHRoLCBoZWlnaHQsIC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
cGl4ZWxzKSArIGlucHV0U2l6ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlE
aXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFp
c1NhbXBsZXJDb21wbGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
Ci0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlm
IChnZXRTdG9yYWdlKGZhbHNlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0
dXJlKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbURpcnR5UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0
eUltYWdlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBU
ZXh0dXJlOjpyZXNldERpcnR5KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0g
ICAgbURpcnR5SW1hZ2VzID0gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRU
ZXh0dXJlU2VyaWFsKCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3Jh
Z2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlh
bCgpIDogMDsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlh
bChHTGVudW0gdGFyZ2V0KQotewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3Rv
cmFnZSh0cnVlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdl
dFNlcmlhbCh0YXJnZXQpIDogMDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0
aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1h
eGltdW0gbnVtYmVyIG9mIGxldmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAv
LyBPcGVuR0wgRVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJt
aXQgTlBPVCBtaXBtYXBzLgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJl
KCktPkdldExldmVsQ291bnQoKSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIo
KQotewotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNv
bnRleHQtPmdldEJsaXR0ZXIoKTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJn
ZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJv
b2wgZnJvbU1hbmFnZWQpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBO
VUxMLCBOVUxMLCBzb3VyY2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5k
U2NlbmUoKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNl
LCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3Qz
RFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRl
clRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAg
IG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1
cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRh
cmdldCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJp
YWwoKSkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQot
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsK
LQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwot
ICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9y
YWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewot
ICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFj
ZTkgKlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpCi17Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KGxldmVsLCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAq
VGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBt
VGV4dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0U2VyaWFsOwotfQotCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVy
ZShpZCkKLXsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgbVN1cmZhY2UgPSBOVUxMOwot
ICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLSAgICBtUHJveHlSZWZzID0gMDsKLX0KLQot
VGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKLXsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7
Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAg
IAotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRl
eHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIFdl
IG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMg
YWN0aW5nIGFzIAotLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5v
dCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3
aGljaCBoYXMgYmVlbiBkZWxldGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRl
eHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAg
aWYgKG1Qcm94eVJlZnMgPiAwKQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVBy
b3h5UmVmcyA9PSAwKQotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdM
ZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRV
UkVfMkQ7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29u
c3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
Ci0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0KEdM
aW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWln
aHQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBd
LmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RGT1JNQVQgVGV4
dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVsw
XS5nZXREM0RGb3JtYXQoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSkKLXsKLSAgICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZp
bmVkID0gbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSwgZmFsc2UpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtE
aXJ0eSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNldElt
YWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQot
dm9pZCBUZXh0dXJlMkQ6OmJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0g
ICAgcmVsZWFzZVRleEltYWdlKCk7Ci0KLSAgICBHTGVudW0gZm9ybWF0OwotCi0gICAgc3dpdGNo
KHN1cmZhY2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OgotICAgICAgICBmb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgICBmb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbUltYWdlQXJyYXlbMF0ucmVkZWZpbmUoZm9ybWF0LCBzdXJmYWNl
LT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5nZXRIZWlnaHQoKSwgR0xfVU5TSUdORURfQllURSwgdHJ1
ZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4
dHVyZVN0b3JhZ2UyRChzdXJmYWNlLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCkpOwotCi0gICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbVN1cmZhY2Ut
PnNldEJvdW5kVGV4dHVyZSh0aGlzKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJ
bWFnZSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNl
dEJvdW5kVGV4dHVyZShOVUxMKTsKLSAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgICAg
IGlmIChtVGV4U3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOwotICAgICAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xf
UkdCQSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRD
b21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwot
fQotCi12b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAg
QVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0KLSAgICBp
ZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdExldmVsID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAg
ICAgICAgaWYgKGRlc3RMZXZlbCkKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltYWdl
ID0gJm1JbWFnZUFycmF5W2xldmVsXTsKLSAgICAgICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNl
KGRlc3RMZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAg
ICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0
UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQot
Ci12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAg
ICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0p
KQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50
IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUg
dGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci0KLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotICAgCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZl
bF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uY29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBp
ZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAg
ICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5s
ZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5n
ZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNl
UmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwot
Ci0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgw
LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1
cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJj
ZVJlY3QsIGZvcm1hdCwgMCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRl
c3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVi
dWZmZXIgKnNvdXJjZSkKLXsKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlb
bGV2ZWxdLmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVs
XS5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291
cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdl
ICYmICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRh
cmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRh
cmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAg
IGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBz
b3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3Vy
Y2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNl
dCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xl
dmVsXS5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlm
IChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29w
eShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4
b2Zmc2V0LCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0
LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7
Ci0gICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAg
IEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBl
KTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUp
OwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7
Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVs
IDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJl
ZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRo
ID0gc3RkOjptYXgoMSwgd2lkdGggPj4gMSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEs
IGhlaWdodCA+PiAxKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCi0gICAgewot
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5T
SUdORURfQllURSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFn
ZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+
Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5z
ZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGVz
dHMgZm9yIDJEIHRleHR1cmUgc2FtcGxpbmcgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAzLjguMiBwYWdlIDg1LgotYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBs
ZXRlKCkgY29uc3QKLXsKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lk
dGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwot
Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElO
RUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFw
cGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAg
IChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmICht
TWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBt
TWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG5wb3RT
dXBwb3J0ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKTsKLQotICAg
IGlmICghbnBvdFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xf
Q0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAgICAgIChnZXRXcmFw
VCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1p
cG1hcHBpbmcpCi0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNz
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVy
ZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdMc2l6ZWkgd2lkdGgg
PSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdl
QXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgcSA9IGxv
ZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBs
ZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVs
XS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4g
bGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4
KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1
cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdl
dEludGVybmFsRm9ybWF0KCkpOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUy
RDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1U
ZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBh
IERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9p
ZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlb
MF0uZ2V0SGVpZ2h0KCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgs
IGhlaWdodCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZv
cm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsKLSAgICAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAg
ICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBsZXZl
bCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwo
bGV2ZWwpOwotICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNl
KHN1cmZhY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LX0KLQotdm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xl
dmVsXTsKLQotICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRo
KCksIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1
cmVTdG9yYWdlMkQgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCkgIT0gMCAmJiBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7
Ci0gICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0K
LSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0g
TlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9y
YWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkpCi0gICAgICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRl
eHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKLXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdo
dCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJh
eVswXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5l
SW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkg
Pj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlw
ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVu
ZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBl
ciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsK
LQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwg
bG93ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkg
dXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+
UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VB
cnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJy
YXlbaV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3Vy
ZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwg
aSAtIDEsIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5t
YXJrRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJl
MkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0g
R0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3Ji
dWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBu
ZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdl
dCkpOwotICAgIH0KLQotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotSURpcmVj
dDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17
Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0
aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVl
KSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBk
YXRlVGV4dHVyZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxl
dmVsKDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAm
JiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJl
bmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVh
dGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7
Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAg
ICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlh
bChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCi17Ci0gICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4dHVyZSA9IE5VTEw7
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxl
dmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1h
dCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3Jh
Z2VDdWJlTWFwKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9y
YWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZl
bCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRD
dWJlTWFwU3VyZmFjZShlczJkeDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwg
JnN1cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4
dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKLX0K
LQotVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlk
KQotewotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7
IGkrKykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldID0gMDsKLSAgICB9Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjp+VGV4dHVy
ZUN1YmVNYXAoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAg
ICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0
b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotfQotCi0vLyBXZSBuZWVkIHRvIG1haW50
YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyAKLS8v
IHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVs
ZXRlZCB3aGlsZSAKLS8vIHByb3h5IHJlZmVyZW5jZXMgc3RpbGwgZXhpc3QuIElmIHRoZSByZWZl
cmVuY2UgY291bnQgZHJvcHMgdG8gemVybywKLS8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBO
VUxMLCBzbyB0aGF0IGEgbmV3IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcKLS8vIHdpbGwgY2F1c2Ug
cmVjcmVhdGlvbi4KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAg
ewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICAgICAgbUZh
Y2VQcm94eVJlZnNbaV0rKzsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94
eSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID4gMCkKLSAg
ICAgICAgICAgICAgICBtRmFjZVByb3h5UmVmc1tpXS0tOwotCi0gICAgICAgICAgICBpZiAobUZh
Y2VQcm94eVJlZnNbaV0gPT0gMCkKLSAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBO
VUxMOwotICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRh
cmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci19Ci0KLUdM
c2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAg
IGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIDA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGlu
dCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0SGVp
Z2h0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVD
dWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFy
cmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5
cGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7Ci19
Ci0KLUQzREZPUk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4
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
YWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFM
Rl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpKQotICAgIHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1p
bkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1cHBv
cnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFdyYXBTKCkgIT0g
R0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlw
bWFwcGluZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0N1
YmVDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFpc01pcG1hcEN1YmVD
b21wbGV0ZSgpKSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1b
MF0uZ2V0V2lkdGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNl
KyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJh
eVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8
Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VB
cnJheVswXVswXS5nZXRGb3JtYXQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVsw
XVswXS5nZXRXaWR0aCgpOwotCi0gICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0gICAgZm9yIChp
bnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKLX0KLQot
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4
dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSBy
ZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBv
bmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0g
Y3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0g
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBz
aXplLCByZW5kZXJUYXJnZXQpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkK
LSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9y
IChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5z
ZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFj
ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQot
ICAgICAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmICht
SW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpICE9IDApCi0gICAgewotICAgICAgICBHTHNpemVp
IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotCi0gICAgICAgIG5ld1RleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVl
KTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYg
PSAwOyBmIDwgNjsgZisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVN
YXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJj
ZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChk
ZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVm
aW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsK
LQotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVN
YXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkKLXsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0g
MSk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCA9PSAzKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1og
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVUQV9BU1NFUlQo
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YID09IDUpOwotCi0gICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZh
Y2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtm
YWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7
Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7
Ci0gICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0g
ZmFjZUluZGV4KHRhcmdldCk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgaWYgKCFtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0g
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRl
eFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VB
cnJheVtmYWNlaW5kZXhdW2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBBU1NFUlQod2lk
dGggPT0gaGVpZ2h0KTsKLQotICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxD
b3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zv
cm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3Vy
Y2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFt
cChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KDAsIGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgo
KSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVz
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVu
ZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAg
ICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0KLSAg
ICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0K
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJU
YXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWlu
ZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRl
eF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2Ft
cGxlckNvbXBsZXRlKCkpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVts
ZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwg
PCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9
IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9y
YnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNs
YW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0
aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3As
IDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zv
cm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS5nZXRXaWR0aCgpKTsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qg
PSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAg
ICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdl
dEZvcm1hdCgpLCB4b2Zmc2V0LCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAg
ZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQot
ewotICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7
Ci0gICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAg
IEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBl
KTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUp
OwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKLSAg
ICBtSW1tdXRhYmxlID0gdHJ1ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBs
ZXZlbHM7IGxldmVsKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLnJlZGVmaW5lKGZvcm1hdCwgc2l6ZSwgc2l6ZSwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICBzaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiAxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBm
YWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNl
XVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3Ig
KGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNl
dE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQotewotICAgIGlm
ICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJy
YXlbMF1bMF0uZ2V0V2lkdGgoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJn
ZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRo
ZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUlt
YWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7
IGYgPCA2OyBmKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUlt
YWdlQXJyYXlbZl1bMF0uZ2V0Rm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdl
dFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZdWzBdLmdldFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRl
eFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdl
LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBp
LTEpOwotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
LCBpKTsKLQotICAgICAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5V
TEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCkt
PmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0NsZWFuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9
IDA7IGYgPCA2OyBmKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9hZFN1
cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5V
TEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhf
RklMVEVSX0JPWCwgMCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
RVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGly
dHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVy
ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCi17Ci0gICAg
aWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0gICAg
aWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZSh0aGlzLCB0YXJnZXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2Vd
OwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQotewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpOwotCi0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRl
ZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgcmV0dXJu
IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOwotfQotCi1UZXh0dXJl
U3RvcmFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17
Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlDQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1
cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQg
Y2xhc3Nlcw0KKy8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wg
dGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVkDQorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9U
ZXh0dXJlLmgiDQorDQorI2luY2x1ZGUgPGQzZHg5dGV4Lmg+DQorDQorI2luY2x1ZGUgPGFsZ29y
aXRobT4NCisjaW5jbHVkZSA8aW50cmluLmg+DQorDQorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
Ig0KKw0KKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIg0KKw0KKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCINCisjaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIg0KKyNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCINCisNCituYW1lc3BhY2UgZ2wNCit7DQor
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOw0K
Kw0KK3N0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBEM0RGTVRfSU5UWjsNCisgICAgfQ0KKyAgICBlbHNlIGlm
IChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fA0KKyAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSkNCisgICAgew0KKyAgICAg
ICAgcmV0dXJuIEQzREZNVF9EWFQzOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQ0KKyAgICB7DQorICAgICAgICByZXR1
cm4gRDNERk1UX0RYVDU7DQorICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOw0KKyAgICB9DQor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpDQorICAgIHsNCisgICAgICAg
IHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsNCisgICAgfQ0KKyAgICBlbHNlIGlmICh0eXBl
ID09IEdMX1VOU0lHTkVEX0JZVEUpDQorICAgIHsNCisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
TFVNSU5BTkNFICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRl
eHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgcmV0dXJuIEQzREZNVF9BOEw4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBp
ZiAoZm9ybWF0ID09IEdMX1JHQikNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX1g4UjhHOEI4Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4
RzhCODsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Ow0KK30NCisNCitz
dGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpDQor
ew0KKyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQ0KKyAgICB7DQorICAgICAgICByZXR1
cm4gdHJ1ZTsNCisgICAgfQ0KKyAgICBzd2l0Y2goZm9ybWF0KQ0KKyAgICB7DQorICAgICAgY2Fz
ZSBEM0RGTVRfTDg6DQorICAgICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICBjYXNlIEQzREZN
VF9EWFQxOg0KKyAgICAgIGNhc2UgRDNERk1UX0RYVDM6DQorICAgICAgY2FzZSBEM0RGTVRfRFhU
NToNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoN
CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOg0KKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6DQorICAgICAgICByZXR1
cm4gdHJ1ZTsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0
VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNl
UmVuZGVyYWJsZSkNCit7DQorICAgIERXT1JEIGQzZHVzYWdlID0gMDsNCisNCisgICAgaWYgKGQz
ZGZtdCA9PSBEM0RGTVRfSU5UWikNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNB
R0VfREVQVEhTVEVOQ0lMOw0KKyAgICB9DQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8
IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQ0KKyAgICB7DQorICAgICAgICBkM2R1c2FnZSB8
PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7DQorICAgIH0NCisgICAgcmV0dXJuIGQzZHVzYWdlOw0K
K30NCisNCitJbWFnZTo6SW1hZ2UoKQ0KK3sNCisgICAgbVdpZHRoID0gMDsgDQorICAgIG1IZWln
aHQgPSAwOw0KKyAgICBtRm9ybWF0ID0gR0xfTk9ORTsNCisgICAgbVR5cGUgPSBHTF9VTlNJR05F
RF9CWVRFOw0KKw0KKyAgICBtU3VyZmFjZSA9IE5VTEw7DQorDQorICAgIG1EaXJ0eSA9IGZhbHNl
Ow0KKw0KKyAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBtRDNERm9ybWF0
ID0gRDNERk1UX1VOS05PV047DQorfQ0KKw0KK0ltYWdlOjp+SW1hZ2UoKQ0KK3sNCisgICAgaWYg
KG1TdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICB9
DQorfQ0KKw0KK2Jvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpDQorew0K
KyAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8DQorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8
fA0KKyAgICAgICAgbUZvcm1hdCAhPSBmb3JtYXQgfHwNCisgICAgICAgIG1UeXBlICE9IHR5cGUg
fHwNCisgICAgICAgIGZvcmNlUmVsZWFzZSkNCisgICAgew0KKyAgICAgICAgbVdpZHRoID0gd2lk
dGg7DQorICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0Ow0KKyAgICAgICAgbUZvcm1hdCA9IGZvcm1h
dDsNCisgICAgICAgIG1UeXBlID0gdHlwZTsNCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBm
b3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQNCisgICAgICAgIG1EM0RGb3JtYXQgPSBDb252ZXJ0VGV4
dHVyZUZvcm1hdFR5cGUobUZvcm1hdCwgbVR5cGUpOw0KKw0KKyAgICAgICAgaWYgKG1TdXJmYWNl
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7DQorICAgICAg
ICAgICAgbVN1cmZhY2UgPSBOVUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRy
dWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCit2b2lkIEltYWdlOjpj
cmVhdGVTdXJmYWNlKCkNCit7DQorICAgIGlmKG1TdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm47DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBO
VUxMOw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7DQorICAgIGNv
bnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07DQorICAgIGNvbnN0IEQz
REZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsNCisgICAgQVNTRVJUKGQzZEZvcm1h
dCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGgg
dGV4dHVyZXMNCisNCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkNCisgICAg
ew0KKyAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7DQorICAgICAgICBHTHNpemVpIHJlcXVl
c3RXaWR0aCA9IG1XaWR0aDsNCisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWln
aHQ7DQorICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9
IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCBp
c011bHQ0ID0gZmFsc2U7DQorICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOw0KKyAg
ICAgICAgICAgIHdoaWxlICghaXNNdWx0NCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsNCisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8
PD0gMTsNCisgICAgICAgICAgICAgICAgdXBzYW1wbGVDb3VudCsrOw0KKyAgICAgICAgICAgICAg
ICBpZiAocmVxdWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApDQor
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGxldmVsVG9G
ZXRjaCA9IHVwc2FtcGxlQ291bnQ7DQorICAgICAgICB9DQorDQorICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhl
aWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZDNkRm9ybWF0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0
dXJlLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIHN1cmZhY2UgZmFpbGVkLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsNCisgICAgICAgIG5ld1RleHR1cmUt
PlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7DQorICAg
IG1EaXJ0eSA9IGZhbHNlOw0KKyAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsNCit9DQorDQorSFJF
U1VMVCBJbWFnZTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAq
cmVjdCkNCit7DQorICAgIGNyZWF0ZVN1cmZhY2UoKTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQg
PSBEM0RFUlJfSU5WQUxJRENBTEw7DQorDQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAg
ICAgICAgcmVzdWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOw0K
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgICAgIG1EaXJ0eSA9
IHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQordm9pZCBJbWFn
ZTo6dW5sb2NrKCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KK30NCisNCitib29sIEltYWdlOjppc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdA0KK3sgICAgDQorICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5k
ZXJhYmxlKGdldEQzREZvcm1hdCgpKTsNCit9DQorDQorRDNERk9STUFUIEltYWdlOjpnZXREM0RG
b3JtYXQoKSBjb25zdA0KK3sNCisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhl
IGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdA0KKyAgICAvLyB3aGljaCB3b3VsZCBi
ZSBhIGJ1ZyBieSB0aGUgY2FsbGVyDQorICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9V
TktOT1dOKTsNCisNCisgICAgcmV0dXJuIG1EM0RGb3JtYXQ7DQorfQ0KKw0KK0lEaXJlY3QzRFN1
cmZhY2U5ICpJbWFnZTo6Z2V0U3VyZmFjZSgpDQorew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQor
DQorICAgIHJldHVybiBtU3VyZmFjZTsNCit9DQorDQordm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1
cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpDQorew0KKyAgICBpZiAobVN1cmZhY2Up
DQorICAgIHsNCisgICAgICAgIEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5V
TEwsIE5VTEwsIG1TdXJmYWNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAg
ICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzYzsNCisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7DQorICAgIEFTU0VSVChkZXNj
LlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsNCisNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0K
KyAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsNCit9DQorDQordm9pZCBJbWFnZTo6dXBkYXRlU3Vy
ZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7DQorDQorICAgIGlmIChz
b3VyY2VTdXJmYWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpDQorICAgIHsNCisg
ICAgICAgIFJFQ1QgcmVjdDsNCisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7DQorICAgICAg
ICByZWN0LnRvcCA9IHlvZmZzZXQ7DQorICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdp
ZHRoOw0KKyAgICAgICAgcmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0Ow0KKw0KKyAgICAg
ICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJm
YWNlLCBOVUxMLCAmcmVjdCwgc291cmNlU3VyZmFjZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVS
X0JPWCwgMCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAg
ICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBVcGRhdGVT
dXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBv
b2xzIA0KKyAgICAgICAgICAgIFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9Ow0K
KyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uo
c291cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOw0KKyAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
Ly8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNl
dCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0
DQorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4NCit2b2lkIEltYWdlOjpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkNCit7DQorICAgIFJFQ1QgbG9ja1JlY3QgPQ0K
KyAgICB7DQorICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsNCisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9
DQorDQorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1h
dCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsNCisNCisgICAgc3dpdGNoICh0eXBlKQ0KKyAgICB7
DQorICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOg0KKyAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c1NTRTIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRB
bHBoYURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOg0KKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkg
PT0gRDNERk1UX0w4KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMs
IGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsNCisgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
Ow0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAg
ICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOg0KKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAg
Y2FzZSBHTF9SR0I6DQorICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
IH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOg0KKyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
IH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MToNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOg0KKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
IH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfRkxPQVQ6DQorICAgICAgICBzd2l0
Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFy
ZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5
IGluIEQzRA0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBo
YUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOg0K
KyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAgICBsb2FkUkdC
RmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xf
UkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoNCisgICAgICAg
IHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgLy8gZmxvYXQgdGV4dHVy
ZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhh
dCB3YXkgaW4gRDNEDQorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6DQorICAgICAgICAgICAgbG9h
ZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCOg0KKyAg
ICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KK3ZvaWQg
SW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7DQorICAgIA0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAg
ICB7DQorICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0KKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gc291cmNlW3hdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBO
VUxMOw0KKyAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsNCisNCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0K
Kw0KKyAgICAgICAgaW50IHg7DQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25l
ZA0KKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVz
dFt4XSkgJiAweEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwg
MjQ7DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2Fk
bF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7DQor
ICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxv
d2VyIGJ5dGUgdG8gemVybw0KKyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9f
ZXBpOCh6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBl
YWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvDQorICAgICAg
ICAgICAgX19tMTI4aSBsbyA9IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0
YSk7DQorICAgICAgICAgICAgX19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lk
ZSwgc291cmNlRGF0YSk7DQorDQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJw
cmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgbG8pOw0KKyAgICAgICAgICAgIF9tbV9zdG9y
ZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7DQor
ICAgICAgICB9DQorDQorICAgICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcg0KKyAgICAgICAg
Zm9yICg7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9
DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQor
ICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
dm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisg
ICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7DQor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxM
Ow0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAg
ICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorDQorICAgICAgICBpZiAoIW5hdGl2ZSkg
ICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBMOCBkZXN0
aW5hdGlvbiBmb3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291
cmNlLCB3aWR0aCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IDEuMGY7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0K
KyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBN
ID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0N
Cit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hh
ciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKCFuYXRpdmUp
ICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
ICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGggKiAyKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3Qg
PSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7
DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0g
c291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4
KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAg
ICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFs
ZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hv
cnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpk
ZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisg
ICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IHNvdXJjZVt4ICogMyArIDBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQor
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgw
MDFGKSA+PiAyKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3
RTApID4+IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsNCisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAx
Myk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAgICAgIH0NCisg
ICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3ggKiAzICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MS4wZjsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCSGFs
ZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0g
TlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0K
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsNCisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAw
OiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDENCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCit2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQor
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7DQorICAgIF9fbTEyOGkgYnJNYXNrID0gX21t
X3NldDFfZXBpMzIoMHgwMGZmMDBmZik7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoKTsNCisgICAgICAgIGludCB4ID0gMDsNCisNCisgICAgICAgIC8vIE1ha2Ugb3V0
cHV0IHdyaXRlcyBhbGlnbmVkDQorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KCZkZXN0W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisg
ICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJn
YmEgJiAweGZmMDBmZjAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoOyB4ICsgMyA8
IHdpZHRoOyB4ICs9IDQpDQorICAgICAgICB7DQorICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VE
YXRhID0gX21tX2xvYWR1X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZz
b3VyY2VbeF0pKTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24n
dCBjaGFuZ2UNCisgICAgICAgICAgICBfX20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rf
c2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRhKTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFu
ZCByDQorICAgICAgICAgICAgX19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNv
dXJjZURhdGEsIGJyTWFzayk7DQorICAgICAgICAgICAgLy8gU3dhcCBiIGFuZCByDQorICAgICAg
ICAgICAgX19tMTI4aSBiclN3YXBwZWQgPSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxl
bG9fZXBpMTYoYnJDb21wb25lbnRzLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVG
RkxFKDIsIDMsIDAsIDEpKTsNCisgICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9z
aTEyOChnYUNvbXBvbmVudHMsIGJyU3dhcHBlZCk7DQorICAgICAgICAgICAgX21tX3N0b3JlX3Np
MTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0KTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzDQorICAgICAgICBm
b3IgKDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQg
aW50IHJnYmEgPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2Jh
LCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7DQorICAgICAgICB9DQor
ICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsN
CisgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsNCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNl
W3hdOw0KKyAgICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBm
ZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBy
Z2JhID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAm
IDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOw0KKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDAp
ID4+IDgpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjAwMCkg
Pj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsN
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYg
MHgwMDNFKSA+PiAzKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAw
eDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsNCisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+
PiAxMyk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAwMDEpID8g
MHhGRiA6IDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJH
QkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2
KTsNCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgg
KiA4KTsNCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0K
KyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkgew0KKyAgICBBU1NFUlQoeG9mZnNl
dCAlIDQgPT0gMCk7DQorICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsNCisNCisgICAgUkVD
VCBsb2NrUmVjdCA9IHsNCisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsDQorICAgICAgICB4b2Zm
c2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQNCisgICAgfTsNCisNCisgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOw0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tS
ZWN0KTsNCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47
DQorICAgIH0NCisNCisgICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNp
emUod2lkdGgsIGhlaWdodCwgbUZvcm1hdCk7DQorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENv
bXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1Gb3JtYXQpOw0KKyAgICBpbnQgcm93cyA9IGlu
cHV0U2l6ZSAvIGlucHV0UGl0Y2g7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytp
KQ0KKyAgICB7DQorICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsg
aSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gp
LCBpbnB1dFBpdGNoKTsNCisgICAgfQ0KKw0KKyAgICB1bmxvY2soKTsNCit9DQorDQorLy8gVGhp
cyBpbXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50
ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzDQordm9pZCBJbWFn
ZTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRh
cmdldCkNCit7DQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0K
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7DQorICAgIEQz
RFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZk
ZXNjcmlwdGlvbik7DQorICAgIA0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWln
aHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJUYXJnZXRE
YXRhLCBOVUxMKTsNCisNCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsN
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAg
ICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5k
ZXJUYXJnZXREYXRhKTsNCisNCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAg
ICAgICBFUlIoIkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisg
ICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7
eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsNCisgICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zm
c2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9Ow0KKw0KKyAg
ICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IEQz
RFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRlc3RSZWN0LCBy
ZW5kZXJUYXJnZXREYXRhLCBOVUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsN
CisgICAgICAgIA0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOw0K
KyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAgIH0NCisgICAg
ZWxzZQ0KKyAgICB7DQorICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9Ow0K
KyAgICAgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ss
ICZzb3VyY2VSZWN0LCAwKTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFj
ZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRh
cmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7DQorICAgICAgICB9DQorDQorICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9j
ayA9IHswfTsNCisgICAgICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOw0K
KyAgICAgICAgDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVj
dGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERh
dGEtPlVubG9ja1JlY3QoKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMp
DQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2ln
bmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0czsNCisNCisgICAgICAgICAgICBz
d2l0Y2ggKGRlc2NyaXB0aW9uLkZvcm1hdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODoNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4Og0KKyAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQorICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisgICAgICAgICAg
ICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAg
ICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxv
Y2suUGl0Y2g7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRj
aDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
DQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107DQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAr
PSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVz
dExvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAg
ICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHJlZCB8IChyZWQgPj4gNSk7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7
DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICBzd2l0Y2go
Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9MODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0g
c291cmNlW3ggKiAyICsgMV0gJiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBp
dGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQor
ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQp
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVk
IGNoYXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICB9DQorDQorICAgICAgICB1bmxvY2soKTsNCisgICAgICAgIHJlbmRlclRh
cmdldERhdGEtPlVubG9ja1JlY3QoKTsNCisgICAgfQ0KKw0KKyAgICByZW5kZXJUYXJnZXREYXRh
LT5SZWxlYXNlKCk7DQorDQorICAgIG1EaXJ0eSA9IHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9y
YWdlOjpUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSkNCisgICAgOiBtRDNEVXNhZ2UodXNhZ2Up
LA0KKyAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwN
CisgICAgICBtVGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkNCit7DQorfQ0KKw0K
K1RleHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQ0KK3sNCit9DQorDQorYm9vbCBUZXh0
dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIChtRDNE
VXNhZ2UgJiAoRDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkg
IT0gMDsNCit9DQorDQorYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QNCit7
DQorICAgIHJldHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsNCit9DQorDQorRDNE
UE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQz
RFBvb2w7DQorfQ0KKw0KK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbUQzRFVzYWdlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0
b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJl
U2VyaWFsOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVy
ZVNlcmlhbCgpDQorew0KKyAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7DQorfQ0K
Kw0KK1RleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQ0KK3sN
CisgICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsNCisgICAgbU1hZ0Zp
bHRlciA9IEdMX0xJTkVBUjsNCisgICAgbVdyYXBTID0gR0xfUkVQRUFUOw0KKyAgICBtV3JhcFQg
PSBHTF9SRVBFQVQ7DQorICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICBtVXNhZ2Ug
PSBHTF9OT05FOw0KKyAgICANCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisNCisgICAgbUlt
bXV0YWJsZSA9IGZhbHNlOw0KK30NCisNCitUZXh0dXJlOjp+VGV4dHVyZSgpDQorew0KK30NCisN
CisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxp
ZCBlbnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKQ0KK3sNCisgICAgc3dpdGNoIChmaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05F
QVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAg
ICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFS
X01JUE1BUF9MSU5FQVI6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIg
IT0gZmlsdGVyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9
IGZpbHRlcjsNCisgICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7DQorICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgfQ0KKyAgICAg
IGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCit9DQorDQorLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBw
YXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7
DQorICAgIHN3aXRjaCAoZmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0K
KyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWFn
RmlsdGVyICE9IGZpbHRlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NYWdG
aWx0ZXIgPSBmaWx0ZXI7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVl
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0N
CisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0K
Ky8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBl
bnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQ0KK3sN
CisgICAgc3dpdGNoICh3cmFwKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6DQorICAg
ICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFU
Og0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7DQorICAgICAgICAgICAgICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdy
YXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNl
dFdyYXBUKEdMZW51bSB3cmFwKQ0KK3sNCisgICAgc3dpdGNoICh3cmFwKQ0KKyAgICB7DQorICAg
ICAgY2FzZSBHTF9SRVBFQVQ6DQorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOg0KKyAgICAg
IGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICht
V3JhcFQgIT0gd3JhcCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1XcmFwVCA9
IHdyYXA7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJh
bWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpDQorew0KKyAgICBz
d2l0Y2ggKHVzYWdlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9OT05FOg0KKyAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToNCisgICAgICAgIG1Vc2FnZSA9IHVzYWdl
Ow0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgfQ0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtTWluRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVy
ZTo6Z2V0TWFnRmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWFnRmlsdGVyOw0KK30N
CisNCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1X
cmFwUzsNCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtV3JhcFQ7DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVVzYWdlOw0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldEltYWdl
KEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
DQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5s
b2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFn
ZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3Nl
ZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSkNCit7DQorICAgIGlmIChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2Ut
PmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhl
aWdodCgpLCBwaXhlbHMpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCitib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICpp
bWFnZSkNCit7DQorICAgIGlmIChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1h
Z2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQor
ICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpDQorew0KKyAgICBpZiAoIWlzU2FtcGxlckNvbXBs
ZXRlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0
b3JhZ2UoZmFsc2UpID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAg
ICB9DQorDQorICAgIHVwZGF0ZVRleHR1cmUoKTsNCisNCisgICAgcmV0dXJuIGdldEJhc2VUZXh0
dXJlKCk7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QN
Cit7DQorICAgIHJldHVybiBtRGlydHlQYXJhbWV0ZXJzOw0KK30NCisNCitib29sIFRleHR1cmU6
Omhhc0RpcnR5SW1hZ2VzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtRGlydHlJbWFnZXM7DQor
fQ0KKw0KK3ZvaWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpDQorew0KKyAgICBtRGlydHlQYXJhbWV0
ZXJzID0gZmFsc2U7DQorICAgIG1EaXJ0eUltYWdlcyA9IGZhbHNlOw0KK30NCisNCit1bnNpZ25l
ZCBpbnQgVGV4dHVyZTo6Z2V0VGV4dHVyZVNlcmlhbCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFn
ZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOw0KKyAgICByZXR1cm4gdGV4dHVyZSA/IHRl
eHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0
dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIFRleHR1
cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsNCisgICAgcmV0dXJuIHRleHR1
cmUgPyB0ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7DQorfQ0KKw0K
K2Jvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1JbW11
dGFibGU7DQorfQ0KKw0KK0dMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdA0KK3sNCisgICAgaWYgKChpc1BvdzIod2lkdGgpICYm
IGlzUG93MihoZWlnaHQpKSB8fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBs
ZXZlbHMNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vIE9wZW5HTCBFUyAy
LjAgd2l0aG91dCBHTF9PRVNfdGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9UIG1pcG1h
cHMuDQorICAgICAgICByZXR1cm4gMTsNCisgICAgfQ0KK30NCisNCitHTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0DQorew0KKyAgICByZXR1cm4gY3JlYXRp
b25MZXZlbHMoc2l6ZSwgc2l6ZSk7DQorfQ0KKw0KK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUo
KS0+R2V0TGV2ZWxDb3VudCgpIDogMDsNCit9DQorDQorQmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRl
cigpDQorew0KKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOw0KKyAgICByZXR1
cm4gY29udGV4dC0+Z2V0QmxpdHRlcigpOw0KK30NCisNCitib29sIFRleHR1cmU6OmNvcHlUb1Jl
bmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNv
dXJjZSwgYm9vbCBmcm9tTWFuYWdlZCkNCit7DQorICAgIGlmIChzb3VyY2UgJiYgZGVzdCkNCisg
ICAgew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7DQorDQorICAgICAgICBpZiAoZnJvbU1hbmFn
ZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJv
bVN1cmZhY2UoZGVzdCwgTlVMTCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRF
Ul9CT1gsIDApOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsNCisgICAgICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisg
ICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOw0KKyAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorVGV4dHVy
ZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRl
eHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRh
cmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAg
bVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4
dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQ0KKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJl
bmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sN
CisgICAgbVRleHR1cmUgPSBOVUxMOw0KKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlz
IG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4
dHVyZQ0KKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4
dHVyZSBjcmVhdGlvbg0KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApDQorICAgIHsN
CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwg
bGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsN
CisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCitUZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3Jh
Z2UyRCgpDQorew0KKyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJl
LT5SZWxlYXNlKCk7DQorICAgIH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0K
K0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50
IGxldmVsKQ0KK3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOw0KKw0K
KyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsNCit9
DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK3Vuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QNCit7DQorICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK30NCisNCitU
ZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkNCit7DQorICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsNCisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBtQ29sb3JidWZm
ZXJQcm94eSA9IE5VTEw7DQorICAgIG1Qcm94eVJlZnMgPSAwOw0KK30NCisNCitUZXh0dXJlMkQ6
On5UZXh0dXJlMkQoKQ0KK3sNCisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOw0KKw0KKyAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsNCisgICAgDQor
ICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4
dHVyZShOVUxMKTsNCisgICAgICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgfQ0KK30NCisNCisv
LyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyANCisvLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2Ug
ZG8gbm90IGF0dGVtcHQgdG8gdXNlIGEgcG9pbnRlciANCisvLyB0byBhIHJlbmRlcmJ1ZmZlciBw
cm94eSB3aGljaCBoYXMgYmVlbiBkZWxldGVkLg0KK3ZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sNCisgICAgbVByb3h5UmVmcysrOw0KK30N
CisNCit2b2lkIFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpDQorew0KKyAgICBpZiAobVByb3h5UmVmcyA+IDApDQorICAgICAgICBtUHJveHlSZWZzLS07
DQorDQorICAgIGlmIChtUHJveHlSZWZzID09IDApDQorICAgICAgICBtQ29sb3JidWZmZXJQcm94
eSA9IE5VTEw7DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJlMkQ6
OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2xldmVsXS5nZXRXaWR0aCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQor
DQorR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QNCit7DQor
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7DQorICAgIGVsc2UNCisg
ICAgICAgIHJldHVybiAwOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZv
cm1hdChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0Rm9ybWF0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiBHTF9OT05FOw0KK30N
CisNCitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0
DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
DQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOw0KKyAg
ICBlbHNlDQorICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047DQorfQ0KKw0KK3ZvaWQgVGV4
dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpDQorew0KKyAgICByZWxlYXNlVGV4
SW1hZ2UoKTsNCisNCisgICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVk
ZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmICht
VGV4U3RvcmFnZSAmJiByZWRlZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9DQor
DQorICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5V
TEw7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
VGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsNCit9DQorDQordm9pZCBU
ZXh0dXJlMkQ6OmJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICBy
ZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAgR0xlbnVtIGZvcm1hdDsNCisNCisgICAgc3dpdGNo
KHN1cmZhY2UtPmdldEZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4
Qjg6DQorICAgICAgICBmb3JtYXQgPSBHTF9SR0JBOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6DQorICAgICAgICBmb3JtYXQgPSBHTF9SR0I7DQorICAgICAg
ICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOw0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZv
cm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lH
TkVEX0JZVEUsIHRydWUpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhT
dG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpKTsNCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgbVN1cmZhY2UgPSBzdXJm
YWNlOw0KKyAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOw0KK30NCisNCit2b2lk
IFRleHR1cmUyRDo6cmVsZWFzZVRleEltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisg
ICAgew0KKyAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAgICAg
IG1TdXJmYWNlID0gTlVMTDsNCisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICAgICAgbVRleFN0
b3JhZ2UgPSBOVUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5yZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1
cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgR0xfVU5TSUdORURfQllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJ
bWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3Zv
aWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIEFTU0VS
VChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOw0KKw0KKyAgICBpZiAo
bGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisg
ICAgICAgIGlmIChkZXN0TGV2ZWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgSW1hZ2UgKmlt
YWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsNCisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3Vy
ZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAg
ICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGltYWdlLT5tYXJr
Q2xlYW4oKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVy
ZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpDQorICAgIHsN
CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkNCisgICAgew0KKyAgICAgICAgY29tbWl0UmVjdChsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9p
ZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpDQorew0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNl
LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsN
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0K
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURf
QllURSk7DQorICAgDQorICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZv
cm1hdCgpKQ0KKyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgwLCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2Vz
ID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7DQorDQorICAgICAgICBp
ZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0geDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdp
ZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsNCisNCisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZv
cm1hdCwgMCwgMCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKQ0KK3sNCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsN
CisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNl
LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsN
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0K
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAg
IGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0
b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0uY29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBy
ZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KKyAg
ICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdl
LT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1Jl
bmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICB1cGRhdGVUZXh0
dXJlKCk7DQorDQorICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7
DQorICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHg7DQorICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSB5ICsgaGVpZ2h0Ow0KKw0KKw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAg
ICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRG
b3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdG9yYWdl
KEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0
KGludGVybmFsZm9ybWF0KTsNCisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50
ZXJuYWxmb3JtYXQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsN
CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwg
ZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsNCisNCisg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0K
KyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgdHlwZSwgdHJ1ZSk7DQorICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEp
Ow0KKyAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOw0KKyAgICB9DQor
DQorICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlb
bGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0K
KyAgICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisg
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChsZXZlbCk7DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRT
dXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFRlc3RzIGZv
ciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMy44LjIgcGFnZSA4NS4NCitib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdA0KK3sNCisgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRo
KCk7DQorICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQor
DQorICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7DQor
DQorICAgIHN3aXRjaCAobU1pbkZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVT
VDoNCisgICAgICBjYXNlIEdMX0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsN
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoN
CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX05F
QVJFU1RfTUlQTUFQX0xJTkVBUjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
Og0KKyAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7DQorICAgICAgICBicmVhazsNCisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxG
b3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGlu
ZWFyRmlsdGVyKCkpIHx8DQorICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFM
Rl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8ICht
TWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgYm9vbCBucG90U3VwcG9ydCA9IGdldENvbnRleHQoKS0+
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCk7DQorDQorICAgIGlmICghbnBvdFN1cHBvcnQpDQor
ICAgIHsNCisgICAgICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFp
c1BvdzIod2lkdGgpKSB8fA0KKyAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1pcG1hcHBpbmcpDQor
ICAgIHsNCisgICAgICAgIGlmICghbnBvdFN1cHBvcnQpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorDQorICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0
dXJuIHRydWU7DQorfQ0KKw0KKy8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBs
ZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuDQorYm9v
bCBUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAgaWYgKGlzSW1t
dXRhYmxlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAg
IEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICB9DQorDQorICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7DQorDQor
ICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgew0KKyAg
ICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVsw
XS5nZXRGb3JtYXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgICAgICB9DQorDQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFR5cGUoKSAh
PSBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVs
XS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAo
bUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBs
ZXZlbCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6
aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIElzQ29tcHJl
c3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6
aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0RlcHRoVGV4dHVy
ZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisN
CisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRl
eHR1cmUgaW1hZ2VzDQordm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQ0KK3sNCisgICAg
R0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQorICAgIEdMaW50IGxldmVscyA9
IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0g
bUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0
VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMs
IGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICANCisgICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVs
Q291bnQoKTsNCisNCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7
IGxldmVsKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBU
ZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUoKQ0KK3sNCisgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsNCisNCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykNCisgICAgew0KKyAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsN
CisNCisgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAg
VGV4dHVyZVN0b3JhZ2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7DQorDQorICAgIGlmIChtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkg
IT0gMCkNCisgICAgew0KKyAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdl
dFdpZHRoKCk7DQorICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpOw0KKyAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhl
aWdodCk7DQorICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNE
Rm9ybWF0KCk7DQorICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2Rm
bXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAg
bmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgd2lkdGgsIGhlaWdodCk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVM
TCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0K
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorDQorICAg
ICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKSkNCisgICAgICAgICAgICAgICAgeyAgIA0KKyAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsNCisgICAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBk
ZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAo
c291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7
DQorDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpn
ZW5lcmF0ZU1pcG1hcHMoKQ0KK3sNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJh
eVswXS5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkN
CisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJy
YXlbMF0uZ2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsNCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICB7DQorICAgICAgICByZWRl
ZmluZUltYWdlKGksIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCANCisgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVp
Z2h0KCkgPj4gaSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBd
LmdldFR5cGUoKSk7DQorICAgIH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9y
YWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpIC0gMSk7DQor
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1
cmZhY2VMZXZlbChpKTsNCisNCisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dl
ciAhPSBOVUxMKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigp
LT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAg
ICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgaWYg
KGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgbUltYWdl
QXJyYXlbaV0ubWFya0NsZWFuKCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAg
ICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAg
ICAgICB7DQorICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSA9PSBO
VUxMKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoRkFJTEVE
KEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSwg
TlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwg
RDNEWF9GSUxURVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBF
UlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOw0KKyAgICAg
ICAgICAgIH0NCisNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCitSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVu
ZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRV
UkVfMkQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtQ29sb3JidWZm
ZXJQcm94eSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5l
dyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJn
ZXQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7DQorfQ0KKw0K
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJE
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0
dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgp
Ow0KKyAgICANCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQ0KKyAg
ICBpZiAoaXNEZXB0aCgwKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0N
CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpn
ZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJl
IGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0K
Kw0KKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRlcHRoIHRleHR1cmUNCisgICAg
aWYgKCFpc0RlcHRoKDApKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0K
KyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsNCit9DQorDQorVGV4
dHVyZVN0b3JhZ2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkNCit7
DQorICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1
cmUoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQor
fQ0KKw0KK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkNCisgICAgOiBU
ZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpDQorew0KKyAgICBtVGV4dHVyZSA9IE5VTEw7
DQorICAgIC8vIGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVh
dGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJl
IGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAgICBpZiAoc2l6ZSA+IDAp
DQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
Ow0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNp
emUsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4
dHVyZVN0b3JhZ2VDdWJlTWFwKCkNCit7DQorICAgIGlmIChtVGV4dHVyZSkNCisgICAgew0KKyAg
ICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsNCisgICAgfQ0KK30NCisNCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkNCit7DQorICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYgKG1UZXh0dXJl
KQ0KKyAgICB7DQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFw
U3VyZmFjZShlczJkeDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZh
Y2UpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAg
ICByZXR1cm4gc3VyZmFjZTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJl
U3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
VGV4dHVyZTsNCit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleCh0YXJn
ZXQpOw0KK30NCisNCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6
IFRleHR1cmUoaWQpDQorew0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBO
VUxMOw0KKyAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOw0KKyAgICB9DQorfQ0KKw0KK1Rl
eHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA2OyBpKyspDQorICAgIHsNCisgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQor
ICAgIH0NCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5V
TEw7DQorfQ0KKw0KKy8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2Vz
IHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIA0KKy8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVy
ZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSANCisvLyBwcm94eSBy
ZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHpl
cm8sDQorLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0
ZW1wdCBhdCByZWZlcmVuY2luZw0KKy8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4NCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sN
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspDQorICAgIHsNCisgICAgICAgIGlmICht
RmFjZVByb3hpZXNbaV0gPT0gcHJveHkpDQorICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0r
KzsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsg
aSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApDQorICAgICAg
ICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldLS07DQorDQorICAgICAgICAgICAgaWYgKG1GYWNl
UHJveHlSZWZzW2ldID09IDApDQorICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5V
TEw7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpn
ZXRUYXJnZXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7DQor
fQ0KKw0KK0dMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0
YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7
DQorfQ0KKw0KK0dMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1
cm4gMDsNCit9DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOw0KKyAgICBlbHNlDQor
ICAgICAgICByZXR1cm4gR0xfTk9ORTsNCit9DQorDQorRDNERk9STUFUIFRleHR1cmVDdWJlTWFw
OjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAg
ICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3Jt
YXQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisN
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgw
LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQor
ICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1h
Z2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDQs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisg
ICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgVGV4dHVy
ZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFj
ZUluZGV4KGZhY2UpXVtsZXZlbF0pOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb21t
aXRSZWN0KGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxl
dmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdExldmVsID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsNCisgICAgICAgIEFTU0VSVChkZXN0TGV2
ZWwgIT0gTlVMTCk7DQorDQorICAgICAgICBpZiAoZGVzdExldmVsICE9IE5VTEwpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XTsNCisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVs
ZWFzZSgpOw0KKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpz
dWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xl
dmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAm
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisgICAgICAg
IGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSBtYXAgc2Ft
cGxpbmcgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdl
IDg2Lg0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QNCit7
DQorICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsNCisNCisgICAg
Ym9vbCBtaXBtYXBwaW5nOw0KKw0KKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisg
ICAgICBjYXNlIEdMX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBt
aXBtYXBwaW5nID0gZmFsc2U7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6
DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1h
dChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYmICFnZXRD
b250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fA0KKyAgICAgICAgKGdl
dEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xf
SEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8
IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIGlmIChn
ZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9U
T19FREdFIHx8IG1pcG1hcHBpbmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICghbWlwbWFwcGluZykNCisgICAg
ew0KKyAgICAgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsN
CisgICAgICAgIGlmICghaXNNaXBtYXBDdWJlQ29tcGxldGUoKSkgICAvLyBBbHNvIHRlc3RzIGZv
ciBpc0N1YmVDb21wbGV0ZSgpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBU
ZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMy43LjEwIHBhZ2UgODEuDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxl
dGUoKSBjb25zdA0KK3sNCisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgPD0g
MCB8fCBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsN
CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldFdpZHRoKCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVsw
XS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8DQorICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1b
MF0uZ2V0Rm9ybWF0KCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRU
eXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
dHJ1ZTsNCit9DQorDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUo
KSBjb25zdA0KK3sNCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsNCisgICAgICAgIHJl
dHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgc2l6ZSA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7DQorDQorICAgIGludCBxID0gbG9nMihzaXpl
KTsNCisNCisgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsN
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1h
dCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAg
ICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXRUeXBlKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJh
eVtmYWNlXVtsZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0K
K2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1
cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleFN0
b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7DQorfQ0KKw0KKy8v
IENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVy
ZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lDQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y3JlYXRlVGV4dHVyZSgpDQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVsw
XVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXpl
LCAwKTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZv
cm1hdCgpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1V
c2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9y
YWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHNpemUpOw0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQor
ICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQg
ZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3Jh
Z2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2UsIGxldmVsKTsNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNl
dE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkNCit7DQorICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQ0KKyAgICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
Ow0KKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdOw0KKw0KKyAgICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwg
aW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRU
b1JlbmRlclRhcmdldCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0
b3JhZ2UgPSBOVUxMOw0KKw0KKyAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAh
PSAwKQ0KKyAgICB7DQorICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpOw0KKyAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwg
MCk7DQorICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNE
Rm9ybWF0KCk7DQorICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2Rm
bXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAg
bmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQs
IGQzZHVzYWdlLCBzaXplKTsNCisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorICAg
ICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNl
ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGYsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICghY29w
eVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBu
ZXdUZXhTdG9yYWdlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVs
ZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgICBpZiAo
ZGVzdCkgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAg
bVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOw0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVl
Ow0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCB0eXBlKTsNCisNCisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7DQorfQ0KKw0KK3Vuc2ln
bmVkIGludCBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQ0KK3sNCisgICAg
TUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YID09IDEpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7
DQorICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDQpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1og
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNSk7DQorDQorICAgIHJldHVybiBm
YWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOw0KK30NCisNCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisg
ICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFn
ZSAmJiByZWRlZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgICAgICB9
DQorICAgICAgICB9DQorDQorICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBt
VGV4U3RvcmFnZSA9IE5VTEw7DQorDQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAg
ICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsN
CisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlaW5k
ZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsNCisgICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxl
dmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBp
ZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0K
KyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4
U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAg
ICANCisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLm1hcmtDbGVhbigpOw0K
Kw0KKyAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7DQorDQorICAgICAgICBpZiAod2lk
dGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4Ow0KKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAgICAgc291
cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhl
aWdodDsNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAgICAgICBp
ZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+
Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7DQorICAg
ICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBHTHNp
emVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRo
KCk7DQorDQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWln
aHQgPiBzaXplKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNv
dXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAg
ICB7DQorICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0K
KyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7DQorDQorICAg
IGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpDQorICAgIHsNCisgICAg
ICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQor
ICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAg
dXBkYXRlVGV4dHVyZSgpOw0KKw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBz
b3VyY2VSZWN0LmxlZnQgPSB4Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsg
d2lkdGg7DQorICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxl
dmVsKTsNCisNCisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1J
bWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsNCisg
ICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KKw0KKyAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCit9DQorDQordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHNpemUpDQorew0KKyAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJh
Y3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOw0KKyAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0
VHlwZShpbnRlcm5hbGZvcm1hdCk7DQorICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4
dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsNCisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRU
ZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhT
dG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2
ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQor
DQorICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAg
IHsNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShmb3Jt
YXQsIHNpemUsIHNpemUsIHR5cGUsIHRydWUpOw0KKyAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1h
eCgxLCBzaXplID4+IDEpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxl
dmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBm
YWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
LnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAg
IHsNCisgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3Ig
KGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4
U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwpOw0KKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZl
bF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygp
DQorew0KKyAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFnZXRD
b250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBp
ZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQg
cmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAg
ICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7DQor
ICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICB7DQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAg
ICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3JtYXQo
KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5
W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgp
KTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgIHsNCisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFw
U3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOw0KKyAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7DQorDQor
ICAgICAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94Rmls
dGVyKHVwcGVyLCBsb3dlcik7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAg
ICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrQ2xlYW4oKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmID0gMDsgZiA8IDY7IGYrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpDQorICAgICAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoRkFJ
TEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZh
Y2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbZl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVM
TCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIEVSUigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBp
IC0gMSwgaSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0ubWFya0RpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorfQ0KKw0KK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBm
YWNlID0gZmFjZUluZGV4KHRhcmdldCk7DQorDQorICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0g
PT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0
KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsNCit9DQorDQor
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQoSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsNCisNCisgICAgLy8gZW5zdXJlIHRoZSB1bmRl
cmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZA0KKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBO
VUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICB1cGRh
dGVUZXh0dXJlKCk7DQorICAgIA0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKHRhcmdldCwgMCk7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0b3Jh
Z2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQ0K
KyAgICB7DQorICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK30NCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUu
LjgwZTI4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5oCkBAIC0xLDQzMyArMSw0MjcgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRl
eHR1cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBj
b25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAu
IEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfVEVYVFVSRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5j
bHVkZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNs
dWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2Ug
ZWdsCi17Ci1jbGFzcyBTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7
Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4
aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBH
TCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQg
YmUgcXVlcmllZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfU0laRSA9IDE2Mzg0LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJF
X1NJWkUgPSAxNjM4NCwKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9
IDE1ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17
Ci0gIHB1YmxpYzoKLSAgICBJbWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRl
ZmluZShHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IHR5cGUsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkg
PSB0cnVlO30KLSAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBI
UkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3Qp
OwotICAgIHZvaWQgdW5sb2NrKCk7Ci0KLSAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdCB7cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7
cmV0dXJuIG1Gb3JtYXQ7fQotICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVybiBtVHlw
ZTt9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7
fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2b2lkIHNldE1h
bmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0
ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgbG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0KLSAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBj
b25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQg
bG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OwotCi0gICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihJbWFnZSk7Ci0KLSAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIEdMc2l6ZWkg
bVdpZHRoOwotICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGVudW0gbUZvcm1hdDsKLSAgICBH
TGVudW0gbVR5cGU7Ci0KLSAgICBib29sIG1EaXJ0eTsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7
ICAgLy8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNp
bmNlIGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0Owot
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0
b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7Ci0KLSAgICBib29s
IGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAg
ICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNl
cmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UpOwotCi0gICAgY29uc3QgYm9vbCBtUmVu
ZGVyVGFyZ2V0OwotICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7Ci0KLSAgICBjb25zdCB1bnNp
Z25lZCBpbnQgbVRleHR1cmVTZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVRl
eHR1cmVTZXJpYWwoKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJl
U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewot
ICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwotCi0gICAgdmlydHVh
bCB+VGV4dHVyZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdl
dCgpIGNvbnN0ID0gMDsKLQotICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwot
ICAgIGJvb2wgc2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMo
R0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOwotICAgIGJvb2wg
c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKTsKLQotICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25z
dDsKLSAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBT
KCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFVz
YWdlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJl
c3NlZCgpIGNvbnN0ID0gMDsKLQotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVy
ZSgpOwotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgYm9v
bCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsKLSAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkg
Y29uc3Q7Ci0gICAgdm9pZCByZXNldERpcnR5KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1
cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpOwotCi0gICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OwotCi0gICAgc3RhdGlj
IGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+
KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRo
ZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGgg
dGhlIHJlc291cmNlIG1hbmFnZXIuCi0KLSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJidWZmZXJUZXh0dXJlOwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1Yklt
YWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9pZCBzZXRDb21wcmVz
c2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
YWdlKTsKLSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLQotICAg
IEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25z
dDsKLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBib29sIGNvcHlUb1Jl
bmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNv
dXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBH
TGVudW0gbU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7
Ci0gICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAgICBi
b29sIG1EaXJ0eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgVGV4
dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKLX07Ci0KLWNs
YXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZh
Y2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0
QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRl
clRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElEaXJlY3Qz
RFRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdl
dFNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJl
MkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhl
aWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldElt
YWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAg
dm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJD
b21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUZXh0dXJlMkQpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzTWlwbWFwQ29t
cGxldGUoKSBjb25zdDsKLQotICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsK
LSAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIEltYWdlIG1JbWFn
ZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBUZXh0dXJl
U3RvcmFnZTJEICptVGV4U3RvcmFnZTsKLSAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0g
ICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29s
b3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVy
YnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0g
ICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVm
ZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJl
ZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlm
Ci0gICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxl
dGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVy
UHJveHk7Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7Ci19OwotCi1jbGFzcyBUZXh0dXJl
U3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAg
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQg
c2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKCk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7Ci0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpn
ZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7Ci0KLSAgICBJ
RGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBt
Rmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1
YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChH
THVpbnQgaWQpOwotCi0gICAgflRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5
UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0
KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXRE
M0RGb3JtYXQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VO
ZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwot
Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdl
Q29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUlt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJj
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZv
aWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHNpemUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUlu
ZGV4KEdMZW51bSBmYWNlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlQ3ViZU1hcCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVy
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNDdWJlQ29t
cGxldGUoKSBjb25zdDsKLSAgICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvbW1pdFJlY3Qo
aW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2Uo
aW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2
XVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3Jh
Z2VDdWJlTWFwICptVGV4U3RvcmFnZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVm
ZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0g
ICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBt
YWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0
aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwot
ICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUg
cG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6
ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAg
ICBSZW5kZXJidWZmZXIgKm1GYWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNl
UHJveHlSZWZzWzZdOwotfTsKLX0KLQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gVGV4
dHVyZS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNv
bmNyZXRlIGRlcml2ZWQNCisvLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAu
IEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZA0KKy8vIHJlbGF0ZWQgZnVuY3Rpb25h
bGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2lmbmRl
ZiBMSUJHTEVTVjJfVEVYVFVSRV9IXw0KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8NCisN
CisjaW5jbHVkZSA8dmVjdG9yPg0KKw0KKyNkZWZpbmUgR0xfQVBJQ0FMTA0KKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4NCisjaW5jbHVkZSA8ZDNkOS5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCINCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiDQorI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
Ig0KKw0KK25hbWVzcGFjZSBlZ2wNCit7DQorY2xhc3MgU3VyZmFjZTsNCit9DQorDQorbmFtZXNw
YWNlIGdsDQorew0KK2NsYXNzIEJsaXQ7DQorY2xhc3MgRnJhbWVidWZmZXI7DQorDQorZW51bQ0K
K3sNCisgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2Fu
IHN1cHBvcnQNCisgICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBk
ZXZpY2UgY2Fwcw0KKyAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4
dA0KKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorICAgIElN
UExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwNCisNCisgICAg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFY
X1RFWFRVUkVfU0laRQ0KK307DQorDQorY2xhc3MgSW1hZ2UNCit7DQorICBwdWJsaWM6DQorICAg
IEltYWdlKCk7DQorICAgIH5JbWFnZSgpOw0KKw0KKyAgICBib29sIHJlZGVmaW5lKEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBm
b3JjZVJlbGVhc2UpOw0KKyAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30NCisg
ICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQ0KKw0KKyAgICBib29sIGlzUmVu
ZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ow0KKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29u
c3Q7DQorDQorICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9DQor
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtSGVpZ2h0O30NCisgICAgR0xl
bnVtIGdldEZvcm1hdCgpIGNvbnN0IHtyZXR1cm4gbUZvcm1hdDt9DQorICAgIEdMZW51bSBnZXRU
eXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9DQorICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHty
ZXR1cm4gbVN1cmZhY2UgJiYgbURpcnR5O30NCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1
cmZhY2UoKTsNCisNCisgICAgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSk7DQorICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOw0KKw0KKyAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwNCisgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsN
CisNCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQg
bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFs
cGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQWxwaGFI
YWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1
bWluYW5jZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lk
IGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAg
dm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
Ow0KKyAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAg
dm9pZCBsb2FkUkdCNTY1RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdC
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURh
dGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQVVCeXRl
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7DQorICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9p
ZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmlucHV0KTsNCisNCisgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZSk7DQorDQorICAgIHZvaWQgY3JlYXRlU3Vy
ZmFjZSgpOw0KKw0KKyAgICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3Qs
IGNvbnN0IFJFQ1QgKnJlY3QpOw0KKyAgICB2b2lkIHVubG9jaygpOw0KKw0KKyAgICBHTHNpemVp
IG1XaWR0aDsNCisgICAgR0xzaXplaSBtSGVpZ2h0Ow0KKyAgICBHTGVudW0gbUZvcm1hdDsNCisg
ICAgR0xlbnVtIG1UeXBlOw0KKw0KKyAgICBib29sIG1EaXJ0eTsNCisNCisgICAgRDNEUE9PTCBt
RDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01B
TkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuDQorICAgIEQzREZPUk1BVCBtRDNE
Rm9ybWF0Ow0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7DQorfTsNCisNCitj
bGFzcyBUZXh0dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVy
ZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgp
Ow0KKw0KKyAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7DQorICAgIGJvb2wgaXNNYW5h
Z2VkKCkgY29uc3Q7DQorICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0Ow0KKyAgICBEV09SRCBn
ZXRVc2FnZSgpIGNvbnN0Ow0KKyAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNv
bnN0Ow0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCkgY29uc3QgPSAwOw0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsNCisNCisgICAgY29uc3QgRFdPUkQgbUQzRFVz
YWdlOw0KKyAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOw0KKw0KKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbVRleHR1cmVTZXJpYWw7DQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0
dXJlU2VyaWFsKCk7DQorDQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJl
U2VyaWFsOw0KK307DQorDQorY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdA0K
K3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOw0KKw0KKyAg
ICB2aXJ0dWFsIH5UZXh0dXJlKCk7DQorDQorICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkgPSAwOw0KKw0KKyAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9IDA7DQorDQorICAgIGJvb2wgc2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpOw0KKyAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsNCisg
ICAgYm9vbCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7DQorICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVt
IHdyYXApOw0KKyAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7DQorDQorICAgIEdMZW51
bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0
Ow0KKyAgICBHTGVudW0gZ2V0V3JhcFMoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldFdyYXBUKCkg
Y29uc3Q7DQorICAgIEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7DQorDQorICAgIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVu
ZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwcygpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpID0gMDsNCisNCisgICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsNCisg
ICAgYm9vbCBoYXNEaXJ0eUltYWdlcygpIGNvbnN0Ow0KKyAgICB2b2lkIHJlc2V0RGlydHkoKTsN
CisgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsNCisgICAgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgYm9vbCBpc0lt
bXV0YWJsZSgpIGNvbnN0Ow0KKw0KKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVf
VEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUg
dGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNh
dXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4NCisN
CisgIHByb3RlY3RlZDoNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAgYm9vbCBzdWJJbWFnZShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOw0KKyAgICB2b2lkIHNldENvbXByZXNzZWRJ
bWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
Ow0KKyAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisNCisgICAg
R0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0
Ow0KKyAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ow0KKw0KKyAg
ICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9
IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOw0KKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1Jl
bmRlclRhcmdldCgpID0gMDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsNCisNCisgICAgaW50IGxldmVsQ291bnQoKSBj
b25zdDsNCisNCisgICAgc3RhdGljIEJsaXQgKmdldEJsaXR0ZXIoKTsNCisgICAgc3RhdGljIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsNCisNCisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7DQorICAgIEdMZW51bSBtTWFnRmlsdGVyOw0KKyAgICBHTGVudW0gbVdyYXBTOw0KKyAg
ICBHTGVudW0gbVdyYXBUOw0KKyAgICBib29sIG1EaXJ0eVBhcmFtZXRlcnM7DQorICAgIEdMZW51
bSBtVXNhZ2U7DQorDQorICAgIGJvb2wgbURpcnR5SW1hZ2VzOw0KKw0KKyAgICBib29sIG1JbW11
dGFibGU7DQorDQorICBwcml2YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZSk7DQorDQorICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpID0gMDsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVT
dG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsNCisgICAgVGV4dHVy
ZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgp
Ow0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCk7
DQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisN
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0
YXJnZXQpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlMkQpOw0KKw0KKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1
cmU7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQor
DQorY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUNCit7DQorICBwdWJsaWM6DQorICAg
IGV4cGxpY2l0IFRleHR1cmUyRChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZTJEKCk7DQor
DQorICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAg
IHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2
aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsNCisNCisgICAgR0xzaXplaSBnZXRXaWR0
aChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVs
KSBjb25zdDsNCisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25z
dDsNCisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAg
IGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgYm9vbCBpc0RlcHRo
KEdMaW50IGxldmVsKSBjb25zdDsNCisNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7DQorICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0K
KyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNv
cHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2
aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7DQorDQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgp
IGNvbnN0Ow0KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7DQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZl
ciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOw0KKyAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7DQorICAgIHZpcnR1
YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsNCisN
CisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOw0K
Kw0KKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBj
b25zdDsNCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOw0KKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KTsNCisNCisgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7DQorDQor
ICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsNCisgICAgdm9pZCBjb21taXRS
ZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlMkQgKm1U
ZXhTdG9yYWdlOw0KKyAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOw0KKw0KKyAgICAvLyBBIHNw
ZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBw
cm94eSByZWZlcmVuY2VzLA0KKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyDQorICAgIC8vIGJh
Y2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBp
ZiB3ZSB1c2VkIGEgYmluZGluZw0KKyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNl
IGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYNCisgICAg
Ly8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBv
ZiB0aGUgUmVuZGVyYnVmZmVyLg0KKyAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5
Ow0KKyAgICB1bnNpZ25lZCBpbnQgbVByb3h5UmVmczsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisg
ICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERX
T1JEIHVzYWdlLCBpbnQgc2l6ZSk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcCgpOw0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Z2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0ZToN
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7DQor
DQorICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVuc2ln
bmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7DQorfTsNCisNCitjbGFzcyBUZXh0dXJl
Q3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBU
ZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsNCisN
CisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisgICAg
dm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorDQorICAgIHZp
cnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0Ow0KKyAgICANCisgICAgR0xzaXplaSBnZXRX
aWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0
SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAg
RDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7
DQorICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dDsNCisNCisgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWChH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
DQorICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAg
ICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisNCisgICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscyk7DQorDQorICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFn
ZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
Ow0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZv
aWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHNpemUpOw0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsN
CisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFs
IFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgICBz
dGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0gZmFjZSk7DQorDQorICBwcm90ZWN0
ZWQ6DQorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsNCisgICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVD
dWJlTWFwKTsNCisNCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7DQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCk7DQorDQorICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25z
dDsNCisgICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lk
IHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7DQorICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFj
ZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSB0eXBlKTsNCisNCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsNCisNCisgICAgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwICptVGV4U3RvcmFnZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZl
cmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywNCisg
ICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBt
YWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwg
dGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcN
CisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRo
ZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0
byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4N
CisgICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07DQorICAgIHVuc2lnbmVkIGludCAq
bUZhY2VQcm94eVJlZnNbNl07DQorfTsNCit9DQorDQogI2VuZGlmICAgLy8gTElCR0xFU1YyX1RF
WFRVUkVfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3Bw
CmluZGV4IDk1YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2
ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4
Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNs
YXQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQt
PmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQt
PmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUlu
ZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUlu
ZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUg
PSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAg
ICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8v
IERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5k
IGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0
dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6
Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVt
cGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0
cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhp
cyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMg
bm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25S
dWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWlu
dCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwg
ZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9G
TE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZp
eGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBp
cyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2lt
cGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQg
b3Igbm90LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9s
aWJHTEVTdjIuY3BwCmluZGV4IGVlOGVjYTkuLmZiYTI1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0
LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
RnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBW
ZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0
YWJsZSAzLjQuCitib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpCit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFz
IHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAg
Y2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdC
OgorICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
KyAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwor
ICAgIH0KKworICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAg
Ly8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09Q
RVJBVElPTgorICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBH
TF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdM
X0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2Fz
ZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgor
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBh
cmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAg
fQogCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0K
IAotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21w
cmVzc2VkKQogICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0
ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYg
d2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUg
NCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAg
LTg5LDYgKzE4NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
fQorCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwg
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAh
PSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKwor
ICAgIGlmIChjb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAm
JiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAg
KGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwg
MCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0
ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQg
YW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9y
bWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlv
ZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFs
aWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMK
ICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAo
dmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUs
IGRhdGEpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAog
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3Vy
Y2UtPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSA9IE5VTEw7CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAK
ICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJv
ciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVy
bmFsRm9ybWF0KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4
Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9m
ZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXND
dWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVs
LCBHTF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXMKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1h
dCA9IHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBH
TGVudW0gdGV4dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMg
Mi4wLjI0XSB0YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAg
LTE0MTQsNiArMTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxf
T0VTOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQog
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+
KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgw
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBA
IHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhU
VVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFy
Z2V0LCBsZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5l
cmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5l
cmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2Vu
ZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19z
dGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9j
YXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmli
dXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFt
aXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFU
VVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSAhPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1P
YmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKQogICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVY
VChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2Jq
ZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2
KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVp
bnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3Qt
PmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlm
b3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlv
biwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyAr
NDAzNSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dy
YW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFy
YW1zKQogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8
fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxM
LCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEz
IEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNv
bnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnkt
PmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0wKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIH0KIAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFz
IHNlY29uZGFyeSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
KyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNl
IEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0
PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+
IHNldHMgSU5WQUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4g
Y29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUy
NDIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUw
MzYsNyArNTI1NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdC
QToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9y
IGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2
LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3Jk
ZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxf
T0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxv
YWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8v
IGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBp
eGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwy
NSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNp
emVpIGxldmVscywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVf
ZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAg
ICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxs
IGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0
LCB0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBl
KGZvcm1hdCwgdHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9
CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKQEAgLTU1MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRl
eHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19k
ZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRo
X3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0g
MCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhv
ZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxp
Z25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3
aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkK
KyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdp
ZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4
dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
dWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYw
NzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
M2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4
MDYsNyArNjEyMiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTU4NTIsNyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwg
dikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcg
KzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2
YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9v
bGVhbiB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5p
Zm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9n
cmFtKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAg
IGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0CiAgICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1C
aW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZv
cm1hdCwgdm9pZCAqYmluYXJ5KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVY
LCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAs
IGJpbmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgs
IGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9C
SU5BUllfQU5HTEU7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9n
cmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVu
Z3RoKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQg
PSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAgICAgIHByb2dy
YW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmluYXJ5Rm9y
bWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dy
YW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFt
QmluYXJ5KE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxs
IGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCiB7CiAgICAgc3RydWN0IEV4
dGVuc2lvbgpAQCAtNjQ5OSw3ICs2OTI0LDggQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICoKICAg
ICAgICAgeyJnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKICAgICAg
ICAgeyJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgfTsK
KyAgICAgICAgeyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7Imds
UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsUHJvZ3JhbUJpbmFyeU9FU30sICAgIH07CiAKICAgICBmb3IgKGludCBleHQgPSAwOyBl
eHQgPCBzaXplb2YoZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi52Y3Byb2oKaW5kZXggN2QyYjY0OS4uM2JjODM2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpAQCAt
NDAxLDYgKzQwMSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00
OTEsNiArNDk1LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmluZGV4IDdjYTJk
OWYuLjdiYjIyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbWF0aHV0aWwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL21hdGh1dGlsLmgKQEAgLTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5v
cm0oZmxvYXQgeCkKICAgICB9CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChH
TGludCB4LCBHTGludCB5LCBHTGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQot
ewotICAgIFJFQ1QgcmVjdCA9IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0g
eSAtIGgsCi0gICAgICAgICAgICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNl
SGVpZ2h0IC0geX07Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3Jt
UGl4ZWxZT2Zmc2V0KEdMaW50IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQp
Ci17Ci0gICAgcmV0dXJuIHN1cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5l
IEdMZW51bSBhZGp1c3RXaW5kaW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5k
aW5nID09IEdMX0NXIHx8IHdpbmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9
PSBHTF9DVyA/IEdMX0NDVyA6IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIo
KQogewogICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIx
Li5hN2M2MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdM
ZW51bSBmb3JtYXQpCiAgICAgfQogfQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3Jt
YXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAg
Zm9ybWF0ID09IEdMX0RFUFRIX1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXpl
LCBpbiBieXRlcywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4
ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBA
QCBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMToKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KTsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsK
ICAgICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7
CkBAIC0zMzMsNTMgKzM0OCw2IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVt
IHRhcmdldCkKICAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpOwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBh
cmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4
dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBj
YXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAg
ICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV82XzU6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRy
YWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFs
Zm9ybWF0KQpAQCAtNDA3LDYgKzM3NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBp
bnRlcm5hbGZvcm1hdCkKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2Ug
R0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOwor
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAg
ICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9O
T05FOyAgIC8vIFVuc3VwcG9ydGVkCiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51
bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hB
TEZfRkxPQVRfT0VTOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURf
SU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAg
IH0KIH0KQEAgLTYzOCw5ICs2MTIsNiBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFj
ZShHTGVudW0gY3ViZUZhY2UpCiB7CiAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VC
RU1BUF9GQUNFX1BPU0lUSVZFX1g7CiAKLSAgICAvLyBNYXAgYSBjdWJlIG1hcCB0ZXh0dXJlIHRh
cmdldCB0byB0aGUgY29ycmVzcG9uZGluZyAgRDNEIHN1cmZhY2UgaW5kZXguIE5vdGUgdGhhdCB0
aGUKLSAgICAvLyBZIGZhY2VzIGFyZSBzd2FwcGVkIGJlY2F1c2UgdGhlIFkgY29vcmRpbmF0ZSB0
byB0aGUgdGV4dHVyZSBsb29rdXAgaW50cmluc2ljIGZ1bmN0aW9ucwotICAgIC8vIGFyZSBuZWdh
dGVkIGluIHRoZSBwaXhlbCBzaGFkZXIuCiAgICAgc3dpdGNoIChjdWJlRmFjZSkKICAgICB7CiAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKQEAgLTY1MCwxMCArNjIx
LDEwIEBAIEQzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkK
ICAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwogICAgICAgICBicmVh
azsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBm
YWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJF
TUFQX0ZBQ0VfUE9TSVRJVkVfWTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9Q
T1NJVElWRV9ZOworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CiAgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKQEAgLTc2Nyw2ICs3
MzgsNyBAQCBEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0
KQogewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAg
ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAg
ICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAtNzk0LDYgKzc2NiwxMCBAQCBuYW1lc3BhY2Ug
ZHgyZXMKIAogdW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9y
bWF0KQogeworICAgIGlmIChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgfQogICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQogICAgIHsK
ICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKQEAgLTkwNCw2ICs4ODAsMTAgQEAgdW5zaWduZWQg
aW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKIAogdW5zaWduZWQgaW50IEdl
dERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCiB7CisgICAgaWYgKGRlcHRoRm9ybWF0
ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDI0OworICAgIH0KICAgICBz
d2l0Y2ggKGRlcHRoRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJM
RTogIHJldHVybiAxNjsKQEAgLTk2NSw2ICs5NDUsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQo
RDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElz
RGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJldHVy
biAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2lsVGV4
dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZh
Y2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVs
dGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xlbnVt
IENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiAKIEdMZW51bSBDb252
ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzsKKyAgICB9CiAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBE
M0RGTVRfRDE2OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
dXRpbGl0aWVzLmgKaW5kZXggODgyMzhkYy4uY2YyMjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw2ICsxNiw5IEBACiAK
ICNpbmNsdWRlIDxzdHJpbmc+CiAKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBE
M0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsK
KwogbmFtZXNwYWNlIGdsCiB7CiAKQEAgLTM2LDkgKzM5LDkgQEAgR0xzaXplaSBDb21wdXRlUGl0
Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdu
bWVudCkKIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVu
dW0gZm9ybWF0KTsKIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51
bSBmb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgSXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOwogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGlu
dGVybmFsZm9ybWF0KTsKIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQp
OwogCkBAIC03OSw2ICs4Miw4IEBAIEdMdWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRo
Rm9ybWF0KTsKIEdMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7
CiBib29sIElzRmxvYXQzMkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiBib29sIElz
RmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0
dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVy
ZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zy
b21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA2ZDNkYTdmLi4zOGUzMmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MjMxMyw3ICsyMzEzLDIwIEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9z
dGljcy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Rp
YWdub3N0aWNzLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAK
QEAgLTIzMjEsNiArMjMzNCw3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcApAQCAtMjMzMywyMiArMjM0Nyw1MiBAQCBJRiAo
RU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9QcmVwcm9jZXNzb3IuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2
ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92
ZVRyZWUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9TZWFyY2hTeW1ib2wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdXRpbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg4NDg4
OS4uNzM4YTk3MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA2LTI3ICBNYXgg
VnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4g
V2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJl
aGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAyMDEyLTA2LTI3ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIEVsZW1lbnQ6OmVs
ZW1lbnRSYXJlRGF0YSgpIGFuZCBFbGVtZW50OjplbnN1cmVFbGVtZW50UmFyZURhdGEoKSBwcml2
YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNWVjMmVjLi4wODY2MTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4OTgsOCArNTg5OCwyMSBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9D
b25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCkBAIC01OTEyLDYgKzU5MjUs
NyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKQEAgLTU5MzUsNiAr
NTk0OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUG9vbEFsbG9jLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9QcmFnbWEuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCkBAIC01OTQ0LDYgKzU5NTksMjkgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhw
YW5kZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9u
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJl
cHJvY2Vzcy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NjYW5uZXIuYyBcCkBAIC01OTU3LDYgKzU5OTUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2
ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5j
cHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNw
cCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAg
XApAQCAtNTk2NSw2ICs2MDA0LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JFU1NMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JFU1NMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9yR0xTTC5jcHAgXApAQCAtNTk3Miw4ICs2MDE1LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckhMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVz
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91
dGlsLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDdiOTZiNzYuLmM5MDcyMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMzk1Niw3ICszOTU2LDEzIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9nbHNsYW5nLmggXApAQCAtMzk3MSwxMSArMzk3NywyNCBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL01NYXAuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvb3NpbmNsdWRlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1ByYWdtYS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY29tcGlsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW4uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIFwKQEAgLTM5
OTAsMTQgKzQwMDksMTcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JFU1NMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JHTFNMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JITFNMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1R5
cGVzLmggXAotICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5oIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25z
LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
IFwKQEAgLTQwMTAsMTMgKzQwMzIsMjEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdM
PTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
Y3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250
aW51aXR5LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0
UmVjdXJzaW9uLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlh
Z25vc3RpY3MuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
Rm9yTG9vcFVucm9sbC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfbGV4LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9J
bmZvU2luay5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFs
aXplRGxsLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL2ludGVybU91dC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0ludGVybVRyYXZlcnNlLmNwcCBcCkBAIC00MDM0LDEwICs0MDY0LDEyIEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvU2hhZGVyTGFuZy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JHTFNMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuY3BwIFwKLSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZv
bGRTZWxlY3QuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZv
bGRTaG9ydENpcmN1aXQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci91dGlsLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRh
dGVMaW1pdGF0aW9ucy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5jcHAgXApAQCAtNDA0OCw2ICs0MDgwLDE3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="commit-queue"
          id="158122"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149996</attachid>
            <date>2012-06-28 13:34:31 -0700</date>
            <delta_ts>2012-06-28 13:54:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1716944</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLjhiNzM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDODE1OUMy
MUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNF
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
QTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdD
RDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Yy
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9OworCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAq
LzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1
MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJ
CUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
Ki87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlD
MjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIx
Q0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2
ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlB
MjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2
ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1
QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xT
TC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhF
NjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsK
QEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQy
QUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9
OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYgKzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZF
OTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2
MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25v
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3Rp
Y3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGlj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NEMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNz
aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QyMTU5QzIx
Q0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0QzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENDE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENTE1OUMy
MUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDYxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDcxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U0
MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNzE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5k
ZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJGMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzUxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMw
MDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJB
TkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlGQjM5RDE4NjEy
MDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDE4
NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIsMTUgKzI0OSwxMSBAQAogCQlGQjM5RDFD
MDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQx
QzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyog
U3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0IxMjAwRjI2MjAwMDg4
RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gdGV4dC54bWw7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9qOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQzMTIw
MEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAogCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5m
b2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNo
YWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMzNiw2MiBAQAogCQkJcGF0aCA9IENvbmZp
Z3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI2NTY3QzUx
NTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi8s
CisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1
NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2
NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1
NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1
NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
Q0UxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2
N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3
RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNF
MDAzOTg1MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
LAorCQkJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2
NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4
NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5
IC8qIFByZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBT
b3VyY2VMb2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bi5jcHAgKi8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJ
CQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2
NTY3RTgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBuZXc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMy
M0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0g
ZGVwZ3JhcGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1
OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2
ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAor
CQkJKTsKKwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlGQjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4
OEU2OSAvKiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlE
MTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2
MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIw
MEYyNjIwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2
MjAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkg
LyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVj
dERpc2NvbnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovLAogCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTMyNywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNo
SGFuZGxlLmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCAqLywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAq
LywKLQkJCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNw
cm9qICovLAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wu
dmNwcm9qICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLywKIAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAq
LywKIAkJCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5
RDFEMjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFE
MzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3Qjgx
NTlDMjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWlu
Y2x1ZGVJbkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYg
QEAKIAkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVC
RDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJE
MSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91
dHB1dEVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRF
U1NMLmggKi8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9v
cFVucm9sbC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuaCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJ
CQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
ICovLAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAw
ODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmggKi8sCisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJ
CTQ5OTUxQzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJ
CTQ5OTUxQzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlB
MjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2
N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1
OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJF
MTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNB
RkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZF
ODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0Iw
MDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xz
bGFuZ190YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
X3RhYi5oICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8s
CiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlG
QjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBA
QAogCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywK
IAkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJ
CUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJ
CUEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LywKIAkJCQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oICovLAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovLAogCQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywK
IAkJCQlGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlG
QjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZC
MzlEMjM2MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJ
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
CiAJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIz
ODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURD
QjAwMkQ0MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEw
MDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAw
MDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJF
QkQxIC8qIE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAv
KiBPdXRwdXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuY3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNM
LmggKi8sCisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCAqLywKKwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAq
LywKIAkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJ
CQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlG
QjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0
MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4
NTM5IC8qIFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVw
cm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCiAJCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5
MEQ5QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5
QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYz
NUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8q
IFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWlu
ZyAqLywKKwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3Bw
ICovLAorCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICov
LAogCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8s
CiAJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJ
CQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAw
RjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYw
MDJENDI1NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyog
dXRpbC5oICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAw
ODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZC
MzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1
QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyog
Y29tcGlsZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMw
MDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0
QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAv
KiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAv
KiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vz
c29yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291
cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC01ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAw
MDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAw
RjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1Mzkg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMy
MUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmI2OTQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUzIEBACisyMDEyLTA2LTI3
ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAg
ICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5n
bGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdElu
RnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBp
bGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6Cisg
ICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAo
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAg
IChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNo
KToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6
OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRp
ZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFk
aWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGlu
dWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6
OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgor
ICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNz
Ojp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGlj
cyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3Ip
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVy
OjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChU
RGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToK
KyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlv
clN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAg
ICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0
KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRl
eHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAg
ICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91
dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Omhl
YWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZp
c2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6
CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0
SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNp
emUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0
ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVu
c2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0
QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAg
KFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAg
ICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6
VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJl
bmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZh
cmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAg
ICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0
Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFy
eSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6Cisg
ICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6
OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6
CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3Bw
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9y
Q3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlv
bik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2Fs
T3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3Jh
cGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToK
KyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6
VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFy
ZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3Jh
cGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1
bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgor
ICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3lt
Ym9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24p
OgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAo
VEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVj
dGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAg
ICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBo
TG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRH
cmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAg
ICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVn
aW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVy
U3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6
OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJr
VmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3Rh
Y2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6Omdl
dFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNl
dFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRN
YWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1h
aW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAg
ICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWlu
ZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dp
Y2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5p
bmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3Jh
cGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChU
R3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVy
c2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9n
aWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAg
ICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToK
KyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGds
c2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5n
X3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAg
KFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFn
Z3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJ
bnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHBy
YWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNy
byk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRl
eHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25kaXRpb25hbERpcmVj
dGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxFT0QpOgorICAgICAg
ICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJlZGVmaW5lZCk6Cisg
ICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZp
bmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjps
ZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAgICAgICAocHA6OkRp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Up
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVBy
YWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgorICAgICAgICAocHA6
OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0
aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25J
Zik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlUGFyc2VyKToKKyAg
ICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuY3BwLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAg
ICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBh
cnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6
cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFy
c2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcDoKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6Oklu
cHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oOgorICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0
Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5w
dXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6Okxv
Y2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwOgorICAgICAgICAocHA6Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6TWFjcm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChwcCk6CisgICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpU
b2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6On5NYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgor
ICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05l
eHRUb2tlbkxlZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3Jv
KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6
OmNvbGxlY3RNYWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VN
YWNyb1BhcmFtcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5k
ZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
OjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRl
cjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFj
cm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4
dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJv
Y2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQp
OgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nl
c3Nvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRp
b246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHA6CisgICAgICAgIChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAg
ICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAg
IChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oOgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tl
bik6CisgICAgICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRv
a2VuOjpoYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNh
YmxlZCk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAg
ICAgICAoeXlfdHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9n
ZXRfcHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAg
IChpbnB1dCk6CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1
ZmZlcik6CisgICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVh
dGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5p
dF9idWZmZXIpOgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9i
dWZmZXJfc3RhdGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAg
IChwcF9zY2FuX3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5
X2ZhdGFsX2Vycm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xp
bmVubyk6CisgICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAg
ICAgICAocHBnZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRf
dGV4dCk6CisgICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgor
ICAgICAgICAocHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBw
c2V0X291dCk6CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6
CisgICAgICAgIChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAo
cHBnZXRfbGxvYyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQp
OgorICAgICAgICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMp
OgorICAgICAgICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgor
ICAgICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChw
cHJlYWxsb2MpOgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5p
emVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6c2V0RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVt
YmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5p
emVyOjppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5l
cik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENv
bnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5l
cmF0ZV9wYXJzZXIuc2g6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHBfdXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJ
bnB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6
CisgICAgICAgIChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAg
ICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbFVzYWdlKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OmJlZ2luRXJyb3IpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNT
YW1wbGluZ09wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0
QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRM
b29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmg6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgor
ICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVz
dHJpY3Rpb25zKToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJv
cnMpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0VGV4dHVyZVBvb2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlz
cGxheS5oOgorICAgICAgICAoRGlzcGxheSk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcDoKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2wpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OmluaXRpYWxpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpz
d2FwUmVjdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3Vi
Y2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4pOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpzd2FwKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcik6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpZHRoKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
SGVpZ2h0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldFN3YXBJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
c2V0Qm91bmRUZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wv
bGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0Q2xlYXJEZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNDdWxsRmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxNb2Rl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEZXB0aFRlc3RF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJs
ZW5kKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRC
bGVuZENvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNl
dEZpbGwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Ft
cGxlQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclRlc3QpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGl0aGVyRW5hYmxl
ZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFZpZXdwb3J0UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1z
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QWN0aXZlU2Ft
cGxlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFj
dGl2ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrQWxpZ25t
ZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja1JldmVy
c2VSb3dPcmRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVTaGFk
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZlbmNlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVR
dWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjplbmRRdWVy
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmVuY2UpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRGbG9hdHYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlTaGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzeW5jKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3TGluZUxvb3ApOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnJlY29yZEludmFsaWRFbnVtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZh
bGlkVmFsdWUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24p
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldEVycm9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZXNldFN0
YXR1cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNFdmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzT2Nj
bHVzaW9uUXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVy
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2
ZWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmN1bGxTa2lwc0RyYXcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmlzVHJpYW5nbGVNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdFJlbmRl
cmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAg
ICAgIChnbDo6VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6On5GcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldE51bGxDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOgorICAgICAg
ICAoRnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChnbCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJp
bmRpbmdzKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRp
bmdzKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpJbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjp+SW5mb0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TGVuZ3RoKToKKyAgICAg
ICAgKGdsOjpJbmZvTG9nOjpnZXRMb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZFNh
bml0aXplZCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kKToKKyAgICAgICAgKGdsOjpJ
bmZvTG9nOjpyZXNldCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6flByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmF0dGFjaFNo
YWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCk6CisgICAgICAgIChnbDo6QXR0cmli
dXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rKToK
KyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRQ
cm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dmFsaWRhdGUpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1Byb2dyYW0uaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKEF0dHJpYnV0ZUJpbmRpbmdz
KToKKyAgICAgICAgKEluZm9Mb2cpOgorICAgICAgICAoUHJvZ3JhbSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAgICAgICAgKGdsOjpzdHIpOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToK
KyAgICAgICAgKGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dFBpeGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFk
ZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm0xZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1h
dHJpeCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmRpcnR5QWxsVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0
cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm0zaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXREeEZyb250Q0NXTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmguCisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAg
KGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdp
c3RlckluZm8pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAg
ICAgICAgKFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAg
ICAgKFNhbXBsZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJl
bGVhc2VQcm94eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVu
Y2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChn
bDo6U2hhZGVyOjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIp
OgorICAgICAgICAoVmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0
VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAg
IChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAg
ICAgICAoZ2w6OkltYWdlOjp+SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6aXNSZW5kZXJhYmxlRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OnNldE1hbmFnZWRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZEFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1p
bmFuY2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRl
RGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkUkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdl
Ojp+VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1
cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJp
YWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6On5UZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRNaW5GaWx0ZXIpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnNldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBUKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWluRmlsdGVy
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwVCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFn
ZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycyk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6aGFzRGlydHlJbWFnZXMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnJlc2V0RGlydHkpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aXNJ
bW11dGFibGUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRC
bGl0dGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJE
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVy
ZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWln
aHQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OnJlZGVmaW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJ
bWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omlz
RGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojp1cGRhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRl
clRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0
aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9z
Wik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmZhY2VJbmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVm
aW5lSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2Vu
ZXJhdGVNaXBtYXBzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoSW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6
OkltYWdlOjptYXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEZvcm1h
dCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldFR5cGUpOgorICAgICAgICAoZ2w6OkltYWdlOjpp
c0RpcnR5KToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUpOgor
ICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAgICAg
ICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGds
OjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUp
OgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAg
IChnbDo6RXh0cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0cmFjdFR5cGUpOgorICAgICAg
ICAoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAg
ICAoZHgyZXM6OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQpOgorICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgyZXM6OklzU3RlbmNpbFRleHR1
cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQpOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisgICAgICAgIChnbCk6CisgICAg
ICAgIChkeDJlcyk6CisKIDIwMTItMDYtMjIgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJm
aWVsZEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTYW5pdGl6ZSBHTFNMIGNvZGUg
dXNpbmcgQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9n
bDJleHQuaAppbmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgsMTEgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8qIEdMX0FO
R0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Cisj
ZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRl
bnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIsMTEgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2Vu
ZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3By
b2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggYTNmYzkzNS4uOWE0
YTM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJz
aW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVu
dGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1Cisj
ZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2lu
ZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3
ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9T
UEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMg
PSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhl
IFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAg
Ly8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBE
aXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENT
UyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFn
Q29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQt
aW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0
KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVy
IHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVj
dGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlz
IG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8v
IEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBh
c3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25t
ZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9k
ZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVj
OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewog
ICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8v
IFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBk
cml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAg
U0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBh
biBleHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0
aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8g
dGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2Ug
dGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNw
ZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVT
VFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBl
bmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmlj
dGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVm
ZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVy
IHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRh
aW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5
cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAw
CiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQwOWI2MjIuLjU2NWRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyog
ZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJE
MjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgy
NSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdC
MzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRv
ckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjEx
MUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZF
IC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhD
IC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9
OworCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9Owor
CQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEw
MDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9
OworCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMx
QTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4
cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIw
MTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tl
bi5jcHAgKi87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4Mzgx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMy
NEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgKi87IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUz
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERp
YWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICov
OyB9OworCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07
CisJCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAgKi87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsg
fTsKKwkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1
OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJl
bW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9s
cy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3
MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVC
RThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJj
ZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3
OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJs
ZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThE
Q0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVt
b3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAw
NzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYg
LyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRC
IC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CkBAIC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBR
dWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNs
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMx
M0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyog
RGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlh
Z25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMz
MUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9u
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyRjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBf
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVw
cm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9s
aW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RS
ZWN1cnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0
UmVjdXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
cmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYw
MEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlz
Y29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRl
Y3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5
QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2
ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlF
OTkwMiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRy
YW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1P
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEw
QkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMy
MUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xh
dG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2
MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hT
eW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KwkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2Eg
PSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5
M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZE
QSAvKiBjcHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0
LmMgKi8sCisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LywKIAkJCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMx
Mzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMx
QTAwMEU1N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBh
cnNlci5oICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmgg
Ki8sCiAJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0
MSwxNSArMzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRG
REI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENC
RURGMUM5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1
NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVC
NzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAx
N0M0NCAvKiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29t
cGlsZXIuY3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
KwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0
QjE1OUMzMjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAw
RTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJF
IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0Mx
IC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAv
KiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGds
c2xhbmcuaCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXgu
Y3BwICovLAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAg
Ki8sCisJCQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJ
CQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0Iy
OTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3
QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAog
CQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJ
CQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEy
MDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywK
IAkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAotCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCiAJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8s
Ci0JCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2
MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdF
NUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJE
NDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFC
NTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEz
QjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBB
IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3Nv
dXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1
dEVTU0wuY3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NM
LmggKi8sCiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
LApAQCAtMjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyog
T3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0
cHV0SExTTC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhM
U0wuaCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAg
Ki8sCiAJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywK
IAkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlC
NjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAy
ODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0
RjAwRTU3QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAv
KiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxp
ZmllckFsaXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlm
aWVyQWxpdmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJl
ZS5jcHAgKi8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAq
LywKKwkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywK
IAkJCQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJ
CQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2
NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAw
QTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVG
QUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAq
LywKIAkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
LAogCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAog
CQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBA
IC0yOTIsMjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFu
c2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5z
bGF0b3JITFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmgg
Ki8sCi0JCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8s
Ci0JCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJ
CUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAor
CQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywK
KwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIx
NUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFE
NTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZh
bGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAv
KiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzEx
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8q
IFZhcmlhYmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJz
aW9uR0xTTC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25H
TFNMLmggKi8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywK
LQkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50
ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
Ci0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJ
CUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5
OTAyIC8qIHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNv
bXBpbGVyOwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
CisJCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAor
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAor
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCisJCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0
NCw2ICs0OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xh
dG9yX2NvbW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFu
c2xhdG9yX2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJh
bnNsYXRvcl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVj
dFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2Nv
bW1vbi5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJy
YXJ5LnN0YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQ
aGFzZXMgPSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJ
YnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFt
ZSA9IHByZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9o
bHNsIiAqLzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZl
cnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJ
CWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVu
LAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXBy
b2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3
IEBACiAJCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
LAogCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJ
CQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlB
MjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsK
IC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0
QjRCREU3QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRT
ZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8q
IFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBF
NTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OworCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRv
a2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4
NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4
QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0
ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdC
QkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5
QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
KwkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJ
CSk7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVk
ZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JC
RSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19Q
UkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0Vc
IiIsCisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMg
PSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUg
PSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJ
CX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYg
KzkxMSwxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0Mw
MEU1N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
cHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBE
ZWJ1ZyAqLywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xh
dG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCmluZGV4IDI0Yzc2NmIuLjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBA
CiAgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmlu
ZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJ
TFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVy
c2lvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5k
ZXggMjAzYzQyMS4uYmRkMTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQog
I2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5l
IEJVSUxEX1JFVklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVm
aW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZ
KHgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5h
bWVzcGFjZSB7CiAvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiBy
ZWFsIHNoYWRlcnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGF0YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9l
bXUodmVjMiB5LCB2ZWMyIHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5
WzFdLCB4WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4
KSB7IHJldHVybiB2ZWMzKGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4o
eVsyXSwgeFsyXSkpOyB9IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQg
eCkgeyByZXR1cm4gdmVjNChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFu
KHlbMl0sIHhbMl0pLCBhdGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgY29zKGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNv
cyh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00
MSwxMSArMzYsNiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2Vt
dSh2ZWMyIHgsIHZlYzIgeSkgeyByZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsg
cmV0dXJuIHZlYzMobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5
WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0
dXJuIHZlYzQobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJd
KSwgbW9kKHhbM10sIHlbM10pKTsgfSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVf
ZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAg
Y29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CiB9OwogCiBj
b25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2Vi
Z2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsg
fSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2Vt
dV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVf
cHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkg
eyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmds
X2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIs
CiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIs
CisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgp
IC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3Rh
bmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2Uo
dmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0
LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+
PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0
aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAg
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVj
NCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAw
LjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9h
dCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAo
TikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2
ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywg
dmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQp
IgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJp
dmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwot
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25D
b3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwg
Ly8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIK
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1v
ZDRfNAogICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAt
MTM2LDEwICsxMDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tb
XSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBX
b3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAv
LyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhNYXNrW10gPSB7CiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRh
bjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExF
X18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVz
ZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIK
ICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0
CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRv
dDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBU
RnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Cisg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
Tm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFf
MQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UK
KyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEw
ICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0g
ewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODks
NyBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3QzXzMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAg
ZmFsc2UgIC8vIFRGdW5jdGlvblVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQg
aW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgRU9wQXRhbjoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFf
MTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEVPcERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9u
RG90MV8xOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAg
ICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25S
ZWZsZWN0MV8xOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
CmluZGV4IGIzN2I2NjUuLjBkOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBA
IC00NSwxMiArNDUsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAg
ICAvLwogICAgIGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4x
XzEgPSAwLCAgLy8gZmxvYXQgYXRhbihmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25B
dGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFu
M18zLCAgLy8gdmVjMyBhdGFuKHZlYzMsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80
LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZlYzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAv
LyBmbG9hdCBjb3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0
IGNvcyhmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVu
Y3Rpb25Db3M0LCAgLy8gdmVjNCBjb3ModmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRl
OgogICAgICAgICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAg
ICAgICBURnVuY3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAg
IFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZsb2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBU
RnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMyIG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0
aW9uTW9kM18zLCAgLy8gdmVjMyBtb2QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1v
ZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQsIHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTEsICAvLyBmbG9hdCBub3JtYWxpemUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3Jt
YWxpemUyLCAgLy8gdmVjMiBub3JtYWxpemUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1h
bGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6ZSh2ZWMzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGYyN2NiNzUuLmNhYjgwNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcApAQCAtOCwxMCArOCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMg
c3BlYykKK3sKKyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNI
X0NTU19TSEFERVJTX1NQRUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1i
b2xUYWJsZSgKQEAgLTEyMyw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcg
YXMgd2VsbC4KLSAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKQorICAgIGlmIChp
c1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGgg
b2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3Mu
CkBAIC0xNjEsNiArMTcyLDEyIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIq
IGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAm
IFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNo
YWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NT
aGFkZXIocm9vdCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VS
X0lOREVYKSkKICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRl
Z2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBAIGJvb2wg
VENvbXBpbGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCiAgICAgfQogfQog
Cit2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sK
KyAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICBy
b290LT50cmF2ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxp
bWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2
YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgm
dmFsaWRhdGUpOwogICAgIHJldHVybiB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCiti
b29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCwgYm9vbCBvdXRwdXRHcmFwaCkKK3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9T
UEVDKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVz
dCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7
CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0
cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFn
bWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRH
cmFwaCkgeworICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1Np
bmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFw
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgfQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2lu
ay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAg
IHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290
KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJl
dHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpj
b2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMjMyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmNwcApAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBD
b250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBv
ZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChp
bXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlv
bnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVj
dERpc2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisK
K25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2Uo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsK
K30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUt
PmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAg
bUxvb3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2Nv
bnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BE
aXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdy
YWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFk
aWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAg
ICAgY2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGll
bnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmICht
R3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisK
KyAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAg
bmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0
dXJlQ3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0
aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2Fs
bGVkLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQg
dG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVy
YXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRP
cGVyYXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9k
ZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9w
ZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9k
ZSk7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YmRhNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApAQCAtMCwwICsxLDUwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3
aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBm
dW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3Jh
ZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNU
RElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisK
K25hbWVzcGFjZSBzaAoreworLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEg
dmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51
aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJh
dmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJv
b2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51
aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rp
b25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlv
biA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBt
R3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24o
VEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJ
U0NPTlRJTlVJVFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVmOTNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VM
b2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdu
b3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBz
ZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
KyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJv
ciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4
KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUp
KTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIg
PDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQor
Cit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQzYTEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDM5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBD
T01QSUxFUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9z
dGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9z
dGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsK
KworICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAg
IHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHRva2VuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisK
KyAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYg
bUluZm9TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhh
bmRsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjZhYjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlyZWN0aXZlSGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlh
Z25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVx
dWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIgPT0g
a1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxl
KSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJu
IEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsK
KyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAg
IDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxl
cigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0wo
IlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1p
emUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wgcHJh
Z21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAgICAg
IC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFs
aWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BS
QUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnZh
bGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6
RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21h
IHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdv
ZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisgICAg
VEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlh
Z25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3Ii
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdu
b3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh
bm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3Ig
aXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJp
dHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
KyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAgICAg
Y2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0eSA9
IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbURp
YWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3ZvaWQg
VERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9u
KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAodmVy
c2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9
IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25v
c3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNp
b24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDNkZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJl
Y3RpdmVIYW5kbGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoK
KyAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAor
ICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgflREaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEo
KSBjb25zdCB7IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBw
OjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBt
UHJhZ21hOworICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAg
IFREaWFnbm9zdGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
SVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAppbmRleCBlOWJiYTRiLi42MDQwOTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RXh0ZW5zaW9uQmVoYXZpb3IuaApAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9FWFRFTlNJT05f
QkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURf
CiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVk
ZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAgICAgRUJoUmVx
dWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsyMSwxNyBAQCB0
eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJl
aGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAg
ICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICBy
ZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJldHVybiAid2Fy
biI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlzYWJsZSI7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2goYikKKyAgICB7
CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVC
aEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndh
cm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVm
YXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0cmluZywgVEJl
aGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9u
IG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2
aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lO
Q0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCmluZGV4IGYzYTE5ZGMuLjNlOTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1w
bGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRz
KFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykK
IHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0
cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2Vz
KQogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
IiA8PCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdC
dWZmZXJzID0gIiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0
dXJuIHMuc3RyKCk7CiB9CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRp
YWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAg
IGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHJlc291cmNlcykpOwor
ICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291
cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKICAgICAvLwogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3Jk
IiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdD
b29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShF
YnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJh
Z0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29v
cmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250
RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsK
KworICAgICAgICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBn
bF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAg
ICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZh
aWxhYmxlLgorICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19T
UEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAg
IDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcg
KzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsCiAKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJp
YWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjog
eworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9D
U1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBU
aGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0
YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQwY2Y1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRM
UyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NU
TFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgo
dGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sK
KyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJz
ZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0
aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExT
VmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBh
cnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250
ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYg
KGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVl
ZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQ
YXJzZUNvbnRleHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmluZGV4IDc2MGZkMDku
LmFhNTNiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApAQCAtMTMsNCArMTMsMTQgQEAg
Ym9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBUUGFyc2VDb250
ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVy
biBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5l
IEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0
cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4u
OTJjNDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5v
ZGUsCiAvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFu
IGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8g
aXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVn
YXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRl
cm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0
b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1O
b2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZVBhaXIgbm9kCiAgICAgLy8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYg
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAo
Y29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7
CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9k
ZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5v
ZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAg
IH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihj
b25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCog
Y29uZCwgVEludGVybVR5cGVkKiB0cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgog
ICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9u
KGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAg
IG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
IG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0NDQsOSArMTQ0
NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24o
VEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1DCiAgICAgcmV0dXJuIGFkZENvbnN0YW50VW5p
b24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5n
ZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJh
eSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRU
b1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQotewotICAgIGFzc2VydCgh
cHJhZ21hVGFibGUpOwotICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOwotICAg
ICpwcmFnbWFUYWJsZSA9IHBUYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4
IDBjN2UxYTkuLmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyAr
MTUsOSBAQCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuY3BwCmluZGV4IDY5YjhjMjYuLmQ3ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIg
QEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1NlYXJjaFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAs
MTMgKzIyLDEzIEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hh
ciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwog
fQogCiBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAg
ICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBt
VW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlz
KTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0g
ZmFsc2U7CkBAIC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNv
bnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1V
c2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxz
ZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBt
VXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQg
PSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAg
IG1TY29wZURlcHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBm
YWxzZTsKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRl
bGV0ZSBtVW5mb2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgp
CiB7CisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250
aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2
ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQg
aGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1Cb2R5LmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRl
ci5jX3N0cigpOworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
CiB9CiAKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1
LDI1ICsyMTksMTEgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwg
IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVy
ZSBmZXRjaCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBh
bm90aGVyLiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBh
Y2NvcmRpbmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9t
IGxlZnQiLCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAg
ICAgIC8vIGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rp
b25zIGV4cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAg
ICAgICAgLy8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVu
Y3Rpb25zIGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSBzaW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+
IDEtWSwgd2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAv
LyBUaGUgdGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVz
ZSB0aGUgcHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwot
ICAgICAgICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1os
IHdoaWNoIGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gRm9yIGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBb
LTEsIDFdIC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3Ig
dGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndy
b25nIHNpZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFu
Z2luZyB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJv
dWdob3V0IHRoZSBjb2RlLgotICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQog
ICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MjMyLDcgKzIzMiw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBi
aWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
cHJvaihzLCBmbG9hdDQodC54LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikp
O1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgog
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQu
dykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtc
biIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAg
ICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
ICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQueiwgMSAtICh0LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQudywgMSAtICh0LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0
LngsIC10LnksIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkUocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlh
cyhzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBh
dmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNl
ZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
LCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2Jp
YXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFBy
b2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgdC56LCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2Qw
X2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVD
dWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVs
b2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBu
b2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC05NzMsOSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5n
ZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEp
CiAgICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAi
LCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Zl
Y3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7
IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIp
OyBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgogICAgICAgICBtVXNlc1hvciA9IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIiki
KTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMi
IDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApA
QCAtMTEzMSw5ICsxMjAxLDM2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0
aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotICAg
ICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIs
ICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5
KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BG
d2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAt
MTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSAqbm9kZSkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0
aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZp
c2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDog
IigiKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWlu
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFp
bigiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigi
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZh
cmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
IAotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0g
c2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1
bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAg
ICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkQ29uc3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdl
dFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUo
KSwgc2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
YXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3Vt
ZW50U3RyaW5nKHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJn
dW1lbnRzLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2Vx
dWVuY2UuYmVnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAg
ICAgIHNlcXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAg
ICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29u
dGFpbnNMb29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0Nywx
MDYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVu
bWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9
IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIg
OiAiKCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikK
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWxvZDApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRFByb2oiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2ooIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRFByb2pMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmUiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAg
ewpAQCAtMTU4MywxMSArMTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgaWYgKG5vZGUtPnVz
ZXNUZXJuYXJ5T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9s
ZFNlbGVjdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91dCA8PCAicyIgPDwg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CiAgICAgfQogICAg
IGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0
LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1VbmZvbGRTaG9ydENp
cmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAgICAgICBvdXQgPDwg
ImlmKCI7CiAKQEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKIAogICAgICAgICBp
ZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8PCAiO31cbiI7Cisg
ICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCiAgICAg
ICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgbm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVt
ZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgIG91
dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKIAogYm9vbCBPdXRwdXRITFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2Fz
RGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIGlmICghbUlu
c2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBp
ZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAg
ICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiAK
ICAgICBvdXQgPDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNE
aXNjb250aW51b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAs
MTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCAqbm9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2
ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3Rh
dGVtZW50KG5vZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVy
c2Uobm9kZSk7CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wg
T3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAg
LTE3NTksOSArMTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJ
bnRlcm1Ob2RlICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMg
d2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNw
bGl0dGluZyB0aGVtCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBk
b2N1bWVudGF0aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxh
aW5zIGF0IGFueXRoaW5nIG1vcmUgdGhhbiAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9P
UF9JVEVSQVRJT05TID0gMjU0OwogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAg
ICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJv
b2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAv
IGluY3JlbWVudDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAg
ICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2ZSBs
b29wCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlh
bCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucyk7CisgICAgICAgICAgICAg
ICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhf
TE9PUF9JVEVSQVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAgICAgICAgICAgIC8vIGZvcihp
bnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQogCkBAIC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7
CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAgICAg
ICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IE1B
WF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9u
cyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlw
ZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAg
ICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRG
aWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAg
IHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZp
ZWxkLmdldEZpZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4
IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEz
NSw3ICsyMzA3LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlw
ZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEkKICAgICAgICAgewogICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5n
ZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAg
c3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVG
aWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAi
O1xuIjsKICAgICAgICAgfQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0
LDQgKzI2MDYsMTQgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3Qg
VFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKICAgICAKICAgICByZXR1cm4gZGVj
b3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNv
bnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
c3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAppbmRleCA4MjRiYzA3Li5lYTI4YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKQEAgLTE1LDcgKzE1LDcg
QEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRT
aG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgogewpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKIAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1l
bnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmlu
ZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9z
dFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgogICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5
cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVj
dCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENp
cmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFt
cwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2Vz
VGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29s
IG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0
MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1
bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZv
ciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgIGJvb2wgbUluc2lkZURp
c2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggNDMxZjhkMS4uNzliZGRlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xMCwzMyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRl
ICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMi
IHsKLWV4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVBy
ZXByb2Nlc3NvcigpOwotZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAq
bmFtZSwgaW50IHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtC
YXNlJiBzaW5rLAotICAgICAgICAgICAgICAgICAgICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291
cmNlTG9jIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4
dHJhSW5mbykKLXsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6
ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5r
LmxvY2F0aW9uKGxvYyk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCBy
ZWFzb24gPDwgIiAiIDw8IGV4dHJhSW5mbyA8PCAiXG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZp
bmVFeHRlbnNpb25NYWNyb3MoY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikK
LXsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwg
MSk7Ci0gICAgfQotfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmlu
ZywgaW50IHZlY1NpemUsIFRWCiB7CiAgICAgZmllbGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcu
c2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
MTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29u
c3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+
PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29t
cFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZp
ZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZl
Y3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVj
dG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VN
YXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNCiAg
ICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNvbXBTdHJpbmdb
MF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJp
bmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZp
ZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKICAgICAgICAg
aWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsK
QEAgLTE3MCw3ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRz
KGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycg
fHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICcz
JykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE0KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbG9jLAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJy
b3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAg
ICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZl
cnQgZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGlu
ZSwgIiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDEx
IEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKIHsKLSAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAgICAgICAgICJubyBv
cGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAgICAgIG9wLCBvcGVy
YW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMg
dGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAgICAgICAg
ICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJy
b3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
fQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9w
RXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCiAvLwogdm9p
ZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcg
b3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhp
c3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKLSAg
ICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBh
Y2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCBy
aWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAg
ICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBy
aWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9y
KGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAK
IH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBU
UHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyArMjQyLDEz
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFBy
ZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5CiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2Fz
ZSBFYnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAg
ICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0
KSIsICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3Bl
Y2lmaWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJl
Y2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBw
cmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1
ZV0rKzsgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxl
IGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3Qg
aGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMDEsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAm
JiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzc5LDEwICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAvLwogICAg
IC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCiAgICAg
Ly8KLSAgICBpZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdl
KTsKKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAi
XCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29u
c3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOwor
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQi
LCAiIik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
Y2hhciogdG9rZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBu
b2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRv
a2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MzAsNyArNDE1
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29s
IGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2Nv
cGUiLCB0b2tlbiwgIiIpOworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFs
IHNjb3BlIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwy
NiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRF
cnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5h
dEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywg
ImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
Z2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8i
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFk
ZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMo
c2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwg
IndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZl
ZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmds
XyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
Il93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYm
IGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRp
Zmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3Io
bGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29y
ZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQogCkBAIC01MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogICAgICAg
ICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXko
KSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxl
bWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJv
bSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0Fy
cmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0g
ICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2Fu
IG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihs
aW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkp
ICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhl
IG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4
SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6
ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CiAgICAgICAgICAgICAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkp
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZv
ciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3Ry
dWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAwOwog
ICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBh
cmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBl
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAo
b3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcgKzU3Miw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9k
ZSogbm9kZSwgVEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHVi
VHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
IGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAg
LTU5OSw3ICs1ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUAogYm9vbCBUUGFyc2VDb250
ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQog
ewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJy
YXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5
cGUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
JiBwVHlwZSwgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVs
c2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFz
b24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
IHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZQog
ewogICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRl
KSAmJgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmlu
ZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0
NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0g
RXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAgICAgICAgdHlwZS5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBh
cmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjkwLDE0ICs2Nzcs
MTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBU
SW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCiBib29sIFRQYXJzZUNvbnRl
eHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkK
IHsKICAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBh
cnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgs
NyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQ
dWJsaWNUeXBlIHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwogICAgIC8v
CiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNs
YXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBv
ZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2NywzNCArNzU0LDM0IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGlu
c2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBl
Y3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPihzeW1ib2wpOwogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlz
QXJyYXkoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJh
eSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFy
aWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJy
YXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLnNhbWVFbGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQg
PSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQg
IT0gMCkgewogICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJh
eVNpemUpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVl
IGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVz
ZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOwpAQCAtODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6
ZSwKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJv
bCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
bm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlw
ZSwgaW50IHNpemUsCiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYgKG5vZGUtPmdldFN5bWJv
bCgpID09ICJnbF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCogZnJhZ0RhdGEgPSBzeW1i
b2xUYWJsZS5maW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdEluKTsKLSAgICAgICAgaWYg
KGZyYWdEYXRhID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBkZWZpbmVkIiwgbGluZSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZnJh
Z0RhdGEpOwogCiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKICAgICAg
ICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1
cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAg
dG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAg
ICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlw
ZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJs
ZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFs
aWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUKICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZp
ZXIsIFRUeXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsK
ICAgICAgICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4
OTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxp
ZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJp
bmcocXVhbGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CkBAIC05MjQs
OCArOTA4LDkgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUs
IFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHAKIAogYm9vbCBUUGFyc2VDb250ZXh0
OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24p
CiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAg
aWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4
dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNp
b24pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09
IEVCaFdhcm4pIHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNp
b24gKyAiIGlzIGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAi
ZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRl
bnNpb24pCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hh
ciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0
ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25C
ZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9u
KTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0
aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUp
OworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxvYywgZXh0TmFtZSwgYmVo
YXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShp
bnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6
OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxl
LCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlUHJhZ21hKGxvYywgbmFt
ZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3MCwxMiArOTY5
LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGludCBs
aW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1CiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0
aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3lt
Ym9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUg
ZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHUKICAgICAvLwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAoKHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlm
aWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFs
aXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLwpAQCAt
MTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogCiAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxp
emVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7
CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3Qg
aW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVj
dXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUK
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBv
aW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFy
cmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90
IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTIz
OSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29u
c3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwg
IiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUt
PmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSog
dHlwZSwgaW50CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QsIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3Ry
dWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwg
cGFyYW1Db3VudCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUo
KS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIg
PDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIs
ICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwog
ICAgIH0KIApAQCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeQog
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2Vk
Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVu
Y3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBpZiAoIXVu
aW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFn
Z3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgot
ICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZl
Y3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHkKIAogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMu
b2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNb
aV0gPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJt
VHlwZWQqIG5vZGUsIFQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAi
WyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOwor
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwg
aW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAt
MTM0NSw3ICsxMzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAgIGludCBz
aXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRy
aXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFMK
ICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXgg
Pj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRl
eCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICci
IDw8IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0K
QEAgLTEzODAsNyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CiAg
ICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyArMTQzMiw3
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYg
aWRlbnRpZmllciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7
CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0
OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2Vk
IGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8g
c28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KICAgICBp
ZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVt
YmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxs
b3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3
IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRU
eXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykg
eworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBl
JiBmaWVsZFQKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0
aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1
Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVzdGlu
ZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBu
ZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkuY19z
dHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVuY2Ug
b2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIgPDwg
a1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4dHJh
SW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgyLDEw
NSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGlmICgoY291bnQgPT0gMCkg
fHwgKHN0cmluZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAvLyBzZXR1cCBw
cmVwcm9jZXNzb3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
KTsKLQogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAgIHJldHVy
biAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7
Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQgZXJyb3Ig
PSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpZiAo
IWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAKICAgICBn
bHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0g
ICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6
IDE7Ci19Ci0KLU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJz
ZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KLSAgICAvLwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIAotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNl
IENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgo
KQotewotICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
OwotCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFy
c2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19J
TkRFWDsKLQotICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKLX0KLQotYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFy
c2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0g
ICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNl
ZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAo
bHBUaHJlYWREYXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHBUaHJlYWREYXRhLT5scEds
b2JhbFBhcnNlQ29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
cmVlUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNv
bnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0KQotICAg
ICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0K
IAotVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAg
Ly8KLSAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAotICAgIC8vCiAKLSAg
ICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJl
YWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgp
KTsKLQotICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmgKaW5kZXggM2UwNTc2My4uOGRlZThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lm
bmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29s
OwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDog
b3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZv
bGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBl
ZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91
dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3Qg
Y2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRp
YXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAg
IGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAg
ICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwK
ICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBA
IHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUo
TlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAg
ICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAg
ICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlz
KSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAg
ICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAg
ICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1l
ZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5n
dWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBh
bmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxh
bmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIg
Y29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBA
IC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7
CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5l
cjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZv
U2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVh
c29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVj
dCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxp
ZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wg
ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVu
c2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAg
ICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0
KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVj
Ci17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQ
YXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKaW5k
ZXggYTYwMGMwMi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNr
R3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNv
CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0
J3MgaGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAg
ICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUg
YWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBz
aXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRp
b24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgp
KTsKICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFt
YWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJp
bnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAl
enUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1Rl
eHQsIHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29s
QWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmNzQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitz
dHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVk
IG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRy
dWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRp
bWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVi
dWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZGI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAt
MCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKyNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQorICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBUU3RyaW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdG
dW5jdGlvbk5hbWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAppbmRl
eCA5MWM0N2U3Li4yNjUyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVN
YXA7CiBjbGFzcyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBX
ZWJHTCBzcGVjLAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3
LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0
UmVjdXJzaW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidz
IGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAg
ICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQog
ICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBB
LgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03
OSw2ICs4OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhU
SW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFp
bSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3Ry
aWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wg
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9w
ZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAg
Ym9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVu
ZGVuY3lHcmFwaCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGgg
ZGVmYXVsdCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCAxM2YxMWI1Li41NmY1YzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcu
Y3BwCkBAIC03MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hh
ZGVySW5mbyB2YXJUeXBlLAogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoID0g
MSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYk1heExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKSk7
CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZlVW5pZm9ybUFu
ZEF0dHJpYkxlbmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoIC0g
MV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0
IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVO
R1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3Ro
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5h
bWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAgICAgIHN0cm5j
cHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVM
ZW5ndGgpOworICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcAppbmRleCBlZGJlYTk5Li42OGYwMjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKQEAg
LTE2LDkgKzE2LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEg
cGxhY2UgdG8gbGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgVFR5cGU6OmJ1aWxkTWFu
Z2xlZE5hbWUoVFN0cmluZyYgbWFuZ2xlZE5hbWUpCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkg
ewogICAgICAgICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJh
eVNpemUpOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNp
emUpOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9
IGJ1ZjsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKaW5kZXggOTZk
N2YxMC4uZjQxZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAK
IFRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4
NWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0
aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAot
ewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0
cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNl
bGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4
ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1w
b3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlm
IChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1U
ZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAg
ICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMi
IDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAg
b3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5m
b2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewot
ICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0g
cmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6
OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsr
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNlbGVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1Qg
dHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNl
IHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJp
ZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8g
dGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9y
dENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRw
dXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRw
dXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hv
cnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
bVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3
aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisg
ICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4
OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOwor
CisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBv
dXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwg
d2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwK
KyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9
IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBv
cmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsK
KworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAg
b3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5
IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+
dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5
SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdl
dFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Cisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+
Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAi
O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0g
aSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAg
ICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0
SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJl
d2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJj
dWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXgrKzsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0
Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsK
KworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVt
cG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJ
UkNVSVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAppbmRleCA3NjdkMGJmLi5kNjllYzZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAppbmRleCA5NjQyZTFlLi41Mzc3
OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVi
dWcuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNl
QnVmZmVyTGVuID0gMTAyNDsKQEAgLTI4LDcgKzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFy
ICpmb3JtYXQsIC4uLikgewogICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4s
IGZvcm1hdCwgYXJncyk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNv
bnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFj
ZShidWYpOwogICAgIH0KIH0KIH0gIC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBU
R3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50
OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3Mg
VEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxP
cDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0
OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5
cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9y
OworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisv
LworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9k
ZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRo
YXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1Ymxp
YyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2Rl
KiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnRO
b2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBp
ZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9Owor
CisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFw
aEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3Vt
ZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxs
KQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0
dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1B
cmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1l
bnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNz
IFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQor
ICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFn
Z3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5v
ZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdy
YXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2wo
KSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3Bl
cmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2Vs
ZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJt
U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2Rl
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBh
bmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRH
cmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAg
ICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFu
ZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMg
VEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
IGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2
aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdl
dEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5
Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBp
bnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8v
CisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9u
ZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFu
ZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgor
Ly8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3Jl
YXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0
YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAg
VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRl
bmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9
CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5
bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdp
bigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5k
U2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3lt
Ym9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1l
bnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1i
ZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNy
ZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVj
dGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7
CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7Cisg
ICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJt
TG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9s
Kj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAg
IFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZl
Y3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9s
SWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGgu
IFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBz
cGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1l
dGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBm
b3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVw
dGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5
bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQq
IHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFw
aEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
ZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXRE
ZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgo
KSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0K
KworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9p
ZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsg
fQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1W
aXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50
IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsK
KyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
QWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFn
Z3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5j
dGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0
QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7Cisg
ICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25z
LgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAg
ICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7
Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBk
ZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2Fs
bCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5j
dGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1l
bnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBp
bnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAg
Zm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVu
dHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAg
ICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRN
YWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0g
bU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJn
dW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1l
bnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUo
YXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVu
ZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2gg
dGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVu
dCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3Vs
dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtl
ICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4
IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUg
ZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBl
YXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRo
ZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVn
YXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUt
PmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikK
KyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAg
ICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wp
Cit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5
bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhh
dCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+
Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQg
bGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3Vz
CisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVm
dG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0
U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVm
dG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRl
cm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOwor
ICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0
ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlm
IChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlz
aXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5
Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGlu
dGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJt
QXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7
CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJt
TGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0
bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhl
IGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEg
cmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5
bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1v
c3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJ
bnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7
CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCog
YXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5
bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMg
YXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bwor
ICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBB
biBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBn
cmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBh
c3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGlu
IHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdu
bWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNy
ZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1Rv
cFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkp
IHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7
CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRl
TG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+
Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7
CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVm
dCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAg
ICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRo
aXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAg
IGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRD
b25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWlu
ZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRU
b3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3Jh
cGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9
IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9j
ay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxv
Y2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFs
c2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9u
ID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFp
bmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxv
b3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0
TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29w
LT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAg
aWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJl
c3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgp
OyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9
ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAg
ICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYyMzJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRl
cGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRj
LiBieSB0cmF2ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBo
KiBncmFwaCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNr
PFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFw
aFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxl
Y3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRj
LgorICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8v
CisgICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBj
b250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNz
IFROb2RlU2V0U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9
OworICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0
dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNl
dCogZ2V0VG9wU2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2Rl
U2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2Rl
U2V0cy50b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0
IDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMu
cHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250
ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJl
bG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZv
aWQgcG9wU2V0SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVT
ZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAg
IGlmICghbm9kZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0
KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQt
Pmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRo
aXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0
aW5nCisgICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQg
b3IgY29uZGl0aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5
bWJvbHMuCisgICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBu
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQo
bm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNl
dCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3Rh
Y2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJl
bnROb2RlU2V0U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0
ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBw
b3BzIHRoZSBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7
CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRz
KSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNl
dHMucG9wU2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNl
dHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBw
dXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUg
aW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQg
YW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisg
ICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNl
dHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWlu
dGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdo
aWxlIHdlJ3JlIGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2ls
bCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlh
dGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVy
IGEgcmlnaHQgc3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3
aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAg
IC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJl
cGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0
cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFy
ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFz
cyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRH
cmFwaFN5bWJvbCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3Rv
cnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vo
b2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMu
dG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJv
bCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBt
UmlnaHRTdWJ0cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQg
YnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhp
cyk7IH0KKworICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVu
dE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlz
aXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFy
eSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSop
OworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVu
Y3Rpb25DYWxsKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3Jl
Z2F0ZSopOworCisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1i
b2wgbVJpZ2h0U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBU
Tm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9s
czsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9C
VUlMREVSX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJn
dW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5r
IDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9m
IGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxs
KCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQorewor
ICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8
PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJc
biI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBo
U3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8
PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6
ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIp
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlv
bigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxP
cCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIg
PDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBn
cmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQo
KTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7Cisg
ICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxu
IjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAxNDQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgor
ICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhz
aW5rKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJv
bCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9u
Q2FsbCogZnVuY3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdy
YXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExv
Z2ljYWxPcCogbG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50
YXRpb24oKTsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNw
cApAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0
aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rl
cy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhp
cyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7
CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRH
cmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4o
KTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBp
ZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50
cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRl
Y3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVy
c2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNl
KGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBn
cmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRy
YXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRy
YXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBo
VHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRy
YXZlcnNlcik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAppbmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFy
c2VDb250ZXh0OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCog
Y29udGV4dCk7CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAg
ICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFu
Z19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYjlhMzAyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdf
bGV4LmNwcCkuCiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiAr
MzgsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNw
cCkuCiAlewogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIu
aCIKIApAQCAtMTU5LDYgKzE2MCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03
XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAi
Zml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNp
Z25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBA
QCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10K
IAogMFt4WF17SH0rICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9
KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
KzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9j
dGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtE
fSsgICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyBy
ZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXgu
ZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQog
CisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXBy
b2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZp
bmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwK
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwK
ICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5z
Y2FubmVyOwpAQCAtMjcyLDI2ICsyODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJl
cigpCiB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5z
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0s
ICJvcHRpbWl6ZSIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
IihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXpl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwi
IGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
M10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQg
dG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAg
ICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVi
dWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVn
JyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29u
dGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJh
Z21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAg
ICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8v
IEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24g
Y2Fubm90IHJlY29nbml6ZQotICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxl
bWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8v
ICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21h
IG5hbWUgaW4gcHJhZ21hVGFibGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51
bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5z
WzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJh
Z21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAg
ICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAg
ICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAg
ICAgfSAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAg
ICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRT
dHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBd
ID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01B
X1RBQkxFCi0gICAgfQorCisgICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYg
KHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9r
ZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURp
cmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3Jl
U3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSAr
MzkzLDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1z
ZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3Ip
Ci17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVy
biBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkK
LSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxl
IiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICgh
c3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBi
ZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
IEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVo
YXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2
aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBp
dGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFs
bCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAg
aWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxl
KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3Qg
aGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+
ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhh
dmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2
aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWly
ZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAg
IGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAg
ICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBz
dXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5o
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0K
IH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5
c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNh
bid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOwotCi0gICAg
YnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGludCBsZW4gPSAwOworCisj
aWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxl
biA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUo
KTsKKyAgICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNw
eShidWYsIHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29k
ZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlz
Y2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2Vu
ZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwor
ICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0
dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01
NDQsOSArNDUwLDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9G
IiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBl
Y3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAt
NTY1LDIyICs0NzEsNDMgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgewogICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwogICAgIAogICAgIGNv
bnRleHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworI2VuZGlmCisgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNj
YW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQt
PnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8g
SW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vz
c29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxz
ZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNw
cC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0g
ICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChj
cHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBt
YWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAh
PSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9D
RVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXIt
PmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IGQ2Yzg4NjkuLmFiNGFhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3Io
VFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJB
R19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBU
VmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRp
ZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhw
cmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAg
ICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93Iiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBj
b25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgo
KSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xO
b2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJh
eSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2wo
KS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAt
MjU0LDcgKzI1NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKICAgICAgICAg
ICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAk
My0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25z
dCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3LDcgKzI3MCwxMCBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9T
dHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJh
cnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5s
aW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3Bl
cmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMu
d2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpA
QCAtMzczLDcgKzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDAp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MTEsMTMg
QEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlw
ZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2gg
ZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVz
IHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTAwLDkg
KzUwNiwxMCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigk
MS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVk
Kj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBl
eHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTUyNiw3ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZx
SW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fu
bm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTUxLDcgKzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90
IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJt
ZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1NCw3IEBAIGZ1bmN0aW9u
X2lkZW50aWZpZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0
cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7CkBAIC0xMDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICBU
RnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1i
b2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVj
KSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNjAsNyAr
MTA2Nyw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFu
IGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xMDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJz
CiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIg
TEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQx
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxl
ciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsxMTAyLDcgQEAgcGFyYW1l
dGVyX2RlY2xhcmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDogdHlwZV9zcGVjaWZpZXIg
SURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQpAQCAtMTE5
MSw3ICsxMTk4LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8IGluaXRfZGVjbGFyYXRv
cl9saXN0IENPTU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVi
dEludmFyaWFudCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgfQog
ICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRf
QlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5
IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9u
cyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKTsK
QEAgLTEzNjQsNyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAkJC50eXBl
LnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDIubGluZSk7
CiAgICAgICAgIGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFy
aWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMTQz
OCw3ICsxNDQ1LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3Ry
aW5nLCAkMSk7CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCok
JC52YXJpYWJsZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJl
ZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFi
bGUtPmdldE5hbWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhl
IHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQpAQCAtMTQ1MCwyNiAr
MTQ1NywyNiBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAg
ICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlw
ZV9zcGVjaWZpZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5
cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gJDI7CkBAIC0xNjU0
LDcgKzE2NjEsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBM
RVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lv
bigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VT
IiwgJDEubGluZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogICAgIH0KICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJE
UmVjdCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIs
ICQxLmxpbmUpOwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVzdF9zdGF0ZW1lbnQKIGp1
bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIi
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3Rh
dGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJSRUFLIFNF
TUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CkBAIC0x
OTgxLDcgKzE5ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTk2LDEwIEBAIGp1
bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1
cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0
aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5j
dGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBy
ZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDQ0LDcgQEAg
ZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9k
eSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3ICsyMDU0
LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0
UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+
Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA4Niw3IEBAIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMg
d2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0
aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9
CkBAIC0yMTE2LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAKICAgICAgICAgLy8g
c3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBv
dGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3Jt
YXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6
ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250
ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJh
Z21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6
ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFn
bWEoKS5kZWJ1Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRBc0FnZ3JlZ2F0ZSgpKQog
ICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoJDMtPmdldEFzQWdn
cmVnYXRlKCktPmdldEVuZExpbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRleCA1OWI3Mjk5Li5kMjlkOTM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4IEBAIHN0YXRpYyB2b2lkIHl5X2Zh
dGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCSp5
eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9O
VU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05V
TV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0
IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVj
ZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0
cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMy
X3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQy
Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0
NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwg
IDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDEx
OSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAg
MywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwg
IDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEw
MSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwg
IDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDEx
MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIy
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAw
LCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAg
OTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcs
ICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAg
MTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAg
ICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwg
ICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0
MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAg
ICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5
MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAg
ICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAx
NDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMs
ICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisg
ICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjks
ICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAx
MTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcs
ICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAg
IDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAg
ICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAg
IDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDEx
MiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAg
IDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAg
IDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAg
IDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAg
MzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAs
ICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAg
NDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgs
ICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQs
ICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAg
OTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAg
ICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwg
ICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4
OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAg
IDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcs
CiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAs
ICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAg
MjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAg
MzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYs
ICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0K
LSAgICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1
MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1Nywg
ICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2
NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwg
ICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAy
NywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwg
ICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAg
ICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwg
ICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0
MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMy
LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAg
IDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0
LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAg
IDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
CisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAw
LCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAot
ICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMx
LCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAg
IDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3
LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAg
MTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcy
LCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAg
NjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAg
ICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAg
MjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4
LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAg
NTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1
NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIs
ICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAy
NDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAg
ICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1
MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2Mjgs
ICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAg
IDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgs
ICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1
MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMs
ICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0
ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUs
Ci0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwg
IDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3
OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2Niwg
IDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5
MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwg
ICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4
MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywK
LSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0
NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwg
IDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQz
NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywg
IDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1
LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAot
ICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEy
LCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAg
ICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAw
LCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAg
ICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAg
ICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAg
ICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAg
ICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1
LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAy
MDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgs
ICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAg
MCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAg
IDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEz
MSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0Nywg
IDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1
NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3Nywg
IDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4
MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwg
ICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4
MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwK
KyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4
MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwg
IDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAg
NjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1
LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAg
NTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4
LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAor
ICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgx
LCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAg
ICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYw
LCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAg
NTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3
LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAg
NTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisg
ICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAs
ICA1MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAy
NjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgs
ICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1
MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAs
ICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0
OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAg
ICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0
ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAs
ICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwg
ICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2
NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwg
IDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAg
MCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwg
IDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAg
MCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywg
IDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQy
NSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwK
KyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQw
NywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzky
LCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAg
MzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAw
LCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAor
ICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQy
LCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAg
NDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMw
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0
MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwg
ICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKwor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAg
NDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRb
Njk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsg
ICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMw
LAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAg
IDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYy
LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAg
IDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0
LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAor
ICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5
LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAg
IDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgs
ICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisg
ICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUs
ICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAg
OTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAg
ODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgs
ICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAx
NDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEw
NCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwg
IDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQy
MSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAg
IDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4
NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwg
ICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1
MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwg
IDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3
OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwg
IDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4
MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwK
LQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAg
Mjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAg
MjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAg
IDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1
LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAot
ICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0
MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIs
ICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0g
ICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcs
ICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAz
NzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAs
ICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAz
NjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMs
ICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAz
NDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAg
ICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAz
MjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUs
ICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwg
IDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4
NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3Mywg
IDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2
NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAg
IDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0
MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwg
IDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwg
IDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4Miwg
IDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAg
MTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAg
MTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1
LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwK
KyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5Niwg
ICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEy
MywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwg
IDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKwor
ICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1
LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAg
MTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIw
LCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAg
MTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0
LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAg
MTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5
LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAg
MTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4
LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAs
ICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0
NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQs
ICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQs
ICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAs
ICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAy
MjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcs
CisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMy
MSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwg
IDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQy
NiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwK
KyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQx
OCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwg
IDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwg
IDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3
OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcx
LCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAor
ICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUz
LCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAg
MzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2
LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAg
Mjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAg
ICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAg
MjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0
LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAg
MjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAy
NDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYs
ICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAy
MjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAg
ICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAx
OTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIs
ICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAx
NzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMs
ICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAx
MjIsICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
CisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4
ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAg
ICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAg
IDEyLCAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAot
ICAgICAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIw
LCAgIDMzLAotICAgICAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLCAg
IDQyLCAgIDEzLCAgIDM1LAotICAgICAgMTQ1LCAgIDM1LCAgMTQ1LCAgIDMzLCAgIDQyLCAgIDM1
LCAgIDIxLCAgIDIyLCAgIDQxLCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAg
IDIyLCAgIDIzLCAgIDQxLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDI2LCAgIDIyLCAgIDM2LCAgIDQ0LCAgIDQxLCAgNDMwLCAgIDIyLAotICAgICAgIDQ0LCAg
NDIzLCAgIDIzLCAgNDIyLCAgIDQ1LCAgIDM2LCAgIDU1LCAgIDIyLCAgIDM2LCAgIDI2LAotCi0g
ICAgICAgMzcsICAgMjYsICAgMjYsICAgMzksICAgMzcsICAgMjMsICAgMzgsICAgNDUsICAgMzgs
ICAgMzcsCi0gICAgICAgNDcsICAgMzksICAgNDksICAgMzksICAgMjIsICAgMzcsICAgMzksICAg
MzgsICA0MjEsICAgNDksCi0gICAgICAgNDksICA0MjAsICAgMzksICAgNTAsICA0MTksICAgNDcs
ICAgNTAsICAgNTEsICAgNDcsICAgNDksCi0gICAgICAxMzUsICAgNTEsICAgNDksICAgNTIsICAg
NTAsICAxMjAsICAgNTUsICAgNTIsICAxMjAsICAxMjAsCi0gICAgICA0MTcsICAgNTAsICAxMjAs
ICA0MTYsICAxMjAsICAxMzUsICAgNTIsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAg
NzQsICAgNzQsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAxNjcsCi0gICAg
ICAxNjcsICA0MTUsICAgNzQsICAxOTIsICAxOTIsICAxOTIsICA0MTMsICAgNzksICAgNzgsICAg
NzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzQsICAyMTUsICAyMTUs
ICAyMTUsICA0MTIsCi0gICAgICA0MTEsICAgNzgsICA0MTAsICAgODAsICAgNzksICAgODAsICAg
ODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAxMjIsICAyMjYsICAyMjYsICAyMjYs
ICA0MDksICAgODEsICAgNzksICAgODEsICAxMjIsCi0KLSAgICAgICA4MCwgICA4MSwgICA4MSwg
ICA4MSwgICA4MSwgICA4MSwgICA4MSwgIDIzNCwgIDIzNCwgIDIzNCwKLSAgICAgIDQwOCwgIDQw
NywgICA4MywgICA4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
IDE0MSwgIDI0MSwgIDI0MSwgIDI0MSwgIDM5OCwgIDE1MSwgIDM5NywgIDE1MSwgIDE0MSwgICA4
MywKLSAgICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MywgIDI0NSwgIDI0NSwgIDI0NSwgIDM5
NiwgIDE1NCwgIDM5NSwgIDE1NCwKLSAgICAgIDM5MywgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NSwgIDE1NSwKLSAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1MywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDIxMSwg
IDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDM5MiwgIDIxMSwKLSAgICAgIDIy
MCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwK
LSAgICAgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDI1
MSwgIDI1MSwKLQotICAgICAgMjUxLCAgMzgxLCAgMzkxLCAgMzg4LCAgMzg3LCAgMzg1LCAgMzgy
LCAgMzgwLCAgMzc5LCAgMzc4LAotICAgICAgMzc2LCAgMzc1LCAgMzgxLCAgMzc0LCAgMzgxLCAg
NDI2LCAgNDI2LCAgNDI2LCAgNDI2LCAgNDI3LAotICAgICAgNDI3LCAgNDI4LCAgNDI4LCAgNDI5
LCAgMzcxLCAgNDI5LCAgNDI5LCAgMzcwLCAgMzY5LCAgMzY4LAotICAgICAgMzY3LCAgMzY2LCAg
MzY1LCAgMzY0LCAgMzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLAotICAgICAgMzQ5
LCAgMzQ3LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LAot
ICAgICAgMzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1
LCAgMzI0LAotICAgICAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAg
MzExLCAgMzAwLCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0
LCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LAotICAgICAgMjc1LCAgMjc0LCAgMjcxLCAgMjcwLCAg
MjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LAotICAgICAgMjYzLCAgMjYyLCAgMjYx
LCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LAotCi0gICAgICAyNDcs
ICAyNDYsICAyNDQsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzMsICAyMzIsICAyMzEsCi0g
ICAgICAyMzAsICAyMjksICAyMjgsICAyMjUsICAyMjMsICAyMTgsICAyMTcsICAyMTYsICAyMTQs
ICAyMTMsCi0gICAgICAyMTIsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAy
MDQsICAyMDMsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYs
ICAxOTUsICAxOTQsICAxOTMsICAxOTEsCi0gICAgICAxOTAsICAxODksICAxODgsICAxODcsICAx
ODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsCi0gICAgICAxODAsICAxNzksICAxNzcs
ICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsCi0gICAgICAxNjksICAx
NjgsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsCi0gICAg
ICAxNDMsICAxNDIsICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAx
MzIsCi0gICAgICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQs
ICAxMjMsICAxMjEsCi0gICAgICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAx
MTIsICAxMTEsICAxMTAsICAxMDksCi0KLSAgICAgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEw
NCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OSwKLSAgICAgICA5OCwgICA5NywgICA5Niwg
ICA5NSwgICA5MSwgICA4NywgICA2MCwgICA1MywgICA0OCwgICA0NiwKLSAgICAgICA0MywgICA0
MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgIDUsICAgIDUsICAgMTMsICAgMTcsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMzMsICAg
NDIsICAgMjEsICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsCisgICAgICAgNDIsICAgMTMs
ICAgMzUsICA0NjMsICAgMzUsICAgNDQsICAgMzMsICAgNDIsICAgMzUsICAgNDQsCisgICAgICAg
MjEsICAgMjIsICA0NTUsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIs
CisgICAgICAgMjMsICAgNTUsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjIsCisgICAgICAgMjYsICAgMzYsICAgNTEsICA0NTQsICAgMjIsICAgMzgsICAgNTEs
ICAgMzgsICAgMjMsICAgMzcsCisKKyAgICAgIDQ1MywgICAzNiwgICAyMiwgICAzNywgICAzNiwg
ICAzOSwgICAzOCwgICAyNiwgICAzNywgICAyNiwKKyAgICAgICAyNiwgICAyMywgICA0MSwgICAz
OSwgICAzNywgICAzOSwgICA0NSwgICA0NywgICAzOSwgICAyMiwKKyAgICAgICA0MSwgICA1NSwg
IDEzNSwgIDE0NiwgICAzOSwgIDE0NiwgICA0OSwgICA1MCwgIDExMiwgICA0NSwKKyAgICAgICA1
MCwgICA0MSwgICA0NywgICA0OSwgICA0OSwgICA0NywgICA1MiwgIDEzNSwgICA1MCwgIDEyMiwK
KyAgICAgICA1MiwgIDExMiwgIDQ1MiwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIDEyMiwgIDQ1
MSwgICA1MiwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3OCwgICA3OCwgICA3OCwKKyAgICAgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDQ1MCwgIDEy
MCwgICA3NCwgIDE0MiwgIDEyMCwgIDEyMCwKKyAgICAgIDE2OCwgIDE2OCwgIDEyMCwgICA3OCwg
IDEyMCwgIDE0MiwgIDE5NCwgIDE5NCwgIDE5NCwgICA3NCwKKyAgICAgIDIxOCwgIDIxOCwgIDIx
OCwgIDQxNywgIDQxNywgICA3OSwgICA3OCwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA4MCwgIDQ0OCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKwor
ICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDc5LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LAorICAgICAgMTU2LCAgNDQ2LCAgIDgwLCAgIDgxLCAgNDQ1LCAgIDgxLCAgIDc5LCAg
NDQ0LCAgIDgxLCAgIDgxLAorICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgw
LCAgIDgzLCAgMjE0LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgMjE0LCAgMjI5LCAgMjI5LCAgMjI5LCAgNDQzLAorICAgICAgMTUyLCAgNDQyLCAgMTUy
LCAgNDQwLCAgIDgzLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAg
MTUyLCAgMjM3LCAgMjM3LCAgMjM3LCAgNDM5LCAgNDM4LCAgIDgzLCAgMTU0LCAgMTU0LAorICAg
ICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgNDM3LCAg
NDM2LAorICAgICAgMTU1LCAgNDM1LCAgMTU1LCAgNDM0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1
LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTU1LCAgMjQ5LCAgMjQ5LCAgMjQ5LCAgNDMzLCAg
NDMyLCAgMTU0LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorCisgICAgICAyMjIsICAyMjIsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjQsCisgICAgICAyMjQsICAy
MjQsICAyMjQsICAyMjQsICAyMjQsICAyMjQsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAg
ICAyMjUsICAyMjUsICAyMjUsICAyNTUsICAyNTUsICAyNTUsICAzODgsICAzODgsICAzODgsICA0
MzAsCisgICAgICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsICA0MjIs
ICA0MjEsICAzODgsCisgICAgICA0MjAsICAzODgsICA0NTksICA0NTksICA0NTksICA0NTksICA0
NjAsICA0NjAsICA0NjEsICA0NjEsCisgICAgICA0NjIsICA0MTksICA0NjIsICA0NjIsICA0MTgs
ICA0MTYsICA0MDcsICA0MDYsICA0MDUsICA0MDQsCisgICAgICA0MDMsICA0MDIsICA0MDAsICAz
OTksICAzOTgsICAzOTUsICAzOTQsICAzOTIsICAzODksICAzODcsCisgICAgICAzODYsICAzODUs
ICAzODMsICAzODIsICAzODEsICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCisgICAgICAz
NzMsICAzNzIsICAzNzEsICAzNjUsICAzNjIsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
CisgICAgICAzNTMsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDYsICAzNDUsICAzNDMsICAz
NDEsICAzNDAsCisKKyAgICAgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMz
MiwgIDMzMSwgIDMzMCwgIDMyOSwKKyAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwg
IDMyMCwgIDMxOSwgIDMxNiwgIDMwNSwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5
MSwgIDI5MCwgIDI4OSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3OSwg
IDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwKKyAgICAgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI1NCwgIDI1MywK
KyAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OCwgIDI0NCwgIDI0MiwgIDI0MSwgIDI0MCwgIDIz
NiwgIDIzNSwKKyAgICAgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNiwgIDIyMSwg
IDIyMCwgIDIxOSwgIDIxNywKKyAgICAgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwgIDIxMSwgIDIx
MCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwKKyAgICAgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwg
IDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5MywgIDE5
MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwKKworICAgICAgMTg0
LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAor
ICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYzLAorICAgICAgMTYyLCAgMTQ3LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTQxLCAgMTQwLCAg
MTM5LCAgMTM4LCAgMTM3LAorICAgICAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMxLCAgMTMw
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LAorICAgICAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAg
MTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLAorICAgICAgMTExLCAgMTEwLCAgMTA5
LCAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLAorICAgICAgMTAxLCAg
MTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLAorICAg
ICAgIDUzLCAgIDQ4LCAgIDQ2LCAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAg
ICA3LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgK
ICAgICB9IDsKIAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hf
ZW9sWzE0OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsxNTZdID0KICAgICB7ICAgMCwKIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYwLDcgKzc4MSw3IEBAIHN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAg
IH07CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwg
ICAgIH07CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0
J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03
NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21h
dGNoX2VvbFsxNDhdID0KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2LDYgKzgwNyw3IEBAIFdI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtOTQ0
LDcgKzk2Niw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBc
CiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTEw
ODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJ
CX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5
eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
NDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3ICsx
MTI1LDcgQEAgeXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9zaXpl
X3QgeXlsOworCQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQogCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4MSwy
MjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcg
PSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5l
cik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2
YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIi
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3Zlcigp
OyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VU
VVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAK
IHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsg
cmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoK
IFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
X2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
OTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihB
RERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNl
IDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEw
NzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJ
TkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6
CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAx
MjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVG
VF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoK
IFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihT
RU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NF
VFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlf
UlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2Fz
ZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEz
MzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRl
eHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBh
cmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6
CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJ
R0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxF
X1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToK
K2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToK
K2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FS
RVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6
CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0x
NzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNU
SU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAog
e30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitj
YXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsg
IH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihD
T01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9G
ID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0
OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBj
aGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2Fz
ZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIwNzAs
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQog
CQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDEx
ICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIpCiAJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYg
KQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9z
dGF0ZSA9PSA0NTgpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OwogfQpAQCAtMjg5NCwxMCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI5MDYsMjYgKzI5NjUsMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVn
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBj
b250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVu
bywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Km1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTI5ODAsODggKzMwMzksMTUgQEAgdm9pZCBEZWNMaW5lTnVt
YmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tl
bnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1sw
XSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1p
emUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQot
ICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2Zm
XCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3Rl
ZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAg
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJk
ZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVi
dWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBw
cmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQot
ICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAg
ICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAg
Ly8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlv
biBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1w
bGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAg
Ly8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxl
bWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFn
bWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAo
bnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tl
bnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBw
cmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAg
ICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAg
ICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAg
ICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRh
YmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQo
VFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBd
IF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFH
TUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0
b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21h
RGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3Rv
cmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtMzA4Myw3
MSArMzA2OSwzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hF
cnJNc2cgPSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2
aW9yKQotewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICBy
ZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlv
cikpCi0gICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlz
YWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBp
ZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIp
ICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBFQmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lv
bkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRC
ZWhhdmlvcihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0
b3IgaXRlcjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZv
ciBhbGwgZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAg
ICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVu
YWJsZSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fu
bm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBi
ZWhhdmlvclZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRl
ciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJl
cXVpcmU6Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNp
b24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAg
ICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAg
ICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBu
b3Qgc3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4
dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7
CiB9CiB9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgogCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAo
YnVmLCBtYXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0g
bWF4X3NpemUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93
LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAg
ICBpbnQgbGVuID0gMDsKKworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6
OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5s
ZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAg
OiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
IHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4u
bG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0g
ICAgYnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4
X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsK
KyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJl
dHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAt
MzE3OCw5ICszMTI2LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0Yp
IHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQg
RU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5l
eHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5l
bm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpA
QCAtMzE5OSwyMiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0
KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAg
ICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nh
bm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVX
X1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAg
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0
LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRl
eHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4K
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJv
Y2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7Cisj
ZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAg
IGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5Q
YUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNw
cC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7
Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1
dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlm
ICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lv
biBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRl
ciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0
ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8o
aXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCmluZGV4IDM3YTBmMDUuLmQ1ODUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtMSwyNCArMSwy
MiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAg
IENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55
IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl
ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjcsNyBAQAog
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBl
eGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2
ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklT
T05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAogLyogUHVyZSBwYXJzZXJz
LiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUg
WVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyog
VXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogCiAKKy8qIENv
cHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJh
dGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2Vu
ZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKworLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKwor
LyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJs
aW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5l
IFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlU
T0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2ICsyMTUsMTQgQEAKICAg
ICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5l
IElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElV
TV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJ
U0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAot
I2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElO
VF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVm
aW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElG
IDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJW
RUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElW
RUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZF
QzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJ
WDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5l
IElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5
MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJV
Q1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5l
IFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJf
RVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVO
VElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQg
MzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0j
ZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUg
UklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2Rl
ZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2Rl
ZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNk
ZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNT
SUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAot
I2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmlu
ZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJ
R04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0j
ZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5l
IFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hU
X0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBD
T0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZp
bmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5l
IFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQ
RVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAz
NDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUg
QU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAotLyogQ29weSB0aGUg
Zmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29k
ZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNo
LWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZ
WUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
LSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0j
IHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNl
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0
b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5f
VEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlT
VFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0zNDAs
MTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlz
dCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBv
ZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMzYwLDI4ICsyNzEs
MjYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAg
IGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBj
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFE
RVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYg
b2YgeWFjYy5jLiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1Niwx
NCArMzY1LDE0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkK
K1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsK
K1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1
cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQg
Kik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KIC8qIEEgdHlwZSB0aGF0IGlz
IHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxv
YwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5
cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhl
IHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRo
ZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24g
eXlhbGxvYykgLSAxKQpAQCAtNTgwLDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3Rh
Y2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1Qg
eXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXpl
KTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHIt
PlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNr
X2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNr
KSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9m
ICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAg
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAy
MDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwg
ICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAot
ICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4
LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAg
NzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUs
ICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4
NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4
NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAg
IDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkx
LCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAx
MTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDEx
NzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwg
IDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4
MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAg
MTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0g
ICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcs
ICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2
NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwg
IDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgw
NiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1
LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAx
ODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAs
ICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5
MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1
NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAg
MjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAg
NDI2LCAgIDQzNiwgICA0NDksICAgNDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAg
ICAgNTc5LCAgIDU4MywgICA1OTAsICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwg
ICA2ODUsICAgNjg4LAorICAgICA2OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDcz
NiwgICA3MzcsICAgNzQ2LCAgIDc1OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAg
IDc4MywgICA3OTMsICAgODAzLCAgIDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUw
LCAgIDg1NCwgICA4NTgsICAgODYyLCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEs
ICAgOTA0LAorICAgICA5MDUsICAgOTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5
MzksICAgOTQwLCAgIDk0NCwgICA5NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwg
IDEwMDUsICAxMDQzLCAgMTA0NiwgIDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTEx
NCwgIDExNDMsICAxMTQ4LCAgMTE1OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgy
LAorICAgIDExODgsICAxMTk1LCAgMTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAx
Mjg5LCAgMTMwNywgIDEzMTUsCisgICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgs
ICAxNDkxLCAgMTQ5NywgIDE1MDUsICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1
NDEsICAxNTQ0LCAgMTU1MCwgIDE1NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAg
IDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAg
MTYyOSwgIDE2MzQsCisgICAgMTY0MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcx
LCAgMTY4MCwgIDE2ODUsICAxNjk4LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAx
NzI0LCAgMTczOSwgIDE3NzUsICAxNzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMs
ICAxODE3LCAgMTgxOCwgIDE4MjQsICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwg
IDE4MzMsCisgICAgMTgzMywgIDE4MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0
OSwgIDE4NDksICAxODU0LCAgMTg1NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAg
MTg4MSwgIDE4ODksICAxODkzLCAgMTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMw
LCAgMTkzMCwgIDE5MzcsICAxOTM3LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMs
CisgICAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIw
MTksICAyMDI2LCAgMjAyOSwKKyAgICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIs
MTYgKzcyMSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImlu
aXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZp
ZWRfdHlwZSIsCiAgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNp
b25fcXVhbGlmaWVyIiwKICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZp
ZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIs
ICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIs
CiAgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1l
bnQiLAotICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19u
ZXdfc2NvcGUiLAotICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91
bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAz
IiwgIiRANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Nj
b3BlIiwgIiRANSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAg
ICJzdGF0ZW1lbnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3Rh
dGVtZW50IiwKLSAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1l
bnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25f
cmVzdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3
IiwKKyAgIiRAOCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIs
ICJmb3JfcmVzdF9zdGF0ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25f
dW5pdCIsICJleHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwg
IkAxMCIsIDAKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYK
IApAQCAtMTM0NSw5ICsxMjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9z
W10gPQogCiAvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKIApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQg
KHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0
eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGlj
IHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJv
dHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwg
eXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZv
ciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAl
ZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisg
ICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9
CiAKQEAgLTE1NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxl
LCBjb250ZXh0KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5
eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAk
JWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5
eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKIAkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApA
QCAtMTg0OSwxMCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCBjb250ZXh0KQogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBm
cm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2
b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAo
KTsKIAogCiAKLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0K
ICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5
OCw3NCArMTgxNiw3NSBAQCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAg
LyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBz
byBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0g
IGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJy
b3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1h
aGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8K
LSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9y
IGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1z
Z2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQg
dGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZz
JzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBs
b2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50
ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hl
cmUuICAqLworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAg
aW50IHl5bmVycnM7CiAKLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2
IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5
dHlwZV9pbnQxNiAqeXlzc3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50
IHl5ZXJyc3RhdHVzOwogCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZ
U1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZ
U1RZUEUgKnl5dnNwOworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNl
bWFudGljIHZhbHVlcy4KIAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0
ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhl
bSBlbHNld2hlcmUuICAqLwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5
cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAg
ICB5eXR5cGVfaW50MTYgKnl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3Ag
LT0gKE4pLCB5eXNzcCAtPSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAg
Ki8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOwor
ICAgIFlZU1RZUEUgKnl5dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVz
dWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRv
a2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQg
dG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rp
b24gcm91dGluZXMuICAqLwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUu
ICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7Cisg
IFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZp
bmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGlu
dCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9
IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3Rh
dHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRv
a2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAg
ICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBz
byB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAg
ICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5
eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50
IHl5bmVycnM7CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOwogCi0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRl
cy4gIFRoaXMgdXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3
byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5
bmVycnM7CiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6
ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpA
QCAtMjAyNiw5ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZ
WVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRy
KQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZ
WVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2Ms
IHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAo
eXlzczEpOwpAQCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9
IHl5c3MgKyB5eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAot
CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVc
biIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYg
KzE5NjQsOSBAQCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmlu
ZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisg
ICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIw
NTcsMTYgKzE5NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHBy
b3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAg
IGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBk
byB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0
b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1Rf
TklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
ay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtu
b3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAg
Ki8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBs
b29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2Vu
OiAiKSk7CkBAIC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJl
ZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAg
IC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBv
ZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJy
c3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBT
aGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRp
bmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlm
dGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQot
ICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAq
LworICB5eWNoYXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0g
eXlsdmFsOwpAQCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRT
eW1ib2wqIHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBj
b25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVu
ZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAg
VFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJl
IGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJp
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8g
Y2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIg
Y29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ci
LCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIxMzks
MjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFso
MSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjI2
Niw3ICsyMTgwLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8
PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5n
ZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJy
YXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBh
cHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwg
Ii4iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAi
LiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlm
IChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVy
cm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUsMTgg
KzIzNDUsMTggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBz
dWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0
cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMjoKQEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsy
Mzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUo
KSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBU
eXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJ
bnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQg
dHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwg
PT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVl
IGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJy
b3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3Rh
bnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJz
LiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAi
bWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUx
OCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTk6CkBAIC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5v
ZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIx
LDcgKzI1NDIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAgICAg
ICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFt
KTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUi
LCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJp
bmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9u
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0ICsy
NjUwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MzA6CkBAIC0yNzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3MDYs
MjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzMjoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExv
Z2ljYWxOb3Q7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4MTgs
NyArMjczOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4ODQs
NyArMjgwNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoK
QEAgLTI4OTgsNyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0NToKQEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoK
QEAgLTI5NDUsNyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0OToKQEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NjoK
QEAgLTMwMTIsMTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5NTIs
MTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAg
ICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjE6
CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA2MzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNl
IDY0OgogCi0gICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZF
UlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BNdWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAgeyBG
UkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3Np
Z247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFz
c2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9CisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3Vi
QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToK
QEAgLTMxMTcsNyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA3MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFy
YXRpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVj
aXNpb24pICk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsK
ICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJu
IHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5cmVk
dWNlOgogICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1
bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCiAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA3NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIo
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBl
IGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVu
dCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5wYXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDc5OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3Ig
ZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1
bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQg
YXMgd2VsbC4uLgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDgwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSld
LmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1w
b3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBv
cmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0p
LnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDkwOgpAQCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
IFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkpIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9
PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
IApAQCAtMzQyOCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSld
LmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDk0OgpAQCAtMzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDE5
ICszNDUzLDE5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRl
ZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJy
YXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQsNyAr
MzUyNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICszNTM3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0
SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBA
IC0zNjI2LDcgKzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVjZToK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0
LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNz
IGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAg
ICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wg
fHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0zNjgw
LDcgKzM2MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFB
dHRyaWJ1dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5n
SW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZh
cmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1
bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEw
OToKQEAgLTM3MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1
bTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEx
NzoKQEAgLTM3OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE5
OgpAQCAtMzgxMSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5cmVk
dWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICszNzUw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBAIC0z
ODM4LDcgKzM3NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyMzoKQEAgLTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMsNyAr
MzgwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoKQEAg
LTM4OTIsNyArMzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEyOToKQEAgLTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4NDMs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSg0LCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMjoK
QEAgLTM5MzEsNyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEsMzMg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0
ZXJuYWxPRVMsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1
bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAtMzk4
OSwxMiArMzkxMCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24o
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJp
bmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1
Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNw
WygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24o
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsgaWYg
KGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7
IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywxNCAr
Mzk0OCwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
TGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+
cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00MDg3
LDcgKzQwMDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
bmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyArNDA1
Miw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXpl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9CisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAgIHsg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAw
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcgKzQy
MDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVj
dGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyArNDIx
Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpAQCAt
NDI5OSw3ICs0MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTgwOgpAQCAtNDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0g
KDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJt
LmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgy
OgpAQCAtNDM1NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1do
aWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5
dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgp
LmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3Is
ICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwg
cmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAo
eXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTA6CkBAIC00NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dl
ZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0LDEw
ICs0MzY1LDEwIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlv
biBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTQ6CkBAIC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNW
YWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24g
cmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVl
Um9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4
dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDUx
Nyw3ICs0NDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09
ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtl
IGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
IHsKQEAgLTQ1NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFt
ZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAg
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAgICAg
ICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6
ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlz
IGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUo
Y29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQ
cmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRl
eHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkt
PmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAK
LS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAg
ICB9CkBAIC00NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFs
OwogCi0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0
ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUg
d2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAg
Ki8KQEAgLTQ2ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9
PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3IEBA
IHl5ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29r
LWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAg
dG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAgeXll
cnJsYWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAg
aWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFs
OwogCiAKQEAgLTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsK
ICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlv
dmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxhYjoK
ICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0g
WVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj
dGlvbiB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQg
KzEsMjIgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tl
bGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAg
Q29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAg
IAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAK
ICAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29u
LiAgKi8KIAorCiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUg
WVlUT0tFTlRZUEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAog
ICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2Rl
ZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNk
ZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBB
VFRSSUJVVEUgMjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAy
NjUKLSNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5l
IEJSRUFLIDI2OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5l
IEVMU0UgMjcxCi0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NB
UkQgMjc0Ci0jZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJW
RUMzIDI3NwotI2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElW
RUMzIDI4MAotI2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVD
MyAyODMKLSNkZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFU
UklYMyAyODYKLSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZp
bmUgT1VUX1FVQUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0g
MjkxCi0jZGVmaW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9J
RF9UWVBFIDI5NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2Rl
ZmluZSBTQU1QTEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0j
ZGVmaW5lIFNBTVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5l
IFRZUEVfTkFNRSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09O
U1RBTlQgMzAzCi0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNU
SU9OIDMwNQotI2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZp
bmUgSU5DX09QIDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2Rl
ZmluZSBHRV9PUCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2Rl
ZmluZSBBTkRfT1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0j
ZGVmaW5lIE1VTF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFE
RF9BU1NJR04gMzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdO
IDMyMQotI2RlZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0j
ZGVmaW5lIFhPUl9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VC
X0FTU0lHTiAzMjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4g
MzI4Ci0jZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAK
LSNkZWZpbmUgTEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5l
IERPVCAzMzMKLSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBF
UVVBTCAzMzYKLSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmlu
ZSBEQVNIIDMzOQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUg
U1RBUiAzNDIKLSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5l
IExFRlRfQU5HTEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNB
TF9CQVIgMzQ3Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVm
aW5lIFFVRVNUSU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZp
bmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwog
ICAgIHN0cnVjdCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpA
QCAtMjY1LDE0ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBU
VHlwZUxpc3QqIHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGlu
ZSAxNTI5IG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5o
CmluZGV4IDU0NDE1NTcuLmFmNzhmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQzMywxNSArNDMzLDE1IEBAIHBy
b3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNl
OwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci10eXBlZGVmIFRNYXA8VFN0
cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8gTm9kZXMgdGhhdCBvcGVyYXRl
IG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCiAvLwogY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewogcHVibGljOgotICAgIFRJbnRl
cm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFs
c2UpLCBwcmFnbWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxz
ZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0
b3IobyksIHByYWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAg
ICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxz
ZSksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRl
cm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRl
ZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQogCiAgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwpAQCAtNDUy
LDE0ICs0NTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25z
dCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVm
aW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZp
bmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0K
ICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNl
dERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1
cm4gZGVidWc7IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpOwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25z
dCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQgc2V0RW5kTGluZShUU291cmNl
TG9jIGxpbmUpIHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291cmNlTG9jIGdldEVuZExpbmUo
KSBjb25zdCB7IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRh
YmxlICpwcmFnbWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExpbmU7CiAKICAgICAvLyBJZiBz
ZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVt
dWxhdGVkIG9uZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RW
aXNpdChwb3N0VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAog
ICAgICAgICAgICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkg
e307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IHt9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Np
bmNsdWRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRl
LmgKaW5kZXggOWY5MzkzYS4uOWIzYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaApAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVk
KF9fc3VuKSB8fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fR05VX18pIHx8IGRlZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQo
X19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAj
ZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBh
MTdjMzE5Li4zOTE1OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAj
aW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBz
dHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRh
YmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsg
TlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBB
dG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChB
dG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0
MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3Qg
Y2hhciAqcykKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewog
ICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwot
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAor
ICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNo
PSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50
cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3
aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lv
bltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNp
b25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3Ry
KTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRv
bVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3Ig
KGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYo
c3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFt
YXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wi
IiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRh
YmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50
cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAi
ICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAg
Q1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEu
LjhhMTA3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAj
aWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHBy
YWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVP
RgogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVu
ZCB3aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVt
b3J5QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47
CiAJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGlu
dCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsK
IAlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKIAkKK2ZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5D
b3VudDsgKytpKSB7CiAJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2
IEBAIGludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3Io
eXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJz
aW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5z
aW9uKHl5bHZhbHBwKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZv
aWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFj
cm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9u
ID0gezB9OworICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5
bWJvbCA9IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBw
IHZhbCA9IHswfTsKKyAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAw
fTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9
IDA7CiAKICAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29s
KTsKICAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUs
ICIlZCIsIHZhbHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQ
UF9JTlRDT05TVEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IG5hbWUpOwogICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwg
TUFDUk9fUyk7CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0
b20gPT0gX19MSU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5l
TnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
TUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAg
VW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQogICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxw
cC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4u
ODAyZTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBT
aC5JbmZvLkxvCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9n
Lgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNh
ZGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBf
X01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0
eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5
UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWdu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5f
dHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVk
IHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0g
IkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0
d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5m
aW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRl
eHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91
dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxl
eGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhl
cigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBz
byB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGlu
IHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9r
ZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAh
PSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1
dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRw
dXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2Uu
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVz
ZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNy
byhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3Rvciog
cGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3Jv
KHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0Rl
ZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9y
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBt
YWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5k
ZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRl
cmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jv
cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBz
dGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBt
TWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQg
Q29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBt
TWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0g
ICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsK
LSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElO
VF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVj
dG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAg
IG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBD
b250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQot
ICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7
IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2Vu
VmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1h
Y3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBw
cDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAg
IGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBp
c01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBk
ZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0g
ICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgot
ICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9T
ZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRp
YWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9E
TyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50
KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6
OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwg
RVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5J
TkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7
CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc1YTljCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaApAQCAtMCwwICsxLDgyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGlu
ZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJs
ZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25v
c3RpY3MKK3sKKyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVS
Uk9SLAorICAgICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAg
ICBFUlJPUl9CRUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9N
RU1PUlksCisgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJF
UiwKKyAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJP
LAorICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgRU9GX0lOX0RJUkVDVElWRSwKKyAg
ICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgRElSRUNUSVZFX0lOVkFMSURfTkFNRSwK
KyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVERUZJTkVELAor
ICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgTUFDUk9fUFJFREVG
SU5FRF9VTkRFRklORUQsCisgICAgICAgIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAor
ICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIE1BQ1JPX1RPT19NQU5ZX0FSR1Ms
CisgICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAorICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElP
TkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVELAor
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lP
Tl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZFLAorICAgICAg
ICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fRElSRUNU
SVZFLAorICAgICAgICBJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0ZJTEVf
TlVNQkVSLAorICAgICAgICBJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICBFUlJPUl9F
TkQsCisKKyAgICAgICAgV0FSTklOR19CRUdJTiwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgVU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgV0FSTklO
R19FTkQKKyAgICB9OworCisgICAgdmlydHVhbCB+RGlhZ25vc3RpY3MoKTsKKworICAgIHZvaWQg
cmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgdGV4dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFNldmVyaXR5IHNldmVyaXR5KElEIGlkKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUyMWEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3Bw
CkBAIC0wLDAgKzEsOCBAQAorLyoKKyBUaGlzIGZpbGUgaXMgYW4gYWxpYXMgZm9yIERpYWdub3N0
aWNzLmNwcCwgdXNlZCBmb3IgZ2VuZXJhdGluZworIGFuIG9iamVjdCBmaWxlIHdpdGggdGhlIG5h
bWUgRGlhZ25vc3RpY0Jhc2UubyBpbnN0ZWFkIG9mIERpYWdub3N0aWMuby4KKyBCZWNhdXNlIHRo
ZXJlIGFyZSBtdWx0aXBsZSBEaWFnbm9zdGljcy5jcHAgZmlsZXMgaW4gQU5HTEUgaW4gZGlmZmVy
ZW50CisgZm9sZGVycywgcGxhdGZvcm1zIHRoYXQgcHV0IG9iamVjdCBmaWxlcyBpbiB0aGUgc2Ft
ZSBmb2xkZXIgKGUuZy4gUVQpLAorIHNob3VsZCBpbmNsdWRlIHRoaXMgZmlsZSB0byBhdm9pZCBh
IG5hbWluZyBjb25mbGljdC4KKyovCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuY3BwIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTkxZTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJE
aXJlY3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitEaXJlY3RpdmVIYW5kbGVy
Ojp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1l
c3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZv
ciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0
byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8gcHJlcHJvY2Vzc29yIGRpcmVj
dGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCisvLyBoYW5kbGluZyB0
aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXIKK3sK
KyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7CisKKyAgICAv
LyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQorICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBi
ZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVy
c2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFu
ZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmYwNjE2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAKQEAgLTAsMCArMSw5IEBACisvKgorIFRoaXMgZmlsZSBpcyBhbiBhbGlhcyBmb3Ig
RGlyZWN0aXZlSGFuZGxlci5jcHAsIHVzZWQgZm9yIGdlbmVyYXRpbmcKKyBhbiBvYmplY3QgZmls
ZSB3aXRoIHRoZSBuYW1lIERpcmVjdGl2ZUhhbmRsZXJCYXNlLm8gaW5zdGVhZCBvZiAKKyBEaXJl
Y3RpdmVIYW5kbGVyLm8uCisgQmVjYXVzZSB0aGVyZSBhcmUgbXVsdGlwbGUgRGlhZ25vc3RpY3Mu
Y3BwIGZpbGVzIGluIEFOR0xFIGluIGRpZmZlcmVudAorIGZvbGRlcnMsIHBsYXRmb3JtcyB0aGF0
IHB1dCBvYmplY3QgZmlsZXMgaW4gdGhlIHNhbWUgZm9sZGVyIChlLmcuIFFUKSwKKyBzaG91bGQg
aW5jbHVkZSB0aGlzIGZpbGUgdG8gYXZvaWQgYSBuYW1pbmcgY29uZmxpY3QuCisqLworI2luY2x1
ZGUgIkRpcmVjdGl2ZUhhbmRsZXIuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1
YTkwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKQEAgLTAsMCArMSw4OTkg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisKKyNpbmNs
dWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKwor
I2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgor
I2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgi
CisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNl
IHsKK2VudW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJUkVD
VElWRV9ERUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwKKyAg
ICBESVJFQ1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJVkVf
RUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAgRElS
RUNUSVZFX0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VYVEVO
U0lPTiwKKyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsKK30g
IC8vIG5hbWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29uc3Qg
cHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVj
dGl2ZURlZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVVbmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVj
dGl2ZUlmKCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZk
ZWYoImlmZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5k
ZWYoImlmbmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxz
ZSgiZWxzZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxpZigi
ZWxpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVu
ZGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigiZXJy
b3IiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJh
Z21hIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24o
ImV4dGVuc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVy
c2lvbigidmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
TGluZSgibGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJ
RklFUikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0RFRklO
RTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKQorICAgICAg
ICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlSWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElW
RV9JRkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmbmRlZikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKQorICAgICAgICByZXR1
cm4gRElSRUNUSVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJRjsKKyAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X0VSUk9SOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlUHJhZ21hKQor
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FWFRF
TlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9uKQor
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0xJTkU7CisK
KyAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0YXRpYyBib29sIGlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUpCit7CisgICAgc3dpdGNoIChkaXJl
Y3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICBjYXNlIERJUkVD
VElWRV9JRkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgIGNhc2UgRElS
RUNUSVZFX0VMU0U6CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgY2FzZSBESVJF
Q1RJVkVfRU5ESUY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0b2tl
biByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0aWMgYm9vbCBpc0VPRChjb25zdCBw
cDo6VG9rZW4qIHRva2VuKQoreworICAgIHJldHVybiAodG9rZW4tPnR5cGUgPT0gJ1xuJykgfHwg
KHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBV
bnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHdoaWxl
KCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBsZXhlci0+bGV4KHRva2VuKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQu
CisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6TWFjcm9TZXQmIG1hY3JvU2V0KQor
eworICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hY3JvU2V0LmZpbmQo
bmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVyLT5zZWNvbmQu
cHJlZGVmaW5lZCA6IGZhbHNlOworfQorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGVmaW5l
ZFBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGVmaW5lZFBhcnNlcihM
ZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb1NldCogbWFjcm9TZXQs
CisgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICAgICAg
bUxleGVyKGxleGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICAgICAgbURp
YWdub3N0aWNzKGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7CisKKyAgICAgICAgbUxleGVyLT5s
ZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgIT0ga0RlZmlu
ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJlbiA9IGZhbHNlOwor
ICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSAn
KCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIG1M
ZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9T
ZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhwcmVzc2lvbiA9
IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIwIjsKKworICAgICAgICBpZiAocGFy
ZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAg
ICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAgICAgLy8gQ29u
dmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgorICAgICAgICB0
b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT52YWx1ZSA9IGV4
cHJlc3Npb247CisgICAgfQorCisgIHByaXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBj
b25zdCBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7
Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2Vu
aXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1Nl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9z
dGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIq
IGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciksCisgICAgbU1h
Y3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpLAorICAgIG1E
aXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAgICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUodG9rZW4pOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sg
PSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlwZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3
aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0gJ1xuJykpOworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJsb2NrL2dyb3Vw
LAorICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KKyAgICBpZiAo
c2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2ZShkaXJlY3RpdmUpKQorICAgIHsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHN3aXRjaChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJF
Q1RJVkVfTk9ORToKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJ
UkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6
CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJz
ZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5E
RUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tl
bik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAg
IHBhcnNlRW5kaWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VSUk9SOgorICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERJUkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBh
cnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwor
ICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tl
bikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVGSU5F
KTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnZhbHVlLCAqbU1hY3JvU2V0KSkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19Q
UkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlw
ZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOworCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYm
ICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1s
aWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3Jv
OjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1
c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9r
ZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywnKTsK
KworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAn
KScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHRva2Vu
IGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1lbnQKKyAgICAg
ICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dzIHVzIHRvIHJldXNlIFRva2VuOjpl
cXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jvcy4KKyAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1
c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0K
KyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgLy8g
V2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50IGxpc3QgaXMgbm90IGNvbnNpZGVy
ZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3IgZWl0aGVyIGZv
cm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5mcm9udCgpLnNldEhhc0xl
YWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVm
aW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+
ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFt
YWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNl
cnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgIGlmIChpdGVyICE9
IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRl
ZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYWNyb1NldC0+ZXJhc2UoaXRl
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKTsKKyAgICBwYXJzZUNvbmRp
dGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihU
b2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNU
SVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpOworICAgIHBhcnNlQ29uZGl0
aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9r
ZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElW
RV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0Vf
V0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sg
PSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAg
ICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUu
CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZURVJf
RUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxvY2suZm91bmRFbHNlR3JvdXAgPSB0cnVlOwor
ICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFsaWRHcm91cDsKKyAgICBibG9jay5m
b3VuZFZhbGlkR3JvdXAgPSB0cnVlOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgZXh0cmEg
dG9rZW5zIGFmdGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYg
KCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNr
LmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25k
aXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAo
YmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qg
c2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3Jv
dXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZv
dW5kVmFsaWRHcm91cCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCBwYXJzZSB0aGUgZXhwcmVz
c2lvbi4KKyAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEgZGlhZ25vc3Rp
Yy4KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsKKyAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBl
eHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgIGJsb2NrLnNraXBHcm91
cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNz
aW9uICE9IDA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0
b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRU5E
SUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lU
SE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3RhY2sucG9wX2JhY2so
KTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjZW5kaWYuCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VS
Uk9SKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47Cisg
ICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5k
bGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8v
IFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAgIGVudW0gU3RhdGUK
KyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BBUkVOLAorICAgICAg
ICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsKKworICAgIGJvb2wg
dmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOworICAgIGludCBzdGF0
ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGls
ZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkp
CisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnZhbHVlOworICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFsdWUg
PSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlw
ZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFJJR0hUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5
cGUgPT0gJyknKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICB2YWxpZCA9IHZhbGlk
ICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAvLyBFbXB0eSBwcmFnbWEuCisgICAg
ICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRfUEFSRU4pIHx8ICAgICAgLy8gV2l0aG91
dCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRfUEFSRU4gKyAx
KSk7ICAvLyBXaXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQpCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVt
cHR5IHByYWdtYS4KKyAgICB7CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVQcmFn
bWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FWFRFTlNJT04pOworCisgICAgZW51bSBT
dGF0ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBF
WFRfQkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpz
dHJpbmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFt
ZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09M
T046CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklP
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZh
bGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYg
KHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQor
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlv
biwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJz
aW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBWRVJT
SU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVy
c2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUr
KykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJz
aW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBW
RVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFu
ZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0YXRl
CisgICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAgICB9
OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsK
KyAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9F
eHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9F
eHBhbmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBsaW5lID0g
YXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlm
ICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB9CisK
KyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0gRklM
RV9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPnNl
dExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJFUiArIDEp
IG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29sIERpcmVj
dGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBi
bG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2suc2tpcEJs
b2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
Q29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9jayBibG9j
azsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVlOworICAgIGJsb2NrLmxvY2F0aW9uID0g
dG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYgKHNraXBwaW5nKCkpCisgICAgeworICAgICAgICAv
LyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdy
b3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3
aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBwYXJz
ZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVtaXQg
YSBkaWFnbm9zdGljLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwor
ICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisK
KyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICAgICAgZXhw
cmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJz
ZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAwOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibG9jay5za2lwR3JvdXAgPSBleHByZXNz
aW9uID09IDA7CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0g
MDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30KKwor
aW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQorewor
ICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8CisgICAg
ICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKSk7CisKKyAgICBE
ZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25v
c3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNlciwg
bU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lv
blBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKworICAgIGludCBleHByZXNz
aW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lvblBh
cnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBh
cmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgorICAgIGlmICghaXNFT0QodG9rZW4pKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworaW50IERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAg
IGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpIHx8CisgICAg
ICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpKTsKKworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBp
bnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAwOworCisgICAg
Ly8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZmRlZiBleHByZXNzaW9uLgorICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNWEwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuaApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCisjaW5jbHVkZSAiTGV4ZXIuaCIK
KyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCisjaW5jbHVkZSAiU291
cmNlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOwor
Y2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xhc3MgRGlyZWN0
aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJlY3RpdmVQYXJz
ZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBt
YWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAor
ICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsK
KworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAg
IFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOworCisgICAgdm9p
ZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVs
c2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOworICAg
IHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFcnJvcihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZlcnNpb24oVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOworCisgICAgYm9v
bCBza2lwcGluZygpIGNvbnN0OworICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0
b2tlbik7CisgICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7CisgICAgaW50
IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7CisKKyAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxCbG9jaworICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKKyAgICAgICAgU291
cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIGJvb2wgc2tpcEJsb2NrOworICAgICAgICBi
b29sIHNraXBHcm91cDsKKyAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7CisgICAgICAgIGJv
b2wgZm91bmRFbHNlR3JvdXA7CisKKyAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKKyAgICAg
ICAgICAgIHNraXBCbG9jayhmYWxzZSksCisgICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAor
ICAgICAgICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kRWxz
ZUdyb3VwKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAgIHN0ZDo6dmVj
dG9yPENvbmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOworICAgIFRva2VuaXplciog
bVRva2VuaXplcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBt
RGlhZ25vc3RpY3M7CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Cit9
OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0RJUkVDVElWRV9QQVJTRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmMz
NzFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTAsMCArMSwxOTI4
IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLworCisv
KiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBp
biBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYs
IDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw
Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBv
ciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdv
cmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBp
c24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3Ig
YSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0
ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIg
c2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAg
IHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhl
IHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhj
ZXB0aW9uLgorICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICov
CisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxs
bWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMi
IHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2lu
IHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFj
ZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMg
dGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVy
ZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRv
CisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklO
RlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5
IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9u
LiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKKworLyogU2tlbGV0b24gbmFt
ZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQdXJlIHBhcnNl
cnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmlu
ZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCisv
KiBVc2luZyBsb2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJz
dGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBh
cnNlICAgICAgICAgcHBwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBsZXgKKyNkZWZp
bmUgeXllcnJvciAgICAgICAgIHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHBwbHZh
bAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgcHBjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAg
ICBwcGRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICBwcG5lcnJzCisKKworLyogQ29weSB0
aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0
aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhw
cmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGli
PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1
ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIp
Cit0eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNl
bHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5k
aWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZ
U1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAg
ICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7Cisg
ICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3Bh
Y2UKKworCitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0
KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVh
c29uKTsKKworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMg
ZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVz
c2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJP
U0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9W
RVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lm
bmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisK
Ky8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQ
RQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdE
QiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51
bSB5eXRva2VudHlwZSB7CisgICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1BfT1IgPSAyNTks
CisgICAgIE9QX0FORCA9IDI2MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9QX0VRID0gMjYy
LAorICAgICBPUF9HRSA9IDI2MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9QX1JJR0hUID0g
MjY1LAorICAgICBPUF9MRUZUID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAgfTsKKyNlbmRp
ZgorCisKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RF
Q0xBUkVECit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFM
IDEKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRo
ZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworLyog
Q29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKworI2lm
ZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAor
dHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWdu
ZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBl
ZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNl
Cit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBF
X1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYg
WVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQor
dHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpF
X1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBF
X18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBl
bGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlT
SVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFY
SU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJM
RV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGli
aW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZ
Xyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBl
bmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgor
I2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmci
IEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5l
IFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5
ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2Fy
bmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVm
aW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAor
WVlJRCAoeXlpKQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNl
bmRpZgorCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8q
IFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2Fy
eSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RB
Q0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19J
TkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Mg
X19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9j
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9j
YSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMg
ICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgX1NURExJ
Ql9ICisjICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgor
IyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAg
IC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUg
WVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisj
ICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJh
bnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAg
ICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdl
IGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5
Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEg
ZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYg
Ki8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisj
ICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMg
IGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9I
IFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAor
CSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUg
PHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVm
IF9TVERMSUJfSAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgorIyAgZW5kaWYK
KyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAh
IGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRl
ZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAm
JiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVmaW5lZCB5
eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVkIHl5b3Zl
cmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRlZmluZWQg
WVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUg
dGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9u
IHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19h
bGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBh
bGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJ
TVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJy
YXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVs
ZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNp
emVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFD
S19HQVBfTUFYSU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4g
IFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlm
bmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAg
ZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkg
KFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZp
bmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAor
CSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5
aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAg
IHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNL
IGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFy
aWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVy
IG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxv
Y2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxp
Z25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RB
Q0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisg
ICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAo
Jnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRy
LT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2Yg
KCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAv
IHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJ
RCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVy
bWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlMQVNUIC0tIExh
c3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQorCisvKiBZWU5U
T0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgMjcK
Ky8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRT
ICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5SVUxF
UyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5T
VEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVy
IGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVm
aW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisg
ICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDog
WVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1i
ZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgICAyLCAgICAg
MiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYsICAgIDE5LCAg
ICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAg
ICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRo
ZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAs
ICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIzLCAgICAyNywK
KyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAgIDU1LCAgICA1
OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIsICAgIDg1LCAg
ICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0
aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Cit7
CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAgICAtMSwgICAg
MjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAgIDI5LCAgICAt
MSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMiwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxNSwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxOCwg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDIxLCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE5
LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwgICAgMjksICAg
IC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAtMSwgICAgMjUs
ICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGlu
ZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4NywgICAgOTQs
ICAgIDk1LCAgICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAgIDExMywgICAx
MTYsICAgMTE5LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAgMTM3LCAgIDE0
MCwKKyAgICAgMTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgsICAgMTgxCit9
OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RB
QkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wg
U1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZ
WU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0
bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJDT05TVF9JTlQi
LCAiT1BfT1IiLCAiT1BfQU5EIiwgIid8JyIsCisgICInXiciLCAiJyYnIiwgIk9QX05FIiwgIk9Q
X0VRIiwgIic8JyIsICInPiciLCAiT1BfR0UiLCAiT1BfTEUiLAorICAiT1BfUklHSFQiLCAiT1Bf
TEVGVCIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlVOQVJZIiwgIichJyIs
CisgICInficiLCAiJygnIiwgIicpJyIsICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24i
LCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVN
XSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlM
RVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQorewor
ICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0
LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAyNjQsICAg
MjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywgICAyNjcs
ICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIxW1lZTl0g
LS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2lu
ZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OworCisvKiBZ
WURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3Rh
dGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBl
bHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAg
MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1
LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAg
ICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAg
ICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1O
VU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAg
ICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBp
biBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisj
ZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3Rb
XSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAgIDI3LCAg
IC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYs
CisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDExNiwgICAx
MzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgIC0xMCwg
ICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTExCit9Owor
CisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRBQkxFW1lZ
UEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAg
IHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVs
ZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlE
RUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZp
bmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9
Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisg
ICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMgorfTsK
Kworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAg
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAgICAgIDI0
LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcsICAgICA4
LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5LAorICAg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9TW1NUQVRF
LU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJv
bCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0
b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5Cit9
OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJp
bgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVP
RgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisK
Ky8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFu
aW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBs
YW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFy
cyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQK
KyAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0
IG91dCBpcworICAgZGlzY3Vzc2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJs
YWIKKyNpZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2Fy
bmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5
IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMg
ZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAg
IFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUu
ICAqLworI2VuZGlmCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQor
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
VElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lT
X1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAg
ICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9s
aW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9j
KS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUs
IExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGlu
ZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9Q
QVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UK
KyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVu
YWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVm
IFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJ
XAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitk
byB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJ
CSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBj
b250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAg
IH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9p
ZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29u
dGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7
CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlm
ZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91
dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlv
dXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0
OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5
cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAg
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisK
KyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29u
dGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9N
IHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50
ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vsc2UKK3N0
YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5dHlwZV9p
bnQxNiAqeXlib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgoreworICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0
b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZWUZQUklOVEYg
KHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9w
KQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3Rh
Y2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBS
ZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2Vf
cHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQp
CisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7
CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklO
VEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJ
ICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQu
ICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAm
KHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4
dCk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmlu
ZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJ
CVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAorfSB3aGls
ZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBp
cyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29l
eGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZ
WURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFs
dWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRl
ZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8q
IFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8K
KyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisK
Ky8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVm
ZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBp
cyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1
bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tf
QllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24g
aW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZ
WU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlFUlJPUl9WRVJCT1NFCisKKyMg
aWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJ
TkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUg
bGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyNl
bHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFyICp5
eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5
c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOworfQor
IyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgX19H
TElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBk
ZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwg
cmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURF
U1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vs
c2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5
ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5eWQgPSB5
eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsrID0g
Knl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOworfQor
IyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZUkVT
IHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQor
ICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVy
cm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vz
c2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21t
YSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZ
U1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBub3Qg
Y29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0CisgICB3
b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIgKnl5
cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAgewor
ICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwor
CisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgor
CSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAn
XFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBf
cXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYg
KHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJl
YWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9
ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1b3Rlczog
OworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsK
KworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMgZW5kaWYK
KworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhw
ZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBu
dWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKKyAgIGNvcHkgYW55dGhpbmc7
IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQorICAgY29waWVk
LiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJy
b3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZs
b3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCitzdGF0aWMgWVlTSVpF
X1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNo
YXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgaWYgKCEgKFlZUEFDVF9O
SU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAg
eworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgWVlTSVpF
X1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgICAgIFlZU0la
RV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5eXNpemUxOworICAgICAgaW50
IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAwCisgICAgICAvKiBUaGlzIGlz
IHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCisJIGNv
bnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBl
Y3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBl
Y3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
LCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKKyMgZW5kaWYK
KyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAqeXlmOworICAgICAgc3RhdGlj
IGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
IjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3Rpbmcg
JXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7CisgICAgICBj
aGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAgICsgc2l6ZW9mIHl5ZXhwZWN0
aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQorCQkg
ICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXgg
PSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUg
dG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNLLiAgKi8KKyAgICAgIGludCB5
eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAgLyogU3RheSB3aXRoaW4gYm91
bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICBpbnQgeXljaGVja2xp
bSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZ
TlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICBpbnQgeXljb3VudCA9IDE7
CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOworICAgICAgeXlmbXQgPSB5eXN0
cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAgIGZvciAoeXl4ID0geXl4YmVn
aW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXgg
JiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZF
UkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3VudCA9IDE7CisJCXl5c2l6ZSA9
IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7CisJ
CWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsK
KwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKKwkg
ICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKwkgICAgeXlzaXplID0g
eXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKKwkgICAg
eXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOworICAg
ICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworICAgICAgeXlzaXplX292ZXJm
bG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisKKyAg
ICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0laRV9NQVhJTVVNOworCisgICAg
ICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5n
ZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQg
YmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAgIHByb2R1Y2VkIGEgc3RyaW5n
IHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJICBjaGFyICp5eXAgPSB5eXJl
c3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykK
KwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8
IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7
CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB5eXArKzsKKwkJICB5
eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAgICB9Cit9Cisj
ZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lh
dGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIg
Knl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkK
KyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAs
IGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZ
WVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIFlZ
VVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAg
IHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5
eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAg
ICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIFByZXZlbnQgd2FybmluZ3MgZnJv
bSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQg
KllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZWxzZSAv
KiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMKK2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCitpbnQgeXlw
YXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2Uu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFN
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNl
ICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJB
TSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQK
K3l5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0
KQorICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyogVGhlIGxvb2th
aGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9m
IHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisgICAgLyogTnVt
YmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKKworICAg
IGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVy
cm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8q
IFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBz
dGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAg
ICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cg
eXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisg
ICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklU
REVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3Nw
OworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5
dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNw
OworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVz
dWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRv
a2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQg
dG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rp
b24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUu
ICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7Cisg
IFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZp
bmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKworICAvKiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgorICAg
ICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCisgIGlu
dCB5eWxlbiA9IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9
IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3Rh
dHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEg
dG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4K
KyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAg
IHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4K
KyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworICB5
eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGlu
IHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdo
ZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZl
IGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3Rh
Y2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7
CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAg
LyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVt
ZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisj
aWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFs
bG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAm
J3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNU
WVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBF
YWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUK
KwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBi
ZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQg
dGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAq
LworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5
eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAo
Knl5dnNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9
IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlT
VEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAg
LyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBU
SCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3Np
emUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3Np
emUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19B
TExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdv
dG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7
CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRlZiBZWVNUQUNL
X1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7
CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5
eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0g
MTsKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8g
JWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAg
aWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisK
KyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsK
KworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIGdvdG8geXli
YWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8K
K3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1
cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25l
IGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVj
aWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8K
KyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAg
IGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9r
ZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhl
ciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3Rv
IHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAg
eworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVy
cmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKwor
ICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4g
b2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVy
cnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICBZWV9T
WU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisg
IC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOwor
CisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdvdG8geXluZXdz
dGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZv
ciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVm
YWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290
byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJl
ZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVj
ZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9u
emVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAk
JCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFM
IHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNv
bgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZB
TAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBh
bmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1
bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JF
RFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDI6
CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4o
KHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAh
PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxOToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJl
YW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05f
QllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMp
IC0gKDMpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKwor
ICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNw
WygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNf
c3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICEgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIzOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMjQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAtICh5
eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygy
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFs
LCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKyAgLyog
Tm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQg
c3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJh
Y2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4g
PSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5
eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNr
W3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAg
ZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKKworICBnb3Rv
IHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5
IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAo
IXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVS
Qk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxz
ZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRl
LCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5
eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlt
c2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAg
ICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJ
ICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1z
Z2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXlt
c2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3Rh
dGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNl
CisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworCSAg
ICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAg
ICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAg
eworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0
b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNo
YXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0
LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAg
ZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5
dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAg
fQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNo
aWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8Citg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2Vy
IGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxh
YiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBpZiAo
LypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJl
Y2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAg
ICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsK
KyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAg
Z290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUg
Zm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIx
OgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVu
dHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlz
dGF0ZV07CisgICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5biArPSBZWVRF
UlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9
PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBp
ZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
KyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAgeXlkZXN0cnVj
dCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCBjb250ZXh0
KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgICAg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5dnNwID0geXls
dmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BS
SU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRl
ID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6
CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoK
KyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmluZWQoeXlvdmVy
ZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0
aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29udGV4dCwgWVlf
KCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZhbGwgdGhyb3Vn
aC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKKyAg
ICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJIHl5dG9r
ZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBv
ZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZ
WUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29u
dGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cK
KyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgor
I2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFD
S19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICov
CisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KFlZU1RZ
UEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAg
IHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50
eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgICps
dmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOworICAgICAgICB0
eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FO
RDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5
cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBP
UF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOwor
ICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUg
PSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAg
Y2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7
IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAn
Kyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFr
OworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5
cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAg
ICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAn
KCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2Vu
IGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0
LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJy
b3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1l
c3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBs
ZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAg
ICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNl
cjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRl
eHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0
LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0
LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAg
c3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0
ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDkyZDA1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsx
LDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJ
T05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sK
KworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xh
c3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihM
ZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhl
cjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLnkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29y
IGV4cHJlc3Npb24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8g
UlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVw
cm9jZXNzb3IgZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5P
VCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0
by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lv
blBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2lu
Y2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxl
eGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBl
ZGVmIF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNlbHNlCisj
aW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8v
IF9NU0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6
OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKyV9
CisKKyVkZWZpbmUgYXBpLnB1cmUKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0Nv
bnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorCisleworc3Rh
dGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMg
dm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQor
CisldG9rZW4gQ09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5ECislbGVmdCAnfCcK
KyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxlZnQgJzwnICc+JyBP
UF9MRSBPUF9HRQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQg
JyonICcvJyAnJScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAgIDogZXhwcmVzc2lv
biB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oJDEpOwor
ICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lO
VAorICAgIHwgZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8
fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biAnJicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBl
eHByZXNzaW9uIE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
PT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4n
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiAnPCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJl
c3Npb24geworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAn
JScgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIg
PDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJ
VklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAg
WVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkg
eworICAgICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMg
VU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24g
JXByZWMgVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJl
c3Npb24gJXByZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygn
IGV4cHJlc3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2lu
dCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlw
ZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dp
dGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5U
OgorICAgICAgICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAw
KTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0
eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0g
T1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1Bf
UklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9M
RUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNh
c2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBi
cmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwn
OiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsK
KyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBl
ID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAg
IGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEn
OyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2Ug
JygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVh
azsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0
aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUg
IT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30K
Kwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sK
KyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJ
RF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29u
KTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBh
cnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhl
cihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4
cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAg
Q29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7
CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47
CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNv
bnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNh
c2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwg
IiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZh
bHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFM
X0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvSW5wdXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIK
IAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4K
IAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQp
LAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAg
bUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAot
ICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwg
bVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0
U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6
CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQo
bUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNz
ZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxl
bmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAw
ID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVh
ZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50
IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1J
bmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRo
ZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3Rh
cnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3
aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAg
ICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkK
LSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAg
aW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7Cisg
ICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNp
emUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0g
c2l6ZTsKKworICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQg
b2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0
aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBrU3RhdGVJbml0
aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSAn
Lyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAnLycuCi0gICAgICAg
ICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAg
ICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUg
PSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90IGEgY29tbWVu
dC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVMaW5lQ29tbWVu
dDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJ
bml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj
YXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiAocGVl
a0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldENoYXIo
KTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9ICcgJzsgIC8v
IFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgbVN0YXRl
ID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFyZSBuZXZlciBza2lw
cGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK21SZWFkTG9jLnNJ
bmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hhcigpCi17Ci0gICAg
aWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1tt
SW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8gU3dpdGNoIHRvIG5l
eHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgotICAgIGludCBsZW5n
dGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciByZWFkIGZyb20gZW1w
dHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYgKCgobGVuZ3RoIDwg
MCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVuZ3RoID4gMCkgJiYg
KG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLQotICAg
IHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAgICAvLyBTYXZlIHRo
ZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUluZGV4OwotICAgIGlu
dCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAgICAvLyBSZXN0b3Jl
IHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNpemUgPSBzaXplOwot
ICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRTdHJpbmcoKQotewot
ICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAwOwotICAgIGRvCi0g
ICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkgJiYgaXNTdHJpbmdF
bXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0eShpbnQgaW5kZXgp
Ci17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9
IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7
Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAmJiAoc3RyWzBdID09
ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGluZGV4KQotewotICAg
IEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGggPyBtTGVuZ3RoW2lu
ZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9I
XwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAotLy8gUmVhZHMgdGhl
IGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8gU3RyaXBzIGNvbW1l
bnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNsYXNzIElucHV0CiB7
CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hh
ciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBlbnVtIEVycm9y
Ci0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JVbmV4cGVjdGVkRU9G
Ci0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJvcjsgfQotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVk
LgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsK
KyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFy
KiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAg
IGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQog
Ci0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8gYnVmLgotICAgIC8v
IFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAgLy8gSXQgcmVwbGFj
ZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25seSBvbmUgc3RyaW5n
Ci0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBvcnR1bml0eSB0byB1
cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1bCBkaWFnbm9zdGlj
IG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIGlu
dCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgotICAgIGVudW0gU3Rh
dGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0ZUluaXRpYWwsCi0g
ICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9ja0NvbW1lbnQKLSAg
ICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAgICAgICBpbnQg
Y0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7Ci0gICAgaW50IHBl
ZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRoZSBuZXh0IG5vbi1l
bXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCBzdHJp
bmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmluZygpOwotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5LgotICAgIGJvb2wgaXNT
dHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBn
aXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGZvciBudWxsLXRl
cm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBpbmRleCk7CisgICAg
ICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9OworICAgIGNv
bnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KIAorICBw
cml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAgY29uc3QgY2hhciog
Y29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0gICAgLy8gQ3VycmVu
dCByZWFkIHBvc2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXggb2Ygc3RyaW5nIGN1
cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8gU2l6ZSBvZiBzdHJp
bmcgYWxyZWFkeSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKIAotICAg
IC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJvcjsKLSAgICBTdGF0
ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ug
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCkBAIC0wLDAgKzEs
MTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKworbmFtZXNwYWNlIHBw
Cit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVi
ODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVj
dCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkxleGVy
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9I
XworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5Ni4uYjJlMzA4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwxNyBAQAogCiAjaW5j
bHVkZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgInN0bF91
dGlscy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1NYWNybzo6
TWFjcm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAg
ICAgICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRva2VuVmVjdG9y
KiByZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1lKG5hbWUpLAot
ICAgICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1lbnRzKHJlcGxh
Y2VtZW50cykKLXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3JvOjplcXVhbHMoY29u
c3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsKLQotICAgIGlmICht
UGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFtZXRlcnMtPmJl
Z2luKCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVBh
cmFtZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAgewotICAgICAg
ICBzdGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNlbWVudHMtPmVu
ZCgpLCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwotICAgIH0KKyAg
ICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5hbWUgPT0gb3Ro
ZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykg
JiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwogfQog
CiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCmluZGV4IGUyNDMz
MDYuLjdlYzAxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDM4IEBACiAjaWZuZGVmIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVk
ZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJU
b2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVjdCBUb2tlbjsK
Kworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAgICB7CiAgICAg
ICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OworICAgIHR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gUmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmluZWQoZmFsc2Up
LCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wgZXF1YWxzKGNv
bnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9p
bnRlciBwYXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0
cmluZyogbmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAg
ICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9y
KiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBU
b2tlblZlY3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsg
fQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQot
ICAgIFR5cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9y
KiBtUGFyYW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29s
IHByZWRlZmluZWQ7CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAgVHlwZSB0eXBl
OworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAg
IFJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNl
bmRpZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3Rk
OjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40MTU0ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwz
NjkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4K
KworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNw
YWNlIHBwCit7CisKK2NsYXNzIFRva2VuTGV4ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyBwdWJsaWM6
CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gVG9rZW5WZWN0b3I7CisKKyAgICBUb2tl
bkxleGVyKFRva2VuVmVjdG9yKiB0b2tlbnMpCisgICAgeworICAgICAgICB0b2tlbnMtPnN3YXAo
bVRva2Vucyk7CisgICAgICAgIG1JdGVyID0gbVRva2Vucy5iZWdpbigpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgaWYgKG1JdGVy
ID09IG1Ub2tlbnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuLT5yZXNldCgp
OworICAgICAgICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6TEFTVDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICp0b2tlbiA9ICptSXRlcisrOworICAg
ICAgICB9CisgICAgfQorCisgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVG9rZW5MZXhlcik7CisKKyAgICBUb2tlblZlY3RvciBtVG9rZW5zOworICAgIFRva2VuVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBtSXRlcjsKK307CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhw
YW5kZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1Nl
dCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0
KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK01hY3JvRXhwYW5kZXI6
On5NYWNyb0V4cGFuZGVyKCkKK3sKKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkg
cG9wTWFjcm8oKTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpsZXgoVG9rZW4qIHRva2VuKQor
eworICAgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4odG9rZW4pOworCisg
ICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmICh0b2tlbi0+ZXhwYW5zaW9uRGlzYWJsZWQoKSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
bU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1NYWNy
b1NldC0+ZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25zdCBNYWNybyYg
bWFjcm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBhbmRl
ZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5zaW9u
RGlzYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVmdFBh
cmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlhdGVs
eSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAgICAvLyB0aGlz
IG1hY3JvIHNob3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9Cit9CisKK3Zv
aWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAgIGlmIChtUmVz
ZXJ2ZVRva2VuLmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9rZW47
CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisgICAgd2hpbGUg
KCFtQ29udGV4dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5KCkp
CisgICAgeworICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICghbUNvbnRleHRT
dGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5iYWNr
KCktPmdldCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29uc3Qg
VG9rZW4mIHRva2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7Cisg
ICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5pbmRleCA+
PSAwKTsKKyAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250ZXh0LT5pbmRl
eF0gPT0gdG9rZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQoIW1S
ZXNlcnZlVG9rZW4uZ2V0KCkpOworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tl
bih0b2tlbikpOworICAgIH0KK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxl
ZnRQYXJlbigpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKwor
ICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7CisgICAgdW5nZXRUb2tlbih0b2tl
bik7CisKKyAgICByZXR1cm4gbHBhcmVuOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OnB1c2hN
YWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKQoreworICAg
IGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOworICAgIGFzc2VydCghaWRlbnRpZmllci5leHBhbnNp
b25EaXNhYmxlZCgpKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci50eXBlID09IFRva2VuOjpJREVO
VElGSUVSKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9PSBtYWNyby5uYW1lKTsKKwor
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisgICAgaWYgKCFleHBhbmRNYWNy
byhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMg
cG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVlOworCisgICAg
TWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKKyAgICBjb250ZXh0LT5t
YWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVu
dHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKK3sKKyAgICBhc3NlcnQo
IW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBt
Q29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNrKCk7CisKKyAg
ICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5k
aXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7CisgICAgZGVs
ZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tl
biYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOwor
ICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKKyAgICB7CisgICAgICAgIHJl
cGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOworCisgICAgICAg
IGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOworICAgICAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKKworICAgICAgICAgICAgYXNzZXJ0
KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSBy
ZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAgICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGlu
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJl
YW07CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24ubGluZTsK
KyAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAg
ICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmlsZTsKKyAgICAgICAgICAgICAg
ICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtYWNyby50eXBlID09IE1hY3Jv
OjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJnczsKKyAgICAg
ICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFj
b2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCBy
ZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFj
ZW1lbnRzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFj
ZW1lbnRzLT5hdChpKTsKKyAgICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGluaGVyaXRzIHRo
ZSBwYWRkaW5nCisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRv
a2VuLgorICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFy
dE9mTGluZSgpKTsKKyAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZp
ZXIuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlcGwubG9jYXRpb24g
PSBpZGVudGlmaWVyLmxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYWNy
b0FyZz4qIGFyZ3MpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsK
KyAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOworCisgICAgYXJncy0+cHVzaF9iYWNrKE1h
Y3JvQXJnKCkpOworICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7
ICkKKyAgICB7CisgICAgICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2Vu
LnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50
aWZpZXIudmFsdWUpOworICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRva2VuLgorICAg
ICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4g
aXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4KKyAgICAgICAgc3dpdGNoICh0b2tlbi50
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICArK29wZW5Q
YXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIC0tb3BlblBhcmVuczsKKyAgICAgICAgICAg
IGlzQXJnID0gb3BlblBhcmVucyAhPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSAnLCc6CisgICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVudHMgYXJlIHNl
cGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAorICAgICAgICAgICAgLy8gdGhlIGNvbW1hIHRv
a2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAorICAgICAgICAg
ICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgorICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMgPT0g
MSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOworICAgICAgICAgICAgaXNBcmcgPSBvcGVu
UGFyZW5zICE9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzQXJnKQorICAgICAgICB7CisgICAgICAgICAgICBNYWNyb0FyZyYgYXJnID0g
YXJncy0+YmFjaygpOworICAgICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBw
YXJ0IG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgdG9rZW4u
c2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9r
ZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgTWFjcm86OlBhcmFtZXRlcnMmIHBh
cmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW1w
dHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCisgICAgaWYgKHBh
cmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgYXJncy0+Y2xlYXIoKTsKKyAgICB9CisgICAgLy8gVmFsaWRh
dGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJh
bXMuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0gYXJncy0+c2l6
ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPworICAgICAgICAgICAgRGlhZ25vc3RpY3M6
Ok1BQ1JPX1RPT19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9P
X01BTllfQVJHUzsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIu
bG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24u
CisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVm
b3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAg
TWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOworICAgICAgICBUb2tlbkxleGVyIGxleGVyKCZh
cmcpOworICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBt
RGlhZ25vc3RpY3MpOworCisgICAgICAgIGFyZy5jbGVhcigpOworICAgICAgICBleHBhbmRlci5s
ZXgoJnRva2VuKTsKKyAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46OkxBU1QpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAgICAgICAgICAg
ZXhwYW5kZXIubGV4KCZ0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3Jv
JiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNbaV07CisgICAg
ICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1pemUgdGhpcy4K
KyAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBl
dmVyeSB0aW1lLgorICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNhY2hlZCB3aXRo
IHRoZSByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAgTWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJz
LmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudmFsdWUpOworICAgICAgICBp
ZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBh
cmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7CisgICAgICAgIGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBh
cmdzW2lBcmddOworICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpUmVwbCA9IHJlcGxhY2Vt
ZW50cy0+c2l6ZSgpOworICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBsYWNlbWVudHMt
PmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKKyAgICAgICAgLy8gVGhlIHJlcGxhY2Vt
ZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCisgICAgICAgIC8vIG1h
Y3JvIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICByZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5z
ZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgfQorfQorCit9
ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDRlYmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5jbHVkZSA8bWVt
b3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xh
c3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyAgcHVibGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFj
cm9TZXQsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBh
bmRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisg
ICAgdm9pZCBnZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25z
dCBUb2tlbiYgdG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAg
IGJvb2wgcHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIpOworICAgIHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29s
IGNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1Bh
cmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNy
b0NvbnRleHQKKyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc2l6
ZV90IGluZGV4OworICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworCisg
ICAgICAgIE1hY3JvQ29udGV4dCgpIDogbWFjcm8oMCksIGluZGV4KDApIHsgfQorICAgICAgICBi
b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsg
fQorICAgICAgICBjb25zdCBUb2tlbiYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4
KytdOyB9CisgICAgICAgIHZvaWQgdW5nZXQoKSB7IC0taW5kZXg7IH0KKyAgICB9OworCisgICAg
TGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNz
KiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2Vu
OworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JP
X0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3Bw
CmluZGV4IGVmNDllNTcuLjIxOTAxZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmNwcApAQCAtNiw0NyArNiwxMDggQEAKIAogI2luY2x1ZGUgIlByZXByb2Nlc3Nv
ci5oIgogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8c3N0cmVhbT4KIAotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29u
dGV4dC5oIgotI2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgi
CisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNs
dWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tl
bml6ZXIuaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLVByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29y
KCkgOiBtQ29udGV4dChOVUxMKQorc3RydWN0IFByZXByb2Nlc3NvckltcGwKIHsKKyAgICBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9TZXQ7CisgICAgVG9rZW5p
emVyIHRva2VuaXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFyc2VyOworICAg
IE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXByb2Nlc3NvckltcGwoRGlh
Z25vc3RpY3MqIGRpYWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAorICAgICAgICB0
b2tlbml6ZXIoZGlhZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5pemVyLCAmbWFj
cm9TZXQsIGRpYWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBtYWNyb0V4cGFuZGVyKCZk
aXJlY3RpdmVQYXJzZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7CisgICAgfQorfTsKKworUHJl
cHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikK
K3sKKyAgICBtSW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNzLCBkaXJlY3Rp
dmVIYW5kbGVyKTsKIH0KIAogUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKIHsKLSAgICBk
ZWxldGUgbUNvbnRleHQ7CisgICAgZGVsZXRlIG1JbXBsOwogfQogCi1ib29sIFByZXByb2Nlc3Nv
cjo6aW5pdCgpCitib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKIHsKLSAgICBtQ29udGV4dCA9IG5ldyBDb250
ZXh0OwotICAgIHJldHVybiBtQ29udGV4dC0+aW5pdCgpOworICAgIHN0YXRpYyBjb25zdCBpbnQg
a0dMU0xWZXJzaW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0YW5kYXJkIHByZS1kZWZpbmVkIG1h
Y3Jvcy4KKyAgICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKKyAgICBwcmVkZWZpbmVN
YWNybygiX19GSUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19WRVJTSU9OX18iLCBr
R0xTTFZlcnNpb24pOworICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOworCisgICAgcmV0
dXJuIG1JbXBsLT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQogCi1i
b29sIFByZXByb2Nlc3Nvcjo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVN
YWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKChjb3VudCA+
PTApICYmIChzdHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8fCAoc3RyaW5n
ID09IE5VTEwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOworICAgIHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRv
a2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0
cigpOwogCi0gICAgcmVzZXQoKTsKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZp
bmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3Jv
Lm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOwog
Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgJm1U
b2tlbnMpOworICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFBy
ZXByb2Nlc3Nvcjo6cmVzZXQoKQordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4p
CiB7Ci0gICAgc3RkOjpmb3JfZWFjaChtVG9rZW5zLmJlZ2luKCksIG1Ub2tlbnMuZW5kKCksIERl
bGV0ZSgpKTsKLSAgICBtVG9rZW5zLmNsZWFyKCk7CisgICAgYm9vbCB2YWxpZFRva2VuID0gZmFs
c2U7CisgICAgd2hpbGUgKCF2YWxpZFRva2VuKQorICAgIHsKKyAgICAgICAgbUltcGwtPm1hY3Jv
RXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5nIGludGVybmFsIHBy
ZXByb2Nlc3NpbmcgdG9rZW5zLgorICAgICAgICAgIC8vIENvbnZlcnQgcHJlcHJvY2Vzc2luZyB0
b2tlbnMgdG8gY29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAorICAgICAgICAgIC8vIGRpYWdub3N0
aWNzLgorICAgICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6CisgICAgICAgICAgICBhc3NlcnQo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVN
QkVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OklOVkFMSURfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFs
aWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0K
IAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oCmluZGV4IDg4NWJiNzAuLjVmZTM1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oCkBAIC03LDM0ICs3LDQxIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9QUkVQUk9DRVNTT1JfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBS
T0NFU1NPUl9IXwogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJU
b2tlbi5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFz
cyBDb250ZXh0OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwor
c3RydWN0IFByZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47CiAKIGNsYXNzIFByZXByb2Nl
c3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7CisgICAgUHJlcHJvY2Vzc29y
KERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFu
ZGxlcik7CiAgICAgflByZXByb2Nlc3NvcigpOwogCi0gICAgYm9vbCBpbml0KCk7Ci0KLSAgICBi
b29sIHByb2Nlc3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bVRva2Vucy5iZWdpbigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtVG9rZW5zLmVuZCgpOyB9CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9m
IGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5n
OiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5n
dGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5n
dGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQu
CisgICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMg
dG8gYW4gYXJyYXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBv
ZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVt
ZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAg
ICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGlj
YXRlIHRoYXQgdGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29s
IGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKTsKKyAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCisgICAgdm9pZCBwcmVk
ZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOworCisgICAgdm9pZCBsZXgo
VG9rZW4qIHRva2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihQcmVwcm9jZXNzb3IpOwotCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi0g
ICAgdm9pZCByZXNldCgpOworICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9j
ZXNzb3IpOwogCi0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAgVG9rZW5WZWN0b3IgbVRva2Vu
czsgIC8vIE91dHB1dC4KKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAor
eworCitzdHJ1Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmls
ZSgwKSwgbGluZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmls
ZShmKSwgbGluZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxl
KSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBp
bnQgbGluZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRp
b24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVx
dWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMu
ZXF1YWxzKHJocyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAKaW5kZXggYTJlNzU5Yy4uOTYwMzgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcApAQCAtNiw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2
OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8
PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46Okxv
Y2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRv
a2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8
IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0g
MDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsK
IH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUs
IGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAg
IGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3Mp
ICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAg
ICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxv
Y2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxv
Y2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0
ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sK
KyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAg
IGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRv
a2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2Fi
bGUpCisgICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAg
ICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3
aXRjaCAodG9rZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAg
ICAgY2FzZSBGTE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAg
b3V0IDw8ICoodG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAg
IG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsK
IH0KLX0gIC8vIG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oCmluZGV4IDRmNWExMmIuLjUyMzEwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW4uaApAQCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
VE9LRU5fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNs
dWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgi
CiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1
YmxpYzoKLSAgICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5j
b2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVM
b2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5
cGUKKyAgICB7CisgICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3du
ZXJzaGlwIG9mIHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUs
IHN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIg
PSAyNTgsCiAKLSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlv
bjsgfQotICAgIGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBz
dGQ6OnN0cmluZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09O
U1RfSU5ULAorICAgICAgICBDT05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihUb2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVD
LAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisg
ICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9Q
X0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FT
U0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAg
ICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1Bf
TEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FT
U0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAogCi0g
ICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyog
bVZhbHVlOworICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgorICAgICAgICAv
LyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCisg
ICAgICAgIC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBm
b3IgdGhlbS4KKyAgICAgICAgUFBfSEFTSCwKKyAgICAgICAgUFBfTlVNQkVSLAorICAgICAgICBQ
UF9PVEhFUgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRf
T0ZfTElORSAgID0gMSA8PCAwLAorICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEs
CisgICAgICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgorICAgIH07CisKKyAgICBUb2tl
bigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9v
bCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2Fy
ZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25z
dCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBz
ZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2Uo
KSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAg
IHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgYm9vbCBleHBhbnNp
b25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkg
IT0gMDsgfQorICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKKwor
ICAgIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3VyY2VMb2NhdGlv
biBsb2NhdGlvbjsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgc3RkOjp2
ZWN0b3I8VG9rZW4qPiBUb2tlblZlY3RvcjsKLXR5cGVkZWYgVG9rZW5WZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIFRva2VuSXRlcmF0b3I7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2Vu
JiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tl
biYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQogCiBleHRlcm4gc3Rk
Ojpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9r
ZW4pOwogCiB9ICAvLyBuYW1lcHNhY2UgcHAKICNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmE4YmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuY3BwCkBAIC0wLDAgKzEsMjM0NSBAQAorI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwi
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9Ub2tlbml6ZXIu
Y3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2Fs
IHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNk
ZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJT
SU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJz
dCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBp
c3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXgg
aW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5l
IEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBz
eXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05f
XykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmlu
ZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5
b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLwor
I2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
MQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9p
bnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50
MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxz
ZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50
MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBD
OTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01J
TgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVm
IElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNl
bmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAo
LTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01B
WCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5l
IElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01B
WAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisj
aWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQor
I2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAg
ICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01B
WCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgRkxFWElO
VF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNs
YXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJ
LyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVm
aW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9D
T05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2Nw
bHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QK
KyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1v
Zi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBu
ZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIg
Zm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2
ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBj
aGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJ
KGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogQW4gb3BhcXVlIHBv
aW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8q
IEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVs
b3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUg
eXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXll
eHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmlu
ZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5
X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8g
cmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRp
c2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmlu
aXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAy
ICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0
aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3Rh
dGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CisgKiBjb21wYXRpYmlsaXR5LgorICov
CisjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKKyNkZWZpbmUgWVlT
VEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVu
IHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0Zf
QlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBw
cm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQo
eXlpbiAseXlzY2FubmVyICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisv
KiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQor
I2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0ZSBidWYgbXVz
dCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUg
bWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9T
SVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKK3R5cGVk
ZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2VuZGlmCisKKyNk
ZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklM
RSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1Nf
TElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQg
Y2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhu
KSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0
LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZ
X0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJ
WVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAor
CXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRf
cHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlm
CisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lu
cHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFy
ICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKwor
CS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9y
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJ
LyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGlu
ZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hl
dGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAor
CSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0
IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyog
V2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5k
CisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNl
IGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0
Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2lu
dGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBi
ZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUg
b24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRf
Ym9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAg
ICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyog
V2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhl
CisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9i
dWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZG
RVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGls
bCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZ
X0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFk
aW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwg
aGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICog
cG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBF
T0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSks
IHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2lu
dGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9F
T0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRF
ICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBp
biBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVz
IGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
PyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3Jv
LCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Cisg
KiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4K
KyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3Rh
Y2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5w
dXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JV
RkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAo
WVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBw
cHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQg
cHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQg
cHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVm
ZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3Qg
Y2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxs
b2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZv
aWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQg
KiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVh
dGVfYnVmZmVyCisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBc
CisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2Jv
bCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5l
IHBwd3JhcChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBZWV9DSEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5
dGV4dF9wdHIgeXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3Ry
eV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhh
cyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0g
c2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXln
LT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9i
cCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwK
Kwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKKyNk
ZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4g
dGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1
Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50
MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
ODRdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAz
NiwgICAzNCwgICAzNSwgICAzNSwgICAzMywKKyAgICAgICAgNywgICAzMywgICAzMywgICAzMywg
ICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAgOSwKKyAgICAgICAgOSwgICAzMywgICAz
MywgICAzMywgICAgOCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKKyAgICAgICAgNCwg
ICAzNCwgICAzNSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKKyAg
ICAgICAxMywgICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwg
ICAxMSwKKyAgICAgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAx
NSwgICAgOCwgICAzMSwKKyAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwg
ICAxMSwgICAxMCwgICAxMSwgICAgMSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAg
OSwgICAyOCwgICAyOSwgICAgMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAxMCwgICAgMAor
ICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAg
eyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDIsICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDUs
ICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCisgICAgICAgIDksICAg
MTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCisgICAg
ICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAg
MTgsCisgICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjIsICAgMjEsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCisgICAgICAgIDksICAgIDEsICAgIDksICAg
MjUsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAgICAyMiwgICAy
MSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
NCwKKyAgICAgICAyMywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAgIDAsCisgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsCisgICAgICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKKyAg
ICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1
OSwgIDE0NSwgIDEyOCwKKyAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwg
ICAyNSwgICAzMCwgICAyOSwgICAzNiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAg
MCwgICAxNiwgICA0NywgICAgMCwgIDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3MywgIDE1OSwg
IDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAgIDE1OSwgIDE1
OSwgICA2MSwgIDE1OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKKyAgICAg
ICA5NSwgICA2OCwgICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1
OSwKKyAgICAgIDE1OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwg
IDExMCwgICAgMCwKKyAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1
OSwgIDEwMSwgICA5NywgIDExMiwKKyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwg
IDE0NSwgIDE1MCwgIDE1MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgMjAsICAg
ODMsICAgODMsICAgODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAs
ICAgMjAsICAgNDcsCisgICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMs
ICAgODMsICAgNDMsICAgNDMsICAgNjcsICAgODcsCisgICAgICAgNDcsICAgNTAsICAgODMsICAg
NTEsICAgODgsICAgODMsICAgODMsICAgODMsICAgNjksICAgNzIsCisgICAgICAgODMsICAgODMs
ICAgIDAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKKyAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAz
MCwgICAyOSwgICAzMCwKKyAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwg
ICA0MSwgICA3NywgICA0NCwgICA0MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0
MywgICA0MywgICA0MywgICA0NiwgICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0OCwgICA0OSwg
ICA1NCwgICA1NSwgICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAgICA1MywgICA1
MywgICA1MywgICA1NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKKyAgICAg
ICA0OSwgICA0OSwgICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1
MCwKKyAgICAgICA1MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwg
ICA3MSwgICA3MSwKKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwKKworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUw
LCAgIDczLCAgIDczLCAgIDgzLCAgIDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDY3LCAg
IDY3LCAgIDY3LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAgIDc4LCAgIDc4
LCAgIDgzLCAgIDgzLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAorICAgICAg
IDM1LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgy
LAorICAgICAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAg
IDY0LCAgIDY0LAorICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1
LCAgIDgzLCAgICA1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9jaGtbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCisgICAg
ICAgMTMsICAgMTYsICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAg
MTYsCisgICAgICAgMjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTks
ICAgMjAsICAgNTQsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAg
MjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQs
ICAgMjcsICAgNzMsICAgNzMsICAgNzMsICAgMjEsCisgICAgICAgNDksICAgNDksICAgMjcsICAg
NDMsICAgMzIsICAgNDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCisgICAgICAgNTIsICAgNDMs
ICAgNDMsICAgNDMsICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCisgICAgICAg
NTIsICAgNTIsICAgNzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAs
CisKKyAgICAgICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwg
ICA3OSwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3
OCwgICA3OCwgICAyMywgICA2NywKKyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwg
ICA2OSwgICA2OSwgICA3MiwgICA3MiwgICAxNSwKKyAgICAgICAxMiwgICA3MiwgICA3MiwgICA3
MiwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKKyAgICAgICA4
NywgICAgNywgICA4NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAg
IH0gOworCisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisj
ZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9y
ZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAor
I2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXBy
b2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworI2luY2x1ZGUgIlRva2VuaXplci5oIgor
CisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVm
aW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0
YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlz
c2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0
eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5
eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUg
eXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAg
ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsg
XAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUo
MCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
cHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNj
YW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5w
dXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9j
LT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9j
LT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5
bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmlu
ZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEt
PmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUg
Q09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0
KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4g
Ki8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRv
dWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8q
IFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9u
LXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAg
c2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAq
LworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNr
LiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBh
cyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFy
czsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlf
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
CisKK2ludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRf
dGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIg
dGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgor
ICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNl
bHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNl
bmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgor
CisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAg
d2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlf
UkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBy
dWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyog
VGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNv
bnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8g
ZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5w
dXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwg
b3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZ
X0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlp
bnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYm
IFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiAp
IFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVm
W24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkg
XAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBc
CisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJ
CXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBm
ZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBc
CisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBc
CisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4p
OyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIg
cmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICog
d2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhh
dCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNo
YWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVy
bWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBi
eSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJU
X1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8q
IFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmlu
ZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisj
ZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3Rv
dHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAt
IGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICov
CisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGlu
dCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBF
ICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wg
aW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxU
WVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9E
RUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUs
IGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZu
ZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyog
Q29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJF
QUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NF
VFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3
aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0
YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2Jw
OworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAg
ICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisK
KwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRl
ZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+
eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICov
CisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCAp
CisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJ
CQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0
LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMg
dG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1
cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlf
Q0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
cyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5
eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJ
CXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkv
KiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJ
c3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJ
CQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZ
WV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJ
CXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
OworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVu
dCAqLworLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8K
Ky8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2Ug
MjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAz
OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKwor
CVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9T
RVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwp
OworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBv
bmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgor
ICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxp
bmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZ
WV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZ
X0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lU
fSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRl
Z2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVN
QkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30K
KwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZ
WV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFL
CitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2Fz
ZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9C
UkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5
eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6
CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9C
UkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRV
UAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAg
cmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQ
UF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNl
IFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3Qg
aW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVP
RiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsK
KyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAg
ICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdl
IGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisg
ICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJ
bmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhN
YXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87Cisg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAg
aWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5
eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAg
IH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9T
RVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJ
CS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICov
CisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55
eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRo
aXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g
c28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw
b3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lu
cHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBm
aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNp
bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1v
Zi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlu
cHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2Fz
IHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJ
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhl
IE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9w
cmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBv
ZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRv
IGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICov
CisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRl
ICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUg
TlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVs
c2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwor
CisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0
byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJ
CQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9
IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisK
KwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQor
CisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQor
CQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisK
KwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRl
ZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5h
bCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxl
eCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZm
ZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9C
X0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNj
YW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVu
ZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9w
dHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJ
aWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZs
ZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsg
LyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJ
CWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0g
MSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwg
c28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBF
T0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNo
ZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0Lgor
CQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBU
cnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8g
c3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJf
dG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BF
TkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byBy
ZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVs
c2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9f
cmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93
IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZm
ZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWlu
dCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5
X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWlu
dCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0g
MCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNl
CisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAq
KQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJl
YWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVy
ICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBp
dC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkK
KwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1
ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5
eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0K
KworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVh
ZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZ
X0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19t
b3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7CisKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90
b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9P
Rl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UK
KwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElO
RzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FO
OworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkg
PiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0
aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5
X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5
Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9u
X2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNo
YXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2
aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJ
eworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUko
Knl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJ
eworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFu
cyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAq
IHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0
ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwly
ZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRp
bmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9j
dXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwor
CQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9k
ZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJ
CQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQp
IHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVy
biB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19J
TlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5f
dCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFj
dGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUg
RU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVu
IHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlf
Y19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25f
Y2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2Nf
YnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQlp
bnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWct
Pnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBo
YXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11
bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAq
IHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQg
Zm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJ
CQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0Jf
QUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVz
LiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJP
VUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAo
IHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISB5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNp
ZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UK
KwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2Fz
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0g
Kih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hh
cidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwor
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9
CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0
Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlv
biB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0
X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlp
bixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZl
ci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90
b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVu
dGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsK
KwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBu
ZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsK
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3
aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkg
dGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2Fs
bGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkg
Ki8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2
b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWct
Pnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXln
LT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0
X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiog
QWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFt
IGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1
ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRl
X2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxs
b2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICgg
ISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3Jl
YXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hf
YnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVj
YXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgor
CSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAy
ICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5l
cik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJh
bSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYg
KCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBO
b3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIg
KQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJl
ZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0
aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBt
b3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBw
cmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVy
ICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
KworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2Fu
bmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0g
MTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVm
ZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhy
b3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3
YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9
IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAg
ICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwg
YnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBj
YWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFs
bHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
IGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJ
Yi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUg
ZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhh
dCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVm
X3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNo
ZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisg
KiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3Rh
Y2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0
ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBw
cHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ
cHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNv
cGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwor
CQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBP
bmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9z
d2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMg
YW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5l
eHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlw
cF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+
IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0
YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxl
YXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1
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
RVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5
Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOwor
CWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5
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
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQg
dG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitj
aGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0
ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5l
dmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBk
YXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFf
VFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJh
ID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4K
KyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBh
biBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZF
UiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRo
IG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVt
YmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBsaW5lX251
bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQg
cHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
KyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBTZXQgdGhl
IGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1
dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90b19idWZm
ZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAoRklMRSAq
ICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91dF9zdHIg
OworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJl
dHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9
CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisKK1lZU1RZ
UEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXls
dmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9CisKK1lZ
TFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFt
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Cit9
CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMgc3BlY2lh
bCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworICogdGhl
IE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFz
IHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0
aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLworCitpbnQg
cHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAocHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9n
bG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBp
biB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1l
bXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAg
ICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHBw
bGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwg
YnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0
aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50
ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChh
bmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhh
bmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4g
dGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KKyAqIHRo
ZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZ
UEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJf
ZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisJ
CisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1
Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5X2dsb2Jh
bHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBp
bgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisg
ICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsK
KyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMp
OworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsK
K30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRy
YW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9k
ZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5eWctPnl5
X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKyAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZfcCA9IChj
aGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0ID0gMDsK
KworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisKKy8qIERl
ZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsK
KyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAg
eXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5j
ZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogcHBs
ZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rlc3Ryb3kg
aXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLworaW50
IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogUG9wIHRo
ZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NV
UlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlz
Y2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBwcG9wX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2Vs
Zi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55
eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0
aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2Fu
bmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAgLyogUmVz
ZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2Fu
bmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6
YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CisK
KyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLworICAg
IHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9IE5VTEw7
CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgor
ICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChj
aGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0g
PSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQg
eXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJl
dHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9
CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93
aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIq
IGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMg
cG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5T
SSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50
ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAq
IGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSBy
ZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZvaWQgKiBw
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNl
ZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVT
X05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2VuaXpl
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0
LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigp
Cit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQor
eworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkg
JiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJ
bnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOwor
fQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBX
ZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlm
aWxlbm8uCisgICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5p
emVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVubyhsaW5lLG1I
YW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0
b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxl
KTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUo
bUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlw
ZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFk
aW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29s
IFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAm
JiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09
IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7Cisg
ICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI2NGEyODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUg
IklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCitu
YW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7Cisg
ICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsK
KyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxv
Y2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6
Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlm
IHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAg
ICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsK
KyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10p
OworCisgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVO
dW1iZXIoaW50IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwor
CisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7
CisgICAgYm9vbCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKwor
ICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250
ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAx
YzczMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCkBAIC0wLDAgKzEsMzI5IEBACisvKgor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNh
dGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFs
IFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJ
TEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIu
aCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lm
IGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5
X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V21pc3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBF
OwordHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVz
ZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVm
aW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAx
OyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFs
c2U7IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdo
aWxlKDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJh
LT5zY2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8
IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2Nh
bkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2Nh
bkxvYy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9
IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4
dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyV9CisKKyVvcHRpb24gbm95eXdyYXAg
bm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdl
IGJpc29uLWxvY2F0aW9ucworJW9wdGlvbiBwcmVmaXg9InBwIgorJW9wdGlvbiBleHRyYS10eXBl
PSJwcDo6VG9rZW5pemVyOjpDb250ZXh0KiIKKyV4IENPTU1FTlQKKworTkVXTElORSAgICAgXG58
XHJ8XHJcbgorSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgorUFVOQ1RVQVRPUiAg
W11bPD4oKXt9ListLyolXnwmfj0hOjssP10KKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTld
WzAtOV0qCitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgorSEVYQURFQ0lNQUxfQ09OU1RB
TlQgIDBbeFhdWzAtOWEtZkEtRl0rCisKK0RJR0lUICAgICAgICAgICAgICAgIFswLTldCitFWFBP
TkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KworRlJBQ1RJT05BTF9DT05TVEFOVCAg
KHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKworJSUKKworICAgIC8qIExpbmUg
Y29tbWVudCAqLworIi8vIlteXHJcbl0qCisKKyAgICAvKiBCbG9jayBjb21tZW50ICovCisgICAg
LyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKyAgICAv
KiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCisiLyoiIHsg
QkVHSU4oQ09NTUVOVCk7IH0KKzxDT01NRU5UPlteKlxyXG5dKworPENPTU1FTlQ+IioiCis8Q09N
TUVOVD57TkVXTElORX0geyArK3l5bGluZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsKKyAgICB5eWV4
dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCisjIHsK
KyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZXMuCisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1
cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQ
UF9PVEhFUjsKK30KKwore0lERU5USUZJRVJ9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwore0RFQ0lN
QUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
OkNPTlNUX0lOVDsKK30KKworKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxf
Q09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9PykgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKworICAgIC8q
IEFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUg
YSBudW1iZXIuICovCisgICAgLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBh
bmQgZmxvYXRzLiAqLworKHtESUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16
QS1aMC05Ll0qKSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46OlBQX05VTUJFUjsKK30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyIt
LSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ERUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9S
SUdIVDsKK30KKyI8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9FUTsKK30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9
CisiXl4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfWE9SOworfQorInx8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0FERF9BU1NJR047Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9NVUxfQVNTSUdOOworfQorIi89IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTU9EX0FTU0lHTjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisifD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7
UFVOQ1RVQVRPUn0geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0
dXJuIHl5dGV4dFswXTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNl
ID0gdHJ1ZTsgfQorCit7TkVXTElORX0geworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5h
c3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisKKy4geworICAgIHl5bHZhbC0+
YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9
CisKKzwqPjw8RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZv
ciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1h
bnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6
OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBz
SW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2Fu
TG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkg
cmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8g
ZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBz
Y2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5l
bm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2Mt
PmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RB
UlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5
dGVybWluYXRlKCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9r
ZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNv
bnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5p
emVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5p
dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQg
PiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1
dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVy
KCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAg
IC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNy
byB5eWZpbGVuby4KKyAgICB5eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQg
VG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5c2V0X2xpbmVubyhs
aW5lLCBtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7
CisgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9u
LCBtSGFuZGxlKTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3Rh
cnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0
b2tlbi0+dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29u
dGV4dC5sZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwor
fQorCitib29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9
PSBOVUxMKSAmJiB5eWxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYg
KG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeXlsZXhfZGVzdHJveSht
SGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAppbmRleCA1YjMy
ZjcxLi5lOWM3MGIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFy
c2VyLnNoCkBAIC0xLDI3ICsxLDI2IEBACiAjIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAot
IyBHZW5lcmF0ZXMgR0xTTCBFUyBwcmVwcm9jZXNzb3IgLSBwcF9sZXguY3BwLCBwcF90YWIuaCwg
YW5kIHBwX3RhYi5jcHAKKyMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVT
IHByZXByb2Nlc3Nvci4KIAogcnVuX2ZsZXgoKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8k
MS5sCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX2xleC5jcHAKK2lucHV0X2ZpbGU9JHNj
cmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKIGZsZXggLS1ub2xpbmUg
LS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0KIAogcnVu
X2Jpc29uKCkKIHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0X2hlYWRlcj0k
c2NyaXB0X2Rpci8kMV90YWIuaAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV90YWIuY3Bw
Ci1iaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hl
YWRlciAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQoraW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgorYmlzb24gLS1uby1saW5l
cyAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQog
fQogCiBzY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKIAogIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IK
LXJ1bl9mbGV4IHBwCi1ydW5fYmlzb24gcHAKK3J1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXpl
ci5jcHAKK3J1bl9iaXNvbiBFeHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcC5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdjYTA0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwLmwKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRp
b24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSV0b3B7Ci0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVi
dWcuaCIKLSNpbmNsdWRlICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZp
bmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0
X2xpbmUgPSB5eWxpbmVubzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4g
PSB5eWNvbHVtbiArIDE7ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1
bHQsIG1heFNpemUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhT
aXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBj
aGFyKiBzdHIsIGludCBsZW4pOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlz
b24tbG9jYXRpb25zCi0lb3B0aW9uIHN0YWNrCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9u
IGV4dHJhLXR5cGU9InBwOjpDb250ZXh0KiIKLQotSFNQQUNFICAgICAgWyBcdF0KLUhBU0ggICAg
ICAgIF57SFNQQUNFfSoje0hTUEFDRX0qCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAt
OV0qCi1QVU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NP
TlNUQU5UICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1I
RVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAg
ICAgICAgWzAtOV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFD
VElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0l
JQotCi17SEFTSH0geyByZXR1cm4gSEFTSDsgfQotCi17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURF
TlRJRklFUn0vWyBcdFxuXSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0KLXtIQVNIfWRl
ZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS8iKCIgewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJh
Y3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9GVU5D
OwotfQote0hBU0h9dW5kZWZ7SFNQQUNFfSsgeyByZXR1cm4gSEFTSF9VTkRFRjsgfQotCi17SEFT
SH1pZiB7IHJldHVybiBIQVNIX0lGOyB9Ci17SEFTSH1pZmRlZiB7IHJldHVybiBIQVNIX0lGREVG
OyB9Ci17SEFTSH1pZm5kZWYgeyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLXtIQVNIfWVsc2UgeyBy
ZXR1cm4gSEFTSF9FTFNFOyB9Ci17SEFTSH1lbGlmIHsgcmV0dXJuIEhBU0hfRUxJRjsgfQote0hB
U0h9ZW5kaWYgeyByZXR1cm4gSEFTSF9FTkRJRjsgfQotImRlZmluZWQiIHsgcmV0dXJuIERFRklO
RUQ7IH0KLQote0hBU0h9ZXJyb3IgeyByZXR1cm4gSEFTSF9FUlJPUjsgfQote0hBU0h9cHJhZ21h
IHsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci17SEFTSH1leHRlbnNpb24geyByZXR1cm4gSEFTSF9F
WFRFTlNJT047IH0KLXtIQVNIfXZlcnNpb24geyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci17SEFT
SH1saW5lIHsgcmV0dXJuIEhBU0hfTElORTsgfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZh
bC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElE
RU5USUZJRVI7Ci19Ci0KLXtERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhB
REVDSU1BTF9DT05TVEFOVH0gewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLQotKHtESUdJVH0r
e0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9Pykg
ewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotCi17UFVOQ1RVQVRPUn0geyByZXR1cm4geXl0
ZXh0WzBdOyB9Ci0KLVsgXHRcdlxmXSsgeyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci0KLVxu
IHsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsK
LX0KLQotPCo+PDxFT0Y+PiAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0KLSUlCi0KLXN0ZDo6c3Ry
aW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAv
LyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJ
REVOVElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4K
LSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0g
ODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVu
IC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8
IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3Rk
OjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0K
LQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGlu
dCBtYXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5w
dXQtPmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0Ojpr
RXJyb3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAg
ICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxv
Y2F0aW9uKHl5Z2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxl
ID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICB5eXNldF9saW5lbm8ocHA6OlRva2Vu
OjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSwgbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9
IG1JbnB1dC0+cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9y
KCkgPT0gcHA6OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBucmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFT
U0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAoeXlsZXhfaW5pdF9leHRyYSh0aGlzLCAm
bUxleGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeXlyZXN0YXJ0KDAsIG1MZXhl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkK
LXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQotICAgIHl5bGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAg
ICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAu
eSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTkzYWIuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHAueQorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LVRoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29y
IEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlz
ODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBn
ZW5lcmF0ZV9nbHNsX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJT
RVIuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNs
dWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQot
I2RlZmluZSBZWURFQlVHIDEKLSV9Ci0KLSVwdXJlLXBhcnNlcgotJW5hbWUtcHJlZml4PSJwcCIK
LSVsb2NhdGlvbnMKLSVwYXJzZS1wYXJhbSB7cHA6OkNvbnRleHQqIGNvbnRleHR9Ci0KLSV1bmlv
biB7Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2Vu
KiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0KLSV7Ci1leHRlcm4gaW50
IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3Rh
dGljIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6
OkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNv
bik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250
ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBw
OjpDb250ZXh0KiBjb250ZXh0KTsKLSV9Ci0KLSV0b2tlbiBIQVNIIEhBU0hfVU5ERUYKLSV0b2tl
biBIQVNIX0lGIEhBU0hfSUZERUYgSEFTSF9JRk5ERUYgSEFTSF9FTFNFIEhBU0hfRUxJRiBIQVNI
X0VORElGIERFRklORUQKLSV0b2tlbiBIQVNIX0VSUk9SIEhBU0hfUFJBR01BIEhBU0hfRVhURU5T
SU9OIEhBU0hfVkVSU0lPTiBIQVNIX0xJTkUKLSV0b2tlbiA8c3ZhbD4gSEFTSF9ERUZJTkVfT0JK
IEhBU0hfREVGSU5FX0ZVTkMKLSV0b2tlbiA8c3ZhbD4gSU5UX0NPTlNUQU5UIEZMT0FUX0NPTlNU
QU5UIElERU5USUZJRVIKLSV0eXBlIDxpdmFsPiBvcGVyYXRvcgotJXR5cGUgPHR2YWw+IGNvbmRp
dGlvbmFsX3Rva2VuIHRva2VuCi0ldHlwZSA8dGxpc3Q+IHBhcmFtZXRlcl9saXN0IHJlcGxhY2Vt
ZW50X2xpc3QgY29uZGl0aW9uYWxfbGlzdCB0b2tlbl9saXN0Ci0lJQotCi1pbnB1dAotICAgIDog
LyogZW1wdHkgKi8KLSAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZQotICAgIDogdGV4dF9saW5l
Ci0gICAgfCBjb250cm9sX2xpbmUKLTsKLQotdGV4dF9saW5lCi0gICAgOiAnXG4nCi0gICAgfCB0
b2tlbl9saXN0ICdcbicgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4K
LSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAg
ICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgJDEtPmJlZ2luKCksICQxLT5lbmQoKSk7Ci0gICAg
ICAgIGRlbGV0ZSAkMTsKLSAgICB9Ci07Ci0KLWNvbnRyb2xfbGluZQotICAgIDogSEFTSCAnXG4n
Ci0gICAgfCBIQVNIX0RFRklORV9PQkogcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAg
Y29udGV4dC0+ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwg
JDEsIE5VTEwsICQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0RFRklORV9GVU5DICcoJyBwYXJhbWV0
ZXJfbGlzdCAnKScgcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+ZGVm
aW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICQxLCAkMywgJDUp
OwotICAgIH0KLSAgICB8IEhBU0hfVU5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgY29u
dGV4dC0+dW5kZWZpbmVNYWNybygkMik7Ci0gICAgfQotICAgIHwgSEFTSF9JRiBjb25kaXRpb25h
bF9saXN0ICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAkMiA/
IHRydWUgOiBmYWxzZSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRkRFRiBJREVOVElGSUVSICdcbicg
ewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3Jv
RGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfSUZOREVGIElERU5USUZJRVIgJ1xuJyB7
Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3Jv
RGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfRUxJRiBjb25kaXRpb25hbF9saXN0ICdc
bicgewotICAgIH0KLSAgICB8IEhBU0hfRUxTRSAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VO
RElGICdcbicgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIH0K
LSAgICB8IEhBU0hfRVJST1IgJ1xuJwotICAgIHwgSEFTSF9QUkFHTUEgJ1xuJwotICAgIHwgSEFT
SF9FWFRFTlNJT04gJ1xuJwotICAgIHwgSEFTSF9WRVJTSU9OICdcbicKLSAgICB8IEhBU0hfTElO
RSAnXG4nCi07Ci0KLXJlcGxhY2VtZW50X2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBO
VUxMOyB9Ci0gICAgfCB0b2tlbl9saXN0Ci0KLXBhcmFtZXRlcl9saXN0Ci0gICAgOiAvKiBlbXB0
eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3
IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAx
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKSk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX2xp
c3QgJywnIElERU5USUZJRVIgewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9i
YWNrKG5ldyBwcDo6VG9rZW4oQDMuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDMpKTsKLSAgICB9
Ci0KLWNvbmRpdGlvbmFsX2xpc3QKLSAgICA6IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAg
JCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAg
ICB9Ci0gICAgfCBjb25kaXRpb25hbF9saXN0IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi10b2tlbl9s
aXN0Ci0gICAgOiB0b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAg
ICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgdG9rZW5fbGlzdCB0b2tlbiB7
Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsK
LQotY29uZGl0aW9uYWxfdG9rZW4KLSAgICA6IERFRklORUQgSURFTlRJRklFUiB7Ci0gICAgfQot
ICAgIHwgREVGSU5FRCAnKCcgSURFTlRJRklFUiAnKScgewotICAgIH0KLSAgICB8IHRva2VuCi07
Ci0KLXRva2VuCi0gICAgOiBvcGVyYXRvciB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihA
MS5maXJzdF9saW5lLCAkMSwgTlVMTCk7Ci0gICAgfQotICAgIHwgSU5UX0NPTlNUQU5UIHsKLSAg
ICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgJDEp
OwotICAgIH0KLSAgICB8IEZMT0FUX0NPTlNUQU5UIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRv
a2VuKEAxLmZpcnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgSURF
TlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVO
VElGSUVSLCAkMSk7Ci0gICAgfQotOwotCi1vcGVyYXRvcgotICAgIDogJ1snIHsgJCQgPSAnWyc7
IH0KLSAgICB8ICddJyB7ICQkID0gJ10nOyB9Ci0gICAgfCAnPCcgeyAkJCA9ICc8JzsgfQotICAg
IHwgJz4nIHsgJCQgPSAnPic7IH0KLSAgICB8ICcoJyB7ICQkID0gJygnOyB9Ci0gICAgfCAnKScg
eyAkJCA9ICcpJzsgfQotICAgIHwgJ3snIHsgJCQgPSAneyc7IH0KLSAgICB8ICd9JyB7ICQkID0g
J30nOyB9Ci0gICAgfCAnLicgeyAkJCA9ICcuJzsgfQotICAgIHwgJysnIHsgJCQgPSAnKyc7IH0K
LSAgICB8ICctJyB7ICQkID0gJy0nOyB9Ci0gICAgfCAnLycgeyAkJCA9ICcvJzsgfQotICAgIHwg
JyonIHsgJCQgPSAnKic7IH0KLSAgICB8ICclJyB7ICQkID0gJyUnOyB9Ci0gICAgfCAnXicgeyAk
JCA9ICdeJzsgfQotICAgIHwgJ3wnIHsgJCQgPSAnfCc7IH0KLSAgICB8ICcmJyB7ICQkID0gJyYn
OyB9Ci0gICAgfCAnficgeyAkJCA9ICd+JzsgfQotICAgIHwgJz0nIHsgJCQgPSAnPSc7IH0KLSAg
ICB8ICchJyB7ICQkID0gJyEnOyB9Ci0gICAgfCAnOicgeyAkJCA9ICc6JzsgfQotICAgIHwgJzsn
IHsgJCQgPSAnOyc7IH0KLSAgICB8ICcsJyB7ICQkID0gJywnOyB9Ci0gICAgfCAnPycgeyAkJCA9
ICc/JzsgfQotOwotCi0lJQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRp
dGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQot
Ci12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0K
LW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0g
MTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTdlN2NjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjY4ICswLDAgQEAKLSNsaW5lIDE2ICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwLmwiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAx
MyAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIgotCi0jZGVmaW5lICBZWV9J
TlRfQUxJR05FRCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5
IGZsZXggKi8KLQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9W
RVJTSU9OIDIKLSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxF
WF9TVUJNSU5PUl9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAot
I2RlZmluZSBGTEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0
Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0KLS8qIGJlZ2lu
IHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIGVu
ZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRp
b25zICovCi0KLSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAotCi0vKiBDOTkg
c3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90
LiAqLwotCi0jaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05f
XyA+PSAxOTk5MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9T
IGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1h
eC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NURENfTElNSVRf
TUFDUk9TCi0jZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpbmNsdWRl
IDxpbnR0eXBlcy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4
X3QgZmxleF91aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYg
dWludDE2X3QgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Ci10
eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hh
ciBmbGV4X2ludDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYg
aW50IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAot
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWdu
ZWQgaW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9m
IGludGVncmFsIHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAg
ICAgICAgICAgICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJ
TlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9N
SU4KLSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRp
ZgotI2lmbmRlZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcp
Ci0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAg
ICAgKDMyNzY3KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVgg
ICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2Rl
ZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQx
Nl9NQVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0j
aWZuZGVmIFVJTlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2
NzI5NVUpCi0jZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotCi0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlk
LiAqLwotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UgICAvKiAhIF9fY3BsdXNwbHVzICov
Ci0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCi0jaWYg
ZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbmRpZiAgLyog
ZGVmaW5lZCAoX19TVERDX18pICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lm
ZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5
eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZp
bmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5
IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJy
YXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRv
IGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0g
KiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGlu
dCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJf
VAotdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2Us
IHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3Jv
cyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IK
LSNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJh
X3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0
ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNf
bGluZW5vKQotI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
c19jb2x1bW4pCi0jZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQot
LyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0
YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3
YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgot
ICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0
ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIg
aGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUg
YWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFS
VCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQot
LyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8K
LSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsg
MSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBm
aWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciAp
Ci0KLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0
IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJ
WkUgMTYzODQKLSNlbmRpZgotCi0vKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICov
Ci0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9m
KHl5X3N0YXRlX3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0j
ZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0Jf
QUNUX0xBU1RfTUFUQ0ggMgotCi0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhl
IHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0gICAg
ICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVz
cygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcgc2Nh
bm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSBwcGxleC4gCi0gICAgICogICAg
ICAgT25lIG9idmlvdXMgc29sdXRpb24gaXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJp
ZWQgdGhhdCwgYW5kIHNhdwotICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEg
bm9uLXl5bGluZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlfYWN0IGlzCi0gICAgICogICAgICAgbm9y
bWFsbHkgZGVjbGFyZWQgYXMgYSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0
aCBpdC4KLSAgICAgKi8KLSAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAg
ICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKLSAgICAgICAgICAgICAgICBm
b3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAg
IGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAgLS15
eWxpbmVubztcCi0gICAgICAgICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0
IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVh
bS4gKi8KLSNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAg
ICAvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50
IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNz
X21hY3JvX2FyZyk7XAotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAg
ICAgICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAg
ICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAg
ICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBj
LCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlf
U0laRV9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9z
aXplX3Q7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVm
aW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAg
ICB7Ci0gICAgRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAg
ICAgIC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1
cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXplIG9mIGlucHV0
IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAgICAgKiBjaGFy
YWN0ZXJzLgotICAgICAqLwotICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQotICAgIC8qIE51
bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9C
Ci0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBpbnQgeXlfbl9jaGFyczsKLQotICAg
IC8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRl
ZCBpdCwKLSAgICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxk
IGZyZWUoKSBpdCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNf
b3VyX2J1ZmZlcjsKLQotICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlu
cHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBp
bnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFk
KCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFj
aCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotICAgIC8q
IFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGlu
ZS4KLSAgICAgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1h
dGNoLCBvdGhlcndpc2UKLSAgICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5X2F0X2JvbDsK
LQotICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCi0gICAgaW50
IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwotICAgIAotICAgIC8qIFdo
ZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQot
ICAgICAqIGVuZCBvZiBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZmZXI7Ci0KLSAg
ICBpbnQgeXlfYnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKLSNkZWZp
bmUgWVlfQlVGRkVSX05PUk1BTCAxCi0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0
IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsg
dGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAq
IHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBX
ZSBtaWdodAotICAgICAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRo
b3VnaCwgYmVjYXVzZSBvZgotICAgICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAg
ICAgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0
byAibmV3IgotICAgICAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBj
b250aW51ZSBzY2FubmluZyBieQotICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBp
bnB1dCBmaWxlLgotICAgICAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0g
ICAgfTsKLSNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBw
cm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUK
LSAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2Vu
ZXJhbAotICogInNjYW5uZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUg
c3RhY2ssIG9yIE5VTEwuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5
X2J1ZmZlcl9zdGFjayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZm
ZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDogTlVMTCkKLQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3
aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVu
IHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcF0KLQotdm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBf
Y3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLXZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3BfYnVmZmVyX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVy
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVy
IChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
I2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIpCi0KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFz
ZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGlu
dCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3Qg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi0jZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgotCi0j
ZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotICAgIHsgXAotICAg
IGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAg
ICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2lu
dGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9Ci0KLSNkZWZpbmUgeXlfc2V0X2Jv
bChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCi0g
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVy
KHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KLQotI2RlZmluZSBZ
WV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0KLS8qIEJl
Z2luIHVzZXIgc2VjdDMgKi8KLQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmluZSBZWV9TS0lQ
X1lZV1JBUAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRlZiBpbnQg
eXlfc3RhdGVfdHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0YXRpYyB5
eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1
cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJy
b3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8qIERvbmUg
YWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhl
Ci0gKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0jZGVmaW5l
IFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0g
ICAgeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlfY3A7IFwKLSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55eV9jX2J1
Zl9wID0geXlfY3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDIzCi0jZGVmaW5lIFlZX0VORF9P
Rl9CVUZGRVIgMjQKLS8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwK
LSAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2lu
Zm8KLSAgICB7Ci0gICAgZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4X2ludDMyX3Qg
eXlfbnh0OwotICAgIH07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzEw
NV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDIzLCAgIDIxLCAgIDIy
LCAgIDIwLCAgIDIwLCAgIDE4LCAgIDE4LAotICAgICAgIDE3LCAgIDE3LCAgIDIxLCAgICAxLCAg
IDIxLCAgIDE5LCAgIDE5LCAgIDE4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgIDE4LCAgIDE3
LCAgIDE3LCAgIDIxLCAgICAxLCAgICAxLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE5LCAgIDE4LCAgIDE3LCAgICAwLAotICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICA1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAotICAgICAgIDE5LCAgIDE3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAg
ICA5LCAgICA4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDE2LCAgICAw
LCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAgIDEwLAotICAgICAgIDEyLCAgICAwLCAgICA2LCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDExLCAgICAwLCAgICAwLAotICAgICAgICA3LCAgIDEz
LCAgICA0LCAgICAwLCAgICAwLCAgICAwLCAgIDE1LCAgICAwLCAgICAwLCAgICAyLAotCi0gICAg
ICAgIDMsICAgIDAsICAgMTQsICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X2VjWzI1Nl0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICA0LCAgICA0
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA1LCAgICA1LCAg
ICAxLCAgICA3LAotICAgICAgICA1LCAgICA1LCAgICA4LCAgICA1LCAgICA4LCAgICA5LCAgICA1
LCAgIDEwLCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAg
IDEyLCAgIDEyLCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICAx
LCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDE0LCAgIDEzLAotICAgICAgIDE1LCAgIDE1LCAg
IDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LAotICAgICAgIDE1
LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE2LCAgIDE1LCAgIDE1LAot
ICAgICAgICA1LCAgICAxLCAgICA1LCAgICA1LCAgIDE1LCAgICAxLCAgIDE3LCAgIDEzLCAgIDEz
LCAgIDE4LAotCi0gICAgICAgMTksICAgMjAsICAgMjEsICAgMTUsICAgMjIsICAgMTUsICAgMTUs
ICAgMjMsICAgMjQsICAgMjUsCi0gICAgICAgMjYsICAgMjcsICAgMTUsICAgMjgsICAgMjksICAg
MzAsICAgMzEsICAgMzIsICAgMTUsICAgMzMsCi0gICAgICAgMTUsICAgMTUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0
YVszNF0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAxLCAg
ICAxLCAgICAzLCAgICAxLCAgICAxLCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICA1LCAgICA2
LCAgICA3LCAgICA3LCAgICA1LCAgICA1LCAgICA2LCAgICA1LAotICAgICAgICA3LCAgICA3LCAg
ICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3
LCAgICA3LCAgICA3Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9i
YXNlWzExMV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgIDE4LCAgMTg0LCAgMTg1LCAgIDEx
LCAgMTg1LCAgMTg1LCAgIDIxLCAgIDI4LCAgIDUzLAotICAgICAgICAwLCAgMTY0LCAgIDM5LCAg
IDcxLCAgIDEyLCAgIDMyLCAgIDM0LCAgICAxLCAgIDM5LCAgIDQ0LAotICAgICAgICAwLCAgICAw
LCAgICAwLCAgMTYyLCAgIDY0LCAgICAwLCAgICAwLCAgMTYyLCAgIDQ2LCAgMTYwLAotICAgICAg
MTU3LCAgMTUwLCAgMTUyLCAgMTU3LCAgIDcwLCAgIDQ3LCAgIDY1LCAgICAwLCAgMTUzLCAgMTU0
LAotICAgICAgIDYyLCAgMTU1LCAgMTQ0LCAgMTQxLCAgIDY3LCAgMTQ1LCAgMTUyLCAgMTUwLCAg
MTM5LCAgIDc2LAotICAgICAgIDg1LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ0LCAgMTQwLCAgMTM1
LCAgMTQxLCAgMTQwLCAgMTQwLAotICAgICAgMTM4LCAgMTM1LCAgMTM2LCAgMTI1LCAgMTM0LCAg
MTI3LCAgMTg1LCAgMTg1LCAgMTMxLCAgMTIyLAotICAgICAgMTI0LCAgMTI4LCAgMTI4LCAgMTg1
LCAgMTIyLCAgMTI1LCAgMTIyLCAgMTI1LCAgMTIzLCAgMTg1LAotICAgICAgMTg1LCAgMTEyLCAg
MTg1LCAgMTIwLCAgMTEzLCAgMTI3LCAgIDk3LCAgICAwLCAgMTA3LCAgIDg2LAotICAgICAgMTg1
LCAgMTg1LCAgMTA1LCAgIDc2LCAgIDgxLCAgIDM0LCAgMTg1LCAgIDk3LCAgIDEwLCAgMTg1LAot
Ci0gICAgICAxODUsICAxMDMsICAxODUsICAxODUsICAxMTAsICAxMTQsICAxMTgsICAxMjEsICAx
MjYsICAxMzIKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsx
MTFdID0KLSAgICB7ICAgMCwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNiwgIDEwNiwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNywgIDEwNywgICAgOSwgICAxOCwgIDEwNCwKLSAgICAgIDEwOCwgICAxMCwgIDEw
NiwgIDEwNiwgIDEwNCwgICAxNCwgICAxNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwOCwgIDEwNiwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwOSwgIDEwNCwgIDEwNCwgIDExMCwgIDEwNCwgIDEwNCwKLQotICAg
ICAgMTA0LCAgMTEwLCAgMTA0LCAgICAwLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjE5XSA9
Ci0gICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDQsICAg
IDcsICAgIDcsICAgIDgsICAgIDksCi0gICAgICAgMTAsICAgMTAsICAgMTUsICAgMTUsICAgMTUs
ICAgMTUsICAxMDQsICAgMTIsICAgIDQsICAgMTMsCi0gICAgICAgIDYsICAgIDUsICAgIDcsICAg
MTQsICAgIDcsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTAsCi0gICAgICAgMTYsICAgMTYs
ICAgMTYsICAxMDQsICAxMDMsICAgMTIsICAgMTcsICAgMTgsICAgMTgsICAgMTksCi0gICAgICAg
MjUsICAgMjAsICAgMTUsICAgMjEsICAgMjYsICAgMzUsICAgMjAsICAgMzUsICAgMTksICAgMTks
Ci0gICAgICAgMzUsICAgMzYsICAgMzUsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAg
MzcsICAgOTksCi0gICAgICAgMjEsICAgMTcsICAgMjIsICAgMjIsICAgMjIsICAgMjUsICAgMjAs
ICAgMTUsICAgNDEsICAgMjYsCi0gICAgICAgNDIsICAgMjAsICAgMjcsICAgNDMsICAgMzcsICAg
MzcsICAgMzcsICAgNTAsICAgNDQsICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAgOTUsICAgNTQs
ICAgNTksICAgNTEsICAgNTEsICAgNTEsICAgMjgsICAgMjksCi0gICAgICAgNTUsICAgNjAsICAg
MzAsICAgMzEsICAgNTEsICAgNTEsICAgNTEsICAgMzIsICAxMDAsICAxMDAsCi0KLSAgICAgICA5
NywgICAzMywgICAzNCwgIDEwMSwgIDEwMCwgIDEwMCwgICA5MywgICA5NiwgICA5NSwgIDEwMSwK
LSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAyMywgICAy
MywgICAyMywKLSAgICAgICAyMywgICAxNiwgICA5NCwgICAxNiwgICAzOCwgICAzOCwgICAzOCwg
ICA5OCwgICA5MywgICA5MiwKLSAgICAgICA5OCwgICA5OCwgICA5OCwgIDEwMiwgIDEwMiwgIDEw
MiwgIDEwMiwgIDEwMiwgIDEwMiwgICA5MSwKLSAgICAgICA5MCwgICA4OSwgICA4OCwgICA4Nywg
ICA4NiwgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA4MSwKLSAgICAgICA4MCwgICA3OSwgICA3
OCwgICA3NywgICA3NiwgICA3NSwgICA3NCwgICA3MywgICA3MiwgICA3MSwKLSAgICAgICA3MCwg
ICA2OSwgICA2OCwgICA2NywgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwKLSAg
ICAgICA1OCwgICA1NywgICA1NiwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0NywgICA0Niwg
ICA0NSwKLSAgICAgICA0MCwgICAzOSwgICAyNCwgIDEwNCwgICAgMywgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9jaGtbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDUsICAgMTUsICAgIDUsICAgMTUsICAgMTgsICAgIDEsICAgIDIsICAgIDIs
Ci0gICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAg
IDIsICAgIDIsCi0gICAgICAgIDgsICAgIDgsICAgIDgsICAgMTgsICAgOTksICAgIDIsICAgIDks
ICAgIDksICAgIDksICAgIDksCi0gICAgICAgMTMsICAgIDksICAgMTMsICAgIDksICAgMTMsICAg
MTYsICAgIDksICAgMTcsICAgMTksICAgMTksCi0gICAgICAgMTYsICAgMjAsICAgMTcsICAgMjAs
ICAgMjAsICAgMjAsICAgMzYsICAgMzYsICAgMzYsICAgOTYsCi0gICAgICAgIDksICAgMTAsICAg
MTAsICAgMTAsICAgMTAsICAgMjUsICAgMTAsICAgMjUsICAgMjksICAgMjUsCi0gICAgICAgMjks
ICAgMTAsICAgMTQsICAgMjksICAgMzcsICAgMzcsICAgMzcsICAgMzUsICAgMjksICAgMzUsCi0g
ICAgICAgMzUsICAgMzUsICAgOTUsICAgNDEsICAgNDUsICAgNTAsICAgNTAsICAgNTAsICAgMTQs
ICAgMTQsCi0gICAgICAgNDEsICAgNDUsICAgMTQsICAgMTQsICAgNTEsICAgNTEsICAgNTEsICAg
MTQsICAgOTgsICAgOTgsCi0KLSAgICAgICA5NCwgICAxNCwgICAxNCwgICA5OCwgIDEwMiwgIDEw
MiwgICA5MywgICA5MCwgICA4OSwgIDEwMiwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwg
IDEwNSwgIDEwNSwgIDEwNSwgIDEwNiwgIDEwNiwgIDEwNiwKLSAgICAgIDEwNiwgIDEwNywgICA4
NywgIDEwNywgIDEwOCwgIDEwOCwgIDEwOCwgIDEwOSwgICA4NiwgICA4NSwKLSAgICAgIDEwOSwg
IDEwOSwgIDEwOSwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgICA4NCwKLSAg
ICAgICA4MiwgICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3NSwgICA3MywgICA3MiwgICA3MSwg
ICA3MCwKLSAgICAgICA2OSwgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwgICA2
MCwgICA1OSwgICA1OCwKLSAgICAgICA1NywgICA1NiwgICA1NSwgICA1NCwgICA1MywgICA1Miwg
ICA0OSwgICA0OCwgICA0NywgICA0NiwKLSAgICAgICA0NCwgICA0MywgICA0MiwgICA0MCwgICAz
OSwgICAzNCwgICAzMywgICAzMiwgICAzMSwgICAzMCwKLSAgICAgICAyOCwgICAyNCwgICAxMiwg
ICAgMywgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
Ci0gICAgfSA7Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0
Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNo
X2VvbFsyNF0gPQotICAgIHsgICAwLAotMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgICAgIH07Ci0KLS8qIFRo
ZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBh
bnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNU
IHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JF
U1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUg
Y29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4K
LUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1t
YXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNw
eAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRl
ICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJ
T04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVu
bzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7
ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwK
LSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAgICAKLXN0
YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBs
ZW4pOwotCi0jZGVmaW5lIElOSVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OkNv
bnRleHQqCi0KLS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2Fu
bmVyLiAqLwotc3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBO
b3QgdG91Y2hlZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0g
ICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRo
ZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsK
LSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3Rh
Y2suICovCi0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Yg
c3RhY2suICovCi0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0
YWNrIGFzIGFuIGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9u
X2NoYXJzOwotICAgIGludCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgIGlu
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
ZXIgKTsKLQotaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpw
cGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBF
ICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBh
ZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25z
IGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVm
IF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRp
ZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJu
Y3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAo
eXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZ
WV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0
YXRlIChpbnQgbmV3X3N0YXRlICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotICAgIAotICAgIHN0YXRp
YyB2b2lkIHl5X3BvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgc3Rh
dGljIGludCB5eV90b3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogQW1v
dW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwotI2lmbmRlZiBZWV9S
RUFEX0JVRl9TSVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgotI2VuZGlmCi0KLS8q
IENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRw
dXQuICovCi0jaWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQg
c2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93IHVzZSBmd3Jp
dGUoKS4KLSAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0
ICkKLSNlbmRpZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51
bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyByZXR1cm5lZCBpbiAi
cmVzdWx0Ii4KLSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9JTlBVVChidWYscmVz
dWx0LG1heF9zaXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lz
X2ludGVyYWN0aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAg
ICAgICAgaW50IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0g
ICAgICAgICAgICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyAr
K24gKSBcCi0gICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMg
PT0gJ1xuJyApIFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1
bHQgPSBuOyBcCi0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAg
ZXJybm89MDsgXAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9z
aXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAg
ICAgICAgIGlmKCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIg
KTsgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAg
ICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAg
ICAgICAgfSBcCi0gICAgICAgIH1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFm
dGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0K
LSAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNl
IHRoYXQgd2lsbCBjYXVzZQotICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5y
ZWFjaGFibGUgc3RhdGVtZW50cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5
eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJp
ZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9T
VEFSVF9TVEFDS19JTkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgot
Ci0vKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNk
ZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVy
KQotI2VuZGlmCi0KLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBw
cm90b3R5cGVzICovCi0KLS8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5u
ZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4K
LSAqLwotI2lmbmRlZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVy
biBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9E
RUNMIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwg
WVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAh
WVlfREVDTCAqLwotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBy
dWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwot
I2lmbmRlZiBZWV9VU0VSX0FDVElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0K
LS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZ
X0JSRUFLCi0jZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVM
RV9TRVRVUCBcCi0gICAgaWYgKCB5eWxlbmcgPiAwICkgXAotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IFwKLSAgICAgICAgICAgICAgICAoeXl0ZXh0W3l5bGVu
ZyAtIDFdID09ICdcbicpOyBcCi0gICAgWVlfVVNFUl9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNj
YW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsK
LSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0
ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0OwotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAg
IHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQot
ICAgIGlmICggIXl5Zy0+eXlfaW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9pbml0
ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7Ci0jZW5k
aWYKLQotICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAgICB5eWctPnl5
X3N0YXJ0ID0gMTsgIC8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLSAgICAgICAgaWYgKCAhIHl5
aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOwotCi0gICAgICAgIGlmICggISB5eW91dCAp
Ci0gICAgICAgICAgICB5eW91dCA9IHN0ZG91dDsKLQotICAgICAgICBpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKSB7Ci0gICAgICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5l
cik7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAg
ICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAg
ICB9Ci0KLSAgICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMg
cmVhY2hlZCAqLwotICAgICAgICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwot
Ci0gICAgICAgIC8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKLQotICAgICAgICAvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9u
IGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKLSAgICAgICAgICogdGhlIGN1cnJlbnQgcnVu
LgotICAgICAgICAgKi8KLSAgICAgICAgeXlfYnAgPSB5eV9jcDsKLQotICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSArPSBZ
WV9BVF9CT0woKTsKLXl5X21hdGNoOgotICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAg
ICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07
Ci0gICAgICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgICAgICBpZiAo
IHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgICAgICAgICAgeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAgICAgICAgICAg
fQotICAgICAgICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTA0ICk7Ci0gICAgICAgIHl5
X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0g
ICAgICAgIHl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotICAgICAgICBZ
WV9ET19CRUZPUkVfQUNUSU9OOwotCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9C
VUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgaW50IHl5bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7IHl5bCA8IHl5
bGVuZzsgKyt5eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyAp
Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5
eWNvbHVtbj0wOwotICAgIH13aGlsZSgwKQotOwotICAgICAgICAgICAgfQotCi1kb19hY3Rpb246
ICAvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0K
LSAgICAgICAgc3dpdGNoICggeXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24g
c3dpdGNoICovCi0gICAgICAgICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotICAgICAg
ICAgICAgLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0gICAg
ICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAgIHl5X2NwID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBnb3RvIHl5X2Zp
bmRfYWN0aW9uOwotCi1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCi0qeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0
ICovCi15eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsg
Lyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+
c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNI
X0RFRklORV9PQko7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMzoKLSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAg
eXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0
cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZV
TkM7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhB
U0hfVU5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gSEFTSF9JRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBIQVNIX0lGREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxTRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFRklORUQ7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VYVEVO
U0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9WRVJTSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBIQVNIX0xJTkU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNzoKLVlZX1JVTEVfU0VU
VVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBJREVOVElGSUVSOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE4OgotWVlf
UlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQs
IHl5bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxOToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLSAgICBZ
WV9CUkVBSwotY2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHl5dGV4dFswXTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyAvKiBJZ25vcmUgd2hpdGVz
cGFjZSAqLyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjI6Ci0vKiBydWxlIDIyIGNhbiBtYXRjaCBl
b2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0g
ICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0Yo
SU5JVElBTCk6Ci17IHl5dGVybWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMzoKLVlZ
X1JVTEVfU0VUVVAKLUVDSE87Ci0gICAgWVlfQlJFQUsKLQotICAgIGNhc2UgWVlfRU5EX09GX0JV
RkZFUjoKLSAgICAgICAgewotICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBp
bmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgICAg
IC8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KLSAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKLQotICAgICAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8q
IFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotICAgICAg
ICAgICAgICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKLSAg
ICAgICAgICAgICAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVk
Ci0gICAgICAgICAgICAgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUK
LSAgICAgICAgICAgICAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5k
IG91cgotICAgICAgICAgICAgICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRv
IGRvIHNvLCBiZWNhdXNlCi0gICAgICAgICAgICAgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24g
KG90aGVyIHRoYW4gcG9zc2libHkgYQotICAgICAgICAgICAgICogYmFjay11cCkgdGhhdCB3aWxs
IG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KLSAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2No
YXJzOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxl
ID0geXlpbjsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLyog
Tm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlv
bgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2Nf
YnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0
IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJh
bnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4g
IENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAgICAgKiBpbiBpbnB1dCgpLgotICAg
ICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgeyAv
KiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICB5eV9zdGF0ZV90eXBlIHl5
X25leHRfc3RhdGU7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAg
ICAgICAvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKLSAgICAg
ICAgICAgICAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0gICAgICAgICAgICAgKiB5
eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLSAgICAgICAgICAgICAq
IGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotICAgICAgICAgICAg
ICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0Ci0gICAgICAg
ICAgICAgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKLSAg
ICAgICAgICAgICAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KLSAgICAgICAgICAgICAqLwotCi0g
ICAgICAgICAgICB5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9z
dGF0ZSAsIHl5c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAg
ICAgICAgICAgICAgICB5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8g
eXlfbWF0Y2g7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2Ugc3dpdGNoICgg
eXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKLQotICAgICAg
ICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUg
aW4KLSAgICAgICAgICAgICAgICAgICAgICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBz
ZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAot
ICAgICAgICAgICAgICAgICAgICAgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAot
ICAgICAgICAgICAgICAgICAgICAgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8K
LSAgICAgICAgICAgICAgICAgICAgICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4g
dGhlCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBh
bm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQu
Ci0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgICAg
ICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAgICAgICAgICAg
ICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
ISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAg
ICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAg
ICAgICAgICAgICAgeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsK
LQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVm
X3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotCi0gICAgICAgICAgICBjYXNlIEVP
Ql9BQ1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAg
ICAgICAgICAgICAgICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnNdOwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9w
cmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50
ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rpb24g
c3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAv
KiBlbmQgb2YgcHBsZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQg
aW4gYSBuZXcgYnVmZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFj
dGlvbjoKLSAqICBFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICogIEVPQl9BQ1Rf
RU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFyICpkZXN0ID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
c291cmNlID0geXlnLT55eXRleHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92
ZSwgaTsKLSAgICBpbnQgcmV0X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkK
LSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50
ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAgICB7IC8qIERv
bid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotICAgICAg
ICBpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09
IDEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBj
aGFyYWN0ZXIsIHRoZSBFT0IsIHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlzIGFzIGEgZmlu
YWwgRU9GLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9FTkRf
T0ZfRklMRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJz
dAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmlyc3QgbW92ZSBs
YXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9fbW92ZSA9IChp
bnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgIGZvciAo
IGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVzdCsrKSA9ICoo
c291cmNlKyspOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyogZG9uJ3QgZG8g
dGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKLSAgICAgICAg
ICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAx
OwotCi0gICAgICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAgICAgICB7IC8q
IE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotICAgICAgICAg
ICAgLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAg
ICAgICAgICBZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCi0gICAgICAg
ICAgICBpbnQgeXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOwotCi0gICAgICAgICAgICBpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbmV3
X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5ld19z
aXplIDw9IDAgKQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9i
dWZfc2l6ZSAvIDg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBi
LT55eV9idWZfc2l6ZSAqPSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNo
YXIgKikKLSAgICAgICAgICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBj
aGFycy4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2No
X2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBk
b24ndCBvd24gaXQuICovCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAg
ICAgICAgICAgaWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoCi0gICAgICAgICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZm
ZXIgb3ZlcmZsb3ciICk7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9j
aF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3Jl
YWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAq
LwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90
KSBudW1fdG9fcmVhZCApOwotCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5
X25fY2hhcnMgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9
PSBZWV9NT1JFX0FESiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9C
X0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICAseXlzY2FubmVy
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICByZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9C
VUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UK
LSAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlf
c2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5
IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9z
aXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWct
Pnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiAp
OwotICAgIH0KLQotICAgIHl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAg
eXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBd
OwotCi0gICAgcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAt
IGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCi0K
LSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3Rh
dGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0woKTsKLQot
ICAgIGZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwg
eXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKLSAgICAgICAgewotICAgICAgICByZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsK
LSAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRl
XTsKLSAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAg
ICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAg
fQotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHl5
X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBh
IHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICogIG5l
eHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCB5
eV9pc19qYW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlv
bnMuICovCi0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAg
ICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOwotICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19j
cG9zID0geXlfY3A7Ci0gICAgICAgIH0KLSAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgIHsKLSAg
ICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
LSAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICB5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOwotICAgIHl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwNCk7Ci0K
LSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNpZm5k
ZWYgWVlfTk9fSU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotI2VuZGlmCi0KLXsKLSAgICBpbnQgYzsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICBpZiAoICp5eWctPnl5X2NfYnVm
X3AgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAgICAvKiB5eV9j
X2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLSAg
ICAgICAgICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVu
IGl0J3MgYQotICAgICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhl
IGVuZCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2Nf
YnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXSApCi0gICAgICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAg
ICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotICAgICAgICAgICAgaW50IG9mZnNldCA9IHl5Zy0+
eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXlnLT55eV9jX2J1
Zl9wOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xB
U1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5
X2dfbl9iKCkKLSAgICAgICAgICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxh
dGVkIGEKLSAgICAgICAgICAgICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVl
ZCB0bwotICAgICAgICAgICAgICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9y
ZQotICAgICAgICAgICAgICAgICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAot
ICAgICAgICAgICAgICAgICAgICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgot
ICAgICAgICAgICAgICAgICAgICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gK
LSAgICAgICAgICAgICAgICAgICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLSAgICAgICAg
ICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHN0
YXR1cy4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAgICAgICAgICAg
ICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEVPRjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlf
TkVXX0ZJTEU7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHl5aW5wdXQoeXlzY2FubmVyKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBp
bnB1dCh5eXNjYW5uZXIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgICAg
ICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7IC8qIGNh
c3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyAgICAv
KiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlf
Y19idWZfcDsKLQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gKGMg
PT0gJ1xuJyk7Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCAp
Ci0gICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwot
ICAgIH13aGlsZSgwKQotOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0jZW5kaWYgIC8qIGlmbmRlZiBZ
WV9OT19JTlBVVCAqLwotCi0vKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlu
cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0g
Ki8KLSAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIu
Ci0gKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9zd2l0Y2hfdG9f
YnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQotICAgIC8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBl
bnRpcmUgZnVuY3Rpb24gYm9keQotICAgICAqIHdpdGgKLSAgICAgKiAgICAgIHBwcG9wX2J1ZmZl
cl9zdGF0ZSgpOwotICAgICAqICAgICAgcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsK
LSAgICAgKi8KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2gg
b3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3
aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHBwd3JhcCgpKSBw
cm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBpcyBsb29rZWQg
YXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAgICAgKiB0byBn
byBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0
YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgeXlnLT55eXRleHRfcHRyID0g
eXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwot
ICAgIHl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0gICAg
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUg
YW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXpl
IGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlf
QlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Mo
c2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICgg
ISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
cHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0g
ICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNp
emUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxs
b2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYi0+eXlfY2hf
YnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
cHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0K
LSAgICBwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gYjsK
LX0KLQotLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0
ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIGIgKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3Vy
ZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7Ci0KLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQotICAgICAgICBwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsK
LQotICAgIHBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6
ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRp
bWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFz
IGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBw
X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLQotewotICAgIGludCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBwcF9mbHVz
aF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwot
ICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQg
YnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVk
IGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICog
SW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1u
LgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+
eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0K
LSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotICAgIGVycm5vID0gb2Vy
cm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5l
eHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVy
IHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZmx1
c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIGlmICggISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYi0+eXlfbl9jaGFycyA9IDA7
Ci0KLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAg
VGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZl
ciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAgICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4K
LSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0g
ICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYi0+eXlf
YnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07Ci0KLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAg
IGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgaWYgKCBiID09IFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5l
dyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2ls
bCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19i
dWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3
X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0g
TlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nh
bm5lcik7Ci0KLSAgICAvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19i
dWZmZXIuICovCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAg
ICAgLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAq
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAg
ICAgICB9Ci0KLSAgICAvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBs
YWNlIHRvcC4gKi8KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX3RvcCsrOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7Ci0KLSAgICAvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAg
IHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRv
cCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVz
IHRoZSBuZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICovCi12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcF9kZWxl
dGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+
IDApCi0gICAgICAgIC0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0gICAgaWYgKFlZX0NV
UlJFTlRfQlVGRkVSKSB7Ci0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQot
fQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1
YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBpbnQgbnVt
X3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotICAgICAg
ICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRv
bid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3Rh
Y2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlh
dGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgbnVtX3Rv
X2FsbG9jID0gMTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51
bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55
eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFj
aywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90
b19hbGxvYzsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUg
YnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdy
b3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9f
YWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
eXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3Rz
LiovCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KSk7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAg
ICB9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFz
ZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMg
b2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmpl
Y3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9T
VEFURSBiOwotICAgIAotICAgIGlmICggc2l6ZSA8IDIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0y
XSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICAvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSBy
b29tIGZvciB0aGUgRU9CJ3MuICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYiA9IChZWV9C
VUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5
c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1
Zl9zaXplID0gc2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KLSAg
ICBiLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55eV9uX2NoYXJz
ID0gYi0+eXlfYnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIGIt
Pnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAgIGItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgcHBfc3dpdGNoX3RvX2J1ZmZlcihi
ICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0
IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkg
d2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIg
YSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkg
Y29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQotICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGlu
c3RlYWQuCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCi0gICAgcmV0dXJuIHBwX3Nj
YW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVw
IHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0
IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVz
LgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVz
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRo
ZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NU
QVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVz
X2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAg
ICBjaGFyICpidWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0gKGNoYXIgKikg
cHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwot
Ci0gICAgZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAgICAgIGJ1Zltp
XSA9IHl5Ynl0ZXNbaV07Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19s
ZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0gcHBfc2Nhbl9idWZmZXIo
YnVmLG4gLHl5c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJP
UiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyogSXQncyBva2F5
IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAotICAgICAq
IGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291cl9idWZmZXIg
PSAxOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRl
IChpbnQgIG5ld19zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCB5eWct
Pnl5X3N0YXJ0X3N0YWNrX3B0ciA+PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICkKLSAgICAg
ICAgewotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemU7Ci0KLSAgICAgICAgeXlnLT55eV9zdGFy
dF9zdGFja19kZXB0aCArPSBZWV9TVEFSVF9TVEFDS19JTkNSOwotICAgICAgICBuZXdfc2l6ZSA9
IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKiBzaXplb2YoIGludCApOwotCi0gICAgICAgIGlm
ICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3Rh
Y2sgPSAoaW50ICopIHBwYWxsb2MobmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBwcmVhbGxvYygo
dm9pZCAqKSB5eWctPnl5X3N0YXJ0X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAg
ICAgICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBtZW1vcnkgZXhwYW5kaW5nIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayIgKTsK
LSAgICAgICAgfQotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNr
X3B0cisrXSA9IFlZX1NUQVJUOwotCi0gICAgQkVHSU4obmV3X3N0YXRlKTsKLX0KLQotICAgIHN0
YXRpYyB2b2lkIHl5X3BvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYg
KCAtLXl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIDwgMCApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCAic3RhcnQtY29uZGl0aW9uIHN0YWNrIHVuZGVyZmxvdyIgKTsKLQotICAgIEJFR0lOKHl5Zy0+
eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHJdKTsKLX0KLQotICAgIHN0YXRp
YyBpbnQgeXlfdG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFdOwotfQotCi0j
aWZuZGVmIFlZX0VYSVRfRkFJTFVSRQotI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgotI2VuZGlm
Ci0KLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4i
LCBtc2cgKTsKLSAgICBleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0KLQotLyogUmVkZWZpbmUg
eXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCi0KLSN1bmRlZiB5eWxl
c3MKLSNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5
bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21h
Y3JvX2FyZyk7XAotICAgICAgICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
Ci0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwK
LSAgICAgICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0gICAgICAg
ICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5bGVzc19tYWNy
b19hcmc7IFwKLSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotLyogQWNjZXNzb3IgIG1l
dGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KLQotLyoqIEdl
dCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJh
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlleHRyYTsKLX0KLQotLyoq
IEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhl
IGN1cnJlbnQgY29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi1pbnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXljb2x1bW47Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0
IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1G
SUxFICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5aW47
Ci19Ci0KLS8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICByZXR1cm4geXlvdXQ7Ci19Ci0KLS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0
aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi1pbnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0
dXJuIHl5bGVuZzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0KLWNoYXIgKnBwZ2V0X3RleHQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQg
dGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUg
c2Nhbm5lci4KLSAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwot
fQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVt
YmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBw
cHNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0gICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlz
dHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlf
ZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nh
bm5lcik7IAotICAgIAotICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQg
dGhlIGN1cnJlbnQgY29sdW1uLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9jb2x1bW4gKGludCAg
Y29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBjb2x1bW4g
aXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAo
ISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRf
Y29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5
eWNvbHVtbiA9IGNvbHVtbl9ubzsKLX0KLQotLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlz
IGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKLSAqIGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJh
bSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgotICovCi12b2lkIHBwc2V0
X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9
IGluX3N0ciA7Ci19Ci0KLXZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIHl5b3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWludCBwcGdldF9k
ZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7
Ci19Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKLX0KLQotLyogQWNjZXNzb3IgbWV0
aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWx2YWw7Ci19Ci0KLXZvaWQgcHBz
ZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLX0KLQotWVlMVFlQRSAqcHBnZXRfbGxvYyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZv
aWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLX0KLSAgICAKLS8qIFVzZXItdmlz
aWJsZSBBUEkgKi8KLQotLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRl
cyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCi0gKiB0aGUgT05MWSByZWVudHJhbnQgZnVu
Y3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQu
Ci0gKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5z
dGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgotICovCi0KLWludCBwcGxleF9pbml0KHl5c2Nhbl90
KiBwdHJfeXlfZ2xvYmFscykKLQotewotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsK
LSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
ICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5
Z3V0c190ICksIE5VTEwgKTsKLQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0g
ICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAv
KiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4g
TGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFs
cywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLQotICAgIHJldHVybiB5eV9pbml0X2ds
b2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotLyogcHBsZXhfaW5pdF9leHRyYSBoYXMg
dGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKLSAq
IGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBO
b3RlIGhvd2V2ZXIsIHRoYXQKLSAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBh
cyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAotICogaXMgdGhlIHJlYXNv
biwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFy
YXRpb24pLgotICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQg
d2lsbCBiZSBhdmFpbGFibGUgdG8gcHBhbGxvYyBpbgotICogdGhlIHl5ZXh0cmEgZmllbGQuCi0g
Ki8KLQotaW50IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQs
eXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkKLQotewotICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1t
eV95eWd1dHM7Ci0KLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXln
dXRzKTsKLQotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8g
PSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAqcHRyX3l5X2ds
b2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAm
ZHVtbXlfeXlndXRzICk7Ci0gICAgCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsK
LSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAK
LSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCi0gICAgeXlfaW5p
dF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0
cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotICAgIAotICAgIHBw
c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7Ci0gICAgCi0gICAg
cmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi1zdGF0aWMg
aW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAvKiBJbml0
aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4K
LSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28g
ZG9uJ3QgYWxsb2NhdGUgaGVyZS4KLSAgICAgKi8KLQotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCA9IDA7Ci0gICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKLSAg
ICB5eWctPnl5X2luaXQgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnQgPSAwOwotCi0gICAgeXlnLT55
eV9zdGFydF9zdGFja19wdHIgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAw
OwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKLQotLyogRGVmaW5lZCBpbiBtYWlu
LmMgKi8KLSNpZmRlZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAgIHl5b3V0ID0g
c3Rkb3V0OwotI2Vsc2UKLSAgICB5eWluID0gKEZJTEUgKikgMDsKLSAgICB5eW91dCA9IChGSUxF
ICopIDA7Ci0jZW5kaWYKLQotICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8g
b24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKLSAgICAgKiBwcGxleF9pbml0KCkKLSAg
ICAgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCBy
ZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgcHBsZXhfZGVzdHJv
eSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFj
aywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlfQ1VSUkVOVF9CVUZG
RVIpewotICAgICAgICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICAgICAg
cHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlz
Y2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0
cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJlZSh5eWctPnl5
X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9
IE5VTEw7Ci0KLSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4g
YSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHBwbGV4KCkg
aXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xv
YmFscyggeXlzY2FubmVyKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVu
dHJhbnQgb25seSkuICovCi0gICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0g
ICAgeXlzY2FubmVyID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFs
IHV0aWxpdHkgcm91dGluZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9p
ZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgZm9yICggaSA9
IDA7IGkgPCBuOyArK2kgKQotICAgICAgICBzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNp
ZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBj
aGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgbjsKLSAg
ICBmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKLSAgICAgICAgOwotCi0gICAgcmV0dXJuIG47Ci19
Ci0jZW5kaWYKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKLX0KLQotdm9p
ZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIC8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcg
YWNjb21tb2RhdGVzIGJvdGgKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciog
Z2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJp
YyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJlY2F1c2UgYm90
aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLSAgICAgKiBh
bnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNp
b25zCi0gICAgICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAgICovCi0gICAg
cmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lk
IHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBmcmVlKCAo
Y2hhciAqKSBwdHIgKTsgICAvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8K
LX0KLQotI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3RkOjpzdHJpbmcqIGV4
dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBp
bnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJ
RVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFT
U0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0g
ICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBp
ID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltp
XSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmlu
ZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1l
c3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNp
emUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9m
KCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5v
bmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24o
cHBnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5w
dXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHBwc2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29k
ZUxvY2F0aW9uKGxpbmUsIGZpbGUpLG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5wdXQt
PnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJvcigpID09IHBw
OjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
VE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
bnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQobUxl
eGVyID09IE5VTEwpOwotCi0gICAgaWYgKHBwbGV4X2luaXRfZXh0cmEodGhpcywmbUxleGVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUxleGVyKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFT
U0VSVChtTGV4ZXIpOwotCi0gICAgcHBsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9
IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dGFiLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNmFhMC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF90YWIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3MiArMCwwIEBACi0vKiBBIEJpc29u
IHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW1wbGVt
ZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmln
aHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlv
dSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwg
b2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAg
IHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBp
dHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2Rp
ZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRp
dmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0
b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNp
YWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3Vs
dGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9u
LgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIEMg
TEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQot
ICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4g
ICovCi0KLS8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkg
b3IgWVksIHRvIGF2b2lkCi0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMg
c2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdo
dCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0gICBUaGVyZSBhcmUgc29t
ZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCi0gICBkZWZp
bmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBP
TgotICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElkZW50aWZ5IEJpc29uIG91
dHB1dC4gICovCi0jZGVmaW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNk
ZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCi0KLS8qIFNrZWxldG9uIG5hbWUuICAqLwotI2Rl
ZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBwYXJzZXJzLiAgKi8KLSNk
ZWZpbmUgWVlQVVJFIDEKLQotLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KLSNkZWZpbmUgWVlMU1Bf
TkVFREVEIDEKLQotLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVz
LiAgKi8KLSNkZWZpbmUgeXlwYXJzZSBwcHBhcnNlCi0jZGVmaW5lIHl5bGV4ICAgcHBsZXgKLSNk
ZWZpbmUgeXllcnJvciBwcGVycm9yCi0jZGVmaW5lIHl5bHZhbCAgcHBsdmFsCi0jZGVmaW5lIHl5
Y2hhciAgcHBjaGFyCi0jZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHBw
bmVycnMKLSNkZWZpbmUgeXlsbG9jIHBwbGxvYwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZ
WVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGlu
dG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAg
ICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNI
ID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAg
ICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9F
TFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUs
Ci0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hf
UFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJT
SU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9
IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0g
Mjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3Ngot
ICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUg
SEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAy
NjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZp
bmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVE
IDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNk
ZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZp
bmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhB
U0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxP
QVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLS8qIENvcHkg
dGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19w
YXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5l
IFlZTEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0KLQotLyog
RW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAw
Ci0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZk
ZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlF
UlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlm
Ci0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFC
TEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlT
VFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNU
WVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6
VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTg3
IG9mIHlhY2MuYy4gICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBF
IC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9J
U19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLSNp
ZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlw
ZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2Nv
bHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwot
IyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3
biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lT
X1RSSVZJQUwgMQotI2VuZGlmCi0KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBk
ZWNsYXJhdGlvbnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZ
TFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUq
IGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENv
bmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0
YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotCi0K
LS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNob3J0Ci0jIHVuZGVmIHNo
b3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDgg
eXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7
Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlw
ZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdHlw
ZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5
eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgotdHlwZWRlZiBZWVRZ
UEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDE2Ci10eXBlZGVm
IFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZkZWYgX19TSVpFX1RZ
UEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxpZiBkZWZpbmVkIHNp
emVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVf
VCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICBpbmNsdWRlIDxz
dGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZ
U0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50Ci0j
IGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkK
LQotI2lmbmRlZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVfTkxTCi0jICAg
aW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j
ICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCi0j
ICBlbmRpZgotIyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dp
ZAotIyBlbmRpZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5n
cyBieSAidXNpbmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVD
X18KLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UKLSMgZGVmaW5lIFlZVVNF
KGUpIC8qIGVtcHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8g
c3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCi0jaWZuZGVm
IGxpbnQKLSMgZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQotI2Vsc2UKLXN0
YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIGk7Ci19
Ci0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQot
Ci0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNl
c3Nhcnkgc3ltYm9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICBpZiBZ
WVNUQUNLX1VTRV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAgICBkZWZpbmUgWVlTVEFD
S19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9B
UkdfSU5DUgotIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIF9fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgIGluY2x1ZGUgPG1h
bGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgIGRlZmluZSBh
bGxvY2EgX2FsbG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2Nh
Ci0jICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBpbmNsdWRlIDxzdGRs
aWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICAgaWZuZGVmIF9T
VERMSUJfSAotIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAgZW5kaWYKLSMgICAgZW5k
aWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZWVNUQUNLX0FMTE9D
Ci0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDAp
KQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRoZSBPUyBtaWdodCBn
dWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywK
LSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBT
byB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRz
IDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAgIHRvIGFsbG93IGZv
ciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KLSMg
ICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAy
MDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExP
QwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9D
X01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVN
Ci0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2Mp
IFwKLSAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKLSMgICBp
bmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
IGlmbmRlZiBfU1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgZW5kaWYKLSMg
IGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0j
ICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0j
ICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVk
IGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhIGRl
ZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYgKCEgZGVmaW5l
ZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8
IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAg
ICAgICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFM
KSkpCi0KLS8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBt
ZW1iZXIuICAqLwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlT
VFlQRSB5eXZzOwotICAgIFlZTFRZUEUgeXlsczsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBt
YXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0j
IGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkK
LQotLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0
YWNrcywgZWFjaCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllU
RVMoTikgXAotICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlT
VFlQRSkgKyBzaXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJ
TVVNKQotCi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09Q
WQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlD
T1BZKFRvLCBGcm9tLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20s
IChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFko
VG8sIEZyb20sIENvdW50KSAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgeyAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAg
IFwKLSAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAgICAg
ICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLS8qIFJl
bG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQot
ICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFu
ZCBuZXcgbnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZl
cyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEg
cHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAgIHN0YWNrLiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNp
emUpOyAgICAgICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5TdGFjazsgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0
YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICB5eXB0ciArPSB5eW5ld2J5dGVzIC8g
c2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRpZgotCi0vKiBZ
WUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2Rl
ZmluZSBZWUZJTkFMICAyCi0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8K
LSNkZWZpbmUgWVlMQVNUICAgMjQ3Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWlu
YWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA0NwotLyogWVlOTlRTIC0tIE51bWJlciBvZiBu
b250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDEyCi0vKiBZWU5SVUxFUyAtLSBOdW1i
ZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjIKLS8qIFlZTlJVTEVTIC0tIE51
bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDkxCi0KLS8qIFlZVFJBTlNM
QVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVgu
ICAqLwotI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDI3NgotCi0j
ZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgodW5z
aWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRF
RlRPSykKLQotLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29y
cmVzcG9uZGluZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJh
bnNsYXRlW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAyMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDMsICAgICAyLCAgICAgMiwgICAg
IDIsICAgIDM3LCAgICA0MCwgICAgIDIsCi0gICAgICAyMywgICAgMjQsICAgIDM2LCAgICAzMywg
ICAgMjUsICAgIDM0LCAgICAzMiwgICAgMzUsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDQsICAgIDQ1
LAotICAgICAgMjgsICAgIDQyLCAgICAyOSwgICAgNDYsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgIDI2LCAgICAgMiwgICAgMjcsICAgIDM4LCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgMzAsICAgIDM5LCAgICAzMSwgICAgNDEsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBv
ZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAgIFlZUkhTLiAg
Ki8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAgICAgIDAsICAg
ICAwLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNiwgICAg
MTksCi0gICAgICAyMywgICAgMzAsICAgIDM0LCAgICAzOCwgICAgNDIsICAgIDQ2LCAgICA1MCwg
ICAgNTMsICAgIDU2LCAgICA1OSwKLSAgICAgIDYyLCAgICA2NSwgICAgNjgsICAgIDcxLCAgICA3
MiwgICAgNzQsICAgIDc1LCAgICA3NywgICAgODEsICAgIDgzLAotICAgICAgODYsICAgIDg4LCAg
ICA5MSwgICAgOTQsICAgIDk5LCAgIDEwMSwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMDksCi0g
ICAgIDExMSwgICAxMTMsICAgMTE1LCAgIDExNywgICAxMTksICAgMTIxLCAgIDEyMywgICAxMjUs
ICAgMTI3LCAgIDEyOSwKLSAgICAgMTMxLCAgIDEzMywgICAxMzUsICAgMTM3LCAgIDEzOSwgICAx
NDEsICAgMTQzLCAgIDE0NSwgICAxNDcsICAgMTQ5LAotICAgICAxNTEsICAgMTUzLCAgIDE1NQot
fTsKLQotLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhT
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KLXsKLSAgICAgIDQ4LCAg
ICAgMCwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIC0xLCAgICA1MCwgICAgLTEsICAg
IDUxLAotICAgICAgLTEsICAgIDIyLCAgICAtMSwgICAgNTUsICAgIDIyLCAgICAtMSwgICAgIDMs
ICAgIDIyLCAgICAtMSwgICAgMTcsCi0gICAgICA1MiwgICAgMjIsICAgIC0xLCAgICAxOCwgICAg
MjMsICAgIDUzLCAgICAyNCwgICAgNTIsICAgIDIyLCAgICAtMSwKLSAgICAgICA0LCAgICAyMSwg
ICAgMjIsICAgIC0xLCAgICAgNSwgICAgNTQsICAgIDIyLCAgICAtMSwgICAgIDYsICAgIDIxLAot
ICAgICAgMjIsICAgIC0xLCAgICAgNywgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDksICAgIDU0
LCAgICAyMiwgICAgLTEsCi0gICAgICAgOCwgICAgMjIsICAgIC0xLCAgICAxMCwgICAgMjIsICAg
IC0xLCAgICAxMiwgICAgMjIsICAgIC0xLCAgICAxMywKLSAgICAgIDIyLCAgICAtMSwgICAgMTQs
ICAgIDIyLCAgICAtMSwgICAgMTUsICAgIDIyLCAgICAtMSwgICAgMTYsICAgIDIyLAotICAgICAg
LTEsICAgIC0xLCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDUzLCAgICAy
NSwgICAgMjEsCi0gICAgICAtMSwgICAgNTYsICAgIC0xLCAgICA1NCwgICAgNTYsICAgIC0xLCAg
ICA1NywgICAgLTEsICAgIDU1LCAgICA1NywKLSAgICAgIC0xLCAgICAxMSwgICAgMjEsICAgIC0x
LCAgICAxMSwgICAgMjMsICAgIDIxLCAgICAyNCwgICAgLTEsICAgIDU3LAotICAgICAgLTEsICAg
IDU4LCAgICAtMSwgICAgMTksICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIxLCAgICAtMSwgICAg
MjYsCi0gICAgICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwg
ICAgMjMsICAgIC0xLCAgICAyNCwKLSAgICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDMxLCAgICAt
MSwgICAgMzIsICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LAotICAgICAgLTEsICAgIDM1LCAg
ICAtMSwgICAgMzYsICAgIC0xLCAgICAzNywgICAgLTEsICAgIDM4LCAgICAtMSwgICAgMzksCi0g
ICAgICAtMSwgICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMs
ICAgIC0xLCAgICA0NCwKLSAgICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDI1LCAgICAtMSwgICAg
NDYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVs
ZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA2MywgICAgNjMsICAgIDY1LCAgICA2OSwgICAg
NzAsICAgIDc0LCAgICA3NSwgICAgODQsICAgIDg1LAotICAgICAgODgsICAgIDkxLCAgICA5NCwg
ICAgOTcsICAgMTAwLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDExMCwgICAxMTEsCi0gICAgIDEx
MiwgICAxMTMsICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIyLCAgIDEyMywgICAxMjcsICAgMTMz
LCAgIDEzNywKLSAgICAgMTQ0LCAgIDE0OCwgICAxNTUsICAgMTU3LCAgIDE1OSwgICAxNjMsICAg
MTY2LCAgIDE2OSwgICAxNzIsICAgMTc4LAotICAgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIs
ICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsCi0gICAgIDE4OSwgICAx
OTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsICAgMTk3LCAgIDE5
OCwKLSAgICAgMTk5LCAgIDIwMCwgICAyMDEKLX07Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcgfHwg
WVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5BTUVbU1lNQk9MLU5VTV0g
LS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAgRmlyc3QsIHRoZSB0
ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8K
LXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAiJGVuZCIsICJlcnJv
ciIsICIkdW5kZWZpbmVkIiwgIkhBU0giLCAiSEFTSF9VTkRFRiIsICJIQVNIX0lGIiwKLSAgIkhB
U0hfSUZERUYiLCAiSEFTSF9JRk5ERUYiLCAiSEFTSF9FTFNFIiwgIkhBU0hfRUxJRiIsICJIQVNI
X0VORElGIiwKLSAgIkRFRklORUQiLCAiSEFTSF9FUlJPUiIsICJIQVNIX1BSQUdNQSIsICJIQVNI
X0VYVEVOU0lPTiIsICJIQVNIX1ZFUlNJT04iLAotICAiSEFTSF9MSU5FIiwgIkhBU0hfREVGSU5F
X09CSiIsICJIQVNIX0RFRklORV9GVU5DIiwgIklOVF9DT05TVEFOVCIsCi0gICJGTE9BVF9DT05T
VEFOVCIsICJJREVOVElGSUVSIiwgIidcXG4nIiwgIicoJyIsICInKSciLCAiJywnIiwgIidbJyIs
Ci0gICInXSciLCAiJzwnIiwgIic+JyIsICIneyciLCAiJ30nIiwgIicuJyIsICInKyciLCAiJy0n
IiwgIicvJyIsICInKiciLAotICAiJyUnIiwgIideJyIsICInfCciLCAiJyYnIiwgIid+JyIsICIn
PSciLCAiJyEnIiwgIic6JyIsICInOyciLCAiJz8nIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAi
bGluZSIsICJ0ZXh0X2xpbmUiLCAiY29udHJvbF9saW5lIiwKLSAgInJlcGxhY2VtZW50X2xpc3Qi
LCAicGFyYW1ldGVyX2xpc3QiLCAiY29uZGl0aW9uYWxfbGlzdCIsICJ0b2tlbl9saXN0IiwKLSAg
ImNvbmRpdGlvbmFsX3Rva2VuIiwgInRva2VuIiwgIm9wZXJhdG9yIiwgMAotfTsKLSNlbmRpZgot
Ci0jIGlmZGVmIFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9r
ZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAgICAgICAwLCAgIDI1Niwg
ICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAot
ICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcy
LCAgIDI3MywgICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgIDEwLCAgICA0MCwgICAgNDEsICAg
IDQ0LCAgICA5MSwgICAgOTMsICAgIDYwLCAgICA2MiwKLSAgICAgMTIzLCAgIDEyNSwgICAgNDYs
ICAgIDQzLCAgICA0NSwgICAgNDcsICAgIDQyLCAgICAzNywgICAgOTQsICAgMTI0LAotICAgICAg
MzgsICAgMTI2LCAgICA2MSwgICAgMzMsICAgIDU4LCAgICA1OSwgICAgNjMKLX07Ci0jIGVuZGlm
Ci0KLS8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlO
IGRlcml2ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAg
ICAgIDAsICAgIDQ3LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAg
ICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUx
LCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAg
IDUyLCAgICA1MiwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTQsICAgIDU0LAotICAgICAgNTUs
ICAgIDU1LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1Nywg
ICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1
OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAg
ICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4
LCAgICA1OAotfTsKLQotLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2lu
ZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXIyW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDMsCi0gICAgICAgNiwgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMywgICAg
IDEsICAgICAyLAotICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMQotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFN
RV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCi0gICBTVEFURS1OVU0g
d2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8K
LSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzYsICAgIDM3
LAotICAgICAgMzgsICAgICA2LCAgICA0MywgICAgNDQsICAgIDYxLCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDUsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAs
ICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKLSAgICAgIDU2LCAgICA1NywgICAg
NTgsICAgIDU5LCAgICA2MCwgICAgNjIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICAwLAotICAg
ICAgMzAsICAgIDM1LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjgsICAgIDM0LCAg
ICAgMCwgICAgIDAsCi0gICAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLCAgICAyNCwKLSAgICAgIDI1LCAgICAgNywgICAgMzEsICAg
IDExLCAgICAzMiwgICAgIDAsICAgIDEyLCAgICAyOSwgICAgMTMsICAgIDE0LAotICAgICAgMTUs
ICAgICA5LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDMzLCAgICAgMCwg
ICAgMjcsCi0gICAgICAxMAotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgMSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNjgsICAgIDgzLCAgICA1NSwgICAgNjksICAgIDU2LAot
ICAgICAgNTcsICAgIDUxCi19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZ
WVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRFLU5VTS4gICovCi0jZGVm
aW5lIFlZUEFDVF9OSU5GIC01NQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9
Ci17Ci0gICAgIC01NSwgICAgNzMsICAgLTU1LCAgIC0xNywgICAtMTgsICAgMTQ1LCAgIC0xMCwg
ICAgLTksICAgLTE2LCAgIDE0NSwKLSAgICAgIC04LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjcsICAgMjAxLCAgICAyOCwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0g
ICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgMTczLAotICAgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAgMzAsICAgLTE5LCAgICAtMywgICAtNTUsICAgLTU1LCAgICAzMSwgICAgMzIsCi0gICAgIC01
NSwgICAxMDksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDMz
LCAgIDIwMSwKLSAgICAgIDI5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtMTUs
ICAgLTExLCAgIDIwMSwgICAgMzYsICAgLTU1LCAgICAzNywgICAtNTUsCi0gICAgIC01NQotfTsK
LQotLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXBnb3RvW10gPQotewotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0y
NywgICAtNTUsICAgIDUxLCAgICA2MCwgICAtNTQsCi0gICAgICAtMSwgICAtNTUKLX07Ci0KLS8q
IFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1O
VU0uICBJZgotICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVk
dWNlIHRoZSBydWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywg
ZG8gd2hhdCBZWURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3Iu
ICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXl0YWJsZVtdID0KLXsKLSAgICAgIDUwLCAgICA3NywgICAgNzQsICAgIDUzLCAgICA3NSwgICAg
NTIsICAgIDYwLCAgICA3NywgICAgNTQsICAgIDg1LAotICAgICAgODYsICAgIDU4LCAgICA1OSwg
ICAgODcsICAgIDYyLCAgICA1MCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzYsCi0gICAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwKLSAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA3MiwgICAgNjcsCi0gICAgICA4MiwgICAg
NzAsICAgIDczLCAgICA3OCwgICAgNzksICAgIDgxLCAgICA4NCwgICAgODksICAgIDg4LCAgICA5
MCwKLSAgICAgIDYxLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgNzIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAw
LCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgNTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAg
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDU0
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgs
ICAgIDE5LAotICAgICAgMjAsICAgIDgwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKLSAgICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDU0LCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
ICAwLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAg
ICAgNDQsICAgIDQ1LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3MSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NQotfTsKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5Y2hlY2tbXSA9Ci17Ci0gICAgICAgMSwgICAgNTUsICAgIDIxLCAgICAyMSwgICAgMjMsICAg
IDIyLCAgICAyMiwgICAgNjEsICAgIDExLCAgICAyNCwKLSAgICAgIDI1LCAgICAyMSwgICAgMjEs
ICAgIDI0LCAgICAyMiwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsCi0gICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNDksICAgIDIyLAotICAgICAgMjEsICAg
IDIzLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDIxLCAgICA4NSwgICAg
MjIsCi0gICAgICAgOSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDY5LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAt
MSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDg1LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0g
ICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAx
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5
LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAtMSwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAg
ICAgIDQ1LCAgICA0NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYKLX07Ci0KLS8qIFlZU1RPU1tTVEFURS1OVU1dIC0t
IFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1ib2wgb2Ygc3Rh
dGUgU1RBVEUtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQot
ewotICAgICAgIDAsICAgIDQ4LCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1NSwKLSAgICAgIDU3LCAgICA1OCwgICAgMjIsICAg
IDIxLCAgICAxMSwgICAgNTQsICAgIDU2LCAgICA1NywgICAgMjEsICAgIDIxLAotICAgICAgMjIs
ICAgIDU0LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA1Miwg
ICAgNTUsCi0gICAgICAyMywgICAgMjIsICAgIDU3LCAgICAyMiwgICAgMjEsICAgIDIzLCAgICAy
MiwgICAgNTYsICAgIDIyLCAgICAyMiwKLSAgICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDUzLCAg
ICAyMSwgICAgMjQsICAgIDI1LCAgICAyNCwgICAgNTIsICAgIDIxLAotICAgICAgMjIKLX07Ci0K
LSNkZWZpbmUgeXllcnJvayAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmlu
ICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAgICgtMikKLSNkZWZpbmUg
WVlFT0YgICAgICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8geXlhY2NlcHRsYWIKLSNk
ZWZpbmUgWVlBQk9SVCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IgICAgIGdv
dG8geXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9y
LiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRp
b24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2
ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCi0KLSNk
ZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgotCi0jZGVmaW5lIFlZUkVDT1ZFUklORygp
ICAoISF5eWVycnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAg
ICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKSAgICAgICAgICAgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFyID0gKFRva2VuKTsgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsgICAgICAgICAg
ICAgICBcCi0gICAgICBZWVBPUFNUQUNLICgxKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXll
cnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVw
IikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKFlZSUQgKDApKQotCi0KLSNk
ZWZpbmUgWVlURVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAyNTYKLQotCi0vKiBZWUxM
T0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4K
LSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hp
Y2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCku
ICAqLwotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxM
T0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAg
ICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGlu
ZTsgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEp
LmZpcnN0X2NvbHVtbjsgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xP
QyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4g
ID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJy
ZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgIFwKLSAgICAg
ICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICBcCi0gICAgICAo
Q3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0gICAgICBcCi0g
ICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAgICAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkK
LSNlbmRpZgotCi0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBv
biB0aGUgc3RyZWFtLgotICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6
IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKLSAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hl
biB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KLQotI2lmbmRlZiBZWV9MT0NB
VElPTl9QUklOVAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSMgIGRlZmluZSBZWV9MT0NBVElP
Tl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgIFwKLSAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVk
LSVkLiVkIiwgICAgICAgICAgXAotICAgICAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZp
cnN0X2NvbHVtbiwgXAotICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29s
dW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZv
aWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcg
d2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRl
ZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCi0jZWxzZQot
IyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0jZW5kaWYKLQotLyogRW5h
YmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYg
WVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZp
bmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBSSU5URiBB
cmdzOyAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1Zykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0
bGUpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9u
LCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBj
b250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0
cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5
eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZh
bHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNv
bnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47
Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQ
UklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5
eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7
Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
YnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQg
eXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBj
b25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZv
aWQKLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRp
b25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25z
dCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBp
ZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAl
cyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9MT0NBVElPTl9QUklOVCAo
eXlvdXRwdXQsICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICI6ICIpOwot
ICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxv
Y2F0aW9ucCwgY29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJv
bSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5
X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCi0j
ZWxzZQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5
cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKLSNlbmRpZgotewotICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsgYm90dG9tIDw9IHRvcDsg
Kytib3R0b20pCi0gICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsKLSAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5
eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICBcCi19IHdoaWxl
IChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1
Y2VkLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMg
dm9pZAoteXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGlu
dCB5eXJ1bGUsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9y
ZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQotICAgIFlZU1RZUEUg
Knl5dnNwOwotICAgIFlZTFRZUEUgKnl5bHNwOwotICAgIGludCB5eXJ1bGU7Ci0gICAgcHA6OkNv
bnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsK
LSAgaW50IHl5aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07
Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAl
bHUpOlxuIiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyogVGhlIHN5bWJvbHMg
YmVpbmcgcmVkdWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykK
LSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0s
Ci0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAgICAg
ICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAgICAgLCBjb250
ZXh0KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotfQotCi0jIGRlZmlu
ZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICBc
Ci0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLS8qIE5v
bnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQg
c28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQgeXlkZWJ1
ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQotIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQo
UnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0tIGluaXRp
YWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJTklUREVQVEgK
LSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEggLS0gbWF4
aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0gICBpZiB0
aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAgRG8gbm90
IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYK
LSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCi0g
ICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAg
Ki8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCi0jZW5k
aWYKLQotDAotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVuCi0jICBp
ZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0
cmxlbiBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8K
LSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgWVlTSVpF
X1QKLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlTSVpFX1QK
LXl5c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgotewotICBZ
WVNJWkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykK
LSAgICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQot
IyBpZm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NU
UklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5
Ci0jICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNz
IG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5IChj
aGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXl5
c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25zdCBjaGFy
ICp5eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0IGNoYXIg
Knl5cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQotICAg
IGNvbnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQot
IyBpZm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNU
UiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBiYWNrc2xh
c2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBoZXVyaXN0
aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmlu
ZwotICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhl
ciB0aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0
bmFtZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJu
IHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4uICAqLwot
c3RhdGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0
cikKLXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1QgeXluID0g
MDsKLSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7KQotICAg
IHN3aXRjaCAoKisreXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAn
LCc6Ci0gICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAgY2FzZSAnXFwn
OgotICAgICAgICBpZiAoKisreXlwICE9ICdcXCcpCi0gICAgICAgICAgZ290byBkb19ub3Rfc3Ry
aXBfcXVvdGVzOwotICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOwotICAgICAg
ICB5eW4rKzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAo
eXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47
Ci0gICAgICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBpZiAoISB5
eXJlcykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlzdHBjcHkg
KHl5cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRvIFlZUkVT
VUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KLSAgIFlZQ0hB
UiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29w
aWVkLAotICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VM
VCBpcyBudWxsLCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2Us
IHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNzYWdlIHdpbGwg
ZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZwotICAg
c2l6ZSBjYWxjdWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4X2Vycm9yIChj
aGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17Ci0gIGludCB5eW4gPSB5
eXBhY3RbeXlzdGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZ
WUxBU1QpKQotICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAgICAgaW50IHl5dHlwZSA9
IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVy
ciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7
Ci0gICAgICBZWVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7
Ci0gICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgICAg
IGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAgICAg
aW50IHl5eDsKLQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhl
IHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0gICAgIGNvbnN0cnVjdGVkIG9uIHRoZSBm
bHkuICAqLwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKLSAgICAg
IFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKLSAgICAg
IFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsK
LSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3Ig
JXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBl
Y3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAgICAgIGNoYXIgKnl5Zm10
OwotICAgICAgY2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4
cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKLSAgICAgIHN0YXRpYyBj
aGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOwotICAgICAgc3RhdGlj
IGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFyIHl5Zm9ybWF0W3NpemVv
ZiB5eXVuZXhwZWN0ZWQKLSAgICAgICAgICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQotICAg
ICAgICAgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQotICAgICAgICAg
ICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOwotICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXgg
PSB5eWV4cGVjdGluZzsKLQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUg
dG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICBZWUNIRUNLLiAgKi8KLSAgICAgIGlu
dCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3RheSB3aXRoaW4g
Ym91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBpbnQgeXljaGVj
a2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8
IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQgeXljb3VudCA9
IDE7Ci0KLSAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAgeXlmbXQgPSB5
eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAoeXl4ID0geXl4
YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9
PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotICAgICAgewotICAgICAgICBpZiAoeXljb3VudCA9
PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAgICAgIHsKLSAgICAgICAgeXlj
b3VudCA9IDE7Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgIHl5Zm9ybWF0W3Np
emVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAg
IH0KLSAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgeXlz
aXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLSAgICAgICAgeXlz
aXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgICAgeXlzaXplID0geXlz
aXplMTsKLSAgICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKLSAgICAg
ICAgeXlwcmVmaXggPSB5eW9yOwotICAgICAgfQotCi0gICAgICB5eWYgPSBZWV8oeXlmb3JtYXQp
OwotICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAgICAgeXlzaXpl
X292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
Ci0KLSAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCi0gICAgcmV0dXJuIFlZU0laRV9NQVhJTVVN
OwotCi0gICAgICBpZiAoeXlyZXN1bHQpCi0gICAgewotICAgICAgLyogQXZvaWQgc3ByaW50Ziwg
YXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICAgICAgRG9u
J3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KLSAgICAg
ICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICov
Ci0gICAgICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKLSAgICAgIGludCB5eWkgPSAwOwotICAgICAg
d2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKLSAgICAgICAgewotICAgICAgICAgIGlmICgq
eXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0gICAgICAgIHsK
LSAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0gICAgICAg
ICAgeXlmICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICB5eXArKzsKLSAgICAgICAgICB5eWYrKzsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgICAgcmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJC
T1NFICovCi0MCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQot
LypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
c3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZ
WVNUWVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250
ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZh
bHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hhciAqeXltc2c7Ci0gICAg
aW50IHl5dHlwZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZWUxUWVBFICp5eWxvY2F0
aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBZWVVTRSAoeXl2
YWx1ZXApOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0KLSAg
aWYgKCF5eW1zZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJPTF9QUklOVCAo
eXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQotICBzd2l0Y2ggKHl5dHlw
ZSkKLSAgICB7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQotfQotDAotCi0v
KiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCi0jaWZk
ZWYgWVlQQVJTRV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cwotaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UKLWludCB5eXBh
cnNlICgpOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiBkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChwcDo6Q29udGV4
dCogY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4g
IHwKLWAtLS0tLS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0Vf
UEFSQU0pCi0jZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZ
UEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAocHA6OkNv
bnRleHQqIGNvbnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250ZXh0KQotICAgIHBwOjpD
b250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyogVGhlIGxvb2stYWhlYWQg
c3ltYm9sLiAgKi8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUg
bG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0KLS8qIE51bWJlciBvZiBz
eW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLS8qIExvY2F0aW9uIGRhdGEg
Zm9yIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYzsKLQotICBpbnQg
eXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9r
ZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5
ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xh
dGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9W
RVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVk
IHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2di
dWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0K
LSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAg
ICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3Rh
Y2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8g
cmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAg
Ki8KLSAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5
eXNzID0geXlzc2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgLyogVGhlIHNlbWFudGlj
IHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZ
UEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAgLyogVGhlIGxvY2F0aW9u
IHN0YWNrLiAgKi8KLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07Ci0gIFlZTFRZUEUgKnl5
bHMgPSB5eWxzYTsKLSAgWVlMVFlQRSAqeXlsc3A7Ci0gIC8qIFRoZSBsb2NhdGlvbnMgd2hlcmUg
dGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KLSAgWVlMVFlQRSB5eWVycm9yX3Jhbmdl
WzJdOwotCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAo
TiksIHl5bHNwIC09IChOKSkKLQotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRI
OwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5k
IGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUg
eXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9u
IHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8g
c3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0g
IHl5ZXJyc3RhdHVzID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7ICAg
ICAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8qIEluaXRpYWxpemUgc3Rh
Y2sgcG9pbnRlcnMuCi0gICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlv
biBzdGFjawotICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUg
c3RhdGUgc3RhY2suCi0gICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxp
emVkLiAgKi8KLQotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2czsKLSAgeXlsc3AgPSB5
eWxzOwotI2lmIFlZTFRZUEVfSVNfVFJJVklBTAotICAvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0
IGxvY2F0aW9uIGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4gICovCi0gIHl5bGxvYy5maXJzdF9saW5l
ICAgPSB5eWxsb2MubGFzdF9saW5lICAgPSAxOwotICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXls
bG9jLmxhc3RfY29sdW1uID0gMDsKLSNlbmRpZgotCi0gIGdvdG8geXlzZXRzdGF0ZTsKLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4g
eXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBjYXNlcywgd2hl
biB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0gICAgIGhhdmUg
anVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFj
a3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0geXlzdGF0ZTsK
LQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7Ci0gICAgICAv
KiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1l
bnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7Ci0KLSNp
ZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJl
YWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNlIHNvIHRoYXQg
dGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBtZW1vcnkuICAq
LwotICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0g
eXlzczsKLSAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICBkYXRh
IGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0gICAg
ICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBt
aWdodAotICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwot
ICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAgICAgICAgJnl5
c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2czEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXlsc3ApLAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLSAgICB5eWxzID0geXlsczE7
Ci0gICAgeXlzcyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8q
IG5vIHl5b3ZlcmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8g
eXlleGhhdXN0ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93
biB3YXkuICAqLwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCi0gICAgZ290
byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAgICBpZiAoWVlN
QVhERVBUSCA8IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKLQot
ICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIHVuaW9uIHl5YWxs
b2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RB
Q0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0gICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotICAgIFlZU1RBQ0tf
UkVMT0NBVEUgKHl5dnMpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOwotIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tf
RlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cg
Ki8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5dnNwID0geXl2
cyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwotCi0gICAg
ICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0g
ICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAo
eXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFCT1JUOwotICAgIH0KLQot
ICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwot
Ci0gIGdvdG8geXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAotYC0t
LS0tLS0tLS0tKi8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3Npbmcg
Z2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBp
ZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmly
c3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhl
YWQgdG9rZW4uICAqLwotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gWVlQ
QUNUX05JTkYpCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBh
IGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyog
WVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBz
eW1ib2wuICAqLwotICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAgewotICAgICAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAgICB5eWNoYXIgPSBZWUxF
WDsKLSAgICB9Ci0KLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICB5eWNoYXIg
PSB5eXRva2VuID0gWVlFT0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5k
IG9mIGlucHV0LlxuIikpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHl5dG9rZW4gPSBZ
WVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4g
aXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0KLSAgLyogSWYgdGhlIHBy
b3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCi0g
ICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5biArPSB5eXRv
a2VuOwotICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5
dG9rZW4pCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXluXTsKLSAgaWYg
KHl5biA8PSAwKQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9O
SU5GKQotICAgIGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5
eXJlZHVjZTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwot
Ci0gIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVy
biBvZmYgZXJyb3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVzKQotICAgIHl5
ZXJyc3RhdHVzLS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLwotICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwot
Ci0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0g
IGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKLQotICB5eXN0YXRl
ID0geXluOwotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgKisreXlsc3AgPSB5eWxsb2M7Ci0gIGdv
dG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQg
YWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0gIHl5
biA9IHl5ZGVmYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVycmxh
YjsKLSAgZ290byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxl
IHRvIHJlZHVjZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYgWVlM
RU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246
Ci0gICAgIGAkJCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBz
ZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVk
IGFuZCBCaXNvbgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmlu
ZyB0byBZWVZBTAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBz
bWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkg
YmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKLQot
ICAvKiBEZWZhdWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXls
c3AgLSB5eWxlbiksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2gg
KHl5bikKLSAgICB7Ci0gICAgICAgIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29u
dGV4dC0+b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICh5eXZzcFso
MSkgLSAoMildLnRsaXN0KS0+YmVnaW4oKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5lbmQo
KSk7Ci0gICAgICAgIGRlbGV0ZSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1h
Y3JvKCh5eWxzcFsoMSkgLSAoMyldKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAo
eXl2c3BbKDEpIC0gKDMpXS5zdmFsKSwgTlVMTCwgKHl5dnNwWygyKSAtICgzKV0udGxpc3QpKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPmRlZmluZU1hY3JvKCh5eWxzcFsoMSkgLSAoNildKS5maXJzdF9saW5lLCBwcDo6TWFjcm86
OmtUeXBlRnVuYywgKHl5dnNwWygxKSAtICg2KV0uc3ZhbCksICh5eXZzcFsoMykgLSAoNildLnRs
aXN0KSwgKHl5dnNwWyg1KSAtICg2KV0udGxpc3QpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTE6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oKHl5dnNw
WygyKSAtICgzKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQot
ICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgKHl5dnNwWygyKSAt
ICgzKV0udGxpc3QpID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTM6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNv
bnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9u
YWxCbG9jayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgz
KV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhj
b250ZXh0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6Ci0KLSAgICB7ICh5eXZh
bC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjU6Ci0KLSAgICB7ICh5
eXZhbC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAo
eXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSku
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlz
dCkgPSAoeXl2c3BbKDEpIC0gKDMpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1
c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMykgLSAoMyldKS5maXJzdF9saW5lLCBJREVO
VElGSUVSLCAoeXl2c3BbKDMpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9r
ZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0g
KDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI5OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgICAg
ICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRs
aXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hf
YmFjaygoeXl2c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDMxOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgy
KV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAt
ICgyKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoKLQotICAgIHsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDM1OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcg
cHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCAoeXl2c3BbKDEpIC0gKDEp
XS5pdmFsKSwgTlVMTCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSld
KS5maXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIEZMT0FU
X0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRv
a2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEp
IC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM5OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnWyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MDoKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJ10nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQyOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnPic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MzoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJygnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICcpJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ1Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAneyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NjoK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJ30nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDc6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcuJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ4
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0
OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcvJzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDUxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA1MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNTM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA1NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNTY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd+JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDU3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPSc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA1ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyEnOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNTk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc6JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDYwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJywnOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc/JzsgO30KLSAgICBicmVh
azsKLQotCi0vKiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAgICAgZGVmYXVsdDogYnJl
YWs7Ci0gICAgfQotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2
YWwsICZ5eWxvYyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZ
X1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5eXZhbDsKLSAgKisr
eXlsc3AgPSB5eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1
Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9u
IHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAgbnVtYmVyIHJl
ZHVjZWQgYnkuICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRlID0geXlwZ290
b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3Rh
dGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAgIHl5c3RhdGUg
PSB5eXRhYmxlW3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4g
LSBZWU5UT0tFTlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3Rpbmcg
ZXJyb3IgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxh
YjoKLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQg
dGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAgICAgKyt5eW5l
cnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250
ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7Ci0gICAgWVlTSVpFX1Qg
eXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0gICAgaWYgKHl5
bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVN
KQotICAgICAgewotICAgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKLSAgICAg
ICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19N
QVhJTVVNKSkKLSAgICAgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotICAg
ICAgICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7Ci0gICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7Ci0g
ICAgICAgIGlmICh5eW1zZykKLSAgICAgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgIHl5bXNnID0geXltc2didWY7Ci0gICAgICAg
IHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotICAgICAgICAgIH0KLSAgICAgIH0KLQot
ICAgIGlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLSAgICAgIHsKLSAg
ICAgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKLSAg
ICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2cpOwotICAgICAgfQotICAgIGVs
c2UKLSAgICAgIHsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3IiKSk7Ci0gICAgICAgIGlmICh5eXNpemUgIT0gMCkKLSAgICAgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOwotICAgICAgfQotICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gIHl5ZXJy
b3JfcmFuZ2VbMF0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCi0gICAgewot
ICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9r
ZW4gYWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXlj
aGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBv
ZiBpbnB1dC4gICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICBZWUFCT1JU
OwotICAgIH0KLSAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRp
c2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250
ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0gICAgfQotICAgIH0KLQotICAvKiBFbHNl
IHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVy
cm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIg
LS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQot
ICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBp
bnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBu
ZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCov
IDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsc3Bb
MS15eWxlbl07Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdo
aWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BTVEFD
SyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7
Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJP
Ui4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAgLyogRWFjaCBy
ZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAg
IHsKLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNU
X05JTkYpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgaWYgKDAgPD0geXlu
ICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotICAgICAgICB7
Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgIGlmICgwIDwgeXluKQot
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgLyogUG9wIHRoZSBjdXJy
ZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwot
ICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKLQotICAgICAgeXllcnJvcl9y
YW5nZVswXSA9ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0g
ICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAg
WVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tf
UFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAg
IFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMV0g
PSB5eWxsb2M7Ci0gIC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywgYnV0IHdvdWxkIGNoYW5n
ZSB0aGUgbG9jYXRpb24gb2YKLSAgICAgdGhlIGxvb2stYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFi
bGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXllcnJvcl9yYW5nZSAt
IDEpLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9r
ZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZz
cCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNjZXB0bGFiIC0t
IFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3RvIHl5cmV0dXJu
OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFib3J0bGFi
IC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8geXlyZXR1cm47
Ci0KLSNpZm5kZWYgeXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlv
biBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRl
eHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxs
IHRocm91Z2guICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9G
ICYmIHl5Y2hhciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2Fy
ZGluZyBsb29rYWhlYWQiLAotICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNo
IGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KLSAg
WVlQT1BTVEFDSyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB3
aGlsZSAoeXlzc3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDog
cG9wcGluZyIsCi0gICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAg
aWYgKHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lm
IFlZRVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0g
IHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotdm9pZCB5eWVycm9yKFlZTFRZ
UEUqIGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewot
fQotCi12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29s
IGNvbmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgp
Ci17Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRy
dWUgOiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHBfdGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWY4MDYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyogQSBCaXNvbiBw
YXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGludGVyZmFj
ZSBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykg
MTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g
ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBj
cmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUg
Qmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIg
dGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBh
Ci0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZl
cnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBp
ZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNl
bGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNl
cHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0g
ICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAg
IFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogVG9rZW5zLiAg
Ki8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQg
dGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBk
ZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBl
IHsKLSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9J
RiA9IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIs
Ci0gICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNI
X0VORElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3
LAotICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0g
ICAgIEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNI
X0RFRklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElO
VF9DT05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5U
SUZJRVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0gg
MjU4Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5l
IEhBU0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VM
U0UgMjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNk
ZWZpbmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9Q
UkFHTUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJ
T04gMjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3
MgotI2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0
Ci0jZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0K
LQotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFS
RUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpz
dHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3Rvciog
dGxpc3Q7Ci19Ci0vKiBMaW5lIDE0ODkgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0j
IGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXdu
ICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNf
VFJJVklBTCAxCi0jZW5kaWYKLQotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmlu
ZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQg
Zmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50
IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9i
c29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNM
QVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTcxNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKQEAgLTAsMCArMSwxOCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVwcm9jZXNzb3IgdXRpbGl0
aWVzCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxv
dyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBt
dXN0IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcy4KKyNk
ZWZpbmUgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1l
KGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25z
dCBUeXBlTmFtZSYpCisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhOTc1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3By
ZXByb2Nlc3Nvci52Y3Byb2oKQEAgLTAsMCArMSwzOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0
VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9InByZXByb2Nlc3NvciIK
KwlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCisJ
Um9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJn
ZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9y
bQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkv
PgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3Vy
YXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRw
dXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRl
cm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlv
blR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3Rv
bUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRv
clRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVy
YXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249
IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJ
CU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlS
dW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJu
aW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD0iNCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7
NDcwMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgor
CQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVj
dG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0
ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0i
NCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIK
KwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlv
bnM9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElC
IgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5n
PSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0i
NCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIz
IgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxp
bmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1
aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlv
bgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGly
KSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURp
cmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmln
dXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdl
bmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94
eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgor
CQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgor
CQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlV
c2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFz
RXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRF
dmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJ
CQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikk
KFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJl
Y3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3Vy
YXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1p
emF0aW9uPSIyIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVudGltZUxpYnJh
cnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJl
Y29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9y
PSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJh
cmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENv
cFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIK
KwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVu
Y2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJj
ZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNt
O2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEz
MkQ3NTJBMkZGfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0
aWNzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFj
cm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XE1hY3JvRXhwYW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJ
RmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7
OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJl
c3Npb25QYXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxJbnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5p
emVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9i
YWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91
dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvc3RsX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWNlNTAu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gc3RsX3V0aWxzLmg6IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0j
aWZuZGVmIENPTU1PTl9TVExVVElMU19IXwotI2RlZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQot
bmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBEZWxldGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBU
PgotICAgIHZvaWQgb3BlcmF0b3IoKSAoVCB4KSB7IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3Qg
RGVsZXRlU2Vjb25kCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lk
IG9wZXJhdG9yKCkgKHN0ZDo6cGFpcjxBLCBCPiYgeCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgLy8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3Rva2VuX3R5cGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzQzYTk0MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfVE9LRU5fVFlQRV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQ
RV9IXwotCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAppbmRleCA4
OGQxOTZmLi4xNTA1NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaApAQCAtNDcsNSAr
NDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsK
IGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9t
VGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hh
ciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKaW5kZXggNjBiNjZiZC4uZmRlODUzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmMKQEAgLTY2LDYgKzY2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5w
dXRTcmMgewogICAgIGNoYXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0aWMgaW50IFNj
YW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0
U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVPRjsKQEAgLTcz
LDcgKzc1LDcgQEAgc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQogCiBzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsg
MCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRTcmMgZW9mX2lu
cHV0c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKIAogc3Rh
dGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwogCkBA
IC0xMjYsNiArMTI4LDE2IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJl
ZUNQUCgpKTsKIH0KIAoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sK
KyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsK
KyAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5n
dGg7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gMDsKK30KKwog
LyoKICAqIHN0cl9nZXRjaCgpCiAgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBs
ZSBzdHJpbmdzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAppbmRleCAyMzNkMWRjLi5iNjdjMWQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuaApAQCAtNjksOSArNjksOSBAQCB0eXBlZGVmIHN0cnVjdCBJ
bnB1dFNyYyB7CiB9IElucHV0U3JjOwogCiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHAp
OyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IFNjYW5Gcm9tU3RyaW5nKGNv
bnN0IGNoYXIgKik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZyb20gdGhlIHN0
cmluZyBtZW50aW9uZWQuCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
IGludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhpdCBhIEVP
RiBhYnJ1cHRseSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAvLyBzdGlja2lu
ZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0
aGUgU2hhZGVyJ3MuSW5mby5sb2cKIHZvaWQgU2V0TGluZU51bWJlcihpbnQpOwogdm9pZCBTZXRT
dHJpbmdOdW1iZXIoaW50KTsKIHZvaWQgSW5jTGluZU51bWJlcih2b2lkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmgKaW5kZXggYzE5Zjc5Yy4uZTdkMGIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgK
QEAgLTEwNSw3ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2Nv
cGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkFkZFN5bWJv
bChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2lu
ZCk7CiBTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsK
IFN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQ
RXJyb3JUb0luZm9Mb2coY2hhciAqKTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xT
X0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuYwppbmRleCBkNjU4YzEyLi5iOTRjMDVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2lu
Y2x1ZGUgPGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Ns
Z2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsyNjYsOCBA
QCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
ICAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKICAgICBpbnQgbHRva2Vu
LCBsZW47CiAgICAgY2hhciBjaDsKKyAgICBpbnQgYmFzZSwgYWNjdW07CisgICAgY2hhciBjaF92
YWw7CiAKICAgICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgaWYgKGx0b2tlbiA+PSAw
KSB7CkBAIC0zMTUsMTggKzMxOCw0MSBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9r
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENQUF9JTlRDT05TVEFOVDoKICAgICAgICAgICAgIGxlbiA9IDA7CisJICAgIGFjY3VtID0gMDsK
ICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgaWYgKGNoID09ICcw
JykgeworICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAg
ICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAn
eCcgfHwgY2ggPT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisr
XSA9IGNoOworICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7CiAgICAgICAgICAgICAgICAg
ICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJhc2UgPSA4OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjaF92YWwgPSAtMTsKKyAgICAgICAgICAgICAgICBpZiAoaXNk
aWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IGNoIC0gJzAnOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hf
dmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsKKworICAgICAgICAgICAgICAgIGlmIChjaF92
YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAg
IGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFsOworICAgICAgICAgICAgICAgIGNoID0gbFJl
YWRCeXRlKHBUb2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVu
XSA9ICdcMCc7CiAgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBz
dHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5
bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICAgICAg
c3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2ludCA9IGFjY3VtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgJygnOgogICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsK
QEAgLTQxNCwxMCArNDQwLDEwIEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tl
blN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgc3dpdGNoICh0b2tl
bikgewogICAgICAgICBjYXNlIENQUF9JREVOVElGSUVSOgogICAgICAgICBjYXNlIENQUF9UWVBF
SURFTlRJRklFUjoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmlu
ZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3Ry
LCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFO
VDoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRl
bnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5U
OgogICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKQEAg
LTQyNyw5ICs0NTMsOSBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJl
YW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh0b2tlbiA+PSAxMjcpCi0gICAgICAgICAgICAg
ICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKKyAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0
cmluZyhhdGFibGUsIHRva2VuKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3ByaW50ZihzdHIsICIlYyIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIs
IHNpemVvZihzdHIpLCAiJWMiLCB0b2tlbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKaW5kZXgg
ODc2NmRmOS4uZGJmNGEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCkBAIC00OCw2ICs0OCw3IEBA
IE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICNpZiAhZGVmaW5lZChfX1RPS0VOU19IKQogI2RlZmluZSBfX1RPS0VOU19IIDEKIAorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5o
IgogCiAjZGVmaW5lIEVPRl9TWSAoLTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MzhiNzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApAQCAtMCww
ICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBz
aW5rKQorICAgIDogbVNpbmsoc2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sKKyAgICAvLyBT
YW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQg
aW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4
dHVyZTJEUHJvaihzMjE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RFByb2ooczIxO3ZmNDsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShz
QzE7dmYzOyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdMX2ltYWdl
X2V4dGVybmFsLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3ZmMjsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOworICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxp
bmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVqb3ZpYyk6IFdl
IGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25z
IGxpa2Ugc2luLCBwb3csIGV0Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0
aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3NlIGFzIHdl
bGwuCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlv
bnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVycm9ycyA9IDA7
CisKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRvZXMgbm90
IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKKyAgICAvLyBz
byB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFjaCBzYW1w
bGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3Ig
ZWFjaCB0aW1lIHdlCisgICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVuZGVudCB2
YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOworICAgICAgICAg
aXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAg
IGNsZWFyVmlzaXRlZCgpOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVV
c2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBo
KQoreworICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9
IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgKytpdGVyKQor
ICAgIHsKKyAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAqaXRlcjsK
KyAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgp
KTsKKyAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBp
cyBub3QgcGVybWl0dGVkLlxuIjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICAr
K21OdW1FcnJvcnM7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsu
bG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVu
Y3Rpb25DYWxsKSBjb25zdAoreworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxsLT5pc1Vz
ZXJEZWZpbmVkKCkgJiYKKyAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJtRnVuY3Rp
b25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwordm9pZCBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBw
YXJhbWV0ZXIpCit7CisgICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdodCBsZWFr
IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBzYW1wbGVy
IGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3IgTE9EIGJp
YXMgb2YgYQorICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNTYW1wbGluZ09w
KHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAgIHN3aXRjaCAo
cGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAgICAgICAgICAg
ICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAg
ICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIg
aXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBj
b29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvLyBU
aGlyZCBhcmd1bWVudCAoYmlhcykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRl
ci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJB
biBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBi
ZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9mIGEgc2Ft
cGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBsZXIpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pCit7CisgICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNlbGVjdGlv
bigpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVy
IGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOworfQorCit2
b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBs
b29wKQoreworICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKKyAgICBtU2lu
ayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0
ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7
CisgICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsKKyAgICBt
U2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJt
aXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAgICAgICAgPDwg
bG9naWNhbE9wLT5nZXRPcFN0cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRvci5cbiI7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTE2NWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwor
I2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19I
XworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaCIKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAg
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7CisgICAg
dm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsK
KyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAg
dmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9u
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsK
KyAgICB2b2lkIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVw
ZW5kZW5jeUdyYXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3QgVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZvU2lua0Jh
c2UmIG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxU
U3RyaW5nPiBTdHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisK
K3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsK
KyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9y
KTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNp
bmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8K
KyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hf
CisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNz
IFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0
cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVt
RXJyb3JzKDApIHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUq
IHJvb3QpIHsgcm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyBy
ZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50
IG1OdW1FcnJvcnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9W
RVJURVhfU0hBREVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIy
IEBAIGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1
KSk7CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkK
Ky8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNh
biBtYWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9E
M0Q5R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQz
ZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7
CisKKyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRI
U1RFTkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwg
PSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVf
U1VSRkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisK
IGJvb2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywg
Ym9vbCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1v
ZGU7CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2wo
RFdPUkQgdXNhZ2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNE
UE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQ
T09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlm
IChtRDNkOUV4ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBE
aXNwbGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNh
Z2UgJiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAy
ODQzMS4uNGY3ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9E
aXNwbGF5LmgKQEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBi
b29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9u
UG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVy
eVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdl
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9v
bCBpc0RldmljZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuY3BwCmluZGV4IDA3YWQzY2YuLjAzOGIxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMSw2MzcgKzEsNjgyIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpT
dXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8vIHN1Y2ggYXMg
dGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4K
LS8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdM
IDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgotCi0jaW5jbHVkZSA8dGNoYXIuaD4KLQotI2luY2x1
ZGUgImxpYkVHTC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLSNp
bmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSA8ZHdtYXBpLmg+Ci0KLW5hbWVz
cGFjZSBlZ2wKLXsKLQotbmFtZXNwYWNlCi17Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRvd3NWaXN0
YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYpOwotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1B
S0VXT1JEKDB4MDEsIDB4MDYpOwotCi0vLyBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIG9wZXJh
dGluZyBzeXN0ZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIG9yZGVyaW5nCi0vLyBjb21wYXJp
c29uLgotaW50IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQotewotICAgIERXT1JEIHZlcnNpb24g
PSBHZXRWZXJzaW9uKCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVy
c2lvbikpOwotICAgIGludCBtaW5vclZlcnNpb24gPSBISUJZVEUoTE9XT1JEKHZlcnNpb24pKTsK
LSAgICByZXR1cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOwotfQotfQot
Ci1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmln
LCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAotICAgIDogbURp
c3BsYXkoZGlzcGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cpLCBtUG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotewotICAgIG1Td2FwQ2hh
aW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5kbGUg
PSBOVUxMOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9O
T19URVhUVVJFOwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAgICBt
UGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAg
IC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1SZW5k
ZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZG
RVJfUFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50ZXJ2
YWwoMSk7Ci0KLSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERp
c3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xl
bnVtIHRleHR1cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCks
IG1Db25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRo
KSwgbUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCi17
Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAg
bVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAg
IG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1U
ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZUZvcm1hdDsKLSAgICBtVGV4dHVyZVRhcmdldCA9IHRleHR1
cmVUeXBlOwotCi0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElT
UExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3Qg
cmF0aW8KLSAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVo
YXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0g
ICAgc2V0U3dhcEludGVydmFsKDEpOwotfQotCi1TdXJmYWNlOjp+U3VyZmFjZSgpCi17Ci0gICAg
dW5zdWJjbGFzc1dpbmRvdygpOwotICAgIHJlbGVhc2UoKTsKLX0KLQotYm9vbCBTdXJmYWNlOjpp
bml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIW1Td2FwQ2hhaW4gJiYgIW1PZmZzY3JlZW5UZXh0
dXJlICYmICFtRGVwdGhTdGVuY2lsKTsKLQotICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkKLSAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9y
IHRoaXMgd2luZG93LCBpZiB3ZSBhcmUgY29tcG9zaXRlZCwKLSAgICAvLyB0byBtaW5pbWl6ZSB0
aGUgYW1vdW50IG9mIHF1ZXVpbmcgZG9uZSBieSBEV00gYmV0d2VlbiBvdXIgY2FsbHMgdG8KLSAg
ICAvLyBwcmVzZW50IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4KLSAgICBpZiAobVdpbmRvdyAmJiAo
Z2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7Ci0gICAg
ICBCT09MIGlzQ29tcG9zaXRlZDsKLSAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3Np
dGlvbkVuYWJsZWQoJmlzQ29tcG9zaXRlZCk7Ci0gICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkg
JiYgaXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIERXTV9QUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2Vu
dFBhcmFtczsKLSAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2Vu
dFBhcmFtcykpOwotICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJF
U0VOVF9QQVJBTUVURVJTKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jQnVmZmVyID0gMjsKLQot
ICAgICAgICByZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2Vu
dFBhcmFtcyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICBFUlIoIlVu
YWJsZSB0byBzZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnJlbGVhc2Uo
KQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVs
ZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURl
cHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1P
ZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAg
ewotICAgICAgICBtVGV4dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAgIG1UZXh0dXJl
ID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewot
ICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbiht
V2lkdGgsIG1IZWlnaHQpOwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAo
IUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChmYWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUg
dGhlIHdpbmRvdyBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3Qu
bGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3Vy
ZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJI
ZWlnaHQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERl
dmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBwcmVzZXJ2ZWRSZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCAmJiBtUmVuZGVy
VGFyZ2V0KQotICAgIHsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRh
cmdldDsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0K
LSAgICAvLyBFdmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1l
bW9yeSBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGlu
ZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAg
ZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLSAgICByZWxlYXNlKCk7Ci0KLSAgICBE
M0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICBib29sIHVzZUZsaXBFeCA9IChnZXRDb21wYXJhYmxlT1NWZXJzaW9u
KCkgPj0gdmVyc2lvbldpbmRvd3M3KSAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKTsKLQot
ICAgIC8vIEZsaXBFeCBjYXVzZXMgdW5zZWVtbHkgc3RyZXRjaGluZyB3aGVuIHJlc2l6aW5nIHdp
bmRvd3MgQU5EIHdoZW4gb25lCi0gICAgLy8gZHJhd3Mgb3V0c2lkZSBvZiB0aGUgV01fUEFJTlQg
Y2FsbGJhY2suIFdoaWxlIHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSBpbgotICAgIC8vIHNpbmds
ZSBwcm9jZXNzIGFwcGxpY2F0aW9ucywgaXQgaXMgcGFydGljdWFybHkgbm90aWNlYWJsZSBpbiBt
dWx0aXByb2Nlc3MKLSAgICAvLyBhcHBsaWNhdGlvbnMuIFRoZXJlZm9yZSwgaWYgdGhlIGNyZWF0
b3IgcHJvY2VzcyBvZiBvdXIgd2luZG93IGlzIG5vdCBpbgotICAgIC8vIHRoZSBjdXJyZW50IHBy
b2Nlc3MsIGRpc2FibGUgdXNlIG9mIEZsaXBFeC4KLSAgICBEV09SRCB3aW5kb3dQSUQ7Ci0gICAg
R2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZ3aW5kb3dQSUQpOwotICAgIGlmICh3
aW5kb3dQSUQgIT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpKQotICAgIHsKLSAgICAgICAgdXNlRmxp
cEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBoYXJkd2FyZSBkb2VzIG5vdCBz
dXBwb3J0IEQzRFNXQVBFRkZFQ1RfRkxJUEVYIHdoZW4gZWl0aGVyIHRoZQotICAgIC8vIGRldmlj
ZSBmb3JtYXQgb3IgYmFjayBidWZmZXIgZm9ybWF0IGlzIG5vdCAzMi1iaXQuCi0gICAgSERDIGRl
dmljZUNvbnRleHQgPSBHZXREQygwKTsKLSAgICBpbnQgZGV2aWNlRm9ybWF0Qml0cyA9IEdldERl
dmljZUNhcHMoZGV2aWNlQ29udGV4dCwgQklUU1BJWEVMKTsKLSAgICBSZWxlYXNlREMoMCwgZGV2
aWNlQ29udGV4dCk7Ci0gICAgaWYgKG1Db25maWctPm1CdWZmZXJTaXplICE9IDMyIHx8IGRldmlj
ZUZvcm1hdEJpdHMgIT0gMzIpCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBpcyBhbHdheXMgVlNZTkNlZAotICAg
IGlmIChtU3dhcEludGVydmFsID09IDApCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBkb2VzIG5vdCBwcmVzZXJ2
ZSB0aGUgYmFjayBidWZmZXIuCi0gICAgaWYgKG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotICAg
IHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJlc2VudFBhcmFt
ZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3Jt
YXQ7Ci0gICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVuIHdlIHVzZSBE
M0RTV0FQRUZGRUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgRGlyZWN0WCBk
b2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAgICAvLyBvciAy
LiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRoYXQgZWl0
aGVyIGl0IGlzCi0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGluZyB1cywgb3Ig
YmV0dGVyLCBkb2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhlIHNjZW5lcyBr
bm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1h
dCA9IG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
RW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZs
YWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93
SGFuZGxlKCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6
IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZh
bCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdyZWF0
ZXIuCi0gICAgaWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVj
dCA9IEQzRFNXQVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLlN3YXBFZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZFQ1Rf
Q09QWSA6IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5k
b3dlZCA9IFRSVUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFj
a2J1ZmZlcldpZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBi
YWNrYnVmZmVySGVpZ2h0OwotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJz
LCAmbVN3YXBDaGFpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSEFORExFICpwU2hhcmVIYW5k
bGUgPSBOVUxMOwotICAgICAgICBpZiAobURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkp
IHsKLSAgICAgICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBEM0RQT09MX0RFRkFV
TFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBE
M0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLQotICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZz
Y3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwotCi0g
ICAgICAgIAotICAgICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IHByZXNlcnZlZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihp
c0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxh
eS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtV2luZG93
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVG
RkVSX1RZUEVfTU9OTywgJm1SZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIXByZXNlcnZlZFJl
bmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRv
dywgTlVMTCwgRkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQp
OwotICAgIH0KLQotICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAg
ICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAg
bVdpZHRoLCBtSGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBz
dGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlcldpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGlj
X2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAg
ICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KHByZXNlcnZlZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgIHByZXNlcnZlZFJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQz
REZNVF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0
aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5j
aWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
Lk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLSAgICB9
Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8
IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0gICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIs
IHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSBwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGg7Ci0gICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJIZWlnaHQ7Ci0KLSAgICBtUHJlc2VudEludGVydmFsRGlydHkgPSBmYWxzZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQotewotICAg
IHJldHVybiBtV2luZG93OwotfQotCi0KLSNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgi
RWdsOjpTdXJmYWNlT3duZXIiKQotI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVYVCgiRWdsOjpT
dXJmYWNlUGFyZW50V25kUHJvYyIpCi0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VX
aW5kb3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0g
bHBhcmFtKQotewotICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQotICB7Ci0gICAgICBTdXJmYWNl
KiBzdXJmID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25kLCBrU3VyZmFj
ZVByb3BlcnR5KSk7Ci0gICAgICBpZihzdXJmKQotICAgICAgewotICAgICAgICAgIHN1cmYtPmNo
ZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAgICB9Ci0gIH0KLSAgV05EUFJPQyBwcmV2
V25kRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHduZCwga1BhcmVu
dFduZFByb2MpKTsKLSAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBt
ZXNzYWdlLCB3cGFyYW0sIGxwYXJhbSk7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5k
b3coKQotewotICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBEV09SRCBwcm9jZXNzSWQ7Ci0gICAgRFdPUkQgdGhyZWFkSWQgPSBHZXRXaW5kb3dU
aHJlYWRQcm9jZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7Ci0gICAgaWYgKHByb2Nlc3NJZCAh
PSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElk
KCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0TGFzdEVycm9yKDAp
OwotICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdX
TFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2Mp
KTsKLSAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VD
Q0VTUykKLSAgICB7Ci0gICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHks
IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2V0UHJvcChtV2luZG93LCBr
UGFyZW50V25kUHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFByb2MpKTsKLSAg
ICBtV2luZG93U3ViY2xhc3NlZCA9IHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6dW5zdWJjbGFz
c1dpbmRvdygpCi17Ci0gICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQotICAgIHsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIHVuLXN1YmNsYXNzCi0gICAgTE9OR19QVFIgcGFyZW50
V25kRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdpbmRvdywga1Bh
cmVudFduZFByb2MpKTsKLQotICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1
cmZhY2VXaW5kb3dQcm9jLgotICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0IGlz
IGxpa2VseSB0aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCi0gICAgLy8gaHduZCBh
cyB3ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBj
b250ZXh0LiBUaGUKLSAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0
aGVyIHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gRUdMIGNvbnRleHQs
IG9yIHRvIHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgotICAg
IGlmKHBhcmVudFduZEZ1bmMpCi0gICAgewotICAgICAgICBMT05HX1BUUiBwcmV2V25kRnVuYyA9
IFNldFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRXbmRGdW5jKTsK
LSAgICAgICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+
KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgfQotCi0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBr
U3VyZmFjZVByb3BlcnR5KTsKLSAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9j
KTsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotfQotCi1ib29sIFN1cmZhY2U6OmNo
ZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKLXsKLSAgICBSRUNUIGNsaWVudDsKLSAgICBpZiAo
IUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IEdyb3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRv
IGdyb3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KLSAgICBpbnQgY2xpZW50V2lk
dGggPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsKLSAgICBpbnQgY2xpZW50SGVpZ2h0ID0g
Y2xpZW50LmJvdHRvbSAtIGNsaWVudC50b3A7Ci0gICAgYm9vbCBzaXplRGlydHkgPSBjbGllbnRX
aWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKLQotICAg
IGlmIChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQotICAgIHsKLSAgICAgICAg
cmVzZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGlmIChz
dGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhp
cykKLSAgICAgICAgewotICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJlbnRDb250
ZXh0KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5KCkpLCB0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLURXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50
ZXJ2YWwpCi17Ci0gICAgc3dpdGNoKGludGVydmFsKQotICAgIHsKLSAgICAgIGNhc2UgMDogcmV0
dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAgY2FzZSAxOiByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxf
VEhSRUU7Ci0gICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6c3dhcCgpCi17Ci0gICAg
aWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVMTCwg
TlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAw
IHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfUEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0
IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2Vu
ZSgpOwotCi0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHgsIG1I
ZWlnaHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQot
ICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHJlY3QuYm90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5i
b3R0b20gPSBtSGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QubGVmdCA9PSBy
ZWN0LnJpZ2h0IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAg
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCBy
ZXN1bHQgPT0gRDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VSRU1P
VkVEKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9T
VCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewot
ICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25z
dAotewotICAgIHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQo
KQotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdl
dC0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlE
aXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIGlmICht
RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLUlEaXJlY3QzRFRleHR1cmU5
ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVlblRl
eHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi12b2lkIFN1cmZhY2U6OnNl
dFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1Td2FwSW50ZXJ2YWwg
PT0gaW50ZXJ2YWwpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1T
d2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3
YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKLSAgICBtU3dhcElu
dGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRl
cnZhbCgpKTsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3YXBJ
bnRlcnZhbCk7Ci0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKLX0KLQotRUdMZW51
bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1
cmVGb3JtYXQ7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlVGFyZ2V0OwotfQotCi12b2lkIFN1cmZhY2U6OnNldEJv
dW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIG1UZXh0dXJlID0gdGV4
dHVyZTsKLX0KLQotZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUQzREZPUk1BVCBTdXJmYWNlOjpnZXRG
b3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0
OwotfQotfQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gU3VyZmFjZS5jcHA6IEltcGxl
bWVudHMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJm
YWNlDQorLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBh
bnkgYmFjayBidWZmZXJzLg0KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLg0KKw0KKyNpbmNsdWRl
IDx0Y2hhci5oPg0KKw0KKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIg0KKw0KKyNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCINCisNCisj
aW5jbHVkZSAibGliRUdML21haW4uaCINCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisN
CisjaW5jbHVkZSA8ZHdtYXBpLmg+DQorDQorbmFtZXNwYWNlIGVnbA0KK3sNCisNCituYW1lc3Bh
Y2UNCit7DQorY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAw
eDA2KTsNCitjb25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7
DQorDQorLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIGEg
Zm9ybWF0IHN1aXRhYmxlIGZvciBvcmRlcmluZw0KKy8vIGNvbXBhcmlzb24uDQoraW50IGdldENv
bXBhcmFibGVPU1ZlcnNpb24oKQ0KK3sNCisgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24o
KTsNCisgICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lvbikpOw0KKyAg
ICBpbnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7DQorICAgIHJldHVy
biBNQUtFV09SRChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7DQorfQ0KK30NCisNCitTdXJm
YWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05E
IHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIA0KKyAgICA6IG1EaXNwbGF5
KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZm
ZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkNCit7DQorICAgIG1Td2FwQ2hhaW4g
PSBOVUxMOw0KKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIG1EZXB0aFN0ZW5jaWwgPSBO
VUxMOw0KKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgbU9mZnNjcmVlblRleHR1cmUg
PSBOVUxMOw0KKyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZSA9IE5VTEw7
DQorICAgIG1UZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7DQorICAgIG1UZXh0dXJlVGFy
Z2V0ID0gRUdMX05PX1RFWFRVUkU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGlu
dCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1
YWwgcGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZG
RVI7DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisgICAgbVN3
YXBJbnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorDQorICAgIHN1YmNs
YXNzV2luZG93KCk7DQorfQ0KKw0KK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwg
Y29uc3QgQ29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4dHVyZVR5cGUp
DQorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWcoY29uZmln
KSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWln
aHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpDQorew0KKyAgICBtU3dhcENo
YWluID0gTlVMTDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVwdGhTdGVuY2ls
ID0gTlVMTDsNCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZzY3JlZW5UZXh0
dXJlID0gTlVMTDsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisgICAgbVRleHR1
cmUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7DQorICAgIG1U
ZXh0dXJlVGFyZ2V0ID0gdGV4dHVyZVR5cGU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0g
KEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWlu
ZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFD
S19CVUZGRVI7DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisg
ICAgbVN3YXBJbnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorfQ0KKw0K
K1N1cmZhY2U6On5TdXJmYWNlKCkNCit7DQorICAgIHVuc3ViY2xhc3NXaW5kb3coKTsNCisgICAg
cmVsZWFzZSgpOw0KK30NCisNCitib29sIFN1cmZhY2U6OmluaXRpYWxpemUoKQ0KK3sNCisgICAg
QVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNp
bCk7DQorDQorICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkNCisgICAgICByZXR1cm4gZmFsc2U7
DQorDQorICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2luZG93LCBp
ZiB3ZSBhcmUgY29tcG9zaXRlZCwNCisgICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBx
dWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvDQorICAgIC8vIHByZXNlbnQg
YW5kIHRoZSBhY3R1YWwgc2NyZWVuLg0KKyAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFyYWJs
ZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7DQorICAgICAgQk9PTCBpc0Nv
bXBvc2l0ZWQ7DQorICAgICAgSFJFU1VMVCByZXN1bHQgPSBEd21Jc0NvbXBvc2l0aW9uRW5hYmxl
ZCgmaXNDb21wb3NpdGVkKTsNCisgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21w
b3NpdGVkKSB7DQorICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7
DQorICAgICAgICBtZW1zZXQoJnByZXNlbnRQYXJhbXMsIDAsIHNpemVvZihwcmVzZW50UGFyYW1z
KSk7DQorICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9Q
QVJBTUVURVJTKTsNCisgICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7DQorDQorICAg
ICAgICByZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBh
cmFtcyk7DQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICAgIEVSUigiVW5h
YmxlIHRvIHNldCBwcmVzZW50IHBhcmFtZXRlcnM6IDB4JTA4WCIsIHJlc3VsdCk7DQorICAgICAg
fQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnJl
bGVhc2UoKQ0KK3sNCisgICAgaWYgKG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2Fw
Q2hhaW4tPlJlbGVhc2UoKTsNCisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQor
DQorICAgIGlmIChtQmFja0J1ZmZlcikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJl
bGVhc2UoKTsNCisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBp
ZiAobURlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYg
KG1SZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmICht
T2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJl
bGVhc2UoKTsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0K
KyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4
SW1hZ2UoKTsNCisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBtU2hh
cmVIYW5kbGUgPSBOVUxMOw0KK30NCisNCitib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkN
Cit7DQorICAgIGlmICghbVdpbmRvdykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHJlc2V0U3dh
cENoYWluKG1XaWR0aCwgbUhlaWdodCk7DQorICAgIH0NCisNCisgICAgUkVDVCB3aW5kb3dSZWN0
Ow0KKyAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0
KSkNCisgICAgew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisNCisgICAgICAgIEVSUigiQ291
bGQgbm90IHJldHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOw0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXNldFN3YXBDaGFpbih3aW5kb3dSZWN0
LnJpZ2h0IC0gd2luZG93UmVjdC5sZWZ0LCB3aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3Qu
dG9wKTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZl
cldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkNCit7DQorICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgaWYgKGRldmljZSA9PSBO
VUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8g
RXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5k
IHJlbGVhc2UgYWxsIHJlc291cmNlcw0KKyAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0g
dG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4NCisgICAgZGV2aWNl
LT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsNCisNCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJT
IHByZXNlbnRQYXJhbWV0ZXJzID0gezB9Ow0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisNCisgICAg
cHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0
aFN0ZW5jaWxGb3JtYXQ7DQorICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4g
d2hlbiB3ZSB1c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguDQorICAgIC8vIFdlIGRvIHRoaXMgYmVj
YXVzZSBEaXJlY3RYIGRvY3MgYXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0IHRoaXMgdG8g
MQ0KKyAgICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3Bl
Y3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlzDQorICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0
IHRlbGxpbmcgdXMsIG9yIGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0DQorICAgIC8vIGJl
aGluZCB0aGUgc2NlbmVzIGtub3dpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIG1vcmUuDQorICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7DQorICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0Ow0KKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7DQorICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERl
dmljZVdpbmRvdyA9IGdldFdpbmRvd0hhbmRsZSgpOw0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxl
bWVudGVkDQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJ
U0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQNCisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFsOw0KKyAgICBwcmVz
ZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOw0KKyAgICBw
cmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsNCisgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7DQorDQorICAgIC8vIFJlbGVh
c2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRl
ciB0YXJnZXQsIHdoaWxlIHRoZQ0KKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlz
dHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLg0KKyAgICBpZiAo
bVN3YXBDaGFpbikNCisgICAgew0KKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1CYWNrQnVmZmVy
KQ0KKyAgICB7DQorICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgbUJh
Y2tCdWZmZXIgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkN
CisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsNCisgICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRoU3Rl
bmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICAg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNoYXJlSGFuZGxlID0g
TlVMTDsNCisgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBpZiAoIW1XaW5k
b3cgJiYgbURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpDQorICAgIHsNCisgICAgICAg
IHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7DQorICAgIH0NCisNCisgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFS
R0VULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUs
IHBTaGFyZUhhbmRsZSk7DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3Vs
dCk7DQorICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICBpZihpc0RldmljZUxvc3RFcnJv
cihyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZp
Y2VMb3N0KCk7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBmYWxzZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7DQorDQorICAgIHJlc3VsdCA9IG1P
ZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOw0KKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0
KQ0KKyAgICB7DQorICAgICAgICBSRUNUIHJlY3QgPQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IDAsIDAsDQorICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0DQorICAgICAgICB9Ow0KKw0KKyAg
ICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlY3QucmlnaHQg
PSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7DQorICAgICAgICB9DQorDQorICAg
ICAgICBpZiAocmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVySGVpZ2h0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZWN0LmJvdHRv
bSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7DQorICAgICAgICB9DQorDQor
ICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisgICAgICAgIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJl
Y3QsIEQzRFRFWEZfTk9ORSk7DQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0K
Kw0KKyAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAg
aWYgKG1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRk
aXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsNCisNCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVS
Ul9ERVZJQ0VMT1NUKTsNCisNCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRk
aXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0
KTsNCisgICAgICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VM
b3N0RXJyb3IocmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNw
bGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRC
YWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOw0KKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNv
bmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikNCisgICAgew0KKyAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBG
QUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQz
REVSUl9JTlZBTElEQ0FMTCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0
KTsNCisgICAgICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VM
b3N0RXJyb3IocmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNw
bGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgbVdpZHRoID0gcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlcldpZHRoOw0KKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckhlaWdodDsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7
DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFN1cmZhY2U6OnN3YXBSZWN0KEVHTGlu
dCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQ0KK3sNCisgICAgaWYg
KCFtU3dhcENoYWluKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0K
KyAgICBpZiAoeCArIHdpZHRoID4gbVdpZHRoKQ0KKyAgICB7DQorICAgICAgICB3aWR0aCA9IG1X
aWR0aCAtIHg7DQorICAgIH0NCisNCisgICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQ0KKyAg
ICB7DQorICAgICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7
DQorICAgIH0NCisNCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdl
dERldmljZSgpOw0KKw0KKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zDQor
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOw0K
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElE
KTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZB
TFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxF
LCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQz
RENVTExfTk9ORSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVO
QUJMRSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFO
RUVOQUJMRSwgMCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklU
RUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVf
QkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JF
RCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBG
QUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFC
TEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsNCisgICAgZGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorDQorICAgIGRldmljZS0+U2V0UmVuZGVyVGFy
Z2V0KDAsIG1CYWNrQnVmZmVyKTsNCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNl
KE5VTEwpOw0KKw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUp
Ow0KKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBE
M0RUT1BfU0VMRUNUQVJHMSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsNCisgICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQp
Ow0KKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNE
VEVYRl9QT0lOVCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQURE
UkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOw0KKyAgICBkZXZpY2UtPlNl
dEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOw0KKw0KKyAgICBEM0RWSUVXUE9SVDkg
dmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsNCisgICAgZGV2
aWNlLT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOw0KKw0KKyAgICBmbG9hdCB4MSA9IHggLSAwLjVm
Ow0KKyAgICBmbG9hdCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOw0KKyAgICBm
bG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsNCisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAt
IHkpIC0gMC41ZjsNCisNCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsNCisgICAg
ZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7DQorICAgIGZsb2F0IHUyID0gKHggKyB3aWR0
aCkgLyBmbG9hdChtV2lkdGgpOw0KKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0
KG1IZWlnaHQpOw0KKw0KKyAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEu
MGYsIHUxLCB2Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4w
ZiwgdTIsIHYyfSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBm
LCB1MiwgdjF9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYs
IHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdg0KKw0KKyAgICBtRGlzcGxheS0+c3Rh
cnRTY2VuZSgpOw0KKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZB
TiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOw0KKyAgICBtRGlzcGxheS0+ZW5kU2NlbmUo
KTsNCisNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOw0KKw0KKyAgICBSRUNUIHJl
Y3QgPQ0KKyAgICB7DQorICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwNCisgICAgICAg
IHggKyB3aWR0aCwgbUhlaWdodCAtIHkNCisgICAgfTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQg
PSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7DQorDQor
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdl
dEN1cnJlbnRDb250ZXh0KCkpOw0KKyAgICBpZiAoY29udGV4dCkNCisgICAgew0KKyAgICAgICAg
Y29udGV4dC0+bWFya0FsbFN0YXRlRGlydHkoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoaXNEZXZp
Y2VMb3N0RXJyb3IocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXktPm5vdGlmeURl
dmljZUxvc3QoKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgfQ0KKw0KKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBjaGVja0Zvck91dE9mRGF0ZVN3
YXBDaGFpbigpOw0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorSFdORCBTdXJmYWNlOjpn
ZXRXaW5kb3dIYW5kbGUoKQ0KK3sNCisgICAgcmV0dXJuIG1XaW5kb3c7DQorfQ0KKw0KKw0KKyNk
ZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIiKQ0KKyNkZWZp
bmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQ0KKw0K
K3N0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9jKEhXTkQgaHduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQ0KK3sNCisgIGlmIChtZXNz
YWdlID09IFdNX1NJWkUpDQorICB7DQorICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOw0KKyAgICAg
IGlmKHN1cmYpDQorICAgICAgew0KKyAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3
YXBDaGFpbigpOw0KKyAgICAgIH0NCisgIH0NCisgIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7DQor
ICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocHJldlduZEZ1bmMsIGh3bmQsIG1lc3NhZ2UsIHdwYXJh
bSwgbHBhcmFtKTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdygpDQorew0K
KyAgICBpZiAoIW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0K
KyAgICBEV09SRCBwcm9jZXNzSWQ7DQorICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhy
ZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOw0KKyAgICBpZiAocHJvY2Vzc0lkICE9
IEdldEN1cnJlbnRQcm9jZXNzSWQoKSB8fCB0aHJlYWRJZCAhPSBHZXRDdXJyZW50VGhyZWFkSWQo
KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFNldExhc3RFcnJv
cigwKTsNCisgICAgTE9OR19QVFIgb2xkV25kUHJvYyA9IFNldFdpbmRvd0xvbmdQdHIobVdpbmRv
dywgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93
UHJvYykpOw0KKyAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJS
T1JfU1VDQ0VTUykNCisgICAgew0KKyAgICAgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsN
CisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJm
YWNlUHJvcGVydHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7DQorICAgIFNldFBy
b3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRX
bmRQcm9jKSk7DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsNCit9DQorDQordm9pZCBT
dXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkNCit7DQorICAgIGlmKCFtV2luZG93U3ViY2xhc3Nl
ZCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIC8vIHVuLXN1YmNs
YXNzDQorICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdf
UFRSPihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7DQorDQorICAgIC8vIENoZWNr
IHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5kb3dQcm9jLg0KKyAgICAvLyBJZiB0
aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBz
dWJjbGFzc2VkIHRoZQ0KKyAgICAvLyBod25kIGFzIHdlbGwgYW5kIGRpZCBub3QgdW5zdWJjbGFz
cyBiZWZvcmUgZGVzdHJveWluZyBpdHMgRUdMIGNvbnRleHQuIFRoZQ0KKyAgICAvLyBhcHBsaWNh
dGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNsYXNzIGJlZm9yZSBpbml0aWFs
aXppbmcgdGhlDQorICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBk
ZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4NCisgICAgaWYocGFyZW50V25kRnVuYykNCisgICAg
ew0KKyAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5k
b3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7DQorICAgICAgICBBU1NFUlQocHJldldu
ZEZ1bmMgPT0gcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsN
CisgICAgfQ0KKw0KKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHkpOw0K
KyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsNCisgICAgbVdpbmRvd1N1
YmNsYXNzZWQgPSBmYWxzZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0
ZVN3YXBDaGFpbigpDQorew0KKyAgICBSRUNUIGNsaWVudDsNCisgICAgaWYgKCFHZXRDbGllbnRS
ZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkNCisgICAgew0KKyAgICAgICAgQVNTRVJU
KGZhbHNlKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICAvLyBHcm93
IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93
IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uDQorICAgIGludCBjbGllbnRXaWR0aCA9
IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0Ow0KKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xp
ZW50LmJvdHRvbSAtIGNsaWVudC50b3A7DQorICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lk
dGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7DQorDQorICAg
IGlmIChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQ0KKyAgICB7DQorICAgICAg
ICByZXNldFN3YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsNCisgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0g
dGhpcykNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVu
dENvbnRleHQoKSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXko
KSksIHRoaXMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0N
CisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitEV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2
YWwoRUdMaW50IGludGVydmFsKQ0KK3sNCisgICAgc3dpdGNoKGludGVydmFsKQ0KKyAgICB7DQor
ICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7DQorICAg
ICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7DQorICAgICAgY2FzZSAy
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087DQorICAgICAgY2FzZSAzOiByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRTsNCisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0ZPVVI7DQorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOw0KK30NCisNCiti
b29sIFN1cmZhY2U6OnN3YXAoKQ0KK3sNCisgICAgcmV0dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0
aCwgbUhlaWdodCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcihFR0xpbnQg
eCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQorICAgIGlmICgh
bVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpDQorICAgIHsNCisgICAgICAgIC8vIFNwZWMgaXMgbm90
IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLg0KKyAgICAgICAgcmV0dXJu
IHRydWU7DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsNCit9DQorDQorRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtV2lkdGg7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1IZWlnaHQ7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Qb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkOw0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURp
cmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpDQorew0KKyAgICBpZiAo
bVJlbmRlclRhcmdldCkNCisgICAgew0KKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7
DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7DQorfQ0KKw0KKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhT
dGVuY2lsKCkNCit7DQorICAgIGlmIChtRGVwdGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBt
RGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbURlcHRoU3Rl
bmNpbDsNCit9DQorDQorSURpcmVjdDNEVGV4dHVyZTkgKlN1cmZhY2U6OmdldE9mZnNjcmVlblRl
eHR1cmUoKQ0KK3sNCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQ0KKyAgICB7DQorICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1P
ZmZzY3JlZW5UZXh0dXJlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnNldFN3YXBJbnRlcnZhbChF
R0xpbnQgaW50ZXJ2YWwpDQorew0KKyAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBpbnRlcnZhbCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBtU3dhcEludGVy
dmFsID0gaW50ZXJ2YWw7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVy
dmFsLCBtRGlzcGxheS0+Z2V0TWluU3dhcEludGVydmFsKCkpOw0KKyAgICBtU3dhcEludGVydmFs
ID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRlcnZhbCgp
KTsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVy
dmFsKTsNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsNCit9DQorDQorRUdMZW51
bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4
dHVyZUZvcm1hdDsNCit9DQorDQorRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsNCit9DQorDQordm9pZCBTdXJm
YWNlOjpzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkNCit7DQorICAgIG1U
ZXh0dXJlID0gdGV4dHVyZTsNCit9DQorDQorZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91
bmRUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9DQorDQorRDNE
Rk9STUFUIFN1cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUNvbmZp
Zy0+bVJlbmRlclRhcmdldEZvcm1hdDsNCit9DQorfQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKaW5kZXggMzUyNjBkZS4uNDBiZDcwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKQEAgLTY5LDYgKzY5LDcg
QEAgcHJpdmF0ZToKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwogICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKm1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVm
ZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwogICAgIElEaXJlY3Qz
RFN1cmZhY2U5KiBtUmVuZGVyVGFyZ2V0OwogICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2Ny
ZWVuVGV4dHVyZTsKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN1YmNsYXNz
V2luZG93KCk7CiAgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CiAgICAgYm9vbCByZXNldFN3
YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7CisgICAg
Ym9vbCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhl
aWdodCk7CiAgICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwp
OwogCiAgICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRo
ZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wuY3BwCmluZGV4IDRiN2Y5ZTEuLjUwODlkMmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKQEAgLTExMDgsNiArMTEwOCwx
MSBAQCBFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaQogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBp
ZiAoeCA8IDAgfHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CiAgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9
IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAppbmRleCA2NmNkNWMwLi4x
YjQ2NjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5jcHAKQEAgLTEsNDI3NiArMSw0MzM5IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBDb250ZXh0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5n
IGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0
IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQot
I2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0luZGV4RGF0YU1hbmFnZXIuaCIKLQotI3VuZGVmIG5lYXIKLSN1bmRlZiBmYXIKLQotbmFt
ZXNwYWNlIGdsCi17Ci1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcs
IGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29s
IHJvYnVzdEFjY2VzcykgOiBtQ29uZmlnKGNvbmZpZykKLXsKLSAgICBBU1NFUlQocm9idXN0QWNj
ZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVkCi0KLSAgICBtRGlzcGxheSA9IE5VTEw7
Ci0gICAgbURldmljZSA9IE5VTEw7Ci0KLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFz
ZUhhbmRsZSgwKTsKLQotICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7
Ci0KLSAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc3RlbmNp
bENsZWFyVmFsdWUgPSAwOwotCi0gICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7Ci0gICAgbVN0
YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKLSAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOwot
ICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGVwdGhGdW5jID0gR0xf
TEVTUzsKLSAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc291cmNlQmxlbmRS
R0IgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAg
bVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmRlc3RCbGVuZEFscGhh
ID0gR0xfWkVSTzsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwot
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUu
YmxlbmRDb2xvci5yZWQgPSAwOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsKLSAg
ICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YSA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsKLSAgICBtU3Rh
dGUuc3RlbmNpbE1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOwot
ICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOwotICAgIG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9
IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja0ZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZh
aWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9L
RUVQOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOwotICAgIG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRz
ID0gMC4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAg
bVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
VmFsdWUgPSAxLjBmOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNlOwot
ICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVl
OwotICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7Ci0gICAgbVN0
YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7Ci0KLSAgICBt
U3RhdGUubGluZVdpZHRoID0gMS4wZjsKLQotICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAg
IG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmln
LT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmln
LT5tRGlzcGxheU1vZGUuSGVpZ2h0OwotICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7Ci0gICAgbVN0
YXRlLnpGYXIgPSAxLjBmOwotCi0gICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICBtU3RhdGUu
c2Npc3NvclkgPSAwOwotICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5
TW9kZS5XaWR0aDsKLSAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlN
b2RlLkhlaWdodDsKLQotICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOwotICAgIG1TdGF0
ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7Ci0gICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVl
OwotICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7Ci0gICAgbVN0YXRlLmRlcHRoTWFz
ayA9IHRydWU7Ci0KLSAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCi0gICAgewotICAgICAg
ICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwotICAg
ICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB9
Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKLSAgICAv
LyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBo
YXZlIHR3b2RpbWVuc2lvbmFsCi0gICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVj
dG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gICAgLy8gSW4gb3JkZXIg
dGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBh
cmUgdHJlYXRlZCBhcyB0ZXh0dXJlCi0gICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMg
YXJlIDAuCi0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQobmV3IFRleHR1cmUyRCgwKSk7Ci0gICAg
bVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsKLQotICAgIG1T
dGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKLSAgICBiaW5kQXJyYXlCdWZmZXIoMCk7Ci0gICAgYmlu
ZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsKLSAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7Ci0gICAg
YmluZFRleHR1cmUyRCgwKTsKLSAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRE
cmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLQotICAgIG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0KLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0g
ICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93
T3JkZXIgPSBmYWxzZTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0gICAgbUlu
ZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLSAgICBtTGluZUxvb3BJ
QiA9IE5VTEw7Ci0KLSAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLSAgICBtSW52YWxpZFZhbHVl
ID0gZmFsc2U7Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBtT3V0T2ZNZW1v
cnkgPSBmYWxzZTsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0K
LSAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKLSAgICBtQ29udGV4dExvc3QgPSBmYWxzZTsK
LSAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICBtUmVzZXRTdHJhdGVneSA9IChu
b3RpZnlSZXNldHMgPyBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDogR0xfTk9fUkVTRVRf
Tk9USUZJQ0FUSU9OX0VYVCk7Ci0gICAgbVJvYnVzdEFjY2VzcyA9IHJvYnVzdEFjY2VzczsKLQot
ICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDNUZXh0
dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1T
dXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJp
ZXMgPSBmYWxzZTsKLSAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKLSAgICBt
TWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5V
TEw7Ci0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotQ29udGV4dDo6fkNvbnRleHQoKQot
ewotICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gIT0gMCkKLSAgICB7Ci0gICAgICAgIFBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSk7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GcmFt
ZWJ1ZmZlck1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZy
YW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GZW5j
ZU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2lu
KCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQotICAg
IHsKLSAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkp
OwotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NP
VU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxl
ciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0u
c2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5
cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAgIG1JbmNvbXBs
ZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBt
U3RhdGUuYWN0aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVM
TCk7Ci0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7Ci0KLSAgICBtVGV4dHVyZTJE
WmVyby5zZXQoTlVMTCk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7Ci0KLSAg
ICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdl
cjsKLSAgICBkZWxldGUgbUJsaXQ7Ci0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwotCi0gICAgaWYg
KG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCi0gICAgewotICAgICAgICBtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFz
ZSgpOwotfQotCi12b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIG1EaXNwbGF5ID0gZGlzcGxheTsKLSAg
ICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKCFtSGFzQmVlbkN1
cnJlbnQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ2FwcyA9IG1EaXNwbGF5LT5nZXREZXZpY2VD
YXBzKCk7Ci0KLSAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5h
Z2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRl
eERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRo
aXMpOwotCi0gICAgICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVs
U2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotICAgICAgICBtU3VwcG9ydHNW
ZXJ0ZXhUZXh0dXJlID0gbURpc3BsYXktPmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCk7Ci0gICAg
ICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4
dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1EaXNwbGF5LT5n
ZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwotCi0gICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0g
c3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQp
bURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSk7
Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJl
RGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGlt
ZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMihtTWF4VGV4dHVyZURpbWVu
c2lvbikgKyAxOwotICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3Vi
ZVRleHR1cmVEaW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4
dHVyZUxldmVsPSVkIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhD
dWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1
cmVMZXZlbCk7Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNb
XSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAgICAgICAgICAg
IEQzREZNVF9YOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgICAg
ICBEM0RGTVRfRDI0UzgKLSAgICAgICAgfTsKLQotICAgICAgICBpbnQgbWF4ID0gMDsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXpl
b2YoRDNERk9STUFUKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sICptdWx0aXNh
bXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAg
ICAgICAgICAgbURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3Jt
YXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBv
cnRbcmVuZGVyQnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAg
ICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWop
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0g
JiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA9IG1heDsKLQotICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0
RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9
IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRz
RFhUMVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgICAg
ICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0
KCk7Ci0gICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4
dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3Bs
YXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
ciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9y
dHNGbG9hdDE2VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZt
U3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0gbURpc3BsYXkt
PmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5j
ZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9y
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
ICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6Om1hcmtD
b250ZXh0TG9zdCgpCi17Ci0gICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVY
VF9PTl9SRVNFVF9FWFQpCi0gICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX1VOS05PV05fQ09OVEVY
VF9SRVNFVF9FWFQ7Ci0gICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0
Ojppc0NvbnRleHRMb3N0KCkKLXsKLSAgICByZXR1cm4gbUNvbnRleHRMb3N0OwotfQotCi12b2lk
IENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1
ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7
Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwotICAgIG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5h
bHBoYSA9IGFscGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpCi17Ci0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwotfQotCi12b2lkIENv
bnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsKLSAgICBtU3RhdGUuc3RlbmNp
bENsZWFyVmFsdWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwotICAgICAgICBtQ3VsbFN0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxNb2Rl
ICE9IG1vZGUpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOwotICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRG
cm9udEZhY2UoR0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZy
b250KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250OwotICAgICAgICBt
RnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0
aFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJs
ZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAg
bURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzRGVw
dGhUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCi17Ci0gICAg
aWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAgIHsKLSAgICAgICAgbVN0YXRl
LmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZs
b2F0IHpGYXIpCi17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7Ci0gICAgbVN0YXRlLnpGYXIg
PSB6RmFyOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuYmxl
bmQgPSBlbmFibGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
U3RhdGUuYmxlbmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51bSBz
b3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0
QWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwK
LSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKLSAgICAg
ICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0gICAgICAgIG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuc291cmNlQmxl
bmRSR0IgPSBzb3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdC
OwotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOwotICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9yKGZs
b2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQotewotICAgIGlm
IChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmdyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0g
Ymx1ZSB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKLSAgICAgICAgbVN0YXRlLmJs
ZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9
IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7Ci0gICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRC
bGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pCi17
Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8Ci0gICAg
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Ci0gICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOwotICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRl
c3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxl
ZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6Omlz
U3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxU
ZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxG
dW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCi17Ci0gICAgaWYgKG1T
dGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNp
bFJlZiAhPSBzdGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVu
Y2lsTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5j
OwotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2ls
UmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7Ci0gICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5j
aWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewotICAgIGlmIChtU3RhdGUuc3Rl
bmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
TWFzayAhPSBzdGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJh
Y2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
PSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKLSAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFdy
aXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tX
cml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUu
c3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCi0gICAgewotICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFzazsK
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0gc3Rl
bmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLXsKLSAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAotICAgICAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi0gICAg
ewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOwotICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVt
IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
cykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0ZhaWwg
fHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFj
a1Bhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
cyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwot
ICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0
ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnBv
bHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0Rmls
bEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7
Ci0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFj
dG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
ciAhPSBmYWN0b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0
cykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOwot
ICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Ci0gICAgICAgIG1Qb2x5
Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNl
dFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVy
YWdlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292
ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVk
KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVDb3Zl
cmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFs
dWUsIGJvb2wgaW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAh
PSB2YWx1ZSB8fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0
KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsKLSAg
ICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OwotICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNjaXNz
b3JUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9IGVu
YWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOwotICAg
ICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0
Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zY2lz
c29yVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQotewot
ICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUu
ZGl0aGVyID0gZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3RhdGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChHTGZs
b2F0IHdpZHRoKQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7Ci0gICAgLy8gVE9ETzogUHJvcGFnYXRlIHRo
ZSBoaW50IHRvIHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3cml0ZQotICAgIC8vIGRkeCwg
ZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50LgotICAgIC8vIEln
bm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBo
aW50LgotfQotCi12b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIG1TdGF0ZS52aWV3cG9y
dFggPSB4OwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OwotICAgIG1TdGF0ZS52aWV3cG9ydFdp
ZHRoID0gd2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OwotfQotCi12
b2lkIENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8
IG1TdGF0ZS5zY2lzc29yWSAhPSB5IHx8IAotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9
IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5zY2lzc29yWCA9IHg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7Ci0gICAg
ICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwg
Ym9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9
IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0YXRl
LmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEp
Ci0gICAgewotICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOwotICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUg
PSBibHVlOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKLSAgICAgICAg
bU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVw
dGhNYXNrKGJvb2wgbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7Ci0gICAgICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBs
ZXIodW5zaWduZWQgaW50IGFjdGl2ZSkKLXsKLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFj
dGl2ZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBD
b250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBt
U3RhdGUuZHJhd0ZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgp
OwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6
OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgUXVlcnkgKnF1ZXJ5
T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VY
VDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnlP
YmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBi
b29sIGVuYWJsZWQpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1B
cnJheUVuYWJsZWQgPSBlbmFibGVkOwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCi17Ci0gICAg
cmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIg
KmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qg
dm9pZCAqcG9pbnRlcikKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
TnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKLX0KLQotY29uc3Qgdm9pZCAqQ29udGV4
dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAot
ewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7
Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3Rh
dGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0UGFj
a0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Owot
fQotCi12b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17
Ci0gICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29u
dGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnVu
cGFja0FsaWdubWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVy
KGJvb2wgcmV2ZXJzZVJvd09yZGVyKQotewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVy
ID0gcmV2ZXJzZVJvd09yZGVyOwotfQotCi1ib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93
T3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsK
LX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNv
dXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRl
UHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0o
KTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKLXsKLSAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1HTHVp
bnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZVRleHR1cmUoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCi1HTHVpbnQg
Q29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRnJh
bWVidWZmZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GcmFtZWJ1ZmZlck1h
cFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLUdMdWludCBDb250
ZXh0OjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFs
bG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2Uo
bURpc3BsYXkpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVz
ZWQgcXVlcnkgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkKLXsKLSAgICBHTHVp
bnQgaGFuZGxlID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUXVl
cnlNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIENv
bnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIGlmIChtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEJ1ZmZlcihi
dWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIo
YnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikK
LXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgbUNhY2hlZEN1cnJlbnRQcm9n
cmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0
dXJlKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKHRleHR1cmUpKQot
ICAgIHsKLSAgICAgICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIENvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIGlmIChtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAgICB7Ci0gICAg
ICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQot
dm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0g
ICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVm
ZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9
IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyKTsKLQotICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVs
ZWFzZShmcmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZnJhbWVidWZm
ZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVm
ZmVyT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50
IGZlbmNlKQotewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU1h
cC5maW5kKGZlbmNlKTsKLQotICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVj
dC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZmVuY2VPYmplY3QtPnNlY29uZDsKLSAgICAgICAg
bUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVy
eU9iamVjdCA9IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsKLSAgICBpZiAocXVlcnlPYmplY3QgIT0g
bVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UocXVlcnlPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0LT5zZWNv
bmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2Uo
KTsKLSAgICAgICAgfQotICAgICAgICBtUXVlcnlNYXAuZXJhc2UocXVlcnlPYmplY3QpOwotICAg
IH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7Ci19Ci0KLVNoYWRl
ciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNv
dXJjZU1hbmFnZXItPmdldFNoYWRlcihoYW5kbGUpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0Ojpn
ZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXIt
PmdldFByb2dyYW0oaGFuZGxlKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShH
THVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJl
KGhhbmRsZSk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdM
dWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVm
ZmVyKCkKLXsKLSAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
cik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIoKQotewot
ICAgIHJldHVybiBtQm91bmREcmF3RnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Ymlu
ZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuYXJyYXlCdWZm
ZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVu
dEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Ymlu
ZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVj
a1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQpOwotCi0gICAgbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4
dHVyZSh0ZXh0dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdM
dWludCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9j
YXRpb24odGV4dHVyZSwgVEVYVFVSRV9DVUJFKTsKLQotICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0
dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpCi17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAg
ewotICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVy
KCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwot
fQotCi12b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVy
KQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAgIHsKLSAgICAg
ICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwotICAg
IH0KLQotICAgIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKLQotICAgIG1C
b3VuZERyYXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQot
dm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0g
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1
ZmZlcik7Ci0KLSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVu
ZGVyYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3Jh
bSkKLXsKLSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOwot
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVz
dCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMg
ZmxhZ2dlZC4KLQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKLSAgICB7Ci0gICAg
ICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHBy
b2dyYW0pOwotICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+
Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOwotICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0g
PSBOVUxMOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLQotICAgICAgICBpZiAo
bmV3UHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRQcm9ncmFtKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkp
Ci17Ci0gICAgLy8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVl
cnlFWFQgaXMgY2FsbGVkIHdpdGggYW4gPGlkPiAgCi0gICAgLy8gb2YgemVybywgaWYgdGhlIGFj
dGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgPHRhcmdldD4gaXMgbm9uLXplcm8gKGZvciB0aGUg
IAotICAgIC8vIHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsIGlmICAKLSAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZv
ciBlaXRoZXIgdGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiAK
LSAgICAvLyBleGlzdGluZyBxdWVyeSBvYmplY3Qgd2hvc2UgdHlwZSBkb2VzIG5vdCBtYXRjaCA8
dGFyZ2V0Piwgb3IgaWYgPGlkPiBpcyB0aGUKLSAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0IG5h
bWUgZm9yIGFueSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMKLSAg
ICAvLyBnZW5lcmF0ZWQuCi0KLSAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBhcmUgYWN0
aXZlCi0gICAgLy8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3Vw
cG9ydGVkLCB3ZSB3aWxsIG5lZWQgdG8gY2hlY2sKLSAgICAvLyBzZXBhcmF0ZWx5IHRoYXQ6Ci0g
ICAgLy8gICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJlbnQgYWN0aXZl
IHF1ZXJ5IGZvciBhbnkgdGFyZ2V0L3R5cGUKLSAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0
aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UKLSAg
ICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9BTllfU0FNUExF
U19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKLSAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUg
YWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLgotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0
YXJnZXQpOwotCi0gICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2Vu
UXVlcmllcwotICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZvciB0eXBl
IG1pc21hdGNoCi0gICAgaWYgKHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkgIT0gdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0K
LSAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0
YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlPYmplY3QpOwotCi0gICAgLy8gYmVnaW4g
cXVlcnkKLSAgICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKLX0KLQotdm9pZCBDb250ZXh0OjplbmRR
dWVyeShHTGVudW0gdGFyZ2V0KQotewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLQotICAgIHN3aXRj
aCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDog
Ci0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAK
LSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0
ZS5hY3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAocXVlcnlPYmplY3QgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgcXVlcnlPYmplY3QtPmVuZCgpOwotCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5
W3FUeXBlXS5zZXQoTlVMTCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJv
KEZyYW1lYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsK
LSAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci0gICAgaWYgKG1TdGF0ZS5kcmF3RnJh
bWVidWZmZXIgPT0gMCkKLSAgICB7Ci0gICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGJ1
ZmZlcjsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShS
ZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOwotICAgIHJlbmRl
cmJ1ZmZlck9iamVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwotfQotCi1GcmFtZWJ1ZmZl
ciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBG
cmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmlu
ZChoYW5kbGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLUZlbmNlICpD
b250ZXh0OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZlbmNlTWFwOjpp
dGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoZmVuY2Ug
PT0gbUZlbmNlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmZW5jZS0+c2Vjb25kOwotICAgIH0KLX0K
LQotUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUsIGJvb2wgY3Jl
YXRlLCBHTGVudW0gdHlwZSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVlcnkgPSBtUXVl
cnlNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7Ci0gICAgICAgICAgICBx
dWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVlcnkt
PnNlY29uZDsKLSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQot
ewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLUJ1ZmZlciAqQ29u
dGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFBy
b2dyYW0oKQotewotICAgIGlmICghbUNhY2hlZEN1cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAg
ICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbSht
U3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgIH0KLSAgICByZXR1cm4gbUNhY2hlZEN1cnJlbnRQ
cm9ncmFtOwotfQotCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwICpDb250ZXh0
OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVD
dWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVf
Q1VCRSkpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25l
ZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKLQotICAgIGlmICh0ZXhp
ZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLmdldCgpOwotfQotCi1ib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBw
bmFtZSwgR0xib29sZWFuICpwYXJhbXMpCi17Ci0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVF
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExF
X0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVy
dDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LmNvbG9yTWFza1JlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVu
OwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKLSAgICAgICAgcGFy
YW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFj
ZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOyAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OyAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRl
c3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORDogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3Mg
PyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6
OmdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVh
c2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdl
dEZsb2F0diBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEg
ZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAg
ICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3Vs
ZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFr
ZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLgotICAgIHN3aXRjaCAo
cG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZTsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTogICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvcjsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzog
ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzOyAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGds
OjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBnbDo6
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBn
bDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFy
OwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5ncmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhh
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHBh
cmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0
YXRlLmJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENv
bG9yLmJsdWU7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihH
TGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IERFUFRI
X0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYg
aW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0gICAgLy8gR2V0
SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWly
ZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlm
ZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIAot
ICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0
b3JzKCk7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOiAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBh
cmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0
TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVu
ZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFU
UzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7Ci0gICAgICAv
L2Nhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVu
dCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNhc2UgR0xfRFJB
V19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0ZyYW1l
YnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBh
Y2tSZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5QQUNL
X0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrQWxpZ25t
ZW50OyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBf
SElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZF
X0hJTlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsTWFzazsg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5D
OiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2s7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
UGFzczsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxl
bmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQ
SEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhOyAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJs
ZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFdyaXRl
bWFzazsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzazsg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdl
dE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1
YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBS
RVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAotICAgICAgICBwYXJhbXNbMF0gPSBtTnVtQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1NB
TVBMRVNfQU5HTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9
IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsKLSAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAg
ICAgICAgCi0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZG
RVJTOgotICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAh
PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoZ2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKTsKLSAgICAg
ICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgICAgIHBhcmFtc1sxXSA9
IG1heERpbWVuc2lvbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChz
dXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpw
YXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQzX0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklFV1BPUlQ6Ci0gICAgICAgIHBh
cmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52
aWV3cG9ydFk7Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOwotICAg
ICAgICBwYXJhbXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnNj
aXNzb3JYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7Ci0gICAgICAgIHBh
cmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0
ZS5zY2lzc29ySGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
X01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6Ci0g
ICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdG
cmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVl
blNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpw
YXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhh
U2l6ZSgpOyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
OwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVy
ID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uaWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVY
VFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRl
LmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJ
T05fU1RSQVRFR1lfRVhUOgotICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMp
Ci17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVkIGZvciBERVBU
SF9DTEVBUl9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gaXMgRkxPQVQgcmF0
aGVyIHRoYW4gSU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVj
LiBUaGlzIGlzIGR1ZQotICAgIC8vIHRvIHRoZSBmYWN0IHRoYXQgaXQgaXMgc3RvcmVkIGludGVy
bmFsbHkgYXMgYSBmbG9hdCwgYW5kIHNvIHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbgotICAgIC8v
IGlmIHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRoaXMgY29udmVy
c2lvbiBpcyBhbHJlYWR5IGltcGxlbWVudGVkIAotICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25l
IGNhbGxzIGdsR2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJp
YWJsZSwgd2UKLSAgICAvLyBwbGFjZSBERVBUSF9DTEVBUl9WQUxVRSB3aXRoIHRoZSBmbG9hdHMu
IFRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZwotICAgIC8vIGFw
cGxpY2F0aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBH
TF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9y
bWF0czsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJ
TkFSWV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhf
VU5JRk9STV9WRUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOgotICAg
ICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAgICAgY2FzZSBH
TF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgot
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOgotICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRF
Ul9BTkdMRToKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xf
R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xf
R1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBI
QV9CSVRTOgotICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JJVFM6Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAg
ICBjYXNlIEdMX0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgotICAg
ICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
UkVGOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
UEFTU19ERVBUSF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BB
U1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFT
UzoKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAgY2FzZSBHTF9CTEVORF9E
U1RfUkdCOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0JM
RU5EX0VRVUFUSU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAg
Y2FzZSBHTF9TVUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgot
ICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgY2FzZSBHTF9T
QU1QTEVfQlVGRkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgIGNhc2UgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgot
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICBjYXNlIEdMX1JF
U0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0
eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOgotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAgICAg
Km51bVBhcmFtcyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoK
LSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVt
UGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklF
V1BPUlQ6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgotICAgICAgICB7Ci0gICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6Ci0gICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICBjYXNlIEdMX0RFUFRIX1dSSVRF
TUFTSzoKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZB
Q0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLAotICAgICAgY2FzZSBH
TF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0cmlldmVkIHRocm91
Z2ggdGhlIEdldHtUeXBlfXYgcXVlcmllcy4KLSAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RP
X0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMg
Ym9vbC1uYXR1cmFsCi0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToKLSAgICAgIGNhc2Ug
R0xfU0NJU1NPUl9URVNUOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6Ci0gICAgICBjYXNl
IEdMX0RFUFRIX1RFU1Q6Ci0gICAgICBjYXNlIEdMX0JMRU5EOgotICAgICAgY2FzZSBHTF9ESVRI
RVI6Ci0gICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAx
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1B
U0s6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAg
ICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9QT0xZR09OX09GRlNFVF9GQUNUT1I6Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VO
SVRTOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfTElO
RV9XSURUSF9SQU5HRToKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgot
ICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUg
PSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2Ug
R0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7
Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0
aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQKLS8vIHNjaXNzb3IgcmVj
dGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBib29sIHJlbmRlclRh
cmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFs
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIGlmIChy
ZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewot
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0
Ci0gICAgICAgIH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRh
cmdldCk7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0
U2VyaWFsOwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFy
ZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZm
ZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICAgICAgcmVuZGVyVGFyZ2V0
Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0K
LQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSAwOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZm
ZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAg
ICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGgg
c3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9
IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkg
IT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICBpZiAo
IWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2ls
IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0K
LSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8
fAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNl
cmlhbCB8fAotICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQotICAgIHsKLSAgICAg
ICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwotICAgICAg
ICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAg
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFt
UmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCi0gICAg
ewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJP
YmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBs
b3N0Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFy
Z2V0RGVzYyk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9S
VDkgdmlld3BvcnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsK
LSAgICBmbG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdub3Jl
Vmlld3BvcnQpCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3Bv
cnQuWSA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lk
dGg7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsK
LSAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSAx
LjBmOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBSRUNUIHJlY3QgPSB0cmFuc2Zv
cm1QaXhlbFJlY3QobVN0YXRlLnZpZXdwb3J0WCwgbVN0YXRlLnZpZXdwb3J0WSwgbVN0YXRlLnZp
ZXdwb3J0V2lkdGgsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0KTsKLSAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19j
YXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0Llkg
PSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodCkpOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkg
LSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdo
dCA9IGNsYW1wKHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPiht
UmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkp
OwotICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFog
PSB6RmFyOwotICAgIH0KLQotICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0
LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcg
dG8gcmVuZGVyCi0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3
cG9ydEluaXRpYWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVv
ZiBtU2V0Vmlld3BvcnQpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9y
dCgmdmlld3BvcnQpOwotICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsKLSAgICAgICAg
bVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQotICAgIHsKLSAgICAg
ICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBy
ZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KG1TdGF0ZS5zY2lzc29yWCwgbVN0YXRlLnNjaXNzb3JZ
LCBtU3RhdGUuc2Npc3NvcldpZHRoLCBtU3RhdGUuc2Npc3NvckhlaWdodCwgbVJlbmRlclRhcmdl
dERlc2MuSGVpZ2h0KTsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3QubGVmdCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAg
ICAgICByZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJl
bmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAo
cmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRo
KSk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bVNjaXNzb3JTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgR0xpbnQgaGFs
ZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7
Ci0gICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAtMS4wZiAv
IHZpZXdwb3J0LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYo
aGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwotCi0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNl
ZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4g
VGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAg
ICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAg
ICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2Mu
SGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKLSAgICAgICAgR0xmbG9hdCB3
aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lk
dGggLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3
cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7Ci0KLSAgICAgICAgR0xpbnQgZGVw
dGggPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9h
dCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07
Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKLQot
ICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdl
TG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZh
ciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNmdihk
ZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUgZml4
ZWQtZnVuY3Rpb24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBz
dGVuY2lsaW5nLCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0Ojph
cHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9i
amVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgR0xlbnVtIGFkanVzdGVkRnJvbnRG
YWNlID0gYWRqdXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKLQotICAgIEdMaW50IGZyb250
Q0NXID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQg
Y2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7Ci0KLSAgICBHTGludCBwb2ludHNPckxp
bmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKLSAgICBH
TGludCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3Jh
bU9iamVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwot
Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRB
ZGFwdGVySWRlbnRpZmllcigpOwotICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVu
dGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7Ci0gICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBj
YXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgotICAgIC8vIHdy
aXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5jb3JyZWN0IHJlc3VsdHMu
IEluc3RlYWQsCi0gICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2Rp
ZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQgbm8KLSAgICAvLyBkcmF3aW5nIGlzIGRvbmUuCi0g
ICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWls
P2lkPTE2OQotCi0gICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0g
ICAgewotICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRD
dWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7Ci0gICAgICAgIH0K
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
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQz
RFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRl
LnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19D
Q1dfU1RFTkNJTEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5jKSk7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQz
RFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVm
IDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3Rh
dGUuc3RlbmNpbE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4
OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsRmFpbCkpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNf
U1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2ls
UGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRq
dXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1df
U1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDog
RDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUu
c3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tS
ZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1df
U1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NU
RU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNr
RmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9u
dEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpG
QUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRT
dGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RS
U19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNl
OwotICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobU1h
c2tTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252
ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUu
Y29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgaWYgKGNvbG9y
TWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3
aWxsIGJlIGRyYXduLgotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsK
LQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQz
REJMRU5EX1pFUk8pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVTVEJMRU5ELCBEM0RCTEVORF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ09MT1JXUklURUVOQUJMRSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sg
PyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAg
IH0KLQotICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBp
ZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlcigpOwotICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBU
SEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9mZnNldFVuaXRz
LCAtKGludCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCopJmRlcHRo
QmlhcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURF
UFRIQklBUywgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19E
RVBUSEJJQVMsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5KQotICAgIHsK
LSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRl
ZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOwot
ICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsKLQotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBs
ZXMoKTsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWFzayA8
PD0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtYXNrIHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VJbnZlcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFzayA9
IH5tYXNrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
TVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1EaXRoZXJTdGF0ZURpcnR5
KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5B
QkxFLCBtU3RhdGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtRGl0aGVyU3Rh
dGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4
QnVmZmVyKEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgR0xz
aXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNb
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFn
ZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2Vz
KTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNs
YXJhdGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgpLCBpbnN0YW5j
ZXMsIHJlcGVhdERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50
IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVtIENvbnRleHQ6
OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykK
LXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEo
dHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGlu
ZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAg
aWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0g
ICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBBcHBsaWVzIHRoZSBzaGFkZXJz
IGFuZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250
ZXh0OjphcHBseVNoYWRlcnMoKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRD
dXJyZW50UHJvZ3JhbSgpOwotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBt
QXBwbGllZFByb2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAg
ICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3Qt
PmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4
ZWxTaGFkZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVy
KTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBt
QXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9
Ci0KLSAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMg
dGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1BJWEVMKTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3Ig
ZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3Rh
Z2UsCi0vLyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1
bml0IGFuZCB0ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFk
ZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBD
b250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBpbnQgc2FtcGxlckNv
dW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6
IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0
M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKLSAgICB1bnNpZ25lZCBpbnQgKmFw
cGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRl
eHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwotICAgIGludCBkM2RTYW1w
bGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVS
RVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2Vk
U2FtcGxlclJhbmdlKHR5cGUpOwotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2Ft
cGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUs
IHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotICAg
ICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0K
LSAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUZXh0dXJl
VHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwotCi0gICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJl
ID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKLQotICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+
Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4
XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJh
bWV0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0Zp
bHRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3Jh
cCh3cmFwUykpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0
YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdy
YXAod3JhcFQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxl
clN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0Zp
bHRlcihtYWdGaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxU
RVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNk
TWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUlt
YWdlcygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNk
U2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAgICAg
IGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJh
bmdlOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAgIHsK
LSAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXggKyBk
M2RTYW1wbGVyT2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFs
W3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlci0+
Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVy
LT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1
dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0gICAg
Ly8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAg
ICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlm
IChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFy
Z2V0KCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47ICAg
Ly8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAgIEQz
RFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0K
LSAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAg
ICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2
ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAot
ICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4
ZWxzID0gZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGlnbm1lbnQoKSA8PSA0
ICYmIG1EaXNwbGF5LT5pc0QzZDlFeERldmljZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5U
KGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Yy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0
eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsK
LSAgICAgICAgLy8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0
ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdzIG1lbW9yeQotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRl
c2MuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsKLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUcnkg
YWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQotICAgICAgICAgICAgZGlyZWN0VG9QaXhl
bHMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGlyZWN0VG9QaXhlbHMp
Ci0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1
cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1N
RU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxMKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNl
KTsKLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxM
OwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNv
bWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBk
b2N1bWVudGVkLgotICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAg
ICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKLSAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVzYy5IZWlnaHQpOwotICAgIHJlY3QubGVmdCA9IGNs
YW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICBy
ZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWln
aHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9t
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIHJlc3VsdCA9IHN5
c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19SRUFET05MWSk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuOyAgIC8v
IE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRl
c3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgdW5zaWduZWQgY2hhciAqc291
cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVy
KCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsK
LSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBp
dGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9
IC1sb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQz
REZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0g
ICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCi0gICAgICAg
ICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5v
Ci0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0g
ICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAg
ICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVjdC5y
aWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBn
OwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSAr
IGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAg
ICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAy
ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2Ig
JiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAm
IDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJn
YiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAo
YXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdi
ID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhG
RjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICog
KDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgw
MDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBp
dGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAg
ICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAg
ICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYw
MCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYg
LyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGlu
dCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAwMDAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAz
RkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBm
IC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAw
MDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGlu
IEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAg
ICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJj
ZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBi
ID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsKLSAg
ICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0
b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZU
bzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQ
aXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOwotICAgICAgICAg
ICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGFiZ3JbMV07
Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25l
ZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JF
Vl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBH
TCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAg
ICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAg
OCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8v
IHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAg
ICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9m
IEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNv
IGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAv
IHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8
IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBp
eGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBl
IGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQg
ICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAg
IDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAg
ICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAg
ICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29t
cG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAg
ZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8
PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBy
ICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfVFlQRQotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAv
IHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBz
eXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRm
aWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1
ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsKLQotICAgIGlmIChtYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZF
Ul9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5
cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVB
Ul9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JV
RkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwot
ICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3Mg
fD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMdWludCBzdGVu
Y2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJ
VCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAg
ICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05P
TkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5j
aWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5j
aWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxs
LiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgICAgICBkZXB0aFN0
ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNp
bFNpemUgPSBkeDJlczo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAgICAgICAgICAg
c3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAgICAg
ICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0
IG5vdCB0aGUgdmlld3BvcnQKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBE
M0RDT0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5hbHBoYSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4
PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZSkpOwotICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVh
clZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4
MDAwMDAwRkY7Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6
ZShtUmVuZGVyVGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBo
YTsKLQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQz
RENMRUFSX1NURU5DSUwpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2ls
VW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAm
IEQzRENMRUFSX1RBUkdFVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIShtU3RhdGUuY29sb3JNYXNrUmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVl
ICYmIGFscGhhVW5tYXNrZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5l
ZWRNYXNrZWRTdGVuY2lsQ2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBh
bHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMg
c2F2ZWQuCi0gICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBh
dGhzIHdpbGwgYmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0
aGF0IHBhdGggaXMgdGFrZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFz
a2VkQ2xlYXJTYXZlZFN0YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0g
bURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVN
T1JZKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRF
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFM
U0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJI
VyB8IEQzREZWRl9ESUZGVVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZSgwLCBOVUxMLCAwLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFS
RzEpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNT
X0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJH
MSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNl
RnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5F
bmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlLT5DYXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVF
TkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZV
TkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0KLSAg
ICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6
Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3Jl
ZW4sIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJ
TCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNp
bCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJ
VEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBE
M0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKLSAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRP
UF9TRUxFQ1RBUkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEs
IEQzRFRBX1RGQUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19U
RVhUVVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0KLSAgICAgICAgZm9yKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZmxvYXQgcXVhZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdl
dCwgYWxpZ25lZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9IC0wLjVm
OwotICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsK
LSAgICAgICAgcXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAxLjBmOwot
Ci0gICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0g
ICAgICAgIHF1YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOwotICAg
ICAgICBxdWFkWzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7Ci0KLSAg
ICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7Ci0g
ICAgICAgIHF1YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4wZjsKLQot
ICAgICAgICBxdWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwotICAg
ICAgICBxdWFkWzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOwotICAg
ICAgICBxdWFkWzNdWzNdID0gMS4wZjsKLQotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgp
OwotICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwg
MiwgcXVhZCwgc2l6ZW9mKGZsb2F0WzRdKSk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xF
QVJfWkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+Q2xl
YXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1
cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7Ci0g
ICAgaW50IHByaW1pdGl2ZUNvdW50OwotCi0gICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZl
VHlwZShtb2RlLCBjb3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCi0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgaWYgKHByaW1pdGl2ZUNv
dW50IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFhcHBs
eVJlbmRlclRhcmdldChmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXBwbHlTdGF0ZShtb2RlKTsKLQotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAg
R0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCAm
cmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFw
cGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVT
YW1wbGVycyhmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7
Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9v
cChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
aW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIg
KmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50
KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lCKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNl
cyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1BcHBsaWVk
SUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVk
UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50
aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZl
Q291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFBy
b2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwotICAgIGludCBwcmlt
aXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwg
Y291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJn
ZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3Rh
dGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVu
dW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmlu
ZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRl
eEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgIEdMc2l6ZWkgcmVw
ZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbklu
ZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAh
PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0K
LQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICgh
Z2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlm
ICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNj
ZW5lKCk7Ci0KLSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5t
aW5JbmRleCk7ICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVU
eXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4
Q291bnQsIGluZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgZ2xGbHVzaCB3aGVuIGJs
b2NrIGlzIGZhbHNlLCBnbEZpbmlzaCB3aGVuIGJsb2NrIGlzIHRydWUKLXZvaWQgQ29udGV4dDo6
c3luYyhib29sIGJsb2NrKQotewotICAgIG1EaXNwbGF5LT5zeW5jKGJsb2NrKTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4KQotewotICAgIC8vIEdldCB0aGUgcmF3IGlu
ZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdMX05PTkUgJiYgbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqaW5k
ZXhCdWZmZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAg
ICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZlci0+ZGF0
YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBVSU5UIHN0YXJ0SW5kZXggPSAwOwotICAgIGJv
b2wgc3VjY2VlZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6
ZW9mKHVuc2lnbmVkIGludCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAg
ewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURl
dmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
TGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpOwot
Ci0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
KmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNl
TmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGlj
ZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7
Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVk
ZWQgPSAoY291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0KLSAgICAgICAgaWYg
KCFtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcg
U3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwg
RDNERk1UX0lOREVYMTYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVl
ZGVkLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAg
ICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gMjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBO
b24taW5kZXhlZCBkcmF3Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+
KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+
KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAo
c3VjY2VlZGVkKQotICAgIHsKLSAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbUxpbmVM
b29wSUItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJ
bmRpY2VzKG1MaW5lTG9vcElCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBtQXBwbGllZElC
U2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgs
IG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29waW5nIGluZGV4IGJ1ZmZl
ciBmb3IgR0xfTElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkKLXsK
LSAgICBtSW52YWxpZEVudW0gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFs
aWRWYWx1ZSgpCi17Ci0gICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSB0
cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkKLXsKLSAgICBtT3V0
T2ZNZW1vcnkgPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1
ZmZlck9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRy
dWU7Ci19Ci0KLS8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRz
IGZsYWcsIGlmIGFueS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuNSBwYWdlIDEz
LgotR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobUludmFsaWRFbnVtKQot
ICAgIHsKLSAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfRU5VTTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRWYWx1ZSkKLSAgICB7Ci0g
ICAgICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9WQUxVRTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRPcGVyYXRpb24pCi0gICAgewotICAg
ICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZB
TElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAobU91dE9mTWVtb3J5KQotICAgIHsKLSAg
ICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9N
RU1PUlk7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pCi0g
ICAgewotICAgICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOwotICAgIH0KLQot
ICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3Rh
dHVzKCkKLXsKLSAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAg
ICAgICAgYm9vbCBsb3N0ID0gbURpc3BsYXktPnRlc3REZXZpY2VMb3N0KCk7Ci0KLSAgICAgICAg
aWYgKGxvc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VM
b3N0KCk7ICAgLy8gU2V0cyBtUmVzZXRTdGF0dXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
ZW51bSBzdGF0dXMgPSBtUmVzZXRTdGF0dXM7Ci0KLSAgICBpZiAobVJlc2V0U3RhdHVzICE9IEdM
X05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT50ZXN0RGV2aWNlUmVzZXR0
YWJsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJP
UjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1ib29s
IENvbnRleHQ6OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gKG1S
ZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwotfQotCi1ib29s
IENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1
cHBvcnRzU2hhZGVyTW9kZWwzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdW
ZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFY
X1ZBUllJTkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsKLX0KLQotdW5z
aWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPyBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsKLX0KLQotdW5zaWduZWQgaW50IENvbnRleHQ6Omdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKTsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgOiBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NN
MjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE5l
YXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNv
bnN0Ci17Ci0gICAgaWYgKHJlcXVlc3RlZCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
cXVlc3RlZDsKLSAgICB9Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwotICAgIGlm
IChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChpdHItPnNlY29uZFtp
XSAmJiBpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c0V2ZW50UXVlcmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c09jY2x1
c2lvblF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1Rl
eHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUNVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6
OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
RmxvYXQzMlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVh
ckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
czsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3Vw
cG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtUmVu
ZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBD
b250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhp
bXVtVGV4dHVyZUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsK
LX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBw
b3J0czMyYml0SW5kaWNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5k
aWNlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlOwotfQotCi1ib29sIENv
bnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0luc3RhbmNpbmc7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZm
ZXIpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6Ci0g
ICAgLy8gSWYgYSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFs
bCBiaW5kaW5ncyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgLy8g
KGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0
IHRvIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAg
ICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAg
IGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQo
TlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVy
ZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAz
LjggcGFnZSA4NDoKLSAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlz
IGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUg
b2JqZWN0IGFyZQotICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybwotCi0gICAg
Zm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKSA9PSB0ZXh0
dXJlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6Ci0g
ICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBh
dHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCi0g
ICAgLy8gYXMgaWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEg
dGV4dHVyZSBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKLSAg
ICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZl
ci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZm
ZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZy
YW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIGlmIChkcmF3
RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVy
KQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKLSAg
ICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJn
ZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoCi0gICAgLy8gQmluZEZy
YW1lYnVmZmVyIGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZF
UiBhbmQgZnJhbWVidWZmZXIgb2YgemVyby4KLQotICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVm
ZmVyID09IGZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigw
KTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgfQotfQotCi12
b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewot
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToKLSAgICAvLyBJ
ZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIg
aXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKLSAgICAvLyBoYWQg
YmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHpl
cm8uCi0KLSAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgLy8gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTExOgotICAgIC8vIElmIGEgcmVuZGVy
YnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0
aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLAotICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYg
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVm
ZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQKLSAgICAvLyBwb2ludCB0byB3aGljaCB0aGlz
IGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgot
Ci0gICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigp
OwotICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIo
KTsKLQotICAgIGlmIChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVi
dWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLQotICAgIGlm
IChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcik7Ci0gICAgfQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4
dHVyZShUZXh0dXJlVHlwZSB0eXBlKQotewotICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdLmdldCgpOwotCi0gICAgaWYgKHQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9OwotCi0gICAg
ICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdo
IHRvIFRFWFRVUkVfMkQKLQotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJl
MkQoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAgICAgICAgICBpbmNv
bXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEs
IGNvbG9yKTsKLSAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJl
ID0gbmV3IFRleHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0K
LSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwot
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLQotICAgICAgICAgICAgICB0ID0gaW5j
b21wbGV0ZUN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwotICAgIH0KLQot
ICAgIHJldHVybiB0OwotfQotCi1ib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRy
YXdNb2RlKQotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2Rl
ID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLX0KLQot
Ym9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgc3dp
dGNoIChkcmF3TW9kZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgIGNh
c2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgIGNhc2UgR0xfTElO
RVM6Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0
cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQotewotICAgIEFTU0VSVChp
bmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07
Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZh
bHVlc1szXTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlDdXJyZW50VmFsdWUoaW5k
ZXgpOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGlu
ZGV4LCBHTHVpbnQgZGl2aXNvcikKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29y
ID0gZGl2aXNvcjsKLX0KLQotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIK
LS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVuc2lv
bnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCi17Ci0gICAgbUV4dGVuc2lv
blN0cmluZyA9ICIiOwotCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHMz
MmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U19lbGVtZW50X2luZGV4X3VpbnQgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVz
KCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIo
KSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXRfbGluZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVf
ZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRf
bGluZWFyICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAi
OwotICAgIH0KLQotICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYg
KHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7Ci0gICAgfQotCi0gICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOwotCi0gICAgaWYgKHN1cHBvcnRz
RFhUMVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9F
WFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7Ci0gICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwotCi0gICAgLy8gQU5HTEUtc3Bl
Y2lmaWMgZXh0ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX2JsaXQgIjsKLSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MyAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0NSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xF
X3RleHR1cmVfdXNhZ2UgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFu
c2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsKLQotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBl
eHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOwotICAgIH0KLQotICAgIHN0ZDo6
c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29m
KCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAg
IG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIg
KkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRl
bnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotdm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJp
bmcoKQotewotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxh
eS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKLQotICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdM
RSAoIjsKLSAgICBtUmVuZGVyZXJTdHJpbmcgKz0gaWRlbnRpZmllci0+RGVzY3JpcHRpb247Ci0g
ICAgbVJlbmRlcmVyU3RyaW5nICs9ICIpIjsKLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0
UmVuZGVyZXJTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyZXJTdHJpbmcuY19z
dHIoKTsKLX0KLQotdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdM
aW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQg
ZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spCi17
Ci0gICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigp
OwotICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIo
KTsKLQotICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxl
dGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAgIWRyYXdGcmFt
ZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVG
RkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZl
ckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7
Ci0gICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSRUNUIHNvdXJjZVJl
Y3Q7Ci0gICAgUkVDVCBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAgIHsK
LSAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDA7Ci0gICAgICAgIHNvdXJjZVJlY3Qucmln
aHQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgwOwotICAgICAgICBkZXN0
UmVjdC5yaWdodCA9IGRzdFgxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3Vy
Y2VSZWN0LmxlZnQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgxOwotICAg
ICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0g
ZHN0WDA7Ci0gICAgfQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBz
b3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJl
Y3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9t
ID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAg
ZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgICAgICBzb3VyY2VS
ZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3Qu
Ym90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291
cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVj
dCA9IGRlc3RSZWN0OwotCi0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAg
ICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVy
IHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdAotICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhl
IGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qtc3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBv
ZiB0aGUKLSAgICAgICAgLy8gcmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwg
cmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4KLSAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3Rh
dGUuc2Npc3NvclgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5z
Y2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5s
ZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5s
ZWZ0ICs9IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4g
bVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0
YXRlLnNjaXNzb3JXaWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9
IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgICAgICBzb3Vy
Y2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3JZIC0gZGVzdFJlY3QudG9wOwotICAgICAgICAgICAg
ZGVzdFNjaXNzb3JlZFJlY3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICAgICAgc291
cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZGVzdFJlY3QuYm90dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtICht
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0
U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3Nvckhl
aWdodDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0g
ICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1t
ZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsKLSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9
IGRlc3RTY2lzc29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJl
Y3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2Yg
dGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMu
Ci0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50
IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1t
ZWRSZWN0LmxlZnQgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsK
LSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lk
dGgpCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAt
IHJlYWRCdWZmZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFk
QnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAg
ICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAg
IGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRy
aW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7
Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJI
ZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0
b20gLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20g
PSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlE
aWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewot
ICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCAr
PSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1
ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJp
Z2h0IC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBk
cmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZm
OwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJp
bW1lZFJlY3QudG9wID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZm
OwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhl
aWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20g
LSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJh
d0J1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZm
OwotICAgIH0KLQotICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAo
c291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1
ZmZlckhlaWdodCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRy
aW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAot
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRy
YXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBk
ZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8
IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVy
Q29weSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklU
KQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAg
ICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZF
UjsKLSAgICAgICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3
RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAg
ICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAg
ICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJs
aXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIp
OwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0
UmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQotICAgIH0KLQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRI
X0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgUmVu
ZGVyYnVmZmVyICpyZWFkRFNCdWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRy
YXdEU0J1ZmZlciA9IE5VTEw7Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVw
dGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBk
ZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0g
ICAgICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwg
PSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAh
PSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJs
aXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdE
U0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2ls
IGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVm
ZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdE
U0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAg
ICAgIChyZWFkRFNCdWZmZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVw
dGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAg
ICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5KiByZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291
cmNlVHJpbW1lZFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05P
TkUpOwotCi0gICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRo
U3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxM
LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWls
ZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsr
KQotICAgIHsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9
IE5VTEw7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0K
LX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQot
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7
IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xh
cmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRl
eERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dy
YW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgICpyZXBl
YXREcmF3ID0gMTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRS
SUJTOwotICAgIGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0K
LSAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIEZpbmQgYW4gaW5kZXhl
ZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMAotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNv
ciA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
bmRleGVkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgYnJl
YWs7ICAgLy8gRm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCi0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9
PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9J
TlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRFZFUlRFWEVMRU1F
TlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVMRU1F
TlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzW2ld
LmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAg
ICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIER1ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcg
d2hlbiBub25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAg
ICAgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDAp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9
IGluZGV4ZWRBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVB
TVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3RhbmNlczsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEg
fCBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNl
RnJlcShzdHJlYW0sIGZyZXF1ZW5jeSk7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5n
RW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5z
ZXJpYWwgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBh
dHRyaWJ1dGVzW2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgYXR0cmlidXRlc1tpXS52
ZXJ0ZXhCdWZmZXIsIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ldLnN0cmlkZSk7
Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgPSBhdHRyaWJ1dGVz
W2ldLnNlcmlhbDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSA9
IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVh
bV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGVsZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk9m
ZnNldCA9IDA7Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBl
OwotICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwot
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Ci0gICAg
ICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChp
KTsKLSAgICAgICAgICAgIGVsZW1lbnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChp
bnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJT
KQotICAgIHsKLSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
aSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVM
RU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsr
KQotICAgIHsKLSAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhE
ZWNsQ2FjaGVbaV07Ci0gICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBl
bGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkp
KSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZl
cnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb24pOwotICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVj
bGFyYXRpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJP
UjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2Fj
aGUgPSBtVmVydGV4RGVjbENhY2hlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVS
VEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhE
ZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0g
ICAgewotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBt
TGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUg
dG8gd29ycnkKLSAgICAgICAgLy8gYWJvdXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RD
YWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNp
emVvZihEM0RWRVJURVhFTEVNRU5UOSkpOwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFy
YXRpb24oZWxlbWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZp
Y2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwot
ICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxh
c3RDYWNoZS0+bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7
Ci19Ci0KLXZvaWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewot
ICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwotICAgIH0KLQotICAgIG1MYXN0U2V0
VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2Vz
IGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQKLX0KLQotfQotCi1leHRlcm4gIkMiCi17
Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcs
IGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29s
IHJvYnVzdEFjY2VzcykKLXsKLSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hh
cmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7Ci19Ci0KLXZvaWQgZ2xEZXN0
cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBkZWxldGUgY29udGV4dDsK
LQotICAgIGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCi0gICAgewotICAgICAgICBn
bDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotfQotCi12b2lkIGdsTWFr
ZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWds
OjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0LCBkaXNw
bGF5LCBzdXJmYWNlKTsKLX0KLQotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKQot
ewotICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOwotfQotfQorLy8NCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0K
Ky8vDQorDQorLy8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNz
LCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcNCisvLyByZW5kZXJpbmcgb3Bl
cmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENv
bnRleHQuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiDQorDQorI2luY2x1ZGUg
PGFsZ29yaXRobT4NCisNCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0Js
aXQuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIg0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIg0KKyNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW0uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCINCisjaW5jbHVk
ZSAibGliR0xFU3YyL1F1ZXJ5LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIu
aCINCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIv
VGV4dHVyZS5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCINCisj
aW5jbHVkZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCINCisNCisjdW5kZWYgbmVhcg0K
KyN1bmRlZiBmYXINCisNCituYW1lc3BhY2UgZ2wNCit7DQorQ29udGV4dDo6Q29udGV4dChjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpDQor
ew0KKyAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVk
DQorDQorICAgIG1EaXNwbGF5ID0gTlVMTDsNCisgICAgbURldmljZSA9IE5VTEw7DQorDQorICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOw0KKw0KKyAgICBzZXRDbGVh
ckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOw0KKw0KKyAgICBtU3RhdGUuZGVwdGhDbGVh
clZhbHVlID0gMS4wZjsNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsNCisNCisg
ICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7DQorICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JB
Q0s7DQorICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7DQorICAgIG1TdGF0ZS5kZXB0aFRl
c3QgPSBmYWxzZTsNCisgICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdMX0xFU1M7DQorICAgIG1TdGF0
ZS5ibGVuZCA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7DQor
ICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOw0KKyAgICBtU3RhdGUuZGVzdEJs
ZW5kUkdCID0gR0xfWkVSTzsNCisgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsN
CisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsNCisgICAgbVN0YXRl
LmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xv
ci5yZWQgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7DQorICAgIG1TdGF0
ZS5ibGVuZENvbG9yLmJsdWUgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7
DQorICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZ1
bmMgPSBHTF9BTFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsNCisgICAgbVN0YXRl
LnN0ZW5jaWxNYXNrID0gLTE7DQorICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7DQor
ICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7DQorICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1JlZiA9IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7DQorICAg
IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZh
aWwgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQ
Ow0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOw0KKyAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoRmFpbCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBh
c3MgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsNCisg
ICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOw0KKyAgICBtU3RhdGUucG9seWdv
bk9mZnNldFVuaXRzID0gMC4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9
IGZhbHNlOw0KKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsNCisgICAgbVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBmOw0KKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJ
bnZlcnQgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7DQorICAgIG1T
dGF0ZS5kaXRoZXIgPSB0cnVlOw0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xf
RE9OVF9DQVJFOw0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IEdM
X0RPTlRfQ0FSRTsNCisNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7DQorDQorICAgIG1T
dGF0ZS52aWV3cG9ydFggPSAwOw0KKyAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisgICAgbVN0
YXRlLnZpZXdwb3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Ow0KKyAgICBt
U3RhdGUuek5lYXIgPSAwLjBmOw0KKyAgICBtU3RhdGUuekZhciA9IDEuMGY7DQorDQorICAgIG1T
dGF0ZS5zY2lzc29yWCA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQorICAgIG1TdGF0
ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7DQorDQorICAgIG1T
dGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0
cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7DQorICAgIG1TdGF0ZS5jb2xv
ck1hc2tBbHBoYSA9IHRydWU7DQorICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOw0KKw0KKyAg
ICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIG1SZXNvdXJjZU1h
bmFnZXIgPSBzaGFyZUNvbnRleHQtPm1SZXNvdXJjZU1hbmFnZXI7DQorICAgICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5hZGRSZWYoKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAg
IG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7DQorICAgIH0NCisNCisg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6DQorICAgIC8vIElu
IHRoZSBpbml0aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVfTUFQIGhhdmUg
dHdvZGltZW5zaW9uYWwNCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9y
cyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uDQorICAgIC8vIEluIG9yZGVyIHRo
YXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJl
IHRyZWF0ZWQgYXMgdGV4dHVyZQ0KKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9zZSBuYW1lcyBh
cmUgMC4NCisNCisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOw0KKyAg
ICBtVGV4dHVyZUN1YmVNYXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAoMCkpOw0KKw0KKyAg
ICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7DQorICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsNCisg
ICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZFRleHR1cmVDdWJlTWFwKDAp
Ow0KKyAgICBiaW5kVGV4dHVyZTJEKDApOw0KKyAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0K
KyAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0K
Kw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKw0KKyAgICBtU3RhdGUucGFja0Fs
aWdubWVudCA9IDQ7DQorICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0Ow0KKyAgICBtU3Rh
dGUucGFja1JldmVyc2VSb3dPcmRlciA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGF0YU1hbmFn
ZXIgPSBOVUxMOw0KKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7DQorICAgIG1CbGl0ID0g
TlVMTDsNCisgICAgbUxpbmVMb29wSUIgPSBOVUxMOw0KKw0KKyAgICBtSW52YWxpZEVudW0gPSBm
YWxzZTsNCisgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKyAgICBtSW52YWxpZE9wZXJhdGlv
biA9IGZhbHNlOw0KKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsNCisgICAgbUludmFsaWRGcmFt
ZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxz
ZTsNCisgICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7DQorICAgIG1SZXNldFN0YXR1cyA9IEdMX05P
X0VSUk9SOw0KKyAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNldHMgPyBHTF9MT1NFX0NP
TlRFWFRfT05fUkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCk7DQorICAg
IG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7DQorDQorICAgIG1TdXBwb3J0c0RYVDFUZXh0
dXJlcyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsNCisgICAg
bVN1cHBvcnRzRFhUNVRleHR1cmVzID0gZmFsc2U7DQorICAgIG1TdXBwb3J0c0V2ZW50UXVlcmll
cyA9IGZhbHNlOw0KKyAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7DQorICAg
IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOw0KKyAgICBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA9IDA7DQorICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOw0KKyAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOw0KK30NCisNCitDb250ZXh0Ojp+Q29udGV4dCgpDQorew0KKyAgICBp
ZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApDQorICAgIHsNCisgICAgICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSk7DQorICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgICAg
ICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghbUZy
YW1lYnVmZmVyTWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVy
KG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hpbGUg
KCFtRmVuY2VNYXAuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNl
TWFwLmJlZ2luKCktPmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1RdWVyeU1hcC5l
bXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGVRdWVyeShtUXVlcnlNYXAuYmVnaW4oKS0+
Zmlyc3QpOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0
eSgpKQ0KKyAgICB7DQorICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdp
bigpLT5zZWNvbmQ7DQorICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNh
bXBsZVN1cHBvcnQuYmVnaW4oKSk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgdHlwZSA9IDA7
IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAgew0KKyAgICAgICAgZm9y
IChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEY7IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0
eXBlKyspDQorICAgIHsNCisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5V
TEwpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJv
dW5kQnVmZmVyLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmFjdGl2ZVF1
ZXJ5W2ldLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0
KE5VTEwpOw0KKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAg
bVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7DQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNl
dChOVUxMKTsNCisgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7DQorDQorICAgIGRl
bGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7DQorICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsN
CisgICAgZGVsZXRlIG1CbGl0Ow0KKyAgICBkZWxldGUgbUxpbmVMb29wSUI7DQorDQorICAgIGlm
IChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQ0KKyAgICB7DQorICAgICAgICBtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNlTWFuYWdlci0+
cmVsZWFzZSgpOw0KK30NCisNCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgbURpc3BsYXkgPSBk
aXNwbGF5Ow0KKyAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOw0KKw0KKyAgICBp
ZiAoIW1IYXNCZWVuQ3VycmVudCkNCisgICAgew0KKyAgICAgICAgbURldmljZUNhcHMgPSBtRGlz
cGxheS0+Z2V0RGV2aWNlQ2FwcygpOw0KKw0KKyAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0g
bmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOw0KKyAgICAgICAgbUluZGV4RGF0
YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisgICAgICAg
IG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7DQorDQorICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2Rl
bDMgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAw
KTsNCisgICAgICAgIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPSBtRGlzcGxheS0+Z2V0VmVydGV4
VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBt
RGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0
c0luc3RhbmNpbmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsNCisNCisgICAg
ICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNl
Q2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCks
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heEN1YmVUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heFJlbmRlcmJ1
ZmZlckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOw0KKyAgICAgICAgbU1heFRleHR1
cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsNCisgICAgICAgIFRSQUNF
KCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4
UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQiLA0KKyAgICAgICAg
ICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1h
eFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7DQorDQorICAgICAgICBj
b25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0NCisgICAgICAgIHsNCisgICAg
ICAgICAgICBEM0RGTVRfQThSOEc4QjgsDQorICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4LA0K
KyAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsDQorICAgICAgICAgICAgRDNERk1UX0QyNFM4DQor
ICAgICAgICB9Ow0KKw0KKyAgICAgICAgaW50IG1heCA9IDA7DQorICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQp
OyArK2kpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9
IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsNCisgICAgICAgICAgICBt
RGlzcGxheS0+Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KHJlbmRlckJ1ZmZlckZvcm1hdHNbaV0sIG11
bHRpc2FtcGxlQXJyYXkpOw0KKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVy
QnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Ow0KKw0KKyAgICAgICAgICAgIGZv
ciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGog
IT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsNCisgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIG1NYXhTdXBwb3J0ZWRTYW1w
bGVzID0gbWF4Ow0KKw0KKyAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXkt
PmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzID0gbURpc3BsYXktPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1
cHBvcnRzRFhUMVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOw0K
KyAgICAgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gbURpc3BsYXktPmdl
dERYVDVUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVz
ID0gbURpc3BsYXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOw0KKyAgICAg
ICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJl
U3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMg
PSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBw
b3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNw
bGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7DQorDQorICAgICAgICBtU3VwcG9ydHMzMmJp
dEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7DQorDQor
ICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAgICAgIGlmIChz
dXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21w
cmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBw
b3J0c0RYVDNUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBwb3J0
c0RYVDVUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGluaXRFeHRlbnNp
b25TdHJpbmcoKTsNCisgICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOw0KKw0KKyAgICAgICAg
bVN0YXRlLnZpZXdwb3J0WCA9IDA7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisg
ICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisgICAg
ICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOw0KKw0KKyAg
ICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7
DQorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisg
ICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7DQorDQor
ICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIC8vIFdyYXAg
dGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNz
aWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVs
dFJlbmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQor
DQorICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVm
YXVsdFJlbmRlclRhcmdldCk7DQorICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2ls
YnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsNCisgICAg
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29s
b3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsNCisNCisgICAgc2V0RnJhbWVi
dWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7DQorDQorICAgIGlmIChkZWZhdWx0UmVuZGVyVGFy
Z2V0KQ0KKyAgICB7DQorICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQor
ICAgIH0NCisNCisgICAgaWYgKGRlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgZGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7DQorICAgIH0NCisgICAgDQorICAgIG1hcmtBbGxTdGF0ZURpcnR5
KCk7DQorfQ0KKw0KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1y
ZWxhdGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQg
cHJlLWRyYXcuDQordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpDQorew0KKyAgICBm
b3IgKGludCB0ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspDQorICAgIHsN
CisgICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsNCisgICAgfQ0KKw0KKyAg
ICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IHQrKykNCisgICAgew0KKyAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbdF0gPSAwOw0K
KyAgICB9DQorDQorICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVk
UmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsNCisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7DQorICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVk
SUJTZXJpYWwgPSAwOw0KKyAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisg
ICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVJlbmRlclRhcmdldERlc2NJ
bml0aWFsaXplZCA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJr
U3RhdGVEaXJ0eSgpOw0KKw0KKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbUN1
bGxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7DQorICAg
IG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtUG9seWdvbk9mZnNldFN0YXRl
RGlydHkgPSB0cnVlOw0KKyAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisg
ICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsNCisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7
DQorICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpDQorew0KKyAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1
ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjptYXJrQ29udGV4dExvc3QoKQ0KK3sNCisgICAgaWYg
KG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpDQorICAgICAg
ICBtUmVzZXRTdGF0dXMgPSBHTF9VTktOT1dOX0NPTlRFWFRfUkVTRVRfRVhUOw0KKyAgICBtQ29u
dGV4dExvc3QgPSB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmlzQ29udGV4dExvc3QoKQ0K
K3sNCisgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRD
bGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhh
KQ0KK3sNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7DQorICAgIG1TdGF0
ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5ibHVlID0gYmx1ZTsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFs
cGhhOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpDQor
ew0KKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6c2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQ0KK3sNCisgICAgbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlID0gc3RlbmNpbDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDdWxsRmFj
ZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7DQorICAgICAgICBt
Q3VsbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXND
dWxsRmFjZUVuYWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsN
Cit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkNCit7DQorICAg
IGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmN1
bGxNb2RlID0gbW9kZTsNCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0N
Cit9DQorDQordm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQ0KK3sNCisg
ICAgaWYgKG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpDQorICAgIHsNCisgICAgICAgIG1TdGF0
ZS5mcm9udEZhY2UgPSBmcm9udDsNCisgICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQ0K
K3sNCisgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAg
ICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7DQorICAgICAgICBtRGVwdGhTdGF0ZURpcnR5
ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxl
ZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykNCit7DQorICAgIGlmICht
U3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRl
cHRoRnVuYyA9IGRlcHRoRnVuYzsNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwg
ZmxvYXQgekZhcikNCit7DQorICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOw0KKyAgICBtU3RhdGUu
ekZhciA9IHpGYXI7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVk
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAg
ICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRy
dWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmJsZW5kOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNl
dEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNv
dXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zb3VyY2VC
bGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
ICE9IHNvdXJjZUFscGhhIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IGRlc3RS
R0IgfHwNCisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpDQorICAg
IHsNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJHQjsNCisgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdCOw0KKyAgICAgICAgbVN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsNCisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9
IGRlc3RBbHBoYTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVu
LCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmRDb2xv
ci5yZWQgIT0gcmVkIHx8DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVl
biB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8DQorICAgICAg
ICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkNCisgICAgew0KKyAgICAgICAgbVN0
YXRlLmJsZW5kQ29sb3IucmVkID0gcmVkOw0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3Jl
ZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBibHVlOw0KKyAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsNCisgICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRF
cXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQ0KK3sNCisg
ICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8DQorICAgICAg
ICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247DQorICAgICAgICBt
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsNCisgICAgICAgIG1CbGVu
ZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3Rl
bmNpbFRlc3QoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAh
PSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVk
Ow0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCiti
b29sIENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3RhdGUuc3RlbmNpbFRlc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFBh
cmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2ls
TWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxSZWYgfHwNCisgICAgICAgIG1T
dGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9
IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsNCisgICAgICAgIG1TdGF0ZS5zdGVu
Y2lsTWFzayA9IHN0ZW5jaWxNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdM
ZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNp
bEJhY2tNYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgIT0gc3RlbmNp
bEJhY2tGdW5jIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJh
Y2tSZWYgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tN
YXNrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJh
Y2tGdW5jOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVm
ID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrID0gc3RlbmNpbEJhY2tNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1
aW50IHN0ZW5jaWxXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2sgIT0gc3RlbmNpbFdyaXRlbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2sgPSBzdGVuY2lsV3JpdGVtYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5
ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3Jp
dGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykNCit7DQorICAgIGlmIChtU3RhdGUu
c3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNr
Ow0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2
b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xl
bnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpDQor
ew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8DQorICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRo
UGFzcykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRo
RmFpbDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNz
RGVwdGhQYXNzOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3Rl
bmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3Rl
bmNpbEJhY2tQYXNzRGVwdGhQYXNzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgIT0gc3RlbmNpbEJhY2tGYWlsIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8fA0KKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBzdGVuY2lsQmFja0ZhaWw7
DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhGYWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9
IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9
IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0Rmls
bChib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsICE9
IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVu
YWJsZWQ7DQorICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25z
dA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsNCisNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZs
b2F0IHVuaXRzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZh
Y3RvciB8fA0KKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykNCisg
ICAgew0KKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7DQorICAg
ICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7DQorICAgICAgICBtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3Rh
dGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOw0KKyAgICAgICAgbVNhbXBsZVN0
YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVB
bHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVy
YWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0g
ZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5hYmxl
ZDsNCisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCiti
b29sIENvbnRleHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Ft
cGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQ0KK3sNCisgICAg
aWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8DQorICAgICAgICBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQ0KKyAgICB7DQorICAgICAgICBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IHZhbHVlOw0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNv
dmVyYWdlSW52ZXJ0ID0gaW52ZXJ0Ow0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVl
Ow0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9vbCBlbmFi
bGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFibGVkKQ0KKyAgICB7
DQorICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAgbVNjaXNz
b3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzU2Np
c3NvclRlc3RFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2Npc3NvclRl
c3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkNCit7DQor
ICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0
ZS5kaXRoZXIgPSBlbmFibGVkOw0KKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldExp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKQ0KK3sNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRo
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGlu
dCkNCit7DQorICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50Ow0KK30NCisNCit2
b2lkIENvbnRleHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQp
DQorew0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7DQor
ICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3
ZSBjYW4gd3JpdGUNCisgICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBkZHhfZmluZSBkZXBlbmRp
bmcgb24gdGhlIGhpbnQuDQorICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3Ig
aW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBoaW50Lg0KK30NCisNCit2b2lkIENvbnRleHQ6OnNl
dFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQ0KK3sNCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7DQorICAgIG1TdGF0ZS52aWV3
cG9ydFkgPSB5Ow0KKyAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHdpZHRoOw0KKyAgICBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Np
c3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkNCit7DQorICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8fCBtU3RhdGUuc2Npc3Nvclkg
IT0geSB8fCANCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2Npc3Nv
clggPSB4Ow0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsNCisgICAgICAgIG1TdGF0ZS5z
Y2lzc29yV2lkdGggPSB3aWR0aDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gaGVp
Z2h0Ow0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBi
bHVlLCBib29sIGFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVk
IHx8IG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fA0KKyAgICAgICAgbVN0YXRlLmNv
bG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpDQor
ICAgIHsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7DQorICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVl
ID0gYmx1ZTsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOw0KKyAgICAg
ICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6
OnNldERlcHRoTWFzayhib29sIG1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAh
PSBtYXNrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsNCisgICAg
ICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpDQorew0KKyAgICBtU3RhdGUu
YWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldFJlYWRG
cmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFt
ZWJ1ZmZlcjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRs
ZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsNCit9DQor
DQorR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4
dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5h
cnJheUJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnko
R0xlbnVtIHRhcmdldCkgY29uc3QNCit7DQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7
DQorICAgIA0KKyAgICBzd2l0Y2ggKHRhcmdldCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0VYVDoNCisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2
ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7DQorICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOg0KKyAg
ICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZh
dWx0Og0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAocXVlcnlP
YmplY3QpDQorICAgIHsNCisgICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsNCisgICAg
fQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOw0KK30NCisNCitjb25zdCBWZXJ0ZXhB
dHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRy
aWJOdW0pDQorew0KKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGlu
dCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBib29sIG5vcm1hbGl6ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikNCit7DQorICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsNCisg
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsNCisgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsNCisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsN
CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7
DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50
ZXI7DQorfQ0KKw0KK2NvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7DQorfQ0KKw0KK2NvbnN0IFZlcnRleEF0
dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkNCit7DQorICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFBh
Y2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisgICAgbVN0YXRlLnBhY2tBbGlnbm1l
bnQgPSBhbGlnbm1lbnQ7DQorfQ0KKw0KK0dMaW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2
b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpDQorew0KKyAg
ICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250
ZXh0OjpnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dP
cmRlcihib29sIHJldmVyc2VSb3dPcmRlcikNCit7DQorICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJv
d09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOw0KK30NCisNCitib29sIENvbnRleHQ6OmdldFBhY2tS
ZXZlcnNlUm93T3JkZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJz
ZVJvd09yZGVyOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkNCit7DQor
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsNCit9DQorDQorR0x1
aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmNyZWF0ZVByb2dyYW0oKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNo
YWRlcihHTGVudW0gdHlwZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVTaGFkZXIodHlwZSk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkN
Cit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKCk7DQorfQ0K
Kw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQ0KK3sNCisgICAgcmV0dXJu
IG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOw0KK30NCisNCisvLyBSZXR1
cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZy
YW1lYnVmZmVyKCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJIYW5kbGVB
bGxvY2F0b3IuYWxsb2NhdGUoKTsNCisNCisgICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0gPSBO
VUxMOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3Jl
YXRlRmVuY2UoKQ0KK3sNCisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRv
ci5hbGxvY2F0ZSgpOw0KKw0KKyAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlz
cGxheSk7DQorDQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KKy8vIFJldHVybnMgYW4gdW51
c2VkIHF1ZXJ5IG5hbWUNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQ0KK3sNCisgICAg
R0x1aW50IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOw0KKw0KKyAg
ICBtUXVlcnlNYXBbaGFuZGxlXSA9IE5VTEw7DQorDQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0KKyAgICBp
ZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpDQorICAgIHsNCisgICAgICAg
IGRldGFjaEJ1ZmZlcihidWZmZXIpOw0KKyAgICB9DQorICAgIA0KKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVT
aGFkZXIoR0x1aW50IHNoYWRlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNo
YWRlcihzaGFkZXIpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dy
YW0pOw0KKyAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisNCit2b2lkIENv
bnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICBpZiAobVJlc291
cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNo
VGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KKw0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxl
dGVUZXh0dXJlKHRleHR1cmUpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXIt
PmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAgbVJlc291cmNl
TWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAg
RnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVy
TWFwLmZpbmQoZnJhbWVidWZmZXIpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0g
bUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7DQorDQorICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3Iu
cmVsZWFzZShmcmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZyYW1l
YnVmZmVyT2JqZWN0LT5zZWNvbmQ7DQorICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJh
bWVidWZmZXJPYmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVu
Y2UoR0x1aW50IGZlbmNlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0
ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOw0KKw0KKyAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZl
bmNlTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVs
ZWFzZShmZW5jZU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5z
ZWNvbmQ7DQorICAgICAgICBtRmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOw0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAg
UXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5TWFwLmZpbmQocXVlcnkpOw0K
KyAgICBpZiAocXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAg
ICBtUXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVjdC0+Zmlyc3QpOw0KKyAg
ICAgICAgaWYgKHF1ZXJ5T2JqZWN0LT5zZWNvbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cXVlcnlPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbVF1
ZXJ5TWFwLmVyYXNlKHF1ZXJ5T2JqZWN0KTsNCisgICAgfQ0KK30NCisNCitCdWZmZXIgKkNvbnRl
eHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOw0KK30NCisNCitTaGFkZXIgKkNvbnRleHQ6OmdldFNo
YWRlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNoYWRlcihoYW5kbGUpOw0KK30NCisNCitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdM
dWludCBoYW5kbGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShoYW5kbGUpOw0KK30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBo
YW5kbGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZShoYW5k
bGUpOw0KK30NCisNCitSZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihHTHVp
bnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOw0KK30NCisNCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1l
YnVmZmVyKCkNCit7DQorICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1l
YnVmZmVyKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZl
cigpDQorew0KKyAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQ0KK3sNCisgICAg
bVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7DQorDQorICAg
IG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikNCit7
DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOw0K
Kw0KKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkNCit7
DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwg
VEVYVFVSRV8yRCk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVtt
U3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOw0KK30NCisNCit2
b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkNCit7DQorICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVS
RV9DVUJFKTsNCisNCisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0
YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQor
ICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBt
RnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7DQorICAgIH0N
CisNCisgICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0KK30NCisNCit2
b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sN
CisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpDQorICAgIHsNCisgICAgICAg
IG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsNCisgICAg
fQ0KKw0KKyAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7DQorDQorICAg
IG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsNCit9
DQorDQordm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIp
DQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24o
cmVuZGVyYnVmZmVyKTsNCisNCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnVzZVByb2dyYW0o
R0x1aW50IHByb2dyYW0pDQorew0KKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1
cnJlbnRQcm9ncmFtOw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAg
ICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndp
c2UgaXQgb25seSBnZXRzIGZsYWdnZWQuDQorDQorICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJv
Z3JhbSkNCisgICAgew0KKyAgICAgICAgUHJvZ3JhbSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1h
bmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7DQorICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFt
ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOw0KKyAgICAgICAg
bUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkg
PSB0cnVlOw0KKw0KKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAg
ICAgIGlmIChvbGRQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9sZFByb2dyYW0t
PnJlbGVhc2UoKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmJl
Z2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAgLy8gRnJvbSBF
WFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2FsbGVkIHdp
dGggYW4gPGlkPiAgDQorICAgIC8vIG9mIHplcm8sIGlmIHRoZSBhY3RpdmUgcXVlcnkgb2JqZWN0
IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhlICANCisgICAgLy8gdGFyZ2V0
cyBBTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFX0VYVCwgaWYgIA0KKyAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIgdGFyZ2V0
IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiANCisgICAgLy8gZXhpc3Rp
bmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRhcmdldD4sIG9yIGlm
IDxpZD4gaXMgdGhlDQorICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55IHF1
ZXJ5IHR5cGUsIHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcw0KKyAgICAvLyBnZW5lcmF0
ZWQuDQorDQorICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUNCisgICAg
Ly8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3
ZSB3aWxsIG5lZWQgdG8gY2hlY2sNCisgICAgLy8gc2VwYXJhdGVseSB0aGF0Og0KKyAgICAvLyAg
ICBhKSBUaGUgcXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkg
Zm9yIGFueSB0YXJnZXQvdHlwZQ0KKyAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1
ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UNCisgICAgLy8g
ICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV9FWFQsDQorICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3Rp
dmUgZm9yIGVpdGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuDQorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQ0KKyAgICB7DQorICAgICAgICBp
ZiAobVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0N
CisgICAgfQ0KKw0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorICAgIHN3aXRjaCAodGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiANCisgICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IA0KKyAgICAg
ICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyANCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisg
ICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRR
dWVyeShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsNCisNCisgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdh
cyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcw0KKyAgICBpZiAoIXF1ZXJ5T2JqZWN0KQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9
DQorDQorICAgIC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNoDQorICAgIGlmIChxdWVyeU9iamVj
dC0+Z2V0VHlwZSgpICE9IHRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICAvLyBzZXQgcXVlcnkgYXMgYWN0
aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0DQorICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0u
c2V0KHF1ZXJ5T2JqZWN0KTsNCisNCisgICAgLy8gYmVnaW4gcXVlcnkNCisgICAgcXVlcnlPYmpl
Y3QtPmJlZ2luKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdl
dCkNCit7DQorICAgIFF1ZXJ5VHlwZSBxVHlwZTsNCisNCisgICAgc3dpdGNoICh0YXJnZXQpDQor
ICAgIHsNCisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IA0KKyAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IA0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogDQorICAgICAg
ICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IA0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDogDQorICAgICAgICBBU1NFUlQoZmFsc2UpOw0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0
ZS5hY3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7DQorDQorICAgIGlmIChxdWVyeU9iamVjdCA9PSBO
VUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICB9DQorDQorICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsNCisNCisgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJh
bWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpDQorew0KKyAgICBkZWxldGUgbUZyYW1l
YnVmZmVyTWFwWzBdOw0KKyAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7DQorICAgIGlm
IChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IDApDQorICAgIHsNCisgICAgICAgIG1Cb3VuZERy
YXdGcmFtZWJ1ZmZlciA9IGJ1ZmZlcjsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQ0K
K3sNCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVy
YnVmZmVyLmdldCgpOw0KKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVy
YnVmZmVyKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVu
c2lnbmVkIGludCBoYW5kbGUpDQorew0KKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJh
bWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOw0KKw0KKyAgICBpZiAoZnJh
bWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1
cm4gTlVMTDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiBmcmFt
ZWJ1ZmZlci0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0ZlbmNlICpDb250ZXh0OjpnZXRGZW5j
ZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNl
ID0gbUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU1h
cC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxz
ZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsNCisgICAgfQ0KK30NCisN
CitRdWVyeSAqQ29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVh
dGUsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1
ZXJ5TWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQo
KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAg
ICB7DQorICAgICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsNCisg
ICAgICAgICAgICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsNCisgICAgICAgIH0NCisgICAgICAg
IHJldHVybiBxdWVyeS0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQo
KTsNCit9DQorDQorQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQ0KK3sN
CisgICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7DQorfQ0KKw0KK1By
b2dyYW0gKkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKCkNCit7DQorICAgIGlmICghbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtKQ0KKyAgICB7DQorICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0g
PSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7DQor
ICAgIH0NCisgICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50UHJvZ3JhbTsNCit9DQorDQorVGV4dHVy
ZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhU
VVJFXzJEKSk7DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3Vi
ZU1hcCgpDQorew0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihnZXRT
YW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7DQorfQ0K
Kw0KK1RleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1w
bGVyLCBUZXh0dXJlVHlwZSB0eXBlKQ0KK3sNCisgICAgR0x1aW50IHRleGlkID0gbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7DQorDQorICAgIGlmICh0ZXhpZCA9PSAw
KSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVy
ZXMgYmFzZWQgb24gdGhlIHRhcmdldA0KKyAgICB7DQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQor
ICAgICAgICB7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAg
IGNhc2UgVEVYVFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOw0KKyAgICAgICAg
ICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0
eXBlXVtzYW1wbGVyXS5nZXQoKTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihH
TGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQ0KK3sNCisgICAgc3dpdGNoIChwbmFtZSkN
CisgICAgew0KKyAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFt
cyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydDsgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVN
QVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAgICAgICAgcGFy
YW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0
ZS5jb2xvck1hc2tHcmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvck1hc2tC
bHVlOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOw0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHln
b25PZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNj
aXNzb3JUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ESVRI
RVI6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1Nf
RVhUOiAqcGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9GQUxTRTsgYnJlYWs7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAg
ICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBu
YW1lLCBHTGZsb2F0ICpwYXJhbXMpDQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xF
QVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRh
dGlvbg0KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRo
ZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2
IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVy
c2lvbiBpbiBhbnkNCisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNl
IHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7
DQorICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NP
VkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWU7ICBi
cmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
cjsgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAqcGFy
YW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsNCisgICAgICBjYXNlIEdM
X0FMSUFTRURfTElORV9XSURUSF9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFT
RURfTElORV9XSURUSF9SQU5HRV9NQVg7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGds
OjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsNCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5l
YXI7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsNCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6DQorICAgICAgICBwYXJhbXNbMF0gPSBt
U3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuZ3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JD
bGVhclZhbHVlLmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZh
bHVlLmFscGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoN
CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsNCisgICAgICAgIHBh
cmFtc1sxXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJdID0g
bVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVu
ZENvbG9yLmFscGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAg
IHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9v
bCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpDQorew0K
KyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGluY2x1ZGVkIGlu
IG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbg0KKyAgICAvLyBiZWNhdXNl
IGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVT
IDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkg
ZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkNCisgICAgLy8g
Y2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxp
Y2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gDQorICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4N
CisgICAgc3dpdGNoIChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9B
VFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsNCisgICAg
ICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2V0
TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVhazsNCisgICAgICBjYXNlIEdM
X01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMoKTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJf
U0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lv
bigpOyAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6
ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBz
aGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsNCisgICAgICAvL2Nhc2UgR0xfRlJB
TUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFX
X0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUNCisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAg
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElO
R19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BB
Q0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZl
cnNlUm93T3JkZXI7ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOUEFDS19BTElH
Tk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVudDsg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5U
OiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJ
TlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZV
TkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBh
c3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQ
VEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNl
QmxlbmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNU
X1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAg
ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFy
VmFsdWU7ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzog
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAg
ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIA0KKyAgICAg
ICAgcGFyYW1zWzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsNCisgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAgICB7DQorICAg
ICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpOw0K
KyAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsNCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisg
ICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICANCisgICAgICBj
YXNlIEdMX1NBTVBMRVM6DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGlmIChm
cmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisg
ICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApDQor
ICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IDE7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQor
ICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IDA7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsNCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIGVsc2UgDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsN
CisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX0lNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9E
SU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1h
eChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGlt
ZW5zaW9uKCkpOw0KKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsNCisgICAg
ICAgICAgICBwYXJhbXNbMV0gPSBtYXhEaW1lbnNpb247DQorICAgICAgICB9DQorICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOg0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBw
b3J0c0RYVDNUZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBh
cmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUu
dmlld3BvcnRYOw0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsNCisgICAg
ICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNd
ID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9TQ0lTU09SX0JPWDoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lzc29yWDsNCisg
ICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsNCisgICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5zY2lzc29yV2lkdGg7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuc2Npc3Nv
ckhlaWdodDsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAg
ICAgY2FzZSBHTF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOw0KKw0KKyAgICAgICAgICAgIGlmIChj
b2xvcmJ1ZmZlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9C
SVRTOiAgICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVF
X0JJVFM6ICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsNCisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZl
ci0+Z2V0QWxwaGFTaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKTsNCisNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRo
U2l6ZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1
ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorDQorICAgICAgICAgICAg
aWYgKHN0ZW5jaWxidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6DQorICAgICAgICB7DQorICAgICAgICAgICAg
aWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdLmlkKCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQklORElOR19DVUJFX01BUDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4
aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1w
bGVyXS5pZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9S
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOg0KKyAgICAgICAgKnBhcmFtcyA9IG1SZXNl
dFN0cmF0ZWd5Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9C
SU5BUllfRk9STUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0gMTsNCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgICAq
cGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7DQorICAgICAgICBicmVhazsNCisgICAg
ICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVy
biB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
dW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpDQorew0KKyAg
ICAvLyBQbGVhc2Ugbm90ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFS
X1ZBTFVFIGluIHRoaXMgaW1wbGVtZW50YXRpb24NCisgICAgLy8gaXMgRkxPQVQgcmF0aGVyIHRo
YW4gSU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVjLiBUaGlz
IGlzIGR1ZQ0KKyAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5
IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24NCisgICAgLy8gaWYg
cmV0dXJuZWQgZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9u
IGlzIGFscmVhZHkgaW1wbGVtZW50ZWQgDQorICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25lIGNh
bGxzIGdsR2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJpYWJs
ZSwgd2UNCisgICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBU
aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcNCisgICAgLy8gYXBw
bGljYXRpb24uDQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBl
ID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBH
TF9JTlQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7DQorICAgICAgICB9DQorICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoNCisgICAgICBjYXNl
IEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJ
TkdfVkVDVE9SUzoNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6DQorICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZF
Ul9TSVpFOg0KKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoNCisgICAg
ICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICBjYXNlIEdM
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElO
RzoNCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xf
Q1VSUkVOVF9QUk9HUkFNOg0KKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6DQorICAgICAg
Y2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOg0KKyAgICAgIGNhc2UgR0xfVU5Q
QUNLX0FMSUdOTUVOVDoNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOg0KKyAg
ICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6DQorICAgICAg
Y2FzZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAgICAgY2Fz
ZSBHTF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAgIGNhc2Ug
R0xfREVQVEhfQklUUzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAgICBjYXNl
IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6DQorICAgICAgY2FzZSBHTF9DVUxMX0ZB
Q0VfTU9ERToNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6DQorICAgICAgY2FzZSBHTF9BQ1RJ
VkVfVEVYVFVSRToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoNCisgICAgICBjYXNlIEdM
X1NURU5DSUxfVkFMVUVfTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOg0KKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoNCisgICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZB
TFVFX01BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOg0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CQUNLX0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoN
CisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6DQorICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdC
Og0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRf
RFNUX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQToNCisgICAgICBjYXNlIEdM
X0JMRU5EX0VRVUFUSU9OX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhB
Og0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6DQorICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToN
CisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6DQorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9TSVpFOg0KKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToNCisgICAg
ICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOg0KKyAgICAgIGNhc2UgR0xfU0FNUExFUzoNCisgICAg
ICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToNCisgICAgICBjYXNlIEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9CSU5ESU5HXzJEOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOg0K
KyAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICBj
YXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICBjYXNlIEdMX1BS
T0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBl
ID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToNCisgICAgICAg
IHsNCisgICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAg
ICAgICAgKm51bVBhcmFtcyA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9W
SUVXUE9SVF9ESU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0K
KyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9WSUVXUE9SVDoNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOg0K
KyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9TSEFERVJfQ09NUElMRVI6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJU
Og0KKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfQ1VMTF9G
QUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVy
YWwgdG8gSXNFbmFibGVkLA0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAg
ICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMu
DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1
cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwNCisgICAgICBjYXNl
IEdMX1NBTVBMRV9DT1ZFUkFHRToNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6DQorICAg
ICAgY2FzZSBHTF9CTEVORDoNCisgICAgICBjYXNlIEdMX0RJVEhFUjoNCisgICAgICBjYXNlIEdM
X0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5
cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAgICpudW1QYXJh
bXMgPSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GQUNUT1I6DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoN
CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToNCisgICAgICBjYXNlIEdMX0RF
UFRIX0NMRUFSX1ZBTFVFOg0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDoNCisgICAgICAgIHsN
CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9BTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0U6DQorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0U6DQorICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToNCisgICAgICAgIHsNCisgICAgICAgICAg
ICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToN
CisgICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0
eXBlID0gR0xfRkxPQVQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7DQorICAgICAgICB9
DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBBcHBsaWVzIHRoZSBy
ZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVj
dGFuZ2xlIGFuZA0KKy8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQ0KK2Jvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkN
Cit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOw0KKw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBm
YWxzZSk7DQorICAgIH0NCisNCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVu
dCB3ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudA0KKyAgICAvLyB0byBr
ZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUg
aWYgZGVwdGggdGV4dHVyaW5nLg0KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVj
dCA9IE5VTEw7DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAg
ICB7DQorICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
TnVsbENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3Qp
DQorICAgIHsNCisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9y
IEZCTy4iKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBib29sIHJl
bmRlclRhcmdldENoYW5nZWQgPSBmYWxzZTsNCisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdl
dFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7DQorICAgIGlmIChyZW5k
ZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpDQorICAgIHsNCisg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3Rl
ZGx5IG51bGwuIik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVz
dCBiZSBsb3N0DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0g
cmVuZGVyVGFyZ2V0U2VyaWFsOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsg
Ly8gU2Npc3NvciBhcmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0t
IHRoaXMgaXMgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuDQorICAgICAg
ICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOw0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwg
PSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOw0KKyAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIGlmIChmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAg
ICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aGJ1ZmZlcigpOw0KKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRo
U3RlbmNpbCgpOw0KKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7
DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAg
ICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAg
fQ0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUo
KSAhPSBHTF9OT05FKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZm
ZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKyAgICAgICAgZGVw
dGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICBp
ZiAoIWRlcHRoU3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0
ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJp
YWwgPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZGVw
dGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fA0KKyAgICAgICAg
c3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwNCisg
ICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQpDQorICAgIHsNCisgICAgICAgIG1EZXZp
Y2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsNCisgICAgICAgIG1BcHBs
aWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsNCisgICAgICAgIG1BcHBs
aWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7DQorICAgICAgICBt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChkZXB0
aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAg
ICB9DQorDQorICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJU
YXJnZXRDaGFuZ2VkKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAg
IGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgcmVuZGVy
VGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7DQorICAgICAgICBtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOw0KKyAgICB9DQorDQorICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsNCisNCisgICAgZmxv
YXQgek5lYXIgPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7DQorICAgIGZsb2F0IHpGYXIgPSBjbGFt
cDAxKG1TdGF0ZS56RmFyKTsNCisNCisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQ0KKyAgICB7DQor
ICAgICAgICB2aWV3cG9ydC5YID0gMDsNCisgICAgICAgIHZpZXdwb3J0LlkgPSAwOw0KKyAgICAg
ICAgdmlld3BvcnQuV2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aDsNCisgICAgICAgIHZp
ZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsNCisgICAgICAgIHZpZXdw
b3J0Lk1pblogPSAwLjBmOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IDEuMGY7DQorICAgIH0N
CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0YXRlLnZp
ZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7
DQorICAgICAgICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WSwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgdmlld3Bv
cnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0
LlgpKTsNCisgICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydEhl
aWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBz
dGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7DQorICAgICAgICB2aWV3cG9ydC5NaW5aID0g
ek5lYXI7DQorICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsNCisgICAgfQ0KKw0KKyAgICBp
ZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyDQorICAgIH0NCisN
CisgICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRpYWxpemVkIHx8
IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmlld3BvcnQpICE9
IDApDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7DQor
ICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsNCisgICAgICAgIG1WaWV3cG9ydEluaXRp
YWxpemVkID0gdHJ1ZTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorDQorICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmICht
U3RhdGUuc2Npc3NvclRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVDVCByZWN0Ow0K
KyAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVj
dC50b3AgPSBjbGFtcChtU3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVu
ZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAo
bVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVjdC5ib3R0b20g
PSBjbGFtcChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisg
ICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICht
U3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkNCisgICAgew0KKyAgICAg
ICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7DQorICAgICAg
ICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOw0KKw0KKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5h
cnktPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7DQorICAgICAgICBHTGZsb2F0IHh5WzJd
ID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9Ow0KKyAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7
DQorDQorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9G
cmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkuDQorICAgICAgICBHTGludCBjb29y
ZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9h
dCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0
SGVpZ2h0IC8gMi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRl
LnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhl
aWdodCAvIDIuMGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29y
ZCwgMSwgd2h4eSk7DQorDQorICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5hcnktPmdl
dER4RGVwdGhMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpO
ZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07DQorICAgICAgICBwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7DQorDQorICAgICAgICBHTGludCBkZXB0
aFJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsNCisgICAg
ICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07
DQorICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5l
YXJGYXJEaWZmKTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsNCisgICAgfQ0K
Kw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rp
b24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5n
LCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0
ZShHTGVudW0gZHJhd01vZGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
Q3VycmVudFByb2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIEdMaW50IGZy
b250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7DQorICAgIEdM
aW50IGNjdyA9IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7DQorICAgIHByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOw0KKw0KKyAgICBHTGludCBwb2lu
dHNPckxpbmVzID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsN
CisgICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOw0KKyAg
ICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNG
cm9udCk7DQorDQorICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlz
cGxheS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsNCisgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxs
b3dlZCA9IGlkZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsNCisgICAgLy8gQXBwYXJlbnRs
eSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xv
cg0KKyAgICAvLyB3cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29y
cmVjdCByZXN1bHRzLiBJbnN0ZWFkLA0KKyAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRl
IG1hc2sgYnV0IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubw0KKyAgICAvLyBkcmF3
aW5nIGlzIGRvbmUuDQorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2pl
Y3QvaXNzdWVzL2RldGFpbD9pZD0xNjkNCisNCisgICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBt
RnJvbnRGYWNlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VM
TE1PREUsIGVzMmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBtU3RhdGUuZnJv
bnRGYWNlKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9O
RSk7DQorICAgICAgICB9DQorDQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYg
KG1TdGF0ZS5kZXB0aFRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNv
bihtU3RhdGUuZGVwdGhGdW5jKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwg
RDNEWkJfRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9
IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1N
YXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkNCisgICAgew0KKyAgICAgICAgbUJs
ZW5kU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0K
KyAgICB9DQorDQorICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBp
ZiAobVN0YXRlLmJsZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAg
IGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJg0KKyAgICAg
ICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1T
dGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QkxFTkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIEQzRENP
TE9SX1JHQkEodW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08
OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpKSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29u
dmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRG
dW5jKG1TdGF0ZS5kZXN0QmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5k
RXF1YXRpb25SR0IpKTsNCisNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdC
ICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IA0KKyAgICAgICAgICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCANCisgICAgICAgICAgICAg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7DQorDQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpD
b252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhKSk7DQorICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsNCisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBlczJkeDo6Q29u
dmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVO
QUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250
RmFjZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZy
YW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9E
RSwgVFJVRSk7DQorDQorICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkN
CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxS
RUYgPSBEM0RSU19TVEVOQ0lMUkVGOw0KKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRF
VFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVOQ0lMTUFTSzsNCisgICAgICAg
ICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sg
PSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNp
bFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgDQorICAgICAgICAg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiB8fCANCisg
ICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01h
c2spDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFyYXRlIGZyb250
L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBzdGVuY2lsIG1h
c2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOw0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYNCisg
ICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJP
YmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNp
bCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsNCisNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0ND
VyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywg
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBE
M0RSU19DQ1dfU1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOw0KKw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0
ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0
ZW5jaWwpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1B
U0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0ND
VyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6
IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3Mp
KTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lM
V1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxC
YWNrRnVuYykpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5D
SUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1B
U0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOw0KKw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcCht
U3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQz
RFJTX0NDV19TVEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywg
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5j
aWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7DQorICAgICAgICB9DQorICAg
ICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBm
YWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAg
ICAgICBpbnQgY29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9y
TWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCANCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNv
bG9yTWFza0FscGhhKTsNCisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9y
TWFza0FsbG93ZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNo
YW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLg0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJM
RU5EX09ORSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxF
TkRPUCwgRDNEQkxFTkRPUF9BREQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIGNvbG9yTWFzayk7DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDog
RkFMU0UpOw0KKw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisN
CisgICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYg
KG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlcigpOw0KKyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsNCisgICAg
ICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRV
bml0cywgLShpbnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOw0KKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikm
ZGVwdGhCaWFzKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NM
T1BFU0NBTEVERVBUSEJJQVMsIDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVNhbXBsZVN0
YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVy
YWdlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292
ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsNCisg
ICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VWYWx1ZSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxv
YXQgdGhyZXNob2xkID0gMC41ZjsNCisNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpDQorICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7DQorDQorICAgICAgICAgICAg
ICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVz
aG9sZCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0
aHJlc2hvbGQgKz0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDE7DQor
ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUlu
dmVydCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsNCisg
ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxU
SVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVNhbXBs
ZVN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobURpdGhlclN0YXRlRGly
dHkpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhF
UkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7DQorDQorICAgICAgICBtRGl0
aGVyU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0Ojph
cHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpDQorew0KKyAgICBUcmFuc2xhdGVkQXR0cmlidXRl
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsNCisNCisgICAgR0xlbnVtIGVyciA9IG1W
ZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3QsIGNvdW50LCBhdHRyaWJ1
dGVzLCBpbnN0YW5jZXMpOw0KKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIGdldEN1cnJl
bnRQcm9ncmFtKCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7DQorfQ0KKw0KKy8vIEFwcGxpZXMg
dGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkg
ZGV2aWNlDQorR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0
ZWRJbmRleERhdGEgKmluZGV4SW5mbykNCit7DQorICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRh
TWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsNCisNCisgICAgaWYgKGVyciA9PSBH
TF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1B
cHBsaWVkSUJTZXJpYWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0SW5k
aWNlcyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsNCisgICAgICAgICAgICBtQXBwbGllZElCU2Vy
aWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0
dXJuIGVycjsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0
YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVy
cygpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0o
KTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgp
ICE9IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEVmVy
dGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4U2hhZGVy
KCk7DQorICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0UGl4ZWxTaGFkZXIoKTsNCisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVs
U2hhZGVyKHBpeGVsU2hhZGVyKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOw0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jtcygp
Ow0KKyAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2Vy
aWFsKCk7DQorICAgIH0NCisNCisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOw0K
K30NCisNCisvLyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkNCit7DQor
ICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7DQorDQorICAgIGlmIChtU3VwcG9ydHNW
ZXJ0ZXhUZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVS
VEVYKTsNCisgICAgfQ0KK30NCisNCisvLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2Yg
ZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsDQorLy8gbG9va3MgdXAgdGhlIGNvcnJl
c3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLA0KKy8v
IGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJpbmcgc3RhdGUg
KG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNh
bXBsZXJUeXBlIHR5cGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3Vy
cmVudFByb2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaW50IHNhbXBsZXJDb3VudCA9
ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgOiBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIDkg
c2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlDQorICAgIHVuc2lnbmVkIGludCAqYXBwbGll
ZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVy
ZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7DQorICAgIGludCBkM2RTYW1wbGVy
T2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNB
TVBMRVIwOw0KKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNh
bXBsZXJSYW5nZSh0eXBlKTsNCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2Ft
cGxlckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykNCisgICAgew0KKyAgICAg
ICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlw
ZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4DQor
ICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7
DQorDQorICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVy
VGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsNCisNCisgICAgICAgICAgICBUZXh0dXJl
ICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsN
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVy
ZVNlcmlhbCgpOw0KKw0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8
fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4
dHVyZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkNCisgICAgICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygp
KQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsNCisgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRl
cigpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFw
KHdyYXBTKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0
YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdy
YXAod3JhcFQpKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFn
RmlsdGVyKG1hZ0ZpbHRlcikpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVG
SUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOw0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwg
JmQzZE1pcEZpbHRlcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2Ft
cGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIpOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsNCisgICAgICAgICAgICAgICAg
ICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtz
YW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7DQorICAgICAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNh
bXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsN
CisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOw0KKyAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5yZXNldERpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOw0KKyAgICAgICAgICAgICAgICBhcHBsaWVk
VGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdl
OyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQ0KKyAgICB7DQor
ICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSAwKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsg
ZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7DQorICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJp
YWxbc2FtcGxlckluZGV4XSA9IDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBD
b250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQ0KK3sNCisgICAgRnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChm
cmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTik7DQorICAgIH0NCisNCisgICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9
IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEdMc2l6
ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRl
LnBhY2tBbGlnbm1lbnQpOw0KKyAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hlY2sNCisgICAg
aWYgKGJ1ZlNpemUpDQorICAgIHsNCisgICAgICAgIGludCByZXF1aXJlZFNpemUgPSBvdXRwdXRQ
aXRjaCAqIGhlaWdodDsNCisgICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgIGlmICghcmVuZGVy
VGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxv
c3QsIHJldHVybiBzaWxlbnRseQ0KKyAgICB9DQorDQorICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
Ow0KKyAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOw0KKw0KKyAgICBpZiAoZGVzYy5N
dWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkNCisgICAgew0KKyAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0
Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0DQorICAgICAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsNCisgICAgfQ0KKw0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0g
IWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAmJiBt
RGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
eCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVp
Z2h0KSA9PSBkZXNjLkhlaWdodCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5G
b3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBl
ID09IEdMX1VOU0lHTkVEX0JZVEU7DQorICAgIGlmIChkaXJlY3RUb1BpeGVscykNCisgICAgew0K
KyAgICAgICAgLy8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0
ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdzIG1lbW9yeQ0KKyAgICAgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBk
ZXNjLkZvcm1hdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8v
IFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlDQorICAgICAgICAgICAgZGlyZWN0
VG9QaXhlbHMgPSBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIWRpcmVj
dFRvUGl4ZWxzKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZz
Y3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7DQorICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7DQorICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJm
YWNlKTsNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIHJlbmRlclRhcmdldCA9
IE5VTEw7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQg
RDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcg0KKyAgICAgICAgLy8gY29kZXMg
dGhhbiB0aG9zZSBkb2N1bWVudGVkLg0KKyAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1
bHQpKQ0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAg
ICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAg
ICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKw0KKyAgICBpZiAoZGlyZWN0
VG9QaXhlbHMpDQorICAgIHsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisg
ICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHJlY3Q7DQorICAgIHJlY3QubGVm
dCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7DQorICAgIHJl
Y3QudG9wID0gY2xhbXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQor
ICAgIHJlY3QucmlnaHQgPSBjbGFtcCh4ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihk
ZXNjLldpZHRoKSk7DQorICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2s7DQorICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwg
RDNETE9DS19SRUFET05MWSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0K
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2Uo
KTsNCisNCisgICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0
ZQ0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciop
cGl4ZWxzOw0KKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0Kilw
aXhlbHM7DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsNCisgICAgaW50IGlucHV0UGl0
Y2g7DQorICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJl
Y3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsNCisgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5Q
aXRjaDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9ICh1bnNp
Z25lZCBjaGFyKilsb2NrLnBCaXRzOw0KKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7
DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wOyBqKyspDQorICAgIHsNCisgICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThS
OEc4QjggJiYNCisgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYNCisgICAgICAg
ICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpDQorICAgICAgICB7DQorICAgICAgICAgICAg
Ly8gRmFzdCBwYXRoIGZvciBFWFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4NCisgICAgICAgICAg
ICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vDQor
ICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lg0KKyAg
ICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLA0KKyAgICAgICAgICAgICAg
ICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwNCisgICAgICAgICAgICAgICAgICAgKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQpICogNCk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAg
ICB9DQorDQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmbG9hdCByOw0KKyAgICAgICAgICAg
IGZsb2F0IGc7DQorICAgICAgICAgICAgZmxvYXQgYjsNCisgICAgICAgICAgICBmbG9hdCBhOw0K
Kw0KKyAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1Og0KKyAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAg
ICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgx
LjBmIC8gMHgwMDFGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAq
ICgxLjBmIC8gMHgwN0UwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAw
KSAqICgxLjBmIC8gMHhGODAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Og0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOw0KKyAg
ICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsN
CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNF
MCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAw
eDdDMDApOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisgICAgICAgICAgICAgICAgICAg
IGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsNCisgICAgICAg
ICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZG
KTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYg
LyAweDAwMDBGRjAwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAw
MDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Og0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9
ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQor
ICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAo
eHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAgICAgICAgICAg
ICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsNCisg
ICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAw
RkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOg0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50
Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAg
ICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7DQorICAg
ICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAw
MDNGRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgx
LjBmIC8gMHgwMDBGRkMwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNG
RjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJS
MzJGOg0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBm
b3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkg
cm91bmQNCisgICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBpbnB1dFBpdGNoKSArIDApOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZs
b2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7DQorICAgICAgICAg
ICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRj
aCkgKyAyKTsNCisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2
ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kDQorICAgICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNl
ICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAg
YSA9IGFiZ3JbM107DQorICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsNCisgICAgICAg
ICAgICAgICAgICAgIGcgPSBhYmdyWzFdOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IGFiZ3Jb
MF07DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
ICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUNCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41
Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
MV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIGIgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsNCisgICAgICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBj
aGFyKSgyNTUgKiBnICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOw0K
KyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOg0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9w
IEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQor
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQor
ICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5
ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAg
ICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAg
ICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAg
Mm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhl
IGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25k
LCBhbmQgc28gZm9ydGguDQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRw
dXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8DQorICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYp
IDw8IDQpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAq
IGIgKyAwLjVmKSA8PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOg0KKyAgICAg
ICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhl
ICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAgICAgICAgICAg
ICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2
ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAgICAgICAvLyAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwg
ICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFz
dCBjb21wb25lbnQgICAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
DQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVk
IHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8DQorICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8
IDApOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUDQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFDQorICAgICAgICAgICAg
ICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9y
dCldID0gDQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBi
ICsgMC41ZikgPDwgMCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7DQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKw0KKyAgICBzeXN0ZW1T
dXJmYWNlLT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVs
ZCBtYXNrKQ0KK3sNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOw0KKyAgICB9DQorDQorICAgIERXT1JEIGZsYWdzID0gMDsNCisNCisgICAgaWYgKG1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5HTF9D
T0xPUl9CVUZGRVJfQklUOw0KKw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRD
b2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZs
YWdzIHw9IEQzRENMRUFSX1RBUkdFVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAo
bWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIG1hc2sgJj0gfkdM
X0RFUFRIX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7DQorDQorICAgIGlm
IChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9
IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3Qt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICAgICAgaWYg
KCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkRl
cHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAgICAgICBE
M0RTVVJGQUNFX0RFU0MgZGVzYzsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2Mo
JmRlc2MpOw0KKyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShk
ZXNjLkZvcm1hdCk7DQorICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVu
Y2lsU2l6ZSkgLSAxOw0KKw0KKyAgICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgw
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RF
TkNJTDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1h
c2sgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
Ow0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xp
cHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9y
dA0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgRDNEQ09MT1IgY29s
b3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEp
LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUucmVkKSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJs
dWUpKTsNCisgICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUp
Ow0KKyAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7DQorDQorICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxwaGFTaXplKG1S
ZW5kZXJUYXJnZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhOw0K
Kw0KKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RD
TEVBUl9TVEVOQ0lMKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxV
bm1hc2tlZDsNCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAm
IEQzRENMRUFSX1RBUkdFVCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgJiYgYWxwaGFVbm1hc2tlZCk7DQorDQorICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8
fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyKQ0KKyAgICB7DQorICAgICAgICAvLyBTdGF0ZSB3aGlj
aCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNh
bGwgaXMgc2F2ZWQuDQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkg
c29tZSBwYXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdA0KKyAgICAg
ICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4NCisgICAgICAgIEhSRVNVTFQgaHI7DQorICAgICAg
ICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGhyID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7DQorICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNE
RklMTF9TT0xJRCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwg
RkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsNCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1Ip
Ow0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19B
TFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4
dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29s
b3IpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FN
UExFTUFTSywgMHhGRkZGRkZGRik7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAg
ICAgICAgICB9DQorDQorICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZt
TWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZ
KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
ICE9IE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVM
TCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUt
PkNhcHR1cmUoKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7DQorICAgICAg
ICB9DQorDQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFC
TEUsIEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5D
LCBEM0RDTVBfQUxXQVlTKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOw0KKyAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0K
Kw0KKyAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xv
ck1hc2tHcmVlbiwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYg
RDNEQ0xFQVJfU1RFTkNJTCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBE
M0RDTVBfQUxXQVlTKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMUkVGLCBzdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQz
RFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9Q
X1JFUExBQ0UpOw0KKyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAg
ICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0K
Kw0KKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNE
RlZGX1hZWlJIVyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBB
UkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAg
ICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQz
RFRBX1RGQUNUT1IpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1EZXZpY2UtPlNl
dFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOw0K
KyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29s
b3IpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVN
QVNLLCAweEZGRkZGRkZGKTsNCisNCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZmxvYXQgcXVh
ZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25l
ZCB0byBtYXRjaCB0aGUgZWRnZXMNCisgICAgICAgIHF1YWRbMF1bMF0gPSAtMC41ZjsNCisgICAg
ICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOw0KKyAgICAg
ICAgcXVhZFswXVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsNCisNCisg
ICAgICAgIHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7DQorICAg
ICAgICBxdWFkWzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsNCisgICAg
ICAgIHF1YWRbMV1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7DQorDQor
ICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7
DQorICAgICAgICBxdWFkWzJdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBm
Ow0KKw0KKyAgICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41
ZjsNCisgICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRbM11bMl0gPSAw
LjBmOw0KKyAgICAgICAgcXVhZFszXVszXSA9IDEuMGY7DQorDQorICAgICAgICBtRGlzcGxheS0+
c3RhcnRTY2VuZSgpOw0KKyAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RS
SUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOw0KKw0KKyAgICAgICAgaWYg
KGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBk
ZXB0aCwgc3RlbmNpbCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUtPkFwcGx5KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAo
ZmxhZ3MpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBj
b2xvciwgZGVwdGgsIHN0ZW5jaWwpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZHJh
d0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzKQ0KK3sNCisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsN
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisN
CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOw0KKyAgICBpbnQgcHJpbWl0aXZl
Q291bnQ7DQorDQorICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291
bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7DQorDQorICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFhcHBseVJlbmRl
clRhcmdldChmYWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAg
ICBhcHBseVN0YXRlKG1vZGUpOw0KKw0KKyAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOw0KKyAg
ICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMs
ICZyZXBlYXREcmF3KTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGVycm9yKGVycik7DQorICAgIH0NCisNCisgICAgYXBwbHlTaGFkZXJzKCk7
DQorICAgIGFwcGx5VGV4dHVyZXMoKTsNCisNCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgp
LT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisg
ICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQ0KKyAgICB7DQorICAgICAgICBtRGlzcGxheS0+
c3RhcnRTY2VuZSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xP
T1ApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05F
LCBOVUxMLCAwKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDAp
DQorICAgICAgICB7DQorICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIg
PSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsNCisgICAgICAg
ICAgICBpZiAoY291bnRpbmdJQikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlm
IChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGNvdW50
aW5nSUItPmdldEJ1ZmZlcigpKTsNCisgICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJp
YWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQ
cmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgMCwgY291bnQsIDAsIHByaW1pdGl2ZUNvdW50KTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBj
b3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsNCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UNCisgICAgICAg
IHsNCisgICAgICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAs
IHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpDQorew0KKyAgICBpZiAo
IW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWluZGljZXMgJiYgIW1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNEUFJJTUlUSVZFVFlQRSBw
cmltaXRpdmVUeXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQorDQorICAgIGlmKCFlczJk
eDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJp
bWl0aXZlQ291bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7DQor
DQorICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47
DQorICAgIH0NCisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpDQorICAgIHsN
CisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0YXRlKG1vZGUpOw0KKw0K
KyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsNCisgICAgR0xlbnVtIGVyciA9IGFw
cGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOw0K
KyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoZXJyKTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZv
Lm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsNCisgICAgR0xzaXplaSByZXBlYXRE
cmF3ID0gMTsNCisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4
LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0g
R0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9
DQorDQorICAgIGFwcGx5U2hhZGVycygpOw0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAg
IGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNh
bXBsZXJzKGZhbHNlKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpDQor
ICAgIHsNCisgICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7DQorDQorICAgICAgICBpZiAo
bW9kZSA9PSBHTF9MSU5FX0xPT1ApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVM
b29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAgIA0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5k
ZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbmRleElu
Zm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCisvLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBibG9jayBpcyBm
YWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVlDQordm9pZCBDb250ZXh0OjpzeW5jKGJv
b2wgYmxvY2spDQorew0KKyAgICBtRGlzcGxheS0+c3luYyhibG9jayk7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkNCit7DQorICAgIC8vIEdldCB0aGUgcmF3IGlu
ZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdw0KKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpDQorICAgIHsNCisgICAgICAgIEJ1ZmZlciAq
aW5kZXhCdWZmZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0KKyAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7DQor
ICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVy
LT5kYXRhKCkpICsgb2Zmc2V0Ow0KKyAgICB9DQorDQorICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7
DQorICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7DQorDQorICAgIGlmIChzdXBwb3J0czMyYml0
SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291
bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOw0KKw0KKyAgICAgICAgaWYgKCFtTGluZUxv
b3BJQikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1p
bmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRf
SU5ERVgzMik7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxpbmVMb29wSUIpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRl
ZCwgR0xfVU5TSUdORURfSU5UKTsNCisNCisgICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQor
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOw0KKyAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBvZmZzZXQgLyA0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlm
IChkYXRhKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8v
IE5vbi1pbmRleGVkIGRyYXcNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+
KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAg
ICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBd
Ow0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOw0K
KyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVu
bWFwKCk7DQorICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgY29uc3Qg
aW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOw0K
Kw0KKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikNCisgICAgICAgIHsNCisgICAgICAgICAgICBt
TGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lO
REVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgxNik7DQorICAgICAgICB9DQorDQorICAgICAg
ICBpZiAobUxpbmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUIt
PnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOw0KKw0KKyAgICAg
ICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0
YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5l
ZWRlZCwgJm9mZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyAyOw0K
KyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcNCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsNCisgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsN
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOw0K
KyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0K
KyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6DQorICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQorICAgICAgICAgICAgICAgIHN1
Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAg
IA0KKyAgICBpZiAoc3VjY2VlZGVkKQ0KKyAgICB7DQorICAgICAgICBpZiAobUFwcGxpZWRJQlNl
cmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOw0KKyAgICAg
ICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7DQorICAg
ICAgICB9DQorDQorICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9M
SU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7
DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgYSBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOw0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQ0KK3sNCisgICAgbUludmFsaWRFbnVtID0gdHJ1ZTsN
Cit9DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQ0KK3sNCisgICAgbUlu
dmFsaWRWYWx1ZSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9w
ZXJhdGlvbigpDQorew0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQ0KK3sNCisgICAgbU91dE9mTWVtb3J5ID0g
dHJ1ZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVy
YXRpb24oKQ0KK3sNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7DQor
fQ0KKw0KKy8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZs
YWcsIGlmIGFueS4NCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4N
CitHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQ0KK3sNCisgICAgaWYgKG1JbnZhbGlkRW51bSkN
CisgICAgew0KKyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7DQorDQorICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9FTlVNOw0KKyAgICB9DQorDQorICAgIGlmIChtSW52YWxpZFZhbHVlKQ0K
KyAgICB7DQorICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7DQorDQorICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9WQUxVRTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRPcGVyYXRp
b24pDQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7DQorDQorICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgIH0NCisNCisgICAgaWYgKG1P
dXRPZk1lbW9yeSkNCisgICAgew0KKyAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQorDQor
ICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUlu
dmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikNCisgICAgew0KKyAgICAgICAgbUludmFsaWRGcmFt
ZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIHJldHVybiBHTF9OT19FUlJP
UjsNCit9DQorDQorR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkNCit7DQorICAgIGlm
IChtUmVzZXRTdGF0dXMgPT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGJvb2wgbG9z
dCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOw0KKw0KKyAgICAgICAgaWYgKGxvc3QpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAv
LyBTZXRzIG1SZXNldFN0YXR1cw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEdMZW51bSBz
dGF0dXMgPSBtUmVzZXRTdGF0dXM7DQorDQorICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9f
RVJST1IpDQorICAgIHsNCisgICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0dGFi
bGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJP
UjsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJuIHN0YXR1czsNCit9DQor
DQorYm9vbCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpDQorew0KKyAgICBy
ZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOw0K
K30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7DQorfQ0KKw0KK2ludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0
c1NoYWRlck1vZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVD
VE9SU19TTTI7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRl
eFRleHR1cmUgPyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsNCit9DQor
DQordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOw0KK30NCisNCitpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00z
IDogTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7DQorfQ0KKw0KK2ludCBDb250ZXh0
OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4U3Vw
cG9ydGVkU2FtcGxlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRT
YW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0DQorew0KKyAgICBp
ZiAocmVxdWVzdGVkID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7DQor
ICAgIH0NCisNCisgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRv
ciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsNCisgICAgaWYgKGl0ciA9
PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7
DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNB
TVBMRV8xNl9TQU1QTEVTOyArK2kpDQorICAgIHsNCisgICAgICAgIGlmIChpdHItPnNlY29uZFtp
XSAmJiBpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHJldHVybiBpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsN
Cit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOw0KK30NCisNCitib29sIENvbnRleHQ6
OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBv
cnRzT2NjbHVzaW9uUXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFU
ZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOw0K
K30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0RY
VDVUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOw0KK30N
CisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsNCit9DQorDQorYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdA0KK3sN
CisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7DQorfQ0KKw0K
K2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBw
b3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4
aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFJl
bmRlcmJ1ZmZlckRpbWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lv
bjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOw0KK30NCisN
CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbU1heFRleHR1cmVMZXZlbDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFu
Y2VUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhh
VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhh
VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOw0KK30NCisNCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHMzMmJpdEluZGljZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzSW5zdGFuY2luZzsNCit9DQorDQordm9pZCBD
b250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikNCit7DQorICAgIC8vIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIyOg0KKyAgICAvLyBJZiBhIGJ1ZmZlciBvYmpl
Y3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2Jq
ZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQNCisgICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0
aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uDQorDQorICAgIGlm
IChtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgaWYgKG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50
IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
KyspDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0
ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwp
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVy
ZShHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDMuOCBwYWdlIDg0Og0KKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0
IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1
cmUgb2JqZWN0IGFyZQ0KKyAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8NCisN
CisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUr
KykNCisgICAgew0KKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykNCisgICAgICAgIHsN
CisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlk
KCkgPT0gdGV4dHVyZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDQuNCBwYWdlIDExMjoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdo
aWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVm
ZmVyLCB0aGVuIGl0IGlzDQorICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBi
ZWVuIGNhbGxlZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2lu
dCB0byB3aGljaCB0aGlzDQorICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLg0KKw0KKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVm
ZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVi
dWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
cikNCisgICAgew0KKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1
cmUpOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVm
ZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0ZyYW1lYnVmZmVy
LT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3Og0KKyAgICAvLyBJZiBhIGZyYW1lYnVm
ZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMg
ZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoDQorICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVl
biBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVy
IG9mIHplcm8uDQorDQorICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVm
ZmVyKQ0KKyAgICB7DQorICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQor
DQorICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpDQorew0KKyAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6DQorICAgIC8vIElm
IGEgcmVuZGVyYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBp
cyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcg0KKyAgICAvLyBoYWQg
YmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHpl
cm8uDQorDQorICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVy
KQ0KKyAgICB7DQorICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKyAgICB9DQorDQorICAg
IC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToNCisgICAgLy8gSWYg
YSByZW5kZXJidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFj
aGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsDQorICAgIC8vIHRoZW4gaXQg
aXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEg
cmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQNCisgICAgLy8gcG9pbnQgdG8g
d2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFt
ZWJ1ZmZlci4NCisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRG
cmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisg
ICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7
DQorICAgIH0NCisNCisgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlciAmJiBkcmF3RnJhbWVidWZmZXIg
IT0gcmVhZEZyYW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmUg
KkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpDQorew0KKyAg
ICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsNCisNCisgICAg
aWYgKHQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29s
b3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07DQorDQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAg
ICAgICB7DQorICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsN
CisgICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gVEVYVFVSRV8yRA0KKw0K
KyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5D
T01QTEVURV9URVhUVVJFX0lEKTsNCisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJ
bWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAg
ICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIGJyZWFrOw0KKw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToNCisgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcg
VGV4dHVyZUN1YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsNCisNCisgICAg
ICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1
YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7DQorICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisNCisgICAgICAgICAgICAgIHQgPSBp
bmNvbXBsZXRlQ3ViZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICB9DQorDQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsNCisg
ICAgfQ0KKw0KKyAgICByZXR1cm4gdDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNE
cmF3KEdMZW51bSBkcmF3TW9kZSkNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYg
bVN0YXRlLmN1bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRy
YXdNb2RlKTsNCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJh
d01vZGUpDQorew0KKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQ0KKyAgICB7DQorICAgICAgY2FzZSBH
TF9UUklBTkdMRVM6DQorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46DQorICAgICAgY2FzZSBH
TF9UUklBTkdMRV9TVFJJUDoNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGNhc2UgR0xf
UE9JTlRTOg0KKyAgICAgIGNhc2UgR0xfTElORVM6DQorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6
DQorICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOg0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNl
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlcykNCit7DQorICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpOw0KKw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3Vy
cmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2lu
ZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOw0KKyAgICBtU3RhdGUu
dmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOw0KKw0K
KyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGluZGV4KTsNCit9DQor
DQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1
aW50IGRpdmlzb3IpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKTsNCisNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBk
aXZpc29yOw0KK30NCisNCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcg0K
Ky8vIE9FUyBleHRlbnNpb25zDQorLy8gRVhUIGV4dGVuc2lvbnMNCisvLyBWZW5kb3IgZXh0ZW5z
aW9ucw0KK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpDQorew0KKyAgICBtRXh0
ZW5zaW9uU3RyaW5nID0gIiI7DQorDQorICAgIC8vIE9FUyBleHRlbnNpb25zDQorICAgIGlmIChz
dXBwb3J0czMyYml0SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7DQorICAgIC8vbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOw0KKyAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsNCisNCisgICAgaWYgKHN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7DQorICAgIH0NCisgICAg
aWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7DQorICAgIH0NCisgICAgaWYgKHN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsNCisgICAgfQ0KKw0KKyAg
ICBpZiAoc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3QgIjsNCisgICAgfQ0KKw0KKyAgICAv
LyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNPY2NsdXNp
b25RdWVyaWVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7DQorICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0
dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQxICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7DQorICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsNCisNCisgICAgLy8gQU5HTEUtc3Bl
Y2lmaWMgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpDQorICAg
IHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUg
IjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0ICI7DQorICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkNCisg
ICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkp
DQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNl
ZF9hcnJheXMgIjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0
dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90
ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9ydHNEWFQ1
VGV4dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsNCisNCisgICAgLy8g
T3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRXZlbnRR
dWVyaWVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2Zl
bmNlICI7DQorICAgIH0NCisNCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0
ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsNCisgICAgaWYgKGVuZCAhPSBzdGQ6
OnN0cmluZzo6bnBvcykNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUo
ZW5kKzEpOw0KKyAgICB9DQorfQ0KKw0KK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lv
blN0cmluZygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpDQorew0KKyAgICBE
M0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCk7DQorDQorICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsNCisgICAg
bVJlbmRlcmVyU3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOw0KKyAgICBtUmVuZGVy
ZXJTdHJpbmcgKz0gIikiOw0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRSZW5kZXJl
clN0cmluZygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nLmNfc3RyKCk7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGlu
dCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCANCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBk
c3RZMSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spDQor
ew0KKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVy
KCk7DQorICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsNCisNCisgICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fA0KKyAgICAgICAgIWRy
YXdGcmFtZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGludCByZWFkQnVmZmVy
V2lkdGggPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQor
ICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXRIZWlnaHQoKTsNCisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsNCisgICAgaW50IGRyYXdCdWZmZXJI
ZWlnaHQgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOw0K
Kw0KKyAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgIFJFQ1QgZGVzdFJlY3Q7DQorDQorICAgIGlm
IChzcmNYMCA8IHNyY1gxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNY
MDsNCisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMTsNCisgICAgICAgIGRlc3RSZWN0
LmxlZnQgPSBkc3RYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7DQorICAgIH0N
CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMTsNCisg
ICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMTsNCisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSBzcmNYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7DQorICAgIH0NCisNCisg
ICAgaWYgKHNyY1kwIDwgc3JjWTEpDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9t
ID0gc3JjWTE7DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsNCisgICAgICAgIHNv
dXJjZVJlY3QudG9wID0gc3JjWTA7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsNCisg
ICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3Jj
WTA7DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMDsNCisgICAgICAgIHNvdXJjZVJl
Y3QudG9wID0gc3JjWTE7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsNCisgICAgfQ0K
Kw0KKyAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0Ow0KKyAgICBSRUNU
IGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7DQorDQorICAgIGlmIChtU3RhdGUuc2Npc3Nv
clRlc3QpDQorICAgIHsNCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRl
c3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdA0KKyAgICAg
ICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3Jk
aW5hdGVzLCBzbyB0aGUgKnRvcCogb2YgdGhlDQorICAgICAgICAvLyByZWN0IHdpbGwgYmUgY2hl
Y2tlZCBhZ2FpbnN0IHNjaXNzb3JZLCByYXRoZXIgdGhhbiB0aGUgYm90dG9tLg0KKyAgICAgICAg
aWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNzb3JYIC0gZGVzdFJlY3QubGVmdDsNCisgICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOw0KKyAgICAg
ICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgICAgIH0NCisN
CisgICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5z
Y2lzc29yV2lkdGgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJl
Y3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7DQorICAg
ICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3Rh
dGUuc2Npc3NvcldpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QucmlnaHQg
LT0geERpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QudG9wIDwgbVN0
YXRlLnNjaXNzb3JZKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0
ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVj
dC50b3AgPSBtU3RhdGUuc2Npc3Nvclk7DQorICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVj
dC50b3AgKz0geURpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QuYm90
dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpDQorICAgICAgICB7
DQorICAgICAgICAgICAgaW50IHlEaWZmID0gZGVzdFJlY3QuYm90dG9tIC0gKG1TdGF0ZS5zY2lz
c29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KTsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVk
UmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsNCisg
ICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsNCisgICAgICAg
IH0NCisgICAgfQ0KKw0KKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxzZTsNCisgICAg
Ym9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7DQorDQorICAgIFJFQ1Qgc291cmNlVHJpbW1l
ZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0Ow0KKyAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9
IGRlc3RTY2lzc29yZWRSZWN0Ow0KKw0KKyAgICAvLyBUaGUgc291cmNlICYgZGVzdGluYXRpb24g
cmVjdGFuZ2xlcyBhbHNvIG1heSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBmYWxsIG91dCBv
ZiB0aGUgYm91bmRzIG9mIA0KKyAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFj
ZXMuDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAg
ICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7DQorICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ICs9
IHhEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA+IHJl
YWRCdWZmZXJXaWR0aCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1l
ZFJlY3QucmlnaHQgLSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVj
dC5yaWdodCA9IHJlYWRCdWZmZXJXaWR0aDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdo
dCAtPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwg
MCkNCisgICAgew0KKyAgICAgICAgaW50IHlEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LnRv
cDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7DQorICAgICAgICBkZXN0VHJp
bW1lZFJlY3QudG9wICs9IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVk
UmVjdC5ib3R0b20gPiByZWFkQnVmZmVySGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBpbnQgeURp
ZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Ow0KKyAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsNCisgICAgICAg
IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRl
c3RUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gMCAt
IGRlc3RUcmltbWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgPSAw
Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgfQ0KKw0K
KyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQ0KKyAgICB7
DQorICAgICAgICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkcmF3QnVmZmVy
V2lkdGg7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7
DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsNCisgICAgfQ0KKw0K
KyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB5
RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0
LnRvcCA9IDA7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURpZmY7DQorICAg
IH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVmZmVySGVpZ2h0
KQ0KKyAgICB7DQorICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC0g
ZHJhd0J1ZmZlckhlaWdodDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPSBkcmF3
QnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZm
Ow0KKyAgICB9DQorDQorICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsNCisgICAg
aWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJl
YWRCdWZmZXJIZWlnaHQgfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gc291
cmNlVHJpbW1lZFJlY3QubGVmdCA8IHJlYWRCdWZmZXJXaWR0aCB8fCANCisgICAgICAgIGRlc3RU
cmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdo
dCB8fA0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0Lmxl
ZnQgPCBkcmF3QnVmZmVyV2lkdGggfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAh
PSAwIHx8IGRlc3RUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0
ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LmxlZnQgIT0gMCkNCisgICAgew0KKyAgICAgICAgcGFy
dGlhbEJ1ZmZlckNvcHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChtYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBl
ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJE
IHx8DQorICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9
PSBHTF9SRU5ERVJCVUZGRVI7DQorICAgICAgICBjb25zdCBib29sIHZhbGlkRHJhd1R5cGUgPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1RFWFRVUkVfMkQgfHwN
CisgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdM
X1JFTkRFUkJVRkZFUjsNCisgICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3
VHlwZSB8fA0KKyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRE
M0RGb3JtYXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBm
b3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBpZiAocGFy
dGlhbEJ1ZmZlckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7DQorDQor
ICAgIH0NCisNCisgICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkpDQorICAgIHsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVm
ZmVyID0gTlVMTDsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsN
CisNCisgICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQg
ZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1
ZmZlciwgc28gaWYgd2UgaGF2ZQ0KKyAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2ls
IGJ1ZmZlciwgaXQgd2lsbCBiZSB0aGUgc2FtZSBidWZmZXIuDQorDQorICAgICAgICBpZiAobWFz
ayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAocmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyVHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAg
ICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRy
dWU7DQorICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisN
CisgICAgICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBk
cmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkg
IT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8DQorICAgICAgICAg
ICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9y
bWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1h
dCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAg
ICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICByZWFk
RFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAg
ICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHBhcnRpYWxC
dWZmZXJDb3B5KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZm
ZXIgZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVu
dGF0aW9uLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkDQorICAgICAgICB9
DQorDQorICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBs
ZXMoKSAhPSAwKSB8fCANCisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZl
ci0+Z2V0U2FtcGxlcygpICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
aWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAg
ICAgbURpc3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICBpZiAoYmxpdFJlbmRlclRhcmdl
dCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFJlbmRl
clRhcmdldCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3RnJhbWVidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpOw0KKw0KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNvdXJjZVRyaW1tZWRSZWN0LCAN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZW5kZXJUYXJnZXQsICZkZXN0VHJpbW1lZFJlY3QsIEQzRFRFWEZfTk9ORSk7DQorDQorICAgICAg
ICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGRyYXdSZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFO
R0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsNCisgICAgICAg
ICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg
IGlmIChibGl0RGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKTsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNp
bCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2lsLCBO
VUxMLCBkcmF3RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKw0KKyAgICAgICAg
ICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBkcmF3RGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdM
RSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQorICAgICAgICAg
ICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQor
DQorVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1h
eExydSgwKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FD
SEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZl
cnRleERlY2xhcmF0aW9uID0gTlVMTDsNCisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1
Q291bnQgPSAwOw0KKyAgICB9DQorfQ0KKw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1WZXJ0
ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQorICAgICAgICAg
ICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjph
cHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJp
YnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBH
THNpemVpICpyZXBlYXREcmF3KQ0KK3sNCisgICAgKnJlcGVhdERyYXcgPSAxOw0KKw0KKyAgICBp
bnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisgICAgaW50IGluc3Rh
bmNlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisNCisgICAgaWYgKGluc3RhbmNl
cyA+IDApDQorICAgIHsNCisgICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8g
YmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMA0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkN
CisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVk
QXR0cmlidXRlID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZF
UlRFWF9BVFRSSUJTKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsNCisgICAgICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNl
IGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0
ZQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChpbmRleGVkQXR0
cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
RDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07DQorICAg
IEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOw0KKw0KKyAgICBQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOw0K
Kw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAg
ICB7DQorICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgaW50IHN0cmVhbSA9IGk7DQorDQorICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+
IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24g
QVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0
cmlidXRlcyBhcmUgaW5zdGFuY2VkLg0KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0
cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQ0KKyAgICAgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7DQorICAgICAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApDQorICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhl
ZEF0dHJpYnV0ZTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAg
ICAgIFVJTlQgZnJlcXVlbmN5ID0gMTsNCisgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQ0KKyAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVB
TVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3RhbmNlczsNCisgICAgICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VE
QVRBIHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOw0KKyAgICAgICAgICAgICAgICAgICAgbUlu
c3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
IH0NCisNCisgICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0
cmlidXRlc1tpXS5zZXJpYWwgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFt
XS5zdHJpZGUgIT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwNCisgICAgICAgICAgICAgICAgbUFw
cGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0s
IGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmli
dXRlc1tpXS5zdHJpZGUpOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNl
cmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZC
c1tzdHJlYW1dLnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOw0KKyAgICAgICAgICAgICAg
ICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Ow0KKyAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07DQor
ICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsNCisgICAgICAgICAgICBlbGVtZW50LT5U
eXBlID0gYXR0cmlidXRlc1tpXS50eXBlOw0KKyAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9
IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQz
RERFQ0xVU0FHRV9URVhDT09SRDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsNCisgICAgICAgICAgICBlbGVtZW50
Kys7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGlu
c3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgIHsNCisgICAgICAg
IGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAg
ICAgICAgICB9DQorDQorICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5
IGVuZCA9IEQzRERFQ0xfRU5EKCk7DQorICAgICooZWxlbWVudCsrKSA9IGVuZDsNCisNCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0K
KyAgICB7DQorICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERl
Y2xDYWNoZVtpXTsNCisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBl
bGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkp
KSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7DQorICAgICAgICAgICAgaWYoZW50cnkt
PnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhE
ZWNsYXJhdGlvbik7DQorICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVy
dGV4RGVjbGFyYXRpb247DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHJldHVybiBH
TF9OT19FUlJPUjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBWZXJ0ZXhEZWNsQ2FjaGVF
bnRyeSAqbGFzdENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsNCisNCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQorICAg
ICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291
bnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2Fj
aGVbaV07DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24gIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhE
ZWNsYXJhdGlvbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbiA9IE5VTEw7DQorICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVw
bGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkNCisgICAgICAgIC8vIGFib3V0IGl0
Lg0KKyAgICB9DQorDQorICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVt
ZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsN
CisgICAgZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9u
KGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBtTGFzdFNldFZEZWNsID0gbGFz
dENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsNCisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsr
bU1heExydTsNCisNCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOw0KK30NCisNCit2b2lkIFZlcnRl
eERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkNCit7DQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgIHsNCisgICAgICAgIG1BcHBs
aWVkVkJzW2ldLnNlcmlhbCA9IDA7DQorICAgIH0NCisNCisgICAgbUxhc3RTZXRWRGVjbCA9IE5V
TEw7DQorICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJl
IGRpc2FibGVkIHdoZW4gbm90IHVzZWQNCit9DQorDQorfQ0KKw0KK2V4dGVybiAiQyINCit7DQor
Z2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBj
b25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCBy
b2J1c3RBY2Nlc3MpDQorew0KKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hh
cmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7DQorfQ0KKw0KK3ZvaWQgZ2xE
ZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkNCit7DQorICAgIGRlbGV0ZSBjb250
ZXh0Ow0KKw0KKyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQ0KKyAgICB7DQor
ICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7DQorICAgIH0NCit9DQor
DQordm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIGdsOjptYWtlQ3VycmVu
dChjb250ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsNCit9DQorDQorZ2w6OkNvbnRleHQgKmdsR2V0
Q3VycmVudENvbnRleHQoKQ0KK3sNCisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7DQorfQ0K
K30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CmluZGV4IDhkY2NmMGYuLjRkNDdjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4
RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVu
dW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5V
TV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEK
ICAgICB7CkBAIC0yODEsNyArMjgxLDggQEAgY2xhc3MgQ29udGV4dAogCiAgICAgdm9pZCBtYWtl
Q3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAK
LSAgICB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtBbGxT
dGF0ZURpcnR5KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBA
IC00OTUsNiArNDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMo
KSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJv
b2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7
CkBAIC02MTcsNiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1
cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29s
IG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7
CiAgICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXgg
NzMwZmZmYy4uNzZkNDI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6
On5GcmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAg
bURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVy
LnNldChOVUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAK
IFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlw
ZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQg
RnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVy
OjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBt
Q29sb3JidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1
cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5j
aWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBA
QCBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1
cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1
ZmZlciAgPSBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIg
KmRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIp
CisgICAgeworICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVw
dGgtb25seSBGQk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6
ZWkgd2lkdGggID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQg
PSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAg
ICAgICAgd2lkdGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRl
cmJ1ZmZlcigwLCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOwor
ICAgICAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3JidWZmZXJUeXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5
ICsyNzIsMTEgQEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsK
ICAgICBpbnQgc2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVl
OwogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAs
MzEgKzMwMSwzOCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAg
IH0KICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVy
VHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9y
bWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RG
T1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQg
PT0gR0xfTFVNSU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3Jt
YXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVz
KCkpIHx8IAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVm
ZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9y
bWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0
dXJlcygpKSB8fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZv
cm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4
MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxU
ZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CiAKICAgICAgICAg
d2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gY29sb3Ji
dWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNh
bXBsZXMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICBtaXNzaW5nQXR0
YWNobWVudCA9IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBOVUxMOwpAQCAtMzAyLDExICszNDAsNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpCiAKICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAg
ICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7ICAgLy8gUmVx
dWlyZXMgR0xfT0VTX2RlcHRoX3RleHR1cmUKLSAgICAgICAgfQotCiAgICAgICAgIGRlcHRoYnVm
ZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBpZiAoIWRlcHRoYnVmZmVyKQpAQCAt
MzE5LDE5ICszNTIsNDQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobURlcHRoYnVm
ZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRo
ID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJs
ZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0
aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
KQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJU
eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBkZXB0
aGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1cmUg
YXR0YWNobWVudHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc0RlcHRoVGV4dHVy
ZUZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBp
ZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVw
dGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+
Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBs
ZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVp
Z2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQog
ICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAg
ICAgICAgIHsKQEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MoKQogCiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsK
LSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAg
ICAgICAgfQotCiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAK
ICAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUgQEAgR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3
aWR0aCA9PSAwKQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJV
RkZFUikKICAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7
CisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXIt
PmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRh
Y2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVG
b3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYg
KG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5j
aWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVy
LT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRT
YW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2Ft
cGxlcygpKQogICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZm
ZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVm
ZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3
ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0
aCBhbmQgc3RlbmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChk
ZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAot
ICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgp
ICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQg
dG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmICht
aXNzaW5nQXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApA
QCAtNDksNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
Q29sb3JidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAg
UmVuZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRO
dWxsQ29sb3JidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAg
ICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZy
YW1lYnVmZmVyCiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9p
bnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBh
NWUzOGJmLi5mMjhhOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5j
dGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dy
YW1CaW5hcnkuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNywyMjYxICsx
OCw4NSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElM
RV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBnbAogewotdW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLWNvbnN0
IGNoYXIgKmZha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQg
aSkKLXsKLSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkp
OwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUs
IGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6
IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9y
bShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZv
cm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25l
ZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0g
dHJ1ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19
Ci0KLWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUo
MCwgMywgImFyXyIpID09IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9u
KGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVk
IGludCBpbmRleCkgCi0gICAgOiBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1l
KSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9ncmFtOjpQcm9n
cmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VN
YW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkK
LXsKLSAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgbUZyYWdtZW50U2hhZGVyID0gTlVM
TDsKLSAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBO
VUxMOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBT
ID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0g
TlVMTDsKLSAgICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQotICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0KLVByb2dyYW06
On5Qcm9ncmFtKCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRl
ciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAg
IH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRh
Y2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09
IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
bVZlcnRleFNoYWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNo
YWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09
IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1GcmFnbWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hh
ZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9T
SEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURF
UikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJh
Z21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsK
LSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOworY29uc3QgY2hhciAqIGNvbnN0IGdfZmFr
ZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKIAotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJv
Z3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZl
cnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Cit1bnNp
Z25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1JRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKlByb2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjpBdHRy
aWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7CiB9CiAKLUlE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCitBdHRyaWJ1
dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWlu
dCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKK0luZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9n
KE5VTEwpCiB7Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwot
ICAgIH0KIH0KIAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpCitJbmZvTG9nOjp+SW5mb0xvZygpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewot
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
bmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRl
eF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gLTE7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAKLWludCBQcm9ncmFtOjpn
ZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmli
dXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0g
ICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KIAotLy8g
UmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdM
aW50IFByb2dyYW06OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK2ludCBJ
bmZvTG9nOjpnZXRMZW5ndGgoKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBpZiAo
IW1JbmZvTG9nKQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0
dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgot
ICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci19Ci0KLS8v
IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJl
c3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUg
cGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dy
YW06OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXgpCi17Ci0gICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBB
U1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJz
UFNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0KLSAg
ICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5p
dCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1h
eGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
bG9naWNhbFRleHR1cmVVbml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0
dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBl
IGFuZAotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhl
IHZlcnRleCBzaGFkZXIpLgotVGV4dHVyZVR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclRleHR1cmVU
eXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVy
c1BTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBl
OwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRl
eCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAg
IEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVy
biBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKLX0KLQotR0xp
bnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAg
dW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcg
YXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3Bl
biA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5k
X2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9z
ZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2ko
bmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4p
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBu
dW1Vbmlmb3JtczsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFsw
XSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYg
Kz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAq
IDI7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1
cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9G
TE9BVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7CisgICAgaW50IGluZGV4ID0gMDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsK
LSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICBpZiAobUlu
Zm9Mb2cpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAg
ICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwogICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfRkxPQVRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkg
KiA0LAotICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAg
ICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAu
MGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZB
TFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0
YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0
Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
LXsKLSAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsK
LSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsK
LQotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0gICAgewotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRo
ICsgeF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lk
ZQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQg
eSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9G
TE9BVF9NQVQyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdl
dCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
IHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1
ZSk7Ci0gICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQs
MywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZh
bHVlICs9IDk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogMTYpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwg
dmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTY7Ci0gICAgICAgIHZhbHVlICs9IDE2OwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1Q
TEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAg
ICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRf
VkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAg
ICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRV
bmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikK
LXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMaW50KSAqIDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAq
IGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogMzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQot
ICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
LQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAg
ICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1m
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIg
aXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVx
dWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0g
ICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0
VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3Vu
dCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxD
b21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNo
IChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5h
bENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEu
MGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAg
ICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENv
dW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0K
LSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVk
Qnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAg
ICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0g
ICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRy
aXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9y
bUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxD
b3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXpl
b2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAg
ICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBs
aWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBE
aXJlY3QzRCA5IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBm
b3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4o
KSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRp
cnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlV
bmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBi
KTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlm
b3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAg
YXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBw
bHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhl
IGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQ
cm9ncmFtOjpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJv
ZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhs
c2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1
bHQ7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAg
ICBpZiAocGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9E
RUJVRzsKLSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBf
T1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9
IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUg
MiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5n
KGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0
LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAg
IHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5V
TEw7Ci0gICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBE
M0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWlu
IiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYg
KGVycm9yTWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29u
c3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhs
c2wpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVz
c2FnZS0+UmVsZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNv
bnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBv
aW50ZXIoKSksIGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
IHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0v
LyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRo
ZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3
XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9m
IHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3Jh
bTo6cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250
ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVj
dG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZh
cnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5n
LT50eXBlKSAqIHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5D
b3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nl
c3M7IHIrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9
IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxh
YmxlOyB5KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwot
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5n
W3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzICYmIG0gPT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxl
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1b
eF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0g
MSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ld
W3hdID8gMCA6IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpbnQgY29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0
OyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4g
JiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3Jd
W2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkg
PSByOyB5IDwgciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotCi0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5k
VG9JbmZvTG9nKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0
cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJz
ID0gMDsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykK
LSAgICB7Ci0gICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFj
a2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdp
c3RlcnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0
eSgpIHx8IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0g
ICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhW
YXIgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0g
ICAgICAgIHZ0eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAg
fQotCi0gICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNv
bnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9
OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAo
cmVnaXN0ZXJzIDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4
dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQt
PnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0
ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJz
IGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZh
bHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1
dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+
c2l6ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRo
ZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5j
b2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJh
Z21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1
dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xP
UiIgOiAiVEVYQ09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRc
biIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0g
MDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChh
dHRyaWJ1dGUtPnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsg
IiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNl
bWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0K
LQotICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJ
VElPTjtcbiI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAg
IHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tp
bmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIp
ICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAg
ICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hh
ZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCAr
PSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVy
dGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAg
ICAgICJ7XG4iOwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAg
IG1WZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiID0gIjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpID4gMSkgICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wg
Kz0gInRyYW5zcG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlu
cHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAg
IH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGds
X21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0
LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xf
UG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi55ID0gZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Q
b3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYg
KG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6
ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsg
Iik7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3Jk
ID0gZ2xfUG9zaXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAg
ICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiBy
b3dzICsgajsKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQu
diIgKyBzdHIocik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9
IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVn
aXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0g
Jip2YXJ5aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhI
TFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxOiBtVmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmct
Pm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFy
eWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3Ry
KGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCAr
PSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVU
XG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsg
dmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3Ry
KHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBu
ICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMp
ICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtc
biI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykK
LSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xu
IjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6
IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4i
Ci0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJo
dyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzbTMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhl
IHJlbmRlciB0YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQot
ICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhf
VlBvcy54ICsgMC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC55ID0gZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250
YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIu
eS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykg
KiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9GcmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhf
Q29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnog
KiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7
Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09y
TGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZh
Y2UgPD0gMC4wKSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9
IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAg
ICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+
cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAi
ICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5n
LT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
bVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsg
Il0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVs
SExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFp
bigpO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQ
U19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAg
ICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhl
IEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAg
dGhlaXIgdmFyeWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1p
bmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9m
IHVuaWZvcm1zCi12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAg
aWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8
fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAg
ICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlu
a1ZhcnlpbmdzKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4
dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxl
ID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7
Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhC
aW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmls
ZSwgJm1Db25zdGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29t
cGlsZVRvQmluYXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50
VGFibGVQUyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsK
LSAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFk
ZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVj
dXRhYmxlKTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBp
eGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhl
bEV4ZWN1dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQp
ICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVs
ZWFzZSgpOwotICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhC
aW5hcnkgPSBOVUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYg
KG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZv
cm1zKG1Db25zdGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNv
bnN0YW50VGFibGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNo
ZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAg
Ly8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBk
ZWNvcmF0aW9uCi0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxT
aXplIik7Ci0gICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Gcm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAg
IG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
RGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNE
IDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1
dGVzKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQo
KTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1
dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0x
KSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3Vu
ZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAg
ICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0K
LSAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0
cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUt
Pm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEg
PDwgKGxvY2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgot
ICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24g
PSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJl
ZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAg
ICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3Mg
PiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRl
LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZh
aWwgdG8gbGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRl
W2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRT
ZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAg
ICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDwgcm93czsgcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRy
aWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1B
WF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmli
dXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2Nh
dGlvbl0uZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5r
VW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhD
T05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05T
VEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKLQotICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlw
dGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3Rh
bnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5k
ZXgrKykKLSAgICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFu
dFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZj
b25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50
SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBz
aGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNm
dWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5p
Zm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYg
KGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExF
IHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBj
b25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0
YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25z
dGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQ
VF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChz
YW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNl
ZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFu
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlcklu
ZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsK
LQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1h
eGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBl
ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVY
VFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAg
ICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNE
WFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJy
YXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBh
cnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVy
czsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhI
QU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFu
dEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVND
IGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25D
b3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3Rh
bnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5k
ZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJh
eUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVu
aWZvcm0oZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNh
c2UgRDNEWFBDX1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAg
ICAgY2FzZSBEM0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25z
dGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQot
ewotICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRp
b24sIF9uYW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50
IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51
bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsK
LSAgICAgICAgZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFs
aXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQ
Uyk7Ci0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMs
IG1Db25zdGFudFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsK
LSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytp
KQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9u
KF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2Fs
YXJzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBU
X0JPT0w6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xf
VkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFu
dERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uUm93cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9N
QVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNo
IE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJp
YnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFt
ZTsKLX0KLQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3Rk
OjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAg
ICAgICByZXR1cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5j
b21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1
YnN0cigzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dy
YW06OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNE
OV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFY
X0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50ICYmIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwK
LSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCA0OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3
aWR0aCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICog
NCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQot
ICAgIHsKLSAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwot
ICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQz
RFhSU19CT09MID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAg
IGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50
LCB2c0NvdW50KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9D
T05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19GTE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVs
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3Rvciwg
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxP
QVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
U107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChz
YW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4Owot
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5k
ZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAg
ICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5p
dCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgs
IChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
U107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDAp
OwotCi0gICAgICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0
VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewot
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0s
IChmbG9hdCl2WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlV
bmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3Vu
dCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYg
Kz0gNDsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQs
IHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVu
aWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNE
WFZFQ1RPUjQgKnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJD
b3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVj
dG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICBpZiAobGVuZ3RoKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OwogICAg
IH0KIH0KIAogLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZv
IGxvZy4KIC8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBz
b21lIG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAogLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3Zl
IGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZv
aWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2Up
Cit2b2lkIEluZm9Mb2c6OmFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQogewog
ICAgIHN0ZDo6c3RyaW5nIG1zZyhtZXNzYWdlKTsKIAogICAgIHNpemVfdCBmb3VuZDsKICAgICBk
bwogICAgIHsKLSAgICAgICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGZv
dW5kID0gbXNnLmZpbmQoZ19mYWtlcGF0aCk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKICAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJs
ZW4oZmFrZXBhdGgpKTsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGdfZmFr
ZXBhdGgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJp
bmc6Om5wb3MpOwogCi0gICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkpOwor
ICAgIGFwcGVuZCgiJXNcbiIsIG1zZy5jX3N0cigpKTsKIH0KIAotdm9pZCBQcm9ncmFtOjphcHBl
bmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit2b2lkIEluZm9Mb2c6OmFwcGVu
ZChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICBpZiAoIWZvcm1hdCkKICAgICB7CkBA
IC0yMzA0LDcgKzEyOSw3IEBAIHZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQogICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2co
KQordm9pZCBJbmZvTG9nOjpyZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAg
LTIzMTMsOTkgKzEzOCwxNzAgQEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0K
IH0KIAotLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUs
IGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxp
bmsoYm9vbCBkZXN0cm95KQorUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFn
ZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZSho
YW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8g
T2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwot
ICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFn
bWVudFNoYWRlciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dy
YW1CaW5hcnkgPSBOVUxMOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291
bnQgPSAwOworfQogCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hh
ZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAg
ICB1bmxpbmsodHJ1ZSk7CiAKLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZl
cnRleFNoYWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVs
ZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRl
eFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkK
KyAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlm
IChtQ29uc3RhbnRUYWJsZVBTKQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1D
b25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAg
aWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hh
ZGVyKilzaGFkZXI7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAg
ICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAg
ewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFu
dFRhYmxlVlMgPSBOVUxMOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21l
bnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hh
ZGVyLT5hZGRSZWYoKTsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpbmRleCsrKQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0g
ICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1W
ZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFz
ZSgpOworICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAo
c2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAg
bVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50
U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAg
IG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJz
Q291bnQoKSBjb25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArICht
RnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQg
QXR0cmlidXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQog
ICAgIHsKLSAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAg
fQorfQorCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2Yg
dGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdz
LAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJp
YnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9p
ZCBQcm9ncmFtOjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0
ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAg
IG1JbmZvTG9nLnJlc2V0KCk7CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAg
IG1Qcm9ncmFtQmluYXJ5ID0gbmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJp
bmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIs
IG1WZXJ0ZXhTaGFkZXIpKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7
Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwog
ICAgIH0KK30KIAotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRo
TG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAg
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpn
ZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAg
IGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxv
Y2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25d
LmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVs
SExTTC5jbGVhcigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBw
cm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9y
IGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7Cisg
ICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAg
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsK
KyAgICAgICAgfQogCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxM
OworICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZl
cnRleFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7
CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9n
cmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAg
ICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAg
IHJldHVybiBtTGlua2VkOworICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQ
cm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmlu
YXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0
ZWQ7CisgICAgdW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5h
cnk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAg
dW5zaWduZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldElu
Zm9Mb2dMZW5ndGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVu
KG1JbmZvTG9nKSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsK
IH0KIAogdm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAo
bUluZm9Mb2cpCi0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAo
aW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cs
IGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9M
b2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1
ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMp
CkBAIC0yNTAzLDE1MiArMzc2LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJz
KEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlCiAKIHZvaWQg
UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkKIHsKLSAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVk
IGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0g
ICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZSsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICht
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1
dGUgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRB
Y3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7
CiAgICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNf
c3RyKCk7Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAg
ICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgaWYgKGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9
IHN0cmxlbihuYW1lKTsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAg
fQogCi0gICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UK
LQotICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7CisgICAgICAg
ICp0eXBlID0gR0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOworICAgIH0KIH0KIAogR0xpbnQg
UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQogewotICAgIGludCBjb3VudCA9IDA7
Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9
CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQo
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0g
ICAgcmV0dXJuIGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVN
YXhMZW5ndGgoKQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgYXR0
cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBp
ZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJp
YnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOwotICAg
ICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRl
TWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0
aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tp
cCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0g
PSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVu
aWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJl
KDAsIDMsICJkeF8iKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0r
KzsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4
LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIEFTU0VS
VCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVy
IHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKKyAg
ICBlbHNlCiAgICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgp
KQorICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmlu
ZyArPSAiWzBdIjsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5h
bWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7
Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0
aCA9IDA7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cisg
ICAgICAgICpzaXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgIH0KIH0KIAog
R0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQg
PSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBu
dW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAg
IHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwg
MywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQo
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0g
ICAgcmV0dXJuIGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4
TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5p
Zm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsr
KQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkg
KyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRp
bmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7
CiB9CiAKIHZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKQEAgLTI2NjMsMTYxICs0ODAs
MjggQEAgYm9vbCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0CiAKIHZvaWQg
UHJvZ3JhbTo6dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAgIG1JbmZvTG9n
LnJlc2V0KCk7CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4g
c3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAg
ICAgICBtUHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVT
YW1wbGVycyh0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlk
YXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRh
dGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBz
YW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRv
IHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3Vy
cmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8v
IERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJB
VElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAg
ICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkK
LSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1
cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChs
b2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRU
b0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBU
RVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1w
bGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2Ft
cGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFn
ZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1
cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1w
bGVyc1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVu
aXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3Jt
ICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5p
dCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0g
dGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBl
cyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBs
ZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
bUluZm9Mb2cuYXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2Vk
LiIpOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dyYW06OmluaXRp
YWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVn
aXN0ZXJJbmZvICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQorYm9vbCBQ
cm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5j
X3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQzRFhDT05TVEFO
VF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29u
c3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24s
ICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgcmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
SW5kZXg7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRh
dGVkKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50
ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQgUHJvZ3JhbTo6
Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJh
bmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06
OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRp
b247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQ
cm9ncmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhG
cm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsK
LX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uaAppbmRleCA2MTgzMGM2Li4yNDQ3MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJH
TEVTVjJfUFJPR1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21w
aWxlci5oPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8
c2V0PgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDM2IEBA
IGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVy
dGV4U2hhZGVyOwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOwotCi0gICAg
flVuaWZvcm0oKTsKLQotICAgIGJvb2wgaXNBcnJheSgpOwotCi0gICAgY29uc3QgR0xlbnVtIHR5
cGU7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKLSAg
ICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ19m
YWtlcGF0aDsKIAotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKK2Ns
YXNzIEF0dHJpYnV0ZUJpbmRpbmdzCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVCaW5kaW5n
cygpOworICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0gICAgc3RydWN0IFJlZ2lzdGVySW5m
bwotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJ
bmRleDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKKyAgICB2b2lkIGJpbmRB
dHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGlu
dCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKIAot
ICAgIFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7CisgIHByaXZhdGU6Cisg
ICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRU
UklCU107CiB9OwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxl
bWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlv
bgorY2xhc3MgSW5mb0xvZwogewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICBw
dWJsaWM6CisgICAgSW5mb0xvZygpOworICAgIH5JbmZvTG9nKCk7CiAKLSAgICBzdGQ6OnN0cmlu
ZyBuYW1lOwotICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRl
eDsKKyAgICBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRMb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworCisgICAgdm9pZCBhcHBl
bmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
Y2hhciAqaW5mbywgLi4uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZm9Mb2cpOworICAgIGNoYXIgKm1JbmZvTG9nOwogfTsK
IAogY2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzY2LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBi
b29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hh
ZGVyc0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVs
U2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7
Ci0KICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNo
YXIgKm5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpu
YW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0g
ICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNh
bXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdl
dFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlm
b3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVu
aWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAg
ICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdM
aW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0
aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7
Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGlu
dCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09y
TGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0g
ICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlz
TGlua2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAg
IGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdl
dEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50
ICpzaGFkZXJzKTsKQEAgLTEzMiw5MCArOTEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wg
aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAg
ICBib29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOwogICAgIGJvb2wgaXNWYWxp
ZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAot
ICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0
cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJl
bW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKLQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihQcm9ncmFtKTsKIAotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShj
b25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUg
Kipjb25zdGFudFRhYmxlKTsKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7
CiAKLSAgICBpbnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSk7Ci0g
ICAgYm9vbCBsaW5rVmFyeWluZ3MoKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoKTsKLSAg
ICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0KLSAg
ICBib29sIGxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwot
ICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwg
Y29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5n
IG5hbWUgPSAiIik7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAg
VW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wgYXBwbHlVbmlm
b3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJv
b2wgYXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBs
eVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9y
bW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVD
VE9SNCAqdmVjdG9yKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0K
LSAgICB2b2lkIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgVW5pZm9ybTo6UmVnaXN0ZXJJbmZvICpycywgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFu
dFRhYmxlKTsKLQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIg
Km1lc3NhZ2UpOwotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4u
Lik7Ci0gICAgdm9pZCByZXNldEluZm9Mb2coKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
aXNzdWVTZXJpYWwoKTsKIAotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgRnJh
Z21lbnRTaGFkZXIgKm1GcmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhT
aGFkZXI7CiAKLSAgICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOwotICAgIHN0ZDo6c3RyaW5nIG1W
ZXJ0ZXhITFNMOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxl
OwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElE
M0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFi
bGUgKm1Db25zdGFudFRhYmxlVlM7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJp
bmRpbmdzOwogCi0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01B
WF9WRVJURVhfQVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJT
XTsKLQotICAgIHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAg
ICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0
dXJlVHlwZTsKLSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0g
ICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsK
LSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4Owot
ICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4RGVwdGhSYW5n
ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4Q29v
cmRMb2NhdGlvbjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRp
b247Ci0KLSAgICBib29sIG1MaW5rZWQ7CisgICAgUHJvZ3JhbUJpbmFyeSogbVByb2dyYW1CaW5h
cnk7CiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0
aGUgcHJvZ3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLSAgICBjaGFy
ICptSW5mb0xvZzsKLSAgICBib29sIG1WYWxpZGF0ZWQ7CiAKICAgICB1bnNpZ25lZCBpbnQgbVJl
ZkNvdW50OwogCkBAIC0yMjUsNiArMTE4LDggQEAgY2xhc3MgUHJvZ3JhbQogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOwor
CisgICAgSW5mb0xvZyBtSW5mb0xvZzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjhlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0w
LDAgKzEsMjQ4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxl
bWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0
cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUg
PHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
KQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK3N0ZDo6c3RyaW5n
IHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5p
Zm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1l
KFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJh
eVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFy
cmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNl
dChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5p
Zm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5
KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKwor
VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUo
UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50
KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQor
eworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBO
VUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBT
ID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1WYWxpZGF0ZWQg
PSBmYWxzZTsKKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAt
MTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0u
YWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAg
ICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVz
ZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAw
OworCisgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlv
biA9IC0xOworICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb24gPSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmlu
YXJ5KCkKK3sKKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhl
bEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFi
bGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0K
KworICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVQUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAg
IHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHdo
aWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1z
LmJhY2soKTsKKyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorfQorCitJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAg
ICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
UHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlv
bihjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0g
c3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRl
SW5kZXgpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5k
ZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRl
eFthdHRyaWJ1dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGln
aGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2Ft
cGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2U7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVz
ZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4
IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJl
Y3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAw
LTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBs
ZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7
CisgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKwor
ICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVv
ZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBs
b2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxv
Z2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1
cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4
dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5k
ZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFk
ZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNh
bXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJU
KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBd
KSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Cisg
ICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAg
ICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNp
emVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VS
VChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAg
dW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcg
YXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3Bl
biA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5k
X2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9z
ZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2ko
bmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4p
OworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBu
dW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRh
cmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAg
dGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0
YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Cisg
ICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsK
KyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAg
ICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwor
ICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZb
Ml07CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
CisgICAgICAgICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAg
bWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2Yo
R0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAq
IDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRo
LCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRy
YW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlu
dCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBj
b3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGlu
dCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAg
fQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVp
Z2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5
ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FU
X01BVDIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsK
KyAgICAgICAgdGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7
CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQs
NCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAg
dmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZs
b2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0g
MTY7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9TQU1QTEVSX0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwK
KyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3Vu
dCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9W
RUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykK
KyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAg
ICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikK
K3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAq
IGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQg
cXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAg
ICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9y
bUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXpl
IDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMs
Myw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFs
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdl
dFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRU
eXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxv
YXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisg
ICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7
CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiAxMik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQs
NCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9
IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21w
b25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChV
bmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpm
bG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxv
YXRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAg
ICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1V
bmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxs
IHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNE
IDkgZGV2aWNlCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZv
ciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigp
LCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGly
dHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVu
aWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIp
OyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZv
cm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBj
YXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBh
cHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdl
dFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUs
IGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBs
eVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUg
YXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlBy
b2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFu
dFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6
OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAg
ICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFn
cyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZs
YWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBz
dGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4
dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmco
IlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQ
YXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAg
SUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2Ug
PSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBnX2Zh
a2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAm
ZXJyb3JNZXNzYWdlKTsKKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAgICBj
b25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVy
UG9pbnRlcigpOworCisgICAgICAgIGluZm9Mb2cuYXBwZW5kU2FuaXRpemVkKG1lc3NhZ2UpOwor
ICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3Nh
Z2UpOworCisgICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOworICAgICAgICBlcnJvck1l
c3NhZ2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7Cisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
cmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdP
UkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAg
ICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg
ICByZXR1cm4gYmluYXJ5OworfQorCisvLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFy
eWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRp
bmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQor
Ly8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlm
IHVuc3VjY2VzZnVsCitpbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyKQoreworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAg
Y29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdW
ZWN0b3JzKCk7CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGludCBuID0gVmFy
aWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7CisgICAgICAgIGlu
dCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5n
VmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5n
W3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAw
OworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG07IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYg
IXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5y
ZWcgPSByOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNwYWNl
WzRdID0gezB9OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdW
ZWN0b3JzOyB5KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBz
cGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKKworICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49
IG4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBt
YXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIG47IHkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVt
bl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOworCisgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
eworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMi
LCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVy
cworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhW
YXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwg
cGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRl
eEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpCit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNl
dCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZy
YWdWYXIgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAg
IHsKKyAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0x
OworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwor
ICAgICAgICB2dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWlu
Z3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9W
QVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFj
a1ZhcnlpbmdzKGluZm9Mb2csIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChy
ZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0
ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+
c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMg
PSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3Rl
cnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxl
ZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsK
KworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1l
ID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRw
dXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5
cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21l
bnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
cHV0LT5yZWcgPSBpbnB1dC0+cmVnOworICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5w
dXQtPmNvbDsKKworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRj
aGVkKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFy
eWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5j
X3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVY
Q09PUkQiKTsKKworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZv
ciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
ZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0g
ZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIo
c2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9
ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3Ry
dWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3Ig
KGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lz
dGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tp
bmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIg
KyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1h
bnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7
XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNt
MykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUg
OiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lO
UFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsg
YXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29y
YXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAg
eworICAgICAgICAgICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmli
dXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0g
ZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBp
eGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAw
LjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGds
X1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2lu
dFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlp
bmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZh
cnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBy
b3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9
IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBi
b29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBs
ZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFj
a2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNM
ICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
PSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZl
cnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtc
biIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0
IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZh
cnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsg
aisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
biA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50
aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0
ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7
XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykK
KyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4i
OworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBD
T0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxu
IgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgor
ICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0g
MS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNt
MykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3Jk
LnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29u
dGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVy
LnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykg
KiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9D
b29yZC55ICsgZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICog
cmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0Lmds
X1BvaW50Q29vcmQueTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRG
YWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+
PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZh
cnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsg
aisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
biA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
WyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0
O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0
ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hh
ZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFk
ZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOwor
ICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKwor
ICAgIGlmICghbGlua1ZhcnlpbmdzKGluZm9Mb2csIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJh
Z21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25z
dCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29u
dGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAg
ICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgdmVy
dGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAg
SUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgcGl4ZWxI
TFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAgaWYg
KHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgdmVy
dGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4Qmlu
YXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhS
RVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBp
eGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAg
ICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRl
eFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVE
KHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7
CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1
dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFs
aW5rQXR0cmlidXRlcyhpbmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIs
IHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZv
TG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0
YW50VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2Vh
cmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAg
ICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25h
bCBkZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29y
ZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAg
bUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4
ZWxTaXplIik7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAg
ICAgIGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERl
dGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5
IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0
cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmli
dXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwor
CisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAg
ICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0
dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKwor
ICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0
aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlv
bl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRp
cGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4g
ZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2Nh
dGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlv
biA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRv
byBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3Qg
aGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRv
ciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0
ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7
CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJp
bmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAg
Ly8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAg
ICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0
aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWls
YWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRU
UklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9v
IG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0g
PSAqYXR0cmlidXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQorICAgIHsK
KyAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOworICAgICAgICBpbnQgcm93cyA9IHN0
ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
dHlwZSksIDEpOworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAg
ICAgICB7CisgICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGlu
ZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRl
ciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQoreworICAgIEQzRFhDT05TVEFO
VFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOworCisgICAgY29uc3RhbnRUYWJs
ZS0+R2V0RGVzYygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURl
c2NyaXB0aW9uLkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgRDNE
WEhBTkRMRSBjb25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNv
bnN0YW50SW5kZXgpOworCisgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3Jp
cHRpb247CisgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxl
LCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZv
TG9nLCBzaGFkZXIsIGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQg
Zm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJl
dHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0g
c2hhZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAg
aWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBEM0RYSEFO
RExFIHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxM
LCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0Nv
bnN0YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lKTsKKworICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1D
b25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3Nh
bXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQz
RFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1h
eChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4
Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0
YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBp
OworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0
TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5
cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBU
RVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4
VGV4dHVyZUltYWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQz
RFhQQ19TVFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFy
cmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsg
YXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJl
cnM7IGZpZWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEM0RY
SEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3Rh
bnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVT
QyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9u
Q291bnQgPSAxOworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0
YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdElu
ZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJy
YXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVV
bmlmb3JtKGluZm9Mb2csIHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5h
bWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBD
X1NDQUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01B
VFJJWF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4g
ZGVmaW5lVW5pZm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFu
dERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5p
Zm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUp
OworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1
bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBk
ZWxldGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVO
VF9TSEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAo
c2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVz
Y3JpcHRpb24pOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICByZXR1
cm4gdW5pZm9ybS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sodW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5z
aXplKCkgLSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5h
cnJheVNpemU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVu
aWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAg
Ly8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVS
MkQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
U0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9P
TF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAg
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
SU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJp
Y2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9N
QVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGlzIG1l
dGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJv
Z3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7
CisgICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUo
MCwgMywgImR4XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5h
cnk6OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBz
dGQ6OnN0cmluZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1
cmUgZmllbGQgZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9z
ID0gbmFtZS5maW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAg
ICAgICAgbmFtZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUg
dGhlIGxlYWRpbmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5j
b21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vi
c3RyKDMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9y
W0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5
X01BWF9CT09MX0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0
SW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8g
MC4wZiA6IDEuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0g
MC4wZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5p
Zm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHNDb3VudCA9IHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCA6IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9v
bEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAg
ICAgaW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291
bnQsIHZzQ291bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09M
X0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNF
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NElu
ZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5wcy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAgICAg
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJv
b2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Cisg
ICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwg
MCwgMCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
CisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0
VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYg
KHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5s
b2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXgg
Pj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0
YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNv
dW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9y
W0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQp
dlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAg
ICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZF
Q1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVD
VE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAg
ICB2ICs9IDM7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNv
dW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxv
YXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBh
cHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rv
cikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgg
Pj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVp
IGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xj
aGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCisgICAg
dW5zaWduZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGF0dHJp
YnV0ZTsKKyAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZUF0
dHJpYnV0ZSsrOworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAg
IGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNf
c3RyKCk7CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOworICAgICAg
ICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNl
CisKKyAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOworfQorCitH
TGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCit7CisgICAgaW50
IGNvdW50ID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAg
ICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmli
dXRlTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50
IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4
TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50
ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIg
aW50ZXJuYWwgdW5pZm9ybXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7Cisg
ICAgdW5zaWduZWQgaW50IHVuaWZvcm07CisgICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8
IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9y
bXNbdW5pZm9ybV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0aXZlVW5p
Zm9ybSA9PSBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBhY3RpdmVVbmlmb3JtKys7CisgICAgfQorCisgICAgQVNTRVJUKHVuaWZvcm0g
PCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOworCisgICAg
ICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShuYW1l
LCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0g
J1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVu
Z3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSBtVW5p
Zm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKKworICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZv
cm1dLT50eXBlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291
bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRl
eCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7
CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMs
ICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5Ojpn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKwor
ICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9y
bXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNv
bXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW5n
dGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOwor
ICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAi
WzBdIi4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxl
bmd0aCwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5n
dGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykK
K3sKKyAgICBhcHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCZpbmZv
TG9nKSkKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZykKK3sKKyAgICAv
LyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVu
dCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0
LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3
aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlz
c3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0
VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5L
Tk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4
ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5h
Y3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBs
ZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRz
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5m
b0xvZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUg
c2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVy
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCisgICAgewor
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgi
U2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5L
Tk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0u
dGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29u
ZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCku
IiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1
bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhS
YW5nZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
RHhDb29yZExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhl
bFNpemVMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5YzVlMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMg
dGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8g
YW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4x
MC4zIHBhZ2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworCisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNp
bmNsdWRlIDxkM2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2Ns
YXNzIFZlcnRleFNoYWRlcjsKKworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5n
bGUgc2hhZGVyIHVuaWZvcm0KK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShHTGVudW0g
dHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsK
KworICAgIH5Vbmlmb3JtKCk7CisKKyAgICBib29sIGlzQXJyYXkoKTsKKworICAgIGNvbnN0IEdM
ZW51bSB0eXBlOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBu
YW1lCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpk
YXRhOworICAgIGJvb2wgZGlydHk7CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCisgICAgewor
ICAgICAgICBSZWdpc3RlckluZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDRJbmRl
eCA9IC0xOworICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7CisgICAgICAgICAgICBib29s
SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyU2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19C
T09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9hdDRJbmRleCA9
IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyQ291bnQpOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmbG9h
dDRJbmRleDsKKyAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50IGJvb2xJbmRl
eDsKKworICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKKyAgICB9OworCisgICAgUmVnaXN0ZXJJ
bmZvIHBzOworICAgIFJlZ2lzdGVySW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBj
b3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVz
CitzdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50Owor
ICAgIHVuc2lnbmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBs
aW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUgcGFzc2VkIHRv
IFByb2dyYW1CaW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5Cit7CisgIHB1YmxpYzoKKyAgICBQ
cm9ncmFtQmluYXJ5KCk7CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihj
b25zdCBjaGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRl
SW5kZXgpOworCisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRl
eHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwor
ICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7CisKKyAgICBH
TGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KTsKKyAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAg
ICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0y
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBi
b29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0
VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1z
KTsKKworICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xp
bnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0
aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25z
dDsKKyAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBn
ZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisKKyAgICBib29sIGxpbmsoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdz
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNp
emVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmli
dXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50
ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZl
QXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdl
dEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAm
aW5mb0xvZyk7CisgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwor
ICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5
KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUg
Kipjb25zdGFudFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3Ry
aW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wg
bGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cg
JmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFk
ZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBi
b29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0Mg
JmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlm
b3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1u
ZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBh
cHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5p
Zm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0
ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAg
IElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
Km1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4
ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgor
ICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0
YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJp
YnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVS
VEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wg
YWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1
cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkg
bVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlm
b3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBt
RHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09y
TGluZXNMb2NhdGlvbjsKKworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAg
IC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUu
LjRiOTExZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRl
cmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJl
czo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0
dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQp
IDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0
KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5V
TEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVu
Y2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBw
cm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJl
bmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQor
eworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisK
K0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVy
ZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVm
ZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChO
VUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisK
K0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAw
OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBj
b25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRh
cmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0
aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBt
VGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQor
CitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBu
ZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMg
dmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkg
dGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFk
ZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewot
ICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5h
ZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAg
ICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJl
bGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJU
ZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQog
Ci1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2ls
KCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxM
OwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1H
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVu
dW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVu
dW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQz
REZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6Omdl
dEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQo
KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
OjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8v
LyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVu
ZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBS
ZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0x
NTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAg
UmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBv
biBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNl
CiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRo
U3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBA
IC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3Rv
cmFnZSgpCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFj
ZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJu
IE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkg
KlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5V
TEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAg
fQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xv
cmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAg
LTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVy
KCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFj
ZTkgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURl
cHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAg
IH0KKwogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4
Li5lNmQ1ZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7
Ci1jbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7
CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3Rl
bmNpbGJ1ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsK
IH07CiAKLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50
ZXJmYWNlCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUg
KnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0
dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVm
ZmVyVGV4dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAg
ICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lk
IHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3
IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJm
YWNlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAK
LSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50
ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2Ns
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVy
ZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVh
bCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVy
IDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
Y3BwCmluZGV4IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQg
U2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICppbmZvTG9nKQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisg
ICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZT
aXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2cs
IG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVu
KG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4
KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9n
W2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRl
cjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisg
ICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZT
aXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNv
dXJjZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNl
KSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAg
fQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1ww
JzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1No
YWRlci5oCmluZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0
ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJp
ZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGlj
OgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpA
QCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1
dGVBcnJheTsKIAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZy
aWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFu
ZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwCmluZGV4IDI5MTc3ZDIuLjVjY2Y4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAtMSwzMDkwICsxLDI5MDkgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6
VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gVGV4dHVyZTJEIGFuZCBU
ZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kIHJlbGF0ZWQK
LS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYz
LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgPGQzZHg5dGV4
Lmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW50cmluLmg+Ci0KLSNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
QmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi1uYW1lc3BhY2Ug
Z2wKLXsKLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFs
ID0gMTsKLQotc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUIHx8Ci0gICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEUpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
ID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJG
OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEQzREZNVF9BMTZCMTZHMTZSMTZGOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBpZiAoZm9ybWF0ID09
IEdMX0xVTUlOQU5DRSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRl
eHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfUkdCKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4
UjhHOEI4OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1zdGF0aWMgYm9vbCBJc1Rl
eHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoKGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2Ug
RDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW1hZ2U6OkltYWdlKCkKLXsK
LSAgICBtV2lkdGggPSAwOyAKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtRm9ybWF0ID0gR0xfTk9O
RTsKLSAgICBtVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0KLSAgICBtU3VyZmFjZSA9IE5VTEw7
Ci0KLSAgICBtRGlydHkgPSBmYWxzZTsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1N
RU07Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTo6fkltYWdl
KCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6cmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFz
ZSkKLXsKLSAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1IZWlnaHQgIT0gaGVp
Z2h0IHx8Ci0gICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8Ci0gICAgICAgIG1UeXBlICE9IHR5
cGUgfHwKLSAgICAgICAgZm9yY2VSZWxlYXNlKQotICAgIHsKLSAgICAgICAgbVdpZHRoID0gd2lk
dGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7
Ci0gICAgICAgIG1UeXBlID0gdHlwZTsKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1h
dCB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVG
b3JtYXRUeXBlKG1Gb3JtYXQsIG1UeXBlKTsKLQotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3Vy
ZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQotewot
ICAgIGlmKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElE
aXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbmV3U3VyZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQ
T09MX1NZU1RFTU1FTTsKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0g
ICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xzaXplaSByZXF1
ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWln
aHQ7Ci0gICAgICAgIGlmIChJc0NvbXByZXNzZWQobUZvcm1hdCkgJiYgKG1XaWR0aCAlIDQgIT0g
MCB8fCBtSGVpZ2h0ICUgNCAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpc011
bHQ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgdXBzYW1wbGVDb3VudCA9IDA7Ci0gICAgICAg
ICAgICB3aGlsZSAoIWlzTXVsdDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVx
dWVzdFdpZHRoIDw8PSAxOwotICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQgPDw9IDE7Ci0g
ICAgICAgICAgICAgICAgdXBzYW1wbGVDb3VudCsrOwotICAgICAgICAgICAgICAgIGlmIChyZXF1
ZXN0V2lkdGggJSA0ID09IDAgJiYgcmVxdWVzdEhlaWdodCAlIDQgPT0gMCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxl
Q291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgp
LT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNo
ICsgMSwgTlVMTCwgZ2V0RDNERm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0K
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAm
bmV3U3VyZmFjZSk7Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAg
ICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7Ci0gICAgbURpcnR5ID0gZmFsc2U7Ci0gICAgbUQzRFBv
b2wgPSBwb29sVG9Vc2U7Ci19Ci0KLUhSRVNVTFQgSW1hZ2U6OmxvY2soRDNETE9DS0VEX1JFQ1Qg
KmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwot
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0KLSAgICBpZiAobVN1
cmZhY2UpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2Vk
UmVjdCwgcmVjdCwgMCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIEltYWdlOjp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OmlzUmVuZGVyYWJs
ZUZvcm1hdCgpIGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJh
YmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQo
KSBjb25zdAotewotICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBo
YXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBi
eSB0aGUgY2FsbGVyCi0gICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOwot
Ci0gICAgcmV0dXJuIG1EM0RGb3JtYXQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6
Z2V0U3VyZmFjZSgpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJm
YWNlOwotfQotCi12b2lkIEltYWdlOjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBEM0RYTG9h
ZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxMLCBtU3VyZmFjZSwgTlVMTCwg
TlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNj
KCZkZXNjKTsKLSAgICBBU1NFUlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAg
ICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci19Ci0KLXZv
aWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2Uo
KTsKLQotICAgIGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIG1IZWlnaHQpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01B
TkFHRUQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEWExvYWRT
dXJmYWNlRnJvbVN1cmZhY2UoZGVzdFN1cmZhY2UsIE5VTEwsICZyZWN0LCBzb3VyY2VTdXJmYWNl
LCBOVUxMLCAmcmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRl
c3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVj
dC5sZWZ0LCByZWN0LnRvcH07Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmlj
ZSgpLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBv
aW50KTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4
b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQv
dHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRw
dXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KLXZvaWQgSW1h
Z2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRl
UGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0gICAgaW5wdXQg
PSAoKGNoYXIqKWlucHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBz
d2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAg
ICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFu
Y2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfQThMOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAg
aWYgKHN1cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRS
R0JBVUJ5dGVEYXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80OgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZs
b2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUg
c3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAg
ICAgICBsb2FkQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAg
ICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNo
IChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNv
bnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4g
RDNECi0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZG
bG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9h
dERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hd
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0g
MDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgp
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgZGVzdEJ5
dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDE6IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKLQot
ICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAg
ICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAg
IC8vIEw4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHko
ZGVzdCwgc291cmNlLCB3aWR0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNl
W3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1N
TU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9u
IG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFs
cGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVs
ID0gbmF0aXZlPyAyOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0g
ICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291
cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNl
ID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCsw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
WzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEg
JiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYg
MHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9m
ZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAx
NmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgX19t
MTI4aSBick1hc2sgPSBfbW1fc2V0MV9lcGkzMigweDAwZmYwMGZmKTsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOwotICAgICAg
ICBpbnQgeCA9IDA7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAg
ICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkg
JiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90
bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsgeCArPSA0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZHVfc2kxMjgocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOwotICAgICAgICAgICAgLy8gTWFz
ayBvdXQgZyBhbmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdlCi0gICAgICAgICAgICBfX20xMjhpIGdh
Q29tcG9uZW50cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRhKTsKLSAgICAg
ICAgICAgIC8vIE1hc2sgb3V0IGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25l
bnRzID0gX21tX2FuZF9zaTEyOChzb3VyY2VEYXRhLCBick1hc2spOwotICAgICAgICAgICAgLy8g
U3dhcCBiIGFuZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyU3dhcHBlZCA9IF9tbV9zaHVmZmxl
aGlfZXBpMTYoX21tX3NodWZmbGVsb19lcGkxNihickNvbXBvbmVudHMsIF9NTV9TSFVGRkxFKDIs
IDMsIDAsIDEpKSwgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpOwotICAgICAgICAgICAgX19tMTI4
aSByZXN1bHQgPSBfbW1fb3Jfc2kxMjgoZ2FDb21wb25lbnRzLCBiclN3YXBwZWQpOwotICAgICAg
ICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hd
KSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3Jp
dGVzCi0gICAgICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0g
KF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3Qg
PSBOVUxMOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJn
YmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkE0NDQ0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAw
eDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgw
RjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAx
Mik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQp
IHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAo
KHJnYmEgJiAweDAwM0UpID4+IDMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhG
ODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAw
MSkgPyAweEZGIDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJH
QkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpk
ZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0
ICogMTYpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKLSAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDg7Ci0g
ICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdp
ZHRoKjQpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0IHsKLSAgICBz
d2l0Y2ggKGdldEQzREZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMToK
LSAgICAgICAgICBsb2FkRFhUMURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICAgIGxvYWREWFQzRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDU6
Ci0gICAgICAgICAgbG9hZERYVDVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChjb25zdCB1
bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhUMSBi
bG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTFdIGNvbG9yMC4KLSAgLy8gWzItM10gY29sb3IxLgot
ICAvLyBbNC03XSBjb2xvciBiaXRtYXAsIDIgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFNvIGVhY2gg
b2YgdGhlIDQtNyBieXRlcyByZXByZXNlbnRzIG9uZSBsaW5lLCBmbGlwcGluZyBhIGJsb2NrIGlz
IGp1c3QKLSAgLy8gZmxpcHBpbmcgdGhvc2UgYnl0ZXMuCi0KLSAgLy8gRmlyc3QgMzItYml0cyBp
cyB0d28gUkdCNTY1IGNvbG9ycyBzaGFyZWQgYnkgdGlsZSBhbmQgZG9lcyBub3QgbmVlZCB0byBi
ZSBtb2RpZmllZC4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLQotICAvLyBTZWNvbmQgMzItYml0
cyBjb250YWlucyA0IHJvd3Mgb2YgNCAyLWJpdCBpbnRlcnBvbGFudHMgYmV0d2VlbiB0aGUgY29s
b3JzLiBBbGwgcm93cyBzaG91bGQgYmUgZmxpcHBlZC4KLSAgZGVzdFsxXSA9IChzb3VyY2VbMV0g
Pj4gMjQpIHwKLSAgICAgICAgICAgICgoc291cmNlWzFdIDw8IDgpICYgMHgwMEZGMDAwMCkgfAot
ICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAg
ICAoc291cmNlWzFdIDw8IDI0KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2Yg
YSBEWFQxIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhU
MUJsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0
KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0gIGRl
c3RbMV0gPSAoKHNvdXJjZVsxXSA8PCA4KSAmIDB4MDAwMEZGMDApIHwKLSAgICAgICAgICAgICgo
c291cmNlWzFdID4+IDgpICYgMHgwMDAwMDBGRik7Ci19Ci0KLS8vIEZsaXBzIGEgZnVsbCBEWFQz
IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2Nr
RnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0g
IC8vIEEgRFhUMyBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTddICBhbHBoYSBiaXRtYXAsIDQg
Yml0cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gRmlyc3Qg
YW5kIFNlY29uZCAzMiBiaXRzIGFyZSA0Yml0IHBlciBwaXhlbCBhbHBoYSBhbmQgbmVlZCB0byBi
ZSBmbGlwcGVkLgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAoc291cmNlWzFdIDw8
IDE2KTsKLSAgZGVzdFsxXSA9IChzb3VyY2VbMF0gPj4gMTYpIHwgKHNvdXJjZVswXSA8PCAxNik7
Ci0KLSAgLy8gQW5kIGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9u
LgotICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0v
LyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0
aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGlu
dCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4K
LSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8PCAxNik7Ci0gIEZs
aXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBz
IGEgZnVsbCBEWFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBD
b3B5RFhUNUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50
KiBkZXN0KSB7Ci0gIC8vIEEgRFhUNSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswXSAgICBhbHBo
YTAuCi0gIC8vIFsxXSAgICBhbHBoYTEuCi0gIC8vIFsyLTddICBhbHBoYSBiaXRtYXAsIDMgYml0
cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gVGhlIGFscGhh
IGJpdG1hcCBkb2Vzbid0IGVhc2lseSBtYXAgbGluZXMgdG8gYnl0ZXMsIHNvIHdlIGhhdmUgdG8K
LSAgLy8gaW50ZXJwcmV0IGl0IGNvcnJlY3RseS4gIEV4dHJhY3RlZCBmcm9tCi0gIC8vIGh0dHA6
Ly93d3cub3BlbmdsLm9yZy9yZWdpc3RyeS9zcGVjcy9FWFQvdGV4dHVyZV9jb21wcmVzc2lvbl9z
M3RjLnR4dCA6Ci0gIC8vCi0gIC8vICAgVGhlIDYgImJpdHMiIGJ5dGVzIG9mIHRoZSBibG9jayBh
cmUgZGVjb2RlZCBpbnRvIG9uZSA0OC1iaXQgaW50ZWdlcjoKLSAgLy8KLSAgLy8gICAgIGJpdHMg
PSBiaXRzXzAgKyAyNTYgKiAoYml0c18xICsgMjU2ICogKGJpdHNfMiArIDI1NiAqIChiaXRzXzMg
KwotICAvLyAgICAgICAgICAgICAgICAgICAyNTYgKiAoYml0c180ICsgMjU2ICogYml0c181KSkp
KQotICAvLwotICAvLyAgIGJpdHMgaXMgYSA0OC1iaXQgdW5zaWduZWQgaW50ZWdlciwgZnJvbSB3
aGljaCBhIHRocmVlLWJpdCBjb250cm9sIGNvZGUKLSAgLy8gICBpcyBleHRyYWN0ZWQgZm9yIGEg
dGV4ZWwgYXQgbG9jYXRpb24gKHgseSkgaW4gdGhlIGJsb2NrIHVzaW5nOgotICAvLwotICAvLyAg
ICAgICBjb2RlKHgseSkgPSBiaXRzWzMqKDQqeSt4KSsxLi4zKig0KnkreCkrMF0KLSAgLy8KLSAg
Ly8gICB3aGVyZSBiaXQgNDcgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYW5kIGJpdCAwIGlzIHRo
ZSBsZWFzdAotICAvLyAgIHNpZ25pZmljYW50IGJpdC4KLSAgY29uc3QgdW5zaWduZWQgY2hhciog
c291cmNlQnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0Qnl0ZXMgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRlc3QpKTsKLSAg
dW5zaWduZWQgaW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAoc291cmNlQnl0
ZXNbM10gKyAyNTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzJfMyA9
IHNvdXJjZUJ5dGVzWzVdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzZdICsgMjU2ICogc291cmNlQnl0
ZXNbN10pOwotICAvLyBzd2FwIGxpbmVzIDAgYW5kIDEgaW4gbGluZV8wXzEuCi0gIHVuc2lnbmVk
IGludCBsaW5lXzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIC8vIHN3
YXAgbGluZXMgMiBhbmQgMyBpbiBsaW5lXzJfMy4KLSAgdW5zaWduZWQgaW50IGxpbmVfM18yID0g
KChsaW5lXzJfMyAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKGxpbmVfMl8zICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNl
Qnl0ZXNbMF07Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNb
Ml0gPSBsaW5lXzNfMiAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzNfMiAmIDB4ZmYw
MCkgPj4gODsKLSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfM18yICYgMHhmZjAwMDApID4+IDE2Owot
ICBkZXN0Qnl0ZXNbNV0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1s2XSA9IChsaW5l
XzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzddID0gKGxpbmVfMV8wICYgMHhmZjAw
MDApID4+IDE2OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92
ZSBmdW5jdGlvbi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRlc3QgKyAy
KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQ1IGJsb2NrIGluIHRo
ZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJsb2NrSGFsZihjb25zdCB1
bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlv
dXQgYWJvdmUuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihzb3VyY2Up
KTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzBfMSA9
IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICogc291cmNlQnl0
ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYp
IDw8IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAw
MCkgPj4gMTIpOwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVz
WzFdID0gc291cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfMV8wICYgMHhmZjsK
LSAgZGVzdEJ5dGVzWzNdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNb
NF0gPSAobGluZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIEZsaXBDb3B5RFhUMUJsb2NrSGFs
Zihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQxRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFT
U0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0g
ICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0g
ICAgQVNTRVJUKGlucHV0UGl0Y2ggJSA4ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAl
IDggPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJv
dW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fj
cm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9z
cyAqIDI7Ci0KLSAgICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAg
ICAgICAgICBkZXN0W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFd
ID0gc291cmNlW3ggKyAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7
IHggKz0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9j
a0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9
PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7
Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0g
MCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUg
MTYgPT0gMCk7Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
aW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRoIHVwIGluIGNhc2Ug
aXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIDMpIC8g
NDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDQ7Ci0KLSAgICBzd2l0Y2gg
KGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3ggKyAxXTsKLSAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgZGVzdFt4ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZs
aXBDb3B5RFhUM0Jsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VChoZWlnaHQgJSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQgLyA0OyArK3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0Z1bGwoc291cmNlICsgeCwg
ZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZz
ZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQo
d2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQo
aW5wdXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDAp
OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0
aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAo
d2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0Owot
Ci0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAg
ZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJj
ZVt4ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwot
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwotCi0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0Z1
bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gVGhpcyBpbXBsZW1lbnRzIGds
Q29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBm
b3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOjpjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KQotewotICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3Jp
cHRpb247Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0gICAgCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShk
ZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQs
IEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0
Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFy
Z2V0RGF0YShyZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldERhdGEpOwotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhw
ZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIFJF
Q1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBk
ZXNjcmlwdGlvbi5IZWlnaHQpOwotICAgIGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVs
WU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1IZWlnaHQpOwotICAgIFJFQ1QgZGVzdFJlY3QgPSB7
eG9mZnNldCwgZGVzdFlPZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgZGVzdFlPZmZzZXQgKyBoZWln
aHR9OwotCi0gICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgcmVz
dWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZ2V0U3VyZmFjZSgpLCBOVUxMLCAmZGVz
dFJlY3QsIHJlbmRlclRhcmdldERhdGEsIE5VTEwsICZzb3VyY2VSZWN0LCBEM0RYX0ZJTFRFUl9C
T1gsIDApOwotICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4i
KTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAg
ICAgICByZXN1bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNv
dXJjZVJlY3QsIDApOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3Rh
bmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OwotICAg
ICAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGlu
dmFsaWQpLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwot
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRl
c3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRz
OwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0
TG9jay5wQml0czsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0
RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0g
ZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Ug
Kz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVz
dExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHN3aXRj
aChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJj
ZVt4ICogMiArIDFdICYgMHhGODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hd
ID0gcmVkIHwgKHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVH
NUI1OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAg
ICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBk
ZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAg
ICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChy
ZWQgPj4gNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0g
KHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBp
dGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICB1bmxvY2soKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+
VW5sb2NrUmVjdCgpOwotICAgIH0KLQotICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsK
LQotICAgIG1EaXJ0eSA9IHRydWU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSwK
LSAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJlbmRlclRhcmdl
dCkpLAotICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCi17Ci19Ci0K
LVRleHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQotewotfQotCi1ib29sIFRleHR1cmVT
dG9yYWdlOjppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXQ7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1
cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0K
LXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0
b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50VGV4dHVy
ZVNlcmlhbCsrOwotfQotCi1UZXh0dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9i
amVjdChpZCkKLXsKLSAgICBtTWluRmlsdGVyID0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOwot
ICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7Ci0gICAgbVdyYXBTID0gR0xfUkVQRUFUOwotICAg
IG1XcmFwVCA9IEdMX1JFUEVBVDsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICBt
VXNhZ2UgPSBHTF9OT05FOwotICAgIAotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0KLSAgICBt
SW1tdXRhYmxlID0gZmFsc2U7Ci19Ci0KLVRleHR1cmU6On5UZXh0dXJlKCkKLXsKLX0KLQotLy8g
UmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51
bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQot
ewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAg
ICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05F
QVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRlcikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtTWluRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAg
ICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRl
ciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRN
YWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5
UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUg
KHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3Jh
cCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0g
ICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVB
VDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURp
cnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRh
dGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0g
d3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6
Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JF
UEVBVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7Ci0gICAgICAgICAgICAgICAg
bURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ugc3RhdGUg
dXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xl
bnVtIHVzYWdlKQotewotICAgIHN3aXRjaCAodXNhZ2UpCi0gICAgewotICAgICAgY2FzZSBHTF9O
T05FOgotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFOgotICAgICAg
ICBtVXNhZ2UgPSB1c2FnZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0TWlu
RmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1pbkZpbHRlcjsKLX0KLQotR0xlbnVtIFRl
eHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYWdGaWx0ZXI7Ci19
Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwUygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XcmFw
UzsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVdyYXBUOwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdAotewotICAgIHJl
dHVybiBtVXNhZ2U7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+
bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmU6OnNl
dENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBp
dGNoKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAg
aW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykg
KyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGlt
YWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkp
Ci0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgp
KSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1h
dCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRy
YW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSks
IHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdl
KQotewotICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWln
aHQgKyB5b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoZm9ybWF0ICE9IGdldEludGVybmFsRm9ybWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAocGl4ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsK
LSAgICAgICAgdXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICB1cGRhdGVSZWdp
b24ucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20g
PSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsK
LQotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbik7Ci0KLSAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCA9
IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIGZvcm1hdCk7Ci0gICAgICAgICAgICBpbnQg
aW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7
Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHRyYW5zZm9y
bVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRo
LCBoZWlnaHQsIC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocGl4ZWxzKSAr
IGlucHV0U2l6ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJh
c2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJD
b21wbGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8g
ZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9y
YWdlKGZhbHNlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
Ci0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19
Ci0KLWJvb2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbURpcnR5UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpy
ZXNldERpcnR5KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5
SW1hZ2VzID0gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2Vy
aWFsKCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2Up
OwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsK
LX0KLQotdW5zaWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KQotewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVl
KTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0
YXJnZXQpIDogMDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxz
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cy
KHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVt
YmVyIG9mIGxldmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wg
RVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBt
aXBtYXBzLgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNy
ZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExl
dmVsQ291bnQoKSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdl
dEJsaXR0ZXIoKTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVj
dDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1h
bmFnZWQpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxM
LCBzb3VyY2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBnZXREaXNwbGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBk
aXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBk
ZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5
ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNl
cmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAgIG1UZXh0dXJl
ID0gc3VyZmFjZVRleHR1cmU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBi
b29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1S
ZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKLXsK
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIG1UZXh0
dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3
aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6On5U
ZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAm
c3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0
b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsK
LX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlh
bChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFs
OwotfQotCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsK
LSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gTlVMTDsKLSAgICBtUHJveHlSZWZzID0gMDsKLX0KLQotVGV4dHVyZTJE
Ojp+VGV4dHVyZTJEKCkKLXsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0KLSAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIAotICAgIGlm
IChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVM
TCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIFdlIG5lZWQgdG8g
bWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFz
IAotLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0
IHRvIHVzZSBhIHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMg
YmVlbiBkZWxldGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6
cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94
eVJlZnMgPiAwKQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9
PSAwKQotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0
dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19
Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAg
ICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAg
IHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybiAwOwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVs
KSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRl
cm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1h
dCgpOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZTJEOjpn
ZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXREM0RG
b3JtYXQoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlw
ZSkKLXsKLSAgICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZpbmVkID0gbUlt
YWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFs
c2UpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0
dXJlMkQ6OmJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgcmVsZWFz
ZVRleEltYWdlKCk7Ci0KLSAgICBHTGVudW0gZm9ybWF0OwotCi0gICAgc3dpdGNoKHN1cmZhY2Ut
PmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAg
ICBmb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgICBmb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbUltYWdlQXJyYXlbMF0ucmVkZWZpbmUoZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0
aCgpLCBzdXJmYWNlLT5nZXRIZWlnaHQoKSwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0KLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3Jh
Z2UyRChzdXJmYWNlLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCkpOwotCi0gICAgbURpcnR5SW1hZ2Vz
ID0gdHJ1ZTsKLSAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbVN1cmZhY2UtPnNldEJvdW5k
VGV4dHVyZSh0aGlzKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJbWFnZSgpCi17
Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4
dHVyZShOVUxMKTsKLSAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVGV4
U3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAg
ICAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xfUkdCQSwgMCwg
MCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwotfQotCi12b2lk
IFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgQVNTRVJUKG1J
bWFnZUFycmF5W2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0KLSAgICBpZiAobGV2ZWwg
PCBsZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExl
dmVsID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgaWYg
KGRlc3RMZXZlbCkKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFn
ZUFycmF5W2xldmVsXTsKLSAgICAgICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAgIGRlc3RM
ZXZlbC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhl
bHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRl
eHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4
dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQotICAgIHsK
LSAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVy
VGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci0KLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdM
X1VOU0lHTkVEX0JZVEUpOwotICAgCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0uaXNSZW5k
ZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgw
LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhT
dG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBpZiAod2lk
dGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBz
b3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNl
UmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAo
c291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgp
KTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0
b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAg
ICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgwLCBoZWlnaHQs
IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZl
bChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZv
cm1hdCwgMCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSkKLXsKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdl
dFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWln
aHQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1JbWFnZUFy
cmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1Nh
bXBsZXJDb21wbGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5
KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0g
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIGlmIChsZXZl
bCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0
ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0g
Y2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdp
ZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRv
cCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90
dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5z
Zm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRI
ZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJU
YXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBk
ZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEdM
ZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xl
bnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1B
VCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBj
b25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10
KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdl
MkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgbUlt
bXV0YWJsZSA9IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjpt
YXgoMSwgd2lkdGggPj4gMSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+
PiAxKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFj
ZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIDJE
IHRleHR1cmUgc2FtcGxpbmcgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjguMiBwYWdlIDg1LgotYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29u
c3QKLXsKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotCi0gICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1N
aW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9M
SU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9N
SVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAg
ICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRl
eHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRl
cm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVy
ICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVy
ICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0ID0g
Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKTsKLQotICAgIGlmICghbnBv
dFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9f
RURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdM
X0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcp
Ci0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjppc01p
cG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0u
Z2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3RkOjpt
YXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBx
OyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3Jt
YXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xl
dmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdl
QXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdo
dCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmUyRDo6aXND
b21wcmVzc2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFs
Rm9ybWF0KCkpOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0QmFz
ZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdl
LT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNE
IDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJl
MkQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVsw
XS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVp
Z2h0KCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7
Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwot
ICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShm
b3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7Ci0K
LSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAg
ICAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50
IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9p
ZCBUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGludCBsZXZlbHMgPSBsZXZlbENv
dW50KCk7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsKLQot
ICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29t
bWl0UmVjdChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCksIG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVTdG9yYWdl
MkQgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdLmdldFdp
ZHRoKCkgIT0gMCAmJiBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSAhPSAwKQotICAgIHsKLSAg
ICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdM
aW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RG
T1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAg
bmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0cnVlKTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRT
dXJmYWNlTGV2ZWwoaSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qg
PSBuZXdUZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFn
ZWQoKSkpCi0gICAgICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBu
ZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0
b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6
Z2VuZXJhdGVNaXBtYXBzKCkKLXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVsw
XS5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2gg
cSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxz
LgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRX
aWR0aCgpLCBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwg
bUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAg
ICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0
KCkpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAg
ICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgp
OwotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5n
ZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChGQUlMRUQoRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0
U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBO
VUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHko
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVS
RV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
KFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOwotICAg
IH0KLQotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotSURpcmVjdDNEU3VyZmFj
ZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNT
RVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJs
eWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVy
ZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwot
fQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJl
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRl
eHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQz
REZPUk1BVCBmb3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1
cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCi17Ci0gICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywgaXNS
ZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9v
bCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1h
cDo6Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3Vy
ZmFjZShlczJkeDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2Up
OwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVy
biBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0K
LQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKLX0KLQotVGV4dHVy
ZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAg
ICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlS
ZWZzW2ldID0gMDsKLSAgICB9Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAo
KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgbUZh
Y2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0g
ICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotfQotCi0vLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291
bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyAKLS8vIHByb3hpZXMg
Zm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGls
ZSAKLS8vIHByb3h5IHJlZmVyZW5jZXMgc3RpbGwgZXhpc3QuIElmIHRoZSByZWZlcmVuY2UgY291
bnQgZHJvcHMgdG8gemVybywKLS8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0
aGF0IGEgbmV3IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcKLS8vIHdpbGwgY2F1c2UgcmVjcmVhdGlv
bi4KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAg
ICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICAgICAgbUZhY2VQcm94eVJl
ZnNbaV0rKzsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsg
aSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID4gMCkKLSAgICAgICAgICAg
ICAgICBtRmFjZVByb3h5UmVmc1tpXS0tOwotCi0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJl
ZnNbaV0gPT0gMCkKLSAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci19Ci0KLUdMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1J
bWFnZUFycmF5WzBdW2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IDA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGludCBsZXZlbCkg
Y29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBd
LmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25z
dAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7Ci19Ci0KLUQzREZP
Uk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0K
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgyLCBs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJ
bWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsK
LSAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
TmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscykKLXsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRl
eHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5
W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29t
bWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVChtSW1hZ2VB
cnJheVtmYWNlXVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotCi0gICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RM
ZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0g
TlVMTCk7Ci0KLSAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotICAgICAg
ICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCi0gICAgewotICAgICAg
ICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFn
ZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQp
XVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotLy8g
VGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dFdpZHRoKCk7Ci0KLSAgICBib29sIG1pcG1hcHBpbmc7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0
ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6
Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQo
KSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9P
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
Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewot
ICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDog
TlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBm
cm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJl
Rm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5k
ZXJUYXJnZXQpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFj
ZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2
ZWwpOwotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRl
eHR1cmUoKQotewotICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAg
IHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAg
ICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJh
eVswXVswXS5nZXRXaWR0aCgpICE9IDApCi0gICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVh
dGlvbkxldmVscyhzaXplLCAwKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKLQotICAg
ICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwg
NjsgZisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3
VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2Uo
ZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRl
eHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0pOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHTGVudW0gZmFjZSkKLXsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7Ci0gICAg
TUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YID09IDIpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsK
LSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09
IDUpOwotCi0gICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50
IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIHR5cGUpCi17Ci0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZl
bF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBp
ZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAg
IH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAg
IGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4
KHRhcmdldCk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtm
YWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJheVtmYWNl
aW5kZXhdW2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBBU1NFUlQod2lkdGggPT0gaGVp
Z2h0KTsKLQotICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWln
aHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0Lmxl
ZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENv
bG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdl
dFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VS
ZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0K
LSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KDAs
IGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7Ci0KLSAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVN
YXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0
LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0KLSAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxd
LmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBs
ZXRlKCkpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29w
eSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENv
dW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9y
bVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJj
ZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1w
KHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdo
dCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlP
ZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5nZXRX
aWR0aCgpKTsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlm
IChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29w
eShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgp
LCB4b2Zmc2V0LCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFy
Z2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdM
ZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xl
bnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1B
VCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBj
b25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10
KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdl
Q3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKLSAgICBtSW1tdXRh
YmxlID0gdHJ1ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2Ur
KykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVm
aW5lKGZvcm1hdCwgc2l6ZSwgc2l6ZSwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBzaXplID0g
c3RkOjptYXgoMSwgc2l6ZSA+PiAxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50
IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UzsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0u
cmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAg
ICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBmYWNl
ID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZl
bCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRT
dXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQotewotICAgIGlmICghaXNDdWJl
Q29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIy
VGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0u
Z2V0V2lkdGgoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBs
ZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0
ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlb
MF1bMF0uZ2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBm
KyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlb
Zl1bMF0uZ2V0Rm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkg
Pj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zd
WzBdLmdldFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2Ug
JiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJl
TWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOwotICAg
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLQot
ICAgICAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRl
cih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChs
b3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0ubWFya0NsZWFuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2
OyBmKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBp
IDw9IHE7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9t
U3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIG1JbWFn
ZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JP
WCwgMCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCIgZmFp
bGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFJc0N1
YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKG1GYWNl
UHJveGllc1tmYWNlXSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2Vd
ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0
YXJnZXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi1J
RGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KQotewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwot
Ci0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlm
IChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAq
VGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1cmUuY3BwOiBJ
bXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3Nlcw0K
Ky8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBv
YmplY3RzIGFuZCByZWxhdGVkDQorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
DQorDQorI2luY2x1ZGUgPGQzZHg5dGV4Lmg+DQorDQorI2luY2x1ZGUgPGFsZ29yaXRobT4NCisj
aW5jbHVkZSA8aW50cmluLmg+DQorDQorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIg0KKw0KKyNp
bmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
Ig0KKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCINCisjaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIg0KKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCINCisNCituYW1lc3BhY2UgZ2wNCit7DQordW5zaWduZWQg
aW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOw0KKw0KK3N0YXRp
YyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQ0KK3sNCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBEM0RGTVRfSU5UWjsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQg
PT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fA0KKyAgICAgICAgICAgICBmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpDQorICAgIHsNCisgICAgICAg
IHJldHVybiBEM0RGTVRfRFhUMTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IEQzREZNVF9EWFQzOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gRDNERk1U
X0RYVDU7DQorICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOw0KKyAgICB9DQorICAgIGVsc2Ug
aWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiBE
M0RGTVRfQTE2QjE2RzE2UjE2RjsNCisgICAgfQ0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VO
U0lHTkVEX0JZVEUpDQorICAgIHsNCisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNF
ICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7DQorICAgICAgICB9DQorICAgICAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9BOEw4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX1JHQikNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhH
OEI4Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCisg
ICAgfQ0KKw0KKyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Ow0KK30NCisNCitzdGF0aWMgYm9v
bCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpDQorew0KKyAgICBp
ZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsN
CisgICAgfQ0KKyAgICBzd2l0Y2goZm9ybWF0KQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRf
TDg6DQorICAgICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICBjYXNlIEQzREZNVF9EWFQxOg0K
KyAgICAgIGNhc2UgRDNERk1UX0RYVDM6DQorICAgICAgY2FzZSBEM0RGTVRfRFhUNToNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoNCisgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOg0K
KyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6DQorICAgICAgICByZXR1cm4gdHJ1ZTsN
CisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAg
ICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0VGV4dHVyZVVz
YWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJs
ZSkNCit7DQorICAgIERXT1JEIGQzZHVzYWdlID0gMDsNCisNCisgICAgaWYgKGQzZGZtdCA9PSBE
M0RGTVRfSU5UWikNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfREVQVEhT
VEVOQ0lMOw0KKyAgICB9DQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9BTkdMRSkpKQ0KKyAgICB7DQorICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQ7DQorICAgIH0NCisgICAgcmV0dXJuIGQzZHVzYWdlOw0KK30NCisNCitJ
bWFnZTo6SW1hZ2UoKQ0KK3sNCisgICAgbVdpZHRoID0gMDsgDQorICAgIG1IZWlnaHQgPSAwOw0K
KyAgICBtRm9ybWF0ID0gR0xfTk9ORTsNCisgICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOw0K
Kw0KKyAgICBtU3VyZmFjZSA9IE5VTEw7DQorDQorICAgIG1EaXJ0eSA9IGZhbHNlOw0KKw0KKyAg
ICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBtRDNERm9ybWF0ID0gRDNERk1U
X1VOS05PV047DQorfQ0KKw0KK0ltYWdlOjp+SW1hZ2UoKQ0KK3sNCisgICAgaWYgKG1TdXJmYWNl
KQ0KKyAgICB7DQorICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorfQ0KKw0K
K2Jvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpDQorew0KKyAgICBpZiAo
bVdpZHRoICE9IHdpZHRoIHx8DQorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fA0KKyAgICAg
ICAgbUZvcm1hdCAhPSBmb3JtYXQgfHwNCisgICAgICAgIG1UeXBlICE9IHR5cGUgfHwNCisgICAg
ICAgIGZvcmNlUmVsZWFzZSkNCisgICAgew0KKyAgICAgICAgbVdpZHRoID0gd2lkdGg7DQorICAg
ICAgICBtSGVpZ2h0ID0gaGVpZ2h0Ow0KKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsNCisgICAg
ICAgIG1UeXBlID0gdHlwZTsNCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhh
dCB3aWxsIGJlIHVzZWQNCisgICAgICAgIG1EM0RGb3JtYXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1h
dFR5cGUobUZvcm1hdCwgbVR5cGUpOw0KKw0KKyAgICAgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgbVN1
cmZhY2UgPSBOVUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCit2b2lkIEltYWdlOjpjcmVhdGVTdXJm
YWNlKCkNCit7DQorICAgIGlmKG1TdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQor
ICAgIH0NCisNCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOw0KKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7DQorICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07DQorICAgIGNvbnN0IEQzREZPUk1BVCBk
M2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsNCisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RG
TVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMN
CisNCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkNCisgICAgew0KKyAgICAg
ICAgaW50IGxldmVsVG9GZXRjaCA9IDA7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9
IG1XaWR0aDsNCisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7DQorICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9IDAgfHwgbUhl
aWdodCAlIDQgIT0gMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCBpc011bHQ0ID0g
ZmFsc2U7DQorICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOw0KKyAgICAgICAgICAg
IHdoaWxlICghaXNNdWx0NCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJlcXVl
c3RXaWR0aCA8PD0gMTsNCisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsNCisg
ICAgICAgICAgICAgICAgdXBzYW1wbGVDb3VudCsrOw0KKyAgICAgICAgICAgICAgICBpZiAocmVx
dWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApDQorICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOw0KKyAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVw
c2FtcGxlQ291bnQ7DQorICAgICAgICB9DQorDQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdl
dERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2
ZWxUb0ZldGNoICsgMSwgTlVMTCwgZDNkRm9ybWF0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxM
KTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZh
Y2UgZmFpbGVkLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChs
ZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsNCisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2Uo
KTsNCisgICAgfQ0KKw0KKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7DQorICAgIG1EaXJ0eSA9
IGZhbHNlOw0KKyAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsNCit9DQorDQorSFJFU1VMVCBJbWFn
ZTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkNCit7
DQorICAgIGNyZWF0ZVN1cmZhY2UoKTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJf
SU5WQUxJRENBTEw7DQorDQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgcmVz
dWx0ID0gbVN1cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOw0KKyAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgICAgIG1EaXJ0eSA9IHRydWU7DQor
ICAgIH0NCisNCisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQordm9pZCBJbWFnZTo6dW5sb2Nr
KCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsNCisgICAgfQ0KK30NCisNCitib29sIEltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQo
KSBjb25zdA0KK3sgICAgDQorICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdl
dEQzREZvcm1hdCgpKTsNCit9DQorDQorRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBj
b25zdA0KK3sNCisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhh
c24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdA0KKyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBi
eSB0aGUgY2FsbGVyDQorICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsN
CisNCisgICAgcmV0dXJuIG1EM0RGb3JtYXQ7DQorfQ0KKw0KK0lEaXJlY3QzRFN1cmZhY2U5ICpJ
bWFnZTo6Z2V0U3VyZmFjZSgpDQorew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIHJl
dHVybiBtU3VyZmFjZTsNCit9DQorDQordm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsN
CisgICAgICAgIEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEws
IG1TdXJmYWNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAgICAgICAgbVN1
cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsN
CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7DQorICAgIEFTU0VSVChkZXNjLlBvb2wgPT0g
RDNEUE9PTF9NQU5BR0VEKTsNCisNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAgICBtRDNE
UG9vbCA9IGRlc2MuUG9vbDsNCit9DQorDQordm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7DQorDQorICAgIGlmIChzb3VyY2VTdXJm
YWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIFJF
Q1QgcmVjdDsNCisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7DQorICAgICAgICByZWN0LnRv
cCA9IHlvZmZzZXQ7DQorICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOw0KKyAg
ICAgICAgcmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0Ow0KKw0KKyAgICAgICAgaWYgKG1E
M0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxM
LCAmcmVjdCwgc291cmNlU3VyZmFjZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7
DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgICAgIH0NCisg
ICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBz
b3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIA0KKyAg
ICAgICAgICAgIFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9Ow0KKyAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3Vy
ZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOw0KKyAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gU3RvcmUg
dGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxo
ZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0DQorLy8gaW50
byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4NCit2b2lkIEltYWdlOjpsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIHR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkNCit7DQorICAgIFJFQ1QgbG9ja1JlY3QgPQ0KKyAgICB7DQor
ICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zm
c2V0ICsgaGVpZ2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsNCisg
ICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQorICAgIGlmIChG
QUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAg
IEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50KTsNCisNCisgICAgc3dpdGNoICh0eXBlKQ0KKyAgICB7DQorICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOg0KKyAgICAgICAgc3dpdGNoIChtRm9ybWF0KQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0
c1NTRTIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGFT
U0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOg0KKyAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1U
X0w4KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZv
cm1hdCgpID09IEQzREZNVF9BOEw4KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
Y2FzZSBHTF9SR0I6DQorICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgaWYg
KHN1cHBvcnRzU1NFMigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbG9hZFJH
QkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdM
X0JHUkFfRVhUOg0KKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToNCisg
ICAgICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9S
R0I6DQorICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoNCisgICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JB
Og0KKyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToNCisgICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JB
Og0KKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfRkxPQVQ6DQorICAgICAgICBzd2l0Y2ggKG1Gb3Jt
YXQpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0
ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRA0K
KyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOg0KKyAgICAgICAg
ICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCQToNCisg
ICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoNCisgICAgICAgIHN3aXRjaCAo
bUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNv
bnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4g
RDNEDQorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6DQorICAgICAgICAgICAgbG9hZEFscGhhSGFs
ZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
Ow0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAg
IGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAg
ICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7DQorICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6Omxv
YWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQor
ICAgIA0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAg
ICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0KKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNl
W3hdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURh
dGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBj
aGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAg
ICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsNCisNCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0K
KyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKw0KKyAgICAg
ICAgaW50IHg7DQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZA0KKyAgICAg
ICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAw
eEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRl
c3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAg
ICAgICB9DQorDQorICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChy
ZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7DQorICAgICAgICAg
ICAgLy8gSW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5dGUg
dG8gemVybw0KKyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJv
V2lkZSwgc291cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0
IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvDQorICAgICAgICAgICAgX19t
MTI4aSBsbyA9IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQorICAg
ICAgICAgICAgX19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNl
RGF0YSk7DQorDQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8
X19tMTI4aSo+KCZkZXN0W3hdKSwgbG8pOw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChy
ZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7DQorICAgICAgICB9
DQorDQorICAgICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcg0KKyAgICAgICAgZm9yICg7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9DQorICAgIH0N
Cit9DQorDQordm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdA0KK3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0
ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykN
CisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSBzb3VyY2VbeF07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFn
ZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQor
ew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWdu
ZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAw
Ow0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsNCisgICAgICAgIH0N
CisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorDQorICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JB
OCBkZXN0aW5hdGlvbiBmb3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3hdOw0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBm
b3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0
aCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IDEuMGY7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QN
Cit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNp
Z25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
DQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZi
aXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsN
CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaDsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdS
QTggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlWzIqeCsxXTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNl
DQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAy
KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIq
eCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOw0KKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAgICAgICB9DQor
ICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3Qg
PSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7
DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0K
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNv
dXJjZVsyKngrMV07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9h
ZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVM
TDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVt4ICogMyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4
ICogMyArIDBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
Ow0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAy
KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+IDMp
IHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQorICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCit2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QN
Cit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9
IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsN
CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlW3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3ggKiAzICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsNCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisN
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAw
eDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBm
bHB0IHJlcHJlc2VudGF0aW9uIG9mIDENCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lk
IEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2ln
bmVkIGludCAqZGVzdCA9IE5VTEw7DQorICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBp
MzIoMHgwMGZmMDBmZik7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
KTsNCisgICAgICAgIGludCB4ID0gMDsNCisNCisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRl
cyBhbGlnbmVkDQorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KCZkZXN0W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsN
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAg
ICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZm
MDBmZjAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4
ICs9IDQpDQorICAgICAgICB7DQorICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21t
X2xvYWR1X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0p
KTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UN
CisgICAgICAgICAgICBfX20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJN
YXNrLCBzb3VyY2VEYXRhKTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByDQorICAg
ICAgICAgICAgX19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEs
IGJyTWFzayk7DQorICAgICAgICAgICAgLy8gU3dhcCBiIGFuZCByDQorICAgICAgICAgICAgX19t
MTI4aSBiclN3YXBwZWQgPSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYo
YnJDb21wb25lbnRzLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMs
IDAsIDEpKTsNCisgICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNv
bXBvbmVudHMsIGJyU3dhcHBlZCk7DQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50
ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0KTsNCisgICAgICAgIH0NCisN
CisgICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzDQorICAgICAgICBmb3IgKDsgeCA8
IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEg
PSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAw
eDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsNCisgICAgdW5z
aWduZWQgaW50ICpkZXN0ID0gTlVMTDsNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOw0KKyAg
ICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdi
YSAmIDB4ZmYwMGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6
OmxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7
DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291
cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkg
PDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAo
KHJnYmEgJiAweEYwMDApID4+IDEyKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAo
KHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsNCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBO
VUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+
PiAzKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+
IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7
DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2Ug
PSBOVUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7DQorICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsNCisgICAg
fQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsNCisg
ICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAg
ICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7DQorICAgIH0NCit9DQorDQordm9p
ZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICppbnB1dCkgew0KKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0g
MCk7DQorICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsNCisNCisgICAgUkVDVCBsb2NrUmVj
dCA9IHsNCisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsDQorICAgICAgICB4b2Zmc2V0ICsgd2lk
dGgsIHlvZmZzZXQgKyBoZWlnaHQNCisgICAgfTsNCisNCisgICAgRDNETE9DS0VEX1JFQ1QgbG9j
a2VkOw0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsNCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0N
CisNCisgICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgs
IGhlaWdodCwgbUZvcm1hdCk7DQorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21w
cmVzc2VkUGl0Y2god2lkdGgsIG1Gb3JtYXQpOw0KKyAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAv
IGlucHV0UGl0Y2g7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQ0KKyAgICB7
DQorICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tl
ZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBp
dGNoKTsNCisgICAgfQ0KKw0KKyAgICB1bmxvY2soKTsNCit9DQorDQorLy8gVGhpcyBpbXBsZW1l
bnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4
dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzDQordm9pZCBJbWFnZTo6Y29weShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkNCit7
DQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7DQorICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjcmlwdGlvbjsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlv
bik7DQorICAgIA0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVu
UGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2Ny
aXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJUYXJnZXREYXRhLCBOVUxM
KTsNCisNCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQg
PSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXRE
YXRhKTsNCisNCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIo
IkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisgICAgICAgIHJl
bmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCAr
IHdpZHRoLCB5ICsgaGVpZ2h0fTsNCisgICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zm
c2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9Ow0KKw0KKyAgICBpZiAoaXNS
ZW5kZXJhYmxlRm9ybWF0KCkpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3Vy
ZmFjZUZyb21TdXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRlc3RSZWN0LCByZW5kZXJUYXJn
ZXREYXRhLCBOVUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAg
IA0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOw0KKyAgICAgICAg
ICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAg
ICB7DQorICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9Ow0KKyAgICAgICAg
cmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VS
ZWN0LCAwKTsNCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFu
Z2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlJlbGVhc2UoKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
DQorICAgICAgICB9DQorDQorICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsN
CisgICAgICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOw0KKyAgICAgICAg
DQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAg
RVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1p
Z2h0IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9j
a1JlY3QoKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIq
KXNvdXJjZUxvY2sucEJpdHM7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1
bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0czsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKGRl
c2NyaXB0aW9uLkZvcm1hdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAg
ICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisgICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykN
CisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAg
ICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3gg
KiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107DQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VM
b2NrLlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0
Y2g7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAgICAgc3dpdGNo
KGdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9
IHNvdXJjZVt4ICogMiArIDFdICYgMHhGODsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFt4XSA9IHJlZCB8IChyZWQgPj4gNSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0K
Kw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9y
bWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9MODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3gg
KiAyICsgMV0gJiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0g
KHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291
cmNlW3ggKiAyICsgMV0gPj4gNzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVs
dDoNCisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICB9DQorDQorICAgICAgICB1bmxvY2soKTsNCisgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlVubG9ja1JlY3QoKTsNCisgICAgfQ0KKw0KKyAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7DQorDQorICAgIG1EaXJ0eSA9IHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlOjpUZXh0
dXJlU3RvcmFnZShEV09SRCB1c2FnZSkNCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLA0KKyAgICAg
IG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwNCisgICAgICBt
VGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkNCit7DQorfQ0KKw0KK1RleHR1cmVT
dG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQ0KK3sNCit9DQorDQorYm9vbCBUZXh0dXJlU3RvcmFn
ZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAo
RDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsNCit9
DQorDQorYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsNCit9DQorDQorRDNEUE9PTCBUZXh0
dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQzRFBvb2w7DQor
fQ0KKw0KK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbUQzRFVzYWdlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omdl
dFRleHR1cmVTZXJpYWwoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOw0K
K30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgp
DQorew0KKyAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7DQorfQ0KKw0KK1RleHR1
cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQ0KK3sNCisgICAgbU1p
bkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsNCisgICAgbU1hZ0ZpbHRlciA9IEdM
X0xJTkVBUjsNCisgICAgbVdyYXBTID0gR0xfUkVQRUFUOw0KKyAgICBtV3JhcFQgPSBHTF9SRVBF
QVQ7DQorICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICBtVXNhZ2UgPSBHTF9OT05F
Ow0KKyAgICANCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisNCisgICAgbUltbXV0YWJsZSA9
IGZhbHNlOw0KK30NCisNCitUZXh0dXJlOjp+VGV4dHVyZSgpDQorew0KK30NCisNCisvLyBSZXR1
cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBh
cmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQ0KK3sN
CisgICAgc3dpdGNoIChmaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJFU1Q6DQor
ICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9M
SU5FQVI6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVy
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsN
CisgICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgfQ0KKyAgICAgIGRlZmF1bHQ6
DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCit9DQorDQorLy8gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
DQorYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7DQorICAgIHN3
aXRjaCAoZmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNh
c2UgR0xfTElORUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9
IGZpbHRlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBm
aWx0ZXI7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFt
ZXRlcikNCitib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQ0KK3sNCisgICAgc3dp
dGNoICh3cmFwKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6DQorICAgICAgY2FzZSBH
TF9DTEFNUF9UT19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOg0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBh
cmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0K
KyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUg
dXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdM
ZW51bSB3cmFwKQ0KK3sNCisgICAgc3dpdGNoICh3cmFwKQ0KKyAgICB7DQorICAgICAgY2FzZSBH
TF9SRVBFQVQ6DQorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOg0KKyAgICAgIGNhc2UgR0xf
TUlSUk9SRURfUkVQRUFUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtV3JhcFQgIT0g
d3JhcCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7DQor
ICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQor
Ym9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpDQorew0KKyAgICBzd2l0Y2ggKHVz
YWdlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9OT05FOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9BTkdMRToNCisgICAgICAgIG1Vc2FnZSA9IHVzYWdlOw0KKyAgICAg
ICAgcmV0dXJuIHRydWU7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgfQ0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtTWluRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWFn
RmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWFnRmlsdGVyOw0KK30NCisNCitHTGVu
dW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1XcmFwUzsNCit9
DQorDQorR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
V3JhcFQ7DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbVVzYWdlOw0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0KKyAg
ICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSgw
LCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlw
ZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7DQor
ICAgIGlmIChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBw
aXhlbHMpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCiti
b29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7
DQorICAgIGlmIChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisg
ICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgcGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4
dHVyZTo6Z2V0VGV4dHVyZSgpDQorew0KKyAgICBpZiAoIWlzU2FtcGxlckNvbXBsZXRlKCkpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIC8vIGVuc3VyZSB0
aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UoZmFs
c2UpID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQor
ICAgIHVwZGF0ZVRleHR1cmUoKTsNCisNCisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7DQor
fQ0KKw0KK2Jvb2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtRGlydHlQYXJhbWV0ZXJzOw0KK30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5
SW1hZ2VzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtRGlydHlJbWFnZXM7DQorfQ0KKw0KK3Zv
aWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpDQorew0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFs
c2U7DQorICAgIG1EaXJ0eUltYWdlcyA9IGZhbHNlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4
dHVyZTo6Z2V0VGV4dHVyZVNlcmlhbCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVy
ZSA9IGdldFN0b3JhZ2UoZmFsc2UpOw0KKyAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdl
dFRleHR1cmVTZXJpYWwoKSA6IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIFRleHR1cmVTdG9yYWdl
ICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsNCisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0
dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7DQorfQ0KKw0KK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1JbW11dGFibGU7DQor
fQ0KKw0KK0dMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KSBjb25zdA0KK3sNCisgICAgaWYgKChpc1BvdzIod2lkdGgpICYmIGlzUG93Miho
ZWlnaHQpKSB8fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMNCisg
ICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgd2l0aG91
dCBHTF9PRVNfdGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9UIG1pcG1hcHMuDQorICAg
ICAgICByZXR1cm4gMTsNCisgICAgfQ0KK30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUpIGNvbnN0DQorew0KKyAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMo
c2l6ZSwgc2l6ZSk7DQorfQ0KKw0KK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QNCit7
DQorICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2
ZWxDb3VudCgpIDogMDsNCit9DQorDQorQmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpDQorew0K
KyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOw0KKyAgICByZXR1cm4gY29udGV4
dC0+Z2V0QmxpdHRlcigpOw0KK30NCisNCitib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdl
dChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9v
bCBmcm9tTWFuYWdlZCkNCit7DQorICAgIGlmIChzb3VyY2UgJiYgZGVzdCkNCisgICAgew0KKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQ7DQorDQorICAgICAgICBpZiAoZnJvbU1hbmFnZWQpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2Uo
ZGVzdCwgTlVMTCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDAp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsNCisgICAgICAgICAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgICAgICAg
ICBkaXNwbGF5LT5lbmRTY2VuZSgpOw0KKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3Ry
ZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
IH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2Uy
RDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDog
VGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlh
bChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRleHR1cmUg
PSBzdXJmYWNlVGV4dHVyZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQ0KKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdl
dFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRl
eHR1cmUgPSBOVUxMOw0KKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3Np
dGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQ0KKyAg
ICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVh
dGlvbg0KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApDQorICAgIHsNCisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBn
ZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsNCisNCisgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsNCisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0N
CisgICAgfQ0KK30NCisNCitUZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCgpDQor
ew0KKyAgICBpZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7DQorICAgIH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3Qz
RFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQ0K
K3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBpZiAo
bVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbChsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsNCit9DQorDQorSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QN
Cit7DQorICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK30NCisNCitUZXh0dXJlMkQ6
OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkNCit7DQorICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsNCisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBtQ29sb3JidWZmZXJQcm94eSA9
IE5VTEw7DQorICAgIG1Qcm94eVJlZnMgPSAwOw0KK30NCisNCitUZXh0dXJlMkQ6On5UZXh0dXJl
MkQoKQ0KK3sNCisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOw0KKw0KKyAgICBkZWxldGUg
bVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsNCisgICAgDQorICAgIGlmICht
U3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxM
KTsNCisgICAgICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgfQ0KK30NCisNCisvLyBXZSBuZWVk
IHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGlu
ZyBhcyANCisvLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0
dGVtcHQgdG8gdXNlIGEgcG9pbnRlciANCisvLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGlj
aCBoYXMgYmVlbiBkZWxldGVkLg0KK3ZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sNCisgICAgbVByb3h5UmVmcysrOw0KK30NCisNCit2b2lk
IFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpDQorew0K
KyAgICBpZiAobVByb3h5UmVmcyA+IDApDQorICAgICAgICBtUHJveHlSZWZzLS07DQorDQorICAg
IGlmIChtUHJveHlSZWZzID09IDApDQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7
DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gR0xfVEVYVFVSRV8yRDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRo
KEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xzaXpl
aSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJl
dHVybiAwOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGlu
dCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9y
bWF0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiBHTF9OT05FOw0KK30NCisNCitEM0RG
T1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAg
ICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOw0KKyAgICBlbHNlDQor
ICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpy
ZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpDQorew0KKyAgICByZWxlYXNlVGV4SW1hZ2UoKTsN
CisNCisgICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFn
ZSAmJiByZWRlZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9DQorDQorICAgICAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJE
OjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgdHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6
OmJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICByZWxlYXNlVGV4
SW1hZ2UoKTsNCisNCisgICAgR0xlbnVtIGZvcm1hdDsNCisNCisgICAgc3dpdGNoKHN1cmZhY2Ut
PmdldEZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAg
ICAgICBmb3JtYXQgPSBHTF9SR0JBOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6DQorICAgICAgICBmb3JtYXQgPSBHTF9SR0I7DQorICAgICAgICBicmVhazsN
CisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOw0KKyAgICAgICAgcmV0
dXJuOw0KKyAgICB9DQorDQorICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwgc3Vy
ZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZVEUs
IHRydWUpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsNCisN
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAg
ICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOw0KK30NCisNCit2b2lkIFRleHR1cmUy
RDo6cmVsZWFzZVRleEltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAg
ICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAgICAgIG1TdXJmYWNl
ID0gTlVMTDsNCisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICAgICAgbVRleFN0b3JhZ2UgPSBO
VUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtpXS5yZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRF
LCB0cnVlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c2V0
Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xf
VU5TSUdORURfQllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFn
ZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIEFTU0VSVChtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOw0KKw0KKyAgICBpZiAobGV2ZWwgPCBs
ZXZlbENvdW50KCkpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2
ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisgICAgICAgIGlm
IChkZXN0TGV2ZWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1J
bWFnZUFycmF5W2xldmVsXTsNCisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0
TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgICAg
IGRlc3RMZXZlbC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsN
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1h
Z2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAg
IGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAg
ICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbbGV2ZWxdKSkNCisgICAgew0KKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJl
MkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQor
ew0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5k
ZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQor
ICAgDQorICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0K
KyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsN
CisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwg
IW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7DQorDQorICAgICAgICBpZiAod2lkdGgg
IT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5s
ZWZ0ID0geDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IHkgKyBoZWlnaHQ7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisN
CisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwg
MCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sN
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsNCisgICAgfQ0K
Kw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5k
ZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIGlmICghbUlt
YWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYg
IWlzU2FtcGxlckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uY29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJn
ZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBlbHNlDQor
ICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdl
dCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICB1cGRhdGVUZXh0dXJlKCk7DQor
DQorICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7
DQorICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisgICAgICAgICAg
ICBzb3VyY2VSZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5
ICsgaGVpZ2h0Ow0KKw0KKw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYg
KGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNv
cHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwg
eG9mZnNldCwgeW9mZnNldCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2Uo
KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFy
Z2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQ0KK3sNCisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFs
Zm9ybWF0KTsNCisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3Jt
YXQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZv
cm1hdCwgdHlwZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHdpZHRoLCBoZWlnaHQpOw0KKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsNCisNCisgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwg
dHJ1ZSk7DQorICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOw0KKyAgICAg
ICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOw0KKyAgICB9DQorDQorICAgIGZv
ciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUzsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJl
ZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICB9DQor
DQorICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7
IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZl
bCk7DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1
cmZhY2UpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFRlc3RzIGZvciAyRCB0ZXh0
dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44
LjIgcGFnZSA4NS4NCitib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdA0K
K3sNCisgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQorDQorICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFs
c2U7DQorICAgIH0NCisNCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7DQorDQorICAgIHN3
aXRjaCAobU1pbkZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoNCisgICAg
ICBjYXNlIEdMX0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsNCisgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBj
YXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQ
TUFQX0xJTkVBUjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOg0KKyAgICAg
ICAgbWlwbWFwcGluZyA9IHRydWU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkg
PT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVy
KCkpIHx8DQorICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9P
RVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0KKyAg
ICB7DQorICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVy
ICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQor
ICAgIH0NCisNCisgICAgYm9vbCBucG90U3VwcG9ydCA9IGdldENvbnRleHQoKS0+c3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlKCk7DQorDQorICAgIGlmICghbnBvdFN1cHBvcnQpDQorICAgIHsNCisg
ICAgICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lk
dGgpKSB8fA0KKyAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYg
IWlzUG93MihoZWlnaHQpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1pcG1hcHBpbmcpDQorICAgIHsNCisg
ICAgICAgIGlmICghbnBvdFN1cHBvcnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFp
c1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQor
ICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7
DQorfQ0KKw0KKy8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuDQorYm9vbCBUZXh0dXJl
MkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAgaWYgKGlzSW1tdXRhYmxlKCkp
DQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkg
d2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9
IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQor
ICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7DQorDQorICAgIGZvciAo
aW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9
DQorDQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VB
cnJheVswXS5nZXRUeXBlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0
aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUltYWdlQXJy
YXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNDb21wcmVz
c2VkKEdMaW50IGxldmVsKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJ
bnRlcm5hbEZvcm1hdChsZXZlbCkpOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChH
TGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1
cmUyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdl
ID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisNCisvLyBDb25z
dHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1h
Z2VzDQordm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSB3
aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkgaGVpZ2h0ID0g
bUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQorICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9u
TGV2ZWxzKHdpZHRoLCBoZWlnaHQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJy
YXlbMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsN
CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwg
ZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICANCisgICAgaWYgKG1UZXhTdG9yYWdlLT5p
c01hbmFnZWQoKSkNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsN
CisNCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKysp
DQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisgICAgICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6
OnVwZGF0ZVRleHR1cmUoKQ0KK3sNCisgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisN
CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAg
ew0KKyAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsNCisNCisgICAg
ICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbW1p
dFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0
b3JhZ2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7DQorDQorICAgIGlmIChtSW1hZ2VBcnJheVsw
XS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkNCisg
ICAgew0KKyAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7
DQorICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0K
KyAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7DQor
ICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7
DQorICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lk
dGgsIGhlaWdodCk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdl
dFN1cmZhY2VMZXZlbChpKTsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QgPSBuZXdUZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorDQorICAgICAgICAgICAg
ICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKSkNCisgICAgICAgICAgICAgICAgeyAgIA0KKyAgICAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3VGV4U3RvcmFnZTsNCisgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291
cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxl
YXNlKCk7DQorICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBz
b3VyY2UtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVh
c2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7DQorDQorICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1p
cG1hcHMoKQ0KK3sNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRX
aWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2gg
cSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxz
Lg0KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0
V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsNCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICB7DQorICAgICAgICByZWRlZmluZUltYWdl
KGksIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCANCisgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4g
aSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5cGUo
KSk7DQorICAgIH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpIC0gMSk7DQorICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZl
bChpKTsNCisNCisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxM
KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0
ZXIodXBwZXIsIGxvd2VyKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHVw
cGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgaWYgKGxvd2VyICE9
IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
bWFya0NsZWFuKCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQor
ICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2Fk
U3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVM
TCwgbUltYWdlQXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxU
RVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIiBmYWls
ZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOw0KKyAgICAgICAgICAgIH0N
CisNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgIH0N
CisgICAgfQ0KK30NCisNCitSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRl
cmJ1ZmZlciAqKU5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9
PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJi
dWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsNCisg
ICAgfQ0KKw0KKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7DQorfQ0KKw0KKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVY
VFVSRV8yRCk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNy
ZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAg
ICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICAN
CisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQ0KKyAgICBpZiAoaXNE
ZXB0aCgwKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0
dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXREZXB0aFN0
ZW5jaWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCk7DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0
ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKw0KKyAgICAv
LyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRlcHRoIHRleHR1cmUNCisgICAgaWYgKCFpc0Rl
cHRoKDApKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgICByZXR1
cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsNCit9DQorDQorVGV4dHVyZVN0b3Jh
Z2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkNCit7DQorICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpKQ0KKyAgICB7DQorICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK1Rl
eHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQz
REZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkNCisgICAgOiBUZXh0dXJlU3Rv
cmFnZSh1c2FnZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZUN1YmVTZXJpYWxzKCkpDQorew0KKyAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIC8v
IGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFu
IGluY29tcGxldGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBw
aW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAgICBpZiAoc2l6ZSA+IDApDQorICAgIHsN
CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVs
cywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7DQorDQor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3Jh
Z2VDdWJlTWFwKCkNCit7DQorICAgIGlmIChtVGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbVRl
eHR1cmUtPlJlbGVhc2UoKTsNCisgICAgfQ0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1h
cFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkNCit7DQorICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7
DQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShl
czJkeDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOw0KKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
c3VyZmFjZTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1
YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsN
Cit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleCh0YXJnZXQpOw0KK30N
CisNCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRleHR1cmUo
aWQpDQorew0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAg
ICAgICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVDdWJl
TWFwOjp+VGV4dHVyZUN1YmVNYXAoKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBp
KyspDQorICAgIHsNCisgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAgIH0NCisN
CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorfQ0K
Kw0KKy8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRl
cmJ1ZmZlcnMgYWN0aW5nIGFzIA0KKy8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhh
dCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSANCisvLyBwcm94eSByZWZlcmVuY2Vz
IHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sDQorLy8g
d2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCBy
ZWZlcmVuY2luZw0KKy8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4NCit2b2lkIFRleHR1cmVDdWJl
TWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sNCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChtRmFjZVByb3hp
ZXNbaV0gPT0gcHJveHkpDQorICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0rKzsNCisgICAg
fQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAg
ICB7DQorICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApDQorICAgICAgICAgICAgICAg
IG1GYWNlUHJveHlSZWZzW2ldLS07DQorDQorICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZz
W2ldID09IDApDQorICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAg
ICAgICB9DQorICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7DQorfQ0KKw0KK0dM
c2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVts
ZXZlbF0uZ2V0V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0K
K0dMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0
KV1bbGV2ZWxdLmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9
DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNl
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsNCit9DQorDQorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RG
b3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3JtYXQoKTsNCisg
ICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgwLCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQor
fQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldElt
YWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0K
K3sNCisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9
DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1h
Z2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1h
Z2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgVGV4dHVyZTo6c2V0Q29t
cHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KGZh
Y2UpXVtsZXZlbF0pOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb21taXRSZWN0KGlu
dCBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxldmVsIDwgbGV2
ZWxDb3VudCgpKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExldmVs
ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2UsIGxldmVsKTsNCisgICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVM
TCk7DQorDQorICAgICAgICBpZiAoZGVzdExldmVsICE9IE5VTEwpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsNCisgICAg
ICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOw0K
KyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpDQor
ICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQ0KK3sNCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJy
YXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJl
Y3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsNCisgICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSBtYXAgc2FtcGxpbmcgY29t
cGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdlIDg2Lg0KK2Jv
b2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlu
dCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsNCisNCisgICAgYm9vbCBtaXBt
YXBwaW5nOw0KKw0KKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNl
IEdMX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5n
ID0gZmFsc2U7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCkt
PnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFs
Rm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9B
VF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0K
KyAgICB7DQorICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmls
dGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIGlmIChnZXRXcmFwUygp
ICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8
IG1pcG1hcHBpbmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICghbWlwbWFwcGluZykNCisgICAgew0KKyAgICAg
ICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAg
IGlmICghaXNNaXBtYXBDdWJlQ29tcGxldGUoKSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVD
b21wbGV0ZSgpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBUZXN0cyBmb3Ig
Y3ViZSB0ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43
LjEwIHBhZ2UgODEuDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25z
dA0KK3sNCisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgPD0gMCB8fCBtSW1h
Z2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgp
KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0
aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8DQorICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9y
bWF0KCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRUeXBlKCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9
DQorDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdA0K
K3sNCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVl
Ow0KKyAgICB9DQorDQorICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgew0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldFdpZHRoKCk7DQorDQorICAgIGludCBxID0gbG9nMihzaXplKTsNCisNCisg
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAg
IGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAo
bUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXRUeXBlKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVts
ZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29u
c3QNCit7DQorICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0
LCBsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFw
OjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBt
VGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7DQorfQ0KKw0KKy8vIENvbnN0cnVj
dHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMs
IG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSgpDQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRX
aWR0aCgpOw0KKyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsNCisg
ICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOw0K
KyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFs
c2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOw0K
Kw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1
YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVs
KTsNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRT
dXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0K
KyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1
cGRhdGVUZXh0dXJlKCkNCit7DQorICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFj
ZSsrKQ0KKyAgICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAg
IHsNCisgICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
Ow0KKw0KKyAgICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdl
dFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRh
cmdldCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBO
VUxMOw0KKw0KKyAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQ0KKyAg
ICB7DQorICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgp
Ow0KKyAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7DQorICAg
ICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7
DQorICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCBzaXplKTsNCisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorICAgICAgICAgICAg
Zm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAr
IGYsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBu
ZXdUZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggKyBmLCBpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVy
VGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkNCisgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9y
YWdlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNl
KCk7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0K
KyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVz
dC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3Jh
Z2UgPSBuZXdUZXhTdG9yYWdlOw0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisN
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAg
IHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0
eXBlKTsNCisNCisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMs
ICZtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBU
ZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQ0KK3sNCisgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDEpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7DQorICAgIE1F
VEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOw0K
KyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNSk7DQorDQorICAgIHJldHVybiBmYWNlIC0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFw
OjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgYm9vbCBy
ZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRl
ZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorDQorICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7DQorDQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAg
aWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNl
SW5kZXgodGFyZ2V0KTsNCisgICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBpZiAoIW1JbWFn
ZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQor
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8
fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAg
ICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAgICAg
ICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7DQorDQorICAgICAgICBpZiAod2lkdGggPiAwICYm
IGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1Qgc291
cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4Ow0KKyAgICAgICAgICAg
IHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAgICAgc291cmNlUmVjdC50
b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsNCisN
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAgICAgICBpZiAoZGVzdCkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5k
ZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7DQorICAgICAgICAgICAg
ICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0N
CisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7DQorDQor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXpl
KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7DQorICAg
IH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAg
ICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNp
Z25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7DQorDQorICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4
U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpDQorICAgIHsNCisgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
cmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisg
ICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFn
ZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBkYXRlVGV4
dHVyZSgpOw0KKw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0
LmxlZnQgPSB4Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQor
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
Ym90dG9tID0geSArIGhlaWdodDsNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsNCisN
CisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5
WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsNCisgICAgICAgICAg
ICAgICAgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCit9DQorDQordm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHNpemUpDQorew0KKyAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOw0KKyAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRl
cm5hbGZvcm1hdCk7DQorICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1h
dFR5cGUoZm9ybWF0LCB0eXBlKTsNCisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0K
KyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2Rm
bXQsIGQzZHVzYWdlLCBzaXplKTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQorDQorICAgIGZv
ciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgIHsNCisgICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHNpemUs
IHNpemUsIHR5cGUsIHRydWUpOw0KKyAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1heCgxLCBzaXpl
ID4+IDEpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxldmVsID0gbGV2
ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykN
CisgICAgew0KKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5l
KEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAg
ICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBmYWNl
ID0gMDsgZmFjZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwg
bGV2ZWwpOw0KKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFu
YWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpDQorew0KKyAg
ICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFnZXRDb250ZXh0KCkt
PnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzUG93
MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhl
bSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAgICB1bnNpZ25l
ZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7DQorICAgIGZvciAo
dW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3JtYXQoKSwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdl
dFdpZHRoKCkgPj4gaSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgpKTsNCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpDQorICAgIHsNCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAw
OyBmIDwgNjsgZisrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAxOyBpIDw9IHE7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOw0KKyAgICAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZh
Y2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpDQorICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVy
LCBsb3dlcik7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHVw
cGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChsb3dl
ciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS5tYXJrQ2xlYW4oKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsg
ZiA8IDY7IGYrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAo
bUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpDQorICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsN
CisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhM
b2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVM
TCwgTlVMTCwgbUltYWdlQXJyYXlbZl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwg
RDNEWF9GSUxURVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgIEVSUigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1b
aV0ubWFya0RpcnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0K
Kw0KK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KQ0KK3sNCisgICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRl
cmJ1ZmZlciAqKU5VTEwpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFj
ZUluZGV4KHRhcmdldCk7DQorDQorICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkN
CisgICAgew0KKyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihp
ZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7DQorICAg
IH0NCisNCisgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsNCit9DQorDQorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4
dHVyZVRhcmdldCh0YXJnZXQpKTsNCisNCisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZA0KKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICB1cGRhdGVUZXh0dXJl
KCk7DQorICAgIA0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRh
cmdldCwgMCk7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3Rv
cmFnZShib29sIHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJl
bmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQ0KKyAgICB7DQor
ICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjgwZTI4OGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVy
ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5o
CkBAIC0xLDQzMyArMSw0MjcgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDog
RGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVu
dHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJf
VEVYVFVSRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVj
dG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNs
dWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21t
b24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBG
cmFtZWJ1ZmZlcjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhl
IGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFy
ZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUgcXVlcmll
ZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9
IDE2Mzg0LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAx
NjM4NCwKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8g
MStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0gIHB1Ymxp
YzoKLSAgICBJbWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZShHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJv
b2wgZm9yY2VSZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30K
LSAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBIUkVTVUxUIGxv
Y2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwotICAgIHZv
aWQgdW5sb2NrKCk7Ci0KLSAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAg
IEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
KSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7
cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1G
b3JtYXQ7fQotICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAg
Ym9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJm
YWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2Uo
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0KLSAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsK
LSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQlVCeXRl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdC
QUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJHUkFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQg
bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotCi0gICAg
dm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFn
ZSk7Ci0KLSAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIEdMc2l6ZWkgbVdpZHRoOwot
ICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGVudW0gbUZvcm1hdDsKLSAgICBHTGVudW0gbVR5
cGU7Ci0KLSAgICBib29sIG1EaXJ0eTsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2Fu
IG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5l
ZWRzIHRvIGJlIGxvY2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UKLXsK
LSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0
KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7Ci0KLSAgICBib29sIGlzUmVuZGVy
VGFyZ2V0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICBEM0RQT09M
IGdldFBvb2woKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVu
dW0gdGFyZ2V0KSBjb25zdCA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UpOwotCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0
OwotICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bVRleHR1cmVTZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVRleHR1cmVTZXJp
YWwoKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOwot
fTsKLQotY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVy
ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpID0gMDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0
ID0gMDsKLQotICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wg
c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdy
YXApOwotICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0VXNhZ2Uo
R0xlbnVtIHVzYWdlKTsKLQotICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKLSAgICBH
TGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7
Ci0gICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFVzYWdlKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNv
bnN0ID0gMDsKLQotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwotICAg
IHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgYm9vbCBoYXNEaXJ0
eVBhcmFtZXRlcnMoKSBjb25zdDsKLSAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7Ci0g
ICAgdm9pZCByZXNldERpcnR5KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwo
KTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQp
OwotCi0gICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IEdM
dWludCBJTkNPTVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAv
LyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBp
cyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291
cmNlIG1hbmFnZXIuCi0KLSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZm
ZXJUZXh0dXJlOwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAg
ICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLQotICAgIEdMaW50IGNy
ZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAgICBH
TGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
ZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9
IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7Ci0KLSAgICBzdGF0
aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdl
dChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9v
bCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBHTGVudW0gbU1h
Z0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAgYm9v
bCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1EaXJ0
eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQotICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3Jh
Z2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRleHR1
cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4
cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJl
KTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VM
ZXZlbChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1
cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5
ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsK
LX07Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlMkQoKTsKLQot
ICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9p
ZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFs
IEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0
aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGlu
dCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBE
M0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOwotICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9p
ZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBzdG9y
YWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
ZXh0dXJlMkQpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3Rv
cmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBj
b25zdDsKLQotICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsKLSAgICB2b2lk
IGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIEltYWdlIG1JbWFnZUFycmF5W0lN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTJE
ICptVGV4U3RvcmFnZTsKLSAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0g
ICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9v
bCByZW5kZXJUYXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7
Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VU
YXJnZXQsIGludCBsZXZlbCk7Ci0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7Ci0KLSAgICBJRGlyZWN0M0RD
dWJlVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5k
ZXJUYXJnZXRTZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0
dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQp
OwotCi0gICAgflRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7
Ci0gICAgCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xl
bnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQo
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVn
WChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9p
ZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3Nl
ZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwot
Ci0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
TGVudW0gdGFyZ2V0KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51
bSBmYWNlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlQ3ViZU1hcCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFz
ZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRl
clRhcmdldChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRT
dG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBj
b25zdDsKLSAgICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJ
bmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJ
bmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFw
ICptVGV4U3RvcmFnZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNv
dW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVj
YXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBh
IGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3Vs
ZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBv
aW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0
byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQg
d2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJi
dWZmZXIgKm1GYWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZz
WzZdOwotfTsKLX0KLQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUN
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gVGV4dHVyZS5oOiBE
ZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRl
cml2ZWQNCisvLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVu
dHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZA0KKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2lmbmRlZiBMSUJHTEVT
VjJfVEVYVFVSRV9IXw0KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8NCisNCisjaW5jbHVk
ZSA8dmVjdG9yPg0KKw0KKyNkZWZpbmUgR0xfQVBJQ0FMTA0KKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4NCisjaW5jbHVkZSA8ZDNkOS5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisj
aW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIg0KKw0KK25h
bWVzcGFjZSBlZ2wNCit7DQorY2xhc3MgU3VyZmFjZTsNCit9DQorDQorbmFtZXNwYWNlIGdsDQor
ew0KK2NsYXNzIEJsaXQ7DQorY2xhc3MgRnJhbWVidWZmZXI7DQorDQorZW51bQ0KK3sNCisgICAg
Ly8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQN
CisgICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2Fw
cw0KKyAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dA0KKyAgICBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorICAgIElNUExFTUVOVEFU
SU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwNCisNCisgICAgSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVf
U0laRQ0KK307DQorDQorY2xhc3MgSW1hZ2UNCit7DQorICBwdWJsaWM6DQorICAgIEltYWdlKCk7
DQorICAgIH5JbWFnZSgpOw0KKw0KKyAgICBib29sIHJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVh
c2UpOw0KKyAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30NCisgICAgdm9pZCBt
YXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQ0KKw0KKyAgICBib29sIGlzUmVuZGVyYWJsZUZv
cm1hdCgpIGNvbnN0Ow0KKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7DQorDQor
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9DQorICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtSGVpZ2h0O30NCisgICAgR0xlbnVtIGdldEZv
cm1hdCgpIGNvbnN0IHtyZXR1cm4gbUZvcm1hdDt9DQorICAgIEdMZW51bSBnZXRUeXBlKCkgY29u
c3Qge3JldHVybiBtVHlwZTt9DQorICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1
cmZhY2UgJiYgbURpcnR5O30NCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsN
CisNCisgICAgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSk7DQorICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Ow0KKw0KKyAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwNCisgICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsNCisNCisgICAg
dm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhh
RGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZURh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1p
bmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2Fk
THVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisg
ICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBu
YXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2
b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2Fk
UkdCNTY1RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
Ow0KKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAg
ICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQor
ICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmlucHV0KTsNCisNCisgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihJbWFnZSk7DQorDQorICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOw0K
Kw0KKyAgICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJF
Q1QgKnJlY3QpOw0KKyAgICB2b2lkIHVubG9jaygpOw0KKw0KKyAgICBHTHNpemVpIG1XaWR0aDsN
CisgICAgR0xzaXplaSBtSGVpZ2h0Ow0KKyAgICBHTGVudW0gbUZvcm1hdDsNCisgICAgR0xlbnVt
IG1UeXBlOw0KKw0KKyAgICBib29sIG1EaXJ0eTsNCisNCisgICAgRDNEUE9PTCBtRDNEUG9vbDsg
ICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2lu
Y2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuDQorICAgIEQzREZPUk1BVCBtRDNERm9ybWF0Ow0K
Kw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7DQorfTsNCisNCitjbGFzcyBUZXh0
dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2Uo
RFdPUkQgdXNhZ2UpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOw0KKw0KKyAg
ICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7DQorICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29u
c3Q7DQorICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0Ow0KKyAgICBEV09SRCBnZXRVc2FnZSgp
IGNvbnN0Ow0KKyAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ow0KKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QgPSAwOw0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlKTsNCisNCisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOw0KKyAg
ICBjb25zdCBEM0RQT09MIG1EM0RQb29sOw0KKw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRl
eHR1cmVTZXJpYWw7DQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFs
KCk7DQorDQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOw0K
K307DQorDQorY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdA0KK3sNCisgIHB1
YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOw0KKw0KKyAgICB2aXJ0dWFs
IH5UZXh0dXJlKCk7DQorDQorICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkgPSAwOw0KKw0KKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
YXJnZXQoKSBjb25zdCA9IDA7DQorDQorICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0
ZXIpOw0KKyAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsNCisgICAgYm9vbCBz
ZXRXcmFwUyhHTGVudW0gd3JhcCk7DQorICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOw0K
KyAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7DQorDQorICAgIEdMZW51bSBnZXRNaW5G
aWx0ZXIoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0Ow0KKyAgICBH
TGVudW0gZ2V0V3JhcFMoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7DQor
ICAgIEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoKSBjb25zdCA9IDA7DQorDQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Z2V0VGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpID0gMDsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
cygpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0g
MDsNCisNCisgICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsNCisgICAgYm9vbCBo
YXNEaXJ0eUltYWdlcygpIGNvbnN0Ow0KKyAgICB2b2lkIHJlc2V0RGlydHkoKTsNCisgICAgdW5z
aWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsNCisgICAgdW5zaWduZWQgaW50IGdldFJlbmRl
clRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgYm9vbCBpc0ltbXV0YWJsZSgp
IGNvbnN0Ow0KKw0KKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9J
RCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4g
aWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlz
IG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4NCisNCisgIHByb3Rl
Y3RlZDoNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOw0KKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOw0KKyAgICBi
b29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisNCisgICAgR0xpbnQgY3Jl
YXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0Ow0KKyAgICBH
TGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFs
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7DQorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdl
dCgpID0gMDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpID0gMDsNCisNCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsNCisN
CisgICAgc3RhdGljIEJsaXQgKmdldEJsaXR0ZXIoKTsNCisgICAgc3RhdGljIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsNCisNCisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7DQor
ICAgIEdMZW51bSBtTWFnRmlsdGVyOw0KKyAgICBHTGVudW0gbVdyYXBTOw0KKyAgICBHTGVudW0g
bVdyYXBUOw0KKyAgICBib29sIG1EaXJ0eVBhcmFtZXRlcnM7DQorICAgIEdMZW51bSBtVXNhZ2U7
DQorDQorICAgIGJvb2wgbURpcnR5SW1hZ2VzOw0KKw0KKyAgICBib29sIG1JbW11dGFibGU7DQor
DQorICBwcml2YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7DQor
DQorICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpID0gMDsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVy
ZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQo
SURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsNCisgICAgVGV4dHVyZVN0b3JhZ2Uy
RChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOw0KKw0KKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCk7DQorICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisNCisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNv
bnN0Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmVTdG9yYWdlMkQpOw0KKw0KKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7DQorICAg
IGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3Mg
VGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0
IFRleHR1cmUyRChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZTJEKCk7DQorDQorICAgIHZv
aWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAgIHZvaWQgcmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdDsNCisNCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBs
ZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsN
CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAg
RDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXND
b21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxl
dmVsKSBjb25zdDsNCisNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0Q29tcHJl
c3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAg
IHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lk
IHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2aXJ0dWFsIHZv
aWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7DQorDQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ow0K
KyAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7DQor
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVu
ZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOw0KKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7DQorICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByaXZh
dGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOw0KKw0KKyAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0K
KyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0
KTsNCisNCisgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7DQorDQorICAgIHZvaWQg
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsNCisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlMkQgKm1UZXhTdG9yYWdl
Ow0KKyAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOw0KKw0KKyAgICAvLyBBIHNwZWNpZmljIGlu
dGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZl
cmVuY2VzLA0KKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBw
cm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyDQorICAgIC8vIGJhY2sgdG8gdGhp
cyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2Vk
IGEgYmluZGluZw0KKyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYNCisgICAgLy8gdGhlIGNv
dW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVu
ZGVyYnVmZmVyLg0KKyAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5Ow0KKyAgICB1
bnNpZ25lZCBpbnQgbVByb3h5UmVmczsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgVGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdl
LCBpbnQgc2l6ZSk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOw0K
Kw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VU
YXJnZXQsIGludCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRl
eHR1cmUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7DQorDQorICAgIElE
aXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBt
Rmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6
IHB1YmxpYyBUZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBUZXh0dXJlQ3Vi
ZU1hcChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsNCisNCisgICAgdm9p
ZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisgICAgdm9pZCByZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorDQorICAgIHZpcnR1YWwgR0xl
bnVtIGdldFRhcmdldCgpIGNvbnN0Ow0KKyAgICANCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xlbnVtIGdldEludGVybmFs
Rm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgRDNERk9STUFU
IGdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJv
b2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisNCisg
ICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZv
aWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisNCisgICAgdm9pZCBzZXRD
b21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7DQorDQorICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2
aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOw0K
Kw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsNCisNCisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1
ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgICBzdGF0aWMgdW5z
aWduZWQgaW50IGZhY2VJbmRleChHTGVudW0gZmFjZSk7DQorDQorICBwcm90ZWN0ZWQ6DQorICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsNCisgICAgdmlydHVhbCBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKw0KKyAg
cHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsN
CisNCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3Q7DQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsNCisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJl
bmRlclRhcmdldCk7DQorDQorICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsNCisgICAg
Ym9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lkIHNldEltYWdl
KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7DQorICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlKTsNCisNCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsNCisNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpt
VGV4U3RvcmFnZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291
bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywNCisgICAgLy8gYmVj
YXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBh
IGJpbmRpbmcgcG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291
bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcNCisgICAgLy8g
cG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVy
IHRvIGJlIHNldCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBi
dXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4NCisgICAgUmVu
ZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07DQorICAgIHVuc2lnbmVkIGludCAqbUZhY2VQcm94
eVJlZnNbNl07DQorfTsNCit9DQorDQogI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1
YmMzZmIuLjcwZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBA
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lv
bi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVw
YXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAg
IGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRl
eEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsg
YXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAg
ICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3Jh
bS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFu
c2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50
aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWlu
ZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRh
dGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMK
QEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBl
bmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdM
ZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RW
VF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5
cGU+IHsgfTsKIAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0
IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXpl
LXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJ
WEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQz
RFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBn
bDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZl
cnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9h
dDxHTGludCwgMTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZv
ciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVs
dFZhbHVlcyAoaS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCmluZGV4IGVlOGVjYTkuLmZiYTI1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZm
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhh
dCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQu
Citib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
Cit7CisgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFy
eSBrZXkgYmVsb3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9S
R0JBOgorICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNh
c2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKwor
ICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxp
ZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Cisg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JB
OgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6Cisg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgor
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6
CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
KyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9S
R0JBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAg
ICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
ICAgIH0KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSwgZmFsc2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJv
b2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlm
IChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSkKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQog
ICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5n
ZXRXaWR0aCgwKSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0g
dGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYm
IGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4
NSw0MyBAQCBib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJl
LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChj
b21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAh
PSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAl
IDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0
ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAg
ICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVT
dWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZl
bCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdl
dCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBn
bENvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpA
QCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KCk7CiAgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldElu
dGVybmFsRm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7
CisgICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAg
ICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwg
aGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5
IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0
KGxldmVsKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVT
dWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIEdMX05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXMKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05F
LCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1
YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRl
eHR1cmUgPSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4
dHVyZUZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0
YWJsZSAzLjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiAr
MTU2OCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0
YWNobWVudCwgR0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotCiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFy
Z2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19z
dGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFj
aG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9
IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVf
TUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZl
bCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKQEAgLTI0NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1h
cChHTGVudW0gdGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXgyZC0+aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGds
R2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRp
b24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpA
QCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50
IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBO
VUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJ
REFURV9TVEFUVVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlz
VmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JB
TV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2
LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xp
bmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2
KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwx
MiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3Jh
bSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2Vk
KCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9j
YXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwg
cGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlv
biwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdl
dFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlm
b3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAg
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dy
YW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZv
cm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0K
IAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFy
eSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZf
RkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBl
PiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5W
QUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRp
b24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAg
ICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRf
T0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1
NCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFM
Rl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUw
NDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZv
ciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQs
MjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkK
QEAgLTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQg
IT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVw
dGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdM
RV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBO
VUxMIHx8IGxldmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4
dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAo
bGV2ZWxzICE9IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9U
RVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhl
bHMgPT0gTlVMTCkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwg
dHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
bjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1
MTcsMTEgKzU3ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9y
bWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0
dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlv
ZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZz
ZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0y
ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291
bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEy
MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIs
NyArNjE3NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFu
cwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2
NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0g
IT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9n
cmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQgX19zdGRjYWxsIGds
VGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0CiAgICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9p
ZCAqYmluYXJ5KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXpl
ID0gJXMsIGxlbmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZv
cm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5H
TEU7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5
T0VTKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBi
aW5hcnkgPSAweCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIGJpbmFy
eUZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5V
TEwpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJv
Y0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpA
QCAtNjQ5OSw3ICs2OTI0LDggQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICoKICAgICAgICAgeyJn
bFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKICAgICAgICAgeyJnbERy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdF
bGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgfTsKKyAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CiAKICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXpl
b2YoZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2oKaW5kZXggN2QyYjY0OS4uM2JjODM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpAQCAtNDAxLDYgKzQw
MSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFByb2dyYW1CaW5hcnkuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuXFF1ZXJ5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00OTEsNiArNDk1
LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UHJvZ3JhbUJpbmFyeS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuXFF1ZXJ5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmluZGV4IDdjYTJkOWYuLjdiYjIy
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0
aHV0aWwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1
dGlsLmgKQEAgLTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQg
eCkKICAgICB9CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChHTGludCB4LCBH
TGludCB5LCBHTGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAgIFJF
Q1QgcmVjdCA9IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geSAtIGgsCi0g
ICAgICAgICAgICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0g
eX07Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3JtUGl4ZWxZT2Zm
c2V0KEdMaW50IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQpCi17Ci0gICAg
cmV0dXJuIHN1cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5lIEdMZW51bSBh
ZGp1c3RXaW5kaW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5kaW5nID09IEdM
X0NXIHx8IHdpbmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9PSBHTF9DVyA/
IEdMX0NDVyA6IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQogewogICAg
IHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIxLi5hN2M2MmQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3Jt
YXQpCiAgICAgfQogfQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7Cisg
ICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09
IEdMX0RFUFRIX1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRl
cywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29t
cHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVM6CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNh
c2UgR0xfRkxPQVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMs
NTMgKzM0OCw2IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkK
ICAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRh
cmdldCh0YXJnZXQpOwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9m
IHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1h
dFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82
XzU6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpA
QCAtNDA3LDYgKzM3NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZv
cm1hdCkKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDog
ICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThf
RVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09N
UE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICBy
ZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUzogICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8v
IFVuc3VwcG9ydGVkCiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0
VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9F
WFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRf
T0VTOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfSU5UXzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAg
LTYzOCw5ICs2MTIsNiBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0g
Y3ViZUZhY2UpCiB7CiAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X1BPU0lUSVZFX1g7CiAKLSAgICAvLyBNYXAgYSBjdWJlIG1hcCB0ZXh0dXJlIHRhcmdldCB0byB0
aGUgY29ycmVzcG9uZGluZyAgRDNEIHN1cmZhY2UgaW5kZXguIE5vdGUgdGhhdCB0aGUKLSAgICAv
LyBZIGZhY2VzIGFyZSBzd2FwcGVkIGJlY2F1c2UgdGhlIFkgY29vcmRpbmF0ZSB0byB0aGUgdGV4
dHVyZSBsb29rdXAgaW50cmluc2ljIGZ1bmN0aW9ucwotICAgIC8vIGFyZSBuZWdhdGVkIGluIHRo
ZSBwaXhlbCBzaGFkZXIuCiAgICAgc3dpdGNoIChjdWJlRmFjZSkKICAgICB7CiAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKQEAgLTY1MCwxMCArNjIxLDEwIEBAIEQz
RENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKICAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwogICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
UE9TSVRJVkVfWTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9Z
OworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAg
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKQEAgLTc2Nyw2ICs3MzgsNyBAQCBE
M0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQogewogICAg
IHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAg
ICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICBjYXNl
IEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4g
RDNERk1UX0E4UjhHOEI4OwpAQCAtNzk0LDYgKzc2NiwxMCBAQCBuYW1lc3BhY2UgZHgyZXMKIAog
dW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQogewor
ICAgIGlmIChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQogICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQogICAgIHsKICAgICAgIGNh
c2UgRDNERk1UX0QyNEZTODoKQEAgLTkwNCw2ICs4ODAsMTAgQEAgdW5zaWduZWQgaW50IEdldEJs
dWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKIAogdW5zaWduZWQgaW50IEdldERlcHRoU2l6
ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCiB7CisgICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZN
VF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDI0OworICAgIH0KICAgICBzd2l0Y2ggKGRl
cHRoRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVy
biAxNjsKQEAgLTk2NSw2ICs5NDUsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhUZXh0
dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJldHVybiAoc3VyZmFj
ZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1h
dChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQg
PT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVU
eXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xlbnVtIENvbnZlcnRC
YWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiAKIEdMZW51bSBDb252ZXJ0RGVwdGhT
dGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsK
KyAgICB9CiAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDE2
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVz
LmgKaW5kZXggODgyMzhkYy4uY2YyMjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw2ICsxNiw5IEBACiAKICNpbmNsdWRl
IDxzdHJpbmc+CiAKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShN
QUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVM
TCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwogbmFtZXNw
YWNlIGdsCiB7CiAKQEAgLTM2LDkgKzM5LDkgQEAgR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXpl
aSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkKIEdM
c2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0
KTsKIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQp
OworYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDdWJlbWFwVGV4
dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQo
R0xlbnVtIHRhcmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUpOwogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9y
bWF0KTsKIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogCkBAIC03
OSw2ICs4Miw4IEBAIEdMdWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsK
IEdMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7CiBib29sIElz
RmxvYXQzMkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiBib29sIElzRmxvYXQxNkZv
cm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0
KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChE
M0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNh
bXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCA2ZDNkYTdmLi4zOGUzMmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMxMyw3ICsy
MzEzLDIwIEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERp
c2NvbnRpbnVpdHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTIzMjEs
NiArMjMzNCw3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2lu
dGVybU91dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybVRyYXZlcnNlLmNwcApAQCAtMjMzMywyMiArMjM0Nyw1MiBAQCBJRiAoRU5BQkxFX1dF
QkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VD
b25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Bh
cnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvUHJhZ21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlhZ25vc3RpY3MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNl
ci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5j
dGlvbi5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TZWFy
Y2hTeW1ib2wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9TaGFkZXJMYW5nLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9y
dENpcmN1aXQuaAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dXRpbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg4NDg4OS4uNzM4YTk3
MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA2LTI3ICBNYXggVnVqb3ZpYyAg
PG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBBTkdM
RSB0byByMTE3MC4KKworICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAyMDEyLTA2LTI3ICBLZW50YXJvIEhhcmEgIDxo
YXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtlIEVsZW1lbnQ6OmVsZW1lbnRSYXJl
RGF0YSgpIGFuZCBFbGVtZW50OjplbnN1cmVFbGVtZW50UmFyZURhdGEoKSBwcml2YXRlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNWVjMmVjLi4wODY2MTNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4OTgsOCArNTg5OCwyMSBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVu
aW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2Nv
bnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVj
dFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3RSZWN1cnNpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
aXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCkBAIC01OTEyLDYgKzU5MjUsNyBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKQEAgLTU5MzUsNiArNTk0OSw3IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1BhcnNlSGVscGVyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFn
bWEuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaCBcCkBAIC01OTQ0LDYgKzU5NTksMjkgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2xlbmd0aF9saW1pdHMuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9z
dGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4
cHJlc3Npb25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuYyBcCkBAIC01OTU3LDYgKzU5OTUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAgXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXApAQCAtNTk2
NSw2ICs2MDA0LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JFU1NMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9yR0xTTC5jcHAgXApAQCAtNTk3Miw4ICs2MDE1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDdiOTZiNzYuLjVmMDcyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzk1Niw3
ICszOTU2LDEzIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29tbW9uLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBc
CisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvRGV0ZWN0UmVjdXJzaW9uLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9nbHNsYW5nLmggXApAQCAtMzk3MSwxMSArMzk3NywyNCBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L01NYXAuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvb3Np
bmNsdWRlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ByYWdtYS5o
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRv
bS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y29tcGlsZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW4uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIFwKQEAgLTM5OTAsMTQgKzQw
MDksMTcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1R5cGVzLmggXAot
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5oIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggXAogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKQEAgLTQw
MTAsMTMgKzQwMzIsMjEgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAgXAogICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKKyAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNw
cCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9u
LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3Mu
Y3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5k
bGVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVu
cm9sbC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ190
YWIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9JbmZvU2luay5j
cHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3Bw
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNw
cCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0ludGVy
bWVkaWF0ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2ludGVy
bU91dC5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0ludGVybVRy
YXZlcnNlLmNwcCBcCkBAIC00MDM0LDEwICs0MDY0LDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2Vh
cmNoU3ltYm9sLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hh
ZGVyTGFuZy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNw
cCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
Y3BwIFwKLSAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmNw
cCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxl
SW5mby5jcHAgXApAQCAtNDA0OCw2ICs0MDgwLDE3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9XRUJHTD0xKSB7CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3Bwc3RydWN0LmMgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhh
bmRsZXJCYXNlLmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9MZXhlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgXAogICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwo=
</data>
<flag name="commit-queue"
          id="158149"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150006</attachid>
            <date>2012-06-28 13:54:10 -0700</date>
            <delta_ts>2012-06-28 15:07:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1715608</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmVhM2Q3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Qzgx
NTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdu
b3N0aWNzLmggKi87IH07CisJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
ICovOyB9OworCQlBMjY1NjdFRjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0Ix
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjAx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICov
OyB9OworCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRTE1
OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyNjU2N0Yz
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyog
RXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTI2NTY3RjYx
NTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMzE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCAqLzsg
fTsKKwkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUz
OSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
RDUxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggKi87IH07CisJCUEyNjU2N0Y5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovOyB9Owor
CQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovOyB9OworCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJCUEyNjU2
N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJl
cHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9Owor
CQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMTE1OUMyMUNFMDAzOTg1
MzkgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyNjU2ODA1MTU5QzIxQ0UwMDM5ODUzOSAv
KiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi87
IH07CisJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9r
ZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovOyB9OworCQlBMjY1NjgwQTE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFODE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi87IH07CisJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUz
OSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi87IH07CisJCUEy
NjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkQxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyNjU2ODNBMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLzsgfTsKKwkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLzsgfTsK
KwkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMTE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTI2
NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzIxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9OworCQlBMjY1NjgzRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDAxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzUxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjY1Njg0
MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzYxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI2
NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM3MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJ
CUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4Mzgx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi87IH07CiAJ
CUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhF
NjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5jcHAgKi87IH07CkBAIC02Myw3ICsxMDUsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAg
Ki87IH07CiAJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVB
MDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIz
OUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBT
aGFkZXJMYW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxNDQsNTIgQEAK
IAkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyog
VHJhbnNsYXRvckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNs
YXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QUUxNTlDMjFC
MTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMzE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJl
Y3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I0MTU5
QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJh
Z21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjcxNTlDMjFCMTAwMzk4
NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyog
RGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQjE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0UxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAv
KiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
RXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTAxNTlDMjFD
RTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcmVwcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2Vu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTgxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkExNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJEMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMzE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzNzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MiwxNSArMjQ5LDExIEBACiAJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24u
dmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSB0cmFuc2xhdG9yX2NvbW1vbi52Y3By
b2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnhtbDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IHRy
YW5zbGF0b3JfaGxzbC52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUNG
MTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAxMjAwRjI2MjAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQxMTIw
MEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMjEyMDBGMjYy
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8q
IEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQmFzZVR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2
OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjI0
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5LDggKzMx
Miw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAv
KiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkMxMjAw
RjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RDEyMDBGMzVB
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBAIC0y
NTUsNiArMzM2LDYyIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY1NjdDODE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDOTE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUz
OSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1
MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUz
OSAvKiBJbnB1dC5jcHAgKi8sCisJCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0
LmggKi8sCisJCQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKKwkJ
CQlBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjY1NjdENjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovLAorCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5oICovLAorCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLywKKwkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oICovLAorCQkJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuY3BwICovLAorCQkJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3Iu
aCAqLywKKwkJCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LywKKwkJCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAorCQkJCUEy
NjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovLAorCQkJCUEyNjU2N0U3MTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwICovLAorCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRl
cGdyYXBoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
MjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlB
MjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI2
NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAor
CQkJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
Ki8sCisJCQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgKi8sCisJCQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aE91dHB1dC5oICovLAorCQkJCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8q
IHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
QTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwICovLAorCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggKi8sCisJCQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dGltaW5nOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRkIzOUQwNkUxMjAw
RUQ5MjAwMDg4RTY5ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI2OCw4ICs0MDUsOCBAQAogCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDJCRDEy
MDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFNvdXJjZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yOTIsNiArNDI5LDggQEAKIAkJCQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyog
Q29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1
Zy5jcHAgKi8sCiAJCQkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRlYnVnLmggKi8sCisJ
CQkJQTI2NTY3QUUxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICov
LAorCQkJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8sCiAJCQkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJ
CQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDE5
MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0zMjcsMTUgKzQ2Niwx
MyBAQAogCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJ
CUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIz
OUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJRkIzOUQxQ0Ix
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLywKLQkJCQlGQjM5
RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLywKIAkJCQlG
QjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZC
MzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlE
MUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRkIzOUQx
RDAxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCiAJCQkJRkIzOUQxRDEx
MjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyNjU2N0I3MTU5QzIxQjEwMDM5ODUzOSAvKiBV
bmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKIAkJCSk7CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7
CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcgKzUwNyw2IEBACiAJCUZCMzlEMjIwMTIw
MEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xC
YXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJh
c2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywK
LQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAotCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0J
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
Ci0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAot
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCi0JCQkJ
RkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQlGQjM5RDIy
MTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCiAJCQkJNDk5NTFDMDUxNEI3QUFE
NzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKIAkJCQk0OTk1MUMw
NjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5
MCwxMyArNTE2LDIwIEBACiAJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50
VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICov
LAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUEyNjU2
ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCisJCQkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKIAkJCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyog
Rm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuaCAqLywKKwkJCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFu
Zy5oICovLAogCQkJCTkwRDlCMEZCMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8sCiAJCQkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCAqLywK
IAkJCQk5MEQ5QjBGRDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQk5
MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAogCQkJCUZCMzlEMjJBMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQyMkIxMjAwRjM1QTAw
MDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovLApAQCAtNDA0LDM5ICs1MzcsNTAgQEAKIAkJCQlGQjM5RDIyRTEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJRkIzOUQyMkYxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQlGQjM5RDIzMDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjY1NjdCNDE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzEx
MjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKIAkJCQlGQjM5
RDIzMjEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKIAkJCQlGQjM5RDIz
MzEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCiAJCQkJRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAw
MDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAw
ODhFNjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBG
MkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4
MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIw
MEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zaW5jbHVkZS5oICovLAogCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3Nv
dXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJj
ZV93aW4uY3BwICovLAorCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NM
LmNwcCAqLywKKwkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
LAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJ
CQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFC
RTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJF
MzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0Yx
MjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYz
NUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBv
b2xBbGxvYy5oICovLAorCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAq
LywKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAogCQkJ
CUZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCiAJCQkJ
RkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCiAJCQkJRkIz
OUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJCUZCMzlEMjU5
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTI2NTY3QjYxNTlDMjFC
MTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJOTBEOUIxMDAxMkUxMURDQjAw
MkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJOTBEOUIxMDExMkUxMURDQjAwMkQ0
MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovLAogCQkJCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCAqLywKIAkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hI
YW5kbGUuaCAqLywKIAkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUu
Y3BwICovLAogCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICov
LAorCQkJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8sCisJCQkJQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQlGQjM5RDI2ODEy
MDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlEMjZDMTIwMEYz
NUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuaCAqLywKIAkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5j
cHAgKi8sCiAJCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLywKIAkJCQk5
MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCkBA
IC00NTMsNiArNTk3LDcgQEAKIAkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2
NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLywKIAkJCQlGQjM5RDI0NTEyMDBGMzVBMDAw
ODhFNjkgLyogYXRvbS5jICovLAogCQkJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9t
LmggKi8sCiAJCQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLywKQEAg
LTUwOCw2ICs2NTMsMjggQEAKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQzE0
QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0VEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUEy
NjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODNFMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTg4LDcgKzc1NSw2
IEBACiAJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTAyMTJFMTFEQ0Iw
MDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MEQ5QjEwNDEyRTEx
RENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIx
MDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NjA0LDYgKzc3MCwyNiBAQAogCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5NTFD
MEIxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RUMxNTlDMjFD
RTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1
MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1OUMyMUNFMDAz
OTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgwMzE1
OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njgz
RjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmI2OTQzM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUzIEBACisyMDEyLTA2LTI3ICBNYXggVnVq
b3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2Vi
S2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAgICAgKiBpbmNs
dWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5nbGV1dGlscy5o
OgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdEluRnVuY3Rpb25F
bXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBpbGVyOjpjb21w
aWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6CisgICAgICAgIChU
Q29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVy
OjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAoVENv
bXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaCk6Cisg
ICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNoKToKKyAgICAg
ICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAg
ICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6OkRldGVjdEdy
YWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0R3JhZGllbnRP
cGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0
aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFkaWVudE9wZXJh
dGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaDogQWRk
ZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGludWl0eSk6Cisg
ICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6OlREaWFnbm9z
dGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgorICAgICAgICAo
VERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZURl
YnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGljcyk6CisgICAg
ICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGly
ZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3IpOgorICAgICAg
ICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKFREaXJl
Y3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERpcmVjdGl2ZUhh
bmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQ
cmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbik6Cisg
ICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChURGlyZWN0aXZl
SGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToKKyAgICAgICAg
KFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlvclN0cmluZyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAgICAoQnVpbHRJ
bkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgorICAgICAgICAo
SWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRl
eCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAoSW5pdGlhbGl6
ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0KToKKyAgICAg
ICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRleHRSZWMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVy
bWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoK
KyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpP
dXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6Cisg
ICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVn
YXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAg
IChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0
cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVT
dHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNl
TWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dHJhY2Up
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9w
RXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbnRl
Z2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNr
KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Ym9vbEVy
cm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2spOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5RXJy
b3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJy
b3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbik6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleGVjdXRl
SW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbik6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdEFy
cmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdCk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAgICAgKFRQ
YXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAgKFBhUGFyc2VT
dHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNlQ29udGV4dCk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwcmFnbWEp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAgICAoVEFsbG9j
YXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ByYWdtYS5o
OiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6VFByYWdtYSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJlbmFtZUZ1bmN0
aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZhcmlhYmxlSW5m
byk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKFRU
eXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdCk6
CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJz
ZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6CisgICAg
ICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChz
aDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVuZm9sZFNo
b3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6CisgICAgICAg
IChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3BwOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3lt
Ym9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9w
U3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
Lmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpU
R3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFy
ZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6
CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAg
KFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVu
dCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAg
KFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBo
QXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2Fs
bCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAg
ICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAo
VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAg
ICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1i
b2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAg
ICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2Vs
ZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0
SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBo
TG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2lj
YWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAg
ICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBo
TG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVy
U3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2Fs
bHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6Omlu
Y3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3Jl
bWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlz
aXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxl
Tm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNl
dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9w
U2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpw
b3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVT
ZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6
OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2Rl
U2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01h
aW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAg
ICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3lt
Ym9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2
aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExv
b3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3ApOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5o
OiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDogQWRkZWQu
CisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnRO
b2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVyc2UpOgorICAg
ICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhTeW1i
b2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UpOgorICAg
ICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjp0
cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLnk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAgICAgKHl5X2dl
dF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToKKyAgICAgICAg
KHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGdsc2xhbmdfZmlu
YWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1B
Z2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVm
aW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJbnRlcm1UcmF2
ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvb3NpbmNs
dWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmM6CisgICAg
ICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHByYWdtYSk6Cisg
ICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNybyk6CisgICAg
ICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjp+
RGlhZ25vc3RpY3MpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQpOgorICAgICAg
ICAocHA6OkRpYWdub3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAg
ICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
cHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFkZGVkLgorICAg
ICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25kaXRpb25hbERpcmVjdGl2ZSk6Cisg
ICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxFT0QpOgorICAgICAgICAoaXNNYWNy
b05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJlZGVmaW5lZCk6CisgICAgICAgIChw
cCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2Vy
OjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjpsZXgpOgorICAg
ICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmlu
ZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlm
bmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UpOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYSk6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbik6CisgICAgICAgIChw
cDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnNraXBw
aW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZik6
CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZik6CisgICAg
ICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmg6IEFkZGVk
LgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlUGFyc2VyKToKKyAgICAgICAgKENv
bmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6Q29uZGl0aW9u
YWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwLgor
ICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAgICAoeXll
cnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6RXhw
cmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFyc2UpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
aDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnk6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNw
cDoKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFk
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOgorICAg
ICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6
CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0
aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpM
b2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChM
ZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3Bw
OgorICAgICAgICAocHA6Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TWFj
cm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpUb2tlbkxleGVy
KToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6Ok1hY3JvRXhw
YW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6On5NYWNy
b0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
Ojp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxl
ZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKToKKyAgICAg
ICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBh
bmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFt
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIpOgorICAg
ICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0Nv
bnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9D
b250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0
OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6dW5nZXQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNz
b3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjp+
UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQpOgorICAgICAg
ICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAocHA6OlByZXBy
b2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nlc3Nvcik6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaDog
QWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRpb246OlNvdXJj
ZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpTb3Vy
Y2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbi5jcHA6CisgICAgICAgIChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAgICAgKHBwOjpU
b2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9mTGluZSk6Cisg
ICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAgIChwcCk6Cisg
ICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAgICAgKHBwOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oOgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAg
ICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNM
ZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNhYmxlZCk6Cisg
ICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAgICAgICAoeXlf
dHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9nZXRfcHJldmlv
dXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAgIChpbnB1dCk6
CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1ZmZlcik6Cisg
ICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVhdGVfYnVmZmVy
KToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5pdF9idWZmZXIp
OgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9idWZmZXJfc3Rh
dGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBwZW5zdXJlX2J1
ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAgIChwcF9zY2Fu
X3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5X2ZhdGFsX2Vy
cm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xpbmVubyk6Cisg
ICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAgICAgICAocHBn
ZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRfdGV4dCk6Cisg
ICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgorICAgICAgICAo
cHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBwc2V0X291dCk6
CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6CisgICAgICAg
IChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAocHBnZXRfbGxv
Yyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQpOgorICAgICAg
ICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMpOgorICAgICAg
ICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgorICAgICAgICAo
eXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChwcHJlYWxsb2Mp
OgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpUb2tlbml6
ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5pemVyKToKKyAg
ICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6c2V0
RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKToKKyAg
ICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0
U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgor
ICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJz
ZXIuc2g6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFi
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJbnB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6CisgICAgICAg
IChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2Fs
bFVzYWdlKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJy
b3IpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNTYW1wbGluZ09w
KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQp
OgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24p
OgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKToKKyAg
ICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
aDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAg
ICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHA6IEFkZGVk
LgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg6
IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAo
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKToK
KyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25z
KToKKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJvcnMpOgorICAg
ICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgorICAgICAgICAo
ZWdsOjpEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6Z2V0VGV4dHVyZVBvb2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOgor
ICAgICAgICAoRGlzcGxheSk6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNlLmNwcDoKKyAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2wpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmluaXRpYWxp
emUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlKToKKyAgICAgICAgKGVnbDo6U3Vy
ZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzd2FwUmVjdCk6
CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAgICAgIChlZ2w6
OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3ViY2xhc3NXaW5k
b3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4pOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzd2Fw
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcik6CisgICAgICAgIChlZ2w6
OlN1cmZhY2U6OmdldFdpZHRoKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0SGVpZ2h0KToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKToKKyAgICAg
ICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFj
ZTo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0T2Zmc2NyZWVu
VGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldFN3YXBJbnRlcnZhbCk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpnZXRUZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c2V0Qm91bmRU
ZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKToKKyAgICAg
ICAgKGVnbDo6U3VyZmFjZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZh
Y2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wvbGliRUdMLmNw
cDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6On5D
b250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1h
cmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtDb250ZXh0TG9z
dCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0Q2xlYXJDb2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJE
ZXB0aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRDdWxsRmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNDdWxs
RmFjZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxNb2RlKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRGcm9udEZhY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dERlcHRoVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEZXB0aFRlc3RFbmFibGVkKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXREZXB0aEZ1bmMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldERlcHRoUmFuZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJsZW5kKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0QmxlbmRGYWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZENvbG9y
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRTdGVuY2lsVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTdGVu
Y2lsVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U3Rl
bmNpbE9wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3Bl
cmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0U2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzU2FtcGxlQ292ZXJh
Z2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZVBhcmFt
cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclRlc3QpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
ZXREaXRoZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGl0aGVyRW5hYmxlZCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0TGluZVdpZHRoKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyYWdtZW50
U2hhZGVyRGVyaXZhdGl2ZUhpbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZpZXdwb3J0
UGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzZXRDb2xvck1hc2spOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dERlcHRoTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRWZXJ0ZXhB
dHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFVucGFj
a0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpj
cmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZlbmNlKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpjcmVhdGVRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlQnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRlbGV0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVRdWVyeSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZEVsZW1l
bnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmUyRCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5k
RHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjplbmRRdWVyeSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RmVuY2UpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJheUJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlQ3Vi
ZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRG
bG9hdHYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVN0YXRlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlT
aGFkZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjbGVhcik6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzeW5jKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpkcmF3TGluZUxvb3ApOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29y
ZEludmFsaWRFbnVtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24pOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldEVycm9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZXNldFN0YXR1cyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNF
dmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3Vw
cG9ydHNGbG9hdDMyVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQzMkxpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
UmVuZGVyYWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MTZUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzdXBwb3J0czMyYml0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNp
bmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoRnJh
bWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmN1bGxTa2lwc0RyYXcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzVHJpYW5n
bGVNb2RlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEV4
dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdFJlbmRlcmVyU3RyaW5n
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAgICAgIChnbDo6
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAgICAgIChnbDo6
VmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6On5GcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldE51
bGxDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcyk6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOgorICAgICAgICAoRnJhbWVi
dWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6CisgICAgICAgIChn
bCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdzKToK
KyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6fkF0dHJpYnV0ZUJpbmRpbmdzKToKKyAg
ICAgICAgKGdsOjpJbmZvTG9nOjpJbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjp+SW5m
b0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TGVuZ3RoKToKKyAgICAgICAgKGdsOjpJ
bmZvTG9nOjpnZXRMb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZFNhbml0aXplZCk6
CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpy
ZXNldCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6flByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmF0dGFjaFNoYWRlcik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFt
OjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGlu
Z3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6YmluZEF0
dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rKToKKyAgICAgICAg
KGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyk6CisgICAgICAgIChn
bDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRQcm9ncmFtQmlu
YXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpn
ZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAoZ2w6
OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dmFsaWRhdGUpOgorICAgICAgICAo
Z2w6OlByb2dyYW06OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dy
YW0uaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKEF0dHJpYnV0ZUJpbmRpbmdzKToKKyAgICAg
ICAgKEluZm9Mb2cpOgorICAgICAgICAoUHJvZ3JhbSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcC4KKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAo
Z2wpOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZv
cm06On5Vbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToKKyAgICAgICAg
KGdsOjpVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
flByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hh
ZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
U2FtcGxlclRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxs
VW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRy
aWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmli
dXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlm
b3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Z2V0RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRE
eENvb3JkTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250
Q0NXTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDog
Q29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmguCisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlm
b3JtOjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8p
OgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVu
aWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBs
ZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAg
KGdsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVm
ZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFBy
b3h5UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94
eSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAo
Z2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVy
YnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVy
OjpnZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAg
ICAoVmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZSk6Cisg
ICAgICAgIChnbDo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAgIChnbDo6R2V0
VGV4dHVyZVVzYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6SW1hZ2UpOgorICAgICAgICAoZ2w6
OkltYWdlOjp+SW1hZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpyZWRlZmluZSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2NrKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6dW5sb2NrKToKKyAgICAgICAgKGdsOjpJbWFnZTo6aXNSZW5k
ZXJhYmxlRm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0RDNERm9ybWF0KToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Z2V0U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnNldE1hbmFn
ZWRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFs
cGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRh
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCVUJ5dGVE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkhh
bGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTU1
NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFn
ZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjp+VGV4dHVy
ZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpn
ZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6On5UZXh0
dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRNaW5GaWx0ZXIpOgorICAgICAgICAoZ2w6
OlRleHR1cmU6OnNldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0V3JhcFMp
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdyYXBUKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWluRmlsdGVyKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpnZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6Omdl
dFdyYXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRXcmFwVCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldEltYWdlKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNz
ZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aGFzRGly
dHlJbWFnZXMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnJlc2V0RGlydHkpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6Omdl
dFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aXNJbW11dGFibGUp
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlOjpsZXZlbENvdW50KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRCbGl0dGVyKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6
OlRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAoZ2w6OlRleHR1
cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3Rv
cmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6
OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6VGV4dHVyZTJEKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlMkQ6On5UZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmUy
RDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRIZWlnaHQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6YmluZFRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnJlbGVh
c2VUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29tbWl0UmVjdCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZUNvbXBy
ZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdG9y
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzRGVwdGgpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRl
eHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjp1cGRhdGVU
ZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6
CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omdl
dFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAgICAgICAoZ2w6
OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVBy
b3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWCk6CisgICAgICAgIChnbDo6
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
TmVnWSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWik6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWik6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdWJJbWFn
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEJh
c2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OmZhY2VJbmRleCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBt
YXBzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmg6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoSW1hZ2Up
OgorICAgICAgICAoZ2w6OkltYWdlOjptYXJrRGlydHkpOgorICAgICAgICAoZ2w6OkltYWdlOjpt
YXJrQ2xlYW4pOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEZvcm1hdCk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmdldFR5cGUpOgorICAgICAgICAoZ2w6OkltYWdlOjppc0RpcnR5KToK
KyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAo
VGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAgICAgICAoVGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUpOgorICAgICAg
ICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2o6Cisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpJc0RlcHRoVGV4dHVyZSk6CisgICAgICAg
IChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAgICAgIChnbDo6RXh0
cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0cmFjdFR5cGUpOgorICAgICAgICAoZXMyZHg6
OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAoZHgyZXM6
OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQpOgor
ICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQp
OgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQpOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisgICAgICAgIChnbCk6CisgICAgICAgIChkeDJl
cyk6CisKIDIwMTItMDYtMjIgIEpvc2h1YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0u
Y29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTYW5pdGl6ZSBHTFNMIGNvZGUgdXNpbmcgQU5H
TEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2ds
MmV4dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaApp
bmRleCBhMTI0MDE0Li5lMjk3ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyZXh0LmgKQEAgLTIzOCw2ICsyMzgsMTEgQEAgdHlwZWRlZiB2b2lkKiBH
TGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5H
TEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9r
ZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIsMTEgQEAgdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0ZmllbGQgcHJl
c2VydmVNYXNrKTsKICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggYTNmYzkzNS4uOWE0YTM2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVy
TGFuZy5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJzaW9uIG51bWJl
ciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5
dGltZSB0aGUgQVBJIGNoYW5nZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1CisjZGVmaW5lIFNI
X1ZFUlNJT04gMTA3CiAKIC8vCiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2luZyBlbnVtcyBo
YXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3ICs0OSwyOSBA
QCB0eXBlZGVmIGVudW0gewogCiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9TUEVDID0gMHg4
QjQwLAotICBTSF9XRUJHTF9TUEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMgPSAweDhCNDEs
CisKKyAgLy8gVGhlIENTUyBTaGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhlIFdlYkdMIHNw
ZWMuCisgIC8vCisgIC8vIEluIGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycywg
QU5HTEU6CisgIC8vICgxKSBSZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAgLy8gKDIpIFJl
bmFtZXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBEaXNhYmxlcyB0
aGUgZ2xfTWF4RHJhd0J1ZmZlcnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENTUyBmcmFnbWVu
dCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFnQ29sb3IgYnVp
bHQtaW4uCisgIC8vICgyKSBEaXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQtaW4uCisgIC8v
ICgzKSBFbmFibGVzIHRoZSBjc3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0KSBFbmFibGVz
IHRoZSBjc3NfQ29sb3JNYXRyaXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVyIHBhc3Npbmcg
YSBDU1Mgc2hhZGVyIHRocm91Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVjdGVkIHRvIGFw
cGVuZAorICAvLyBhIG5ldyBtYWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlzIG5ldyBtYWlu
IGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8vIEl0IG1heSBh
bHNvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBhc3NpZ25tZW50
LCB0ZXh0dXJlCisgIC8vIGFjY2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25tZW50IGluIG9y
ZGVyIHRvIGltcGxlbWVudCB0aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9kZXMuCisgIC8v
CisgIFNIX0NTU19TSEFERVJTX1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVjOwogCiB0eXBl
ZGVmIGVudW0gewpAQCAtMTA0LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewogICBTSF9VTlJP
TExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8vIFRoaXMgaXMg
bmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBkcml2ZXIgYnVn
cy4KLSAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAgU0hfRU1VTEFU
RV9CVUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmlt
ZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAor
ICAvLyB0aW1pbmcgYXR0YWNrcy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9y
cyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8gdGV4dHVyZSBp
bmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2UgdGhpcyBmbGFn
LCB5b3UgbXVzdCBjb21waWxlIHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNwZWMKKyAgLy8g
KHVzaW5nIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVTVFJJQ1RJT05T
ID0gMHgwMjAwLAorICAgIAorICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBlbmRlbmN5IGdy
YXBoIHRoYXQgaXMgdXNlZCB0byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmljdGlvbnMgb24g
ZnJhZ21lbnQgc2hhZGVycy4KKyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBh
bGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVyIHNwZWMgaXMg
U0hfV0VCR0xfU1BFQy4KKyAgLy8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRhaW4gdGhlIFNI
X1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5cGUgaXMgU0hf
RlJBR01FTlRfU0hBREVSLgorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAwCiB9IFNoQ29t
cGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDQwOWI2MjIuLjU2NWRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFCQTIzMEZF
QTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJEMjFGNjc0OUE3
RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3Bw
ICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2VsZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzExQTQ4QTBC
RjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjExMUI4M0ZCNjM2
RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZFIC8qIE91dHB1
dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQlBMjAx
MDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3QkJFIC8qIERp
cmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
ICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODIz
MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OworCQlBMjAxMDgz
RTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JC
RSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9OworCQlBMjAx
MDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVy
LmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJEMTU5QzMx
QTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JC
RSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzMjE1
OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDUxNTlD
MzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi87
IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzgxNTlDMzFBMDAw
RTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMyNEYwMEU1N0JC
RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRGMDBFNTdCQkUg
LyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAg
Ki87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIw
MTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07
CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1
MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9Owor
CQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUzMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2ODE1OUMzMjRG
MDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIw
MTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlB
MjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1QTE1OUMz
MjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CisJCUEyMDEw
ODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVFMTU5
QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsK
KwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87
IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZE
MTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsKKwkJQTIw
MTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1OUMzMjYyMDBF
NTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDNDNTVG
NUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUu
Y3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThB
NjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5
IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5j
cHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzEx
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkg
LyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTc2
NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0x
NDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJB
bGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wuYSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5h
cjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMxM0MwMEU1N0JC
RSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3Rp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMzMUEwMDBFNTdC
QkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjExNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERp
cmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgy
NDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFBMDAwRTU3QkJF
IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgy
OTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkIx
NTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJEMTU5
QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJF
MTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRjE1OUMz
MUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBfdXRpbHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVwcm9jZXNzb3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMzMUEwMDBFNTdC
QkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
ZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNTE1OUMz
MUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAv
KiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlDMzI0RjAwRTU3
QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5k
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhh
bmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1ODE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYwMTU5QzMy
NEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3REaXNjb250
aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkUxNTlDMzI2
MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3Vp
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5QzMyNjIwMEU1
N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1
dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JH
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEwQkYxNkIxQ0JE
NzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAg
Lyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJQTIwMTA3
RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlm
aWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8gPSB7
CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5M0I3RUFCN0RE
OTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAu
aCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8sCisJ
CQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQky
OTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMxMzk5REVFNURB
QkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JC
RSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5oICov
LAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8sCiAJCQkJ
RkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0MSwxNSArMzI0
LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJE
Mzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5IC8q
IEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0
QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEg
LyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAxN0M0NCAvKiBD
b21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3Bw
ICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmggKi8s
CisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKKwkJCQk5NTI3
NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0QjE1OUMzMjRG
MDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8q
IERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMyNjIwMEU1N0JC
RSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlDMzI0RjAwRTU3
QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlDMzI0RjAwRTU3
QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJFIC8qIEV4dGVu
c2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0MxIC8qIEZvckxv
b3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAvKiBGb3JMb29w
VW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcuaCAq
LywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovLAor
CQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkJ
NEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJCQkJNkU2OTI3
QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0IyOTcxRDRFQjM4
MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVF
RUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAogCQkJCTYwQzM5
OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJCQlBMENFNDM2
MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJFN0M5QjZFNkRC
NzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEyMDEwODVBMTU5
QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKIAkJCQk4NTg0
NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJ
CUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJ
M0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJREVF
QUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJFQTNC
QTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1
QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8q
IEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyog
TWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZG
MyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5j
bHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3Bw
ICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCiAJ
CQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAtMjcx
LDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xT
TEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5j
cHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywK
KwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJ
OTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlDRUUw
QzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJFNzM4
RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVFQTQ3
NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJF
IC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAvKiBwcmVwcm9j
ZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZl
LmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUu
aCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8s
CiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlB
MjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQkyMjhB
NkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQlGM0UwOURD
OEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAwQTg0QzM1MjE2
RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAv
KiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5bWJvbFRhYmxl
LmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLywKIAkJCQkw
QTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAogCQkJCUQ1
M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCTZGQjcw
REM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBAIC0yOTIsMjkg
KzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExT
TC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNM
LmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8sCi0JCQkJ
RTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJMkE3
NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyMDEwODZG
MTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEyMDEw
ODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKKwkJCQlBRTc2
NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIxNUE3QUI0RUY3
MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAv
KiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0
ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxl
SW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5j
cHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8s
Ci0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKLQkJCQk5NTI3
NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2NkZC
NEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAv
KiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGds
c2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFu
Z190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNw
cCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8s
Ci0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8s
Ci0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICovLAotCQkJCUJF
MjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCi0JCQkJRDJD
OUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJCUFFNzY3NEM1
MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdBQjRFRjcxQzk3
RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0
aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNvbXBpbGVyOwpA
QCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3QkJFIC8qIERp
YWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2
ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lv
blBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAg
Ki8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8sCisJCQkJQTIw
MTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAxMDgyQzE1OUMz
MUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUg
LyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5o
ICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAq
LywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICovLAor
CQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAorCQkJCUEyMDEw
ODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJCUEyMDEwODMz
MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAxMDgzNTE1OUMz
MUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgzNjE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAv
KiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIu
Y3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdCQkUg
LyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUg
LyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4NTAxNTlDMzI0
RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTIwMTA4NTEx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJCUEyMDEw
ODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJ
CQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyMDEwODVGMTU5
QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8sCisJCQkJ
QTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0NCw2ICs0OTks
NyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1v
bi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2ds
c2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3Jf
Y29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVjdFJlZmVyZW5j
ZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICov
OwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRp
YyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9jZXNzb3IgKi8g
PSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQaGFzZXMgPSAo
CisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA3
RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxl
cyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHByZXBy
b2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJCQlwcm9kdWN0
UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUu
bGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJh
bnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRD
b25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsK
QEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5u
ZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJKTsK
IAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3REaXJQ
YXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3IEBACiAJCQkJ
NkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJCTU4
OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgzOEU5
NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjAxMDdEQzE1
OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0QjRCREU3QUQ2
MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUY3
QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5
bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBFNTdCQkUgLyog
RGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MjE1OUMz
MjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
KTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQlB
MjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZp
bGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZl
SGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODNFMTU5QzMx
QTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
MDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4NTUxN0YwODZG
RENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4QzcyN0FBOEU5
REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0ODU4NDE3RTU0
MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lH
cmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NTE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1
N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2OTE1OUMz
MjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QzE1OUMzMjRG
MDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OworCQlB
MjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJCSk7CisJCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJCQkp
OworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JCRSAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRp
bmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIsCisJCQkJ
CSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJ
CS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSAidHJhbnNs
YXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJCUFG
N0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzkxMSwxNSBA
QAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0MwMEU1N0JCRSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJvY2Vz
c29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZp
Z3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLywK
KwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wi
ICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJh
dGlvbnMgPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1
dGlscy5oCmluZGV4IDI0Yzc2NmIuLjdkOTM0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVO
YW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShj
b25zdCBUeXBlTmFtZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50
ZiBfc25wcmludGYKKyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgKaW5kZXggMjAzYzQy
MS4uYmRkMTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi92ZXJzaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJz
aW9uLmgKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBN
SU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JF
VklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVmaW5lIFNUUklO
R0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAppbmRleCBhNzk1MGI5Li4xYzRiMjVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7
CiAvLyBldmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRl
cnMsIGJ1dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIGF0YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5
LCB2ZWMyIHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFd
KSk7IH0iLAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVy
biB2ZWMzKGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsy
XSkpOyB9IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1
cm4gdmVjNChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhb
Ml0pLCBhdGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgY29zKGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIs
CiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYs
NiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKICAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBtb2QoZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgs
IHZlYzIgeSkgeyByZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7
IH0iLAotICAgICJ2ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZl
YzMobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0i
LAotICAgICJ2ZWM0IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQo
bW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhb
M10sIHlbM10pKTsgfSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgo
eCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4U291cmNlW10gPSB7CiB9OwogCiBjb25zdCBjaGFy
KiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
YXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVj
NCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xfY29zX2Vt
dSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAg
IndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNp
b24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9u
IHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyByZXR1cm4g
Y29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nvc19lbXUo
d2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAKLSAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNk
ZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0gKHkpIDog
KHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzIs
IHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2ZWM0KSIs
CiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCkiLAorICAg
ICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBk
b3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aChm
bG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAwLjAgPyAo
eCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMyKSIs
CiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVj
MywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwgdmVjNCki
LAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCkiLAorICAg
ICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgp
ID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQpIiwKIAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCkiLAorICAg
ICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikgKiAoSSkg
KiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMyLCB2ZWMy
KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVjMykiLAog
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpAQCAtMTAy
LDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50U291cmNl
W10gPSB7CiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3Mg
aW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0x
MjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrW10g
PSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAg
IHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsx
MDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAgICAvLyBXb3JrIGFyb3Vu
ZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEK
LSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUsICAvLyBURnVuY3Rpb25B
dGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVs
YXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUsICAvLyBURnVuY3Rp
b25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgdHJ1ZSwgIC8vIFRG
dW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFs
aXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25W
ZXJ0ZXhNYXNrW10gPSB7CiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50TWFza1tdID0gewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAg
Ly8gV29yayBhcm91bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hl
cy4KKyAgICAvLyBXb3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVl
LCAgLy8gVEZ1bmN0aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMl8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkRpc3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18z
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25M
ZW5ndGgxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwg
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxl
Y3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBX
b3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Db3MzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25EaXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJf
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBA
QCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25N
b2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25z
dCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewogICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8v
IFRGdW5jdGlvblVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKAogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0
aW9uID0gVEZ1bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2Ug
RU9wQXRhbjoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVu
Y3Rpb24gPSBURnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVu
Y3Rpb24gPSBURnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BSZWZsZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8x
OwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCmluZGV4IGIz
N2I2NjUuLjBkOTA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCkBAIC00NSwxMiAr
NDUsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAg
IGVudW0gVEJ1aWx0SW5GdW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAg
Ly8gZmxvYXQgYXRhbihmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAg
Ly8gdmVjMiBhdGFuKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8g
dmVjMyBhdGFuKHZlYzMsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVj
NCBhdGFuKHZlYzQsIHZlYzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBj
b3MoZmxvYXQpOworICAgICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9h
dCk7CiAgICAgICAgIFRGdW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAg
VEZ1bmN0aW9uQ29zMywgIC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0
LCAgLy8gdmVjNCBjb3ModmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAg
ICBURnVuY3Rpb25MZW5ndGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVu
Y3Rpb25MZW5ndGg0LCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlv
bk1vZDFfMSwgIC8vIGZsb2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25N
b2QyXzIsICAvLyB2ZWMyIG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18z
LCAgLy8gdmVjMyBtb2QodmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8v
IHZlYzQgbW9kKHZlYzQsIHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAv
LyBmbG9hdCBub3JtYWxpemUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAg
Ly8gdmVjMiBub3JtYWxpemUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAv
LyB2ZWMzIG5vcm1hbGl6ZSh2ZWMzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGYyN2NiNzUuLmNhYjgwNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAt
OCwxMCArOCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0
aWFsaXplLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVGdW5jdGlvbi5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvVmFs
aWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK3sK
KyAgICAgcmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFE
RVJTX1NQRUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1ib2xUYWJsZSgK
QEAgLTEyMyw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBj
b25zdCBzaGFkZXJTdHJpbmdzW10sCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYg
Y29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4K
LSAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKQorICAgIGlmIChpc1dlYkdMQmFz
ZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9WQUxJREFU
RV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGggb2Ygc291cmNl
IGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3MuCkBAIC0xNjEs
NiArMTcyLDEyIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNo
YWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRh
dGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9w
dGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBl
bmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0aW9ucyAmIFNIX0RFUEVO
REVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclNwZWMg
PT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3JpdGVDU1NTaGFkZXIocm9v
dCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBuZWVkcyB0byBoYXBwZW4g
YWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9JTlRFR0VSX0lOREVYKSkK
ICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNl
c0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBAIGJvb2wgVENvbXBpbGVy
OjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCiAgICAgfQogfQogCit2b2lkIFRD
b21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW5h
bWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICByb290LT50cmF2
ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25z
KFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShz
aGFkZXJUeXBlLCBpbmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUp
OwogICAgIHJldHVybiB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCitib29sIFRDb21w
aWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBv
dXRwdXRHcmFwaCkKK3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7Cisg
ICAgICAgIGluZm9TaW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZv
cmNlZCB1bmRlciB0aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7CisgICAgICAg
IFREZXBlbmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBl
cnJvcnMgZmlyc3QuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRl
clRpbWluZ1Jlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBv
dXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkgewor
ICAgICAgICAgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7
CisgICAgICAgICAgICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMo
cm9vdCk7CisgICAgfQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVy
VGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAg
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsK
KyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiBy
ZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNl
VmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAg
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7Cisg
ICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0
cmljdG9yLm51bUVycm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpjb2xsZWN0QXR0
cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RBdHRyaWJzVW5p
Zm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMjMyYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250
aW51aXR5LmNwcApAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBDb250YWlucyBh
bmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBvZiBzdXBwb3J0
IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNpdGx5
IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0aCBk
aXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRp
bnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFj
ZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2UoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAgbm9kZS0+
dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9v
bCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dP
cCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAgbUxvb3BEaXNj
b250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuICFtTG9v
cERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIHJl
dHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9vcERpc2NvbnRp
bnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkg
ZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BEaXNjb250aW51
aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0
cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVyYXRpb24gPSBm
YWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdyYWRpZW50T3Bl
cmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJh
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAgY2FzZSBF
T3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRp
b247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRP
cGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFu
b2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgbmFt
ZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAg
ICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PSAi
dGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBo
YXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8gY29udGFp
biBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVyYXRpb247
Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJhdGlvbjsK
KyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7Cit9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0
RGlzY29udGludWl0eS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
YmRhNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaApAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wn
cyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMg
d2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9m
IGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVmIENPTVBJTEVS
X0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNURElTQ09OVElO
VUlUWV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFj
ZSBzaAoreworLy8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEgdmFyaWFibGUg
bnVtYmVyIG9mIGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51aXR5IDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJhdmVyc2UoVElu
dGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUxvb3BE
aXNjb250aW51aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRl
cm1Ob2RlICpub2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNo
IGNvbXB1dGUgZ3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZlcnNlKFRJbnRl
cm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtR3JhZGllbnRP
cGVyYXRpb247Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVybU5v
ZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJ
VFlfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
aWFnbm9zdGljcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlh
Z25vc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTNhMDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
IgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKSA6IG1J
bmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKCkK
K3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFz
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0b2tl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJh
KQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsKKyAgICBUUHJl
Zml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJvciA6IEVQcmVm
aXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAj
OiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4KTsKKyAgICBz
aW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUpKTsKKyAgICBz
aW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmEg
PDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29uc3Qgc3RkOjpz
dHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQorCit2b2lkIFRE
aWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQzYTEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaApAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9E
SUFHTk9TVElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFn
bm9zdGljcy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1
YmxpYyBwcDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9zdGljcyhUSW5m
b1NpbmsmIGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJ
bmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAgIHZvaWQgd3Jp
dGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAor
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisKKyAgICB2b2lk
IHdyaXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYgbUluZm9TaW5r
OworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjZhYjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3Mu
aCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OnN0cmluZyYgc3Ry
KQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgicmVxdWlyZSIpOwor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIgPT0ga1JlcXVpcmUp
IHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5hYmxlKSByZXR1cm4g
RUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0dXJuIEVCaERpc2Fi
bGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2FybjsKKyAgICByZXR1
cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRs
ZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgIDogbUV4dGVu
c2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcigpCit7Cit9
CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VM
b2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFn
bm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIFREaXJlY3RpdmVI
YW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RER0woIlNUREdMIik7
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0aW1pemUiKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxzZTsKKyAgICBpZiAo
bmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wgcHJhZ21hIGlzIHVz
ZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAgICAgIC8vIHJldmlz
aW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0ga09u
KSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09m
ZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9
IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBp
bnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwgbG9j
LCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnZhbGlkVmFsdWUp
CisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJhZ21hIHZhbHVlIiwg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9yICdvZmYnIGV4cGVj
dGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbihjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpCit7CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisgICAgVEJlaGF2aW9y
IGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlmIChiZWhhdmlvclZh
bCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZv
KHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAgIGlmIChiZWhhdmlv
clZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZpb3IiKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpF
UlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9u
IiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBoYXZl
ICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0b3IgaXRlciA9IG1F
eHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBpdGVyICE9IG1FeHRl
bnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgIGl0ZXItPnNlY29u
ZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpCisg
ICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2ZXJpdHkgPSBwcDo6
RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKKyAgICAgIGNh
c2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9S
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAgICAgY2FzZSBFQmhX
YXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFn
bm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgbURpYWdub3N0aWNz
LndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4
dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2
ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKQoreworICAg
IHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAodmVyc2lvbiAhPSBr
VmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAg
ICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9IHN0cmVhbS5z
dHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVS
Uk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24gbnVtYmVy
Iiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDNkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJUkVDVElW
RV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCisKKyNp
bmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1ByYWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJlY3RpdmVIYW5k
bGVyIDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoKKyAgICBURGly
ZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAorICAgICAgICAg
ICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgflRE
aXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBjb25zdCB7
IHJldHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNp
b25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsgfQorCisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBs
b2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1
ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VM
b2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24o
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBtUHJhZ21hOwor
ICAgIFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAgIFREaWFnbm9z
dGljcyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVf
SEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAppbmRleCBlOWJiYTRiLi42MDQwOTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9u
QmVoYXZpb3IuaApAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9FWFRFTlNJT05fQkVIQVZJT1Jf
SU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCiAKLSNpbmNs
dWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5n
PgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAgICAgRUJoUmVxdWlyZSwKICAg
ICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsyMSwxNyBAQCB0eXBlZGVmIGVu
dW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JTdHJpbmcoVEJlaGF2aW9yIGIp
CiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgcmV0
dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICByZXR1cm4gImVu
YWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJldHVybiAid2FybiI7Ci0gICAg
ICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlzYWJsZSI7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2goYikKKyAgICB7CisgICAgICBj
YXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAgICBjYXNlIEVCaEVuYWJsZTog
cmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiByZXR1cm4gIndhcm4iOworICAg
ICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOworICAgICAgZGVmYXVsdDogcmV0
dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPiBU
RXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4gZXh0ZW5zaW9uIG5hbWUgYW5k
IGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVEJlaGF2aW9yPiBURXh0
ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxFX0lOQ0xVREVEXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUu
Y3BwCmluZGV4IGYzYTE5ZGMuLjNlOTRjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBz
dGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoKQogLy8gSW1wbGVtZW50YXRp
b24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKFNoU2hhZGVy
U3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBU
U3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcsOSBAQCBzdGF0aWMgVFN0cmluZyBCdWls
dEluQ29uc3RhbnRzKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogICAgIHMg
PDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNv
dXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29u
c3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVy
ZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8
PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NI
QURFUlNfU1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3Ry
KCk7CiB9CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAogICAgIGRlZmF1bHQ6IGFzc2VydChm
YWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5T
dHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0
SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwog
fQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hh
ZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKICAgICAvLwogICAgIHN3aXRjaCh0eXBl
KSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0
KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAg
RWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAg
IDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAg
ICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAg
MikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiks
ICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJv
bnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAg
ICAvLworICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0
YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJ
bnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgor
ICAgICAgICAvLworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJh
d0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0
KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAg
ICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBA
IHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNw
ZWMsCiAKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAg
ICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNh
c2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVS
U19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkg
c2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2
cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJh
eVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQwY2Y1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJ
bmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4K
KyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgp
OworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VD
b250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0
SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4
KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAo
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29u
dGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVh
ZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQo
KTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIklu
aXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFy
c2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbHBUaHJl
YWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExTVmFsdWUoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYg
IkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4
dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9T
X0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VD
b250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCit7
CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAorICAgIC8v
CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0
PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRl
eHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCmluZGV4IDc2MGZkMDkuLmFhNTNiNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaApAQCAtMTMsNCArMTMsMTQgQEAgYm9vbCBGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgp
OwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBUUGFyc2VDb250ZXh0OwordHlw
ZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVybiBUUGFyc2VD
b250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5lIEdsb2JhbFBh
cnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0cnVjdCBUVGhy
ZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNv
bnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRpZiAvLyBfX0lOSVRJQUxJWkVf
UEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKaW5kZXggY2E2ZDhmNy4uOTJjNDUwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVy
bWVkaWF0ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsCiAvLyB0
aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0
ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFs
cmVhZHkgYW4gYWdncmVnYXRlLgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBu
byBvcGVyYXRvciB3YXMgc2V0LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6
OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRT
b3VyY2VMb2MgbGluZSkKIHsKQEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50
ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBh
aXIgbm9kCiAgICAgLy8KIAogICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0
QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0
QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+
Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAg
IGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNl
cXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBu
b2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BT
ZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAg
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2Rl
UGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybVR5cGVkKiB0cnVlCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgogICAgIC8vCiAg
ICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRy
dWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPmdl
dFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIG5vZGUtPnNl
dExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0NDQsOSArMTQ0NSwzIEBAIFRJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlw
ZSBwcm9tb3RlVG8sIFRJbnRlcm1DCiAgICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVu
aW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZp
ZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwgbm9k
ZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRUb1ByYWdtYVRh
YmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQotewotICAgIGFzc2VydCghcHJhZ21hVGFi
bGUpOwotICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOwotICAgICpwcmFnbWFU
YWJsZSA9IHBUYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCmluZGV4IDBjN2UxYTku
LmE1MDMxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcApAQCAtMTUsNyArMTUsOSBAQCBU
U3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBpc0ds
b2JhbCkKICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFsKQogICAgICAg
ICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAgc3RyZWFtIDw8
IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8ICJfIjsKICAg
ICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUg
LSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3Bw
CmluZGV4IDY5YjhjMjYuLmQ3ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTYsMTAgKzYsMTIgQEAKIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJj
aFN5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKIAog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIyLDEz
IEBAIG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZmZXJb
MjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBPdXRw
dXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5mb2xk
U2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xkU2hv
cnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBt
SW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CkBA
IC0zOCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNv
bnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAgICBt
VXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1
cmUyRFByb2pMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAg
ICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsK
QEAgLTc1LDIwICs4MywyNiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQg
JmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cgogICAgIG1TY29wZURl
cHRoID0gMDsKIAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29wRGlz
Y29udGludWl0eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAg
ICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6fk91
dHB1dEhMU0woKQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBtVW5m
b2xkU2hvcnRDaXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7CisgICAg
bUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG1D
b250ZXh0LnRyZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlz
KTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdv
IGluIHRoZSBoZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0LmluZm9TaW5rLm9i
aiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1Cb2R5
LmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRlci5jX3N0cigp
OworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKIFRJ
bmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1LDI1ICsyMTks
MTEgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgIHVuaWZvcm1z
OwogICAgICAgICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRjaCBm
dW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVyLiBU
aGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRpbmcg
dG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQiLCBy
YXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8vIGlz
ICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4cGVj
dCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAgLy8g
Y29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIGlz
IGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBzaW1w
bGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwgd2hp
Y2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgdGV4
dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUgcHJv
amVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAgICAv
LyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNoIGFn
YWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9yIGN1
YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFdIC0+
IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0gICAg
ICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNpZGVz
IiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0aGUK
LSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0IHRo
ZSBjb2RlLgotICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAgICB7
CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZs
b2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAg
ICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjMyLDcgKzIz
Miw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQg
YmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBiaWFzKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgYmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAgdm9pZCBPdXRw
dXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBm
bG9hdDQodC54LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikpO1xuIgogICAg
ICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgogICAgICAgICAg
ICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQp
XG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQudykpO1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtcbiIKICAgICAg
ICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0K
QEAgLTI1NSwxMiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAg
ewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQu
eiwgMSAtICh0LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlh
cykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxu
IgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQu
dywgMSAtICh0LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgYmlh
cykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxu
IjsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVy
KCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0LngsIC10Lnks
IHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7
XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwog
ICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
ICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2Ft
cGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9h
dDQodC54LCAtdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xuIgorICAg
ICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFibGUg
aW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNlZCB0byBzYW1w
bGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMs
IGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQg
dClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2Jp
YXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxv
YXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBi
aWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAw
KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChz
YW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxv
YXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAg
ICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMsNyBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2Rl
KQogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYgKHZpc2l0ID09
IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBub2RlLT5nZXRU
eXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVG
aWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0
VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC05NzMs
OSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZpZWxkVHlw
ZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBl
LT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCkt
PmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+
Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmll
bGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkp
OwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEpCiAgICAgICAg
ICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFuc3Bv
c2UoIiwgIikpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0
cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFrOwog
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgInRy
YW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVhazsK
LSAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAg
ICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5k
ZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgog
ICAgICAgICBtVXNlc1hvciA9IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ4
b3IoIiwgIiwgIiwgIikiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgIGJyZWFr
OworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZv
bGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApAQCAtMTEzMSw5
ICsxMjAxLDM2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybVVuYXJ5ICpub2RlKQogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAgICAgIGNhc2Ug
RU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0aCgiLCAiIiwg
IikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBF
T3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIp
OyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTogICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIp
Iik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6CisgICAgICAgIGlmKG1J
bnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3Ag
fHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIiLCAi
KSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGd2lkdGg6Cisg
ICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAi
LCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9w
QWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIikiKTsg
ICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAtMTE3MSwxMiAr
MTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
cHV0TGluZURpcmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAgYm9vbCBPdXRw
dXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1h
bmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFBy
ZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8
PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZVN0
cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZGVj
b3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFpbigiOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigiOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMg
PSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKIAotICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2Vb
MF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0t
PmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgaWYgKHN5
bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3Ry
dWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5n
ZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVk
U3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRT
dHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5n
KHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNp
emUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVuY2UuYmVn
aW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwot
ICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHNlcXVl
bmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24g
PSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBv
c3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAgICAgICAgICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29udGFpbnNMb29w
RGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1PdXRw
dXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0NywxMDYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFt
ZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVE
aXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIgOiAiKCIpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4
dHVyZTJETG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFBy
b2oiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJn
bF90ZXh0dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2oo
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pM
b2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9k
MCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1
YmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgi
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxv
ZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAgewpAQCAtMTU4
MywxMSArMTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQogCiAgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5
T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNlbGVjdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNo
b3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CiAgICAgfQogICAgIGVsc2UgIC8v
IGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJz
ZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQtPnRy
YXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAgICAgICBvdXQgPDwgImlmKCI7CiAK
QEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKIAogICAgICAgICBpZiAobm9kZS0+
Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldFRydWVCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8PCAiO31cbiI7CisgICAgICAgIG91
dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQogICAg
ICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCiAgICAgICAgICAgICBv
dXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2Rl
LT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5v
ZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAiO31c
biI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihU
SW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKIAogYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3Ao
VmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2FzRGlzY29udGlu
dW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9vcDsKKworICAgIGlmICghbUluc2lkZURpc2Nv
bnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0g
Y29udGFpbnNMb29wRGlzY29udGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBpZiAoaGFuZGxl
RXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2
NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgewotICAg
ICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0cmF2ZXJzZVN0
YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRMaW5lRGlyZWN0
aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBvdXQg
PDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51
b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAsMTYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9k
ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRl
bWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5v
ZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7
CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wgT3V0cHV0SExT
TDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAgLTE3NTksOSAr
MTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2Rl
ICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3Jl
IHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0
aGVtCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlvbnMgKHVuc3Vw
cG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBkb2N1bWVudGF0
aW9uIHNheXMgMjU1IGl0ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGF0IGFu
eXRoaW5nIG1vcmUgdGhhbiAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVM
b29wKFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9PUF9JVEVSQVRJ
T05TID0gMjU0OwogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAgICAgLy8gUGFy
c2UgbG9vcHMgb2YgdGhlIGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJvb2wgT3V0cHV0
SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgewog
ICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAobGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVu
dDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAgICAgICAgaWYg
KGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFUSU9OUykKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90IGFuIGV4Y2Vzc2l2ZSBsb29wCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3Jl
bWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucyk7CisgICAgICAgICAgICAgICAgaW50IGNs
YW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9JVEVS
QVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAgICAgICAgICAgIC8vIGZvcihpbnQgaW5kZXgg
PSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQogCkBA
IC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3Ao
VEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShu
b2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CiAKLSAgICAg
ICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAgICAgICAgICAgICBp
dGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IE1BWF9MT09QX0lU
RVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9ucyAtPSBNQVhf
TE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhj
b25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAgICBzdHJpbmcg
Kz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUo
KSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAgIHN0cmluZyAr
PSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZpZWxkLmdldEZp
ZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4IEBAIFRTdHJp
bmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKICAgICAgICAgICAg
IHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFs
T0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzNSw3ICsyMzA3
LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlwZSwg
Y29uc3QgVFN0cmluZyAmbmFtZSwgY29uc3QgVEkKICAgICAgICAgewogICAgICAgICAgICAgY29u
c3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAgICBzdHJ1Y3R1
cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5h
bWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgc3RydWN0dXJl
ICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC5nZXRGaWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0LDQgKzI2MDYs
MTQgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAm
c3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKICAgICAKICAgICByZXR1cm4gZGVjb3JhdGUoc3Ry
aW5nKTsKIH0KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJp
bmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0dXJl
LmdldFR5cGVOYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuaAppbmRleCA4MjRiYzA3Li5lYTI4YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogbmFt
ZXNwYWNlIHNoCiB7Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRTaG9ydENpcmN1
aXQ7CiAKIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogewpAQCAt
MzMsNiArMzMsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
ICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAg
c3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsgICAgICAgICAg
ICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBuYW1pbmcgY2xh
c2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZz
dHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZUZp
ZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSk7CiAKICAg
cHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBAIGNsYXNzIE91
dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZp
c2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqKTsKIAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRl
cm1Ob2RlICpub2RlKTsKICAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpu
b2RlKTsKICAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOwog
ICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3Ry
aW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7
CkBAIC02Miw3ICs2NCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgogICAgIFRTdHJpbmcgc3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsK
IAogICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVjdCAqbVVuZm9s
ZFNlbGVjdDsKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENpcmN1aXQ7CiAg
ICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFtcwpAQCAtODQs
NiArODYsMTIgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAg
ICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFz
OwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
TG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsK
KyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29sIG1Vc2VzRnJh
Z0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0MCwxMCBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICB1bnNpZ25lZCBp
bnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZvciBjcmVhdGlu
ZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7Cisg
ICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wOwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggNDMxZjhkMS4uNzliZGRlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xMCwzMyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRlICJjb21waWxl
ci9nbHNsYW5nLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0jaW5jbHVkZSAi
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMiIHsKLWV4dGVy
biBpbnQgSW5pdFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVByZXByb2Nlc3Nv
cigpOwotZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtCYXNlJiBzaW5r
LAotICAgICAgICAgICAgICAgICAgICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291cmNlTG9jIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykK
LXsKLSAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicg
OiBleHRyYWluZm8gKi8KLSAgICBzaW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5rLmxvY2F0aW9u
KGxvYyk7Ci0gICAgc2luayA8PCAiJyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCByZWFzb24gPDwg
IiAiIDw8IGV4dHJhSW5mbyA8PCAiXG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZpbmVFeHRlbnNp
b25NYWNyb3MoY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikKLXsKLSAgICBm
b3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9y
LmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0gICAg
fQotfQorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IHZl
Y1NpemUsIFRWCiB7CiAgICAgZmllbGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcuc2l6ZSgpOwog
ICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2
ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5n
LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTQsMjAgKzg4
LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmlu
ZyYgY29tcFN0cmluZywgaW50IHZlY1NpemUsIFRWCiAgICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmlu
Zy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3Ig
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmll
bGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXpl
KSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ldICE9IGZpZWxkU2V0W2kt
MV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAtIHZlY3RvciBjb21w
b25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJpbmcuY19zdHIoKSwg
IiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBv
bmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhGaWVs
ZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNCiAgICAgZmllbGRz
LmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVu
Z3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18n
KSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAn
MycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpZWxkcy53aG9s
ZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOwog
ICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sxXSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBT
dHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJykgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxk
IHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKQEAgLTE3MCw3
ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRT
dHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycgfHwKICAgICAg
ICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAg
ICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNv
bXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
bWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJp
bmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJz
ZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE0K
ICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0g
bWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0
cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMwICsxNzcsMjgg
QEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6
OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJhSW5mb1s1MTJd
OwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0cmFJbmZvRm9y
bWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZvKSwgZXh0cmFJ
bmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAg
RGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUpOworICAgIGRp
YWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CiAKLSAgICBS
ZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFzb24sIHRva2Vu
LCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1FcnJvcnM7CiB9
CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2Vu
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1h
dCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0IG1hcmtlcjsK
LSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNucHJpbnRmKGV4
dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFya2VyKTsKLQot
ICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxvYywgcmVhc29u
LCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIERl
Y29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsKKyAgICBkaWFn
bm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Cit9CiAKLSAg
ICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29uc3QgY2hhciog
c3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAogLy8KQEAgLTIz
NCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VMb2MgbG9j
LAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNo
YXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJyb3IobGluZSwg
IiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAgICAgICAgIHJp
Z2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgZnJvbSAn
IiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6OnN0cmluZyBl
eHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwgIiIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDExIEBAIHZvaWQg
VFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3Ry
aW5nIGxlZnQsIFRTdHJpbmcKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihp
bnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKIHsKLSAgIGVycm9yKGxp
bmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAgICAgICAgICJubyBvcGVyYXRpb24g
JyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlz
IG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAgICAgIG9wLCBvcGVyYW5kLmNfc3Ry
KCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUlu
Zm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtl
cyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5kIAorICAgICAgICAgICAgICAgICAgICA8
PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwg
IiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwogfQogCiAvLwpA
QCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IoaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCiAvLwogdm9pZCBUUGFyc2VD
b250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBs
ZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0
eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhpc3RzIHRoYXQg
dGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKLSAgICAgICAgICAg
ICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxl
IGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCByaWdodC5jX3N0
cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJ
bmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFr
ZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQgCisgICAgICAgICAgICAg
ICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnIiA8PCByaWdodCA8PCAi
JyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIg
d3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOyAKIH0KIAogYm9v
bCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9u
IHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyArMjQyLDEzIEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBw
cmVjaXNpb24sIFRCYXNpY1R5CiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2FzZSBFYnRGbG9h
dDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAgICAgICAg
IGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAi
IiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIGZv
ciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJlY2lzaW9uID09
IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24g
c3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5v
IHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VEludGVybVR5cGVkKiBub2QKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+
Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAg
IAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBo
YXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBs
aWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw3ICszMDEsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBU
SW50ZXJtVHlwZWQqIG5vZAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCk7CiAK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJ
bnRlcm1UeXBlZCogbm9kCiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlO
b2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzc5LDEw
ICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICAvLwogICAgIC8vIElmIHdl
IGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCiAgICAgLy8KLSAgICBp
ZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3As
ICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdlKTsKKyAgICBp
ZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJvbCA8PCAiXCIgKCIgPDwg
bWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5m
b1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwg
b3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVx
dWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNo
ZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExp
bmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9y
KG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9r
ZW4pCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5v
ZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7
CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVk
IiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MzAsNyArNDE1LDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwg
Y29uc3QgY2hhciogdG9rZW4pCiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tl
biwgIiIpOworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwg
dG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwyNiBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmlu
ZyYgaWRlbnRpZmllcikKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAi
cmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5M
ZXZlbCgpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09
IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09
IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3Bl
YykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIp
ID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndl
YmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
IndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDAp
IHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8i
LCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2Vi
Z2xfIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZp
ZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5k
KCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3
byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwg
aWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBj
b25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGlu
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWRlbnRpZmllcnMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBh
cmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01
MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVj
ayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbgogICAgICAgICB0eXBlLT5z
ZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBl
LT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJy
YXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFy
cmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoYXJy
YXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1k
ZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4ICYmICF0eXBlLT5pc0FycmF5KCkpIHsK
ICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgICAg
ZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFr
ZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgZXJyb3IobGlu
ZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJn
dW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewotICAgICAgICBlcnJvcihsaW5lLCAidG9v
IG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0
eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNv
bnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1
cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiTnVt
YmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBv
ZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSB8fCAhbWF0cml4SW5NYXRyaXgp
IHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYm
IHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8CiAgICAgICAgICAgICAob3AgPT0gRU9w
Q29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpKSB7Ci0gICAg
ICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1
Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAibm90
IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgVEludGVy
bVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiAwOwogICAgIGlmICh0
eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBk
b2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0
cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAob3AgIT0gRU9w
Q29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIi
LCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0
eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
Y2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJv
cihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcgKzU3Miw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9kZSogbm9kZSwg
VEZ1bmN0aW9uCiBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsK
ICAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZp
ZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs1
ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29s
RXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlm
ICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0
eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiBib29s
IFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlw
ZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJh
eSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihs
aW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJy
b3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6c2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwg
Y29uc3QKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElz
U2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJh
c2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwg
Z2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZQogewogICAgIGlm
ICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0g
RXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgogICAg
ICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fu
bm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5x
dWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRo
IGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0NSw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRR
dWFsaWZpZXIgcXVhbGlmaWVyLCBjCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8
IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAgICAgICAgdHlwZS5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMi
LCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBs
ZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjkwLDE0ICs2NzcsMTQgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlw
ZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3Rh
bnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3RhbnQgPT0gMCB8
fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAi
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3Rh
bnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25z
dCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkg
c2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwogICAg
ICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzEzLDcgKzcw
MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwg
VEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBp
ZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09
IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlz
IG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
dGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBl
IHR5cGUpCiAgICAgLy8gQ2FuIHRoZSB0eXBlIGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYg
KHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5
cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMi
LCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2NywzNCArNzU0LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6YXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSB0CiAKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
ICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJ
TlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwg
IiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBu
ZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1Zhcmlh
YmxlKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlk
ZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxl
IGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUq
PihzeW1ib2wpOwogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJh
eSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJl
ZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBz
aXplIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVF
bGVtZW50VHlwZShUVHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
Y2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJy
YXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJs
ZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewog
ICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsK
LSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkg
dXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRo
ZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJh
eVNpemUpOwpAQCAtODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRN
YXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICBi
b29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5m
aW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0
U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQg
aWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJp
YWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlwZSwgaW50IHNp
emUsCiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYgKG5vZGUtPmdldFN5bWJvbCgpID09ICJn
bF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCogZnJhZ0RhdGEgPSBzeW1ib2xUYWJsZS5m
aW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdEluKTsKLSAgICAgICAgaWYgKGZyYWdEYXRh
ID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBkZWZpbmVkIiwgbGluZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZnJhZ0RhdGEpOwog
CiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJh
Z0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKICAgICAgICAgaWYgKGZy
YWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwg
ImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9N
YXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJn
bF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4
RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJy
b3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpCiAgICAgLy8KICAg
ICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgdHlwZS5xdWFsaWZp
ZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBx
dWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2Nv
bnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUKICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBl
KHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAg
dmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4OTAsNyBAQCBi
b29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZQogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hl
Y2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlm
aWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCAm
JiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJxdWFs
aWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3Qg
YWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlm
aWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocXVhbGlmaWVyID09
IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CkBAIC05MjQsOCArOTA4LDkg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNp
b25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAg
VEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZp
b3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJlaGF2aW9yLmVu
ZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGV4dGVu
c2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAgaWYgKGl0ZXIg
PT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIs
IGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleHRl
bnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdhcm4p
IHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNpb24gKyAiIGlz
IGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5p
bmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9u
IiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCiAK
IGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5z
aW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4
dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKLSAgICByZXR1cm4gKGl0ZXIgIT0gZXh0
ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsKKyAgICBy
ZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkpOworfQorCit2b2lkIFRQYXJzZUNvbnRl
eHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFt
ZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0aW9uIGxvYzsK
KyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUpOworICAgIGRp
cmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxvYywgZXh0TmFtZSwgYmVoYXZpb3IpOwor
fQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShpbnQgbGluZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6OlNvdXJjZUxv
Y2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5maWxlLCAmbG9jLmxp
bmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlUHJhZ21hKGxvYywgbmFtZSwgdmFsdWUp
OwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTk3MCwxMiArOTY5LDEyIEBAIGNv
bnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGludCBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGJvb2wgKmJ1CiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5k
IiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIm5v
IG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19z
dHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3ltYm9sLT5pc0Z1
bmN0aW9uKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQi
LCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiZnVu
Y3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlk
ZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlh
YmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2Vk
IGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAvLyBwb3Agd2ls
bCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHUKICAgICAvLwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFU
ZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2
cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMg
dHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJp
bmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMg
dHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJp
bmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLwpAQCAtMTAyNCwxMyAr
MTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNl
TG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogCiAgICAgaWYgKHF1YWxpZmllciA9
PSBFdnFDb25zdCkgewogICAgICAgICBpZiAocXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNzaWdu
aW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsIGV4
dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CiAgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6
ZXIgIiwgCi0gICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJT
dHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFs
aWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlh
bGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHUKICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsK
ICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0
byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCku
Y19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBl
eHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTIzNCwxNCArMTIzOSwxNCBAQCBU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUq
IHR5cGUsIFRPcGVyYXRvciBvcCwgVAogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOwogICAg
ICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5ld05vZGUg
PSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUo
KSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAgZXJyb3Io
bGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSogdHlwZSwgaW50
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVn
YXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCAi
Y2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcGFyYW1Db3Vu
dCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNp
Y1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5v
dCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFtQ291bnQgCisgICAgICAgICAgICAgICAgICAg
ICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFz
aWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+
Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1
Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgIH0KIApA
QCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeQogICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAg
ICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBpZiAoIXVuaW9uQXJyYXkp
IHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2VkCi0gICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFu
dFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVuY3Rpb24iLCBs
aW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBpZiAoIXVuaW9uQXJyYXkp
IHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8g
VGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBu
b2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzEx
LDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFZlY3Rv
ck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHkKIAogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tp
XSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVk
JyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4
dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNbaV0gPDwgIici
OworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5v
ZGUsIFQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUt
PmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJtYXRy
aXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOworICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVh
bSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwg
IiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAg
ICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAtMTM0NSw3ICsx
MzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUo
aW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFQKICAgICAgICAgIGludCBzaXplID0gdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAgICAgICB0eXBl
ZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVtzaXplKmlu
ZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1h
dHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFMKICAgICBhcnJh
eUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXggPj0gbm9kZS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRleCk7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4
IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7
CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0KQEAgLTEzODAs
NyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJheU5v
ZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTCiAgICAgICAgICBDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1
bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdl
dFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5v
dCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CiAgICAgICAgIHJl
Y292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyArMTQzMiw3IEBAIFRJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmll
ciwgVEludGVybVR5cGVkKiBuCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2FsbGlu
ZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zm
c2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7CiAgICAgICAg
IHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0OSw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihpbnQgbGluZSwgY29uc3Qg
VFN0cmluZyYgaWRlbnRpZmllcikKICAgICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wg
ZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8gc28gd2UgZG9u
J3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRjaCBpdC4KICAgICBpZiAoc3RydWN0
TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0
cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3IEBAIGNvbnN0
IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VDb250ZXh0Ojpz
dHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBlJiBmaWVs
ZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BFQykgeworICAgIGlm
ICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1
Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBlJiBmaWVsZFQK
ICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGF0IHRo
aXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBzdHJ1Y3QgbmVzdGlu
Zy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVzdGluZygpID4ga1dl
YkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsICJSZWZl
cmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9m
ICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkuY19zdHIoKSwga1dl
YkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVuY2Ugb2Ygc3RydWN0
IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIgPDwga1dlYkdMTWF4
U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgyLDEwNSArMTUwMSwx
NyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmlu
ZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAvLyBzZXR1cCBwcmVwcm9jZXNz
b3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAg
RGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKTsKLQogICAg
IGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29udGV4dCkpCiAgICAgICAgIHJldHVybiAxOwogCi0g
ICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7Ci0gICAgaW50
IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250ZXh0KTsKKyAgICBpbnQgZXJyb3IgPSBnbHNsYW5n
X3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpZiAoIWVycm9yKQor
ICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CiAKICAgICBnbHNsYW5nX2Zp
bmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0gICAgcmV0dXJu
IChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6IDE7Ci19Ci0K
LU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5E
RVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAgICBpZiAoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAg
YXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0
IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KLSAgICAvLwotICAgIEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwotICAgIAotICAgIGlmIChHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBh
c3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQg
YWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQotewotICAg
IE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OwotCi0gICAg
aWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0g
ICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4
dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQot
ICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKLX0KLQotYm9vbCBJbml0aWFs
aXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFs
aXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNl
Q29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0
ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxw
UGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBU
aHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKLSAgICBpZiAobHBUaHJlYWRE
YXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNl
Q29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgs
IGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VD
b250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0KQotICAgICAgICBkZWxl
dGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKGVycm9y
ID09IDApICYmIChjb250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0KIAotVFBhcnNl
Q29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAgLy8KLSAgICAv
LyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAotICAgIC8vCiAKLSAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLQotICAg
IHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5k
ZXggM2UwNTc2My4uOGRlZThmZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTYsOCArNiwxMCBAQAogI2lmbmRlZiBfUEFS
U0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCiAK
LSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxl
ci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTE4
LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29sOwogfTsKIAot
c3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDogb3B0aW1pemUo
byksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBkZWJ1ZzsKLSAg
ICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZvbGxvd2luZyBh
cmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBlZCB0b2dldGhl
ciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91dCBuZWVkaW5n
IGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAg
VFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMg
c3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3QgY2hhciogc291
cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVy
bSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAgIGV4dGVuc2lv
bkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAgICAgICAgICBz
aGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwKICAgICAgICAg
ICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBAIHN0cnVjdCBU
UGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCiAg
ICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAgICAgICBjaGVj
a3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAgICBjb250ZXh0
UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlzKSwKKyAgICAg
ICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAgICAgICAgICBw
cmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAg
ICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8v
IHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJy
ZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhh
dmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBhbmQgY3VycmVu
dCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChm
dXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOyAgICAg
ICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMg
dG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBAIC02NywxNSAr
NjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBlKiBjdXJyZW50
RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiB0aGF0J3Mg
Y3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5zVmFsdWU7ICAg
Ly8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAgIGJvb2wgY2hl
Y2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRl
ZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24sIGV4cGxpY2l0
IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7CiAgICAgVFN0
cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdub3N0aWNzIGRp
YWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRsZXI7CisgICAg
cHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAorICAg
IFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9
CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25z
dCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1h
dCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0iIik7CiAgICAg
dm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQs
IC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0iIik7CisgICAg
dm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3ZlcigpOwogCiAgICAg
Ym9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1NpemUsIFRWZWN0
b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVjdCBUUGFyc2VD
b250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAg
IGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1
YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wgZXh0ZW5zaW9u
RXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29uc3QgVEV4dGVu
c2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2
ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNp
b24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVuc2lvbkRpcmVj
dGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3Ip
OworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZl
SGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0aXZlKGludCBs
aW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNv
bnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAgc3RydWN0IFRQ
YXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAgICAgICAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VD
b250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFy
c2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNv
bnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCi17Ci0gICAg
VFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQYXJzZUNvbnRl
eHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKaW5kZXggYTYwMGMw
Mi4uOWVmNGY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgi
CiAKQEAgLTE1OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9j
ayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNvCiAKICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3MgaGVyZSBq
dXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICAgICAgIHNw
cmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxsb2NhdGlv
biBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNz
ZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHgl
cFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKICNlbHNl
Ci0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICV6
dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2Vy
dE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBh
bGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUs
IGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERh
bWFnZSBpbiBndWFyZCBibG9jayIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ByYWdtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzQ0
MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUHJhZ21hLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJBR01BX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitzdHJ1Y3QgVFBy
YWdtYSB7CisgICAgLy8gQnkgZGVmYXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVkIG9uIGFuZCBk
ZWJ1ZyBpcyB0dXJuZWQgb2ZmLgorICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRydWUpLCBkZWJ1
ZyhmYWxzZSkgeyB9CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwg
ZGVidWcoZCkgeyB9CisKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7Cit9Owor
CisjZW5kaWYgLy8gQ09NUElMRVJfUFJBR01BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNmZGI0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAtMCwwICsxLDM2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKyNk
ZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBk
ZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFtZUZ1bmN0aW9u
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5hbWVGdW5jdGlv
bihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcmIG5ld0Z1bmN0
aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAg
ICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3RnVuY3Rpb25O
YW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7CisgICAgICAgIFRP
cGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0gRU9wRnVuY3Rp
b24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkgPT0gbU9sZEZ1
bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0aW9uTmFtZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUU3Ry
aW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdGdW5jdGlvbk5h
bWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAppbmRleCA5MWM0N2U3
Li4yNjUyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U2hIYW5kbGUuaApAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVNYXA7CiBjbGFz
cyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBXZWJHTCBzcGVj
LAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2ViR0xCYXNlZFNw
ZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBi
YWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3LDggQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJuIHRydWUgaWYg
ZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0UmVjdXJzaW9u
KFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVybWVk
aWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAgICB2b2lkIHJl
d3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQogICAgIC8vIGZ1
bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBBLgogICAgIGJv
b2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03OSw2ICs4OCwx
MyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9k
ZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2
ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhU
SW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3JjZVZl
cnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50
IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMg
d2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBlbmZv
cmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFw
aCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBi
ZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCAxM2YxMWI1Li41NmY1YzdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCkBAIC03
MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hhZGVySW5mbyB2
YXJUeXBlLAogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoID0gMSArIE1BWF9T
WU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZlVW5pZm9ybUFuZEF0dHJpYk1h
eExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKSk7CiAgICAgc3Ry
bmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxl
bmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoIC0gMV0gPSAwOwog
ICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRo
YXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNo
R2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1B
WF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVja01hcHBlZE5hbWVNYXhMZW5n
dGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAgICAgIHN0cm5jcHkobWFwcGVk
TmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1hcHBlZE5hbWVMZW5ndGgpOwor
ICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGggLSAxXSA9IDA7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcAppbmRleCBlZGJlYTk5Li42OGYwMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKQEAgLTE2LDkgKzE2
LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIAogI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEgcGxhY2UgdG8g
bGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUo
VFN0cmluZyYgbWFuZ2xlZE5hbWUpCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hh
cj4oJzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAg
ICBjaGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJheVNpemUpOwor
ICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNpemUpOwogICAg
ICAgICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9IGJ1ZjsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKaW5kZXggOTZkN2YxMC4uZjQx
ZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAKIFRyYW5zbGF0
b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNw
ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTZWxlY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4NWU2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0aGUgc2VsZWN0
IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQotI2luY2x1ZGUgImNvbXBp
bGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNp
bmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5mb2xk
U2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAq
b3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkK
LXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNlbGVjdDo6dHJh
dmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBv
cmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotICAgIG1UZW1wb3JhcnlJbmRl
eCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKLQotICAgIGlmIChub2RlLT51
c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJ
bmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
LSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAg
ICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNl
QmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwg
IiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5n
ZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7
XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBp
ICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5mb2xkU2VsZWN0
Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGludCBy
ZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgIGlmIChub2RlLT5nZXRJbml0KCkp
Ci0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0K
LSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICBub2Rl
LT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUt
PmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5k
ZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6OmdldE5leHRU
ZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOwotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNl
bGVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNiYTVmLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAorKysg
L2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRT
ZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVyYXRvciA/
OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VM
RUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
LQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBVbmZvbGRTZWxl
Y3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2Vs
ZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0g
ICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAgYm9vbCB2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGludCBnZXROZXh0
VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29udGV4dCAmbUNv
bnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAgICBpbnQgbVRl
bXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNU
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3ODJlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVu
dHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNo
IGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdp
bmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6
OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpv
dXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQor
eworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0
Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBt
VGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFy
eUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAg
ICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZv
bGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisgICAgICAgIC8v
IGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZighcykg
cyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7
CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAg
ICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlm
KCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0g
IjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9k
ZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8
ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAi
fVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAg
ICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hpY2ggdW5m
b2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwKKyAgICAgICAg
Ly8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKHMp
IHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4
OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAg
ICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJp
ZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0g
IjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9k
ZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8
ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAi
fVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRl
cm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhM
U0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0
eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5h
cnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisK
KyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkg
PDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91
dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOwor
ICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAg
ICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpbnQgcmV3
aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQor
ICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlmIChub2RlLT5n
ZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXRO
ZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKK30K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTaG9ydENpcmN1aXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
YjE3NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRw
dXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmluZSBDT01QSUxF
Ul9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAor
eworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0Q2lyY3VpdChU
UGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKworICAgIHZv
aWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRUZW1wb3JhcnlJ
bmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAg
ICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5SW5k
ZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0
ZUxpbWl0YXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcAppbmRleCA3NjdkMGJmLi5kNjllYzZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRl
TGltaXRhdGlvbnMuY3BwCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvVmFs
aWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFjZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAppbmRleCA5NjQyZTFlLi41Mzc3OGJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKQEAgLTEx
LDYgKzExLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCisj
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVu
ID0gMTAyNDsKQEAgLTI4LDcgKzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFyICpmb3JtYXQs
IC4uLikgewogICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwg
YXJncyk7CiAgICAgICAgIHZhX2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNvbnRleHQtPmlu
Zm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFjZShidWYpOwog
ICAgIH0KIH0KIH0gIC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NjFkNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChU
SW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5k
ZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRl
cikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVs
ZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVu
dE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJn
dW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVz
LnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhG
dW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxs
KiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5j
dGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAg
ICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdy
YXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7Cisg
ICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQo
aW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVM
TDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3lt
Ym9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1i
b2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5
bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAg
bVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1w
bGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVy
c2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1i
b2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2Jh
Y2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxl
Y3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9u
KiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBu
ZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hf
YmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3Aq
IFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7
CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAg
IG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFw
aExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5h
cnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9
IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVz
aF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hh
ciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hh
ciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdl
dE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIG9wU3RyaW5nOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWMzNWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQ
SF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5o
IgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2Rl
OworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3Mg
VEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2Vs
ZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNz
IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRl
ZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3Rk
Ojp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6
OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLwor
Ly8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3Mg
VEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkg
OiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAg
dmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJh
dmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisK
Ky8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhh
dmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhO
b2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6
IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30K
KyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAh
PSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3By
aXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8g
SGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50
IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50
KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVy
KQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAg
ICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3Jh
cGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVu
Y3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsg
fQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51
bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7
Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1
bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3Jh
cGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAg
ICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1
YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSog
Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNB
Z2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMu
CisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVi
bGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdy
YXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9s
KCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7
IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9
OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgor
Ly8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoK
KyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6
IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVj
dGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUg
bG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1Ymxp
YzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUo
aW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBU
SW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdl
dEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2lj
YWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9k
ZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxv
Z2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5U
R3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxv
Z2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9
CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsK
KworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywg
Y29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2Ug
dG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBl
bmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUg
cHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkg
ZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMg
bWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2Rl
cyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlz
dHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgo
KTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBU
R3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAg
IH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5
bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQo
KTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdp
blVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlv
bkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5l
bmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAg
IFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJv
bChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3Jl
YXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdy
YXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBo
TG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9w
KTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJv
bElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJv
bElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5
bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNl
ckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9
OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNo
b3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBk
YXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8v
CisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMg
eW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsK
K3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30K
KworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlv
bikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9u
Q2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24o
VEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExv
b3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9w
KFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNv
bnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURl
cHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZv
aWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlz
aXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJv
b2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZp
bmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsK
KyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDU4NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcApA
QCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkK
K3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsKKyAgICBidWls
ZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRl
KQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7CisgICAgICAgIGNh
c2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5jdGlvbkNhbGwo
aW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRl
Q2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVm
aW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgLy8gQ3Vy
cmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgorICAgIGlm
IChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAgICByZXR1cm47
CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8v
IFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5
IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCIuCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVn
YXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5j
dGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNhbGwp
OworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorICAg
IGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1
bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4o
KTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAgICAgICAgKytp
dGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVy
IG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1B
cmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVyc2UodGhpcyk7
CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0gbU5vZGVTZXRz
LmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBt
R3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIp
OworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXJndW1lbnRO
b2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVuZGVudE5vZGUo
ZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2ggdGhlIGxlZnRt
b3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVudCBzZXQgb2Yg
ZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlz
IGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4
KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4IC0+IGFyZ3Vt
ZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFs
bHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBlYXJsaWVyIHZp
c2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0
aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0
KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0
QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQorewor
ICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVl
bmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNl
cXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICB7Cisg
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAgICBpbnRlcm1D
aGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAg
Ly8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgZm9y
IHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUg
dHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVh
dGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChz
eW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qg
c3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3VzCisgICAgLy8g
bGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVmdG1vc3RTeW1i
b2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkg
eworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVmdG1vc3RTeW1i
b2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkp
Cit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOworICAgIGlmIChv
cCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0ZSgpKQorICAg
ICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlmIChvcCA9PSBF
T3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlzaXRMb2dpY2Fs
T3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5Q2hpbGRyZW4o
aW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGludGVybUFzc2ln
bm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQXNzaWdubWVu
dC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7CisgICAgICAg
IFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICB7
CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJtTGVmdC0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0bW9zdFN5bWJv
bHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhlIGxlZnQgc3Vi
dHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEgcmVhbAorICAg
ICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5bWJvbCBzaG91
bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1i
b2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wg
IT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJbnRlcm1UeXBl
ZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7CisgICAgICAg
ICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0
aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXNzaWdubWVu
dE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29ubmVjdE11bHRp
cGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5bWJvbCk7Cisg
ICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgYXNzaWdubWVu
dCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAgIC8vIHJl
cHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBBbiBleHByZXNz
aW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtl
ICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBhc3NlcyB0aGUg
bGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGluIHRoaXMKKyAg
ICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdubWVudCBjYWxs
IGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNyZWF0ZSB0aGUg
Y29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChsZWZ0
bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9n
aWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkpIHsKKyAgICAg
ICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7
CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFy
ZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAg
ICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRlTG9naWNhbE9w
KGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2lu
Z2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+Z2V0UmlnaHQo
KSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlz
aXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgaWYg
KFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVmdCgpKQorICAg
ICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQq
IGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdo
dFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQor
fQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRDb25kaXRpb24o
KSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7
CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYg
KFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkg
eworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3JhcGgtPmNyZWF0
ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxl
Tm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9IGludGVybVNl
bGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9jay0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxvY2sgPSBpbnRl
cm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFsc2VCbG9jay0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJt
TG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9kZXMgPSBtTm9k
ZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxvb3AgPSBtR3Jh
cGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29wLT5nZXRCb2R5
KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRl
cm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJlc3Npb24oKSkK
KyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRp
cGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEdyYXBo
Tm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgpOyArK2l0ZXIp
CisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9ICppdGVyOwor
ICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAgICB9Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jNWYyMzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
REVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQ
R1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kg
Z3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2
ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAg
IHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5
bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5v
ZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhl
IGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRjLgorICAgIC8v
IHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8vCisgICAgLy8g
VGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBk
ZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0
U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OworICAgICAg
ICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0dXJucyBOVUxM
IGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9w
U2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0
eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3Ao
KTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcg
VFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgZGVsZXRl
IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0
aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFm
dGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0
b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0
SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5
KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRv
cCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAgIGlmICghbm9k
ZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BT
ZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChv
bGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9l
cyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgY2FuIGJl
IGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCisgICAg
ICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0
aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCisg
ICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
d2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNldCgpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVu
dE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJlbnROb2RlU2V0
U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2Yg
dGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAg
Ly8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBu
b2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7CisgICAgcHVi
bGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIq
IGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMu
cHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0
KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAg
fTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBu
ZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2Ug
Z29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMg
aXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisgICAgLy8KKyAg
ICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAg
ICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRl
ciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0
cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkg
eyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2Rl
U2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2Yg
dGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3Jl
IGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2lsbCBwdXNoIHRo
ZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVy
IGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQg
c3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0
aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAgIC8vIER1cmlu
ZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xl
ZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwg
bmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2lu
ZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFzcyBUTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0bW9zdFN5bWJv
bE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJv
bCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0
bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1i
b2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0g
JnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAg
ICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKwor
ICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0
U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3lt
Ym9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVy
U3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5j
eUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBm
YWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0
cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQgYnVpbGQoVElu
dGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KKwor
ICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQq
IG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlzaXRBc3NpZ25t
ZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5h
cnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOworICAg
IHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZv
aWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxs
KTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOwor
CisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0
U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0
YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOworfQorCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBh
cmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1
bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8g
IgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5h
bWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVu
Y3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1
dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rp
b25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBz
eW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wt
PmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAg
ICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVj
dGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsg
PDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNp
dExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
T3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNh
bE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sK
KyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVy
KQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1T
aW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAg
ICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDQ3ZGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9I
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0
aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5j
eUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsK
KworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
RVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iMTU4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcApAQCAtMCww
ICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0
cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9p
ZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisK
K3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2
ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAv
LyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBo
VHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShn
cmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERl
cHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNp
dEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZl
cnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2
ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdy
YXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+
dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExv
Z2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaApp
bmRleCAyNmYxNDU3Li4zYTQ1ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLmgKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0
OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAK
LWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLmwKaW5kZXggOWEwMzk0Yi4uYjlhMzAyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0xLDYgKzEsNiBA
QAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUs
NyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCku
CiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiArMzgsNyBAQCBX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCiAlewog
I2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhl
bHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNp
bmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAt
MTU5LDYgKzE2MCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYi
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBAQCBPICAgICAg
ICAgICBbMC03XQogImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CiAiaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KICJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZl
YzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogMFt4WF17
SH0rICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0
cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9KyAgICAgICAg
ICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwg
eXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KKzB7RH0rICAg
ICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJl
ci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtEfSsgICAgICAg
ICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5U
Q09OU1RBTlQpOyB9CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRp
Y19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9
CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQogCisjaWYgIUFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBp
bnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIK
IAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpu
YW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1
Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpA
QCAtMjcyLDI2ICsyODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVnTG9nTXNnKGNv
bnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+
aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBjb250ZXh0LT50
cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNn
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJuaW5nKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
Iik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIs
ICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3Zv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiB9CiAKQEAgLTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJlcigpCiB2b2lk
IEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQogewogICAg
IFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6
ZSIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRv
a2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBl
Y3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9u
IikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVk
IGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikp
IHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdv
cHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAgICBpZiAobnVt
VG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21h
IHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3Jk
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29u
dGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5z
WzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0g
ZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9u
XCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJj
bXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwi
IGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAgICAgICAgLy8K
LSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAgICAgIC8vIHVz
ZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSB0
byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8vIEZvciBub3cs
IGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gY2Fubm90IHJl
Y29nbml6ZQotICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxlbWVudGF0aW9u
IGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8vICNwcmFnbWEg
cHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBz
dG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21hIG5hbWUgaW4g
cHJhZ21hVGFibGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51bVRva2VucyA9
PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5zWzNdLCAiKSIp
KSB7ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUg
PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsK
LSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0
ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBp
ZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNl
Y29uZCA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSAgICAg
ICAgCi0gICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAgICAgICAgIFRQ
cmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29u
dGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0
b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9r
ZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewot
ICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5z
WzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01BX1RBQkxFCi0g
ICAgfQorCisgICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0
b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAi
KSIpICE9IDApIHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5
eWxpbmVubywgdG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3JlU3RyKGNoYXIg
KnN0cmluZykKK3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewogICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSArMzkzLDMzIEBA
IHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwog
fQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAg
aWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1
aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAg
cmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZp
b3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3
YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciAr
ICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2Fi
bGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29u
c3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09O
VEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2
aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAg
IFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNp
b24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2
aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVx
dWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQo
KTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwot
ICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+
ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0
ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHRO
YW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJo
V2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cg
PSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQi
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRl
bnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4
dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBz
dHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikg
ewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXpl
KSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0g
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFy
Z2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOwotCi0gICAgYnVmW2xlbl0g
PSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGludCBsZW4gPSAwOworCisjaWYgQU5HTEVf
VVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRfZXh0
cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxlbiA9IHRva2Vu
LnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUoKTsKKyAgICBp
ZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNweShidWYsIHRv
a2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxv
Yyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlzY2FubmVyKTsK
KyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBB
TkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAg
ICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2Ug
aWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsK
IH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01NDQsOSArNDUw
LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNv
bnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOwor
ICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0Yi
KTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29u
LCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwg
eXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtNTY1LDIyICs0
NzEsNDMgQEAgaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewog
ICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOwogICAgIAogICAgIGNvbnRleHQtPnNj
YW5uZXIgPSBOVUxMOwotICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworICAgIHl5
bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IK
KyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworI2VuZGlmCisgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQpIHsKK2ludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250
ZXh0KiBjb250ZXh0KSB7CiAgICAgeXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNjYW5uZXIpOwog
ICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQtPnNjYW5uZXIp
OwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gSW5pdCBwcmVw
cm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNpZiBBTkdMRV9V
U0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgIGlm
IChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNwcC0+cEMgPSBj
b250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0g
c3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4g
ICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZy
b21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50
LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAvLyBBTkdMRV9V
U0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVu
c2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhh
dmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAg
ICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNf
c3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3Qu
Y19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4IGQ2Yzg4Njku
LmFiNGFhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueQpAQCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKICNkZWZpbmUgRlJBR19WRVJUX09O
TFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5U
X1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9T
SEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVy
dGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5
ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQog
CiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVy
VHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25s
eSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0K
IAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVy
cyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAg
XAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgY29u
c3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBUVmFyaWFibGUq
IHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xh
cmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZhcmlhYmxlX2lkZW50aWZp
ZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4g
b25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAgICAgICAgICAgICBpZiAoISBzeW1ib2wt
PmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFy
aWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHByaW1hcnlfZXhwcmVzc2lvbgog
ICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAgICAgICAvLwog
ICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBv
dmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VU
IHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgoKSAmJiAhJDEt
PmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xOb2RlKCkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBu
b3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4
LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3Rv
ciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZl
Y3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjU0LDcgKzI1
NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgICAgICAgICBp
ZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0VHlwZSgpLmdl
dE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5m
b1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICIn
IjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3LDcgKzI3MCwxMCBAQCBwb3N0Zml4X2V4
cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
IiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRl
eCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIs
IGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB9CiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CiAgICAgICAgIGlmICgk
MS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8g
YW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIg
ZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRl
ZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMzczLDcg
KzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5k
ID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRU
eXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVs
ZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQk
ID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1LDEzICs0MTEsMTMgQEAgcG9zdGZp
eF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVs
ZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBz
dWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4g
c3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVy
ZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2Vs
ZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5k
IHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgfQpAQCAtNTAwLDkgKzUwNiwxMCBA
QCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAk
MS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBl
IiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1
aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1O
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRv
ciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oJDEuaW50
ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTUyNiw3
ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0g
Zm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVj
aygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVl
bmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFs
dWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJF
cnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBh
c3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTUxLDcg
KzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAgICAgICAgICQkID0gJDE7CiAgICAg
fQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgewot
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRl
ZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFy
ZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1NCw3IEBAIGZ1bmN0aW9uX2lkZW50aWZp
ZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50
eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgJDEudHlwZSA9
IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0x
MDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICBURnVuY3Rpb24q
IHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5m
aW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAg
ICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBl
KCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBy
ZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewog
ICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25z
IG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRo
ZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1
YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNjAsNyArMTA2Nyw3IEBA
IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKICAgICAgICAgICAgIC8vCiAgICAgICAg
ICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50
IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBm
b3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0x
MDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCiBmdW5jdGlv
bl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9QQVJF
TiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQxLnF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRR
dWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3Qg
aW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsxMTAyLDcgQEAgcGFyYW1ldGVyX2RlY2xh
cmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklF
UiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmlu
Zy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImls
bGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29udGV4dC0+
cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQpAQCAtMTE5MSw3ICsxMTk4
LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFyaWFu
dCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
My5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQz
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGlu
ZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJp
bmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAgICAg
c3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgfQogICAgIHwgZnVs
bHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7
Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0
aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3Vw
cG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKTsKQEAgLTEzNjQs
NyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgICAgICAkJC50eXBlLnNldEJhc2lj
KEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDIubGluZSk7CiAgICAgICAg
IGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQy
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMi5zdHJp
bmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwpAQCAtMTQzOCw3ICsxNDQ1
LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAkMSk7
CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC52YXJpYWJs
ZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlv
biIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAg
ICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhlIHBvb2wgcG9w
IHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQpAQCAtMTQ1MCwyNiArMTQ1NywyNiBA
QCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAgICAgIGlmICgk
MS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vdCBzdXBw
b3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFs
c2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZp
ZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0
LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJDEucXVh
bGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9v
bCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVh
bGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5v
dCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKCQx
LnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdP
dXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gJDI7CkBAIC0xNjU0LDcgKzE2NjEs
NyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJO
QUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1w
bGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VTIiwgJDEubGlu
ZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIH0K
ICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0
ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICQxLmxpbmUp
OwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVzdF9zdGF0ZW1lbnQKIGp1bXBfc3RhdGVt
ZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewogICAgICAgICBpZiAoY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAgICB8IEJSRUFLIFNFTUlDT0xPTiB7
CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2Vk
IGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CkBAIC0xOTgxLDcgKzE5
ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7CiAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQxLmxpbmUp
OwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5v
bi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEwICsxOTk2LDEwIEBAIGp1bXBfc3RhdGVt
ZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1
cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUg
PSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5v
dCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUp
ICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMg
bm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAzNyw3ICsyMDQ0LDcgQEAgZnVuY3Rpb25f
ZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5j
dGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1l
KCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtMjA0Nyw3ICsyMDU0LDcgQEAgZnVu
Y3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5h
bWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3Vu
dCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5j
dGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1
bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgp
LmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
VHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyArMjA4Niw3IEBAIGZ1bmN0aW9uX2RlZmlu
aXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1l
IGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAg
ICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFy
aWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNf
c3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTE2
LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAKICAgICAgICAgLy8gc3RvcmUgdGhl
IHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5k
b3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2Fu
IGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAg
ICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUo
Y29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICQkLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAg
ICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1
Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRBc0FnZ3JlZ2F0ZSgpKQogICAgICAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoJDMtPmdldEFzQWdncmVnYXRlKCkt
PmdldEVuZExpbmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRleCA1OWI3Mjk5Li5kMjlkOTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAK
QEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9y
ICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCSp5eV9jcCA9ICdc
MCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1fUlVMRVMg
MTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05VTV9SVUxFUyAx
NTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0IGlzIG5vdCB1
c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAq
Lwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0cnVjdCB5eV90
cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0
OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQyNl0gPQorc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7ICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0NiwgIDE0NSwg
IDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwgIDEzMywgIDEy
MiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDExOSwgIDEzNywg
IDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAgMywKLSAgICAg
IDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwgIDEwMCwgIDEw
OCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEwMSwgICA5Niwg
ICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwgIDEyNywgIDEx
NywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDExMiwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIyLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgMTA3
LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAwLCAgICAwLCAg
IDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAgOTAsICAgMjgs
ICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAs
ICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcsICAgOTAsICAg
OTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAgMTIsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAgICAgICAzMCwg
ICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwgICA3OSwKLSAg
ICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0MSwgICA5MCwg
ICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA3
MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA1Miwg
ICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAgICA2NSwgICA0
OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5MCwgICA5MCwg
ICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAgICA2LCAgIDg4
LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAg
IDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAxNDksICAxMzMs
ICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMsICAxMDIsICAx
MDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisgICAgICAxMzUs
ICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjksICAxNDAsICAg
IDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAxMTAsICAxMjks
ICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcsICAxMDUsICAg
IDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAgIDAsICAxMDIs
ICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAgICAxMjYsICAg
OTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisKKyAg
ICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAgIDE1MSwgICAg
MCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDExMiwKKyAgICAg
ICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAgIDk4LCAgIDk1
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIxLCAg
IDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAgIDU4LCAgIDcz
LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAgIDk4LCAgIDk4
LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAgMzAsICAgNzQs
ICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAsICAgODEsICAg
OTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAgNDEsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAg
NzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgs
ICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQsICAgNjUsICAg
NDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgIDgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAgOTgsICAgMTQs
ICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA2Miwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwgICA2MywKKyAg
ICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4OSwgICA5OCwg
ICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDIs
ICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAg
IDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcs
Ci0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAsICAgMjEsICAg
MjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAgMjcsICAgMjgs
ICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAg
MzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAgMzQsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYsICAgIDEsICAg
MzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0KLSAgICAgICA0
MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1MCwgICA1MSwK
LSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1
OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAy
MSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAyNywgICAgMSwg
ICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwgICAzMiwgICAz
MiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAgICAgICAzMiwg
ICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwgICAzMiwKKyAg
ICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0MSwgICA0Miwg
ICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMyLCAgIDQ5LCAg
IDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAgIDU2LCAgIDU3
LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAg
IDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3Qg
eXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsK
IAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAg
IDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAg
IDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAgICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
CiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICAg
ICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAg
IDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNjAy
LCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMxLCAgMTI5LAot
ICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAgIDQ3LCAgNjI4
LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3LCAgMTU4LCAg
MTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAgMTU2LCAgNTYz
LCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcyLCAgNjI4LCAg
MTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAgNjI4LCAgICAw
LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNjI4LCAg
NjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAgMjcxLAotICAg
ICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4LCAgNjI4LCAg
NjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAgNTYwLCAgNTY4
LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1NDcsICA1NjAs
ICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIsICA1NTIsICA1
MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAyNDEsICA1MzMs
ICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAgICA1MjUsICA1
MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1MjAsCi0gICAg
ICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2MjgsICA2MjgsICAg
IDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAgIDAsICA2Mjgs
ICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgsICA1MDgsICAy
MDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1MTMsICA1MDAs
ICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMsICA1MDcsICA1
MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0ODcsICAyNDcs
ICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUsCi0KLSAgICAg
IDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwgIDQ4MCwgIDQ3
OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3OCwgIDQ2Nywg
IDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2NiwgIDI3NiwgICAg
MCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5MSwgICAgMCwg
ICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwgICAgMCwgIDQ1
MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4MiwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywKLSAgICAgIDQ1
MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0NCwgIDQ0MywK
LSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwgIDQzMywgIDQz
MCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQzNCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywgIDQxNywgIDQy
NywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1LCAgICAwLCAg
ICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAotICAgICAgNDE2
LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEyLCAgNDE0LAot
ICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAgICAwLCAgMzk3
LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAwLCAgNDAzLCAg
ICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAgICAwLCAgMzg5
LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgMzc4LCAg
Mzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAgICAwLCAgICAw
LCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAgICAgMzg1LCAg
MzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAgICAwLAotICAg
ICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1LCAgICAwLCAg
ICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAyNzksICAy
NzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAyMDgsICAxODgs
ICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgsICAgIDAsICA2
MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAgMCwgICA2NSwg
ICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY1NCwgICA0
NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEzMSwKKyAgICAg
IDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0NywgIDY4MSwgICAg
MCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1NiwgIDE0Niwg
IDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3NywgIDYxNSwgIDE3
OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4MSwgIDE1Nywg
IDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwgICAgMCwgIDY4
MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4MSwgIDY4MSwg
IDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwKKyAgICAgIDMw
NCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4MSwgIDY4MSwK
KyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwgIDYyMCwgIDYx
OSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAgNjEyLCAgNTk5
LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1LCAgNTkxLCAg
NTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAgNTg2LCAgNTk5
LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4LCAgNTgzLCAg
NTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAorICAgICAgNTcy
LCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgxLCAgNjgxLAor
ICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAgICAwLCAgNjgx
LCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYwLCAgNTYwLCAg
MjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAgNTY1LCAgNTUy
LCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3LCAgNTU0LCAg
NTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAgNTQ3LCAgNTM4
LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisgICAgICA1MzUs
ICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAsICA1MjIsCisg
ICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAyNjQsICA1MjYs
ICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgsICAgIDAsICA1
MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1MjAsICA1MDks
ICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAsICA0OTgsICAz
NDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0OTQsICA0OTUs
ICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0OTAsICA0
OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0ODIsCisgICAg
ICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAsICA0ODksICA0
NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwgICAgMCwgIDQ2
NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2NywKKyAgICAg
IDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwgIDQ2MSwgIDQ1
NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAgMCwgIDQzNywg
IDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwgIDQ0OSwgIDQz
NCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAgMCwgIDQyOSwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywgIDQzMCwgIDQz
NiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQyNSwgIDQzMiwg
IDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwKKyAgICAgICAg
MCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQwNywgIDQxOSwK
KworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2LCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDIxLCAgMjUw
LCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzkyLCAgMzkxLCAg
MzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAgMzQzLCAgMzE3
LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAwLCAgMzAyLCAg
MjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAorICAgICAgMjA2
LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQyLCAgNDQ0LAor
ICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQ2
NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAgNDI1LCAgICA1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMwLCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI3
LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0MjUsICA0Mjks
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwgICAgNSwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2
MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MCwgIDQ1
OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAgNDU4LCAgNDYy
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjk1XSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsgICAwLAogICAg
ICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAg
IDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAg
IDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3LCAgIDM4LCAg
IDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMwLAotICAgICAg
IDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LCAgIDY2
LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4LCAg
ICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5
LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4
LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0LCAgIDQ1LCAg
IDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAorICAgICAgIDMw
LCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LAor
ICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4
LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgsICAgIDgsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAgNjMs
ICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCiAg
ICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsICAg
IDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUsICAgOTYsICAg
NzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAgOTgsICAyMTcs
ICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAgICAgNzksICAg
NzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAgODMsCi0gICAg
ICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgsICAxNTcsICAg
ODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAxNDcsICAgODEs
ICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEwNCwgICA4MSwg
IDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwgIDExMiwgICA4
MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQyMSwgIDExNCwg
IDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAgIDIwNCwgIDE0
MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4NiwKLSAgICAg
IDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwgICA3NCwgICA3
NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1Mywg
IDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwgIDI1NiwgIDQx
NiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwg
IDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwgIDQxMywgICA3
OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgIDE5MCwg
IDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwKLQotICAgICAg
IDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAgMjk4LCAgMjk5
LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAgMjE5LCAgNDA4
LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgxLCAgMzA4
LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1LCAgMTU0LCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAotICAgICAgMTU2
LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAot
ICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgNDA0
LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0MDMsICA0MDIs
ICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIsICAzOTEsICAz
OTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0gICAgICAgOTIs
ICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcsICAzODYsCi0g
ICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcs
ICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksICAz
NjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAzNjEsICAzNjAs
ICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMsICAzNTIsICAz
NTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAzNDQsICAzNDMs
ICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAgICAzMzUsICAz
MzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsCi0gICAg
ICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAz
MTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwgIDI5
NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4NiwgIDI4NSwg
IDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3MywgIDI3MiwgIDI3
MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2NCwgIDI2Mywg
IDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAgIDI1MiwgIDI1
MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywKLSAgICAg
IDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIz
MywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywg
IDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywgIDIw
NiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5Niwg
IDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4MiwgIDE4MSwgIDE4
MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAgMTczLCAgMTcy
LCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LAotICAgICAg
MTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAgMTMxLCAgMTI3
LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1LCAgICA3LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwKKyAgICAgICAg
OCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwK
KyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3
MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEyMywgICA5NCwg
IDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwgICA3OSwgICA3
OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwgIDEwMCwgIDE0
MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKworICAgICAgNDU1
LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1LCAgIDg3LAor
ICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAgMTI4LCAgMTEz
LCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIwLCAgMTMyLCAg
MTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAgMTM0LCAgMTMw
LCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0LCAgMTM1LCAg
MTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAgIDc0LCAgIDc0
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAgMTg4LAorICAg
ICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5LCAgMjYwLCAg
MTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAgMTU1LCAgIDc5
LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgNDUxLCAg
IDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgODEsICAx
NTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0NTAsICAgODEs
ICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAgICAxNTcsICAx
NTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQsICAyOTUsICA0
NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAyMjMsICAyMjMs
ICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQsICA0NDQsICA0
NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQs
ICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAsICAyMjQsICA0
MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUs
ICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcsCisgICAgICAx
NTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMs
CisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywg
IDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMyMSwgIDMyMiwg
IDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwgIDQzMywgIDQz
MiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQyNiwgIDQwNywg
ICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwKKyAgICAgIDE1
MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywK
KyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDQw
OCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwg
IDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4
NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwg
IDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcxLCAgMzcwLCAg
MzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAorICAgICAgMzYx
LCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLCAgMzUyLAor
ICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQz
LCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAg
MzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2
LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2LCAgMzEyLCAg
MzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAgMjk4LCAgMjk3
LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAgICAgMjgzLCAg
MjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLAorICAg
ICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAg
MjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUx
LCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQsICAyNDMs
ICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAy
MzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAyMjEsICAyMTgs
ICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAgICAyMDgsICAy
MDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsCisgICAg
ICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAx
ODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAs
ICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAx
NjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAxMjIsICAxMTUs
ICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2No
a1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4ICs2OTMsOCBA
QCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAgIDEyLCAgIDI4
LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzY5NV0gPQogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAotICAgICAgIDEz
LCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDMzLAot
ICAgICAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLCAgIDQyLCAgIDEz
LCAgIDM1LAotICAgICAgMTQ1LCAgIDM1LCAgMTQ1LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDIxLCAg
IDIyLCAgIDQxLCAgIDIyLAotICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIz
LCAgIDQxLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDI2LCAg
IDIyLCAgIDM2LCAgIDQ0LCAgIDQxLCAgNDMwLCAgIDIyLAotICAgICAgIDQ0LCAgNDIzLCAgIDIz
LCAgNDIyLCAgIDQ1LCAgIDM2LCAgIDU1LCAgIDIyLCAgIDM2LCAgIDI2LAotCi0gICAgICAgMzcs
ICAgMjYsICAgMjYsICAgMzksICAgMzcsICAgMjMsICAgMzgsICAgNDUsICAgMzgsICAgMzcsCi0g
ICAgICAgNDcsICAgMzksICAgNDksICAgMzksICAgMjIsICAgMzcsICAgMzksICAgMzgsICA0MjEs
ICAgNDksCi0gICAgICAgNDksICA0MjAsICAgMzksICAgNTAsICA0MTksICAgNDcsICAgNTAsICAg
NTEsICAgNDcsICAgNDksCi0gICAgICAxMzUsICAgNTEsICAgNDksICAgNTIsICAgNTAsICAxMjAs
ICAgNTUsICAgNTIsICAxMjAsICAxMjAsCi0gICAgICA0MTcsICAgNTAsICAxMjAsICA0MTYsICAx
MjAsICAxMzUsICAgNTIsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQs
ICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAxNjcsCi0gICAgICAxNjcsICA0
MTUsICAgNzQsICAxOTIsICAxOTIsICAxOTIsICA0MTMsICAgNzksICAgNzgsICAgNzksCi0gICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzQsICAyMTUsICAyMTUsICAyMTUsICA0
MTIsCi0gICAgICA0MTEsICAgNzgsICA0MTAsICAgODAsICAgNzksICAgODAsICAgODAsICAgODAs
ICAgODAsICAgODAsCi0gICAgICAgODAsICAxMjIsICAyMjYsICAyMjYsICAyMjYsICA0MDksICAg
ODEsICAgNzksICAgODEsICAxMjIsCi0KLSAgICAgICA4MCwgICA4MSwgICA4MSwgICA4MSwgICA4
MSwgICA4MSwgICA4MSwgIDIzNCwgIDIzNCwgIDIzNCwKLSAgICAgIDQwOCwgIDQwNywgICA4Mywg
ICA4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgIDE0MSwgIDI0
MSwgIDI0MSwgIDI0MSwgIDM5OCwgIDE1MSwgIDM5NywgIDE1MSwgIDE0MSwgICA4MywKLSAgICAg
IDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MywgIDE1MywgIDE1MywgIDE1
MywKLSAgICAgIDE1MywgIDE1MywgICA4MywgIDI0NSwgIDI0NSwgIDI0NSwgIDM5NiwgIDE1NCwg
IDM5NSwgIDE1NCwKLSAgICAgIDM5MywgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1
NCwgIDE1NCwgIDE1NSwgIDE1NSwKLSAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1Mywg
IDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDIxMSwgIDIxOSwgIDIx
OSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDM5MiwgIDIxMSwKLSAgICAgIDIyMCwgIDIyMCwg
IDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwKLSAgICAgIDIy
MSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDI1MSwgIDI1MSwK
LQotICAgICAgMjUxLCAgMzgxLCAgMzkxLCAgMzg4LCAgMzg3LCAgMzg1LCAgMzgyLCAgMzgwLCAg
Mzc5LCAgMzc4LAotICAgICAgMzc2LCAgMzc1LCAgMzgxLCAgMzc0LCAgMzgxLCAgNDI2LCAgNDI2
LCAgNDI2LCAgNDI2LCAgNDI3LAotICAgICAgNDI3LCAgNDI4LCAgNDI4LCAgNDI5LCAgMzcxLCAg
NDI5LCAgNDI5LCAgMzcwLCAgMzY5LCAgMzY4LAotICAgICAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0
LCAgMzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLAotICAgICAgMzQ5LCAgMzQ3LCAg
MzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LAotICAgICAgMzM0
LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LAot
ICAgICAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAgMzExLCAgMzAw
LCAgMjk2LAotICAgICAgMjk1LCAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0LCAgMjc5LCAg
Mjc4LCAgMjc3LCAgMjc2LAotICAgICAgMjc1LCAgMjc0LCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4
LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LAotICAgICAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAg
MjU5LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LAotCi0gICAgICAyNDcsICAyNDYsICAy
NDQsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzMsICAyMzIsICAyMzEsCi0gICAgICAyMzAs
ICAyMjksICAyMjgsICAyMjUsICAyMjMsICAyMTgsICAyMTcsICAyMTYsICAyMTQsICAyMTMsCi0g
ICAgICAyMTIsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAyMDQsICAyMDMs
ICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsICAxOTUsICAx
OTQsICAxOTMsICAxOTEsCi0gICAgICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUs
ICAxODQsICAxODMsICAxODIsICAxODEsCi0gICAgICAxODAsICAxNzksICAxNzcsICAxNzYsICAx
NzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsCi0gICAgICAxNjksICAxNjgsICAxNjYs
ICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsCi0gICAgICAxNDMsICAx
NDIsICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAxMzIsCi0gICAg
ICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAx
MjEsCi0gICAgICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEs
ICAxMTAsICAxMDksCi0KLSAgICAgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywg
IDEwMiwgIDEwMSwgIDEwMCwgICA5OSwKLSAgICAgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5
MSwgICA4NywgICA2MCwgICA1MywgICA0OCwgICA0NiwKLSAgICAgICA0MywgICA0MCwgICAyNywg
ICAyNCwgICAxNiwgICAxMSwgICAgNywgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNQotCisgICAgICAgIDUsICAgIDUsICAgMTMsICAgMTcsICAgMTksICAgMjAsICAg
MjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMzMsICAgNDIsICAgMjEs
ICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsCisgICAgICAgNDIsICAgMTMsICAgMzUsICA0
NjMsICAgMzUsICAgNDQsICAgMzMsICAgNDIsICAgMzUsICAgNDQsCisgICAgICAgMjEsICAgMjIs
ICA0NTUsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsCisgICAgICAg
MjMsICAgNTUsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjIs
CisgICAgICAgMjYsICAgMzYsICAgNTEsICA0NTQsICAgMjIsICAgMzgsICAgNTEsICAgMzgsICAg
MjMsICAgMzcsCisKKyAgICAgIDQ1MywgICAzNiwgICAyMiwgICAzNywgICAzNiwgICAzOSwgICAz
OCwgICAyNiwgICAzNywgICAyNiwKKyAgICAgICAyNiwgICAyMywgICA0MSwgICAzOSwgICAzNywg
ICAzOSwgICA0NSwgICA0NywgICAzOSwgICAyMiwKKyAgICAgICA0MSwgICA1NSwgIDEzNSwgIDE0
NiwgICAzOSwgIDE0NiwgICA0OSwgICA1MCwgIDExMiwgICA0NSwKKyAgICAgICA1MCwgICA0MSwg
ICA0NywgICA0OSwgICA0OSwgICA0NywgICA1MiwgIDEzNSwgICA1MCwgIDEyMiwKKyAgICAgICA1
MiwgIDExMiwgIDQ1MiwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIDEyMiwgIDQ1MSwgICA1MiwK
KyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3
OCwgICA3OCwKKyAgICAgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDQ1MCwgIDEyMCwgICA3NCwg
IDE0MiwgIDEyMCwgIDEyMCwKKyAgICAgIDE2OCwgIDE2OCwgIDEyMCwgICA3OCwgIDEyMCwgIDE0
MiwgIDE5NCwgIDE5NCwgIDE5NCwgICA3NCwKKyAgICAgIDIxOCwgIDIxOCwgIDIxOCwgIDQxNywg
IDQxNywgICA3OSwgICA3OCwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3
OSwgICA3OSwgICA4MCwgIDQ0OCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKworICAgICAgIDgw
LCAgIDgwLCAgIDgwLCAgIDc5LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAor
ICAgICAgMTU2LCAgNDQ2LCAgIDgwLCAgIDgxLCAgNDQ1LCAgIDgxLCAgIDc5LCAgNDQ0LCAgIDgx
LCAgIDgxLAorICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgwLCAgIDgzLCAg
MjE0LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgMjE0
LCAgMjI5LCAgMjI5LCAgMjI5LCAgNDQzLAorICAgICAgMTUyLCAgNDQyLCAgMTUyLCAgNDQwLCAg
IDgzLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAgMTUyLCAgMjM3
LCAgMjM3LCAgMjM3LCAgNDM5LCAgNDM4LCAgIDgzLCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgNDM3LCAgNDM2LAorICAg
ICAgMTU1LCAgNDM1LCAgMTU1LCAgNDM0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAg
MTU1LAorICAgICAgMTU1LCAgMTU1LCAgMjQ5LCAgMjQ5LCAgMjQ5LCAgNDMzLCAgNDMyLCAgMTU0
LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorCisgICAgICAyMjIsICAyMjIsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjQsCisgICAgICAyMjQsICAyMjQsICAyMjQs
ICAyMjQsICAyMjQsICAyMjQsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAy
MjUsICAyMjUsICAyNTUsICAyNTUsICAyNTUsICAzODgsICAzODgsICAzODgsICA0MzAsCisgICAg
ICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsICA0MjIsICA0MjEsICAz
ODgsCisgICAgICA0MjAsICAzODgsICA0NTksICA0NTksICA0NTksICA0NTksICA0NjAsICA0NjAs
ICA0NjEsICA0NjEsCisgICAgICA0NjIsICA0MTksICA0NjIsICA0NjIsICA0MTgsICA0MTYsICA0
MDcsICA0MDYsICA0MDUsICA0MDQsCisgICAgICA0MDMsICA0MDIsICA0MDAsICAzOTksICAzOTgs
ICAzOTUsICAzOTQsICAzOTIsICAzODksICAzODcsCisgICAgICAzODYsICAzODUsICAzODMsICAz
ODIsICAzODEsICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsCisgICAgICAzNzMsICAzNzIs
ICAzNzEsICAzNjUsICAzNjIsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsCisgICAgICAz
NTMsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDYsICAzNDUsICAzNDMsICAzNDEsICAzNDAs
CisKKyAgICAgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMiwgIDMzMSwg
IDMzMCwgIDMyOSwKKyAgICAgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMCwgIDMx
OSwgIDMxNiwgIDMwNSwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5MSwgIDI5MCwg
IDI4OSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKKyAgICAgIDI4MCwgIDI3OSwgIDI3NiwgIDI3
NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwKKyAgICAgIDI2OCwgIDI2Nywg
IDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI1NCwgIDI1MywKKyAgICAgIDI1
MiwgIDI1MSwgIDI1MCwgIDI0OCwgIDI0NCwgIDI0MiwgIDI0MSwgIDI0MCwgIDIzNiwgIDIzNSwK
KyAgICAgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNiwgIDIyMSwgIDIyMCwgIDIx
OSwgIDIxNywKKyAgICAgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwOSwg
IDIwOCwgIDIwNywgIDIwNiwKKyAgICAgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIwMSwgIDIw
MCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5MywgIDE5MiwgIDE5MSwg
IDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwKKworICAgICAgMTg0LCAgMTgzLCAg
MTgyLCAgMTgxLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAorICAgICAgMTcz
LCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLAor
ICAgICAgMTYyLCAgMTQ3LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTQxLCAgMTQwLCAgMTM5LCAgMTM4
LCAgMTM3LAorICAgICAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMxLCAgMTMwLCAgMTI5LCAg
MTI4LCAgMTI3LCAgMTI2LAorICAgICAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAgMTE4LCAgMTE3
LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLAorICAgICAgMTExLCAgMTEwLCAgMTA5LCAgMTA4LCAg
MTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLAorICAgICAgMTAxLCAgMTAwLCAgIDk5
LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLAorICAgICAgIDUzLCAg
IDQ4LCAgIDQ2LCAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAgICA3LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LAorCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsK
IAogLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICov
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNTZd
ID0KICAgICB7ICAgMCwKIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYwLDcgKzc4MSw3IEBAIHN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CiAgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CiAK
IC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNo
CiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03NzEsNyArNzky
LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsx
NDhdID0KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2LDYgKzgwNyw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNsdWRlICJjb21w
aWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtOTQ0LDcgKzk2Niw3
IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBj
ID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZvciAoIG4gPSAwOyBu
IDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMg
IT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTEwODYsMTMgKzEx
MDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSAp
CiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50
X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJ
CXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3ICsxMTI1LDcgQEAg
eXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5
eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9zaXplX3QgeXlsOwor
CQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5eWwgKQogCQkJ
CWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4MSwyMjAgKzE1MDMs
MjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkx
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29s
VFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJ
WVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxl
eC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9C
UkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5p
ID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVB
SwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5
eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4
dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52
YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4g
MDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXls
dmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFs
LT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZM
T0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVf
U0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRl
eHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNl
IDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdO
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEw
MToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
TU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVf
U0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6Citj
YXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5E
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2Ug
MTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1
cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDEx
OToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVf
T1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9S
VUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2Fz
ZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVf
U0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNv
bnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hU
X0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRV
UAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZh
bHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6Citj
YXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7
IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JV
TEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlw
ZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2
OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFs
c2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEz
NToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNL
RVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7
IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nh
c2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxE
RSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQz
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2
OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9B
TkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihB
TVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1
MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsx
NzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQog
CVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9C
UkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoK
Ky8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9C
UkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToK
IGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsg
eXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVM
RV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0
ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2FzZSAxNTU6CiBZ
WV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIwNzAsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogCQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJl
bnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDExICsyMDk5LDEx
IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlf
Y3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQlpZiAo
IHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1
cnJlbnRfc3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0
NTgpOwogCiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwogfQpAQCAt
Mjg5NCwxMCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAorI2lmICFBTkdM
RV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9jZXNzb3IgaW50
ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCiAK
K2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5hbGl6ZVByZXBy
b2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFt
ZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAgICAgVFBhcnNl
Q29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKQEAg
LTI5MDYsMjYgKzI5NjUsMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVnTG9nTXNnKGNv
bnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+
aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBjb250ZXh0LT50
cmFjZShtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNn
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJuaW5nKHl5bGlu
ZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
Iik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIs
ICIiKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3Zv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiB9CiAKQEAgLTI5ODAsODggKzMwMzksMTUgQEAgdm9pZCBEZWNMaW5lTnVtYmVyKCkKIHZv
aWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiB7CiAg
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1swXSwgIm9wdGlt
aXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAo
dG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4
cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAi
b24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAg
ICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0
ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIiki
KSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQg
J29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAgICAgIGlmIChu
dW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBwcmFn
bWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtleXdv
cmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5j
b250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tl
bnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcg
PSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
b25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIp
XCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQotICAgICAgICAv
LwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAgICAgICAgLy8g
dXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxl
IHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAgLy8gRm9yIG5v
dywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5ub3Qg
cmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50YXRp
b24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAgLy8gI3ByYWdt
YSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFtZSBp
biBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAobnVtVG9rZW5z
ID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10sICIp
IikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJs
ZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxl
OwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAg
aXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAg
IGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+
c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9ICAg
ICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAgICAgICAgICAg
VFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5j
b250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVy
YXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0
b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7
Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tl
bnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFHTUFfVEFCTEUK
LSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBpZiAoc3RyY21w
KHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10s
ICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21hRGlyZWN0aXZl
KHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3RvcmVTdHIoY2hh
ciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7CiAgICAgU0VU
VVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtMzA4Myw3MSArMzA2OSwz
MyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSAi
IjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewot
ICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJo
UmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCi0gICAg
ICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJl
aGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNt
cCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0gICAgZWxzZSB7
Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZp
b3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBFQmhE
aXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewogICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihi
ZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsK
LSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0
ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAgICAgIGlmIChi
ZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkgewot
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUg
J3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRleHQtPmV4dGVu
c2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZh
bDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRlciA9IGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0gICAgICAgIGlm
IChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJlcXVpcmU6Ci0g
ICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNpb24gJyIpICsg
ZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAgICAgICBjYXNl
IEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgICAgICAgICAg
bXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9y
dGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4dC0+aGFuZGxl
RXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7CiB9CiB9ICAv
LyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCiBp
bnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhf
c2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
IAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBjYW4ndCBl
bmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAgICBpbnQgbGVu
ID0gMDsKKworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6OlRva2VuIHRv
a2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2Vu
KTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52
YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3NpemUpKQorICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2xp
bmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24u
bGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3Np
emUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0gICAgYnVmW2xl
bl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNl
IGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47
CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAtMzE3OCw5ICsz
MTI2LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
IGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAg
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIp
OworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBF
T0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVh
c29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNv
biwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzE5OSwy
MiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4
dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Cisg
ICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJp
bmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVy
KTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRleHQtPnNjYW5u
ZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gSW5pdCBw
cmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNpZiBBTkdM
RV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmlu
aXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAg
IGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNwcC0+cEMg
PSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAg
ID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJM
ZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2Nh
bkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNv
dW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAvLyBBTkdM
RV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3Mu
CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4
dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRC
ZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IK
KyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0
LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmly
c3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CmluZGV4IDM3YTBmMDUuLmQ1ODUzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtMSwyNCArMSwyMiBAQAotLyog
QSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29uIHBh
cnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbXBsZW1l
bnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdo
dCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYs
IDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZl
cnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9u
IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K
IAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29y
ayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxl
dG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjcsNyBAQAogICAgc3BlY2lh
bCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0
aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24u
Ci0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBA
IC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAg
Ki8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05B
TUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAogLyogUHVyZSBwYXJzZXJzLiAgKi8KICNk
ZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAK
KworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyogVXNpbmcgbG9j
YXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogCiAKKy8qIENvcHkgdGhlIGZp
cnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3JzIGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUu
CisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51
c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1l
bnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxODkpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorI2VuZGlmCisKKyNp
bmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
SGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlM
RVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8K
KyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisj
IHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNl
CisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0
b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5f
VEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlUT0tFTlRZUEUK
ICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2ICsyMTUsMTQgQEAKICAgICAgUVVFU1RJ
T04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIElOVkFSSUFO
VCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElVTV9QUkVDSVNJ
T04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJU0lPTiAyNjIK
LSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAotI2RlZmluZSBC
T09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElOVF9UWVBFIDI2
NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVmaW5lIERPIDI3
MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElGIDI3MwotI2Rl
ZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJWRUMyIDI3Ngot
I2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElWRUMyIDI3OQot
I2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZFQzIgMjgyCi0j
ZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJWDIgMjg1Ci0j
ZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5lIElOX1FVQUwg
Mjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5MAotI2RlZmlu
ZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJVQ1QgMjkzCi0j
ZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5lIFNBTVBMRVIy
RCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJfRVhURVJOQUxf
T0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVOVElGSUVSIDMw
MAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQgMzAyCi0jZGVm
aW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0jZGVmaW5lIEZJ
RUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUgUklHSFRfT1Ag
MzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2RlZmluZSBMRV9P
UCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2RlZmluZSBORV9P
UCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNkZWZpbmUgWE9S
X09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNTSUdOIDMxOAot
I2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAotI2RlZmluZSBM
RUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmluZSBBTkRfQVNT
SUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJR04gMzI1Ci0j
ZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0jZGVmaW5lIFJJ
R0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5lIFJJR0hUX0JS
QUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hUX0JSQUNFIDMz
MgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBDT0xPTiAzMzUK
LSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZpbmUgQkFORyAz
MzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5lIFBMVVMgMzQx
Ci0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQRVJDRU5UIDM0
NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAzNDYKLSNkZWZp
bmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUgQU1QRVJTQU5E
IDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAotLyogQ29weSB0aGUgZmlyc3QgcGFy
dCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNl
ZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFy
aWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0j
ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUg
ImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIu
aCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJB
TSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYg
WVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9z
ZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZ
RVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJs
ZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAot
I2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19E
RUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0IHsKICAg
ICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0zNDAsMTcgKzI1Miwx
NiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxp
c3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE5MyBvZiB5YWNjLmMu
ICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RS
SVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJl
IHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZ
WVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFy
dCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApAQCAtMzYwLDI4ICsyNzEsMjYgQEAgZXh0
ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFz
b24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAg
XAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMg
b25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBc
CiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBc
Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1
cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5j
LiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1NiwxNCArMzY1LDE0
IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGlu
dCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5
aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwog
fQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5
IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5
eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5cGVfaW50MTYg
eXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhlIHNpemUgb2Yg
dGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAg
Ki8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykg
LSAxKQpAQCAtNTgwLDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxlbWVudHMgaW4g
dGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0
YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRo
ZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJ
CQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwK
ICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRl
czsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAot
CVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2Fs
bG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJ
CQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RB
Q0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIp
OwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAgc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5
cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAyMDMsICAgMjE2
LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwgICA0MjAsICAg
NDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAotICAgICA1NzIs
ICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4LCAgIDY3OCwg
ICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAgNzI5LCAgIDcz
MCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUsICAgNzc2LCAg
IDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4NDMsICAgODQ3
LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4NCwgICA4OTcs
Ci0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAgIDkzMiwgICA5
MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkxLCAgIDk5OCwg
IDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAxMTA3LCAgMTEz
NiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDExNzUsCi0gICAg
MTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwgIDEyODIsICAx
MzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4MSwgIDE0ODQs
ICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAgMTUzNCwgIDE1
MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0gICAgMTU4Miwg
IDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcsICAxNjIyLCAg
MTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2NjQsICAxNjcz
LCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwgIDE3MTcsICAx
NzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgwNiwgIDE4MTAs
ICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1LCAgMTgyNiwK
LSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAxODQyLCAgMTg0
MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAsICAxODc0LCAg
MTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5MjMsICAxOTIz
LCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1NiwKLSAgICAx
OTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAgMjAxMiwgIDIw
MTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAgNDI2LCAgIDQz
NiwgICA0NDksICAgNDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAgICAgNTc5LCAg
IDU4MywgICA1OTAsICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwgICA2ODUsICAg
Njg4LAorICAgICA2OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDczNiwgICA3Mzcs
ICAgNzQ2LCAgIDc1OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAgIDc4MywgICA3
OTMsICAgODAzLCAgIDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUwLCAgIDg1NCwg
ICA4NTgsICAgODYyLCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEsICAgOTA0LAor
ICAgICA5MDUsICAgOTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5MzksICAgOTQw
LCAgIDk0NCwgICA5NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwgIDEwMDUsICAx
MDQzLCAgMTA0NiwgIDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTExNCwgIDExNDMs
ICAxMTQ4LCAgMTE1OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgyLAorICAgIDEx
ODgsICAxMTk1LCAgMTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAxMjg5LCAgMTMw
NywgIDEzMTUsCisgICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgsICAxNDkxLCAg
MTQ5NywgIDE1MDUsICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1NDEsICAxNTQ0
LCAgMTU1MCwgIDE1NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAgIDE1ODksICAx
NTk0LCAgMTU5OSwgIDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwgIDE2
MzQsCisgICAgMTY0MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcxLCAgMTY4MCwg
IDE2ODUsICAxNjk4LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAxNzI0LCAgMTcz
OSwgIDE3NzUsICAxNzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMsICAxODE3LCAg
MTgxOCwgIDE4MjQsICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwgIDE4MzMsCisg
ICAgMTgzMywgIDE4MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0OSwgIDE4NDks
ICAxODU0LCAgMTg1NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAgMTg4MSwgIDE4
ODksICAxODkzLCAgMTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMwLCAgMTkzMCwg
IDE5MzcsICAxOTM3LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMsCisgICAgMTk2
NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIwMTksICAyMDI2
LCAgMjAyOSwKKyAgICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIsMTYgKzcyMSwx
NiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImluaXRfZGVjbGFy
YXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
CiAgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlm
aWVyIiwKICAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJy
YXkiLCAic3RydWN0X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3RfZGVjbGFyYXRp
b25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3RydWN0X2RlY2xh
cmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCiAgICJkZWNs
YXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAi
Y29tcG91bmRfc3RhdGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUi
LAotICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91bmRfc3RhdGVt
ZW50X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIs
ICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRA
NSIsICIkQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAgICJzdGF0ZW1l
bnRfbGlzdCIsICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwK
LSAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0
YXRlbWVudCIsICJANyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29u
ZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25fcmVzdF9zdGF0
ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKKyAgIiRA
OCIsICIkQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVz
dF9zdGF0ZW1lbnQiLAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJl
eHRlcm5hbF9kZWNsYXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIkAxMCIsIDAK
KyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYKIApAQCAtMTM0
NSw5ICsxMjU0LDE4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogCiAv
KiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJl
IHRlbXBvcmFyaWx5CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmlu
ZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFu
dGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlM
IGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXBy
ZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBw
aGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlGQUlMCQlnb3Rv
IHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHBy
ZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBO
b3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21l
IHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92
ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlz
b24gMi41LiAgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0
YXR1cykKIApAQCAtMTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2
ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQx
NiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5
X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAg
ICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisg
ICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2Vu
ZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0
b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0
b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAg
ICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQi
LCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTE1
NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0
KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5
eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQl
ZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5
eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXly
dWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJ
ICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIp
OworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTg0OSwx
MCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0
KQogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlz
c2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBB
UlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAsOSBAQCBpbnQgeXlwYXJzZSAoKTsKIAogCiAK
LQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXApAQCAtMTg5OCw3NCArMTgx
Niw3NSBAQCB5eXBhcnNlIChjb250ZXh0KQogI2VuZGlmCiAjZW5kaWYKIHsKLSAgLyogVGhlIGxv
b2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5
eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wu
ICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8K
IFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAq
LwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJl
c3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2Fn
ZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tl
biBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5
dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1l
c3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhd
OwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNp
emVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9v
bHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRl
ZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMu
Ci0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBh
bGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwor
ICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVy
cnM7CiAKLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2IHl5c3NhW1lZ
SU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5dHlwZV9pbnQx
NiAqeXlzc3A7CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBz
aGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3Rh
dHVzOwogCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2
c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5
dnNwOworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzog
cmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZh
bHVlcy4KIAorICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVy
cywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hl
cmUuICAqLwogCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYg
eXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVf
aW50MTYgKnl5c3NwOwogCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5
eXNzcCAtPSAoTikpCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZ
UEUgKnl5dnNwOwogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisgICAg
WVlTSVpFX1QgeXlzdGFja3NpemU7CiAKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAv
KiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJl
ci4gICovCisgIGludCB5eXRva2VuOwogICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJu
IHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQogICAgICBhY3Rpb24gcm91dGlu
ZXMuICAqLwogICBZWVNUWVBFIHl5dmFsOwogCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1
ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBj
aGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9U
IHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BT
VEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAogICAvKiBUaGUgbnVtYmVy
IG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRv
IHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9
IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOwor
ICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0
YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsK
ICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRv
IGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJl
IHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAgICAgIFdhc3Rl
IG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBzbyB0aGF0IHRo
ZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAgICAgIFRoZSB3
YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5eXNzcCA9IHl5
c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAgaW50IHl5bmVycnM7
CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwog
Ci0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6
ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMg
dXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBh
cmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50IHl5bmVycnM7CiAJ
eXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlzczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpAQCAtMjAyNiw5
ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FM
TE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQogCSAgZ290
byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JF
TE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOwor
CVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlTVEFDS19S
RUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpA
QCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNzcCA9IHl5c3MgKyB5
eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKIAotCiAgICAgICBZ
WURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCiAJCSAg
KHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5LDYgKzE5NjQsOSBA
QCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAl
ZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NF
UFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTIwNTcsMTYgKzE5
NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHByb3ByaWF0ZSBw
cm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
ICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0
IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRl
Y2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICov
CiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAg
ICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0
b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdl
dCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAv
KiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFk
IHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBh
IHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAg
ICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBA
IC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5eXJlZHVjZTsKICAg
ICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgIC8qIENvdW50
IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IK
ICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5ZXJyc3RhdHVzLS07
CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBTaGlmdCB0aGUg
bG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2Vu
IHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hh
ciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNo
YXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNwID0geXlsdmFsOwpA
QCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5
bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAgICBjb25zdCBUVmFy
aWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBU
VHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxl
KiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3Ry
aW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFi
bGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0
OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8gY2hlY2sgZm9y
IG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQg
b3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAg
ICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIxMzksMjEgQEAgeXly
ZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSld
LmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9m
ICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRT
eW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFy
cmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlz
IG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAtMjI2Niw3ICsyMTgw
LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIs
ICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNwWygzKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJy
YXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
NCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJyYXkgaW5kZXgg
b3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIs
IGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBkb3Qg
b3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0
b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iLCAiIik7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEzLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNv
bnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlmIChmaWVsZHMg
PT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIiwg
IiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUsMTggKzIzNDUsMTgg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxk
IGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAo
MyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmllbGQgc2Vs
ZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5k
IHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZp
ZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxl
ZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQn
cyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoK
QEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3ICsyMzg0LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYg
KGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9u
ZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJh
SW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAi
IDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
aW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJ
bnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUg
Y2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJv
ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3
OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBh
cmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyArMjUxOCw3IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgy
KV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6CkBA
IC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0yNjIxLDcgKzI1NDIs
NyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAy
MjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAgICAgICAoeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKICAgICAg
ICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1
bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9w
TnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNp
Y1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIiKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZs
b2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRUeXBlIHR5cGUo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1bmN0aW9uICpmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1bmN0aW9uICpm
dW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5
cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0ICsyNjUwLDE0IEBA
IHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CiAg
ICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikg
PSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI4OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzA6CkBAIC0y
NzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3MDYsMjcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMjoKIAot
ICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsg
KHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BO
dWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7
IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBicmVhazsKIAog
ICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4MTgsNyArMjczOSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzODoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0
MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAog
ICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4ODQsNyArMjgwNSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NDoKQEAgLTI4OTgs
NyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NToK
QEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoKQEAgLTI5NDUs
NyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OToK
QEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NjoKQEAgLTMwMTIs
MTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU3
OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5NTIsMTIgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0K
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0gICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MzoK
IAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY0OgogCi0g
ICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAg
ICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5
dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgi
Kj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BN
dWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAgeyBGUkFHX1ZFUlRf
T05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVy
bSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3Ag
PSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9CisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToKQEAgLTMxMTcs
NyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAgICAgY29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3
MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAgICAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFyYXRpb24pOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgY29u
dGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0u
aW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVjaXNpb24pICk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEyIEBAIHl5cmVkdWNl
OgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlv
biktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlv
bnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFz
aWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJh
bUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rp
b24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0
IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5cmVkdWNlOgogICAg
ICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhlIGZ1bmN0aW9uJ3Mg
YXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlv
biBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQuCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCooeXl2YWwuaW50ZXJt
KS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NToKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRlbGV0
ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMg
dm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBm
b3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4
Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0u
dHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7
CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc5OgogCiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24g
cmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJl
dHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4u
LgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVy
bS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgwOgog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgy
KV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9p
ZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbnRleHQtPnJl
c2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywg
bmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9OwogICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFBh
cmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsK
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSldLmxleCkubGlu
ZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZz
cFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBl
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3JhcnksICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50
eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKICAgICAg
ICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0p
LmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFso
MikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJy
b3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5
cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVh
bGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODc6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmll
cikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkwOgpA
QCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRQYXJhbWV0
ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkp
IH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZh
cmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRl
Y2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzQy
OCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAgICBzeW1ib2wtPnNl
dElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGlu
ZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk0OgpAQCAt
MzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6
ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNildLmludGVy
bSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/
IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3Ry
aW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDYp
XS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
OTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMyLDE5ICszNDUzLDE5
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBp
ZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJs
ZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5
ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZz
cFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFy
YXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5
cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAgICAgICAgICAg
c3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQsNyArMzUyNSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICszNTM3LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50
LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwog
ICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJ1
bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBk
ZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0zNjI2LDcg
KzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKIAog
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGlu
ZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5v
dCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5z
ZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFy
cmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0
cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5
cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBF
YnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxp
bmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAgICAg
KCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3Ig
aW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5x
dWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0zNjgwLDcgKzM2MDEs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091
dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5
aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwOToKQEAgLTM3
MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
dHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9
IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExNzoKQEAgLTM3
OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE5OgpAQCAtMzgx
MSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICszNzUwLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBAIC0zODM4LDcgKzM3
NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMzoKQEAg
LTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMsNyArMzgwNCw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgz
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoKQEAgLTM4OTIsNyAr
MzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyOToKQEAg
LTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4NDMsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0
cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMjoKQEAgLTM5MzEs
NyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJE
IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBs
ZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEsMzMgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVu
c2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4
dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyRXh0ZXJuYWxPRVMs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRl
ZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBs
ZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0LCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAtMzk4OSwxMiArMzkx
MCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2Vy
RGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEz
ODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250
ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM5
OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg2
KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3Ry
dWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsgaWYgKGNvbnRleHQt
PmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAg
eyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292
ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywxNCArMzk0OCwxNCBA
QCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1
Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0
LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNr
KCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwogICAgICAgICB9Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00MDg3LDcgKzQwMDgs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0NjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUt
PnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyArNDA1Miw2NyBAQCB5
eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9CisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30K
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NDoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAgIHsgY29udGV4dC0+
c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgp
OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRh
YmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0
RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAoNSldLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE2OToK
QEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSksICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IH0KICAgICBicmVh
azsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0
YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19j
YXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcgKzQyMDQsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eXZzcFsoMSkg
LSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2
c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0u
aW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyArNDIxMiw3IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpAQCAtNDI5OSw3ICs0
MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWly
KS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3
OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgwOgpAQCAt
NDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQpIC0gKDYpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50ZXJtLmludGVybU5v
ZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODE6
CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7ICsrY29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgyOgpAQCAtNDM1
NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAwLCAo
eXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWygzKSAt
ICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2go
KTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9s
VGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BGb3IsICh5eXZzcFso
NCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlw
ZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnBy
ZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIp
Lm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDEp
IC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODY6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTA6CkBAIC00
NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29w
cyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxv
d2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4g
bG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0LDEwICs0MzY1LDEw
IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCBy
ZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTQ6CkBA
IC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDMp
XS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRy
dWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIs
ICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0g
KDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJy
ZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNl
IGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBp
cyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlz
IG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBGUkFH
X09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29udGV4dC0+dHJlZVJv
b3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAtNDUxNyw3ICs0NDM4
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0aGlz
IGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlv
biBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGlu
ZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19z
dHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikg
ewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJh
bWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5j
dGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTQ1
NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
cGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgq
dmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1l
KCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICB9
CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+aW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAgICAgY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAgICAgICAgIC8vIHN0
b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3Ro
ZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0
aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+
Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVi
dWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRP
cHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdt
YSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUp
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAgIGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAKLS8qIExpbmUg
MTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CkBAIC00
NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5dmFsOwogCi0KICAg
LyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdo
YXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVk
IGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KQEAgLTQ2
ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAg
IHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFk
IHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1
c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAog
ICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3IEBAIHl5ZXJybGFi
OgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRv
a2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNl
IGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAgdG9rZW4uICAq
LwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAgeXllcnJsYWIxOgog
ICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9
PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKQEAg
LTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5
eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykg
fHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNv
bWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxhYjoKICNlbmRpZgog
CiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkK
KyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlz
Y2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CiAgIC8q
IERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmln
Z2VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nX3RhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmdfdGFiLmgKaW5kZXggMjM5NDViOC4uM2U0NjFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgKQEAgLTEsMjQgKzEsMjIgQEAK
LS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLworLyogQSBCaXNv
biBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4yLiAgKi8KIAogLyogU2tlbGV0b24gaW50
ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0
IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwg
MjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g
MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwog
CiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3Jr
IHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0
b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSwxMCArMjcsMTEgQEAKICAgIHNwZWNp
YWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3Vs
dGluZwogICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9u
LgotCisgICAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KIAor
CiAvKiBUb2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZ
UEUKQEAgLTEzNCwxMDggKzEzMywxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAgfTsKICNl
bmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmluZSBISUdI
X1BSRUNJU0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZpbmUgTE9X
X1BSRUNJU0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRSSUJVVEUg
MjYzCi0jZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUKLSNkZWZp
bmUgRkxPQVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJSRUFLIDI2
OAotI2RlZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVMU0UgMjcx
Ci0jZGVmaW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQgMjc0Ci0j
ZGVmaW5lIFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMzIDI3Nwot
I2RlZmluZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMzIDI4MAot
I2RlZmluZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAyODMKLSNk
ZWZpbmUgVkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklYMyAyODYK
LSNkZWZpbmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUgT1VUX1FV
QUwgMjg5Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkxCi0jZGVm
aW5lIFZBUllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9UWVBFIDI5
NAotI2RlZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmluZSBTQU1Q
TEVSQ1VCRSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVmaW5lIFNB
TVBMRVIyRFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZUEVfTkFN
RSAzMDEKLSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RBTlQgMzAz
Ci0jZGVmaW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwNQot
I2RlZmluZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUgSU5DX09Q
IDMwOAotI2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmluZSBHRV9P
UCAzMTEKLSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmluZSBBTkRf
T1AgMzE0Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVmaW5lIE1V
TF9BU1NJR04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9BU1NJR04g
MzE5Ci0jZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMyMQotI2Rl
ZmluZSBSSUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVmaW5lIFhP
Ul9BU1NJR04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FTU0lHTiAz
MjYKLSNkZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4Ci0jZGVm
aW5lIExFRlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNkZWZpbmUg
TEVGVF9CUkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERPVCAzMzMK
LSNkZWZpbmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVBTCAzMzYK
LSNkZWZpbmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBEQVNIIDMz
OQotI2RlZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RBUiAzNDIK
LSNkZWZpbmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExFRlRfQU5H
TEUgMzQ1Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ3
Ci0jZGVmaW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5lIFFVRVNU
SU9OIDM1MAotCiAKIAogCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZ
UEVfSVNfREVDTEFSRUQKIHR5cGVkZWYgdW5pb24gWVlTVFlQRQotCiB7CisKKwogICAgIHN0cnVj
dCB7CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKICAgICAgICAgdW5pb24gewpAQCAtMjY1LDE0
ICsxNzAsMTUgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBUVHlwZUxpc3Qq
IHR5cGVMaXN0OwogICAgICAgICB9OwogICAgIH0gaW50ZXJtOwotfQotLyogTGluZSAxNTI5IG9m
IHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMg
ZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAogCiAKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCmluZGV4IDU0
NDE1NTcuLmFmNzhmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTQzMywxNSArNDMzLDE1IEBAIHByb3RlY3RlZDoK
IAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwogdHlwZWRl
ZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7Ci10eXBlZGVmIFRNYXA8VFN0cmluZywgVFN0
cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFy
Yml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCiAvLwogY2xhc3MgVEludGVybUFnZ3JlZ2F0
ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgewogcHVibGljOgotICAgIFRJbnRlcm1BZ2dyZWdh
dGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBwcmFn
bWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0g
ICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHBy
YWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICB+VEludGVy
bUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgVEludGVybUFnZ3JlZ2F0
ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIGVuZExp
bmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIFRJbnRlcm1BZ2dyZWdh
dGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCB1c2VFbXVsYXRlZEZ1bmN0aW9u
KGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgfQogCiAgICAgdmlydHVhbCBU
SW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwpAQCAtNDUyLDE0ICs0NTIs
MTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVy
biBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRy
dWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQor
ICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAK
ICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29s
IGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNldERlYnVnKGJv
b2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7
IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUp
OwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25zdCB7IHJldHVy
biAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQgc2V0RW5kTGluZShUU291cmNlTG9jIGxpbmUp
IHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291cmNlTG9jIGdldEVuZExpbmUoKSBjb25zdCB7
IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3ICs0NzQsNiBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRhYmxlICpwcmFn
bWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExpbmU7CiAKICAgICAvLyBJZiBzZXQgdG8gdHJ1
ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9u
ZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0
VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAogICAgICAgICAg
ICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5USW50ZXJtVHJhdmVyc2VyKCkge307CiAKICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXgg
OWY5MzkzYS4uOWIzYWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9vc2luY2x1ZGUuaApAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fc3VuKSB8
fCBkZWZpbmVkKEFORFJPSUQpIHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZp
bmVkKF9fR05VX18pIHx8IGRlZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQoX19HTElCQ19f
KSB8fCBkZWZpbmVkKF9fR05VX18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAjZWxzZQogI2Vy
cm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwppbmRleCBhMTdjMzE5Li4z
OTE1OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRv
bVRhYmxlX1JlYyB7CiAgICAgaW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFi
bGUgPSB7IHsgMCB9IH07CitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwg
MCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUg
KmF0YWJsZSA9ICZsYXRhYmxlOwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUg
KmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAg
c3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykK
ICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAg
ICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAg
ICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNv
bGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAg
ICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBt
b3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoq
KiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwog
ICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAg
c3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0
eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50
ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRl
bHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAg
Q1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9
IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
c3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3
aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0
ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNc
IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52
YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0
b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsg
aWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6
IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7
CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZh
dGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVi
dWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXpl
PSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yo
c3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAg
ICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxF
X01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRh
YmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0
ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdM
b2dNc2coc3RyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmluZGV4IDEzYTVkZjEuLjhhMTA3NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYwpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAjaW5jbHVkZSA8c3RyaW5nLmg+
CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5l
ZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgogICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEg
bmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0
dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJCQlTcmNT
dHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBDUFBwcmFn
bWEoeXlzdHlwZXBwICogeXlsdmFscHApCiAJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAl9CiAKLQljcHAtPmN1cnJlbnRJbnB1
dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKIAlIYW5kbGVQ
cmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwotCXRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKIAkKK2Zy
ZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKIAlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytp
KSB7CiAJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CiAJfQpAQCAtNzg0LDcgKzc4NCw2IEBAIGludCBy
ZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBpbnQgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGNv
bnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgaW50IGlzVmVyc2lvbiA9IDA7CiAKICAgICBpZiAodG9r
ZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9
PSBkZWZpbmVBdG9tKSB7CkBAIC04NjEsNyArODYwLDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQogICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHAp
OwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkg
ewogICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgICAg
IGlzVmVyc2lvbiA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IGV4dGVuc2lvbkF0b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZh
bHBwKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg4NiwxNSArODg0LDE1IEBAIHZvaWQgRnJlZU1h
Y3JvKE1hY3JvU3ltYm9sICpzKSB7CiB9CiAKIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezB9Owor
ICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKICAgICBTeW1ib2wgKnN5bWJvbCA9IE5V
TEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9IHsw
fTsKKyAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBOVUxMLCAwLCAwfTsKKyAgICB5
eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKICAgICBpbnQgYXRvbSA9IDA7CiAKICAg
ICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKICAgICB2
YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZh
bHVlKTsKKyAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4r
MSwgIiVkIiwgdmFsdWUpOwogICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05T
VEFOVCwgJnZhbCk7CiAgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwog
ICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7
CkBAIC05OTEsMTMgKzk4OSwxMyBAQCBpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19M
SU5FX19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7
Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNj
X2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJP
TF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tl
bihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQog
ICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50
ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9u
YW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50
KTsKICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKaW5kZXggZGI0YzE4NC4uODAyZTIzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcC5oCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhj
b25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxv
CiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3
YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBj
aGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgog
dm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVz
c2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAg
ICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAg
U3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmlu
ZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciop
OyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAg
U3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmlu
ZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAg
ICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQp
OyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGlu
ZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5n
IE51bWJlci4gCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAppbmRleCBiM2FlMmY5Li41ZmNhZGIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2lmbmRlZiBfX01FTU9SWV9I
CiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0eXBlZGVmIHN0
cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5UG9vbCAqbWVt
X0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI1OWNjNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgot
Ci1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1l
KQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdM
XyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0gIkdMXyIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29uc2Vj
dXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5maW5kKCJfXyIp
ICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRleHQoKQotICAg
IDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91dHB1dChOVUxM
KQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxleGVyKCk7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhlcigpOwotCi0g
ICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBzbyB0aGF0IHdl
IGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGluIHByb2Nlc3Mo
KS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9rZW5WZWN0b3Iq
IG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAhPSBOVUxMKSAm
JiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1dCA9IG5ldyBJ
bnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRwdXQ7Ci0gICAg
ZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2UuCi0gICAgYm9v
bCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVzZXQoKTsKLSAg
ICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNybyhwcDo6VG9r
ZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6TWFj
cm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVy
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVu
dHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3JvKHR5cGUsIG5h
bWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3JvTmFtZVJlc2Vy
dmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0RlZmluZWQobmFt
ZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBtYWNyby5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5kZWZpbmVNYWNy
byhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRl
ciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jvcy5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmlu
ZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBtTWFjcm9zLmVu
ZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQgQ29udGV4dDo6
cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBtTWFjcm9zLmVu
ZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0gICAgZGVsZXRl
IG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5VTEw7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1l
LCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICBzdHJl
YW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElOVF9DT05TVEFO
VCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVjdG9yKiByZXBs
YWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAgIG1NYWNyb3Nb
bmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cyk7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTI3NDcuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJNYWNyby5oIgot
I2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBDb250ZXh0Ci17
Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQotICAgIGJvb2wg
aW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRva2VuVmVjdG9y
KiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7IH0KLSAgICBp
bnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2VuVmVjdG9yKiBv
dXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1hY3JvKHBwOjpU
b2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBwcDo6TWFjcm86
OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAg
ICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAgIGJvb2wgdW5k
ZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBpc01hY3JvRGVm
aW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGlu
aXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBkZWZpbmVCdWls
dEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgYm9vbCBw
YXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgotICAgIElucHV0
KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9TZXQgbU1hY3Jv
czsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFh
NzVhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKworI2luY2x1
ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsK
KworLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMuCisvLyBE
ZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIGFuZCBwcmludGlu
ZyB0aGUgbWVzc2FnZXMuCitjbGFzcyBEaWFnbm9zdGljcworeworICBwdWJsaWM6CisgICAgZW51
bSBTZXZlcml0eQorICAgIHsKKyAgICAgICAgRVJST1IsCisgICAgICAgIFdBUk5JTkcKKyAgICB9
OworICAgIGVudW0gSUQKKyAgICB7CisgICAgICAgIEVSUk9SX0JFR0lOLAorICAgICAgICBJTlRF
Uk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01FTU9SWSwKKyAgICAgICAgSU5WQUxJRF9DSEFS
QUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJ
T04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAor
ICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAgICAgICBVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVE
LAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVE
RUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgTUFD
Uk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywK
KyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAg
ICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElPTkFMX0VMSUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAg
ICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX05B
TUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICBJTlZBTElE
X0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisg
ICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfTElORV9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfTElO
RV9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VORCwKKworICAgICAgICBXQVJOSU5HX0JFR0lO
LAorICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBVTlJFQ09H
TklaRURfUFJBR01BLAorICAgICAgICBXQVJOSU5HX0VORAorICAgIH07CisKKyAgICB2aXJ0dWFs
IH5EaWFnbm9zdGljcygpOworCisgICAgdm9pZCByZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6Cisg
ICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOworCisgICAgdmlydHVhbCB2b2lkIHByaW50KElE
IGlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkgPSAwOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9E
SUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFz
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMjU0MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKwor
bmFtZXNwYWNlIHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2
b2lkIERpYWdub3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50
IG9mIGVycm9ycyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisK
K0RpYWdub3N0aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7Cisg
ICAgaWYgKChpZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICBy
ZXR1cm4gRVJST1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FS
TklOR19FTkQpKQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7
CisgICAgcmV0dXJuIEVSUk9SOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5o
CkBAIC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNl
IHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgaGFu
ZGxpbmcgZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90
aWZ5IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVz
LiBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxpbmcgdGhlbSBp
biBhbiBhcHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1
YmxpYzoKKyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisgICAgLy8gSGFu
ZGxlIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZp
b3IpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24p
ID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jYTkxZTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
SGFuZGxlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVj
dGl2ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU4NWE5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3Bw
CkBAIC0wLDAgKzEsODk5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBh
cnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1
ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVj
dGl2ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisjaW5jbHVkZSAi
TWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVy
LmgiCisKK25hbWVzcGFjZSB7CitlbnVtIERpcmVjdGl2ZVR5cGUKK3sKKyAgICBESVJFQ1RJVkVf
Tk9ORSwKKyAgICBESVJFQ1RJVkVfREVGSU5FLAorICAgIERJUkVDVElWRV9VTkRFRiwKKyAgICBE
SVJFQ1RJVkVfSUYsCisgICAgRElSRUNUSVZFX0lGREVGLAorICAgIERJUkVDVElWRV9JRk5ERUYs
CisgICAgRElSRUNUSVZFX0VMU0UsCisgICAgRElSRUNUSVZFX0VMSUYsCisgICAgRElSRUNUSVZF
X0VORElGLAorICAgIERJUkVDVElWRV9FUlJPUiwKKyAgICBESVJFQ1RJVkVfUFJBR01BLAorICAg
IERJUkVDVElWRV9FWFRFTlNJT04sCisgICAgRElSRUNUSVZFX1ZFUlNJT04sCisgICAgRElSRUNU
SVZFX0xJTkUKK307Cit9ICAvLyBuYW1lc3BhY2UKKworc3RhdGljIERpcmVjdGl2ZVR5cGUgZ2V0
RGlyZWN0aXZlKGNvbnN0IHBwOjpUb2tlbiogdG9rZW4pCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlVW5kZWYoInVuZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZigiaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUlmZGVmKCJpZmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGlyZWN0aXZlSWZuZGVmKCJpZm5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUVsc2UoImVsc2UiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZUVsaWYoImVsaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
cmVjdGl2ZUVuZGlmKCJlbmRpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlRXJyb3IoImVycm9yIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJl
Y3RpdmVQcmFnbWEoInByYWdtYSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGly
ZWN0aXZlRXh0ZW5zaW9uKCJleHRlbnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZVZlcnNpb24oInZlcnNpb24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUxpbmUoImxpbmUiKTsKKworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBw
cDo6VG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsKKwor
ICAgIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVVbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9VTkRFRjsKKyAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lG
OworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVJZm5kZWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSkKKyAgICAgICAgcmV0dXJuIERJ
UkVDVElWRV9FTFNFOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxp
ZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2VuLT52
YWx1ZSA9PSBrRGlyZWN0aXZlRW5kaWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRU5ESUY7
CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKKyAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9FUlJPUjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRVhURU5TSU9OOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9WRVJTSU9OOworICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJ
UkVDVElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMg
Ym9vbCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQorewor
ICAgIHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgor
ICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6
CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoK
KyAgICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJv
b2wgaXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50
eXBlID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitz
dGF0aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tl
bikKK3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxl
eCh0b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNv
bnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdM
XyIgYXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1
dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAh
PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3Jv
U2V0JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtYWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgp
ID8gaXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7
CisKK2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAg
IERlZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFj
cm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0
aWNzKSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1Nl
dCksCisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisg
IHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisg
ICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4t
PnZhbHVlICE9IGtEZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wg
cGFyZW4gPSBmYWxzZTsKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAo
dG9rZW4tPnR5cGUgPT0gJygnKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJlbiA9IHRydWU7
CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIHN0ZDo6c3Ry
aW5nIGV4cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisK
KyAgICAgICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0
b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBza2lwVW50aWxFT0Qo
bUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHZhbGlkIGRlZmluZWQgb3BlcmF0b3Iu
CisgICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgdG9rZW4gaW50byBhIENPTlNUX0lOVCB0
b2tlbi4KKyAgICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgICAgICB0
b2tlbi0+dmFsdWUgPSBleHByZXNzaW9uOworICAgIH0KKworICBwcml2YXRlOgorICAgIExleGVy
KiBtTGV4ZXI7CisgICAgY29uc3QgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGlj
cyogbURpYWdub3N0aWNzOworfTsKKworRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIo
VG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgbVRva2VuaXplcih0b2tl
bml6ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdu
b3N0aWNzKSwKKyAgICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQoreworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBkbworICAg
IHsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4t
PnR5cGUgPT0gVG9rZW46OlBQX0hBU0gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlRGly
ZWN0aXZlKHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBU
b2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IENvbmRpdGlv
bmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTlRFUk1J
TkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2subG9jYXRp
b24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBlID09ICdcbicp
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tl
bikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnR5cGUgPT0gVG9rZW46OlBQX0hBU0gpOworCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdl
dERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBleGNsdWRlZCBjb25kaXRp
b25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNvbmRpdGlvbmFsIGRpcmVj
dGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoZGly
ZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGlyZWN0aXZlKQorICAgIHsK
KyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
SVJFQ1RJVkVfREVGSU5FOgorICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfVU5ERUY6CisgICAgICAgIHBhcnNlVW5kZWYodG9r
ZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICBw
YXJzZUlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRF
RjoKKyAgICAgICAgcGFyc2VJZmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRUxTRToKKyAgICAgICAgcGFyc2VFbHNlKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAg
ICBwYXJzZUVsaWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VORElGOgorICAgICAgICBwYXJzZUVuZGlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERJUkVDVElWRV9FUlJPUjoKKyAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfUFJBR01BOgorICAgICAgICBwYXJzZVBy
YWdtYSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRVhURU5T
SU9OOgorICAgICAgICBwYXJzZUV4dGVuc2lvbih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfVkVSU0lPTjoKKyAgICAgICAgcGFyc2VWZXJzaW9uKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9MSU5FOgorICAgICAgICBwYXJz
ZUxpbmUodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFz
c2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9E
SVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURl
ZmluZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0RFRklORSk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVkKHRva2VuLT52YWx1
ZSwgKm1NYWNyb1NldCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVf
UkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3Jv
OworICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRv
a2VuLT52YWx1ZTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2Vu
LT50eXBlID09ICcoJyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQorICAgIHsKKyAgICAg
ICAgLy8gRnVuY3Rpb24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCisgICAgICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVGdW5jOworICAgICAgICBkbyB7CisgICAgICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFj
cm8ucGFyYW1ldGVycy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKKworICAgICAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUgKHRva2Vu
LT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKKyAgICAg
ICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7ICAvLyBHZXQgJyknLgorICAgIH0KKworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0g
J1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIC8v
IFJlc2V0IHRoZSB0b2tlbiBsb2NhdGlvbiBiZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJl
cGxhY2VtZW50CisgICAgICAgIC8vIGxpc3QuIFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0
byByZXVzZSBUb2tlbjo6ZXF1YWxzKCkgdG8KKyAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCisg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgICAgIG1hY3Jv
LnJlcGxhY2VtZW50cy5wdXNoX2JhY2soKnRva2VuKTsKKyAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKKyAgICB9CisgICAgaWYgKCFtYWNyby5yZXBsYWNlbWVudHMuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIC8vIFdoaXRlc3BhY2UgcHJlY2VkaW5nIHRoZSByZXBsYWNlbWVudCBsaXN0
IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YKKyAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGxp
c3QgZm9yIGVpdGhlciBmb3JtIG9mIG1hY3JvLgorICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMu
ZnJvbnQoKS5zZXRIYXNMZWFkaW5nU3BhY2UoZmFsc2UpOworICAgIH0KKworICAgIC8vIENoZWNr
IGZvciBtYWNybyByZWRlZmluaXRpb24uCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtTWFjcm9TZXQtPmZpbmQobWFjcm8ubmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3Jv
U2V0LT5lbmQoKSAmJiAhbWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hY3JvLm5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1NYWNyb1NldC0+aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG1hY3JvLm5hbWUsIG1hY3JvKSk7Cit9
CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVU5ERUYpOworCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklE
RU5USUZJRVIpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TWFjcm9TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsK
KyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGl0
ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtTWFj
cm9TZXQtPmVyYXNlKGl0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRik7
CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9JRkRFRik7CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2Vu
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikK
K3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKTsK
KyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfRUxTRSk7CisKKyAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpD
T05ESVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1U
b2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENvbmRpdGlv
bmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAgIGlmIChibG9j
ay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lw
IHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisK
K3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKTsKKworICAgIGlmICht
Q29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5i
YWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRp
YWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJs
b2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3Qg
cGFyc2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAg
ICBibG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxp
ZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VFbmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJ
VElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1Db25kaXRpb25h
bFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0
ZXIgI2VuZGlmLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0
b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRXJyb3IoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4p
ID09IERJUkVDVElWRV9FUlJPUik7CisKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Cisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdc
bicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzdHJl
YW0gPDwgKnRva2VuOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAg
ICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXJyb3IodG9rZW4tPmxvY2F0aW9uLCBzdHJlYW0u
c3RyKCkpOworfQorCisvLyBQYXJzZXMgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFs
dWUpXS4KK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pCit7
CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1BSQUdNQSk7CisK
KyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBQUkFHTUFfTkFNRSwKKyAgICAgICAgTEVG
VF9QQVJFTiwKKyAgICAgICAgUFJBR01BX1ZBTFVFLAorICAgICAgICBSSUdIVF9QQVJFTgorICAg
IH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1
ZTsKKyAgICBpbnQgc3RhdGUgPSBQUkFHTUFfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlKyspCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9OQU1FOgorICAgICAgICAgICAgbmFtZSA9IHRva2Vu
LT52YWx1ZTsKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRv
a2VuOjpJREVOVElGSUVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTEVG
VF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICco
Jyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKKyAg
ICAgICAgICAgIHZhbHVlID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFs
aWQgJiYgKHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisg
ICAgdmFsaWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1w
dHkgcHJhZ21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8
fCAgICAgIC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09
IFJJR0hUX1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpF
RF9QUkFHTUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
bmFtZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBu
b3Qgbm90aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFu
ZGxlci0+aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0K
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikK
K3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9O
KTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBD
T0xPTiwKKyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0
cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVY
VF9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2Vu
LT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9O
QU1FOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURF
TlRJRklFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIENPTE9OOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlw
ZSAhPSAnOicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9F
WFRFTlNJT05fQkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGJlaGF2aW9yID0g
dG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisg
ICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9F
WFRFTlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQor
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUV4dGVuc2lv
bih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVj
dGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1ZFUlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAg
IHsKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRy
dWU7CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVS
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVN
QkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09O
U1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh2YWxpZCkgdmVyc2lvbiA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxp
ZCAmJiAoc3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAg
ICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJz
aW9uKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0xJTkUpOwor
CisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgTElORV9OVU1CRVIsCisgICAgICAgIEZJ
TEVfTlVNQkVSCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCBsaW5l
ID0gMCwgZmlsZSA9IDA7CisgICAgaW50IHN0YXRlID0gTElORV9OVU1CRVI7CisKKyAgICBNYWNy
b0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3Rp
Y3MpOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50
eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIExJTkVfTlVN
QkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09O
U1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh2YWxpZCkgbGluZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxFX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
RklMRV9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIGZpbGUgPSBhdG9pKHRva2Vu
LT52YWx1ZS5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0
b2tlbik7CisgICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikg
JiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAodmFsaWQpCisgICAgeworICAgICAg
ICBtVG9rZW5pemVyLT5zZXRMaW5lTnVtYmVyKGxpbmUpOworICAgICAgICBpZiAoc3RhdGUgPT0g
RklMRV9OVU1CRVIgKyAxKSBtVG9rZW5pemVyLT5zZXRGaWxlTnVtYmVyKGZpbGUpOworICAgIH0K
K30KKworYm9vbCBEaXJlY3RpdmVQYXJzZXI6OnNraXBwaW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
bUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgcmV0
dXJuIGJsb2NrLnNraXBCbG9jayB8fCBibG9jay5za2lwR3JvdXA7Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsSWYoVG9rZW4qIHRva2VuKQoreworICAgIENvbmRp
dGlvbmFsQmxvY2sgYmxvY2s7CisgICAgYmxvY2sudHlwZSA9IHRva2VuLT52YWx1ZTsKKyAgICBi
bG9jay5sb2NhdGlvbiA9IHRva2VuLT5sb2NhdGlvbjsKKworICAgIGlmIChza2lwcGluZygpKQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBjb25kaXRpb25hbCBibG9jayBpcyBpbnNpZGUgYW5vdGhl
ciBjb25kaXRpb25hbCBncm91cAorICAgICAgICAvLyB3aGljaCBpcyBza2lwcGVkLiBBcyBhIGNv
bnNlcXVlbmNlIHRoaXMgd2hvbGUgYmxvY2sgaXMgc2tpcHBlZC4KKyAgICAgICAgLy8gQmUgY2Fy
ZWZ1bCBub3QgdG8gcGFyc2UgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBtaWdodAor
ICAgICAgICAvLyBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgYmxvY2suc2tpcEJsb2NrID0gdHJ1ZTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJl
Y3RpdmUodG9rZW4pOworCisgICAgICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICAgICAgc3dp
dGNoIChkaXJlY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRjoK
KyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAg
ICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgICAgICBl
eHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pID09IDAgPyAxIDogMDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYmxvY2suc2tp
cEdyb3VwID0gZXhwcmVzc2lvbiA9PSAwOworICAgICAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAg
PSBleHByZXNzaW9uICE9IDA7CisgICAgfQorICAgIG1Db25kaXRpb25hbFN0YWNrLnB1c2hfYmFj
ayhibG9jayk7Cit9CisKK2ludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKFRv
a2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNU
SVZFX0lGKSB8fAorICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
RUxJRikpOworCisgICAgRGVmaW5lZFBhcnNlciBkZWZpbmVkUGFyc2VyKG1Ub2tlbml6ZXIsIG1N
YWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIo
JmRlZmluZWRQYXJzZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKKyAgICBFeHByZXNzaW9u
UGFyc2VyIGV4cHJlc3Npb25QYXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7CisK
KyAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwor
ICAgIGV4cHJlc3Npb25QYXJzZXIucGFyc2UodG9rZW4sICZleHByZXNzaW9uKTsKKworICAgIC8v
IFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KKyAgICBpZiAo
IWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Np
b247Cit9CisKK2ludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2Vu
KiB0b2tlbikKK3sKKyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZF
X0lGREVGKSB8fAorICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
SUZOREVGKSk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2Vu
LT52YWx1ZSk7CisgICAgaW50IGV4cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkg
PyAxIDogMDsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjaWZkZWYg
ZXhwcmVzc2lvbi4KKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICghaXNFT0Qo
dG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9E
KG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVhMDFlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2lu
Y2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5o
IgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFz
cyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7
CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6Cisg
ICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAg
ICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisK
KyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFy
c2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlm
ZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOwor
ICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRv
a2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0
aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiog
dG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisg
ICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5
cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBC
bG9jazsKKyAgICAgICAgYm9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdy
b3VwOworICAgICAgICBib29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFs
QmxvY2soKSA6CisgICAgICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tp
cEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAg
ICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
fTsKKyAgICBzdGQ6OnZlY3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsK
KyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAg
ICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJl
Y3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYmJjMzcxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3Bw
CkBAIC0wLDAgKzEsMTkyOCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDIuNC4yLiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFj
Yy1saWtlIHBhcnNlcnMgaW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwg
SW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg
ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ
ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBh
IHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29u
dGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRp
c3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9u
ZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcg
dGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNl
ciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
CisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24p
IHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUg
c2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBs
aWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQg
dGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3
YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAy
LjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4g
YnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1j
YWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJl
bG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBv
biB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisg
ICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIg
bWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4g
aW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRo
ZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAq
LworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKwor
LyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCisK
Ky8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIK
KworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogUHVzaCBwYXJz
ZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZp
bmUgWVlQVUxMIDEKKworLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVF
REVEIDAKKworLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAg
Ki8KKyNkZWZpbmUgeXlwYXJzZSAgICAgICAgIHBwcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAg
ICAgIHBwbGV4CisjZGVmaW5lIHl5ZXJyb3IgICAgICAgICBwcGVycm9yCisjZGVmaW5lIHl5bHZh
bCAgICAgICAgICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHBwY2hhcgorI2RlZmlu
ZSB5eWRlYnVnICAgICAgICAgcHBkZWJ1ZworI2RlZmluZSB5eW5lcnJzICAgICAgICAgcHBuZXJy
cworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwor
CisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisv
LyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5l
ZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYK
KworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+Cisj
aW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25v
c3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRv
bGwgX3N0cnRvaTY0CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhf
dCBZWVNUWVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJ
QUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVj
dCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6
TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9
OworfSAgLy8gbmFtZXNwYWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwg
Q29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lm
bmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2
ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5k
ZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMg
ZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2Vu
IHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJM
RSAwCisjZW5kaWYKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBk
ZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0
YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0
aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBDT05TVF9JTlQgPSAyNTgsCisg
ICAgIE9QX09SID0gMjU5LAorICAgICBPUF9BTkQgPSAyNjAsCisgICAgIE9QX05FID0gMjYxLAor
ICAgICBPUF9FUSA9IDI2MiwKKyAgICAgT1BfR0UgPSAyNjMsCisgICAgIE9QX0xFID0gMjY0LAor
ICAgICBPUF9SSUdIVCA9IDI2NSwKKyAgICAgT1BfTEVGVCA9IDI2NiwKKyAgICAgVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKworCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmlu
ZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2Nl
bnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEK
KyNlbmRpZgorCisKKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRl
ZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNl
Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZ
WVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0
eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWlu
dDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Cisj
ZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBl
X2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgor
CisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJ
WkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJ
WkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxz
ZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNk
ZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlm
IGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUwor
IyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lk
KQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkg
bXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fy
bmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9f
R05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZ
WVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2Vk
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lm
bmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgeXlpKQorI2Vs
c2UKK3N0YXRpYyBpbnQKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOworI2VuZGlmCit7CisgIHJl
dHVybiB5eWk7Cit9CisjZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVm
aW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxM
T0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9f
QlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAg
IGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9T
VERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBp
bmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
ICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5k
aWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZ
WVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcu
ICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hp
bGUgKFlZSUQgKDApKQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRo
ZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9m
IHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQw
OTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikg
aWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAg
IHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNs
b3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29u
YWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19B
TExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZ
WVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZ
U0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBk
ZWZpbmVkIF9TVERMSUJfSCBcCisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVm
aW5lZCBtYWxsb2MpIFwKKwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUp
KSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAg
ZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0Mg
bWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlT
SVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMg
IGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYg
ISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRp
ZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYg
KCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBc
CisJIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOwor
ICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBn
YXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUg
WVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRo
ZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVh
Y2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwK
KyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBc
CisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBm
cm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92
ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEg
PCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBf
X2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisj
ICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJ
CQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5
eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwK
Kwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisv
KiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBU
aGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9s
ZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIg
Z2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0
byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICov
CisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAg
IGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJ
CQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwK
KwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3Rh
Y2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlc
CisgICAgd2hpbGUgKFlZSUQgKDApKQorCisjZW5kaWYKKworLyogWVlGSU5BTCAtLSBTdGF0ZSBu
dW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgMTQK
Ky8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1Qg
ICAxNzUKKworLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmlu
ZSBZWU5UT0tFTlMgIDI3CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICov
CisjZGVmaW5lIFlZTk5UUyAgMworLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8K
KyNkZWZpbmUgWVlOUlVMRVMgIDI2CisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAg
Ki8KKyNkZWZpbmUgWVlOU1RBVEVTICA1MgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlz
b24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlV
TkRFRlRPSyAgMgorI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKKworI2RlZmluZSBZWVRSQU5TTEFU
RShZWVgpCQkJCQkJXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0
cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBC
aXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
IDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAorICAgICAgMjUs
ICAgIDI2LCAgICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIs
ICAgIDI0LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMjIKK307CisKKyNpZiBZWURFQlVHCisvKiBZWVBSSFNbWVlO
XSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4K
KyAgIFlZUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQorewor
ICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5
LCAgICAyMywgICAgMjcsCisgICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAg
IDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKKyAgICAgIDcxLCAgICA3NSwgICAgNzks
ICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkxCit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2Vw
YXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQ4IHl5cmhzW10gPQoreworICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAg
ICAgMywgICAgLTEsICAgIDI5LCAgICAgNCwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgICA1
LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAg
ICA3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAg
IDksICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgMTMsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxNCwgICAgMjksICAgIC0xLCAgICAy
OSwgICAgMTIsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKKyAgICAgIC0xLCAg
ICAyOSwgICAgMTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAg
IDI5LAorICAgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAyMSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywKKyAgICAgIDI5LCAgICAtMSwg
ICAgMjQsICAgIDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAor
ICAgICAgLTEsICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZ
Tl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgICA4
NywgICAgODcsICAgIDk0LCAgICA5NSwgICAgOTgsICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTEw
LAorICAgICAxMTMsICAgMTE2LCAgIDExOSwgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAg
MTM0LCAgIDEzNywgICAxNDAsCisgICAgIDE1MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzUs
ICAgMTc4LCAgIDE4MQorfTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJP
U0UgfHwgWVlUT0tFTl9UQUJMRQorLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFt
ZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhl
biwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0
IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Cit7CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmlu
ZWQiLCAiQ09OU1RfSU5UIiwgIk9QX09SIiwgIk9QX0FORCIsICInfCciLAorICAiJ14nIiwgIicm
JyIsICJPUF9ORSIsICJPUF9FUSIsICInPCciLCAiJz4nIiwgIk9QX0dFIiwgIk9QX0xFIiwKKyAg
Ik9QX1JJR0hUIiwgIk9QX0xFRlQiLCAiJysnIiwgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIs
ICJVTkFSWSIsICInISciLAorICAiJ34nIiwgIicoJyIsICInKSciLCAiJGFjY2VwdCIsICJpbnB1
dCIsICJleHByZXNzaW9uIiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZ
VE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5
eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAy
NjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAgMjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2Miwg
ICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0
NywgICAgMzcsICAgMjY3LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYK
KworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAg
ICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjkKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Yg
c3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMworfTsKKworLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJl
ZHVjZSB3aXRoIGluIHN0YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3Bl
Y2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlz
IGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUs
ICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZ
WURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZn
b3RvW10gPQoreworICAgICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRF
LU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBT
VEFURS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEs
ICAgLTExLCAgICAyNywgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwK
KyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAg
IDEwMSwgICAxMTYsICAgMTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEw
LCAgIC0xMCwgICAtMTAsICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAg
LTExLCAgIC0xMQorfTsKKworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsK
KworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNU
QVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZl
LCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6
ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBl
cnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRhYmxlW10gPQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAg
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIKK307CisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQor
eworICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAg
ICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgMywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDI2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
CisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
IDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAy
MSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisK
Ky8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNj
ZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAg
ICAgIDI5LCAgICAyOQorfTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQor
I2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgt
MikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFi
CisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3Rv
IHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4g
IFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9u
IHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAor
ICAgWVlGQUlMIGFwcGVhcnMgdG8gYmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3Jt
YWxseSBkZXByZWNhdGVkCisgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEg
cGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKKyAgIGRpc2N1c3NlZC4gICovCisKKyNkZWZpbmUgWVlG
QUlMCQlnb3RvIHl5ZXJybGFiCisjaWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJl
IHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1t
YWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAor
ICAgICBzb21lIHVzZXJzIGRvLCBhbmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJz
IHRvIHJlbW92ZQorICAgICBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz
IGZyb20gQmlzb24gMi41LiAgKi8KKyNlbmRpZgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAo
ISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitk
bwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAor
ICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXls
dmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hh
cik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNr
dXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJ
CVwKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFj
ayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxl
IChZWUlEICgwKSkKKworCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1
NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNb
MV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0
eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFs
d2F5cyBkZWZpbmVkKS4gICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10p
CisjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50
LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJ
CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJz
dF9saW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSku
Zmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJo
cywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9D
IChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJ
XAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFz
dF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkg
IChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAg
ICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3
aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmlu
dCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5k
YXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVh
ayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisK
KyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJ
QUwgJiYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmls
ZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAg
ICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYyku
bGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NB
VElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8q
IFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwor
CisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxF
WF9QQVJBTSkKKyNlbHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkK
KyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlE
RUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50Zgor
IyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBp
ZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJ
RCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExv
Y2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAg
XAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0
bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJ
ICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4i
KTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBv
biBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
QVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0
eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisj
ZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlw
ZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlw
ZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29u
dGV4dDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0Ug
KGNvbnRleHQpOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisg
ICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVs
c2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAg
eworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAo
RklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVl
cCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50
ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1
dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsK
KyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tF
TlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlw
ZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRu
YW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlw
ZSwgeXl2YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNr
IGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lk
Cit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5
eXRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRv
cCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7
CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7
IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9
ICp5eWJvdHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAg
IH0KKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19Q
UklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJ
CQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxl
IChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1
Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMg
dm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4
dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwg
eXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7Cisg
ICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1
bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9s
cyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsr
KQorICAgIHsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7
CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5
eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAJ
CSAgICAgICAsIGNvbnRleHQpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAg
IH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisg
IGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29u
dGV4dCk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBh
cnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxl
IHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJV
RyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQo
VGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZ
REVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNl
cidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBU
SCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tz
IGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4
dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9v
IGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01B
WElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5m
aW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhE
RVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJS
T1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18g
JiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNl
CisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3Qg
Y2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisg
ICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZv
ciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJl
dHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5Cisj
ICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9H
TlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZ
WVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcg
J1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBj
aGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNy
YykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sK
KyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3
aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1
cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgor
LyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3
YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBz
dWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1
b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFw
b3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNo
LWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwor
ICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQg
dGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0
bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIg
PT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0
ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsK
KwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRl
ZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAg
eXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAg
ICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25v
dF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5
c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXly
ZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdl
IGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlT
VEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0
aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Cisg
ICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291
bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRp
bmFyeSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9N
QVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAq
Lworc3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5
eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisg
IGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4g
MDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFy
KTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBl
XSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlz
aXplMTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJS
T1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAor
ICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0
cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5l
eHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5l
eHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9y
ICVzIik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5
ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1td
ID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIg
b3IgJXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICAr
IHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIg
Y29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAt
WVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4g
ICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8q
IFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAg
ICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9
IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAg
aW50IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAg
ICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBm
b3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5
eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291
bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQg
PSAxOworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVk
IC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10g
PSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5
dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7
CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5
eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlf
KHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAg
ICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUg
PSB5eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVf
TUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYs
IGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0
IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBw
cm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAg
Y2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9
ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFd
ID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlw
LCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJ
CSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNp
emU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRo
ZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3Ry
dWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENv
bnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5
eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGlu
dCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsK
KyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4dCk7CisKKyAg
aWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAo
eXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlw
ZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisvKiBQcmV2
ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworI2lmZGVmIFlZUEFS
U0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2lu
dCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsK
KyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7
CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFS
QU0gKi8KKworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ug
b3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZk
ZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFy
c2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vs
c2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAor
eXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYK
K3sKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBz
ZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZh
bDsKKworICAgIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50
IHl5bmVycnM7CisKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRv
IHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJz
dGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlz
cyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRp
YyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9p
bnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxz
ZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2lu
dDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0
eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICov
CisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAg
ICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOworCisgIGludCB5
eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFs
ICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhl
IHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJv
bSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lm
IFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRz
IGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1z
ZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsK
KyNlbmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAt
PSAoTikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJl
ZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBw
b3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5dG9rZW4gPSAwOworICB5eXNzID0g
eXlzc2E7CisgIHl5dnMgPSB5eXZzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKwor
ICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUg
PSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVN
UFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUg
c3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2Nh
dGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0
aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRp
YWxpemVkLiAgKi8KKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5
eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3
aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyog
SW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBz
dGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhl
cmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAq
eXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3Nw
KQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVl
IHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3Ag
LSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIg
YSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhl
c2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1l
bW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEg
PSB5eXNzOworCisJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkg
dGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMu
ICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28g
ZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxv
dyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwK
KwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5
eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9
IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cg
Ki8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7
CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAg
ICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsK
KyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tz
aXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFs
bG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYg
KCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5
c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwor
IyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RB
Q0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZs
b3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0g
eXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNp
emUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tz
aXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorCVlZ
QUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVk
XG4iLCB5eXN0YXRlKSk7CisKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQ
VDsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwK
K2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNz
aW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tl
biBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyog
Rmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2th
aGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZ
WVBBQ1RfTklORikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0
IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8q
IFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBz
eW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxF
WDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIg
PSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5k
IG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZ
WVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4g
aXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHBy
b3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisg
ICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRv
a2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5
dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYg
KHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9O
SU5GKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJl
ZHVjZTsKKyAgICB9CisKKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFm
dGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJz
dGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRv
a2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFs
LCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXlj
aGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsK
KworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBk
ZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0
OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8g
eXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9m
IGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8q
IElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUg
YWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5n
IGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9j
dW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBB
c3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIg
YSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlW
QUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxl
bl07CisKKworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsK
KyAgICAgICAgY2FzZSAyOgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBz
dGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFlZQUNDRVBUOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgz
KV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeworICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMp
IC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0
cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICUgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0g
MCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAg
c3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAg
ICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNw
WygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjI6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAt
ICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMild
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKworCisgICAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9
IHl5dmFsOworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4g
IERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0
YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBi
eS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAt
IFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZ
WUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFi
bGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRP
S0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiOgorICAv
KiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVy
cm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7Cisj
aWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yIikpOworI2Vsc2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9l
cnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYg
eXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZU0laRV9U
IHl5YWxsb2MgPSAyICogeXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYg
eXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2MgPSBZWVNU
QUNLX0FMTE9DX01BWElNVU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkgICAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9D
ICh5eWFsbG9jKTsKKwkgICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxv
YzsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXltc2dfYWxs
b2MgPSBzaXplb2YgeXltc2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5eXNpemUg
JiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50YXhfZXJy
b3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yIChjb250ZXh0LCB5eW1z
Zyk7CisJICB9CisJZWxzZQorCSAgeworCSAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRh
eCBlcnJvciIpKTsKKwkgICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7CisJICB9CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0
YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byBy
ZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwor
CisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlm
IGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFC
T1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRp
bmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZ
RU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVh
ZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3Rv
IHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBi
eSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBH
Q0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhl
IGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBj
b2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOwor
CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlv
biB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4p
OworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3Rh
dGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIx
IC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4g
c2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAg
eXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7
CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxl
W3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAg
ICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBl
cnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisK
KyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVd
LCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUg
PSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKwor
ICAqKyt5eXZzcCA9IHl5bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICov
CisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxz
cCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NF
UFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXlyZXR1cm47CisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJvcnRsYWIgLS0gWVlB
Qk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJldHVybjsKKworI2lm
ICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAt
LSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJy
b3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOwor
ICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFy
ICE9IFlZRU1QVFkpCisgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2th
aGVhZCIsCisJCSB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKyAgLyogRG8gbm90IHJlY2xh
aW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0
aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZ
X1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAg
IHsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5
c3NwXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lm
bmRlZiB5eW92ZXJmbG93CisgIGlmICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAo
eXlzcyk7CisjZW5kaWYKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNn
YnVmKQorICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZ
WUlEIGlzIHVzZWQuICAqLworICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisK
K2ludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQg
dHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAg
c3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1Rf
SU5UOgorICAgICAgICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxM
LCAwKTsKKyAgICAgICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX05FOiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0VROiB0eXBlID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dF
OiB0eXBlID0gT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBl
ID0gT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0g
T1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBP
UF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAg
IGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYn
OyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2Ug
JzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVh
azsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0
eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAg
ICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0g
JyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNh
c2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBi
cmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0
byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5
cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsK
K30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikK
K3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5W
QUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
c29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lv
blBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1M
ZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29s
IEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7Cisg
ICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3Rp
Y3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9r
ZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2Uo
JmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAg
IGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlv
biwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVS
TkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRXhwcmVzc2lvblBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1
Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4
cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwor
CisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRl
OgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKwor
ICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisK
K30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIueQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM2YzdiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMjc0IEBACisvKgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNM
IEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZ
T1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMg
VEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmln
Z2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVND
X1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2lu
Y2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3Mu
aCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVk
KF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0
cnRvaTY0CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNU
WVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQor
I2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250
ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIq
IGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAg
Ly8gbmFtZXNwYWNlCislfQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgor
JXBhcnNlLXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29u
dGV4dH0KKworJXsKK3N0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNv
bnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFy
KiByZWFzb24pOworJX0KKworJXRva2VuIENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9Q
X0FORAorJWxlZnQgJ3wnCislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUK
KyVsZWZ0ICc8JyAnPicgT1BfTEUgT1BfR0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0
ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQK
KyAgICA6IGV4cHJlc3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCQxKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9u
CisgICAgOiBDT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gJDEgfHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9BTkQgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBl
eHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfR0UgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBPUF9MRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uICc+JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwg
JDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFRlQgZXhwcmVz
c2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAn
LScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHBy
ZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAg
ICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgewor
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFt
IDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0
cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZ
WUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAg
ICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAg
IGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Cisg
ICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigp
KTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAk
JCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNz
aW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBl
eHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8
ICctJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0K
KyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOwor
ICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAg
fQorOworCislJQorCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgaW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQt
PnRva2VuOworICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6
VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUu
Y19zdHIoKSwgTlVMTCwgMCk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9HRTogdHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9MRTogdHlwZSA9IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9S
SUdIVDogdHlwZSA9IE9QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9M
RUZUOiB0eXBlID0gT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8Jzsg
YnJlYWs7CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcm
JzogdHlwZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7
CisgICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlw
ZSA9ICctJzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAg
ICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcv
JzsgYnJlYWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNl
ICchJzogdHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJl
YWs7CisgICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzog
dHlwZSA9ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAg
IC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlk
LgorICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAg
cmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJz
ZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
K3sKK30KKworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCog
cmVzdWx0KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNz
ID0gbURpYWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4
dC50b2tlbiA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCBy
ZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBj
YXNlIDA6CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKaW5kZXggNjk0YzNiZC4uYzNkZTk1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcApAQCAtNiwxNTkgKzYsNDkgQEAKIAogI2lu
Y2x1ZGUgIklucHV0LmgiCiAKLSNpbmNsdWRlIDxjc3RkaW8+Ci0KLSNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2lu
Y2x1ZGUgPGNzdHJpbmc+CiAKIG5hbWVzcGFjZSBwcAogewogCi1JbnB1dDo6SW5wdXQoaW50IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotICAg
IDogbUNvdW50KGNvdW50KSwKLSAgICAgIG1TdHJpbmcoc3RyaW5nKSwKLSAgICAgIG1MZW5ndGgo
bGVuZ3RoKSwKLSAgICAgIG1JbmRleCgtMSksCi0gICAgICBtU2l6ZSgwKSwKLSAgICAgIG1FcnJv
cihrRXJyb3JOb25lKSwKLSAgICAgIG1TdGF0ZShrU3RhdGVJbml0aWFsKQorSW5wdXQ6OklucHV0
KCkgOiBtQ291bnQoMCksIG1TdHJpbmcoMCkKIHsKLSAgICBBU1NFUlQobUNvdW50ID49IDApOwot
ICAgIHN3aXRjaFRvTmV4dFN0cmluZygpOwogfQogCi1ib29sIElucHV0Ojplb2YoKSBjb25zdAor
SW5wdXQ6OklucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSkgOgorICAgIG1Db3VudChjb3VudCksCisgICAgbVN0cmluZyhzdHJpbmcp
CiB7Ci0gICAgQVNTRVJUKG1JbmRleCA8PSBtQ291bnQpOwotICAgIHJldHVybiBtSW5kZXggPT0g
bUNvdW50OworICAgIGFzc2VydChtQ291bnQgPj0gMCk7CisgICAgbUxlbmd0aC5yZXNlcnZlKG1D
b3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7CisgICAg
ICAgIGludCBsZW4gPSBsZW5ndGggPyBsZW5ndGhbaV0gOiAtMTsKKyAgICAgICAgbUxlbmd0aC5w
dXNoX2JhY2sobGVuIDwgMCA/IHN0cmxlbihtU3RyaW5nW2ldKSA6IGxlbik7CisgICAgfQogfQog
Ci1pbnQgSW5wdXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgYnVmU2l6ZSkKK2ludCBJbnB1dDo6cmVh
ZChjaGFyKiBidWYsIGludCBtYXhTaXplKQogewotICAgIGludCBucmVhZCA9IDA7Ci0gICAgaW50
IHN0YXJ0SW5kZXggPSBtSW5kZXg7Ci0gICAgLy8gS2VlcCByZWFkaW5nIHVudGlsIHRoZSBidWZm
ZXIgaXMgZnVsbCBvciB0aGUgY3VycmVudCBzdHJpbmcgaXMgZXhoYXVzdGVkLgotICAgIHdoaWxl
ICgobUluZGV4ID09IHN0YXJ0SW5kZXgpICYmIChucmVhZCA8IGJ1ZlNpemUpKQorICAgIGludCBu
UmVhZCA9IDA7CisgICAgd2hpbGUgKChuUmVhZCA8IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5k
ZXggPCBtQ291bnQpKQogICAgIHsKLSAgICAgICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0gICAgICAg
IGlmIChjID09IEVPRikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZSA9PSBrU3Rh
dGVCbG9ja0NvbW1lbnQpCi0gICAgICAgICAgICAgICAgbUVycm9yID0ga0Vycm9yVW5leHBlY3Rl
ZEVPRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICht
U3RhdGUpCisgICAgICAgIGludCBzaXplID0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdIC0gbVJl
YWRMb2MuY0luZGV4OworICAgICAgICBzaXplID0gc3RkOjptaW4oc2l6ZSwgbWF4U2l6ZSk7Cisg
ICAgICAgIG1lbWNweShidWYgKyBuUmVhZCwgbVN0cmluZ1ttUmVhZExvYy5zSW5kZXhdICsgbVJl
YWRMb2MuY0luZGV4LCBzaXplKTsKKyAgICAgICAgblJlYWQgKz0gc2l6ZTsKKyAgICAgICAgbVJl
YWRMb2MuY0luZGV4ICs9IHNpemU7CisKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2Ug
cmVhY2hlZCB0aGUgZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2Mu
Y0luZGV4ID09IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAg
IGNhc2Uga1N0YXRlSW5pdGlhbDoKLSAgICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAg
ICAgICAgICAgc3dpdGNoIChwZWVrQ2hhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBF
YXQgJy8nLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoK
LSAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlID0ga1N0YXRlQmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IC8vIE5vdCBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9
IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Ug
a1N0YXRlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAg
bVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAo
YyA9PSAnKicgJiYgKHBlZWtDaGFyKCkgPT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRDaGFyKCk7ICAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJl
YWQrK10gPSAnICc7ICAvLyBSZXBsYWNlIGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAg
ICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGMgPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFr
cyBhcmUgbmV2ZXIgc2tpcHBlZC4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgKyttUmVhZExvYy5zSW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwog
ICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6Omdl
dENoYXIoKQotewotICAgIGlmIChlb2YoKSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIq
IHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAg
IC8vIFN3aXRjaCB0byBuZXh0IHN0cmluZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVh
ZC4KLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2
ZXIgcmVhZCBmcm9tIGVtcHR5IHN0cmluZy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAg
IGlmICgoKGxlbmd0aCA8IDApICYmIChzdHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAo
KGxlbmd0aCA+IDApICYmIChtU2l6ZSA9PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gYzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17
Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9
IG1JbmRleDsKLSAgICBpbnQgc2l6ZSA9IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwot
Ci0gICAgLy8gUmVzdG9yZSByZWFkIHBvc2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAg
IG1TaXplID0gc2l6ZTsKLSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9O
ZXh0U3RyaW5nKCkKLXsKLSAgICBBU1NFUlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXpl
ID0gMDsKLSAgICBkbwotICAgIHsKLSAgICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVv
ZigpICYmIGlzU3RyaW5nRW1wdHkobUluZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5n
RW1wdHkoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBj
b25zdCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmlu
Z0xlbmd0aChtSW5kZXgpOwotICAgIHJldHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwg
MCkgJiYgKHN0clswXSA9PSAnXDAnKSk7Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGlu
dCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVu
Z3RoID8gbUxlbmd0aFtpbmRleF0gOiAtMTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKaW5kZXggNWExYjVkMS4uZGFj
NzM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCkBAIC03LDY2ICs3LDQwIEBACiAjaWZu
ZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfSU5QVVRfSF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7
CiAKLS8vIFJlYWRzIHRoZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4K
LS8vIFN0cmlwcyBjb21tZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIu
CiBjbGFzcyBJbnB1dAogewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwog
Ci0gICAgZW51bSBFcnJvcgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vy
cm9yVW5leHBlY3RlZEVPRgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVy
biBtRXJyb3I7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHN0cmluZyBjdXJyZW50
bHkgYmVpbmcgc2Nhbm5lZC4KLSAgICBpbnQgc3RyaW5nSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
SW5kZXg7IH0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgRU9GIGhhcyByZWFjaGVkLgotICAgIGJv
b2wgZW9mKCkgY29uc3Q7CisgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbUNvdW50OyB9
CisgICAgY29uc3QgY2hhciogc3RyaW5nKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbVN0cmlu
Z1tpbmRleF07IH0KKyAgICBpbnQgbGVuZ3RoKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbUxl
bmd0aFtpbmRleF07IH0KIAotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBp
bnRvIGJ1Zi4KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgot
ICAgIC8vIEl0IHJlcGxhY2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRz
IG9ubHkgb25lIHN0cmluZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMg
b3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5p
bmdmdWwgZGlhZ25vc3RpYyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBi
dWZTaXplKTsKKyAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0
ZToKLSAgICBlbnVtIFN0YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBr
U3RhdGVJbml0aWFsLAotICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRl
QmxvY2tDb21tZW50Ci0gICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRl
eDsKKyAgICAgICAgaW50IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hh
cigpOwotICAgIGludCBwZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0
byB0aGUgbmV4dCBub24tZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4g
dGhlIGN1cnJlbnQgc3RyaW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRT
dHJpbmcoKTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0
eS4KLSAgICBib29sIGlzU3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhl
IGxlbmd0aCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2
YWx1ZSBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChp
bnQgaW5kZXgpOworICAgICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9
CisgICAgfTsKKyAgICBjb25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1S
ZWFkTG9jOyB9CiAKKyAgcHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50Owog
ICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsK
LQotICAgIC8vIEN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KLSAgICBpbnQgbUluZGV4OyAgIC8vIElu
ZGV4IG9mIHN0cmluZyBjdXJyZW50bHkgYmVpbmcgc2Nhbm5lZC4KLSAgICBpbnQgbVNpemU7ICAg
IC8vIFNpemUgb2Ygc3RyaW5nIGFscmVhZHkgc2Nhbm5lZC4KKyAgICBzdGQ6OnZlY3RvcjxpbnQ+
IG1MZW5ndGg7CiAKLSAgICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBt
RXJyb3I7Ci0gICAgU3RhdGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAog
fSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2NjNlZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkxleGVyLmgi
CisKK25hbWVzcGFjZSBwcAoreworCitMZXhlcjo6fkxleGVyKCkKK3sKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lYjg1Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApAQCAtMCwwICsx
LDI1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVY
RVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKK25hbWVzcGFj
ZSBwcAoreworCitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5MZXhlcigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4p
ID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfTEVYRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCmluZGV4IGZj
Y2NhOTYuLmIyZTMwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKQEAgLTYsMzkg
KzYsMTcgQEAKIAogI2luY2x1ZGUgIk1hY3JvLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0K
LSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2Ug
cHAKIHsKIAotTWFjcm86Ok1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyogbmFtZSwKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAg
ICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotICAgIDogbVR5cGUodHlwZSksCi0gICAg
ICBtTmFtZShuYW1lKSwKLSAgICAgIG1QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLAotICAgICAgbVJl
cGxhY2VtZW50cyhyZXBsYWNlbWVudHMpCi17Ci19Ci0KLU1hY3JvOjp+TWFjcm8oKQorYm9vbCBN
YWNybzo6ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3QKIHsKLSAgICBkZWxldGUgbU5h
bWU7Ci0KLSAgICBpZiAobVBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNo
KG1QYXJhbWV0ZXJzLT5iZWdpbigpLCBtUGFyYW1ldGVycy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAg
ICAgICAgZGVsZXRlIG1QYXJhbWV0ZXJzOwotICAgIH0KLQotICAgIGlmIChtUmVwbGFjZW1lbnRz
KQotICAgIHsKLSAgICAgICAgc3RkOjpmb3JfZWFjaChtUmVwbGFjZW1lbnRzLT5iZWdpbigpLCBt
UmVwbGFjZW1lbnRzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVJlcGxhY2Vt
ZW50czsKLSAgICB9CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAg
ICAgIChuYW1lID09IG90aGVyLm5hbWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90
aGVyLnBhcmFtZXRlcnMpICYmCisgICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVw
bGFjZW1lbnRzKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uaAppbmRleCBlMjQzMzA2Li43ZWMwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw0NSArNywz
OCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KICNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8
c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIE1hY3Jv
CitzdHJ1Y3QgVG9rZW47CisKK3N0cnVjdCBNYWNybwogewotICBwdWJsaWM6CiAgICAgZW51bSBU
eXBlCiAgICAgewogICAgICAgICBrVHlwZU9iaiwKICAgICAgICAga1R5cGVGdW5jCiAgICAgfTsK
KyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5
cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBw
cmVkZWZpbmVkKGZhbHNlKSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAg
ICBib29sIGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OwogCi0gICAgLy8gVGFrZXMg
b3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0g
ICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFt
ZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3Jv
KCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0
IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBj
b25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJz
OyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsK
LSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNl
bWVudHM7CisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsK
KworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMg
cGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwogfTsKIAotfSAgLy8g
bmFtZXNwYWNlIHBwCi0jZW5kaWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCit0eXBl
ZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVz
cGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDE1NGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIu
Y3BwCkBAIC0wLDAgKzEsMzY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhw
YW5kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2lu
Y2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExl
eGVyCit7CisgcHVibGljOgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVj
dG9yOworCisgICAgVG9rZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAg
ICAgdG9rZW5zLT5zd2FwKG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4o
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7Cisg
ICAgICAgIGlmIChtSXRlciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICB0b2tlbi0+cmVzZXQoKTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4g
PSAqbUl0ZXIrKzsKKyAgICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2Vu
czsKKyAgICBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4
cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1N
YWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQor
CitNYWNyb0V4cGFuZGVyOjp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgd2hpbGUgKCFtQ29udGV4
dFN0YWNrLmVtcHR5KCkpIHBvcE1hY3JvKCk7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4
KFRva2VuKiB0b2tlbikKK3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRv
a2VuKHRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJ
RVIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRp
c2FibGVkKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgICAgICBp
ZiAoaXRlciA9PSBtTWFjcm9TZXQtPmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY29uc3QgTWFjcm8mIG1hY3JvID0gaXRlci0+c2Vjb25kOworICAgICAgICBpZiAobWFjcm8u
ZGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIGEgcGFydGljdWxhciB0b2tl
biBpcyBub3QgZXhwYW5kZWQsIGl0IGlzIG5ldmVyIGV4cGFuZGVkLgorICAgICAgICAgICAgdG9r
ZW4tPnNldEV4cGFuc2lvbkRpc2FibGVkKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpICYmICFp
c05leHRUb2tlbkxlZnRQYXJlbigpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGUg
dG9rZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hY3JvIG5hbWUgaXMgbm90IGEgJygnLAorICAg
ICAgICAgICAgLy8gdGhpcyBtYWNybyBzaG91bGQgbm90IGJlIGV4cGFuZGVkLgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwdXNoTWFjcm8obWFjcm8sICp0b2tlbik7
CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmdldFRva2VuKFRva2VuKiB0b2tlbikK
K3sKKyAgICBpZiAobVJlc2VydmVUb2tlbi5nZXQoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9
ICptUmVzZXJ2ZVRva2VuOworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGaXJzdCBwb3AgYWxsIGVtcHR5IG1hY3JvIGNvbnRl
eHRzLgorICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpICYmIG1Db250ZXh0U3RhY2su
YmFjaygpLT5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcG9wTWFjcm8oKTsKKyAgICB9CisKKyAg
ICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9IG1D
b250ZXh0U3RhY2suYmFjaygpLT5nZXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjp1
bmdldFRva2VuKGNvbnN0IFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAoIW1Db250ZXh0U3RhY2su
ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0
U3RhY2suYmFjaygpOworICAgICAgICBjb250ZXh0LT51bmdldCgpOworICAgICAgICBhc3NlcnQo
Y29udGV4dC0+aW5kZXggPj0gMCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVu
dHNbY29udGV4dC0+aW5kZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgYXNzZXJ0KCFtUmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAgbVJlc2VydmVUb2tl
bi5yZXNldChuZXcgVG9rZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRl
cjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRv
a2VuKCZ0b2tlbik7CisKKyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOworICAg
IHVuZ2V0VG9rZW4odG9rZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30KKworYm9vbCBNYWNy
b0V4cGFuZGVyOjpwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRl
bnRpZmllcikKK3sKKyAgICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAgICBhc3NlcnQoIWlk
ZW50aWZpZXIuZXhwYW5zaW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudHlw
ZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudmFsdWUgPT0g
bWFjcm8ubmFtZSk7CisKKyAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworICAg
IGlmICghZXhwYW5kTWFjcm8obWFjcm8sIGlkZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5z
aW9uIHVudGlsIGl0IGlzIHBvcHBlZCBvZmYgdGhlIHN0YWNrLgorICAgIG1hY3JvLmRpc2FibGVk
ID0gdHJ1ZTsKKworICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7
CisgICAgY29udGV4dC0+bWFjcm8gPSAmbWFjcm87CisgICAgY29udGV4dC0+cmVwbGFjZW1lbnRz
LnN3YXAocmVwbGFjZW1lbnRzKTsKKyAgICBtQ29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygp
Cit7CisgICAgYXNzZXJ0KCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpOworCisgICAgTWFjcm9Db250
ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgbUNvbnRleHRTdGFjay5w
b3BfYmFjaygpOworCisgICAgYXNzZXJ0KGNvbnRleHQtPmVtcHR5KCkpOworICAgIGFzc2VydChj
b250ZXh0LT5tYWNyby0+ZGlzYWJsZWQpOworICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9
IGZhbHNlOworICAgIGRlbGV0ZSBjb250ZXh0OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmV4
cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIHJlcGxhY2Vt
ZW50cy0+Y2xlYXIoKTsKKyAgICBpZiAobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCisg
ICAgeworICAgICAgICByZXBsYWNlbWVudHMtPmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVn
aW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVu
ZCgpKTsKKworICAgICAgICBpZiAobWFjcm8ucHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtMaW5lID0gIl9fTElORV9fIjsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7CisKKyAg
ICAgICAgICAgIGFzc2VydChyZXBsYWNlbWVudHMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAg
IFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5mcm9udCgpOworICAgICAgICAgICAgaWYgKG1h
Y3JvLm5hbWUgPT0ga0xpbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVy
LmxvY2F0aW9uLmxpbmU7CisgICAgICAgICAgICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0Zp
bGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7
CisgICAgICAgICAgICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQobWFj
cm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9B
cmc+IGFyZ3M7CisgICAgICAgIGFyZ3MucmVzZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7
CisgICAgICAgIGlmICghY29sbGVjdE1hY3JvQXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3Mp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlcGxhY2VNYWNyb1BhcmFt
cyhtYWNybywgYXJncywgcmVwbGFjZW1lbnRzKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlcGxhY2VtZW50cy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBUb2tl
biYgcmVwbCA9IHJlcGxhY2VtZW50cy0+YXQoaSk7CisgICAgICAgIGlmIChpID09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQg
bGlzdCBpbmhlcml0cyB0aGUgcGFkZGluZworICAgICAgICAgICAgLy8gcHJvcGVydGllcyBvZiB0
aGUgaWRlbnRpZmllciB0b2tlbi4KKyAgICAgICAgICAgIHJlcGwuc2V0QXRTdGFydE9mTGluZShp
ZGVudGlmaWVyLmF0U3RhcnRPZkxpbmUoKSk7CisgICAgICAgICAgICByZXBsLnNldEhhc0xlYWRp
bmdTcGFjZShpZGVudGlmaWVyLmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXBsLmxvY2F0aW9uID0gaWRlbnRpZmllci5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBN
YWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdl
dFRva2VuKCZ0b2tlbik7CisgICAgYXNzZXJ0KHRva2VuLnR5cGUgPT0gJygnKTsKKworICAgIGFy
Z3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICBmb3IgKGludCBvcGVuUGFyZW5zID0gMTsg
b3BlblBhcmVucyAhPSAwOyApCisgICAgeworICAgICAgICBnZXRUb2tlbigmdG9rZW4pOworCisg
ICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVE
X0lOVk9DQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVy
LmxvY2F0aW9uLCBpZGVudGlmaWVyLnZhbHVlKTsKKyAgICAgICAgICAgIC8vIERvIG5vdCBsb3Nl
IEVPRiB0b2tlbi4KKyAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAv
LyBUcnVlIGlmIHRva2VuIGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisgICAgICAg
IHN3aXRjaCAodG9rZW4udHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJygnOgorICAg
ICAgICAgICAgKytvcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAtLW9wZW5QYXJl
bnM7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwg
YXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKKyAgICAgICAgICAg
IC8vIHRoZSBjb21tYSB0b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBk
byBub3QKKyAgICAgICAgICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIGlm
IChvcGVuUGFyZW5zID09IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICAgICAg
ICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChpc0FyZykKKyAgICAgICAgeworICAgICAgICAgICAg
TWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWwgd2hp
dGVzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgICAgICBpZiAoYXJn
LmVtcHR5KCkpIHRva2VuLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgICAgICAgICBh
cmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IE1hY3Jv
OjpQYXJhbWV0ZXJzJiBwYXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOworICAgIC8vIElmIHRoZXJl
IGlzIG9ubHkgb25lIGVtcHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3Vt
ZW50LgorICAgIGlmIChwYXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFy
Z3MtPmZyb250KCkuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3MtPmNsZWFyKCk7CisgICAg
fQorICAgIC8vIFZhbGlkYXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChhcmdz
LT5zaXplKCkgIT0gcGFyYW1zLnNpemUoKSkKKyAgICB7CisgICAgICAgIERpYWdub3N0aWNzOjpJ
RCBpZCA9IGFyZ3MtPnNpemUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KKyAgICAgICAg
ICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25v
c3RpY3M6Ok1BQ1JPX1RPT19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KGlkLCBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZv
cmUgc3Vic3RpdHV0aW9uLgorICAgIC8vIFRoaXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQg
aW5kaXZpZHVhbGx5IGJlZm9yZSB0aGV5IGFyZQorICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1h
Y3JvIGJvZHkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkK
KyAgICB7CisgICAgICAgIE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5hdChpKTsKKyAgICAgICAgVG9r
ZW5MZXhlciBsZXhlcigmYXJnKTsKKyAgICAgICAgTWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4
ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKKworICAgICAgICBhcmcuY2xlYXIoKTsKKyAg
ICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7CisgICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9
IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2Vu
KTsKKyAgICAgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1Bh
cmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFj
ZW1lbnRzW2ldOworICAgICAgICBpZiAocmVwbC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZv
ciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4KKyAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNh
biBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIE1hY3JvOjpQ
YXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RkOjpmaW5kKAorICAgICAgICAgICAg
bWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnZh
bHVlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpQXJnID0gc3RkOjpk
aXN0YW5jZShtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCksIGl0ZXIpOworICAgICAgICBjb25zdCBN
YWNyb0FyZyYgYXJnID0gYXJnc1tpQXJnXTsKKyAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3Qg
aVJlcGwgPSByZXBsYWNlbWVudHMtPnNpemUoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNl
cnQocmVwbGFjZW1lbnRzLT5lbmQoKSwgYXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAg
IC8vIFRoZSByZXBsYWNlbWVudCB0b2tlbiBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJv
bQorICAgICAgICAvLyBtYWNybyByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1l
bnRzLT5hdChpUmVwbCkuc2V0SGFzTGVhZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkp
OworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvRXhwYW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
NTA0ZWJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBB
TkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8K
KworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJMZXhl
ci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNw
YWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDog
cHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhl
ciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNy
b0V4cGFuZGVyKTsKKworICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlzTmV4dFRva2VuTGVm
dFBhcmVuKCk7CisKKyAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0
IFRva2VuJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisKKyAgICBib29sIGV4
cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9r
ZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFj
cm9Bcmc7CisgICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7CisgICAgdm9p
ZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisK
KyAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0CisgICAgeworICAgICAgICBjb25zdCBNYWNybyogbWFj
cm87CisgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJl
cGxhY2VtZW50czsKKworICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgw
KSB7IH0KKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxh
Y2VtZW50cy5zaXplKCk7IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJl
cGxhY2VtZW50c1tpbmRleCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9
CisgICAgfTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsK
KyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tl
bj4gbVJlc2VydmVUb2tlbjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4
dFN0YWNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmNwcAppbmRleCBlZjQ5ZTU3Li4yMTkwMWZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKQEAgLTYsNDcgKzYsMTA4IEBACiAKICNpbmNs
dWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxj
YXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5o
IgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRl
ICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorI2luY2x1ZGUg
Ik1hY3JvLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgi
CisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNz
b3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVMTCkKK3N0cnVjdCBQcmVwcm9jZXNzb3JJ
bXBsCiB7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3Jv
U2V0OworICAgIFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVj
dGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVw
cm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGly
ZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhk
aWFnKSwKKyAgICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIo
JnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAg
bWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgewor
ICAgIH0KK307CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRp
cmVjdGl2ZUhhbmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFn
bm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7CiB9CiAKIFByZXByb2Nlc3Nvcjo6flByZXByb2Nl
c3NvcigpCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OworICAgIGRlbGV0ZSBtSW1wbDsKIH0KIAot
Ym9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQorYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCiB7Ci0gICAgbUNv
bnRleHQgPSBuZXcgQ29udGV4dDsKLSAgICByZXR1cm4gbUNvbnRleHQtPmluaXQoKTsKKyAgICBz
dGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFy
ZCBwcmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7
CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8o
Il9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMi
LCAxKTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywg
bGVuZ3RoKTsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCit2b2lkIFByZXByb2Nl
c3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQogewotICAg
IEFTU0VSVCgoY291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50
IDwgMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CisKKyAgICBUb2tl
biB0b2tlbjsKKyAgICB0b2tlbi50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKKyAgICB0b2tlbi52
YWx1ZSA9IHN0cmVhbS5zdHIoKTsKIAotICAgIHJlc2V0KCk7CisgICAgTWFjcm8gbWFjcm87Cisg
ICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlw
ZU9iajsKKyAgICBtYWNyby5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVz
aF9iYWNrKHRva2VuKTsKIAotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3Ry
aW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAgICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNy
bzsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjps
ZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBt
VG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOworICAgIGJvb2wg
dmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAg
ICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9r
ZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVy
bmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0
IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAg
ICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAg
ICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgVG9rZW46OlBQX05VTUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAg
bUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVS
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vz
c29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9QcmVwcm9jZXNzb3IuaAppbmRleCA4ODViYjcwLi41ZmUzNWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApAQCAtNywzNCArNyw0MSBAQAogI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgogCiBuYW1lc3Bh
Y2UgcHAKIHsKIAotY2xhc3MgQ29udGV4dDsKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGly
ZWN0aXZlSGFuZGxlcjsKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOwog
CiBjbGFzcyBQcmVwcm9jZXNzb3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOwor
ICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRs
ZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogICAgIH5QcmVwcm9jZXNzb3IoKTsKIAotICAgIGJvb2wg
aW5pdCgpOwotCi0gICAgYm9vbCBwcm9jZXNzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0gICAgVG9rZW5JdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuYmVnaW4oKTsgfQotICAgIFRva2VuSXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5lbmQoKTsgfQorICAgIC8vIGNvdW50OiBzcGVjaWZp
ZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlz
LgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmlu
Z3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMu
CisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUg
bnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4g
TlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBs
ZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgor
ICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBs
ZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNz
IHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1p
bmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3Jv
LgorICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsK
KworICAgIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKLQotICAgIC8vIFJlc2V0IHRvIGluaXRp
YWxpemVkIHN0YXRlLgotICAgIHZvaWQgcmVzZXQoKTsKKyAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKIAotICAgIENvbnRleHQqIG1Db250ZXh0OwotICAgIFRv
a2VuVmVjdG9yIG1Ub2tlbnM7ICAvLyBPdXRwdXQuCisgICAgUHJlcHJvY2Vzc29ySW1wbCogbUlt
cGw7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9T
b3VyY2VMb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODI2
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAgKzEsMzggQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJ
T05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAgU291cmNl
TG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRpb24oaW50
IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFscyhjb25z
dCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGZp
bGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQorCisgICAg
aW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7Cisg
ICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQorewor
ICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW4uY3BwCmluZGV4IGEyZTc1OWMuLjk2MDM4MGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHAKQEAgLTYsNTAgKzYsNTYgQEAKIAogI2luY2x1ZGUgIlRva2Vu
LmgiCiAKLSNpbmNsdWRlICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0
aW9uTGluZVNpemUgPSAxNjsgIC8vIGluIGJpdHMuCi1zdGF0aWMgY29uc3QgaW50IGtMb2NhdGlv
bkxpbmVNYXNrID0gKDEgPDwga0xvY2F0aW9uTGluZVNpemUpIC0gMTsKLQogbmFtZXNwYWNlIHBw
CiB7CiAKLVRva2VuOjpMb2NhdGlvbiBUb2tlbjo6ZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGlu
dCBmaWxlKQordm9pZCBUb2tlbjo6cmVzZXQoKQogewotICAgIHJldHVybiAoZmlsZSA8PCBrTG9j
YXRpb25MaW5lU2l6ZSkgfCAobGluZSAmIGtMb2NhdGlvbkxpbmVNYXNrKTsKKyAgICB0eXBlID0g
MDsKKyAgICBmbGFncyA9IDA7CisgICAgbG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAg
IHZhbHVlLmNsZWFyKCk7CiB9CiAKLXZvaWQgVG9rZW46OmRlY29kZUxvY2F0aW9uKExvY2F0aW9u
IGxvYywgaW50KiBsaW5lLCBpbnQqIGZpbGUpCitib29sIFRva2VuOjplcXVhbHMoY29uc3QgVG9r
ZW4mIG90aGVyKSBjb25zdAogewotICAgIGlmIChmaWxlKSAqZmlsZSA9IGxvYyA+PiBrTG9jYXRp
b25MaW5lU2l6ZTsKLSAgICBpZiAobGluZSkgKmxpbmUgPSBsb2MgJiBrTG9jYXRpb25MaW5lTWFz
azsKKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKGZsYWdz
ID09IG90aGVyLmZsYWdzKSAmJgorICAgICAgICAgICAobG9jYXRpb24gPT0gb3RoZXIubG9jYXRp
b24pICYmCisgICAgICAgICAgICh2YWx1ZSA9PSBvdGhlci52YWx1ZSk7CiB9CiAKLVRva2VuOjpU
b2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSkKLSAg
ICA6IG1Mb2NhdGlvbihsb2NhdGlvbiksCi0gICAgICBtVHlwZSh0eXBlKSwKLSAgICAgIG1WYWx1
ZSh2YWx1ZSkKK3ZvaWQgVG9rZW46OnNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCkKIHsKKyAg
ICBpZiAoc3RhcnQpCisgICAgICAgIGZsYWdzIHw9IEFUX1NUQVJUX09GX0xJTkU7CisgICAgZWxz
ZQorICAgICAgICBmbGFncyAmPSB+QVRfU1RBUlRfT0ZfTElORTsKIH0KIAotVG9rZW46On5Ub2tl
bigpIHsKLSAgICBkZWxldGUgbVZhbHVlOwordm9pZCBUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNl
KGJvb2wgc3BhY2UpCit7CisgICAgaWYgKHNwYWNlKQorICAgICAgICBmbGFncyB8PSBIQVNfTEVB
RElOR19TUEFDRTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5IQVNfTEVBRElOR19TUEFD
RTsKK30KKwordm9pZCBUb2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKQor
eworICAgIGlmIChkaXNhYmxlKQorICAgICAgICBmbGFncyB8PSBFWFBBTlNJT05fRElTQUJMRUQ7
CisgICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+RVhQQU5TSU9OX0RJU0FCTEVEOwogfQogCiBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0
b2tlbikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkKLSAgICB7Ci0gICAgICBjYXNlIElO
VF9DT05TVEFOVDoKLSAgICAgIGNhc2UgRkxPQVRfQ09OU1RBTlQ6Ci0gICAgICBjYXNlIElERU5U
SUZJRVI6Ci0gICAgICAgIG91dCA8PCAqKHRva2VuLnZhbHVlKCkpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi50
eXBlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdT
cGFjZSgpKQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnZhbHVlOwog
ICAgIHJldHVybiBvdXQ7CiB9Ci19ICAvLyBuYW1lc3BhY2UgcHAKIAorfSAgLy8gbmFtZXNwYWNl
IHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAppbmRleCA0ZjVhMTJiLi41MjMxMDIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKQEAgLTcsNDIgKzcsOTQgQEAKICNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9U
T0tFTl9IXwogCisjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVk
ZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJT
b3VyY2VMb2NhdGlvbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgVG9rZW4KK3N0cnVj
dCBUb2tlbgogewotICBwdWJsaWM6Ci0gICAgdHlwZWRlZiBpbnQgTG9jYXRpb247Ci0gICAgc3Rh
dGljIExvY2F0aW9uIGVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSk7Ci0gICAgc3Rh
dGljIHZvaWQgZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmls
ZSk7CisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KIAot
ICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9j
YXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOworICAg
ICAgICBJREVOVElGSUVSID0gMjU4LAogCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBl
OyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVl
OyB9CisgICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCiAKLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOworICAgICAgICBPUF9JTkMs
CisgICAgICAgIE9QX0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisg
ICAgICAgIE9QX0xFLAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9Q
X05FLAorICAgICAgICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisg
ICAgICAgIE9QX0FERF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9Q
X01VTF9BU1NJR04sCisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJ
R04sCisgICAgICAgIE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisg
ICAgICAgIE9QX0FORF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9Q
X09SX0FTU0lHTiwKIAotICAgIExvY2F0aW9uIG1Mb2NhdGlvbjsKLSAgICBpbnQgbVR5cGU7Ci0g
ICAgc3RkOjpzdHJpbmcqIG1WYWx1ZTsKKyAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyB0b2tlbiB0
eXBlcy4KKyAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgYnkgdGhlIHByZXByb2Nlc3Nv
ciBpbnRlcm5hbGx5LgorICAgICAgICAvLyBQcmVwcm9jZXNzb3IgY2xpZW50cyBtdXN0IG5vdCBk
ZXBlbmQgb3IgY2hlY2sgZm9yIHRoZW0uCisgICAgICAgIFBQX0hBU0gsCisgICAgICAgIFBQX05V
TUJFUiwKKyAgICAgICAgUFBfT1RIRVIKKyAgICB9OworICAgIGVudW0gRmxhZ3MKKyAgICB7Cisg
ICAgICAgIEFUX1NUQVJUX09GX0xJTkUgICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJTkdf
U1BBQ0UgID0gMSA8PCAxLAorICAgICAgICBFWFBBTlNJT05fRElTQUJMRUQgPSAxIDw8IDIKKyAg
ICB9OworCisgICAgVG9rZW4oKSA6IHR5cGUoMCksIGZsYWdzKDApIHsgfQorCisgICAgdm9pZCBy
ZXNldCgpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3Q7CisKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdG9rZW4gb24gbGluZS4KKyAg
ICAvLyBJdCBkaXNyZWdhcmRzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgYm9vbCBhdFN0
YXJ0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgQVRfU1RBUlRfT0ZfTElORSkgIT0g
MDsgfQorICAgIHZvaWQgc2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KTsKKworICAgIGJvb2wg
aGFzTGVhZGluZ1NwYWNlKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgSEFTX0xFQURJTkdfU1BB
Q0UpICE9IDA7IH0KKyAgICB2b2lkIHNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKTsKKwor
ICAgIGJvb2wgZXhwYW5zaW9uRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBFWFBB
TlNJT05fRElTQUJMRUQpICE9IDA7IH0KKyAgICB2b2lkIHNldEV4cGFuc2lvbkRpc2FibGVkKGJv
b2wgZGlzYWJsZSk7CisKKyAgICBpbnQgdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7Cisg
ICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CiB9Owog
Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVmIFRva2Vu
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiBs
aHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9rZW4m
IGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsK
K30KIAogZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwg
Y29uc3QgVG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JhOGJkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzNDUgQEAKKyNsaW5lIDE2
ICIuL1Rva2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisKKworI2xpbmUg
MTMgIi4vVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50
CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUg
RkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZ
X0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAz
NQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisj
ZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29t
cGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMu
ICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJz
LiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZM
RVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlw
ZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQg
KF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBD
OTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0
ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGlu
dCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NU
RENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVk
ZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5
cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2
X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4
X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90
OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8K
KyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkK
KyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAg
ICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01J
TiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgK
KyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElO
VDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgor
I2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4
MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAg
ICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQx
Nl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisj
ZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNl
bmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJj
b25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNF
X0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9f
U1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKwor
I2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwor
I2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmlu
ZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0
dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21v
dGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2ln
bmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVk
IGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4g
OC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2Rl
ZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisK
Ky8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJf
VAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5f
dDsKKyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJp
c29uIHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5u
ZXIuICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91
dF9yCisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+
eXlsZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8g
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVt
biAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2Zs
ZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRp
b24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0
IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAo
KS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+
eXlfc3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0
ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byBy
ZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29t
cGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAv
IDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9G
IHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0
YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24g
bWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVX
X0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5k
ZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBU
aGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBj
aGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9T
SVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZu
ZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVG
RkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFU
RTsKKyNlbmRpZgorCisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVP
Ql9BQ1RfRU5EX09GX0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAg
I2RlZmluZSBZWV9MRVNTX0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZp
cnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwor
I2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAor
CQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZ
X01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdh
aW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQo
IGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5
X3NpemVfdDsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNk
ZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQor
CXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQg
YnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5w
dXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGlu
Y2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5
eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9i
dWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9j
aGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cg
d2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQg
c2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3Vy
X2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNv
dXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhl
biB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ug
c3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAq
LworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJl
ZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVz
IHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJ
ICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxp
bmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50
LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3
aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZm
ZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAK
KyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4g
YnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsg
dGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNo
b3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBt
aWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwg
YmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFj
dHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2
aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBi
eQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2Rl
ZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5n
IGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0
aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUiLgor
ICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNkZWZp
bmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2FtZSBh
cyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVy
IHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50
ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBwcHJl
c3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9z
d2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxp
bnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcHVz
aF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
Kworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpm
aWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBf
Zmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hh
ciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2Fu
X2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9p
ZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3Zv
aWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25l
d19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShp
c19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisg
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUg
eXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtc
CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAo
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2Vj
dDMgKi8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlw
ZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUg
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3Qg
Y2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1
cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNw
b25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9S
RV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHNpemVf
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
ICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9r
ZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8t
Z2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0
cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8g
VXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBu
dW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklU
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGlu
Z1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAg
IFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5M
b2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4
KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0
LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5v
OyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4
ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICBy
ZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5J
VElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQorCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRv
a2VuaXplcjo6Q29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVl
bnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAgICAvKiBVc2Vy
LWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFfVFlQRSB5eWV4
dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVj
bGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxFICp5eWluX3Is
ICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9m
IHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBj
YXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3Rh
Y2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xkX2NoYXI7Cisg
ICAgaW50IHl5X25fY2hhcnM7CisgICAgaW50IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVm
X3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBp
bnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5
eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9k
ZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAg
ICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxU
WVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0
YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8q
IFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVk
ZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRl
ZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5
eWctPnl5bGxvY19yCisgICAgCitpbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwor
CitpbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2Fu
X3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVz
ZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmll
bmNlLiAqLworCitpbnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2lu
dCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcg
KGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBw
cGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZ
X0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAq
cHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAq
IGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2NoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRf
bGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9saW5lbm8gKGludCBs
aW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFs
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXls
dmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0
X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xs
b2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAor
LyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIg
ZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlX
UkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisjZWxzZQorZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5
eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nh
bm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2Zs
ZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgor
CisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5
eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0
dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9T
SVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hh
dGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisj
aWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhl
IHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAq
LworI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRp
ZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4K
KyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9z
aXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJaW50IG47IFwKKwkJZm9yICggbiA9IDA7
IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYg
YyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0g
J1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBm
ZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2Fu
bmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwK
KwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXpl
LCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBF
SU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2Fu
bmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJ
CQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBz
ZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJt
aW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0
dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxh
aW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0
ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVt
YmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwor
I2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1Ig
MjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFU
QUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNn
ICwgeXlzY2FubmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1
Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2Vu
ZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQg
cGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VS
UyAxCisKK2V4dGVybiBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2
YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKwor
I2RlZmluZSBZWV9ERUNMIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5
bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
KyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5p
bmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNl
dCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElP
TgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICov
CisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNk
ZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNj
YW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sK
KwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hh
ciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUg
Y29tbWVudCAqLworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0g
eXlsbG9jX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2lu
aXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgor
CisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJz
dCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKwor
CQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICkgeworCQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxl
IGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBT
dXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJ
LyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0
IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsK
KwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwor
CQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJ
eworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFb
KHVuc2lnbmVkIGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkr
K3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0
ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047
CisKK2RvX2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBh
Y3Rpb25zLiAqLworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0
aW9uIHN3aXRjaCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8g
dGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55
eV9ob2xkX2NoYXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsK
Ky8qIEJsb2NrIGNvbW1lbnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBu
b3QgcmV0dXJuZWQuICovCisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBz
cGFjZS4gKi8gCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZ
WV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBl
b2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAg
ICBCRUdJTihJTklUSUFMKTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAor
eworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlcy4KKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJl
dHVybiB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46
OlBQX09USEVSOworfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklE
RU5USUZJRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09O
U1RfSU5UOworfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05T
VF9GTE9BVDsKK30KKwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtE
SUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2gg
YWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46OlBQX05VTUJFUjsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfSU5DOworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9ERUM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1JJR0hUOworfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9M
RTsKK30KKwlZWV9CUkVBSworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZ
X0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVB
SworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitj
YXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MjI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNl
IDI1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitj
YXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZ
WV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwor
fQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdO
OworfQorCVlZX0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNT
SUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9B
U1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZ
X0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2Ug
PSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wg
Ki8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWdu
KDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9G
KElOSVRJQUwpOgorY2FzZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNF
Ul9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhl
IGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9
ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5
ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5j
b3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAg
eworICAgICAgICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBz
dHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2Fu
TG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5
ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+
Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAg
eXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01N
RU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2Nh
dGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2Fz
ZSAzNzoKK1lZX1JVTEVfU0VUVVAKK0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09G
X0JVRkZFUjoKKwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcg
dGhlIEVPQiBjaGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQp
ICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMg
b2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7
CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8q
IFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICog
cG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3Qg
cG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAg
SWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4g
WVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJp
Z2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rp
b24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNo
IGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyog
Tm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlv
bgorCQkgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Ag
d2lsbAorCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hh
cmFjdGVyCisJCSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRv
IHRoZQorCQkgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUg
dGVzdAorCQkgKiBpbiBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0g
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25l
eHRfc3RhdGU7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ft
b3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRp
b25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZl
CisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAq
IGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0
aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1
aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUg
c2xvd2x5KS4KKwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucygg
eXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJ
CS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7
CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ug
c3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMDsKKworCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJewor
CQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0
X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93
IHNldCB1cAorCQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkg
KiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nh
bm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdv
cmsgLSBhbm90aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAq
LworCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsK
KworCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2Fj
dGlvbjsKKwkJCQkJfQorCisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJ
CWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXln
LT55eV9jX2J1Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dDsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUo
IHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAg
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJ
CQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJy
ZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4
IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBv
ZiBhY3Rpb24gc3dpdGNoICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwor
fSAvKiBlbmQgb2YgcHBsZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJl
YWQgaW4gYSBuZXcgYnVmZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFu
IGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1ND
QU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1Rf
RU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNl
ID0geXlnLT55eXRleHRfcHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlp
bnQgcmV0X3ZhbDsKKworCWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJS
T1IoCisJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIg
bWlzc2VkIiApOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVm
ZmVyID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMg
aXMgYW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAt
IFlZX01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFy
YWN0ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJ
ICovCisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7
CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJ
ICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJ
CX0KKwkJfQorCisJLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92
ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChp
bnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkg
PSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKysp
OworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0g
WVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJ
ICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFycyA9IDA7CisKKwllbHNlCisJCXsKKwkJCWludCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJ
CXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0
aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3Ig
dGhlIGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRf
QlVGRkVSOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5
X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIg
KQorCQkJCXsKKwkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlp
ZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6
ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlf
Y2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFy
cy4gKi8KKwkJCQkJcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6
ZSArIDIgLHl5c2Nhbm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0
LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAh
IGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0g
c2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9
ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21v
dmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9y
ZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1f
dG9fcmVhZCApOworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsK
KwkJaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFs
ID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsK
KwkJCX0KKworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwor
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9C
VUZGRVJfRU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsg
bnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkg
eworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwor
CX0KKworCXl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0g
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92
YWw7Cit9CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBi
ZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdp
c3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlf
Y3A7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9j
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZf
cDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5
X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9j
dXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJ
CQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQg
KQorCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8q
IHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBj
aGFyYWN0ZXIKKyAqCisgKiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJh
bnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3Ry
eV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBi
ZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYg
KCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gODQgKQorCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJ
CX0KKwl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9
PSA4Myk7CisKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisK
KyNpZm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQg
eXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3Ag
PT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2lu
dHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1
cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBO
VUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8K
KwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICov
CisJCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9y
ZSBpbnB1dCAqLworCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0
X3B0cjsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9i
dWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0
aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2Ug
bmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBw
cm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5n
IHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gK
KwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVz
ZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisK
KwkJCQkJLypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJ
CQkJCXsKKwkJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsK
KworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJ
WVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlz
Y2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJ
CQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNh
c3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVz
ZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsK
KworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCisvKiog
SW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJh
bSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRo
ZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFy
dCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICBwcF9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5p
dF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZl
cmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1
ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAg
dm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRv
IHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3Bf
YnVmZmVyX3N0YXRlKCk7CisJICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7Cisg
ICAgICovCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZl
ci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQor
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhl
ciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2lu
ZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVy
IHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFs
d2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAx
OworfQorCitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19i
dWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBz
dGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUg
VGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBj
IFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
KiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVS
X1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVG
RkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNj
YW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6
ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRo
ZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGIt
Pnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJ
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZm
ZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIo
YixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBi
dWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZl
cigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZv
aWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJF
TlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55
eV9pc19vdXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2Fu
bmVyICk7CisKKwlwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRp
YWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNv
bWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3Vj
aCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9p
ZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJcHBfZmx1c2hf
YnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55
eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwg
dGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHBw
cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQg
Y2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAg
Ki8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xp
bmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAg
IGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKwor
LyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZ
X0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBi
ZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiAp
CisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQg
dHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRy
YW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwor
CSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9s
ID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9
PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcg
c3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwg
YWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVm
ZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmIChuZXdfYnVmZmVyID09IE5VTEwp
CisJCXJldHVybjsKKworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCisJLyog
VGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Ig
b2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFj
ZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyog
Y29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9
CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVz
ZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikK
KwkJcmV0dXJuOworCisJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlm
IChZWV9DVVJSRU5UX0JVRkZFUikgeworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KK30KKworLyog
QWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVz
IHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaW50IG51bV90b19hbGxvYzsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlv
biBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJ
ICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEg
dG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAg
ICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0g
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2Mg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsK
KwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJ
CQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7
CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0
byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8q
IGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9z
dGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFj
ayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLwor
CQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgs
IDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNp
ZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZm
ZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVm
ZmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4g
dGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVS
X1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNp
emUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8
CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhl
eSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKwor
CWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZf
c2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55
eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3Np
emU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+
eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
OworCisJcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOwor
fQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBU
aGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBA
YSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2Nhbgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50
IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICog
ICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgCisJcmV0dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2Fu
bmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUg
Z2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20g
YSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0
byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBw
b2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5
eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9C
VUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisgICAg
CisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJh
aWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikg
cHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICgg
aSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisK
KwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisKKwliID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYg
KCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygp
IiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNo
b3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlM
VVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlf
ZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VY
SVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBz
ZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAor
CWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8g
XAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNT
X0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9o
b2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2Fy
ZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlv
bnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0
YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUg
bnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2lu
dCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAg
IHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdl
dF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0
cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
CitGSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9sZW5n
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiog
R2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KKworY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEu
IFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVz
ZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRf
ZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJl
bnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5l
X251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xp
bmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXls
aW5lbm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisg
KiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlu
cHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkK
KyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8g
YnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOwor
fQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUg
Y3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0
cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBw
cF9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBw
cHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAg
eXlvdXQgPSBvdXRfc3RyIDsKK30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1
ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVi
dWcgPSBiZGVidWcgOworfQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5
bGxvYyAqLworCitZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgcmV0dXJuIHl5bHZhbDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5
bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFs
X3BhcmFtOworfQorCitZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICByZXR1cm4geXlsbG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBF
ICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0g
eXlsbG9jX3BhcmFtOworfQorICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxl
eF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwg
c28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFr
ZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhw
bGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNy
b3MuCisgKi8KKworaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7
CisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZB
TDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5
c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisg
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07
CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwg
d2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxl
YXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5
eWd1dHNfdCkpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFs
cyApOworfQorCisvKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5
IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcg
dGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICog
dGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVk
IGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0
aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBk
ZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBw
cGFsbG9jIGluCisgKiB0aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9l
eHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2Jh
bHMgKQorCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0
X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95
eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxv
YyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBp
ZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwg
d2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9y
IHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3Ry
dWN0IHl5Z3V0c190KSk7CisgICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwg
KnB0cl95eV9nbG9iYWxzKTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0
cl95eV9nbG9iYWxzICk7Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZv
ciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAq
LworCisgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWct
Pnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXln
LT55eV9zdGFydCA9IDA7CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAg
eXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9
ICBOVUxMOworCisvKiBEZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAg
ICB5eWluID0gc3RkaW47CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAo
RklMRSAqKSAwOworICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9y
IGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxl
ZCBieQorICAgICAqIHBwbGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisv
KiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBz
Y2FubmVycy4gKi8KK2ludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KworICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4g
Ki8KKwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOworCQlwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95
IHRoZSBzdGFjayBpdHNlbGYuICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNj
YW5uZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kg
dGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgLHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVM
TDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5v
bi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBj
YWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxz
KCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFu
dCBvbmx5KS4gKi8KKyAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5
eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRp
bGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5
X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47
ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RS
TEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyAr
K24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9z
aXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1h
bGxvYyggc2l6ZSApOworfQorCit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXpl
X3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIg
KikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9u
cyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVz
ZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICog
YmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJv
bQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQg
Y29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwly
ZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQg
cHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFy
ICopIHB0ciApOwkvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKwor
I2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworVG9r
ZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkK
K3sKKyAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6
ZXI6On5Ub2tlbml6ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9r
ZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1D
b250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4g
aW5pdFNjYW5uZXIoKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZp
bGUpCit7CisgICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAg
Ly8gU2VlIG1hY3JvIHl5ZmlsZW5vLgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOwor
fQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNl
dF9saW5lbm8obGluZSxtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiog
dG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnZhbHVlLCZ0b2tlbi0+
bG9jYXRpb24sbUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5z
ZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0
YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3Bh
Y2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBm
YWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1I
YW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAg
ICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0
cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
cHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iNjRhMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKQEAg
LTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVS
X0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
cHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitj
bGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBD
b250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAg
ICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9p
bnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBp
bnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2Ft
ZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0
IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9v
bCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBU
b2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisK
KyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKKworICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7Cisg
ICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgo
VG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUb2tlbml6ZXIpOworICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ry
b3lTY2FubmVyKCk7CisKKyAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisg
ICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQwMWM3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApAQCAtMCww
ICsxLDMyOSBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0
aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24g
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6
Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlP
VSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5z
aC4KKyovCisKKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5j
bHVkZSAiVG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUg
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+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCisl
b3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRy
YW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVv
cHRpb24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisK
K05FV0xJTkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKK1BVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAg
ICAgICBbMC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUl
CisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sg
Y29tbWVudCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0
dXJuZWQuICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3Bh
Y2UuICovIAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxD
T01NRU5UPiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+
IiovIiB7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklU
SUFMKTsKK30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUg
Zm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4
dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFT
SCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJ
RVI7Cit9CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1B
TF9DT05TVEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJU
fSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxP
QVQ7Cit9CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAu
e0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGlu
dmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwo
Ii4ie0RJR0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisKKyIrKyIgewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9
CisiPj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYi
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsK
K30KKyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047
Cit9CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdO
OworfQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNT
SUdOOworfQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5E
X0FTU0lHTjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09S
X0FTU0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRl
eHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0
cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5v
OworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisu
IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9r
ZW46OlBQX09USEVSOworfQorCis8Kj48PEVPRj4+IHsKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBp
cyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24g
Zm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEt
PmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2Nh
bkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAx
KTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAg
IC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQg
dGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRl
eCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBz
SW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxl
bm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOwor
CisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5Zmls
ZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIp
OworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCislJQorCituYW1lc3BhY2UgcHAgewor
CitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRs
ZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rv
a2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisg
ICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJl
dHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihp
bnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4K
KyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1uKGZpbGUsIG1IYW5k
bGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAg
ICB5eXNldF9saW5lbm8obGluZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgo
VG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwg
JnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAg
IHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRl
eHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNM
ZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5n
U3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAg
ICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZt
SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5k
bGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5u
ZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAg
IHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJz
ZXIuc2gKaW5kZXggNWIzMmY3MS4uZTljNzBiMSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNo
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jhc2gKLSMg
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAKLSMgR2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0gcHBfbGV4
LmNwcCwgcHBfdGFiLmgsIGFuZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBv
bmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlucHV0X2Zp
bGU9JHNjcmlwdF9kaXIvJDEubAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3Bw
CitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQy
CiBmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1
dF9maWxlCiB9CiAKIHJ1bl9iaXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkK
LW91dHB1dF9oZWFkZXI9JHNjcmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlw
dF9kaXIvJDFfdGFiLmNwcAotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRl
ZmluZXM9JG91dHB1dF9oZWFkZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
K2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIK
K2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3Vy
Y2UgJGlucHV0X2ZpbGUKIH0KIAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMgR2VuZXJh
dGUgcHJlcHJvY2Vzc29yCi1ydW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxleCBUb2tl
bml6ZXIubCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJl
c3Npb25QYXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjI3Y2EwNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCisrKyAvZGV2L251bGwKQEAgLTEsMTgx
ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhl
IExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1p
Y3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1Ug
TU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gu
Ci0qLwotCi0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1
ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBw
X3RhYi5oIgotCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgeXlsbG9jLT5maXJzdF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxv
Yy0+Zmlyc3RfY29sdW1uID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5
eWxlbmc7ICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZ
X0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVh
ZElucHV0KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RN
YWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdy
YXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQg
Ymlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlvbiBwcmVm
aXg9InBwIgotJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFDRSAgICAg
IFsgXHRdCi1IQVNIICAgICAgICBee0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklFUiAgW19h
LXpBLVpdW19hLXpBLVowLTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjss
P10KLQotREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAg
ICAgICAgMFswLTddKgotSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCi0K
LURJR0lUICAgICAgICAgICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWyst
XT97RElHSVR9KwotRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7
RElHSVR9KyIuIikKLQotJSUKLQote0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hBU0h9ZGVm
aW5le0hTUEFDRX0re0lERU5USUZJRVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4
dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9P
Qko7Ci19Ci17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAgICB5eWx2
YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
SEFTSF9ERUZJTkVfRlVOQzsKLX0KLXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJuIEhBU0hf
VU5ERUY7IH0KLQote0hBU0h9aWYgeyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZkZWYgeyBy
ZXR1cm4gSEFTSF9JRkRFRjsgfQote0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZOREVGOyB9
Ci17SEFTSH1lbHNlIHsgcmV0dXJuIEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJldHVybiBI
QVNIX0VMSUY7IH0KLXtIQVNIfWVuZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJkZWZpbmVk
IiB7IHJldHVybiBERUZJTkVEOyB9Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hfRVJST1I7
IH0KLXtIQVNIfXByYWdtYSB7IHJldHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0ZW5zaW9u
IHsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJuIEhBU0hf
VkVSU0lPTjsgfQote0hBU0h9bGluZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lERU5USUZJ
RVJ9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBJREVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFM
X0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBu
ZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7
Ci19Ci0KLSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtF
WFBPTkVOVF9QQVJUfT8pIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BVTkNUVUFU
T1J9IHsgcmV0dXJuIHl5dGV4dFswXTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3JlIHdoaXRl
c3BhY2UgKi8gfQotCi1cbiB7Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJl
dHVybiB5eXRleHRbMF07Ci19Ci0KLTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQot
Ci0lJQotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGlu
dCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1k
ZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0
aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVu
KCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAg
Zm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChz
dHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5w
dXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwot
ICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigp
ID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05V
TEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6
OlRva2VuOjpkZWNvZGVMb2NhdGlvbih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxl
KTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgeXlzZXRf
bGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhlcik7Ci0K
LSAgICAgICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBp
ZiAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExl
eGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5bGV4X2lu
aXRfZXh0cmEodGhpcywgJm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5
cmVzdGFydCgwLCBtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6
OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxleF9kZXN0
cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9wcC55CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE5
M2FiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3Ig
R0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAy
MDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMg
VEhFIEdMU0wgRVMgUEFSU0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZp
bGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2guIERPIE5P
VCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNv
bnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVu
YW1lLXByZWZpeD0icHAiCi0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3BwOjpDb250ZXh0KiBj
b250ZXh0fQotCi0ldW5pb24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFs
OwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQot
Ci0lewotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZv
aWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAg
ICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29u
ZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0ldG9rZW4gSEFTSCBI
QVNIX1VOREVGCi0ldG9rZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZOREVGIEhBU0hfRUxT
RSBIQVNIX0VMSUYgSEFTSF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9FUlJPUiBIQVNIX1BS
QUdNQSBIQVNIX0VYVEVOU0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0ldG9rZW4gPHN2YWw+
IEhBU0hfREVGSU5FX09CSiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2YWw+IElOVF9DT05T
VEFOVCBGTE9BVF9DT05TVEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4gb3BlcmF0b3IKLSV0
eXBlIDx0dmFsPiBjb25kaXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRsaXN0PiBwYXJhbWV0
ZXJfbGlzdCByZXBsYWNlbWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9rZW5fbGlzdAotJSUK
LQotaW5wdXQKLSAgICA6IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5lCi07Ci0KLWxpbmUK
LSAgICA6IHRleHRfbGluZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRleHRfbGluZQotICAg
IDogJ1xuJwotICAgIHwgdG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+
b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQxLT5iZWdpbigpLCAk
MS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1jb250cm9sX2xpbmUK
LSAgICA6IEhBU0ggJ1xuJwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxhY2VtZW50X2xpc3Qg
J1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpN
YWNybzo6a1R5cGVPYmosICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwgSEFTSF9ERUZJTkVf
RlVOQyAnKCcgcGFyYW1ldGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAg
ICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVG
dW5jLCAkMSwgJDMsICQ1KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElERU5USUZJRVIgJ1xu
JyB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAgIH0KLSAgICB8IEhB
U0hfSUYgY29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxv
Y2soY29udGV4dCwgJDIgPyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8IEhBU0hfSUZERUYg
SURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwg
Y29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGTkRFRiBJ
REVOVElGSUVSICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAh
Y29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBIQVNIX0VMSUYgY29u
ZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0UgJ1xuJyB7Ci0gICAg
fQotICAgIHwgSEFTSF9FTkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhj
b250ZXh0KTsKLSAgICB9Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8IEhBU0hfUFJBR01B
ICdcbicKLSAgICB8IEhBU0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hfVkVSU0lPTiAnXG4n
Ci0gICAgfCBIQVNIX0xJTkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0Ci0gICAgOiAvKiBl
bXB0eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1wYXJhbWV0ZXJfbGlz
dAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElERU5USUZJRVIgewot
ICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2so
bmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkpOwotICAgIH0KLSAg
ICB8IHBhcmFtZXRlcl9saXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xpbmUsIElERU5USUZJ
RVIsICQzKSk7Ci0gICAgfQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBjb25kaXRpb25hbF90
b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1
c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBjb25kaXRpb25hbF90
b2tlbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAg
IH0KLTsKLQotdG9rZW5fbGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6
VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IHRv
a2VuX2xpc3QgdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNr
KCQyKTsKLSAgICB9Ci07Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBERUZJTkVEIElERU5U
SUZJRVIgewotICAgIH0KLSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIgJyknIHsKLSAgICB9
Ci0gICAgfCB0b2tlbgotOwotCi10b2tlbgotICAgIDogb3BlcmF0b3IgewotICAgICAgICAkJCA9
IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAgIH0KLSAgICB8IElO
VF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJ
TlRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFOVCB7Ci0gICAgICAg
ICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgJDEpOwot
ICAgIH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEu
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3BlcmF0b3IKLSAgICA6
ICdbJyB7ICQkID0gJ1snOyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQotICAgIHwgJzwnIHsg
JCQgPSAnPCc7IH0KLSAgICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAnKCcgeyAkJCA9ICco
JzsgfQotICAgIHwgJyknIHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQkID0gJ3snOyB9Ci0g
ICAgfCAnfScgeyAkJCA9ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7IH0KLSAgICB8ICcr
JyB7ICQkID0gJysnOyB9Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAgIHwgJy8nIHsgJCQg
PSAnLyc7IH0KLSAgICB8ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScgeyAkJCA9ICclJzsg
fQotICAgIHwgJ14nIHsgJCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0gJ3wnOyB9Ci0gICAg
fCAnJicgeyAkJCA9ICcmJzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0KLSAgICB8ICc9JyB7
ICQkID0gJz0nOyB9Ci0gICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwgJzonIHsgJCQgPSAn
Oic7IH0KLSAgICB8ICc7JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAkJCA9ICcsJzsgfQot
ICAgIHwgJz8nIHsgJCQgPSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVycm9yKFlZTFRZUEUq
IGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQot
Ci12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNv
bmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBj
b250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17
Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUg
OiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
bGV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3ZTdjYy4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF9sZXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI2OCArMCwwIEBACi0jbGluZSAxNiAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMg
ZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElU
IQotCi0KLQotI2xpbmUgMTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCIK
LQotI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2Fu
bmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5l
IFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1
Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlO
T1JfVkVSU0lPTiA+IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdl
IGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVz
LiAqLwotCi0vKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi0vKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVn
ZXIgdHlwZSBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVY
SU5UX0gKLQotLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVt
cyBtYXkgb3IgbWF5IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYm
IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19T
VERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdh
bnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5k
ZWYgX19TVERDX0xJTUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNl
bmRpZgotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90
OwotdHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2lu
dDE2X3Q7Ci10eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3Qg
ZmxleF9pbnQzMl90OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5
cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2lu
dDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIg
ZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7
Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICov
Ci0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9NSU4KLSNk
ZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRlZiBJTlQx
Nl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jZW5kaWYK
LSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3
NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9NQVggICAg
ICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmluZSBJTlQx
Nl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NQVgKLSNk
ZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgotI2lmbmRl
ZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKLSNlbmRp
ZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1
NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9NQVggICAg
ICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJTlRfSCAq
LwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1t
b2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNlICAgLyog
ISBfX2NwbHVzcGx1cyAqLwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5l
ZCBhcyAxLiAqLwotI2lmIGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05T
VAotCi0jZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3Bs
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
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2Rl
ZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxF
IDEKLSNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNp
ZmljYWxseSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBp
dCByZXF1aXJlcwotICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlf
YWN0LiBTaW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAg
ICAgIGV4aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgcHBs
ZXguIAotICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0
IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZv
cm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwot
ICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBz
byBpdCBpcyBub3Qgd29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5F
Tk8obikgXAotICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0g
ICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAg
ICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0v
KiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRv
IHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAg
ICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAq
LyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xF
U1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlf
TU9SRV9BREo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4
dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5w
dXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlw
ZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURQotI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFy
ICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZf
cG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAg
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3Np
emU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBu
b3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgaW50IHl5
X25fY2hhcnM7Ci0KLSAgICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3
ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3Jv
dyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICov
Ci0gICAgaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4g
ImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICog
aW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBh
ZnRlcgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJh
Y3RpdmU7Ci0KLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJl
Z2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2
ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAg
IGludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNv
dW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8K
LSAgICAKLSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hl
biB3ZSByZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2Zp
bGxfYnVmZmVyOwotCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVG
RkVSX05FVyAwCi0jZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9G
J3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAg
ICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRl
IHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291
cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9r
ZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5n
LXVwLgotICAgICAqCi0gICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hh
bmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhh
dCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5n
IHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VP
Rl9QRU5ESU5HIDIKLQotICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVz
IGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0
ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5z
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
LSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChGSUxFICpp
bnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lk
IHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lk
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9p
ZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAo
dm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9p
ZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2Ny
ZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUp
IFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZ
X0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAgfQotCi0j
ZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7
IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAg
cHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBc
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAg
ICB9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEK
LSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7
Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRl
eHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAo
eXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRp
YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2
b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hl
ZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4
dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9w
dHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAot
ICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAot
ICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAyMwot
I2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBp
biB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0
cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0g
ICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2FjY2VwdFsxMDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNCwg
ICAyMywgICAyMSwgICAyMiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAxNywgICAx
NywgICAyMSwgICAgMSwgICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwKLSAgICAg
ICAgMCwgICAxOCwgICAxNywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAgMCwgICAg
MCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwgICAxOCwg
ICAxNywgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAxNywgICAgMCwgICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAxNiwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAgICAgICAx
MiwgICAgMCwgICAgNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwK
LSAgICAgICAgNywgICAxMywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAgMCwgICAg
MCwgICAgMiwKLQotICAgICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0KLXN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywK
LSAgICAgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAg
MSwgICAgNSwgICAgNSwgICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwgICAgNSwg
ICAgOCwgICAgOSwgICAgNSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAx
MSwgICAxMSwgICAxMSwgICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAxMywKLSAg
ICAgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwg
ICAxNSwKLSAgICAgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAx
NiwgICAxNSwgICAxNSwKLSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwgICAgMSwg
ICAxNywgICAxMywgICAxMywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDE1LCAg
IDIyLCAgIDE1LCAgIDE1LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3LCAgIDE1
LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAgIDE1LCAg
IDE1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X21ldGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAg
MywgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAgICAgNCwg
ICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNSwKLSAg
ICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywg
ICAgNywKLSAgICAgICAgNywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAxOCwg
IDE4NCwgIDE4NSwgICAxMSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAgICAgICAg
MCwgIDE2NCwgICAzOSwgICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwgICA0NCwK
LSAgICAgICAgMCwgICAgMCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2MiwgICA0
NiwgIDE2MCwKLSAgICAgIDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0NywgICA2NSwg
ICAgMCwgIDE1MywgIDE1NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2NywgIDE0
NSwgIDE1MiwgIDE1MCwgIDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0MywgIDE0NCwg
IDE0NCwgIDE0MCwgIDEzNSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEzNSwgIDEz
NiwgIDEyNSwgIDEzNCwgIDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAgIDEyNCwg
IDEyOCwgIDEyOCwgIDE4NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4NSwKLSAg
ICAgIDE4NSwgIDExMiwgIDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwgIDEwNywg
ICA4NiwKLSAgICAgIDE4NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4NSwgICA5
NywgICAxMCwgIDE4NSwKLQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEwLCAgMTE0
LCAgMTE4LCAgMTIxLCAgMTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDYsICAx
MDYsICAxMDQsICAxMDQsICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQsCi0gICAg
ICAxMDgsICAgMTAsICAxMDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAxMDQsICAx
MDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDgs
ICAxMDYsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQs
Ci0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAxMTAsICAx
MDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfbnh0WzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA1
LCAgICA3LCAgICA0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAgIDEwLCAg
IDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAgICAgICA2
LCAgICA1LCAgICA3LCAgIDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDEwLAot
ICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4LCAgIDE4
LCAgIDE5LAotICAgICAgIDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAgIDIwLCAg
IDM1LCAgIDE5LCAgIDE5LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3LCAgIDM3
LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAgIDIyLCAg
IDIyLCAgIDI1LCAgIDIwLCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIwLCAgIDI3
LCAgIDQzLCAgIDM3LCAgIDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAgIDUxLCAg
IDUxLCAgIDk1LCAgIDU0LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5LAotICAg
ICAgIDU1LCAgIDYwLCAgIDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAgMTAwLCAg
MTAwLAotCi0gICAgICAgOTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAgOTMsICAg
OTYsICAgOTUsICAxMDEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEs
ICAgMTEsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAgMTYsICAg
MzgsICAgMzgsICAgMzgsICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgsICAgOTgs
ICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAgOTAsICAg
ODksICAgODgsICAgODcsICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEsCi0gICAg
ICAgODAsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAg
NzEsCi0gICAgICAgNzAsICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQsICAgNjMs
ICAgNjIsICAgNjEsCi0gICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAgNDksICAg
NDgsICAgNDcsICAgNDYsICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQsICAgIDMs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwot
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsgICAwLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAgIDE4LCAg
ICAxLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAgIDE4LCAg
IDk5LCAgICAyLCAgICA5LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5LCAgIDEz
LCAgICA5LCAgIDEzLCAgIDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAgIDE2LCAg
IDIwLCAgIDE3LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2LAotICAg
ICAgICA5LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAgIDI5LCAg
IDI1LAotICAgICAgIDI5LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM1
LCAgIDI5LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAgIDUwLCAg
IDUwLCAgIDUwLCAgIDE0LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0LCAgIDUx
LCAgIDUxLCAgIDUxLCAgIDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQsICAgMTQs
ICAgOTgsICAxMDIsICAxMDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAxMDUsICAx
MDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYsCi0gICAg
ICAxMDYsICAxMDcsICAgODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAgODYsICAg
ODUsCi0gICAgICAxMDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAs
ICAxMTAsICAgODQsCi0gICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAg
NzMsICAgNzIsICAgNzEsICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQsICAgNjMs
ICAgNjIsICAgNjEsICAgNjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAgNTUsICAg
NTQsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQsICAgNDMs
ICAgNDIsICAgNDAsICAgMzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0gICAgICAg
MjgsICAgMjQsICAgMTIsICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
Ci0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBp
ZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDAs
ICAgICB9OwotCi0vKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBp
dCdsbCBjYXRjaAotICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICov
Ci0jZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5
bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREog
MAotI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBF
UyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFBy
ZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVF
RCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2Rl
YnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVm
aW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJz
dF9saW5lID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1u
ID0geXljb2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVz
dWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4
U2l6ZSk7Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3Qg
Y2hhciogc3RyLCBpbnQgbGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9F
WFRSQV9UWVBFIHBwOjpDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRo
ZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQotICAgIC8q
IFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRSQV9UWVBF
IHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFs
cyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJTEUgKnl5
aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5k
ZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAv
Kio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZl
cl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hvbGRfY2hh
cjsKLSAgICBpbnQgeXlfbl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlf
Y19idWZfcDsKLSAgICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwot
ICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwot
ICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9m
bGV4X2RlYnVnX3I7Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFn
OwotICAgIGludCB5eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAg
IFlZTFRZUEUgKiB5eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8K
LQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0g
ICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBp
bmNsdWRlZAotICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMg
ICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXls
bG9jIHl5Zy0+eXlsbG9jX3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5l
cik7Ci0KLWludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5
eXNjYW5fdCogc2Nhbm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAg
IFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29u
dmVuaWVuY2UuICovCi0KLWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9k
ZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9U
WVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRy
YSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1G
SUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChG
SUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBw
cGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAo
aW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0
X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUg
KiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAq
cHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBz
ZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0g
ICAgCi0vKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkg
dXNlciBkZWZpbml0aW9ucyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJ
UF9ZWVdSQVAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQg
eXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2Vu
ZGlmCi0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMg
aW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5w
dXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAgc3RhdGlj
IHZvaWQgeXlfcHVzaF9zdGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsK
LSAgICAKLSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotICAgIAotICAgIHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSAgICAKLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4g
Ki8KLSNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgx
OTIKLSNlbmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0
aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUg
YW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAq
IHdlIG5vdyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwg
eXlsZW5nLCAxLCB5eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0
IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICog
aXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUg
WVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGlu
dCBjID0gJyonOyBcCi0gICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwg
bWF4X3NpemUgJiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9G
ICYmIGMgIT0gJ1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwK
LSAgICAgICAgaWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFy
KSBjOyBcCi0gICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAg
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7
IFwKLSAgICAgICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAg
ICAgeyBcCi0gICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJl
YWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAg
ICAgICAgeyBcCi0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAg
ICAgICB7IFwKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXgg
c2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAg
ICAgICAgIH0gXAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIo
eXlpbik7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYKLQotLyog
Tm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5
dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUg
InJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNv
bXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJt
aW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8q
IE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4g
Ki8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19J
TkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZ
X0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3Io
IG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24g
c3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9m
IGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkg
YWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lT
X09VUlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICog
eXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7
Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUg
KiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVl
biBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9B
Q1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxl
LiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgot
Ci0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwKLSAgICAg
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAgICAgICAg
ICAgKHl5dGV4dFt5eWxlbmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNUSU9OCi0K
LS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgot
ICovCi1ZWV9ERUNMCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50
IHl5X2FjdDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5
eWxsb2NfcGFyYW07Ci0KLSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAg
ICAgIHl5Zy0+eXlfaW5pdCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAgICAgWVlf
VVNFUl9JTklUOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAg
ICAgICAgICAgeXlnLT55eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0g
ICAgICAgIGlmICggISB5eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQotICAgICAg
ICBpZiAoICEgeXlvdXQgKQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAgICAgICAg
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0KLSAgICAgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5
c2Nhbm5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLSAgICAgICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGls
IGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLSAgICAg
ICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAgcG9pbnRz
IHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAq
IHRoZSBjdXJyZW50IHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7Ci0K
LSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgKz0gWVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8KLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1ND
X1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAgICB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAg
ICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgKyt5eV9j
cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDEw
NCApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5
X2ZpbmRfYWN0aW9uOgotICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0
ZV07Ci0KLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAoIHl5X2Fj
dCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBmb3IgKCB5
eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAoIHl5dGV4
dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5l
bm8rKzsKLSAgICAgICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAgICAgICAg
IH0KLQotZG9fYWN0aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVP
RiBhY3Rpb25zLiAqLwotCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdp
bm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJh
Y2sgdXAgKi8KLSAgICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JF
X0FDVElPTiAqLwotICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAg
ICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAg
ICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2FuIG1hdGNo
IGVvbCAqLwotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RP
X0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDM6Ci0q
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAg
eXl0ZXh0ICovCi15eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FD
VElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5
bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVy
biBIQVNIX0RFRklORV9GVU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBIQVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDc6
Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSA5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElGOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJTkVEOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VS
Uk9SOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX1BSQUdNQTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSEFTSF9FWFRFTlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE2Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTc6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5n
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZWV9CUkVB
SwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3Rk
OjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFs
ID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09O
U1RBTlQ7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biB5eXRleHRbMF07IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsg
LyogSWdub3JlIHdoaXRlc3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgotLyogcnVs
ZSAyMiBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsg
eXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJFQUsKLWNh
c2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0KLSAgICBj
YXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRl
eHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIp
IC0gMTsKLQotICAgICAgICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJj
ZS4gIEl0J3MKLSAgICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNh
dXNlIHRoZSB1c2VyCi0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBz
b3VyY2UgYW5kIGNhbGxlZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdl
IGhhdmUgdG8gYXNzdXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NV
UlJFTlRfQlVGRkVSIGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRo
ZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0
aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJh
Y2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9
IiB0byB0aGUgcG9zaXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVm
ZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4g
aW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxs
IHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICog
aW4gaW5wdXQoKS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
LSAgICAgICAgICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAg
eXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5u
ZXIgKTsKLQotICAgICAgICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFr
ZSB0aGUgTlVMCi0gICAgICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQot
ICAgICAgICAgICAgICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0
Ci0gICAgICAgICAgICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRl
YWwKLSAgICAgICAgICAgICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3
ZSBkb24ndAotICAgICAgICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVj
YXVzZSB0aGVuIGl0Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAg
ICAgICAgICAgKi8KLQotICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJh
bnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25l
eHRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1l
IHRoZSBOVUwuICovCi0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsK
LSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAg
ICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5
X2ZpbmRfYWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICBlbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiA9IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3
ZSd2ZSB0YWtlbiBjYXJlIGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1
ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2Ug
Y2FuIG5vdyBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0
IGlmIHNvbWUgdG90YWwKLSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBp
dHNlbGYpIHdhbnRzIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIg
YWZ0ZXIgd2UgcmV0dXJuIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCds
bCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdp
bGwgZ2V0IHJldHVybmVkLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0K
LSAgICAgICAgICAgICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19i
dWZfcCA9Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAg
ICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5
eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2Zp
bmRfYWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwg
ZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAv
KiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBv
bmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZl
ciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJl
cHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRp
b24KLSAqICBFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0
ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAg
IHJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBp
bnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+
eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwg
ZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQot
ICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkK
LSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFu
IEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIg
LSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1h
dGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJl
YXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0
dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3Ig
dG8gdGhlIEVPQiwgZmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAg
IC8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVt
YmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAt
IDE7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAg
ICAqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAg
ICAgIC8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBh
biBFT0YsCi0gICAgICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMg
PSAwOwotCi0gICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3RvX3JlYWQg
PQotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51
bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQot
ICAgICAgICAgICAgeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQu
ICovCi0KLSAgICAgICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50
IGJ1ZmZlciAqLwotICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JV
RkZFUjsKLQotICAgICAgICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAg
ICAgICAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAgICAgICAg
ICAgaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVm
X3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAgICAgIGIt
Pnl5X2NoX2J1ZiA9IChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgcm9v
bSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVhbGxvYygo
dm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLyogQ2Fu
J3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGItPnl5X2No
X2J1ZiA9IDA7Ci0KLSAgICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJvciAtIHNj
YW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWctPnl5X2Nf
YnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAgICAgICAg
bnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICAgICAg
fQotCi0gICAgICAgIGlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAg
ICAgICAgIG51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAvKiBSZWFk
IGluIG1vcmUgZGF0YS4gKi8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlf
bl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQot
ICAgIGlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAgIGlmICgg
bnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJlc3RhcnQo
eXlpbiAgLHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAg
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAg
ICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICBlbHNlCi0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47
Ci0KLSAgICBpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3Zl
KSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAgLyog
RXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4g
Ki8KLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0g
ICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0gICAg
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRf
bmV4dF9idWZmZXIoKSIgKTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVy
X3RvX21vdmU7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKLQotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZlswXTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRf
cHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3
YXMgcmVhY2hlZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlw
ZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0g
WVlfQVRfQk9MKCk7Ci0KLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAg
ICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJ
KCp5eV9jcCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0g
MTA1ICkKLSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9j
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0K
LQotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5z
IC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICog
c3lub3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0
ZSApOwotICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICByZWdpc3RlciBpbnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBl
bmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlf
Y3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQot
ICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAg
IH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9z
dGF0ZSA9PSAxMDQpOwotCi0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0
YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBz
dGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGlj
IGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAgaW50IGM7
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgaWYg
KCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsK
LSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0Ig
Y2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRo
ZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAg
IGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEg
TlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAg
ICArK3l5Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRf
YnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhh
cHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhh
dCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBm
bGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5n
IHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1
dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGlu
ZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9C
X0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09G
X0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8q
IFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwot
Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFlZX05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAg
ICAgICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zm
c2V0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55
eV9jX2J1Zl9wOyAvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsgICAgLyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9ob2xkX2No
YXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2F0X2JvbCA9IChjID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9hdF9ib2wgKQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAg
ICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwotfQotI2Vu
ZGlmICAvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0
byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRh
YmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRv
IEBjIElOSVRJQUwgLgotICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmls
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKXsKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZl
cih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2luaXRfYnVm
ZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJl
bnQgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZm
ZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZv
aWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0
byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICog
ICAgICBwcHBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZmZXJfc3Rh
dGUobmV3X2J1ZmZlcik7Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0g
ICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAg
ICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
LSAgICAgICAgfQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
LSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0
IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICog
RU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0g
ICAgICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCi0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAg
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55
eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5
Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvczsKLSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
bnB1dF9maWxlOwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKLX0K
LQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAq
IEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJh
Y3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9T
SVpFLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJu
IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBw
X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlfQlVGRkVS
X1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5u
ZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9z
aXplID0gc2l6ZTsKLQotICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxv
bmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBp
biAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYg
PSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAg
aWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2lzX291
cl9idWZmZXIgPSAxOwotCi0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwot
Ci0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0g
YiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlm
ICggISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1
ZiAseXlzY2FubmVyICk7Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19
Ci0KLS8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1
bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVm
ZmVyLAotICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAg
ICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAq
IGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotCi0gICAgcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55eV9pbnB1
dF9maWxlID0gZmlsZTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBi
IGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5
XwotICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRf
YnVmZmVyLgotICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUg
bGluZW5vIG9yIGNvbHVtbi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZF
Uil7Ci0gICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVt
biA9IDA7Ci0gICAgfQotCi0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAK
LSAgICBlcnJubyA9IG9lcnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJh
Y3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBh
cmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJF
TlRfQlVGRkVSLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LSAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGIt
Pnl5X25fY2hhcnMgPSAwOwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZm
ZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8g
dGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFt
IGluIHRoYXQgc3RhdGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLQotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAgYi0+eXlf
YXRfYm9sID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQot
ICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0
aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBU
aGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5Lgot
ICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlf
QlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlm
IChuZXdfYnVmZmVyID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJv
bSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQot
ICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZl
ci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVm
X3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+
eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMu
IE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3Rv
X2J1ZmZlci4gKi8KLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1vdmVzIGFu
ZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRoZSBuZXh0
IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsK
LSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsK
LQotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YgPSAxOwotICAgIH0KLX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5v
dCBleGlzdC4KLSAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAq
Lwotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgaW50IG51bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0
YWNrKSB7Ci0KLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1l
bnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAg
ICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAgICAgICov
Ci0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAg
ICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAgICAgICAg
LyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICov
Ci0gICAgICAgIGludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0K
LSAgICAgICAgbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19z
aXplOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKiopcHByZWFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWctPnl5
X2J1ZmZlcl9zdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZl
cl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6ZXJvIG9u
bHkgdGhlIG5ldyBzbG90cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sg
KyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBu
dW1fdG9fYWxsb2M7Ci0gICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVy
LgotICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRo
ZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUgb2JqZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVy
ICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAg
ICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBi
YXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBm
b3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7
Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBjYXJl
IG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0g
ICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0g
ICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVyYWN0
aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0g
MDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIHBwX3N3
aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoq
IFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQg
Y2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgot
ICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxs
b2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2Fu
IGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBw
X3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJp
bmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAot
ICAgIHJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7
Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVu
IGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUg
Y29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2Nh
bgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRl
ZCB0byBieSBAYSBieXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0g
Ki8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRl
cywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIGludCBp
OwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3Bh
Y2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAg
IGJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3Nj
YW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kg
KQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xlbl0g
PSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYiA9
IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQot
ICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQg
dGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3RhdGljIHZv
aWQgeXlfcHVzaF9zdGF0ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIGlmICggeXlnLT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFydF9zdGFj
a19kZXB0aCApCi0gICAgICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwotCi0gICAg
ICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5DUjsKLSAg
ICAgICAgbmV3X3NpemUgPSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9mKCBpbnQg
KTsKLQotICAgICAgICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNjYW5uZXIg
KTsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGlu
dCAqKSBwcHJlYWxsb2MoKHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6ZSAseXlz
Y2FubmVyICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFydC1jb25k
aXRpb24gc3RhY2siICk7Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXln
LT55eV9zdGFydF9zdGFja19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5ld19zdGF0
ZSk7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIGlmICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQotICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ciICk7Ci0K
LSAgICBCRUdJTih5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyXSk7
Ci19Ci0KLSAgICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgcmV0dXJuIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19w
dHIgLSAxXTsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9G
QUlMVVJFIDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBj
aGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBmcHJpbnRm
KCBzdGRlcnIsICIlc1xuIiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19
Ci0KLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAq
LwotCi0jdW5kZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAg
ICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBc
Ci0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1Nf
TElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWct
Pnl5X2hvbGRfY2hhcjsgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxl
c3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19i
dWZfcDsgXAotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxl
bmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0K
LS8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJl
cnMuICovCi0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFf
VFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5
ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwot
fQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0v
KiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHJldHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0
IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5u
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
Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
Ci0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1
Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRyX3l5X2ds
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
IHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxl
KFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
IE5VTEw7Ci0gICAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQot
ICAgIC8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXlnLT55eV9i
dWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxM
OwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAg
ICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUK
LSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8K
LSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBt
YWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAs
IHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBp
OwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsK
LX0KLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9z
dHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVn
aXN0ZXIgaW50IG47Ci0gICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKLQot
ICAgIHJldHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBz
aXplICk7Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBp
biB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25z
IHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQg
dXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAg
ICAgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVu
dCBmcm9tCi0gICAgICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBh
cmd1bWVudCBjb252ZXJzaW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50
LgotICAgICAqLwotICAgIHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNp
emUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgZnJlZSggKGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygpIGZvciAo
Y2hhciAqKSBjYXN0ICovCi19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0K
LXN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikK
LXsKLSAgICAvLyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtI
U1BBQ0V9K3tJREVOVElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0
IEhTUEFDRS4KLSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZp
bmUgIikgPT0gODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGlu
dCBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9
PSAnICcpIHx8IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUg
PSBuZXcgc3RkOjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4g
bmFtZTsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFy
KiBidWYsIGludCBtYXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hp
bGUgKCFtSW5wdXQtPmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0g
ICAgewotICAgICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46
OmRlY29kZUxvY2F0aW9uKHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAg
ICAgICBmaWxlID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9saW5lbm8o
cHA6OlRva2VuOjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0gICAgICAg
IG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1
dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17
Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0X2V4dHJh
KHRoaXMsJm1MZXhlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgw
LG1MZXhlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxl
eGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUxleGVy
KTsKLSAgICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3
YjZhYTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNzIgKzAs
MCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8q
IFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGlu
IEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAy
LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNp
YWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMK
LSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1
dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0
aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNr
ZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2Vs
ZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0
aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92
ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0
b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNl
ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlz
b24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFy
ZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNl
bWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3Vs
ZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5h
bWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJs
ZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgot
ICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBm
aWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5v
dGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJ
ZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24g
dmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRv
biBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUg
cGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICov
Ci0jZGVmaW5lIFlZTFNQX05FRURFRCAxCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFu
ZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5
eWxleCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBw
bHZhbAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNk
ZWZpbmUgeXluZXJycyBwcG5lcnJzCi0jZGVmaW5lIHl5bGxvYyBwcGxsb2MKLQotLyogVG9rZW5z
LiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQ
dXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhl
ciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50
eXBlIHsKLSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFT
SF9JRiA9IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAy
NjIsCi0gICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBI
QVNIX0VORElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0g
MjY3LAotICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjks
Ci0gICAgIEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBI
QVNIX0RFRklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAg
IElOVF9DT05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElE
RU5USUZJRVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhB
U0ggMjU4Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVm
aW5lIEhBU0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNI
X0VMU0UgMjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUK
LSNkZWZpbmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFT
SF9QUkFHTUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZF
UlNJT04gMjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JK
IDI3MgotI2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQg
Mjc0Ci0jZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3Ngot
Ci0KLQotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8K
LQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRl
eHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZ
REVCVUcgMQotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVCVUcKLSMg
ZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVz
c2FnZXMuICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9SX1ZFUkJP
U0UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlFUlJPUl9W
RVJCT1NFIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwotI2lm
bmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRpZgotCi0j
aWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5
cGVkZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcq
IHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7
Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5l
IHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFM
IDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVf
SVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7
Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVt
bjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsg
d2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBk
ZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLS8qIENvcHkgdGhlIHNlY29u
ZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi1leHRlcm4gaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQg
eXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0
YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29s
IGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLQotCi0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNpZmRlZiBz
aG9ydAotIyB1bmRlZiBzaG9ydAotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVk
ZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNo
YXIgeXl0eXBlX3VpbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZ
WVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlw
ZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5U
MTYKLXR5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQ
RV9JTlQxNgotdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVk
ZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0j
IGlmZGVmIF9fU0laRV9UWVBFX18KLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0j
IGVsaWYgZGVmaW5lZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAh
IGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9U
IHVuc2lnbmVkIGludAotIyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0g
KChZWVNJWkVfVCkgLTEpCi0KLSNpZm5kZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwotIyAgaWYg
RU5BQkxFX05MUwotIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLwotIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVu
dGltZSIsIG1zZ2lkKQotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAgZGVmaW5l
IFlZXyhtc2dpZCkgbXNnaWQKLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1bnVzZWQt
dmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQgbGludCB8
fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKLSNlbHNl
Ci0jIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50aXR5IGZ1
bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlv
bnMuICAqLwotI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UKLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1ZWUlEIChp
bnQgaSkKLSNlbHNlCi1zdGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2VuZGlmCi17
Ci0gIHJldHVybiBpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZ
WUVSUk9SX1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7
IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNF
X0FMTE9DQQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMg
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5l
ZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgot
IyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LwotIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5l
ZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAg
ICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
LSMgICAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICAg
IGVuZGlmCi0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZk
ZWYgWVlTVEFDS19BTExPQwotICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJu
aW5nLiAgKi8KLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9
IHdoaWxlIChZWUlEICgwKSkKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAv
KiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRv
bSBvZiB0aGUgc3RhY2ssCi0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBh
cyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2Eg
KE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAg
ICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFj
ayBzbG90cy4gICovCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJl
YXNvbmFibGUgY2lyY2EgMjAwNiAqLwotIyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgWVlNQUxMT0MKLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5k
ZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSBZWVNJWkVfTUFYSU1VTQotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYm
ICEgZGVmaW5lZCBfU1RETElCX0ggXAotICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8
IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5l
ZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgX1NURExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0gg
MQotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZ
TUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxs
b2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVu
ZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZRlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQot
IyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlm
Ci0jZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0K
LQotI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1
c3BsdXMgXAotICAgICB8fCAoZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9J
U19UUklWSUFMIFwKLSAgICAgICAgICYmIGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZ
U1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVk
IGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2lu
dDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgICBZWUxUWVBFIHl5bHM7Ci19OwotCi0vKiBU
aGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQg
dGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlv
biB5eWFsbG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3Vn
aCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0jIGRl
ZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQx
NikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkgXAotICAgICAgKyAyICog
WVlTVEFDS19HQVBfTUFYSU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0
byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICov
Ci0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19f
Ci0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9t
ZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMg
ICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgICAgICBcCi0gICAgICBkbyAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlTSVpFX1Qg
eXlpOyAgICAgICAgICAgICBcCi0gICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5
aSsrKSAgIFwKLSAgICAgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07ICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAoWVlJRCAoMCkpCi0jICBlbmRpZgot
IyBlbmRpZgotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhl
IG5ldyBvbmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpF
IGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVudHMgaW4gdGhlIHN0YWNr
LCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKLSAgIHN0YWNrLiAgQWR2
YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0Ci0g
ICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKSAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpFX1QgeXlu
ZXdieXRlczsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlwdHItPlN0
YWNrLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+
U3RhY2s7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlzdGFja3Np
emUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgeXlwdHIg
Kz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQot
Ci0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9u
IHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMgotLyogWVlMQVNUIC0tIExhc3QgaW5kZXgg
aW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDI0NwotCi0vKiBZWU5UT0tFTlMgLS0g
TnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDcKLS8qIFlZTk5U
UyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRTICAxMgotLyog
WVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDYyCi0v
KiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICA5
MQotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1B
WFVUT0sgICAyNzYKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xh
dGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBz
eW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgMjIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAzNywgICAgNDAsICAgICAyLAotICAgICAgMjMsICAgIDI0
LCAgICAzNiwgICAgMzMsICAgIDI1LCAgICAzNCwgICAgMzIsICAgIDM1LCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgIDQ0LCAgICA0NSwKLSAgICAgIDI4LCAgICA0MiwgICAgMjksICAgIDQ2LCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAyNiwgICAgIDIsICAgIDI3LCAgICAzOCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDMwLCAgICAzOSwgICAgMzEsICAgIDQx
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAy
LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0jaWYgWVlERUJVRwotLyogWVlQUkhT
W1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlO
IGluCi0gICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0K
LXsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNywgICAgIDksICAgIDExLCAg
ICAxMywgICAgMTYsICAgIDE5LAotICAgICAgMjMsICAgIDMwLCAgICAzNCwgICAgMzgsICAgIDQy
LCAgICA0NiwgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTksCi0gICAgICA2MiwgICAgNjUsICAg
IDY4LCAgICA3MSwgICAgNzIsICAgIDc0LCAgICA3NSwgICAgNzcsICAgIDgxLCAgICA4MywKLSAg
ICAgIDg2LCAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5OSwgICAxMDEsICAgMTAzLCAgIDEwNSwg
ICAxMDcsICAgMTA5LAotICAgICAxMTEsICAgMTEzLCAgIDExNSwgICAxMTcsICAgMTE5LCAgIDEy
MSwgICAxMjMsICAgMTI1LCAgIDEyNywgICAxMjksCi0gICAgIDEzMSwgICAxMzMsICAgMTM1LCAg
IDEzNywgICAxMzksICAgMTQxLCAgIDE0MywgICAxNDUsICAgMTQ3LCAgIDE0OSwKLSAgICAgMTUx
LCAgIDE1MywgICAxNTUKLX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBv
ZiB0aGUgcnVsZXMnIFJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9
Ci17Ci0gICAgICA0OCwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgNTAsICAgIC0xLCAgICA1MSwKLSAgICAgIC0xLCAgICAyMiwgICAgLTEsICAgIDU1LCAgICAy
MiwgICAgLTEsICAgICAzLCAgICAyMiwgICAgLTEsICAgIDE3LAotICAgICAgNTIsICAgIDIyLCAg
ICAtMSwgICAgMTgsICAgIDIzLCAgICA1MywgICAgMjQsICAgIDUyLCAgICAyMiwgICAgLTEsCi0g
ICAgICAgNCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDUsICAgIDU0LCAgICAyMiwgICAgLTEs
ICAgICA2LCAgICAyMSwKLSAgICAgIDIyLCAgICAtMSwgICAgIDcsICAgIDIxLCAgICAyMiwgICAg
LTEsICAgICA5LCAgICA1NCwgICAgMjIsICAgIC0xLAotICAgICAgIDgsICAgIDIyLCAgICAtMSwg
ICAgMTAsICAgIDIyLCAgICAtMSwgICAgMTIsICAgIDIyLCAgICAtMSwgICAgMTMsCi0gICAgICAy
MiwgICAgLTEsICAgIDE0LCAgICAyMiwgICAgLTEsICAgIDE1LCAgICAyMiwgICAgLTEsICAgIDE2
LCAgICAyMiwKLSAgICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgMjEsICAg
IC0xLCAgICA1MywgICAgMjUsICAgIDIxLAotICAgICAgLTEsICAgIDU2LCAgICAtMSwgICAgNTQs
ICAgIDU2LCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA1NSwgICAgNTcsCi0gICAgICAtMSwgICAg
MTEsICAgIDIxLCAgICAtMSwgICAgMTEsICAgIDIzLCAgICAyMSwgICAgMjQsICAgIC0xLCAgICA1
NywKLSAgICAgIC0xLCAgICA1OCwgICAgLTEsICAgIDE5LCAgICAtMSwgICAgMjAsICAgIC0xLCAg
ICAyMSwgICAgLTEsICAgIDI2LAotICAgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0x
LCAgICAyOSwgICAgLTEsICAgIDIzLCAgICAtMSwgICAgMjQsCi0gICAgICAtMSwgICAgMzAsICAg
IC0xLCAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwKLSAg
ICAgIC0xLCAgICAzNSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzOCwg
ICAgLTEsICAgIDM5LAotICAgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0
MiwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDQsCi0gICAgICAtMSwgICAgNDUsICAgIC0xLCAg
ICAyNSwgICAgLTEsICAgIDQ2LCAgICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJj
ZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Ci17Ci0gICAgICAgMCwgICAgNjMsICAgIDYzLCAg
ICA2NSwgICAgNjksICAgIDcwLCAgICA3NCwgICAgNzUsICAgIDg0LCAgICA4NSwKLSAgICAgIDg4
LCAgICA5MSwgICAgOTQsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMTAs
ICAgMTExLAotICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTE5LCAgIDEyMiwgICAx
MjMsICAgMTI3LCAgIDEzMywgICAxMzcsCi0gICAgIDE0NCwgICAxNDgsICAgMTU1LCAgIDE1Nywg
ICAxNTksICAgMTYzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3OCwKLSAgICAgMTc5LCAgIDE4
MCwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4
LAotICAgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAxOTUsICAg
MTk2LCAgIDE5NywgICAxOTgsCi0gICAgIDE5OSwgICAyMDAsICAgMjAxCi19OwotI2VuZGlmCi0K
LSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVRO
QU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4K
LSAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5v
bnRlcm1pbmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KLXsK
LSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJIQVNIIiwgIkhBU0hfVU5ERUYiLCAi
SEFTSF9JRiIsCi0gICJIQVNIX0lGREVGIiwgIkhBU0hfSUZOREVGIiwgIkhBU0hfRUxTRSIsICJI
QVNIX0VMSUYiLCAiSEFTSF9FTkRJRiIsCi0gICJERUZJTkVEIiwgIkhBU0hfRVJST1IiLCAiSEFT
SF9QUkFHTUEiLCAiSEFTSF9FWFRFTlNJT04iLCAiSEFTSF9WRVJTSU9OIiwKLSAgIkhBU0hfTElO
RSIsICJIQVNIX0RFRklORV9PQkoiLCAiSEFTSF9ERUZJTkVfRlVOQyIsICJJTlRfQ09OU1RBTlQi
LAotICAiRkxPQVRfQ09OU1RBTlQiLCAiSURFTlRJRklFUiIsICInXFxuJyIsICInKCciLCAiJykn
IiwgIicsJyIsICInWyciLAotICAiJ10nIiwgIic8JyIsICInPiciLCAiJ3snIiwgIid9JyIsICIn
LiciLCAiJysnIiwgIictJyIsICInLyciLCAiJyonIiwKLSAgIiclJyIsICInXiciLCAiJ3wnIiwg
IicmJyIsICInficiLCAiJz0nIiwgIichJyIsICInOiciLCAiJzsnIiwgIic/JyIsCi0gICIkYWNj
ZXB0IiwgImlucHV0IiwgImxpbmUiLCAidGV4dF9saW5lIiwgImNvbnRyb2xfbGluZSIsCi0gICJy
ZXBsYWNlbWVudF9saXN0IiwgInBhcmFtZXRlcl9saXN0IiwgImNvbmRpdGlvbmFsX2xpc3QiLCAi
dG9rZW5fbGlzdCIsCi0gICJjb25kaXRpb25hbF90b2tlbiIsICJ0b2tlbiIsICJvcGVyYXRvciIs
IDAKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1d
IC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxF
WC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0g
ICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIs
ICAgMjYzLCAgIDI2NCwKLSAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAy
NzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAotICAgICAyNzUsICAgMjc2LCAgICAxMCwg
ICAgNDAsICAgIDQxLCAgICA0NCwgICAgOTEsICAgIDkzLCAgICA2MCwgICAgNjIsCi0gICAgIDEy
MywgICAxMjUsICAgIDQ2LCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0MiwgICAgMzcsICAgIDk0
LCAgIDEyNCwKLSAgICAgIDM4LCAgIDEyNiwgICAgNjEsICAgIDMzLCAgICA1OCwgICAgNTksICAg
IDYzCi19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1i
b2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDks
ICAgIDUwLCAgICA1MCwgICAgNTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwg
ICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTIsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDU0LCAg
ICA1NCwKLSAgICAgIDU1LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3
LCAgICA1NywgICAgNTcsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwK
LSAgICAgIDU4LCAgICA1OCwgICAgNTgKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Yg
c3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDAs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAzLAotICAgICAg
IDYsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAg
ICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwKLSAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEKLX07Ci0KLS8qIFlZ
REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0
ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVs
c2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDIsICAgICAw
LCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAg
IDAsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAgNiwgICAgNDMsICAgIDQ0LCAgICA2MSwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQ1LAotICAgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCi0gICAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYyLCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgMCwKLSAgICAgIDMwLCAgICAzNSwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDI4LCAgICAzNCwgICAgIDAsICAgICAwLAotICAgICAgMTYsICAgICAwLCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgMjQsCi0gICAgICAyNSwg
ICAgIDcsICAgIDMxLCAgICAxMSwgICAgMzIsICAgICAwLCAgICAxMiwgICAgMjksICAgIDEzLCAg
ICAxNCwKLSAgICAgIDE1LCAgICAgOSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAw
LCAgICAzMywgICAgIDAsICAgIDI3LAotICAgICAgMTAKLX07Ci0KLS8qIFlZREVGR09UT1tOVEVS
TS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0g
ICAgICAtMSwgICAgIDEsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDY4LCAgICA4MywgICAgNTUs
ICAgIDY5LCAgICA1NiwKLSAgICAgIDU3LCAgICA1MQotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5V
TV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFU
RS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtNTUKLXN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlwYWN0W10gPQotewotICAgICAtNTUsICAgIDczLCAgIC01NSwgICAtMTcsICAgLTE4
LCAgIDE0NSwgICAtMTAsICAgIC05LCAgIC0xNiwgICAxNDUsCi0gICAgICAtOCwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI3LCAgIDIwMSwgICAgMjgsICAgLTU1LCAgIC01NSwKLSAg
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIDE3MywKLSAgICAgLTU1
LCAgIC01NSwgICAtNTUsICAgIDMwLCAgIC0xOSwgICAgLTMsICAgLTU1LCAgIC01NSwgICAgMzEs
ICAgIDMyLAotICAgICAtNTUsICAgMTA5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgICAzMywgICAyMDEsCi0gICAgICAyOSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgIDM1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTE1LCAgIC0xMSwgICAyMDEsICAgIDM2LCAgIC01NSwgICAgMzcsICAgLTU1
LAotICAgICAtNTUKLX07Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29u
c3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KLXsKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtMjcsICAgLTU1LCAgICA1MSwgICAgNjAsICAgLTU0LAotICAgICAgLTEs
ICAgLTU1Ci19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8g
aW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAg
SWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBv
c2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklO
Riwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Ci17Ci0gICAgICA1MCwgICAgNzcsICAgIDc0LCAg
ICA1MywgICAgNzUsICAgIDUyLCAgICA2MCwgICAgNzcsICAgIDU0LCAgICA4NSwKLSAgICAgIDg2
LCAgICA1OCwgICAgNTksICAgIDg3LCAgICA2MiwgICAgNTAsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDc2LAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKLSAgICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNzIsICAgIDY3
LAotICAgICAgODIsICAgIDcwLCAgICA3MywgICAgNzgsICAgIDc5LCAgICA4MSwgICAgODQsICAg
IDg5LCAgICA4OCwgICAgOTAsCi0gICAgICA2MSwgICAgNDksICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDUwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsCi0gICAgICA1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICA4MCwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
Ci0gICAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA1NCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUKLX07Ci0KLXN0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQotewotICAgICAgIDEsICAgIDU1LCAgICAyMSwg
ICAgMjEsICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDYxLCAgICAxMSwgICAgMjQsCi0gICAgICAy
NSwgICAgMjEsICAgIDIxLCAgICAyNCwgICAgMjIsICAgIDE2LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDQ5LCAgICAy
MiwKLSAgICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIxLCAg
ICAyMSwgICAgODUsICAgIDIyLAotICAgICAgIDksICAgICAxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2OSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAg
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA4NSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQw
LAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQw
LCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2Ci19OwotCi0vKiBZWVNU
T1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwot
ICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICA0OCwgICAgIDAsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTUsCi0gICAgICA1Nywg
ICAgNTgsICAgIDIyLCAgICAyMSwgICAgMTEsICAgIDU0LCAgICA1NiwgICAgNTcsICAgIDIxLCAg
ICAyMSwKLSAgICAgIDIyLCAgICA1NCwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIy
LCAgICAyMiwgICAgNTIsICAgIDU1LAotICAgICAgMjMsICAgIDIyLCAgICA1NywgICAgMjIsICAg
IDIxLCAgICAyMywgICAgMjIsICAgIDU2LCAgICAyMiwgICAgMjIsCi0gICAgICAyMiwgICAgMjIs
ICAgIDIxLCAgICA1MywgICAgMjEsICAgIDI0LCAgICAyNSwgICAgMjQsICAgIDUyLCAgICAyMSwK
LSAgICAgIDIyCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0j
ZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAg
ICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICBnb3Rv
IHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgotI2RlZmlu
ZSBZWUVSUk9SICAgICBnb3RvIHl5ZXJyb3JsYWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0
IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBl
YXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0ND
LgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBj
YW4gZ28uICAqLwotCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKLQotI2RlZmlu
ZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNLVVAoVG9r
ZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkgICAgICAgICAg
ICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5Y2hh
ciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVl
KTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5
Y2hhcik7ICAgICAgICAgICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoMSk7ICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZWxzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9y
OiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxlIChZ
WUlEICgwKSkKLQotCi0jZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAg
MjU2Ci0KLQotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJI
U1sxXSB0byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVt
cHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAo
YWx3YXlzIGRlZmluZWQpLiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtL
XSkKLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJl
bnQsIFJocywgTikgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChS
aHMsIDEpLmZpcnN0X2xpbmU7ICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZ
WVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9s
aW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOyAgICAgXAotICAgICAgKEN1cnJl
bnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOyAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGVsc2UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAg
ID0gICAgICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsgICAgICAgICAg
ICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2Nv
bHVtbiA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsgICAg
ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3
aGlsZSAoWVlJRCAoMCkpCi0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmlu
dCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5k
YXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVh
ayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0K
LSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFMCi0jICBk
ZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAgICAgICAgICBcCi0gICAgIGZwcmlu
dGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsICAgICAgICAgIFwKLSAgICAgICAgICAoTG9jKS5maXJz
dF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sIFwKLSAgICAgICAgICAoTG9jKS5sYXN0X2xpbmUs
ICAoTG9jKS5sYXN0X2NvbHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5U
KEZpbGUsIExvYykgKCh2b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVggLS0g
Y2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNpZmRlZiBZ
WUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVY
X1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jKQot
I2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURF
QlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCi0j
IGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgIFwK
LSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0K
LSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKSAg
ICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0
ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5
X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25w
LCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3Zh
bHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRl
eHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNv
bnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRp
b25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICgheXl2YWx1
ZXApCi0gICAgcmV0dXJuOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4
dCk7Ci0jIGlmZGVmIFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBS
SU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZ
WVVTRSAoeXlvdXRwdXQpOwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAg
ICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50IChGSUxF
ICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZ
WUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBp
bnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxU
WVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7
Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5
b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgWVlf
TE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlvbnApOwotICBZWUZQUklOVEYgKHl5
b3V0cHV0LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBl
LCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhl
IHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1ZGVk
KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
LXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlw
ZV9pbnQxNiAqdG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoYm90dG9t
LCB0b3ApCi0gICAgeXl0eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp0b3A7
Ci0jZW5kaWYKLXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7
IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwg
KmJvdHRvbSk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUgWVlf
U1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAg
ICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMg
Z29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIFlZ
TFRZUEUgKnl5bHNwLCBpbnQgeXlydWxlLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1z
dGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIHl5cnVsZSwgY29udGV4
dCkKLSAgICBZWVNUWVBFICp5eXZzcDsKLSAgICBZWUxUWVBFICp5eWxzcDsKLSAgICBpbnQgeXly
dWxlOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMg
PSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0g
eXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5
IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0g
IC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8
IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0g
IiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhz
W3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlu
cmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKSAg
ICAgICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAg
IH0KLX0KLQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAg
ICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKLSAgICB5eV9y
ZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZ
SUQgKDApKQotCi0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVm
dCB1bmluaXRpYWxpemVkIHNvIHRoYXQKLSAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3Qu
ICAqLwotaW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAhWVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJ
TlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBM
b2NhdGlvbikKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUg
WVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYgLyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlO
SVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZu
ZGVmIFlZSU5JVERFUFRICi0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZ
WU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3Rp
dmUgb25seQotICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNl
ZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBh
cmUgdW5kZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVT
IChZWU1BWERFUFRIKQotICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVn
ZXIgYXJpdGhtZXRpYy4gICovCi0KLSNpZm5kZWYgWVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhE
RVBUSCAxMDAwMAotI2VuZGlmCi0KLQwKLQotI2lmIFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRl
ZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gK
LSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0jICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0
aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQot
c3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoeXlzdHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7
Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5
eWxlbl07IHl5bGVuKyspCi0gICAgY29udGludWU7Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVu
ZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5c3RwY3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNf
XyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5l
IHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQotLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVy
bmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAg
Ki8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hh
ciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1z
dGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7
Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0jZW5kaWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0
OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMr
KykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVu
ZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJFUyB0aGUg
Y29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1
b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4g
IFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3Nhcnkg
dW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9y
IGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBp
cyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7
IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQg
aGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywg
Y29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAg
IFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAg
ICAgZm9yICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1wn
JzoKLSAgICAgIGNhc2UgJywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0K
LSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICci
JzoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAg
ICAgICByZXR1cm4geXluOwotICAgICAgfQotICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAg
ICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAg
cmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8q
IENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVk
IHRva2VuCi0gICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIGNvcGllZCwKLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBi
eXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Ci0gICBjb3B5IGFueXRoaW5nOyBqdXN0
IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKLSAgIGNvcGllZC4gIEFz
IGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgot
ICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9j
Y3VycyBkdXJpbmcKLSAgIHNpemUgY2FsY3VsYXRpb24uICAqLwotc3RhdGljIFlZU0laRV9UCi15
eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQot
ewotICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOwotCi0gIGlmICghIChZWVBBQ1RfTklORiA8
IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHsKLSAg
ICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5
c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5
eXNpemUgPSB5eXNpemUwOwotICAgICAgWVlTSVpFX1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNp
emVfb3ZlcmZsb3cgPSAwOwotICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElN
VU0gPSA1IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNXTsKLSAgICAgIGludCB5eXg7Ci0KLSMgaWYgMAotICAgICAgLyogVGhpcyBpcyBzbyB4
Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQotICAgICBjb25z
dHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywg
ZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5l
eHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Ci0jIGVuZGlmCi0g
ICAgICBjaGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBj
aGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7
Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVz
IjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwotICAgICAgY2hh
ciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0gICAgICAgICAgICArIHNpemVvZiB5eWV4
cGVjdGluZyAtIDEKLSAgICAgICAgICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVN
IC0gMikKLSAgICAgICAgICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAgIGNoYXIg
Y29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZWCBhdCAt
WVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLSAgICAgWVlDSEVD
Sy4gICovCi0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAgICAg
IC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwot
ICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5eGVu
ZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAg
ICAgaW50IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsK
LSAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0gICAg
ICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotICAgIGlmICh5eWNo
ZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLSAgICAgIHsKLSAgICAg
ICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLSAgICAgICAg
ICB7Ci0gICAgICAgIHl5Y291bnQgPSAxOwotICAgICAgICB5eXNpemUgPSB5eXNpemUwOwotICAg
ICAgICB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5
eF07Ci0gICAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4
XSk7Ci0gICAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAg
ICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5
eXByZWZpeCk7Ci0gICAgICAgIHl5cHJlZml4ID0geXlvcjsKLSAgICAgIH0KLQotICAgICAgeXlm
ID0gWVlfKHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlm
KTsKLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5
eXNpemUgPSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotICAgIHJldHVy
biBZWVNJWkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotICAgIHsKLSAgICAgIC8q
IEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFj
ZS4KLSAgICAgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRy
YW5zbGF0aW9uCi0gICAgICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1i
ZXIgb2YgIiVzInMuICAqLwotICAgICAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0gICAgICBpbnQg
eXlpID0gMDsKLSAgICAgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCi0gICAgICAgIHsK
LSAgICAgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNv
dW50KQotICAgICAgICB7Ci0gICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5
eWkrK10pOwotICAgICAgICAgIHl5ZiArPSAyOwotICAgICAgICB9Ci0gICAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAgICAgICAgeXlmKys7Ci0gICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICAgIHJldHVybiB5eXNpemU7Ci0gICAgfQotfQotI2VuZGlm
IC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0
byB0aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1z
ZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZTFRZUEUgKnl5bG9jYXRpb25wLCBw
cDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoeXlt
c2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIGNvbnN0IGNo
YXIgKnl5bXNnOwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0gICAg
WVlMVFlQRSAqeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYK
LXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0Ug
KGNvbnRleHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZ
WV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0K
LSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwot
ICAgIH0KLX0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5
cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
LSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlw
YXJzZSAocHA6OkNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2Vu
ZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0tLS0tLS0t
LS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFN
Ci0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNl
ICh2b2lkICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJTRV9QQVJB
TSkKLSAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQK
LXl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29u
dGV4dCkKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0gIC8q
IFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUgc2VtYW50
aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsOwot
Ci0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0v
KiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlMVFlQRSB5
eWxsb2M7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAg
LyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxl
ZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4gPSAw
OwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBh
bmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBjaGFy
ICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1z
Z2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1h
bnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAg
UmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92
ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRo
ZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0g
IHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0g
IC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklU
REVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0g
IC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCi0gIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhd
OwotICBZWUxUWVBFICp5eWxzID0geXlsc2E7Ci0gIFlZTFRZUEUgKnl5bHNwOwotICAvKiBUaGUg
bG9jYXRpb25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gIFlZTFRZ
UEUgeXllcnJvcl9yYW5nZVsyXTsKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09
IChOKSwgeXlzc3AgLT0gKE4pLCB5eWxzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlzdGFja3Np
emUgPSBZWUlOSVRERVBUSDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNl
bWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMu
ICAqLwotICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5bG9jOwotCi0gIC8qIFRoZSBudW1i
ZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAg
dG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50IHl5bGVu
ID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0g
IHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNo
YXIgPSBZWUVNUFRZOyAgICAgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAv
KiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2
YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNh
bWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFy
ZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5
dnM7Ci0gIHl5bHNwID0geXlsczsKLSNpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSAgLyogSW5pdGlh
bGl6ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUgcGFyc2luZyBzdGFydHMuICAqLwotICB5
eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGluZSAgID0gMTsKLSAgeXlsbG9jLmZp
cnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7Ci0jZW5kaWYKLQotICBnb3RvIHl5
c2V0c3RhdGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdo
aWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJ
biBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0
YWNrcwotICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVy
ZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5
eXNzcCA9IHl5c3RhdGU7Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3Ap
Ci0gICAgewotICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUg
c3RhY2tzLCBpbiBlbGVtZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAt
IHl5c3MgKyAxOwotCi0jaWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotICAgIC8qIEdpdmUgdXNl
ciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAg
ICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0g
ICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgeXl0eXBl
X2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotCi0gICAg
LyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2Yg
dGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVz
ZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEg
YXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBp
cyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwK
LSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAg
ICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAmeXlsczEs
IHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0g
ICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5eXZzID0geXl2czE7Ci0g
ICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9D
QVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQg
dGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3Rh
Y2tzaXplKQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAy
OwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNrc2l6ZSA9
IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsK
LSAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNU
QUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRy
KQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNz
KTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5
eWxzKTsKLSMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2Ep
Ci0gICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKLSAgICAgIH0KLSMgZW5kaWYKLSNlbmRpZiAv
KiBubyB5eW92ZXJmbG93ICovCi0KLSAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0g
ICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotICAgICAgeXlsc3AgPSB5eWxzICsgeXlz
aXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFz
ZWQgdG8gJWx1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUp
KTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlB
Qk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRc
biIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5
eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3By
aWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxv
b2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUu
ICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVy
ZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwot
ICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5v
dCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZh
bGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAg
IHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAg
ICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAg
ewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3Rk
ZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0g
ICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJ
TlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQot
Ci0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRv
IHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAq
LwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5
Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRh
YmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwg
eXluID09IFlZVEFCTEVfTklORikKLSAgICBnb3RvIHl5ZXJybGFiOwotICAgICAgeXluID0gLXl5
bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkK
LSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsg
YWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVy
cnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFk
IHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBp
dCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1Q
VFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0gICorK3l5bHNw
ID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0IC0t
IGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
eXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAwKQot
ICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0aGUg
bnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXlyMlt5eW5d
OwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1
ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0aGUg
Zm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJlaGF2aW9y
IGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVw
b24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRo
ZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJuaW5n
IHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFsID0geXl2
c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlvbi4gICovCi0gIFlZTExPQ19ERUZB
VUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7Ci0gIFlZX1JFRFVDRV9QUklOVCAo
eXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDc6Ci0KLSAgICB7Ci0g
ICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5W
ZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQt
PmVuZCgpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmJlZ2luKCksICh5eXZzcFsoMSkgLSAo
MildLnRsaXN0KS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgKHl5dnNwWygxKSAtICgyKV0udGxp
c3QpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICBj
b250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDMpXSkuZmlyc3RfbGluZSwgcHA6Ok1h
Y3JvOjprVHlwZU9iaiwgKHl5dnNwWygxKSAtICgzKV0uc3ZhbCksIE5VTEwsICh5eXZzcFsoMikg
LSAoMyldLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0gICAg
ewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDYpXSkuZmlyc3Rf
bGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICh5eXZzcFsoMSkgLSAoNildLnN2YWwpLCAoeXl2
c3BbKDMpIC0gKDYpXS50bGlzdCksICh5eXZzcFsoNSkgLSAoNildLnRsaXN0KSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDExOgotCi0gICAgewotICAgICAgICBjb250ZXh0LT51bmRl
ZmluZU1hY3JvKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRl
eHQsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSA/IHRydWUgOiBmYWxzZSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxC
bG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5z
dmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAg
ICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVk
KCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDE1OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQotICAgIHsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgIHBvcENv
bmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIz
OgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDI1OgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDI2OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZl
Y3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5
bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSld
LnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI3OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgzKV0udGxpc3QpOwotICAgICAgICAo
eXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDMpIC0gKDMpXSku
Zmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygzKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlz
dCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2Jh
Y2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyOToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMild
LnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAo
MildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzA6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2
YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9
ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMzI6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAg
ewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwg
KHl5dnNwWygxKSAtICgxKV0uaXZhbCksIE5VTEwpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAzNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigo
eXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0g
KDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM3OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5m
aXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJ
RklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAzOToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ1snOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNDA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICddJzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDQxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPCc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcoJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDQ0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKSc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA0NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3snOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNDY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd9JzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDQ3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA0ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNDk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICctJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDUwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyonOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICclJzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA1NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ3wnOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcmJzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDU2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfic7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJz0nOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICchJzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDU5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOic7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzsn
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcs
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
Pyc7IDt9Ci0gICAgYnJlYWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCi0KLSAg
ICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIs
IHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAg
eXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICorK3l5dnNw
ID0geXl2YWw7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJl
c3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBn
b2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxl
Ci0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAg
eXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0g
eXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNz
cCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUg
PSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhl
cmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBh
biBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAg
IHsKLSAgICAgICsreXluZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJv
ciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAg
ewotICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNo
YXIpOwotICAgIGlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSkKLSAgICAgIHsKLSAgICAgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIg
KiB5eXNpemU7Ci0gICAgICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTTsKLSAgICAgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgICAgICAgIFlZ
U1RBQ0tfRlJFRSAoeXltc2cpOwotICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxM
T0MgKHl5YWxsb2MpOwotICAgICAgICBpZiAoeXltc2cpCi0gICAgICAgICAgeXltc2dfYWxsb2Mg
PSB5eWFsbG9jOwotICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICB5eW1zZyA9IHl5
bXNnYnVmOwotICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSAgICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICBpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxs
b2MpCi0gICAgICB7Ci0gICAgICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3Rh
dGUsIHl5Y2hhcik7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIHl5bXNnKTsK
LSAgICAgIH0KLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNv
bnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotICAgICAgICBpZiAoeXlzaXplICE9IDApCi0g
ICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIH0KLSAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsbG9jOwotCi0gIGlmICh5eWVycnN0YXR1
cyA9PSAzKQotICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVz
ZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8K
LQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1cm4gZmFp
bHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikK
LSAgICAgICAgWVlBQk9SVDsKLSAgICB9Ci0gICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0
cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZh
bCwgJnl5bGxvYywgY29udGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgIH0KLSAg
ICB9Ci0KLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVy
IHNoaWZ0aW5nIHRoZSBlcnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJsYWIxOwot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LXl5ZXJyb3JsYWI6Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1
c2VyIGNvZGUgbmV2ZXIgaW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJv
cmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAqLwotICBp
ZiAoLypDT05TVENPTkQqLyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgeXllcnJvcl9y
YW5nZVswXSA9IHl5bHNwWzEteXlsZW5dOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9s
cyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4g
ICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsK
LQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXgg
ZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVz
ID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0K
LSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBp
ZiAoeXluICE9IFlZUEFDVF9OSU5GKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJPUjsKLSAg
ICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRF
UlJPUikKLSAgICAgICAgewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAgICAgICAg
ICBpZiAoMCA8IHl5bikKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAg
IC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVy
cm9yIHRva2VuLiAgKi8KLSAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJPUlQ7Ci0K
LSAgICAgIHl5ZXJyb3JfcmFuZ2VbMF0gPSAqeXlsc3A7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJy
b3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBj
b250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsK
LSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlmICh5eW4g
PT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsKLQotICB5
eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwotICAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcs
IGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0gICAgIHRoZSBsb29rLWFoZWFkLiAg
WVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywg
KHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAgLyogU2hp
ZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5
eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5
bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsK
LSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwot
ICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRsYWIgLS0g
bWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5eWVycm9y
ICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5cmVzdWx0
ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoKLSAgaWYg
KHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAo
IkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBv
ZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZ
WUFDQ0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZz
cCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgfQotI2lmbmRl
ZiB5eW92ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RBQ0tfRlJFRSAoeXlz
cyk7Ci0jZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVm
KQotICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1ha2Ugc3VyZSBZWUlE
IGlzIHVzZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQotCi0KLQotCi0KLXZv
aWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4
dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxC
bG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wg
Q29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNl
KHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcF90YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
MWVmODA2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAg
QEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBT
a2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0g
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0g
ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNl
cHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFy
dCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0
IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29y
ayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24g
b3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAg
QWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJz
ZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMK
LSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQg
dGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwg
ZXhjZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICov
Ci0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VO
VFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0
IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAg
ZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAy
NTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhB
U0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9
IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAg
SEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhU
RU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9
IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5D
ID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0g
Mjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAq
LwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNI
X0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIK
LSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhB
U0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3
Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNk
ZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhB
U0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUg
SU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURF
TlRJRklFUiAyNzYKLQotCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZ
WVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBp
dmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBw
cDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0K
LSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3
aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRl
ZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZ
TFRZUEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZ
TFRZUEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBs
YXN0X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5
cGUgWVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5l
IFlZTFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNl
bmRpZgotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE3MTY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCkBA
IC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21tb24gcHJl
cHJvY2Vzc29yIHV0aWxpdGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVU
SUxTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisKKy8vIEEg
bWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5j
dGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMg
Zm9yIGEgY2xhc3MuCisjZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFt
ZSkgXAorICBUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwKKyAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1BQVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2ogYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNz
b3IudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTk3NTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCkBAIC0wLDAgKzEsMzkzIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Q
cm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1l
PSJwcmVwcm9jZXNzb3IiCisJUHJvamVjdEdVSUQ9IntGQkUzMkRGMy0wRkIwLTRGMkYtQTQyNC0y
QzIxQkQ3QkMzMjV9IgorCVJvb3ROYW1lc3BhY2U9InByZXByb2Nlc3NvciIKKwlLZXl3b3JkPSJX
aW4zMlByb2oiCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgorCT4KKwk8UGxhdGZv
cm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJ
CU5hbWU9Ing2NCIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZp
bGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVn
fFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlv
bk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIK
KwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJT
ZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNN
SURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtf
REVCVUc7X0xJQiIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVD
aGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFk
ZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJ
CURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9
IjQxMDA7NDEyNzs0MjQ0OzQ3MDIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFn
ZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVz
b3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtF
dmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Jz
Y01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwv
Q29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
CisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSki
CisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1P
cHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxl
SW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJX
SU4zMjtOREVCVUc7X0xJQiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5j
dGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJ
CQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZv
cm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3
OzQyNDQiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4K
KwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9y
eT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJ
CQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25O
YW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJ
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJ
CVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJCQlNaW5pbWFs
UmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxp
YnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVs
PSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9
IjMiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjc7NDcw
MiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8
Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9
IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJ
SW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFt
ZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdo
b2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQ
cmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVp
bGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9y
VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0
RW52aXJvbm1lbnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9
InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgor
CQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0
cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIK
KwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgor
CQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3IgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNB
TGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0
QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0
aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVy
CisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2Rs
O2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3
QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxEaWFnbm9zdGljcy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHByZXNzaW9u
UGFyc2VyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxJbnB1dC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cTGV4ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXE1hY3JvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIuY3Bw
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9Ikhl
YWRlciBGaWxlcyIKKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgorCQkJVW5p
cXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCisJ
CQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhhbmRs
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxE
aXJlY3RpdmVQYXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxFeHByZXNzaW9uUGFyc2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5wdXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHBwX3V0aWxzLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29y
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU291
cmNlTG9jYXRpb24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxUb2tlbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFRva2VuaXplci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJ
PC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9zdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZDFjZTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RM
IHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9O
X1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsg
fQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRl
IHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9T
VExVVElMU19IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2E5NDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgKaW5kZXggODhkMTk2Zi4uMTUwNTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgKQEAgLTQ3LDUgKzQ3LDQgQEAgZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwogaW50IEluaXRD
UFBTdHJ1Y3Qodm9pZCk7CiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwogaW50IElu
aXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotaW50IFNjYW5Gcm9t
U3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAq
YXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCmluZGV4IDYwYjY2YmQuLmZk
ZTg1M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCkBAIC02Niw2ICs2Niw4IEBAIHR5cGVkZWYg
c3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1dFNyYzsK
IAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3RhdGljIGlu
dCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIHJl
dHVybiBFT0Y7CkBAIC03Myw3ICs3NSw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMg
KmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAq
aW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBl
b2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGlj
IElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29w
LCAwLCAwIH07CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKTsKIApAQCAtMTI2LDYgKzEyOCwxNiBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkK
ICAgICByZXR1cm4gKEZyZWVDUFAoKSk7CiB9CiAKK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0
cnVjdCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBp
bnQgbGVuZ3RoW10pCit7CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJn
diAgICAgPSBzdHJpbmc7CisgICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7CisgICAgY3BwLT5Q
YVN0ckxlbiAgID0gbGVuZ3RoOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAg
cmV0dXJuIDA7Cit9CisKIC8qCiAgKiBzdHJfZ2V0Y2goKQogICogdGFrZXMgY2FyZSBvZiByZWFk
aW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKaW5kZXggMjMz
ZDFkYy4uYjY3YzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKQEAgLTY5LDkgKzY5LDkgQEAg
dHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVy
KENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBp
bnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQ
U3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Kik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9n
Cit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhl
IG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIo
aW50KTsKIHZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9p
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCmluZGV4IGMxOWY3OWMuLmU3ZDBiMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3lt
Ym9scy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5oCkBAIC0xMDUsNyArMTA1LDYgQEAgU3ltYm9sICpOZXdTeW1ib2woU291
cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpOwog
U3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9t
LCBzeW1ib2xraW5kIGtpbmQpOwogU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNj
b3BlLCBpbnQgYXRvbSk7CiBTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQg
YXRvbSk7Ci12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7CiAKIAogI2VuZGlmIC8vICFk
ZWZpbmVkKF9fU1lNQk9MU19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKaW5kZXggZDY1OGMxMi4uYjk0
YzA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCkBA
IC0yNjUsNiArMjY2LDggQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlw
ZXBwICogeXlsdmFscHApCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07
CiAgICAgaW50IGx0b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3Vt
OworICAgIGNoYXIgY2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAg
IGlmIChsdG9rZW4gPj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihU
b2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICAgICBsZW4gPSAwOwor
CSAgICBhY2N1bSA9IDA7CiAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAg
ICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAg
ICAgIGlmIChjaCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10g
PSBjaDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICBz
eW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2Owog
ICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiYXNlID0gODsKICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9M
RU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7CisgICAgICAg
ICAgICAgICAgaWYgKGlzZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSBj
aCAtICcwJzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCisgICAgICAg
ICAgICAgICAgICAgIGNoX3ZhbCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY2hfdmFsIDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsK
KyAgICAgICAgICAgICAgICBhY2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKKyAgICAgICAg
ICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcp
OwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7
Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1l
KTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIHN5bWJvbF9uYW1l
KTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1bTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBs
UmVhZEJ5dGUocFRvayk7CkBAIC00MTQsMTAgKzQ0MCwxMCBAQCB2b2lkIER1bXBUb2tlblN0cmVh
bShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAgICAg
ICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVz
ICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAg
ICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJs
ZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
eXlsdmFscHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
UFBfRkxPQVRDT05TVEFOVDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxw
cC0+c2NfZnZhbCk7CkBAIC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklM
RSAqZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3
KQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHRva2VuKSk7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAgICAg
ICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3Rva2Vucy5oCmluZGV4IDg3NjZkZjkuLmRiZjRhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaApA
QCAtNDgsNiArNDgsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUgX19U
T0tFTlNfSCAxCiAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wYXJzZXIuaCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTM4YjczMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCisKK1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmco
VEluZm9TaW5rQmFzZSYgc2luaykKKyAgICA6IG1TaW5rKHNpbmspCisgICAgLCBtTnVtRXJyb3Jz
KDApCit7CisgICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5kIG9ubHkgaW4gZnJhZ21lbnQgc2hhZGVy
cy4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjtmMTsiKTsKKyAg
ICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7ZjE7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0O2YxOyIpOworICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7ZjE7Iik7CisgICAgLy8gU2Ft
cGxpbmcgb3BzIGZvdW5kIGluIGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLgorICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMu
aW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZUN1YmUoc0MxO3ZmMzsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQg
YnkgT0VTX0VHTF9pbWFnZV9leHRlcm5hbC4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkQoMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigx
O3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmY0OyIp
OworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBBUkJfdGV4dHVyZV9yZWN0YW5nbGUu
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdCgxO3ZmMjsiKTsKKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmMzsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsiKTsKK30KKworLy8gRklY
TUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYnVp
bHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBjYW4gdmFyeSBiYXNlZCBv
biB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28sIHdlIHNob3VsZCByZXN0
cmljdCB0aG9zZSBhcyB3ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpl
bmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAg
IG1OdW1FcnJvcnMgPSAwOworCisgICAgLy8gRklYTUUobXZ1am92aWMpOiBUaGUgZGVwZW5kZW5j
eSBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBjYWxscyByaWdo
dCBub3csCisgICAgLy8gc28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0aGVtLgorICAgIHZhbGlk
YXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisKKyAgICAvLyBTdGFydGlu
ZyBmcm9tIGVhY2ggc2FtcGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGdl
bmVyYXRlIGFuIGVycm9yIGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBhIG5vZGUgd2hlcmUgc2Ft
cGxlciBkZXBlbmRlbnQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBmb3IgKFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luU2FtcGxlclN5bWJv
bHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5bWJvbHMoKTsKKyAgICAg
ICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCogc2FtcGxlclN5bWJvbCA9
ICppdGVyOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc2FtcGxlclN5bWJvbC0+
dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5k
ZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwor
ICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAg
ICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rp
b25DYWxsID0gKml0ZXI7CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rpb25DYWxsLT5nZXRJbnRl
cm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNhbGwgdG8gYSB1c2VyIGRl
ZmluZWQgZnVuY3Rpb24gaXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAgfQorfQorCit2b2lkIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUq
IG5vZGUpCit7CisgICAgKyttTnVtRXJyb3JzOworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJy
b3IpOworICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7Cit9CisKK2Jvb2wgUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNTYW1wbGluZ09wKGNvbnN0IFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWludGVybUZ1
bmN0aW9uQ2FsbC0+aXNVc2VyRGVmaW5lZCgpICYmCisgICAgICAgICAgIG1TYW1wbGluZ09wcy5m
aW5kKGludGVybUZ1bmN0aW9uQ2FsbC0+Z2V0TmFtZSgpKSAhPSBtU2FtcGxpbmdPcHMuZW5kKCk7
Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudChU
R3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIC8vIFRleHR1cmUgY2FjaGUgYWNjZXNz
IHRpbWUgbWlnaHQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisgICAgLy8gVGh1cywgd2Ug
cmVzdHJpY3Qgc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIGZyb20gYWZmZWN0aW5nIHRoZSBjb29y
ZGluYXRlIG9yIExPRCBiaWFzIG9mIGEKKyAgICAvLyBzYW1wbGluZyBvcGVyYXRpb24uCisgICAg
aWYgKGlzU2FtcGxpbmdPcChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKSkgewor
ICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSkgeworICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIC8vIFNlY29uZCBhcmd1bWVudCAoY29vcmQp
CisgICAgICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9u
Q2FsbCgpKTsKKyAgICAgICAgICAgICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRl
bnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgorICAgICAgICAgICAg
ICAgICAgICAgIDw8ICIgY29vcmRpbmF0ZSBhcmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlv
bi5cbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgLy8gVGhpcmQgYXJndW1lbnQgKGJpYXMpCisgICAgICAgICAgICAgICAgYmVn
aW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgICAg
ICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5v
dCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgYmlhcyBh
cmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZpcnN0IGFyZ3Vt
ZW50IChzYW1wbGVyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0aW9uKFRH
cmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIGJlZ2luRXJyb3Ioc2VsZWN0aW9uLT5n
ZXRJbnRlcm1TZWxlY3Rpb24oKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5k
ZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIGluIGEgY29uZGl0aW9uYWwgc3RhdGVt
ZW50LlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExv
b3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvb3AtPmdldEludGVybUxv
b3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxl
ciBpcyBub3QgcGVybWl0dGVkIGluIGEgbG9vcCBjb25kaXRpb24uXG4iOworfQorCit2b2lkIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxP
cCogbG9naWNhbE9wKQoreworICAgIGJlZ2luRXJyb3IobG9naWNhbE9wLT5nZXRJbnRlcm1Mb2dp
Y2FsT3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2Ft
cGxlciBpcyBub3QgcGVybWl0dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiBhIGxvZ2ljYWwg
IgorICAgICAgICAgIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQorICAgICAgICAgIDw8ICIg
b3BlcmF0b3IuXG4iOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkxNjVjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSw0MCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NI
QURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5U
X1NIQURFUl9USU1JTkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisj
aW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNz
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
IHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jh
c2UmIHNpbmspOworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5j
eUdyYXBoJiBncmFwaCk7CisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1F
cnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50
KiBwYXJhbWV0ZXIpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29w
KiBsb29wKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3ApOworCitwcml2YXRlOgorICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBUSW50
ZXJtTm9kZSogbm9kZSk7CisgICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
VXNhZ2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGJvb2wgaXNTYW1wbGlu
Z09wKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7CisK
KyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKworICAgIHR5
cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RyaW5nU2V0OworICAgIFN0cmluZ1NldCBtU2FtcGxp
bmdPcHM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVO
VF9TSEFERVJfVElNSU5HX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGM2Y2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDE3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5oIgorCit2b2lkIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIGlmIChJc1NhbXBsZXIobm9kZS0+Z2V0
QmFzaWNUeXBlKCkpKSB7CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgbVNpbmsucHJl
Zml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUo
KSk7CisgICAgICAgIG1TaW5rIDw8ICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBpbiB2ZXJ0
ZXggc2hhZGVycy5cbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YTA1
ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKQEAgLTAsMCArMSwzMyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9T
SEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhf
U0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNp
bmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZv
U2luay5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJ
bnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmsp
CisgICAgICAgICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50
IG51bUVycm9ycygpIHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2Um
IG1TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9U
SU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCmluZGV4IDZhNWNmZDMuLjBjYzBiOTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcApA
QCAtOTkyLDYgKzk5MiwyMiBAQCBib29sIERpc3BsYXk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgp
CiAgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhU
VVJFLCBEM0RGTVRfRFhUNSkpOwogfQogCisvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4dHVy
ZXMgaW4gRGlyZWN0M0Q5CisvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQgdG8g
ZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKKy8vIHNlZSBodHRwOi8vYXJh
cy1wLmluZm8vdGV4dHMvRDNEOUdQVUhhY2tzLmh0bWwKK2Jvb2wgRGlzcGxheTo6Z2V0RGVwdGhU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3Bs
YXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJy
ZW50RGlzcGxheU1vZGUpOworCisgICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRaKSk7
CisgICAgYm9vbCBudWxsID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRh
cHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAgICByZXR1cm4gaW50
eiAmJiBudWxsOworfQorCiBib29sIERpc3BsYXk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCiB7CiAgICAgRDNERElTUExBWU1PREUg
Y3VycmVudERpc3BsYXlNb2RlOwpAQCAtMTA4MSw3ICsxMDk3LDcgQEAgRDNEUE9PTCBEaXNwbGF5
OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAogICAgIHJldHVybiBEM0RQT09MX0RF
RkFVTFQ7CiB9CiAKLUQzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJh
YmxlKSBjb25zdAorRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkg
Y29uc3QKIHsKICAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQogICAgIHsKQEAgLTEwODksNyArMTEw
NSw3IEBAIEQzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBj
b25zdAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIXJlbmRlcmFibGUpCisg
ICAgICAgIGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJTCB8IEQzRFVTQUdFX1JF
TkRFUlRBUkdFVCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5B
R0VEOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5oCmluZGV4IDUwMjg0MzEuLjRmN2RiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCkBAIC03OCwxMCArNzgsMTEgQEAgY2xhc3MgRGlzcGxh
eQogICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CiAg
ICAgdmlydHVhbCBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldElu
c3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9v
bChib29sIHJlbmRlcmFibGUpIGNvbnN0OworICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJl
UG9vbChEV09SRCB1c2FnZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNl
TG9zdCgpOwogICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAppbmRleCAwN2FkM2NmLi4wMzhiMTY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKQEAgLTEs
NjM3ICsxLDY4MiBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5jcHA6IEltcGxl
bWVudHMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJm
YWNlCi0vLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFu
eSBiYWNrIGJ1ZmZlcnMuCi0vLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgPHRj
aGFyLmg+Ci0KLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgImxp
YkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgPGR3
bWFwaS5oPgotCi1uYW1lc3BhY2UgZWdsCi17Ci0KLW5hbWVzcGFjZQotewotY29uc3QgaW50IHZl
cnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKLWNvbnN0IGludCB2ZXJz
aW9uV2luZG93czcgPSBNQUtFV09SRCgweDAxLCAweDA2KTsKLQotLy8gUmV0dXJuIHRoZSB2ZXJz
aW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBvcmRl
cmluZwotLy8gY29tcGFyaXNvbi4KLWludCBnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkKLXsKLSAg
ICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigpOwotICAgIGludCBtYWpvclZlcnNpb24gPSBM
T0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKLSAgICBpbnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExP
V09SRCh2ZXJzaW9uKSk7Ci0gICAgcmV0dXJuIE1BS0VXT1JEKG1pbm9yVmVyc2lvbiwgbWFqb3JW
ZXJzaW9uKTsKLX0KLX0KLQotU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25z
dCBDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKSAKLSAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3co
d2luZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkK
LXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVRleHR1
cmVGb3JtYXQgPSBFR0xfTk9fVEVYVFVSRTsKLSAgICBtVGV4dHVyZVRhcmdldCA9IEVHTF9OT19U
RVhUVVJFOwotCi0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElT
UExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3Qg
cmF0aW8KLSAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVo
YXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0g
ICAgc2V0U3dhcEludGVydmFsKDEpOwotCi0gICAgc3ViY2xhc3NXaW5kb3coKTsKLX0KLQotU3Vy
ZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSEFO
RExFIHNoYXJlSGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGVudW0gdGV4
dHVyZUZvcm1hdCwgRUdMZW51bSB0ZXh0dXJlVHlwZSkKLSAgICA6IG1EaXNwbGF5KGRpc3BsYXkp
LCBtV2luZG93KE5VTEwpLCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRs
ZSksIG1XaWR0aCh3aWR0aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQoRUdMX0ZBTFNFKQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5j
aWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0
dXJlID0gTlVMTDsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgIG1UZXh0dXJl
ID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7Ci0gICAgbVRleHR1
cmVUYXJnZXQgPSB0ZXh0dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGlu
dCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1
YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZF
UjsKLSAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAgbVN3YXBJ
bnRlcnZhbCA9IC0xOwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQotU3VyZmFjZTo6flN1
cmZhY2UoKQotewotICAgIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxlYXNlKCk7Ci19Ci0K
LWJvb2wgU3VyZmFjZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtU3dhcENoYWluICYm
ICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAgICBpZiAoIXJlc2V0
U3dhcENoYWluKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNb2RpZnkgcHJlc2Vu
dCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQsCi0gICAg
Ly8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4g
b3VyIGNhbGxzIHRvCi0gICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBzY3JlZW4uCi0gICAg
aWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93
c1Zpc3RhKSkgewotICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBIUkVTVUxUIHJlc3Vs
dCA9IER3bUlzQ29tcG9zaXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwotICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBEV01fUFJFU0VOVF9Q
QVJBTUVURVJTIHByZXNlbnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJlc2VudFBhcmFtcywg
MCwgc2l6ZW9mKHByZXNlbnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUg
PSBzaXplb2YoRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHByZXNlbnRQYXJhbXMu
Y0J1ZmZlciA9IDI7Ci0KLSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMo
bVdpbmRvdywgJnByZXNlbnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgICAgRVJSKCJVbmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVyczogMHglMDhYIiwg
cmVzdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBT
dXJmYWNlOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAg
IG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2ls
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9m
ZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwot
ICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotfQotCi1ib29sIFN1cmZhY2U6OnJlc2V0
U3dhcENoYWluKCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm4g
cmVzZXRTd2FwQ2hhaW4obVdpZHRoLCBtSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBSRUNUIHdpbmRv
d1JlY3Q7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93
UmVjdCkpCi0gICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotCi0gICAgICAgIEVSUigiQ291
bGQgbm90IHJldHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKHdpbmRvd1JlY3Qucmln
aHQgLSB3aW5kb3dSZWN0LmxlZnQsIHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3Ap
OwotfQotCi1ib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgs
IGludCBiYWNrYnVmZmVySGVpZ2h0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSog
cHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQgJiYgbVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRh
cmdldCA9IG1SZW5kZXJUYXJnZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+QWRk
UmVmKCk7Ci0gICAgfQotCi0gICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1
cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwotICAgIC8vIGJl
Zm9yZSByZWFsbG9jYXRpbmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFz
IHBvc3NpYmxlLgotICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAgcmVs
ZWFzZSgpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0g
ezB9OwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0Q29t
cGFyYWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlzRDNk
OUV4RGV2aWNlKCk7Ci0KLSAgICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hpbmcg
d2hlbiByZXNpemluZyB3aW5kb3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNpZGUg
b2YgdGhlIFdNX1BBSU5UIGNhbGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2JsZW0g
aW4KLSAgICAvLyBzaW5nbGUgcHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vhcmx5
IG5vdGljZWFibGUgaW4gbXVsdGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVyZWZv
cmUsIGlmIHRoZSBjcmVhdG9yIHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAgICAv
LyB0aGUgY3VycmVudCBwcm9jZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdPUkQg
d2luZG93UElEOwotICAgIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2luZG93
UElEKTsKLSAgICBpZiAod2luZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAgICB7
Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMgaGFy
ZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhlciB0
aGUKLSAgICAvLyBkZXZpY2UgZm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3QgMzIt
Yml0LgotICAgIEhEQyBkZXZpY2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmljZUZv
cm1hdEJpdHMgPSBHZXREZXZpY2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0gICAg
UmVsZWFzZURDKDAsIGRldmljZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVyU2l6
ZSAhPSAzMiB8fCBkZXZpY2VGb3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNlRmxp
cEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMgYWx3
YXlzIFZTWU5DZWQKLSAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAgICAg
dXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVgg
ZG9lcyBub3QgcHJlc2VydmUgdGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1ZmZl
clN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5t
RGVwdGhTdGVuY2lsRm9ybWF0OwotICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2
ZW4gd2hlbiB3ZSB1c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguCi0gICAgLy8gV2UgZG8gdGhpcyBi
ZWNhdXNlIERpcmVjdFggZG9jcyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0
byAxCi0gICAgLy8gb3IgMi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNw
ZWN1bGF0ZSB0aGF0IGVpdGhlciBpdCBpcwotICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0
IHRlbGxpbmcgdXMsIG9yIGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0Ci0gICAgLy8gYmVo
aW5kIHRoZSBzY2VuZXMga25vd2luZyB0aGF0IHdlIGRvbid0IG5lZWQgbW9yZS4KLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdp
bmRvdyA9IGdldFdpbmRvd0hhbmRsZSgpOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9O
T05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJl
c2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFsOwotICAgIC8vIFVzZSBmbGlwRXgg
b24gV2luNyBvciBncmVhdGVyLgotICAgIGlmKHVzZUZsaXBFeCkKLSAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0ZMSVBFWDsKLSAgICBlbHNlCi0gICAg
ICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQg
PyBEM0RTV0FQRUZGRUNUX0NPUFkgOiBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLQotICAgIGlmIChtV2luZG93KQotICAg
IHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZw
cmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhB
TkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT5zaGFyZUhh
bmRsZVN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFu
ZGxlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1h
dCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7Ci0g
ICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVW
SUNFTE9TVCk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dh
cCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAg
IHJlbGVhc2UoKTsKLQotICAgICAgICAKLSAgICAgICAgaWYgKHByZXNlcnZlZFJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobVdpbmRvdykKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZm
ZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
aWYgKCFwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEludmFs
aWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAs
ICZtUmVuZGVyVGFyZ2V0KTsKLSAgICB9Ci0KLSAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0
KQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwg
MCwKLSAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlm
IChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlcldpZHRoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0
LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+
ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChwcmVzZXJ2ZWRSZW5kZXJU
YXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAg
ICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcHJlc2VydmVk
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUNvbmZpZy0+bURlcHRoU3Rl
bmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNp
bCwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKLQotICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2Fw
IGNoYWluOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgbVdpZHRoID0g
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOwotICAgIG1IZWlnaHQgPSBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0OwotCi0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5
ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93
SGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVdpbmRvdzsKLX0KLQotCi0jZGVmaW5lIGtTdXJmYWNl
UHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVyIikKLSNkZWZpbmUga1BhcmVudFduZFBy
b2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQotCi1zdGF0aWMgTFJFU1VMVCBD
QUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKLXsKLSAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkKLSAg
ewotICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFBy
b3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOwotICAgICAgaWYoc3VyZikKLSAgICAgIHsKLSAg
ICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgICAgfQotICB9
Ci0gIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQ
cm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7Ci0gIHJldHVybiBDYWxsV2luZG93UHJvYyhwcmV2
V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3BhcmFtLCBscGFyYW0pOwotfQotCi12b2lkIFN1cmZh
Y2U6OnN1YmNsYXNzV2luZG93KCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgRFdPUkQgcHJvY2Vzc0lkOwotICAgIERXT1JEIHRocmVh
ZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOwotICAg
IGlmIChwcm9jZXNzSWQgIT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpIHx8IHRocmVhZElkICE9IEdl
dEN1cnJlbnRUaHJlYWRJZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFNldExhc3RFcnJvcigwKTsKLSAgICBMT05HX1BUUiBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9u
Z1B0cihtV2luZG93LCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1
cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJv
cigpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBtV2luZG93U3ViY2xhc3NlZCA9
IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0UHJvcChtV2luZG93LCBr
U3VyZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNl
dFByb3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihv
bGRXbmRQcm9jKSk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSB0cnVlOwotfQotCi12b2lkIFN1
cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQotewotICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFzcwotICAg
IExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQ
cm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgd2luZG93
cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFzc2VydCBm
YWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRo
ZQotICAgIC8vIGh3bmQgYXMgd2VsbCBhbmQgZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0
cm95aW5nIGl0cyBFR0wgY29udGV4dC4gVGhlCi0gICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJl
IG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAg
IC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBF
R0wgY29udGV4dC4KLSAgICBpZihwYXJlbnRXbmRGdW5jKQotICAgIHsKLSAgICAgICAgTE9OR19Q
VFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywg
cGFyZW50V25kRnVuYyk7Ci0gICAgICAgIEFTU0VSVChwcmV2V25kRnVuYyA9PSByZWludGVycHJl
dF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93UHJvYykpOwotICAgIH0KLQotICAgIFJlbW92
ZVByb3AobVdpbmRvdywga1N1cmZhY2VQcm9wZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93
LCBrUGFyZW50V25kUHJvYyk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQot
Ym9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCi17Ci0gICAgUkVDVCBj
bGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50
KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBn
cm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0g
ICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50
IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6
ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0
SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkK
LSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQp
OwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdT
dXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsTWFrZUN1cnJlbnQo
Z2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJy
ZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1EV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50
ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0g
ICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAg
IGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiBy
ZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9J
TlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotfQotCi1ib29sIFN1cmZhY2U6
OnN3YXAoKQotewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbURpc3BsYXkt
PmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVz
ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0KLSAgICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKEVH
TGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlm
ICh4IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgZmFsc2UpOwotICAgIH0KLQotICAg
IGlmICghbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCi0gICAgewotICAgICAgICAvLyBTcGVjIGlz
IG5vdCBjbGVhciBhYm91dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBt
RGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0g
ICAgICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwKLSAgICAgICAgICAgIHggKyB3aWR0
aCwgbUhlaWdodCAtIHkKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IG1X
aWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IG1XaWR0aDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IG1IZWlnaHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJlY3QuYm90dG9tID0gbUhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChyZWN0LmxlZnQgPT0gcmVjdC5yaWdodCB8fCByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBO
VUxMLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5U
RVJOQUxFUlJPUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X0RFVklDRUxPU1QgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VIVU5HIHx8IHJlc3VsdCA9PSBE
M0RFUlJfREVWSUNFUkVNT1ZFRCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9DT05URVhUX0xPU1QsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4o
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmdldFdp
ZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdpZHRoOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6
Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQotRUdMaW50IFN1
cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Q
b3N0U3ViQnVmZmVyU3VwcG9ydGVkOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6
Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0OwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2ls
KCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5j
aWwtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1J
RGlyZWN0M0RUZXh0dXJlOSAqU3VyZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAg
aWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUt
PkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQot
dm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlm
IChtU3dhcEludGVydmFsID09IGludGVydmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBtU3dhcEludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWF4KG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwo
KSk7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5
LT5nZXRNYXhTd2FwSW50ZXJ2YWwoKSk7Ci0KLSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVy
dEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRy
dWU7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlRm9ybWF0OwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1
cmVUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9p
ZCBTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAg
ICBtVGV4dHVyZSA9IHRleHR1cmU7Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJv
dW5kVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JN
QVQgU3VyZmFjZTo6Z2V0Rm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJl
bmRlclRhcmdldEZvcm1hdDsKLX0KLX0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlDQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFN1
cmZhY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGlu
ZyBhIGRyYXdpbmcgc3VyZmFjZQ0KKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2lu
ZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4NCisvLyBJbXBsZW1lbnRzIEVHTFN1cmZh
Y2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2Ug
My4NCisNCisjaW5jbHVkZSA8dGNoYXIuaD4NCisNCisjaW5jbHVkZSAibGliRUdML1N1cmZhY2Uu
aCINCisNCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9U
ZXh0dXJlLmgiDQorDQorI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiDQorI2luY2x1ZGUgImxpYkVH
TC9EaXNwbGF5LmgiDQorDQorI2luY2x1ZGUgPGR3bWFwaS5oPg0KKw0KK25hbWVzcGFjZSBlZ2wN
Cit7DQorDQorbmFtZXNwYWNlDQorew0KK2NvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0g
TUFLRVdPUkQoMHgwMCwgMHgwNik7DQorY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VX
T1JEKDB4MDEsIDB4MDYpOw0KKw0KKy8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0
aW5nIHN5c3RlbSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcNCisvLyBjb21wYXJp
c29uLg0KK2ludCBnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkNCit7DQorICAgIERXT1JEIHZlcnNp
b24gPSBHZXRWZXJzaW9uKCk7DQorICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JE
KHZlcnNpb24pKTsNCisgICAgaW50IG1pbm9yVmVyc2lvbiA9IEhJQllURShMT1dPUkQodmVyc2lv
bikpOw0KKyAgICByZXR1cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOw0K
K30NCit9DQorDQorU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25m
aWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAN
CisgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRv
dyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpDQorew0K
KyAgICBtU3dhcENoYWluID0gTlVMTDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBt
RGVwdGhTdGVuY2lsID0gTlVMTDsNCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1P
ZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCisgICAg
bVRleHR1cmUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJFOw0K
KyAgICBtVGV4dHVyZVRhcmdldCA9IEVHTF9OT19URVhUVVJFOw0KKw0KKyAgICBtUGl4ZWxBc3Bl
Y3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1F
OiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVyQnVmZmVy
ID0gRUdMX0JBQ0tfQlVGRkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVT
RVJWRUQ7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVydmFsKDEp
Ow0KKw0KKyAgICBzdWJjbGFzc1dpbmRvdygpOw0KK30NCisNCitTdXJmYWNlOjpTdXJmYWNlKERp
c3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUs
IEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xl
bnVtIHRleHR1cmVUeXBlKQ0KKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwp
LCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0
aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQ0K
K3sNCisgICAgbVN3YXBDaGFpbiA9IE5VTEw7DQorICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFs
c2U7DQorICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0dXJl
Rm9ybWF0Ow0KKyAgICBtVGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOw0KKw0KKyAgICBtUGl4
ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8v
IEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbw0KKyAgICBtUmVuZGVy
QnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOw0KKyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZF
Ul9QUkVTRVJWRUQ7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsNCisgICAgc2V0U3dhcEludGVy
dmFsKDEpOw0KK30NCisNCitTdXJmYWNlOjp+U3VyZmFjZSgpDQorew0KKyAgICB1bnN1YmNsYXNz
V2luZG93KCk7DQorICAgIHJlbGVhc2UoKTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjppbml0aWFs
aXplKCkNCit7DQorICAgIEFTU0VSVCghbVN3YXBDaGFpbiAmJiAhbU9mZnNjcmVlblRleHR1cmUg
JiYgIW1EZXB0aFN0ZW5jaWwpOw0KKw0KKyAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkpDQorICAg
ICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZv
ciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQsDQorICAgIC8vIHRvIG1pbmltaXpl
IHRoZSBhbW91bnQgb2YgcXVldWluZyBkb25lIGJ5IERXTSBiZXR3ZWVuIG91ciBjYWxscyB0bw0K
KyAgICAvLyBwcmVzZW50IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4NCisgICAgaWYgKG1XaW5kb3cg
JiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgew0K
KyAgICAgIEJPT0wgaXNDb21wb3NpdGVkOw0KKyAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXND
b21wb3NpdGlvbkVuYWJsZWQoJmlzQ29tcG9zaXRlZCk7DQorICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpICYmIGlzQ29tcG9zaXRlZCkgew0KKyAgICAgICAgRFdNX1BSRVNFTlRfUEFSQU1FVEVS
UyBwcmVzZW50UGFyYW1zOw0KKyAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXpl
b2YocHJlc2VudFBhcmFtcykpOw0KKyAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXpl
b2YoRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyk7DQorICAgICAgICBwcmVzZW50UGFyYW1zLmNCdWZm
ZXIgPSAyOw0KKw0KKyAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdp
bmRvdywgJnByZXNlbnRQYXJhbXMpOw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAg
ICAgICAgICBFUlIoIlVuYWJsZSB0byBzZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCBy
ZXN1bHQpOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQor
dm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkNCit7DQorICAgIGlmIChtU3dhcENoYWluKQ0KKyAgICB7
DQorICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7DQorICAgICAgICBtU3dhcENoYWluID0g
TlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobUJhY2tCdWZmZXIpDQorICAgIHsNCisgICAgICAg
IG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7DQorICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQor
ICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0
aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAg
ICB9DQorDQorICAgIGlmIChtUmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBtUmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAg
fQ0KKw0KKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1PZmZz
Y3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5V
TEw7DQorICAgIH0NCisNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtVGV4
dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7DQorICAgICAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAg
IH0NCisNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpy
ZXNldFN3YXBDaGFpbigpDQorew0KKyAgICBpZiAoIW1XaW5kb3cpDQorICAgIHsNCisgICAgICAg
IHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOw0KKyAgICB9DQorDQorICAg
IFJFQ1Qgd2luZG93UmVjdDsNCisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRs
ZSgpLCAmd2luZG93UmVjdCkpDQorICAgIHsNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorDQor
ICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSB0aGUgd2luZG93IGRpbWVuc2lvbnMiKTsN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmVzZXRTd2Fw
Q2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0
b20gLSB3aW5kb3dSZWN0LnRvcCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hh
aW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpDQorew0KKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7DQorDQorICAg
IGlmIChkZXZpY2UgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICB9DQorDQorICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBz
eXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMNCisgICAgLy8gYmVmb3JlIHJl
YWxsb2NhdGluZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2li
bGUuDQorICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7DQorDQorICAgIEQzRFBS
RVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsNCisgICAgSFJFU1VMVCBy
ZXN1bHQ7DQorDQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0Ow0KKyAgICAvLyBXZSBzZXQgQmFja0J1ZmZl
ckNvdW50ID0gMSBldmVuIHdoZW4gd2UgdXNlIEQzRFNXQVBFRkZFQ1RfRkxJUEVYLg0KKyAgICAv
LyBXZSBkbyB0aGlzIGJlY2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVy
IHRvIHNldCB0aGlzIHRvIDENCisgICAgLy8gb3IgMi4gVGhlIHJ1bnRpbWUgc2VlbXMgdG8gYWNj
ZXB0IDEsIHNvIHdlIHNwZWN1bGF0ZSB0aGF0IGVpdGhlciBpdCBpcw0KKyAgICAvLyBmb3JjaW5n
IGl0IHRvIDIgd2l0aG91dCB0ZWxsaW5nIHVzLCBvciBiZXR0ZXIsIGRvaW5nIHNvbWV0aGluZyBz
bWFydA0KKyAgICAvLyBiZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVl
ZCBtb3JlLg0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOw0KKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gbUNvbmZpZy0+bVJlbmRlclRh
cmdldEZvcm1hdDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNp
bCA9IEZBTFNFOw0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7DQorICAgIHByZXNl
bnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBnZXRXaW5kb3dIYW5kbGUoKTsNCisgICAgcHJl
c2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVW5pbXBsZW1lbnRlZA0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkDQor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gbVByZXNlbnRJbnRl
cnZhbDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1Rf
RElTQ0FSRDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOw0KKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7DQorICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0Ow0K
Kw0KKyAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBm
b3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUNCisgICAgLy8gb2xkIHJlbmRlciB0
YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250
ZW50cy4NCisgICAgaWYgKG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2FwQ2hhaW4t
PlJlbGVhc2UoKTsNCisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQorDQorICAg
IGlmIChtQmFja0J1ZmZlcikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2Uo
KTsNCisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobU9m
ZnNjcmVlblRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxl
YXNlKCk7DQorICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7DQorICAgIH0NCisNCisg
ICAgaWYgKG1EZXB0aFN0ZW5jaWwpDQorICAgIHsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJl
bGVhc2UoKTsNCisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAgICB9DQorDQorICAg
IG1TaGFyZUhhbmRsZSA9IE5VTEw7DQorICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsN
CisgICAgaWYgKCFtV2luZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQ0K
KyAgICB7DQorICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOw0KKyAgICB9DQor
DQorICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQz
RFVTQUdFX1JFTkRFUlRBUkdFVCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1P
ZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
DQorICAgIHsNCisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVy
ZTogJTA4bFgiLCByZXN1bHQpOw0KKyAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAgaWYo
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0Ow0KKw0K
KyAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVu
ZGVyVGFyZ2V0KTsNCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgaWYg
KG9sZFJlbmRlclRhcmdldCkNCisgICAgew0KKyAgICAgICAgUkVDVCByZWN0ID0NCisgICAgICAg
IHsNCisgICAgICAgICAgICAwLCAwLA0KKyAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodA0KKyAg
ICAgICAgfTsNCisNCisgICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4o
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9ORz4o
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgcmVjdC5ib3R0b20gPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0Ow0K
KyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsNCisNCisgICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0K
KyAgICB9DQorDQorICAgIGlmIChtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3
YXBDaGFpbik7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8
IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2Vz
OiAlMDhsWCIsIHJlc3VsdCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAg
ICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmVzdWx0ID0g
bVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1C
YWNrQnVmZmVyKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0N
CisNCisgICAgaWYgKG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05P
V04pDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1h
dCwgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsNCisNCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
IHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOw0KKw0KKyAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46
IDB4JTA4WCIsIHJlc3VsdCk7DQorICAgICAgICAgICAgcmVsZWFzZSgpOw0KKw0KKyAgICAgICAg
ICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOw0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIG1XaWR0
aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsNCisgICAgbUhlaWdodCA9IHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2
YWxEaXJ0eSA9IGZhbHNlOw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBTdXJmYWNl
Ojpzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdo
dCkNCit7DQorICAgIGlmICghbVN3YXBDaGFpbikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRy
dWU7DQorICAgIH0NCisNCisgICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkNCisgICAgew0KKyAg
ICAgICAgd2lkdGggPSBtV2lkdGggLSB4Ow0KKyAgICB9DQorDQorICAgIGlmICh5ICsgaGVpZ2h0
ID4gbUhlaWdodCkNCisgICAgew0KKyAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7DQorICAg
IH0NCisNCisgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApDQorICAgIHsNCisgICAg
ICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxp
bmUgb3BlcmF0aW9ucw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEQzRFpCX0ZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9E
RSwgRDNERklMTF9TT0xJRCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQ
SEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09M
T1JXUklURUVOQUJMRV9SRUQpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NS
R0JXUklURUVOQUJMRSwgRkFMU0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7DQorICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIo
TlVMTCk7DQorICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKw0KKyAgICBkZXZp
Y2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7DQorICAgIGRldmljZS0+U2V0RGVw
dGhTdGVuY2lsU3VyZmFjZShOVUxMKTsNCisNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1P
ZmZzY3JlZW5UZXh0dXJlKTsNCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICBkZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOw0KKyAgICBk
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElT
QUJMRSk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVS
LCBEM0RURVhGX1BPSU5UKTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOw0KKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7DQorICAgIGRldmljZS0+
U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsN
CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsNCisNCisg
ICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0gezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwg
MS4wZn07DQorICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsNCisNCisgICAgZmxv
YXQgeDEgPSB4IC0gMC41ZjsNCisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkgLSBoZWlnaHQp
IC0gMC41ZjsNCisgICAgZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7DQorICAgIGZsb2F0
IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7DQorDQorICAgIGZsb2F0IHUxID0geCAvIGZsb2F0
KG1XaWR0aCk7DQorICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOw0KKyAgICBmbG9h
dCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsNCisgICAgZmxvYXQgdjIgPSAoeSAr
IGhlaWdodCkgLyBmbG9hdChtSGVpZ2h0KTsNCisNCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7
eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4
MiwgeTEsIDAuMGYsIDEuMGYsIHUyLCB2Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gy
LCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEs
IHkyLCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYNCisNCisg
ICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsNCisgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAo
RDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsNCisgICAgbURp
c3BsYXktPmVuZFNjZW5lKCk7DQorDQorICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsN
CisNCisgICAgUkVDVCByZWN0ID0NCisgICAgew0KKyAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBo
ZWlnaHQsDQorICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5DQorICAgIH07DQorDQorICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEws
IE5VTEwsIDApOw0KKw0KKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29udGV4dCgpKTsNCisgICAgaWYgKGNvbnRleHQpDQor
ICAgIHsNCisgICAgICAgIGNvbnRleHQtPm1hcmtBbGxTdGF0ZURpcnR5KCk7DQorICAgIH0NCisN
CisgICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIG1E
aXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAg
IH0NCisNCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJS
T1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
DQorICAgIH0NCisNCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgY2hl
Y2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsNCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0K
K0hXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkNCit7DQorICAgIHJldHVybiBtV2luZG93
Ow0KK30NCisNCisNCisjZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFj
ZU93bmVyIikNCisjZGVmaW5lIGtQYXJlbnRXbmRQcm9jIF9URVhUKCJFZ2w6OlN1cmZhY2VQYXJl
bnRXbmRQcm9jIikNCisNCitzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJv
YyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkN
Cit7DQorICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQ0KKyAgew0KKyAgICAgIFN1cmZhY2UqIHN1
cmYgPSByZWludGVycHJldF9jYXN0PFN1cmZhY2UqPihHZXRQcm9wKGh3bmQsIGtTdXJmYWNlUHJv
cGVydHkpKTsNCisgICAgICBpZihzdXJmKQ0KKyAgICAgIHsNCisgICAgICAgICAgc3VyZi0+Y2hl
Y2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsNCisgICAgICB9DQorICB9DQorICBXTkRQUk9DIHBy
ZXZXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DID4oR2V0UHJvcChod25kLCBrUGFy
ZW50V25kUHJvYykpOw0KKyAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25k
LCBtZXNzYWdlLCB3cGFyYW0sIGxwYXJhbSk7DQorfQ0KKw0KK3ZvaWQgU3VyZmFjZTo6c3ViY2xh
c3NXaW5kb3coKQ0KK3sNCisgICAgaWYgKCFtV2luZG93KQ0KKyAgICB7DQorICAgICAgICByZXR1
cm47DQorICAgIH0NCisNCisgICAgRFdPUkQgcHJvY2Vzc0lkOw0KKyAgICBEV09SRCB0aHJlYWRJ
ZCA9IEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmcHJvY2Vzc0lkKTsNCisgICAg
aWYgKHByb2Nlc3NJZCAhPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0
Q3VycmVudFRocmVhZElkKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0K
KyAgICBTZXRMYXN0RXJyb3IoMCk7DQorICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5k
b3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BU
Uj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsNCisgICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExh
c3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpDQorICAgIHsNCisgICAgICAgIG1XaW5kb3dTdWJj
bGFzc2VkID0gZmFsc2U7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgU2V0UHJv
cChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhp
cykpOw0KKyAgICBTZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jLCByZWludGVycHJldF9j
YXN0PEhBTkRMRT4ob2xkV25kUHJvYykpOw0KKyAgICBtV2luZG93U3ViY2xhc3NlZCA9IHRydWU7
DQorfQ0KKw0KK3ZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygpDQorew0KKyAgICBpZigh
bVdpbmRvd1N1YmNsYXNzZWQpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0K
KyAgICAvLyB1bi1zdWJjbGFzcw0KKyAgICBMT05HX1BUUiBwYXJlbnRXbmRGdW5jID0gcmVpbnRl
cnByZXRfY2FzdDxMT05HX1BUUj4oR2V0UHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYykpOw0K
Kw0KKyAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJv
Yy4NCisgICAgLy8gSWYgdGhpcyBhc3NlcnQgZmFpbHMsIHRoZW4gaXQgaXMgbGlrZWx5IHRoZSBh
cHBsaWNhdGlvbiBoYXMgc3ViY2xhc3NlZCB0aGUNCisgICAgLy8gaHduZCBhcyB3ZWxsIGFuZCBk
aWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBUaGUN
CisgICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFz
cyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQ0KKyAgICAvLyBFR0wgY29udGV4dCwgb3IgdG8gdW5z
dWJjbGFzcyBiZWZvcmUgZGVzdHJveWluZyB0aGUgRUdMIGNvbnRleHQuDQorICAgIGlmKHBhcmVu
dFduZEZ1bmMpDQorICAgIHsNCisgICAgICAgIExPTkdfUFRSIHByZXZXbmRGdW5jID0gU2V0V2lu
ZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0MsIHBhcmVudFduZEZ1bmMpOw0KKyAgICAg
ICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZh
Y2VXaW5kb3dQcm9jKSk7DQorICAgIH0NCisNCisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3Vy
ZmFjZVByb3BlcnR5KTsNCisgICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7
DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6
Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQ0KK3sNCisgICAgUkVDVCBjbGllbnQ7DQorICAg
IGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpDQorICAgIHsN
CisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0N
CisNCisgICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24u
IFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLg0KKyAgICBp
bnQgY2xpZW50V2lkdGggPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsNCisgICAgaW50IGNs
aWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOw0KKyAgICBib29sIHNpemVE
aXJ0eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhl
aWdodCgpOw0KKw0KKyAgICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkN
CisgICAgew0KKyAgICAgICAgcmVzZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdo
dCk7DQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERy
YXdTdXJmYWNlKCkpID09IHRoaXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2xNYWtlQ3Vy
cmVudChnbEdldEN1cnJlbnRDb250ZXh0KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdl
dEN1cnJlbnREaXNwbGF5KCkpLCB0aGlzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVy
biB0cnVlOw0KKyAgICB9DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQorRFdPUkQgU3VyZmFj
ZTo6Y29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkNCit7DQorICAgIHN3aXRjaChpbnRl
cnZhbCkNCisgICAgew0KKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxf
SU1NRURJQVRFOw0KKyAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05F
Ow0KKyAgICAgIGNhc2UgMjogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOw0KKyAgICAg
IGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7DQorICAgICAgY2FzZSA0
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVG
QVVMVDsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpzd2FwKCkNCit7DQorICAgIHJldHVybiBzd2Fw
UmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOw0KK30NCisNCitib29sIFN1cmZhY2U6OnBvc3RT
dWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQp
DQorew0KKyAgICBpZiAoIW1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQ0KKyAgICB7DQorICAgICAg
ICAvLyBTcGVjIGlzIG5vdCBjbGVhciBhYm91dCBob3cgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4N
CisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gc3dhcFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRXaWR0
aCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVdpZHRoOw0KK30NCisNCitFR0xpbnQgU3VyZmFj
ZTo6Z2V0SGVpZ2h0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtSGVpZ2h0Ow0KK30NCisNCitF
R0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsNCit9DQorDQorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQo
KQ0KK3sNCisgICAgaWYgKG1SZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJU
YXJnZXQtPkFkZFJlZigpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0Ow0K
K30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlN1
cmZhY2U6OmdldERlcHRoU3RlbmNpbCgpDQorew0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisg
ICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAg
cmV0dXJuIG1EZXB0aFN0ZW5jaWw7DQorfQ0KKw0KK0lEaXJlY3QzRFRleHR1cmU5ICpTdXJmYWNl
OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkNCit7DQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkN
CisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOw0KKyAgICB9DQor
DQorICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpz
ZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQ0KK3sNCisgICAgaWYgKG1Td2FwSW50ZXJ2
YWwgPT0gaW50ZXJ2YWwpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICAN
CisgICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOw0KKyAgICBtU3dhcEludGVydmFsID0gc3Rk
OjptYXgobVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsNCisg
ICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRN
YXhTd2FwSW50ZXJ2YWwoKSk7DQorDQorICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50
ZXJ2YWwobVN3YXBJbnRlcnZhbCk7DQorICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7
DQorfQ0KKw0KK0VHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVRleHR1cmVGb3JtYXQ7DQorfQ0KKw0KK0VHTGVudW0gU3VyZmFjZTo6Z2V0
VGV4dHVyZVRhcmdldCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1cmVUYXJnZXQ7DQor
fQ0KKw0KK3ZvaWQgU3VyZmFjZTo6c2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUpDQorew0KKyAgICBtVGV4dHVyZSA9IHRleHR1cmU7DQorfQ0KKw0KK2dsOjpUZXh0dXJlMkQg
KlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleHR1
cmU7DQorfQ0KKw0KK0QzREZPUk1BVCBTdXJmYWNlOjpnZXRGb3JtYXQoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7DQorfQ0KK30NCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCmluZGV4IDM1MjYwZGUuLjQw
YmQ3MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5o
CkBAIC02OSw2ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxh
eTsKICAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptQmFja0J1ZmZlcjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNp
bDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsKICAgICBJRGlyZWN0M0RU
ZXh0dXJlOSogbU9mZnNjcmVlblRleHR1cmU7CkBAIC03OCw2ICs3OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdWJjbGFzc1dpbmRvdygpOwogICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOwog
ICAgIGJvb2wgcmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZm
ZXJIZWlnaHQpOworICAgIGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQg
d2lkdGgsIEVHTGludCBoZWlnaHQpOwogICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwo
RUdMaW50IGludGVydmFsKTsKIAogICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAv
LyBXaW5kb3cgdGhhdCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAppbmRleCA0YjdmOWUxLi41MDg5ZDJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCkBA
IC0xMTA4LDYgKzExMDgsMTEgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUG9zdFN1YkJ1ZmZl
ck5WKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGkKIAogICAgIHRyeQog
ICAgIHsKKyAgICAgICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVU
RVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKwogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogICAgICAgICBlZ2w6OlN1cmZh
Y2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAK
aW5kZXggNjZjZDVjMC4uMWI0NjY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCkBAIC0xLDQyNzYgKzEsNDMzOSBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0
IGNsYXNzLCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcKLS8vIHJlbmRlcmlu
ZyBvcGVyYXRpb25zLiBJdCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
RUdMQ29udGV4dC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0j
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
cGhhVGV4dHVyZVN1cHBvcnQoKTsKLQotICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMgPSBt
RGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7Ci0KLSAgICAgICAgbU51bUNv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0
dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXRzICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0g
MTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwotICAgICAgICBpbml0UmVu
ZGVyZXJTdHJpbmcoKTsKLQotICAgICAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAgICAgICAg
bVN0YXRlLnZpZXdwb3J0WSA9IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3Vy
ZmFjZS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gc3VyZmFj
ZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICAgICAg
bVN0YXRlLnNjaXNzb3JZID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZh
Y2UtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+
Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9i
amVjdHMgYW5kIGFzc2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFtZXMKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVmYXVsdFJlbmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOwot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBzdXJmYWNlLT5nZXREZXB0aFN0
ZW5jaWwoKTsKLQotICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3Ji
dWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0
aFN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwp
OwotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVm
ZmVyKGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7Ci0KLSAgICBzZXRG
cmFtZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKLQotICAgIGlmIChkZWZhdWx0UmVuZGVy
VGFyZ2V0KQotICAgIHsKLSAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwot
ICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5j
aWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0K
LQotLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBhbGwgb2YgdGhlIHN0YXRlLXJlbGF0ZWQgZGly
dHkgZmxhZ3MsIHNvIHRoYXQgYWxsIHN0YXRlIGlzIHNldCBkdXJpbmcgbmV4dCBwcmUtZHJhdy4K
LXZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IHQgPSAw
OyB0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBs
aWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0ID0gMDsg
dCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHQrKykKLSAgICB7Ci0gICAg
ICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTW3RdID0gMDsKLSAgICB9Ci0KLSAgICBtQXBwbGll
ZFByb2dyYW1TZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsK
LSAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1EZXB0aFN0
ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFs
c2U7Ci0gICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgbVZl
cnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsKLQotICAgIG1DbGVhclN0YXRl
RGlydHkgPSB0cnVlOwotICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURlcHRoU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Q
b2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURpdGhlclN0YXRlRGly
dHkgPSB0cnVlOwotICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7Ci0gICAgbUR4VW5pZm9ybXNE
aXJ0eSA9IHRydWU7Ci0gICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKLX0KLQotdm9p
ZCBDb250ZXh0OjptYXJrQ29udGV4dExvc3QoKQotewotICAgIGlmIChtUmVzZXRTdHJhdGVneSA9
PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKQotICAgICAgICBtUmVzZXRTdGF0dXMgPSBH
TF9VTktOT1dOX0NPTlRFWFRfUkVTRVRfRVhUOwotICAgIG1Db250ZXh0TG9zdCA9IHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpCi17Ci0gICAgcmV0dXJuIG1Db250ZXh0
TG9zdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQg
Z3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQotewotICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkID0gcmVkOwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVl
bjsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOwotICAgIG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuYWxwaGEgPSBhbHBoYTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVh
ckRlcHRoKGZsb2F0IGRlcHRoKQotewotICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0
aDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCi17Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNpbDsKLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAh
PSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKLSAg
ICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYg
KG1TdGF0ZS5jdWxsTW9kZSAhPSBtb2RlKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmN1bGxNb2Rl
ID0gbW9kZTsKLSAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCkKLXsKLSAgICBpZiAobVN0YXRl
LmZyb250RmFjZSAhPSBmcm9udCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBm
cm9udDsKLSAgICAgICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmRl
cHRoVGVzdCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVu
YWJsZWQ7Ci0gICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9v
bCBDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3Rh
dGUuZGVwdGhUZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVw
dGhGdW5jKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7Ci0gICAgICAgIG1EZXB0aFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdl
KGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKQotewotICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOwot
ICAgIG1TdGF0ZS56RmFyID0gekZhcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29s
IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmJsZW5kOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5k
RmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFs
cGhhLCBHTGVudW0gZGVzdEFscGhhKQotewotICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0Ig
IT0gc291cmNlUkdCIHx8Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJj
ZUFscGhhIHx8Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAotICAg
ICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLnNvdXJjZUJsZW5kUkdCID0gc291cmNlUkdCOwotICAgICAgICBtU3RhdGUuZGVzdEJs
ZW5kUkdCID0gZGVzdFJHQjsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3Vy
Y2VBbHBoYTsKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOwotICAg
ICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBpZiAobVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAotICAgICAg
ICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuYmxl
bmRDb2xvci5ibHVlICE9IGJsdWUgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEg
IT0gYWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmJsdWUgPSBibHVlOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9
IGFscGhhOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBh
bHBoYUVxdWF0aW9uKQotewotICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JF
cXVhdGlvbiB8fAotICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1
YXRpb24pCi0gICAgewotICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0
aW9uOwotICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsK
LSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5j
aWxUZXN0ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBl
bmFibGVkOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ym9vbCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdGF0ZS5zdGVuY2lsVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1z
KEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNr
KQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gc3RlbmNpbFJlZiB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbE1hc2sgIT0gc3RlbmNpbE1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1
bmMgPSBzdGVuY2lsRnVuYzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJl
ZiA+IDApID8gc3RlbmNpbFJlZiA6IDA7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0
ZW5jaWxNYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tG
dW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKLXsKLSAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAgIG1T
dGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKLSAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6
IDA7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7Ci0g
ICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCi17Ci0gICAg
aWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCi0gICAgewot
ICAgICAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKLXsK
LSAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVt
YXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNp
bEJhY2tXcml0ZW1hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
fQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2ls
RmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAot
ICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZh
aWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNz
RGVwdGhQYXNzKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZh
aWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVw
dGhGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFz
c0RlcHRoUGFzczsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2ls
QmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0g
c3RlbmNpbEJhY2tGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZh
aWwgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzczsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQot
ewotICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1Qb2x5
Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6Omlz
UG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBv
bHlnb25PZmZzZXRGaWxsOwotCi19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBh
cmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAobVN0YXRlLnBv
bHlnb25PZmZzZXRGYWN0b3IgIT0gZmFjdG9yIHx8Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0VW5pdHMgIT0gdW5pdHMpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZh
Y3RvciA9IGZhY3RvcjsKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRz
OwotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewot
ICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAg
bVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1Nh
bXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUu
c2FtcGxlQWxwaGFUb0NvdmVyYWdlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVy
YWdlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVu
YWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOwot
ICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRl
eHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRl
LnNhbXBsZUNvdmVyYWdlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFy
YW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgIT0gdmFsdWUgfHwKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
SW52ZXJ0ICE9IGludmVydCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZh
bHVlID0gdmFsdWU7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVy
dDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5z
Y2lzc29yVGVzdCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0
ID0gZW5hYmxlZDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3RhdGUuc2Npc3NvclRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLmRpdGhlciA9IGVuYWJsZWQ7Ci0gICAgICAgIG1EaXRoZXJTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsKLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKLXsKLSAgICBtU3RhdGUubGluZVdpZHRoID0gd2lk
dGg7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50
KQotewotICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OwotfQotCi12b2lkIENv
bnRleHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpCi17Ci0g
ICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50OwotICAgIC8vIFRP
RE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3Jp
dGUKLSAgICAvLyBkZHgsIGRkeF9jb2Fyc2UsIG9yIGRkeF9maW5lIGRlcGVuZGluZyBvbiB0aGUg
aGludC4KLSAgICAvLyBJZ25vcmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9yIGltcGxlbWVudGF0
aW9ucyB0byBpZ25vcmUgaGludC4KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWaWV3cG9ydFBhcmFt
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtU3RhdGUudmlld3BvcnRYID0geDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0geTsKLSAgICBt
U3RhdGUudmlld3BvcnRXaWR0aCA9IHdpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9
IGhlaWdodDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChtU3RhdGUu
c2Npc3NvclggIT0geCB8fCBtU3RhdGUuc2Npc3NvclkgIT0geSB8fCAKLSAgICAgICAgbVN0YXRl
LnNjaXNzb3JXaWR0aCAhPSB3aWR0aCB8fCBtU3RhdGUuc2Npc3NvckhlaWdodCAhPSBoZWlnaHQp
Ci0gICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclggPSB4OwotICAgICAgICBtU3RhdGUuc2Np
c3NvclkgPSB5OwotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gd2lkdGg7Ci0gICAgICAg
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Npc3NvclN0YXRlRGly
dHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCBy
ZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICBpZiAobVN0YXRl
LmNvbG9yTWFza1JlZCAhPSByZWQgfHwgbVN0YXRlLmNvbG9yTWFza0dyZWVuICE9IGdyZWVuIHx8
Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFz
a0FscGhhICE9IGFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHJl
ZDsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tCbHVlID0gYmx1ZTsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0g
YWxwaGE7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OnNldERlcHRoTWFzayhib29sIG1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0
aE1hc2sgIT0gbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSBtYXNrOwot
ICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpCi17Ci0gICAgbVN0YXRlLmFj
dGl2ZVNhbXBsZXIgPSBhY3RpdmU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZWFkRnJhbWVi
dWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucmVhZEZyYW1lYnVmZmVy
OwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRl
eHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5y
ZW5kZXJidWZmZXIuaWQoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFu
ZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7Ci19Ci0K
LUdMdWludCBDb250ZXh0OjpnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAotewot
ICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBx
dWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURd
LmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1
ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0
LT5pZCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
aW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotY29uc3QgVmVydGV4
QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtKQotewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7Ci19Ci0KLWNv
bnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0
dHJpYk51bSkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1Qb2ludGVyOwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmQ29udGV4
dDo6Z2V0VmVydGV4QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1l
bnQpCi17Ci0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50
IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUu
cGFja0FsaWdubWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xp
bnQgYWxpZ25tZW50KQotewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
Ci19Ci0KLUdMaW50IENvbnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UGFj
a1JldmVyc2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcikKLXsKLSAgICBtU3RhdGUucGFj
a1JldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKLX0KLQotYm9vbCBDb250ZXh0Ojpn
ZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tS
ZXZlcnNlUm93T3JkZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewot
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotR0x1aW50
IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2Vy
LT5jcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xl
bnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNoYWRlcih0
eXBlKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0
OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZm
ZXIgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBHTHVp
bnQgaGFuZGxlID0gbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAg
ICBtRnJhbWVidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwot
fQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2UoKQotewotICAgIEdMdWludCBoYW5kbGUg
PSBtRmVuY2VIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GZW5jZU1hcFtoYW5k
bGVdID0gbmV3IEZlbmNlKG1EaXNwbGF5KTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8v
IFJldHVybnMgYW4gdW51c2VkIHF1ZXJ5IG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVRdWVy
eSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0
ZSgpOwotCi0gICAgbVF1ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRs
ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAg
ICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAg
ICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdl
ci0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVy
KEdMdWludCBzaGFkZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKHNo
YWRlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkK
LXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgIG1D
YWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlVGV4
dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4
dHVyZSh0ZXh0dXJlKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0g
ICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLX0K
LQotdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZl
cikpCi0gICAgewotICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAg
ICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9i
amVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKLQotICAgIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdCAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBk
ZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgbUZyYW1lYnVmZmVySGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAg
ZGVsZXRlIGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1h
cC5lcmFzZShmcmFtZWJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKLXsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2VP
YmplY3QgPSBtRmVuY2VNYXAuZmluZChmZW5jZSk7Ci0KLSAgICBpZiAoZmVuY2VPYmplY3QgIT0g
bUZlbmNlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5z
ZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkKLXsKLSAgICBRdWVyeU1h
cDo6aXRlcmF0b3IgcXVlcnlPYmplY3QgPSBtUXVlcnlNYXAuZmluZChxdWVyeSk7Ci0gICAgaWYg
KHF1ZXJ5T2JqZWN0ICE9IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeUhh
bmRsZUFsbG9jYXRvci5yZWxlYXNlKHF1ZXJ5T2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChx
dWVyeU9iamVjdC0+c2Vjb25kKQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeU9iamVjdC0+
c2Vjb25kLT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVF1ZXJ5TWFwLmVyYXNlKHF1
ZXJ5T2JqZWN0KTsKLSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKEdMdWlu
dCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5k
bGUpOwotfQotCi1TaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQotewot
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKLX0KLQotUHJv
Z3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBt
UmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKGhhbmRsZSk7Ci19Ci0KLVRleHR1cmUgKkNvbnRl
eHQ6OmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFu
YWdlci0+Z2V0VGV4dHVyZShoYW5kbGUpOwotfQotCi1SZW5kZXJidWZmZXIgKkNvbnRleHQ6Omdl
dFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKLX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6
OmdldFJlYWRGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0
ZS5yZWFkRnJhbWVidWZmZXIpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RHJhd0Zy
YW1lYnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwotfQotCi12
b2lkIENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAg
bVN0YXRlLmFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAg
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12
b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEKTsK
LQotICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRU
ZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7Ci0KLSAgICBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0
KGdldFRleHR1cmUodGV4dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVi
dWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpKQotICAgIHsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9
IG5ldyBGcmFtZWJ1ZmZlcigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIg
PSBmcmFtZWJ1ZmZlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdM
dWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KSkKLSAgICB7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJh
bWVidWZmZXIoKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVi
dWZmZXI7Ci0KLSAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFt
ZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrUmVuZGVyYnVmZmVyQWxs
b2NhdGlvbihyZW5kZXJidWZmZXIpOwotCi0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OnVzZVByb2dy
YW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbTsKLSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAg
ICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndp
c2UgaXQgb25seSBnZXRzIGZsYWdnZWQuCi0KLSAgICBpZiAocHJpb3JQcm9ncmFtICE9IHByb2dy
YW0pCi0gICAgewotICAgICAgICBQcm9ncmFtICpuZXdQcm9ncmFtID0gbVJlc291cmNlTWFuYWdl
ci0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3JhbSA9IG1S
ZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJpb3JQcm9ncmFtKTsKLSAgICAgICAgbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7
Ci0KLSAgICAgICAgaWYgKG5ld1Byb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ld1By
b2dyYW0tPmFkZFJlZigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkUHJv
Z3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgb2xkUHJvZ3JhbS0+cmVsZWFzZSgpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IHF1ZXJ5KQotewotICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29s
ZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIAotICAgIC8vIG9m
IHplcm8sIGlmIHRoZSBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5v
bi16ZXJvIChmb3IgdGhlICAKLSAgICAvLyB0YXJnZXRzIEFOWV9TQU1QTEVTX1BBU1NFRF9FWFQg
YW5kIEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULCBpZiAgCi0gICAgLy8gdGhl
IGFjdGl2ZSBxdWVyeSBmb3IgZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxpZD4gaXMg
dGhlIG5hbWUgb2YgYW4gCi0gICAgLy8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUg
ZG9lcyBub3QgbWF0Y2ggPHRhcmdldD4sIG9yIGlmIDxpZD4gaXMgdGhlCi0gICAgLy8gYWN0aXZl
IHF1ZXJ5IG9iamVjdCBuYW1lIGZvciBhbnkgcXVlcnkgdHlwZSwgdGhlIGVycm9yIElOVkFMSURf
T1BFUkFUSU9OIGlzCi0gICAgLy8gZ2VuZXJhdGVkLgotCi0gICAgLy8gRW5zdXJlIG5vIG90aGVy
IHF1ZXJpZXMgYXJlIGFjdGl2ZQotICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBv
Y2NsdXNpb24gYXJlIHN1cHBvcnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrCi0gICAgLy8gc2Vw
YXJhdGVseSB0aGF0OgotICAgIC8vICAgIGEpIFRoZSBxdWVyeSBJRCBwYXNzZWQgaXMgbm90IHRo
ZSBjdXJyZW50IGFjdGl2ZSBxdWVyeSBmb3IgYW55IHRhcmdldC90eXBlCi0gICAgLy8gICAgYikg
VGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5k
IGluIHRoZSBjYXNlCi0gICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBh
bmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCi0gICAgLy8gICAgICAg
bm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRz
IGVpdGhlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2gg
KHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0g
ICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVy
eShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsKLQotICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0
YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMKLSAgICBpZiAoIXF1ZXJ5T2JqZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAv
LyBjaGVjayBmb3IgdHlwZSBtaXNtYXRjaAotICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlwZSgp
ICE9IHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgLy8gc2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3BlY2lmaWVk
IHRhcmdldAotICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5T2JqZWN0KTsK
LQotICAgIC8vIGJlZ2luIHF1ZXJ5Ci0gICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBRdWVyeVR5cGUgcVR5
cGU7Ci0KLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAg
IEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOwotCi0gICAgaWYgKHF1
ZXJ5T2JqZWN0ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKLQotICAgIG1T
dGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQotewotICAgIGRlbGV0ZSBtRnJh
bWVidWZmZXJNYXBbMF07Ci0gICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwotICAgIGlm
IChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IDApCi0gICAgewotICAgICAgICBtQm91bmREcmF3
RnJhbWVidWZmZXIgPSBidWZmZXI7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFJlbmRl
cmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQotewotICAg
IFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5n
ZXQoKTsKLSAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsK
LX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBo
YW5kbGUpCi17Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZy
YW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJh
bWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5zZWNvbmQ7Ci0gICAg
fQotfQotCi1GZW5jZSAqQ29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKLXsK
LSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOwot
Ci0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmVuY2UtPnNl
Y29uZDsKLSAgICB9Ci19Ci0KLVF1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25lZCBpbnQg
aGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJh
dG9yIHF1ZXJ5ID0gbVF1ZXJ5TWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChxdWVyeSA9PSBt
UXVlcnlNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcXVlcnktPnNlY29uZCA9IG5ldyBRdWVyeShoYW5kbGUsIHR5cGUp
OwotICAgICAgICAgICAgcXVlcnktPnNlY29uZC0+YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHF1ZXJ5LT5zZWNvbmQ7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRleHQ6Omdl
dEFycmF5QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwot
fQotCi1CdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0
dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLVByb2dyYW0gKkNvbnRl
eHQ6OmdldEN1cnJlbnRQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1DYWNoZWRDdXJyZW50UHJvZ3Jh
bSkKLSAgICB7Ci0gICAgICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFn
ZXItPmdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1DYWNoZWRDdXJyZW50UHJvZ3JhbTsKLX0KLQotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0
dXJlMkQoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVy
VGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOwotfQotCi1UZXh0dXJl
Q3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQotewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVT
YW1wbGVyLCBURVhUVVJFX0NVQkUpKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCi17Ci0gICAg
R0x1aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7
Ci0KLSAgICBpZiAodGV4aWQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRp
ZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8u
Z2V0KCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5nZXQoKTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRC
b29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQotewotICAgIHN3aXRjaCAo
cG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICAq
cGFyYW1zID0gR0xfVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VJbnZlcnQ7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAgICAgIHBh
cmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0
ZS5jb2xvck1hc2tHcmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yTWFza0Js
dWU7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuY3VsbEZhY2U7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0RmlsbDsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9f
Q09WRVJBR0U6ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVz
dDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhUZXN0OyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMg
PSBtUm9idXN0QWNjZXNzID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyBicmVhazsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMp
Ci17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGlu
IG91ciBpbnRlcm5hbCBnZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0
IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIu
MCBzcGVjIG5hbWVzCi0gICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5j
dGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2Us
IHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlv
bi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDog
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0
YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWU7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ0xF
QVJfVkFMVUU6ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0g
bVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3I7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdP
Tl9PRkZTRVRfVU5JVFM6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAg
ICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKLSAgICAgICAg
cGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHBh
cmFtc1swXSA9IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOwotICAgICAgICBwYXJh
bXNbMV0gPSBzdXBwb3J0c1NoYWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00zIDogZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1sw
XSA9IG1TdGF0ZS56TmVhcjsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcGFy
YW1zWzBdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0
ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NP
TE9SOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAg
IHBhcmFtc1sxXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0g
PSBtU3RhdGUuYmxlbmRDb2xvci5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIC8vIFBs
ZWFzZSBub3RlOiBERVBUSF9DTEVBUl9WQUxVRSBpcyBub3QgaW5jbHVkZWQgaW4gb3VyIGludGVy
bmFsIGdldEludGVnZXJ2IGltcGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9y
ZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBu
YW1lcwotICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFz
IGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNo
b3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIFlvdSBt
YXkgZmluZCBpdCBpbiAKLSAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCi0gICAgc3dpdGNoIChw
bmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJh
bXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1WYXJ5aW5nVmVjdG9ycygpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01B
WF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzKCk7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAg
ICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1z
ID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBz
dXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklO
RElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAg
IGJyZWFrOwotICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAg
Ly8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0g
ICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0g
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIu
aWQoKTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
R0VORVJBVEVfTUlQTUFQX0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJh
dGVNaXBtYXBIaW50OyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9T
SEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRl
ckRlcml2YXRpdmVIaW50OyBicmVhazsKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhU
VVJFMCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2ls
QmFja0Z1bmM7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19SRUY6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01B
U0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFj
a0ZhaWw7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbDsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
UEFTUzogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291
cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9E
U1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NM
RUFSX1ZBTFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFt
cyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAKLSAgICAgICAgcGFyYW1z
WzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOgotICAgICAgICB7Ci0gICAgICAgICAgICBHTHNp
emVpIG1heFNhbXBsZXMgPSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBp
ZiAobWF4U2FtcGxlcyAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtYXhTYW1wbGVzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZF
UlM6ICAgICAgICAgICAgICAgICAgIAotICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1l
YnVmZmVyKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQlVGRkVSUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
LT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6ICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9GT1JNQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRf
RElNUzoKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9IHN0ZDo6bWF4
KGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSwgZ2V0TWF4aW11bVRleHR1cmVEaW1l
bnNpb24oKSk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247Ci0gICAgICAg
ICAgICBwYXJhbXNbMV0gPSBtYXhEaW1lbnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OwotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1
cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQ
T1JUOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwotICAgICAgICBwYXJh
bXNbMV0gPSBtU3RhdGUudmlld3BvcnRZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmll
d3BvcnRXaWR0aDsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0Owot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHBhcmFt
c1swXSA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnNjaXNz
b3JZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICBw
YXJhbXNbM10gPSBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NVTExfRkFDRV9NT0RFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmN1bGxNb2RlOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZB
Q0U6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBH
TF9HUkVFTl9CSVRTOgotICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FM
UEhBX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfUkVEX0JJVFM6ICAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xv
cmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9CTFVFX0JJVFM6ICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9y
YnVmZmVyLT5nZXRBbHBoYVNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdl
dFN0ZW5jaWxidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0
ZW5jaWxTaXplKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3Rh
dGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkg
LSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxl
ciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZl
U2FtcGxlcl0uaWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKLSAgICAgICAgKnBhcmFtcyA9IG1SZXNl
dFN0cmF0ZWd5OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojpn
ZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVk
IGludCAqbnVtUGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSBy
ZXR1cm5lZCBmb3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICAg
IC8vIGlzIEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRo
ZSBHTCBFUyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUKLSAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0
IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNv
bnZlcnNpb24KLSAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBT
aW5jZSB0aGlzIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0
aGUgY2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQt
dHlwZWQgc3RhdGUgdmFyaWFibGUsIHdlCi0gICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUg
d2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNh
bGxpbmcKLSAgICAvLyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IG1OdW1Db21w
cmVzc2VkVGV4dHVyZUZvcm1hdHM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5
cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJ
TkdfVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAg
IGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0la
RToKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgIGNhc2Ug
R0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKLSAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJP
R1JBTToKLSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX1BBQ0tf
UkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6
Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgY2FzZSBHTF9GUkFH
TUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzoKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6
Ci0gICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAg
ICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CSVRTOgotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToKLSAgICAgIGNhc2UgR0xf
RlJPTlRfRkFDRToKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfRlVOQzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX1BBU1M6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6Ci0gICAgICBjYXNl
IEdMX0JMRU5EX1NSQ19SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToKLSAgICAg
IGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOgot
ICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VR
VUFUSU9OX0FMUEhBOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzoKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVB
Ul9WQUxVRToKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzoKLSAgICAgIGNhc2UgR0xfTUFY
X1RFWFRVUkVfU0laRToKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToK
LSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0g
ICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKLSAgICAgIGNhc2Ug
R0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6Ci0gICAgICBjYXNlIEdMX1RFWFRV
UkVfQklORElOR18yRDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgot
ICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICB7
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
ICAgYm9vbCByZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJl
bmRlclRhcmdldFNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwoKTsKLSAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5k
ZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250
ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclRh
cmdldCgwLCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bCA9IHJlbmRlclRhcmdldFNlcmlhbDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1
ZTsgLy8gU2Npc3NvciBhcmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6
ZS0tIHRoaXMgaXMgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuCi0gICAg
ICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2ln
bmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0
aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhT
dGVuY2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGVw
dGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0
U2VyaWFsKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVu
Y2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwo
KTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVS
UigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVm
ZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2Vy
aWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVw
dGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGll
ZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXpl
ZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhT
dGVuY2lsKTsKLSAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVy
U2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVm
ZmVyU2VyaWFsOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
IH0KLQotICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJn
ZXRDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdl
dCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBD
b250ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICB9Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0
RGVzYygmbVJlbmRlclRhcmdldERlc2MpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0luaXRp
YWxpemVkID0gdHJ1ZTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0OwotCi0gICAgZmxvYXQgek5lYXIgPSBjbGFtcDAx
KG1TdGF0ZS56TmVhcik7Ci0gICAgZmxvYXQgekZhciA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOwot
Ci0gICAgaWYgKGlnbm9yZVZpZXdwb3J0KQotICAgIHsKLSAgICAgICAgdmlld3BvcnQuWCA9IDA7
Ci0gICAgICAgIHZpZXdwb3J0LlkgPSAwOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoOwotICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQ7Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOwotICAgICAgICB2
aWV3cG9ydC5NYXhaID0gMS4wZjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgUkVD
VCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KG1TdGF0ZS52aWV3cG9ydFgsIG1TdGF0ZS52aWV3
cG9ydFksIG1TdGF0ZS52aWV3cG9ydFdpZHRoLCBtU3RhdGUudmlld3BvcnRIZWlnaHQsIG1SZW5k
ZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgIHZpZXdwb3J0LlggPSBjbGFtcChyZWN0Lmxl
ZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAg
ICAgICB2aWV3cG9ydC5ZID0gY2xhbXAocmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPiht
UmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgdmlld3BvcnQuV2lkdGggPSBjbGFt
cChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRh
cmdldERlc2MuV2lkdGgpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOwotICAgICAg
ICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFtcChyZWN0LmJvdHRvbSAtIHJlY3QudG9wLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSAtIHN0YXRpY19jYXN0PExP
Tkc+KHZpZXdwb3J0LlkpKTsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IHpOZWFyOwotICAgICAg
ICB2aWV3cG9ydC5NYXhaID0gekZhcjsKLSAgICB9Ci0KLSAgICBpZiAodmlld3BvcnQuV2lkdGgg
PD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgotICAgIH0KLQotICAgIGlmIChyZW5kZXJUYXJnZXRD
aGFuZ2VkIHx8ICFtVmlld3BvcnRJbml0aWFsaXplZCB8fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNl
dFZpZXdwb3J0LCBzaXplb2YgbVNldFZpZXdwb3J0KSAhPSAwKQotICAgIHsKLSAgICAgICAgbURl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKLSAgICAgICAgbVNldFZpZXdwb3J0ID0gdmll
d3BvcnQ7Ci0gICAgICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgbUR4
VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0
eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUuc2Npc3Nvclgs
IG1TdGF0ZS5zY2lzc29yWSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRlLnNjaXNzb3JIZWln
aHQsIG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBj
bGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5X
aWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVj
dC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0
LmJvdHRvbSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0g
ICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0g
ICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhl
bFNpemVMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9y
dC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtT2JqZWN0
LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKLQotICAgICAgICAvLyBUaGVz
ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3JhbTo6
bGlua1ZhcnlpbmdzKCkuIFRoZSBhcHByb2FjaCBkZXBlbmRzIG9uIFNoYWRlciBNb2RlbCAzLjAg
c3VwcG9ydC4KLSAgICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtT2JqZWN0LT5nZXREeENvb3Jk
TG9jYXRpb24oKTsKLSAgICAgICAgZmxvYXQgaCA9IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IG1S
ZW5kZXJUYXJnZXREZXNjLkhlaWdodCA6IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGY7Ci0g
ICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIGgs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1T
dGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChm
bG9hdCltU3RhdGUudmlld3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07Ci0g
ICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwotCi0g
ICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7
Ci0gICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIg
KyB6RmFyKSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRl
cHRoLCAxLCBkeik7Ci0KLSAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1PYmplY3Qt
PmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZb
M10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwotICAgICAgICBtRHhV
bmlmb3Jtc0RpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBh
bHBoYSBibGVuZGluZywgc3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgUHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMZW51
bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0K
LSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlv
bigpOwotICAgIEdMaW50IGNjdyA9IChhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAg
IHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOwotCi0gICAg
R0xpbnQgcG9pbnRzT3JMaW5lcyA9IHByb2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uKCk7Ci0gICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01v
ZGUpOwotICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwg
JmFsd2F5c0Zyb250KTsKLQotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIg
PSBtRGlzcGxheS0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKLSAgICBib29sIHplcm9Db2xvck1h
c2tBbGxvd2VkID0gaWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwotICAgIC8vIEFwcGFy
ZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8g
Y29sb3IKLSAgICAvLyB3cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGlu
Y29ycmVjdCByZXN1bHRzLiBJbnN0ZWFkLAotICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3Jp
dGUgbWFzayBidXQgbW9kaWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgLy8gZHJh
d2luZyBpcyBkb25lLgotICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2pl
Y3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKLQotICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZy
b250RmFjZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUs
IGVzMmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBhZGp1c3RlZEZyb250RmFj
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobURlcHRoU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
emVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURp
cnR5KSkKLSAgICB7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBt
TWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5
KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7
Ci0KLSAgICAgICAgICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRf
QUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9B
TFBIQSAmJgotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RB
TlRfQUxQSEEgJiYgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
QUxQSEEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5k
Q29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RP
UiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpD
b252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQikpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5k
RnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5k
RXF1YXRpb25SR0IpKTsKLQotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAh
PSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVz
dEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBt
U3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJs
ZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJs
ZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRP
cChtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2ls
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFU
RVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAg
ICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJT
X1NURU5DSUxNQVNLOwotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJT
X0NDV19TVEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAg
ICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0
ZW1hc2sgfHwgCi0gICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBt
U3RhdGUuc3RlbmNpbEJhY2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVS
UigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1
ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0
ZW5jaWwgcmVmCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0g
ZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWlu
dCBtYXhTdGVuY2lsID0gKDEgPDwgc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAx
OwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFj
ZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxX
UklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykp
OwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFj
ZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsICht
U3RhdGUuc3RlbmNpbFJlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVm
IDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1
c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19T
VEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJ
TEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxP
cChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQ
QVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQ
YXNzKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVO
Q0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNp
bEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVz
dGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVO
Q0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0
YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxN
QVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1T
dGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNE
UlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwp
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNl
ID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxP
cChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RlbmNpbFN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICAgICAgbUZyb250RmFjZURpcnR5ID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKG1NYXNrU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGludCBjb2xvck1h
c2sgPSBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUu
Y29sb3JNYXNrR3JlZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSk7Ci0g
ICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93ZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5k
aW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JF
RU4pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNEQkxFTkRfT05FKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1BfQUREKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGNvbG9yTWFzayk7Ci0gICAgICAg
IH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBt
U3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtTWFza1N0YXRlRGly
dHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5KQot
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFj
dG9yKSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBv
bHlnb25PZmZzZXRVbml0cywgLShpbnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOwot
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywg
KigoRFdPUkQqKSZkZXB0aEJpYXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Qb2x5
Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU2FtcGxlU3Rh
dGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdl
IGlzIHVuaW1wbGVtZW50ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7Ci0gICAgICAgIGlm
IChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCBtYXNrID0gMDsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1
ZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9
IDAuNWY7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1hc2sgPDw9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkg
KiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+PSB0aHJlc2hvbGQpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBmOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1hc2sgPSB+bWFzazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAgICAgIH0K
LQotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICht
RGl0aGVyU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAg
ICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb250
ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJp
YnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBHTGVudW0gZXJyID0g
bVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YShmaXJzdCwgY291bnQsIGF0dHJp
YnV0ZXMsIGluc3RhbmNlcyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlv
bkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgZ2V0Q3VycmVudFBy
b2dyYW0oKSwgaW5zdGFuY2VzLCByZXBlYXREcmF3KTsKLX0KLQotLy8gQXBwbGllcyB0aGUgaW5k
aWNlcyBhbmQgZWxlbWVudCBhcnJheSBiaW5kaW5ncyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LUdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
R0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhE
YXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5w
cmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpLCBpbmRpY2VzLCBpbmRleEluZm8pOwotCi0gICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikK
LSAgICB7Ci0gICAgICAgIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFs
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGluZGV4SW5mby0+
aW5kZXhCdWZmZXIpOwotICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+
c2VyaWFsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gQXBw
bGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBk
ZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKLXsKLSAgICBQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBpZiAocHJvZ3JhbU9iamVjdC0+
Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtU2VyaWFsKQotICAgIHsKLSAgICAgICAgSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVy
dGV4U2hhZGVyKCk7Ci0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hh
ZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9y
bXMoKTsKLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0
U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlVbmlmb3JtcygpOwot
fQotCi0vLyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERp
cmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQotewotICAgIGFw
cGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7Ci0KLSAgICBpZiAobVN1cHBvcnRzVmVydGV4VGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9WRVJURVgpOwotICAg
IH0KLX0KLQotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4
ZWwgb3IgdmVydGV4IHN0YWdlLAotLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdM
IHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLAotLy8gYW5kIHNldHMgdGhlIHRl
eHR1cmUgYW5kIGl0cyBhZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGlu
YWN0aXZlKS4KLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQot
ewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0g
ICAgaW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8v
IFJhbmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCi0gICAg
dW5zaWduZWQgaW50ICphcHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElY
RUwpID8gbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsK
LSAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6
IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKLQotICAgIGZvciAoaW50IHNhbXBs
ZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4Kysp
Ci0gICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1w
bGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdl
IHVuaXQgaW5kZXgKLSAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RT
YW1wbGVyT2Zmc2V0OwotCi0gICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKLQotICAgICAgICAgICAg
VGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJl
VHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBh
cmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9IHRleHR1
cmUtPmdldFRleHR1cmUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJlKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1
cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtaW5GaWx0ZXIgPSB0ZXh0dXJlLT5nZXRN
aW5GaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0
ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1UsIGVzMmR4OjpD
b252ZXJ0VGV4dHVyZVdyYXAod3JhcFMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6
Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZXMy
ZHg6OkNvbnZlcnRNYWdGaWx0ZXIobWFnRmlsdGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQz
ZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1p
bkZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVT
ZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4
dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJl
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBl
KS0+Z2V0VGV4dHVyZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBh
cHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNl
cmlhbCgpOwotICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsK
LSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHNhbXBsZXJJ
bmRleCA9IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVy
SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVy
SW5kZXhdICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUo
c2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7Ci0gICAgICAgICAgICBhcHBs
aWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCi17Ci0gICAg
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0KLSAgICBp
ZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0g
MCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEdMc2l6ZWkgb3V0
cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tB
bGlnbm1lbnQpOwotICAgIC8vIHNpemVkIHF1ZXJ5IHNhbml0eSBjaGVjawotICAgIGlmIChidWZT
aXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVp
Z2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZm
ZXItPmdldFJlbmRlclRhcmdldCgpOwotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0LCByZXR1cm4gc2lsZW50bHkK
LSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICByZW5kZXJUYXJnZXQtPkdl
dERlc2MoJmRlc2MpOwotCi0gICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJ
U0FNUExFX05PTkUpCi0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6
IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVk
IHJlbmRlciB0YXJnZXQKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJl
c3VsdDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAg
Ym9vbCBkaXJlY3RUb1BpeGVscyA9IGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNr
QWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRl
c2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0g
R0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RU
b1BpeGVscykKLSAgICB7Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJl
ZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgs
IGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFj
ZSwgJnBpeGVscyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAg
ICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXN1bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdl
dCwgc3lzdGVtU3VyZmFjZSk7Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgcmVu
ZGVyVGFyZ2V0ID0gTlVMTDsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAvLyBJdCB0dXJucyBvdXQg
dGhhdCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVycm9yCi0gICAgICAgIC8vIGNv
ZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KLSAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChy
ZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVs
cykKLSAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgUkVDVCByZWN0ID0g
dHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlc2MuSGVpZ2h0KTsKLSAg
ICByZWN0LmxlZnQgPSBjbGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNj
LldpZHRoKSk7Ci0gICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0gICAgcmVjdC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC5ib3R0b20gPSBj
bGFtcChyZWN0LmJvdHRvbSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0K
LSAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExP
Q0tfUkVBRE9OTFkpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAg
ICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOwotICAgIHVu
c2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKLQotICAgIHVu
c2lnbmVkIGNoYXIgKnNvdXJjZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAoZ2V0UGFj
a1JldmVyc2VSb3dPcmRlcigpKQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNo
YXIqKWxvY2sucEJpdHM7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2su
cEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAg
ICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0g
MDsgaiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChk
ZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIEVYVF9yZWFkX2Zvcm1hdF9iZ3Jh
LCBnaXZlbgotICAgICAgICAgICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0
IGJ1ZmZlcnMgd2l0aCBubwotICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xv
dyBwYXRoIGJlbG93LgotICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gs
Ci0gICAgICAgICAgICAgICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAg
ICAgICAgICAgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogNCk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdo
dCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAg
ICAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9h
dCBhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
YSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBm
IC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEu
MGYgLyAweDA3RTApOwotICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAo
MS4wZiAvIDB4RjgwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNo
b3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAg
ICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAg
ICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
aW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAw
MCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2Ig
JiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAg
ICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAq
IGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0g
ICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAw
MDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAo
MS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAw
RkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdi
ID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhD
MDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICog
KDEuMGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgw
MDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
MzJCMzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
ZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3Ro
ZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSAr
IDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0g
KigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0
UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSAr
IDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1h
dHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3Vu
ZAotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOwotCi0gICAgICAgICAgICAgICAg
ICAgIEQzRFhGbG9hdDE2VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJjZSArIDgg
KiBpICsgaiAqIGlucHV0UGl0Y2gpLCA0KTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gYWJn
clszXTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGFiZ3JbMl07Ci0gICAgICAgICAgICAgICAg
ICAgIGcgPSBhYmdyWzFdOwotICAgICAgICAgICAgICAgICAgICByID0gYWJnclswXTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAq
IGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiAr
IDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhciko
MjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcg
dG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3Rhbmds
ZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBh
cyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAg
MTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAw
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAg
ICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAg
IHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAv
LyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRo
ZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBq
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4
KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAw
LjVmKSA8PCA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgx
NSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhl
ICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAg
ICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAg
ICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNv
bXBvbmVudCAgICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIg
aXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAg
ICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
ICAgICBhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAvLyBJTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX1RZUEUKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBq
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwg
NSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsg
MC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+VW5sb2Nr
UmVjdCgpOwotCi0gICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRl
eHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJP
YmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVG
RkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBEV09SRCBmbGFncyA9IDA7Ci0KLSAg
ICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9
IH5HTF9DT0xPUl9CVUZGRVJfQklUOwotCi0gICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAg
ZmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfREVQ
VEhfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1pCVUZGRVI7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotCi0gICAgaWYgKG1hc2sgJiBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JV
RkZFUl9CSVQ7Ci0gICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZl
clR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIo
KS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1
bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAg
ICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKLQotICAgICAgICAgICAgdW5z
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
cmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1bGxTa2lwc0Ry
YXcobW9kZSkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDApOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0
YXRpY0luZGV4QnVmZmVyICpjb3VudGluZ0lCID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50
aW5nSW5kaWNlcyhjb3VudCk7Ci0gICAgICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lC
LT5nZXRTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldEluZGljZXMoY291bnRpbmdJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAg
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBl
YXREcmF3OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2
aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwg
cHJpbWl0aXZlQ291bnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgYSBjb3VudGluZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNl
ZC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5
cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICgh
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlw
ZTsKLSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmlt
aXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0
aXZlQ291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRl
eEluZm87Ci0gICAgR0xlbnVtIGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQs
IG1vZGUsIHR5cGUsICZpbmRleEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHZl
cnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsK
LSAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOwotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVy
KGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcp
OwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVz
KCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoZmFs
c2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAgewotICAgICAgICBt
RGlzcGxheS0+c3RhcnRTY2VuZSgpOwotCi0gICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9P
UCkKLSAgICAgICAgewotICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRp
Y2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmlt
aXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8u
bWluSW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291
bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBJbXBsZW1lbnRz
IGdsRmx1c2ggd2hlbiBibG9jayBpcyBmYWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVl
Ci12b2lkIENvbnRleHQ6OnN5bmMoYm9vbCBibG9jaykKLXsKLSAgICBtRGlzcGxheS0+c3luYyhi
bG9jayk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkKLXsKLSAgICAv
LyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAh
PSBHTF9OT05FICYmIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpCi0gICAgewotICAg
ICAgICBCdWZmZXIgKmluZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQo
KTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
aW5kaWNlcyk7Ci0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
aW5kZXhCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgVUlOVCBzdGFydElu
ZGV4ID0gMDsKLSAgICBib29sIHN1Y2NlZWRlZCA9IGZhbHNlOwotCi0gICAgaWYgKHN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAo
Y291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCi0gICAgICAgIGlmICghbUxpbmVM
b29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWlu
Z0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9J
TkRFWDMyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikKLSAgICAgICAg
ewotICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xf
VU5TSUdORURfSU5UKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAg
ICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVM
b29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAgICAgc3RhcnRJbmRl
eCA9IG9mZnNldCAvIDQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJh
dwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1MaW5l
TG9vcElCLT51bm1hcCgpOwotICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29u
c3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQp
OwotCi0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1M
aW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5E
RVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDE2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2Vy
dmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgICAgICBV
SU5UIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9m
ZnNldCkpOwotICAgICAgICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDI7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRh
dGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
W2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOwotICAgICAgICAg
ICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaWYgKHN1Y2NlZWRlZCkKLSAgICB7Ci0gICAgICAgIGlmIChtQXBwbGllZElC
U2VyaWFsICE9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAg
ICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKEQzRFBUX0xJTkVT
VFJJUCwgLW1pbkluZGV4LCBtaW5JbmRleCwgY291bnQsIHN0YXJ0SW5kZXgsIGNvdW50KTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgbG9v
cGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJ
bnZhbGlkRW51bSgpCi17Ci0gICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250
ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQotewotICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOwot
fQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQotewotICAgIG1JbnZh
bGlkT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9y
eSgpCi17Ci0gICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNv
cmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkRnJhbWVidWZm
ZXJPcGVyYXRpb24gPSB0cnVlOwotfQotCi0vLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJv
cnMgYW5kIGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuCi0vLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAyLjUgcGFnZSAxMy4KLUdMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYg
KG1JbnZhbGlkRW51bSkKLSAgICB7Ci0gICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX0VOVU07Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlk
VmFsdWUpCi0gICAgewotICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfVkFMVUU7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkT3BlcmF0
aW9uKQotICAgIHsKLSAgICAgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKG1PdXRPZk1l
bW9yeSkKLSAgICB7Ci0gICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwotCi0gICAgICAgIHJl
dHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZEZyYW1lYnVm
ZmVyT3BlcmF0aW9uKQotICAgIHsKLSAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlv
biA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTjsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUdMZW51bSBDb250
ZXh0OjpnZXRSZXNldFN0YXR1cygpCi17Ci0gICAgaWYgKG1SZXNldFN0YXR1cyA9PSBHTF9OT19F
UlJPUikKLSAgICB7Ci0gICAgICAgIGJvb2wgbG9zdCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9z
dCgpOwotCi0gICAgICAgIGlmIChsb3N0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxh
eS0+bm90aWZ5RGV2aWNlTG9zdCgpOyAgIC8vIFNldHMgbVJlc2V0U3RhdHVzCi0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBHTGVudW0gc3RhdHVzID0gbVJlc2V0U3RhdHVzOwotCi0gICAgaWYgKG1S
ZXNldFN0YXR1cyAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChtRGlzcGxheS0+
dGVzdERldmljZVJlc2V0dGFibGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlc2V0U3Rh
dHVzID0gR0xfTk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0
YXR1czsKLX0KLQotYm9vbCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpCi17
Ci0gICAgcmV0dXJuIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRf
RVhUKTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKLX0KLQotaW50IENvbnRleHQ6Omdl
dE1heGltdW1WYXJ5aW5nVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1No
YWRlck1vZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9S
U19TTTI7Ci19Ci0KLXVuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJl
ID8gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7Ci19Ci0KLXVuc2lnbmVk
IGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCk7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1v
ZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SU19TTTI7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLWlu
dCBDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBp
bnQgcmVxdWVzdGVkKSBjb25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7Ci0gICAgfQotCi0gICAgc3RkOjptYXA8RDNERk9STUFU
LCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQo
Zm9ybWF0KTsKLSAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3Rl
ZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBp
ZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25z
dAotewotICAgIHJldHVybiBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6c3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBv
cnRzT2NjbHVzaW9uUXVlcmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0
dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c0RYVDNUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDVU
ZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJlczsKLX0K
LQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJS
ZW5kZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4
dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1pbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVt
VGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5z
aW9uOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQg
Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1N
YXhUZXh0dXJlTGV2ZWw7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7Ci19Ci0KLWJv
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
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChzdXBwb3J0
c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX25wb3QgIjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0
ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAi
OwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9i
Z3JhICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKLQot
ICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KLQot
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAi
OwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLQot
ICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNh
bXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgIjsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9ydHNJ
bnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9pbnN0YW5jZWRfYXJyYXlzICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhU
M1RleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7Ci0KLSAgICAvLyBPdGhlciB2
ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygp
KQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKLSAg
ICB9Ci0KLSAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25TdHJpbmcu
ZmluZF9sYXN0X25vdF9vZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
Ci0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7Ci0gICAgfQot
fQotCi1jb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
aW5pdFJlbmRlcmVyU3RyaW5nKCkKLXsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVu
dGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0KLSAgICBtUmVuZGVy
ZXJTdHJpbmcgPSAiQU5HTEUgKCI7Ci0gICAgbVJlbmRlcmVyU3RyaW5nICs9IGlkZW50aWZpZXIt
PkRlc2NyaXB0aW9uOwotICAgIG1SZW5kZXJlclN0cmluZyArPSAiKSI7Ci19Ci0KLWNvbnN0IGNo
YXIgKkNvbnRleHQ6OmdldFJlbmRlcmVyU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJl
bmRlcmVyU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVy
KEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xp
bnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xi
aXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0g
ICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGludCByZWFkQnVmZmVy
V2lkdGggPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7Ci0g
ICAgaW50IHJlYWRCdWZmZXJIZWlnaHQgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KCktPmdldEhlaWdodCgpOwotICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IGRyYXdCdWZmZXJIZWln
aHQgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOwotCi0g
ICAgUkVDVCBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3JjWDAg
PCBzcmNYMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gwOwotICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RY
MDsKLSAgICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0Lmxl
ZnQgPSBkc3RYMTsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gwOwotICAgICAgICBk
ZXN0UmVjdC5yaWdodCA9IGRzdFgwOwotICAgIH0KLQotICAgIGlmIChzcmNZMCA8IHNyY1kxKQot
ICAgIHsKLSAgICAgICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7
Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAg
IGRlc3RSZWN0LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0g
c3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsK
LSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0g
ICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICB9
Ci0KLSAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OwotICAgIFJFQ1Qg
ZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRl
c3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5h
dGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKLSAgICAgICAgLy8g
UGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVz
LCBzbyB0aGUgKnRvcCogb2YgdGhlCi0gICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFn
YWluc3Qgc2Npc3NvclksIHJhdGhlciB0aGFuIHRoZSBib3R0b20uCi0gICAgICAgIGlmIChkZXN0
UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
eERpZmYgPSBtU3RhdGUuc2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OwotICAgICAgICAgICAgZGVz
dFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgICAgIHNvdXJj
ZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
ZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0
ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNz
b3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwot
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRv
cDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsK
LSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0
ZS5zY2lzc29ySGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0
UmVjdC5ib3R0b20gLSAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwot
ICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsg
bVN0YXRlLnNjaXNzb3JIZWlnaHQ7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJv
dHRvbSAtPSB5RGlmZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRh
cmdldCA9IGZhbHNlOwotICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAg
UkVDVCBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUkVDVCBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAg
ICB7Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OwotICAg
ICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0
LmxlZnQgKz0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0
ID4gcmVhZEJ1ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJp
bW1lZFJlY3QucmlnaHQgLSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LnJpZ2h0ID0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qucmln
aHQgLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IDAp
Ci0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QudG9wOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJl
Y3QudG9wICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0
b20gPiByZWFkQnVmZmVySGVpZ2h0KQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gc291cmNl
VHJpbW1lZFJlY3QuYm90dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJp
bW1lZFJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRS
ZWN0LmJvdHRvbSAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0Lmxl
ZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC5s
ZWZ0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCA9IDA7Ci0gICAgICAgIHNvdXJjZVRy
aW1tZWRSZWN0LmxlZnQgKz0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVj
dC5yaWdodCA+IGRyYXdCdWZmZXJXaWR0aCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IGRl
c3RUcmltbWVkUmVjdC5yaWdodCAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1t
ZWRSZWN0LnJpZ2h0ID0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVj
dC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8
IDApCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsK
LSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LnRvcCArPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmJvdHRv
bSA+IGRyYXdCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJp
bW1lZFJlY3QuYm90dG9tIC0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRS
ZWN0LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0
LmJvdHRvbSAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0g
ZmFsc2U7Ci0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRS
ZWN0LnRvcCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qu
cmlnaHQgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdC
dWZmZXJIZWlnaHQgfHwKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1t
ZWRSZWN0LmxlZnQgPCBkcmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QudG9wICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IHNvdXJjZVRyaW1tZWRS
ZWN0LmxlZnQgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QubGVmdCAhPSAwKQotICAgIHsKLSAgICAg
ICAgcGFydGlhbEJ1ZmZlckNvcHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXNrICYgR0xf
Q09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8y
RCB8fAotICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9
PSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWREcmF3VHlwZSA9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAot
ICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9S
RU5ERVJCVUZGRVI7Ci0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlw
ZSB8fAotICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRE
M0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZv
cm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQg
Y29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg
aW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVy
Q29weSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBpZiAo
bWFzayAmIChHTF9ERVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKLSAg
ICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKLSAgICAgICAg
UmVuZGVyYnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOwotCi0gICAgICAgIC8vIFdlIHN1cHBv
cnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0
ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQotICAg
ICAgICAvLyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBz
YW1lIGJ1ZmZlci4KLQotICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgp
ICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAg
ICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQo
KSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBi
bGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RT
QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAot
ICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdl
dEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJ0aWFsQnVm
ZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBk
ZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAv
LyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0g
MCkgfHwgCi0gICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJU
YXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRT
Y2VuZSgpOwotCi0gICAgICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSog
ZHJhd1JlbmRlclRhcmdldCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0K
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFJl
bmRlclRhcmdldCwgJnNvdXJjZVRyaW1tZWRSZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlbmRlclRhcmdldCwgJmRlc3RUcmltbWVk
UmVjdCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgZHJhd1JlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAg
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVk
ICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1l
YnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1l
YnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDog
bU1heExydSgwKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NB
Q0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVy
dGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNv
dW50ID0gMDsKLSAgICB9Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVD
TF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNo
ZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERl
Y2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1td
LCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJh
dykKLXsKLSAgICAqcmVwZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9
IE1BWF9WRVJURVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gTUFYX1ZF
UlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICAv
LyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhf
QVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2Vk
QXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRl
ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFu
Y2VkIGF0dHJpYnV0ZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlu
ZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAg
ICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdHJl
YW0gPSBpOwotCi0gICAgICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVu
YWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2Vk
LgotICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERy
YXcgPSBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRB
dHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmVhbSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaSA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHJlYW0gPSBpbmRleGVkQXR0cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgVUlOVCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9
PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVx
dWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VS
Q0VfSU5TVEFOQ0VEQVRBIHwgYXR0cmlidXRlc1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoc3RyZWFtLCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAg
ICAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9
IGF0dHJpYnV0ZXNbaV0uc2VyaWFsIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3Ry
ZWFtXS5zdHJpZGUgIT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAgICAgICBt
QXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0s
IGF0dHJpYnV0ZXNbaV0udmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmli
dXRlc1tpXS5zdHJpZGUpOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc2Vy
aWFsID0gYXR0cmlidXRlc1tpXS5zZXJpYWw7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNb
c3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBt
QXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Ci0gICAgICAg
ICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0
dHJpYnV0ZXNbaV0udHlwZTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xN
RVRIT0RfREVGQVVMVDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdF
X1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdl
dFNlbWFudGljSW5kZXgoaSk7Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IE1B
WF9WRVJURVhfQVRUUklCUykKLSAgICB7Ci0gICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5z
dGFuY2luZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVu
dCsrKSA9IGVuZDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NB
Q0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpl
bnRyeSA9ICZtVmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5j
YWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQz
RFZFUlRFWEVMRU1FTlQ5KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAg
ICAgIGlmKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50
cnktPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0g
ZW50cnktPnZlcnRleERlY2xhcmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2Fj
aGVFbnRyeSAqbGFzdENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVb
aV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbiAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlv
bi0+UmVsZWFzZSgpOwotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVM
TDsKLSAgICAgICAgLy8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBz
byB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQot
ICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQg
LSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNy
ZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbik7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRl
eERlY2xhcmF0aW9uKTsKLSAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNs
YXJhdGlvbjsKLSAgICBsYXN0Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0
dXJuIEdMX05PX0VSUk9SOwotfQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtT
dGF0ZURpcnR5KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9
Ci0KLSAgICBtTGFzdFNldFZEZWNsID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0
cnVlOyAgIC8vIEZvcmNlcyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCi19Ci0KLX0K
LQotZXh0ZXJuICJDIgotewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29u
dGV4dChjb25maWcsIHNoYXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwot
fQotCi12b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAg
ZGVsZXRlIGNvbnRleHQ7Ci0KLSAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQot
ICAgIHsKLSAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIH0K
LX0KLQotdm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBnbDo6bWFrZUN1cnJl
bnQoY29udGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7Ci19Ci0KLWdsOjpDb250ZXh0ICpnbEdldEN1
cnJlbnRDb250ZXh0KCkKLXsKLSAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKLX0KLX0KKy8v
DQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nDQor
Ly8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbiBvZiBFR0xDb250ZXh0Lg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5o
Ig0KKw0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQorDQorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5
LmgiDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYXRodXRpbC5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9CbGl0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVT
djIvRmVuY2UuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiDQorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIg0KKyNpbmNsdWRlICJsaWJHTEVT
djIvUmVuZGVyQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCINCisjaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERh
dGFNYW5hZ2VyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiDQor
DQorI3VuZGVmIG5lYXINCisjdW5kZWYgZmFyDQorDQorbmFtZXNwYWNlIGdsDQorew0KK0NvbnRl
eHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQg
KnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1D
b25maWcoY29uZmlnKQ0KK3sNCisgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAg
Ly8gVW5pbXBsZW1lbnRlZA0KKw0KKyAgICBtRGlzcGxheSA9IE5VTEw7DQorICAgIG1EZXZpY2Ug
PSBOVUxMOw0KKw0KKyAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsN
CisNCisgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsNCisNCisgICAg
bVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7DQorICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJW
YWx1ZSA9IDA7DQorDQorICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOw0KKyAgICBtU3RhdGUu
Y3VsbE1vZGUgPSBHTF9CQUNLOw0KKyAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOw0KKyAg
ICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9M
RVNTOw0KKyAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gR0xfT05FOw0KKyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsNCisg
ICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87DQorICAgIG1TdGF0ZS5kZXN0QmxlbmRB
bHBoYSA9IEdMX1pFUk87DQorICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19B
REQ7DQorICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsNCisgICAg
bVN0YXRlLmJsZW5kQ29sb3IucmVkID0gMDsNCisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4g
PSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsNCisgICAgbVN0YXRlLmJsZW5k
Q29sb3IuYWxwaGEgPSAwOw0KKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsNCisgICAg
bVN0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOw0KKyAgICBtU3RhdGUuc3RlbmNpbFJlZiA9
IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbFdy
aXRlbWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOw0K
KyAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAwOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrID0gLSAxOw0KKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsNCisgICAg
bVN0YXRlLnN0ZW5jaWxGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVw
dGhGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xf
S0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7DQorICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRG
aWxsID0gZmFsc2U7DQorICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsNCisg
ICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IDAuMGY7DQorICAgIG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFs
c2U7DQorICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsNCisgICAgbVN0YXRl
LnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9
IGZhbHNlOw0KKyAgICBtU3RhdGUuZGl0aGVyID0gdHJ1ZTsNCisgICAgbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludCA9IEdMX0RPTlRfQ0FSRTsNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVy
aXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7DQorDQorICAgIG1TdGF0ZS5saW5lV2lkdGggPSAx
LjBmOw0KKw0KKyAgICBtU3RhdGUudmlld3BvcnRYID0gMDsNCisgICAgbVN0YXRlLnZpZXdwb3J0
WSA9IDA7DQorICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUu
V2lkdGg7DQorICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2Rl
LkhlaWdodDsNCisgICAgbVN0YXRlLnpOZWFyID0gMC4wZjsNCisgICAgbVN0YXRlLnpGYXIgPSAx
LjBmOw0KKw0KKyAgICBtU3RhdGUuc2Npc3NvclggPSAwOw0KKyAgICBtU3RhdGUuc2Npc3Nvclkg
PSAwOw0KKyAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lk
dGg7DQorICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVp
Z2h0Ow0KKw0KKyAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsNCisgICAgbVN0YXRlLmNv
bG9yTWFza0dyZWVuID0gdHJ1ZTsNCisgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOw0K
KyAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOw0KKyAgICBtU3RhdGUuZGVwdGhNYXNr
ID0gdHJ1ZTsNCisNCisgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQ0KKyAgICB7DQorICAg
ICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOw0K
KyAgICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigp
Ow0KKyAgICB9DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdl
IDgzOg0KKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVS
RV9DVUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsDQorICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0
dXJlIHN0YXRlIHZlY3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLg0KKyAg
ICAvLyBJbiBvcmRlciB0aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBi
ZSBsb3N0LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHRleHR1cmUNCisgICAgLy8gb2JqZWN0cyBhbGwg
b2Ygd2hvc2UgbmFtZXMgYXJlIDAuDQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNldChuZXcgVGV4
dHVyZTJEKDApKTsNCisgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJl
TWFwKDApKTsNCisNCisgICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSAwOw0KKyAgICBiaW5kQXJy
YXlCdWZmZXIoMCk7DQorICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7DQorICAgIGJpbmRU
ZXh0dXJlQ3ViZU1hcCgwKTsNCisgICAgYmluZFRleHR1cmUyRCgwKTsNCisgICAgYmluZFJlYWRG
cmFtZWJ1ZmZlcigwKTsNCisgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAgYmluZFJl
bmRlcmJ1ZmZlcigwKTsNCisNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisNCisg
ICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0Ow0KKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50
ID0gNDsNCisgICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsNCisNCisgICAg
bVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsNCisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxM
Ow0KKyAgICBtQmxpdCA9IE5VTEw7DQorICAgIG1MaW5lTG9vcElCID0gTlVMTDsNCisNCisgICAg
bUludmFsaWRFbnVtID0gZmFsc2U7DQorICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsNCisgICAg
bUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsNCisgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQor
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgbUhhc0Jl
ZW5DdXJyZW50ID0gZmFsc2U7DQorICAgIG1Db250ZXh0TG9zdCA9IGZhbHNlOw0KKyAgICBtUmVz
ZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsNCisgICAgbVJlc2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVz
ZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VUX05PVElGSUNB
VElPTl9FWFQpOw0KKyAgICBtUm9idXN0QWNjZXNzID0gcm9idXN0QWNjZXNzOw0KKw0KKyAgICBt
U3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVz
ID0gZmFsc2U7DQorICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOw0KKyAgICBtU3Vw
cG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmll
cyA9IGZhbHNlOw0KKyAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOw0KKyAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0g
TlVMTDsNCisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsNCit9DQorDQorQ29udGV4dDo6fkNvbnRl
eHQoKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQ0KKyAgICB7DQor
ICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJv
Z3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOw0KKyAgICAgICAgaWYgKHByb2dyYW1PYmplY3Qp
DQorICAgICAgICB7DQorICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsNCisgICAgfQ0KKw0K
KyAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQ0KKyAgICB7DQorICAgICAgICBk
ZWxldGVGcmFtZWJ1ZmZlcihtRnJhbWVidWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOw0KKyAgICB9
DQorDQorICAgIHdoaWxlICghbUZlbmNlTWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRl
bGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hp
bGUgKCFtUXVlcnlNYXAuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlUXVlcnkobVF1
ZXJ5TWFwLmJlZ2luKCktPmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1NdWx0aVNh
bXBsZVN1cHBvcnQuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlIFtdIG1NdWx0aVNh
bXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOw0KKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9y
dC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOw0KKyAgICB9DQorDQorICAgIGZv
ciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspDQorICAg
IHsNCisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRV
UkVfVFlQRV9DT1VOVDsgdHlwZSsrKQ0KKyAgICB7DQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1
cmVzW3R5cGVdLnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspDQorICAgIHsNCisgICAgICAg
IG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgbVN0YXRl
LmFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7DQorICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOw0KKw0KKyAgICBt
VGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7DQorICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5V
TEwpOw0KKw0KKyAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOw0KKyAgICBkZWxldGUgbUlu
ZGV4RGF0YU1hbmFnZXI7DQorICAgIGRlbGV0ZSBtQmxpdDsNCisgICAgZGVsZXRlIG1MaW5lTG9v
cElCOw0KKw0KKyAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSkNCisgICAgew0KKyAgICAg
ICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsNCit9DQorDQordm9pZCBDb250ZXh0OjptYWtlQ3Vy
cmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQor
ICAgIG1EaXNwbGF5ID0gZGlzcGxheTsNCisgICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZp
Y2UoKTsNCisNCisgICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpDQorICAgIHsNCisgICAgICAgIG1E
ZXZpY2VDYXBzID0gbURpc3BsYXktPmdldERldmljZUNhcHMoKTsNCisNCisgICAgICAgIG1WZXJ0
ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisg
ICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcywgbURl
dmljZSk7DQorICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOw0KKw0KKyAgICAgICAgbVN1
cHBvcnRzU2hhZGVyTW9kZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQz
RFBTX1ZFUlNJT04oMywgMCk7DQorICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID0gbURp
c3BsYXktPmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlID0gbURpc3BsYXktPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7DQor
ICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbURpc3BsYXktPmdldEluc3RhbmNpbmdTdXBw
b3J0KCk7DQorDQorICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6
bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1h
eFRleHR1cmVIZWlnaHQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsNCisgICAgICAgIG1N
YXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsNCisgICAg
ICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsNCisg
ICAgICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7
DQorICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVs
PSVkIiwNCisgICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1
cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwp
Ow0KKw0KKyAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9DQor
ICAgICAgICB7DQorICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LA0KKyAgICAgICAgICAgIEQz
REZNVF9YOFI4RzhCOCwNCisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LA0KKyAgICAgICAgICAg
IEQzREZNVF9EMjRTOA0KKyAgICAgICAgfTsNCisNCisgICAgICAgIGludCBtYXggPSAwOw0KKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBz
aXplb2YoRDNERk9STUFUKTsgKytpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJvb2wgKm11
bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07
DQorICAgICAgICAgICAgbURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZm
ZXJGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsNCisgICAgICAgICAgICBtTXVsdGlTYW1w
bGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsNCisN
CisgICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+
PSAwOyAtLWopDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1w
bGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgp
DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7DQorICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBt
TWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsNCisNCisgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVl
cmllcyA9IG1EaXNwbGF5LT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBv
cnRzT2NjbHVzaW9uUXVlcmllcyA9IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQo
KTsNCisgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4
dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IG1EaXNwbGF5
LT5nZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0
c0Zsb2F0MzJUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1T
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzKTsNCisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1EaXNwbGF5LT5n
ZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZt
U3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsNCisgICAgICAgIG1TdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7
DQorICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdl
dEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0RlcHRo
VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpOw0KKw0KKyAgICAg
ICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0g
KDEgPDwgMTYpOw0KKw0KKyAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7
DQorICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7DQorICAgICAgICB9DQor
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorICAg
ICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7DQorICAgICAgICB9DQorDQorICAg
ICAgICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7DQorICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmco
KTsNCisNCisgICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOw0KKyAgICAgICAgbVN0YXRlLnZp
ZXdwb3J0WSA9IDA7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHN1cmZhY2UtPmdl
dFdpZHRoKCk7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRI
ZWlnaHQoKTsNCisNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7DQorICAgICAgICBtU3Rh
dGUuc2Npc3NvclkgPSAwOw0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2Ut
PmdldFdpZHRoKCk7DQorICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IHN1cmZhY2UtPmdl
dEhlaWdodCgpOw0KKw0KKyAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsNCisgICAgfQ0K
Kw0KKyAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdM
IG9iamVjdHMgYW5kIGFzc2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFtZXMNCisgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlZmF1bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERl
cHRoU3RlbmNpbCgpOw0KKw0KKyAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3
IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOw0KKyAgICBEZXB0aFN0ZW5jaWxidWZm
ZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRo
U3RlbmNpbCk7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVs
dEZyYW1lYnVmZmVyKGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7DQor
DQorICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOw0KKw0KKyAgICBpZiAo
ZGVmYXVsdFJlbmRlclRhcmdldCkNCisgICAgew0KKyAgICAgICAgZGVmYXVsdFJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQorICAgIGlmIChkZXB0aFN0ZW5jaWwpDQorICAgIHsN
CisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICB9DQorICAgIA0KKyAgICBt
YXJrQWxsU3RhdGVEaXJ0eSgpOw0KK30NCisNCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFs
bCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3RhdGUgaXMg
c2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lg0KK3ZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGly
dHkoKQ0KK3sNCisgICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgdCsrKQ0KKyAgICB7DQorICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7
DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGOyB0KyspDQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVGV4dHVyZVNl
cmlhbFZTW3RdID0gMDsNCisgICAgfQ0KKw0KKyAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSAw
Ow0KKyAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkRGVw
dGhidWZmZXJTZXJpYWwgPSAwOw0KKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAw
Ow0KKyAgICBtQXBwbGllZElCU2VyaWFsID0gMDsNCisgICAgbURlcHRoU3RlbmNpbEluaXRpYWxp
emVkID0gZmFsc2U7DQorICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisgICAgbVZlcnRleERlY2xh
cmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsNCisNCisgICAgbUNsZWFyU3RhdGVEaXJ0eSA9
IHRydWU7DQorICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1EZXB0aFN0YXRlRGly
dHkgPSB0cnVlOw0KKyAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtQmxlbmRTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVBv
bHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0g
dHJ1ZTsNCisgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtRGl0aGVyU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQorICAgIG1EeFVuaWZv
cm1zRGlydHkgPSB0cnVlOw0KKyAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30N
CisNCit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQ0KK3sNCisgICAgbUR4VW5p
Zm9ybXNEaXJ0eSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0
KCkNCit7DQorICAgIGlmIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVT
RVRfRVhUKQ0KKyAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VU
X0VYVDsNCisgICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0Ojpp
c0NvbnRleHRMb3N0KCkNCit7DQorICAgIHJldHVybiBtQ29udGV4dExvc3Q7DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkNCit7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0g
cmVkOw0KKyAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47DQorICAgIG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7DQorICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYWxwaGEgPSBhbHBoYTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRo
KGZsb2F0IGRlcHRoKQ0KK3sNCisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOw0K
K30NCisNCit2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkNCit7DQor
ICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jdWxs
RmFjZSAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFi
bGVkOw0KKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCiti
b29sIENvbnRleHQ6OmlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
U3RhdGUuY3VsbEZhY2U7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVt
IG1vZGUpDQorew0KKyAgICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5jdWxsTW9kZSA9IG1vZGU7DQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51
bSBmcm9udCkNCit7DQorICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQ0KKyAgICB7
DQorICAgICAgICBtU3RhdGUuZnJvbnRGYWNlID0gZnJvbnQ7DQorICAgICAgICBtRnJvbnRGYWNl
RGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhUZXN0
KGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAg
bURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojpp
c0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRl
c3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMp
DQorew0KKyAgICBpZiAobVN0YXRlLmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7DQorICAgICAgICBtRGVwdGhTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFu
Z2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpDQorew0KKyAgICBtU3RhdGUuek5lYXIgPSB6TmVh
cjsNCisgICAgbVN0YXRlLnpGYXIgPSB6RmFyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJs
ZW5kKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmQgIT0gZW5hYmxlZCkN
CisgICAgew0KKyAgICAgICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsNCisgICAgICAgIG1CbGVu
ZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNCbGVu
ZEVuYWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5ibGVuZDsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRl
c3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkNCit7DQorICAgIGlm
IChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gc291cmNlUkdCIHx8DQorICAgICAgICBtU3RhdGUu
c291cmNlQmxlbmRBbHBoYSAhPSBzb3VyY2VBbHBoYSB8fA0KKyAgICAgICAgbVN0YXRlLmRlc3RC
bGVuZFJHQiAhPSBkZXN0UkdCIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0g
ZGVzdEFscGhhKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBzb3Vy
Y2VSR0I7DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsNCisgICAgICAg
IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gc291cmNlQWxwaGE7DQorICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7DQorICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0g
dHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQg
cmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpDQorew0KKyAgICBpZiAo
bVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29s
b3IuZ3JlZW4gIT0gZ3JlZW4gfHwNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0g
Ymx1ZSB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpDQorICAg
IHsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsNCisgICAgICAgIG1TdGF0
ZS5ibGVuZENvbG9yLmdyZWVuID0gZ3JlZW47DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5i
bHVlID0gYmx1ZTsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7DQor
ICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFF
cXVhdGlvbikNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVh
dGlvbiB8fA0KKyAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0
aW9uKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0
aW9uOw0KKyAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IGFscGhhRXF1YXRpb247
DQorICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3Rh
dGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5j
aWxUZXN0ID0gZW5hYmxlZDsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxUZXN0Ow0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVm
LCBHTHVpbnQgc3RlbmNpbE1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGdW5jICE9
IHN0ZW5jaWxGdW5jIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVm
IHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNpbE1hc2spDQorICAgIHsN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOw0KKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNpbFJlZiA6IDA7DQorICAg
ICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSBzdGVuY2lsTWFzazsNCisgICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVu
Y2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1Jl
ZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJh
Y2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
UmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNr
ICE9IHN0ZW5jaWxCYWNrTWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
RnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9
IChzdGVuY2lsQmFja1JlZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOw0KKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsNCisgICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVu
Y2lsV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsV3JpdGVtYXNrKQ0KK3sNCisgICAgaWYgKG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spDQorICAgIHsNCisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsNCisgICAgICAgIG1T
dGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpz
ZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorew0K
KyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVt
YXNrKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVu
Y2lsQmFja1dyaXRlbWFzazsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVudW0g
c3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQ
YXNzRGVwdGhQYXNzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2ls
RmFpbCB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxQ
YXNzRGVwdGhGYWlsIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0g
c3RlbmNpbFBhc3NEZXB0aFBhc3MpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRmFp
bCA9IHN0ZW5jaWxGYWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0g
c3RlbmNpbFBhc3NEZXB0aEZhaWw7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3MgPSBzdGVuY2lsUGFzc0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9
IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJh
dGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykNCit7DQorICAgIGlmIChtU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fA0KKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0g
c3RlbmNpbEJhY2tGYWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3MgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7DQorICAgICAgICBtU3Rl
bmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUucG9seWdv
bk9mZnNldEZpbGwgPSBlbmFibGVkOw0KKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5
ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZp
bGxFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZp
bGw7DQorDQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZs
b2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykNCit7DQorICAgIGlmIChtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvciAhPSBmYWN0b3IgfHwNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5p
dHMgIT0gdW5pdHMpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
ID0gZmFjdG9yOw0KKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOw0K
KyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpDQor
ew0KKyAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSAhPSBlbmFibGVkKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsNCisg
ICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENv
bnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsNCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnNh
bXBsZUNvdmVyYWdlICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZSA9IGVuYWJsZWQ7DQorICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGlu
dmVydCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8
fA0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVydCkNCisgICAg
ew0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsNCisgICAgICAg
IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsNCisgICAgICAgIG1TYW1wbGVT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNjaXNz
b3JUZXN0KGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0g
ZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsN
CisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQorYm9v
bCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVN0YXRlLnNjaXNzb3JUZXN0Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERpdGhlcihib29s
IGVuYWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQ0KKyAgICB7
DQorICAgICAgICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsNCisgICAgICAgIG1EaXRoZXJTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGl0aGVyRW5h
YmxlZCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpzZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkNCit7DQorICAgIG1TdGF0ZS5s
aW5lV2lkdGggPSB3aWR0aDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1h
cEhpbnQoR0xlbnVtIGhpbnQpDQorew0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0g
aGludDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVI
aW50KEdMZW51bSBoaW50KQ0KK3sNCisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2
ZUhpbnQgPSBoaW50Ow0KKyAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8gc2hhZGVy
IHRyYW5zbGF0b3Igc28gd2UgY2FuIHdyaXRlDQorICAgIC8vIGRkeCwgZGR4X2NvYXJzZSwgb3Ig
ZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50Lg0KKyAgICAvLyBJZ25vcmUgZm9yIG5vdy4g
SXQgaXMgdmFsaWQgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUgaGludC4NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4Ow0K
KyAgICBtU3RhdGUudmlld3BvcnRZID0geTsNCisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3
aWR0aDsNCisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0Ow0KK30NCisNCit2b2lk
IENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwg
bVN0YXRlLnNjaXNzb3JZICE9IHkgfHwgDQorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9
IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkNCisgICAgew0KKyAgICAg
ICAgbVN0YXRlLnNjaXNzb3JYID0geDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7DQor
ICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gd2lkdGg7DQorICAgICAgICBtU3RhdGUuc2Np
c3NvckhlaWdodCA9IGhlaWdodDsNCisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7
DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJv
b2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuY29s
b3JNYXNrUmVkICE9IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwNCisg
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0Fs
cGhhICE9IGFscGhhKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVk
Ow0KKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0dyZWVuID0gZ3JlZW47DQorICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7DQorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEg
PSBhbHBoYTsNCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQor
DQordm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQ0KK3sNCisgICAgaWYgKG1T
dGF0ZS5kZXB0aE1hc2sgIT0gbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRlcHRoTWFz
ayA9IG1hc2s7DQorICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKQ0K
K3sNCisgICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7DQorfQ0KKw0KK0dMdWludCBD
b250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXREcmF3
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJh
bWVidWZmZXI7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsNCit9DQor
DQorR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6
OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBOVUxMOw0KKyAgICANCisgICAgc3dpdGNoICh0YXJnZXQpDQorICAgIHsNCisg
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6DQorICAgICAgICBxdWVyeU9iamVj
dCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOw0K
KyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFX0VYVDoNCisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOw0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIEFTU0VSVChmYWxzZSk7DQorICAgIH0NCisN
CisgICAgaWYgKHF1ZXJ5T2JqZWN0KQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gcXVlcnlPYmpl
Y3QtPmlkKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkNCit7DQorICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZDsNCit9DQor
DQorY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJT
dGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBz
aXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpDQorew0K
KyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChi
b3VuZEJ1ZmZlcik7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6
ZSA9IHNpemU7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9
IHR5cGU7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXpl
ZCA9IG5vcm1hbGl6ZWQ7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
U3RyaWRlID0gc3RyaWRlOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bVBvaW50ZXIgPSBwb2ludGVyOw0KK30NCisNCitjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOw0KK30NCisN
Citjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmlidXRl
cygpDQorew0KKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkNCit7DQorICAgIG1T
dGF0ZS5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250ZXh0Ojpn
ZXRQYWNrQWxpZ25tZW50KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdu
bWVudDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxp
Z25tZW50KQ0KK3sNCisgICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsNCit9
DQorDQorR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OnNl
dFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpDQorew0KKyAgICBtU3Rh
dGUucGFja1JldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsNCit9DQorDQorYm9vbCBD
b250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
U3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUJ1ZmZlcigpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVy
KCk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkNCit7DQorICAgIHJl
dHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVQcm9ncmFtKCk7DQorfQ0KKw0KK0dMdWludCBD
b250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpDQorew0KKyAgICByZXR1cm4gbVJlc291
cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6
Y3JlYXRlVGV4dHVyZSgpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRl
VGV4dHVyZSgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkN
Cit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsN
Cit9DQorDQorLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQ0KK0dMdWludCBD
b250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpDQorew0KKyAgICBHTHVpbnQgaGFuZGxlID0gbUZy
YW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7DQorDQorICAgIG1GcmFtZWJ1ZmZl
ck1hcFtoYW5kbGVdID0gTlVMTDsNCisNCisgICAgcmV0dXJuIGhhbmRsZTsNCit9DQorDQorR0x1
aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNlKCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRmVu
Y2VIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsNCisNCisgICAgbUZlbmNlTWFwW2hhbmRsZV0g
PSBuZXcgRmVuY2UobURpc3BsYXkpOw0KKw0KKyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCisv
LyBSZXR1cm5zIGFuIHVudXNlZCBxdWVyeSBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1
ZXJ5KCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtUXVlcnlIYW5kbGVBbGxvY2F0b3IuYWxs
b2NhdGUoKTsNCisNCisgICAgbVF1ZXJ5TWFwW2hhbmRsZV0gPSBOVUxMOw0KKw0KKyAgICByZXR1
cm4gaGFuZGxlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKQ0KK3sNCisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQ0K
KyAgICB7DQorICAgICAgICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisg
ICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpDQorew0KKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxl
dGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtKTsNCisgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsN
Cit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQ0KK3sN
CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpDQorICAgIHsN
CisgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7DQorICAgIH0NCisNCisgICAgbVJlc291
cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsNCit9DQorDQordm9pZCBDb250ZXh0
OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikNCit7DQorICAgIGlmICht
UmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkNCisgICAgew0K
KyAgICAgICAgZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorICAgIH0NCisgICAg
DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1
ZmZlcikNCit7DQorICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVj
dCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsNCisNCisgICAgaWYgKGZyYW1l
YnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAg
ZGV0YWNoRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOw0KKw0KKyAgICAgICAgbUZyYW1lYnVmZmVy
SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsNCisgICAg
ICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlck9iamVjdC0+c2Vjb25kOw0KKyAgICAgICAgbUZyYW1lYnVm
ZmVyTWFwLmVyYXNlKGZyYW1lYnVmZmVyT2JqZWN0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkNCit7DQorICAgIEZlbmNlTWFwOjppdGVy
YXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsNCisNCisgICAgaWYgKGZl
bmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkNCisgICAgew0KKyAgICAgICAgbUZlbmNlSGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsNCisgICAgICAgIGRlbGV0
ZSBmZW5jZU9iamVjdC0+c2Vjb25kOw0KKyAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2Jq
ZWN0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVF1ZXJ5KEdMdWludCBx
dWVyeSkNCit7DQorICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9IG1RdWVyeU1h
cC5maW5kKHF1ZXJ5KTsNCisgICAgaWYgKHF1ZXJ5T2JqZWN0ICE9IG1RdWVyeU1hcC5lbmQoKSkN
CisgICAgew0KKyAgICAgICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVlcnlPYmpl
Y3QtPmZpcnN0KTsNCisgICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vjb25kKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsNCisgICAgICAg
IH0NCisgICAgICAgIG1RdWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7DQorICAgIH0NCit9DQor
DQorQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJl
dHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsNCit9DQorDQorU2hhZGVy
ICpDb250ZXh0OjpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsNCit9DQorDQorUHJvZ3JhbSAqQ29udGV4
dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsNCit9DQorDQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXIt
PmdldFRleHR1cmUoaGFuZGxlKTsNCit9DQorDQorUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRS
ZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsNCit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRl
eHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigpDQorew0KKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIo
bVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0Ojpn
ZXREcmF3RnJhbWVidWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1Cb3VuZERyYXdGcmFtZWJ1ZmZl
cjsNCit9DQorDQordm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1
ZmZlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihi
dWZmZXIpOw0KKw0KKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIp
KTsNCit9DQorDQordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVk
IGludCBidWZmZXIpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9j
YXRpb24oYnVmZmVyKTsNCisNCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0
QnVmZmVyKGJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1
aW50IHRleHR1cmUpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxv
Y2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQpOw0KKw0KKyAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1
cmUpKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRl
eHR1cmUpDQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9u
KHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtU
RVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJl
KSk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpDQorew0KKyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkNCisg
ICAgew0KKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1
ZmZlcigpOw0KKyAgICB9DQorDQorICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1
ZmZlcjsNCit9DQorDQordm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBm
cmFtZWJ1ZmZlcikNCit7DQorICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0K
KyAgICB7DQorICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1l
YnVmZmVyKCk7DQorICAgIH0NCisNCisgICAgbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1l
YnVmZmVyOw0KKw0KKyAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJi
dWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7DQorDQorICAgIG1TdGF0ZS5yZW5kZXJidWZm
ZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsNCit9DQorDQordm9pZCBDb250
ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQ0KK3sNCisgICAgR0x1aW50IHByaW9yUHJv
Z3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsNCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFt
ID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUgdHJ5aW5nIHRv
IGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLg0KKw0KKyAgICBpZiAocHJp
b3JQcm9ncmFtICE9IHByb2dyYW0pDQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKm5ld1Byb2dy
YW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOw0KKyAgICAgICAgUHJv
Z3JhbSAqb2xkUHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJpb3JQcm9n
cmFtKTsNCisgICAgICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorICAgICAgICBt
RHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsNCisNCisgICAgICAgIGlmIChuZXdQcm9ncmFtKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgDQorICAgICAgICBpZiAob2xkUHJvZ3JhbSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkNCit7
DQorICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5
RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIA0KKyAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0
aXZlIHF1ZXJ5IG9iamVjdCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAg
DQorICAgIC8vIHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsIGlmICANCisgICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBm
b3IgZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4g
DQorICAgIC8vIGV4aXN0aW5nIHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNo
IDx0YXJnZXQ+LCBvciBpZiA8aWQ+IGlzIHRoZQ0KKyAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0
IG5hbWUgZm9yIGFueSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMN
CisgICAgLy8gZ2VuZXJhdGVkLg0KKw0KKyAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBh
cmUgYWN0aXZlDQorICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24g
YXJlIHN1cHBvcnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrDQorICAgIC8vIHNlcGFyYXRlbHkg
dGhhdDoNCisgICAgLy8gICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJl
bnQgYWN0aXZlIHF1ZXJ5IGZvciBhbnkgdGFyZ2V0L3R5cGUNCisgICAgLy8gICAgYikgVGhlcmUg
YXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRo
ZSBjYXNlDQorICAgIC8vICAgICAgIG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULA0KKyAgICAvLyAgICAgICBubyBx
dWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0
aGVyLg0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykNCisg
ICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgUXVlcnlUeXBlIHFUeXBlOw0KKyAgICBz
d2l0Y2ggKHRhcmdldCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0VYVDogDQorICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgDQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkVfRVhUOiANCisgICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNF
UlZBVElWRTsgDQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiANCisgICAgICAgIEFT
U0VSVChmYWxzZSk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUXVlcnkgKnF1
ZXJ5T2JqZWN0ID0gZ2V0UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7DQorDQorICAgIC8vIGNo
ZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMNCisgICAgaWYgKCFx
dWVyeU9iamVjdCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICAvLyBjaGVjayBmb3IgdHlwZSBtaXNtYXRjaA0KKyAg
ICBpZiAocXVlcnlPYmplY3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpDQorICAgIHsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgLy8g
c2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldA0KKyAgICBtU3RhdGUuYWN0
aXZlUXVlcnlbcVR5cGVdLnNldChxdWVyeU9iamVjdCk7DQorDQorICAgIC8vIGJlZ2luIHF1ZXJ5
DQorICAgIHF1ZXJ5T2JqZWN0LT5iZWdpbigpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmVuZFF1
ZXJ5KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorDQorICAgIHN3
aXRjaCAodGFyZ2V0KQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURf
RVhUOiANCisgICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElW
RV9FWFQ6IA0KKyAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFOyANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNT
RVJUKGZhbHNlKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOw0KKw0KKyAgICBpZiAo
cXVlcnlPYmplY3QgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBxdWVyeU9iamVjdC0+ZW5kKCk7DQor
DQorICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOw0KK30NCisNCit2b2lk
IENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQ0KK3sNCisg
ICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsNCisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0g
YnVmZmVyOw0KKyAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSAwKQ0KKyAgICB7DQor
ICAgICAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBidWZmZXI7DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnJlbmRlcmJ1ZmZlcikNCit7DQorICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0
ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsNCisgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5z
ZXRTdG9yYWdlKHJlbmRlcmJ1ZmZlcik7DQorfQ0KKw0KK0ZyYW1lYnVmZmVyICpDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRnJhbWVidWZmZXJN
YXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsN
CisNCisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitGZW5jZSAq
Q29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkNCit7DQorICAgIEZlbmNlTWFw
OjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChm
ZW5jZSA9PSBtRmVuY2VNYXAuZW5kKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0K
KyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7
DQorICAgIH0NCit9DQorDQorUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBo
YW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVudW0gdHlwZSkNCit7DQorICAgIFF1ZXJ5TWFwOjppdGVy
YXRvciBxdWVyeSA9IG1RdWVyeU1hcC5maW5kKGhhbmRsZSk7DQorDQorICAgIGlmIChxdWVyeSA9
PSBtUXVlcnlNYXAuZW5kKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0
ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhh
bmRsZSwgdHlwZSk7DQorICAgICAgICAgICAgcXVlcnktPnNlY29uZC0+YWRkUmVmKCk7DQorICAg
ICAgICB9DQorICAgICAgICByZXR1cm4gcXVlcnktPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitC
dWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkNCit7DQorICAgIHJldHVybiBtU3RhdGUu
YXJyYXlCdWZmZXIuZ2V0KCk7DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFy
cmF5QnVmZmVyKCkNCit7DQorICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpOw0KK30NCisNCitQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpDQorew0K
KyAgICBpZiAoIW1DYWNoZWRDdXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3Vy
cmVudFByb2dyYW0pOw0KKyAgICB9DQorICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07
DQorfQ0KKw0KK1RleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkNCit7DQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0
aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOw0KK30NCisNCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmVDdWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRV
UkVfQ1VCRSkpOw0KK30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1
bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkNCit7DQorICAgIEdMdWludCB0
ZXhpZCA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOw0KKw0KKyAg
ICBpZiAodGV4aWQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVu
dCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQNCisgICAgew0KKyAgICAgICAg
c3dpdGNoICh0eXBlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5n
ZXQoKTsNCisgICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uZ2V0KCk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4
dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcykNCit7DQorICAg
IHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjog
ICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7ICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0RFUFRIX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNr
OyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFT
SzoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7DQorICAgICAgICBw
YXJhbXNbMV0gPSBtU3RhdGUuY29sb3JNYXNrR3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBt
U3RhdGUuY29sb3JNYXNrQmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1h
c2tBbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVS
QUdFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVu
Y2lsVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfVEVT
VDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
aXRoZXI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09OVEVY
VF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDog
R0xfRkFMU0U7IGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0
RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQ0KK3sNCisgICAgLy8gUGxlYXNl
IG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRG
bG9hdHYgaW1wbGVtZW50YXRpb24NCisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBm
bG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcw0KKyAg
ICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3Vs
ZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55DQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1h
a2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4NCisgICAgc3dpdGNo
IChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZVZhbHVlOyAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTog
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBv
bHlnb25PZmZzZXRGYWN0b3I7ICBicmVhazsNCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6DQorICAgICAgICBwYXJh
bXNbMF0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFt
c1sxXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6DQorICAgICAgICBwYXJh
bXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsNCisgICAgICAgIHBhcmFt
c1sxXSA9IHN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFX01BWF9TTTMgOiBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOg0KKyAgICAgICAgcGFyYW1z
WzBdID0gbVN0YXRlLnpOZWFyOw0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7DQor
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOg0KKyAgICAg
ICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7DQorICAgICAgICBwYXJh
bXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJd
ID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfQkxFTkRfQ09MT1I6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5y
ZWQ7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbjsNCisgICAg
ICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7DQorICAgICAgICBwYXJhbXNb
M10gPSBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRl
ZmF1bHQ6DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRy
dWU7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zKQ0KK3sNCisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlz
IG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50YXRpb24N
CisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFj
dCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcw0KKyAgICAvLyBHZXRJbnRlZ2VydiBhcyBp
dHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24g
aW4gYW55DQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0
aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIA0KKyAgICAvLyBDb250
ZXh0OjpnZXRGbG9hdHYuDQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNl
IEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOyAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZF
Q1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7
ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTOiAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KTsgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6
ICAgKnBhcmFtcyA9IGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFt
cyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9N
QVhfUkVOREVSQlVGRkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5k
ZXJidWZmZXJEaW1lbnNpb24oKTsgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1B
VFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7DQorICAg
ICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2
YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFDQorICAgICAgY2FzZSBH
TF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3
RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRUFEX0ZS
QU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZm
ZXI7ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklO
RElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9HRU5F
UkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1p
cG1hcEhpbnQ7ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFE
RVJfREVSSVZBVElWRV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRl
cml2YXRpdmVIaW50OyBicmVhazsNCisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVS
RTApOyBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxCYWNrRnVuYzsgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19SRUY6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
OyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxV
RV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbDsgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbDsgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
UGFzczsgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JM
RU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVu
ZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFU
SU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhB
OiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsNCisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9URVhU
VVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRleHR1cmVEaW1l
bnNpb24oKTsgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCk7ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9S
TUFUUzogICANCisgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHM7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOg0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKTsNCisgICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAhPSAwKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICB9DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAg
ICAgICAgDQorICAgICAgY2FzZSBHTF9TQU1QTEVTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisg
ICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVG
RkVSX0NPTVBMRVRFKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FN
UExFX0JVRkZFUlM6DQorICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNh
bXBsZXMoKSAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOg0KKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7DQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAgKnBh
cmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGds
OjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9NQVhfVklFV1BPUlRfRElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgbWF4RGlt
ZW5zaW9uID0gc3RkOjptYXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRN
YXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKTsNCisgICAgICAgICAgICBwYXJhbXNbMF0gPSBtYXhE
aW1lbnNpb247DQorICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVf
Rk9STUFUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVy
ZXMoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7DQorICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOw0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJl
cygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1ZJRVdQT1JUOg0KKyAgICAgICAgcGFy
YW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52
aWV3cG9ydFk7DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsNCisg
ICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsNCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3Rh
dGUuc2Npc3Nvclg7DQorICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7DQorICAg
ICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNd
ID0gbVN0YXRlLnNjaXNzb3JIZWlnaHQ7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdM
X0NVTExfRkFDRV9NT0RFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxN
b2RlOyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAg
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9H
UkVFTl9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQ
SEFfQklUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsNCisNCisg
ICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9SRURfQklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUo
KTsgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJh
bXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRCbHVlU2l6
ZSgpOyAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFy
YW1zID0gY29sb3JidWZmZXItPmdldEFscGhhU2l6ZSgpOyBicmVhazsNCisgICAgICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6DQorICAgICAgICB7
DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFt
ZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7DQorDQorICAgICAgICAgICAgaWYgKGRlcHRo
YnVmZmVyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGRlcHRo
YnVmZmVyLT5nZXREZXB0aFNpemUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxz
ZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JJVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0K
Kw0KKyAgICAgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOg0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFj
dGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisN
CisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRd
W21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6DQorICAgICAgICB7DQor
ICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZl
U2FtcGxlciA+IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVtt
U3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICAg
ICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgKnBhcmFtcyA9IDE7
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNf
T0VTOg0KKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOw0KKyAgICAg
ICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBh
cmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVt
UGFyYW1zKQ0KK3sNCisgICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVk
IGZvciBERVBUSF9DTEVBUl9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uDQorICAgIC8vIGlz
IEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBF
UyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUNCisgICAgLy8gdG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBz
dG9yZWQgaW50ZXJuYWxseSBhcyBhIGZsb2F0LCBhbmQgc28gd291bGQgcmVxdWlyZSBjb252ZXJz
aW9uDQorICAgIC8vIGlmIHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNl
IHRoaXMgY29udmVyc2lvbiBpcyBhbHJlYWR5IGltcGxlbWVudGVkIA0KKyAgICAvLyBpbiB0aGUg
Y2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlw
ZWQgc3RhdGUgdmFyaWFibGUsIHdlDQorICAgIC8vIHBsYWNlIERFUFRIX0NMRUFSX1ZBTFVFIHdp
dGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxs
aW5nDQorICAgIC8vIGFwcGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7DQor
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51
bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJ
QlM6DQorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBj
YXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6DQorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUzoNCisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUzoNCisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAg
ICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoNCisgICAgICBjYXNlIEdM
X01BWF9SRU5ERVJCVUZGRVJfU0laRToNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6DQorICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6
DQorICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzoNCisgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkc6DQorICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzoN
CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToNCisgICAgICBjYXNlIEdMX1BBQ0tfQUxJ
R05NRU5UOg0KKyAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToNCisg
ICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6DQorICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDoNCisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJ
TlRfT0VTOg0KKyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6DQorICAgICAgY2FzZSBHTF9HUkVFTl9C
SVRTOg0KKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfQUxQSEFfQklU
UzoNCisgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJ
VFM6DQorICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOg0KKyAgICAg
IGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6DQorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOg0KKyAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6
DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6DQorICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1JFRjoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDoNCisgICAgICBjYXNlIEdMX1NU
RU5DSUxfUEFTU19ERVBUSF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X1BBU1M6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzoNCisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JF
RjoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1M6DQorICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOg0KKyAgICAgIGNhc2Ug
R0xfQkxFTkRfU1JDX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToNCisgICAg
ICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6
DQorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6DQorICAgICAgY2FzZSBHTF9CTEVO
RF9FUVVBVElPTl9BTFBIQToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOg0KKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5D
SUxfQ0xFQVJfVkFMVUU6DQorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOg0KKyAgICAgIGNh
c2UgR0xfTUFYX1RFWFRVUkVfU0laRToNCisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkU6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisgICAgICBjYXNlIEdM
X1NBTVBMRVM6DQorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6
DQorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoNCisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoNCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklO
RElOR19DVUJFX01BUDoNCisgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVH
WV9FWFQ6DQorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQor
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsN
CisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNf
QU5HTEU6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBs
ZXMoKSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7DQorICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAg
ICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICAq
dHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsNCisgICAgICAgIH0N
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgY2FzZSBH
TF9TQ0lTU09SX0JPWDoNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsN
CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOg0KKyAgICAgIGNhc2UgR0xfU0FNUExF
X0NPVkVSQUdFX0lOVkVSVDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoNCisgICAg
ICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2gg
RElUSEVSIGFyZSBuYXR1cmFsIHRvIElzRW5hYmxlZCwNCisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0
e1R5cGV9diBxdWVyaWVzLg0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdF
OiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1
cmFsDQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6DQorICAgICAgY2FzZSBHTF9TQ0lT
U09SX1RFU1Q6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6DQorICAgICAgY2FzZSBHTF9E
RVBUSF9URVNUOg0KKyAgICAgIGNhc2UgR0xfQkxFTkQ6DQorICAgICAgY2FzZSBHTF9ESVRIRVI6
DQorICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOg0KKyAgICAgICAgew0K
KyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsNCisgICAgICAgICAgICAqbnVtUGFyYW1zID0g
MTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJ
VEVNQVNLOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsNCisgICAg
ICAgICAgICAqbnVtUGFyYW1zID0gNDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOg0KKyAgICAgIGNhc2UgR0xfUE9MWUdP
Tl9PRkZTRVRfVU5JVFM6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6DQor
ICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRToNCisgICAgICBjYXNlIEdMX0xJTkVfV0lE
VEg6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAg
ICAgICAqbnVtUGFyYW1zID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOg0KKyAgICAgIGNhc2UgR0xfQUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOg0KKyAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6DQorICAgICAg
ICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsNCisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ09M
T1JfQ0xFQVJfVkFMVUU6DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoNCisgICAgICAgIHsN
CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQor
Ly8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZh
Y2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQNCisvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UNCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wg
aWdub3JlVmlld3BvcnQpDQorew0KKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3Qg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8
fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgZmFsc2UpOw0KKyAgICB9DQorDQorICAgIC8vIGlmIHRoZXJlIGlzIG5v
IGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1l
bnQNCisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBv
bmx5IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4NCisgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXJPYmplY3QgPSBOVUxMOw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdl
dENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAgIHsNCisgICAgICAgIHJlbmRlcmJ1
ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOw0KKyAgICB9DQorICAgIGlmICghcmVu
ZGVyYnVmZmVyT2JqZWN0KQ0KKyAgICB7DQorICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUg
cmVuZGVyYnVmZmVyIGZvciBGQk8uIik7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0N
CisNCisgICAgYm9vbCByZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7DQorICAgIHVuc2lnbmVk
IGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgp
Ow0KKyAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtQXBwbGllZFJlbmRl
clRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdldFNlcmlhbDsNCisgICAgICAgIG1TY2lzc29yU3Rh
dGVEaXJ0eSA9IHRydWU7IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQgdG8gcmVuZGVy
IHRhcmdldCdzIHNpemUtLSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHJlbmRlciB0
YXJnZXRzLg0KKyAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7DQorICAgICAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2Vy
aWFsID0gMDsNCisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOw0KKyAg
ICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUp
DQorICAgIHsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgIGRlcHRoU3RlbmNpbCA9IGRlcHRo
YnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsNCisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0N
CisgICAgICAgIA0KKyAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0
U2VyaWFsKCk7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgUmVuZGVyYnVm
ZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIo
KTsNCisgICAgICAgIGRlcHRoU3RlbmNpbCA9IHN0ZW5jaWxidWZmZXItPmdldERlcHRoU3RlbmNp
bCgpOw0KKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBz
dGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7DQorICAgIH0N
CisNCisgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJp
YWwgfHwNCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRTdGVuY2lsYnVm
ZmVyU2VyaWFsIHx8DQorICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQ0KKyAgICB7
DQorICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7
DQorICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7
DQorICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2Vy
aWFsOw0KKyAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAoZGVwdGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBkZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlh
bGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdlZCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFy
Z2V0KCk7DQorICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QNCisgICAgICAgIH0N
CisgICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRhcmdldERlc2MpOw0KKyAg
ICAgICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCA9IHRydWU7DQorICAgICAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RWSUVXUE9SVDkgdmlld3Bv
cnQ7DQorDQorICAgIGZsb2F0IHpOZWFyID0gY2xhbXAwMShtU3RhdGUuek5lYXIpOw0KKyAgICBm
bG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7DQorDQorICAgIGlmIChpZ25vcmVWaWV3
cG9ydCkNCisgICAgew0KKyAgICAgICAgdmlld3BvcnQuWCA9IDA7DQorICAgICAgICB2aWV3cG9y
dC5ZID0gMDsNCisgICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lk
dGg7DQorICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7
DQorICAgICAgICB2aWV3cG9ydC5NaW5aID0gMC4wZjsNCisgICAgICAgIHZpZXdwb3J0Lk1heFog
PSAxLjBmOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgdmlld3BvcnQuWCA9
IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52aWV3
cG9ydFksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsN
CisgICAgICAgIHZpZXdwb3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBM
LCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2Fz
dDxMT05HPih2aWV3cG9ydC5YKSk7DQorICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFtcCht
U3RhdGUudmlld3BvcnRIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0
RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOw0KKyAgICAgICAg
dmlld3BvcnQuTWluWiA9IHpOZWFyOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7DQor
ICAgIH0NCisNCisgICAgaWYgKHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0
IDw9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJl
bmRlcg0KKyAgICB9DQorDQorICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmlld3Bv
cnRJbml0aWFsaXplZCB8fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXplb2Yg
bVNldFZpZXdwb3J0KSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9y
dCgmdmlld3BvcnQpOw0KKyAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7DQorICAgICAg
ICBtVmlld3BvcnRJbml0aWFsaXplZCA9IHRydWU7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5
ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQ0KKyAgICB7
DQorICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIFJFQ1QgcmVjdDsNCisgICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUuc2Np
c3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0K
KyAgICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7DQorICAgICAgICAgICAgcmVj
dC5yaWdodCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsIDBM
LCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOw0KKyAgICAgICAg
ICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7DQor
ICAgICAgICB9DQorDQorICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAg
fQ0KKw0KKyAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZvcm1zRGlydHkp
DQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOw0KKyAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNp
emUgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOw0KKyAgICAg
ICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3Bv
cnQuSGVpZ2h0fTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBp
eGVsU2l6ZSwgMSwgeHkpOw0KKw0KKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZv
ciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLg0KKyAg
ICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsN
CisgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYs
IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYs
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBt
U3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOw0KKw0KKyAgICAgICAgR0xpbnQgZGVwdGggPSBw
cm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxvYXQgZHpb
Ml0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9Ow0KKyAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOw0KKw0KKyAg
ICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxv
Y2F0aW9uKCk7DQorICAgICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFy
LCB6RmFyIC0gek5lYXJ9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihk
ZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7DQorICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0g
ZmFsc2U7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KKy8vIEFwcGxpZXMg
dGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVu
ZGluZywgc3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENv
bnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0K
Kw0KKyAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1CaW5hcnktPmdldER4RnJvbnRDQ1dMb2Nh
dGlvbigpOw0KKyAgICBHTGludCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOw0K
KyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsNCisN
CisgICAgR0xpbnQgcG9pbnRzT3JMaW5lcyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uKCk7DQorICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2Rl
KGRyYXdNb2RlKTsNCisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxp
bmVzLCAxLCAmYWx3YXlzRnJvbnQpOw0KKw0KKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICpp
ZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7DQorICAgIGJvb2wg
emVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7DQor
ICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcg
d2l0aCBhIHplcm8gY29sb3INCisgICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIgZHJh
d3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwNCisgICAgLy8gc2V0IGEgbm9u
emVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQg
bm8NCisgICAgLy8gZHJhd2luZyBpcyBkb25lLg0KKyAgICAvLyBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5DQorDQorICAgIGlmIChtQ3Vs
bFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0
YXRlLmN1bGxGYWNlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxs
TW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExN
T0RFLCBEM0RDVUxMX05PTkUpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUN1bGxTdGF0ZURp
cnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpDQorICAg
IHsNCisgICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6
Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1E
ZXB0aFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIXplcm9Db2xvck1h
c2tBbGxvd2VkICYmIChtTWFza1N0YXRlRGlydHkgfHwgbUJsZW5kU3RhdGVEaXJ0eSkpDQorICAg
IHsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICAgICAgbU1hc2tTdGF0
ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUJsZW5kU3RhdGVEaXJ0eSkNCisg
ICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5ibGVuZCkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsN
CisNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5U
X0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
QUxQSEEgJiYNCisgICAgICAgICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05T
VEFOVF9BTFBIQSAmJiBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFO
VF9BTFBIQSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBlczJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5i
bGVuZENvbG9yKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhh
KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSkpOw0KKyAgICAgICAg
ICAgIH0NCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNC
TEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJk
eDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZXMyZHg6OkNvbnZlcnRCbGVu
ZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCKSk7DQorDQorICAgICAgICAgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCANCisgICAgICAg
ICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgfHwg
DQorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uQWxwaGEpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0K
Kw0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVO
REFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkp
Ow0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxF
TkRBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZEFscGhhKSk7
DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1BB
TFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsN
CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAg
ZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVN0ZW5jaWxTdGF0
ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5z
dGVuY2lsVGVzdCAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+aGFzU3RlbmNpbCgpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFC
TEUsIFRSVUUpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RX
T1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1
cHBvcnRlZCBieSBEM0Q5DQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQz
RFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsNCisgICAgICAgICAgICBjb25z
dCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJ
TE1BU0s7DQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19T
VEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsNCisgICAgICAgICAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNr
IHx8IA0KKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgfHwgDQorICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3Rh
dGUuc3RlbmNpbEJhY2tNYXNrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJS
KCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVl
cywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsNCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAg
ICAgICAgICB9DQorDQorICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhl
IHN0ZW5jaWwgcmVmDQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAgICAgICAgICAg
R0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgp
KSAtIDE7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NU
RU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCANCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNp
bEZ1bmMpKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUu
ZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJ
TFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0
ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNE
UlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOw0KKw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJ
TFpGQUlMLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252
ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhQYXNzKSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29u
KG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6
IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1h
eFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/
IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNp
bEJhY2tNYXNrKTsNCisNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RF
TkNJTEZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNv
bnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCANCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aEZhaWwpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19D
Q1dfU1RFTkNJTFBBU1MsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOw0K
KyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICAgICAgbUZy
b250RmFjZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKG1NYXNrU3RhdGVEaXJ0
eSkNCisgICAgew0KKyAgICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252ZXJ0Q29sb3JN
YXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFz
a0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSk7DQorICAgICAgICBpZiAoY29sb3JNYXNrID09
IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8v
IEVuYWJsZSBncmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBi
ZSBkcmF3bi4NCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xP
UldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNE
QkxFTkRfWkVSTyk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVTVEJMRU5ELCBEM0RCTEVORF9PTkUpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0JMRU5ET1AsIEQzREJMRU5ET1BfQUREKTsNCisgICAgICAgIH0NCisgICAg
ICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1hc2spOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVw
dGhNYXNrID8gVFJVRSA6IEZBTFNFKTsNCisNCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZh
bHNlOw0KKyAgICB9DQorDQorICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpDQorICAg
IHsNCisgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKChEV09SRCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0
RmFjdG9yKSk7DQorICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0
ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkp
KTsNCisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhC
SUFTLCAqKChEV09SRCopJmRlcHRoQmlhcykpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0N
CisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsIDApOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBGSVhNRSgiU2Ft
cGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7DQorICAgICAgICB9DQor
DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElB
TElBUywgVFJVRSk7DQorICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsNCisgICAgICAgICAgICBp
ZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7DQorDQorICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBsZXMoKTsgKytp
KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOw0K
Kw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSA+PSB0aHJlc2hvbGQpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFzayB8PSAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChtU3RhdGUu
c2FtcGxlQ292ZXJhZ2VJbnZlcnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBt
YXNrID0gfm1hc2s7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgbWFzayk7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsNCisgICAgICAgIH0NCisN
CisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYg
KG1EaXRoZXJTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOw0K
Kw0KKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KK30NCisNCitH
TGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQ0KK3sNCisgICAgVHJh
bnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107DQorDQorICAg
IEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0
LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19F
UlJPUikNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycjsNCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRy
aWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgpLCBpbnN0YW5jZXMsIHJlcGVhdERyYXcpOw0KK30N
CisNCisvLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK0dMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVy
KGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51
bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pDQorew0KKyAgICBHTGVudW0g
ZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291bnQsIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7DQorDQor
ICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGlmIChpbmRleElu
Zm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7DQorICAgICAgICAg
ICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHJldHVybiBlcnI7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIHNoYWRlcnMg
YW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQordm9pZCBDb250
ZXh0OjphcHBseVNoYWRlcnMoKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGlmIChwcm9ncmFtT2Jq
ZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpDQorICAgIHsNCisgICAg
ICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnkt
PmdldFZlcnRleFNoYWRlcigpOw0KKyAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhl
bFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7DQorDQorICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7DQorICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsNCisgICAgICAgIHByb2dyYW1CaW5hcnktPmRp
cnR5QWxsVW5pZm9ybXMoKTsNCisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dy
YW1PYmplY3QtPmdldFNlcmlhbCgpOw0KKyAgICB9DQorDQorICAgIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybXMoKTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBs
ZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlU
ZXh0dXJlcygpDQorew0KKyAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOw0KKw0KKyAg
ICBpZiAobVN1cHBvcnRzVmVydGV4VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgYXBwbHlUZXh0
dXJlcyhTQU1QTEVSX1ZFUlRFWCk7DQorICAgIH0NCit9DQorDQorLy8gRm9yIGVhY2ggRGlyZWN0
M0QgOSBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLA0KKy8vIGxv
b2tzIHVwIHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRl
eHR1cmUgdHlwZSwNCisvLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3Npbmcv
ZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLg0KK3ZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQ0KK3sNCisgICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7DQorICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7DQorDQorICAgIGlu
dCBzYW1wbGVyQ291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTIDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5n
ZSBvZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQ0KKyAgICB1bnNp
Z25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkg
PyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOw0KKyAg
ICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQz
RFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsNCisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1C
aW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7DQorDQorICAgIGZvciAoaW50IHNhbXBs
ZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4Kysp
DQorICAgIHsNCisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNh
bXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1h
Z2UgdW5pdCBpbmRleA0KKyAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBk
M2RTYW1wbGVyT2Zmc2V0Ow0KKw0KKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7DQorDQorICAg
ICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0
LCB0ZXh0dXJlVHlwZSk7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRl
eHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsNCisNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGly
dHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkNCisgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9
IHRleHR1cmUtPmdldFRleHR1cmUoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1
cmUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVk
VGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNE
aXJ0eVBhcmFtZXRlcnMoKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdldFdyYXBUKCk7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZp
bHRlcigpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0
dXJlLT5nZXRNYWdGaWx0ZXIoKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNv
bnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6
Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBl
czJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsNCisgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0ZXIs
ICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwg
ZDNkTWluRmlsdGVyKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7DQor
ICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGll
ZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFz
RGlydHlJbWFnZXMoKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOw0KKyAg
ICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSkt
PmdldFRleHR1cmUoKSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAg
YXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleFNlcmlhbDsNCisgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBOVUxMKTsNCisgICAgICAg
ICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IHNhbXBsZXJJbmRl
eCA9IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxlckNvdW50OyBzYW1wbGVySW5k
ZXgrKykNCisgICAgew0KKyAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
KHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQsIE5VTEwpOw0KKyAgICAgICAgICAgIGFw
cGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykN
Cit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigp
Ow0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVG
RkVSX0NPTVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChnZXRSZWFkRnJhbWVi
dWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAg
fQ0KKw0KKyAgICBHTHNpemVpIG91dHB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3Jt
YXQsIHR5cGUsIG1TdGF0ZS5wYWNrQWxpZ25tZW50KTsNCisgICAgLy8gc2l6ZWQgcXVlcnkgc2Fu
aXR5IGNoZWNrDQorICAgIGlmIChidWZTaXplKQ0KKyAgICB7DQorICAgICAgICBpbnQgcmVxdWly
ZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7DQorICAgICAgICBpZiAocmVxdWlyZWRTaXpl
ID4gKmJ1ZlNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOw0K
KyAgICBpZiAoIXJlbmRlclRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOyAgIC8vIENv
bnRleHQgbXVzdCBiZSBsb3N0LCByZXR1cm4gc2lsZW50bHkNCisgICAgfQ0KKw0KKyAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzYzsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsNCisN
CisgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpDQor
ICAgIHsNCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVz
b2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdl
dA0KKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgSFJFU1VMVCByZXN1bHQ7DQor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsNCisgICAgYm9vbCBk
aXJlY3RUb1BpeGVscyA9ICFnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdu
bWVudCgpIDw9IDQgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5X
aWR0aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xf
QkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOw0KKyAgICBpZiAoZGlyZWN0VG9Q
aXhlbHMpDQorICAgIHsNCisgICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJl
ZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkNCisgICAgICAg
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRo
LCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJm
YWNlLCAmcGl4ZWxzKTsNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICAvLyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQ0KKyAg
ICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgaWYgKCFkaXJlY3RUb1BpeGVscykNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0
LCBkZXNjLkZvcm1hdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZXN1bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRh
cmdldCwgc3lzdGVtU3VyZmFjZSk7DQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAg
ICByZW5kZXJUYXJnZXQgPSBOVUxMOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAg
IHsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisNCisgICAgICAgIC8vIEl0
IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3INCisg
ICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4NCisgICAgICAgIGlmIChjaGVj
a0RldmljZUxvc3QocmVzdWx0KSkNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgIH0NCisN
CisgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQ0KKyAgICB7DQorICAgICAgICBzeXN0ZW1TdXJmYWNl
LT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgUkVDVCByZWN0
Ow0KKyAgICByZWN0LmxlZnQgPSBjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5X
aWR0aCkpOw0KKyAgICByZWN0LnRvcCA9IGNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihk
ZXNjLkhlaWdodCkpOw0KKyAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOw0KKyAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHkg
KyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOw0KKw0KKyAgICBE
M0RMT0NLRURfUkVDVCBsb2NrOw0KKyAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVj
dCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOw0KKw0KKyAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpDQorICAgIHsNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICBzeXN0ZW1T
dXJmYWNlLT5SZWxlYXNlKCk7DQorDQorICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUg
ZXJyb3IgdG8gZ2VuZXJhdGUNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
KHVuc2lnbmVkIGNoYXIqKXBpeGVsczsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1
bnNpZ25lZCBzaG9ydCopcGl4ZWxzOw0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7DQor
ICAgIGludCBpbnB1dFBpdGNoOw0KKyAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpKQ0K
KyAgICB7DQorICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsg
bG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7DQorICAgICAgICBpbnB1
dFBpdGNoID0gLWxvY2suUGl0Y2g7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsNCisgICAgICAgIGlucHV0UGl0
Y2ggPSBsb2NrLlBpdGNoOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVj
dC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQ0KKyAgICB7DQorICAgICAgICBpZiAoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmDQorICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmDQorICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdp
dmVuDQorICAgICAgICAgICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1
ZmZlcnMgd2l0aCBubw0KKyAgICAgICAgICAgIC8vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cg
cGF0aCBiZWxvdy4NCisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwN
CisgICAgICAgICAgICAgICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsDQorICAgICAgICAg
ICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIDQpOw0KKyAgICAgICAgICAgIGNv
bnRpbnVlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZmxvYXQg
cjsNCisgICAgICAgICAgICBmbG9hdCBnOw0KKyAgICAgICAgICAgIGZsb2F0IGI7DQorICAgICAg
ICAgICAgZmxvYXQgYTsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7DQorICAgICAgICAgICAgICAgICAgICBiID0gKHJn
YiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7DQorICAgICAgICAgICAgICAgICAgICBnID0g
KHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7DQorICAgICAgICAgICAgICAgICAgICBy
ID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7DQorICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAx
LjBmIDogMC4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAo
MS4wZiAvIDB4MDAxRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTAp
ICogKDEuMGYgLyAweDAzRTApOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3
QzAwKSAqICgxLjBmIC8gMHg3QzAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoo
dW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAg
ICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAw
MDAwMCk7DQorICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgx
LjBmIC8gMHgwMDAwMDBGRik7DQorICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAw
MDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7DQorICAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7DQorICAgICAgICAg
ICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7
DQorICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8g
MHgwMDAwRkYwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAw
KSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoNCisg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4
QzAwMDAwMDApOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikg
KiAoMS4wZiAvIDB4MDAwMDAzRkYpOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYg
MHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOw0KKyAgICAgICAgICAgICAgICAgICAg
ciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOw0KKyAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhh
biB0aGUgb3RoZXIgd2F5IHJvdW5kDQorICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQq
KShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsNCisgICAgICAgICAgICAg
ICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSAr
IDEpOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMik7DQorICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsNCisgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExNkIxNkcxNlIxNkY6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4g
dGhlIG90aGVyIHdheSByb3VuZA0KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWJncls0XTsN
CisNCisgICAgICAgICAgICAgICAgICAgIEQzRFhGbG9hdDE2VG8zMkFycmF5KGFiZ3IsIChEM0RY
RkxPQVQxNiopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpLCA0KTsNCisNCisgICAg
ICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IGFi
Z3JbMl07DQorICAgICAgICAgICAgICAgICAgICBnID0gYWJnclsxXTsNCisgICAgICAgICAgICAg
ICAgICAgIHIgPSBhYmdyWzBdOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FDQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgY2FzZSBHTF9S
R0JBOg0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogciArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsNCisg
ICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1
bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSAr
IDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6DQorICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41
Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
MV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIHIgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzRfUkVWX0VYVDoNCisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFu
Z2xlcyIgc2VjdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tl
ZCBhcyBmb2xsb3dzOg0KKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAx
MiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEg
ICAgMA0KKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQor
ICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAg
ICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8DQorICAgICAg
ICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAg
ICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25l
bnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLg0KKyAgICAgICAgICAgICAgICAgICAgZGVz
dDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwg
MTIpfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciAr
IDAuNWYpIDw8IDgpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVDoNCisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAg
OSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMA0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgICAg
ICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAg
ICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8DQorICAgICAgICAgICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLg0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0
cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9DQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkg
fA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAu
NWYpIDw8IDUpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgz
MSAqIGIgKyAwLjVmKSA8PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAv
LyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVA0KKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQ
RQ0KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8DQorICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOw0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsN
CisNCisgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OmNsZWFyKEdMYml0ZmllbGQgbWFzaykNCit7DQorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAoIWZyYW1lYnVmZmVy
T2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBEV09SRCBmbGFncyA9IDA7
DQorDQorICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkNCisgICAgew0KKyAgICAg
ICAgbWFzayAmPSB+R0xfQ09MT1JfQlVGRkVSX0JJVDsNCisNCisgICAgICAgIGlmIChmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAg
ICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKG1TdGF0ZS5k
ZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdM
X05PTkUpDQorICAgICAgICB7DQorICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZF
UjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0g
MHgwOw0KKw0KKyAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkNCisgICAgew0K
KyAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOw0KKyAgICAgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOw0K
KyAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7
DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAg
DQorICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7DQorICAgICAgICAgICAgZGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjKTsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsNCisNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBkeDJlczo6
R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOw0KKyAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tl
ZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsNCisNCisgICAgICAgICAgICBpZiAoc3RlbmNp
bFVubWFza2VkICE9IDB4MCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGZsYWdz
IHw9IEQzRENMRUFSX1NURU5DSUw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIGlmIChtYXNrICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0
IG5vdCB0aGUgdmlld3BvcnQNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQor
ICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JD
bGVhclZhbHVlLmFscGhhKSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCksIA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiks
IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5ibHVlKSk7DQorICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUu
ZGVwdGhDbGVhclZhbHVlKTsNCisgICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFy
VmFsdWUgJiAweDAwMDAwMEZGOw0KKw0KKyAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6
OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5j
b2xvck1hc2tBbHBoYTsNCisNCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFy
ID0gKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFz
a2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7DQorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9y
Q2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpICYmDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9y
TWFza0dyZWVuICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1T
dGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOw0KKw0KKyAgICBpZiAobmVlZE1h
c2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikNCisgICAgew0KKyAgICAg
ICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50
IHRvIHRoZSBjbGVhciBjYWxsIGlzIHNhdmVkLg0KKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMg
YWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBj
YXNlIHRoYXQNCisgICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uDQorICAgICAgICBIUkVT
VUxUIGhyOw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBociA9IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOw0K
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOw0KKw0KKyAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxT
RSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUs
IEQzRENVTExfTk9ORSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUs
IDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElG
RlVTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAs
IDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRF
QUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcx
LCBEM0RUQV9URkFDVE9SKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRB
X1RGQUNUT1IpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RF
WFRVUkVGQUNUT1IsIGNvbG9yKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgICAgIA0KKyAg
ICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoaSwgMSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGhyID0gbURldmljZS0+
RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7DQorICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICB9DQorDQorICAgICAgICBBU1NFUlQobU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKTsNCisNCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgaHIgPSBtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsNCisgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsNCisgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0Up
Ow0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBM
QU5FRU5BQkxFLCAwKTsNCisNCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkN
CisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNr
UmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUu
Y29sb3JNYXNrQWxwaGEpKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5B
QkxFLCAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0g
MHgwICYmIChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJ
TE1PREUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZUyk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFD
RSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBB
U1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtU3RlbmNpbFN0YXRlRGly
dHkgPSB0cnVlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNF
KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwp
Ow0KKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOw0KKyAgICAgICAgbURl
dmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsNCisgICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VM
RUNUQVJHMSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RU
U1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7DQorICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBE
M0RUQV9URkFDVE9SKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RF
WFRVUkVGQUNUT1IsIGNvbG9yKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7DQorDQorICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgIH0NCisNCisg
ICAgICAgIGZsb2F0IHF1YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNvdmVyaW5nIHRo
ZSB0YXJnZXQsIGFsaWduZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzDQorICAgICAgICBxdWFkWzBdWzBd
ID0gLTAuNWY7DQorICAgICAgICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0
IC0gMC41ZjsNCisgICAgICAgIHF1YWRbMF1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFswXVsz
XSA9IDEuMGY7DQorDQorICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lk
dGggLSAwLjVmOw0KKyAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdo
dCAtIDAuNWY7DQorICAgICAgICBxdWFkWzFdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMV1b
M10gPSAxLjBmOw0KKw0KKyAgICAgICAgcXVhZFsyXVswXSA9IC0wLjVmOw0KKyAgICAgICAgcXVh
ZFsyXVsxXSA9IC0wLjVmOw0KKyAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7DQorICAgICAgICBx
dWFkWzJdWzNdID0gMS4wZjsNCisNCisgICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0
RGVzYy5XaWR0aCAtIDAuNWY7DQorICAgICAgICBxdWFkWzNdWzFdID0gLTAuNWY7DQorICAgICAg
ICBxdWFkWzNdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbM11bM10gPSAxLjBmOw0KKw0KKyAg
ICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIG1EZXZpY2UtPkRyYXdQcmlt
aXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsN
CisNCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxF
LCBUUlVFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9a
QlVGRkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
aWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorICAgIGVsc2UgaWYgKGZsYWdzKQ0KKyAgICB7DQorICAgICAgICBtRGV2aWNlLT5DbGVhcigw
LCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsNCisgICAgfQ0KK30NCisNCit2
b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykNCit7DQorICAgIGlmICghbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOw0KKyAgICB9DQorDQorICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsNCisg
ICAgaW50IHByaW1pdGl2ZUNvdW50Ow0KKw0KKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRp
dmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOw0KKw0KKyAgICBpZiAocHJpbWl0
aXZlQ291bnQgPD0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAg
IGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47
DQorICAgIH0NCisNCisgICAgYXBwbHlTdGF0ZShtb2RlKTsNCisNCisgICAgR0xzaXplaSByZXBl
YXREcmF3ID0gMTsNCisgICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0gR0xfTk9fRVJS
T1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9DQorDQorICAg
IGFwcGx5U2hhZGVycygpOw0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAgIGlmICghZ2V0
Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKE5V
TEwpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
Ow0KKyAgICB9DQorDQorICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkNCisgICAgew0KKyAg
ICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKG1v
ZGUgPT0gR0xfTElORV9MT09QKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRyYXdMaW5lTG9v
cChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlm
IChpbnN0YW5jZXMgPiAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFN0YXRpY0luZGV4QnVm
ZmVyICpjb3VudGluZ0lCID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhj
b3VudCk7DQorICAgICAgICAgICAgaWYgKGNvdW50aW5nSUIpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJp
YWwoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0SW5kaWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7DQorICAgICAgICAgICAgICAgICAg
ICBtQXBwbGllZElCU2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7DQorICAgICAgICAg
ICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXRE
cmF3OyBpKyspDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBw
cmltaXRpdmVDb3VudCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGEgY291bnRpbmcgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXNJbnN0
YW5jZWQuIik7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8gUmVndWxh
ciBjYXNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZShw
cmltaXRpdmVUeXBlLCAwLCBwcmltaXRpdmVDb3VudCk7DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2Vz
KQ0KK3sNCisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYg
KCFpbmRpY2VzICYmICFtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQ0KKyAgICB7DQorICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEQz
RFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsNCisgICAgaW50IHByaW1pdGl2ZUNvdW50Ow0K
Kw0KKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJp
bWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOw0KKw0KKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQo
ZmFsc2UpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgYXBwbHlT
dGF0ZShtb2RlKTsNCisNCisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87DQorICAg
IEdMZW51bSBlcnIgPSBhcHBseUluZGV4QnVmZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBl
LCAmaW5kZXhJbmZvKTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGVycm9yKGVycik7DQorICAgIH0NCisNCisgICAgR0xzaXplaSB2ZXJ0ZXhD
b3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7DQorICAg
IEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7DQorICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGlu
ZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOw0K
KyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoZXJyKTsNCisgICAgfQ0KKw0KKyAgICBhcHBseVNoYWRlcnMoKTsNCisgICAgYXBwbHlUZXh0
dXJlcygpOw0KKw0KKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5h
cnkoKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFjdWxsU2tp
cHNEcmF3KG1vZGUpKQ0KKyAgICB7DQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOw0K
Kw0KKyAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbklu
ZGV4KTsgICANCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2
ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0
ZXhDb3VudCwgaW5kZXhJbmZvLnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gSW1wbGVtZW50cyBnbEZsdXNo
IHdoZW4gYmxvY2sgaXMgZmFsc2UsIGdsRmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQ0KK3ZvaWQg
Q29udGV4dDo6c3luYyhib29sIGJsb2NrKQ0KK3sNCisgICAgbURpc3BsYXktPnN5bmMoYmxvY2sp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgpDQorew0KKyAgICAv
LyBHZXQgdGhlIHJhdyBpbmRpY2VzIGZvciBhbiBpbmRleGVkIGRyYXcNCisgICAgaWYgKHR5cGUg
IT0gR0xfTk9ORSAmJiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpKQ0KKyAgICB7DQor
ICAgICAgICBCdWZmZXIgKmluZGV4QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5n
ZXQoKTsNCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZGljZXMpOw0KKyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbmRleEJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsNCisgICAgfQ0KKw0KKyAgICBVSU5U
IHN0YXJ0SW5kZXggPSAwOw0KKyAgICBib29sIHN1Y2NlZWRlZCA9IGZhbHNlOw0KKw0KKyAgICBp
ZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAgY29uc3QgaW50IHNw
YWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KTsNCisNCisgICAg
ICAgIGlmICghbUxpbmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29w
SUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZG
RVJfU0laRSwgRDNERk1UX0lOREVYMzIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1M
aW5lTG9vcElCKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZl
U3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCk7DQorDQorICAgICAgICAgICAgVUlO
VCBvZmZzZXQgPSAwOw0KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQp
KTsNCisgICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsNCisgICAgICAgICAgICAN
CisgICAgICAgICAgICBpZiAoZGF0YSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3DQorICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7DQorICAgICAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7DQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQor
ICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoNCisgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hv
cnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOg0KKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQq
PihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07
DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
IG1MaW5lTG9vcElCLT51bm1hcCgpOw0KKyAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVl
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsN
CisgICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KTsNCisNCisgICAgICAgIGlmICghbUxpbmVMb29wSUIpDQorICAgICAgICB7
DQorICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURl
dmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMTYpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKG1MaW5lTG9vcElCKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NI
T1JUKTsNCisNCisgICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQorICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1MaW5lTG9v
cElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsNCisgICAgICAgICAgICBzdGFydEluZGV4
ID0gb2Zmc2V0IC8gMjsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoZGF0YSkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhl
ZCBkcmF3DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtpXSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBk
YXRhW2NvdW50XSA9IDA7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6DQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKVtpXTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBd
Ow0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtp
XTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291
bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsNCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsNCisgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAg
ICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOw0KKyAg
ICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KKyAgICANCisgICAgaWYgKHN1Y2NlZWRlZCkNCisgICAgew0KKyAgICAgICAg
aWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxpbmVMb29wSUItPmdldEJ1
ZmZlcigpKTsNCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdl
dFNlcmlhbCgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQ
cmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3Rh
cnRJbmRleCwgY291bnQpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGEgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9P
UC4iKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0K
K30NCisNCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkNCit7DQorICAgIG1JbnZh
bGlkRW51bSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVl
KCkNCit7DQorICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQ0KK3sNCisgICAgbUludmFsaWRPcGVyYXRpb24gPSB0
cnVlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkNCit7DQorICAg
IG1PdXRPZk1lbW9yeSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxp
ZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCkNCit7DQorICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVy
YXRpb24gPSB0cnVlOw0KK30NCisNCisvLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMg
YW5kIGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuDQorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMi41IHBhZ2UgMTMuDQorR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkNCit7DQorICAgIGlm
IChtSW52YWxpZEVudW0pDQorICAgIHsNCisgICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOw0K
Kw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRU5VTTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bUludmFsaWRWYWx1ZSkNCisgICAgew0KKyAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0K
Kw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfVkFMVUU7DQorICAgIH0NCisNCisgICAgaWYg
KG1JbnZhbGlkT3BlcmF0aW9uKQ0KKyAgICB7DQorICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9
IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICB9
DQorDQorICAgIGlmIChtT3V0T2ZNZW1vcnkpDQorICAgIHsNCisgICAgICAgIG1PdXRPZk1lbW9y
eSA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7DQorICAgIH0N
CisNCisgICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pDQorICAgIHsNCisgICAg
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsNCisNCisgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsNCisgICAgfQ0KKw0KKyAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0YXR1
cygpDQorew0KKyAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQ0KKyAgICB7DQor
ICAgICAgICBib29sIGxvc3QgPSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsNCisNCisgICAg
ICAgIGlmIChsb3N0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlE
ZXZpY2VMb3N0KCk7ICAgLy8gU2V0cyBtUmVzZXRTdGF0dXMNCisgICAgICAgIH0NCisgICAgfQ0K
Kw0KKyAgICBHTGVudW0gc3RhdHVzID0gbVJlc2V0U3RhdHVzOw0KKw0KKyAgICBpZiAobVJlc2V0
U3RhdHVzICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBpZiAobURpc3BsYXktPnRl
c3REZXZpY2VSZXNldHRhYmxlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbVJlc2V0U3Rh
dHVzID0gR0xfTk9fRVJST1I7DQorICAgICAgICB9DQorICAgIH0NCisgICAgDQorICAgIHJldHVy
biBzdGF0dXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJs
ZWQoKQ0KK3sNCisgICAgcmV0dXJuIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRf
T05fUkVTRVRfRVhUKTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVs
MygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOw0KK30NCisN
CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOw0KK30NCisNCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
X1ZURiA6IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsNCit9DQor
DQoraW50IENvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QN
Cit7DQorICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOw0KK30N
CisNCitpbnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBj
b25zdA0KK3sNCisgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1
cm4gcmVxdWVzdGVkOw0KKyAgICB9DQorDQorICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAq
Pjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7
DQorICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7
IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBp
ZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gaTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gLTE7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0V2ZW50UXVlcmllczsNCit9DQor
DQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4
dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0
c0RYVDFUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJl
cygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOw0KK30NCisN
Citib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
MzJUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJG
aWx0ZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXI7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1
cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7DQorfQ0KKw0K
K2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOw0KK30NCisNCitib29sIENv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsNCit9DQorDQoraW50
IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247DQorfQ0KKw0KK2ludCBDb250ZXh0
OjpnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1h
eFRleHR1cmVEaW1lbnNpb247DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURp
bWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7DQorfQ0KKw0KK2Jvb2wgQ29u
dGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0
dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzMzJiaXRJbmRpY2VzOw0KK30NCisNCitib29sIENv
bnRleHQ6OnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0luc3RhbmNpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNpbmc7
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0K
KyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMjoNCisgICAgLy8g
SWYgYSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5k
aW5ncyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0DQorICAgIC8vIChpLmUu
IGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6
ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQor
ICAgIGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgfQ0K
Kw0KKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikNCisgICAgICAg
IHsNCisgICAgICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5k
QnVmZmVyLnNldChOVUxMKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICAvLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4NDoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVj
dCBpcyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91
bmQgdG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUNCisgICAgLy8gcmVib3VuZCB0byB0ZXh0dXJl
IG9iamVjdCB6ZXJvDQorDQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9U
WVBFX0NPVU5UOyB0eXBlKyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAw
OyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVy
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0
eXBlXVtzYW1wbGVyXS5pZCgpID09IHRleHR1cmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6DQorICAgIC8vIElmIGEgdGV4dHVyZSBvYmpl
Y3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRs
eSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhlbiBpdCBpcw0KKyAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZl
clRleHR1cmUyRCBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNo
IGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hpY2ggdGhpcw0KKyAgICAvLyBpbWFnZSB3YXMgYXR0YWNo
ZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4NCisNCisgICAgRnJhbWVidWZm
ZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1
ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlm
IChyZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0
YWNoVGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVy
ICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAg
IGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7
DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoNCisgICAg
Ly8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0
IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaA0KKyAgICAvLyBCaW5kRnJh
bWVidWZmZXIgaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVS
IGFuZCBmcmFtZWJ1ZmZlciBvZiB6ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1
ZmZlciA9PSBmcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZl
cigwKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFt
ZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVy
YnVmZmVyKQ0KK3sNCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2Ug
MTA5Og0KKyAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0
byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZm
ZXINCisgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZF
UiBhbmQgbmFtZSBvZiB6ZXJvLg0KKw0KKyAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgp
ID09IHJlbmRlcmJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsN
CisgICAgfQ0KKw0KKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAx
MTE6DQorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0
cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLA0K
KyAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVu
IGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50DQor
ICAgIC8vIHBvaW50IHRvIHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJy
ZW50bHkgYm91bmQgZnJhbWVidWZmZXIuDQorDQorICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsNCisgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFt
ZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKw0KKyAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyKQ0KKyAgICB7DQorICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYg
ZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJh
d0ZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0K
K30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlw
ZSB0eXBlKQ0KK3sNCisgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0u
Z2V0KCk7DQorDQorICAgIGlmICh0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHN0YXRpYyBj
b25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9Ow0KKw0KKyAgICAgICAgc3dp
dGNoICh0eXBlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRv
IFRFWFRVUkVfMkQNCisNCisgICAgICAgICAgY2FzZSBURVhUVVJFXzJEOg0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7DQorICAgICAgICAgICAgICAgIGlu
Y29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOw0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgY2FzZSBURVhUVVJFX0NV
QkU6DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29t
cGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVS
RV9JRCk7DQorDQorICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNl
dEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7
DQorICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29t
cGxldGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVn
WigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorDQorICAg
ICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0
eXBlXS5zZXQodCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHQ7DQorfQ0KKw0KK2Jvb2wgQ29u
dGV4dDo6Y3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpDQorew0KKyAgICByZXR1cm4gbVN0
YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBp
c1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNUcmlhbmds
ZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQ0KK3sNCisgICAgc3dpdGNoIChkcmF3TW9kZSkNCisgICAg
ew0KKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOg0KKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFO
Og0KKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6DQorICAgICAgICByZXR1cm4gdHJ1ZTsN
CisgICAgICBjYXNlIEdMX1BPSU5UUzoNCisgICAgICBjYXNlIEdMX0xJTkVTOg0KKyAgICAgIGNh
c2UgR0xfTElORV9MT09QOg0KKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoNCisgICAgICAgIHJl
dHVybiBmYWxzZTsNCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQor
ICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpDQorew0KKyAgICBBU1NFUlQoaW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsNCisNCisgICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsNCisgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsNCisgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1sy
XTsNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9
IHZhbHVlc1szXTsNCisNCisgICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1
ZShpbmRleCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihH
THVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQ0KK3sNCisgICAgQVNTRVJUKGluZGV4IDwgZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUyk7DQorDQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5k
ZXhdLm1EaXZpc29yID0gZGl2aXNvcjsNCit9DQorDQorLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBm
b2xsb3dpbmcgb3JkZXINCisvLyBPRVMgZXh0ZW5zaW9ucw0KKy8vIEVYVCBleHRlbnNpb25zDQor
Ly8gVmVuZG9yIGV4dGVuc2lvbnMNCit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmco
KQ0KK3sNCisgICAgbUV4dGVuc2lvblN0cmluZyA9ICIiOw0KKw0KKyAgICAvLyBPRVMgZXh0ZW5z
aW9ucw0KKyAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkNCisgICAgew0KKyAgICAgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOw0KKyAgICB9
DQorDQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCAiOw0KKyAgICAvL21FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5h
cnkgIjsNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsNCisg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7DQor
DQorICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICI7DQorICAgIH0N
CisgICAgaWYgKHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAi
Ow0KKyAgICB9DQorICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQ0KKyAgICB7DQor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAiOw0KKyAg
ICB9DQorICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkNCisgICAgew0KKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
DQorICAgIH0NCisNCisgICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7
DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7DQor
ICAgIH0NCisNCisgICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMNCisgICAgaWYg
KHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsNCisgICAgfQ0KKw0K
KyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOw0KKyAg
ICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOw0KKw0KKyAgICBpZiAo
c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOw0KKyAgICB9DQorDQorICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOw0K
KyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlICI7DQorDQor
ICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOw0KKyAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpICE9IDApDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7DQorICAgIH0NCisNCisgICAgaWYgKHN1cHBv
cnRzSW5zdGFuY2luZygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOw0KKw0KKyAgICBpZiAo
c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7DQorICAgIH0NCisgICAg
aWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAiOw0KKyAgICB9DQor
DQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgIjsNCisg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
ICI7DQorDQorICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zDQorICAgIGlm
IChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9OVl9mZW5jZSAiOw0KKyAgICB9DQorDQorICAgIHN0ZDo6c3RyaW5nOjpzaXpl
X3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7DQorICAg
IGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmcucmVzaXplKGVuZCsxKTsNCisgICAgfQ0KK30NCisNCitjb25zdCBjaGFyICpDb250
ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1FeHRlbnNp
b25TdHJpbmcuY19zdHIoKTsNCit9DQorDQordm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJp
bmcoKQ0KK3sNCisgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNw
bGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOw0KKw0KKyAgICBtUmVuZGVyZXJTdHJpbmcgPSAi
QU5HTEUgKCI7DQorICAgIG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5EZXNjcmlwdGlv
bjsNCisgICAgbVJlbmRlcmVyU3RyaW5nICs9ICIpIjsNCit9DQorDQorY29uc3QgY2hhciAqQ29u
dGV4dDo6Z2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1SZW5kZXJl
clN0cmluZy5jX3N0cigpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGlu
dCBkc3RYMSwgR0xpbnQgZHN0WTEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xi
aXRmaWVsZCBtYXNrKQ0KK3sNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdl
dFJlYWRGcmFtZWJ1ZmZlcigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0g
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJl
YWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUg
fHwNCisgICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0
ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0K
KyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAg
ICBpbnQgcmVhZEJ1ZmZlcldpZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRXaWR0aCgpOw0KKyAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7DQorICAgIGludCBkcmF3QnVmZmVyV2lk
dGggPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQorICAg
IGludCBkcmF3QnVmZmVySGVpZ2h0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKTsNCisNCisgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICBSRUNUIGRlc3RS
ZWN0Ow0KKw0KKyAgICBpZiAoc3JjWDAgPCBzcmNYMSkNCisgICAgew0KKyAgICAgICAgc291cmNl
UmVjdC5sZWZ0ID0gc3JjWDA7DQorICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDE7DQor
ICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9
IGRzdFgxOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc291cmNlUmVjdC5s
ZWZ0ID0gc3JjWDE7DQorICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7DQorICAgICAgICBz
b3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDA7DQorICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgw
Ow0KKyAgICB9DQorDQorICAgIGlmIChzcmNZMCA8IHNyY1kxKQ0KKyAgICB7DQorICAgICAgICBz
b3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0
WTE7DQorICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOw0KKyAgICAgICAgZGVzdFJlY3Qu
dG9wID0gZHN0WTA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VS
ZWN0LmJvdHRvbSA9IHNyY1kwOw0KKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7DQor
ICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kxOw0KKyAgICAgICAgZGVzdFJlY3QudG9wID0g
ZHN0WTE7DQorICAgIH0NCisNCisgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNl
UmVjdDsNCisgICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0Ow0KKw0KKyAgICBp
ZiAobVN0YXRlLnNjaXNzb3JUZXN0KQ0KKyAgICB7DQorICAgICAgICAvLyBPbmx5IHdyaXRlIHRv
IHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lz
c29yIHRlc3QNCisgICAgICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgZGVzdFJlY3QgaXMgbm93IGlu
IEQzRC1zdHlsZSBjb29yZGluYXRlcywgc28gdGhlICp0b3AqIG9mIHRoZQ0KKyAgICAgICAgLy8g
cmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJv
dHRvbS4NCisgICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RS
ZWN0LmxlZnQ7DQorICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5z
Y2lzc29yWDsNCisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmxlZnQgKz0geERpZmY7
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QucmlnaHQgPiBtU3RhdGUuc2Np
c3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlu
dCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lz
c29yV2lkdGgpOw0KKyAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnJpZ2h0ID0gbVN0YXRl
LnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aDsNCisgICAgICAgICAgICBzb3VyY2VTY2lz
c29yZWRSZWN0LnJpZ2h0IC09IHhEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGRl
c3RSZWN0LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBp
bnQgeURpZmYgPSBtU3RhdGUuc2Npc3NvclkgLSBkZXN0UmVjdC50b3A7DQorICAgICAgICAgICAg
ZGVzdFNjaXNzb3JlZFJlY3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOw0KKyAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
aWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRv
bSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7DQorICAgICAgICAg
ICAgZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNj
aXNzb3JIZWlnaHQ7DQorICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5ib3R0b20gLT0g
eURpZmY7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
ID0gZmFsc2U7DQorICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOw0KKw0KKyAgICBS
RUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsNCisgICAgUkVDVCBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsNCisNCisgICAgLy8gVGhlIHNvdXJj
ZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlm
IHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiANCisgICAgLy8gdGhlIGFjdHVhbCBkcmF3
IGFuZCByZWFkIHN1cmZhY2VzLg0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QubGVmdCA8IDAp
DQorICAgIHsNCisgICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0
Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCA9IDA7DQorICAgICAgICBkZXN0VHJp
bW1lZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1l
ZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpDQorICAgIHsNCisgICAgICAgIGludCB4RGlm
ZiA9IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gcmVhZEJ1ZmZlcldpZHRoOw0KKyAgICAgICAg
c291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBkZXN0
VHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7DQorICAgIH0NCisNCisgICAgaWYgKHNvdXJjZVRy
aW1tZWRSZWN0LnRvcCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3Vy
Y2VUcmltbWVkUmVjdC50b3A7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgPSAwOw0K
KyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCArPSB5RGlmZjsNCisgICAgfQ0KKw0KKyAgICBp
ZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tID4gcmVhZEJ1ZmZlckhlaWdodCkNCisgICAgew0K
KyAgICAgICAgaW50IHlEaWZmID0gc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gcmVhZEJ1ZmZl
ckhlaWdodDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJI
ZWlnaHQ7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOw0KKyAgICB9
DQorDQorICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApDQorICAgIHsNCisgICAgICAg
IGludCB4RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QubGVmdDsNCisgICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgKz0geERp
ZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRyYXdCdWZm
ZXJXaWR0aCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJp
Z2h0IC0gZHJhd0J1ZmZlcldpZHRoOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID0g
ZHJhd0J1ZmZlcldpZHRoOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLT0geERp
ZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVkUmVjdC50b3AgPCAwKQ0KKyAgICB7
DQorICAgICAgICBpbnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsNCisgICAgICAg
IGRlc3RUcmltbWVkUmVjdC50b3AgPSAwOw0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9w
ICs9IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4g
ZHJhd0J1ZmZlckhlaWdodCkNCisgICAgew0KKyAgICAgICAgaW50IHlEaWZmID0gZGVzdFRyaW1t
ZWRSZWN0LmJvdHRvbSAtIGRyYXdCdWZmZXJIZWlnaHQ7DQorICAgICAgICBkZXN0VHJpbW1lZFJl
Y3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0
LmJvdHRvbSAtPSB5RGlmZjsNCisgICAgfQ0KKw0KKyAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5
ID0gZmFsc2U7DQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSBzb3VyY2VUcmlt
bWVkUmVjdC50b3AgPCByZWFkQnVmZmVySGVpZ2h0IHx8DQorICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwg
DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8
IGRyYXdCdWZmZXJIZWlnaHQgfHwNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtIGRl
c3RUcmltbWVkUmVjdC5sZWZ0IDwgZHJhd0J1ZmZlcldpZHRoIHx8DQorICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNl
VHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApDQorICAg
IHsNCisgICAgICAgIHBhcnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBp
ZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIGNvbnN0IGJv
b2wgdmFsaWRSZWFkVHlwZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkg
PT0gR0xfVEVYVFVSRV8yRCB8fA0KKyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXJUeXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSOw0KKyAgICAgICAgY29uc3QgYm9vbCB2
YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9URVhUVVJFXzJEIHx8DQorICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7DQorICAgICAgICBpZiAoIXZhbGlkUmVhZFR5
cGUgfHwgIXZhbGlkRHJhd1R5cGUgfHwNCisgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdl
dENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJS
KCJDb2xvciBidWZmZXIgZm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUg
bm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7DQorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgICAgIA0K
KyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJsaXRSZW5kZXJUYXJn
ZXQgPSB0cnVlOw0KKw0KKyAgICB9DQorDQorICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZF
Ul9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJi
dWZmZXIgKnJlYWREU0J1ZmZlciA9IE5VTEw7DQorICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdE
U0J1ZmZlciA9IE5VTEw7DQorDQorICAgICAgICAvLyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCwgYW5kIGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0
aCBhbmQgc3RlbmNpbCBidWZmZXIsIHNvIGlmIHdlIGhhdmUNCisgICAgICAgIC8vIGJvdGggYSBk
ZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLg0KKw0K
KyAgICAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fA0KKyAgICAgICAgICAgICAgICAgICAg
cmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGJsaXRE
ZXB0aFN0ZW5jaWwgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFk
RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7DQorICAgICAgICAgICAgICAgIGRyYXdEU0J1
ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsNCisgICAgICAgICAgICB9
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJ
VCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVu
Y2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVu
Y2lsYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUo
KSB8fA0KKyAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpLT5nZXREM0RGb3JtYXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgICAgICAg
ICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsNCisgICAg
ICAgICAgICAgICAgcmVhZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCk7DQorICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAg
ICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIo
Ik9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQg
YnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1p
dHRlZA0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RT
QnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgDQorICAgICAgICAgICAgKHJlYWREU0J1ZmZl
ciAmJiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwp
DQorICAgIHsNCisgICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOw0KKw0KKyAgICAgICAgaWYg
KGJsaXRSZW5kZXJUYXJnZXQpDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkqIHJlYWRSZW5kZXJUYXJnZXQgPSByZWFkRnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdl
dCgpOw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRSZW5kZXJUYXJnZXQsICZzb3Vy
Y2VUcmltbWVkUmVjdCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05P
TkUpOw0KKw0KKyAgICAgICAgICAgIHJlYWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAg
ICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJC
bGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJl
c3VsdCk7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorDQorICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkq
IGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOw0K
Kw0KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVh
ZERlcHRoU3RlbmNpbCwgTlVMTCwgZHJhd0RlcHRoU3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05F
KTsNCisNCisgICAgICAgICAgICByZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7DQorICAgICAg
ICAgICAgZHJhd0RlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIEVSUigiQmxp
dEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1
bHQpOw0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorfQ0KKw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0
aW9uQ2FjaGUoKSA6IG1NYXhMcnUoMCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVN
X1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgbVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7DQorICAgICAgICBtVmVydGV4
RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsNCisgICAgfQ0KK30NCisNCitWZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpDQorew0KKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspDQorICAgIHsNCisg
ICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24t
PlJlbGVhc2UoKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitHTGVudW0gVmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNp
emVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykNCit7DQorICAgICpyZXBlYXREcmF3
ID0gMTsNCisNCisgICAgaW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7
DQorICAgIGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7DQorDQor
ICAgIGlmIChpbnN0YW5jZXMgPiAwKQ0KKyAgICB7DQorICAgICAgICAvLyBGaW5kIGFuIGluZGV4
ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDANCisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgICAgICB7DQorICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5kaXZpc29yID09IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0
cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciAhPSAwKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJpYnV0
ZSA9IGk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgZWxzZSBicmVhazsgICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGlu
c3RhbmNlZCBhdHRyaWJ1dGUNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAg
ICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICB7
DQorICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRU
UklCUyArIDFdOw0KKyAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1sw
XTsNCisNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsNCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIGludCBzdHJlYW0gPSBpOw0KKw0KKyAgICAgICAgICAg
IGlmIChpbnN0YW5jZXMgPiAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8g
RHVlIHRvIGEgYnVnIG9uIEFUSSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVu
IG5vbmUgb2YgdGhlIGF0dHJpYnV0ZXMgYXJlIGluc3RhbmNlZC4NCisgICAgICAgICAgICAgICAg
aWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkNCisg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAw
Ow0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aSA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7DQorICAgICAgICAgICAgICAg
ICAgICANCisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0g
MCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVx
dWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7DQorICAgICAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFN
U09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsNCisgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsNCisgICAgICAg
ICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7DQorICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKG1BcHBsaWVkVkJzW3N0cmVh
bV0uc2VyaWFsICE9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsIHx8DQorICAgICAgICAgICAgICAgIG1B
cHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8DQorICAg
ICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0u
b2Zmc2V0KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2Uoc3RyZWFtLCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0cmlidXRlc1tp
XS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsNCisgICAgICAgICAgICAgICAgbUFwcGxp
ZWRWQnNbc3RyZWFtXS5zZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsNCisgICAgICAgICAg
ICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsN
CisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVz
W2ldLm9mZnNldDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZWxlbWVudC0+U3Ry
ZWFtID0gc3RyZWFtOw0KKyAgICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7DQorICAgICAg
ICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsNCisgICAgICAgICAgICBl
bGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7DQorICAgICAgICAgICAgZWxl
bWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7DQorICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7DQorICAg
ICAgICAgICAgZWxlbWVudCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChpbnN0
YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQ0K
KyAgICB7DQorICAgICAgICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoaSwgMSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5h
YmxlZCA9IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHN0YXRpYyBjb25zdCBE
M0RWRVJURVhFTEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOw0KKyAgICAqKGVsZW1lbnQrKykg
PSBlbmQ7DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hF
X0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVu
dHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07DQorICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5j
YWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQz
RFZFUlRFWEVMRU1FTlQ5KSkgPT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pDQorICAg
ICAgICB7DQorICAgICAgICAgICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1Ow0KKyAgICAg
ICAgICAgIGlmKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlv
bihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICAgICAgICAgICAgICBtTGFzdFNldFZE
ZWNsID0gZW50cnktPnZlcnRleERlY2xhcmF0aW9uOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
VmVydGV4RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7DQorDQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykNCisgICAgew0KKyAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBs
YXN0Q2FjaGUtPmxydUNvdW50KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxhc3RDYWNoZSA9
ICZtVmVydGV4RGVjbENhY2hlW2ldOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChs
YXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsNCisgICAgICAgIGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOw0KKyAgICAgICAgLy8gbUxhc3RTZXRWRGVjbCBp
cyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5DQorICAg
ICAgICAvLyBhYm91dCBpdC4NCisgICAgfQ0KKw0KKyAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNo
ZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZF
UlRFWEVMRU1FTlQ5KSk7DQorICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxl
bWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsNCisgICAgbUxh
c3RTZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247DQorICAgIGxhc3RDYWNo
ZS0+bHJ1Q291bnQgPSArK21NYXhMcnU7DQorDQorICAgIHJldHVybiBHTF9OT19FUlJPUjsNCit9
DQorDQordm9pZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpDQorew0K
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7
DQorICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOw0KKyAgICB9DQorDQorICAgIG1M
YXN0U2V0VkRlY2wgPSBOVUxMOw0KKyAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8v
IEZvcmNlcyBpdCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkDQorfQ0KKw0KK30NCisNCitl
eHRlcm4gIkMiDQorew0KK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQ0KK3sNCisgICAgcmV0dXJuIG5ldyBnbDo6Q29u
dGV4dChjb25maWcsIHNoYXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOw0K
K30NCisNCit2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpDQorew0K
KyAgICBkZWxldGUgY29udGV4dDsNCisNCisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRl
eHQoKSkNCisgICAgew0KKyAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwp
Ow0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4
dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAg
ICBnbDo6bWFrZUN1cnJlbnQoY29udGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7DQorfQ0KKw0KK2ds
OjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCkNCit7DQorICAgIHJldHVybiBnbDo6Z2V0
Q29udGV4dCgpOw0KK30NCit9DQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Db250ZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuaAppbmRleCA4ZGNjZjBmLi40ZDQ3Y2U3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApAQCAtMjUxLDcgKzI1MSw3
IEBAIGNsYXNzIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1N
YXhMcnU7CiAKLSAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9
OworICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAg
ICBzdHJ1Y3QgVkJEYXRhCiAgICAgewpAQCAtMjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQK
IAogICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOwogCi0gICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0
eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29s
IHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9v
bCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5z
dGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBi
b29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBv
cnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuY3BwCmluZGV4IDczMGZmZmMuLjc2ZDQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3
IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVu
Y2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJi
dWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDgg
QEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQogICAg
IHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMs
OCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiAg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
Ky8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNE
U3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIFJlbmRlcmJ1
ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKQEAg
LTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1
ZmZlcigpCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVu
ZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5k
ZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Cisg
ICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBp
ZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVw
dGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFu
dWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwg
aGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1
ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQs
IEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxi
dWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJh
bWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZl
clR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwo
KQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAg
aW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdB
dHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUp
CiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21w
cmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwor
ICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3Jt
YXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwK
KyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAg
ICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1
ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQx
NkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgy
ZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0
MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxv
YXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJh
YmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNv
bG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAg
ICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBk
eDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAg
ICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAg
IGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgc2FtcGxlcyA9IGNv
bG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAg
ICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xf
Tk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJV
RkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0gICAgICAgIH0KLQog
ICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFk
ZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29t
cGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAg
ICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0g
ICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAg
aGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVm
ZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQg
ZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAv
LyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1
cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkeDJl
czo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9
PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAg
ICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0
ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRo
YnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5n
ZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lP
TlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+
Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0g
R0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVO
REVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3Rl
bmNpbGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSAr
NDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlw
ZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZm
ZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJs
ZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0
ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhl
aWdodCgpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1h
dCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0
dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAv
LyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQor
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJ
c1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNhbXBsZXMgPT0g
LTEpCisgICAgICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKICAgICAgICAgeworICAgICAgICAg
ICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0
ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVm
ZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
RElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5j
aWxidWZmZXItPmdldFNhbXBsZXMoKSkKICAgICAgICAgewpAQCAtMzc4LDE0ICs0NTcsMTcgQEAg
R0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVm
ZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVw
dGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0
CisgICAgLy8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBu
b3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5jaWwKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3Rl
bmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCiAgICAgewotICAg
ICAgICBpZiAoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIGRlcHRoYnVm
ZmVyLT5nZXRTZXJpYWwoKSAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICB9CisK
KyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGF0dGFjaG1lbnQgdG8gYmUgY29t
cGxldGUKKyAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CiAgICAgfQogCiAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCmluZGV4IGI3M2Y5YTAuLjE0
ZDljMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBS
ZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0
aGJ1ZmZlcigpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIFJl
bmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKCk7CiAKICAgICBHTGVudW0gZ2V0Q29sb3Ji
dWZmZXJUeXBlKCk7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOwpAQCAtNzMsNiAr
NzQsOCBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7
CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7
CiAKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1OdWxsQ29sb3JidWZmZXJQb2lu
dGVyOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVm
ZmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbS5jcHAKaW5kZXggYTVlMzhiZi4uZjI4YTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCkBAIC04LDYgKzgsNyBAQAogLy8g
YW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4x
MC4zIHBhZ2UgMjguCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
IApAQCAtMTcsMjI2MSArMTgsODUgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZp
bmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNl
bmRpZgotCiBuYW1lc3BhY2UgZ2wKIHsKLXVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNl
cmlhbCA9IDE7Ci1jb25zdCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6
OnN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYo
YnVmZmVyLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlm
b3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6
dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBp
bnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRh
dGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVz
KTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBk
ZWxldGVbXSBkYXRhOwotfQotCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVy
biBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246
OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBl
bGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29y
YXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0K
LQotUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5k
bGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFs
KGlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotICAgIG1GcmFn
bWVudFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAg
bUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0K
LSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5s
aW5rKCk7Ci0KLSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KLSAgICBtUmVmQ291bnQgPSAw
OwotfQotCi1Qcm9ncmFtOjp+UHJvZ3JhbSgpCi17Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAg
aWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIt
PnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0g
ICAgewotICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFk
ZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1W
ZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0g
ICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFk
ZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAo
bUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNo
YWRlcjsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6
ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUo
KSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIg
IT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhT
aGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBH
TF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9
IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK2NvbnN0IGNo
YXIgKiBjb25zdCBnX2Zha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CiAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8g
MSA6IDApOwotfQordW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKIAot
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCitBdHRyaWJ1
dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtUGl4ZWxFeGVj
dXRhYmxlOwogfQogCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhT
aGFkZXIoKQorQXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAg
cmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOwogfQogCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1
dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCitJbmZvTG9nOjpJbmZv
TG9nKCkgOiBtSW5mb0xvZyhOVUxMKQogewotICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVy
YXNlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhd
Lmluc2VydChuYW1lKTsKLSAgICB9CiB9CiAKLUdMdWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVM
b2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQorSW5mb0xvZzo6fkluZm9Mb2coKQogewotICAgIGlm
IChuYW1lKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1MaW5r
ZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQog
Ci1pbnQgUHJvZ3JhbTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCi17Ci0g
ICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlMpOwotICAgIAotICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJ
bmRleF07Ci19CiAKLS8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVy
IGluZGV4IHVzZWQuCi1HTGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJU
eXBlIHR5cGUpCitpbnQgSW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBzd2l0Y2gg
KHR5cGUpCisgICAgaWYgKCFtSW5mb0xvZykKICAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElY
RUw6Ci0gICAgICAgIHJldHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1
bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRl
eCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRl
cikuCi1HTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQotewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5p
dCA9IC0xOwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9Q
SVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykv
c2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVu
aXQgPSBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxl
cnNWU1swXSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChs
b2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KLS8vIFJldHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3Qz
RCA5IHNhbXBsZXIgdHlwZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVy
IGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06Omdl
dFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4KQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJf
UElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMp
L3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFT
U0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNW
U1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUp
OwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRV
UkVfMkQ7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmlu
ZyBuYW1lKQotewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOwotCi0gICAgLy8gU3Ry
aXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0
Ci0gICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBj
bG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJp
bmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBz
dWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAg
bmFtZS5lcmFzZShvcGVuKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMg
PSBtVW5pZm9ybUluZGV4LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9
IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBp
ZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIC0xOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZM
T0FUKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAg
ICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpz
ZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBd
OwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9
IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ld
ID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwogICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIEluZm9Mb2c6OmdldExv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworICAgIGludCBpbmRleCA9IDA7CiAKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
MF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRh
cmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkK
KyAgICAgICAgaWYgKG1JbmZvTG9nKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1J
bmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsK
ICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZv
cm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMZmxvYXQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9h
dCkgKiBjb3VudCk7CisgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9Ci0gICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0g
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0
aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdp
ZHRoLCBzcmNXaWR0aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWln
aHQsIHNyY0hlaWdodCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsr
KQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZh
bHVlW3kgKiBzcmNXaWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVu
ZmlsbGVkIHJpZ2h0IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IChUKTA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9t
LgotICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwot
Ci0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAg
ICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwy
LDI+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUg
Kz0gNDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9
IDEyOwotICAgICAgICB2YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZM
T0FUX01BVDQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2
YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
LAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZB
TFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIp
Ci0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
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
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICog
NCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0K
LSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9n
cmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxv
YXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUg
cHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsK
LSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVu
aWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRV
bmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0g
VW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlw
ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChH
TGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZB
TFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihH
TGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpw
YXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3Zp
ZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAg
ICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dp
dGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJu
YWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5
cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVu
aWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRl
cm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQg
KiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMo
KQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRl
eCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFt
IG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0g
bVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1Yikg
ewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIp
OyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZv
cm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xf
VkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNl
IEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUs
IGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBs
eVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVu
aWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUg
SExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmll
cwotSUQzRDEwQmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2ws
IGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUp
Ci17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
Ci0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5n
IHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdz
IHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0g
RDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3Rk
OjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxu
IikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19z
dHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBC
bG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7
Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBO
VUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNz
YWdlKTsKLQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFy
ICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigp
OwotCi0gICAgICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAg
VFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQot
ICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9
IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmlu
YXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5
LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVn
aXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1
YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nl
c2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11b
NF0pCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBp
bnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMo
KTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxl
Um93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9
IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3Rv
cnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsg
eV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNj
ZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2
YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0g
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAy
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9
IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9y
czsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2Vb
eF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFy
eWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0g
Jip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZh
cnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0g
ICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlp
bmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNr
aW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAgaWYg
KG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lz
dGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9
IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdW
YXItPnJlZyA9IC0xOwotICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4
VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXIt
PmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lz
dGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNf
U00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tp
bmcpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0
aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9v
bCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBt
YXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwot
Ci0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2
YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IGlucHV0ID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBi
b29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1W
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQt
PnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3Qg
bWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigp
KTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAg
ICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNo
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRl
eCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRp
YyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAi
c3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQg
c2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0
cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9
IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIg
IjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0
cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xu
IjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRl
LT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGds
X1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdp
c3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3Jd
WzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsK
LQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUp
ICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtc
biI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0g
ICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAi
ICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAg
ICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0g
ICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIK
LSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0
ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
Ci0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0
ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291
bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZl
cnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQ
aXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkg
KiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53
O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0g
ICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBj
bGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0
cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5
aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsg
aisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5
aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wg
c2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZh
cnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5n
W3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4SExT
TCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0g
IiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91
dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wgKz0g
InN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJv
d0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAg
ICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFy
eWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMg
KyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
bTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29v
cmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQg
dkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIKLSAg
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVU
XG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBT
X0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29y
ZC55IGNvbnRhaW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5
UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAw
LjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50
ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAg
ICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAgIH0K
LQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAg
ewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0LmdsX1Bv
aW50Q29vcmQ7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJv
bnRGYWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNp
bmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAw
LjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWlu
ZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFy
eWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBq
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBu
ID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9
ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAg
ICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91
dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVy
IGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBi
aW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3Rp
bmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1
bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXIt
PmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVy
LT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7
Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hh
ciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNf
M18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQt
PnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQz
RDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3Ry
KCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpw
aXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJv
ZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhl
bEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVy
KCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQ
b2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2
ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsK
LSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxM
OwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
bGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2UgdW5p
Zm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBk
eF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNl
aXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAgICBt
RHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAgICAg
ICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsK
LSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlv
bigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBvaW50
c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIp
OwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1
dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9n
cmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMg
PSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRp
b24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlm
IChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVt
cHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZl
IGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICph
dHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8g
Zml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNl
ZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJp
bmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAg
ICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwot
Ci0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJp
YkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0g
QWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FU
VFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxh
YmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMg
KCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZl
cnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUlu
ZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50
KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNl
bWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5k
aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0g
MDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAg
ICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJp
YnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQg
ZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25z
dGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJ
bmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3Rh
bnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50
SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNv
bnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5k
IGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5z
IHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFBy
b2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBu
YW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhS
U19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3Rh
bnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAgIEQz
RFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1l
KE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChwc0Nv
bnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkg
KyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRp
b24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8y
RDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2Fs
VGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJh
bmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNh
bXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2
c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1w
bGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2Vl
ZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5n
ZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7
Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0
aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0
Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAgICBE
M0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBV
SU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAm
ZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/
ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1l
ICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQQ19T
Q0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRS
SVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIGRl
ZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRp
b24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0o
Y29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6
c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShj
b25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRl
ZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5u
YW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRp
b24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlmICht
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMs
IG1Db25zdGFudFRhYmxlUFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9y
bSwgJnVuaWZvcm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNo
X2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jt
cy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3Jt
LT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNr
KFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8g
VmVjdG9ycyBhbmQgc2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FN
UExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9W
RUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5U
X1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9u
LlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2Vz
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhv
ZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3Jh
bTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYg
KG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGVV
bmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0gPT0g
J18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBfbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFtZTsK
LX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAg
ZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9v
bFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfRkxPQVQ0IHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQg
JiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/
IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9
IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9
PSBEM0RYUlNfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwg
c3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9
IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZb
aV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQz
RFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Qih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAs
IDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJ
bmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5k
ZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5s
b2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChm
bG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlV
bmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3Vu
dCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAg
IH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsK
LSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RY
VkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhW
RUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNd
KTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdl
dFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIChj
b25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0g
ICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgaWYg
KGxlbmd0aCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAq
KXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICpsZW5n
dGggPSBpbmRleDsKICAgICB9CiB9CiAKIC8vIGFwcGVuZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8g
dGhlIHByb2dyYW0gaW5mbyBsb2cuCiAvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFr
ZSBmaWxlIHBhdGggaW4gc29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKIC8vIG1lc3NhZ2Vz
LCBzbyBsZXRzIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBm
cm9tIHRoZSBsb2cuCi12b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25z
dCBjaGFyICptZXNzYWdlKQordm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hh
ciAqbWVzc2FnZSkKIHsKICAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CiAKICAgICBzaXpl
X3QgZm91bmQ7CiAgICAgZG8KICAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBh
dGgpOworICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGdfZmFrZXBhdGgpOwogICAgICAgICBpZiAo
Zm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1zZy5l
cmFzZShmb3VuZCwgc3RybGVuKGZha2VwYXRoKSk7CisgICAgICAgICAgICBtc2cuZXJhc2UoZm91
bmQsIHN0cmxlbihnX2Zha2VwYXRoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKGZv
dW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKIAotICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIs
IG1zZy5jX3N0cigpKTsKKyAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7CiB9CiAKLXZv
aWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQordm9p
ZCBJbmZvTG9nOjphcHBlbmQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgaWYgKCFm
b3JtYXQpCiAgICAgewpAQCAtMjMwNCw3ICsxMjksNyBAQCB2b2lkIFByb2dyYW06OmFwcGVuZFRv
SW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKICAgICB9CiB9CiAKLXZvaWQgUHJvZ3Jh
bTo6cmVzZXRJbmZvTG9nKCkKK3ZvaWQgSW5mb0xvZzo6cmVzZXQoKQogewogICAgIGlmIChtSW5m
b0xvZykKICAgICB7CkBAIC0yMzEzLDk5ICsxMzgsMTcwIEBAIHZvaWQgUHJvZ3JhbTo6cmVzZXRJ
bmZvTG9nKCkKICAgICB9CiB9CiAKLS8vIFJldHVybnMgdGhlIHByb2dyYW0gb2JqZWN0IHRvIGFu
IHVubGlua2VkIHN0YXRlLCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KLXZv
aWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKK1Byb2dyYW06OlByb2dyYW0oUmVzb3Vy
Y2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFu
YWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQogewotICAgIGlm
IChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBp
ZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAg
ICAgIH0KKyAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOworICAgIG1WZXJ0ZXhTaGFkZXIgPSBO
VUxMOworICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFs
c2U7CisgICAgbVJlZkNvdW50ID0gMDsKK30KIAotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikK
LSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAg
ICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9CitQcm9ncmFtOjp+
UHJvZ3JhbSgpCit7CisgICAgdW5saW5rKHRydWUpOwogCi0gICAgaWYgKG1QaXhlbEV4ZWN1dGFi
bGUpCisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1QaXhl
bEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAobVZl
cnRleEV4ZWN1dGFibGUpCisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQogICAgIHsK
LSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEV4
ZWN1dGFibGUgPSBOVUxMOworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKICAg
ICB9Cit9CiAKLSAgICBpZiAobUNvbnN0YW50VGFibGVQUykKK2Jvb2wgUHJvZ3JhbTo6YXR0YWNo
U2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBH
TF9WRVJURVhfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFz
ZSgpOwotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICB9CisgICAgICAgIGlm
IChtVmVydGV4U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KIAotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgICAgICBtVmVydGV4U2hh
ZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOworICAgICAgICBtVmVydGV4U2hhZGVyLT5hZGRS
ZWYoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01F
TlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwot
ICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNo
YWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7CisgICAg
ICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKK2Jvb2wgUHJvZ3JhbTo6ZGV0YWNo
U2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBH
TF9WRVJURVhfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0u
bmFtZS5jbGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9
CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgICAgIG1WZXJ0
ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAg
fQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikK
ICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVs
ZWFzZSgpOworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgIH0KKyAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06Omdl
dEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFk
ZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQogCi0gICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IGluZGV4KyspCit2b2lkIEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24o
R0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChpbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUykKICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2Uo
bmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5z
ZXJ0KG5hbWUpOwogICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRp
b24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIG1BdHRyaWJ1dGVCaW5k
aW5ncy5iaW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOworfQorCisvLyBMaW5rcyB0
aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1
cCB0aGVpciB2YXJ5aW5ncywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVy
bWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCisvLyBhIGxpc3Qg
b2YgdW5pZm9ybXMKK3ZvaWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAgdW5saW5rKGZhbHNlKTsK
IAotICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKLSAgICBtVXNlZFBpeGVsU2FtcGxl
clJhbmdlID0gMDsKKyAgICBtSW5mb0xvZy5yZXNldCgpOwogCi0gICAgd2hpbGUgKCFtVW5pZm9y
bXMuZW1wdHkoKSkKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OworICAg
IGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywg
bUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBt
VW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICAgICAg
dW5saW5rKGZhbHNlKTsKICAgICB9Cit9CiAKLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0x
OwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9j
YXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKK2ludCBBdHRy
aWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSkgY29uc3QKK3sKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1BdHRyaWJ1dGVC
aW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9u
XS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAg
ICB9CisgICAgfQogCi0gICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworICAgIHJldHVybiAtMTsK
K30KIAotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExTTC5jbGVhcigpOwor
Ly8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9y
ZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9v
bCBkZXN0cm95KQoreworICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVj
dGVkCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KIAotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAg
IG1JbmZvTG9nID0gTlVMTDsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOworICAgICAgICB9CisgICAgfQogCi0gICAgbUxpbmtlZCA9IGZhbHNl
OworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtUHJvZ3Jh
bUJpbmFyeTsKKyAgICAgICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAgIH0KIH0KIAotYm9v
bCBQcm9ncmFtOjppc0xpbmtlZCgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFt
QmluYXJ5KCkKIHsKLSAgICByZXR1cm4gbUxpbmtlZDsKKyAgICByZXR1cm4gbVByb2dyYW1CaW5h
cnk7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3ZvaWQgUHJvZ3Jh
bTo6c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQogewotICAg
IHJldHVybiBtVmFsaWRhdGVkOworICAgIHVubGluayhmYWxzZSk7CisgICAgbVByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtQmluYXJ5OwogfQogCiB2b2lkIFByb2dyYW06OnJlbGVhc2UoKQpAQCAtMjQ0
MCwzNSArMzM2LDEyIEBAIHVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCiAKIGlu
dCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1JbmZvTG9n
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUluZm9M
b2cuZ2V0TGVuZ3RoKCk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpbnQgaW5kZXgg
PSAwOwotCi0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1p
bihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGlu
Zm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewotICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0
aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9CisgICAgcmV0dXJuIG1J
bmZvTG9nLmdldExvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogfQogCiB2b2lkIFByb2dy
YW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwg
R0x1aW50ICpzaGFkZXJzKQpAQCAtMjUwMywxNTIgKzM3Niw5NiBAQCB2b2lkIFByb2dyYW06Omdl
dEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50
ICpzaGFkZQogCiB2b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0
ZXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBp
bnQgYXR0cmlidXRlOwotICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAg
ewotICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgICAgICBtUHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNp
emUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNl
CiAgICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBi
dWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCisgICAgICAgIGlm
IChidWZzaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsK
ICAgICAgICAgfQotICAgIH0KIAotICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUg
J3R5cGUnIGluc3RhbmNlCi0KLSAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
XS50eXBlOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKKyAg
ICB9CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKIHsKLSAg
ICBpbnQgY291bnQgPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY291
bnQrKzsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2
ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQot
ICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQog
ICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1l
LmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChp
bnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwg
bWF4TGVuZ3RoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdl
dEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCiB2b2lk
IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQogewotICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGlu
dCBhY3RpdmVVbmlmb3JtID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3Ig
KHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAg
IGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9y
bV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBp
bmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBhY3RpdmVVbmlmb3JtKys7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAg
ICB9Ci0KLSAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4
IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAo
YnVmc2l6ZSA+IDApCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5n
ID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5p
Zm9ybV0tPmlzQXJyYXkoKSkKKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNp
emUpOwotICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KICAgICAgICAgaWYgKGxl
bmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAg
ICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgKnNpemUgPSBt
VW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3Vu
aWZvcm1dLT50eXBlOworICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9O
RTsKKyAgICB9CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7
Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1V
bmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsg
dW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b3VudCsrOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlVW5pZm9ybUNvdW50KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1z
OyB1bmlmb3JtSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5uYW1lLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGgg
Kz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBy
ZXR1cm4gbWF4TGVuZ3RoOwogfQogCiB2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCkBA
IC0yNjYzLDE2MSArNDgwLDI4IEBAIGJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24o
KSBjb25zdAogCiB2b2lkIFByb2dyYW06OnZhbGlkYXRlKCkKIHsKLSAgICByZXNldEluZm9Mb2co
KTsKKyAgICBtSW5mb0xvZy5yZXNldCgpOwogCi0gICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICBp
ZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dy
YW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0
ZWQgPSBmYWxzZTsKKyAgICAgICAgbVByb2dyYW1CaW5hcnktPnZhbGlkYXRlKG1JbmZvTG9nKTsK
ICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAg
ICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1W
YWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYg
YW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlw
ZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5k
IHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBm
YWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0
aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVb
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAr
K2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZl
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BT
W2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVu
aXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1B
WF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5p
dFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9nRXJy
b3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBz
YW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJl
VHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2Yg
Y29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICgl
ZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlw
ZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CisgICAgICAgIG1JbmZvTG9nLmFwcGVuZCgiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3Vj
Y2Vzc2Z1bGx5IGxpbmtlZC4iKTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBQcm9ncmFtOjppbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcmksIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3Rh
bnRUYWJsZSkKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogewotICAgIEQzRFhI
QU5ETEUgaGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0
VW5pZm9ybS0+X25hbWUuY19zdHIoKSk7Ci0gICAgaWYgKGhhbmRsZSkKKyAgICBpZiAobVByb2dy
YW1CaW5hcnkpCiAgICAgewotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAg
ICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25z
dGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIHJpLT5yZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNj
cmlwdGlvbi5SZWdpc3RlckluZGV4OwotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0g
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldDsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFt
QmluYXJ5LT5pc1ZhbGlkYXRlZCgpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBy
aS0+cmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAK
LUdMaW50IFByb2dyYW06OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERl
cHRoTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtRHhDb29yZExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNp
emVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlv
bjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0
RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNP
ckxpbmVzTG9jYXRpb247Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKaW5kZXggNjE4MzBjNi4uMjQ0NzMxZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDcg
QEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+Ci0j
aW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVj
dG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAg
LTI1LDQyICsyMywzNiBAQCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVudFNo
YWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRp
bmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5pZm9y
bShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQotICAg
IGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERl
Y29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0
ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CitleHRlcm4gY29uc3Qg
Y2hhciAqIGNvbnN0IGdfZmFrZXBhdGg7CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAg
IGJvb2wgZGlydHk7CitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncworeworICBwdWJsaWM6CisgICAg
QXR0cmlidXRlQmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotICAgIHN0
cnVjdCBSZWdpc3RlckluZm8KLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNldDsKLSAgICAg
ICAgaW50IHJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIGludCByZWdpc3RlckNvdW50OwotICAgIH07
CisgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFy
ICpuYW1lKTsKKyAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSkgY29uc3Q7CiAKLSAgICBSZWdpc3RlckluZm8gcHM7Ci0gICAgUmVnaXN0ZXJJbmZvIHZz
OworICBwcml2YXRlOgorICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGlu
Z1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogfTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0
aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVj
dCBVbmlmb3JtTG9jYXRpb24KK2NsYXNzIEluZm9Mb2cKIHsKLSAgICBVbmlmb3JtTG9jYXRpb24o
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQg
aW50IGluZGV4KTsKKyAgcHVibGljOgorICAgIEluZm9Mb2coKTsKKyAgICB+SW5mb0xvZygpOwog
Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1
bnNpZ25lZCBpbnQgaW5kZXg7CisgICAgaW50IGdldExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQg
Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsK
KworICAgIHZvaWQgYXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAgIHZv
aWQgYXBwZW5kKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldCgpOworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmZvTG9nKTsKKyAgICBjaGFy
ICptSW5mb0xvZzsKIH07CiAKIGNsYXNzIFByb2dyYW0KQEAgLTc0LDQ1ICs2NiwxMiBAQCBjbGFz
cyBQcm9ncmFtCiAgICAgYm9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwogICAgIGlu
dCBnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0OwogCi0gICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdl
dFZlcnRleFNoYWRlcigpOwotCiAgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50
IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRp
b24oY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJp
YnV0ZUluZGV4KTsKLQotICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5
cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIFRleHR1cmVUeXBlIGdldFNhbXBs
ZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4
KTsKLSAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOwotCi0g
ICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOwotICAgIGJvb2wg
c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5p
Zm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0KLSAgICBib29sIGdldFVuaWZvcm1mdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKLSAgICBib29s
IGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBh
cmFtcyk7Ci0KLSAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OwotICAg
IEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4Q29vcmRM
b2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkg
Y29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgZGlydHlB
bGxVbmlmb3JtcygpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOwogCiAgICAgdm9pZCBsaW5r
KCk7Ci0gICAgYm9vbCBpc0xpbmtlZCgpOworICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFt
QmluYXJ5KCk7CisKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
Zyk7CiAgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXpl
aSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CkBAIC0xMzIsOTAgKzkxLDI0IEBAIGNsYXNzIFBy
b2dyYW0KICAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lk
IHZhbGlkYXRlKCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKTsK
ICAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2Vy
aWFsKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUo
Y29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKLSAg
ICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcg
Jl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9iICpj
b21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQz
RFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBk
ZXN0cm95ID0gZmFsc2UpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0pOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxpbmtB
dHRyaWJ1dGVzKCk7Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpOwotCi0gICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpj
b25zdGFudFRhYmxlKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAm
Y29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0
aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25z
dCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpOwotICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAg
ICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0y
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAg
dm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uYnYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBH
TGJvb2xlYW4gKnYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nhbml0
aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25z
dCBjaGFyICppbmZvLCAuLi4pOwotICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBzdGF0
aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpt
RGV2aWNlOwogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVydGV4
U2hhZGVyICptVmVydGV4U2hhZGVyOwogCi0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKLSAg
ICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
bVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhl
Y3V0YWJsZTsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7Ci0gICAg
SUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworICAgIEF0dHJpYnV0ZUJpbmRp
bmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKIAotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0
cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlua2Vk
QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4W01B
WF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAgICAg
Ym9vbCBhY3RpdmU7Ci0gICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAg
VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBsZXJz
UFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlOwotICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0gICAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZvcm1B
cnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+
IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAgIEdM
aW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwot
ICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uOwotICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1CaW5h
cnkqIG1Qcm9ncmFtQmluYXJ5OwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRv
IGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIg
aW4gdXNlCi0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAgICAg
dW5zaWduZWQgaW50IG1SZWZDb3VudDsKIApAQCAtMjI1LDYgKzExOCw4IEBAIGNsYXNzIFByb2dy
YW0KIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKICAgICBjb25zdCBH
THVpbnQgbUhhbmRsZTsKKworICAgIEluZm9Mb2cgbUluZm9Mb2c7CiB9OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI4ZTUxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmNwcApAQCAtMCwwICsxLDI0ODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFBy
b2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBH
TCBwcm9ncmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorCisjaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworbmFtZXNwYWNlIGds
Cit7CitzdGQ6OnN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAg
IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBi
dWZmZXI7Cit9CisKK1VuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKKyAgICA6IHR5cGUodHlwZSksIF9u
YW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkp
LCBhcnJheVNpemUoYXJyYXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5h
bFNpemUodHlwZSkgKiBhcnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5
dGVzXTsKKyAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKK30K
KworVW5pZm9ybTo6flVuaWZvcm0oKQoreworICAgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK2Jvb2wg
VW5pZm9ybTo6aXNBcnJheSgpCit7CisgICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFy
XyIpID09IDA7Cit9CisKK1VuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCkgCisgICAgOiBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSks
IGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQoreworfQorCitQcm9ncmFtQmluYXJ5OjpQ
cm9ncmFtQmluYXJ5KCkKK3sKKyAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAg
bUNvbnN0YW50VGFibGVQUyA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7CisK
KyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGlj
SW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNh
bXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRl
eCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOwor
ICAgIH0KKworICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlID0gMDsKKworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAg
IG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAg
bUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9
IC0xOworICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmlu
YXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYg
KG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0
YW50VGFibGVWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOwor
ICAgIH0KK30KKworSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhl
bFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcigpCit7CisgICAg
cmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmFtZSkKKyAg
ICB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRl
W2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAtMTsKK30KKworaW50IFByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5k
ZXgoaW50IGF0dHJpYnV0ZUluZGV4KQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAw
ICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAKKyAgICByZXR1
cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworfQorCisvLyBSZXR1cm5zIG9uZSBt
b3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgorR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIHJldHVy
biBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAg
ICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNw
b25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBp
eGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitHTGludCBQcm9ncmFt
QmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KQoreworICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisg
ICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAg
ICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1w
bGVyc1BTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxl
cnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwor
CisgICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChsb2dpY2FsVGV4dHVy
ZVVuaXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5n
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8v
IFJldHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIg
dHlwZSBhbmQKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9y
IHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK1RleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBs
ZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6
CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVv
ZihtU2FtcGxlcnNQU1swXSkpOworICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUpOworICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50
ZXh0dXJlVHlwZTsKKyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChz
YW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkp
OworICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAg
ICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmlu
ZyBuYW1lKQoreworICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworCisgICAgLy8gU3Ry
aXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0
CisgICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBj
bG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJp
bmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBz
dWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAg
bmFtZS5lcmFzZShvcGVuKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMg
PSBtVW5pZm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9
IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBp
ZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCisgICAgICAgICAgICBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIC0xOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0g
MDsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAw
OworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDE7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQor
ICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
KworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAg
IHRhcmdldFsyXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisK
KyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAgdiArPSAzOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAg
ICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ld
ID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3Jj
SGVpZ2h0Pgordm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3sKKyAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dp
ZHRoKTsKKyAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVp
Z2h0KTsKKworICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCisgICAgewor
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgdGFyZ2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNy
Y1dpZHRoICsgeF07CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmln
aHQgc2lkZQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgIHsK
KyAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCisgICAgZm9y
IChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQorICAgIHsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAg
ICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9Cisg
ICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSA4OworICAgICAgICB2YWx1ZSArPSA0
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9z
ZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQg
Kz0gMTI7CisgICAgICAgIHZhbHVlICs9IDk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUNCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0
ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTY7Cisg
ICAgICAgIHZhbHVlICs9IDE2OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKKyAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8CisgICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQp
OworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXpl
b2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDMsCisgICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAq
IHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMg
bGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWly
ZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAg
ICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9
IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21w
b25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChV
bmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENv
dW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAg
bWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1p
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisKKyAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlz
IGxhcmdlIGVub3VnaAorICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVp
cmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVu
aWZvcm0tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB7
CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA4KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0
LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5p
Zm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0lOVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBz
aXplb2YoR0xpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGlu
dCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCit7Cisg
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisg
ICAgeworICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQor
CisvLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0
IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm1zKCkKK3sKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBt
VW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7
CisgICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisKKyAgICAgICAgaWYgKHRh
cmdldFVuaWZvcm0tPmRpcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xp
bnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dFVuaWZvcm0tPnR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDogICAgICAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9y
bW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCAzLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9W
RUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwg
aSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5
VW5pZm9ybTJpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
SU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBI
TFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVz
CitJRDNEMTBCbG9iICpQcm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFu
dFRhYmxlICoqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBpZiAoIWhsc2wpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBEV09SRCByZXN1bHQ7CisgICAgVUlOVCBmbGFn
cyA9IDA7CisgICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKKyAgICBpZiAocGVyZkFjdGl2ZSgp
KQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKKyNpZmRlZiBOREVC
VUcKKyAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Cisj
ZWxzZQorICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOworI2Vu
ZGlmCisKKyAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Cisg
ICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0
aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOworICAgICAgICB3
cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRl
eHQuc2l6ZSgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7CisgICAgICAgIHNvdXJjZVRleHQgPSBobHNs
OworICAgIH0KKworICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRDEwQmxv
YiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0
cmxlbihobHNsKSwgZ19mYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFn
cywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1l
c3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0
aXplZChtZXNzYWdlKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJB
Q0UoIlxuJXMiLCBtZXNzYWdlKTsKKworICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRp
Y19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFu
dFRhYmxlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CisKKyAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorCisgICAgcmV0dXJuIGJpbmFyeTsKK30KKworLy8gUGFja3MgdmFyeWluZ3Mg
aW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20g
W09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0
aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVn
aXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5
aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdl
dE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAg
ICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5z
aXplOworICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwg
bSA9PSAzIHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7
IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2
YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+Y29sID0gMDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlp
bmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3Jz
IC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQg
JiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PmNvbCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1b
eF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7
CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2Vb
Y29sdW1uXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9
IHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
c3BhY2VbY29sdW1uXSA+PSBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNv
bHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3Qg
cGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgdXNlZCByZWdpc3RlcnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsKKworICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICB7CisgICAgICAgIGlmIChw
YWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5n
W3JdWzNdKQorICAgICAgICB7CisgICAgICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiByZWdpc3RlcnM7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0
ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8
fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKKyAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyBmcmFnVmFyICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7
IGZyYWdWYXIrKykKKyAgICB7CisgICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOworICAgICAgICBm
cmFnVmFyLT5jb2wgPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2dHhWYXIgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gdmVy
dGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZ0eFZhcisrKQorICAgIHsKKyAgICAgICAgdnR4
VmFyLT5yZWcgPSAtMTsKKyAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKKyAgICB9CisKKyAgICAv
LyBNYXAgdGhlIHZhcnlpbmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCisgICAgY29uc3QgVmFyeWlu
ZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07CisgICAgaW50
IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRl
cik7CisKKyAgICBpZiAocmVnaXN0ZXJzIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRp
b25zCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBib29s
IHNtMyA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7CisgICAgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisK
KyAgICBpZiAocmVnaXN0ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5
aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlu
cHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBt
YXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0
cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAh
PSBpbnB1dC0+c2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRo
YXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBv
dXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5n
IiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMg
PyAiQ09MT1IiIDogIlRFWENPT1JEIik7CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNf
SU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBzZW1hbnRpY0lu
ZGV4ID0gMDsKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2
ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoYXR0cmlidXRlLT50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDog
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiB2ZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2ZXJ0ZXhITFNMICs9IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDog
VEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisKKyAgICAgICAgc2VtYW50
aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgfQorCisg
ICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047
XG4iOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7Cisg
ICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3Jd
WzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKworICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6
ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExT
TCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3Ry
KHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNl
c1BvaW50U2l6ZSAmJiBzbTMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0g
In07XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJWU19P
VVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsK
KworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7CisK
KyAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8g
TWF0cml4CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7
CisgICAgICAgIH0KKworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRl
QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91
dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRp
b24ueSArIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGds
X1Bvc2l0aW9uLncpICogMC41O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIt
Pm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIo
KGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQor
CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4i
OworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVn
ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWlu
Zy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0g
VmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAg
ICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7CisKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVy
IHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNr
aW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVn
aXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIi4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2goeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4
SExTTCArPSAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMzogdmVydGV4SExTTCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
dmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3Ry
KGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExT
TCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+
c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAi
ICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYm
IHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENv
b3JkIDogVEVYQ09PUkQwO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2
RmFjZSA6IFZGQUNFO1xuIjsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAg
ICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxu
IgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0
IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19J
TlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKyAgICAgICAg
CisgICAgICAgIGlmIChzbTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsg
MC41O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIGR4X0Nvb3JkIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2Vu
dGVyLnggYW5kIGNlbnRlci55LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQorICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3Jk
LnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisK
KyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgewor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5nbF9Qb2lu
dENvb3JkLng7XG4iOworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnkg
PSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOworICAgIH0KKworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCAr
PSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJvbnRDQ1cg
PyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+
c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkp
ICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisg
ICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9D
b2xvclswXTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hh
ZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAg
aWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZlcnRleFNoYWRl
ciB8fCAhdmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21lbnRTaGFk
ZXItPmdldEhMU0woKTsKKyAgICBzdGQ6OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVy
LT5nZXRITFNMKCk7CisKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhlbEhMU0ws
IHZlcnRleEhMU0wsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250
ZXh0KCk7CisgICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOworICAgIGNvbnN0IGNoYXIgKnBp
eGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6
ICJwc18yXzAiOworCisgICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmlu
YXJ5KGluZm9Mb2csIHZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFu
dFRhYmxlVlMpOworICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5
KGluZm9Mb2csIHBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJs
ZVBTKTsKKworICAgIGlmICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAg
ICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigo
RFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFi
bGUpOworICAgICAgICBIUkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxT
aGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhl
Y3V0YWJsZSk7CisKKyAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1
bHQpICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFyeS0+
UmVsZWFzZSgpOworICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2ZXJ0
ZXhCaW5hcnkgPSBOVUxMOworICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAg
aWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmluZGluZ3Ms
IGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFs
aW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfRlJBR01FTlRfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVBT
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX1ZFUlRF
WF9TSEFERVIsIG1Db25zdGFudFRhYmxlVlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhlc2Ug
dW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFu
ZCBkeF8KKyAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCBy
ZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgorICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7CisgICAgICAgICAg
ICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOworICAg
ICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQi
KTsKKyAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOworICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKKyAgICAgICAgICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5l
cyIpOworCisgICAgICAgICAgICBjb250ZXh0LT5tYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBEZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRl
cyBhbmQgRGlyZWN0M0QgOSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6bGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRl
QmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAgIHVuc2lnbmVkIGludCB1c2Vk
TG9jYXRpb25zID0gMDsKKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5k
aW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBp
bnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJp
YnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRB
dHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBs
b2NhdGlvbjsgbm90IGFuIGVycm9yCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5r
ZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlm
IChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBs
b2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBs
b2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmli
dXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5n
cy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJl
ZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAg
ICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3Mg
PiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUt
Pm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFp
bCB0byBsaW5rCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVb
YXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2Vt
YW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAg
ICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8
IHJvd3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmli
dXRlSW5kZXgrK10gPSBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9M
b2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sK
KyAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKwor
ICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAg
ICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5H
ZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKKworICAgICAgICBEM0RYQ09OU1RBTlRfREVT
QyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAx
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVz
Yyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50
KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoIWRl
ZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNj
cmlwdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlv
biBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9m
IHVuaWZvcm1zCisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJl
YWR5IGRlZmluZWQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oSW5mb0xvZyAm
aW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAg
IEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlO
YW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChw
c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFu
dCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3Jp
cHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVS
RV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxl
clJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBzaGFkZXIg
c2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodnNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4
KHZzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBn
ZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4
XS5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRf
U0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwor
ICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNh
bXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNl
ZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+
Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAg
eworICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlw
dGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdl
dENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAg
RDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
VUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwg
JmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkg
PyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVs
ZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5k
ZXggKyAiLiIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAg
ICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoK
KyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9u
LCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVz
Y3JpcHRpb24sIF9uYW1lKTsKKworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAg
IEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAg
IEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIH0KKworICAgIGlmIChzaGFk
ZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlw
dGlvbik7CisgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZz
LnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBt
VW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9ybUlu
ZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtQmluYXJ5Ojpj
cmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9u
LCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRp
b24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJD
VUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZF
QzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQz
RFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9W
RUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykg
IC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQy
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsK
K30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUK
K3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAg
JiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICJfIiArIG5hbWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0
cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJl
bW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsK
KyAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKKyAgICB7CisgICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7CisgICAgfQor
CisgICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9
PSAnXycpCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBuYW1lLnN1YnN0cigzKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9
CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQorewor
ICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09M
IGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOworCisgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5k
ZXggPj0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpd
ID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0
b3JbaSAqIDQgKyBqXSA9IDAuMGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+
PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
aW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdl
dFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJD
b3VudCA6IDA7CisgICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRo
LCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQg
PD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvcHlDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBib29sVmVjdG9yW2ldID0g
dltpXSAhPSBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4
ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3Rvciwg
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgs
IGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAg
ICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsK
KyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0g
MCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJn
ZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFT
U0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0
IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQo
KGZsb2F0KXZbaV0sIDAsIDAsIDApOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNh
bXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmly
c3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAg
ICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7Cisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OworCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwor
CisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAg
ICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0
NEluZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3Rh
bnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQor
eworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQz
RFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNE
WFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9
IDI7CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2
ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBw
bHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVj
dG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsy
XSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0
YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0g
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAo
ZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7
CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0
b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQz
RFhWRUNUT1I0ICp2ZWN0b3IpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5k
ZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0t
PnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJD
b25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29s
IFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1WYWxp
ZGF0ZWQ7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUg
YXR0cmlidXRlcworICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVu
c2lnbmVkIGludCBhdHRyaWJ1dGU7CisgICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0
ZSA9PSBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDAp
CisgICAgeworICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZV0ubmFtZS5jX3N0cigpOworCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBi
dWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlm
IChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xl
ICd0eXBlJyBpbnN0YW5jZQorCisgICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZV0udHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRl
eCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4
XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7
CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFt
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7Cisg
ICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2
ZVVuaWZvcm0gPSAwOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9y
bSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAg
ICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAg
IEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBz
bWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4g
MCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+bmFtZTsKKworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1l
W2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgewor
ICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9
IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9y
bUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5h
bWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1h
eExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICgh
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
bGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAg
Ly8gQ291bnRpbmcgaW4gIlswXSIuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5n
dGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKElu
Zm9Mb2cgJmluZm9Mb2cpCit7CisgICAgYXBwbHlVbmlmb3JtcygpOworICAgIGlmICghdmFsaWRh
dGVTYW1wbGVycygmaW5mb0xvZykpCisgICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAg
IH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmlu
Zm9Mb2cpCit7CisgICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFt
IGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQorICAgIC8vIHRl
eHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBW
YWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKKyAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3
RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCisKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRl
eHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKKyAgICBUZXh0dXJl
VHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
XTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCisgICAgeworICAgICAgICB0ZXh0dXJlVW5pdFR5cGVb
aV0gPSBURVhUVVJFX1VOS05PV047CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAo
bVNhbXBsZXJzUFNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlm
b3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwg
dW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUg
IT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlw
ZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1w
bGVyc1BTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dp
Y2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
bmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0
XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQo
IlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUg
aW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGlu
dCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlv
bjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUR4Q29vcmRMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhI
YWxmUGl4ZWxTaXplTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJv
bnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOWM1ZTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW1CaW5hcnkuaApAQCAtMCwwICsxLDIxMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJv
Z3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9n
cmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFN
X0JJTkFSWV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKworI2luY2x1
ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJh
Z21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVw
cmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0FycmF5KCk7
CisKKyAgICBjb25zdCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsg
ICAvLyBEZWNvcmF0ZWQgbmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVu
ZGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworCisgICAg
dW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0IFJlZ2lz
dGVySW5mbworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZmxvYXQ0SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOwor
ICAgICAgICAgICAgYm9vbEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0g
MDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RYUlNfQk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckluZGV4OyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0
OiAgZmxvYXQ0SW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQp
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
Q291bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgZmxvYXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7CisgICAg
ICAgIGludCBib29sSW5kZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7CisgICAgfTsK
KworICAgIFJlZ2lzdGVySW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9OworCisvLyBT
dHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBh
cnJheXMgdG8gaGFuZGxlcworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1
bnNpZ25lZCBpbnQgaW5kZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBUaGlzIGlz
IHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdv
dWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFyeQorewor
ICBwdWJsaWM6CisgICAgUHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5KCk7CisK
KyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVj
dDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQgZ2V0QXR0
cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5k
ZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNh
bXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRleHR1cmVU
eXBlIGdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KTsKKyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBl
IHR5cGUpOworCisgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0z
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlm
b3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVu
aWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1z
KTsKKyAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6
ZSwgR0xpbnQgKnBhcmFtcyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigp
IGNvbnN0OworICAgIEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50
IGdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKKworICAg
IHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOworCisg
ICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZh
dHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlcik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXpl
aSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lk
IGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAg
IEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0
cmlidXRlTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGlu
ZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51
bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQo
KTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIHZh
bGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZv
TG9nICppbmZvTG9nKTsKKyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAgICBzdGF0
aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
OyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5k
ZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVh
ZGluZyB1bmRlcnNjb3JlCisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUHJvZ3JhbUJpbmFyeSk7CisKKyAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQz
RFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CisKKyAgICBpbnQgcGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZp
bmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRl
cik7CisKKyAgICBib29sIGxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0
dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29sIGxpbmtV
bmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFi
bGUgKmNvbnN0YW50VGFibGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZv
TG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5h
bWUgPSAiIik7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQz
RFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSk7CisgICAgVW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICB2b2lk
IGFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9v
bGVhbiAqdik7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworCisgICAgSURpcmVj
dDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBk
dXJpbmcgbGlua2luZy4KKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7
CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisgICAgQXR0cmli
dXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFu
dGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAg
eworICAgICAgICBib29sIGFjdGl2ZTsKKyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0
OworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICB9OworCisgICAgU2FtcGxl
ciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgU2FtcGxlciBtU2Ft
cGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKyAgICBHTHVpbnQg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFu
Z2U7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7Cisg
ICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZv
cm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4
OworCisgICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRo
TG9jYXRpb247CisgICAgR0xpbnQgbUR4Q29vcmRMb2NhdGlvbjsKKyAgICBHTGludCBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb247CisgICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CisKKyAgICBib29sIG1WYWxpZGF0ZWQ7Cit9
OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAppbmRleCA2MDA0MjU1Li40YjkxMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCkBAIC02Myw2OCArNjMsMTQ0
IEBAIEdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QK
ICAgICByZXR1cm4gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGdldEQzREZvcm1hdCgpKTsKIH0KIAot
UmVuZGVyYnVmZmVyVGV4dHVyZTo6UmVuZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJlICp0ZXh0dXJl
LCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorLy8vLy8gUmVuZGVyYnVmZmVyVGV4
dHVyZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkg
OiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKK30KKwor
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCkKK3sKKyAgICBt
VGV4dHVyZTJELnNldChOVUxMKTsKK30KKworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0
aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVm
ZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEg
cmVmZXJlbmNlLgordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJv
eHkpOworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHBy
b3h5KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVy
IG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAq
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7Cit9CisKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0
RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2ls
KG1UYXJnZXQpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgo
KSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCgwKTsKK30KKworR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgbVRl
eHR1cmUuc2V0KHRleHR1cmUpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQoMCk7
CiB9CiAKLVJlbmRlcmJ1ZmZlclRleHR1cmU6On5SZW5kZXJidWZmZXJUZXh0dXJlKCkKK0dMZW51
bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAg
ICBtVGV4dHVyZS5zZXQoTlVMTCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFs
Rm9ybWF0KDApOworfQorCitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RG
b3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREM0RGb3JtYXQoMCk7
Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworfQorCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNl
dCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcCgpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKIH0K
IAogLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQogLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+YWRkUHJveHlSZWYocHJveHkpOworICAgIG1U
ZXh0dXJlQ3ViZU1hcC0+YWRkUHJveHlSZWYocHJveHkpOwogfQogCi12b2lkIFJlbmRlcmJ1ZmZl
clRleHR1cmU6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpCiB7Ci0gICAgbVRleHR1cmUtPnJlbGVhc2VQcm94eShwcm94eSk7CisgICAgbVRl
eHR1cmVDdWJlTWFwLT5yZWxlYXNlUHJveHkocHJveHkpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJUYXJnZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFy
Z2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6
OmdldERlcHRoU3RlbmNpbCgpCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsK
ICAgICByZXR1cm4gTlVMTDsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRX
aWR0aCgpIGNvbnN0CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0
aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgwKTsKKyAgICByZXR1
cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOwogfQotIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRIZWlnaHQoKSBj
b25zdAorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBj
b25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gs
IDApOwogfQotIAotR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEludGVybmFsRm9ybWF0
KCkgY29uc3QKKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJidWZm
ZXJUZXh0dXJlOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVy
ZS0+Z2V0RDNERm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RDNERm9y
bWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9CiAKLUdMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2FtcGxlcygpIGNvbnN0CitHTHNpemVpIFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0K
IAotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFNlcmlhbCgpIGNvbnN0Cit1
bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7
CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJn
ZXQpOwogfQogCisvLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCiBS
ZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlckludGVyZmFj
ZSAqaW5zdGFuY2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAgQVNTRVJUKGluc3RhbmNl
ICE9IE5VTEwpOwpAQCAtMTUyLDExICsyMjgsMTUgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnJlbGVh
c2UoKSBjb25zdAogICAgIFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7CiB9CiAKKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVy
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERl
cHRoU3RlbmNpbCgpOwpAQCAtMjQzLDExICszMjMsMTUgQEAgUmVuZGVyYnVmZmVyU3RvcmFnZTo6
flJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQogewogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQo
KQogewogICAgIHJldHVybiBOVUxMOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElE
aXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIHJldHVybiBOVUxMOwpAQCAtMzU2LDYgKzQ0MCw4IEBAIENvbG9yYnVmZmVyOjp+Q29s
b3JidWZmZXIoKQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0
M0RTdXJmYWNlOSAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgaWYgKG1S
ZW5kZXJUYXJnZXQpCkBAIC00MjgsOCArNTE0LDE1IEBAIERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRl
cHRoU3RlbmNpbGJ1ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
CiB7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2ls
LT5BZGRSZWYoKTsKKyAgICB9CisKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgKaW5kZXggNjBlYzA1OC4uZTZkNWRkYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCkBAIC0yMSw3ICsyMSw4IEBACiAK
IG5hbWVzcGFjZSBnbAogewotY2xhc3MgVGV4dHVyZTsKK2NsYXNzIFRleHR1cmUyRDsKK2NsYXNz
IFRleHR1cmVDdWJlTWFwOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3MgQ29sb3JidWZmZXI7
CiBjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CkBAIC01OCwxMiArNTksMTIgQEAgY2xhc3MgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1
ZmZlckludGVyZmFjZSk7CiB9OwogCi1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckludGVyZmFjZQorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVi
bGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVy
VGV4dHVyZShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKIAotICAgIHZp
cnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJU
ZXh0dXJlMkQoKTsKIAogICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CiAgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CkBAIC04MCw5ICs4MSwzNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJl
bmRlcmJ1ZmZlckludGVyZmFjZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgp
IGNvbnN0OwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
cmJ1ZmZlclRleHR1cmUpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZm
ZXJUZXh0dXJlMkQpOwogCi0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmU+IG1UZXh0dXJlOwor
ICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1U
YXJnZXQ7Cit9OworCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBS
ZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFBy
b3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwo
KTsKKworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAg
ICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKICAgICBH
TGVudW0gbVRhcmdldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvU2hhZGVyLmNwcAppbmRleCBhYzU4YWJlLi41N2ZkM2Q1IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCkBAIC0xMDIsMTQg
KzEwMiwxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAg
aWYgKG1JbmZvTG9nKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4
ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAg
IG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKG1J
bmZvTG9nKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUg
LSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2cs
IG1JbmZvTG9nLCBpbmRleCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsK
ICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KIApAQCAtMTQ3LDE0ICsxNDcs
MTQgQEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhcgogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAg
ICBpZiAoc291cmNlKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4
ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwotICAgICAgICBt
ZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKLSAgICB9CisgICAgICAgIGlmIChzb3VyY2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChp
bnQpc3RybGVuKHNvdXJjZSkpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBp
bmRleCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAgICAgICAgYnVm
ZmVyW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAppbmRleCA5YzdjMGRmLi40MzA4M2VjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKQEAgLTQyLDcgKzQy
LDcgQEAgdHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7CiAKIGNsYXNzIFNo
YWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmlu
YXJ5OwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBH
THVpbnQgaGFuZGxlKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0
dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7CiAKIGNsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBT
aGFkZXIKIHsKLSAgICBmcmllbmQgUHJvZ3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJp
bmFyeTsKIAogICBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFu
YWdlciwgR0x1aW50IGhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAppbmRleCAyOTE3N2QyLi41Y2NmOGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKQEAgLTEs
MzA5MCArMSwyOTA5IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmNwcDogSW1w
bGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKLS8v
IFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmpl
Y3RzIGFuZCByZWxhdGVkCi0vLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAzLjcgcGFnZSA2My4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNp
bmNsdWRlIDxkM2R4OXRleC5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGlu
dHJpbi5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wv
RGlzcGxheS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIu
aCIKLQotbmFtZXNwYWNlIGdsCi17Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJy
ZW50VGV4dHVyZVNlcmlhbCA9IDE7Ci0KLXN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVG
b3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIGlmIChmb3JtYXQg
PT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4g
RDNERk1UX0RYVDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQz
OwotICAgIH0KLSAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RG
TVRfQTMyQjMyRzMyUjMyRjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9B
TFBIQSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQot
c3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIHN3aXRjaChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAg
ICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2Ug
RDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUlt
YWdlOjpJbWFnZSgpCi17Ci0gICAgbVdpZHRoID0gMDsgCi0gICAgbUhlaWdodCA9IDA7Ci0gICAg
bUZvcm1hdCA9IEdMX05PTkU7Ci0gICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotCi0gICAg
bVN1cmZhY2UgPSBOVUxMOwotCi0gICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9vbCA9
IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLX0K
LQotSW1hZ2U6On5JbWFnZSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAg
bVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5lKEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwg
Ym9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAg
ICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAgICBtRm9ybWF0ICE9IGZvcm1hdCB8fAotICAg
ICAgICBtVHlwZSAhPSB0eXBlIHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAg
ICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBt
Rm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNvbXB1
dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9
IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShtRm9ybWF0LCBtVHlwZSk7Ci0KLSAgICAgICAgaWYg
KG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltYWdlOjpjcmVh
dGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNvbnN0IEQzRFBPT0wg
cG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07Ci0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYg
bUhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAg
ICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVl
c3RIZWlnaHQgPSBtSGVpZ2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYm
IChtV2lkdGggJSA0ICE9IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2wgaXNNdWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291
bnQgPSAwOwotICAgICAgICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0
SGVpZ2h0IDw8PSAxOwotICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAg
ICAgICAgICBpZiAocmVxdWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09
IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRv
RmV0Y2ggPSB1cHNhbXBsZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWln
aHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGdldEQzREZvcm1hdCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1Rl
eHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdl
IHN1cmZhY2UgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZh
bHNlOwotICAgIG1EM0RQb29sID0gcG9vbFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOjpsb2Nr
KEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KQotewotICAgIGNy
ZWF0ZVN1cmZhY2UoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxM
OwotCi0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbVN1cmZhY2Ut
PkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZTo6dW5sb2NrKCkKLXsKLSAgICBpZiAobVN1cmZhY2Up
Ci0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotfQotCi1ib29sIElt
YWdlOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gSXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFn
ZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBl
biBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2gg
d291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQz
REZNVF9VTktOT1dOKTsKLQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RT
dXJmYWNlOSAqSW1hZ2U6OmdldFN1cmZhY2UoKQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsKLQot
ICAgIHJldHVybiBtU3VyZmFjZTsKLX0KLQotdm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2Uo
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsK
LSAgICAgICAgRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2Uoc3VyZmFjZSwgTlVMTCwgTlVMTCwg
bVN1cmZhY2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIG1TdXJm
YWNlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAg
c3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09M
X01BTkFHRUQpOwotCi0gICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1EM0RQb29sID0gZGVz
Yy5Qb29sOwotfQotCi12b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UgPSBnZXRTdXJmYWNlKCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLQotICAgICAgICBpZiAobUQzRFBv
b2wgPT0gRDNEUE9PTF9NQU5BR0VEKQotICAgICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVj
dCwgc291cmNlU3VyZmFjZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3Qg
YmUgU1lTVEVNTUVNLCBkZXN0IG11c3QgYmUgREVGQVVMVCBwb29scyAKLSAgICAgICAgICAgIFBP
SU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9OwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBnZXREZXZpY2UoKS0+VXBkYXRlU3VyZmFjZShzb3VyY2VTdXJmYWNlLCAmcmVjdCwg
ZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xl
IGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBz
dG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCBy
ZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNo
IGxpbmUuCi12b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQpOwotICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAt
IDEpOwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0w4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBs
b2FkQkdSQURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1h
dCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJH
QjU2NURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKG1Gb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2Fk
UkdCQTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBC
R1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9h
dERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6
Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0
IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3Rv
cmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAg
ICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBj
aGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAg
IAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxv
YXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhv
ZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0OwotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5
dGVzUGVyUGl4ZWw7Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRp
b24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hd
OwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAg
ICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZs
b2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogOCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgz
QzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxw
dCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IGludCBk
ZXN0Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMjogNDsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVs
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24g
Zm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsy
KngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2Vb
Mip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsx
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
NDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAx
RikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTAp
ID4+IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAq
IDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAg
KyB4b2Zmc2V0ICogOCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsg
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwg
RSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3Qg
PSBOVUxMOwotICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZmMDBmZik7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0KTsKLSAgICAgICAgaW50IHggPSAwOwotCi0gICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdy
aXRlcyBhbGlnbmVkCi0gICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oJmRlc3RbeF0pICYgMTUpICE9IDApICYmIHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYw
MGZmMDApOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyAzIDwgd2lkdGg7IHggKz0g
NCkKLSAgICAgICAgewotICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1
X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAg
ICAgICAgICAgIC8vIE1hc2sgb3V0IGcgYW5kIGEsIHdoaWNoIGRvbid0IGNoYW5nZQotICAgICAg
ICAgICAgX19tMTI4aSBnYUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJyTWFzaywgc291
cmNlRGF0YSk7Ci0gICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByCi0gICAgICAgICAgICBf
X20xMjhpIGJyQ29tcG9uZW50cyA9IF9tbV9hbmRfc2kxMjgoc291cmNlRGF0YSwgYnJNYXNrKTsK
LSAgICAgICAgICAgIC8vIFN3YXAgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBiclN3YXBw
ZWQgPSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25lbnRz
LCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsKLSAg
ICAgICAgICAgIF9fbTEyOGkgcmVzdWx0ID0gX21tX29yX3NpMTI4KGdhQ29tcG9uZW50cywgYnJT
d2FwcGVkKTsKLSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9f
bTEyOGkqPigmZGVzdFt4XSksIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQZXJm
b3JtIGxlZnRvdmVyIHdyaXRlcwotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYg
MHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JB
VUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2Jh
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAw
eDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8
IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjAwMCkgPj4gMTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2Jh
ICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
YmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAw
eDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+
IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4
KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVM
TDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0
UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGggKiAxNik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICAr
IHhvZmZzZXQgKiA4OwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAq
c291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5
ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBtZW1jcHko
ZGVzdCwgc291cmNlLCB3aWR0aCo0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdCB7Ci0gICAgc3dpdGNoIChnZXREM0RGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGNh
c2UgRDNERk1UX0RYVDE6Ci0gICAgICAgICAgbG9hZERYVDFEYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgICBs
b2FkRFhUM0RhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEQzREZNVF9EWFQ1OgotICAgICAgICAgIGxvYWREWFQ1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDFC
bG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkg
ewotICAvLyBBIERYVDEgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC0xXSBjb2xvcjAuCi0gIC8v
IFsyLTNdIGNvbG9yMS4KLSAgLy8gWzQtN10gY29sb3IgYml0bWFwLCAyIGJpdHMgcGVyIHBpeGVs
LgotICAvLyBTbyBlYWNoIG9mIHRoZSA0LTcgYnl0ZXMgcmVwcmVzZW50cyBvbmUgbGluZSwgZmxp
cHBpbmcgYSBibG9jayBpcyBqdXN0Ci0gIC8vIGZsaXBwaW5nIHRob3NlIGJ5dGVzLgotCi0gIC8v
IEZpcnN0IDMyLWJpdHMgaXMgdHdvIFJHQjU2NSBjb2xvcnMgc2hhcmVkIGJ5IHRpbGUgYW5kIGRv
ZXMgbm90IG5lZWQgdG8gYmUgbW9kaWZpZWQuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0KLSAg
Ly8gU2Vjb25kIDMyLWJpdHMgY29udGFpbnMgNCByb3dzIG9mIDQgMi1iaXQgaW50ZXJwb2xhbnRz
IGJldHdlZW4gdGhlIGNvbG9ycy4gQWxsIHJvd3Mgc2hvdWxkIGJlIGZsaXBwZWQuCi0gIGRlc3Rb
MV0gPSAoc291cmNlWzFdID4+IDI0KSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA8PCA4KSAm
IDB4MDBGRjAwMDApIHwKLSAgICAgICAgICAgICgoc291cmNlWzFdID4+IDgpICYgMHgwMDAwRkYw
MCkgfAotICAgICAgICAgICAgKHNvdXJjZVsxXSA8PCAyNCk7Ci19Ci0KLS8vIEZsaXBzIHRoZSBm
aXJzdCAyIGxpbmVzIG9mIGEgRFhUMSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMg
dm9pZCBGbGlwQ29weURYVDFCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVu
c2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0g
c291cmNlWzBdOwotICBkZXN0WzFdID0gKChzb3VyY2VbMV0gPDwgOCkgJiAweDAwMDBGRjAwKSB8
Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA+PiA4KSAmIDB4MDAwMDAwRkYpOwotfQotCi0vLyBG
bGlwcyBhIGZ1bGwgRFhUMyBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBG
bGlwQ29weURYVDNCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVk
IGludCogZGVzdCkgewotICAvLyBBIERYVDMgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMC03XSAg
YWxwaGEgYml0bWFwLCA0IGJpdHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2Nr
LgotCi0gIC8vIEZpcnN0IGFuZCBTZWNvbmQgMzIgYml0cyBhcmUgNGJpdCBwZXIgcGl4ZWwgYWxw
aGEgYW5kIG5lZWQgdG8gYmUgZmxpcHBlZC4KLSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYp
IHwgKHNvdXJjZVsxXSA8PCAxNik7Ci0gIGRlc3RbMV0gPSAoc291cmNlWzBdID4+IDE2KSB8IChz
b3VyY2VbMF0gPDwgMTYpOwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRo
ZSBhYm92ZSBmdW5jdGlvbi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRl
c3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQzIGJsb2Nr
IGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2NrSGFsZihj
b25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNl
ZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSAoc291cmNlWzFdID4+IDE2KSB8IChzb3VyY2Vb
MV0gPDwgMTYpOwotICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIp
OwotfQotCi0vLyBGbGlwcyBhIGZ1bGwgRFhUNSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1z
dGF0aWMgdm9pZCBGbGlwQ29weURYVDVCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3Vy
Y2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDUgYmxvY2sgbGF5b3V0IGlzOgot
ICAvLyBbMF0gICAgYWxwaGEwLgotICAvLyBbMV0gICAgYWxwaGExLgotICAvLyBbMi03XSAgYWxw
aGEgYml0bWFwLCAzIGJpdHMgcGVyIHBpeGVsLgotICAvLyBbOC0xNV0gYSBEWFQxIGJsb2NrLgot
Ci0gIC8vIFRoZSBhbHBoYSBiaXRtYXAgZG9lc24ndCBlYXNpbHkgbWFwIGxpbmVzIHRvIGJ5dGVz
LCBzbyB3ZSBoYXZlIHRvCi0gIC8vIGludGVycHJldCBpdCBjb3JyZWN0bHkuICBFeHRyYWN0ZWQg
ZnJvbQotICAvLyBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvcmVnaXN0cnkvc3BlY3MvRVhUL3RleHR1
cmVfY29tcHJlc3Npb25fczN0Yy50eHQgOgotICAvLwotICAvLyAgIFRoZSA2ICJiaXRzIiBieXRl
cyBvZiB0aGUgYmxvY2sgYXJlIGRlY29kZWQgaW50byBvbmUgNDgtYml0IGludGVnZXI6Ci0gIC8v
Ci0gIC8vICAgICBiaXRzID0gYml0c18wICsgMjU2ICogKGJpdHNfMSArIDI1NiAqIChiaXRzXzIg
KyAyNTYgKiAoYml0c18zICsKLSAgLy8gICAgICAgICAgICAgICAgICAgMjU2ICogKGJpdHNfNCAr
IDI1NiAqIGJpdHNfNSkpKSkKLSAgLy8KLSAgLy8gICBiaXRzIGlzIGEgNDgtYml0IHVuc2lnbmVk
IGludGVnZXIsIGZyb20gd2hpY2ggYSB0aHJlZS1iaXQgY29udHJvbCBjb2RlCi0gIC8vICAgaXMg
ZXh0cmFjdGVkIGZvciBhIHRleGVsIGF0IGxvY2F0aW9uICh4LHkpIGluIHRoZSBibG9jayB1c2lu
ZzoKLSAgLy8KLSAgLy8gICAgICAgY29kZSh4LHkpID0gYml0c1szKig0KnkreCkrMS4uMyooNCp5
K3gpKzBdCi0gIC8vCi0gIC8vICAgd2hlcmUgYml0IDQ3IGlzIHRoZSBtb3N0IHNpZ25pZmljYW50
IGFuZCBiaXQgMCBpcyB0aGUgbGVhc3QKLSAgLy8gICBzaWduaWZpY2FudCBiaXQuCi0gIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihzb3VyY2UpKTsKLSAgdW5zaWduZWQgY2hh
ciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PHZv
aWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzBfMSA9IHNvdXJjZUJ5dGVzWzJdICsg
MjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICogc291cmNlQnl0ZXNbNF0pOwotICB1bnNpZ25l
ZCBpbnQgbGluZV8yXzMgPSBzb3VyY2VCeXRlc1s1XSArIDI1NiAqIChzb3VyY2VCeXRlc1s2XSAr
IDI1NiAqIHNvdXJjZUJ5dGVzWzddKTsKLSAgLy8gc3dhcCBsaW5lcyAwIGFuZCAxIGluIGxpbmVf
MF8xLgotICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYpIDw8
IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAwMCkg
Pj4gMTIpOwotICAvLyBzd2FwIGxpbmVzIDIgYW5kIDMgaW4gbGluZV8yXzMuCi0gIHVuc2lnbmVk
IGludCBsaW5lXzNfMiA9ICgobGluZV8yXzMgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgKChsaW5lXzJfMyAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RC
eXRlc1swXSA9IHNvdXJjZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sx
XTsKLSAgZGVzdEJ5dGVzWzJdID0gbGluZV8zXzIgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAo
bGluZV8zXzIgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzNfMiAmIDB4
ZmYwMDAwKSA+PiAxNjsKLSAgZGVzdEJ5dGVzWzVdID0gbGluZV8xXzAgJiAweGZmOwotICBkZXN0
Qnl0ZXNbNl0gPSAobGluZV8xXzAgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s3XSA9IChs
aW5lXzFfMCAmIDB4ZmYwMDAwKSA+PiAxNjsKLQotICAvLyBBbmQgZmxpcCB0aGUgRFhUMSBibG9j
ayB1c2luZyB0aGUgYWJvdmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3Vy
Y2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEg
RFhUNSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDVC
bG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkg
ewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VC
eXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDxjb25z
dCB2b2lkKj4oc291cmNlKSk7Ci0gIHVuc2lnbmVkIGNoYXIqIGRlc3RCeXRlcyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDx2b2lkKj4oZGVzdCkpOwotICB1bnNpZ25l
ZCBpbnQgbGluZV8wXzEgPSBzb3VyY2VCeXRlc1syXSArIDI1NiAqIChzb3VyY2VCeXRlc1szXSAr
IDI1NiAqIHNvdXJjZUJ5dGVzWzRdKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5l
XzBfMSAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxp
bmVfMF8xICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNlQnl0ZXNb
MF07Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNbMl0gPSBs
aW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzFfMCAmIDB4ZmYwMCkgPj4g
ODsKLSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfMV8wICYgMHhmZjAwMDApID4+IDE2OwotICBGbGlw
Q29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi12b2lkIEltYWdl
Ojpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZz
ZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8
IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKLSAgICBBU1NF
UlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1
bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1
dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0Lgot
ICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jv
c3MgPSBibG9ja3NBY3Jvc3MgKiAyOwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7
IHggKz0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhl
IGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
ICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotCi0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsg
eCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhv
ZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NF
UlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NF
UlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09
IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3
aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3Mg
PSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0
OwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAg
ICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNv
dXJjZVt4ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJd
OwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwot
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQzQmxvY2tG
dWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQ1
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewot
ICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0g
MCk7Ci0gICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0g
MSk7Ci0gICAgQVNTRVJUKGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0
UGl0Y2ggJSAxNiA9PSAwKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQg
aW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0g
ICAgLy8gUm91bmQgd2lkdGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQg
YmxvY2tzQWNyb3NzID0gKHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxv
Y2tzQWNyb3NzICogNDsKLQotICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawot
ICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVz
dFt4ICsgMV0gPSBzb3VyY2VbeCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0g
c291cmNlW3ggKyAyXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsg
M107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJjZSAr
IHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIDE2KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fj
cm9zczsgeCArPSA0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxp
cENvcHlEWFQ1QmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8vIFRo
aXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGlu
dGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFn
ZTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRh
cmdldCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3Jp
cHRpb24pOwotICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3Jl
ZW5QbGFpblN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVz
Y3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5V
TEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZp
Y2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsK
LQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVy
VGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXRE
YXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQg
PSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBS
RUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRl
c3RZT2Zmc2V0ICsgaGVpZ2h0fTsKLQotICAgIGlmIChpc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAg
ICB7Ci0gICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGdldFN1cmZh
Y2UoKSwgTlVMTCwgJmRlc3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBOVUxMLCAmc291cmNlUmVj
dCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3B5aW5nIHN1cmZhY2VzIHVuZXhw
ZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNl
TG9jayA9IHswfTsKLSAgICAgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3Qo
JnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJj
ZSBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0
TG9jayA9IHswfTsKLSAgICAgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0UmVjdCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3Rh
bmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlVubG9ja1JlY3QoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciop
c291cmNlTG9jay5wQml0czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5z
aWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzY3Jp
cHRpb24uRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9Y
OFI4RzhCODoKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3Vy
Y2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
QThMODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAqIDQgKyAy
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSBzb3VyY2Vb
eCAqIDQgKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAg
ICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBp
dGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6
Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAm
IDB4N0M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkg
fCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
OEw4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsg
MV0gJiAweDdDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAwXSA9
IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAxXSA9IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Ug
Kz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVz
dExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrKCk7Ci0gICAgICAgIHJl
bmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXRE
YXRhLT5SZWxlYXNlKCk7Ci0KLSAgICBtRGlydHkgPSB0cnVlOwotfQotCi1UZXh0dXJlU3RvcmFn
ZTo6VGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0
KHJlbmRlclRhcmdldCksCi0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQ
b29sKG1SZW5kZXJUYXJnZXQpKSwKLSAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNl
cmlhbCgpKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKLXsKLX0K
LQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJl
dHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQo
KSBjb25zdAotewotICAgIHJldHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0K
LQotRDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1EM0RQb29sOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsKLX0KLQotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwoKQotewotICAgIHJldHVy
biBtQ3VycmVudFRleHR1cmVTZXJpYWwrKzsKLX0KLQotVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQg
aWQpIDogUmVmQ291bnRPYmplY3QoaWQpCi17Ci0gICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1Rf
TUlQTUFQX0xJTkVBUjsKLSAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOwotICAgIG1XcmFwUyA9
IEdMX1JFUEVBVDsKLSAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7Ci0gICAgbURpcnR5UGFyYW1ldGVy
cyA9IHRydWU7Ci0gICAgbVVzYWdlID0gR0xfTk9ORTsKLSAgICAKLSAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwotCi0gICAgbUltbXV0YWJsZSA9IGZhbHNlOwotfQotCi1UZXh0dXJlOjp+VGV4dHVy
ZSgpCi17Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIo
R0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNl
IEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgot
ICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTElORUFSOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1pbkZpbHRlciAh
PSBmaWx0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZp
bHRlcjsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24g
c3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJv
b2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAgc3dpdGNoIChm
aWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAg
ICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdy
YXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
V3JhcFMoR0xlbnVtIHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBH
TF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFMgIT0g
d3JhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOwotICAg
ICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVs
IHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6
c2V0V3JhcFQoR0xlbnVtIHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAg
IGNhc2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2Fz
ZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFQg
IT0gd3JhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOwot
ICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKLXsKLSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTk9ORToKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRToKLSAgICAgICAgbVVzYWdlID0gdXNhZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVt
IFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5GaWx0ZXI7
Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVy
biBtTWFnRmlsdGVyOwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAotewot
ICAgIHJldHVybiBtV3JhcFM7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1XcmFwVDsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFVzYWdlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVVzYWdlOwotfQotCi12b2lkIFRleHR1cmU6OnNldEltYWdl
KEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2Up
Ci17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JF
Q1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQs
IE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+
Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsK
LSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdp
ZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZTo6
c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmICh3aWR0
aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1h
Z2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoSXNDb21wcmVzc2VkKGlt
YWdlLT5nZXRGb3JtYXQoKSkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IGltYWdlLT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwaXhlbHMg
IT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGltYWdlLT5sb2Fk
RGF0YSh4b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFn
ZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVu
bG9jaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsK
LSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgUkVD
VCB1cGRhdGVSZWdpb247Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAg
ICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRh
dGVSZWdpb24uYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9u
LnRvcCA9IHlvZmZzZXQ7Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwot
Ci0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwot
ICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4
b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0
SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQotewotICAg
IGlmICghaXNTYW1wbGVyQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
LSAgICBpZiAoZ2V0U3RvcmFnZShmYWxzZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgIHJldHVybiBnZXRC
YXNlVGV4dHVyZSgpOwotfQotCi1ib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eVBhcmFtZXRlcnM7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6
aGFzRGlydHlJbWFnZXMoKSBjb25zdAotewotICAgIHJldHVybiBtRGlydHlJbWFnZXM7Ci19Ci0K
LXZvaWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpCi17Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IGZh
bHNlOwotICAgIG1EaXJ0eUltYWdlcyA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVy
ZTo6Z2V0VGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBn
ZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1
cmVTZXJpYWwoKSA6IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9
IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRSZW5k
ZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFi
bGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW1tdXRhYmxlOwotfQotCi1HTGludCBUZXh0dXJl
OjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKLXsK
LSAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IGdldENvbnRleHQo
KS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gMDsg
ICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgLy8gT3BlbkdMIEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3QgZG9lcyBu
b3QgcGVybWl0IE5QT1QgbWlwbWFwcy4KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1H
TGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNyZWF0aW9uTGV2ZWxzKHNpemUsIHNpemUpOwotfQotCi1pbnQgVGV4dHVyZTo6bGV2
ZWxDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNl
VGV4dHVyZSgpLT5HZXRMZXZlbENvdW50KCkgOiAwOwotfQotCi1CbGl0ICpUZXh0dXJlOjpnZXRC
bGl0dGVyKCkKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIHJl
dHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6Y29weVRvUmVu
ZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBib29sIGZyb21NYW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmIChmcm9tTWFuYWdlZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2Uo
ZGVzdCwgTlVMTCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDAp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgICAgICAgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgICAgIGRpc3Bs
YXktPmVuZFNjZW5lKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0
KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJ
RGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UodHJ1ZSks
IG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkK
LXsKLSAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwotfQotCi1UZXh0dXJlU3RvcmFnZTJE
OjpUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShy
ZW5kZXJUYXJnZXQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
c3VlU2VyaWFsKCkpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7Ci0KLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8g
RDNEVVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1UZXh0
dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3Qz
RFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQot
ewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgIGlmIChtVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbChsZXZlbCwgJnN1cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgIH0KLQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKlRleHR1cmVTdG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTJEOjpnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJl
bmRlclRhcmdldFNlcmlhbDsKLX0KLQotVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6
IFRleHR1cmUoaWQpCi17Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIG1TdXJmYWNlID0g
TlVMTDsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7
Ci19Ci0KLVRleHR1cmUyRDo6flRleHR1cmUyRCgpCi17Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBOVUxMOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVM
TDsKLSAgICAKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+c2V0
Qm91bmRUZXh0dXJlKE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgfQotfQot
Ci0vLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJi
dWZmZXJzIGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3
ZSBkbyBub3QgYXR0ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIg
cHJveHkgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQot
dm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQot
ewotICAgIGlmIChtUHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAg
aWYgKG1Qcm94eVJlZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwot
fQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBH
TF9URVhUVVJFXzJEOwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2
ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhl
aWdodChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0u
Z2V0SGVpZ2h0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRl
eHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXS5nZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VHlwZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKLX0KLQotRDNERk9S
TUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgcmVsZWFzZVRleEltYWdlKCk7Ci0KLSAgICBib29s
IHJlZGVmaW5lZCA9IG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIGZhbHNlKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRlZmluZWQp
Ci0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtp
XS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsK
LSAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBUZXh0dXJl
OjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7
Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNl
KQotewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgR0xlbnVtIGZvcm1hdDsKLQotICAg
IHN3aXRjaChzdXJmYWNlLT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xfUkdCOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwg
c3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsKLQot
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1T
dXJmYWNlLT5zZXRCb3VuZFRleHR1cmUodGhpcyk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxl
YXNlVGV4SW1hZ2UoKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJm
YWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLQot
ICAgICAgICBpZiAobVRleFN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnJlZGVm
aW5lKEdMX1JHQkEsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgVGV4dHVy
ZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2
ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwot
Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwp
OwotCi0gICAgICAgIGlmIChkZXN0TGV2ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdl
ICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgICAgICBpbWFnZS0+dXBkYXRl
U3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGltYWdlLT5tYXJr
Q2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJ
bWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAg
IGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAg
IH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
Ci17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlb
bGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFn
ZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0K
LSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgIAotICAgIGlmICghbUltYWdlQXJy
YXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsK
LSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0K
LSAgICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENv
dW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9y
bVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJj
ZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1w
KHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdo
dCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlP
ZmZzZXQoMCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdl
LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0
LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlT
dWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJh
eVtsZXZlbF0uZ2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdl
dCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkK
LSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4
U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0uY29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBy
ZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNS
ZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQot
ICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNv
dXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xv
cmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xh
bXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0
KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3Qucmln
aHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2Ut
PmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVz
dFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAg
ICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVy
KCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLXsKLSAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOwotICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0
KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJU
YXJnZXQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHRydWUpOwotICAgICAg
ICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQgPSBzdGQ6
Om1heCgxLCBoZWlnaHQgPj4gMSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZl
bHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQot
ICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAsIDAs
IEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwot
Ci0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVts
ZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBs
ZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBd
LmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWln
aHQoKTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOwot
Ci0gICAgc3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoK
LSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQ
TUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAg
IG1pcG1hcHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0ZM
T0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAot
ICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0
Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCi0gICAgewotICAgICAg
ICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9v
bCBucG90U3VwcG9ydCA9IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCk7
Ci0KLSAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgIHsKLSAgICAgICAgaWYgKChnZXRXcmFwUygp
ICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8Ci0gICAgICAgICAgICAo
Z2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFucG90U3VwcG9ydCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBs
ZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29s
IFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW1tdXRh
YmxlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHTHNpemVp
IHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9
IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50
IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIGZvciAoaW50IGxldmVs
ID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJh
eVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdLmdldFR5cGUo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdp
ZHRoID4+IGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBz
dGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJl
c3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpU
ZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3Jh
Z2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0
cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFn
ZXMKLXZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHdpZHRo
ID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFn
ZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxz
KHdpZHRoLCBoZWlnaHQpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5n
ZXREM0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZv
cm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdl
ID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHJl
bmRlclRhcmdldCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFj
ZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBpbnQg
bGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VB
cnJheVtsZXZlbF07Ci0KLSAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAg
ICBUZXh0dXJlU3RvcmFnZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkg
IT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRX
aWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdo
dCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1h
dCgpOwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZl
bHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9y
YWdlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENv
dW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotICAgICAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4
U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQotICAgICAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2Ut
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQot
dm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFnZXRDb250ZXh0
KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1Bv
dzIobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5n
ZXRIZWlnaHQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBs
ZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0
ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUlt
YWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgewotICAgICAgICBy
ZWRlZmluZUltYWdlKGksIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpID4+IGksIDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBd
LmdldFR5cGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdl
LT5pc1JlbmRlclRhcmdldCgpKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqdXBwZXIgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkgLSAxKTsKLSAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwoaSk7Ci0KLSAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIo
dXBwZXIsIGxvd2VyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9
IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkg
bG93ZXItPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFu
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1J
bWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbaSAtIDFd
LmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRv
ICVkLiIsIGkgLSAxLCBpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUltYWdlQXJy
YXlbaV0ubWFya0RpcnR5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAodGFy
Z2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBy
b3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlz
LCB0YXJnZXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Ci19Ci0K
LUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KQotewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3Jh
Z2UodHJ1ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQot
ICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1
cmZhY2VMZXZlbCgwKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJU
YXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAg
IGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhT
dG9yYWdlOwotfQotCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1h
cChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJn
ZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQotewotICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVRleHR1cmUg
PSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShz
aXplLCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAw
LCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6flRleHR1
cmVTdG9yYWdlQ3ViZU1hcCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBp
bnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0g
ICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVy
ZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwg
bGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6Omdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBt
Rmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdl
dCk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpIDogVGV4
dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAg
ICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7Ci0gICAgfQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6
flRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAg
ICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRl
IG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0
byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3Rpbmcg
YXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMg
bm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0
aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBv
aW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxs
IGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAg
ICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0g
PT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+
IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAg
aWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFw
OjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwot
fQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QK
LXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0g
ICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWln
aHQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxd
LmdldEhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBU
ZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBt
SW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFw
OjpnZXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlw
ZSgpOwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotfQotCi12
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1h
Z2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0g
ICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5l
Z1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpCi17Ci0gICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxl
dmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGZh
Y2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURf
QllURSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhl
bHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBBU1NFUlQobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsK
LQotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAgICAgICBBU1NF
UlQoZGVzdExldmVsICE9IE5VTEwpOwotCi0gICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkK
LSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2Vd
W2xldmVsXTsKLSAgICAgICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAgIGRlc3RMZXZlbC0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1h
Z2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0p
KQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykK
LXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtm
YWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFj
ZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB9Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVD
dWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBtSW1h
Z2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotCi0gICAgYm9vbCBtaXBtYXBwaW5nOwotCi0gICAg
c3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBH
TF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJ
TkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIG1pcG1h
cHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKGdl
dEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVh
ckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1Qg
fHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1Rf
TUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmIChnZXRXcmFw
UygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdF
IHx8IG1pcG1hcHBpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICghbWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlm
ICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghaXNNaXBt
YXBDdWJlQ29tcGxldGUoKSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRl
bmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRl
eHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1JbWFnZUFy
cmF5WzBdWzBdLmdldFdpZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwg
NjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFdp
ZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWln
aHQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VdWzBdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21w
bGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLQotICAgIGludCBxID0gbG9nMihzaXplKTsKLQotICAg
IGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldEZvcm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRXaWR0aCgp
ICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQo
KSBjb25zdAotewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7
Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VUZXh0
dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0
QmFzZVRleHR1cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRl
eHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhp
c3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBH
THNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotICAgIEdMaW50IGxl
dmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBt
SW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRh
cmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdl
OwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZv
cm1hdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5h
Z2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
bVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCArIGZhY2UsIGxldmVsKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVts
ZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0g
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZl
bF07Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5nZXRX
aWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQot
ewotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAg
ICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQotICAgIHsKLSAgICAgICAg
R0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLSAgICAgICAgR0xp
bnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICBuZXdU
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6
ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgICAgICBmb3Ig
KGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsK
LSAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
LCBpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0
LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBt
VGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwot
fQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywg
Jm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1
cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YID09IDEpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VS
VChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggPT0gMyk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFf
QVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCA9PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdl
KGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwg
ZmFsc2UpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtE
aXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhT
dG9yYWdlOwotICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2Vp
bmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlm
ICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0g
ICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2Ug
fHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNT
RVJUKHdpZHRoID09IGhlaWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8
IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0g
dHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xh
bXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRo
KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwg
MCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBz
b3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9t
ID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9y
bVBpeGVsWU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmdl
dFdpZHRoKCkpOwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhT
dG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKLQotICAgICAgICAgICAg
aWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5j
b3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCBkZXN0WU9mZnNldCwgZGVz
dCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgR0xzaXpl
aSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRXaWR0aCgp
OwotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+
IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50
IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtm
YWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYm
ICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0
KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYg
KGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJj
ZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJl
Y3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0g
dHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWlu
ZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwot
Ci0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
ZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVsw
XVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
c2l6ZSkKLXsKLSAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOwotICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0
KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKGQzZGZtdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdl
dCk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHNpemUsIHNpemUsIHR5cGUsIHRydWUpOwotICAg
ICAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KDEsIHNpemUgPj4gMSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBmYWNl
ID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUs
IHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFn
ZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAg
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBt
VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YICsgZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xl
dmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKLXsK
LSAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghZ2V0Q29udGV4dCgpLT5z
dXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJl
c2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBs
b2cyKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50
IGYgPSAwOyBmIDwgNjsgZisrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWRlZmluZUltYWdlKGYs
IGksIG1JbWFnZUFycmF5W2ZdWzBdLmdldEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtm
XVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmXVswXS5nZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4
U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZiwgaS0xKTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBt
VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YICsgZiwgaSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dl
ciAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0Qmxp
dHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLQotICAgICAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtDbGVhbigpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQoRDNE
WExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpLCBO
VUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtmXVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxM
LCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVSUigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0u
bWFya0RpcnR5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRl
cmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQot
ewotICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVM
TCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsK
LQotICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1G
YWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZl
clRleHR1cmUodGhpcywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1GYWNlUHJveGll
c1tmYWNlXTsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5k
ZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRh
cmdldCh0YXJnZXQpKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAgIAotICAg
IHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCAwKTsKLX0KLQot
VGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJl
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLX0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisvLw0KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQ0KKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQorLy8NCisNCisv
LyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBk
ZXJpdmVkIGNsYXNzZXMNCisvLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1l
bnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQgcmVsYXRlZA0KKy8vIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0KKyNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIg0KKw0KKyNpbmNsdWRlIDxkM2R4OXRleC5oPg0KKw0KKyNpbmNsdWRl
IDxhbGdvcml0aG0+DQorI2luY2x1ZGUgPGludHJpbi5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCINCisNCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQu
aCINCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiDQorDQorbmFtZXNwYWNlIGds
DQorew0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFs
ID0gMTsNCisNCitzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSkNCit7DQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3Jt
YXQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7DQorICAgIH0NCisgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwNCisg
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7DQorICAgIH0NCisgICAgZWxzZSBp
ZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpDQorICAgIHsN
CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkNCisgICAgew0KKyAgICAg
ICAgcmV0dXJuIEQzREZNVF9EWFQ1Ow0KKyAgICB9DQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xf
RkxPQVQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMyRjsNCisg
ICAgfQ0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gRDNERk1UX0ExNkIxNkcxNlIxNkY7DQorICAgIH0NCisgICAgZWxzZSBp
ZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQ0KKyAgICB7DQorICAgICAgICBpZiAoZm9ybWF0
ID09IEdMX0xVTUlOQU5DRSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVy
ZXMoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4Ow0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBn
ZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsNCisgICAgICAgIH0NCisgICAgICAg
IGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9SR0IpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0
dXJuIEQzREZNVF9YOFI4RzhCODsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCit9
DQorDQorc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9y
bWF0KQ0KK3sNCisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikNCisgICAgew0KKyAgICAg
ICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgc3dpdGNoKGZvcm1hdCkNCisgICAgew0KKyAg
ICAgIGNhc2UgRDNERk1UX0w4Og0KKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMToNCisgICAgICBjYXNlIEQzREZNVF9EWFQzOg0KKyAgICAgIGNhc2UgRDNE
Rk1UX0RYVDU6DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6DQorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6DQorICAgICAgY2FzZSBEM0RGTVRf
QTE2QjE2RzE2UjE2RjoNCisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOg0KKyAgICAg
ICAgcmV0dXJuIHRydWU7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCitzdGF0aWMgaW5saW5lIERX
T1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUpDQorew0KKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7DQorDQorICAg
IGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopDQorICAgIHsNCisgICAgICAgIGQzZHVzYWdlIHw9
IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVy
YWJsZSB8fCAoSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkNCisgICAgew0KKyAgICAgICAgZDNk
dXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOw0KKyAgICB9DQorICAgIHJldHVybiBkM2R1
c2FnZTsNCit9DQorDQorSW1hZ2U6OkltYWdlKCkNCit7DQorICAgIG1XaWR0aCA9IDA7IA0KKyAg
ICBtSGVpZ2h0ID0gMDsNCisgICAgbUZvcm1hdCA9IEdMX05PTkU7DQorICAgIG1UeXBlID0gR0xf
VU5TSUdORURfQllURTsNCisNCisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBtRGlydHkg
PSBmYWxzZTsNCisNCisgICAgbUQzRFBvb2wgPSBEM0RQT09MX1NZU1RFTU1FTTsNCisgICAgbUQz
REZvcm1hdCA9IEQzREZNVF9VTktOT1dOOw0KK30NCisNCitJbWFnZTo6fkltYWdlKCkNCit7DQor
ICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsN
CisgICAgfQ0KK30NCisNCitib29sIEltYWdlOjpyZWRlZmluZShHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxlYXNl
KQ0KK3sNCisgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fA0KKyAgICAgICAgbUhlaWdodCAhPSBo
ZWlnaHQgfHwNCisgICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8DQorICAgICAgICBtVHlwZSAh
PSB0eXBlIHx8DQorICAgICAgICBmb3JjZVJlbGVhc2UpDQorICAgIHsNCisgICAgICAgIG1XaWR0
aCA9IHdpZHRoOw0KKyAgICAgICAgbUhlaWdodCA9IGhlaWdodDsNCisgICAgICAgIG1Gb3JtYXQg
PSBmb3JtYXQ7DQorICAgICAgICBtVHlwZSA9IHR5cGU7DQorICAgICAgICAvLyBjb21wdXRlIHRo
ZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkDQorICAgICAgICBtRDNERm9ybWF0ID0gQ29u
dmVydFRleHR1cmVGb3JtYXRUeXBlKG1Gb3JtYXQsIG1UeXBlKTsNCisNCisgICAgICAgIGlmICht
U3VyZmFjZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0K
KyAgICAgICAgICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJl
dHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBJ
bWFnZTo6Y3JlYXRlU3VyZmFjZSgpDQorew0KKyAgICBpZihtU3VyZmFjZSkNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0
dXJlID0gTlVMTDsNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOw0K
KyAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBj
b25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7DQorICAgIEFTU0VSVChk
M2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9y
IGRlcHRoIHRleHR1cmVzDQorDQorICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDAp
DQorICAgIHsNCisgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOw0KKyAgICAgICAgR0xzaXpl
aSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQg
PSBtSGVpZ2h0Ow0KKyAgICAgICAgaWYgKElzQ29tcHJlc3NlZChtRm9ybWF0KSAmJiAobVdpZHRo
ICUgNCAhPSAwIHx8IG1IZWlnaHQgJSA0ICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGJvb2wgaXNNdWx0NCA9IGZhbHNlOw0KKyAgICAgICAgICAgIGludCB1cHNhbXBsZUNvdW50ID0g
MDsNCisgICAgICAgICAgICB3aGlsZSAoIWlzTXVsdDQpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9IDE7DQorICAgICAgICAgICAgICAgIHJlcXVlc3RI
ZWlnaHQgPDw9IDE7DQorICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsNCisgICAgICAg
ICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQgPT0gMCAmJiByZXF1ZXN0SGVpZ2h0ICUgNCA9
PSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0g
dHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBs
ZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJl
cXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAm
bmV3VGV4dHVyZSwgTlVMTCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBzdXJmYWNlIGZhaWxlZC4iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9DQorDQorICAgICAgICBuZXdUZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7DQorICAgICAgICBuZXdU
ZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNl
Ow0KKyAgICBtRGlydHkgPSBmYWxzZTsNCisgICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7DQorfQ0K
Kw0KK0hSRVNVTFQgSW1hZ2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0
IFJFQ1QgKnJlY3QpDQorew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIEhSRVNVTFQg
cmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOw0KKw0KKyAgICBpZiAobVN1cmZhY2UpDQorICAg
IHsNCisgICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCByZWN0
LCAwKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorDQorICAgICAgICBt
RGlydHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3Zv
aWQgSW1hZ2U6OnVubG9jaygpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsNCisgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCit9DQorDQorYm9vbCBJbWFnZTo6aXNS
ZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QNCit7ICAgIA0KKyAgICByZXR1cm4gSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7DQorfQ0KKw0KK0QzREZPUk1BVCBJbWFnZTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QNCit7DQorICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVu
IGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QNCisgICAgLy8gd2hpY2gg
d291bGQgYmUgYSBidWcgYnkgdGhlIGNhbGxlcg0KKyAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBE
M0RGTVRfVU5LTk9XTik7DQorDQorICAgIHJldHVybiBtRDNERm9ybWF0Ow0KK30NCisNCitJRGly
ZWN0M0RTdXJmYWNlOSAqSW1hZ2U6OmdldFN1cmZhY2UoKQ0KK3sNCisgICAgY3JlYXRlU3VyZmFj
ZSgpOw0KKw0KKyAgICByZXR1cm4gbVN1cmZhY2U7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnNldE1h
bmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQ0KK3sNCisgICAgaWYgKG1T
dXJmYWNlKQ0KKyAgICB7DQorICAgICAgICBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJm
YWNlLCBOVUxMLCBOVUxMLCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAw
KTsNCisgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2M7DQorICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOw0KKyAgICBBU1NF
UlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7DQorDQorICAgIG1TdXJmYWNlID0gc3Vy
ZmFjZTsNCisgICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OnVw
ZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOw0KKw0KKyAg
ICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQ0KKyAg
ICB7DQorICAgICAgICBSRUNUIHJlY3Q7DQorICAgICAgICByZWN0LmxlZnQgPSB4b2Zmc2V0Ow0K
KyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0Ow0KKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZz
ZXQgKyB3aWR0aDsNCisgICAgICAgIHJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsNCisN
CisgICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShk
ZXN0U3VyZmFjZSwgTlVMTCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RY
X0ZJTFRFUl9CT1gsIDApOw0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8g
VXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBkZXN0IG11c3QgYmUgREVG
QVVMVCBwb29scyANCisgICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3Qu
dG9wfTsNCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVT
dXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsNCisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
fQ0KKw0KKy8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0
LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBh
dCBpbnB1dA0KKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuDQordm9pZCBJbWFn
ZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLA0KKyAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpDQorew0KKyAgICBSRUNUIGxvY2tS
ZWN0ID0NCisgICAgew0KKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwNCisgICAgICAgIHhvZmZz
ZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodA0KKyAgICB9Ow0KKw0KKyAgICBEM0RMT0NLRURf
UkVDVCBsb2NrZWQ7DQorICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1Jl
Y3QpOw0KKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsN
CisgICAgfQ0KKw0KKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgs
IG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7DQorDQorICAgIHN3aXRjaCAodHlwZSkN
CisgICAgew0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgIHN3aXRjaCAo
bUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAg
ICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBl
bHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZv
cm1hdCgpID09IEQzREZNVF9MOCk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7DQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0K
KyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsb2FkUkdC
QVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoNCisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV82XzU6DQorICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAg
ICAgICAgIGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6DQorICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAg
ICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzE6DQorICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAg
ICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0ZMT0FUOg0KKyAgICAg
ICAgc3dpdGNoIChtRm9ybWF0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAvLyBmbG9hdCB0ZXh0
dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0
aGF0IHdheSBpbiBEM0QNCisgICAgICAgICAgY2FzZSBHTF9BTFBIQToNCisgICAgICAgICAgICBs
b2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAgICAgICAgICAg
bG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBj
YXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAg
ICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6DQor
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAgICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0
IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3Rv
cmVkIHRoYXQgd2F5IGluIEQzRA0KKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAg
ICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6DQorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZs
b2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JH
QjoNCisgICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgbG9hZFJHQkFI
YWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICB9DQorDQorICAgIHVubG9jaygpOw0KK30NCisN
Cit2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOw0KKyAgICANCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsN
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVt4XTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIElt
YWdlOjpsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50ICpk
ZXN0ID0gTlVMTDsNCisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7
DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsNCisNCisgICAgICAgIGludCB4Ow0KKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVz
IGFsaWduZWQNCisgICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykNCisgICAgICAgIHsN
CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2Vb
eF0pIDw8IDI0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7
IHggKz0gOCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBf
bW1fbG9hZGxfZXBpNjQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4
XSkpOw0KKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtl
IHRoZSBsb3dlciBieXRlIHRvIHplcm8NCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3Vu
cGFja2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOw0KKyAgICAgICAgICAgIC8vIEludGVy
bGVhdmUgZWFjaCAxNmJpdCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybw0K
KyAgICAgICAgICAgIF9fbTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNv
dXJjZURhdGEpOw0KKyAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYo
emVyb1dpZGUsIHNvdXJjZURhdGEpOw0KKw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChy
ZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIGxvKTsNCisgICAgICAgICAgICBf
bW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwg
aGkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXINCisg
ICAgICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0Ow0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBO
VUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zmxv
YXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7DQorICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5V
TEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQorICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2Vb
eF07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0DQorew0KKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKw0KKyAgICAgICAgaWYgKCFu
YXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gMHhGRjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgLy8g
TDggZGVzdGluYXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1h
Z2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0g
TlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0K
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
W3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsNCisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07
DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUg
PSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQ0KKyAgICAgICAgfQ0K
KyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxM
Ow0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAg
ICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICANCisgICAgICAgIGlmICgh
bmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdA0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBz
b3VyY2UsIHdpZHRoICogMik7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdA0KK3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0
ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykN
CisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFd
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBd
Ow0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sN
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10g
PSAweEZGOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0I1
NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQorICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdi
YSAmIDB4MDAxRikgPj4gMik7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4Rjgw
MCkgPj4gMTMpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisg
ICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOw0KKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IDEuMGY7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBzaG9ydCAq
ZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQor
ICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07DQorICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07DQorICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1
LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBO
VUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAgICBfX20xMjhpIGJyTWFz
ayA9IF9tbV9zZXQxX2VwaTMyKDB4MDBmZjAwZmYpOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBpbnQgeCA9IDA7DQorDQorICAgICAgICAvLyBN
YWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZA0KKyAgICAgICAgZm9yICh4ID0gMDsgKChyZWludGVy
cHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRoOyB4
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2Vb
eF07DQorICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZm
KSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKDsg
eCArIDMgPCB3aWR0aDsgeCArPSA0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9fbTEyOGkg
c291cmNlRGF0YSA9IF9tbV9sb2FkdV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEy
OGkqPigmc291cmNlW3hdKSk7DQorICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBhbmQgYSwgd2hp
Y2ggZG9uJ3QgY2hhbmdlDQorICAgICAgICAgICAgX19tMTI4aSBnYUNvbXBvbmVudHMgPSBfbW1f
YW5kbm90X3NpMTI4KGJyTWFzaywgc291cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gTWFzayBv
dXQgYiBhbmQgcg0KKyAgICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21tX2FuZF9z
aTEyOChzb3VyY2VEYXRhLCBick1hc2spOw0KKyAgICAgICAgICAgIC8vIFN3YXAgYiBhbmQgcg0K
KyAgICAgICAgICAgIF9fbTEyOGkgYnJTd2FwcGVkID0gX21tX3NodWZmbGVoaV9lcGkxNihfbW1f
c2h1ZmZsZWxvX2VwaTE2KGJyQ29tcG9uZW50cywgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpLCBf
TU1fU0hVRkZMRSgyLCAzLCAwLCAxKSk7DQorICAgICAgICAgICAgX19tMTI4aSByZXN1bHQgPSBf
bW1fb3Jfc2kxMjgoZ2FDb21wb25lbnRzLCBiclN3YXBwZWQpOw0KKyAgICAgICAgICAgIF9tbV9z
dG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIHJlc3VsdCk7
DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBQZXJmb3JtIGxlZnRvdmVyIHdyaXRlcw0KKyAg
ICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbeF0gPSAoX3Jv
dGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9
IE5VTEw7DQorICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7DQorICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9
IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4
MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30N
CisNCit2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QN
Cit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAo
KHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsNCisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7DQorICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikg
Pj4gMCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkE1
NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07DQor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgo
cmdiYSAmIDB4MDAzRSkgPj4gMyk7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgw
MDAxKSA/IDB4RkYgOiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6
OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGggKiAxNik7DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsNCisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsNCisgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2Us
IHdpZHRoICogOCk7DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsNCisgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOw0KKyAg
ICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsNCisgICAgQVNTRVJU
KHhvZmZzZXQgJSA0ID09IDApOw0KKyAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7DQorDQor
ICAgIFJFQ1QgbG9ja1JlY3QgPSB7DQorICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAg
ICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0DQorICAgIH07DQorDQorICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsNCisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQs
ICZsb2NrUmVjdCk7DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXBy
ZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1Gb3JtYXQpOw0KKyAgICBHTHNpemVpIGlucHV0UGl0
Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsNCisgICAgaW50IHJv
d3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJv
d3M7ICsraSkNCisgICAgew0KKyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5w
Qml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1
dFBpdGNoKSwgaW5wdXRQaXRjaCk7DQorICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0K
Ky8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJh
YmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcw0KK3Zv
aWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQpDQorew0KKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldERhdGEgPSBOVUxMOw0K
KyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247DQorICAgIHJlbmRlclRhcmdldC0+R2V0
RGVzYygmZGVzY3JpcHRpb24pOw0KKyAgICANCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRp
b24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVy
VGFyZ2V0RGF0YSwgTlVMTCk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0K
KyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZh
Y2UuIik7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0N
CisNCisgICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdl
dCwgcmVuZGVyVGFyZ2V0RGF0YSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAg
ew0KKyAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQu
Iik7DQorICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgIH0NCisNCisgICAgUkVDVCBzb3VyY2VS
ZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07DQorICAgIFJFQ1QgZGVzdFJlY3Qg
PSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsN
CisNCisgICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgICByZXN1
bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNlKCksIE5VTEwsICZkZXN0
UmVjdCwgcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3QsIEQzRFhfRklMVEVSX0JP
WCwgMCk7DQorICAgICAgICANCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxl
ZC4iKTsNCisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9jayA9
IHswfTsNCisgICAgICAgIHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3Vy
Y2VMb2NrLCAmc291cmNlUmVjdCwgMCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
DQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNl
IHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgRDNETE9DS0VEX1JFQ1Qg
ZGVzdExvY2sgPSB7MH07DQorICAgICAgICByZXN1bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RS
ZWN0KTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZh
Y2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsNCisgICAgICAgICAgICByZW5kZXJU
YXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7DQorICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsN
CisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2Nr
LnBCaXRzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOw0KKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7DQorDQorICAgICAg
ICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6DQorICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9BOFI4RzhCODoNCisgICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAg
ICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBz
b3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExv
Y2suUGl0Y2g7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAg
ICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
ICs9IGRlc3RMb2NrLlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6DQorICAgICAg
ICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291
cmNlTG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2Nr
LlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToNCisgICAgICAgICAgICAgICAg
c3dpdGNoKGdldEQzREZvcm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4XSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICAgICAgICAgICAg
ICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJl
ZCA+PiA0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0g
KHNpZ25lZCBjaGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7
DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAg
ICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdW5sb2NrKCk7DQorICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+UmVsZWFzZSgpOw0KKw0KKyAgICBtRGlydHkgPSB0cnVlOw0KK30NCisNCitUZXh0
dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpDQorICAgIDogbUQzRFVzYWdl
KHVzYWdlKSwNCisgICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKHVz
YWdlKSksDQorICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpDQorew0K
K30NCisNCitUZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkNCit7DQorfQ0KKw0KK2Jv
b2wgVGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QNCit7DQorICAgIHJldHVy
biAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCkpICE9IDA7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNv
bnN0DQorew0KKyAgICByZXR1cm4gKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCk7DQorfQ0K
Kw0KK0QzRFBPT0wgVGV4dHVyZVN0b3JhZ2U6OmdldFBvb2woKSBjb25zdA0KK3sNCisgICAgcmV0
dXJuIG1EM0RQb29sOw0KK30NCisNCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIG1EM0RVc2FnZTsNCit9DQorDQordW5zaWduZWQgaW50IFRl
eHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
VGV4dHVyZVNlcmlhbDsNCit9DQorDQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjppc3N1
ZVRleHR1cmVTZXJpYWwoKQ0KK3sNCisgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsr
Ow0KK30NCisNCitUZXh0dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChp
ZCkNCit7DQorICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7DQorICAg
IG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7DQorICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsNCisgICAg
bVdyYXBUID0gR0xfUkVQRUFUOw0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAg
bVVzYWdlID0gR0xfTk9ORTsNCisgICAgDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorDQor
ICAgIG1JbW11dGFibGUgPSBmYWxzZTsNCit9DQorDQorVGV4dHVyZTo6flRleHR1cmUoKQ0KK3sN
Cit9DQorDQorLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0
ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xl
bnVtIGZpbHRlcikNCit7DQorICAgIHN3aXRjaCAoZmlsdGVyKQ0KKyAgICB7DQorICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVT
VDoNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoNCisgICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTElORUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWlu
RmlsdGVyICE9IGZpbHRlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NaW5G
aWx0ZXIgPSBmaWx0ZXI7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVl
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0N
CisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0K
Ky8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlk
IGVudW0gcGFyYW1ldGVyKQ0KK2Jvb2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0
ZXIpDQorew0KKyAgICBzd2l0Y2ggKGZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVB
UkVTVDoNCisgICAgICBjYXNlIEdMX0xJTkVBUjoNCisgICAgICAgIHsNCisgICAgICAgICAgICBp
ZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICBtTWFnRmlsdGVyID0gZmlsdGVyOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJz
ID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAg
ICAgICB9DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0K
K30NCisNCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3Jh
cCkNCit7DQorICAgIHN3aXRjaCAod3JhcCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfUkVQRUFU
Og0KKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToNCisgICAgICBjYXNlIEdMX01JUlJPUkVE
X1JFUEVBVDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOw0KKyAgICAgICAg
ICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAgZGVmYXVsdDoNCisgICAgICAg
IHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
c2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0
dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkNCit7DQorICAgIHN3aXRjaCAod3JhcCkNCisgICAg
ew0KKyAgICAgIGNhc2UgR0xfUkVQRUFUOg0KKyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToN
CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBpZiAobVdyYXBUICE9IHdyYXApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBt
V3JhcFQgPSB3cmFwOw0KKyAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsN
CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQor
ICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KK30NCisNCisv
LyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQ0KK2Jvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQ0KK3sN
CisgICAgc3dpdGNoICh1c2FnZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTk9ORToNCisgICAg
ICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6DQorICAgICAgICBtVXNhZ2Ug
PSB1c2FnZTsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldE1pbkZp
bHRlcigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1pbkZpbHRlcjsNCit9DQorDQorR0xlbnVt
IFRleHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1hZ0ZpbHRl
cjsNCit9DQorDQorR0xlbnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtV3JhcFM7DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbVdyYXBUOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2Uo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Vc2FnZTsNCit9DQorDQordm9pZCBUZXh0dXJlOjpz
ZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2Ug
KmltYWdlKQ0KK3sNCisgICAgaWYgKHBpeGVscyAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBp
bWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0KKyAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFn
ZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAg
IGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdl
LT5nZXRIZWlnaHQoKSwgcGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQor
ICAgIH0NCit9DQorDQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAg
ICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
Ow0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmU6OnN1
YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQ0KK3sNCisgICAgaWYgKHBpeGVscyAhPSBO
VUxMKQ0KKyAgICB7DQorICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOw0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCitJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQ0KK3sNCisgICAgaWYgKCFpc1NhbXBs
ZXJDb21wbGV0ZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0K
KyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkDQorICAgIGlm
IChnZXRTdG9yYWdlKGZhbHNlKSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVM
TDsNCisgICAgfQ0KKw0KKyAgICB1cGRhdGVUZXh0dXJlKCk7DQorDQorICAgIHJldHVybiBnZXRC
YXNlVGV4dHVyZSgpOw0KK30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVycygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbURpcnR5UGFyYW1ldGVyczsNCit9DQorDQorYm9vbCBU
ZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbURpcnR5SW1h
Z2VzOw0KK30NCisNCit2b2lkIFRleHR1cmU6OnJlc2V0RGlydHkoKQ0KK3sNCisgICAgbURpcnR5
UGFyYW1ldGVycyA9IGZhbHNlOw0KKyAgICBtRGlydHlJbWFnZXMgPSBmYWxzZTsNCit9DQorDQor
dW5zaWduZWQgaW50IFRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQ0KK3sNCisgICAgVGV4dHVy
ZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsNCisgICAgcmV0dXJuIHRleHR1
cmUgPyB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgOiAwOw0KK30NCisNCit1bnNpZ25lZCBp
bnQgVGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpDQorew0KKyAg
ICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7DQorICAgIHJldHVy
biB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOw0K
K30NCisNCitib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtSW1tdXRhYmxlOw0KK30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QNCit7DQorICAgIGlmICgoaXNQb3cyKHdp
ZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBudW1i
ZXIgb2YgbGV2ZWxzDQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvLyBPcGVu
R0wgRVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBP
VCBtaXBtYXBzLg0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCit9DQorDQorR0xpbnQgVGV4
dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IGNyZWF0aW9uTGV2ZWxzKHNpemUsIHNpemUpOw0KK30NCisNCitpbnQgVGV4dHVyZTo6bGV2ZWxD
b3VudCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VU
ZXh0dXJlKCktPkdldExldmVsQ291bnQoKSA6IDA7DQorfQ0KKw0KK0JsaXQgKlRleHR1cmU6Omdl
dEJsaXR0ZXIoKQ0KK3sNCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsNCisg
ICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0ZXIoKTsNCit9DQorDQorYm9vbCBUZXh0dXJlOjpj
b3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpDQorew0KKyAgICBpZiAoc291cmNlICYmIGRl
c3QpDQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0Ow0KKw0KKyAgICAgICAgaWYgKGZy
b21NYW5hZ2VkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3Vy
ZmFjZUZyb21TdXJmYWNlKGRlc3QsIE5VTEwsIE5VTEwsIHNvdXJjZSwgTlVMTCwgTlVMTCwgRDNE
WF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsN
CisgICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7DQorICAg
ICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7
DQorDQorICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsNCisgICAgICAgICAgICByZXN1
bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVY
Rl9OT05FKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0K
K1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1
cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCksIG1S
ZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkNCit7
DQorICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdl
MkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQg
dXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkNCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2Fn
ZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwo
KSkNCit7DQorICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhl
aWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBs
ZXRlIHRleHR1cmUNCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUg
ZDNkIHRleHR1cmUgY3JlYXRpb24NCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQ0K
KyAgICB7DQorICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsN
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBo
ZWlnaHQsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7DQorDQorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1
cmVTdG9yYWdlMkQoKQ0KK3sNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxl
dmVsKGludCBsZXZlbCkNCit7DQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVM
TDsNCisNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJmYWNlKTsNCisgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHN1cmZh
Y2U7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlOw0KK30NCisNCit1
bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsNCit9
DQorDQorVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpDQorew0K
KyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgbUNv
bG9yYnVmZmVyUHJveHkgPSBOVUxMOw0KKyAgICBtUHJveHlSZWZzID0gMDsNCit9DQorDQorVGV4
dHVyZTJEOjp+VGV4dHVyZTJEKCkNCit7DQorICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsN
CisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQor
ICAgIA0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIG1TdXJmYWNlLT5zZXRC
b3VuZFRleHR1cmUoTlVMTCk7DQorICAgICAgICBtU3VyZmFjZSA9IE5VTEw7DQorICAgIH0NCit9
DQorDQorLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVu
ZGVyYnVmZmVycyBhY3RpbmcgYXMgDQorLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0
aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgDQorLy8gdG8gYSByZW5kZXJi
dWZmZXIgcHJveHkgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4NCit2b2lkIFRleHR1cmUyRDo6YWRk
UHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkNCit7DQorICAgIG1Qcm94eVJlZnMr
KzsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQ0KK3sNCisgICAgaWYgKG1Qcm94eVJlZnMgPiAwKQ0KKyAgICAgICAgbVByb3h5
UmVmcy0tOw0KKw0KKyAgICBpZiAobVByb3h5UmVmcyA9PSAwKQ0KKyAgICAgICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBOVUxMOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBj
b25zdA0KK3sNCisgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7DQorfQ0KKw0KK0dMc2l6ZWkgVGV4
dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7
DQorfQ0KKw0KK0dMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0
DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
DQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOw0KKyAgICBl
bHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50
ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbbGV2ZWxdLmdldEZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gR0xfTk9O
RTsNCit9DQorDQorRDNERk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KEdMaW50IGxldmVs
KSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQo
KTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2
b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgcmVs
ZWFzZVRleEltYWdlKCk7DQorDQorICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbbGV2
ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAg
ICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgbVRleFN0b3Jh
Z2UgPSBOVUxMOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRJbWFn
ZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sN
CisgICAgcmVsZWFzZVRleEltYWdlKCk7DQorDQorICAgIEdMZW51bSBmb3JtYXQ7DQorDQorICAg
IHN3aXRjaChzdXJmYWNlLT5nZXRGb3JtYXQoKSkNCisgICAgew0KKyAgICAgIGNhc2UgRDNERk1U
X0E4UjhHOEI4Og0KKyAgICAgICAgZm9ybWF0ID0gR0xfUkdCQTsNCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Og0KKyAgICAgICAgZm9ybWF0ID0gR0xfUkdCOw0K
KyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBtSW1hZ2VBcnJheVswXS5yZWRl
ZmluZShmb3JtYXQsIHN1cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBH
TF9VTlNJR05FRF9CWVRFLCB0cnVlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAg
ICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVl
blRleHR1cmUoKSk7DQorDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIG1TdXJmYWNl
ID0gc3VyZmFjZTsNCisgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZSh0aGlzKTsNCit9DQor
DQordm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJbWFnZSgpDQorew0KKyAgICBpZiAobVN1cmZh
Y2UpDQorICAgIHsNCisgICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7DQor
ICAgICAgICBtU3VyZmFjZSA9IE5VTEw7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICAgICAgICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xfUkdCQSwgMCwgMCwg
R0xfVU5TSUdORURfQllURSwgdHJ1ZSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9p
ZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOw0KK30N
CisNCit2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpDQorew0KKyAg
ICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisg
ICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdExldmVsID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7
DQorDQorICAgICAgICBpZiAoZGVzdExldmVsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElt
YWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07DQorICAgICAgICAgICAgaW1hZ2UtPnVw
ZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsN
CisNCisgICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBpbWFn
ZS0+bWFya0NsZWFuKCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJl
MkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgaWYg
KFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQ0K
KyAgICB7DQorICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21w
cmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXBy
ZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUs
IHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJl
Y3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1
ZmZlciAqc291cmNlKQ0KK3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dC4iKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0K
Kw0KKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VO
U0lHTkVEX0JZVEUpOw0KKyAgIA0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRl
cmFibGVGb3JtYXQoKSkNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHko
MCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAo
IW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisg
ICAgICAgIA0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAg
ICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50
KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Ow0KKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7DQorICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9
IHggKyB3aWR0aDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7DQorICAgICAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0Ow0KKyAgICAgICAgICAgIA0KKyAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VS
ZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOw0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkNCit7DQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVts
ZXZlbF0uZ2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LmdldEhlaWdodCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dC4iKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0K
Kw0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAo
IW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkNCisgICAgew0KKyAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgcmVuZGVyVGFyZ2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAg
IH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBk
YXRlVGV4dHVyZSgpOw0KKw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmxlZnQgPSB4Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lk
dGg7DQorICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsNCisNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOw0KKw0K
KyAgICAgICAgICAgIGlmIChkZXN0KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
Z2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlb
MF0uZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOw0KKyAgICAgICAgICAgICAg
ICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQor
DQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFj
dEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7DQorICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RU
eXBlKGludGVybmFsZm9ybWF0KTsNCisgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0
dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOw0KKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRl
eHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxldGUgbVRleFN0
b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBk
M2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7
DQorDQorICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQor
ICAgIHsNCisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHR5cGUsIHRydWUpOw0KKyAgICAgICAgd2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0
aCA+PiAxKTsNCisgICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsNCisg
ICAgfQ0KKw0KKyAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5yZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0
cnVlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAg
ICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRT
dXJmYWNlTGV2ZWwobGV2ZWwpOw0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRN
YW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvLyBU
ZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuDQorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3QNCit7DQorICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5n
ZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdo
dCgpOw0KKw0KKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGJvb2wgbWlwbWFwcGluZyA9IGZh
bHNlOw0KKw0KKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdM
X05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0g
ZmFsc2U7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05F
QVJFU1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQ
X0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKGdldElu
dGVybmFsRm9ybWF0KDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxv
YXQzMkxpbmVhckZpbHRlcigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09
IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVh
ckZpbHRlcigpKSkNCisgICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVT
VCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGJvb2wgbnBvdFN1cHBvcnQgPSBnZXRDb250
ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpOw0KKw0KKyAgICBpZiAoIW5wb3RTdXBw
b3J0KQ0KKyAgICB7DQorICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURH
RSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwNCisgICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBHTF9D
TEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChtaXBtYXBw
aW5nKQ0KKyAgICB7DQorICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmICghaXNQb3cyKHdpZHRoKSB8fCAhaXNQb3cyKGhlaWdodCkpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCFpc01pcG1hcENvbXBsZXRlKCkpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQor
ICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFw
KSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgx
Lg0KK2Jvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlm
IChpc0ltbXV0YWJsZSgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0K
Kw0KKyAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsNCisgICAg
R0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsNCisNCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgfQ0KKw0KKyAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkp
Ow0KKw0KKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspDQorICAg
IHsNCisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdl
QXJyYXlbMF0uZ2V0Rm9ybWF0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRU
eXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChtSW1hZ2VBcnJh
eVtsZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWln
aHQgPj4gbGV2ZWwpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBUZXh0
dXJlMkQ6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIHJldHVybiBJ
c0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorYm9vbCBUZXh0
dXJlMkQ6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICByZXR1cm4gSXNEZXB0
aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsN
Cit9DQorDQorLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9t
IHRoZSB0ZXh0dXJlIGltYWdlcw0KK3ZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkNCit7
DQorICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBH
THNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKyAgICBHTGludCBs
ZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsNCisgICAgRDNERk9STUFUIGQz
ZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOw0KKyAgICBEV09SRCBkM2R1c2Fn
ZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQo
bGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgDQorICAgIGlm
IChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
bGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorICAg
ICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkNCit7DQorICAgIGludCBsZXZlbHMgPSBs
ZXZlbENvdW50KCk7DQorDQorICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7
IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVts
ZXZlbF07DQorDQorICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0
V2lkdGgoKSwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkNCit7
DQorICAgIFRleHR1cmVTdG9yYWdlMkQgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOw0KKw0KKyAgICBp
ZiAobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSAhPSAwICYmIG1JbWFnZUFycmF5WzBdLmdldEhl
aWdodCgpICE9IDApDQorICAgIHsNCisgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJh
eVswXS5nZXRXaWR0aCgpOw0KKyAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVsw
XS5nZXRIZWlnaHQoKTsNCisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQpOw0KKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBd
LmdldEQzREZvcm1hdCgpOw0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisg
ICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZt
dCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgaWYgKG1UZXhTdG9yYWdl
ICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9
IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorICAgICAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOw0K
Kw0KKyAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2Us
IG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpDQorICAgICAgICAgICAgICAgIHsgICANCisgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7DQorICAgICAgICAgICAgICAgICAg
IGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICBpZiAo
ZGVzdCkgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChk
ZXN0KSBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhT
dG9yYWdlOw0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1
cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkNCit7DQorICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisgICAgew0KKyAgICAgICAgaWYgKCFpc1BvdzIobUlt
YWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWln
aHQoKSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBs
ZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0
ZWQgbWlwbWFwIGxldmVscy4NCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSk7DQor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykNCisgICAgew0KKyAgICAg
ICAgcmVkZWZpbmVJbWFnZShpLCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgDQorICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4g
aSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBd
LmdldEhlaWdodCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVswXS5nZXRUeXBlKCkpOw0KKyAgICB9DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAt
IDEpOw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdl
LT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorDQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwg
JiYgbG93ZXIgIT0gTlVMTCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJs
aXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7DQorICAgICAgICAgICAgfQ0KKw0KKyAg
ICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ldLm1hcmtDbGVhbigpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVs
c2UNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsr
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNl
KCkgPT0gTlVMTCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYg
KEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtpXS5nZXRTdXJm
YWNlKCksIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEws
IE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsN
CisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5
KCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6
OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNv
bG9yYnVmZmVyUHJveHkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbUNvbG9yYnVmZmVyUHJv
eHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhp
cywgdGFyZ2V0KSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5Ow0K
K30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRl
eHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlp
bmcgdGV4dHVyZSBpcyBjcmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwp
DQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRl
eHR1cmUoKTsNCisgICAgDQorICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1
cmUNCisgICAgaWYgKGlzRGVwdGgoMCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0K
KyAgICB9DQorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOw0KK30N
CisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQodGFy
Z2V0ID09IEdMX1RFWFRVUkVfMkQpOw0KKw0KKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcg
dGV4dHVyZSBpcyBjcmVhdGVkDQorICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0ZVRleHR1
cmUoKTsNCisNCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJl
DQorICAgIGlmICghaXNEZXB0aCgwKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQor
ICAgIH0NCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0K
Kw0KK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpDQorew0KKyAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkNCisgICAgew0KKyAgICAgICAgaWYgKHJlbmRlclRh
cmdldCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsN
CisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBjcmVh
dGVUZXh0dXJlKCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1UZXhTdG9y
YWdlOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1h
cChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpDQor
ICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQ0KK3sNCisgICAgbVRleHR1cmUg
PSBOVUxMOw0KKyAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQg
YmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUNCisgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24NCisgICAgaWYgKHNp
emUgPiAwKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4
dHVyZShzaXplLCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1
cmUsIE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlQ3ViZU1h
cDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpDQorew0KKyAgICBpZiAobVRleHR1cmUpDQorICAg
IHsNCisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAgIH0NCit9DQorDQorLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1
YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpDQor
ew0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7DQorDQorICAgIGlmICht
VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0
Q3ViZU1hcFN1cmZhY2UoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWws
ICZzdXJmYWNlKTsNCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIHN1cmZhY2U7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAq
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdA0KK3sNCisgICAg
cmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5k
ZXgodGFyZ2V0KTsNCit9DQorDQorVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWlu
dCBpZCkgOiBUZXh0dXJlKGlkKQ0KK3sNCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykNCisgICAgew0KKyAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsNCisgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0gMDsNCisgICAgfQ0KK30N
CisNCitUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkNCit7DQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBO
VUxMOw0KKyAgICB9DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3Jh
Z2UgPSBOVUxMOw0KK30NCisNCisvLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVm
ZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyANCisvLyBwcm94aWVzIGZvciB0aGlz
IHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgDQorLy8g
cHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9w
cyB0byB6ZXJvLA0KKy8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0IGEg
bmV3IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcNCisvLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uDQor
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAgICAg
ICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgICAgIG1GYWNlUHJveHlS
ZWZzW2ldKys7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVBy
b3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpDQorew0KKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94
eSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQ0K
KyAgICAgICAgICAgICAgICBtRmFjZVByb3h5UmVmc1tpXS0tOw0KKw0KKyAgICAgICAgICAgIGlm
IChtRmFjZVByb3h5UmVmc1tpXSA9PSAwKQ0KKyAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNb
aV0gPSBOVUxMOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVf
TUFQOw0KK30NCisNCitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNl
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7DQorICAgIGVsc2UNCisgICAgICAgIHJl
dHVybiAwOw0KK30NCisNCitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlb
ZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRIZWlnaHQoKTsNCisgICAgZWxzZQ0KKyAgICAg
ICAgcmV0dXJuIDA7DQorfQ0KKw0KK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxG
b3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRGb3JtYXQoKTsNCisgICAg
ZWxzZQ0KKyAgICAgICAgcmV0dXJuIEdMX05PTkU7DQorfQ0KKw0KK0QzREZPUk1BVCBUZXh0dXJl
Q3ViZU1hcDo6Z2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdA0K
K3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0K
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
RDNERm9ybWF0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsN
Cit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0
SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1go
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
DQorew0KKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoMywgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOw0K
K30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJ
bWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykN
Cit7DQorICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwg
bGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQorDQorICAg
IFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgQVNTRVJU
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7DQorDQorICAg
IGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7DQorICAgICAgICBBU1NFUlQo
ZGVzdExldmVsICE9IE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNl
XVtsZXZlbF07DQorICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisNCisgICAgICAgICAgICBkZXN0TGV2
ZWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4
dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJn
ZXQpXVtsZXZlbF0pKQ0KKyAgICB7DQorICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJn
ZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9
DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNz
ZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBp
eGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQ0KKyAgICB7DQor
ICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQorLy8gVGVzdHMgZm9yIGN1YmUg
bWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44
LjIgcGFnZSA4Ni4NCitib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNv
bnN0DQorew0KKyAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7DQor
DQorICAgIGJvb2wgbWlwbWFwcGluZzsNCisNCisgICAgc3dpdGNoIChtTWluRmlsdGVyKQ0KKyAg
ICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSOg0KKyAg
ICAgICAgbWlwbWFwcGluZyA9IGZhbHNlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9O
RUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsN
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAgICBVTlJFQUNIQUJMRSgp
Ow0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwNCisgICAg
ICAgIChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
ID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxp
bmVhckZpbHRlcigpKSkNCisgICAgew0KKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVB
UkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICghaXNQb3cyKHNpemUpICYmICFn
ZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAg
ICBpZiAoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdyYXBUKCkgIT0gR0xf
Q0xBTVBfVE9fRURHRSB8fCBtaXBtYXBwaW5nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIW1pcG1hcHBpbmcp
DQorICAgIHsNCisgICAgICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBpZiAoIWlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkpICAgLy8gQWxzbyB0
ZXN0cyBmb3IgaXNDdWJlQ29tcGxldGUoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQor
DQorLy8gVGVzdHMgZm9yIGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLg0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3Vi
ZUNvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlbMF1bMF0uZ2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlb
MF1bMF0uZ2V0V2lkdGgoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9
DQorDQorICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQ0K
KyAgICB7DQorICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBt
SW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fA0K
KyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFy
cmF5WzBdWzBdLmdldEZvcm1hdCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
cmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNv
bXBsZXRlKCkgY29uc3QNCit7DQorICAgIGlmIChpc0ltbXV0YWJsZSgpKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkp
DQorICAgIHsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBHTHNpemVp
IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOw0KKw0KKyAgICBpbnQgcSA9IGxv
ZzIoc2l6ZSk7DQorDQorICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0K
KyAgICB7DQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKysp
DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5n
ZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSkNCisgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQor
ICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRUeXBlKCkgIT0gbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBs
ZXZlbCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0K
K30NCisNCitib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsNCit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5
ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJu
IG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30N
CisNCisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhl
IHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQ0KK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsNCisgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZl
bHMoc2l6ZSwgMCk7DQorICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5n
ZXREM0RGb3JtYXQoKTsNCisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNk
Zm10LCBtVXNhZ2UsIGZhbHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBt
VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQz
ZHVzYWdlLCBzaXplKTsNCisNCisgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkNCisg
ICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAgICAgIGZv
ciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1U
ZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlLCBsZXZlbCk7DQorICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xl
dmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSgpDQorew0KKyAgICBmb3IgKGludCBmYWNlID0g
MDsgZmFjZSA8IDY7IGZhY2UrKykNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVs
Q291bnQoKTsNCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFy
cmF5W2ZhY2VdW2xldmVsXTsNCisNCisgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWws
IDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOw0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpu
ZXdUZXhTdG9yYWdlID0gTlVMTDsNCisNCisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdp
ZHRoKCkgIT0gMCkNCisgICAgew0KKyAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlb
MF1bMF0uZ2V0V2lkdGgoKTsNCisgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxz
KHNpemUsIDApOw0KKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOw0KKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsNCisNCisg
ICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywg
ZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0g
TlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
Ow0KKyAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykNCisg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFn
ZWQoKSkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3VGV4U3RvcmFnZTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Up
IHNvdXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7
DQorICAgIG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsNCisNCisgICAgbURpcnR5SW1hZ2Vz
ID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJ
bmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpDQorew0KKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgdHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOw0KK30NCisN
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkNCit7
DQorICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDIpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kg
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7DQorICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSA0KTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOw0KKw0KKyAgICBy
ZXR1cm4gZmFjZSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsNCit9DQorDQordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkN
Cit7DQorICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVm
aW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOw0KKw0KKyAgICBpZiAobVRl
eFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAg
ICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1
ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQg
ZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7DQorICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWlu
ZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisN
CisgICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3Jt
YXQoKSkNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29w
eSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0K
KyAgICAgICAgDQorICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5tYXJrQ2xl
YW4oKTsNCisNCisgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOw0KKw0KKyAgICAgICAg
aWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0g
eDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9
IHkgKyBoZWlnaHQ7DQorDQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBt
VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7DQorDQorICAgICAg
ICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3Qp
Ow0KKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KK30NCisN
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisg
ICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5n
ZXRXaWR0aCgpOw0KKw0KKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0
ICsgaGVpZ2h0ID4gc2l6ZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOw0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOw0KKw0KKyAgICBpZiAoIXJlbmRlclRhcmdl
dCkNCisgICAgew0KKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0
YXJnZXQuIik7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAg
IH0NCisNCisgICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOw0K
Kw0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZv
cm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQ0KKyAgICB7
DQorICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFn
ZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisg
ICAgICAgIHVwZGF0ZVRleHR1cmUoKTsNCisNCisgICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291
bnQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAg
ICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0geCArIHdpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAg
ICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7DQorDQorICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFy
Z2V0LCBsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3QpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VS
ZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVz
dCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0K
Kw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQ0KK3sNCisgICAgR0xlbnVtIGZvcm1hdCA9IGds
OjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsNCisgICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29u
dmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7DQorICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7DQorICAgIG1JbW11dGFibGUgPSB0
cnVlOw0KKw0KKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQ0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZp
bmUoZm9ybWF0LCBzaXplLCBzaXplLCB0eXBlLCB0cnVlKTsNCisgICAgICAgICAgICBzaXplID0g
c3RkOjptYXgoMSwgc2l6ZSA+PiAxKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmb3Ig
KGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vd
W2xldmVsXS5yZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsN
CisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KQ0KKyAgICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAg
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7DQorICAg
ICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2UsIGxldmVsKTsNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisg
ICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1p
cG1hcHMoKQ0KK3sNCisgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQ0KKyAgICB7DQorICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlm
ICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkNCisgICAgew0KKyAg
ICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSkpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisg
ICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdo
IHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVs
cy4NCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCkpOw0KKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykNCisgICAgew0K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0
Rm9ybWF0KCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1h
Z2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAx
KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdl
dFR5cGUoKSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYm
IG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaS0xKTsN
CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkp
Ow0KKw0KKyAgICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxM
KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCkt
PmJveEZpbHRlcih1cHBlciwgbG93ZXIpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAg
ICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsNCisNCisgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0NsZWFuKCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0K
KyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAg
aWYgKEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5n
ZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNl
KCksIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCkpKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8g
JWQuIiwgaSAtIDEsIGkpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCitSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5k
ZXJidWZmZXIoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRh
cmdldCh0YXJnZXQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25l
ZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOw0KKw0KKyAgICBpZiAobUZhY2VQcm94aWVz
W2ZhY2VdID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5l
dyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMs
IHRhcmdldCkpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07DQor
fQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQ0KK3sNCisgICAgQVNT
RVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7DQorDQorICAgIC8vIGVuc3VyZSB0
aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1
ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisg
ICAgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICANCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOw0KK30NCisNCitUZXh0dXJlU3RvcmFnZSAqVGV4dHVy
ZUN1YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpDQorew0KKyAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKSkNCisgICAgew0KKyAgICAgICAgaWYgKHJlbmRlclRhcmdldCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIH0NCisgICAgICAg
IGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOw0KK30NCisNCit9DQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAppbmRleCAx
OWE2ZWI1Li44MGUyODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaApAQCAtMSw0MzMgKzEsNDI3IEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBUZXh0dXJlLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpUZXh0dXJlIGNsYXNzIGFu
ZCBpdHMgY29uY3JldGUgZGVyaXZlZAotLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVD
dWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNp
Zm5kZWYgTElCR0xFU1YyX1RFWFRVUkVfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8K
LQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotbmFt
ZXNwYWNlIGVnbAotewotY2xhc3MgU3VyZmFjZTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFz
cyBCbGl0OwotY2xhc3MgRnJhbWVidWZmZXI7Ci0KLWVudW0KLXsKLSAgICAvLyBUaGVzZSBhcmUg
dGhlIG1heGltdW1zIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydAotICAgIC8vIFRoZSBh
Y3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNhcHMKLSAgICAvLyBhbmQg
c2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dAotICAgIElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFID0gMTYzODQsCi0KLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMgPSAxNSAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCi19OwotCi1jbGFzcyBJ
bWFnZQotewotICBwdWJsaWM6Ci0gICAgSW1hZ2UoKTsKLSAgICB+SW1hZ2UoKTsKLQotICAgIGJv
b2wgcmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFzZSk7Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7
bURpcnR5ID0gdHJ1ZTt9Ci0gICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQot
Ci0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgYm9vbCBpc1JlbmRlcmFibGVGb3Jt
YXQoKSBjb25zdDsKLSAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICBH
THNpemVpIGdldFdpZHRoKCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQotICAgIEdMc2l6ZWkgZ2V0
SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtSGVpZ2h0O30KLSAgICBHTGVudW0gZ2V0Rm9ybWF0KCkg
Y29uc3Qge3JldHVybiBtRm9ybWF0O30KLSAgICBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0IHtyZXR1
cm4gbVR5cGU7fQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYg
bURpcnR5O30KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwotCi0gICAgdm9p
ZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgdm9p
ZCB1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5j
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5h
dGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29s
IG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZv
aWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1
MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRE
WFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLQotICAgIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oSW1hZ2UpOwotCi0gICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBH
THNpemVpIG1XaWR0aDsKLSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1Gb3JtYXQ7
Ci0gICAgR0xlbnVtIG1UeXBlOwotCi0gICAgYm9vbCBtRGlydHk7Ci0KLSAgICBEM0RQT09MIG1E
M0RQb29sOyAgIC8vIGNhbiBvbmx5IGJlIEQzRFBPT0xfU1lTVEVNTUVNIG9yIEQzRFBPT0xfTUFO
QUdFRCBzaW5jZSBpdCBuZWVkcyB0byBiZSBsb2NrYWJsZS4KLSAgICBEM0RGT1JNQVQgbUQzREZv
cm1hdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU3VyZmFjZTsKLX07Ci0KLWNsYXNzIFRl
eHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwotCi0g
ICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwotICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29u
c3Q7Ci0gICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFRl
eHR1cmVTZXJpYWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJU
YXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAgIGNvbnN0IGJv
b2wgbVJlbmRlclRhcmdldDsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
aXNzdWVUZXh0dXJlU2VyaWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50
VGV4dHVyZVNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAg
IHZpcnR1YWwgflRleHR1cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94
eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNl
dFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAg
ICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWluRmlsdGVy
KCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBn
ZXRXcmFwUygpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAgIEdMZW51
bSBnZXRVc2FnZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50
IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBs
ZXZlbCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVh
bCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c0NvbXByZXNzZWQoKSBjb25zdCA9IDA7Ci0KLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdl
dFRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKLQot
ICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXJ0eUlt
YWdlcygpIGNvbnN0OwotICAgIHZvaWQgcmVzZXREaXJ0eSgpOwotICAgIHVuc2lnbmVkIGludCBn
ZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlh
bChHTGVudW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgaXNJbW11dGFibGUoKSBjb25zdDsKLQotICAg
IHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8
R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0
aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJl
ZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgotCi0gIHByb3RlY3RlZDoKLSAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTsKLQotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgYm9v
bCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwotICAgIHZvaWQgc2V0
Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7
Ci0KLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkgY29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KSA9IDA7Ci0KLSAgICBpbnQgbGV2ZWxDb3VudCgpIGNv
bnN0OwotCi0gICAgc3RhdGljIEJsaXQgKmdldEJsaXR0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpOwotCi0gICAgR0xlbnVtIG1NaW5GaWx0ZXI7
Ci0gICAgR0xlbnVtIG1NYWdGaWx0ZXI7Ci0gICAgR0xlbnVtIG1XcmFwUzsKLSAgICBHTGVudW0g
bVdyYXBUOwotICAgIGJvb2wgbURpcnR5UGFyYW1ldGVyczsKLSAgICBHTGVudW0gbVVzYWdlOwot
Ci0gICAgYm9vbCBtRGlydHlJbWFnZXM7Ci0KLSAgICBib29sIG1JbW11dGFibGU7Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7Ci0KLSAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSA9IDA7Ci19
OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZTJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5
ICpzdXJmYWNlVGV4dHVyZSk7Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RG
T1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0KTsK
LQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKLQotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKTsKLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UyRCk7Ci0KLSAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1SZW5k
ZXJUYXJnZXRTZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQot
ewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZTJEKEdMdWludCBpZCk7Ci0KLSAgICB+
VGV4dHVyZTJEKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
OwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldElu
dGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
OwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
YW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRl
eHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9vbCBpc01p
cG1hcENvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
dHlwZSk7Ci0gICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICBJbWFn
ZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAg
VGV4dHVyZVN0b3JhZ2UyRCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICptU3VyZmFj
ZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQg
Zm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhl
IHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9p
bnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1
bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4g
VGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8g
TlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1
c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xv
cmJ1ZmZlclByb3h5OwotICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQotY2xhc3Mg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1Ymxp
YzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1h
dCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlQ3ViZU1hcCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJm
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwot
Ci0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1
YmVNYXAoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBh
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdl
dFRhcmdldCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGlu
dCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JN
QVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VO
ZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLQotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzdWJJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBz
dWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lk
IGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
LSAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzaXplKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpn
ZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGZhY2VJbmRleChHTGVudW0gZmFjZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlz
Q3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21t
aXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmlu
ZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdl
QXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1
cmVTdG9yYWdlQ3ViZU1hcCAqbVRleFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVy
bmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVu
Y2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5
IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4
dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJp
bmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1
c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJv
cHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZm
ZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50
ICptRmFjZVByb3h5UmVmc1s2XTsKLX07Ci19Ci0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0K
Ky8vIFRleHR1cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5k
IGl0cyBjb25jcmV0ZSBkZXJpdmVkDQorLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVD
dWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQNCisvLyByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLg0KKw0K
KyNpZm5kZWYgTElCR0xFU1YyX1RFWFRVUkVfSF8NCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJF
X0hfDQorDQorI2luY2x1ZGUgPHZlY3Rvcj4NCisNCisjZGVmaW5lIEdMX0FQSUNBTEwNCisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+DQorI2luY2x1ZGUgPGQzZDkuaD4NCisNCisjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiDQorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIg0KKyNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGls
aXRpZXMuaCINCisNCituYW1lc3BhY2UgZWdsDQorew0KK2NsYXNzIFN1cmZhY2U7DQorfQ0KKw0K
K25hbWVzcGFjZSBnbA0KK3sNCitjbGFzcyBCbGl0Ow0KK2NsYXNzIEZyYW1lYnVmZmVyOw0KKw0K
K2VudW0NCit7DQorICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0
aW9uIGNhbiBzdXBwb3J0DQorICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBi
eSB0aGUgZGV2aWNlIGNhcHMNCisgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhl
IENvbnRleHQNCisgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LA0K
KyAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMTYzODQsDQor
DQorICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cy
IG9mIE1BWF9URVhUVVJFX1NJWkUNCit9Ow0KKw0KK2NsYXNzIEltYWdlDQorew0KKyAgcHVibGlj
Og0KKyAgICBJbWFnZSgpOw0KKyAgICB+SW1hZ2UoKTsNCisNCisgICAgYm9vbCByZWRlZmluZShH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUs
IGJvb2wgZm9yY2VSZWxlYXNlKTsNCisgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1
ZTt9DQorICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0eSA9IGZhbHNlO30NCisNCisgICAgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsNCisgICAgRDNERk9STUFUIGdldEQzREZvcm1h
dCgpIGNvbnN0Ow0KKw0KKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Qge3JldHVybiBtV2lk
dGg7fQ0KKyAgICBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHtyZXR1cm4gbUhlaWdodDt9DQor
ICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQ0KKyAgICBHTGVu
dW0gZ2V0VHlwZSgpIGNvbnN0IHtyZXR1cm4gbVR5cGU7fQ0KKyAgICBib29sIGlzRGlydHkoKSBj
b25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9DQorICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRTdXJmYWNlKCk7DQorDQorICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpOw0KKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsNCisNCisgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUs
DQorICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCk7DQorDQorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAg
ICB2b2lkIGxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lk
IGxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9h
ZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lk
IGxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsNCisg
ICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
DQorICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQg
bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JI
YWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JB
VUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJH
QkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkE0NDQ0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQor
ICAgIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbnB1dCk7DQorDQorICAgIHZvaWQgY29weShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7DQorDQorICBwcml2YXRl
Og0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2UpOw0KKw0KKyAgICB2b2lkIGNy
ZWF0ZVN1cmZhY2UoKTsNCisNCisgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2Nr
ZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsNCisgICAgdm9pZCB1bmxvY2soKTsNCisNCisgICAg
R0xzaXplaSBtV2lkdGg7DQorICAgIEdMc2l6ZWkgbUhlaWdodDsNCisgICAgR0xlbnVtIG1Gb3Jt
YXQ7DQorICAgIEdMZW51bSBtVHlwZTsNCisNCisgICAgYm9vbCBtRGlydHk7DQorDQorICAgIEQz
RFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0gb3IgRDNE
UE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLg0KKyAgICBEM0RGT1JN
QVQgbUQzREZvcm1hdDsNCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOw0KK307
DQorDQorY2xhc3MgVGV4dHVyZVN0b3JhZ2UNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0
IFRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2UoKTsNCisNCisgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Ow0KKyAgICBib29s
IGlzTWFuYWdlZCgpIGNvbnN0Ow0KKyAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsNCisgICAg
RFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsNCisgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJp
YWwoKSBjb25zdDsNCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZSk7DQorDQorICAgIGNvbnN0IERXT1JE
IG1EM0RVc2FnZTsNCisgICAgY29uc3QgRDNEUE9PTCBtRDNEUG9vbDsNCisNCisgICAgY29uc3Qg
dW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlVGV4dHVyZVNlcmlhbCgpOw0KKw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50
VGV4dHVyZVNlcmlhbDsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRP
YmplY3QNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsN
CisNCisgICAgdmlydHVhbCB+VGV4dHVyZSgpOw0KKw0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsNCisNCisgICAgdmly
dHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgPSAwOw0KKw0KKyAgICBib29sIHNldE1pbkZp
bHRlcihHTGVudW0gZmlsdGVyKTsNCisgICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRl
cik7DQorICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOw0KKyAgICBib29sIHNldFdyYXBU
KEdMZW51bSB3cmFwKTsNCisgICAgYm9vbCBzZXRVc2FnZShHTGVudW0gdXNhZ2UpOw0KKw0KKyAg
ICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIo
KSBjb25zdDsNCisgICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRX
cmFwVCgpIGNvbnN0Ow0KKyAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsNCisNCisgICAgdmly
dHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOw0KKw0KKyAgICBJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsNCisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIg
KmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1
ZmZlciAqc291cmNlKSA9IDA7DQorDQorICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0ZXJzKCkgY29u
c3Q7DQorICAgIGJvb2wgaGFzRGlydHlJbWFnZXMoKSBjb25zdDsNCisgICAgdm9pZCByZXNldERp
cnR5KCk7DQorICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCk7DQorICAgIHVuc2ln
bmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7DQorDQorICAgIGJv
b2wgaXNJbW11dGFibGUoKSBjb25zdDsNCisNCisgICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNP
TVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0
ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJh
cnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFn
ZXIuDQorDQorICBwcm90ZWN0ZWQ6DQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQorICAgIGJvb2wgc3Vi
SW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisgICAgdm9pZCBzZXRDb21w
cmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2Ug
KmltYWdlKTsNCisgICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7DQor
DQorICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KSBjb25zdDsNCisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsN
CisNCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3QgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsNCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KSA9IDA7DQorDQorICAgIGludCBsZXZlbENv
dW50KCkgY29uc3Q7DQorDQorICAgIHN0YXRpYyBCbGl0ICpnZXRCbGl0dGVyKCk7DQorICAgIHN0
YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7DQorDQorICAgIEdMZW51
bSBtTWluRmlsdGVyOw0KKyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsNCisgICAgR0xlbnVtIG1XcmFw
UzsNCisgICAgR0xlbnVtIG1XcmFwVDsNCisgICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOw0KKyAg
ICBHTGVudW0gbVVzYWdlOw0KKw0KKyAgICBib29sIG1EaXJ0eUltYWdlczsNCisNCisgICAgYm9v
bCBtSW1tdXRhYmxlOw0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmUpOw0KKw0KKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdl
KGJvb2wgcmVuZGVyVGFyZ2V0KSA9IDA7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFnZTJE
IDogcHVibGljIFRleHR1cmVTdG9yYWdlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBU
ZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7DQorICAg
IFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNh
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlMkQoKTsNCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQg
bGV2ZWwpOw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29u
c3Q7DQorDQorICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGVudW0gdGFyZ2V0KSBjb25zdDsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsNCisNCisgICAgSURpcmVjdDNEVGV4dHVyZTkg
Km1UZXh0dXJlOw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsN
Cit9Ow0KKw0KK2NsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlDQorew0KKyAgcHVibGlj
Og0KKyAgICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmUy
RCgpOw0KKw0KKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
Ow0KKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisN
CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7DQorDQorICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNpemVpIGdldEhlaWdodChHTGlu
dCBsZXZlbCkgY29uc3Q7DQorICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZl
bCkgY29uc3Q7DQorICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0
Ow0KKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wg
aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7DQorDQorICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAg
ICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsNCisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAg
dm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsN
CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2b2lk
IHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOw0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29t
cGxldGUoKSBjb25zdDsNCisgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOw0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7DQorDQor
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAgdmlydHVhbCBSZW5k
ZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByb3RlY3Rl
ZDoNCisgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsNCisgICAgdmlydHVh
bCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKyAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdl
dCk7DQorDQorICBwcml2YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVy
ZTJEKTsNCisNCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0
dXJlKCkgY29uc3Q7DQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsNCisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCk7DQorDQorICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0
Ow0KKw0KKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7DQorICAgIHZvaWQg
Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOw0KKw0KKyAgICBJbWFnZSBtSW1hZ2VBcnJheVtJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOw0KKw0KKyAgICBUZXh0dXJlU3RvcmFn
ZTJEICptVGV4U3RvcmFnZTsNCisgICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsNCisNCisgICAg
Ly8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3Ji
dWZmZXIgcHJveHkgcmVmZXJlbmNlcywNCisgICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1
ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcg0KKyAg
ICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZl
cmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcNCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJl
ZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlm
DQorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVs
ZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4NCisgICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZm
ZXJQcm94eTsNCisgICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7DQorfTsNCisNCitjbGFzcyBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UNCit7DQorICBwdWJs
aWM6DQorICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9y
bWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3Rv
cmFnZUN1YmVNYXAoKTsNCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJm
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOw0KKyAgICBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQorDQorICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsNCisNCisgIHBy
aXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVN
YXApOw0KKw0KKyAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOw0KKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3Mg
VGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhw
bGljaXQgVGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKTsNCisNCisgICAgflRleHR1cmVDdWJlTWFw
KCk7DQorDQorICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
DQorICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0K
KyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsNCisgICAgDQorICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ow0KKyAgICBHTHNp
emVpIGdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdM
ZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7
DQorICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0Ow0KKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7DQorDQorICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsNCisgICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQor
DQorICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKw0KKyAgICB2b2lkIHN1YkltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBzdWJJ
bWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisgICAgdm9pZCBj
b3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAq
c291cmNlKTsNCisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0K
KyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzaXplKTsNCisNCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkg
Y29uc3Q7DQorDQorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsNCisNCisgICAg
dmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsNCisN
CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOw0KKw0KKyAg
cHJvdGVjdGVkOg0KKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7
DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
ZXh0dXJlQ3ViZU1hcCk7DQorDQorICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpn
ZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ow0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgp
Ow0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdl
dFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOw0KKw0KKyAgICBib29sIGlzQ3ViZUNvbXBsZXRl
KCkgY29uc3Q7DQorICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsNCisNCisg
ICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgY29tbWl0UmVjdChp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOw0KKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2Uo
aW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5
WzZdW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107DQorDQorICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcCAqbVRleFN0b3JhZ2U7DQorDQorICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJu
YWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5j
ZXMsDQorICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5
IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXINCisgICAgLy8gYmFjayB0byB0aGlzIHRl
eHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBi
aW5kaW5nDQorICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBj
YXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZg0KKyAgICAvLyB0aGUgY291bnQg
ZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJi
dWZmZXIuDQorICAgIFJlbmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOw0KKyAgICB1bnNpZ25l
ZCBpbnQgKm1GYWNlUHJveHlSZWZzWzZdOw0KK307DQorfQ0KKw0KICNlbmRpZiAgIC8vIExJQkdM
RVNWMl9URVhUVVJFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5h
Z2VyLmNwcAppbmRleCA5NWJjM2ZiLi43MGY0NzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApA
QCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3ZlcnRleGNvbnZlcnNpb24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdMZW51bSBWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IFRyYW5zbGF0CiAKICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmYXR0cmlicyA9IG1D
b250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1D
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBmb3IgKGludCBhdHRy
aWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0u
YWN0aXZlID0gKHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0x
KTsKKyAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dyYW1C
aW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKICAgICB9CiAK
ICAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNlZCBidWZm
ZXIsIGFuZCBpbnZhbGlkYXRlIHN0YXRpYyBidWZmZXJzIHRoYXQgZG9uJ3QgY29udGFpbiBtYXRj
aGluZyBhdHRyaWJ1dGVzCkBAIC00NDgsOCArNDUwLDggQEAgc3RydWN0IENvbnZlcnNpb25SdWxl
IDogZ2w6OkNhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUg
RDMKIHRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9t
VHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5
cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07CiAKIC8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24g
Zm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBn
ZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252
ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9h
dDxHTHVpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xf
RklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+
IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6
IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07CiAKIC8vIEEgMi1zdGFnZSBjb25zdHJ1
Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3Qg
dXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQogLy8gd2hldGhlciBpdCBpcyBub3Jt
YWxpemVkIG9yIG5vdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmNwcAppbmRleCBlZThlY2E5Li5mYmEyNTNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL1RleHR1cmUuaCIKQEAgLTU0LDI2ICs1NSwxMjEgQEAgYm9vbCB2YWxpZEltYWdl
U2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KQorLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25z
IGZyb20gdGFibGUgMy40LgorYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQoreworICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAo
dXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsK
KyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNl
IEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZh
bHNlKTsKKyAgICB9CisKKyAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5V
TQorICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5W
QUxJRF9PUEVSQVRJT04KKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAg
IGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
ICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF81XzVfNV8xOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
UkdCOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84
X09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9Cit9Citib29sIHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwogICAgIH0KIAotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCgp
KQorICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
ICAgICB9CiAKLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUt
PmdldEludGVybmFsRm9ybWF0KCkpCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1h
dCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKICAgICBp
ZiAoY29tcHJlc3NlZCkKICAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lk
dGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8IAorICAgICAgICBpZiAoKHdpZHRoICUgNCAh
PSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAogICAgICAgICAgICAgKGhl
aWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxz
ZSk7CkBAIC04OSw2ICsxODUsNDMgQEAgYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wg
Y29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW4KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXBy
ZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgIH0KKworICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0
YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBm
b3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAg
ICB9CisKKyAgICBpZiAoY29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIGlmICgod2lkdGggJSA0
ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKKyAgICAg
ICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0
YXJnZXQsIDApKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwKKyAgICAgICAg
eW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8vIGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2Yg
Zm9ybWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlkIGZvciBSZWFkUGl4ZWxzCiBib29sIHZhbGlk
UmVhZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7CkBAIC0xMDk0LDcg
KzEyMjcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2ZmcwogICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAg
aWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTExMDIsNyArMTIzNSw3IEBAIHZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzCiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0
YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjU4LDYgKzEzOTEsMTkgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9P
RVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgIH0KQEAgLTEzNTUsMjMgKzE1MDEsMzEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xD
b3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0wKICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpOwogICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0
ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9S
R0JBOwogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUs
IHRleDJkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleDJkLT5n
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleDJk
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0
LCBsZXZlbCwgR0xfTk9ORSwgdGV4Y3ViZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1
cmVGb3JtYXQgPSB0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OworICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgICAgICAgICAvLyBbT3Bl
bkdMIEVTIDIuMC4yNF0gdGFibGUgMy45CiAgICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3Jt
YXQpCkBAIC0xNDE0LDYgKzE1NjgsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0yMzA2LDE5ICsy
NDYzLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0
KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVS
RV8yRCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1
cmUyRCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXBy
ZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgpAQCAtMjMyNiwxMSArMjQ4
NSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdAogICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4
LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQogICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0g
R0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+
KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2Vk
KHRleHRhcmdldCwgbGV2ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CkBAIC0yNDQwLDI4ICsyNjA2LDQxIEBAIHZvaWQgX19zdGRjYWxs
IGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCkKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KICAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXgy
ZC0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleGN1
YmUtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI3NTksMTIgKzI5MzgsMTMgQEAg
aW50IF9fc3RkY2FsbCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBH
TGNoYXIqIG5hbWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJp
YnV0ZUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdl
dEF0dHJpYnV0ZUxvY2F0aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTMyMTgsNyArMzM5OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCiAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0
aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX0xJ
TktfU1RBVFVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xp
bmtlZCgpOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9n
cmFtQmluYXJ5KCkgIT0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVkFMSURBVEVfU1RBVFVTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBw
cm9ncmFtT2JqZWN0LT5pc1ZhbGlkYXRlZCgpOwpAQCAtMzI0MSw2ICszNDIxLDkgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcykKICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RIOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMzc2NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlm
b3JtZnZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpegog
CiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVu
aWZvcm1mdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTM4MDAsMTIgKzM5ODksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3Jt
ZnYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpCiAKICAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+
Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYo
bG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4
NDAsMTcgKzQwMzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWlu
dCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXoKIAogICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRV
bmlmb3JtaXYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zODc5LDE3ICs0MDc1LDE4IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0VW5pZm9ybWl2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xp
bnQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFt
cykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlv
biwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzkzMCwxMiAr
NDEyNywxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9n
cmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIC0xKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmpl
Y3QtPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFt
QmluYXJ5LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTAxMiw2ICs1MjEwLDI2IEBAIHZvaWQgX19zdGRj
YWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJu
YWxmb3JtYXQsIEdMCiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAo
dXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAg
ICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmFsaWRhdGUg
PGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9y
bWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4r
PHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KICAgICAgICAgc3dp
dGNoIChmb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgpAQCAtNTAy
NCw3ICs1MjQyLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6
CkBAIC01MDM2LDcgKzUyNTQsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAg
ICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNl
IEdMX1JHQkE6CkBAIC01MDQ5LDcgKzUyNjcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAog
ICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX0JHUkFfRVhUOgpAQCAtNTA1OCw3ICs1Mjc2LDcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0wKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAv
LyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwpA
QCAtNTA2Niw4ICs1Mjg0LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgogICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAgIGJyZWFrOyAK
KyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UXzI0XzhfT0VTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoYm9yZGVyICE9IDApCkBAIC01MTQ2LDYgKzUzODMsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0wKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBw
b3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKKyAgICAgICAgICAg
ICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAg
IGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NDE2LDYg
KzU2NzAsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGYKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCisgICAg
ICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3NTcsOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBl
KGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9y
bWF0VHlwZShmb3JtYXQsIHR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KICAg
ICAgICAgfQogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CkBAIC01NTE3LDExICs1Nzg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
RGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdM
RV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVu
cGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyAr
NTgxNSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhm
YWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4
dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKICAgICAgICAgICAgICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9y
bTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwg
dikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2MjIsNyArNTkxNCwxMyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTFpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBj
b3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2NjgsNyArNTk2NiwxMyBA
QCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9j
YXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTcxNCw3ICs2
MDE4LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0y
aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTc2
MCw3ICs2MDcwLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CkBAIC01ODA2LDcgKzYxMjIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2
KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CkBAIC01ODUyLDcgKzYxNzQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU4OTgsNyArNjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU5MzgsNyArNjI3MiwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9v
bGVhbiB0cmFucwogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJm
dihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NTk3OCw3ICs2MzE4LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTYwNTQsNyArNjQwNiw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTY0NjMsNiArNjgxNSw3OSBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpi
aW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFt
ID0gMHglWCwgYnVmU2l6ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAw
eCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwg
bGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BS
T0dSQU1fQklOQVJZX0FOR0xFOworCisgICAgICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsUHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpiaW5hcnksIEdM
aW50IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5
Rm9ybWF0ID0gMHgleCwgYmluYXJ5ID0gMHglMC44cCwgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAg
ICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJp
bmFyeUZvcm1hdCAhPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
UHJvZ3JhbUJpbmFyeShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9f
c3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0
cnVjdCBFeHRlbnNpb24KQEAgLTY0OTksNyArNjkyNCw4IEBAIF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hh
ciAqCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0s
CiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRv
UHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAg
ICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAot
ICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAg
ICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0
ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0
KyspCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmNwcm9qCmluZGV4IDdkMmI2NDkuLjNiYzgzNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3By
b2oKQEAgLTQwMSw2ICs0MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJPC9GaWxl
PgpAQCAtNDkxLDYgKzQ5NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAppbmRl
eCA3Y2EyZDlmLi43YmIyMjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL21hdGh1dGlsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYXRodXRpbC5oCkBAIC03MCwyNiArNzAsNiBAQCBpbmxpbmUgdW5zaWduZWQg
aW50IHVub3JtKGZsb2F0IHgpCiAgICAgfQogfQogCi1pbmxpbmUgUkVDVCB0cmFuc2Zvcm1QaXhl
bFJlY3QoR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgdywgR0xpbnQgaCwgR0xpbnQgc3VyZmFjZUhl
aWdodCkKLXsKLSAgICBSRUNUIHJlY3QgPSB7eCwKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhl
aWdodCAtIHkgLSBoLAotICAgICAgICAgICAgICAgICB4ICsgdywKLSAgICAgICAgICAgICAgICAg
c3VyZmFjZUhlaWdodCAtIHl9OwotICAgIHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgaW50IHRy
YW5zZm9ybVBpeGVsWU9mZnNldChHTGludCB5b2Zmc2V0LCBHTGludCBoLCBHTGludCBzdXJmYWNl
SGVpZ2h0KQotewotICAgIHJldHVybiBzdXJmYWNlSGVpZ2h0IC0geW9mZnNldCAtIGg7Ci19Ci0K
LWlubGluZSBHTGVudW0gYWRqdXN0V2luZGluZyhHTGVudW0gd2luZGluZykKLXsKLSAgICBBU1NF
UlQod2luZGluZyA9PSBHTF9DVyB8fCB3aW5kaW5nID09IEdMX0NDVyk7Ci0gICAgcmV0dXJuIHdp
bmRpbmcgPT0gR0xfQ1cgPyBHTF9DQ1cgOiBHTF9DVzsKLX0KLQogaW5saW5lIGJvb2wgc3VwcG9y
dHNTU0UyKCkKIHsKICAgICBzdGF0aWMgYm9vbCBjaGVja2VkID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKaW5kZXgg
NjU4OWViMS4uYTdjNjJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJl
c3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVu
dW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8Cisg
ICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0
aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29t
cHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICsz
MDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1
bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IGludCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAg
ICAgICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KEdMZW51bSB0YXJnZXQpCiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0
L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBD
aGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoK
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6
Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwot
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVu
dW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChH
TGVudW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAg
ICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JB
X0VYVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTOiAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxf
T0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBA
QCBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQogICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9P
RVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVy
biBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0
ZWQKICAgICB9CiB9CkBAIC02MzgsOSArNjEyLDYgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0
Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKQogewogICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9
IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOwogCi0gICAgLy8gTWFwIGEgY3ViZSBtYXAgdGV4
dHVyZSB0YXJnZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgIEQzRCBzdXJmYWNlIGluZGV4LiBOb3Rl
IHRoYXQgdGhlCi0gICAgLy8gWSBmYWNlcyBhcmUgc3dhcHBlZCBiZWNhdXNlIHRoZSBZIGNvb3Jk
aW5hdGUgdG8gdGhlIHRleHR1cmUgbG9va3VwIGludHJpbnNpYyBmdW5jdGlvbnMKLSAgICAvLyBh
cmUgbmVnYXRlZCBpbiB0aGUgcGl4ZWwgc2hhZGVyLgogICAgIHN3aXRjaCAoY3ViZUZhY2UpCiAg
ICAgewogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CkBAIC02NTAs
MTAgKzYyMSwxMCBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3Vi
ZUZhY2UpCiAgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAg
ICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOworICAgICAgICBmYWNlID0g
RDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQ
X0ZBQ0VfUE9TSVRJVkVfWTsKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElW
RV9ZOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgogICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7CkBAIC03
NjcsNiArNzM4LDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVt
IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05P
TkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JH
QkE0OgogICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAg
ICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKQEAgLTc5NCw2ICs3NjYsMTAgQEAgbmFt
ZXNwYWNlIGR4MmVzCiAKIHVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3Rl
bmNpbEZvcm1hdCkKIHsKKyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAg
ICB7CisgICAgICAgIHJldHVybiA4OworICAgIH0KICAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkK
ICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9EMjRGUzg6CkBAIC05MDQsNiArODgwLDEwIEBAIHVu
c2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCiAKIHVuc2lnbmVk
IGludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQogeworICAgIGlmIChkZXB0
aEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiAyNDsKKyAgICB9
CiAgICAgc3dpdGNoIChkZXB0aEZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9EMTZf
TE9DS0FCTEU6ICByZXR1cm4gMTY7CkBAIC05NjUsNiArOTQ1LDE2IEBAIGJvb2wgSXNGbG9hdDE2
Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Ym9vbCBJc0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAg
ICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3Rl
bmNpbFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJu
IChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVz
RnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCkBAIC05OTEsNiArOTgxLDEwIEBA
IEdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogCiBHTGVu
dW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlm
IChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7CisgICAgfQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAg
IGNhc2UgRDNERk1UX0QxNjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oCmluZGV4IDg4MjM4ZGMuLmNmMjI0MTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNiArMTYs
OSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFog
PSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RG
T1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywn
TCcpKSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29t
cHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCBhbGlnbm1lbnQpCiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0
aCwgR0xlbnVtIGZvcm1hdCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ29tcHJlc3Nl
ZChHTGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCk7CiBi
b29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIElzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRU
eXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFs
Zm9ybWF0KTsKIApAQCAtNzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1B
VCBkZXB0aEZvcm1hdCk7CiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxG
b3JtYXQpOwogYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwog
Ym9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOworYm9vbCBJc0Rl
cHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNp
bFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogCiBHTHNpemVpIEdldFNh
bXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNmQzZGE3Zi4uNjdiZGM3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTIzMTMsNyArMjMxMywyMCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2Vu
R0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2UuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19s
ZXguY3BwCkBAIC0yMzIxLDYgKzIzMzQsNyBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9JbnRlcm1lZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKQEAgLTIzMzMsMjIgKzIzNDcsNTIg
QEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1
Y3QuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5jCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Y3MuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxl
ci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvRXhwYW5kZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
YwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9RdWFsaWZpZXJBbGl2ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTZWxlY3QuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYTg4NDg4OS4uNzM4YTk3MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDEyLTA2LTI3ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBV
cGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04OTAzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MC4KKworICAgICAgICBObyB0ZXN0cy4g
Tm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAyMDEy
LTA2LTI3ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBN
YWtlIEVsZW1lbnQ6OmVsZW1lbnRSYXJlRGF0YSgpIGFuZCBFbGVtZW50OjplbnN1cmVFbGVtZW50
UmFyZURhdGEoKSBwcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNWVj
MmVjLi5kNzk0YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4OTgsOCAr
NTg5OCwyMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCkBA
IC01OTEyLDYgKzU5MjUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUu
Y3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3Bw
IFwKQEAgLTU5MzUsNiArNTk0OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCkBAIC01OTQ0LDYg
KzU5NTksMjkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlhZ25vc3RpY3NCYXNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0lucHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbml6ZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKQEAgLTU5NTcsNiArNTk5
NSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTY1LDYgKzYwMDQsMTAgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9s
VGFibGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25H
TFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25H
TFNMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01OTcyLDgg
KzYwMTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdXRpbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggN2I5NmI3Ni4u
NWYwNzIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTU2LDcgKzM5NTYsMTMgQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9Db21tb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1
Zy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXAog
ICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCkBAIC0zOTcx
LDExICszOTc3LDI0IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvTU1hcC5oIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUHJhZ21hLmggXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4
cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgg
XAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKICAg
ICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmggXApAQCAtMzk5MCwxNCArNDAwOSwxNyBAQCBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9RdWFs
aWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9SZW1v
dmVUcmVlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1
bmN0aW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5
bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaEhhbmRsZS5o
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwK
KyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvVmFyaWFibGVJbmZvLmggXApAQCAtNDAxMCwxMyArNDAzMiwyMSBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvQ29tcGlsZXIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIFwKICAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwIFwKQEAgLTQwMzQsMTAg
KzQwNjQsMTIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcCBcCkBAIC00MDQ4LDYgKzQw
ODAsMTcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5j
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzQmFzZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="commit-queue"
          id="158163"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150022</attachid>
            <date>2012-06-28 15:07:45 -0700</date>
            <delta_ts>2012-07-10 11:17:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1717036</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmVhM2Q3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Qzgx
NTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdu
b3N0aWNzLmggKi87IH07CisJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
ICovOyB9OworCQlBMjY1NjdFRjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0Ix
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjAx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICov
OyB9OworCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRTE1
OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyNjU2N0Yz
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyog
RXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTI2NTY3RjYx
NTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMzE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCAqLzsg
fTsKKwkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUz
OSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
RDUxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggKi87IH07CisJCUEyNjU2N0Y5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovOyB9Owor
CQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovOyB9OworCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJCUEyNjU2
N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJl
cHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9Owor
CQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMTE1OUMyMUNFMDAzOTg1
MzkgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyNjU2ODA1MTU5QzIxQ0UwMDM5ODUzOSAv
KiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi87
IH07CisJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9r
ZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovOyB9OworCQlBMjY1NjgwQTE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFODE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi87IH07CisJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUz
OSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi87IH07CisJCUEy
NjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkQxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyNjU2ODNBMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLzsgfTsKKwkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLzsgfTsK
KwkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMTE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTI2
NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzIxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9OworCQlBMjY1NjgzRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDAxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzUxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjY1Njg0
MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzYxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI2
NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM3MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJ
CUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4Mzgx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi87IH07CiAJ
CUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhF
NjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5jcHAgKi87IH07CkBAIC02Myw3ICsxMDUsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAg
Ki87IH07CiAJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVB
MDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIz
OUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBT
aGFkZXJMYW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxNDQsNTIgQEAK
IAkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyog
VHJhbnNsYXRvckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNs
YXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QUUxNTlDMjFC
MTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMzE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJl
Y3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I0MTU5
QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJh
Z21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjcxNTlDMjFCMTAwMzk4
NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyog
RGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQjE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0UxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAv
KiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
RXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTAxNTlDMjFD
RTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcmVwcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2Vu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTgxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkExNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJEMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMzE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzNzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MiwxNSArMjQ5LDExIEBACiAJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24u
dmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSB0cmFuc2xhdG9yX2NvbW1vbi52Y3By
b2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnhtbDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IHRy
YW5zbGF0b3JfaGxzbC52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUNG
MTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAxMjAwRjI2MjAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQxMTIw
MEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMjEyMDBGMjYy
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8q
IEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQmFzZVR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2
OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjI0
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5LDggKzMx
Miw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAv
KiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkMxMjAw
RjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RDEyMDBGMzVB
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBAIC0y
NTUsNiArMzM2LDYyIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY1NjdDODE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDOTE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUz
OSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1
MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUz
OSAvKiBJbnB1dC5jcHAgKi8sCisJCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0
LmggKi8sCisJCQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKKwkJ
CQlBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjY1NjdENjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovLAorCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5oICovLAorCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLywKKwkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oICovLAorCQkJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuY3BwICovLAorCQkJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3Iu
aCAqLywKKwkJCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LywKKwkJCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAorCQkJCUEy
NjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovLAorCQkJCUEyNjU2N0U3MTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwICovLAorCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRl
cGdyYXBoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
MjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlB
MjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI2
NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAor
CQkJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
Ki8sCisJCQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgKi8sCisJCQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aE91dHB1dC5oICovLAorCQkJCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8q
IHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
QTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwICovLAorCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggKi8sCisJCQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dGltaW5nOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRkIzOUQwNkUxMjAw
RUQ5MjAwMDg4RTY5ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI2OCw4ICs0MDUsOCBAQAogCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDJCRDEy
MDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFNvdXJjZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yOTIsNiArNDI5LDggQEAKIAkJCQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyog
Q29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1
Zy5jcHAgKi8sCiAJCQkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRlYnVnLmggKi8sCisJ
CQkJQTI2NTY3QUUxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICov
LAorCQkJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8sCiAJCQkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJ
CQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDE5
MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0zMjcsMTUgKzQ2Niwx
MyBAQAogCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJ
CUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIz
OUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJRkIzOUQxQ0Ix
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLywKLQkJCQlGQjM5
RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLywKIAkJCQlG
QjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZC
MzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlE
MUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRkIzOUQx
RDAxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCiAJCQkJRkIzOUQxRDEx
MjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyNjU2N0I3MTU5QzIxQjEwMDM5ODUzOSAvKiBV
bmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKIAkJCSk7CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7
CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcgKzUwNyw2IEBACiAJCUZCMzlEMjIwMTIw
MEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xC
YXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJh
c2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywK
LQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAotCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0J
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
Ci0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAot
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCi0JCQkJ
RkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQlGQjM5RDIy
MTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCiAJCQkJNDk5NTFDMDUxNEI3QUFE
NzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKIAkJCQk0OTk1MUMw
NjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5
MCwxMyArNTE2LDIwIEBACiAJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50
VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICov
LAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUEyNjU2
ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCisJCQkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKIAkJCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyog
Rm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuaCAqLywKKwkJCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFu
Zy5oICovLAogCQkJCTkwRDlCMEZCMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8sCiAJCQkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCAqLywK
IAkJCQk5MEQ5QjBGRDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQk5
MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAogCQkJCUZCMzlEMjJBMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQyMkIxMjAwRjM1QTAw
MDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovLApAQCAtNDA0LDM5ICs1MzcsNTAgQEAKIAkJCQlGQjM5RDIyRTEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJRkIzOUQyMkYxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQlGQjM5RDIzMDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjY1NjdCNDE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzEx
MjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKIAkJCQlGQjM5
RDIzMjEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKIAkJCQlGQjM5RDIz
MzEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCiAJCQkJRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAw
MDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAw
ODhFNjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBG
MkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4
MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIw
MEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zaW5jbHVkZS5oICovLAogCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3Nv
dXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJj
ZV93aW4uY3BwICovLAorCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NM
LmNwcCAqLywKKwkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
LAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJ
CQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFC
RTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJF
MzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0Yx
MjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYz
NUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBv
b2xBbGxvYy5oICovLAorCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAq
LywKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAogCQkJ
CUZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCiAJCQkJ
RkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCiAJCQkJRkIz
OUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJCUZCMzlEMjU5
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTI2NTY3QjYxNTlDMjFC
MTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJOTBEOUIxMDAxMkUxMURDQjAw
MkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJOTBEOUIxMDExMkUxMURDQjAwMkQ0
MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovLAogCQkJCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCAqLywKIAkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hI
YW5kbGUuaCAqLywKIAkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUu
Y3BwICovLAogCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICov
LAorCQkJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8sCisJCQkJQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQlGQjM5RDI2ODEy
MDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlEMjZDMTIwMEYz
NUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuaCAqLywKIAkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5j
cHAgKi8sCiAJCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLywKIAkJCQk5
MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCkBA
IC00NTMsNiArNTk3LDcgQEAKIAkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2
NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLywKIAkJCQlGQjM5RDI0NTEyMDBGMzVBMDAw
ODhFNjkgLyogYXRvbS5jICovLAogCQkJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9t
LmggKi8sCiAJCQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLywKQEAg
LTUwOCw2ICs2NTMsMjggQEAKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQzE0
QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0VEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUEy
NjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODNFMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTg4LDcgKzc1NSw2
IEBACiAJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTAyMTJFMTFEQ0Iw
MDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MEQ5QjEwNDEyRTEx
RENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIx
MDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NjA0LDYgKzc3MCwyNiBAQAogCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5NTFD
MEIxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RUMxNTlDMjFD
RTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1
MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1OUMyMUNFMDAz
OTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgwMzE1
OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njgz
RjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmY0MTg4MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYyIEBACisyMDEyLTA2LTI4ICBNYXggVnVq
b3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2Vi
S2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBBTkdMRSB0byByMTE3MCwgd2l0aCB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CisKKyAg
ICAgICAgUmVuYW1lIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWMuY3BwIHRvIERpYWdub3N0aWNCYXNlLmNwcC4KKyAgICAgICAgUmVuYW1lIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIHRvIERpcmVjdGl2
ZUhhbmRsZXJCYXNlLmNwcC4KKworICAgICAgICBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQU5H
TEUncyBuZXcgcHJlcHJvY2Vzc29yLCB0aGVyZSB3ZXJlIHR3byBmaWxlcyBuYW1lZCBEaWFnbm9z
dGljLmNwcAorICAgICAgICBpbiBBTkdMRSB1bmRlciBkaWZmZXJlbnQgZm9sZGVycy4gVGhpcyBj
YXVzZWQgcHJvYmxlbXMgb24gdGhlIFFUIGJ1aWxkIHdoZW4gdGhlaXIgb2JqZWN0CisgICAgICAg
IGZpbGVzLCBib3RoIG5hbWVkIERpYWdub3N0aWMubywgdHJpZWQgdG8gZ28gaW4gdGhlIHNhbWUg
Zm9sZGVyLiBSZW5hbWluZyBvbmUgb2YgdGhlbSB0bworICAgICAgICBEaWFnbm9zdGljQmFzZS5j
cHAgYXZvaWRzIHRoaXMgY29uZmxpY3QuIFRoZSBzYW1lIHNpdHVhdGlvbiBvY2N1cnJlZCB3aXRo
CisgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIuY3BwLiBJIHdpbGwgdHJ5IHRvIGdldCB0aGVpciBu
YW1lcyBjaGFuZ2VkIGluIEFOR0xFIGZvciBmdXR1cmUgdXBkYXRlcy4KKworICAgICAgICAqIEFO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9n
bDJleHQuaDoKKyAgICAgICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAg
ICAqIHNyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHNyYy9jb21tb24vYW5nbGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5o
OgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6Cisg
ICAgICAgIChCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgor
ICAgICAgICAoVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0
ZUNTU1NoYWRlcik6CisgICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlv
bnMpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5n
UmVzdHJpY3Rpb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2
ZXJzZSk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkp
OgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAg
ICAgIChzaDo6RGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAo
c2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChz
aDo6Y29udGFpbnNHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRl
Y3RMb29wRGlzY29udGludWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAg
IChURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5U
RGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAg
ICAoVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJp
bnQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAg
ICAgKFREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0QmVoYXZpb3IpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVI
YW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIp
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUV4dGVuc2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxl
VmVyc2lvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRk
ZWQuCisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFu
ZGxlcjo6cHJhZ21hKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhh
dmlvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAg
ICAgIChnZXRCZWhhdmlvclN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwOgorICAgICAgICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6
OmluaXRpYWxpemUpOgorICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKElu
aXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5k
ZXgpOgorICAgICAgICAoSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChG
cmVlUGFyc2VDb250ZXh0KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRU
aHJlYWRQYXJzZUNvbnRleHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlh
dGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRw
dXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5h
cnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2
aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAg
ICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAg
ICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6
OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxk
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgor
ICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWdu
RXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
cHJlY2lzaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJv
ckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2Vy
dmVkRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6c2FtcGxlckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjphcnJheVNldE1heFNpemUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0
RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRl
bnNpb25EaXJlY3RpdmUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGly
ZWN0aXZlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1
Y3RTdHJ1Y3QpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjphZGRDb25zdFN0cnVjdCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNo
ZWNrKToKKyAgICAgICAgKFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
UGFyc2VIZWxwZXIuaDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2lu
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAg
ICAgICAoVFByYWdtYTo6VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1
bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVu
YW1lRnVuY3Rpb246OlJlbmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAg
ICAgIChUQ29tcGlsZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoK
KyAgICAgICAgKGdldFZhcmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcDoKKyAgICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9VbmZvbGRTZWxlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZv
bGRTaG9ydENpcmN1aXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1
aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5m
b2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNp
dFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3Ap
OgorICAgICAgICAoc2g6OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0Lmgu
CisgICAgICAgIChzaCk6CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvZGVidWcuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRl
bmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29w
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAg
IChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6
CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6
On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdy
YXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnRO
b2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGRE
ZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFw
aEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRH
cmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlv
bkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAg
ICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6
OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3Jh
cGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1G
dW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJv
bCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rp
b24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAg
ICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFw
aExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3Jh
cGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29w
KToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dp
Y2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpi
ZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdp
blVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpl
bmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZp
c2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJn
dW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlv
bkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rp
b24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9u
RGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5j
dGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVn
YXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVT
ZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAg
ICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWlu
dGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5l
cjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHA6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50
YXRpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lH
cmFwaE91dHB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6
CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJz
ZSk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNl
bGVjdGlvbjo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAg
ICAgICAoVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L2dsc2xhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9y
KToKKyAgICAgICAgKGdsc2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlh
dGUuaDoKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAg
ICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVElu
dGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRl
KToKKyAgICAgICAgKFRJbnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmlu
dEF0b21UYWJsZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoK
KyAgICAgICAgKENQUHByYWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQ
cmVkZWZpbmVJbnRNYWNybyk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERpYWdub3N0aWNzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaWFnbm9zdGljc0Jhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpEaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6
cmVwb3J0KToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6c2V2ZXJpdHkpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQu
CisgICAgICAgIChwcCk6CisgICAgICAgIChEaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHA6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJl
Y3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdldERpcmVjdGl2ZSk6CisgICAg
ICAgIChpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKToKKyAgICAgICAgKGlzRU9EKToKKyAgICAgICAg
KHNraXBVbnRpbEVPRCk6CisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAg
KGlzTWFjcm9QcmVkZWZpbmVkKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKERlZmluZWRQYXJz
ZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQYXJzZXIpOgorICAgICAg
ICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6bGV4KToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAgICAgICAgKHBwOjpEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToKKyAgICAgICAgKHBwOjpE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
VmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUpOgorICAg
ICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRXhwcmVzc2lvbklmZGVmKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAg
IChEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAoQ29uZGl0aW9uYWxCbG9jayk6CisgICAgICAg
IChwcDo6RGlyZWN0aXZlUGFyc2VyOjpDb25kaXRpb25hbEJsb2NrOjpDb25kaXRpb25hbEJsb2Nr
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAuCisgICAgICAgICh5eXN5bnRheF9lcnJvcik6
CisgICAgICAgICh5eWxleCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKHBwKToKKyAg
ICAgICAgKHBwOjpFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAg
KHBwOjpFeHByZXNzaW9uUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToK
KyAgICAgICAgKEV4cHJlc3Npb25QYXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueTogQWRkZWQuCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwOgorICAgICAgICAocHA6OklucHV0OjpJ
bnB1dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWQpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgIChJbnB1
dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OmNvdW50KToKKyAgICAgICAgKHBwOjpJbnB1dDo6c3Ry
aW5nKToKKyAgICAgICAgKHBwOjpJbnB1dDo6bGVuZ3RoKToKKyAgICAgICAgKExvY2F0aW9uKToK
KyAgICAgICAgKHBwOjpJbnB1dDo6TG9jYXRpb246OkxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpJ
bnB1dDo6cmVhZExvYyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TGV4ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpMZXhlcjo6fkxl
eGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oOiBB
ZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHA6CisgICAgICAgIChwcDo6TWFjcm86OmVx
dWFscyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaDoK
KyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpNYWNybzo6TWFjcm8pOgorICAgICAgICAoTWFj
cm8pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFRva2VuTGV4ZXIpOgorICAg
ICAgICAocHA6OlRva2VuTGV4ZXI6OlRva2VuTGV4ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4
ZXI6OmxleCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcik6Cisg
ICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6OmxleCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Z2V0VG9r
ZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4pOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKToKKyAgICAgICAgKHBwOjpN
YWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnBv
cE1hY3JvKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyk6CisgICAg
ICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmg6IEFkZGVkLgorICAgICAgICAocHAp
OgorICAgICAgICAoTWFjcm9FeHBhbmRlcik6CisgICAgICAgIChNYWNyb0NvbnRleHQpOgorICAg
ICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6TWFjcm9Db250ZXh0KToKKyAg
ICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OmVtcHR5KToKKyAgICAgICAg
KHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OmdldCk6CisgICAgICAgIChwcDo6TWFj
cm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0Ojp1bmdldCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFByZXByb2Nlc3Nv
ckltcGwpOgorICAgICAgICAocHA6OlByZXByb2Nlc3NvckltcGw6OlByZXByb2Nlc3NvckltcGwp
OgorICAgICAgICAocHApOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29y
KToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpwcmVk
ZWZpbmVNYWNybyk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oOgorICAgICAgICAo
cHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAg
ICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgorICAgICAgICAoU291
cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjplcXVhbHMpOgorICAg
ICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoKKyAgICAgICAgKHBw
OjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMpOgorICAgICAgICAo
cHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0SGFz
TGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0RXhw
YW5zaW9uRGlzYWJsZWQpOgorICAgICAgICAocHA6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmg6CisgICAgICAgIChwcDo6VG9rZW46
OlRva2VuKToKKyAgICAgICAgKFRva2VuKToKKyAgICAgICAgKHBwOjpUb2tlbjo6YXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46Omhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAgIChw
cDo6VG9rZW46OmV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHl5X2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgICh5eV90cmFuc19pbmZvKToKKyAgICAgICAgKHl5
Z3V0c190KToKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGlucHV0KToKKyAgICAgICAgKHBwcmVzdGFydCk6Cisg
ICAgICAgIChwcF9zd2l0Y2hfdG9fYnVmZmVyKToKKyAgICAgICAgKHBwX2xvYWRfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwX2NyZWF0ZV9idWZmZXIpOgorICAgICAgICAocHBfZGVsZXRlX2J1
ZmZlcik6CisgICAgICAgIChwcF9pbml0X2J1ZmZlcik6CisgICAgICAgIChwcF9mbHVzaF9idWZm
ZXIpOgorICAgICAgICAocHBwdXNoX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcHBvcF9idWZm
ZXJfc3RhdGUpOgorICAgICAgICAocHBlbnN1cmVfYnVmZmVyX3N0YWNrKToKKyAgICAgICAgKHBw
X3NjYW5fYnVmZmVyKToKKyAgICAgICAgKHBwX3NjYW5fc3RyaW5nKToKKyAgICAgICAgKHBwX3Nj
YW5fYnl0ZXMpOgorICAgICAgICAoeXlfZmF0YWxfZXJyb3IpOgorICAgICAgICAocHBnZXRfZXh0
cmEpOgorICAgICAgICAocHBnZXRfbGluZW5vKToKKyAgICAgICAgKHBwZ2V0X2NvbHVtbik6Cisg
ICAgICAgIChwcGdldF9pbik6CisgICAgICAgIChwcGdldF9vdXQpOgorICAgICAgICAocHBnZXRf
bGVuZyk6CisgICAgICAgIChwcGdldF90ZXh0KToKKyAgICAgICAgKHBwc2V0X2V4dHJhKToKKyAg
ICAgICAgKHBwc2V0X2xpbmVubyk6CisgICAgICAgIChwcHNldF9jb2x1bW4pOgorICAgICAgICAo
cHBzZXRfaW4pOgorICAgICAgICAocHBzZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2RlYnVnKToK
KyAgICAgICAgKHBwc2V0X2RlYnVnKToKKyAgICAgICAgKHBwZ2V0X2x2YWwpOgorICAgICAgICAo
cHBzZXRfbHZhbCk6CisgICAgICAgIChwcGdldF9sbG9jKToKKyAgICAgICAgKHBwc2V0X2xsb2Mp
OgorICAgICAgICAocHBsZXhfaW5pdCk6CisgICAgICAgIChwcGxleF9pbml0X2V4dHJhKToKKyAg
ICAgICAgKHl5X2luaXRfZ2xvYmFscyk6CisgICAgICAgIChwcGxleF9kZXN0cm95KToKKyAgICAg
ICAgKHl5X2ZsZXhfc3RybmNweSk6CisgICAgICAgICh5eV9mbGV4X3N0cmxlbik6CisgICAgICAg
IChwcGFsbG9jKToKKyAgICAgICAgKHBwcmVhbGxvYyk6CisgICAgICAgIChwcGZyZWUpOgorICAg
ICAgICAocHApOgorICAgICAgICAocHA6OlRva2VuaXplcjo6VG9rZW5pemVyKToKKyAgICAgICAg
KHBwOjpUb2tlbml6ZXI6On5Ub2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6aW5p
dCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6bGV4
KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXRTY2FubmVyKToKKyAgICAgICAgKHBwOjpU
b2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChU
b2tlbml6ZXIpOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmw6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnk6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90
eXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6
CisgICAgICAgIChJbml0U2Nhbm5lcklucHV0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5j
OgorICAgICAgICAoUmVhZFRva2VuKToKKyAgICAgICAgKER1bXBUb2tlblN0cmVhbSk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDoKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5m
b3JjZVJlc3RyaWN0aW9ucyk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UpOgorICAgICAgICAoUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcik6CisgICAgICAgIChSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zzo6UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcDoKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4
dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6Cisg
ICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAg
ICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJm
YWNlKToKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6On5TdXJmYWNlKToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OnJlbGVhc2UpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6Cisg
ICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXBSZWN0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
Z2V0V2luZG93SGFuZGxlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZVdpbmRvd1Byb2MpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdyk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OnVuc3ViY2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpjaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmNvbnZlcnRJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXApOgorICAgICAgICAoZWdsOjpTdXJmYWNl
Ojpwb3N0U3ViQnVmZmVyKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0V2lkdGgpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRIZWlnaHQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKToKKyAgICAgICAgKGVnbDo6
U3VyZmFjZTo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0VGV4
dHVyZUZvcm1hdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUpOgorICAgICAgICAoZWdsOjpT
dXJmYWNlOjpnZXRCb3VuZFRleHR1cmUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRGb3Jt
YXQpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAgICAgICAoU3VyZmFjZSk6
CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6Q29udGV4dCk6CisgICAgICAg
IChnbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJrQWxsU3RhdGVE
aXJ0eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6bWFya0NvbnRleHRMb3N0KToKKyAgICAgICAgKGdsOjpDb250ZXh0
Ojppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVhckNvbG9yKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVhckRlcHRoKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRDbGVhclN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxGYWNl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0Q3VsbE1vZGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyb250
RmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhUZXN0KToKKyAgICAgICAgKGds
OjpDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dERlcHRoRnVuYyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhSYW5nZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzQmxl
bmRFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldEJsZW5kQ29sb3IpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEJsZW5kRXF1YXRpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxUZXN0
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0U3RlbmNpbEJhY2tQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxX
cml0ZW1hc2spOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNr
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNQ
b2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFBvbHln
b25PZmZzZXRQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9D
b3ZlcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXRTY2lzc29yVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTY2lzc29yVGVzdEVu
YWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldERpdGhlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6aXNEaXRoZXJFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRMaW5l
V2lkdGgpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFNjaXNzb3JQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldENvbG9y
TWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhNYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRBY3RpdmVTYW1wbGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRS
ZWFkRnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFu
ZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0QWN0aXZlUXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4QXR0cmli
U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFBh
Y2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFVucGFja0FsaWdubWVudCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Y3JlYXRlRmVuY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVF1ZXJ5KToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRmVuY2UpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFNoYWRlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0UHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERy
YXdGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZEFycmF5QnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5k
VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnVzZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJlZ2luUXVlcnkpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmVuZFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFt
ZWJ1ZmZlclplcm8pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRGZW5jZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UXVlcnkpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEN1
cnJlbnRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlMkQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0Qm9vbGVh
bnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZsb2F0dik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1l
dGVySW5mbyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFw
cGx5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseUluZGV4QnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVNoYWRlcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmFwcGx5VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpk
cmF3QXJyYXlzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN5bmMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRyYXdMaW5lTG9v
cCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
cmVjb3JkSW52YWxpZE9wZXJhdGlvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkT3V0
T2ZNZW1vcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RXJyb3IpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFJlc2V0U3RhdHVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1Jl
c2V0Tm90aWZpY2F0aW9uRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNT
aGFkZXJNb2RlbDMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBs
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNEWFQzVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1
cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNMdW1p
bmFuY2VBbHBoYVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RlcHRo
VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1cmUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZyk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6ZGV0YWNoQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hUZXh0dXJlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJ
bmNvbXBsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3VsbFNraXBzRHJhdyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNUcmlhbmdsZU1vZGUpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFZlcnRleEF0dHJpYik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4
QXR0cmliRGl2aXNvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmlu
Zyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAg
KGdsOjpDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0
aW9uQ2FjaGUpOgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjph
cHBseURlY2xhcmF0aW9uKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjpt
YXJrU3RhdGVEaXJ0eSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAg
ICAgIChDb250ZXh0KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAg
KGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmg6CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1
dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OkluZm9M
b2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6On5JbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjpnZXRMZW5ndGgpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmdldExvZyk6CisgICAgICAg
IChnbDo6SW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjph
cHBlbmQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OnJlc2V0KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OmxpbmspOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpn
ZXRBdHRyaWJ1dGVCaW5kaW5nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dy
YW06OnNldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2dM
ZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6
OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjp2YWxpZGF0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5oOgorICAgICAgICAoZ2wpOgorICAg
ICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoSW5mb0xvZyk6CisgICAgICAgIChQ
cm9ncmFtKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
LgorICAgICAgICAoZ2w6OnN0cik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6VW5pZm9y
bTo6VW5pZm9ybSk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06OmlzQXJyYXkpOgorICAgICAgICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5p
Zm9ybUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
Z2V0QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNl
bWFudGljSW5kZXgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVy
UmFuZ2UpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6Cisg
ICAgICAgIChnbDo6dHJhbnNwb3NlTWF0cml4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4NGZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Y29tcGlsZVRvQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFy
eWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6bGlua0F0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtVbmlm
b3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybSk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5h
cnk6OnVuZGVjb3JhdGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1uYnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5m
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm1uaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6dmFsaWRhdGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2Ft
cGxlcnMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24pOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24pOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaC4KKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKFVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6UmVnaXN0
ZXJJbmZvKToKKyAgICAgICAgKFJlZ2lzdGVySW5mbyk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6
UmVnaXN0ZXJJbmZvOjpzZXQpOgorICAgICAgICAoVW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoU2FtcGxlcik6CisgICAgICAgICogc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldElu
dGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQz
REZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVz
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpn
ZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6
CisgICAgICAgIChnbCk6CisgICAgICAgIChSZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcDoKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEluZm9Mb2cpOgorICAgICAgICAo
Z2w6OlNoYWRlcjo6Z2V0U291cmNlSW1wbCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuaDoKKyAgICAgICAgKFNoYWRlcik6CisgICAgICAgIChWZXJ0ZXhTaGFkZXIpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbCk6CisgICAgICAgIChn
bDo6Q29udmVydFRleHR1cmVGb3JtYXRUeXBlKToKKyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKToKKyAgICAgICAgKGdsOjpHZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAo
Z2w6OkltYWdlOjpJbWFnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6On5JbWFnZSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OnJlZGVmaW5lKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFj
ZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvY2spOgorICAgICAgICAoZ2w6OkltYWdlOjp1bmxv
Y2spOgorICAgICAgICAoZ2w6OkltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQpOgorICAgICAgICAo
Z2w6OkltYWdlOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRTdXJmYWNl
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UpOgorICAgICAgICAoZ2w6
OkltYWdlOjp1cGRhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZEFscGhhRGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFGbG9hdERh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5j
ZUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSk6Cisg
ICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkUkdCNTY1RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRSR0JBVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEpOgorICAgICAgICAoZ2w6Oklt
YWdlOjpsb2FkUkdCQUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBSGFs
ZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRCR1JBRGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmNv
cHkpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6On5UZXh0dXJlU3RvcmFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3Rv
cmFnZTo6aXNNYW5hZ2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0
b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVy
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6flRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6OnNldE1pbkZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0TWFnRmlsdGVyKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRXcmFwUyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFVzYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpnZXRNaW5GaWx0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldE1hZ0Zp
bHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBUKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRVc2FnZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJz
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcyk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6cmVzZXREaXJ0eSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0VGV4dHVyZVNl
cmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjppc0ltbXV0YWJsZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
Y3JlYXRpb25MZXZlbHMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxldmVsQ291bnQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OmdldEJsaXR0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNv
cHlUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVy
ZVN0b3JhZ2UyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9y
YWdlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6flRl
eHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjphZGRQcm94eVJlZik6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0VGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRJ
bnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFzZVRleEltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojpjb21taXRSZWN0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNNaXBt
YXBDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc0NvbXByZXNzZWQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6aXNEZXB0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpn
ZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRl
eHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OmdlbmVyYXRlTWlwbWFwcyk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpnZXRTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1
cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEN1YmVNYXBTdXJmYWNlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRl
eHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJl
TWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpnZXRUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRX
aWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2VQb3NYKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VO
ZWdYKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VOZWdaKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3Nl
ZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0N1
YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvbnZl
cnRUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJ
bWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRTdG9y
YWdlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuaDoKKyAgICAgICAgKGVnbCk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChJbWFnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6Om1h
cmtEaXJ0eSk6CisgICAgICAgIChnbDo6SW1hZ2U6Om1hcmtDbGVhbik6CisgICAgICAgIChnbDo6
SW1hZ2U6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0SGVpZ2h0KToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0VHlwZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmlzRGlydHkpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2Up
OgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAg
ICAgKFRleHR1cmUyRCk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAgICAg
ICAoVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1h
bmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4
RGF0YSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwOgorICAgICAgICAo
Y2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL21h
dGh1dGlsLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAg
ICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb21w
dXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToKKyAgICAgICAgKGds
OjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydEN1YmVGYWNlKToKKyAgICAg
ICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpH
ZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChkeDJlczo6R2V0RGVwdGhTaXplKToKKyAgICAgICAg
KGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChkeDJlcyk6CisgICAgICAg
IChkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChkeDJlczo6Q29udmVy
dERlcHRoU3RlbmNpbEZvcm1hdCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
aDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGR4MmVzKToKKwogMjAxMi0wNi0yMiAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIFNhbml0aXplIEdMU0wgY29kZSB1c2luZyBBTkdMRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCmluZGV4IGExMjQwMTQuLmUyOTdmYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaApAQCAt
MjM4LDYgKzIzOCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4
OEZFCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xf
QU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
QEAgLTE0ODcsNiArMTQ5MiwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVO
RFRJTElOR1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOwogI2RlZmluZSBHTF9W
SVZfc2hhZGVyX2JpbmFyeSAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkg
Ki8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkgMQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVy
TGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaAppbmRleCBhM2ZjOTM1Li45YTRhMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTM0LDcgKzM0LDcgQEAg
ZXh0ZXJuICJDIiB7CiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRpb24g
QVBJLgogLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4KLSNk
ZWZpbmUgU0hfVkVSU0lPTiAxMDUKKyNkZWZpbmUgU0hfVkVSU0lPTiAxMDcKIAogLy8KIC8vIFRo
ZSBuYW1lcyBvZiB0aGUgZm9sbG93aW5nIGVudW1zIGhhdmUgYmVlbiBkZXJpdmVkIGJ5IHJlcGxh
Y2luZyBHTCBwcmVmaXgKQEAgLTQ5LDcgKzQ5LDI5IEBAIHR5cGVkZWYgZW51bSB7CiAKIHR5cGVk
ZWYgZW51bSB7CiAgIFNIX0dMRVMyX1NQRUMgPSAweDhCNDAsCi0gIFNIX1dFQkdMX1NQRUMgPSAw
eDhCNDEKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MSwKKworICAvLyBUaGUgQ1NTIFNoYWRlcnMg
c3BlYyBpcyBhIHN1YnNldCBvZiB0aGUgV2ViR0wgc3BlYy4KKyAgLy8KKyAgLy8gSW4gYm90aCBD
U1MgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIFJlc2VydmVz
IHRoZSAiY3NzXyIgcHJlZml4LgorICAvLyAoMikgUmVuYW1lcyB0aGUgbWFpbiBmdW5jdGlvbiB0
byBjc3NfbWFpbi4KKyAgLy8gKDMpIERpc2FibGVzIHRoZSBnbF9NYXhEcmF3QnVmZmVycyBidWls
dC1pbi4KKyAgLy8KKyAgLy8gSW4gQ1NTIGZyYWdtZW50IHNoYWRlcnMsIEFOR0xFOgorICAvLyAo
MSkgRGlzYWJsZXMgdGhlIGdsX0ZyYWdDb2xvciBidWlsdC1pbi4KKyAgLy8gKDIpIERpc2FibGVz
IHRoZSBnbF9GcmFnRGF0YSBidWlsdC1pbi4KKyAgLy8gKDMpIEVuYWJsZXMgdGhlIGNzc19NaXhD
b2xvciBidWlsdC1pbi4KKyAgLy8gKDQpIEVuYWJsZXMgdGhlIGNzc19Db2xvck1hdHJpeCBidWls
dC1pbi4KKyAgLy8KKyAgLy8gQWZ0ZXIgcGFzc2luZyBhIENTUyBzaGFkZXIgdGhyb3VnaCBBTkdM
RSwgdGhlIGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gYXBwZW5kCisgIC8vIGEgbmV3IG1haW4gZnVu
Y3Rpb24gdG8gaXQuCisgIC8vIFRoaXMgbmV3IG1haW4gZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBj
c3NfbWFpbiBmdW5jdGlvbi4KKyAgLy8gSXQgbWF5IGFsc28gcGVyZm9ybSBhZGRpdGlvbmFsIG9w
ZXJhdGlvbnMgbGlrZSB2YXJ5aW5nIGFzc2lnbm1lbnQsIHRleHR1cmUKKyAgLy8gYWNjZXNzLCBh
bmQgZ2xfRnJhZ0NvbG9yIGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBDU1Mg
U2hhZGVycworICAvLyBibGVuZCBtb2Rlcy4KKyAgLy8KKyAgU0hfQ1NTX1NIQURFUlNfU1BFQyA9
IDB4OEI0MgogfSBTaFNoYWRlclNwZWM7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0xMDQsNyArMTI2
LDIzIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91
bmQgZm9yIGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgotICBTSF9FTVVMQVRFX0JVSUxUX0lO
X0ZVTkNUSU9OUyA9IDB4MDEwMAorICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4
MDEwMCwKKworICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2UgcmVz
dHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgCisgIC8vIHRpbWluZyBhdHRhY2tzLgorICAv
LyBJdCBnZW5lcmF0ZXMgY29tcGlsYXRpb24gZXJyb3JzIGZvciBzaGFkZXJzIHRoYXQgY291bGQg
ZXhwb3NlIHNlbnNpdGl2ZQorICAvLyB0ZXh0dXJlIGluZm9ybWF0aW9uIHZpYSB0aGUgdGltaW5n
IGNoYW5uZWwuCisgIC8vIFRvIHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IGNvbXBpbGUgdGhlIHNo
YWRlciB1bmRlciB0aGUgV2ViR0wgc3BlYworICAvLyAodXNpbmcgdGhlIFNIX1dFQkdMX1NQRUMg
ZmxhZykuCisgIFNIX1RJTUlOR19SRVNUUklDVElPTlMgPSAweDAyMDAsCisgICAgCisgIC8vIFRo
aXMgZmxhZyBwcmludHMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCBpcyB1c2VkIHRvIGVuZm9y
Y2UgdGltaW5nCisgIC8vIHJlc3RyaWN0aW9ucyBvbiBmcmFnbWVudCBzaGFkZXJzLgorICAvLyBU
aGlzIGZsYWcgb25seSBoYXMgYW4gZWZmZWN0IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0
cnVlOgorICAvLyAtIFRoZSBzaGFkZXIgc3BlYyBpcyBTSF9XRUJHTF9TUEVDLgorICAvLyAtIFRo
ZSBjb21waWxlIG9wdGlvbnMgY29udGFpbiB0aGUgU0hfVElNSU5HX1JFU1RSSUNUSU9OUyBmbGFn
LgorICAvLyAtIFRoZSBzaGFkZXIgdHlwZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIuCisgIFNIX0RF
UEVOREVOQ1lfR1JBUEggPSAweDA0MDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDA5YjYyMi4uNTY1ZGI3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2Fu
Z2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ3LDkgKzQ3LDMyIEBACiAJCTg4OEYx
MzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcu
Y3BwICovOyB9OwogCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsg
fTsKIAkJOTNBNDFBRjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3
RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTk4ODZCQ0Q1RDBERDY5
QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi87IH07CiAJCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAvKiBPdXRwdXRHTFNM
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OwogCQk5
RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYg
LyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owor
CQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyMTE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHBy
ZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5MTU5QzMxQTAwMEU1
N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjAxMDg0MjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkYxNTlD
MzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OworCQlBMjAxMDg0NDE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9j
ZXNzb3IuY3BwICovOyB9OworCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzYx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDYxNTlDMzFBMDAw
RTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87
IH07CisJCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyMDEwODY0MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjUxNTlDMzI0
RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NjYxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyMDEwODY3MTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1
NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjAxMDg2OTE1
OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NkIxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjAxMDg2QzE1OUMzMjRGMDBFNTdC
QkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTIwMTA4NzExNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovOyB9OworCQlBMjAxMDg3MjE1OUMzMjYyMDBFNTdCQkUgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1
aXQuY3BwICovOyB9OwogCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDM2RUZG
MDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CiAJCUFEODU1MTdGMDg2
RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICov
OyB9OwogCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkUyNTg0ODYwMDVG
NjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKQEAgLTEwNCw3ICsxMjcs
NiBAQAogCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5NEY0NDJB
MjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBV
bmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
REREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9jb21tb24uYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE0Nyw2ICsxNjksNTkgQEAKIAkJOUQ0N0Ix
QUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1
YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQ0U0MzYzMTg0
OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE2NDRCMDBFOTMwNEM0MDdG
REM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBsaWJ0cmFuc2xhdG9yX2dsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9u
IGNvcHkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gImxpYnRyYW5zbGF0b3JfY29t
bW9uIGNvcHkuYSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEw
ODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjIxNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZl
UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI1MTU5QzMxQTAw
MEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJBMTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvRXhwYW5k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMDE1OUMzMUEwMDBF
NTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODMx
MTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgz
MjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNjE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdC
QkUgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzgxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzOTE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0ODE1OUMz
MjA5MDBFNTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRBMTU5QzMyNEYwMEU1
N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRF
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTExNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlh
Z25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25v
c3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NjE1OUMzMjRG
MDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTcx
NTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5k
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuc2lvbkJlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUg
LyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyog
UmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1l
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVGMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NjExNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZEMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29u
dGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250
aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZGMTU5QzMyNjIw
MEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTQ0N0Y3NUYzM0RBNEM0QzEyM0FDOTUy
IC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJ0cmFuc2xhdG9yX2hsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVF
RUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OCw3ICsyNTMsNiBAQAogCQlEREQzQjdF
M0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1P
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUVBRkM2MThBM0IzM0YxRkJG
RTM1MzYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNFMDlEQzhFMUJG
NUQyOTU4QUFDRURFIC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1i
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MCw2ICsyNjQsMTMgQEAKIC8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQlBNUM5OTRFNzREQjFF
NjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTIyMyw4ICsz
MDQsMTAgQEAKIAkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCiAJCQkJ
NTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAogCQkJCTgwNThBMEEyQTBBMDIz
ODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKKwkJCQlBMjAxMDg0ODE1OUMzMjA5MDBFNTdC
QkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAogCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAv
KiBtZW1vcnkuYyAqLywKIAkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8sCisJCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKIAkJCQlDRkQxMkM2
RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCiAJCQkJNkJCQzgyMjRCOUQ4RTIzNEQx
MTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKIAkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQg
Lyogc2Nhbm5lci5jICovLApAQCAtMjQxLDE1ICszMjQsMzIgQEAKIAkJMTk2REI2QUIwMDZCQjgz
NTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywK
IAkJCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCisJCQkJQTIw
MTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywK
KwkJCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCAqLywKIAkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCiAJ
CQkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAogCQkJCTBBMTE4RTUw
MDNFNUMwRTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCiAJCQkJQjJGNUNBMTFFRUE5MkRG
MjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAorCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAorCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywK
KwkJCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAg
Ki8sCisJCQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHku
aCAqLywKKwkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCAqLywKKwkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8sCisJCQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywK
KwkJCQlBMjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlB
MjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJ
QTIwMTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlB
MjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKIAkJCQk1
REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCiAJCQkJMTgy
QkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAorCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5o
ICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTI1NywxMiArMzU3LDE4IEBACiAJCQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIElu
aXRpYWxpemVEbGwuY3BwICovLAogCQkJCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0
aWFsaXplRGxsLmggKi8sCiAJCQkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxp
emVHbG9iYWxzLmggKi8sCisJCQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovLAogCQkJCTg1ODQ1RkZGNUE4RTYzMzY0MzA4MjM2RCAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCi0JCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFC
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYg
LyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyog
TU1hcC5oICovLAorCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUu
aCAqLywKKwkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywK
KwkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAor
CQkJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAog
CQkJCTU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8sCiAJCQkJODFDQzQyNDVBOEU1QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmggKi8sCisJCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQlD
OEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYw
MDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKIAkJCQlEQjI5MTdDNUI2
MjQ3MTIzNjRERTRBNzUgLyogT3V0cHV0RVNTTC5jcHAgKi8sCiAJCQkJNkJCNjZBQjU4NzM4NjhF
MjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLywKIAkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMz
NTEgLyogT3V0cHV0R0xTTC5jcHAgKi8sCkBAIC0yNzEsMjAgKzM3NywyNSBAQAogCQkJCUI1NUIz
NTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAogCQkJCTlBNUI1QkIy
NTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKIAkJCQk1QTIxNTk5QzU5QkMx
QTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAorCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZG
OURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKIAkJCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYg
LyogUGFyc2VIZWxwZXIuY3BwICovLAogCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQ
YXJzZUhlbHBlci5oICovLAogCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxs
b2MuY3BwICovLAogCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAq
LywKKwkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCisJCQkJMEU4
RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5
RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAogCQkJCTlENDdCMUFDODJF
NEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZD
QjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFG
QTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBT
ZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFy
Y2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUu
aCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8s
CisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdF
NUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEy
QUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQlBMjAxMDg1RDE1OUMz
MjRGMDBFNTdCQkUgLyogdGltaW5nICovLAogCQkJCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJRDUzREREMENERjE1RUUxREQwMUYxQTIwIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZCNzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5MiwyOSArNDAzLDE3IEBACiAJCQkJQzNEQUZGNkJG
MTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlD
MjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZG
OTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkg
LyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyog
VW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8s
CisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2
N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAy
NTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQky
N0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5
MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFibGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkw
NjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQy
RkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8s
Ci0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJ
CQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMx
MjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVB
M0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3
M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8q
IG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyog
cGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0
ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJ
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7CkBAIC0zMjksNiArNDI4LDYyIEBACiAJCQkp
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTIwMTA4MUUxNTlDMzFBMDAw
RTU3QkJFIC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjAxMDgyMDE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTIw
MTA4MjIxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjAx
MDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAx
MDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyMDEw
ODI2MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjAxMDgyQTE1OUMzMUEw
MDBFNTdCQkUgLyogSW5wdXQuaCAqLywKKwkJCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICov
LAorCQkJCUEyMDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTIw
MTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmggKi8sCisJCQkJQTIwMTA4MkYxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyMDEwODMwMTU5QzMxQTAw
MEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3
QkJFIC8qIHBwX3V0aWxzLmggKi8sCisJCQkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTIwMTA4MzMxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5oICovLAorCQkJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovLAorCQkJCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8s
CisJCQkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8sCisJCQkJQTIwMTA4
MzgxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTIwMTA4MzkxNTlD
MzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg0QjE1OUMzMjRGMDBFNTdC
QkUgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCUEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICov
LAorCQkJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLywK
KwkJCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8sCisJCQkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLywKKwkJCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3JhcGg7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg1RDE1OUMzMjRGMDBF
NTdCQkUgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgKi8sCisJCQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyMDEwODYxMTU5QzMy
NEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMx
ODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMzQ0LDYgKzQ5OSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0
REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMw
NEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNE
QTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovLAogCQkJKTsK
IAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODMs
NiArNTM5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4
QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20u
YXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKIAkJfTsKKwkJQTIwMTA3REMxNTlD
MzEzQzAwRTU3QkJFIC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdC
QkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXBy
b2Nlc3NvciIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlBMjAxMDdERDE1OUMzMTNDMDBF
NTdCQkUgLyogU291cmNlcyAqLywKKwkJCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVu
Y2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gcHJlcHJvY2Vzc29yOworCQkJcHJvZHVjdE5hbWUg
PSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMz
MTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovOworCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CiAJ
CUE4MzhFOTU3NEIzRkYxNDc5MURCREFCMSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7CiAJCQlp
c2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5
Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovOwpAQCAtNDA5LDcgKzU4MSwxMSBAQAogCQkJ
fTsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIg
Ki87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJZGV2ZWxvcG1l
bnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlr
bm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJCQkpOwogCQkJbWFpbkdyb3VwID0gNUJCRUZGOUI5
MTczODI5N0I5NUM1NjhEOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290
ID0gIiI7CkBAIC00MTgsNiArNTk0LDcgQEAKIAkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIg
LyogdHJhbnNsYXRvcl9jb21tb24gKi8sCiAJCQkJNTg5MkM3QTM2OTUzMzA0MzdBRkU1NzE0IC8q
IHRyYW5zbGF0b3JfZ2xzbCAqLywKIAkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJh
bnNsYXRvcl9obHNsICovLAorCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAt
NDMwLDggKzYwNywyNyBAQAogCQkJCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2Vu
SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RjdCNTJBNTREQ0U4MTU1RUQ5NEVDRjggLyog
T3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFOTlENkQ4MERCRjA1RUNFNzEwOEIy
NkQgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTg4NkJDRDVEMERE
NjlCNkZERTA5REQ4IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTY0
NjY1NjZEOEMwRjAyM0E1NTM3NjAgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAv
KiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJQTIwMTA4M0IxNTlD
MzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNDMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8q
IElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUg
LyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJF
IC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDQxNTlDMzFB
MDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0
NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ4
Myw2ICs2NzksMTcgQEAKIAkJCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNl
X3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODYyMTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
MzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjYxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODY3MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTIwMTA4NjgxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODY5MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZC
MTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODZDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NjgsMzggQEAKIAkJ
CX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAv
KiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJP
Q0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAor
CQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAor
CQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gInRy
YW5zbGF0b3JfY29tbW9uIGNvcHkiOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJ
QTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJCSk7CisJ
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJ
CQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKIAkJQUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8q
IFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxk
U2V0dGluZ3MgPSB7CkBAIC02NzIsNiArOTExLDE1IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDE7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKIAkJ
fTsKKwkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0geworCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTIwMTA3
RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAorCQkJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1
N0JCRSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOworCQl9OwogCQlD
NzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZp
Z3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKaW5kZXggMjRjNzY2Yi4uN2Q5
MzQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmds
ZXV0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmgKQEAgLTE1LDQgKzE1LDggQEAKICAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAg
ICAgICAgICAgICBcCiAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKIAorI2lmIGRl
ZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNl
bmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3ZlcnNpb24uaAppbmRleCAyMDNjNDIxLi5iZGQxNjI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKICNk
ZWZpbmUgTUFKT1JfVkVSU0lPTiAxCiAjZGVmaW5lIE1JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBC
VUlMRF9WRVJTSU9OIDAKLSNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTAwOQorI2RlZmluZSBCVUlM
RF9SRVZJU0lPTiAxMTY2CiAKICNkZWZpbmUgU1RSSU5HSUZZKHgpICN4CiAjZGVmaW5lIE1BQ1JP
X1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
CmluZGV4IGE3OTUwYjkuLjFjNGIyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cApAQCAtMTYsMTEgKzE2LDYgQEAgbmFtZXNwYWNlIHsKIC8vIGV2YWx1YXRlZC4gVGhpcyBpcyB1
bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0aGluZyB0bwog
Ly8gY29uc2lkZXIuCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbihmbG9hdCwgZmxvYXQpIiwK
LSAgICAidmVjMiB3ZWJnbF9hdGFuX2VtdSh2ZWMyIHksIHZlYzIgeCkgeyByZXR1cm4gdmVjMihh
dGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xf
YXRhbl9lbXUodmVjMyB5LCB2ZWMzIHgpIHsgcmV0dXJuIHZlYzMoYXRhbih5WzBdLCB4WzBdKSwg
YXRhbih5WzFdLCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmds
X2F0YW5fZW11KHZlYzQgeSwgdmVjNCB4KSB7IHJldHVybiB2ZWM0KGF0YW4oeVswXSwgeFswXSks
IGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSksIGF0YW4oeVszXSwgeFszXSkpOyB9
IiwKLQogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3MoZmxvYXQpIiwKICAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgY29zKHZlYzMpIiwKQEAgLTQxLDExICszNiw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlv
bkVtdWxhdGlvblZlcnRleFNvdXJjZVtdID0gewogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBsZW5ndGgodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVj
NCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwgZmxvYXQpIiwK
LSAgICAidmVjMiB3ZWJnbF9tb2RfZW11KHZlYzIgeCwgdmVjMiB5KSB7IHJldHVybiB2ZWMyKG1v
ZCh4WzBdLCB5WzBdKSwgbW9kKHhbMV0sIHlbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xfbW9k
X2VtdSh2ZWMzIHgsIHZlYzMgeSkgeyByZXR1cm4gdmVjMyhtb2QoeFswXSwgeVswXSksIG1vZCh4
WzFdLCB5WzFdKSwgbW9kKHhbMl0sIHlbMl0pKTsgfSIsCi0gICAgInZlYzQgd2ViZ2xfbW9kX2Vt
dSh2ZWM0IHgsIHZlYzQgeSkgeyByZXR1cm4gdmVjNChtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSwgbW9kKHhbMl0sIHlbMl0pLCBtb2QoeFszXSwgeVszXSkpOyB9IiwKLQogICAgICIj
ZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4g
MC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFs
aXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMp
IiwKQEAgLTU4LDQyICs0OCwzMiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhTb3VyY2VbXSA9IHsKIH07CiAKIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQs
IGZsb2F0KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjMiwgdmVjMiki
LAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzMsIHZlYzMpIiwKLSAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWM0LCB2ZWM0KSIsCi0KICAgICAid2ViZ2xf
ZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxv
YXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMy
IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhh
KTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyB3ZWJnbF9jb3NfZW11KHdlYmds
X2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9l
bXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQg
YSkgeyByZXR1cm4gY29zKGEpOyB9IiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBk
aXN0YW5jZShmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUo
eCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4
LCB5KSAoKHgpICogKHkpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMy
LCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIs
CiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2Vi
Z2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMyLCB2ZWMyKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIG1vZCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3Igbm9ybWFsaXplKGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXpl
X2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAog
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMikiLAogICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIHJlZmxlY3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9l
bXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAqIChJKSAqIChOKSkiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCkBAIC0xMDIsMTAgKzgyLDYgQEAgY29uc3QgY2hhciog
a0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2VbXSA9IHsKIGNvbnN0IGJvb2wga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFza1tdID0gewogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogICAg
IC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBNYWMuCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkF0YW4xXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40XzQKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTEyMiwxMCArOTgsNiBAQCBjb25zdCBib29s
IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QzXzMKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0xMzYsMTAgKzEwOCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0NF80CiAjZWxzZQogICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4K
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25B
dGFuMl8yCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW4zXzMKLSAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uQXRhbjRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwpAQCAtMTU2LDEwICsx
MjQsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTW9kMV8xCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25Nb2QzXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0xNzMsMjIgKzEzNywzOCBA
QCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKIH07CiAKIGNv
bnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrW10gPSB7Ci0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40
XzQKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBXb3JrIGFyb3VuZCBhIEFUSSBkcml2
ZXIgYnVnIGluIE1hYyB0aGF0IGNhdXNlcyBjcmFzaGVzLgorICAgIC8vIFdvcmsgYXJvdW5kIEFU
SSBkcml2ZXIgYnVncyBpbiBNYWMuCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczEKICAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MzCiAgICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRGlzdGFuY2Ux
XzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKKyAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uRG90MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJf
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90NF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkxlbmd0aDEKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQor
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAorICAgIHRydWUs
ICAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Qy
XzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMworICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0NF80CiAjZWxzZQorICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVn
IGluIFdpbi4KICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zNAotI2VuZGlmCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRpc3RhbmNlM18zCkBAIC0yMDEsMTAgKzE4MSw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11
bGF0aW9uRnJhZ21lbnRNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25M
ZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMwpAQCAtMjEzLDYgKzE4OSw3IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0NF80CisjZW5kaWYKICAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgogfTsKIApA
QCAtMzg2LDE4ICszNjMsMTIgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVu
Y3Rpb24oCiAKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwog
ICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgZnVu
Y3Rpb24gPSBURnVuY3Rpb25BdGFuMV8xOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRU9wRGlzdGFuY2U6CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRpc3RhbmNl
MV8xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wRG90OgogICAgICAgICAg
ICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbk1vZDFfMTsK
LSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CiAgICAgICAgICAg
ICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKaW5kZXggYjM3YjY2NS4uMGQ5MDRmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgKQEAgLTQ1LDEyICs0NSw3IEBAIHByaXZhdGU6CiAgICAgLy8g
QnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIC8vCiAgICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsK
LSAgICAgICAgVEZ1bmN0aW9uQXRhbjFfMSA9IDAsICAvLyBmbG9hdCBhdGFuKGZsb2F0LCBmbG9h
dCk7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4yXzIsICAvLyB2ZWMyIGF0YW4odmVjMiwgdmVjMik7
Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4zXzMsICAvLyB2ZWMzIGF0YW4odmVjMywgdmVjMik7Ci0g
ICAgICAgIFRGdW5jdGlvbkF0YW40XzQsICAvLyB2ZWM0IGF0YW4odmVjNCwgdmVjMik7Ci0KLSAg
ICAgICAgVEZ1bmN0aW9uQ29zMSwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CisgICAgICAgIFRGdW5j
dGlvbkNvczEgPSAwLCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKICAgICAgICAgVEZ1bmN0aW9uQ29z
MiwgIC8vIHZlYzIgY29zKHZlYzIpOwogICAgICAgICBURnVuY3Rpb25Db3MzLCAgLy8gdmVjMyBj
b3ModmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNvcyh2ZWM0KTsKQEAg
LTcwLDExICs2NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDMsICAvLyBm
bG9hdCBsZW5ndGgodmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDQsICAvLyBmbG9hdCBs
ZW5ndGgodmVjNCk7CiAKLSAgICAgICAgVEZ1bmN0aW9uTW9kMV8xLCAgLy8gZmxvYXQgbW9kKGZs
b2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDJfMiwgIC8vIHZlYzIgbW9kKHZlYzIs
IHZlYzIpOwotICAgICAgICBURnVuY3Rpb25Nb2QzXzMsICAvLyB2ZWMzIG1vZCh2ZWMzLCB2ZWMz
KTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kNF80LCAgLy8gdmVjNCBtb2QodmVjNCwgdmVjNCk7Ci0K
ICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMSwgIC8vIGZsb2F0IG5vcm1hbGl6ZShmbG9hdCk7
CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTIsICAvLyB2ZWMyIG5vcm1hbGl6ZSh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMywgIC8vIHZlYzMgbm9ybWFsaXplKHZlYzMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAK
aW5kZXggZjI3Y2I3NS4uY2FiODA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCkBAIC04LDEwICs4LDIxIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRm9yTG9vcFVu
cm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hI
YW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdM
QmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9X
RUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNl
IHsKIGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzNCw3IEBAIGJvb2wg
VENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxp
ZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNI
X1dFQkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAg
ICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAv
LyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhl
IGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzIsMTIgQEAgYm9vbCBUQ29tcGls
ZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5H
KSkKICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisg
ICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklD
VElPTlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMo
cm9vdCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQor
ICAgICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwg
Zm9yLWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25z
IHBhc3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9M
TF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9s
bDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAt
MjM1LDEyICsyNTIsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJt
Tm9kZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVy
KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4o
IiwgImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9v
bCBUQ29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAg
ICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8p
OwogICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51
bUVycm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChz
aGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAi
VGltaW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVj
LiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChy
b290KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9v
bCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFw
aC4KKyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRw
dXRBbGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3Qg
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJl
c3RyaWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0g
MDsKK30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmlj
dGlvbnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUq
IHJvb3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVu
aWZvcm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVh
bGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJp
bnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQor
Ly8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BE
aXNjb250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERp
c2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1
cm4gbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBp
ZiAobUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBF
T3BLaWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNl
IEVPcENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAg
Y2FzZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9v
bCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7
Cit9CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsK
KyAgICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisK
K2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2Rl
KQoreworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNl
KHRoaXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAq
bm9kZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7Cisg
ICAgICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVu
dE9wZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFk
aWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5j
dGlvbkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5h
bWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUy
RCIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAg
ICAgICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIg
ZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNv
bnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAg
ICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRp
ZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMg
dXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8v
IHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBs
aWNpdGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGlu
dWl0aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwor
I2RlZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhl
ciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xh
c3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorewor
ICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJv
dGVjdGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gg
Km5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29s
IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVj
a3MgZm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNz
IERldGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAg
cHVibGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3Rl
Y3RlZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSk7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29u
dGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlm
ICAgLy8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5M2EwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKQEAgLTAsMCAr
MSw0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5o
IgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgiCisKK1REaWFnbm9zdGljczo6VERpYWdu
b3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDogbUluZm9TaW5rKGluZm9TaW5rKQoreworfQor
CitURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIFREaWFnbm9zdGlj
czo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEpCit7CisgICAgVEluZm9TaW5rQmFzZSYg
c2luayA9IG1JbmZvU2luay5pbmZvOworICAgIFRQcmVmaXhUeXBlIHByZWZpeCA9IHNldmVyaXR5
ID09IEVSUk9SID8gRVByZWZpeEVycm9yIDogRVByZWZpeFdhcm5pbmc7CisKKyAgICAvKiBWQysr
IGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8K
KyAgICBzaW5rLnByZWZpeChwcmVmaXgpOworICAgIHNpbmsubG9jYXRpb24oRW5jb2RlU291cmNl
TG9jKGxvYy5maWxlLCBsb2MubGluZSkpOworICAgIHNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICAi
JyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4iOworfQorCit2b2lkIFREaWFn
bm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAgIG1JbmZv
U2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjpwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKK3sKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9z
dGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMTMwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGlj
cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisKK2NsYXNzIFRJbmZv
U2luazsKKworY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9zdGljcworewor
ICBwdWJsaWM6CisgICAgVERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspOworICAgIHZp
cnR1YWwgflREaWFnbm9zdGljcygpOworCisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0
dXJuIG1JbmZvU2luazsgfQorCisgICAgdm9pZCB3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHks
CisgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIGV4dHJhKTsKKworICAgIHZvaWQgd3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlk
LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOworCisgIHBy
aXZhdGU6CisgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJ
TEVSX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDFmNmFiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2
MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVy
LmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIK
KyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJlaGF2aW9yIGdl
dEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlz
YWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrV2Fybigid2Fy
biIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAo
c3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0g
a1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4
dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3Ip
LAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGlyZWN0aXZlSGFu
ZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxl
cjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQoreworICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLCBtc2cs
ICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVByYWdtYShjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPbigib24i
KTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7CisKKyAgICBib29s
IGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERHTCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZlIHByYWdtYXMgZm9y
IHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wuIElnbm9yZSBpdC4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtPcHRpbWl6ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0aW1pemUgPSB0cnVl
OworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9wdGltaXplID0gZmFs
c2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJh
Z21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdt
YS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1EaWFnbm9zdGljcy53cml0
ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBnZXRCZWhhdmlv
cihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFVuZGVmaW5lZCkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwg
bG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlvciIsIG5hbWUsICJp
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmFtZSA9PSBrRXh0
QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNz
OjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5z
aW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBo
YXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJl
aGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0
aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ2VuYWJsZScgYmVoYXZpb3IiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVEV4dGVu
c2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7
CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0
ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6aXRl
cmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5maW5kKG5hbWUpOworICAgIGlmIChpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkKKyAgICB7CisgICAgICAgIGl0ZXItPnNlY29u
ZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHA6OkRpYWdu
b3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJST1I7CisgICAg
c3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICBz
ZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFQmhFbmFibGU6CisgICAgICBjYXNlIEVCaFdhcm46CisgICAgICBjYXNlIEVCaERpc2Fi
bGU6CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBz
dXBwb3J0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lv
biA9IDEwMDsKKworICAgIGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIHsKKyAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFtLnN0cigpOworICAgICAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidmVyc2lvbiBudW1iZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjFkM2RmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09N
UElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgiCisKK2NsYXNzIFREaWFn
bm9zdGljczsKKworY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcmVjdGl2
ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIFREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNz
JiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KKyAgICBj
b25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1
cm4gbUV4dGVuc2lvbkJlaGF2aW9yOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3Io
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBy
YWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24m
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbik7CisKKyAg
cHJpdmF0ZToKKyAgICBUUHJhZ21hIG1QcmFnbWE7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBt
RXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgVERpYWdub3N0aWNzJiBtRGlhZ25vc3RpY3M7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5o
CmluZGV4IGU5YmJhNGIuLjYwNDA5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCkBAIC03LDkgKzcsMTEg
QEAKICNpZm5kZWYgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KICNkZWZpbmUgX0VYVEVO
U0lPTl9CRUhBVklPUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgor
I2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAKLXR5cGVkZWYgZW51bSB7Cit0eXBl
ZGVmIGVudW0KK3sKICAgICBFQmhSZXF1aXJlLAogICAgIEVCaEVuYWJsZSwKICAgICBFQmhXYXJu
LApAQCAtMTksMjAgKzIxLDE3IEBAIHR5cGVkZWYgZW51bSB7CiAKIGlubGluZSBjb25zdCBjaGFy
KiBnZXRCZWhhdmlvclN0cmluZyhUQmVoYXZpb3IgYikKIHsKLSAgICBzd2l0Y2goYikgewotICAg
ICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICByZXR1cm4gInJlcXVpcmUiOwotICAgICAgY2Fz
ZSBFQmhFbmFibGU6Ci0gICAgICAgIHJldHVybiAiZW5hYmxlIjsKLSAgICAgIGNhc2UgRUJoV2Fy
bjoKLSAgICAgICAgcmV0dXJuICJ3YXJuIjsKLSAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAg
ICAgcmV0dXJuICJkaXNhYmxlIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOVUxM
OworICAgIHN3aXRjaChiKQorICAgIHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZTogcmV0dXJuICJy
ZXF1aXJlIjsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVuYWJsZSI7CisgICAgICBj
YXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7CisgICAgICBjYXNlIEVCaERpc2FibGU6IHJldHVy
biAiZGlzYWJsZSI7CisgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKICAgICB9CiB9CiAKLXR5
cGVkZWYgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKKy8vIE1h
cHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZpb3IuCit0eXBlZGVmIHN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKIAogI2VuZGlm
IC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKaW5kZXggZjNhMTlkYy4uM2U5NGNl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBUU3RyaW5nIERlZmF1bHRQcmVj
aXNpb25GcmFnbWVudCgpCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJ
bkNvbnN0YW50cyhjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKK3N0YXRpYyBU
U3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoU2hTaGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyAmcmVzb3VyY2VzKQogewogICAgIFRTdHJpbmdTdHJlYW0gczsKIApAQCAtNDg3
LDcgKzQ4Nyw5IEBAIHN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzIDw8ICI7IjsKICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVyZUltYWdl
VW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291
cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBp
bnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA8PCAi
OyI7CisKKyAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAgICAgICBzIDw8
ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsKIH0KQEAgLTUxMyw3ICs1MTUsNyBA
QCB2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMsCiAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3Vw
cG9ydGVkIik7CiAgICAgfQogCi0gICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5D
b25zdGFudHMocmVzb3VyY2VzKSk7CisgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0
SW5Db25zdGFudHMoc3BlYywgcmVzb3VyY2VzKSk7CiB9CiAKIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCkBAIC01MjYsMTEgKzUyOCwy
MiBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5U
X1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwg
ICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFj
aW5nLCAxKSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9N
YXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEs
ICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAg
ICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nv
b3JkLCAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgICAgICBUVHlw
ZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2lu
dENvb3JkIiksICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0s
IEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIENTUyBT
aGFkZXJzLCBnbF9GcmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1ZmZlcnMg
YXJlIG5vdCBhdmFpbGFibGUuCisgICAgICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xvciBhbmQg
Y3NzX0NvbG9yTWF0cml4IGFyZSBhdmFpbGFibGUuCisgICAgICAgIC8vCisgICAgICAgIGlmIChz
cGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0
KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImNzc19NaXhDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0
LCB0cnVlKSkpOworICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNIX1ZF
UlRFWF9TSEFERVI6CkBAIC02MjAsNyArNjMzLDggQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKIAogICAgIC8vIEZpbmFsbHkgYWRk
IHJlc291cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2godHlwZSkgewotICAgIGNh
c2UgU0hfRlJBR01FTlRfU0hBREVSOiB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Cisg
ICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKICAgICAgICAgICAgIC8v
IFNldCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgogICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVl
KTsKICAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFmNDBjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKQEAgLTAs
MCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworT1Nf
VExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsK
KworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIGlmIChHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxy
ZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisgICAgR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisgICAgaWYgKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2Vy
dCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJl
YWR5IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgT1Nf
VExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7CisKKyAgICBpZiAo
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGlu
ZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCisgICAg
cmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOworfQorCitib29sIEluaXRpYWxpemVH
bG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6
ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVk
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250
ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4o
T1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJz
ZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVh
ZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlmIChscFRocmVhZERhdGEg
PT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4
dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250
ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBU
aHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJzZUNvbnRl
eHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJz
ZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRp
Y19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQpCisgICAgICAgIGRlbGV0ZSBs
cFBhcnNlQ29udGV4dDsKKworICAgIHJldHVybiB0cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9p
bnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICAvLworICAgIC8vIE1pbmltYWwg
ZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRl
eHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihP
U19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworCisgICAgcmV0dXJuIGxw
UGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgKaW5kZXggNzYwZmQwOS4uYWE1M2I3MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oCkBAIC0xMyw0ICsxMywxNCBAQCBib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOwogYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7CiBib29sIEZyZWVQYXJzZUNvbnRleHQo
KTsKIAorc3RydWN0IFRQYXJzZUNvbnRleHQ7Cit0eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJz
ZUNvbnRleHRQb2ludGVyOworZXh0ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQ
YXJzZUNvbnRleHQoKTsKKyNkZWZpbmUgR2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNl
Q29udGV4dCgpCisKK3R5cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKK3sKKyAg
ICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBhcnNlQ29udGV4dDsKK30gVFRocmVhZFBhcnNlQ29u
dGV4dDsKKwogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRp
YXRlLmNwcAppbmRleCBjYTZkOGY3Li45MmM0NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzczLDcgKzM3Myw3
IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBv
cCwgVEludGVybU5vZGUqIGNoaWxkTm9kZSwKIC8vIHRoZWlyIG9wZXJhdG9yIHRvIEVPcFNlcXVl
bmNlLgogLy8KIC8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5vZGUsIHdoaWNoIGNvdWxkIGJlIHRo
ZSBvbmUgcGFzc2VkIGluIGlmCi0vLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUuCisvLyBp
dCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUgYnV0IG5vIG9wZXJhdG9yIHdhcyBzZXQuCiAvLwog
VEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3BlcmF0b3IoVElu
dGVybU5vZGUqIG5vZGUsIFRPcGVyYXRvciBvcCwgVFNvdXJjZUxvYyBsaW5lKQogewpAQCAtNTky
LDEwICs1OTIsMTAgQEAgVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihU
SW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2QKICAgICAvLwogCiAgICAgaWYg
KGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpKSB7Ci0gICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgp
ID09IHRydWUpCisgICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTEgPyBzZXRBZ2dyZWdh
dGVPcGVyYXRvcihub2RlUGFpci5ub2RlMSwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUxLT5n
ZXRMaW5lKCkpIDogTlVMTDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
YWlyLm5vZGUyOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUyID8gc2V0QWdncmVn
YXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTIsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMi0+
Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgfQogCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9
IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIG5vZGVQYWlyLm5vZGUxLCBub2RlUGFpci5ub2Rl
Mik7CkBAIC02NTYsNiArNjU2LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRT
ZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWUKICAgICAvLyBN
YWtlIGEgc2VsZWN0aW9uIG5vZGUuCiAgICAgLy8KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2Rl
ID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrLCB0cnVl
QmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVy
biBub2RlOwpAQCAtMTQ0NCw5ICsxNDQ1LDMgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRl
Ojpwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVEludGVybUMKICAg
ICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRv
LCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCks
IHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCi12b2lk
IFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBw
VGFibGUpCi17Ci0gICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7Ci0gICAgcHJhZ21hVGFibGUgPSBu
ZXcgVFByYWdtYVRhYmxlKCk7Ci0gICAgKnByYWdtYVRhYmxlID0gcFRhYmxlOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAKaW5kZXggMGM3ZTFhOS4uYTUwMzEwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwCkBAIC0xNSw3ICsxNSw5IEBAIFRTdHJpbmcgbWFwTG9uZ05hbWUoaW50IGlk
LCBjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sIGlzR2xvYmFsKQogICAgIHN0cmVhbSA8PCAid2Vi
Z2xfIjsKICAgICBpZiAoaXNHbG9iYWwpCiAgICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3Ry
ZWFtIDw8IGlkIDw8ICJfIjsKKyAgICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0gIT0g
J18nKQorICAgICAgICBzdHJlYW0gPDwgIl8iOwogICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigw
LCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwog
ICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKaW5kZXggNjliOGMyNi4uZDdlNjlkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcApAQCAtNiwxMCArNiwxMiBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExT
TC5oIgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxhbGdvcml0aG0+CkBAIC0yMCwxMyArMjIsMTMgQEAgbmFtZXNwYWNlIHNoCiBUU3RyaW5n
IHN0cihpbnQgaSkKIHsKICAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIs
ICIlZCIsIGkpOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkp
OwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNl
Q29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBt
Q29udGV4dChjb250ZXh0KQogewotICAgIG1VbmZvbGRTZWxlY3QgPSBuZXcgVW5mb2xkU2VsZWN0
KGNvbnRleHQsIHRoaXMpOworICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hv
cnRDaXJjdWl0KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwog
CiAgICAgbVVzZXNUZXh0dXJlMkQgPSBmYWxzZTsKQEAgLTM4LDYgKzQwLDEyIEBAIE91dHB1dEhM
U0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVyc2Vy
KHRydWUsIHRydWUsIHRyCiAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOwogICAgIG1Vc2Vz
VGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxz
ZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExv
ZDBfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAg
ICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVD
dWJlTG9kMCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsK
ICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNl
OwogICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwpAQCAtNzUsMjAgKzgzLDI2IEBAIE91dHB1
dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIHRydWUsIHRyCiAgICAgbVNjb3BlRGVwdGggPSAwOwogCiAgICAgbVVuaXF1ZUlu
ZGV4ID0gMDsKKworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAg
bU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9v
cCA9IGZhbHNlOwogfQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCiB7Ci0gICAgZGVsZXRl
IG1VbmZvbGRTZWxlY3Q7CisgICAgZGVsZXRlIG1VbmZvbGRTaG9ydENpcmN1aXQ7CiB9CiAKIHZv
aWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKIHsKKyAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0
eSA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQudHJlZVJvb3QpOworCiAgICAg
bUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1dCB0aGUgYm9keSBm
aXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRlcgogICAgIGhlYWRl
cigpOwogCi0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsKLSAg
ICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsKKyAgICBtQ29udGV4dC5p
bmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1Npbmso
KS5vYmogPDwgbUJvZHkuY19zdHIoKTsKIH0KIAogVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6
Z2V0Qm9keVN0cmVhbSgpCkBAIC0yMDUsMjUgKzIxOSwxMSBAQCB2b2lkIE91dHB1dEhMU0w6Omhl
YWRlcigpCiAgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CiAgICAgICAgIG91dCA8PCAiXG4iOwog
Ci0gICAgICAgIC8vIFRoZSB0ZXh0dXJlIGZldGNoIGZ1bmN0aW9ucyAiZmxpcCIgdGhlIFkgY29v
cmRpbmF0ZSBpbiBvbmUgd2F5IG9yIGFub3RoZXIuIFRoaXMgaXMgYmVjYXVzZSB0ZXh0dXJlcyBh
cmUgc3RvcmVkCi0gICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgT3BlbkdMIGNvbnZlbnRpb24s
IGkuZS4gKDAsIDApIGlzICJib3R0b20gbGVmdCIsIHJhdGhlciB0aGFuIHRoZSBEM0QgY29udmVu
dGlvbiB3aGVyZSAoMCwgMCkKLSAgICAgICAgLy8gaXMgInRvcCBsZWZ0Ii4gU2luY2UgdGhlIEhM
U0wgdGV4dHVyZSBmZXRjaCBmdW5jdGlvbnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHN0b3JlZCBh
Y2NvcmRpbmcgdG8gdGhlIEQzRAotICAgICAgICAvLyBjb252ZW50aW9uLCB0aGUgWSBjb29yZGlu
YXRlIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgaXMgYWRqdXN0ZWQgdG8gY29tcGVuc2F0ZS4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHNpbXBsZXN0IGNhc2UgaXMgdGV4dHVyZTJEIHdo
ZXJlIHRoZSBtYXBwaW5nIGlzIFkgLT4gMS1ZLCB3aGljaCBtYXBzIFswLCAxXSAtPiBbMSwgMF0u
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlMkRQcm9qIGZ1bmN0aW9ucyBhcmUg
bW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIHRoZSBwcm9qZWN0aW9uIGRpdmlkZXMgYnkgZWl0aGVy
IFogb3IgVy4gRm9yIHRoZSB2ZWMzCi0gICAgICAgIC8vIGNhc2UsIHRoZSBtYXBwaW5nIGlzIFkg
LT4gWi1ZIG9yIFkvWiAtPiAxLVkvWiwgd2hpY2ggYWdhaW4gbWFwcyBbMCwgMV0gLT4gWzEsIDBd
LgotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgY3ViZSB0ZXh0dXJlcyB0aGUgbWFwcGluZyBp
cyBZIC0+IC1ZLCB3aGljaCBtYXBzIFstMSwgMV0gLT4gWzEsIC0xXS4gVGhpcyBpcyBub3Qgc3Vm
ZmljaWVudCBvbiBpdHMgb3duIGZvciB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzLCB3
aGljaCBhcmUgbm93IG9uIHRoZSAid3Jvbmcgc2lkZXMiIG9mIHRoZSBjdWJlLiBUaGlzIGlzIGNv
bXBlbnNhdGVkIGZvciBieSBleGNoYW5naW5nIHRoZQotICAgICAgICAvLyArWSBhbmQgLVkgZmFj
ZXMgZXZlcnl3aGVyZSBlbHNlIHRocm91Z2hvdXQgdGhlIGNvZGUuCi0gICAgICAgIAogICAgICAg
ICBpZiAobVVzZXNUZXh0dXJlMkQpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCiAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCBmbG9h
dDIodC54LCAxIC0gdC55KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkQocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpo
ZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgogICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIDEgLSB0LnksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCiAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9
CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJE
IHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueiAtIHQueSwgMCwg
dC56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAg
ICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQo
dC54LCB0LncgLSB0LnksIHQueiwgdC53KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAgdm9p
ZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gKHQueSAvIHQueiksIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCAxIC0gKHQueSAvIHQudyksIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC0yNjksNyAr
MjY5LDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleENVQkUocywgZmxvYXQzKHQueCwgLXQueSwgdC56KSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI3OCw3ICsyNzgs
NzMgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxv
YXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIC10LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0
NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxv
ZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgor
ICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRl
eHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIy
RCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2Qw
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQs
IGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0Lnos
IDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlh
cyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBm
bG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAg
ICAgICAgfQpAQCAtODk3LDcgKzk2Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5cGUoKS5nZXRG
aWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDM5LDkgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ldLnR5cGU7CiAK
ICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpICsgIiA9PSAi
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkVHlwZS0+
Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIgPT0gIjsKICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFt
ZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0xMDU0LDEyICsx
MTIwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CiAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRy
YW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
TWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwg
IiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7ICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRT
aG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9yID0gdHJ1ZTsK
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRl
bXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMDEsMzYgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCiAgICAgICBj
YXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFjKCIsICIi
LCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgi
LCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1kZHkoIiwgIiIs
ICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAgICAgICAKKyAg
ICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8
IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIp
Iik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERGZHk6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRp
bnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
d2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNl
IEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbnkoIiwgIiIsICIp
Iik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjY4LDcgQEAgYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKCgqc2l0KS0+
Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudCgqc2l0
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1VbmZvbGRTZWxlY3Qt
PnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICgq
c2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRz
KCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAgICAgICAgICAgfQpA
QCAtMTI5MCw1OSArMTM4Miw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkp
OwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAgICAgICAgaWYg
KG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
Z2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwg
IiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExv
ZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8
PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJn
dW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ld
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwg
c2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0
cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9sLT5nZXRUeXBlKCku
Z2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1
bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAgICAgICAgICAgICAg
IG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7
XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5z
aXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RW5kTGluZSgpKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0
TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9
ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRM
b2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BGdW5jdGlvbkNh
bGw6CkBAIC0xMzUwLDU0ICsxNDQ3LDEwNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRTdHJp
bmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRw
dXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5l
ZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5h
bWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMp
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZDAgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
X2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2Jp
YXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1
YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
Q3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2Qi
KQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzMyLDExIEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5v
ZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQogICAgIHsKLSAgICAg
ICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsK
KyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0ZW1lbnQKICAgICB7
Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsK
KyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9u
KCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSArMTc0OSwxMSBAQCBi
b29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKICAgICAgICAg
ewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9jaygpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpKTsKLSAg
ICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4iOwogCiAgICAgICAg
IGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2MTQsMTAgKzE3NjMs
MTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKIAogICAgICAgICAg
ICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUoKSk7
Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CiAKICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgICAgIG91dCA8PCAi
O1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzgwLDEzIEBAIHZvaWQg
T3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2Rl
KQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCisgICAgeworICAg
ICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29wKG5vZGUpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODMyLDcgQEAgYm9vbCBPdXRw
dXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogCiAgICAg
aWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkp
OwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpKTsKQEAg
LTE2OTQsNiArMTg1MCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAorICAgIG1JbnNpZGVE
aXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTE3MzIsNiArMTg5MCwxNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQog
Cit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgeworICAgICAgICBtVW5m
b2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAgICBub2RlLT50cmF2
ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50
ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTI3LDExIEBAIGJvb2wgT3V0cHV0SExT
TDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRlcmF0aW9ucyAodW5z
dXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRsZSBsb29wcyB3aXRo
IG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0
aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUgaXRlcmF0aW9ucywg
YnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0aGFuIDI1NCkuCiBi
b29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7
CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKQEAg
LTE4NzcsMTQgKzIwNDcsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29w
KFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9u
cyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAgICAgICBpZiAoaXRl
cmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhfTE9PUF9J
VEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
d2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlu
dCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oMjU1LCBpdGVy
YXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGlu
Y3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwogCiAg
ICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBl
ZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA4NSw4IEBAIGJvb2wg
T3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAg
ICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAg
ICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gMjU1
ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gMjU1OworICAgICAg
ICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGluY3JlbWVudDsKKyAg
ICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElPTlM7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3ICsyMTgyLDcgQEAg
VFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0u
dHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZp
ZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmll
bGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsgYXJyYXlTdHJpbmco
ZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0cmluZyArPSAi
fSAiOwpAQCAtMjA2NSw2ICsyMjM1LDggQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CiAg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMDcsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFk
ZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25z
dCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRz
W2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5n
KGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQp
ICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhm
aWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFtZSgpLCB0eXBlKSAr
IGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAgICAgICAgc3RydWN0
dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYwNiwxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6
OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBl
KQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAm
c3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUoKS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7
CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgyNGJjMDcuLmVhMjhh
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsKLWNsYXNzIFVuZm9s
ZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3MgT3V0cHV0SExTTCA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIE91dHB1
dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBUU3RyaW5nIGluaXRp
YWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShj
b25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBh
biB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRTdHJpbmcg
ZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUp
OworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBoZWFk
ZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7
CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwogCisg
ICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wg
aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wgaGFuZGxlRXhj
ZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZp
c2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3Ry
aW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0LDcgQEAgY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0cmluZyBzdHJ1Y3RM
b29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNlQ29udGV4dCAmbUNv
bnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAgIFVuZm9sZFNob3J0
Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNpZGVGdW5jdGlvbjsK
IAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBjbGFzcyBPdXRwdXRI
TFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7
CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwogICAgIGJvb2wgbVVz
ZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAgYm9vbCBtVXNlc1Bv
aW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKIAogICAgIGlu
dCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcworCisgICAgYm9v
bCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rp
b247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcApp
bmRleCA0MzFmOGQxLi43OWJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDMzICsxMCw3IEBACiAjaW5jbHVk
ZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNsdWRlICJj
b21waWxlci9vc2luY2x1ZGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiCi0KLWV4dGVybiAiQyIgewotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7
Ci1leHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZp
bmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9p
ZCBSZXBvcnRJbmZvKFRJbmZvU2lua0Jhc2UmIHNpbmssCi0gICAgICAgICAgICAgICAgICAgICAg
IFRQcmVmaXhUeXBlIHR5cGUsIFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQotewotICAgIC8qIFZDKysgZm9ybWF0OiBm
aWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLwotICAgIHNpbmsu
cHJlZml4KHR5cGUpOwotICAgIHNpbmsubG9jYXRpb24obG9jKTsKLSAgICBzaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmFJbmZvIDw8ICJcbiI7
Ci19Ci0KLXN0YXRpYyB2b2lkIERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dEJlaGF2aW9yKQotewotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg
IT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBQcmVkZWZpbmVJbnRNYWNy
byhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci19CisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIgogCiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8K
QEAgLTUyLDcgKzI2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhj
b25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMu
bnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTExNCwyMCArODgsMjAgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6
ZSwgVFYKICAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZl
Y3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKICAgICAgICAg
aWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IHZlY1NpemUpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAg
ICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgewotICAgICAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhl
IHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUg
c2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ5LDIwICsxMjMsMjAgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3Ry
aW5nLCBpbnQgbWF0U2l6ZSwgVE0KICAgICBmaWVsZHMuY29sID0gLTE7CiAKICAgICBpZiAoY29t
cFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5n
dGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBTdHJp
bmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKICAgICAgICAgZmll
bGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CiAgICAgfSBlbHNlIGlmIChjb21wU3RyaW5n
WzFdID09ICdfJykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBm
aWVsZHMud2hvbGVSb3cgPSB0cnVlOwpAQCAtMTcwLDcgKzE0NCw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1h
dFNpemUsIFRNCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcg
fHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAogICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKQEAgLTE3OCw3ICsx
NTIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0KIAogICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0yMDMsMzAgKzE3NywyOCBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OnJl
Y292ZXIoKQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciog
dG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9G
b3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJ
bmZvKQogewotICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07Ci0gICAgdmFfbGlzdCBtYXJrZXI7Ci0g
ICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOwotICAgIHZzbnByaW50ZihleHRy
YUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7CisgICAg
cHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobG9jLCAmc3Jj
TG9jLmZpbGUsICZzcmNMb2MubGluZSk7CisgICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpE
aWFnbm9zdGljczo6RVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVh
c29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywg
RVByZWZpeEVycm9yLCBsb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Ci0KLSAgICB2YV9l
bmQobWFya2VyKTsKICAgICArK251bUVycm9yczsKIH0KIAogdm9pZCBUUGFyc2VDb250ZXh0Ojp3
YXJuaW5nKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOwotCi0gICAgUmVwb3J0SW5mbyhpbmZvU2luay5p
bmZvLCBFUHJlZml4V2FybmluZywgbG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykgeworICAgIHBw
OjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xv
Yy5maWxlLCAmc3JjTG9jLmxpbmUpOworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlh
Z25vc3RpY3M6OldBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVh
c29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30KIAotICAgIHZhX2VuZChtYXJrZXIpOwordm9pZCBU
UGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7CisgICAgZGlhZ25vc3RpY3Mu
d3JpdGVEZWJ1ZyhzdHIpOwogfQogCiAvLwpAQCAtMjM0LDggKzIwNiwxMCBAQCB2b2lkIFRQYXJz
ZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCiAvLwogdm9pZCBUUGFyc2VDb250ZXh0
Ojphc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0
cmluZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIiwgb3AsICJjYW5ub3QgY29udmVydCBm
cm9tICclcycgdG8gJyVzJyIsCi0gICAgICAgICAgcmlnaHQuY19zdHIoKSwgbGVmdC5jX3N0cigp
KTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8
IGxlZnQgPDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKIH0K
IAogLy8KQEAgLTI0Myw5ICsyMTcsMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJv
cihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZwogLy8KIHZv
aWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBvcGVyYW5kKQogewotICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUi
LCBvcCwgCi0gICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGFu
IG9wZXJhbmQgb2YgdHlwZSAlcyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9u
KSIsCi0gICAgICAgICAgb3AsIG9wZXJhbmQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibm8gb3BlcmF0aW9u
ICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAiIDw8
IG9wZXJhbmQgCisgICAgICAgICAgICAgICAgICAgIDw8ICIgKG9yIHRoZXJlIGlzIG5vIGFjY2Vw
dGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5m
b1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNTMsMTAgKzIyOSwxMSBAQCB2b2lk
IFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRT
dHJpbmcgb3BlcmFuZCkKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IoaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0g
ICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAKLSAgICAgICAgICAg
ICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5k
IG9mIHR5cGUgJyVzJyBhbmQgIgotICAgICAgICAgICAgImEgcmlnaHQgb3BlcmFuZCBvZiB0eXBl
ICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLCAKLSAgICAgICAg
ICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlv
biAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5kIG9m
IHR5cGUgJyIgPDwgbGVmdCAKKyAgICAgICAgICAgICAgICAgICAgPDwgIicgYW5kIGEgcmlnaHQg
b3BlcmFuZCBvZiB0eXBlICciIDw8IHJpZ2h0IDw8ICInIChvciB0aGVyZSBpcyBubyBhY2NlcHRh
YmxlIGNvbnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7IAogfQogCiBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lv
bkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5
cGUpewpAQCAtMjY1LDEzICsyNDIsMTMgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25F
cnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHkKICAgICBz
d2l0Y2goIHR5cGUgKXsKICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICBpZiggcHJlY2lzaW9u
ID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNp
b24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiApOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBF
YnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwgIiIg
KTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50
KSIsICIiICk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTMxMyw3ICsyOTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChvZmZzZXRbdmFsdWVdID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMi
LCBvcCwgIiIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12
YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMzI0LDcgKzMwMSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgICAg
IGRlZmF1bHQ6IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZXJyb3Io
bGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0zNjQsNyArMzQxLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICB9CiAK
ICAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDAp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNzksMTAgKzM1NiwxOCBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqIG5vZAogICAgIC8vCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJy
b3IgYW5kIGEgbWVzc2FnZS4KICAgICAvLwotICAgIGlmIChzeW1Ob2RlKQotICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9sLCBt
ZXNzYWdlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiKCVzKSIsIG1lc3NhZ2UpOworICAgIGlmIChzeW1Ob2RlKSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBl
cnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2UgPDwgIikiOwor
ICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19z
dHIoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTgsNyArMzgzLDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQog
ICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lv
biByZXF1aXJlZCIsICIiLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3Rh
bnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
NDE0LDcgKzM5OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVElu
dGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKICAgICBpZiAobm9kZS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBl
eHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4sICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5l
KCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbik7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTQzMCw3ICs0MTUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVy
cm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKICAgICBp
ZiAoZ2xvYmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihsaW5lLCAib25s
eSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuLCAiIik7CisgICAgZXJyb3IobGluZSwg
Im9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTQ0OSwyNCArNDM0LDI2IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRF
cnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsK
ICAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKICAgICAgICAgaWYgKGlk
ZW50aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCByZXNlcnZlZEVyck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfV0VCR0xfU1BFQykgeworICAgICAg
ICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlk
ZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2ViZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIiwgIiIpOworICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAgIGVycm9y
KGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaGFkZXJTcGVjID09
IFNIX0NTU19TSEFERVJTX1NQRUMgJiYgaWRlbnRpZmllci5jb21wYXJlKDAsIDQsICJjc3NfIikg
PT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiY3Nz
XyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykg
ewotICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAi
Iik7Ci0gICAgICAgICAgICAvL3JldHVybiB0cnVlOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFy
ZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5nIHR3
byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJsZSBm
dXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyNyw1MSArNTE0LDUxIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9kZSog
bm9kZSwgVEZ1bmN0aW9uCiAgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdCk7CiAK
ICAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3Ry
dWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9y
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25l
IGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9u
LWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25z
dHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobWF0cml4
SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgewogICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0
UGFyYW1Db3VudCgpICE9IDEpIHsKLSAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5n
IG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBm
cm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwog
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG92ZXJG
dWxsKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3Ry
dWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAi
Y29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIGlm
IChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlw
ZS0+Z2V0U3RydWN0KCktPnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2Vz
IG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3Ii
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1l
dGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29u
c3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKCF0eXBl
LT5pc01hdHJpeCgpIHx8ICFtYXRyaXhJbk1hdHJpeCkgewogICAgICAgICBpZiAoKG9wICE9IEVP
cENvbnN0cnVjdFN0cnVjdCAmJiBzaXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNp
emUoKSkgfHwKICAgICAgICAgICAgIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8
IHR5cGUtPmdldE9iamVjdFNpemUoKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3Qg
ZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9y
IGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBUSW50ZXJtVHlwZWQgKnR5cGVkID0gbm9kZSA/IG5v
ZGUtPmdldEFzVHlwZWQoKSA6IDA7CiAgICAgaWYgKHR5cGVkID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1l
bnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5v
dCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHZvaWQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC01ODUsNyArNTcyLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hl
Y2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24KIGJvb2wgVFBhcnNlQ29u
dGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwdWJUeXBlKQogewogICAgIGlmIChwdWJUeXBlLnR5cGUgPT0g
RWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9p
ZCciLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNTk5LDcgKzU4Niw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFRQCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUSW50ZXJtVHlwZWQqIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9
IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+
aXNWZWN0b3IoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjEz
LDcgKzYwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKICAgICBpZiAocFR5
cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5
cGUuc2l6ZSA+IDEpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNz
aW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogCkBAIC02
MzEsNyArNjE4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhpbnQg
bGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdAogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBl
KSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjQzLDcgKzYzMCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlCiB7CiAgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCiAgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3Ry
dWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0
dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC02NTgsNyArNjQ1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0
ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGMKIHsK
ICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAm
JiAKICAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBs
ZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJh
bWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC02OTAsMTQgKzY3NywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6
ZUVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewog
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRV
bmlvbigpOwogICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRJbnQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBh
IGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbiIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAi
Iik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHNpemUgPSBjb25zdGFudC0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAKICAgICBpZiAoc2l6ZSA8PSAw
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBp
bnRlZ2VyIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBi
ZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7CiAgICAgICAgIHNpemUgPSAxOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MTMsNyArNzAwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYg
c2l6ZSkKIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUHVibGljVHlwZSB0eXBlKQogewogICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZx
QXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlw
ZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRUeXBlKHR5
cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtNzMxLDcgKzcxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBl
RXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKICAgICAvLyBDYW4gdGhlIHR5
cGUgYmUgYW4gYXJyYXk/CiAgICAgLy8KICAgICBpZiAodHlwZS5hcnJheSkgewotICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUp
LmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
Y2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNzY3
LDM0ICs3NTQsMzQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHQKIAogICAgICAgICBpZiAoISBz
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewogICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBu
ZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CiAgICAgICAgIGlmICgh
IHZhcmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5l
LCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFy
cmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4g
MCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0
aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVudGlmaWVyLmNfc3RyKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5cGUpKSkg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBh
IGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KIAogICAgICAgICBUVHlwZSogdCA9IHZhcmlhYmxlLT5nZXRBcnJheUluZm9ybWF0aW9uVHlw
ZSgpOwogICAgICAgICB3aGlsZSAodCAhPSAwKSB7CiAgICAgICAgICAgICBpZiAodC0+Z2V0TWF4
QXJyYXlTaXplKCkgPiB0eXBlLmFycmF5U2l6ZSkgewotICAgICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJoaWdoZXIgaW5kZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0aGUgYXJyYXkiLCBpZGVu
dGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVy
IGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHQtPnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CkBAIC04MTYsNyArODAzLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJvbCAqbm9k
ZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOwogICAg
IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZi
dWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiB1
bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBUVmFyaWFi
bGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTgyOCwx
NCArODE1LDExIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1T
eW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICAvLyBpdHMgYW4gZXJyb3IK
ICAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEYXRhIikgewogICAgICAgICBU
U3ltYm9sKiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwg
JmJ1aWx0SW4pOwotICAgICAgICBpZiAoZnJhZ0RhdGEgPT0gMCkgewotICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZl
cnMgbm90IGRlZmluZWQiLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChmcmFnRGF0YSk7CiAKICAgICAgICAgaW50IGZyYWdEYXRhVmFs
dWUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigp
WzBdLmdldElDb25zdCgpOwogICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2
ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUg
YSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04NzAsNyArODU0LDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGkKICAgICAvLwogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBF
dnFDb25zdCkgewogICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUg
aW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTg5MSw3ICs4NzUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGlu
dCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogICAgIHZhcmlhYmxlID0g
bmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwogCiAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAg
ICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICB2YXJpYWJsZSA9IDA7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtOTA2LDcgKzg5MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlCiBi
b29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBx
dWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKQogeyAgICAK
ICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAhPSBFdnFUZW1wb3Jh
cnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5j
dGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFt
ZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZp
ZXIgIT0gRXZxSW4pIHsKQEAgLTkyNCw4ICs5MDgsOSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBh
cmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIg
cAogCiBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNv
bnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0gICAg
aWYgKGl0ZXIgPT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICBjb25zdCBURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBURXh0
ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5maW5kKGV4
dGVuc2lvbi5jX3N0cigpKTsKKyAgICBpZiAoaXRlciA9PSBleHRCZWhhdmlvci5lbmQoKSkgewog
ICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBu
b3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTkzNSw4ICs5
MjAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2FybikgewotICAgICAgICBUU3RyaW5nIG1zZyA9
ICJleHRlbnNpb24gIiArIGV4dGVuc2lvbiArICIgaXMgYmVpbmcgdXNlZCI7Ci0gICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIGxpbmUpOwor
ICAgICAgICB3YXJuaW5nKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlz
IGJlaW5nIHVzZWQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTQ1LDgg
KzkyOSwyMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7Ci0gICAgVEV4dGVuc2lvbkJl
aGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChleHRl
bnNpb24pOwotICAgIHJldHVybiAoaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKSk7Cisg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0
YmVoYXZpb3IuZmluZChleHRlbnNpb24pOworICAgIHJldHVybiAoaXRlciAhPSBleHRiZWhhdmlv
ci5lbmQoKSk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6aGFuZGxlRXh0ZW5zaW9uRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikK
K3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gbG9jOworICAgIERlY29kZVNvdXJjZUxvYyhsaW5l
LCAmbG9jLmZpbGUsICZsb2MubGluZSk7CisgICAgZGlyZWN0aXZlSGFuZGxlci5oYW5kbGVFeHRl
bnNpb24obG9jLCBleHROYW1lLCBiZWhhdmlvcik7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6
aGFuZGxlUHJhZ21hRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gbG9jOworICAgIERlY29kZVNv
dXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZsb2MubGluZSk7CisgICAgZGlyZWN0aXZlSGFuZGxl
ci5oYW5kbGVQcmFnbWEobG9jLCBuYW1lLCB2YWx1ZSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwpAQCAtOTcwLDEyICs5NjksMTIgQEAgY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250
ZXh0OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnUKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1h
dGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5j
dGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCiAgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2Fs
bC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEw
MDMsNyArMTAwMiw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRT
b3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIC8vCiAgICAg
ICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgdHlwZSk7CiAgICAgICAg
IGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgLy8g
ZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0
aGUgcG9vbCAKICAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5
CkBAIC0xMDE1LDcgKzEwMTQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFs
aXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogICAgIC8vCiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpOwogICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAh
PSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIC8vCkBAIC0xMDI0LDEzICsxMDIzLDE2IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1CiAKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIGlm
IChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0i
LCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNz
aWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlICE9IGlu
aXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1h
dGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwNDksNyArMTA1MSwxMCBAQCBi
b29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdQogICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RB
cnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwogICAgICAgICAgICAgdmFyaWFibGUtPnNo
YXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0
cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpIDw8
ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9
IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5z
ZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0xMjM0LDE0ICsxMjM5LDE0IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4
dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXJyb3IobGluZSwgInVuc3Vw
cG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ1bnN1
cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAi
Y29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMjcwLDggKzEy
NzUsMTIgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVElu
dGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5
cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIg
JWQgZnJvbSAnJXMnIHRvICclcyciLCBwYXJhbUNvdW50LAotICAgICAgICAgICAgICAgIG5vZGUt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCksIHR5cGUtPmdldEJhc2lj
U3RyaW5nKCkpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwg
cGFyYW1Db3VudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2Rl
LT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpCisgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiJyB0byAnIiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OwogICAgICAgICByZWNvdmVyKCk7CiAgICAgfQogCkBAIC0xMjkzLDE1ICsxMzAyLDEzIEBAIFRJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVs
ZHMmIGZpZWxkcywgVEludGVybVR5CiAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKICAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgQVNTRVJUKHVuaW9uQXJy
YXkpOwogCi0gICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBlcnJvciBtZXNzYWdl
IHNob3VsZCBuZXZlciBiZSByYWlzZWQKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGluaXRpYWxpemVkIGlu
IGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOwotICAgICAgICAgICAgcmVjb3Zl
cigpOwotCisgICAgICAgIGlmICghdW5pb25BcnJheSkgewogICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8gYmUgZWl0aGVy
IGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29uc3RhbnQgbm9k
ZSwgZWxzZSwgaXRzIGFuIGVycm9yCi0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0
IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNh
bm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIo
KTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMTEsNyArMTMxOCwxMCBAQCBUSW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVs
ZHMsIFRJbnRlcm1UeQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKysp
IHsKICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3Ig
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOwor
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5n
ZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICByZWNvdmVyKCk7
CiAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CiAgICAgICAgIH0KQEAgLTEzMzUs
NyArMTM0NSwxMCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAK
ICAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9m
IHJhbmdlICclZCciLCBpbmRleCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZWNvdmVyKCk7CiAgICAgICAg
IGluZGV4ID0gMDsKICAgICB9CkBAIC0xMzQ1LDcgKzEzNTgsNyBAQCBUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgVAogICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAg
IHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzNjksNyArMTM4MiwxMCBAQCBU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwg
VEludGVybVR5cGVkKiBub2RlLCBUUwogICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5l
c3MoKTsKIAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0
cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAg
ICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAtMTM4MCw3ICsxMzk2LDcgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBl
ZCogbm9kZSwgVFMKICAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwogICAgICAgICAgdHlwZWROb2RlID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6
ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVs
c2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgYXJyYXkiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTQxNiw3ICsxNDMyLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG4KIAogICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5
cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwg
IkVycm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRo
ZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTQzMyw3ICsxNDQ5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjplbnRlclN0
cnVjdERlY2xhcmF0aW9uKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQogICAg
IC8vIFRoZXkgYXJlbid0IGFsbG93ZWQgaW4gR0xTTCBlaXRoZXIsIGJ1dCB3ZSBuZWVkIHRvIGRl
dGVjdCB0aGlzIGhlcmUKICAgICAvLyBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBHTFNMIGNvbXBp
bGVyIHRvIGNhdGNoIGl0LgogICAgIGlmIChzdHJ1Y3ROZXN0aW5nTGV2ZWwgPiAxKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3Qg
YWxsb3dlZCIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3Qg
ZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2VkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTQ1Myw3ICsxNDY5LDcgQEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3Rp
bmcgPSA0OwogCiBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRT
b3VyY2VMb2MgbGluZSwgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSkKIHsKLSAgICBpZiAoc2hhZGVy
U3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7CisgICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRl
clNwZWMpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE0NjQsOCArMTQ4
MCwxMSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRTb3Vy
Y2VMb2MgbGluZSwgY29uc3QgVFR5cGUmIGZpZWxkVAogICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5z
aWRlIGEgc3RydWN0dXJlIGRlZmluaXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCiAgICAgLy8g
b25lIHRvIHRoZSBmaWVsZCdzIHN0cnVjdCBuZXN0aW5nLgogICAgIGlmICgxICsgZmllbGRUeXBl
LmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiIiwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAlcyBl
eGNlZWRzIG1heGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgJWQiLAotICAgICAgICAgICAgICBmaWVs
ZFR5cGUuZ2V0VHlwZU5hbWUoKS5jX3N0cigpLCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKTsKKyAg
ICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUlu
Zm9TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAiIDw8IGZpZWxkVHlwZS5nZXRU
eXBlTmFtZSgpIAorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1heGltdW0g
c3RydWN0IG5lc3Rpbmcgb2YgIiA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTE0ODIsMTA1ICsxNTAxLDE3IEBAIGludCBQYVBhcnNlU3RyaW5ncyhp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10s
CiAgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQogICAgICAgICByZXR1
cm4gMTsKIAotICAgIC8vIHNldHVwIHByZXByb2Nlc3Nvci4KLSAgICBpZiAoSW5pdFByZXByb2Nl
c3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBEZWZpbmVFeHRlbnNpb25NYWNyb3MoY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IpOwotCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShj
b250ZXh0KSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0
cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKLSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNv
bnRleHQpOworICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5n
dGgsIGNvbnRleHQpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19w
YXJzZShjb250ZXh0KTsKIAogICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0gICAgRmlu
YWxpemVQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0
LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKLX0KLQotT1NfVExTSW5kZXggR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKQotewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEFsbG9jYXRlIGEg
VExTIGluZGV4LgotICAgIC8vCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxv
Y1RMU0luZGV4KCk7Ci0gICAgCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0KLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRl
eCh0bHNpSW5kZXgpOwotfQotCi1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQot
ewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgp
OiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9
IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgewotICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBh
cnNlQ29udGV4dCgpOwotICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRl
IHRocmVhZCBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKLSAgICBPU19TZXRU
TFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZyZWVQYXJzZUNvbnRleHQoKQotewotICAgIGlmIChHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBh
c3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBp
bml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBp
ZiAobHBQYXJzZUNvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVy
cm9ycyA9PSAwKSA/IDAgOiAxOwogfQogCi1UUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFs
UGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcg
Zm9yIHNwZWVkCi0gICAgLy8KIAotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5s
cEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAppbmRleCAzZTA1NzYzLi44ZGVlOGZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aApAQCAtNiw4ICs2LDEwIEBACiAjaWZuZGVmIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogI2Rl
ZmluZSBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvbG9j
YWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIApAQCAtMTgsMTMgKzIwLDYgQEAgc3RydWN0IFRNYXRy
aXhGaWVsZHMgewogICAgIGludCBjb2w7CiB9OwogCi1zdHJ1Y3QgVFByYWdtYSB7Ci0gICAgVFBy
YWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9Ci0gICAgYm9v
bCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJsZSBwcmFnbWFUYWJs
ZTsKLX07Ci0KIC8vCiAvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJsZXMgbmVlZGVk
IGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCiAvLyB0aGV5IGNhbiBiZSBwYXNz
ZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCkBAIC0zMyw4ICsyOCw2
IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJs
ZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwg
U2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywgYm9vbCBj
aGVja3NQcmVjRXJyb3JzLCBjb25zdCBjaGFyKiBzb3VyY2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6
CiAgICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwKICAgICAgICAgICAgIHN5bWJvbFRh
YmxlKHN5bXQpLAotICAgICAgICAgICAgZXh0ZW5zaW9uQmVoYXZpb3IoZXh0KSwKLSAgICAgICAg
ICAgIGluZm9TaW5rKGlzKSwKICAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCiAgICAgICAg
ICAgICBzaGFkZXJTcGVjKHNwZWMpLAogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCkBAIC00OCwxMiArNDEsMTIgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAg
ICAgY3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKICAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlKGZhbHNlKSwKICAgICAgICAgICAgIGNoZWNrc1ByZWNpc2lvbkVycm9ycyhjaGVja3NQ
cmVjRXJyb3JzKSwKLSAgICAgICAgICAgIGNvbnRleHRQcmFnbWEodHJ1ZSwgZmFsc2UpLAorICAg
ICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihl
eHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3Ms
ICZkaXJlY3RpdmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAg
IFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJz
ZSB0cmVlCiAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUg
dGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKLSAgICBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yOyAgLy8gbWFwcGluZyBiZXR3ZWVu
IHN1cHBvcnRlZCBleHRlbnNpb25zIGFuZCBjdXJyZW50IGJlaGF2aW9yLgotICAgIFRJbmZvU2lu
ayYgaW5mb1Npbms7CiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAgICAv
LyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCiAg
ICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ug
c3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgogICAg
IGludCBjb21waWxlT3B0aW9uczsKQEAgLTY3LDE1ICs2MCwxOSBAQCBzdHJ1Y3QgVFBhcnNlQ29u
dGV4dCB7CiAgICAgY29uc3QgVFR5cGUqIGN1cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0
dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCiAg
ICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVu
Y3Rpb24gaGFzIGEgcmV0dXJuCiAgICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0
cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNs
YXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhwbGljaXQgb3IgaW1wbGljaXQuCi0gICAgc3RydWN0
IFRQcmFnbWEgY29udGV4dFByYWdtYTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CiAgICAgYm9v
bCBBZnRlckVPRjsKKyAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CisgICAgVERpcmVjdGl2
ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKKyAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nl
c3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsg
cmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKICAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2b2lkIHRyYWNlKGNvbnN0IGNoYXIqIHN0
cik7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKICAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNv
bnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5lKTsKQEAg
LTEwNSw3ICsxMDIsMTMgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgbm9uSW5p
dEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBU
VHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUU3RyaW5nJik7CisKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJl
aGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlv
cigpOyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24p
OworICAgIHZvaWQgaGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisKKyAgICBjb25zdCBUUHJhZ21hJiBw
cmFnbWEoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9CisgICAg
dm9pZCBoYW5kbGVQcmFnbWFEaXJlY3RpdmUoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IGNoYXIqIHZhbHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBl
KTsKICAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUp
OwpAQCAtMTM1LDEzICsxMzgsNCBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
Ci10eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOwotZXh0ZXJuIFRQ
YXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSNkZWZpbmUgR2xv
YmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi0KLXR5cGVkZWYgc3RydWN0
IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKLXsKLSAgICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBh
cnNlQ29udGV4dDsKLX0gVFRocmVhZFBhcnNlQ29udGV4dDsKLQogI2VuZGlmIC8vIF9QQVJTRVJf
SEVMUEVSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUG9vbEFsbG9jLmNwcAppbmRleCBhNjAwYzAyLi45ZWY0ZjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcApAQCAtMTEs
NiArMTEsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIK
ICNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIApAQCAtMTU4LDEwICsxNTksMTAgQEAg
dm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVt
LCB1bnNpZ25lZCBjaGFyIHZhbCwgY28KIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQg
dGhlIGFzc2VydCBtZXNzYWdlLiAgSXQncyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KICNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxs
b2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAg
ICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1h
Z2UgJXMgJUl1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAg
ICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIHNwcmludGYoYXNz
ZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVw
XG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwg
IlBvb2xBbGxvYzogRGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKICAg
ICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKICNlbmRpZgogICAgICAg
ICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3NDQxMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaApAQCAtMCwwICsxLDE5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJBR01BX0hfCisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICAvLyBCeSBkZWZhdWx0
IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYuCisgICAg
VFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZhbHNlKSB7IH0KKyAgICBUUHJhZ21h
KGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKworICAgIGJvb2wg
b3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkFH
TUFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Jl
bmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkYjQw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gUmVu
YW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMg
dG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0
aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1
bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQor
CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3Ao
KTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNh
bGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAgICAgICAg
bm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5hbWU7Cisg
ICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBAIC0yNCw2ICsyNCwx
MyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3Mg
dGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CiAK
IC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0
aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjbGVhclJl
c3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24gaXMgZGV0
ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpOworICAg
IC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9k
ZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBu
b3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBH
TFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJ
bnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0
aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAg
Ym9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91
dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1
c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9s
IAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24g
dGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jl
c3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAgICAgLy8gR2V0IGJ1
aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRl
bnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4
IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0aWMgdm9p
ZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAgaW50IGFjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICBBU1NF
UlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8ubmFtZS5j
X3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2FjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAg
ICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8v
IFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAgICAgICAg
aW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICAg
ICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVM
ZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUu
Y19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFw
cGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmluZGV4IGVkYmVhOTku
LjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJjb21waWxl
ci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUgPGFsZ29y
aXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBUVHlwZSBo
ZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcgKzU3LDcg
QEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkKICAg
ICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgp
KTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKLSAgICAgICAg
c3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6
ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsK
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmNwcAppbmRleCA5NmQ3ZjEwLi5mNDFkZWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKQEAg
LTYsNiArNiw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgogCisj
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL091dHB1dEhMU0wuaCIKIAogVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQzOTg1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFT
VCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBz
dGF0ZW1lbnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCi0KLSNp
bmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhM
U0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFy
c2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNv
bnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3JhcnlJbmRleCA9
IDA7Ci19Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
LXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0gICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci19Ci0KLWJv
b2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBt
T3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAi
O1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgImlmKCI7Ci0g
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAg
ICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwg
IiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
LSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAg
ICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ImVsc2VcbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUlu
ZGV4OwotCi0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRD
b25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsK
LSAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0K
LSAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotaW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICBy
ZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRhM2JhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNz
IE91dHB1dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJt
U2VsZWN0aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpj
b25zdCBtT3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0j
ZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4MmViYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBh
c3NpZ25lZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJh
bnNsYXRvciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1l
c3BhY2Ugc2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29u
dGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0g
MDsKK30KKwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKK30K
KworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNM
LT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9
IHRydWU7IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlm
aWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJi
b29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAg
ICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRM
ZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIg
PSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYoIXMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMg
PSB5OyBlbHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBs
aWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAi
Ym9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlmKHMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2Ug
cyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAg
ICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhM
U0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIg
PDwgaSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91
dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4i
CisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9
IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRl
eDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJ
bml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7Cisg
ICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7Cisg
ICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc2YTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0
LmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2ly
Y3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJh
dG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xE
U0hPUlRDSVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitj
bGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91
dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAq
bm9kZSk7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSop
OworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24g
Km5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9k
ZSk7CisKKyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRw
dXRITFNMOworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8v
IENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCmlu
ZGV4IDc2N2QwYmYuLmQ2OWVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKQEAgLTYsNiAr
Niw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAogbmFt
ZXNwYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcu
Y3BwCmluZGV4IDk2NDJlMWUuLjUzNzc4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHN0
ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAog
c3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwpAQCAtMjgsNyArMjksNyBA
QCB2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CiAgICAgICAgIHZzbnByaW50
ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKICAgICAgICAgdmFfZW5kKGFy
Z3MpOwogCi0gICAgICAgIHBhcnNlQ29udGV4dC0+aW5mb1NpbmsuZGVidWcgPDwgYnVmOworICAg
ICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CiAgICAgfQogfQogfSAgLy8gZXh0ZXJuICJD
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jYTY2MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKQEAgLTAs
MCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4
KQorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVw
ZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQor
eworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsK
K30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAo
VEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigp
OyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
Tm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RH
cmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFy
Z3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGws
IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAg
ICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3Jh
cGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwor
fQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOwor
CisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5
bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOwor
ICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1i
b2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5w
dXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3lt
Ym9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIp
OworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rp
b24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5Lgor
ICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAg
ICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAg
IHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAg
ICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJt
U2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0
dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
TG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0g
bmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29w
KTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdy
YXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRl
cm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICBy
ZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9w
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAg
c3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJp
bmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWE5YzM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisj
aW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNsdWRlIDxzZXQ+CisjaW5j
bHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFwaE5vZGU7CitjbGFzcyBUR3JhcGhQYXJlbnROb2Rl
OworY2xhc3MgVEdyYXBoQXJndW1lbnQ7CitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGw7CitjbGFz
cyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3JhcGhTZWxlY3Rpb247CitjbGFzcyBUR3JhcGhMb29w
OworY2xhc3MgVEdyYXBoTG9naWNhbE9wOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
cjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ7CisKK3R5cGVkZWYgc3RkOjpzZXQ8VEdy
YXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUq
PiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBU
R3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2Fs
bCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgZGVw
ZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitjbGFzcyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IGludGVybU5vZGUobm9kZSkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJvdGVjdGVkOgorICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworfTsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGRl
cGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBtYXkgaGF2ZSBjaGlsZHJlbi4KKy8vCitjbGFzcyBU
R3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogVEdyYXBoTm9kZShub2RlKSB7fQorICAg
IHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUoKSB7fQorICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9k
ZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChub2RlICE9IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5p
bnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJpdmF0ZToKKyAgICBUR3JhcGhOb2RlU2V0
IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1
bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJndW1lbnQgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9k
ZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpCisgICAgICAgIDogVEdyYXBoUGFyZW50
Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3Vt
ZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEFyZ3VtZW50KCkge30KKyAgICBjb25z
dCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgaW50IGdldEFyZ3VtZW50TnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3VtZW50TnVtYmVyOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3By
aXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51bWJlcjsKK307CisKKy8vCisvLyBIYW5kbGUgZnVu
Y3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsIDogcHVibGljIFRHcmFw
aFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShp
bnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkg
e30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBj
b25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KTsKK307CisKKy8vCisvLyBIYW5kbGUgc3ltYm9scy4KKy8vCitjbGFzcyBUR3JhcGhTeW1ib2wg
OiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybVN5bWJv
bCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTeW1ib2woKSB7fQorICAgIGNvbnN0IFRJbnRlcm1T
eW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFz
U3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgaWYgc3Rh
dGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCisvLworY2xhc3MgVEdyYXBoU2VsZWN0aW9u
IDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFNlbGVjdGlvbihUSW50
ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pIDogVEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rp
b24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU2VsZWN0aW9uKCkge30KKyAgICBjb25zdCBUSW50
ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBpbnRlcm1O
b2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8g
SGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBsb29wcy4KKy8vCitjbGFzcyBUR3JhcGhM
b29wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaExvb3AoVEludGVy
bUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb29wKSB7fQorICAgIHZpcnR1
YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29w
KCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNMb29wTm9kZSgpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgbG9naWNhbCBhbmQsIG9yLgorLy8KK2NsYXNzIFRH
cmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50
ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvZ2ljYWxPcCgpIHt9CisgICAg
Y29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50ZXJtTG9naWNhbE9wKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRPcFN0
cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gQSBkZXBlbmRlbmN5IGdy
YXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4KKy8vCisvLyBU
aGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgZW50cnkgcG9pbnRzIG9mIHRo
ZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8vIERlcGVuZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxk
IGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBwcm92aWRlZCAiY3JlYXRlLi4uIiBtZXRo
b2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5vYm9keSBlbHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkg
b2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBOb2RlcyBtYXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIg
YmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVkIG5vZGVzIHdpbGwgZXhpc3Qgd2hpbGUgdGhlCisv
LyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNlIGV4aXN0cy4KKy8vCitjbGFzcyBURGVwZW5kZW5j
eUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lHcmFwaCgpOworICAgIFRHcmFwaE5vZGVWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7
IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEdyYXBoU3ltYm9sVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1wbGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmVuZCgpOworICAgIH0KKworICAgIFRGdW5jdGlv
bkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxz
LmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmVuZCgpOworICAgIH0KKworICAgIFRHcmFw
aEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlv
bkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVh
dGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAg
ICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5
bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVj
dGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBUR3JhcGhMb29wKiBjcmVhdGVMb29wKFRJbnRl
cm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxP
cChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApOworcHJpdmF0ZToKKyAgICB0eXBlZGVm
IFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRNYXA7CisgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRQYWlyOworCisgICAgVEdyYXBoTm9k
ZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdyYXBoU3ltYm9sVmVjdG9yIG1TYW1wbGVyU3ltYm9s
czsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHM7Cisg
ICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1hcDsKK307CisKKy8vCisvLyBGb3IgdHJhdmVyc2lu
ZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNlcnMgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsCisv
LyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3Mg
aXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdoZW4gdXNpbmcgdGhpcywganVz
dCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVkLgorLy8KK2Ns
YXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgwKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRB
cmd1bWVudChUR3JhcGhBcmd1bWVudCogc2VsZWN0aW9uKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpIHt9Owor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
bikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3ApIHt9OworCisgICAgaW50IGdldERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9Cisg
ICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsgKyttRGVwdGg7IH0KKyAgICB2b2lkIGRlY3JlbWVu
dERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisgICAgdm9pZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNp
dGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1hcmtWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsg
bVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSog
bm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0ZWQuZmluZChub2RlKSAhPSBtVmlzaXRlZC5lbmQo
KTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURlcHRoOworICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0
ZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg2Y2ZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMjI3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUq
IG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgc3dpdGNoIChpbnRlcm1B
Z2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUp
OyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0
IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFt
ZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZpc2l0QWdncmVnYXRlQ2hp
bGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtl
ICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorLy8gInggLT4gYXJn
dW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkK
K3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRl
RnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAvLyBSdW4gdGhyb3VnaCB0
aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsK
KyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2Fs
bC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBpbnRl
cm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCisg
ICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7
CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7CisgICAgICAg
IGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBpZiAoVFBhcmVudE5v
ZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAg
ICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50
ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAgICAgICBjb25uZWN0TXVs
dGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7CisgICAgICAg
ICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rp
b24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAg
IC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAgICAvLyBU
aHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5j
eSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+
IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNh
bGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50CisgICAgLy8gY2Fs
bCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIu
CisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IoVEludGVybVNl
cXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBz
ZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVy
bUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8g
dGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBv
ciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgorICAgIFRHcmFwaFN5
bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOwor
ICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisKKyAgICAvLyBJZiB0aGlz
IHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVu
dCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlz
IHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RT
eW1ib2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJv
bHMucG9wKCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0K
K30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBp
bnRlcm1CaW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50
ZXJtQmluYXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRl
cm1CaW5hcnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9w
TG9naWNhbE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVs
c2UKKyAgICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlw
ZWQqIGludGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFp
bnRlcm1MZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0
U3ltYm9sID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJl
ZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAg
Ly8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwg
d2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1i
b2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4K
KyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFz
c2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9w
U2V0KCkpCisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3Np
Z25tZW50Tm9kZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBs
ZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9m
IGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhp
cyBhc3NpZ25tZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdp
bGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBU
aGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5l
c3RlZCBhc3NpZ25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8g
dGhlIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50
LCB3aGljaCB3aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50
ZXJtTG9naWNhbE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRl
cm1Mb2dpY2FsT3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBt
Tm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wID0gbUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNh
bE9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJp
Z2h0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRy
ZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1C
aW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0
ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5h
cnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVy
bVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBp
bnRlcm1TZWxlY3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24g
PSBpbnRlcm1TZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRp
b24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlv
bk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlv
bik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRp
b25Ob2Rlcywgc2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJt
Tm9kZSogaW50ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkK
KyAgICAgICAgaW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9j
aygpKQorICAgICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgewor
ICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAg
ICAgICAgICAgVEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29w
KTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlv
bk5vZGVzLCBsb29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtQm9keSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9u
ID0gaW50ZXJtTG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9u
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFy
ZW50Tm9kZVNldCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAg
IGZvciAoVFBhcmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4o
KTsgaXRlciAhPSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBh
cmVudE5vZGUqIGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGRE
ZXBlbmRlbnROb2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjIz
MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0JVSUxERVJfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JV
SUxERVJfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgi
CisKKy8vCisvLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRl
IHRyZWUuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUq
IG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToK
KyAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAg
IHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisg
ICAgLy8KKyAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2ln
bm1lbnRzLCBjb25kaXRpb25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50
ZXJtZWRpYXRlIHRyZWUuCisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0
YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5v
ZGVzLgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAg
ICAgICBUTm9kZVNldFN0YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVh
cigpOyB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBw
dXNoU2V0LgorICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHku
CisgICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0
b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAg
ICAgICB2b2lkIHBvcFNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNl
dHMuZW1wdHkoKSk7CisgICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAg
ICAgICBub2RlU2V0cy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRv
cCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAg
Ly8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAv
LyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1
c3QgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50
Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0
cy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAg
ICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9w
U2V0LT5lbmQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BT
ZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8g
dG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8g
dG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBu
b3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0
IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9w
U2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
bm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
Y2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkp
CisgICAgICAgICAgICAgICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0
U3RhY2s7CisKKyAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9Owor
CisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBu
b2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2Vz
IG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xh
c3MgVE5vZGVTZXRNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDog
c2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflRO
b2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBp
bnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRp
YXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5k
IHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0
aGUgbmV3IHRvcCBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdN
YWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAg
OiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsg
fQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9Owor
CisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9m
IHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNz
aWdubWVudC4KKyAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVm
dFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8g
YW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQg
Z29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhl
IHRvcCBvZiB0aGUgc2NvcGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3lt
Ym9sLgorICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJl
YWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5
bWJvbC4KKyAgICAvLworICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0cmVlKQorICAgICAgICAgICAg
OiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykKKyAgICAgICAgewor
ICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0U3ltYm9scy5lbXB0
eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJlZTsKKyAgICAgICAgICAgIGlm
IChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9s
cy5wdXNoKCZzdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIH5UTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJT
eW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICB9
CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFRTeW1ib2xTdGFjayYgbGVmdG1vc3RTeW1ib2xz
OworICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7CisgICAgfTsKKworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQorICAgICAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1MZWZ0U3Vi
dHJlZShOVUxMKQorICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtR3Jh
cGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkgeyBp
bnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5vZGUqIG5vZGUp
IGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSopOworICAg
IHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRCaW5h
cnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBUR3JhcGhTeW1ib2wgbUxlZnRT
dWJ0cmVlOworICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVlOworCisgICAgVERlcGVuZGVu
Y3lHcmFwaCogbUdyYXBoOworICAgIFROb2RlU2V0U3RhY2sgbU5vZGVTZXRzOworICAgIFRTeW1i
b2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBH
UkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZmM0ODllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKQEAgLTAsMCArMSw2NSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRl
bnRhdGlvbigpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXREZXB0aCgpOyArK2kpCisg
ICAgICAgIG1TaW5rIDw8ICIgICI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImFyZ3VtZW50ICIgPDwgcGFyYW1ldGVyLT5nZXRB
cmd1bWVudE51bWJlcigpIDw8ICIgb2YgY2FsbCB0byAiCisgICAgICAgICAgPDwgcGFyYW1ldGVy
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2lu
ayA8PCAiZnVuY3Rpb24gY2FsbCAiIDw8ICBmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9u
Q2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCktPmdldFN5
bWJvbCgpIDw8ICIgKHN5bWJvbCBpZDogIgorICAgICAgICAgIDw8IHN5bWJvbC0+Z2V0SW50ZXJt
U3ltYm9sKCktPmdldElkKCkgPDwgIilcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAg
b3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAic2VsZWN0aW9uXG4iOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQor
eworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImxvb3AgY29uZGl0aW9u
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9naWNhbE9wKFRH
cmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgImxvZ2ljYWwgIiA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkgPDwgIlxu
IjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1Ry
ZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1TaW5rIDw8ICJcbiI7CisKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdp
bigpOyBpdGVyICE9IGdyYXBoLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhO
b2RlKiBzeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgbVNpbmsgPDwgIi0tLSBEZXBlbmRlbmN5IGdy
YXBoIHNwYW5uaW5nIHRyZWUgLS0tXG4iOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAg
ICAgc3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbVNpbmsgPDwgIlxuIjsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0NDdkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaApAQCAtMCwwICsxLDMwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisjZGVmaW5lIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
CisKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgOiBwdWJsaWMgVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dChUSW5mb1Np
bmtCYXNlJiBzaW5rKSA6IG1TaW5rKHNpbmspIHt9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVu
dChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5j
dGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOworCisgICAgdm9pZCBv
dXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKK3ByaXZhdGU6
CisgICAgdm9pZCBvdXRwdXRJbmRlbnRhdGlvbigpOworCisgICAgVEluZm9TaW5rQmFzZSYgbVNp
bms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
T1VUUFVUX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTg1NzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vIFRo
ZXNlIG1ldGhvZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFw
aCBhbmQgbWFyayB2aXNpdGVkIG5vZGVzLgorCit2b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJh
dmVyc2VyLT5tYXJrVmlzaXRlZCh0aGlzKTsKK30KKwordm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisKKyAgICBncmFwaFRyYXZl
cnNlci0+aW5jcmVtZW50RGVwdGgoKTsKKworICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdz
IGNoaWxkcmVuLgorICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1EZXBlbmRlbnROb2Rlcy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9k
ZXMuZW5kKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhOb2RlKiBu
b2RlID0gKml0ZXI7CisgICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2Rl
KSkKKyAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKyAgICB9CisK
KyAgICBncmFwaFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKK30KKwordm9pZCBUR3JhcGhB
cmd1bWVudDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7CisgICAgVEdy
YXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFw
aEZ1bmN0aW9uQ2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdy
YXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsK
KyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhp
cyk7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lk
IFRHcmFwaExvb3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJh
dmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaExvZ2lj
YWxPcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCmluZGV4IDI2ZjE0NTcuLjNhNDVkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaApAQCAt
OCw5ICs4LDkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQ7CiBleHRlcm4gaW50IGdsc2xhbmdfaW5p
dGlhbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19maW5h
bGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotZXh0ZXJuIHZvaWQgZ2xzbGFuZ19zY2Fu
KGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4g
aW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRl
eCA5YTAzOTRiLi5iOWEzMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmwKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0zOCw2ICszOCw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBF
UyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KICV7CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFu
Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIK
ICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCkBAIC0xNTksNiArMTYwLDcgQEAgTyAgICAgICAg
ICAgWzAtN10KICJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQogImV4dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJm
bGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAibG9u
ZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJzaG9ydCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTY2LDYgKzE2
OCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQogInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KIAogImlucHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CiAib3V0cHV0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KQEAgLTE3MywxMiArMTc2LDIxIEBAIE8gICAgICAgICAgIFswLTddCiAiaHZlYzIiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjMyIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWM0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzIiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KICJkdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQogImR2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisiZnZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImZ2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJz
YW1wbGVyMUQiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBs
ZXIzRCIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVy
MURTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIy
RFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVy
M0RSZWN0IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRS
ZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogInNpemVv
ZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiY2FzdCIgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE5Myw3ICsyMDUs
NyBAQCBPICAgICAgICAgICBbMC03XQogCiAwW3hYXXtIfSsgICAgICAgICB7IHl5bHZhbC0+bGV4
LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogMHtPfSsg
ICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KLTB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRleHQt
PnJlY292ZXIoKTsgcmV0dXJuIDA7fQorMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCk7IGNvbnRleHQtPnJl
Y292ZXIoKTsgcmV0dXJuIDA7fQoge0R9KyAgICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0g
c3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAoge0R9K3tFfSAg
ICAgICAgICAgeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5
dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KQEAgLTI2MCwxMCArMjcyLDE1IEBAIE8g
ICAgICAgICAgIFswLTddCiAKICUlCiAKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IK
IGV4dGVybiAiQyIgewogLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KICNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgogCitleHRlcm4gaW50IEluaXRQcmVwcm9j
ZXNzb3IoKTsKK2V4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiB2b2lk
IFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7CisKICNkZWZp
bmUgU0VUVVBfQ09OVEVYVChwcCkgXAogICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBh
cnNlQ29udGV4dCopIHBwLT5wQzsgXAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CkBAIC0yNzIsMjYgKzI4OSwyNiBAQCBleHRl
cm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBj
b250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9M
b2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtMzQ2LDg4ICszNjMs
MTUgQEAgdm9pZCBEZWNMaW5lTnVtYmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIg
Kip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGlmICghc3RyY21wKHRva2Vuc1swXSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRv
a2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdt
YSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5
d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21w
KHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5v
cHRpbWl6ZSA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUn
IHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNb
MF0sICJkZWJ1ZyIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3Ry
Y21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihc
IiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwg
Im9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFm
dGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1Zycg
cHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
I2lmZGVmIFBSQUdNQV9UQUJMRQotICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYyBwcmFnbWEKLSAgICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBwcmFnbWEKLSAgICAgICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0
aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4
YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEg
c3ludGF4IGxpa2UKLSAgICAgICAgLy8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQot
ICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2
YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8g
ICAgICAgIAotICAgICAgICBpZiAobnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0s
ICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxl
OjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0
cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0g
PSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChu
dW1Ub2tlbnMgPj0gMikgewotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwot
ICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRl
ciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlm
IChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw
cmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBQUkFHTUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5z
ICE9IDQpIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1
cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAg
Y29udGV4dC0+aGFuZGxlUHJhZ21hRGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vu
c1syXSk7CiB9CiAKLXZvaWQgU3RvcmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihj
b25zdCBjaGFyICpzdHJpbmcpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJp
bmcgc3RyU3JjOwpAQCAtNDQ5LDcxICszOTMsMzMgQEAgdm9pZCBSZXNldFRTdHJpbmcodm9pZCkK
ICAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gIiI7CiB9CiAKLVRCZWhhdmlvciBHZXRCZWhhdmlv
cihjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBpZiAoIXN0cmNtcCgicmVxdWlyZSIsIGJl
aGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7Ci0gICAgZWxzZSBpZiAoIXN0cmNt
cCgiZW5hYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRW5hYmxlOwotICAgIGVs
c2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhE
aXNhYmxlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBiZWhhdmlvcikpCi0gICAgICAg
IHJldHVybiBFQmhXYXJuOwotICAgIGVsc2UgewotICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRT
dHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNf
c3RyKCkpOwotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICB9ICAgICAgICAKLX0KLQog
dm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBj
aGFyKiBiZWhhdmlvcikKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVEJlaGF2aW9y
IGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZpb3IpOwotICAgIFRNYXA8VFN0cmluZywg
VEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7Ci0gICAgVFN0cmluZyBtc2c7Ci0gICAgCi0gICAg
Ly8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lvbgotICAgIGlmICghc3RyY21wKGV4dE5h
bWUsICJhbGwiKSkgewotICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSB8fCBi
ZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
ZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlv
ciIpOyAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVyICE9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRT
dHJpbmcoZXh0TmFtZSkpOwotICAgICAgICBpZiAoaXRlciA9PSBjb250ZXh0LT5leHRlbnNpb25C
ZWhhdmlvci5lbmQoKSkgewotICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewotICAg
ICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVk
IikuY19zdHIoKSk7ICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RUJoRW5hYmxlOgotICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgICAgICAgY2FzZSBF
QmhEaXNhYmxlOgotICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAnIikg
KyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXls
aW5lbm8pOyAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7
Ci0gICAgfQorICAgIGNvbnRleHQtPmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZSh5eWxpbmVubywg
ZXh0TmFtZSwgYmVoYXZpb3IpOwogfQogfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmICAvLyAhQU5H
TEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogaW50IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIGlu
dCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgaW50IGxlbjsKLQotICAgIGlm
ICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAobGVuID49IG1heF9zaXplKSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoImlu
cHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVy
IHVzZXMgUkVKRUNUIik7Ci0KLSAgICBidWZbbGVuXSA9ICcgJzsKLSAgICByZXR1cm4gbGVuKzE7
CisgICAgaW50IGxlbiA9IDA7CisKKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAg
IHBwOjpUb2tlbiB0b2tlbjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNz
b3IubGV4KCZ0b2tlbik7CisgICAgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1Qg
PyAwIDogdG9rZW4udmFsdWUuc2l6ZSgpOworICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1h
eF9zaXplKSkKKyAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsK
KyAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKHRva2VuLmxvY2F0aW9uLmZpbGUsIHRv
a2VuLmxvY2F0aW9uLmxpbmUpLCB5eXNjYW5uZXIpOworI2Vsc2UKKyAgICBsZW4gPSB5eWxleF9D
UFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisKKyAgICBpZiAobGVuID49IG1heF9zaXplKQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5w
dXQgYnVmZmVyIG92ZXJmbG93Iik7CisgICAgZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVm
W2xlbisrXSA9ICcgJzsKKyAgICByZXR1cm4gbGVuOwogfQogCiBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpIHsKQEAgLTU0NCw5ICs0NTAsOSBAQCB2b2lkIHl5ZXJyb3IoVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgc3RydWN0IHl5Z3V0
c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAgIGlm
IChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywg
cmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC01NjUsMjIgKzQ3MSw0MyBAQCBpbnQgZ2xzbGFuZ19maW5h
bGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkg
cmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJu
IHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKwor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAg
ICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2Nh
bihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJl
c3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNv
dXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0Yg
PSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8vIEluaXRp
YWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAg
aWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKKyAg
ICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNo
U3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2Mg
ICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFz
dEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAg
IGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisKKyAg
ICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZp
b3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBmb3Ig
KFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJl
Z2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNz
b3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQorICAgICAg
ICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRpZgorICAg
IH0KKyAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKaW5kZXggZDZjODg2OS4uYWI0YWEyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CkBAIC04NCwyMSArODQsMjEg
QEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFy
KiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5
ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywg
TCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIp
IHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAi
IHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBM
KSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVS
KSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CkBAIC0xNjcsNyArMTY3LDcgQEAg
dmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5z
eW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChz
eW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVj
bGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CkBAIC0x
NzYsNyArMTc2LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBz
eW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMDYs
NyArMjA2LDcgQEAgcHJpbWFyeV9leHByZXNzaW9uCiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVy
ZmxvdyBmb3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoJDEuaSkgPj0g
KDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVn
ZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIzNSw5ICsyMzUsOSBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQg
aW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBpZiAoISQxLT5pc0Fy
cmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgewogICAgICAgICAg
ICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2Yg
J1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90
IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMg
bm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQx
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0KSB7CkBAIC0yNTQsNyArMjU0LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lv
bgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEt
PmlzTWF0cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYm
ICEkMS0+aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rp
b24gb3V0IG9mIHJhbmdlICciIDw8ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7
CkBAIC0yNjcsNyArMjcwLDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkg
Pj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQg
b2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnIiA8PCAkMy0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
IDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxNiw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1Qg
RklFTERfU0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRv
IGFuIGFycmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5l
LCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM2MSw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmll
bGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHll
dCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
bm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0zNzMsNyArMzc5LDcgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNv
bnN0IFRUeXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAg
ICAgICAgIGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC00MDUsMTMgKzQxMSwxMyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwg
JDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBm
aWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBs
ZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIo
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQx
OwogICAgICAgICB9CkBAIC01MDAsOSArNTA2LDEwIEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUt
PmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVu
Y3Rpb24uICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBz
dGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8g
PSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlw
ZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTI2LDcgKzUzMyw3IEBAIGZ1bmN0aW9uX2NhbGwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSku
dHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9
PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24i
LCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRl
cm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAn
b3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5l
KCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQn
IHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTU4LDcgQEAgZnVuY3Rpb25fY2FsbF9v
cl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Np
b24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQz
LmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02
NDcsNyArNjU0LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDog
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0
IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMTQsMTIgQEAgZnVuY3Rp
b25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkp
KTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRS
ZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhl
IHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFt
ZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmlu
ZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmll
cnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDY3LDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCkn
IiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fu
bm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFy
YW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA4MSw3IEBAIGZ1bmN0aW9u
X2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxp
ZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFs
bG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0x
MDk1LDcgKzExMDIsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1l
CiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUg
PT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCci
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTgsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlz
dAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAg
IGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMzA1LDcgQEAg
c2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElG
SUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVu
c2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3Ry
KCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJv
bCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5n
LCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzcxLDcgQEAgc2luZ2xlX2RlY2xh
cmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0NDUsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24K
IC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxl
ID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJy
ZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8g
ZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8v
ICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDU3LDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAg
ICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9y
dGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJy
YXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYm
CiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9y
IGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVh
bGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY2MSw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFy
cmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY3MCw3IEBA
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBw
b3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVS
VF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xOTY2LDE0ICsxOTczLDE0IEBA
IGZvcl9yZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQKICAgICA6IENPTlRJTlVFIFNFTUlD
T0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7
CiAgICAgfQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk4OCw3IEBAIGp1bXBfc3RhdGVtZW50CiAg
ICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1
cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4i
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTE5ODksMTAgKzE5OTYsMTAgQEAganVtcF9zdGF0ZW1lbnQKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxpbmUpOwogICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYg
KCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3Qg
bWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0
dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMDM3LDcgKzIwNDQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAv
LwogICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4K
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVu
Y3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFk
eSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZp
bmVkKCk7CkBAIC0yMDQ3LDcgKzIwNTQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAg
IC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewogICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJh
bWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBh
cmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAt
MjA3OSw3ICsyMDg2LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAg
ICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMTYsOSArMjEyMyw4IEBAIGZ1bmN0aW9uX2Rl
ZmluaXRpb24KIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBk
ZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBp
bmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJz
ZSB0cmVlCi0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNv
bnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoJDMgJiYg
JDMtPmdldEFzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0RW5kTGluZSgkMy0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0RW5kTGluZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCmlu
ZGV4IDU5YjcyOTkuLmQyOWQ5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3
ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zODMsOCArMzgz
LDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19idWZfcCA9
IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRfT0ZfQlVG
RkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAogICAg
YnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwpA
QCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2ludDMyX3Qg
eXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAgMTM2LCAg
MTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAgICAgMTM1
LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAgIDkwLAot
ICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5LCAgMTIx
LCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAgMTE2LCAg
MTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5LCAgIDk5
LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAgICAwLCAg
ICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0LAotICAg
ICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMsCi0gICAg
ICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAxMDQsICAg
NTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAgMCwgICA5
NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4NywgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1MywgICA5
MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAgOSwgICAz
MywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAzNiwK
LSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0MiwgICA0
MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA4Mywg
ICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAgIDgxLCAg
IDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1LCAgIDkw
LCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAgIDkwLAot
ICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYxLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAgIDY0LCAg
IDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAgIDkwLCAg
IDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDU0
LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0LAotCi0g
ICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAgOTAsICAg
NDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1MywgIDE1
MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwgIDEzMCwg
IDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0NSwgIDEz
MiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAgICAgIDE1
MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwgIDExNiwK
KyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEwNCwgIDEw
MCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwgIDEyNSwg
IDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
MTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAwLCAgICAw
LCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAgIDk4LCAg
IDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAgIDAsICAx
MDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgsCisgICAg
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAgMzQsICAg
MzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
NTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMzYs
ICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAgNDIsICAg
NDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA4
MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwKKyAgICAg
ICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5OCwgICA5
OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5NywgICA5OCwg
ICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2NiwgICA2
MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1NywgICA5OCwg
ICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwgICAzMSwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwgICA2Nywg
ICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2LCAgIDk2
LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDQ2
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAgIDk4LAor
ICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4LCAgIDkx
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAgIDkzLCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAx
MiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwgICAxNiwg
ICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAyNCwgICAy
NSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywKLSAgICAg
ICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAz
MSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzNSwg
ICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAgMSwgICAz
OSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3
LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAgIDMxLCAg
IDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYxLCAgIDYy
LCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0
LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAg
IDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5
LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisgICAgICAg
NTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEs
CisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0NzgsMjE0
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
NjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywKLSAg
ICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgNCwgICAg
NCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDY0XSA9
CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAgIDAsICA2
MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2MjgsICA2Mjgs
ICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAxNjMsICA1
OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2MjgsICA2Mjgs
ICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0gICAgICAx
MzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQsICAxODEs
Ci0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2MjgsICA2
MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2MjgsICAg
IDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAsICA2Mjgs
ICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAgIDAsICA2
MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAgICAgIDU2
OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwgIDU1MCwK
LSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0OCwgICAg
MCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwgIDUyOSwg
IDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5MiwgIDUz
MCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywgIDUyOSwg
IDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAgMCwgIDMy
MiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDUxNCwg
IDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUyMCwKLSAg
ICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwgIDUxMSwg
IDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUwMSwgIDUw
NCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4NiwgIDQ4Mywg
IDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAgNDcyLCAg
NDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0LCAgNDY5
LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAgMzcyLCAg
Mzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0LAotICAg
ICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAgNDYzLCAg
NDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1LCAgNDQ0
LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2LCAgNDQw
LCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAgICAwLCAg
NDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAwLCAgICAw
LCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAg
ICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAwLCAgNDE4
LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAgIDAsICAg
IDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUsICA0MTgs
ICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0MTMsICA0
MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAsICAzODks
ICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0gICAgICAz
ODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAzODUsICAz
ODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAsICAgIDAs
ICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAzNjQsICAg
IDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgsICAgIDAs
ICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAgICAgIDIz
OCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4NiwgIDE3MywK
LSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQxOSwgIDQy
MywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAgNjgwLCAg
NjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgxLCAgNjUz
LCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAgNjUxLCAg
NjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgxLCAgMTI4
LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAgMTczLCAg
MTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0LAorICAg
ICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAgICAwLCAg
NjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAgNjgxLCAg
NjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2MjEsICA2
MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIsCisgICAg
ICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAgIDAsICAy
MTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIsICA1OTYs
ICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1NzcsICA1
ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1NjksICA1ODEs
ICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAgIDAsICAz
NDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAsICA1NjYs
ICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisgICAgICA1
NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUsICAgIDAs
CisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1MzksICA1
NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYsICA1Mzcs
ICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywgIDUzNywg
IDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUyOSwgIDI4
MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywgIDM4MSwg
IDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAgICAgIDUw
OCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwgIDUwMywK
KyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUwMCwgIDM2
NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUwMCwgIDQ5
NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwgIDQ4MCwg
IDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4MywgIDQ4
MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAgIDQ4Mywg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2NiwKKwor
ICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAgICAwLCAg
ICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYwLCAgNDY1
LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAgNDYxLCAg
NDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAwLCAgNDQ2
LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAgNDQ5LCAg
ICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAwLAorICAg
ICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIwLCAgNDMy
LCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAgNDI3LCAg
NDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIzLCAgNDIy
LCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAsICA0MzEs
ICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQsCisgICAg
ICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAzOTEsICAz
ODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcsICAzMDQs
ICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAyNjIsICAg
IDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTksICAxMTMs
ICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAxNjEKICAg
ICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICA0
MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAgNDU4LCAg
ICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0
NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAgIDAsICA0
NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTksICAg
MjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjQs
ICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAgMzAsCi0g
ICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQs
ICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAg
MzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAs
ICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAgNTUsICAg
NTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEsICAgNjAs
ICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAgMjMsICAg
MjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsCisgICAg
ICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAg
MzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIs
ICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAg
NTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQsICAgNTUs
ICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAgOTEsICAg
NjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAgICAgICAg
IDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
CiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAgICAgICA2
NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA5MywK
LSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEyMCwgICA2
OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwgICA3Nywg
ICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3
OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4NSwg
ICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQyNCwgICA4
MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAgICAgMTAz
LCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAgMTA1LAot
ICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5LCAgNDIy
LCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAgMTM4LCAg
MTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5LCAgMTg0
LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAgNDE4LCAg
MTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0
LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAgMjMwLCAg
NDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5LAotICAg
ICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAgMjgyLCAg
NDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAgNDEyLCAg
MTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAsICAgNzgs
ICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAyMTEsICAz
MDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEsCi0gICAg
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcsICAyMjEs
ICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTQs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAsICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0gICAgICAy
MjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYsICAzMTcs
Ci0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5NSwg
IDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1OCwgICA1
OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1MiwgIDM4OSwg
IDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4MywgIDM4
MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwgIDM3NCwg
IDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAgICAgIDM2
NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwK
LSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0
NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwg
IDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMz
MCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwg
IDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAgMzExLCAg
MzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAgICAgMjkz
LCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAgMjc4LAot
ICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3
LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3
LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LCAg
MjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMxLCAgMjI4
LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAgMjE0LCAg
MjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAxLAotICAg
ICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAx
NTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUsICAgODks
ICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUs
ICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcwLCAgIDcy
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDkzLCAg
MTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIwLCAgIDY4
LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAorICAgICAg
IDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgw
LAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3LCAgMTQz
LCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQsICAxMDIs
ICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAxMTYsICAx
MTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcsICAxNDks
ICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisgICAgICAx
MzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAsICAxOTIs
CisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAxOTMsICA0
NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0NTIsICAx
ODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODksICAxNTUs
ICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAyODYsICAy
ODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzks
ICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAgODAsCisK
KyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1NiwgICA4MSwg
IDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgICA4
MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0NiwgIDIy
MiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAgIDIyMywg
IDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1NCwKKyAg
ICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwgIDQ0Miwg
IDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwgIDQzOCwg
IDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAg
ICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAgNDA1LCAg
NDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4
LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUzLCAgNDI0
LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAgNDE0LCAg
NDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAxLCAgNDAw
LCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAorICAgICAg
MzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzgy
LAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAg
MzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAz
NjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcs
ICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAzNDksICAz
NDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEsICAzNDAs
ICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisgICAgICAz
MzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAzMTks
CisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsICAyOTAs
ICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAyNzcsICAy
NzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjksICAyNjgs
ICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAgICAgIDI0
OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwK
KyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIyOSwgIDIy
OCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIw
MSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MSwg
IDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3NiwgIDE3
NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAgIDE2Nywg
IDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1MCwKKyAg
ICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwg
IDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAwLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0g
ICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiAr
NzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAsICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAgMzQsICAg
MzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUsICAgMzUs
ICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0gICAgICAg
MjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMsICAgMjMs
Ci0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAgNDEsICA0
MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYsICAgNTUs
ICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwgICAzNywg
ICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0OSwgICAz
OSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwgIDQyMCwg
ICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAgICAgIDEz
NSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwgIDEyMCwK
LSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3NCwgICA3
NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5MiwgIDE5
MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3OCwgIDQx
MCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwg
IDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEyMiwKLQot
ICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0LCAgMjM0
LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4LCAgMTUx
LCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgz
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAgMzkzLCAg
MTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LAotICAg
ICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEsICAzOTEs
ICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAzNzYsICAz
NzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0MjcsCi0gICAg
ICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAzNjksICAz
NjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMsICAzNTIs
ICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAz
NDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAs
ICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAzMjEsICAz
MjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUsICAyOTQs
ICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0gICAgICAy
NzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQs
Ci0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTAsICAy
NDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIz
NywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwgIDIyMywg
IDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIwOSwgIDIw
OCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwg
IDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAgICAgIDE5
MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwK
LSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3
MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2Miwg
IDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEzOCwgIDEz
NywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwg
IDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDExNywgIDEx
NiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAgICAgMTA4
LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LAot
ICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4
LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAgICA3LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICAgNSwg
ICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAg
ICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAzMywgICA0
MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwgICA1MSwg
IDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAgNDUzLCAg
IDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2LAorICAg
ICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAgIDM5LCAg
IDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5LCAgIDUw
LCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAgIDQ3LCAg
IDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5LCAgIDQ5
LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4LCAgIDc4
LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAorICAgICAg
MTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0LCAgIDc0
LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAgIDc5LCAg
IDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4LCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzksICAxNTYs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAgODAsICAg
ODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisgICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjksICA0NDMs
CisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0MzksICA0Mzgs
ICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAy
NDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUsICA0MzQs
ICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAy
NDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAgICAxNTcs
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCisK
KyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1NSwgIDI1
NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwg
IDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4OCwgIDQ1
OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAgIDQ2Miwg
IDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwKKyAg
ICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5MiwgIDM4OSwg
IDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3NywgIDM3
NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2MiwgIDM1OSwg
IDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAxLAorICAg
ICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAgMjgyLCAg
MjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcx
LCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAg
MjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4LCAgMjQ0
LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAgMjMyLCAg
MjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2LCAgMjE1
LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAorICAgICAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2
LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAg
MTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAxNzgsICAx
NzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAxNDUsICAx
NDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYsICAxMzQs
ICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisgICAgICAx
MjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMs
CisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAx
MDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUs
ICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAgNDAsICAg
MjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywg
dHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwgMCwgMCwg
MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
CkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVf
Y2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAw
LCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChn
bHNsYW5nX2xleC5jcHApLgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIgogCkBAIC05NDQsNyArOTY2LDcgQEAgc3RhdGljIGludCBpbnB1dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lz
X2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJeXlfc2l6ZV90IG47
IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZb
bl0gPSAoY2hhcikgYzsgXApAQCAtMTA4NiwxMyArMTEwOCwxMyBAQCB5eV9tYXRjaDoKIAkJCXdo
aWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJy
ZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CiAJCQkJfQogCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5
X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDI1ICk7CisJCXdoaWxl
ICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NTggKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOwogCkBAIC0xMTAzLDcgKzExMjUsNyBAQCB5eV9maW5kX2FjdGlvbjoKIAogCQlpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKIAkJCXsKLQkJCXl5X3NpemVfdCB5eWw7CisJCQlpbnQgeXlsOwogCQkJZm9yICggeXls
ID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCiAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4n
ICkKIAkJCQkJICAgCkBAIC0xNDgxLDIyMCArMTUwMywyNTIgQEAgWVlfUlVMRV9TRVRVUAogCVlZ
X0JSRUFLCiBjYXNlIDkwOgogWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKIHsK
ICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAogICAgcmV0
dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKIH0KIAlZWV9CUkVBSwotY2FzZSA5MToKK2Nhc2Ug
OTk6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAw
KTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDkyOgorY2FzZSAxMDA6
CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsg
cmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDkzOgorY2FzZSAxMDE6CiBZ
WV9SVUxFX1NFVFVQCi17IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
K3sgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRl
eHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIAlZWV9CUkVBSwotY2FzZSA5NDoK
K2Nhc2UgMTAyOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NToKK2Nh
c2UgMTAzOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVB
SwotY2FzZSA5NjoKK2Nhc2UgMTA0OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFO
VCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NzoKK2Nhc2UgMTA1OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1
cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5ODoKK2Nhc2UgMTA2OgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKEFERF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTk6
CitjYXNlIDEwNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihTVUJfQVNTSUdOKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDEwMDoKK2Nhc2UgMTA4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE1V
TF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAxOgorY2FzZSAxMDk6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oRElWX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDI6CitjYXNl
IDExMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNT0RfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMzoKK2Nhc2UgMTExOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKExFRlRfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNDoKK2Nhc2UgMTEyOgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDU6CitjYXNlIDEx
MzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBTkRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEwNjoKK2Nhc2UgMTE0OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhPUl9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA3OgorY2FzZSAxMTU6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwODoKK2Nhc2UgMTE2OgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKElOQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDk6Citj
YXNlIDExNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihERUNfT1ApOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTEwOgorY2FzZSAxMTg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX09QKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDExMToKK2Nhc2UgMTE5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMjoKK2Nhc2UgMTIwOgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKFhPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTM6CitjYXNlIDEy
MToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MTQ6CitjYXNlIDEyMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihHRV9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTU6CitjYXNlIDEyMzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihFUV9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTY6CitjYXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihORV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTc6CitjYXNlIDEyNToKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihMRUZUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExODoKK2Nh
c2UgMTI2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFJJR0hUX09QKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDExOToKK2Nhc2UgMTI3OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRl
clR5cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjA6
CitjYXNlIDEyODoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMToKK2Nhc2UgMTI5
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTIyOgorY2FzZSAxMzA6CiBZWV9SVUxFX1NFVFVQCiB7IGlmIChjb250ZXh0LT5pblR5cGVQ
YXJlbikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjM6CitjYXNlIDEzMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKENP
TE9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNDoKK2Nhc2UgMTMyOgogWVlfUlVMRV9TRVRVUAog
eyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDEyNToKK2Nhc2UgMTMzOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhB
ZnRlclR5cGUgPSBmYWxzZTsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVG
VF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjY6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEyNzoKK2Nhc2UgMTM1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyODoKK2Nhc2UgMTM2OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
Mjk6CitjYXNlIDEzNzoKIFlZX1JVTEVfU0VUVVAKIHsgQkVHSU4oRklFTERTKTsgIHJldHVybihE
T1QpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMwOgorY2FzZSAxMzg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihCQU5HKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMToKK2Nhc2UgMTM5OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oREFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzI6CitjYXNlIDE0
MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFRJTERFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
MzoKK2Nhc2UgMTQxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUExVUyk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzQ6CitjYXNlIDE0MjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNUQVIpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTM1OgorY2FzZSAxNDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihTTEFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzY6CitjYXNlIDE0NDoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuKFBFUkNFTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM3OgorY2FzZSAxNDU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzODoKK2Nhc2UgMTQ2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQU5HTEUpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTM5OgorY2FzZSAxNDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihWRVJUSUNBTF9CQVIpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQwOgorY2FzZSAxNDg6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybihDQVJFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDE6CitjYXNl
IDE0OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKEFNUEVSU0FORCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxNDI6CitjYXNlIDE1MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFFVRVNUSU9OKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDE0MzoKK2Nhc2UgMTUxOgogWVlfUlVMRV9TRVRVUAogeyAKICAg
ICBCRUdJTihJTklUSUFMKTsKQEAgLTE3MDIsMTIgKzE3NTYsMTIgQEAgWVlfUlVMRV9TRVRVUAog
ICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJT047CiB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ0OgorY2Fz
ZSAxNTI6CiBZWV9SVUxFX1NFVFVQCiB7fQogCVlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUg
MTQ1IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMTUzOgorLyogcnVsZSAxNTMgY2FuIG1hdGNoIGVv
bCAqLwogWVlfUlVMRV9TRVRVUAogeyAgfQogCVlZX0JSRUFLCkBAIC0xNzE2LDExICsxNzcwLDEx
IEBAIGNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgogY2FzZSBZWV9TVEFURV9FT0YoRklFTERT
KToKIHsgY29udGV4dC0+QWZ0ZXJFT0YgPSB0cnVlOyB5eXRlcm1pbmF0ZSgpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQ2OgorY2FzZSAxNTQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPndhcm5p
bmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxNDc6CitjYXNlIDE1NToKIFlZX1JVTEVfU0VUVVAKIEVDSE87CiAJWVlf
QlJFQUsKQEAgLTIwMTYsNyArMjA3MCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVy
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQog
CQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKQEAgLTIwNDUsMTEgKzIwOTksMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkg
KQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5
X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFt
ID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0yODk0LDEwICsyOTQ4LDE1IEBAIHZvaWQg
eXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiAjZGVmaW5lIFlZVEFC
TEVTX05BTUUgInl5dGFibGVzIgogCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBl
eHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vz
c29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQ
cmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5l
IFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJz
ZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjkwNiwyNiArMjk2NSwyNiBAQCBleHRl
cm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBj
b250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9M
b2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtMjk4MCw4OCArMzAz
OSwxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIoKQogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hh
ciAqKnRva2VucywgaW50IG51bVRva2VucykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewotICAgICAgICBpZiAobnVt
VG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJh
Z21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBr
ZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4
dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
Lm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6
ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vu
c1swXSwgImRlYnVnIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
KFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJd
LCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAg
ICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQg
YWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewot
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVn
JyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0
aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9u
IGFib3V0IHByYWdtYQotICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21h
IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4g
RXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMg
YSBzeW50YXggbGlrZQotICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUp
Ci0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdt
YXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAv
LyAgICAgICAgCi0gICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sx
XSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFi
bGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChU
U3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUu
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0g
XSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYg
KG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxl
ID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7
Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBp
dGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAg
aWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5z
ZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQotICAgIH0KKworICAgIGlmIChudW1Ub2tl
bnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJl
dHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAg
ICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9r
ZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3Ry
KGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0
cmluZyBzdHJTcmM7CkBAIC0zMDgzLDcxICszMDY5LDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZv
aWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVo
YXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUi
LCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFz
dHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAg
ICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAg
ICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQi
KS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19
Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29u
c3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhh
dmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJp
bmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAot
ICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChl
eHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUg
fHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVo
YXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRl
ciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAg
ICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmlu
ZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5z
aW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
LSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBv
cnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNh
c2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24g
JyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCks
IHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9y
VmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5l
bm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8g
IUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVm
LCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAg
ICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nh
bm5lciB1c2VzIFJFSkVDVCIpOworICAgIGludCBsZW4gPSAwOworCisjaWYgQU5HTEVfVVNFX05F
V19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRfZXh0cmEoeXlz
Y2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxlbiA9IHRva2VuLnR5cGUg
PT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUoKTsKKyAgICBpZiAoKGxl
biA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNweShidWYsIHRva2VuLnZh
bHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tl
bi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSx5eXNjYW5uZXIpOworI2Vsc2UK
KyAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYgIC8vIEFOR0xFX1VT
RV9ORVdfUFJFUFJPQ0VTU09SCiAKLSAgICBidWZbbGVuXSA9ICcgJzsKLSAgICByZXR1cm4gbGVu
KzE7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklu
cHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1
ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKSB7CkBAIC0zMTc4LDkgKzMxMjYsOSBAQCB2b2lkIHl5ZXJyb3IoVFBh
cnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAg
IGlmIChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC0zMTk5LDIyICszMTQ3LDQzIEBAIGludCBnbHNsYW5n
X2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICBpZiAoc2Nhbm5lciA9PSBO
VUxMKSByZXR1cm4gMDsKICAgICAKICAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICBy
ZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsKKyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgRmluYWxpemVQcmVwcm9j
ZXNzb3IoKTsKKyNlbmRpZgorICAgIHJldHVybiAwOwogfQogCi12b2lkIGdsc2xhbmdfc2Nhbihp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10s
Ci0gICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFu
Z19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAg
IHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNv
ZGVTb3VyY2VMb2MoMCwgMSksY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJF
T0YgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8vIElu
aXRpYWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisg
ICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkK
KyAgICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdo
aWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFy
Z2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+
cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOwor
ICAgIGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisK
KyAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBm
b3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9y
LmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsK
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVwcm9j
ZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQorICAg
ICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRpZgor
ICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggMzdhMGYwNS4uZDU4NTM2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
dGFiLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBH
TlUgQmlzb24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjQuMi4gICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2Mt
bGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAy
MDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0
IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUK
KyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAo
YXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCkBAIC0yOSw3ICsyNyw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBj
YXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxl
cyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNl
IHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwg
ZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAg
ICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ1LDcgQEAKICNkZWZpbmUg
WVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJ
T04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKIAogLyogU2tlbGV0b24g
bmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTEgKzUz
LDY3IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMQogCisvKiBQdXNo
IHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLwor
I2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxT
UF9ORUVERUQgMAogCiAKIAorLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0
aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9y
ZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0Nf
VkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRh
YmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVy
CisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmlu
ZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2Vz
LiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisj
IGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9T
RSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYg
WVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCiAvKiBU
b2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAg
LTE2MSwxNTYgKzIxNSwxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAgfTsKICNlbmRpZgot
LyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmluZSBISUdIX1BSRUNJ
U0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZpbmUgTE9XX1BSRUNJ
U0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRSSUJVVEUgMjYzCi0j
ZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUKLSNkZWZpbmUgRkxP
QVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJSRUFLIDI2OAotI2Rl
ZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVMU0UgMjcxCi0jZGVm
aW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQgMjc0Ci0jZGVmaW5l
IFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMzIDI3NwotI2RlZmlu
ZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMzIDI4MAotI2RlZmlu
ZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAyODMKLSNkZWZpbmUg
VkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklYMyAyODYKLSNkZWZp
bmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUgT1VUX1FVQUwgMjg5
Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkxCi0jZGVmaW5lIFZB
UllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9UWVBFIDI5NAotI2Rl
ZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmluZSBTQU1QTEVSQ1VC
RSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVmaW5lIFNBTVBMRVIy
RFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZUEVfTkFNRSAzMDEK
LSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RBTlQgMzAzCi0jZGVm
aW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwNQotI2RlZmlu
ZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUgSU5DX09QIDMwOAot
I2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmluZSBHRV9PUCAzMTEK
LSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmluZSBBTkRfT1AgMzE0
Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVmaW5lIE1VTF9BU1NJ
R04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9BU1NJR04gMzE5Ci0j
ZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMyMQotI2RlZmluZSBS
SUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVmaW5lIFhPUl9BU1NJ
R04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FTU0lHTiAzMjYKLSNk
ZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4Ci0jZGVmaW5lIExF
RlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNkZWZpbmUgTEVGVF9C
UkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERPVCAzMzMKLSNkZWZp
bmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVBTCAzMzYKLSNkZWZp
bmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBEQVNIIDMzOQotI2Rl
ZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RBUiAzNDIKLSNkZWZp
bmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExFRlRfQU5HTEUgMzQ1
Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ3Ci0jZGVm
aW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5lIFFVRVNUSU9OIDM1
MAotCiAKIAogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAg
Ki8KLQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9y
cyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIK
LSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQotCi0v
KiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVH
IDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNp
ZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZ
WUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5k
aWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9U
QUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZ
WVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZ
U1RZUEUKLQogeworCisKICAgICBzdHJ1Y3QgewogICAgICAgICBUU291cmNlTG9jIGxpbmU7CiAg
ICAgICAgIHVuaW9uIHsKQEAgLTM0MCwxNyArMjUyLDE2IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQ
RQogICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKICAgICAgICAgfTsKICAgICB9IGlu
dGVybTsKLX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30g
WVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBl
IFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5k
aWYKIAogCi0KIC8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAg
Ki8KIAogCkBAIC0zNjAsMjggKzI3MSwyNiBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZSQUdfVkVSVF9P
TkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhf
U0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25s
eSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0K
IAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisg
ICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9u
bHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9
CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVy
VHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
TCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBc
CisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0g
IFwKIH0KIAogCi0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCiAKICNpZmRlZiBzaG9ydAog
IyB1bmRlZiBzaG9ydApAQCAtNDU2LDE0ICszNjUsMTQgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDE2OwogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0
YXRpYyBpbnQKLVlZSUQgKGludCBpKQorWVlJRCAoaW50IHl5aSkKICNlbHNlCiBzdGF0aWMgaW50
Ci1ZWUlEIChpKQotICAgIGludCBpOworWVlJRCAoeXlpKQorICAgIGludCB5eWk7CiAjZW5kaWYK
IHsKLSAgcmV0dXJuIGk7CisgIHJldHVybiB5eWk7CiB9CiAjZW5kaWYKIApAQCAtNTQ0LDkgKzQ1
Myw5IEBAIHZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5
dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBv
bmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBf
TUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC01ODAsMTIgKzQ4OSwxMiBA
QCB1bmlvbiB5eWFsbG9jCiAgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZl
cyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEg
cHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisjIGRlZmluZSBZWVNUQUNLX1JF
TE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAogICAgIGRvCQkJCQkJCQkJXAogICAgICAg
ewkJCQkJCQkJCVwKIAlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0
ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJ
CQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwK
KwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCiAJeXluZXdieXRlcyA9IHl5c3Rh
Y2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAogCXl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKICAgICAgIH0JCQkJCQkJCQlc
CkBAIC03NDksMjYgKzY1OCwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2NSwgICAxNjUsICAgMjAwLCAgIDIwMywgICAyMTYsICAgMjIxLCAgIDIyNiwgICAyMzIsICAg
MjM1LAotICAgICAzMDgsICAgMzExLCAgIDQyMCwgICA0MzAsICAgNDQzLCAgIDQ1MSwgICA1NTAs
ICAgNTUzLCAgIDU2MSwgICA1NjUsCi0gICAgIDU3MiwgICA1NzYsICAgNTgzLCAgIDU4OSwgICA1
OTgsICAgNjA2LCAgIDY2MSwgICA2NjgsICAgNjc4LCAgIDY4MSwKLSAgICAgNjkxLCAgIDcwMSwg
ICA3MjIsICAgNzIzLCAgIDcyNCwgICA3MjksICAgNzMwLCAgIDczOSwgICA3NTEsICAgNzUyLAot
ICAgICA3NjAsICAgNzcxLCAgIDc3NSwgICA3NzYsICAgNzg2LCAgIDc5NiwgICA4MDYsICAgODE5
LCAgIDgyMCwgICA4MzAsCi0gICAgIDg0MywgICA4NDcsICAgODUxLCAgIDg1NSwgICA4NTYsICAg
ODY5LCAgIDg3MCwgICA4ODMsICAgODg0LCAgIDg5NywKLSAgICAgODk4LCAgIDkxNSwgICA5MTYs
ICAgOTI5LCAgIDkzMCwgICA5MzEsICAgOTMyLCAgIDkzMywgICA5MzcsICAgOTQwLAotICAgICA5
NTEsICAgOTU5LCAgIDk4NiwgICA5OTEsICAgOTk4LCAgMTAzNiwgIDEwMzksICAxMDQ2LCAgMTA1
NCwgIDEwNzUsCi0gICAgMTA5NiwgIDExMDcsICAxMTM2LCAgMTE0MSwgIDExNTEsICAxMTU2LCAg
MTE2NiwgIDExNjksICAxMTcyLCAgMTE3NSwKLSAgICAxMTgxLCAgMTE4OCwgIDExOTEsICAxMjEz
LCAgMTIzMSwgIDEyNTUsICAxMjc4LCAgMTI4MiwgIDEzMDAsICAxMzA4LAotICAgIDEzNDAsICAx
MzYwLCAgMTQ0OSwgIDE0NTgsICAxNDgxLCAgMTQ4NCwgIDE0OTAsICAxNDk4LCAgMTUwNiwgIDE1
MTQsCi0gICAgMTUyNCwgIDE1MzEsICAxNTM0LCAgMTUzNywgIDE1NDMsICAxNTQ2LCAgMTU2MSwg
IDE1NjUsICAxNTY5LCAgMTU3MywKLSAgICAxNTgyLCAgMTU4NywgIDE1OTIsICAxNTk3LCAgMTYw
MiwgIDE2MDcsICAxNjEyLCAgMTYxNywgIDE2MjIsICAxNjI3LAotICAgIDE2MzMsICAxNjM5LCAg
MTY0NSwgIDE2NTAsICAxNjU1LCAgMTY2NCwgIDE2NzMsICAxNjc4LCAgMTY5MSwgIDE2OTEsCi0g
ICAgMTcwNSwgIDE3MDUsICAxNzE0LCAgMTcxNywgIDE3MzIsICAxNzY4LCAgMTc3MiwgIDE3Nzgs
ICAxNzg2LCAgMTgwMiwKLSAgICAxODA2LCAgMTgxMCwgIDE4MTEsICAxODE3LCAgMTgxOCwgIDE4
MTksICAxODIwLCAgMTgyMSwgIDE4MjUsICAxODI2LAotICAgIDE4MjYsICAxODI2LCAgMTgzNiwg
IDE4MzcsICAxODQxLCAgMTg0MSwgIDE4NDIsICAxODQyLCAgMTg0NywgIDE4NTAsCi0gICAgMTg2
MCwgIDE4NjMsICAxODY5LCAgMTg3MCwgIDE4NzQsICAxODgyLCAgMTg4NiwgIDE4OTYsICAxOTAx
LCAgMTkxOCwKLSAgICAxOTE4LCAgMTkyMywgIDE5MjMsICAxOTMwLCAgMTkzMCwgIDE5MzgsICAx
OTQxLCAgMTk0NywgIDE5NTAsICAxOTU2LAotICAgIDE5NjAsICAxOTY3LCAgMTk3NCwgIDE5ODEs
ICAxOTg4LCAgMTk5OSwgIDIwMDgsICAyMDEyLCAgMjAxOSwgIDIwMjIsCi0gICAgMjAyOCwgIDIw
MjgKKyAgICAgMzE0LCAgIDMxNywgICA0MjYsICAgNDM2LCAgIDQ0OSwgICA0NTcsICAgNTU3LCAg
IDU2MCwgICA1NjgsICAgNTcyLAorICAgICA1NzksICAgNTgzLCAgIDU5MCwgICA1OTYsICAgNjA1
LCAgIDYxMywgICA2NjgsICAgNjc1LCAgIDY4NSwgICA2ODgsCisgICAgIDY5OCwgICA3MDgsICAg
NzI5LCAgIDczMCwgICA3MzEsICAgNzM2LCAgIDczNywgICA3NDYsICAgNzU4LCAgIDc1OSwKKyAg
ICAgNzY3LCAgIDc3OCwgICA3ODIsICAgNzgzLCAgIDc5MywgICA4MDMsICAgODEzLCAgIDgyNiwg
ICA4MjcsICAgODM3LAorICAgICA4NTAsICAgODU0LCAgIDg1OCwgICA4NjIsICAgODYzLCAgIDg3
NiwgICA4NzcsICAgODkwLCAgIDg5MSwgICA5MDQsCisgICAgIDkwNSwgICA5MjIsICAgOTIzLCAg
IDkzNiwgICA5MzcsICAgOTM4LCAgIDkzOSwgICA5NDAsICAgOTQ0LCAgIDk0NywKKyAgICAgOTU4
LCAgIDk2NiwgICA5OTMsICAgOTk4LCAgMTAwNSwgIDEwNDMsICAxMDQ2LCAgMTA1MywgIDEwNjEs
ICAxMDgyLAorICAgIDExMDMsICAxMTE0LCAgMTE0MywgIDExNDgsICAxMTU4LCAgMTE2MywgIDEx
NzMsICAxMTc2LCAgMTE3OSwgIDExODIsCisgICAgMTE4OCwgIDExOTUsICAxMTk4LCAgMTIyMCwg
IDEyMzgsICAxMjYyLCAgMTI4NSwgIDEyODksICAxMzA3LCAgMTMxNSwKKyAgICAxMzQ3LCAgMTM2
NywgIDE0NTYsICAxNDY1LCAgMTQ4OCwgIDE0OTEsICAxNDk3LCAgMTUwNSwgIDE1MTMsICAxNTIx
LAorICAgIDE1MzEsICAxNTM4LCAgMTU0MSwgIDE1NDQsICAxNTUwLCAgMTU1MywgIDE1NjgsICAx
NTcyLCAgMTU3NiwgIDE1ODAsCisgICAgMTU4OSwgIDE1OTQsICAxNTk5LCAgMTYwNCwgIDE2MDks
ICAxNjE0LCAgMTYxOSwgIDE2MjQsICAxNjI5LCAgMTYzNCwKKyAgICAxNjQwLCAgMTY0NiwgIDE2
NTIsICAxNjU3LCAgMTY2MiwgIDE2NzEsICAxNjgwLCAgMTY4NSwgIDE2OTgsICAxNjk4LAorICAg
IDE3MTIsICAxNzEyLCAgMTcyMSwgIDE3MjQsICAxNzM5LCAgMTc3NSwgIDE3NzksICAxNzg1LCAg
MTc5MywgIDE4MDksCisgICAgMTgxMywgIDE4MTcsICAxODE4LCAgMTgyNCwgIDE4MjUsICAxODI2
LCAgMTgyNywgIDE4MjgsICAxODMyLCAgMTgzMywKKyAgICAxODMzLCAgMTgzMywgIDE4NDMsICAx
ODQ0LCAgMTg0OCwgIDE4NDgsICAxODQ5LCAgMTg0OSwgIDE4NTQsICAxODU3LAorICAgIDE4Njcs
ICAxODcwLCAgMTg3NiwgIDE4NzcsICAxODgxLCAgMTg4OSwgIDE4OTMsICAxOTAzLCAgMTkwOCwg
IDE5MjUsCisgICAgMTkyNSwgIDE5MzAsICAxOTMwLCAgMTkzNywgIDE5MzcsICAxOTQ1LCAgMTk0
OCwgIDE5NTQsICAxOTU3LCAgMTk2MywKKyAgICAxOTY3LCAgMTk3NCwgIDE5ODEsICAxOTg4LCAg
MTk5NSwgIDIwMDYsICAyMDE1LCAgMjAxOSwgIDIwMjYsICAyMDI5LAorICAgIDIwMzUsICAyMDM1
CiB9OwogI2VuZGlmCiAKQEAgLTgxMiwxNiArNzIxLDE2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpj
b25zdCB5eXRuYW1lW10gPQogICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xh
cmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKICAgInR5cGVfcXVhbGlmaWVyIiwgInR5
cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAogICAidHlwZV9zcGVjaWZpZXJf
bm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwK
LSAgIkAxIiwgIkAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJh
dGlvbiIsCisgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKICAgImRlY2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0
ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCi0gICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiQDMi
LCAiQDQiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJzdGF0ZW1lbnRfd2l0aF9zY29w
ZSIsICJANSIsICJANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgImNv
bXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAiJEA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUi
LAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiJEA1IiwgIiRANiIsICJjb21wb3VuZF9zdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIiwKICAgInN0YXRlbWVudF9saXN0IiwgImV4cHJlc3Npb25fc3Rh
dGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAotICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVt
ZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIkA3IiwKLSAgIkA4Iiwg
IkA5IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3Rh
dGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICIkQDciLAorICAiJEA4IiwgIiRAOSIsICJmb3JfaW5pdF9zdGF0
ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCiAgICJqdW1wX3N0
YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKLSAg
ImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiQDEwIiwgMAorICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIs
ICIkQDEwIiwgMAogfTsKICNlbmRpZgogCkBAIC0xMzQ1LDkgKzEyNTQsMTggQEAgc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8g
Y2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKICAgIHRvIGVhc2Ug
dGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0g
ICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBn
by4gICovCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0
aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBO
ZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4y
J3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vz
c2VkLiAgKi8KIAogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZ
RkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0ND
IGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFi
b3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRv
IG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGlj
aCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2VuZGlmCiAKICNk
ZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC0xNTE4LDE3ICsxNDM2
LDIwIEBAIHl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRl
eHQpCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZv
aWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0
b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2
ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9w
KQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlf
c3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9t
OworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRl
cnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8
PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207
CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTU2MywxMSArMTQ4NCwxMSBAQCB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCiAgIC8qIFRoZSBzeW1ib2xzIGJlaW5n
IHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAg
ewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKIAkJICAgICAgICYo
eXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQogCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0
KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CiAgICAgfQogfQogCkBAIC0xODQ5LDEwICsxNzcwLDggQEAgeXlkZXN0cnVjdCAo
eXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCiAJYnJlYWs7CiAgICAgfQogfQotDAog
CiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAj
aWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTg3MSwxMCAr
MTc5MCw5IEBAIGludCB5eXBhcnNlICgpOwogCiAKIAotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFy
c2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwog
CiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCkBAIC0xODk4LDc0ICsxODE2LDc1IEBAIHl5cGFyc2UgKGNvbnRleHQp
CiAjZW5kaWYKICNlbmRpZgogewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyog
VGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyogVGhlIHNlbWFudGlj
IHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgc2VtYW50aWMgdmFs
dWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogWVlTVFlQRSB5eWx2YWw7CiAKLS8qIE51
bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLQotICBpbnQg
eXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9r
ZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5
ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xh
dGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9W
RVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVk
IHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2di
dWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0K
LSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAg
ICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3Rh
Y2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8g
cmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisgICAgLyogTnVtYmVyIG9mIHN5bnRheCBl
cnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKIAotICAvKiBUaGUgc3RhdGUgc3Rh
Y2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50
MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKyAgICBpbnQgeXlzdGF0
ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdl
cyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CiAKLSAgLyogVGhlIHNlbWFudGlj
IHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZ
UEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7CisgICAgLyogVGhlIHN0YWNrcyBh
bmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAg
ICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgogCisgICAgICAgUmVmZXIgdG8g
dGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Cisg
ICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCiAKKyAgICAvKiBUaGUgc3Rh
dGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAg
eXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CiAKLSNkZWZpbmUg
WVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKyAgICAvKiBUaGUg
c2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhd
OworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CiAKLSAgWVlTSVpFX1Qg
eXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKIAor
ICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CiAg
IC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0
aW9uIGZyb20gdGhlCiAgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCiAgIFlZU1RZUEUgeXl2YWw7
CiAKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQogCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9m
IHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91
bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAg
eXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5
eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFy
ID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9
IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlh
bGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5k
IGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVs
IGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIg
aW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBA
IC0xOTk1LDcgKzE5MTQsNiBAQCBpbnQgeXluZXJyczsKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7
CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRl
ciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNl
IGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRp
b25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0y
MDAzLDcgKzE5MjEsNiBAQCBpbnQgeXluZXJyczsKIAl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBl
eGhhdXN0ZWQiKSwKIAkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAogCQkg
ICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0KIAkJICAgICZ5eXN0YWNrc2l6
ZSk7CiAKIAl5eXNzID0geXlzczE7CkBAIC0yMDI2LDkgKzE5NDMsOCBAQCBpbnQgeXluZXJyczsK
IAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3Rh
Y2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFD
S19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19h
bGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5
c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0yMDM5LDcgKzE5NTUsNiBAQCBpbnQg
eXluZXJyczsKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9
IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNr
IHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3Rh
Y2tzaXplKSk7CiAKQEAgLTIwNDksNiArMTk2NCw5IEBAIGludCB5eW5lcnJzOwogCiAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CiAKKyAgaWYg
KHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKwogICBnb3RvIHl5YmFja3VwOwog
CiAvKi0tLS0tLS0tLS0tLgpAQCAtMjA1NywxNiArMTk3NSwxNiBAQCBpbnQgeXluZXJyczsKIHl5
YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJl
bnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBh
bmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3
ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQg
dG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCBy
ZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVd
OwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8q
IE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBU
WSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTIwOTgsMjAgKzIwMTYsMTYgQEAgeXli
YWNrdXA6CiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklO
QUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJy
b3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAo
eXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1h
aGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwog
Ci0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0g
IGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2Fy
ZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0
ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0yMTU3LDcgKzIwNzEsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAg
IGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsy
MDgwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlz
IGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAg
ICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFi
bGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpA
QCAtMjE4MywxNCArMjA5NywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCks
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ6CkBAIC0yMjAxLDEzICsyMTE1LDEzIEBA
IHl5cmVkdWNlOgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwog
ICAgICAgICAvLwogICAgICAgICBpZiAoYWJzKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSkgPj0g
KDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50
ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmkpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKQEAgLTIy
MTYsNyArMjEzMCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25z
dCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA2OgpAQCAtMjIyNSwyMSArMjEzOSwyMSBAQCB5eXJlZHVjZToKICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToK
QEAgLTIyNDcsOSArMjE2MSw5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCEoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICEoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAhKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKICAg
ICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5
LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5v
ZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJp
eCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7CkBAIC0yMjY2LDcgKzIxODAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0
b3IoKSB8fCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRy
aXgoKSkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5
cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+
Z2V0SUNvbnN0KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc0FycmF5KCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkp
OworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9u
IG91dCBvZiByYW5nZSAnIiA8PCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CkBAIC0yMjc5LDcgKzIxOTYs
MTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKSA+PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjMxNiwyMSArMjIzNiwy
MSBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5KSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExOgogCiAgICAg
ewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIu
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMjM3NSw3ICsy
Mjk1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmaWVs
ZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMg
bm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
MCk7CkBAIC0yMzkzLDcgKzIzMTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGJvb2wgZmll
bGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBu
byBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMjQyNSwxOCArMjM0NSwxOCBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqKCpm
aWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmll
bGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0
cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyOgpAQCAtMjQ1MCw3ICsyMzcwLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM6CkBAIC0yNDY0LDcgKzIzODQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKQEAgLTI0NzMsNyAr
MjM5Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OgpAQCAtMjUzMCw5ICsyNDUw
LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50
ZXJtTm9kZSwgMCwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5h
bCBFcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1
bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5
cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRM
aW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNTU2
LDcgKzI0NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBm
bkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNr
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5j
ZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0
TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lu
b3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0
JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNTczLDIzICsyNDk0LDIzIEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBmbkNh
bGw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6CiAKICAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5v
dCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwog
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE4OgpAQCAtMjU5Nyw3ICsyNTE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKQEAgLTI2MDUsNyArMjUyNiw3IEBAIHl5cmVk
dWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CkBAIC0y
NjEzLDcgKzI1MzQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMToKQEAgLTI2MjEsNyArMjU0Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
ZnVuY3Rpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIyOgpAQCAtMjYzMSw3ICsyNTUyLDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFk
ZFBhcmFtZXRlcihwYXJhbSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6CkBAIC0yNjQxLDE0ICsyNTYy
LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlv
biA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb247CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQ6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI1OgpAQCAtMjY5Nyw3ICsy
NjE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0yNzA3LDcgKzI2MjgsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpOwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVt
cFN0cmluZywgdHlwZSwgb3ApOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1
bmN0aW9uOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY6CkBAIC0yNzE4
LDcgKzI2MzksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBV
bmRlZmluZWQpOwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAyNzoKQEAgLTI3MjksMTQgKzI2NTAsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRUeXBl
IHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlv
biA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk6CkBAIC0yNzUw
LDcgKzI2NzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMDoKQEAgLTI3NjQsNyArMjY4NSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDMxOgpAQCAtMjc4NSwyNyArMjcwNiwyNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDMyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51
bGw7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDMzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyA7fQorICAgIHsgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzQ6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5
eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0p
LmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0g
RU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzU6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDM2OgpAQCAtMjgxOCw3ICsyNzM5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzc6CkBAIC0yODMx
LDEyICsyNzUyLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToK
QEAgLTI4NDgsNyArMjc2OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQwOgpAQCAtMjg2MCwxNyArMjc4MSwxNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA0MToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDQzOgpAQCAtMjg4NCw3ICsyODA1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQ0OgpAQCAtMjg5OCw3ICsyODE5LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ1OgpAQCAtMjkxMiw3ICsyODMzLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0K
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ2OgpAQCAtMjkyNiwxMiArMjg0
NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDc6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQ4OgpAQCAtMjk0NSw3ICsyODY2LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ5OgpAQCAtMjk1OSwyNyArMjg4MCwyNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTA6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MjoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNTM6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDU0OgpAQCAtMjk5MywxMiArMjkx
NCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDU2OgpAQCAtMzAxMiwxMiArMjkzMywxMiBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDU4OgpAQCAtMzAzMSwxMiArMjk1MiwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNTk6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDYwOgpAQCAtMzA1NCwxMiAr
Mjk3NSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNSkgLSAo
NSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA2MToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9Cisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjI6CkBAIC0z
MDczLDM5ICsyOTk0LDM5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDYzOgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyA7fQorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjQ6CiAKLSAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFz
c2lnbjsgO30KKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNjU6CiAKLSAgICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgO30KKyAgICB7
IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAo
eXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjY6CiAK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BBZGRBc3NpZ247IDt9CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZh
bC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NzoK
IAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcFN1YkFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5
dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY4
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDY5OgpAQCAtMzExNyw3ICszMDM4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzA6
CkBAIC0zMTI2LDcgKzMwNDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmNv
bnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzE6CkBAIC0zMTU3LDcg
KzMwNzgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHByb3RvdHlwZTsKIAogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcyOgpAQCAtMzE2Niw3ICszMDg3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSkKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDczOgpAQCAtMzE3NCw3ICszMDk1LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZh
dWx0UHJlY2lzaW9uKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSwgKHl5dnNw
WygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgKTsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoK
QEAgLTMxOTEsMTIgKzMxMTIsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwog
ICAgICAgICBpZiAocHJldkRlYykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11
c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIg
cXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMy
MTMsMjEgKzMxMzQsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5l
ciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVt
ZW50LgogICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91
bmRpbmcgc2NvcGUgaW5zdGVhZC4KICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0
ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDc1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NjoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24p
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzc6CkBAIC0zMjM5LDcgKzMx
NjAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVy
bSkucGFyYW0udHlwZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc4OgpA
QCAtMzI1Myw3ICszMTc0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAg
ICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fu
bm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewpA
QCAtMzI2MSwxNCArMzE4MiwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzk6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8g
cXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJp
bmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1
YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBz
YW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0zMjgyLDE0ICszMjAzLDE0IEBA
IHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwog
ICAgICAgICAKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODA6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVz
ZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKQEAg
LTMyOTcsNyArMzIxOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpKX07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFy
YW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MToKQEAgLTMzMTksNyAr
MzI0MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAoeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSB9OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lOwogICAgICAgICAoeXl2YWwuaW50ZXJt
KS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6
CkBAIC0zMzI4LDcgKzMyNDksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxp
ZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6CkBAIC0z
MzM5LDcgKzMyNjAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1
YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6CkBA
IC0zMzQ4LDcgKzMyNjksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmll
ciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6CkBAIC0zMzU5
LDM1ICszMjgwLDM1IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMild
LmludGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0g
RXZxT3V0OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTA6CkBAIC0zMzk1LDE0ICszMzE2LDE0IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKICAgICAgICAgKHl5dmFsLmludGVy
bSkucGFyYW0gPSBwYXJhbTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkx
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKQEAgLTM0MTAs
NyArMzMzMSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5s
aW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogCkBAIC0zNDI4LDcgKzMzNDksNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiB2
YXJpYWJsZSkKICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6CkBAIC0zNDUwLDcg
KzMzNzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6CkBAIC0zNDc4LDcgKzMzOTksNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkg
OiAwLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eXZzcFsoMykgLSAo
NildLmxleCkubGluZSksICh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSk7CiAgICAgICAgIH0K
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk1OgpAQCAtMzUwMiw3ICszNDIz
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NjoKQEAgLTM1MTAsNyArMzQzMSw3IEBA
IHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5NzoKQEAgLTM1MzIsMTkgKzM0NTMsMTkgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAg
ICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk4OgogCiAgICAgewotICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICJ1bnNpemVkIGFycmF5IGRl
Y2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5
OToKQEAgLTM1ODAsNyArMzUwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgaWYgKHZhcmlh
YmxlICYmIHN5bWJvbCkKICAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTAwOgpAQCAtMzYwNCw3ICszNTI1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDE6CkBAIC0zNjE2LDcgKzM1MzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MjYsNyArMzU0Nyw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5p
bnRlcm0pLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1h
a2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6CkBAIC0zNjM1LDQy
ICszNTU2LDQyIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBz
dXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRB
cnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKICAgICAgICAgICAgICgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGlu
dCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09
IEV2cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllcjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNDoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEwNToKQEAgLTM2ODAsNyArMzYwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUs
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNjoKQEAgLTM2OTIs
NyArMzYxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNzoKQEAgLTM3MDQsNyArMzYy
NSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwODoKQEAg
LTM3MTMsNyArMzYzNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBF
dnFVbmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTA5OgpAQCAtMzcyNyw3ICszNjQ4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTA6CkBAIC0zNzM1
LDM1ICszNjU2LDM1IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9u
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwSGlnaDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDExMjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBF
YnBMb3c7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTQ6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTU6CkBAIC0zNzc5
LDcgKzM3MDAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTY6CkBA
IC0zNzg3LDcgKzM3MDgsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE3OgpAQCAtMzc5NSw3ICszNzE2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTg6CkBA
IC0zODAzLDcgKzM3MjQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMTk6CkBAIC0zODExLDcgKzM3MzIsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIwOgpAQCAt
MzgyMCw3ICszNzQxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMjE6CkBAIC0zODI5LDcgKzM3NTAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDEyMjoKQEAgLTM4MzgsNyArMzc1OSw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIzOgpAQCAtMzg0Nyw3ICszNzY4LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNDoKQEAgLTM4NTYsNyArMzc3Nyw3
IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjU6CkBAIC0zODY1
LDcgKzM3ODYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI2
OgpAQCAtMzg3NCw3ICszNzk1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTI3OgpAQCAtMzg4Myw3ICszODA0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTI4OgpAQCAtMzg5Miw3ICszODEzLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI5OgpAQCAtMzkwMiw3ICszODIzLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzA6CkBAIC0zOTEyLDcg
KzM4MzMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEzMToKQEAgLTM5MjIsNyArMzg0Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMyOgpAQCAtMzkzMSw3ICszODUyLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMz
OgpAQCAtMzk0MCwzMyArMzg2MSwzMyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09O
TFkoInNhbXBsZXJDdWJlIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM0OgogCiAgICAgewogICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4
dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlckV4dGVybmFsT0VTIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzNToKIAog
ICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJz
YW1wbGVyMkRSZWN0IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRFJlY3QsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzY6CkBAIC0zOTc1LDcgKzM4
OTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMzc6CkBAIC0zOTg5LDEyICszOTEwLDEyIEBAIHl5cmVkdWNlOgogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM4OgogCi0gICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7
IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zl
cigpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzk6CkBAIC00MDEyLDEyICszOTMzLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVj
dCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQt
PmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQwOgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmlu
ZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVj
dERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxNDE6CkBAIC00MDI3LDE0ICszOTQ4LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3Bb
KDEpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJE
ZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQyOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlTGlzdCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDM6CkBAIC00
MDUwLDcgKzM5NzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZUxpc3QpKVtpXSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NDoKQEAgLTQwODcsNyArNDAwOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ1OgpAQCAtNDA5NSwxNCArNDAxNiwx
NCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0g
TmV3UG9vbFRUeXBlTGlzdCgpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVz
aF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGlu
ZSkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ3OgpAQCAtNDExNCw3
ICs0MDM1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5
cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0RmllbGROYW1lKCooeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxNDg6CkBAIC00MTMxLDY3ICs0MDUyLDY3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSku
dHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQ5OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTA6CiAKLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTUyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTUzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU1OgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU2OgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU3Ogog
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTU4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTU5OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9Cisg
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE2MDoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IDt9CisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYxOgpAQCAt
NDIwMiw0NCArNDEyMyw0NCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoNSkgLSAoNSld
LmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjI6CiAKLSAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9
CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjM6CiAKLSAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjQ6CiAK
LSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY1OgogCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjY6CiAK
LSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY3OgogCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjg6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY5OgpAQCAtNDI1MCwzMSArNDE3MSwzMSBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAg
IH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTcxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpLCAwKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTczOgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDE3NDoKQEAgLTQyODMsNyArNDIwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29u
dGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXl2c3Bb
KDEpIC0gKDUpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTc1OgpAQCAtNDI5MSw3ICs0MjEyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1Ob2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNzY6CkBAIC00Mjk5LDcgKzQyMjAsNyBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzc6CkBAIC00
MzA4LDcgKzQyMjksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzg6CkBAIC00MzI2LDEyICs0MjQ3LDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc5OgogCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODA6CkBAIC00MzQwLDEyICs0MjYxLDEyIEBAIHl5cmVk
dWNlOgogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29w
V2hpbGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAo
eXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNildLmxl
eCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MToKIAotICAgIHsgKytjb250ZXh0LT5sb29w
TmVzdGluZ0xldmVsOyA7fQorICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxODI6CkBAIC00MzU2LDEyICs0Mjc3LDEyIEBAIHl5cmVkdWNl
OgogCiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5l
c3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKIAot
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgpAQCAtNDM3MCwz
NSArNDI5MSwzNSBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5v
ZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmlu
dGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5
eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcp
XS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNyldLmxleCkubGluZSk7CiAgICAg
ICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE4NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NzoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODk6CkBAIC00NDA2LDcg
KzQzMjcsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBh
aXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MDoKQEAgLTQ0MTQsMjkgKzQzMzUsMjkgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkxOgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51
ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0
YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAi
YnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE5MzoKQEAgLTQ0NDQsMTAgKzQzNjUsMTAgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE5NDoKQEAgLTQ0NTYsMTMgKzQzNzcsMTMgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIGNv
bnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQg
ZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQgZnVu
Y3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZSkgIT0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgz
KV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJy
ZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5sZXgpLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJl
dHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTU6CkBAIC00NDcwLDcgKzQzOTEsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTY6
CkBAIC00NDc4LDcgKzQzOTksNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
CiAgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKQEAgLTQ0ODYsMjEgKzQ0
MDcsMjEgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksIDApOwogICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDA6CkBAIC00NTE3LDcgKzQ0MzgsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIC8vCiAgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBi
b2R5LgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7
CkBAIC00NTI3LDcgKzQ0NDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBh
bnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtNDU1OSw3ICs0NDgwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0
aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAi
cmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1ODAsNyArNDUwMSw3IEBAIHl5
cmVkdWNlOgogICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5s
aW5lKTsKICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJhbU5vZGVzOwogICAgICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIwMToKQEAgLTQ2MDAsMTkgKzQ1MjEs
MTcgQEAgeXlyZWR1Y2U6CiAKICAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlv
biBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAg
ICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0
aGUgcGFyc2UgdHJlZQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
RGVidWcoY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1Zyk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUoY29udGV4
dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgp
Lm9wdGltaXplKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0RGVidWcoY29udGV4dC0+cHJhZ21hKCkuZGVidWcpOwogCiAgICAgICAgIGlm
ICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSkgJiYgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpKQogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldEVu
ZExpbmUoKSk7CiAKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTQ2MjQsNyArNDU0Myw2IEBAIHl5cmVkdWNl
OgogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0
IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMg
dG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAg
ICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtNDY4OSw3ICs0NjA3LDcgQEAgeXllcnJsYWI6
CiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmll
ZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8q
IElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KIAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQpAQCAtNDcwNiw3ICs0NjI0LDcgQEAgeXllcnJsYWI6CiAJfQogICAgIH0KIAotICAvKiBFbHNl
IHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVy
cm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNo
aWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBA
IC00NzYzLDkgKzQ2ODEsNiBAQCB5eWVycmxhYjE6CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7
Ci0KICAgKisreXl2c3AgPSB5eWx2YWw7CiAKIApAQCAtNDc5MCw3ICs0NzA1LDcgQEAgeXlhYm9y
dGxhYjoKICAgeXlyZXN1bHQgPSAxOwogICBnb3RvIHl5cmV0dXJuOwogCi0jaWZuZGVmIHl5b3Zl
cmZsb3cKKyNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhh
dXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ4MDEsNyArNDcx
Niw3IEBAIHl5ZXhoYXVzdGVkbGFiOgogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFy
ICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkp
CiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5
eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJv
bHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAppbmRleCAyMzk0NWI4Li4z
ZTQ2MWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuaApAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUg
YnkgR05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIw
MDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgCisgICAgICBDb3B5cmlnaHQg
KEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQor
ICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK
LSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChh
dCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCisgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAogICAgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQorICAgCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw
Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwogICAgcGFydCBv
ciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdv
cmsKQEAgLTI5LDEwICsyNywxMSBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwg
Y2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmls
ZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5z
ZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgog
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCisKIC8qIFRva2Vucy4gICovCiAjaWZuZGVm
IFlZVE9LRU5UWVBFCiAjIGRlZmluZSBZWVRPS0VOVFlQRQpAQCAtMTM0LDEwOCArMTMzLDE0IEBA
CiAgICAgIFFVRVNUSU9OID0gMzUwCiAgICB9OwogI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2Rl
ZmluZSBJTlZBUklBTlQgMjU4Ci0jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIDI1OQotI2RlZmluZSBN
RURJVU1fUFJFQ0lTSU9OIDI2MAotI2RlZmluZSBMT1dfUFJFQ0lTSU9OIDI2MQotI2RlZmluZSBQ
UkVDSVNJT04gMjYyCi0jZGVmaW5lIEFUVFJJQlVURSAyNjMKLSNkZWZpbmUgQ09OU1RfUVVBTCAy
NjQKLSNkZWZpbmUgQk9PTF9UWVBFIDI2NQotI2RlZmluZSBGTE9BVF9UWVBFIDI2NgotI2RlZmlu
ZSBJTlRfVFlQRSAyNjcKLSNkZWZpbmUgQlJFQUsgMjY4Ci0jZGVmaW5lIENPTlRJTlVFIDI2OQot
I2RlZmluZSBETyAyNzAKLSNkZWZpbmUgRUxTRSAyNzEKLSNkZWZpbmUgRk9SIDI3MgotI2RlZmlu
ZSBJRiAyNzMKLSNkZWZpbmUgRElTQ0FSRCAyNzQKLSNkZWZpbmUgUkVUVVJOIDI3NQotI2RlZmlu
ZSBCVkVDMiAyNzYKLSNkZWZpbmUgQlZFQzMgMjc3Ci0jZGVmaW5lIEJWRUM0IDI3OAotI2RlZmlu
ZSBJVkVDMiAyNzkKLSNkZWZpbmUgSVZFQzMgMjgwCi0jZGVmaW5lIElWRUM0IDI4MQotI2RlZmlu
ZSBWRUMyIDI4MgotI2RlZmluZSBWRUMzIDI4MwotI2RlZmluZSBWRUM0IDI4NAotI2RlZmluZSBN
QVRSSVgyIDI4NQotI2RlZmluZSBNQVRSSVgzIDI4NgotI2RlZmluZSBNQVRSSVg0IDI4NwotI2Rl
ZmluZSBJTl9RVUFMIDI4OAotI2RlZmluZSBPVVRfUVVBTCAyODkKLSNkZWZpbmUgSU5PVVRfUVVB
TCAyOTAKLSNkZWZpbmUgVU5JRk9STSAyOTEKLSNkZWZpbmUgVkFSWUlORyAyOTIKLSNkZWZpbmUg
U1RSVUNUIDI5MwotI2RlZmluZSBWT0lEX1RZUEUgMjk0Ci0jZGVmaW5lIFdISUxFIDI5NQotI2Rl
ZmluZSBTQU1QTEVSMkQgMjk2Ci0jZGVmaW5lIFNBTVBMRVJDVUJFIDI5NwotI2RlZmluZSBTQU1Q
TEVSX0VYVEVSTkFMX09FUyAyOTgKLSNkZWZpbmUgU0FNUExFUjJEUkVDVCAyOTkKLSNkZWZpbmUg
SURFTlRJRklFUiAzMDAKLSNkZWZpbmUgVFlQRV9OQU1FIDMwMQotI2RlZmluZSBGTE9BVENPTlNU
QU5UIDMwMgotI2RlZmluZSBJTlRDT05TVEFOVCAzMDMKLSNkZWZpbmUgQk9PTENPTlNUQU5UIDMw
NAotI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzA1Ci0jZGVmaW5lIExFRlRfT1AgMzA2Ci0jZGVm
aW5lIFJJR0hUX09QIDMwNwotI2RlZmluZSBJTkNfT1AgMzA4Ci0jZGVmaW5lIERFQ19PUCAzMDkK
LSNkZWZpbmUgTEVfT1AgMzEwCi0jZGVmaW5lIEdFX09QIDMxMQotI2RlZmluZSBFUV9PUCAzMTIK
LSNkZWZpbmUgTkVfT1AgMzEzCi0jZGVmaW5lIEFORF9PUCAzMTQKLSNkZWZpbmUgT1JfT1AgMzE1
Ci0jZGVmaW5lIFhPUl9PUCAzMTYKLSNkZWZpbmUgTVVMX0FTU0lHTiAzMTcKLSNkZWZpbmUgRElW
X0FTU0lHTiAzMTgKLSNkZWZpbmUgQUREX0FTU0lHTiAzMTkKLSNkZWZpbmUgTU9EX0FTU0lHTiAz
MjAKLSNkZWZpbmUgTEVGVF9BU1NJR04gMzIxCi0jZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjIKLSNk
ZWZpbmUgQU5EX0FTU0lHTiAzMjMKLSNkZWZpbmUgWE9SX0FTU0lHTiAzMjQKLSNkZWZpbmUgT1Jf
QVNTSUdOIDMyNQotI2RlZmluZSBTVUJfQVNTSUdOIDMyNgotI2RlZmluZSBMRUZUX1BBUkVOIDMy
NwotI2RlZmluZSBSSUdIVF9QQVJFTiAzMjgKLSNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyOQotI2Rl
ZmluZSBSSUdIVF9CUkFDS0VUIDMzMAotI2RlZmluZSBMRUZUX0JSQUNFIDMzMQotI2RlZmluZSBS
SUdIVF9CUkFDRSAzMzIKLSNkZWZpbmUgRE9UIDMzMwotI2RlZmluZSBDT01NQSAzMzQKLSNkZWZp
bmUgQ09MT04gMzM1Ci0jZGVmaW5lIEVRVUFMIDMzNgotI2RlZmluZSBTRU1JQ09MT04gMzM3Ci0j
ZGVmaW5lIEJBTkcgMzM4Ci0jZGVmaW5lIERBU0ggMzM5Ci0jZGVmaW5lIFRJTERFIDM0MAotI2Rl
ZmluZSBQTFVTIDM0MQotI2RlZmluZSBTVEFSIDM0MgotI2RlZmluZSBTTEFTSCAzNDMKLSNkZWZp
bmUgUEVSQ0VOVCAzNDQKLSNkZWZpbmUgTEVGVF9BTkdMRSAzNDUKLSNkZWZpbmUgUklHSFRfQU5H
TEUgMzQ2Ci0jZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDcKLSNkZWZpbmUgQ0FSRVQgMzQ4Ci0jZGVm
aW5lIEFNUEVSU0FORCAzNDkKLSNkZWZpbmUgUVVFU1RJT04gMzUwCi0KIAogCiAKICNpZiAhIGRl
ZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1
bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBs
aW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0yNjUsMTQgKzE3MCwxNSBAQCB0eXBlZGVmIHVuaW9u
IFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAg
ICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7
CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5l
IHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFM
IDEKICNlbmRpZgogCiAKIAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5kZXggNTQ0MTU1Ny4uYWY3OGZhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApA
QCAtNDMzLDE1ICs0MzMsMTUgQEAgcHJvdGVjdGVkOgogCiB0eXBlZGVmIFRWZWN0b3I8VEludGVy
bU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7CiB0eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlmaWVy
TGlzdDsKLXR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3RyaW5nPiBUUHJhZ21hVGFibGU7CisKIC8v
CiAvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNldCBvZiBjaGls
ZHJlbi4KIC8vCiBjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRlcm1PcGVyYXRv
ciB7CiBwdWJsaWM6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVP
cE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHByYWdtYVRhYmxlKDApLCBlbmRMaW5lKDApLCB1
c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVy
YXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCksIHVzZUVtdWxhdGVk
RnVuY3Rpb24oZmFsc2UpIHsgfQotICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyBkZWxldGUgcHJh
Z21hVGFibGU7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9w
TnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlv
bihmYWxzZSkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJt
T3BlcmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIH5USW50ZXJt
QWdncmVnYXRlKCkgeyB9CiAKICAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdn
cmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CkBAIC00NTIsMTQgKzQ1MiwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KIAogICAgIHZvaWQgc2V0
VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkg
Y29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemUoYm9v
bCBvKSB7IG9wdGltaXplID0gbzsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBv
cHRpbWl6ZTsgfQogICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQogICAg
IGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQotICAgIHZvaWQgYWRkVG9QcmFnbWFU
YWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7Ci0gICAgY29uc3QgVFByYWdtYVRhYmxl
JiBnZXRQcmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorCiAgICAg
dm9pZCBzZXRFbmRMaW5lKFRTb3VyY2VMb2MgbGluZSkgeyBlbmRMaW5lID0gbGluZTsgfQogICAg
IFRTb3VyY2VMb2MgZ2V0RW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIGVuZExpbmU7IH0KIApAQCAt
NDc1LDcgKzQ3NCw2IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgb3B0aW1pemU7CiAgICAgYm9v
bCBkZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOwogICAgIFRTb3VyY2VMb2Mg
ZW5kTGluZTsKIAogICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBm
dW5jdGlvbiBjYWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCkBAIC01MzMsNiArNTMxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCiAgICAgICAgICAgICByaWdo
dFRvTGVmdChyaWdodFRvTGVmdCksCiAgICAgICAgICAgICBkZXB0aCgwKSB7fQorICAgIHZpcnR1
YWwgflRJbnRlcm1UcmF2ZXJzZXIoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKikge30KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9u
KFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAppbmRleCA5ZjkzOTNhLi45YjNhY2RmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCkBAIC0x
Nyw3ICsxNyw3IEBACiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4
X18pIHx8IFwKICAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNE
X18pIHx8IFwKICAgICAgIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAot
ICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgZGVmaW5lZChf
X1FOWF9fKQorICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykKICNk
ZWZpbmUgQU5HTEVfT1NfUE9TSVgKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvYXRvbS5jCmluZGV4IGExN2MzMTkuLjM5MTU4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5j
CkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmlu
Zy5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIK
IApAQCAtMzA3LDcgKzMwOCw3IEBAIHN0cnVjdCBBdG9tVGFibGVfUmVjIHsKICAgICBpbnQgc2l6
ZTsKIH07CiAKLXN0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyAwIH0gfTsKK3N0YXRpYyBB
dG9tVGFibGUgbGF0YWJsZSA9IHsgeyBOVUxMLCAwLCAwIH0sIHsgTlVMTCwgMCwgMCwgezB9IH0s
IE5VTEwsIE5VTEwsIDAsIDAgfTsKIEF0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CiAKIHN0
YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBp
bnQgYXRvbSk7CkBAIC00MzQsMTQgKzQzNSwxNCBAQCBzdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0
b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQogICAgICAgICAgICAgaWYgKGNwcC0+b3B0
aW9ucy5EdW1wQXRvbVRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaW50IGlpOwogICAgICAgICAg
ICAgICAgIGNoYXIgc3RyWzIwMF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiog
SGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBo
YXNoIHRhYmxlIHNpemUuICoqKiIsCisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIioqKiBIYXNoIGZhaWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBN
dXN0IGluY3JlYXNlIGhhc2ggdGFibGUgc2l6ZS4gKioqIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKHN0cik7CiAKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3Ry
aW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBkZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNo
ZGVsdGEpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiog
TmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblsw
XSwgaGFzaGRlbHRhKTsKICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAg
ICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9O
UzsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRl
cyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAg
ICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBDb2xsaWRlcyBvbiB0cnkg
JWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlpICsgMSwgY29sbGlzaW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJs
ZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSwxNCAr
Njg2LDE0IEBAIHZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCiAgICAgY2hh
ciBzdHJbMjAwXTsKIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlp
KyspIHsKLSAgICAgICAgc3ByaW50ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0
YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBz
aXplb2Yoc3RyKSwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRh
YmxlLT5hbWFwW2lpXV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KLSAg
ICBzcHJpbnRmKHN0ciwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKKyAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiSGFzaCB0YWJsZTogc2l6ZT0l
ZCwgZW50cmllcz0lZCwgY29sbGlzaW9ucz0iLAogICAgICAgICAgICBhdGFibGUtPmh0YWJsZS5z
aXplLCBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKTsKICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwog
ICAgIGZvciAoaWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsK
LSAgICAgICAgc3ByaW50ZihzdHIsICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsK
KyAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCIsIGF0YWJsZS0+aHRhYmxl
LmNvdW50c1tpaV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3BwLmMKaW5kZXggMTNhNWRmMS4uOGExMDc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCkBAIC01MSw2
ICs1MSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNjc4LDcgKzY3
OSw3IEBAIHN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogCQljYXNl
IC0xOgogICAgICAgICAgICAgLy8gRU9GCiAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNw
cmFnbWEgZGlyZWN0aXZlIG11c3QgZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlyZXR1cm4g
dG9rZW47CisJCQlnb3RvIGZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjsKIAkJZGVmYXVsdDoKIAkJ
CVNyY1N0ck5hbWVbMF0gPSB0b2tlbjsKIAkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOwpAQCAtNjg4
LDEwICs2ODksOSBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
IAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwogCX0KIAotCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB0b2tlbiwgeXlsdmFscHApOwogCUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRv
a2VucywgdG9rZW5Db3VudCk7Ci0JdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCQorZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgog
CWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ld
KTsKIAl9CkBAIC03ODQsNyArNzg0LDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogewogICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBp
bnQgaXNWZXJzaW9uID0gMDsKIAogICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewog
ICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3
ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAg
ICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQ
UHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAg
fSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgewpA
QCAtODg2LDE1ICs4ODQsMTUgQEAgdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0K
IAogdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsK
LSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0g
ezAsIDB9OwogICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNy
byA9IHswfTsKLSAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3Jv
ID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAw
LCB7MH19OwogICAgIGludCBhdG9tID0gMDsKIAogICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0
cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBz
cHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwgdmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5z
eW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVj
b3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZs
b2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGlu
dCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZTsKIAlpZiAoYXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKICAgICAgICAgeXls
dmFscHAtPnNjX2ludCA9IEdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgc3ByaW50Zih5eWx2YWxw
cC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgc25wcmludGYo
eXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5bHZh
bHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFs
cHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgaWYgKGF0b20gPT0gX19GSUxFX19B
dG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIoKTsKLSAg
ICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50
KTsKKyAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05B
TUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQ
UF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaAppbmRleCBkYjRjMTg0Li44MDJlMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKQEAgLTczLDgg
KzczLDggQEAgdm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIqKTsgICAgICAgICAvLyBT
dG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG8KIHZvaWQgIENQUFdhcm5pbmdUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZv
IGxvZwogdm9pZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAv
LyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250YWluZXIuCiB2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7
ICAgICAgICAgICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lkICBD
UFBFcnJvclRvSW5mb0xvZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJy
b3JzIGludG8gU2guSW5mby5sb2cgICAuCi12b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lk
ICBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAg
ZXJyb3JzIGludG8gU2guSW5mby5sb2cuCit2b2lkICBTdG9yZVN0cihjb25zdCBjaGFyKik7ICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCiB2b2lk
ICBTZXRMaW5lTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJl
ci4gIAogdm9pZCAgU2V0U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQg
c3RyaW5nIG51bWJlci4gICAgCiBpbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAg
ICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCmluZGV4IGIzYWUyZjkuLjVmY2FkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaApAQCAtNDUs
NiArNDUsOCBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAjaWZuZGVmIF9fTUVNT1JZX0gKICNkZWZpbmUgX19NRU1PUllfSAogCisj
aW5jbHVkZSA8c3RkZGVmLmg+CisKIHR5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVjIE1lbW9y
eVBvb2w7CiAKIGV4dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtz
aXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5Y2M0My4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxz
c3RyZWFtPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJzdGxfdXRp
bHMuaCIKLSNpbmNsdWRlICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBib29sIGlzTWFjcm9OYW1l
UmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgQVNTRVJUKG5hbWUpOwot
Ci0gICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCi0gICAgaWYg
KG5hbWUtPnN1YnN0cigwLCAzKSA9PSAiR0xfIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVz
ZXJ2ZWQuCi0gICAgaWYgKG5hbWUtPmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1uYW1lc3BhY2Ug
cHAKLXsKLQotQ29udGV4dDo6Q29udGV4dCgpCi0gICAgOiBtTGV4ZXIoTlVMTCksCi0gICAgICBt
SW5wdXQoTlVMTCksCi0gICAgICBtT3V0cHV0KE5VTEwpCi17Ci19Ci0KLUNvbnRleHQ6On5Db250
ZXh0KCkKLXsKLSAgICBkZXN0cm95TGV4ZXIoKTsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0KCkK
LXsKLSAgICByZXR1cm4gaW5pdExleGVyKCk7Ci0KLSAgICAvLyBUT0RPKGFsb2twKTogRGVmaW5l
IGJ1aWx0LWluIG1hY3JvcyBoZXJlIHNvIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8KLSAgICAvLyBk
ZWZpbmUgdGhlbSBldmVyeXRpbWUgaW4gcHJvY2VzcygpLgotfQotCi1ib29sIENvbnRleHQ6OnBy
b2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAg
ICAgICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0KQotewotICAgIEFTU0VSVCgo
Y291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpICYmIChvdXRwdXQgIT0gTlVMTCkpOwotCi0g
ICAgLy8gU2V0dXAuCi0gICAgbUlucHV0ID0gbmV3IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0
aCk7Ci0gICAgbU91dHB1dCA9IG91dHB1dDsKLSAgICBkZWZpbmVCdWlsdEluTWFjcm8oIkdMX0VT
IiwgMSk7Ci0KLSAgICAvLyBQYXJzZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZSgpOwotCi0g
ICAgLy8gQ2xlYW51cC4KLSAgICByZXNldCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1i
b29sIENvbnRleHQ6OmRlZmluZU1hY3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6VHlwZSB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcDo6VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykKLXsKLSAgICBzdGQ6OmF1dG9fcHRy
PE1hY3JvPiBtYWNybyhuZXcgTWFjcm8odHlwZSwgbmFtZSwgcGFyYW1ldGVycywgcmVwbGFjZW1l
bnRzKSk7Ci0gICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQobmFtZSkpCi0gICAgewotICAgICAg
ICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmIChpc01hY3JvRGVmaW5lZChuYW1lKSkKLSAgICB7Ci0gICAgICAgIC8vIFRP
RE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBtTWFjcm9zWypuYW1lXSA9IG1hY3JvLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDb250ZXh0Ojp1bmRlZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1l
KQotewotICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3Jvcy5maW5kKCpuYW1lKTsK
LSAgICBpZiAoaXRlciA9PSBtTWFjcm9zLmVuZCgpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBt
TWFjcm9zLmVyYXNlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6
OmlzTWFjcm9EZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIHJldHVybiBt
TWFjcm9zLmZpbmQoKm5hbWUpICE9IG1NYWNyb3MuZW5kKCk7Ci19Ci0KLS8vIFJlc2V0IHRvIGlu
aXRpYWxpemVkIHN0YXRlLgotdm9pZCBDb250ZXh0OjpyZXNldCgpCi17Ci0gICAgc3RkOjpmb3Jf
ZWFjaChtTWFjcm9zLmJlZ2luKCksIG1NYWNyb3MuZW5kKCksIERlbGV0ZVNlY29uZCgpKTsKLSAg
ICBtTWFjcm9zLmNsZWFyKCk7Ci0KLSAgICBkZWxldGUgbUlucHV0OwotICAgIG1JbnB1dCA9IE5V
TEw7Ci0KLSAgICBtT3V0cHV0ID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWZpbmVCdWls
dEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSkKLXsKLSAgICBzdGQ6
Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLSAgICBUb2tlbiog
dG9rZW4gPSBuZXcgVG9rZW4oMCwgSU5UX0NPTlNUQU5ULCBuZXcgc3RkOjpzdHJpbmcoc3RyZWFt
LnN0cigpKSk7Ci0gICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyA9IG5ldyBwcDo6VG9rZW5W
ZWN0b3IoMSwgdG9rZW4pOwotCi0gICAgbU1hY3Jvc1tuYW1lXSA9IG5ldyBNYWNybyhNYWNybzo6
a1R5cGVPYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgc3RkOjpzdHJpbmco
bmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTgxMjc0Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
Q09OVEVYVF9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCi0j
aW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRl
ICJJbnB1dC5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotbmFt
ZXNwYWNlIHBwCi17Ci0KLWNsYXNzIENvbnRleHQKLXsKLSAgcHVibGljOgotICAgIENvbnRleHQo
KTsKLSAgICB+Q29udGV4dCgpOwotCi0gICAgYm9vbCBpbml0KCk7Ci0gICAgYm9vbCBwcm9jZXNz
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSwKLSAgICAgICAgICAgICAgICAgVG9rZW5WZWN0b3IqIG91dHB1dCk7Ci0KLSAgICB2b2lkKiBs
ZXhlcigpIHsgcmV0dXJuIG1MZXhlcjsgfQotICAgIGludCByZWFkSW5wdXQoY2hhciogYnVmLCBp
bnQgbWF4U2l6ZSk7Ci0gICAgVG9rZW5WZWN0b3IqIG91dHB1dCgpIHsgcmV0dXJuIG1PdXRwdXQ7
IH0KLQotICAgIGJvb2wgZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2NhdGlvbiBsb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6VHlwZSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBwcDo6VG9r
ZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0
b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgYm9vbCB1bmRlZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKTsKLSAgICBib29sIGlzTWFjcm9EZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBu
YW1lKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0
KTsKLSAgICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybyo+IE1hY3JvU2V0Owot
Ci0gICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaW5pdExleGVyKCk7Ci0gICAgdm9pZCBkZXN0
cm95TGV4ZXIoKTsKLSAgICB2b2lkIGRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwgaW50IHZhbHVlKTsKLSAgICBib29sIHBhcnNlKCk7Ci0KLSAgICB2b2lkKiBtTGV4
ZXI7ICAvLyBMZXhlciBoYW5kbGUuCi0gICAgSW5wdXQqIG1JbnB1dDsKLSAgICBUb2tlblZlY3Rv
ciogbU91dHB1dDsKLSAgICBNYWNyb1NldCBtTWFjcm9zOyAgLy8gRGVmaW5lZCBtYWNyb3MuCi19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0NPTlRFWFRfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3NWE5YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
YWdub3N0aWNzLmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2Ug
cHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBv
cnRpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9u
c2libGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERp
YWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFNldmVyaXR5CisgICAgeworICAgICAg
ICBFUlJPUiwKKyAgICAgICAgV0FSTklORworICAgIH07CisgICAgZW51bSBJRAorICAgIHsKKyAg
ICAgICAgRVJST1JfQkVHSU4sCisgICAgICAgIElOVEVSTkFMX0VSUk9SLAorICAgICAgICBPVVRf
T0ZfTUVNT1JZLAorICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgSU5WQUxJRF9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgRElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgRU9GX0lOX0NPTU1FTlQsCisgICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUs
CisgICAgICAgIFVORVhQRUNURURfVE9LRU4sCisgICAgICAgIERJUkVDVElWRV9JTlZBTElEX05B
TUUsCisgICAgICAgIE1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgIE1BQ1JPX1JFREVGSU5F
RCwKKyAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfVU5ERUZJTkVELAorICAgICAgICBNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElP
TiwKKyAgICAgICAgTUFDUk9fVE9PX0ZFV19BUkdTLAorICAgICAgICBNQUNST19UT09fTUFOWV9B
UkdTLAorICAgICAgICBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05E
SVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElPTkFMX0VMU0VfQUZURVJf
RUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05E
SVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElPTkFMX1VOVEVSTUlOQVRF
RCwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgSU5WQUxJRF9FWFRF
TlNJT05fQkVIQVZJT1IsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAg
ICAgICAgSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9WRVJTSU9OX0RJ
UkVDVElWRSwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9G
SUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgRVJS
T1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAgICAgIENPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdB
Uk5JTkdfRU5ECisgICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2
b2lkIHJlcG9ydChJRCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpz
dHJpbmcmIHRleHQpOworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBp
ZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljc0Jhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNl
LmNwcApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25v
c3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJ
RCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorewor
ICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEgY291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4K
KyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsKK30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERp
YWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKK3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4p
ICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAgICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgo
aWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVy
biBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwor
CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxv
Y2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJl
cHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2Vy
dGFpbgorLy8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVz
cG9uc2libGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4K
K2NsYXNzIERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVj
dGl2ZUhhbmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3Vy
Y2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFn
bWEgbmFtZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9u
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNw
YWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTFlMWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1YTkwZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKQEAgLTAsMCArMSw4OTkgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUg
IkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUg
IkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVk
ZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2VudW0g
RGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJUkVDVElWRV9ERUZJ
TkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJFQ1RJ
VkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwKKyAg
ICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZFX0VS
Uk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKKyAg
ICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5hbWVz
cGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2Vu
KiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmlu
ZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRl
ZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJp
ZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVm
Iik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRl
ZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIp
OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOwor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lv
biIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVy
c2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGlu
ZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKKyAg
ICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlRGVmaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0RFRklORTsKKyAgICBl
bHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4g
RElSRUNUSVZFX1VOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
SWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsK
KyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9JRk5ERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBp
ZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKQorICAgICAgICByZXR1cm4gRElSRUNU
SVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOwor
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlUHJhZ21hKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0xJTkU7CisKKyAgICByZXR1
cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3Rp
dmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUpCit7CisgICAgc3dpdGNoIChkaXJlY3RpdmUpCisg
ICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRF
RjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VM
U0U6CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRU5E
SUY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNl
bnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4q
IHRva2VuKQoreworICAgIHJldHVybiAodG9rZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50
eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChw
cDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHdoaWxlKCFpc0VPRCh0
b2tlbikpCisgICAgeworICAgICAgICBsZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7
CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYg
KG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNl
cnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wg
aXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwcDo6TWFjcm9TZXQmIG1hY3JvU2V0KQoreworICAgIHBw
OjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7Cisg
ICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5l
ZCA6IGZhbHNlOworfQorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGVmaW5lZFBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4
ZXIsCisgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAg
ICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICAgICAgbUxleGVyKGxl
eGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICAgICAgbURpYWdub3N0aWNz
KGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7CisKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4p
OworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJlbiA9IGZhbHNlOworICAgICAgICBt
TGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4
KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICBza2lw
VW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQo
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0g
bU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIwIjsKKworICAgICAgICBpZiAocGFyZW4pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBX
ZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAgICAgLy8gQ29udmVydCB0aGUg
Y3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgorICAgICAgICB0b2tlbi0+dHlw
ZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247
CisgICAgfQorCisgIHByaXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNy
b1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitE
aXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2
ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1h
Y3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVI
YW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjps
ZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkK
KyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0
aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlwZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoc2tp
cHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0gJ1xuJykpOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAg
IC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJsb2NrL2dyb3VwLAorICAgIC8v
IHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KKyAgICBpZiAoc2tpcHBpbmco
KSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2ZShkaXJlY3RpdmUpKQorICAgIHsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHN3aXRjaChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfTk9O
RToKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9J
TlZBTElEX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAg
IHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAg
ICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVD
VElWRV9FTFNFOgorICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5k
aWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgor
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5z
aW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9O
OgorICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBp
ZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgIH0KK30K
Kwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKKworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnZhbHVlLCAqbU1hY3JvU2V0KSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVE
X1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3Jv
OjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+
aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3Jv
LiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1
bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0
b2tlbi0+dmFsdWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8g
R2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAg
fQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0g
VG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9u
IGJlY2F1c2UgaXQgaXMgdW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlz
dC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dzIHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0
bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jvcy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0g
U291cmNlTG9jYXRpb24oKTsKKyAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygq
dG9rZW4pOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAo
IW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFj
ZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBv
ZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFj
cm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFj
ZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4K
KyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNy
by5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVh
bHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjpt
YWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9VTkRFRik7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9
IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1Nl
dC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpN
QUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYo
dG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9r
ZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0
b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsK
KworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9J
RiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0
aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAg
ICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYmxvY2suZm91bmRFbHNlR3JvdXAgPSB0cnVlOworICAgIGJsb2Nr
LnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFsaWRHcm91cDsKKyAgICBibG9jay5mb3VuZFZhbGlk
R3JvdXAgPSB0cnVlOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFm
dGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0
b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tp
cEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUg
d2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
RUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRH
cm91cCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KKyAg
ICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAg
ICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBleHByZXNzaW9u
ID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJl
c3Npb24gPT0gMDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7
Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOworCisg
ICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFs
dWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3RhY2sucG9wX2JhY2soKTsKKworICAg
IC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjZW5kaWYuCisgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAg
fQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7
CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKwor
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5k
bGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBw
cmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZl
KHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7Cisg
ICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BBUkVOLAorICAgICAgICBQUkFHTUFf
VkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0
cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOworICAgIGludCBzdGF0ZSA9IFBSQUdN
QV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2Vu
LT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgewor
ICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgUFJBR01B
X05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFs
aWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFs
aWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+
dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tl
bjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFJJR0hU
X1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJykn
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICB2YWxpZCA9IHZhbGlkICYmICgoc3Rh
dGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAvLyBFbXB0eSBwcmFnbWEuCisgICAgICAgICAgICAg
ICAgICAgICAgKHN0YXRlID09IExFRlRfUEFSRU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4K
KyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBX
aXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdt
YS4KKyAgICB7CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4t
PmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FWFRFTlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAg
IHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJ
T1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJ
RF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2Vu
LT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046CisgICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9C
RUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYm
IChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBt
RGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwg
YmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2Vu
KiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
VkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJF
UgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7
CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRv
aSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05V
TUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFu
ZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0
aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgewor
ICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAgICB9OworCisgICAg
Ym9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAgICBpbnQg
c3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlciht
VG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tl
bi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZJ
TEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB9CisKKyAgICBpZiAo
dmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIg
KyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
fQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1i
ZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6
ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29sIERpcmVjdGl2ZVBhcnNl
cjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgp
KSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJs
b2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9u
YWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9jayBibG9jazsKKyAgICBi
bG9jay50eXBlID0gdG9rZW4tPnZhbHVlOworICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxv
Y2F0aW9uOworCisgICAgaWYgKHNraXBwaW5nKCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNv
bmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAg
ICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9j
ayBpcyBza2lwcGVkLgorICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29u
ZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9z
dGljLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBi
bG9jay5za2lwQmxvY2sgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBE
aXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAg
aW50IGV4cHJlc3Npb24gPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhw
cmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Np
b25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBibG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7
CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9
CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFy
c2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwor
ICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0
LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigm
bWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsK
KyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJz
ZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5z
IGFmdGVyICNpZiBleHByZXNzaW9uLgorICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworaW50IERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpIHx8CisgICAgICAgICAgIChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpKTsKKworICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpbnQgZXhwcmVz
c2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBp
ZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAg
IH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjExNWEwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuaApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRl
ICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCisjaW5jbHVkZSAiU291cmNlTG9jYXRp
b24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGly
ZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xhc3MgRGlyZWN0aXZlUGFyc2Vy
IDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5p
emVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwK
KyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAg
ICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKworICAgIHZp
cnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOworCisgICAgdm9pZCBwYXJzZURp
cmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWYo
VG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2
b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFy
c2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4p
OworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0
ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOworCisgICAgYm9vbCBza2lwcGlu
ZygpIGNvbnN0OworICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbik7Cisg
ICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7CisgICAgaW50IHBhcnNlRXhw
cmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7CisKKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxCbG9j
aworICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKKyAgICAgICAgU291cmNlTG9jYXRp
b24gbG9jYXRpb247CisgICAgICAgIGJvb2wgc2tpcEJsb2NrOworICAgICAgICBib29sIHNraXBH
cm91cDsKKyAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRF
bHNlR3JvdXA7CisKKyAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKKyAgICAgICAgICAgIHNr
aXBCbG9jayhmYWxzZSksCisgICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAorICAgICAgICAg
ICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kRWxzZUdyb3VwKGZh
bHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAgIHN0ZDo6dmVjdG9yPENvbmRp
dGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOworICAgIFRva2VuaXplciogbVRva2VuaXpl
cjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3Rp
Y3M7CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Cit9OworCit9ICAv
LyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElW
RV9QQVJTRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmMzNzFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTAsMCArMSwxOTI4IEBACisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLworCisvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAK
KyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYsIDIwMDktMjAx
MCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBt
YXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2Yg
dGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVu
ZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNl
bGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmll
ZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVs
eSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24g
aXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwg
ZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGlu
ZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgor
ICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMg
TEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQor
ICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4g
ICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkg
b3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMg
c2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdo
dCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29t
ZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZp
bmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBP
TgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91
dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNk
ZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKKworLyogU2tlbGV0b24gbmFtZS4gICovCisj
ZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQdXJlIHBhcnNlcnMuICAqLwor
I2RlZmluZSBZWVBVUkUgMQorCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0gg
MAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCisvKiBVc2luZyBs
b2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRo
ZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlICAgICAg
ICAgcHBwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBsZXgKKyNkZWZpbmUgeXllcnJv
ciAgICAgICAgIHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHBwbHZhbAorI2RlZmlu
ZSB5eWNoYXIgICAgICAgICAgcHBjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICBwcGRlYnVn
CisjZGVmaW5lIHl5bmVycnMgICAgICAgICBwcG5lcnJzCisKKworLyogQ29weSB0aGUgZmlyc3Qg
cGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRo
aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBF
RElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1n
ZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBh
cnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1
ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVy
LmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBlZGVm
IF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNlbHNlCisjaW5j
bHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9N
U0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNf
REVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRv
a2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitz
dGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRp
YyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKwor
CisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZ
REVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAq
LworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVm
aW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAK
KyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRP
S0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisKKy8qIFRva2Vu
cy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyog
UHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3Ro
ZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2Vu
dHlwZSB7CisgICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1BfT1IgPSAyNTksCisgICAgIE9Q
X0FORCA9IDI2MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9QX0VRID0gMjYyLAorICAgICBP
UF9HRSA9IDI2MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9QX1JJR0hUID0gMjY1LAorICAg
ICBPUF9MRUZUID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAgfTsKKyNlbmRpZgorCisKKwor
I2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0
eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVm
aW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8K
KyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworLyogQ29weSB0aGUg
c2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKworI2lmZGVmIHNob3J0
CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZ
WVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5
eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQ
RV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgor
dHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lO
VDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZk
ZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxp
ZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVm
aW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisj
ICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5z
aWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZ
U0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYg
WVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkg
ZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBp
Zm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisK
Ky8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwor
I2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUp
ICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5k
aWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv
dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQo
bikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlp
KQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisj
aWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJz
ZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xz
LiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FM
TE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVp
bHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAg
IGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EK
KyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2Nh
CisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBk
ZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgX1NURExJQl9ICisjICAg
ICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlm
CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lm
eSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19G
UkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYg
WVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5
IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBh
IHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBz
YWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBh
IHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBp
bGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVu
ZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUg
WVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisj
ICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKKyAgICAg
ICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAorCSAgICAgJiYg
KGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIF9TVERMSUJf
SAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRl
ZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAhIGRlZmluZWQg
bWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWUZSRUUK
KyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmlu
ZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3Zv
aWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
IGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93
IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAor
ICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRlZmluZWQgWVlTVFlQRV9J
U19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBw
cm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MK
K3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKK307
CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0
YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXpl
b2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2Ug
dG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAg
Ki8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0
eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFY
SU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3Vy
Y2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNP
UFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9t
LCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZ
KFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpF
X1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJ
ICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZ
WUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRz
IG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZ
U0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBl
bGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9m
IHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2Nh
dGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NB
VEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJ
CQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5T
dGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19h
bGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykg
KyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAo
Knl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisK
KyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24g
c3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlMQVNUIC0tIExhc3QgaW5kZXgg
aW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQorCisvKiBZWU5UT0tFTlMgLS0g
TnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgMjcKKy8qIFlZTk5U
UyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICAzCisvKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5SVUxFUyAgMjYKKy8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDUy
CisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFY
VVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWdu
ZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRP
SykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVz
cG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNs
YXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYsICAgIDE5LCAgICAxNywgICAg
IDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAg
ICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAyMgor
fTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBS
SFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAg
ICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIzLCAgICAyNywKKyAgICAgIDMx
LCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMs
ICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAg
OTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMn
IFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Cit7CisgICAgICAy
OCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAgICAtMSwgICAgMjksICAgICA0
LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5LCAgICAtMSwgICAgMjksICAg
ICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAgMjksCisgICAgICAtMSwgICAg
MjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywgICAgMjksICAgIC0xLCAgICAy
OSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAg
ICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0x
LCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxOCwgICAgMjksICAg
IC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDIxLCAgICAyOSwKKyAg
ICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwg
ICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwgICAgMjksICAgIC0xLCAgICAx
OCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAtMSwgICAgMjUsICAgIDI5LCAg
ICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBy
dWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4NywgICAgOTQsICAgIDk1LCAg
ICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAgIDExMywgICAxMTYsICAgMTE5
LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAgMTM3LCAgIDE0MCwKKyAgICAg
MTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgsICAgMTgxCit9OworI2VuZGlm
CisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZ
WVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5V
TS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMs
IG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0K
K3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJDT05TVF9JTlQiLCAiT1BfT1Ii
LCAiT1BfQU5EIiwgIid8JyIsCisgICInXiciLCAiJyYnIiwgIk9QX05FIiwgIk9QX0VRIiwgIic8
JyIsICInPiciLCAiT1BfR0UiLCAiT1BfTEUiLAorICAiT1BfUklHSFQiLCAiT1BfTEVGVCIsICIn
KyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlVOQVJZIiwgIichJyIsCisgICInfici
LCAiJygnIiwgIicpJyIsICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCAwCit9Owor
I2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRl
cm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAs
ICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwg
ICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAyNjQsICAgMjY1LCAgIDI2
NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywgICAyNjcsICAgIDMzLCAg
IDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9s
IG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOQor
fTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBo
YW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIy
W10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAg
MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OworCisvKiBZWURFRkFDVFtT
VEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKKyAgIFNU
QVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRv
LiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAgICAg
MjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAg
IDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAg
MjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAg
IDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxF
IG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZ
UEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7Cisg
ICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgMTIs
ICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAgIDI3LCAgIC0xMSwgICAg
NDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCisgICAgICA0
NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDExNiwgICAxMzAsICAgMTQz
LCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAgMzcsICAg
IDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTExCit9OworCisvKiBZWVBH
T1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9
Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRBQkxFW1lZUEFDVFtTVEFU
RS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAor
ICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5
cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZpbmUgWVlUQUJM
RV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Cit7CisgICAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisgICAgICA1MSwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNCwK
KyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxNywgICAg
MTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTksICAg
IDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMgorfTsKKworc3RhdGlj
IGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
ICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxNywgICAg
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAgMCwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5Cit9OworCisjZGVm
aW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFy
ID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisj
ZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5
eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisKKy8qIExpa2Ug
WVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9y
YXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZ
RVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVy
c2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBp
biB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJp
c29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcwor
ICAgZGlzY3Vzc2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBk
ZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJv
bSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0
IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3
ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1
c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2Vu
ZGlmCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5l
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
VAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwK
KyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRm
IChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9j
KS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2Nv
bHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2
b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgn
IHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBk
ZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5l
IFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1
Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5U
RgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBS
SU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZ
RlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJ
CQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5
bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsg
XAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJ
CQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1
ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25z
dCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3lt
Ym9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAg
ICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICgh
eXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJ
TlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0
b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOwor
IyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFr
OworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlw
ZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFs
dWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7Cisj
ZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0
cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3lt
Ym9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7Cisg
IFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFj
a19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0
cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVf
aW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vsc2UKK3N0YXRpYyB2b2lk
Cit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5dHlwZV9pbnQxNiAqeXli
b3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgoreworICBZWUZQUklOVEYg
KHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90
dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJ
TlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitk
byB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQg
KChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhh
dCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZ
U1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRp
YyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlT
VFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2Vu
ZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2ln
bmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1
bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBm
b3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAo
c3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5
eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CisgICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5
eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAo
MCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVu
aW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICov
CitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYo
QXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0
aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9S
RURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERF
UFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJ
WVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFY
REVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBv
bmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4K
KworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1
bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZ
TUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBh
cml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRI
IDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5
c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAg
IGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9m
IFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0
aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNl
bmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVu
XTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYK
KyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYm
IGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlz
dHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5n
IHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoK
K3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRp
YyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAg
ICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5eWQgPSB5eWRlc3Q7Cisg
IGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAh
PSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYK
KyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250
ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVz
IGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhl
CisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxl
c3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFj
a3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRh
a2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBub3QgY29weTsgaW5z
dGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZl
IGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25z
dCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAgeworICAgICAgWVlT
SVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOworCisgICAgICBm
b3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAn
LCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAg
ICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwor
CSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQor
CSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkg
IGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJ
ICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0K
KworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1
cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29w
eSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9r
ZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
ICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKKyAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0
dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQorICAgY29waWVkLiAgQXMgYSBz
cGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCisgICBt
ZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJz
IGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5c3lu
dGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCit7Cisg
IGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXlu
ICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgeworICAgICAg
aW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgWVlTSVpFX1QgeXlzaXpl
MCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6
ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5eXNpemUxOworICAgICAgaW50IHl5c2l6ZV9v
dmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9
IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElN
VU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAwCisgICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0
ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCisJIGNvbnN0cnVjdGVk
IG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMi
KTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMi
KTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVk
ICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKKyMgZW5kaWYKKyAgICAgIGNo
YXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAqeXlmOworICAgICAgc3RhdGljIGNoYXIgY29u
c3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKKyAgICAg
IHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOworICAg
ICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7CisgICAgICBjaGFyIHl5Zm9y
bWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQor
CQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQorCQkgICAgICAgKiAo
c2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVj
dGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQg
bmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNLLiAgKi8KKyAgICAgIGludCB5eXhiZWdpbiA9
IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJv
dGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFT
VCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/
IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICBpbnQgeXljb3VudCA9IDE7CisKKyAgICAg
IHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOworICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlm
b3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8
IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9
IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJH
U19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3VudCA9IDE7CisJCXl5c2l6ZSA9IHl5c2l6ZTA7
CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7CisJCWJyZWFrOwor
CSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKKwkgICAgeXlz
aXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKKwkgICAgeXlzaXpl
X292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKwkgICAgeXlzaXplID0geXlzaXplMTsK
KwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKKwkgICAgeXlwcmVmaXgg
PSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOworICAgICAgeXlzaXpl
MSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5
eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisKKyAgICAgIGlmICh5
eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0laRV9NQVhJTVVNOworCisgICAgICBpZiAoeXly
ZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhl
IHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Ig
ZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhl
IHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKwkg
IGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKKwkgICAgewor
CSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQp
CisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisJCSAgeXlm
ICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB5eXArKzsKKwkJICB5eWYrKzsKKwkJ
fQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAgICB9Cit9CisjZW5kaWYgLyog
WVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRo
aXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBp
bnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQp
CisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5
eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZh
bHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0g
IkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwg
eXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVs
dDoKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3Np
bmctcHJvdG90eXBlcy4gICovCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0Vf
UEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFS
U0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMK
K2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsK
KyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZ
WVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2
b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2Ug
KENvbnRleHQgKmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyogVGhlIGxvb2thaGVhZCBzeW1i
b2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisgICAgLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKKworICAgIGludCB5eXN0
YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3Nh
Z2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFj
a3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisg
ICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVy
IHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxv
dworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhl
IHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwor
ICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAg
LyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5J
VERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAg
WVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAv
KiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJl
ci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJu
IHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGlu
ZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1
ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBj
aGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9U
IHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BT
VEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKworICAvKiBUaGUgbnVtYmVy
IG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRv
IHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9
IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOwor
ICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0
YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsK
KyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8g
YmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2Fz
dGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQg
dGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhl
IHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworICB5eXNzcCA9IHl5
c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdl
dCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVl
biBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8K
KyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRo
ZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICov
CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlv
dmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRo
ZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3Qg
Zm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZz
MSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNr
IHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRh
IGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAg
Y29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdo
dAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3Zl
cmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBz
aXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwK
KwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwor
ICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxP
Q0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5k
IHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0
YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsK
KyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1B
WERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24g
eXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlT
VEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhh
dXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFD
S19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRF
CisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9
CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5
c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAor
CQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKworICBpZiAo
eXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIGdvdG8geXliYWNrdXA7CisK
Ky8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3Vw
OgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3Rh
dGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24n
dCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQg
dG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlk
ZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFy
IDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9r
ZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtl
IHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZ
TEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAg
aWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVycmxhYjsKKyAg
ICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICAvKiBDb3Vu
dCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9y
CisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0t
OworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJ
TlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2Nh
cmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3Rh
dGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3Vy
cmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3Rh
dGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVj
ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBE
byBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJl
ZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAg
Ki8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1w
bGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4K
KworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJh
Z2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1
c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1
bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZv
aWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxp
emVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklO
VCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDI6CisKKyAgICB7
CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygx
KSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSArICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOToK
KworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5
dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgz
KV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwor
ICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNw
WygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMjQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAtICh5eXZzcFsoMikg
LSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2Mp
OworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKyAgLyogTm93IGBzaGlm
dCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAg
ICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5k
IHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5
bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAg
aWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVd
ID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAg
IHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3Rh
dGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJy
bGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJp
bmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3Rh
dHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAg
ICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAg
eworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIp
OworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJ
ICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAg
aWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAg
ICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXlt
c2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgewor
CQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkg
ICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2Mp
CisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hh
cik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJ
ICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlz
aXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNl
bmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAg
LyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRl
ciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlF
T0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkg
IGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsK
KwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5
eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8q
IEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRo
ZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycm9y
bGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJyb3JsYWI6
CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2
ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZv
cmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypDT05TVENP
TkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZ
RVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVy
cmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGgg
c3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgorICB5eWVy
cnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4g
ICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Cisg
ICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkg
IGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJP
UikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5
bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0
ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgICAgIGlm
ICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAgeXlkZXN0cnVjdCAoIkVycm9y
OiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgICAgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5dnNwID0geXlsdmFsOworCisK
KyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hp
ZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0geXluOwor
ICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVz
dWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlyZXN1
bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwg
WVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVz
IGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29udGV4dCwgWVlfKCJtZW1vcnkg
ZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICovCisj
ZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJIHl5dG9rZW4sICZ5eWx2
YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNs
ZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7Cisg
ICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5
c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJS
T1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVFICh5
eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJldHVy
biBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxw
LCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tl
biogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgICpsdmFscCA9IHN0
cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOworICAgICAgICB0eXBlID0gQ09O
U1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0
eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9
IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBPUF9O
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBPUF9FUTsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOworICAgICAgY2Fz
ZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJy
ZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6
IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwor
ICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUg
PSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAg
Y2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7
IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAn
fic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFr
OworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBj
dXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+
bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAg
eworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2Uo
VG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAg
Y29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0g
bUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9
IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChy
ZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlv
biwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyZDA1
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsxLDM0IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9Q
QVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VS
X0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3Mg
RGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgRXhwcmVz
c2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4
ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNlKFRva2VuKiB0
b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBE
aWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmVmYzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLnkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNv
bnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Np
b24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVwcm9jZXNzb3Ig
ZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQor
CisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0
ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
aW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5o
IgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNz
dHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBlZGVmIF9faW50
NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNlbHNlCisjaW5jbHVkZSA8
c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9NU0NfVkVS
CisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFS
RUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0
b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKyV9CisKKyVkZWZp
bmUgYXBpLnB1cmUKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNv
bnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5
eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4g
Q09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICde
JworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxlZnQgJzwnICc+JyBPUF9MRSBPUF9H
RQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAn
JScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAgIDogZXhwcmVzc2lvbiB7CisgICAg
ICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oJDEpOworICAgICAgICBZ
WUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lOVAorICAgIHwg
ZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJicgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9u
IE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAgIH0KKyAgICB8
IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7Cisg
ICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4nIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPCcg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAgfCBleHByZXNz
aW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8
PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJScgZXhwcmVz
c2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAg
Y29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZ
X1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHBy
ZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8
PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAg
ICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgewor
ICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVU5B
UlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Npb24gJXBy
ZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygnIGV4cHJlc3Np
b24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2ludCB5eWxleChZ
WVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisK
KyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tl
bi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAg
ICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAwKTsKKyAgICAg
ICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05F
OiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBl
ID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1Bf
R0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVh
azsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0
eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAg
ICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0g
JzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNh
c2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBi
cmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyon
OiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsK
KyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBl
ID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAg
ICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0
b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29u
dGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5
eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKwor
bmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhl
ciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciks
CisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25Q
YXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBj
b250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29u
dGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29u
dGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOwor
ICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAg
ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAg
ICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIKIAotI2luY2x1
ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFtZXNw
YWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQpLAotICAgICAg
bVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAgbUluZGV4KC0x
KSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAotICAgICAgbVN0
YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygw
KQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7
CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAgbUNv
dW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQobUluZGV4IDw9
IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNzZXJ0KG1Db3Vu
dCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/IGxl
bmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3RybGVu
KG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVhZChjaGFyKiBi
dWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUp
CiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1JbmRleDsKLSAg
ICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50
IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3RhcnRJbmRleCkg
JiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3aGlsZSAoKG5S
ZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAgICAgewotICAg
ICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkKLSAgICAgICAg
ICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgaW50IHNpemUg
PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNp
emUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFk
LCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAg
ICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKKwor
ICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVu
dCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0aFttUmVhZExv
Yy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBrU3RhdGVJbml0aWFsOgotICAg
ICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBlZWtDaGFy
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAg
ICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAnLycuCi0gICAgICAgICAgICAgICAg
ICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAgICAgICBnZXRD
aGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVC
bG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90IGEgY29tbWVudC4KLSAgICAg
ICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVMaW5lQ29tbWVudDoKLSAgICAg
ICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVm
W25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFsOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0
ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiAocGVla0NoYXIoKSA9
PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldENoYXIoKTsgICAvLyBF
YXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9ICcgJzsgIC8vIFJlcGxhY2Ug
Y29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRl
SW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFyZSBuZXZlciBza2lwcGVkLgotICAg
ICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK21SZWFkTG9jLnNJbmRleDsKKyAg
ICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBy
ZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hhcigpCi17Ci0gICAgaWYgKGVvZigp
KSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhdOwot
ICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8gU3dpdGNoIHRvIG5leHQgc3RyaW5n
IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgotICAgIGludCBsZW5ndGggPSBzdHJp
bmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciByZWFkIGZyb20gZW1wdHkgc3RyaW5n
LgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYgKCgobGVuZ3RoIDwgMCkgJiYgKHN0
clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVuZ3RoID4gMCkgJiYgKG1TaXplID09
IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLQotICAgIHJldHVybiBj
OwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50
IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUluZGV4OwotICAgIGludCBzaXplID0g
bVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAgICAvLyBSZXN0b3JlIHJlYWQgcG9z
aXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNpemUgPSBzaXplOwotICAgIHJldHVy
biBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRTdHJpbmcoKQotewotICAgIEFTU0VS
VChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAwOwotICAgIGRvCi0gICAgewotICAg
ICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkgJiYgaXNTdHJpbmdFbXB0eShtSW5k
ZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpCi17Ci0gICAg
QVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdb
bUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgcmV0
dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAmJiAoc3RyWzBdID09ICdcMCcpKTsK
LX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGluZGV4KQotewotICAgIEFTU0VSVChp
bmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGggPyBtTGVuZ3RoW2luZGV4XSA6IC0x
OworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogCisjaW5j
bHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAotLy8gUmVhZHMgdGhlIGdpdmVuIHNl
dCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8gU3RyaXBzIGNvbW1lbnRzLgorLy8g
SG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNsYXNzIElucHV0CiB7CiAgIHB1Ymxp
YzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBlbnVtIEVycm9yCi0gICAgewot
ICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JVbmV4cGVjdGVkRU9GCi0gICAgfTsK
LSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJvcjsgfQotCi0gICAgLy8gUmV0
dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGlu
dCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsKKyAgICBpbnQg
Y291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmco
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAgIGludCBsZW5n
dGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQogCi0gICAgLy8g
UmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8gYnVmLgotICAgIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAgLy8gSXQgcmVwbGFjZXMgZWFjaCBj
b21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25seSBvbmUgc3RyaW5nCi0gICAgLy8g
YXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBvcnR1bml0eSB0byB1cGRhdGUgdGhl
IHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1bCBkaWFnbm9zdGljIG1lc3NhZ2Vz
LgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIGludCByZWFkKGNo
YXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgotICAgIGVudW0gU3RhdGUKKyAgICBz
dHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0ZUluaXRpYWwsCi0gICAgICAgIGtT
dGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9ja0NvbW1lbnQKLSAgICB9OworICAg
ICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAgICAgICBpbnQgY0luZGV4OyAg
Ly8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7Ci0gICAgaW50IHBlZWtDaGFyKCk7
Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRoZSBuZXh0IG5vbi1lbXB0eSBzdHJp
bmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCBzdHJpbmcgaXMgZnVs
bHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmluZygpOwotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5LgotICAgIGJvb2wgaXNTdHJpbmdFbXB0
eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBzdHJp
bmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGZvciBudWxsLXRlcm1pbmF0ZWQg
c3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBpbmRleCk7CisgICAgICAgIExvY2F0
aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9OworICAgIGNvbnN0IExvY2F0
aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KIAorICBwcml2YXRlOgog
ICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAgY29uc3QgY2hhciogY29uc3QqIG1T
dHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0gICAgLy8gQ3VycmVudCByZWFkIHBv
c2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8gU2l6ZSBvZiBzdHJpbmcgYWxyZWFk
eSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKIAotICAgIC8vIEN1cnJl
bnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJvcjsKLSAgICBTdGF0ZSBtU3RhdGU7
CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK0xl
eGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbjsK
KworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkxleGVyKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNw
YWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5Ni4uYjJlMzA4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwxNyBAQAogCiAjaW5jbHVkZSAiTWFj
cm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgInN0bF91dGlscy5oIgor
I2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1NYWNybzo6TWFjcm8oVHlw
ZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiByZXBsYWNl
bWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1lKG5hbWUpLAotICAgICAgbVBh
cmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1lbnRzKHJlcGxhY2VtZW50cykK
LXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8m
IG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsKLQotICAgIGlmIChtUGFyYW1ldGVy
cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFtZXRlcnMtPmJlZ2luKCksIG1Q
YXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVBhcmFtZXRlcnM7
Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAgewotICAgICAgICBzdGQ6OmZv
cl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNlbWVudHMtPmVuZCgpLCBEZWxl
dGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwotICAgIH0KKyAgICByZXR1cm4g
KHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFtZSkg
JiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKKyAgICAg
ICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCmluZGV4IGUyNDMzMDYuLjdlYzAx
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDM4IEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
SF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9y
PgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgot
CiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVjdCBUb2tlbjsKKworc3RydWN0
IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAgICB7CiAgICAgICAgIGtUeXBl
T2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4g
UmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmluZWQoZmFsc2UpLCBkaXNhYmxl
ZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IE1hY3Jv
JiBvdGhlcikgY29uc3Q7CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9pbnRlciBwYXJh
bWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0cmluZyogbmFt
ZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICBUb2tlblZl
Y3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9yKiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBUb2tlblZlY3Rv
ciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsgfQotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQotICAgIFR5cGUg
bVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9yKiBtUGFyYW1l
dGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29sIHByZWRlZmlu
ZWQ7CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAgVHlwZSB0eXBlOworICAgIHN0
ZDo6c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIFJlcGxhY2Vt
ZW50cyByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcs
IE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU0ZDQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwzNjkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHBwCit7
CisKK2NsYXNzIFRva2VuTGV4ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyBwdWJsaWM6CisgICAgdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gVG9rZW5WZWN0b3I7CisKKyAgICBUb2tlbkxleGVyKFRv
a2VuVmVjdG9yKiB0b2tlbnMpCisgICAgeworICAgICAgICB0b2tlbnMtPnN3YXAobVRva2Vucyk7
CisgICAgICAgIG1JdGVyID0gbVRva2Vucy5iZWdpbigpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgaWYgKG1JdGVyID09IG1Ub2tl
bnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuLT5yZXNldCgpOworICAgICAg
ICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6TEFTVDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgICp0b2tlbiA9ICptSXRlcisrOworICAgICAgICB9Cisg
ICAgfQorCisgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5M
ZXhlcik7CisKKyAgICBUb2tlblZlY3RvciBtVG9rZW5zOworICAgIFRva2VuVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBtSXRlcjsKK307CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4
ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9T
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGlj
cykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBt
RGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK01hY3JvRXhwYW5kZXI6On5NYWNyb0V4
cGFuZGVyKCkKK3sKKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkgcG9wTWFjcm8o
KTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHdo
aWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4odG9rZW4pOworCisgICAgICAgIGlm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGlmICh0b2tlbi0+ZXhwYW5zaW9uRGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0
LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1NYWNyb1NldC0+ZW5k
KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25zdCBNYWNybyYgbWFjcm8gPSBp
dGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBhbmRlZCwgaXQgaXMg
bmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5zaW9uRGlzYWJsZWQo
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1hY3Jv
LnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVmdFBhcmVuKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0
aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAgICAvLyB0aGlzIG1hY3JvIHNo
b3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9F
eHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAgIGlmIChtUmVzZXJ2ZVRva2Vu
LmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9rZW47CisgICAgICAg
IG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisgICAgd2hpbGUgKCFtQ29udGV4
dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5KCkpCisgICAgewor
ICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5iYWNrKCktPmdldCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Cisg
ICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRv
a2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAg
TWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgICAgIGNv
bnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5pbmRleCA+PSAwKTsKKyAg
ICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9r
ZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9r
ZW4uZ2V0KCkpOworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikp
OworICAgIH0KK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigp
Cit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgIGJvb2wg
bHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7CisgICAgdW5nZXRUb2tlbih0b2tlbik7CisKKyAg
ICByZXR1cm4gbHBhcmVuOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25z
dCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKQoreworICAgIGFzc2VydCgh
bWFjcm8uZGlzYWJsZWQpOworICAgIGFzc2VydCghaWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxl
ZCgpKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsK
KyAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9PSBtYWNyby5uYW1lKTsKKworICAgIHN0ZDo6
dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisgICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywg
aWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9m
ZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVlOworCisgICAgTWFjcm9Db250
ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKKyAgICBjb250ZXh0LT5tYWNybyA9ICZt
YWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOworICAg
IG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKK3sKKyAgICBhc3NlcnQoIW1Db250ZXh0
U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0
YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICBhc3NlcnQo
Y29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7
CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7CisgICAgZGVsZXRlIGNvbnRl
eHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+
KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOworICAgIGlmICht
YWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50
cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOworCisgICAgICAgIGlmIChtYWNy
by5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0xpbmUgPSAiX19MSU5FX18iOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKKworICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2Vt
ZW50cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVu
dHMtPmZyb250KCk7CisgICAgICAgICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAg
ICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24ubGluZTsKKyAgICAgICAg
ICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICAgICAgc3Ry
ZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmlsZTsKKyAgICAgICAgICAgICAgICByZXBsLnZh
bHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1
bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJnczsKKyAgICAgICAgYXJncy5y
ZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0TWFj
cm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVu
dHMpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRzLT5z
aXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5h
dChpKTsKKyAgICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGluaGVyaXRzIHRoZSBwYWRkaW5n
CisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRva2VuLgorICAg
ICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFydE9mTGluZSgp
KTsKKyAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZpZXIuaGFzTGVh
ZGluZ1NwYWNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlcGwubG9jYXRpb24gPSBpZGVudGlm
aWVyLmxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYWNyb0V4
cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFy
Z3MpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKyAgICBhc3Nl
cnQodG9rZW4udHlwZSA9PSAnKCcpOworCisgICAgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkp
OworICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7ICkKKyAgICB7
CisgICAgICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFs
dWUpOworICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRva2VuLgorICAgICAgICAgICAg
dW5nZXRUb2tlbih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBv
ZiB0aGUgY3VycmVudCBhcmd1bWVudC4KKyAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICArK29wZW5QYXJlbnM7Cisg
ICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlICcpJzoKKyAgICAgICAgICAgIC0tb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0g
b3BlblBhcmVucyAhPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnLCc6
CisgICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBi
eSBjb21tYSB0b2tlbnMsIGJ1dAorICAgICAgICAgICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3
ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAorICAgICAgICAgICAgLy8gc2Vw
ZXJhdGUgYXJndW1lbnRzLgorICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+
cHVzaF9iYWNrKE1hY3JvQXJnKCkpOworICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzQXJnKQorICAgICAgICB7CisgICAgICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFj
aygpOworICAgICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRo
ZSBhcmd1bWVudC4KKyAgICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVh
ZGluZ1NwYWNlKGZhbHNlKTsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAg
ICAgICB9CisgICAgfQorCisgICAgY29uc3QgTWFjcm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1h
Y3JvLnBhcmFtZXRlcnM7CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1l
bnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCisgICAgaWYgKHBhcmFtcy5lbXB0
eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0eSgpKQorICAg
IHsKKyAgICAgICAgYXJncy0+Y2xlYXIoKTsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgdGhlIG51
bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFj
cm8ucGFyYW1ldGVycy5zaXplKCkgPworICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RP
T19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJH
UzsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24s
IGlkZW50aWZpZXIudmFsdWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCisgICAgLy8g
VGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkg
YXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgTWFjcm9Bcmcm
IGFyZyA9IGFyZ3MtPmF0KGkpOworICAgICAgICBUb2tlbkxleGVyIGxleGVyKCZhcmcpOworICAg
ICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3Rp
Y3MpOworCisgICAgICAgIGFyZy5jbGVhcigpOworICAgICAgICBleHBhbmRlci5sZXgoJnRva2Vu
KTsKKyAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAgICAgICAgICAgZXhwYW5kZXIu
bGV4KCZ0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNbaV07CisgICAgICAgIGlmIChy
ZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
cGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1pemUgdGhpcy4KKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1l
LgorICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBs
YWNlbWVudCB0b2tlbi4KKyAgICAgICAgTWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCks
IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudmFsdWUpOworICAgICAgICBpZiAoaXRlciA9
PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNl
bWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMu
YmVnaW4oKSwgaXRlcik7CisgICAgICAgIGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBhcmdzW2lBcmdd
OworICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpUmVwbCA9IHJlcGxhY2VtZW50cy0+c2l6
ZSgpOworICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBsYWNlbWVudHMtPmVuZCgpLCBh
cmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKKyAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHRva2Vu
IGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCisgICAgICAgIC8vIG1hY3JvIHJlcGxh
Y2VtZW50IHRva2VuLgorICAgICAgICByZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5zZXRIYXNMZWFk
aW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgfQorfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDRlYmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisjZGVmaW5lIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIK
KyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25v
c3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGlj
OgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigpOwor
CisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgdm9pZCBn
ZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tlbiYg
dG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAgIGJvb2wgcHVz
aE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOworICAg
IHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29sIGNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhjb25z
dCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNyb0NvbnRleHQK
KyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc2l6ZV90IGluZGV4
OworICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworCisgICAgICAgIE1h
Y3JvQ29udGV4dCgpIDogbWFjcm8oMCksIGluZGV4KDApIHsgfQorICAgICAgICBib29sIGVtcHR5
KCkgY29uc3QgeyByZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsgfQorICAgICAg
ICBjb25zdCBUb2tlbiYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4KytdOyB9Cisg
ICAgICAgIHZvaWQgdW5nZXQoKSB7IC0taW5kZXg7IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1M
ZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0
ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVS
X0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCmluZGV4IGVm
NDllNTcuLjIxOTAxZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29y
LmNwcApAQCAtNiw0NyArNiwxMDggQEAKIAogI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgogCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVh
bT4KIAotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVk
ZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNy
b0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
IAogbmFtZXNwYWNlIHBwCiB7CiAKLVByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKCkgOiBtQ29u
dGV4dChOVUxMKQorc3RydWN0IFByZXByb2Nlc3NvckltcGwKIHsKKyAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9TZXQ7CisgICAgVG9rZW5pemVyIHRva2Vu
aXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFyc2VyOworICAgIE1hY3JvRXhw
YW5kZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXByb2Nlc3NvckltcGwoRGlhZ25vc3RpY3Mq
IGRpYWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAorICAgICAgICB0b2tlbml6ZXIo
ZGlhZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5pemVyLCAmbWFjcm9TZXQsIGRp
YWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBtYWNyb0V4cGFuZGVyKCZkaXJlY3RpdmVQ
YXJzZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7CisgICAgfQorfTsKKworUHJlcHJvY2Vzc29y
OjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikKK3sKKyAgICBt
SW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNzLCBkaXJlY3RpdmVIYW5kbGVy
KTsKIH0KIAogUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKIHsKLSAgICBkZWxldGUgbUNv
bnRleHQ7CisgICAgZGVsZXRlIG1JbXBsOwogfQogCi1ib29sIFByZXByb2Nlc3Nvcjo6aW5pdCgp
Citib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBsZW5ndGhbXSkKIHsKLSAgICBtQ29udGV4dCA9IG5ldyBDb250ZXh0OwotICAg
IHJldHVybiBtQ29udGV4dC0+aW5pdCgpOworICAgIHN0YXRpYyBjb25zdCBpbnQga0dMU0xWZXJz
aW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0YW5kYXJkIHByZS1kZWZpbmVkIG1hY3Jvcy4KKyAg
ICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19G
SUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19WRVJTSU9OX18iLCBrR0xTTFZlcnNp
b24pOworICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOworCisgICAgcmV0dXJuIG1JbXBs
LT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQogCi1ib29sIFByZXBy
b2Nlc3Nvcjo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGludCBsZW5ndGhbXSkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyhjb25z
dCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChz
dHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgIHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUg
PSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOwogCi0g
ICAgcmVzZXQoKTsKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1
ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBu
YW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOwogCi0gICAgcmV0
dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgJm1Ub2tlbnMpOwor
ICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nlc3Nv
cjo6cmVzZXQoKQordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7Ci0gICAg
c3RkOjpmb3JfZWFjaChtVG9rZW5zLmJlZ2luKCksIG1Ub2tlbnMuZW5kKCksIERlbGV0ZSgpKTsK
LSAgICBtVG9rZW5zLmNsZWFyKCk7CisgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7CisgICAg
d2hpbGUgKCF2YWxpZFRva2VuKQorICAgIHsKKyAgICAgICAgbUltcGwtPm1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5nIGludGVybmFsIHByZXByb2Nlc3Np
bmcgdG9rZW5zLgorICAgICAgICAgIC8vIENvbnZlcnQgcHJlcHJvY2Vzc2luZyB0b2tlbnMgdG8g
Y29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAorICAgICAgICAgIC8vIGRpYWdub3N0aWNzLgorICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAg
ICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
TlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFsaWRUb2tlbiA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCmluZGV4
IDg4NWJiNzAuLjVmZTM1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oCkBAIC03LDM0ICs3LDQxIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9I
XwogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgor
I2luY2x1ZGUgInBwX3V0aWxzLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0
OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOworc3RydWN0IFBy
ZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47CiAKIGNsYXNzIFByZXByb2Nlc3Nvcgogewog
ICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7CisgICAgUHJlcHJvY2Vzc29yKERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CiAg
ICAgflByZXByb2Nlc3NvcigpOwogCi0gICAgYm9vbCBpbml0KCk7Ci0KLSAgICBib29sIHByb2Nl
c3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5i
ZWdpbigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5z
LmVuZCgpOyB9CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBzcGVjaWZp
ZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6IHNwZWNp
ZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGggaXMgTlVM
TCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgLy8g
SWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8gYW4gYXJy
YXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0aGUgY29y
cmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50IGluIHRo
ZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLyBjb3Jy
ZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRlIHRoYXQg
dGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGluaXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
KyAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCisgICAgdm9pZCBwcmVkZWZpbmVNYWNy
byhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOworCisgICAgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9j
ZXNzb3IpOwotCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi0gICAgdm9pZCBy
ZXNldCgpOworICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwog
Ci0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAgVG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91
dHB1dC4KKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKIH07CiAKIH0gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJj
ZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmlsZSgwKSwgbGlu
ZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmlsZShmKSwgbGlu
ZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxlKSAmJiAobGlu
ZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBpbnQgbGluZTsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywg
Y29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMs
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJo
cyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKaW5k
ZXggYTJlNzU5Yy4uOTYwMzgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApAQCAt
Niw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5
cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4g
Yml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRp
b25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRv
a2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNl
dCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYg
a0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBs
b2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9p
ZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmls
ZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAg
aWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5l
KSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBv
dGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAg
ICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVl
ID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBp
bnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwK
LSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0
QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxh
Z3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9T
VEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7
Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAo
c3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRF
eHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBG
TE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoo
dG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
b3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAi
ICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8v
IG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oCmluZGV4IDRmNWExMmIuLjUyMzEwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApA
QCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8K
ICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3Ry
ZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVz
cGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAg
ICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRp
b24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihM
b2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7
CisgICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9m
IHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3Ry
aW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAK
LSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAg
IGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmlu
ZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAor
ICAgICAgICBDT05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUb2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAg
ICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9Q
X0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAg
ICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAg
ICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1Bf
RElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJ
R04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAg
ICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAogCi0gICAgTG9jYXRp
b24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOwor
ICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgorICAgICAgICAvLyBUaGVzZSB0
eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCisgICAgICAgIC8v
IFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBmb3IgdGhlbS4K
KyAgICAgICAgUFBfSEFTSCwKKyAgICAgICAgUFBfTlVNQkVSLAorICAgICAgICBQUF9PVEhFUgor
ICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0ZfTElORSAg
ID0gMSA8PCAwLAorICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEsCisgICAgICAg
IEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgorICAgIH07CisKKyAgICBUb2tlbigpIDogdHlw
ZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxl
YWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVy
biAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0
T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7
IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0
SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgYm9vbCBleHBhbnNpb25EaXNhYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkgIT0gMDsgfQor
ICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKKworICAgIGludCB0
eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlv
bjsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9r
ZW4qPiBUb2tlblZlY3RvcjsKLXR5cGVkZWYgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIFRv
a2VuSXRlcmF0b3I7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2VuJiBsaHMsIGNv
bnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQor
eworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQogCiBleHRlcm4gc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pOwogCiB9
ICAvLyBuYW1lcHNhY2UgcHAKICNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
X0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmE4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwCkBAIC0wLDAgKzEsMjM0NSBAQAorI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNl
ci5zaC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9Ub2tlbml6ZXIuY3BwIgorCisj
ZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIg
Z2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlf
RkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNk
ZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9W
RVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVh
bCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICov
CisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0
eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRf
SAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1h
eSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19T
VERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENf
TElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0
aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBf
X1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlm
CisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0
eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZf
dDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4
X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxzZQordHlwZWRl
ZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZf
dDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4
X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5
cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBDOTkgKi8KKwor
LyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmlu
ZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01J
TgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lm
bmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2
NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAg
ICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01B
WCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmlu
ZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJ
TlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisj
aWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVV
KQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAg
ICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisK
KyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlm
aWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisj
ZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAq
LworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKyNlbHNlCisj
ZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAq
LworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwg
cG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVzZSBh
cyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAqIHdl
IHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5j
ZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5z
aWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICov
CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252
ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBh
cmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWct
Pnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWct
Pnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQg
eXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVi
dWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91
Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3Rpbmcg
Y3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2Yg
QkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKKworLyog
VHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBi
ZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUg
WVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CisgKiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5l
IFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9T
VEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0
YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsg
c3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5n
IGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlz
Y2FubmVyICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9m
IGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2RlZmluZSBZ
WV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJn
ZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZm
ZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikg
KiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJf
U1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKK3R5cGVkZWYgc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2VuZGlmCisKKyNkZWZpbmUgRU9C
X0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVm
aW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4p
CisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVy
cyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
KwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
ID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVG
T1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICgg
MCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlz
Y2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBF
REVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNpZm5k
ZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVS
X1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7
CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZf
cG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUg
b2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAq
IGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVy
IG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkg
KiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAi
b3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBj
YW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICog
ZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0
aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYg
d2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQor
CSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5w
dXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZl
OworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcg
b2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5l
eHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisg
ICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlf
YnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0
byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5k
IG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3Rh
dHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFM
IDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRl
eHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5E
SU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20g
dGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1
bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUg
YmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNo
YW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQg
dGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWlu
IGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElO
RyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8q
IFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGlu
IHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9y
ZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9m
IHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNl
ZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9y
IHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2Rl
ZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFU
RSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3ZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHBvcF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfbG9hZF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfaW5pdF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFy
ICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0
ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxsb2MgKHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9z
aXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVy
CisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJ
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsg
XAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsg
XAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwK
KyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9s
OyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHBwd3JhcChu
KSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9D
SEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5dGV4dF9wdHIg
eXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJh
bnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Citz
dGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0
aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1h
dGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5
eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRf
cHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5
eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5
X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKKyNkZWZpbmUgWVlf
RU5EX09GX0JVRkZFUiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2Fu
bmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1Y3QgeXlfdHJh
bnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50MzJfdCB5eV9u
eHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbODRdID0KKyAg
ICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAzNiwgICAzNCwg
ICAzNSwgICAzNSwgICAzMywKKyAgICAgICAgNywgICAzMywgICAzMywgICAzMywgICAzMywgICAz
MywgICAzMywgICAzMywgICAzMywgICAgOSwKKyAgICAgICAgOSwgICAzMywgICAzMywgICAzMywg
ICAgOCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKKyAgICAgICAgNCwgICAzNCwgICAz
NSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKKyAgICAgICAxMywg
ICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwgICAxMSwKKyAg
ICAgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAxNSwgICAgOCwg
ICAzMSwKKyAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwgICAxMSwgICAx
MCwgICAxMSwgICAgMSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAxMCwgICAgMAorICAgIH0gOwor
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIs
ICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAg
IDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCisgICAgICAgIDksICAgMTAsICAgMTEs
ICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAg
MTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCisgICAg
ICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAg
MjEsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjQsICAgMjMsICAgMjMsCisgICAgICAgIDksICAgIDEsICAgIDksICAgMjUsICAgMjMs
ICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAgICAyMiwgICAyMSwgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKKyAgICAg
ICAyMywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAg
IDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAg
ICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1OSwgIDE0NSwg
IDEyOCwKKyAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwgICAyNSwgICAz
MCwgICAyOSwgICAzNiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAgMCwgICAxNiwg
ICA0NywgICAgMCwgIDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3MywgIDE1OSwgIDE1OSwgIDE1
OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAgIDE1OSwgIDE1OSwgICA2MSwg
IDE1OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKKyAgICAgICA5NSwgICA2
OCwgICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1OSwKKyAgICAg
IDE1OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwgIDExMCwgICAg
MCwKKyAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1OSwgIDEwMSwg
ICA5NywgIDExMiwKKyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwgIDE0NSwgIDE1
MCwgIDE1MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzg5
XSA9CisgICAgeyAgIDAsCisgICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgMjAsICAgODMsICAgODMs
ICAgODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCisgICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAsICAgMjAsICAg
NDcsCisgICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsICAg
NDMsICAgNDMsICAgNjcsICAgODcsCisgICAgICAgNDcsICAgNTAsICAgODMsICAgNTEsICAgODgs
ICAgODMsICAgODMsICAgODMsICAgNjksICAgNzIsCisgICAgICAgODMsICAgODMsICAgIDAsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgNiwgICAgNywgICAg
OCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKKyAgICAgICAxNiwg
ICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAg
ICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAzMCwgICAyOSwg
ICAzMCwKKyAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwgICA0MSwgICA3
NywgICA0NCwgICA0MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0MywgICA0Mywg
ICA0MywgICA0NiwgICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0OCwgICA0OSwgICA1NCwgICA1
NSwgICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAgICA1MywgICA1MywgICA1Mywg
ICA1NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKKyAgICAgICA0OSwgICA0
OSwgICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1MCwKKyAgICAg
ICA1MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwgICA3MSwgICA3
MSwKKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1MCwgICA1MCwg
ICA1MCwgICA1MCwKKworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDczLCAg
IDczLCAgIDgzLCAgIDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDY3LCAgIDY3LCAgIDY3
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAgIDc4LCAgIDc4LCAgIDgzLCAg
IDgzLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAorICAgICAgIDM1LCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAg
IDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAgIDY0LCAgIDY0
LAorICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1LCAgIDgzLCAg
ICA1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMTg2
XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCisgICAgICAgMTMsICAg
MTYsICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAgMTYsCisgICAg
ICAgMjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjAsICAg
NTQsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAgMjAsICAgMjAs
ICAgMjAsICAgMjAsCisgICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsICAgMjcsICAg
NzMsICAgNzMsICAgNzMsICAgMjEsCisgICAgICAgNDksICAgNDksICAgMjcsICAgNDMsICAgMzIs
ICAgNDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCisgICAgICAgNTIsICAgNDMsICAgNDMsICAg
NDMsICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCisgICAgICAgNTIsICAgNTIs
ICAgNzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAg
ICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwgICA3OSwgICA1
MSwKKyAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3OCwgICA3OCwg
ICAyMywgICA2NywKKyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwgICA2OSwgICA2
OSwgICA3MiwgICA3MiwgICAxNSwKKyAgICAgICAxMiwgICA3MiwgICA3MiwgICA3MiwgICA4MSwg
ICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKKyAgICAgICA4NywgICAgNywg
ICA4NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywKKyAgICAgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCisv
KiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAor
ICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJF
SkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9y
ZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZ
WV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNz
b3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBH
cmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5
LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2Vu
ZXJhdGVfcGFyc2VyLnNoLgorKi8KKworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dO
VUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3Ig
ZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3Jl
dHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUgQ09NTUVOVCAx
CisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0KgorCisvKiBI
b2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVj
dCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkg
ZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0
IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFu
dCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNp
emVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAg
IFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJh
eS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFyczsKKyAgICBp
bnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAg
ICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAg
ICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsK
KyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGlu
dCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRl
eHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAg
IFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07
IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVz
ZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0
cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9y
CisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBw
cGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZ
WV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vz
c29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9u
LXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0
cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBw
cGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
Cit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJh
bSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2lu
dCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlv
biAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRl
cm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5
Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vu
ZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNo
IHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNo
ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2Vk
IHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVM
J3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndyaXRlKCB5
eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0
dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVM
TCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcq
JzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAg
ICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1
ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAo
Y2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlf
RkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3Vs
dCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICgg
KHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlp
bikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlf
RkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJl
YWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9
IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBj
b3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qg
d2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNh
dXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0
ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkg
cmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBz
dGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lO
Q1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBh
IGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRB
TF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKwor
LyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8K
KworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5l
IHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVm
IFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCBwcGxleCBc
CisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9j
X3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4
IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXls
bG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisK
Ky8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5
dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VT
RVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVj
dXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZp
bmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZ
WV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2Vz
IGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUg
eXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lz
dGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAgICB5eWx2YWwg
PSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisKKwlpZiAoICF5
eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRlZiBZWV9VU0VS
X0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYg
KCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91
dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQlwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJ
fQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisKKwl3aGlsZSAo
IDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9j
ID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
CQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxh
YmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICgg
eXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6
IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNl
IDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVudCAqLworLyog
TGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKy8qIFRoZSBj
b21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2UgMjoKK1lZX1JV
TEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVM
RV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFL
CitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyAr
K3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCVlZ
X0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlk
IGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/
IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZWV9CUkVBSwor
Y2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZX0JSRUFLCisv
KiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJl
IGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQg
ZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQor
CVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVB
SworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSwor
Y2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FE
RF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2Fz
ZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxF
X1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAg
ICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdc
bic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsK
K30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRF
X0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBm
b3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBt
YW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQg
c0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2Nh
bkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5
IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8v
IGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsg
c2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGlu
ZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9j
LT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NU
QVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5
eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAorRUNI
TzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3Vu
dCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAq
LworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmls
ZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVu
ZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291
cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFz
c3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3Vy
CisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1
c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBh
CisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNl
LgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZv
ciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0Ig
aW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBi
ZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBz
dGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIg
c3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJ
CSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJ
ICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19z
dGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24n
dCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5n
IChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1
c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5
X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2Fu
bmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJ
aWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLwor
CQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7
CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2Un
dmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxm
KSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUK
KwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlf
TlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRF
X0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJ
Z290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0t
bm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAv
KiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxleCAqLworCisv
KiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisg
KiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNU
X01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZy
b20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxl
CisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJcmVn
aXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWct
Pnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3Qg
dHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7
CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAq
IHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VO
RF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0
ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJ
CQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVh
ZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2Yg
YnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5
Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsg
KytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQor
CQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4g
RU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJewor
CQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAw
ICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwor
CisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJ
CVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1
Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7
CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWludCBuZXdfc2l6
ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWIt
Pnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkv
KiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZv
aWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJ
fQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJ
CQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9G
QVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JF
QURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAo
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJ
CQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlp
ZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09
IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJ
CXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0K
KwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYg
KCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBu
ZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9j
aGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hh
ciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9
IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJl
YWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3Vy
cmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdp
c3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0g
OiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJ
eworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
KwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwly
ZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0
byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lz
CisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICov
CisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBp
bnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBv
cHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0
YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0g
eXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19q
YW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lm
ZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisj
ZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
KQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdh
bnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJh
Y3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhp
dCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
KwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAn
XDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQlpbnQgb2Zmc2V0
ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVm
X3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJ
CXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJl
Y2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQor
CQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRj
aGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0
KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNv
IGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9P
Rl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJ
CQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKwor
CQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5
eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2Nw
bHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UKKwkJCQkJcmV0
dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25l
ZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJ
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJ
LyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBub3Rl
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJ
TklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Cisg
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5j
dGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJcHBw
dXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVy
ICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCisJ
LyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJp
bmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlz
IGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBp
dCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2xv
YWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hh
cnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRf
cHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJ
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2NhdGUg
YW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXpl
IGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVG
RkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZl
cigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0
byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAq
IHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWIt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisKKwly
ZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVm
ZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQor
CQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBp
ZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQlwcGZy
ZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJlZSgodm9pZCAq
KSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBh
IGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4g
b25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgp
IG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVG
RkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworeworCWlu
dCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKwor
CWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAg
IC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBf
cHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9n
ZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJl
c2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJF
TlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlf
YnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQg
Y2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCisg
KiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlf
Q1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9j
aGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1
ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4K
KwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZi
LT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5l
dyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1
cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBp
ZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9t
IHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsK
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1c2gg
aWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVO
VF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0
ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVu
dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlwcF9kZWxldGVf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0t
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJ
CXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0
IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBw
dXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55eV9idWZmZXJf
c3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMs
IHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVk
IGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlh
dGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9j
ID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAx
KXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUg
cHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsK
KworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJl
YWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVy
KTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJ
CS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9z
dGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51
bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisg
KiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNp
emUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChj
aGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZ
X0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6
ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZv
ciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBw
YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlm
ICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBf
c2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIi
IHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYg
PSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAw
OworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2
ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlwcF9zd2l0Y2hfdG9fYnVmZmVy
KGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4gcHBfc2Nhbl9i
eXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworfQorCisvKiogU2V0dXAgdGhl
IGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2Fs
bCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisg
KiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhl
IG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1
ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxs
IGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5
Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwor
CWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsg
KytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVm
W195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSBwcF9zY2Fu
X2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8g
Z3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3
aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1
cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlM
VVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
KiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRl
cnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Cit9CisKKy8qIFJl
ZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLworCisjdW5k
ZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFj
cm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcp
O1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFy
ID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5
eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKy8qIEFj
Y2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICov
CisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworWVlfRVhUUkFfVFlQRSBw
cGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5ZXh0cmE7
Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisv
KiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQorCisvKiogR2V0
IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJl
dHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X291dCAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitjaGFyICpwcGdl
dF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQor
CisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNo
ZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNl
cl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9k
ZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJh
bSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBi
dWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAg
ICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOworfQor
CisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfY29s
dW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAg
LyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJv
ciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisg
ICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0
cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIu
CisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKKyAqLwor
dm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3Ry
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91dF9zdHIgOworfQorCitp
bnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9m
bGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFj
Y2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisKK1lZU1RZUEUgKiBwcGdl
dF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsdmFsOworfQor
Cit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9CisKK1lZTFRZUEUgKnBw
Z2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxsb2M7Cit9
CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Cit9CisgICAgCisv
KiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNl
IGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworICogdGhlIE9OTFkgcmVl
bnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0
IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFy
YXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLworCitpbnQgcHBsZXhfaW5p
dCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMg
PT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2Yo
IHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09
IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4g
eXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHBwbGV4X2luaXRf
ZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxv
d3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBh
cmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEg
c2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlz
IHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMg
b3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0
IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJh
IGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNl
cl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwg
JmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAg
ICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisJCisgICAgKnB0
cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRz
X3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cisg
ICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgorICAgIHl5
X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0
KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAg
ICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworICAgIAor
ICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworc3Rh
dGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgLyog
SW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5u
ZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCks
IHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5eWctPnl5X2J1ZmZlcl9z
dGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKyAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7
CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0ID0gMDsKKworICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRo
ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisKKy8qIERlZmluZWQgaW4g
bWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsKKyAgICB5eW91
dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAgeXlvdXQgPSAo
RklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVy
cm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogcHBsZXhfaW5pdCgp
CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJv
dGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLworaW50IHBwbGV4X2Rl
c3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogUG9wIHRoZSBidWZmZXIg
c3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVG
RkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlw
cGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJf
c3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNr
LiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Cisg
ICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGds
b2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRo
ZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2ls
bCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CisKKyAgICAvKiBE
ZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLworICAgIHBwZnJlZSAo
IHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0
dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNp
Zm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwg
eXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsK
K30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9z
dHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0
ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJldHVybiBuOwor
fQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQg
KnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29t
bW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMg
cG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMu
ICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBD
KysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0
byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3Vn
aCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAo
Y2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBwcHJlYWxs
b2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5
dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0
aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAg
ZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlm
IChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmlu
ZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lk
IFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29s
dW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisg
ICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRM
aW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5kbGUpOwor
fQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0b2tlbi0+dHlw
ZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAgICB0
b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQu
bGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4n
OworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2Up
OworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29sIFRva2VuaXpl
cjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiBwcGxleF9p
bml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRv
a2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisg
ICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRs
ZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGEyODgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUgIklucHV0Lmgi
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6IHB1YmxpYyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7CisgICAgICAgIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsKKyAgICAgICAg
Ly8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxvY2F0aW9uIHNo
b3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6Om1SZWFkTG9j
IGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlmIHRleHQgaXMg
YnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAgICBJbnB1dDo6
TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsKKyAgICAgICAg
Ym9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAg
dm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50
IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9v
bCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQq
IG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8g
U2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxYzczMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCkBAIC0wLDAgKzEsMzI5IEBACisvKgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3Ig
R0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAy
MDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2Vy
LnNoLiBETyBOT1QgRURJVCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2lu
Y2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQo
X19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vy
cm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRl
ZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1
bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5Zmls
ZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwK
KyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxl
bm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAg
ICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOwor
CisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJ
bnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9j
OyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5j
b3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0lu
ZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0lu
ZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2Mt
PmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlf
SU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1
dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyV9CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBu
ZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxv
Y2F0aW9ucworJW9wdGlvbiBwcmVmaXg9InBwIgorJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6VG9r
ZW5pemVyOjpDb250ZXh0KiIKKyV4IENPTU1FTlQKKworTkVXTElORSAgICAgXG58XHJ8XHJcbgor
SURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgorUFVOQ1RVQVRPUiAgW11bPD4oKXt9
ListLyolXnwmfj0hOjssP10KKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCitP
Q1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgorSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhd
WzAtOWEtZkEtRl0rCisKK0RJR0lUICAgICAgICAgICAgICAgIFswLTldCitFWFBPTkVOVF9QQVJU
ICAgICAgICBbZUVdWystXT97RElHSVR9KworRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0q
Ii4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKworJSUKKworICAgIC8qIExpbmUgY29tbWVudCAq
LworIi8vIlteXHJcbl0qCisKKyAgICAvKiBCbG9jayBjb21tZW50ICovCisgICAgLyogTGluZSBi
cmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKyAgICAvKiBUaGUgY29t
bWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCisiLyoiIHsgQkVHSU4oQ09N
TUVOVCk7IH0KKzxDT01NRU5UPlteKlxyXG5dKworPENPTU1FTlQ+IioiCis8Q09NTUVOVD57TkVX
TElORX0geyArK3l5bGluZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsKKyAgICB5eWV4dHJhLT5sZWFk
aW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCisjIHsKKyAgICAvLyAj
IGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZXMuCisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRy
YS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsK
K30KKwore0lERU5USUZJRVJ9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwore0RFQ0lNQUxfQ09OU1RB
TlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lO
VDsKK30KKworKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9
e0VYUE9ORU5UX1BBUlR9PykgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKworICAgIC8qIEFueXRoaW5n
IHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIu
ICovCisgICAgLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRz
LiAqLworKHtESUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16QS1aMC05Ll0q
KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46OlBQX05VTUJFUjsKK30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ERUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30K
KyI8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9F
UTsKK30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfWE9SOworfQorInx8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJ
R047Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNT
SUdOOworfQorIi89IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FT
U0lHTjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJ
R0hUX0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1hPUl9BU1NJR047Cit9CisifD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRP
Un0geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4
dFswXTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsg
fQorCit7TkVXTElORX0geworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
J1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisKKy4geworICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKKzwqPjw8
RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGlu
ZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5Lgor
ICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpM
b2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXgg
PSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5k
ZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVy
ZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRo
ZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5j
SW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOwor
ICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5
eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09N
TUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRl
KCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sK
KyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7Cisg
ICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAo
c3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0
KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisK
K3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAgIC8vIFdlIHVz
ZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVu
by4KKyAgICB5eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFu
ZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9r
ZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxl
KTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUo
bUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlw
ZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFk
aW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29s
IFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAm
JiB5eWxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYgKG1IYW5kbGUg
PT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeXlsZXhfZGVzdHJveShtSGFuZGxlKTsK
KyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAppbmRleCA1YjMyZjcxLi5lOWM3
MGIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCkBA
IC0xLDI3ICsxLDI2IEBACiAjIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAotIyBHZW5lcmF0
ZXMgR0xTTCBFUyBwcmVwcm9jZXNzb3IgLSBwcF9sZXguY3BwLCBwcF90YWIuaCwgYW5kIHBwX3Rh
Yi5jcHAKKyMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KIAogcnVuX2ZsZXgoKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS5sCi1vdXRw
dXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX2xleC5jcHAKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
JDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0
ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0KIAogcnVuX2Jpc29uKCkK
IHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0X2hlYWRlcj0kc2NyaXB0X2Rp
ci8kMV90YWIuaAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV90YWIuY3BwCi1iaXNvbiAt
LW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hlYWRlciAtLW91
dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8k
MQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgorYmlzb24gLS1uby1saW5lcyAtLXNrZWxl
dG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBzY3Jp
cHRfZGlyPSQoZGlybmFtZSAkMCkKIAogIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IKLXJ1bl9mbGV4
IHBwCi1ydW5fYmlzb24gcHAKK3J1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKK3J1
bl9iaXNvbiBFeHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcC5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdjYTA0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwLmwKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdM
U0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAx
MCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMv
bGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNP
IE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSV0b3B7Ci0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNp
bmNsdWRlICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5
eWxpbmVubzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVt
biArIDE7ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNp
emUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAg
ICAKLXN0YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIs
IGludCBsZW4pOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0
aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCi0lb3B0aW9uIHN0YWNrCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9uIGV4dHJhLXR5
cGU9InBwOjpDb250ZXh0KiIKLQotSFNQQUNFICAgICAgWyBcdF0KLUhBU0ggICAgICAgIF57SFNQ
QUNFfSoje0hTUEFDRX0qCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1QVU5D
VFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5UICAg
ICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1B
TF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAgWzAt
OV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFMX0NP
TlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi17SEFT
SH0geyByZXR1cm4gSEFTSDsgfQotCi17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0v
WyBcdFxuXSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0KLXtIQVNIfWRlZmluZXtIU1BB
Q0V9K3tJREVOVElGSUVSfS8iKCIgewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05h
bWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9GVU5DOwotfQote0hB
U0h9dW5kZWZ7SFNQQUNFfSsgeyByZXR1cm4gSEFTSF9VTkRFRjsgfQotCi17SEFTSH1pZiB7IHJl
dHVybiBIQVNIX0lGOyB9Ci17SEFTSH1pZmRlZiB7IHJldHVybiBIQVNIX0lGREVGOyB9Ci17SEFT
SH1pZm5kZWYgeyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLXtIQVNIfWVsc2UgeyByZXR1cm4gSEFT
SF9FTFNFOyB9Ci17SEFTSH1lbGlmIHsgcmV0dXJuIEhBU0hfRUxJRjsgfQote0hBU0h9ZW5kaWYg
eyByZXR1cm4gSEFTSF9FTkRJRjsgfQotImRlZmluZWQiIHsgcmV0dXJuIERFRklORUQ7IH0KLQot
e0hBU0h9ZXJyb3IgeyByZXR1cm4gSEFTSF9FUlJPUjsgfQote0hBU0h9cHJhZ21hIHsgcmV0dXJu
IEhBU0hfUFJBR01BOyB9Ci17SEFTSH1leHRlbnNpb24geyByZXR1cm4gSEFTSF9FWFRFTlNJT047
IH0KLXtIQVNIfXZlcnNpb24geyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci17SEFTSH1saW5lIHsg
cmV0dXJuIEhBU0hfTElORTsgfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+c3ZhbCA9
IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7
Ci19Ci0KLXtERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9D
T05TVEFOVH0gewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLQotKHtESUdJVH0re0VYUE9ORU5U
X1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9PykgewotICAgIHl5
bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IEZMT0FUX0NPTlNUQU5UOwotfQotCi17UFVOQ1RVQVRPUn0geyByZXR1cm4geXl0ZXh0WzBdOyB9
Ci0KLVsgXHRcdlxmXSsgeyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci0KLVxuIHsKLSAgICAr
K3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLQotPCo+
PDxFT0Y+PiAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0KLSUlCi0KLXN0ZDo6c3RyaW5nKiBleHRy
YWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBUaGUgaW5w
dXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVS
fQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAgICBBU1NF
UlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsKLQotICAg
IHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+
PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChzdHJbaV0g
PT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpzdHJpbmco
c3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotbmFtZXNw
YWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhTaXpl
KQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQtPmVvZigp
ICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JOb25l
KSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAgICBpbnQg
bGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0aW9uKHl5
Z2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0gbUlucHV0
LT5zdHJpbmdJbmRleCgpOwotICAgICAgICB5eXNldF9saW5lbm8ocHA6OlRva2VuOjplbmNvZGVM
b2NhdGlvbihsaW5lLCBmaWxlKSwgbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+
cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAoeXlsZXhfaW5pdF9leHRyYSh0aGlzLCAmbUxleGVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeXlyZXN0YXJ0KDAsIG1MZXhlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyKTsKLQotICAgIHl5bGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4ZXIg
PSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTkzYWIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQorKysg
L2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmls
ZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJh
c2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6
Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAot
Ci1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9n
bHNsX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIuCi0qLwot
Ci0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBn
ZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250
ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZ
WURFQlVHIDEKLSV9Ci0KLSVwdXJlLXBhcnNlcgotJW5hbWUtcHJlZml4PSJwcCIKLSVsb2NhdGlv
bnMKLSVwYXJzZS1wYXJhbSB7cHA6OkNvbnRleHQqIGNvbnRleHR9Ci0KLSV1bmlvbiB7Ci0gICAg
aW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwot
ICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0KLSV7Ci1leHRlcm4gaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQg
eXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0
YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29s
IGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLSV9Ci0KLSV0b2tlbiBIQVNIIEhBU0hfVU5ERUYKLSV0b2tlbiBIQVNIX0lG
IEhBU0hfSUZERUYgSEFTSF9JRk5ERUYgSEFTSF9FTFNFIEhBU0hfRUxJRiBIQVNIX0VORElGIERF
RklORUQKLSV0b2tlbiBIQVNIX0VSUk9SIEhBU0hfUFJBR01BIEhBU0hfRVhURU5TSU9OIEhBU0hf
VkVSU0lPTiBIQVNIX0xJTkUKLSV0b2tlbiA8c3ZhbD4gSEFTSF9ERUZJTkVfT0JKIEhBU0hfREVG
SU5FX0ZVTkMKLSV0b2tlbiA8c3ZhbD4gSU5UX0NPTlNUQU5UIEZMT0FUX0NPTlNUQU5UIElERU5U
SUZJRVIKLSV0eXBlIDxpdmFsPiBvcGVyYXRvcgotJXR5cGUgPHR2YWw+IGNvbmRpdGlvbmFsX3Rv
a2VuIHRva2VuCi0ldHlwZSA8dGxpc3Q+IHBhcmFtZXRlcl9saXN0IHJlcGxhY2VtZW50X2xpc3Qg
Y29uZGl0aW9uYWxfbGlzdCB0b2tlbl9saXN0Ci0lJQotCi1pbnB1dAotICAgIDogLyogZW1wdHkg
Ki8KLSAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZQotICAgIDogdGV4dF9saW5lCi0gICAgfCBj
b250cm9sX2xpbmUKLTsKLQotdGV4dF9saW5lCi0gICAgOiAnXG4nCi0gICAgfCB0b2tlbl9saXN0
ICdcbicgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAg
cHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5p
bnNlcnQob3V0LT5lbmQoKSwgJDEtPmJlZ2luKCksICQxLT5lbmQoKSk7Ci0gICAgICAgIGRlbGV0
ZSAkMTsKLSAgICB9Ci07Ci0KLWNvbnRyb2xfbGluZQotICAgIDogSEFTSCAnXG4nCi0gICAgfCBI
QVNIX0RFRklORV9PQkogcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+
ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwgJDEsIE5VTEws
ICQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0RFRklORV9GVU5DICcoJyBwYXJhbWV0ZXJfbGlzdCAn
KScgcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8o
QDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICQxLCAkMywgJDUpOwotICAgIH0K
LSAgICB8IEhBU0hfVU5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+dW5k
ZWZpbmVNYWNybygkMik7Ci0gICAgfQotICAgIHwgSEFTSF9JRiBjb25kaXRpb25hbF9saXN0ICdc
bicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAkMiA/IHRydWUgOiBm
YWxzZSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAg
ICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgk
MikpOwotICAgIH0KLSAgICB8IEhBU0hfSUZOREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAg
IHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgk
MikpOwotICAgIH0KLSAgICB8IEhBU0hfRUxJRiBjb25kaXRpb25hbF9saXN0ICdcbicgewotICAg
IH0KLSAgICB8IEhBU0hfRUxTRSAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VORElGICdcbicg
ewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIH0KLSAgICB8IEhB
U0hfRVJST1IgJ1xuJwotICAgIHwgSEFTSF9QUkFHTUEgJ1xuJwotICAgIHwgSEFTSF9FWFRFTlNJ
T04gJ1xuJwotICAgIHwgSEFTSF9WRVJTSU9OICdcbicKLSAgICB8IEhBU0hfTElORSAnXG4nCi07
Ci0KLXJlcGxhY2VtZW50X2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0g
ICAgfCB0b2tlbl9saXN0Ci0KLXBhcmFtZXRlcl9saXN0Ci0gICAgOiAvKiBlbXB0eSAqLyB7ICQk
ID0gTlVMTDsgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xp
bmUsIElERU5USUZJRVIsICQxKSk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX2xpc3QgJywnIElE
RU5USUZJRVIgewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBw
cDo6VG9rZW4oQDMuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDMpKTsKLSAgICB9Ci0KLWNvbmRp
dGlvbmFsX2xpc3QKLSAgICA6IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAg
fCBjb25kaXRpb25hbF9saXN0IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi10b2tlbl9saXN0Ci0gICAg
OiB0b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQt
PnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgdG9rZW5fbGlzdCB0b2tlbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsKLQotY29uZGl0
aW9uYWxfdG9rZW4KLSAgICA6IERFRklORUQgSURFTlRJRklFUiB7Ci0gICAgfQotICAgIHwgREVG
SU5FRCAnKCcgSURFTlRJRklFUiAnKScgewotICAgIH0KLSAgICB8IHRva2VuCi07Ci0KLXRva2Vu
Ci0gICAgOiBvcGVyYXRvciB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9s
aW5lLCAkMSwgTlVMTCk7Ci0gICAgfQotICAgIHwgSU5UX0NPTlNUQU5UIHsKLSAgICAgICAgJCQg
PSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgJDEpOwotICAgIH0K
LSAgICB8IEZMT0FUX0NPTlNUQU5UIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZp
cnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgSURFTlRJRklFUiB7
Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAk
MSk7Ci0gICAgfQotOwotCi1vcGVyYXRvcgotICAgIDogJ1snIHsgJCQgPSAnWyc7IH0KLSAgICB8
ICddJyB7ICQkID0gJ10nOyB9Ci0gICAgfCAnPCcgeyAkJCA9ICc8JzsgfQotICAgIHwgJz4nIHsg
JCQgPSAnPic7IH0KLSAgICB8ICcoJyB7ICQkID0gJygnOyB9Ci0gICAgfCAnKScgeyAkJCA9ICcp
JzsgfQotICAgIHwgJ3snIHsgJCQgPSAneyc7IH0KLSAgICB8ICd9JyB7ICQkID0gJ30nOyB9Ci0g
ICAgfCAnLicgeyAkJCA9ICcuJzsgfQotICAgIHwgJysnIHsgJCQgPSAnKyc7IH0KLSAgICB8ICct
JyB7ICQkID0gJy0nOyB9Ci0gICAgfCAnLycgeyAkJCA9ICcvJzsgfQotICAgIHwgJyonIHsgJCQg
PSAnKic7IH0KLSAgICB8ICclJyB7ICQkID0gJyUnOyB9Ci0gICAgfCAnXicgeyAkJCA9ICdeJzsg
fQotICAgIHwgJ3wnIHsgJCQgPSAnfCc7IH0KLSAgICB8ICcmJyB7ICQkID0gJyYnOyB9Ci0gICAg
fCAnficgeyAkJCA9ICd+JzsgfQotICAgIHwgJz0nIHsgJCQgPSAnPSc7IH0KLSAgICB8ICchJyB7
ICQkID0gJyEnOyB9Ci0gICAgfCAnOicgeyAkJCA9ICc6JzsgfQotICAgIHwgJzsnIHsgJCQgPSAn
Oyc7IH0KLSAgICB8ICcsJyB7ICQkID0gJywnOyB9Ci0gICAgfCAnPycgeyAkJCA9ICc/JzsgfQot
OwotCi0lJQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxv
Y2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBv
cENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFj
ZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICBy
ZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNw
YWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MTdlN2NjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMjY4ICswLDAgQEAKLSNsaW5lIDE2ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLmwiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIgotCi0jZGVmaW5lICBZWV9JTlRfQUxJR05F
RCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8K
LQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIK
LSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5P
Ul9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAotI2RlZmluZSBG
TEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVj
aWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0KLS8qIGJlZ2luIHN0YW5kYXJk
IEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIGVuZCBzdGFuZGFy
ZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCi0K
LSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAotCi0vKiBDOTkgc3lzdGVtcyBo
YXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLwotCi0j
aWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5
MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBp
bmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1h
Y3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0j
ZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxpbnR0eXBl
cy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgZmxleF91
aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgdWludDE2X3Qg
ZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVp
bnQzMl90IGZsZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2lu
dDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgaW50IGZsZXhf
aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IGZs
ZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9mIGludGVncmFs
IHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAg
ICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJTlQxNl9NSU4g
ICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NSU4KLSNkZWZp
bmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRpZgotI2lmbmRl
ZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jZW5kaWYK
LSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3
KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAg
ICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2RlZmluZSBVSU5U
OF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9NQVgKLSNk
ZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0jaWZuZGVmIFVJ
TlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCi0j
ZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
Ci0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLwotI2Rl
ZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UgICAvKiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5
OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAo
X19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbmRpZiAgLyogZGVmaW5lZCAo
X19TVERDX18pICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VT
RV9DT05TVAotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0j
ZW5kaWYKLQotLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVM
TCAwCi0KLS8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBj
aGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXgu
ICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQg
dHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUg
Y2FzdC4KLSAqLwotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2ln
bmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NDQU5ORVJfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRl
ZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZh
cnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUg
cmVlbnRyYW50IHNjYW5uZXIuICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUg
eXlvdXQgeXlnLT55eW91dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZp
bmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNk
ZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQot
I2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4p
Ci0jZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIg
YSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFy
YW1ldGVyLAotICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2Vk
IG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVm
aW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3Vy
cmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0g
KiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMg
Zm9yIGxleAotICogY29tcGF0aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+
eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9u
IG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUg
WVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyog
U3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8K
LSNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZp
bmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1
ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQK
LSNlbmRpZgotCi0vKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQg
b25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5l
IFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRl
X3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZ
X1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUg
KllZX0JVRkZFUl9TVEFURTsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xBU1Rf
TUFUQ0ggMgotCi0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9y
IHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0gICAgICogICAgICAg
YWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVzcygpIGlzIGEg
bWFjcm8sIGl0IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhh
dCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSBwcGxleC4gCi0gICAgICogICAgICAgT25lIG9i
dmlvdXMgc29sdXRpb24gaXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJpZWQgdGhhdCwg
YW5kIHNhdwotICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGlu
ZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlfYWN0IGlzCi0gICAgICogICAgICAgbm9ybWFsbHkgZGVj
bGFyZWQgYXMgYSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBpdC4KLSAg
ICAgKi8KLSAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAgICAgICBkbyB7
IFwKLSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKLSAgICAgICAgICAgICAgICBmb3IgKCB5eWwg
PSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgIGlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztc
Ci0gICAgICAgICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJz
dCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNk
ZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRv
IGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19t
YWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2Fy
Zyk7XAotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3Ag
PSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAgICAgICBZWV9E
T19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAgICAgICAgfSBc
Ci0gICAgd2hpbGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5
dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0j
ZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0j
ZW5kaWYKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAgICB7Ci0gICAg
RklMRSAqeXlfaW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAgICAgIC8qIGlu
cHV0IGJ1ZmZlciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1cnJlbnQgcG9z
aXRpb24gaW4gaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBp
biBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgot
ICAgICAqLwotICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQotICAgIC8qIE51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0gICAgICog
Y2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBpbnQgeXlfbl9jaGFyczsKLQotICAgIC8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLSAg
ICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBp
dCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfb3VyX2J1ZmZl
cjsKLQotICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJj
ZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhl
biB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1h
a2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5l
LgotICAgICAqLwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotICAgIC8qIFdoZXRoZXIg
d2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLSAgICAg
KiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhl
cndpc2UKLSAgICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5X2F0X2JvbDsKLQotICAgIGlu
dCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCi0gICAgaW50IHl5X2JzX2Nv
bHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwotICAgIAotICAgIC8qIFdoZXRoZXIgdG8g
dHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAgICAqIGVu
ZCBvZiBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZmZXI7Ci0KLSAgICBpbnQgeXlf
YnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKLSNkZWZpbmUgWVlfQlVG
RkVSX05PUk1BTCAxCi0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mg
c3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZl
ciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4n
dCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAot
ICAgICAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVj
YXVzZSBvZgotICAgICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVu
IHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3Igot
ICAgICAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBz
Y2FubmluZyBieQotICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxl
LgotICAgICAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0gICAgfTsKLSNl
bmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBwcm92aWRlIG1h
Y3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKLSAqIGZ1dHVy
ZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAotICog
InNjYW5uZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9y
IE5VTEwuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9z
dGFjayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tb
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDog
TlVMTCkKLQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtu
b3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQg
YW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcF0KLQotdm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1
ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1
ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBw
X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVm
ZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSBZ
WV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5u
ZXIpCi0KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXpl
X3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9z
dHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi0jZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgotCi0jZGVmaW5lIHl5
X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotICAgIHsgXAotICAgIGlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApeyBcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAg
ICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwK
LSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9Ci0KLSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wp
IFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCi0gICAgICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KLQotI2RlZmluZSBZWV9BVF9CT0wo
KSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0KLS8qIEJlZ2luIHVzZXIg
c2VjdDMgKi8KLQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmluZSBZWV9TS0lQX1lZV1JBUAot
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRlZiBpbnQgeXlfc3RhdGVf
dHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3Rh
dGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29u
c3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8qIERvbmUgYWZ0ZXIgdGhl
IGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCi0gKiBjb3Jy
ZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0jZGVmaW5lIFlZX0RPX0JF
Rk9SRV9BQ1RJT04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0gICAgeXlsZW5n
ID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAq
eXlfY3A7IFwKLSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55eV9jX2J1Zl9wID0geXlf
Y3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDIzCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIg
MjQKLS8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBp
dHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLSAgICB7
Ci0gICAgZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4X2ludDMyX3QgeXlfbnh0Owot
ICAgIH07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzEwNV0gPQotICAg
IHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDIzLCAgIDIxLCAgIDIyLCAgIDIwLCAg
IDIwLCAgIDE4LCAgIDE4LAotICAgICAgIDE3LCAgIDE3LCAgIDIxLCAgICAxLCAgIDIxLCAgIDE5
LCAgIDE5LCAgIDE4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgIDE4LCAgIDE3LCAgIDE3LCAg
IDIxLCAgICAxLCAgICAxLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgIDE5LCAgIDE4LCAgIDE3LCAgICAwLAotICAgICAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICA1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAg
ICAgIDE5LCAgIDE3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAgICA5LCAgICA4
LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDE2LCAgICAwLCAgICAwLCAg
ICAwLCAgIDE3LCAgICAwLCAgIDEwLAotICAgICAgIDEyLCAgICAwLCAgICA2LCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgIDExLCAgICAwLCAgICAwLAotICAgICAgICA3LCAgIDEzLCAgICA0LCAg
ICAwLCAgICAwLCAgICAwLCAgIDE1LCAgICAwLCAgICAwLCAgICAyLAotCi0gICAgICAgIDMsICAg
IDAsICAgMTQsICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X2VjWzI1Nl0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA1LCAgICA1LCAgICAxLCAgICA3
LAotICAgICAgICA1LCAgICA1LCAgICA4LCAgICA1LCAgICA4LCAgICA5LCAgICA1LCAgIDEwLCAg
IDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDEyLCAgIDEy
LCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDE0LCAgIDEzLAotICAgICAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1
LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LAotICAgICAgIDE1LCAgIDE1LCAg
IDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE2LCAgIDE1LCAgIDE1LAotICAgICAgICA1
LCAgICAxLCAgICA1LCAgICA1LCAgIDE1LCAgICAxLCAgIDE3LCAgIDEzLCAgIDEzLCAgIDE4LAot
Ci0gICAgICAgMTksICAgMjAsICAgMjEsICAgMTUsICAgMjIsICAgMTUsICAgMTUsICAgMjMsICAg
MjQsICAgMjUsCi0gICAgICAgMjYsICAgMjcsICAgMTUsICAgMjgsICAgMjksICAgMzAsICAgMzEs
ICAgMzIsICAgMTUsICAgMzMsCi0gICAgICAgMTUsICAgMTUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszNF0gPQot
ICAgIHsgICAwLAotICAgICAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAz
LCAgICAxLCAgICAxLCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICA1LCAgICA2LCAgICA3LCAg
ICA3LCAgICA1LCAgICA1LCAgICA2LCAgICA1LAotICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3
LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3LCAgICA3LCAg
ICA3Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExMV0g
PQotICAgIHsgICAwLAotICAgICAgICAwLCAgIDE4LCAgMTg0LCAgMTg1LCAgIDExLCAgMTg1LCAg
MTg1LCAgIDIxLCAgIDI4LCAgIDUzLAotICAgICAgICAwLCAgMTY0LCAgIDM5LCAgIDcxLCAgIDEy
LCAgIDMyLCAgIDM0LCAgICAxLCAgIDM5LCAgIDQ0LAotICAgICAgICAwLCAgICAwLCAgICAwLCAg
MTYyLCAgIDY0LCAgICAwLCAgICAwLCAgMTYyLCAgIDQ2LCAgMTYwLAotICAgICAgMTU3LCAgMTUw
LCAgMTUyLCAgMTU3LCAgIDcwLCAgIDQ3LCAgIDY1LCAgICAwLCAgMTUzLCAgMTU0LAotICAgICAg
IDYyLCAgMTU1LCAgMTQ0LCAgMTQxLCAgIDY3LCAgMTQ1LCAgMTUyLCAgMTUwLCAgMTM5LCAgIDc2
LAotICAgICAgIDg1LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ0LCAgMTQwLCAgMTM1LCAgMTQxLCAg
MTQwLCAgMTQwLAotICAgICAgMTM4LCAgMTM1LCAgMTM2LCAgMTI1LCAgMTM0LCAgMTI3LCAgMTg1
LCAgMTg1LCAgMTMxLCAgMTIyLAotICAgICAgMTI0LCAgMTI4LCAgMTI4LCAgMTg1LCAgMTIyLCAg
MTI1LCAgMTIyLCAgMTI1LCAgMTIzLCAgMTg1LAotICAgICAgMTg1LCAgMTEyLCAgMTg1LCAgMTIw
LCAgMTEzLCAgMTI3LCAgIDk3LCAgICAwLCAgMTA3LCAgIDg2LAotICAgICAgMTg1LCAgMTg1LCAg
MTA1LCAgIDc2LCAgIDgxLCAgIDM0LCAgMTg1LCAgIDk3LCAgIDEwLCAgMTg1LAotCi0gICAgICAx
ODUsICAxMDMsICAxODUsICAxODUsICAxMTAsICAxMTQsICAxMTgsICAxMjEsICAxMjYsICAxMzIK
LSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTFdID0KLSAg
ICB7ICAgMCwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNiwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NywgIDEwNywgICAgOSwgICAxOCwgIDEwNCwKLSAgICAgIDEwOCwgICAxMCwgIDEwNiwgIDEwNiwg
IDEwNCwgICAxNCwgICAxNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwOCwgIDEwNiwgIDEwNCwKLSAgICAgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwOSwgIDEwNCwgIDEwNCwgIDExMCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAg
MTEwLCAgMTA0LCAgICAwLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAg
fSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjE5XSA9Ci0gICAgeyAg
IDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDQsICAgIDcsICAgIDcs
ICAgIDgsICAgIDksCi0gICAgICAgMTAsICAgMTAsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAx
MDQsICAgMTIsICAgIDQsICAgMTMsCi0gICAgICAgIDYsICAgIDUsICAgIDcsICAgMTQsICAgIDcs
ICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTAsCi0gICAgICAgMTYsICAgMTYsICAgMTYsICAx
MDQsICAxMDMsICAgMTIsICAgMTcsICAgMTgsICAgMTgsICAgMTksCi0gICAgICAgMjUsICAgMjAs
ICAgMTUsICAgMjEsICAgMjYsICAgMzUsICAgMjAsICAgMzUsICAgMTksICAgMTksCi0gICAgICAg
MzUsICAgMzYsICAgMzUsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgOTks
Ci0gICAgICAgMjEsICAgMTcsICAgMjIsICAgMjIsICAgMjIsICAgMjUsICAgMjAsICAgMTUsICAg
NDEsICAgMjYsCi0gICAgICAgNDIsICAgMjAsICAgMjcsICAgNDMsICAgMzcsICAgMzcsICAgMzcs
ICAgNTAsICAgNDQsICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAgOTUsICAgNTQsICAgNTksICAg
NTEsICAgNTEsICAgNTEsICAgMjgsICAgMjksCi0gICAgICAgNTUsICAgNjAsICAgMzAsICAgMzEs
ICAgNTEsICAgNTEsICAgNTEsICAgMzIsICAxMDAsICAxMDAsCi0KLSAgICAgICA5NywgICAzMywg
ICAzNCwgIDEwMSwgIDEwMCwgIDEwMCwgICA5MywgICA5NiwgICA5NSwgIDEwMSwKLSAgICAgICAx
MSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAyMywgICAyMywgICAyMywK
LSAgICAgICAyMywgICAxNiwgICA5NCwgICAxNiwgICAzOCwgICAzOCwgICAzOCwgICA5OCwgICA5
MywgICA5MiwKLSAgICAgICA5OCwgICA5OCwgICA5OCwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwg
IDEwMiwgIDEwMiwgICA5MSwKLSAgICAgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwgICA4
NSwgICA4NCwgICA4MywgICA4MiwgICA4MSwKLSAgICAgICA4MCwgICA3OSwgICA3OCwgICA3Nywg
ICA3NiwgICA3NSwgICA3NCwgICA3MywgICA3MiwgICA3MSwKLSAgICAgICA3MCwgICA2OSwgICA2
OCwgICA2NywgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwKLSAgICAgICA1OCwg
ICA1NywgICA1NiwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0NywgICA0NiwgICA0NSwKLSAg
ICAgICA0MCwgICAzOSwgICAyNCwgIDEwNCwgICAgMywgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDUsICAgMTUsICAgIDUsICAgMTUsICAgMTgsICAgIDEsICAgIDIsICAgIDIsCi0gICAgICAg
IDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIs
Ci0gICAgICAgIDgsICAgIDgsICAgIDgsICAgMTgsICAgOTksICAgIDIsICAgIDksICAgIDksICAg
IDksICAgIDksCi0gICAgICAgMTMsICAgIDksICAgMTMsICAgIDksICAgMTMsICAgMTYsICAgIDks
ICAgMTcsICAgMTksICAgMTksCi0gICAgICAgMTYsICAgMjAsICAgMTcsICAgMjAsICAgMjAsICAg
MjAsICAgMzYsICAgMzYsICAgMzYsICAgOTYsCi0gICAgICAgIDksICAgMTAsICAgMTAsICAgMTAs
ICAgMTAsICAgMjUsICAgMTAsICAgMjUsICAgMjksICAgMjUsCi0gICAgICAgMjksICAgMTAsICAg
MTQsICAgMjksICAgMzcsICAgMzcsICAgMzcsICAgMzUsICAgMjksICAgMzUsCi0gICAgICAgMzUs
ICAgMzUsICAgOTUsICAgNDEsICAgNDUsICAgNTAsICAgNTAsICAgNTAsICAgMTQsICAgMTQsCi0g
ICAgICAgNDEsICAgNDUsICAgMTQsICAgMTQsICAgNTEsICAgNTEsICAgNTEsICAgMTQsICAgOTgs
ICAgOTgsCi0KLSAgICAgICA5NCwgICAxNCwgICAxNCwgICA5OCwgIDEwMiwgIDEwMiwgICA5Mywg
ICA5MCwgICA4OSwgIDEwMiwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEw
NSwgIDEwNSwgIDEwNiwgIDEwNiwgIDEwNiwKLSAgICAgIDEwNiwgIDEwNywgICA4NywgIDEwNywg
IDEwOCwgIDEwOCwgIDEwOCwgIDEwOSwgICA4NiwgICA4NSwKLSAgICAgIDEwOSwgIDEwOSwgIDEw
OSwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgICA4NCwKLSAgICAgICA4Miwg
ICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3NSwgICA3MywgICA3MiwgICA3MSwgICA3MCwKLSAg
ICAgICA2OSwgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwgICA2MCwgICA1OSwg
ICA1OCwKLSAgICAgICA1NywgICA1NiwgICA1NSwgICA1NCwgICA1MywgICA1MiwgICA0OSwgICA0
OCwgICA0NywgICA0NiwKLSAgICAgICA0NCwgICA0MywgICA0MiwgICA0MCwgICAzOSwgICAzNCwg
ICAzMywgICAzMiwgICAzMSwgICAzMCwKLSAgICAgICAyOCwgICAyNCwgICAxMiwgICAgMywgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7
Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAq
Lwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyNF0g
PQotICAgIHsgICAwLAotMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgICAgIH07Ci0KLS8qIFRoZSBpbnRlbnQg
YmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBv
ZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25v
dF9kZXRlY3RlZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlf
TU9SRV9PRkZTRVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMg
dGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9u
IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZ
T1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIu
c2guCi0qLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJDb250ZXh0
LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVubzsgICAgICAg
IFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7ICBcCi0gICAg
ICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUo
MCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1
bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6
OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwotCi0j
ZGVmaW5lIElOSVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OkNvbnRleHQqCi0K
LS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwot
c3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hl
ZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0gICAgLyogVGhl
IHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVl
bnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKLSAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi0g
ICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICov
Ci0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFu
IGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwot
ICAgIGludCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0
OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
OwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2Rl
cHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0g
ICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIg
Knl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwot
Ci0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0g
ICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xv
YmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBi
ZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNv
biBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXls
dmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAot
aW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0
cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyog
QWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0
byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4
X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVm
aW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12
b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
aW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9j
X3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlz
IHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBz
ZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNw
bHVzCi1leHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UK
LWV4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFy
ICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNp
ZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBj
aGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBV
VAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQg
bmV3X3N0YXRlICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHl5
X3BvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgc3RhdGljIGludCB5
eV90b3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogQW1vdW50IG9mIHN0
dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwotI2lmbmRlZiBZWV9SRUFEX0JVRl9T
SVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgotI2VuZGlmCi0KLS8qIENvcHkgd2hh
dGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCi0j
aWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhl
IHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KLSAq
LwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKLSNlbmRp
ZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4K
LSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9z
aXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0
aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAgICAgaW50
IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gICAgICAgICAg
ICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0g
ICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gJ1xuJyAp
IFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBjID09
IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1bHQgPSBuOyBc
Ci0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAgZXJybm89MDsg
XAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWlu
KSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAgICAgICAgIGlm
KCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAg
ICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAgICAgICAgfSBc
Ci0gICAgICAgIH1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVy
bjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRv
bid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2ls
bCBjYXVzZQotICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUg
c3RhdGVtZW50cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0
ZSgpIHJldHVybiBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hp
Y2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFD
S19JTkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBv
cnQgYSBmYXRhbCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlf
RkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQotI2VuZGlm
Ci0KLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVz
ICovCi0KLS8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRl
ZmluZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lm
bmRlZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgcHBs
ZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCBw
cGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAq
IHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAhWVlfREVDTCAq
LwotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRl
ciB5eXRleHQgYW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZ
WV9VU0VSX0FDVElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUg
ZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0j
ZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUCBc
Ci0gICAgaWYgKCB5eWxlbmcgPiAwICkgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2F0X2JvbCA9IFwKLSAgICAgICAgICAgICAgICAoeXl0ZXh0W3l5bGVuZyAtIDFdID09
ICdcbicpOyBcCi0gICAgWVlfVVNFUl9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVu
Y3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsKLSAgICByZWdp
c3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
eXlfY3AsICp5eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0OwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotICAgIGlmICgg
IXl5Zy0+eXlfaW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9pbml0ID0gMTsKLQot
I2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYKLQotICAg
ICAgICBpZiAoICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0ID0g
MTsgIC8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLSAgICAgICAgaWYgKCAhIHl5aW4gKQotICAg
ICAgICAgICAgeXlpbiA9IHN0ZGluOwotCi0gICAgICAgIGlmICggISB5eW91dCApCi0gICAgICAg
ICAgICB5eW91dCA9IHN0ZG91dDsKLQotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KSB7Ci0gICAgICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgICAgIHBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB9Ci0KLSAg
ICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAq
LwotICAgICAgICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0gICAgICAg
IC8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKLQotICAgICAgICAvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2No
X2J1ZiBvZiB0aGUgc3RhcnQgb2YKLSAgICAgICAgICogdGhlIGN1cnJlbnQgcnVuLgotICAgICAg
ICAgKi8KLSAgICAgICAgeXlfYnAgPSB5eV9jcDsKLQotICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0wo
KTsKLXl5X21hdGNoOgotICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgcmVn
aXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0gICAgICAg
ICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9
IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQp
IHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgICAgICBpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAgICAgICAgICAgfQotICAgICAg
ICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTA0ICk7Ci0gICAgICAgIHl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0gICAgICAgIHl5
X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotICAgICAgICBZWV9ET19CRUZP
UkVfQUNUSU9OOwotCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYg
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgaW50IHl5bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCi0gICAgICAg
ICAgICAgICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0w
OwotICAgIH13aGlsZSgwKQotOwotICAgICAgICAgICAgfQotCi1kb19hY3Rpb246ICAvKiBUaGlz
IGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLSAgICAgICAg
c3dpdGNoICggeXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
Ci0gICAgICAgICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotICAgICAgICAgICAgLyog
dW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0gICAgICAgICAgICAq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotCi1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCi0qeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4
dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9P
Qko7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMzoKLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFn
YWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3Jv
TmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfVU5ERUY7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9J
RjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNI
X0lGREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEhBU0hfSUZOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfRUxTRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBIQVNIX0VMSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFRklORUQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9WRVJT
SU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX0xJTkU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBJREVOVElGSUVSOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxOToKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwot
Y2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHl5dGV4dFswXTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjI6Ci0vKiBydWxlIDIyIGNhbiBtYXRjaCBlb2wgKi8KLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJu
IHl5dGV4dFswXTsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6
Ci17IHl5dGVybWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VU
VVAKLUVDSE87Ci0gICAgWVlfQlJFQUsKLQotICAgIGNhc2UgWVlfRU5EX09GX0JVRkZFUjoKLSAg
ICAgICAgewotICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcg
dGhlIEVPQiBjaGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9
IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgICAgIC8qIFVuZG8g
dGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KLSAgICAgICAgKnl5X2NwID0g
eXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLQot
ICAgICAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
PSBZWV9CVUZGRVJfTkVXICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlJ3JlIHNj
YW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotICAgICAgICAgICAgICog
cG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKLSAgICAgICAgICAg
ICAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCi0gICAgICAg
ICAgICAgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKLSAgICAgICAg
ICAgICAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgotICAg
ICAgICAgICAgICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBi
ZWNhdXNlCi0gICAgICAgICAgICAgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRo
YW4gcG9zc2libHkgYQotICAgICAgICAgICAgICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZv
ciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsK
LSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9OT1JNQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLyogTm90ZSB0aGF0
IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAg
ICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2ls
bAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwg
Y2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMg
b24gRU9CIHRvIHRoZQotICAgICAgICAgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0
IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAgICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8K
LSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdh
cyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3Rh
dGU7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAvKiBP
a2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKLSAgICAgICAgICAgICAq
IHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0gICAgICAgICAgICAgKiB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLSAgICAgICAgICAgICAqIGZvciB1cyBi
ZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotICAgICAgICAgICAgICogd2l0aCB0
aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0Ci0gICAgICAgICAgICAgKiB3
YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKLSAgICAgICAgICAg
ICAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAg
ICB5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5
c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7Ci0KLSAgICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAg
ICAgICB5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwot
ICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2Ugc3dpdGNoICggeXlfZ2V0X25l
eHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKLQotICAgICAgICAgICAgICAg
IGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KLSAgICAg
ICAgICAgICAgICAgICAgICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLSAg
ICAgICAgICAgICAgICAgICAgICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotICAgICAgICAg
ICAgICAgICAgICAgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotICAgICAgICAg
ICAgICAgICAgICAgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KLSAgICAgICAg
ICAgICAgICAgICAgICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0g
ICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0gICAgICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgICAgICAgICB5eV9h
Y3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGRv
X2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9O
RVdfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU46Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAg
ICAgeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nh
bm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAg
ICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAg
ICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAg
ICAgICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNd
OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBZWV9G
QVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICov
Ci0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQgb2Yg
cHBsZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcg
YnVmZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAq
ICBFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRp
bnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICogIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUgLSBlbmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0ZXIgY2hhciAqc291cmNlID0g
eXlnLT55eXRleHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLSAg
ICBpbnQgcmV0X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKLSAgICAgICAg
WVlfRkFUQUxfRVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAgICB7IC8qIERvbid0IHRyeSB0
byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotICAgICAgICBpZiAoIHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIs
IHRoZSBFT0IsIHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgot
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotICAgICAg
ICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJu
IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgLyog
VHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJz
IHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgIGZvciAoIGkgPSAwOyBp
IDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVzdCsrKSA9ICooc291cmNlKysp
OwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBm
b3JjZSBhbiBFT0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAg
ICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAgICAgICB7IC8qIE5vdCBlbm91
Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotICAgICAgICAgICAgLyoganVz
dCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgICAgICBZ
WV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOwotCi0gICAgICAgICAgICBpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbmV3X3NpemUgPSBi
LT55eV9idWZfc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAg
KQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAv
IDg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZf
c2l6ZSAqPSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAg
ICAgICAgICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8K
LSAgICAgICAgICAgICAgICAgICAgcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55
eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24g
aXQuICovCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAg
aWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0g
ICAgICAgICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZs
b3ciICk7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlf
Y19idWZfcF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9f
cmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9S
RUFEX0JVRl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAg
ICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJf
dG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9f
cmVhZCApOwotCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9
IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMg
PT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JF
X0FESiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRf
T0ZfRklMRTsKLSAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRf
dmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9G
X1BFTkRJTkc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAg
cmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAo
eXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfc2l6ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwg
cGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3
X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hh
cnMgPj4gMSk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0g
KGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0K
LQotICAgIHl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRl
eHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAg
cmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUg
c3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCi0KLSAgICBzdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAg
cmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7Ci0gICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0woKTsKLQotICAgIGZvciAo
IHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9j
X2J1Zl9wOyArK3l5X2NwICkKLSAgICAgICAgewotICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5
X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKLSAgICAgICAg
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAg
ICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgIHl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgfQotICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHl5X2N1cnJlbnRf
c3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRp
b24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICogIG5leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCB5eV9pc19qYW07
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCi0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICByZWdpc3Rl
ciBZWV9DSEFSIHl5X2MgPSAxOwotICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlf
Y3VycmVudF9zdGF0ZTsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7Ci0gICAgICAgIH0KLSAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgIHsKLSAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAg
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICB5eV9jID0geXlfbWV0
YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotICAgIHl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwNCk7Ci0KLSAgICByZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNpZm5kZWYgWVlfTk9f
SU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotI2VuZGlmCi0KLXsKLSAgICBpbnQgYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICBpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAgICAvKiB5eV9jX2J1Zl9wIG5v
dyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLSAgICAgICAgICog
SWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQot
ICAgICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0
aGUgYnVmZmVyLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0g
ICAgICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICAqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7IC8qIG5l
ZWQgbW9yZSBpbnB1dCAqLwotICAgICAgICAgICAgaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZf
cCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXlnLT55eV9jX2J1Zl9wOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkK
LSAgICAgICAgICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKLSAg
ICAgICAgICAgICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwotICAg
ICAgICAgICAgICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotICAgICAg
ICAgICAgICAgICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAotICAgICAgICAg
ICAgICAgICAgICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgotICAgICAgICAg
ICAgICAgICAgICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLSAgICAgICAg
ICAgICAgICAgICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLSAgICAgICAgICAgICAgICAg
ICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8K
LSAgICAgICAgICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAgICAgICAgICAgICBjYXNlIEVP
Ql9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEVPRjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNj
YW5uZXIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgt
Yml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2
ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsK
LQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gKGMgPT0gJ1xuJyk7
Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCApCi0gICAgICAg
ICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGls
ZSgwKQotOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0jZW5kaWYgIC8qIGlmbmRlZiBZWV9OT19JTlBV
VCAqLwotCi0vKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVh
bS4KLSAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMg
bm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0gKi8KLSAgICB2
b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9Ci0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7Ci0gICAgfQotCi0gICAgcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCi0gKiBAcGFy
YW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAo
WVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgIC8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVu
Y3Rpb24gYm9keQotICAgICAqIHdpdGgKLSAgICAgKiAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSgp
OwotICAgICAqICAgICAgcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8K
LSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9y
bWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5n
LCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBpcyBsb29rZWQgYXQgaXMgYWZ0
ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAgICAgKiB0byBnbyBhaGVhZCBh
bmQgYWx3YXlzIHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9j
X2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotICAgIHl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0gICAgeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRp
YWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVz
LiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBm
aWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRl
X2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0gICAgLyogeXlf
Y2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4g
YmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRl
X2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICBwcF9p
bml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoq
IERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBw
cF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBz
aG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7Ci0KLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAg
ICAgICBwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotICAgIHBw
ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVp
bml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxl
ZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBh
IHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVm
ZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLQotewotICAgIGludCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBwcF9mbHVzaF9idWZmZXIo
YiAseXlzY2FubmVyKTsKLQotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5
X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0
aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20gcHBy
ZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBj
YXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAq
LwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGlu
ZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAg
Yi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotICAgIGVycm5vID0gb2Vycm5vOwotfQot
Ci0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2Nhbiwg
WVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRv
IGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVy
IChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICgg
ISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYi0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICAv
KiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0
IGNhdXNlcwotICAgICAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4g
IFRoZSBzZWNvbmQgY2F1c2VzCi0gICAgICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8K
LSAgICBiLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYi0+eXlfYnVmX3BvcyA9
ICZiLT55eV9jaF9idWZbMF07Ci0KLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRf
QlVGRkVSICkKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0K
LS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBi
ZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0
ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhl
IG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
Lwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7Ci0K
LSAgICAvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICov
Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0K
LSAgICAvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4g
Ki8KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCsrOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0K
LSAgICAvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUg
c3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcg
dG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lk
IHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZ
X0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcF9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IE5VTEw7Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0gICAg
ICAgIC0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKSB7Ci0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAg
ICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQotfQotCi0vKiBB
bGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMg
c3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBpbnQgbnVtX3RvX2FsbG9j
OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotICAgICAgICAvKiBGaXJz
dCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cg
aWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVz
ZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxv
YyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0g
MTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSoqKXBwYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxv
YyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRv
IHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9
IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVy
KTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjaygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAg
ICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAg
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9Ci19Ci0K
LS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBh
IHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUgY2hh
cmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNo
YXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICov
Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIAotICAgIGlmICggc2l6ZSA8IDIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQotICAgICAgICAvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0
aGUgRU9CJ3MuICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0g
c2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KLSAgICBiLT55eV9i
dWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55eV9uX2NoYXJzID0gYi0+eXlf
YnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIGItPnl5X2F0X2Jv
bCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5u
ZXIgKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBz
dGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVy
bWluYXRlZCBzdHJpbmcgdG8gc2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4KLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBO
VUwgdmFsdWVzLCB0aGVuIHVzZQotICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCi0g
Ki8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCi0gICAgcmV0dXJuIHBwX3NjYW5fYnl0ZXMo
eXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8g
cHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBh
cmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICBjaGFyICpi
dWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgLyogR2V0IG1lbW9y
eSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICov
Ci0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0gKGNoYXIgKikgcHBhbGxvYyhu
ICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgZm9y
ICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAgICAgIGJ1ZltpXSA9IHl5Ynl0
ZXNbaV07Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5
c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggImJhZCBi
dWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyogSXQncyBva2F5IHRvIGdyb3cg
ZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAotICAgICAqIGF3YXkgd2hl
biB3ZSdyZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0g
ICAgcmV0dXJuIGI7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQgIG5l
d19zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCB5eWctPnl5X3N0YXJ0
X3N0YWNrX3B0ciA+PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICkKLSAgICAgICAgewotICAg
ICAgICB5eV9zaXplX3QgbmV3X3NpemU7Ci0KLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFja19k
ZXB0aCArPSBZWV9TVEFSVF9TVEFDS19JTkNSOwotICAgICAgICBuZXdfc2l6ZSA9IHl5Zy0+eXlf
c3RhcnRfc3RhY2tfZGVwdGggKiBzaXplb2YoIGludCApOwotCi0gICAgICAgIGlmICggISB5eWct
Pnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50
ICopIHBwYWxsb2MobmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBwcmVhbGxvYygodm9pZCAqKSB5
eWctPnl5X3N0YXJ0X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAgICBpZiAo
ICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBtZW1vcnkgZXhwYW5kaW5nIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayIgKTsKLSAgICAgICAg
fQotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cisrXSA9
IFlZX1NUQVJUOwotCi0gICAgQkVHSU4obmV3X3N0YXRlKTsKLX0KLQotICAgIHN0YXRpYyB2b2lk
IHl5X3BvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAtLXl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyIDwgMCApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAic3RhcnQt
Y29uZGl0aW9uIHN0YWNrIHVuZGVyZmxvdyIgKTsKLQotICAgIEJFR0lOKHl5Zy0+eXlfc3RhcnRf
c3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHJdKTsKLX0KLQotICAgIHN0YXRpYyBpbnQgeXlf
dG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlnLT55eV9z
dGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFdOwotfQotCi0jaWZuZGVmIFlZ
X0VYSVRfRkFJTFVSRQotI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgotI2VuZGlmCi0KLXN0YXRp
YyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsK
LSAgICBleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0KLQotLyogUmVkZWZpbmUgeXlsZXNzKCkg
c28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCi0KLSN1bmRlZiB5eWxlc3MKLSNkZWZp
bmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRvIGVm
ZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNy
b19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7
XAotICAgICAgICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLSAgICAgICAg
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0gICAgICAgICp5eWctPnl5
X2NfYnVmX3AgPSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwK
LSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdl
dC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KLQotLyoqIEdldCB0aGUgdXNl
ci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlleHRyYTsKLX0KLQotLyoqIEdldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi1pbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQg
Y29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICovCi1pbnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICByZXR1cm4geXljb2x1bW47Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdl
dF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5aW47Ci19Ci0KLS8q
KiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICByZXR1cm4geXlvdXQ7Ci19Ci0KLS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVu
dCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1p
bnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGVu
ZzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0KLWNoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQgdGhlIHVzZXIt
ZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4K
LSAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwotfQotCi0vKiog
U2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9saW5l
bm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAg
IC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0g
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJy
b3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAot
ICAgIAotICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJl
bnQgY29sdW1uLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25v
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2
YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNh
bGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWNvbHVtbiA9
IGNvbHVtbl9ubzsKLX0KLQotLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90
IGRpc2NhcmQgdGhlIGN1cnJlbnQKLSAqIGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBpbl9zdHIg
QSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgotICovCi12b2lkIHBwc2V0X2luIChGSUxF
ICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9IGluX3N0ciA7
Ci19Ci0KLXZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5b3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWludCBwcGdldF9kZWJ1ZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Ci19Ci0KLXZv
aWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKLX0KLQotLyogQWNjZXNzb3IgbWV0aG9kcyBmb3Ig
eXlsdmFsIGFuZCB5eWxsb2MgKi8KLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWx2YWw7Ci19Ci0KLXZvaWQgcHBzZXRfbHZhbCAo
WVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5
bHZhbCA9IHl5bHZhbF9wYXJhbTsKLX0KLQotWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZvaWQgcHBzZXRf
bGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLX0KLSAgICAKLS8qIFVzZXItdmlzaWJsZSBBUEkg
Ki8KLQotLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nh
bm5lciBpdHNlbGYsIHNvIGl0IGlzCi0gKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhh
dCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCi0gKiBUaGF0
J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1
c2luZyBvdXIgbWFjcm9zLgotICovCi0KLWludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlf
Z2xvYmFscykKLQotewotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAg
ZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICpwdHJfeXlf
Z2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICks
IE5VTEwgKTsKLQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVy
cm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBCeSBzZXR0
aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQg
MHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNp
emVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLQotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAq
cHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUg
ZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKLSAqIGNvbnZlbnRp
b24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2
ZXIsIHRoYXQKLSAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxs
IGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAotICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3
aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgot
ICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBh
dmFpbGFibGUgdG8gcHBhbGxvYyBpbgotICogdGhlIHl5ZXh0cmEgZmllbGQuCi0gKi8KLQotaW50
IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3Qq
IHB0cl95eV9nbG9iYWxzICkKLQotewotICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7
Ci0KLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKLQot
ICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAo
eXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXln
dXRzICk7Ci0gICAgCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAg
ZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAvKiBC
eSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCi0gICAgeXlfaW5pdF9nbG9iYWxz
LiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9i
YWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotICAgIAotICAgIHBwc2V0X2V4dHJh
ICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7Ci0gICAgCi0gICAgcmV0dXJuIHl5
X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi1zdGF0aWMgaW50IHl5X2lu
aXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAvKiBJbml0aWFsaXphdGlv
biBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxs
b2NhdGUgaGVyZS4KLSAgICAgKi8KLQotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKLSAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IDA7Ci0gICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKLSAgICB5eWctPnl5
X2luaXQgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnQgPSAwOwotCi0gICAgeXlnLT55eV9zdGFydF9z
dGFja19wdHIgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOwotICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNp
ZmRlZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0Owot
I2Vsc2UKLSAgICB5eWluID0gKEZJTEUgKikgMDsKLSAgICB5eW91dCA9IChGSUxFICopIDA7Ci0j
ZW5kaWYKLQotICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3Is
IHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKLSAgICAgKiBwcGxleF9pbml0KCkKLSAgICAgKi8KLSAg
ICByZXR1cm4gMDsKLX0KLQotLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQg
YW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJv
eWluZyBlYWNoIGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpewotICAg
ICAgICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICAgICAgcHBwb3BfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhY2sg
aXRzZWxmLiAqLwotICAgIHBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsK
LSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBz
dGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0
YWNrICx5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7Ci0K
LSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVl
bnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHBwbGV4KCkgaXMgY2FsbGVk
LCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xvYmFscyggeXlz
Y2FubmVyKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25s
eSkuICovCi0gICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0gICAgeXlzY2Fu
bmVyID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFsIHV0aWxpdHkg
cm91dGluZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBu
OyArK2kgKQotICAgICAgICBzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNpZmRlZiBZWV9O
RUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgbjsKLSAgICBmb3IgKCBu
ID0gMDsgc1tuXTsgKytuICkKLSAgICAgICAgOwotCi0gICAgcmV0dXJuIG47Ci19Ci0jZW5kaWYK
LQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKLX0KLQotdm9pZCAqcHByZWFs
bG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIC8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2Rh
dGVzIGJvdGgKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBw
b2ludGVycywgYW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVy
cy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJlY2F1c2UgYm90aCBBTlNJIEMg
YW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLSAgICAgKiBhbnkgcG9pbnRl
ciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCi0gICAg
ICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAgICovCi0gICAgcmV0dXJuICh2
b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lkIHBwZnJlZSAo
dm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBmcmVlKCAoY2hhciAqKSBw
dHIgKTsgICAvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KLX0KLQotI2Rl
ZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNy
b05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJp
bmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAg
Ly8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIg
JiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpz
dHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0t
aSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQn
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBp
ICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAg
ewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0g
ICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAg
ICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0g
ICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0g
MCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24ocHBnZXRfbGlu
ZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmlu
Z0luZGV4KCk7Ci0gICAgICAgIHBwc2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9u
KGxpbmUsIGZpbGUpLG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVm
LCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6
a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyhhbG9r
cCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyID09IE5V
TEwpOwotCi0gICAgaWYgKHBwbGV4X2luaXRfZXh0cmEodGhpcywmbUxleGVyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIpOwotCi0gICAgcHBsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNmFhMC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3MiArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwg
bWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24g
Zm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5
ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYK
LSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3Jl
YXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhlIEJp
c29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRl
cm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQot
ICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJz
aW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYg
eW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxm
LCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0
aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwotICAg
Qmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCi0gICBU
aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIEMgTEFMUigxKSBw
YXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQotICAgc2ltcGxp
ZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCi0KLS8q
IEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRv
IGF2b2lkCi0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJl
IGRvbmUgZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndp
c2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0gICBUaGVyZSBhcmUgc29tZSB1bmF2b2lk
YWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCi0gICBkZWZpbmUgbmVjZXNz
YXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgotICAgVVNF
UiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICov
Ci0jZGVmaW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlC
SVNPTl9WRVJTSU9OICIyLjMiCi0KLS8qIFNrZWxldG9uIG5hbWUuICAqLwotI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQ
VVJFIDEKLQotLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KLSNkZWZpbmUgWVlMU1BfTkVFREVEIDEK
LQotLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNk
ZWZpbmUgeXlwYXJzZSBwcHBhcnNlCi0jZGVmaW5lIHl5bGV4ICAgcHBsZXgKLSNkZWZpbmUgeXll
cnJvciBwcGVycm9yCi0jZGVmaW5lIHl5bHZhbCAgcHBsdmFsCi0jZGVmaW5lIHl5Y2hhciAgcHBj
aGFyCi0jZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKLSNk
ZWZpbmUgeXlsbG9jIHBwbGxvYwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQ
RQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5
bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBh
Ym91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0gMjU4LAot
ICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBIQVNIX0lG
REVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNFID0gMjYz
LAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0gICAgIERF
RklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJBR01BID0g
MjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9OID0gMjcw
LAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3MiwKLSAg
ICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0LAotICAg
ICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAgfTsKLSNl
bmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRF
RiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZp
bmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9F
TElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2NgotI2Rl
ZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFT
SF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9M
SU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hfREVGSU5F
X0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RB
TlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLS8qIENvcHkgdGhlIGZpcnN0
IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBU
aGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BB
UkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0KLQotLyogRW5hYmxpbmcg
dHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYK
LQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJP
Ul9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJC
T1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVu
YWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVm
aW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAh
IGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsK
LSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2
YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTg3IG9mIHlhY2Mu
Yy4gICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29s
ZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJF
RCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLSNpZiAhIGRlZmlu
ZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1
Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAg
aW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUg
eXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBk
ZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwg
MQotI2VuZGlmCi0KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlv
bnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxs
b2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAot
ICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFs
QmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lk
IHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotCi0KLS8qIExpbmUg
MjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNob3J0Ci0jIHVuZGVmIHNob3J0Ci0jZW5k
aWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3Vp
bnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7Ci0jZW5kaWYK
LQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Owot
I2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdHlwZWRlZiBzaWdu
ZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgotdHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBl
X3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDE2Ci10eXBlZGVmIFlZVFlQRV9J
TlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2
OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZkZWYgX19TSVpFX1RZUEVfXwotIyAg
ZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxpZiBkZWZpbmVkIHNpemVfdAotIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICBpbmNsdWRlIDxzdGRkZWYuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50Ci0jIGVuZGlmCi0j
ZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKLQotI2lmbmRl
ZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVfTkxTCi0jICAgaW5jbHVkZSA8
bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVmaW5l
IFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCi0jICBlbmRpZgot
IyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAotIyBlbmRp
ZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNp
bmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KLSMgZGVm
aW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVt
cHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mg
d2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCi0jaWZuZGVmIGxpbnQKLSMg
ZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQotI2Vsc2UKLXN0YXRpYyBpbnQK
LVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIGk7Ci19Ci0jZW5kaWYK
LQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQotCi0vKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICBpZiBZWVNUQUNLX1VT
RV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBf
X2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgot
IyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxs
b2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgIGRlZmluZSBhbGxvY2EgX2Fs
bG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCi0jICAgIGlm
ICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICAgaWZuZGVmIF9TVERMSUJfSAot
IyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgICBl
bmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZWVNUQUNLX0FMTE9DCi0gICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQotIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKLSAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KLSMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCi0j
ICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQwotIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
LSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCi0jICBlbmRp
ZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCi0g
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKLSMgICBpbmNsdWRlIDxz
dGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGlmbmRlZiBf
U1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0j
ICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0jICAgaWYgISBk
ZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYg
WVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUgJiYg
ISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhIGRlZmluZWQgeXlv
dmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYgKCEgZGVmaW5lZCB5eW92ZXJm
bG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVk
IFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYg
ZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCi0KLS8q
IEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAq
LwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZz
OwotICAgIFlZTFRZUEUgeXlsczsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdh
cCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmluZSBZ
WVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyogVGhl
IHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFj
aCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAot
ICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkgKyBz
aXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0v
KiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVz
dGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYg
ZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBG
cm9tLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkg
KiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20s
IENvdW50KSAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgIFwKLSAgICAg
IGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAgICAgICAoVG8pW3l5
aV0gPSAoRnJvbSlbeXlpXTsgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLS8qIFJlbG9jYXRlIFNU
QUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQotICAgbG9jYWwg
dmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVt
YmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3
IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkg
YWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZ
U1RBQ0tfUkVMT0NBVEUoU3RhY2spICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOyAgICAg
ICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5TdGFjazsgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZ
U1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICB5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgq
eXlwdHIpOyAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRpZgotCi0vKiBZWUZJTkFMIC0t
IFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJ
TkFMICAyCi0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUg
WVlMQVNUICAgMjQ3Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
LSNkZWZpbmUgWVlOVE9LRU5TICA0NwotLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDEyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVs
ZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBz
dGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDkxCi0KLS8qIFlZVFJBTlNMQVRFKFlZTEVY
KSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotI2Rl
ZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDI3NgotCi0jZGVmaW5lIFlZ
VFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgodW5zaWduZWQgaW50
KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKLQot
LyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGlu
ZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10g
PQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAyMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDM3
LCAgICA0MCwgICAgIDIsCi0gICAgICAyMywgICAgMjQsICAgIDM2LCAgICAzMywgICAgMjUsICAg
IDM0LCAgICAzMiwgICAgMzUsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDQsICAgIDQ1LAotICAgICAg
MjgsICAgIDQyLCAgICAyOSwgICAgNDYsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
IDI2LCAgICAgMiwgICAgMjcsICAgIDM4LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgMzAsICAgIDM5LCAgICAzMSwgICAgNDEsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmly
c3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAgIFlZUkhTLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAgICAgIDAsICAgICAwLCAgICAg
MywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNiwgICAgMTksCi0gICAg
ICAyMywgICAgMzAsICAgIDM0LCAgICAzOCwgICAgNDIsICAgIDQ2LCAgICA1MCwgICAgNTMsICAg
IDU2LCAgICA1OSwKLSAgICAgIDYyLCAgICA2NSwgICAgNjgsICAgIDcxLCAgICA3MiwgICAgNzQs
ICAgIDc1LCAgICA3NywgICAgODEsICAgIDgzLAotICAgICAgODYsICAgIDg4LCAgICA5MSwgICAg
OTQsICAgIDk5LCAgIDEwMSwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMDksCi0gICAgIDExMSwg
ICAxMTMsICAgMTE1LCAgIDExNywgICAxMTksICAgMTIxLCAgIDEyMywgICAxMjUsICAgMTI3LCAg
IDEyOSwKLSAgICAgMTMxLCAgIDEzMywgICAxMzUsICAgMTM3LCAgIDEzOSwgICAxNDEsICAgMTQz
LCAgIDE0NSwgICAxNDcsICAgMTQ5LAotICAgICAxNTEsICAgMTUzLCAgIDE1NQotfTsKLQotLyog
WVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KLXsKLSAgICAgIDQ4LCAgICAgMCwgICAg
LTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIC0xLCAgICA1MCwgICAgLTEsICAgIDUxLAotICAg
ICAgLTEsICAgIDIyLCAgICAtMSwgICAgNTUsICAgIDIyLCAgICAtMSwgICAgIDMsICAgIDIyLCAg
ICAtMSwgICAgMTcsCi0gICAgICA1MiwgICAgMjIsICAgIC0xLCAgICAxOCwgICAgMjMsICAgIDUz
LCAgICAyNCwgICAgNTIsICAgIDIyLCAgICAtMSwKLSAgICAgICA0LCAgICAyMSwgICAgMjIsICAg
IC0xLCAgICAgNSwgICAgNTQsICAgIDIyLCAgICAtMSwgICAgIDYsICAgIDIxLAotICAgICAgMjIs
ICAgIC0xLCAgICAgNywgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDksICAgIDU0LCAgICAyMiwg
ICAgLTEsCi0gICAgICAgOCwgICAgMjIsICAgIC0xLCAgICAxMCwgICAgMjIsICAgIC0xLCAgICAx
MiwgICAgMjIsICAgIC0xLCAgICAxMywKLSAgICAgIDIyLCAgICAtMSwgICAgMTQsICAgIDIyLCAg
ICAtMSwgICAgMTUsICAgIDIyLCAgICAtMSwgICAgMTYsICAgIDIyLAotICAgICAgLTEsICAgIC0x
LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDUzLCAgICAyNSwgICAgMjEs
Ci0gICAgICAtMSwgICAgNTYsICAgIC0xLCAgICA1NCwgICAgNTYsICAgIC0xLCAgICA1NywgICAg
LTEsICAgIDU1LCAgICA1NywKLSAgICAgIC0xLCAgICAxMSwgICAgMjEsICAgIC0xLCAgICAxMSwg
ICAgMjMsICAgIDIxLCAgICAyNCwgICAgLTEsICAgIDU3LAotICAgICAgLTEsICAgIDU4LCAgICAt
MSwgICAgMTksICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjYsCi0gICAg
ICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjMsICAg
IC0xLCAgICAyNCwKLSAgICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIs
ICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LAotICAgICAgLTEsICAgIDM1LCAgICAtMSwgICAg
MzYsICAgIC0xLCAgICAzNywgICAgLTEsICAgIDM4LCAgICAtMSwgICAgMzksCi0gICAgICAtMSwg
ICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMsICAgIC0xLCAg
ICA0NCwKLSAgICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgNDYsICAgIC0x
Ci19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIg
WVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtd
ID0KLXsKLSAgICAgICAwLCAgICA2MywgICAgNjMsICAgIDY1LCAgICA2OSwgICAgNzAsICAgIDc0
LCAgICA3NSwgICAgODQsICAgIDg1LAotICAgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTcsICAg
MTAwLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDExMCwgICAxMTEsCi0gICAgIDExMiwgICAxMTMs
ICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIyLCAgIDEyMywgICAxMjcsICAgMTMzLCAgIDEzNywK
LSAgICAgMTQ0LCAgIDE0OCwgICAxNTUsICAgMTU3LCAgIDE1OSwgICAxNjMsICAgMTY2LCAgIDE2
OSwgICAxNzIsICAgMTc4LAotICAgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIsICAgMTgzLCAg
IDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsCi0gICAgIDE4OSwgICAxOTAsICAgMTkx
LCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsICAgMTk3LCAgIDE5OCwKLSAgICAg
MTk5LCAgIDIwMCwgICAyMDEKLX07Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5n
IG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMs
IHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KLXN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAiJGVuZCIsICJlcnJvciIsICIkdW5k
ZWZpbmVkIiwgIkhBU0giLCAiSEFTSF9VTkRFRiIsICJIQVNIX0lGIiwKLSAgIkhBU0hfSUZERUYi
LCAiSEFTSF9JRk5ERUYiLCAiSEFTSF9FTFNFIiwgIkhBU0hfRUxJRiIsICJIQVNIX0VORElGIiwK
LSAgIkRFRklORUQiLCAiSEFTSF9FUlJPUiIsICJIQVNIX1BSQUdNQSIsICJIQVNIX0VYVEVOU0lP
TiIsICJIQVNIX1ZFUlNJT04iLAotICAiSEFTSF9MSU5FIiwgIkhBU0hfREVGSU5FX09CSiIsICJI
QVNIX0RFRklORV9GVU5DIiwgIklOVF9DT05TVEFOVCIsCi0gICJGTE9BVF9DT05TVEFOVCIsICJJ
REVOVElGSUVSIiwgIidcXG4nIiwgIicoJyIsICInKSciLCAiJywnIiwgIidbJyIsCi0gICInXSci
LCAiJzwnIiwgIic+JyIsICIneyciLCAiJ30nIiwgIicuJyIsICInKyciLCAiJy0nIiwgIicvJyIs
ICInKiciLAotICAiJyUnIiwgIideJyIsICInfCciLCAiJyYnIiwgIid+JyIsICInPSciLCAiJyEn
IiwgIic6JyIsICInOyciLCAiJz8nIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAibGluZSIsICJ0
ZXh0X2xpbmUiLCAiY29udHJvbF9saW5lIiwKLSAgInJlcGxhY2VtZW50X2xpc3QiLCAicGFyYW1l
dGVyX2xpc3QiLCAiY29uZGl0aW9uYWxfbGlzdCIsICJ0b2tlbl9saXN0IiwKLSAgImNvbmRpdGlv
bmFsX3Rva2VuIiwgInRva2VuIiwgIm9wZXJhdG9yIiwgMAotfTsKLSNlbmRpZgotCi0jIGlmZGVm
IFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVy
IGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1zdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAg
MjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAotICAgICAyNjUs
ICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3Mywg
ICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgIDEwLCAgICA0MCwgICAgNDEsICAgIDQ0LCAgICA5
MSwgICAgOTMsICAgIDYwLCAgICA2MiwKLSAgICAgMTIzLCAgIDEyNSwgICAgNDYsICAgIDQzLCAg
ICA0NSwgICAgNDcsICAgIDQyLCAgICAzNywgICAgOTQsICAgMTI0LAotICAgICAgMzgsICAgMTI2
LCAgICA2MSwgICAgMzMsICAgIDU4LCAgICA1OSwgICAgNjMKLX07Ci0jIGVuZGlmCi0KLS8qIFlZ
UjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAsICAg
IDQ3LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1MSwgICAg
NTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwg
ICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUyLCAgICA1
MiwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTQsICAgIDU0LAotICAgICAgNTUsICAgIDU1LCAg
ICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTgsCi0g
ICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OAot
fTsKLQotLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBo
YW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIy
W10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAyLCAgICAgMiwgICAgIDMsCi0gICAgICAgNiwgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMywgICAgIDEsICAgICAy
LAotICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAg
ICAgIDEsICAgICAxLCAgICAgMQotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVm
YXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCi0gICBTVEFURS1OVU0gd2hlbiBZWVRB
QkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgIG1lYW5z
IHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlkZWZhY3RbXSA9Ci17Ci0gICAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzYsICAgIDM3LAotICAgICAg
MzgsICAgICA2LCAgICA0MywgICAgNDQsICAgIDYxLCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDUsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKLSAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICAwLAotICAgICAgMzAsICAg
IDM1LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjgsICAgIDM0LCAgICAgMCwgICAg
IDAsCi0gICAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAyNCwKLSAgICAgIDI1LCAgICAgNywgICAgMzEsICAgIDExLCAgICAz
MiwgICAgIDAsICAgIDEyLCAgICAyOSwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgICA5LCAg
ICAyNiwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDMzLCAgICAgMCwgICAgMjcsCi0g
ICAgICAxMAotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgMSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNjgsICAgIDgzLCAgICA1NSwgICAgNjksICAgIDU2LAotICAgICAgNTcs
ICAgIDUxCi19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9m
IHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFD
VF9OSU5GIC01NQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Ci17Ci0gICAg
IC01NSwgICAgNzMsICAgLTU1LCAgIC0xNywgICAtMTgsICAgMTQ1LCAgIC0xMCwgICAgLTksICAg
LTE2LCAgIDE0NSwKLSAgICAgIC04LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjcs
ICAgMjAxLCAgICAyOCwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgMTczLAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzAsICAg
LTE5LCAgICAtMywgICAtNTUsICAgLTU1LCAgICAzMSwgICAgMzIsCi0gICAgIC01NSwgICAxMDks
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDMzLCAgIDIwMSwK
LSAgICAgIDI5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtMTUsICAgLTExLCAg
IDIwMSwgICAgMzYsICAgLTU1LCAgICAzNywgICAtNTUsCi0gICAgIC01NQotfTsKLQotLyogWVlQ
R09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3RvW10g
PQotewotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0yNywgICAtNTUs
ICAgIDUxLCAgICA2MCwgICAtNTQsCi0gICAgICAtMSwgICAtNTUKLX07Ci0KLS8qIFlZVEFCTEVb
WVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgot
ICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBy
dWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZ
WURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2Rl
ZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtd
ID0KLXsKLSAgICAgIDUwLCAgICA3NywgICAgNzQsICAgIDUzLCAgICA3NSwgICAgNTIsICAgIDYw
LCAgICA3NywgICAgNTQsICAgIDg1LAotICAgICAgODYsICAgIDU4LCAgICA1OSwgICAgODcsICAg
IDYyLCAgICA1MCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzYsCi0gICAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwK
LSAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDYzLCAg
ICA2NCwgICAgNjUsICAgIDY2LCAgICA3MiwgICAgNjcsCi0gICAgICA4MiwgICAgNzAsICAgIDcz
LCAgICA3OCwgICAgNzksICAgIDgxLCAgICA4NCwgICAgODksICAgIDg4LCAgICA5MCwKLSAgICAg
IDYxLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
NzIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgNTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDU0LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LAot
ICAgICAgMjAsICAgIDgwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKLSAgICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDU0LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAy
MiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAg
IDQ1LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0g
ICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NQotfTsKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tb
XSA9Ci17Ci0gICAgICAgMSwgICAgNTUsICAgIDIxLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICAy
MiwgICAgNjEsICAgIDExLCAgICAyNCwKLSAgICAgIDI1LCAgICAyMSwgICAgMjEsICAgIDI0LCAg
ICAyMiwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
Ci0gICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAyMiwg
ICAgMjIsICAgIDIyLCAgICAyMiwgICAgNDksICAgIDIyLAotICAgICAgMjEsICAgIDIzLCAgICAy
MiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDIxLCAgICA4NSwgICAgMjIsCi0gICAg
ICAgOSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDY5LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDg1LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAxMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwK
LSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAg
MjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAg
ICA0NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAot
ICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYKLX07Ci0KLS8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50
ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUt
TlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQotewotICAgICAg
IDAsICAgIDQ4LCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksCi0gICAgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1NSwKLSAgICAgIDU3LCAgICA1OCwgICAgMjIsICAgIDIxLCAgICAx
MSwgICAgNTQsICAgIDU2LCAgICA1NywgICAgMjEsICAgIDIxLAotICAgICAgMjIsICAgIDU0LCAg
ICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA1MiwgICAgNTUsCi0g
ICAgICAyMywgICAgMjIsICAgIDU3LCAgICAyMiwgICAgMjEsICAgIDIzLCAgICAyMiwgICAgNTYs
ICAgIDIyLCAgICAyMiwKLSAgICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDUzLCAgICAyMSwgICAg
MjQsICAgIDI1LCAgICAyNCwgICAgNTIsICAgIDIxLAotICAgICAgMjIKLX07Ci0KLSNkZWZpbmUg
eXllcnJvayAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmluICAgKHl5Y2hh
ciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAgICgtMikKLSNkZWZpbmUgWVlFT0YgICAg
ICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlB
Qk9SVCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IgICAgIGdvdG8geXllcnJv
cmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyBy
ZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhl
IG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJzaW9uIDIg
aGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCi0KLSNkZWZpbmUgWVlG
QUlMICAgICAgZ290byB5eWVycmxhYgotCi0jZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVy
cnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAg
ICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWNoYXIgPT0g
WVlFTVBUWSAmJiB5eWxlbiA9PSAxKSAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsgICAgICAgICAgICAgICBcCi0g
ICAgICBZWVBPUFNUQUNLICgxKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8g
eXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXllcnJvciAoJnl5
bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0g
ICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKFlZSUQgKDApKQotCi0KLSNkZWZpbmUgWVlU
RVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAyNTYKLQotCi0vKiBZWUxMT0NfREVGQVVM
VCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4g
aXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwot
ICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0j
ZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVGQVVM
VAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAg
ICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYg
KFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsgICAgXAot
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2Nv
bHVtbjsgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2xpbmU7ICAgICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNM
T0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJz
dF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgIFwKLSAgICAgICAgWVlSSFNM
T0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3VycmVudCku
Zmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0gICAgICBcCi0gICAgICAgIFlZ
UkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAgICAgICAgICAgXAotICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLSNlbmRpZgot
Ci0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3Ry
ZWFtLgotICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBv
bmx5IGlmIHdlIGtub3cKLSAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBh
cmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KLQotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklO
VAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpICAgICAgICAgIFwKLSAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwg
ICAgICAgICAgXAotICAgICAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVt
biwgXAotICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBl
bHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0j
IGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUg
cmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxF
WCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCi0jZWxzZQotIyBkZWZpbmUg
WVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0jZW5kaWYKLQotLyogRW5hYmxlIGRlYnVn
Z2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRG
Ci0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
Ci0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJ
TlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
aWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBSSU5URiBBcmdzOyAgICAg
ICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5U
KFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0
KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGls
ZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
UHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxF
ICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZ
WUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsK
LSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAg
ICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0gIFlZVVNF
ICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBp
ZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5
eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlm
Ci0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0g
ICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0
YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5
bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250
ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBj
b25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0
aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBl
IDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0
bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAl
cyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9MT0NBVElPTl9QUklOVCAoeXlvdXRwdXQs
ICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICI6ICIpOwotICB5eV9zeW1i
b2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwg
Y29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9U
VE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3By
aW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCi0jZWxzZQotc3Rh
dGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYg
KmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKLSNlbmRpZgotewotICBZWUZQUklOVEYg
KHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20p
Ci0gICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsKLSAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkg
ICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eV9zdGFja19w
cmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgw
KSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
cmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUs
IHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJp
bnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQotICAgIFlZU1RZUEUgKnl5dnNwOwot
ICAgIFlZTFRZUEUgKnl5bHNwOwotICAgIGludCB5eXJ1bGU7Ci0gICAgcHA6OkNvbnRleHQqIGNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKLSAgaW50IHl5
aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07Ci0gIFlZRlBS
SU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwK
LSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVk
dWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKLSAgICB7Ci0g
ICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5
bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0gICAgICAg
ICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAgICAgICAgICAgICwg
Jih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAgICAgLCBjb250ZXh0KTsKLSAg
ICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotfQotCi0jIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWRlYnVnKSAgICAgICAgICAgICAgXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNw
LCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLS8qIE5vbnplcm8gbWVh
bnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAot
ICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQgeXlkZWJ1ZzsKLSNlbHNl
IC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVmaW5lIFlZX1NZ
TUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQotIyBkZWZpbmUgWVlfU1RB
Q0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKLSNl
bmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBv
ZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJTklUREVQVEgKLSMgZGVmaW5l
IFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXpl
IHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0gICBpZiB0aGUgYnVpbHQt
aW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAgRG8gbm90IG1ha2UgdGhp
cyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKLSAgIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCi0gICBldmFsdWF0
ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KLQotI2lm
bmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCi0jZW5kaWYKLQotDAot
Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVuCi0jICBpZiBkZWZpbmVk
IF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJs
ZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3Ry
bGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3RybGVu
ICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgotewotICBZWVNJWkVfVCB5
eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKLSAgICBjb250
aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZm5kZWYg
eXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYm
IGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5Ci0jICBlbHNl
Ci0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0
ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5IChjaGFyICp5eWRl
c3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5ICh5
eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25zdCBjaGFyICp5eXNyYzsK
LSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0IGNoYXIgKnl5cyA9IHl5
c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQotICAgIGNvbnRpbnVl
OwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZm5kZWYg
eXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBz
dHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28g
dGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBoZXVyaXN0aWMgaXMgdGhh
dCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZwotICAgY29u
dGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCi0g
ICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElm
IFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5n
dGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4uICAqLwotc3RhdGljIFlZ
U0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKLXsKLSAg
aWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1QgeXluID0gMDsKLSAgICAg
IGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAo
KisreXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAg
ICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAgY2FzZSAnXFwnOgotICAgICAg
ICBpZiAoKisreXlwICE9ICdcXCcpCi0gICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OwotICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
aWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOwotICAgICAgICB5eW4rKzsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0g
ICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9
Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBpZiAoISB5eXJlcykKLSAg
ICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5
eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVy
cm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KLSAgIFlZQ0hBUiB3aGlsZSBp
biBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAotICAg
aW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxs
LCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0
ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAw
IGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1
cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZwotICAgc2l6ZSBjYWxj
dWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4X2Vycm9yIChjaGFyICp5eXJl
c3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17Ci0gIGludCB5eW4gPSB5eXBhY3RbeXlz
dGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQot
ICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0
bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICBZ
WVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7Ci0gICAgICBl
bnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgICAgIGNoYXIgY29u
c3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAgICAgaW50IHl5eDsK
LQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0
YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0gICAgIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLwot
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKLSAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKLSAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKLSAgICAgIFlZ
Xygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMi
KTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAgICAgIGNoYXIgKnl5Zm10OwotICAgICAg
Y2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10g
PSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0
IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29u
c3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhw
ZWN0ZWQKLSAgICAgICAgICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQotICAgICAgICAgICAg
KyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQotICAgICAgICAgICAgICAgKiAo
c2l6ZW9mIHl5b3IgLSAxKSldOwotICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVj
dGluZzsKLQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQg
bmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICBZWUNIRUNLLiAgKi8KLSAgICAgIGludCB5eXhiZWdp
biA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9m
IGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBpbnQgeXljaGVja2xpbSA9IFlZ
TEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VO
UyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQgeXljb3VudCA9IDE7Ci0KLSAg
ICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAgeXlmbXQgPSB5eXN0cGNweSAo
eXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5
eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYg
eXl4ICE9IFlZVEVSUk9SKQotICAgICAgewotICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAgICAgIHsKLSAgICAgICAgeXljb3VudCA9IDE7
Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgIHl5Zm9ybWF0W3NpemVvZiB5eXVu
ZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgeXlzaXplMSA9IHl5
c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLSAgICAgICAgeXlzaXplX292ZXJm
bG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMTsKLSAg
ICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKLSAgICAgICAgeXlwcmVm
aXggPSB5eW9yOwotICAgICAgfQotCi0gICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOwotICAgICAg
eXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAgICAgeXlzaXplX292ZXJmbG93
IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgICAg
IGlmICh5eXNpemVfb3ZlcmZsb3cpCi0gICAgcmV0dXJuIFlZU0laRV9NQVhJTVVNOwotCi0gICAg
ICBpZiAoeXlyZXN1bHQpCi0gICAgewotICAgICAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBp
bmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICAgICAgRG9uJ3QgaGF2ZSB1
bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KLSAgICAgICAgIHByb2R1
Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCi0gICAgICBj
aGFyICp5eXAgPSB5eXJlc3VsdDsKLSAgICAgIGludCB5eWkgPSAwOwotICAgICAgd2hpbGUgKCgq
eXlwID0gKnl5ZikgIT0gJ1wwJykKLSAgICAgICAgewotICAgICAgICAgIGlmICgqeXlwID09ICcl
JyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0gICAgICAgICAgeXlmICs9
IDI7Ci0gICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB5eXAr
KzsKLSAgICAgICAgICB5eWYrKzsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAg
cmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCi0M
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNF
RCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZv
aWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5
eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vs
c2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXls
b2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hhciAqeXltc2c7Ci0gICAgaW50IHl5dHlw
ZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZWUxUWVBFICp5eWxvY2F0aW9ucDsKLSAg
ICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBZWVVTRSAoeXl2YWx1ZXApOwot
ICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0KLSAgaWYgKCF5eW1z
ZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5
dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7
Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQotfQotDAotCi0vKiBQcmV2ZW50
IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCi0jaWZkZWYgWVlQQVJT
RV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50
IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwot
I2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiBkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4
dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0t
LS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0j
ZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFS
QU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAocHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250ZXh0KQotICAgIHBwOjpDb250ZXh0KiBj
b250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAg
Ki8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0KLS8qIE51bWJlciBvZiBzeW50YXggZXJy
b3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLS8qIExvY2F0aW9uIGRhdGEgZm9yIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYzsKLQotICBpbnQgeXlzdGF0ZTsK
LSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNo
aWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVz
OwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tl
biBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0g
IC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAq
LwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZ
U0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSAgLyogVGhy
ZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAgICAgYHl5bHMn
OiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUg
c2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8gcmVhbGxvY2F0
ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0
eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlz
c2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0
YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZUEUgKnl5dnMg
PSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAg
Ki8KLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07Ci0gIFlZTFRZUEUgKnl5bHMgPSB5eWxz
YTsKLSAgWVlMVFlQRSAqeXlsc3A7Ci0gIC8qIFRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIGVycm9y
IHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KLSAgWVlMVFlQRSB5eWVycm9yX3JhbmdlWzJdOwotCi0j
ZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTiksIHl5bHNw
IC09IChOKSkKLQotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8q
IFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9u
IGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0g
IFlZTFRZUEUgeXlsb2M7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMg
b2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNo
b3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3Rh
dHVzID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7ICAgICAvKiBDYXVz
ZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRl
cnMuCi0gICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawot
ICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3Rh
Y2suCi0gICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8K
LQotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2czsKLSAgeXlsc3AgPSB5eWxzOwotI2lm
IFlZTFRZUEVfSVNfVFJJVklBTAotICAvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGxvY2F0aW9u
IGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4gICovCi0gIHl5bGxvYy5maXJzdF9saW5lICAgPSB5eWxs
b2MubGFzdF9saW5lICAgPSAxOwotICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3Rf
Y29sdW1uID0gMDsKLSNlbmRpZgotCi0gIGdvdG8geXlzZXRzdGF0ZTsKLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0
IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0gICAgIGhhdmUganVzdCBiZWVu
IHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLwot
ICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0geXlzdGF0ZTsKLQotICBpZiAo
eXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGhl
IGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8K
LSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7Ci0KLSNpZmRlZiB5eW92
ZXJmbG93Ci0gICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUg
dGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBtZW1vcnkuICAqLwotICAgIFlZ
U1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAg
ICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRk
cmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICBkYXRhIGluIHVzZSBp
biB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0gICAgICAgY29uZGl0
aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotICAg
ICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgIHl5b3Zl
cmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAgICAgICAgJnl5c3MxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVv
ZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3Ap
LAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlz
cyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8qIG5vIHl5b3Zl
cmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAq
LwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAgICBpZiAoWVlNQVhERVBUSCA8
IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKLQotICAgICAgewot
ICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIHVuaW9uIHl5YWxsb2MgKnl5cHRy
ID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMg
KHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUg
KHl5dnMpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOwotIyAgdW5kZWYgWVlTVEFDS19S
RUxPQ0FURQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlz
czEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQotICAg
ICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6
ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwotCi0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0gICAgICAgICAg
KHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAoeXlzcyArIHl5
c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFCT1JUOwotICAgIH0KLQotICBZWURQUklO
VEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCi0gIGdvdG8g
eXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAotYC0tLS0tLS0tLS0t
Ki8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhl
IGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVk
IG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRv
IGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4u
ICAqLwotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gWVlQQUNUX05JTkYp
Ci0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhl
YWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFSIGlz
IGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAq
LwotICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAgewotICAgICAgWVlEUFJJTlRGICgoc3Rk
ZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAgICB5eWNoYXIgPSBZWUxFWDsKLSAgICB9
Ci0KLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICB5eWNoYXIgPSB5eXRva2Vu
ID0gWVlFT0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0
LlxuIikpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFU
RSAoeXljaGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0KLSAgLyogSWYgdGhlIHByb3BlciBhY3Rp
b24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCi0gICAgIGRldGVj
dCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5biArPSB5eXRva2VuOwotICBp
ZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCi0g
ICAgZ290byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXluXTsKLSAgaWYgKHl5biA8PSAw
KQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQotICAg
IGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsK
LSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gIC8qIENv
dW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJy
b3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVzKQotICAgIHl5ZXJyc3RhdHVz
LS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLwotICBZWV9TWU1CT0xf
UFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERp
c2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNo
YXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKLQotICB5eXN0YXRlID0geXluOwot
ICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgKisreXlsc3AgPSB5eWxsb2M7Ci0gIGdvdG8geXluZXdz
dGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZv
ciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0gIHl5biA9IHl5ZGVm
YWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVycmxhYjsKLSAgZ290
byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eXJl
ZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVj
ZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYgWVlMRU4gaXMgbm9u
emVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgIGAk
JCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFM
IHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNv
bgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZB
TAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBh
bmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1
bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKLQotICAvKiBEZWZh
dWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXlsc3AgLSB5eWxl
biksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAg
ICB7Ci0gICAgICAgIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4
cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+b3V0
cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICh5eXZzcFsoMSkgLSAoMild
LnRsaXN0KS0+YmVnaW4oKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5lbmQoKSk7Ci0gICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKCh5eWxz
cFsoMSkgLSAoMyldKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAoeXl2c3BbKDEp
IC0gKDMpXS5zdmFsKSwgTlVMTCwgKHl5dnNwWygyKSAtICgzKV0udGxpc3QpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmlu
ZU1hY3JvKCh5eWxzcFsoMSkgLSAoNildKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVu
YywgKHl5dnNwWygxKSAtICg2KV0uc3ZhbCksICh5eXZzcFsoMykgLSAoNildLnRsaXN0KSwgKHl5
dnNwWyg1KSAtICg2KV0udGxpc3QpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE6
Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oKHl5dnNwWygyKSAtICgz
KV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAg
ICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgKHl5dnNwWygyKSAtICgzKV0udGxp
c3QpID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0K
LSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlz
TWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhj
b250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkp
KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0KTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6Ci0KLSAgICB7ICh5eXZhbC50bGlzdCkg
PSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjU6Ci0KLSAgICB7ICh5eXZhbC50bGlz
dCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxp
c3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGlu
ZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2
c3BbKDEpIC0gKDMpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhu
ZXcgcHA6OlRva2VuKCh5eWxzcFsoMykgLSAoMyldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAo
eXl2c3BbKDMpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
ODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7
Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS50dmFs
KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI5OgotCi0gICAgewotICAgICAgICAo
eXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwu
dGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZhbCkpOwotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2
c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMxOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3Qp
OwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZh
bCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoKLQotICAgIHsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDM1OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2Vu
KCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCAoeXl2c3BbKDEpIC0gKDEpXS5pdmFsKSwg
TlVMTCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9s
aW5lLCBJTlRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5l
dyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5U
LCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxz
cFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5z
dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM5OgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnWyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MDoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJ10nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICc8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQyOgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnPic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MzoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJygnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICcpJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ1OgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAneyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NjoKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJ30nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICcuJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ4OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnKyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0OToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTA6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICcvJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUxOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MjoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTM6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU0Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NToK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTY6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU3
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyEnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc6JzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDYwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA2MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJywnOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc/JzsgO30KLSAgICBicmVhazsKLQotCi0v
KiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAg
fQotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxv
Yyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5eXZhbDsKLSAgKisreXlsc3AgPSB5
eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBE
ZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0
ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAgbnVtYmVyIHJlZHVjZWQgYnku
ICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZ
WU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlM
QVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAgIHl5c3RhdGUgPSB5eXRhYmxl
W3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tF
TlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjoKLSAgLyog
SWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJv
ci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAgICAgKyt5eW5lcnJzOwotI2lm
ICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8o
InN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplID0g
eXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0gICAgaWYgKHl5bXNnX2FsbG9j
IDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQotICAgICAg
ewotICAgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKLSAgICAgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
LSAgICAgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotICAgICAgICBpZiAo
eXltc2cgIT0geXltc2didWYpCi0gICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAg
ICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7Ci0gICAgICAgIGlm
ICh5eW1zZykKLSAgICAgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICB7Ci0gICAgICAgIHl5bXNnID0geXltc2didWY7Ci0gICAgICAgIHl5bXNnX2Fs
bG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgIGlmICgw
IDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLSAgICAgIHsKLSAgICAgICAgKHZv
aWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICAgICAgeXll
cnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2cpOwotICAgICAgfQotICAgIGVsc2UKLSAgICAg
IHsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7Ci0gICAgICAgIGlmICh5eXNpemUgIT0gMCkKLSAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOwotICAgICAgfQotICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gIHl5ZXJyb3JfcmFuZ2Vb
MF0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCi0gICAgewotICAgICAgLyog
SWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZ
RU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4g
ICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICBZWUFCT1JUOwotICAgIH0K
LSAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmci
LAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAg
ICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0gICAgfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAg
IHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3Ig
cmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNp
ZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0g
ICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBl
YXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAg
IGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsc3BbMS15eWxlbl07
Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlv
biB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4p
OwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHl5c3Rh
dGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIx
IC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAgLyogRWFjaCByZWFsIHRva2Vu
IHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAgICAg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCi0g
ICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8
PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotICAgICAgICB7Ci0gICAgICAg
ICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgIGlmICgwIDwgeXluKQotICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRl
IGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYg
KHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKLQotICAgICAgeXllcnJvcl9yYW5nZVswXSA9
ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0gICAgICAgICAg
eXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFD
SyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBU
OwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxsb2M7
Ci0gIC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywgYnV0IHdvdWxkIGNoYW5nZSB0aGUgbG9j
YXRpb24gb2YKLSAgICAgdGhlIGxvb2stYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdo
LiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXllcnJvcl9yYW5nZSAtIDEpLCAyKTsK
LSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwot
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3Ap
OwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBU
IGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3RvIHl5cmV0dXJuOwotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLSNpZm5k
ZWYgeXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBo
ZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygi
bWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2gu
ICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hh
ciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29r
YWhlYWQiLAotICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7Ci0g
IC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0
cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KLSAgWVlQT1BTVEFD
SyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB3aGlsZSAoeXlz
c3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIs
Ci0gICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAg
ICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYgKHl5c3Mg
IT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZRVJST1Jf
VkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0gIHJldHVybiBZ
WUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2Nw
LCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQotCi12b2lk
IHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlv
bikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0
KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17Ci0gICAg
eXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUgOiBmYWxz
ZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWY4MDYuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFi
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1h
ZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGludGVyZmFjZSBmb3IgQmlz
b24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4
OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg
b3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2Yg
eW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJz
ZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhl
cmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBt
YXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdo
aWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBv
dXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwot
ICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3Bl
Y2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24g
aW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5k
ZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2Vu
cyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMK
LSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAg
SEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwK
LSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhB
U0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0g
MjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBI
QVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hf
VkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9P
QkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFO
VCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAy
NzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVm
aW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZE
RUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0j
ZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVG
SU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4
Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0j
ZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmlu
ZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5l
IEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0jaWYg
ISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVk
ZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2
YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19
Ci0vKiBMaW5lIDE0ODkgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5
eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAx
Ci0jZW5kaWYKLQotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQ
RV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGlu
ZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29s
dW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRp
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNjRl
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVwcm9jZXNzb3IgdXRpbGl0aWVzCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgY29w
eSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0IGJlIHVz
ZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcy4KKyNkZWZpbmUgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5
cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFt
ZSYpCisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHJlcHJvY2Vzc29yLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhOTc1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nv
ci52Y3Byb2oKQEAgLTAsMCArMSwzOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlz
dWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9InByZXByb2Nlc3NvciIKKwlQcm9qZWN0
R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCisJUm9vdE5hbWVz
cGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdv
cmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFt
ZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxh
dGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgor
CQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQi
CisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxS
ZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGli
cmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9
IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
NCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmln
dXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9y
eT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNo
YXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2Vi
U2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
TUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgor
CQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUi
CisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1
bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgor
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlX
YXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
TGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFt
ZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZv
cm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5
cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRv
clRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdl
dEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRy
dWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJS
ZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3Jt
TmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQo
UGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBl
PSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIx
IgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIy
IgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJ
CQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgor
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJ
CTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwv
UmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIK
KwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJ
CQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZG
fSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3Rp
dmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhw
YW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8
L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJo
O2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJz
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJ
bnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwv
R2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3Rs
X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWNlNTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvc3RsX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gc3RsX3V0aWxzLmg6IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0jaWZuZGVmIENP
TU1PTl9TVExVVElMU19IXwotI2RlZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQotbmFtZXNwYWNl
IHBwCi17Ci0KLXN0cnVjdCBEZWxldGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZv
aWQgb3BlcmF0b3IoKSAoVCB4KSB7IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3QgRGVsZXRlU2Vj
b25kCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lkIG9wZXJhdG9y
KCkgKHN0ZDo6cGFpcjxBLCBCPiYgeCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIHBwCi0jZW5kaWYgLy8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rv
a2VuX3R5cGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3Rva2VuX3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQz
YTk0MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5f
VFlQRV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotCi0j
aW5jbHVkZSAicHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RP
S0VOX1RZUEVfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAppbmRleCA4OGQxOTZmLi4x
NTA1NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaApAQCAtNDcsNSArNDcsNCBAQCBl
eHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0
U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBj
aGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmMKaW5kZXggNjBiNjZiZC4uZmRlODUzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMKQEAgLTY2LDYgKzY2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgewog
ICAgIGNoYXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0aWMgaW50IFNjYW5Gcm9tU3Ry
aW5nKGNvbnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywg
eXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVPRjsKQEAgLTczLDcgKzc1LDcg
QEAgc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogCiBzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9z
Y2FuLCAmZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0g
eyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKIAogc3RhdGljIGludCBi
eXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwogCkBAIC0xMjYsNiAr
MTI4LDE2IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJlZUNQUCgpKTsK
IH0KIAoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBjcHAt
PlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAt
PlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAg
U2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIHN0
cl9nZXRjaCgpCiAgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBzdHJpbmdz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuaAppbmRleCAyMzNkMWRjLi5iNjdjMWQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5u
ZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaApAQCAtNjksOSArNjksOSBAQCB0eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7
CiB9IElucHV0U3JjOwogCiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIElu
dGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIg
Kik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZyb20gdGhlIHN0cmluZyBtZW50
aW9uZWQuCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKIGludCBjaGVj
a19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhpdCBhIEVPRiBhYnJ1cHRs
eSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNn
LGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2co
Y29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVy
J3MuSW5mby5sb2cKIHZvaWQgU2V0TGluZU51bWJlcihpbnQpOwogdm9pZCBTZXRTdHJpbmdOdW1i
ZXIoaW50KTsKIHZvaWQgSW5jTGluZU51bWJlcih2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgK
aW5kZXggYzE5Zjc5Yy4uZTdkMGIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKQEAgLTEwNSw3
ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29w
ZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VM
b2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CiBTeW1i
b2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKIFN5bWJvbCAq
TG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQRXJyb3JUb0lu
Zm9Mb2coY2hhciAqKTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3Rva2Vucy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYwppbmRleCBkNjU4YzEyLi5iOTRjMDVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmMKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0
eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsyNjYsOCBAQCBpbnQgUmVh
ZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICBjaGFy
IHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKICAgICBpbnQgbHRva2VuLCBsZW47CiAg
ICAgY2hhciBjaDsKKyAgICBpbnQgYmFzZSwgYWNjdW07CisgICAgY2hhciBjaF92YWw7CiAKICAg
ICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgaWYgKGx0b2tlbiA+PSAwKSB7CkBAIC0z
MTUsMTggKzMxOCw0MSBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9JTlRD
T05TVEFOVDoKICAgICAgICAgICAgIGxlbiA9IDA7CisJICAgIGFjY3VtID0gMDsKICAgICAgICAg
ICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcg
JiYgY2ggPD0gJzknKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgaWYgKGNoID09ICcwJykgeworICAg
ICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgIGNo
ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2gg
PT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwor
ICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgIGNoID0g
bFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSA4OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjaF92YWwgPSAtMTsKKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdChjaCkp
CisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gdG9s
b3dlcihjaCkgLSAnYScgKyAxMDsKKworICAgICAgICAgICAgICAgIGlmIChjaF92YWwgPCAwIHx8
IGNoX3ZhbCA+PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgIGFjY3VtID0g
YWNjdW0gKiBiYXNlICsgY2hfdmFsOworICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBU
b2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7
CiAgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICAgICAgc3RyY3B5KHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2ludCA9IGFjY3VtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJygnOgog
ICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsKQEAgLTQxNCwx
MCArNDQwLDEwIEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAq
cywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAg
ICAgICBjYXNlIENQUF9JREVOVElGSUVSOgogICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklF
UjoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yo
c3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAg
ICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgogICAgICAg
ICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKQEAgLTQyNyw5ICs0
NTMsOSBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGlmICh0b2tlbiA+PSAxMjcpCi0gICAgICAgICAgICAgICAgc3ByaW50
ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKKyAgICAgICAgICAg
ICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHRva2VuKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3ByaW50Zihz
dHIsICIlYyIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiJWMiLCB0b2tlbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKaW5kZXggODc2NmRmOS4u
ZGJmNGEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCkBAIC00OCw2ICs0OCw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZiAh
ZGVmaW5lZChfX1RPS0VOU19IKQogI2RlZmluZSBfX1RPS0VOU19IIDEKIAorI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgogCiAjZGVm
aW5lIEVPRl9TWSAoLTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzhiNzMx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDEyNyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAg
IDogbVNpbmsoc2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sKKyAgICAvLyBTYW1wbGluZyBv
cHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZUN1YmUoc0MxO3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgaW4gYm90aCB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4
dHVyZTJEKHMyMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJv
aihzMjE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIx
O3ZmNDsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzOyIp
OworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdMX2ltYWdlX2V4dGVybmFs
LgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3ZmMjsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHBy
b3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRFJlY3RQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RFJlY3RQcm9qKDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBr
bm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25zIGxpa2Ugc2lu
LCBwb3csIGV0Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQg
YXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3NlIGFzIHdlbGwuCit2b2lk
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3Qg
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVycm9ycyA9IDA7CisKKyAgICAv
LyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRvZXMgbm90IHN1cHBvcnQg
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKKyAgICAvLyBzbyB3ZSBnZW5l
cmF0ZSBlcnJvcnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2Fs
bFVzYWdlKGdyYXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFjaCBzYW1wbGVyLCB0cmF2
ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgZWFjaCB0aW1l
IHdlCisgICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgYXJl
IG5vdCBhbGxvd2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOworICAgICAgICAgaXRlciAhPSBn
cmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAg
ICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAgIGNsZWFyVmlz
aXRlZCgpOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAg
IGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVu
ZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAg
ICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAqaXRlcjsKKyAgICAgICAg
YmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAg
ICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBub3QgcGVy
bWl0dGVkLlxuIjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICArK21OdW1FcnJv
cnM7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsubG9jYXRpb24o
bm9kZS0+Z2V0TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxs
KSBjb25zdAoreworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxsLT5pc1VzZXJEZWZpbmVk
KCkgJiYKKyAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJtRnVuY3Rpb25DYWxsLT5n
ZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwordm9pZCBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIp
Cit7CisgICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdodCBsZWFrIHNlbnNpdGl2
ZSBpbmZvcm1hdGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVu
dCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3IgTE9EIGJpYXMgb2YgYQor
ICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNTYW1wbGluZ09wKHBhcmFtZXRl
ci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAgIHN3aXRjaCAocGFyYW1ldGVy
LT5nZXRBcmd1bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAgICAgICAgICAgICBiZWdpbkVy
cm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAg
IG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBl
cm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBjb29yZGluYXRl
IGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvLyBUaGlyZCBhcmd1
bWVudCAoYmlhcykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNz
aW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisg
ICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3Bl
cmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBsZXIpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24p
Cit7CisgICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNlbGVjdGlvbigpKTsKKyAg
ICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBw
ZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOworfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQorewor
ICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKKyAgICBtU2luayA8PCAiQW4g
ZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBs
b29wIGNvbmRpdGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgYmVn
aW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsKKyAgICBtU2luayA8PCAi
QW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgb24g
dGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAgICAgICAgPDwgbG9naWNhbE9w
LT5nZXRPcFN0cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRvci5cbiI7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTE2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaApAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBD
T01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIK
KworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7CisgICAgdm9pZCBlbmZv
cmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQg
bnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lk
IHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5r
OworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBT
dHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
Cit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAg
KyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAg
ICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNpbmsgPDwgIlNh
bXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNs
dWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lu
a0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJ
bmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxz
ZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDAp
IHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsg
cm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51
bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJv
cnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hB
REVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIyIEBAIGJvb2wg
RGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7CiB9CiAK
Ky8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8vIHdlIGFs
c28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRl
cHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFj
a3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sK
KyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFk
YXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICBi
b29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwg
RDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJvb2wgRGlz
cGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVu
ZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CkBAIC0x
MDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNh
Z2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNw
bGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3Bs
YXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4
ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5Ojpn
ZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNE
VVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAyODQzMS4uNGY3
ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgK
QEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7
CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0Rldmlj
ZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
Y3BwCmluZGV4IDA3YWQzY2YuLjAzOGIxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMSw2MzcgKzEsNjgyIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpTdXJmYWNlIGNs
YXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8vIHN1Y2ggYXMgdGhlIGNsaWVu
dCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KLS8vIEltcGxl
bWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2Vj
dGlvbiAyLjIgcGFnZSAzLgotCi0jaW5jbHVkZSA8dGNoYXIuaD4KLQotI2luY2x1ZGUgImxpYkVH
TC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLSNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSA8ZHdtYXBpLmg+Ci0KLW5hbWVzcGFjZSBlZ2wK
LXsKLQotbmFtZXNwYWNlCi17Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRvd3NWaXN0YSA9IE1BS0VX
T1JEKDB4MDAsIDB4MDYpOwotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VXT1JEKDB4
MDEsIDB4MDYpOwotCi0vLyBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0
ZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIG9yZGVyaW5nCi0vLyBjb21wYXJpc29uLgotaW50
IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQotewotICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJz
aW9uKCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lvbikpOwot
ICAgIGludCBtaW5vclZlcnNpb24gPSBISUJZVEUoTE9XT1JEKHZlcnNpb24pKTsKLSAgICByZXR1
cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOwotfQotfQotCi1TdXJmYWNl
OjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdp
bmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAotICAgIDogbURpc3BsYXkoZGlz
cGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cpLCBtUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxM
OwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwot
ICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwot
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJF
OwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAgICBtUGl4ZWxBc3Bl
Y3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1F
OiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1SZW5kZXJCdWZmZXIg
PSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VS
VkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Ci0K
LSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRp
c3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3
aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1
cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWco
Y29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdo
dChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCi17Ci0gICAgbVN3
YXBDaGFpbiA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJlbmRlclRh
cmdldCA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1XaW5kb3dT
dWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1UZXh0dXJlRm9y
bWF0ID0gdGV4dHVyZUZvcm1hdDsKLSAgICBtVGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOwot
Ci0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FM
SU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAg
ICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZpb3IgPSBF
R0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgc2V0U3dh
cEludGVydmFsKDEpOwotfQotCi1TdXJmYWNlOjp+U3VyZmFjZSgpCi17Ci0gICAgdW5zdWJjbGFz
c1dpbmRvdygpOwotICAgIHJlbGVhc2UoKTsKLX0KLQotYm9vbCBTdXJmYWNlOjppbml0aWFsaXpl
KCkKLXsKLSAgICBBU1NFUlQoIW1Td2FwQ2hhaW4gJiYgIW1PZmZzY3JlZW5UZXh0dXJlICYmICFt
RGVwdGhTdGVuY2lsKTsKLQotICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkKLSAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2lu
ZG93LCBpZiB3ZSBhcmUgY29tcG9zaXRlZCwKLSAgICAvLyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50
IG9mIHF1ZXVpbmcgZG9uZSBieSBEV00gYmV0d2VlbiBvdXIgY2FsbHMgdG8KLSAgICAvLyBwcmVz
ZW50IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4KLSAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFy
YWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7Ci0gICAgICBCT09MIGlz
Q29tcG9zaXRlZDsKLSAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3NpdGlvbkVuYWJs
ZWQoJmlzQ29tcG9zaXRlZCk7Ci0gICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21w
b3NpdGVkKSB7Ci0gICAgICAgIERXTV9QUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtczsK
LSAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2VudFBhcmFtcykp
OwotICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9QQVJB
TUVURVJTKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jQnVmZmVyID0gMjsKLQotICAgICAgICBy
ZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBhcmFtcyk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICBFUlIoIlVuYWJsZSB0byBz
ZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQotewotICAg
IGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwot
ICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBtVGV4dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsK
LSAgICB9Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICgh
bVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1I
ZWlnaHQpOwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVu
dFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChmYWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRv
dyBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2lu
ZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVz
ZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwot
Ci0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCAmJiBtUmVuZGVyVGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLSAg
ICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICAvLyBF
dmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQg
cmVsZWFzZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRv
IGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAgZGV2aWNlLT5F
dmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLSAgICByZWxlYXNlKCk7Ci0KLSAgICBEM0RQUkVTRU5U
X1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICBib29sIHVzZUZsaXBFeCA9IChnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPj0gdmVy
c2lvbldpbmRvd3M3KSAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKTsKLQotICAgIC8vIEZs
aXBFeCBjYXVzZXMgdW5zZWVtbHkgc3RyZXRjaGluZyB3aGVuIHJlc2l6aW5nIHdpbmRvd3MgQU5E
IHdoZW4gb25lCi0gICAgLy8gZHJhd3Mgb3V0c2lkZSBvZiB0aGUgV01fUEFJTlQgY2FsbGJhY2su
IFdoaWxlIHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSBpbgotICAgIC8vIHNpbmdsZSBwcm9jZXNz
IGFwcGxpY2F0aW9ucywgaXQgaXMgcGFydGljdWFybHkgbm90aWNlYWJsZSBpbiBtdWx0aXByb2Nl
c3MKLSAgICAvLyBhcHBsaWNhdGlvbnMuIFRoZXJlZm9yZSwgaWYgdGhlIGNyZWF0b3IgcHJvY2Vz
cyBvZiBvdXIgd2luZG93IGlzIG5vdCBpbgotICAgIC8vIHRoZSBjdXJyZW50IHByb2Nlc3MsIGRp
c2FibGUgdXNlIG9mIEZsaXBFeC4KLSAgICBEV09SRCB3aW5kb3dQSUQ7Ci0gICAgR2V0V2luZG93
VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZ3aW5kb3dQSUQpOwotICAgIGlmICh3aW5kb3dQSUQg
IT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IEQz
RFNXQVBFRkZFQ1RfRkxJUEVYIHdoZW4gZWl0aGVyIHRoZQotICAgIC8vIGRldmljZSBmb3JtYXQg
b3IgYmFjayBidWZmZXIgZm9ybWF0IGlzIG5vdCAzMi1iaXQuCi0gICAgSERDIGRldmljZUNvbnRl
eHQgPSBHZXREQygwKTsKLSAgICBpbnQgZGV2aWNlRm9ybWF0Qml0cyA9IEdldERldmljZUNhcHMo
ZGV2aWNlQ29udGV4dCwgQklUU1BJWEVMKTsKLSAgICBSZWxlYXNlREMoMCwgZGV2aWNlQ29udGV4
dCk7Ci0gICAgaWYgKG1Db25maWctPm1CdWZmZXJTaXplICE9IDMyIHx8IGRldmljZUZvcm1hdEJp
dHMgIT0gMzIpCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBpcyBhbHdheXMgVlNZTkNlZAotICAgIGlmIChtU3dh
cEludGVydmFsID09IDApCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgYmFj
ayBidWZmZXIuCi0gICAgaWYgKG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotICAgIHsKLSAgICAg
ICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0
b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAg
Ly8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVuIHdlIHVzZSBEM0RTV0FQRUZG
RUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBh
IGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAgICAvLyBvciAyLiBUaGUgcnVu
dGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlz
Ci0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGluZyB1cywgb3IgYmV0dGVyLCBk
b2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRo
YXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJD
b3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0
b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVt
ZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdyZWF0ZXIuCi0gICAg
aWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNX
QVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBF
ZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZFQ1RfQ09QWSA6IEQz
RFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRS
VUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldp
ZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVy
SGVpZ2h0OwotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBD
aGFpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxM
OwotICAgICAgICBpZiAobURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpIHsKLSAgICAg
ICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtT2Zm
c2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5W
QUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLQotICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3Vy
ZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgIAot
ICAgICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByZXNlcnZl
ZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihpc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtV2luZG93KQotICAgIHsK
LSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVf
TU9OTywgJm1SZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIXByZXNlcnZlZFJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywgTlVMTCwg
RkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1PZmZz
Y3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIH0K
LQotICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBSRUNUIHJl
Y3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgbVdpZHRoLCBt
SGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2Fz
dDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRo
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9O
Rz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlY3QuYm90dG9tID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsK
LSAgICAgICAgfQotCi0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KHByZXNlcnZlZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJn
ZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOwotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktO
T1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxT
dXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQs
IHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBk
ZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7
Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGg7Ci0gICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQ7Ci0KLSAgICBtUHJlc2VudEludGVydmFsRGlydHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQotewotICAgIHJldHVybiBt
V2luZG93OwotfQotCi0KLSNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJm
YWNlT3duZXIiKQotI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVYVCgiRWdsOjpTdXJmYWNlUGFy
ZW50V25kUHJvYyIpCi0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9j
KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQot
ewotICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQotICB7Ci0gICAgICBTdXJmYWNlKiBzdXJmID0g
cmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25kLCBrU3VyZmFjZVByb3BlcnR5
KSk7Ci0gICAgICBpZihzdXJmKQotICAgICAgewotICAgICAgICAgIHN1cmYtPmNoZWNrRm9yT3V0
T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAgICB9Ci0gIH0KLSAgV05EUFJPQyBwcmV2V25kRnVuYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHduZCwga1BhcmVudFduZFByb2Mp
KTsKLSAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNzYWdlLCB3
cGFyYW0sIGxwYXJhbSk7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3coKQotewot
ICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBE
V09SRCBwcm9jZXNzSWQ7Ci0gICAgRFdPUkQgdGhyZWFkSWQgPSBHZXRXaW5kb3dUaHJlYWRQcm9j
ZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7Ci0gICAgaWYgKHByb2Nlc3NJZCAhPSBHZXRDdXJy
ZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0TGFzdEVycm9yKDApOwotICAgIExP
TkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJP
QywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsKLSAgICBp
ZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VTUykKLSAg
ICB7Ci0gICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHksIHJlaW50ZXJw
cmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2V0UHJvcChtV2luZG93LCBrUGFyZW50V25k
UHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFByb2MpKTsKLSAgICBtV2luZG93
U3ViY2xhc3NlZCA9IHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygp
Ci17Ci0gICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIHVuLXN1YmNsYXNzCi0gICAgTE9OR19QVFIgcGFyZW50V25kRnVuYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdpbmRvdywga1BhcmVudFduZFBy
b2MpKTsKLQotICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5k
b3dQcm9jLgotICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0IGlzIGxpa2VseSB0
aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCi0gICAgLy8gaHduZCBhcyB3ZWxsIGFu
ZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBU
aGUKLSAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNs
YXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gRUdMIGNvbnRleHQsIG9yIHRvIHVu
c3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgotICAgIGlmKHBhcmVu
dFduZEZ1bmMpCi0gICAgewotICAgICAgICBMT05HX1BUUiBwcmV2V25kRnVuYyA9IFNldFdpbmRv
d0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRXbmRGdW5jKTsKLSAgICAgICAg
QVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VX
aW5kb3dQcm9jKSk7Ci0gICAgfQotCi0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3VyZmFjZVBy
b3BlcnR5KTsKLSAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsKLSAgICBt
V2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotfQotCi1ib29sIFN1cmZhY2U6OmNoZWNrRm9yT3V0
T2ZEYXRlU3dhcENoYWluKCkKLXsKLSAgICBSRUNUIGNsaWVudDsKLSAgICBpZiAoIUdldENsaWVu
dFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEdyb3cgdGhl
IGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdyb3cgbm93
IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KLSAgICBpbnQgY2xpZW50V2lkdGggPSBjbGll
bnQucmlnaHQgLSBjbGllbnQubGVmdDsKLSAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xpZW50LmJv
dHRvbSAtIGNsaWVudC50b3A7Ci0gICAgYm9vbCBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBn
ZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKLQotICAgIGlmIChzaXpl
RGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQotICAgIHsKLSAgICAgICAgcmVzZXRTd2Fw
Q2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJlbnRDb250ZXh0KCksIHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5KCkpLCB0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLURXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17
Ci0gICAgc3dpdGNoKGludGVydmFsKQotICAgIHsKLSAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBS
RVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7Ci0g
ICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVS
VkFMX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6c3dhcCgpCi17Ci0gICAgaWYgKG1Td2Fw
Q2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVM
TCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
c0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxh
eS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBjaGVj
a0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQg
d2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
UEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlz
IHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0g
ICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHgsIG1IZWlnaHQgLSB5
IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQotICAgICAgICB9
OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3Qu
Ym90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBt
SGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QubGVmdCA9PSByZWN0LnJpZ2h0
IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFp
bi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCByZXN1bHQgPT0g
RDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VSRU1PVkVEKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgZmFsc2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVy
biBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7Ci19
Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlEaXJlY3QzRFN1
cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLUlEaXJlY3QzRFRleHR1cmU5ICpTdXJmYWNl
OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0g
ICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi12b2lkIFN1cmZhY2U6OnNldFN3YXBJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1Td2FwSW50ZXJ2YWwgPT0gaW50ZXJ2
YWwpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1Td2FwSW50ZXJ2
YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRlcnZh
bCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKLSAgICBtU3dhcEludGVydmFsID0g
c3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRlcnZhbCgpKTsK
LQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3YXBJbnRlcnZhbCk7
Ci0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKLX0KLQotRUdMZW51bSBTdXJmYWNl
OjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVGb3JtYXQ7
Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1UZXh0dXJlVGFyZ2V0OwotfQotCi12b2lkIFN1cmZhY2U6OnNldEJvdW5kVGV4dHVy
ZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKLX0K
LQotZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUQzREZPUk1BVCBTdXJmYWNlOjpnZXRGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotfQotfQor
Ly8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gU3VyZmFjZS5jcHA6IEltcGxlbWVudHMgdGhl
IGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlDQorLy8g
c3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBi
dWZmZXJzLg0KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLg0KKw0KKyNpbmNsdWRlIDx0Y2hhci5o
Pg0KKw0KKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIg0KKw0KKyNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCINCisNCisjaW5jbHVkZSAi
bGliRUdML21haW4uaCINCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVk
ZSA8ZHdtYXBpLmg+DQorDQorbmFtZXNwYWNlIGVnbA0KK3sNCisNCituYW1lc3BhY2UNCit7DQor
Y29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsNCitj
b25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7DQorDQorLy8g
UmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIGEgZm9ybWF0IHN1
aXRhYmxlIGZvciBvcmRlcmluZw0KKy8vIGNvbXBhcmlzb24uDQoraW50IGdldENvbXBhcmFibGVP
U1ZlcnNpb24oKQ0KK3sNCisgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsNCisgICAg
aW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lvbikpOw0KKyAgICBpbnQgbWlu
b3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7DQorICAgIHJldHVybiBNQUtFV09S
RChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7DQorfQ0KK30NCisNCitTdXJmYWNlOjpTdXJm
YWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywg
RUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIA0KKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkp
LCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkNCit7DQorICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0K
KyAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOw0K
KyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIG1U
ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7DQorICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdM
X05PX1RFWFRVUkU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICog
RUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwg
YXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7DQorICAg
IG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisgICAgbVN3YXBJbnRlcnZh
bCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorDQorICAgIHN1YmNsYXNzV2luZG93
KCk7DQorfQ0KKw0KK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29u
ZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVp
Z2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4dHVyZVR5cGUpDQorICAgIDog
bURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJl
SGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpDQorew0KKyAgICBtU3dhcENoYWluID0gTlVM
TDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsN
CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVM
TDsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisgICAgbVRleHR1cmUgPSBOVUxM
Ow0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7DQorICAgIG1UZXh0dXJlVGFy
Z2V0ID0gdGV4dHVyZVR5cGU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCko
MS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwg
cGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7
DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisgICAgbVN3YXBJ
bnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorfQ0KKw0KK1N1cmZhY2U6
On5TdXJmYWNlKCkNCit7DQorICAgIHVuc3ViY2xhc3NXaW5kb3coKTsNCisgICAgcmVsZWFzZSgp
Ow0KK30NCisNCitib29sIFN1cmZhY2U6OmluaXRpYWxpemUoKQ0KK3sNCisgICAgQVNTRVJUKCFt
U3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7DQorDQor
ICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkNCisgICAgICByZXR1cm4gZmFsc2U7DQorDQorICAg
IC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2luZG93LCBpZiB3ZSBhcmUg
Y29tcG9zaXRlZCwNCisgICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRv
bmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvDQorICAgIC8vIHByZXNlbnQgYW5kIHRoZSBh
Y3R1YWwgc2NyZWVuLg0KKyAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lv
bigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7DQorICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7
DQorICAgICAgSFJFU1VMVCByZXN1bHQgPSBEd21Jc0NvbXBvc2l0aW9uRW5hYmxlZCgmaXNDb21w
b3NpdGVkKTsNCisgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21wb3NpdGVkKSB7
DQorICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7DQorICAgICAg
ICBtZW1zZXQoJnByZXNlbnRQYXJhbXMsIDAsIHNpemVvZihwcmVzZW50UGFyYW1zKSk7DQorICAg
ICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9QQVJBTUVURVJT
KTsNCisgICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7DQorDQorICAgICAgICByZXN1
bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBhcmFtcyk7DQor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICAgIEVSUigiVW5hYmxlIHRvIHNl
dCBwcmVzZW50IHBhcmFtZXRlcnM6IDB4JTA4WCIsIHJlc3VsdCk7DQorICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQ0K
K3sNCisgICAgaWYgKG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsNCisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlm
IChtQmFja0J1ZmZlcikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsN
CisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRo
U3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1SZW5kZXJU
YXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAg
ICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVu
VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsN
CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsN
CisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBtU2hhcmVIYW5kbGUg
PSBOVUxMOw0KK30NCisNCitib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkNCit7DQorICAg
IGlmICghbVdpbmRvdykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKG1X
aWR0aCwgbUhlaWdodCk7DQorICAgIH0NCisNCisgICAgUkVDVCB3aW5kb3dSZWN0Ow0KKyAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkNCisgICAg
ew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisNCisgICAgICAgIEVSUigiQ291bGQgbm90IHJl
dHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0K
KyAgICB9DQorDQorICAgIHJldHVybiByZXNldFN3YXBDaGFpbih3aW5kb3dSZWN0LnJpZ2h0IC0g
d2luZG93UmVjdC5sZWZ0LCB3aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wKTsNCit9
DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBp
bnQgYmFja2J1ZmZlckhlaWdodCkNCit7DQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8gRXZpY3QgYWxs
IG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2Ug
YWxsIHJlc291cmNlcw0KKyAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1
cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4NCisgICAgZGV2aWNlLT5FdmljdE1h
bmFnZWRSZXNvdXJjZXMoKTsNCisNCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQ
YXJhbWV0ZXJzID0gezB9Ow0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisNCisgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxG
b3JtYXQ7DQorICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1
c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguDQorICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBEaXJl
Y3RYIGRvY3MgYXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0IHRoaXMgdG8gMQ0KKyAgICAv
LyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRo
YXQgZWl0aGVyIGl0IGlzDQorICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0IHRlbGxpbmcg
dXMsIG9yIGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0DQorICAgIC8vIGJlaGluZCB0aGUg
c2NlbmVzIGtub3dpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIG1vcmUuDQorICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0Ow0KKyAgICBwcmVzZW50
UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7DQorICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkZsYWdzID0gMDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRv
dyA9IGdldFdpbmRvd0hhbmRsZSgpOw0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkDQor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05P
TkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJl
c2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFsOw0KKyAgICBwcmVzZW50UGFyYW1l
dGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOw0KKyAgICBwcmVzZW50UGFy
YW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7DQorDQorICAgIC8vIFJlbGVhc2Ugc3BlY2lm
aWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQs
IHdoaWxlIHRoZQ0KKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRo
ZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLg0KKyAgICBpZiAobVN3YXBDaGFp
bikNCisgICAgew0KKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbVN3
YXBDaGFpbiA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1CYWNrQnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgbUJhY2tCdWZmZXIg
PSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0K
KyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsNCisgICAgICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisg
ICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICAgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCisg
ICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBpZiAoIW1XaW5kb3cgJiYgbURp
c3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpDQorICAgIHsNCisgICAgICAgIHBTaGFyZUhh
bmRsZSA9ICZtU2hhcmVIYW5kbGU7DQorICAgIH0NCisNCisgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhh
bmRsZSk7DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7DQorICAg
ICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7
DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxz
ZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJl
bmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7DQorDQorICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5U
ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOw0KKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQ0KKyAgICB7
DQorICAgICAgICBSRUNUIHJlY3QgPQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIDAsIDAsDQor
ICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0DQorICAgICAgICB9Ow0KKw0KKyAgICAgICAgaWYg
KHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAo
cmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVySGVpZ2h0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7DQorICAgICAgICB9DQorDQorICAgICAgICBt
RGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRj
aFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRF
WEZfTk9ORSk7DQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICAg
ICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgaWYgKG1XaW5k
b3cpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3
YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsNCisNCisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8
IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUKTsNCisNCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBz
d2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsNCisgICAg
ICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorDQorICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVy
KDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOw0KKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNvbmZpZy0+bURl
cHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikNCisgICAgew0KKyAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0
aVNhbXBsZVR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwgJm1E
ZXB0aFN0ZW5jaWwsIE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZB
TElEQ0FMTCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3Rl
bmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsNCisgICAg
ICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlcldpZHRoOw0KKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckhlaWdodDsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7DQorICAgIHJl
dHVybiB0cnVlOw0KK30NCisNCitib29sIFN1cmZhY2U6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xp
bnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQ0KK3sNCisgICAgaWYgKCFtU3dhcENo
YWluKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
eCArIHdpZHRoID4gbVdpZHRoKQ0KKyAgICB7DQorICAgICAgICB3aWR0aCA9IG1XaWR0aCAtIHg7
DQorICAgIH0NCisNCisgICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQ0KKyAgICB7DQorICAg
ICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsNCisgICAgfQ0KKw0KKyAgICBpZiAod2lkdGggPT0g
MCB8fCBoZWlnaHQgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0N
CisNCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgp
Ow0KKw0KKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zDQorICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOw0KKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsNCisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsNCisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7
DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9O
RSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFM
U0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwg
MCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
RDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7DQorICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7DQor
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNF
KTsNCisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsNCisgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7DQorDQorICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1C
YWNrQnVmZmVyKTsNCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOw0K
Kw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOw0KKyAgICBk
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VM
RUNUQVJHMSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NP
TE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsNCisgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOw0KKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lO
VCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQz
RFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOw0KKyAgICBkZXZpY2UtPlNldEZWRihEM0RG
VkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOw0KKw0KKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQg
PSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsNCisgICAgZGV2aWNlLT5TZXRW
aWV3cG9ydCgmdmlld3BvcnQpOw0KKw0KKyAgICBmbG9hdCB4MSA9IHggLSAwLjVmOw0KKyAgICBm
bG9hdCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOw0KKyAgICBmbG9hdCB4MiA9
ICh4ICsgd2lkdGgpIC0gMC41ZjsNCisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41
ZjsNCisNCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsNCisgICAgZmxvYXQgdjEg
PSB5IC8gZmxvYXQobUhlaWdodCk7DQorICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9h
dChtV2lkdGgpOw0KKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQp
Ow0KKw0KKyAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2
Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYy
fSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19
OyAgIC8vIHgsIHksIHosIHJodywgdSwgdg0KKw0KKyAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgp
Ow0KKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVh
ZCwgNiAqIHNpemVvZihmbG9hdCkpOw0KKyAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOw0KKw0KKyAgICBSRUNUIHJlY3QgPQ0KKyAg
ICB7DQorICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwNCisgICAgICAgIHggKyB3aWR0
aCwgbUhlaWdodCAtIHkNCisgICAgfTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENo
YWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7DQorDQorICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdldEN1cnJlbnRD
b250ZXh0KCkpOw0KKyAgICBpZiAoY29udGV4dCkNCisgICAgew0KKyAgICAgICAgY29udGV4dC0+
bWFya0FsbFN0YXRlRGlydHkoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJl
c3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigp
Ow0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dI
YW5kbGUoKQ0KK3sNCisgICAgcmV0dXJuIG1XaW5kb3c7DQorfQ0KKw0KKw0KKyNkZWZpbmUga1N1
cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIiKQ0KKyNkZWZpbmUga1BhcmVu
dFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQ0KKw0KK3N0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQ0KK3sNCisgIGlmIChtZXNzYWdlID09IFdN
X1NJWkUpDQorICB7DQorICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Vy
ZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOw0KKyAgICAgIGlmKHN1cmYp
DQorICAgICAgew0KKyAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigp
Ow0KKyAgICAgIH0NCisgIH0NCisgIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVycHJldF9j
YXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7DQorICByZXR1cm4g
Q2FsbFdpbmRvd1Byb2MocHJldlduZEZ1bmMsIGh3bmQsIG1lc3NhZ2UsIHdwYXJhbSwgbHBhcmFt
KTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdygpDQorew0KKyAgICBpZiAo
IW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBEV09S
RCBwcm9jZXNzSWQ7DQorICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vz
c0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOw0KKyAgICBpZiAocHJvY2Vzc0lkICE9IEdldEN1cnJl
bnRQcm9jZXNzSWQoKSB8fCB0aHJlYWRJZCAhPSBHZXRDdXJyZW50VGhyZWFkSWQoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFNldExhc3RFcnJvcigwKTsNCisg
ICAgTE9OR19QVFIgb2xkV25kUHJvYyA9IFNldFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9X
TkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93UHJvYykpOw0K
KyAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VT
UykNCisgICAgew0KKyAgICAgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVy
dHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7DQorICAgIFNldFByb3AobVdpbmRv
dywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7
DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjp1
bnN1YmNsYXNzV2luZG93KCkNCit7DQorICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIC8vIHVuLXN1YmNsYXNzDQorICAg
IExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQ
cm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7DQorDQorICAgIC8vIENoZWNrIHRoZSB3aW5k
b3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5kb3dQcm9jLg0KKyAgICAvLyBJZiB0aGlzIGFzc2Vy
dCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2Vk
IHRoZQ0KKyAgICAvLyBod25kIGFzIHdlbGwgYW5kIGRpZCBub3QgdW5zdWJjbGFzcyBiZWZvcmUg
ZGVzdHJveWluZyBpdHMgRUdMIGNvbnRleHQuIFRoZQ0KKyAgICAvLyBhcHBsaWNhdGlvbiBzaG91
bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhl
DQorICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5n
IHRoZSBFR0wgY29udGV4dC4NCisgICAgaWYocGFyZW50V25kRnVuYykNCisgICAgew0KKyAgICAg
ICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBf
V05EUFJPQywgcGFyZW50V25kRnVuYyk7DQorICAgICAgICBBU1NFUlQocHJldlduZEZ1bmMgPT0g
cmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsNCisgICAgfQ0K
Kw0KKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHkpOw0KKyAgICBSZW1v
dmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQg
PSBmYWxzZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFp
bigpDQorew0KKyAgICBSRUNUIGNsaWVudDsNCisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdp
bmRvd0hhbmRsZSgpLCAmY2xpZW50KSkNCisgICAgew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICAvLyBHcm93IHRoZSBidWZm
ZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBh
dm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uDQorICAgIGludCBjbGllbnRXaWR0aCA9IGNsaWVudC5y
aWdodCAtIGNsaWVudC5sZWZ0Ow0KKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xpZW50LmJvdHRv
bSAtIGNsaWVudC50b3A7DQorICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0
V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7DQorDQorICAgIGlmIChzaXpl
RGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQ0KKyAgICB7DQorICAgICAgICByZXNldFN3
YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsNCisgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQo
KSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgcmV0
dXJuIGZhbHNlOw0KK30NCisNCitEV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50
IGludGVydmFsKQ0KK3sNCisgICAgc3dpdGNoKGludGVydmFsKQ0KKyAgICB7DQorICAgICAgY2Fz
ZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7DQorICAgICAgY2FzZSAx
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7DQorICAgICAgY2FzZSAyOiByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9UV087DQorICAgICAgY2FzZSAzOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9USFJFRTsNCisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVS
VkFMX0ZPVVI7DQorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAg
ICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOw0KK30NCisNCitib29sIFN1cmZh
Y2U6OnN3YXAoKQ0KK3sNCisgICAgcmV0dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwgbUhlaWdo
dCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50
IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQorICAgIGlmICghbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQpDQorICAgIHsNCisgICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFi
b3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLg0KKyAgICAgICAgcmV0dXJuIHRydWU7DQor
ICAgIH0NCisgICAgDQorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsN
Cit9DQorDQorRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtV2lkdGg7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdA0KK3sN
CisgICAgcmV0dXJuIG1IZWlnaHQ7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkOw0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpDQorew0KKyAgICBpZiAobVJlbmRlclRh
cmdldCkNCisgICAgew0KKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkN
Cit7DQorICAgIGlmIChtRGVwdGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBtRGVwdGhTdGVu
Y2lsLT5BZGRSZWYoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsNCit9
DQorDQorSURpcmVjdDNEVGV4dHVyZTkgKlN1cmZhY2U6OmdldE9mZnNjcmVlblRleHR1cmUoKQ0K
K3sNCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZS0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1PZmZzY3JlZW5U
ZXh0dXJlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50
ZXJ2YWwpDQorew0KKyAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBpbnRlcnZhbCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBtU3dhcEludGVydmFsID0gaW50
ZXJ2YWw7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVydmFsLCBtRGlz
cGxheS0+Z2V0TWluU3dhcEludGVydmFsKCkpOw0KKyAgICBtU3dhcEludGVydmFsID0gc3RkOjpt
aW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRlcnZhbCgpKTsNCisNCisg
ICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsNCisg
ICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsNCit9DQorDQorRUdMZW51bSBTdXJmYWNl
OjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZUZvcm1h
dDsNCit9DQorDQorRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzZXRC
b3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkNCit7DQorICAgIG1UZXh0dXJlID0g
dGV4dHVyZTsNCit9DQorDQorZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9DQorDQorRDNERk9STUFUIFN1
cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRl
clRhcmdldEZvcm1hdDsNCit9DQorfQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmgKaW5kZXggMzUyNjBkZS4uNDBiZDcwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKQEAgLTY5LDYgKzY5LDcgQEAgcHJpdmF0
ZToKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwogICAgIElEaXJlY3QzRFN3YXBDaGFp
bjkgKm1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwogICAg
IElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwogICAgIElEaXJlY3QzRFN1cmZhY2U5
KiBtUmVuZGVyVGFyZ2V0OwogICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVy
ZTsKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7
CiAgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CiAgICAgYm9vbCByZXNldFN3YXBDaGFpbihp
bnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7CisgICAgYm9vbCBzd2Fw
UmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7CiAg
ICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwogCiAgICAg
Y29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNl
IGlzIGNyZWF0ZWQgZm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wuY3BwCmluZGV4IDRiN2Y5ZTEuLjUwODlkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKQEAgLTExMDgsNiArMTEwOCwxMSBAQCBFR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoRUdMRGlzcGxheSBkcHksIEVHTFN1
cmZhY2Ugc3VyZmFjZSwgRUdMaQogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBpZiAoeCA8IDAg
fHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAg
fQorCiAgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CiAgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19j
YXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAppbmRleCA2NmNkNWMwLi4xYjQ2NjRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAKQEAgLTEsNDI3NiArMSw0MzM5IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb250ZXh0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBz
dGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBH
TEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0luZGV4
RGF0YU1hbmFnZXIuaCIKLQotI3VuZGVmIG5lYXIKLSN1bmRlZiBmYXIKLQotbmFtZXNwYWNlIGds
Ci17Ci1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtQ29uZmlnKGNvbmZpZykKLXsKLSAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZh
bHNlKTsgICAvLyBVbmltcGxlbWVudGVkCi0KLSAgICBtRGlzcGxheSA9IE5VTEw7Ci0gICAgbURl
dmljZSA9IE5VTEw7Ci0KLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgw
KTsKLQotICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci0KLSAgICBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFs
dWUgPSAwOwotCi0gICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7Ci0gICAgbVN0YXRlLmN1bGxN
b2RlID0gR0xfQkFDSzsKLSAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOwotICAgIG1TdGF0
ZS5kZXB0aFRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGVwdGhGdW5jID0gR0xfTEVTUzsKLSAg
ICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9P
TkU7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLmRl
c3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVS
TzsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwotICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRDb2xv
ci5yZWQgPSAwOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsKLSAgICBtU3RhdGUu
YmxlbmRDb2xvci5ibHVlID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0g
R0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNp
bE1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0
ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
ID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOwotICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX0tFRVA7
Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9L
RUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAg
IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0RmFjdG9yID0gMC4wZjsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsK
LSAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNh
bXBsZUNvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAx
LjBmOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNlOwotICAgIG1TdGF0
ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOwotICAgIG1T
dGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7Ci0gICAgbVN0YXRlLmZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7Ci0KLSAgICBtU3RhdGUubGlu
ZVdpZHRoID0gMS4wZjsKLQotICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgIG1TdGF0ZS52
aWV3cG9ydFkgPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuSGVpZ2h0OwotICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7Ci0gICAgbVN0YXRlLnpGYXIg
PSAxLjBmOwotCi0gICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICBtU3RhdGUuc2Npc3Nvclkg
PSAwOwotICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0
aDsKLSAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdo
dDsKLQotICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiA9IHRydWU7Ci0gICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOwotICAgIG1T
dGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7Ci0gICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7
Ci0KLSAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwotICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
bVJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICAv
LyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKLSAgICAvLyBJbiB0aGUg
aW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2Rp
bWVuc2lvbmFsCi0gICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNw
ZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nl
c3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRl
ZCBhcyB0ZXh0dXJlCi0gICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCi0K
LSAgICBtVGV4dHVyZTJEWmVyby5zZXQobmV3IFRleHR1cmUyRCgwKSk7Ci0gICAgbVRleHR1cmVD
dWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsKLQotICAgIG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID0gMDsKLSAgICBiaW5kQXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZEVsZW1lbnRB
cnJheUJ1ZmZlcigwKTsKLSAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7Ci0gICAgYmluZFRleHR1
cmUyRCgwKTsKLSAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAgIGJpbmREcmF3RnJhbWVi
dWZmZXIoMCk7Ci0gICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLQotICAgIG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSA9IDA7Ci0KLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRl
LnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBm
YWxzZTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0gICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7
Ci0KLSAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLSAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7
Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBtT3V0T2ZNZW1vcnkgPSBmYWxz
ZTsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICBtSGFz
QmVlbkN1cnJlbnQgPSBmYWxzZTsKLSAgICBtQ29udGV4dExvc3QgPSBmYWxzZTsKLSAgICBtUmVz
ZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNl
dHMgPyBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FU
SU9OX0VYVCk7Ci0gICAgbVJvYnVzdEFjY2VzcyA9IHJvYnVzdEFjY2VzczsKLQotICAgIG1TdXBw
b3J0c0RYVDFUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IGZh
bHNlOwotICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0V2
ZW50UXVlcmllcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBmYWxz
ZTsKLSAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKLSAgICBtTWF4U3VwcG9y
dGVkU2FtcGxlcyA9IDA7Ci0gICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7Ci0gICAg
bWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGlm
IChtU3RhdGUuY3VycmVudFByb2dyYW0gIT0gMCkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSk7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVN0YXRl
LmN1cnJlbnRQcm9ncmFtID0gMDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1h
cC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVy
TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0K
LQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBl
KyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhU
VVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAgIG1JbmNvbXBsZXRlVGV4dHVy
ZXNbdHlwZV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUuYWN0
aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAg
bVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7Ci0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQo
TlVMTCk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7Ci0KLSAgICBkZWxldGUg
bVZlcnRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBk
ZWxldGUgbUJsaXQ7Ci0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwotCi0gICAgaWYgKG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUpCi0gICAgewotICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwotfQot
Ci12b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQotewotICAgIG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtRGV2aWNl
ID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCi0g
ICAgewotICAgICAgICBtRGV2aWNlQ2FwcyA9IG1EaXNwbGF5LT5nZXREZXZpY2VDYXBzKCk7Ci0K
LSAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMs
IG1EZXZpY2UpOwotICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5h
Z2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOwotCi0g
ICAgICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0
dXJlID0gbURpc3BsYXktPmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBw
b3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKTsKLSAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1EaXNwbGF5LT5nZXRJbnN0YW5j
aW5nU3VwcG9ydCgpOwotCi0gICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNh
cHMuTWF4VGV4dHVyZUhlaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSk7Ci0gICAgICAg
IG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9u
LCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAg
ICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOwot
ICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMihtTWF4VGV4dHVyZURpbWVuc2lvbikgKyAx
OwotICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVs
PSVkIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVy
ZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7
Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9Y
OFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgICAgICBEM0RGTVRf
RDI0UzgKLSAgICAgICAgfTsKLQotICAgICAgICBpbnQgbWF4ID0gMDsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9S
TUFUKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5
ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAg
bURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBt
dWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVy
QnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3Ig
KGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBE
M0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsK
LQotICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IG1EaXNwbGF5
LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRFhUMVRleHR1
cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9y
dHNEWFQzVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7Ci0gICAg
ICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3BsYXktPmdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBw
b3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDE2
VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNG
bG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7
Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotCi0g
ICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4
ID49ICgxIDw8IDE2KTsKLQotICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0g
MDsKLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
bU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpbml0RXh0
ZW5zaW9uU3RyaW5nKCk7Ci0gICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOwotCi0gICAgICAg
IG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAg
ICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAg
ICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAg
ICBtU3RhdGUuc2Npc3NvclggPSAwOwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAg
ICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKLSAgICAgICAg
bVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAgICBt
SGFzQmVlbkN1cnJlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5n
IERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8g
dGhlICcwJyBuYW1lcwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0
ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgQ29sb3JidWZm
ZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1ZmZlcihkZWZhdWx0UmVuZGVyVGFyZ2V0
KTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcg
RGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0
aFN0ZW5jaWxidWZmZXJaZXJvKTsKLQotICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZl
clplcm8pOwotCi0gICAgaWYgKGRlZmF1bHRSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBk
ZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoU3Rl
bmNpbCkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIH0KLSAg
ICAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHdpbGwg
c2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3Rh
dGUgaXMgc2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lgotdm9pZCBDb250ZXh0OjptYXJrQWxsU3Rh
dGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFNbdF0gPSAw
OwotICAgIH0KLQotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURjsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFs
VlNbdF0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7Ci0gICAg
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVwdGhidWZmZXJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7
Ci0gICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVyVGFyZ2V0RGVz
Y0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJr
U3RhdGVEaXJ0eSgpOwotCi0gICAgbUNsZWFyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbUN1bGxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtTWFz
a1N0YXRlRGlydHkgPSB0cnVlOwotICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1T
dGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbUZyb250RmFj
ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAgICBtQ2FjaGVk
Q3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9z
dCgpCi17Ci0gICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQpCi0gICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVF9F
WFQ7Ci0gICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc0NvbnRl
eHRMb3N0KCkKLXsKLSAgICByZXR1cm4gbUNvbnRleHRMb3N0OwotfQotCi12b2lkIENvbnRleHQ6
OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQg
YWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7Ci0gICAgbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwotICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFs
cGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpCi17Ci0g
ICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFs
dWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRD
dWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUp
Ci0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOwotICAgICAgICBtQ3VsbFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2Uo
R0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250OwotICAgICAgICBtRnJvbnRGYWNl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9v
bCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbURlcHRoU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5h
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCi17Ci0gICAgaWYgKG1TdGF0
ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoRnVu
YyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIp
Ci17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7Ci0gICAgbVN0YXRlLnpGYXIgPSB6RmFyOwot
fQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0
YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuYmxlbmQgPSBlbmFi
bGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wg
Q29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuYmxl
bmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0Is
IEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpCi17
Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwKLSAgICAgICAg
bVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKLSAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBo
YSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBz
b3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdCOwotICAgICAg
ICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOwotICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwg
ZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQotewotICAgIGlmIChtU3RhdGUu
YmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVu
ICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fAot
ICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3Iu
Z3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IGJsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZEVxdWF0
aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pCi17Ci0gICAgaWYg
KG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8Ci0gICAgICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Ci0gICAgICAgIG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRlc3QoYm9vbCBl
bmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU3RlbmNpbFRl
c3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxUZXN0OwotfQot
Ci12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGlu
dCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBz
dGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7Ci0gICAgICAgIG1TdGVu
Y2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVm
LCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tG
dW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
IT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayAhPSBz
dGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0g
c3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAoc3RlbmNp
bEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFdyaXRlbWFzayhH
THVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2so
R0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJh
Y2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCi0gICAgewotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFzazsKLSAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NE
ZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLXsKLSAgICBpZiAobVN0YXRl
LnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOwotICAgICAgICBtU3Rl
bmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVu
Y2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykKLXsKLSAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0ZhaWwgfHwKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0
aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVu
Y2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwotICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQ
b2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29u
T2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZz
ZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7Ci0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZs
b2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciAhPSBmYWN0
b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOwotICAgICAgICBt
U3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUFs
cGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBo
YVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVBbHBo
YVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAg
IGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wg
aW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8
fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OwotICAgICAgICBtU2FtcGxlU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9IGVuYWJsZWQpCi0g
ICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOwotICAgICAgICBtU2Np
c3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NjaXNz
b3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zY2lzc29yVGVzdDsK
LX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQotewotICAgIGlmICht
U3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGl0aGVyID0g
ZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ym9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3Rh
dGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRo
KQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludCA9IGhpbnQ7Ci0gICAgLy8gVE9ETzogUHJvcGFnYXRlIHRoZSBoaW50IHRv
IHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3cml0ZQotICAgIC8vIGRkeCwgZGR4X2NvYXJz
ZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50LgotICAgIC8vIElnbm9yZSBmb3Ig
bm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBoaW50LgotfQot
Ci12b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4Owot
ICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lk
dGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OwotfQotCi12b2lkIENvbnRl
eHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5z
Y2lzc29yWSAhPSB5IHx8IAotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5z
Y2lzc29yWCA9IHg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7Ci0gICAgICAgIG1TdGF0
ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVl
LCBib29sIGFscGhhKQotewotICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBt
U3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFz
a0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpCi0gICAgewot
ICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOwotICAgICAgICBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOwot
ICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbU1hc2tTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJv
b2wgbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIodW5zaWdu
ZWQgaW50IGFjdGl2ZSkKLXsKLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKLX0K
LQotR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0Ojpn
ZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZHJh
d0ZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwotfQotCi1H
THVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVy
biBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFjdGl2
ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0g
TlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2
ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAg
ICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnlPYmplY3QpCi0g
ICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJs
ZWQpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJs
ZWQgPSBlbmFibGVkOwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZl
cnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCi17Ci0gICAgcmV0dXJuIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVm
ZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9p
bnRlcikKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVm
ZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9y
bWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKLX0KLQotY29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAotewotICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7Ci19Ci0KLWNv
bnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkK
LXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3RhdGUucGFja0Fs
aWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OwotfQotCi12b2lk
IENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0
YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0
VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2
ZXJzZVJvd09yZGVyKQotewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJz
ZVJvd09yZGVyOwotfQotCi1ib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKLX0KLQotR0x1
aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgp
Ci17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQot
R0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4g
bVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1HTHVpbnQgQ29udGV4
dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0
ZVRleHR1cmUoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17
Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQot
Ci0vLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJI
YW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVd
ID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVh
dGVGZW5jZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5h
bGxvY2F0ZSgpOwotCi0gICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobURpc3BsYXkp
OwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgcXVlcnkg
bmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkKLXsKLSAgICBHTHVpbnQgaGFuZGxl
ID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUXVlcnlNYXBbaGFu
ZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOwot
ICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVM
TDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewot
ICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKHRleHR1cmUpKQotICAgIHsKLSAg
ICAgICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFj
aFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRnJhbWVi
dWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZp
bmQoZnJhbWVidWZmZXIpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1
ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVm
ZmVyKTsKLQotICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmcmFt
ZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZnJhbWVidWZmZXJPYmplY3Qt
PnNlY29uZDsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVmZmVyT2JqZWN0
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKQot
ewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU1hcC5maW5kKGZl
bmNlKTsKLQotICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VNYXAuZW5kKCkpCi0gICAgewot
ICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3Qp
OwotICAgICAgICBkZWxldGUgZmVuY2VPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZlbmNlTWFw
LmVyYXNlKGZlbmNlT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUXVl
cnkoR0x1aW50IHF1ZXJ5KQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9
IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsKLSAgICBpZiAocXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFw
LmVuZCgpKQotICAgIHsKLSAgICAgICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVl
cnlPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0LT5zZWNvbmQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAg
ICAgfQotICAgICAgICBtUXVlcnlNYXAuZXJhc2UocXVlcnlPYmplY3QpOwotICAgIH0KLX0KLQot
QnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4g
bVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7Ci19Ci0KLVNoYWRlciAqQ29udGV4
dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmdldFNoYWRlcihoYW5kbGUpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFt
KEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dy
YW0oaGFuZGxlKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQgaGFu
ZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKGhhbmRsZSk7
Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5k
bGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5k
bGUpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcik7Ci19Ci0K
LUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIoKQotewotICAgIHJldHVy
biBtQm91bmREcmF3RnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdl
dEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVy
LnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUy
RChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0
dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0
dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4
dHVyZSwgVEVYVFVSRV9DVUJFKTsKLQotICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIp
Ci17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAg
fQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotfQotCi12b2lk
IENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAgIHsKLSAgICAgICAgbUZyYW1l
YnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwotICAgIH0KLQotICAg
IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKLQotICAgIG1Cb3VuZERyYXdG
cmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7Ci0K
LSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAg
ICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOwotICAgIG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2gg
YmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4K
LQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIFByb2dy
YW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOwot
ICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShwcmlvclByb2dyYW0pOwotICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLQotICAgICAgICBpZiAobmV3UHJvZ3Jh
bSkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRQcm9ncmFtKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCi17Ci0gICAg
Ly8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMg
Y2FsbGVkIHdpdGggYW4gPGlkPiAgCi0gICAgLy8gb2YgemVybywgaWYgdGhlIGFjdGl2ZSBxdWVy
eSBvYmplY3QgbmFtZSBmb3IgPHRhcmdldD4gaXMgbm9uLXplcm8gKGZvciB0aGUgIAotICAgIC8v
IHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQsIGlmICAKLSAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIg
dGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiAKLSAgICAvLyBl
eGlzdGluZyBxdWVyeSBvYmplY3Qgd2hvc2UgdHlwZSBkb2VzIG5vdCBtYXRjaCA8dGFyZ2V0Piwg
b3IgaWYgPGlkPiBpcyB0aGUKLSAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIGFu
eSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMKLSAgICAvLyBnZW5l
cmF0ZWQuCi0KLSAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBhcmUgYWN0aXZlCi0gICAg
Ly8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3
ZSB3aWxsIG5lZWQgdG8gY2hlY2sKLSAgICAvLyBzZXBhcmF0ZWx5IHRoYXQ6Ci0gICAgLy8gICAg
YSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJlbnQgYWN0aXZlIHF1ZXJ5IGZv
ciBhbnkgdGFyZ2V0L3R5cGUKLSAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJp
ZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UKLSAgICAvLyAgICAg
ICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9BTllfU0FNUExFU19QQVNTRURf
Q09OU0VSVkFUSVZFX0VYVCwKLSAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUgYWN0aXZlIGZv
ciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLgotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5Z
X1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllf
U0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0YXJnZXQpOwot
Ci0gICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcwot
ICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNo
Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkgIT0gdGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBz
ZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2
ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlPYmplY3QpOwotCi0gICAgLy8gYmVnaW4gcXVlcnkKLSAg
ICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKLX0KLQotdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVu
dW0gdGFyZ2V0KQotewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLQotICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVR
dWVyeVtxVHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAocXVlcnlPYmplY3QgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgcXVlcnlPYmplY3QtPmVuZCgpOwotCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5z
ZXQoTlVMTCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVm
ZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsKLSAgICBtRnJh
bWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIg
PT0gMCkKLSAgICB7Ci0gICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGJ1ZmZlcjsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZm
ZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZm
ZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOwotICAgIHJlbmRlcmJ1ZmZlck9i
amVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBGcmFtZWJ1ZmZl
ck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUp
OwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLUZlbmNlICpDb250ZXh0Ojpn
ZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBm
ZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoZmVuY2UgPT0gbUZlbmNl
TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmZW5jZS0+c2Vjb25kOwotICAgIH0KLX0KLQotUXVlcnkg
KkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVu
dW0gdHlwZSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVlcnkgPSBtUXVlcnlNYXAuZmlu
ZChoYW5kbGUpOwotCi0gICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
IXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeS0+
c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7Ci0gICAgICAgICAgICBxdWVyeS0+c2Vj
b25kLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVlcnktPnNlY29uZDsK
LSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQotewotICAgIHJl
dHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5nZXQoKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQot
ewotICAgIGlmICghbUNhY2hlZEN1cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAgICAgbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3Vy
cmVudFByb2dyYW0pOwotICAgIH0KLSAgICByZXR1cm4gbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwot
fQotCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyLCBURVhUVVJFXzJEKSk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0
dXJlQ3ViZU1hcCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4o
Z2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOwot
fQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2Ft
cGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKLQotICAgIGlmICh0ZXhpZCA9PSAwKSAg
IC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMg
YmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJd
LmdldCgpOwotfQotCi1ib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xi
b29sZWFuICpwYXJhbXMpCi17Ci0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
X0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0NPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFz
a1JlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOwotICAgICAg
ICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0g
bVN0YXRlLmNvbG9yTWFza0FscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VM
TF9GQUNFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfVEVTVDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09O
VEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVF
IDogR0xfRkFMU0U7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldEZsb2F0
dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTog
REVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBp
bXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRl
c3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJ
bnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJl
IGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZm
ZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZTsg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
cjsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzogICAgICpwYXJh
bXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBnbDo6QUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01BWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFT
RURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRzU2hhZGVyTW9k
ZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBnbDo6QUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9ERVBUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFyOwotICAgICAg
ICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0NPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JDbGVh
clZhbHVlLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5n
cmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlOwot
ICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmJsZW5k
Q29sb3IuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7
Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZB
TFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50
YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRo
ZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0gICAgLy8gR2V0SW50ZWdlcnYg
YXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJz
aW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0
byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIAotICAgIC8vIENv
bnRleHQ6OmdldEZsb2F0di4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7ICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICpw
YXJhbXMgPSBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFtcyA9IGds
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRF
UkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVy
RGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9G
T1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAv
KiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7Ci0gICAgICAvL2Nhc2UgR0xf
RlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOyAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5w
YWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tf
UkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNl
Um93T3JkZXI7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrQWxpZ25tZW50OyAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VT
OiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01B
U0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsTWFzazsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja01hc2s7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0
aEZhaWw7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoRnVu
YzsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRSR0I7ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5E
X0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYTsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1B
U0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzazsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1U
ZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJl
RGltZW5zaW9uKCk7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVY
VFVSRV9GT1JNQVRTOiAgIAotICAgICAgICBwYXJhbXNbMF0gPSBtTnVtQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5H
TEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKTsKLSAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCi0g
ICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGlm
IChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgotICAg
ICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
ZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRp
bWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKTsKLSAgICAgICAgICAgIHBh
cmFtc1swXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVu
c2lvbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FO
R0xFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVz
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklFV1BPUlQ6Ci0gICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0ZS52aWV3cG9ydFg7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7
Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOwotICAgICAgICBwYXJh
bXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnNjaXNzb3JYOwot
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7Ci0gICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5zY2lzc29y
SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNl
IEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAqcGFyYW1zID0g
Y29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVlblNpemUoKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpwYXJhbXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhhU2l6ZSgpOyBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBn
ZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRo
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlm
IChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
ZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotCi0gICAg
ICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4
aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5E
SU5HX0NVQkVfTUFQOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNh
bXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRF
R1lfRVhUOgotICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
dW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpCi17Ci0gICAg
Ly8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVkIGZvciBERVBUSF9DTEVBUl9W
QUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gaXMgRkxPQVQgcmF0aGVyIHRoYW4g
SU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVjLiBUaGlzIGlz
IGR1ZQotICAgIC8vIHRvIHRoZSBmYWN0IHRoYXQgaXQgaXMgc3RvcmVkIGludGVybmFsbHkgYXMg
YSBmbG9hdCwgYW5kIHNvIHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbgotICAgIC8vIGlmIHJldHVy
bmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRoaXMgY29udmVyc2lvbiBpcyBh
bHJlYWR5IGltcGxlbWVudGVkIAotICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25lIGNhbGxzIGds
R2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJpYWJsZSwgd2UK
LSAgICAvLyBwbGFjZSBERVBUSF9DTEVBUl9WQUxVRSB3aXRoIHRoZSBmbG9hdHMuIFRoaXMgc2hv
dWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZwotICAgIC8vIGFwcGxpY2F0aW9u
LgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RF
WFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0g
ICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JN
QVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOgotICAgICAgY2FzZSBH
TF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAg
ICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAgICAgY2FzZSBHTF9OVU1fU0hB
REVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFM6Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklO
RElORzoKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOgotICAgICAgY2FzZSBHTF9QQUNL
X0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToK
LSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVf
TUlQTUFQX0hJTlQ6Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJ
TlRfT0VTOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xfR1JFRU5fQklU
UzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgot
ICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6Ci0g
ICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdM
X0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgotICAgICAgY2FzZSBH
TF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOgotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBU
SF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxV
RV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKLSAgICAg
IGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjoKLSAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOgot
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFU
SU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVN
QVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAgY2FzZSBHTF9T
VUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgotICAgICAgY2Fz
ZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICBjYXNlIEdMX1JFU0VUX05PVElG
SUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xf
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
Ul9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBib29sIHJlbmRlclRhcmdldENoYW5n
ZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIGlmIChyZW5kZXJUYXJn
ZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewotICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAg
IH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7Ci0g
ICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwot
ICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFyZWEgbXVzdCBi
ZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZmZXJlbnQgZm9y
IGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBk
ZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJp
YWwgPSAwOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkg
IT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYgKCFk
ZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9O
RSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICBpZiAoIWRlcHRoU3Rl
bmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIg
dW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAotICAgICAg
ICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCB8fAot
ICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwotICAgICAgICBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVk
U3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1EZXB0
aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCi0gICAgewotICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAg
ICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7
Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmlld3Bv
cnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKLSAgICBmbG9h
dCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdub3JlVmlld3BvcnQp
Ci0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3BvcnQuWSA9IDA7
Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7Ci0gICAg
ICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsKLSAgICAgICAg
dmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJl
Y3QobVN0YXRlLnZpZXdwb3J0WCwgbVN0YXRlLnZpZXdwb3J0WSwgbVN0YXRlLnZpZXdwb3J0V2lk
dGgsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KTsKLSAg
ICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+
KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChy
ZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkp
OwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKHJlY3QucmlnaHQgLSByZWN0LmxlZnQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNf
Y2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1w
KHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOwotICAgICAg
ICB2aWV3cG9ydC5NaW5aID0gek5lYXI7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSB6RmFyOwot
ICAgIH0KLQotICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0LkhlaWdodCA8
PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVy
Ci0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRp
YWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmll
d3BvcnQpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3Bv
cnQpOwotICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsKLSAgICAgICAgbVZpZXdwb3J0
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS5zY2lzc29yVGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCByZWN0ID0gdHJh
bnNmb3JtUGl4ZWxSZWN0KG1TdGF0ZS5zY2lzc29yWCwgbVN0YXRlLnNjaXNzb3JZLCBtU3RhdGUu
c2Npc3NvcldpZHRoLCBtU3RhdGUuc2Npc3NvckhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0KTsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0
LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdl
dERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAg
ICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
Q0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNjaXNzb3JT
dGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6
ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7Ci0gICAgICAg
IEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAtMS4wZiAvIHZpZXdwb3J0
LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVs
U2l6ZSwgMSwgeHkpOwotCi0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29t
cHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJv
YWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBj
b29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBmbG9h
dCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDog
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0g
e21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBm
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBt
U3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7Ci0KLSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9n
cmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBkelsyXSA9
IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07Ci0gICAgICAg
IHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKLQotICAgICAgICBH
TGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KTsKLSAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZhciwgekZhciAt
IHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdl
LCAxLCBuZWFyRmFyRGlmZik7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rp
b24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5n
LCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBseVN0YXRl
KEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgR0xlbnVtIGFkanVzdGVkRnJvbnRGYWNlID0gYWRq
dXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0gKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFpdihmcm9udENDVywgMSwgJmNjdyk7Ci0KLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKLSAgICBHTGludCBhbHdh
eXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwotCi0gICAgRDNE
QURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRl
bnRpZmllcigpOwotICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5W
ZW5kb3JJZCAhPSAweDEwMDI7Ci0gICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZl
IGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgotICAgIC8vIHdyaXRlIG1hc2sg
Y2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQs
Ci0gICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJs
ZW5kIHN0YXRlIHNvIHRoYXQgbm8KLSAgICAvLyBkcmF3aW5nIGlzIGRvbmUuCi0gICAgLy8gaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQot
Ci0gICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAg
ICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZSht
U3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdWxsU3Rh
dGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQotICAg
IHsKLSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252
ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGVwdGhTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF6ZXJvQ29sb3JNYXNrQWxsb3dlZCAmJiAo
bU1hc2tTdGF0ZURpcnR5IHx8IG1CbGVuZFN0YXRlRGlydHkpKQotICAgIHsKLSAgICAgICAgbUJs
ZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0
YXRlLmJsZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuc291cmNlQmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICAgICAg
bVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuZGVzdEJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwg
ZXMyZHg6OkNvbnZlcnRDb2xvcihtU3RhdGUuYmxlbmRDb2xvcikpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+
KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0
ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVu
ZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9y
LmFscGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNv
dXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRSR0Ip
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVz
MmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOwotCi0gICAgICAg
ICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
IHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RC
bGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVu
ZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRB
bHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxw
aGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8
IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
JiYgZnJhbWVidWZmZXJPYmplY3QtPmhhc1N0ZW5jaWwoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxN
T0RFLCBUUlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkK
LSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJF
RiA9IEQzRFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZ
UEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0gICAgICAgICAg
ICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKLSAgICAgICAgICAgICAg
ICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgCi0gICAgICAg
ICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0
ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVl
cyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKLSAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVu
Y2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRG
cm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJ
TEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVy
dENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50
KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNp
bE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
RkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9u
dEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBB
U1MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0
ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NX
X1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKLQotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJh
Y2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhT
dGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1B
U0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlM
IDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lM
UEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NE
ZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgICAg
ICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobU1hc2tTdGF0ZURp
cnR5KQotICAgIHsKLSAgICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252ZXJ0Q29sb3JN
YXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNr
Qmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAw
ICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRW5h
YmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRy
YXduLgotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklU
RUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pF
Uk8pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
LCBEM0RCTEVORF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDog
RkFMU0UpOwotCi0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRl
LnBvbHlnb25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwot
ICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICoo
KERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKLSAgICAgICAgICAgICAgICBm
bG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzLCAtKGludCko
ZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCopJmRlcHRoQmlhcykpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywg
MCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMs
IDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FN
UExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOwotICAgICAgICAg
ICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsKLQotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBsZXMoKTsgKytp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWFzayA8PD0gMTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZh
bHVlID49IHRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXNr
IHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VJbnZlcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFzayA9IH5tYXNrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1Q
TEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1EaXRoZXJTdGF0ZURpcnR5KQotICAgIHsK
LSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5BQkxFLCBtU3Rh
dGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVw
ZWF0RHJhdykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBh
cmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKLSAgICBp
ZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbiht
RGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgpLCBpbnN0YW5jZXMsIHJlcGVh
dERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJp
bmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5k
ZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKLXsKLSAgICBH
TGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291
bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7
Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4
SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0gICAgICAgICAg
ICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFuZCBzaGFk
ZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVNoYWRlcnMoKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOwotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFBy
b2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFBpeGVs
U2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIp
OwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGllZFBy
b2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBw
cm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRleHR1
cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29u
dGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJWEVM
KTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAgYXBw
bHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBEaXJl
Y3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0vLyBs
b29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0
ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3Npbmcv
ZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0Ojph
cHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5
cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1w
bGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKLSAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0
dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJp
YWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwotICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0
ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIw
OwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJh
bmdlKHR5cGUpOwotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4
IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGludCB0ZXh0
dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJ
bmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotICAgICAgICBpbnQg
ZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0KLSAgICAgICAg
aWYgKHRleHR1cmVVbml0ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlw
ZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBl
LCBzYW1wbGVySW5kZXgpOwotCi0gICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2Ft
cGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKLQotICAgICAgICAgICAgaWYg
KGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVy
ZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhh
c0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0
dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3
cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQz
ZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdG
aWx0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQz
ZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVy
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RT
YW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01J
UEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwg
Z2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBs
ZXJJbmRleF0gPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGFwcGxpZWRU
ZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdlOyBzYW1w
bGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAgICAgICAg
aWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVy
T2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlYWRQaXhl
bHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
KmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlm
IChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1w
bGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3
aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0gICAgLy8gc2l6ZWQg
cXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQg
cmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlmIChyZXF1aXJl
ZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0g
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAo
ZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7Ci0gICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBT
dHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gZ2V0
UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGlnbm1lbnQoKSA8PSA0ICYmIG1EaXNw
bGF5LT5pc0QzZDlFeERldmljZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHggPT0g
MCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhlaWdodCkg
PT0gZGVzYy5IZWlnaHQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQg
PT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdM
X1VOU0lHTkVEX0JZVEU7Ci0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAg
Ly8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0ZSBkaXJlY3Rs
eSBpbnRvIGNsaWVudCdzIG1lbW9yeQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVP
ZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsKLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUcnkgYWdhaW4gd2l0
aG91dCB0aGUgc2hhcmVkIGhhbmRsZQotICAgICAgICAgICAgZGlyZWN0VG9QaXhlbHMgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGlyZWN0VG9QaXhlbHMpCi0gICAgewot
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVz
Yy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0
ZW1TdXJmYWNlLCBOVUxMKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBw
cm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVk
LgotICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgfQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVt
U3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRDNETE9D
S0VEX1JFQ1QgbG9jazsKLSAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZGVzYy5IZWlnaHQpOwotICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3Qu
bGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9
IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAg
ICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRl
c2MuV2lkdGgpKTsKLSAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZh
Y2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19SRUFET05MWSk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBz
eXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNp
YmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1
bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAg
IGludCBpbnB1dFBpdGNoOwotICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKLSAgICAgICAg
aW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJl
Y3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBp
dGNoOwotICAgIH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4
RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAg
ICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZh
c3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCi0gICAgICAgICAgICAvLyBh
biBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCi0gICAgICAg
ICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAg
ICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJl
Y3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAg
ICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGog
KiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDAp
ID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikg
KiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNF
MCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4
N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNp
Z25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAw
eDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkg
KiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAw
eDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdi
ID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICh4
cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAg
ICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYw
MDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJj
ZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAo
YXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBG
RkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEu
MGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUg
c3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAg
ICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAg
ICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2Jh
LCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXko
YWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOwotICAgICAgICAgICAgICAgICAg
ICBiID0gYWJnclsyXTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGFiZ3JbMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBk
ZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICog
ciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBp
dGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gg
KyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgy
NTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25l
ZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGlu
IHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAg
IDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAg
NHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAg
MXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhU
LCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgot
ICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3Rh
bmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tl
ZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEy
ICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAg
ICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAg
ICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAg
ICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBH
IHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kg
KyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41Zikg
PDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAv
LyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQot
ICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJm
YWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNr
KQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVj
dC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsKLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVG
RkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0K
LSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQp
Ci0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBp
ZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xF
QVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMdWludCBzdGVuY2lsVW5tYXNr
ZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICB7
Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAg
ICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdl
dERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBk
eDJlczo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAgICAgICAgICAgc3RlbmNpbFVu
bWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAgICAgICBpZiAoc3Rl
bmNpbFVubWFza2VkICE9IDB4MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbGFn
cyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1hc2sgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAg
IC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUg
dmlld3BvcnQKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEM0RDT0xPUiBj
b2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBo
YSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1
ZSkpOwotICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsK
LSAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7
Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6ZShtUmVuZGVy
VGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLQotICAg
IGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1NU
RU5DSUwpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7
Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFS
X1RBUkdFVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShtU3Rh
dGUuY29sb3JNYXNrUmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhh
VW5tYXNrZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRT
dGVuY2lsQ2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGlu
IGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCi0g
ICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwg
YmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0aGF0IHBhdGgg
aXMgdGFrZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbURldmljZS0+
QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBo
ciA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBG
QUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywg
RDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwg
RkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBM
QU5FRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZW
Rl9ESUZGVVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBOVUxM
LCAwLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFS
QVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJH
MSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFf
VEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhU
VVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAx
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJs
b2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZN
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVM
TCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5D
YXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENN
UF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19G
SUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0KLSAgICAgICAgaWYg
KGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENv
bG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIG1TdGF0
ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0
ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
VFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lM
T1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwp
OwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NP
TE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RG
QUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFD
VE9SLCBjb2xvcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJ
U0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0KLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcXVh
ZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25l
ZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9IC0wLjVmOwotICAgICAg
ICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKLSAgICAgICAg
cXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAxLjBmOwotCi0gICAgICAg
IHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1
YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFk
WzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVh
ZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1
YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4wZjsKLQotICAgICAgICBx
dWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwotICAgICAgICBxdWFk
WzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOwotICAgICAgICBxdWFk
WzNdWzNdID0gMS4wZjsKLQotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAg
ICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwg
c2l6ZW9mKGZsb2F0WzRdKSk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZF
UikKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVM
TCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5DbGVh
cigwLCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9n
cmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7Ci0gICAgaW50IHBy
aW1pdGl2ZUNvdW50OwotCi0gICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2Rl
LCBjb3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCi0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDAp
Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRh
cmdldChmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwbHlT
dGF0ZShtb2RlKTsKLQotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgR0xlbnVtIGVy
ciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJh
dyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhm
YWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAg
IG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobW9kZSA9PSBH
TF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwg
R0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2Vz
ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5n
SUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAg
ICAgICAgIGlmIChjb3VudGluZ0lCKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3VudGlu
Z0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZl
KHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4
IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
R0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3Vu
dDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZw
cmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2Up
KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7
Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0g
YXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5mbyk7
Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4
SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9
IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0
ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19F
UlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFw
cGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNr
aXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0K
LSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCk7
ICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElO
VClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
ZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgZ2xGbHVzaCB3aGVuIGJsb2NrIGlzIGZh
bHNlLCBnbEZpbmlzaCB3aGVuIGJsb2NrIGlzIHRydWUKLXZvaWQgQ29udGV4dDo6c3luYyhib29s
IGJsb2NrKQotewotICAgIG1EaXNwbGF5LT5zeW5jKGJsb2NrKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4KQotewotICAgIC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9y
IGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdMX05PTkUgJiYgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZmZXIg
PSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5kaWNl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZlci0+ZGF0YSgpKSArIG9m
ZnNldDsKLSAgICB9Ci0KLSAgICBVSU5UIHN0YXJ0SW5kZXggPSAwOwotICAgIGJvb2wgc3VjY2Vl
ZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAg
ICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5J
VElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJ
Qi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpOwotCi0gICAgICAg
ICAgICBVSU5UIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAm
b2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsKLSAgICAgICAg
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
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291
bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxv
b3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5n
SW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lO
REVYMTYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9V
TlNJR05FRF9TSE9SVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPiht
TGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFy
dEluZGV4ID0gb2Zmc2V0IC8gMjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhl
ZCBkcmF3Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtp
XSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtj
b3VudF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMp
W2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291
bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
WzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bUxpbmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoc3VjY2VlZGVk
KQotICAgIHsKLSAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdl
dFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKG1M
aW5lTG9vcElCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
bUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+
RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4
LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkKLXsKLSAgICBtSW52
YWxpZEVudW0gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1ZSgp
Ci17Ci0gICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3Jk
SW52YWxpZE9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSB0cnVlOwotfQot
Ci12b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkKLXsKLSAgICBtT3V0T2ZNZW1vcnkg
PSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJh
dGlvbigpCi17Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7Ci19Ci0K
LS8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlm
IGFueS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuNSBwYWdlIDEzLgotR0xlbnVt
IENvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobUludmFsaWRFbnVtKQotICAgIHsKLSAg
ICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURf
RU5VTTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIG1J
bnZhbGlkVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9WQUxVRTsK
LSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRPcGVyYXRpb24pCi0gICAgewotICAgICAgICBtSW52
YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKLSAgICB9Ci0KLSAgICBpZiAobU91dE9mTWVtb3J5KQotICAgIHsKLSAgICAgICAgbU91
dE9mTWVtb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0g
ICAgfQotCi0gICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pCi0gICAgewotICAg
ICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIHJldHVy
biBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkKLXsK
LSAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgYm9v
bCBsb3N0ID0gbURpc3BsYXktPnRlc3REZXZpY2VMb3N0KCk7Ci0KLSAgICAgICAgaWYgKGxvc3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7ICAg
Ly8gU2V0cyBtUmVzZXRTdGF0dXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMZW51bSBzdGF0
dXMgPSBtUmVzZXRTdGF0dXM7Ci0KLSAgICBpZiAobVJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9S
KQotICAgIHsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT50ZXN0RGV2aWNlUmVzZXR0YWJsZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1ib29sIENvbnRleHQ6
OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gKG1SZXNldFN0cmF0
ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwotfQotCi1ib29sIENvbnRleHQ6
OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hh
ZGVyTW9kZWwzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsKLX0KLQotdW5zaWduZWQgaW50
IENvbnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGIDogMDsKLX0KLQotdW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLX0K
LQotaW50IENvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SU19TTTMgOiBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMjsKLX0KLQot
aW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBw
b3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0Ci17Ci0g
ICAgaWYgKHJlcXVlc3RlZCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsK
LSAgICB9Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwotICAgIGlmIChpdHIgPT0g
bU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVM7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChpdHItPnNlY29uZFtpXSAmJiBpICE9
IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0V2ZW50UXVlcmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwotfQot
Ci1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhU
M1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN1cHBvcnRzRFhUNVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRl
eHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXI7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlczsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZSZW5k
ZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVy
RGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lv
bjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4
Q3ViZVRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVy
ZUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKLX0KLQotYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0
SW5kaWNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKLX0K
LQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNp
bmc7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0g
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6Ci0gICAgLy8gSWYg
YSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5n
cyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgLy8gKGkuZS4gaW4g
dGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8u
Ci0KLSAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50
IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSkKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4
NDoKLSAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFs
bCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0IGFy
ZQotICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybwotCi0gICAgZm9yIChpbnQg
dHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKSA9PSB0ZXh0dXJlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtz
YW1wbGVyXS5zZXQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6Ci0gICAgLy8gSWYg
YSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0
byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCi0gICAgLy8gYXMg
aWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBv
ZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKLSAgICAvLyBpbWFn
ZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KLQotICAg
IEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAg
ICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0K
LSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1lYnVmZmVy
LT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZm
ZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKLSAgICAvLyBJZiBh
IGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVC
VUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoCi0gICAgLy8gQmluZEZyYW1lYnVmZmVy
IGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJh
bWVidWZmZXIgb2YgemVyby4KLQotICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZy
YW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICB9
Ci0KLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToKLSAgICAvLyBJZiBhIHJlbmRl
cmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRl
ZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKLSAgICAvLyBoYWQgYmVlbiBleGVj
dXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCi0KLSAg
ICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTExOgotICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9i
amVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLAotICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAs
IGZvciBlYWNoIGF0dGFjaG1lbnQKLSAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdh
cyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgotCi0gICAgRnJh
bWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZy
YW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAg
IGlmIChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVidWZmZXItPmRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJh
bWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7
Ci0gICAgfQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0
dXJlVHlwZSB0eXBlKQotewotICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5
cGVdLmdldCgpOwotCi0gICAgaWYgKHQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9OwotCi0gICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRV
UkVfMkQKLQotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVy
ZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQt
PnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
LSAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRl
eHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0KLSAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5z
ZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3Ip
OwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21w
bGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1oo
MCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLQotICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1
YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwotICAgIH0KLQotICAgIHJldHVy
biB0OwotfQotCi1ib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKQot
ewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09IEdMX0ZS
T05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLX0KLQotYm9vbCBDb250
ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgc3dpdGNoIChkcmF3
TW9kZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgotICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWlu
dCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQotewotICAgIEFTU0VSVChpbmRleCA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRl
eF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsK
LQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlDdXJyZW50VmFsdWUoaW5kZXgpOwotfQot
Ci12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVp
bnQgZGl2aXNvcikKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0gZGl2aXNv
cjsKLX0KLQotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKLS8vIE9FUyBl
eHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVuc2lvbnMKLXZvaWQg
Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCi17Ci0gICAgbUV4dGVuc2lvblN0cmluZyA9
ICIiOwotCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGlj
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cmdiOF9yZ2JhOCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAg
ewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
IHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXQgIjsK
LSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0K
LQotICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1
cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQxICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgIjsKLSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAg
ICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
MyAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVf
dXNhZ2UgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UgIjsKLQotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25z
Ci0gICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nOjpz
aXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0g
ICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNp
b25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkNvbnRleHQ6
OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJp
bmcuY19zdHIoKTsKLX0KLQotdm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcoKQotewot
ICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRh
cHRlcklkZW50aWZpZXIoKTsKLQotICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsKLSAg
ICBtUmVuZGVyZXJTdHJpbmcgKz0gaWRlbnRpZmllci0+RGVzY3JpcHRpb247Ci0gICAgbVJlbmRl
cmVyU3RyaW5nICs9ICIpIjsKLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UmVuZGVyZXJT
dHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyZXJTdHJpbmcuY19zdHIoKTsKLX0K
LQotdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kw
LCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgRnJh
bWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZy
YW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAg
IGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8
fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVz
KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAg
UkVDVCBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC5sZWZ0ID0gc3JjWDA7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNY
MTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgwOwotICAgICAgICBkZXN0UmVjdC5yaWdo
dCA9IGRzdFgxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgxOwotICAgICAgICBzb3Vy
Y2VSZWN0LnJpZ2h0ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7Ci0g
ICAgfQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0
LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QudG9wID0g
ZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHJl
YWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHJhd0J1
ZmZlckhlaWdodCAtIGRzdFkwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3Qu
dG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0g
ZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlU2Npc3Nv
cmVkUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RS
ZWN0OwotCi0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE9u
bHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBh
c3MgdGhlIHNjaXNzb3IgdGVzdAotICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0
IGlzIG5vdyBpbiBEM0Qtc3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKLSAg
ICAgICAgLy8gcmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRo
YW4gdGhlIGJvdHRvbS4KLSAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3Nv
clgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAt
IGRlc3RSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0
YXRlLnNjaXNzb3JYOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhE
aWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNj
aXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IHhEaWZmID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNz
b3JXaWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5z
Y2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29y
ZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0
LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZm
ID0gbVN0YXRlLnNjaXNzb3JZIC0gZGVzdFJlY3QudG9wOwotICAgICAgICAgICAgZGVzdFNjaXNz
b3JlZFJlY3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICAgICAgc291cmNlU2Npc3Nv
cmVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3Qu
Ym90dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Np
c3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVk
UmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBi
bGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0g
c291cmNlU2Npc3NvcmVkUmVjdDsKLSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lz
c29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMg
YWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5k
cyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0g
MCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0Lmxl
ZnQgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0K
LSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZm
ZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lk
dGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAg
ICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlm
ZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0
LnRvcCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQot
Ci0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0g
ICAgewotICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFk
QnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVm
ZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAg
IH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBp
bnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsK
LSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRo
KQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJh
d0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVy
V2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0K
LQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5
RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
dG9wID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0K
LQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVm
ZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhl
aWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0K
LQotICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdo
dCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0
LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0
b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJX
aWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1l
ZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmlt
bWVkUmVjdC5sZWZ0ICE9IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsK
LSAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAg
ICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3RnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgaWYg
KCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1
ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVuZGVyVGFy
Z2V0ID0gdHJ1ZTsKLQotICAgIH0KLQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9C
SVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpyZWFkRFNCdWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZl
ciA9IE5VTEw7Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwsIGFuZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0
ZW5jaWwgYnVmZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQg
c3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlm
IChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0
ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9
IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFy
ZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGll
cyBhcmUgcGVybWl0dGVkCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAm
JiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFk
RFNCdWZmZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2ls
KQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKGJs
aXRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
KiByZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1l
ZFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOwotCi0g
ICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFO
R0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
LCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhG
X05PTkUpOwotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0
Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1WZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsK
LSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0g
ICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0KLX0KLQotVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQotewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0
aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6
ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgICpyZXBlYXREcmF3ID0g
MTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAg
IGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0KLSAgICBpZiAo
aW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1
dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMAotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0
cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7ICAgLy8g
Rm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCi0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVS
VEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1l
bnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVt
ZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAgICAgICAgIGlm
IChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIER1ZSB0
byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcgd2hlbiBub25l
IG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAgICAgaWYgKGlu
c3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4ZWRB
dHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBV
SU5UIGZyZXF1ZW5jeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9J
TkRFWEVEREFUQSB8IGluc3RhbmNlczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCBhdHRyaWJ1
dGVzW2ldLmRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShzdHJl
YW0sIGZyZXF1ZW5jeSk7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwK
LSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZm
ZXIsIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ldLnN0cmlkZSk7Ci0gICAgICAg
ICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlh
bDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSA9IGF0dHJpYnV0
ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVs
ZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7
Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBlOwotICAgICAg
ICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwotICAgICAgICAg
ICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Ci0gICAgICAgICAgICBl
bGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChpKTsKLSAgICAg
ICAgICAgIGVsZW1lbnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMg
PT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsK
LSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVu
ZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsK
LSAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVb
aV07Ci0gICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywg
KGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYm
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZW50cnkt
PmxydUNvdW50ID0gKyttTWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xh
cmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwot
ICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVy
dGV4RGVjbENhY2hlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVb
aV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0gICAgewotICAg
ICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBtTGFzdFNldFZE
ZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkK
LSAgICAgICAgLy8gYWJvdXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2Fj
aGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RW
RVJURVhFTEVNRU5UOSkpOwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxl
bWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZl
cnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0
U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+
bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZv
aWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBt
QXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwotICAgIH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBO
VUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJl
IGRpc2FibGVkIHdoZW4gbm90IHVzZWQKLX0KLQotfQotCi1leHRlcm4gIkMiCi17Ci1nbDo6Q29u
dGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykKLXsKLSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7Ci19Ci0KLXZvaWQgZ2xEZXN0cm95Q29udGV4
dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBkZWxldGUgY29udGV4dDsKLQotICAgIGlm
IChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCi0gICAgewotICAgICAgICBnbDo6bWFrZUN1
cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotfQotCi12b2lkIGdsTWFrZUN1cnJlbnQo
Z2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKQotewotICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdXJm
YWNlKTsKLX0KLQotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKQotewotICAgIHJl
dHVybiBnbDo6Z2V0Q29udGV4dCgpOwotfQotfQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQor
Ly8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2lu
ZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcNCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4g
SXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuDQor
DQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiDQorDQorI2luY2x1ZGUgPGFsZ29yaXRo
bT4NCisNCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQorI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCINCisj
aW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVT
djIvQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIg0KKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVCdWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIN
CisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCINCisjaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCINCisjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
Ig0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCINCisjaW5jbHVkZSAi
bGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCINCisNCisjdW5kZWYgbmVhcg0KKyN1bmRlZiBm
YXINCisNCituYW1lc3BhY2UgZ2wNCit7DQorQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlm
eVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpDQorew0KKyAgICBB
U1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVkDQorDQorICAg
IG1EaXNwbGF5ID0gTlVMTDsNCisgICAgbURldmljZSA9IE5VTEw7DQorDQorICAgIG1GZW5jZUhh
bmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOw0KKw0KKyAgICBzZXRDbGVhckNvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIDAuMGYpOw0KKw0KKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0g
MS4wZjsNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsNCisNCisgICAgbVN0YXRl
LmN1bGxGYWNlID0gZmFsc2U7DQorICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7DQorICAg
IG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7DQorICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxz
ZTsNCisgICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdMX0xFU1M7DQorICAgIG1TdGF0ZS5ibGVuZCA9
IGZhbHNlOw0KKyAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7DQorICAgIG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOw0KKyAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0g
R0xfWkVSTzsNCisgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsNCisgICAgbVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsNCisgICAgbVN0YXRlLmJsZW5kRXF1
YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAw
Ow0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7DQorICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmJsdWUgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7DQorICAgIG1T
dGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9B
TFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsNCisgICAgbVN0YXRlLnN0ZW5jaWxN
YXNrID0gLTE7DQorICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7DQorICAgIG1TdGF0
ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZiA9IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7DQorICAgIG1TdGF0ZS5z
dGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBHTF9L
RUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOw0KKyAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNp
bEJhY2tGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9L
RUVQOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsNCisgICAgbVN0YXRl
LnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldFVu
aXRzID0gMC4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOw0K
KyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWUgPSAxLjBmOw0KKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBm
YWxzZTsNCisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5kaXRo
ZXIgPSB0cnVlOw0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJF
Ow0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IEdMX0RPTlRfQ0FS
RTsNCisNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7DQorDQorICAgIG1TdGF0ZS52aWV3
cG9ydFggPSAwOw0KKyAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisgICAgbVN0YXRlLnZpZXdw
b3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0YXRlLnZpZXdw
b3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Ow0KKyAgICBtU3RhdGUuek5l
YXIgPSAwLjBmOw0KKyAgICBtU3RhdGUuekZhciA9IDEuMGY7DQorDQorICAgIG1TdGF0ZS5zY2lz
c29yWCA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29y
V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7DQorDQorICAgIG1TdGF0ZS5jb2xv
ck1hc2tSZWQgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOw0KKyAg
ICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7DQorICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBo
YSA9IHRydWU7DQorICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOw0KKw0KKyAgICBpZiAoc2hh
cmVDb250ZXh0ICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBz
aGFyZUNvbnRleHQtPm1SZXNvdXJjZU1hbmFnZXI7DQorICAgICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5hZGRSZWYoKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7DQorICAgIH0NCisNCisgICAgLy8gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6DQorICAgIC8vIEluIHRoZSBpbml0
aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVfTUFQIGhhdmUgdHdvZGltZW5z
aW9uYWwNCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0
aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uDQorICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNz
IHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQg
YXMgdGV4dHVyZQ0KKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9zZSBuYW1lcyBhcmUgMC4NCisN
CisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOw0KKyAgICBtVGV4dHVy
ZUN1YmVNYXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAoMCkpOw0KKw0KKyAgICBtU3RhdGUu
YWN0aXZlU2FtcGxlciA9IDA7DQorICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZEVs
ZW1lbnRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOw0KKyAgICBi
aW5kVGV4dHVyZTJEKDApOw0KKyAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5k
RHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKw0KKyAgICBt
U3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKw0KKyAgICBtU3RhdGUucGFja0FsaWdubWVudCA9
IDQ7DQorICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0Ow0KKyAgICBtU3RhdGUucGFja1Jl
dmVyc2VSb3dPcmRlciA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
Ow0KKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7DQorICAgIG1CbGl0ID0gTlVMTDsNCisg
ICAgbUxpbmVMb29wSUIgPSBOVUxMOw0KKw0KKyAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsNCisg
ICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNl
Ow0KKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9w
ZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsNCisgICAg
bUNvbnRleHRMb3N0ID0gZmFsc2U7DQorICAgIG1SZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOw0K
KyAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNldHMgPyBHTF9MT1NFX0NPTlRFWFRfT05f
UkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCk7DQorICAgIG1Sb2J1c3RB
Y2Nlc3MgPSByb2J1c3RBY2Nlc3M7DQorDQorICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IGZh
bHNlOw0KKyAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRz
RFhUNVRleHR1cmVzID0gZmFsc2U7DQorICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNl
Ow0KKyAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7DQorICAgIG1OdW1Db21w
cmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOw0KKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7
DQorICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOw0KKyAgICBtYXJrQWxsU3RhdGVE
aXJ0eSgpOw0KK30NCisNCitDb250ZXh0Ojp+Q29udGV4dCgpDQorew0KKyAgICBpZiAobVN0YXRl
LmN1cnJlbnRQcm9ncmFtICE9IDApDQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSk7DQorICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgICAgICBtU3RhdGUu
Y3VycmVudFByb2dyYW0gPSAwOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghbUZyYW1lYnVmZmVy
TWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1
ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hpbGUgKCFtRmVuY2VN
YXAuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2lu
KCktPmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQ0K
KyAgICB7DQorICAgICAgICBkZWxldGVRdWVyeShtUXVlcnlNYXAuYmVnaW4oKS0+Zmlyc3QpOw0K
KyAgICB9DQorDQorICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQ0KKyAg
ICB7DQorICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNv
bmQ7DQorICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBv
cnQuYmVnaW4oKSk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBU
RVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAgew0KKyAgICAgICAgZm9yIChpbnQgc2Ft
cGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspDQor
ICAgIHsNCisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOw0KKyAg
ICB9DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5kQnVmZmVy
LnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZ
UEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNl
dChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0K
KyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgbVN0YXRlLnJl
bmRlcmJ1ZmZlci5zZXQoTlVMTCk7DQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsN
CisgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7DQorDQorICAgIGRlbGV0ZSBtVmVy
dGV4RGF0YU1hbmFnZXI7DQorICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsNCisgICAgZGVs
ZXRlIG1CbGl0Ow0KKyAgICBkZWxldGUgbUxpbmVMb29wSUI7DQorDQorICAgIGlmIChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlKQ0KKyAgICB7DQorICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
LT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgbURpc3BsYXkgPSBkaXNwbGF5Ow0K
KyAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOw0KKw0KKyAgICBpZiAoIW1IYXNC
ZWVuQ3VycmVudCkNCisgICAgew0KKyAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+Z2V0
RGV2aWNlQ2FwcygpOw0KKw0KKyAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRl
eERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOw0KKyAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIg
PSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisgICAgICAgIG1CbGl0ID0g
bmV3IEJsaXQodGhpcyk7DQorDQorICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsNCisgICAg
ICAgIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPSBtRGlzcGxheS0+Z2V0VmVydGV4VGV4dHVyZVN1
cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0luc3RhbmNp
bmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsNCisNCisgICAgICAgIG1NYXhU
ZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhU
ZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCksDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0g
c3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOw0KKyAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9
IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsNCisgICAgICAgIFRSQUNFKCJNYXhUZXh0
dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVm
ZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQiLA0KKyAgICAgICAgICAgICAgbU1h
eFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1
ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7DQorDQorICAgICAgICBjb25zdCBEM0RG
T1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0NCisgICAgICAgIHsNCisgICAgICAgICAgICBE
M0RGTVRfQThSOEc4QjgsDQorICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4LA0KKyAgICAgICAg
ICAgIEQzREZNVF9SNUc2QjUsDQorICAgICAgICAgICAgRDNERk1UX0QyNFM4DQorICAgICAgICB9
Ow0KKw0KKyAgICAgICAgaW50IG1heCA9IDA7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyArK2kpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29s
W0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsNCisgICAgICAgICAgICBtRGlzcGxheS0+
Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KHJlbmRlckJ1ZmZlckZvcm1hdHNbaV0sIG11bHRpc2FtcGxl
QXJyYXkpOw0KKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVyQnVmZmVyRm9y
bWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Ow0KKw0KKyAgICAgICAgICAgIGZvciAoaW50IGog
PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgbWF4ID0gajsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4
Ow0KKw0KKyAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXktPmdldEV2ZW50
UXVlcnlTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gbURp
c3BsYXktPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRFhU
MVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAg
bVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJlU3VwcG9ydCgp
Ow0KKyAgICAgICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDVUZXh0
dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3Bs
YXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
ciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxh
eS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCk7DQorDQorICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMg
PSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7DQorDQorICAgICAgICBt
TnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAgICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHMgKz0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0
dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmco
KTsNCisgICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOw0KKw0KKyAgICAgICAgbVN0YXRlLnZp
ZXdwb3J0WCA9IDA7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisgICAgICAgIG1T
dGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisgICAgICAgIG1TdGF0
ZS52aWV3cG9ydEhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOw0KKw0KKyAgICAgICAgbVN0
YXRlLnNjaXNzb3JYID0gMDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQorICAgICAg
ICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisgICAgICAgIG1T
dGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7DQorDQorICAgICAgICBt
SGFzQmVlbkN1cnJlbnQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIC8vIFdyYXAgdGhlIGV4aXN0
aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0g
dG8gdGhlICcwJyBuYW1lcw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRh
cmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAgIENv
bG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRl
clRhcmdldCk7DQorICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVy
byA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsNCisgICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJa
ZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsNCisNCisgICAgc2V0RnJhbWVidWZmZXJaZXJv
KGZyYW1lYnVmZmVyWmVybyk7DQorDQorICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQ0KKyAg
ICB7DQorICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0NCisN
CisgICAgaWYgKGRlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgZGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7DQorICAgIH0NCisgICAgDQorICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7DQorfQ0K
Kw0KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRp
cnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcu
DQordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpDQorew0KKyAgICBmb3IgKGludCB0
ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspDQorICAgIHsNCisgICAgICAg
IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGlu
dCB0ID0gMDsgdCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHQrKykNCisg
ICAgew0KKyAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbdF0gPSAwOw0KKyAgICB9DQor
DQorICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsID0gMDsNCisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7DQorICAg
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSAwOw0KKyAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVZpZXdw
b3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0
eSgpOw0KKw0KKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbUN1bGxTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IHRydWU7DQorICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU3Rl
bmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0
cnVlOw0KKyAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU2FtcGxlU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbUZyb250
RmFjZURpcnR5ID0gdHJ1ZTsNCisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7DQorICAgIG1D
YWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6bWFya0R4
VW5pZm9ybXNEaXJ0eSgpDQorew0KKyAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsNCit9DQor
DQordm9pZCBDb250ZXh0OjptYXJrQ29udGV4dExvc3QoKQ0KK3sNCisgICAgaWYgKG1SZXNldFN0
cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpDQorICAgICAgICBtUmVzZXRT
dGF0dXMgPSBHTF9VTktOT1dOX0NPTlRFWFRfUkVTRVRfRVhUOw0KKyAgICBtQ29udGV4dExvc3Qg
PSB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmlzQ29udGV4dExvc3QoKQ0KK3sNCisgICAg
cmV0dXJuIG1Db250ZXh0TG9zdDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9y
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQ0KK3sNCisg
ICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7DQorICAgIG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVl
ID0gYmx1ZTsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpDQorew0KKyAgICBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQ0KK3sNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlID0gc3RlbmNpbDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVu
YWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpDQorICAgIHsN
CisgICAgICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7DQorICAgICAgICBtQ3VsbFN0YXRl
RGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVu
YWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkNCit7DQorICAgIGlmIChtU3Rh
dGUuY3VsbE1vZGUgIT0gbW9kZSkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0g
bW9kZTsNCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQ0KK3sNCisgICAgaWYgKG1T
dGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5mcm9udEZh
Y2UgPSBmcm9udDsNCisgICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9
DQorDQordm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAg
aWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRl
LmRlcHRoVGVzdCA9IGVuYWJsZWQ7DQorICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsNCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykNCit7DQorICAgIGlmIChtU3RhdGUuZGVw
dGhGdW5jICE9IGRlcHRoRnVuYykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9
IGRlcHRoRnVuYzsNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZh
cikNCit7DQorICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOw0KKyAgICBtU3RhdGUuekZhciA9IHpG
YXI7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVkKQ0KK3sNCisg
ICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUu
YmxlbmQgPSBlbmFibGVkOw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7DQorICAg
IH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbVN0YXRlLmJsZW5kOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kRmFj
dG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhh
LCBHTGVudW0gZGVzdEFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAh
PSBzb3VyY2VSR0IgfHwNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJj
ZUFscGhhIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IGRlc3RSR0IgfHwNCisg
ICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJHQjsNCisgICAgICAgIG1TdGF0ZS5k
ZXN0QmxlbmRSR0IgPSBkZXN0UkdCOw0KKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEg
PSBzb3VyY2VBbHBoYTsNCisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IGRlc3RBbHBo
YTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0g
cmVkIHx8DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVlbiB8fA0KKyAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8DQorICAgICAgICBtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmJsZW5k
Q29sb3IucmVkID0gcmVkOw0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVl
bjsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBibHVlOw0KKyAgICAgICAgbVN0
YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbihH
TGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQ0KK3sNCisgICAgaWYgKG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8DQorICAgICAgICBtU3RhdGUu
YmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247DQorICAgICAgICBtU3RhdGUuYmxl
bmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsNCisgICAgICAgIG1CbGVuZFN0YXRlRGly
dHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRlc3Qo
Ym9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVk
KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOw0KKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRl
eHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
c3RlbmNpbFRlc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyhHTGVu
dW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzaykNCit7
DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwNCisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxSZWYgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVu
Y2lsTWFzayAhPSBzdGVuY2lsTWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxG
dW5jID0gc3RlbmNpbEZ1bmM7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2ls
UmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9
IHN0ZW5jaWxNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVu
Y2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNr
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgIT0gc3RlbmNpbEJhY2tGdW5j
IHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOw0K
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBz
dGVuY2lsQmFja1JlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gc3Rl
bmNpbEJhY2tNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5j
aWxXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3Rl
bmNpbFdyaXRlbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBzdGVuY2lsV3JpdGVtYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJh
Y2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOw0KKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpDQorew0KKyAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8DQorICAgICAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwNCisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRoUGFzcykNCisg
ICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7DQorICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNz
Ow0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2
b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tG
YWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3Rl
bmNpbEJhY2tGYWlsIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWls
ICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBzdGVuY2lsQmFja0ZhaWw7DQorICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVu
YWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsICE9IGVuYWJsZWQp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7DQor
ICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0K
K2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsNCisNCit9DQorDQordm9pZCBDb250
ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRz
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3RvciB8fA0K
KyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykNCisgICAgew0KKyAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7DQorICAgICAgICBtU3Rh
dGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7DQorICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxl
QWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxl
QWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zYW1w
bGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOw0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292
ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFU
b0NvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wg
ZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkN
CisgICAgew0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5hYmxlZDsNCisgICAg
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRl
eHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2U7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJh
Z2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQ0KK3sNCisgICAgaWYgKG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8DQorICAgICAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VWYWx1ZSA9IHZhbHVlOw0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52
ZXJ0ID0gaW52ZXJ0Ow0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKQ0KK3sN
CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAg
ICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzU2Npc3NvclRlc3RF
bmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2Npc3NvclRlc3Q7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmICht
U3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5kaXRoZXIg
PSBlbmFibGVkOw0KKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
fQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtU3RhdGUuZGl0aGVyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChH
TGZsb2F0IHdpZHRoKQ0KK3sNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRoOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCkNCit7DQor
ICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50Ow0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpDQorew0KKyAg
ICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7DQorICAgIC8vIFRP
RE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3Jp
dGUNCisgICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBkZHhfZmluZSBkZXBlbmRpbmcgb24gdGhl
IGhpbnQuDQorICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50
YXRpb25zIHRvIGlnbm9yZSBoaW50Lg0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0
UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0K
K3sNCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7DQorICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5
Ow0KKyAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHdpZHRoOw0KKyAgICBtU3RhdGUudmlld3Bv
cnRIZWlnaHQgPSBoZWlnaHQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFt
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQor
ICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8fCBtU3RhdGUuc2Npc3NvclkgIT0geSB8fCAN
CisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgIT0gaGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2Npc3NvclggPSB4Ow0K
KyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lk
dGggPSB3aWR0aDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gaGVpZ2h0Ow0KKyAg
ICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29s
IGFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0
ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fA0KKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7DQorICAgICAgICBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gYmx1ZTsN
CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOw0KKyAgICAgICAgbU1hc2tT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERlcHRo
TWFzayhib29sIG1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsNCisgICAgICAgIG1NYXNr
U3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRBY3Rp
dmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpDQorew0KKyAgICBtU3RhdGUuYWN0aXZlU2Ft
cGxlciA9IGFjdGl2ZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsN
Cit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsNCit9DQorDQorR0x1aW50
IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QXJy
YXlCdWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRh
cmdldCkgY29uc3QNCit7DQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7DQorICAgIA0K
KyAgICBzd2l0Y2ggKHRhcmdldCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0VYVDoNCisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOg0KKyAgICAgICAgcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAg
ICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAocXVlcnlPYmplY3QpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsNCisgICAgfQ0KKyAgICBl
bHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQ0KK3sNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOw0KK30NCisNCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUg
JkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pDQor
ew0KKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikNCit7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsNCisgICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsNCisgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsNCisgICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsNCisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7DQorICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7DQorfQ0K
Kw0KK2NvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQg
aW50IGF0dHJpYk51bSkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7DQorfQ0KKw0KK2NvbnN0IFZlcnRleEF0dHJpYnV0ZUFy
cmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkNCit7DQorICAgIHJldHVybiBtU3Rh
dGUudmVydGV4QXR0cmlidXRlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFBhY2tBbGlnbm1l
bnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisgICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGln
bm1lbnQ7DQorfQ0KKw0KK0dMaW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpDQorew0KKyAgICBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2tBbGln
bm1lbnQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRlcihib29s
IHJldmVyc2VSb3dPcmRlcikNCit7DQorICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0g
cmV2ZXJzZVJvd09yZGVyOw0KK30NCisNCitib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93
T3JkZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVy
Ow0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkNCit7DQorICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsNCit9DQorDQorR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZVByb2dyYW0oKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNy
ZWF0ZVByb2dyYW0oKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIo
dHlwZSk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkNCit7DQorICAg
IHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKCk7DQorfQ0KKw0KK0dMdWlu
dCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJj
ZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOw0KK30NCisNCisvLyBSZXR1cm5zIGFuIHVu
dXNlZCBmcmFtZWJ1ZmZlciBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVy
KCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3Iu
YWxsb2NhdGUoKTsNCisNCisgICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOw0KKw0K
KyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2Uo
KQ0KK3sNCisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0
ZSgpOw0KKw0KKyAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7DQor
DQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KKy8vIFJldHVybnMgYW4gdW51c2VkIHF1ZXJ5
IG5hbWUNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQ0KK3sNCisgICAgR0x1aW50IGhh
bmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOw0KKw0KKyAgICBtUXVlcnlN
YXBbaGFuZGxlXSA9IE5VTEw7DQorDQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0KKyAgICBpZiAobVJlc291
cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpDQorICAgIHsNCisgICAgICAgIGRldGFjaEJ1
ZmZlcihidWZmZXIpOw0KKyAgICB9DQorICAgIA0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxl
dGVCdWZmZXIoYnVmZmVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1
aW50IHNoYWRlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihzaGFk
ZXIpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
DQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOw0KKyAg
ICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRl
bGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICBpZiAobVJlc291cmNlTWFuYWdl
ci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNoVGV4dHVyZSh0
ZXh0dXJlKTsNCisgICAgfQ0KKw0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJl
KHRleHR1cmUpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hSZW5kZXJidWZm
ZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAgbVJlc291cmNlTWFuYWdlci0+
ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgRnJhbWVidWZm
ZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQo
ZnJhbWVidWZmZXIpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVm
ZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcik7DQorDQorICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShm
cmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZyYW1lYnVmZmVyT2Jq
ZWN0LT5zZWNvbmQ7DQorICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJP
YmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50
IGZlbmNlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNl
TWFwLmZpbmQoZmVuY2UpOw0KKw0KKyAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVu
ZCgpKQ0KKyAgICB7DQorICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5j
ZU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7DQor
ICAgICAgICBtRmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAgUXVlcnlNYXA6
Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5TWFwLmZpbmQocXVlcnkpOw0KKyAgICBpZiAo
cXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBtUXVlcnlI
YW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgaWYg
KHF1ZXJ5T2JqZWN0LT5zZWNvbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcXVlcnlPYmpl
Y3QtPnNlY29uZC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbVF1ZXJ5TWFwLmVy
YXNlKHF1ZXJ5T2JqZWN0KTsNCisgICAgfQ0KK30NCisNCitCdWZmZXIgKkNvbnRleHQ6OmdldEJ1
ZmZlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dEJ1ZmZlcihoYW5kbGUpOw0KK30NCisNCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVp
bnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOw0KK30NCisNCitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5k
bGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUp
Ow0KK30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpDQor
ew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZShoYW5kbGUpOw0KK30N
CisNCitSZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxl
KQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5k
bGUpOw0KK30NCisNCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkN
Cit7DQorICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsN
Cit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpDQorew0K
KyAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQ0KK3sNCisgICAgbVJlc291cmNl
TWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7DQorDQorICAgIG1TdGF0ZS5h
cnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikNCit7DQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOw0KKw0KKyAgICBt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8y
RCk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV9DVUJFKTsN
CisNCisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2
ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9DQorDQordm9pZCBDb250ZXh0
OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAgIGlmICgh
Z2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBtRnJhbWVidWZm
ZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7DQorICAgIH0NCisNCisgICAg
bVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgaWYg
KCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpDQorICAgIHsNCisgICAgICAgIG1GcmFtZWJ1
ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsNCisgICAgfQ0KKw0KKyAg
ICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7DQorDQorICAgIG1Cb3VuZERy
YXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpDQorew0KKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVm
ZmVyKTsNCisNCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHBy
b2dyYW0pDQorew0KKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9n
cmFtOw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAg
IC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25s
eSBnZXRzIGZsYWdnZWQuDQorDQorICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkNCisg
ICAgew0KKyAgICAgICAgUHJvZ3JhbSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdl
dFByb2dyYW0ocHJvZ3JhbSk7DQorICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291
cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOw0KKyAgICAgICAgbUNhY2hlZEN1
cnJlbnRQcm9ncmFtID0gTlVMTDsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOw0K
Kw0KKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pDQorICAgICAgICB7DQorICAgICAgICAgICAgbmV3
UHJvZ3JhbS0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIGlmIChv
bGRQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9sZFByb2dyYW0tPnJlbGVhc2Uo
KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnko
R0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAgLy8gRnJvbSBFWFRfb2NjbHVz
aW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2FsbGVkIHdpdGggYW4gPGlk
PiAgDQorICAgIC8vIG9mIHplcm8sIGlmIHRoZSBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9y
IDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhlICANCisgICAgLy8gdGFyZ2V0cyBBTllfU0FN
UExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwg
aWYgIA0KKyAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIgdGFyZ2V0IGlzIG5vbi16
ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiANCisgICAgLy8gZXhpc3RpbmcgcXVlcnkg
b2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRhcmdldD4sIG9yIGlmIDxpZD4gaXMg
dGhlDQorICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55IHF1ZXJ5IHR5cGUs
IHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcw0KKyAgICAvLyBnZW5lcmF0ZWQuDQorDQor
ICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUNCisgICAgLy8gTk9URTog
SWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3ZSB3aWxsIG5l
ZWQgdG8gY2hlY2sNCisgICAgLy8gc2VwYXJhdGVseSB0aGF0Og0KKyAgICAvLyAgICBhKSBUaGUg
cXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9yIGFueSB0
YXJnZXQvdHlwZQ0KKyAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9y
IHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UNCisgICAgLy8gICAgICAgb2Yg
R0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNF
UlZBVElWRV9FWFQsDQorICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9yIGVp
dGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuDQorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRl
LmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgfQ0K
Kw0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorICAgIHN3aXRjaCAodGFyZ2V0KQ0KKyAgICB7DQor
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiANCisgICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IA0KKyAgICAgICAgcVR5cGUg
PSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyANCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVy
eSwgdHJ1ZSwgdGFyZ2V0KTsNCisNCisgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5l
ZCB3aXRoIGdsR2VuUXVlcmllcw0KKyAgICBpZiAoIXF1ZXJ5T2JqZWN0KQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAg
IC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNoDQorICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlw
ZSgpICE9IHRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBz
cGVjaWZpZWQgdGFyZ2V0DQorICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5
T2JqZWN0KTsNCisNCisgICAgLy8gYmVnaW4gcXVlcnkNCisgICAgcXVlcnlPYmplY3QtPmJlZ2lu
KCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdldCkNCit7DQor
ICAgIFF1ZXJ5VHlwZSBxVHlwZTsNCisNCisgICAgc3dpdGNoICh0YXJnZXQpDQorICAgIHsNCisg
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IA0KKyAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogDQorICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IA0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgZGVmYXVsdDogDQorICAgICAgICBBU1NFUlQoZmFsc2UpOw0KKyAgICAgICAgcmV0
dXJuOw0KKyAgICB9DQorDQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVR
dWVyeVtxVHlwZV0uZ2V0KCk7DQorDQorICAgIGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9
DQorDQorICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsNCisNCisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5
W3FUeXBlXS5zZXQoTlVMTCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJa
ZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpDQorew0KKyAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFw
WzBdOw0KKyAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7DQorICAgIGlmIChtU3RhdGUu
ZHJhd0ZyYW1lYnVmZmVyID09IDApDQorICAgIHsNCisgICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1
ZmZlciA9IGJ1ZmZlcjsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAg
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdl
dCgpOw0KKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsN
Cit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGlu
dCBoYW5kbGUpDQorew0KKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIg
PSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXIg
PT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsN
CisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+
c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0ZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25l
ZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNl
TWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU1hcC5lbmQoKSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitRdWVyeSAq
Q29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51
bSB0eXBlKQ0KK3sNCisgICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1ZXJ5TWFwLmZp
bmQoaGFuZGxlKTsNCisNCisgICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHF1ZXJ5LT5zZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsNCisgICAgICAgICAg
ICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBx
dWVyeS0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsNCit9DQor
DQorQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQ0KK3sNCisgICAgcmV0
dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7DQorfQ0KKw0KK1Byb2dyYW0gKkNv
bnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKCkNCit7DQorICAgIGlmICghbUNhY2hlZEN1cnJlbnRQ
cm9ncmFtKQ0KKyAgICB7DQorICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7DQorICAgIH0NCisg
ICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50UHJvZ3JhbTsNCit9DQorDQorVGV4dHVyZTJEICpDb250
ZXh0OjpnZXRUZXh0dXJlMkQoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUy
RCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7
DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpDQor
ew0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihnZXRTYW1wbGVyVGV4
dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7DQorfQ0KKw0KK1RleHR1
cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0
dXJlVHlwZSB0eXBlKQ0KK3sNCisgICAgR0x1aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7DQorDQorICAgIGlmICh0ZXhpZCA9PSAwKSAgIC8vIFNw
ZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQg
b24gdGhlIHRhcmdldA0KKyAgICB7DQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICB7
DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgIGNhc2UgVEVY
VFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOw0KKyAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1w
bGVyXS5nZXQoKTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5h
bWUsIEdMYm9vbGVhbiAqcGFyYW1zKQ0KK3sNCisgICAgc3dpdGNoIChwbmFtZSkNCisgICAgew0K
KyAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFtcyA9IEdMX1RS
VUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUlu
dmVydDsgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmNvbG9yTWFza1JlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1h
c2tHcmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvck1hc2tCbHVlOw0KKyAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9Q
T0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRG
aWxsOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0U6ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0
OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOiAqcGFy
YW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9GQUxTRTsgYnJlYWs7DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
dHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZs
b2F0ICpwYXJhbXMpDQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUg
aXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRhdGlvbg0KKyAg
ICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBu
YXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBh
bnkNCisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBj
YWxsaW5nIGFwcGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7DQorICAgICAg
Y2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUubGluZVdp
ZHRoOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZB
TFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWU7ICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAqcGFyYW1zID0gbVN0
YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsNCisgICAgICBjYXNlIEdMX0FMSUFTRURf
TElORV9XSURUSF9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfTElORV9X
SURUSF9SQU5HRV9NQVg7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0FMSUFTRURf
UE9JTlRfU0laRV9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VE
X1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfREVQVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7DQorICAg
ICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuZ3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhh
Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoNCisgICAgICAg
IHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJs
ZW5kQ29sb3IuYmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBm
YWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpDQorew0KKyAgICAvLyBQ
bGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRl
cm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbg0KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0
b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVj
IG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24u
IEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkNCisgICAgLy8gY2FzZSwgdGhp
cyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZ
b3UgbWF5IGZpbmQgaXQgaW4gDQorICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4NCisgICAgc3dp
dGNoIChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAg
ICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsNCisgICAgICBjYXNlIEdM
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMoKTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAg
ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAq
cGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmlu
YXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFy
cmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsNCisgICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJf
QklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEUNCisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElO
R19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTog
ICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BB
Q0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGln
bm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJT
RV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3Jk
ZXI7ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAq
cGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9N
QVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7ICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBh
c3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNT
X0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3M7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JD
X0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9W
QUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMg
PSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIA0KKyAgICAgICAgcGFyYW1z
WzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsNCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAgICB7DQorICAgICAgICAgICAg
R0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpOw0KKyAgICAgICAg
ICAgIGlmIChtYXhTYW1wbGVzICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbWF4U2FtcGxlczsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxz
ZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg
ICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICBjYXNl
IEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICANCisgICAgICBjYXNlIEdMX1NB
TVBMRVM6DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDE7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2Ug
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0lNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfVFlQRTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUOyBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOg0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkp
Ow0KKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsNCisgICAgICAgICAgICBw
YXJhbXNbMV0gPSBtYXhEaW1lbnNpb247DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRY
Ow0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsNCisgICAgICAgIHBhcmFt
c1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQ0lTU09S
X0JPWDoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lzc29yWDsNCisgICAgICAgIHBh
cmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5z
Y2lzc29yV2lkdGg7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuc2Npc3NvckhlaWdodDsN
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAgICAgY2FzZSBH
TF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOw0KKw0KKyAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
cikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICpw
YXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVl
blNpemUoKTsgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0QWxw
aGFTaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfREVQVEhfQklUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsNCisNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorDQorICAgICAgICAgICAgaWYgKHN0ZW5j
aWxidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfMkQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlk
KCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVN0YXRlLmFj
dGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJ
RklDQVRJT05fU1RSQVRFR1lfRVhUOg0KKyAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5
Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9S
TUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0gMTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0g
R0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0
Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0K
K30NCisNCitib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUs
IEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpDQorew0KKyAgICAvLyBQbGVh
c2Ugbm90ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGlu
IHRoaXMgaW1wbGVtZW50YXRpb24NCisgICAgLy8gaXMgRkxPQVQgcmF0aGVyIHRoYW4gSU5ULCBh
cyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVjLiBUaGlzIGlzIGR1ZQ0K
KyAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxv
YXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24NCisgICAgLy8gaWYgcmV0dXJuZWQg
ZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVh
ZHkgaW1wbGVtZW50ZWQgDQorICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25lIGNhbGxzIGdsR2V0
SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJpYWJsZSwgd2UNCisg
ICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3Vs
ZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcNCisgICAgLy8gYXBwbGljYXRpb24u
DQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
VEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
Ow0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJfQklO
QVJZX0ZPUk1BVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7DQor
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoNCisgICAgICBjYXNlIEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzoNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAgICAgIGNhc2Ug
R0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6DQorICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOg0K
KyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoNCisgICAgICBjYXNlIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICBjYXNlIEdMX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoNCisgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOg0KKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6DQorICAgICAgY2FzZSBHTF9Q
QUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOg0KKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdO
TUVOVDoNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOg0KKyAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6DQorICAgICAgY2FzZSBHTF9S
RURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAgICAgY2FzZSBHTF9CTFVF
X0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfREVQVEhf
QklUUzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToN
CisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6DQorICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVS
RToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxf
VkFMVUVfTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOg0KKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6DQor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoNCisgICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19GVU5DOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
Og0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoNCisgICAgICBj
YXNlIEdMX0RFUFRIX0ZVTkM6DQorICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOg0KKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoN
CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQToNCisgICAgICBjYXNlIEdMX0JMRU5EX0VR
VUFUSU9OX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOg0KKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
V1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToNCisgICAgICBj
YXNlIEdMX1NVQlBJWEVMX0JJVFM6DQorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOg0K
KyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToNCisgICAgICBjYXNlIEdM
X1NBTVBMRV9CVUZGRVJTOg0KKyAgICAgIGNhc2UgR0xfU0FNUExFUzoNCisgICAgICBjYXNlIEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToNCisgICAgICBjYXNlIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5H
XzJEOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOg0KKyAgICAgIGNh
c2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICBjYXNlIEdMX05V
TV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICBjYXNlIEdMX1BST0dSQU1fQklO
QVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
Ow0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApDQorICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9E
SU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9WSUVXUE9SVDoNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOg0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJf
Q09NUElMRVI6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOg0KKyAgICAg
IGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAg
ICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNF
bmFibGVkLA0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAvLyBidXQg
Y2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMuDQorICAgICAg
Y2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1cnBvc2UsIHRo
ZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwNCisgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRToNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoNCisgICAgICBjYXNlIEdM
X1NURU5DSUxfVEVTVDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6DQorICAgICAgY2FzZSBH
TF9CTEVORDoNCisgICAgICBjYXNlIEdMX0RJVEhFUjoNCisgICAgICBjYXNlIEdMX0NPTlRFWFRf
Uk9CVVNUX0FDQ0VTU19FWFQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9C
T09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6DQorICAgICAgICB7DQorICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Ow0K
KyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GQUNUT1I6DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoNCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToNCisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFS
X1ZBTFVFOg0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDoNCisgICAgICAgIHsNCisgICAgICAg
ICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6DQorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6DQorICAg
ICAgY2FzZSBHTF9ERVBUSF9SQU5HRToNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToNCisgICAgICBj
YXNlIEdMX0JMRU5EX0NPTE9SOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xf
RkxPQVQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7DQorICAgICAgICB9DQorICAgICAg
ICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFy
Z2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFu
ZA0KKy8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK2Jvb2wg
Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkNCit7DQorICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0K
Kw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21w
bGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7DQor
ICAgIH0NCisNCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0
IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudA0KKyAgICAvLyB0byBrZWVwIHRoZSBE
M0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGgg
dGV4dHVyaW5nLg0KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7
DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xf
Tk9ORSkNCisgICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJP
YmplY3QtPmdldENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENvbG9y
YnVmZmVyKCk7DQorICAgIH0NCisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpDQorICAgIHsN
CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBib29sIHJlbmRlclRhcmdl
dENoYW5nZWQgPSBmYWxzZTsNCisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7DQorICAgIGlmIChyZW5kZXJUYXJnZXRT
ZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpDQorICAgIHsNCisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOw0KKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwu
Iik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0
DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVy
VGFyZ2V0KTsNCisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFy
Z2V0U2VyaWFsOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsgLy8gU2Npc3Nv
ciBhcmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0tIHRoaXMgaXMg
ZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuDQorICAgICAgICByZW5kZXJU
YXJnZXRDaGFuZ2VkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0K
KyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOw0K
KyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOw0KKyAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgUmVuZGVy
YnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigp
Ow0KKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
Ow0KKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
RVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBkZXB0
aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKyAgICBl
bHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKyAgICAgICAgZGVwdGhTdGVuY2ls
ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICBpZiAoIWRlcHRo
U3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9p
bnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVu
Y2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZGVwdGhidWZmZXJT
ZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fA0KKyAgICAgICAgc3RlbmNpbGJ1
ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwNCisgICAgICAgICFt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsNCisgICAgICAgIG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsNCisgICAgICAgIG1BcHBsaWVkU3RlbmNp
bGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7DQorICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChkZXB0aFN0ZW5jaWwp
DQorICAgIHsNCisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQor
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBD
b250ZXh0IG11c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0lu
aXRpYWxpemVkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAg
ICB9DQorDQorICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsNCisNCisgICAgZmxvYXQgek5lYXIg
PSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7DQorICAgIGZsb2F0IHpGYXIgPSBjbGFtcDAxKG1TdGF0
ZS56RmFyKTsNCisNCisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQ0KKyAgICB7DQorICAgICAgICB2
aWV3cG9ydC5YID0gMDsNCisgICAgICAgIHZpZXdwb3J0LlkgPSAwOw0KKyAgICAgICAgdmlld3Bv
cnQuV2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aDsNCisgICAgICAgIHZpZXdwb3J0Lkhl
aWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsNCisgICAgICAgIHZpZXdwb3J0Lk1pblog
PSAwLjBmOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IDEuMGY7DQorICAgIH0NCisgICAgZWxz
ZQ0KKyAgICB7DQorICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAg
ICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WSwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgdmlld3BvcnQuV2lkdGgg
PSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlgpKTsNCisg
ICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBzdGF0aWNfY2Fz
dDxMT05HPih2aWV3cG9ydC5ZKSk7DQorICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7DQor
ICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsNCisgICAgfQ0KKw0KKyAgICBpZiAodmlld3Bv
cnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyDQorICAgIH0NCisNCisgICAgaWYg
KHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRpYWxpemVkIHx8IG1lbWNtcCgm
dmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmlld3BvcnQpICE9IDApDQorICAg
IHsNCisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7DQorICAgICAgICBt
U2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsNCisgICAgICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0g
dHJ1ZTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAg
IGlmIChtU2Npc3NvclN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2Np
c3NvclRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVDVCByZWN0Ow0KKyAgICAgICAg
ICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVjdC50b3AgPSBj
bGFtcChtU3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0
RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAobVN0YXRlLnNj
aXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcCht
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFNjaXNzb3JSZWN0KCZyZWN0KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7DQorICAgICAgICB9DQorICAgICAgICBl
bHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1T
Y2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkNCisgICAgew0KKyAgICAgICAgUHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7DQorICAgICAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
Ow0KKw0KKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5hcnktPmdldER4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7DQorICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYg
LyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9Ow0KKyAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7DQorDQorICAg
ICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQg
aW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkuDQorICAgICAgICBHTGludCBjb29yZCA9IHByb2dy
YW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCB3aHh5WzRd
ID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8g
Mi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0
WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIu
MGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4
eSk7DQorDQorICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhM
b2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIu
MGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07DQorICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7DQorDQorICAgICAgICBHTGludCBkZXB0aFJhbmdlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxv
YXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07DQorICAgICAg
ICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZm
KTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBy
ZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rpb24gc3RhdGUg
KGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5nLCBldGMpIHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0g
ZHJhd01vZGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFBy
b2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
T2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIEdMaW50IGZyb250Q0NXID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7DQorICAgIEdMaW50IGNjdyA9
IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7DQorICAgIHByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOw0KKw0KKyAgICBHTGludCBwb2ludHNPckxpbmVz
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsNCisgICAgR0xp
bnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOw0KKyAgICBwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7DQor
DQorICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0
QWRhcHRlcklkZW50aWZpZXIoKTsNCisgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlk
ZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsNCisgICAgLy8gQXBwYXJlbnRseSBzb21lIEFU
SSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcg0KKyAgICAv
LyB3cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1
bHRzLiBJbnN0ZWFkLA0KKyAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0
IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubw0KKyAgICAvLyBkcmF3aW5nIGlzIGRv
bmUuDQorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVz
L2RldGFpbD9pZD0xNjkNCisNCisgICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNl
RGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVz
MmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBtU3RhdGUuZnJvbnRGYWNlKSk7
DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7DQorICAg
ICAgICB9DQorDQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0K
KyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5k
ZXB0aFRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUu
ZGVwdGhGdW5jKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFM
U0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOw0K
KyAgICB9DQorDQorICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1NYXNrU3RhdGVE
aXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkNCisgICAgew0KKyAgICAgICAgbUJsZW5kU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
DQorICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRl
LmJsZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIGlmIChtU3Rh
dGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJg0KKyAgICAgICAgICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0
QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNU
T1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIEQzRENPTE9SX1JHQkEo
dW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRl
LmJsZW5kQ29sb3IuYWxwaGEpKSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5k
RnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0
ZS5kZXN0QmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25S
R0IpKTsNCisNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhIHx8IA0KKyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5k
UkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCANCisgICAgICAgICAgICAgICAgbVN0YXRl
LmJsZW5kRXF1YXRpb25SR0IgIT0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NF
UEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7DQorDQorICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0Qmxl
bmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhKSk7DQorICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJs
ZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5k
T3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IGZhbHNlOw0K
KyAgICB9DQorDQorICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5
KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVy
T2JqZWN0LT5oYXNTdGVuY2lsKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7
DQorDQorICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkNCisgICAgICAg
ICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RS
U19TVEVOQ0lMUkVGOw0KKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RS
U19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVOQ0lMTUFTSzsNCisgICAgICAgICAgICBjb25z
dCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgDQorICAgICAgICAgICAgICAgIG1T
dGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiB8fCANCisgICAgICAgICAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3Rl
bmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVz
IGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg
ICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYNCisgICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8
IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsNCisNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1df
U1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOw0KKw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxSZWYg
PCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0
ZS5zdGVuY2lsTWFzayk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0ND
V19TVEVOQ0lMUEFTUywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsNCisNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNL
LCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVO
QyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykp
Ow0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsICht
U3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RS
U19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOw0KKw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19T
VEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNl
DQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gZmFsc2U7DQorICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpbnQg
Y29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwg
bVN0YXRlLmNvbG9yTWFza0dyZWVuLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0Fs
cGhhKTsNCisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93
ZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1
dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLg0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfR1JFRU4pOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsNCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09ORSk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNE
QkxFTkRPUF9BREQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IGNvbG9yTWFzayk7DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOw0K
Kw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYg
KG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0RmlsbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOw0K
KyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMs
ICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsNCisgICAgICAgICAgICAg
ICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLShp
bnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOw0KKyAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFz
KSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFUFRIQklBUywgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVNhbXBsZVN0YXRlRGlydHkp
DQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMg
dW5pbXBsZW1lbnRlZC4iKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsNCisgICAgICAgIGlm
IChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IG1hc2sgPSAwOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VW
YWx1ZSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNo
b2xkID0gMC41ZjsNCisNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpDQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7DQorDQorICAgICAgICAgICAgICAgICAgICBp
ZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkNCisg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQg
Kz0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDE7DQorICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsNCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElT
QU1QTEVNQVNLLCBtYXNrKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1B
U0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGly
dHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobURpdGhlclN0YXRlRGlydHkpDQorICAg
IHsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwg
bVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7DQorDQorICAgICAgICBtRGl0aGVyU3RhdGVE
aXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRl
eEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdM
c2l6ZWkgKnJlcGVhdERyYXcpDQorew0KKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0
ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsNCisNCisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRh
TWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0
YW5jZXMpOw0KKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZXJyOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIGdldEN1cnJlbnRQcm9ncmFt
KCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIGluZGlj
ZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQor
R0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBH
THNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERh
dGEgKmluZGV4SW5mbykNCit7DQorICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+
cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5n
ZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsNCisNCisgICAgaWYgKGVyciA9PSBHTF9OT19FUlJP
UikNCisgICAgew0KKyAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJT
ZXJpYWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhpbmRl
eEluZm8tPmluZGV4QnVmZmVyKTsNCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5k
ZXhJbmZvLT5zZXJpYWw7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIGVycjsN
Cit9DQorDQorLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0
aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpDQorew0K
KyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsNCisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsNCisNCisgICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBs
aWVkUHJvZ3JhbVNlcmlhbCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4U2hhZGVyKCk7DQorICAg
ICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxTaGFkZXIoKTsNCisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBp
eGVsU2hhZGVyKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOw0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOw0KKyAgICAg
ICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7DQor
ICAgIH0NCisNCisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOw0KK30NCisNCisv
LyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNE
IDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkNCit7DQorICAgIGFwcGx5
VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7DQorDQorICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0
dXJlKQ0KKyAgICB7DQorICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsNCisg
ICAgfQ0KK30NCisNCisvLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRo
ZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsDQorLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcg
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLA0KKy8vIGFuZCBzZXRz
IHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJpbmcgc3RhdGUgKG9yIE5VTEwg
d2hlbiBpbmFjdGl2ZSkuDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBl
IHR5cGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dy
YW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09
IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMg
b2YgZ2l2ZW4gc2FtcGxlciB0eXBlDQorICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRleHR1cmVT
ZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBT
IDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7DQorICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0g
KHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOw0K
KyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5n
ZSh0eXBlKTsNCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4
IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykNCisgICAgew0KKyAgICAgICAgaW50IHRl
eHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxl
ckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4DQorICAgICAgICBp
bnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7DQorDQorICAg
ICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpDQorICAgICAgICB7DQorICAgICAgICAgICAgVGV4
dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5
cGUodHlwZSwgc2FtcGxlckluZGV4KTsNCisNCisgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJl
ID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsNCisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgp
Ow0KKw0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJl
LT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkNCisgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQ0KKyAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9
IHRleHR1cmUtPmdldFdyYXBTKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdy
YXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7
DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQp
KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1h
Z0ZpbHRlcikpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBF
IGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVz
MmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQzZE1pcEZp
bHRlcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRl
KGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RT
QU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisN
CisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGdl
dEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gdGV4U2VyaWFsOw0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldERp
cnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlKGQzZFNhbXBsZXIsIE5VTEwpOw0KKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdlOyBzYW1wbGVy
SW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQ0KKyAgICB7DQorICAgICAgICBp
ZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSAwKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsgZDNkU2FtcGxl
ck9mZnNldCwgTlVMTCk7DQorICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxl
ckluZGV4XSA9IDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQ0KK3sNCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7DQor
ICAgIH0NCisNCisgICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgb3V0cHV0
UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tBbGln
bm1lbnQpOw0KKyAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hlY2sNCisgICAgaWYgKGJ1ZlNp
emUpDQorICAgIHsNCisgICAgICAgIGludCByZXF1aXJlZFNpemUgPSBvdXRwdXRQaXRjaCAqIGhl
aWdodDsNCisgICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBm
cmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVy
biBzaWxlbnRseQ0KKyAgICB9DQorDQorICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOw0KKyAgICBy
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOw0KKw0KKyAgICBpZiAoZGVzYy5NdWx0aVNhbXBs
ZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkNCisgICAgew0KKyAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGlu
dG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0DQorICAgICAgICByZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisg
ICAgfQ0KKw0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5
c3RlbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gIWdldFBhY2tS
ZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+
aXNEM2Q5RXhEZXZpY2UoKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PSAwICYm
IHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBk
ZXNjLkhlaWdodCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdMX1VO
U0lHTkVEX0JZVEU7DQorICAgIGlmIChkaXJlY3RUb1BpeGVscykNCisgICAgew0KKyAgICAgICAg
Ly8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0ZSBkaXJlY3Rs
eSBpbnRvIGNsaWVudCdzIG1lbW9yeQ0KKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1h
dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOw0KKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIFRyeSBhZ2Fp
biB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlDQorICAgICAgICAgICAgZGlyZWN0VG9QaXhlbHMg
PSBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIWRpcmVjdFRvUGl4ZWxz
KQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFp
blN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7DQorICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsNCisg
ICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIHJlbmRlclRhcmdldCA9IE5VTEw7DQor
DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwg
c29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcg0KKyAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9z
ZSBkb2N1bWVudGVkLg0KKyAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQ0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIGVsc2UN
CisgICAgICAgIHsNCisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKw0KKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMp
DQorICAgIHsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHJlY3Q7DQorICAgIHJlY3QubGVmdCA9IGNsYW1w
KHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7DQorICAgIHJlY3QudG9wID0g
Y2xhbXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorICAgIHJlY3Qu
cmlnaHQgPSBjbGFtcCh4ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRo
KSk7DQorICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7DQorICAg
IHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19S
RUFET05MWSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisNCisg
ICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQ0KKyAgICB9
DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOw0K
KyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7DQor
DQorICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsNCisgICAgaW50IGlucHV0UGl0Y2g7DQorICAg
IGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9
ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9t
IC0gcmVjdC50b3AgLSAxKTsNCisgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsNCisg
ICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9ICh1bnNpZ25lZCBjaGFy
Kilsb2NrLnBCaXRzOw0KKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7DQorICAgIH0N
CisNCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKysp
DQorICAgIHsNCisgICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYN
CisgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYNCisgICAgICAgICAgICB0eXBl
ID09IEdMX1VOU0lHTkVEX0JZVEUpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRmFzdCBw
YXRoIGZvciBFWFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4NCisgICAgICAgICAgICAvLyBhbiBS
R0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vDQorICAgICAgICAg
ICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lg0KKyAgICAgICAgICAg
IG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLA0KKyAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwNCisgICAgICAgICAgICAgICAgICAgKHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQpICogNCk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBmbG9hdCByOw0KKyAgICAgICAgICAgIGZsb2F0IGc7
DQorICAgICAgICAgICAgZmxvYXQgYjsNCisgICAgICAgICAgICBmbG9hdCBhOw0KKw0KKyAgICAg
ICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfUjVHNkI1Og0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
MiAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAgICBhID0gMS4w
ZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgw
MDFGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8g
MHgwN0UwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBm
IC8gMHhGODAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBz
aG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOw0KKyAgICAgICAgICAg
ICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsNCisgICAgICAg
ICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7DQorICAg
ICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0
ICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJn
YiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsNCisgICAgICAgICAgICAgICAg
ICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAg
ICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBG
RjAwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Og0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWdu
ZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAg
ICAgICAgICAgICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4
MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAgICAgICAgICAgICAgICAgIGcg
PSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsNCisgICAgICAgICAg
ICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOg0KKyAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAgICBhID0g
KGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7DQorICAgICAgICAgICAg
ICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7DQor
ICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgw
MDBGRkMwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAq
ICgxLjBmIC8gMHgzRkYwMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOg0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGlu
IEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQNCisg
ICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDApOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291
cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7DQorICAgICAgICAgICAgICAgICAg
ICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsN
CisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGog
KiBpbnB1dFBpdGNoKSArIDMpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoNCisgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kDQorICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOw0KKw0KKyAgICAgICAgICAgICAgICAgICAg
RDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkg
KyBqICogaW5wdXRQaXRjaCksIDQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgYSA9IGFiZ3Jb
M107DQorICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsNCisgICAgICAgICAgICAgICAg
ICAgIGcgPSBhYmdyWzFdOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IGFiZ3JbMF07DQorICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUNCisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0K
KyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7DQorICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAw
LjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gg
KyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
Og0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBnICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOw0KKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAgICAg
ICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAg
NyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIHwg
ICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAg
ICB8ICAgMXN0IGNvbXBvbmVudCAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguDQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAv
IHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8DQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwN
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVm
KSA8PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2Zl
ciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAgICAgICAgICAgICAgICAvLyAg
IDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAg
NCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAg
M3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25l
bnQgICAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMg
dGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguDQorICAgICAg
ICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgg
ICAgIGEgKyAwLjVmKSA8PCAxNSkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8DQorICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOw0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUDQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6ICAg
Ly8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFDQorICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gDQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41Zikg
PDwgMCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICog
ZyArIDAuNWYpIDw8IDUpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKw0KKyAgICBzeXN0ZW1TdXJmYWNlLT5S
ZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQ0K
K3sNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmpl
Y3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOw0K
KyAgICB9DQorDQorICAgIERXT1JEIGZsYWdzID0gMDsNCisNCisgICAgaWYgKG1hc2sgJiBHTF9D
T0xPUl9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOw0KKw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZl
clR5cGUoKSAhPSBHTF9OT05FKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZsYWdzIHw9IEQz
RENMRUFSX1RBUkdFVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobWFzayAmIEdM
X0RFUFRIX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JV
RkZFUl9CSVQ7DQorICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
DQorICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7DQorDQorICAgIGlmIChtYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5HTF9TVEVO
Q0lMX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICAgICAgaWYgKCFkZXB0aFN0
ZW5jaWwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICAgICAgcmV0dXJu
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAgICAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzYzsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOw0K
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1h
dCk7DQorICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkg
LSAxOw0KKw0KKyAgICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1hc2sgIT0gMCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOw0KKyAgICB9
DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydA0KKyAgICB7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLCANCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkKSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4
PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsNCisg
ICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUpOw0KKyAgICBp
bnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7DQorDQor
ICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJn
ZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhOw0KKw0KKyAgICBj
b25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVO
Q0lMKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRl
LnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsN
CisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFS
X1RBUkdFVCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0
YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgJiYgYWxw
aGFVbm1hc2tlZCk7DQorDQorICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFz
a2VkU3RlbmNpbENsZWFyKQ0KKyAgICB7DQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRl
cmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2
ZWQuDQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRo
cyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdA0KKyAgICAgICAgLy8gIHRo
YXQgcGF0aCBpcyB0YWtlbi4NCisgICAgICAgIEhSRVNVTFQgaHI7DQorICAgICAgICBpZiAobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGhy
ID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRP
Rk1FTU9SWSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WldSSVRFRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsNCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJ
RCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNU
RU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBE
M0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
MHhGRkZGRkZGRik7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgZm9yKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwp
Ow0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkNhcHR1cmUo
KTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7DQorICAgICAgICB9DQorDQor
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNF
KTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBf
QUxXQVlTKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
RklMTE1PREUsIEQzREZJTExfU09MSUQpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0KKw0KKyAgICAg
ICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpD
b252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVl
biwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJf
U1RFTkNJTCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxX
QVlTKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
UkVGLCBzdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0Up
Ow0KKyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJI
Vyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNU
T1IpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FM
UEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOw0KKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZG
RkZGRkZGKTsNCisNCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsg
ICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRj
aCB0aGUgZWRnZXMNCisgICAgICAgIHF1YWRbMF1bMF0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRb
MF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOw0KKyAgICAgICAgcXVhZFsw
XVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsNCisNCisgICAgICAgIHF1
YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7DQorICAgICAgICBxdWFk
WzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsNCisgICAgICAgIHF1YWRb
MV1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7DQorDQorICAgICAgICBx
dWFkWzJdWzBdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7DQorICAgICAg
ICBxdWFkWzJdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOw0KKw0KKyAg
ICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsNCisgICAg
ICAgIHF1YWRbM11bMV0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOw0KKyAg
ICAgICAgcXVhZFszXVszXSA9IDEuMGY7DQorDQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOw0KKyAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RS
SVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOw0KKw0KKyAgICAgICAgaWYgKGZsYWdzICYg
RDNEQ0xFQVJfWkJVRkZFUikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3Rl
bmNpbCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUtPkFwcGx5KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAoZmxhZ3MpDQor
ICAgIHsNCisgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVw
dGgsIHN0ZW5jaWwpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KQ0KK3sNCisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNE
UFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQor
DQorICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmlt
aXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7DQorDQorICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChm
YWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0
YXRlKG1vZGUpOw0KKw0KKyAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOw0KKyAgICBHTGVudW0g
ZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsICZyZXBlYXRE
cmF3KTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIGVycm9yKGVycik7DQorICAgIH0NCisNCisgICAgYXBwbHlTaGFkZXJzKCk7DQorICAgIGFw
cGx5VGV4dHVyZXMoKTsNCisNCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9n
cmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpDQorICAgIHsNCisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFj
dWxsU2tpcHNEcmF3KG1vZGUpKQ0KKyAgICB7DQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApDQorICAg
ICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAw
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApDQorICAgICAg
ICB7DQorICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhE
YXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsNCisgICAgICAgICAgICBpZiAo
Y291bnRpbmdJQikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChtQXBwbGll
ZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGNvdW50aW5nSUItPmdl
dEJ1ZmZlcigpKTsNCisgICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3Vu
dGluZ0lCLT5nZXRTZXJpYWwoKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUo
cHJpbWl0aXZlVHlwZSwgMCwgMCwgY291bnQsIDAsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3VudGluZyBp
bmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2
ZUNvdW50KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpDQorew0KKyAgICBpZiAoIW1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVU
eXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQorDQorICAgIGlmKCFlczJkeDo6Q29udmVy
dFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291
bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7DQorDQorICAgIGlm
IChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0N
CisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpDQorICAgIHsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0YXRlKG1vZGUpOw0KKw0KKyAgICBUcmFu
c2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsNCisgICAgR0xlbnVtIGVyciA9IGFwcGx5SW5kZXhC
dWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOw0KKyAgICBpZiAo
ZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsN
CisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4
IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsNCisgICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsN
CisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhD
b3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0gR0xfTk9fRVJS
T1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9DQorDQorICAg
IGFwcGx5U2hhZGVycygpOw0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAgIGlmICghZ2V0
Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZh
bHNlKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpDQorICAgIHsNCisg
ICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7DQorDQorICAgICAgICBpZiAobW9kZSA9PSBH
TF9MSU5FX0xPT1ApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50
LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAgIA0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVwZWF0RHJhdzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1p
bkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJ
bmRleCwgcHJpbWl0aXZlQ291bnQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCisvLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBibG9jayBpcyBmYWxzZSwgZ2xG
aW5pc2ggd2hlbiBibG9jayBpcyB0cnVlDQordm9pZCBDb250ZXh0OjpzeW5jKGJvb2wgYmxvY2sp
DQorew0KKyAgICBtRGlzcGxheS0+c3luYyhibG9jayk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGludCBtaW5JbmRleCkNCit7DQorICAgIC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9y
IGFuIGluZGV4ZWQgZHJhdw0KKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCkpDQorICAgIHsNCisgICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZm
ZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0KKyAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7DQorICAgICAgICBp
bmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkp
ICsgb2Zmc2V0Ow0KKyAgICB9DQorDQorICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7DQorICAgIGJv
b2wgc3VjY2VlZGVkID0gZmFsc2U7DQorDQorICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygp
KQ0KKyAgICB7DQorICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAq
IHNpemVvZih1bnNpZ25lZCBpbnQpOw0KKw0KKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1
ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxpbmVMb29wSUIpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5T
SUdORURfSU5UKTsNCisNCisgICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQorICAgICAgICAg
ICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVM
b29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5k
ZXggPSBvZmZzZXQgLyA0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRl
eGVkIGRyYXcNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhW2ldID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAg
IGRhdGFbY291bnRdID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
MF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMp
W2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtj
b3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQor
ICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgY29uc3QgaW50IHNwYWNl
TmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOw0KKw0KKyAgICAg
ICAgaWYgKCFtTGluZUxvb3BJQikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJ
QiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZF
Ul9TSVpFLCBEM0RGTVRfSU5ERVgxNik7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxp
bmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVT
cGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOw0KKw0KKyAgICAgICAgICAgIFVJ
TlQgb2Zmc2V0ID0gMDsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9m
ZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyAyOw0KKyAgICAgICAg
ICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcNCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsNCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
W2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6DQorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2Vz
KVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg
ICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQorICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9
IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIA0KKyAgICBp
ZiAoc3VjY2VlZGVkKQ0KKyAgICB7DQorICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBt
TGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOw0KKyAgICAgICAgICAgIG1B
cHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7DQorICAgICAgICB9DQor
DQorICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5FU1RSSVAs
IC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7DQorICAgIH0N
CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29w
aW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVj
b3JkSW52YWxpZEVudW0oKQ0KK3sNCisgICAgbUludmFsaWRFbnVtID0gdHJ1ZTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQ0KK3sNCisgICAgbUludmFsaWRWYWx1
ZSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigp
DQorew0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQ0KK3sNCisgICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsNCit9
DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQ0K
K3sNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7DQorfQ0KKw0KKy8v
IEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlmIGFu
eS4NCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4NCitHTGVudW0g
Q29udGV4dDo6Z2V0RXJyb3IoKQ0KK3sNCisgICAgaWYgKG1JbnZhbGlkRW51bSkNCisgICAgew0K
KyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7DQorDQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9FTlVNOw0KKyAgICB9DQorDQorICAgIGlmIChtSW52YWxpZFZhbHVlKQ0KKyAgICB7DQor
ICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7DQorDQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9WQUxVRTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRPcGVyYXRpb24pDQorICAg
IHsNCisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7DQorDQorICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgIH0NCisNCisgICAgaWYgKG1PdXRPZk1lbW9y
eSkNCisgICAgew0KKyAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQorDQorICAgICAgICBy
ZXR1cm4gR0xfT1VUX09GX01FTU9SWTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRGcmFt
ZWJ1ZmZlck9wZXJhdGlvbikNCisgICAgew0KKyAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9w
ZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIHJldHVybiBHTF9OT19FUlJPUjsNCit9DQor
DQorR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkNCit7DQorICAgIGlmIChtUmVzZXRT
dGF0dXMgPT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGJvb2wgbG9zdCA9IG1EaXNw
bGF5LT50ZXN0RGV2aWNlTG9zdCgpOw0KKw0KKyAgICAgICAgaWYgKGxvc3QpDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAvLyBTZXRzIG1S
ZXNldFN0YXR1cw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEdMZW51bSBzdGF0dXMgPSBt
UmVzZXRTdGF0dXM7DQorDQorICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpDQor
ICAgIHsNCisgICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0dGFibGUoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsNCisgICAg
ICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorYm9vbCBD
b250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpDQorew0KKyAgICByZXR1cm4gKG1S
ZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOw0KK30NCisNCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
VmFyeWluZ1ZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1v
ZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7
DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUg
PyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsNCit9DQorDQordW5zaWdu
ZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOw0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11
bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0
c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhT
dXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2Ft
cGxlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQz
REZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0DQorew0KKyAgICBpZiAocmVxdWVz
dGVkID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7DQorICAgIH0NCisN
CisgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsNCisgICAgaWYgKGl0ciA9PSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0N
CisNCisgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyArK2kpDQorICAgIHsNCisgICAgICAgIGlmIChpdHItPnNlY29uZFtpXSAmJiBpICE9
IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
dHVybiBpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzT2NjbHVz
aW9uUXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOw0KK30NCisNCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNE
WFQ1VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJl
czsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOw0KK30NCisNCitib29s
IENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0
dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1T
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsNCit9DQor
DQoraW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOw0KK30NCisNCitpbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1h
eFRleHR1cmVMZXZlbDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJl
czsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOw0KK30NCisNCitib29sIENvbnRl
eHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHMzMmJpdEluZGljZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJU
ZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
Ow0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzSW5zdGFuY2luZzsNCit9DQorDQordm9pZCBDb250ZXh0Ojpk
ZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDIuOSBwYWdlIDIyOg0KKyAgICAvLyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVs
ZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRo
ZSBjdXJyZW50IGNvbnRleHQNCisgICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxl
ZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uDQorDQorICAgIGlmIChtU3RhdGUu
YXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGF0dHJpYnV0
ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspDQorICAg
IHsNCisgICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5k
QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSkNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdl
IDg0Og0KKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlm
IGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0
IGFyZQ0KKyAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8NCisNCisgICAgZm9y
IChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAg
ew0KKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCkgPT0gdGV4
dHVyZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdl
IDExMjoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBp
bWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVu
IGl0IGlzDQorICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxl
ZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGlj
aCB0aGlzDQorICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyLg0KKw0KKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0
UmVhZEZyYW1lYnVmZmVyKCk7DQorICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBn
ZXREcmF3RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikNCisgICAg
ew0KKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOw0KKyAg
ICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJl
YWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hU
ZXh0dXJlKHRleHR1cmUpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgLy8gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3Og0KKyAgICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQg
aXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwg
aXQgaXMgYXMgdGhvdWdoDQorICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRl
ZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8u
DQorDQorICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQ0KKyAg
ICB7DQorICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorDQorICAgIGlm
IChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAg
ICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpDQorew0KKyAgICAvLyBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6DQorICAgIC8vIElmIGEgcmVuZGVy
YnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxldGVk
LCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcg0KKyAgICAvLyBoYWQgYmVlbiBleGVj
dXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uDQorDQor
ICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKyAgICB9DQorDQorICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToNCisgICAgLy8gSWYgYSByZW5kZXJi
dWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRo
ZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsDQorICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYg
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVm
ZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQNCisgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhp
cyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4N
CisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAgIHJl
YWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorICAgIH0N
CisNCisgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlciAmJiBkcmF3RnJhbWVidWZmZXIgIT0gcmVhZEZy
YW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmUgKkNvbnRleHQ6
OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpDQorew0KKyAgICBUZXh0dXJl
ICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsNCisNCisgICAgaWYgKHQgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07DQorDQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICB7DQor
ICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
ICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gVEVYVFVSRV8yRA0KKw0KKyAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBUZXh0
dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5DT01QTEVURV9U
RVhUVVJFX0lEKTsNCisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAgICAg
ICAgIHQgPSBpbmNvbXBsZXRlMmQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFr
Ow0KKw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1
YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsNCisNCisgICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigw
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisNCisgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
Q3ViZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQor
DQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gdDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51
bSBkcmF3TW9kZSkNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1
bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsN
Cit9DQorDQorYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpDQor
ew0KKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9UUklBTkdM
RVM6DQorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46DQorICAgICAgY2FzZSBHTF9UUklBTkdM
RV9TVFJJUDoNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGNhc2UgR0xfUE9JTlRTOg0K
KyAgICAgIGNhc2UgR0xfTElORVM6DQorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6DQorICAgICAg
Y2FzZSBHTF9MSU5FX1NUUklQOg0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlcykNCit7DQorICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOw0KKw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVl
WzBdID0gdmFsdWVzWzBdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3Vy
cmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2lu
ZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOw0KKw0KKyAgICBtVmVy
dGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGluZGV4KTsNCit9DQorDQordm9pZCBD
b250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsNCisN
CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOw0K
K30NCisNCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcg0KKy8vIE9FUyBl
eHRlbnNpb25zDQorLy8gRVhUIGV4dGVuc2lvbnMNCisvLyBWZW5kb3IgZXh0ZW5zaW9ucw0KK3Zv
aWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpDQorew0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nID0gIiI7DQorDQorICAgIC8vIE9FUyBleHRlbnNpb25zDQorICAgIGlmIChzdXBwb3J0czMy
Yml0SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZWxlbWVudF9pbmRleF91aW50ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7DQorICAgIC8vbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsNCisNCisgICAgaWYgKHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBv
cnRzRmxvYXQzMlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBvcnRzRmxv
YXQzMkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3QgIjsNCisgICAgfQ0KKw0KKyAgICAvLyBNdWx0aS12
ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVz
KCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNp
b25fcXVlcnlfYm9vbGVhbiAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7DQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF9yb2J1c3RuZXNzICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0K
KyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21w
cmVzc2lvbl9keHQxICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7DQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsNCisNCisgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpDQorICAgIHsNCisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsNCisgICAg
fQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0
ICI7DQorICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpDQorICAgIHsN
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMg
IjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQ0K
KyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2Nv
bXByZXNzaW9uX2R4dDMgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQ1ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsNCisNCisgICAgLy8gT3RoZXIgdmVu
ZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkp
DQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7DQor
ICAgIH0NCisNCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3Ry
aW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsNCisgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6
bnBvcykNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOw0K
KyAgICB9DQorfQ0KKw0KK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpDQorew0KKyAgICBEM0RBREFQVEVS
X0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVy
KCk7DQorDQorICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsNCisgICAgbVJlbmRlcmVy
U3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOw0KKyAgICBtUmVuZGVyZXJTdHJpbmcg
Kz0gIikiOw0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nLmNfc3RyKCk7DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spDQorew0KKyAgICBG
cmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorICAg
IEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisN
CisgICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVmZmVyLT5jb21wbGV0ZW5l
c3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fA0KKyAgICAgICAgIWRyYXdGcmFtZWJ1
ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGludCByZWFkQnVmZmVyV2lkdGggPSBy
ZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQorICAgIGludCBy
ZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKTsNCisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsNCisgICAgaW50IGRyYXdCdWZmZXJIZWlnaHQgPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOw0KKw0KKyAgICBS
RUNUIHNvdXJjZVJlY3Q7DQorICAgIFJFQ1QgZGVzdFJlY3Q7DQorDQorICAgIGlmIChzcmNYMCA8
IHNyY1gxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsNCisgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMTsNCisgICAgICAgIGRlc3RSZWN0LmxlZnQgPSBk
c3RYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7DQorICAgIH0NCisgICAgZWxz
ZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMTsNCisgICAgICAgIGRl
c3RSZWN0LmxlZnQgPSBkc3RYMTsNCisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsN
CisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7DQorICAgIH0NCisNCisgICAgaWYgKHNy
Y1kwIDwgc3JjWTEpDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7
DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsNCisgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0gc3JjWTA7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsNCisgICAgfQ0KKyAg
ICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7DQorICAg
ICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMDsNCisgICAgICAgIHNvdXJjZVJlY3QudG9wID0g
c3JjWTE7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsNCisgICAgfQ0KKw0KKyAgICBS
RUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0Ow0KKyAgICBSRUNUIGRlc3RTY2lz
c29yZWRSZWN0ID0gZGVzdFJlY3Q7DQorDQorICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpDQor
ICAgIHsNCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9u
IGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdA0KKyAgICAgICAgLy8gUGxl
YXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBz
byB0aGUgKnRvcCogb2YgdGhlDQorICAgICAgICAvLyByZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2Fp
bnN0IHNjaXNzb3JZLCByYXRoZXIgdGhhbiB0aGUgYm90dG9tLg0KKyAgICAgICAgaWYgKGRlc3RS
ZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50
IHhEaWZmID0gbVN0YXRlLnNjaXNzb3JYIC0gZGVzdFJlY3QubGVmdDsNCisgICAgICAgICAgICBk
ZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOw0KKyAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgICAgIH0NCisNCisgICAgICAg
IGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lk
dGgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3QucmlnaHQg
LSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7DQorICAgICAgICAgICAg
ZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3Nv
cldpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QucmlnaHQgLT0geERpZmY7
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QudG9wIDwgbVN0YXRlLnNjaXNz
b3JZKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29y
WSAtIGRlc3RSZWN0LnRvcDsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC50b3AgPSBt
U3RhdGUuc2Npc3Nvclk7DQorICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0g
eURpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0
YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgaW50IHlEaWZmID0gZGVzdFJlY3QuYm90dG9tIC0gKG1TdGF0ZS5zY2lzc29yWSArIG1T
dGF0ZS5zY2lzc29ySGVpZ2h0KTsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0
b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsNCisgICAgICAgICAg
ICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxzZTsNCisgICAgYm9vbCBibGl0
RGVwdGhTdGVuY2lsID0gZmFsc2U7DQorDQorICAgIFJFQ1Qgc291cmNlVHJpbW1lZFJlY3QgPSBz
b3VyY2VTY2lzc29yZWRSZWN0Ow0KKyAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lz
c29yZWRSZWN0Ow0KKw0KKyAgICAvLyBUaGUgc291cmNlICYgZGVzdGluYXRpb24gcmVjdGFuZ2xl
cyBhbHNvIG1heSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBmYWxsIG91dCBvZiB0aGUgYm91
bmRzIG9mIA0KKyAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuDQorICAg
IGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhE
aWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7DQorICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ICs9IHhEaWZmOw0K
KyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA+IHJlYWRCdWZmZXJX
aWR0aCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1lZFJlY3Qucmln
aHQgLSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA9
IHJlYWRCdWZmZXJXaWR0aDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlm
ZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkNCisgICAg
ew0KKyAgICAgICAgaW50IHlEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcDsNCisgICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
dG9wICs9IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0
b20gPiByZWFkQnVmZmVySGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBpbnQgeURpZmYgPSBzb3Vy
Y2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsNCisgICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVk
UmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmlt
bWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgPSAwOw0KKyAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAo
ZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQ0KKyAgICB7DQorICAgICAg
ICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkcmF3QnVmZmVyV2lkdGg7DQor
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7DQorICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAo
ZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB5RGlmZiA9IDAg
LSBkZXN0VHJpbW1lZFJlY3QudG9wOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCA9IDA7
DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURpZmY7DQorICAgIH0NCisNCisg
ICAgaWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVmZmVySGVpZ2h0KQ0KKyAgICB7
DQorICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC0gZHJhd0J1ZmZl
ckhlaWdodDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVp
Z2h0Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOw0KKyAgICB9
DQorDQorICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsNCisgICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJlYWRCdWZmZXJI
ZWlnaHQgfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gc291cmNlVHJpbW1l
ZFJlY3QubGVmdCA8IHJlYWRCdWZmZXJXaWR0aCB8fCANCisgICAgICAgIGRlc3RUcmltbWVkUmVj
dC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fA0KKyAg
ICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCBkcmF3
QnVmZmVyV2lkdGggfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IGRl
c3RUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICE9IDAgfHwg
ZGVzdFRyaW1tZWRSZWN0LmxlZnQgIT0gMCkNCisgICAgew0KKyAgICAgICAgcGFydGlhbEJ1ZmZl
ckNvcHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkNCisgICAgew0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8DQorICAg
ICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVI7DQorICAgICAgICBjb25zdCBib29sIHZhbGlkRHJhd1R5cGUgPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1RFWFRVUkVfMkQgfHwNCisgICAgICAg
ICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJV
RkZFUjsNCisgICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fA0K
KyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9y
bWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQo
KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29u
dmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1w
bGVtZW50YXRpb24iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBpZiAocGFydGlhbEJ1ZmZl
ckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7DQorDQorICAgIH0NCisN
CisgICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkpDQorICAgIHsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVM
TDsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsNCisNCisgICAg
ICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1
cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28g
aWYgd2UgaGF2ZQ0KKyAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwg
aXQgd2lsbCBiZSB0aGUgc2FtZSBidWZmZXIuDQorDQorICAgICAgICBpZiAobWFzayAmIEdMX0RF
UFRIX0JVRkZFUl9CSVQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKS0+Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICAgICAg
ICAgIH0NCisNCisgICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7DQorICAg
ICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsNCisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg
IGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3RnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAg
ICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
IGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIg
PSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICAgICAg
ZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAg
ICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIgZGVwdGgg
YW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIp
Ow0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9u
bHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkDQorICAgICAgICB9DQorDQorICAg
ICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAw
KSB8fCANCisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURpc3Bs
YXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3RnJhbWVidWZmZXItPmdldFJlbmRl
clRhcmdldCgpOw0KKw0KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3Ry
ZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNvdXJjZVRyaW1tZWRSZWN0LCANCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJn
ZXQsICZkZXN0VHJpbW1lZFJlY3QsIEQzRFRFWEZfTk9ORSk7DQorDQorICAgICAgICAgICAgcmVh
ZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxl
ZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChibGl0
RGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsN
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2lsLCBOVUxMLCBkcmF3
RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKw0KKyAgICAgICAgICAgIHJlYWRE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBkcmF3RGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6
IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQorICAgICAgICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorVmVydGV4
RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQ0K
K3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklF
UzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xh
cmF0aW9uID0gTlVMTDsNCisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAw
Ow0KKyAgICB9DQorfQ0KKw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNM
X0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2Fj
aGVbaV0udmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQorICAgICAgICAgICAgbVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorfQ0KKw0KK0dMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xh
cmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRy
aWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpy
ZXBlYXREcmF3KQ0KK3sNCisgICAgKnJlcGVhdERyYXcgPSAxOw0KKw0KKyAgICBpbnQgaW5kZXhl
ZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisgICAgaW50IGluc3RhbmNlZEF0dHJp
YnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisNCisgICAgaWYgKGluc3RhbmNlcyA+IDApDQor
ICAgIHsNCisgICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVk
IHRvIEQzRCBzdHJlYW0gMA0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5hY3RpdmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkNCisgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRl
ID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRS
SUJTKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlc1tpXS5kaXZpc29yICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsNCisgICAgICAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAg
IC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQ0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09
IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgRDNEVkVSVEVY
RUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07DQorICAgIEQzRFZFUlRF
WEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOw0KKw0KKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOw0KKw0KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7DQorICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAgICB7DQorICAgICAgICAgICAg
aW50IHN0cmVhbSA9IGk7DQorDQorICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRz
IHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBh
cmUgaW5zdGFuY2VkLg0KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09
IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7DQorICAgICAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApDQorICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0
ZTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIFVJTlQg
ZnJlcXVlbmN5ID0gMTsNCisgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9J
TkRFWEVEREFUQSB8IGluc3RhbmNlczsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0
cmlidXRlc1tpXS5kaXZpc29yOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoc3RyZWFtLCBmcmVxdWVuY3kpOw0KKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdF
bmFibGVkID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tp
XS5zZXJpYWwgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUg
IT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNb
c3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0
ZXNbaV0udmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5z
dHJpZGUpOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0
dHJpYnV0ZXNbaV0uc2VyaWFsOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1d
LnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOw0KKyAgICAgICAgICAgICAgICBtQXBwbGll
ZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Ow0KKyAgICAgICAgICAg
IH0NCisNCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07DQorICAgICAgICAg
ICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsNCisgICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0
cmlidXRlc1tpXS50eXBlOw0KKyAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xN
RVRIT0RfREVGQVVMVDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsNCisgICAgICAgICAgICBlbGVtZW50Kys7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGluc3RhbmNlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgIHsNCisgICAgICAgIGlmIChtSW5z
dGFuY2luZ0VuYWJsZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQz
RERFQ0xfRU5EKCk7DQorICAgICooZWxlbWVudCsrKSA9IGVuZDsNCisNCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQor
ICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtp
XTsNCisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywg
KGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYm
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikNCisgICAgICAgIHsNCisgICAgICAgICAgICBlbnRy
eS0+bHJ1Q291bnQgPSArK21NYXhMcnU7DQorICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERl
Y2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlv
bik7DQorICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb247DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJP
UjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFz
dENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsNCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAo
bVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291bnQpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRp
b24gIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlv
bi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5V
TEw7DQorICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQs
IHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkNCisgICAgICAgIC8vIGFib3V0IGl0Lg0KKyAgICB9
DQorDQorICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVs
ZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsNCisgICAgZGV2
aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOw0KKyAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52
ZXJ0ZXhEZWNsYXJhdGlvbjsNCisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsN
CisNCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOw0KK30NCisNCit2b2lkIFZlcnRleERlY2xhcmF0
aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVkJzW2ld
LnNlcmlhbCA9IDA7DQorICAgIH0NCisNCisgICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7DQorICAg
IG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVk
IHdoZW4gbm90IHVzZWQNCit9DQorDQorfQ0KKw0KK2V4dGVybiAiQyINCit7DQorZ2w6OkNvbnRl
eHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6
Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpDQorew0KKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7DQorfQ0KKw0KK3ZvaWQgZ2xEZXN0cm95Q29u
dGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkNCit7DQorICAgIGRlbGV0ZSBjb250ZXh0Ow0KKw0K
KyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQ0KKyAgICB7DQorICAgICAgICBn
bDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7DQorICAgIH0NCit9DQorDQordm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0
LCBkaXNwbGF5LCBzdXJmYWNlKTsNCit9DQorDQorZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENv
bnRleHQoKQ0KK3sNCisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7DQorfQ0KK30NCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDhk
Y2NmMGYuLjRkNDdjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4RGVjbGFyYXRp
b25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVudW0geyBOVU1f
VkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEKICAgICB7CkBA
IC0yODEsNyArMjgxLDggQEAgY2xhc3MgQ29udGV4dAogCiAgICAgdm9pZCBtYWtlQ3VycmVudChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKLSAgICB2b2lk
IG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5
KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBAIC00OTUsNiAr
NDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJs
ZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdDsK
KyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9y
dHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CkBAIC02MTcs
NiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAg
IGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0
c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAgICAgaW50
IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXggNzMwZmZmYy4u
NzZkNDI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5GcmFtZWJ1
ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURlcHRoYnVm
ZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJlbmRlcmJ1
ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZm
ZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZm
ZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpG
cmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6Omdl
dERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIg
PSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJi
dWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgewor
ICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBG
Qk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGgg
ID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAgICAgd2lk
dGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigw
LCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAgICAgICBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJU
eXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsyNzIsMTEg
QEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6
Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAgICBpbnQg
c2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwogCiAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEgKzMwMSwz
OCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29s
b3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNk
Zm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8IAot
ICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXRE
M0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRl
eHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZv
cm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8
fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYg
IWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVzOjpJc0Rl
cHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9y
bWF0KGQzZGZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CiAKICAgICAgICAgd2lkdGggPSBj
b2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdl
dEhlaWdodCgpOwogICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9
IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOwpA
QCAtMzAyLDExICszNDAsNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAK
ICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgaWYg
KG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7ICAgLy8gUmVxdWlyZXMgR0xf
T0VTX2RlcHRoX3RleHR1cmUKLSAgICAgICAgfQotCiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0
RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBpZiAoIWRlcHRoYnVmZmVyKQpAQCAtMzE5LDE5ICsz
NTIsNDQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gZGVwdGhi
dWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1cmUgYXR0YWNobWVu
dHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChk
M2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2lu
Z0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAg
ICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBl
bHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsK
QEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQog
CiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAg
aWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQot
CiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKICAgICAgICAg
aWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAw
KQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAg
ICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8
fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7
CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNE
Rm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBj
b21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNk
Zm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdB
dHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWln
aHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7
CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQog
ICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRo
ZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1
cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3Rl
bmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZl
ciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAg
ICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5j
aWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBh
dCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0
YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApAQCAtNDksNiAr
NDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZm
ZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVm
ZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3Ji
dWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0g
Z2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVy
CiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5k
ZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBhNWUzOGJmLi5m
MjhhOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNywyMjYxICsxOCw4NSBAQAog
CiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQz
RENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KIG5hbWVzcGFjZSBnbAogewot
dW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLWNvbnN0IGNoYXIgKmZh
a2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsKLSAg
ICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlw
ZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkp
LCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5h
bFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5
dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLX0K
LQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19Ci0KLWJvb2wg
VW5pZm9ybTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFy
XyIpID09IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCkgCi0gICAgOiBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1l
bnQoZWxlbWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9ncmFtOjpQcm9ncmFtKFJlc291
cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1h
bmFnZXIpLCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKLXsKLSAgICBt
RGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsK
LSAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAg
ICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQotICAgIG1EZWxldGVTdGF0
dXMgPSBmYWxzZTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0KLVByb2dyYW06On5Qcm9ncmFt
KCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxM
KQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1GcmFnbWVudFNo
YWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRF
WF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleFNo
YWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+YWRk
UmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GcmFn
bWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBtRnJhZ21lbnRT
aGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFk
ZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCi0g
ICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7
Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICB9Ci0g
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAi
QzpcXGZha2VwYXRoIjsKIAotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0
QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNoYWRl
ciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Cit1bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlBy
b2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5k
aW5ncygpCiB7Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7CiB9CiAKLUlEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5n
czo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwg
Y29uc3QgY2hhciAqbmFtZSkKK0luZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCiB7
Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwotICAgIH0KIH0K
IAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUp
CitJbmZvTG9nOjp+SW5mb0xvZygpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9
PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXgg
Pj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAg
cmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KIAotLy8gUmV0dXJucyBv
bmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dy
YW06OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK2ludCBJbmZvTG9nOjpn
ZXRMZW5ndGgoKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBpZiAoIW1JbmZvTG9n
KQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2Vk
UGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBy
ZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci19Ci0KLS8vIFJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcg
dG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hh
ZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNh
bXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgp
Ci17Ci0gICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsK
LQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNp
emVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0KLSAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxU
ZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYm
IGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRl
eHR1cmVVbml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUg
dGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAotLy8g
aW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBz
aGFkZXIpLgotVGV4dHVyZVR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgc3dpdGNoICh0
eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7
Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAg
ICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAg
Y2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVv
ZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVCht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKLX0KLQotR0xpbnQgUHJvZ3Jh
bTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
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
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0ZMT0FUX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0g
PSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFsz
XSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JP
T0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gc3RybGVu
KG1JbmZvTG9nKSArIDE7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJv
Z3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdikKK3ZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMz
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAg
aW50IGluZGV4ID0gMDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICBpZiAobUluZm9Mb2cpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSBzdGQ6
Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1l
bWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwogICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAg
ICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICAgICAgaW5m
b0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9pZCB0
cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBp
bnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKLSAgICBpbnQg
Y29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKLQotICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0gICAgewotICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChp
bnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAg
IH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hl
aWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAg
ICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRh
cmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxv
YXQpICogMTYpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gMTY7Ci0gICAgICAgIHZhbHVlICs9IDE2OwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8
Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXpl
b2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAgICAgICAgICAg
IHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZB
TFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2
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
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAq
IHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAg
IC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2Ug
ZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRl
cyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlm
ICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9z
ZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0
LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZv
cm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRD
b3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3Jt
Q29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50Owot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5
KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBz
aXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3Vn
aAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBV
bmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1
ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0gICAgICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAg
ICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQs
NCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFs
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9h
dCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRl
eCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtVW5p
Zm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBsaWVzIGFsbCB0
aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5
IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0ZDo6
dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBt
VW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7
Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBs
eVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlm
b3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3Jt
LCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRf
VkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3Jt
NGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVk
IHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFtOjpj
b21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQz
RFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAg
ewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0gICAg
VUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAocGVy
ZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLSNp
ZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFU
SU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQ
YXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsg
c291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwot
ICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCks
IHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxh
Z3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJjZVRl
eHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0gICAg
SUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21waWxl
KGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmls
ZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVz
c2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciop
ZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBwZW5kVG9JbmZv
TG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwotICAg
ICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVzc2FnZS0+UmVs
ZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFi
bGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSks
IGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0vLyBQYWNrcyB2
YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0
aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRp
eCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFy
eWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbTo6cGFja1Zh
cnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250ZXh0ICpjb250
ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNv
bnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
LSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAq
IHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5
aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5Kysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4
XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0g
PT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFy
eWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6
IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQg
Y29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2Vb
eF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0p
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAg
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJu
IHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQot
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsy
XSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1W
ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKLSAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
ZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0gICAgICAgIGZy
YWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gbVZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0
eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAg
Ly8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlp
bmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGlu
dCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAocmVnaXN0ZXJz
IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0
ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4
dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09IG1h
eFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAg
ewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8g
c3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCi0g
ICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9
PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0
LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlw
ZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVu
dCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRw
dXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1
dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNo
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFy
eWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5j
X3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVY
Q09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAgICAg
ICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUt
PnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0
ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCAr
PSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
bVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVy
dGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENP
T1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5k
ZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIG1W
ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7
Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAgICAg
ICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0g
PyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIg
KyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIo
cmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNl
c1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCAr
PSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIlZT
X09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4i
OwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0g
IjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkg
ICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5z
cG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBk
ZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAg
IG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtc
biIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBWU19P
VVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24u
dztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYgKG1WZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAi
ICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwot
ICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsK
LSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9z
aXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsK
LSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIo
cik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAg
IC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
XVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5n
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9ICJ4
IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBtVmVy
dGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJy
YXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0i
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAg
ICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
RnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7
Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0g
ICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9
Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAg
ICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAv
IGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbTMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhlIHJlbmRlciB0
YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsg
MC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
ZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUg
dmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29y
ZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSAr
IGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtUGl4ZWxITFNM
ICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICog
ZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwg
KGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4w
KSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAo
dmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAq
IHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2
YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAi
ID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBt
UGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgot
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQg
b3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAg
ICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wgY29k
ZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFy
eWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUg
YXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZvcm1z
Ci12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAgaWYgKCFtRnJh
Z21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRl
eFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBtVmVydGV4
SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1Zhcnlpbmdz
KCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4
dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7Ci0gICAgY29u
c3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBj
b21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25z
dGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmlu
YXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7
Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAg
SFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JE
Kil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsK
LSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFi
bGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NF
RURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOwot
ICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBO
VUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhF
eGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25z
dGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFi
bGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxy
ZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJlIHJl
c2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9u
Ci0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0g
Z2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7Ci0g
ICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9G
cm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIG1MaW5rZWQg
PSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRGV0ZXJtaW5l
cyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4
IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2lu
KCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmli
dXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5n
KGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1M
aW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUg
c2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRlICgl
cykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19z
dHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0
aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5r
IGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAo
QXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5l
bmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRy
aWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09
IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0g
ICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVz
ZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlm
IChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVS
VEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNf
c3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGlu
awotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJs
ZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBh
dHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyAp
Ci0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0lu
ZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBpbnQg
cm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsg
cisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRl
eCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhf
QVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGlu
Z1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5k
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMo
SUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFOVFRB
QkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05TVEFOVF9ERVND
IGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQot
ICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5H
ZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERl
c2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50SGFuZGxlLCBj
b25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFkZHMgdGhl
IGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8g
dGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZv
cm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25z
dCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3Rh
bnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNv
bnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxl
UFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVS
Q1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5k
ZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNv
bnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0
YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJF
IDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJW
ZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaChj
b25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NUUlVD
VDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9
IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmll
bGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmll
bGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwg
ZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVz
Y3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7
Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBT
LT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3Jp
cHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSAr
ICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oZmll
bGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5h
bWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNhc2UgRDNEWFBD
X1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAgICAgY2FzZSBE
M0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25zdGFudERlc2Ny
aXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIFVu
aWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1l
KTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50IGxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51bSB0eXBlID0g
dW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplQ29uc3Rh
bnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQUyk7Ci0gICAg
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMsIG1Db25zdGFu
dFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNp
Z25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsK
LSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBp
LCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9y
bSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25z
dGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQz
RFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
MiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RY
UFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhM
U0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8i
KSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
c3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcg
Jl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICByZXR1
cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5jb21wYXJlKDAs
IDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigzKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5
VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lk
dGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09O
U1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvdW50IDw9
IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0
OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0g
KHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYm
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgIHsKLSAg
ICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBp
bnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09M
ID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBjb3B5
Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50
KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMp
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
ZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0g
ICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAg
ICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5k
ZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rlcklu
ZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50
IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4OwotCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAg
ICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBm
bG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOwotCi0gICAg
ICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwg
Y291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjph
cHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2
ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2
WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9h
dCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsKLSAg
ICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQg
KnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICBpZiAobGVuZ3RoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OwogICAgIH0KIH0KIAog
Ly8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KIC8v
IFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRo
ZSB3YXJuaW5nIG9yIGVycm9yIAogLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1
cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3Jh
bTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit2b2lkIElu
Zm9Mb2c6OmFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIHN0ZDo6
c3RyaW5nIG1zZyhtZXNzYWdlKTsKIAogICAgIHNpemVfdCBmb3VuZDsKICAgICBkbwogICAgIHsK
LSAgICAgICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGZvdW5kID0gbXNn
LmZpbmQoZ19mYWtlcGF0aCk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKICAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZmFrZXBh
dGgpKTsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGdfZmFrZXBhdGgpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
OwogCi0gICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkpOworICAgIGFwcGVu
ZCgiJXNcbiIsIG1zZy5jX3N0cigpKTsKIH0KIAotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9M
b2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikKIHsKICAgICBpZiAoIWZvcm1hdCkKICAgICB7CkBAIC0yMzA0LDcg
KzEyOSw3IEBAIHZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQogICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQordm9pZCBJ
bmZvTG9nOjpyZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAgLTIzMTMsOTkg
KzEzOCwxNzAgQEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0KIH0KIAotLy8g
UmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSBy
ZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBk
ZXN0cm95KQorUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWlu
dCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBt
U2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJl
aW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAg
ICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFnbWVudFNoYWRl
ciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5hcnkg
PSBOVUxMOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291bnQgPSAwOwor
fQogCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmso
dHJ1ZSk7CiAKLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZlcnRleFNoYWRl
ciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+
cmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICBpZiAo
bUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAg
IG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlmIChtQ29uc3Rh
bnRUYWJsZVBTKQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7
CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewot
ICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRh
YmxlUFMgPSBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlVlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFk
ZXI7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAgICBlbHNlIGlm
IChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMg
PSBOVUxMOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXIg
PSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRS
ZWYoKTsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7
CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewot
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAgIG1T
ZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIgIT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsgaW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAg
ICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5n
ZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJz
UFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9
IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBj
b25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRT
aGFkZXIgPyAxIDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQgQXR0cmlidXRl
QmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIg
Km5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgIHsKLSAg
ICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAgfQorfQorCit2
b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNo
YXIgKm5hbWUpCit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlv
bihpbmRleCwgbmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRl
eCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29t
cGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBw
aW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFt
OjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1JbmZvTG9n
LnJlc2V0KCk7CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIG1Qcm9ncmFt
QmluYXJ5ID0gbmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+bGlu
ayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhT
aGFkZXIpKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAg
IG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwogICAgIH0KK30K
IAotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24g
PSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50
c09yTGluZXNMb2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1
dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAgIGZvciAoaW50
IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKysp
CisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFt
ZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtVW5pZm9y
bUluZGV4LmNsZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVsSExTTC5jbGVh
cigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9i
amVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3Ry
dWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYgKGRl
c3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlmICht
RnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAg
fQogCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOworICAgICAg
ICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRl
ci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAg
IH0KKyAgICB9CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3Jh
bUJpbmFyeSA9IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKK1By
b2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHJldHVybiBt
TGlua2VkOworICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQcm9ncmFtOjpp
c1ZhbGlkYXRlZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CisgICAg
dW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7CiB9CiAK
IHZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAgdW5zaWduZWQg
aW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5n
dGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9n
KSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKIH0KIAogdm9p
ZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cp
Ci0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsK
LSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhd
ID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0
aCA9IGluZGV4OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxl
bmd0aCwgaW5mb0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdM
c2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCkBAIC0yNTAz
LDE1MiArMzc2LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkg
bWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlCiAKIHZvaWQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAg
ICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3Rp
dmVBdHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChh
dHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsr
KQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
YWN0aXZlQXR0cmlidXRlKys7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRy
aWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQot
Ci0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGNvbnN0IGNo
YXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0K
LSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1
ZnNpemUgLSAxXSA9ICdcMCc7Ci0KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgaWYgKGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihu
YW1lKTsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAg
KnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKLQotICAgICp0
eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7CisgICAgICAgICp0eXBlID0g
R0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOworICAgIH0KIH0KIAogR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQogewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0
eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5k
ZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5k
ZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOwotICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
c2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGlu
dGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAg
IHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBt
VW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAg
IHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJk
eF8iKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICAg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXpl
LCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIEFTU0VSVCh1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAg
ICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5h
bWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAg
ICBpZiAoYnVmc2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBd
IjsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwogICAgICAgICB9CiAKLSAgICAgICAgc3Ry
bmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6
ZSAtIDFdID0gJ1wwJzsKLQogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAg
ICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAg
ICAgICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlT
aXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7CisgICAgICAgICpz
aXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgIH0KIH0KIAogR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQgPSAwOwotCi0g
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3Jt
czsgdW5pZm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkK
IHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4
ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlm
IChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21w
YXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3Ro
ID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAg
ICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlsw
XSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5n
dGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5
LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZv
aWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKQEAgLTI2NjMsMTYxICs0ODAsMjggQEAgYm9v
bCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0CiAKIHZvaWQgUHJvZ3JhbTo6
dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAgIG1JbmZvTG9nLnJlc2V0KCk7
CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1
bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgICAgICBtUHJv
Z3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0
cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVy
cyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBp
biBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1l
Ci0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9n
cmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJh
eXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJv
ci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwot
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1
cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2Yg
Y29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICgl
ZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlw
ZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2Ft
cGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhj
ZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4
dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVu
aXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0
byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0u
dGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbUluZm9Mb2cu
YXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOwogICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dyYW06OmluaXRpYWxpemVDb25z
dGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVnaXN0ZXJJbmZv
ICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQorYm9vbCBQcm9ncmFtOjpp
c1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRh
YmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsK
LSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAg
IFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNv
bnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlw
dGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
cmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7Ci0g
ICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNv
dW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVkKCk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gMDsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRp
b247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4Q29v
cmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0K
LUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpn
ZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xv
Y2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAppbmRl
eCA2MTgzMGM2Li4yNDQ3MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUFJP
R1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgog
I2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8c2V0PgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDM2IEBAIGNsYXNzIFJl
c291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVydGV4U2hhZGVy
OwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9y
bQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOwotCi0gICAgflVuaWZvcm0o
KTsKLQotICAgIGJvb2wgaXNBcnJheSgpOwotCi0gICAgY29uc3QgR0xlbnVtIHR5cGU7Ci0gICAg
Y29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCBz
dGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCi0gICAgY29uc3QgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0aDsK
IAotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKK2NsYXNzIEF0dHJp
YnV0ZUJpbmRpbmdzCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncygpOworICAg
IH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsK
LSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleDsKLSAg
ICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVM
b2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRy
aWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIFJlZ2lz
dGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7CisgIHByaXZhdGU6CisgICAgc3RkOjpz
ZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107CiB9
OwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2Yg
dW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgorY2xhc3Mg
SW5mb0xvZwogewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUs
IHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICBwdWJsaWM6Cisg
ICAgSW5mb0xvZygpOworICAgIH5JbmZvTG9nKCk7CiAKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRMb2coR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworCisgICAgdm9pZCBhcHBlbmRTYW5pdGl6
ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciAqaW5m
bywgLi4uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEluZm9Mb2cpOworICAgIGNoYXIgKm1JbmZvTG9nOwogfTsKIAogY2xhc3Mg
UHJvZ3JhbQpAQCAtNzQsNDUgKzY2LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGRldGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7
Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0KICAgICB2
b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUp
OwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAg
ICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQg
Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1w
bGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRp
b24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwot
ICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
LSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4
RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZy
b250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2Nh
dGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBh
cHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlua2VkKCk7
CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
OworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGludCBnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0dGFjaGVk
U2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJz
KTsKQEAgLTEzMiw5MCArOTEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgaXNGbGFnZ2Vk
Rm9yRGVsZXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICBib29sIHZh
bGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOwogICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBj
b25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAotICAgIHN0YXRp
YyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7
ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRl
Y29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFk
aW5nIHVuZGVyc2NvcmUKLQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihQcm9ncmFtKTsKIAotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFy
ICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFu
dFRhYmxlKTsKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAKLSAgICBp
bnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSk7Ci0gICAgYm9vbCBs
aW5rVmFyeWluZ3MoKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoKTsKLSAgICBpbnQgZ2V0
QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0KLSAgICBib29sIGxp
bmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotICAgIGJvb2wg
ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAi
Iik7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgVW5pZm9ybSAq
Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtbmZ2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgYXBwbHlV
bmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0z
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVj
dG9yKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0KLSAgICB2b2lk
IGluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9y
bTo6UmVnaXN0ZXJJbmZvICpycywgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsK
LQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2Up
OwotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7Ci0gICAg
dm9pZCByZXNldEluZm9Mb2coKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJp
YWwoKTsKIAotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgRnJhZ21lbnRTaGFk
ZXIgKm1GcmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAK
LSAgICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOwotICAgIHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNM
OwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3Rh
bnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25z
dGFudFRhYmxlVlM7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwog
Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhf
QVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAg
IHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAgICAgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsK
LSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9JTUFHRV9VTklU
U107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgR0x1aW50
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZv
cm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKLSAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OwotICAgIFVuaWZv
cm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxvY2F0aW9u
OwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4Q29vcmRMb2NhdGlv
bjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RnJv
bnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247Ci0KLSAg
ICBib29sIG1MaW5rZWQ7CisgICAgUHJvZ3JhbUJpbmFyeSogbVByb2dyYW1CaW5hcnk7CiAgICAg
Ym9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3Jh
bSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLSAgICBjaGFyICptSW5mb0xv
ZzsKLSAgICBib29sIG1WYWxpZGF0ZWQ7CiAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50Owog
CkBAIC0yMjUsNiArMTE4LDggQEAgY2xhc3MgUHJvZ3JhbQogCiAgICAgUmVzb3VyY2VNYW5hZ2Vy
ICptUmVzb3VyY2VNYW5hZ2VyOwogICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOworCisgICAgSW5m
b0xvZyBtSW5mb0xvZzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFjMjhlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0wLDAgKzEsMjQ4
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhl
IGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4z
IHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPHN0cmluZz4K
KworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmlu
ZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK3N0ZDo6c3RyaW5nIHN0cihpbnQg
aSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5p
Zm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1C
aW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7
CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsK
KyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAw
LCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7
CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAg
ICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxv
Y2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25l
ZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJp
bmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgo
aW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1E
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsK
KyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsK
KworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGlu
ZGV4KyspCisgICAgeworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2Ft
cGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2UgPSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAg
bUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOwor
ICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24g
PSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uID0gLTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sK
KyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlm
IChtQ29uc3RhbnRUYWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVs
ZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVu
aWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsK
KyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorfQorCitJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJp
bmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7
CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1
dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1w
bGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5n
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1Q
TEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4
dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0
dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0Owor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBl
IGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4
dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0K
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAg
ICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFy
Z2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1h
dHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3Jj
V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRh
cmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAg
dGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0g
OTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
X0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1F
eHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNb
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsg
aW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tp
bmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlm
b3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Cit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1V
bmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsK
KyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzog
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZv
cm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9W
RUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQg
c2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5h
cnk6OmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBj
b25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQor
eworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBz
b3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8
PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQz
RENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmlu
ZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6
c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIp
ICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3Ry
KCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxv
YiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwor
ICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBnX2Zha2VwYXRoLCBO
VUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNz
YWdlKTsKKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFy
ICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigp
OworCisgICAgICAgIGluZm9Mb2cuYXBwZW5kU2FuaXRpemVkKG1lc3NhZ2UpOworICAgICAgICBU
UkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisg
ICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBO
VUxMOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0g
RDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5h
cnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOworCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBiaW5hcnkt
PlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4g
YmluYXJ5OworfQorCisvLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdp
c3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3Vh
Z2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQorLy8gUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2Vz
ZnVsCitpbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
KQoreworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgaW50
IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7
CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dD
b3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7CisgICAgICAgIGludCBtID0gVmFy
aWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisKKyAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAt
IG4gJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
IGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5n
LT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7
IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxh
YmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4g
JiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFj
a2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHgg
PCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0
OyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSAr
PSBwYWNraW5nW3ldW3hdID8gMCA6IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNw
YWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5n
VmVjdG9yczsgcisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFwYWNraW5nW3JdW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSByOyB5IDwgciArIG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZh
cnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOworCisgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5n
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGlu
dCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1ty
XVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5m
b0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIp
Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFy
eWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAg
ICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0K
KworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2
dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhl
IHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZF
Q1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlpbmdz
KGluZm9Mb2csIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMg
PCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRl
IHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0
ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0
LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4
VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3Vw
cG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7
IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91
dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0
LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUg
IT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVy
dGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWlu
ZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcg
PSBpbnB1dC0+cmVnOworICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsK
KworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBk
b2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsK
KworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rk
OjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsK
KworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAi
OyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVB
dHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJ
bmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291
bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgor
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09V
VFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0g
MDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9
IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0g
PyAyIDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVn
aXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0
cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAg
IH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7
CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtc
biI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJh
eTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigp
OyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAg
ICAgICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZl
cnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBp
eGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBpeGVsU2l6ZS55
ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9u
Lnc7XG4iOworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBj
bGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1
dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
KyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIG91dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJl
ZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5n
cworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVsw
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaGFyZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5n
W3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAw
OiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFy
eWluZy0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsg
c3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAg
ICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVU
XG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7
XG4iOworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0K
KworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAg
ICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIK
KyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAg
ICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1
dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhl
IHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBD
b250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29y
ZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsg
ZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBpeGVsSExTTCAr
PSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4
X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7CisgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29v
cmQueTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFj
aW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBk
eF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDog
KGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIo
aikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xf
bWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdz
ICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFm
cmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29t
cGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6
OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6
c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlmICgh
bGlua1ZhcnlpbmdzKGluZm9Mb2csIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFk
ZXIsIHZlcnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2
ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAi
IDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBC
bG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgdmVydGV4SExTTC5j
X3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxv
YiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJp
bmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4
ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5
LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAo
dmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVz
dWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVs
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAg
IHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYg
bVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmli
dXRlcyhpbmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNo
YWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9G
UkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVW
UykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMg
YWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJl
IHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0
aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7
CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJk
eF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRl
eHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMg
dGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBz
dHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGlu
Z3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhT
aGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJp
bmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBp
ZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5l
bXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2
ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAq
YXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8g
Zml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNl
ZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJp
bmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAg
IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0
cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBh
dmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93
cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4
ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0
aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmli
dXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAw
OyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQorICAgIHsKKyAgICAgICAg
aW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOworICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZh
cmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEp
OworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhD
b25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQoreworICAgIEQzRFhDT05TVEFOVFRBQkxFX0RF
U0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOworCisgICAgY29uc3RhbnRUYWJsZS0+R2V0RGVz
YygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNv
bnN0YW50SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9u
LkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgRDNEWEhBTkRMRSBj
b25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5k
ZXgpOworCisgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Cisg
ICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFk
ZXIsIGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4g
dGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVybnMgdHJ1
ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0Mg
JmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgaWYgKGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBEM0RYSEFORExFIHBzQ29u
c3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFu
dERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0g
bUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlw
dGlvbi5OYW1lKTsKKworICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1Q
TEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVy
SW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBt
Q29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NV
QkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2Vk
VmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0
ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
VmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2go
Y29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19TVFJV
Q1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXgg
PSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZp
ZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxk
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZp
ZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUs
IGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERl
c2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAx
OworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQ
Uy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2Ny
aXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkg
KyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGlu
Zm9Mb2csIHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25z
dGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoK
KyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xV
TU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVmaW5lVW5p
Zm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0
aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVV
bmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5pZm9ybSAqdW5p
Zm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOworCisgICAg
aWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50
eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBkZWxldGUgdW5p
Zm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIp
IHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc2hhZGVyID09
IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24p
OworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICByZXR1cm4gdW5pZm9y
bS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9y
bSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAx
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7
ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2Nh
dGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9y
cyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8y
RCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBU
X0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3Mg
PT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGlzIG1ldGhvZCBuZWVk
cyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFy
eTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgaWYg
KG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OnVuZGVj
b3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUgZmllbGQg
ZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9zID0gbmFtZS5m
aW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgbmFt
ZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGxlYWRp
bmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykKKyAgICB7CisgICAgICAgIHJl
dHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5jb21wYXJlKDAs
IDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDMpOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojph
cHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50
IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09M
X0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rv
cltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEu
MGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMu
Ym9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZv
cm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6
IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49
IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAgaW50IGNv
cHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291
bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5U
Uyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAp
CisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29s
SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3Rh
bnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCwg
Ym9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQor
Citib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJ
bmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
KyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBp
eGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3Qg
ZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAg
ICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlm
b3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2Ft
cGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZs
b2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBhcHBseVVu
aWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJU
KGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVj
dG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxv
YXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7
CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0
b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMp
OworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9y
W2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwg
KGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBhcHBseVVuaWZv
cm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKK3sKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgs
IChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7
CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAg
eworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0
ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQoreworICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCisgICAgdW5zaWduZWQg
aW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKKyAg
ICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlKyspCisgICAgeworICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsr
OworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNo
YXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7CisK
KyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1
ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
ICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCisKKyAgICAq
dHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOworfQorCitHTGludCBQcm9n
cmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCit7CisgICAgaW50IGNvdW50ID0g
MDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAo
IW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVu
Z3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4TGVuZ3RoID0g
c3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5n
dGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1h
eExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwg
dW5pZm9ybXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IHVuaWZvcm07CisgICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jt
cy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9y
bV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBhY3RpdmVVbmlmb3JtKys7CisgICAgfQorCisgICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9y
bXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlm
b3JtQ291bnQoKQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgc3RkOjpz
dHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOworCisgICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3Ry
aW5nICs9ICJbMF0iOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcu
Y19zdHIoKSwgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKwor
ICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3Ry
bGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPmFycmF5U2l6ZTsKKworICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBl
OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQorewor
ICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5p
Zm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVu
aWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZv
cm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwg
MywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSAoaW50
KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOworICAgICAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4
TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBh
cHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCZpbmZvTG9nKSkKKyAg
ICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5h
cnk6OnZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZykKK3sKKyAgICAvLyBpZiBhbnkg
dHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywg
YnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhp
cyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWws
IGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJ
TlZBTElEX09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkK
KyAgICB7CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVy
UmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0u
bG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+
PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0p
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBw
ZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0
dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBp
ZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1
bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
IiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5
cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3Rpbmcg
dHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1T
YW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVw
dGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0
aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhDb29yZExv
Y2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKK30K
KworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhQ
b2ludHNPckxpbmVzTG9jYXRpb247Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMWU5YzVlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCkBAIC0wLDAgKzEsMjEx
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQ
cm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2Ug
MjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9QUk9HUkFNX0JJTkFSWV9IXworCisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNpbmNsdWRlIDxk
M2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2NsYXNzIFZlcnRl
eFNoYWRlcjsKKworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVy
IHVuaWZvcm0KK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKworICAgIH5V
bmlmb3JtKCk7CisKKyAgICBib29sIGlzQXJyYXkoKTsKKworICAgIGNvbnN0IEdMZW51bSB0eXBl
OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCisgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQorICAgIGNvbnN0
IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAg
IGJvb2wgZGlydHk7CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCisgICAgeworICAgICAgICBS
ZWdpc3RlckluZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDRJbmRleCA9IC0xOwor
ICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7CisgICAgICAgICAgICBib29sSW5kZXggPSAt
MTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
U2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19CT09MOiAgICBi
b29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9hdDRJbmRleCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQz
RFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
SW5kZXg7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJDb3Vu
dCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyQ291bnQpOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmbG9hdDRJbmRleDsK
KyAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50IGJvb2xJbmRleDsKKworICAg
ICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKKyAgICB9OworCisgICAgUmVnaXN0ZXJJbmZvIHBzOwor
ICAgIFJlZ2lzdGVySW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCitzdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisKKyAg
ICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50OworICAgIHVuc2ln
bmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBsaW5raW5nIGEg
cHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUgcGFzc2VkIHRvIFByb2dyYW1C
aW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5Cit7CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtQmlu
YXJ5KCk7CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0
ZXhTaGFkZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFy
ICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwor
CisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBl
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIEdMaW50
IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7CisKKyAgICBHTGludCBnZXRV
bmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBi
b29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVu
aWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVu
aWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
KyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKKworICAg
IEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhE
ZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKKyAgICBH
TGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7
CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisKKyAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKyAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRl
Q291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwor
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZyk7
CisgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOworICAgIGJvb2wg
aXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0
dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJz
Y29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKKworICAg
IElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFu
dFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwor
ICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhl
bEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua0F0dHJp
YnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2cs
IEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAg
Ym9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0
IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVh
dGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
OworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAgIElEaXJlY3Qz
RERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4
ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7
CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgorICAgIElEM0RY
Q29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUg
Km1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhf
VkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJ
QlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0aXZlOwor
ICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsK
KyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1z
OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7
CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJh
bmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhD
b29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2Nh
dGlvbjsKKworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdM
RVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3Rl
bmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5k
ZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdl
dCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAg
IG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5S
ZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQor
CisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQg
Zm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBI
ZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sK
KyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sK
KyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJl
dHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAg
ICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1B
VCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAorewor
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9
CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8v
Ly8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRh
cmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAg
ICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1h
aW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBS
ZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1
cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0
dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJl
Zihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVy
ZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94
eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpn
ZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1H
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdp
ZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0
dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVy
YnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgp
IGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1w
bGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBs
ZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJi
dWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVy
KEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9i
amVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIy
OCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRP
YmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEg
KzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0z
NTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1
MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRo
U3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBU
ZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBS
ZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZl
cjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNl
CiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVy
ZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBh
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNz
IFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5k
aW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1
cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQorewor
ICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVp
IGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0
OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVp
IGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlh
bCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJl
Q3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4
IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9n
KSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAg
ICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9
ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291
cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5k
ZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAg
ICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAg
aWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hh
ZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmlu
ZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxW
YXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dy
YW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNo
YWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcg
KzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsK
IAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9n
cmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBW
ZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmlu
ZGV4IDI5MTc3ZDIuLjVjY2Y4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAtMSwzMDkwICsxLDI5MDkgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBj
bGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3Vi
ZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kIHJlbGF0ZWQKLS8vIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgPGQzZHg5dGV4Lmg+Ci0KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW50cmluLmg+Ci0KLSNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFsID0gMTsKLQot
c3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUIHx8Ci0gICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpCi0g
ICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEQzREZNVF9EWFQ1OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0ZM
T0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOwotICAgIH0K
LSAgICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEQzREZNVF9BMTZCMTZHMTZSMTZGOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0xVTUlO
QU5DRSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBEM0RGTVRfQThMODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0g
R0xfUkdCKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4Owot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1zdGF0aWMgYm9vbCBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAg
ICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2Ug
RDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW1hZ2U6OkltYWdlKCkKLXsKLSAgICBtV2lk
dGggPSAwOyAKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtRm9ybWF0ID0gR0xfTk9ORTsKLSAgICBt
VHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0KLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBt
RGlydHkgPSBmYWxzZTsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAg
bUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTo6fkltYWdlKCkKLXsKLSAg
ICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotYm9vbCBJbWFnZTo6cmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFzZSkKLXsKLSAg
ICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8Ci0g
ICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8Ci0gICAgICAgIG1UeXBlICE9IHR5cGUgfHwKLSAg
ICAgICAgZm9yY2VSZWxlYXNlKQotICAgIHsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAg
ICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7Ci0gICAgICAg
IG1UeXBlID0gdHlwZTsKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdp
bGwgYmUgdXNlZAotICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBl
KG1Gb3JtYXQsIG1UeXBlKTsKLQotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3VyZmFjZSA9IE5V
TEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQotewotICAgIGlmKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJlY3QzRFRl
eHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3Vy
ZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RF
TU1FTTsKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAg
ICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGgg
PSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7Ci0gICAg
ICAgIGlmIChJc0NvbXByZXNzZWQobUZvcm1hdCkgJiYgKG1XaWR0aCAlIDQgIT0gMCB8fCBtSGVp
Z2h0ICUgNCAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpc011bHQ0ID0gZmFs
c2U7Ci0gICAgICAgICAgICBpbnQgdXBzYW1wbGVDb3VudCA9IDA7Ci0gICAgICAgICAgICB3aGls
ZSAoIWlzTXVsdDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdFdpZHRo
IDw8PSAxOwotICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQgPDw9IDE7Ci0gICAgICAgICAg
ICAgICAgdXBzYW1wbGVDb3VudCsrOwotICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0V2lkdGgg
JSA0ID09IDAgJiYgcmVxdWVzdEhlaWdodCAlIDQgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291bnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVU
ZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVM
TCwgZ2V0RDNERm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFj
ZSk7Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBtU3VyZmFj
ZSA9IG5ld1N1cmZhY2U7Ci0gICAgbURpcnR5ID0gZmFsc2U7Ci0gICAgbUQzRFBvb2wgPSBwb29s
VG9Vc2U7Ci19Ci0KLUhSRVNVTFQgSW1hZ2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJl
Y3QsIGNvbnN0IFJFQ1QgKnJlY3QpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0KLSAgICBpZiAobVN1cmZhY2UpCi0g
ICAgewotICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVj
dCwgMCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdl
Ojp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OmlzUmVuZGVyYWJsZUZvcm1hdCgp
IGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdAot
ewotICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVl
biByZWRlZmluZWQgZmlyc3QKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2Fs
bGVyCi0gICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOwotCi0gICAgcmV0
dXJuIG1EM0RGb3JtYXQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6Z2V0U3VyZmFj
ZSgpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJmYWNlOwotfQot
Ci12b2lkIEltYWdlOjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBEM0RYTG9hZFN1cmZhY2VG
cm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxMLCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNE
WF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci0K
LSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsK
LSAgICBBU1NFUlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBtU3VyZmFj
ZSA9IHN1cmZhY2U7Ci0gICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci19Ci0KLXZvaWQgSW1hZ2U6
OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKLQotICAg
IGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCBy
ZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IG1IZWlnaHQpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJv
bVN1cmZhY2UoZGVzdFN1cmZhY2UsIE5VTEwsICZyZWN0LCBzb3VyY2VTdXJmYWNlLCBOVUxMLCAm
cmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBi
ZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCBy
ZWN0LnRvcH07Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRh
dGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsKLSAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlv
ZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBp
bnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBv
dXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KLXZvaWQgSW1hZ2U6OmxvYWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlUGl0Y2god2lk
dGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0gICAgaW5wdXQgPSAoKGNoYXIq
KWlucHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKG1G
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAg
bG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBE
M0RGTVRfQThMOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgaWYgKHN1cHBv
cnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRleHR1
cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRo
YXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2Fk
QWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBs
b2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0
byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECi0gICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2Fk
UkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10g
PSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVyUGl4
ZWwgPSBuYXRpdmU/IDE6IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKLQotICAgICAgICBp
ZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIEw4IGRl
c3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291
cmNlLCB3aWR0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
ZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICAr
IHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4w
ZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0s
IFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBu
YXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZl
PyAyOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0
aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
LSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4
KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNl
W3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEg
JiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTAp
ID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+
PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDND
MDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0
IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgX19tMTI4aSBick1h
c2sgPSBfbW1fc2V0MV9lcGkzMigweDAwZmYwMGZmKTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOwotICAgICAgICBpbnQgeCA9
IDA7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAgICAgICAgZm9y
ICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAxNSkgIT0g
MCkgJiYgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAx
NikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsgeCArPSA0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZHVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOwotICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBh
bmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdlCi0gICAgICAgICAgICBfX20xMjhpIGdhQ29tcG9uZW50
cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRhKTsKLSAgICAgICAgICAgIC8v
IE1hc2sgb3V0IGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21t
X2FuZF9zaTEyOChzb3VyY2VEYXRhLCBick1hc2spOwotICAgICAgICAgICAgLy8gU3dhcCBiIGFu
ZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyU3dhcHBlZCA9IF9tbV9zaHVmZmxlaGlfZXBpMTYo
X21tX3NodWZmbGVsb19lcGkxNihickNvbXBvbmVudHMsIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEp
KSwgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpOwotICAgICAgICAgICAgX19tMTI4aSByZXN1bHQg
PSBfbW1fb3Jfc2kxMjgoZ2FDb21wb25lbnRzLCBiclN3YXBwZWQpOwotICAgICAgICAgICAgX21t
X3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzCi0gICAg
ICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJn
YmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAq
IDQpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZm
MDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25l
ZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+
IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0
KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2Jh
ICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAw
eDAwM0UpID4+IDMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgw
N0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAx
Myk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZG
IDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwot
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDg7Ci0gICAgICAgIG1l
bWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0IHsKLSAgICBzd2l0Y2ggKGdl
dEQzREZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAg
ICBsb2FkRFhUMURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICAgIGxvYWREWFQzRGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAg
ICAgbG9hZERYVDVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhUMSBibG9jayBsYXlv
dXQgaXM6Ci0gIC8vIFswLTFdIGNvbG9yMC4KLSAgLy8gWzItM10gY29sb3IxLgotICAvLyBbNC03
XSBjb2xvciBiaXRtYXAsIDIgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFNvIGVhY2ggb2YgdGhlIDQt
NyBieXRlcyByZXByZXNlbnRzIG9uZSBsaW5lLCBmbGlwcGluZyBhIGJsb2NrIGlzIGp1c3QKLSAg
Ly8gZmxpcHBpbmcgdGhvc2UgYnl0ZXMuCi0KLSAgLy8gRmlyc3QgMzItYml0cyBpcyB0d28gUkdC
NTY1IGNvbG9ycyBzaGFyZWQgYnkgdGlsZSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtb2RpZmll
ZC4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLQotICAvLyBTZWNvbmQgMzItYml0cyBjb250YWlu
cyA0IHJvd3Mgb2YgNCAyLWJpdCBpbnRlcnBvbGFudHMgYmV0d2VlbiB0aGUgY29sb3JzLiBBbGwg
cm93cyBzaG91bGQgYmUgZmxpcHBlZC4KLSAgZGVzdFsxXSA9IChzb3VyY2VbMV0gPj4gMjQpIHwK
LSAgICAgICAgICAgICgoc291cmNlWzFdIDw8IDgpICYgMHgwMEZGMDAwMCkgfAotICAgICAgICAg
ICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAgICAoc291cmNl
WzFdIDw8IDI0KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQxIGJs
b2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrSGFs
Zihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8v
IFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0gIGRlc3RbMV0gPSAo
KHNvdXJjZVsxXSA8PCA4KSAmIDB4MDAwMEZGMDApIHwKLSAgICAgICAgICAgICgoc291cmNlWzFd
ID4+IDgpICYgMHgwMDAwMDBGRik7Ci19Ci0KLS8vIEZsaXBzIGEgZnVsbCBEWFQzIGJsb2NrIGlu
IHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2NrRnVsbChjb25z
dCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhU
MyBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTddICBhbHBoYSBiaXRtYXAsIDQgYml0cyBwZXIg
cGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gRmlyc3QgYW5kIFNlY29u
ZCAzMiBiaXRzIGFyZSA0Yml0IHBlciBwaXhlbCBhbHBoYSBhbmQgbmVlZCB0byBiZSBmbGlwcGVk
LgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAoc291cmNlWzFdIDw8IDE2KTsKLSAg
ZGVzdFsxXSA9IChzb3VyY2VbMF0gPj4gMTYpIHwgKHNvdXJjZVswXSA8PCAxNik7Ci0KLSAgLy8g
QW5kIGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICBGbGlw
Q29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyB0
aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3Rh
dGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNl
LCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgZGVzdFsw
XSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8PCAxNik7Ci0gIEZsaXBDb3B5RFhU
MUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIGEgZnVsbCBE
WFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJs
b2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7
Ci0gIC8vIEEgRFhUNSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswXSAgICBhbHBoYTAuCi0gIC8v
IFsxXSAgICBhbHBoYTEuCi0gIC8vIFsyLTddICBhbHBoYSBiaXRtYXAsIDMgYml0cyBwZXIgcGl4
ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gVGhlIGFscGhhIGJpdG1hcCBk
b2Vzbid0IGVhc2lseSBtYXAgbGluZXMgdG8gYnl0ZXMsIHNvIHdlIGhhdmUgdG8KLSAgLy8gaW50
ZXJwcmV0IGl0IGNvcnJlY3RseS4gIEV4dHJhY3RlZCBmcm9tCi0gIC8vIGh0dHA6Ly93d3cub3Bl
bmdsLm9yZy9yZWdpc3RyeS9zcGVjcy9FWFQvdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjLnR4dCA6
Ci0gIC8vCi0gIC8vICAgVGhlIDYgImJpdHMiIGJ5dGVzIG9mIHRoZSBibG9jayBhcmUgZGVjb2Rl
ZCBpbnRvIG9uZSA0OC1iaXQgaW50ZWdlcjoKLSAgLy8KLSAgLy8gICAgIGJpdHMgPSBiaXRzXzAg
KyAyNTYgKiAoYml0c18xICsgMjU2ICogKGJpdHNfMiArIDI1NiAqIChiaXRzXzMgKwotICAvLyAg
ICAgICAgICAgICAgICAgICAyNTYgKiAoYml0c180ICsgMjU2ICogYml0c181KSkpKQotICAvLwot
ICAvLyAgIGJpdHMgaXMgYSA0OC1iaXQgdW5zaWduZWQgaW50ZWdlciwgZnJvbSB3aGljaCBhIHRo
cmVlLWJpdCBjb250cm9sIGNvZGUKLSAgLy8gICBpcyBleHRyYWN0ZWQgZm9yIGEgdGV4ZWwgYXQg
bG9jYXRpb24gKHgseSkgaW4gdGhlIGJsb2NrIHVzaW5nOgotICAvLwotICAvLyAgICAgICBjb2Rl
KHgseSkgPSBiaXRzWzMqKDQqeSt4KSsxLi4zKig0KnkreCkrMF0KLSAgLy8KLSAgLy8gICB3aGVy
ZSBiaXQgNDcgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYW5kIGJpdCAwIGlzIHRoZSBsZWFzdAot
ICAvLyAgIHNpZ25pZmljYW50IGJpdC4KLSAgY29uc3QgdW5zaWduZWQgY2hhciogc291cmNlQnl0
ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0Qnl0ZXMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRlc3QpKTsKLSAgdW5zaWduZWQg
aW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAoc291cmNlQnl0ZXNbM10gKyAy
NTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzJfMyA9IHNvdXJjZUJ5
dGVzWzVdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzZdICsgMjU2ICogc291cmNlQnl0ZXNbN10pOwot
ICAvLyBzd2FwIGxpbmVzIDAgYW5kIDEgaW4gbGluZV8wXzEuCi0gIHVuc2lnbmVkIGludCBsaW5l
XzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIC8vIHN3YXAgbGluZXMg
MiBhbmQgMyBpbiBsaW5lXzJfMy4KLSAgdW5zaWduZWQgaW50IGxpbmVfM18yID0gKChsaW5lXzJf
MyAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVf
Ml8zICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNlQnl0ZXNbMF07
Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNbMl0gPSBsaW5l
XzNfMiAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzNfMiAmIDB4ZmYwMCkgPj4gODsK
LSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfM18yICYgMHhmZjAwMDApID4+IDE2OwotICBkZXN0Qnl0
ZXNbNV0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1s2XSA9IChsaW5lXzFfMCAmIDB4
ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzddID0gKGxpbmVfMV8wICYgMHhmZjAwMDApID4+IDE2
OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92ZSBmdW5jdGlv
bi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQot
Ly8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVj
dGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUu
Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihzb3VyY2UpKTsKLSAgdW5z
aWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN0YXRp
Y19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzBfMSA9IHNvdXJjZUJ5
dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICogc291cmNlQnl0ZXNbNF0pOwot
ICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYpIDw8IDEyKSB8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAwMCkgPj4gMTIp
OwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVzWzFdID0gc291
cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfMV8wICYgMHhmZjsKLSAgZGVzdEJ5
dGVzWzNdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNbNF0gPSAobGlu
ZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2Ug
KyAyLCBkZXN0ICsgMik7Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQxRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zm
c2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJU
KHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJU
KGlucHV0UGl0Y2ggJSA4ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDggPT0gMCk7
Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRo
IHVwIGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3
aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDI7Ci0K
LSAgICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBk
ZXN0W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNl
W3ggKyAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291
cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogOCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlu
dHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNT
RVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0
aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7
Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oaW5w
dXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMgbGVz
cyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBp
bnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDQ7Ci0KLSAgICBzd2l0Y2ggKGhlaWdodCkK
LSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGp1
c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3ggKyAxXTsKLSAgICAgICAgICAg
ICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4ICsgMl07Ci0gICAgICAgICAgICAgICAgZGVzdFt4
ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fj
cm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhU
M0Jsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQg
JSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyAr
K3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09
IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0
ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRj
aCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBj
YXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAz
KSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dp
dGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07
Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAgICAgICAg
ICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBGbGlwQ29weURYVDVCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0Z1bGwoc291cmNl
ICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtT
dWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFu
ZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0g
ICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0gICAgCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjcmlwdGlv
bi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xf
U1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVz
dGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShy
ZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldERhdGEpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBm
YWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNl
UmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkZXNjcmlwdGlv
bi5IZWlnaHQpOwotICAgIGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5
b2Zmc2V0LCBoZWlnaHQsIG1IZWlnaHQpOwotICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwg
ZGVzdFlPZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgZGVzdFlPZmZzZXQgKyBoZWlnaHR9OwotCi0g
ICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gRDNE
WExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZ2V0U3VyZmFjZSgpLCBOVUxMLCAmZGVzdFJlY3QsIHJl
bmRlclRhcmdldERhdGEsIE5VTEwsICZzb3VyY2VSZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDApOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKLSAgICAg
ICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAgICAgICByZXN1
bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJlY3Qs
IDApOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdo
dCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OwotICAgICAgICByZXN1
bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9j
ayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIp
OwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RMb2NrLnBC
aXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOwotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0
czsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6
Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291
cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2su
UGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0
Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RG
b3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiAr
IDFdICYgMHhGODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwg
KHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gKHNpZ25lZCBj
aGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB1bmxvY2soKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVj
dCgpOwotICAgIH0KLQotICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLQotICAgIG1E
aXJ0eSA9IHRydWU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSwKLSAgICAgIG1E
M0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJlbmRlclRhcmdldCkpLAotICAg
ICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCi17Ci19Ci0KLVRleHR1cmVT
dG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQotewotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjpp
c1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0K
LWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICht
RDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdl
OjpnZXRQb29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0KLXVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1UZXh0dXJlU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlz
c3VlVGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsr
OwotfQotCi1UZXh0dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkK
LXsKLSAgICBtTWluRmlsdGVyID0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOwotICAgIG1NYWdG
aWx0ZXIgPSBHTF9MSU5FQVI7Ci0gICAgbVdyYXBTID0gR0xfUkVQRUFUOwotICAgIG1XcmFwVCA9
IEdMX1JFUEVBVDsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICBtVXNhZ2UgPSBH
TF9OT05FOwotICAgIAotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0KLSAgICBtSW1tdXRhYmxl
ID0gZmFsc2U7Ci19Ci0KLVRleHR1cmU6On5UZXh0dXJlKCkKLXsKLX0KLQotLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0
ZXIpCi1ib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQotewotICAgIHN3
aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2Ug
R0xfTElORUFSOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQ
TUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtTWluRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIG1E
aXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIo
R0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNl
IEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVy
cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ly8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKLXsKLSAg
ICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBjYXNl
IEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1l
dGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlk
IGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKLXsK
LSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBj
YXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFwKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFy
YW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ugc3RhdGUgdXBkYXRlICh2
YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdl
KQotewotICAgIHN3aXRjaCAodXNhZ2UpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFOgotICAgICAgICBtVXNhZ2Ug
PSB1c2FnZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbU1pbkZpbHRlcjsKLX0KLQotR0xlbnVtIFRleHR1cmU6Omdl
dE1hZ0ZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYWdGaWx0ZXI7Ci19Ci0KLUdMZW51
bSBUZXh0dXJlOjpnZXRXcmFwUygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XcmFwUzsKLX0KLQot
R0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBUOwot
fQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtVXNh
Z2U7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9IE5V
TEwpCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEo
MCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5
cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmU6OnNldENvbXByZXNz
ZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1h
Z2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2Nr
ZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKGltYWdl
LT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW50IGlucHV0
U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRD
b21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNp
emUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBp
eGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAg
IGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5b2Zm
c2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0
ICE9IGdldEludGVybmFsRm9ybWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsKLSAgICAgICAg
dXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICB1cGRhdGVSZWdpb24ucmlnaHQg
PSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20gPSB5b2Zmc2V0
ICsgaGVpZ2h0OwotICAgICAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsKLQotICAgICAg
ICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2Ut
PmxvY2soJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbik7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCA9IENvbXB1dGVD
b21wcmVzc2VkUGl0Y2god2lkdGgsIGZvcm1hdCk7Ci0gICAgICAgICAgICBpbnQgaW5wdXRTaXpl
ID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9m
ZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQs
IC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocGl4ZWxzKSArIGlucHV0U2l6
ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAg
IGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZhbHNl
KSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBk
YXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJvb2wg
VGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURpcnR5
UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERpcnR5
KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2VzID0g
ZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkKLXsK
LSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJl
dHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQotdW5z
aWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KQot
ewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAgICBy
ZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQpIDog
MDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAm
JiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1
cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxl
dmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdp
dGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLgot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2
ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQo
KSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRleHQg
KmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0ZXIo
KTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17
Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3VyY2Us
IE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNw
bGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5n
ZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxM
LCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0
dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNl
VGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAgIG1UZXh0dXJlID0gc3VyZmFj
ZVRleHR1cmU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRl
clRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKLXsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIG1UZXh0dXJlID0gTlVM
TDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVp
Z2h0LCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAw
LCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3Rv
cmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdl
MkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
KnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmc3VyZmFjZSk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOwotfQotCi1U
ZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4
U3RvcmFnZSA9IE5VTEw7Ci0gICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIG1Db2xvcmJ1ZmZlclBy
b3h5ID0gTlVMTDsKLSAgICBtUHJveHlSZWZzID0gMDsKLX0KLQotVGV4dHVyZTJEOjp+VGV4dHVy
ZTJEKCkKLXsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIAotICAgIGlmIChtU3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7Ci0gICAg
ICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4g
YSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJv
eGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBh
IHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBkZWxl
dGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVBy
b3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMgPiAw
KQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQotICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6Omdl
dFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KLUdMc2l6
ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAw
OwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAot
ewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQot
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3Jt
YXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsK
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
ICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdl
dENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3Ag
PSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVj
dC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNv
dXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGlu
dCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7
Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwg
ZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsK
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVs
XS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21w
bGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5KHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICgh
bVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIGlmIChsZXZlbCA8IGxldmVs
Q291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291
cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xh
bXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVs
WU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7
Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdl
dFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNv
dXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBkZXN0WU9mZnNl
dCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29s
IHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxz
LCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgbUltbXV0YWJsZSA9
IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lk
dGggPj4gMSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7
Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAg
ICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUg
c2FtcGxpbmcgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBw
YWdlIDg1LgotYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAg
ICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIp
Ci0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0g
ICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBH
TF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKTsKLQotICAgIGlmICghbnBvdFN1cHBvcnQp
Ci0gICAgewotICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAh
aXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewot
ICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlz
UG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVz
dHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBs
ZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0
KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgs
IGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBt
SW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRU
eXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2
ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlt
YWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZl
bCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2Vk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkp
OwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUo
KSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNl
VGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVy
ZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0
IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYm
IChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7Ci0KLSAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAKLSAgICBp
ZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2
ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotICAgICAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0K
LSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsK
LSAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsKLQotICAgICAgICBp
ZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVjdChs
ZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xl
dmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJE
Ojpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVTdG9yYWdlMkQgKm5ld1Rl
eFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgIT0g
MCAmJiBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSAhPSAwKQotICAgIHsKLSAgICAgICAgR0xz
aXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVs
cyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZm9y
bWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0cnVlKTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwoaSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvcHlU
b1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCi0g
ICAgICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9y
YWdlOwotICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc3Qp
IGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVN
aXBtYXBzKCkKLXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVu
c2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpLCBt
SW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAx
OyBpIDw9IHE7IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJy
YXlbMF0uZ2V0Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5n
ZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxv
d2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgaWYg
KHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAg
ICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNl
KCkgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlM
RUQoRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgp
LCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxM
LCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBF
UlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1
ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlk
KCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOwotICAgIH0KLQotICAg
IHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0
dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAg
IAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewot
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRleHR1cmVTdG9y
YWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdl
KHJlbmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywgaXNSZW5kZXJUYXJn
ZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRl
eHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCkKLXsKLSAg
ICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShlczJk
eDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiBzdXJmYWNl
OwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCAr
IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKLX0KLQotVGV4dHVyZUN1YmVNYXA6
OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAg
ICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0g
MDsKLSAgICB9Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBOVUxMOwotfQotCi0vLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVm
ZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMg
dGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSAKLS8vIHBy
b3h5IHJlZmVyZW5jZXMgc3RpbGwgZXhpc3QuIElmIHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMg
dG8gemVybywKLS8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0IGEgbmV3
IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcKLS8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUZh
Y2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0rKzsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID4gMCkKLSAgICAgICAgICAgICAgICBtRmFj
ZVByb3h5UmVmc1tpXS0tOwotCi0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZUN1YmVN
YXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
WzBdW2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0K
LUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKLXsK
LSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1h
dCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7Ci19Ci0KLUQzREZPUk1BVCBUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
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
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
LSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQotICAgIHsKLSAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFS
RVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8
fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFpc01pcG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFs
c28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBs
ZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAw
IHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dFdpZHRoKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0
aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlXVswXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3Jt
YXQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAo
aXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwot
Ci0gICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2Ug
PCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9
IHE7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNl
XVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBs
ZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElz
Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVy
biBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0K
LQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZv
cm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQp
OwotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZh
Y2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1
cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAg
ICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQot
ewotICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAg
ICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2Ug
KmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAgaWYgKGlt
YWdlLT5pc0RpcnR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVj
dChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpICE9IDApCi0gICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVs
cyhzaXplLCAwKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKLQotICAgICAgICBpZiAo
bVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxz
OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFn
ZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4
LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNl
dEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0pOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVu
dW0gZmFjZSkKLXsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7Ci0gICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDIpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsKLSAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOwotCi0g
ICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7Ci19Ci0KLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUp
Ci17Ci0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZp
bmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0
b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
cmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJl
bmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7
Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhd
W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVy
VGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKLQot
ICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNv
dXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChz
b3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkp
OwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRv
bSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAg
ICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KDAsIGhlaWdodCwg
bUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7Ci0KLSAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VS
ZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1Yklt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0KLSAgICBpZiAoeG9mZnNldCArIHdp
ZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUg
dGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVy
YWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQot
ICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29weSgwLCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
IHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdo
dCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVm
dCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9
IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJl
Y3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQot
ICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9m
ZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5nZXRXaWR0aCgpKTsK
LQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJU
YXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0
LCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29s
IHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChs
ZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKLSAgICBtSW1tdXRhYmxlID0gdHJ1
ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0g
ICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1h
dCwgc2l6ZSwgc2l6ZSwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBzaXplID0gc3RkOjptYXgo
MSwgc2l6ZSA+PiAxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGxldmVsID0g
bGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwr
KykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUo
R0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50
IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1
cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQotewotICAgIGlmICghaXNDdWJlQ29tcGxldGUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgp
KQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0
aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFw
IGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0
Rm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFn
ZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdldFR5
cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOwotICAgICAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLQotICAgICAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwg
bG93ZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh1cHBlciAh
PSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChsb3dlciAhPSBO
VUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1b
aV0ubWFya0NsZWFuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0u
Z2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZSht
SW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2Zd
W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCkpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxv
YWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKG1GYWNlUHJveGllc1tm
YWNlXSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJl
bmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi1JRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQot
ewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwotCi0gICAgLy8g
ZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9y
YWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYgKCFtVGV4U3Rv
cmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkp
Ci0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRz
IHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3Nlcw0KKy8vIFRleHR1
cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFu
ZCByZWxhdGVkDQorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
My43IHBhZ2UgNjMuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiDQorDQorI2lu
Y2x1ZGUgPGQzZHg5dGV4Lmg+DQorDQorI2luY2x1ZGUgPGFsZ29yaXRobT4NCisjaW5jbHVkZSA8
aW50cmluLmg+DQorDQorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIg0KKw0KKyNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIg0KKyNpbmNs
dWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIv
RnJhbWVidWZmZXIuaCINCisNCituYW1lc3BhY2UgZ2wNCit7DQordW5zaWduZWQgaW50IFRleHR1
cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOw0KKw0KK3N0YXRpYyBEM0RGT1JN
QVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQ0K
K3sNCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpDQorICAgIHsNCisgICAgICAgIHJl
dHVybiBEM0RGTVRfSU5UWjsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fA0KKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBE
M0RGTVRfRFhUMTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9E
WFQzOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gRDNERk1UX0RYVDU7DQor
ICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKHR5cGUg
PT0gR0xfSEFMRl9GTE9BVF9PRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiBEM0RGTVRfQTE2
QjE2RzE2UjE2RjsNCisgICAgfQ0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZ
VEUpDQorICAgIHsNCisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFICYmIGdldENv
bnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHJldHVybiBEM0RGTVRfTDg7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1p
bmFuY2VBbHBoYVRleHR1cmVzKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEQz
REZNVF9BOEw4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JH
QikNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4Ow0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Ow0KK30NCisNCitzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpDQorew0KKyAgICBpZiAoZm9ybWF0
ID09IEQzREZNVF9JTlRaKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0K
KyAgICBzd2l0Y2goZm9ybWF0KQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAg
ICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICBjYXNlIEQzREZNVF9EWFQxOg0KKyAgICAgIGNh
c2UgRDNERk1UX0RYVDM6DQorICAgICAgY2FzZSBEM0RGTVRfRFhUNToNCisgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOg0KKyAgICAgIGNh
c2UgRDNERk1UX0EzMkIzMkczMlIzMkY6DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
ZmFsc2U7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQzREZP
Uk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSkNCit7DQor
ICAgIERXT1JEIGQzZHVzYWdlID0gMDsNCisNCisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5U
WikNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfREVQVEhTVEVOQ0lMOw0K
KyAgICB9DQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRSkpKQ0KKyAgICB7DQorICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7DQorICAgIH0NCisgICAgcmV0dXJuIGQzZHVzYWdlOw0KK30NCisNCitJbWFnZTo6SW1h
Z2UoKQ0KK3sNCisgICAgbVdpZHRoID0gMDsgDQorICAgIG1IZWlnaHQgPSAwOw0KKyAgICBtRm9y
bWF0ID0gR0xfTk9ORTsNCisgICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOw0KKw0KKyAgICBt
U3VyZmFjZSA9IE5VTEw7DQorDQorICAgIG1EaXJ0eSA9IGZhbHNlOw0KKw0KKyAgICBtRDNEUG9v
bCA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047
DQorfQ0KKw0KK0ltYWdlOjp+SW1hZ2UoKQ0KK3sNCisgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICB7
DQorICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgSW1h
Z2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpDQorew0KKyAgICBpZiAobVdpZHRoICE9
IHdpZHRoIHx8DQorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fA0KKyAgICAgICAgbUZvcm1h
dCAhPSBmb3JtYXQgfHwNCisgICAgICAgIG1UeXBlICE9IHR5cGUgfHwNCisgICAgICAgIGZvcmNl
UmVsZWFzZSkNCisgICAgew0KKyAgICAgICAgbVdpZHRoID0gd2lkdGg7DQorICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0Ow0KKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsNCisgICAgICAgIG1UeXBl
ID0gdHlwZTsNCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJl
IHVzZWQNCisgICAgICAgIG1EM0RGb3JtYXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUobUZv
cm1hdCwgbVR5cGUpOw0KKw0KKyAgICAgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgbVN1cmZhY2UgPSBO
VUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCit2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkNCit7
DQorICAgIGlmKG1TdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisN
CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOw0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7DQorICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRv
VXNlID0gRDNEUE9PTF9TWVNURU1NRU07DQorICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQg
PSBnZXREM0RGb3JtYXQoKTsNCisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7
IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMNCisNCisgICAg
aWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkNCisgICAgew0KKyAgICAgICAgaW50IGxl
dmVsVG9GZXRjaCA9IDA7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsN
CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7DQorICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9IDAgfHwgbUhlaWdodCAlIDQg
IT0gMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCBpc011bHQ0ID0gZmFsc2U7DQor
ICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOw0KKyAgICAgICAgICAgIHdoaWxlICgh
aXNNdWx0NCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJlcXVlc3RXaWR0aCA8
PD0gMTsNCisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsNCisgICAgICAgICAg
ICAgICAgdXBzYW1wbGVDb3VudCsrOw0KKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFdpZHRo
ICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApDQorICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291
bnQ7DQorICAgICAgICB9DQorDQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgp
LT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNo
ICsgMSwgTlVMTCwgZDNkRm9ybWF0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsNCisNCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsNCisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVk
LiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0
Y2gsICZuZXdTdXJmYWNlKTsNCisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsNCisgICAg
fQ0KKw0KKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7DQorICAgIG1EaXJ0eSA9IGZhbHNlOw0K
KyAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsNCit9DQorDQorSFJFU1VMVCBJbWFnZTo6bG9jayhE
M0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkNCit7DQorICAgIGNy
ZWF0ZVN1cmZhY2UoKTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENB
TEw7DQorDQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbVN1
cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOw0KKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgICAgIG1EaXJ0eSA9IHRydWU7DQorICAgIH0NCisN
CisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQordm9pZCBJbWFnZTo6dW5sb2NrKCkNCit7DQor
ICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsN
CisgICAgfQ0KK30NCisNCitib29sIEltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdA0K
K3sgICAgDQorICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1h
dCgpKTsNCit9DQorDQorRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdA0KK3sN
CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVu
IHJlZGVmaW5lZCBmaXJzdA0KKyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2Fs
bGVyDQorICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsNCisNCisgICAg
cmV0dXJuIG1EM0RGb3JtYXQ7DQorfQ0KKw0KK0lEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6Z2V0
U3VyZmFjZSgpDQorew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIHJldHVybiBtU3Vy
ZmFjZTsNCit9DQorDQordm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAg
IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNl
LCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAgICAgICAgbVN1cmZhY2UtPlJl
bGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsNCisgICAgc3Vy
ZmFjZS0+R2V0RGVzYygmZGVzYyk7DQorICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9N
QU5BR0VEKTsNCisNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAgICBtRDNEUG9vbCA9IGRl
c2MuUG9vbDsNCit9DQorDQordm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7DQorDQorICAgIGlmIChzb3VyY2VTdXJmYWNlICYmIHNv
dXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIFJFQ1QgcmVjdDsN
CisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7DQorICAgICAgICByZWN0LnRvcCA9IHlvZmZz
ZXQ7DQorICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOw0KKyAgICAgICAgcmVj
dC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0Ow0KKw0KKyAgICAgICAgaWYgKG1EM0RQb29sID09
IEQzRFBPT0xfTUFOQUdFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVjdCwg
c291cmNlU3VyZmFjZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7DQorICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgICAgIH0NCisgICAgICAgIGVs
c2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVz
dCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIA0KKyAgICAgICAgICAg
IFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9Ow0KKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJl
Y3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOw0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gU3RvcmUgdGhlIHBpeGVs
IHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0
aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0DQorLy8gaW50byB0aGUgdGFy
Z2V0IHBpeGVsIHJlY3RhbmdsZS4NCit2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUsDQorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICppbnB1dCkNCit7DQorICAgIFJFQ1QgbG9ja1JlY3QgPQ0KKyAgICB7DQorICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVp
Z2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsNCisgICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQorICAgIGlmIChGQUlMRUQocmVz
dWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkg
aW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50KTsNCisNCisgICAgc3dpdGNoICh0eXBlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOg0KKyAgICAgICAgc3dpdGNoIChtRm9ybWF0KQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGFTU0UyKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOg0KKyAgICAgICAgICAg
IGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsNCisg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6DQor
ICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09
IEQzREZNVF9BOEw4KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9S
R0I6DQorICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgaWYgKHN1cHBvcnRz
U1NFMigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURh
dGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
Og0KKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToNCisgICAgICAgIHN3
aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAg
ICAgICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoNCisgICAgICAgIHN3aXRj
aCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAg
ICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToNCisgICAgICAgIHN3aXRj
aCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAg
ICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfRkxPQVQ6DQorICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAg
ICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdC
QSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRA0KKyAgICAgICAg
ICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0K
KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToNCisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAg
ICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkN
CisgICAgICAgIHsNCisgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0
byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNEDQorICAg
ICAgICAgIGNhc2UgR0xfQUxQSEE6DQorICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToNCisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0JI
YWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2Ug
R0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAg
ICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorICAgIA0KKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAgICBfX20xMjhp
IHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgaW50IHg7
DQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZA0KKyAgICAgICAgZm9yICh4
ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAweEYpICE9IDAg
JiYgeCA8IHdpZHRoKTsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9DQor
DQorICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJl
dF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7DQorICAgICAgICAgICAgLy8gSW50
ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5dGUgdG8gemVybw0K
KyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291
cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0
LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvDQorICAgICAgICAgICAgX19tMTI4aSBsbyA9
IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQorICAgICAgICAgICAg
X19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQor
DQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+
KCZkZXN0W3hdKSwgbG8pOw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJl
dF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7DQorICAgICAgICB9DQorDQorICAg
ICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcg0KKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
dm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0g
TlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0K
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEFs
cGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQg
KmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0K
KyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOw0KKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBi
b29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7DQor
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7DQorDQorICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5h
dGlvbiBmb3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0K
KyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCk7DQorICAg
ICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEu
MGY7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBzaG9y
dCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAw
OyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCBy
ZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0
aXZlKSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsN
CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGlu
YXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIq
eCsxXTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAyKTsNCisgICAg
ICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsy
KngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngr
MV07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRl
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBd
Ow0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1
bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2Jh
ICYgMHgwN0UwKSA+PiA5KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEg
JiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lk
IEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
c291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
W3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAz
ICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsNCisgICAgICAgIH0N
CisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDENCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjps
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IE5VTEw7DQorICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZm
MDBmZik7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsN
CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAg
ICAgIGludCB4ID0gMDsNCisNCisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVk
DQorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0
W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0W3hd
ID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsN
CisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1X3Np
MTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsNCisgICAg
ICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UNCisgICAgICAg
ICAgICBfX20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3Vy
Y2VEYXRhKTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByDQorICAgICAgICAgICAg
X19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7
DQorICAgICAgICAgICAgLy8gU3dhcCBiIGFuZCByDQorICAgICAgICAgICAgX19tMTI4aSBiclN3
YXBwZWQgPSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25l
bnRzLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsN
CisgICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMs
IGJyU3dhcHBlZCk7DQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nh
c3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0KTsNCisgICAgICAgIH0NCisNCisgICAgICAg
IC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzDQorICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2Vb
eF07DQorICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZm
KSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50
ICpkZXN0ID0gTlVMTDsNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisg
ICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0K
Kw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOw0KKyAgICAgICAgICAg
IGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYw
MGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JB
NDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAo
KHJnYmEgJiAweDAwRjApID4+IDQpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEYwMDApID4+IDEyKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAw
eDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsNCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChy
Z2JhICYgMHgwN0MwKSA+PiA4KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJn
YmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0K
KyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQor
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
Ow0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsNCisgICAgfQ0KK30N
CisNCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykN
CisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgbWVt
Y3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICppbnB1dCkgew0KKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7DQorICAg
IEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsNCisNCisgICAgUkVDVCBsb2NrUmVjdCA9IHsNCisg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsDQorICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZz
ZXQgKyBoZWlnaHQNCisgICAgfTsNCisNCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOw0KKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsNCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAg
R0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
bUZvcm1hdCk7DQorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0
Y2god2lkdGgsIG1Gb3JtYXQpOw0KKyAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0
Y2g7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQ0KKyAgICB7DQorICAgICAg
ICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCks
ICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsNCisg
ICAgfQ0KKw0KKyAgICB1bmxvY2soKTsNCit9DQorDQorLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29w
eVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3Jt
YXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzDQordm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkNCit7DQorICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7DQorICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7DQorICAg
IA0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJm
YWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZv
cm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJUYXJnZXREYXRhLCBOVUxMKTsNCisNCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsNCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQgPSBkZXZpY2Ut
PkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsNCisN
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIoIkdldFJlbmRl
clRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisgICAgICAgIHJlbmRlclRhcmdl
dERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5
ICsgaGVpZ2h0fTsNCisgICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zm
c2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9Ow0KKw0KKyAgICBpZiAoaXNSZW5kZXJhYmxl
Rm9ybWF0KCkpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21T
dXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRlc3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBO
VUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAgIA0KKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiQ29w
eWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOw0KKyAgICAgICAgICAgIHJlbmRl
clRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9Ow0KKyAgICAgICAgcmVzdWx0ID0g
cmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsN
CisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0
IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2Uo
KTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAg
ICB9DQorDQorICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsNCisgICAgICAg
IHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOw0KKyAgICAgICAgDQorICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGlu
dmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsN
CisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
aWYgKGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxv
Y2sucEJpdHM7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBj
aGFyKilkZXN0TG9jay5wQml0czsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9u
LkZvcm1hdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAgICAgICAgICAg
ICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAg
ICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107DQorICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNo
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZv
cm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4
ICogMiArIDFdICYgMHhGODsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9
IHJlZCB8IChyZWQgPj4gNSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQor
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0g
JiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAx
KSB8IChyZWQgPj4gNCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBz
b3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAy
ICsgMV0gPj4gNzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
DQorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor
DQorICAgICAgICB1bmxvY2soKTsNCisgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1Jl
Y3QoKTsNCisgICAgfQ0KKw0KKyAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorDQor
ICAgIG1EaXJ0eSA9IHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFn
ZShEV09SRCB1c2FnZSkNCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLA0KKyAgICAgIG1EM0RQb29s
KGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwNCisgICAgICBtVGV4dHVyZVNl
cmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkNCit7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlOjp+
VGV4dHVyZVN0b3JhZ2UoKQ0KK3sNCit9DQorDQorYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5k
ZXJUYXJnZXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0Vf
UkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsNCit9DQorDQorYm9v
bCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QNCit7DQorICAgIHJldHVybiAobUQz
RFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsNCit9DQorDQorRDNEUE9PTCBUZXh0dXJlU3RvcmFn
ZTo6Z2V0UG9vbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQzRFBvb2w7DQorfQ0KKw0KK0RX
T1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQz
RFVzYWdlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOw0KK30NCisNCit1
bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgpDQorew0KKyAg
ICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7DQorfQ0KKw0KK1RleHR1cmU6OlRleHR1
cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQ0KK3sNCisgICAgbU1pbkZpbHRlciA9
IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsNCisgICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsN
CisgICAgbVdyYXBTID0gR0xfUkVQRUFUOw0KKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7DQorICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICBtVXNhZ2UgPSBHTF9OT05FOw0KKyAgICAN
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisNCisgICAgbUltbXV0YWJsZSA9IGZhbHNlOw0K
K30NCisNCitUZXh0dXJlOjp+VGV4dHVyZSgpDQorew0KK30NCisNCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikN
Citib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQ0KK3sNCisgICAgc3dp
dGNoIChmaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJFU1Q6DQorICAgICAgY2Fz
ZSBHTF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOg0KKyAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6DQor
ICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsNCisgICAgICAg
ICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgfQ0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgIH0NCit9DQorDQorLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nl
c3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBU
ZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7DQorICAgIHN3aXRjaCAoZmls
dGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElO
RUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7DQor
ICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikNCiti
b29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQ0KK3sNCisgICAgc3dpdGNoICh3cmFw
KQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6DQorICAgICAgY2FzZSBHTF9DTEFNUF9U
T19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIG1XcmFwUyA9IHdyYXA7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMg
PSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAg
ICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor
fQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2
YWxpZCBlbnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3cmFw
KQ0KK3sNCisgICAgc3dpdGNoICh3cmFwKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6
DQorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURf
UkVQRUFUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7DQorICAgICAgICAg
ICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0
dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpDQorew0KKyAgICBzd2l0Y2ggKHVzYWdlKQ0KKyAg
ICB7DQorICAgICAgY2FzZSBHTF9OT05FOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRToNCisgICAgICAgIG1Vc2FnZSA9IHVzYWdlOw0KKyAgICAgICAgcmV0dXJu
IHRydWU7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0K
K30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtTWluRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWFnRmlsdGVyKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtTWFnRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVy
ZTo6Z2V0V3JhcFMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1XcmFwUzsNCit9DQorDQorR0xl
bnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtV3JhcFQ7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVVzYWdlOw0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4
ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAg
ICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7DQorICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0
YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOw0K
KyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIFRleHR1
cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7DQorICAgIGlm
IChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJu
IHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAq
aW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGlt
YWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
cGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisNCisgICAg
cmV0dXJuIHRydWU7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0
VGV4dHVyZSgpDQorew0KKyAgICBpZiAoIWlzU2FtcGxlckNvbXBsZXRlKCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJs
eWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UoZmFsc2UpID09IE5V
TEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0
ZVRleHR1cmUoKTsNCisNCisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7DQorfQ0KKw0KK2Jv
b2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
RGlydHlQYXJhbWV0ZXJzOw0KK30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5SW1hZ2VzKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtRGlydHlJbWFnZXM7DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTo6cmVzZXREaXJ0eSgpDQorew0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7DQorICAg
IG1EaXJ0eUltYWdlcyA9IGZhbHNlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0
VGV4dHVyZVNlcmlhbCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOw0KKyAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKSA6IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJl
ID0gZ2V0U3RvcmFnZSh0cnVlKTsNCisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6aXNJ
bW11dGFibGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1JbW11dGFibGU7DQorfQ0KKw0KK0dM
aW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KSBjb25zdA0KK3sNCisgICAgaWYgKChpc1BvdzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQpKSB8
fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMNCisgICAgfQ0KKyAg
ICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgd2l0aG91dCBHTF9PRVNf
dGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9UIG1pcG1hcHMuDQorICAgICAgICByZXR1
cm4gMTsNCisgICAgfQ0KK30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNp
emVpIHNpemUpIGNvbnN0DQorew0KKyAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6
ZSk7DQorfQ0KKw0KK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IDogMDsNCit9DQorDQorQmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpDQorew0KKyAgICBDb250
ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOw0KKyAgICByZXR1cm4gY29udGV4dC0+Z2V0Qmxp
dHRlcigpOw0KK30NCisNCitib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFu
YWdlZCkNCit7DQorICAgIGlmIChzb3VyY2UgJiYgZGVzdCkNCisgICAgew0KKyAgICAgICAgSFJF
U1VMVCByZXN1bHQ7DQorDQorICAgICAgICBpZiAoZnJvbU1hbmFnZWQpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdCwgTlVM
TCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsNCisgICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgICAgICAgICBkaXNwbGF5
LT5lbmRTY2VuZSgpOw0KKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qo
c291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVy
ZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0
b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBzdXJmYWNl
VGV4dHVyZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQ0KKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChS
ZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBO
VUxMOw0KKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBo
YW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAg
ICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApDQorICAgIHsNCisgICAgICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgp
LCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsNCisg
ICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCitUZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCgpDQorew0KKyAgICBp
ZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAg
IH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5
ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQ0KK3sNCisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBpZiAobVRleHR1cmUp
DQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsNCit9DQorDQorSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK30NCisNCitUZXh0dXJlMkQ6OlRleHR1cmUy
RChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkNCit7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsN
CisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7DQor
ICAgIG1Qcm94eVJlZnMgPSAwOw0KK30NCisNCitUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQ0KK3sN
CisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsNCisgICAgDQorICAgIGlmIChtU3VyZmFjZSkN
CisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAg
ICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgfQ0KK30NCisNCisvLyBXZSBuZWVkIHRvIG1haW50
YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyANCisv
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8g
dXNlIGEgcG9pbnRlciANCisvLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVl
biBkZWxldGVkLg0KK3ZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQ0KK3sNCisgICAgbVByb3h5UmVmcysrOw0KK30NCisNCit2b2lkIFRleHR1cmUy
RDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpDQorew0KKyAgICBpZiAo
bVByb3h5UmVmcyA+IDApDQorICAgICAgICBtUHJveHlSZWZzLS07DQorDQorICAgIGlmIChtUHJv
eHlSZWZzID09IDApDQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7DQorfQ0KKw0K
K0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gR0xf
VEVYVFVSRV8yRDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxl
dmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
Ow0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJl
MkQ6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiAwOw0K
K30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCk7DQor
ICAgIGVsc2UNCisgICAgICAgIHJldHVybiBHTF9OT05FOw0KK30NCisNCitEM0RGT1JNQVQgVGV4
dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICBy
ZXR1cm4gRDNERk1UX1VOS05PV047DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIHR5cGUpDQorew0KKyAgICByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAg
Ym9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRl
ZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbUlt
YWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9DQorDQorICAgICAgICBkZWxldGUg
bVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFn
ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OmJpbmRUZXhJ
bWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICByZWxlYXNlVGV4SW1hZ2UoKTsN
CisNCisgICAgR0xlbnVtIGZvcm1hdDsNCisNCisgICAgc3dpdGNoKHN1cmZhY2UtPmdldEZvcm1h
dCgpKQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICBmb3Jt
YXQgPSBHTF9SR0JBOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6DQorICAgICAgICBmb3JtYXQgPSBHTF9SR0I7DQorICAgICAgICBicmVhazsNCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAg
ICB9DQorDQorICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwgc3VyZmFjZS0+Z2V0
V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0K
Kw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsNCisNCisgICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAgICBtU3VyZmFj
ZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6cmVsZWFz
ZVRleEltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgbVN1
cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAgICAgIG1TdXJmYWNlID0gTlVMTDsN
CisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtSW1hZ2VB
cnJheVtpXS5yZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsN
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c2V0Q29tcHJlc3Nl
ZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURf
QllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBp
eGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpjb21t
aXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOw0KKw0KKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50
KCkpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisgICAgICAgIGlmIChkZXN0TGV2
ZWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5
W2xldmVsXTsNCisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZl
bC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJl
Y3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sN
CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2
ZWxdKSkNCisgICAgew0KKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OmNvcHlJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIHJlZGVmaW5lSW1hZ2UobGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQorICAgDQorICAg
IGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0K
KyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9y
YWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0ubWFya0NsZWFuKCk7DQorDQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBo
ZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsN
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisgICAgICAg
ICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7
DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgaWYg
KHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsNCisgICAgfQ0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIGlmICghbUltYWdlQXJyYXlb
bGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxl
ckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAg
ICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisg
ICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgp
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICB1cGRhdGVUZXh0dXJlKCk7DQorDQorICAgICAg
ICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVD
VCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7DQorICAgICAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisgICAgICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0
Ow0KKw0KKw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3Jh
Z2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3QpDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVy
VGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwg
eW9mZnNldCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sN
CisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsN
CisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOw0KKyAg
ICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlw
ZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdl
LCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2Ug
PSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBo
ZWlnaHQpOw0KKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsNCisNCisgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7DQor
ICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOw0KKyAgICAgICAgaGVpZ2h0
ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxl
dmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdM
X05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICB9DQorDQorICAgIGlm
IChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
bGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorICAg
ICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBs
aW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4
NS4NCitib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAg
R0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQorDQorICAgIGlmICh3aWR0aCA8
PSAwIHx8IGhlaWdodCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAg
IH0NCisNCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7DQorDQorICAgIHN3aXRjaCAobU1p
bkZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoNCisgICAgICBjYXNlIEdM
X0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsNCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVB
UjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOg0KKyAgICAgICAgbWlwbWFw
cGluZyA9IHRydWU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxP
QVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8DQor
ICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0KKyAgICB7DQorICAg
ICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05F
QVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgYm9vbCBucG90U3VwcG9ydCA9IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJU
ZXh0dXJlKCk7DQorDQorICAgIGlmICghbnBvdFN1cHBvcnQpDQorICAgIHsNCisgICAgICAgIGlm
ICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fA0K
KyAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Miho
ZWlnaHQpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgaWYgKG1pcG1hcHBpbmcpDQorICAgIHsNCisgICAgICAgIGlm
ICghbnBvdFN1cHBvcnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFpc1BvdzIod2lk
dGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBp
ZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0K
Ky8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuDQorYm9vbCBUZXh0dXJlMkQ6OmlzTWlw
bWFwQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsN
CisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgd2lkdGggPSBt
SW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFy
cmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGludCBx
ID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7DQorDQorICAgIGZvciAoaW50IGxldmVs
ID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAg
ICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXS5n
ZXRUeXBlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxd
LmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpDQorICAgICAgICB7
DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZl
bCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0
b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisNCisvLyBDb25zdHJ1Y3RzIGEg
RGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzDQordm9p
ZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSB3aWR0aCA9IG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJy
YXlbMF0uZ2V0SGVpZ2h0KCk7DQorICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0
RDNERm9ybWF0KCk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHdpZHRoLCBoZWlnaHQpOw0KKyAgICANCisgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQo
KSkNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFn
ZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVRl
eHR1cmUoKQ0KK3sNCisgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAgZm9y
IChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0KKyAgICAg
ICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsNCisNCisgICAgICAgIGlmIChp
bWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2UyRCAq
bmV3VGV4U3RvcmFnZSA9IE5VTEw7DQorDQorICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgICAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKyAgICAgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7DQorICAgICAgICBE
M0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgICAg
ICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdo
dCk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChpKTsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdU
ZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorDQorICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkNCisgICAgICAgICAgICAgICAgeyAgIA0KKyAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3
VGV4U3RvcmFnZTsNCisgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxl
YXNlKCk7DQorICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7DQor
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAg
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJl
bGVhc2UoKTsNCisgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7DQorDQorICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQ0K
K3sNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0K
KyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8
fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAgICB1
bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSwg
bUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsNCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICB7DQorICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFn
ZUFycmF5WzBdLmdldEZvcm1hdCgpLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksDQor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSk7DQorICAg
IH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBp
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpIC0gMSk7DQorICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsNCisN
CisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIs
IGxvd2VyKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxv
d2VyLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFu
KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZy
b21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdl
QXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAw
KSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9h
ZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCitSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQpDQorew0KKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAq
KU5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQ0K
KyAgICB7DQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7
DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisg
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICANCisgICAgLy8g
ZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQ0KKyAgICBpZiAoaXNEZXB0aCgwKSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0dXJuIG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xl
bnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7DQor
DQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAg
aWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5V
TEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKw0KKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhY3R1YWxseSBhIGRlcHRoIHRleHR1cmUNCisgICAgaWYgKCFpc0RlcHRoKDApKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UgKlRleHR1
cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
KQ0KKyAgICB7DQorICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0N
CisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK1RleHR1cmVTdG9y
YWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkNCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2Fn
ZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1
YmVTZXJpYWxzKCkpDQorew0KKyAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIC8vIGlmIHRoZSBz
aXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxl
dGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBk
M2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAgICBpZiAoc2l6ZSA+IDApDQorICAgIHsNCisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywgZ2V0VXNh
Z2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7DQorDQorICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KCkNCit7DQorICAgIGlmIChtVGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsNCisgICAgfQ0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURp
cmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2Uo
R0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkNCit7DQorICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShlczJkeDo6Q29u
dmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsN
Cit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6Omdl
dEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9DQorDQor
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsICsgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleCh0YXJnZXQpOw0KK30NCisNCitUZXh0
dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpDQorew0K
KyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAgICAgICAgbUZh
Y2VQcm94eVJlZnNbaV0gPSAwOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwOjp+VGV4
dHVyZUN1YmVNYXAoKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspDQorICAg
IHsNCisgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorfQ0KKw0KKy8vIFdl
IG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMg
YWN0aW5nIGFzIA0KKy8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4
dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSANCisvLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4
aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sDQorLy8gd2Ugc2V0IG91
ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2lu
Zw0KKy8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4NCit2b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQ
cm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sNCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0g
cHJveHkpDQorICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0rKzsNCisgICAgfQ0KK30NCisN
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAg
ICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApDQorICAgICAgICAgICAgICAgIG1GYWNlUHJv
eHlSZWZzW2ldLS07DQorDQorICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDAp
DQorICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAgICAgICB9DQor
ICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7DQorfQ0KKw0KK0dMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdA0K
K3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0K
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0dMc2l6ZWkg
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29u
c3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxd
LmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xl
bnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFy
Z2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gR0xf
Tk9ORTsNCit9DQorDQorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3JtYXQoKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDEsIGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAg
c2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5l
Z1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpDQorew0KKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoNSwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
Ow0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAg
IHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZl
bF0pOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb21taXRSZWN0KGludCBmYWNlLCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
LmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgp
KQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExldmVsID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAr
IGZhY2UsIGxldmVsKTsNCisgICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVMTCk7DQorDQor
ICAgICAgICBpZiAoZGVzdExldmVsICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
SW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsNCisgICAgICAgICAgICBp
bWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lk
IFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisg
ICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisg
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisg
ICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSBtYXAgc2FtcGxpbmcgY29tcGxldGVuZXNz
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdlIDg2Lg0KK2Jvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGludCBzaXplID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsNCisNCisgICAgYm9vbCBtaXBtYXBwaW5nOw0K
Kw0KKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJF
U1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVB
UjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCisNCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0KKyAgICB7DQor
ICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdM
X05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0N
CisNCisgICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIGlmIChnZXRXcmFwUygpICE9IEdMX0NM
QU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBp
bmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIGlmICghbWlwbWFwcGluZykNCisgICAgew0KKyAgICAgICAgaWYgKCFp
c0N1YmVDb21wbGV0ZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghaXNN
aXBtYXBDdWJlQ29tcGxldGUoKSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgp
DQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSB0ZXh0
dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2Ug
ODEuDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25zdA0KK3sNCisg
ICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVsw
XVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAgIGlmIChtSW1h
Z2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkgfHwN
CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAg
aWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9
DQorDQorICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCk7DQorDQorICAgIGludCBxID0gbG9nMihzaXplKTsNCisNCisgICAgZm9yIChp
bnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50
IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5
WzBdWzBdLmdldEZvcm1hdCgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0
V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkp
Ow0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7DQorfQ0KKw0KKy8vIENvbnN0cnVjdHMgYSBEaXJl
Y3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVy
bnMgYW4gZXhpc3Rpbmcgb25lDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgp
DQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOw0K
KyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsNCisgICAgRDNERk9S
TUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOw0KKyAgICBEV09S
RCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0K
KyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOw0KKw0KKyAgICBp
ZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAgICAgICBpbnQgbGV2ZWxz
ID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2
OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsNCisgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1
cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVUZXh0
dXJlKCkNCit7DQorICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAg
ICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOw0KKw0KKyAg
ICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpDQor
ew0KKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOw0KKw0K
KyAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQ0KKyAgICB7DQorICAg
ICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOw0KKyAgICAg
ICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7DQorICAgICAgICBEM0RG
T1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgICAg
ICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsN
CisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorICAgICAgICAgICAgZm9yIChpbnQg
ZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOw0K
KyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
LCBpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRl
c3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkNCisgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXdU
ZXhTdG9yYWdlOw0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHJlZGVmaW5l
SW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsNCisN
CisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VB
cnJheVtmYWNlSW5kZXhdW2xldmVsXSk7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlQ3Vi
ZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQ0KK3sNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDEpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kg
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7DQorICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSAzKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOw0KKyAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gNSk7DQorDQorICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmlu
ZUltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgYm9vbCByZWRlZmluZWQg
PSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRlZmluZWQpDQor
ICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgZiA9
IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQor
ICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
DQorDQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5k
ZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBy
ZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
Ow0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFy
Z2V0KTsNCisgICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAgICAgICAgQVNTRVJU
KHdpZHRoID09IGhlaWdodCk7DQorDQorICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwg
bGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsN
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4Ow0KKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Ow0K
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsNCisNCisgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQs
IHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
cHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7DQorDQorICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7DQorICAgIH0NCisNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQg
ZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7DQorDQorICAgIGlmICghbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAm
JiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpDQorICAgIHsNCisgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1U
ZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAg
ICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdl
dEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsNCisgICAgICAgICAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAg
ICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNp
emUpDQorew0KKyAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOw0KKyAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1h
dCk7DQorICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9y
bWF0LCB0eXBlKTsNCisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10
LCBtVXNhZ2UsIGZhbHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVz
YWdlLCBzaXplKTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQorDQorICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIGZvciAo
aW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHNpemUsIHNpemUsIHR5
cGUsIHRydWUpOw0KKyAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1heCgxLCBzaXplID4+IDEpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykNCisgICAgew0K
KyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUs
IDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQor
ICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBs
ZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1h
cFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOw0K
KyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZh
Y2Uoc3VyZmFjZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpDQorew0KKyAgICBpZiAoIWlz
Q3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VB
cnJheVswXVswXS5nZXRXaWR0aCgpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXBy
ZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgcSA9
IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7DQorICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVkZWZpbmVJ
bWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3JtYXQoKSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkg
Pj4gaSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1h
Z2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgpKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFy
Z2V0KCkpDQorICAgIHsNCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsg
ZisrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBp
IDw9IHE7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOw0KKyAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbG93ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAgICAgICAgIGlm
ICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpDQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxM
KSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtp
XS5tYXJrQ2xlYW4oKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAg
ZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYr
KykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFj
ZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwg
bUltYWdlQXJyYXlbZl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxU
RVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIEVS
UigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7DQorICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0Rp
cnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK1JlbmRl
cmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQ0K
K3sNCisgICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAq
KU5VTEwpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRh
cmdldCk7DQorDQorICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkNCisgICAgew0K
KyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsNCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsNCisNCisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMg
Y3JlYXRlZA0KKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICB1cGRhdGVUZXh0dXJlKCk7DQorICAg
IA0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgMCk7
DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdl
dCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQ0KKyAgICB7DQorICAgICAgICBp
ZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjgwZTI4OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC0xLDQz
MyArMSw0MjcgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDogRGVmaW5lcyB0
aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0v
LyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4
dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVSRV9I
XwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
ZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxkM2Q5
Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBTdXJm
YWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGcmFtZWJ1ZmZl
cjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVu
dGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVk
IGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUgcXVlcmllZCBmcm9tIHRo
ZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9m
IE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBJ
bWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZShHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VS
ZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30KLSAgICB2b2lk
IG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBIUkVTVUxUIGxvY2soRDNETE9D
S0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwotICAgIHZvaWQgdW5sb2Nr
KCk7Ci0KLSAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7
cmV0dXJuIG1XaWR0aDt9Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7cmV0dXJuIG1I
ZWlnaHQ7fQotICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQot
ICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAgYm9vbCBpc0Rp
cnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFs
ZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZENvbXBy
ZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotCi0gICAgdm9pZCBjb3B5
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZSk7Ci0KLSAg
ICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIEdMc2l6ZWkgbVdpZHRoOwotICAgIEdMc2l6
ZWkgbUhlaWdodDsKLSAgICBHTGVudW0gbUZvcm1hdDsKLSAgICBHTGVudW0gbVR5cGU7Ci0KLSAg
ICBib29sIG1EaXJ0eTsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9ubHkgYmUg
RDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRzIHRvIGJl
IGxvY2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKm1TdXJmYWNlOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAg
IHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7Ci0KLSAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICBEM0RQT09MIGdldFBvb2wo
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KSBjb25zdCA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UpOwotCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OwotICAgIGNv
bnN0IEQzRFBPT0wgbUQzRFBvb2w7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVT
ZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVRleHR1cmVTZXJpYWwoKTsKLQot
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOwotfTsKLQotY2xh
c3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpID0gMDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKLQot
ICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwotICAg
IGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVtIHVz
YWdlKTsKLQotICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0
TWFnRmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7Ci0gICAgR0xl
bnVtIGdldFdyYXBUKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBH
TGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RG
b3JtYXQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsK
LQotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
UmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29w
eVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRl
cnMoKSBjb25zdDsKLSAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7Ci0gICAgdm9pZCBy
ZXNldERpcnR5KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAgICB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwotCi0gICAg
Ym9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNP
TVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0
ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJh
cnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFn
ZXIuCi0KLSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1
YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLQotICAgIEdMaW50IGNyZWF0aW9uTGV2
ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
ID0gMDsKLQotICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgQmxpdCAq
Z2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFu
YWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBHTGVudW0gbU1hZ0ZpbHRlcjsK
LSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAgYm9vbCBtRGlydHlQ
YXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1EaXJ0eUltYWdlczsK
LQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdl
MkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRl
eHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQg
bGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVu
dW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4dHVy
ZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKLX07Ci0KLWNs
YXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlMkQoKTsKLQotICAgIHZvaWQg
YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBs
ZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQg
Z2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
OwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAg
IHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwot
Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQp
OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKLQot
ICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsKLSAgICB2b2lkIGNvbW1pdFJl
Y3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTJEICptVGV4U3Rv
cmFnZTsKLSAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBzcGVjaWZpYyBp
bnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVm
ZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBw
cm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlz
IHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQg
YSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxs
IGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50
IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVy
YnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgdW5zaWdu
ZWQgaW50IG1Qcm94eVJlZnM7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJU
YXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7Ci0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7Ci0KLSAgICBJRGlyZWN0M0RDdWJlVGV4dHVy
ZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRT
ZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0g
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwotCi0gICAg
flRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0gICAgCi0g
ICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5
cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwotCi0gICAgdmly
dHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
Q29tcHJlc3NlZCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygp
OwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1h
cCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKLSAg
ICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdl
KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICptVGV4U3Rv
cmFnZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtl
cHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMg
dGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcg
cG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNp
cmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVy
ZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQg
dG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3Qg
Y2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1G
YWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZzWzZdOwotfTsK
LX0KLQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gVGV4dHVyZS5oOiBEZWZpbmVzIHRo
ZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQNCisv
LyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4
dHVyZSBvYmplY3RzIGFuZA0KKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVS
RV9IXw0KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8NCisNCisjaW5jbHVkZSA8dmVjdG9y
Pg0KKw0KKyNkZWZpbmUgR0xfQVBJQ0FMTA0KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4NCisjaW5j
bHVkZSA8ZDNkOS5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisjaW5jbHVkZSAi
Y29tbW9uL1JlZkNvdW50T2JqZWN0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIg0KKw0KK25hbWVzcGFjZSBl
Z2wNCit7DQorY2xhc3MgU3VyZmFjZTsNCit9DQorDQorbmFtZXNwYWNlIGdsDQorew0KK2NsYXNz
IEJsaXQ7DQorY2xhc3MgRnJhbWVidWZmZXI7DQorDQorZW51bQ0KK3sNCisgICAgLy8gVGhlc2Ug
YXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQNCisgICAgLy8g
VGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2Fwcw0KKyAgICAv
LyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dA0KKyAgICBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorICAgIElNUExFTUVOVEFUSU9OX01BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwNCisNCisgICAgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQ0KK307
DQorDQorY2xhc3MgSW1hZ2UNCit7DQorICBwdWJsaWM6DQorICAgIEltYWdlKCk7DQorICAgIH5J
bWFnZSgpOw0KKw0KKyAgICBib29sIHJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpOw0KKyAg
ICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30NCisgICAgdm9pZCBtYXJrQ2xlYW4o
KSB7bURpcnR5ID0gZmFsc2U7fQ0KKw0KKyAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0Ow0KKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7DQorDQorICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9DQorICAgIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Qge3JldHVybiBtSGVpZ2h0O30NCisgICAgR0xlbnVtIGdldEZvcm1hdCgpIGNv
bnN0IHtyZXR1cm4gbUZvcm1hdDt9DQorICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVy
biBtVHlwZTt9DQorICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYg
bURpcnR5O30NCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsNCisNCisgICAg
dm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7DQorICAg
IHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOw0KKw0KKyAg
ICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwNCisgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsNCisNCisgICAgdm9pZCBsb2Fk
QWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNv
bnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRS
R0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCNTY1RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
DQorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2
b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQg
bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsN
CisNCisgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihJbWFnZSk7DQorDQorICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOw0KKw0KKyAgICBI
UkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3Qp
Ow0KKyAgICB2b2lkIHVubG9jaygpOw0KKw0KKyAgICBHTHNpemVpIG1XaWR0aDsNCisgICAgR0xz
aXplaSBtSGVpZ2h0Ow0KKyAgICBHTGVudW0gbUZvcm1hdDsNCisgICAgR0xlbnVtIG1UeXBlOw0K
Kw0KKyAgICBib29sIG1EaXJ0eTsNCisNCisgICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4g
b25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVl
ZHMgdG8gYmUgbG9ja2FibGUuDQorICAgIEQzREZPUk1BVCBtRDNERm9ybWF0Ow0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFn
ZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNh
Z2UpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOw0KKw0KKyAgICBib29sIGlz
UmVuZGVyVGFyZ2V0KCkgY29uc3Q7DQorICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7DQorICAg
IEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0Ow0KKyAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0Ow0K
KyAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ow0KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Qg
PSAwOw0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmVTdG9yYWdlKTsNCisNCisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOw0KKyAgICBjb25zdCBE
M0RQT09MIG1EM0RQb29sOw0KKw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJp
YWw7DQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFsKCk7DQorDQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOw0KK307DQorDQor
Y2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdA0KK3sNCisgIHB1YmxpYzoNCisg
ICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJl
KCk7DQorDQorICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkgPSAwOw0KKw0KKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBj
b25zdCA9IDA7DQorDQorICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOw0KKyAg
ICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsNCisgICAgYm9vbCBzZXRXcmFwUyhH
TGVudW0gd3JhcCk7DQorICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOw0KKyAgICBib29s
IHNldFVzYWdlKEdMZW51bSB1c2FnZSk7DQorDQorICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBj
b25zdDsNCisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0Ow0KKyAgICBHTGVudW0gZ2V0
V3JhcFMoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7DQorICAgIEdMZW51
bSBnZXRVc2FnZSgpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxl
dGUoKSBjb25zdCA9IDA7DQorDQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVy
ZSgpOw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQpID0gMDsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsN
CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsNCisNCisg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsNCisgICAgYm9vbCBoYXNEaXJ0eUlt
YWdlcygpIGNvbnN0Ow0KKyAgICB2b2lkIHJlc2V0RGlydHkoKTsNCisgICAgdW5zaWduZWQgaW50
IGdldFRleHR1cmVTZXJpYWwoKTsNCisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0Ow0K
Kw0KKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRp
Y19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3Jl
YXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJl
Z2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4NCisNCisgIHByb3RlY3RlZDoNCisg
ICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKTsNCisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaW1hZ2UpOw0KKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOw0KKyAgICBib29sIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisNCisgICAgR0xpbnQgY3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0Ow0KKyAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7DQorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0gMDsN
CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpID0gMDsNCisNCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsNCisNCisgICAgc3Rh
dGljIEJsaXQgKmdldEJsaXR0ZXIoKTsNCisgICAgc3RhdGljIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBi
b29sIGZyb21NYW5hZ2VkKTsNCisNCisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7DQorICAgIEdMZW51
bSBtTWFnRmlsdGVyOw0KKyAgICBHTGVudW0gbVdyYXBTOw0KKyAgICBHTGVudW0gbVdyYXBUOw0K
KyAgICBib29sIG1EaXJ0eVBhcmFtZXRlcnM7DQorICAgIEdMZW51bSBtVXNhZ2U7DQorDQorICAg
IGJvb2wgbURpcnR5SW1hZ2VzOw0KKw0KKyAgICBib29sIG1JbW11dGFibGU7DQorDQorICBwcml2
YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7DQorDQorICAgIHZp
cnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsN
Cit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UN
Cit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNE
VGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsNCisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOw0KKw0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJh
c2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0K
KyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdl
MkQpOw0KKw0KKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVu
c2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3MgVGV4dHVyZTJE
IDogcHVibGljIFRleHR1cmUNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmUy
RChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZTJEKCk7DQorDQorICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAgIHZvaWQgcmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
YXJnZXQoKSBjb25zdDsNCisNCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29u
c3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgRDNERk9STUFU
IGdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNDb21wcmVzc2Vk
KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25z
dDsNCisNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdl
KEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdl
Q29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
RnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7DQor
DQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ow0KKyAgICB2aXJ0
dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7DQorICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOw0KKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOw0KKw0KKyAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUo
KTsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsNCisNCisg
ICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7DQorDQorICAgIHZvaWQgcmVkZWZpbmVJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlKTsNCisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlMkQgKm1UZXhTdG9yYWdlOw0KKyAgICBl
Z2w6OlN1cmZhY2UgKm1TdXJmYWNlOw0KKw0KKyAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJl
ZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLA0K
KyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxs
IG1haW50YWluIGEgYmluZGluZyBwb2ludGVyDQorICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJl
LCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGlu
Zw0KKyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2Ug
dGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYNCisgICAgLy8gdGhlIGNvdW50IGRyb3Bz
IHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVy
Lg0KKyAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5Ow0KKyAgICB1bnNpZ25lZCBp
bnQgbVByb3h5UmVmczsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6
ZSk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOw0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBj
b25zdDsNCisNCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7DQorDQorICAgIElEaXJlY3QzREN1
YmVUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5k
ZXJUYXJnZXRTZXJpYWw7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVp
bnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsNCisNCisgICAgdm9pZCBhZGRQcm94
eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorDQorICAgIHZpcnR1YWwgR0xlbnVtIGdldFRh
cmdldCgpIGNvbnN0Ow0KKyAgICANCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgRDNERk9STUFUIGdldEQzREZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNDb21w
cmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisNCisgICAgdm9pZCBz
ZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1h
Z2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlUG9z
WihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisNCisgICAgdm9pZCBzZXRDb21wcmVzc2Vk
SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7DQorDQorICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2aXJ0dWFsIHZv
aWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOw0KKw0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0
UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGZhY2VJbmRleChHTGVudW0gZmFjZSk7DQorDQorICBwcm90ZWN0ZWQ6DQorICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJpdmF0ZToN
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsNCisNCisgICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsN
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7DQorDQorICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsNCisgICAgYm9vbCBpc01p
cG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lkIHNldEltYWdlKGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsNCisgICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7DQorICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0
eXBlKTsNCisNCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsNCisNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICptVGV4U3RvcmFn
ZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2Vw
dCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywNCisgICAgLy8gYmVjYXVzZSwgYXMg
dGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcg
cG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBj
aXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcNCisgICAgLy8gcG9pbnRlciBo
ZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNl
dCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBu
b3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4NCisgICAgUmVuZGVyYnVmZmVy
ICptRmFjZVByb3hpZXNbNl07DQorICAgIHVuc2lnbmVkIGludCAqbUZhY2VQcm94eVJlZnNbNl07
DQorfTsNCit9DQorDQogI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcw
ZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgpAQCAt
MTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4
RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAgIGNvbnN0IFZl
cnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0
ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAg
ICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2Vt
YW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0
dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChh
dHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVx
dWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGlj
IGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4
ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRv
Q1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdMZW51bSBmcm9t
VHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4g
OiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsK
IAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZl
cmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0
IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVl
LCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRU
b0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxl
PEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwg
MTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0
VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAo
aS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4
IGVlOGVjYTkuLmZiYTI1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAt
NTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFs
aWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQv
dHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIGNo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAg
Ly8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVs
b3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9B
TFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIGlu
dmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxpZCA8Zm9ybWF0
Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgorICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJl
c3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQg
KnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXByZXNzZWQgIT0g
dGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQg
IT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAg
ICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQogICAgIHsKLSAg
ICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgw
KSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+
Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAh
PSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBi
b29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVzc2Vk
KQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJl
LT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAm
JiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRX
aWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUg
dmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRjYWxs
IGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9O
T05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQs
IHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTEw
Miw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9O
RSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXND
dWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWws
IGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5z
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1NSwy
MyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAgICAg
ICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9y
bWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVy
ZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVsKTsK
KyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05P
TkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAg
ICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwg
aGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhjdWJl
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJy
b3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0
ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1h
dCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkK
ICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiArMTU2OCw5IEBA
IHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwg
R0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4LT5p
c0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0g
R0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdM
ZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRV
UkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBz
dGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0
NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0g
dGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+
aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVz
c2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+
Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmli
TG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAg
ICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3
ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dyYW0s
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBOVUxMOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFU
VVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVk
KCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAgICAgICAgICAg
ICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllf
TEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2LDEyICszOTQ5
LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6
ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwx
OCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQg
bG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5V
TEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNp
emUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1
aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdl
dFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwg
Z2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5h
bWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2NhdGlv
bihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAorICAgICAg
ICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVs
b3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VT
OgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5h
dGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVN
CisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0
cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewog
ICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVy
bmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1NCw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9P
RVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyArNTI2
Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFM
Rl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBA
IC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQsMjcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUxNDYs
NiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVY
VFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBh
bmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90
ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxl
dmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5
IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9
IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJE
KQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVM
TCkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsgLy8gZXJy
b3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3
ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8
fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yaXYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5p
Zm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9u
LCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIsNyArNjE3NCwx
MyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTg5OCw3
ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQs
IHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAg
JiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uz
RE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0CiAg
ICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxl
bmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmlu
YXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CisKKyAg
ICAgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmxl
bmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWlu
dCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAw
eCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwg
YmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1f
QklOQVJZX0FOR0xFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5VTEwpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3Mo
Y29uc3QgY2hhciAqcHJvY25hbWUpCiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNjQ5OSw3
ICs2OTI0LDggQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0
ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICoKICAgICAgICAgeyJnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKICAgICAgICAgeyJnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgfTsKKyAgICAgICAgeyJnbEdldFBy
b2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7ImdsUHJvZ3JhbUJpbmFyeU9FUyIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3JhbUJpbmFy
eU9FU30sICAgIH07CiAKICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZ2xFeHRl
bnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2ogYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKaW5k
ZXggN2QyYjY0OS4uM2JjODM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpAQCAtNDAxLDYgKzQwMSwxMCBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1C
aW5hcnkuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuXFF1ZXJ5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00OTEsNiArNDk1LDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJp
bmFyeS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
XFF1ZXJ5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmluZGV4IDdjYTJkOWYuLjdiYjIyNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKQEAg
LTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKICAgICB9
CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChHTGludCB4LCBHTGludCB5LCBH
TGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAgIFJFQ1QgcmVjdCA9
IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geSAtIGgsCi0gICAgICAgICAg
ICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geX07Ci0gICAg
cmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KEdMaW50
IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQpCi17Ci0gICAgcmV0dXJuIHN1
cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5lIEdMZW51bSBhZGp1c3RXaW5k
aW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5kaW5nID09IEdMX0NXIHx8IHdp
bmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9PSBHTF9DVyA/IEdMX0NDVyA6
IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQogewogICAgIHN0YXRpYyBi
b29sIGNoZWNrZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIxLi5hN2M2MmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCiAgICAg
fQogfQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZv
cm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RFUFRI
X1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBz
aW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29tcHV0ZVBpeGVs
U2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNhc2UgR0xfRkxP
QVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMsNTMgKzM0OCw2
IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKICAgICByZXR1
cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpOwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21i
aW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VY
VDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6
Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQg
PT0gR0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBp
bnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpAQCAtNDA3LDYg
KzM3NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xV
TUlOQU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAg
cmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOwor
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAg
ICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9y
dGVkCiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0VHlwZShHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwogICAg
ICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgY2FzZSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTYzOCw5ICs2
MTIsNiBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2Up
CiB7CiAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZF
X1g7CiAKLSAgICAvLyBNYXAgYSBjdWJlIG1hcCB0ZXh0dXJlIHRhcmdldCB0byB0aGUgY29ycmVz
cG9uZGluZyAgRDNEIHN1cmZhY2UgaW5kZXguIE5vdGUgdGhhdCB0aGUKLSAgICAvLyBZIGZhY2Vz
IGFyZSBzd2FwcGVkIGJlY2F1c2UgdGhlIFkgY29vcmRpbmF0ZSB0byB0aGUgdGV4dHVyZSBsb29r
dXAgaW50cmluc2ljIGZ1bmN0aW9ucwotICAgIC8vIGFyZSBuZWdhdGVkIGluIHRoZSBwaXhlbCBz
aGFkZXIuCiAgICAgc3dpdGNoIChjdWJlRmFjZSkKICAgICB7CiAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKQEAgLTY1MCwxMCArNjIxLDEwIEBAIEQzRENVQkVNQVBf
RkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKICAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9G
QUNFX05FR0FUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVf
WTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOworICAgICAg
ICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgIGZhY2UgPSBE
M0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKQEAgLTc2Nyw2ICs3MzgsNyBAQCBEM0RGT1JNQVQg
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQogewogICAgIHN3aXRjaCAo
Zm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVy
biBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICBjYXNlIEdMX1JHQjVf
QTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OwpAQCAtNzk0LDYgKzc2NiwxMCBAQCBuYW1lc3BhY2UgZHgyZXMKIAogdW5zaWduZWQg
aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQogeworICAgIGlmIChz
dGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgfQogICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1U
X0QyNEZTODoKQEAgLTkwNCw2ICs4ODAsMTAgQEAgdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQz
REZPUk1BVCBjb2xvckZvcm1hdCkKIAogdW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JN
QVQgZGVwdGhGb3JtYXQpCiB7CisgICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZNVF9JTlRaKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDI0OworICAgIH0KICAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0
KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVybiAxNjsKQEAg
LTk2NSw2ICs5NDUsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0
KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJldHVybiAoc3VyZmFjZUZvcm1hdCA9
PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JN
QVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1U
X0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1V
TFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVy
Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiAKIEdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
KyAgICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICB9CiAg
ICAgc3dpdGNoIChmb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDE2OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKaW5kZXgg
ODgyMzhkYy4uY2YyMjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw2ICsxNiw5IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+
CiAKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkND
KCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwogbmFtZXNwYWNlIGdsCiB7
CiAKQEAgLTM2LDkgKzM5LDkgQEAgR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkKIEdMc2l6ZWkgQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKIEdMc2l6
ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJ
c0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUpOwogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIEdM
ZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogCkBAIC03OSw2ICs4Miw4
IEBAIEdMdWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsKIEdMdWludCBH
ZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7CiBib29sIElzRmxvYXQzMkZv
cm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiBib29sIElzRmxvYXQxNkZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQg
c3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUo
RDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2ZDNk
YTdmLi42N2JkYzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMxMyw3ICsyMzEzLDIwIEBA
IElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTIzMjEsNiArMjMzNCw3
IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRy
YXZlcnNlLmNwcApAQCAtMjMzMywyMiArMjM0Nyw1MiBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlh
Z25vc3RpY3NCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0
aW9uLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJj
aFN5bWJvbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L1NoYWRlckxhbmcuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91
dGlsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODg0ODg5Li40YjhkNzNk
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDYtMjggIE1heCBWdWpvdmljICA8
bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFOR0xF
IHRvIHIxMTcwLCB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKworICAgICAgICBS
ZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpYy5jcHAg
dG8gRGlhZ25vc3RpY0Jhc2UuY3BwLgorICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgdG8gRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwLgorCisgICAgICAgIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBBTkdMRSdzIG5l
dyBwcmVwcm9jZXNzb3IsIHRoZXJlIHdlcmUgdHdvIGZpbGVzIG5hbWVkIERpYWdub3N0aWMuY3Bw
CisgICAgICAgIGluIEFOR0xFIHVuZGVyIGRpZmZlcmVudCBmb2xkZXJzLiBUaGlzIGNhdXNlZCBw
cm9ibGVtcyBvbiB0aGUgUVQgYnVpbGQgd2hlbiB0aGVpciBvYmplY3QKKyAgICAgICAgZmlsZXMs
IGJvdGggbmFtZWQgRGlhZ25vc3RpYy5vLCB0cmllZCB0byBnbyBpbiB0aGUgc2FtZSBmb2xkZXIu
IFJlbmFtaW5nIG9uZSBvZiB0aGVtIHRvCisgICAgICAgIERpYWdub3N0aWNCYXNlLmNwcCBhdm9p
ZHMgdGhpcyBjb25mbGljdC4gVGhlIHNhbWUgc2l0dWF0aW9uIG9jY3VycmVkIHdpdGgKKyAgICAg
ICAgRGlyZWN0aXZlSGFuZGxlci5jcHAuIEkgd2lsbCB0cnkgdG8gZ2V0IHRoZWlyIG5hbWVzIGNo
YW5nZWQgaW4gQU5HTEUgZm9yIGZ1dHVyZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAy
MDEyLTA2LTI3ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBNYWtlIEVsZW1lbnQ6OmVsZW1lbnRSYXJlRGF0YSgpIGFuZCBFbGVtZW50OjplbnN1cmVFbGVt
ZW50UmFyZURhdGEoKSBwcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAz
NWVjMmVjLi5kNzk0YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4OTgs
OCArNTg5OCwyMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBc
CkBAIC01OTEyLDYgKzU5MjUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlh
dGUuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQu
Y3BwIFwKQEAgLTU5MzUsNiArNTk0OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCkBAIC01OTQ0
LDYgKzU5NTksMjkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3NCYXNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKQEAgLTU5NTcsNiAr
NTk5NSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTY1LDYgKzYwMDQsMTAgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01OTcy
LDggKzYwMTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdXRpbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggN2I5NmI3
Ni4uNWYwNzIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTU2LDcgKzM5NTYsMTMgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9Db21tb24uaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
Q29uc3RhbnRVbmlvbi5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9k
ZWJ1Zy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwKKyAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisgICAg
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBc
CisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5o
IFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmgg
XAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCkBAIC0z
OTcxLDExICszOTc3LDI0IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvTU1hcC5oIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUHJhZ21hLmggXAogICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMu
aCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAorICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVy
LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwK
ICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2Vy
LmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
cmVwcm9jZXNzLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmggXApAQCAtMzk5MCwxNCArNDAwOSwxNyBAQCBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9R
dWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9S
ZW1vdmVUcmVlLmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFt
ZUZ1bmN0aW9uLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJj
aFN5bWJvbC5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaEhhbmRs
ZS5oIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5o
IFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCBcCiAgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKICAgICAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmggXApAQCAtNDAxMCwxMyArNDAzMiwyMSBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwIFwKICAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKKyAgICAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIFwKICAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgXAogICAgICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcCBcCiAgICAgICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAgXAogICAgICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwIFwKKyAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwIFwKQEAgLTQwMzQs
MTAgKzQwNjQsMTIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKICAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCiAgICAgICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAorICAgICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAogICAgICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcCBcCkBAIC00MDQ4LDYg
KzQwODAsMTcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAgICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBc
CiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5jIFwKKyAgICAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIFwKKyAgICAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZVBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCisg
ICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
by5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAg
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcCBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>
<flag name="review"
          id="158197"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="158198"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151493</attachid>
            <date>2012-07-10 11:17:30 -0700</date>
            <delta_ts>2012-07-10 13:55:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039.patch</filename>
            <type>text/plain</type>
            <size>1716649</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGEzM2M1Y2UuLmVhM2Q3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFCRTQ4MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovOyB9OworCQlB
MjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFCMTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJ
QTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNTE1OUMy
MUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Qzgx
NTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdu
b3N0aWNzLmggKi87IH07CisJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
ICovOyB9OworCQlBMjY1NjdFRjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0Ix
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjAx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQzE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjExNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICov
OyB9OworCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRTE1
OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyNjU2N0Yz
MTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyog
RXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTI2NTY3RjYx
NTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMzE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCAqLzsg
fTsKKwkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUz
OSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3
RDUxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggKi87IH07CisJCUEyNjU2N0Y5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovOyB9Owor
CQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovOyB9OworCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJCUEyNjU2
N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJl
cHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9Owor
CQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMTE1OUMyMUNFMDAzOTg1
MzkgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyNjU2ODA1MTU5QzIxQ0UwMDM5ODUzOSAv
KiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi87
IH07CisJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9r
ZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovOyB9OworCQlBMjY1NjgwQTE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFODE1OUMyMUNF
MDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi87IH07CisJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUz
OSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi87IH07CisJCUEy
NjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkQxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyNjU2ODNBMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguaCAqLzsgfTsKKwkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
ICovOyB9OworCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLzsgfTsK
KwkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMTE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTI2
NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzIxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9OworCQlBMjY1NjgzRjE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDAxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzUxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjY1Njg0
MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzYxNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI2
NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM3MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJ
CUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4Mzgx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi87IH07CiAJ
CUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhF
NjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5jcHAgKi87IH07CkBAIC02Myw3ICsxMDUsNiBAQAogCQlGQjM5RDJBODEyMDBGMzVBMDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAg
Ki87IH07CiAJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QzEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJBQzEyMDBGMzVB
MDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsgfTsKIAkJRkIz
OUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBT
aGFkZXJMYW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsxNDQsNTIgQEAK
IAkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyog
VHJhbnNsYXRvckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNs
YXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QUUxNTlDMjFC
MTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRp
bnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMzE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJl
Y3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I0MTU5
QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJh
Z21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1lRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjcxNTlDMjFCMTAwMzk4
NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyog
RGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQjE1OUMyMUNFMDAzOTg1
MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0UxNTlDMjFDRTAwMzk4NTM5
IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUzOSAv
KiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
RXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTAxNTlDMjFD
RTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcmVwcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2Vu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTgxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkExNTlDMjM4ODAwMzk4
NTM5IC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJEMTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMzE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzNzE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MiwxNSArMjQ5LDExIEBACiAJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24u
dmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSB0cmFuc2xhdG9yX2NvbW1vbi52Y3By
b2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnhtbDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IHRy
YW5zbGF0b3JfaGxzbC52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUNG
MTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAxMjAwRjI2MjAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRy
YW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQxMTIw
MEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMjEyMDBGMjYy
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8q
IEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQmFzZVR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2
OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjI0
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5LDggKzMx
Miw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAv
KiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkMxMjAw
RjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RDEyMDBGMzVB
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBAIC0y
NTUsNiArMzM2LDYyIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY1NjdDODE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDOTE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUz
OSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1
MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUz
OSAvKiBJbnB1dC5jcHAgKi8sCisJCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0
LmggKi8sCisJCQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKKwkJ
CQlBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjY1NjdENjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovLAorCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5oICovLAorCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLywKKwkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oICovLAorCQkJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNz
b3IuY3BwICovLAorCQkJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3Iu
aCAqLywKKwkJCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAq
LywKKwkJCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAorCQkJCUEy
NjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovLAorCQkJCUEyNjU2N0U3MTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwICovLAorCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRl
cGdyYXBoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
MjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlB
MjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTI2
NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAor
CQkJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
Ki8sCisJCQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgKi8sCisJCQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aE91dHB1dC5oICovLAorCQkJCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8q
IHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
QTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
Y3BwICovLAorCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggKi8sCisJCQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjY1NjgzODE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dGltaW5nOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRkIzOUQwNkUxMjAw
RUQ5MjAwMDg4RTY5ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI2OCw4ICs0MDUsOCBAQAogCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDJCRDEy
MDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFNvdXJjZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yOTIsNiArNDI5LDggQEAKIAkJCQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyog
Q29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1
Zy5jcHAgKi8sCiAJCQkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRlYnVnLmggKi8sCisJ
CQkJQTI2NTY3QUUxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICov
LAorCQkJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5Lmgg
Ki8sCiAJCQkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJ
CQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDE5
MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0zMjcsMTUgKzQ2Niwx
MyBAQAogCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJ
CUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIz
OUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJRkIzOUQxQ0Ix
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLywKLQkJCQlGQjM5
RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAqLywKIAkJCQlG
QjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZC
MzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlE
MUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRkIzOUQx
RDAxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCiAJCQkJRkIzOUQxRDEx
MjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyNjU2N0I3MTU5QzIxQjEwMDM5ODUzOSAvKiBV
bmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKIAkJCSk7CiAJCQlpbmNsdWRlSW5JbmRleCA9IDA7
CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcgKzUwNyw2IEBACiAJCUZCMzlEMjIwMTIw
MEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xC
YXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJh
c2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmNwcCAqLywK
LQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovLAotCQkJCUEw
QUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0J
CQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8s
Ci0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAot
CQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCi0JCQkJ
RkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQlGQjM5RDIy
MTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCiAJCQkJNDk5NTFDMDUxNEI3QUFE
NzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKIAkJCQk0OTk1MUMw
NjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywKQEAgLTM5
MCwxMyArNTE2LDIwIEBACiAJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50
VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICov
LAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUEyNjU2
ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLywKIAkJCQk0OTk1MUMwNzE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywKIAkJCQk0OTk1MUMwODE0QjdBQUQ4
MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCisJCQkJQTI2NTY3QjAxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKIAkJCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyog
Rm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZv
ckxvb3BVbnJvbGwuaCAqLywKKwkJCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFu
Zy5oICovLAogCQkJCTkwRDlCMEZCMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8sCiAJCQkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCAqLywK
IAkJCQk5MEQ5QjBGRDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQk5
MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAogCQkJCUZCMzlEMjJBMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQyMkIxMjAwRjM1QTAw
MDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovLApAQCAtNDA0LDM5ICs1MzcsNTAgQEAKIAkJCQlGQjM5RDIyRTEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJRkIzOUQyMkYxMjAw
RjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQlGQjM5RDIzMDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjY1NjdCNDE1OUMyMUIx
MDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzEx
MjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKIAkJCQlGQjM5
RDIzMjEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKIAkJCQlGQjM5RDIz
MzEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCiAJCQkJRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUxMjAwRjM1QTAw
MDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEyMDBGMzVBMDAw
ODhFNjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEzQUZFODMwMDBG
MkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFCRTJGMTNBRkU4
MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZCMzlEMjM3MTIw
MEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zaW5jbHVkZS5oICovLAogCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3Nv
dXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJj
ZV93aW4uY3BwICovLAorCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NM
LmNwcCAqLywKKwkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
LAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKIAkJ
CQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAorCQkJCUEwQUFC
RTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJCQkJQTBBQUJF
MzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJRkIzOUQyM0Yx
MjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlEMjQwMTIwMEYz
NUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDExMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBv
b2xBbGxvYy5oICovLAorCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAq
LywKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAogCQkJ
CUZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCiAJCQkJ
RkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCiAJCQkJRkIz
OUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJCUZCMzlEMjU5
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTI2NTY3QjYxNTlDMjFC
MTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJOTBEOUIxMDAxMkUxMURDQjAw
MkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJOTBEOUIxMDExMkUxMURDQjAwMkQ0
MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovLAogCQkJCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmNwcCAqLywKIAkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hI
YW5kbGUuaCAqLywKIAkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUu
Y3BwICovLAogCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICov
LAorCQkJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8sCisJCQkJQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0
NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQlGQjM5RDI2ODEy
MDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZCMzlEMjY5MTIw
MEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlEMjZDMTIwMEYz
NUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuaCAqLywKIAkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5j
cHAgKi8sCiAJCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLywKIAkJCQk5
MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCkBA
IC00NTMsNiArNTk3LDcgQEAKIAkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2
NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLywKIAkJCQlGQjM5RDI0NTEyMDBGMzVBMDAw
ODhFNjkgLyogYXRvbS5jICovLAogCQkJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9t
LmggKi8sCiAJCQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLywKQEAg
LTUwOCw2ICs2NTMsMjggQEAKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQzE0
QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0VEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5
ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YzMTU5
QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUEy
NjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODNFMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTg4LDcgKzc1NSw2
IEBACiAJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTAyMTJFMTFEQ0Iw
MDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MEQ5QjEwNDEyRTEx
RENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIx
MDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NjA0LDYgKzc3MCwyNiBAQAogCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5NkUg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5NTFD
MEIxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRp
YWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RUMxNTlDMjFD
RTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1
MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1OUMyMUNFMDAz
OTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgwMzE1
OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njgz
RjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IDQ3YThkYTcuLmY0MTg4MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYyIEBACisyMDEyLTA2LTI4ICBNYXggVnVq
b3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2Vi
S2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAz
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBBTkdMRSB0byByMTE3MCwgd2l0aCB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CisKKyAg
ICAgICAgUmVuYW1lIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWMuY3BwIHRvIERpYWdub3N0aWNCYXNlLmNwcC4KKyAgICAgICAgUmVuYW1lIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIHRvIERpcmVjdGl2
ZUhhbmRsZXJCYXNlLmNwcC4KKworICAgICAgICBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQU5H
TEUncyBuZXcgcHJlcHJvY2Vzc29yLCB0aGVyZSB3ZXJlIHR3byBmaWxlcyBuYW1lZCBEaWFnbm9z
dGljLmNwcAorICAgICAgICBpbiBBTkdMRSB1bmRlciBkaWZmZXJlbnQgZm9sZGVycy4gVGhpcyBj
YXVzZWQgcHJvYmxlbXMgb24gdGhlIFFUIGJ1aWxkIHdoZW4gdGhlaXIgb2JqZWN0CisgICAgICAg
IGZpbGVzLCBib3RoIG5hbWVkIERpYWdub3N0aWMubywgdHJpZWQgdG8gZ28gaW4gdGhlIHNhbWUg
Zm9sZGVyLiBSZW5hbWluZyBvbmUgb2YgdGhlbSB0bworICAgICAgICBEaWFnbm9zdGljQmFzZS5j
cHAgYXZvaWRzIHRoaXMgY29uZmxpY3QuIFRoZSBzYW1lIHNpdHVhdGlvbiBvY2N1cnJlZCB3aXRo
CisgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIuY3BwLiBJIHdpbGwgdHJ5IHRvIGdldCB0aGVpciBu
YW1lcyBjaGFuZ2VkIGluIEFOR0xFIGZvciBmdXR1cmUgdXBkYXRlcy4KKworICAgICAgICAqIEFO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9n
bDJleHQuaDoKKyAgICAgICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAg
ICAqIHNyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHNyYy9jb21tb24vYW5nbGV1dGlscy5oOgorICAgICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5o
OgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA6Cisg
ICAgICAgIChCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcDoKKyAgICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgor
ICAgICAgICAoVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0
ZUNTU1NoYWRlcik6CisgICAgICAgIChUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlv
bnMpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5n
UmVzdHJpY3Rpb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2
ZXJzZSk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHk6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkp
OgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAg
ICAgIChzaDo6RGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkpOgorICAgICAgICAo
c2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChz
aDo6Y29udGFpbnNHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuaDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChEZXRl
Y3RMb29wRGlzY29udGludWl0eSk6CisgICAgICAgIChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAg
IChURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6On5U
RGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAg
ICAoVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6cHJp
bnQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAg
ICAgKFREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0QmVoYXZpb3IpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVI
YW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIp
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFRE
aXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUV4dGVuc2lvbik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxl
VmVyc2lvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRk
ZWQuCisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFu
ZGxlcjo6cHJhZ21hKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhh
dmlvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAg
ICAgIChnZXRCZWhhdmlvclN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwOgorICAgICAgICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6
OmluaXRpYWxpemUpOgorICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKElu
aXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5k
ZXgpOgorICAgICAgICAoSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgIChG
cmVlUGFyc2VDb250ZXh0KToKKyAgICAgICAgKEdldEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRU
aHJlYWRQYXJzZUNvbnRleHRSZWMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlh
dGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRw
dXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5h
cnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2
aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAg
ICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAg
ICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6
OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxk
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oOgorICAgICAgICAoc2gpOgor
ICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6dHJhY2UpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWdu
RXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
cHJlY2lzaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJv
ckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2Vy
dmVkRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6c2FtcGxlckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjphcnJheVNldE1heFNpemUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0
RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRl
bnNpb25EaXJlY3RpdmUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGly
ZWN0aXZlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6Y29uc3RydWN0QnVpbHRJbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1
Y3RTdHJ1Y3QpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjphZGRDb25zdFN0cnVjdCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNo
ZWNrKToKKyAgICAgICAgKFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
UGFyc2VIZWxwZXIuaDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2lu
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpwcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1ByYWdtYS5oOiBBZGRlZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAg
ICAgICAoVFByYWdtYTo6VFByYWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1
bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoUmVuYW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVu
YW1lRnVuY3Rpb246OlJlbmFtZUZ1bmN0aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAg
ICAgIChUQ29tcGlsZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoK
KyAgICAgICAgKGdldFZhcmlhYmxlSW5mbyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmNwcDoKKyAgICAgICAgKFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9VbmZvbGRTZWxlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZv
bGRTaG9ydENpcmN1aXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1
aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdCk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5m
b2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJj
dWl0Ojp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNp
dFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3Ap
OgorICAgICAgICAoc2g6OlVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0Lmgu
CisgICAgICAgIChzaCk6CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvZGVidWcuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRl
bmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29w
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAg
IChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6
CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6
On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgorICAgICAgICAoVEdy
YXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnRO
b2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGRE
ZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFw
aEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRH
cmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlv
bkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAg
ICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6
OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3Jh
cGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1G
dW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5
bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJv
bCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6CisgICAgICAgIChU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rp
b24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAg
ICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFw
aExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3Jh
cGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29w
KToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dp
Y2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpi
ZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdp
blVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpl
bmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZp
c2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJn
dW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlv
bkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rp
b24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9u
RGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5j
dGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVn
YXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVT
ZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAg
ICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWlu
dGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5l
cjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9w
YWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRh
aW5lcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHA6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50
YXRpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lH
cmFwaE91dHB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlLmNwcDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6
CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJz
ZSk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNl
bGVjdGlvbjo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAg
ICAgICAoVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L2dsc2xhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAq
IHNyYy9jb21waWxlci9nbHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9y
KToKKyAgICAgICAgKGdsc2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlh
dGUuaDoKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAg
ICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVElu
dGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRl
KToKKyAgICAgICAgKFRJbnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAgICAgIChQcmlu
dEF0b21UYWJsZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoK
KyAgICAgICAgKENQUHByYWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQ
cmVkZWZpbmVJbnRNYWNybyk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKERpYWdub3N0aWNzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaWFnbm9zdGljc0Jhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBw
OjpEaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6
cmVwb3J0KToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6c2V2ZXJpdHkpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQu
CisgICAgICAgIChwcCk6CisgICAgICAgIChEaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHA6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJl
Y3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdldERpcmVjdGl2ZSk6CisgICAg
ICAgIChpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKToKKyAgICAgICAgKGlzRU9EKToKKyAgICAgICAg
KHNraXBVbnRpbEVPRCk6CisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAg
KGlzTWFjcm9QcmVkZWZpbmVkKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKERlZmluZWRQYXJz
ZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQYXJzZXIpOgorICAgICAg
ICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6bGV4KToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAgICAgICAgKHBwOjpEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZik6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToKKyAgICAgICAgKHBwOjpE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
VmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUpOgorICAg
ICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRXhwcmVzc2lvbklmZGVmKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAg
IChEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAoQ29uZGl0aW9uYWxCbG9jayk6CisgICAgICAg
IChwcDo6RGlyZWN0aXZlUGFyc2VyOjpDb25kaXRpb25hbEJsb2NrOjpDb25kaXRpb25hbEJsb2Nr
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAuCisgICAgICAgICh5eXN5bnRheF9lcnJvcik6
CisgICAgICAgICh5eWxleCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKHBwKToKKyAg
ICAgICAgKHBwOjpFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAg
KHBwOjpFeHByZXNzaW9uUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToK
KyAgICAgICAgKEV4cHJlc3Npb25QYXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueTogQWRkZWQuCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwOgorICAgICAgICAocHA6OklucHV0OjpJ
bnB1dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWQpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0Lmg6CisgICAgICAgIChwcCk6CisgICAgICAgIChJbnB1
dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OmNvdW50KToKKyAgICAgICAgKHBwOjpJbnB1dDo6c3Ry
aW5nKToKKyAgICAgICAgKHBwOjpJbnB1dDo6bGVuZ3RoKToKKyAgICAgICAgKExvY2F0aW9uKToK
KyAgICAgICAgKHBwOjpJbnB1dDo6TG9jYXRpb246OkxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpJ
bnB1dDo6cmVhZExvYyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TGV4ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpMZXhlcjo6fkxl
eGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oOiBB
ZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHA6CisgICAgICAgIChwcDo6TWFjcm86OmVx
dWFscyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaDoK
KyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpNYWNybzo6TWFjcm8pOgorICAgICAgICAoTWFj
cm8pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFRva2VuTGV4ZXIpOgorICAg
ICAgICAocHA6OlRva2VuTGV4ZXI6OlRva2VuTGV4ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4
ZXI6OmxleCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcik6Cisg
ICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6
Ok1hY3JvRXhwYW5kZXI6OmxleCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Z2V0VG9r
ZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4pOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKToKKyAgICAgICAgKHBwOjpN
YWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnBv
cE1hY3JvKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyk6CisgICAg
ICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmg6IEFkZGVkLgorICAgICAgICAocHAp
OgorICAgICAgICAoTWFjcm9FeHBhbmRlcik6CisgICAgICAgIChNYWNyb0NvbnRleHQpOgorICAg
ICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6TWFjcm9Db250ZXh0KToKKyAg
ICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OmVtcHR5KToKKyAgICAgICAg
KHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OmdldCk6CisgICAgICAgIChwcDo6TWFj
cm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0Ojp1bmdldCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFByZXByb2Nlc3Nv
ckltcGwpOgorICAgICAgICAocHA6OlByZXByb2Nlc3NvckltcGw6OlByZXByb2Nlc3NvckltcGwp
OgorICAgICAgICAocHApOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29y
KToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IpOgorICAgICAgICAo
cHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpwcmVk
ZWZpbmVNYWNybyk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjpsZXgpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oOgorICAgICAgICAo
cHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAg
ICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291cmNlTG9jYXRpb24pOgorICAgICAgICAoU291
cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjplcXVhbHMpOgorICAg
ICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcDoKKyAgICAgICAgKHBw
OjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6OlRva2VuOjplcXVhbHMpOgorICAgICAgICAo
cHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0SGFz
TGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0RXhw
YW5zaW9uRGlzYWJsZWQpOgorICAgICAgICAocHA6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmg6CisgICAgICAgIChwcDo6VG9rZW46
OlRva2VuKToKKyAgICAgICAgKFRva2VuKToKKyAgICAgICAgKHBwOjpUb2tlbjo6YXRTdGFydE9m
TGluZSk6CisgICAgICAgIChwcDo6VG9rZW46Omhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAgIChw
cDo6VG9rZW46OmV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHl5X2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgICh5eV90cmFuc19pbmZvKToKKyAgICAgICAgKHl5
Z3V0c190KToKKyAgICAgICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90
cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGlucHV0KToKKyAgICAgICAgKHBwcmVzdGFydCk6Cisg
ICAgICAgIChwcF9zd2l0Y2hfdG9fYnVmZmVyKToKKyAgICAgICAgKHBwX2xvYWRfYnVmZmVyX3N0
YXRlKToKKyAgICAgICAgKHBwX2NyZWF0ZV9idWZmZXIpOgorICAgICAgICAocHBfZGVsZXRlX2J1
ZmZlcik6CisgICAgICAgIChwcF9pbml0X2J1ZmZlcik6CisgICAgICAgIChwcF9mbHVzaF9idWZm
ZXIpOgorICAgICAgICAocHBwdXNoX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcHBvcF9idWZm
ZXJfc3RhdGUpOgorICAgICAgICAocHBlbnN1cmVfYnVmZmVyX3N0YWNrKToKKyAgICAgICAgKHBw
X3NjYW5fYnVmZmVyKToKKyAgICAgICAgKHBwX3NjYW5fc3RyaW5nKToKKyAgICAgICAgKHBwX3Nj
YW5fYnl0ZXMpOgorICAgICAgICAoeXlfZmF0YWxfZXJyb3IpOgorICAgICAgICAocHBnZXRfZXh0
cmEpOgorICAgICAgICAocHBnZXRfbGluZW5vKToKKyAgICAgICAgKHBwZ2V0X2NvbHVtbik6Cisg
ICAgICAgIChwcGdldF9pbik6CisgICAgICAgIChwcGdldF9vdXQpOgorICAgICAgICAocHBnZXRf
bGVuZyk6CisgICAgICAgIChwcGdldF90ZXh0KToKKyAgICAgICAgKHBwc2V0X2V4dHJhKToKKyAg
ICAgICAgKHBwc2V0X2xpbmVubyk6CisgICAgICAgIChwcHNldF9jb2x1bW4pOgorICAgICAgICAo
cHBzZXRfaW4pOgorICAgICAgICAocHBzZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2RlYnVnKToK
KyAgICAgICAgKHBwc2V0X2RlYnVnKToKKyAgICAgICAgKHBwZ2V0X2x2YWwpOgorICAgICAgICAo
cHBzZXRfbHZhbCk6CisgICAgICAgIChwcGdldF9sbG9jKToKKyAgICAgICAgKHBwc2V0X2xsb2Mp
OgorICAgICAgICAocHBsZXhfaW5pdCk6CisgICAgICAgIChwcGxleF9pbml0X2V4dHJhKToKKyAg
ICAgICAgKHl5X2luaXRfZ2xvYmFscyk6CisgICAgICAgIChwcGxleF9kZXN0cm95KToKKyAgICAg
ICAgKHl5X2ZsZXhfc3RybmNweSk6CisgICAgICAgICh5eV9mbGV4X3N0cmxlbik6CisgICAgICAg
IChwcGFsbG9jKToKKyAgICAgICAgKHBwcmVhbGxvYyk6CisgICAgICAgIChwcGZyZWUpOgorICAg
ICAgICAocHApOgorICAgICAgICAocHA6OlRva2VuaXplcjo6VG9rZW5pemVyKToKKyAgICAgICAg
KHBwOjpUb2tlbml6ZXI6On5Ub2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6aW5p
dCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKToKKyAgICAgICAgKHBw
OjpUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6bGV4
KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXRTY2FubmVyKToKKyAgICAgICAgKHBwOjpU
b2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChU
b2tlbml6ZXIpOgorICAgICAgICAoQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmw6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnk6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90
eXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6
CisgICAgICAgIChJbml0U2Nhbm5lcklucHV0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5j
OgorICAgICAgICAoUmVhZFRva2VuKToKKyAgICAgICAgKER1bXBUb2tlblN0cmVhbSk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDoKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5m
b3JjZVJlc3RyaWN0aW9ucyk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UpOgorICAgICAgICAoUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcik6CisgICAgICAgIChSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zzo6UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcDoKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4
dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6Cisg
ICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAg
ICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJm
YWNlKToKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6On5TdXJmYWNlKToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OnJlbGVhc2UpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6Cisg
ICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXBSZWN0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
Z2V0V2luZG93SGFuZGxlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZVdpbmRvd1Byb2MpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdyk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OnVuc3ViY2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpjaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmNvbnZlcnRJbnRlcnZh
bCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXApOgorICAgICAgICAoZWdsOjpTdXJmYWNl
Ojpwb3N0U3ViQnVmZmVyKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0V2lkdGgpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRIZWlnaHQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKToKKyAgICAgICAgKGVnbDo6
U3VyZmFjZTo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0VGV4
dHVyZUZvcm1hdCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUpOgorICAgICAgICAoZWdsOjpT
dXJmYWNlOjpnZXRCb3VuZFRleHR1cmUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRGb3Jt
YXQpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAgICAgICAoU3VyZmFjZSk6
CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6Q29udGV4dCk6CisgICAgICAg
IChnbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJrQWxsU3RhdGVE
aXJ0eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6bWFya0NvbnRleHRMb3N0KToKKyAgICAgICAgKGdsOjpDb250ZXh0
Ojppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVhckNvbG9yKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVhckRlcHRoKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRDbGVhclN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxGYWNl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxlZCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0Q3VsbE1vZGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyb250
RmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhUZXN0KToKKyAgICAgICAgKGds
OjpDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dERlcHRoRnVuYyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhSYW5nZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzQmxl
bmRFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldEJsZW5kQ29sb3IpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEJsZW5kRXF1YXRpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxUZXN0
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0U3RlbmNpbEJhY2tQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxX
cml0ZW1hc2spOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNr
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNQ
b2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFBvbHln
b25PZmZzZXRQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9D
b3ZlcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VF
bmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXRTY2lzc29yVGVzdCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTY2lzc29yVGVzdEVu
YWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldERpdGhlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6aXNEaXRoZXJFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRMaW5l
V2lkdGgpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFNjaXNzb3JQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldENvbG9y
TWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhNYXNrKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRBY3RpdmVTYW1wbGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRS
ZWFkRnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFu
ZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0QWN0aXZlUXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4QXR0cmli
U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFBh
Y2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFVucGFja0FsaWdubWVudCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Y3JlYXRlRmVuY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVF1ZXJ5KToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRmVuY2UpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFNoYWRlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0UHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERy
YXdGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZEFycmF5QnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5k
VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnVzZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJlZ2luUXVlcnkpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmVuZFF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFt
ZWJ1ZmZlclplcm8pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRGZW5jZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UXVlcnkpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEN1
cnJlbnRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlMkQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0Qm9vbGVh
bnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZsb2F0dik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1l
dGVySW5mbyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFw
cGx5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseUluZGV4QnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVNoYWRlcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmFwcGx5VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpk
cmF3QXJyYXlzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN5bmMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRyYXdMaW5lTG9v
cCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
cmVjb3JkSW52YWxpZE9wZXJhdGlvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkT3V0
T2ZNZW1vcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RXJyb3IpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFJlc2V0U3RhdHVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1Jl
c2V0Tm90aWZpY2F0aW9uRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNT
aGFkZXJNb2RlbDMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBs
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNEWFQzVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1
cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNMdW1p
bmFuY2VBbHBoYVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RlcHRo
VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1cmUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZyk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6ZGV0YWNoQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hUZXh0dXJlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJ
bmNvbXBsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3VsbFNraXBzRHJhdyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNUcmlhbmdsZU1vZGUpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFZlcnRleEF0dHJpYik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4
QXR0cmliRGl2aXNvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmlu
Zyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAg
KGdsOjpDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFJlbmRlcmVyU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0
aW9uQ2FjaGUpOgorICAgICAgICAoZ2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjph
cHBseURlY2xhcmF0aW9uKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjpt
YXJrU3RhdGVEaXJ0eSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAg
ICAgIChDb250ZXh0KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAg
KGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmg6CisgICAgICAgIChGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1
dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OkluZm9M
b2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6On5JbmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZv
TG9nOjpnZXRMZW5ndGgpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmdldExvZyk6CisgICAgICAg
IChnbDo6SW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjph
cHBlbmQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OnJlc2V0KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OmxpbmspOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpn
ZXRBdHRyaWJ1dGVCaW5kaW5nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dy
YW06OnNldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2dM
ZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6
OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjp2YWxpZGF0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5oOgorICAgICAgICAoZ2wpOgorICAg
ICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoSW5mb0xvZyk6CisgICAgICAgIChQ
cm9ncmFtKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
LgorICAgICAgICAoZ2w6OnN0cik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6VW5pZm9y
bTo6VW5pZm9ybSk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06OmlzQXJyYXkpOgorICAgICAgICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5p
Zm9ybUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
Z2V0QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNl
bWFudGljSW5kZXgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVy
UmFuZ2UpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6Cisg
ICAgICAgIChnbDo6dHJhbnNwb3NlTWF0cml4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4NGZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Y29tcGlsZVRvQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFy
eWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6bGlua0F0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtVbmlm
b3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybSk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5h
cnk6OnVuZGVjb3JhdGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1uYnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5m
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm1uaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6dmFsaWRhdGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2Ft
cGxlcnMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24pOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24pOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaC4KKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKFVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6UmVnaXN0
ZXJJbmZvKToKKyAgICAgICAgKFJlZ2lzdGVySW5mbyk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6
UmVnaXN0ZXJJbmZvOjpzZXQpOgorICAgICAgICAoVW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoU2FtcGxlcik6CisgICAgICAgICogc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldElu
dGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQz
REZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVz
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpn
ZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6
CisgICAgICAgIChnbCk6CisgICAgICAgIChSZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcDoKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEluZm9Mb2cpOgorICAgICAgICAo
Z2w6OlNoYWRlcjo6Z2V0U291cmNlSW1wbCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuaDoKKyAgICAgICAgKFNoYWRlcik6CisgICAgICAgIChWZXJ0ZXhTaGFkZXIpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbCk6CisgICAgICAgIChn
bDo6Q29udmVydFRleHR1cmVGb3JtYXRUeXBlKToKKyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKToKKyAgICAgICAgKGdsOjpHZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAo
Z2w6OkltYWdlOjpJbWFnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6On5JbWFnZSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OnJlZGVmaW5lKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFj
ZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvY2spOgorICAgICAgICAoZ2w6OkltYWdlOjp1bmxv
Y2spOgorICAgICAgICAoZ2w6OkltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQpOgorICAgICAgICAo
Z2w6OkltYWdlOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRTdXJmYWNl
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UpOgorICAgICAgICAoZ2w6
OkltYWdlOjp1cGRhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZERhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZEFscGhhRGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFGbG9hdERh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5j
ZUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKToK
KyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSk6Cisg
ICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdl
Ojpsb2FkUkdCNTY1RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEp
OgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRSR0JBVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEpOgorICAgICAgICAoZ2w6Oklt
YWdlOjpsb2FkUkdCQUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBSGFs
ZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRCR1JBRGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmNv
cHkpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6On5UZXh0dXJlU3RvcmFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3Rv
cmFnZTo6aXNNYW5hZ2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0
b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVy
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6flRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6OnNldE1pbkZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0TWFnRmlsdGVyKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRXcmFwUyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0V3JhcFQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFVzYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpnZXRNaW5GaWx0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldE1hZ0Zp
bHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmdldFdyYXBUKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRVc2FnZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJz
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcyk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6cmVzZXREaXJ0eSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0VGV4dHVyZVNl
cmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjppc0ltbXV0YWJsZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
Y3JlYXRpb25MZXZlbHMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxldmVsQ291bnQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OmdldEJsaXR0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNv
cHlUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVy
ZVN0b3JhZ2UyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9y
YWdlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbCk6
CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6flRl
eHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjphZGRQcm94eVJlZik6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0VGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRJ
bnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVsZWFzZVRleEltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojpjb21taXRSZWN0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNNaXBt
YXBDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc0NvbXByZXNzZWQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6aXNEZXB0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpn
ZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRl
eHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OmdlbmVyYXRlTWlwbWFwcyk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpnZXRTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1
cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEN1YmVNYXBTdXJmYWNlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRl
eHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJl
TWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpnZXRUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRX
aWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2VQb3NYKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VO
ZWdYKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VOZWdaKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3Nl
ZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0N1
YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNv
bXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvbnZl
cnRUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJ
bWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRTdG9y
YWdlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuaDoKKyAgICAgICAgKGVnbCk6
CisgICAgICAgIChnbCk6CisgICAgICAgIChJbWFnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6Om1h
cmtEaXJ0eSk6CisgICAgICAgIChnbDo6SW1hZ2U6Om1hcmtDbGVhbik6CisgICAgICAgIChnbDo6
SW1hZ2U6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0SGVpZ2h0KToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0VHlwZSk6
CisgICAgICAgIChnbDo6SW1hZ2U6OmlzRGlydHkpOgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2Up
OgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAg
ICAgKFRleHR1cmUyRCk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAgICAg
ICAoVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1h
bmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4
RGF0YSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwOgorICAgICAgICAo
Y2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL21h
dGh1dGlsLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAg
ICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb21w
dXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0Rm9ybWF0KToKKyAgICAgICAgKGds
OjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydEN1YmVGYWNlKToKKyAgICAg
ICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpH
ZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChkeDJlczo6R2V0RGVwdGhTaXplKToKKyAgICAgICAg
KGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChkeDJlcyk6CisgICAgICAg
IChkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChkeDJlczo6Q29udmVy
dERlcHRoU3RlbmNpbEZvcm1hdCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
aDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGR4MmVzKToKKwogMjAxMi0wNi0yMiAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIFNhbml0aXplIEdMU0wgY29kZSB1c2luZyBBTkdMRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCmluZGV4IGExMjQwMTQuLmUyOTdmYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaApAQCAt
MjM4LDYgKzIzOCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4
OEZFCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xf
QU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
QEAgLTE0ODcsNiArMTQ5MiwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVO
RFRJTElOR1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOwogI2RlZmluZSBHTF9W
SVZfc2hhZGVyX2JpbmFyeSAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkg
Ki8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkgMQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVy
TGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaAppbmRleCBhM2ZjOTM1Li45YTRhMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTM0LDcgKzM0LDcgQEAg
ZXh0ZXJuICJDIiB7CiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRpb24g
QVBJLgogLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4KLSNk
ZWZpbmUgU0hfVkVSU0lPTiAxMDUKKyNkZWZpbmUgU0hfVkVSU0lPTiAxMDcKIAogLy8KIC8vIFRo
ZSBuYW1lcyBvZiB0aGUgZm9sbG93aW5nIGVudW1zIGhhdmUgYmVlbiBkZXJpdmVkIGJ5IHJlcGxh
Y2luZyBHTCBwcmVmaXgKQEAgLTQ5LDcgKzQ5LDI5IEBAIHR5cGVkZWYgZW51bSB7CiAKIHR5cGVk
ZWYgZW51bSB7CiAgIFNIX0dMRVMyX1NQRUMgPSAweDhCNDAsCi0gIFNIX1dFQkdMX1NQRUMgPSAw
eDhCNDEKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MSwKKworICAvLyBUaGUgQ1NTIFNoYWRlcnMg
c3BlYyBpcyBhIHN1YnNldCBvZiB0aGUgV2ViR0wgc3BlYy4KKyAgLy8KKyAgLy8gSW4gYm90aCBD
U1MgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEpIFJlc2VydmVz
IHRoZSAiY3NzXyIgcHJlZml4LgorICAvLyAoMikgUmVuYW1lcyB0aGUgbWFpbiBmdW5jdGlvbiB0
byBjc3NfbWFpbi4KKyAgLy8gKDMpIERpc2FibGVzIHRoZSBnbF9NYXhEcmF3QnVmZmVycyBidWls
dC1pbi4KKyAgLy8KKyAgLy8gSW4gQ1NTIGZyYWdtZW50IHNoYWRlcnMsIEFOR0xFOgorICAvLyAo
MSkgRGlzYWJsZXMgdGhlIGdsX0ZyYWdDb2xvciBidWlsdC1pbi4KKyAgLy8gKDIpIERpc2FibGVz
IHRoZSBnbF9GcmFnRGF0YSBidWlsdC1pbi4KKyAgLy8gKDMpIEVuYWJsZXMgdGhlIGNzc19NaXhD
b2xvciBidWlsdC1pbi4KKyAgLy8gKDQpIEVuYWJsZXMgdGhlIGNzc19Db2xvck1hdHJpeCBidWls
dC1pbi4KKyAgLy8KKyAgLy8gQWZ0ZXIgcGFzc2luZyBhIENTUyBzaGFkZXIgdGhyb3VnaCBBTkdM
RSwgdGhlIGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gYXBwZW5kCisgIC8vIGEgbmV3IG1haW4gZnVu
Y3Rpb24gdG8gaXQuCisgIC8vIFRoaXMgbmV3IG1haW4gZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBj
c3NfbWFpbiBmdW5jdGlvbi4KKyAgLy8gSXQgbWF5IGFsc28gcGVyZm9ybSBhZGRpdGlvbmFsIG9w
ZXJhdGlvbnMgbGlrZSB2YXJ5aW5nIGFzc2lnbm1lbnQsIHRleHR1cmUKKyAgLy8gYWNjZXNzLCBh
bmQgZ2xfRnJhZ0NvbG9yIGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBDU1Mg
U2hhZGVycworICAvLyBibGVuZCBtb2Rlcy4KKyAgLy8KKyAgU0hfQ1NTX1NIQURFUlNfU1BFQyA9
IDB4OEI0MgogfSBTaFNoYWRlclNwZWM7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0xMDQsNyArMTI2
LDIzIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91
bmQgZm9yIGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgotICBTSF9FTVVMQVRFX0JVSUxUX0lO
X0ZVTkNUSU9OUyA9IDB4MDEwMAorICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4
MDEwMCwKKworICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2UgcmVz
dHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgCisgIC8vIHRpbWluZyBhdHRhY2tzLgorICAv
LyBJdCBnZW5lcmF0ZXMgY29tcGlsYXRpb24gZXJyb3JzIGZvciBzaGFkZXJzIHRoYXQgY291bGQg
ZXhwb3NlIHNlbnNpdGl2ZQorICAvLyB0ZXh0dXJlIGluZm9ybWF0aW9uIHZpYSB0aGUgdGltaW5n
IGNoYW5uZWwuCisgIC8vIFRvIHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IGNvbXBpbGUgdGhlIHNo
YWRlciB1bmRlciB0aGUgV2ViR0wgc3BlYworICAvLyAodXNpbmcgdGhlIFNIX1dFQkdMX1NQRUMg
ZmxhZykuCisgIFNIX1RJTUlOR19SRVNUUklDVElPTlMgPSAweDAyMDAsCisgICAgCisgIC8vIFRo
aXMgZmxhZyBwcmludHMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCBpcyB1c2VkIHRvIGVuZm9y
Y2UgdGltaW5nCisgIC8vIHJlc3RyaWN0aW9ucyBvbiBmcmFnbWVudCBzaGFkZXJzLgorICAvLyBU
aGlzIGZsYWcgb25seSBoYXMgYW4gZWZmZWN0IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0
cnVlOgorICAvLyAtIFRoZSBzaGFkZXIgc3BlYyBpcyBTSF9XRUJHTF9TUEVDLgorICAvLyAtIFRo
ZSBjb21waWxlIG9wdGlvbnMgY29udGFpbiB0aGUgU0hfVElNSU5HX1JFU1RSSUNUSU9OUyBmbGFn
LgorICAvLyAtIFRoZSBzaGFkZXIgdHlwZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIuCisgIFNIX0RF
UEVOREVOQ1lfR1JBUEggPSAweDA0MDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDA5YjYyMi4uNTY1ZGI3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2Fu
Z2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ3LDkgKzQ3LDMyIEBACiAJCTg4OEYx
MzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcu
Y3BwICovOyB9OwogCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsg
fTsKIAkJOTNBNDFBRjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3
RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTk4ODZCQ0Q1RDBERDY5
QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi87IH07CiAJCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAvKiBPdXRwdXRHTFNM
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OwogCQk5
RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYg
LyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owor
CQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyMTE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHBy
ZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5MTU5QzMxQTAwMEU1
N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjAxMDg0MjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkYxNTlD
MzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OworCQlBMjAxMDg0NDE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9j
ZXNzb3IuY3BwICovOyB9OworCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzYx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDYxNTlDMzFBMDAw
RTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87
IH07CisJCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyMDEwODY0MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjUxNTlDMzI0
RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NjYxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyMDEwODY3MTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1
NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjAxMDg2OTE1
OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NkIxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjAxMDg2QzE1OUMzMjRGMDBFNTdC
QkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTIwMTA4NzExNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovOyB9OworCQlBMjAxMDg3MjE1OUMzMjYyMDBFNTdCQkUgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1
aXQuY3BwICovOyB9OwogCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDM2RUZG
MDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CiAJCUFEODU1MTdGMDg2
RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICov
OyB9OwogCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkUyNTg0ODYwMDVG
NjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKQEAgLTEwNCw3ICsxMjcs
NiBAQAogCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5NEY0NDJB
MjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBV
bmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
REREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9jb21tb24uYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE0Nyw2ICsxNjksNTkgQEAKIAkJOUQ0N0Ix
QUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1
YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQ0U0MzYzMTg0
OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE2NDRCMDBFOTMwNEM0MDdG
REM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBsaWJ0cmFuc2xhdG9yX2dsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9u
IGNvcHkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gImxpYnRyYW5zbGF0b3JfY29t
bW9uIGNvcHkuYSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEw
ODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjIxNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZl
UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI1MTU5QzMxQTAw
MEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJBMTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvRXhwYW5k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMDE1OUMzMUEwMDBF
NTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODMx
MTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgz
MjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNjE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdC
QkUgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzgxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzOTE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0ODE1OUMz
MjA5MDBFNTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRBMTU5QzMyNEYwMEU1
N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRF
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTExNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlh
Z25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25v
c3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NjE1OUMzMjRG
MDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTcx
NTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5k
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuc2lvbkJlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUg
LyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyog
UmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1l
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVGMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NjExNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZEMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29u
dGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250
aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZGMTU5QzMyNjIw
MEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTQ0N0Y3NUYzM0RBNEM0QzEyM0FDOTUy
IC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJ0cmFuc2xhdG9yX2hsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVF
RUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OCw3ICsyNTMsNiBAQAogCQlEREQzQjdF
M0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1P
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUVBRkM2MThBM0IzM0YxRkJG
RTM1MzYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNFMDlEQzhFMUJG
NUQyOTU4QUFDRURFIC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1i
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MCw2ICsyNjQsMTMgQEAKIC8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQlBNUM5OTRFNzREQjFF
NjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTIyMyw4ICsz
MDQsMTAgQEAKIAkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCiAJCQkJ
NTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAogCQkJCTgwNThBMEEyQTBBMDIz
ODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKKwkJCQlBMjAxMDg0ODE1OUMzMjA5MDBFNTdC
QkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAogCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAv
KiBtZW1vcnkuYyAqLywKIAkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8sCisJCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKIAkJCQlDRkQxMkM2
RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCiAJCQkJNkJCQzgyMjRCOUQ4RTIzNEQx
MTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKIAkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQg
Lyogc2Nhbm5lci5jICovLApAQCAtMjQxLDE1ICszMjQsMzIgQEAKIAkJMTk2REI2QUIwMDZCQjgz
NTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywK
IAkJCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCisJCQkJQTIw
MTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywK
KwkJCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCAqLywKIAkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCiAJ
CQkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAogCQkJCTBBMTE4RTUw
MDNFNUMwRTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCiAJCQkJQjJGNUNBMTFFRUE5MkRG
MjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAorCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAorCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywK
KwkJCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAg
Ki8sCisJCQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHku
aCAqLywKKwkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCAqLywKKwkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8sCisJCQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywK
KwkJCQlBMjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlB
MjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJ
QTIwMTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlB
MjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKIAkJCQk1
REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCiAJCQkJMTgy
QkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAorCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5o
ICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTI1NywxMiArMzU3LDE4IEBACiAJCQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIElu
aXRpYWxpemVEbGwuY3BwICovLAogCQkJCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0
aWFsaXplRGxsLmggKi8sCiAJCQkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxp
emVHbG9iYWxzLmggKi8sCisJCQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovLAogCQkJCTg1ODQ1RkZGNUE4RTYzMzY0MzA4MjM2RCAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCi0JCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFC
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYg
LyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyog
TU1hcC5oICovLAorCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUu
aCAqLywKKwkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywK
KwkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAor
CQkJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAog
CQkJCTU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8sCiAJCQkJODFDQzQyNDVBOEU1QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmggKi8sCisJCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQlD
OEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYw
MDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKIAkJCQlEQjI5MTdDNUI2
MjQ3MTIzNjRERTRBNzUgLyogT3V0cHV0RVNTTC5jcHAgKi8sCiAJCQkJNkJCNjZBQjU4NzM4NjhF
MjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLywKIAkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMz
NTEgLyogT3V0cHV0R0xTTC5jcHAgKi8sCkBAIC0yNzEsMjAgKzM3NywyNSBAQAogCQkJCUI1NUIz
NTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAogCQkJCTlBNUI1QkIy
NTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKIAkJCQk1QTIxNTk5QzU5QkMx
QTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAorCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZG
OURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKIAkJCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYg
LyogUGFyc2VIZWxwZXIuY3BwICovLAogCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQ
YXJzZUhlbHBlci5oICovLAogCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxs
b2MuY3BwICovLAogCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAq
LywKKwkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCisJCQkJMEU4
RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5
RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAogCQkJCTlENDdCMUFDODJF
NEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZD
QjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFG
QTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBT
ZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFy
Y2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUu
aCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8s
CisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdF
NUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEy
QUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQlBMjAxMDg1RDE1OUMz
MjRGMDBFNTdCQkUgLyogdGltaW5nICovLAogCQkJCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJRDUzREREMENERjE1RUUxREQwMUYxQTIwIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZCNzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5MiwyOSArNDAzLDE3IEBACiAJCQkJQzNEQUZGNkJG
MTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlD
MjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZG
OTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkg
LyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyog
VW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8s
CisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2
N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAy
NTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQky
N0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5
MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFibGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkw
NjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQy
RkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8s
Ci0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJ
CQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMx
MjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVB
M0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3
M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8q
IG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyog
cGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0
ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJ
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7CkBAIC0zMjksNiArNDI4LDYyIEBACiAJCQkp
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTIwMTA4MUUxNTlDMzFBMDAw
RTU3QkJFIC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjAxMDgyMDE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTIw
MTA4MjIxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjAx
MDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAx
MDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyMDEw
ODI2MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjAxMDgyQTE1OUMzMUEw
MDBFNTdCQkUgLyogSW5wdXQuaCAqLywKKwkJCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICov
LAorCQkJCUEyMDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTIw
MTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmggKi8sCisJCQkJQTIwMTA4MkYxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyMDEwODMwMTU5QzMxQTAw
MEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3
QkJFIC8qIHBwX3V0aWxzLmggKi8sCisJCQkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTIwMTA4MzMxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5oICovLAorCQkJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovLAorCQkJCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8s
CisJCQkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8sCisJCQkJQTIwMTA4
MzgxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTIwMTA4MzkxNTlD
MzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg0QjE1OUMzMjRGMDBFNTdC
QkUgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCUEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICov
LAorCQkJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLywK
KwkJCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8sCisJCQkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLywKKwkJCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3JhcGg7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg1RDE1OUMzMjRGMDBF
NTdCQkUgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgKi8sCisJCQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyMDEwODYxMTU5QzMy
NEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMx
ODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMzQ0LDYgKzQ5OSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0
REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMw
NEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNE
QTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovLAogCQkJKTsK
IAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODMs
NiArNTM5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4
QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20u
YXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKIAkJfTsKKwkJQTIwMTA3REMxNTlD
MzEzQzAwRTU3QkJFIC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdC
QkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXBy
b2Nlc3NvciIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlBMjAxMDdERDE1OUMzMTNDMDBF
NTdCQkUgLyogU291cmNlcyAqLywKKwkJCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVu
Y2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gcHJlcHJvY2Vzc29yOworCQkJcHJvZHVjdE5hbWUg
PSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMz
MTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovOworCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CiAJ
CUE4MzhFOTU3NEIzRkYxNDc5MURCREFCMSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7CiAJCQlp
c2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5
Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovOwpAQCAtNDA5LDcgKzU4MSwxMSBAQAogCQkJ
fTsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIg
Ki87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJZGV2ZWxvcG1l
bnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlr
bm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJCQkpOwogCQkJbWFpbkdyb3VwID0gNUJCRUZGOUI5
MTczODI5N0I5NUM1NjhEOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290
ID0gIiI7CkBAIC00MTgsNiArNTk0LDcgQEAKIAkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIg
LyogdHJhbnNsYXRvcl9jb21tb24gKi8sCiAJCQkJNTg5MkM3QTM2OTUzMzA0MzdBRkU1NzE0IC8q
IHRyYW5zbGF0b3JfZ2xzbCAqLywKIAkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJh
bnNsYXRvcl9obHNsICovLAorCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAt
NDMwLDggKzYwNywyNyBAQAogCQkJCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2Vu
SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RjdCNTJBNTREQ0U4MTU1RUQ5NEVDRjggLyog
T3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFOTlENkQ4MERCRjA1RUNFNzEwOEIy
NkQgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTg4NkJDRDVEMERE
NjlCNkZERTA5REQ4IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTY0
NjY1NjZEOEMwRjAyM0E1NTM3NjAgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAv
KiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJQTIwMTA4M0IxNTlD
MzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNDMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8q
IElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUg
LyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJF
IC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDQxNTlDMzFB
MDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0
NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ4
Myw2ICs2NzksMTcgQEAKIAkJCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNl
X3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODYyMTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
MzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjYxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODY3MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTIwMTA4NjgxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODY5MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZC
MTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODZDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NjgsMzggQEAKIAkJ
CX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAv
KiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJP
Q0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAor
CQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAor
CQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gInRy
YW5zbGF0b3JfY29tbW9uIGNvcHkiOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJ
QTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJCSk7CisJ
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJ
CQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKIAkJQUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8q
IFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxk
U2V0dGluZ3MgPSB7CkBAIC02NzIsNiArOTExLDE1IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDE7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKIAkJ
fTsKKwkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0geworCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTIwMTA3
RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAorCQkJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1
N0JCRSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOworCQl9OwogCQlD
NzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZp
Z3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKaW5kZXggMjRjNzY2Yi4uN2Q5
MzQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmds
ZXV0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmgKQEAgLTE1LDQgKzE1LDggQEAKICAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAg
ICAgICAgICAgICBcCiAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKIAorI2lmIGRl
ZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNl
bmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3ZlcnNpb24uaAppbmRleCAyMDNjNDIxLi5iZGQxNjI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKICNk
ZWZpbmUgTUFKT1JfVkVSU0lPTiAxCiAjZGVmaW5lIE1JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBC
VUlMRF9WRVJTSU9OIDAKLSNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTAwOQorI2RlZmluZSBCVUlM
RF9SRVZJU0lPTiAxMTY2CiAKICNkZWZpbmUgU1RSSU5HSUZZKHgpICN4CiAjZGVmaW5lIE1BQ1JP
X1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
CmluZGV4IGE3OTUwYjkuLjFjNGIyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNw
cApAQCAtMTYsMTEgKzE2LDYgQEAgbmFtZXNwYWNlIHsKIC8vIGV2YWx1YXRlZC4gVGhpcyBpcyB1
bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywgYnV0IGlzIHNvbWV0aGluZyB0bwog
Ly8gY29uc2lkZXIuCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyY2Vb
XSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbihmbG9hdCwgZmxvYXQpIiwK
LSAgICAidmVjMiB3ZWJnbF9hdGFuX2VtdSh2ZWMyIHksIHZlYzIgeCkgeyByZXR1cm4gdmVjMihh
dGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xf
YXRhbl9lbXUodmVjMyB5LCB2ZWMzIHgpIHsgcmV0dXJuIHZlYzMoYXRhbih5WzBdLCB4WzBdKSwg
YXRhbih5WzFdLCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSk7IH0iLAotICAgICJ2ZWM0IHdlYmds
X2F0YW5fZW11KHZlYzQgeSwgdmVjNCB4KSB7IHJldHVybiB2ZWM0KGF0YW4oeVswXSwgeFswXSks
IGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSksIGF0YW4oeVszXSwgeFszXSkpOyB9
IiwKLQogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3MoZmxvYXQpIiwKICAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgY29zKHZlYzMpIiwKQEAgLTQxLDExICszNiw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlv
bkVtdWxhdGlvblZlcnRleFNvdXJjZVtdID0gewogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBsZW5ndGgodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVj
NCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwgZmxvYXQpIiwK
LSAgICAidmVjMiB3ZWJnbF9tb2RfZW11KHZlYzIgeCwgdmVjMiB5KSB7IHJldHVybiB2ZWMyKG1v
ZCh4WzBdLCB5WzBdKSwgbW9kKHhbMV0sIHlbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xfbW9k
X2VtdSh2ZWMzIHgsIHZlYzMgeSkgeyByZXR1cm4gdmVjMyhtb2QoeFswXSwgeVswXSksIG1vZCh4
WzFdLCB5WzFdKSwgbW9kKHhbMl0sIHlbMl0pKTsgfSIsCi0gICAgInZlYzQgd2ViZ2xfbW9kX2Vt
dSh2ZWM0IHgsIHZlYzQgeSkgeyByZXR1cm4gdmVjNChtb2QoeFswXSwgeVswXSksIG1vZCh4WzFd
LCB5WzFdKSwgbW9kKHhbMl0sIHlbMl0pLCBtb2QoeFszXSwgeVszXSkpOyB9IiwKLQogICAgICIj
ZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4g
MC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFs
aXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMp
IiwKQEAgLTU4LDQyICs0OCwzMiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0
ZXhTb3VyY2VbXSA9IHsKIH07CiAKIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdt
ZW50U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxvYXQs
IGZsb2F0KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjMiwgdmVjMiki
LAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzMsIHZlYzMpIiwKLSAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWM0LCB2ZWM0KSIsCi0KICAgICAid2ViZ2xf
ZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24gZmxv
YXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMy
IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIGEpIHsgcmV0dXJuIGNvcyhh
KTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyB3ZWJnbF9jb3NfZW11KHdlYmds
X2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9l
bXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzQg
YSkgeyByZXR1cm4gY29zKGEpOyB9IiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBk
aXN0YW5jZShmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9lbXUo
eCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBkb3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZG90X2VtdSh4
LCB5KSAoKHgpICogKHkpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMy
LCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMzKSIs
CiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2Vi
Z2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKICAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3Ro
KHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZsb2F0
KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMyLCB2ZWMyKSIsCi0gICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIG1vZCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3Igbm9ybWFsaXplKGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXpl
X2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAog
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMikiLAogICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIHJlZmxlY3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVjdF9l
bXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAqIChJKSAqIChOKSkiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCkBAIC0xMDIsMTAgKzgyLDYgQEAgY29uc3QgY2hhciog
a0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTb3VyY2VbXSA9IHsKIGNvbnN0IGJvb2wga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFza1tdID0gewogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogICAg
IC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBNYWMuCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkF0YW4xXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40XzQKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTEyMiwxMCArOTgsNiBAQCBjb25zdCBib29s
IGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMV8xCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QzXzMKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1h
bGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0xMzYsMTAgKzEwOCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFza1tdID0gewogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZs
ZWN0NF80CiAjZWxzZQogICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4K
LSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25B
dGFuMl8yCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW4zXzMKLSAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uQXRhbjRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkNvczIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwpAQCAtMTU2LDEwICsx
MjQsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5n
dGgzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTW9kMV8xCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIHRydWUsICAvLyBU
RnVuY3Rpb25Nb2QzXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
MgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0xNzMsMjIgKzEzNywzOCBA
QCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbXSA9IHsKIH07CiAKIGNv
bnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXNrW10gPSB7Ci0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40
XzQKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICAvLyBXb3JrIGFyb3VuZCBhIEFUSSBkcml2
ZXIgYnVnIGluIE1hYyB0aGF0IGNhdXNlcyBjcmFzaGVzLgorICAgIC8vIFdvcmsgYXJvdW5kIEFU
SSBkcml2ZXIgYnVncyBpbiBNYWMuCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczEKICAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MzCiAgICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRGlzdGFuY2Ux
XzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UyXzIKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKKyAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uRG90MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJf
MgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RG90NF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkxlbmd0aDEKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQor
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplNAorICAgIHRydWUs
ICAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Qy
XzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMworICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0NF80CiAjZWxzZQorICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVn
IGluIFdpbi4KICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zNAotI2VuZGlmCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRpc3RhbmNlM18zCkBAIC0yMDEsMTAgKzE4MSw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11
bGF0aW9uRnJhZ21lbnRNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25M
ZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMwpAQCAtMjEzLDYgKzE4OSw3IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRNYXNrW10gPSB7CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25S
ZWZsZWN0NF80CisjZW5kaWYKICAgICBmYWxzZSAgLy8gVEZ1bmN0aW9uVW5rbm93bgogfTsKIApA
QCAtMzg2LDE4ICszNjMsMTIgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVu
Y3Rpb24oCiAKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwog
ICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgZnVu
Y3Rpb24gPSBURnVuY3Rpb25BdGFuMV8xOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRU9wRGlzdGFuY2U6CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRpc3RhbmNl
MV8xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wRG90OgogICAgICAgICAg
ICAgZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbk1vZDFfMTsK
LSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CiAgICAgICAgICAg
ICBmdW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKaW5kZXggYjM3YjY2NS4uMGQ5MDRmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgKQEAgLTQ1LDEyICs0NSw3IEBAIHByaXZhdGU6CiAgICAgLy8g
QnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIC8vCiAgICAgZW51bSBUQnVpbHRJbkZ1bmN0aW9uIHsK
LSAgICAgICAgVEZ1bmN0aW9uQXRhbjFfMSA9IDAsICAvLyBmbG9hdCBhdGFuKGZsb2F0LCBmbG9h
dCk7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4yXzIsICAvLyB2ZWMyIGF0YW4odmVjMiwgdmVjMik7
Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4zXzMsICAvLyB2ZWMzIGF0YW4odmVjMywgdmVjMik7Ci0g
ICAgICAgIFRGdW5jdGlvbkF0YW40XzQsICAvLyB2ZWM0IGF0YW4odmVjNCwgdmVjMik7Ci0KLSAg
ICAgICAgVEZ1bmN0aW9uQ29zMSwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CisgICAgICAgIFRGdW5j
dGlvbkNvczEgPSAwLCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKICAgICAgICAgVEZ1bmN0aW9uQ29z
MiwgIC8vIHZlYzIgY29zKHZlYzIpOwogICAgICAgICBURnVuY3Rpb25Db3MzLCAgLy8gdmVjMyBj
b3ModmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNvcyh2ZWM0KTsKQEAg
LTcwLDExICs2NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDMsICAvLyBm
bG9hdCBsZW5ndGgodmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDQsICAvLyBmbG9hdCBs
ZW5ndGgodmVjNCk7CiAKLSAgICAgICAgVEZ1bmN0aW9uTW9kMV8xLCAgLy8gZmxvYXQgbW9kKGZs
b2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDJfMiwgIC8vIHZlYzIgbW9kKHZlYzIs
IHZlYzIpOwotICAgICAgICBURnVuY3Rpb25Nb2QzXzMsICAvLyB2ZWMzIG1vZCh2ZWMzLCB2ZWMz
KTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kNF80LCAgLy8gdmVjNCBtb2QodmVjNCwgdmVjNCk7Ci0K
ICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMSwgIC8vIGZsb2F0IG5vcm1hbGl6ZShmbG9hdCk7
CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTIsICAvLyB2ZWMyIG5vcm1hbGl6ZSh2ZWMyKTsK
ICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMywgIC8vIHZlYzMgbm9ybWFsaXplKHZlYzMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAK
aW5kZXggZjI3Y2I3NS4uY2FiODA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCkBAIC04LDEwICs4LDIxIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRm9yTG9vcFVu
cm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hI
YW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKworYm9vbCBpc1dlYkdM
QmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgICByZXR1cm4gc3BlYyA9PSBTSF9X
RUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKK30KIAogbmFtZXNwYWNl
IHsKIGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAtMTIzLDcgKzEzNCw3IEBAIGJvb2wg
VENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxp
ZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09IFNI
X1dFQkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAgICAg
ICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAgICAv
LyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4gVGhl
IGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzIsMTIgQEAgYm9vbCBUQ29tcGls
ZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5H
KSkKICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisg
ICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklD
VElPTlMpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMo
cm9vdCwgKGNvbXBpbGVPcHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQor
ICAgICAgICAgICAgcmV3cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwg
Zm9yLWxvb3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25z
IHBhc3MuCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9M
TF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9s
bDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAt
MjM1LDEyICsyNTIsNTggQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJt
Tm9kZSogcm9vdCkKICAgICB9CiB9CiAKK3ZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVy
KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4o
IiwgImNzc19tYWluKCIpOworICAgIHJvb3QtPnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9v
bCBUQ29tcGlsZXI6OnZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAg
ICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlkYXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8p
OwogICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51
bUVycm9ycygpID09IDA7CiB9CiAKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChz
aGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAi
VGltaW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJlIGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVj
LiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChy
b290KTsKKworICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9v
bCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFw
aC4KKyAgICAgICAgaWYgKG91dHB1dEdyYXBoKSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0IG91dHB1dChpbmZvU2luay5pbmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRw
dXRBbGxTcGFubmluZ1RyZWVzKGdyYXBoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3Qg
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZyByZXN0cmljdG9yKGluZm9TaW5rLmluZm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJl
c3RyaWN0aW9ucyhncmFwaCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0g
MDsKK30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmlj
dGlvbnMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0
cmljdGlvbnMocm9vdCk7CisgICAgcmV0dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsK
K30KKwogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUq
IHJvb3QpCiB7CiAgICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVu
aWZvcm1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NzIyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCkBAIC0wLDAgKzEsMTE5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVh
bGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJp
bnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQor
Ly8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExvb3BE
aXNjb250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9vcERp
c2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1
cm4gbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51aXR5
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBp
ZiAobUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBF
T3BLaWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBjYXNl
IEVPcENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAgICAg
Y2FzZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKworYm9v
bCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7
Cit9CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0eTsK
KyAgICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9CisK
K2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2Rl
KQoreworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNl
KHRoaXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0
R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAq
bm9kZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7Cisg
ICAgICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFkaWVu
dE9wZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RHcmFk
aWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5j
dGlvbkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5h
bWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUy
RCIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAgICAg
ICAgICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVzZXIg
ZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8vIGNv
bnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMKKyAg
ICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dyYWRp
ZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50T3Bl
cmF0aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFkaWVu
dE9wZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGE0YzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0
eS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMg
dXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8v
IHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBs
aWNpdGx5KSBjb21wdXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGlu
dWl0aWVzLiAKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwor
I2RlZmluZSBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworbmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhl
ciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xh
c3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorewor
ICBwdWJsaWM6CisgICAgYm9vbCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJv
dGVjdGVkOgorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gg
Km5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29s
IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVj
a3MgZm9yIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNz
IERldGVjdEdyYWRpZW50T3BlcmF0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAg
cHVibGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3Rl
Y3RlZDoKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9k
ZSk7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSk7CisKKyAgICBib29sIG1HcmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29u
dGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlm
ICAgLy8gQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5M2EwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKQEAgLTAsMCAr
MSw0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5o
IgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgiCisKK1REaWFnbm9zdGljczo6VERpYWdu
b3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDogbUluZm9TaW5rKGluZm9TaW5rKQoreworfQor
CitURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIFREaWFnbm9zdGlj
czo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEpCit7CisgICAgVEluZm9TaW5rQmFzZSYg
c2luayA9IG1JbmZvU2luay5pbmZvOworICAgIFRQcmVmaXhUeXBlIHByZWZpeCA9IHNldmVyaXR5
ID09IEVSUk9SID8gRVByZWZpeEVycm9yIDogRVByZWZpeFdhcm5pbmc7CisKKyAgICAvKiBWQysr
IGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8K
KyAgICBzaW5rLnByZWZpeChwcmVmaXgpOworICAgIHNpbmsubG9jYXRpb24oRW5jb2RlU291cmNl
TG9jKGxvYy5maWxlLCBsb2MubGluZSkpOworICAgIHNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICAi
JyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4iOworfQorCit2b2lkIFREaWFn
bm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAgIG1JbmZv
U2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjpwcmludChJRCBpZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKK3sKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9z
dGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhMTMwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGlj
cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJ
QUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgiCisKK2NsYXNzIFRJbmZv
U2luazsKKworY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9zdGljcworewor
ICBwdWJsaWM6CisgICAgVERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspOworICAgIHZp
cnR1YWwgflREaWFnbm9zdGljcygpOworCisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0
dXJuIG1JbmZvU2luazsgfQorCisgICAgdm9pZCB3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHks
CisgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIGV4dHJhKTsKKworICAgIHZvaWQgd3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlk
LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOworCisgIHBy
aXZhdGU6CisgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJ
TEVSX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDFmNmFiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE2
MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVy
LmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIK
KyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJlaGF2aW9yIGdl
dEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlz
YWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrV2Fybigid2Fy
biIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAo
c3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmIChzdHIgPT0g
a1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4
dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3Ip
LAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGlyZWN0aXZlSGFu
ZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxl
cjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKQoreworICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLCBtc2cs
ICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVByYWdtYShjb25z
dCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPbigib24i
KTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7CisKKyAgICBib29s
IGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERHTCkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZlIHByYWdtYXMgZm9y
IHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wuIElnbm9yZSBpdC4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtPcHRpbWl6ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0aW1pemUgPSB0cnVl
OworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9wdGltaXplID0gZmFs
c2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJh
Z21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdt
YS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1EaWFnbm9zdGljcy53cml0
ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBnZXRCZWhhdmlv
cihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFVuZGVmaW5lZCkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwg
bG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlvciIsIG5hbWUsICJp
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmFtZSA9PSBrRXh0
QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNz
OjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5z
aW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBo
YXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJl
aGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0
aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ2VuYWJsZScgYmVoYXZpb3IiKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVEV4dGVu
c2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7
CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0
ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6aXRl
cmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5maW5kKG5hbWUpOworICAgIGlmIChpdGVy
ICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkKKyAgICB7CisgICAgICAgIGl0ZXItPnNlY29u
ZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHA6OkRpYWdu
b3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJST1I7CisgICAg
c3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICBz
ZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFQmhFbmFibGU6CisgICAgICBjYXNlIEVCaFdhcm46CisgICAgICBjYXNlIEVCaERpc2Fi
bGU6CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHNldmVyaXR5LCBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwgImlzIG5vdCBz
dXBwb3J0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lv
biA9IDEwMDsKKworICAgIGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIHsKKyAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFtLnN0cigpOworICAgICAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidmVyc2lvbiBudW1iZXIiLCBzdHIsICJub3Qgc3VwcG9ydGVkIik7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjFkM2RmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09N
UElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgiCisKK2NsYXNzIFREaWFn
bm9zdGljczsKKworY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcmVjdGl2
ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIFREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNz
JiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KKyAgICBj
b25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1
cm4gbUV4dGVuc2lvbkJlaGF2aW9yOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3Io
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBy
YWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24m
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbik7CisKKyAg
cHJpdmF0ZToKKyAgICBUUHJhZ21hIG1QcmFnbWE7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBt
RXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgVERpYWdub3N0aWNzJiBtRGlhZ25vc3RpY3M7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5o
CmluZGV4IGU5YmJhNGIuLjYwNDA5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCkBAIC03LDkgKzcsMTEg
QEAKICNpZm5kZWYgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KICNkZWZpbmUgX0VYVEVO
U0lPTl9CRUhBVklPUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgor
I2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAKLXR5cGVkZWYgZW51bSB7Cit0eXBl
ZGVmIGVudW0KK3sKICAgICBFQmhSZXF1aXJlLAogICAgIEVCaEVuYWJsZSwKICAgICBFQmhXYXJu
LApAQCAtMTksMjAgKzIxLDE3IEBAIHR5cGVkZWYgZW51bSB7CiAKIGlubGluZSBjb25zdCBjaGFy
KiBnZXRCZWhhdmlvclN0cmluZyhUQmVoYXZpb3IgYikKIHsKLSAgICBzd2l0Y2goYikgewotICAg
ICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICByZXR1cm4gInJlcXVpcmUiOwotICAgICAgY2Fz
ZSBFQmhFbmFibGU6Ci0gICAgICAgIHJldHVybiAiZW5hYmxlIjsKLSAgICAgIGNhc2UgRUJoV2Fy
bjoKLSAgICAgICAgcmV0dXJuICJ3YXJuIjsKLSAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAg
ICAgcmV0dXJuICJkaXNhYmxlIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOVUxM
OworICAgIHN3aXRjaChiKQorICAgIHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZTogcmV0dXJuICJy
ZXF1aXJlIjsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVuYWJsZSI7CisgICAgICBj
YXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7CisgICAgICBjYXNlIEVCaERpc2FibGU6IHJldHVy
biAiZGlzYWJsZSI7CisgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKICAgICB9CiB9CiAKLXR5
cGVkZWYgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKKy8vIE1h
cHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZpb3IuCit0eXBlZGVmIHN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsKIAogI2VuZGlm
IC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKaW5kZXggZjNhMTlkYy4uM2U5NGNl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplLmNwcApAQCAtNDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBUU3RyaW5nIERlZmF1bHRQcmVj
aXNpb25GcmFnbWVudCgpCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJ
bkNvbnN0YW50cyhjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKK3N0YXRpYyBU
U3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoU2hTaGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyAmcmVzb3VyY2VzKQogewogICAgIFRTdHJpbmdTdHJlYW0gczsKIApAQCAtNDg3
LDcgKzQ4Nyw5IEBAIHN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2hCdWls
dEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzIDw8ICI7IjsKICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVyZUltYWdl
VW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291
cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBp
bnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA8PCAi
OyI7CisKKyAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAgICAgICBzIDw8
ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsKIH0KQEAgLTUxMyw3ICs1MTUsNyBA
QCB2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJT
cGVjIHNwZWMsCiAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3Vw
cG9ydGVkIik7CiAgICAgfQogCi0gICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5D
b25zdGFudHMocmVzb3VyY2VzKSk7CisgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0
SW5Db25zdGFudHMoc3BlYywgcmVzb3VyY2VzKSk7CiB9CiAKIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCkBAIC01MjYsMTEgKzUyOCwy
MiBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5U
X1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwg
ICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFj
aW5nLCAxKSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9N
YXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEs
ICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAg
ICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nv
b3JkLCAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgICAgICBUVHlw
ZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2lu
dENvb3JkIiksICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0s
IEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIENTUyBT
aGFkZXJzLCBnbF9GcmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1ZmZlcnMg
YXJlIG5vdCBhdmFpbGFibGUuCisgICAgICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xvciBhbmQg
Y3NzX0NvbG9yTWF0cml4IGFyZSBhdmFpbGFibGUuCisgICAgICAgIC8vCisgICAgICAgIGlmIChz
cGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0
KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImNzc19NaXhDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0
LCB0cnVlKSkpOworICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNIX1ZF
UlRFWF9TSEFERVI6CkBAIC02MjAsNyArNjMzLDggQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKIAogICAgIC8vIEZpbmFsbHkgYWRk
IHJlc291cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2godHlwZSkgewotICAgIGNh
c2UgU0hfRlJBR01FTlRfU0hBREVSOiB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Cisg
ICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKICAgICAgICAgICAgIC8v
IFNldCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgogICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVl
KTsKICAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFmNDBjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKQEAgLTAs
MCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworT1Nf
VExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsK
KworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIGlmIChHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxy
ZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisgICAgR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisgICAgaWYgKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2Vy
dCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJl
YWR5IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgT1Nf
VExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7CisKKyAgICBpZiAo
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGlu
ZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCisgICAg
cmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOworfQorCitib29sIEluaXRpYWxpemVH
bG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6
ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVk
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250
ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4o
T1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJz
ZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVh
ZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlmIChscFRocmVhZERhdGEg
PT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4
dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250
ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBU
aHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJzZUNvbnRl
eHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJz
ZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRp
Y19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQpCisgICAgICAgIGRlbGV0ZSBs
cFBhcnNlQ29udGV4dDsKKworICAgIHJldHVybiB0cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9p
bnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICAvLworICAgIC8vIE1pbmltYWwg
ZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRl
eHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihP
U19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworCisgICAgcmV0dXJuIGxw
UGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgKaW5kZXggNzYwZmQwOS4uYWE1M2I3MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oCkBAIC0xMyw0ICsxMywxNCBAQCBib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOwogYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7CiBib29sIEZyZWVQYXJzZUNvbnRleHQo
KTsKIAorc3RydWN0IFRQYXJzZUNvbnRleHQ7Cit0eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJz
ZUNvbnRleHRQb2ludGVyOworZXh0ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQ
YXJzZUNvbnRleHQoKTsKKyNkZWZpbmUgR2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNl
Q29udGV4dCgpCisKK3R5cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKK3sKKyAg
ICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBhcnNlQ29udGV4dDsKK30gVFRocmVhZFBhcnNlQ29u
dGV4dDsKKwogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRp
YXRlLmNwcAppbmRleCBjYTZkOGY3Li45MmM0NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzczLDcgKzM3Myw3
IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBv
cCwgVEludGVybU5vZGUqIGNoaWxkTm9kZSwKIC8vIHRoZWlyIG9wZXJhdG9yIHRvIEVPcFNlcXVl
bmNlLgogLy8KIC8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5vZGUsIHdoaWNoIGNvdWxkIGJlIHRo
ZSBvbmUgcGFzc2VkIGluIGlmCi0vLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUuCisvLyBp
dCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUgYnV0IG5vIG9wZXJhdG9yIHdhcyBzZXQuCiAvLwog
VEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3BlcmF0b3IoVElu
dGVybU5vZGUqIG5vZGUsIFRPcGVyYXRvciBvcCwgVFNvdXJjZUxvYyBsaW5lKQogewpAQCAtNTky
LDEwICs1OTIsMTAgQEAgVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihU
SW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2QKICAgICAvLwogCiAgICAgaWYg
KGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpKSB7Ci0gICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgp
ID09IHRydWUpCisgICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTEgPyBzZXRBZ2dyZWdh
dGVPcGVyYXRvcihub2RlUGFpci5ub2RlMSwgRU9wU2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUxLT5n
ZXRMaW5lKCkpIDogTlVMTDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
YWlyLm5vZGUyOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUyID8gc2V0QWdncmVn
YXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTIsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMi0+
Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgfQogCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9
IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIG5vZGVQYWlyLm5vZGUxLCBub2RlUGFpci5ub2Rl
Mik7CkBAIC02NTYsNiArNjU2LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRT
ZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWUKICAgICAvLyBN
YWtlIGEgc2VsZWN0aW9uIG5vZGUuCiAgICAgLy8KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2Rl
ID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrLCB0cnVl
QmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVy
biBub2RlOwpAQCAtMTQ0NCw5ICsxNDQ1LDMgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRl
Ojpwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVEludGVybUMKICAg
ICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRv
LCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCks
IHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCi12b2lk
IFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBw
VGFibGUpCi17Ci0gICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7Ci0gICAgcHJhZ21hVGFibGUgPSBu
ZXcgVFByYWdtYVRhYmxlKCk7Ci0gICAgKnByYWdtYVRhYmxlID0gcFRhYmxlOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAKaW5kZXggMGM3ZTFhOS4uYTUwMzEwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwCkBAIC0xNSw3ICsxNSw5IEBAIFRTdHJpbmcgbWFwTG9uZ05hbWUoaW50IGlk
LCBjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sIGlzR2xvYmFsKQogICAgIHN0cmVhbSA8PCAid2Vi
Z2xfIjsKICAgICBpZiAoaXNHbG9iYWwpCiAgICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3Ry
ZWFtIDw8IGlkIDw8ICJfIjsKKyAgICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0gIT0g
J18nKQorICAgICAgICBzdHJlYW0gPDwgIl8iOwogICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigw
LCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwog
ICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKaW5kZXggNjliOGMyNi4uZDdlNjlkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcApAQCAtNiwxMCArNiwxMiBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExT
TC5oIgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJj
dWl0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxhbGdvcml0aG0+CkBAIC0yMCwxMyArMjIsMTMgQEAgbmFtZXNwYWNlIHNoCiBUU3RyaW5n
IHN0cihpbnQgaSkKIHsKICAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIs
ICIlZCIsIGkpOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkp
OwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNl
Q29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBt
Q29udGV4dChjb250ZXh0KQogewotICAgIG1VbmZvbGRTZWxlY3QgPSBuZXcgVW5mb2xkU2VsZWN0
KGNvbnRleHQsIHRoaXMpOworICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hv
cnRDaXJjdWl0KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwog
CiAgICAgbVVzZXNUZXh0dXJlMkQgPSBmYWxzZTsKQEAgLTM4LDYgKzQwLDEyIEBAIE91dHB1dEhM
U0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVyc2Vy
KHRydWUsIHRydWUsIHRyCiAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOwogICAgIG1Vc2Vz
VGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxz
ZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExv
ZDBfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAg
ICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVD
dWJlTG9kMCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsK
ICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNl
OwogICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwpAQCAtNzUsMjAgKzgzLDI2IEBAIE91dHB1
dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCkgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIHRydWUsIHRyCiAgICAgbVNjb3BlRGVwdGggPSAwOwogCiAgICAgbVVuaXF1ZUlu
ZGV4ID0gMDsKKworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAg
bU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9v
cCA9IGZhbHNlOwogfQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCiB7Ci0gICAgZGVsZXRl
IG1VbmZvbGRTZWxlY3Q7CisgICAgZGVsZXRlIG1VbmZvbGRTaG9ydENpcmN1aXQ7CiB9CiAKIHZv
aWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKIHsKKyAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0
eSA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQudHJlZVJvb3QpOworCiAgICAg
bUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1dCB0aGUgYm9keSBm
aXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRlcgogICAgIGhlYWRl
cigpOwogCi0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsKLSAg
ICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsKKyAgICBtQ29udGV4dC5p
bmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1Npbmso
KS5vYmogPDwgbUJvZHkuY19zdHIoKTsKIH0KIAogVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6
Z2V0Qm9keVN0cmVhbSgpCkBAIC0yMDUsMjUgKzIxOSwxMSBAQCB2b2lkIE91dHB1dEhMU0w6Omhl
YWRlcigpCiAgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CiAgICAgICAgIG91dCA8PCAiXG4iOwog
Ci0gICAgICAgIC8vIFRoZSB0ZXh0dXJlIGZldGNoIGZ1bmN0aW9ucyAiZmxpcCIgdGhlIFkgY29v
cmRpbmF0ZSBpbiBvbmUgd2F5IG9yIGFub3RoZXIuIFRoaXMgaXMgYmVjYXVzZSB0ZXh0dXJlcyBh
cmUgc3RvcmVkCi0gICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgT3BlbkdMIGNvbnZlbnRpb24s
IGkuZS4gKDAsIDApIGlzICJib3R0b20gbGVmdCIsIHJhdGhlciB0aGFuIHRoZSBEM0QgY29udmVu
dGlvbiB3aGVyZSAoMCwgMCkKLSAgICAgICAgLy8gaXMgInRvcCBsZWZ0Ii4gU2luY2UgdGhlIEhM
U0wgdGV4dHVyZSBmZXRjaCBmdW5jdGlvbnMgZXhwZWN0IHRleHR1cmVzIHRvIGJlIHN0b3JlZCBh
Y2NvcmRpbmcgdG8gdGhlIEQzRAotICAgICAgICAvLyBjb252ZW50aW9uLCB0aGUgWSBjb29yZGlu
YXRlIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgaXMgYWRqdXN0ZWQgdG8gY29tcGVuc2F0ZS4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHNpbXBsZXN0IGNhc2UgaXMgdGV4dHVyZTJEIHdo
ZXJlIHRoZSBtYXBwaW5nIGlzIFkgLT4gMS1ZLCB3aGljaCBtYXBzIFswLCAxXSAtPiBbMSwgMF0u
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlMkRQcm9qIGZ1bmN0aW9ucyBhcmUg
bW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIHRoZSBwcm9qZWN0aW9uIGRpdmlkZXMgYnkgZWl0aGVy
IFogb3IgVy4gRm9yIHRoZSB2ZWMzCi0gICAgICAgIC8vIGNhc2UsIHRoZSBtYXBwaW5nIGlzIFkg
LT4gWi1ZIG9yIFkvWiAtPiAxLVkvWiwgd2hpY2ggYWdhaW4gbWFwcyBbMCwgMV0gLT4gWzEsIDBd
LgotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgY3ViZSB0ZXh0dXJlcyB0aGUgbWFwcGluZyBp
cyBZIC0+IC1ZLCB3aGljaCBtYXBzIFstMSwgMV0gLT4gWzEsIC0xXS4gVGhpcyBpcyBub3Qgc3Vm
ZmljaWVudCBvbiBpdHMgb3duIGZvciB0aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzLCB3
aGljaCBhcmUgbm93IG9uIHRoZSAid3Jvbmcgc2lkZXMiIG9mIHRoZSBjdWJlLiBUaGlzIGlzIGNv
bXBlbnNhdGVkIGZvciBieSBleGNoYW5naW5nIHRoZQotICAgICAgICAvLyArWSBhbmQgLVkgZmFj
ZXMgZXZlcnl3aGVyZSBlbHNlIHRocm91Z2hvdXQgdGhlIGNvZGUuCi0gICAgICAgIAogICAgICAg
ICBpZiAobVVzZXNUZXh0dXJlMkQpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCiAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCBmbG9h
dDIodC54LCAxIC0gdC55KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkQocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpo
ZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgogICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZs
b2F0NCh0LngsIDEgLSB0LnksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCiAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9
CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJE
IHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueiAtIHQueSwgMCwg
dC56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZs
b2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAg
ICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQo
dC54LCB0LncgLSB0LnksIHQueiwgdC53KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAgdm9p
ZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gKHQueSAvIHQueiksIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCAxIC0gKHQueSAvIHQudyksIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC0yNjksNyAr
MjY5LDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleENVQkUocywgZmxvYXQzKHQueCwgLXQueSwgdC56KSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKICAgICAgICAgICAgICAgICAgICAi
fVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI3OCw3ICsyNzgs
NzMgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxv
YXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIC10LnksIHQueiwgYmlhcykp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0
NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgKkxv
ZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgor
ICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRl
eHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIy
RCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQu
eSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2Qw
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8g
dC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQs
IGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0Lnos
IDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlh
cyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBm
bG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAg
ICAgICAgfQpAQCAtODk3LDcgKzk2Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0U3RydWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5cGUoKS5nZXRG
aWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDM5LDkgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ldLnR5cGU7CiAK
ICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpICsgIiA9PSAi
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkVHlwZS0+
Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIgPT0gIjsKICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFt
ZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0xMDU0LDEyICsx
MTIwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkgKm5vZGUpCiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CiAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRy
YW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
TWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwg
IiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7ICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRT
aG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9yID0gdHJ1ZTsK
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRl
bXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMDEsMzYgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCiAgICAgICBj
YXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFjKCIsICIi
LCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgi
LCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKC1kZHkoIiwgIiIs
ICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAgICAgICAKKyAg
ICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8
IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIp
Iik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERGZHk6CisgICAg
ICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAw
LjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYobUluc2lkZURpc2NvbnRp
bnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
d2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNl
IEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbnkoIiwgIiIsICIp
Iik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjY4LDcgQEAgYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKCgqc2l0KS0+
Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudCgqc2l0
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1VbmZvbGRTZWxlY3Qt
PnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICgq
c2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRz
KCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOwogICAgICAgICAgICAgfQpA
QCAtMTI5MCw1OSArMTM4Miw2NCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkp
OwogCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAgICAgICAgaWYg
KG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAi
Z2xfbWFpbigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwg
IiAiOworICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExv
ZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8
PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJn
dW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ld
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwg
c2NvcGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0
cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9sLT5nZXRUeXBlKCku
Z2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1
bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAgICAgICAgICAgICAg
IG91dCA8PCAiKVxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7
XG4iOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5z
aXplKCkgPiAxKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RW5kTGluZSgpKTsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG91dCA8PCAifVxuIjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0
TG9kMEZ1bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9
ICJtYWluIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRM
b2QwRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BGdW5jdGlvbkNh
bGw6CkBAIC0xMzUwLDU0ICsxNDQ3LDEwNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQogICAgICAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRTdHJp
bmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRw
dXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5l
ZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5h
bWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMp
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZDAgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
X2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2Jp
YXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1
YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
Q3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2Qi
KQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzMyLDExIEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5v
ZGUpCiAKICAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQogICAgIHsKLSAgICAg
ICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsK
KyAgICAgICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0ZW1lbnQKICAgICB7
Ci0gICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsK
KyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9u
KCkpOwogCiAgICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSArMTc0OSwxMSBAQCBi
b29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uICpub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKICAgICAgICAg
ewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRydWVCbG9jaygpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpKTsKLSAg
ICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7XG59XG4iOwogCiAgICAgICAg
IGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsKQEAgLTE2MTQsMTAgKzE3NjMs
MTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiAqbm9kZSkKICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKIAogICAgICAgICAg
ICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUoKSk7
Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CiAKICAg
ICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRM
aW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgICAgIG91dCA8PCAi
O1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2ICsxNzgwLDEzIEBAIHZvaWQg
T3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2Rl
KQogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCisgICAgeworICAg
ICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5
KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVFeGNlc3NpdmVMb29wKG5vZGUpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3Niw3ICsxODMyLDcgQEAgYm9vbCBPdXRw
dXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogCiAgICAg
aWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRCb2R5KCkp
OwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpKTsKQEAg
LTE2OTQsNiArMTg1MCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG91dCA8PCAifVxuIjsKIAorICAgIG1JbnNpZGVE
aXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTE3MzIsNiArMTg5MCwxNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHJldHVybiB0cnVlOwogfQog
Cit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgeworICAgICAgICBtVW5m
b2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAgICBub2RlLT50cmF2
ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50
ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTI3LDExIEBAIGJvb2wgT3V0cHV0SExT
TDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRlcmF0aW9ucyAodW5z
dXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRsZSBsb29wcyB3aXRo
IG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0
aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUgaXRlcmF0aW9ucywg
YnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0aGFuIDI1NCkuCiBi
b29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7
CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKQEAg
LTE4NzcsMTQgKzIwNDcsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29w
KFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9u
cyA9IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAgICAgICBpZiAoaXRl
cmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhfTE9PUF9J
VEVSQVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
d2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlu
dCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oMjU1LCBpdGVy
YXRpb25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGlu
Y3JlbWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwogCiAg
ICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBl
ZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA4NSw4IEBAIGJvb2wg
T3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAg
ICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAg
ICAgICAgICAgb3V0IDw8ICI7fVxuIjsKIAotICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gMjU1
ICogaW5jcmVtZW50OwotICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gMjU1OworICAgICAg
ICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGluY3JlbWVudDsKKyAg
ICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJBVElPTlM7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3ICsyMTgyLDcgQEAg
VFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0u
dHlwZTsKIAotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZp
ZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmll
bGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQuZ2V0RmllbGROYW1lKCkpICsgYXJyYXlTdHJpbmco
ZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0cmluZyArPSAi
fSAiOwpAQCAtMjA2NSw2ICsyMjM1LDggQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKQogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CiAg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMDcsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFk
ZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25z
dCBUSQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRz
W2ldLnR5cGU7CiAKLSAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5n
KGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQp
ICsgIjtcbiI7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhm
aWVsZCkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFtZSgpLCB0eXBlKSAr
IGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICB9CiAKICAgICAgICAgc3RydWN0
dXJlICs9ICJ9O1xuIjsKQEAgLTI0MzQsNCArMjYwNiwxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6
OmRlY29yYXRlVW5pZm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBl
KQogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAm
c3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUoKS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7
CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCmluZGV4IDgyNGJjMDcuLmVhMjhh
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuaApAQCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsKLWNsYXNzIFVuZm9s
ZFNlbGVjdDsKK2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3MgT3V0cHV0SExTTCA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIE91dHB1
dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIHN0YXRpYyBUU3RyaW5nIGluaXRp
YWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShj
b25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBh
biB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRTdHJpbmcg
ZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUp
OworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBoZWFk
ZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7
CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwogCisg
ICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wg
aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wgaGFuZGxlRXhj
ZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRwdXRUcmlwbGV0KFZp
c2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcgJmluU3Ry
aW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0LDcgQEAgY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgVFN0cmluZyBzdHJ1Y3RM
b29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNlQ29udGV4dCAmbUNv
bnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAgIFVuZm9sZFNob3J0
Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNpZGVGdW5jdGlvbjsK
IAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBjbGFzcyBPdXRwdXRI
TFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7
CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwogICAgIGJvb2wgbVVz
ZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAgYm9vbCBtVXNlc1Bv
aW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKIAogICAgIGlu
dCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcworCisgICAgYm9v
bCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rp
b247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcApp
bmRleCA0MzFmOGQxLi43OWJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDMzICsxMCw3IEBACiAjaW5jbHVk
ZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNsdWRlICJj
b21waWxlci9vc2luY2x1ZGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmgiCi0KLWV4dGVybiAiQyIgewotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7
Ci1leHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZp
bmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9p
ZCBSZXBvcnRJbmZvKFRJbmZvU2lua0Jhc2UmIHNpbmssCi0gICAgICAgICAgICAgICAgICAgICAg
IFRQcmVmaXhUeXBlIHR5cGUsIFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQotewotICAgIC8qIFZDKysgZm9ybWF0OiBm
aWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLwotICAgIHNpbmsu
cHJlZml4KHR5cGUpOwotICAgIHNpbmsubG9jYXRpb24obG9jKTsKLSAgICBzaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmFJbmZvIDw8ICJcbiI7
Ci19Ci0KLXN0YXRpYyB2b2lkIERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dEJlaGF2aW9yKQotewotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIg
IT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBQcmVkZWZpbmVJbnRNYWNy
byhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci19CisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIgogCiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8K
QEAgLTUyLDcgKzI2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhj
b25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFYKIHsKICAgICBmaWVsZHMu
bnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7CiAgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTExNCwyMCArODgsMjAgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6
ZSwgVFYKICAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZl
Y3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsKICAgICAgICAg
aWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IHZlY1NpemUpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAg
ICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgewotICAgICAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhl
IHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUg
c2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ5LDIwICsxMjMsMjAgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3Ry
aW5nLCBpbnQgbWF0U2l6ZSwgVE0KICAgICBmaWVsZHMuY29sID0gLTE7CiAKICAgICBpZiAoY29t
cFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5n
dGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBTdHJp
bmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKICAgICAgICAgZmll
bGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CiAgICAgfSBlbHNlIGlmIChjb21wU3RyaW5n
WzFdID09ICdfJykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBm
aWVsZHMud2hvbGVSb3cgPSB0cnVlOwpAQCAtMTcwLDcgKzE0NCw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1h
dFNpemUsIFRNCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcg
fHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAogICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKQEAgLTE3OCw3ICsx
NTIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTQogICAgIH0KIAogICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0yMDMsMzAgKzE3NywyOCBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OnJl
Y292ZXIoKQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciog
dG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9G
b3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJ
bmZvKQogewotICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07Ci0gICAgdmFfbGlzdCBtYXJrZXI7Ci0g
ICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOwotICAgIHZzbnByaW50ZihleHRy
YUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7CisgICAg
cHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobG9jLCAmc3Jj
TG9jLmZpbGUsICZzcmNMb2MubGluZSk7CisgICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpE
aWFnbm9zdGljczo6RVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVh
c29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywg
RVByZWZpeEVycm9yLCBsb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Ci0KLSAgICB2YV9l
bmQobWFya2VyKTsKICAgICArK251bUVycm9yczsKIH0KIAogdm9pZCBUUGFyc2VDb250ZXh0Ojp3
YXJuaW5nKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOwotCi0gICAgUmVwb3J0SW5mbyhpbmZvU2luay5p
bmZvLCBFUHJlZml4V2FybmluZywgbG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykgeworICAgIHBw
OjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xv
Yy5maWxlLCAmc3JjTG9jLmxpbmUpOworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlh
Z25vc3RpY3M6OldBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywgcmVh
c29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30KIAotICAgIHZhX2VuZChtYXJrZXIpOwordm9pZCBU
UGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7CisgICAgZGlhZ25vc3RpY3Mu
d3JpdGVEZWJ1ZyhzdHIpOwogfQogCiAvLwpAQCAtMjM0LDggKzIwNiwxMCBAQCB2b2lkIFRQYXJz
ZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCiAvLwogdm9pZCBUUGFyc2VDb250ZXh0
Ojphc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0
cmluZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIiwgb3AsICJjYW5ub3QgY29udmVydCBm
cm9tICclcycgdG8gJyVzJyIsCi0gICAgICAgICAgcmlnaHQuY19zdHIoKSwgbGVmdC5jX3N0cigp
KTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8
IGxlZnQgPDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKIH0K
IAogLy8KQEAgLTI0Myw5ICsyMTcsMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJv
cihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZwogLy8KIHZv
aWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBvcGVyYW5kKQogewotICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUi
LCBvcCwgCi0gICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGFu
IG9wZXJhbmQgb2YgdHlwZSAlcyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9u
KSIsCi0gICAgICAgICAgb3AsIG9wZXJhbmQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibm8gb3BlcmF0aW9u
ICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAiIDw8
IG9wZXJhbmQgCisgICAgICAgICAgICAgICAgICAgIDw8ICIgKG9yIHRoZXJlIGlzIG5vIGFjY2Vw
dGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5m
b1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNTMsMTAgKzIyOSwxMSBAQCB2b2lk
IFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRT
dHJpbmcgb3BlcmFuZCkKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IoaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0g
ICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAKLSAgICAgICAgICAg
ICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5k
IG9mIHR5cGUgJyVzJyBhbmQgIgotICAgICAgICAgICAgImEgcmlnaHQgb3BlcmFuZCBvZiB0eXBl
ICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLCAKLSAgICAgICAg
ICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlv
biAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5kIG9m
IHR5cGUgJyIgPDwgbGVmdCAKKyAgICAgICAgICAgICAgICAgICAgPDwgIicgYW5kIGEgcmlnaHQg
b3BlcmFuZCBvZiB0eXBlICciIDw8IHJpZ2h0IDw8ICInIChvciB0aGVyZSBpcyBubyBhY2NlcHRh
YmxlIGNvbnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7IAogfQogCiBib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lv
bkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5
cGUpewpAQCAtMjY1LDEzICsyNDIsMTMgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25F
cnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHkKICAgICBz
d2l0Y2goIHR5cGUgKXsKICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICBpZiggcHJlY2lzaW9u
ID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNp
b24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiApOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBF
YnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwgIiIg
KTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50
KSIsICIiICk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTMxMyw3ICsyOTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZAogICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKICAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChvZmZzZXRbdmFsdWVdID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGlu
ZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMi
LCBvcCwgIiIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12
YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMzI0LDcgKzMwMSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kCiAgICAgICAg
IGRlZmF1bHQ6IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZXJyb3Io
bGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0zNjQsNyArMzQxLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2QKICAgICB9CiAK
ICAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDAp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7
CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNzksMTAgKzM1NiwxOCBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqIG5vZAogICAgIC8vCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJy
b3IgYW5kIGEgbWVzc2FnZS4KICAgICAvLwotICAgIGlmIChzeW1Ob2RlKQotICAgICAgICBlcnJv
cihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9sLCBt
ZXNzYWdlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiKCVzKSIsIG1lc3NhZ2UpOworICAgIGlmIChzeW1Ob2RlKSB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJcIiIgPDwgc3ltYm9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBl
cnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3Ry
ZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2UgPDwgIikiOwor
ICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19z
dHIoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTgsNyArMzgzLDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQog
ICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lv
biByZXF1aXJlZCIsICIiLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3Rh
bnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
NDE0LDcgKzM5OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVElu
dGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKICAgICBpZiAobm9kZS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBl
eHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4sICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5l
KCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbik7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTQzMCw3ICs0MTUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVy
cm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKICAgICBp
ZiAoZ2xvYmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihsaW5lLCAib25s
eSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuLCAiIik7CisgICAgZXJyb3IobGluZSwg
Im9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTQ0OSwyNCArNDM0LDI2IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRF
cnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsK
ICAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKICAgICAgICAgaWYgKGlk
ZW50aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCByZXNlcnZlZEVyck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfV0VCR0xfU1BFQykgeworICAgICAg
ICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlk
ZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2ViZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIiwgIiIpOworICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmll
ci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAgIGVycm9y
KGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaGFkZXJTcGVjID09
IFNIX0NTU19TSEFERVJTX1NQRUMgJiYgaWRlbnRpZmllci5jb21wYXJlKDAsIDQsICJjc3NfIikg
PT0gMCkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiY3Nz
XyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykg
ewotICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAi
Iik7Ci0gICAgICAgICAgICAvL3JldHVybiB0cnVlOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFy
ZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpZGVudGlmaWVycyBjb250YWluaW5nIHR3
byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAoX18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJsZSBm
dXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyNyw1MSArNTE0LDUxIEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9kZSog
bm9kZSwgVEZ1bmN0aW9uCiAgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdCk7CiAK
ICAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3Ry
dWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9y
IiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25l
IGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChhcnJheUFyZyAmJiBvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9u
LWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25z
dHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobWF0cml4
SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgewogICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0
UGFyYW1Db3VudCgpICE9IDEpIHsKLSAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5n
IG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBm
cm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwog
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG92ZXJG
dWxsKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3Ry
dWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAi
Y29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIGlm
IChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlw
ZS0+Z2V0U3RydWN0KCktPnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2Vz
IG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3Ii
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1l
dGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29u
c3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKCF0eXBl
LT5pc01hdHJpeCgpIHx8ICFtYXRyaXhJbk1hdHJpeCkgewogICAgICAgICBpZiAoKG9wICE9IEVP
cENvbnN0cnVjdFN0cnVjdCAmJiBzaXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNp
emUoKSkgfHwKICAgICAgICAgICAgIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8
IHR5cGUtPmdldE9iamVjdFNpemUoKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3Qg
ZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9y
IGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBUSW50ZXJtVHlwZWQgKnR5cGVkID0gbm9kZSA/IG5v
ZGUtPmdldEFzVHlwZWQoKSA6IDA7CiAgICAgaWYgKHR5cGVkID09IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1l
bnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1w
bGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5v
dCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBh
IHZvaWQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC01ODUsNyArNTcyLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hl
Y2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24KIGJvb2wgVFBhcnNlQ29u
dGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwdWJUeXBlKQogewogICAgIGlmIChwdWJUeXBlLnR5cGUgPT0g
RWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9p
ZCciLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNTk5LDcgKzU4Niw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFRQCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUSW50ZXJtVHlwZWQqIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9
IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+
aXNWZWN0b3IoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lv
biBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjEz
LDcgKzYwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKICAgICBpZiAocFR5
cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5
cGUuc2l6ZSA+IDEpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNz
aW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogCkBAIC02
MzEsNyArNjE4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhpbnQg
bGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdAogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBl
KSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjQzLDcgKzYzMCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlCiB7CiAgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCiAgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3Ry
dWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0
dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC02NTgsNyArNjQ1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0
ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGMKIHsK
ICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAm
JiAKICAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBs
ZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJh
bWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC02OTAsMTQgKzY3NywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6
ZUVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewog
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRV
bmlvbigpOwogICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRJbnQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBh
IGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbiIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAi
Iik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHNpemUgPSBjb25zdGFudC0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAKICAgICBpZiAoc2l6ZSA8PSAw
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBp
bnRlZ2VyIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBi
ZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7CiAgICAgICAgIHNpemUgPSAxOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MTMsNyArNzAwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYg
c2l6ZSkKIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUHVibGljVHlwZSB0eXBlKQogewogICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZx
QXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlw
ZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRUeXBlKHR5
cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtNzMxLDcgKzcxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBl
RXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKICAgICAvLyBDYW4gdGhlIHR5
cGUgYmUgYW4gYXJyYXk/CiAgICAgLy8KICAgICBpZiAodHlwZS5hcnJheSkgewotICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUp
LmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
Y2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNzY3
LDM0ICs3NTQsMzQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHQKIAogICAgICAgICBpZiAoISBz
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewogICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBu
ZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgZXJy
b3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CiAgICAgICAgIGlmICgh
IHZhcmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5l
LCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFy
cmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4g
MCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0
aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVudGlmaWVyLmNfc3RyKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5cGUpKSkg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBh
IGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KIAogICAgICAgICBUVHlwZSogdCA9IHZhcmlhYmxlLT5nZXRBcnJheUluZm9ybWF0aW9uVHlw
ZSgpOwogICAgICAgICB3aGlsZSAodCAhPSAwKSB7CiAgICAgICAgICAgICBpZiAodC0+Z2V0TWF4
QXJyYXlTaXplKCkgPiB0eXBlLmFycmF5U2l6ZSkgewotICAgICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJoaWdoZXIgaW5kZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0aGUgYXJyYXkiLCBpZGVu
dGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVy
IGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHQtPnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CkBAIC04MTYsNyArODAzLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludGVybVN5bWJvbCAqbm9k
ZSwgVFR5cGUqIHR5cGUsIGludCBzaXplLAogICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOwogICAg
IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZi
dWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiB1
bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBUVmFyaWFi
bGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTgyOCwx
NCArODE1LDExIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1T
eW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwKICAgICAvLyBpdHMgYW4gZXJyb3IK
ICAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEYXRhIikgewogICAgICAgICBU
U3ltYm9sKiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwg
JmJ1aWx0SW4pOwotICAgICAgICBpZiAoZnJhZ0RhdGEgPT0gMCkgewotICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZl
cnMgbm90IGRlZmluZWQiLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChmcmFnRGF0YSk7CiAKICAgICAgICAgaW50IGZyYWdEYXRhVmFs
dWUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigp
WzBdLmdldElDb25zdCgpOwogICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2
ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUg
YSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04NzAsNyArODU0LDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGkKICAgICAvLwogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBF
dnFDb25zdCkgewogICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUg
aW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTg5MSw3ICs4NzUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGlu
dCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZQogICAgIHZhcmlhYmxlID0g
bmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwogCiAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAg
ICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICB2YXJpYWJsZSA9IDA7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtOTA2LDcgKzg5MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5p
dEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlCiBi
b29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBx
dWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKQogeyAgICAK
ICAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAhPSBFdnFUZW1wb3Jh
cnkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5j
dGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFt
ZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZp
ZXIgIT0gRXZxSW4pIHsKQEAgLTkyNCw4ICs5MDgsOSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBh
cmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIg
cAogCiBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNv
bnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0gICAg
aWYgKGl0ZXIgPT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICBjb25zdCBURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBURXh0
ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5maW5kKGV4
dGVuc2lvbi5jX3N0cigpKTsKKyAgICBpZiAoaXRlciA9PSBleHRCZWhhdmlvci5lbmQoKSkgewog
ICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBu
b3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTkzNSw4ICs5
MjAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2FybikgewotICAgICAgICBUU3RyaW5nIG1zZyA9
ICJleHRlbnNpb24gIiArIGV4dGVuc2lvbiArICIgaXMgYmVpbmcgdXNlZCI7Ci0gICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIGxpbmUpOwor
ICAgICAgICB3YXJuaW5nKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlz
IGJlaW5nIHVzZWQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTQ1LDgg
KzkyOSwyMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7Ci0gICAgVEV4dGVuc2lvbkJl
aGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChleHRl
bnNpb24pOwotICAgIHJldHVybiAoaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKSk7Cisg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0
YmVoYXZpb3IuZmluZChleHRlbnNpb24pOworICAgIHJldHVybiAoaXRlciAhPSBleHRiZWhhdmlv
ci5lbmQoKSk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6aGFuZGxlRXh0ZW5zaW9uRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikK
K3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gbG9jOworICAgIERlY29kZVNvdXJjZUxvYyhsaW5l
LCAmbG9jLmZpbGUsICZsb2MubGluZSk7CisgICAgZGlyZWN0aXZlSGFuZGxlci5oYW5kbGVFeHRl
bnNpb24obG9jLCBleHROYW1lLCBiZWhhdmlvcik7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6
aGFuZGxlUHJhZ21hRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gbG9jOworICAgIERlY29kZVNv
dXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZsb2MubGluZSk7CisgICAgZGlyZWN0aXZlSGFuZGxl
ci5oYW5kbGVQcmFnbWEobG9jLCBuYW1lLCB2YWx1ZSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwpAQCAtOTcwLDEyICs5NjksMTIgQEAgY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250
ZXh0OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnUKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm5vIG1h
dGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5j
dGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCiAgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigp
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2Fs
bC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEw
MDMsNyArMTAwMiw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRT
b3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1CiAgICAgICAgIC8vCiAgICAg
ICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgdHlwZSk7CiAgICAgICAg
IGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgLy8g
ZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0
aGUgcG9vbCAKICAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5
CkBAIC0xMDE1LDcgKzEwMTQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFs
aXplcihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdQogICAgIC8vCiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpOwogICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAh
PSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIC8vCkBAIC0xMDI0LDEzICsxMDIzLDE2IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1CiAKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIGlm
IChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0i
LCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNz
aWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlICE9IGlu
aXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1h
dGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwNDksNyArMTA1MSwxMCBAQCBi
b29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUU291cmNlTG9jIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdQogICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RB
cnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwogICAgICAgICAgICAgdmFyaWFibGUtPnNo
YXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0
cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpIDw8
ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9
IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5z
ZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0xMjM0LDE0ICsxMjM5LDE0IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4
dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXJyb3IobGluZSwgInVuc3Vw
cG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ1bnN1
cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAi
Y29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMjcwLDggKzEy
NzUsMTIgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVElu
dGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5
cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIg
JWQgZnJvbSAnJXMnIHRvICclcyciLCBwYXJhbUNvdW50LAotICAgICAgICAgICAgICAgIG5vZGUt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCksIHR5cGUtPmdldEJhc2lj
U3RyaW5nKCkpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwg
cGFyYW1Db3VudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2Rl
LT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpCisgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiJyB0byAnIiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkp
OwogICAgICAgICByZWNvdmVyKCk7CiAgICAgfQogCkBAIC0xMjkzLDE1ICsxMzAyLDEzIEBAIFRJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVs
ZHMmIGZpZWxkcywgVEludGVybVR5CiAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKICAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgQVNTRVJUKHVuaW9uQXJy
YXkpOwogCi0gICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBlcnJvciBtZXNzYWdl
IHNob3VsZCBuZXZlciBiZSByYWlzZWQKLSAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGluaXRpYWxpemVkIGlu
IGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOwotICAgICAgICAgICAgcmVjb3Zl
cigpOwotCisgICAgICAgIGlmICghdW5pb25BcnJheSkgewogICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8gYmUgZWl0aGVy
IGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29uc3RhbnQgbm9k
ZSwgZWxzZSwgaXRzIGFuIGVycm9yCi0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0
IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNh
bm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7CiAgICAgICAgIHJlY292ZXIo
KTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMTEsNyArMTMxOCwxMCBAQCBUSW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVs
ZHMsIFRJbnRlcm1UeQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKysp
IHsKICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3Ig
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOwor
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5n
ZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICByZWNvdmVyKCk7
CiAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CiAgICAgICAgIH0KQEAgLTEzMzUs
NyArMTM0NSwxMCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVAogICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAK
ICAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9m
IHJhbmdlICclZCciLCBpbmRleCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZWNvdmVyKCk7CiAgICAgICAg
IGluZGV4ID0gMDsKICAgICB9CkBAIC0xMzQ1LDcgKzEzNTgsNyBAQCBUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgVAogICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CiAgICAgICAg
IHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzNjksNyArMTM4MiwxMCBAQCBU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwg
VEludGVybVR5cGVkKiBub2RlLCBUUwogICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5l
c3MoKTsKIAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBv
dXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0
cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAg
ICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAtMTM4MCw3ICsxMzk2LDcgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBl
ZCogbm9kZSwgVFMKICAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwogICAgICAgICAgdHlwZWROb2RlID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6
ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVs
c2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgYXJyYXkiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVy
biAwOwpAQCAtMTQxNiw3ICsxNDMyLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG4KIAogICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5
cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwg
IkVycm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRo
ZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTQzMyw3ICsxNDQ5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjplbnRlclN0
cnVjdERlY2xhcmF0aW9uKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQogICAg
IC8vIFRoZXkgYXJlbid0IGFsbG93ZWQgaW4gR0xTTCBlaXRoZXIsIGJ1dCB3ZSBuZWVkIHRvIGRl
dGVjdCB0aGlzIGhlcmUKICAgICAvLyBzbyB3ZSBkb24ndCByZWx5IG9uIHRoZSBHTFNMIGNvbXBp
bGVyIHRvIGNhdGNoIGl0LgogICAgIGlmIChzdHJ1Y3ROZXN0aW5nTGV2ZWwgPiAxKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25zIGFyZSBub3Qg
YWxsb3dlZCIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3Qg
ZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2VkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTQ1Myw3ICsxNDY5LDcgQEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3Rp
bmcgPSA0OwogCiBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRT
b3VyY2VMb2MgbGluZSwgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSkKIHsKLSAgICBpZiAoc2hhZGVy
U3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7CisgICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRl
clNwZWMpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE0NjQsOCArMTQ4
MCwxMSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKFRTb3Vy
Y2VMb2MgbGluZSwgY29uc3QgVFR5cGUmIGZpZWxkVAogICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5z
aWRlIGEgc3RydWN0dXJlIGRlZmluaXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCiAgICAgLy8g
b25lIHRvIHRoZSBmaWVsZCdzIHN0cnVjdCBuZXN0aW5nLgogICAgIGlmICgxICsgZmllbGRUeXBl
LmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiIiwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAlcyBl
eGNlZWRzIG1heGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgJWQiLAotICAgICAgICAgICAgICBmaWVs
ZFR5cGUuZ2V0VHlwZU5hbWUoKS5jX3N0cigpLCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nKTsKKyAg
ICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUlu
Zm9TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAiIDw8IGZpZWxkVHlwZS5nZXRU
eXBlTmFtZSgpIAorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1heGltdW0g
c3RydWN0IG5lc3Rpbmcgb2YgIiA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTE0ODIsMTA1ICsxNTAxLDE3IEBAIGludCBQYVBhcnNlU3RyaW5ncyhp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10s
CiAgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQogICAgICAgICByZXR1
cm4gMTsKIAotICAgIC8vIHNldHVwIHByZXByb2Nlc3Nvci4KLSAgICBpZiAoSW5pdFByZXByb2Nl
c3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBEZWZpbmVFeHRlbnNpb25NYWNyb3MoY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IpOwotCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShj
b250ZXh0KSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0
cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKLSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNv
bnRleHQpOworICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5n
dGgsIGNvbnRleHQpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19w
YXJzZShjb250ZXh0KTsKIAogICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0gICAgRmlu
YWxpemVQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0
LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKLX0KLQotT1NfVExTSW5kZXggR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKQotewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEFsbG9jYXRlIGEg
VExTIGluZGV4LgotICAgIC8vCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxv
Y1RMU0luZGV4KCk7Ci0gICAgCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0KLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRl
eCh0bHNpSW5kZXgpOwotfQotCi1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQot
ewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgp
OiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9
IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgewotICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBh
cnNlQ29udGV4dCgpOwotICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRl
IHRocmVhZCBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKLSAgICBPU19TZXRU
TFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZyZWVQYXJzZUNvbnRleHQoKQotewotICAgIGlmIChHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBh
c3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBp
bml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBp
ZiAobHBQYXJzZUNvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVy
cm9ycyA9PSAwKSA/IDAgOiAxOwogfQogCi1UUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFs
UGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcg
Zm9yIHNwZWVkCi0gICAgLy8KIAotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5s
cEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAppbmRleCAzZTA1NzYzLi44ZGVlOGZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aApAQCAtNiw4ICs2LDEwIEBACiAjaWZuZGVmIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogI2Rl
ZmluZSBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvbG9j
YWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIApAQCAtMTgsMTMgKzIwLDYgQEAgc3RydWN0IFRNYXRy
aXhGaWVsZHMgewogICAgIGludCBjb2w7CiB9OwogCi1zdHJ1Y3QgVFByYWdtYSB7Ci0gICAgVFBy
YWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9Ci0gICAgYm9v
bCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJsZSBwcmFnbWFUYWJs
ZTsKLX07Ci0KIC8vCiAvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJsZXMgbmVlZGVk
IGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCiAvLyB0aGV5IGNhbiBiZSBwYXNz
ZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCkBAIC0zMyw4ICsyOCw2
IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJs
ZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwg
U2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywgYm9vbCBj
aGVja3NQcmVjRXJyb3JzLCBjb25zdCBjaGFyKiBzb3VyY2VQYXRoLCBUSW5mb1NpbmsmIGlzKSA6
CiAgICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwKICAgICAgICAgICAgIHN5bWJvbFRh
YmxlKHN5bXQpLAotICAgICAgICAgICAgZXh0ZW5zaW9uQmVoYXZpb3IoZXh0KSwKLSAgICAgICAg
ICAgIGluZm9TaW5rKGlzKSwKICAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCiAgICAgICAg
ICAgICBzaGFkZXJTcGVjKHNwZWMpLAogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCkBAIC00OCwxMiArNDEsMTIgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAg
ICAgY3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKICAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlKGZhbHNlKSwKICAgICAgICAgICAgIGNoZWNrc1ByZWNpc2lvbkVycm9ycyhjaGVja3NQ
cmVjRXJyb3JzKSwKLSAgICAgICAgICAgIGNvbnRleHRQcmFnbWEodHJ1ZSwgZmFsc2UpLAorICAg
ICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihl
eHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3Ms
ICZkaXJlY3RpdmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAg
IFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJz
ZSB0cmVlCiAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUg
dGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKLSAgICBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yOyAgLy8gbWFwcGluZyBiZXR3ZWVu
IHN1cHBvcnRlZCBleHRlbnNpb25zIGFuZCBjdXJyZW50IGJlaGF2aW9yLgotICAgIFRJbmZvU2lu
ayYgaW5mb1Npbms7CiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAgICAv
LyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCiAg
ICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ug
c3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgogICAg
IGludCBjb21waWxlT3B0aW9uczsKQEAgLTY3LDE1ICs2MCwxOSBAQCBzdHJ1Y3QgVFBhcnNlQ29u
dGV4dCB7CiAgICAgY29uc3QgVFR5cGUqIGN1cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0
dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCiAg
ICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVu
Y3Rpb24gaGFzIGEgcmV0dXJuCiAgICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0
cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNs
YXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhwbGljaXQgb3IgaW1wbGljaXQuCi0gICAgc3RydWN0
IFRQcmFnbWEgY29udGV4dFByYWdtYTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CiAgICAgYm9v
bCBBZnRlckVPRjsKKyAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CisgICAgVERpcmVjdGl2
ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKKyAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nl
c3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsg
cmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKFRTb3VyY2VM
b2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKICAgICB2b2lkIHdhcm5pbmcoVFNvdXJjZUxvYyBs
b2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2b2lkIHRyYWNlKGNvbnN0IGNoYXIqIHN0
cik7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKICAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNv
bnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5lKTsKQEAg
LTEwNSw3ICsxMDIsMTMgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgbm9uSW5p
dEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBU
VHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUU3RyaW5nJik7CisKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJl
aGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlv
cigpOyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24p
OworICAgIHZvaWQgaGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisKKyAgICBjb25zdCBUUHJhZ21hJiBw
cmFnbWEoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9CisgICAg
dm9pZCBoYW5kbGVQcmFnbWFEaXJlY3RpdmUoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IGNoYXIqIHZhbHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBl
KTsKICAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUp
OwpAQCAtMTM1LDEzICsxMzgsNCBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiBpbnQgUGFQYXJz
ZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdLAogICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
Ci10eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOwotZXh0ZXJuIFRQ
YXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSNkZWZpbmUgR2xv
YmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi0KLXR5cGVkZWYgc3RydWN0
IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKLXsKLSAgICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBh
cnNlQ29udGV4dDsKLX0gVFRocmVhZFBhcnNlQ29udGV4dDsKLQogI2VuZGlmIC8vIF9QQVJTRVJf
SEVMUEVSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUG9vbEFsbG9jLmNwcAppbmRleCBhNjAwYzAyLi45ZWY0ZjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcApAQCAtMTEs
NiArMTEsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIK
ICNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIApAQCAtMTU4LDEwICsxNTksMTAgQEAg
dm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVt
LCB1bnNpZ25lZCBjaGFyIHZhbCwgY28KIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQg
dGhlIGFzc2VydCBtZXNzYWdlLiAgSXQncyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KICNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxs
b2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAg
ICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1h
Z2UgJXMgJUl1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAg
ICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIHNwcmludGYoYXNz
ZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVw
XG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwg
IlBvb2xBbGxvYzogRGFtYWdlICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKICAg
ICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKICNlbmRpZgogICAgICAg
ICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3NDQxMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaApAQCAtMCwwICsxLDE5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJBR01BX0hfCisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICAvLyBCeSBkZWZhdWx0
IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYuCisgICAg
VFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZhbHNlKSB7IH0KKyAgICBUUHJhZ21h
KGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKworICAgIGJvb2wg
b3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkFH
TUFfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Jl
bmFtZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkYjQw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9SZW5hbWVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gUmVu
YW1lcyBhIGZ1bmN0aW9uLCBpbmNsdWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMg
dG8gaXQuCisvLworY2xhc3MgUmVuYW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworcHVibGljOgorICAgIFJlbmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0
aW9uTmFtZSwgY29uc3QgVFN0cmluZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1
bmN0aW9uTmFtZSkKKyAgICAsIG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQor
CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdn
cmVnYXRlKiBub2RlKQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3Ao
KTsKKyAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNh
bGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAgICAgICAg
bm9kZS0+c2V0TmFtZShtTmV3RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5hbWU7Cisg
ICAgY29uc3QgVFN0cmluZyYgbU5ld0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUkVOQU1FX0ZVTkNUSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9TaEhhbmRsZS5oCmluZGV4IDkxYzQ3ZTcuLjI2NTI4YjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCkBAIC0yNCw2ICsyNCwx
MyBAQAogCiBjbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3Mg
dGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgorLy8KK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CiAK
IC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0
aGUgZHJpdmVyLgpAQCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjbGVhclJl
c3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24gaXMgZGV0
ZWN0ZWQuCiAgICAgYm9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpOworICAg
IC8vIFJld3JpdGVzIGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRo
ZSBDU1MgU2hhZGVycyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9k
ZSogcm9vdCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBu
b3QgZXhjZWVkIHRoZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBH
TFNMIDEuMCBzcGVjIEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJ
bnRlcm1Ob2RlKiByb290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0
aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAg
Ym9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91
dHB1dEdyYXBoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1
c2Ugc2FtcGxlcnMuCisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9s
IAorICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24g
dGhlIGlucHV0IHZhbHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jl
c3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAgICAgLy8gR2V0IGJ1
aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRl
bnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4
IDEzZjExYjUuLjU2ZjVjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0aWMgdm9p
ZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUsCiAgICAgaW50IGFjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICBBU1NF
UlQoY2hlY2tBY3RpdmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8ubmFtZS5j
X3N0cigpLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2FjdGl2ZVVu
aWZvcm1BbmRBdHRyaWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAg
ICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8v
IFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAgICAgICAg
aW50IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICAg
ICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVM
ZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUu
Y19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFw
cGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCmluZGV4IGVkYmVhOTku
LjY4ZjAyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJjb21waWxl
ci9TeW1ib2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUgPGFsZ29y
aXRobT4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBUVHlwZSBo
ZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcgKzU3LDcg
QEAgdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkKICAg
ICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgp
KTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKLSAgICAgICAg
c3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6
ZW9mKGJ1ZiksICIlZCIsIGFycmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsK
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmNwcAppbmRleCA5NmQ3ZjEwLi5mNDFkZWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKQEAg
LTYsNiArNiw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgogCisj
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL091dHB1dEhMU0wuaCIKIAogVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQzOTg1ZTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFT
VCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBz
dGF0ZW1lbnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCi0KLSNp
bmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhM
U0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFy
c2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNv
bnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAgIG1UZW1wb3JhcnlJbmRleCA9
IDA7Ci19Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
LXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0gICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci19Ci0KLWJv
b2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgICAgIG91dCA8PCBt
T3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgcyIgPDwgaSA8PCAi
O1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgImlmKCI7Ci0g
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAg
ICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwg
IiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsK
LSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAg
ICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ImVsc2VcbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2Uo
bU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9XG4i
OwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUlu
ZGV4OwotCi0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdl
dEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5nZXRD
b25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgIHsK
LSAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0K
LSAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotaW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICBy
ZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRhM2JhNWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNz
IE91dHB1dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyCi17Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4
dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1O
b2RlICpub2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJt
U2VsZWN0aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpj
b25zdCBtT3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0j
ZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4MmViYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENp
cmN1aXQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xk
U2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRp
bmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBh
c3NpZ25lZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2ggYXJlIHVzZWQgYnkgdGhlIG1haW4gdHJh
bnNsYXRvciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1l
c3BhY2Ugc2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJz
ZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29u
dGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0g
MDsKK30KKwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKK30K
KworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNM
LT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9
IHRydWU7IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlm
aWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBzID0geTsiLgorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICAgICAgb3V0IDw8ICJi
b29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAie1xuIjsKKworICAg
ICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRM
ZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIg
PSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBu
b2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYoIXMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgIC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxl
bnQgdG8gInggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMg
PSB5OyBlbHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAvLyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBs
aWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYocykgcyA9IHk7Ii4KKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAi
Ym9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAg
ICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAi
ID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAg
bm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlmKHMiIDw8IGkgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisg
ICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5cGUgczsgaWYoYikgcyA9IHg7IGVsc2Ug
cyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAg
ICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhM
U0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOworICAgICAgICBt
VGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUt
PmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIg
PDwgaSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAg
IG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91
dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4i
CisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9
IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKworICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRl
eDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRJ
bml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICB7Cisg
ICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCit7Cisg
ICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc2YTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0
LmgKQEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2ly
Y3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJh
dG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xE
U0hPUlRDSVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitj
bGFzcyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBw
dWJsaWM6CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91
dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAq
bm9kZSk7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSop
OworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24g
Km5vZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9k
ZSk7CisKKyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRw
dXRITFNMOworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8v
IENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCmlu
ZGV4IDc2N2QwYmYuLmQ2OWVjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKQEAgLTYsNiAr
Niw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAogbmFt
ZXNwYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZWJ1Zy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcu
Y3BwCmluZGV4IDk2NDJlMWUuLjUzNzc4YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHN0
ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAog
c3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwpAQCAtMjgsNyArMjksNyBA
QCB2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CiAgICAgICAgIHZzbnByaW50
ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKICAgICAgICAgdmFfZW5kKGFy
Z3MpOwogCi0gICAgICAgIHBhcnNlQ29udGV4dC0+aW5mb1NpbmsuZGVidWcgPDwgYnVmOworICAg
ICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CiAgICAgfQogfQogfSAgLy8gZXh0ZXJuICJD
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jYTY2MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKQEAgLTAs
MCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4
KQorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVw
ZW5kZW5jeUdyYXBoOjpURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQor
eworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsK
K30KKworVERlcGVuZGVuY3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAo
VEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigp
OyBpdGVyICE9IG1BbGxOb2Rlcy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBo
Tm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RH
cmFwaEFyZ3VtZW50KiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFy
Z3VtZW50KiBhcmd1bWVudCA9IG5ldyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGws
IGFyZ3VtZW50TnVtYmVyKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAg
ICByZXR1cm4gYXJndW1lbnQ7Cit9CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lH
cmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9u
Q2FsbCkKK3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3Jh
cGhGdW5jdGlvbkNhbGwoaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9i
YWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxscy5wdXNoX2JhY2soZnVuY3Rpb25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwor
fQorCitUR3JhcGhTeW1ib2wqIFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtU3ltYm9sSWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOwor
CisgICAgVEdyYXBoU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5
bWJvbElkTWFwLmVuZCgpKSB7CisgICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOwor
ICAgICAgICBzeW1ib2wgPSBwYWlyLnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1i
b2wgPSBuZXcgVEdyYXBoU3ltYm9sKGludGVybVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5w
dXNoX2JhY2soc3ltYm9sKTsKKworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3lt
Ym9sLT5nZXRJZCgpLCBzeW1ib2wpOworICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIp
OworCisgICAgICAgIC8vIFdlIHNhdmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rp
b24sIHNvIHdlIGNhbiBzdGFydCBncmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5Lgor
ICAgICAgICBpZiAoSXNTYW1wbGVyKGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAg
ICAgICAgICAgbVNhbXBsZXJTeW1ib2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAg
IHJldHVybiBzeW1ib2w7Cit9CisKK1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAg
ICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJt
U2VsZWN0aW9uKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0
dXJuIHNlbGVjdGlvbjsKK30KKworVEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
TG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0g
bmV3IFRHcmFwaExvb3AoaW50ZXJtTG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29w
KTsKKyAgICByZXR1cm4gbG9vcDsKK30KKworVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdy
YXBoOjpjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRl
cm1Mb2dpY2FsT3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICBy
ZXR1cm4gbG9naWNhbE9wOworfQorCitjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9w
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAg
c3dpdGNoIChnZXRJbnRlcm1Mb2dpY2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6IG9wU3RyaW5nID0gImFuZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogb3BTdHJpbmcgPSAib3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJp
bmcgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWE5YzM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaApAQCAtMCwwICsxLDIxMiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9H
UkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorCisj
aW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNsdWRlIDxzZXQ+CisjaW5j
bHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFwaE5vZGU7CitjbGFzcyBUR3JhcGhQYXJlbnROb2Rl
OworY2xhc3MgVEdyYXBoQXJndW1lbnQ7CitjbGFzcyBUR3JhcGhGdW5jdGlvbkNhbGw7CitjbGFz
cyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3JhcGhTZWxlY3Rpb247CitjbGFzcyBUR3JhcGhMb29w
OworY2xhc3MgVEdyYXBoTG9naWNhbE9wOworY2xhc3MgVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
cjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ7CisKK3R5cGVkZWYgc3RkOjpzZXQ8VEdy
YXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaE5vZGUq
PiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhTeW1ib2wqPiBU
R3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaEZ1bmN0aW9uQ2Fs
bCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgZGVw
ZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitjbGFzcyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IGludGVybU5vZGUobm9kZSkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJvdGVjdGVkOgorICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworfTsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIGRl
cGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBtYXkgaGF2ZSBjaGlsZHJlbi4KKy8vCitjbGFzcyBU
R3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFw
aFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogVEdyYXBoTm9kZShub2RlKSB7fQorICAg
IHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUoKSB7fQorICAgIHZvaWQgYWRkRGVwZW5kZW50Tm9k
ZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChub2RlICE9IHRoaXMpIG1EZXBlbmRlbnROb2Rlcy5p
bnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJpdmF0ZToKKyAgICBUR3JhcGhOb2RlU2V0
IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24gY2FsbCBhcmd1
bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJndW1lbnQgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9k
ZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpCisgICAgICAgIDogVEdyYXBoUGFyZW50
Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgICwgbUFyZ3VtZW50TnVtYmVyKGFyZ3Vt
ZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEFyZ3VtZW50KCkge30KKyAgICBjb25z
dCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgaW50IGdldEFyZ3VtZW50TnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3VtZW50TnVtYmVyOyB9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3By
aXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51bWJlcjsKK307CisKKy8vCisvLyBIYW5kbGUgZnVu
Y3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsIDogcHVibGljIFRHcmFw
aFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgIDogVEdyYXBoUGFyZW50Tm9kZShp
bnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoRnVuY3Rpb25DYWxsKCkg
e30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBj
b25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KTsKK307CisKKy8vCisvLyBIYW5kbGUgc3ltYm9scy4KKy8vCitjbGFzcyBUR3JhcGhTeW1ib2wg
OiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoU3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkgOiBUR3JhcGhQYXJlbnROb2RlKGludGVybVN5bWJv
bCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTeW1ib2woKSB7fQorICAgIGNvbnN0IFRJbnRlcm1T
eW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFz
U3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgaWYgc3Rh
dGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCisvLworY2xhc3MgVEdyYXBoU2VsZWN0aW9u
IDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFNlbGVjdGlvbihUSW50
ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pIDogVEdyYXBoTm9kZShpbnRlcm1TZWxlY3Rp
b24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU2VsZWN0aW9uKCkge30KKyAgICBjb25zdCBUSW50
ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBpbnRlcm1O
b2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8g
SGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBsb29wcy4KKy8vCitjbGFzcyBUR3JhcGhM
b29wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaExvb3AoVEludGVy
bUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb29wKSB7fQorICAgIHZpcnR1
YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1Mb29wKiBnZXRJbnRlcm1Mb29w
KCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNMb29wTm9kZSgpOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgbG9naWNhbCBhbmQsIG9yLgorLy8KK2NsYXNzIFRH
cmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKSA6IFRHcmFwaE5vZGUoaW50
ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvZ2ljYWxPcCgpIHt9CisgICAg
Y29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50ZXJtTG9naWNhbE9wKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRPcFN0
cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gQSBkZXBlbmRlbmN5IGdy
YXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4KKy8vCisvLyBU
aGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgZW50cnkgcG9pbnRzIG9mIHRo
ZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8vIERlcGVuZGVuY3kgZ3JhcGggbm9kZXMgc2hvdWxk
IGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBwcm92aWRlZCAiY3JlYXRlLi4uIiBtZXRo
b2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5vYm9keSBlbHNlKSBtYW5hZ2VzIHRoZSBtZW1vcnkg
b2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBOb2RlcyBtYXkgbm90IGJlIHJlbW92ZWQgYWZ0ZXIg
YmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVkIG5vZGVzIHdpbGwgZXhpc3Qgd2hpbGUgdGhlCisv
LyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNlIGV4aXN0cy4KKy8vCitjbGFzcyBURGVwZW5kZW5j
eUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lHcmFwaCgpOworICAgIFRHcmFwaE5vZGVWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmJlZ2luKCk7
IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEdyYXBoU3ltYm9sVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1wbGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmVuZCgpOworICAgIH0KKworICAgIFRGdW5jdGlv
bkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxz
LmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmVuZCgpOworICAgIH0KKworICAgIFRHcmFw
aEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlv
bkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBjcmVh
dGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAg
ICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5
bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBjcmVhdGVTZWxlY3Rpb24oVEludGVybVNlbGVj
dGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBUR3JhcGhMb29wKiBjcmVhdGVMb29wKFRJbnRl
cm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGNyZWF0ZUxvZ2ljYWxP
cChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApOworcHJpdmF0ZToKKyAgICB0eXBlZGVm
IFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRNYXA7CisgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRQYWlyOworCisgICAgVEdyYXBoTm9k
ZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdyYXBoU3ltYm9sVmVjdG9yIG1TYW1wbGVyU3ltYm9s
czsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHM7Cisg
ICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1hcDsKK307CisKKy8vCisvLyBGb3IgdHJhdmVyc2lu
ZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNlcnMgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsCisv
LyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3Mg
aXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdoZW4gdXNpbmcgdGhpcywganVz
dCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVkLgorLy8KK2Ns
YXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgwKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRB
cmd1bWVudChUR3JhcGhBcmd1bWVudCogc2VsZWN0aW9uKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpIHt9Owor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlv
bikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2Fs
T3ApIHt9OworCisgICAgaW50IGdldERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9Cisg
ICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsgKyttRGVwdGg7IH0KKyAgICB2b2lkIGRlY3JlbWVu
dERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisgICAgdm9pZCBjbGVhclZpc2l0ZWQoKSB7IG1WaXNp
dGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1hcmtWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIHsg
bVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoVEdyYXBoTm9kZSog
bm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0ZWQuZmluZChub2RlKSAhPSBtVmlzaXRlZC5lbmQo
KTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURlcHRoOworICAgIFRHcmFwaE5vZGVTZXQgbVZpc2l0
ZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg2Y2ZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMjI3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUq
IG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyIGJ1aWxkZXIoZ3JhcGgpOworICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgc3dpdGNoIChpbnRlcm1B
Z2dyZWdhdGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RnVuY3Rpb25DYWxsOiB2aXNpdEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogdmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUp
OyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUFnZ3JlZ2F0ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0
IHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCisgICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFt
ZSgpICE9ICJtYWluKCIpCisgICAgICAgIHJldHVybjsKKworICAgIHZpc2l0QWdncmVnYXRlQ2hp
bGRyZW4oaW50ZXJtQWdncmVnYXRlKTsKK30KKworLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtl
ICJmKHgpIiBhbmQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorLy8gInggLT4gYXJn
dW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIi4KK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0RnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkK
K3sKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRl
RnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAvLyBSdW4gdGhyb3VnaCB0
aGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMuCisgICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsK
KyAgICBUSW50ZXJtU2VxdWVuY2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2Fs
bC0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGludGVybUFyZ3VtZW50cy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBpbnRl
cm1Bcmd1bWVudHMuZW5kKCk7CisgICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCisg
ICAgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7
CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7CisgICAgICAg
IGludGVybUFyZ3VtZW50LT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBpZiAoVFBhcmVudE5v
ZGVTZXQqIGFyZ3VtZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAg
ICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50
ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgICAgICAgICBjb25uZWN0TXVs
dGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7CisgICAgICAg
ICAgICBhcmd1bWVudC0+YWRkRGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rp
b24gY2FsbCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAg
IC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAgICAvLyBU
aHVzLCBhbiBleHByZXNzaW9uIGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5j
eSBncmFwaCBsaWtlCisgICAgLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+
IHkiLgorICAgIC8vIFRoaXMgbGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNh
bGwgbm9kZSBiYWNrIHVwIHRvIGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50CisgICAgLy8gY2Fs
bCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIu
CisgICAgbU5vZGVTZXRzLmluc2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgVEludGVybVNlcXVlbmNlJiBzZXF1
ZW5jZSA9IGludGVybUFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IoVEludGVybVNl
cXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBz
ZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVy
bUNoaWxkID0gKml0ZXI7CisgICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIGludGVybVN5bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8g
dGhlIHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBv
ciBjb25kaXRpb24KKyAgICAvLyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgorICAgIFRHcmFwaFN5
bWJvbCogc3ltYm9sID0gbUdyYXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOwor
ICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KHN5bWJvbCk7CisKKyAgICAvLyBJZiB0aGlz
IHN5bWJvbCBpcyB0aGUgY3VycmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVu
dCwgcmVwbGFjZSB0aGUgcHJldmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlz
IHN5bWJvbC4KKyAgICBpZiAoIW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RT
eW1ib2xzLnRvcCgpICE9ICZtUmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJv
bHMucG9wKCk7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0K
K30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBp
bnRlcm1CaW5hcnktPmdldE9wKCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50
ZXJtQmluYXJ5LT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRl
cm1CaW5hcnkpOworICAgIGVsc2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9w
TG9naWNhbE9yKQorICAgICAgICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVs
c2UKKyAgICAgICAgdmlzaXRCaW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlw
ZWQqIGludGVybUxlZnQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFp
bnRlcm1MZWZ0KQorICAgICAgICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0
U3ltYm9sID0gTlVMTDsKKworICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJl
ZSk7CisgICAgICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IGxlZnRtb3N0U3ltYm9sID0gbUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAg
Ly8gQWZ0ZXIgdHJhdmVyc2luZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwg
d2Ugc2hvdWxkIGhhdmUgZm91bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1i
b2wsIGFuZCB0aGUgbGVmdG1vc3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4K
KyAgICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFz
c2lnbm1lbnQtPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAg
ICAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9w
U2V0KCkpCisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3Np
Z25tZW50Tm9kZXMsIGxlZnRtb3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBs
ZWZ0bW9zdCBzeW1ib2wgb2YgdGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9m
IGRlcGVuZGVudCBzeW1ib2xzIHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhp
cyBhc3NpZ25tZW50LgorICAgIC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdp
bGwgeWllbGQgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBU
aGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5l
c3RlZCBhc3NpZ25tZW50ICgiYiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8g
dGhlIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50
LCB3aGljaCB3aWxsCisgICAgLy8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAg
IG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50
ZXJtTG9naWNhbE9wKQoreworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRl
cm1Mb2dpY2FsT3AtPmdldExlZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBt
Tm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9n
aWNhbE9wID0gbUdyYXBoLT5jcmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAg
ICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNh
bE9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJp
Z2h0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRy
ZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1C
aW5hcnkqIGludGVybUJpbmFyeSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0
ID0gaW50ZXJtQmluYXJ5LT5nZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5h
cnktPmdldFJpZ2h0KCkpIHsKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVy
bVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBp
bnRlcm1TZWxlY3Rpb24pCit7CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24g
PSBpbnRlcm1TZWxlY3Rpb24tPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRp
b24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlv
bk5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxl
Y3Rpb24qIHNlbGVjdGlvbiA9IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlv
bik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRp
b25Ob2Rlcywgc2VsZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJt
Tm9kZSogaW50ZXJtVHJ1ZUJsb2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkK
KyAgICAgICAgaW50ZXJtVHJ1ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50
ZXJtTm9kZSogaW50ZXJtRmFsc2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9j
aygpKQorICAgICAgICBpbnRlcm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVy
bVR5cGVkKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgewor
ICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAg
ICAgICAgICAgVEdyYXBoTG9vcCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29w
KTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlv
bk5vZGVzLCBsb29wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSog
aW50ZXJtQm9keSA9IGludGVybUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9u
ID0gaW50ZXJtTG9vcC0+Z2V0RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9u
LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFy
ZW50Tm9kZVNldCogbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAg
IGZvciAoVFBhcmVudE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4o
KTsgaXRlciAhPSBub2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBh
cmVudE5vZGUqIGN1cnJlbnROb2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGRE
ZXBlbmRlbnROb2RlKG5vZGUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjIz
MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCkBAIC0wLDAgKzEsMTgxIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0JVSUxERVJfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JV
SUxERVJfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgi
CisKKy8vCisvLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlv
biBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8gaW50ZXJtZWRpYXRl
IHRyZWUuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQoVEludGVybU5vZGUq
IG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKworcHJpdmF0ZToK
KyAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJvbFN0YWNrOworICAg
IHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnROb2RlU2V0OworCisg
ICAgLy8KKyAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5vZGVzIG9mIGFzc2ln
bm1lbnRzLCBjb25kaXRpb25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVyc2luZyB0aGUgaW50
ZXJtZWRpYXRlIHRyZWUuCisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHN0
YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3JhcGggcGFyZW50IG5v
ZGVzLgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAgcHVibGljOgorICAg
ICAgICBUTm9kZVNldFN0YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0YWNrKCkgeyBjbGVh
cigpOyB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBw
dXNoU2V0LgorICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBzZXQgaXMgZW1wdHku
CisgICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVu
dE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgcmV0dXJuICF0
b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNldCgpKTsgfQorICAg
ICAgICB2b2lkIHBvcFNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNl
dHMuZW1wdHkoKSk7CisgICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9wKCk7CisgICAgICAg
ICAgICBub2RlU2V0cy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBvcHMgdGhlIHRv
cCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNldC4KKyAgICAgICAg
Ly8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAv
LyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0b3Agc2V0IGlzIGp1
c3QgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBUUGFyZW50
Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAgICAgICBub2RlU2V0
cy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAg
ICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVnaW4oKSwgb2xkVG9w
U2V0LT5lbmQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBvbGRUb3BT
ZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8g
dG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8g
dG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9scyB0aGF0IGFyZSBu
b3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAgIC8vIFdlIGRvbid0
IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBpbnNlcnRJbnRvVG9w
U2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
bm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
Y2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVTZXRzLmVtcHR5KCkp
CisgICAgICAgICAgICAgICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQYXJlbnROb2RlU2V0
U3RhY2s7CisKKyAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0czsKKyAgICB9Owor
CisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBu
b2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2Vz
IG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAgIC8vCisgICAgY2xh
c3MgVE5vZGVTZXRNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0TWFp
bnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDog
c2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflRO
b2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBp
bnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRp
YXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5k
IHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMgdG8KKyAgICAvLyB0
aGUgbmV3IHRvcCBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0UHJvcGFnYXRpbmdN
YWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQorICAgICAgICAgICAg
OiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsgfQorICAgICAgICB+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0SW50b05leHQoKTsg
fQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9Owor
CisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9m
IHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFuCisgICAgLy8gYXNz
aWdubWVudC4KKyAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVyIHN5bWJvbCBrTGVm
dFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRyZWUsCisgICAgLy8g
YW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAgIC8vIFdoZW4gaXQg
Z29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBzeW1ib2wgYXQgdGhl
IHRvcCBvZiB0aGUgc2NvcGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwgdGhlIFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0aCBhIHJlYWwgc3lt
Ym9sLgorICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBsYWNlZCBieSBhIHJl
YWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9zdAorICAgIC8vIHN5
bWJvbC4KKyAgICAvLworICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihURGVwZW5kZW5jeUdy
YXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0cmVlKQorICAgICAgICAgICAg
OiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykKKyAgICAgICAgewor
ICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0U3ltYm9scy5lbXB0
eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJlZTsKKyAgICAgICAgICAgIGlm
IChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9s
cy5wdXNoKCZzdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIH5UTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5lZWRzUGxhY2Vob2xkZXJT
eW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICB9
CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFRTeW1ib2xTdGFjayYgbGVmdG1vc3RTeW1ib2xz
OworICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7CisgICAgfTsKKworICAgIFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKQorICAgICAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1MZWZ0U3Vi
dHJlZShOVUxMKQorICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtR3Jh
cGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkgeyBp
bnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25uZWN0TXVsdGlwbGVO
b2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFwaE5vZGUqIG5vZGUp
IGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSopOworICAg
IHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRCaW5h
cnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uQ2FsbChUSW50
ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBUR3JhcGhTeW1ib2wgbUxlZnRT
dWJ0cmVlOworICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVlOworCisgICAgVERlcGVuZGVu
Y3lHcmFwaCogbUdyYXBoOworICAgIFROb2RlU2V0U3RhY2sgbU5vZGVTZXRzOworICAgIFRTeW1i
b2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBH
UkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZmM0ODllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKQEAgLTAsMCArMSw2NSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCIKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRl
bnRhdGlvbigpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXREZXB0aCgpOyArK2kpCisg
ICAgICAgIG1TaW5rIDw8ICIgICI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImFyZ3VtZW50ICIgPDwgcGFyYW1ldGVyLT5nZXRB
cmd1bWVudE51bWJlcigpIDw8ICIgb2YgY2FsbCB0byAiCisgICAgICAgICAgPDwgcGFyYW1ldGVy
LT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQg
VERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25D
YWxsKiBmdW5jdGlvbkNhbGwpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2lu
ayA8PCAiZnVuY3Rpb24gY2FsbCAiIDw8ICBmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9u
Q2FsbCgpLT5nZXROYW1lKCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCktPmdldFN5
bWJvbCgpIDw8ICIgKHN5bWJvbCBpZDogIgorICAgICAgICAgIDw8IHN5bWJvbC0+Z2V0SW50ZXJt
U3ltYm9sKCktPmdldElkKCkgPDwgIilcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91
dHB1dDo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAg
b3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAic2VsZWN0aW9uXG4iOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQor
eworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImxvb3AgY29uZGl0aW9u
XG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9naWNhbE9wKFRH
cmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgImxvZ2ljYWwgIiA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkgPDwgIlxu
IjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1Ry
ZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIG1TaW5rIDw8ICJcbiI7CisKKyAg
ICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdp
bigpOyBpdGVyICE9IGdyYXBoLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhO
b2RlKiBzeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgbVNpbmsgPDwgIi0tLSBEZXBlbmRlbmN5IGdy
YXBoIHNwYW5uaW5nIHRyZWUgLS0tXG4iOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAg
ICAgc3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbVNpbmsgPDwgIlxuIjsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0NDdkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaApAQCAtMCwwICsxLDMwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisjZGVmaW5lIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
CisKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgOiBwdWJsaWMgVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaE91dHB1dChUSW5mb1Np
bmtCYXNlJiBzaW5rKSA6IG1TaW5rKHNpbmspIHt9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3lt
Ym9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVu
dChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRGdW5j
dGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApOworCisgICAgdm9pZCBv
dXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKK3ByaXZhdGU6
CisgICAgdm9pZCBvdXRwdXRJbmRlbnRhdGlvbigpOworCisgICAgVEluZm9TaW5rQmFzZSYgbVNp
bms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhf
T1VUUFVUX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTg1NzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vIFRo
ZXNlIG1ldGhvZHMgZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFw
aCBhbmQgbWFyayB2aXNpdGVkIG5vZGVzLgorCit2b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJh
dmVyc2VyLT5tYXJrVmlzaXRlZCh0aGlzKTsKK30KKwordm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisKKyAgICBncmFwaFRyYXZl
cnNlci0+aW5jcmVtZW50RGVwdGgoKTsKKworICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdz
IGNoaWxkcmVuLgorICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG1EZXBlbmRlbnROb2Rlcy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9k
ZXMuZW5kKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhOb2RlKiBu
b2RlID0gKml0ZXI7CisgICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2Rl
KSkKKyAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKyAgICB9CisK
KyAgICBncmFwaFRyYXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKK30KKwordm9pZCBUR3JhcGhB
cmd1bWVudDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7CisgICAgVEdy
YXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFw
aEZ1bmN0aW9uQ2FsbDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhU
cmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMp
OworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwor
dm9pZCBUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdy
YXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsK
KyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhp
cyk7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lk
IFRHcmFwaExvb3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJh
dmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaExvZ2lj
YWxPcDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCmluZGV4IDI2ZjE0NTcuLjNhNDVkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaApAQCAt
OCw5ICs4LDkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQ7CiBleHRlcm4gaW50IGdsc2xhbmdfaW5p
dGlhbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19maW5h
bGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotZXh0ZXJuIHZvaWQgZ2xzbGFuZ19zY2Fu
KGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4g
aW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRl
eCA5YTAzOTRiLi5iOWEzMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmwKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0zOCw2ICszOCw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBF
UyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KICV7CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFu
Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIK
ICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCkBAIC0xNTksNiArMTYwLDcgQEAgTyAgICAgICAg
ICAgWzAtN10KICJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQogImV4dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAiaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJm
bGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAibG9u
ZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJzaG9ydCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTY2LDYgKzE2
OCw3IEBAIE8gICAgICAgICAgIFswLTddCiAiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQogInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KIAogImlucHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CiAib3V0cHV0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KQEAgLTE3MywxMiArMTc2LDIxIEBAIE8gICAgICAgICAgIFswLTddCiAiaHZlYzIiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjMyIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImh2ZWM0IiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzIiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KICJkdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQogImR2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisiZnZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImZ2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJz
YW1wbGVyMUQiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBs
ZXIzRCIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVy
MURTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIy
RFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVy
M0RSZWN0IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRS
ZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogInNpemVv
ZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiY2FzdCIgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE5Myw3ICsyMDUs
NyBAQCBPICAgICAgICAgICBbMC03XQogCiAwW3hYXXtIfSsgICAgICAgICB7IHl5bHZhbC0+bGV4
LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogMHtPfSsg
ICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KLTB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRleHQt
PnJlY292ZXIoKTsgcmV0dXJuIDA7fQorMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCk7IGNvbnRleHQtPnJl
Y292ZXIoKTsgcmV0dXJuIDA7fQoge0R9KyAgICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0g
c3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAoge0R9K3tFfSAg
ICAgICAgICAgeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5
dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KQEAgLTI2MCwxMCArMjcyLDE1IEBAIE8g
ICAgICAgICAgIFswLTddCiAKICUlCiAKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IK
IGV4dGVybiAiQyIgewogLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KICNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgogCitleHRlcm4gaW50IEluaXRQcmVwcm9j
ZXNzb3IoKTsKK2V4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiB2b2lk
IFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7CisKICNkZWZp
bmUgU0VUVVBfQ09OVEVYVChwcCkgXAogICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBh
cnNlQ29udGV4dCopIHBwLT5wQzsgXAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CkBAIC0yNzIsMjYgKzI4OSwyNiBAQCBleHRl
cm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBj
b250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9M
b2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtMzQ2LDg4ICszNjMs
MTUgQEAgdm9pZCBEZWNMaW5lTnVtYmVyKCkKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIg
Kip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGlmICghc3RyY21wKHRva2Vuc1swXSwgIm9wdGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRv
a2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdt
YSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5
d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21w
KHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5v
cHRpbWl6ZSA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUn
IHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNb
MF0sICJkZWJ1ZyIpKSB7Ci0gICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3Ry
Y21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihc
IiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwg
Im9uIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFm
dGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1Zycg
cHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
I2lmZGVmIFBSQUdNQV9UQUJMRQotICAgICAgICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYyBwcmFnbWEKLSAgICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBwcmFnbWEKLSAgICAgICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0
aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4
YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEg
c3ludGF4IGxpa2UKLSAgICAgICAgLy8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQot
ICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2
YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8g
ICAgICAgIAotICAgICAgICBpZiAobnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0s
ICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxl
OjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0
cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0g
PSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChu
dW1Ub2tlbnMgPj0gMikgewotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwot
ICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRl
ciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlm
IChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw
cmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBQUkFHTUFfVEFCTEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5z
ICE9IDQpIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1
cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAg
Y29udGV4dC0+aGFuZGxlUHJhZ21hRGlyZWN0aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vu
c1syXSk7CiB9CiAKLXZvaWQgU3RvcmVTdHIoY2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihj
b25zdCBjaGFyICpzdHJpbmcpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJp
bmcgc3RyU3JjOwpAQCAtNDQ5LDcxICszOTMsMzMgQEAgdm9pZCBSZXNldFRTdHJpbmcodm9pZCkK
ICAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gIiI7CiB9CiAKLVRCZWhhdmlvciBHZXRCZWhhdmlv
cihjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBpZiAoIXN0cmNtcCgicmVxdWlyZSIsIGJl
aGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7Ci0gICAgZWxzZSBpZiAoIXN0cmNt
cCgiZW5hYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRW5hYmxlOwotICAgIGVs
c2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhE
aXNhYmxlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBiZWhhdmlvcikpCi0gICAgICAg
IHJldHVybiBFQmhXYXJuOwotICAgIGVsc2UgewotICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRT
dHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNf
c3RyKCkpOwotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICB9ICAgICAgICAKLX0KLQog
dm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBj
aGFyKiBiZWhhdmlvcikKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVEJlaGF2aW9y
IGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZpb3IpOwotICAgIFRNYXA8VFN0cmluZywg
VEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7Ci0gICAgVFN0cmluZyBtc2c7Ci0gICAgCi0gICAg
Ly8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lvbgotICAgIGlmICghc3RyY21wKGV4dE5h
bWUsICJhbGwiKSkgewotICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSB8fCBi
ZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
ZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlv
ciIpOyAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVyICE9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRT
dHJpbmcoZXh0TmFtZSkpOwotICAgICAgICBpZiAoaXRlciA9PSBjb250ZXh0LT5leHRlbnNpb25C
ZWhhdmlvci5lbmQoKSkgewotICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewotICAg
ICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVk
IikuY19zdHIoKSk7ICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RUJoRW5hYmxlOgotICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgICAgICAgY2FzZSBF
QmhEaXNhYmxlOgotICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAnIikg
KyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXls
aW5lbm8pOyAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7
Ci0gICAgfQorICAgIGNvbnRleHQtPmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZSh5eWxpbmVubywg
ZXh0TmFtZSwgYmVoYXZpb3IpOwogfQogfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmICAvLyAhQU5H
TEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogaW50IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIGlu
dCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAgaW50IGxlbjsKLQotICAgIGlm
ICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAobGVuID49IG1heF9zaXplKSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoImlu
cHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVy
IHVzZXMgUkVKRUNUIik7Ci0KLSAgICBidWZbbGVuXSA9ICcgJzsKLSAgICByZXR1cm4gbGVuKzE7
CisgICAgaW50IGxlbiA9IDA7CisKKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAg
IHBwOjpUb2tlbiB0b2tlbjsKKyAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNz
b3IubGV4KCZ0b2tlbik7CisgICAgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1Qg
PyAwIDogdG9rZW4udmFsdWUuc2l6ZSgpOworICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1h
eF9zaXplKSkKKyAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsK
KyAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKHRva2VuLmxvY2F0aW9uLmZpbGUsIHRv
a2VuLmxvY2F0aW9uLmxpbmUpLCB5eXNjYW5uZXIpOworI2Vsc2UKKyAgICBsZW4gPSB5eWxleF9D
UFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisKKyAgICBpZiAobGVuID49IG1heF9zaXplKQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5w
dXQgYnVmZmVyIG92ZXJmbG93Iik7CisgICAgZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVm
W2xlbisrXSA9ICcgJzsKKyAgICByZXR1cm4gbGVuOwogfQogCiBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpIHsKQEAgLTU0NCw5ICs0NTAsOSBAQCB2b2lkIHl5ZXJyb3IoVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgc3RydWN0IHl5Z3V0
c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAgIGlm
IChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywg
cmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC01NjUsMjIgKzQ3MSw0MyBAQCBpbnQgZ2xzbGFuZ19maW5h
bGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkg
cmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJu
IHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKwor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAg
ICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2Nh
bihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJl
c3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVuY29kZVNv
dXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0Yg
PSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8vIEluaXRp
YWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAg
aWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKKyAg
ICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNo
U3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2Mg
ICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFz
dEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAg
IGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisKKyAg
ICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZp
b3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBmb3Ig
KFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJl
Z2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyNp
ZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNz
b3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQorICAgICAg
ICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRpZgorICAg
IH0KKyAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkKaW5kZXggZDZjODg2OS4uYWI0YWEyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CkBAIC04NCwyMSArODQsMjEg
QEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFy
KiByZWFzb24pOwogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNv
bnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5
ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywg
TCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIp
IHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAi
IHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBM
KSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVS
KSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CkBAIC0xNjcsNyArMTY3LDcgQEAg
dmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5z
eW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChz
eW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVj
bGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CkBAIC0x
NzYsNyArMTc2LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBz
eW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMDYs
NyArMjA2LDcgQEAgcHJpbWFyeV9leHByZXNzaW9uCiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVy
ZmxvdyBmb3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoJDEuaSkgPj0g
KDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVn
ZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIzNSw5ICsyMzUsOSBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQg
aW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBpZiAoISQxLT5pc0Fy
cmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgewogICAgICAgICAg
ICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgs
IG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2Yg
J1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90
IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMg
bm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQx
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0KSB7CkBAIC0yNTQsNyArMjU0LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lv
bgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEt
PmlzTWF0cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYm
ICEkMS0+aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rp
b24gb3V0IG9mIHJhbmdlICciIDw8ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7
CkBAIC0yNjcsNyArMjcwLDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkg
Pj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQg
b2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnIiA8PCAkMy0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
IDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxNiw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1Qg
RklFTERfU0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRv
IGFuIGFycmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5l
LCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM2MSw3IEBA
IHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmll
bGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHll
dCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIg
bm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0zNzMsNyArMzc5LDcgQEAgcG9zdGZpeF9leHByZXNz
aW9uCiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNv
bnN0IFRUeXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAg
ICAgICAgIGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIi
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC00MDUsMTMgKzQxMSwxMyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwg
JDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBm
aWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBs
ZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIo
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQx
OwogICAgICAgICB9CkBAIC01MDAsOSArNTA2LDEwIEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUt
PmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVu
Y3Rpb24uICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBz
dGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8g
PSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlw
ZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTI2LDcgKzUzMyw3IEBAIGZ1bmN0aW9uX2NhbGwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSku
dHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9
PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24i
LCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRl
cm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAn
b3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5l
KCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQn
IHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTU4LDcgQEAgZnVuY3Rpb25fY2FsbF9v
cl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Np
b24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQz
LmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02
NDcsNyArNjU0LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDog
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0
IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMTQsMTIgQEAgZnVuY3Rp
b25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkp
KTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRS
ZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhl
IHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFt
ZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmlu
ZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmll
cnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDY3LDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4g
Zmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCkn
IiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fu
bm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFy
YW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA4MSw3IEBAIGZ1bmN0aW9u
X2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxp
ZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFs
bG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0x
MDk1LDcgKzExMDIsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1l
CiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUg
PT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCci
LCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTgsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlz
dAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAg
IGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMzA1LDcgQEAg
c2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElG
SUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVu
c2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3Ry
KCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJv
bCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5n
LCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzcxLDcgQEAgc2luZ2xlX2RlY2xh
cmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50
aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0NDUsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24K
IC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxl
ID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJy
ZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8g
ZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8v
ICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDU3LDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAg
ICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9y
dGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJy
YXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVk
IiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYm
CiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9y
IGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVh
bGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY2MSw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFy
cmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwg
InNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY3MCw3IEBA
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBw
b3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVS
VF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xOTY2LDE0ICsxOTczLDE0IEBA
IGZvcl9yZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQKICAgICA6IENPTlRJTlVFIFNFTUlD
T0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25s
eSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7
CiAgICAgfQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFs
bG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVP
cEJyZWFrLCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk4OCw3IEBAIGp1bXBfc3RhdGVtZW50CiAg
ICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1
cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4i
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTE5ODksMTAgKzE5OTYsMTAgQEAganVtcF9zdGF0ZW1lbnQKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxpbmUpOwogICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYg
KCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3Qg
bWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0
dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMDM3LDcgKzIwNDQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAv
LwogICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4K
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVu
Y3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFk
eSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZp
bmVkKCk7CkBAIC0yMDQ3LDcgKzIwNTQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAg
IC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewogICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJh
bWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBh
cmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAt
MjA3OSw3ICsyMDg2LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAg
ICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVm
aW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlh
YmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMTYsOSArMjEyMyw4IEBAIGZ1bmN0aW9uX2Rl
ZmluaXRpb24KIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBk
ZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBp
bmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJz
ZSB0cmVlCi0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLnBy
YWdtYVRhYmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNv
bnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoJDMgJiYg
JDMtPmdldEFzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0RW5kTGluZSgkMy0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0RW5kTGluZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCmlu
ZGV4IDU5YjcyOTkuLmQyOWQ5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcApAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3
ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zODMsOCArMzgz
LDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CiAJKnl5X2NwID0gJ1wwJzsgXAogCXl5Zy0+eXlfY19idWZfcCA9
IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDE1NQorI2RlZmluZSBZWV9FTkRfT0ZfQlVG
RkVSIDE1NgogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAogICAg
YnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwpA
QCAtMzkyLDU1ICszOTIsNTggQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2ludDMyX3Qg
eXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9hY2NlcHRbNDI2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0WzQ1OV0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAgMTQ1LCAgMTQ1LAotICAgICAgMTMwLCAgMTM2LCAg
MTQxLCAgMTI1LCAgMTI2LCAgMTM0LCAgMTMzLCAgMTIyLCAgMTMxLCAgMTI5LAotICAgICAgMTM1
LCAgIDk0LCAgIDk0LCAgMTIzLCAgMTE5LCAgMTM3LCAgMTI0LCAgMTM4LCAgMTQyLCAgIDkwLAot
ICAgICAgMTI3LCAgMTI4LCAgMTQwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgMTIwLCAgMTM5LCAgMTIx
LCAgMTMyLCAgICAzLCAgICA0LCAgICAzLAotICAgICAgMTQ0LCAgMTQ3LCAgMTQzLCAgMTE2LCAg
MTAyLCAgMTIxLCAgMTEwLCAgMTA1LCAgMTAwLCAgMTA4LAotICAgICAgIDk4LCAgMTA5LCAgIDk5
LCAgIDk3LCAgICAyLCAgICAxLCAgMTAxLCAgIDk2LCAgIDkyLCAgIDkzLAotICAgICAgICAwLCAg
ICAwLCAgIDk0LCAgMTI4LCAgMTIwLCAgMTI3LCAgMTE3LCAgMTEzLCAgMTE1LCAgMTE0LAotICAg
ICAgMTE4LCAgIDkwLCAgMTA2LCAgMTEyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMTcsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjAsICAgMjIsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAxMDcsICAxMTEsICAgIDUsICAxNDMsCi0gICAg
ICAgIDAsICAgIDEsICAgOTYsICAgIDAsICAgIDAsICAgOTUsICAgOTEsICAxMDMsICAxMDQsICAg
NTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgMTgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgMjYsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgMjMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAgMCwgICA5
NywKLSAgICAgICAgMCwgICA5NiwgICA5MCwgICAyOCwgICA5MCwgICA5MCwgICA4NywgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMSwgICA1MywgICA5
MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA1OCwgICA3MiwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2OSwgICAgOSwgICAz
MywgICAzNCwgICAzNSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA1NiwgICAyOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAzNiwK
LSAgICAgICAzNywgICAzOCwgICAyNywgICA5MCwgICA5MCwgICA5MCwgICAxNSwgICA0MiwgICA0
MywgICA0NCwKLSAgICAgICA1MSwgICAxMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA4Mywg
ICA4NCwgICA4NSwgICA5MCwKLQotICAgICAgIDMwLCAgIDczLCAgIDI1LCAgIDgwLCAgIDgxLCAg
IDgyLCAgICA3LCAgIDc3LCAgIDc4LCAgIDc5LAotICAgICAgIDkwLCAgIDI0LCAgIDc1LCAgIDkw
LCAgIDkwLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUyLCAgIDkwLCAgIDg5LCAgIDkwLCAgIDkwLAot
ICAgICAgIDE5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDcxLCAgIDY2LCAgIDYxLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDc2LCAgIDU3LCAgIDkwLCAgIDY0LCAg
IDMyLCAgIDkwLCAgIDg2LAotICAgICAgIDY1LCAgIDQ5LCAgIDU5LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDYwLCAgIDMxLCAgIDkwLCAg
IDkwLCAgIDkwLCAgICA4LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDU0
LCAgIDEzLCAgIDkwLCAgIDE0LCAgIDkwLCAgIDkwLCAgIDE2LCAgIDY3LAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDYyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDU1LCAgIDc0LAotCi0g
ICAgICAgNjMsICAgMTEsICAgNjgsICAgIDYsICAgODgsICAgMTAsICAgNDUsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDYsICAgOTAsICAgOTAsICAgOTAsICAg
NDgsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNDcsICAgIDAKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE1NiwgIDE1NCwgIDE1MywgIDE1
MywKKyAgICAgIDEzOCwgIDE0NCwgIDE0OSwgIDEzMywgIDEzNCwgIDE0MiwgIDE0MSwgIDEzMCwg
IDEzOSwgIDEzNywKKyAgICAgIDE0MywgIDEwMiwgIDEwMiwgIDEzMSwgIDEyNywgIDE0NSwgIDEz
MiwgIDE0NiwgIDE1MCwgICA5OCwKKyAgICAgIDEzNSwgIDEzNiwgIDE0OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgIDEyOCwgIDE0NywgIDEyOSwgIDE0MCwgICAgMywgICAgNCwgICAgMywKKyAgICAgIDE1
MiwgIDE1NSwgIDE1MSwgIDEyNCwgIDExMCwgIDEyOSwgIDExOCwgIDExMywgIDEwOCwgIDExNiwK
KyAgICAgIDEwNiwgIDExNywgIDEwNywgIDEwNSwgICAgMiwgICAgMSwgIDEwOSwgIDEwNCwgIDEw
MCwgIDEwMSwKKyAgICAgICAgMCwgICAgMCwgIDEwMiwgIDEzNiwgIDEyOCwgIDEzNSwgIDEyNSwg
IDEyMSwgIDEyMywgIDEyMiwKKyAgICAgIDEyNiwgICA5OCwgIDExNCwgIDEyMCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDE3LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIwLCAgIDIyLAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
MTE1LCAgMTE5LCAgICA1LAorICAgICAgMTUxLCAgICAwLCAgICAxLCAgMTA0LCAgICAwLCAgICAw
LCAgMTAzLCAgIDk5LCAgMTExLCAgMTEyLAorICAgICAgIDUwLCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDE4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDI2LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIzLCAgIDk4LCAg
IDk4LAorCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgIDAsICAxMDUsICAgIDAsICAx
MDQsICAgOTgsICAgMjgsICAgOTgsICAgOTgsICAgOTUsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMjEsICAgNTMsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgNjksICAgOTgsICAgOTgsICAgNTgsICAgNzMsICAgOTgsICAgOTgsICAgOTgsCisgICAg
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzAsICAgIDksICAgMzMsICAgMzQsICAg
MzUsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
NTYsICAgMjksICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMzYs
ICAgMzcsICAgMzgsICAgMjcsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgMTUsICAgNDIsICAg
NDMsICAgNDQsICAgNTEsICAgMTIsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA4
MiwgICA4MywgICA4NCwgICA5OCwgICAzMCwgICA3NCwgICAyNSwgICA4NSwgICA4NiwKKyAgICAg
ICA4NywgICAgNywgICA3OSwgICA4MCwgICA4MSwgICA5OCwgICAyNCwgICA3NywgICA5OCwgICA5
OCwKKyAgICAgICAzOSwgICA0MCwgICA0MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA3MSwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA1MiwgICA5OCwgICA5NywgICA5OCwg
ICA5OCwgICAxOSwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA3MiwgICA2NiwgICA2
MSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA3OCwKKyAgICAgICA1NywgICA5OCwg
ICA2NCwgICAzMiwgICA5OCwgICA5NCwgICA2NSwgICA0OSwgICA3NiwgICA1OSwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA2MCwgICAzMSwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICAgOCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA1NCwKKyAgICAgICAxMywgICA5OCwgICAxNCwgICA5OCwgICA5OCwgICAxNiwgICA2Nywg
ICA5OCwgICA5OCwgICA5OCwKKworICAgICAgIDYyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDU1LCAgIDc1LCAgIDYzLAorICAgICAgIDExLCAgIDY4LCAgICA2LCAgIDk2
LCAgIDEwLCAgIDg4LCAgIDQ1LCAgIDg5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDQ2
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ4LCAgIDk4LAor
ICAgICAgIDkyLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDkwLCAgIDk4LCAgIDkx
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDQ3LCAgIDkzLCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1MCwxNSArNDUzLDE1IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwg
ICAgNSwgICAgNiwgICAgMSwgICAgNywKICAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAx
MiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKLSAgICAgICAxOCwgICAxOSwgICAxNiwg
ICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKLSAgICAgICAyNCwgICAy
NSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAyNywKLSAgICAg
ICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAz
MSwKLSAgICAgICAzMSwgICAzMywgICAzNCwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzNSwg
ICAzMSwgICAzMSwKLSAgICAgICAzNiwgICAgMSwgICAzNywgICAzOCwgICAzMSwgICAgMSwgICAz
OSwgICA0MCwgICA0MSwgICA0MiwKLQotICAgICAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3
LCAgIDMxLCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLAotICAgICAgIDUyLCAgIDUzLCAgIDMxLCAg
IDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAotICAgICAgIDYxLCAgIDYy
LCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0
LAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAg
IDMxLCAgIDI4LAorICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDMzLCAgIDMyLAorICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAorICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5
LCAgIDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorCisgICAgICAgNDQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCisgICAgICAg
NTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEs
CisgICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00NzUsMjAxICs0NzgsMjE0
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfbWV0YVs2N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
NjhdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywKLSAg
ICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwKKyAgICAgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKICAgICAgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgNCwgICAg
NCwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9iYXNlWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDY0XSA9
CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgNjQsICAgNjUsICAgNzQsICAgIDAsICA2
MjcsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MDIsICAgNDUsICAxMzUsICA2MjgsICA2Mjgs
ICA2MDEsICAxMzIsICA2MjgsICAxMzEsICAxMjksCi0gICAgICAxNDMsICAxNTUsICAxNjMsICA1
OTksICA2MjgsICAxNzksICA1OTksICAgNDcsICA2MjgsICAgIDAsCi0gICAgICA2MjgsICA2Mjgs
ICAxMjYsICAgOTgsICAxMDgsICAxNDcsICAxNTgsICAxNTgsICAxNjUsICA1NzAsCi0gICAgICAx
MzAsICAxMDcsICA1NjksICAxNDgsICAxNTYsICA1NjMsICAxNzIsICA1NzYsICAxNzQsICAxODEs
Ci0gICAgICAxNzcsICAxOTUsICA1NzIsICA2MjgsICAxNzMsICA2MjgsICA2MjgsICA2MjgsICA2
MjgsICA2MDMsCi0gICAgICA2MjgsICA2MjgsICAgIDAsICA2MjgsICA2MjgsICA2MjgsICA2Mjgs
ICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA2MjgsICA2MjgsICA2MjgsICAyMzMsICA2MjgsICAg
IDAsICA2MjgsICAyMzksICAyNTUsICAyNzEsCi0gICAgICAyODcsICAgIDAsICAzMDAsICA2Mjgs
ICA2MjgsICA2MjgsICA1OTIsICA2MjgsICA2MjgsICA2MjgsCi0gICAgICA1OTEsICAgIDAsICA2
MjgsICA2MjgsICA1NjQsICA1NTcsICA1NjAsICA1NjgsICA1NjcsICA1NTQsCi0KLSAgICAgIDU2
OSwgIDU1NiwgIDU2MiwgIDU1MCwgIDU0NywgIDU2MCwgIDU0NywgIDU0NCwgIDU0NCwgIDU1MCwK
LSAgICAgIDUzOCwgIDU0NSwgIDU0MiwgIDU1MiwgIDUzOCwgIDU0NCwgIDU0NywgIDU0OCwgICAg
MCwgIDE4NywKLSAgICAgIDU0NywgIDI0MSwgIDUzMywgIDU0NiwgIDUzNywgIDUzOSwgIDUyOSwg
IDU0MywgIDU0MCwgIDU0MiwKLSAgICAgIDUyNSwgIDUzMCwgIDUyNywgIDUxNiwgIDE5MiwgIDUz
MCwgIDUyNiwgIDUyOCwgIDUxNywgIDUyMCwKLSAgICAgIDI3NCwgIDUyNSwgIDUxNywgIDUyOSwg
IDExNCwgIDUyMiwgIDYyOCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDMxNiwgICAgMCwgIDMy
MiwgIDMzOCwgIDM0NCwgIDM1MSwgICAgMCwgIDYyOCwgIDYyOCwgICAgMCwKLSAgICAgIDUxNCwg
IDUxOCwgIDUyNywgIDUyNCwgIDUwOCwgIDUwOCwgIDIwNSwgIDUyMywgIDUyMCwgIDUyMCwKLSAg
ICAgIDUxOCwgIDUxNSwgIDUwNywgIDUxMywgIDUwMCwgIDUxMSwgIDUxNCwgICAgMCwgIDUxMSwg
IDQ5OSwKLSAgICAgIDUwNiwgIDUwMywgIDUwNywgIDUwMCwgIDQ4OSwgIDQ4OCwgIDUwMSwgIDUw
NCwgIDUwMSwgIDQ5NiwKLSAgICAgIDQ4NywgIDI0NywgIDQ5MiwgIDQ5NSwgIDQ4NiwgIDQ4Mywg
IDQ4NywgIDQ5MywgIDQ4NCwgIDQ3NSwKLQotICAgICAgNDc4LCAgNDc2LCAgNDg2LCAgNDcyLCAg
NDcwLCAgNDcwLCAgNDcyLCAgNDY5LCAgNDgwLCAgNDc5LAotICAgICAgMzI4LCAgNDc0LCAgNDY5
LCAgNDU4LCAgMjYwLCAgNDc2LCAgNDc4LCAgNDY3LCAgMzU4LCAgMzY2LAotICAgICAgMzcyLCAg
Mzc4LCAgNDY4LCAgICAwLCAgNDY2LCAgMjc2LCAgICAwLCAgNDU4LCAgNDU2LCAgNDY0LAotICAg
ICAgNDUzLCAgNDcwLCAgNDU5LCAgMjkxLCAgICAwLCAgICAwLCAgNDUzLCAgNDYzLCAgNDYzLCAg
NDQ4LAotICAgICAgMzA1LCAgICAwLCAgICAwLCAgNDUwLCAgMzI3LCAgNDUxLCAgNDQ1LCAgNDQ0
LCAgNDQ1LCAgNDQ0LAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
NDQwLCAgNDQxLCAgNDQ2LCAgNDM3LAotICAgICAgNDUwLCAgNDQ1LCAgNDQ0LCAgNDM2LCAgNDQw
LCAgNDMyLCAgNDM1LCAgNDM5LCAgNDQ0LCAgNDQzLAotICAgICAgNDM0LCAgICAwLCAgICAwLCAg
NDQwLCAgNDI5LCAgNDI5LCAgNDM0LCAgNDMzLCAgNDMwLCAgICAwLAotICAgICAgICAwLCAgICAw
LCAgICAwLCAgNDIwLCAgNDMyLCAgNDM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAg
ICAwLCAgICAwLCAgNDIyLCAgNDIzLCAgNDE3LCAgNDI3LCAgICAwLCAgICAwLCAgICAwLCAgNDE4
LAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsCi0gICAgICA0MjUsICAgIDAsICAgIDAsICA0MjMsICA0MTksICAgIDAsICAg
IDAsICAgIDAsICA0MTUsICA0MTEsCi0gICAgICA0MTYsICA0MDYsICA0MTksICA0MDUsICA0MTgs
ICA0MDcsICA0MTQsICAgIDAsICA0MTIsICA0MTQsCi0gICAgICAzOTgsICA0MDcsICA0MTMsICA0
MDgsICAzOTYsICAgIDAsICAzOTgsICAgIDAsICAzOTcsICA0MDAsCi0gICAgICAgIDAsICAzODks
ICAzODgsICAzODgsICA0MDEsICAgIDAsICA0MDMsICAgIDAsICA0MDIsICA0MDEsCi0gICAgICAz
ODYsICAzOTksICAzODYsICAgIDAsICAgIDAsICAzODksICAgIDAsICAgIDAsICAzODEsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAzNzgsICAzODksICAzODIsICAzODgsICAzODUsICAz
ODAsICAzNzIsCi0gICAgICAzODIsICAgIDAsICAgIDAsICAzNjUsICAzNzEsICAzNjAsICAgIDAs
ICAzNjksICAzNjYsICAzNTYsCi0gICAgICAzODUsICAzNjQsICAgIDAsICAgIDAsICAzNjQsICAg
IDAsICAzNjIsICAzNjEsICAgIDAsICAgIDAsCi0gICAgICAzNjAsICAzMjMsICAzMDgsICAgIDAs
ICAyOTgsICAzMTgsICAyNzAsICAyNjUsICAgIDAsICAgIDAsCi0KLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDI3OSwgIDI3MSwgIDI0MCwgIDI0MCwKLSAgICAgIDIz
OCwgIDIzNywgIDIyNiwgICAgMCwgIDIwOCwgIDE4OCwgIDE5MCwgICAgMCwgIDE4NiwgIDE3MywK
LSAgICAgIDE4NywgIDE2NCwgIDE1OCwgICAgMCwgIDYyOCwgIDQxNSwgIDQxNywgIDQxOSwgIDQy
MywgIDE4NgorICAgICAgICAwLCAgICAwLCAgIDY1LCAgIDY2LCAgIDc1LCAgICAwLCAgNjgwLCAg
NjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjU0LCAgIDQ1LCAgMTM3LCAgNjgxLCAgNjgxLCAgNjUz
LCAgMTM0LCAgNjgxLCAgMTMzLCAgMTMxLAorICAgICAgMTQ2LCAgMTU5LCAgMTY4LCAgNjUxLCAg
NjgxLCAgMTg2LCAgNjUxLCAgIDQ3LCAgNjgxLCAgICAwLAorICAgICAgNjgxLCAgNjgxLCAgMTI4
LCAgMTAwLCAgMTEwLCAgMTUyLCAgMTU2LCAgMTQ2LCAgMTY2LCAgNjIyLAorICAgICAgMTczLCAg
MTA5LCAgNjIxLCAgMTI2LCAgMTc3LCAgNjE1LCAgMTc4LCAgNjI4LCAgMTg3LCAgMTg0LAorICAg
ICAgMTQxLCAgMTk3LCAgNjI0LCAgNjgxLCAgMTU3LCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAg
NjU2LAorICAgICAgNjgxLCAgNjgxLCAgICAwLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjgxLAorICAgICAgNjgxLCAgNjgxLCAgNjgxLCAgMjM2LCAgNjgxLCAgICAwLCAg
NjgxLCAgMjQzLCAgMjczLCAgMjgyLAorICAgICAgMzA0LCAgICAwLCAgMzE0LCAgNjgxLCAgNjgx
LCAgNjgxLCAgNjQ0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgNjQzLCAgICAwLCAgNjgxLCAg
NjgxLCAgNjE2LCAgNjA5LCAgNjEyLCAgNjIwLCAgNjE5LCAgNjA2LAorCisgICAgICA2MjEsICA2
MDgsICA2MTQsICA2MDIsICA1OTksICA2MTIsICA1OTksICA1OTYsICA1OTYsICA2MDIsCisgICAg
ICA1OTAsICAxODksICA1OTUsICA2MDUsICA1OTEsICA1OTcsICA2MDAsICA2MDEsICAgIDAsICAy
MTYsCisgICAgICA2MDAsICAxODgsICA1ODYsICA1OTksICA1OTAsICA1OTIsICA1ODIsICA1OTYs
ICA1OTMsICA1OTUsCisgICAgICA1NzgsICA1ODMsICA1ODAsICA1NjksICAxODMsICA1NzcsICA1
ODIsICA1NzgsICA1ODAsICA1NjksCisgICAgICA1NzIsICAyMjAsICA1NzcsICA1NjksICA1ODEs
ICAxNzYsICA1NzQsICA2ODEsICA2ODEsICA2ODEsCisgICAgICAgIDAsICAzMzEsICAgIDAsICAz
NDQsICAzNjEsICAyOTAsICAzNzQsICAgIDAsICA2ODEsICA2ODEsCisgICAgICAgIDAsICA1NjYs
ICA1NzAsICA1NzksICA1NzYsICA1NjAsICA1NjAsICAyMTUsICA1NzUsICA1NzIsCisgICAgICA1
NzIsICA1NzAsICA1NjcsICA1NTksICA1NjUsICA1NTIsICA1NjMsICA1NDksICA1NjUsICAgIDAs
CisgICAgICA1NjIsICA1NTAsICA1NTcsICA1NTQsICA1NTgsICA1NTEsICA1NDAsICA1MzksICA1
NTIsICA1NTUsCisgICAgICA1NTIsICA1NDcsICA1MzgsICAyNjAsICA1NDMsICA1NDYsICA1Mzcs
ICA1MzQsICA1MzgsICA1NDQsCisKKyAgICAgIDUzNSwgIDUyNiwgIDUyOSwgIDUyNywgIDUzNywg
IDUyMywgIDUyMSwgIDUzNCwgIDUyMCwgIDUyMiwKKyAgICAgIDUxOSwgIDUzMCwgIDUyOSwgIDI4
MywgIDUyNCwgIDUxOSwgIDUwOCwgIDI2NCwgIDUyNiwgIDUyOCwKKyAgICAgIDUxNywgIDM4MSwg
IDM4OCwgIDM5NSwgIDQwMiwgIDUxOCwgICAgMCwgIDUxNiwgIDMyMCwgICAgMCwKKyAgICAgIDUw
OCwgIDUwNiwgIDUxNCwgIDUwMywgIDUyMCwgIDUwOSwgIDMzNiwgICAgMCwgICAgMCwgIDUwMywK
KyAgICAgIDUxMywgIDUxMywgICAgMCwgIDQ5OCwgIDM0OSwgICAgMCwgICAgMCwgIDUwMCwgIDM2
NiwgIDUwMSwKKyAgICAgIDQ5NSwgIDQ5NCwgIDQ5NSwgIDQ5NCwgIDQwNywgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQ5MCwgIDQ5MSwgIDQ5NiwgIDQ4NywgIDUwMCwgIDQ5
NSwgIDQ5NCwgIDQ4NiwgIDQ5MCwgIDQ4MiwKKyAgICAgIDQ4NSwgIDQ4OSwgIDQ5NCwgIDQ4MCwg
IDQ5MiwgIDQ4MywgICAgMCwgICAgMCwgIDQ4OSwgIDQ3OCwKKyAgICAgIDQ3OCwgIDQ4MywgIDQ4
MiwgIDQ3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ2OSwgIDQ4MSwKKyAgICAgIDQ4Mywg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3MSwgIDQ3MiwgIDQ2NiwKKwor
ICAgICAgNDc2LCAgICAwLCAgICAwLCAgICAwLCAgNDY3LCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDc0LCAgICAwLCAg
ICAwLCAgNDcyLCAgNDY4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNDY0LCAgNDYwLCAgNDY1
LCAgNDU1LCAgNDY4LCAgNDU0LCAgNDY3LAorICAgICAgNDU2LCAgNDYzLCAgICAwLCAgNDYxLCAg
NDYzLCAgNDQ3LCAgNDQ5LCAgNDU1LCAgNDYxLCAgNDU2LAorICAgICAgNDQ0LCAgICAwLCAgNDQ2
LCAgICAwLCAgNDQ1LCAgNDQ4LCAgICAwLCAgNDM3LCAgNDM2LCAgNDM2LAorICAgICAgNDQ5LCAg
ICAwLCAgNDUxLCAgICAwLCAgNDUwLCAgNDQ5LCAgNDM0LCAgNDQ3LCAgNDM0LCAgICAwLAorICAg
ICAgICAwLCAgNDM3LCAgICAwLCAgICAwLCAgNDI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAorICAgICAgNDI2LCAgNDM3LCAgNDMwLCAgNDM2LCAgNDMzLCAgNDI4LCAgNDIwLCAgNDMy
LCAgICAwLCAgICAwLAorICAgICAgNDI1LCAgNDMyLCAgNDIxLCAgICAwLCAgNDMwLCAgNDI3LCAg
NDE3LCAgNDExLCAgNDI1LCAgICAwLAorICAgICAgICAwLCAgNDI1LCAgICAwLCAgNDIzLCAgNDIy
LCAgICAwLCAgICAwLCAgNDIxLCAgNDA3LCAgNDE5LAorCisgICAgICAgIDAsICA0MTAsICA0MzEs
ICA0MzAsICA0MjksICA0MDAsICAzOTYsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICA0MjEsICAyNTAsICA0MjEsICA0MTEsICAzODQsCisgICAg
ICAzOTIsICAzOTQsICAzOTAsICAzOTIsICAzOTEsICAzOTAsICAzOTMsICAzOTAsICAzOTEsICAz
ODgsCisgICAgICAgIDAsICAzMzIsICAzNDMsICAzMTcsICAzMjksICAzMTMsICAzMTcsICAzMDQs
ICAzMjEsICAyOTEsCisgICAgICAgIDAsICAzMDIsICAyODAsICAyNzEsICAyNTUsICAyNjIsICAg
IDAsICAyNTYsICAgIDAsICAyMzIsCisgICAgICAyMDYsICAyMTIsICAxNDgsICAxNTksICAxMTMs
ICAgIDAsICAgIDAsICA2ODEsICA0NDIsICA0NDQsCisgICAgICA0NDYsICA0NTAsICAxNjEKICAg
ICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MzFdID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDY0XSA9CiAgICAgeyAgIDAsCi0gICAgICA0
MjUsICAgIDEsICA0MjYsICA0MjYsICA0MjUsICAgIDUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjcsICA0MjUsICA0MjUsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyOCwKLSAgICAgIDQyNSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQzMCwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgICAgMCwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQorICAgICAgNDU4LCAg
ICAxLCAgNDU5LCAgNDU5LCAgNDU4LCAgICA1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDYwLAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDYxLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDYwLCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0
NTgsICA0NTgsCisgICAgICA0NjEsICA0NTgsICA0NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NjMsICA0NTgsICA0NTgsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICAgIDAsICA0
NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X254dFs2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTksICAg
MjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjQs
ICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsICAgMzAsCi0g
ICAgICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQs
ICAgMzUsCi0gICAgICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAg
MzAsICAgNDMsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAs
ICAgNTEsICAgNTIsICAgNTMsICAgMzAsCi0gICAgICAgMzAsICAgMzAsICAgNTQsICAgNTUsICAg
NTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsCi0gICAgICAgOTAsICAgOTEsICAgNjAs
ICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAgMjMsICAg
MjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzAsICAgMzAsCisgICAg
ICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAg
MzQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIs
ICAgMzAsICAgNDMsCisgICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAg
NTAsICAgNTEsICAgNTIsICAgNTMsCisgICAgICAgMzAsICAgMzAsICAgMzAsICAgNTQsICAgNTUs
ICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsCisgICAgICAgNjYsICAgOTAsICAgOTEsICAg
NjAsICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsCiAgICAgICAgIDgsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCiAgICAgICAg
IDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
CiAKLSAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICAgOCwKICAgICAgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICAgOCwgICAgOCwgICAgOCwgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKICAgICAgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKLSAgICAgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwgICAgOCwgICAgOCwKLSAgICAgICA2
NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA5MywK
LSAgICAgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwgIDEyMCwgICA2
OCwgICA5NywKLSAgICAgIDIxNiwgICA5OCwgIDIxNywgICA5NCwgIDEyMSwgICA5OSwgICA3Nywg
ICA3OCwgIDExNiwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3
OCwgIDExNywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4NSwg
ICA4MSwgIDEwMCwgIDEyMywgIDExOCwgIDE1NywgICA4MiwKLSAgICAgIDEyNCwgIDQyNCwgICA4
MSwgIDQyMywgIDEyNSwgIDEwMSwgIDE0NywgICA4MSwgIDEwMiwgICA4NiwKLQotICAgICAgMTAz
LCAgIDg3LCAgIDg4LCAgMTEwLCAgMTA0LCAgIDgxLCAgMTA3LCAgMTI2LCAgMTA4LCAgMTA1LAot
ICAgICAgMTI4LCAgMTExLCAgMTMyLCAgMTEyLCAgIDgyLCAgMTA2LCAgMTEzLCAgMTA5LCAgNDIy
LCAgMTMzLAotICAgICAgMTM0LCAgNDIxLCAgMTE0LCAgMTM3LCAgNDIwLCAgMTI5LCAgMTM4LCAg
MTQxLCAgMTMwLCAgMTM1LAotICAgICAgMjA0LCAgMTQyLCAgMTM2LCAgMTQzLCAgMTM5LCAgMTg0
LCAgMTQ4LCAgMTQ0LCAgMTg1LCAgMTg2LAotICAgICAgNDE5LCAgMTQwLCAgMTg3LCAgNDE4LCAg
MTg4LCAgMjA1LCAgMTQ1LCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0
LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMjI5LAotICAgICAgMjMwLCAg
NDE3LCAgMTUxLCAgMjU0LCAgMjU1LCAgMjU2LCAgNDE2LCAgIDc4LCAgMTU0LCAgIDc5LAotICAg
ICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgMTUxLCAgMjgwLCAgMjgxLCAgMjgyLCAg
NDE1LAotICAgICAgNDE0LCAgMTU0LCAgNDEzLCAgIDc4LCAgIDgxLCAgIDgwLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTkwLCAgMjg4LCAgMjg5LCAgMjkwLCAgNDEyLCAg
MTU1LCAgIDgxLCAgMTU1LCAgMTkxLAotCi0gICAgICAgODEsICAxNTYsICAxNTYsICAxNTYsICAx
NTYsICAxNTYsICAxNTYsICAyOTcsICAyOTgsICAyOTksCi0gICAgICA0MTEsICA0MTAsICAgNzgs
ICAgODEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAyMTEsICAz
MDQsICAzMDUsICAzMDYsICA0MDksICAyMTksICA0MDgsICAyMTksICAyMTIsICAgODEsCi0gICAg
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsCi0gICAgICAxNTMsICAxNTMsICAgODEsICAzMDgsICAzMDksICAzMTAsICA0MDcsICAyMjEs
ICA0MDYsICAyMjEsCi0gICAgICA0MDUsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTQs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyNzUsICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICA0MDQsICAyNzYsCi0gICAgICAyMjAsICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCi0gICAgICAy
MjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAzMTYsICAzMTcs
Ci0KLSAgICAgIDMxOCwgIDM5NiwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5NSwg
IDM5NCwgIDM5MywKLSAgICAgIDM5MiwgIDM5MSwgIDM5NywgIDM5MCwgIDM5OCwgICA1OCwgICA1
OCwgICA1OCwgICA1OCwgICA5MiwKLSAgICAgICA5MiwgIDE1MCwgIDE1MCwgIDE1MiwgIDM4OSwg
IDE1MiwgIDE1MiwgIDM4OCwgIDM4NywgIDM4NiwKLSAgICAgIDM4NSwgIDM4NCwgIDM4MywgIDM4
MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwKLSAgICAgIDM3NSwgIDM3NCwg
IDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwKLSAgICAgIDM2
NSwgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwK
LSAgICAgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0
NywgIDM0NiwKLSAgICAgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwg
IDMzOCwgIDMzNywgIDMzNiwKLSAgICAgIDMzNSwgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMz
MCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwKLSAgICAgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwg
IDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywKLQotICAgICAgMzEyLCAgMzExLCAg
MzA3LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk2LCAgMjk1LCAgMjk0LAotICAgICAgMjkz
LCAgMjkyLCAgMjkxLCAgMjg3LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjc5LCAgMjc4LAot
ICAgICAgMjc3LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3
LCAgMjY2LAotICAgICAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3
LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLAotICAgICAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LCAg
MjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLAotICAgICAgMjMyLCAgMjMxLCAgMjI4
LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LAotICAgICAgMjE0LCAg
MjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAxLAotICAg
ICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTg5LAotICAgICAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LAotCi0gICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsCi0gICAgICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAx
NTksICAxNTgsICAxNDksICAxNDYsICAxMzEsICAxMjcsCi0gICAgICAxMjIsICAxMTUsICAgODks
ICAgODQsICAgNjksICAgNjQsICA0MjUsICAgIDcsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUs
ICA0MjUsICA0MjUKLQorICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgIDY3LCAgIDcwLCAgIDcy
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDkzLCAg
MTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAgIDczLCAgIDcxLCAgIDc2LAorICAgICAgMTIwLCAgIDY4
LCAgIDk3LCAgMTU4LCAgIDk4LCAgMTIzLCAgIDk0LCAgMTIxLCAgIDk5LCAgMTI0LAorICAgICAg
IDc3LCAgIDc4LCAgNDU3LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgw
LAorICAgICAgIDc4LCAgMTQ4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgxLAorICAgICAgIDg1LCAgMTAwLCAgMTQyLCAgNDU2LCAgIDgyLCAgMTA3LCAgMTQz
LCAgMTA4LCAgIDgxLCAgMTAzLAorCisgICAgICA0NTUsICAxMDEsICAgODEsICAxMDQsICAxMDIs
ICAxMTAsICAxMDksICAgODYsICAxMDUsICAgODcsCisgICAgICAgODgsICAgODEsICAxMTYsICAx
MTEsICAxMDYsICAxMTIsICAxMjUsICAxMjgsICAxMTMsICAgODIsCisgICAgICAxMTcsICAxNDks
ICAyMDYsICAyMTksICAxMTQsICAyMjAsICAxMzIsICAxMzgsICAxNzgsICAxMjYsCisgICAgICAx
MzksICAxMTgsICAxMjksICAxMzMsICAxMzQsICAxMzAsICAxNDQsICAyMDcsICAxNDAsICAxOTIs
CisgICAgICAxNDUsICAxNzksICA0NTQsICAxMzUsICAxMzYsICAxNDEsICAxMzcsICAxOTMsICA0
NTMsICAxNDYsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA0NTIsICAx
ODYsICAxNTIsICAyMTQsICAxODcsICAxODgsCisgICAgICAyMzIsICAyMzMsICAxODksICAxNTUs
ICAxOTAsICAyMTUsICAyNTgsICAyNTksICAyNjAsICAxNTIsCisgICAgICAyODUsICAyODYsICAy
ODcsICA0MjIsICA0MjMsICAgNzgsICAxNTUsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzks
ICAgNzksICAgNzksICAgODAsICAgNzgsICA0NTEsICAgODAsICAgODAsICAgODAsICAgODAsCisK
KyAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywKKyAgICAgIDE1NywgIDQ1MCwgICA4MSwgIDE1NiwgIDQ0OSwgIDE1NiwgICA4MSwg
IDQ0OCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgICA4
MSwgICA3OCwgIDI4MCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgIDI4MSwgIDI5MywgIDI5NCwgIDI5NSwgIDQ0NywKKyAgICAgIDIyMiwgIDQ0NiwgIDIy
MiwgIDQ0NSwgICA4MSwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKyAgICAgIDIyMywg
IDIyMywgIDMwMiwgIDMwMywgIDMwNCwgIDQ0NCwgIDQ0MywgICA4MSwgIDE1NCwgIDE1NCwKKyAg
ICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDMwOSwgIDMxMCwgIDMxMSwgIDQ0Miwg
IDQ0MSwKKyAgICAgIDIyNCwgIDQ0MCwgIDIyNCwgIDQzOSwgIDE1NSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDMxMywgIDMxNCwgIDMxNSwgIDQzOCwg
IDQzNywgIDE1NSwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywKKworICAgICAgMjIzLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAg
ICAgMjI1LCAgMjI1LCAgMjI1LCAgMzIxLCAgMzIyLCAgMzIzLCAgNDAzLCAgNDA0LCAgNDA1LCAg
NDM2LAorICAgICAgNDM1LCAgNDM0LCAgNDMzLCAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4
LCAgNDI3LCAgNDA2LAorICAgICAgNDI2LCAgNDA3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAg
IDkyLCAgIDkyLCAgMTUxLCAgMTUxLAorICAgICAgMTUzLCAgNDI1LCAgMTUzLCAgMTUzLCAgNDI0
LCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LAorICAgICAgNDE2LCAgNDE1LCAgNDE0LCAg
NDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgNDA4LCAgNDAyLAorICAgICAgNDAxLCAgNDAw
LCAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLAorICAgICAg
MzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzgy
LAorICAgICAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAg
MzczLCAgMzcyLAorCisgICAgICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAz
NjUsICAzNjQsICAzNjMsICAzNjIsCisgICAgICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcs
ICAzNTYsICAzNTUsICAzNTQsICAzNTMsICAzNTIsCisgICAgICAzNTEsICAzNTAsICAzNDksICAz
NDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsICAzNDIsCisgICAgICAzNDEsICAzNDAs
ICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsICAzMzIsCisgICAgICAz
MzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAzMTks
CisgICAgICAzMTgsICAzMTcsICAzMTYsICAzMTIsICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDEsICAzMDAsCisgICAgICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsICAyOTAs
ICAyODksICAyODgsICAyODQsCisgICAgICAyODMsICAyODIsICAyNzksICAyNzgsICAyNzcsICAy
NzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsCisgICAgICAyNzEsICAyNzAsICAyNjksICAyNjgs
ICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsCisgICAgICAyNjEsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEsICAyNTAsICAyNDksCisKKyAgICAgIDI0
OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwK
KyAgICAgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMSwgIDIzMCwgIDIyOSwgIDIy
OCwgIDIyNywKKyAgICAgIDIyNiwgIDIyMSwgIDIxOCwgIDIxNywgIDIxNiwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwKKyAgICAgIDIwOCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIw
MSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywKKyAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MSwg
IDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwKKyAgICAgIDE3NywgIDE3NiwgIDE3
NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwKKyAgICAgIDE2Nywg
IDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1MCwKKyAg
ICAgIDE0NywgIDEzMSwgIDEyNywgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwg
IDQ1OCwKKyAgICAgICAgNywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzc0OV0gPQogICAgIHsgICAwLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLApAQCAtNjc3LDggKzY5Myw4IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0g
ICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiAr
NzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSA9CiAgICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMsICAgMTcsICAgMTksICAgMjAsICAgMjAs
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0gICAgICAgNDIsICAgMjEsICAgMzQsICAg
MzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMsICAgMzUsCi0gICAgICAxNDUsICAgMzUs
ICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAgMjIsICAgNDEsICAgMjIsCi0gICAgICAg
MjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMsICAgNDEsICAgMjMsICAgMjMsICAgMjMs
Ci0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAgMjIsICAgMzYsICAgNDQsICAgNDEsICA0
MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMsICA0MjIsICAgNDUsICAgMzYsICAgNTUs
ICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywgICAyNiwgICAyNiwgICAzOSwgICAzNywg
ICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAgICAgICA0NywgICAzOSwgICA0OSwgICAz
OSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwgICA0OSwKLSAgICAgICA0OSwgIDQyMCwg
ICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1MSwgICA0NywgICA0OSwKLSAgICAgIDEz
NSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwgICA1NSwgICA1MiwgIDEyMCwgIDEyMCwK
LSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEyMCwgIDEzNSwgICA1MiwgICA3NCwgICA3
NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwg
ICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQxNSwgICA3NCwgIDE5MiwgIDE5MiwgIDE5
MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwg
ICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQxMiwKLSAgICAgIDQxMSwgICA3OCwgIDQx
MCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwg
IDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4MSwgICA3OSwgICA4MSwgIDEyMiwKLQot
ICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgMjM0LCAgMjM0
LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAgIDgwLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQxLCAgMjQxLCAgMjQxLCAgMzk4LCAgMTUx
LCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgz
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAgMzk1LCAgMTU0LAotICAgICAgMzkzLCAg
MTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LAotICAg
ICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5
LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIxLCAgMjIxLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAotCi0gICAgICAyNTEsICAzODEsICAzOTEs
ICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAzNzksICAzNzgsCi0gICAgICAzNzYsICAz
NzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYsICA0MjYsICA0MjYsICA0MjcsCi0gICAg
ICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0MjksICA0MjksICAzNzAsICAzNjksICAz
NjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNTksICAzNTYsICAzNTMsICAzNTIs
ICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAz
NDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAs
ICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0gICAgICAzMjMsICAzMjIsICAzMjEsICAz
MjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAsICAyOTYsCi0gICAgICAyOTUsICAyOTQs
ICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAyNzgsICAyNzcsICAyNzYsCi0gICAgICAy
NzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQs
Ci0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTAsICAy
NDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIz
NywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwgIDIyOSwgIDIyOCwgIDIyNSwgIDIyMywg
IDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAgICAgIDIxMiwgIDIxMCwgIDIwOSwgIDIw
OCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwg
IDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MSwKLSAgICAgIDE5
MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwK
LSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3
MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2Miwg
IDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0MiwgIDE0MCwgIDEzOSwgIDEzOCwgIDEz
NywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwg
IDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwKLSAgICAgIDExOCwgIDExNywgIDEx
NiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwgIDEwOSwKLQotICAgICAgMTA4
LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LAot
ICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkxLCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4
LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAgIDI0LCAgIDE2LCAgIDExLCAgICA3LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICAgNSwg
ICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAg
ICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2MywgICAzNSwgICA0NCwgICAzMywgICA0
MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgIDQ1NSwgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAyMywgICA1NSwgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwKKyAgICAgICAyNiwgICAzNiwgICA1MSwg
IDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAyMywgICAzNywKKworICAgICAgNDUzLCAg
IDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4LCAgIDI2LCAgIDM3LCAgIDI2LAorICAg
ICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAgIDM5LCAgIDQ1LCAgIDQ3LCAgIDM5LCAg
IDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2LCAgIDM5LCAgMTQ2LCAgIDQ5LCAgIDUw
LCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAgIDQ3LCAgIDQ5LCAgIDQ5LCAgIDQ3LCAg
IDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUyLCAgMTEyLCAgNDUyLCAgIDQ5LCAgIDQ5
LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LAorICAgICAgIDc4LCAgIDc4
LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAgMTQyLCAgMTIwLCAgMTIwLAorICAgICAg
MTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQyLCAgMTk0LCAgMTk0LCAgMTk0LCAgIDc0
LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAgNDE3LCAgIDc5LCAgIDc4LCAgIDc5LCAg
IDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgNDQ4LCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgNzksICAxNTYs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICA0NDYsICAgODAsICAg
ODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEsICAgODEsCisgICAgICAgODEsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAyMTQsICAgODMsICAgODMsCisgICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQsICAyMjksICAyMjksICAyMjksICA0NDMs
CisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAgODMsICAxNTIsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcsICAyMzcsICAyMzcsICA0MzksICA0Mzgs
ICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAy
NDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAgICAxNTUsICA0MzUsICAxNTUsICA0MzQs
ICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAy
NDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQsICAxNTcsICAxNTcsCisgICAgICAxNTcs
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCisK
KyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNCwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDI1NSwgIDI1NSwgIDI1
NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwg
IDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4OCwKKyAgICAgIDQyMCwgIDM4OCwgIDQ1
OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MSwgIDQ2MSwKKyAgICAgIDQ2Miwg
IDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwKKyAg
ICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NSwgIDM5NCwgIDM5MiwgIDM4OSwg
IDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4MiwgIDM4MSwgIDM3OCwgIDM3NywgIDM3
NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3MiwgIDM3MSwgIDM2NSwgIDM2MiwgIDM1OSwg
IDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1MywgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwKKworICAgICAgMzM5LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LAorICAgICAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LCAgMzE2LCAgMzA1LCAgMzAxLAorICAg
ICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg0LCAgMjgzLCAgMjgyLCAg
MjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcx
LCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAg
MjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ4LCAgMjQ0
LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAorICAgICAgMjM0LCAgMjMzLCAgMjMyLCAg
MjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE3LAorICAgICAgMjE2LCAgMjE1
LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LAorICAgICAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2
LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAg
MTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAxODIsICAxODEsICAxNzksICAxNzgsICAx
NzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjks
ICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNDcsICAxNDUsICAx
NDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgsICAxMzcsCisgICAgICAxMzYsICAxMzQs
ICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsCisgICAgICAx
MjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMs
CisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAx
MDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUs
ICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAgNDgsICAgNDYsICAgNDMsICAgNDAsICAg
MjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywg
dHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0gPQogICAgIHsgICAwLAogMCwgMCwgMCwg
MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
CkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVf
Y2FuX21hdGNoX2VvbFsxNDhdID0KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAw
LCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3MSw3ICs3OTIsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQogI2RlZmluZSBZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChn
bHNsYW5nX2xleC5jcHApLgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIgogCkBAIC05NDQsNyArOTY2LDcgQEAgc3RhdGljIGludCBpbnB1dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lz
X2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJeXlfc2l6ZV90IG47
IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZb
bl0gPSAoY2hhcikgYzsgXApAQCAtMTA4NiwxMyArMTEwOCwxMyBAQCB5eV9tYXRjaDoKIAkJCXdo
aWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJy
ZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CiAJCQkJfQogCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5
X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDI1ICk7CisJCXdoaWxl
ICggeXlfY3VycmVudF9zdGF0ZSAhPSA0NTggKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOwogCkBAIC0xMTAzLDcgKzExMjUsNyBAQCB5eV9maW5kX2FjdGlvbjoKIAogCQlpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKIAkJCXsKLQkJCXl5X3NpemVfdCB5eWw7CisJCQlpbnQgeXlsOwogCQkJZm9yICggeXls
ID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCiAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4n
ICkKIAkJCQkJICAgCkBAIC0xNDgxLDIyMCArMTUwMywyNTIgQEAgWVlfUlVMRV9TRVRVUAogCVlZ
X0JSRUFLCiBjYXNlIDkwOgogWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKIHsK
ICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAogICAgcmV0
dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKIH0KIAlZWV9CUkVBSwotY2FzZSA5MToKK2Nhc2Ug
OTk6CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAw
KTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDkyOgorY2FzZSAxMDA6
CiBZWV9SVUxFX1NFVFVQCiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsg
cmV0dXJuKElOVENPTlNUQU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDkzOgorY2FzZSAxMDE6CiBZ
WV9SVUxFX1NFVFVQCi17IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBu
dW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30K
K3sgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRl
eHQpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIAlZWV9CUkVBSwotY2FzZSA5NDoK
K2Nhc2UgMTAyOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NToKK2Nh
c2UgMTAzOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVB
SwotY2FzZSA5NjoKK2Nhc2UgMTA0OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFO
VCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NzoKK2Nhc2UgMTA1OgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1
cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5ODoKK2Nhc2UgMTA2OgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKEFERF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTk6
CitjYXNlIDEwNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihTVUJfQVNTSUdOKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDEwMDoKK2Nhc2UgMTA4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE1V
TF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAxOgorY2FzZSAxMDk6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oRElWX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDI6CitjYXNl
IDExMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNT0RfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwMzoKK2Nhc2UgMTExOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKExFRlRfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNDoKK2Nhc2UgMTEyOgogWVlfUlVMRV9TRVRVUAog
eyAgcmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDU6CitjYXNlIDEx
MzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBTkRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEwNjoKK2Nhc2UgMTE0OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhPUl9BU1NJR04p
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA3OgorY2FzZSAxMTU6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwODoKK2Nhc2UgMTE2OgogWVlf
UlVMRV9TRVRVUAogeyAgcmV0dXJuKElOQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDk6Citj
YXNlIDExNzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihERUNfT1ApOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTEwOgorY2FzZSAxMTg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX09QKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDExMToKK2Nhc2UgMTE5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKE9SX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMjoKK2Nhc2UgMTIwOgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKFhPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTM6CitjYXNlIDEy
MToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MTQ6CitjYXNlIDEyMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihHRV9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTU6CitjYXNlIDEyMzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihFUV9P
UCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTY6CitjYXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihORV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTc6CitjYXNlIDEyNToKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihMRUZUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExODoKK2Nh
c2UgMTI2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFJJR0hUX09QKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDExOToKK2Nhc2UgMTI3OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRl
clR5cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjA6
CitjYXNlIDEyODoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMToKK2Nhc2UgMTI5
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTIyOgorY2FzZSAxMzA6CiBZWV9SVUxFX1NFVFVQCiB7IGlmIChjb250ZXh0LT5pblR5cGVQ
YXJlbikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjM6CitjYXNlIDEzMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKENP
TE9OKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNDoKK2Nhc2UgMTMyOgogWVlfUlVMRV9TRVRVUAog
eyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDEyNToKK2Nhc2UgMTMzOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhB
ZnRlclR5cGUgPSBmYWxzZTsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVG
VF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjY6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VU
VVAKIHsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEyNzoKK2Nhc2UgMTM1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oTEVGVF9CUkFDS0VUKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyODoKK2Nhc2UgMTM2OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
Mjk6CitjYXNlIDEzNzoKIFlZX1JVTEVfU0VUVVAKIHsgQkVHSU4oRklFTERTKTsgIHJldHVybihE
T1QpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMwOgorY2FzZSAxMzg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihCQU5HKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMToKK2Nhc2UgMTM5OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oREFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzI6CitjYXNlIDE0
MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFRJTERFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
MzoKK2Nhc2UgMTQxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUExVUyk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzQ6CitjYXNlIDE0MjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNUQVIpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTM1OgorY2FzZSAxNDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihTTEFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzY6CitjYXNlIDE0NDoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuKFBFUkNFTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM3OgorY2FzZSAxNDU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihMRUZUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEzODoKK2Nhc2UgMTQ2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQU5HTEUpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTM5OgorY2FzZSAxNDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihWRVJUSUNBTF9CQVIpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQwOgorY2FzZSAxNDg6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybihDQVJFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDE6CitjYXNl
IDE0OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKEFNUEVSU0FORCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxNDI6CitjYXNlIDE1MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFFVRVNUSU9OKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDE0MzoKK2Nhc2UgMTUxOgogWVlfUlVMRV9TRVRVUAogeyAKICAg
ICBCRUdJTihJTklUSUFMKTsKQEAgLTE3MDIsMTIgKzE3NTYsMTIgQEAgWVlfUlVMRV9TRVRVUAog
ICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJT047CiB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ0OgorY2Fz
ZSAxNTI6CiBZWV9SVUxFX1NFVFVQCiB7fQogCVlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUg
MTQ1IGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMTUzOgorLyogcnVsZSAxNTMgY2FuIG1hdGNoIGVv
bCAqLwogWVlfUlVMRV9TRVRVUAogeyAgfQogCVlZX0JSRUFLCkBAIC0xNzE2LDExICsxNzcwLDEx
IEBAIGNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgogY2FzZSBZWV9TVEFURV9FT0YoRklFTERT
KToKIHsgY29udGV4dC0+QWZ0ZXJFT0YgPSB0cnVlOyB5eXRlcm1pbmF0ZSgpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTQ2OgorY2FzZSAxNTQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPndhcm5p
bmcoeXlsaW5lbm8sICJVbmtub3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxNDc6CitjYXNlIDE1NToKIFlZX1JVTEVfU0VUVVAKIEVDSE87CiAJWVlf
QlJFQUsKQEAgLTIwMTYsNyArMjA3MCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVy
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQog
CQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKQEAgLTIwNDUsMTEgKzIwOTksMTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkg
KQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5
X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFt
ID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0yODk0LDEwICsyOTQ4LDE1IEBAIHZvaWQg
eXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiAjZGVmaW5lIFlZVEFC
TEVTX05BTUUgInl5dGFibGVzIgogCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBl
eHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vz
c29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQ
cmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5l
IFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJz
ZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjkwNiwyNiArMjk2NSwyNiBAQCBleHRl
cm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBj
b250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9M
b2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQg
Q1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtMjk4MCw4OCArMzAz
OSwxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIoKQogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hh
ciAqKnRva2VucywgaW50IG51bVRva2VucykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewotICAgICAgICBpZiAobnVt
VG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJh
Z21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBr
ZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4
dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21h
Lm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6
ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vu
c1swXSwgImRlYnVnIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
KFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJd
LCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAg
ICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQg
YWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewot
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVn
JyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0
aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9u
IGFib3V0IHByYWdtYQotICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21h
IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4g
RXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMg
YSBzeW50YXggbGlrZQotICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUp
Ci0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdt
YXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAv
LyAgICAgICAgCi0gICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sx
XSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFi
bGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChU
U3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUu
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0g
XSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYg
KG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxl
ID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7
Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBp
dGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAg
aWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5z
ZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQotICAgIH0KKworICAgIGlmIChudW1Ub2tl
bnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJl
dHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAg
ICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9r
ZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3Ry
KGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0
cmluZyBzdHJTcmM7CkBAIC0zMDgzLDcxICszMDY5LDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZv
aWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVo
YXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUi
LCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFz
dHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAg
ICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAg
ICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQi
KS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19
Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29u
c3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhh
dmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJp
bmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAot
ICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChl
eHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUg
fHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVo
YXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRl
ciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAg
ICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmlu
ZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5z
aW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
LSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBv
cnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNh
c2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24g
JyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCks
IHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9y
VmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5l
bm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8g
IUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVm
LCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAg
ICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nh
bm5lciB1c2VzIFJFSkVDVCIpOworICAgIGludCBsZW4gPSAwOworCisjaWYgQU5HTEVfVVNFX05F
V19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRfZXh0cmEoeXlz
Y2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxlbiA9IHRva2VuLnR5cGUg
PT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUoKTsKKyAgICBpZiAoKGxl
biA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNweShidWYsIHRva2VuLnZh
bHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tl
bi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSx5eXNjYW5uZXIpOworI2Vsc2UK
KyAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYgIC8vIEFOR0xFX1VT
RV9ORVdfUFJFUFJPQ0VTU09SCiAKLSAgICBidWZbbGVuXSA9ICcgJzsKLSAgICByZXR1cm4gbGVu
KzE7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklu
cHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1
ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKSB7CkBAIC0zMTc4LDkgKzMxMjYsOSBAQCB2b2lkIHl5ZXJyb3IoVFBh
cnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAg
IGlmIChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9y
KHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC0zMTk5LDIyICszMTQ3LDQzIEBAIGludCBnbHNsYW5n
X2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICBpZiAoc2Nhbm5lciA9PSBO
VUxMKSByZXR1cm4gMDsKICAgICAKICAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICBy
ZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsKKyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIp
OworCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgRmluYWxpemVQcmVwcm9j
ZXNzb3IoKTsKKyNlbmRpZgorICAgIHJldHVybiAwOwogfQogCi12b2lkIGdsc2xhbmdfc2Nhbihp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10s
Ci0gICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFu
Z19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAg
IHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNv
ZGVTb3VyY2VMb2MoMCwgMSksY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJF
T0YgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8vIElu
aXRpYWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisg
ICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkK
KyAgICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdo
aWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFy
Z2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+
cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOwor
ICAgIGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisK
KyAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBm
b3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9y
LmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsK
KyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVwcm9j
ZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQorICAg
ICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRpZgor
ICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggMzdhMGYwNS4uZDU4NTM2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
dGFiLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBH
TlUgQmlzb24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjQuMi4gICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2Mt
bGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAy
MDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0
IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUK
KyAgIEZvdW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAo
YXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCkBAIC0yOSw3ICsyNyw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBj
YXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxl
cyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNl
IHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwg
ZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAg
ICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ1LDcgQEAKICNkZWZpbmUg
WVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJ
T04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKIAogLyogU2tlbGV0b24g
bmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTEgKzUz
LDY3IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMQogCisvKiBQdXNo
IHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLwor
I2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxT
UF9ORUVERUQgMAogCiAKIAorLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0
aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9y
ZSBlcnJvcnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0Nf
VkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRh
YmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVy
CisKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmlu
ZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2Vz
LiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisj
IGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9T
RSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYg
WVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCiAvKiBU
b2tlbnMuICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAg
LTE2MSwxNTYgKzIxNSwxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAgfTsKICNlbmRpZgot
LyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmluZSBISUdIX1BSRUNJ
U0lPTiAyNTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZpbmUgTE9XX1BSRUNJ
U0lPTiAyNjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRSSUJVVEUgMjYzCi0j
ZGVmaW5lIENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUKLSNkZWZpbmUgRkxP
QVRfVFlQRSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJSRUFLIDI2OAotI2Rl
ZmluZSBDT05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVMU0UgMjcxCi0jZGVm
aW5lIEZPUiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQgMjc0Ci0jZGVmaW5l
IFJFVFVSTiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMzIDI3NwotI2RlZmlu
ZSBCVkVDNCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMzIDI4MAotI2RlZmlu
ZSBJVkVDNCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAyODMKLSNkZWZpbmUg
VkVDNCAyODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklYMyAyODYKLSNkZWZp
bmUgTUFUUklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUgT1VUX1FVQUwgMjg5
Ci0jZGVmaW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkxCi0jZGVmaW5lIFZB
UllJTkcgMjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9UWVBFIDI5NAotI2Rl
ZmluZSBXSElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmluZSBTQU1QTEVSQ1VC
RSAyOTcKLSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVmaW5lIFNBTVBMRVIy
RFJFQ1QgMjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZUEVfTkFNRSAzMDEK
LSNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RBTlQgMzAzCi0jZGVm
aW5lIEJPT0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwNQotI2RlZmlu
ZSBMRUZUX09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUgSU5DX09QIDMwOAot
I2RlZmluZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmluZSBHRV9PUCAzMTEK
LSNkZWZpbmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmluZSBBTkRfT1AgMzE0
Ci0jZGVmaW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVmaW5lIE1VTF9BU1NJ
R04gMzE3Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9BU1NJR04gMzE5Ci0j
ZGVmaW5lIE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMyMQotI2RlZmluZSBS
SUdIVF9BU1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVmaW5lIFhPUl9BU1NJ
R04gMzI0Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FTU0lHTiAzMjYKLSNk
ZWZpbmUgTEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4Ci0jZGVmaW5lIExF
RlRfQlJBQ0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNkZWZpbmUgTEVGVF9C
UkFDRSAzMzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERPVCAzMzMKLSNkZWZp
bmUgQ09NTUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVBTCAzMzYKLSNkZWZp
bmUgU0VNSUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBEQVNIIDMzOQotI2Rl
ZmluZSBUSUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RBUiAzNDIKLSNkZWZp
bmUgU0xBU0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExFRlRfQU5HTEUgMzQ1
Ci0jZGVmaW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ3Ci0jZGVm
aW5lIENBUkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5lIFFVRVNUSU9OIDM1
MAotCiAKIAogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAg
Ki8KLQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9y
cyBpbiBhdXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MTg5KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIK
LSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQotCi0v
KiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVH
IDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNp
ZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZ
WUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5k
aWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9U
QUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZ
WVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZ
U1RZUEUKLQogeworCisKICAgICBzdHJ1Y3QgewogICAgICAgICBUU291cmNlTG9jIGxpbmU7CiAg
ICAgICAgIHVuaW9uIHsKQEAgLTM0MCwxNyArMjUyLDE2IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQ
RQogICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKICAgICAgICAgfTsKICAgICB9IGlu
dGVybTsKLX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30g
WVlTVFlQRTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBl
IFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5k
aWYKIAogCi0KIC8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAg
Ki8KIAogCkBAIC0zNjAsMjggKzI3MSwyNiBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAjZGVmaW5lIEZSQUdfVkVSVF9P
TkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhf
U0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25s
eSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0K
IAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisg
ICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9u
bHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9
CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVy
VHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
TCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBc
CisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0g
IFwKIH0KIAogCi0vKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwotCiAKICNpZmRlZiBzaG9ydAog
IyB1bmRlZiBzaG9ydApAQCAtNDU2LDE0ICszNjUsMTQgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0
eXBlX2ludDE2OwogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0
YXRpYyBpbnQKLVlZSUQgKGludCBpKQorWVlJRCAoaW50IHl5aSkKICNlbHNlCiBzdGF0aWMgaW50
Ci1ZWUlEIChpKQotICAgIGludCBpOworWVlJRCAoeXlpKQorICAgIGludCB5eWk7CiAjZW5kaWYK
IHsKLSAgcmV0dXJuIGk7CisgIHJldHVybiB5eWk7CiB9CiAjZW5kaWYKIApAQCAtNTQ0LDkgKzQ1
Myw5IEBAIHZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5
dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBv
bmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBf
TUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC01ODAsMTIgKzQ4OSwxMiBA
QCB1bmlvbiB5eWFsbG9jCiAgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZl
cyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEg
cHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisjIGRlZmluZSBZWVNUQUNLX1JF
TE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAogICAgIGRvCQkJCQkJCQkJXAogICAgICAg
ewkJCQkJCQkJCVwKIAlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0
ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJ
CQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwK
KwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCiAJeXluZXdieXRlcyA9IHl5c3Rh
Y2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAogCXl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKICAgICAgIH0JCQkJCQkJCQlc
CkBAIC03NDksMjYgKzY1OCwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2NSwgICAxNjUsICAgMjAwLCAgIDIwMywgICAyMTYsICAgMjIxLCAgIDIyNiwgICAyMzIsICAg
MjM1LAotICAgICAzMDgsICAgMzExLCAgIDQyMCwgICA0MzAsICAgNDQzLCAgIDQ1MSwgICA1NTAs
ICAgNTUzLCAgIDU2MSwgICA1NjUsCi0gICAgIDU3MiwgICA1NzYsICAgNTgzLCAgIDU4OSwgICA1
OTgsICAgNjA2LCAgIDY2MSwgICA2NjgsICAgNjc4LCAgIDY4MSwKLSAgICAgNjkxLCAgIDcwMSwg
ICA3MjIsICAgNzIzLCAgIDcyNCwgICA3MjksICAgNzMwLCAgIDczOSwgICA3NTEsICAgNzUyLAot
ICAgICA3NjAsICAgNzcxLCAgIDc3NSwgICA3NzYsICAgNzg2LCAgIDc5NiwgICA4MDYsICAgODE5
LCAgIDgyMCwgICA4MzAsCi0gICAgIDg0MywgICA4NDcsICAgODUxLCAgIDg1NSwgICA4NTYsICAg
ODY5LCAgIDg3MCwgICA4ODMsICAgODg0LCAgIDg5NywKLSAgICAgODk4LCAgIDkxNSwgICA5MTYs
ICAgOTI5LCAgIDkzMCwgICA5MzEsICAgOTMyLCAgIDkzMywgICA5MzcsICAgOTQwLAotICAgICA5
NTEsICAgOTU5LCAgIDk4NiwgICA5OTEsICAgOTk4LCAgMTAzNiwgIDEwMzksICAxMDQ2LCAgMTA1
NCwgIDEwNzUsCi0gICAgMTA5NiwgIDExMDcsICAxMTM2LCAgMTE0MSwgIDExNTEsICAxMTU2LCAg
MTE2NiwgIDExNjksICAxMTcyLCAgMTE3NSwKLSAgICAxMTgxLCAgMTE4OCwgIDExOTEsICAxMjEz
LCAgMTIzMSwgIDEyNTUsICAxMjc4LCAgMTI4MiwgIDEzMDAsICAxMzA4LAotICAgIDEzNDAsICAx
MzYwLCAgMTQ0OSwgIDE0NTgsICAxNDgxLCAgMTQ4NCwgIDE0OTAsICAxNDk4LCAgMTUwNiwgIDE1
MTQsCi0gICAgMTUyNCwgIDE1MzEsICAxNTM0LCAgMTUzNywgIDE1NDMsICAxNTQ2LCAgMTU2MSwg
IDE1NjUsICAxNTY5LCAgMTU3MywKLSAgICAxNTgyLCAgMTU4NywgIDE1OTIsICAxNTk3LCAgMTYw
MiwgIDE2MDcsICAxNjEyLCAgMTYxNywgIDE2MjIsICAxNjI3LAotICAgIDE2MzMsICAxNjM5LCAg
MTY0NSwgIDE2NTAsICAxNjU1LCAgMTY2NCwgIDE2NzMsICAxNjc4LCAgMTY5MSwgIDE2OTEsCi0g
ICAgMTcwNSwgIDE3MDUsICAxNzE0LCAgMTcxNywgIDE3MzIsICAxNzY4LCAgMTc3MiwgIDE3Nzgs
ICAxNzg2LCAgMTgwMiwKLSAgICAxODA2LCAgMTgxMCwgIDE4MTEsICAxODE3LCAgMTgxOCwgIDE4
MTksICAxODIwLCAgMTgyMSwgIDE4MjUsICAxODI2LAotICAgIDE4MjYsICAxODI2LCAgMTgzNiwg
IDE4MzcsICAxODQxLCAgMTg0MSwgIDE4NDIsICAxODQyLCAgMTg0NywgIDE4NTAsCi0gICAgMTg2
MCwgIDE4NjMsICAxODY5LCAgMTg3MCwgIDE4NzQsICAxODgyLCAgMTg4NiwgIDE4OTYsICAxOTAx
LCAgMTkxOCwKLSAgICAxOTE4LCAgMTkyMywgIDE5MjMsICAxOTMwLCAgMTkzMCwgIDE5MzgsICAx
OTQxLCAgMTk0NywgIDE5NTAsICAxOTU2LAotICAgIDE5NjAsICAxOTY3LCAgMTk3NCwgIDE5ODEs
ICAxOTg4LCAgMTk5OSwgIDIwMDgsICAyMDEyLCAgMjAxOSwgIDIwMjIsCi0gICAgMjAyOCwgIDIw
MjgKKyAgICAgMzE0LCAgIDMxNywgICA0MjYsICAgNDM2LCAgIDQ0OSwgICA0NTcsICAgNTU3LCAg
IDU2MCwgICA1NjgsICAgNTcyLAorICAgICA1NzksICAgNTgzLCAgIDU5MCwgICA1OTYsICAgNjA1
LCAgIDYxMywgICA2NjgsICAgNjc1LCAgIDY4NSwgICA2ODgsCisgICAgIDY5OCwgICA3MDgsICAg
NzI5LCAgIDczMCwgICA3MzEsICAgNzM2LCAgIDczNywgICA3NDYsICAgNzU4LCAgIDc1OSwKKyAg
ICAgNzY3LCAgIDc3OCwgICA3ODIsICAgNzgzLCAgIDc5MywgICA4MDMsICAgODEzLCAgIDgyNiwg
ICA4MjcsICAgODM3LAorICAgICA4NTAsICAgODU0LCAgIDg1OCwgICA4NjIsICAgODYzLCAgIDg3
NiwgICA4NzcsICAgODkwLCAgIDg5MSwgICA5MDQsCisgICAgIDkwNSwgICA5MjIsICAgOTIzLCAg
IDkzNiwgICA5MzcsICAgOTM4LCAgIDkzOSwgICA5NDAsICAgOTQ0LCAgIDk0NywKKyAgICAgOTU4
LCAgIDk2NiwgICA5OTMsICAgOTk4LCAgMTAwNSwgIDEwNDMsICAxMDQ2LCAgMTA1MywgIDEwNjEs
ICAxMDgyLAorICAgIDExMDMsICAxMTE0LCAgMTE0MywgIDExNDgsICAxMTU4LCAgMTE2MywgIDEx
NzMsICAxMTc2LCAgMTE3OSwgIDExODIsCisgICAgMTE4OCwgIDExOTUsICAxMTk4LCAgMTIyMCwg
IDEyMzgsICAxMjYyLCAgMTI4NSwgIDEyODksICAxMzA3LCAgMTMxNSwKKyAgICAxMzQ3LCAgMTM2
NywgIDE0NTYsICAxNDY1LCAgMTQ4OCwgIDE0OTEsICAxNDk3LCAgMTUwNSwgIDE1MTMsICAxNTIx
LAorICAgIDE1MzEsICAxNTM4LCAgMTU0MSwgIDE1NDQsICAxNTUwLCAgMTU1MywgIDE1NjgsICAx
NTcyLCAgMTU3NiwgIDE1ODAsCisgICAgMTU4OSwgIDE1OTQsICAxNTk5LCAgMTYwNCwgIDE2MDks
ICAxNjE0LCAgMTYxOSwgIDE2MjQsICAxNjI5LCAgMTYzNCwKKyAgICAxNjQwLCAgMTY0NiwgIDE2
NTIsICAxNjU3LCAgMTY2MiwgIDE2NzEsICAxNjgwLCAgMTY4NSwgIDE2OTgsICAxNjk4LAorICAg
IDE3MTIsICAxNzEyLCAgMTcyMSwgIDE3MjQsICAxNzM5LCAgMTc3NSwgIDE3NzksICAxNzg1LCAg
MTc5MywgIDE4MDksCisgICAgMTgxMywgIDE4MTcsICAxODE4LCAgMTgyNCwgIDE4MjUsICAxODI2
LCAgMTgyNywgIDE4MjgsICAxODMyLCAgMTgzMywKKyAgICAxODMzLCAgMTgzMywgIDE4NDMsICAx
ODQ0LCAgMTg0OCwgIDE4NDgsICAxODQ5LCAgMTg0OSwgIDE4NTQsICAxODU3LAorICAgIDE4Njcs
ICAxODcwLCAgMTg3NiwgIDE4NzcsICAxODgxLCAgMTg4OSwgIDE4OTMsICAxOTAzLCAgMTkwOCwg
IDE5MjUsCisgICAgMTkyNSwgIDE5MzAsICAxOTMwLCAgMTkzNywgIDE5MzcsICAxOTQ1LCAgMTk0
OCwgIDE5NTQsICAxOTU3LCAgMTk2MywKKyAgICAxOTY3LCAgMTk3NCwgIDE5ODEsICAxOTg4LCAg
MTk5NSwgIDIwMDYsICAyMDE1LCAgMjAxOSwgIDIwMjYsICAyMDI5LAorICAgIDIwMzUsICAyMDM1
CiB9OwogI2VuZGlmCiAKQEAgLTgxMiwxNiArNzIxLDE2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpj
b25zdCB5eXRuYW1lW10gPQogICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xh
cmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKICAgInR5cGVfcXVhbGlmaWVyIiwgInR5
cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAogICAidHlwZV9zcGVjaWZpZXJf
bm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwK
LSAgIkAxIiwgIkAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJh
dGlvbiIsCisgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKICAgImRlY2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0
ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCi0gICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiQDMi
LCAiQDQiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCi0gICJzdGF0ZW1lbnRfd2l0aF9zY29w
ZSIsICJANSIsICJANiIsICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKKyAgImNv
bXBvdW5kX3N0YXRlbWVudCIsICIkQDMiLCAiJEA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUi
LAorICAic3RhdGVtZW50X3dpdGhfc2NvcGUiLCAiJEA1IiwgIiRANiIsICJjb21wb3VuZF9zdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIiwKICAgInN0YXRlbWVudF9saXN0IiwgImV4cHJlc3Npb25fc3Rh
dGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAotICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVt
ZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIkA3IiwKLSAgIkA4Iiwg
IkA5IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3Rh
dGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICIkQDciLAorICAiJEA4IiwgIiRAOSIsICJmb3JfaW5pdF9zdGF0
ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCiAgICJqdW1wX3N0
YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKLSAg
ImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiQDEwIiwgMAorICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIs
ICIkQDEwIiwgMAogfTsKICNlbmRpZgogCkBAIC0xMzQ1LDkgKzEyNTQsMTggQEAgc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8g
Y2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKICAgIHRvIGVhc2Ug
dGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0g
ICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBn
by4gICovCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0
aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBO
ZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4y
J3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vz
c2VkLiAgKi8KIAogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZ
RkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0ND
IGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFi
b3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRv
IG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGlj
aCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2VuZGlmCiAKICNk
ZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC0xNTE4LDE3ICsxNDM2
LDIwIEBAIHl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRl
eHQpCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZv
aWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0
b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2
ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9w
KQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlf
c3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9t
OworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRl
cnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8
PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207
CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTU2MywxMSArMTQ4NCwxMSBAQCB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCiAgIC8qIFRoZSBzeW1ib2xzIGJlaW5n
IHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAg
ewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKIAkJICAgICAgICYo
eXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQogCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0
KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CiAgICAgfQogfQogCkBAIC0xODQ5LDEwICsxNzcwLDggQEAgeXlkZXN0cnVjdCAo
eXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCiAJYnJlYWs7CiAgICAgfQogfQotDAog
CiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAj
aWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTg3MSwxMCAr
MTc5MCw5IEBAIGludCB5eXBhcnNlICgpOwogCiAKIAotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFy
c2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwog
CiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCkBAIC0xODk4LDc0ICsxODE2LDc1IEBAIHl5cGFyc2UgKGNvbnRleHQp
CiAjZW5kaWYKICNlbmRpZgogewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyog
VGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyogVGhlIHNlbWFudGlj
IHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgc2VtYW50aWMgdmFs
dWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwogWVlTVFlQRSB5eWx2YWw7CiAKLS8qIE51
bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLQotICBpbnQg
eXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9r
ZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5
ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xh
dGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9W
RVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVk
IHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2di
dWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0K
LSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAg
ICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3Rh
Y2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8g
cmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisgICAgLyogTnVtYmVyIG9mIHN5bnRheCBl
cnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKIAotICAvKiBUaGUgc3RhdGUgc3Rh
Y2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50
MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKyAgICBpbnQgeXlzdGF0
ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdl
cyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CiAKLSAgLyogVGhlIHNlbWFudGlj
IHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZ
UEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7CisgICAgLyogVGhlIHN0YWNrcyBh
bmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAg
ICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgogCisgICAgICAgUmVmZXIgdG8g
dGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Cisg
ICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCiAKKyAgICAvKiBUaGUgc3Rh
dGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAg
eXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CiAKLSNkZWZpbmUg
WVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKyAgICAvKiBUaGUg
c2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhd
OworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CiAKLSAgWVlTSVpFX1Qg
eXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKIAor
ICBpbnQgeXluOworICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CiAg
IC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0
aW9uIGZyb20gdGhlCiAgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCiAgIFlZU1RZUEUgeXl2YWw7
CiAKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQogCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9m
IHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91
bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAg
eXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQ
VEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5
eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFy
ID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9
IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlh
bGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5k
IGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVs
IGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIg
aW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBA
IC0xOTk1LDcgKzE5MTQsNiBAQCBpbnQgeXluZXJyczsKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7
CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRl
ciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNl
IGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRp
b25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0y
MDAzLDcgKzE5MjEsNiBAQCBpbnQgeXluZXJyczsKIAl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBl
eGhhdXN0ZWQiKSwKIAkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAogCQkg
ICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0KIAkJICAgICZ5eXN0YWNrc2l6
ZSk7CiAKIAl5eXNzID0geXlzczE7CkBAIC0yMDI2LDkgKzE5NDMsOCBAQCBpbnQgeXluZXJyczsK
IAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3Rh
Y2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFD
S19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19h
bGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5
c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0yMDM5LDcgKzE5NTUsNiBAQCBpbnQg
eXluZXJyczsKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9
IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNr
IHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3Rh
Y2tzaXplKSk7CiAKQEAgLTIwNDksNiArMTk2NCw5IEBAIGludCB5eW5lcnJzOwogCiAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CiAKKyAgaWYg
KHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKwogICBnb3RvIHl5YmFja3VwOwog
CiAvKi0tLS0tLS0tLS0tLgpAQCAtMjA1NywxNiArMTk3NSwxNiBAQCBpbnQgeXluZXJyczsKIHl5
YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJl
bnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBh
bmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3
ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3Qg
dHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQg
dG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCBy
ZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVd
OwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8q
IE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBU
WSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTIwOTgsMjAgKzIwMTYsMTYgQEAgeXli
YWNrdXA6CiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklO
QUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJy
b3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAo
eXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1h
aGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwog
Ci0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0g
IGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2Fy
ZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0
ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0yMTU3LDcgKzIwNzEsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAg
IGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsy
MDgwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlz
IGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAg
ICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFi
bGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpA
QCAtMjE4MywxNCArMjA5NywxNCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCks
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ6CkBAIC0yMjAxLDEzICsyMTE1LDEzIEBA
IHl5cmVkdWNlOgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwog
ICAgICAgICAvLwogICAgICAgICBpZiAoYWJzKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSkgPj0g
KDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50
ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmkpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKQEAgLTIy
MTYsNyArMjEzMCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25z
dCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA2OgpAQCAtMjIyNSwyMSArMjEzOSwyMSBAQCB5eXJlZHVjZToKICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToK
QEAgLTIyNDcsOSArMjE2MSw5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCEoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICEoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAhKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKICAg
ICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5
LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5v
ZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVz
c2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJp
eCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7CkBAIC0yMjY2LDcgKzIxODAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0
b3IoKSB8fCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRy
aXgoKSkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5
cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+
Z2V0SUNvbnN0KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc0FycmF5KCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkp
OworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9u
IG91dCBvZiByYW5nZSAnIiA8PCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CkBAIC0yMjc5LDcgKzIxOTYs
MTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKSA+PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjMxNiwyMSArMjIzNiwy
MSBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5KSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExOgogCiAgICAg
ewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIu
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMjM3NSw3ICsy
Mjk1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmaWVs
ZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMg
bm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
MCk7CkBAIC0yMzkzLDcgKzIzMTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGJvb2wgZmll
bGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhh
cyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBu
byBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMjQyNSwxOCArMjM0NSwxOCBAQCB5eXJlZHVjZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqKCpm
aWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmll
bGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0
cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyOgpAQCAtMjQ1MCw3ICsyMzcwLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTM6CkBAIC0yNDY0LDcgKzIzODQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKQEAgLTI0NzMsNyAr
MjM5Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OgpAQCAtMjUzMCw5ICsyNDUw
LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50
ZXJtTm9kZSwgMCwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5h
bCBFcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFy
eSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1
bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5
cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRM
aW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwgZXh0cmFJbmZv
LmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNTU2
LDcgKzI0NzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBm
bkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNr
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5j
ZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0
TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lu
b3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0
JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNTczLDIzICsyNDk0LDIzIEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBmbkNh
bGw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6CiAKICAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5v
dCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwog
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE4OgpAQCAtMjU5Nyw3ICsyNTE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKQEAgLTI2MDUsNyArMjUyNiw3IEBAIHl5cmVk
dWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CkBAIC0y
NjEzLDcgKzI1MzQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMToKQEAgLTI2MjEsNyArMjU0Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
ZnVuY3Rpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIyOgpAQCAtMjYzMSw3ICsyNTUyLDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFk
ZFBhcmFtZXRlcihwYXJhbSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6CkBAIC0yNjQxLDE0ICsyNTYy
LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlv
biA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb247CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQ6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDI1OgpAQCAtMjY5Nyw3ICsy
NjE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0yNzA3LDcgKzI2MjgsNyBA
QCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpOwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVt
cFN0cmluZywgdHlwZSwgb3ApOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1
bmN0aW9uOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY6CkBAIC0yNzE4
LDcgKzI2MzksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBV
bmRlZmluZWQpOwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gZnVuY3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAyNzoKQEAgLTI3MjksMTQgKzI2NTAsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRUeXBl
IHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlv
biA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk6CkBAIC0yNzUw
LDcgKzI2NzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMDoKQEAgLTI3NjQsNyArMjY4NSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDMxOgpAQCAtMjc4NSwyNyArMjcwNiwyNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDMyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51
bGw7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDMzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyA7fQorICAgIHsgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzQ6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5
eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0p
LmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0g
RU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzU6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDM2OgpAQCAtMjgxOCw3ICsyNzM5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzc6CkBAIC0yODMx
LDEyICsyNzUyLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
O30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToK
QEAgLTI4NDgsNyArMjc2OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQwOgpAQCAtMjg2MCwxNyArMjc4MSwxNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA0MToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDQzOgpAQCAtMjg4NCw3ICsyODA1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQ0OgpAQCAtMjg5OCw3ICsyODE5LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ1OgpAQCAtMjkxMiw3ICsyODMzLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0K
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ2OgpAQCAtMjkyNiwxMiArMjg0
NywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDc6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQ4OgpAQCAtMjk0NSw3ICsyODY2LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ5OgpAQCAtMjk1OSwyNyArMjg4MCwyNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTA6CiAKLSAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MjoKIAotICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNTM6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDU0OgpAQCAtMjk5MywxMiArMjkx
NCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDU2OgpAQCAtMzAxMiwxMiArMjkzMywxMiBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDU4OgpAQCAtMzAzMSwxMiArMjk1MiwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNTk6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDYwOgpAQCAtMzA1NCwxMiAr
Mjk3NSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNSkgLSAo
NSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA2MToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9Cisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjI6CkBAIC0z
MDczLDM5ICsyOTk0LDM5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDYzOgogCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyA7fQorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjQ6CiAKLSAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFz
c2lnbjsgO30KKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNjU6CiAKLSAgICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgO30KKyAgICB7
IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAo
eXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjY6CiAK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BBZGRBc3NpZ247IDt9CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZh
bC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NzoK
IAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcFN1YkFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5
dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY4
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDY5OgpAQCAtMzExNyw3ICszMDM4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzA6
CkBAIC0zMTI2LDcgKzMwNDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmNv
bnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzE6CkBAIC0zMTU3LDcg
KzMwNzgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHByb3RvdHlwZTsKIAogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcyOgpAQCAtMzE2Niw3ICszMDg3LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSkKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDczOgpAQCAtMzE3NCw3ICszMDk1LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZh
dWx0UHJlY2lzaW9uKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSwgKHl5dnNw
WygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgKTsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoK
QEAgLTMxOTEsMTIgKzMxMTIsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwog
ICAgICAgICBpZiAocHJldkRlYykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11
c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIg
cXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMy
MTMsMjEgKzMxMzQsMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5l
ciBzY29wZSBsZXZlbCBvZiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVt
ZW50LgogICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91
bmRpbmcgc2NvcGUgaW5zdGVhZC4KICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0
ZXJMZXZlbCgpLT5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDc1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NjoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24p
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzc6CkBAIC0zMjM5LDcgKzMx
NjAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVy
bSkucGFyYW0udHlwZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc4OgpA
QCAtMzI1Myw3ICszMTc0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAg
ICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fu
bm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewpA
QCAtMzI2MSwxNCArMzE4MiwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzk6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8g
cXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJp
bmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1
YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBz
YW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0zMjgyLDE0ICszMjAzLDE0IEBA
IHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwog
ICAgICAgICAKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODA6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVz
ZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKQEAg
LTMyOTcsNyArMzIxOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpKX07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFy
YW07Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MToKQEAgLTMzMTksNyAr
MzI0MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAoeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSB9OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lOwogICAgICAgICAoeXl2YWwuaW50ZXJt
KS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6
CkBAIC0zMzI4LDcgKzMyNDksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxp
ZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6CkBAIC0z
MzM5LDcgKzMyNjAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1
YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6CkBA
IC0zMzQ4LDcgKzMyNjksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmll
ciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6CkBAIC0zMzU5
LDM1ICszMjgwLDM1IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMild
LmludGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0g
RXZxT3V0OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTA6CkBAIC0zMzk1LDE0ICszMzE2LDE0IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKICAgICAgICAgKHl5dmFsLmludGVy
bSkucGFyYW0gPSBwYXJhbTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkx
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKQEAgLTM0MTAs
NyArMzMzMSw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5s
aW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogCkBAIC0zNDI4LDcgKzMzNDksNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiB2
YXJpYWJsZSkKICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6CkBAIC0zNDUwLDcg
KzMzNzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6CkBAIC0zNDc4LDcgKzMzOTksNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkg
OiAwLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eXZzcFsoMykgLSAo
NildLmxleCkubGluZSksICh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSk7CiAgICAgICAgIH0K
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk1OgpAQCAtMzUwMiw3ICszNDIz
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NjoKQEAgLTM1MTAsNyArMzQzMSw3IEBA
IHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA5NzoKQEAgLTM1MzIsMTkgKzM0NTMsMTkgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAg
ICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk4OgogCiAgICAgewotICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICJ1bnNpemVkIGFycmF5IGRl
Y2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5
OToKQEAgLTM1ODAsNyArMzUwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgaWYgKHZhcmlh
YmxlICYmIHN5bWJvbCkKICAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTAwOgpAQCAtMzYwNCw3ICszNTI1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMDE6CkBAIC0zNjE2LDcgKzM1MzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZS5zZXRCYXNpYyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQs
ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNs
YXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKQEAgLTM2MjYsNyArMzU0Nyw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5p
bnRlcm0pLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1h
a2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6CkBAIC0zNjM1LDQy
ICszNTU2LDQyIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwg
Im5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBz
dXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRB
cnJheShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKICAgICAgICAgICAgICgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGlu
dCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09
IEV2cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
dHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmco
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllcjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNDoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEwNToKQEAgLTM2ODAsNyArMzYwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUs
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNjoKQEAgLTM2OTIs
NyArMzYxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNzoKQEAgLTM3MDQsNyArMzYy
NSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwODoKQEAg
LTM3MTMsNyArMzYzNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBF
dnFVbmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTA5OgpAQCAtMzcyNyw3ICszNjQ4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTA6CkBAIC0zNzM1
LDM1ICszNjU2LDM1IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9u
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwSGlnaDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDExMjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBF
YnBMb3c7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTQ6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTU6CkBAIC0zNzc5
LDcgKzM3MDAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTY6CkBA
IC0zNzg3LDcgKzM3MDgsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTE3OgpAQCAtMzc5NSw3ICszNzE2LDcgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTg6CkBA
IC0zODAzLDcgKzM3MjQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMTk6CkBAIC0zODExLDcgKzM3MzIsNyBAQCB5eXJlZHVjZToK
ICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIwOgpAQCAt
MzgyMCw3ICszNzQxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMjE6CkBAIC0zODI5LDcgKzM3NTAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDEyMjoKQEAgLTM4MzgsNyArMzc1OSw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIzOgpAQCAtMzg0Nyw3ICszNzY4LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNDoKQEAgLTM4NTYsNyArMzc3Nyw3
IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjU6CkBAIC0zODY1
LDcgKzM3ODYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI2
OgpAQCAtMzg3NCw3ICszNzk1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTI3OgpAQCAtMzg4Myw3ICszODA0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTI4OgpAQCAtMzg5Miw3ICszODEzLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI5OgpAQCAtMzkwMiw3ICszODIzLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzA6CkBAIC0zOTEyLDcg
KzM4MzMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEzMToKQEAgLTM5MjIsNyArMzg0Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRydWUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTMyOgpAQCAtMzkzMSw3ICszODUyLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMz
OgpAQCAtMzk0MCwzMyArMzg2MSwzMyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09O
TFkoInNhbXBsZXJDdWJlIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM0OgogCiAgICAgewogICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4
dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlckV4dGVybmFsT0VTIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzNToKIAog
ICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJz
YW1wbGVyMkRSZWN0IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRFJlY3QsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzY6CkBAIC0zOTc1LDcgKzM4
OTYsNyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMzc6CkBAIC0zOTg5LDEyICszOTEwLDEyIEBAIHl5cmVkdWNlOgogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM4OgogCi0gICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7
IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgKih5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3Zl
cigpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzk6CkBAIC00MDEyLDEyICszOTMzLDEyIEBA
IHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVj
dCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQt
PmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQwOgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmlu
ZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVj
dERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxNDE6CkBAIC00MDI3LDE0ICszOTQ4LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3Bb
KDEpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJE
ZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQyOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlTGlzdCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDM6CkBAIC00
MDUwLDcgKzM5NzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZUxpc3QpKVtpXSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE0NDoKQEAgLTQwODcsNyArNDAwOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ1OgpAQCAtNDA5NSwxNCArNDAxNiwx
NCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0g
TmV3UG9vbFRUeXBlTGlzdCgpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVz
aF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGlu
ZSkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ3OgpAQCAtNDExNCw3
ICs0MDM1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5
cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0RmllbGROYW1lKCooeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxNDg6CkBAIC00MTMxLDY3ICs0MDUyLDY3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSku
dHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQ5OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTA6CiAKLSAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTE6CiAKLSAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtQWdncmVnYXRlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTUyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTUzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU1OgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU2OgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU3Ogog
Ci0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTU4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTU5OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9Cisg
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDE2MDoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IDt9CisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYxOgpAQCAt
NDIwMiw0NCArNDEyMyw0NCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMykgLSAo
NSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoNSkgLSAoNSld
LmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjI6CiAKLSAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9
CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjM6CiAKLSAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjQ6CiAK
LSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY1OgogCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjY6CiAK
LSAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY3OgogCi0gICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjg6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY5OgpAQCAtNDI1MCwzMSArNDE3MSwzMSBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAg
IH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTcxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpLCAwKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTczOgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDE3NDoKQEAgLTQyODMsNyArNDIwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29u
dGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXl2c3Bb
KDEpIC0gKDUpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTc1OgpAQCAtNDI5MSw3ICs0MjEyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1Ob2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNzY6CkBAIC00Mjk5LDcgKzQyMjAsNyBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzc6CkBAIC00
MzA4LDcgKzQyMjksNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzg6CkBAIC00MzI2LDEyICs0MjQ3LDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc5OgogCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODA6CkBAIC00MzQwLDEyICs0MjYxLDEyIEBAIHl5cmVk
dWNlOgogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29w
V2hpbGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAo
eXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNildLmxl
eCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MToKIAotICAgIHsgKytjb250ZXh0LT5sb29w
TmVzdGluZ0xldmVsOyA7fQorICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxODI6CkBAIC00MzU2LDEyICs0Mjc3LDEyIEBAIHl5cmVkdWNl
OgogCiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5l
c3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKIAot
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgpAQCAtNDM3MCwz
NSArNDI5MSwzNSBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5v
ZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmlu
dGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5
eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcp
XS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNyldLmxleCkubGluZSk7CiAgICAg
ICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE4NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NzoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODk6CkBAIC00NDA2LDcg
KzQzMjcsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBh
aXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5MDoKQEAgLTQ0MTQsMjkgKzQzMzUsMjkgQEAgeXlyZWR1
Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkxOgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51
ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0
YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAi
YnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE5MzoKQEAgLTQ0NDQsMTAgKzQzNjUsMTAgQEAgeXlyZWR1Y2U6CiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE5NDoKQEAgLTQ0NTYsMTMgKzQzNzcsMTMgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIGNv
bnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQg
ZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQgZnVu
Y3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZSkgIT0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgz
KV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJy
ZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMp
XS5sZXgpLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJl
dHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTU6CkBAIC00NDcwLDcgKzQzOTEsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTY6
CkBAIC00NDc4LDcgKzQzOTksNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
CiAgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKQEAgLTQ0ODYsMjEgKzQ0
MDcsMjEgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksIDApOwogICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
OTk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMDA6CkBAIC00NTE3LDcgKzQ0MzgsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIC8vCiAgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBi
b2R5LgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7
CkBAIC00NTI3LDcgKzQ0NDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBh
bnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5l
LCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtNDU1OSw3ICs0NDgwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0
aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAi
cmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1ODAsNyArNDUwMSw3IEBAIHl5
cmVkdWNlOgogICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5s
aW5lKTsKICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJhbU5vZGVzOwogICAgICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIwMToKQEAgLTQ2MDAsMTkgKzQ1MjEs
MTcgQEAgeXlyZWR1Y2U6CiAKICAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlv
biBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAg
ICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0
aGUgcGFyc2UgdHJlZQotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
RGVidWcoY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1Zyk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUoY29udGV4
dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgp
Lm9wdGltaXplKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0RGVidWcoY29udGV4dC0+cHJhZ21hKCkuZGVidWcpOwogCiAgICAgICAgIGlm
ICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSkgJiYgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpKQogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldEVu
ZExpbmUoKSk7CiAKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTQ2MjQsNyArNDU0Myw2IEBAIHl5cmVkdWNl
OgogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0
IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMg
dG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAg
ICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtNDY4OSw3ICs0NjA3LDcgQEAgeXllcnJsYWI6
CiAKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmll
ZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8q
IElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KIAkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQpAQCAtNDcwNiw3ICs0NjI0LDcgQEAgeXllcnJsYWI6CiAJfQogICAgIH0KIAotICAvKiBFbHNl
IHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVy
cm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNo
aWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBA
IC00NzYzLDkgKzQ2ODEsNiBAQCB5eWVycmxhYjE6CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7
Ci0KICAgKisreXl2c3AgPSB5eWx2YWw7CiAKIApAQCAtNDc5MCw3ICs0NzA1LDcgQEAgeXlhYm9y
dGxhYjoKICAgeXlyZXN1bHQgPSAxOwogICBnb3RvIHl5cmV0dXJuOwogCi0jaWZuZGVmIHl5b3Zl
cmZsb3cKKyNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhh
dXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ4MDEsNyArNDcx
Niw3IEBAIHl5ZXhoYXVzdGVkbGFiOgogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFy
ICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkp
CiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5
eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJv
bHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAppbmRleCAyMzk0NWI4Li4z
ZTQ2MWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuaApAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUg
YnkgR05VIEJpc29uIDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi40LjIuICAqLwogCiAvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIw
MDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgCisgICAgICBDb3B5cmlnaHQg
KEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQor
ICAgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK
LSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChh
dCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCisgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAogICAgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQorICAgCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4gICovCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw
Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKIC8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwogICAgcGFydCBv
ciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdv
cmsKQEAgLTI5LDEwICsyNywxMSBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwg
Y2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmls
ZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5z
ZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgog
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCisKIC8qIFRva2Vucy4gICovCiAjaWZuZGVm
IFlZVE9LRU5UWVBFCiAjIGRlZmluZSBZWVRPS0VOVFlQRQpAQCAtMTM0LDEwOCArMTMzLDE0IEBA
CiAgICAgIFFVRVNUSU9OID0gMzUwCiAgICB9OwogI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2Rl
ZmluZSBJTlZBUklBTlQgMjU4Ci0jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIDI1OQotI2RlZmluZSBN
RURJVU1fUFJFQ0lTSU9OIDI2MAotI2RlZmluZSBMT1dfUFJFQ0lTSU9OIDI2MQotI2RlZmluZSBQ
UkVDSVNJT04gMjYyCi0jZGVmaW5lIEFUVFJJQlVURSAyNjMKLSNkZWZpbmUgQ09OU1RfUVVBTCAy
NjQKLSNkZWZpbmUgQk9PTF9UWVBFIDI2NQotI2RlZmluZSBGTE9BVF9UWVBFIDI2NgotI2RlZmlu
ZSBJTlRfVFlQRSAyNjcKLSNkZWZpbmUgQlJFQUsgMjY4Ci0jZGVmaW5lIENPTlRJTlVFIDI2OQot
I2RlZmluZSBETyAyNzAKLSNkZWZpbmUgRUxTRSAyNzEKLSNkZWZpbmUgRk9SIDI3MgotI2RlZmlu
ZSBJRiAyNzMKLSNkZWZpbmUgRElTQ0FSRCAyNzQKLSNkZWZpbmUgUkVUVVJOIDI3NQotI2RlZmlu
ZSBCVkVDMiAyNzYKLSNkZWZpbmUgQlZFQzMgMjc3Ci0jZGVmaW5lIEJWRUM0IDI3OAotI2RlZmlu
ZSBJVkVDMiAyNzkKLSNkZWZpbmUgSVZFQzMgMjgwCi0jZGVmaW5lIElWRUM0IDI4MQotI2RlZmlu
ZSBWRUMyIDI4MgotI2RlZmluZSBWRUMzIDI4MwotI2RlZmluZSBWRUM0IDI4NAotI2RlZmluZSBN
QVRSSVgyIDI4NQotI2RlZmluZSBNQVRSSVgzIDI4NgotI2RlZmluZSBNQVRSSVg0IDI4NwotI2Rl
ZmluZSBJTl9RVUFMIDI4OAotI2RlZmluZSBPVVRfUVVBTCAyODkKLSNkZWZpbmUgSU5PVVRfUVVB
TCAyOTAKLSNkZWZpbmUgVU5JRk9STSAyOTEKLSNkZWZpbmUgVkFSWUlORyAyOTIKLSNkZWZpbmUg
U1RSVUNUIDI5MwotI2RlZmluZSBWT0lEX1RZUEUgMjk0Ci0jZGVmaW5lIFdISUxFIDI5NQotI2Rl
ZmluZSBTQU1QTEVSMkQgMjk2Ci0jZGVmaW5lIFNBTVBMRVJDVUJFIDI5NwotI2RlZmluZSBTQU1Q
TEVSX0VYVEVSTkFMX09FUyAyOTgKLSNkZWZpbmUgU0FNUExFUjJEUkVDVCAyOTkKLSNkZWZpbmUg
SURFTlRJRklFUiAzMDAKLSNkZWZpbmUgVFlQRV9OQU1FIDMwMQotI2RlZmluZSBGTE9BVENPTlNU
QU5UIDMwMgotI2RlZmluZSBJTlRDT05TVEFOVCAzMDMKLSNkZWZpbmUgQk9PTENPTlNUQU5UIDMw
NAotI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzA1Ci0jZGVmaW5lIExFRlRfT1AgMzA2Ci0jZGVm
aW5lIFJJR0hUX09QIDMwNwotI2RlZmluZSBJTkNfT1AgMzA4Ci0jZGVmaW5lIERFQ19PUCAzMDkK
LSNkZWZpbmUgTEVfT1AgMzEwCi0jZGVmaW5lIEdFX09QIDMxMQotI2RlZmluZSBFUV9PUCAzMTIK
LSNkZWZpbmUgTkVfT1AgMzEzCi0jZGVmaW5lIEFORF9PUCAzMTQKLSNkZWZpbmUgT1JfT1AgMzE1
Ci0jZGVmaW5lIFhPUl9PUCAzMTYKLSNkZWZpbmUgTVVMX0FTU0lHTiAzMTcKLSNkZWZpbmUgRElW
X0FTU0lHTiAzMTgKLSNkZWZpbmUgQUREX0FTU0lHTiAzMTkKLSNkZWZpbmUgTU9EX0FTU0lHTiAz
MjAKLSNkZWZpbmUgTEVGVF9BU1NJR04gMzIxCi0jZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjIKLSNk
ZWZpbmUgQU5EX0FTU0lHTiAzMjMKLSNkZWZpbmUgWE9SX0FTU0lHTiAzMjQKLSNkZWZpbmUgT1Jf
QVNTSUdOIDMyNQotI2RlZmluZSBTVUJfQVNTSUdOIDMyNgotI2RlZmluZSBMRUZUX1BBUkVOIDMy
NwotI2RlZmluZSBSSUdIVF9QQVJFTiAzMjgKLSNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyOQotI2Rl
ZmluZSBSSUdIVF9CUkFDS0VUIDMzMAotI2RlZmluZSBMRUZUX0JSQUNFIDMzMQotI2RlZmluZSBS
SUdIVF9CUkFDRSAzMzIKLSNkZWZpbmUgRE9UIDMzMwotI2RlZmluZSBDT01NQSAzMzQKLSNkZWZp
bmUgQ09MT04gMzM1Ci0jZGVmaW5lIEVRVUFMIDMzNgotI2RlZmluZSBTRU1JQ09MT04gMzM3Ci0j
ZGVmaW5lIEJBTkcgMzM4Ci0jZGVmaW5lIERBU0ggMzM5Ci0jZGVmaW5lIFRJTERFIDM0MAotI2Rl
ZmluZSBQTFVTIDM0MQotI2RlZmluZSBTVEFSIDM0MgotI2RlZmluZSBTTEFTSCAzNDMKLSNkZWZp
bmUgUEVSQ0VOVCAzNDQKLSNkZWZpbmUgTEVGVF9BTkdMRSAzNDUKLSNkZWZpbmUgUklHSFRfQU5H
TEUgMzQ2Ci0jZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDcKLSNkZWZpbmUgQ0FSRVQgMzQ4Ci0jZGVm
aW5lIEFNUEVSU0FORCAzNDkKLSNkZWZpbmUgUVVFU1RJT04gMzUwCi0KIAogCiAKICNpZiAhIGRl
ZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1
bmlvbiBZWVNUWVBFCi0KIHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBs
aW5lOwogICAgICAgICB1bmlvbiB7CkBAIC0yNjUsMTQgKzE3MCwxNSBAQCB0eXBlZGVmIHVuaW9u
IFlZU1RZUEUKICAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAg
ICAgfSBpbnRlcm07Ci19Ci0vKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7
CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5l
IHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFM
IDEKICNlbmRpZgogCiAKIAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5kZXggNTQ0MTU1Ny4uYWY3OGZhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApA
QCAtNDMzLDE1ICs0MzMsMTUgQEAgcHJvdGVjdGVkOgogCiB0eXBlZGVmIFRWZWN0b3I8VEludGVy
bU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7CiB0eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlmaWVy
TGlzdDsKLXR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3RyaW5nPiBUUHJhZ21hVGFibGU7CisKIC8v
CiAvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNldCBvZiBjaGls
ZHJlbi4KIC8vCiBjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRlcm1PcGVyYXRv
ciB7CiBwdWJsaWM6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVP
cE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHByYWdtYVRhYmxlKDApLCBlbmRMaW5lKDApLCB1
c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVy
YXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCksIHVzZUVtdWxhdGVk
RnVuY3Rpb24oZmFsc2UpIHsgfQotICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyBkZWxldGUgcHJh
Z21hVGFibGU7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9w
TnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlv
bihmYWxzZSkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJt
T3BlcmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIH5USW50ZXJt
QWdncmVnYXRlKCkgeyB9CiAKICAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdn
cmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CkBAIC00NTIsMTQgKzQ1MiwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KIAogICAgIHZvaWQgc2V0
VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNVc2VyRGVm
aW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkg
Y29uc3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemUoYm9v
bCBvKSB7IG9wdGltaXplID0gbzsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBv
cHRpbWl6ZTsgfQogICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQogICAg
IGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQotICAgIHZvaWQgYWRkVG9QcmFnbWFU
YWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7Ci0gICAgY29uc3QgVFByYWdtYVRhYmxl
JiBnZXRQcmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorCiAgICAg
dm9pZCBzZXRFbmRMaW5lKFRTb3VyY2VMb2MgbGluZSkgeyBlbmRMaW5lID0gbGluZTsgfQogICAg
IFRTb3VyY2VMb2MgZ2V0RW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIGVuZExpbmU7IH0KIApAQCAt
NDc1LDcgKzQ3NCw2IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgb3B0aW1pemU7CiAgICAgYm9v
bCBkZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOwogICAgIFRTb3VyY2VMb2Mg
ZW5kTGluZTsKIAogICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBm
dW5jdGlvbiBjYWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCkBAIC01MzMsNiArNTMxLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCiAgICAgICAgICAgICByaWdo
dFRvTGVmdChyaWdodFRvTGVmdCksCiAgICAgICAgICAgICBkZXB0aCgwKSB7fQorICAgIHZpcnR1
YWwgflRJbnRlcm1UcmF2ZXJzZXIoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKikge30KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9u
KFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAppbmRleCA5ZjkzOTNhLi45YjNhY2RmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCkBAIC0x
Nyw3ICsxNyw3IEBACiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4
X18pIHx8IFwKICAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNE
X18pIHx8IFwKICAgICAgIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAot
ICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgZGVmaW5lZChf
X1FOWF9fKQorICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykKICNk
ZWZpbmUgQU5HTEVfT1NfUE9TSVgKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvYXRvbS5jCmluZGV4IGExN2MzMTkuLjM5MTU4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5j
CkBAIC01MCw2ICs1MCw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmlu
Zy5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIK
IApAQCAtMzA3LDcgKzMwOCw3IEBAIHN0cnVjdCBBdG9tVGFibGVfUmVjIHsKICAgICBpbnQgc2l6
ZTsKIH07CiAKLXN0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyAwIH0gfTsKK3N0YXRpYyBB
dG9tVGFibGUgbGF0YWJsZSA9IHsgeyBOVUxMLCAwLCAwIH0sIHsgTlVMTCwgMCwgMCwgezB9IH0s
IE5VTEwsIE5VTEwsIDAsIDAgfTsKIEF0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CiAKIHN0
YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBp
bnQgYXRvbSk7CkBAIC00MzQsMTQgKzQzNSwxNCBAQCBzdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0
b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQogICAgICAgICAgICAgaWYgKGNwcC0+b3B0
aW9ucy5EdW1wQXRvbVRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaW50IGlpOwogICAgICAgICAg
ICAgICAgIGNoYXIgc3RyWzIwMF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiog
SGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBo
YXNoIHRhYmxlIHNpemUuICoqKiIsCisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIioqKiBIYXNoIGZhaWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBN
dXN0IGluY3JlYXNlIGhhc2ggdGFibGUgc2l6ZS4gKioqIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKHN0cik7CiAKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3Ry
aW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBkZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNo
ZGVsdGEpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiog
TmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblsw
XSwgaGFzaGRlbHRhKTsKICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAg
ICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9O
UzsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRl
cyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAg
ICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBDb2xsaWRlcyBvbiB0cnkg
JWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlpICsgMSwgY29sbGlzaW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJs
ZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSwxNCAr
Njg2LDE0IEBAIHZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCiAgICAgY2hh
ciBzdHJbMjAwXTsKIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlp
KyspIHsKLSAgICAgICAgc3ByaW50ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0
YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBz
aXplb2Yoc3RyKSwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRh
YmxlLT5hbWFwW2lpXV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KLSAg
ICBzcHJpbnRmKHN0ciwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lv
bnM9IiwKKyAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiSGFzaCB0YWJsZTogc2l6ZT0l
ZCwgZW50cmllcz0lZCwgY29sbGlzaW9ucz0iLAogICAgICAgICAgICBhdGFibGUtPmh0YWJsZS5z
aXplLCBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKTsKICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwog
ICAgIGZvciAoaWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsK
LSAgICAgICAgc3ByaW50ZihzdHIsICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsK
KyAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCIsIGF0YWJsZS0+aHRhYmxl
LmNvdW50c1tpaV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3BwLmMKaW5kZXggMTNhNWRmMS4uOGExMDc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYworKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCkBAIC01MSw2
ICs1MSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNjc4LDcgKzY3
OSw3IEBAIHN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogCQljYXNl
IC0xOgogICAgICAgICAgICAgLy8gRU9GCiAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNw
cmFnbWEgZGlyZWN0aXZlIG11c3QgZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlyZXR1cm4g
dG9rZW47CisJCQlnb3RvIGZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjsKIAkJZGVmYXVsdDoKIAkJ
CVNyY1N0ck5hbWVbMF0gPSB0b2tlbjsKIAkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOwpAQCAtNjg4
LDEwICs2ODksOSBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
IAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwogCX0KIAotCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB0b2tlbiwgeXlsdmFscHApOwogCUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRv
a2VucywgdG9rZW5Db3VudCk7Ci0JdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCQorZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgog
CWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ld
KTsKIAl9CkBAIC03ODQsNyArNzg0LDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogewogICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBp
bnQgaXNWZXJzaW9uID0gMDsKIAogICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewog
ICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3
ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAg
ICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQ
UHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAg
fSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgewpA
QCAtODg2LDE1ICs4ODQsMTUgQEAgdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0K
IAogdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsK
LSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0g
ezAsIDB9OwogICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNy
byA9IHswfTsKLSAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3Jv
ID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAw
LCB7MH19OwogICAgIGludCBhdG9tID0gMDsKIAogICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0
cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBz
cHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwgdmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5z
eW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVj
b3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZs
b2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGlu
dCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZTsKIAlpZiAoYXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKICAgICAgICAgeXls
dmFscHAtPnNjX2ludCA9IEdldExpbmVOdW1iZXIoKTsKLSAgICAgICAgc3ByaW50Zih5eWx2YWxw
cC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgc25wcmludGYo
eXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5bHZh
bHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFs
cHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgaWYgKGF0b20gPT0gX19GSUxFX19B
dG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIoKTsKLSAg
ICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50
KTsKKyAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05B
TUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwogICAgICAgICBVbmdldFRva2VuKENQ
UF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaAppbmRleCBkYjRjMTg0Li44MDJlMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKQEAgLTczLDgg
KzczLDggQEAgdm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIqKTsgICAgICAgICAvLyBT
dG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG8KIHZvaWQgIENQUFdhcm5pbmdUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZv
IGxvZwogdm9pZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAv
LyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250YWluZXIuCiB2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7
ICAgICAgICAgICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lkICBD
UFBFcnJvclRvSW5mb0xvZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJy
b3JzIGludG8gU2guSW5mby5sb2cgICAuCi12b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lk
ICBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAg
ZXJyb3JzIGludG8gU2guSW5mby5sb2cuCit2b2lkICBTdG9yZVN0cihjb25zdCBjaGFyKik7ICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCiB2b2lk
ICBTZXRMaW5lTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJl
ci4gIAogdm9pZCAgU2V0U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQg
c3RyaW5nIG51bWJlci4gICAgCiBpbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAg
ICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCmluZGV4IGIzYWUyZjkuLjVmY2FkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaApAQCAtNDUs
NiArNDUsOCBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAjaWZuZGVmIF9fTUVNT1JZX0gKICNkZWZpbmUgX19NRU1PUllfSAogCisj
aW5jbHVkZSA8c3RkZGVmLmg+CisKIHR5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVjIE1lbW9y
eVBvb2w7CiAKIGV4dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtz
aXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5Y2M0My4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxz
c3RyZWFtPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJzdGxfdXRp
bHMuaCIKLSNpbmNsdWRlICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBib29sIGlzTWFjcm9OYW1l
UmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgQVNTRVJUKG5hbWUpOwot
Ci0gICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCi0gICAgaWYg
KG5hbWUtPnN1YnN0cigwLCAzKSA9PSAiR0xfIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVz
ZXJ2ZWQuCi0gICAgaWYgKG5hbWUtPmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1uYW1lc3BhY2Ug
cHAKLXsKLQotQ29udGV4dDo6Q29udGV4dCgpCi0gICAgOiBtTGV4ZXIoTlVMTCksCi0gICAgICBt
SW5wdXQoTlVMTCksCi0gICAgICBtT3V0cHV0KE5VTEwpCi17Ci19Ci0KLUNvbnRleHQ6On5Db250
ZXh0KCkKLXsKLSAgICBkZXN0cm95TGV4ZXIoKTsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0KCkK
LXsKLSAgICByZXR1cm4gaW5pdExleGVyKCk7Ci0KLSAgICAvLyBUT0RPKGFsb2twKTogRGVmaW5l
IGJ1aWx0LWluIG1hY3JvcyBoZXJlIHNvIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8KLSAgICAvLyBk
ZWZpbmUgdGhlbSBldmVyeXRpbWUgaW4gcHJvY2VzcygpLgotfQotCi1ib29sIENvbnRleHQ6OnBy
b2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAg
ICAgICAgICAgICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0KQotewotICAgIEFTU0VSVCgo
Y291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpICYmIChvdXRwdXQgIT0gTlVMTCkpOwotCi0g
ICAgLy8gU2V0dXAuCi0gICAgbUlucHV0ID0gbmV3IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0
aCk7Ci0gICAgbU91dHB1dCA9IG91dHB1dDsKLSAgICBkZWZpbmVCdWlsdEluTWFjcm8oIkdMX0VT
IiwgMSk7Ci0KLSAgICAvLyBQYXJzZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZSgpOwotCi0g
ICAgLy8gQ2xlYW51cC4KLSAgICByZXNldCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1i
b29sIENvbnRleHQ6OmRlZmluZU1hY3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6VHlwZSB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcDo6VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykKLXsKLSAgICBzdGQ6OmF1dG9fcHRy
PE1hY3JvPiBtYWNybyhuZXcgTWFjcm8odHlwZSwgbmFtZSwgcGFyYW1ldGVycywgcmVwbGFjZW1l
bnRzKSk7Ci0gICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQobmFtZSkpCi0gICAgewotICAgICAg
ICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmIChpc01hY3JvRGVmaW5lZChuYW1lKSkKLSAgICB7Ci0gICAgICAgIC8vIFRP
RE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBtTWFjcm9zWypuYW1lXSA9IG1hY3JvLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDb250ZXh0Ojp1bmRlZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1l
KQotewotICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3Jvcy5maW5kKCpuYW1lKTsK
LSAgICBpZiAoaXRlciA9PSBtTWFjcm9zLmVuZCgpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBt
TWFjcm9zLmVyYXNlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6
OmlzTWFjcm9EZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIHJldHVybiBt
TWFjcm9zLmZpbmQoKm5hbWUpICE9IG1NYWNyb3MuZW5kKCk7Ci19Ci0KLS8vIFJlc2V0IHRvIGlu
aXRpYWxpemVkIHN0YXRlLgotdm9pZCBDb250ZXh0OjpyZXNldCgpCi17Ci0gICAgc3RkOjpmb3Jf
ZWFjaChtTWFjcm9zLmJlZ2luKCksIG1NYWNyb3MuZW5kKCksIERlbGV0ZVNlY29uZCgpKTsKLSAg
ICBtTWFjcm9zLmNsZWFyKCk7Ci0KLSAgICBkZWxldGUgbUlucHV0OwotICAgIG1JbnB1dCA9IE5V
TEw7Ci0KLSAgICBtT3V0cHV0ID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWZpbmVCdWls
dEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSkKLXsKLSAgICBzdGQ6
Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLSAgICBUb2tlbiog
dG9rZW4gPSBuZXcgVG9rZW4oMCwgSU5UX0NPTlNUQU5ULCBuZXcgc3RkOjpzdHJpbmcoc3RyZWFt
LnN0cigpKSk7Ci0gICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyA9IG5ldyBwcDo6VG9rZW5W
ZWN0b3IoMSwgdG9rZW4pOwotCi0gICAgbU1hY3Jvc1tuYW1lXSA9IG5ldyBNYWNybyhNYWNybzo6
a1R5cGVPYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgc3RkOjpzdHJpbmco
bmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTgxMjc0Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
Q09OVEVYVF9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotCi0j
aW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRl
ICJJbnB1dC5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotbmFt
ZXNwYWNlIHBwCi17Ci0KLWNsYXNzIENvbnRleHQKLXsKLSAgcHVibGljOgotICAgIENvbnRleHQo
KTsKLSAgICB+Q29udGV4dCgpOwotCi0gICAgYm9vbCBpbml0KCk7Ci0gICAgYm9vbCBwcm9jZXNz
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSwKLSAgICAgICAgICAgICAgICAgVG9rZW5WZWN0b3IqIG91dHB1dCk7Ci0KLSAgICB2b2lkKiBs
ZXhlcigpIHsgcmV0dXJuIG1MZXhlcjsgfQotICAgIGludCByZWFkSW5wdXQoY2hhciogYnVmLCBp
bnQgbWF4U2l6ZSk7Ci0gICAgVG9rZW5WZWN0b3IqIG91dHB1dCgpIHsgcmV0dXJuIG1PdXRwdXQ7
IH0KLQotICAgIGJvb2wgZGVmaW5lTWFjcm8ocHA6OlRva2VuOjpMb2NhdGlvbiBsb2NhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6VHlwZSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBwcDo6VG9r
ZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0
b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgYm9vbCB1bmRlZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3Ry
aW5nKiBuYW1lKTsKLSAgICBib29sIGlzTWFjcm9EZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBu
YW1lKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0
KTsKLSAgICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybyo+IE1hY3JvU2V0Owot
Ci0gICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaW5pdExleGVyKCk7Ci0gICAgdm9pZCBkZXN0
cm95TGV4ZXIoKTsKLSAgICB2b2lkIGRlZmluZUJ1aWx0SW5NYWNybyhjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwgaW50IHZhbHVlKTsKLSAgICBib29sIHBhcnNlKCk7Ci0KLSAgICB2b2lkKiBtTGV4
ZXI7ICAvLyBMZXhlciBoYW5kbGUuCi0gICAgSW5wdXQqIG1JbnB1dDsKLSAgICBUb2tlblZlY3Rv
ciogbU91dHB1dDsKLSAgICBNYWNyb1NldCBtTWFjcm9zOyAgLy8gRGVmaW5lZCBtYWNyb3MuCi19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0NPTlRFWFRfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3NWE5YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
YWdub3N0aWNzLmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2Ug
cHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBv
cnRpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9u
c2libGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERp
YWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFNldmVyaXR5CisgICAgeworICAgICAg
ICBFUlJPUiwKKyAgICAgICAgV0FSTklORworICAgIH07CisgICAgZW51bSBJRAorICAgIHsKKyAg
ICAgICAgRVJST1JfQkVHSU4sCisgICAgICAgIElOVEVSTkFMX0VSUk9SLAorICAgICAgICBPVVRf
T0ZfTUVNT1JZLAorICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgSU5WQUxJRF9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgRElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgRU9GX0lOX0NPTU1FTlQsCisgICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUs
CisgICAgICAgIFVORVhQRUNURURfVE9LRU4sCisgICAgICAgIERJUkVDVElWRV9JTlZBTElEX05B
TUUsCisgICAgICAgIE1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgIE1BQ1JPX1JFREVGSU5F
RCwKKyAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfVU5ERUZJTkVELAorICAgICAgICBNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElP
TiwKKyAgICAgICAgTUFDUk9fVE9PX0ZFV19BUkdTLAorICAgICAgICBNQUNST19UT09fTUFOWV9B
UkdTLAorICAgICAgICBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05E
SVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElPTkFMX0VMU0VfQUZURVJf
RUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05E
SVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElPTkFMX1VOVEVSTUlOQVRF
RCwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgSU5WQUxJRF9FWFRF
TlNJT05fQkVIQVZJT1IsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAg
ICAgICAgSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9WRVJTSU9OX0RJ
UkVDVElWRSwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9G
SUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgRVJS
T1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAgICAgIENPTkRJVElPTkFMX1VO
RVhQRUNURURfVE9LRU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdB
Uk5JTkdfRU5ECisgICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2
b2lkIHJlcG9ydChJRCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpz
dHJpbmcmIHRleHQpOworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBp
ZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljc0Jhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YjMyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNl
LmNwcApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgcHAKK3sKKworRGlhZ25v
c3RpY3M6On5EaWFnbm9zdGljcygpCit7Cit9CisKK3ZvaWQgRGlhZ25vc3RpY3M6OnJlcG9ydChJ
RCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQorewor
ICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEgY291bnQgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncy4K
KyAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsKK30KKworRGlhZ25vc3RpY3M6OlNldmVyaXR5IERp
YWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKK3sKKyAgICBpZiAoKGlkID4gRVJST1JfQkVHSU4p
ICYmIChpZCA8IEVSUk9SX0VORCkpCisgICAgICAgIHJldHVybiBFUlJPUjsKKworICAgIGlmICgo
aWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJOSU5HX0VORCkpCisgICAgICAgIHJldHVy
biBXQVJOSU5HOworCisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gRVJST1I7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwor
CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxv
Y2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJl
cHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2Vy
dGFpbgorLy8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVz
cG9uc2libGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4K
K2NsYXNzIERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVj
dGl2ZUhhbmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3Vy
Y2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFn
bWEgbmFtZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9u
KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNw
YWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTFlMWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1YTkwZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKQEAgLTAsMCArMSw4OTkgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUg
IkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUg
IkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVk
ZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2VudW0g
RGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJUkVDVElWRV9ERUZJ
TkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJFQ1RJ
VkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwKKyAg
ICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZFX0VS
Uk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKKyAg
ICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5hbWVz
cGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2Vu
KiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmlu
ZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRl
ZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJp
ZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVm
Iik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRl
ZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIp
OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOwor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lv
biIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVy
c2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGlu
ZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKKyAg
ICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlRGVmaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0RFRklORTsKKyAgICBl
bHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4g
RElSRUNUSVZFX1VOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZl
SWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZh
bHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsK
KyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9JRk5ERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBp
ZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKQorICAgICAgICByZXR1cm4gRElSRUNU
SVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOwor
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlUHJhZ21hKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0xJTkU7CisKKyAgICByZXR1
cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3Rp
dmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUpCit7CisgICAgc3dpdGNoIChkaXJlY3RpdmUpCisg
ICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRF
RjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VM
U0U6CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRU5E
SUY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNl
bnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4q
IHRva2VuKQoreworICAgIHJldHVybiAodG9rZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50
eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChw
cDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHdoaWxlKCFpc0VPRCh0
b2tlbikpCisgICAgeworICAgICAgICBsZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7
CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYg
KG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNl
cnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wg
aXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwcDo6TWFjcm9TZXQmIG1hY3JvU2V0KQoreworICAgIHBw
OjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7Cisg
ICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5l
ZCA6IGZhbHNlOworfQorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGVmaW5lZFBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4
ZXIsCisgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAg
ICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICAgICAgbUxleGVyKGxl
eGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICAgICAgbURpYWdub3N0aWNz
KGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7CisKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4p
OworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJlbiA9IGZhbHNlOworICAgICAgICBt
TGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4
KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICBza2lw
VW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQo
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0g
bU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIwIjsKKworICAgICAgICBpZiAocGFyZW4pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBX
ZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAgICAgLy8gQ29udmVydCB0aGUg
Y3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgorICAgICAgICB0b2tlbi0+dHlw
ZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247
CisgICAgfQorCisgIHByaXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNy
b1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitE
aXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2
ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1h
Y3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVI
YW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjps
ZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkK
KyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0
aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlwZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoc2tp
cHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0gJ1xuJykpOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAg
IC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJsb2NrL2dyb3VwLAorICAgIC8v
IHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KKyAgICBpZiAoc2tpcHBpbmco
KSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2ZShkaXJlY3RpdmUpKQorICAgIHsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHN3aXRjaChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfTk9O
RToKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9J
TlZBTElEX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAg
IHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElW
RV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAg
ICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVD
VElWRV9FTFNFOgorICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5k
aWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgor
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5z
aW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9O
OgorICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBp
ZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgIH0KK30K
Kwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKKworICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnZhbHVlLCAqbU1hY3JvU2V0KSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVE
X1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3Jv
TmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3Jv
OjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+
aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3Jv
LiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1
bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0
b2tlbi0+dmFsdWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8g
R2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAg
fQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0g
VG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9u
IGJlY2F1c2UgaXQgaXMgdW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlz
dC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dzIHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0
bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jvcy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0g
U291cmNlTG9jYXRpb24oKTsKKyAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygq
dG9rZW4pOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAo
IW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFj
ZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBv
ZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFj
cm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFj
ZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4K
KyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNy
by5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVh
bHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjpt
YWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9VTkRFRik7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9
IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1Nl
dC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpN
QUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYo
dG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9r
ZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0
b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsK
KworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9J
RiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0
aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAg
ICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYmxvY2suZm91bmRFbHNlR3JvdXAgPSB0cnVlOworICAgIGJsb2Nr
LnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFsaWRHcm91cDsKKyAgICBibG9jay5mb3VuZFZhbGlk
R3JvdXAgPSB0cnVlOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFm
dGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0
b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5p
emVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tp
cEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUg
d2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
RUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRH
cm91cCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KKyAg
ICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAg
ICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBleHByZXNzaW9u
ID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJl
c3Npb24gPT0gMDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7
Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOworCisg
ICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFs
dWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3RhY2sucG9wX2JhY2soKTsKKworICAg
IC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjZW5kaWYuCisgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAg
fQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7
CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKwor
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5k
bGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBw
cmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZl
KHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7Cisg
ICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BBUkVOLAorICAgICAgICBQUkFHTUFf
VkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0
cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOworICAgIGludCBzdGF0ZSA9IFBSQUdN
QV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2Vu
LT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgewor
ICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgUFJBR01B
X05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFs
aWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFs
aWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+
dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tl
bjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFJJR0hU
X1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJykn
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICB2YWxpZCA9IHZhbGlkICYmICgoc3Rh
dGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAvLyBFbXB0eSBwcmFnbWEuCisgICAgICAgICAgICAg
ICAgICAgICAgKHN0YXRlID09IExFRlRfUEFSRU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4K
KyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBX
aXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdt
YS4KKyAgICB7CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4t
PmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FWFRFTlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAg
IHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJ
T1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJ
RF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2Vu
LT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046CisgICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9C
RUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYm
IChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBt
RGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwg
YmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2Vu
KiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
VkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJF
UgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7
CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRv
aSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05V
TUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFu
ZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0
aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgewor
ICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAgICB9OworCisgICAg
Ym9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAgICBpbnQg
c3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlciht
VG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5s
ZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tl
bi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZJ
TEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB9CisKKyAgICBpZiAo
dmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIg
KyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
fQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1i
ZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6
ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29sIERpcmVjdGl2ZVBhcnNl
cjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgp
KSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJs
b2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9u
YWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9jayBibG9jazsKKyAgICBi
bG9jay50eXBlID0gdG9rZW4tPnZhbHVlOworICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxv
Y2F0aW9uOworCisgICAgaWYgKHNraXBwaW5nKCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNv
bmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAg
ICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9j
ayBpcyBza2lwcGVkLgorICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29u
ZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9z
dGljLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBi
bG9jay5za2lwQmxvY2sgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBE
aXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAg
aW50IGV4cHJlc3Npb24gPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhw
cmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Np
b25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBibG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7
CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9
CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFy
c2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwor
ICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0
LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigm
bWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsK
KyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJz
ZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5z
IGFmdGVyICNpZiBleHByZXNzaW9uLgorICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworaW50IERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpIHx8CisgICAgICAgICAgIChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpKTsKKworICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
KQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQ
RUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpbnQgZXhwcmVz
c2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBp
ZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAg
IH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjExNWEwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuaApAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRl
ICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCisjaW5jbHVkZSAiU291cmNlTG9jYXRp
b24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGly
ZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXplcjsKKworY2xhc3MgRGlyZWN0aXZlUGFyc2Vy
IDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5p
emVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwK
KyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAg
ICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKworICAgIHZp
cnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOworCisgICAgdm9pZCBwYXJzZURp
cmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWYo
VG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2
b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFy
c2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4p
OworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0
ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOworCisgICAgYm9vbCBza2lwcGlu
ZygpIGNvbnN0OworICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbik7Cisg
ICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7CisgICAgaW50IHBhcnNlRXhw
cmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7CisKKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxCbG9j
aworICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKKyAgICAgICAgU291cmNlTG9jYXRp
b24gbG9jYXRpb247CisgICAgICAgIGJvb2wgc2tpcEJsb2NrOworICAgICAgICBib29sIHNraXBH
cm91cDsKKyAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRF
bHNlR3JvdXA7CisKKyAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKKyAgICAgICAgICAgIHNr
aXBCbG9jayhmYWxzZSksCisgICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAorICAgICAgICAg
ICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kRWxzZUdyb3VwKGZh
bHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworICAgIHN0ZDo6dmVjdG9yPENvbmRp
dGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOworICAgIFRva2VuaXplciogbVRva2VuaXpl
cjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3Rp
Y3M7CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Cit9OworCit9ICAv
LyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElW
RV9QQVJTRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmMzNzFkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKQEAgLTAsMCArMSwxOTI4IEBACisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAqLworCisvKiBTa2VsZXRv
biBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAK
KyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYsIDIwMDktMjAx
MCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy
IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBt
YXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2Yg
dGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVu
ZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNl
bGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmll
ZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVs
eSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24g
aXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwg
ZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGlu
ZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgor
ICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMg
TEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQor
ICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4g
ICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkg
b3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMg
c2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdo
dCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29t
ZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZp
bmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBP
TgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91
dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNk
ZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKKworLyogU2tlbGV0b24gbmFtZS4gICovCisj
ZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQdXJlIHBhcnNlcnMuICAqLwor
I2RlZmluZSBZWVBVUkUgMQorCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0gg
MAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCisvKiBVc2luZyBs
b2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRo
ZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlICAgICAg
ICAgcHBwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBsZXgKKyNkZWZpbmUgeXllcnJv
ciAgICAgICAgIHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHBwbHZhbAorI2RlZmlu
ZSB5eWNoYXIgICAgICAgICAgcHBjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICBwcGRlYnVn
CisjZGVmaW5lIHl5bmVycnMgICAgICAgICBwcG5lcnJzCisKKworLyogQ29weSB0aGUgZmlyc3Qg
cGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRo
aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBF
RElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1n
ZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBh
cnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1
ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVy
LmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBlZGVm
IF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNlbHNlCisjaW5j
bHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9N
U0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNf
REVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRv
a2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitz
dGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRp
YyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKwor
CisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZ
REVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAq
LworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVm
aW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAK
KyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRP
S0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisKKy8qIFRva2Vu
cy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyog
UHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3Ro
ZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2Vu
dHlwZSB7CisgICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1BfT1IgPSAyNTksCisgICAgIE9Q
X0FORCA9IDI2MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9QX0VRID0gMjYyLAorICAgICBP
UF9HRSA9IDI2MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9QX1JJR0hUID0gMjY1LAorICAg
ICBPUF9MRUZUID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAgfTsKKyNlbmRpZgorCisKKwor
I2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0
eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVm
aW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8K
KyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworLyogQ29weSB0aGUg
c2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKworI2lmZGVmIHNob3J0
CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZ
WVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5
eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQ
RV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgor
dHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lO
VDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZk
ZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxp
ZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVm
aW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisj
ICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5z
aWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZ
U0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYg
WVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkg
ZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBp
Zm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisK
Ky8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwor
I2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUp
ICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5k
aWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv
dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQo
bikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoeXlp
KQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5aTsKK30KKyNlbmRpZgorCisj
aWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJz
ZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xz
LiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FM
TE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVp
bHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAg
IGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EK
KyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2Nh
CisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBk
ZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5kZWYgX1NURExJQl9ICisjICAg
ICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlm
CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lm
eSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19G
UkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYg
WVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5
IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBh
IHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBz
YWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBh
IHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBp
bGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVu
ZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUg
WVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisj
ICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKKyAgICAg
ICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAorCSAgICAgJiYg
KGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIF9TVERMSUJf
SAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRl
ZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAhIGRlZmluZWQg
bWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWUZSRUUK
KyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmlu
ZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3Zv
aWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAg
IGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93
IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAor
ICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwgKGRlZmluZWQgWVlTVFlQRV9J
U19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBw
cm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MK
K3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKK307
CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0
YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXpl
b2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2Ug
dG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAg
Ki8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0
eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFY
SU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3Vy
Y2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNP
UFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9t
LCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZ
KFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpF
X1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJ
ICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZ
WUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRz
IG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZ
U0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBl
bGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9m
IHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2Nh
dGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NB
VEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJ
CQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5T
dGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19h
bGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykg
KyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAo
Knl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisK
KyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24g
c3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlMQVNUIC0tIExhc3QgaW5kZXgg
aW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQorCisvKiBZWU5UT0tFTlMgLS0g
TnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgMjcKKy8qIFlZTk5U
UyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICAzCisvKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5SVUxFUyAgMjYKKy8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDUy
CisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFY
VVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWdu
ZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRP
SykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVz
cG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNs
YXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYsICAgIDE5LCAgICAxNywgICAg
IDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAg
ICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAyMgor
fTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBS
SFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAg
ICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIzLCAgICAyNywKKyAgICAgIDMx
LCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMs
ICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAg
OTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMn
IFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Cit7CisgICAgICAy
OCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAgICAtMSwgICAgMjksICAgICA0
LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5LCAgICAtMSwgICAgMjksICAg
ICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAgMjksCisgICAgICAtMSwgICAg
MjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywgICAgMjksICAgIC0xLCAgICAy
OSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAg
ICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0x
LCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxOCwgICAgMjksICAg
IC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDIxLCAgICAyOSwKKyAg
ICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwg
ICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwgICAgMjksICAgIC0xLCAgICAx
OCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAtMSwgICAgMjUsICAgIDI5LCAg
ICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBy
dWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4NywgICAgOTQsICAgIDk1LCAg
ICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAgIDExMywgICAxMTYsICAgMTE5
LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAgMTM3LCAgIDE0MCwKKyAgICAg
MTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgsICAgMTgxCit9OworI2VuZGlm
CisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZ
WVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5V
TS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMs
IG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0K
K3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJDT05TVF9JTlQiLCAiT1BfT1Ii
LCAiT1BfQU5EIiwgIid8JyIsCisgICInXiciLCAiJyYnIiwgIk9QX05FIiwgIk9QX0VRIiwgIic8
JyIsICInPiciLCAiT1BfR0UiLCAiT1BfTEUiLAorICAiT1BfUklHSFQiLCAiT1BfTEVGVCIsICIn
KyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlVOQVJZIiwgIichJyIsCisgICInfici
LCAiJygnIiwgIicpJyIsICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCAwCit9Owor
I2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRl
cm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAs
ICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwg
ICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAyNjQsICAgMjY1LCAgIDI2
NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywgICAyNjcsICAgIDMzLCAg
IDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9s
IG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOQor
fTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBo
YW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIy
W10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAg
MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OworCisvKiBZWURFRkFDVFtT
VEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKKyAgIFNU
QVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRv
LiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAgICAg
MjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAg
IDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAg
MjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAg
IDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxF
IG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZ
UEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7Cisg
ICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgMTIs
ICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAgIDI3LCAgIC0xMSwgICAg
NDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCisgICAgICA0
NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDExNiwgICAxMzAsICAgMTQz
LCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAgMzcsICAg
IDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTExCit9OworCisvKiBZWVBH
T1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9
Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRBQkxFW1lZUEFDVFtTVEFU
RS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAor
ICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5
cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZpbmUgWVlUQUJM
RV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Cit7CisgICAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisgICAgICA1MSwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNCwK
KyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxNywgICAg
MTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTksICAg
IDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMgorfTsKKworc3RhdGlj
IGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
ICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxNywgICAg
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAgMCwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5Cit9OworCisjZGVm
aW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFy
ID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisj
ZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5
eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisKKy8qIExpa2Ug
WVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9y
YXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZ
RVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVy
c2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZBSUwgYXBwZWFycyB0byBiZSBp
biB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKKyAgIGluIEJp
c29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcwor
ICAgZGlzY3Vzc2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNpZiBk
ZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJv
bSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0
IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3
ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCisgICAgIFlZRkFJTCB1
c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLworI2Vu
ZGlmCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5l
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
VAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwK
KyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRm
IChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9j
KS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2Nv
bHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2
b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgn
IHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBk
ZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5l
IFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1
Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5U
RgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBS
SU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZ
RlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJ
CQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5
bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsg
XAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJ
CQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1
ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25z
dCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3lt
Ym9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAg
ICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICgh
eXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJ
TlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0
b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOwor
IyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFr
OworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQ
cmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlw
ZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFs
dWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7Cisj
ZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0
cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3lt
Ym9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7Cisg
IFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFj
a19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0
cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVf
aW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQorI2Vsc2UKK3N0YXRpYyB2b2lk
Cit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAgIHl5dHlwZV9pbnQxNiAqeXli
b3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRpZgoreworICBZWUZQUklOVEYg
KHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90
dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJ
TlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitk
byB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQg
KChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhh
dCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZ
U1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRp
YyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlT
VFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2Vu
ZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2ln
bmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1
bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBm
b3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAo
c3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5
eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CisgICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5
eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAo
MCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVu
aW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICov
CitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYo
QXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0
aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9S
RURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERF
UFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJ
WVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFY
REVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBv
bmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4K
KworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1
bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZ
TUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBh
cml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRI
IDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5
c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAg
IGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9m
IFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0
aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNl
bmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVu
XTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYK
KyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYm
IGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlz
dHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5n
IHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoK
K3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRp
YyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAg
ICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5eWQgPSB5eWRlc3Q7Cisg
IGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAh
PSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYK
KyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250
ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVz
IGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhl
CisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxl
c3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFj
a3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRh
a2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBub3QgY29weTsgaW5z
dGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZl
IGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25z
dCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAgeworICAgICAgWVlT
SVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOworCisgICAgICBm
b3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAn
LCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAg
ICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwor
CSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQor
CSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkg
IGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJ
ICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0K
KworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1
cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29w
eSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9r
ZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUu
ICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKKyAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0
dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQorICAgY29waWVkLiAgQXMgYSBz
cGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCisgICBt
ZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJz
IGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5c3lu
dGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCit7Cisg
IGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXlu
ICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgeworICAgICAg
aW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAgWVlTSVpFX1QgeXlzaXpl
MCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6
ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5eXNpemUxOworICAgICAgaW50IHl5c2l6ZV9v
dmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9
IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElN
VU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAwCisgICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0
ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCisJIGNvbnN0cnVjdGVk
IG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMi
KTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMi
KTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVk
ICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKKyMgZW5kaWYKKyAgICAgIGNo
YXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAqeXlmOworICAgICAgc3RhdGljIGNoYXIgY29u
c3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKKyAgICAg
IHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOworICAg
ICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7CisgICAgICBjaGFyIHl5Zm9y
bWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQor
CQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQorCQkgICAgICAgKiAo
c2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVj
dGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQg
bmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNLLiAgKi8KKyAgICAgIGludCB5eXhiZWdpbiA9
IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJv
dGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFT
VCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/
IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICBpbnQgeXljb3VudCA9IDE7CisKKyAgICAg
IHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOworICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlm
b3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8
IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9
IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJH
U19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3VudCA9IDE7CisJCXl5c2l6ZSA9IHl5c2l6ZTA7
CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7CisJCWJyZWFrOwor
CSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKKwkgICAgeXlz
aXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKKwkgICAgeXlzaXpl
X292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKwkgICAgeXlzaXplID0geXlzaXplMTsK
KwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKKwkgICAgeXlwcmVmaXgg
PSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOworICAgICAgeXlzaXpl
MSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5
eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisKKyAgICAgIGlmICh5
eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0laRV9NQVhJTVVNOworCisgICAgICBpZiAoeXly
ZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhl
IHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Ig
ZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhl
IHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKwkg
IGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKKwkgICAgewor
CSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQp
CisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CisJCSAgeXlm
ICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB5eXArKzsKKwkJICB5eWYrKzsKKwkJ
fQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAgICB9Cit9CisjZW5kaWYgLyog
WVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRo
aXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBp
bnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQp
CisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5
eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZh
bHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0g
IkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwg
eXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVs
dDoKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3Np
bmctcHJvdG90eXBlcy4gICovCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0Vf
UEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFS
U0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMK
K2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsK
KyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZ
WVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2
b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2Ug
KENvbnRleHQgKmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyogVGhlIGxvb2thaGVhZCBzeW1i
b2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29r
YWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisgICAgLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKKworICAgIGludCB5eXN0
YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3Nh
Z2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFj
a3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisg
ICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVy
IHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxv
dworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhl
IHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwor
ICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAg
LyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5J
VERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAg
WVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAv
KiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJl
ci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJu
IHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGlu
ZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1
ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBj
aGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9U
IHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyNkZWZpbmUgWVlQT1BT
VEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKKworICAvKiBUaGUgbnVtYmVy
IG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRv
IHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9
IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOwor
ICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0
YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsK
KyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8g
YmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2Fz
dGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQg
dGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhl
IHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworICB5eXNzcCA9IHl5
c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdl
dCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVl
biBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8K
KyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRo
ZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICov
CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlv
dmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRo
ZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3Qg
Zm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZz
MSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKwkvKiBFYWNoIHN0YWNr
IHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRh
IGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAg
Y29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdo
dAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3Zl
cmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBz
aXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwK
KwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwor
ICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxP
Q0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5k
IHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0
YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsK
KyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1B
WERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24g
eXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlT
VEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhh
dXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFD
S19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRF
CisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9
CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5
c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAor
CQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKworICBpZiAo
eXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIGdvdG8geXliYWNrdXA7CisK
Ky8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3Vw
OgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3Rh
dGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24n
dCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQg
dG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlk
ZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFy
IDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5
eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9r
ZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtl
IHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZ
TEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAg
aWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVycmxhYjsKKyAg
ICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICAvKiBDb3Vu
dCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9y
CisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0t
OworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJ
TlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2Nh
cmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3Rh
dGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3Vy
cmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3Rh
dGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVj
ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBE
byBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJl
ZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAg
Ki8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1w
bGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4K
KworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJh
Z2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1
c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1
bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZv
aWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxp
emVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklO
VCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDI6CisKKyAgICB7
CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygx
KSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgOToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSArICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOToK
KworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5
dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgz
KV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwor
ICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNw
WygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMjQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAtICh5eXZzcFsoMikg
LSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgzKV0p
OworICAgIH0KKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2Mp
OworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKyAgLyogTm93IGBzaGlm
dCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAg
ICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5k
IHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5
bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAg
aWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVd
ID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAg
IHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3Rh
dGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJy
bGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJp
bmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3Rh
dHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAg
ICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAg
eworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIp
OworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJ
ICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAg
aWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAg
ICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXlt
c2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgewor
CQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkg
ICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2Mp
CisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hh
cik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJ
ICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlz
aXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNl
bmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAg
LyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRl
ciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlF
T0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkg
IGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsK
KwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5
eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8q
IEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRo
ZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycm9y
bGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJyb3JsYWI6
CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2
ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZv
cmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypDT05TVENP
TkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZ
RVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVy
cmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGgg
c3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgorICB5eWVy
cnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4g
ICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Cisg
ICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkg
IGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJP
UikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5
bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0
ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgICAgIGlm
ICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAgeXlkZXN0cnVjdCAoIkVycm9y
OiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgICAgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5dnNwID0geXlsdmFsOworCisK
KyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hp
ZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0geXluOwor
ICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVz
dWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlyZXN1
bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwg
WVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVz
IGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29udGV4dCwgWVlfKCJtZW1vcnkg
ZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICovCisj
ZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJIHl5dG9rZW4sICZ5eWx2
YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNs
ZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7Cisg
ICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5
c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJS
T1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVFICh5
eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJldHVy
biBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxw
LCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tl
biogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgICpsdmFscCA9IHN0
cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOworICAgICAgICB0eXBlID0gQ09O
U1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0
eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9
IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBPUF9O
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBPUF9FUTsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBPUF9HRTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9MRTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdIVDsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7IGJyZWFrOworICAgICAgY2Fz
ZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJy
ZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6
IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwor
ICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUg
PSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAg
Y2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7
IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAn
fic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFr
OworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBj
dXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+
bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAg
eworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2Uo
VG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAg
Y29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0g
bUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9
IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChy
ZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlv
biwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyZDA1
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsxLDM0IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9Q
QVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VS
X0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3Mg
RGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgRXhwcmVz
c2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4
ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNlKFRva2VuKiB0
b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBE
aWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmVmYzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLnkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNv
bnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Np
b24uCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVwcm9jZXNzb3Ig
ZXhwcmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmls
ZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQor
CisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0
ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
aW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5o
IgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNz
dHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBlZGVmIF9faW50
NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKKyNlbHNlCisjaW5jbHVkZSA8
c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9NU0NfVkVS
CisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFS
RUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0
b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKyV9CisKKyVkZWZp
bmUgYXBpLnB1cmUKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNv
bnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5
eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVy
cm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4g
Q09OU1RfSU5UCislbGVmdCBPUF9PUgorJWxlZnQgT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICde
JworJWxlZnQgJyYnCislbGVmdCBPUF9FUSBPUF9ORQorJWxlZnQgJzwnICc+JyBPUF9MRSBPUF9H
RQorJWxlZnQgT1BfTEVGVCBPUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAn
JScKKyVyaWdodCBVTkFSWQorCislJQorCitpbnB1dAorICAgIDogZXhwcmVzc2lvbiB7CisgICAg
ICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oJDEpOworICAgICAgICBZ
WUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Npb24KKyAgICA6IENPTlNUX0lOVAorICAgIHwg
ZXhwcmVzc2lvbiBPUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0FORCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSAmJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSB8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxIF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJicgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9u
IE9QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAgIH0KKyAgICB8
IGV4cHJlc3Npb24gT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7Cisg
ICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9HRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA+PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJz4nIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPCcg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAgICB9CisgICAgfCBleHByZXNz
aW9uIE9QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8
PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJScgZXhwcmVz
c2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAg
Y29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZ
X1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHBy
ZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8
PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgeworICAgICAg
ICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMgVU5BUlkgewor
ICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVU5B
UlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Npb24gJXBy
ZWMgVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7CisgICAgfQorICAgIHwgJygnIGV4cHJlc3Np
b24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cis7CisKKyUlCisKK2ludCB5eWxleChZ
WVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpbnQgdHlwZSA9IDA7CisK
KyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47CisgICAgc3dpdGNoICh0b2tl
bi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgorICAgICAg
ICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAwKTsKKyAgICAg
ICAgdHlwZSA9IENPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9PUjogdHlwZSA9IE9QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9BTkQ6IHR5cGUgPSBPUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05F
OiB0eXBlID0gT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBl
ID0gT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gT1Bf
R0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gT1BfUklHSFQ7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBPUF9MRUZUOyBicmVh
azsKKyAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0
eXBlID0gJ14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAg
ICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0g
JzwnOyBicmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNh
c2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBi
cmVhazsKKyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyon
OiB0eXBlID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsK
KyAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBl
ID0gJygnOyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAg
ICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0
b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29u
dGV4dC0+bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5
eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNT
SU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKwor
bmFtZXNwYWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhl
ciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciks
CisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25Q
YXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBj
b250ZXh0OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29u
dGV4dC5sZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29u
dGV4dC5yZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOwor
ICAgIHN3aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAg
ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAg
ICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IHJldCA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcAppbmRleCA2OTRjM2JkLi5jM2RlOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIKIAotI2luY2x1
ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFtZXNw
YWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQpLAotICAgICAg
bVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAgbUluZGV4KC0x
KSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAotICAgICAgbVN0
YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygw
KQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7
CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAgbUNv
dW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQobUluZGV4IDw9
IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNzZXJ0KG1Db3Vu
dCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/IGxl
bmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3RybGVu
KG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVhZChjaGFyKiBi
dWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUp
CiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1JbmRleDsKLSAg
ICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50
IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3RhcnRJbmRleCkg
JiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3aGlsZSAoKG5S
ZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAgICAgewotICAg
ICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkKLSAgICAgICAg
ICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgaW50IHNpemUg
PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNp
emUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFk
LCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAg
ICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKKwor
ICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVu
dCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0aFttUmVhZExv
Yy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBrU3RhdGVJbml0aWFsOgotICAg
ICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBlZWtDaGFy
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAg
ICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVhdCAnLycuCi0gICAgICAgICAgICAgICAg
ICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAgICAgICBnZXRD
aGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVC
bG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90IGEgY29tbWVudC4KLSAgICAg
ICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVMaW5lQ29tbWVudDoKLSAgICAg
ICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVm
W25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVJbml0aWFsOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0
ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiAocGVla0NoYXIoKSA9
PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldENoYXIoKTsgICAvLyBF
YXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9ICcgJzsgIC8vIFJlcGxhY2Ug
Y29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRl
SW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtzIGFyZSBuZXZlciBza2lwcGVkLgotICAg
ICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK21SZWFkTG9jLnNJbmRleDsKKyAg
ICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBy
ZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0Q2hhcigpCi17Ci0gICAgaWYgKGVvZigp
KSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciogc3RyID0gbVN0cmluZ1ttSW5kZXhdOwot
ICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAgLy8gU3dpdGNoIHRvIG5leHQgc3RyaW5n
IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFkLgotICAgIGludCBsZW5ndGggPSBzdHJp
bmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZlciByZWFkIGZyb20gZW1wdHkgc3RyaW5n
LgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAgaWYgKCgobGVuZ3RoIDwgMCkgJiYgKHN0
clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgobGVuZ3RoID4gMCkgJiYgKG1TaXplID09
IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLQotICAgIHJldHVybiBj
OwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsKLSAgICAvLyBTYXZlIHRoZSBjdXJyZW50
IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0gbUluZGV4OwotICAgIGludCBzaXplID0g
bVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0KLSAgICAvLyBSZXN0b3JlIHJlYWQgcG9z
aXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAgbVNpemUgPSBzaXplOwotICAgIHJldHVy
biBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05leHRTdHJpbmcoKQotewotICAgIEFTU0VS
VChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUgPSAwOwotICAgIGRvCi0gICAgewotICAg
ICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9mKCkgJiYgaXNTdHJpbmdFbXB0eShtSW5k
ZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpCi17Ci0gICAg
QVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdb
bUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgcmV0
dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAwKSAmJiAoc3RyWzBdID09ICdcMCcpKTsK
LX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50IGluZGV4KQotewotICAgIEFTU0VSVChp
bmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5ndGggPyBtTGVuZ3RoW2luZGV4XSA6IC0x
OworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvSW5wdXQuaAppbmRleCA1YTFiNWQxLi5kYWM3MzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmgKQEAgLTcsNjYgKzcsNDAgQEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogCisjaW5j
bHVkZSA8dmVjdG9yPgorCiBuYW1lc3BhY2UgcHAKIHsKIAotLy8gUmVhZHMgdGhlIGdpdmVuIHNl
dCBvZiBzdHJpbmdzIGludG8gaW5wdXQgYnVmZmVyLgotLy8gU3RyaXBzIGNvbW1lbnRzLgorLy8g
SG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KIGNsYXNzIElucHV0CiB7CiAgIHB1Ymxp
YzoKKyAgICBJbnB1dCgpOwogICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICBlbnVtIEVycm9yCi0gICAgewot
ICAgICAgICBrRXJyb3JOb25lLAotICAgICAgICBrRXJyb3JVbmV4cGVjdGVkRU9GCi0gICAgfTsK
LSAgICBFcnJvciBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1FcnJvcjsgfQotCi0gICAgLy8gUmV0
dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGlu
dCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsKKyAgICBpbnQg
Y291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmco
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAgIGludCBsZW5n
dGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQogCi0gICAgLy8g
UmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFyYWN0ZXJzIGludG8gYnVmLgotICAgIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCi0gICAgLy8gSXQgcmVwbGFjZXMgZWFjaCBj
b21tZW50IGJ5IGEgd2hpdGVzcGFjZS4gSXQgcmVhZHMgb25seSBvbmUgc3RyaW5nCi0gICAgLy8g
YXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxleGVyIGhhcyBvcHBvcnR1bml0eSB0byB1cGRhdGUgdGhl
IHN0cmluZyBudW1iZXIKLSAgICAvLyBmb3IgbWVhbmluZ2Z1bCBkaWFnbm9zdGljIG1lc3NhZ2Vz
LgotICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpOworICAgIGludCByZWFkKGNo
YXIqIGJ1ZiwgaW50IG1heFNpemUpOwogCi1wcml2YXRlOgotICAgIGVudW0gU3RhdGUKKyAgICBz
dHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0gICAgICAgIGtTdGF0ZUluaXRpYWwsCi0gICAgICAgIGtT
dGF0ZUxpbmVDb21tZW50LAotICAgICAgICBrU3RhdGVCbG9ja0NvbW1lbnQKLSAgICB9OworICAg
ICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAgICAgICBpbnQgY0luZGV4OyAg
Ly8gQ2hhciBpbmRleC4KIAotICAgIGludCBnZXRDaGFyKCk7Ci0gICAgaW50IHBlZWtDaGFyKCk7
Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQgYnVmZmVyIHRvIHRoZSBuZXh0IG5vbi1lbXB0eSBzdHJp
bmcuCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCBzdHJpbmcgaXMgZnVs
bHkgcmVhZC4KLSAgICB2b2lkIHN3aXRjaFRvTmV4dFN0cmluZygpOwotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGVtcHR5LgotICAgIGJvb2wgaXNTdHJpbmdFbXB0
eShpbnQgaW5kZXgpOwotICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBzdHJp
bmcuCi0gICAgLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGZvciBudWxsLXRlcm1pbmF0ZWQg
c3RyaW5ncy4KLSAgICBpbnQgc3RyaW5nTGVuZ3RoKGludCBpbmRleCk7CisgICAgICAgIExvY2F0
aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9OworICAgIGNvbnN0IExvY2F0
aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KIAorICBwcml2YXRlOgog
ICAgIC8vIElucHV0LgogICAgIGludCBtQ291bnQ7CiAgICAgY29uc3QgY2hhciogY29uc3QqIG1T
dHJpbmc7Ci0gICAgY29uc3QgaW50KiBtTGVuZ3RoOwotCi0gICAgLy8gQ3VycmVudCByZWFkIHBv
c2l0aW9uLgotICAgIGludCBtSW5kZXg7ICAgLy8gSW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBtU2l6ZTsgICAgLy8gU2l6ZSBvZiBzdHJpbmcgYWxyZWFk
eSBzY2FubmVkLgorICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKIAotICAgIC8vIEN1cnJl
bnQgZXJyb3IgYW5kIHN0YXRlLgotICAgIEVycm9yIG1FcnJvcjsKLSAgICBTdGF0ZSBtU3RhdGU7
CisgICAgTG9jYXRpb24gbVJlYWRMb2M7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK0xl
eGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbjsK
KworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkxleGVyKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNw
YWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyby5jcHAKaW5kZXggZmNjY2E5Ni4uYjJlMzA4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm8uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmNwcApAQCAtNiwzOSArNiwxNyBAQAogCiAjaW5jbHVkZSAiTWFj
cm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgInN0bF91dGlscy5oIgor
I2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1NYWNybzo6TWFjcm8oVHlw
ZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiByZXBsYWNl
bWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1lKG5hbWUpLAotICAgICAgbVBh
cmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1lbnRzKHJlcGxhY2VtZW50cykK
LXsKLX0KLQotTWFjcm86On5NYWNybygpCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8m
IG90aGVyKSBjb25zdAogewotICAgIGRlbGV0ZSBtTmFtZTsKLQotICAgIGlmIChtUGFyYW1ldGVy
cykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFtZXRlcnMtPmJlZ2luKCksIG1Q
YXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVBhcmFtZXRlcnM7
Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAgewotICAgICAgICBzdGQ6OmZv
cl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNlbWVudHMtPmVuZCgpLCBEZWxl
dGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwotICAgIH0KKyAgICByZXR1cm4g
KHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFtZSkg
JiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKKyAgICAg
ICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCmluZGV4IGUyNDMzMDYuLjdlYzAx
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDM4IEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
SF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9y
PgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgot
CiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVjdCBUb2tlbjsKKworc3RydWN0
IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAgICB7CiAgICAgICAgIGtUeXBl
T2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4g
UmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmluZWQoZmFsc2UpLCBkaXNhYmxl
ZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IE1hY3Jv
JiBvdGhlcikgY29uc3Q7CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcG9pbnRlciBwYXJh
bWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBzdGQ6OnN0cmluZyogbmFt
ZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICBUb2tlblZl
Y3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2VuVmVjdG9yKiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBjb25zdCBUb2tlblZlY3Rv
ciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2VtZW50czsgfQotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvKTsKLQotICAgIFR5cGUg
bVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2VuVmVjdG9yKiBtUGFyYW1l
dGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAgICBib29sIHByZWRlZmlu
ZWQ7CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAgVHlwZSB0eXBlOworICAgIHN0
ZDo6c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIFJlcGxhY2Vt
ZW50cyByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcs
IE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU0ZDQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwzNjkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHBwCit7
CisKK2NsYXNzIFRva2VuTGV4ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyBwdWJsaWM6CisgICAgdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gVG9rZW5WZWN0b3I7CisKKyAgICBUb2tlbkxleGVyKFRv
a2VuVmVjdG9yKiB0b2tlbnMpCisgICAgeworICAgICAgICB0b2tlbnMtPnN3YXAobVRva2Vucyk7
CisgICAgICAgIG1JdGVyID0gbVRva2Vucy5iZWdpbigpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgaWYgKG1JdGVyID09IG1Ub2tl
bnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuLT5yZXNldCgpOworICAgICAg
ICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6TEFTVDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgICp0b2tlbiA9ICptSXRlcisrOworICAgICAgICB9Cisg
ICAgfQorCisgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5M
ZXhlcik7CisKKyAgICBUb2tlblZlY3RvciBtVG9rZW5zOworICAgIFRva2VuVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBtSXRlcjsKK307CisKK01hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4
ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9T
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGlj
cykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBt
RGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK01hY3JvRXhwYW5kZXI6On5NYWNyb0V4
cGFuZGVyKCkKK3sKKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkgcG9wTWFjcm8o
KTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHdo
aWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4odG9rZW4pOworCisgICAgICAgIGlm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGlmICh0b2tlbi0+ZXhwYW5zaW9uRGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0
LT5maW5kKHRva2VuLT52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1NYWNyb1NldC0+ZW5k
KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25zdCBNYWNybyYgbWFjcm8gPSBp
dGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBhbmRlZCwgaXQgaXMg
bmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5zaW9uRGlzYWJsZWQo
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1hY3Jv
LnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVmdFBhcmVuKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0
aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAgICAvLyB0aGlzIG1hY3JvIHNo
b3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9F
eHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAgIGlmIChtUmVzZXJ2ZVRva2Vu
LmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9rZW47CisgICAgICAg
IG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisgICAgd2hpbGUgKCFtQ29udGV4
dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5KCkpCisgICAgewor
ICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5iYWNrKCktPmdldCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Cisg
ICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRv
a2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAg
TWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgICAgIGNv
bnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5pbmRleCA+PSAwKTsKKyAg
ICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9r
ZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9r
ZW4uZ2V0KCkpOworICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikp
OworICAgIH0KK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigp
Cit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgIGJvb2wg
bHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7CisgICAgdW5nZXRUb2tlbih0b2tlbik7CisKKyAg
ICByZXR1cm4gbHBhcmVuOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25z
dCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKQoreworICAgIGFzc2VydCgh
bWFjcm8uZGlzYWJsZWQpOworICAgIGFzc2VydCghaWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxl
ZCgpKTsKKyAgICBhc3NlcnQoaWRlbnRpZmllci50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsK
KyAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9PSBtYWNyby5uYW1lKTsKKworICAgIHN0ZDo6
dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisgICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywg
aWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9m
ZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVlOworCisgICAgTWFjcm9Db250
ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKKyAgICBjb250ZXh0LT5tYWNybyA9ICZt
YWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOworICAg
IG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKK3sKKyAgICBhc3NlcnQoIW1Db250ZXh0
U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0
YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICBhc3NlcnQo
Y29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7
CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7CisgICAgZGVsZXRlIGNvbnRl
eHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+
KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOworICAgIGlmICht
YWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50
cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOworCisgICAgICAgIGlmIChtYWNy
by5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0xpbmUgPSAiX19MSU5FX18iOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKKworICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2Vt
ZW50cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVu
dHMtPmZyb250KCk7CisgICAgICAgICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAg
ICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24ubGluZTsKKyAgICAgICAg
ICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICAgICAgc3Ry
ZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmlsZTsKKyAgICAgICAgICAgICAgICByZXBsLnZh
bHVlID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1
bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJnczsKKyAgICAgICAgYXJncy5y
ZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0TWFj
cm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVu
dHMpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRzLT5z
aXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5h
dChpKTsKKyAgICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGluaGVyaXRzIHRoZSBwYWRkaW5n
CisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRva2VuLgorICAg
ICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFydE9mTGluZSgp
KTsKKyAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZpZXIuaGFzTGVh
ZGluZ1NwYWNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlcGwubG9jYXRpb24gPSBpZGVudGlm
aWVyLmxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYWNyb0V4
cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFy
Z3MpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKyAgICBhc3Nl
cnQodG9rZW4udHlwZSA9PSAnKCcpOworCisgICAgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkp
OworICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7ICkKKyAgICB7
CisgICAgICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFs
dWUpOworICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRva2VuLgorICAgICAgICAgICAg
dW5nZXRUb2tlbih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBv
ZiB0aGUgY3VycmVudCBhcmd1bWVudC4KKyAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICArK29wZW5QYXJlbnM7Cisg
ICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlICcpJzoKKyAgICAgICAgICAgIC0tb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0g
b3BlblBhcmVucyAhPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnLCc6
CisgICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBi
eSBjb21tYSB0b2tlbnMsIGJ1dAorICAgICAgICAgICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3
ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAorICAgICAgICAgICAgLy8gc2Vw
ZXJhdGUgYXJndW1lbnRzLgorICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+
cHVzaF9iYWNrKE1hY3JvQXJnKCkpOworICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzQXJnKQorICAgICAgICB7CisgICAgICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFj
aygpOworICAgICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRo
ZSBhcmd1bWVudC4KKyAgICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVh
ZGluZ1NwYWNlKGZhbHNlKTsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAg
ICAgICB9CisgICAgfQorCisgICAgY29uc3QgTWFjcm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1h
Y3JvLnBhcmFtZXRlcnM7CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1l
bnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCisgICAgaWYgKHBhcmFtcy5lbXB0
eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0eSgpKQorICAg
IHsKKyAgICAgICAgYXJncy0+Y2xlYXIoKTsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgdGhlIG51
bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFj
cm8ucGFyYW1ldGVycy5zaXplKCkgPworICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RP
T19GRVdfQVJHUyA6CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJH
UzsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24s
IGlkZW50aWZpZXIudmFsdWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCisgICAgLy8g
VGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkg
YXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgTWFjcm9Bcmcm
IGFyZyA9IGFyZ3MtPmF0KGkpOworICAgICAgICBUb2tlbkxleGVyIGxleGVyKCZhcmcpOworICAg
ICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3Rp
Y3MpOworCisgICAgICAgIGFyZy5jbGVhcigpOworICAgICAgICBleHBhbmRlci5sZXgoJnRva2Vu
KTsKKyAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAgICAgICAgICAgZXhwYW5kZXIu
bGV4KCZ0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNbaV07CisgICAgICAgIGlmIChy
ZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
cGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1pemUgdGhpcy4KKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1l
LgorICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBs
YWNlbWVudCB0b2tlbi4KKyAgICAgICAgTWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCks
IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudmFsdWUpOworICAgICAgICBpZiAoaXRlciA9
PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNl
bWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMu
YmVnaW4oKSwgaXRlcik7CisgICAgICAgIGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBhcmdzW2lBcmdd
OworICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpUmVwbCA9IHJlcGxhY2VtZW50cy0+c2l6
ZSgpOworICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBsYWNlbWVudHMtPmVuZCgpLCBh
cmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKKyAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHRva2Vu
IGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCisgICAgICAgIC8vIG1hY3JvIHJlcGxh
Y2VtZW50IHRva2VuLgorICAgICAgICByZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5zZXRIYXNMZWFk
aW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgfQorfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDRlYmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmgKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisjZGVmaW5lIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIK
KyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25v
c3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGlj
OgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigpOwor
CisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgdm9pZCBn
ZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tlbiYg
dG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAgIGJvb2wgcHVz
aE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOworICAg
IHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29sIGNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhjb25z
dCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNyb0NvbnRleHQK
KyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc2l6ZV90IGluZGV4
OworICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworCisgICAgICAgIE1h
Y3JvQ29udGV4dCgpIDogbWFjcm8oMCksIGluZGV4KDApIHsgfQorICAgICAgICBib29sIGVtcHR5
KCkgY29uc3QgeyByZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsgfQorICAgICAg
ICBjb25zdCBUb2tlbiYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4KytdOyB9Cisg
ICAgICAgIHZvaWQgdW5nZXQoKSB7IC0taW5kZXg7IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1M
ZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0
ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVS
X0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCmluZGV4IGVm
NDllNTcuLjIxOTAxZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29y
LmNwcApAQCAtNiw0NyArNiwxMDggQEAKIAogI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgogCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVh
bT4KIAotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgot
I2luY2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVk
ZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNy
b0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
IAogbmFtZXNwYWNlIHBwCiB7CiAKLVByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKCkgOiBtQ29u
dGV4dChOVUxMKQorc3RydWN0IFByZXByb2Nlc3NvckltcGwKIHsKKyAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9TZXQ7CisgICAgVG9rZW5pemVyIHRva2Vu
aXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFyc2VyOworICAgIE1hY3JvRXhw
YW5kZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXByb2Nlc3NvckltcGwoRGlhZ25vc3RpY3Mq
IGRpYWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAorICAgICAgICB0b2tlbml6ZXIo
ZGlhZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5pemVyLCAmbWFjcm9TZXQsIGRp
YWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBtYWNyb0V4cGFuZGVyKCZkaXJlY3RpdmVQ
YXJzZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7CisgICAgfQorfTsKKworUHJlcHJvY2Vzc29y
OjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikKK3sKKyAgICBt
SW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNzLCBkaXJlY3RpdmVIYW5kbGVy
KTsKIH0KIAogUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKIHsKLSAgICBkZWxldGUgbUNv
bnRleHQ7CisgICAgZGVsZXRlIG1JbXBsOwogfQogCi1ib29sIFByZXByb2Nlc3Nvcjo6aW5pdCgp
Citib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBsZW5ndGhbXSkKIHsKLSAgICBtQ29udGV4dCA9IG5ldyBDb250ZXh0OwotICAg
IHJldHVybiBtQ29udGV4dC0+aW5pdCgpOworICAgIHN0YXRpYyBjb25zdCBpbnQga0dMU0xWZXJz
aW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0YW5kYXJkIHByZS1kZWZpbmVkIG1hY3Jvcy4KKyAg
ICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19G
SUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19WRVJTSU9OX18iLCBrR0xTTFZlcnNp
b24pOworICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOworCisgICAgcmV0dXJuIG1JbXBs
LT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQogCi1ib29sIFByZXBy
b2Nlc3Nvcjo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGludCBsZW5ndGhbXSkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyhjb25z
dCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChz
dHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgIHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUg
PSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOwogCi0g
ICAgcmVzZXQoKTsKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1
ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBu
YW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOwogCi0gICAgcmV0
dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgJm1Ub2tlbnMpOwor
ICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nlc3Nv
cjo6cmVzZXQoKQordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7Ci0gICAg
c3RkOjpmb3JfZWFjaChtVG9rZW5zLmJlZ2luKCksIG1Ub2tlbnMuZW5kKCksIERlbGV0ZSgpKTsK
LSAgICBtVG9rZW5zLmNsZWFyKCk7CisgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7CisgICAg
d2hpbGUgKCF2YWxpZFRva2VuKQorICAgIHsKKyAgICAgICAgbUltcGwtPm1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5nIGludGVybmFsIHByZXByb2Nlc3Np
bmcgdG9rZW5zLgorICAgICAgICAgIC8vIENvbnZlcnQgcHJlcHJvY2Vzc2luZyB0b2tlbnMgdG8g
Y29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAorICAgICAgICAgIC8vIGRpYWdub3N0aWNzLgorICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAg
ICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
TlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFsaWRUb2tlbiA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCmluZGV4
IDg4NWJiNzAuLjVmZTM1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oCkBAIC03LDM0ICs3LDQxIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9I
XwogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgor
I2luY2x1ZGUgInBwX3V0aWxzLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBDb250ZXh0
OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOworc3RydWN0IFBy
ZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47CiAKIGNsYXNzIFByZXByb2Nlc3Nvcgogewog
ICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7CisgICAgUHJlcHJvY2Vzc29yKERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CiAg
ICAgflByZXByb2Nlc3NvcigpOwogCi0gICAgYm9vbCBpbml0KCk7Ci0KLSAgICBib29sIHByb2Nl
c3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKLSAgICBUb2tlbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5i
ZWdpbigpOyB9Ci0gICAgVG9rZW5JdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtVG9rZW5z
LmVuZCgpOyB9CisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBzcGVjaWZp
ZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6IHNwZWNp
ZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGggaXMgTlVM
TCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgLy8g
SWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8gYW4gYXJy
YXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0aGUgY29y
cmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50IGluIHRo
ZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLyBjb3Jy
ZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRlIHRoYXQg
dGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGluaXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsK
KyAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCisgICAgdm9pZCBwcmVkZWZpbmVNYWNy
byhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOworCisgICAgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9j
ZXNzb3IpOwotCi0gICAgLy8gUmVzZXQgdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCi0gICAgdm9pZCBy
ZXNldCgpOworICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOwog
Ci0gICAgQ29udGV4dCogbUNvbnRleHQ7Ci0gICAgVG9rZW5WZWN0b3IgbVRva2VuczsgIC8vIE91
dHB1dC4KKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKIH07CiAKIH0gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJj
ZUxvY2F0aW9uLmgKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmlsZSgwKSwgbGlu
ZSgwKSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmlsZShmKSwgbGlu
ZShsKSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxlKSAmJiAobGlu
ZSA9PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBpbnQgbGluZTsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywg
Y29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMs
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJo
cyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKaW5k
ZXggYTJlNzU5Yy4uOTYwMzgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApAQCAt
Niw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5
cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4g
Yml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRp
b25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRv
a2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNl
dCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYg
a0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBs
b2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9p
ZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmls
ZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAg
aWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5l
KSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBv
dGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAg
ICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVl
ID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBp
bnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwK
LSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0
QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxh
Z3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9T
VEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7
Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAo
c3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRF
eHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBG
TE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoo
dG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
b3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAi
ICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8v
IG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oCmluZGV4IDRmNWExMmIuLjUyMzEwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApA
QCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8K
ICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3Ry
ZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVz
cGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAg
ICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRp
b24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihM
b2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKKyAgICBlbnVtIFR5cGUKKyAgICB7
CisgICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9m
IHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBsb2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3Ry
aW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7CisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCiAK
LSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAg
IGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmlu
ZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKyAgICAgICAgQ09OU1RfSU5ULAor
ICAgICAgICBDT05TVF9GTE9BVCwKIAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUb2tlbik7CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAg
ICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9Q
X0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAg
ICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAg
ICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1Bf
RElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJ
R04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAg
ICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAogCi0gICAgTG9jYXRp
b24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOwor
ICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgorICAgICAgICAvLyBUaGVzZSB0
eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCisgICAgICAgIC8v
IFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBmb3IgdGhlbS4K
KyAgICAgICAgUFBfSEFTSCwKKyAgICAgICAgUFBfTlVNQkVSLAorICAgICAgICBQUF9PVEhFUgor
ICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0ZfTElORSAg
ID0gMSA8PCAwLAorICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEsCisgICAgICAg
IEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgorICAgIH07CisKKyAgICBUb2tlbigpIDogdHlw
ZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxl
YWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVy
biAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0YXJ0
T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7
IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQgc2V0
SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgYm9vbCBleHBhbnNpb25EaXNhYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkgIT0gMDsgfQor
ICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKKworICAgIGludCB0
eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlv
bjsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9r
ZW4qPiBUb2tlblZlY3RvcjsKLXR5cGVkZWYgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIFRv
a2VuSXRlcmF0b3I7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2VuJiBsaHMsIGNv
bnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQor
eworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQogCiBleHRlcm4gc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pOwogCiB9
ICAvLyBuYW1lcHNhY2UgcHAKICNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
X0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmE4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwCkBAIC0wLDAgKzEsMjM0NSBAQAorI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNl
ci5zaC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9Ub2tlbml6ZXIuY3BwIgorCisj
ZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIg
Z2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlf
RkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNk
ZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9W
RVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVh
bCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICov
CisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0
eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRf
SAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1h
eSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19T
VERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENf
TElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0
aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBf
X1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlm
CisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0
eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZf
dDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4
X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxzZQordHlwZWRl
ZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZf
dDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4
X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5
cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBDOTkgKi8KKwor
LyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmlu
ZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01J
TgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lm
bmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2
NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAg
ICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01B
WCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmlu
ZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJ
TlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisj
aWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVV
KQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAg
ICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisK
KyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlm
aWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisj
ZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAq
LworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKyNlbHNlCisj
ZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAq
LworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwg
cG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVzZSBh
cyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAqIHdl
IHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5j
ZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5z
aWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICov
CisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252
ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBh
cmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWct
Pnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWct
Pnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQg
eXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVi
dWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91
Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3Rpbmcg
Y3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2Yg
QkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKKworLyog
VHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBi
ZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUg
WVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CisgKiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5l
IFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9T
VEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0
YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsg
c3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5n
IGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlz
Y2FubmVyICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9m
IGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2RlZmluZSBZ
WV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJn
ZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZm
ZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikg
KiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJf
U1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKK3R5cGVkZWYgc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2VuZGlmCisKKyNkZWZpbmUgRU9C
X0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVm
aW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4p
CisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVy
cyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
KwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
ID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVG
T1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICgg
MCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlz
Y2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBF
REVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNpZm5k
ZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVS
X1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7
CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZf
cG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUg
b2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAq
IGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVy
IG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkg
KiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAi
b3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBj
YW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICog
ZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0
aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYg
d2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQor
CSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5w
dXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZl
OworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcg
b2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5l
eHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisg
ICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlf
YnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0
byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5k
IG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3Rh
dHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFM
IDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRl
eHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5E
SU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20g
dGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1
bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUg
YmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNo
YW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQg
dGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWlu
IGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElO
RyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8q
IFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGlu
IHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9y
ZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9m
IHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNl
ZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9y
IHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2Rl
ZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFU
RSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3ZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHBvcF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfbG9hZF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfaW5pdF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFy
ICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0
ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxsb2MgKHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9z
aXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVy
CisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJ
aWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsg
XAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsg
XAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwK
KyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9s
OyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHBwd3JhcChu
KSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9D
SEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5dGV4dF9wdHIg
eXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJh
bnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Citz
dGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0
aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1h
dGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5
eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRf
cHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5
eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5
X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKKyNkZWZpbmUgWVlf
RU5EX09GX0JVRkZFUiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2Fu
bmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1Y3QgeXlfdHJh
bnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50MzJfdCB5eV9u
eHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbODRdID0KKyAg
ICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAzNiwgICAzNCwg
ICAzNSwgICAzNSwgICAzMywKKyAgICAgICAgNywgICAzMywgICAzMywgICAzMywgICAzMywgICAz
MywgICAzMywgICAzMywgICAzMywgICAgOSwKKyAgICAgICAgOSwgICAzMywgICAzMywgICAzMywg
ICAgOCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKKyAgICAgICAgNCwgICAzNCwgICAz
NSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKKyAgICAgICAxMywg
ICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwgICAxMSwKKyAg
ICAgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAxNSwgICAgOCwg
ICAzMSwKKyAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwgICAxMSwgICAx
MCwgICAxMSwgICAgMSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAxMCwgICAgMAorICAgIH0gOwor
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIs
ICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAg
IDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCisgICAgICAgIDksICAgMTAsICAgMTEs
ICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAg
MTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCisgICAg
ICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAg
MjEsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjQsICAgMjMsICAgMjMsCisgICAgICAgIDksICAgIDEsICAgIDksICAgMjUsICAgMjMs
ICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAgICAyMiwgICAyMSwgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKKyAgICAg
ICAyMywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAg
IDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAg
ICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1OSwgIDE0NSwg
IDEyOCwKKyAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwgICAyNSwgICAz
MCwgICAyOSwgICAzNiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAgMCwgICAxNiwg
ICA0NywgICAgMCwgIDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3MywgIDE1OSwgIDE1OSwgIDE1
OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAgIDE1OSwgIDE1OSwgICA2MSwg
IDE1OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKKyAgICAgICA5NSwgICA2
OCwgICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1OSwKKyAgICAg
IDE1OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwgIDExMCwgICAg
MCwKKyAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1OSwgIDEwMSwg
ICA5NywgIDExMiwKKyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwgIDE0NSwgIDE1
MCwgIDE1MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzg5
XSA9CisgICAgeyAgIDAsCisgICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgMjAsICAgODMsICAgODMs
ICAgODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCisgICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAsICAgMjAsICAg
NDcsCisgICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsICAg
NDMsICAgNDMsICAgNjcsICAgODcsCisgICAgICAgNDcsICAgNTAsICAgODMsICAgNTEsICAgODgs
ICAgODMsICAgODMsICAgODMsICAgNjksICAgNzIsCisgICAgICAgODMsICAgODMsICAgIDAsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgNiwgICAgNywgICAg
OCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKKyAgICAgICAxNiwg
ICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAg
ICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAzMCwgICAyOSwg
ICAzMCwKKyAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwgICA0MSwgICA3
NywgICA0NCwgICA0MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0MywgICA0Mywg
ICA0MywgICA0NiwgICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0OCwgICA0OSwgICA1NCwgICA1
NSwgICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAgICA1MywgICA1MywgICA1Mywg
ICA1NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKKyAgICAgICA0OSwgICA0
OSwgICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1MCwKKyAgICAg
ICA1MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwgICA3MSwgICA3
MSwKKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1MCwgICA1MCwg
ICA1MCwgICA1MCwKKworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDczLCAg
IDczLCAgIDgzLCAgIDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDY3LCAgIDY3LCAgIDY3
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAgIDc4LCAgIDc4LCAgIDgzLCAg
IDgzLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAorICAgICAgIDM1LCAgIDgw
LCAgIDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAg
IDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAgIDY0LCAgIDY0
LAorICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1LCAgIDgzLCAg
ICA1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMTg2
XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCisgICAgICAgMTMsICAg
MTYsICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAgMTYsCisgICAg
ICAgMjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjAsICAg
NTQsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAgMjAsICAgMjAs
ICAgMjAsICAgMjAsCisgICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsICAgMjcsICAg
NzMsICAgNzMsICAgNzMsICAgMjEsCisgICAgICAgNDksICAgNDksICAgMjcsICAgNDMsICAgMzIs
ICAgNDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCisgICAgICAgNTIsICAgNDMsICAgNDMsICAg
NDMsICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCisgICAgICAgNTIsICAgNTIs
ICAgNzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAg
ICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwgICA3OSwgICA1
MSwKKyAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3OCwgICA3OCwg
ICAyMywgICA2NywKKyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwgICA2OSwgICA2
OSwgICA3MiwgICA3MiwgICAxNSwKKyAgICAgICAxMiwgICA3MiwgICA3MiwgICA3MiwgICA4MSwg
ICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKKyAgICAgICA4NywgICAgNywg
ICA4NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywKKyAgICAgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCisv
KiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAor
ICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJF
SkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9y
ZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZ
WV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNz
b3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBH
cmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5
LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2Vu
ZXJhdGVfcGFyc2VyLnNoLgorKi8KKworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dO
VUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3Ig
ZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3Jl
dHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUgQ09NTUVOVCAx
CisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0KgorCisvKiBI
b2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVj
dCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkg
ZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0
IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFu
dCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNp
emVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAg
IFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJh
eS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFyczsKKyAgICBp
bnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAg
ICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAg
ICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsK
KyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGlu
dCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRl
eHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAg
IFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07
IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVz
ZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0
cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9y
CisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBw
cGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZ
WV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vz
c29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9u
LXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0
cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBw
cGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4dCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
Cit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJh
bSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2lu
dCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlv
biAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRl
cm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5
Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vu
ZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNo
IHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNo
ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2Vk
IHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVM
J3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndyaXRlKCB5
eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0
dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVM
TCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcq
JzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAg
ICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1
ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAo
Y2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlf
RkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3Vs
dCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICgg
KHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlp
bikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlf
RkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJl
YWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9
IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBj
b3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qg
d2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNh
dXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0
ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkg
cmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBz
dGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lO
Q1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBh
IGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRB
TF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKwor
LyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8K
KworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5l
IHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVm
IFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCBwcGxleCBc
CisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9j
X3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4
IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXls
bG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisK
Ky8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5
dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VT
RVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVj
dXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZp
bmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZ
WV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2Vz
IGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUg
eXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lz
dGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAgICB5eWx2YWwg
PSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisKKwlpZiAoICF5
eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRlZiBZWV9VU0VS
X0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYg
KCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91
dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQlwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJ
fQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisKKwl3aGlsZSAo
IDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9j
ID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
CQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxh
YmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICgg
eXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6
IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNl
IDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVudCAqLworLyog
TGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKy8qIFRoZSBj
b21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2UgMjoKK1lZX1JV
TEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVM
RV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFL
CitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyAr
K3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCVlZ
X0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlk
IGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/
IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZWV9CUkVBSwor
Y2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZX0JSRUFLCisv
KiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJl
IGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQg
ZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQor
CVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVB
SworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSwor
Y2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FE
RF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2Fz
ZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxF
X1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2Fz
ZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAg
ICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdc
bic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsK
K30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRF
X0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBm
b3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBt
YW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQg
c0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2Nh
bkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5
IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8v
IGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsg
c2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGlu
ZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9j
LT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NU
QVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5
eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAorRUNI
TzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3Vu
dCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAq
LworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmls
ZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVu
ZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291
cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFz
c3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3Vy
CisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1
c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBh
CisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNl
LgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZv
ciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0Ig
aW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBi
ZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBz
dGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIg
c3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJ
CSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJ
ICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19z
dGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24n
dCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5n
IChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1
c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5
X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2Fu
bmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJ
aWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLwor
CQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7
CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2Un
dmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxm
KSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUK
KwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlf
TlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRF
X0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJ
Z290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0t
bm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAv
KiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxleCAqLworCisv
KiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisg
KiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNU
X01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZy
b20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxl
CisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJcmVn
aXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWct
Pnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3Qg
dHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7
CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAq
IHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VO
RF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0
ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJ
CQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVh
ZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2Yg
YnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5
Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsg
KytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQor
CQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4g
RU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJewor
CQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAw
ICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwor
CisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJ
CVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1
Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7
CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWludCBuZXdfc2l6
ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWIt
Pnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkv
KiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZv
aWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJ
fQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJ
CQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9G
QVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JF
QURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAo
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJ
CQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlp
ZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09
IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJ
CXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0K
KwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYg
KCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBu
ZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9j
aGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hh
ciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9
IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZp
b3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJl
YWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3Vy
cmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdp
c3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0g
OiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJ
eworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
KwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwly
ZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0
byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lz
CisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICov
CisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBp
bnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBv
cHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0
YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0g
eXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19q
YW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lm
ZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisj
ZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
KQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdh
bnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJh
Y3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhp
dCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
KwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAn
XDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQlpbnQgb2Zmc2V0
ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVm
X3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJ
CXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJl
Y2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQor
CQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRj
aGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0
KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNv
IGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9P
Rl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJ
CQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKwor
CQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5
eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2Nw
bHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UKKwkJCQkJcmV0
dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25l
ZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJ
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJ
LyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBub3Rl
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJ
TklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Cisg
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5j
dGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJcHBw
dXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVy
ICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCisJ
LyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJp
bmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlz
IGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBp
dCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2xv
YWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hh
cnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRf
cHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJ
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2NhdGUg
YW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXpl
IGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVG
RkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZl
cigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0
byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAq
IHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWIt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisKKwly
ZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVm
ZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQor
CQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBp
ZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQlwcGZy
ZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJlZSgodm9pZCAq
KSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBh
IGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4g
b25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgp
IG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVG
RkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworeworCWlu
dCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKwor
CWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAg
IC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBf
cHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9n
ZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJl
c2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJF
TlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlf
YnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQg
Y2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCisg
KiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlf
Q1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9j
aGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1
ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4K
KwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZi
LT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5l
dyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1
cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBp
ZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9t
IHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsK
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1c2gg
aWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVO
VF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0
ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVu
dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlwcF9kZWxldGVf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0t
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJ
CXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0
IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBw
dXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55eV9idWZmZXJf
c3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMs
IHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVk
IGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlh
dGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9j
ID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
KwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAx
KXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUg
cHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsK
KworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJl
YWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVy
KTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJ
CS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9z
dGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51
bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisg
KiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNp
emUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChj
aGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZ
X0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6
ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZv
ciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBw
YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlm
ICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBf
c2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIi
IHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYg
PSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAw
OworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2
ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlwcF9zd2l0Y2hfdG9fYnVmZmVy
KGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4gcHBfc2Nhbl9i
eXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworfQorCisvKiogU2V0dXAgdGhl
IGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2Fs
bCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisg
KiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhl
IG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1
ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxs
IGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5
Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwor
CWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsg
KytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVm
W195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSBwcF9zY2Fu
X2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8g
Z3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3
aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1
cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlM
VVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
KiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRl
cnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Cit9CisKKy8qIFJl
ZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLworCisjdW5k
ZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFj
cm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcp
O1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFy
ID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5
eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKy8qIEFj
Y2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICov
CisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworWVlfRVhUUkFfVFlQRSBw
cGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5ZXh0cmE7
Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisv
KiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQorCisvKiogR2V0
IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJl
dHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X291dCAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitjaGFyICpwcGdl
dF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQor
CisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNo
ZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNl
cl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9k
ZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJh
bSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBi
dWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAg
ICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOworfQor
CisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfY29s
dW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAg
LyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJv
ciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisg
ICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0
cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIu
CisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKKyAqLwor
dm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3Ry
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91dF9zdHIgOworfQorCitp
bnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9m
bGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9CisKKy8qIEFj
Y2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisKK1lZU1RZUEUgKiBwcGdl
dF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsdmFsOworfQor
Cit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9CisKK1lZTFRZUEUgKnBw
Z2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxsb2M7Cit9
CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Cit9CisgICAgCisv
KiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNl
IGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworICogdGhlIE9OTFkgcmVl
bnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0
IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFy
YXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLworCitpbnQgcHBsZXhfaW5p
dCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMg
PT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2Yo
IHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09
IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0
X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRy
X3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4g
eXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHBwbGV4X2luaXRf
ZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxv
d3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBh
cmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEg
c2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlz
IHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMg
b3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0
IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJh
IGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNl
cl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwg
JmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAg
ICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisJCisgICAgKnB0
cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRz
X3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cisg
ICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgorICAgIHl5
X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0
KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAg
ICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworICAgIAor
ICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworc3Rh
dGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgLyog
SW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5u
ZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCks
IHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5eWctPnl5X2J1ZmZlcl9z
dGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKyAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7
CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0ID0gMDsKKworICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRo
ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisKKy8qIERlZmluZWQgaW4g
bWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsKKyAgICB5eW91
dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAgeXlvdXQgPSAo
RklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVy
cm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogcHBsZXhfaW5pdCgp
CisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJv
dGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLworaW50IHBwbGV4X2Rl
c3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogUG9wIHRoZSBidWZmZXIg
c3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVG
RkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBwcG9wX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwlw
cGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJf
c3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNr
LiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Cisg
ICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGds
b2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRo
ZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2ls
bCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CisKKyAgICAvKiBE
ZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLworICAgIHBwZnJlZSAo
IHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0
dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNp
Zm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwg
eXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsK
K30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9z
dHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0
ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJldHVybiBuOwor
fQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQg
KnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29t
bW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMg
cG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMu
ICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBD
KysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0
byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3Vn
aCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAo
Y2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBwcHJlYWxs
b2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5
dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0
aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAg
ZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlm
IChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmlu
ZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lk
IFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29s
dW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisg
ICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRM
aW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5kbGUpOwor
fQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0b2tlbi0+dHlw
ZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAgICB0
b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQu
bGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4n
OworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2Up
OworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29sIFRva2VuaXpl
cjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiBwcGxleF9p
bml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRv
a2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisg
ICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRs
ZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGEyODgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUgIklucHV0Lmgi
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6IHB1YmxpYyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7CisgICAgICAgIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsKKyAgICAgICAg
Ly8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxvY2F0aW9uIHNo
b3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6Om1SZWFkTG9j
IGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlmIHRleHQgaXMg
YnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAgICBJbnB1dDo6
TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsKKyAgICAgICAg
Ym9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAg
dm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50
IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9v
bCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQq
IG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8g
U2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxYzczMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCkBAIC0wLDAgKzEsMzI5IEBACisvKgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3Ig
R0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAy
MDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11
cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2Vy
LnNoLiBETyBOT1QgRURJVCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2lu
Y2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQo
X19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vy
cm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRl
ZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1
bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5Zmls
ZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwK
KyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxl
bm8gPSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAg
ICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOwor
CisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJ
bnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9j
OyAgICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5j
b3VudCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0lu
ZGV4ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0lu
ZGV4KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2Mt
PmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlf
SU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1
dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyV9CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBu
ZXZlci1pbnRlcmFjdGl2ZQorJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxv
Y2F0aW9ucworJW9wdGlvbiBwcmVmaXg9InBwIgorJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6VG9r
ZW5pemVyOjpDb250ZXh0KiIKKyV4IENPTU1FTlQKKworTkVXTElORSAgICAgXG58XHJ8XHJcbgor
SURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgorUFVOQ1RVQVRPUiAgW11bPD4oKXt9
ListLyolXnwmfj0hOjssP10KKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCitP
Q1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgorSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhd
WzAtOWEtZkEtRl0rCisKK0RJR0lUICAgICAgICAgICAgICAgIFswLTldCitFWFBPTkVOVF9QQVJU
ICAgICAgICBbZUVdWystXT97RElHSVR9KworRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0q
Ii4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKworJSUKKworICAgIC8qIExpbmUgY29tbWVudCAq
LworIi8vIlteXHJcbl0qCisKKyAgICAvKiBCbG9jayBjb21tZW50ICovCisgICAgLyogTGluZSBi
cmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKyAgICAvKiBUaGUgY29t
bWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCisiLyoiIHsgQkVHSU4oQ09N
TUVOVCk7IH0KKzxDT01NRU5UPlteKlxyXG5dKworPENPTU1FTlQ+IioiCis8Q09NTUVOVD57TkVX
TElORX0geyArK3l5bGluZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsKKyAgICB5eWV4dHJhLT5sZWFk
aW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCisjIHsKKyAgICAvLyAj
IGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZXMuCisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRy
YS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsK
K30KKwore0lERU5USUZJRVJ9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwore0RFQ0lNQUxfQ09OU1RB
TlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lO
VDsKK30KKworKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9
e0VYUE9ORU5UX1BBUlR9PykgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKworICAgIC8qIEFueXRoaW5n
IHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIu
ICovCisgICAgLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRz
LiAqLworKHtESUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16QS1aMC05Ll0q
KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46OlBQX05VTUJFUjsKK30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9ERUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30K
KyI8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9F
UTsKK30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfWE9SOworfQorInx8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJ
R047Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNT
SUdOOworfQorIi89IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FT
U0lHTjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJ
R0hUX0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X1hPUl9BU1NJR047Cit9CisifD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRP
Un0geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4
dFswXTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsg
fQorCit7TkVXTElORX0geworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
J1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisKKy4geworICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKKzwqPjw8
RU9GPj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGlu
ZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5Lgor
ICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpM
b2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXgg
PSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5k
ZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVy
ZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRo
ZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5j
SW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOwor
ICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5
eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09N
TUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRl
KCk7Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sK
KyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7Cisg
ICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAo
c3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0
KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisK
K3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAgIC8vIFdlIHVz
ZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVu
by4KKyAgICB5eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFu
ZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9r
ZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxl
KTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUo
bUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlw
ZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFk
aW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29s
IFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAm
JiB5eWxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYgKG1IYW5kbGUg
PT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeXlsZXhfZGVzdHJveShtSGFuZGxlKTsK
KyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAppbmRleCA1YjMyZjcxLi5lOWM3
MGIxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCkBA
IC0xLDI3ICsxLDI2IEBACiAjIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAotIyBHZW5lcmF0
ZXMgR0xTTCBFUyBwcmVwcm9jZXNzb3IgLSBwcF9sZXguY3BwLCBwcF90YWIuaCwgYW5kIHBwX3Rh
Yi5jcHAKKyMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KIAogcnVuX2ZsZXgoKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS5sCi1vdXRw
dXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX2xleC5jcHAKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
JDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0
ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0KIAogcnVuX2Jpc29uKCkK
IHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0X2hlYWRlcj0kc2NyaXB0X2Rp
ci8kMV90YWIuaAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV90YWIuY3BwCi1iaXNvbiAt
LW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hlYWRlciAtLW91
dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8k
MQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgorYmlzb24gLS1uby1saW5lcyAtLXNrZWxl
dG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBzY3Jp
cHRfZGlyPSQoZGlybmFtZSAkMCkKIAogIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IKLXJ1bl9mbGV4
IHBwCi1ydW5fYmlzb24gcHAKK3J1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKK3J1
bl9iaXNvbiBFeHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcC5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdjYTA0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwLmwKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdM
U0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAx
MCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMv
bGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNP
IE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSV0b3B7Ci0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi19Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNp
bmNsdWRlICJDb250ZXh0LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5
eWxpbmVubzsgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVt
biArIDE7ICBcCi0gICAgICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNp
emUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAg
ICAKLXN0YXRpYyBzdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIs
IGludCBsZW4pOwotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0
aXZlCi0lb3B0aW9uIHl5bGluZW5vIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCi0lb3B0aW9uIHN0YWNrCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9uIGV4dHJhLXR5
cGU9InBwOjpDb250ZXh0KiIKLQotSFNQQUNFICAgICAgWyBcdF0KLUhBU0ggICAgICAgIF57SFNQ
QUNFfSoje0hTUEFDRX0qCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1QVU5D
VFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5UICAg
ICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1B
TF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAgWzAt
OV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFMX0NP
TlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi17SEFT
SH0geyByZXR1cm4gSEFTSDsgfQotCi17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0v
WyBcdFxuXSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0KLXtIQVNIfWRlZmluZXtIU1BB
Q0V9K3tJREVOVElGSUVSfS8iKCIgewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05h
bWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9GVU5DOwotfQote0hB
U0h9dW5kZWZ7SFNQQUNFfSsgeyByZXR1cm4gSEFTSF9VTkRFRjsgfQotCi17SEFTSH1pZiB7IHJl
dHVybiBIQVNIX0lGOyB9Ci17SEFTSH1pZmRlZiB7IHJldHVybiBIQVNIX0lGREVGOyB9Ci17SEFT
SH1pZm5kZWYgeyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLXtIQVNIfWVsc2UgeyByZXR1cm4gSEFT
SF9FTFNFOyB9Ci17SEFTSH1lbGlmIHsgcmV0dXJuIEhBU0hfRUxJRjsgfQote0hBU0h9ZW5kaWYg
eyByZXR1cm4gSEFTSF9FTkRJRjsgfQotImRlZmluZWQiIHsgcmV0dXJuIERFRklORUQ7IH0KLQot
e0hBU0h9ZXJyb3IgeyByZXR1cm4gSEFTSF9FUlJPUjsgfQote0hBU0h9cHJhZ21hIHsgcmV0dXJu
IEhBU0hfUFJBR01BOyB9Ci17SEFTSH1leHRlbnNpb24geyByZXR1cm4gSEFTSF9FWFRFTlNJT047
IH0KLXtIQVNIfXZlcnNpb24geyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci17SEFTSH1saW5lIHsg
cmV0dXJuIEhBU0hfTElORTsgfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+c3ZhbCA9
IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7
Ci19Ci0KLXtERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9D
T05TVEFOVH0gewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLQotKHtESUdJVH0re0VYUE9ORU5U
X1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9PykgewotICAgIHl5
bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IEZMT0FUX0NPTlNUQU5UOwotfQotCi17UFVOQ1RVQVRPUn0geyByZXR1cm4geXl0ZXh0WzBdOyB9
Ci0KLVsgXHRcdlxmXSsgeyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci0KLVxuIHsKLSAgICAr
K3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLQotPCo+
PDxFT0Y+PiAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0KLSUlCi0KLXN0ZDo6c3RyaW5nKiBleHRy
YWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBUaGUgaW5w
dXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVS
fQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAgICBBU1NF
UlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsKLQotICAg
IHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+
PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChzdHJbaV0g
PT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpzdHJpbmco
c3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotbmFtZXNw
YWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhTaXpl
KQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQtPmVvZigp
ICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JOb25l
KSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAgICBpbnQg
bGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0aW9uKHl5
Z2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0gbUlucHV0
LT5zdHJpbmdJbmRleCgpOwotICAgICAgICB5eXNldF9saW5lbm8ocHA6OlRva2VuOjplbmNvZGVM
b2NhdGlvbihsaW5lLCBmaWxlKSwgbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+
cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6
OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
cmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAoeXlsZXhfaW5pdF9leHRyYSh0aGlzLCAmbUxleGVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeXlyZXN0YXJ0KDAsIG1MZXhlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAgICBB
U1NFUlQobUxleGVyKTsKLQotICAgIHl5bGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4ZXIg
PSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTkzYWIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQorKysg
L2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmls
ZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJh
c2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6
Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAot
Ci1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9n
bHNsX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIuCi0qLwot
Ci0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBn
ZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250
ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZ
WURFQlVHIDEKLSV9Ci0KLSVwdXJlLXBhcnNlcgotJW5hbWUtcHJlZml4PSJwcCIKLSVsb2NhdGlv
bnMKLSVwYXJzZS1wYXJhbSB7cHA6OkNvbnRleHQqIGNvbnRleHR9Ci0KLSV1bmlvbiB7Ci0gICAg
aW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwot
ICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0KLSV7Ci1leHRlcm4gaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIpOwotc3RhdGljIHZvaWQg
eXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAgICAgcHA6OkNvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLXN0
YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29s
IGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0KTsKLSV9Ci0KLSV0b2tlbiBIQVNIIEhBU0hfVU5ERUYKLSV0b2tlbiBIQVNIX0lG
IEhBU0hfSUZERUYgSEFTSF9JRk5ERUYgSEFTSF9FTFNFIEhBU0hfRUxJRiBIQVNIX0VORElGIERF
RklORUQKLSV0b2tlbiBIQVNIX0VSUk9SIEhBU0hfUFJBR01BIEhBU0hfRVhURU5TSU9OIEhBU0hf
VkVSU0lPTiBIQVNIX0xJTkUKLSV0b2tlbiA8c3ZhbD4gSEFTSF9ERUZJTkVfT0JKIEhBU0hfREVG
SU5FX0ZVTkMKLSV0b2tlbiA8c3ZhbD4gSU5UX0NPTlNUQU5UIEZMT0FUX0NPTlNUQU5UIElERU5U
SUZJRVIKLSV0eXBlIDxpdmFsPiBvcGVyYXRvcgotJXR5cGUgPHR2YWw+IGNvbmRpdGlvbmFsX3Rv
a2VuIHRva2VuCi0ldHlwZSA8dGxpc3Q+IHBhcmFtZXRlcl9saXN0IHJlcGxhY2VtZW50X2xpc3Qg
Y29uZGl0aW9uYWxfbGlzdCB0b2tlbl9saXN0Ci0lJQotCi1pbnB1dAotICAgIDogLyogZW1wdHkg
Ki8KLSAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZQotICAgIDogdGV4dF9saW5lCi0gICAgfCBj
b250cm9sX2xpbmUKLTsKLQotdGV4dF9saW5lCi0gICAgOiAnXG4nCi0gICAgfCB0b2tlbl9saXN0
ICdcbicgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAg
cHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5p
bnNlcnQob3V0LT5lbmQoKSwgJDEtPmJlZ2luKCksICQxLT5lbmQoKSk7Ci0gICAgICAgIGRlbGV0
ZSAkMTsKLSAgICB9Ci07Ci0KLWNvbnRyb2xfbGluZQotICAgIDogSEFTSCAnXG4nCi0gICAgfCBI
QVNIX0RFRklORV9PQkogcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+
ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwgJDEsIE5VTEws
ICQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0RFRklORV9GVU5DICcoJyBwYXJhbWV0ZXJfbGlzdCAn
KScgcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8o
QDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICQxLCAkMywgJDUpOwotICAgIH0K
LSAgICB8IEhBU0hfVU5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgY29udGV4dC0+dW5k
ZWZpbmVNYWNybygkMik7Ci0gICAgfQotICAgIHwgSEFTSF9JRiBjb25kaXRpb25hbF9saXN0ICdc
bicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAkMiA/IHRydWUgOiBm
YWxzZSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAg
ICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgk
MikpOwotICAgIH0KLSAgICB8IEhBU0hfSUZOREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAg
IHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5lZCgk
MikpOwotICAgIH0KLSAgICB8IEhBU0hfRUxJRiBjb25kaXRpb25hbF9saXN0ICdcbicgewotICAg
IH0KLSAgICB8IEhBU0hfRUxTRSAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VORElGICdcbicg
ewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIH0KLSAgICB8IEhB
U0hfRVJST1IgJ1xuJwotICAgIHwgSEFTSF9QUkFHTUEgJ1xuJwotICAgIHwgSEFTSF9FWFRFTlNJ
T04gJ1xuJwotICAgIHwgSEFTSF9WRVJTSU9OICdcbicKLSAgICB8IEhBU0hfTElORSAnXG4nCi07
Ci0KLXJlcGxhY2VtZW50X2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0g
ICAgfCB0b2tlbl9saXN0Ci0KLXBhcmFtZXRlcl9saXN0Ci0gICAgOiAvKiBlbXB0eSAqLyB7ICQk
ID0gTlVMTDsgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xp
bmUsIElERU5USUZJRVIsICQxKSk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX2xpc3QgJywnIElE
RU5USUZJRVIgewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBw
cDo6VG9rZW4oQDMuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDMpKTsKLSAgICB9Ci0KLWNvbmRp
dGlvbmFsX2xpc3QKLSAgICA6IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAg
fCBjb25kaXRpb25hbF9saXN0IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi10b2tlbl9saXN0Ci0gICAg
OiB0b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQt
PnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgdG9rZW5fbGlzdCB0b2tlbiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAgIH0KLTsKLQotY29uZGl0
aW9uYWxfdG9rZW4KLSAgICA6IERFRklORUQgSURFTlRJRklFUiB7Ci0gICAgfQotICAgIHwgREVG
SU5FRCAnKCcgSURFTlRJRklFUiAnKScgewotICAgIH0KLSAgICB8IHRva2VuCi07Ci0KLXRva2Vu
Ci0gICAgOiBvcGVyYXRvciB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9s
aW5lLCAkMSwgTlVMTCk7Ci0gICAgfQotICAgIHwgSU5UX0NPTlNUQU5UIHsKLSAgICAgICAgJCQg
PSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgJDEpOwotICAgIH0K
LSAgICB8IEZMT0FUX0NPTlNUQU5UIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZp
cnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgSURFTlRJRklFUiB7
Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAk
MSk7Ci0gICAgfQotOwotCi1vcGVyYXRvcgotICAgIDogJ1snIHsgJCQgPSAnWyc7IH0KLSAgICB8
ICddJyB7ICQkID0gJ10nOyB9Ci0gICAgfCAnPCcgeyAkJCA9ICc8JzsgfQotICAgIHwgJz4nIHsg
JCQgPSAnPic7IH0KLSAgICB8ICcoJyB7ICQkID0gJygnOyB9Ci0gICAgfCAnKScgeyAkJCA9ICcp
JzsgfQotICAgIHwgJ3snIHsgJCQgPSAneyc7IH0KLSAgICB8ICd9JyB7ICQkID0gJ30nOyB9Ci0g
ICAgfCAnLicgeyAkJCA9ICcuJzsgfQotICAgIHwgJysnIHsgJCQgPSAnKyc7IH0KLSAgICB8ICct
JyB7ICQkID0gJy0nOyB9Ci0gICAgfCAnLycgeyAkJCA9ICcvJzsgfQotICAgIHwgJyonIHsgJCQg
PSAnKic7IH0KLSAgICB8ICclJyB7ICQkID0gJyUnOyB9Ci0gICAgfCAnXicgeyAkJCA9ICdeJzsg
fQotICAgIHwgJ3wnIHsgJCQgPSAnfCc7IH0KLSAgICB8ICcmJyB7ICQkID0gJyYnOyB9Ci0gICAg
fCAnficgeyAkJCA9ICd+JzsgfQotICAgIHwgJz0nIHsgJCQgPSAnPSc7IH0KLSAgICB8ICchJyB7
ICQkID0gJyEnOyB9Ci0gICAgfCAnOicgeyAkJCA9ICc6JzsgfQotICAgIHwgJzsnIHsgJCQgPSAn
Oyc7IH0KLSAgICB8ICcsJyB7ICQkID0gJywnOyB9Ci0gICAgfCAnPycgeyAkJCA9ICc/JzsgfQot
OwotCi0lJQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxv
Y2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBv
cENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFj
ZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICBy
ZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNw
YWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MTdlN2NjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMjY4ICswLDAgQEAKLSNsaW5lIDE2ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLmwiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwIgotCi0jZGVmaW5lICBZWV9JTlRfQUxJR05F
RCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8K
LQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIK
LSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5P
Ul9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAotI2RlZmluZSBG
TEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVj
aWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0KLS8qIGJlZ2luIHN0YW5kYXJk
IEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIGVuZCBzdGFuZGFy
ZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCi0K
LSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAotCi0vKiBDOTkgc3lzdGVtcyBo
YXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLwotCi0j
aWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5
MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBp
bmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1h
Y3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0j
ZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxpbnR0eXBl
cy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgZmxleF91
aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgdWludDE2X3Qg
ZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVp
bnQzMl90IGZsZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2lu
dDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgaW50IGZsZXhf
aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IGZs
ZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9mIGludGVncmFs
IHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAg
ICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJTlQxNl9NSU4g
ICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NSU4KLSNkZWZp
bmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRpZgotI2lmbmRl
ZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jZW5kaWYK
LSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3
KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAg
ICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2RlZmluZSBVSU5U
OF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9NQVgKLSNk
ZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0jaWZuZGVmIFVJ
TlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCi0j
ZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
Ci0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLwotI2Rl
ZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UgICAvKiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5
OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAo
X19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbmRpZiAgLyogZGVmaW5lZCAo
X19TVERDX18pICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VT
RV9DT05TVAotI2RlZmluZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0j
ZW5kaWYKLQotLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVM
TCAwCi0KLS8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBj
aGFyIHRvIGFuIHVuc2lnbmVkCi0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXgu
ICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQg
dHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUg
Y2FzdC4KLSAqLwotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2ln
bmVkIGNoYXIpIGMpCi0KLS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NDQU5ORVJfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRl
ZiB2b2lkKiB5eXNjYW5fdDsKLSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZh
cnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUg
cmVlbnRyYW50IHNjYW5uZXIuICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUg
eXlvdXQgeXlnLT55eW91dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZp
bmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNk
ZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQot
I2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4p
Ci0jZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIg
YSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFy
YW1ldGVyLAotICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2Vk
IG9uIHVzIGJ5IHRoZSAoKS1sZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVm
aW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3Vy
cmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0g
KiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMg
Zm9yIGxleAotICogY29tcGF0aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+
eXlfc3RhcnQgLSAxKSAvIDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9u
IG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUg
WVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyog
U3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8K
LSNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZp
bmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1
ZmZlci4gKi8KLSNpZm5kZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQK
LSNlbmRpZgotCi0vKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQg
b25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5l
IFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRl
X3R5cGUpKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZ
X1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUg
KllZX0JVRkZFUl9TVEFURTsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xBU1Rf
TUFUQ0ggMgotCi0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9y
IHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0gICAgICogICAgICAg
YWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVzcygpIGlzIGEg
bWFjcm8sIGl0IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhh
dCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSBwcGxleC4gCi0gICAgICogICAgICAgT25lIG9i
dmlvdXMgc29sdXRpb24gaXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJpZWQgdGhhdCwg
YW5kIHNhdwotICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGlu
ZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlfYWN0IGlzCi0gICAgICogICAgICAgbm9ybWFsbHkgZGVj
bGFyZWQgYXMgYSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBpdC4KLSAg
ICAgKi8KLSAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAgICAgICBkbyB7
IFwKLSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKLSAgICAgICAgICAgICAgICBmb3IgKCB5eWwg
PSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgIGlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztc
Ci0gICAgICAgICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJz
dCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNk
ZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRv
IGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19t
YWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2Fy
Zyk7XAotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3Ag
PSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAgICAgICBZWV9E
T19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAgICAgICAgfSBc
Ci0gICAgd2hpbGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5
dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0j
ZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0j
ZW5kaWYKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAgICB7Ci0gICAg
RklMRSAqeXlfaW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAgICAgIC8qIGlu
cHV0IGJ1ZmZlciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1cnJlbnQgcG9z
aXRpb24gaW4gaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBp
biBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgot
ICAgICAqLwotICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQotICAgIC8qIE51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0gICAgICog
Y2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBpbnQgeXlfbl9jaGFyczsKLQotICAgIC8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLSAg
ICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBp
dCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfb3VyX2J1ZmZl
cjsKLQotICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJj
ZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhl
biB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1h
a2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5l
LgotICAgICAqLwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotICAgIC8qIFdoZXRoZXIg
d2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLSAgICAg
KiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhl
cndpc2UKLSAgICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5X2F0X2JvbDsKLQotICAgIGlu
dCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCi0gICAgaW50IHl5X2JzX2Nv
bHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwotICAgIAotICAgIC8qIFdoZXRoZXIgdG8g
dHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAgICAqIGVu
ZCBvZiBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZmZXI7Ci0KLSAgICBpbnQgeXlf
YnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKLSNkZWZpbmUgWVlfQlVG
RkVSX05PUk1BTCAxCi0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mg
c3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZl
ciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4n
dCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAot
ICAgICAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVj
YXVzZSBvZgotICAgICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVu
IHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3Igot
ICAgICAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBz
Y2FubmluZyBieQotICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxl
LgotICAgICAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0gICAgfTsKLSNl
bmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBwcm92aWRlIG1h
Y3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKLSAqIGZ1dHVy
ZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAotICog
InNjYW5uZXIgc3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9y
IE5VTEwuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9z
dGFjayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tb
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDog
TlVMTCkKLQotLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtu
b3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQg
YW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcF0KLQotdm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1
ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1
ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBw
X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVm
ZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSBZ
WV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5u
ZXIpCi0KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXpl
X3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9z
dHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi0jZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgotCi0jZGVmaW5lIHl5
X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotICAgIHsgXAotICAgIGlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApeyBcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAg
ICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwK
LSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9Ci0KLSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wp
IFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCi0gICAgICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KLQotI2RlZmluZSBZWV9BVF9CT0wo
KSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0KLS8qIEJlZ2luIHVzZXIg
c2VjdDMgKi8KLQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmluZSBZWV9TS0lQX1lZV1JBUAot
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRlZiBpbnQgeXlfc3RhdGVf
dHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3Rh
dGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29u
c3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8qIERvbmUgYWZ0ZXIgdGhl
IGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCi0gKiBjb3Jy
ZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0jZGVmaW5lIFlZX0RPX0JF
Rk9SRV9BQ1RJT04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0gICAgeXlsZW5n
ID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAq
eXlfY3A7IFwKLSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55eV9jX2J1Zl9wID0geXlf
Y3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDIzCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIg
MjQKLS8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBp
dHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLSAgICB7
Ci0gICAgZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4X2ludDMyX3QgeXlfbnh0Owot
ICAgIH07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzEwNV0gPQotICAg
IHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDIzLCAgIDIxLCAgIDIyLCAgIDIwLCAg
IDIwLCAgIDE4LCAgIDE4LAotICAgICAgIDE3LCAgIDE3LCAgIDIxLCAgICAxLCAgIDIxLCAgIDE5
LCAgIDE5LCAgIDE4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgIDE4LCAgIDE3LCAgIDE3LCAg
IDIxLCAgICAxLCAgICAxLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgIDE5LCAgIDE4LCAgIDE3LCAgICAwLAotICAgICAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICA1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAg
ICAgIDE5LCAgIDE3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAgICA5LCAgICA4
LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDE2LCAgICAwLCAgICAwLCAg
ICAwLCAgIDE3LCAgICAwLCAgIDEwLAotICAgICAgIDEyLCAgICAwLCAgICA2LCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgIDExLCAgICAwLCAgICAwLAotICAgICAgICA3LCAgIDEzLCAgICA0LCAg
ICAwLCAgICAwLCAgICAwLCAgIDE1LCAgICAwLCAgICAwLCAgICAyLAotCi0gICAgICAgIDMsICAg
IDAsICAgMTQsICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X2VjWzI1Nl0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA1LCAgICA1LCAgICAxLCAgICA3
LAotICAgICAgICA1LCAgICA1LCAgICA4LCAgICA1LCAgICA4LCAgICA5LCAgICA1LCAgIDEwLCAg
IDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDEyLCAgIDEy
LCAgICA1LCAgICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDE0LCAgIDEzLAotICAgICAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1
LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LAotICAgICAgIDE1LCAgIDE1LCAg
IDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE2LCAgIDE1LCAgIDE1LAotICAgICAgICA1
LCAgICAxLCAgICA1LCAgICA1LCAgIDE1LCAgICAxLCAgIDE3LCAgIDEzLCAgIDEzLCAgIDE4LAot
Ci0gICAgICAgMTksICAgMjAsICAgMjEsICAgMTUsICAgMjIsICAgMTUsICAgMTUsICAgMjMsICAg
MjQsICAgMjUsCi0gICAgICAgMjYsICAgMjcsICAgMTUsICAgMjgsICAgMjksICAgMzAsICAgMzEs
ICAgMzIsICAgMTUsICAgMzMsCi0gICAgICAgMTUsICAgMTUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszNF0gPQot
ICAgIHsgICAwLAotICAgICAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAz
LCAgICAxLCAgICAxLCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICA1LCAgICA2LCAgICA3LCAg
ICA3LCAgICA1LCAgICA1LCAgICA2LCAgICA1LAotICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3
LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3LCAgICA3LCAg
ICA3Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExMV0g
PQotICAgIHsgICAwLAotICAgICAgICAwLCAgIDE4LCAgMTg0LCAgMTg1LCAgIDExLCAgMTg1LCAg
MTg1LCAgIDIxLCAgIDI4LCAgIDUzLAotICAgICAgICAwLCAgMTY0LCAgIDM5LCAgIDcxLCAgIDEy
LCAgIDMyLCAgIDM0LCAgICAxLCAgIDM5LCAgIDQ0LAotICAgICAgICAwLCAgICAwLCAgICAwLCAg
MTYyLCAgIDY0LCAgICAwLCAgICAwLCAgMTYyLCAgIDQ2LCAgMTYwLAotICAgICAgMTU3LCAgMTUw
LCAgMTUyLCAgMTU3LCAgIDcwLCAgIDQ3LCAgIDY1LCAgICAwLCAgMTUzLCAgMTU0LAotICAgICAg
IDYyLCAgMTU1LCAgMTQ0LCAgMTQxLCAgIDY3LCAgMTQ1LCAgMTUyLCAgMTUwLCAgMTM5LCAgIDc2
LAotICAgICAgIDg1LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ0LCAgMTQwLCAgMTM1LCAgMTQxLCAg
MTQwLCAgMTQwLAotICAgICAgMTM4LCAgMTM1LCAgMTM2LCAgMTI1LCAgMTM0LCAgMTI3LCAgMTg1
LCAgMTg1LCAgMTMxLCAgMTIyLAotICAgICAgMTI0LCAgMTI4LCAgMTI4LCAgMTg1LCAgMTIyLCAg
MTI1LCAgMTIyLCAgMTI1LCAgMTIzLCAgMTg1LAotICAgICAgMTg1LCAgMTEyLCAgMTg1LCAgMTIw
LCAgMTEzLCAgMTI3LCAgIDk3LCAgICAwLCAgMTA3LCAgIDg2LAotICAgICAgMTg1LCAgMTg1LCAg
MTA1LCAgIDc2LCAgIDgxLCAgIDM0LCAgMTg1LCAgIDk3LCAgIDEwLCAgMTg1LAotCi0gICAgICAx
ODUsICAxMDMsICAxODUsICAxODUsICAxMTAsICAxMTQsICAxMTgsICAxMjEsICAxMjYsICAxMzIK
LSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTFdID0KLSAg
ICB7ICAgMCwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNiwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NywgIDEwNywgICAgOSwgICAxOCwgIDEwNCwKLSAgICAgIDEwOCwgICAxMCwgIDEwNiwgIDEwNiwg
IDEwNCwgICAxNCwgICAxNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwOCwgIDEwNiwgIDEwNCwKLSAgICAgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwOSwgIDEwNCwgIDEwNCwgIDExMCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAg
MTEwLCAgMTA0LCAgICAwLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAg
fSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjE5XSA9Ci0gICAgeyAg
IDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDQsICAgIDcsICAgIDcs
ICAgIDgsICAgIDksCi0gICAgICAgMTAsICAgMTAsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAx
MDQsICAgMTIsICAgIDQsICAgMTMsCi0gICAgICAgIDYsICAgIDUsICAgIDcsICAgMTQsICAgIDcs
ICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTAsCi0gICAgICAgMTYsICAgMTYsICAgMTYsICAx
MDQsICAxMDMsICAgMTIsICAgMTcsICAgMTgsICAgMTgsICAgMTksCi0gICAgICAgMjUsICAgMjAs
ICAgMTUsICAgMjEsICAgMjYsICAgMzUsICAgMjAsICAgMzUsICAgMTksICAgMTksCi0gICAgICAg
MzUsICAgMzYsICAgMzUsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgOTks
Ci0gICAgICAgMjEsICAgMTcsICAgMjIsICAgMjIsICAgMjIsICAgMjUsICAgMjAsICAgMTUsICAg
NDEsICAgMjYsCi0gICAgICAgNDIsICAgMjAsICAgMjcsICAgNDMsICAgMzcsICAgMzcsICAgMzcs
ICAgNTAsICAgNDQsICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAgOTUsICAgNTQsICAgNTksICAg
NTEsICAgNTEsICAgNTEsICAgMjgsICAgMjksCi0gICAgICAgNTUsICAgNjAsICAgMzAsICAgMzEs
ICAgNTEsICAgNTEsICAgNTEsICAgMzIsICAxMDAsICAxMDAsCi0KLSAgICAgICA5NywgICAzMywg
ICAzNCwgIDEwMSwgIDEwMCwgIDEwMCwgICA5MywgICA5NiwgICA5NSwgIDEwMSwKLSAgICAgICAx
MSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAyMywgICAyMywgICAyMywK
LSAgICAgICAyMywgICAxNiwgICA5NCwgICAxNiwgICAzOCwgICAzOCwgICAzOCwgICA5OCwgICA5
MywgICA5MiwKLSAgICAgICA5OCwgICA5OCwgICA5OCwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwg
IDEwMiwgIDEwMiwgICA5MSwKLSAgICAgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwgICA4
NSwgICA4NCwgICA4MywgICA4MiwgICA4MSwKLSAgICAgICA4MCwgICA3OSwgICA3OCwgICA3Nywg
ICA3NiwgICA3NSwgICA3NCwgICA3MywgICA3MiwgICA3MSwKLSAgICAgICA3MCwgICA2OSwgICA2
OCwgICA2NywgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwKLSAgICAgICA1OCwg
ICA1NywgICA1NiwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0NywgICA0NiwgICA0NSwKLSAg
ICAgICA0MCwgICAzOSwgICAyNCwgIDEwNCwgICAgMywgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDUsICAgMTUsICAgIDUsICAgMTUsICAgMTgsICAgIDEsICAgIDIsICAgIDIsCi0gICAgICAg
IDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIs
Ci0gICAgICAgIDgsICAgIDgsICAgIDgsICAgMTgsICAgOTksICAgIDIsICAgIDksICAgIDksICAg
IDksICAgIDksCi0gICAgICAgMTMsICAgIDksICAgMTMsICAgIDksICAgMTMsICAgMTYsICAgIDks
ICAgMTcsICAgMTksICAgMTksCi0gICAgICAgMTYsICAgMjAsICAgMTcsICAgMjAsICAgMjAsICAg
MjAsICAgMzYsICAgMzYsICAgMzYsICAgOTYsCi0gICAgICAgIDksICAgMTAsICAgMTAsICAgMTAs
ICAgMTAsICAgMjUsICAgMTAsICAgMjUsICAgMjksICAgMjUsCi0gICAgICAgMjksICAgMTAsICAg
MTQsICAgMjksICAgMzcsICAgMzcsICAgMzcsICAgMzUsICAgMjksICAgMzUsCi0gICAgICAgMzUs
ICAgMzUsICAgOTUsICAgNDEsICAgNDUsICAgNTAsICAgNTAsICAgNTAsICAgMTQsICAgMTQsCi0g
ICAgICAgNDEsICAgNDUsICAgMTQsICAgMTQsICAgNTEsICAgNTEsICAgNTEsICAgMTQsICAgOTgs
ICAgOTgsCi0KLSAgICAgICA5NCwgICAxNCwgICAxNCwgICA5OCwgIDEwMiwgIDEwMiwgICA5Mywg
ICA5MCwgICA4OSwgIDEwMiwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEw
NSwgIDEwNSwgIDEwNiwgIDEwNiwgIDEwNiwKLSAgICAgIDEwNiwgIDEwNywgICA4NywgIDEwNywg
IDEwOCwgIDEwOCwgIDEwOCwgIDEwOSwgICA4NiwgICA4NSwKLSAgICAgIDEwOSwgIDEwOSwgIDEw
OSwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgICA4NCwKLSAgICAgICA4Miwg
ICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3NSwgICA3MywgICA3MiwgICA3MSwgICA3MCwKLSAg
ICAgICA2OSwgICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwgICA2MCwgICA1OSwg
ICA1OCwKLSAgICAgICA1NywgICA1NiwgICA1NSwgICA1NCwgICA1MywgICA1MiwgICA0OSwgICA0
OCwgICA0NywgICA0NiwKLSAgICAgICA0NCwgICA0MywgICA0MiwgICA0MCwgICAzOSwgICAzNCwg
ICAzMywgICAzMiwgICAzMSwgICAzMCwKLSAgICAgICAyOCwgICAyNCwgICAxMiwgICAgMywgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAg
ICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7
Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAq
Lwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyNF0g
PQotICAgIHsgICAwLAotMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgICAgIH07Ci0KLS8qIFRoZSBpbnRlbnQg
YmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBv
ZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25v
dF9kZXRlY3RlZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlf
TU9SRV9PRkZTRVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMg
dGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9u
IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZ
T1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIu
c2guCi0qLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJDb250ZXh0
LmgiCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVubzsgICAgICAg
IFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7ICBcCi0gICAg
ICAgIHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUo
MCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1
bHQgPSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6
OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwotCi0j
ZGVmaW5lIElOSVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OkNvbnRleHQqCi0K
LS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwot
c3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hl
ZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0gICAgLyogVGhl
IHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVl
bnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKLSAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi0g
ICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICov
Ci0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFu
IGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwot
ICAgIGludCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0
OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
OwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2Rl
cHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0g
ICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIg
Knl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwot
Ci0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0g
ICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xv
YmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBi
ZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNv
biBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXls
dmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAot
aW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0
cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyog
QWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0
byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4
X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVm
aW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12
b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
aW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9j
X3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlz
IHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBz
ZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNw
bHVzCi1leHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UK
LWV4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlm
Ci0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFy
ICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNp
ZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBj
aGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBV
VAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQg
bmV3X3N0YXRlICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHl5
X3BvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgc3RhdGljIGludCB5
eV90b3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogQW1vdW50IG9mIHN0
dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwotI2lmbmRlZiBZWV9SRUFEX0JVRl9T
SVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgotI2VuZGlmCi0KLS8qIENvcHkgd2hh
dGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCi0j
aWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhl
IHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KLSAq
LwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKLSNlbmRp
ZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4K
LSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9z
aXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0
aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAgICAgaW50
IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gICAgICAgICAg
ICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0g
ICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gJ1xuJyAp
IFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBjID09
IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1bHQgPSBuOyBc
Ci0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAgZXJybm89MDsg
XAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWlu
KSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAgICAgICAgIGlm
KCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAg
ICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAgICAgICAgfSBc
Ci0gICAgICAgIH1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVy
bjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRv
bid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2ls
bCBjYXVzZQotICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUg
c3RhdGVtZW50cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0
ZSgpIHJldHVybiBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hp
Y2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFD
S19JTkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBv
cnQgYSBmYXRhbCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlf
RkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQotI2VuZGlm
Ci0KLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVz
ICovCi0KLS8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRl
ZmluZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lm
bmRlZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgcHBs
ZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCBw
cGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAq
IHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAhWVlfREVDTCAq
LwotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRl
ciB5eXRleHQgYW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZ
WV9VU0VSX0FDVElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUg
ZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0j
ZGVmaW5lIFlZX0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUCBc
Ci0gICAgaWYgKCB5eWxlbmcgPiAwICkgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2F0X2JvbCA9IFwKLSAgICAgICAgICAgICAgICAoeXl0ZXh0W3l5bGVuZyAtIDFdID09
ICdcbicpOyBcCi0gICAgWVlfVVNFUl9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVu
Y3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsKLSAgICByZWdp
c3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
eXlfY3AsICp5eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0OwotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotICAgIGlmICgg
IXl5Zy0+eXlfaW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9pbml0ID0gMTsKLQot
I2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYKLQotICAg
ICAgICBpZiAoICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0ID0g
MTsgIC8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLSAgICAgICAgaWYgKCAhIHl5aW4gKQotICAg
ICAgICAgICAgeXlpbiA9IHN0ZGluOwotCi0gICAgICAgIGlmICggISB5eW91dCApCi0gICAgICAg
ICAgICB5eW91dCA9IHN0ZG91dDsKLQotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KSB7Ci0gICAgICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgICAgIHBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB9Ci0KLSAg
ICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAq
LwotICAgICAgICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0gICAgICAg
IC8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKLQotICAgICAgICAvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2No
X2J1ZiBvZiB0aGUgc3RhcnQgb2YKLSAgICAgICAgICogdGhlIGN1cnJlbnQgcnVuLgotICAgICAg
ICAgKi8KLSAgICAgICAgeXlfYnAgPSB5eV9jcDsKLQotICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0wo
KTsKLXl5X21hdGNoOgotICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgcmVn
aXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0gICAgICAg
ICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9
IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQp
IHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgICAgICBpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAgICAgICAgICAgfQotICAgICAg
ICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTA0ICk7Ci0gICAgICAgIHl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0gICAgICAgIHl5
X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotICAgICAgICBZWV9ET19CRUZP
UkVfQUNUSU9OOwotCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYg
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgaW50IHl5bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCi0gICAgICAg
ICAgICAgICAgICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0w
OwotICAgIH13aGlsZSgwKQotOwotICAgICAgICAgICAgfQotCi1kb19hY3Rpb246ICAvKiBUaGlz
IGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLSAgICAgICAg
c3dpdGNoICggeXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
Ci0gICAgICAgICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotICAgICAgICAgICAgLyog
dW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0gICAgICAgICAgICAq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotCi1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCi0qeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4
dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9P
Qko7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMzoKLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFn
YWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3Jv
TmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfVU5ERUY7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9J
RjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNI
X0lGREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEhBU0hfSUZOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfRUxTRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBIQVNIX0VMSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMToKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIERFRklORUQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9WRVJT
SU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBI
QVNIX0xJTkU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBJREVOVElGSUVSOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIElOVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxOToKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwot
Y2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHl5dGV4dFswXTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAoteyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjI6Ci0vKiBydWxlIDIyIGNhbiBtYXRjaCBlb2wgKi8KLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJu
IHl5dGV4dFswXTsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6
Ci17IHl5dGVybWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VU
VVAKLUVDSE87Ci0gICAgWVlfQlJFQUsKLQotICAgIGNhc2UgWVlfRU5EX09GX0JVRkZFUjoKLSAg
ICAgICAgewotICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcg
dGhlIEVPQiBjaGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9
IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgICAgIC8qIFVuZG8g
dGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KLSAgICAgICAgKnl5X2NwID0g
eXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLQot
ICAgICAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
PSBZWV9CVUZGRVJfTkVXICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlJ3JlIHNj
YW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotICAgICAgICAgICAgICog
cG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKLSAgICAgICAgICAg
ICAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCi0gICAgICAg
ICAgICAgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKLSAgICAgICAg
ICAgICAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgotICAg
ICAgICAgICAgICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBi
ZWNhdXNlCi0gICAgICAgICAgICAgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRo
YW4gcG9zc2libHkgYQotICAgICAgICAgICAgICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZv
ciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsK
LSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9OT1JNQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLyogTm90ZSB0aGF0
IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAg
ICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2ls
bAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwg
Y2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMg
b24gRU9CIHRvIHRoZQotICAgICAgICAgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0
IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAgICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8K
LSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdh
cyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3Rh
dGU7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAvKiBP
a2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKLSAgICAgICAgICAgICAq
IHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0gICAgICAgICAgICAgKiB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLSAgICAgICAgICAgICAqIGZvciB1cyBi
ZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotICAgICAgICAgICAgICogd2l0aCB0
aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0Ci0gICAgICAgICAgICAgKiB3
YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKLSAgICAgICAgICAg
ICAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAg
ICB5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5
c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7Ci0KLSAgICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAg
ICAgICB5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwot
ICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2Ugc3dpdGNoICggeXlfZ2V0X25l
eHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKLQotICAgICAgICAgICAgICAg
IGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KLSAgICAg
ICAgICAgICAgICAgICAgICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLSAg
ICAgICAgICAgICAgICAgICAgICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotICAgICAgICAg
ICAgICAgICAgICAgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotICAgICAgICAg
ICAgICAgICAgICAgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KLSAgICAgICAg
ICAgICAgICAgICAgICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0g
ICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0gICAgICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgICAgICAgICB5eV9h
Y3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGRv
X2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9O
RVdfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU46Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAg
ICAgeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nh
bm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAg
ICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAg
ICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAg
ICAgICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNd
OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBZWV9G
QVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICov
Ci0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQgb2Yg
cHBsZXggKi8KLQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcg
YnVmZmVyCi0gKgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAq
ICBFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRp
bnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICogIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUgLSBlbmQgb2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0ZXIgY2hhciAqc291cmNlID0g
eXlnLT55eXRleHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLSAg
ICBpbnQgcmV0X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKLSAgICAgICAg
WVlfRkFUQUxfRVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAgICB7IC8qIERvbid0IHRyeSB0
byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotICAgICAgICBpZiAoIHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIs
IHRoZSBFT0IsIHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgot
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotICAgICAg
ICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJu
IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgLyog
VHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJz
IHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgIGZvciAoIGkgPSAwOyBp
IDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVzdCsrKSA9ICooc291cmNlKysp
OwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBm
b3JjZSBhbiBFT0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAg
ICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAgICAgICB7IC8qIE5vdCBlbm91
Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotICAgICAgICAgICAgLyoganVz
dCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgICAgICBZ
WV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOwotCi0gICAgICAgICAgICBpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbmV3X3NpemUgPSBi
LT55eV9idWZfc2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAg
KQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAv
IDg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZf
c2l6ZSAqPSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAg
ICAgICAgICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8K
LSAgICAgICAgICAgICAgICAgICAgcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55
eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24g
aXQuICovCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAg
aWYgKCAhIGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0g
ICAgICAgICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZs
b3ciICk7Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlf
Y19idWZfcF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9f
cmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9S
RUFEX0JVRl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAg
ICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJf
dG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9f
cmVhZCApOwotCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9
IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMg
PT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JF
X0FESiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRf
T0ZfRklMRTsKLSAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRf
dmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9G
X1BFTkRJTkc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAg
cmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAo
eXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfc2l6ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwg
cGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3
X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hh
cnMgPj4gMSk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0g
KGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0K
LQotICAgIHl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRl
eHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAg
cmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUg
c3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCi0KLSAgICBzdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAg
cmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7Ci0gICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0woKTsKLQotICAgIGZvciAo
IHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9j
X2J1Zl9wOyArK3l5X2NwICkKLSAgICAgICAgewotICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5
X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKLSAgICAgICAg
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAg
ICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgIHl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgfQotICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHl5X2N1cnJlbnRf
c3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRp
b24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICogIG5leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCB5eV9pc19qYW07
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCi0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICByZWdpc3Rl
ciBZWV9DSEFSIHl5X2MgPSAxOwotICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlf
Y3VycmVudF9zdGF0ZTsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7Ci0gICAgICAgIH0KLSAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgIHsKLSAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAg
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICB5eV9jID0geXlfbWV0
YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotICAgIHl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwNCk7Ci0KLSAgICByZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNpZm5kZWYgWVlfTk9f
SU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotI2VuZGlmCi0KLXsKLSAgICBpbnQgYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICBpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAgICAvKiB5eV9jX2J1Zl9wIG5v
dyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLSAgICAgICAgICog
SWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQot
ICAgICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0
aGUgYnVmZmVyLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0g
ICAgICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICAqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7IC8qIG5l
ZWQgbW9yZSBpbnB1dCAqLwotICAgICAgICAgICAgaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZf
cCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXlnLT55eV9jX2J1Zl9wOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkK
LSAgICAgICAgICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKLSAg
ICAgICAgICAgICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwotICAg
ICAgICAgICAgICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotICAgICAg
ICAgICAgICAgICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAotICAgICAgICAg
ICAgICAgICAgICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgotICAgICAgICAg
ICAgICAgICAgICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLSAgICAgICAg
ICAgICAgICAgICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLSAgICAgICAgICAgICAgICAg
ICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8K
LSAgICAgICAgICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAgICAgICAgICAgICBjYXNlIEVP
Ql9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEVPRjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNj
YW5uZXIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgt
Yml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2
ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsK
LQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gKGMgPT0gJ1xuJyk7
Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCApCi0gICAgICAg
ICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGls
ZSgwKQotOwotCi0gICAgcmV0dXJuIGM7Ci19Ci0jZW5kaWYgIC8qIGlmbmRlZiBZWV9OT19JTlBV
VCAqLwotCi0vKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVh
bS4KLSAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMg
bm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0gKi8KLSAgICB2
b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9Ci0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7Ci0gICAgfQotCi0gICAgcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCi0gKiBAcGFy
YW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAo
WVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgIC8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVu
Y3Rpb24gYm9keQotICAgICAqIHdpdGgKLSAgICAgKiAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSgp
OwotICAgICAqICAgICAgcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8K
LSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9y
bWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdl
IGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5n
LCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBpcyBsb29rZWQgYXQgaXMgYWZ0
ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAgICAgKiB0byBnbyBhaGVhZCBh
bmQgYWx3YXlzIHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9j
X2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotICAgIHl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0gICAgeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRp
YWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVz
LiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBm
aWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRl
X2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0gICAgLyogeXlf
Y2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4g
YmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlf
YnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRl
X2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICBwcF9p
bml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoq
IERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBw
cF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBz
aG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7Ci0KLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAg
ICAgICBwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotICAgIHBw
ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVp
bml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxl
ZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBh
IHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVm
ZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLQotewotICAgIGludCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBwcF9mbHVzaF9idWZmZXIo
YiAseXlzY2FubmVyKTsKLQotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5
X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0
aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20gcHBy
ZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBj
YXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAq
LwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGlu
ZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAg
Yi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotICAgIGVycm5vID0gb2Vycm5vOwotfQot
Ci0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2Nhbiwg
WVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRv
IGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVy
IChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICgg
ISBiICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYi0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICAv
KiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0
IGNhdXNlcwotICAgICAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4g
IFRoZSBzZWNvbmQgY2F1c2VzCi0gICAgICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8K
LSAgICBiLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYi0+eXlfYnVmX3BvcyA9
ICZiLT55eV9jaF9idWZbMF07Ci0KLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRf
QlVGRkVSICkKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0K
LS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBi
ZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0
ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhl
IG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
Lwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7Ci0K
LSAgICAvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICov
Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0K
LSAgICAvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4g
Ki8KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrX3RvcCsrOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0K
LSAgICAvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHBwX2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUg
c3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcg
dG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lk
IHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZ
X0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcF9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IE5VTEw7Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0gICAg
ICAgIC0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKSB7Ci0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAg
ICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQotfQotCi0vKiBB
bGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMg
c3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBpbnQgbnVtX3RvX2FsbG9j
OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotICAgICAgICAvKiBGaXJz
dCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cg
aWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVz
ZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxv
YyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0g
MTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSoqKXBwYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxv
YyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRv
IHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9
IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVy
KTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjaygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAg
ICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAg
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9Ci19Ci0K
LS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBh
IHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUgY2hh
cmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNo
YXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICov
Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIAotICAgIGlmICggc2l6ZSA8IDIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQotICAgICAgICAvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0
aGUgRU9CJ3MuICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0g
c2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KLSAgICBiLT55eV9i
dWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55eV9uX2NoYXJzID0gYi0+eXlf
YnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIGItPnl5X2F0X2Jv
bCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5u
ZXIgKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBz
dGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVy
bWluYXRlZCBzdHJpbmcgdG8gc2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4KLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBO
VUwgdmFsdWVzLCB0aGVuIHVzZQotICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCi0g
Ki8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCi0gICAgcmV0dXJuIHBwX3NjYW5fYnl0ZXMo
eXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8g
cHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBh
cmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICBjaGFyICpi
dWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgLyogR2V0IG1lbW9y
eSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICov
Ci0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0gKGNoYXIgKikgcHBhbGxvYyhu
ICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgZm9y
ICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAgICAgIGJ1ZltpXSA9IHl5Ynl0
ZXNbaV07Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5
c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggImJhZCBi
dWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyogSXQncyBva2F5IHRvIGdyb3cg
ZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAotICAgICAqIGF3YXkgd2hl
biB3ZSdyZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0g
ICAgcmV0dXJuIGI7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQgIG5l
d19zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCB5eWctPnl5X3N0YXJ0
X3N0YWNrX3B0ciA+PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICkKLSAgICAgICAgewotICAg
ICAgICB5eV9zaXplX3QgbmV3X3NpemU7Ci0KLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFja19k
ZXB0aCArPSBZWV9TVEFSVF9TVEFDS19JTkNSOwotICAgICAgICBuZXdfc2l6ZSA9IHl5Zy0+eXlf
c3RhcnRfc3RhY2tfZGVwdGggKiBzaXplb2YoIGludCApOwotCi0gICAgICAgIGlmICggISB5eWct
Pnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50
ICopIHBwYWxsb2MobmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBwcmVhbGxvYygodm9pZCAqKSB5
eWctPnl5X3N0YXJ0X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAgICBpZiAo
ICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBtZW1vcnkgZXhwYW5kaW5nIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayIgKTsKLSAgICAgICAg
fQotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cisrXSA9
IFlZX1NUQVJUOwotCi0gICAgQkVHSU4obmV3X3N0YXRlKTsKLX0KLQotICAgIHN0YXRpYyB2b2lk
IHl5X3BvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAtLXl5Zy0+
eXlfc3RhcnRfc3RhY2tfcHRyIDwgMCApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAic3RhcnQt
Y29uZGl0aW9uIHN0YWNrIHVuZGVyZmxvdyIgKTsKLQotICAgIEJFR0lOKHl5Zy0+eXlfc3RhcnRf
c3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHJdKTsKLX0KLQotICAgIHN0YXRpYyBpbnQgeXlf
dG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlnLT55eV9z
dGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFdOwotfQotCi0jaWZuZGVmIFlZ
X0VYSVRfRkFJTFVSRQotI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgotI2VuZGlmCi0KLXN0YXRp
YyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsK
LSAgICBleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0KLQotLyogUmVkZWZpbmUgeXlsZXNzKCkg
c28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCi0KLSN1bmRlZiB5eWxlc3MKLSNkZWZp
bmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRvIGVm
ZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNy
b19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7
XAotICAgICAgICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLSAgICAgICAg
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0gICAgICAgICp5eWctPnl5
X2NfYnVmX3AgPSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwK
LSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKLQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdl
dC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KLQotLyoqIEdldCB0aGUgdXNl
ci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlleHRyYTsKLX0KLQotLyoqIEdldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi1pbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQg
Y29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICovCi1pbnQgcHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICByZXR1cm4geXljb2x1bW47Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdl
dF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5aW47Ci19Ci0KLS8q
KiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICByZXR1cm4geXlvdXQ7Ci19Ci0KLS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVu
dCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1p
bnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGVu
ZzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0KLWNoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQgdGhlIHVzZXIt
ZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4K
LSAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwotfQotCi0vKiog
U2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9saW5l
bm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAg
IC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0g
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJy
b3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAot
ICAgIAotICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJl
bnQgY29sdW1uLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25v
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2
YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNh
bGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWNvbHVtbiA9
IGNvbHVtbl9ubzsKLX0KLQotLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90
IGRpc2NhcmQgdGhlIGN1cnJlbnQKLSAqIGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBpbl9zdHIg
QSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgotICovCi12b2lkIHBwc2V0X2luIChGSUxF
ICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9IGluX3N0ciA7
Ci19Ci0KLXZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5b3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWludCBwcGdldF9kZWJ1ZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Ci19Ci0KLXZv
aWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKLX0KLQotLyogQWNjZXNzb3IgbWV0aG9kcyBmb3Ig
eXlsdmFsIGFuZCB5eWxsb2MgKi8KLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWx2YWw7Ci19Ci0KLXZvaWQgcHBzZXRfbHZhbCAo
WVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5
bHZhbCA9IHl5bHZhbF9wYXJhbTsKLX0KLQotWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZvaWQgcHBzZXRf
bGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLX0KLSAgICAKLS8qIFVzZXItdmlzaWJsZSBBUEkg
Ki8KLQotLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nh
bm5lciBpdHNlbGYsIHNvIGl0IGlzCi0gKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhh
dCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCi0gKiBUaGF0
J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1
c2luZyBvdXIgbWFjcm9zLgotICovCi0KLWludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlf
Z2xvYmFscykKLQotewotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAg
ZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICpwdHJfeXlf
Z2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICks
IE5VTEwgKTsKLQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVy
cm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBCeSBzZXR0
aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQg
MHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNp
emVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLQotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAq
cHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUg
ZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKLSAqIGNvbnZlbnRp
b24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2
ZXIsIHRoYXQKLSAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxs
IGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAotICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3
aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgot
ICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBh
dmFpbGFibGUgdG8gcHBhbGxvYyBpbgotICogdGhlIHl5ZXh0cmEgZmllbGQuCi0gKi8KLQotaW50
IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3Qq
IHB0cl95eV9nbG9iYWxzICkKLQotewotICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7
Ci0KLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKLQot
ICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAo
eXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXln
dXRzICk7Ci0gICAgCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAg
ZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAvKiBC
eSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCi0gICAgeXlfaW5pdF9nbG9iYWxz
LiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9i
YWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotICAgIAotICAgIHBwc2V0X2V4dHJh
ICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7Ci0gICAgCi0gICAgcmV0dXJuIHl5
X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi1zdGF0aWMgaW50IHl5X2lu
aXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAvKiBJbml0aWFsaXphdGlv
biBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxs
b2NhdGUgaGVyZS4KLSAgICAgKi8KLQotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKLSAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IDA7Ci0gICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKLSAgICB5eWctPnl5
X2luaXQgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnQgPSAwOwotCi0gICAgeXlnLT55eV9zdGFydF9z
dGFja19wdHIgPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOwotICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNp
ZmRlZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0Owot
I2Vsc2UKLSAgICB5eWluID0gKEZJTEUgKikgMDsKLSAgICB5eW91dCA9IChGSUxFICopIDA7Ci0j
ZW5kaWYKLQotICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3Is
IHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKLSAgICAgKiBwcGxleF9pbml0KCkKLSAgICAgKi8KLSAg
ICByZXR1cm4gMDsKLX0KLQotLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQg
YW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJv
eWluZyBlYWNoIGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpewotICAg
ICAgICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICAgICAgcHBwb3BfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhY2sg
aXRzZWxmLiAqLwotICAgIHBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsK
LSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBz
dGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0
YWNrICx5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7Ci0K
LSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVl
bnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHBwbGV4KCkgaXMgY2FsbGVk
LCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xvYmFscyggeXlz
Y2FubmVyKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25s
eSkuICovCi0gICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0gICAgeXlzY2Fu
bmVyID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFsIHV0aWxpdHkg
cm91dGluZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBu
OyArK2kgKQotICAgICAgICBzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNpZmRlZiBZWV9O
RUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgbjsKLSAgICBmb3IgKCBu
ID0gMDsgc1tuXTsgKytuICkKLSAgICAgICAgOwotCi0gICAgcmV0dXJuIG47Ci19Ci0jZW5kaWYK
LQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKLX0KLQotdm9pZCAqcHByZWFs
bG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIC8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2Rh
dGVzIGJvdGgKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBw
b2ludGVycywgYW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVy
cy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJlY2F1c2UgYm90aCBBTlNJIEMg
YW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLSAgICAgKiBhbnkgcG9pbnRl
ciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCi0gICAg
ICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAgICovCi0gICAgcmV0dXJuICh2
b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lkIHBwZnJlZSAo
dm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBmcmVlKCAoY2hhciAqKSBw
dHIgKTsgICAvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KLX0KLQotI2Rl
ZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNy
b05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJp
bmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAg
Ly8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIg
JiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpz
dHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0t
aSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQn
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBp
ICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAg
ewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0g
ICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAg
ICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0g
ICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0g
MCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24ocHBnZXRfbGlu
ZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmlu
Z0luZGV4KCk7Ci0gICAgICAgIHBwc2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9u
KGxpbmUsIGZpbGUpLG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVm
LCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6
a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyhhbG9r
cCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyID09IE5V
TEwpOwotCi0gICAgaWYgKHBwbGV4X2luaXRfZXh0cmEodGhpcywmbUxleGVyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4
ZXIpOwotCi0gICAgcHBsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdiNmFhMC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3MiArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwg
bWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24g
Zm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5
ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYK
LSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3Jl
YXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhlIEJp
c29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRl
cm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQot
ICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJz
aW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYg
eW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxm
LCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0
aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwotICAg
Qmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCi0gICBU
aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIEMgTEFMUigxKSBw
YXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQotICAgc2ltcGxp
ZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCi0KLS8q
IEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRv
IGF2b2lkCi0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJl
IGRvbmUgZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndp
c2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0gICBUaGVyZSBhcmUgc29tZSB1bmF2b2lk
YWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCi0gICBkZWZpbmUgbmVjZXNz
YXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgotICAgVVNF
UiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICov
Ci0jZGVmaW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlC
SVNPTl9WRVJTSU9OICIyLjMiCi0KLS8qIFNrZWxldG9uIG5hbWUuICAqLwotI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQ
VVJFIDEKLQotLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KLSNkZWZpbmUgWVlMU1BfTkVFREVEIDEK
LQotLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNk
ZWZpbmUgeXlwYXJzZSBwcHBhcnNlCi0jZGVmaW5lIHl5bGV4ICAgcHBsZXgKLSNkZWZpbmUgeXll
cnJvciBwcGVycm9yCi0jZGVmaW5lIHl5bHZhbCAgcHBsdmFsCi0jZGVmaW5lIHl5Y2hhciAgcHBj
aGFyCi0jZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKLSNk
ZWZpbmUgeXlsbG9jIHBwbGxvYwotCi0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQ
RQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5
bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBh
Ym91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0gMjU4LAot
ICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBIQVNIX0lG
REVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNFID0gMjYz
LAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0gICAgIERF
RklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJBR01BID0g
MjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9OID0gMjcw
LAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3MiwKLSAg
ICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0LAotICAg
ICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAgfTsKLSNl
bmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRF
RiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZp
bmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9F
TElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2NgotI2Rl
ZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFT
SF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9M
SU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hfREVGSU5F
X0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RB
TlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLS8qIENvcHkgdGhlIGZpcnN0
IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBU
aGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BB
UkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0KLQotLyogRW5hYmxpbmcg
dHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYK
LQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJP
Ul9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJC
T1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVu
YWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVm
aW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAh
IGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsK
LSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2
YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTg3IG9mIHlhY2Mu
Yy4gICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29s
ZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJF
RCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLSNpZiAhIGRlZmlu
ZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1
Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAg
aW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUg
eXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBk
ZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwg
MQotI2VuZGlmCi0KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlv
bnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxs
b2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAot
ICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFs
QmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lk
IHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotCi0KLS8qIExpbmUg
MjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNob3J0Ci0jIHVuZGVmIHNob3J0Ci0jZW5k
aWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3Vp
bnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7Ci0jZW5kaWYK
LQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Owot
I2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdHlwZWRlZiBzaWdu
ZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgotdHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBl
X3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDE2Ci10eXBlZGVmIFlZVFlQRV9J
TlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2
OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZkZWYgX19TSVpFX1RZUEVfXwotIyAg
ZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxpZiBkZWZpbmVkIHNpemVfdAotIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICBpbmNsdWRlIDxzdGRkZWYuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50Ci0jIGVuZGlmCi0j
ZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKLQotI2lmbmRl
ZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFCTEVfTkxTCi0jICAgaW5jbHVkZSA8
bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZGVmaW5l
IFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCi0jICBlbmRpZgot
IyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAotIyBlbmRp
ZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNp
bmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KLSMgZGVm
aW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UKLSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVt
cHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mg
d2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCi0jaWZuZGVmIGxpbnQKLSMg
ZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQotI2Vsc2UKLXN0YXRpYyBpbnQK
LVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsKLSAgcmV0dXJuIGk7Ci19Ci0jZW5kaWYK
LQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQotCi0vKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICBpZiBZWVNUQUNLX1VT
RV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBf
X2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgot
IyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxs
b2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgIGRlZmluZSBhbGxvY2EgX2Fs
bG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCi0jICAgIGlm
ICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICAgaWZuZGVmIF9TVERMSUJfSAot
IyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgICBl
bmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZWVNUQUNLX0FMTE9DCi0gICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLwotIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQotIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKLSAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KLSMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCi0j
ICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQwotIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
LSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCi0jICBlbmRp
ZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCi0g
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKLSMgICBpbmNsdWRlIDxz
dGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGlmbmRlZiBf
U1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0j
ICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCi0jICAgaWYgISBk
ZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYg
WVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYgISBkZWZpbmVkIGZyZWUgJiYg
ISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAhIGRlZmluZWQgeXlv
dmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYgKCEgZGVmaW5lZCB5eW92ZXJm
bG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVk
IFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYg
ZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCi0KLS8q
IEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAq
LwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZz
OwotICAgIFlZTFRZUEUgeXlsczsKLX07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdh
cCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmluZSBZ
WVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyogVGhl
IHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFj
aCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAot
ICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkgKyBz
aXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0v
KiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVz
dGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYg
ZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBG
cm9tLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkg
KiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20s
IENvdW50KSAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgIFwKLSAgICAg
IGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspICAgXAotICAgICAgICAoVG8pW3l5
aV0gPSAoRnJvbSlbeXlpXTsgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLS8qIFJlbG9jYXRlIFNU
QUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQotICAgbG9jYWwg
dmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVt
YmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3
IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkg
YWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZ
U1RBQ0tfUkVMT0NBVEUoU3RhY2spICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOyAgICAg
ICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5TdGFjazsgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZ
U1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICB5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgq
eXlwdHIpOyAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRpZgotCi0vKiBZWUZJTkFMIC0t
IFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJ
TkFMICAyCi0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUg
WVlMQVNUICAgMjQ3Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
LSNkZWZpbmUgWVlOVE9LRU5TICA0NwotLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5h
bHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDEyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVs
ZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBz
dGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDkxCi0KLS8qIFlZVFJBTlNMQVRFKFlZTEVY
KSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotI2Rl
ZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDI3NgotCi0jZGVmaW5lIFlZ
VFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgodW5zaWduZWQgaW50
KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKLQot
LyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGlu
ZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10g
PQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAyMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDM3
LCAgICA0MCwgICAgIDIsCi0gICAgICAyMywgICAgMjQsICAgIDM2LCAgICAzMywgICAgMjUsICAg
IDM0LCAgICAzMiwgICAgMzUsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDQsICAgIDQ1LAotICAgICAg
MjgsICAgIDQyLCAgICAyOSwgICAgNDYsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
IDI2LCAgICAgMiwgICAgMjcsICAgIDM4LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgMzAsICAgIDM5LCAgICAzMSwgICAgNDEsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmly
c3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAgIFlZUkhTLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAgICAgIDAsICAgICAwLCAgICAg
MywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNiwgICAgMTksCi0gICAg
ICAyMywgICAgMzAsICAgIDM0LCAgICAzOCwgICAgNDIsICAgIDQ2LCAgICA1MCwgICAgNTMsICAg
IDU2LCAgICA1OSwKLSAgICAgIDYyLCAgICA2NSwgICAgNjgsICAgIDcxLCAgICA3MiwgICAgNzQs
ICAgIDc1LCAgICA3NywgICAgODEsICAgIDgzLAotICAgICAgODYsICAgIDg4LCAgICA5MSwgICAg
OTQsICAgIDk5LCAgIDEwMSwgICAxMDMsICAgMTA1LCAgIDEwNywgICAxMDksCi0gICAgIDExMSwg
ICAxMTMsICAgMTE1LCAgIDExNywgICAxMTksICAgMTIxLCAgIDEyMywgICAxMjUsICAgMTI3LCAg
IDEyOSwKLSAgICAgMTMxLCAgIDEzMywgICAxMzUsICAgMTM3LCAgIDEzOSwgICAxNDEsICAgMTQz
LCAgIDE0NSwgICAxNDcsICAgMTQ5LAotICAgICAxNTEsICAgMTUzLCAgIDE1NQotfTsKLQotLyog
WVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KLXsKLSAgICAgIDQ4LCAgICAgMCwgICAg
LTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIC0xLCAgICA1MCwgICAgLTEsICAgIDUxLAotICAg
ICAgLTEsICAgIDIyLCAgICAtMSwgICAgNTUsICAgIDIyLCAgICAtMSwgICAgIDMsICAgIDIyLCAg
ICAtMSwgICAgMTcsCi0gICAgICA1MiwgICAgMjIsICAgIC0xLCAgICAxOCwgICAgMjMsICAgIDUz
LCAgICAyNCwgICAgNTIsICAgIDIyLCAgICAtMSwKLSAgICAgICA0LCAgICAyMSwgICAgMjIsICAg
IC0xLCAgICAgNSwgICAgNTQsICAgIDIyLCAgICAtMSwgICAgIDYsICAgIDIxLAotICAgICAgMjIs
ICAgIC0xLCAgICAgNywgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDksICAgIDU0LCAgICAyMiwg
ICAgLTEsCi0gICAgICAgOCwgICAgMjIsICAgIC0xLCAgICAxMCwgICAgMjIsICAgIC0xLCAgICAx
MiwgICAgMjIsICAgIC0xLCAgICAxMywKLSAgICAgIDIyLCAgICAtMSwgICAgMTQsICAgIDIyLCAg
ICAtMSwgICAgMTUsICAgIDIyLCAgICAtMSwgICAgMTYsICAgIDIyLAotICAgICAgLTEsICAgIC0x
LCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDUzLCAgICAyNSwgICAgMjEs
Ci0gICAgICAtMSwgICAgNTYsICAgIC0xLCAgICA1NCwgICAgNTYsICAgIC0xLCAgICA1NywgICAg
LTEsICAgIDU1LCAgICA1NywKLSAgICAgIC0xLCAgICAxMSwgICAgMjEsICAgIC0xLCAgICAxMSwg
ICAgMjMsICAgIDIxLCAgICAyNCwgICAgLTEsICAgIDU3LAotICAgICAgLTEsICAgIDU4LCAgICAt
MSwgICAgMTksICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjYsCi0gICAg
ICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjMsICAg
IC0xLCAgICAyNCwKLSAgICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIs
ICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LAotICAgICAgLTEsICAgIDM1LCAgICAtMSwgICAg
MzYsICAgIC0xLCAgICAzNywgICAgLTEsICAgIDM4LCAgICAtMSwgICAgMzksCi0gICAgICAtMSwg
ICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMsICAgIC0xLCAg
ICA0NCwKLSAgICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgNDYsICAgIC0x
Ci19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIg
WVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtd
ID0KLXsKLSAgICAgICAwLCAgICA2MywgICAgNjMsICAgIDY1LCAgICA2OSwgICAgNzAsICAgIDc0
LCAgICA3NSwgICAgODQsICAgIDg1LAotICAgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTcsICAg
MTAwLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDExMCwgICAxMTEsCi0gICAgIDExMiwgICAxMTMs
ICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIyLCAgIDEyMywgICAxMjcsICAgMTMzLCAgIDEzNywK
LSAgICAgMTQ0LCAgIDE0OCwgICAxNTUsICAgMTU3LCAgIDE1OSwgICAxNjMsICAgMTY2LCAgIDE2
OSwgICAxNzIsICAgMTc4LAotICAgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIsICAgMTgzLCAg
IDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsCi0gICAgIDE4OSwgICAxOTAsICAgMTkx
LCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsICAgMTk3LCAgIDE5OCwKLSAgICAg
MTk5LCAgIDIwMCwgICAyMDEKLX07Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5n
IG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMs
IHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KLXN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAiJGVuZCIsICJlcnJvciIsICIkdW5k
ZWZpbmVkIiwgIkhBU0giLCAiSEFTSF9VTkRFRiIsICJIQVNIX0lGIiwKLSAgIkhBU0hfSUZERUYi
LCAiSEFTSF9JRk5ERUYiLCAiSEFTSF9FTFNFIiwgIkhBU0hfRUxJRiIsICJIQVNIX0VORElGIiwK
LSAgIkRFRklORUQiLCAiSEFTSF9FUlJPUiIsICJIQVNIX1BSQUdNQSIsICJIQVNIX0VYVEVOU0lP
TiIsICJIQVNIX1ZFUlNJT04iLAotICAiSEFTSF9MSU5FIiwgIkhBU0hfREVGSU5FX09CSiIsICJI
QVNIX0RFRklORV9GVU5DIiwgIklOVF9DT05TVEFOVCIsCi0gICJGTE9BVF9DT05TVEFOVCIsICJJ
REVOVElGSUVSIiwgIidcXG4nIiwgIicoJyIsICInKSciLCAiJywnIiwgIidbJyIsCi0gICInXSci
LCAiJzwnIiwgIic+JyIsICIneyciLCAiJ30nIiwgIicuJyIsICInKyciLCAiJy0nIiwgIicvJyIs
ICInKiciLAotICAiJyUnIiwgIideJyIsICInfCciLCAiJyYnIiwgIid+JyIsICInPSciLCAiJyEn
IiwgIic6JyIsICInOyciLCAiJz8nIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAibGluZSIsICJ0
ZXh0X2xpbmUiLCAiY29udHJvbF9saW5lIiwKLSAgInJlcGxhY2VtZW50X2xpc3QiLCAicGFyYW1l
dGVyX2xpc3QiLCAiY29uZGl0aW9uYWxfbGlzdCIsICJ0b2tlbl9saXN0IiwKLSAgImNvbmRpdGlv
bmFsX3Rva2VuIiwgInRva2VuIiwgIm9wZXJhdG9yIiwgMAotfTsKLSNlbmRpZgotCi0jIGlmZGVm
IFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVy
IGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVYLU5VTS4gICovCi1zdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAg
MjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAotICAgICAyNjUs
ICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3Mywg
ICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgIDEwLCAgICA0MCwgICAgNDEsICAgIDQ0LCAgICA5
MSwgICAgOTMsICAgIDYwLCAgICA2MiwKLSAgICAgMTIzLCAgIDEyNSwgICAgNDYsICAgIDQzLCAg
ICA0NSwgICAgNDcsICAgIDQyLCAgICAzNywgICAgOTQsICAgMTI0LAotICAgICAgMzgsICAgMTI2
LCAgICA2MSwgICAgMzMsICAgIDU4LCAgICA1OSwgICAgNjMKLX07Ci0jIGVuZGlmCi0KLS8qIFlZ
UjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAsICAg
IDQ3LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1MSwgICAg
NTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwg
ICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUyLCAgICA1
MiwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTQsICAgIDU0LAotICAgICAgNTUsICAgIDU1LCAg
ICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTgsCi0g
ICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OAot
fTsKLQotLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBo
YW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIy
W10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAyLCAgICAgMiwgICAgIDMsCi0gICAgICAgNiwgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgMywgICAgIDEsICAgICAy
LAotICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAg
ICAgIDEsICAgICAxLCAgICAgMQotfTsKLQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVm
YXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCi0gICBTVEFURS1OVU0gd2hlbiBZWVRB
QkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgIG1lYW5z
IHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlkZWZhY3RbXSA9Ci17Ci0gICAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzYsICAgIDM3LAotICAgICAg
MzgsICAgICA2LCAgICA0MywgICAgNDQsICAgIDYxLCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDUsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKLSAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICAwLAotICAgICAgMzAsICAg
IDM1LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjgsICAgIDM0LCAgICAgMCwgICAg
IDAsCi0gICAgICAxNiwgICAgIDAsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAyNCwKLSAgICAgIDI1LCAgICAgNywgICAgMzEsICAgIDExLCAgICAz
MiwgICAgIDAsICAgIDEyLCAgICAyOSwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgICA5LCAg
ICAyNiwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDMzLCAgICAgMCwgICAgMjcsCi0g
ICAgICAxMAotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgMSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNjgsICAgIDgzLCAgICA1NSwgICAgNjksICAgIDU2LAotICAgICAgNTcs
ICAgIDUxCi19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9m
IHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFD
VF9OSU5GIC01NQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Ci17Ci0gICAg
IC01NSwgICAgNzMsICAgLTU1LCAgIC0xNywgICAtMTgsICAgMTQ1LCAgIC0xMCwgICAgLTksICAg
LTE2LCAgIDE0NSwKLSAgICAgIC04LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjcs
ICAgMjAxLCAgICAyOCwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgMTczLAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzAsICAg
LTE5LCAgICAtMywgICAtNTUsICAgLTU1LCAgICAzMSwgICAgMzIsCi0gICAgIC01NSwgICAxMDks
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDMzLCAgIDIwMSwK
LSAgICAgIDI5LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtMTUsICAgLTExLCAg
IDIwMSwgICAgMzYsICAgLTU1LCAgICAzNywgICAtNTUsCi0gICAgIC01NQotfTsKLQotLyogWVlQ
R09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3RvW10g
PQotewotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0yNywgICAtNTUs
ICAgIDUxLCAgICA2MCwgICAtNTQsCi0gICAgICAtMSwgICAtNTUKLX07Ci0KLS8qIFlZVEFCTEVb
WVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgot
ICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBy
dWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZ
WURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2Rl
ZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtd
ID0KLXsKLSAgICAgIDUwLCAgICA3NywgICAgNzQsICAgIDUzLCAgICA3NSwgICAgNTIsICAgIDYw
LCAgICA3NywgICAgNTQsICAgIDg1LAotICAgICAgODYsICAgIDU4LCAgICA1OSwgICAgODcsICAg
IDYyLCAgICA1MCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNzYsCi0gICAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwK
LSAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDYzLCAg
ICA2NCwgICAgNjUsICAgIDY2LCAgICA3MiwgICAgNjcsCi0gICAgICA4MiwgICAgNzAsICAgIDcz
LCAgICA3OCwgICAgNzksICAgIDgxLCAgICA4NCwgICAgODksICAgIDg4LCAgICA5MCwKLSAgICAg
IDYxLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
NzIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgNTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDU0LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LAot
ICAgICAgMjAsICAgIDgwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKLSAgICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDU0LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAwLCAgICAy
MiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAg
IDQ1LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0g
ICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NQotfTsKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tb
XSA9Ci17Ci0gICAgICAgMSwgICAgNTUsICAgIDIxLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICAy
MiwgICAgNjEsICAgIDExLCAgICAyNCwKLSAgICAgIDI1LCAgICAyMSwgICAgMjEsICAgIDI0LCAg
ICAyMiwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
Ci0gICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAyMiwg
ICAgMjIsICAgIDIyLCAgICAyMiwgICAgNDksICAgIDIyLAotICAgICAgMjEsICAgIDIzLCAgICAy
MiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDIxLCAgICA4NSwgICAgMjIsCi0gICAg
ICAgOSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDY5LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDg1LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAxMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwK
LSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAg
MjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAg
ICA0NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAot
ICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYKLX07Ci0KLS8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50
ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0gICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUt
TlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQotewotICAgICAg
IDAsICAgIDQ4LCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksCi0gICAgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1NSwKLSAgICAgIDU3LCAgICA1OCwgICAgMjIsICAgIDIxLCAgICAx
MSwgICAgNTQsICAgIDU2LCAgICA1NywgICAgMjEsICAgIDIxLAotICAgICAgMjIsICAgIDU0LCAg
ICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA1MiwgICAgNTUsCi0g
ICAgICAyMywgICAgMjIsICAgIDU3LCAgICAyMiwgICAgMjEsICAgIDIzLCAgICAyMiwgICAgNTYs
ICAgIDIyLCAgICAyMiwKLSAgICAgIDIyLCAgICAyMiwgICAgMjEsICAgIDUzLCAgICAyMSwgICAg
MjQsICAgIDI1LCAgICAyNCwgICAgNTIsICAgIDIxLAotICAgICAgMjIKLX07Ci0KLSNkZWZpbmUg
eXllcnJvayAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmluICAgKHl5Y2hh
ciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAgICgtMikKLSNkZWZpbmUgWVlFT0YgICAg
ICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlB
Qk9SVCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IgICAgIGdvdG8geXllcnJv
cmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyBy
ZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhl
IG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNlIEdDQyB2ZXJzaW9uIDIg
aGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCi0KLSNkZWZpbmUgWVlG
QUlMICAgICAgZ290byB5eWVycmxhYgotCi0jZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVy
cnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAg
ICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWNoYXIgPT0g
WVlFTVBUWSAmJiB5eWxlbiA9PSAxKSAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsgICAgICAgICAgICAgICBcCi0g
ICAgICBZWVBPUFNUQUNLICgxKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8g
eXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXllcnJvciAoJnl5
bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0g
ICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKFlZSUQgKDApKQotCi0KLSNkZWZpbmUgWVlU
RVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAyNTYKLQotCi0vKiBZWUxMT0NfREVGQVVM
VCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4g
aXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwot
ICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0j
ZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVGQVVM
VAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAg
ICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYg
KFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsgICAgXAot
ICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2Nv
bHVtbjsgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2xpbmU7ICAgICBcCi0gICAgICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNM
T0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJz
dF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPSAgICAgIFwKLSAgICAgICAgWVlSSFNM
T0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3VycmVudCku
Zmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0gICAgICBcCi0gICAgICAgIFlZ
UkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAgICAgICAgICAgXAotICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkKLSNlbmRpZgot
Ci0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3Ry
ZWFtLgotICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBv
bmx5IGlmIHdlIGtub3cKLSAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBh
cmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KLQotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklO
VAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpICAgICAgICAgIFwKLSAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwg
ICAgICAgICAgXAotICAgICAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVt
biwgXAotICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBl
bHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0j
IGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUg
cmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxF
WCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCi0jZWxzZQotIyBkZWZpbmUg
WVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0jZW5kaWYKLQotLyogRW5hYmxlIGRlYnVn
Z2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRG
Ci0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
Ci0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJ
TlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
aWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBSSU5URiBBcmdzOyAgICAg
ICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5U
KFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0
KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGls
ZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
UHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxF
ICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZ
WUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBGSUxFICp5eW91dHB1dDsK
LSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKLSAg
ICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRleHQqIGNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0gIFlZVVNF
ICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBp
ZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5
eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlm
Ci0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0g
ICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0
YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxv
Y2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5
bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250
ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBj
b25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0
aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBl
IDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0
bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAl
cyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9MT0NBVElPTl9QUklOVCAoeXlvdXRwdXQs
ICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICI6ICIpOwotICB5eV9zeW1i
b2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwg
Y29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9U
VE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3By
aW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCi0jZWxzZQotc3Rh
dGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYg
KmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKLSNlbmRpZgotewotICBZWUZQUklOVEYg
KHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20p
Ci0gICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsKLSAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkg
ICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eV9zdGFja19w
cmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgw
KSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
cmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlMVFlQRSAqeXlsc3AsIGludCB5eXJ1bGUs
IHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJp
bnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0KQotICAgIFlZU1RZUEUgKnl5dnNwOwot
ICAgIFlZTFRZUEUgKnl5bHNwOwotICAgIGludCB5eXJ1bGU7Ci0gICAgcHA6OkNvbnRleHQqIGNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKLSAgaW50IHl5
aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07Ci0gIFlZRlBS
SU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwK
LSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVk
dWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKLSAgICB7Ci0g
ICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5
bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCi0gICAgICAg
ICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAgICAgICAgICAgICwg
Jih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAgICAgLCBjb250ZXh0KTsKLSAg
ICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotfQotCi0jIGRlZmluZSBZWV9SRURV
Q0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWRlYnVnKSAgICAgICAgICAgICAgXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNw
LCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLS8qIE5vbnplcm8gbWVh
bnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAot
ICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQgeXlkZWJ1ZzsKLSNlbHNl
IC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVmaW5lIFlZX1NZ
TUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQotIyBkZWZpbmUgWVlfU1RB
Q0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKLSNl
bmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBv
ZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJTklUREVQVEgKLSMgZGVmaW5l
IFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXpl
IHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0gICBpZiB0aGUgYnVpbHQt
aW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAgRG8gbm90IG1ha2UgdGhp
cyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKLSAgIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCi0gICBldmFsdWF0
ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KLQotI2lm
bmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCi0jZW5kaWYKLQotDAot
Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVuCi0jICBpZiBkZWZpbmVk
IF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJs
ZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3Ry
bGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3RybGVu
ICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgotewotICBZWVNJWkVfVCB5
eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKLSAgICBjb250
aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZm5kZWYg
eXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYm
IGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5Ci0jICBlbHNl
Ci0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0
ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5IChjaGFyICp5eWRl
c3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXl5c3RwY3B5ICh5
eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25zdCBjaGFyICp5eXNyYzsK
LSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0IGNoYXIgKnl5cyA9IHl5
c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQotICAgIGNvbnRpbnVl
OwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZm5kZWYg
eXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBz
dHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28g
dGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBoZXVyaXN0aWMgaXMgdGhh
dCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZwotICAgY29u
dGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCi0g
ICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElm
IFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5n
dGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4uICAqLwotc3RhdGljIFlZ
U0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKLXsKLSAg
aWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1QgeXluID0gMDsKLSAgICAg
IGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAo
KisreXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAg
ICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAgY2FzZSAnXFwnOgotICAgICAg
ICBpZiAoKisreXlwICE9ICdcXCcpCi0gICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OwotICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
aWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOwotICAgICAgICB5eW4rKzsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0g
ICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9
Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBpZiAoISB5eXJlcykKLSAg
ICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5
eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVy
cm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KLSAgIFlZQ0hBUiB3aGlsZSBp
biBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAotICAg
aW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxs
LCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0
ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAw
IGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1
cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZwotICAgc2l6ZSBjYWxj
dWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4X2Vycm9yIChjaGFyICp5eXJl
c3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17Ci0gIGludCB5eW4gPSB5eXBhY3RbeXlz
dGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQot
ICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0
bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICBZ
WVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7Ci0gICAgICBl
bnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKLSAgICAgIGNoYXIgY29u
c3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAgICAgaW50IHl5eDsK
LQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0
YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0gICAgIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLwot
ICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKLSAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKLSAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKLSAgICAgIFlZ
Xygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMi
KTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAgICAgIGNoYXIgKnl5Zm10OwotICAgICAg
Y2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10g
PSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0
IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29u
c3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhw
ZWN0ZWQKLSAgICAgICAgICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQotICAgICAgICAgICAg
KyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQotICAgICAgICAgICAgICAgKiAo
c2l6ZW9mIHl5b3IgLSAxKSldOwotICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVj
dGluZzsKLQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQg
bmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICBZWUNIRUNLLiAgKi8KLSAgICAgIGludCB5eXhiZWdp
biA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9m
IGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBpbnQgeXljaGVja2xpbSA9IFlZ
TEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VO
UyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQgeXljb3VudCA9IDE7Ci0KLSAg
ICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAgeXlmbXQgPSB5eXN0cGNweSAo
eXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5
eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYg
eXl4ICE9IFlZVEVSUk9SKQotICAgICAgewotICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAgICAgIHsKLSAgICAgICAgeXljb3VudCA9IDE7
Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICAgIHl5Zm9ybWF0W3NpemVvZiB5eXVu
ZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAg
ICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgeXlzaXplMSA9IHl5
c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLSAgICAgICAgeXlzaXplX292ZXJm
bG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMTsKLSAg
ICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKLSAgICAgICAgeXlwcmVm
aXggPSB5eW9yOwotICAgICAgfQotCi0gICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOwotICAgICAg
eXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAgICAgeXlzaXplX292ZXJmbG93
IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgICAg
IGlmICh5eXNpemVfb3ZlcmZsb3cpCi0gICAgcmV0dXJuIFlZU0laRV9NQVhJTVVNOwotCi0gICAg
ICBpZiAoeXlyZXN1bHQpCi0gICAgewotICAgICAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBp
bmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgotICAgICAgICAgRG9uJ3QgaGF2ZSB1
bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KLSAgICAgICAgIHByb2R1
Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCi0gICAgICBj
aGFyICp5eXAgPSB5eXJlc3VsdDsKLSAgICAgIGludCB5eWkgPSAwOwotICAgICAgd2hpbGUgKCgq
eXlwID0gKnl5ZikgIT0gJ1wwJykKLSAgICAgICAgewotICAgICAgICAgIGlmICgqeXlwID09ICcl
JyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0gICAgICAgICAgeXlmICs9
IDI7Ci0gICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB5eXAr
KzsKLSAgICAgICAgICB5eWYrKzsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICAg
cmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCi0M
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNF
RCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZv
aWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5
eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vs
c2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXls
b2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hhciAqeXltc2c7Ci0gICAgaW50IHl5dHlw
ZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZWUxUWVBFICp5eWxvY2F0aW9ucDsKLSAg
ICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBZWVVTRSAoeXl2YWx1ZXApOwot
ICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0KLSAgaWYgKCF5eW1z
ZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5
dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7
Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQotfQotDAotCi0vKiBQcmV2ZW50
IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCi0jaWZkZWYgWVlQQVJT
RV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50
IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwot
I2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiBkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4
dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0t
LS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0j
ZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFS
QU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAocHA6OkNvbnRleHQqIGNv
bnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250ZXh0KQotICAgIHBwOjpDb250ZXh0KiBj
b250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAg
Ki8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0KLS8qIE51bWJlciBvZiBzeW50YXggZXJy
b3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLS8qIExvY2F0aW9uIGRhdGEgZm9yIHRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5bGxvYzsKLQotICBpbnQgeXlzdGF0ZTsK
LSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNo
aWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVz
OwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tl
biBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0g
IC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAq
LwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZ
U0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSAgLyogVGhy
ZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAgICAgYHl5bHMn
OiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUg
c2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8gcmVhbGxvY2F0
ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0
eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlz
c2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0
YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZUEUgKnl5dnMg
PSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAg
Ki8KLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07Ci0gIFlZTFRZUEUgKnl5bHMgPSB5eWxz
YTsKLSAgWVlMVFlQRSAqeXlsc3A7Ci0gIC8qIFRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIGVycm9y
IHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KLSAgWVlMVFlQRSB5eWVycm9yX3JhbmdlWzJdOwotCi0j
ZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTiksIHl5bHNw
IC09IChOKSkKLQotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8q
IFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9u
IGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0g
IFlZTFRZUEUgeXlsb2M7Ci0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMg
b2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNo
b3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3Rh
dHVzID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7ICAgICAvKiBDYXVz
ZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRl
cnMuCi0gICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawot
ICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3Rh
Y2suCi0gICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8K
LQotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2czsKLSAgeXlsc3AgPSB5eWxzOwotI2lm
IFlZTFRZUEVfSVNfVFJJVklBTAotICAvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGxvY2F0aW9u
IGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4gICovCi0gIHl5bGxvYy5maXJzdF9saW5lICAgPSB5eWxs
b2MubGFzdF9saW5lICAgPSAxOwotICB5eWxsb2MuZmlyc3RfY29sdW1uID0geXlsbG9jLmxhc3Rf
Y29sdW1uID0gMDsKLSNlbmRpZgotCi0gIGdvdG8geXlzZXRzdGF0ZTsKLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0
IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCi0gICAgIGhhdmUganVzdCBiZWVu
IHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLwot
ICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5c3NwID0geXlzdGF0ZTsKLQotICBpZiAo
eXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGhl
IGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8K
LSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7Ci0KLSNpZmRlZiB5eW92
ZXJmbG93Ci0gICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUg
dGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBtZW1vcnkuICAqLwotICAgIFlZ
U1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAg
ICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRk
cmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICBkYXRhIGluIHVzZSBp
biB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0gICAgICAgY29uZGl0
aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotICAg
ICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgIHl5b3Zl
cmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAgICAgICAgJnl5c3MxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVv
ZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3Ap
LAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlz
cyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8qIG5vIHl5b3Zl
cmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAq
LwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7Ci0gICAgICBpZiAoWVlNQVhERVBUSCA8
IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKLQotICAgICAgewot
ICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIHVuaW9uIHl5YWxsb2MgKnl5cHRy
ID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMg
KHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUg
KHl5dnMpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHMpOwotIyAgdW5kZWYgWVlTVEFDS19S
RUxPQ0FURQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlz
czEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQotICAg
ICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6
ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwotCi0gICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0gICAgICAgICAg
KHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAoeXlzcyArIHl5
c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFCT1JUOwotICAgIH0KLQotICBZWURQUklO
VEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCi0gIGdvdG8g
eXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAotYC0tLS0tLS0tLS0t
Ki8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhl
IGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVk
IG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRv
IGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4u
ICAqLwotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gWVlQQUNUX05JTkYp
Ci0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhl
YWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFSIGlz
IGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAq
LwotICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAgewotICAgICAgWVlEUFJJTlRGICgoc3Rk
ZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAgICB5eWNoYXIgPSBZWUxFWDsKLSAgICB9
Ci0KLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICB5eWNoYXIgPSB5eXRva2Vu
ID0gWVlFT0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0
LlxuIikpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFU
RSAoeXljaGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0KLSAgLyogSWYgdGhlIHByb3BlciBhY3Rp
b24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCi0gICAgIGRldGVj
dCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5biArPSB5eXRva2VuOwotICBp
ZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCi0g
ICAgZ290byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXluXTsKLSAgaWYgKHl5biA8PSAw
KQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQotICAg
IGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsK
LSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gIC8qIENv
dW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJy
b3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVzKQotICAgIHl5ZXJyc3RhdHVz
LS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLwotICBZWV9TWU1CT0xf
UFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERp
c2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNo
YXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKLQotICB5eXN0YXRlID0geXluOwot
ICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgKisreXlsc3AgPSB5eWxsb2M7Ci0gIGdvdG8geXluZXdz
dGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZv
ciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0gIHl5biA9IHl5ZGVm
YWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVycmxhYjsKLSAgZ290
byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eXJl
ZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVj
ZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYgWVlMRU4gaXMgbm9u
emVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgIGAk
JCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFM
IHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNv
bgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZB
TAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBh
bmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1
bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKLQotICAvKiBEZWZh
dWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXlsc3AgLSB5eWxl
biksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAg
ICB7Ci0gICAgICAgIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4
cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0ID0gY29udGV4dC0+b3V0
cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICh5eXZzcFsoMSkgLSAoMild
LnRsaXN0KS0+YmVnaW4oKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5lbmQoKSk7Ci0gICAg
ICAgIGRlbGV0ZSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKCh5eWxz
cFsoMSkgLSAoMyldKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAoeXl2c3BbKDEp
IC0gKDMpXS5zdmFsKSwgTlVMTCwgKHl5dnNwWygyKSAtICgzKV0udGxpc3QpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmlu
ZU1hY3JvKCh5eWxzcFsoMSkgLSAoNildKS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVu
YywgKHl5dnNwWygxKSAtICg2KV0uc3ZhbCksICh5eXZzcFsoMykgLSAoNildLnRsaXN0KSwgKHl5
dnNwWyg1KSAtICg2KV0udGxpc3QpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE6
Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oKHl5dnNwWygyKSAtICgz
KV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAg
ICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgKHl5dnNwWygyKSAtICgzKV0udGxp
c3QpID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0K
LSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQtPmlz
TWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhj
b250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkp
KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6Ci0KLSAgICB7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgcG9wQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0KTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6Ci0KLSAgICB7ICh5eXZhbC50bGlzdCkg
PSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjU6Ci0KLSAgICB7ICh5eXZhbC50bGlz
dCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAoeXl2YWwudGxp
c3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGlu
ZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2
c3BbKDEpIC0gKDMpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhu
ZXcgcHA6OlRva2VuKCh5eWxzcFsoMykgLSAoMyldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAo
eXl2c3BbKDMpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
ODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7
Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS50dmFs
KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI5OgotCi0gICAgewotICAgICAgICAo
eXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwu
dGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZhbCkpOwotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5l
dyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2
c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMxOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0udGxpc3Qp
OwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgyKV0udHZh
bCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoKLQotICAgIHsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDM1OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2Vu
KCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCAoeXl2c3BbKDEpIC0gKDEpXS5pdmFsKSwg
TlVMTCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9s
aW5lLCBJTlRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5l
dyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5U
LCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxz
cFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5z
dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM5OgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnWyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MDoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJ10nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDE6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICc8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQyOgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnPic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MzoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJygnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDQ6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICcpJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ1OgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAneyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NjoKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJ30nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICcuJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ4OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnKyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0OToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTA6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICcvJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUxOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MjoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTM6Ci0K
LSAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU0Ogot
Ci0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NToK
LQotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTY6
Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU3
OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1
ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyEnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
NTk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc6JzsgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDYwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSA2MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJywnOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc/JzsgO30KLSAgICBicmVhazsKLQotCi0v
KiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAg
fQotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxv
Yyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5eXZhbDsKLSAgKisreXlsc3AgPSB5
eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBE
ZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0
ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAgbnVtYmVyIHJlZHVjZWQgYnku
ICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZ
WU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlM
QVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAgIHl5c3RhdGUgPSB5eXRhYmxl
W3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tF
TlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjoKLSAgLyog
SWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJv
ci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAgICAgKyt5eW5lcnJzOwotI2lm
ICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8o
InN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplID0g
eXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0gICAgaWYgKHl5bXNnX2FsbG9j
IDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQotICAgICAg
ewotICAgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKLSAgICAgICAgaWYgKCEg
KHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
LSAgICAgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotICAgICAgICBpZiAo
eXltc2cgIT0geXltc2didWYpCi0gICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAg
ICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7Ci0gICAgICAgIGlm
ICh5eW1zZykKLSAgICAgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICB7Ci0gICAgICAgIHl5bXNnID0geXltc2didWY7Ci0gICAgICAgIHl5bXNnX2Fs
bG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgIGlmICgw
IDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLSAgICAgIHsKLSAgICAgICAgKHZv
aWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICAgICAgeXll
cnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2cpOwotICAgICAgfQotICAgIGVsc2UKLSAgICAg
IHsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7Ci0gICAgICAgIGlmICh5eXNpemUgIT0gMCkKLSAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOwotICAgICAgfQotICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gIHl5ZXJyb3JfcmFuZ2Vb
MF0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCi0gICAgewotICAgICAgLyog
SWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZ
RU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4g
ICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICBZWUFCT1JUOwotICAgIH0K
LSAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmci
LAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAg
ICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0gICAgfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5
IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAg
IHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3Ig
cmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNp
ZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0g
ICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBl
YXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAg
IGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsc3BbMS15eWxlbl07
Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlv
biB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4p
OwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHl5c3Rh
dGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIx
IC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAgLyogRWFjaCByZWFsIHRva2Vu
IHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAgICAg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCi0g
ICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8
PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotICAgICAgICB7Ci0gICAgICAg
ICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgIGlmICgwIDwgeXluKQotICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRl
IGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYg
KHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKLQotICAgICAgeXllcnJvcl9yYW5nZVswXSA9
ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0gICAgICAgICAg
eXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFD
SyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBU
OwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMV0gPSB5eWxsb2M7
Ci0gIC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywgYnV0IHdvdWxkIGNoYW5nZSB0aGUgbG9j
YXRpb24gb2YKLSAgICAgdGhlIGxvb2stYWhlYWQuICBZWUxPQyBpcyBhdmFpbGFibGUgdGhvdWdo
LiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAoeXllcnJvcl9yYW5nZSAtIDEpLCAyKTsK
LSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwot
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3Ap
OwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBU
IGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3RvIHl5cmV0dXJuOwotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLSNpZm5k
ZWYgeXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBo
ZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygi
bWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2gu
ICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hh
ciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29r
YWhlYWQiLAotICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7Ci0g
IC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0
cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KLSAgWVlQT1BTVEFD
SyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB3aGlsZSAoeXlz
c3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIs
Ci0gICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAg
ICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYgKHl5c3Mg
IT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZRVJST1Jf
VkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0gIHJldHVybiBZ
WUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2Nw
LCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotfQotCi12b2lk
IHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlv
bikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0
KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0OjpwYXJzZSgpCi17Ci0gICAg
eXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykgPT0gMCA/IHRydWUgOiBmYWxz
ZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWY4MDYuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFi
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1h
ZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGludGVyZmFjZSBmb3IgQmlz
b24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4
OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg
b3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2Yg
eW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJz
ZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhl
cmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBt
YXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdo
aWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBv
dXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwot
ICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3Bl
Y2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24g
aW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5k
ZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2Vu
cyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMK
LSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAg
SEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwK
LSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhB
U0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0g
MjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBI
QVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hf
VkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9P
QkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFO
VCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAy
NzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVm
aW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZE
RUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0j
ZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVG
SU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4
Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0j
ZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmlu
ZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5l
IEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0jaWYg
ISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVk
ZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2
YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19
Ci0vKiBMaW5lIDE0ODkgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5
eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAx
Ci0jZW5kaWYKLQotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQ
RV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGlu
ZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29s
dW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRp
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNjRl
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVwcm9jZXNzb3IgdXRpbGl0aWVzCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgY29w
eSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0IGJlIHVz
ZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcy4KKyNkZWZpbmUgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5
cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFt
ZSYpCisKKyNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHJlcHJvY2Vzc29yLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhOTc1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nv
ci52Y3Byb2oKQEAgLTAsMCArMSwzOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlz
dWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9InByZXByb2Nlc3NvciIKKwlQcm9qZWN0
R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCisJUm9vdE5hbWVz
cGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdv
cmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFt
ZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxh
dGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgor
CQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQi
CisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxS
ZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGli
cmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9
IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
NCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmln
dXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9y
eT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNo
YXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2Vi
U2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
TUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgor
CQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUi
CisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1
bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgor
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlX
YXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
TGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFt
ZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZv
cm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5
cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRv
clRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdl
dEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRy
dWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJS
ZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3Jt
TmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQo
UGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBl
PSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIx
IgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIy
IgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJ
CQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgor
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJ
CTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwv
UmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIK
KwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJ
CQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZG
fSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3Rp
dmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhw
YW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8
L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJo
O2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJz
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJ
bnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwv
R2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3Rs
X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMWNlNTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvc3RsX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gc3RsX3V0aWxzLmg6IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0jaWZuZGVmIENP
TU1PTl9TVExVVElMU19IXwotI2RlZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQotbmFtZXNwYWNl
IHBwCi17Ci0KLXN0cnVjdCBEZWxldGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZv
aWQgb3BlcmF0b3IoKSAoVCB4KSB7IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3QgRGVsZXRlU2Vj
b25kCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lkIG9wZXJhdG9y
KCkgKHN0ZDo6cGFpcjxBLCBCPiYgeCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIHBwCi0jZW5kaWYgLy8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rv
a2VuX3R5cGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3Rva2VuX3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQz
YTk0MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5f
VFlQRV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9IXwotCi0j
aW5jbHVkZSAicHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RP
S0VOX1RZUEVfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAppbmRleCA4OGQxOTZmLi4x
NTA1NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaApAQCAtNDcsNSArNDcsNCBAQCBl
eHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0
U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBj
aGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmMKaW5kZXggNjBiNjZiZC4uZmRlODUzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMKQEAgLTY2LDYgKzY2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgewog
ICAgIGNoYXIgKnA7CiB9IFN0cmluZ0lucHV0U3JjOwogCitzdGF0aWMgaW50IFNjYW5Gcm9tU3Ry
aW5nKGNvbnN0IGNoYXIgKnMpOworCiBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywg
eXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgcmV0dXJuIEVPRjsKQEAgLTczLDcgKzc1LDcg
QEAgc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQogCiBzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkge30KIAotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9z
Y2FuLCAmZW9mX3NjYW4sICZub29wIH07CitzdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0g
eyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKIAogc3RhdGljIGludCBi
eXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwogCkBAIC0xMjYsNiAr
MTI4LDE2IEBAIGludCBGcmVlU2Nhbm5lcih2b2lkKQogICAgIHJldHVybiAoRnJlZUNQUCgpKTsK
IH0KIAoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBjcHAt
PlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAt
PlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAg
U2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIHN0
cl9nZXRjaCgpCiAgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBzdHJpbmdz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuaAppbmRleCAyMzNkMWRjLi5iNjdjMWQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5u
ZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaApAQCAtNjksOSArNjksOSBAQCB0eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7
CiB9IElucHV0U3JjOwogCiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIElu
dGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIg
Kik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZyb20gdGhlIHN0cmluZyBtZW50
aW9uZWQuCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKIGludCBjaGVj
a19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhpdCBhIEVPRiBhYnJ1cHRs
eSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNn
LGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2co
Y29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVy
J3MuSW5mby5sb2cKIHZvaWQgU2V0TGluZU51bWJlcihpbnQpOwogdm9pZCBTZXRTdHJpbmdOdW1i
ZXIoaW50KTsKIHZvaWQgSW5jTGluZU51bWJlcih2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgK
aW5kZXggYzE5Zjc5Yy4uZTdkMGIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKQEAgLTEwNSw3
ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29w
ZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VM
b2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CiBTeW1i
b2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKIFN5bWJvbCAq
TG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQRXJyb3JUb0lu
Zm9Mb2coY2hhciAqKTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3Rva2Vucy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYwppbmRleCBkNjU4YzEyLi5iOTRjMDVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmMKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0
eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsyNjYsOCBAQCBpbnQgUmVh
ZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICBjaGFy
IHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKICAgICBpbnQgbHRva2VuLCBsZW47CiAg
ICAgY2hhciBjaDsKKyAgICBpbnQgYmFzZSwgYWNjdW07CisgICAgY2hhciBjaF92YWw7CiAKICAg
ICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgaWYgKGx0b2tlbiA+PSAwKSB7CkBAIC0z
MTUsMTggKzMxOCw0MSBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9JTlRD
T05TVEFOVDoKICAgICAgICAgICAgIGxlbiA9IDA7CisJICAgIGFjY3VtID0gMDsKICAgICAgICAg
ICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcg
JiYgY2ggPD0gJzknKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgaWYgKGNoID09ICcwJykgeworICAg
ICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgIGNo
ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2gg
PT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwor
ICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgIGNoID0g
bFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSA4OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjaF92YWwgPSAtMTsKKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdChjaCkp
CisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gdG9s
b3dlcihjaCkgLSAnYScgKyAxMDsKKworICAgICAgICAgICAgICAgIGlmIChjaF92YWwgPCAwIHx8
IGNoX3ZhbCA+PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgIGFjY3VtID0g
YWNjdW0gKiBiYXNlICsgY2hfdmFsOworICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBU
b2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7
CiAgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICAgICAgc3RyY3B5KHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2ludCA9IGFjY3VtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJygnOgog
ICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsKQEAgLTQxNCwx
MCArNDQwLDEwIEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAq
cywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKICAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAg
ICAgICBjYXNlIENQUF9JREVOVElGSUVSOgogICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklF
UjoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yo
c3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAg
ICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgogICAgICAg
ICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKQEAgLTQyNyw5ICs0
NTMsOSBAQCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGlmICh0b2tlbiA+PSAxMjcpCi0gICAgICAgICAgICAgICAgc3ByaW50
ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKKyAgICAgICAgICAg
ICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHRva2VuKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3ByaW50Zihz
dHIsICIlYyIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiJWMiLCB0b2tlbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKaW5kZXggODc2NmRmOS4u
ZGJmNGEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCkBAIC00OCw2ICs0OCw3IEBAIE5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICNpZiAh
ZGVmaW5lZChfX1RPS0VOU19IKQogI2RlZmluZSBfX1RPS0VOU19IIDEKIAorI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgogCiAjZGVm
aW5lIEVPRl9TWSAoLTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzhiNzMx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcApAQCAtMCwwICsxLDEyNyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAg
IDogbVNpbmsoc2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sKKyAgICAvLyBTYW1wbGluZyBv
cHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZUN1YmUoc0MxO3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgaW4gYm90aCB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4
dHVyZTJEKHMyMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJv
aihzMjE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIx
O3ZmNDsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzOyIp
OworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNfRUdMX2ltYWdlX2V4dGVybmFs
LgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgxO3ZmMjsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHBy
b3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRFJlY3RQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RFJlY3RQcm9qKDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBr
bm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25zIGxpa2Ugc2lu
LCBwb3csIGV0Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQg
YXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRob3NlIGFzIHdlbGwuCit2b2lk
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3Qg
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVycm9ycyA9IDA7CisKKyAgICAv
LyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBoIGRvZXMgbm90IHN1cHBvcnQg
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywKKyAgICAvLyBzbyB3ZSBnZW5l
cmF0ZSBlcnJvcnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2Fs
bFVzYWdlKGdyYXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20gZWFjaCBzYW1wbGVyLCB0cmF2
ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgZWFjaCB0aW1l
IHdlCisgICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgYXJl
IG5vdCBhbGxvd2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOworICAgICAgICAgaXRlciAhPSBn
cmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAg
ICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7CisgICAgICAgIGNsZWFyVmlz
aXRlZCgpOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5l
ZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAg
IGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVu
ZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAg
ICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSAqaXRlcjsKKyAgICAgICAg
YmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAg
ICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBub3QgcGVy
bWl0dGVkLlxuIjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkKK3sKKyAgICArK21OdW1FcnJv
cnM7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsubG9jYXRpb24o
bm9kZS0+Z2V0TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxs
KSBjb25zdAoreworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25DYWxsLT5pc1VzZXJEZWZpbmVk
KCkgJiYKKyAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50ZXJtRnVuY3Rpb25DYWxsLT5n
ZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwordm9pZCBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIp
Cit7CisgICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBtaWdodCBsZWFrIHNlbnNpdGl2
ZSBpbmZvcm1hdGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmljdCBzYW1wbGVyIGRlcGVuZGVu
dCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUgb3IgTE9EIGJpYXMgb2YgYQor
ICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNTYW1wbGluZ09wKHBhcmFtZXRl
ci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAgIHN3aXRjaCAocGFyYW1ldGVy
LT5nZXRBcmd1bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAgICAgICAgICAgICBiZWdpbkVy
cm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAg
IG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBl
cm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBjb29yZGluYXRl
IGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAvLyBUaGlyZCBhcmd1
bWVudCAoYmlhcykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNz
aW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisg
ICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3Bl
cmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNhbXBsZXIpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24p
Cit7CisgICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVybVNlbGVjdGlvbigpKTsKKyAg
ICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBw
ZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4iOworfQorCit2b2lkIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQorewor
ICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsKKyAgICBtU2luayA8PCAiQW4g
ZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBs
b29wIGNvbmRpdGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3ApCit7CisgICAgYmVn
aW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgpKTsKKyAgICBtU2luayA8PCAi
QW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgb24g
dGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAgICAgICAgPDwgbG9naWNhbE9w
LT5nZXRPcFN0cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRvci5cbiI7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTE2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaApAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBD
T01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1l
ZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIK
KworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZyA6IFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7CisgICAgdm9pZCBlbmZv
cmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQg
bnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lk
IHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5r
OworICAgIGludCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBT
dHJpbmdTZXQ7CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YzZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgiCisKK3ZvaWQgUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
Cit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAg
KyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAg
ICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbVNpbmsgPDwgIlNh
bXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzLlxuIjsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMDVmYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNs
dWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lu
a0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJ
bmZvU2lua0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxz
ZSwgZmFsc2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDAp
IHt9CisKKyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsg
cm9vdC0+dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51
bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJv
cnM7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hB
REVSX1RJTUlOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5jcHAKaW5kZXggNmE1Y2ZkMy4uMGNjMGI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCkBAIC05OTIsNiArOTkyLDIyIEBAIGJvb2wg
RGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7CiB9CiAK
Ky8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8vIHdlIGFs
c28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRl
cHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFj
a3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sK
KyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFk
YXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICBi
b29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwg
RDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJvb2wgRGlz
cGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVu
ZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CkBAIC0x
MDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNh
Z2UpIGNvbnN0CiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNw
bGF5OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3Bs
YXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4
ICE9IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5Ojpn
ZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CiAgICAgfQogICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNE
VVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKaW5kZXggNTAyODQzMS4uNGY3
ZGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgK
QEAgLTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7
CisgICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0Rldmlj
ZUxvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
Y3BwCmluZGV4IDA3YWQzY2YuLjAzOGIxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApAQCAtMSw2MzcgKzEsNjgyIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpTdXJmYWNlIGNs
YXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8vIHN1Y2ggYXMgdGhlIGNsaWVu
dCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KLS8vIEltcGxl
bWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2Vj
dGlvbiAyLjIgcGFnZSAzLgotCi0jaW5jbHVkZSA8dGNoYXIuaD4KLQotI2luY2x1ZGUgImxpYkVH
TC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLSNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSA8ZHdtYXBpLmg+Ci0KLW5hbWVzcGFjZSBlZ2wK
LXsKLQotbmFtZXNwYWNlCi17Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRvd3NWaXN0YSA9IE1BS0VX
T1JEKDB4MDAsIDB4MDYpOwotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzNyA9IE1BS0VXT1JEKDB4
MDEsIDB4MDYpOwotCi0vLyBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0
ZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIG9yZGVyaW5nCi0vLyBjb21wYXJpc29uLgotaW50
IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQotewotICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJz
aW9uKCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lvbikpOwot
ICAgIGludCBtaW5vclZlcnNpb24gPSBISUJZVEUoTE9XT1JEKHZlcnNpb24pKTsKLSAgICByZXR1
cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOwotfQotfQotCi1TdXJmYWNl
OjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdp
bmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAotICAgIDogbURpc3BsYXkoZGlz
cGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cpLCBtUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxM
OwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwot
ICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwot
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJF
OwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAgICBtUGl4ZWxBc3Bl
Y3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1F
OiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1SZW5kZXJCdWZmZXIg
PSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VS
VkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Ci0K
LSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRp
c3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3
aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1
cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWco
Y29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdo
dChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCi17Ci0gICAgbVN3
YXBDaGFpbiA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJlbmRlclRh
cmdldCA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1XaW5kb3dT
dWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1UZXh0dXJlRm9y
bWF0ID0gdGV4dHVyZUZvcm1hdDsKLSAgICBtVGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOwot
Ci0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FM
SU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAg
ICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZpb3IgPSBF
R0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgc2V0U3dh
cEludGVydmFsKDEpOwotfQotCi1TdXJmYWNlOjp+U3VyZmFjZSgpCi17Ci0gICAgdW5zdWJjbGFz
c1dpbmRvdygpOwotICAgIHJlbGVhc2UoKTsKLX0KLQotYm9vbCBTdXJmYWNlOjppbml0aWFsaXpl
KCkKLXsKLSAgICBBU1NFUlQoIW1Td2FwQ2hhaW4gJiYgIW1PZmZzY3JlZW5UZXh0dXJlICYmICFt
RGVwdGhTdGVuY2lsKTsKLQotICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkKLSAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2lu
ZG93LCBpZiB3ZSBhcmUgY29tcG9zaXRlZCwKLSAgICAvLyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50
IG9mIHF1ZXVpbmcgZG9uZSBieSBEV00gYmV0d2VlbiBvdXIgY2FsbHMgdG8KLSAgICAvLyBwcmVz
ZW50IGFuZCB0aGUgYWN0dWFsIHNjcmVlbi4KLSAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFy
YWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7Ci0gICAgICBCT09MIGlz
Q29tcG9zaXRlZDsKLSAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3NpdGlvbkVuYWJs
ZWQoJmlzQ29tcG9zaXRlZCk7Ci0gICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21w
b3NpdGVkKSB7Ci0gICAgICAgIERXTV9QUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtczsK
LSAgICAgICAgbWVtc2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2VudFBhcmFtcykp
OwotICAgICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9QQVJB
TUVURVJTKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jQnVmZmVyID0gMjsKLQotICAgICAgICBy
ZXN1bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBhcmFtcyk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICBFUlIoIlVuYWJsZSB0byBz
ZXQgcHJlc2VudCBwYXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQotewotICAg
IGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwot
ICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBtVGV4dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsK
LSAgICB9Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICgh
bVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1I
ZWlnaHQpOwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVu
dFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChmYWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRv
dyBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2lu
ZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVz
ZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwot
Ci0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCAmJiBtUmVuZGVyVGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLSAg
ICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICAvLyBF
dmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQg
cmVsZWFzZSBhbGwgcmVzb3VyY2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRv
IGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAgZGV2aWNlLT5F
dmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLSAgICByZWxlYXNlKCk7Ci0KLSAgICBEM0RQUkVTRU5U
X1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICBib29sIHVzZUZsaXBFeCA9IChnZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPj0gdmVy
c2lvbldpbmRvd3M3KSAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKTsKLQotICAgIC8vIEZs
aXBFeCBjYXVzZXMgdW5zZWVtbHkgc3RyZXRjaGluZyB3aGVuIHJlc2l6aW5nIHdpbmRvd3MgQU5E
IHdoZW4gb25lCi0gICAgLy8gZHJhd3Mgb3V0c2lkZSBvZiB0aGUgV01fUEFJTlQgY2FsbGJhY2su
IFdoaWxlIHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxlbSBpbgotICAgIC8vIHNpbmdsZSBwcm9jZXNz
IGFwcGxpY2F0aW9ucywgaXQgaXMgcGFydGljdWFybHkgbm90aWNlYWJsZSBpbiBtdWx0aXByb2Nl
c3MKLSAgICAvLyBhcHBsaWNhdGlvbnMuIFRoZXJlZm9yZSwgaWYgdGhlIGNyZWF0b3IgcHJvY2Vz
cyBvZiBvdXIgd2luZG93IGlzIG5vdCBpbgotICAgIC8vIHRoZSBjdXJyZW50IHByb2Nlc3MsIGRp
c2FibGUgdXNlIG9mIEZsaXBFeC4KLSAgICBEV09SRCB3aW5kb3dQSUQ7Ci0gICAgR2V0V2luZG93
VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZ3aW5kb3dQSUQpOwotICAgIGlmICh3aW5kb3dQSUQg
IT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IEQz
RFNXQVBFRkZFQ1RfRkxJUEVYIHdoZW4gZWl0aGVyIHRoZQotICAgIC8vIGRldmljZSBmb3JtYXQg
b3IgYmFjayBidWZmZXIgZm9ybWF0IGlzIG5vdCAzMi1iaXQuCi0gICAgSERDIGRldmljZUNvbnRl
eHQgPSBHZXREQygwKTsKLSAgICBpbnQgZGV2aWNlRm9ybWF0Qml0cyA9IEdldERldmljZUNhcHMo
ZGV2aWNlQ29udGV4dCwgQklUU1BJWEVMKTsKLSAgICBSZWxlYXNlREMoMCwgZGV2aWNlQ29udGV4
dCk7Ci0gICAgaWYgKG1Db25maWctPm1CdWZmZXJTaXplICE9IDMyIHx8IGRldmljZUZvcm1hdEJp
dHMgIT0gMzIpCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBpcyBhbHdheXMgVlNZTkNlZAotICAgIGlmIChtU3dh
cEludGVydmFsID09IDApCi0gICAgewotICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgYmFj
ayBidWZmZXIuCi0gICAgaWYgKG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotICAgIHsKLSAgICAg
ICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0
b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAg
Ly8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVuIHdlIHVzZSBEM0RTV0FQRUZG
RUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBh
IGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAgICAvLyBvciAyLiBUaGUgcnVu
dGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlz
Ci0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGluZyB1cywgb3IgYmV0dGVyLCBk
b2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRo
YXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJD
b3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0
b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVt
ZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdyZWF0ZXIuCi0gICAg
aWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNX
QVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBF
ZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZFQ1RfQ09QWSA6IEQz
RFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRS
VUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldp
ZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVy
SGVpZ2h0OwotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBD
aGFpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxM
OwotICAgICAgICBpZiAobURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpIHsKLSAgICAg
ICAgICAgIHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtT2Zm
c2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5W
QUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLQotICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3Vy
ZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgIAot
ICAgICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByZXNlcnZl
ZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZihpc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtV2luZG93KQotICAgIHsK
LSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVf
TU9OTywgJm1SZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIXByZXNlcnZlZFJlbmRlclRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywgTlVMTCwg
RkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1PZmZz
Y3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIH0K
LQotICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBSRUNUIHJl
Y3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgbVdpZHRoLCBt
SGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBzdGF0aWNfY2Fz
dDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRo
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gc3RhdGljX2Nhc3Q8TE9O
Rz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlY3QuYm90dG9tID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsK
LSAgICAgICAgfQotCi0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KHByZXNlcnZlZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJn
ZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOwotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktO
T1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxT
dXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQs
IHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBk
ZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7
Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGg7Ci0gICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQ7Ci0KLSAgICBtUHJlc2VudEludGVydmFsRGlydHkgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQotewotICAgIHJldHVybiBt
V2luZG93OwotfQotCi0KLSNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJm
YWNlT3duZXIiKQotI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVYVCgiRWdsOjpTdXJmYWNlUGFy
ZW50V25kUHJvYyIpCi0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9j
KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQot
ewotICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQotICB7Ci0gICAgICBTdXJmYWNlKiBzdXJmID0g
cmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25kLCBrU3VyZmFjZVByb3BlcnR5
KSk7Ci0gICAgICBpZihzdXJmKQotICAgICAgewotICAgICAgICAgIHN1cmYtPmNoZWNrRm9yT3V0
T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAgICB9Ci0gIH0KLSAgV05EUFJPQyBwcmV2V25kRnVuYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHduZCwga1BhcmVudFduZFByb2Mp
KTsKLSAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNzYWdlLCB3
cGFyYW0sIGxwYXJhbSk7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3coKQotewot
ICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBE
V09SRCBwcm9jZXNzSWQ7Ci0gICAgRFdPUkQgdGhyZWFkSWQgPSBHZXRXaW5kb3dUaHJlYWRQcm9j
ZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7Ci0gICAgaWYgKHByb2Nlc3NJZCAhPSBHZXRDdXJy
ZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0TGFzdEVycm9yKDApOwotICAgIExP
TkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJP
QywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsKLSAgICBp
ZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VTUykKLSAg
ICB7Ci0gICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHksIHJlaW50ZXJw
cmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2V0UHJvcChtV2luZG93LCBrUGFyZW50V25k
UHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFByb2MpKTsKLSAgICBtV2luZG93
U3ViY2xhc3NlZCA9IHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygp
Ci17Ci0gICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIHVuLXN1YmNsYXNzCi0gICAgTE9OR19QVFIgcGFyZW50V25kRnVuYyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdpbmRvdywga1BhcmVudFduZFBy
b2MpKTsKLQotICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5k
b3dQcm9jLgotICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0IGlzIGxpa2VseSB0
aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCi0gICAgLy8gaHduZCBhcyB3ZWxsIGFu
ZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBU
aGUKLSAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNs
YXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gRUdMIGNvbnRleHQsIG9yIHRvIHVu
c3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgotICAgIGlmKHBhcmVu
dFduZEZ1bmMpCi0gICAgewotICAgICAgICBMT05HX1BUUiBwcmV2V25kRnVuYyA9IFNldFdpbmRv
d0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRXbmRGdW5jKTsKLSAgICAgICAg
QVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VX
aW5kb3dQcm9jKSk7Ci0gICAgfQotCi0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3VyZmFjZVBy
b3BlcnR5KTsKLSAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsKLSAgICBt
V2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotfQotCi1ib29sIFN1cmZhY2U6OmNoZWNrRm9yT3V0
T2ZEYXRlU3dhcENoYWluKCkKLXsKLSAgICBSRUNUIGNsaWVudDsKLSAgICBpZiAoIUdldENsaWVu
dFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEdyb3cgdGhl
IGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdyb3cgbm93
IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KLSAgICBpbnQgY2xpZW50V2lkdGggPSBjbGll
bnQucmlnaHQgLSBjbGllbnQubGVmdDsKLSAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xpZW50LmJv
dHRvbSAtIGNsaWVudC50b3A7Ci0gICAgYm9vbCBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBn
ZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKLQotICAgIGlmIChzaXpl
RGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQotICAgIHsKLSAgICAgICAgcmVzZXRTd2Fw
Q2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJlbnRDb250ZXh0KCksIHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5KCkpLCB0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLURXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17
Ci0gICAgc3dpdGNoKGludGVydmFsKQotICAgIHsKLSAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBS
RVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7Ci0g
ICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVS
VkFMX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6c3dhcCgpCi17Ci0gICAgaWYgKG1Td2Fw
Q2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVM
TCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
c0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxh
eS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBjaGVj
a0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQg
d2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
UEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlz
IHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0g
ICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHgsIG1IZWlnaHQgLSB5
IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQotICAgICAgICB9
OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3Qu
Ym90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBt
SGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QubGVmdCA9PSByZWN0LnJpZ2h0
IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFp
bi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCByZXN1bHQgPT0g
RDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VSRU1PVkVEKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgZmFsc2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVy
biBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7Ci19
Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlEaXJlY3QzRFN1
cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLUlEaXJlY3QzRFRleHR1cmU5ICpTdXJmYWNl
OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0g
ICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi12b2lkIFN1cmZhY2U6OnNldFN3YXBJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1Td2FwSW50ZXJ2YWwgPT0gaW50ZXJ2
YWwpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1Td2FwSW50ZXJ2
YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRlcnZh
bCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKLSAgICBtU3dhcEludGVydmFsID0g
c3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRlcnZhbCgpKTsK
LQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3YXBJbnRlcnZhbCk7
Ci0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKLX0KLQotRUdMZW51bSBTdXJmYWNl
OjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVGb3JtYXQ7
Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1UZXh0dXJlVGFyZ2V0OwotfQotCi12b2lkIFN1cmZhY2U6OnNldEJvdW5kVGV4dHVy
ZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKLX0K
LQotZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUQzREZPUk1BVCBTdXJmYWNlOjpnZXRGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotfQotfQor
Ly8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gU3VyZmFjZS5jcHA6IEltcGxlbWVudHMgdGhl
IGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlDQorLy8g
c3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBi
dWZmZXJzLg0KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLg0KKw0KKyNpbmNsdWRlIDx0Y2hhci5o
Pg0KKw0KKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIg0KKw0KKyNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCINCisNCisjaW5jbHVkZSAi
bGliRUdML21haW4uaCINCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVk
ZSA8ZHdtYXBpLmg+DQorDQorbmFtZXNwYWNlIGVnbA0KK3sNCisNCituYW1lc3BhY2UNCit7DQor
Y29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsNCitj
b25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7DQorDQorLy8g
UmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIGEgZm9ybWF0IHN1
aXRhYmxlIGZvciBvcmRlcmluZw0KKy8vIGNvbXBhcmlzb24uDQoraW50IGdldENvbXBhcmFibGVP
U1ZlcnNpb24oKQ0KK3sNCisgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsNCisgICAg
aW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dPUkQodmVyc2lvbikpOw0KKyAgICBpbnQgbWlu
b3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7DQorICAgIHJldHVybiBNQUtFV09S
RChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7DQorfQ0KK30NCisNCitTdXJmYWNlOjpTdXJm
YWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywg
RUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIA0KKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkp
LCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkNCit7DQorICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0K
KyAgICBtQmFja0J1ZmZlciA9IE5VTEw7DQorICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOw0KKyAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCisgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOw0K
KyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIG1U
ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7DQorICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdM
X05PX1RFWFRVUkU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICog
RUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwg
YXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7DQorICAg
IG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisgICAgbVN3YXBJbnRlcnZh
bCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorDQorICAgIHN1YmNsYXNzV2luZG93
KCk7DQorfQ0KKw0KK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29u
ZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVp
Z2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4dHVyZVR5cGUpDQorICAgIDog
bURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJl
SGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpDQorew0KKyAgICBtU3dhcENoYWluID0gTlVM
TDsNCisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOw0KKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsN
CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7DQorICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVM
TDsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisgICAgbVRleHR1cmUgPSBOVUxM
Ow0KKyAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7DQorICAgIG1UZXh0dXJlVGFy
Z2V0ID0gdGV4dHVyZVR5cGU7DQorDQorICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCko
MS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwg
cGl4ZWwgYXNwZWN0IHJhdGlvDQorICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7
DQorICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsNCisgICAgbVN3YXBJ
bnRlcnZhbCA9IC0xOw0KKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7DQorfQ0KKw0KK1N1cmZhY2U6
On5TdXJmYWNlKCkNCit7DQorICAgIHVuc3ViY2xhc3NXaW5kb3coKTsNCisgICAgcmVsZWFzZSgp
Ow0KK30NCisNCitib29sIFN1cmZhY2U6OmluaXRpYWxpemUoKQ0KK3sNCisgICAgQVNTRVJUKCFt
U3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7DQorDQor
ICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkNCisgICAgICByZXR1cm4gZmFsc2U7DQorDQorICAg
IC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2luZG93LCBpZiB3ZSBhcmUg
Y29tcG9zaXRlZCwNCisgICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRv
bmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvDQorICAgIC8vIHByZXNlbnQgYW5kIHRoZSBh
Y3R1YWwgc2NyZWVuLg0KKyAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lv
bigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7DQorICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7
DQorICAgICAgSFJFU1VMVCByZXN1bHQgPSBEd21Jc0NvbXBvc2l0aW9uRW5hYmxlZCgmaXNDb21w
b3NpdGVkKTsNCisgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21wb3NpdGVkKSB7
DQorICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7DQorICAgICAg
ICBtZW1zZXQoJnByZXNlbnRQYXJhbXMsIDAsIHNpemVvZihwcmVzZW50UGFyYW1zKSk7DQorICAg
ICAgICBwcmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9QQVJBTUVURVJT
KTsNCisgICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7DQorDQorICAgICAgICByZXN1
bHQgPSBEd21TZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBhcmFtcyk7DQor
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICAgIEVSUigiVW5hYmxlIHRvIHNl
dCBwcmVzZW50IHBhcmFtZXRlcnM6IDB4JTA4WCIsIHJlc3VsdCk7DQorICAgICAgfQ0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQ0K
K3sNCisgICAgaWYgKG1Td2FwQ2hhaW4pDQorICAgIHsNCisgICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsNCisgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlm
IChtQmFja0J1ZmZlcikNCisgICAgew0KKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsN
CisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRo
U3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAg
ICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1SZW5kZXJU
YXJnZXQpDQorICAgIHsNCisgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCisgICAg
ICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVu
VGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsN
CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAo
bVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsN
CisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBtU2hhcmVIYW5kbGUg
PSBOVUxMOw0KK30NCisNCitib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkNCit7DQorICAg
IGlmICghbVdpbmRvdykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKG1X
aWR0aCwgbUhlaWdodCk7DQorICAgIH0NCisNCisgICAgUkVDVCB3aW5kb3dSZWN0Ow0KKyAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkNCisgICAg
ew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisNCisgICAgICAgIEVSUigiQ291bGQgbm90IHJl
dHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0K
KyAgICB9DQorDQorICAgIHJldHVybiByZXNldFN3YXBDaGFpbih3aW5kb3dSZWN0LnJpZ2h0IC0g
d2luZG93UmVjdC5sZWZ0LCB3aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wKTsNCit9
DQorDQorYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBp
bnQgYmFja2J1ZmZlckhlaWdodCkNCit7DQorICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgaWYgKGRldmljZSA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgLy8gRXZpY3QgYWxs
IG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2Ug
YWxsIHJlc291cmNlcw0KKyAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1
cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4NCisgICAgZGV2aWNlLT5FdmljdE1h
bmFnZWRSZXNvdXJjZXMoKTsNCisNCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQ
YXJhbWV0ZXJzID0gezB9Ow0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisNCisgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxG
b3JtYXQ7DQorICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1
c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguDQorICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBEaXJl
Y3RYIGRvY3MgYXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0IHRoaXMgdG8gMQ0KKyAgICAv
LyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRo
YXQgZWl0aGVyIGl0IGlzDQorICAgIC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0IHRlbGxpbmcg
dXMsIG9yIGJldHRlciwgZG9pbmcgc29tZXRoaW5nIHNtYXJ0DQorICAgIC8vIGJlaGluZCB0aGUg
c2NlbmVzIGtub3dpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIG1vcmUuDQorICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0Ow0KKyAgICBwcmVzZW50
UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7DQorICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkZsYWdzID0gMDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRv
dyA9IGdldFdpbmRvd0hhbmRsZSgpOw0KKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkDQor
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05P
TkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJl
c2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFsOw0KKyAgICBwcmVzZW50UGFyYW1l
dGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOw0KKyAgICBwcmVzZW50UGFy
YW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7DQorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsNCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7DQorDQorICAgIC8vIFJlbGVhc2Ugc3BlY2lm
aWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQs
IHdoaWxlIHRoZQ0KKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRo
ZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLg0KKyAgICBpZiAobVN3YXBDaGFp
bikNCisgICAgew0KKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbVN3
YXBDaGFpbiA9IE5VTEw7DQorICAgIH0NCisNCisgICAgaWYgKG1CYWNrQnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOw0KKyAgICAgICAgbUJhY2tCdWZmZXIg
PSBOVUxMOw0KKyAgICB9DQorDQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkNCisgICAgew0K
KyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsNCisgICAgICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBpZiAobURlcHRoU3RlbmNpbCkNCisg
ICAgew0KKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICAgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsNCisg
ICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOw0KKyAgICBpZiAoIW1XaW5kb3cgJiYgbURp
c3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpDQorICAgIHsNCisgICAgICAgIHBTaGFyZUhh
bmRsZSA9ICZtU2hhcmVIYW5kbGU7DQorICAgIH0NCisNCisgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhh
bmRsZSk7DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7DQorICAg
ICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7
DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxz
ZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJl
bmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7DQorDQorICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5U
ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOw0KKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQ0KKyAgICB7
DQorICAgICAgICBSRUNUIHJlY3QgPQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIDAsIDAsDQor
ICAgICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0DQorICAgICAgICB9Ow0KKw0KKyAgICAgICAgaWYg
KHJlY3QucmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAo
cmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVySGVpZ2h0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7DQorICAgICAgICB9DQorDQorICAgICAgICBt
RGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRj
aFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRF
WEZfTk9ORSk7DQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICAg
ICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgaWYgKG1XaW5k
b3cpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3
YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsNCisNCisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8
IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUKTsNCisNCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBz
d2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsNCisgICAg
ICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorDQorICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVy
KDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOw0KKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUNvbmZpZy0+bURl
cHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikNCisgICAgew0KKyAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0
aVNhbXBsZVR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwgJm1E
ZXB0aFN0ZW5jaWwsIE5VTEwpOw0KKw0KKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZB
TElEQ0FMTCk7DQorDQorICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3Rl
bmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsNCisgICAg
ICAgICAgICByZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3Io
cmVzdWx0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3Rp
ZnlEZXZpY2VMb3N0KCk7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlcldpZHRoOw0KKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckhlaWdodDsNCisNCisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7DQorICAgIHJl
dHVybiB0cnVlOw0KK30NCisNCitib29sIFN1cmZhY2U6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xp
bnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQ0KK3sNCisgICAgaWYgKCFtU3dhcENo
YWluKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAo
eCArIHdpZHRoID4gbVdpZHRoKQ0KKyAgICB7DQorICAgICAgICB3aWR0aCA9IG1XaWR0aCAtIHg7
DQorICAgIH0NCisNCisgICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQ0KKyAgICB7DQorICAg
ICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsNCisgICAgfQ0KKw0KKyAgICBpZiAod2lkdGggPT0g
MCB8fCBoZWlnaHQgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0N
CisNCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgp
Ow0KKw0KKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zDQorICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOw0KKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsNCisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsNCisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7
DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9O
RSk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFM
U0UpOw0KKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwg
MCk7DQorICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
RDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7DQorICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7DQor
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNF
KTsNCisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsNCisgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7DQorDQorICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1C
YWNrQnVmZmVyKTsNCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOw0K
Kw0KKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOw0KKyAgICBk
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VM
RUNUQVJHMSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NP
TE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7DQorICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsNCisgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOw0KKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lO
VCk7DQorICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQz
RFRBRERSRVNTX0NMQU1QKTsNCisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOw0KKyAgICBkZXZpY2UtPlNldEZWRihEM0RG
VkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOw0KKw0KKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQg
PSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsNCisgICAgZGV2aWNlLT5TZXRW
aWV3cG9ydCgmdmlld3BvcnQpOw0KKw0KKyAgICBmbG9hdCB4MSA9IHggLSAwLjVmOw0KKyAgICBm
bG9hdCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOw0KKyAgICBmbG9hdCB4MiA9
ICh4ICsgd2lkdGgpIC0gMC41ZjsNCisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41
ZjsNCisNCisgICAgZmxvYXQgdTEgPSB4IC8gZmxvYXQobVdpZHRoKTsNCisgICAgZmxvYXQgdjEg
PSB5IC8gZmxvYXQobUhlaWdodCk7DQorICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9h
dChtV2lkdGgpOw0KKyAgICBmbG9hdCB2MiA9ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQp
Ow0KKw0KKyAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2
Mn0sDQorICAgICAgICAgICAgICAgICAgICAgICAge3gyLCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYy
fSwNCisgICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19
OyAgIC8vIHgsIHksIHosIHJodywgdSwgdg0KKw0KKyAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgp
Ow0KKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVh
ZCwgNiAqIHNpemVvZihmbG9hdCkpOw0KKyAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsNCisNCisg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOw0KKw0KKyAgICBSRUNUIHJlY3QgPQ0KKyAg
ICB7DQorICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwNCisgICAgICAgIHggKyB3aWR0
aCwgbUhlaWdodCAtIHkNCisgICAgfTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENo
YWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7DQorDQorICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdldEN1cnJlbnRD
b250ZXh0KCkpOw0KKyAgICBpZiAoY29udGV4dCkNCisgICAgew0KKyAgICAgICAgY29udGV4dC0+
bWFya0FsbFN0YXRlRGlydHkoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJl
c3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOw0KKw0KKyAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigp
Ow0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dI
YW5kbGUoKQ0KK3sNCisgICAgcmV0dXJuIG1XaW5kb3c7DQorfQ0KKw0KKw0KKyNkZWZpbmUga1N1
cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIiKQ0KKyNkZWZpbmUga1BhcmVu
dFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQ0KKw0KK3N0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5kb3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdl
LCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBhcmFtKQ0KK3sNCisgIGlmIChtZXNzYWdlID09IFdN
X1NJWkUpDQorICB7DQorICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Vy
ZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOw0KKyAgICAgIGlmKHN1cmYp
DQorICAgICAgew0KKyAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigp
Ow0KKyAgICAgIH0NCisgIH0NCisgIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVycHJldF9j
YXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7DQorICByZXR1cm4g
Q2FsbFdpbmRvd1Byb2MocHJldlduZEZ1bmMsIGh3bmQsIG1lc3NhZ2UsIHdwYXJhbSwgbHBhcmFt
KTsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdygpDQorew0KKyAgICBpZiAo
IW1XaW5kb3cpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBEV09S
RCBwcm9jZXNzSWQ7DQorICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vz
c0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOw0KKyAgICBpZiAocHJvY2Vzc0lkICE9IEdldEN1cnJl
bnRQcm9jZXNzSWQoKSB8fCB0aHJlYWRJZCAhPSBHZXRDdXJyZW50VGhyZWFkSWQoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIFNldExhc3RFcnJvcigwKTsNCisg
ICAgTE9OR19QVFIgb2xkV25kUHJvYyA9IFNldFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9X
TkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93UHJvYykpOw0K
KyAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VT
UykNCisgICAgew0KKyAgICAgICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVy
dHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7DQorICAgIFNldFByb3AobVdpbmRv
dywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7
DQorICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsNCit9DQorDQordm9pZCBTdXJmYWNlOjp1
bnN1YmNsYXNzV2luZG93KCkNCit7DQorICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIC8vIHVuLXN1YmNsYXNzDQorICAg
IExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQ
cm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7DQorDQorICAgIC8vIENoZWNrIHRoZSB3aW5k
b3dwcm9jIGlzIHN0aWxsIFN1cmZhY2VXaW5kb3dQcm9jLg0KKyAgICAvLyBJZiB0aGlzIGFzc2Vy
dCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2Vk
IHRoZQ0KKyAgICAvLyBod25kIGFzIHdlbGwgYW5kIGRpZCBub3QgdW5zdWJjbGFzcyBiZWZvcmUg
ZGVzdHJveWluZyBpdHMgRUdMIGNvbnRleHQuIFRoZQ0KKyAgICAvLyBhcHBsaWNhdGlvbiBzaG91
bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVyIHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhl
DQorICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5n
IHRoZSBFR0wgY29udGV4dC4NCisgICAgaWYocGFyZW50V25kRnVuYykNCisgICAgew0KKyAgICAg
ICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBf
V05EUFJPQywgcGFyZW50V25kRnVuYyk7DQorICAgICAgICBBU1NFUlQocHJldlduZEZ1bmMgPT0g
cmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsNCisgICAgfQ0K
Kw0KKyAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHkpOw0KKyAgICBSZW1v
dmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsNCisgICAgbVdpbmRvd1N1YmNsYXNzZWQg
PSBmYWxzZTsNCit9DQorDQorYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFp
bigpDQorew0KKyAgICBSRUNUIGNsaWVudDsNCisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdp
bmRvd0hhbmRsZSgpLCAmY2xpZW50KSkNCisgICAgew0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICAvLyBHcm93IHRoZSBidWZm
ZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBh
dm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uDQorICAgIGludCBjbGllbnRXaWR0aCA9IGNsaWVudC5y
aWdodCAtIGNsaWVudC5sZWZ0Ow0KKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xpZW50LmJvdHRv
bSAtIGNsaWVudC50b3A7DQorICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0
V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7DQorDQorICAgIGlmIChzaXpl
RGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQ0KKyAgICB7DQorICAgICAgICByZXNldFN3
YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsNCisgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQo
KSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMp
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgcmV0
dXJuIGZhbHNlOw0KK30NCisNCitEV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50
IGludGVydmFsKQ0KK3sNCisgICAgc3dpdGNoKGludGVydmFsKQ0KKyAgICB7DQorICAgICAgY2Fz
ZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7DQorICAgICAgY2FzZSAx
OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7DQorICAgICAgY2FzZSAyOiByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9UV087DQorICAgICAgY2FzZSAzOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9USFJFRTsNCisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVS
VkFMX0ZPVVI7DQorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAg
ICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOw0KK30NCisNCitib29sIFN1cmZh
Y2U6OnN3YXAoKQ0KK3sNCisgICAgcmV0dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwgbUhlaWdo
dCk7DQorfQ0KKw0KK2Jvb2wgU3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50
IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkNCit7DQorICAgIGlmICghbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQpDQorICAgIHsNCisgICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFi
b3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLg0KKyAgICAgICAgcmV0dXJuIHRydWU7DQor
ICAgIH0NCisgICAgDQorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsN
Cit9DQorDQorRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtV2lkdGg7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdA0KK3sN
CisgICAgcmV0dXJuIG1IZWlnaHQ7DQorfQ0KKw0KK0VHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkOw0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuDQorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpDQorew0KKyAgICBpZiAobVJlbmRlclRh
cmdldCkNCisgICAgew0KKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7DQorICAgIH0N
CisNCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkN
Cit7DQorICAgIGlmIChtRGVwdGhTdGVuY2lsKQ0KKyAgICB7DQorICAgICAgICBtRGVwdGhTdGVu
Y2lsLT5BZGRSZWYoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsNCit9
DQorDQorSURpcmVjdDNEVGV4dHVyZTkgKlN1cmZhY2U6OmdldE9mZnNjcmVlblRleHR1cmUoKQ0K
K3sNCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQ0KKyAgICB7DQorICAgICAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZS0+QWRkUmVmKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1PZmZzY3JlZW5U
ZXh0dXJlOw0KK30NCisNCit2b2lkIFN1cmZhY2U6OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50
ZXJ2YWwpDQorew0KKyAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBpbnRlcnZhbCkNCisgICAgew0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICBtU3dhcEludGVydmFsID0gaW50
ZXJ2YWw7DQorICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVydmFsLCBtRGlz
cGxheS0+Z2V0TWluU3dhcEludGVydmFsKCkpOw0KKyAgICBtU3dhcEludGVydmFsID0gc3RkOjpt
aW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJbnRlcnZhbCgpKTsNCisNCisg
ICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsNCisg
ICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsNCit9DQorDQorRUdMZW51bSBTdXJmYWNl
OjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZUZvcm1h
dDsNCit9DQorDQorRUdMZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlVGFyZ2V0KCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsNCit9DQorDQordm9pZCBTdXJmYWNlOjpzZXRC
b3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkNCit7DQorICAgIG1UZXh0dXJlID0g
dGV4dHVyZTsNCit9DQorDQorZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJl
KCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9DQorDQorRDNERk9STUFUIFN1
cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRl
clRhcmdldEZvcm1hdDsNCit9DQorfQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmgKaW5kZXggMzUyNjBkZS4uNDBiZDcwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKQEAgLTY5LDYgKzY5LDcgQEAgcHJpdmF0
ZToKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwogICAgIElEaXJlY3QzRFN3YXBDaGFp
bjkgKm1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwogICAg
IElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwogICAgIElEaXJlY3QzRFN1cmZhY2U5
KiBtUmVuZGVyVGFyZ2V0OwogICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVy
ZTsKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7
CiAgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CiAgICAgYm9vbCByZXNldFN3YXBDaGFpbihp
bnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7CisgICAgYm9vbCBzd2Fw
UmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7CiAg
ICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwogCiAgICAg
Y29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNl
IGlzIGNyZWF0ZWQgZm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wuY3BwCmluZGV4IDRiN2Y5ZTEuLjUwODlkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKQEAgLTExMDgsNiArMTEwOCwxMSBAQCBFR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoRUdMRGlzcGxheSBkcHksIEVHTFN1
cmZhY2Ugc3VyZmFjZSwgRUdMaQogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBpZiAoeCA8IDAg
fHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAg
fQorCiAgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CiAgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19j
YXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAppbmRleCA2NmNkNWMwLi4xYjQ2NjRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAKQEAgLTEsNDI3NiArMSw0MzM5IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb250ZXh0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBz
dGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBH
TEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0luZGV4
RGF0YU1hbmFnZXIuaCIKLQotI3VuZGVmIG5lYXIKLSN1bmRlZiBmYXIKLQotbmFtZXNwYWNlIGds
Ci17Ci1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtQ29uZmlnKGNvbmZpZykKLXsKLSAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZh
bHNlKTsgICAvLyBVbmltcGxlbWVudGVkCi0KLSAgICBtRGlzcGxheSA9IE5VTEw7Ci0gICAgbURl
dmljZSA9IE5VTEw7Ci0KLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgw
KTsKLQotICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci0KLSAgICBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFs
dWUgPSAwOwotCi0gICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7Ci0gICAgbVN0YXRlLmN1bGxN
b2RlID0gR0xfQkFDSzsKLSAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOwotICAgIG1TdGF0
ZS5kZXB0aFRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGVwdGhGdW5jID0gR0xfTEVTUzsKLSAg
ICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9P
TkU7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLmRl
c3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVS
TzsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwotICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRDb2xv
ci5yZWQgPSAwOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsKLSAgICBtU3RhdGUu
YmxlbmRDb2xvci5ibHVlID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0g
R0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNp
bE1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0
ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
ID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOwotICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX0tFRVA7
Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9L
RUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAg
IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0RmFjdG9yID0gMC4wZjsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsK
LSAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNh
bXBsZUNvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAx
LjBmOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNlOwotICAgIG1TdGF0
ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOwotICAgIG1T
dGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7Ci0gICAgbVN0YXRlLmZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7Ci0KLSAgICBtU3RhdGUubGlu
ZVdpZHRoID0gMS4wZjsKLQotICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgIG1TdGF0ZS52
aWV3cG9ydFkgPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuSGVpZ2h0OwotICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7Ci0gICAgbVN0YXRlLnpGYXIg
PSAxLjBmOwotCi0gICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKLSAgICBtU3RhdGUuc2Npc3Nvclkg
PSAwOwotICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0
aDsKLSAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdo
dDsKLQotICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiA9IHRydWU7Ci0gICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOwotICAgIG1T
dGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7Ci0gICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7
Ci0KLSAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwotICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
bVJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICAv
LyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKLSAgICAvLyBJbiB0aGUg
aW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2Rp
bWVuc2lvbmFsCi0gICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNw
ZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nl
c3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRl
ZCBhcyB0ZXh0dXJlCi0gICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCi0K
LSAgICBtVGV4dHVyZTJEWmVyby5zZXQobmV3IFRleHR1cmUyRCgwKSk7Ci0gICAgbVRleHR1cmVD
dWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFwKDApKTsKLQotICAgIG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID0gMDsKLSAgICBiaW5kQXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZEVsZW1lbnRB
cnJheUJ1ZmZlcigwKTsKLSAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7Ci0gICAgYmluZFRleHR1
cmUyRCgwKTsKLSAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAgIGJpbmREcmF3RnJhbWVi
dWZmZXIoMCk7Ci0gICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLQotICAgIG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSA9IDA7Ci0KLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRl
LnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBm
YWxzZTsKLQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0gICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBOVUxMOwotICAgIG1CbGl0ID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7
Ci0KLSAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLSAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7
Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLSAgICBtT3V0T2ZNZW1vcnkgPSBmYWxz
ZTsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICBtSGFz
QmVlbkN1cnJlbnQgPSBmYWxzZTsKLSAgICBtQ29udGV4dExvc3QgPSBmYWxzZTsKLSAgICBtUmVz
ZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNl
dHMgPyBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FU
SU9OX0VYVCk7Ci0gICAgbVJvYnVzdEFjY2VzcyA9IHJvYnVzdEFjY2VzczsKLQotICAgIG1TdXBw
b3J0c0RYVDFUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IGZh
bHNlOwotICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0V2
ZW50UXVlcmllcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBmYWxz
ZTsKLSAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKLSAgICBtTWF4U3VwcG9y
dGVkU2FtcGxlcyA9IDA7Ci0gICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7Ci0gICAg
bWFya0FsbFN0YXRlRGlydHkoKTsKLX0KLQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGlm
IChtU3RhdGUuY3VycmVudFByb2dyYW0gIT0gMCkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSk7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVN0YXRl
LmN1cnJlbnRQcm9ncmFtID0gMDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1h
cC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVy
TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0K
LQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBl
KyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhU
VVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAgIG1JbmNvbXBsZXRlVGV4dHVy
ZXNbdHlwZV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUuYWN0
aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwotICAgIH0KLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAg
bVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7Ci0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQo
TlVMTCk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7Ci0KLSAgICBkZWxldGUg
bVZlcnRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBk
ZWxldGUgbUJsaXQ7Ci0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwotCi0gICAgaWYgKG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUpCi0gICAgewotICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwotfQot
Ci12b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQotewotICAgIG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtRGV2aWNl
ID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCi0g
ICAgewotICAgICAgICBtRGV2aWNlQ2FwcyA9IG1EaXNwbGF5LT5nZXREZXZpY2VDYXBzKCk7Ci0K
LSAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMs
IG1EZXZpY2UpOwotICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5h
Z2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOwotCi0g
ICAgICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA+PSBEM0RQU19WRVJTSU9OKDMsIDApOwotICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0
dXJlID0gbURpc3BsYXktPmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBw
b3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKTsKLSAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1EaXNwbGF5LT5nZXRJbnN0YW5j
aW5nU3VwcG9ydCgpOwotCi0gICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNh
cHMuTWF4VGV4dHVyZUhlaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSk7Ci0gICAgICAg
IG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9u
LCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAg
ICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOwot
ICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMihtTWF4VGV4dHVyZURpbWVuc2lvbikgKyAx
OwotICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVs
PSVkIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVy
ZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7
Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9Y
OFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgICAgICBEM0RGTVRf
RDI0UzgKLSAgICAgICAgfTsKLQotICAgICAgICBpbnQgbWF4ID0gMDsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplb2YocmVuZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9S
TUFUKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5
ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAg
bURpc3BsYXktPmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBt
dWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVy
QnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3Ig
KGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBE
M0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsK
LQotICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IG1EaXNwbGF5
LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRFhUMVRleHR1
cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9y
dHNEWFQzVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7Ci0gICAg
ICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3BsYXktPmdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBw
b3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDE2
VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNG
bG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7
Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotCi0g
ICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4
ID49ICgxIDw8IDE2KTsKLQotICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0g
MDsKLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
bU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpbml0RXh0
ZW5zaW9uU3RyaW5nKCk7Ci0gICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOwotCi0gICAgICAg
IG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAg
ICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAg
ICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAg
ICBtU3RhdGUuc2Npc3NvclggPSAwOwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAg
ICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKLSAgICAgICAg
bVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAgICBt
SGFzQmVlbkN1cnJlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5n
IERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8g
dGhlICcwJyBuYW1lcwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0
ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgQ29sb3JidWZm
ZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1ZmZlcihkZWZhdWx0UmVuZGVyVGFyZ2V0
KTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcg
RGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0
aFN0ZW5jaWxidWZmZXJaZXJvKTsKLQotICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZl
clplcm8pOwotCi0gICAgaWYgKGRlZmF1bHRSZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBk
ZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoU3Rl
bmNpbCkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIH0KLSAg
ICAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHdpbGwg
c2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3Rh
dGUgaXMgc2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lgotdm9pZCBDb250ZXh0OjptYXJrQWxsU3Rh
dGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFNbdF0gPSAw
OwotICAgIH0KLQotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURjsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFs
VlNbdF0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7Ci0gICAg
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVwdGhidWZmZXJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gZmFsc2U7
Ci0gICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVyVGFyZ2V0RGVz
Y0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJr
U3RhdGVEaXJ0eSgpOwotCi0gICAgbUNsZWFyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbUN1bGxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtTWFz
a1N0YXRlRGlydHkgPSB0cnVlOwotICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1T
dGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbUZyb250RmFj
ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAgICBtQ2FjaGVk
Q3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9z
dCgpCi17Ci0gICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQpCi0gICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVF9F
WFQ7Ci0gICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc0NvbnRl
eHRMb3N0KCkKLXsKLSAgICByZXR1cm4gbUNvbnRleHRMb3N0OwotfQotCi12b2lkIENvbnRleHQ6
OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQg
YWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7Ci0gICAgbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwotICAgIG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFs
cGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpCi17Ci0g
ICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFs
dWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRD
dWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUp
Ci0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOwotICAgICAgICBtQ3VsbFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2Uo
R0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250OwotICAgICAgICBtRnJvbnRGYWNl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9v
bCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbURlcHRoU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5h
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCi17Ci0gICAgaWYgKG1TdGF0
ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoRnVu
YyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIp
Ci17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7Ci0gICAgbVN0YXRlLnpGYXIgPSB6RmFyOwot
fQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0
YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuYmxlbmQgPSBlbmFi
bGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wg
Q29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuYmxl
bmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0Is
IEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpCi17
Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwKLSAgICAgICAg
bVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKLSAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBo
YSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBz
b3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdCOwotICAgICAg
ICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOwotICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwg
ZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQotewotICAgIGlmIChtU3RhdGUu
YmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVu
ICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fAot
ICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3Iu
Z3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IGJsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZEVxdWF0
aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pCi17Ci0gICAgaWYg
KG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8Ci0gICAgICAgIG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Ci0gICAgICAgIG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRlc3QoYm9vbCBl
bmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU3RlbmNpbFRl
c3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxUZXN0OwotfQot
Ci12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGlu
dCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVu
Y2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBz
dGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7Ci0gICAgICAgIG1TdGVu
Y2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVm
LCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tG
dW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
IT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayAhPSBz
dGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0g
c3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAoc3RlbmNp
bEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFdyaXRlbWFzayhH
THVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2so
R0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJh
Y2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCi0gICAgewotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFzazsKLSAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NE
ZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLXsKLSAgICBpZiAobVN0YXRl
LnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOwotICAgICAgICBtU3Rl
bmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVu
Y2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykKLXsKLSAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0ZhaWwgfHwKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0
aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVu
Y2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwotICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQ
b2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29u
T2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZz
ZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7Ci0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZs
b2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciAhPSBmYWN0
b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOwotICAgICAgICBt
U3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUFs
cGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBo
YVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVBbHBo
YVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAg
IGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wg
aW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8
fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OwotICAgICAgICBtU2FtcGxlU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9IGVuYWJsZWQpCi0g
ICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOwotICAgICAgICBtU2Np
c3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NjaXNz
b3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zY2lzc29yVGVzdDsK
LX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQotewotICAgIGlmICht
U3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGl0aGVyID0g
ZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ym9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3Rh
dGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRo
KQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludCA9IGhpbnQ7Ci0gICAgLy8gVE9ETzogUHJvcGFnYXRlIHRoZSBoaW50IHRv
IHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3cml0ZQotICAgIC8vIGRkeCwgZGR4X2NvYXJz
ZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRoZSBoaW50LgotICAgIC8vIElnbm9yZSBmb3Ig
bm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGlnbm9yZSBoaW50LgotfQot
Ci12b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4Owot
ICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OwotICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lk
dGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OwotfQotCi12b2lkIENvbnRl
eHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5z
Y2lzc29yWSAhPSB5IHx8IAotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5z
Y2lzc29yWCA9IHg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7Ci0gICAgICAgIG1TdGF0
ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVl
LCBib29sIGFscGhhKQotewotICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBt
U3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFz
a0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpCi0gICAgewot
ICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOwotICAgICAgICBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOwot
ICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbU1hc2tTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJv
b2wgbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIodW5zaWdu
ZWQgaW50IGFjdGl2ZSkKLXsKLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKLX0K
LQotR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0Ojpn
ZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZHJh
d0ZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwotfQotCi1H
THVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVy
biBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFjdGl2
ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0g
TlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2
ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAg
ICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnlPYmplY3QpCi0g
ICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJs
ZWQpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJs
ZWQgPSBlbmFibGVkOwotfQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZl
cnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCi17Ci0gICAgcmV0dXJuIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVm
ZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9p
bnRlcikKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVm
ZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9y
bWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJO
dW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKLX0KLQotY29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAotewotICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7Ci19Ci0KLWNv
bnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkK
LXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3RhdGUucGFja0Fs
aWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OwotfQotCi12b2lk
IENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0
YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0
VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2
ZXJzZVJvd09yZGVyKQotewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJz
ZVJvd09yZGVyOwotfQotCi1ib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKLX0KLQotR0x1
aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgp
Ci17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQot
R0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4g
bVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotfQotCi1HTHVpbnQgQ29udGV4
dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0
ZVRleHR1cmUoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17
Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQot
Ci0vLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJI
YW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVd
ID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVh
dGVGZW5jZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5h
bGxvY2F0ZSgpOwotCi0gICAgbUZlbmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobURpc3BsYXkp
OwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgcXVlcnkg
bmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1ZXJ5KCkKLXsKLSAgICBHTHVpbnQgaGFuZGxl
ID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUXVlcnlNYXBbaGFu
ZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOwot
ICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVM
TDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewot
ICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKHRleHR1cmUpKQotICAgIHsKLSAg
ICAgICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFj
aFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRnJhbWVi
dWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZp
bmQoZnJhbWVidWZmZXIpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1
ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVm
ZmVyKTsKLQotICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmcmFt
ZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZnJhbWVidWZmZXJPYmplY3Qt
PnNlY29uZDsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVmZmVyT2JqZWN0
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKQot
ewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU1hcC5maW5kKGZl
bmNlKTsKLQotICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VNYXAuZW5kKCkpCi0gICAgewot
ICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3Qp
OwotICAgICAgICBkZWxldGUgZmVuY2VPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZlbmNlTWFw
LmVyYXNlKGZlbmNlT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUXVl
cnkoR0x1aW50IHF1ZXJ5KQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9
IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsKLSAgICBpZiAocXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFw
LmVuZCgpKQotICAgIHsKLSAgICAgICAgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVl
cnlPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0LT5zZWNvbmQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAg
ICAgfQotICAgICAgICBtUXVlcnlNYXAuZXJhc2UocXVlcnlPYmplY3QpOwotICAgIH0KLX0KLQot
QnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4g
bVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7Ci19Ci0KLVNoYWRlciAqQ29udGV4
dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmdldFNoYWRlcihoYW5kbGUpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFt
KEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dy
YW0oaGFuZGxlKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQgaGFu
ZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKGhhbmRsZSk7
Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5k
bGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5k
bGUpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcik7Ci19Ci0K
LUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIoKQotewotICAgIHJldHVy
biBtQm91bmREcmF3RnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdl
dEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVy
LnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUy
RChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0
dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0
dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4
dHVyZSwgVEVYVFVSRV9DVUJFKTsKLQotICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIp
Ci17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAg
fQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotfQotCi12b2lk
IENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAgIHsKLSAgICAgICAgbUZyYW1l
YnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwotICAgIH0KLQotICAg
IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKLQotICAgIG1Cb3VuZERyYXdG
cmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBDb250
ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7Ci0K
LSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAg
ICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOwotICAgIG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2gg
YmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4K
LQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIFByb2dy
YW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOwot
ICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShwcmlvclByb2dyYW0pOwotICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLQotICAgICAgICBpZiAobmV3UHJvZ3Jh
bSkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRQcm9ncmFtKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCi17Ci0gICAg
Ly8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMg
Y2FsbGVkIHdpdGggYW4gPGlkPiAgCi0gICAgLy8gb2YgemVybywgaWYgdGhlIGFjdGl2ZSBxdWVy
eSBvYmplY3QgbmFtZSBmb3IgPHRhcmdldD4gaXMgbm9uLXplcm8gKGZvciB0aGUgIAotICAgIC8v
IHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQsIGlmICAKLSAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIg
dGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiAKLSAgICAvLyBl
eGlzdGluZyBxdWVyeSBvYmplY3Qgd2hvc2UgdHlwZSBkb2VzIG5vdCBtYXRjaCA8dGFyZ2V0Piwg
b3IgaWYgPGlkPiBpcyB0aGUKLSAgICAvLyBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIGFu
eSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMKLSAgICAvLyBnZW5l
cmF0ZWQuCi0KLSAgICAvLyBFbnN1cmUgbm8gb3RoZXIgcXVlcmllcyBhcmUgYWN0aXZlCi0gICAg
Ly8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3
ZSB3aWxsIG5lZWQgdG8gY2hlY2sKLSAgICAvLyBzZXBhcmF0ZWx5IHRoYXQ6Ci0gICAgLy8gICAg
YSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3QgdGhlIGN1cnJlbnQgYWN0aXZlIHF1ZXJ5IGZv
ciBhbnkgdGFyZ2V0L3R5cGUKLSAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJp
ZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UKLSAgICAvLyAgICAg
ICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9BTllfU0FNUExFU19QQVNTRURf
Q09OU0VSVkFUSVZFX0VYVCwKLSAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUgYWN0aXZlIGZv
ciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLgotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5Z
X1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllf
U0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0YXJnZXQpOwot
Ci0gICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcwot
ICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNo
Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkgIT0gdGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBz
ZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2
ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlPYmplY3QpOwotCi0gICAgLy8gYmVnaW4gcXVlcnkKLSAg
ICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKLX0KLQotdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVu
dW0gdGFyZ2V0KQotewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLQotICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAg
IHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVR
dWVyeVtxVHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAocXVlcnlPYmplY3QgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgcXVlcnlPYmplY3QtPmVuZCgpOwotCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5z
ZXQoTlVMTCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVm
ZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsKLSAgICBtRnJh
bWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIg
PT0gMCkKLSAgICB7Ci0gICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGJ1ZmZlcjsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZm
ZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZm
ZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOwotICAgIHJlbmRlcmJ1ZmZlck9i
amVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBGcmFtZWJ1ZmZl
ck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUp
OwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLUZlbmNlICpDb250ZXh0Ojpn
ZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBm
ZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoZmVuY2UgPT0gbUZlbmNl
TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmZW5jZS0+c2Vjb25kOwotICAgIH0KLX0KLQotUXVlcnkg
KkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGludCBoYW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVu
dW0gdHlwZSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVlcnkgPSBtUXVlcnlNYXAuZmlu
ZChoYW5kbGUpOwotCi0gICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
IXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeS0+
c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlwZSk7Ci0gICAgICAgICAgICBxdWVyeS0+c2Vj
b25kLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVlcnktPnNlY29uZDsK
LSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQotewotICAgIHJl
dHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5nZXQoKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQot
ewotICAgIGlmICghbUNhY2hlZEN1cnJlbnRQcm9ncmFtKQotICAgIHsKLSAgICAgICAgbUNhY2hl
ZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3Vy
cmVudFByb2dyYW0pOwotICAgIH0KLSAgICByZXR1cm4gbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwot
fQotCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyLCBURVhUVVJFXzJEKSk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0
dXJlQ3ViZU1hcCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4o
Z2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOwot
fQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2Ft
cGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKLQotICAgIGlmICh0ZXhpZCA9PSAwKSAg
IC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMg
YmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJd
LmdldCgpOwotfQotCi1ib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xi
b29sZWFuICpwYXJhbXMpCi17Ci0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
X0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0NPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFz
a1JlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOwotICAgICAg
ICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0g
bVN0YXRlLmNvbG9yTWFza0FscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VM
TF9GQUNFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfVEVTVDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09O
VEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVF
IDogR0xfRkFMU0U7IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldEZsb2F0
dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTog
REVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBp
bXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRl
c3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJ
bnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJl
IGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZm
ZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZTsg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
cjsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzogICAgICpwYXJh
bXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBnbDo6QUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01BWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFT
RURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRzU2hhZGVyTW9k
ZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBnbDo6QUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9ERVBUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFyOwotICAgICAg
ICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0NPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JDbGVh
clZhbHVlLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5n
cmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlOwot
ICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmJsZW5k
Q29sb3IuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7
Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZB
TFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50
YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRo
ZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0gICAgLy8gR2V0SW50ZWdlcnYg
YXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJz
aW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0
byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIAotICAgIC8vIENv
bnRleHQ6OmdldEZsb2F0di4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7ICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICpw
YXJhbXMgPSBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFtcyA9IGds
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRF
UkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVy
RGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9G
T1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAv
KiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7Ci0gICAgICAvL2Nhc2UgR0xf
RlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOyAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5w
YWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tf
UkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNl
Um93T3JkZXI7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrQWxpZ25tZW50OyAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VT
OiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01B
U0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsTWFzazsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja01hc2s7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0
aEZhaWw7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoRnVu
YzsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRSR0I7ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5E
X0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYTsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1B
U0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzazsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1U
ZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJl
RGltZW5zaW9uKCk7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVY
VFVSRV9GT1JNQVRTOiAgIAotICAgICAgICBwYXJhbXNbMF0gPSBtTnVtQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5H
TEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKTsKLSAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCi0g
ICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGlm
IChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgotICAg
ICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
ZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRp
bWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKTsKLSAgICAgICAgICAgIHBh
cmFtc1swXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVu
c2lvbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FO
R0xFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVz
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklFV1BPUlQ6Ci0gICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0ZS52aWV3cG9ydFg7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7
Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOwotICAgICAgICBwYXJh
bXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnNjaXNzb3JYOwot
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7Ci0gICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5zY2lzc29y
SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNl
IEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAqcGFyYW1zID0g
Y29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVlblNpemUoKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpwYXJhbXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhhU2l6ZSgpOyBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBn
ZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRo
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlm
IChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
ZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotCi0gICAg
ICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4
aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5E
SU5HX0NVQkVfTUFQOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNh
bXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRF
R1lfRVhUOgotICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
dW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpCi17Ci0gICAg
Ly8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJldHVybmVkIGZvciBERVBUSF9DTEVBUl9W
QUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgLy8gaXMgRkxPQVQgcmF0aGVyIHRoYW4g
SU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVjLiBUaGlzIGlz
IGR1ZQotICAgIC8vIHRvIHRoZSBmYWN0IHRoYXQgaXQgaXMgc3RvcmVkIGludGVybmFsbHkgYXMg
YSBmbG9hdCwgYW5kIHNvIHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbgotICAgIC8vIGlmIHJldHVy
bmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNpbmNlIHRoaXMgY29udmVyc2lvbiBpcyBh
bHJlYWR5IGltcGxlbWVudGVkIAotICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25lIGNhbGxzIGds
R2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJpYWJsZSwgd2UK
LSAgICAvLyBwbGFjZSBERVBUSF9DTEVBUl9WQUxVRSB3aXRoIHRoZSBmbG9hdHMuIFRoaXMgc2hv
dWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZwotICAgIC8vIGFwcGxpY2F0aW9u
LgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RF
WFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0g
ICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JN
QVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOgotICAgICAgY2FzZSBH
TF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAg
ICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAgICAgY2FzZSBHTF9OVU1fU0hB
REVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFM6Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklO
RElORzoKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOgotICAgICAgY2FzZSBHTF9QQUNL
X0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToK
LSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVf
TUlQTUFQX0hJTlQ6Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJ
TlRfT0VTOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xfR1JFRU5fQklU
UzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgot
ICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6Ci0g
ICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdM
X0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgotICAgICAgY2FzZSBH
TF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOgotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBU
SF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxV
RV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKLSAgICAg
IGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjoKLSAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOgot
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFU
SU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVN
QVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAgY2FzZSBHTF9T
VUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgotICAgICAgY2Fz
ZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICBjYXNlIEdMX1JFU0VUX05PVElG
SUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xf
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
Ul9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBib29sIHJlbmRlclRhcmdldENoYW5n
ZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIGlmIChyZW5kZXJUYXJn
ZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCi0gICAgewotICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAg
IH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7Ci0g
ICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwot
ICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFyZWEgbXVzdCBi
ZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZmZXJlbnQgZm9y
IGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBk
ZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJp
YWwgPSAwOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkg
IT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYgKCFk
ZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9O
RSkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICBpZiAoIWRlcHRoU3Rl
bmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIg
dW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAotICAgICAg
ICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCB8fAot
ICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwotICAgICAgICBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVk
U3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1EZXB0
aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCi0gICAgewotICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAg
ICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7
Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmlld3Bv
cnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKLSAgICBmbG9h
dCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdub3JlVmlld3BvcnQp
Ci0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3BvcnQuWSA9IDA7
Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7Ci0gICAg
ICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsKLSAgICAgICAg
dmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJl
Y3QobVN0YXRlLnZpZXdwb3J0WCwgbVN0YXRlLnZpZXdwb3J0WSwgbVN0YXRlLnZpZXdwb3J0V2lk
dGgsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KTsKLSAg
ICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+
KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChy
ZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkp
OwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKHJlY3QucmlnaHQgLSByZWN0LmxlZnQs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNf
Y2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1w
KHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOwotICAgICAg
ICB2aWV3cG9ydC5NaW5aID0gek5lYXI7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSB6RmFyOwot
ICAgIH0KLQotICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0LkhlaWdodCA8
PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVy
Ci0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRp
YWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmll
d3BvcnQpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3Bv
cnQpOwotICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsKLSAgICAgICAgbVZpZXdwb3J0
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS5zY2lzc29yVGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCByZWN0ID0gdHJh
bnNmb3JtUGl4ZWxSZWN0KG1TdGF0ZS5zY2lzc29yWCwgbVN0YXRlLnNjaXNzb3JZLCBtU3RhdGUu
c2Npc3NvcldpZHRoLCBtU3RhdGUuc2Npc3NvckhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0KTsKLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0
LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdl
dERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAg
ICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
Q0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNjaXNzb3JT
dGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6
ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7Ci0gICAgICAg
IEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAtMS4wZiAvIHZpZXdwb3J0
LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVs
U2l6ZSwgMSwgeHkpOwotCi0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29t
cHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJv
YWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBj
b29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBmbG9h
dCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDog
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0g
e21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBm
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBt
U3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7Ci0KLSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9n
cmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBkelsyXSA9
IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07Ci0gICAgICAg
IHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKLQotICAgICAgICBH
TGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KTsKLSAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwgekZhciwgekZhciAt
IHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdl
LCAxLCBuZWFyRmFyRGlmZik7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rp
b24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5n
LCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBseVN0YXRl
KEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgR0xlbnVtIGFkanVzdGVkRnJvbnRGYWNlID0gYWRq
dXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0gKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFpdihmcm9udENDVywgMSwgJmNjdyk7Ci0KLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKLSAgICBHTGludCBhbHdh
eXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwotCi0gICAgRDNE
QURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRl
bnRpZmllcigpOwotICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5W
ZW5kb3JJZCAhPSAweDEwMDI7Ci0gICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZl
IGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgotICAgIC8vIHdyaXRlIG1hc2sg
Y2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhhdmUgaW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQs
Ci0gICAgLy8gc2V0IGEgbm9uemVybyBjb2xvciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJs
ZW5kIHN0YXRlIHNvIHRoYXQgbm8KLSAgICAvLyBkcmF3aW5nIGlzIGRvbmUuCi0gICAgLy8gaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQot
Ci0gICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAg
ICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZSht
U3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdWxsU3Rh
dGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQotICAg
IHsKLSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252
ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGVwdGhTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF6ZXJvQ29sb3JNYXNrQWxsb3dlZCAmJiAo
bU1hc2tTdGF0ZURpcnR5IHx8IG1CbGVuZFN0YXRlRGlydHkpKQotICAgIHsKLSAgICAgICAgbUJs
ZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0
YXRlLmJsZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuc291cmNlQmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAgICAgICAgICAg
bVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuZGVzdEJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwg
ZXMyZHg6OkNvbnZlcnRDb2xvcihtU3RhdGUuYmxlbmRDb2xvcikpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+
KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0
ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVu
ZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9y
LmFscGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNv
dXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRSR0Ip
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVz
MmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOwotCi0gICAgICAg
ICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
IHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RC
bGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxF
LCBUUlVFKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVu
ZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
REVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRB
bHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxw
aGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8
IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
JiYgZnJhbWVidWZmZXJPYmplY3QtPmhhc1N0ZW5jaWwoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxN
T0RFLCBUUlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkK
LSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJF
RiA9IEQzRFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZ
UEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0gICAgICAgICAg
ICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKLSAgICAgICAgICAgICAg
ICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgCi0gICAgICAg
ICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0
ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVl
cyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKLSAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVu
Y2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRG
cm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJ
TEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVy
dENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50
KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNp
bE1hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
RkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9u
dEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBB
U1MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0
ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NX
X1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKLQotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJh
Y2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhT
dGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1B
U0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlM
IDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lM
UEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NE
ZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgICAg
ICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobU1hc2tTdGF0ZURp
cnR5KQotICAgIHsKLSAgICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4OjpDb252ZXJ0Q29sb3JN
YXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNr
Qmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAw
ICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRW5h
YmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRy
YXduLgotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklU
RUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX1pF
Uk8pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
LCBEM0RCTEVORF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDog
RkFMU0UpOwotCi0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRl
LnBvbHlnb25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwot
ICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICoo
KERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKLSAgICAgICAgICAgICAgICBm
bG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzLCAtKGludCko
ZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCopJmRlcHRoQmlhcykpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywg
MCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMs
IDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FN
UExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOwotICAgICAgICAg
ICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsKLQotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdldFNhbXBsZXMoKTsgKytp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWFzayA8PD0gMTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZh
bHVlID49IHRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXNr
IHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VJbnZlcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFzayA9IH5tYXNrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1Q
TEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1EaXRoZXJTdGF0ZURpcnR5KQotICAgIHsK
LSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElUSEVSRU5BQkxFLCBtU3Rh
dGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVw
ZWF0RHJhdykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBh
cmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKLSAgICBp
ZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJhdGlvbiht
RGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgpLCBpbnN0YW5jZXMsIHJlcGVh
dERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJp
bmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5k
ZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKLXsKLSAgICBH
TGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291
bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7
Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4
SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0gICAgICAgICAg
ICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFuZCBzaGFk
ZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVNoYWRlcnMoKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOwotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFBy
b2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFBpeGVs
U2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIp
OwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGllZFBy
b2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBw
cm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRleHR1
cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29u
dGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJWEVM
KTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAgYXBw
bHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBEaXJl
Y3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0vLyBs
b29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0
ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3Npbmcv
ZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0Ojph
cHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5
cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1w
bGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKLSAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0
dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJp
YWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTOwotICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0
ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIw
OwotICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJh
bmdlKHR5cGUpOwotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4
IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGludCB0ZXh0
dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJ
bmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotICAgICAgICBpbnQg
ZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0KLSAgICAgICAg
aWYgKHRleHR1cmVVbml0ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlw
ZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBl
LCBzYW1wbGVySW5kZXgpOwotCi0gICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2Ft
cGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKLQotICAgICAgICAgICAgaWYg
KGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVy
ZVNlcmlhbCgpIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhh
c0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0
dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3
cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQz
ZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdG
aWx0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQz
ZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVy
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RT
YW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01J
UEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRl
eHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwg
Z2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBs
ZXJJbmRleF0gPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGFwcGxpZWRU
ZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdlOyBzYW1w
bGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAgICAgICAg
aWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVy
T2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlYWRQaXhl
bHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
KmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlm
IChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1w
bGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3
aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0gICAgLy8gc2l6ZWQg
cXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQg
cmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlmIChyZXF1aXJl
ZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0g
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAo
ZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7Ci0gICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBT
dHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gZ2V0
UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGlnbm1lbnQoKSA8PSA0ICYmIG1EaXNw
bGF5LT5pc0QzZDlFeERldmljZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHggPT0g
MCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhlaWdodCkg
PT0gZGVzYy5IZWlnaHQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQg
PT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdM
X1VOU0lHTkVEX0JZVEU7Ci0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAg
Ly8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0ZSBkaXJlY3Rs
eSBpbnRvIGNsaWVudCdzIG1lbW9yeQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVP
ZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAmcGl4ZWxzKTsKLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUcnkgYWdhaW4gd2l0
aG91dCB0aGUgc2hhcmVkIGhhbmRsZQotICAgICAgICAgICAgZGlyZWN0VG9QaXhlbHMgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGlyZWN0VG9QaXhlbHMpCi0gICAgewot
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVz
Yy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0
ZW1TdXJmYWNlLCBOVUxMKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBy
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBw
cm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVk
LgotICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgfQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVt
U3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRDNETE9D
S0VEX1JFQ1QgbG9jazsKLSAgICBSRUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZGVzYy5IZWlnaHQpOwotICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3Qu
bGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9
IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAg
ICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRl
c2MuV2lkdGgpKTsKLSAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZh
Y2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19SRUFET05MWSk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBz
eXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNp
YmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1
bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAg
IGludCBpbnB1dFBpdGNoOwotICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKLSAgICAgICAg
aW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJl
Y3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBp
dGNoOwotICAgIH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4
RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAg
ICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZh
c3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCi0gICAgICAgICAgICAvLyBh
biBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCi0gICAgICAg
ICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAg
ICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJl
Y3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAg
ICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGog
KiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDAp
ID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikg
KiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNF
MCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4
N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNp
Z25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAw
eDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkg
KiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAw
eDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdi
ID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICh4
cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAg
ICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYw
MDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJj
ZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAo
YXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBG
RkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEu
MGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUg
c3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAg
ICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAg
ICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gp
ICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2Jh
LCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXko
YWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOwotICAgICAgICAgICAgICAgICAg
ICBiID0gYWJnclsyXTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGFiZ3JbMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBk
ZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICog
ciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBp
dGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gg
KyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgy
NTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25l
ZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGlu
IHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAg
IDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAg
NHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAg
MXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhU
LCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgot
ICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3Rh
bmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tl
ZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEy
ICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAg
ICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAg
ICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAg
ICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBH
IHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kg
KyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41Zikg
PDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAv
LyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQot
ICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJm
YWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNr
KQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVj
dC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsKLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVG
RkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0K
LSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQp
Ci0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBp
ZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xF
QVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMdWludCBzdGVuY2lsVW5tYXNr
ZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICB7
Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAg
ICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdl
dERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBk
eDJlczo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAgICAgICAgICAgc3RlbmNpbFVu
bWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAgICAgICBpZiAoc3Rl
bmNpbFVubWFza2VkICE9IDB4MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbGFn
cyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1hc2sgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAg
IC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUg
dmlld3BvcnQKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEM0RDT0xPUiBj
b2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBo
YSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1
ZSkpOwotICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsK
LSAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7
Ci0KLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6ZShtUmVuZGVy
VGFyZ2V0RGVzYy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLQotICAg
IGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1NU
RU5DSUwpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7
Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFS
X1RBUkdFVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShtU3Rh
dGUuY29sb3JNYXNrUmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhh
VW5tYXNrZWQpOwotCi0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRT
dGVuY2lsQ2xlYXIpCi0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGlu
IGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCi0g
ICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwg
YmUgZmxhZ2dlZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0aGF0IHBhdGgg
aXMgdGFrZW4uCi0gICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbURldmljZS0+
QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBo
ciA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBG
QUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywg
RDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwg
RkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBM
QU5FRU5BQkxFLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZW
Rl9ESUZGVVNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBOVUxM
LCAwLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFS
QVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJH
MSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFf
VEZBQ1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhU
VVJFRkFDVE9SLCBjb2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAx
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJs
b2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZN
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVM
TCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5D
YXB0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENN
UF9BTFdBWVMpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19G
SUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0KLSAgICAgICAgaWYg
KGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENv
bG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIG1TdGF0
ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0
ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
VFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lM
T1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwp
OwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NP
TE9SQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RG
QUNUT1IpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFD
VE9SLCBjb2xvcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJ
U0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0KLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcXVh
ZFs0XVs0XTsgICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25l
ZCB0byBtYXRjaCB0aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9IC0wLjVmOwotICAgICAg
ICBxdWFkWzBdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKLSAgICAgICAg
cXVhZFswXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAxLjBmOwotCi0gICAgICAg
IHF1YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1
YWRbMV1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFk
WzFdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVh
ZFsyXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1
YWRbMl1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4wZjsKLQotICAgICAgICBx
dWFkWzNdWzBdID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwotICAgICAgICBxdWFk
WzNdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOwotICAgICAgICBxdWFk
WzNdWzNdID0gMS4wZjsKLQotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAg
ICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwg
c2l6ZW9mKGZsb2F0WzRdKSk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZF
UikKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVM
TCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5DbGVh
cigwLCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9n
cmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7Ci0gICAgaW50IHBy
aW1pdGl2ZUNvdW50OwotCi0gICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2Rl
LCBjb3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCi0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDAp
Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRh
cmdldChmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwbHlT
dGF0ZShtb2RlKTsKLQotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgR0xlbnVtIGVy
ciA9IGFwcGx5VmVydGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJh
dyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhm
YWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAg
IG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobW9kZSA9PSBH
TF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwg
R0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2Vz
ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5n
SUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAg
ICAgICAgIGlmIChjb3VudGluZ0lCKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3VudGlu
Z0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZl
KHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4
IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywg
R0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3Vu
dDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZw
cmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2Up
KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7
Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0g
YXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5mbyk7
Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4
SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9
IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0
ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19F
UlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFw
cGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNr
aXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0K
LSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGluZGljZXMsIGluZGV4SW5mby5taW5JbmRleCk7
ICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElO
VClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
ZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLS8vIEltcGxlbWVudHMgZ2xGbHVzaCB3aGVuIGJsb2NrIGlzIGZh
bHNlLCBnbEZpbmlzaCB3aGVuIGJsb2NrIGlzIHRydWUKLXZvaWQgQ29udGV4dDo6c3luYyhib29s
IGJsb2NrKQotewotICAgIG1EaXNwbGF5LT5zeW5jKGJsb2NrKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4KQotewotICAgIC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9y
IGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBlICE9IEdMX05PTkUgJiYgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZmZXIg
PSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAgICAgICAgaW5kaWNl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZlci0+ZGF0YSgpKSArIG9m
ZnNldDsKLSAgICB9Ci0KLSAgICBVSU5UIHN0YXJ0SW5kZXggPSAwOwotICAgIGJvb2wgc3VjY2Vl
ZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2ln
bmVkIGludCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAg
ICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5J
VElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJ
Qi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpOwotCi0gICAgICAg
ICAgICBVSU5UIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAm
b2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gNDsKLSAgICAgICAg
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
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291
bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxv
b3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5n
SW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lO
REVYMTYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9V
TlNJR05FRF9TSE9SVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPiht
TGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFy
dEluZGV4ID0gb2Zmc2V0IC8gMjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhl
ZCBkcmF3Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtp
XSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtj
b3VudF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMp
W2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291
bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxj
b25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
WzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bUxpbmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoc3VjY2VlZGVk
KQotICAgIHsKLSAgICAgICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdl
dFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKG1M
aW5lTG9vcElCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
bUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+
RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4
LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xf
TElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkKLXsKLSAgICBtSW52
YWxpZEVudW0gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1ZSgp
Ci17Ci0gICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3Jk
SW52YWxpZE9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRPcGVyYXRpb24gPSB0cnVlOwotfQot
Ci12b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkKLXsKLSAgICBtT3V0T2ZNZW1vcnkg
PSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJh
dGlvbigpCi17Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7Ci19Ci0K
LS8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlm
IGFueS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuNSBwYWdlIDEzLgotR0xlbnVt
IENvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobUludmFsaWRFbnVtKQotICAgIHsKLSAg
ICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURf
RU5VTTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIG1J
bnZhbGlkVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9WQUxVRTsK
LSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRPcGVyYXRpb24pCi0gICAgewotICAgICAgICBtSW52
YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKLSAgICB9Ci0KLSAgICBpZiAobU91dE9mTWVtb3J5KQotICAgIHsKLSAgICAgICAgbU91
dE9mTWVtb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0g
ICAgfQotCi0gICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pCi0gICAgewotICAg
ICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIHJldHVy
biBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkKLXsK
LSAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgYm9v
bCBsb3N0ID0gbURpc3BsYXktPnRlc3REZXZpY2VMb3N0KCk7Ci0KLSAgICAgICAgaWYgKGxvc3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7ICAg
Ly8gU2V0cyBtUmVzZXRTdGF0dXMKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMZW51bSBzdGF0
dXMgPSBtUmVzZXRTdGF0dXM7Ci0KLSAgICBpZiAobVJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9S
KQotICAgIHsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT50ZXN0RGV2aWNlUmVzZXR0YWJsZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1ib29sIENvbnRleHQ6
OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gKG1SZXNldFN0cmF0
ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwotfQotCi1ib29sIENvbnRleHQ6
OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hh
ZGVyTW9kZWwzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMjsKLX0KLQotdW5zaWduZWQgaW50
IENvbnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGIDogMDsKLX0KLQotdW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLX0K
LQotaW50IENvbnRleHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SU19TTTMgOiBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMjsKLX0KLQot
aW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBw
b3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0Ci17Ci0g
ICAgaWYgKHJlcXVlc3RlZCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsK
LSAgICB9Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwotICAgIGlmIChpdHIgPT0g
bU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVM7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChpdHItPnNlY29uZFtpXSAmJiBpICE9
IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0V2ZW50UXVlcmllczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwotfQot
Ci1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhU
M1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN1cHBvcnRzRFhUNVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRl
eHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXI7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlczsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZSZW5k
ZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVy
RGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lv
bjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4
Q3ViZVRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVy
ZUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKLX0KLQotYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0
SW5kaWNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKLX0K
LQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNp
bmc7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0g
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6Ci0gICAgLy8gSWYg
YSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5n
cyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgLy8gKGkuZS4gaW4g
dGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8u
Ci0KLSAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50
IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSkKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4
NDoKLSAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFs
bCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0IGFy
ZQotICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybwotCi0gICAgZm9yIChpbnQg
dHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKSA9PSB0ZXh0dXJlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtz
YW1wbGVyXS5zZXQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6Ci0gICAgLy8gSWYg
YSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0
byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCi0gICAgLy8gYXMg
aWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBv
ZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKLSAgICAvLyBpbWFn
ZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KLQotICAg
IEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAg
ICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0K
LSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1lYnVmZmVy
LT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZm
ZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKLSAgICAvLyBJZiBh
IGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVC
VUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoCi0gICAgLy8gQmluZEZyYW1lYnVmZmVy
IGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJh
bWVidWZmZXIgb2YgemVyby4KLQotICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZy
YW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICB9
Ci0KLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToKLSAgICAvLyBJZiBhIHJlbmRl
cmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRl
ZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKLSAgICAvLyBoYWQgYmVlbiBleGVj
dXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCi0KLSAg
ICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTExOgotICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9i
amVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLAotICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAs
IGZvciBlYWNoIGF0dGFjaG1lbnQKLSAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdh
cyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgotCi0gICAgRnJh
bWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZy
YW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAg
IGlmIChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVidWZmZXItPmRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJh
bWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7
Ci0gICAgfQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0
dXJlVHlwZSB0eXBlKQotewotICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5
cGVdLmdldCgpOwotCi0gICAgaWYgKHQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9OwotCi0gICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRV
UkVfMkQKLQotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVy
ZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQt
PnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
LSAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRl
eHR1cmVDdWJlTWFwKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0KLSAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5z
ZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3Ip
OwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21w
bGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1oo
MCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLQotICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1
YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwotICAgIH0KLQotICAgIHJldHVy
biB0OwotfQotCi1ib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKQot
ewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09IEdMX0ZS
T05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLX0KLQotYm9vbCBDb250
ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgc3dpdGNoIChkcmF3
TW9kZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgotICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBjYXNlIEdMX1BPSU5UUzoKLSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWlu
dCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQotewotICAgIEFTU0VSVChpbmRleCA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRl
eF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsK
LQotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlDdXJyZW50VmFsdWUoaW5kZXgpOwotfQot
Ci12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVp
bnQgZGl2aXNvcikKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0gZGl2aXNv
cjsKLX0KLQotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKLS8vIE9FUyBl
eHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVuc2lvbnMKLXZvaWQg
Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCi17Ci0gICAgbUV4dGVuc2lvblN0cmluZyA9
ICIiOwotCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGlj
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cmdiOF9yZ2JhOCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAg
ewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
IHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXQgIjsK
LSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0K
LQotICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1
cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQxICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgIjsKLSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAg
ICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
MyAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVf
dXNhZ2UgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UgIjsKLQotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25z
Ci0gICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nOjpz
aXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0g
ICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNp
b25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkNvbnRleHQ6
OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJp
bmcuY19zdHIoKTsKLX0KLQotdm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcoKQotewot
ICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRh
cHRlcklkZW50aWZpZXIoKTsKLQotICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsKLSAg
ICBtUmVuZGVyZXJTdHJpbmcgKz0gaWRlbnRpZmllci0+RGVzY3JpcHRpb247Ci0gICAgbVJlbmRl
cmVyU3RyaW5nICs9ICIpIjsKLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UmVuZGVyZXJT
dHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyZXJTdHJpbmcuY19zdHIoKTsKLX0K
LQotdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kw
LCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgRnJh
bWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZy
YW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAg
IGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8
fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVz
KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAg
UkVDVCBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC5sZWZ0ID0gc3JjWDA7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNY
MTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgwOwotICAgICAgICBkZXN0UmVjdC5yaWdo
dCA9IGRzdFgxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBzcmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgxOwotICAgICAgICBzb3Vy
Y2VSZWN0LnJpZ2h0ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7Ci0g
ICAgfQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0
LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QudG9wID0g
ZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHJl
YWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHJhd0J1
ZmZlckhlaWdodCAtIGRzdFkwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3Qu
dG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0g
ZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlU2Npc3Nv
cmVkUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RS
ZWN0OwotCi0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE9u
bHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBh
c3MgdGhlIHNjaXNzb3IgdGVzdAotICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0
IGlzIG5vdyBpbiBEM0Qtc3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKLSAg
ICAgICAgLy8gcmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRo
YW4gdGhlIGJvdHRvbS4KLSAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3Nv
clgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAt
IGRlc3RSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0
YXRlLnNjaXNzb3JYOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhE
aWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNj
aXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IHhEaWZmID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNz
b3JXaWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5z
Y2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29y
ZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0
LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZm
ID0gbVN0YXRlLnNjaXNzb3JZIC0gZGVzdFJlY3QudG9wOwotICAgICAgICAgICAgZGVzdFNjaXNz
b3JlZFJlY3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICAgICAgc291cmNlU2Npc3Nv
cmVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3Qu
Ym90dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Np
c3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVk
UmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBi
bGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0g
c291cmNlU2Npc3NvcmVkUmVjdDsKLSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lz
c29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMg
YWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5k
cyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0g
MCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0Lmxl
ZnQgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0K
LSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZm
ZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lk
dGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAg
ICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlm
ZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0
LnRvcCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQot
Ci0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0g
ICAgewotICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFk
QnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVm
ZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAg
IH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBp
bnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsK
LSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRo
KQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJh
d0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVy
V2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0K
LQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5
RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
dG9wID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0K
LQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVm
ZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhl
aWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0K
LQotICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdo
dCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0
LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0
b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJX
aWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1l
ZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmlt
bWVkUmVjdC5sZWZ0ICE9IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsK
LSAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAg
ICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3RnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgaWYg
KCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1
ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVuZGVyVGFy
Z2V0ID0gdHJ1ZTsKLQotICAgIH0KLQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9C
SVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpyZWFkRFNCdWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZl
ciA9IE5VTEw7Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwsIGFuZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0
ZW5jaWwgYnVmZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQg
c3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlm
IChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0
ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9
IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFy
ZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGll
cyBhcmUgcGVybWl0dGVkCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAm
JiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFk
RFNCdWZmZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2ls
KQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKGJs
aXRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
KiByZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1l
ZFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOwotCi0g
ICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFO
R0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
LCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhG
X05PTkUpOwotCi0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0
Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1WZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsK
LSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0g
ICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0KLX0KLQotVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQotewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0
aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6
ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgICpyZXBlYXREcmF3ID0g
MTsKLQotICAgIGludCBpbmRleGVkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAg
IGludCBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0KLSAgICBpZiAo
aW5zdGFuY2VzID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1
dGUgdG8gYmUgbWFwcGVkIHRvIEQzRCBzdHJlYW0gMAotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlc1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0
cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXNbaV0uZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7ICAgLy8g
Rm91bmQgYm90aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCi0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVS
VEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1l
bnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVt
ZW50ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0cmVhbSA9IGk7Ci0KLSAgICAgICAgICAgIGlm
IChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIER1ZSB0
byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxlIGluc3RhbmNpbmcgd2hlbiBub25l
IG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0gICAgICAgICAgICAgICAgaWYgKGlu
c3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9IGluc3RhbmNlczsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJpYnV0ZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGluZGV4ZWRB
dHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBV
SU5UIGZyZXF1ZW5jeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9J
TkRFWEVEREFUQSB8IGluc3RhbmNlczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCBhdHRyaWJ1
dGVzW2ldLmRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShzdHJl
YW0sIGZyZXF1ZW5jeSk7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tpXS5zZXJpYWwgfHwK
LSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSAhPSBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZm
ZXIsIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ldLnN0cmlkZSk7Ci0gICAgICAg
ICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgPSBhdHRyaWJ1dGVzW2ldLnNlcmlh
bDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnN0cmlkZSA9IGF0dHJpYnV0
ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVs
ZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAgIGVsZW1lbnQtPk9mZnNldCA9IDA7
Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBlOwotICAgICAg
ICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwotICAgICAgICAg
ICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Ci0gICAgICAgICAgICBl
bGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChpKTsKLSAgICAg
ICAgICAgIGVsZW1lbnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMg
PT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsK
LSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVu
ZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKihlbGVtZW50KyspID0gZW5kOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsK
LSAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVb
aV07Ci0gICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywg
KGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYm
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZW50cnkt
PmxydUNvdW50ID0gKyttTWF4THJ1OwotICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERlY2xh
cmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwot
ICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVy
dGV4RGVjbENhY2hlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVb
aV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9IE5VTEwpCi0gICAgewotICAg
ICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICAvLyBtTGFzdFNldFZE
ZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkK
LSAgICAgICAgLy8gYWJvdXQgaXQuCi0gICAgfQotCi0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2Fj
aGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RW
RVJURVhFTEVNRU5UOSkpOwotICAgIGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxl
bWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZl
cnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0
U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+
bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZv
aWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFya1N0YXRlRGlydHkoKQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBt
QXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwotICAgIH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBO
VUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJl
IGRpc2FibGVkIHdoZW4gbm90IHVzZWQKLX0KLQotfQotCi1leHRlcm4gIkMiCi17Ci1nbDo6Q29u
dGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykKLXsKLSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7Ci19Ci0KLXZvaWQgZ2xEZXN0cm95Q29udGV4
dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBkZWxldGUgY29udGV4dDsKLQotICAgIGlm
IChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCi0gICAgewotICAgICAgICBnbDo6bWFrZUN1
cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotfQotCi12b2lkIGdsTWFrZUN1cnJlbnQo
Z2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKQotewotICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdXJm
YWNlKTsKLX0KLQotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKQotewotICAgIHJl
dHVybiBnbDo6Z2V0Q29udGV4dCgpOwotfQotfQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUNCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQor
Ly8gQ29udGV4dC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2lu
ZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcNCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4g
SXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuDQor
DQorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiDQorDQorI2luY2x1ZGUgPGFsZ29yaXRo
bT4NCisNCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCINCisNCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCINCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiDQorI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCINCisj
aW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVT
djIvQnVmZmVyLmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIg0KKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVCdWZmZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIN
CisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCINCisjaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCINCisjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
Ig0KKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCINCisjaW5jbHVkZSAi
bGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCINCisNCisjdW5kZWYgbmVhcg0KKyN1bmRlZiBm
YXINCisNCituYW1lc3BhY2UgZ2wNCit7DQorQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlm
eVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpDQorew0KKyAgICBB
U1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVkDQorDQorICAg
IG1EaXNwbGF5ID0gTlVMTDsNCisgICAgbURldmljZSA9IE5VTEw7DQorDQorICAgIG1GZW5jZUhh
bmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOw0KKw0KKyAgICBzZXRDbGVhckNvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIDAuMGYpOw0KKw0KKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0g
MS4wZjsNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsNCisNCisgICAgbVN0YXRl
LmN1bGxGYWNlID0gZmFsc2U7DQorICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7DQorICAg
IG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7DQorICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxz
ZTsNCisgICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdMX0xFU1M7DQorICAgIG1TdGF0ZS5ibGVuZCA9
IGZhbHNlOw0KKyAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7DQorICAgIG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOw0KKyAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0g
R0xfWkVSTzsNCisgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsNCisgICAgbVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsNCisgICAgbVN0YXRlLmJsZW5kRXF1
YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAw
Ow0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7DQorICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmJsdWUgPSAwOw0KKyAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7DQorICAgIG1T
dGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9B
TFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsNCisgICAgbVN0YXRlLnN0ZW5jaWxN
YXNrID0gLTE7DQorICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7DQorICAgIG1TdGF0
ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZiA9IDA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7DQorICAgIG1TdGF0ZS5z
dGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOw0KKyAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBHTF9L
RUVQOw0KKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOw0KKyAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOw0KKyAgICBtU3RhdGUuc3RlbmNp
bEJhY2tGYWlsID0gR0xfS0VFUDsNCisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCA9IEdMX0tFRVA7DQorICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9L
RUVQOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsNCisgICAgbVN0YXRl
LnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOw0KKyAgICBtU3RhdGUucG9seWdvbk9mZnNldFVu
aXRzID0gMC4wZjsNCisgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOw0K
KyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsNCisgICAgbVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWUgPSAxLjBmOw0KKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBm
YWxzZTsNCisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7DQorICAgIG1TdGF0ZS5kaXRo
ZXIgPSB0cnVlOw0KKyAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJF
Ow0KKyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IEdMX0RPTlRfQ0FS
RTsNCisNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7DQorDQorICAgIG1TdGF0ZS52aWV3
cG9ydFggPSAwOw0KKyAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisgICAgbVN0YXRlLnZpZXdw
b3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0YXRlLnZpZXdw
b3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Ow0KKyAgICBtU3RhdGUuek5l
YXIgPSAwLjBmOw0KKyAgICBtU3RhdGUuekZhciA9IDEuMGY7DQorDQorICAgIG1TdGF0ZS5zY2lz
c29yWCA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQorICAgIG1TdGF0ZS5zY2lzc29y
V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsNCisgICAgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7DQorDQorICAgIG1TdGF0ZS5jb2xv
ck1hc2tSZWQgPSB0cnVlOw0KKyAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOw0KKyAg
ICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7DQorICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBo
YSA9IHRydWU7DQorICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOw0KKw0KKyAgICBpZiAoc2hh
cmVDb250ZXh0ICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBz
aGFyZUNvbnRleHQtPm1SZXNvdXJjZU1hbmFnZXI7DQorICAgICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5hZGRSZWYoKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7DQorICAgIH0NCisNCisgICAgLy8gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6DQorICAgIC8vIEluIHRoZSBpbml0
aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVfTUFQIGhhdmUgdHdvZGltZW5z
aW9uYWwNCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0
aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uDQorICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNz
IHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQg
YXMgdGV4dHVyZQ0KKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9zZSBuYW1lcyBhcmUgMC4NCisN
CisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOw0KKyAgICBtVGV4dHVy
ZUN1YmVNYXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAoMCkpOw0KKw0KKyAgICBtU3RhdGUu
YWN0aXZlU2FtcGxlciA9IDA7DQorICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZEVs
ZW1lbnRBcnJheUJ1ZmZlcigwKTsNCisgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOw0KKyAgICBi
aW5kVGV4dHVyZTJEKDApOw0KKyAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5k
RHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKw0KKyAgICBt
U3RhdGUuY3VycmVudFByb2dyYW0gPSAwOw0KKw0KKyAgICBtU3RhdGUucGFja0FsaWdubWVudCA9
IDQ7DQorICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0Ow0KKyAgICBtU3RhdGUucGFja1Jl
dmVyc2VSb3dPcmRlciA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
Ow0KKyAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7DQorICAgIG1CbGl0ID0gTlVMTDsNCisg
ICAgbUxpbmVMb29wSUIgPSBOVUxMOw0KKw0KKyAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsNCisg
ICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOw0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNl
Ow0KKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9w
ZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsNCisgICAg
bUNvbnRleHRMb3N0ID0gZmFsc2U7DQorICAgIG1SZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOw0K
KyAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNldHMgPyBHTF9MT1NFX0NPTlRFWFRfT05f
UkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCk7DQorICAgIG1Sb2J1c3RB
Y2Nlc3MgPSByb2J1c3RBY2Nlc3M7DQorDQorICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IGZh
bHNlOw0KKyAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsNCisgICAgbVN1cHBvcnRz
RFhUNVRleHR1cmVzID0gZmFsc2U7DQorICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNl
Ow0KKyAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7DQorICAgIG1OdW1Db21w
cmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOw0KKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7
DQorICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOw0KKyAgICBtYXJrQWxsU3RhdGVE
aXJ0eSgpOw0KK30NCisNCitDb250ZXh0Ojp+Q29udGV4dCgpDQorew0KKyAgICBpZiAobVN0YXRl
LmN1cnJlbnRQcm9ncmFtICE9IDApDQorICAgIHsNCisgICAgICAgIFByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSk7DQorICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7DQorICAgICAgICB9DQorICAgICAgICBtU3RhdGUu
Y3VycmVudFByb2dyYW0gPSAwOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghbUZyYW1lYnVmZmVy
TWFwLmVtcHR5KCkpDQorICAgIHsNCisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1
ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7DQorICAgIH0NCisNCisgICAgd2hpbGUgKCFtRmVuY2VN
YXAuZW1wdHkoKSkNCisgICAgew0KKyAgICAgICAgZGVsZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2lu
KCktPmZpcnN0KTsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQ0K
KyAgICB7DQorICAgICAgICBkZWxldGVRdWVyeShtUXVlcnlNYXAuYmVnaW4oKS0+Zmlyc3QpOw0K
KyAgICB9DQorDQorICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQ0KKyAg
ICB7DQorICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNv
bmQ7DQorICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBv
cnQuYmVnaW4oKSk7DQorICAgIH0NCisNCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBU
RVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAgew0KKyAgICAgICAgZm9yIChpbnQgc2Ft
cGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspDQor
ICAgIHsNCisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOw0KKyAg
ICB9DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5kQnVmZmVy
LnNldChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZ
UEVfQ09VTlQ7IGkrKykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNl
dChOVUxMKTsNCisgICAgfQ0KKw0KKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0K
KyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsNCisgICAgbVN0YXRlLnJl
bmRlcmJ1ZmZlci5zZXQoTlVMTCk7DQorDQorICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsN
CisgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7DQorDQorICAgIGRlbGV0ZSBtVmVy
dGV4RGF0YU1hbmFnZXI7DQorICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsNCisgICAgZGVs
ZXRlIG1CbGl0Ow0KKyAgICBkZWxldGUgbUxpbmVMb29wSUI7DQorDQorICAgIGlmIChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlKQ0KKyAgICB7DQorICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
LT5SZWxlYXNlKCk7DQorICAgIH0NCisNCisgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgp
Ow0KK30NCisNCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQ0KK3sNCisgICAgbURpc3BsYXkgPSBkaXNwbGF5Ow0K
KyAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOw0KKw0KKyAgICBpZiAoIW1IYXNC
ZWVuQ3VycmVudCkNCisgICAgew0KKyAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+Z2V0
RGV2aWNlQ2FwcygpOw0KKw0KKyAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRl
eERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOw0KKyAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIg
PSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsNCisgICAgICAgIG1CbGl0ID0g
bmV3IEJsaXQodGhpcyk7DQorDQorICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2
aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsNCisgICAg
ICAgIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUgPSBtRGlzcGxheS0+Z2V0VmVydGV4VGV4dHVyZVN1
cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBtRGlzcGxheS0+
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0luc3RhbmNp
bmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsNCisNCisgICAgICAgIG1NYXhU
ZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNlQ2Fwcy5NYXhU
ZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCksDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0g
c3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOw0KKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOw0KKyAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9
IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsNCisgICAgICAgIFRSQUNFKCJNYXhUZXh0
dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVm
ZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQiLA0KKyAgICAgICAgICAgICAgbU1h
eFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1
ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7DQorDQorICAgICAgICBjb25zdCBEM0RG
T1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0NCisgICAgICAgIHsNCisgICAgICAgICAgICBE
M0RGTVRfQThSOEc4QjgsDQorICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4LA0KKyAgICAgICAg
ICAgIEQzREZNVF9SNUc2QjUsDQorICAgICAgICAgICAgRDNERk1UX0QyNFM4DQorICAgICAgICB9
Ow0KKw0KKyAgICAgICAgaW50IG1heCA9IDA7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyArK2kpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29s
W0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsNCisgICAgICAgICAgICBtRGlzcGxheS0+
Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KHJlbmRlckJ1ZmZlckZvcm1hdHNbaV0sIG11bHRpc2FtcGxl
QXJyYXkpOw0KKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVyQnVmZmVyRm9y
bWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Ow0KKw0KKyAgICAgICAgICAgIGZvciAoaW50IGog
PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgbWF4ID0gajsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4
Ow0KKw0KKyAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXktPmdldEV2ZW50
UXVlcnlTdXBwb3J0KCk7DQorICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gbURp
c3BsYXktPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRFhU
MVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOw0KKyAgICAgICAg
bVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJlU3VwcG9ydCgp
Ow0KKyAgICAgICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDVUZXh0
dXJlU3VwcG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzID0gbURpc3Bs
YXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
ciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOw0KKyAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxh
eS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsNCisgICAgICAgIG1TdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpOw0KKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCk7DQorDQorICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMg
PSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7DQorDQorICAgICAgICBt
TnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsNCisgICAgICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHMgKz0gMjsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0
dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMgKz0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmco
KTsNCisgICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOw0KKw0KKyAgICAgICAgbVN0YXRlLnZp
ZXdwb3J0WCA9IDA7DQorICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsNCisgICAgICAgIG1T
dGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisgICAgICAgIG1TdGF0
ZS52aWV3cG9ydEhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOw0KKw0KKyAgICAgICAgbVN0
YXRlLnNjaXNzb3JYID0gMDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7DQorICAgICAg
ICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsNCisgICAgICAgIG1T
dGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7DQorDQorICAgICAgICBt
SGFzQmVlbkN1cnJlbnQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIC8vIFdyYXAgdGhlIGV4aXN0
aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0g
dG8gdGhlICcwJyBuYW1lcw0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRh
cmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOw0KKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAgIENv
bG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRl
clRhcmdldCk7DQorICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVy
byA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsNCisgICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJa
ZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsNCisNCisgICAgc2V0RnJhbWVidWZmZXJaZXJv
KGZyYW1lYnVmZmVyWmVybyk7DQorDQorICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQ0KKyAg
ICB7DQorICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIH0NCisN
CisgICAgaWYgKGRlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgZGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7DQorICAgIH0NCisgICAgDQorICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7DQorfQ0K
Kw0KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRp
cnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcu
DQordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpDQorew0KKyAgICBmb3IgKGludCB0
ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspDQorICAgIHsNCisgICAgICAg
IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGlu
dCB0ID0gMDsgdCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHQrKykNCisg
ICAgew0KKyAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbdF0gPSAwOw0KKyAgICB9DQor
DQorICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsID0gMDsNCisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7DQorICAg
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSAwOw0KKyAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVZpZXdw
b3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCA9IGZhbHNlOw0KKw0KKyAgICBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5tYXJrU3RhdGVEaXJ0
eSgpOw0KKw0KKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbUN1bGxTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IHRydWU7DQorICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU3Rl
bmNpbFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0
cnVlOw0KKyAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICBtU2FtcGxlU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgbUZyb250
RmFjZURpcnR5ID0gdHJ1ZTsNCisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7DQorICAgIG1D
YWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6bWFya0R4
VW5pZm9ybXNEaXJ0eSgpDQorew0KKyAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsNCit9DQor
DQordm9pZCBDb250ZXh0OjptYXJrQ29udGV4dExvc3QoKQ0KK3sNCisgICAgaWYgKG1SZXNldFN0
cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpDQorICAgICAgICBtUmVzZXRT
dGF0dXMgPSBHTF9VTktOT1dOX0NPTlRFWFRfUkVTRVRfRVhUOw0KKyAgICBtQ29udGV4dExvc3Qg
PSB0cnVlOw0KK30NCisNCitib29sIENvbnRleHQ6OmlzQ29udGV4dExvc3QoKQ0KK3sNCisgICAg
cmV0dXJuIG1Db250ZXh0TG9zdDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9y
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQ0KK3sNCisg
ICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7DQorICAgIG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVl
ID0gYmx1ZTsNCisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOw0KK30N
CisNCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpDQorew0KKyAgICBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQ0KK3sNCisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlID0gc3RlbmNpbDsNCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVu
YWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpDQorICAgIHsN
CisgICAgICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7DQorICAgICAgICBtQ3VsbFN0YXRl
RGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVu
YWJsZWQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkNCit7DQorICAgIGlmIChtU3Rh
dGUuY3VsbE1vZGUgIT0gbW9kZSkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0g
bW9kZTsNCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQor
dm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQ0KK3sNCisgICAgaWYgKG1T
dGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5mcm9udEZh
Y2UgPSBmcm9udDsNCisgICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9
DQorDQordm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQ0KK3sNCisgICAg
aWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgbVN0YXRl
LmRlcHRoVGVzdCA9IGVuYWJsZWQ7DQorICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsNCit9DQorDQordm9pZCBDb250ZXh0
OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykNCit7DQorICAgIGlmIChtU3RhdGUuZGVw
dGhGdW5jICE9IGRlcHRoRnVuYykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9
IGRlcHRoRnVuYzsNCisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
fQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZh
cikNCit7DQorICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOw0KKyAgICBtU3RhdGUuekZhciA9IHpG
YXI7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVkKQ0KK3sNCisg
ICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUu
YmxlbmQgPSBlbmFibGVkOw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7DQorICAg
IH0NCit9DQorDQorYm9vbCBDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0DQorew0KKyAg
ICByZXR1cm4gbVN0YXRlLmJsZW5kOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldEJsZW5kRmFj
dG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhh
LCBHTGVudW0gZGVzdEFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAh
PSBzb3VyY2VSR0IgfHwNCisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJj
ZUFscGhhIHx8DQorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IGRlc3RSR0IgfHwNCisg
ICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpDQorICAgIHsNCisgICAg
ICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJHQjsNCisgICAgICAgIG1TdGF0ZS5k
ZXN0QmxlbmRSR0IgPSBkZXN0UkdCOw0KKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEg
PSBzb3VyY2VBbHBoYTsNCisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IGRlc3RBbHBo
YTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkNCit7DQorICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0g
cmVkIHx8DQorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVlbiB8fA0KKyAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8DQorICAgICAgICBtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkNCisgICAgew0KKyAgICAgICAgbVN0YXRlLmJsZW5k
Q29sb3IucmVkID0gcmVkOw0KKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVl
bjsNCisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBibHVlOw0KKyAgICAgICAgbVN0
YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsNCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbihH
TGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQ0KK3sNCisgICAgaWYgKG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8DQorICAgICAgICBtU3RhdGUu
YmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247DQorICAgICAgICBtU3RhdGUuYmxl
bmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsNCisgICAgICAgIG1CbGVuZFN0YXRlRGly
dHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRlc3Qo
Ym9vbCBlbmFibGVkKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVk
KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOw0KKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRl
eHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUu
c3RlbmNpbFRlc3Q7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyhHTGVu
dW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzaykNCit7
DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwNCisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxSZWYgfHwNCisgICAgICAgIG1TdGF0ZS5zdGVu
Y2lsTWFzayAhPSBzdGVuY2lsTWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxG
dW5jID0gc3RlbmNpbEZ1bmM7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2ls
UmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsNCisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9
IHN0ZW5jaWxNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVu
Y2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNr
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgIT0gc3RlbmNpbEJhY2tGdW5j
IHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwN
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQ0KKyAg
ICB7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOw0K
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBz
dGVuY2lsQmFja1JlZiA6IDA7DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gc3Rl
bmNpbEJhY2tNYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAg
fQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5j
aWxXcml0ZW1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3Rl
bmNpbFdyaXRlbWFzaykNCisgICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBzdGVuY2lsV3JpdGVtYXNrOw0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsN
CisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykNCit7DQorICAgIGlmIChtU3RhdGUuc3RlbmNpbEJh
Y2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spDQorICAgIHsNCisgICAgICAgIG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOw0KKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpDQorew0KKyAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8DQorICAgICAgICBtU3RhdGUu
c3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwNCisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRoUGFzcykNCisg
ICAgew0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7DQorICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNz
Ow0KKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2
b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tG
YWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhQYXNzKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3Rl
bmNpbEJhY2tGYWlsIHx8DQorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWls
ICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8fA0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBzdGVuY2lsQmFja0ZhaWw7DQorICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsOw0KKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzczsNCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQor
ICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVu
YWJsZWQpDQorew0KKyAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsICE9IGVuYWJsZWQp
DQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7DQor
ICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0K
K2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdA0KK3sNCisg
ICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsNCisNCit9DQorDQordm9pZCBDb250
ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRz
KQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3RvciB8fA0K
KyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykNCisgICAgew0KKyAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7DQorICAgICAgICBtU3Rh
dGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7DQorICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxl
QWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxl
QWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5zYW1w
bGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOw0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292
ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFU
b0NvdmVyYWdlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wg
ZW5hYmxlZCkNCit7DQorICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkN
CisgICAgew0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5hYmxlZDsNCisgICAg
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRl
eHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2U7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJh
Z2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQ0KK3sNCisgICAgaWYgKG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8DQorICAgICAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2VWYWx1ZSA9IHZhbHVlOw0KKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52
ZXJ0ID0gaW52ZXJ0Ow0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKQ0KK3sN
CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFibGVkKQ0KKyAgICB7DQorICAgICAg
ICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURp
cnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIENvbnRleHQ6OmlzU2Npc3NvclRlc3RF
bmFibGVkKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUuc2Npc3NvclRlc3Q7DQorfQ0K
Kw0KK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkNCit7DQorICAgIGlmICht
U3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5kaXRoZXIg
PSBlbmFibGVkOw0KKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
fQ0KKw0KK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtU3RhdGUuZGl0aGVyOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChH
TGZsb2F0IHdpZHRoKQ0KK3sNCisgICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRoOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCkNCit7DQor
ICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50Ow0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpDQorew0KKyAg
ICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7DQorICAgIC8vIFRP
RE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3Jp
dGUNCisgICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBkZHhfZmluZSBkZXBlbmRpbmcgb24gdGhl
IGhpbnQuDQorICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50
YXRpb25zIHRvIGlnbm9yZSBoaW50Lg0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0
UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0K
K3sNCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7DQorICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5
Ow0KKyAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHdpZHRoOw0KKyAgICBtU3RhdGUudmlld3Bv
cnRIZWlnaHQgPSBoZWlnaHQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFt
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQor
ICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8fCBtU3RhdGUuc2Npc3NvclkgIT0geSB8fCAN
CisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgIT0gaGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBtU3RhdGUuc2Npc3NvclggPSB4Ow0K
KyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lk
dGggPSB3aWR0aDsNCisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gaGVpZ2h0Ow0KKyAg
ICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENv
bnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29s
IGFscGhhKQ0KK3sNCisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0
ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fA0KKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpDQorICAgIHsNCisg
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7DQorICAgICAgICBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gPSBncmVlbjsNCisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gYmx1ZTsN
CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOw0KKyAgICAgICAgbU1hc2tT
dGF0ZURpcnR5ID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldERlcHRo
TWFzayhib29sIG1hc2spDQorew0KKyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQ0K
KyAgICB7DQorICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsNCisgICAgICAgIG1NYXNr
U3RhdGVEaXJ0eSA9IHRydWU7DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0OjpzZXRBY3Rp
dmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpDQorew0KKyAgICBtU3RhdGUuYWN0aXZlU2Ft
cGxlciA9IGFjdGl2ZTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsN
Cit9DQorDQorR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsNCit9DQorDQorR0x1aW50
IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QXJy
YXlCdWZmZXJIYW5kbGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5pZCgpOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRh
cmdldCkgY29uc3QNCit7DQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7DQorICAgIA0K
KyAgICBzd2l0Y2ggKHRhcmdldCkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0VYVDoNCisgICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRF0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOg0KKyAgICAgICAgcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV0uZ2V0KCk7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAg
ICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICBpZiAocXVlcnlPYmplY3QpDQor
ICAgIHsNCisgICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsNCisgICAgfQ0KKyAgICBl
bHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQ0KK3sNCisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOw0KK30NCisNCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUg
JkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pDQor
ew0KKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikNCit7DQorICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsNCisgICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsNCisgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsNCisgICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsNCisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7DQorICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7DQorfQ0K
Kw0KK2NvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQg
aW50IGF0dHJpYk51bSkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7DQorfQ0KKw0KK2NvbnN0IFZlcnRleEF0dHJpYnV0ZUFy
cmF5ICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkNCit7DQorICAgIHJldHVybiBtU3Rh
dGUudmVydGV4QXR0cmlidXRlOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFBhY2tBbGlnbm1l
bnQoR0xpbnQgYWxpZ25tZW50KQ0KK3sNCisgICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGln
bm1lbnQ7DQorfQ0KKw0KK0dMaW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50Ow0KK30NCisNCit2b2lkIENvbnRl
eHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpDQorew0KKyAgICBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50Ow0KK30NCisNCitHTGludCBDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2tBbGln
bm1lbnQ7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRlcihib29s
IHJldmVyc2VSb3dPcmRlcikNCit7DQorICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0g
cmV2ZXJzZVJvd09yZGVyOw0KK30NCisNCitib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93
T3JkZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVy
Ow0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkNCit7DQorICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsNCit9DQorDQorR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZVByb2dyYW0oKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNy
ZWF0ZVByb2dyYW0oKTsNCit9DQorDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSkNCit7DQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIo
dHlwZSk7DQorfQ0KKw0KK0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkNCit7DQorICAg
IHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKCk7DQorfQ0KKw0KK0dMdWlu
dCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJj
ZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOw0KK30NCisNCisvLyBSZXR1cm5zIGFuIHVu
dXNlZCBmcmFtZWJ1ZmZlciBuYW1lDQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVy
KCkNCit7DQorICAgIEdMdWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3Iu
YWxsb2NhdGUoKTsNCisNCisgICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOw0KKw0K
KyAgICByZXR1cm4gaGFuZGxlOw0KK30NCisNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2Uo
KQ0KK3sNCisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0
ZSgpOw0KKw0KKyAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7DQor
DQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KKy8vIFJldHVybnMgYW4gdW51c2VkIHF1ZXJ5
IG5hbWUNCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQ0KK3sNCisgICAgR0x1aW50IGhh
bmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOw0KKw0KKyAgICBtUXVlcnlN
YXBbaGFuZGxlXSA9IE5VTEw7DQorDQorICAgIHJldHVybiBoYW5kbGU7DQorfQ0KKw0KK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpDQorew0KKyAgICBpZiAobVJlc291
cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpDQorICAgIHsNCisgICAgICAgIGRldGFjaEJ1
ZmZlcihidWZmZXIpOw0KKyAgICB9DQorICAgIA0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxl
dGVCdWZmZXIoYnVmZmVyKTsNCit9DQorDQordm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1
aW50IHNoYWRlcikNCit7DQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihzaGFk
ZXIpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
DQorew0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOw0KKyAg
ICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRl
bGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpDQorew0KKyAgICBpZiAobVJlc291cmNlTWFuYWdl
ci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkNCisgICAgew0KKyAgICAgICAgZGV0YWNoVGV4dHVyZSh0
ZXh0dXJlKTsNCisgICAgfQ0KKw0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJl
KHRleHR1cmUpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hSZW5kZXJidWZm
ZXIocmVuZGVyYnVmZmVyKTsNCisgICAgfQ0KKyAgICANCisgICAgbVJlc291cmNlTWFuYWdlci0+
ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgRnJhbWVidWZm
ZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQo
ZnJhbWVidWZmZXIpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVm
ZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcik7DQorDQorICAgICAgICBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShm
cmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZyYW1lYnVmZmVyT2Jq
ZWN0LT5zZWNvbmQ7DQorICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJP
YmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50
IGZlbmNlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNl
TWFwLmZpbmQoZmVuY2UpOw0KKw0KKyAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVu
ZCgpKQ0KKyAgICB7DQorICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5j
ZU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7DQor
ICAgICAgICBtRmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOw0KKyAgICB9DQorfQ0KKw0KK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAgUXVlcnlNYXA6
Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5TWFwLmZpbmQocXVlcnkpOw0KKyAgICBpZiAo
cXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICBtUXVlcnlI
YW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVjdC0+Zmlyc3QpOw0KKyAgICAgICAgaWYg
KHF1ZXJ5T2JqZWN0LT5zZWNvbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcXVlcnlPYmpl
Y3QtPnNlY29uZC0+cmVsZWFzZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbVF1ZXJ5TWFwLmVy
YXNlKHF1ZXJ5T2JqZWN0KTsNCisgICAgfQ0KK30NCisNCitCdWZmZXIgKkNvbnRleHQ6OmdldEJ1
ZmZlcihHTHVpbnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dEJ1ZmZlcihoYW5kbGUpOw0KK30NCisNCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVp
bnQgaGFuZGxlKQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOw0KK30NCisNCitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5k
bGUpDQorew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUp
Ow0KK30NCisNCitUZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpDQor
ew0KKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZShoYW5kbGUpOw0KK30N
CisNCitSZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxl
KQ0KK3sNCisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5k
bGUpOw0KK30NCisNCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkN
Cit7DQorICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsN
Cit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpDQorew0K
KyAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQ0KK3sNCisgICAgbVJlc291cmNl
TWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7DQorDQorICAgIG1TdGF0ZS5h
cnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6
OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikNCit7DQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOw0KKw0KKyAgICBt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8y
RCk7DQorDQorICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkNCit7DQorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV9DVUJFKTsN
CisNCisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2
ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsNCit9DQorDQordm9pZCBDb250ZXh0
OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikNCit7DQorICAgIGlmICgh
Z2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQ0KKyAgICB7DQorICAgICAgICBtRnJhbWVidWZm
ZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7DQorICAgIH0NCisNCisgICAg
bVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOw0KK30NCisNCit2b2lkIENvbnRl
eHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgaWYg
KCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpDQorICAgIHsNCisgICAgICAgIG1GcmFtZWJ1
ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsNCisgICAgfQ0KKw0KKyAg
ICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7DQorDQorICAgIG1Cb3VuZERy
YXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsNCit9DQorDQordm9p
ZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpDQorew0KKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVm
ZmVyKTsNCisNCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcikpOw0KK30NCisNCit2b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHBy
b2dyYW0pDQorew0KKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9n
cmFtOw0KKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAg
IC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25s
eSBnZXRzIGZsYWdnZWQuDQorDQorICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkNCisg
ICAgew0KKyAgICAgICAgUHJvZ3JhbSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdl
dFByb2dyYW0ocHJvZ3JhbSk7DQorICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291
cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOw0KKyAgICAgICAgbUNhY2hlZEN1
cnJlbnRQcm9ncmFtID0gTlVMTDsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOw0K
Kw0KKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pDQorICAgICAgICB7DQorICAgICAgICAgICAgbmV3
UHJvZ3JhbS0+YWRkUmVmKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIGlmIChv
bGRQcm9ncmFtKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9sZFByb2dyYW0tPnJlbGVhc2Uo
KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnko
R0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQ0KK3sNCisgICAgLy8gRnJvbSBFWFRfb2NjbHVz
aW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2FsbGVkIHdpdGggYW4gPGlk
PiAgDQorICAgIC8vIG9mIHplcm8sIGlmIHRoZSBhY3RpdmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9y
IDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhlICANCisgICAgLy8gdGFyZ2V0cyBBTllfU0FN
UExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwg
aWYgIA0KKyAgICAvLyB0aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIgdGFyZ2V0IGlzIG5vbi16
ZXJvKSwgaWYgPGlkPiBpcyB0aGUgbmFtZSBvZiBhbiANCisgICAgLy8gZXhpc3RpbmcgcXVlcnkg
b2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRhcmdldD4sIG9yIGlmIDxpZD4gaXMg
dGhlDQorICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55IHF1ZXJ5IHR5cGUs
IHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcw0KKyAgICAvLyBnZW5lcmF0ZWQuDQorDQor
ICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUNCisgICAgLy8gTk9URTog
SWYgb3RoZXIgcXVlcmllcyB0aGFuIG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3ZSB3aWxsIG5l
ZWQgdG8gY2hlY2sNCisgICAgLy8gc2VwYXJhdGVseSB0aGF0Og0KKyAgICAvLyAgICBhKSBUaGUg
cXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9yIGFueSB0
YXJnZXQvdHlwZQ0KKyAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9y
IHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UNCisgICAgLy8gICAgICAgb2Yg
R0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNF
UlZBVElWRV9FWFQsDQorICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9yIGVp
dGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuDQorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRl
LmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsNCisgICAgICAgIH0NCisgICAgfQ0K
Kw0KKyAgICBRdWVyeVR5cGUgcVR5cGU7DQorICAgIHN3aXRjaCAodGFyZ2V0KQ0KKyAgICB7DQor
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiANCisgICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IA0KKyAgICAgICAgcVR5cGUg
PSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyANCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGRlZmF1bHQ6IA0KKyAgICAgICAgQVNTRVJUKGZhbHNlKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVy
eSwgdHJ1ZSwgdGFyZ2V0KTsNCisNCisgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5l
ZCB3aXRoIGdsR2VuUXVlcmllcw0KKyAgICBpZiAoIXF1ZXJ5T2JqZWN0KQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAg
IC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNoDQorICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlw
ZSgpICE9IHRhcmdldCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBz
cGVjaWZpZWQgdGFyZ2V0DQorICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5
T2JqZWN0KTsNCisNCisgICAgLy8gYmVnaW4gcXVlcnkNCisgICAgcXVlcnlPYmplY3QtPmJlZ2lu
KCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdldCkNCit7DQor
ICAgIFF1ZXJ5VHlwZSBxVHlwZTsNCisNCisgICAgc3dpdGNoICh0YXJnZXQpDQorICAgIHsNCisg
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IA0KKyAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogDQorICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IA0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgZGVmYXVsdDogDQorICAgICAgICBBU1NFUlQoZmFsc2UpOw0KKyAgICAgICAgcmV0
dXJuOw0KKyAgICB9DQorDQorICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVR
dWVyeVtxVHlwZV0uZ2V0KCk7DQorDQorICAgIGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9
DQorDQorICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsNCisNCisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5
W3FUeXBlXS5zZXQoTlVMTCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJa
ZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpDQorew0KKyAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFw
WzBdOw0KKyAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7DQorICAgIGlmIChtU3RhdGUu
ZHJhd0ZyYW1lYnVmZmVyID09IDApDQorICAgIHsNCisgICAgICAgIG1Cb3VuZERyYXdGcmFtZWJ1
ZmZlciA9IGJ1ZmZlcjsNCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQ0KK3sNCisgICAg
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdl
dCgpOw0KKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsN
Cit9DQorDQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGlu
dCBoYW5kbGUpDQorew0KKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIg
PSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOw0KKw0KKyAgICBpZiAoZnJhbWVidWZmZXIg
PT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsN
CisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+
c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0ZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25l
ZCBpbnQgaGFuZGxlKQ0KK3sNCisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNl
TWFwLmZpbmQoaGFuZGxlKTsNCisNCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU1hcC5lbmQoKSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsNCisgICAgfQ0KK30NCisNCitRdWVyeSAq
Q29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51
bSB0eXBlKQ0KK3sNCisgICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1ZXJ5TWFwLmZp
bmQoaGFuZGxlKTsNCisNCisgICAgaWYgKHF1ZXJ5ID09IG1RdWVyeU1hcC5lbmQoKSkNCisgICAg
ew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHF1ZXJ5LT5zZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsNCisgICAgICAgICAg
ICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBx
dWVyeS0+c2Vjb25kOw0KKyAgICB9DQorfQ0KKw0KK0J1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQ0KK3sNCisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsNCit9DQor
DQorQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQ0KK3sNCisgICAgcmV0
dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7DQorfQ0KKw0KK1Byb2dyYW0gKkNv
bnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKCkNCit7DQorICAgIGlmICghbUNhY2hlZEN1cnJlbnRQ
cm9ncmFtKQ0KKyAgICB7DQorICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7DQorICAgIH0NCisg
ICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50UHJvZ3JhbTsNCit9DQorDQorVGV4dHVyZTJEICpDb250
ZXh0OjpnZXRUZXh0dXJlMkQoKQ0KK3sNCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUy
RCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7
DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpDQor
ew0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihnZXRTYW1wbGVyVGV4
dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7DQorfQ0KKw0KK1RleHR1
cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0
dXJlVHlwZSB0eXBlKQ0KK3sNCisgICAgR0x1aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7DQorDQorICAgIGlmICh0ZXhpZCA9PSAwKSAgIC8vIFNw
ZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQg
b24gdGhlIHRhcmdldA0KKyAgICB7DQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICB7
DQorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgIGNhc2UgVEVY
VFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOw0KKyAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1w
bGVyXS5nZXQoKTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5h
bWUsIEdMYm9vbGVhbiAqcGFyYW1zKQ0KK3sNCisgICAgc3dpdGNoIChwbmFtZSkNCisgICAgew0K
KyAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFtcyA9IEdMX1RS
VUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUlu
dmVydDsgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOg0KKyAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmNvbG9yTWFza1JlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1h
c2tHcmVlbjsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvck1hc2tCbHVlOw0KKyAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOw0KKyAgICAgICAgYnJlYWs7
DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9Q
T0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRG
aWxsOyAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0U6ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0
OyAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOiAqcGFy
YW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9GQUxTRTsgYnJlYWs7DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
dHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZs
b2F0ICpwYXJhbXMpDQorew0KKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUg
aXMgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRhdGlvbg0KKyAg
ICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBu
YXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBh
bnkNCisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBj
YWxsaW5nIGFwcGxpY2F0aW9uLg0KKyAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICB7DQorICAgICAg
Y2FzZSBHTF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUubGluZVdp
ZHRoOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZB
TFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWU7ICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GQUNUT1I6ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAqcGFyYW1zID0gbVN0
YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsNCisgICAgICBjYXNlIEdMX0FMSUFTRURf
TElORV9XSURUSF9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfTElORV9X
SURUSF9SQU5HRV9NQVg7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0FMSUFTRURf
UE9JTlRfU0laRV9SQU5HRToNCisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0VfTUlOOw0KKyAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VE
X1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfREVQVEhfUkFOR0U6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7DQorICAg
ICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuZ3JlZW47DQorICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmJsdWU7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhh
Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoNCisgICAgICAg
IHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsNCisgICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOw0KKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJs
ZW5kQ29sb3IuYmx1ZTsNCisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBm
YWxzZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpDQorew0KKyAgICAvLyBQ
bGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRl
cm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbg0KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0
b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVj
IG5hbWVzDQorICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24u
IEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkNCisgICAgLy8gY2FzZSwgdGhp
cyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZ
b3UgbWF5IGZpbmQgaXQgaW4gDQorICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4NCisgICAgc3dp
dGNoIChwbmFtZSkNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAg
ICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsNCisgICAgICBjYXNlIEdM
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMoKTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAg
ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBi
cmVhazsNCisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAq
cGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmlu
YXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsNCisgICAgICBjYXNl
IEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFy
cmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsNCisgICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJf
QklORElORzogICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEUNCisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElO
R19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAg
ICBicmVhazsNCisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTog
ICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsNCisgICAgICBj
YXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BB
Q0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGln
bm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJT
RV9ST1dfT1JERVJfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3Jk
ZXI7ICAgICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAq
cGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9N
QVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7ICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBh
c3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNT
X0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3M7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAg
ICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JD
X0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YTsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9W
QUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMg
PSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgIGJyZWFrOw0KKyAgICAgIGNh
c2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIA0KKyAgICAgICAgcGFyYW1z
WzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsNCisgICAgICAgIGJyZWFrOw0KKyAg
ICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6DQorICAgICAgICB7DQorICAgICAgICAgICAg
R0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpOw0KKyAgICAgICAg
ICAgIGlmIChtYXhTYW1wbGVzICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbWF4U2FtcGxlczsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxz
ZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg
ICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICBjYXNl
IEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICANCisgICAgICBjYXNlIEdMX1NB
TVBMRVM6DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0KKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoNCisgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDE7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6DQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2Ug
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAg
ICAgICB9DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX0lNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfVFlQRTsgICBicmVhazsNCisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUOyBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOg0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkp
Ow0KKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsNCisgICAgICAgICAgICBw
YXJhbXNbMV0gPSBtYXhEaW1lbnNpb247DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcysrID0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfVklFV1BPUlQ6DQorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRY
Ow0KKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsNCisgICAgICAgIHBhcmFt
c1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOw0KKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TQ0lTU09S
X0JPWDoNCisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lzc29yWDsNCisgICAgICAgIHBh
cmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsNCisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5z
Y2lzc29yV2lkdGg7DQorICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuc2Npc3NvckhlaWdodDsN
CisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAgICBicmVh
azsNCisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgY2Fz
ZSBHTF9SRURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAgICAgY2FzZSBH
TF9CTFVFX0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOw0KKw0KKyAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
cikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICpw
YXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVl
blNpemUoKTsgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsNCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0QWxw
aGFTaXplKCk7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfREVQVEhfQklUUzoNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorICAgICAgICAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsNCisNCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
ICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorDQorICAgICAgICAgICAgaWYgKHN0ZW5j
aWxidWZmZXIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3Rl
bmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfMkQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlk
KCk7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAobVN0YXRlLmFj
dGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJ
RklDQVRJT05fU1RSQVRFR1lfRVhUOg0KKyAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5
Ow0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9S
TUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0gMTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAg
IGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6DQorICAgICAgICAqcGFyYW1zID0g
R0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0
Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHJldHVybiB0cnVlOw0K
K30NCisNCitib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUs
IEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpDQorew0KKyAgICAvLyBQbGVh
c2Ugbm90ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGlu
IHRoaXMgaW1wbGVtZW50YXRpb24NCisgICAgLy8gaXMgRkxPQVQgcmF0aGVyIHRoYW4gSU5ULCBh
cyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhlIEdMIEVTIDIuMCBzcGVjLiBUaGlzIGlzIGR1ZQ0K
KyAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxv
YXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24NCisgICAgLy8gaWYgcmV0dXJuZWQg
ZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVh
ZHkgaW1wbGVtZW50ZWQgDQorICAgIC8vIGluIHRoZSBjYXNlIHRoYXQgb25lIGNhbGxzIGdsR2V0
SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10eXBlZCBzdGF0ZSB2YXJpYWJsZSwgd2UNCisg
ICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3Vs
ZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcNCisgICAgLy8gYXBwbGljYXRpb24u
DQorICAgIHN3aXRjaCAocG5hbWUpDQorICAgIHsNCisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
VEVYVFVSRV9GT1JNQVRTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
Ow0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJfQklO
QVJZX0ZPUk1BVFM6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7DQor
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsN
CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoNCisgICAgICBjYXNlIEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzoNCisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOg0KKyAgICAgIGNhc2Ug
R0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6DQorICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTOg0KKyAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOg0K
KyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoNCisgICAgICBjYXNlIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoNCisgICAgICBjYXNlIEdMX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoNCisgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOg0KKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOg0KKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6DQorICAgICAgY2FzZSBHTF9Q
QUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOg0KKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdO
TUVOVDoNCisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOg0KKyAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6DQorICAgICAgY2FzZSBHTF9S
RURfQklUUzoNCisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6DQorICAgICAgY2FzZSBHTF9CTFVF
X0JJVFM6DQorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOg0KKyAgICAgIGNhc2UgR0xfREVQVEhf
QklUUzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoNCisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6DQorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToN
CisgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6DQorICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVS
RToNCisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxf
VkFMVUVfTUFTSzoNCisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOg0KKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GQUlMOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6DQor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoNCisgICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19GVU5DOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZBSUw6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
Og0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoNCisgICAgICBj
YXNlIEdMX0RFUFRIX0ZVTkM6DQorICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOg0KKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOg0KKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoN
CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQToNCisgICAgICBjYXNlIEdMX0JMRU5EX0VR
VUFUSU9OX1JHQjoNCisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOg0KKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6DQorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
V1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToNCisgICAgICBj
YXNlIEdMX1NVQlBJWEVMX0JJVFM6DQorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOg0K
KyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToNCisgICAgICBjYXNlIEdM
X1NBTVBMRV9CVUZGRVJTOg0KKyAgICAgIGNhc2UgR0xfU0FNUExFUzoNCisgICAgICBjYXNlIEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToNCisgICAgICBjYXNlIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5H
XzJEOg0KKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOg0KKyAgICAgIGNh
c2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoNCisgICAgICBjYXNlIEdMX05V
TV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoNCisgICAgICBjYXNlIEdMX1BST0dSQU1fQklO
QVJZX0ZPUk1BVFNfT0VTOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
Ow0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJl
YWs7DQorICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApDQorICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsNCisgICAgICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQor
ICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9E
SU1TOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
Y2FzZSBHTF9WSUVXUE9SVDoNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOg0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSA0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9TSEFERVJf
Q09NUElMRVI6DQorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOg0KKyAgICAg
IGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOg0KKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAg
ICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNF
bmFibGVkLA0KKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAvLyBidXQg
Y2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMuDQorICAgICAg
Y2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1cnBvc2UsIHRo
ZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwNCisgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRToNCisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoNCisgICAgICBjYXNlIEdM
X1NURU5DSUxfVEVTVDoNCisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6DQorICAgICAgY2FzZSBH
TF9CTEVORDoNCisgICAgICBjYXNlIEdMX0RJVEhFUjoNCisgICAgICBjYXNlIEdMX0NPTlRFWFRf
Uk9CVVNUX0FDQ0VTU19FWFQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgKnR5cGUgPSBHTF9C
T09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6DQorICAgICAgICB7DQorICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Ow0K
KyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GQUNUT1I6DQorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoNCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToNCisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFS
X1ZBTFVFOg0KKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDoNCisgICAgICAgIHsNCisgICAgICAg
ICAgICAqdHlwZSA9IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6DQorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6DQorICAg
ICAgY2FzZSBHTF9ERVBUSF9SQU5HRToNCisgICAgICAgIHsNCisgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOw0KKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToNCisgICAgICBj
YXNlIEdMX0JMRU5EX0NPTE9SOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgICp0eXBlID0gR0xf
RkxPQVQ7DQorICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7DQorICAgICAgICB9DQorICAgICAg
ICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9
DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFy
Z2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFu
ZA0KKy8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK2Jvb2wg
Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkNCit7DQorICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOw0K
Kw0KKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21w
bGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7DQor
ICAgIH0NCisNCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0
IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudA0KKyAgICAvLyB0byBrZWVwIHRoZSBE
M0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGgg
dGV4dHVyaW5nLg0KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IE5VTEw7
DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xf
Tk9ORSkNCisgICAgew0KKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJP
YmplY3QtPmdldENvbG9yYnVmZmVyKCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENvbG9y
YnVmZmVyKCk7DQorICAgIH0NCisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3QpDQorICAgIHsN
CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBib29sIHJlbmRlclRhcmdl
dENoYW5nZWQgPSBmYWxzZTsNCisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7DQorICAgIGlmIChyZW5kZXJUYXJnZXRT
ZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpDQorICAgIHsNCisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOw0KKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwu
Iik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0
DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVy
VGFyZ2V0KTsNCisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFy
Z2V0U2VyaWFsOw0KKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsgLy8gU2Npc3Nv
ciBhcmVhIG11c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0tIHRoaXMgaXMg
ZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuDQorICAgICAgICByZW5kZXJU
YXJnZXRDaGFuZ2VkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0K
KyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOw0K
KyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOw0KKyAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7DQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgew0KKyAgICAgICAgUmVuZGVy
YnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigp
Ow0KKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
Ow0KKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
RVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7DQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBkZXB0
aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKyAgICBl
bHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQ0KKyAgICB7DQorICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOw0KKyAgICAgICAgZGVwdGhTdGVuY2ls
ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICBpZiAoIWRlcHRo
U3RlbmNpbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9p
bnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQor
ICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVu
Y2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZGVwdGhidWZmZXJT
ZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fA0KKyAgICAgICAgc3RlbmNpbGJ1
ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwNCisgICAgICAgICFt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQpDQorICAgIHsNCisgICAgICAgIG1EZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsNCisgICAgICAgIG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsNCisgICAgICAgIG1BcHBsaWVkU3RlbmNp
bGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7DQorICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChkZXB0aFN0ZW5jaWwp
DQorICAgIHsNCisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKyAgICB9DQorDQor
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsNCisgICAgICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBD
b250ZXh0IG11c3QgYmUgbG9zdA0KKyAgICAgICAgfQ0KKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7DQorICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzY0lu
aXRpYWxpemVkID0gdHJ1ZTsNCisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAg
ICB9DQorDQorICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsNCisNCisgICAgZmxvYXQgek5lYXIg
PSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7DQorICAgIGZsb2F0IHpGYXIgPSBjbGFtcDAxKG1TdGF0
ZS56RmFyKTsNCisNCisgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQ0KKyAgICB7DQorICAgICAgICB2
aWV3cG9ydC5YID0gMDsNCisgICAgICAgIHZpZXdwb3J0LlkgPSAwOw0KKyAgICAgICAgdmlld3Bv
cnQuV2lkdGggPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aDsNCisgICAgICAgIHZpZXdwb3J0Lkhl
aWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsNCisgICAgICAgIHZpZXdwb3J0Lk1pblog
PSAwLjBmOw0KKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IDEuMGY7DQorICAgIH0NCisgICAgZWxz
ZQ0KKyAgICB7DQorICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAg
ICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WSwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgdmlld3BvcnQuV2lkdGgg
PSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlgpKTsNCisg
ICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBzdGF0aWNfY2Fz
dDxMT05HPih2aWV3cG9ydC5ZKSk7DQorICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7DQor
ICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsNCisgICAgfQ0KKw0KKyAgICBpZiAodmlld3Bv
cnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyDQorICAgIH0NCisNCisgICAgaWYg
KHJlbmRlclRhcmdldENoYW5nZWQgfHwgIW1WaWV3cG9ydEluaXRpYWxpemVkIHx8IG1lbWNtcCgm
dmlld3BvcnQsICZtU2V0Vmlld3BvcnQsIHNpemVvZiBtU2V0Vmlld3BvcnQpICE9IDApDQorICAg
IHsNCisgICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7DQorICAgICAgICBt
U2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsNCisgICAgICAgIG1WaWV3cG9ydEluaXRpYWxpemVkID0g
dHJ1ZTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAg
IGlmIChtU2Npc3NvclN0YXRlRGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2Np
c3NvclRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVDVCByZWN0Ow0KKyAgICAgICAg
ICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVjdC50b3AgPSBj
bGFtcChtU3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0
RGVzYy5IZWlnaHQpKTsNCisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAobVN0YXRlLnNj
aXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoKSk7DQorICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcCht
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFNjaXNzb3JSZWN0KCZyZWN0KTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7DQorICAgICAgICB9DQorICAgICAgICBl
bHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1T
Y2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorDQorICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkNCisgICAgew0KKyAgICAgICAgUHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7DQorICAgICAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
Ow0KKw0KKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5hcnktPmdldER4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7DQorICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYg
LyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9Ow0KKyAgICAgICAgcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7DQorDQorICAg
ICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQg
aW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkuDQorICAgICAgICBHTGludCBjb29yZCA9IHByb2dy
YW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCB3aHh5WzRd
ID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8g
Mi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0
WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIu
MGZ9Ow0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4
eSk7DQorDQorICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhM
b2NhdGlvbigpOw0KKyAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIu
MGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07DQorICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7DQorDQorICAgICAgICBHTGludCBkZXB0aFJhbmdlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsNCisgICAgICAgIEdMZmxv
YXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07DQorICAgICAg
ICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZm
KTsNCisgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBy
ZXR1cm4gdHJ1ZTsNCit9DQorDQorLy8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rpb24gc3RhdGUg
KGN1bGxpbmcsIGRlcHRoIHRlc3QsIGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5nLCBldGMpIHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQ0KK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0g
ZHJhd01vZGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFBy
b2dyYW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
T2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7DQorDQorICAgIEdMaW50IGZyb250Q0NXID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7DQorICAgIEdMaW50IGNjdyA9
IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7DQorICAgIHByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOw0KKw0KKyAgICBHTGludCBwb2ludHNPckxpbmVz
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsNCisgICAgR0xp
bnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOw0KKyAgICBwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7DQor
DQorICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0
QWRhcHRlcklkZW50aWZpZXIoKTsNCisgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlk
ZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsNCisgICAgLy8gQXBwYXJlbnRseSBzb21lIEFU
SSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcg0KKyAgICAv
LyB3cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1
bHRzLiBJbnN0ZWFkLA0KKyAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0
IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubw0KKyAgICAvLyBkcmF3aW5nIGlzIGRv
bmUuDQorICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVz
L2RldGFpbD9pZD0xNjkNCisNCisgICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNl
RGlydHkpDQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVz
MmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBtU3RhdGUuZnJvbnRGYWNlKSk7
DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7DQorICAg
ICAgICB9DQorDQorICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0K
KyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5k
ZXB0aFRlc3QpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUu
ZGVwdGhGdW5jKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFM
U0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOw0K
KyAgICB9DQorDQorICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1NYXNrU3RhdGVE
aXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkNCisgICAgew0KKyAgICAgICAgbUJsZW5kU3RhdGVE
aXJ0eSA9IHRydWU7DQorICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOw0KKyAgICB9DQor
DQorICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRl
LmJsZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIGlmIChtU3Rh
dGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJg0KKyAgICAgICAgICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0
QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNU
T1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIEQzRENPTE9SX1JHQkEo
dW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuYmxlbmRDb2xvci5hbHBoYSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRl
LmJsZW5kQ29sb3IuYWxwaGEpKSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5k
RnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0
ZS5kZXN0QmxlbmRSR0IpKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25S
R0IpKTsNCisNCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhIHx8IA0KKyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5k
UkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCANCisgICAgICAgICAgICAgICAgbVN0YXRl
LmJsZW5kRXF1YXRpb25SR0IgIT0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NF
UEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7DQorDQorICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0Qmxl
bmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhKSk7DQorICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJs
ZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5k
T3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IGZhbHNlOw0K
KyAgICB9DQorDQorICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5
KQ0KKyAgICB7DQorICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVy
T2JqZWN0LT5oYXNTdGVuY2lsKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7
DQorDQorICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkNCisgICAgICAg
ICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RS
U19TVEVOQ0lMUkVGOw0KKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RS
U19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVOQ0lMTUFTSzsNCisgICAgICAgICAgICBjb25z
dCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgDQorICAgICAgICAgICAgICAgIG1T
dGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiB8fCANCisgICAgICAgICAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3Rl
bmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVz
IGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg
ICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYNCisgICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8
IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsNCisNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1df
U1RFTkNJTEZVTkMsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOw0KKw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxSZWYg
PCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0
ZS5zdGVuY2lsTWFzayk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsNCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0ND
V19TVEVOQ0lMUEFTUywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsNCisNCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNL
LCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVO
QyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykp
Ow0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsICht
U3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RS
U19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOw0KKw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsKSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19T
VEVOQ0lMWkZBSUwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNl
DQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gZmFsc2U7DQorICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQ0KKyAgICB7DQorICAgICAgICBpbnQg
Y29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwg
bVN0YXRlLmNvbG9yTWFza0dyZWVuLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0Fs
cGhhKTsNCisgICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAhemVyb0NvbG9yTWFza0FsbG93
ZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1
dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLg0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfR1JFRU4pOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOw0KKw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsNCisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09ORSk7
DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNE
QkxFTkRPUF9BREQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IGNvbG9yTWFzayk7DQorICAgICAgICB9DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOw0K
Kw0KKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYg
KG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkNCisgICAgew0KKyAgICAgICAgaWYgKG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0RmlsbCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOw0K
KyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMs
ICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsNCisgICAgICAgICAgICAg
ICAgZmxvYXQgZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLShp
bnQpKGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOw0KKyAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFz
KSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsIDApOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFUFRIQklBUywgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobVNhbXBsZVN0YXRlRGlydHkp
DQorICAgIHsNCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMg
dW5pbXBsZW1lbnRlZC4iKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsNCisgICAgICAgIGlm
IChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IG1hc2sgPSAwOw0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VW
YWx1ZSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNo
b2xkID0gMC41ZjsNCisNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpDQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7DQorDQorICAgICAgICAgICAgICAgICAgICBp
ZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkNCisg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQg
Kz0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDE7DQorICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgDQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsNCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElT
QU1QTEVNQVNLLCBtYXNrKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1B
U0ssIDB4RkZGRkZGRkYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbVNhbXBsZVN0YXRlRGly
dHkgPSBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBpZiAobURpdGhlclN0YXRlRGlydHkpDQorICAg
IHsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwg
bVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7DQorDQorICAgICAgICBtRGl0aGVyU3RhdGVE
aXJ0eSA9IGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRl
eEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdM
c2l6ZWkgKnJlcGVhdERyYXcpDQorew0KKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0
ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsNCisNCisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRh
TWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0
YW5jZXMpOw0KKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICBy
ZXR1cm4gZXJyOw0KKyAgICB9DQorDQorICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIGdldEN1cnJlbnRQcm9ncmFt
KCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7DQorfQ0KKw0KKy8vIEFwcGxpZXMgdGhlIGluZGlj
ZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlDQor
R0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBH
THNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERh
dGEgKmluZGV4SW5mbykNCit7DQorICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+
cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5n
ZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsNCisNCisgICAgaWYgKGVyciA9PSBHTF9OT19FUlJP
UikNCisgICAgew0KKyAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJT
ZXJpYWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhpbmRl
eEluZm8tPmluZGV4QnVmZmVyKTsNCisgICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5k
ZXhJbmZvLT5zZXJpYWw7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIGVycjsN
Cit9DQorDQorLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0
aGUgRGlyZWN0M0QgOSBkZXZpY2UNCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpDQorew0K
KyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsNCisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsNCisNCisgICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBs
aWVkUHJvZ3JhbVNlcmlhbCkNCisgICAgew0KKyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4U2hhZGVyKCk7DQorICAg
ICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxTaGFkZXIoKTsNCisNCisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBp
eGVsU2hhZGVyKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOw0KKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOw0KKyAgICAg
ICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7DQor
ICAgIH0NCisNCisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOw0KK30NCisNCisv
LyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNE
IDkgZGV2aWNlDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkNCit7DQorICAgIGFwcGx5
VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7DQorDQorICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0
dXJlKQ0KKyAgICB7DQorICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsNCisg
ICAgfQ0KK30NCisNCisvLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRo
ZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsDQorLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcg
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLA0KKy8vIGFuZCBzZXRz
IHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJpbmcgc3RhdGUgKG9yIE5VTEwg
d2hlbiBpbmFjdGl2ZSkuDQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBl
IHR5cGUpDQorew0KKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dy
YW0oKTsNCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsNCisNCisgICAgaW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09
IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMg
b2YgZ2l2ZW4gc2FtcGxlciB0eXBlDQorICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRleHR1cmVT
ZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBT
IDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7DQorICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0g
KHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOw0K
KyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5n
ZSh0eXBlKTsNCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4
IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykNCisgICAgew0KKyAgICAgICAgaW50IHRl
eHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxl
ckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4DQorICAgICAgICBp
bnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7DQorDQorICAg
ICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpDQorICAgICAgICB7DQorICAgICAgICAgICAgVGV4
dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5
cGUodHlwZSwgc2FtcGxlckluZGV4KTsNCisNCisgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJl
ID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsNCisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgp
Ow0KKw0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJl
LT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkNCisgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRl
eF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQ0KKyAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9
IHRleHR1cmUtPmdldFdyYXBTKCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdy
YXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7
DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQp
KTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1h
Z0ZpbHRlcikpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBF
IGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVz
MmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZpbHRlciwgJmQzZE1pcEZp
bHRlcik7DQorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRl
KGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RT
QU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisN
CisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5k
ZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGdl
dEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gdGV4U2VyaWFsOw0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldERp
cnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0
dXJlKGQzZFNhbXBsZXIsIE5VTEwpOw0KKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg
IH0NCisNCisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdlOyBzYW1wbGVy
SW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQ0KKyAgICB7DQorICAgICAgICBp
ZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSAwKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsgZDNkU2FtcGxl
ck9mZnNldCwgTlVMTCk7DQorICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxl
ckluZGV4XSA9IDA7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQ0KK3sNCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorDQorICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7DQor
ICAgIH0NCisNCisgICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgb3V0cHV0
UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tBbGln
bm1lbnQpOw0KKyAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hlY2sNCisgICAgaWYgKGJ1ZlNp
emUpDQorICAgIHsNCisgICAgICAgIGludCByZXF1aXJlZFNpemUgPSBvdXRwdXRQaXRjaCAqIGhl
aWdodDsNCisgICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBm
cmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0K
KyAgICB7DQorICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVy
biBzaWxlbnRseQ0KKyAgICB9DQorDQorICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOw0KKyAgICBy
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOw0KKw0KKyAgICBpZiAoZGVzYy5NdWx0aVNhbXBs
ZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkNCisgICAgew0KKyAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGlu
dG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0DQorICAgICAgICByZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisg
ICAgfQ0KKw0KKyAgICBIUkVTVUxUIHJlc3VsdDsNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5
c3RlbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gIWdldFBhY2tS
ZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+
aXNEM2Q5RXhEZXZpY2UoKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PSAwICYm
IHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBk
ZXNjLkhlaWdodCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdMX1VO
U0lHTkVEX0JZVEU7DQorICAgIGlmIChkaXJlY3RUb1BpeGVscykNCisgICAgew0KKyAgICAgICAg
Ly8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhhbmRsZSB0byB3cml0ZSBkaXJlY3Rs
eSBpbnRvIGNsaWVudCdzIG1lbW9yeQ0KKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
T2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1h
dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOw0KKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIFRyeSBhZ2Fp
biB3aXRob3V0IHRoZSBzaGFyZWQgaGFuZGxlDQorICAgICAgICAgICAgZGlyZWN0VG9QaXhlbHMg
PSBmYWxzZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoIWRpcmVjdFRvUGl4ZWxz
KQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFp
blN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7DQorICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7DQorICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsNCisg
ICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorICAgIHJlbmRlclRhcmdldCA9IE5VTEw7DQor
DQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwg
c29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcg0KKyAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9z
ZSBkb2N1bWVudGVkLg0KKyAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQ0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIGVsc2UN
CisgICAgICAgIHsNCisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKw0KKyAgICBpZiAoZGlyZWN0VG9QaXhlbHMp
DQorICAgIHsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHJlY3Q7DQorICAgIHJlY3QubGVmdCA9IGNsYW1w
KHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7DQorICAgIHJlY3QudG9wID0g
Y2xhbXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorICAgIHJlY3Qu
cmlnaHQgPSBjbGFtcCh4ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRo
KSk7DQorICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KGRlc2MuSGVpZ2h0KSk7DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7DQorICAg
IHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19S
RUFET05MWSk7DQorDQorICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgew0KKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsNCisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsNCisNCisg
ICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQ0KKyAgICB9
DQorDQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOw0K
KyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7DQor
DQorICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsNCisgICAgaW50IGlucHV0UGl0Y2g7DQorICAg
IGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9
ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9t
IC0gcmVjdC50b3AgLSAxKTsNCisgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsNCisg
ICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9ICh1bnNpZ25lZCBjaGFy
Kilsb2NrLnBCaXRzOw0KKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7DQorICAgIH0N
CisNCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKysp
DQorICAgIHsNCisgICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYN
CisgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYNCisgICAgICAgICAgICB0eXBl
ID09IEdMX1VOU0lHTkVEX0JZVEUpDQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRmFzdCBw
YXRoIGZvciBFWFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4NCisgICAgICAgICAgICAvLyBhbiBS
R0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vDQorICAgICAgICAg
ICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lg0KKyAgICAgICAgICAg
IG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLA0KKyAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKyBqICogaW5wdXRQaXRjaCwNCisgICAgICAgICAgICAgICAgICAgKHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQpICogNCk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBmbG9hdCByOw0KKyAgICAgICAgICAgIGZsb2F0IGc7
DQorICAgICAgICAgICAgZmxvYXQgYjsNCisgICAgICAgICAgICBmbG9hdCBhOw0KKw0KKyAgICAg
ICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfUjVHNkI1Og0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
MiAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAgICBhID0gMS4w
ZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgw
MDFGKTsNCisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8g
MHgwN0UwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBm
IC8gMHhGODAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBz
aG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgICAg
ICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOw0KKyAgICAgICAgICAg
ICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsNCisgICAgICAg
ICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7DQorICAg
ICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0
ICogaSArIGogKiBpbnB1dFBpdGNoKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJn
YiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsNCisgICAgICAgICAgICAgICAg
ICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAg
ICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBG
RjAwKTsNCisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Og0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWdu
ZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAg
ICAgICAgICAgICBhID0gMS4wZjsNCisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4
MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsNCisgICAgICAgICAgICAgICAgICAgIGcg
PSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsNCisgICAgICAgICAg
ICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOg0KKyAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7DQorDQorICAgICAgICAgICAgICAgICAgICBhID0g
KGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7DQorICAgICAgICAgICAg
ICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7DQor
ICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgw
MDBGRkMwMCk7DQorICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAq
ICgxLjBmIC8gMHgzRkYwMDAwMCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOg0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGlu
IEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQNCisg
ICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDApOw0KKyAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291
cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7DQorICAgICAgICAgICAgICAgICAg
ICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsN
CisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGog
KiBpbnB1dFBpdGNoKSArIDMpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoNCisgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kDQorICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOw0KKw0KKyAgICAgICAgICAgICAgICAgICAg
RDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkg
KyBqICogaW5wdXRQaXRjaCksIDQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgYSA9IGFiZ3Jb
M107DQorICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsNCisgICAgICAgICAgICAgICAg
ICAgIGcgPSBhYmdyWzFdOw0KKyAgICAgICAgICAgICAgICAgICAgciA9IGFiZ3JbMF07DQorICAg
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUNCisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0K
KyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7DQorICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOw0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAw
LjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gg
KyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7DQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0K
KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
Og0KKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBnICsgMC41Zik7DQorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOw0KKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOg0K
KyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAgICAg
ICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAg
NyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIHwg
ICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAg
ICB8ICAgMXN0IGNvbXBvbmVudCAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguDQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAv
IHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8DQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwN
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVm
KSA8PCAwKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOg0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2Zl
ciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uDQorICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6DQorICAgICAgICAgICAgICAgICAgICAvLyAg
IDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAg
NCAgICAzICAgIDIgICAgMSAgICAwDQorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAg
M3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25l
bnQgICAgIHwNCisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMg
dGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguDQorICAgICAg
ICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0NCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgg
ICAgIGEgKyAwLjVmKSA8PCAxNSkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8DQorICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOw0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUDQorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6ICAg
Ly8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFDQorICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gDQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41Zikg
PDwgMCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICog
ZyArIDAuNWYpIDw8IDUpIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOw0KKw0KKyAgICBzeXN0ZW1TdXJmYWNlLT5S
ZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQ0K
K3sNCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmpl
Y3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOw0K
KyAgICB9DQorDQorICAgIERXT1JEIGZsYWdzID0gMDsNCisNCisgICAgaWYgKG1hc2sgJiBHTF9D
T0xPUl9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOw0KKw0KKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZl
clR5cGUoKSAhPSBHTF9OT05FKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZsYWdzIHw9IEQz
RENMRUFSX1RBUkdFVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobWFzayAmIEdM
X0RFUFRIX0JVRkZFUl9CSVQpDQorICAgIHsNCisgICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JV
RkZFUl9CSVQ7DQorICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
DQorICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7DQorDQorICAgIGlmIChtYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICB7DQorICAgICAgICBtYXNrICY9IH5HTF9TVEVO
Q0lMX0JVRkZFUl9CSVQ7DQorICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorICAgICAgICAgICAgaWYgKCFkZXB0aFN0
ZW5jaWwpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5j
aWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsNCisgICAgICAgICAgICAgICAgcmV0dXJu
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAgICAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzYzsNCisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOw0K
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1h
dCk7DQorICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkg
LSAxOw0KKw0KKyAgICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKG1hc2sgIT0gMCkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOw0KKyAgICB9
DQorDQorICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydA0KKyAgICB7
DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLCANCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkKSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4
PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsNCisg
ICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUpOw0KKyAgICBp
bnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7DQorDQor
ICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJn
ZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhOw0KKw0KKyAgICBj
b25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVO
Q0lMKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRl
LnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsN
CisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFS
X1RBUkdFVCkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0
YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgJiYgYWxw
aGFVbm1hc2tlZCk7DQorDQorICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFz
a2VkU3RlbmNpbENsZWFyKQ0KKyAgICB7DQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRl
cmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2
ZWQuDQorICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRo
cyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdA0KKyAgICAgICAgLy8gIHRo
YXQgcGF0aCBpcyB0YWtlbi4NCisgICAgICAgIEhSRVNVTFQgaHI7DQorICAgICAgICBpZiAobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGhy
ID0gbURldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7DQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRP
Rk1FTU9SWSk7DQorDQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WldSSVRFRU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsNCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJ
RCk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNU
RU5BQkxFLCBGQUxTRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0K
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOw0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsNCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsN
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOw0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBE
M0RUT1BfU0VMRUNUQVJHMSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7DQorICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOw0KKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
MHhGRkZGRkZGRik7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgZm9yKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlKTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwp
Ow0KKw0KKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkNhcHR1cmUo
KTsNCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7DQorICAgICAgICB9DQorDQor
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNF
KTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBf
QUxXQVlTKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IEZBTFNFKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
RklMTE1PREUsIEQzREZJTExfU09MSUQpOw0KKyAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7DQorICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOw0KKw0KKyAgICAg
ICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpD
b252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVl
biwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJf
U1RFTkNJTCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7DQorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOw0KKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxX
QVlTKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
UkVGLCBzdGVuY2lsKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7DQorICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsNCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0Up
Ow0KKyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7DQorICAgICAgICB9DQor
ICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7DQorICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJI
Vyk7DQorICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhB
QkxFTkRFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNU
T1IpOw0KKyAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FM
UEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsNCisgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOw0KKyAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOw0KKyAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZG
RkZGRkZGKTsNCisNCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsg
ICAvLyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRj
aCB0aGUgZWRnZXMNCisgICAgICAgIHF1YWRbMF1bMF0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRb
MF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOw0KKyAgICAgICAgcXVhZFsw
XVsyXSA9IDAuMGY7DQorICAgICAgICBxdWFkWzBdWzNdID0gMS4wZjsNCisNCisgICAgICAgIHF1
YWRbMV1bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7DQorICAgICAgICBxdWFk
WzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsNCisgICAgICAgIHF1YWRb
MV1bMl0gPSAwLjBmOw0KKyAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7DQorDQorICAgICAgICBx
dWFkWzJdWzBdID0gLTAuNWY7DQorICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7DQorICAgICAg
ICBxdWFkWzJdWzJdID0gMC4wZjsNCisgICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOw0KKw0KKyAg
ICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsNCisgICAg
ICAgIHF1YWRbM11bMV0gPSAtMC41ZjsNCisgICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOw0KKyAg
ICAgICAgcXVhZFszXVszXSA9IDEuMGY7DQorDQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOw0KKyAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RS
SVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOw0KKw0KKyAgICAgICAgaWYgKGZsYWdzICYg
RDNEQ0xFQVJfWkJVRkZFUikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsNCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOw0KKyAgICAgICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwgc3Rl
bmNpbCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUtPkFwcGx5KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAoZmxhZ3MpDQor
ICAgIHsNCisgICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVw
dGgsIHN0ZW5jaWwpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KQ0KK3sNCisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pDQorICAgIHsNCisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNE
UFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQor
DQorICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmlt
aXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7DQorDQorICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQor
ICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChm
YWxzZSkpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0
YXRlKG1vZGUpOw0KKw0KKyAgICBHTHNpemVpIHJlcGVhdERyYXcgPSAxOw0KKyAgICBHTGVudW0g
ZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsICZyZXBlYXRE
cmF3KTsNCisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikNCisgICAgew0KKyAgICAgICAgcmV0
dXJuIGVycm9yKGVycik7DQorICAgIH0NCisNCisgICAgYXBwbHlTaGFkZXJzKCk7DQorICAgIGFw
cGx5VGV4dHVyZXMoKTsNCisNCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9n
cmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpDQorICAgIHsNCisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFj
dWxsU2tpcHNEcmF3KG1vZGUpKQ0KKyAgICB7DQorICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApDQorICAg
ICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAw
KTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlcyA+IDApDQorICAgICAg
ICB7DQorICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhE
YXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsNCisgICAgICAgICAgICBpZiAo
Y291bnRpbmdJQikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChtQXBwbGll
ZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQ0KKyAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGNvdW50aW5nSUItPmdl
dEJ1ZmZlcigpKTsNCisgICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3Vu
dGluZ0lCLT5nZXRTZXJpYWwoKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykNCisgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUo
cHJpbWl0aXZlVHlwZSwgMCwgMCwgY291bnQsIDAsIHByaW1pdGl2ZUNvdW50KTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3VudGluZyBp
bmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBSZWd1bGFyIGNhc2UNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2
ZUNvdW50KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIENvbnRleHQ6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpDQorew0KKyAgICBpZiAoIW1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVU
eXBlOw0KKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7DQorDQorICAgIGlmKCFlczJkeDo6Q29udmVy
dFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291
bnQpKQ0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7DQorDQorICAgIGlm
IChwcmltaXRpdmVDb3VudCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0N
CisNCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpDQorICAgIHsNCisgICAgICAg
IHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBhcHBseVN0YXRlKG1vZGUpOw0KKw0KKyAgICBUcmFu
c2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsNCisgICAgR0xlbnVtIGVyciA9IGFwcGx5SW5kZXhC
dWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOw0KKyAgICBpZiAo
ZXJyICE9IEdMX05PX0VSUk9SKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsN
CisgICAgfQ0KKw0KKyAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4
IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsNCisgICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsN
CisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhD
b3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7DQorICAgIGlmIChlcnIgIT0gR0xfTk9fRVJS
T1IpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOw0KKyAgICB9DQorDQorICAg
IGFwcGx5U2hhZGVycygpOw0KKyAgICBhcHBseVRleHR1cmVzKCk7DQorDQorICAgIGlmICghZ2V0
Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZh
bHNlKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsNCisgICAgfQ0KKw0KKyAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpDQorICAgIHsNCisg
ICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7DQorDQorICAgICAgICBpZiAobW9kZSA9PSBH
TF9MSU5FX0xPT1ApDQorICAgICAgICB7DQorICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50
LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWluSW5kZXgpOyAgIA0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVwZWF0RHJhdzsgaSsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbURldmlj
ZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1p
bkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJ
bmRleCwgcHJpbWl0aXZlQ291bnQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCisvLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBibG9jayBpcyBmYWxzZSwgZ2xG
aW5pc2ggd2hlbiBibG9jayBpcyB0cnVlDQordm9pZCBDb250ZXh0OjpzeW5jKGJvb2wgYmxvY2sp
DQorew0KKyAgICBtRGlzcGxheS0+c3luYyhibG9jayk7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGludCBtaW5JbmRleCkNCit7DQorICAgIC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9y
IGFuIGluZGV4ZWQgZHJhdw0KKyAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCkpDQorICAgIHsNCisgICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZm
ZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOw0KKyAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7DQorICAgICAgICBp
bmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkp
ICsgb2Zmc2V0Ow0KKyAgICB9DQorDQorICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7DQorICAgIGJv
b2wgc3VjY2VlZGVkID0gZmFsc2U7DQorDQorICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygp
KQ0KKyAgICB7DQorICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAq
IHNpemVvZih1bnNpZ25lZCBpbnQpOw0KKw0KKyAgICAgICAgaWYgKCFtTGluZUxvb3BJQikNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1
ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxpbmVMb29wSUIpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5T
SUdORURfSU5UKTsNCisNCisgICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7DQorICAgICAgICAg
ICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVM
b29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5k
ZXggPSBvZmZzZXQgLyA0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRl
eGVkIGRyYXcNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhW2ldID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAg
IGRhdGFbY291bnRdID0gMDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToNCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
MF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMp
W2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtj
b3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6DQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQor
ICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgY29uc3QgaW50IHNwYWNl
TmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOw0KKw0KKyAgICAg
ICAgaWYgKCFtTGluZUxvb3BJQikNCisgICAgICAgIHsNCisgICAgICAgICAgICBtTGluZUxvb3BJ
QiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZF
Ul9TSVpFLCBEM0RGTVRfSU5ERVgxNik7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUxp
bmVMb29wSUIpDQorICAgICAgICB7DQorICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVT
cGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOw0KKw0KKyAgICAgICAgICAgIFVJ
TlQgb2Zmc2V0ID0gMDsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9m
ZnNldCkpOw0KKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyAyOw0KKyAgICAgICAg
ICAgIA0KKyAgICAgICAgICAgIGlmIChkYXRhKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcNCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCisgICAgICAgICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsNCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToNCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
W2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07DQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOg0KKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KKyAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVzaG9ydCo+KGluZGljZXMpWzBdOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6DQorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpW2ldOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2Vz
KVswXTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAg
ICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7DQorICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9
IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIA0KKyAgICBp
ZiAoc3VjY2VlZGVkKQ0KKyAgICB7DQorICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBt
TGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbURldmlj
ZS0+U2V0SW5kaWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOw0KKyAgICAgICAgICAgIG1B
cHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7DQorICAgICAgICB9DQor
DQorICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5FU1RSSVAs
IC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7DQorICAgIH0N
CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBsb29w
aW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVj
b3JkSW52YWxpZEVudW0oKQ0KK3sNCisgICAgbUludmFsaWRFbnVtID0gdHJ1ZTsNCit9DQorDQor
dm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQ0KK3sNCisgICAgbUludmFsaWRWYWx1
ZSA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigp
DQorew0KKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgQ29udGV4
dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQ0KK3sNCisgICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsNCit9
DQorDQordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQ0K
K3sNCisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7DQorfQ0KKw0KKy8v
IEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlmIGFu
eS4NCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4NCitHTGVudW0g
Q29udGV4dDo6Z2V0RXJyb3IoKQ0KK3sNCisgICAgaWYgKG1JbnZhbGlkRW51bSkNCisgICAgew0K
KyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7DQorDQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9FTlVNOw0KKyAgICB9DQorDQorICAgIGlmIChtSW52YWxpZFZhbHVlKQ0KKyAgICB7DQor
ICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7DQorDQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9WQUxVRTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRPcGVyYXRpb24pDQorICAg
IHsNCisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7DQorDQorICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047DQorICAgIH0NCisNCisgICAgaWYgKG1PdXRPZk1lbW9y
eSkNCisgICAgew0KKyAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7DQorDQorICAgICAgICBy
ZXR1cm4gR0xfT1VUX09GX01FTU9SWTsNCisgICAgfQ0KKw0KKyAgICBpZiAobUludmFsaWRGcmFt
ZWJ1ZmZlck9wZXJhdGlvbikNCisgICAgew0KKyAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9w
ZXJhdGlvbiA9IGZhbHNlOw0KKw0KKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OOw0KKyAgICB9DQorDQorICAgIHJldHVybiBHTF9OT19FUlJPUjsNCit9DQor
DQorR0xlbnVtIENvbnRleHQ6OmdldFJlc2V0U3RhdHVzKCkNCit7DQorICAgIGlmIChtUmVzZXRT
dGF0dXMgPT0gR0xfTk9fRVJST1IpDQorICAgIHsNCisgICAgICAgIGJvb2wgbG9zdCA9IG1EaXNw
bGF5LT50ZXN0RGV2aWNlTG9zdCgpOw0KKw0KKyAgICAgICAgaWYgKGxvc3QpDQorICAgICAgICB7
DQorICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAvLyBTZXRzIG1S
ZXNldFN0YXR1cw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEdMZW51bSBzdGF0dXMgPSBt
UmVzZXRTdGF0dXM7DQorDQorICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpDQor
ICAgIHsNCisgICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0dGFibGUoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsNCisgICAg
ICAgIH0NCisgICAgfQ0KKyAgICANCisgICAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorYm9vbCBD
b250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpDQorew0KKyAgICByZXR1cm4gKG1S
ZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOw0KK30NCisNCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
VmFyeWluZ1ZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1v
ZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7
DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUg
PyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsNCit9DQorDQordW5zaWdu
ZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3QNCit7DQorICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOw0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11
bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0
c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7DQorfQ0KKw0KK2ludCBDb250ZXh0OjpnZXRNYXhT
dXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2Ft
cGxlczsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQz
REZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0DQorew0KKyAgICBpZiAocmVxdWVz
dGVkID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7DQorICAgIH0NCisN
CisgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsNCisgICAgaWYgKGl0ciA9PSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmVuZCgpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0N
CisNCisgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyArK2kpDQorICAgIHsNCisgICAgICAgIGlmIChpdHItPnNlY29uZFtpXSAmJiBpICE9
IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJl
dHVybiBpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1
cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOw0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllcygpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzT2NjbHVz
aW9uUXVlcmllczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOw0KK30NCisNCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVy
biBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNE
WFQ1VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJl
czsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0
DQorew0KKyAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOw0KK30NCisNCitib29s
IENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpIGNvbnN0DQorew0KKyAgICBy
ZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsNCit9DQorDQorYm9vbCBDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0
dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7DQorfQ0KKw0KK2Jvb2wgQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1T
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXI7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzOw0KK30NCisNCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbjsNCit9DQorDQoraW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsNCit9DQor
DQoraW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0DQor
ew0KKyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOw0KK30NCisNCitpbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbU1h
eFRleHR1cmVMZXZlbDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJl
czsNCit9DQorDQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMo
KSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7
DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3QNCit7
DQorICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOw0KK30NCisNCitib29sIENvbnRl
eHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9y
dHMzMmJpdEluZGljZXM7DQorfQ0KKw0KK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJU
ZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
Ow0KK30NCisNCitib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVN1cHBvcnRzSW5zdGFuY2luZzsNCit9DQorDQordm9pZCBDb250ZXh0Ojpk
ZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDIuOSBwYWdlIDIyOg0KKyAgICAvLyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVs
ZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRo
ZSBjdXJyZW50IGNvbnRleHQNCisgICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxl
ZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uDQorDQorICAgIGlmIChtU3RhdGUu
YXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7DQorICAgIH0NCisNCisgICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpDQorICAgIHsNCisgICAgICAgIG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGF0dHJpYnV0
ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspDQorICAg
IHsNCisgICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5k
QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOw0KKyAgICAg
ICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSkNCit7DQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdl
IDg0Og0KKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlm
IGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0
IGFyZQ0KKyAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8NCisNCisgICAgZm9y
IChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykNCisgICAg
ew0KKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCkgPT0gdGV4
dHVyZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdl
IDExMjoNCisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBp
bWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVu
IGl0IGlzDQorICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxl
ZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGlj
aCB0aGlzDQorICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyLg0KKw0KKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0
UmVhZEZyYW1lYnVmZmVyKCk7DQorICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBn
ZXREcmF3RnJhbWVidWZmZXIoKTsNCisNCisgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikNCisgICAg
ew0KKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOw0KKyAg
ICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJl
YWRGcmFtZWJ1ZmZlcikNCisgICAgew0KKyAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hU
ZXh0dXJlKHRleHR1cmUpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6ZGV0YWNoRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQ0KK3sNCisgICAgLy8gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3Og0KKyAgICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQg
aXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwg
aXQgaXMgYXMgdGhvdWdoDQorICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRl
ZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8u
DQorDQorICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQ0KKyAg
ICB7DQorICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorDQorICAgIGlm
IChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAg
ICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgQ29udGV4dDo6
ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpDQorew0KKyAgICAvLyBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6DQorICAgIC8vIElmIGEgcmVuZGVy
YnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxldGVk
LCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcg0KKyAgICAvLyBoYWQgYmVlbiBleGVj
dXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uDQorDQor
ICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyKQ0KKyAgICB7
DQorICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOw0KKyAgICB9DQorDQorICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToNCisgICAgLy8gSWYgYSByZW5kZXJi
dWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRo
ZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsDQorICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYg
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVm
ZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQNCisgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhp
cyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4N
CisNCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOw0KKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7DQorDQorICAgIGlmIChyZWFkRnJhbWVidWZmZXIpDQorICAgIHsNCisgICAgICAgIHJl
YWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7DQorICAgIH0N
CisNCisgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlciAmJiBkcmF3RnJhbWVidWZmZXIgIT0gcmVhZEZy
YW1lYnVmZmVyKQ0KKyAgICB7DQorICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmUgKkNvbnRleHQ6
OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpDQorew0KKyAgICBUZXh0dXJl
ICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsNCisNCisgICAgaWYgKHQgPT0g
TlVMTCkNCisgICAgew0KKyAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07DQorDQorICAgICAgICBzd2l0Y2ggKHR5cGUpDQorICAgICAgICB7DQor
ICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAg
ICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gVEVYVFVSRV8yRA0KKw0KKyAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBUZXh0
dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5DT01QTEVURV9U
RVhUVVJFX0lEKTsNCisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAgICAg
ICAgIHQgPSBpbmNvbXBsZXRlMmQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFr
Ow0KKw0KKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1
YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsNCisNCisgICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisgICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOw0KKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigw
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7DQorICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsNCisNCisgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
Q3ViZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQor
DQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gdDsNCit9DQorDQorYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51
bSBkcmF3TW9kZSkNCit7DQorICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1
bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsN
Cit9DQorDQorYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpDQor
ew0KKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9UUklBTkdM
RVM6DQorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46DQorICAgICAgY2FzZSBHTF9UUklBTkdM
RV9TVFJJUDoNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIGNhc2UgR0xfUE9JTlRTOg0K
KyAgICAgIGNhc2UgR0xfTElORVM6DQorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6DQorICAgICAg
Y2FzZSBHTF9MSU5FX1NUUklQOg0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlcykNCit7DQorICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOw0KKw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVl
WzBdID0gdmFsdWVzWzBdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3Vy
cmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2lu
ZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOw0KKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOw0KKw0KKyAgICBtVmVy
dGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGluZGV4KTsNCit9DQorDQordm9pZCBD
b250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpDQorew0KKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsNCisN
CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOw0K
K30NCisNCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcg0KKy8vIE9FUyBl
eHRlbnNpb25zDQorLy8gRVhUIGV4dGVuc2lvbnMNCisvLyBWZW5kb3IgZXh0ZW5zaW9ucw0KK3Zv
aWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpDQorew0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nID0gIiI7DQorDQorICAgIC8vIE9FUyBleHRlbnNpb25zDQorICAgIGlmIChzdXBwb3J0czMy
Yml0SW5kaWNlcygpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZWxlbWVudF9pbmRleF91aW50ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7DQorICAgIC8vbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOw0KKyAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsNCisNCisgICAgaWYgKHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBv
cnRzRmxvYXQzMlRleHR1cmVzKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7DQorICAgIH0NCisgICAgaWYgKHN1cHBvcnRzRmxv
YXQzMkxpbmVhckZpbHRlcigpKQ0KKyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3QgIjsNCisgICAgfQ0KKw0KKyAgICAvLyBNdWx0aS12
ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVz
KCkpDQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNp
b25fcXVlcnlfYm9vbGVhbiAiOw0KKyAgICB9DQorDQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7DQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF9yb2J1c3RuZXNzICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQ0K
KyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21w
cmVzc2lvbl9keHQxICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7DQorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsNCisNCisgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucw0KKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpDQorICAgIHsNCisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsNCisgICAg
fQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0
ICI7DQorICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUgIjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpDQorICAgIHsN
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMg
IjsNCisgICAgfQ0KKw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyICI7DQorDQorICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQ0K
KyAgICB7DQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2Nv
bXByZXNzaW9uX2R4dDMgIjsNCisgICAgfQ0KKyAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSkNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQ1ICI7DQorICAgIH0NCisNCisgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOw0KKyAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsNCisNCisgICAgLy8gT3RoZXIgdmVu
ZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMNCisgICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkp
DQorICAgIHsNCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7DQor
ICAgIH0NCisNCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3Ry
aW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsNCisgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6
bnBvcykNCisgICAgew0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOw0K
KyAgICB9DQorfQ0KKw0KK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOw0KK30NCisN
Cit2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpDQorew0KKyAgICBEM0RBREFQVEVS
X0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVy
KCk7DQorDQorICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsNCisgICAgbVJlbmRlcmVy
U3RyaW5nICs9IGlkZW50aWZpZXItPkRlc2NyaXB0aW9uOw0KKyAgICBtUmVuZGVyZXJTdHJpbmcg
Kz0gIikiOw0KK30NCisNCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZygp
IGNvbnN0DQorew0KKyAgICByZXR1cm4gbVJlbmRlcmVyU3RyaW5nLmNfc3RyKCk7DQorfQ0KKw0K
K3ZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spDQorew0KKyAgICBG
cmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7DQorICAg
IEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsNCisN
CisgICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVmZmVyLT5jb21wbGV0ZW5l
c3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fA0KKyAgICAgICAgIWRyYXdGcmFtZWJ1
ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOw0KKyAgICB9DQorDQorICAgIGludCByZWFkQnVmZmVyV2lkdGggPSBy
ZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7DQorICAgIGludCBy
ZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKTsNCisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsNCisgICAgaW50IGRyYXdCdWZmZXJIZWlnaHQgPSBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpOw0KKw0KKyAgICBS
RUNUIHNvdXJjZVJlY3Q7DQorICAgIFJFQ1QgZGVzdFJlY3Q7DQorDQorICAgIGlmIChzcmNYMCA8
IHNyY1gxKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsNCisgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMTsNCisgICAgICAgIGRlc3RSZWN0LmxlZnQgPSBk
c3RYMDsNCisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7DQorICAgIH0NCisgICAgZWxz
ZQ0KKyAgICB7DQorICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMTsNCisgICAgICAgIGRl
c3RSZWN0LmxlZnQgPSBkc3RYMTsNCisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsN
CisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7DQorICAgIH0NCisNCisgICAgaWYgKHNy
Y1kwIDwgc3JjWTEpDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7
DQorICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsNCisgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0gc3JjWTA7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsNCisgICAgfQ0KKyAg
ICBlbHNlDQorICAgIHsNCisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7DQorICAg
ICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMDsNCisgICAgICAgIHNvdXJjZVJlY3QudG9wID0g
c3JjWTE7DQorICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsNCisgICAgfQ0KKw0KKyAgICBS
RUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0Ow0KKyAgICBSRUNUIGRlc3RTY2lz
c29yZWRSZWN0ID0gZGVzdFJlY3Q7DQorDQorICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpDQor
ICAgIHsNCisgICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9u
IGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdA0KKyAgICAgICAgLy8gUGxl
YXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBz
byB0aGUgKnRvcCogb2YgdGhlDQorICAgICAgICAvLyByZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2Fp
bnN0IHNjaXNzb3JZLCByYXRoZXIgdGhhbiB0aGUgYm90dG9tLg0KKyAgICAgICAgaWYgKGRlc3RS
ZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50
IHhEaWZmID0gbVN0YXRlLnNjaXNzb3JYIC0gZGVzdFJlY3QubGVmdDsNCisgICAgICAgICAgICBk
ZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOw0KKyAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgICAgIH0NCisNCisgICAgICAg
IGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lk
dGgpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3QucmlnaHQg
LSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7DQorICAgICAgICAgICAg
ZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3Nv
cldpZHRoOw0KKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QucmlnaHQgLT0geERpZmY7
DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QudG9wIDwgbVN0YXRlLnNjaXNz
b3JZKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29y
WSAtIGRlc3RSZWN0LnRvcDsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC50b3AgPSBt
U3RhdGUuc2Npc3Nvclk7DQorICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0g
eURpZmY7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0
YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgaW50IHlEaWZmID0gZGVzdFJlY3QuYm90dG9tIC0gKG1TdGF0ZS5zY2lzc29yWSArIG1T
dGF0ZS5zY2lzc29ySGVpZ2h0KTsNCisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0
b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsNCisgICAgICAgICAg
ICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxzZTsNCisgICAgYm9vbCBibGl0
RGVwdGhTdGVuY2lsID0gZmFsc2U7DQorDQorICAgIFJFQ1Qgc291cmNlVHJpbW1lZFJlY3QgPSBz
b3VyY2VTY2lzc29yZWRSZWN0Ow0KKyAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lz
c29yZWRSZWN0Ow0KKw0KKyAgICAvLyBUaGUgc291cmNlICYgZGVzdGluYXRpb24gcmVjdGFuZ2xl
cyBhbHNvIG1heSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBmYWxsIG91dCBvZiB0aGUgYm91
bmRzIG9mIA0KKyAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuDQorICAg
IGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhE
aWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7DQorICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC5sZWZ0ID0gMDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ICs9IHhEaWZmOw0K
KyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA+IHJlYWRCdWZmZXJX
aWR0aCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1lZFJlY3Qucmln
aHQgLSByZWFkQnVmZmVyV2lkdGg7DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA9
IHJlYWRCdWZmZXJXaWR0aDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlm
ZjsNCisgICAgfQ0KKw0KKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkNCisgICAg
ew0KKyAgICAgICAgaW50IHlEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcDsNCisgICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7DQorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
dG9wICs9IHlEaWZmOw0KKyAgICB9DQorDQorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0
b20gPiByZWFkQnVmZmVySGVpZ2h0KQ0KKyAgICB7DQorICAgICAgICBpbnQgeURpZmYgPSBzb3Vy
Y2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Ow0KKyAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsNCisgICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5ib3R0b20gLT0geURpZmY7DQorICAgIH0NCisNCisgICAgaWYgKGRlc3RUcmltbWVk
UmVjdC5sZWZ0IDwgMCkNCisgICAgew0KKyAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmlt
bWVkUmVjdC5sZWZ0Ow0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgPSAwOw0KKyAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAo
ZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQ0KKyAgICB7DQorICAgICAg
ICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkcmF3QnVmZmVyV2lkdGg7DQor
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7DQorICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsNCisgICAgfQ0KKw0KKyAgICBpZiAo
ZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApDQorICAgIHsNCisgICAgICAgIGludCB5RGlmZiA9IDAg
LSBkZXN0VHJpbW1lZFJlY3QudG9wOw0KKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCA9IDA7
DQorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURpZmY7DQorICAgIH0NCisNCisg
ICAgaWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVmZmVySGVpZ2h0KQ0KKyAgICB7
DQorICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC0gZHJhd0J1ZmZl
ckhlaWdodDsNCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVp
Z2h0Ow0KKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOw0KKyAgICB9
DQorDQorICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsNCisgICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJlYWRCdWZmZXJI
ZWlnaHQgfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gc291cmNlVHJpbW1l
ZFJlY3QubGVmdCA8IHJlYWRCdWZmZXJXaWR0aCB8fCANCisgICAgICAgIGRlc3RUcmltbWVkUmVj
dC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fA0KKyAg
ICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCBkcmF3
QnVmZmVyV2lkdGggfHwNCisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IGRl
c3RUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICE9IDAgfHwg
ZGVzdFRyaW1tZWRSZWN0LmxlZnQgIT0gMCkNCisgICAgew0KKyAgICAgICAgcGFydGlhbEJ1ZmZl
ckNvcHkgPSB0cnVlOw0KKyAgICB9DQorDQorICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkNCisgICAgew0KKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8DQorICAg
ICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVI7DQorICAgICAgICBjb25zdCBib29sIHZhbGlkRHJhd1R5cGUgPSBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1RFWFRVUkVfMkQgfHwNCisgICAgICAg
ICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJV
RkZFUjsNCisgICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fA0K
KyAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9y
bWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQo
KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29u
dmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1w
bGVtZW50YXRpb24iKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBpZiAocGFydGlhbEJ1ZmZl
ckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkNCisgICAgICAgIHsN
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7DQorDQorICAgIH0NCisN
CisgICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkpDQorICAgIHsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVM
TDsNCisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsNCisNCisgICAg
ICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1
cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28g
aWYgd2UgaGF2ZQ0KKyAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwg
aXQgd2lsbCBiZSB0aGUgc2FtZSBidWZmZXIuDQorDQorICAgICAgICBpZiAobWFzayAmIEdMX0RF
UFRIX0JVRkZFUl9CSVQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKS0+Z2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7DQorICAgICAgICAgICAg
ICAgIH0NCisNCisgICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7DQorICAg
ICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsNCisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg
IGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3RnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8DQorICAgICAgICAgICAgICAgICAg
ICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
IGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIg
PSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsNCisgICAgICAgICAgICAgICAg
ZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7DQorICAg
ICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIgZGVwdGgg
YW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIp
Ow0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9u
bHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkDQorICAgICAgICB9DQorDQorICAg
ICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAw
KSB8fCANCisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkNCisgICAgew0KKyAgICAgICAgbURpc3Bs
YXktPmVuZFNjZW5lKCk7DQorDQorICAgICAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3RnJhbWVidWZmZXItPmdldFJlbmRl
clRhcmdldCgpOw0KKw0KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3Ry
ZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwgJnNvdXJjZVRyaW1tZWRSZWN0LCANCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJn
ZXQsICZkZXN0VHJpbW1lZFJlY3QsIEQzRFRFWEZfTk9ORSk7DQorDQorICAgICAgICAgICAgcmVh
ZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGRyYXdSZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsNCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxl
ZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChibGl0
RGVwdGhTdGVuY2lsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsN
CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7DQorDQorICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2lsLCBOVUxMLCBkcmF3
RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKw0KKyAgICAgICAgICAgIHJlYWRE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICBkcmF3RGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6
IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7DQorICAgICAgICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorVmVydGV4
RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgwKQ0K
K3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklF
UzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xh
cmF0aW9uID0gTlVMTDsNCisgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAw
Ow0KKyAgICB9DQorfQ0KKw0KK1ZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlKCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNM
X0NBQ0hFX0VOVFJJRVM7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2Fj
aGVbaV0udmVydGV4RGVjbGFyYXRpb24pDQorICAgICAgICB7DQorICAgICAgICAgICAgbVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorfQ0KKw0KK0dMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xh
cmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRy
aWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpy
ZXBlYXREcmF3KQ0KK3sNCisgICAgKnJlcGVhdERyYXcgPSAxOw0KKw0KKyAgICBpbnQgaW5kZXhl
ZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisgICAgaW50IGluc3RhbmNlZEF0dHJp
YnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsNCisNCisgICAgaWYgKGluc3RhbmNlcyA+IDApDQor
ICAgIHsNCisgICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUgbWFwcGVk
IHRvIEQzRCBzdHJlYW0gMA0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5hY3RpdmUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkNCisgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRl
ID0gaTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRS
SUJTKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlc1tpXS5kaXZpc29yICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsNCisgICAgICAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAg
IC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQ0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09
IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgRDNEVkVSVEVY
RUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07DQorICAgIEQzRFZFUlRF
WEVMRU1FTlQ5ICplbGVtZW50ID0gJmVsZW1lbnRzWzBdOw0KKw0KKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOw0KKw0KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQ0KKyAgICB7DQorICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpDQorICAgICAgICB7DQorICAgICAgICAgICAg
aW50IHN0cmVhbSA9IGk7DQorDQorICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvLyBEdWUgdG8gYSBidWcgb24gQVRJIGNhcmRz
IHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9uZSBvZiB0aGUgYXR0cmlidXRlcyBh
cmUgaW5zdGFuY2VkLg0KKyAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09
IE1BWF9WRVJURVhfQVRUUklCUykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7DQorICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7DQorICAgICAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDApDQorICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0
ZTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIFVJTlQg
ZnJlcXVlbmN5ID0gMTsNCisgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9J
TkRFWEVEREFUQSB8IGluc3RhbmNlczsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0
cmlidXRlc1tpXS5kaXZpc29yOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg
ICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoc3RyZWFtLCBmcmVxdWVuY3kpOw0KKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdF
bmFibGVkID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0cmlidXRlc1tp
XS5zZXJpYWwgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUg
IT0gYXR0cmlidXRlc1tpXS5zdHJpZGUgfHwNCisgICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNb
c3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQpDQorICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0
ZXNbaV0udmVydGV4QnVmZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5z
dHJpZGUpOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0
dHJpYnV0ZXNbaV0uc2VyaWFsOw0KKyAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1d
LnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOw0KKyAgICAgICAgICAgICAgICBtQXBwbGll
ZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Ow0KKyAgICAgICAgICAg
IH0NCisNCisgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07DQorICAgICAgICAg
ICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsNCisgICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0
cmlidXRlc1tpXS50eXBlOw0KKyAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xN
RVRIT0RfREVGQVVMVDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsNCisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsNCisgICAgICAgICAgICBlbGVtZW50Kys7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGluc3RhbmNlZEF0
dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpDQorICAgIHsNCisgICAgICAgIGlmIChtSW5z
dGFuY2luZ0VuYWJsZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsNCisgICAgICAgICAgICB9
DQorDQorICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQz
RERFQ0xfRU5EKCk7DQorICAgICooZWxlbWVudCsrKSA9IGVuZDsNCisNCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQor
ICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtp
XTsNCisgICAgICAgIGlmIChtZW1jbXAoZW50cnktPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywg
KGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYm
IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikNCisgICAgICAgIHsNCisgICAgICAgICAgICBlbnRy
eS0+bHJ1Q291bnQgPSArK21NYXhMcnU7DQorICAgICAgICAgICAgaWYoZW50cnktPnZlcnRleERl
Y2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlv
bik7DQorICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wgPSBlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb247DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJP
UjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFz
dENhY2hlID0gbVZlcnRleERlY2xDYWNoZTsNCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAo
bVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291bnQpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRp
b24gIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlv
bi0+UmVsZWFzZSgpOw0KKyAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5V
TEw7DQorICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQs
IHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkNCisgICAgICAgIC8vIGFib3V0IGl0Lg0KKyAgICB9
DQorDQorICAgIG1lbWNweShsYXN0Q2FjaGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVs
ZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsNCisgICAgZGV2
aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOw0KKyAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24pOw0KKyAgICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52
ZXJ0ZXhEZWNsYXJhdGlvbjsNCisgICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsN
CisNCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOw0KK30NCisNCit2b2lkIFZlcnRleERlY2xhcmF0
aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspDQorICAgIHsNCisgICAgICAgIG1BcHBsaWVkVkJzW2ld
LnNlcmlhbCA9IDA7DQorICAgIH0NCisNCisgICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7DQorICAg
IG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVk
IHdoZW4gbm90IHVzZWQNCit9DQorDQorfQ0KKw0KK2V4dGVybiAiQyINCit7DQorZ2w6OkNvbnRl
eHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6
Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpDQorew0KKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7DQorfQ0KKw0KK3ZvaWQgZ2xEZXN0cm95Q29u
dGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkNCit7DQorICAgIGRlbGV0ZSBjb250ZXh0Ow0KKw0K
KyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQ0KKyAgICB7DQorICAgICAgICBn
bDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7DQorICAgIH0NCit9DQorDQordm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkNCit7DQorICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0
LCBkaXNwbGF5LCBzdXJmYWNlKTsNCit9DQorDQorZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENv
bnRleHQoKQ0KK3sNCisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7DQorfQ0KK30NCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmluZGV4IDhk
Y2NmMGYuLjRkNDdjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xhc3MgVmVydGV4RGVjbGFyYXRp
b25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsKIAotICAgIGVudW0geyBOVU1f
VkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAgZW51bSB7IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVjdCBWQkRhdGEKICAgICB7CkBA
IC0yODEsNyArMjgxLDggQEAgY2xhc3MgQ29udGV4dAogCiAgICAgdm9pZCBtYWtlQ3VycmVudChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKLSAgICB2b2lk
IG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5
KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CkBAIC00OTUsNiAr
NDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJs
ZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdDsK
KyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9y
dHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CkBAIC02MTcs
NiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAg
IGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0
c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAgICAgaW50
IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKaW5kZXggNzMwZmZmYy4u
NzZkNDI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5GcmFtZWJ1
ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURlcHRoYnVm
ZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJlbmRlcmJ1
ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZm
ZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZm
ZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpG
cmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6Omdl
dERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIg
PSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJi
dWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKICAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgewor
ICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBG
Qk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGgg
ID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAgICAgd2lk
dGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigw
LCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAgICAgICBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJU
eXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsyNzIsMTEg
QEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6
Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAgICBpbnQg
c2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwogCiAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEgKzMwMSwz
OCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29s
b3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNk
Zm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8IAot
ICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXRE
M0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRl
eHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZv
cm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8
fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYg
IWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVzOjpJc0Rl
cHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9y
bWF0KGQzZGZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CiAKICAgICAgICAgd2lkdGggPSBj
b2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdl
dEhlaWdodCgpOwogICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9
IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOwpA
QCAtMzAyLDExICszNDAsNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAK
ICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgaWYg
KG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7ICAgLy8gUmVxdWlyZXMgR0xf
T0VTX2RlcHRoX3RleHR1cmUKLSAgICAgICAgfQotCiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0
RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBpZiAoIWRlcHRoYnVmZmVyKQpAQCAtMzE5LDE5ICsz
NTIsNDQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gZGVwdGhi
dWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1cmUgYXR0YWNobWVu
dHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChk
M2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2lu
Z0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAg
ICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBl
bHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsK
QEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQog
CiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAg
aWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQot
CiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKICAgICAgICAg
aWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAw
KQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAg
ICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8
fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7
CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNE
Rm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBj
b21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNk
Zm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdB
dHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWln
aHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7
CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQog
ICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRo
ZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1
cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3Rl
bmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZl
ciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAg
ICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5j
aWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBh
dCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0
YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgKaW5kZXggYjczZjlhMC4uMTRkOWMyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApAQCAtNDksNiAr
NDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZm
ZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVm
ZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3Ji
dWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0g
Z2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVy
CiAgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5k
ZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAppbmRleCBhNWUzOGJmLi5m
MjhhOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5jcHAKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNywyMjYxICsxOCw4NSBAQAog
CiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQz
RENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KIG5hbWVzcGFjZSBnbAogewot
dW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLWNvbnN0IGNoYXIgKmZh
a2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsKLSAg
ICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlw
ZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkp
LCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5h
bFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5
dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLX0K
LQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19Ci0KLWJvb2wg
VW5pZm9ybTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFy
XyIpID09IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCkgCi0gICAgOiBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1l
bnQoZWxlbWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9ncmFtOjpQcm9ncmFtKFJlc291
cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1h
bmFnZXIpLCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKLXsKLSAgICBt
RGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsK
LSAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAg
ICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQotICAgIG1EZWxldGVTdGF0
dXMgPSBmYWxzZTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0KLVByb2dyYW06On5Qcm9ncmFt
KCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxM
KQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1GcmFnbWVudFNo
YWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRF
WF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleFNo
YWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+YWRk
UmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GcmFn
bWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBtRnJhZ21lbnRT
aGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFk
ZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCi0g
ICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7
Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICB9Ci0g
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAi
QzpcXGZha2VwYXRoIjsKIAotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0
QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNoYWRl
ciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Cit1bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlBy
b2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5k
aW5ncygpCiB7Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7CiB9CiAKLUlEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5n
czo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
CiB9CiAKLXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwg
Y29uc3QgY2hhciAqbmFtZSkKK0luZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCiB7
Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwotICAgIH0KIH0K
IAotR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUp
CitJbmZvTG9nOjp+SW5mb0xvZygpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9
PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRp
Y0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXgg
Pj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAg
cmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KIAotLy8gUmV0dXJucyBv
bmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dy
YW06OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK2ludCBJbmZvTG9nOjpn
ZXRMZW5ndGgoKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBpZiAoIW1JbmZvTG9n
KQogICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2Vk
UGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBy
ZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci19Ci0KLS8vIFJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcg
dG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hh
ZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNh
bXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgp
Ci17Ci0gICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsK
LQotICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNp
emVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0KLSAgICAgICAgaWYg
KG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxU
ZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYm
IGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRl
eHR1cmVVbml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUg
dGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAotLy8g
aW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBz
aGFkZXIpLgotVGV4dHVyZVR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgc3dpdGNoICh0
eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7
Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAg
ICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAg
Y2FzZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVv
ZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVCht
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKLX0KLQotR0xpbnQgUHJvZ3Jh
bTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
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
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0ZMT0FUX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0g
PSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFsz
XSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JP
T0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gc3RybGVu
KG1JbmZvTG9nKSArIDE7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJv
Z3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdikKK3ZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMz
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAg
aW50IGluZGV4ID0gMDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICBpZiAobUluZm9Mb2cpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSBzdGQ6
Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1l
bWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwogICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAg
ICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICAgICAgaW5m
b0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9pZCB0
cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBp
bnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKLSAgICBpbnQg
Y29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKLQotICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0gICAgewotICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChp
bnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAg
IH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hl
aWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
eSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAg
ICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSAhPSBHTF9GTE9BVF9NQVQzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRh
cmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxv
YXQpICogMTYpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gMTY7Ci0gICAgICAgIHZhbHVlICs9IDE2OwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8
Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXpl
b2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAgICAgICAgICAg
IHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZB
TFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2
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
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAq
IHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAg
IC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2Ug
ZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRl
cyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlm
ICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9z
ZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0
LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZv
cm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRD
b3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3Jt
Q29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50Owot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5
KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBz
aXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3Vn
aAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBV
bmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1
ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0gICAgICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAg
ICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQs
NCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFs
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9h
dCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRl
eCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtVW5p
Zm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBsaWVzIGFsbCB0
aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5
IGRldmljZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0ZDo6
dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBt
VW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhOwotICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7
Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBs
eVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlm
b3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3Jt
LCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRf
VkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3Jt
NGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVk
IHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFtOjpj
b21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQz
RFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAg
ewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0gICAg
VUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAocGVy
ZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLSNp
ZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFU
SU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQ
YXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsg
c291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwot
ICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCks
IHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxh
Z3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJjZVRl
eHQgPSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0gICAg
SUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21waWxl
KGhsc2wsIHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmls
ZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVz
c2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciop
ZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBwZW5kVG9JbmZv
TG9nU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwotICAg
ICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVzc2FnZS0+UmVs
ZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFi
bGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSks
IGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0vLyBQYWNrcyB2
YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0
aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRp
eCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFy
eWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbTo6cGFja1Zh
cnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250ZXh0ICpjb250
ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNv
bnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
LSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAq
IHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5
aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5Kysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4
XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0g
PT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFy
eWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6
IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQg
Y29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2Vb
eF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0p
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAg
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJu
IHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQot
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsy
XSB8fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1W
ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKLSAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
ZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0gICAgICAgIGZy
YWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZ0eFZhciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gbVZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0
eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAg
Ly8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlp
bmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGlu
dCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAocmVnaXN0ZXJz
IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0
ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4
dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09IG1h
eFZhcnlpbmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAg
ewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8g
c3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCi0g
ICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9
PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0
LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlw
ZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVu
dCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRw
dXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1
dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNo
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFy
eWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5j
X3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVY
Q09PUkQiKTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAgICAg
ICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUt
PnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0
ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCAr
PSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
bVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVy
dGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENP
T1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5k
ZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIG1W
ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7
Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAgICAg
ICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0g
PyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIg
KyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIo
cmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNl
c1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCAr
PSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIlZT
X09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4i
OwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0g
IjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkg
ICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5z
cG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBk
ZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAg
IG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtc
biIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBWU19P
VVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24u
dztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYgKG1WZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAi
ICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwot
ICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsK
LSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9z
aXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsK
LSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIo
cik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAg
IC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
XVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5n
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9ICJ4
IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBtVmVy
dGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJy
YXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0i
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAg
ICAgICJ9XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
RnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7
Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0g
ICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9
Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAg
ICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAv
IGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbTMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhlIHJlbmRlciB0
YXJnZXQgaGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsg
MC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
ZHhfQ29vcmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUg
dmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29y
ZC54ICsgZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSAr
IGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtUGl4ZWxITFNM
ICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICog
ZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBnbF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwg
KGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4w
KSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAo
dmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAq
IHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2
YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAi
ID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBt
UGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgot
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQg
b3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAg
ICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wgY29k
ZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFy
eWluZ3MsCi0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUg
YXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZvcm1z
Ci12b2lkIFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAgaWYgKCFtRnJh
Z21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRl
eFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBtVmVydGV4
SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1Zhcnlpbmdz
KCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4
dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7Ci0gICAgY29u
c3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBj
b21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25z
dGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmlu
YXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7
Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAg
SFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JE
Kil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsK
LSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFi
bGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NF
RURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOwot
ICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBO
VUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhF
eGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbGlua0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25z
dGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFi
bGVWUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxy
ZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJlIHJl
c2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9u
Ci0gICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0g
Z2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7Ci0g
ICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9G
cm9udENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIG1MaW5rZWQg
PSB0cnVlOyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRGV0ZXJtaW5l
cyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4
IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2lu
KCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmli
dXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5n
KGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1M
aW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUg
c2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRlICgl
cykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19z
dHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0
aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5r
IGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAo
QXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5l
bmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRy
aWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09
IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0g
ICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVz
ZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlm
IChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVS
VEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNf
c3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGlu
awotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJs
ZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBh
dHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyAp
Ci0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0lu
ZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBpbnQg
cm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsg
cisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRl
eCsrXSA9IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUpCi17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhf
QVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGlu
Z1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5k
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMo
SUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFOVFRB
QkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05TVEFOVF9ERVND
IGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQot
ICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8
IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5H
ZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERl
c2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50SGFuZGxlLCBj
b25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFkZHMgdGhl
IGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8g
dGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZv
cm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25z
dCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3Rh
bnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNv
bnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxl
UFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVS
Q1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5k
ZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNv
bnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0
YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJF
IDogVEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJW
ZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaChj
b25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NUUlVD
VDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9
IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmll
bGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmll
bGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwg
ZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVz
Y3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7
Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBT
LT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3Jp
cHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSAr
ICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oZmll
bGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5h
bWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNhc2UgRDNEWFBD
X1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAgICAgY2FzZSBE
M0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25zdGFudERlc2Ny
aXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIFVu
aWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1l
KTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50IGxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51bSB0eXBlID0g
dW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplQ29uc3Rh
bnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQUyk7Ci0gICAg
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMsIG1Db25zdGFu
dFRhYmxlVlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNp
Z25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsK
LSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBp
LCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9y
bSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25z
dGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQz
RFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
MiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RY
UFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhM
U0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8i
KSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
c3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcg
Jl9uYW1lKQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICByZXR1
cm4gX25hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5jb21wYXJlKDAs
IDMsICJhcl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigzKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5
VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lk
dGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09O
U1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvdW50IDw9
IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0
OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0g
KHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfQk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYm
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgIHsKLSAg
ICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBp
bnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09M
ID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBjb3B5
Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50
KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMp
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
ZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0g
ICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAg
ICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5k
ZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rlcklu
ZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50
IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4OwotCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAg
ICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBm
bG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOwotCi0gICAg
ICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwg
Y291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjph
cHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNU
QU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2
ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2
WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9h
dCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsKLSAg
ICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uaXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQg
KnZlY3RvcikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RY
UlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICBpZiAobGVuZ3RoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OwogICAgIH0KIH0KIAog
Ly8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KIC8v
IFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRo
ZSB3YXJuaW5nIG9yIGVycm9yIAogLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1
cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3Jh
bTo6YXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit2b2lkIElu
Zm9Mb2c6OmFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIHN0ZDo6
c3RyaW5nIG1zZyhtZXNzYWdlKTsKIAogICAgIHNpemVfdCBmb3VuZDsKICAgICBkbwogICAgIHsK
LSAgICAgICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGZvdW5kID0gbXNn
LmZpbmQoZ19mYWtlcGF0aCk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKICAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZmFrZXBh
dGgpKTsKKyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGdfZmFrZXBhdGgpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
OwogCi0gICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkpOworICAgIGFwcGVu
ZCgiJXNcbiIsIG1zZy5jX3N0cigpKTsKIH0KIAotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9M
b2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikKIHsKICAgICBpZiAoIWZvcm1hdCkKICAgICB7CkBAIC0yMzA0LDcg
KzEyOSw3IEBAIHZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQogICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQordm9pZCBJ
bmZvTG9nOjpyZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAgLTIzMTMsOTkg
KzEzOCwxNzAgQEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0KIH0KIAotLy8g
UmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSBy
ZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBk
ZXN0cm95KQorUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWlu
dCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBt
U2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJl
aW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAg
ICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFnbWVudFNoYWRl
ciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5hcnkg
PSBOVUxMOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291bnQgPSAwOwor
fQogCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
VmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmso
dHJ1ZSk7CiAKLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZlcnRleFNoYWRl
ciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+
cmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICBpZiAo
bUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAg
IG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlmIChtQ29uc3Rh
bnRUYWJsZVBTKQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7
CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewot
ICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRh
YmxlUFMgPSBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlVlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFk
ZXI7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAgICBlbHNlIGlm
IChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMg
PSBOVUxMOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXIg
PSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRS
ZWYoKTsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7
CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewot
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAgIG1T
ZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIgIT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsgaW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAg
ICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5n
ZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJz
UFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9
IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBj
b25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRT
aGFkZXIgPyAxIDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQgQXR0cmlidXRl
QmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIg
Km5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgIHsKLSAg
ICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAgfQorfQorCit2
b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNo
YXIgKm5hbWUpCit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlv
bihpbmRleCwgbmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRl
eCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29t
cGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBw
aW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFt
OjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1JbmZvTG9n
LnJlc2V0KCk7CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIG1Qcm9ncmFt
QmluYXJ5ID0gbmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+bGlu
ayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhT
aGFkZXIpKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAg
IG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwogICAgIH0KK30K
IAotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24g
PSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50
c09yTGluZXNMb2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1
dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAgIGZvciAoaW50
IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKysp
CisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFt
ZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtVW5pZm9y
bUluZGV4LmNsZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVsSExTTC5jbGVh
cigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9i
amVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3Ry
dWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYgKGRl
c3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlmICht
RnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAg
fQogCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOworICAgICAg
ICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRl
ci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAg
IH0KKyAgICB9CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3Jh
bUJpbmFyeSA9IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKK1By
b2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHJldHVybiBt
TGlua2VkOworICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQcm9ncmFtOjpp
c1ZhbGlkYXRlZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CisgICAg
dW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7CiB9CiAK
IHZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAgdW5zaWduZWQg
aW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5n
dGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9n
KSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKIH0KIAogdm9p
ZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cp
Ci0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsK
LSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhd
ID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0
aCA9IGluZGV4OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxl
bmd0aCwgaW5mb0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdM
c2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCkBAIC0yNTAz
LDE1MiArMzc2LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkg
bWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlCiAKIHZvaWQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAg
ICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3Rp
dmVBdHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChh
dHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsr
KQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
YWN0aXZlQXR0cmlidXRlKys7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRy
aWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQot
Ci0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGNvbnN0IGNo
YXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0K
LSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1
ZnNpemUgLSAxXSA9ICdcMCc7Ci0KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgaWYgKGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihu
YW1lKTsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAg
KnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKLQotICAgICp0
eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7CisgICAgICAgICp0eXBlID0g
R0xfTk9ORTsKKyAgICAgICAgKnNpemUgPSAxOworICAgIH0KIH0KIAogR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQogewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0
eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9CisgICAgICAg
IHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5k
ZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5k
ZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOwotICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9y
bShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
c2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGlu
dGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAg
IHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBt
VW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAg
IHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJk
eF8iKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICAg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXpl
LCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIEFTU0VSVCh1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAg
ICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5h
bWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAg
ICBpZiAoYnVmc2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBd
IjsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwogICAgICAgICB9CiAKLSAgICAgICAgc3Ry
bmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6
ZSAtIDFdID0gJ1wwJzsKLQogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAg
ICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAg
ICAgICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlT
aXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7CisgICAgICAgICpz
aXplID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgIH0KIH0KIAogR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQgPSAwOwotCi0g
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3Jt
czsgdW5pZm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkK
IHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4
ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlm
IChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21w
YXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3Ro
ID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAg
ICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlsw
XSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5n
dGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5
LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZv
aWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKQEAgLTI2NjMsMTYxICs0ODAsMjggQEAgYm9v
bCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0CiAKIHZvaWQgUHJvZ3JhbTo6
dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAgIG1JbmZvTG9nLnJlc2V0KCk7
CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1
bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgICAgICBtUHJv
Z3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0
cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVy
cyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBp
biBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1l
Ci0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9n
cmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJh
eXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJv
ci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwot
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1
cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2Yg
Y29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICgl
ZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlw
ZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ld
LmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2Ft
cGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhj
ZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4
dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVu
aXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0
byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0u
dGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbUluZm9Mb2cu
YXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOwogICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dyYW06OmluaXRpYWxpemVDb25z
dGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVnaXN0ZXJJbmZv
ICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQorYm9vbCBQcm9ncmFtOjpp
c1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRh
YmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsK
LSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAg
IFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNv
bnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlw
dGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
cmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7Ci0g
ICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNv
dW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVkKCk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gMDsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRp
b247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4Q29v
cmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0K
LUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpn
ZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xv
Y2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAppbmRl
eCA2MTgzMGM2Li4yNDQ3MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUFJP
R1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgog
I2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8c2V0PgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDM2IEBAIGNsYXNzIFJl
c291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVydGV4U2hhZGVy
OwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9y
bQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOwotCi0gICAgflVuaWZvcm0o
KTsKLQotICAgIGJvb2wgaXNBcnJheSgpOwotCi0gICAgY29uc3QgR0xlbnVtIHR5cGU7Ci0gICAg
Y29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCBz
dGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCi0gICAgY29uc3QgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0aDsK
IAotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKK2NsYXNzIEF0dHJp
YnV0ZUJpbmRpbmdzCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncygpOworICAg
IH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsK
LSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleDsKLSAg
ICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVM
b2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRBdHRy
aWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAgIFJlZ2lz
dGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7CisgIHByaXZhdGU6CisgICAgc3RkOjpz
ZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107CiB9
OwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2Yg
dW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgorY2xhc3Mg
SW5mb0xvZwogewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUs
IHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICBwdWJsaWM6Cisg
ICAgSW5mb0xvZygpOworICAgIH5JbmZvTG9nKCk7CiAKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRMb2coR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworCisgICAgdm9pZCBhcHBlbmRTYW5pdGl6
ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciAqaW5m
bywgLi4uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEluZm9Mb2cpOworICAgIGNoYXIgKm1JbmZvTG9nOwogfTsKIAogY2xhc3Mg
UHJvZ3JhbQpAQCAtNzQsNDUgKzY2LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGRldGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7
Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0KICAgICB2
b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUp
OwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAg
ICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQg
Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1w
bGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRp
b24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwot
ICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
LSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4
RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZy
b250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2Nh
dGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBh
cHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlua2VkKCk7
CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
OworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGludCBnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0dGFjaGVk
U2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJz
KTsKQEAgLTEzMiw5MCArOTEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgaXNGbGFnZ2Vk
Rm9yRGVsZXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICBib29sIHZh
bGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOwogICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBj
b25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAotICAgIHN0YXRp
YyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7
ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRl
Y29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFk
aW5nIHVuZGVyc2NvcmUKLQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihQcm9ncmFtKTsKIAotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFy
ICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFu
dFRhYmxlKTsKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAKLSAgICBp
bnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSk7Ci0gICAgYm9vbCBs
aW5rVmFyeWluZ3MoKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoKTsKLSAgICBpbnQgZ2V0
QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0KLSAgICBib29sIGxp
bmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotICAgIGJvb2wg
ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAi
Iik7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgVW5pZm9ybSAq
Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtbmZ2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgYXBwbHlV
bmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0z
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVj
dG9yKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0KLSAgICB2b2lk
IGluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9y
bTo6UmVnaXN0ZXJJbmZvICpycywgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsK
LQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2Up
OwotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7Ci0gICAg
dm9pZCByZXNldEluZm9Mb2coKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJp
YWwoKTsKIAotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgRnJhZ21lbnRTaGFk
ZXIgKm1GcmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAK
LSAgICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOwotICAgIHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNM
OwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3Rh
bnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25z
dGFudFRhYmxlVlM7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwog
Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhf
QVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAg
IHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAgICAgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsK
LSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9JTUFHRV9VTklU
U107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgR0x1aW50
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZv
cm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKLSAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OwotICAgIFVuaWZv
cm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxvY2F0aW9u
OwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4Q29vcmRMb2NhdGlv
bjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RnJv
bnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247Ci0KLSAg
ICBib29sIG1MaW5rZWQ7CisgICAgUHJvZ3JhbUJpbmFyeSogbVByb2dyYW1CaW5hcnk7CiAgICAg
Ym9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3Jh
bSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLSAgICBjaGFyICptSW5mb0xv
ZzsKLSAgICBib29sIG1WYWxpZGF0ZWQ7CiAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50Owog
CkBAIC0yMjUsNiArMTE4LDggQEAgY2xhc3MgUHJvZ3JhbQogCiAgICAgUmVzb3VyY2VNYW5hZ2Vy
ICptUmVzb3VyY2VNYW5hZ2VyOwogICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOworCisgICAgSW5m
b0xvZyBtSW5mb0xvZzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFjMjhlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCkBAIC0wLDAgKzEsMjQ4
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhl
IGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4z
IHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPHN0cmluZz4K
KworI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmlu
ZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDMKKyNlbmRpZgorCituYW1lc3BhY2UgZ2wKK3sKK3N0ZDo6c3RyaW5nIHN0cihpbnQg
aSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5p
Zm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKQorICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1C
aW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7
CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsK
KyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAw
LCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7
CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAg
ICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxv
Y2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25l
ZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJp
bmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgo
aW5kZXgpCit7Cit9CisKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1E
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsK
KyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsK
KworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGlu
ZGV4KyspCisgICAgeworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0g
ZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2Ft
cGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2UgPSAwOworICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAg
bUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOwor
ICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24g
PSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uID0gLTE7Cit9CisKK1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sK
KyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAg
eworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlm
IChtQ29uc3RhbnRUYWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVs
ZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVu
aWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsK
KyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorfQorCitJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKQoreworICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJp
bmcobmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7
CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworICAgIAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1
dGVJbmRleF07Cit9CisKKy8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1w
bGVyIGluZGV4IHVzZWQuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0
ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNh
bXBsZXIKKy8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRo
ZSB2ZXJ0ZXggc2hhZGVyKS4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5n
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1Q
TEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4
dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0
dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0Owor
ICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBl
IGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4
dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQg
aW50IHN1YnNjcmlwdCA9IDA7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3Bl
cmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUu
ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2Yo
J10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1l
Lmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJz
dHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0K
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3Jt
czsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUgJiYKKyAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgPT0gc3Vic2NyaXB0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJd
ID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0g
NDsKKyAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAg
IHYgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAg
ICAgICB2ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkg
KiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFy
Z2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1h
dHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lk
dGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0
ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRh
cmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3Jj
V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRh
cmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAg
dGFyZ2V0ICs9IDg7CisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xm
bG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4o
dGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0g
OTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiAxNik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7CisgICAgICAgIHRhcmdldCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X1NBTVBMRVJfMkQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVS
X0NVQkUpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50
ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0t
PnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDE2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1F
eHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNb
aV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9y
bXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsg
aW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tp
bmRleF0tPmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlm
b3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Cit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1V
bmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9ICp1YjsKKworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsK
KyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgMiwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzog
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZv
cm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9W
RUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQg
c2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5h
cnk6OmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBj
b25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQor
eworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIERXT1JEIHJlc3VsdDsKKyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBz
b3VyY2VUZXh0OworICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8
PSBEM0RDT01QSUxFX0RFQlVHOworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQz
RENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmlu
ZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6
c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIp
ICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3Ry
KCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTDsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxv
YiAqYmluYXJ5ID0gTlVMTDsKKyAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwor
ICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBnX2Zha2VwYXRoLCBO
VUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNz
YWdlKTsKKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFy
ICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigp
OworCisgICAgICAgIGluZm9Mb2cuYXBwZW5kU2FuaXRpemVkKG1lc3NhZ2UpOworICAgICAgICBU
UkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisg
ICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBO
VUxMOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0g
RDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5h
cnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOworCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBiaW5hcnkt
PlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4g
YmluYXJ5OworfQorCisvLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdp
c3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3Vh
Z2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQorLy8gUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2Vz
ZnVsCitpbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
KQoreworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgaW50
IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7
CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dD
b3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7CisgICAgICAgIGludCBtID0gVmFy
aWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisKKyAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAt
IG4gJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
IGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChh
dmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5n
LT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7
IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxh
YmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4g
JiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFj
a2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHgg
PCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0
OyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSAr
PSBwYWNraW5nW3ldW3hdID8gMCA6IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNw
YWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5n
VmVjdG9yczsgcisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFwYWNraW5nW3JdW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSByOyB5IDwgciArIG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZh
cnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOworCisgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5n
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGlu
dCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1ty
XVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVyczsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5m
b0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIp
Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFy
eWluZyByZWdpc3RlciBhc3NpZ25tZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IGZyYWdWYXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAg
ICAgZnJhZ1Zhci0+cmVnID0gLTE7CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0K
KworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdnR4VmFyKyspCisgICAgeworICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2
dHhWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhl
IHJlZ2lzdGVyIGZpbGUKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZF
Q1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlpbmdz
KGluZm9Mb2csIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMg
PCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRl
IHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0
ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0
LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4
VmFyeWluZ1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3Vw
cG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7
IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91
dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0
LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUg
IT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVy
dGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWlu
ZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcg
PSBpbnB1dC0+cmVnOworICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsK
KworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBk
b2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsK
KworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rk
OjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsK
KworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdCAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAi
OyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVB
dHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJ
bmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291
bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgor
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09V
VFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0g
MDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9
IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0g
PyAyIDogMSkpOworCisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVn
aXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0
cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAg
IH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7
CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtc
biI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJh
eTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigp
OyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAg
ICAgICAgdmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZl
cnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIpO1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBp
eGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBpeGVsU2l6ZS55
ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9u
Lnc7XG4iOworCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBj
bGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1
dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
KyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIG91dHB1dC52IiArIHN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJl
ZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5n
cworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVsw
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaGFyZWRSZWdpc3RlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5n
W3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAw
OiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFy
eWluZy0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsg
c3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAg
ICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVU
XG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7
XG4iOworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0K
KworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAg
ICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIK
KyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAg
ICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1
dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhl
IHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBD
b250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29y
ZC54ICsgZHhfQ29vcmQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsg
ZHhfQ29vcmQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBpeGVsSExTTCAr
PSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4
X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7CisgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29v
cmQueTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFj
aW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBk
eF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDog
KGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIo
aikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xf
bWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBQU19PVVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdz
ICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFm
cmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29t
cGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6
OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6
c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlmICgh
bGlua1ZhcnlpbmdzKGluZm9Mb2csIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFk
ZXIsIHZlcnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2
ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAi
IDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBC
bG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgdmVydGV4SExTTC5j
X3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxv
YiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHBpeGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJp
bmFyeSAmJiBwaXhlbEJpbmFyeSkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4
ZWxSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5
LT5HZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAo
dmVydGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVz
dWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVs
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAg
IHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYg
bVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmli
dXRlcyhpbmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNo
YWRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9G
UkFHTUVOVF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVW
UykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMg
YWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJl
IHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0
aW9uCisgICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0RlcHRoUmFuZ2UiKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7
CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJk
eF9Gcm9udENDVyIpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRl
eHQtPm1hcmtEeFVuaWZvcm1zRGlydHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMg
dGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBz
dHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGlu
Z3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhT
aGFkZXIpCit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJp
bmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBp
ZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5l
bXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2
ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAq
YXR0cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8g
Zml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNl
ZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJp
bmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAg
IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0
cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBh
dmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93
cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4
ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0
aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmli
dXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAw
OyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQorICAgIHsKKyAgICAgICAg
aW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOworICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZh
cmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEp
OworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhD
b25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQoreworICAgIEQzRFhDT05TVEFOVFRBQkxFX0RF
U0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOworCisgICAgY29uc3RhbnRUYWJsZS0+R2V0RGVz
YygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNv
bnN0YW50SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9u
LkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgRDNEWEhBTkRMRSBj
b25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5k
ZXgpOworCisgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Cisg
ICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFk
ZXIsIGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4g
dGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVybnMgdHJ1
ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0Mg
JmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgaWYgKGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVn
aXN0ZXJDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBEM0RYSEFORExFIHBzQ29u
c3RhbnQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFu
dERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0g
bUNvbnN0YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlw
dGlvbi5OYW1lKTsKKworICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1Q
TEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVy
SW5kZXggKyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBt
Q29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NV
QkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2Vk
VmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0
ZXhTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
VmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2go
Y29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19TVFJV
Q1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXgg
PSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZp
ZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxk
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZp
ZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUs
IGZpZWxkKTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERl
c2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAx
OworCisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQ
Uy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2Ny
aXB0aW9uQ291bnQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkg
KyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGlu
Zm9Mb2csIHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25z
dGFudERlc2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoK
KyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xV
TU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVmaW5lVW5p
Zm9ybShzaGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0
aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVV
bmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5pZm9ybSAqdW5p
Zm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOworCisgICAg
aWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50
eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBkZWxldGUgdW5p
Zm9ybTsKKyAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgfQorCisgICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIp
IHVuaWZvcm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc2hhZGVyID09
IEdMX1ZFUlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24p
OworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICByZXR1cm4gdW5pZm9y
bS0+dHlwZSA9PSB0eXBlOworICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9y
bSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAx
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7
ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2Nh
dGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1VuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9y
cyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8y
RCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBzd2l0Y2gg
KGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9CT09MOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBU
X0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3Mg
PT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGlzIG1ldGhvZCBuZWVk
cyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFy
eTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgaWYg
KG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OnVuZGVj
b3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lID0gX25hbWU7CisgICAgCisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUgZmllbGQg
ZGVjb3JhdGlvbgorICAgIHNpemVfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9zID0gbmFtZS5m
aW5kKCIuXyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgbmFt
ZS5yZXBsYWNlKHBvcywgMiwgIi4iKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGxlYWRp
bmcgZGVjb3JhdGlvbgorICAgIGlmIChuYW1lWzBdID09ICdfJykKKyAgICB7CisgICAgICAgIHJl
dHVybiBuYW1lLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5jb21wYXJlKDAs
IDMsICJhcl8iKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDMpOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5Ojph
cHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50
IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyAqIDRdOworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09M
X0NPTlNUQU5UU107CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCB8fCB0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGogPCB3aWR0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rv
cltpICogNCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEu
MGY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMu
Ym9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZv
cm0tPnBzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6
IDA7CisgICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49
IDAgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAgaW50IGNv
cHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291
bnQpKTsKKyAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5U
Uyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAp
CisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29s
SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3Rh
bnRCKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCwg
Ym9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQor
Citib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
cHMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJ
bmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
KyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBp
eGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3Qg
ZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAg
ICB7CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlm
b3JtLT52cy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2Ft
cGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZs
b2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBhcHBseVVu
aWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJU
KGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVj
dG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxv
YXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7
CisgICAgfQorCisgICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0
b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlV
bmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMp
OworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9y
W2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwg
KGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBhcHBseVVuaWZv
cm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKK3sKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgs
IChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7
CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAg
eworICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0
ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbVZhbGlkYXRlZDsKK30KKwordm9pZCBQcm9ncmFt
QmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQoreworICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCisgICAgdW5zaWduZWQg
aW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKKyAg
ICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlKyspCisgICAgeworICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsr
OworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNo
YXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7CisK
KyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1
ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
ICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCisKKyAgICAq
dHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOworfQorCitHTGludCBQcm9n
cmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCit7CisgICAgaW50IGNvdW50ID0g
MDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAo
IW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVu
Z3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4TGVuZ3RoID0g
c3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5n
dGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1h
eExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwg
dW5pZm9ybXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IHVuaWZvcm07CisgICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jt
cy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9y
bV0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBhY3RpdmVVbmlmb3JtKys7CisgICAgfQorCisgICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9y
bXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlm
b3JtQ291bnQoKQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgc3RkOjpz
dHJpbmcgc3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOworCisgICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3Ry
aW5nICs9ICJbMF0iOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcu
Y19zdHIoKSwgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKwor
ICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3Ry
bGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPmFycmF5U2l6ZTsKKworICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBl
OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQorewor
ICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5p
Zm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVu
aWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZv
cm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwg
MywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSAoaW50
KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOworICAgICAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4
TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisK
K3ZvaWQgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBh
cHBseVVuaWZvcm1zKCk7CisgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCZpbmZvTG9nKSkKKyAg
ICB7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5h
cnk6OnZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZykKK3sKKyAgICAvLyBpZiBhbnkg
dHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywg
YnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhp
cyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWws
IGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJ
TlZBTElEX09QRVJBVElPTiBlcnJvci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cygpOworICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkK
KyAgICB7CisgICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVy
UmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0u
bG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+
PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0p
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBw
ZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0
dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBp
ZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1
bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQp
IiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5
cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3Rpbmcg
dHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1T
YW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVw
dGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0
aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhDb29yZExv
Y2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKK30K
KworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhQ
b2ludHNPckxpbmVzTG9jYXRpb247Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMWU5YzVlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCkBAIC0wLDAgKzEsMjEx
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQ
cm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2Ug
MjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9QUk9HUkFNX0JJTkFSWV9IXworCisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNpbmNsdWRlIDxk
M2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2NsYXNzIFZlcnRl
eFNoYWRlcjsKKworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVy
IHVuaWZvcm0KK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKworICAgIH5V
bmlmb3JtKCk7CisKKyAgICBib29sIGlzQXJyYXkoKTsKKworICAgIGNvbnN0IEdMZW51bSB0eXBl
OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCisgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQorICAgIGNvbnN0
IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAg
IGJvb2wgZGlydHk7CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCisgICAgeworICAgICAgICBS
ZWdpc3RlckluZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDRJbmRleCA9IC0xOwor
ICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7CisgICAgICAgICAgICBib29sSW5kZXggPSAt
MTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
U2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19CT09MOiAgICBi
b29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9hdDRJbmRleCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQz
RFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
SW5kZXg7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJDb3Vu
dCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyQ291bnQpOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmbG9hdDRJbmRleDsK
KyAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50IGJvb2xJbmRleDsKKworICAg
ICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKKyAgICB9OworCisgICAgUmVnaXN0ZXJJbmZvIHBzOwor
ICAgIFJlZ2lzdGVySW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCitzdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisKKyAg
ICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50OworICAgIHVuc2ln
bmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBsaW5raW5nIGEg
cHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUgcGFzc2VkIHRvIFByb2dyYW1C
aW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5Cit7CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtQmlu
YXJ5KCk7CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0
ZXhTaGFkZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFy
ICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwor
CisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBl
KFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIEdMaW50
IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7CisKKyAgICBHTGludCBnZXRV
bmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBi
b29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVu
aWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVu
aWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
KyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKKworICAg
IEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhE
ZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKKyAgICBH
TGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7
CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisKKyAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKyAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRl
Q291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwor
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZyk7
CisgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOworICAgIGJvb2wg
aXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0
dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJz
Y29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKKworICAg
IElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFu
dFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwor
ICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhl
bEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua0F0dHJp
YnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2cs
IEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAg
Ym9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0
IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVh
dGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3Ip
OworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAgIElEaXJlY3Qz
RERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4
ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7
CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgorICAgIElEM0RY
Q29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUg
Km1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhf
VkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJ
QlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0aXZlOwor
ICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsK
KyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1z
OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7
CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRHhEZXB0aFJh
bmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhD
b29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2Nh
dGlvbjsKKworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdM
RVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmluZGV4IDYwMDQyNTUuLjRiOTExZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogICAgIHJldHVybiBkeDJlczo6R2V0U3Rl
bmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5k
ZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdl
dCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAg
IG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5S
ZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOworfQor
CisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQg
Zm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBI
ZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sK
KyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sK
KyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJl
dHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVy
ZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsKKyAg
ICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZPUk1B
VCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAorewor
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Cit9
CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8v
Ly8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRh
cmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sKKyAg
ICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1h
aW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBS
ZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1
cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1UZXh0
dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94eVJl
Zihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4dHVy
ZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94
eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpn
ZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1H
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdp
ZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0
dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVy
YnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1hdCgp
IGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1h
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1w
bGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBs
ZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJi
dWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVy
KEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9i
amVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIy
OCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291bnRP
YmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEg
KzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCiB7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0z
NTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1
MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKICAgICB9
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRo
U3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAppbmRleCA2MGVjMDU4Li5lNmQ1ZGRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBU
ZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBS
ZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZl
cjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAKLWNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNl
CiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVy
ZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9pZCBh
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNsYXNz
IFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKLSAgICBCaW5k
aW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1
cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2NsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQorewor
ICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVhbCBHTHNpemVp
IGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0
OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVp
IGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlh
bCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJl
Q3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmluZGV4
IGFjNThhYmUuLjU3ZmQzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5jcHAKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9n
KSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAg
ICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9
ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291
cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5k
ZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAg
ICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAg
aWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hh
ZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCmlu
ZGV4IDljN2MwZGYuLjQzMDgzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaApAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxW
YXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dy
YW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNo
YWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcg
KzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsK
IAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9n
cmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBW
ZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmlu
ZGV4IDI5MTc3ZDIuLjVjY2Y4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApAQCAtMSwzMDkwICsxLDI5MDkgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBj
bGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3Vi
ZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kIHJlbGF0ZWQKLS8vIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgPGQzZHg5dGV4Lmg+Ci0KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW50cmluLmg+Ci0KLSNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXh0dXJlU2VyaWFsID0gMTsKLQot
c3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUIHx8Ci0gICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpCi0g
ICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEQzREZNVF9EWFQ1OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0ZM
T0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOwotICAgIH0K
LSAgICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEQzREZNVF9BMTZCMTZHMTZSMTZGOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0xVTUlO
QU5DRSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9MODsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBEM0RGTVRfQThMODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0g
R0xfUkdCKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4Owot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotfQotCi1zdGF0aWMgYm9vbCBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAg
ICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2Ug
RDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW1hZ2U6OkltYWdlKCkKLXsKLSAgICBtV2lk
dGggPSAwOyAKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtRm9ybWF0ID0gR0xfTk9ORTsKLSAgICBt
VHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0KLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBt
RGlydHkgPSBmYWxzZTsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAg
bUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTo6fkltYWdlKCkKLXsKLSAg
ICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotYm9vbCBJbWFnZTo6cmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFzZSkKLXsKLSAg
ICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8Ci0g
ICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8Ci0gICAgICAgIG1UeXBlICE9IHR5cGUgfHwKLSAg
ICAgICAgZm9yY2VSZWxlYXNlKQotICAgIHsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAg
ICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7Ci0gICAgICAg
IG1UeXBlID0gdHlwZTsKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdp
bGwgYmUgdXNlZAotICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBl
KG1Gb3JtYXQsIG1UeXBlKTsKLQotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3VyZmFjZSA9IE5V
TEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQotewotICAgIGlmKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJlY3QzRFRl
eHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3Vy
ZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RF
TU1FTTsKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAg
ICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGgg
PSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7Ci0gICAg
ICAgIGlmIChJc0NvbXByZXNzZWQobUZvcm1hdCkgJiYgKG1XaWR0aCAlIDQgIT0gMCB8fCBtSGVp
Z2h0ICUgNCAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCBpc011bHQ0ID0gZmFs
c2U7Ci0gICAgICAgICAgICBpbnQgdXBzYW1wbGVDb3VudCA9IDA7Ci0gICAgICAgICAgICB3aGls
ZSAoIWlzTXVsdDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdFdpZHRo
IDw8PSAxOwotICAgICAgICAgICAgICAgIHJlcXVlc3RIZWlnaHQgPDw9IDE7Ci0gICAgICAgICAg
ICAgICAgdXBzYW1wbGVDb3VudCsrOwotICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0V2lkdGgg
JSA0ID09IDAgJiYgcmVxdWVzdEhlaWdodCAlIDQgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291bnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVU
ZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVM
TCwgZ2V0RDNERm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
LSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFj
ZSk7Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBtU3VyZmFj
ZSA9IG5ld1N1cmZhY2U7Ci0gICAgbURpcnR5ID0gZmFsc2U7Ci0gICAgbUQzRFBvb2wgPSBwb29s
VG9Vc2U7Ci19Ci0KLUhSRVNVTFQgSW1hZ2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJl
Y3QsIGNvbnN0IFJFQ1QgKnJlY3QpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0KLSAgICBpZiAobVN1cmZhY2UpCi0g
ICAgewotICAgICAgICByZXN1bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVj
dCwgMCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdl
Ojp1bmxvY2soKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OmlzUmVuZGVyYWJsZUZvcm1hdCgp
IGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQotRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdAot
ewotICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVl
biByZWRlZmluZWQgZmlyc3QKLSAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2Fs
bGVyCi0gICAgQVNTRVJUKG1EM0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOwotCi0gICAgcmV0
dXJuIG1EM0RGb3JtYXQ7Ci19Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6Z2V0U3VyZmFj
ZSgpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJmYWNlOwotfQot
Ci12b2lkIEltYWdlOjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBEM0RYTG9hZFN1cmZhY2VG
cm9tU3VyZmFjZShzdXJmYWNlLCBOVUxMLCBOVUxMLCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNE
WF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci0K
LSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsK
LSAgICBBU1NFUlQoZGVzYy5Qb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBtU3VyZmFj
ZSA9IHN1cmZhY2U7Ci0gICAgbUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci19Ci0KLXZvaWQgSW1hZ2U6
OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKLQotICAg
IGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCBy
ZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IG1IZWlnaHQpOwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJv
bVN1cmZhY2UoZGVzdFN1cmZhY2UsIE5VTEwsICZyZWN0LCBzb3VyY2VTdXJmYWNlLCBOVUxMLCAm
cmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBi
ZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgUE9JTlQgcG9pbnQgPSB7cmVjdC5sZWZ0LCBy
ZWN0LnRvcH07Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRh
dGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsKLSAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlv
ZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBp
bnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBv
dXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KLXZvaWQgSW1hZ2U6OmxvYWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlUGl0Y2god2lk
dGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0gICAgaW5wdXQgPSAoKGNoYXIq
KWlucHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKG1G
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAg
bG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBE
M0RGTVRfQThMOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgaWYgKHN1cHBv
cnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRleHR1
cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRo
YXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2Fk
QWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBs
b2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0
byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECi0gICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2Fk
UkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10g
PSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVyUGl4
ZWwgPSBuYXRpdmU/IDE6IDQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKLQotICAgICAgICBp
ZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIEw4IGRl
c3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291
cmNlLCB3aWR0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
ZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICAr
IHhvZmZzZXQgKiAxNik7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4w
ZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0s
IFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBu
YXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZl
PyAyOiA0OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0
aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
LSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggICsgeG9mZnNldCAqIDE2KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4
KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNl
W3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEg
JiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTAp
ID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+
PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
SGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4KTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDND
MDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0
IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgX19tMTI4aSBick1h
c2sgPSBfbW1fc2V0MV9lcGkzMigweDAwZmYwMGZmKTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOwotICAgICAgICBpbnQgeCA9
IDA7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAgICAgICAgZm9y
ICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAxNSkgIT0g
MCkgJiYgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAx
NikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKDsgeCArIDMgPCB3aWR0aDsgeCArPSA0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZHVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOwotICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBh
bmQgYSwgd2hpY2ggZG9uJ3QgY2hhbmdlCi0gICAgICAgICAgICBfX20xMjhpIGdhQ29tcG9uZW50
cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRhKTsKLSAgICAgICAgICAgIC8v
IE1hc2sgb3V0IGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21t
X2FuZF9zaTEyOChzb3VyY2VEYXRhLCBick1hc2spOwotICAgICAgICAgICAgLy8gU3dhcCBiIGFu
ZCByCi0gICAgICAgICAgICBfX20xMjhpIGJyU3dhcHBlZCA9IF9tbV9zaHVmZmxlaGlfZXBpMTYo
X21tX3NodWZmbGVsb19lcGkxNihickNvbXBvbmVudHMsIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEp
KSwgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpOwotICAgICAgICAgICAgX19tMTI4aSByZXN1bHQg
PSBfbW1fb3Jfc2kxMjgoZ2FDb21wb25lbnRzLCBiclN3YXBwZWQpOwotICAgICAgICAgICAgX21t
X3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzCi0gICAg
ICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJn
YmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAq
IDQpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZm
MDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25l
ZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+
IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0
KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2Jh
ICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAw
eDAwM0UpID4+IDMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgw
N0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAx
Myk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZG
IDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwot
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDg7Ci0gICAgICAgIG1l
bWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0IHsKLSAgICBzd2l0Y2ggKGdl
dEQzREZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAg
ICBsb2FkRFhUMURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICAgIGxvYWREWFQzRGF0YSh4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1
dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAg
ICAgbG9hZERYVDVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhUMSBibG9jayBsYXlv
dXQgaXM6Ci0gIC8vIFswLTFdIGNvbG9yMC4KLSAgLy8gWzItM10gY29sb3IxLgotICAvLyBbNC03
XSBjb2xvciBiaXRtYXAsIDIgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFNvIGVhY2ggb2YgdGhlIDQt
NyBieXRlcyByZXByZXNlbnRzIG9uZSBsaW5lLCBmbGlwcGluZyBhIGJsb2NrIGlzIGp1c3QKLSAg
Ly8gZmxpcHBpbmcgdGhvc2UgYnl0ZXMuCi0KLSAgLy8gRmlyc3QgMzItYml0cyBpcyB0d28gUkdC
NTY1IGNvbG9ycyBzaGFyZWQgYnkgdGlsZSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBtb2RpZmll
ZC4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLQotICAvLyBTZWNvbmQgMzItYml0cyBjb250YWlu
cyA0IHJvd3Mgb2YgNCAyLWJpdCBpbnRlcnBvbGFudHMgYmV0d2VlbiB0aGUgY29sb3JzLiBBbGwg
cm93cyBzaG91bGQgYmUgZmxpcHBlZC4KLSAgZGVzdFsxXSA9IChzb3VyY2VbMV0gPj4gMjQpIHwK
LSAgICAgICAgICAgICgoc291cmNlWzFdIDw8IDgpICYgMHgwMEZGMDAwMCkgfAotICAgICAgICAg
ICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAgICAoc291cmNl
WzFdIDw8IDI0KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQxIGJs
b2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2NrSGFs
Zihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8v
IFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSBzb3VyY2VbMF07Ci0gIGRlc3RbMV0gPSAo
KHNvdXJjZVsxXSA8PCA4KSAmIDB4MDAwMEZGMDApIHwKLSAgICAgICAgICAgICgoc291cmNlWzFd
ID4+IDgpICYgMHgwMDAwMDBGRik7Ci19Ci0KLS8vIEZsaXBzIGEgZnVsbCBEWFQzIGJsb2NrIGlu
IHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUM0Jsb2NrRnVsbChjb25z
dCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhU
MyBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTddICBhbHBoYSBiaXRtYXAsIDQgYml0cyBwZXIg
cGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gRmlyc3QgYW5kIFNlY29u
ZCAzMiBiaXRzIGFyZSA0Yml0IHBlciBwaXhlbCBhbHBoYSBhbmQgbmVlZCB0byBiZSBmbGlwcGVk
LgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAoc291cmNlWzFdIDw8IDE2KTsKLSAg
ZGVzdFsxXSA9IChzb3VyY2VbMF0gPj4gMTYpIHwgKHNvdXJjZVswXSA8PCAxNik7Ci0KLSAgLy8g
QW5kIGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICBGbGlw
Q29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyB0
aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3Rh
dGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNl
LCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgZGVzdFsw
XSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8PCAxNik7Ci0gIEZsaXBDb3B5RFhU
MUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIGEgZnVsbCBE
WFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJs
b2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7
Ci0gIC8vIEEgRFhUNSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswXSAgICBhbHBoYTAuCi0gIC8v
IFsxXSAgICBhbHBoYTEuCi0gIC8vIFsyLTddICBhbHBoYSBiaXRtYXAsIDMgYml0cyBwZXIgcGl4
ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAgLy8gVGhlIGFscGhhIGJpdG1hcCBk
b2Vzbid0IGVhc2lseSBtYXAgbGluZXMgdG8gYnl0ZXMsIHNvIHdlIGhhdmUgdG8KLSAgLy8gaW50
ZXJwcmV0IGl0IGNvcnJlY3RseS4gIEV4dHJhY3RlZCBmcm9tCi0gIC8vIGh0dHA6Ly93d3cub3Bl
bmdsLm9yZy9yZWdpc3RyeS9zcGVjcy9FWFQvdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjLnR4dCA6
Ci0gIC8vCi0gIC8vICAgVGhlIDYgImJpdHMiIGJ5dGVzIG9mIHRoZSBibG9jayBhcmUgZGVjb2Rl
ZCBpbnRvIG9uZSA0OC1iaXQgaW50ZWdlcjoKLSAgLy8KLSAgLy8gICAgIGJpdHMgPSBiaXRzXzAg
KyAyNTYgKiAoYml0c18xICsgMjU2ICogKGJpdHNfMiArIDI1NiAqIChiaXRzXzMgKwotICAvLyAg
ICAgICAgICAgICAgICAgICAyNTYgKiAoYml0c180ICsgMjU2ICogYml0c181KSkpKQotICAvLwot
ICAvLyAgIGJpdHMgaXMgYSA0OC1iaXQgdW5zaWduZWQgaW50ZWdlciwgZnJvbSB3aGljaCBhIHRo
cmVlLWJpdCBjb250cm9sIGNvZGUKLSAgLy8gICBpcyBleHRyYWN0ZWQgZm9yIGEgdGV4ZWwgYXQg
bG9jYXRpb24gKHgseSkgaW4gdGhlIGJsb2NrIHVzaW5nOgotICAvLwotICAvLyAgICAgICBjb2Rl
KHgseSkgPSBiaXRzWzMqKDQqeSt4KSsxLi4zKig0KnkreCkrMF0KLSAgLy8KLSAgLy8gICB3aGVy
ZSBiaXQgNDcgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYW5kIGJpdCAwIGlzIHRoZSBsZWFzdAot
ICAvLyAgIHNpZ25pZmljYW50IGJpdC4KLSAgY29uc3QgdW5zaWduZWQgY2hhciogc291cmNlQnl0
ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0Qnl0ZXMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRlc3QpKTsKLSAgdW5zaWduZWQg
aW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAoc291cmNlQnl0ZXNbM10gKyAy
NTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzJfMyA9IHNvdXJjZUJ5
dGVzWzVdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzZdICsgMjU2ICogc291cmNlQnl0ZXNbN10pOwot
ICAvLyBzd2FwIGxpbmVzIDAgYW5kIDEgaW4gbGluZV8wXzEuCi0gIHVuc2lnbmVkIGludCBsaW5l
XzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIC8vIHN3YXAgbGluZXMg
MiBhbmQgMyBpbiBsaW5lXzJfMy4KLSAgdW5zaWduZWQgaW50IGxpbmVfM18yID0gKChsaW5lXzJf
MyAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVf
Ml8zICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVzWzBdID0gc291cmNlQnl0ZXNbMF07
Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwotICBkZXN0Qnl0ZXNbMl0gPSBsaW5l
XzNfMiAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5lXzNfMiAmIDB4ZmYwMCkgPj4gODsK
LSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfM18yICYgMHhmZjAwMDApID4+IDE2OwotICBkZXN0Qnl0
ZXNbNV0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1s2XSA9IChsaW5lXzFfMCAmIDB4
ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzddID0gKGxpbmVfMV8wICYgMHhmZjAwMDApID4+IDE2
OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92ZSBmdW5jdGlv
bi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQot
Ly8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVj
dGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBp
bnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUu
Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihzb3VyY2UpKTsKLSAgdW5z
aWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN0YXRp
Y19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzBfMSA9IHNvdXJjZUJ5
dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICogc291cmNlQnl0ZXNbNF0pOwot
ICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8xICYgMHgwMDBmZmYpIDw8IDEyKSB8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8wXzEgJiAweGZmZjAwMCkgPj4gMTIp
OwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVzWzFdID0gc291
cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfMV8wICYgMHhmZjsKLSAgZGVzdEJ5
dGVzWzNdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNbNF0gPSAobGlu
ZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2Ug
KyAyLCBkZXN0ICsgMik7Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQxRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zm
c2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJU
KHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJU
KGlucHV0UGl0Y2ggJSA4ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDggPT0gMCk7
Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRo
IHVwIGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3
aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDI7Ci0K
LSAgICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBk
ZXN0W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNl
W3ggKyAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291
cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogOCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlu
dHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNT
RVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0
aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7
Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oaW5w
dXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMgbGVz
cyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBp
bnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDQ7Ci0KLSAgICBzd2l0Y2ggKGhlaWdodCkK
LSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGp1
c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3ggKyAxXTsKLSAgICAgICAgICAg
ICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4ICsgMl07Ci0gICAgICAgICAgICAgICAgZGVzdFt4
ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fj
cm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhU
M0Jsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQg
JSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyAr
K3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09
IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0
ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRj
aCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBj
YXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAz
KSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dp
dGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07
Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAgICAgICAg
ICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBGbGlwQ29weURYVDVCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0Z1bGwoc291cmNl
ICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtT
dWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFu
ZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0g
ICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0gICAgCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjcmlwdGlv
bi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xf
U1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVz
dGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShy
ZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldERhdGEpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBm
YWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNl
UmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkZXNjcmlwdGlv
bi5IZWlnaHQpOwotICAgIGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5
b2Zmc2V0LCBoZWlnaHQsIG1IZWlnaHQpOwotICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwg
ZGVzdFlPZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgZGVzdFlPZmZzZXQgKyBoZWlnaHR9OwotCi0g
ICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gRDNE
WExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZ2V0U3VyZmFjZSgpLCBOVUxMLCAmZGVzdFJlY3QsIHJl
bmRlclRhcmdldERhdGEsIE5VTEwsICZzb3VyY2VSZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDApOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKLSAgICAg
ICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAgICAgICByZXN1
bHQgPSByZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJlY3Qs
IDApOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdo
dCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OwotICAgICAgICByZXN1
bHQgPSBsb2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9j
ayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIp
OwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RMb2NrLnBC
aXRzICYmIHNvdXJjZUxvY2sucEJpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOwotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0
czsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6
Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291
cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2su
UGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgICAg
ICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0
Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RG
b3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiAr
IDFdICYgMHhGODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwg
KHJlZCA+PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gKHNpZ25lZCBj
aGFyKXNvdXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB1bmxvY2soKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVj
dCgpOwotICAgIH0KLQotICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLQotICAgIG1E
aXJ0eSA9IHRydWU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSwKLSAgICAgIG1E
M0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJlbmRlclRhcmdldCkpLAotICAg
ICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCi17Ci19Ci0KLVRleHR1cmVT
dG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQotewotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjpp
c1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0K
LWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICht
RDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdl
OjpnZXRQb29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0KLXVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1UZXh0dXJlU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlz
c3VlVGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsr
OwotfQotCi1UZXh0dXJlOjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkK
LXsKLSAgICBtTWluRmlsdGVyID0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOwotICAgIG1NYWdG
aWx0ZXIgPSBHTF9MSU5FQVI7Ci0gICAgbVdyYXBTID0gR0xfUkVQRUFUOwotICAgIG1XcmFwVCA9
IEdMX1JFUEVBVDsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICBtVXNhZ2UgPSBH
TF9OT05FOwotICAgIAotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0KLSAgICBtSW1tdXRhYmxl
ID0gZmFsc2U7Ci19Ci0KLVRleHR1cmU6On5UZXh0dXJlKCkKLXsKLX0KLQotLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0
ZXIpCi1ib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQotewotICAgIHN3
aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2Ug
R0xfTElORUFSOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQ
TUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtTWluRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIG1E
aXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIo
R0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNl
IEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVy
cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ly8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKLXsKLSAg
ICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBjYXNl
IEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1l
dGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlk
IGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKLXsK
LSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBj
YXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFwKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFy
YW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ugc3RhdGUgdXBkYXRlICh2
YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdl
KQotewotICAgIHN3aXRjaCAodXNhZ2UpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFOgotICAgICAgICBtVXNhZ2Ug
PSB1c2FnZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbU1pbkZpbHRlcjsKLX0KLQotR0xlbnVtIFRleHR1cmU6Omdl
dE1hZ0ZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYWdGaWx0ZXI7Ci19Ci0KLUdMZW51
bSBUZXh0dXJlOjpnZXRXcmFwUygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XcmFwUzsKLX0KLQot
R0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBUOwot
fQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtVXNh
Z2U7Ci19Ci0KLXZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9IE5V
TEwpCi0gICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEo
MCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5
cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmU6OnNldENvbXByZXNz
ZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1h
Z2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2Nr
ZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKGltYWdl
LT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW50IGlucHV0
U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRD
b21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNp
emUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5s
b2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBp
eGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAg
IGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5b2Zm
c2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0
ICE9IGdldEludGVybmFsRm9ybWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsKLSAgICAgICAg
dXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICB1cGRhdGVSZWdpb24ucmlnaHQg
PSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20gPSB5b2Zmc2V0
ICsgaGVpZ2h0OwotICAgICAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsKLQotICAgICAg
ICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2Ut
PmxvY2soJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbik7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCA9IENvbXB1dGVD
b21wcmVzc2VkUGl0Y2god2lkdGgsIGZvcm1hdCk7Ci0gICAgICAgICAgICBpbnQgaW5wdXRTaXpl
ID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9m
ZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQs
IC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocGl4ZWxzKSArIGlucHV0U2l6
ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAg
IGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZhbHNl
KSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBk
YXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJvb2wg
VGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURpcnR5
UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERpcnR5
KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2VzID0g
ZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkKLXsK
LSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJl
dHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQotdW5z
aWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KQot
ewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAgICBy
ZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQpIDog
MDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAm
JiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1
cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxl
dmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdp
dGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLgot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2
ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQo
KSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRleHQg
KmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0ZXIo
KTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17
Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7
Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3VyY2Us
IE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNw
bGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5n
ZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxM
LCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0
dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNl
VGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAgIG1UZXh0dXJlID0gc3VyZmFj
ZVRleHR1cmU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRl
clRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKLXsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIG1UZXh0dXJlID0gTlVM
TDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVp
Z2h0LCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAw
LCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3Rv
cmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdl
MkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
KnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmc3VyZmFjZSk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOwotfQotCi1U
ZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4
U3RvcmFnZSA9IE5VTEw7Ci0gICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIG1Db2xvcmJ1ZmZlclBy
b3h5ID0gTlVMTDsKLSAgICBtUHJveHlSZWZzID0gMDsKLX0KLQotVGV4dHVyZTJEOjp+VGV4dHVy
ZTJEKCkKLXsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIAotICAgIGlmIChtU3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7Ci0gICAg
ICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4g
YSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJv
eGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBh
IHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBkZWxl
dGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVBy
b3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMgPiAw
KQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQotICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6Omdl
dFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KLUdMc2l6
ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAw
OwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAot
ewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpOwotfQot
Ci1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF0uZ2V0VHlwZSgpOwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3Jt
YXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsK
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
ICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAg
ICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdl
dENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3Ag
PSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVj
dC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNv
dXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGlu
dCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7
Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwg
ZGVzdFlPZmZzZXQsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsK
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVs
XS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21w
bGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5KHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICgh
bVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIGlmIChsZXZlbCA8IGxldmVs
Q291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291
cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xh
bXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVs
WU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7
Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdl
dFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNv
dXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBkZXN0WU9mZnNl
dCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29s
IHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxz
LCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgbUltbXV0YWJsZSA9
IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lk
dGggPj4gMSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7
Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAg
ICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUg
c2FtcGxpbmcgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBw
YWdlIDg1LgotYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAg
ICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIp
Ci0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0g
ICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBH
TF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4
dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKTsKLQotICAgIGlmICghbnBvdFN1cHBvcnQp
Ci0gICAgewotICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAh
aXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewot
ICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlz
UG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVz
dHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBs
ZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0
KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgs
IGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBt
SW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRU
eXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2
ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlt
YWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZl
bCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2Vk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkp
OwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0QmFzZVRleHR1cmUo
KSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNl
VGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVy
ZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0g
ICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0
IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYm
IChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7Ci0KLSAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChs
ZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAKLSAgICBp
ZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2
ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotICAgICAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0K
LSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsK
LSAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsKLQotICAgICAgICBp
ZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVjdChs
ZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xl
dmVsXS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJE
Ojpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVTdG9yYWdlMkQgKm5ld1Rl
eFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgIT0g
MCAmJiBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSAhPSAwKQotICAgIHsKLSAgICAgICAgR0xz
aXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVs
cyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZm9y
bWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgbmV3VGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0cnVlKTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwoaSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvcHlU
b1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCi0g
ICAgICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9y
YWdlOwotICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc3Qp
IGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVN
aXBtYXBzKCkKLXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVu
c2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpLCBt
SW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAx
OyBpIDw9IHE7IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJy
YXlbMF0uZ2V0Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5n
ZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxv
d2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgaWYg
KHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAg
ICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNl
KCkgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlM
RUQoRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgp
LCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxM
LCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBF
UlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1
ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlk
KCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOwotICAgIH0KLQotICAg
IHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0
dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAg
IAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi1UZXh0
dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewot
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRleHR1cmVTdG9y
YWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdl
KHJlbmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywgaXNSZW5kZXJUYXJn
ZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRl
eHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCkKLXsKLSAg
ICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShlczJk
eDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiBzdXJmYWNl
OwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCAr
IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKLX0KLQotVGV4dHVyZUN1YmVNYXA6
OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAg
ICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0g
MDsKLSAgICB9Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBOVUxMOwotfQotCi0vLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVm
ZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMg
dGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSAKLS8vIHBy
b3h5IHJlZmVyZW5jZXMgc3RpbGwgZXhpc3QuIElmIHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMg
dG8gemVybywKLS8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0IGEgbmV3
IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcKLS8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUZh
Y2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0rKzsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID4gMCkKLSAgICAgICAgICAgICAgICBtRmFj
ZVByb3h5UmVmc1tpXS0tOwotCi0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZUN1YmVN
YXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
WzBdW2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0K
LUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKLXsK
LSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1h
dCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7Ci19Ci0KLUQzREZPUk1BVCBUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
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
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
LSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQotICAgIHsKLSAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFS
RVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8
fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFpc01pcG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFs
c28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBs
ZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAw
IHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dFdpZHRoKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0
aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlXVswXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3Jt
YXQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAo
aXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwot
Ci0gICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2Ug
PCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9
IHE7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNl
XVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBs
ZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElz
Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVy
biBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0K
LQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZv
cm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TkdMRSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQp
OwotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZh
Y2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1
cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAg
ICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShz
dXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQot
ewotICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAg
ICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2Ug
KmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAgaWYgKGlt
YWdlLT5pc0RpcnR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVj
dChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpICE9IDApCi0gICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJh
eVswXVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVs
cyhzaXplLCAwKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKLQotICAgICAgICBpZiAo
bVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxz
OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFn
ZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4
LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNl
dEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0pOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVu
dW0gZmFjZSkKLXsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7Ci0gICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDIpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsKLSAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOwotCi0g
ICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7Ci19Ci0KLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUp
Ci17Ci0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZp
bmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0
b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLQotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
cmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJl
bmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7
Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhd
W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVy
VGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKLQot
ICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNv
dXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChz
b3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkp
OwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRv
bSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAg
ICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KDAsIGhlaWdodCwg
bUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7Ci0KLSAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VS
ZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1Yklt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0KLSAgICBpZiAoeG9mZnNldCArIHdp
ZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlm
ICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUg
dGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVy
YWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQot
ICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29weSgwLCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
IHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdo
dCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVm
dCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9
IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJl
Y3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQot
ICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9m
ZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5nZXRXaWR0aCgpKTsK
LQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJU
YXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0
LCBkZXN0WU9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29s
IHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVz
YWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOwotCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChs
ZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKLSAgICBtSW1tdXRhYmxlID0gdHJ1
ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0g
ICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1h
dCwgc2l6ZSwgc2l6ZSwgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBzaXplID0gc3RkOjptYXgo
MSwgc2l6ZSA+PiAxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGxldmVsID0g
bGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwr
KykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUo
R0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50
IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1
cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQotewotICAgIGlmICghaXNDdWJlQ29tcGxldGUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgp
KQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0
aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFw
IGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0
V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0
Rm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFn
ZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdldFR5
cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOwotICAgICAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsKLQotICAgICAgICAg
ICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwg
bG93ZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh1cHBlciAh
PSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChsb3dlciAhPSBO
VUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1b
aV0ubWFya0NsZWFuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0u
Z2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZSht
SW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2Zd
W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCkpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxv
YWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKCFJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0gICAgaWYgKG1GYWNlUHJveGllc1tm
YWNlXSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJl
bmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi1JRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQot
ewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwotCi0gICAgLy8g
ZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9y
YWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRD
dWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYgKCFtVGV4U3Rv
cmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkp
Ci0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4NCisvLw0KKw0KKy8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRz
IHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3Nlcw0KKy8vIFRleHR1
cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFu
ZCByZWxhdGVkDQorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
My43IHBhZ2UgNjMuDQorDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiDQorDQorI2lu
Y2x1ZGUgPGQzZHg5dGV4Lmg+DQorDQorI2luY2x1ZGUgPGFsZ29yaXRobT4NCisjaW5jbHVkZSA8
aW50cmluLmg+DQorDQorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIg0KKw0KKyNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIg0KKw0KKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIg0KKyNpbmNs
dWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIg0KKyNpbmNsdWRlICJsaWJHTEVTdjIv
RnJhbWVidWZmZXIuaCINCisNCituYW1lc3BhY2UgZ2wNCit7DQordW5zaWduZWQgaW50IFRleHR1
cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOw0KKw0KK3N0YXRpYyBEM0RGT1JN
QVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQ0K
K3sNCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpDQorICAgIHsNCisgICAgICAgIHJl
dHVybiBEM0RGTVRfSU5UWjsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fA0KKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBE
M0RGTVRfRFhUMTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9E
WFQzOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gRDNERk1UX0RYVDU7DQor
ICAgIH0NCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkNCisgICAgew0KKyAgICAgICAg
cmV0dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKHR5cGUg
PT0gR0xfSEFMRl9GTE9BVF9PRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiBEM0RGTVRfQTE2
QjE2RzE2UjE2RjsNCisgICAgfQ0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZ
VEUpDQorICAgIHsNCisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFICYmIGdldENv
bnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHJldHVybiBEM0RGTVRfTDg7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1p
bmFuY2VBbHBoYVRleHR1cmVzKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEQz
REZNVF9BOEw4Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JH
QikNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4Ow0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Ow0KK30NCisNCitzdGF0aWMgYm9vbCBJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpDQorew0KKyAgICBpZiAoZm9ybWF0
ID09IEQzREZNVF9JTlRaKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0K
KyAgICBzd2l0Y2goZm9ybWF0KQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfTDg6DQorICAg
ICAgY2FzZSBEM0RGTVRfQThMODoNCisgICAgICBjYXNlIEQzREZNVF9EWFQxOg0KKyAgICAgIGNh
c2UgRDNERk1UX0RYVDM6DQorICAgICAgY2FzZSBEM0RGTVRfRFhUNToNCisgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoNCisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOg0KKyAgICAgIGNh
c2UgRDNERk1UX0EzMkIzMkczMlIzMkY6DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4g
ZmFsc2U7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQzREZP
Uk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSkNCit7DQor
ICAgIERXT1JEIGQzZHVzYWdlID0gMDsNCisNCisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5U
WikNCisgICAgew0KKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfREVQVEhTVEVOQ0lMOw0K
KyAgICB9DQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRS
ZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRSkpKQ0KKyAgICB7DQorICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQ7DQorICAgIH0NCisgICAgcmV0dXJuIGQzZHVzYWdlOw0KK30NCisNCitJbWFnZTo6SW1h
Z2UoKQ0KK3sNCisgICAgbVdpZHRoID0gMDsgDQorICAgIG1IZWlnaHQgPSAwOw0KKyAgICBtRm9y
bWF0ID0gR0xfTk9ORTsNCisgICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOw0KKw0KKyAgICBt
U3VyZmFjZSA9IE5VTEw7DQorDQorICAgIG1EaXJ0eSA9IGZhbHNlOw0KKw0KKyAgICBtRDNEUG9v
bCA9IEQzRFBPT0xfU1lTVEVNTUVNOw0KKyAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047
DQorfQ0KKw0KK0ltYWdlOjp+SW1hZ2UoKQ0KK3sNCisgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICB7
DQorICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgSW1h
Z2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpDQorew0KKyAgICBpZiAobVdpZHRoICE9
IHdpZHRoIHx8DQorICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fA0KKyAgICAgICAgbUZvcm1h
dCAhPSBmb3JtYXQgfHwNCisgICAgICAgIG1UeXBlICE9IHR5cGUgfHwNCisgICAgICAgIGZvcmNl
UmVsZWFzZSkNCisgICAgew0KKyAgICAgICAgbVdpZHRoID0gd2lkdGg7DQorICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0Ow0KKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsNCisgICAgICAgIG1UeXBl
ID0gdHlwZTsNCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJl
IHVzZWQNCisgICAgICAgIG1EM0RGb3JtYXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUobUZv
cm1hdCwgbVR5cGUpOw0KKw0KKyAgICAgICAgaWYgKG1TdXJmYWNlKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgbVN1cmZhY2UgPSBO
VUxMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCit2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkNCit7
DQorICAgIGlmKG1TdXJmYWNlKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisN
CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOw0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7DQorICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRv
VXNlID0gRDNEUE9PTF9TWVNURU1NRU07DQorICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQg
PSBnZXREM0RGb3JtYXQoKTsNCisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7
IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMNCisNCisgICAg
aWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkNCisgICAgew0KKyAgICAgICAgaW50IGxl
dmVsVG9GZXRjaCA9IDA7DQorICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsN
CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7DQorICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9IDAgfHwgbUhlaWdodCAlIDQg
IT0gMCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgYm9vbCBpc011bHQ0ID0gZmFsc2U7DQor
ICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOw0KKyAgICAgICAgICAgIHdoaWxlICgh
aXNNdWx0NCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJlcXVlc3RXaWR0aCA8
PD0gMTsNCisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsNCisgICAgICAgICAg
ICAgICAgdXBzYW1wbGVDb3VudCsrOw0KKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFdpZHRo
ICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApDQorICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291
bnQ7DQorICAgICAgICB9DQorDQorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgp
LT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNo
ICsgMSwgTlVMTCwgZDNkRm9ybWF0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsNCisNCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsNCisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZhY2UgZmFpbGVk
LiIpOw0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAg
ICAgIH0NCisNCisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0
Y2gsICZuZXdTdXJmYWNlKTsNCisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsNCisgICAg
fQ0KKw0KKyAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7DQorICAgIG1EaXJ0eSA9IGZhbHNlOw0K
KyAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsNCit9DQorDQorSFJFU1VMVCBJbWFnZTo6bG9jayhE
M0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkNCit7DQorICAgIGNy
ZWF0ZVN1cmZhY2UoKTsNCisNCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENB
TEw7DQorDQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0ID0gbVN1
cmZhY2UtPkxvY2tSZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOw0KKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsNCisNCisgICAgICAgIG1EaXJ0eSA9IHRydWU7DQorICAgIH0NCisN
CisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQordm9pZCBJbWFnZTo6dW5sb2NrKCkNCit7DQor
ICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsN
CisgICAgfQ0KK30NCisNCitib29sIEltYWdlOjppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdA0K
K3sgICAgDQorICAgIHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1h
dCgpKTsNCit9DQorDQorRDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdA0KK3sN
CisgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVu
IHJlZGVmaW5lZCBmaXJzdA0KKyAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2Fs
bGVyDQorICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKTsNCisNCisgICAg
cmV0dXJuIG1EM0RGb3JtYXQ7DQorfQ0KKw0KK0lEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6Z2V0
U3VyZmFjZSgpDQorew0KKyAgICBjcmVhdGVTdXJmYWNlKCk7DQorDQorICAgIHJldHVybiBtU3Vy
ZmFjZTsNCit9DQorDQordm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UpDQorew0KKyAgICBpZiAobVN1cmZhY2UpDQorICAgIHsNCisgICAgICAg
IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNl
LCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAgICAgICAgbVN1cmZhY2UtPlJl
bGVhc2UoKTsNCisgICAgfQ0KKw0KKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsNCisgICAgc3Vy
ZmFjZS0+R2V0RGVzYygmZGVzYyk7DQorICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9N
QU5BR0VEKTsNCisNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAgICBtRDNEUG9vbCA9IGRl
c2MuUG9vbDsNCit9DQorDQordm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sNCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZVN1cmZhY2UgPSBnZXRTdXJmYWNlKCk7DQorDQorICAgIGlmIChzb3VyY2VTdXJmYWNlICYmIHNv
dXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpDQorICAgIHsNCisgICAgICAgIFJFQ1QgcmVjdDsN
CisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7DQorICAgICAgICByZWN0LnRvcCA9IHlvZmZz
ZXQ7DQorICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOw0KKyAgICAgICAgcmVj
dC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0Ow0KKw0KKyAgICAgICAgaWYgKG1EM0RQb29sID09
IEQzRFBPT0xfTUFOQUdFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVjdCwg
c291cmNlU3VyZmFjZSwgTlVMTCwgJnJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7DQorICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgICAgIH0NCisgICAgICAgIGVs
c2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVz
dCBiZSBTWVNURU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIA0KKyAgICAgICAgICAg
IFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVjdC50b3B9Ow0KKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJl
Y3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOw0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLy8gU3RvcmUgdGhlIHBpeGVs
IHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0
aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0DQorLy8gaW50byB0aGUgdGFy
Z2V0IHBpeGVsIHJlY3RhbmdsZS4NCit2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUsDQorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICppbnB1dCkNCit7DQorICAgIFJFQ1QgbG9ja1JlY3QgPQ0KKyAgICB7DQorICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LA0KKyAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVp
Z2h0DQorICAgIH07DQorDQorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsNCisgICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7DQorICAgIGlmIChGQUlMRUQocmVz
dWx0KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkg
aW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50KTsNCisNCisgICAgc3dpdGNoICh0eXBlKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOg0KKyAgICAgICAgc3dpdGNoIChtRm9ybWF0KQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGFTU0UyKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOg0KKyAgICAgICAgICAg
IGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsNCisg
ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6DQor
ICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09
IEQzREZNVF9BOEw4KTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgY2FzZSBHTF9S
R0I6DQorICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJy
ZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX1JHQkE6DQorICAgICAgICAgICAgaWYgKHN1cHBvcnRz
U1NFMigpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURh
dGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
Og0KKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0K
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
YnJlYWs7DQorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToNCisgICAgICAgIHN3
aXRjaCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0I6DQorICAg
ICAgICAgICAgbG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoNCisgICAgICAgIHN3aXRj
aCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAg
ICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToNCisgICAgICAgIHN3aXRj
aCAobUZvcm1hdCkNCisgICAgICAgIHsNCisgICAgICAgICAgY2FzZSBHTF9SR0JBOg0KKyAgICAg
ICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFr
Ow0KKyAgICAgIGNhc2UgR0xfRkxPQVQ6DQorICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpDQorICAg
ICAgICB7DQorICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdC
QSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRA0KKyAgICAgICAg
ICBjYXNlIEdMX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0K
KyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToNCisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7
DQorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOg0KKyAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICBjYXNlIEdMX1JHQjoNCisgICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCQToNCisgICAgICAgICAg
ICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQor
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoNCisgICAgICAgIHN3aXRjaCAobUZvcm1hdCkN
CisgICAgICAgIHsNCisgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0
byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNEDQorICAg
ICAgICAgIGNhc2UgR0xfQUxQSEE6DQorICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToNCisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOw0KKyAgICAg
ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToNCisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAg
ICAgYnJlYWs7DQorICAgICAgICAgIGNhc2UgR0xfUkdCOg0KKyAgICAgICAgICAgIGxvYWRSR0JI
YWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgIGNhc2Ug
R0xfUkdCQToNCisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsNCisgICAg
ICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7DQor
ICAgIH0NCisNCisgICAgdW5sb2NrKCk7DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorICAgIA0KKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOw0KKyAgICBfX20xMjhp
IHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKw0KKyAgICAgICAgaW50IHg7
DQorICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZA0KKyAgICAgICAgZm9yICh4
ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAweEYpICE9IDAg
JiYgeCA8IHdpZHRoKTsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9DQor
DQorICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJl
dF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7DQorICAgICAgICAgICAgLy8gSW50
ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5dGUgdG8gemVybw0K
KyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291
cmNlRGF0YSk7DQorICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0
LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvDQorICAgICAgICAgICAgX19tMTI4aSBsbyA9
IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQorICAgICAgICAgICAg
X19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7DQor
DQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+
KCZkZXN0W3hdKSwgbG8pOw0KKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJl
dF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7DQorICAgICAgICB9DQorDQorICAg
ICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcg0KKyAgICAgICAgZm9yICg7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQor
dm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0K
K3sNCisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7DQorICAgIGZsb2F0ICpkZXN0ID0g
TlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0K
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEFs
cGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQg
KmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0K
KyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gMDsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOw0KKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBi
b29sIG5hdGl2ZSkgY29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7DQor
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7DQorDQorICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5h
dGlvbiBmb3JtYXQNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVt4XTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOw0K
KyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCk7DQorICAg
ICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3hdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEu
MGY7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBzaG9y
dCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
DQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbeF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAw
OyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCBy
ZXByZXNlbnRhdGlvbiBvZiAxDQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0
aXZlKSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsN
CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsNCisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGlu
YXRpb24gZm9ybWF0DQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlWzIqeCswXTsNCisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIq
eCsxXTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAyKTsNCisgICAg
ICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsNCisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOw0KKw0KKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsy
KngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07DQorICAgICAgICB9DQorICAgIH0NCit9
DQorDQordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0KKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07DQorICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlWzIqeCswXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbMip4KzBdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngr
MV07DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRl
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4ICogMyArIDJdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBd
Ow0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7DQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1
bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsNCisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2Jh
ICYgMHgwN0UwKSA+PiA5KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEg
JiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQorICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lk
IEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQorICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0KKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQor
DQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsNCisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
c291cmNlW3ggKiAzICsgMF07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
W3ggKiAzICsgMV07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAz
ICsgMl07DQorICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsNCisgICAgICAgIH0N
CisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeCAqIDMgKyAxXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDENCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIEltYWdlOjps
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IE5VTEw7DQorICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZm
MDBmZik7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspDQorICAgIHsN
CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsNCisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsNCisgICAg
ICAgIGludCB4ID0gMDsNCisNCisgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVk
DQorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0
W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgIHsNCisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0W3hd
ID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsN
CisgICAgICAgIH0NCisNCisgICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1X3Np
MTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsNCisgICAg
ICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UNCisgICAgICAg
ICAgICBfX20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rfc2kxMjgoYnJNYXNrLCBzb3Vy
Y2VEYXRhKTsNCisgICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByDQorICAgICAgICAgICAg
X19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7
DQorICAgICAgICAgICAgLy8gU3dhcCBiIGFuZCByDQorICAgICAgICAgICAgX19tMTI4aSBiclN3
YXBwZWQgPSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25l
bnRzLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsN
CisgICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMs
IGJyU3dhcHBlZCk7DQorICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nh
c3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0KTsNCisgICAgICAgIH0NCisNCisgICAgICAg
IC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzDQorICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2Vb
eF07DQorICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZm
KSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QNCit7DQor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsNCisgICAgdW5zaWduZWQgaW50
ICpkZXN0ID0gTlVMTDsNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisg
ICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOw0K
Kw0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOw0KKyAgICAgICAgICAg
IGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYw
MGZmMDApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgSW1hZ2U6OmxvYWRSR0JB
NDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdA0KK3sNCisgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7DQorICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOw0K
Kw0KKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQ0KKyAgICB7DQorICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsNCisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsNCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOw0K
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAo
KHJnYmEgJiAweDAwRjApID4+IDQpOw0KKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOw0KKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEYwMDApID4+IDEyKTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAw
eDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsNCisgICAgICAgIH0NCisgICAg
fQ0KK30NCisNCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QNCit7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOw0KKyAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7DQorICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7DQorICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsNCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChy
Z2JhICYgMHgwN0MwKSA+PiA4KTsNCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJn
YmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7DQorICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7DQorICAgICAg
ICB9DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QNCit7DQorICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOw0K
KyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7DQorDQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspDQorICAgIHsNCisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOw0KKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7DQor
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsNCisgICAgfQ0KK30NCisN
Cit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0DQorew0KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykNCisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
Ow0KKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsNCisgICAgfQ0KK30N
CisNCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0DQorew0KKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOw0KKyAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsNCisNCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykN
CisgICAgew0KKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOw0KKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOw0KKyAgICAgICAgbWVt
Y3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7DQorICAgIH0NCit9DQorDQordm9pZCBJbWFnZTo6
bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICppbnB1dCkgew0KKyAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7DQorICAg
IEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsNCisNCisgICAgUkVDVCBsb2NrUmVjdCA9IHsNCisg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsDQorICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZz
ZXQgKyBoZWlnaHQNCisgICAgfTsNCisNCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOw0KKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsNCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAg
R0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
bUZvcm1hdCk7DQorICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0
Y2god2lkdGgsIG1Gb3JtYXQpOw0KKyAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0
Y2g7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQ0KKyAgICB7DQorICAgICAg
ICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCks
ICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsNCisg
ICAgfQ0KKw0KKyAgICB1bmxvY2soKTsNCit9DQorDQorLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29w
eVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3Jt
YXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzDQordm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkNCit7DQorICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7DQorICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsNCisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7DQorICAg
IA0KKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJm
YWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZv
cm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZyZW5kZXJUYXJnZXREYXRhLCBOVUxMKTsNCisNCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsNCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQgPSBkZXZpY2Ut
PkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsNCisN
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICB7DQorICAgICAgICBFUlIoIkdldFJlbmRl
clRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsNCisgICAgICAgIHJlbmRlclRhcmdl
dERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsNCisgICAgfQ0KKw0KKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5
ICsgaGVpZ2h0fTsNCisgICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zm
c2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9Ow0KKw0KKyAgICBpZiAoaXNSZW5kZXJhYmxl
Rm9ybWF0KCkpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21T
dXJmYWNlKGdldFN1cmZhY2UoKSwgTlVMTCwgJmRlc3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBO
VUxMLCAmc291cmNlUmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsNCisgICAgICAgIA0KKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEVSUigiQ29w
eWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOw0KKyAgICAgICAgICAgIHJlbmRl
clRhcmdldERhdGEtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAg
ICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9Ow0KKyAgICAgICAgcmVzdWx0ID0g
cmVuZGVyVGFyZ2V0RGF0YS0+TG9ja1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsN
CisNCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0
IGJlIGludmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2Uo
KTsNCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAg
ICB9DQorDQorICAgICAgICBEM0RMT0NLRURfUkVDVCBkZXN0TG9jayA9IHswfTsNCisgICAgICAg
IHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOw0KKyAgICAgICAgDQorICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGlu
dmFsaWQpLiIpOw0KKyAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsN
CisgICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
aWYgKGRlc3RMb2NrLnBCaXRzICYmIHNvdXJjZUxvY2sucEJpdHMpDQorICAgICAgICB7DQorICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxv
Y2sucEJpdHM7DQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBj
aGFyKilkZXN0TG9jay5wQml0czsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9u
LkZvcm1hdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoNCisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KKyAgICAgICAgICAg
ICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAg
ICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX0E4TDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4
ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107DQorICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNo
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX1I1RzZCNToNCisgICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZv
cm1hdCgpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfTDg6DQorICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspDQorICAgICAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4
ICogMiArIDFdICYgMHhGODsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9
IHJlZCB8IChyZWQgPj4gNSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1Og0KKyAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpDQor
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoNCisg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykNCisgICAg
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0g
JiAweDdDOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAx
KSB8IChyZWQgPj4gNCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BOEw4Og0KKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQ0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBz
b3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeCAqIDIgKyAwXSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAy
ICsgMV0gPj4gNzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsNCisgICAgICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
DQorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor
DQorICAgICAgICB1bmxvY2soKTsNCisgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1Jl
Y3QoKTsNCisgICAgfQ0KKw0KKyAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7DQorDQor
ICAgIG1EaXJ0eSA9IHRydWU7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFn
ZShEV09SRCB1c2FnZSkNCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLA0KKyAgICAgIG1EM0RQb29s
KGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwNCisgICAgICBtVGV4dHVyZVNl
cmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkNCit7DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlOjp+
VGV4dHVyZVN0b3JhZ2UoKQ0KK3sNCit9DQorDQorYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5k
ZXJUYXJnZXQoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0Vf
UkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsNCit9DQorDQorYm9v
bCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QNCit7DQorICAgIHJldHVybiAobUQz
RFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsNCit9DQorDQorRDNEUE9PTCBUZXh0dXJlU3RvcmFn
ZTo6Z2V0UG9vbCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQzRFBvb2w7DQorfQ0KKw0KK0RX
T1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUQz
RFVzYWdlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOw0KK30NCisNCit1
bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgpDQorew0KKyAg
ICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7DQorfQ0KKw0KK1RleHR1cmU6OlRleHR1
cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQ0KK3sNCisgICAgbU1pbkZpbHRlciA9
IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsNCisgICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsN
CisgICAgbVdyYXBTID0gR0xfUkVQRUFUOw0KKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7DQorICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICBtVXNhZ2UgPSBHTF9OT05FOw0KKyAgICAN
CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisNCisgICAgbUltbXV0YWJsZSA9IGZhbHNlOw0K
K30NCisNCitUZXh0dXJlOjp+VGV4dHVyZSgpDQorew0KK30NCisNCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikN
Citib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQ0KK3sNCisgICAgc3dp
dGNoIChmaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJFU1Q6DQorICAgICAgY2Fz
ZSBHTF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOg0KKyAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSOg0KKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6DQor
ICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsNCisgICAgICAg
ICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgfQ0KKyAgICAgIGRlZmF1bHQ6DQorICAgICAg
ICByZXR1cm4gZmFsc2U7DQorICAgIH0NCit9DQorDQorLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nl
c3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBU
ZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikNCit7DQorICAgIHN3aXRjaCAoZmls
dGVyKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9ORUFSRVNUOg0KKyAgICAgIGNhc2UgR0xfTElO
RUFSOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7DQor
ICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikNCiti
b29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQ0KK3sNCisgICAgc3dpdGNoICh3cmFw
KQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6DQorICAgICAgY2FzZSBHTF9DTEFNUF9U
T19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOg0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkNCisgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgIG1XcmFwUyA9IHdyYXA7DQorICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMg
PSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAg
ICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor
fQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2
YWxpZCBlbnVtIHBhcmFtZXRlcikNCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3cmFw
KQ0KK3sNCisgICAgc3dpdGNoICh3cmFwKQ0KKyAgICB7DQorICAgICAgY2FzZSBHTF9SRVBFQVQ6
DQorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOg0KKyAgICAgIGNhc2UgR0xfTUlSUk9SRURf
UkVQRUFUOg0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7DQorICAgICAgICAg
ICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOw0KKyAgICB9DQorfQ0KKw0KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpDQorYm9vbCBUZXh0
dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpDQorew0KKyAgICBzd2l0Y2ggKHVzYWdlKQ0KKyAg
ICB7DQorICAgICAgY2FzZSBHTF9OT05FOg0KKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRToNCisgICAgICAgIG1Vc2FnZSA9IHVzYWdlOw0KKyAgICAgICAgcmV0dXJu
IHRydWU7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0K
K30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBtTWluRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVyZTo6Z2V0TWFnRmlsdGVyKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtTWFnRmlsdGVyOw0KK30NCisNCitHTGVudW0gVGV4dHVy
ZTo6Z2V0V3JhcFMoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1XcmFwUzsNCit9DQorDQorR0xl
bnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtV3JhcFQ7DQor
fQ0KKw0KK0dMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4g
bVVzYWdlOw0KK30NCisNCit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpDQorew0KKyAgICBpZiAocGl4
ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAg
ICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7DQorICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0
YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOw0K
KyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KK30NCisNCitib29sIFRleHR1
cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkNCit7DQorICAgIGlm
IChwaXhlbHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJu
IHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAq
aW1hZ2UpDQorew0KKyAgICBpZiAocGl4ZWxzICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIGlt
YWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
cGl4ZWxzKTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisNCisgICAg
cmV0dXJuIHRydWU7DQorfQ0KKw0KK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0
VGV4dHVyZSgpDQorew0KKyAgICBpZiAoIWlzU2FtcGxlckNvbXBsZXRlKCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJs
eWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAgaWYgKGdldFN0b3JhZ2UoZmFsc2UpID09IE5V
TEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHVwZGF0
ZVRleHR1cmUoKTsNCisNCisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7DQorfQ0KKw0KK2Jv
b2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QNCit7DQorICAgIHJldHVybiBt
RGlydHlQYXJhbWV0ZXJzOw0KK30NCisNCitib29sIFRleHR1cmU6Omhhc0RpcnR5SW1hZ2VzKCkg
Y29uc3QNCit7DQorICAgIHJldHVybiBtRGlydHlJbWFnZXM7DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTo6cmVzZXREaXJ0eSgpDQorew0KKyAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7DQorICAg
IG1EaXJ0eUltYWdlcyA9IGZhbHNlOw0KK30NCisNCit1bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0
VGV4dHVyZVNlcmlhbCgpDQorew0KKyAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOw0KKyAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKSA6IDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkNCit7DQorICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJl
ID0gZ2V0U3RvcmFnZSh0cnVlKTsNCisgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZTo6aXNJ
bW11dGFibGUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1JbW11dGFibGU7DQorfQ0KKw0KK0dM
aW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KSBjb25zdA0KK3sNCisgICAgaWYgKChpc1BvdzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQpKSB8
fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMNCisgICAgfQ0KKyAg
ICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgd2l0aG91dCBHTF9PRVNf
dGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9UIG1pcG1hcHMuDQorICAgICAgICByZXR1
cm4gMTsNCisgICAgfQ0KK30NCisNCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNp
emVpIHNpemUpIGNvbnN0DQorew0KKyAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6
ZSk7DQorfQ0KKw0KK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QNCit7DQorICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IDogMDsNCit9DQorDQorQmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpDQorew0KKyAgICBDb250
ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOw0KKyAgICByZXR1cm4gY29udGV4dC0+Z2V0Qmxp
dHRlcigpOw0KK30NCisNCitib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFu
YWdlZCkNCit7DQorICAgIGlmIChzb3VyY2UgJiYgZGVzdCkNCisgICAgew0KKyAgICAgICAgSFJF
U1VMVCByZXN1bHQ7DQorDQorICAgICAgICBpZiAoZnJvbU1hbmFnZWQpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdCwgTlVM
TCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsNCisgICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsNCisNCisgICAgICAgICAgICBkaXNwbGF5
LT5lbmRTY2VuZSgpOw0KKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qo
c291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOw0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVy
ZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0
b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBzdXJmYWNl
VGV4dHVyZTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQ0KKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChS
ZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQ0KK3sNCisgICAgbVRleHR1cmUgPSBO
VUxMOw0KKyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBo
YW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAg
ICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApDQorICAgIHsNCisgICAgICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgp
LCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsNCisg
ICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCitUZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCgpDQorew0KKyAgICBp
ZiAobVRleHR1cmUpDQorICAgIHsNCisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7DQorICAg
IH0NCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5
ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQ0KK3sNCisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOw0KKw0KKyAgICBpZiAobVRleHR1cmUp
DQorICAgIHsNCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsNCit9DQorDQorSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0DQorew0K
KyAgICByZXR1cm4gbVRleHR1cmU7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QNCit7DQorICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK30NCisNCitUZXh0dXJlMkQ6OlRleHR1cmUy
RChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkNCit7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsN
CisgICAgbVN1cmZhY2UgPSBOVUxMOw0KKyAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7DQor
ICAgIG1Qcm94eVJlZnMgPSAwOw0KK30NCisNCitUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQ0KK3sN
CisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOw0KKw0KKyAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7DQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsNCisgICAgDQorICAgIGlmIChtU3VyZmFjZSkN
CisgICAgew0KKyAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAg
ICAgIG1TdXJmYWNlID0gTlVMTDsNCisgICAgfQ0KK30NCisNCisvLyBXZSBuZWVkIHRvIG1haW50
YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyANCisv
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8g
dXNlIGEgcG9pbnRlciANCisvLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVl
biBkZWxldGVkLg0KK3ZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQ0KK3sNCisgICAgbVByb3h5UmVmcysrOw0KK30NCisNCit2b2lkIFRleHR1cmUy
RDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpDQorew0KKyAgICBpZiAo
bVByb3h5UmVmcyA+IDApDQorICAgICAgICBtUHJveHlSZWZzLS07DQorDQorICAgIGlmIChtUHJv
eHlSZWZzID09IDApDQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7DQorfQ0KKw0K
K0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gR0xf
VEVYVFVSRV8yRDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxl
dmVsKSBjb25zdA0KK3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKQ0KKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
Ow0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xzaXplaSBUZXh0dXJl
MkQ6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VB
cnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiAwOw0K
K30NCisNCitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCk7DQor
ICAgIGVsc2UNCisgICAgICAgIHJldHVybiBHTF9OT05FOw0KK30NCisNCitEM0RGT1JNQVQgVGV4
dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICBy
ZXR1cm4gRDNERk1UX1VOS05PV047DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIHR5cGUpDQorew0KKyAgICByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAg
Ym9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRl
ZmluZWQpDQorICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgbUlt
YWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7DQorICAgICAgICB9DQorDQorICAgICAgICBkZWxldGUg
bVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFn
ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cykNCit7DQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7DQorDQorICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OmJpbmRUZXhJ
bWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpDQorew0KKyAgICByZWxlYXNlVGV4SW1hZ2UoKTsN
CisNCisgICAgR0xlbnVtIGZvcm1hdDsNCisNCisgICAgc3dpdGNoKHN1cmZhY2UtPmdldEZvcm1h
dCgpKQ0KKyAgICB7DQorICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6DQorICAgICAgICBmb3Jt
YXQgPSBHTF9SR0JBOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6DQorICAgICAgICBmb3JtYXQgPSBHTF9SR0I7DQorICAgICAgICBicmVhazsNCisgICAgICBk
ZWZhdWx0Og0KKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAg
ICB9DQorDQorICAgIG1JbWFnZUFycmF5WzBdLnJlZGVmaW5lKGZvcm1hdCwgc3VyZmFjZS0+Z2V0
V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0K
Kw0KKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpKTsNCisNCisgICAgbURp
cnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgbVN1cmZhY2UgPSBzdXJmYWNlOw0KKyAgICBtU3VyZmFj
ZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOw0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6cmVsZWFz
ZVRleEltYWdlKCkNCit7DQorICAgIGlmIChtU3VyZmFjZSkNCisgICAgew0KKyAgICAgICAgbVN1
cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsNCisgICAgICAgIG1TdXJmYWNlID0gTlVMTDsN
CisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBtSW1hZ2VB
cnJheVtpXS5yZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsN
CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c2V0Q29tcHJlc3Nl
ZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURf
QllURSk7DQorDQorICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBp
eGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpjb21t
aXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkNCit7DQorICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOw0KKw0KKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50
KCkpDQorICAgIHsNCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisgICAgICAgIGlmIChkZXN0TGV2
ZWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5
W2xldmVsXTsNCisgICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZl
bC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAg
IH0NCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJl
Y3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOw0KKyAgICB9DQorfQ0K
Kw0KK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sN
CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2
ZWxdKSkNCisgICAgew0KKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7DQorICAgIH0NCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OmNvcHlJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIHJlZGVmaW5lSW1hZ2UobGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7DQorICAgDQorICAg
IGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCByZW5kZXJUYXJnZXQpOw0KKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0K
KyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9y
YWdlLT5pc1JlbmRlclRhcmdldCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0ubWFya0NsZWFuKCk7DQorDQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBo
ZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBSRUNUIHNvdXJjZVJlY3Q7DQorICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsN
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOw0KKyAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0geTsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisNCisgICAgICAg
ICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7
DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQ0KK3sNCisgICAgaWYg
KHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsNCisgICAgfQ0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KTsNCisNCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICB9DQorDQorICAgIGlmICghbUltYWdlQXJyYXlb
bGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxl
ckNvbXBsZXRlKCkpKQ0KKyAgICB7DQorICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOw0KKyAg
ICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisg
ICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgp
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICB1cGRhdGVUZXh0dXJlKCk7DQorDQorICAgICAg
ICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgUkVD
VCBzb3VyY2VSZWN0Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7DQorICAgICAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsNCisgICAgICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHk7DQorICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0
Ow0KKw0KKw0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3Jh
Z2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorDQorICAgICAgICAgICAgaWYgKGRlc3QpDQor
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVy
VGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwg
eW9mZnNldCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQ0KK3sN
CisgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsN
CisgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOw0KKyAg
ICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlw
ZSk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdl
LCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2Ug
PSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBo
ZWlnaHQpOw0KKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsNCisNCisgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdHJ1ZSk7DQor
ICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOw0KKyAgICAgICAgaGVpZ2h0
ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEpOw0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxl
dmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdM
X05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICB9DQorDQorICAgIGlm
IChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
bGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7DQorICAg
ICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBs
aW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4
NS4NCitib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAg
R0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7DQorDQorICAgIGlmICh3aWR0aCA8
PSAwIHx8IGhlaWdodCA8PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAg
IH0NCisNCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7DQorDQorICAgIHN3aXRjaCAobU1p
bkZpbHRlcikNCisgICAgew0KKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoNCisgICAgICBjYXNlIEdM
X0xJTkVBUjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsNCisgICAgICAgIGJyZWFrOw0K
KyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDoNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVB
UjoNCisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOg0KKyAgICAgICAgbWlwbWFw
cGluZyA9IHRydWU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOw0KKyAgICB9DQorDQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxP
QVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8DQor
ICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0KKyAgICB7DQorICAg
ICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05F
QVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkNCisgICAg
ICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgYm9vbCBucG90U3VwcG9ydCA9IGdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJU
ZXh0dXJlKCk7DQorDQorICAgIGlmICghbnBvdFN1cHBvcnQpDQorICAgIHsNCisgICAgICAgIGlm
ICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fA0K
KyAgICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Miho
ZWlnaHQpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICB9DQorICAgIH0NCisNCisgICAgaWYgKG1pcG1hcHBpbmcpDQorICAgIHsNCisgICAgICAgIGlm
ICghbnBvdFN1cHBvcnQpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKCFpc1BvdzIod2lk
dGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBp
ZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0K
Ky8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuDQorYm9vbCBUZXh0dXJlMkQ6OmlzTWlw
bWFwQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsN
CisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgd2lkdGggPSBt
SW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOw0KKyAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFy
cmF5WzBdLmdldEhlaWdodCgpOw0KKw0KKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIGludCBx
ID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7DQorDQorICAgIGZvciAoaW50IGxldmVs
ID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgew0KKyAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAg
ICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXS5n
ZXRUeXBlKCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxd
LmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpDQorICAgICAgICB7
DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IHJldHVybiB0cnVlOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOw0KK30NCisNCitib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZl
bCkgY29uc3QNCit7DQorICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCkpOw0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdA0KK3sNCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0
b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOw0KK30NCisNCisvLyBDb25zdHJ1Y3RzIGEg
RGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzDQordm9p
ZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQ0KK3sNCisgICAgR0xzaXplaSB3aWR0aCA9IG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJy
YXlbMF0uZ2V0SGVpZ2h0KCk7DQorICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQpOw0KKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0
RDNERm9ybWF0KCk7DQorICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgbVVzYWdlLCBmYWxzZSk7DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHdpZHRoLCBoZWlnaHQpOw0KKyAgICANCisgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQo
KSkNCisgICAgew0KKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgICAg
ICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFn
ZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsNCit9DQorDQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVRl
eHR1cmUoKQ0KK3sNCisgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsNCisNCisgICAgZm9y
IChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgew0KKyAgICAg
ICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsNCisNCisgICAgICAgIGlmIChp
bWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0SGVpZ2h0KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dHVy
ZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQ0KK3sNCisgICAgVGV4dHVyZVN0b3JhZ2UyRCAq
bmV3VGV4U3RvcmFnZSA9IE5VTEw7DQorDQorICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkNCisgICAgew0KKyAg
ICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7DQorICAgICAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOw0KKyAgICAgICAg
R0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7DQorICAgICAgICBE
M0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgICAg
ICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdo
dCk7DQorDQorICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChpKTsNCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdU
ZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7DQorDQorICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkNCisgICAgICAgICAgICAgICAgeyAgIA0KKyAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3
VGV4U3RvcmFnZTsNCisgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxl
YXNlKCk7DQorICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7DQor
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAg
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJl
bGVhc2UoKTsNCisgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7DQorDQorICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQ0K
K3sNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQ0K
KyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8
fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAgICB1
bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSwg
bUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsNCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDE7IGkgPD0gcTsgaSsrKQ0KKyAgICB7DQorICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFn
ZUFycmF5WzBdLmdldEZvcm1hdCgpLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksDQor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSk7DQorICAg
IH0NCisNCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBp
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpIC0gMSk7DQorICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsNCisN
CisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIs
IGxvd2VyKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxv
d2VyLT5SZWxlYXNlKCk7DQorDQorICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFu
KCk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZy
b21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdl
QXJyYXlbaSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAw
KSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9h
ZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgIH0NCisgICAgfQ0K
K30NCisNCitSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQpDQorew0KKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAq
KU5VTEwpOw0KKyAgICB9DQorDQorICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQ0K
KyAgICB7DQorICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsNCisgICAgfQ0KKw0K
KyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7
DQorDQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisg
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IE5VTEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKyAgICANCisgICAgLy8g
ZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQ0KKyAgICBpZiAoaXNEZXB0aCgwKSkN
CisgICAgew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgcmV0dXJuIG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7DQorfQ0KKw0KKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4NCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UNCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xl
bnVtIHRhcmdldCkNCit7DQorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7DQor
DQorICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQNCisgICAg
aWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIE5V
TEw7DQorICAgIH0NCisNCisgICAgdXBkYXRlVGV4dHVyZSgpOw0KKw0KKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhY3R1YWxseSBhIGRlcHRoIHRleHR1cmUNCisgICAgaWYgKCFpc0RlcHRoKDApKQ0K
KyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsNCit9DQorDQorVGV4dHVyZVN0b3JhZ2UgKlRleHR1
cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
KQ0KKyAgICB7DQorICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxz
ZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0N
CisgICAgfQ0KKw0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK1RleHR1cmVTdG9y
YWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkNCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2Fn
ZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1
YmVTZXJpYWxzKCkpDQorew0KKyAgICBtVGV4dHVyZSA9IE5VTEw7DQorICAgIC8vIGlmIHRoZSBz
aXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxl
dGUgdGV4dHVyZQ0KKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBk
M2QgdGV4dHVyZSBjcmVhdGlvbg0KKyAgICBpZiAoc2l6ZSA+IDApDQorICAgIHsNCisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOw0KKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywgZ2V0VXNh
Z2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7DQorDQorICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
DQorICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7DQorICAgICAgICB9DQorICAg
IH0NCit9DQorDQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KCkNCit7DQorICAgIGlmIChtVGV4dHVyZSkNCisgICAgew0KKyAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsNCisgICAgfQ0KK30NCisNCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuDQorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlDQorSURp
cmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2Uo
R0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkNCit7DQorICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlID0gTlVMTDsNCisNCisgICAgaWYgKG1UZXh0dXJlKQ0KKyAgICB7DQorICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShlczJkeDo6Q29u
dmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOw0KKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gc3VyZmFjZTsN
Cit9DQorDQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6Omdl
dEJhc2VUZXh0dXJlKCkgY29uc3QNCit7DQorICAgIHJldHVybiBtVGV4dHVyZTsNCit9DQorDQor
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsICsgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleCh0YXJnZXQpOw0KK30NCisNCitUZXh0
dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpDQorew0K
KyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQ0KKyAgICB7DQorICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOw0KKyAgICAgICAgbUZh
Y2VQcm94eVJlZnNbaV0gPSAwOw0KKyAgICB9DQorfQ0KKw0KK1RleHR1cmVDdWJlTWFwOjp+VGV4
dHVyZUN1YmVNYXAoKQ0KK3sNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspDQorICAg
IHsNCisgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7DQorfQ0KKw0KKy8vIFdl
IG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMg
YWN0aW5nIGFzIA0KKy8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4
dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSANCisvLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4
aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sDQorLy8gd2Ugc2V0IG91
ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2lu
Zw0KKy8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4NCit2b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQ
cm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQ0KK3sNCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0g
cHJveHkpDQorICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0rKzsNCisgICAgfQ0KK30NCisN
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkNCit7DQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQ0KKyAgICB7DQorICAg
ICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApDQorICAgICAgICAgICAgICAgIG1GYWNlUHJv
eHlSZWZzW2ldLS07DQorDQorICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDAp
DQorICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7DQorICAgICAgICB9DQor
ICAgIH0NCit9DQorDQorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdA0K
K3sNCisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7DQorfQ0KKw0KK0dMc2l6ZWkgVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdA0K
K3sNCisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQ0K
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
V2lkdGgoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0dMc2l6ZWkg
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29u
c3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxd
LmdldEhlaWdodCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQorR0xl
bnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QNCit7DQorICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykNCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFy
Z2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gR0xf
Tk9ORTsNCit9DQorDQorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0DQorew0KKyAgICBpZiAobGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpDQorICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXREM0RGb3JtYXQoKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpDQorew0KKyAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDEsIGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAg
c2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5l
Z1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpDQorew0KKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsNCit9DQorDQordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisgICAgc2V0SW1hZ2UoNSwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
Ow0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAg
IHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHTF9VTlNJR05FRF9CWVRFKTsNCisNCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZl
bF0pOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb21taXRSZWN0KGludCBmYWNlLCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpDQorew0KKyAgICBBU1NFUlQobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
LmdldFN1cmZhY2UoKSAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgp
KQ0KKyAgICB7DQorICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExldmVsID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAr
IGZhY2UsIGxldmVsKTsNCisgICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVMTCk7DQorDQor
ICAgICAgICBpZiAoZGVzdExldmVsICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAg
SW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsNCisgICAgICAgICAgICBp
bWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCit2b2lk
IFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykNCit7DQorICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisg
ICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisgICAgfQ0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQ0KK3sNCisg
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXSkpDQorICAgIHsNCisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsNCisg
ICAgfQ0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSBtYXAgc2FtcGxpbmcgY29tcGxldGVuZXNz
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdlIDg2Lg0KK2Jvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QNCit7DQorICAgIGludCBzaXplID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsNCisNCisgICAgYm9vbCBtaXBtYXBwaW5nOw0K
Kw0KKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpDQorICAgIHsNCisgICAgICBjYXNlIEdMX05FQVJF
U1Q6DQorICAgICAgY2FzZSBHTF9MSU5FQVI6DQorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7
DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6DQorICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6DQorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVB
UjoNCisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAg
ZGVmYXVsdDoNCisgICAgICAgIFVOUkVBQ0hBQkxFKCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7
DQorICAgIH0NCisNCisgICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fA0KKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQ0KKyAgICB7DQor
ICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdM
X05FQVJFU1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0N
CisNCisgICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpDQorICAgIHsNCisgICAgICAgIGlmIChnZXRXcmFwUygpICE9IEdMX0NM
QU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBp
bmcpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0K
KyAgICB9DQorDQorICAgIGlmICghbWlwbWFwcGluZykNCisgICAgew0KKyAgICAgICAgaWYgKCFp
c0N1YmVDb21wbGV0ZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
CisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghaXNN
aXBtYXBDdWJlQ29tcGxldGUoKSkgICAvLyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgp
DQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCisvLyBUZXN0cyBmb3IgY3ViZSB0ZXh0
dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2Ug
ODEuDQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25zdA0KK3sNCisg
ICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVsw
XVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAgIGlmIChtSW1h
Z2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCkgfHwNCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1J
bWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8DQorICAgICAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkgfHwN
CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0VHlwZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdA0KK3sNCisgICAg
aWYgKGlzSW1tdXRhYmxlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9
DQorDQorICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICB9DQorDQorICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCk7DQorDQorICAgIGludCBxID0gbG9nMihzaXplKTsNCisNCisgICAgZm9yIChp
bnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgIHsNCisgICAgICAgIGZvciAoaW50
IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5
WzBdWzBdLmdldEZvcm1hdCgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0
V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorICAgIH0NCisNCisgICAgcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QNCit7DQor
ICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkp
Ow0KK30NCisNCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
VGV4dHVyZSgpIGNvbnN0DQorew0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7DQorfQ0KKw0KKy8vIENvbnN0cnVjdHMgYSBEaXJl
Y3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVy
bnMgYW4gZXhpc3Rpbmcgb25lDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgp
DQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOw0K
KyAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsNCisgICAgRDNERk9S
TUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOw0KKyAgICBEV09S
RCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOw0KKw0K
KyAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOw0KKw0KKyAgICBp
ZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQ0KKyAgICB7DQorICAgICAgICBpbnQgbGV2ZWxz
ID0gbGV2ZWxDb3VudCgpOw0KKw0KKyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2
OyBmYWNlKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsNCisgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1
cmZhY2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVUZXh0
dXJlKCkNCit7DQorICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAg
ICB7DQorICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOw0KKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykNCisgICAgICAgIHsNCisgICAg
ICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOw0KKw0KKyAg
ICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCks
IGltYWdlLT5nZXRIZWlnaHQoKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9
DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpDQor
ew0KKyAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOw0KKw0K
KyAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQ0KKyAgICB7DQorICAg
ICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOw0KKyAgICAg
ICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7DQorICAgICAgICBEM0RG
T1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7DQorICAgICAg
ICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOw0KKw0KKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsN
CisNCisgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7DQorICAgICAgICAgICAgZm9yIChpbnQg
ZiA9IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOw0K
KyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
LCBpKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRl
c3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkNCisgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7DQorICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOw0KKyAgICAgICAg
ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFz
ZSgpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAg
ICB9DQorDQorICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsNCisgICAgbVRleFN0b3JhZ2UgPSBuZXdU
ZXhTdG9yYWdlOw0KKw0KKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KK30NCisNCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykNCit7DQorICAgIHJlZGVmaW5l
SW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsNCisN
CisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VB
cnJheVtmYWNlSW5kZXhdW2xldmVsXSk7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBUZXh0dXJlQ3Vi
ZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQ0KK3sNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDEpOw0KKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kg
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7DQorICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSAzKTsNCisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOw0KKyAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gNSk7DQorDQorICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOw0KK30NCisNCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmlu
ZUltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQ0KK3sNCisgICAgYm9vbCByZWRlZmluZWQg
PSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0eXBlLCBmYWxzZSk7DQorDQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiByZWRlZmluZWQpDQor
ICAgIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgZm9yIChpbnQgZiA9
IDA7IGYgPCA2OyBmKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS5tYXJrRGlydHkoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQor
ICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7DQorICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
DQorDQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsNCisNCisgICAgaWYgKCFyZW5k
ZXJUYXJnZXQpDQorICAgIHsNCisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBy
ZW5kZXIgdGFyZ2V0LiIpOw0KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
Ow0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFy
Z2V0KTsNCisgICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOw0KKw0KKyAgICBpZiAoIW1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQ0KKyAgICB7DQorICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHJlbmRlclRhcmdldCk7DQorICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOw0KKyAgICB9
DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLm1hcmtDbGVhbigpOw0KKw0KKyAgICAgICAgQVNTRVJU
KHdpZHRoID09IGhlaWdodCk7DQorDQorICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwg
bGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsN
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4Ow0KKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Ow0K
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsNCisNCisgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3Vy
ZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAgICAgICBpZiAoZGVzdCkNCisgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQs
IHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7DQorICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg
cmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7DQorfQ0KKw0KK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
cHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpDQorew0KKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7DQorDQorICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQ0KKyAgICB7
DQorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7DQorICAgIH0NCisNCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCk7DQorDQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQ0KKyAgICB7DQorICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsNCisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgfQ0KKw0KKyAgICB1bnNpZ25lZCBpbnQg
ZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7DQorDQorICAgIGlmICghbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAm
JiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpDQorICAgIHsNCisgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsNCisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7DQorICAgIH0NCisgICAgZWxzZQ0K
KyAgICB7DQorICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOw0K
Kw0KKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsNCisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7DQorICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5Ow0KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsNCisNCisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1U
ZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsNCisNCisgICAgICAg
ICAgICBpZiAoZGVzdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdl
dEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsNCisgICAgICAgICAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAg
ICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsNCit9DQorDQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNp
emUpDQorew0KKyAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOw0KKyAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1h
dCk7DQorICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9y
bWF0LCB0eXBlKTsNCisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10
LCBtVXNhZ2UsIGZhbHNlKTsNCisNCisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOw0KKyAgICBtVGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVz
YWdlLCBzaXplKTsNCisgICAgbUltbXV0YWJsZSA9IHRydWU7DQorDQorICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspDQorICAgIHsNCisgICAgICAgIGZvciAo
aW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHNpemUsIHNpemUsIHR5
cGUsIHRydWUpOw0KKyAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1heCgxLCBzaXplID4+IDEpOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykNCisgICAgew0K
KyAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspDQorICAgICAgICB7
DQorICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUs
IDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQor
ICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpDQorICAgIHsNCisgICAgICAgIGludCBs
ZXZlbHMgPSBsZXZlbENvdW50KCk7DQorDQorICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1h
cFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOw0K
KyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZh
Y2Uoc3VyZmFjZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0K
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpDQorew0KKyAgICBpZiAoIWlz
Q3ViZUNvbXBsZXRlKCkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7DQorICAgIH0NCisNCisgICAgaWYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VB
cnJheVswXVswXS5nZXRXaWR0aCgpKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAg
IC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXBy
ZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgcSA9
IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7DQorICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVkZWZpbmVJ
bWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3JtYXQoKSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkg
Pj4gaSwgMSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1h
Z2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgpKTsNCisgICAgICAgIH0NCisg
ICAgfQ0KKw0KKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFy
Z2V0KCkpDQorICAgIHsNCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsg
ZisrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBp
IDw9IHE7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpLTEpOw0KKyAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbG93ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7DQorDQorICAgICAgICAgICAgICAgIGlm
ICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpDQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7
DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwpIHVwcGVyLT5SZWxlYXNlKCk7DQorICAgICAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxM
KSBsb3dlci0+UmVsZWFzZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtp
XS5tYXJrQ2xlYW4oKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAg
ZWxzZQ0KKyAgICB7DQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYr
KykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpDQorICAgICAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsNCisgICAgICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFj
ZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwg
bUltYWdlQXJyYXlbZl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxU
RVJfQk9YLCAwKSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIEVS
UigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7DQorICAgICAg
ICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0Rp
cnR5KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK1JlbmRl
cmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQ0K
K3sNCisgICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAq
KU5VTEwpOw0KKyAgICB9DQorDQorICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRh
cmdldCk7DQorDQorICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkNCisgICAgew0K
KyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7DQorICAgIH0NCisNCisg
ICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsNCit9DQorDQorLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLg0KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQ0KK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQpDQorew0KKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsNCisNCisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMg
Y3JlYXRlZA0KKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICB1cGRhdGVUZXh0dXJlKCk7DQorICAg
IA0KKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgMCk7
DQorfQ0KKw0KK1RleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkNCit7DQorICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdl
dCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQ0KKyAgICB7DQorICAgICAgICBp
ZiAocmVuZGVyVGFyZ2V0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1
cm4gbVRleFN0b3JhZ2U7DQorfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmluZGV4IDE5YTZlYjUuLjgwZTI4OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCkBAIC0xLDQz
MyArMSw0MjcgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDogRGVmaW5lcyB0
aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0v
LyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4
dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVSRV9I
XwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
ZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxkM2Q5
Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBTdXJm
YWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGcmFtZWJ1ZmZl
cjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVu
dGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVk
IGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUgcXVlcmllZCBmcm9tIHRo
ZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9m
IE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBJ
bWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZShHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VS
ZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30KLSAgICB2b2lk
IG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBIUkVTVUxUIGxvY2soRDNETE9D
S0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwotICAgIHZvaWQgdW5sb2Nr
KCk7Ci0KLSAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7
cmV0dXJuIG1XaWR0aDt9Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7cmV0dXJuIG1I
ZWlnaHQ7fQotICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQot
ICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAgYm9vbCBpc0Rp
cnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFs
ZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VB
bHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZENvbXBy
ZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotCi0gICAgdm9pZCBjb3B5
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZSk7Ci0KLSAg
ICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIEdMc2l6ZWkgbVdpZHRoOwotICAgIEdMc2l6
ZWkgbUhlaWdodDsKLSAgICBHTGVudW0gbUZvcm1hdDsKLSAgICBHTGVudW0gbVR5cGU7Ci0KLSAg
ICBib29sIG1EaXJ0eTsKLQotICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9ubHkgYmUg
RDNEUE9PTF9TWVNURU1NRU0gb3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRzIHRvIGJl
IGxvY2thYmxlLgotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKm1TdXJmYWNlOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAg
IHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7Ci0KLSAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICBEM0RQT09MIGdldFBvb2wo
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KSBjb25zdCA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UpOwotCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OwotICAgIGNv
bnN0IEQzRFBPT0wgbUQzRFBvb2w7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVT
ZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVRleHR1cmVTZXJpYWwoKTsKLQot
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOwotfTsKLQotY2xh
c3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpID0gMDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKLQot
ICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwotICAg
IGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVtIHVz
YWdlKTsKLQotICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0
TWFnRmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7Ci0gICAgR0xl
bnVtIGdldFdyYXBUKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBH
TGVudW0gZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RG
b3JtYXQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsK
LQotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
UmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29w
eVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRl
cnMoKSBjb25zdDsKLSAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7Ci0gICAgdm9pZCBy
ZXNldERpcnR5KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAgICB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwotCi0gICAg
Ym9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNP
TVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0
ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJh
cnkgYmVjYXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFn
ZXIuCi0KLSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1
YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLQotICAgIEdMaW50IGNyZWF0aW9uTGV2
ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
ID0gMDsKLQotICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgQmxpdCAq
Z2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFu
YWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBHTGVudW0gbU1hZ0ZpbHRlcjsK
LSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAgYm9vbCBtRGlydHlQ
YXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1EaXJ0eUltYWdlczsK
LQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdl
MkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRl
eHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQg
bGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVu
dW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4dHVy
ZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKLX07Ci0KLWNs
YXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlMkQoKTsKLQotICAgIHZvaWQg
YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBs
ZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQg
Z2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
OwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAg
IHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwot
Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQp
OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKLQot
ICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsKLSAgICB2b2lkIGNvbW1pdFJl
Y3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTJEICptVGV4U3Rv
cmFnZTsKLSAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBzcGVjaWZpYyBp
bnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVm
ZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBw
cm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlz
IHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQg
YSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxs
IGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50
IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVy
YnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgdW5zaWdu
ZWQgaW50IG1Qcm94eVJlZnM7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJU
YXJnZXQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7Ci0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7Ci0KLSAgICBJRGlyZWN0M0RDdWJlVGV4dHVy
ZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRT
ZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0g
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwotCi0gICAg
flRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0gICAgCi0g
ICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5
cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwotCi0gICAgdmly
dHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
Q29tcHJlc3NlZCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygp
OwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1h
cCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKLSAg
ICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdl
KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICptVGV4U3Rv
cmFnZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtl
cHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMg
dGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcg
cG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNp
cmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVy
ZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQg
dG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3Qg
Y2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1G
YWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZzWzZdOwotfTsK
LX0KLQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KKy8vDQorDQorLy8gVGV4dHVyZS5oOiBEZWZpbmVzIHRo
ZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQNCisv
LyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4
dHVyZSBvYmplY3RzIGFuZA0KKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuDQorDQorI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVS
RV9IXw0KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8NCisNCisjaW5jbHVkZSA8dmVjdG9y
Pg0KKw0KKyNkZWZpbmUgR0xfQVBJQ0FMTA0KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4NCisjaW5j
bHVkZSA8ZDNkOS5oPg0KKw0KKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCINCisjaW5jbHVkZSAi
Y29tbW9uL1JlZkNvdW50T2JqZWN0LmgiDQorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaCINCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIg0KKw0KK25hbWVzcGFjZSBl
Z2wNCit7DQorY2xhc3MgU3VyZmFjZTsNCit9DQorDQorbmFtZXNwYWNlIGdsDQorew0KK2NsYXNz
IEJsaXQ7DQorY2xhc3MgRnJhbWVidWZmZXI7DQorDQorZW51bQ0KK3sNCisgICAgLy8gVGhlc2Ug
YXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQNCisgICAgLy8g
VGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2Fwcw0KKyAgICAv
LyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dA0KKyAgICBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsDQorICAgIElNUExFTUVOVEFUSU9OX01BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwNCisNCisgICAgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQ0KK307
DQorDQorY2xhc3MgSW1hZ2UNCit7DQorICBwdWJsaWM6DQorICAgIEltYWdlKCk7DQorICAgIH5J
bWFnZSgpOw0KKw0KKyAgICBib29sIHJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpOw0KKyAg
ICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30NCisgICAgdm9pZCBtYXJrQ2xlYW4o
KSB7bURpcnR5ID0gZmFsc2U7fQ0KKw0KKyAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0Ow0KKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7DQorDQorICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9DQorICAgIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Qge3JldHVybiBtSGVpZ2h0O30NCisgICAgR0xlbnVtIGdldEZvcm1hdCgpIGNv
bnN0IHtyZXR1cm4gbUZvcm1hdDt9DQorICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVy
biBtVHlwZTt9DQorICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYg
bURpcnR5O30NCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsNCisNCisgICAg
dm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7DQorICAg
IHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOw0KKw0KKyAg
ICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwNCisgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsNCisNCisgICAgdm9pZCBsb2Fk
QWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9h
dERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNv
bnN0Ow0KKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxvYWRS
R0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCNTY1RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7DQorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsNCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
DQorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2
b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ow0KKyAgICB2b2lkIGxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7DQorICAgIHZvaWQg
bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LA0KKyAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsNCisgICAgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsN
CisNCisgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihJbWFnZSk7DQorDQorICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOw0KKw0KKyAgICBI
UkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3Qp
Ow0KKyAgICB2b2lkIHVubG9jaygpOw0KKw0KKyAgICBHTHNpemVpIG1XaWR0aDsNCisgICAgR0xz
aXplaSBtSGVpZ2h0Ow0KKyAgICBHTGVudW0gbUZvcm1hdDsNCisgICAgR0xlbnVtIG1UeXBlOw0K
Kw0KKyAgICBib29sIG1EaXJ0eTsNCisNCisgICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4g
b25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVl
ZHMgdG8gYmUgbG9ja2FibGUuDQorICAgIEQzREZPUk1BVCBtRDNERm9ybWF0Ow0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlU3RvcmFn
ZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNh
Z2UpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOw0KKw0KKyAgICBib29sIGlz
UmVuZGVyVGFyZ2V0KCkgY29uc3Q7DQorICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7DQorICAg
IEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0Ow0KKyAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0Ow0K
KyAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ow0KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Qg
PSAwOw0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmVTdG9yYWdlKTsNCisNCisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOw0KKyAgICBjb25zdCBE
M0RQT09MIG1EM0RQb29sOw0KKw0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJp
YWw7DQorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFsKCk7DQorDQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOw0KK307DQorDQor
Y2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdA0KK3sNCisgIHB1YmxpYzoNCisg
ICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOw0KKw0KKyAgICB2aXJ0dWFsIH5UZXh0dXJl
KCk7DQorDQorICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KSA9IDA7DQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkgPSAwOw0KKw0KKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBj
b25zdCA9IDA7DQorDQorICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOw0KKyAg
ICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsNCisgICAgYm9vbCBzZXRXcmFwUyhH
TGVudW0gd3JhcCk7DQorICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOw0KKyAgICBib29s
IHNldFVzYWdlKEdMZW51bSB1c2FnZSk7DQorDQorICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBj
b25zdDsNCisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0Ow0KKyAgICBHTGVudW0gZ2V0
V3JhcFMoKSBjb25zdDsNCisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7DQorICAgIEdMZW51
bSBnZXRVc2FnZSgpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxl
dGUoKSBjb25zdCA9IDA7DQorDQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVy
ZSgpOw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQpID0gMDsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsN
CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsNCisNCisg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsNCisgICAgYm9vbCBoYXNEaXJ0eUlt
YWdlcygpIGNvbnN0Ow0KKyAgICB2b2lkIHJlc2V0RGlydHkoKTsNCisgICAgdW5zaWduZWQgaW50
IGdldFRleHR1cmVTZXJpYWwoKTsNCisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KTsNCisNCisgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0Ow0K
Kw0KKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRp
Y19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3Jl
YXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJl
Z2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4NCisNCisgIHByb3RlY3RlZDoNCisg
ICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKTsNCisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaW1hZ2UpOw0KKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOw0KKyAgICBib29sIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsNCisNCisgICAgR0xpbnQgY3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0Ow0KKyAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ow0KKw0KKyAgICB2aXJ0dWFsIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7DQorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOw0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZSgpID0gMDsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0gMDsN
CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpID0gMDsNCisNCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsNCisNCisgICAgc3Rh
dGljIEJsaXQgKmdldEJsaXR0ZXIoKTsNCisgICAgc3RhdGljIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBi
b29sIGZyb21NYW5hZ2VkKTsNCisNCisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7DQorICAgIEdMZW51
bSBtTWFnRmlsdGVyOw0KKyAgICBHTGVudW0gbVdyYXBTOw0KKyAgICBHTGVudW0gbVdyYXBUOw0K
KyAgICBib29sIG1EaXJ0eVBhcmFtZXRlcnM7DQorICAgIEdMZW51bSBtVXNhZ2U7DQorDQorICAg
IGJvb2wgbURpcnR5SW1hZ2VzOw0KKw0KKyAgICBib29sIG1JbW11dGFibGU7DQorDQorICBwcml2
YXRlOg0KKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7DQorDQorICAgIHZp
cnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsN
Cit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UN
Cit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNE
VGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsNCisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsNCisNCisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOw0KKw0KKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJh
c2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0K
KyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdl
MkQpOw0KKw0KKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVu
c2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOw0KK307DQorDQorY2xhc3MgVGV4dHVyZTJE
IDogcHVibGljIFRleHR1cmUNCit7DQorICBwdWJsaWM6DQorICAgIGV4cGxpY2l0IFRleHR1cmUy
RChHTHVpbnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZTJEKCk7DQorDQorICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorICAgIHZvaWQgcmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOw0KKw0KKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
YXJnZXQoKSBjb25zdDsNCisNCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29u
c3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgRDNERk9STUFU
IGdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNDb21wcmVzc2Vk
KEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25z
dDsNCisNCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdl
KEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdl
Q29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
RnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7DQor
DQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ow0KKyAgICB2aXJ0
dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7DQorICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsNCisNCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJvdGVjdGVkOg0KKyAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEOw0KKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7DQorICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsNCisNCisgIHByaXZhdGU6DQorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOw0KKw0KKyAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsNCisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsNCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUo
KTsNCisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOw0KKyAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsNCisNCisg
ICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7DQorDQorICAgIHZvaWQgcmVkZWZpbmVJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlKTsNCisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7DQorDQorICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107DQorDQorICAgIFRleHR1cmVTdG9yYWdlMkQgKm1UZXhTdG9yYWdlOw0KKyAgICBl
Z2w6OlN1cmZhY2UgKm1TdXJmYWNlOw0KKw0KKyAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJl
ZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLA0K
KyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxs
IG1haW50YWluIGEgYmluZGluZyBwb2ludGVyDQorICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJl
LCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGlu
Zw0KKyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2Ug
dGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYNCisgICAgLy8gdGhlIGNvdW50IGRyb3Bz
IHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVy
Lg0KKyAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5Ow0KKyAgICB1bnNpZ25lZCBp
bnQgbVByb3h5UmVmczsNCit9Ow0KKw0KK2NsYXNzIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQ0KK3sNCisgIHB1YmxpYzoNCisgICAgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6
ZSk7DQorDQorICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOw0KKw0KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7DQorICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBj
b25zdDsNCisNCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0ZToNCisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3ViZU1hcCk7DQorDQorICAgIElEaXJlY3QzREN1
YmVUZXh0dXJlOSAqbVRleHR1cmU7DQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5k
ZXJUYXJnZXRTZXJpYWw7DQorfTsNCisNCitjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlDQorew0KKyAgcHVibGljOg0KKyAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVp
bnQgaWQpOw0KKw0KKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsNCisNCisgICAgdm9pZCBhZGRQcm94
eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsNCisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7DQorDQorICAgIHZpcnR1YWwgR0xlbnVtIGdldFRh
cmdldCgpIGNvbnN0Ow0KKyAgICANCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisgICAgRDNERk9STUFUIGdldEQzREZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7DQorICAgIGJvb2wgaXNDb21w
cmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsNCisNCisgICAgdm9pZCBz
ZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7DQorICAgIHZvaWQgc2V0SW1h
Z2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsNCisgICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHNldEltYWdlUG9z
WihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7DQorICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsNCisNCisgICAgdm9pZCBzZXRDb21wcmVzc2Vk
SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7DQorDQorICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOw0KKyAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOw0KKyAgICB2aXJ0dWFsIHZv
aWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7DQorICAgIHZvaWQgc3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOw0KKw0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsNCisNCisgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOw0KKw0KKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0
UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGZhY2VJbmRleChHTGVudW0gZmFjZSk7DQorDQorICBwcm90ZWN0ZWQ6DQorICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsNCisgICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOw0KKw0KKyAgcHJpdmF0ZToN
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsNCisNCisgICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7DQor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7DQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsN
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7DQorDQorICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsNCisgICAgYm9vbCBpc01p
cG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ow0KKw0KKyAgICB2b2lkIHNldEltYWdlKGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsNCisgICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7DQorICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0
eXBlKTsNCisNCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsNCisNCisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICptVGV4U3RvcmFn
ZTsNCisNCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2Vw
dCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywNCisgICAgLy8gYmVjYXVzZSwgYXMg
dGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcg
cG9pbnRlcg0KKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBj
aXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcNCisgICAgLy8gcG9pbnRlciBo
ZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNl
dCB0byBOVUxMIGlmDQorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBu
b3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4NCisgICAgUmVuZGVyYnVmZmVy
ICptRmFjZVByb3hpZXNbNl07DQorICAgIHVuc2lnbmVkIGludCAqbUZhY2VQcm94eVJlZnNbNl07
DQorfTsNCit9DQorDQogI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmluZGV4IDk1YmMzZmIuLjcw
ZjQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgpAQCAt
MTI4LDEwICsxMjksMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4
RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXQKIAogICAgIGNvbnN0IFZl
cnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0
ZXMoKTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAg
ICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2Vt
YW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0
dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChh
dHRyaWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVx
dWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGlj
IGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4
ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRv
Q1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEMwogdGVtcGxhdGUgPEdMZW51bSBmcm9t
VHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4g
OiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsK
IAogLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZl
cmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0
IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVl
LCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRU
b0Zsb2F0PEdMaW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxl
PEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwg
MTY+IHsgfTsKIAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0
VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAo
aS5lLiAwLzEpCiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmluZGV4
IGVlOGVjYTkuLmZiYTI1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAt
NTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFs
aWRhdGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQv
dHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIGNo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAg
Ly8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVs
b3cpCisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9B
TFBIQToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIGlu
dmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxpZCA8Zm9ybWF0
Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgorICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFs
c2UpOworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJl
c3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQg
KnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXByZXNzZWQgIT0g
dGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQg
IT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAg
ICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQogICAgIHsKLSAg
ICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgw
KSkgfHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+
Z2V0V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAh
PSB0ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBi
b29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xpbgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXBy
ZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVzc2Vk
KQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJl
LT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAm
JiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRX
aWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUg
dmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRjYWxs
IGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9O
T05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQs
IHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTEw
Miw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnMKICAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9O
RSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXND
dWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWws
IGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5z
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1NSwy
MyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTAogICAgICAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAgICAg
ICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9y
bWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVy
ZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVsKTsK
KyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBh
cmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05P
TkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAg
ICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwg
aGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhjdWJl
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJy
b3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0
ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1h
dCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkK
ICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiArMTU2OCw5IEBA
IHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwg
R0xlbnVtIHQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4LT5p
c0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0g
R0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdM
ZW51bSB0CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRV
UkVfQ1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBz
dGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0
NDAsMjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0g
dGFyZ2V0KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+
aXNEZXB0aCgwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1gsIDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVz
c2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+
Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmli
TG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAg
ICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3
ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dyYW0s
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBOVUxMOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFU
VVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVk
KCk7CkBAIC0zMjQxLDYgKzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQogICAgICAgICAgICAg
ICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllf
TEVOR1RIX09FUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNzY2LDEyICszOTQ5
LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6
ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwx
OCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQg
bG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5V
TEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGJ1ZlNpegogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNp
emUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
QEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1
aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQogCiAgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdl
dFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwg
Z2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5h
bWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2NhdGlv
bihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAorICAgICAg
ICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVs
b3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VT
OgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5h
dGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVN
CisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0
cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAgICAgewog
ICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVy
bmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1NCw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9P
RVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyArNTI2
Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFM
Rl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CkBA
IC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQsMjcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0wKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUxNDYs
NiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTAogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVY
VFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBh
bmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90
ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxl
dmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOgorICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5
IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9
IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJE
KQpAQCAtNTQ4NCwxNCArNTc1Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVM
TCkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsgLy8gZXJy
b3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3
ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludAogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8
fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTU1NzgsNyArNTg2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yaXYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5p
Zm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEyMiwxMyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50KiB2KQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9u
LCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIsNyArNjE3NCwx
MyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTg5OCw3
ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnMKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFucwogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQs
IHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAg
JiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uz
RE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0CiAg
ICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxl
bmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmlu
YXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CisKKyAg
ICAgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmxl
bmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWlu
dCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAw
eCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwg
YmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1f
QklOQVJZX0FOR0xFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5VTEwpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3Mo
Y29uc3QgY2hhciAqcHJvY25hbWUpCiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNjQ5OSw3
ICs2OTI0LDggQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0
ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICoKICAgICAgICAgeyJnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKICAgICAgICAgeyJnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgfTsKKyAgICAgICAgeyJnbEdldFBy
b2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7ImdsUHJvZ3JhbUJpbmFyeU9FUyIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3JhbUJpbmFy
eU9FU30sICAgIH07CiAKICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZ2xFeHRl
bnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2ogYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKaW5k
ZXggN2QyYjY0OS4uM2JjODM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpAQCAtNDAxLDYgKzQwMSwxMCBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1C
aW5hcnkuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuXFF1ZXJ5LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00OTEsNiArNDk1LDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJp
bmFyeS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
XFF1ZXJ5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmluZGV4IDdjYTJkOWYuLjdiYjIyNTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKQEAg
LTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKICAgICB9
CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChHTGludCB4LCBHTGludCB5LCBH
TGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAgIFJFQ1QgcmVjdCA9
IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geSAtIGgsCi0gICAgICAgICAg
ICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geX07Ci0gICAg
cmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KEdMaW50
IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQpCi17Ci0gICAgcmV0dXJuIHN1
cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5lIEdMZW51bSBhZGp1c3RXaW5k
aW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5kaW5nID09IEdMX0NXIHx8IHdp
bmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9PSBHTF9DVyA/IEdMX0NDVyA6
IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQogewogICAgIHN0YXRpYyBi
b29sIGNoZWNrZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAppbmRleCA2NTg5ZWIxLi5hN2M2MmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCiAgICAg
fQogfQogCitib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZv
cm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RFUFRI
X1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBz
aW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0LDcgKzMwNSwxMSBAQCBpbnQgQ29tcHV0ZVBpeGVs
U2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNhc2UgR0xfRkxP
QVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMsNTMgKzM0OCw2
IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKICAgICByZXR1
cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpOwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21i
aW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VY
VDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6
Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQg
PT0gR0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBp
bnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpAQCAtNDA3LDYg
KzM3NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xV
TUlOQU5DRTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAg
cmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOwor
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAg
ICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9y
dGVkCiAgICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0VHlwZShHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwogICAg
ICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgY2FzZSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTYzOCw5ICs2
MTIsNiBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2Up
CiB7CiAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZF
X1g7CiAKLSAgICAvLyBNYXAgYSBjdWJlIG1hcCB0ZXh0dXJlIHRhcmdldCB0byB0aGUgY29ycmVz
cG9uZGluZyAgRDNEIHN1cmZhY2UgaW5kZXguIE5vdGUgdGhhdCB0aGUKLSAgICAvLyBZIGZhY2Vz
IGFyZSBzd2FwcGVkIGJlY2F1c2UgdGhlIFkgY29vcmRpbmF0ZSB0byB0aGUgdGV4dHVyZSBsb29r
dXAgaW50cmluc2ljIGZ1bmN0aW9ucwotICAgIC8vIGFyZSBuZWdhdGVkIGluIHRoZSBwaXhlbCBz
aGFkZXIuCiAgICAgc3dpdGNoIChjdWJlRmFjZSkKICAgICB7CiAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKQEAgLTY1MCwxMCArNjIxLDEwIEBAIEQzRENVQkVNQVBf
RkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKICAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9G
QUNFX05FR0FUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVf
WTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOworICAgICAg
ICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgIGZhY2UgPSBE
M0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKQEAgLTc2Nyw2ICs3MzgsNyBAQCBEM0RGT1JNQVQg
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQogewogICAgIHN3aXRjaCAo
Zm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVy
biBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICBjYXNlIEdMX1JHQjVf
QTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OwpAQCAtNzk0LDYgKzc2NiwxMCBAQCBuYW1lc3BhY2UgZHgyZXMKIAogdW5zaWduZWQg
aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQogeworICAgIGlmIChz
dGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgfQogICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1U
X0QyNEZTODoKQEAgLTkwNCw2ICs4ODAsMTAgQEAgdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQz
REZPUk1BVCBjb2xvckZvcm1hdCkKIAogdW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JN
QVQgZGVwdGhGb3JtYXQpCiB7CisgICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZNVF9JTlRaKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDI0OworICAgIH0KICAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0
KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVybiAxNjsKQEAg
LTk2NSw2ICs5NDUsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0
KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJldHVybiAoc3VyZmFjZUZvcm1hdCA9
PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JN
QVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1U
X0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1V
TFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVy
Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiAKIEdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
KyAgICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICB9CiAg
ICAgc3dpdGNoIChmb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDE2OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKaW5kZXgg
ODgyMzhkYy4uY2YyMjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw2ICsxNiw5IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+
CiAKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkND
KCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwogbmFtZXNwYWNlIGdsCiB7
CiAKQEAgLTM2LDkgKzM5LDkgQEAgR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkKIEdMc2l6ZWkgQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKIEdMc2l6
ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJ
c0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUpOwogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIEdM
ZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogCkBAIC03OSw2ICs4Miw4
IEBAIEdMdWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsKIEdMdWludCBH
ZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7CiBib29sIElzRmxvYXQzMkZv
cm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiBib29sIElzRmxvYXQxNkZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1B
VCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQg
c3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUo
RDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlMDcz
N2Q4Li4zNDQzMTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjMxOCw3ICsyMzE4LDIwIEBA
IElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5o
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRl
Y3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTIzMjYsNiArMjMzOSw3
IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRy
YXZlcnNlLmNwcApAQCAtMjMzOCwyMiArMjM1Miw1MiBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlh
Z25vc3RpY3NCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAor
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0
aW9uLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJj
aFN5bWJvbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L1NoYWRlckxhbmcuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91
dGlsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNTdhZmI3Li5hZjI0M2Vi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDYtMjggIE1heCBWdWpvdmljICA8
bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFOR0xF
IHRvIHIxMTcwLCB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKworICAgICAgICBS
ZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpYy5jcHAg
dG8gRGlhZ25vc3RpY0Jhc2UuY3BwLgorICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgdG8gRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwLgorCisgICAgICAgIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBBTkdMRSdzIG5l
dyBwcmVwcm9jZXNzb3IsIHRoZXJlIHdlcmUgdHdvIGZpbGVzIG5hbWVkIERpYWdub3N0aWMuY3Bw
CisgICAgICAgIGluIEFOR0xFIHVuZGVyIGRpZmZlcmVudCBmb2xkZXJzLiBUaGlzIGNhdXNlZCBw
cm9ibGVtcyBvbiB0aGUgUVQgYnVpbGQgd2hlbiB0aGVpciBvYmplY3QKKyAgICAgICAgZmlsZXMs
IGJvdGggbmFtZWQgRGlhZ25vc3RpYy5vLCB0cmllZCB0byBnbyBpbiB0aGUgc2FtZSBmb2xkZXIu
IFJlbmFtaW5nIG9uZSBvZiB0aGVtIHRvCisgICAgICAgIERpYWdub3N0aWNCYXNlLmNwcCBhdm9p
ZHMgdGhpcyBjb25mbGljdC4gVGhlIHNhbWUgc2l0dWF0aW9uIG9jY3VycmVkIHdpdGgKKyAgICAg
ICAgRGlyZWN0aXZlSGFuZGxlci5jcHAuIEkgd2lsbCB0cnkgdG8gZ2V0IHRoZWlyIG5hbWVzIGNo
YW5nZWQgaW4gQU5HTEUgZm9yIGZ1dHVyZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAy
MDEyLTA3LTEwICBLZXZpbiBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
SW5wdXQgdHlwZT1yYW5nZSBpc3N1ZSB3aXRoIGV2ZW50cyBub3QgYmVpbmcgcmFpc2VkIHdoZW4g
dmFsdWUgc2V0IGluIGpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhYjFlNDU5
Li4zZjRkNGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU5MDgsOCArNTkw
OCwyMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZWJ1Zy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCBcCkBAIC01
OTIyLDYgKzU5MzUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwK
QEAgLTU5NDUsNiArNTk1OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCkBAIC01OTU0LDYgKzU5
NjksMjkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlh
Z25vc3RpY3NCYXNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNl
ci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0xleGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKQEAgLTU5NjcsNiArNjAwNSw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9SZW1vdmVUcmVlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1JlbW92ZVRyZWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TZWFyY2hTeW1ib2wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU2VhcmNoU3ltYm9sLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TaGFkZXJMYW5nLmNwcCBcCkBAIC01OTc1LDYgKzYwMTQsMTAgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFi
bGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCkBAIC01OTgyLDggKzYw
MjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdXRpbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMGMxNDAwZi4uMDA2
NmRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTgyLDcgKzM5ODIsMTMgQEAgY29udGFpbnMoREVGSU5F
UywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKSB7CiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9Db21tb24uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFu
dFVuaW9uLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
aCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL0RpYWdub3N0aWNzLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGly
ZWN0aXZlSGFuZGxlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9v
cFVucm9sbC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBc
CkBAIC0zOTk3LDExICs0MDAzLDI0IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JB
UEhJQ1M9MSkgewogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvTU1hcC5oIFwKICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmggXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUHJhZ21hLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCBcCisgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVI
YW5kbGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKKyAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIFwKQEAgLTQw
MTYsMTQgKzQwMzUsMTcgQEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0x
KSB7CiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmggXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1R5cGVzLmggXAotICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdXRpbC5oIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBc
CiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCkBAIC00
MDM2LDEzICs0MDU4LDIxIEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9
MSkgewogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9nbHNsYW5nX2xleC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
Z2xzbGFuZ190YWIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luZm9T
aW5rLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNw
cCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcCBc
CisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBcIAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNw
cCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBcCkBAIC00
MDYwLDEwICs0MDkwLDEyIEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9
MSkgewogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBc
CiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAgXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9U
cmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwu
Y3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5j
cHAgXApAQCAtNDA3NCw2ICs0MTA2LDE3IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0Rf
R1JBUEhJQ1M9MSkgewogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHBzdHJ1Y3QuYyBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbWVtb3J5LmMgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIFwKKyAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
UGFyc2VyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKyAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKKyAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5j
cHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMgXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151520</attachid>
            <date>2012-07-10 13:55:38 -0700</date>
            <delta_ts>2012-07-10 15:33:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039-svn.patch</filename>
            <type>text/plain</type>
            <size>1287240</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDExNjIgQEAKKzIwMTItMDYtMjggIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgor
CisgICAgICAgIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFOR0xFIHRvIHIxMTcwLCB3aXRoIHRoZSBm
b2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKworICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpYy5jcHAgdG8gRGlhZ25vc3RpY0Jhc2UuY3Bw
LgorICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlSGFuZGxlci5jcHAgdG8gRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwLgorCisgICAgICAg
IFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBBTkdMRSdzIG5ldyBwcmVwcm9jZXNzb3IsIHRoZXJl
IHdlcmUgdHdvIGZpbGVzIG5hbWVkIERpYWdub3N0aWMuY3BwCisgICAgICAgIGluIEFOR0xFIHVu
ZGVyIGRpZmZlcmVudCBmb2xkZXJzLiBUaGlzIGNhdXNlZCBwcm9ibGVtcyBvbiB0aGUgUVQgYnVp
bGQgd2hlbiB0aGVpciBvYmplY3QKKyAgICAgICAgZmlsZXMsIGJvdGggbmFtZWQgRGlhZ25vc3Rp
Yy5vLCB0cmllZCB0byBnbyBpbiB0aGUgc2FtZSBmb2xkZXIuIFJlbmFtaW5nIG9uZSBvZiB0aGVt
IHRvCisgICAgICAgIERpYWdub3N0aWNCYXNlLmNwcCBhdm9pZHMgdGhpcyBjb25mbGljdC4gVGhl
IHNhbWUgc2l0dWF0aW9uIG9jY3VycmVkIHdpdGgKKyAgICAgICAgRGlyZWN0aXZlSGFuZGxlci5j
cHAuIEkgd2lsbCB0cnkgdG8gZ2V0IHRoZWlyIG5hbWVzIGNoYW5nZWQgaW4gQU5HTEUgZm9yIGZ1
dHVyZSB1cGRhdGVzLgorCisgICAgICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBpbmNsdWRlL0dMRVMyL2dsMmV4dC5oOgorICAgICAgICAqIGluY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmg6CisgICAgICAgICogc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmg6Cisg
ICAgICAgICogc3JjL2NvbW1vbi92ZXJzaW9uLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDoKKyAgICAgICAgKEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOjpJZGVudGlmeUZ1bmN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoaXNXZWJHTEJhc2VkU3BlYyk6CisgICAgICAgIChUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKToKKyAgICAgICAgKFRDb21w
aWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgIChUQ29tcGlsZXI6OmVu
Zm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgIChUQ29tcGls
ZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnRyYXZlcnNlKToKKyAgICAgICAgKHNoKToKKyAgICAg
ICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2gpOgorICAgICAgICAo
c2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChz
aDo6Y29udGFpbnNMb29wRGlzY29udGludWl0eSk6CisgICAgICAgIChzaDo6RGV0ZWN0R3JhZGll
bnRPcGVyYXRpb246OnRyYXZlcnNlKToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJh
dGlvbjo6dmlzaXRVbmFyeSk6CisgICAgICAgIChzaDo6RGV0ZWN0R3JhZGllbnRPcGVyYXRpb246
OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0dyYWRpZW50T3BlcmF0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oOiBBZGRlZC4K
KyAgICAgICAgKHNoKToKKyAgICAgICAgKERldGVjdExvb3BEaXNjb250aW51aXR5KToKKyAgICAg
ICAgKERldGVjdEdyYWRpZW50T3BlcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGlh
Z25vc3RpY3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGljczo6VERpYWdub3N0aWNz
KToKKyAgICAgICAgKFREaWFnbm9zdGljczo6flREaWFnbm9zdGljcyk6CisgICAgICAgIChURGlh
Z25vc3RpY3M6OndyaXRlSW5mbyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6OndyaXRlRGVidWcp
OgorICAgICAgICAoVERpYWdub3N0aWNzOjpwcmludCk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmg6IEFkZGVkLgorICAgICAgICAoVERpYWdub3N0aWNzKToKKyAgICAgICAg
KFREaWFnbm9zdGljczo6aW5mb1NpbmspOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRCZWhhdmlvcik6CisgICAgICAgIChU
RGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERpcmVjdGl2
ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxl
cjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVByYWdt
YSk6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVWZXJzaW9uKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFREaXJlY3RpdmVIYW5k
bGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpwcmFnbWEpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OmV4dGVuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaDoKKyAgICAgICAgKGdldEJlaGF2aW9yU3RyaW5nKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHA6CisgICAgICAgIChCdWlsdEluQ29u
c3RhbnRzKToKKyAgICAgICAgKFRCdWlsdEluczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChJZGVu
dGlmeUJ1aWx0SW5zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KToK
KyAgICAgICAgKEZyZWVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChJbml0aWFsaXplR2xv
YmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKEZyZWVQYXJzZUNvbnRleHQpOgorICAgICAgICAo
R2V0R2xvYmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oOgorICAgICAgICAoVFRocmVhZFBhcnNlQ29udGV4dFJlYyk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHA6CisgICAgICAgIChUSW50ZXJtZWRp
YXRlOjphZGRTZWxlY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9NYXBMb25nVmFyaWFi
bGVOYW1lcy5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwOgorICAg
ICAgICAoc2g6OnN0cik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6T3V0cHV0SExTTCk6Cisg
ICAgICAgIChzaDo6T3V0cHV0SExTTDo6fk91dHB1dEhMU0wpOgorICAgICAgICAoc2g6Ok91dHB1
dEhMU0w6Om91dHB1dCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVyKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRVbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKHNo
OjpPdXRwdXRITFNMOjp2aXNpdExvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnRyYXZl
cnNlU3RhdGVtZW50cyk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6
aGFuZGxlRXhjZXNzaXZlTG9vcCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dHlwZVN0cmlu
Zyk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9P
dXRwdXRITFNMLmg6CisgICAgICAgIChzaCk6CisgICAgICAgIChPdXRwdXRITFNMKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6cGFyc2VWZWN0b3JGaWVsZHMpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRy
aXhGaWVsZHMpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXJyb3IpOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6d2FybmluZyk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojp0cmFjZSk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcik6CisgICAgICAgIChUUGFyc2VDb250
ZXh0Ojp1bmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YmluYXJ5T3BFcnJv
cik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6Y29uc3RFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmludGVnZXJF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9yQ2hlY2spOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKToKKyAgICAgICAgKFRQ
YXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0Ojp2b2lkRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQ
YXJzZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFy
cmF5VHlwZUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZSk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBh
cmFtRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZSk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6ZmluZEZ1bmN0aW9uKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0
aWFsaXplcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdFN0cnVjdCk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YWRk
Q29uc3RNYXRyaXhOb2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlO
b2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KToKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24pOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2spOgorICAgICAgICAoUGFQYXJzZVN0cmlu
Z3MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9QYXJzZUhlbHBlci5oOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6VFBhcnNlQ29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250ZXh0KToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmluZm9TaW5rKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmV4dGVuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnByYWdtYSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHA6CisgICAgICAgIChUQWxsb2NhdGlv
bjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUHJhZ21hLmg6IEFk
ZGVkLgorICAgICAgICAoVFByYWdtYSk6CisgICAgICAgIChUUHJhZ21hOjpUUHJhZ21hKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChS
ZW5hbWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1lRnVuY3Rpb24p
OgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6
OmJ1aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9ySExT
TC5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OlVuZm9sZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KToKKyAg
ICAgICAgKHNoKToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKToK
KyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KToKKyAgICAgICAg
KHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKHNoOjpV
bmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0TG9vcCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRD
aXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgpOgorICAgICAgICAqIHNyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaC4KKyAgICAgICAgKHNoKToKKyAgICAgICAgKFVu
Zm9sZFNob3J0Q2lyY3VpdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZWJ1Zy5jcHA6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHA6IEFkZGVkLgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjp+VERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVGdW5j
dGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Z2V0T3JDcmVhdGVTeW1ib2wp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Y3JlYXRlTG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6Z2V0T3BTdHJp
bmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaDog
QWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6OlRHcmFw
aE5vZGUpOgorICAgICAgICAoVEdyYXBoTm9kZTo6flRHcmFwaE5vZGUpOgorICAgICAgICAoVEdy
YXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjpUR3JhcGhQYXJlbnRO
b2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6On5UR3JhcGhQYXJlbnROb2RlKToKKyAg
ICAgICAgKFRHcmFwaFBhcmVudE5vZGU6OmFkZERlcGVuZGVudE5vZGUpOgorICAgICAgICAoVEdy
YXBoQXJndW1lbnQpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OlRHcmFwaEFyZ3VtZW50KToK
KyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp+VEdyYXBoQXJndW1lbnQpOgorICAgICAgICAoVEdy
YXBoQXJndW1lbnQ6OmdldEludGVybUZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhBcmd1
bWVudDo6Z2V0QXJndW1lbnROdW1iZXIpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxsKToK
KyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6VEdyYXBoRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6flRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChU
R3JhcGhGdW5jdGlvbkNhbGw6OmdldEludGVybUZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3Jh
cGhTeW1ib2wpOgorICAgICAgICAoVEdyYXBoU3ltYm9sOjpUR3JhcGhTeW1ib2wpOgorICAgICAg
ICAoVEdyYXBoU3ltYm9sOjp+VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
Z2V0SW50ZXJtU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbik6CisgICAgICAgIChU
R3JhcGhTZWxlY3Rpb246OlRHcmFwaFNlbGVjdGlvbik6CisgICAgICAgIChUR3JhcGhTZWxlY3Rp
b246On5UR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpnZXRJbnRl
cm1TZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29w
OjpUR3JhcGhMb29wKToKKyAgICAgICAgKFRHcmFwaExvb3A6On5UR3JhcGhMb29wKToKKyAgICAg
ICAgKFRHcmFwaExvb3A6OmdldEludGVybUxvb3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9w
KToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6VEdyYXBoTG9naWNhbE9wKToKKyAgICAgICAg
KFRHcmFwaExvZ2ljYWxPcDo6flRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dp
Y2FsT3A6OmdldEludGVybUxvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGg6OmVuZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblNhbXBsZXJTeW1i
b2xzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZFNhbXBsZXJTeW1ib2xzKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OlREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2VyOjp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlcjo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
cjo6Z2V0RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6aW5jcmVt
ZW50RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6ZGVjcmVtZW50
RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6Y2xlYXJWaXNpdGVk
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6Om1hcmtWaXNpdGVkKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmlzVmlzaXRlZCk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29w
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVsdGlwbGVOb2Rl
c1RvU2luZ2xlTm9kZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cik6CisgICAgICAgIChUTm9kZVNldFN0YWNrKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpUTm9kZVNldFN0YWNrOjpUTm9kZVNldFN0YWNrKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjp+VE5vZGVTZXRTdGFjayk6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Z2V0VG9wU2V0KToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwdXNoU2V0KToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OnBvcFNl
dEludG9OZXh0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0
YWNrOjppbnNlcnRJbnRvVG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
OjpUTm9kZVNldFN0YWNrOjpjbGVhcik6CisgICAgICAgIChUTm9kZVNldE1haW50YWluZXIpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0TWFpbnRhaW5lcjo6VE5v
ZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9k
ZVNldE1haW50YWluZXI6On5UTm9kZVNldE1haW50YWluZXIpOgorICAgICAgICAoVE5vZGVTZXRQ
cm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjpUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRh
aW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRQcm9wYWdh
dGluZ01haW50YWluZXI6On5UTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcik6CisgICAgICAg
IChUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xN
YWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRw
dXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVzKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0Lmg6IEFk
ZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6CisgICAgICAg
IChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAg
IChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OnRyYXZl
cnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAgICAqIHNyYy9j
b21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcueToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwOgorICAgICAgICAoeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoc3Ry
aW5nX2lucHV0KToKKyAgICAgICAgKHl5ZXJyb3IpOgorICAgICAgICAoZ2xzbGFuZ19maW5hbGl6
ZSk6CisgICAgICAgIChnbHNsYW5nX3NjYW4pOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmg6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oOgorICAgICAgICAoVEludGVybUFnZ3Jl
Z2F0ZTo6VEludGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjp+VElu
dGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVk
KToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybVRyYXZlcnNl
cjo6flRJbnRlcm1UcmF2ZXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9vc2luY2x1ZGUu
aDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAg
KEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFByaW50QXRvbVRhYmxlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jOgorICAgICAgICAoQ1BQcHJhZ21hKToKKyAgICAg
ICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAgKFByZWRlZmluZUludE1hY3JvKToKKyAgICAgICAg
KE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmg6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlhZ25vc3RpY3MpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3Mp
OgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQpOgorICAgICAgICAocHA6OkRpYWdu
b3N0aWNzOjpzZXZlcml0eSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERp
cmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAg
IChwcDo6RGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoZ2V0RGlyZWN0aXZlKToKKyAgICAgICAgKGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUp
OgorICAgICAgICAoaXNFT0QpOgorICAgICAgICAoc2tpcFVudGlsRU9EKToKKyAgICAgICAgKGlz
TWFjcm9OYW1lUmVzZXJ2ZWQpOgorICAgICAgICAoaXNNYWNyb1ByZWRlZmluZWQpOgorICAgICAg
ICAocHApOgorICAgICAgICAoRGVmaW5lZFBhcnNlcik6CisgICAgICAgIChwcDo6RGVmaW5lZFBh
cnNlcjo6RGVmaW5lZFBhcnNlcik6CisgICAgICAgIChwcDo6RGVmaW5lZFBhcnNlcjo6bGV4KToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcik6CisgICAgICAg
IChwcDo6RGlyZWN0aXZlUGFyc2VyOjpsZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VEaXJlY3RpdmUpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VE
ZWZpbmUpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZik6CisgICAg
ICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKToKKyAgICAgICAgKHBwOjpEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlSWZkZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VJZm5kZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZik6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRXJyb3IpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEp
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24pOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKToKKyAgICAgICAgKHBwOjpEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlTGluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpz
a2lwcGluZyk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFs
SWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYpOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oOiBB
ZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBhcnNlcik6CisgICAgICAg
IChDb25kaXRpb25hbEJsb2NrKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OkNvbmRp
dGlvbmFsQmxvY2s6OkNvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNw
cC4KKyAgICAgICAgKHl5c3ludGF4X2Vycm9yKToKKyAgICAgICAgKHl5bGV4KToKKyAgICAgICAg
KHl5ZXJyb3IpOgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkV4cHJlc3Npb25QYXJzZXI6
OkV4cHJlc3Npb25QYXJzZXIpOgorICAgICAgICAocHA6OkV4cHJlc3Npb25QYXJzZXI6OnBhcnNl
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRXhwcmVzc2lvblBhcnNlcik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55OiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5jcHA6CisgICAgICAgIChwcDo6SW5wdXQ6OklucHV0KToKKyAgICAgICAgKHBwOjpJbnB1dDo6
cmVhZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaDoK
KyAgICAgICAgKHBwKToKKyAgICAgICAgKElucHV0KToKKyAgICAgICAgKHBwOjpJbnB1dDo6Y291
bnQpOgorICAgICAgICAocHA6OklucHV0OjpzdHJpbmcpOgorICAgICAgICAocHA6OklucHV0Ojps
ZW5ndGgpOgorICAgICAgICAoTG9jYXRpb24pOgorICAgICAgICAocHA6OklucHV0OjpMb2NhdGlv
bjo6TG9jYXRpb24pOgorICAgICAgICAocHA6OklucHV0OjpyZWFkTG9jKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHA6IEFkZGVkLgorICAgICAgICAo
cHApOgorICAgICAgICAocHA6OkxleGVyOjp+TGV4ZXIpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAg
ICAoTGV4ZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
LmNwcDoKKyAgICAgICAgKHBwOjpNYWNybzo6ZXF1YWxzKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oOgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Ok1hY3JvOjpNYWNybyk6CisgICAgICAgIChNYWNybyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAocHAp
OgorICAgICAgICAoVG9rZW5MZXhlcik6CisgICAgICAgIChwcDo6VG9rZW5MZXhlcjo6VG9rZW5M
ZXhlcik6CisgICAgICAgIChwcDo6VG9rZW5MZXhlcjo6bGV4KToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjp+
TWFjcm9FeHBhbmRlcik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6bGV4KToKKyAgICAg
ICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBh
bmRlcjo6dW5nZXRUb2tlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9r
ZW5MZWZ0UGFyZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyk6Cisg
ICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cG9wTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3Jv
RXhwYW5kZXI6OmV4cGFuZE1hY3JvKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpjb2xs
ZWN0TWFjcm9BcmdzKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpyZXBsYWNlTWFjcm9Q
YXJhbXMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhw
YW5kZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChNYWNyb0V4cGFuZGVyKToK
KyAgICAgICAgKE1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFj
cm9Db250ZXh0OjpNYWNyb0NvbnRleHQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1h
Y3JvQ29udGV4dDo6ZW1wdHkpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29u
dGV4dDo6Z2V0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OnVu
Z2V0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuY3BwOgorICAgICAgICAoUHJlcHJvY2Vzc29ySW1wbCk6CisgICAgICAgIChwcDo6UHJlcHJv
Y2Vzc29ySW1wbDo6UHJlcHJvY2Vzc29ySW1wbCk6CisgICAgICAgIChwcCk6CisgICAgICAgIChw
cDo6UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nv
cjo6flByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjppbml0KToKKyAg
ICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OnByZWRlZmluZU1hY3JvKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3I6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmg6CisgICAgICAgIChwcCk6CisgICAgICAgIChQcmVwcm9jZXNzb3Ip
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OlNvdXJjZUxvY2F0aW9uOjpT
b3VyY2VMb2NhdGlvbik6CisgICAgICAgIChTb3VyY2VMb2NhdGlvbik6CisgICAgICAgIChwcDo6
U291cmNlTG9jYXRpb246OmVxdWFscyk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uY3BwOgorICAgICAgICAocHA6OlRva2VuOjpyZXNldCk6CisgICAgICAgIChw
cDo6VG9rZW46OmVxdWFscyk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEF0U3RhcnRPZkxpbmUp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHAp
OgorICAgICAgICAocHA6OlRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZCk6CisgICAgICAgIChw
cDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW4uaDoKKyAgICAgICAgKHBwOjpUb2tlbjo6VG9rZW4pOgorICAgICAgICAoVG9rZW4pOgor
ICAgICAgICAocHA6OlRva2VuOjphdFN0YXJ0T2ZMaW5lKToKKyAgICAgICAgKHBwOjpUb2tlbjo6
aGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpUb2tlbjo6ZXhwYW5zaW9uRGlzYWJsZWQp
OgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAgICAocHApOgorICAgICAgICAocHA6
Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAg
KHl5X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5w
dXQpOgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIp
OgorICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1
ZmZlcik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVm
ZmVyKToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVy
X3N0YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3Vy
ZV9idWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBf
c2Nhbl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRh
bF9lcnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8p
OgorICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAg
KHBwZ2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQp
OgorICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAg
ICAgKHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9v
dXQpOgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAg
ICAgICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0
X2xsb2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAg
ICAgICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAg
ICAgICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAg
ICAgKHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFs
bG9jKToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9r
ZW5pemVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6
CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6
OnNldEZpbGVOdW1iZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6c2V0TGluZU51bWJlcik6
CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpsZXgpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6
aW5pdFNjYW5uZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oOiBBZGRl
ZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFRva2VuaXplcik6CisgICAgICAgIChDb250ZXh0
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubDog
QWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVf
cGFyc2VyLnNoOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmw6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueTog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXgu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X3RhYi5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3ByZXByb2Nlc3Nvci52Y3Byb2o6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYzoKKyAgICAgICAgKEluaXRTY2FubmVySW5wdXQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmM6CisgICAgICAgIChSZWFkVG9rZW4pOgorICAg
ICAgICAoRHVtcFRva2VuU3RyZWFtKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5jcHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyk6CisgICAgICAgIChSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlv
bkNhbGxVc2FnZSk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdp
bkVycm9yKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxp
bmdPcCk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3Vt
ZW50KToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0U2VsZWN0
aW9uKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcCk6
CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmg6IEFkZGVkLgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyk6Cisg
ICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpudW1FcnJvcnMpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjp2aXNpdFN5bWJvbCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKToKKyAgICAg
ICAgKFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nOjpSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0
aW9ucyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6bnVtRXJyb3JzKToK
KyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXkuY3BwOgorICAgICAgICAoZWdsKToKKyAgICAg
ICAgKGVnbDo6RGlzcGxheTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6OmdldFRleHR1cmVQb29sKToKKyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXku
aDoKKyAgICAgICAgKERpc3BsYXkpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5jcHA6
CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OlN1cmZhY2UpOgorICAgICAgICAoZWdsKToKKyAgICAg
ICAgKGVnbDo6U3VyZmFjZTo6flN1cmZhY2UpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjppbml0
aWFsaXplKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZSk6CisgICAgICAgIChlZ2w6
OlN1cmZhY2U6OnJlc2V0U3dhcENoYWluKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcFJl
Y3QpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlV2luZG93UHJvYyk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN1YmNsYXNz
V2luZG93KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdyk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKToKKyAgICAgICAg
KGVnbDo6U3VyZmFjZTo6Y29udmVydEludGVydmFsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6
c3dhcCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnBvc3RTdWJCdWZmZXIpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpnZXRXaWR0aCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldEhlaWdo
dCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk6Cisg
ICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChlZ2w6OlN1
cmZhY2U6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldE9mZnNj
cmVlblRleHR1cmUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwpOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKGVnbDo6
U3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnNldEJv
dW5kVGV4dHVyZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSk6Cisg
ICAgICAgIChlZ2w6OlN1cmZhY2U6OmdldEZvcm1hdCk6CisgICAgICAgICogc3JjL2xpYkVHTC9T
dXJmYWNlLmg6CisgICAgICAgIChTdXJmYWNlKToKKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVH
TC5jcHA6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcDoKKyAgICAgICAgKGds
OjpDb250ZXh0OjpDb250ZXh0KToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb250ZXh0
Ojp+Q29udGV4dCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFrZUN1cnJlbnQpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjptYXJrRHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJrQ29udGV4
dExvc3QpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldENsZWFyQ29sb3IpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldENs
ZWFyRGVwdGgpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldENsZWFyU3RlbmNpbCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0Q3VsbEZhY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omlz
Q3VsbEZhY2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDdWxsTW9kZSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJvbnRGYWNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXREZXB0aFRlc3QpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxl
ZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RGVwdGhGdW5jKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXREZXB0aFJhbmdlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRCbGVuZCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNCbGVuZEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldEJsZW5kRmFjdG9ycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmRD
b2xvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbik6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbFRlc3QpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omlz
U3RlbmNpbFRlc3RFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsUGFy
YW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbFdyaXRlbWFzayk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2spOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFN0ZW5jaWxPcGVyYXRpb25zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTdGVuY2lsQmFj
a09wZXJhdGlvbnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFBvbHlnb25PZmZzZXRGaWxs
KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0Ojppc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldFNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1NhbXBsZUNv
dmVyYWdlRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQ
YXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFNjaXNzb3JUZXN0KToKKyAgICAgICAg
KGdsOjpDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0RGl0aGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldExpbmVXaWR0aCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFn
bWVudFNoYWRlckRlcml2YXRpdmVIaW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWaWV3
cG9ydFBhcmFtcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q29sb3JNYXNrKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXREZXB0aE1hc2spOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldEFycmF5QnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBY3RpdmVR
dWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVy
dGV4QXR0cmlidXRlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0UGFja0FsaWdubWVudCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93
T3JkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlU2hhZGVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUZy
YW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVGZW5jZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Y3JlYXRlUXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0
ZUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxl
dGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpkZWxldGVGZW5jZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUXVlcnkp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0U2hhZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQcm9ncmFtKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRF
bGVtZW50QXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRUZXh0dXJlMkQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
YmluZERyYXdGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6YmVnaW5RdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZW5kUXVlcnkpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
Z2V0RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZlbmNlKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QXJy
YXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcik6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVy
ZUN1YmVNYXApOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRCb29sZWFudik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
Z2V0RmxvYXR2KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjphcHBseVJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0
ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFw
cGx5U2hhZGVycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlUZXh0dXJlcyk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y2xl
YXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3luYyk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZHJhd0xpbmVMb29wKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpy
ZWNvcmRJbnZhbGlkRW51bSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkSW52YWxpZFZh
bHVlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRFcnJvcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVzZXRTdGF0dXMp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBv
cnRzRXZlbnRRdWVyaWVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c09jY2x1c2lv
blF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJlcyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQzMlJlbmRlcmFibGVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNG
bG9hdDE2VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxp
bmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVm
ZmVyRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGlt
ZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBv
cnRzTm9uUG93ZXIyVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNJbnN0
YW5jaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hCdWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmRldGFjaFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFj
aEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjdWxsU2tpcHNEcmF3KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1Ry
aWFuZ2xlTW9kZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4QXR0cmliKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKGds
OjpDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRSZW5kZXJlclN0
cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyZXJTdHJpbmcpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6VmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSk6CisgICAgICAgIChnbDo6VmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUpOgorICAgICAgICAo
Z2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24pOgorICAgICAgICAo
Z2w6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KToKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL0NvbnRleHQuaDoKKyAgICAgICAgKENvbnRleHQpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpn
ZXROdWxsQ29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaDoKKyAgICAgICAgKEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwOgorICAgICAg
ICAoZ2wpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5kaW5n
cyk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncyk6
CisgICAgICAgIChnbDo6SW5mb0xvZzo6SW5mb0xvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6
fkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmdldExlbmd0aCk6CisgICAgICAgIChn
bDo6SW5mb0xvZzo6Z2V0TG9nKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjphcHBlbmRTYW5pdGl6
ZWQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZCk6CisgICAgICAgIChnbDo6SW5mb0xv
Zzo6cmVzZXQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6
OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjphdHRhY2hTaGFkZXIp
OgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFjaFNoYWRlcik6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJp
bmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmJp
bmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6bGluayk6CisgICAg
ICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRpbmcpOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeSk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRl
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpn
ZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnZhbGlkYXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjppc1ZhbGlkYXRlZCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmg6CisgICAgICAgIChnbCk6CisgICAgICAgIChBdHRyaWJ1dGVCaW5kaW5ncyk6Cisg
ICAgICAgIChJbmZvTG9nKToKKyAgICAgICAgKFByb2dyYW0pOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAuCisgICAgICAgIChnbDo6c3RyKToKKyAgICAg
ICAgKGdsKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpVbmlmb3JtKToKKyAgICAgICAgKGdsOjpV
bmlmb3JtOjp+VW5pZm9ybSk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6aXNBcnJheSk6CisgICAg
ICAgIChnbDo6VW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5h
cnk6On5Qcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRQaXhl
bFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVyKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleCk6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6Z2V0VXNlZFNhbXBsZXJSYW5nZSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmdldFNhbXBsZXJUZXh0dXJlVHlwZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KToKKyAgICAgICAgKGdsOjp0cmFuc3Bvc2VNYXRyaXgp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
aXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYpOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpkaXJ0
eUFsbFVuaWZvcm1zKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1z
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkpOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6bGlua1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5r
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5OjpkZWZpbmVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpjcmVh
dGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0
ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0pOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5idik6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjphcHBseVVuaWZvcm0xaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5
VW5pZm9ybTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYpOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5pdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZl
QXR0cmlidXRlQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNv
dW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVu
Z3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZSk6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
Z2V0RHhDb29yZExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEhh
bGZQaXhlbFNpemVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhG
cm9udENDV0xvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbS5oLgorICAgICAgICAoZ2wpOgorICAgICAgICAoVW5pZm9ybSk6CisgICAgICAgIChnbDo6
VW5pZm9ybTo6UmVnaXN0ZXJJbmZvOjpSZWdpc3RlckluZm8pOgorICAgICAgICAoUmVnaXN0ZXJJ
bmZvKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjpSZWdpc3RlckluZm86OnNldCk6CisgICAgICAg
IChVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoUHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChT
YW1wbGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHA6CisgICAg
ICAgIChnbCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZm
ZXJUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6flJlbmRl
cmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjph
ZGRQcm94eVJlZik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNl
UHJveHkpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFy
Z2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNp
bCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5k
ZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZik6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eSk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCk6Cisg
ICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKToKKyAgICAg
ICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgICog
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKFJl
bmRlcmJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwOgorICAgICAgICAoZ2w6OlNo
YWRlcjo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRTb3VyY2VJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5oOgorICAgICAgICAoU2hhZGVyKToKKyAg
ICAgICAgKFZlcnRleFNoYWRlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNw
cDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUp
OgorICAgICAgICAoZ2w6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUpOgorICAgICAgICAoZ2w6
OkdldFRleHR1cmVVc2FnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OkltYWdlKToKKyAgICAgICAg
KGdsOjpJbWFnZTo6fkltYWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6cmVkZWZpbmUpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9j
ayk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVubG9jayk6CisgICAgICAgIChnbDo6SW1hZ2U6Omlz
UmVuZGVyYWJsZUZvcm1hdCk6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldEQzREZvcm1hdCk6Cisg
ICAgICAgIChnbDo6SW1hZ2U6OmdldFN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpzZXRN
YW5hZ2VkU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnVwZGF0ZVN1cmZhY2UpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBo
YURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFEYXRhU1NFMik6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6Omxv
YWRBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNl
RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVt
aW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQlVC
eXRlRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0I1NjVEYXRhKToKKyAgICAgICAg
KGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRS
R0JIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFT
U0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJH
QkE1NTUxRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZEJHUkFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZENvbXByZXNzZWRE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Y29weSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0
b3JhZ2U6OlRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6flRl
eHR1cmVTdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJn
ZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlOjpnZXRQb29sKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFn
ZTo6Z2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2Vy
aWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNzdWVUZXh0dXJlU2VyaWFsKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjp+
VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0TWluRmlsdGVyKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlOjpzZXRNYWdGaWx0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldFdy
YXBTKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRXcmFwVCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTo6c2V0VXNhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldE1pbkZpbHRlcik6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0TWFnRmlsdGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpnZXRXcmFwUyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0V3JhcFQpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRUZXh0dXJlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpoYXNEaXJ0eVBhcmFtZXRlcnMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6Omhh
c0RpcnR5SW1hZ2VzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpyZXNldERpcnR5KToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmlzSW1tdXRh
YmxlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjcmVhdGlvbkxldmVscyk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6bGV2ZWxDb3VudCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0QmxpdHRl
cik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjp+VGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFn
ZTJEOjpnZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OlRleHR1cmUyRCk6
CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjp+VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnJlbGVhc2VQcm94
eSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRUYXJnZXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmUyRDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0SGVpZ2h0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpyZWRl
ZmluZUltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnNldEltYWdlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpy
ZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvbW1pdFJlY3QpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c3ViSW1hZ2VD
b21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlJbWFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
c3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc0RlcHRo
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6dXBk
YXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVu
Y2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5UZXh0dXJlU3RvcmFnZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OlRleHR1cmVD
dWJlTWFwOjphZGRQcm94eVJlZik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnJlbGVh
c2VQcm94eSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50
ZXJuYWxGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1gpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1gpOgorICAgICAgICAoZ2w6OlRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZVBvc1kpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1kpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1opOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1opOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpjb21taXRSZWN0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3Vi
SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldGUpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjppc0NvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpn
ZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1
cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjp1cGRhdGVUZXh0dXJlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpmYWNlSW5kZXgpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUlt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6c3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRl
TWlwbWFwcyk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2UpOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvVGV4dHVyZS5oOgorICAgICAgICAoZWdsKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKElt
YWdlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bWFya0RpcnR5KToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bWFya0NsZWFuKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0V2lkdGgpOgorICAgICAgICAo
Z2w6OkltYWdlOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXRGb3JtYXQpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpnZXRUeXBlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6aXNEaXJ0
eSk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZSk6CisgICAgICAgIChUZXh0dXJlKToKKyAgICAg
ICAgKFRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAoVGV4dHVyZTJEKToKKyAgICAgICAgKFRl
eHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChnbDo6VmVy
dGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5jcHA6CisgICAgICAgIChjaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAg
ICAgICAgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCk6CisgICAgICAgICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbWF0aHV0aWwuaDoKKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5jcHA6CisgICAgICAgIChnbDo6SXNEZXB0aFRleHR1cmUpOgorICAg
ICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbXB1dGVQaXhlbFNpemUpOgorICAgICAgICAoZ2w6
OkV4dHJhY3RGb3JtYXQpOgorICAgICAgICAoZ2w6OkV4dHJhY3RUeXBlKToKKyAgICAgICAgKGVz
MmR4OjpDb252ZXJ0Q3ViZUZhY2UpOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkdldFN0ZW5jaWxTaXplKToKKyAgICAgICAgKGR4
MmVzOjpHZXREZXB0aFNpemUpOgorICAgICAgICAoZHgyZXM6OklzRGVwdGhUZXh0dXJlRm9ybWF0
KToKKyAgICAgICAgKGR4MmVzKToKKyAgICAgICAgKGR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9y
bWF0KToKKyAgICAgICAgKGR4MmVzOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAo
ZHgyZXMpOgorCiAyMDEyLTA2LTIyICBKb3NodWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRA
cmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gU2FuaXRpemUgR0xTTCBjb2RlIHVzaW5n
IEFOR0xFLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw0OCBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsKIAkJQTBB
QUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJE
MSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEwMEYyRUJE
MSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmgg
Ki87IH07CisJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMDE1OUMy
MUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdCQzE1OUMyMUIx
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdC
MjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMzE1OUMyMUIxMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CisJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKKwkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKKwkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
KwkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owor
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07CisJCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
KwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owor
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
OyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1Njgz
MjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEy
NjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1
Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07
CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICov
OyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIw
MEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYz
NUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9
OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKQEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFk
ZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRh
YmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlE
MkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYg
KzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9y
RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9y
RVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERl
dGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0
ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdC
MDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFu
ZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEw
MDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2ODMyMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODMzMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM4MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGli
QU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5
IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4
RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTYyLDE1ICsyNDksMTEgQEAKIAkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUMxMTIwMEYyNjIwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xh
dG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IHRyYW5zbGF0b3Jf
Y29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0MxMjAw
RjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxlRW5jb2RpbmcgPSA0
OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRTEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9
IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFEMDEyMDBG
MjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMzEyMDBGMjYyMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMTEyMDBGMzVB
MDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjIxMjAw
RjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjksOCArMzEyLDYgQEAKIAkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0
b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNjkxMjAwRjM1
QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCiAKQEAgLTI1NSw2ICszMzYsNjIgQEAKIAkJCXBhdGggPSBDb25maWd1cmF0aW9uczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUEyNjU2N0M1MTU5QzIxQ0UwMDM5ODUz
OSAvKiBuZXcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovLAorCQkJCUEyNjU2N0M4
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjU2N0M5
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0NBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi8sCisJCQkJQTI2NTY3Q0Ix
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1NjdDQzE1
OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRDE1
OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3Q0UxNTlD
MjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2N0NGMTU5
QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3RDIxNTlD
MjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1
MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIu
Y3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICovLAorCQkJ
CUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2NTY3RDcx
NTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUz
OSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJCQkJQTI2
NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2NTY3RTgx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMyM0UxMDAz
OTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1OUMyM0Ux
MDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2ODM4MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlG
QjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAv
KiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlEMTg1MTIw
MEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2MDAwODhF
NjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIwMEYyNjIw
MDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2MjAwMDg4
RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1Npbmsu
Y3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAog
CQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTMy
NywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxl
LmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNwcm9qICov
LAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9q
ICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8s
CiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywK
IAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKIAkJ
CQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5RDFEMjEy
MDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFEMzEyMDBG
MjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlDMjFCMTAw
Mzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3QjgxNTlDMjFC
MTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWluY2x1ZGVJ
bkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYgQEAKIAkJ
RkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVCRDEgLyog
T3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBP
dXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFu
c2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5z
bGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVT
U0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmgg
Ki8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9s
bC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
aCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAog
CQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJCQk0OTk1
MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovLAog
CQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
ICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAwODhFNjkg
LyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBk
ZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmggKi8s
CisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJCTQ5OTUx
QzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJCTQ5OTUx
QzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlBMjY1NjdC
MDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2N0IxMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5QzIxQjEw
MDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJFMTFEQ0Iw
MDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNBRkU4MTAw
MEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZFODEwMDBG
MkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1
NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xh
bmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190
YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5o
ICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJ
RkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGQjM5RDIy
QjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBAQAogCQkJ
CUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJCQlG
QjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCUZCMzlE
MjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEyNjU2
N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKIAkJ
CQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICov
LAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAog
CQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQlG
QjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlGQjM5RDIz
NTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZCMzlEMjM2
MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEwQUFCRTJF
MTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJCQkJQTBB
QUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCiAJCQkJ
RkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIzODEyMDBG
MzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURDQjAwMkQ0
MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2
OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5
IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8q
IE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRw
dXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wu
Y3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8s
CisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywK
KwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJ
CQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJRkIz
OUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlGQjM5RDI0
MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0MjEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBGMzVBMDAw
ODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8q
IFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNz
b3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNw
cCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAq
LywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMjY1
NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEw
MDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEy
RTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4
OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJv
bFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWluZyAqLywK
KwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAor
CQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJ
CUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJ
RkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIz
OUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1
QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAw
MDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1
NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5o
ICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkg
LyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZCMzlEMjQ1
MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4
RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGls
ZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFn
bWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5h
bWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMyMUNFMDAz
OTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RjEx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBU
b2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8q
IHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01
ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIxMTIwMEYz
NUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIx
MDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkw
RDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQx
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5MTRCN0FB
RDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0
aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1
MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0
aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUz
OSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y1MTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3Rjkx
NTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0ZC
MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njg0MjE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyZXh0LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw2ICsyMzgsMTEgQEAg
dHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBM
RSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIs
MTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTgogI2RlZmluZSBH
TF9WSVZfc2hhZGVyX2JpbmFyeSAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5h
cnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQU5HTEVf
cHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAgZXh0ZXJuICJDIiB7CiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJh
bnNsYXRpb24gQVBJLgogLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hh
bmdlcy4KLSNkZWZpbmUgU0hfVkVSU0lPTiAxMDUKKyNkZWZpbmUgU0hfVkVSU0lPTiAxMDcKIAog
Ly8KIC8vIFRoZSBuYW1lcyBvZiB0aGUgZm9sbG93aW5nIGVudW1zIGhhdmUgYmVlbiBkZXJpdmVk
IGJ5IHJlcGxhY2luZyBHTCBwcmVmaXgKQEAgLTQ5LDcgKzQ5LDI5IEBAIHR5cGVkZWYgZW51bSB7
CiAKIHR5cGVkZWYgZW51bSB7CiAgIFNIX0dMRVMyX1NQRUMgPSAweDhCNDAsCi0gIFNIX1dFQkdM
X1NQRUMgPSAweDhCNDEKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MSwKKworICAvLyBUaGUgQ1NT
IFNoYWRlcnMgc3BlYyBpcyBhIHN1YnNldCBvZiB0aGUgV2ViR0wgc3BlYy4KKyAgLy8KKyAgLy8g
SW4gYm90aCBDU1MgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEp
IFJlc2VydmVzIHRoZSAiY3NzXyIgcHJlZml4LgorICAvLyAoMikgUmVuYW1lcyB0aGUgbWFpbiBm
dW5jdGlvbiB0byBjc3NfbWFpbi4KKyAgLy8gKDMpIERpc2FibGVzIHRoZSBnbF9NYXhEcmF3QnVm
ZmVycyBidWlsdC1pbi4KKyAgLy8KKyAgLy8gSW4gQ1NTIGZyYWdtZW50IHNoYWRlcnMsIEFOR0xF
OgorICAvLyAoMSkgRGlzYWJsZXMgdGhlIGdsX0ZyYWdDb2xvciBidWlsdC1pbi4KKyAgLy8gKDIp
IERpc2FibGVzIHRoZSBnbF9GcmFnRGF0YSBidWlsdC1pbi4KKyAgLy8gKDMpIEVuYWJsZXMgdGhl
IGNzc19NaXhDb2xvciBidWlsdC1pbi4KKyAgLy8gKDQpIEVuYWJsZXMgdGhlIGNzc19Db2xvck1h
dHJpeCBidWlsdC1pbi4KKyAgLy8KKyAgLy8gQWZ0ZXIgcGFzc2luZyBhIENTUyBzaGFkZXIgdGhy
b3VnaCBBTkdMRSwgdGhlIGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gYXBwZW5kCisgIC8vIGEgbmV3
IG1haW4gZnVuY3Rpb24gdG8gaXQuCisgIC8vIFRoaXMgbmV3IG1haW4gZnVuY3Rpb24gd2lsbCBj
YWxsIHRoZSBjc3NfbWFpbiBmdW5jdGlvbi4KKyAgLy8gSXQgbWF5IGFsc28gcGVyZm9ybSBhZGRp
dGlvbmFsIG9wZXJhdGlvbnMgbGlrZSB2YXJ5aW5nIGFzc2lnbm1lbnQsIHRleHR1cmUKKyAgLy8g
YWNjZXNzLCBhbmQgZ2xfRnJhZ0NvbG9yIGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gaW1wbGVtZW50
IHRoZSBDU1MgU2hhZGVycworICAvLyBibGVuZCBtb2Rlcy4KKyAgLy8KKyAgU0hfQ1NTX1NIQURF
UlNfU1BFQyA9IDB4OEI0MgogfSBTaFNoYWRlclNwZWM7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0x
MDQsNyArMTI2LDIzIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRI
X0lOVEVHRVJfSU5ERVggPSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBh
IHdvcmthcm91bmQgZm9yIGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgotICBTSF9FTVVMQVRF
X0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4MDEwMAorICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNU
SU9OUyA9IDB4MDEwMCwKKworICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVu
Zm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgCisgIC8vIHRpbWluZyBhdHRh
Y2tzLgorICAvLyBJdCBnZW5lcmF0ZXMgY29tcGlsYXRpb24gZXJyb3JzIGZvciBzaGFkZXJzIHRo
YXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZQorICAvLyB0ZXh0dXJlIGluZm9ybWF0aW9uIHZpYSB0
aGUgdGltaW5nIGNoYW5uZWwuCisgIC8vIFRvIHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IGNvbXBp
bGUgdGhlIHNoYWRlciB1bmRlciB0aGUgV2ViR0wgc3BlYworICAvLyAodXNpbmcgdGhlIFNIX1dF
QkdMX1NQRUMgZmxhZykuCisgIFNIX1RJTUlOR19SRVNUUklDVElPTlMgPSAweDAyMDAsCisgICAg
CisgIC8vIFRoaXMgZmxhZyBwcmludHMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCBpcyB1c2Vk
IHRvIGVuZm9yY2UgdGltaW5nCisgIC8vIHJlc3RyaWN0aW9ucyBvbiBmcmFnbWVudCBzaGFkZXJz
LgorICAvLyBUaGlzIGZsYWcgb25seSBoYXMgYW4gZWZmZWN0IGlmIGFsbCBvZiB0aGUgZm9sbG93
aW5nIGFyZSB0cnVlOgorICAvLyAtIFRoZSBzaGFkZXIgc3BlYyBpcyBTSF9XRUJHTF9TUEVDLgor
ICAvLyAtIFRoZSBjb21waWxlIG9wdGlvbnMgY29udGFpbiB0aGUgU0hfVElNSU5HX1JFU1RSSUNU
SU9OUyBmbGFnLgorICAvLyAtIFRoZSBzaGFkZXIgdHlwZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIu
CisgIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0MDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAog
Ly8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjIy
MzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMzIgQEAKIAkJODg4
RjEzODI0OThFMkQ3NEFGMjgwMUM4IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1
Zy5jcHAgKi87IH07CiAJCTg5NkI3MjBCRDIxRjY3NDlBN0Q4M0YzMCAvKiBNYXBMb25nVmFyaWFi
bGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICov
OyB9OwogCQk5M0E0MUFGMDM2RTVFRjg3QjM2NkI1NjMgLyogVHJhbnNsYXRvckVTU0wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEEzQTI2MEY1Mzc5
QTdFMjY1NUQ0MEYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKLQkJOTg4NkJDRDVEMERE
NjlCNkZERTA5REQ4IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xk
U2VsZWN0LmNwcCAqLzsgfTsKIAkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdM
U0xCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDREYwMUYwMDJBREU5REI4QTNFRjRGRSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi87IH07CiAJ
CTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyQzlDOEVCNEE3RUZGNUI2N0ZGOURC
RiAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKKwkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi87IH07
CisJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODIxMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0QxNTlD
MzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGly
ZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4
cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3Bw
ICovOyB9OworCQlBMjAxMDg0MDE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjkxNTlDMzFBMDAw
RTU3QkJFIC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NDExNTlDMzFBMDAwRTU3QkJFIC8q
IExleGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyMDEwODQy
MTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3Bw
ICovOyB9OworCQlBMjAxMDg0MzE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyRjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJCUEyMDEwODQ0MTU5
QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi87IH07CisJCUEyMDEwODQ1MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjAxMDg0NjE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
ICovOyB9OworCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0QzE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjQx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NEUxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovOyB9OworCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjAxMDg2NjE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjcxNTlDMzI0RjAwRTU3
QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJz
aW9uLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjgxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi87IH07CisJCUEyMDEwODY5
MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NkExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovOyB9OworCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyog
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyMDEwODZDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjAxMDg3MTE1OUMzMjYy
MDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyMDEwODcyMTU5QzMyNjIwMEU1N0JCRSAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi87IH07CiAJCUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZF
RkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJQUQ4NTUxN0Yw
ODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMg
Ki87IH07CiAJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAw
NUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OwpAQCAtMTA0LDcgKzEy
Nyw2IEBACiAJCTI3QzExRUUxMEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJsZUluZm8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5IC8qIEJhc2VUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk0RjQ0
MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8q
IFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTQ3LDYgKzE2OSw1OSBAQAogCQk5RDQ3
QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlh
bGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTY0NEIwMEU5MzA0QzQw
N0ZEQzVGNDcgLyogbGlidHJhbnNsYXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IGxpYnRyYW5zbGF0b3JfZ2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQlBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21t
b24gY29weS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9j
b21tb24gY29weS5hIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQTIw
MTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMjE1OUMz
MUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERp
cmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3Rp
dmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjUxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODI2MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElu
cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8q
IElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBM
ZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFj
cm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBh
bmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODMwMTU5QzMxQTAw
MEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MzExNTlDMzFBMDAwRTU3QkJFIC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHBwX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzMxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxv
Y2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JC
RSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM3MTU5QzMxQTAwMEU1
N0JCRSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRv
a2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM5MTU5QzMx
QTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODQ4MTU5
QzMyMDkwMEU1N0JCRSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NEUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MTE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MzE1
OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODU0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFn
bm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU2MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdC
QkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXh0ZW5zaW9uQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JC
RSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5h
bWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1RTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3
QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkQxNTlD
MzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNj
b250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2Nv
bnRpbnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkYxNTlDMzI2
MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg3MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJj
dWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3Vp
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5
NTIgLyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5
RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI1Myw2IEBACiAJCURERDNC
N0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVy
bU91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFG
QkZFMzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUx
QkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5
bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI2NCwxMyBAQAog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyMDEwN0ZCMTU5QzMxM0MwMEU1N0JCRSAvKiBG
cmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjIzLDgg
KzMwNCwxMCBAQAogCQkJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLywKIAkJ
CQk1MjhGRjIwMTgzOUM2RjIzM0UyNkZGREEgLyogY3BwLmggKi8sCiAJCQkJODA1OEEwQTJBMEEw
MjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovLAorCQkJCUEyMDEwODQ4MTU5QzMyMDkwMEU1
N0JCRSAvKiBsZW5ndGhfbGltaXRzLmggKi8sCiAJCQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhF
IC8qIG1lbW9yeS5jICovLAogCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnku
aCAqLywKKwkJCQlBMjAxMDgxRTE1OUMzMUEwMDBFNTdCQkUgLyogbmV3ICovLAogCQkJCUNGRDEy
QzZFNDZFQkUwODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLywKIAkJCQk2QkJDODIyNEI5RDhFMjM0
RDExN0ZBMEMgLyogcHJlcHJvY2Vzcy5oICovLAogCQkJCUZGM0FBNjk0REY5QTQ0NTVBODEzMjM0
RCAvKiBzY2FubmVyLmMgKi8sCkBAIC0yNDEsMTUgKzMyNCwzMiBAQAogCQkxOTZEQjZBQjAwNkJC
ODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICov
LAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQlB
MjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICov
LAorCQkJCUEyMDEwODRBMTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAg
Ki8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNwcCAqLywK
IAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJCQkJMEExMThF
NTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1Q0ExMUVFQTky
REYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8q
IGRlYnVnLmggKi8sCisJCQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICov
LAorCQkJCUEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLywKKwkJCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oICovLAorCQkJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
Y3BwICovLAorCQkJCUEyMDEwODU0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
aCAqLywKKwkJCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICov
LAorCQkJCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJ
CUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJ
CQlBMjAxMDg1ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJ
CUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAogCQkJ
CTVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKIAkJCQkx
ODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTQ5N0M1
QzI0RUVGNDY2RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCisJCQkJNzNBNTdDNkQ0MTM3NzNB
RUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKKwkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovLAorCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIw
MCAvKiBnbHNsYW5nX3RhYi5oICovLAogCQkJCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJ
bmZvU2luay5jcHAgKi8sCiAJCQkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5r
LmggKi8sCiAJCQkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
LApAQCAtMjU3LDEyICszNTcsMTggQEAKIAkJCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyog
SW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJODU4NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3
MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYw
RiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAv
KiBNTWFwLmggKi8sCisJCQkJNzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0
ZS5oICovLAorCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICov
LAorCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8s
CisJCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8s
CiAJCQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cCAqLywKIAkJCQk4MUNDNDI0NUE4RTVBQjU1ODREMzM2RjMgLyogTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCAqLywKKwkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyogTU1hcC5oICovLAorCQkJ
CUM4QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKKwkJCQlCRTI1ODQ4
NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJCURCMjkxN0M1
QjYyNDcxMjM2NERFNEE3NSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKIAkJCQk2QkI2NkFCNTg3Mzg2
OEUyMzY3NUI2REIgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKQEAgLTI3MSwyMCArMzc3LDI1IEBACiAJCQkJQjU1
QjM1OUNGN0U0ODZEQkM0OUJCRjBBIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJOUE1QjVC
QjI1MjY4MDI0NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICovLAogCQkJCTVBMjE1OTlDNTlC
QzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRITFNMLmggKi8sCisJCQkJRDJDOUM4RUI0QTdFRkY1QjY3
RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCTk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5
NiAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJQ0VFMEM5MERGNkQ1MDREMUYzNjI5NzExIC8q
IFBhcnNlSGVscGVyLmggKi8sCiAJCQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xB
bGxvYy5jcHAgKi8sCiAJCQkJMTJFQUYwMjgzMTFFRUE0NzUzRTgyODE4IC8qIFBvb2xBbGxvYy5o
ICovLAorCQkJCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLywKKwkJCQkw
RThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovLAogCQkJCTQ4NTdFMTg3
OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCiAJCQkJOUQ0N0IxQUM4
MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8sCiAJCQkJQjQzNkVGRjA2OTEz
RkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJCUQ0MEY3OENCOUJBMEM4OTky
MUZBMzE5RCAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJMjI4QTZERURERjA4REIzNzAzOTRBN0FEIC8q
IFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJRjNFMDlEQzhFMUJGNUQyOTU4QUFDRURFIC8qIFNl
YXJjaFN5bWJvbC5oICovLAotCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRs
ZS5oICovLAogCQkJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAq
LywKKwkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQlC
N0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovLAogCQkJCTdDNkJC
MTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUEyMDEwODVEMTU5
QzMyNEYwMEU1N0JCRSAvKiB0aW1pbmcgKi8sCiAJCQkJMEEzQTI2MEY1Mzc5QTdFMjY1NUQ0MEYz
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKIAkJCQlENTNEREQwQ0RGMTVFRTFERDAxRjFBMjAg
LyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyog
VHJhbnNsYXRvckdMU0wuY3BwICovLApAQCAtMjkyLDI5ICs0MDMsMTcgQEAKIAkJCQlDM0RBRkY2
QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAogCQkJCUUzQTI5QjZF
OUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAogCQkJCUFBNTNCNjYzMkM3
NkY5MDVERjA4RTU2NCAvKiBUeXBlcy5oICovLAotCQkJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FD
OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAv
KiBVbmZvbGRTZWxlY3QuaCAqLywKKwkJCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcCAqLywKKwkJCQlBMjAxMDg3MDE1OUMzMjYyMDBFNTdCQkUgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCisJCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8q
IHVuaXN0ZC5oICovLAorCQkJCTNFRTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAq
LywKKwkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovLAogCQkJCUIxNDhE
OTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKIAkJCQk5
MDI1NDg0MkQ3Mjk3NTY3MkMyRTlBOTMgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovLAogCQkJ
CTI3QzExRUUxMEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJsZUluZm8uY3BwICovLAogCQkJCTVE
OTkzNTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLywKIAkJCQlGNzI3QUVD
OTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovLAogCQkJCTEyMEFEMEEzQjc2
NDJGQjVBOUFFM0E1NiAvKiBWZXJzaW9uR0xTTC5oICovLAotCQkJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCi0JCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8q
IGRlYnVnLmggKi8sCi0JCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcuaCAq
LywKLQkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovLAot
CQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCi0JCQkJ
NEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJREVBRjZG
MzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCi0JCQkJNzk5REM5NjExRUUy
RUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCUM4QkQ1OUJENzA1NkZGQzIx
MzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IFNvdXJjZTsKIAkJCXBhdGggPSBjb21waWxlcjsKQEAgLTMyOSw2ICs0MjgsNjIgQEAKIAkJ
CSk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMjAxMDgxRTE1OUMzMUEw
MDBFNTdCQkUgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovLAor
CQkJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlB
MjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJCUEy
MDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEy
MDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjAx
MDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTIw
MTA4MjYxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjAx
MDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovLAorCQkJCUEyMDEwODJBMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5oICovLAorCQkJCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgKi8sCisJCQkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmgg
Ki8sCisJCQkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlB
MjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLywKKwkJCQlBMjAxMDgyRjE1OUMz
MUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJQTIwMTA4MzAxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMjAxMDgzMTE1OUMzMUEwMDBF
NTdCQkUgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyog
UHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjAxMDgzMzE1OUMzMUEwMDBFNTdCQkUgLyogUHJl
cHJvY2Vzc29yLmggKi8sCisJCQkJQTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxv
Y2F0aW9uLmggKi8sCisJCQkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAq
LywKKwkJCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uaCAqLywKKwkJCQlBMjAx
MDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLywKKwkJCQlBMjAxMDgzOTE1
OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IG5ldzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUEyMDEwODRCMTU5QzMyNEYwMEU1
N0JCRSAvKiBkZXBncmFwaCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
Ki8sCisJCQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5oICov
LAorCQkJCUEyMDEwODRFMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCAqLywKKwkJCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oICovLAorCQkJCUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwICovLAorCQkJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKKwkJCQlBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBkZXBncmFw
aDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUEyMDEwODVEMTU5QzMyNEYw
MEU1N0JCRSAvKiB0aW1pbmcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAorCQkJCUEyMDEwODYwMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTIwMTA4NjExNTlD
MzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHRpbWluZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUIy
QzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zNDQsNiArNDk5LDcgQEAKIAkJCQkzREREQzc3MjE2MjAy
QTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLywKIAkJCQlBMTY0NEIwMEU5
MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNsYXRvcl9nbHNsLmEgKi8sCiAJCQkJQTQ0N0Y3NUYz
M0RBNEM0QzEyM0FDOTUyIC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovLAorCQkJCUEyMDEwN0ZG
MTU5QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4
Myw2ICs1MzksMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSAzREREQzc3MjE2MjAyQTRERTE4
MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwogCQl9OworCQlBMjAxMDdEQzE1
OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovID0geworCQkJaXNhID0gUEJYTmF0aXZl
VGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEEyMDEwN0ZDMTU5QzMxM0MwMEU1
N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJl
cHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUEyMDEwN0REMTU5QzMxM0Mw
MEU1N0JCRSAvKiBTb3VyY2VzICovLAorCQkJCUEyMDEwN0ZCMTU5QzMxM0MwMEU1N0JCRSAvKiBG
cmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5k
ZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVwcm9jZXNzb3I7CisJCQlwcm9kdWN0TmFt
ZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEEyMDEwN0ZGMTU5
QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi87CisJCQlwcm9k
dWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsK
IAkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDNzFF
NzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi87CkBAIC00MDksNyArNTgxLDExIEBACiAJ
CQl9OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENF
NyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKKwkJ
CWtub3duUmVnaW9ucyA9ICgKKwkJCQllbiwKKwkJCSk7CiAJCQltYWluR3JvdXAgPSA1QkJFRkY5
QjkxNzM4Mjk3Qjk1QzU2OEQ7CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwogCQkJcHJvamVjdFJv
b3QgPSAiIjsKQEAgLTQxOCw2ICs1OTQsNyBAQAogCQkJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQz
MiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLywKIAkJCQk1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQg
LyogdHJhbnNsYXRvcl9nbHNsICovLAogCQkJCUE4MzhFOTU3NEIzRkYxNDc5MURCREFCMSAvKiB0
cmFuc2xhdG9yX2hsc2wgKi8sCisJCQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC00MzAsOCArNjA3LDI3IEBACiAJCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVH
ZW5ITFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAv
KiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4
QjI2RCAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5ODg2QkNENUQw
REQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5
NjQ2NjU2NkQ4QzBGMDIzQTU1Mzc2MCAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTIwMTA4NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJF
IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlBMjAxMDgzQjE1
OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIw
MTA4M0MxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4M0QxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lv
blBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MDE1OUMzMUEwMDBFNTdCQkUg
LyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDExNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQyMTU5QzMxQTAwMEU1N0JC
RSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MzE1OUMzMUEwMDBFNTdC
QkUgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0NDE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODQ1MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg0NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
NDgzLDYgKzY3OSwxNyBAQAogCQkJCUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xz
LmMgaW4gU291cmNlcyAqLywKIAkJCQlFOEM3MjdBQThFOURDNUU3QjU4ODU3REYgLyogdG9rZW5z
LmMgaW4gU291cmNlcyAqLywKIAkJCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTIwMTA4NjQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NjE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA4NjcxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjAxMDg2ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NkExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4
NkIxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTYxLDYgKzc2OCwzOCBAQAog
CQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKKwkJQTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJF
IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIs
CisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAo
CisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSAi
dHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9Owor
CQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxF
X1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCisJCQkJKTsK
KwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAor
CQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOworCQkJ
fTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OwogCQlBRjdDMkNEMTBDNkZFQTA3NkIxNDFFNkUg
LyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKQEAgLTY3Miw2ICs5MTEsMTUgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMTsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi8gPSB7CisJCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlBMjAx
MDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8sCisJCQkJQTIwMTA3RkUxNTlDMzEzQzAw
RTU3QkJFIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CisJCX07CiAJ
CUM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHJldmlzaW9u
IDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGls
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5
cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFt
ZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYK
KyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCShyZXZpc2lvbiAxMjIyMzkp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCiAjZGVmaW5l
IE1JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBCVUlMRF9WRVJTSU9OIDAKLSNkZWZpbmUgQlVJTERf
UkVWSVNJT04gMTAwOQorI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAxMTY2CiAKICNkZWZpbmUgU1RS
SU5HSUZZKHgpICN4CiAjZGVmaW5lIE1BQ1JPX1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsMTEgKzE2LDYgQEAgbmFtZXNwYWNlIHsKIC8v
IGV2YWx1YXRlZC4gVGhpcyBpcyB1bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywg
YnV0IGlzIHNvbWV0aGluZyB0bwogLy8gY29uc2lkZXIuCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
YXRhbihmbG9hdCwgZmxvYXQpIiwKLSAgICAidmVjMiB3ZWJnbF9hdGFuX2VtdSh2ZWMyIHksIHZl
YzIgeCkgeyByZXR1cm4gdmVjMihhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pKTsg
fSIsCi0gICAgInZlYzMgd2ViZ2xfYXRhbl9lbXUodmVjMyB5LCB2ZWMzIHgpIHsgcmV0dXJuIHZl
YzMoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSk7
IH0iLAotICAgICJ2ZWM0IHdlYmdsX2F0YW5fZW11KHZlYzQgeSwgdmVjNCB4KSB7IHJldHVybiB2
ZWM0KGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSks
IGF0YW4oeVszXSwgeFszXSkpOyB9IiwKLQogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBj
b3MoZmxvYXQpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzIpIiwKICAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzMpIiwKQEAgLTQxLDExICszNiw2IEBA
IGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXIKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxv
YXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyBy
ZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2
ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0s
IHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0
IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlb
MF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsg
fSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8g
MC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9u
RW11bGF0aW9uVmVydGV4U291cgogfTsKIAogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRTb3VyY2VbXSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbihm
bG9hdCwgZmxvYXQpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMyLCB2
ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjMywgdmVjMykiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzQsIHZlYzQpIiwKLQogICAgICJ3
ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lv
biBmbG9hdCBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9u
IHZlYzIgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgYSkgeyByZXR1cm4g
Y29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIHdlYmdsX2Nvc19lbXUo
d2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gdmVjNCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24g
dmVjNCBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIGRpc3RhbmNlKGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2Rpc3RhbmNl
X2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6ICh5KSAtICh4KSkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGRvdChmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9kb3Rf
ZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90
KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZl
YzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKIAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgoZmxvYXQpIiwKKyAgICAiI2RlZmlu
ZSB3ZWJnbF9sZW5ndGhfZW11KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBsZW5ndGgodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBs
ZW5ndGgodmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwg
ZmxvYXQpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzIsIHZlYzIpIiwK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzQsIHZlYzQpIiwKLQotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBub3JtYWxpemUoZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9ub3Jt
YWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjAp
KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCiAgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdChmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9yZWZs
ZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICogKE4pKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKQEAgLTEwMiwxMCArODIsNiBAQCBjb25zdCBj
aGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvCiBjb25zdCBib29sIGtGdW5jdGlvbkVt
dWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBX
b3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrWwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgy
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Nb2Q0XzQKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTMKQEAgLTEzNiwxMCArMTA4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRp
b25WZXJ0ZXhNYXNrWwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CiAjZWxzZQog
ICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4KLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQXRhbjFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuMl8yCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbkF0YW4zXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjRfNAog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwpAQCAtMTU2LDEwICsxMjQsNiBAQCBjb25zdCBi
b29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rp
b25FbXVsYXRpb25WZXJ0ZXhNYXNrWwogfTsKIAogY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRp
b25GcmFnbWVudE1hc2tbXSA9IHsKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4z
XzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjRfNAogI2lmIGRlZmluZWQoX19BUFBMRV9f
KQotICAgIC8vIFdvcmsgYXJvdW5kIGEgQVRJIGRyaXZlciBidWcgaW4gTWFjIHRoYXQgY2F1c2Vz
IGNyYXNoZXMuCisgICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KICAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MyCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zNAor
ICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3Qx
XzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAg
IHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKICNlbHNlCisg
ICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0Ci0jZW5kaWYKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2UyXzIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKQEAgLTIwMSwxMCAr
MTgxLDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudE1hcwogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25N
b2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25z
dCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzCiAgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QyXzIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CisjZW5kaWYKICAgICBmYWxzZSAgLy8gVEZ1bmN0
aW9uVW5rbm93bgogfTsKIApAQCAtMzg2LDE4ICszNjMsMTIgQEAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OklkZW50aWZ5RnVuY3RpbwogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoK
LSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBU
RnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVP
cERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBU
RnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZs
ZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSw3IEBAIHByaXZh
dGU6CiAgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIC8vCiAgICAgZW51bSBUQnVpbHRJ
bkZ1bmN0aW9uIHsKLSAgICAgICAgVEZ1bmN0aW9uQXRhbjFfMSA9IDAsICAvLyBmbG9hdCBhdGFu
KGZsb2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4yXzIsICAvLyB2ZWMyIGF0YW4o
dmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4zXzMsICAvLyB2ZWMzIGF0YW4odmVj
MywgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW40XzQsICAvLyB2ZWM0IGF0YW4odmVjNCwg
dmVjMik7Ci0KLSAgICAgICAgVEZ1bmN0aW9uQ29zMSwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7Cisg
ICAgICAgIFRGdW5jdGlvbkNvczEgPSAwLCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKICAgICAgICAg
VEZ1bmN0aW9uQ29zMiwgIC8vIHZlYzIgY29zKHZlYzIpOwogICAgICAgICBURnVuY3Rpb25Db3Mz
LCAgLy8gdmVjMyBjb3ModmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNv
cyh2ZWM0KTsKQEAgLTcwLDExICs2NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFRGdW5jdGlvbkxl
bmd0aDMsICAvLyBmbG9hdCBsZW5ndGgodmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDQs
ICAvLyBmbG9hdCBsZW5ndGgodmVjNCk7CiAKLSAgICAgICAgVEZ1bmN0aW9uTW9kMV8xLCAgLy8g
ZmxvYXQgbW9kKGZsb2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDJfMiwgIC8vIHZl
YzIgbW9kKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25Nb2QzXzMsICAvLyB2ZWMzIG1v
ZCh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kNF80LCAgLy8gdmVjNCBtb2QodmVj
NCwgdmVjNCk7Ci0KICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMSwgIC8vIGZsb2F0IG5vcm1h
bGl6ZShmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTIsICAvLyB2ZWMyIG5vcm1h
bGl6ZSh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMywgIC8vIHZlYzMgbm9ybWFs
aXplKHZlYzMpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDEw
ICs4LDIxIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0
ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaCIKKworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAg
ICByZXR1cm4gc3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNf
U1BFQzsKK30KIAogbmFtZXNwYWNlIHsKIGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAt
MTIzLDcgKzEzNCw3IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2
YWxpZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09
IFNIX1dFQkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAg
ICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAg
ICAvLyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4g
VGhlIGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzIsMTIgQEAgYm9vbCBUQ29t
cGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkKICAgICAgICAgICAg
IHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAgICAgIGlmIChzdWNj
ZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElPTlMpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9vdCwgKGNvbXBpbGVP
cHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAgICAgICAgICAgcmV3
cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9yLWxvb3AgbWFya3Vw
IG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MuCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRI
X0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3Bz
V2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1LDEyICsyNTIsNTgg
QEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTgogICAgIH0KIH0KIAor
dm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpCit7Cisg
ICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigiLCAiY3NzX21haW4oIik7CisgICAgcm9v
dC0+dHJhdmVyc2UoJnJlbmFtZXIpOworfQorCiBib29sIFRDb21waWxlcjo6dmFsaWRhdGVMaW1p
dGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIFZhbGlkYXRlTGltaXRhdGlvbnMgdmFs
aWRhdGUoc2hhZGVyVHlwZSwgaW5mb1NpbmsuaW5mbyk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnZh
bGlkYXRlKTsKICAgICByZXR1cm4gdmFsaWRhdGUubnVtRXJyb3JzKCkgPT0gMDsKIH0KIAorYm9v
bCBUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3Qs
IGJvb2wgb3V0cHV0R3JhcGgpCit7CisgICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BF
QykgeworICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25zIG11c3Qg
YmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdMIHNwZWMuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgewor
ICAgICAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOworCisgICAgICAgIC8vIE91dHB1
dCBhbnkgZXJyb3JzIGZpcnN0LgorICAgICAgICBib29sIHN1Y2Nlc3MgPSBlbmZvcmNlRnJhZ21l
bnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpIHsKKyAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5r
LmluZm8pOworICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJp
Y3Rpb25zKHJvb3QpOworICAgIH0KK30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VGcmFnbWVu
dFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkK
K3sKKyAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKGdyYXBoKTsKKyAgICBy
ZXR1cm4gcmVzdHJpY3Rvci5udW1FcnJvcnMoKSA9PSAwOworfQorCitib29sIFRDb21waWxlcjo6
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkK
K3sKKyAgICBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyByZXN0cmljdG9yKGluZm9TaW5rLmlu
Zm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhyb290KTsKKyAgICByZXR1
cm4gcmVzdHJpY3Rvci5udW1FcnJvcnMoKSA9PSAwOworfQorCiB2b2lkIFRDb21waWxlcjo6Y29s
bGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBDb2xsZWN0QXR0
cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZv
ciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1c2Ugb2Yg
aW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21w
dXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2Jvb2wgRGV0ZWN0
TG9vcERpc2NvbnRpbnVpdHk6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1M
b29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IHJldHVybiBtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRp
bnVpdHk6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQorewor
ICAgIGlmIChtTG9vcERpc2NvbnRpbnVpdHkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKKyAgICB7CisgICAgICBj
YXNlIEVPcEtpbGw6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BCcmVhazoKKyAgICAg
IGNhc2UgRU9wQ29udGludWU6CisgICAgICAgIG1Mb29wRGlzY29udGludWl0eSA9IHRydWU7Cisg
ICAgICBjYXNlIEVPcFJldHVybjoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQor
Citib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGlu
dWl0eTsKK30KKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIERldGVjdExvb3BEaXNjb250aW51aXR5IGRldGVjdExvb3BEaXNjb250aW51
aXR5OworICAgIHJldHVybiBkZXRlY3RMb29wRGlzY29udGludWl0eS50cmF2ZXJzZShub2RlKTsK
K30KKworYm9vbCBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpCit7CisgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gZmFsc2U7CisgICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBE
ZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVu
YXJ5ICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAg
IHsKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgIGNhc2UgRU9wREZkeToKKyAgICAgICAgbUdy
YWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiAhbUdyYWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVj
dEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVP
cEZ1bmN0aW9uQ2FsbCkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+aXNVc2VyRGVmaW5lZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFu
Z2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4
dHVyZTJEIiB8fAorICAgICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmUyRFByb2oiIHx8Cisg
ICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXaGVuIGEg
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2UgaGF2ZSB0bworICAgICAgICAgICAg
Ly8gY29uc2VydmF0aXZlbHkgYXNzdW1lIGl0IHRvIGNvbnRhaW4gZ3JhZGllbnQgb3BlcmF0aW9u
cworICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAhbUdyYWRpZW50T3BlcmF0aW9uOworfQorCitib29sIGNvbnRhaW5z
R3JhZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0R3JhZGll
bnRPcGVyYXRpb24gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb247CisgICAgcmV0dXJuIGRldGVjdEdy
YWRpZW50T3BlcmF0aW9uLnRyYXZlcnNlKG5vZGUpOworfQorfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisvLyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcg
d2l0aCBITFNMJ3MgbGFjayBvZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMg
ZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdy
YWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFVEVD
VERJU0NPTlRJTlVJVFlfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKy8vIENoZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBh
IHZhcmlhYmxlIG51bWJlciBvZiBpdGVyYXRpb25zCitjbGFzcyBEZXRlY3RMb29wRGlzY29udGlu
dWl0eSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRy
YXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSk7CisgICAgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBi
b29sIG1Mb29wRGlzY29udGludWl0eTsKK307CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGlu
dWl0eShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKy8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0
aW9ucyB3aGljaCBjb21wdXRlIGdyYWRpZW50cworY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRp
b24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2
ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wg
bUdyYWRpZW50T3BlcmF0aW9uOworfTsKKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9u
KFRJbnRlcm1Ob2RlICpub2RlKTsKKworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RE
SVNDT05USU5VSVRZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlhZ25vc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdu
b3N0aWNzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKworVERpYWdub3N0aWNz
OjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1NpbmsoaW5mb1Npbmsp
Cit7Cit9CisKK1REaWFnbm9zdGljczo6flREaWFnbm9zdGljcygpCit7Cit9CisKK3ZvaWQgVERp
YWdub3N0aWNzOjp3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87CisgICAgVFByZWZpeFR5cGUgcHJlZml4ID0g
c2V2ZXJpdHkgPT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKworICAg
IC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJh
aW5mbyAqLworICAgIHNpbmsucHJlZml4KHByZWZpeCk7CisgICAgc2luay5sb2NhdGlvbihFbmNv
ZGVTb3VyY2VMb2MobG9jLmZpbGUsIGxvYy5saW5lKSk7CisgICAgc2luayA8PCAiJyIgPDwgdG9r
ZW4gPDwgICInIDogIiA8PCByZWFzb24gPDwgIiAiIDw8IGV4dHJhIDw8ICJcbiI7Cit9CisKK3Zv
aWQgVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7Cisg
ICAgbUluZm9TaW5rLmRlYnVnIDw8IHN0cjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OnByaW50
KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KQoreworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdu
b3N0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KKyNkZWZp
bmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKworY2xhc3MgVEluZm9TaW5rOworCitjbGFzcyBURGlh
Z25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBURGlh
Z25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luayk7CisgICAgdmlydHVhbCB+VERpYWdub3N0aWNz
KCk7CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CisK
KyAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEp
OworCisgICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOworCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJpdmF0ZToKKyAgICBUSW5mb1Np
bmsmIG1JbmZvU2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVj
dGl2ZUhhbmRsZXIuaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisKK3N0YXRpYyBU
QmVoYXZpb3IgZ2V0QmVoYXZpb3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga1JlcXVpcmUoInJlcXVpcmUiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0VuYWJsZSgiZW5hYmxlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXNhYmxlKCJkaXNhYmxlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtXYXJuKCJ3YXJuIik7CisKKyAgICBpZiAoc3RyID09IGtSZXF1aXJlKSByZXR1cm4gRUJoUmVx
dWlyZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0VuYWJsZSkgcmV0dXJuIEVCaEVuYWJsZTsKKyAg
ICBlbHNlIGlmIChzdHIgPT0ga0Rpc2FibGUpIHJldHVybiBFQmhEaXNhYmxlOworICAgIGVsc2Ug
aWYgKHN0ciA9PSBrV2FybikgcmV0dXJuIEVCaFdhcm47CisgICAgcmV0dXJuIEVCaFVuZGVmaW5l
ZDsKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcykKKyAgICA6IG1FeHRlbnNpb25CZWhhdmlvcihl
eHRCZWhhdmlvciksCisgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIoKQoreworfQorCit2b2lkIFREaXJl
Y3RpdmVIYW5kbGVyOjpoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBt
c2cpCit7CisgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9S
LCBsb2MsIG1zZywgIiIsICIiKTsKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxl
UHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1NUREdMKCJTVERHTCIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrT3B0aW1pemUoIm9wdGltaXplIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEZWJ1ZygiZGVidWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga09uKCJvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT2ZmKCJvZmYiKTsK
KworICAgIGJvb2wgaW52YWxpZFZhbHVlID0gZmFsc2U7CisgICAgaWYgKG5hbWUgPT0ga1NUREdM
KQorICAgIHsKKyAgICAgICAgLy8gVGhlIFNUREdMIHByYWdtYSBpcyB1c2VkIHRvIHJlc2VydmUg
cHJhZ21hcyBmb3IgdXNlIGJ5IGZ1dHVyZQorICAgICAgICAvLyByZXZpc2lvbnMgb2YgR0xTTC4g
SWdub3JlIGl0LgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0g
a09wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5vcHRp
bWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEub3B0
aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0K
KyAgICBlbHNlIGlmIChuYW1lID09IGtEZWJ1ZykKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9
PSBrT24pIG1QcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBr
T2ZmKSBtUHJhZ21hLmRlYnVnID0gZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0g
dHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsIGxvYywgbmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW52YWxpZFZhbHVlKQorICAgICAgbURpYWdu
b3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHByYWdtYSB2YWx1ZSIsIHZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiJ29uJyBvciAnb2ZmJyBleHBlY3RlZCIpOworfQorCit2
b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKQoreworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRXh0QWxsKCJhbGwiKTsKKworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9
IGdldEJlaGF2aW9yKGJlaGF2aW9yKTsKKyAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoVW5kZWZp
bmVkKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9y
IiwgbmFtZSwgImludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
YW1lID09IGtFeHRBbGwpCisgICAgeworICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVx
dWlyZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6
RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJleHRlbnNpb24iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2Fubm90IGhhdmUgJ3JlcXVpcmUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAnZW5hYmxlJyBiZWhh
dmlvciIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZp
b3IuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZh
bDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVEV4dGVuc2lvbkJl
aGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmZpbmQobmFtZSk7Cisg
ICAgaWYgKGl0ZXIgIT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKQorICAgIHsKKyAgICAgICAg
aXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBwcDo6RGlhZ25vc3RpY3M6OlNldmVyaXR5IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpF
UlJPUjsKKyAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6
CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpFUlJPUjsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgIGNh
c2UgRUJoRGlzYWJsZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OldBUk5J
Tkc7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8oc2V2
ZXJpdHksIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1l
LCAiaXMgbm90IHN1cHBvcnRlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5k
bGVWZXJzaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGtWZXJzaW9uID0gMTAwOworCisgICAgaWYgKHZlcnNpb24gIT0ga1ZlcnNpb24pCisgICAg
eworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB2
ZXJzaW9uOworICAgICAgICBzdGQ6OnN0cmluZyBzdHIgPSBzdHJlYW0uc3RyKCk7CisgICAgICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciIsIHN0ciwgIm5vdCBz
dXBwb3J0ZWQiKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVf
SEFORExFUl9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNp
bmNsdWRlICJjb21waWxlci9QcmFnbWEuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCIKKworY2xhc3MgVERpYWdub3N0aWNzOworCitjbGFz
cyBURGlyZWN0aXZlSGFuZGxlciA6IHB1YmxpYyBwcDo6RGlyZWN0aXZlSGFuZGxlcgoreworICBw
dWJsaWM6CisgICAgVERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciwKKyAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsK
KyAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQorICAgIGNvbnN0IFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBtRXh0ZW5zaW9uQmVo
YXZpb3I7IH0KKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG1zZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVWZXJzaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKTsKKworICBwcml2YXRlOgorICAgIFRQ
cmFnbWEgbVByYWdtYTsKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlv
cjsKKyAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCShyZXZpc2lv
biAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9F
WFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1Jf
SU5DTFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+
CisjaW5jbHVkZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAg
ICAgRUJoUmVxdWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsy
MSwxNyBAQCB0eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JT
dHJpbmcoVEJlaGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVx
dWlyZToKLSAgICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgot
ICAgICAgICByZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJl
dHVybiAid2FybiI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlz
YWJsZSI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2go
YikKKyAgICB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAg
ICBjYXNlIEVCaEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiBy
ZXR1cm4gIndhcm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOwor
ICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0
cmluZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4g
ZXh0ZW5zaW9uIG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmlu
ZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9O
X1RBQkxFX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIFRTdHJpbmcgRGVmYXVsdFByZWNpc2lvbkZy
YWdtZW50KAogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4K
IC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFu
dHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBC
dWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcs
OSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoCiAgICAgcyA8PCAi
Y29uc3QgaW50IGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNl
cy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKICAgICBzIDw8ICJjb25zdCBp
bnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1h
Z2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7
IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyA8PCAiOyI7CisKKyAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVS
U19TUEVDKQorICAgICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8
IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsK
IH0KQEAgLTUxMyw3ICs1MTUsNyBAQCB2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShTaFNoYWRl
clR5cGUgCiAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9y
dGVkIik7CiAgICAgfQogCi0gICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5Db25z
dGFudHMocmVzb3VyY2VzKSk7CisgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5D
b25zdGFudHMoc3BlYywgcmVzb3VyY2VzKSk7CiB9CiAKIHZvaWQgSWRlbnRpZnlCdWlsdElucyhT
aFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCkBAIC01MjYsMTEgKzUyOCwyMiBA
QCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8KICAgICBz
d2l0Y2godHlwZSkgewogICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29y
ZCIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
Q29vcmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nv
bG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb2xvciwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlw
ZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENv
b3JkIiksICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9p
bnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9u
dEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmlu
ZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7
CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwg
Z2xfRnJhZ0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KKyAg
ICAgICAgLy8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2
YWlsYWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNf
U1BFQykgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
W2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
RGF0YSwgICAgNCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01peENvbG9yIiksICAg
ICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAg
ICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAgICAgICAgICAgICAgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQsIHRydWUpKSk7CisgICAgICAgIH0K
KwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKQEAgLTYyMCw3
ICs2MzMsOCBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAKICAg
ICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNo
KHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJB
R01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7
CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAg
ICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRh
LCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVz
b3VyY2VzLk1heERyYXdCdWZmZXJzKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIklu
aXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFs
aXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBB
bGxvY2F0ZSBhIFRMUyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxp
emVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRs
c2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgw
ICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19G
cmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJz
ZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJz
ZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1Zh
bHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9
IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgp
OiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3
IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxl
IHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7Cisg
ICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBp
bmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhy
ZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRl
eHQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNr
aW5nIGZvciBzcGVlZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNl
Q29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFs
dWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4
dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsNCAr
MTMsMTQgQEAgYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUds
b2JhbFBhcnNlQ29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBU
UGFyc2VDb250ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRl
cjsKK2V4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7
CisjZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0
eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4
dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRp
ZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
CShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzczLDcgKzM3Myw3IEBAIFRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXQKIC8vIHRoZWlyIG9wZXJhdG9yIHRv
IEVPcFNlcXVlbmNlLgogLy8KIC8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5vZGUsIHdoaWNoIGNv
dWxkIGJlIHRoZSBvbmUgcGFzc2VkIGluIGlmCi0vLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdh
dGUuCisvLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUgYnV0IG5vIG9wZXJhdG9yIHdhcyBz
ZXQuCiAvLwogVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3Bl
cmF0b3IoVEludGVybU5vZGUqIG5vZGUsIFRPcGVyYXRvciBvcCwgVFNvdXJjZUxvYyBsaW5lKQog
ewpAQCAtNTkyLDEwICs1OTIsMTAgQEAgVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNl
bGVjdGlvbgogICAgIC8vCiAKICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldEJDb25zdCgpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxOworICAgICAg
ICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlUGFpci5ub2RlMSA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BT
ZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTI7CisgICAgICAgICAgICByZXR1cm4g
bm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2RlMiwgRU9w
U2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVMTDsKICAgICB9CiAKICAg
ICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgbm9k
ZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKQEAgLTY1Niw2ICs2NTYsNyBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlv
biBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJt
U2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBl
KCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0
NDQsOSArMTQ0NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMK
ICAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90
ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXpl
KCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCi12
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpCi17Ci0gICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7Ci0gICAgcHJhZ21hVGFibGUg
PSBuZXcgVFByYWdtYVRhYmxlKCk7Ci0gICAgKnByYWdtYVRhYmxlID0gcFRhYmxlOwotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw5IEBAIFRTdHJpbmcgbWFwTG9uZ05hbWUoaW50IGlk
LCBjb25zdCBUU3RyaW4KICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDEw
ICs2LDEyIEBACiAKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAKKyNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxl
Y3QuaCIKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TZWFyY2hTeW1ib2wuaCIKKyNpbmNsdWRlICJjb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
QEAgLTIwLDEzICsyMiwxMyBAQCBuYW1lc3BhY2Ugc2gKIFRTdHJpbmcgc3RyKGludCBpKQogewog
ICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAg
c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CiAgICAgcmV0dXJuIGJ1
ZmZlcjsKIH0KIAogT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0
KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQp
CiB7Ci0gICAgbVVuZm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRTZWxlY3QoY29udGV4dCwgdGhpcyk7
CisgICAgbVVuZm9sZFNob3J0Q2lyY3VpdCA9IG5ldyBVbmZvbGRTaG9ydENpcmN1aXQoY29udGV4
dCwgdGhpcyk7CiAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CiAKICAgICBtVXNlc1RleHR1
cmUyRCA9IGZhbHNlOwpAQCAtMzgsNiArNDAsMTIgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChU
UGFyc2VDb250ZXh0ICZjbwogICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNl
c1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJl
Q3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7
CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxz
ZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRw
dXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbVNjb3BlRGVwdGggPSAw
OwogCiAgICAgbVVuaXF1ZUluZGV4ID0gMDsKKworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51
aXR5ID0gZmFsc2U7CisgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwogfQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExT
TCgpCiB7Ci0gICAgZGVsZXRlIG1VbmZvbGRTZWxlY3Q7CisgICAgZGVsZXRlIG1VbmZvbGRTaG9y
dENpcmN1aXQ7CiB9CiAKIHZvaWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKIHsKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQu
dHJlZVJvb3QpOworCiAgICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8v
IE91dHB1dCB0aGUgYm9keSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhl
IGhlYWRlcgogICAgIGhlYWRlcigpOwogCi0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1I
ZWFkZXIuY19zdHIoKTsKLSAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIo
KTsKKyAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAg
bUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKIH0KIAogVEluZm9TaW5r
QmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCkBAIC0yMDUsMjUgKzIxOSwxMSBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CiAgICAg
ICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlIGZldGNoIGZ1bmN0aW9u
cyAiZmxpcCIgdGhlIFkgY29vcmRpbmF0ZSBpbiBvbmUgd2F5IG9yIGFub3RoZXIuIFRoaXMgaXMg
YmVjYXVzZSB0ZXh0dXJlcyBhcmUgc3RvcmVkCi0gICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUg
T3BlbkdMIGNvbnZlbnRpb24sIGkuZS4gKDAsIDApIGlzICJib3R0b20gbGVmdCIsIHJhdGhlciB0
aGFuIHRoZSBEM0QgY29udmVudGlvbiB3aGVyZSAoMCwgMCkKLSAgICAgICAgLy8gaXMgInRvcCBs
ZWZ0Ii4gU2luY2UgdGhlIEhMU0wgdGV4dHVyZSBmZXRjaCBmdW5jdGlvbnMgZXhwZWN0IHRleHR1
cmVzIHRvIGJlIHN0b3JlZCBhY2NvcmRpbmcgdG8gdGhlIEQzRAotICAgICAgICAvLyBjb252ZW50
aW9uLCB0aGUgWSBjb29yZGluYXRlIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgaXMgYWRqdXN0
ZWQgdG8gY29tcGVuc2F0ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHNpbXBsZXN0IGNh
c2UgaXMgdGV4dHVyZTJEIHdoZXJlIHRoZSBtYXBwaW5nIGlzIFkgLT4gMS1ZLCB3aGljaCBtYXBz
IFswLCAxXSAtPiBbMSwgMF0uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlMkRQ
cm9qIGZ1bmN0aW9ucyBhcmUgbW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIHRoZSBwcm9qZWN0aW9u
IGRpdmlkZXMgYnkgZWl0aGVyIFogb3IgVy4gRm9yIHRoZSB2ZWMzCi0gICAgICAgIC8vIGNhc2Us
IHRoZSBtYXBwaW5nIGlzIFkgLT4gWi1ZIG9yIFkvWiAtPiAxLVkvWiwgd2hpY2ggYWdhaW4gbWFw
cyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgY3ViZSB0ZXh0
dXJlcyB0aGUgbWFwcGluZyBpcyBZIC0+IC1ZLCB3aGljaCBtYXBzIFstMSwgMV0gLT4gWzEsIC0x
XS4gVGhpcyBpcyBub3Qgc3VmZmljaWVudCBvbiBpdHMgb3duIGZvciB0aGUKLSAgICAgICAgLy8g
K1kgYW5kIC1ZIGZhY2VzLCB3aGljaCBhcmUgbm93IG9uIHRoZSAid3Jvbmcgc2lkZXMiIG9mIHRo
ZSBjdWJlLiBUaGlzIGlzIGNvbXBlbnNhdGVkIGZvciBieSBleGNoYW5naW5nIHRoZQotICAgICAg
ICAvLyArWSBhbmQgLVkgZmFjZXMgZXZlcnl3aGVyZSBlbHNlIHRocm91Z2hvdXQgdGhlIGNvZGUu
Ci0gICAgICAgIAogICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQp
XG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRChzLCBmbG9hdDIodC54LCAxIC0gdC55KSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIK
ICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC0yMzIsNyArMjMyLDcgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIDEgLSB0LnksIDAsIGJpYXMpKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6
OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0
LngsIHQueiAtIHQueSwgMCwgdC56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEcHJvaihzLCBmbG9hdDQodC54LCB0LncgLSB0LnksIHQueiwgdC53KSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgogICAgICAgICAgICAg
ICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjU1
LDEyICsyNTUsMTIgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDMgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCAxIC0g
KHQueSAvIHQueiksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCAxIC0g
KHQueSAvIHQudyksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgZmxvYXQzKHQueCwgLXQueSwgdC56KSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTI3OCw3ICsyNzgsNzMgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VC
RSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0Lngs
IC10LnksIHQueiwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlc2UgKkxvZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBm
cmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2lu
ZyBkaXNjb250aW51b3VzIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRExvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCwgdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
TG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9k
KHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRFByb2pMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxv
ZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1w
bGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBm
bG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJD
VUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54
LCB0LnksIHQueiwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtODk3LDcgKzk2Myw3IEBAIGJvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RT
dHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxk
TmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtOTczLDkgKzEwMzksOSBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZp
ZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmll
bGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
Ii4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Umln
aHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxk
VHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29y
YXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRU
eXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEpCiAg
ICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMDEsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LAogICAgICAgY2FzZSBFT3BGcmFj
dDogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImxlbmd0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7
IGJyZWFrOwotICAgICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZGR4KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmd2lkdGgoIiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVP
cERGZHg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5z
aWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZGR5KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BGd2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8
fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIi
LCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImFsbCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwpAQCAtMTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5l
RGlyZWN0aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1Np
bmdsZVN0YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
dHJhdmVyc2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4i
OwogICAgICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM4Miw2NCBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRTdHJpbmcg
bmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3Ry
aW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAi
bWFpbiIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9u
ID8gIkxvZDAoIiA6ICIoIik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
bmFtZSA9PSAibWFpbiIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX21haW4oIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRl
KG5hbWUpIDw8ICIoIjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRl
cm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdl
dFNlcXVlbmNlKCk7CiAKLSAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNl
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
JmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6
ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKIAotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQor
ICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3lt
Ym9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1
Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3lt
Ym9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRUeXBlTmFt
ZSgpKSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7CisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXpl
KCkgLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNlcXVl
bmNlLmVyYXNlKHNlcXVlbmNlLmJlZ2luKCkpOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA+IDEp
CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBzZXF1ZW5jZVsxXS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRFbmRMaW5lKCkpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAifVxuIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICJ9
XG4iOwogCi0gICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rp
b24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIm1haW4iKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTEz
NTAsNTQgKzE0NDcsMTA2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250
aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIgOiAiKCIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4
dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJE
TG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQog
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQogICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlh
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAgewpAQCAtMTU4MywxMSAr
MTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpCiAKICAg
ICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICAgICAg
b3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgo
KTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0ZW1lbnQKICAgICB7Ci0gICAgICAg
IG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKKyAgICAgICAg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOwogCiAg
ICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSArMTc0OSwxMSBAQCBib29sIE91dHB1
dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpCiAKICAgICAgICAgaWYgKG5vZGUtPmdldFRy
dWVCbG9jaygpKQogICAgICAgICB7Ci0gICAgICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0
VHJ1ZUJsb2NrKCkpOwogICAgICAgICB9CiAKICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShu
b2RlLT5nZXRMaW5lKCkpOwotICAgICAgICBvdXQgPDwgIjt9XG4iOworICAgICAgICBvdXQgPDwg
Ijtcbn1cbiI7CiAKICAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKICAgICAgICAg
ewpAQCAtMTYxNCwxMCArMTc2MywxMCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpCiAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1
dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAg
ICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsK
LSAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhM
U0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50CiAKIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAgICBib29sIHdhc0Rpc2NvbnRp
bnVvdXMgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAgICBpZiAoIW1JbnNpZGVEaXNj
b250aW51b3VzTG9vcCkKKyAgICB7CisgICAgICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9
IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobm9kZSk7CisgICAgfQorCiAgICAgaWYgKGhhbmRs
ZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
Njc2LDcgKzE4MzIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
CiAKICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQogICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Qm9k
eSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdl
dEJvZHkoKSk7CiAgICAgfQogCiAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5l
KCkpOwpAQCAtMTY5NCw2ICsxODUwLDggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIAogCiAgICAgb3V0IDw8ICJ9XG4iOwogCisgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gd2FzRGlzY29udGludW91czsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
MTczMiw2ICsxODkwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRl
bWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5v
ZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7
CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wgT3V0cHV0SExT
TDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAgLTE3NTksOSAr
MTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNDcsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbgogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9
IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAgICAgICBpZiAoaXRlcmF0
aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhfTE9PUF9JVEVS
QVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAv
LyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hp
bGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBj
bGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oMjU1LCBpdGVyYXRp
b25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3Jl
bWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwogCiAgICAg
ICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBlZExp
bWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA4NSw4IEBAIGJvb2wgT3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KICAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7
fVxuIjsKIAotICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAg
ICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gMjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwg
Kz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVy
YXRpb25zIC09IE1BWF9MT09QX0lURVJBVElPTlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3ICsyMTgyLDcgQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0
cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxk
TmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQu
Z2V0RmllbGROYW1lKCkpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjM1LDggQEAg
VFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgICAgcmV0
dXJuICJzYW1wbGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6
CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMDcsNyBA
QCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAg
ICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmll
bGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29y
YXRlRmllbGQoZmllbGQuZ2V0RmllbGROYW1lKCksIHR5cGUpICsgYXJyYXlTdHJpbmcoZmllbGQp
ICsgIjtcbiI7CiAgICAgICAgIH0KIAogICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4iOwpAQCAt
MjQzNCw0ICsyNjA2LDE0IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVVbmlmb3JtKGNv
bnMKICAgICAKICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRw
dXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgw
LCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcp
OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNM
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcgQEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1j
bGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91
dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogewpAQCAtMzMsNiArMzMsNyBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgc3RhdGljIFRTdHJp
bmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRl
Y29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFBy
ZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMg
VFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlw
ZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5n
ICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOwogCiAgIHByb3RlY3RlZDoKICAgICB2
b2lkIGhlYWRlcigpOwpAQCAtNDcsNiArNDgsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCop
OwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwogICAg
IGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wgaGFu
ZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRwdXRUcmlw
bGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcg
JmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0LDcgQEAg
Y2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIFRTdHJpbmcgc3Ry
dWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQg
Jm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVjdCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRT
aG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENpcmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rp
b247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFtcwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0
cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZTsKICAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKICAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7CisgICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRExvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDA7CisgICAg
Ym9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXM7CiAgICAgYm9vbCBt
VXNlc0RlcHRoUmFuZ2U7CiAgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKICAgICBib29sIG1Vc2Vz
UG9pbnRDb29yZDsKQEAgLTEzMiw2ICsxNDAsMTAgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVycwogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKIAogICAgIGlu
dCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcworCisgICAgYm9v
bCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rp
b247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9OwogfQogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9QYXJzZUhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDMzICsxMCw3IEBACiAj
aW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNs
dWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCi0KLWV4dGVybiAiQyIgewotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vz
c29yKCk7Ci1leHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQ
cmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotfQotCi1zdGF0
aWMgdm9pZCBSZXBvcnRJbmZvKFRJbmZvU2lua0Jhc2UmIHNpbmssCi0gICAgICAgICAgICAgICAg
ICAgICAgIFRQcmVmaXhUeXBlIHR5cGUsIFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQotewotICAgIC8qIFZDKysgZm9y
bWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLwotICAg
IHNpbmsucHJlZml4KHR5cGUpOwotICAgIHNpbmsubG9jYXRpb24obG9jKTsKLSAgICBzaW5rIDw8
ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmFJbmZvIDw8
ICJcbiI7Ci19Ci0KLXN0YXRpYyB2b2lkIERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb25zdCBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQotewotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2
aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAg
IGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBQcmVkZWZpbmVJ
bnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci19CisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIgogCiAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwogLy8KQEAgLTUyLDcgKzI2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZp
ZWxkcyhjbwogewogICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKICAg
ICBpZiAoZmllbGRzLm51bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE0LDIwICs4OCwy
MCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvCiAgICAgICAgICAg
ICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0
aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0
c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2Ui
LCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ld
ICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
cGFyc2VNYXRyaXhGaWVsZHMoY28KICAgICBmaWVsZHMuY29sID0gLTE7CiAKICAgICBpZiAoY29t
cFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5n
dGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBTdHJp
bmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKICAgICAgICAgZmll
bGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CiAgICAgfSBlbHNlIGlmIChjb21wU3RyaW5n
WzFdID09ICdfJykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBm
aWVsZHMud2hvbGVSb3cgPSB0cnVlOwpAQCAtMTcwLDcgKzE0NCw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY28KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29t
cFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8CiAgICAgICAgICAgICBj
b21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAg
IGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5n
LmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3RyaW5nWzBdIC0g
JzAnOwpAQCAtMTc4LDcgKzE1Miw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhG
aWVsZHMoY28KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNv
bnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJyb3Io
bGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAgICAg
ICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0g
ZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQg
ZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwg
IiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDExIEBA
IHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcg
b3BlcmFuZCkKIHsKLSAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAot
ICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5k
IG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAg
ICAgICAgIG9wLCBvcGVyYW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBv
cCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5k
IAorICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNv
bnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0u
c3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJ
bmZvLmNfc3RyKCkpOwogfQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VD
b250ZXh0Ojp1bmFyeU9wRXJyb3IoaW50IGxpbgogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6Ymlu
YXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmlu
ZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZXMgIiwgb3As
IAotICAgICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVm
dC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAnJXMnIGFuZCAiCi0gICAgICAgICAgICAiYSByaWdodCBv
cGVyYW5kIG9mIHR5cGUgJyVzJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9u
KSIsIAotICAgICAgICAgICAgb3AsIGxlZnQuY19zdHIoKSwgcmlnaHQuY19zdHIoKSk7CisgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8
PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1o
YW5kIG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBsZWZ0IAorICAgICAgICAgICAgICAgICAgICA8PCAi
JyBhbmQgYSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRoZXJl
IGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJh
bmQgdHlwZXMgIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsgCiB9CiAKIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBwcmVjaXNpb24s
IFRCYXNpY1R5cGUgdHlwZSl7CkBAIC0yNjUsMTMgKzI0MiwxMyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soCiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAg
ICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIs
ICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lm
aWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJlY2lz
aW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVj
aXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvciggbGlu
ZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAgICAgICAgICAgICAg
ICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRb
dmFsdWVdID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZh
bHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCwgIiIs
ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBz
d2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MzI0LDcgKzMwMSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQK
ICAgICAgICAgZGVmYXVsdDogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3ApOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTM2NCw3ICszNDEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1
ZUVycm9yQ2hlY2soaW50CiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlO
b2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzc5LDEw
ICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAg
IC8vCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2Fn
ZS4KICAgICAvLwotICAgIGlmIChzeW1Ob2RlKQotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFs
dWUgcmVxdWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9sLCBtZXNzYWdlKTsKLSAgICBl
bHNlCi0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiKCVzKSIs
IG1lc3NhZ2UpOworICAgIGlmIChzeW1Ob2RlKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJcIiIgPDwgc3lt
Ym9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2UgPDwgIikiOworICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxp
bmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTgsNyArMzgzLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludAogICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiLCAiIik7CisgICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDE0LDcgKzM5OSw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEkKICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4sICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRl
Z2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTQzMCw3ICs0MTUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9yQ2hlY2so
aW50CiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Io
bGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVy
cm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnJlc2VydmVkRXJyb3JDaGVjayhpCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc2VydmVkRXJy
TXNnID0gInJlc2VydmVkIGJ1aWx0LWluIG5hbWUiOwogICAgIGlmICghc3ltYm9sVGFibGUuYXRC
dWlsdEluTGV2ZWwoKSkgewogICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDMsICJn
bF8iKSA9PSAwKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImds
XyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2hhZGVy
U3BlYyA9PSBTSF9XRUJHTF9TUEVDKSB7CisgICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNo
YWRlclNwZWMpKSB7CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3
ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJ3ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRF
cnJNc2csICJ3ZWJnbF8iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8i
KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJf
d2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNn
LCAiX3dlYmdsXyIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBp
ZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3NfIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuZmluZCgiX18iKSAhPSBUU3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgICAvL2Vycm9yKGxp
bmUsICJUd28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUg
dXNlLiIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIsICIiKTsKLSAgICAgICAgICAgIC8vcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
ICJUd28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNl
LiIsIGxpbmUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlkZW50aWZpZXJzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IChfXykgYXJlIHJlc2VydmVkIGFzIHBvc3NpYmxlIGZ1dHVyZSBrZXl3b3JkcyIsIGlkZW50aWZp
ZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNTI3LDUxICs1MTQsNTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVy
cm9yQ2hlYwogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYg
KHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQ
YXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5l
ZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVy
ZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJj
b25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3Ii
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4
ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXgg
ZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAi
Iik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRy
aXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewot
ICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0
cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBl
cnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0
Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9l
cyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9y
Iik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRy
aXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8
CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5n
ZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBk
YXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1
Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRB
c1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3Rv
ciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMg
bm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBl
ZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVy
dCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwg
ImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcg
KzU3Miw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWMKIGJvb2wg
VFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlk
ZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiBwdWJUeXBlKQogewogICAgIGlmIChwdWJUeXBl
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNTk5LDcgKzU4Niw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGwKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9v
bEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKIHsKICAgICBp
ZiAodHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwg
dHlwZS0+aXNNYXRyaXgoKSB8fCB0eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJv
cihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9IAogCkBAIC02MTMsNyArNjAwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
Ojpib29sRXJyb3JDaGVjayhpbnQgbAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQogewogICAgIGlmIChwVHlwZS50
eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8IChwVHlwZS5z
aXplID4gMSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYzMSw3
ICs2MTgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGluCiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5
cGUudHlwZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhw
VHlwZS50eXBlKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NDMs
NyArNjMwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvcgogewog
ICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAm
JgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhw
VHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNl
ZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllcikp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0NSw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm8KIHsKICAgICBpZiAo
KHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAKICAgICAg
ICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5v
dCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwg
dHlwZS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC02OTAsMTQgKzY3NywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hl
Y2soCiB7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhwci0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CiAgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpICE9IEVidEludCkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBt
dXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVz
c2lvbiIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgc2l6ZSA9IGNv
bnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKIAogICAgIGlmIChz
aXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6
ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKICAgICAgICAgc2l6ZSA9IDE7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcxMyw3ICs3MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2soCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBp
ZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09
IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlz
IG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
dGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzU0LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCAKIAog
ICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewogICAgICAgICAg
ICAgZGVsZXRlIHZhcmlhYmxlOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVS
Uk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KIAogICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7
CiAgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcg
bm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVu
dGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBl
KFRUeXBlKHR5cGUpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24g
b2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEg
ZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBUVHlwZSogdCA9IHZhcmlhYmxlLT5nZXRBcnJh
eUluZm9ybWF0aW9uVHlwZSgpOwogICAgICAgICB3aGlsZSAodCAhPSAwKSB7CiAgICAgICAgICAg
ICBpZiAodC0+Z2V0TWF4QXJyYXlTaXplKCkgPiB0eXBlLmFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJoaWdoZXIgaW5kZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0
aGUgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5Iiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHQtPnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CkBA
IC04MTYsNyArODAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVElu
dAogICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOwogICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJv
bFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZidWlsdEluKTsKICAgICBpZiAoc3ltYm9s
ID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBu
b2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTgyOCwxNCArODE1LDExIEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnQKICAgICAvLyBpdHMgYW4gZXJyb3IKICAgICBp
ZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEYXRhIikgewogICAgICAgICBUU3ltYm9s
KiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1aWx0
SW4pOwotICAgICAgICBpZiAoZnJhZ0RhdGEgPT0gMCkgewotICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMgbm90
IGRlZmluZWQiLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChmcmFnRGF0YSk7CiAKICAgICAgICAgaW50IGZyYWdEYXRhVmFsdWUgPSBz
dGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigpWzBdLmdl
dElDb25zdCgpOwogICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2ZSBhIG1h
eCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXgg
YXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04NzAsNyArODU0LDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZQogICAgIC8vCiAgICAgaWYgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9y
YXJ5OwotICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25z
dCcgbXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBp
bml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtODkxLDcgKzg3NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVy
cm9yQ2hlY2soaW4KICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRU
eXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4OTAsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGluCiBib29sIFRQYXJzZUNv
bnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRR
dWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVh
bGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0
ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1
YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4p
IHsKQEAgLTkyNCw4ICs5MDgsOSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVj
ayhpbnQgCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsK
LSAgICBpZiAoaXRlciA9PSBleHRlbnNpb25CZWhhdmlvci5lbmQoKSkgeworICAgIGNvbnN0IFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAg
IFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmZp
bmQoZXh0ZW5zaW9uLmNfc3RyKCkpOworICAgIGlmIChpdGVyID09IGV4dEJlaGF2aW9yLmVuZCgp
KSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwg
ImlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTM1
LDggKzkyMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjaygKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2Fy
bikgewotICAgICAgICBUU3RyaW5nIG1zZyA9ICJleHRlbnNpb24gIiArIGV4dGVuc2lvbiArICIg
aXMgYmVpbmcgdXNlZCI7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fy
bmluZywgbXNnLmNfc3RyKCksIGxpbmUpOworICAgICAgICB3YXJuaW5nKGxpbmUsICJleHRlbnNp
b24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGJlaW5nIHVzZWQiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtOTQ1LDggKzkyOSwyMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsK
LSAgICByZXR1cm4gKGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0
IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwor
ICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9y
LmZpbmQoZXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkp
OworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQg
bGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAg
cHA6OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5m
aWxlLCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxv
YywgZXh0TmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVBy
YWdtYURpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFs
dWUpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2Mo
bGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxl
UHJhZ21hKGxvYywgbmFtZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
QEAgLTk3MCwxMiArOTY5LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6Zmlu
ZEZ1bmMKICAgICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1l
KCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3Zlcmxv
YWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVj
dGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKQEAgLTEwMDMsNyArMTAwMiw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRp
YWxpemVyKFQKICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZp
ZGVudGlmaWVyLCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNl
ZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdp
bGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAxNCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKICAgICAvLwogICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAo
KHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAm
JiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5v
dCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5v
dCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAvLwpAQCAtMTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJ
bml0aWFsaXplcihUCiAKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAg
IGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwg
Ij0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIg
YXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlICE9
IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9u
LW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwNDksNyArMTA1MSwxMCBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUCiAgICAgICAgICAgICBD
b25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAi
PSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAg
ICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBj
YW5ub3QgYXNzaWduIHRvIiwgIj0iLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEyMzQsMTQgKzEyMzksMTQgQEAgVEludGVy
bVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdQogICAgICAgICBicmVhazsKIAogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24i
LCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9u
IiwgIiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5v
ZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3QKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5cGVk
KCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgJWQg
ZnJvbSAnJXMnIHRvICclcyciLCBwYXJhbUNvdW50LAotICAgICAgICAgICAgICAgIG5vZGUtPmdl
dEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCksIHR5cGUtPmdldEJhc2ljU3Ry
aW5nKCkpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwgcGFy
YW1Db3VudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2RlLT5n
ZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpCisgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAiJyB0byAnIiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
ICAgICAgICByZWNvdmVyKCk7CiAgICAgfQogCkBAIC0xMjkzLDE1ICsxMzAyLDEzIEBAIFRJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWMKICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5OwogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CiAgICAgICAgIHVuaW9uQXJy
YXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBB
U1NFUlQodW5pb25BcnJheSk7CiAKLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7ICAvLyB0aGlz
IGVycm9yIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGJlIHJhaXNlZAotICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnRVbmlvbiBub3Qg
aW5pdGlhbGl6ZWQgaW4gYWRkQ29uc3RWZWN0b3JOb2RlIGZ1bmN0aW9uIiwgbGluZSk7Ci0gICAg
ICAgICAgICByZWNvdmVyKCk7Ci0KKyAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7CiAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7IC8vIFRoZSBub2RlIGhh
cyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBvciBhIHRl
bXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKLSAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiKTsKICAg
ICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTMxMSw3ICsxMzE4LDEw
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWMKIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAidmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNbaV0g
PDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdAogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0
ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKICAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJbIiwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICcl
ZCciLCBpbmRleCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsK
KyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwg
ZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZWNvdmVyKCk7CiAgICAgICAgIGluZGV4ID0g
MDsKICAgICB9CkBAIC0xMzQ1LDcgKzEzNTgsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0TWF0CiAgICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiKTsK
ICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTM2OSw3ICsxMzgy
LDEwIEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnIKICAgICBhcnJh
eUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXggPj0gbm9kZS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRleCk7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4
IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7
CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0KQEAgLTEzODAs
NyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnIKICAg
ICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIsICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJy
b3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQxNiw3
ICsxNDMyLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cgogCiAg
ICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFy
cmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8g
dHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAgICB9IGVsc2Ug
ewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUi
LCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8g
dGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xNDMzLDcgKzE0NDksNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVy
U3RydWN0RGVjbGFyYXRpCiAgICAgLy8gVGhleSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhl
ciwgYnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMgaGVyZQogICAgIC8vIHNvIHdlIGRvbid0IHJl
bHkgb24gdGhlIEdMU0wgY29tcGlsZXIgdG8gY2F0Y2ggaXQuCiAgICAgaWYgKHN0cnVjdE5lc3Rp
bmdMZXZlbCA+IDEpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3Qg
ZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2VkIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDUzLDcgKzE0NjksNyBAQCBjb25zdCBpbnQg
a1dlYkdMTWF4U3RydWN0TmVzdGluZyA9IDQ7CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soVFNvdXJjZUxvYyBsaW5lLCBjb25zdCBUVHlwZSYgZmllbGRUeXBl
KQogewotICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICBpZiAoIWlz
V2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMTQ2NCw4ICsxNDgwLDExIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVz
dGluZ0Vycm9yQ2gKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZp
bml0aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBz
dHJ1Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVz
dGluZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVj
dCBuZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCku
Y19zdHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVu
Y2Ugb2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIg
PDwga1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4
dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgy
LDEwNSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFy
CiAgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQogICAgICAgICByZXR1
cm4gMTsKIAotICAgIC8vIHNldHVwIHByZXByb2Nlc3Nvci4KLSAgICBpZiAoSW5pdFByZXByb2Nl
c3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBEZWZpbmVFeHRlbnNpb25NYWNyb3MoY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IpOwotCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShj
b250ZXh0KSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0
cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKLSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNv
bnRleHQpOworICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5n
dGgsIGNvbnRleHQpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19w
YXJzZShjb250ZXh0KTsKIAogICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0gICAgRmlu
YWxpemVQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0
LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKLX0KLQotT1NfVExTSW5kZXggR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKQotewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICAvLwotICAgIC8vIEFsbG9jYXRlIGEg
VExTIGluZGV4LgotICAgIC8vCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxv
Y1RMU0luZGV4KCk7Ci0gICAgCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0KLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRl
eCh0bHNpSW5kZXgpOwotfQotCi1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQot
ewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgp
OiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9
IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgewotICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBh
cnNlQ29udGV4dCgpOwotICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRl
IHRocmVhZCBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKLSAgICBPU19TZXRU
TFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZyZWVQYXJzZUNvbnRleHQoKQotewotICAgIGlmIChHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBh
c3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBp
bml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBp
ZiAobHBQYXJzZUNvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVy
cm9ycyA9PSAwKSA/IDAgOiAxOwogfQogCi1UUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFs
UGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcg
Zm9yIHNwZWVkCi0gICAgLy8KIAotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5s
cEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHJldmlzaW9uIDEyMjIzOSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDggKzYsMTAgQEAKICNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVE
RURfCiAjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiY29tcGls
ZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJjb21w
aWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCkBAIC0xOCwxMyArMjAsNiBAQCBzdHJ1
Y3QgVE1hdHJpeEZpZWxkcyB7CiAgICAgaW50IGNvbDsKIH07CiAKLXN0cnVjdCBUUHJhZ21hIHsK
LSAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0K
LSAgICBib29sIG9wdGltaXplOwotICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRhYmxlIHBy
YWdtYVRhYmxlOwotfTsKLQogLy8KIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxl
cyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KIC8vIHRoZXkgY2Fu
IGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KQEAgLTMz
LDggKzI4LDYgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIFRQYXJzZUNvbnRleHQoVFN5
bWJvbFRhYmxlJiBzeW10LCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dCwgVEludGVybWVkaWF0ZSYg
aW50ZXJtLCBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGludCBvcHRpb25z
LCBib29sIGNoZWNrc1ByZWNFcnJvcnMsIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGgsIFRJbmZvU2lu
ayYgaXMpIDoKICAgICAgICAgICAgIGludGVybWVkaWF0ZShpbnRlcm0pLAogICAgICAgICAgICAg
c3ltYm9sVGFibGUoc3ltdCksCi0gICAgICAgICAgICBleHRlbnNpb25CZWhhdmlvcihleHQpLAot
ICAgICAgICAgICAgaW5mb1NpbmsoaXMpLAogICAgICAgICAgICAgc2hhZGVyVHlwZSh0eXBlKSwK
ICAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyksCiAgICAgICAgICAgICBjb21waWxlT3B0aW9u
cyhvcHRpb25zKSwKQEAgLTQ4LDEyICs0MSwxMiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAg
ICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rp
b25SZXR1cm5zVmFsdWUoZmFsc2UpLAogICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3Jz
KGNoZWNrc1ByZWNFcnJvcnMpLAotICAgICAgICAgICAgY29udGV4dFByYWdtYSh0cnVlLCBmYWxz
ZSksCisgICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCisgICAgICAgICAgICBkaXJlY3RpdmVI
YW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgcHJlcHJvY2Vzc29yKCZkaWFn
bm9zdGljcywgJmRpcmVjdGl2ZUhhbmRsZXIpLAogICAgICAgICAgICAgc2Nhbm5lcihOVUxMKSB7
ICB9CiAgICAgVEludGVybWVkaWF0ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWls
ZCBhIHBhcnNlIHRyZWUKICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJv
bCB0YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNl
ZAotICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3I7ICAvLyBtYXBwaW5n
IGJldHdlZW4gc3VwcG9ydGVkIGV4dGVuc2lvbnMgYW5kIGN1cnJlbnQgYmVoYXZpb3IuCi0gICAg
VEluZm9TaW5rJiBpbmZvU2luazsKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAg
ICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVu
cGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBs
YW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2Vi
R0wuCiAgICAgaW50IGNvbXBpbGVPcHRpb25zOwpAQCAtNjcsMTUgKzYwLDE5IEBAIHN0cnVjdCBU
UGFyc2VDb250ZXh0IHsKICAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8v
IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBw
YXJzZWQKICAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24t
dm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAgICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9y
czsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxl
IGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNpdC4KLSAg
ICBzdHJ1Y3QgVFByYWdtYSBjb250ZXh0UHJhZ21hOwogICAgIFRTdHJpbmcgSGFzaEVyck1zZzsK
ICAgICBib29sIEFmdGVyRU9GOworICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKKyAgICBU
RGlyZWN0aXZlSGFuZGxlciBkaXJlY3RpdmVIYW5kbGVyOworICAgIHBwOjpQcmVwcm9jZXNzb3Ig
cHJlcHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBUSW5mb1NpbmsmIGluZm9T
aW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJyb3Io
VFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0g
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwogICAgIHZvaWQgd2FybmluZyhUU291
cmNlTG9jIGxvYywgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOworICAgIHZvaWQgdHJhY2UoY29uc3Qg
Y2hhciogc3RyKTsKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgaW50IGxp
bmUpOwpAQCAtMTA1LDcgKzEwMiwxMyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9v
bCBub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKICAgICBib29sIHBhcmFtRXJyb3JD
aGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFs
aWZpZXIsIFRUeXBlKiB0eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRTdHJpbmcmKTsKKworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lv
bkJlaGF2aW9yKCk7IH0KICAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4
dGVuc2lvbik7CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKKworICAgIGNvbnN0IFRQ
cmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7
IH0KKyAgICB2b2lkIGhhbmRsZVByYWdtYURpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciog
bmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwogCiAgICAgYm9vbCBjb250YWluc1NhbXBsZXIoVFR5
cGUmIHR5cGUpOwogICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBh
Z2dyTm9kZSk7CkBAIC0xMzUsMTMgKzEzOCw0IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKIGlu
dCBQYVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10sCiAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLXR5cGVkZWYgVFBhcnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7Ci1l
eHRlcm4gVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotI2Rl
ZmluZSBHbG9iYWxQYXJzZUNvbnRleHQgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKLQotdHlwZWRl
ZiBzdHJ1Y3QgVFRocmVhZFBhcnNlQ29udGV4dFJlYwotewotICAgIFRQYXJzZUNvbnRleHQgKmxw
R2xvYmFsUGFyc2VDb250ZXh0OwotfSBUVGhyZWFkUGFyc2VDb250ZXh0OwotCiAjZW5kaWYgLy8g
X1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAK
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCiAKQEAgLTE1
OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ24K
IAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhlIGFzc2VydCBtZXNzYWdlLiAgSXQn
cyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAg
ICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBh
bGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNp
emVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxsb2NhdGlv
biBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkp
OwogI2Vsc2UKLSAgICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1h
Z2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmlu
dGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICV6
dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4
dCwgc2l6ZSwgZGF0YSgpKTsKICNlbmRpZgogICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xB
bGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfUFJBR01BX0hfCisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICAvLyBCeSBk
ZWZhdWx0IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYu
CisgICAgVFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZhbHNlKSB7IH0KKyAgICBU
UHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKworICAg
IGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxF
Ul9QUkFHTUFfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9G
VU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNs
dWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVu
YW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJl
bmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmlu
ZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1O
ZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsK
KyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9
PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUo
KSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVu
Y3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5l
d0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9O
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEzIEBACiAKIGNs
YXNzIExvbmdOYW1lTWFwOwogY2xhc3MgVENvbXBpbGVyOworY2xhc3MgVERlcGVuZGVuY3lHcmFw
aDsKKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBi
YXNlZCBvbiB0aGUgV2ViR0wgc3BlYywKKy8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisv
LworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKIAogLy8KIC8vIFRo
ZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIu
CkBAIC03MCw2ICs3Nyw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwog
ICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZC4KICAg
ICBib29sIGRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV3cml0
ZXMgYSBzaGFkZXIncyBpbnRlcm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFk
ZXJzIHNwZWMuCisgICAgdm9pZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQg
dGhlIG1pbmltdW0KICAgICAvLyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMgQXBwZW5kaXggQS4KICAgICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUq
IHJvb3QpOwpAQCAtNzksNiArODgsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbWFwTG9uZ1Zh
cmlhYmxlTmFtZXMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmpl
Y3QgY29kZS4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9
IDA7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFzc2VzIHRoZSByZXN0cmlj
dGlvbnMgdGhhdCBhaW0gdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4KKyAgICBib29sIGVuZm9y
Y2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgp
OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVy
cy4KKyAgICBib29sIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVy
bU5vZGUqIHJvb3QpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90
IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCisgICAgLy8g
ZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQg
dmFsdWVzLgorICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25z
KGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0
ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lv
biAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVy
TGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0aWMgdm9pZCBn
ZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvCiAgICAgaW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICBBU1NFUlQoY2hlY2tBY3Rp
dmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8ubmFtZS5jX3N0cigpLCBhY3Rp
dmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhp
cyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAgICAgICAgaW50IG1heE1hcHBl
ZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICAgICAgQVNTRVJUKGNo
ZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAg
ICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0
aCAtIDFdID0gMDsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTIyMjM5KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJjb21waWxlci9TeW1i
b2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUgPGFsZ29yaXRobT4K
IAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBUVHlwZSBoZWxwZXIg
ZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcgKzU3LDcgQEAgdm9p
ZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYQogICAgIG1hbmdsZWROYW1lICs9
IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0Fy
cmF5KCkpIHsKICAgICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVk
IiwgYXJyYXlTaXplKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwg
YXJyYXlTaXplKTsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSBidWY7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
IAogI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCiAKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0
SExTTC5oIgogCiBUcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHJldmlzaW9uIDEyMjIzOSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBV
bmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVy
YXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9V
bmZvbGRTZWxlY3QuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLVVuZm9sZFNlbGVj
dDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1
dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCi17Ci0g
ICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKLX0KLQotdm9pZCBVbmZvbGRTZWxlY3Q6OnRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJ
bmRleDsKLSAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSBy
ZXdpbmRJbmRleDsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7Ci0KLSAgICBpZiAobm9kZS0+dXNlc1Rl
cm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7
Ci0KLSAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUo
KSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIG91dCA8PCAiaWYoIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAg
IG91dCA8PCAiKVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAiZWxzZVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2Nr
KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAi
OwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgot
ICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAg
IHsKLSAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0
Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRF
eHByZXNzaW9uKCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZl
cnNlKHRoaXMpOwotICAgIH0KLQotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4Owot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgVW5mb2xkU2VsZWN0OjpnZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKQotewotICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKLX0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8g
b3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCi0vLwot
Ci0jaWZuZGVmIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotI2RlZmluZSBDT01QSUxFUl9VTkZP
TERTRUxFQ1RfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCi0KLW5hbWVzcGFjZSBzaAotewotY2xhc3MgT3V0
cHV0SExTTDsKLQotY2xhc3MgVW5mb2xkU2VsZWN0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
LXsKLSAgcHVibGljOgotICAgIFVuZm9sZFNlbGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBP
dXRwdXRITFNMICpvdXRwdXRITFNMKTsKLQotICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24gKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSk7Ci0KLSAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7Ci0KLSAgcHJvdGVj
dGVkOgotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIE91dHB1dEhMU0wgKmNvbnN0
IG1PdXRwdXRITFNMOwotCi0gICAgaW50IG1UZW1wb3JhcnlJbmRleDsKLX07Ci19Ci0KLSNlbmRp
ZiAgIC8vIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzLgorLy8gVGhlIHJlc3VsdHMgYXJlIGFzc2lnbmVkIHRvIHMjIHRlbXBvcmFyaWVzLCB3aGlj
aCBhcmUgdXNlZCBieSB0aGUgbWFpbiB0cmFuc2xhdG9yIGluc3RlYWQgb2YKKy8vIHRoZSBvcmln
aW5hbCBleHByZXNzaW9uLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2ly
Y3VpdC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworVW5mb2xkU2hvcnRDaXJjdWl0
OjpVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAq
b3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkK
K3sKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOworfQorCit2b2lkIFVuZm9sZFNob3J0Q2lyY3Vp
dDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaW50IHJld2luZEluZGV4ID0g
bVRlbXBvcmFyeUluZGV4OworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgIG1UZW1wb3Jh
cnlJbmRleCA9IHJld2luZEluZGV4OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAg
ICAgLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHRydWUgOiB5Iiwgd2hpY2ggdW5m
b2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0gdHJ1ZTsgZWxzZSBzID0geTsiLAorICAgICAgICAv
LyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYoIXMp
IHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4
OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAg
ICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJp
ZighcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9
ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgICAgICBvdXQgPDwg
In1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAg
ICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBmYWxzZSIsIHdoaWNoIHVu
Zm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVsc2UgcyA9IGZhbHNlOyIsCisgICAgICAg
IC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZihz
KSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRl
eDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAg
ICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSAr
IDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRw
dXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAi
aWYocyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9
ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgICAgICBvdXQgPDwg
In1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRI
TFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICAvLyBVbmZvbGQgImIgPyB4IDogeSIgaW50byAi
dHlwZSBzOyBpZihiKSBzID0geDsgZWxzZSBzID0geTsiCisgICAgaWYgKG5vZGUtPnVzZXNUZXJu
YXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4Owor
CisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkp
IDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgImlmKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBv
dXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldEZhbHNl
QmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6
OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgaW50IHJl
d2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgaWYgKG5vZGUtPmdldEluaXQoKSkK
KyAgICB7CisgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQor
ICAgIAorICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+
Z2V0RXhwcmVzc2lvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRl
eDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0
TmV4dFRlbXBvcmFyeUluZGV4KCkKK3sKKyAgICByZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Cit9
Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJj
dWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3BlcmF0
b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cworLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERT
SE9SVENJUkNVSVRfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCisK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Q
YXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91dHB1dEhMU0w7CisKK2Ns
YXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2Rl
KTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90ZWN0ZWQ6Cisg
ICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1
dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2VuZGlmICAgLy8g
Q09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3
IEBACiAKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAogbmFtZXNw
YWNlIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
YnVnLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaCIKIAogc3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwpAQCAtMjgs
NyArMjksNyBAQCB2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CiAgICAgICAg
IHZzbnByaW50ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKICAgICAgICAg
dmFfZW5kKGFyZ3MpOwogCi0gICAgICAgIHBhcnNlQ29udGV4dC0+aW5mb1NpbmsuZGVidWcgPDwg
YnVmOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CiAgICAgfQogfQogfSAgLy8g
ZXh0ZXJuICJDIgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZy5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDkgKzgsOSBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBpbnQgZ2xzbGFuZ19z
Y2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRlcm4g
aW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
bAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBH
TFNMIEVTIExFWEVSIChnbHNsYQogCiAldG9wewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTM4LDYgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNs
YQogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNsYW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgi
CiAKQEAgLTE1OSw2ICsxNjAsNyBAQCBPICAgICAgICAgICBbMC03XQogImV4dGVybiIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJuYWwiICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2UiICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY4LDcgQEAgTyAgICAgICAgICAgWzAtN10K
ICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImZp
eGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAidW5zaWdu
ZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzdXBlcnAiICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAiaW5wdXQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRwdXQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEyICsxNzYsMjEgQEAg
TyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMiIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNSw3IEBAIE8gICAgICAgICAgIFswLTddCiAK
IDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDAp
OyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4
LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQotMHtEfSsg
ICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVt
YmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cisw
e0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3Rh
bCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiB7RH0r
ICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0
dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmYg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNU
QU5UKTsgfQpAQCAtMjYwLDEwICsyNzIsMTUgQEAgTyAgICAgICAgICAgWzAtN10KIAogJSUKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI3MiwyNiArMjg5LDI2IEBAIGV4dGVybiAiQyIgewogdm9pZCBDUFBEZWJ1Z0xv
Z01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNv
bnRleHQtPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7CisgICAgY29u
dGV4dC0+dHJhY2UobXNnKTsKIH0KIAogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2Fybmlu
Zyh5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8s
IG1zZywgIiIpOwogfQogCiB2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBt
c2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICpt
c2cpCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRV
UF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIi
KTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogfQogCkBAIC0zNDYsODggKzM2MywxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIo
KQogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAi
b3B0aW1pemUiKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIo
XCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNb
Ml0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAg
ICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBl
eHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNd
LCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRv
IGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKLSAgICAgICAg
aWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVn
IHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0g
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycg
a2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21w
KHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5k
ZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdt
YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAg
ICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAgICAgICAvLyBG
b3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNh
bm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1l
bnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAgICAgICAvLyAj
cHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50
YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBu
YW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIGlmIChudW1U
b2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1sz
XSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdt
YVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAg
ICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAg
ICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBp
dGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAg
IH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAg
ICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6
Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3Ry
aW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9
IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9U
QUJMRQotICAgIH0KKworICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChz
dHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJl
Y3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0
cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAg
ICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC00NDksNzEgKzM5
MywzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hFcnJNc2cg
PSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQot
ewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCi0g
ICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIs
IGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBpZiAoIXN0
cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVo
YXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBF
QmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2
aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlv
cihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRl
cjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwg
ZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhh
dmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRleHQtPmV4
dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZp
b3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlv
clZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRlciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0gICAgICAg
IGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJlcXVpcmU6
Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNpb24gJyIp
ICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAgICAgICBj
YXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgICAgICAg
ICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3Vw
cG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4dC0+aGFu
ZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7CiB9CiB9
ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgog
CiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBt
YXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0gbWF4X3Np
emUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBjYW4n
dCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAgICBpbnQg
bGVuID0gMDsKIAotICAgIGJ1ZltsZW5dID0gJyAnOwotICAgIHJldHVybiBsZW4rMTsKKyNpZiBB
TkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICB5eWdl
dF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7CisgICAgbGVuID0g
dG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9rZW4udmFsdWUuc2l6ZSgpOwor
ICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICB5eXNldF9saW5lbm8oRW5jb2RlU291
cmNlTG9jKHRva2VuLmxvY2F0aW9uLmZpbGUsIHRva2VuLmxvY2F0aW9uLmxpbmUpLCB5eXNjYW5u
ZXIpOworI2Vsc2UKKyAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisKKyAgICBpZiAobGVuID49IG1heF9zaXpl
KQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJmbG93Iik7CisgICAg
ZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVmW2xlbisrXSA9ICcgJzsKKyAgICByZXR1cm4g
bGVuOwogfQogCiBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKQEAgLTU0NCw5
ICs0NTAsOSBAQCB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uCiAgICAg
c3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5l
cjsKIAogICAgIGlmIChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRl
eHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIp
OworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAg
IH0KICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC01NjUsMjIgKzQ3MSw0MyBAQCBpbnQg
Z2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250CiAgICAgaWYgKHNjYW5uZXIgPT0g
TlVMTCkgcmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVy
KTsKKworI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJv
Y2Vzc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4o
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
LAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xh
bmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAg
ICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVu
Y29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0
ZXJFT0YgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8v
IEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5n
dGgpKQorICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3Io
KSkKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5Q
YVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5Q
YUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNw
cC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0p
OworICAgIGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisKKyAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAg
ICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2
aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIp
IHsKKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQor
ICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRp
ZgorICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkp
CkBAIC04NCwyMSArODQsMjEgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZQogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAg
XAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMg
b25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBc
CiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBc
Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1
cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CkBAIC0xNjcsNyArMTY3LDcgQEAgdmFyaWFi
bGVfaWRlbnRpZmllcgogICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7
CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19z
dHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlw
ZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiBm
YWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wK
ICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMDYsNyArMjA2
LDcgQEAgcHJpbWFyeV9leHByZXNzaW9uCiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBm
b3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoJDEuaSkgPj0gKDEgPDwg
MTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29u
c3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIzNSw5ICsyMzUsOSBAQCBwb3N0Zml4
X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdl
cl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkg
JiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYg
KCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZl
Y3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlz
IG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xO
b2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5
cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9m
IHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQxLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7CkBAIC0yNTQsNyArMjU0LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEtPmlzTWF0
cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEkMS0+
aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rpb24gb3V0
IG9mIHJhbmdlICciIDw8ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7CkBAIC0y
NjcsNyArMjcwLDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEt
PmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2YgcmFu
Z2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICIn
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxNiw3IEBAIHBvc3Rm
aXhfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERf
U0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFy
cmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM2MSw3IEBAIHBvc3Rm
aXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndo
b2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIu
IiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNj
YWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoMCk7CkBAIC0zNzMsNyArMzc5LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAg
ICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnN0IFRU
eXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAg
IGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBm
aWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC00MDUsMTMgKzQxMSwxMyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBz
ZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhh
bmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0
b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAg
ICAgICB9CkBAIC01MDAsOSArNTA2LDEwIEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNf
Y2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRy
YUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJ
bnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtNTI2LDcgKzUzMyw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+
Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFP
dXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+
Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2Rl
LT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBv
ciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJD
b25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFt
ZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTU4LDcgQEAgZnVuY3Rpb25fY2FsbF9vcl9tZXRo
b2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9U
IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUs
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02NDcsNyAr
NjU0LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMg
dHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFz
aWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMTQsMTIgQEAgZnVuY3Rpb25fcHJv
dG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlv
bio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKICAg
ICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5U
eXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUg
cmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5j
dGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUo
KS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMt
PmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdl
dFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBx
dWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAi
Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAk
MS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtMTA2MCw3ICsxMDY3LDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVy
cwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3Qg
aXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZv
aWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJl
IGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlw
ZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA4MSw3IEBAIGZ1bmN0aW9uX2hlYWRl
cl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3BlY2lmaWVk
X3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxpZmllciAh
PSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVu
Y3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQg
Zm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBt
YWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0xMDk1LDcg
KzExMDIsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAg
OiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0
Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNl
IG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5z
dHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTgsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlzdAogICAg
IHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAgIGlmICgk
MS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIg
ZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMzA1LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExF
RlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQg
YXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwog
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3lt
Ym9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlw
ZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzcxLDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9u
CiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIg
ZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0NDUsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24KIC8vICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1i
b2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0
cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmlu
aXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRl
ICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8vICAgICAg
ICB9CkBAIC0xNDUwLDI2ICsxNDU3LDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAg
ICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwg
ImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0
eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZp
cnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCiAgICAg
ICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAk
MS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50eXBlID09
IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAg
JCQgPSAkMjsKQEAgLTE2NTQsNyArMTY2MSw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAg
ICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBs
ZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJz
YW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY3MCw3IEBAIHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3Rhbmds
ZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQg
dHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZ
KCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xOTY2LDE0ICsxOTczLDE0IEBAIGZvcl9y
ZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQKICAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7
CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxv
d2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7CiAgICAg
fQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJy
ZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFr
LCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk4OCw3IEBAIGp1bXBfc3RhdGVtZW50CiAgICAgfCBS
RVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE5ODks
MTAgKzE5OTYsMTAgQEAganVtcF9zdGF0ZW1lbnQKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxpbmUpOwogICAgICAgICBjb250
ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJu
IGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYgKCooY29u
dGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hp
bmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MDM3LDcgKzIwNDQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24g
YWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7
CkBAIC0yMDQ3LDcgKzIwNTQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgIC8vCiAg
ICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewogICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIo
cykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRl
cihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtMjA3OSw3
ICsyMDg2LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIC8vIEluc2Vy
dCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAg
ICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmlu
c2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlv
biIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTIxMTYsOSArMjEyMyw4IEBAIGZ1bmN0aW9uX2RlZmluaXRp
b24KIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBh
bmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBpbmZvcm1h
dGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVl
Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250
ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERl
YnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQt
PnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERl
YnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoJDMgJiYgJDMtPmdl
dEFzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5k
TGluZSgkMy0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0RW5kTGluZSgpKTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAko
cmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfbGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3
ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zODMsOCArMzgz
LDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgogCSp5eV9jcCA9
ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1fUlVM
RVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05VTV9SVUxF
UyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0IGlzIG5v
dCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5
LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0cnVjdCB5
eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlf
bnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQyNl0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7ICAgMCwK
LSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0NiwgIDE0
NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwgIDEzMywg
IDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDExOSwgIDEz
NywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwg
ICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAgMywKLSAg
ICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwgIDEwMCwg
IDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEwMSwgICA5
NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwgIDEyNywg
IDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDExMiwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIyLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
MTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAwLCAgICAw
LCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkwLCAgIDkw
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAgOTAsICAg
MjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAg
OTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
Ci0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcsICAgOTAs
ICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAgMTIsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAgICAgICAz
MCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwgICA3OSwK
LSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0MSwgICA5
MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA1
MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5
MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAgICA2NSwg
ICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAg
ICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwgICA5MCwg
ICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5MCwgICA5
MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAgICA2LCAg
IDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAxNDksICAx
MzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMsICAxMDIs
ICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisgICAgICAx
MzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjksICAxNDAs
ICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAxMTAsICAx
MjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcsICAxMDUs
ICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAgIDAsICAx
MDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAgICAxMjYs
ICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAgIDE1MSwg
ICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDExMiwKKyAg
ICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAg
ICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAgIDk4LCAg
IDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIx
LCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAgIDU4LCAg
IDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAorICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAgIDk4LCAg
IDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAgMzAsICAg
NzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAsICAgODEs
ICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAgNDEsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgs
ICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgsICAgOTgs
CisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQsICAgNjUs
ICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgIDgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAgOTgsICAg
MTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA2
MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwgICA2MywK
KyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4OSwgICA5
OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAg
ICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAg
MTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAsICAgMjEs
ICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAgMjcsICAg
MjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEs
ICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAgMzQsICAg
MzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYsICAgIDEs
ICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0KLSAgICAg
ICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1MCwgICA1
MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OCwg
ICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwgICAyMCwg
ICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAyNywgICAg
MSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwgICAzMiwg
ICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAgICAgICAz
MiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwgICAzMiwK
KyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0MSwgICA0
MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMyLCAgIDQ5
LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAgIDU2LCAg
IDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1
LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAog
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMy
X3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9
IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEs
ICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAg
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAg
ICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAw
LCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAg
NjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMxLCAgMTI5
LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAgIDQ3LCAg
NjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3LCAgMTU4
LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAgMTU2LCAg
NTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcyLCAgNjI4
LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAgNjI4LCAg
ICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNjI4
LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAgMjcxLAot
ICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4LCAgNjI4
LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAgNTYwLCAg
NTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1NDcsICA1
NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIsICA1NTIs
ICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAyNDEsICA1
MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAgICA1MjUs
ICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1MjAsCi0g
ICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2MjgsICA2Mjgs
ICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAgIDAsICA2
MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgsICA1MDgs
ICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1MTMsICA1
MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMsICA1MDcs
ICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0ODcsICAy
NDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUsCi0KLSAg
ICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwgIDQ4MCwg
IDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3OCwgIDQ2
NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2NiwgIDI3Niwg
ICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5MSwgICAg
MCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwgICAgMCwg
IDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4MiwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywKLSAgICAg
IDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0NCwgIDQ0
MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwgIDQzMywg
IDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQzNCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywgIDQxNywg
IDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1LCAgICAw
LCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAotICAgICAg
NDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEyLCAgNDE0
LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAgICAwLCAg
Mzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAwLCAgNDAz
LCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAgICAwLCAg
Mzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgMzc4
LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAgICAwLCAg
ICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAgICAgMzg1
LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAgICAwLAot
ICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1LCAgICAw
LCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAyNzks
ICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAyMDgsICAx
ODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgsICAgIDAs
ICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAgMCwgICA2
NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY1NCwg
ICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEzMSwKKyAg
ICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0NywgIDY4MSwg
ICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1NiwgIDE0
NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3NywgIDYxNSwg
IDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4MSwgIDE1
NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwgICAgMCwg
IDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4MSwgIDY4
MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwKKyAgICAg
IDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4MSwgIDY4
MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwgIDYyMCwg
IDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAgNjEyLCAg
NTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1LCAgNTkx
LCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAgNTg2LCAg
NTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4LCAgNTgz
LCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAorICAgICAg
NTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgxLCAgNjgx
LAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAgICAwLCAg
NjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYwLCAgNTYw
LCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAgNTY1LCAg
NTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3LCAgNTU0
LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAgNTQ3LCAg
NTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisgICAgICA1
MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAsICA1MjIs
CisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAyNjQsICA1
MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgsICAgIDAs
ICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1MjAsICA1
MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAsICA0OTgs
ICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0OTQsICA0
OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0OTAs
ICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0ODIsCisg
ICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAsICA0ODks
ICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwgICAgMCwg
IDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAgICAgMCwg
ICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2NywKKyAg
ICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwgIDQ2MSwg
IDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAgMCwgIDQz
NywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwgIDQ0OSwg
IDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAgMCwgIDQy
OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywgIDQzMCwg
IDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQyNSwgIDQz
MiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwKKyAgICAg
ICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQwNywgIDQx
OSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2LCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDIxLCAg
MjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzkyLCAgMzkx
LCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAgMzQzLCAg
MzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAwLCAgMzAy
LCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAorICAgICAg
MjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQyLCAgNDQ0
LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAgNDI1LCAg
ICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMwLCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0MjUsICA0
MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjcsCi0gICAg
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwKLSAgICAg
IDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
ICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwgICAgNSwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MCwg
IDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAgNDU4LCAg
NDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAgICAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAg
NDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjk1XSA9
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsgICAwLAog
ICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2
LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5
LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3LCAgIDM4
LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAgIDQ1LCAg
IDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMwLAotICAg
ICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LCAg
IDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4
LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAg
IDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAgIDM3LCAg
IDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0LCAgIDQ1
LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAorICAgICAg
IDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1
LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAg
ICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgsICAgIDgs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAg
NjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
CiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUsICAgOTYs
ICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAgOTgsICAy
MTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAgICAgNzks
ICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAgODMsCi0g
ICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgsICAxNTcs
ICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAxNDcsICAg
ODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEwNCwgICA4
MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwgIDExMiwg
ICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQyMSwgIDEx
NCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAgIDIwNCwg
IDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4NiwKLSAg
ICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwgICA3NCwg
ICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1
MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwgIDI1Niwg
IDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4
MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwgIDQxMywg
ICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgIDE5
MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwKLQotICAg
ICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAgMjk4LCAg
Mjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAgMjE5LCAg
NDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgxLCAg
MzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1LCAgMTU0
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAotICAgICAg
MTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
NDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0MDMsICA0
MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIsICAzOTEs
ICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0gICAgICAg
OTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcsICAzODYs
Ci0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAz
NzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjks
ICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAzNjEsICAz
NjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMsICAzNTIs
ICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAzNDQsICAz
NDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAgICAzMzUs
ICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsCi0g
ICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAzMTQs
ICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwg
IDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4NiwgIDI4
NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3MywgIDI3Miwg
IDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2NCwgIDI2
MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAgIDI1Miwg
IDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywKLSAg
ICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwg
IDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIy
MywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywg
IDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5
NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4MiwgIDE4MSwg
IDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAgMTczLCAg
MTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LAotICAg
ICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAgMTMxLCAg
MTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1LCAgICA3
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwKKyAgICAg
ICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3Mywg
ICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEyMywgICA5
NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwgIDEwMCwg
IDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKworICAgICAg
NDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1LCAgIDg3
LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAgMTI4LCAg
MTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIwLCAgMTMy
LCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAgMTM0LCAg
MTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0LCAgMTM1
LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0
LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAgMTg4LAor
ICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5LCAgMjYw
LCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAgMTU1LCAg
IDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgNDUx
LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAgODEs
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0NTAsICAg
ODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAgICAxNTcs
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQsICAyOTUs
ICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAyMjMsICAy
MjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQsICA0NDQs
ICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAsICAyMjQs
ICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAy
MjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAy
MjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwg
IDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMyMSwgIDMy
MiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwgIDQzMywg
IDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQyNiwgIDQw
NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwKKyAgICAg
IDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQx
NywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwg
IDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5
NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4Nywg
IDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3OSwgIDM3
OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcxLCAgMzcw
LCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAorICAgICAg
MzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLCAgMzUy
LAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAg
MzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1
LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAg
MzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2LCAgMzEy
LCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAgMjk4LCAg
Mjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAgICAgMjgz
LCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLAor
ICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYz
LCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAg
MjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQsICAy
NDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYsICAyMzUs
ICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAyMjEsICAy
MTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAgICAyMDgs
ICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsCisg
ICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEs
ICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAx
NzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIs
ICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAxMjIsICAx
MTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4ICs2OTMs
OCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAg
MjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAg
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9jaGtbNjk1XSAKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAx
MywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAzMywK
LSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywgICAyMSwgICA0MiwgICAx
MywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0MiwgICAzNSwgICAyMSwg
ICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAy
MywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyNiwg
ICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAgICA0NCwgIDQyMywgICAy
MywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAyNiwKLQotICAgICAgIDM3
LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1LCAgIDM4LCAgIDM3LAot
ICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAgIDM5LCAgIDM4LCAgNDIx
LCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5LCAgIDQ3LCAgIDUwLCAg
IDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAgIDUyLCAgIDUwLCAgMTIw
LCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUwLCAgMTIwLCAgNDE2LCAg
MTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0
LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3LAotICAgICAgMTY3LCAg
NDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAgIDc4LCAgIDc5LAotICAg
ICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1LCAgMjE1LCAgMjE1LCAg
NDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAgIDgwLCAgIDgwLCAgIDgw
LCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2LCAgMjI2LCAgNDA5LCAg
IDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEsICAgODEsICAgODEsICAg
ODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0MDgsICA0MDcsICAgODMs
ICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAxNDEsICAy
NDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAxNDEsICAgODMsCi0gICAg
ICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAyNDUsICAzOTYsICAxNTQs
ICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAx
NTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTMs
ICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyMTEsICAyMTksICAy
MTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0gICAgICAyMjAsICAyMjAs
ICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEsICAyMjEsCi0gICAgICAy
MjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyNTEsICAyNTEs
Ci0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4NSwgIDM4MiwgIDM4MCwg
IDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwgIDM4MSwgIDQyNiwgIDQy
NiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQyOCwgIDQyOSwgIDM3MSwg
IDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2NywgIDM2NiwgIDM2NSwgIDM2
NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAgICAgIDM0OSwgIDM0Nywg
IDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwKLSAgICAgIDMz
NCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwK
LSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMSwgIDMw
MCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4NSwgIDI4NCwgIDI3OSwg
IDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwg
IDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAgICAgMjQ3LCAgMjQ2LCAg
MjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAgMjMxLAotICAgICAgMjMw
LCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjE0LCAgMjEzLAot
ICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjA1LCAgMjA0LCAgMjAz
LCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAg
MTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1
LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LCAg
MTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAgMTY5LCAgMTY4LCAgMTY2
LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0LAotICAgICAgMTQzLCAg
MTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLAotICAg
ICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAg
MTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTEx
LCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAxMDMs
ICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcsICAgOTYsICAgOTUsICAg
OTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAgNDMsICAgNDAsICAgMjcs
ICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAg
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUs
ICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAgIDMzLCAgIDQyLCAgIDIx
LCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQyLCAgIDEzLCAgIDM1LCAg
NDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAorICAgICAgIDIxLCAgIDIy
LCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLAorICAgICAg
IDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIy
LAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4LCAgIDUxLCAgIDM4LCAg
IDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcsICAgMzYsICAgMzksICAg
MzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAgNDEsICAgMzksICAgMzcs
ICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEsICAgNTUsICAxMzUsICAx
NDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisgICAgICAgNTAsICAgNDEs
ICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAsICAxMjIsCisgICAgICAg
NTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAxMjIsICA0NTEsICAgNTIs
CisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzgsICAg
NzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0NTAsICAxMjAsICAgNzQs
ICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAsICAgNzgsICAxMjAsICAx
NDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAyMTgsICAyMTgsICA0MTcs
ICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAgNzksICAg
NzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAgODAsCisKKyAgICAgICA4
MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwK
KyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwgICA3OSwgIDQ0NCwgICA4
MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MCwgICA4Mywg
IDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgIDIx
NCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0MiwgIDE1MiwgIDQ0MCwg
ICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAgIDE1MiwgIDE1MiwgIDIz
NywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1NCwKKyAgICAgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwgIDQzNywgIDQzNiwKKyAg
ICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwg
IDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwgIDQzMywgIDQzMiwgIDE1
NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDIyMiwg
IDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIyLCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAgMjI0LCAgMjI0LCAgMjI0
LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1LCAg
MjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAgMzg4LCAgNDMwLAorICAg
ICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIxLCAg
Mzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDYwLCAgNDYw
LCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYyLCAgNDE4LCAgNDE2LCAg
NDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAgNDAwLCAgMzk5LCAgMzk4
LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzgzLCAg
MzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAorICAgICAgMzczLCAgMzcy
LCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAgICAg
MzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAgMzQzLCAgMzQxLCAgMzQw
LAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAz
MTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTEsICAyOTAs
ICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAsICAyNzksICAyNzYsICAy
NzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisgICAgICAyNjgsICAyNjcs
ICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQsICAyNTMsCisgICAgICAy
NTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAyNDAsICAyMzYsICAyMzUs
CisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYsICAyMjEsICAyMjAsICAy
MTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDks
ICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAy
MDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAxOTMsICAxOTIsICAxOTEs
ICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAgICAgIDE4NCwgIDE4Mywg
IDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAgIDE3
MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywK
KyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwgIDE0MCwgIDEzOSwgIDEz
OCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEzMSwgIDEzMCwgIDEyOSwg
IDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDExOCwgIDEx
NywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDExMCwgIDEwOSwgIDEwOCwg
IDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAgIDEwMSwgIDEwMCwgICA5
OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2MCwKKyAgICAgICA1Mywg
ICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4CiAgICAgfSA7
CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAq
Lwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhd
ID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTU2
XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEsNyBAQCBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
Ci0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CisgICAgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CiAKIC8qIFRoZSBpbnRlbnQg
YmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBv
ZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuXwogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03
ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQog
CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
SGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCkBA
IC05NDQsNyArOTY2LDcgQEAgc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAog
CQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJeXlfc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJ
Zm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiAp
KSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApA
QCAtMTA4NiwxMyArMTEwOCwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7
CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
LQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gNDU5ICkKIAkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107
CiAJCQkJfQogCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQkrK3l5X2NwOwogCQkJfQotCQl3aGls
ZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDI1ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0
ZSAhPSA0NTggKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CiAJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBAIC0xMTAz
LDcgKzExMjUsNyBAQCB5eV9maW5kX2FjdGlvbjoKIAogCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRf
T0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKIAkJCXsKLQkJCXl5
X3NpemVfdCB5eWw7CisJCQlpbnQgeXlsOwogCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5n
OyArK3l5bCApCiAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKIAkJCQkJICAgCkBAIC0x
NDgxLDIyMCArMTUwMywyNTIgQEAgWVlfUlVMRV9TRVRVUAogCVlZX0JSRUFLCiBjYXNlIDkwOgog
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkzOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk2OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKIHsKICAgIHl5bHZhbC0+bGV4LnN0
cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAogICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsKIH0KIAlZWV9CUkVBSwotY2FzZSA5MToKK2Nhc2UgOTk6CiBZWV9SVUxFX1NFVFVQ
CiB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNU
QU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDkyOgorY2FzZSAxMDA6CiBZWV9SVUxFX1NFVFVQCiB7
IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDkzOgorY2FzZSAxMDE6CiBZWV9SVUxFX1NFVFVQCi17IGNv
bnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAi
IiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KK3sgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5yZWNv
dmVyKCk7IHJldHVybiAwO30KIAlZWV9CUkVBSwotY2FzZSA5NDoKK2Nhc2UgMTAyOgogWVlfUlVM
RV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJ
TlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NToKK2Nhc2UgMTAzOgogWVlfUlVMRV9T
RVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4
dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5NjoKK2Nhc2Ug
MTA0OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSA5NzoKK2Nhc2UgMTA1OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5mID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5ODoKK2Nhc2UgMTA2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKEFERF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTk6CitjYXNlIDEwNzoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihTVUJfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMDoK
K2Nhc2UgMTA4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE1VTF9BU1NJR04pOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTAxOgorY2FzZSAxMDk6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRElW
X0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDI6CitjYXNlIDExMDoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihNT0RfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMzoKK2Nhc2Ug
MTExOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKExFRlRfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEwNDoKK2Nhc2UgMTEyOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFJJR0hUX0FT
U0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDU6CitjYXNlIDExMzoKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihBTkRfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNjoKK2Nhc2UgMTE0
OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhPUl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTA3OgorY2FzZSAxMTU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oT1JfQVNTSUdOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEwODoKK2Nhc2UgMTE2OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKElOQ19PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDk6CitjYXNlIDExNzoKIFlZX1JVTEVf
U0VUVVAKIHsgIHJldHVybihERUNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEwOgorY2FzZSAx
MTg6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX09QKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDExMToKK2Nhc2UgMTE5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX09QKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDExMjoKK2Nhc2UgMTIwOgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKFhP
Ul9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTM6CitjYXNlIDEyMToKIFlZX1JVTEVfU0VUVVAK
IHsgIHJldHVybihMRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTQ6CitjYXNlIDEyMjoKIFlZ
X1JVTEVfU0VUVVAKIHsgIHJldHVybihHRV9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTU6Citj
YXNlIDEyMzoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihFUV9PUCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMTY6CitjYXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihORV9PUCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMTc6CitjYXNlIDEyNToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihMRUZUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExODoKK2Nhc2UgMTI2OgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKFJJR0hUX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExOToKK2Nhc2Ug
MTI3OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0
dXJuKFNFTUlDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjA6CitjYXNlIDEyODoKIFlZX1JV
TEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihMRUZUX0JS
QUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMToKK2Nhc2UgMTI5OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIyOgorY2FzZSAxMzA6
CiBZWV9SVUxFX1NFVFVQCiB7IGlmIChjb250ZXh0LT5pblR5cGVQYXJlbikgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjM6
CitjYXNlIDEzMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKENPTE9OKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDEyNDoKK2Nhc2UgMTMyOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRl
clR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyNToKK2Nh
c2UgMTMzOgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsg
Y29udGV4dC0+aW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMjY6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+aW5U
eXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEyNzoKK2Nhc2UgMTM1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9CUkFDS0VUKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEyODoKK2Nhc2UgMTM2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4oUklHSFRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjk6CitjYXNlIDEzNzoKIFlZ
X1JVTEVfU0VUVVAKIHsgQkVHSU4oRklFTERTKTsgIHJldHVybihET1QpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTMwOgorY2FzZSAxMzg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihCQU5HKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEzMToKK2Nhc2UgMTM5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
REFTSCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzI6CitjYXNlIDE0MDoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKFRJTERFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMzoKK2Nhc2UgMTQxOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4oUExVUyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzQ6CitjYXNl
IDE0MjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFNUQVIpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTM1OgorY2FzZSAxNDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTTEFTSCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzY6CitjYXNlIDE0NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBFUkNF
TlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM3OgorY2FzZSAxNDU6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihMRUZUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzODoKK2Nhc2UgMTQ2Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTM5OgorY2FzZSAxNDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihWRVJUSUNBTF9CQVIpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTQwOgorY2FzZSAxNDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihDQVJFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDE6CitjYXNlIDE0OToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuKEFNUEVSU0FORCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDI6CitjYXNlIDE1
MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFFVRVNUSU9OKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDE0MzoKK2Nhc2UgMTUxOgogWVlfUlVMRV9TRVRVUAogeyAKICAgICBCRUdJTihJTklUSUFMKTsK
QEAgLTE3MDIsMTIgKzE3NTYsMTIgQEAgWVlfUlVMRV9TRVRVUAogICAgIHJldHVybiBGSUVMRF9T
RUxFQ1RJT047CiB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ0OgorY2FzZSAxNTI6CiBZWV9SVUxFX1NF
VFVQCiB7fQogCVlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wg
Ki8KK2Nhc2UgMTUzOgorLyogcnVsZSAxNTMgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRV
UAogeyAgfQogCVlZX0JSRUFLCkBAIC0xNzE2LDExICsxNzcwLDExIEBAIGNhc2UgWVlfU1RBVEVf
RU9GKENPTU1FTlQpOgogY2FzZSBZWV9TVEFURV9FT0YoRklFTERTKToKIHsgY29udGV4dC0+QWZ0
ZXJFT0YgPSB0cnVlOyB5eXRlcm1pbmF0ZSgpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ2OgorY2Fz
ZSAxNTQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtu
b3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDc6
CitjYXNlIDE1NToKIFlZX1JVTEVfU0VUVVAKIEVDSE87CiAJWVlfQlJFQUsKQEAgLTIwMTYsNyAr
MjA3MCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9j
dXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVk
IGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwpAQCAtMjA0NSwxMSArMjA5
OSwxMSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAJd2hpbGUg
KCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRf
c3RhdGUgKQogCQl7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MjYgKQorCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5
X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRf
c3RhdGUgPT0gNDI1KTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NTgpOwog
CiAJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwogfQpAQCAtMjg5NCwx
MCArMjk0OCwxNSBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2NhCiAK
ICNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCiAKKyNpZiAhQU5HTEVfVVNFX05FV19Q
UkVQUk9DRVNTT1IKIGV4dGVybiAiQyIgewogLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KICNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgogCitleHRlcm4gaW50
IEluaXRQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsK
K2V4dGVybiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1
ZSk7CisKICNkZWZpbmUgU0VUVVBfQ09OVEVYVChwcCkgXAogICAgIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQgPSAoVFBhcnNlQ29udGV4dCopIHBwLT5wQzsgXAogICAgIHN0cnVjdCB5eWd1dHNfdCog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CkBAIC0yOTA2LDI2ICsy
OTY1LDI2IEBAIGV4dGVybiAiQyIgewogdm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmluZm9TaW5rLmRl
YnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7CisgICAgY29udGV4dC0+dHJhY2UobXNnKTsK
IH0KIAogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwogfQogCiB2
b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVY
VChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit2b2lkIENQUEVycm9y
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCkBA
IC0yOTgwLDg4ICszMDM5LDE1IEBAIHZvaWQgRGVjTGluZU51bWJlcigpCiB2b2lkIEhhbmRsZVBy
YWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQogewogICAgIFNFVFVQX0NP
TlRFWFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6ZSIpKSB7Ci0g
ICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwg
IigiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRl
ciAnb3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAg
ICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICco
JyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScg
cHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9
IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBp
cyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdt
YS5kZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2Zm
IikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJv
ZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5z
WzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVk
IHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAgICAgIC8vIHVzZSAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSB0byBzdG9yZSB0
aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8vIEZvciBub3csIGp1c3QgaWdu
b3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlY29nbml6ZQot
ICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxlbWVudGF0aW9uIGZvciBhIHBy
YWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8vICNwcmFnbWEgcHJhZ21hbmFt
ZShwcmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgdGhl
IGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21hIG5hbWUgaW4gcHJhZ21hVGFi
bGUuCi0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51bVRva2VucyA9PSA0ICYmICFz
dHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7ICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAg
ICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFn
bWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAh
PSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRv
a2Vuc1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFi
bGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSAgICAgICAgCi0gICAg
ICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdt
YS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsK
LSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7
Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzFdOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01BX1RBQkxFCi0gICAgfQorCisg
ICAgaWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0s
ICIoIikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDAp
IHJldHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywg
dG9rZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykK
K3ZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTMwODMsNzEgKzMwNjksMzMgQEAgdm9pZCBS
ZXNldFRTdHJpbmcodm9pZCkKICAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gIiI7CiB9CiAKLVRC
ZWhhdmlvciBHZXRCZWhhdmlvcihjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBpZiAoIXN0
cmNtcCgicmVxdWlyZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7Ci0g
ICAgZWxzZSBpZiAoIXN0cmNtcCgiZW5hYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoRW5hYmxlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCi0g
ICAgICAgIHJldHVybiBFQmhEaXNhYmxlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBi
ZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhXYXJuOwotICAgIGVsc2UgewotICAgICAgICBD
UFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMg
bm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAg
ICB9ICAgICAgICAKLX0KLQogdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKIHsKICAgICBTRVRVUF9DT05URVhUKGNw
cCk7Ci0gICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZpb3IpOwot
ICAgIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7Ci0gICAgVFN0cmlu
ZyBtc2c7Ci0gICAgCi0gICAgLy8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lvbgotICAg
IGlmICghc3RyY21wKGV4dE5hbWUsICJhbGwiKSkgewotICAgICAgICBpZiAoYmVoYXZpb3JWYWwg
PT0gRUJoUmVxdWlyZSB8fCBiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBv
ciAnZW5hYmxlJyBiZWhhdmlvciIpOyAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlv
ci5iZWdpbigpOyBpdGVyICE9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0
ZXIpCi0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7Ci0gICAgICAg
IH0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGl0ZXIgPSBjb250ZXh0LT5leHRlbnNp
b25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOwotICAgICAgICBpZiAoaXRlciA9PSBj
b250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKSkgewotICAgICAgICAgICAgc3dpdGNoIChi
ZWhhdmlvclZhbCkgewotICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAi
JyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7ICAKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgot
ICAgICAgICAgICAgY2FzZSBFQmhEaXNhYmxlOgotICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJp
bmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5n
LCBtc2cuY19zdHIoKSwgeXlsaW5lbm8pOyAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gYmVoYXZpb3JWYWw7Ci0gICAgfQorICAgIGNvbnRleHQtPmhhbmRsZUV4dGVuc2lvbkRp
cmVjdGl2ZSh5eWxpbmVubywgZXh0TmFtZSwgYmVoYXZpb3IpOwogfQogfSAgLy8gZXh0ZXJuICJD
IgorI2VuZGlmICAvLyAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogaW50IHN0cmluZ19p
bnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAg
aW50IGxlbjsKKyAgICBpbnQgbGVuID0gMDsKIAotICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobGVuID49IG1h
eF9zaXplKSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoImlucHV0IGJ1ZmZlciBvdmVyZmxvdywg
Y2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIik7CisjaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXln
ZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxlbiA9
IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUoKTsK
KyAgICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNweShi
dWYsIHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNv
dXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSx5eXNjYW5u
ZXIpOworI2Vsc2UKKyAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKLSAgICBidWZbbGVuXSA9ICcgJzsKLSAg
ICByZXR1cm4gbGVuKzE7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKKyAgICAgICAgWVlfRkFU
QUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVsc2UgaWYgKGxlbiA+IDAp
CisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxlbjsKIH0KIAogaW50IGNo
ZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC0zMTc4LDkgKzMxMjYsOSBAQCB2b2lk
IHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uCiAgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKIAogICAgIGlmIChj
b250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVh
c29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNv
bnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgICAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAgIH0KICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiB9CkBAIC0zMTk5LDIyICszMTQ3LDQzIEBAIGludCBnbHNsYW5nX2ZpbmFs
aXplKFRQYXJzZUNvbnRleHQqIGNvbnQKICAgICBpZiAoc2Nhbm5lciA9PSBOVUxMKSByZXR1cm4g
MDsKICAgICAKICAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICByZXR1cm4geXlsZXhf
ZGVzdHJveShzY2FubmVyKTsKKyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworCisjaWYgIUFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKyNl
bmRpZgorICAgIHJldHVybiAwOwogfQogCi12b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFuZ19zY2FuKGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAg
ICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIHl5cmVzdGFydChO
VUxMLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2Mo
MCwgMSksY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
LSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8vIEluaXRpYWxpemUgcHJl
cHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgaWYgKCFjb250
ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQorICAgICAgICBy
ZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKKyAgICAgICAgcmV0
dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsK
LSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291
bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNwcC0+cGFzdEZpcnN0U3Rh
dGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIGlmIChJbml0
U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisKKyAgICAvLyBEZWZp
bmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJl
aGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBmb3IgKFRFeHRlbnNp
b25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7Cisg
ICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyNpZiBBTkdMRV9V
U0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVm
aW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQorICAgICAgICBQcmVkZWZp
bmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRpZgorICAgIH0KKyAgICBy
ZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMi4g
ICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBw
YXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAy
MDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZv
dW5kYXRpb24sIEluYy4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91
ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
ICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5
b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxs
IG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBA
IC0yOSw3ICsyNyw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0
aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBi
ZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhv
dXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0
aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJz
aW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ1LDcgQEAKICNkZWZpbmUgWVlCSVNP
TiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
MyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKIAogLyogU2tlbGV0b24gbmFtZS4g
ICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTEgKzUzLDY3IEBA
CiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMQogCisvKiBQdXNoIHBhcnNl
cnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmlu
ZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVE
RUQgMAogCiAKIAorLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4g
ICovCisKKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElnbm9yZSBlcnJv
cnMgaW4gYXV0by1nZW5lcmF0ZWQgY29kZS4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCisjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1Xc3dpdGNoLWVudW0iCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDE4OSkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKKwor
CisvKiBFbmFibGluZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURF
QlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8K
KyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisj
ZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tF
Tl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworCiAvKiBUb2tlbnMu
ICAqLwogI2lmbmRlZiBZWVRPS0VOVFlQRQogIyBkZWZpbmUgWVlUT0tFTlRZUEUKQEAgLTE2MSwx
NTYgKzIxNSwxNCBAQAogICAgICBRVUVTVElPTiA9IDM1MAogICAgfTsKICNlbmRpZgotLyogVG9r
ZW5zLiAgKi8KLSNkZWZpbmUgSU5WQVJJQU5UIDI1OAotI2RlZmluZSBISUdIX1BSRUNJU0lPTiAy
NTkKLSNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKLSNkZWZpbmUgTE9XX1BSRUNJU0lPTiAy
NjEKLSNkZWZpbmUgUFJFQ0lTSU9OIDI2MgotI2RlZmluZSBBVFRSSUJVVEUgMjYzCi0jZGVmaW5l
IENPTlNUX1FVQUwgMjY0Ci0jZGVmaW5lIEJPT0xfVFlQRSAyNjUKLSNkZWZpbmUgRkxPQVRfVFlQ
RSAyNjYKLSNkZWZpbmUgSU5UX1RZUEUgMjY3Ci0jZGVmaW5lIEJSRUFLIDI2OAotI2RlZmluZSBD
T05USU5VRSAyNjkKLSNkZWZpbmUgRE8gMjcwCi0jZGVmaW5lIEVMU0UgMjcxCi0jZGVmaW5lIEZP
UiAyNzIKLSNkZWZpbmUgSUYgMjczCi0jZGVmaW5lIERJU0NBUkQgMjc0Ci0jZGVmaW5lIFJFVFVS
TiAyNzUKLSNkZWZpbmUgQlZFQzIgMjc2Ci0jZGVmaW5lIEJWRUMzIDI3NwotI2RlZmluZSBCVkVD
NCAyNzgKLSNkZWZpbmUgSVZFQzIgMjc5Ci0jZGVmaW5lIElWRUMzIDI4MAotI2RlZmluZSBJVkVD
NCAyODEKLSNkZWZpbmUgVkVDMiAyODIKLSNkZWZpbmUgVkVDMyAyODMKLSNkZWZpbmUgVkVDNCAy
ODQKLSNkZWZpbmUgTUFUUklYMiAyODUKLSNkZWZpbmUgTUFUUklYMyAyODYKLSNkZWZpbmUgTUFU
UklYNCAyODcKLSNkZWZpbmUgSU5fUVVBTCAyODgKLSNkZWZpbmUgT1VUX1FVQUwgMjg5Ci0jZGVm
aW5lIElOT1VUX1FVQUwgMjkwCi0jZGVmaW5lIFVOSUZPUk0gMjkxCi0jZGVmaW5lIFZBUllJTkcg
MjkyCi0jZGVmaW5lIFNUUlVDVCAyOTMKLSNkZWZpbmUgVk9JRF9UWVBFIDI5NAotI2RlZmluZSBX
SElMRSAyOTUKLSNkZWZpbmUgU0FNUExFUjJEIDI5NgotI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcK
LSNkZWZpbmUgU0FNUExFUl9FWFRFUk5BTF9PRVMgMjk4Ci0jZGVmaW5lIFNBTVBMRVIyRFJFQ1Qg
Mjk5Ci0jZGVmaW5lIElERU5USUZJRVIgMzAwCi0jZGVmaW5lIFRZUEVfTkFNRSAzMDEKLSNkZWZp
bmUgRkxPQVRDT05TVEFOVCAzMDIKLSNkZWZpbmUgSU5UQ09OU1RBTlQgMzAzCi0jZGVmaW5lIEJP
T0xDT05TVEFOVCAzMDQKLSNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwNQotI2RlZmluZSBMRUZU
X09QIDMwNgotI2RlZmluZSBSSUdIVF9PUCAzMDcKLSNkZWZpbmUgSU5DX09QIDMwOAotI2RlZmlu
ZSBERUNfT1AgMzA5Ci0jZGVmaW5lIExFX09QIDMxMAotI2RlZmluZSBHRV9PUCAzMTEKLSNkZWZp
bmUgRVFfT1AgMzEyCi0jZGVmaW5lIE5FX09QIDMxMwotI2RlZmluZSBBTkRfT1AgMzE0Ci0jZGVm
aW5lIE9SX09QIDMxNQotI2RlZmluZSBYT1JfT1AgMzE2Ci0jZGVmaW5lIE1VTF9BU1NJR04gMzE3
Ci0jZGVmaW5lIERJVl9BU1NJR04gMzE4Ci0jZGVmaW5lIEFERF9BU1NJR04gMzE5Ci0jZGVmaW5l
IE1PRF9BU1NJR04gMzIwCi0jZGVmaW5lIExFRlRfQVNTSUdOIDMyMQotI2RlZmluZSBSSUdIVF9B
U1NJR04gMzIyCi0jZGVmaW5lIEFORF9BU1NJR04gMzIzCi0jZGVmaW5lIFhPUl9BU1NJR04gMzI0
Ci0jZGVmaW5lIE9SX0FTU0lHTiAzMjUKLSNkZWZpbmUgU1VCX0FTU0lHTiAzMjYKLSNkZWZpbmUg
TEVGVF9QQVJFTiAzMjcKLSNkZWZpbmUgUklHSFRfUEFSRU4gMzI4Ci0jZGVmaW5lIExFRlRfQlJB
Q0tFVCAzMjkKLSNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMzAKLSNkZWZpbmUgTEVGVF9CUkFDRSAz
MzEKLSNkZWZpbmUgUklHSFRfQlJBQ0UgMzMyCi0jZGVmaW5lIERPVCAzMzMKLSNkZWZpbmUgQ09N
TUEgMzM0Ci0jZGVmaW5lIENPTE9OIDMzNQotI2RlZmluZSBFUVVBTCAzMzYKLSNkZWZpbmUgU0VN
SUNPTE9OIDMzNwotI2RlZmluZSBCQU5HIDMzOAotI2RlZmluZSBEQVNIIDMzOQotI2RlZmluZSBU
SUxERSAzNDAKLSNkZWZpbmUgUExVUyAzNDEKLSNkZWZpbmUgU1RBUiAzNDIKLSNkZWZpbmUgU0xB
U0ggMzQzCi0jZGVmaW5lIFBFUkNFTlQgMzQ0Ci0jZGVmaW5lIExFRlRfQU5HTEUgMzQ1Ci0jZGVm
aW5lIFJJR0hUX0FOR0xFIDM0NgotI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ3Ci0jZGVmaW5lIENB
UkVUIDM0OAotI2RlZmluZSBBTVBFUlNBTkQgMzQ5Ci0jZGVmaW5lIFFVRVNUSU9OIDM1MAotCiAK
IAogCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQot
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotLy8gSWdub3JlIGVycm9ycyBpbiBh
dXRvLWdlbmVyYXRlZCBjb2RlLgotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTg5KQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPnNjYW5uZXIKLQotCi0vKiBFbmFi
bGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNl
bmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZ
WUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9S
X1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQot
LyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQot
IyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBF
ICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUK
LQogeworCisKICAgICBzdHJ1Y3QgewogICAgICAgICBUU291cmNlTG9jIGxpbmU7CiAgICAgICAg
IHVuaW9uIHsKQEAgLTM0MCwxNyArMjUyLDE2IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQRQogICAg
ICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKICAgICAgICAgfTsKICAgICB9IGludGVybTsK
LX0KLS8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCiAKLQlZWVNUWVBFOworCisKK30gWVlTVFlQ
RTsKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjIGRlZmluZSB5eXN0eXBlIFlZU1RZ
UEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCiAjIGRlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCiAjZW5kaWYKIAog
Ci0KIC8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAog
CkBAIC0zNjAsMjggKzI3MSwyNiBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQq
IGNvbnRlCiAjZGVmaW5lIEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwg
UywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4g
dmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7
ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAg
XAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVy
cyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsg
IFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsg
IFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIg
c3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAogCi0vKiBMaW5lIDIxNiBvZiB5YWNj
LmMuICAqLwotCiAKICNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydApAQCAtNDU2LDE0ICszNjUs
MTQgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OwogI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyBpbnQKLVlZSUQgKGludCBpKQorWVlJRCAo
aW50IHl5aSkKICNlbHNlCiBzdGF0aWMgaW50Ci1ZWUlEIChpKQotICAgIGludCBpOworWVlJRCAo
eXlpKQorICAgIGludCB5eWk7CiAjZW5kaWYKIHsKLSAgcmV0dXJuIGk7CisgIHJldHVybiB5eWk7
CiB9CiAjZW5kaWYKIApAQCAtNTQ0LDkgKzQ1Myw5IEBAIHZvaWQgZnJlZSAodm9pZCAqKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9y
IGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5eXR5cGVfaW50MTYg
eXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsK
KyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0g
Z2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KICMgZGVmaW5l
IFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQpAQCAtNTgw
LDEyICs0ODksMTIgQEAgdW5pb24geXlhbGxvYwogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBh
bmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5j
ZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBz
dGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorIyBkZWZp
bmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKICAgICBkbwkJCQkJ
CQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0J
WVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5
cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywg
eXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAogCXl5bmV3
Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElN
VU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCiAgICAg
ICB9CQkJCQkJCQkJXApAQCAtNzQ5LDI2ICs2NTgsMjYgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7
CiAgICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAyMDMsICAgMjE2LCAgIDIyMSwgICAy
MjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwgICA0MjAsICAgNDMwLCAgIDQ0Mywg
ICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAotICAgICA1NzIsICAgNTc2LCAgIDU4
MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4LCAgIDY3OCwgICA2ODEsCi0gICAg
IDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAgNzI5LCAgIDczMCwgICA3MzksICAg
NzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUsICAgNzc2LCAgIDc4NiwgICA3OTYs
ICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4NDMsICAgODQ3LCAgIDg1MSwgICA4
NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4NCwgICA4OTcsCi0gICAgIDg5OCwg
ICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAgIDkzMiwgICA5MzMsICAgOTM3LCAg
IDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkxLCAgIDk5OCwgIDEwMzYsICAxMDM5
LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAxMTA3LCAgMTEzNiwgIDExNDEsICAx
MTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDExNzUsCi0gICAgMTE4MSwgIDExODgs
ICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwgIDEyODIsICAxMzAwLCAgMTMwOCwK
LSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4MSwgIDE0ODQsICAxNDkwLCAgMTQ5
OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAgMTUzNCwgIDE1MzcsICAxNTQzLCAg
MTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0gICAgMTU4MiwgIDE1ODcsICAxNTky
LCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcsICAxNjIyLCAgMTYyNywKLSAgICAx
NjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2NjQsICAxNjczLCAgMTY3OCwgIDE2
OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwgIDE3MTcsICAxNzMyLCAgMTc2OCwg
IDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgwNiwgIDE4MTAsICAxODExLCAgMTgx
NywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1LCAgMTgyNiwKLSAgICAxODI2LCAg
MTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAxODQyLCAgMTg0MiwgIDE4NDcsICAx
ODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAsICAxODc0LCAgMTg4MiwgIDE4ODYs
ICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5MjMsICAxOTIzLCAgMTkzMCwgIDE5
MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1NiwKLSAgICAxOTYwLCAgMTk2Nywg
IDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAgMjAxMiwgIDIwMTksICAyMDIyLAot
ICAgIDIwMjgsICAyMDI4CisgICAgIDMxNCwgICAzMTcsICAgNDI2LCAgIDQzNiwgICA0NDksICAg
NDU3LCAgIDU1NywgICA1NjAsICAgNTY4LCAgIDU3MiwKKyAgICAgNTc5LCAgIDU4MywgICA1OTAs
ICAgNTk2LCAgIDYwNSwgICA2MTMsICAgNjY4LCAgIDY3NSwgICA2ODUsICAgNjg4LAorICAgICA2
OTgsICAgNzA4LCAgIDcyOSwgICA3MzAsICAgNzMxLCAgIDczNiwgICA3MzcsICAgNzQ2LCAgIDc1
OCwgICA3NTksCisgICAgIDc2NywgICA3NzgsICAgNzgyLCAgIDc4MywgICA3OTMsICAgODAzLCAg
IDgxMywgICA4MjYsICAgODI3LCAgIDgzNywKKyAgICAgODUwLCAgIDg1NCwgICA4NTgsICAgODYy
LCAgIDg2MywgICA4NzYsICAgODc3LCAgIDg5MCwgICA4OTEsICAgOTA0LAorICAgICA5MDUsICAg
OTIyLCAgIDkyMywgICA5MzYsICAgOTM3LCAgIDkzOCwgICA5MzksICAgOTQwLCAgIDk0NCwgICA5
NDcsCisgICAgIDk1OCwgICA5NjYsICAgOTkzLCAgIDk5OCwgIDEwMDUsICAxMDQzLCAgMTA0Niwg
IDEwNTMsICAxMDYxLCAgMTA4MiwKKyAgICAxMTAzLCAgMTExNCwgIDExNDMsICAxMTQ4LCAgMTE1
OCwgIDExNjMsICAxMTczLCAgMTE3NiwgIDExNzksICAxMTgyLAorICAgIDExODgsICAxMTk1LCAg
MTE5OCwgIDEyMjAsICAxMjM4LCAgMTI2MiwgIDEyODUsICAxMjg5LCAgMTMwNywgIDEzMTUsCisg
ICAgMTM0NywgIDEzNjcsICAxNDU2LCAgMTQ2NSwgIDE0ODgsICAxNDkxLCAgMTQ5NywgIDE1MDUs
ICAxNTEzLCAgMTUyMSwKKyAgICAxNTMxLCAgMTUzOCwgIDE1NDEsICAxNTQ0LCAgMTU1MCwgIDE1
NTMsICAxNTY4LCAgMTU3MiwgIDE1NzYsICAxNTgwLAorICAgIDE1ODksICAxNTk0LCAgMTU5OSwg
IDE2MDQsICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwgIDE2MzQsCisgICAgMTY0
MCwgIDE2NDYsICAxNjUyLCAgMTY1NywgIDE2NjIsICAxNjcxLCAgMTY4MCwgIDE2ODUsICAxNjk4
LCAgMTY5OCwKKyAgICAxNzEyLCAgMTcxMiwgIDE3MjEsICAxNzI0LCAgMTczOSwgIDE3NzUsICAx
Nzc5LCAgMTc4NSwgIDE3OTMsICAxODA5LAorICAgIDE4MTMsICAxODE3LCAgMTgxOCwgIDE4MjQs
ICAxODI1LCAgMTgyNiwgIDE4MjcsICAxODI4LCAgMTgzMiwgIDE4MzMsCisgICAgMTgzMywgIDE4
MzMsICAxODQzLCAgMTg0NCwgIDE4NDgsICAxODQ4LCAgMTg0OSwgIDE4NDksICAxODU0LCAgMTg1
NywKKyAgICAxODY3LCAgMTg3MCwgIDE4NzYsICAxODc3LCAgMTg4MSwgIDE4ODksICAxODkzLCAg
MTkwMywgIDE5MDgsICAxOTI1LAorICAgIDE5MjUsICAxOTMwLCAgMTkzMCwgIDE5MzcsICAxOTM3
LCAgMTk0NSwgIDE5NDgsICAxOTU0LCAgMTk1NywgIDE5NjMsCisgICAgMTk2NywgIDE5NzQsICAx
OTgxLCAgMTk4OCwgIDE5OTUsICAyMDA2LCAgMjAxNSwgIDIwMTksICAyMDI2LCAgMjAyOSwKKyAg
ICAyMDM1LCAgMjAzNQogfTsKICNlbmRpZgogCkBAIC04MTIsMTYgKzcyMSwxNiBAQCBzdGF0aWMg
Y29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImluaXRfZGVjbGFyYXRvcl9saXN0Iiwg
InNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCiAgICJ0eXBlX3F1
YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKICAgInR5
cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0
X3NwZWNpZmllciIsCi0gICJAMSIsICJAMiIsICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJz
dHJ1Y3RfZGVjbGFyYXRpb24iLAorICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIs
ICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCiAgICJkZWNsYXJhdGlvbl9zdGF0
ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAotICAiY29tcG91bmRfc3Rh
dGVtZW50IiwgIkAzIiwgIkA0IiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAotICAic3RhdGVt
ZW50X3dpdGhfc2NvcGUiLCAiQDUiLCAiQDYiLCAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19z
Y29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiJEAzIiwgIiRANCIsICJzdGF0ZW1lbnRf
bm9fbmV3X3Njb3BlIiwKKyAgInN0YXRlbWVudF93aXRoX3Njb3BlIiwgIiRANSIsICIkQDYiLCAi
Y29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsCiAgICJzdGF0ZW1lbnRfbGlzdCIsICJl
eHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKLSAgInNlbGVjdGlv
bl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICJA
NyIsCi0gICJAOCIsICJAOSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0Iiwg
ImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQiLCAiY29u
ZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiJEA3IiwKKyAgIiRAOCIsICIkQDkiLCAi
Zm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJmb3JfcmVzdF9zdGF0ZW1lbnQi
LAogICAianVtcF9zdGF0ZW1lbnQiLCAidHJhbnNsYXRpb25fdW5pdCIsICJleHRlcm5hbF9kZWNs
YXJhdGlvbiIsCi0gICJmdW5jdGlvbl9kZWZpbml0aW9uIiwgIkAxMCIsIDAKKyAgImZ1bmN0aW9u
X2RlZmluaXRpb24iLCAiJEAxMCIsIDAKIH07CiAjZW5kaWYKIApAQCAtMTM0NSw5ICsxMjU0LDE4
IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogCiAvKiBMaWtlIFlZRVJS
T1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5
CiAgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9S
LCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24g
MSwgdGhpcyBjYW4gZ28uICAqLworICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVk
IHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICBIb3dldmVyLAorICAgWVlGQUlMIGFwcGVhcnMgdG8g
YmUgaW4gdXNlLiAgTmV2ZXJ0aGVsZXNzLCBpdCBpcyBmb3JtYWxseSBkZXByZWNhdGVkCisgICBp
biBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQg
aXMKKyAgIGRpc2N1c3NlZC4gICovCiAKICNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisj
aWYgZGVmaW5lZCBZWUZBSUwKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGZyb20gdGhlIEdDQyBjcHAncworICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBk
b24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dAorICAgICBzb21lIHVzZXJzIGRvLCBh
bmQgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlbW92ZQorICAgICBZWUZB
SUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gQmlzb24gMi41LiAgKi8K
KyNlbmRpZgogCiAjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKIApAQCAt
MTUxOCwxNyArMTQzNiwyMCBAQCB5eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZv
aWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0
b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2
ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9w
KQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlf
c3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9t
OworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRl
cnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8
PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207
CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTU2MywxMSArMTQ4NCwxMSBAQCB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCiAgIC8qIFRoZSBzeW1ib2xzIGJlaW5n
IHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAg
ewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKIAkJICAgICAgICYo
eXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQogCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0
KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CiAgICAgfQogfQogCkBAIC0xODQ5LDEwICsxNzcwLDggQEAgeXlkZXN0cnVjdCAo
eXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbgogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyog
UHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVm
IFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTE4NzEsMTAgKzE3OTAs
OSBAQCBpbnQgeXlwYXJzZSAoKTsKIAogCiAKLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAg
fAotYC0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNl
IG9yIHl5cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lm
ZGVmIFlZUEFSU0VfUEFSQU0KICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXApAQCAtMTg5OCwyMiArMTgxNiw0NiBAQCB5eXBhcnNlIChjb250ZXh0KQogI2Vu
ZGlmCiAjZW5kaWYKIHsKLSAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBs
b29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1
ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9m
IHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCi0vKiBOdW1iZXIg
b2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7CisgICAgLyogTnVtYmVy
IG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJyczsKKworICAgIGlu
dCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9y
IG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRo
ZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0
ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAg
IFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlv
dmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAg
LyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQ
VEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOwor
CisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNh
W1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOwor
CisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CiAKLSAgaW50IHl5c3RhdGU7CiAgIGludCB5eW47
CiAgIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUg
ZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9v
ay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAg
Ki8KLSAgaW50IHl5dG9rZW4gPSAwOworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJu
YWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOworICAvKiBU
aGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBm
cm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCiAj
aWYgWVlFUlJPUl9WRVJCT1NFCiAgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBp
dHMgYWxsb2NhdGVkIHNpemUuICAqLwogICBjaGFyIHl5bXNnYnVmWzEyOF07CkBAIC0xOTIxLDUx
ICsxODYzLDI4IEBAIGludCB5eW5lcnJzOwogICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVv
ZiB5eW1zZ2J1ZjsKICNlbmRpZgogCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6
Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0
byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0K
LSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxv
dyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0g
IC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBU
SF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3Nw
OwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2Fb
WVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNw
OwotCi0KLQogI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0g
KE4pKQogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhl
IHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJv
bSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQotCiAg
IC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUu
CiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8K
ICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5
eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJTlRG
ICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5eXN0YXRlID0gMDsKICAgeXll
cnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENh
dXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNl
IGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVy
cy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCiAg
ICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFj
ay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwot
CiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBAIC0xOTk1LDcgKzE5MTQsNiBA
QCBpbnQgeXluZXJyczsKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2ICp5
eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0
aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0yMDAzLDcgKzE5MjEsNiBAQCBp
bnQgeXluZXJyczsKIAl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKIAkJICAg
ICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAogCQkgICAgJnl5dnMxLCB5eXNpemUg
KiBzaXplb2YgKCp5eXZzcCksCi0KIAkJICAgICZ5eXN0YWNrc2l6ZSk7CiAKIAl5eXNzID0geXlz
czE7CkBAIC0yMDI2LDkgKzE5NDMsOCBAQCBpbnQgeXluZXJyczsKIAkgICh1bmlvbiB5eWFsbG9j
ICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEg
eXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3Mp
OwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19h
bGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAjICB1
bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFDS19G
UkVFICh5eXNzMSk7CkBAIC0yMDM5LDcgKzE5NTUsNiBAQCBpbnQgeXluZXJyczsKICAgICAgIHl5
c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAx
OwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRv
ICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAgLTIw
NDksNiArMTk2NCw5IEBAIGludCB5eW5lcnJzOwogCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVu
dGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CiAKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5B
TCkKKyAgICBZWUFDQ0VQVDsKKwogICBnb3RvIHl5YmFja3VwOwogCiAvKi0tLS0tLS0tLS0tLgpA
QCAtMjA1NywxNiArMTk3NSwxNiBAQCBpbnQgeXluZXJyczsKIHl5YmFja3VwOgogCiAgIC8qIERv
IGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEK
LSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0
IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBG
aXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2Fo
ZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZ
UEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQg
YSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBO
b3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZh
bGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZ
IG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEg
dG9rZW46ICIpKTsKQEAgLTIwOTgsMjAgKzIwMTYsMTYgQEAgeXliYWNrdXA6CiAgICAgICBnb3Rv
IHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7
Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAgICAg
eXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisg
IC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJT
aGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQgdGhl
IHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlF
T0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tl
bi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisreXl2
c3AgPSB5eWx2YWw7CkBAIC0yMTU3LDcgKzIwNzEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29u
c3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7CiAgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wgPT0gMCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAg
ICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsyMDgwLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9u
bHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5p
c1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjE4MywxNCArMjA5Nywx
NCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDQ6CkBAIC0yMjAxLDEzICsyMTE1LDEzIEBAIHl5cmVkdWNlOgogICAgICAg
ICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cwogICAgICAgICAvLwogICAgICAg
ICBpZiAoYWJzKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSkgPj0gKDEgPDwgMTYpKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50
ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVy
ZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CiAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKQEAgLTIyMTYsNyArMjEzMCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRG
bG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OgpAQCAtMjIyNSwyMSAr
MjEzOSwyMSBAQCB5eXJlZHVjZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKQEAgLTIyNDcsOSArMjE2MSw5
IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCEoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5s
aW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3Rv
ciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1i
b2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMg
bm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0
eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIg
bGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJl
eHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBA
IC0yMjY2LDcgKzIxODAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSB8fCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8
PCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNBcnJheSgpKSB7CkBAIC0yMjc5LDcgKzIxOTYsMTAgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+PSAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldEFy
cmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9m
IHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMjMxNiwyMSArMjIzNiwyMSBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCks
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24o
KSwgRXZxVGVtcG9yYXJ5KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExOgogCiAgICAgewogICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFw
cGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMjM3NSw3ICsyMjk1LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmll
bGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5
ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHll
dCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0yMzkzLDcgKzIz
MTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwog
ICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAg
ICAgaWYgKGZpZWxkcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJu
YWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQy
NSwxOCArMjM0NSwxOCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAi
IG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwg
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGlu
ZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJp
eCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBv
ciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQogICAgICAgICAvLyBkb24ndCBkZWxldGUg
JDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEyOgpAQCAtMjQ1MCw3ICsyMzcwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6CkBAIC0yNDY0
LDcgKzIzODQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKQEAgLTI0NzMsNyArMjM5Myw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE1OgpAQCAtMjUzMCw5ICsyNDUwLDEwIEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgMCwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0
TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlv
bi4gIFR5cGU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5j
dGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJl
YW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNTU2LDcgKzI0NzcsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWduIiwgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVk
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQg
dmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJD
b25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFt
ZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0yNTczLDIzICsyNDk0LDIzIEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBmbkNhbGw7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTc6CiAKICAgICB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwg
IiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxp
bmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4OgpAQCAtMjU5Nyw3
ICsyNTE4LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxOToKQEAgLTI2MDUsNyArMjUyNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAo
eXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA6CkBAIC0yNjEzLDcgKzI1MzQsNyBAQCB5
eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMToKQEAg
LTI2MjEsNyArMjU0Miw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwogICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDIyOgpAQCAtMjYzMSw3ICsyNTUyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcihwYXJhbSk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMjM6CkBAIC0yNjQxLDE0ICsyNTYyLDE0IEBAIHl5cmVkdWNlOgog
ICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIo
cGFyYW0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuZnVuY3Rpb247CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rp
b24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDI1OgpAQCAtMjY5Nyw3ICsyNjE4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMg
dHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBl
KSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNp
Y1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpOwogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0yNzA3LDcgKzI2MjgsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOwogICAgICAgICBU
RnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3Ap
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY6CkBAIC0yNzE4LDcgKzI2MzksNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZywgdHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVu
Y3Rpb247Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzoKQEAgLTI3Mjks
MTQgKzI2NTAsMTQgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKTsKICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24o
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMjg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk6CkBAIC0yNzUwLDcgKzI2NzEsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAzMDoKQEAgLTI3NjQsNyArMjY4NSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAg
IH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDMxOgpAQCAtMjc4NSwyNyAr
MjcwNiwyNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDMyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IDt9CisgICAgeyAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcE51bGw7IH0KICAgICBicmVhazsKIAogICBjYXNlIDMzOgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyA7fQorICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOZWdh
dGl2ZTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzQ6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0p
LmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0g
RU9wTG9naWNhbE5vdDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMzU6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDM2OgpAQCAt
MjgxOCw3ICsyNzM5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzc6CkBAIC0yODMxLDEyICsyNzUyLDEyIEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDM4OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToKQEAgLTI4NDgsNyArMjc2OSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDQwOgpAQCAtMjg2MCwxNyArMjc4MSwxNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MToKIAot
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDQzOgpAQCAt
Mjg4NCw3ICsyODA1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDQ0OgpAQCAtMjg5OCw3ICsyODE5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDQ1OgpAQCAtMjkxMiw3ICsyODMzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQ2OgpAQCAtMjkyNiwxMiArMjg0NywxMiBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDQ4OgpAQCAtMjk0NSw3ICsyODY2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDQ5OgpAQCAtMjk1OSwyNyArMjg4MCwyNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNTA6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUxOgogCi0g
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA1MjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9Cisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTM6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDU0OgpAQCAtMjk5MywxMiArMjkxNCwxMiBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDU2OgpAQCAtMzAxMiwxMiArMjkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNTc6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDU4OgpAQCAtMzAzMSwxMiAr
Mjk1MiwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
KTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTk6CiAK
LSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDYwOgpAQCAtMzA1NCwxMiArMjk3NSwxMiBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSA2MToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjI6CkBAIC0zMDczLDM5ICsyOTk0LDM5IEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDYzOgogCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZh
bC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyA7fQorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgNjQ6CiAKLSAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgO30KKyAgICB7IEZS
QUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjU6CiAKLSAg
ICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAg
ICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2
YWwuaW50ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgO30KKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIv
PSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcERp
dkFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjY6CiAKLSAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IDt9Cisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxp
bmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
QWRkQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NzoKIAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgO30K
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BTdWJBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY4OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDY5OgpAQCAtMzExNyw3ICszMDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzA6CkBAIC0zMTI2LDcgKzMwNDcs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzE6CkBAIC0zMTU3LDcgKzMwNzgsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHByb3RvdHlwZTsKIAogICAg
ICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDcyOgpAQCAtMzE2Niw3ICszMDg3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKICAgICAgICAg
ICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BE
ZWNsYXJhdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDczOgpAQCAtMzE3NCw3ICszMDk1LDcgQEAgeXlyZWR1Y2U6CiAgICAg
ewogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAoeXl2
c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJt
LnByZWNpc2lvbikgKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKQEAgLTMxOTEsMTIgKzMxMTIs
MTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0
PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAgICAgICBpZiAocHJldkRl
YykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVy
bG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJp
bmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBy
ZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIg
cXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMyMTMsMjEgKzMxMzQsMjEgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBpbm5lciBzY29wZSBsZXZlbCBvZiB0
aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYW5kIGJvZHkgc3RhdGVtZW50LgogICAgICAgICAvLyBB
ZGQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB0byB0aGUgc3Vycm91bmRpbmcgc2NvcGUgaW5zdGVh
ZC4KICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0T3V0ZXJMZXZlbCgpLT5pbnNlcnQo
Kih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDc1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA3NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlv
bikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgNzc6CkBAIC0zMjM5LDcgKzMxNjAsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFt
ZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDc4OgpAQCAtMzI1Myw3ICszMTc0LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0
ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50
IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGJlIGFuIGFy
Z3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtKS5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewpAQCAtMzI2MSwxNCArMzE4Miwx
NCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pLnBhcmFtKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgNzk6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2Vk
IGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZv
bHZlZCBhcyB3ZWxsLi4uCkBAIC0zMjgyLDE0ICszMjAzLDE0IEBAIHl5cmVkdWNlOgogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOwogICAgICAgICAKICAgICAgICAg
Y29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgODA6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIs
ICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVz
ZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGlu
ZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkKQEAgLTMyOTcsNyArMzIxOCw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMild
LmxleCkuc3RyaW5nLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MToKQEAgLTMzMTksNyArMzI0MCw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgdHlwZSB9OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAt
ICg1KV0ubGV4KS5saW5lOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6CkBAIC0zMzI4LDcgKzMyNDks
NyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFso
MykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6CkBAIC0zMzM5LDcgKzMyNjAsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNv
bnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2
cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5p
bnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6CkBAIC0zMzQ4LDcgKzMyNjksNyBA
QCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pOwogICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0p
LnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6CkBAIC0zMzU5LDM1ICszMjgwLDM1IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29u
dGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVybSkubGluZSwgRXZx
VGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmlu
dGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NjoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxSW47Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4ODoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxT3V0OwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTA6CkBAIC0zMzk1LDE0ICszMzE2LDE0IEBAIHl5cmVkdWNlOgogICAgIHsKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKSkgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsK
LSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDkxOgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKQEAgLTM0MTAsNyArMzMzMSw3IEBAIHl5cmVk
dWNlOgogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZS50
eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxl
eCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBp
ZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfQogCkBAIC0zNDI4LDcgKzMzNDksNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6CkBAIC0zNDUwLDcgKzMzNzEsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWyg0KSAt
ICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgOTQ6CkBAIC0zNDc4LDcgKzMzOTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIHR5
cGUuc2V0QXJyYXlTaXplKHNpemUpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygx
KSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqKHl5dnNwWygzKSAt
ICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSksICh5
eXZzcFsoMykgLSAoNildLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDk1OgpAQCAtMzUwMiw3ICszNDIzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA5NjoKQEAgLTM1MTAsNyArMzQzMSw3IEBAIHl5cmVkdWNlOgogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NzoKQEAgLTM1
MzIsMTkgKzM0NTMsMTkgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAgICAgICAgICBzeW1ib2wt
PnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDk4OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3Vw
cG9ydGVkIiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAidW5zaXpl
ZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAg
ICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
bWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OToKQEAgLTM1ODAsNyArMzUw
MSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKICAg
ICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKICAg
ICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAwOgpAQCAtMzYw
NCw3ICszNTI1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwogICAgICAg
ICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDE6CkBAIC0zNjE2LDcg
KzM1MzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZS5zZXRCYXNp
YyhFYnRJbnZhcmlhbnQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eXZzcFsoMikgLSAoMild
LmxleCkubGluZSk7CiAgICAgICAgIGlmICghKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zeW1ib2wp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMild
LmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQi
LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAidW5kZWNsYXJl
ZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
MDsKQEAgLTM2MjYsNyArMzU0Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgVEludGVybVN5
bWJvbCAqc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZhbC5pbnRlcm0pLnR5cGUpLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9s
LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6CkBAIC0zNjM1LDQyICszNTU2LDQyIEBAIHl5cmVk
dWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpOwogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
YXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKICAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYm
CiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0
Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5u
b3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNToKQEAg
LTM2ODAsNyArMzYwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cUF0dHJpYnV0ZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwNjoKQEAgLTM2OTIsNyArMzYxMyw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBF
dnFWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZh
cnlpbmdJbiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEwNzoKQEAgLTM3MDQsNyArMzYyNSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZh
cmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cUludmFyaWFudFZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwODoKQEAgLTM3MTMsNyArMzYzNCw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTA5OgpAQCAtMzcyNyw3ICszNjQ4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTA6CkBAIC0zNzM1LDM1ICszNjU2LDM1IEBAIHl5
cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNp
b24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDExMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwSGlnaDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDExMjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJw
TWVkaXVtOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEzOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTU6CkBAIC0zNzc5LDcgKzM3MDAsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwogICAgICAgICB9Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTY6CkBAIC0zNzg3LDcgKzM3MDgsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTE3OgpAQCAtMzc5NSw3ICszNzE2LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTg6CkBAIC0zODAzLDcgKzM3MjQsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTk6CkBAIC0zODExLDcgKzM3MzIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIwOgpAQCAtMzgyMCw3ICszNzQxLDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
Mik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjE6CkBAIC0zODI5LDcg
KzM3NTAsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMjoK
QEAgLTM4MzgsNyArMzc1OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTIzOgpAQCAtMzg0Nyw3ICszNzY4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEyNDoKQEAgLTM4NTYsNyArMzc3Nyw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjU6CkBAIC0zODY1LDcgKzM3ODYsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI2OgpAQCAtMzg3NCw3ICszNzk1
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVn
YXRlKDIpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI3OgpAQCAtMzg4
Myw3ICszODA0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI4
OgpAQCAtMzg5Miw3ICszODEzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTI5OgpAQCAtMzkwMiw3ICszODIzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzA6CkBAIC0zOTEyLDcgKzM4MzMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzLCB0cnVl
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMToKQEAgLTM5MjIsNyAr
Mzg0Myw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDQsIHRydWUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTMyOgpAQCAtMzkzMSw3ICszODUyLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzYW1wbGVyMkQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMzOgpAQCAtMzk0MCwzMyArMzg2
MSwzMyBAQCB5eXJlZHVjZToKICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJlIiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJD
dWJlLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTM0OgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3Vw
cG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlw
ZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VT
IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBs
ZXJFeHRlcm5hbE9FUywgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzNToKIAogICAgIHsKICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVk
IHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFJl
Y3QsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMzY6CkBAIC0zOTc1LDcgKzM4OTYsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZp
ZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzc6CkBA
IC0zOTg5LDEyICszOTEwLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0
LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTM4OgogCi0gICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRl
clN0cnVjdERlY2xhcmF0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgKih5eXZzcFso
MikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAxMzk6CkBAIC00MDEyLDEyICszOTMzLDEyIEBAIHl5cmVkdWNlOgogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAo
eXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJh
dGlvbigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQwOgogCi0gICAg
eyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292
ZXIoKTsgO30KKyAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkg
Y29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDE6CkBAIC00MDI3
LDE0ICszOTQ4LDE0IEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxp
bmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CiAg
ICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTQyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGlzdCk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDM6CkBAIC00MDUwLDcgKzM5NzEsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
c3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXSk7
CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0NDoKQEAg
LTQwODcsNyArNDAwOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTQ1OgpAQCAtNDA5NSwxNCArNDAxNiwxNCBAQCB5eXJlZHVjZToKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0gTmV3UG9vbFRUeXBlTGlzdCgp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVz
aF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGluZSkpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ3OgpAQCAtNDExNCw3ICs0MDM1LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0
Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlTGluZSkudHlwZS0+c2V0RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmlu
Zyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDg6CkBAIC00MTMxLDY3
ICs0MDUyLDY3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0QXJyYXlTaXpl
KHNpemUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ5OgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxNTA6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTE6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgO30K
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUyOgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUz
OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTU0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU2OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU3OgogCi0gICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU4OgogCi0gICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU5OgogCi0g
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKIAotICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTYxOgpAQCAtNDIwMiw0NCArNDEyMyw0NCBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpLT5zZXRFbmRMaW5lKCh5eXZzcFsoNSkgLSAoNSldLmxleCkubGluZSk7CiAgICAg
ICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gKHl5dnNwWygz
KSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNjI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjM6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjQ6CiAKLSAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY1OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjY6CiAKLSAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY3OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjg6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTY5OgpAQCAtNDI1MCwzMSArNDE3MSwzMSBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRFbmRMaW5l
KCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcwOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksIDApOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcxOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdn
cmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
MDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTczOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NDoKQEAgLTQyODMs
NyArNDIwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxp
bmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc1OgpAQCAtNDI5MSw3
ICs0MjEyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICAg
ICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzY6
CkBAIC00Mjk5LDcgKzQyMjAsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5v
ZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzc6CkBAIC00MzA4LDcgKzQyMjksNyBAQCB5
eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0TGluZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxNzg6CkBAIC00MzI2LDEyICs0MjQ3LDEyIEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTc5OgogCi0gICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsr
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODA6CkBAIC00MzQwLDEyICs0MjYxLDEyIEBAIHl5cmVkdWNlOgogICAgICAgICBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICh5eXZzcFso
NCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDYpIC0gKDYpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNildLmxleCkubGluZSk7CiAgICAgICAg
IC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE4MToKIAotICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQor
ICAgIHsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxODI6CkBAIC00MzU2LDEyICs0Mjc3LDEyIEBAIHl5cmVkdWNlOgogCiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9v
cERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAw
LCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNCkgLSAoOCld
LmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKIAotICAgIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgpAQCAtNDM3MCwzNSArNDI5MSwzNSBAQCB5eXJl
ZHVjZToKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9v
cEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCByZWludGVycHJldF9j
YXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9k
ZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmlu
dGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2c3BbKDcpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eXZzcFsoMSkgLSAoNyldLmxleCkubGluZSk7CiAgICAgICAgIC0tY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE4NToK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE4NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE4NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODk6CkBAIC00NDA2LDcgKzQzMjcsNyBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE5MDoKQEAgLTQ0MTQsMjkgKzQzMzUsMjkgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICBpZiAoY29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBh
bGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93
ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTI6CiAKICAgICB7CiAg
ICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRl
bWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgKHl5dnNwWygxKSAtICgyKV0ubGV4
KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE5MzoKQEAgLTQ0
NDQsMTAgKzQzNjUsMTAgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBm
dW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1
bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE5NDoKQEAgLTQ0NTYsMTMgKzQzNzcsMTMgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNo
KEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlID0gdHJ1ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5
cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVy
biBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVu
Y3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJmdW5j
dGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxOTU6CkBAIC00NDcwLDcgKzQzOTEsNyBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTY6CkBAIC00NDc4LDcgKzQzOTks
NyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAgIGNvbnRleHQt
PnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE5NzoKQEAgLTQ0ODYsMjEgKzQ0MDcsMjEgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwogICAgICAgICBj
b250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTk6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDA6CkBA
IC00NTE3LDcgKzQ0MzgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAg
ICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5LgogICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
bGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCku
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CkBAIC00NTI3LDcgKzQ0NDgs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1l
KCkgPT0gIm1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFtQ291bnQo
KSA+IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwg
ZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90
IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Vm9pZCkgewpAQCAtNDU1OSw3ICs0NDgwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAg
Ly8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgog
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFy
aWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTQ1ODAsNyArNDUwMSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9w
UGFyYW1ldGVycywgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKICAgICAgICAgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwogICAg
ICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDIwMToKQEAgLTQ2MDAsMTkgKzQ1MjEsMTcgQEAgeXlyZWR1Y2U6CiAK
ICAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9w
dGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRpb24u
IFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRp
bWl6ZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcoY29udGV4dC0+Y29u
dGV4dFByYWdtYS5kZWJ1Zyk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdl
dEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5w
cmFnbWFUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWco
Y29udGV4dC0+cHJhZ21hKCkuZGVidWcpOwogCiAgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtTm9kZSkgJiYgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5v
ZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpKQogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldEVuZExpbmUoKSk7CiAKICAgICAg
ICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAgIGRlZmF1bHQ6IGJyZWFr
OwogICAgIH0KQEAgLTQ2MjQsNyArNDU0Myw2IEBAIHl5cmVkdWNlOgogCiAgICorK3l5dnNwID0g
eXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24u
ICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBz
dGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQg
YnkuICAqLwpAQCAtNDY4OSw3ICs0NjA3LDcgQEAgeXllcnJsYWI6CiAKICAgaWYgKHl5ZXJyc3Rh
dHVzID09IDMpCiAgICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJl
dXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5k
IGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KIAkgZXJyb3IsIGRpc2Nh
cmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQpAQCAtNDcwNiw3ICs0NjI0
LDcgQEAgeXllcnJsYWI6CiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNl
IGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2ls
bCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgog
ICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC00NzYzLDkgKzQ2ODEsNiBA
QCB5eWVycmxhYjE6CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwogICAgIH0K
IAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgKisreXl2c3AgPSB5
eWx2YWw7CiAKIApAQCAtNDc5MCw3ICs0NzA1LDcgQEAgeXlhYm9ydGxhYjoKICAgeXlyZXN1bHQg
PSAxOwogICBnb3RvIHl5cmV0dXJuOwogCi0jaWZuZGVmIHl5b3ZlcmZsb3cKKyNpZiAhZGVmaW5l
ZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5
IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ4MDEsNyArNDcxNiw3IEBAIHl5ZXhoYXVzdGVk
bGFiOgogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hh
ciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3Qg
KCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsLCBj
b250ZXh0KTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI0ICsxLDIyIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi4zLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMi4g
ICovCiAKIC8qIFNrZWxldG9uIGludGVyZmFjZSBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2Vy
cyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwg
MjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwg
MTk4OS0xOTkwLCAyMDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0
aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0
aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisg
ICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8K
KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1h
eSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0
aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjks
MTAgKzI3LDExIEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUg
c2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBs
aWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQg
dGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9u
IHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9u
IDIuMiBvZiBCaXNvbi4gICovCiAKKwogLyogVG9rZW5zLiAgKi8KICNpZm5kZWYgWVlUT0tFTlRZ
UEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xMzQsMTA4ICsxMzMsMTQgQEAKICAgICAgUVVF
U1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIElOVkFS
SUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Ci0jZGVmaW5lIE1FRElVTV9QUkVD
SVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCi0jZGVmaW5lIFBSRUNJU0lPTiAy
NjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBDT05TVF9RVUFMIDI2NAotI2RlZmlu
ZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUgMjY2Ci0jZGVmaW5lIElOVF9UWVBF
IDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09OVElOVUUgMjY5Ci0jZGVmaW5lIERP
IDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1IgMjcyCi0jZGVmaW5lIElGIDI3Mwot
I2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4gMjc1Ci0jZGVmaW5lIEJWRUMyIDI3
NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQgMjc4Ci0jZGVmaW5lIElWRUMyIDI3
OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQgMjgxCi0jZGVmaW5lIFZFQzIgMjgy
Ci0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0Ci0jZGVmaW5lIE1BVFJJWDIgMjg1
Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJWDQgMjg3Ci0jZGVmaW5lIElOX1FV
QUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmluZSBJTk9VVF9RVUFMIDI5MAotI2Rl
ZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5MgotI2RlZmluZSBTVFJVQ1QgMjkz
Ci0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJTEUgMjk1Ci0jZGVmaW5lIFNBTVBM
RVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0jZGVmaW5lIFNBTVBMRVJfRVhURVJO
QUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5OQotI2RlZmluZSBJREVOVElGSUVS
IDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5lIEZMT0FUQ09OU1RBTlQgMzAyCi0j
ZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09MQ09OU1RBTlQgMzA0Ci0jZGVmaW5l
IEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9PUCAzMDYKLSNkZWZpbmUgUklHSFRf
T1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUgREVDX09QIDMwOQotI2RlZmluZSBM
RV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5lIEVRX09QIDMxMgotI2RlZmluZSBO
RV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmluZSBPUl9PUCAzMTUKLSNkZWZpbmUg
WE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwotI2RlZmluZSBESVZfQVNTSUdOIDMx
OAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBNT0RfQVNTSUdOIDMyMAotI2RlZmlu
ZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNTSUdOIDMyMgotI2RlZmluZSBBTkRf
QVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAotI2RlZmluZSBPUl9BU1NJR04gMzI1
Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExFRlRfUEFSRU4gMzI3Ci0jZGVmaW5l
IFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNLRVQgMzI5Ci0jZGVmaW5lIFJJR0hU
X0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMxCi0jZGVmaW5lIFJJR0hUX0JSQUNF
IDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1BIDMzNAotI2RlZmluZSBDT0xPTiAz
MzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlDT0xPTiAzMzcKLSNkZWZpbmUgQkFO
RyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElMREUgMzQwCi0jZGVmaW5lIFBMVVMg
MzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNIIDM0MwotI2RlZmluZSBQRVJDRU5U
IDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmluZSBSSUdIVF9BTkdMRSAzNDYKLSNk
ZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJFVCAzNDgKLSNkZWZpbmUgQU1QRVJT
QU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAKIAogI2lmICEgZGVmaW5lZCBZWVNU
WVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZ
UEUKLQogeworCisKICAgICBzdHJ1Y3QgewogICAgICAgICBUU291cmNlTG9jIGxpbmU7CiAgICAg
ICAgIHVuaW9uIHsKQEAgLTI2NSwxNCArMTcwLDE1IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQRQog
ICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKICAgICAgICAgfTsKICAgICB9IGludGVy
bTsKLX0KLS8qIExpbmUgMTUyOSBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZ
U1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZ
WVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlT
VFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlm
CiAKIAogCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRl
cm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMzLDE1ICs0MzMsMTUgQEAgcHJvdGVjdGVkOgogCiB0eXBlZGVmIFRWZWN0b3I8VEludGVybU5v
ZGUqPiBUSW50ZXJtU2VxdWVuY2U7CiB0eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlz
dDsKLXR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3RyaW5nPiBUUHJhZ21hVGFibGU7CisKIC8vCiAv
LyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNldCBvZiBjaGlsZHJl
bi4KIC8vCiBjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7
CiBwdWJsaWM6Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51
bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHByYWdtYVRhYmxlKDApLCBlbmRMaW5lKDApLCB1c2VF
bXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRv
ciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCksIHVzZUVtdWxhdGVkRnVu
Y3Rpb24oZmFsc2UpIHsgfQotICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyBkZWxldGUgcHJhZ21h
VGFibGU7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVs
bCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgZW5kTGluZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihm
YWxzZSkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3Bl
cmF0b3IobyksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQorICAgIH5USW50ZXJtQWdn
cmVnYXRlKCkgeyB9CiAKICAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVn
YXRlKCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7CkBAIC00NTIsMTQgKzQ1MiwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFN0
cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KIAogICAgIHZvaWQgc2V0VXNl
ckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNVc2VyRGVmaW5l
ZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgY29u
c3QgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBv
KSB7IG9wdGltaXplID0gbzsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRp
bWl6ZTsgfQogICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQogICAgIGJv
b2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQotICAgIHZvaWQgYWRkVG9QcmFnbWFUYWJs
ZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7Ci0gICAgY29uc3QgVFByYWdtYVRhYmxlJiBn
ZXRQcmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorCiAgICAgdm9p
ZCBzZXRFbmRMaW5lKFRTb3VyY2VMb2MgbGluZSkgeyBlbmRMaW5lID0gbGluZTsgfQogICAgIFRT
b3VyY2VMb2MgZ2V0RW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIGVuZExpbmU7IH0KIApAQCAtNDc1
LDcgKzQ3NCw2IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgb3B0aW1pemU7CiAgICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOwogICAgIFRTb3VyY2VMb2MgZW5k
TGluZTsKIAogICAgIC8vIElmIHNldCB0byB0cnVlLCByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5j
dGlvbiBjYWxsIHdpdGggYW4gZW11bGF0ZWQgb25lCkBAIC01MzMsNiArNTMxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCiAgICAgICAgICAgICByaWdodFRv
TGVmdChyaWdodFRvTGVmdCksCiAgICAgICAgICAgICBkZXB0aCgwKSB7fQorICAgIHZpcnR1YWwg
flRJbnRlcm1UcmF2ZXJzZXIoKSB7fTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKikge30KICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJ
bnRlcm1Db25zdGFudFVuaW9uKikge30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9vc2luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTcsNyArMTcsNyBAQAogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19saW51eF9fKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9f
T3BlbkJTRF9fKSB8fCBcCiAgICAgICBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKEFORFJPSUQp
IHx8IFwKLSAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05VX18pIHx8IGRl
ZmluZWQoX19RTlhfXykKKyAgICAgIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fR05V
X18pCiAjZGVmaW5lIEFOR0xFX09TX1BPU0lYCiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIHBs
YXRmb3JtLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzE4KQorCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIgorCitURGVwZW5kZW5jeUdyYXBoOjpURGVwZW5k
ZW5jeUdyYXBoKFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlKQoreworICAgIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjpidWlsZChpbnRlcm1Ob2RlLCB0aGlzKTsKK30KKworVERlcGVuZGVuY3lHcmFw
aDo6flREZXBlbmRlbmN5R3JhcGgoKQoreworICAgIGZvciAoVEdyYXBoTm9kZVZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1BbGxOb2Rlcy5iZWdpbigpOyBpdGVyICE9IG1BbGxOb2Rlcy5l
bmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9Cit9CisKK1RHcmFwaEFyZ3VtZW50KiBURGVwZW5k
ZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlv
bkNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGFyZ3VtZW50TnVtYmVyKQoreworICAgIFRHcmFwaEFyZ3VtZW50KiBhcmd1bWVudCA9IG5l
dyBUR3JhcGhBcmd1bWVudChpbnRlcm1GdW5jdGlvbkNhbGwsIGFyZ3VtZW50TnVtYmVyKTsKKyAg
ICBtQWxsTm9kZXMucHVzaF9iYWNrKGFyZ3VtZW50KTsKKyAgICByZXR1cm4gYXJndW1lbnQ7Cit9
CisKK1RHcmFwaEZ1bmN0aW9uQ2FsbCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25D
YWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhG
dW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG5ldyBUR3JhcGhGdW5jdGlvbkNhbGwoaW50ZXJt
RnVuY3Rpb25DYWxsKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7Cisg
ICAgaWYgKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmlzVXNlckRlZmlu
ZWQoKSkKKyAgICAgICAgbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5wdXNoX2JhY2soZnVuY3Rp
b25DYWxsKTsKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOworfQorCitUR3JhcGhTeW1ib2wqIFRE
ZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5
bWJvbCkKK3sKKyAgICBUU3ltYm9sSWRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtU3ltYm9s
SWRNYXAuZmluZChpbnRlcm1TeW1ib2wtPmdldElkKCkpOworCisgICAgVEdyYXBoU3ltYm9sKiBz
eW1ib2wgPSBOVUxMOworCisgICAgaWYgKGl0ZXIgIT0gbVN5bWJvbElkTWFwLmVuZCgpKSB7Cisg
ICAgICAgIFRTeW1ib2xJZFBhaXIgcGFpciA9ICppdGVyOworICAgICAgICBzeW1ib2wgPSBwYWly
LnNlY29uZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeW1ib2wgPSBuZXcgVEdyYXBoU3ltYm9s
KGludGVybVN5bWJvbCk7CisgICAgICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKwor
ICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIoaW50ZXJtU3ltYm9sLT5nZXRJZCgpLCBzeW1ib2wp
OworICAgICAgICBtU3ltYm9sSWRNYXAuaW5zZXJ0KHBhaXIpOworCisgICAgICAgIC8vIFdlIHNh
dmUgYWxsIHNhbXBsZXIgc3ltYm9scyBpbiBhIGNvbGxlY3Rpb24sIHNvIHdlIGNhbiBzdGFydCBn
cmFwaCB0cmF2ZXJzYWxzIGZyb20gdGhlbSBxdWlja2x5LgorICAgICAgICBpZiAoSXNTYW1wbGVy
KGludGVybVN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpKQorICAgICAgICAgICAgbVNhbXBsZXJTeW1i
b2xzLnB1c2hfYmFjayhzeW1ib2wpOworICAgIH0KKworICAgIHJldHVybiBzeW1ib2w7Cit9CisK
K1RHcmFwaFNlbGVjdGlvbiogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbikKK3sKKyAgICBUR3JhcGhTZWxlY3Rpb24qIHNl
bGVjdGlvbiA9IG5ldyBUR3JhcGhTZWxlY3Rpb24oaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKHNlbGVjdGlvbik7CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKwor
VEdyYXBoTG9vcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50
ZXJtTG9vcCkKK3sKKyAgICBUR3JhcGhMb29wKiBsb29wID0gbmV3IFRHcmFwaExvb3AoaW50ZXJt
TG9vcCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhsb29wKTsKKyAgICByZXR1cm4gbG9vcDsK
K30KKworVEdyYXBoTG9naWNhbE9wKiBURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb2dpY2FsT3Ao
VEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQoreworICAgIFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wID0gbmV3IFRHcmFwaExvZ2ljYWxPcChpbnRlcm1Mb2dpY2FsT3ApOworICAgIG1B
bGxOb2Rlcy5wdXNoX2JhY2sobG9naWNhbE9wKTsKKyAgICByZXR1cm4gbG9naWNhbE9wOworfQor
Citjb25zdCBjaGFyKiBUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKCkgY29uc3QKK3sKKyAg
ICBjb25zdCBjaGFyKiBvcFN0cmluZyA9IE5VTEw7CisgICAgc3dpdGNoIChnZXRJbnRlcm1Mb2dp
Y2FsT3AoKS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG9wU3RyaW5n
ID0gImFuZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogb3BTdHJpbmcgPSAi
b3IiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3BTdHJpbmcgPSAidW5rbm93biI7IGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gb3BTdHJpbmc7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIxMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQ
RU5ERU5DWV9HUkFQSF9ICisjZGVmaW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JB
UEhfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNsdWRlIDxz
ZXQ+CisjaW5jbHVkZSA8c3RhY2s+CisKK2NsYXNzIFRHcmFwaE5vZGU7CitjbGFzcyBUR3JhcGhQ
YXJlbnROb2RlOworY2xhc3MgVEdyYXBoQXJndW1lbnQ7CitjbGFzcyBUR3JhcGhGdW5jdGlvbkNh
bGw7CitjbGFzcyBUR3JhcGhTeW1ib2w7CitjbGFzcyBUR3JhcGhTZWxlY3Rpb247CitjbGFzcyBU
R3JhcGhMb29wOworY2xhc3MgVEdyYXBoTG9naWNhbE9wOworY2xhc3MgVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ7CisKK3R5cGVkZWYgc3Rk
OjpzZXQ8VEdyYXBoTm9kZSo+IFRHcmFwaE5vZGVTZXQ7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRH
cmFwaE5vZGUqPiBUR3JhcGhOb2RlVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhT
eW1ib2wqPiBUR3JhcGhTeW1ib2xWZWN0b3I7Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRHcmFwaEZ1
bmN0aW9uQ2FsbCo+IFRGdW5jdGlvbkNhbGxWZWN0b3I7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZv
ciBhbGwgZGVwZW5kZW5jeSBncmFwaCBub2Rlcy4KKy8vCitjbGFzcyBUR3JhcGhOb2RlIHsKK3B1
YmxpYzoKKyAgICBUR3JhcGhOb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IGludGVybU5vZGUobm9k
ZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhOb2RlKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJvdGVj
dGVkOgorICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworfTsKKworLy8KKy8vIEJhc2UgY2xh
c3MgZm9yIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMgdGhhdCBtYXkgaGF2ZSBjaGlsZHJlbi4KKy8v
CitjbGFzcyBUR3JhcGhQYXJlbnROb2RlIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgor
ICAgIFRHcmFwaFBhcmVudE5vZGUoVEludGVybU5vZGUqIG5vZGUpIDogVEdyYXBoTm9kZShub2Rl
KSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFBhcmVudE5vZGUoKSB7fQorICAgIHZvaWQgYWRkRGVw
ZW5kZW50Tm9kZShUR3JhcGhOb2RlKiBub2RlKSB7IGlmIChub2RlICE9IHRoaXMpIG1EZXBlbmRl
bnROb2Rlcy5pbnNlcnQobm9kZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworcHJpdmF0ZToKKyAgICBUR3Jh
cGhOb2RlU2V0IG1EZXBlbmRlbnROb2RlczsKK307CisKKy8vCisvLyBIYW5kbGUgZnVuY3Rpb24g
Y2FsbCBhcmd1bWVudHMuCisvLworY2xhc3MgVEdyYXBoQXJndW1lbnQgOiBwdWJsaWMgVEdyYXBo
UGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpCisgICAgICAgIDogVEdy
YXBoUGFyZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgICwgbUFyZ3VtZW50TnVt
YmVyKGFyZ3VtZW50TnVtYmVyKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEFyZ3VtZW50KCkge30K
KyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSBjb25z
dCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9CisgICAgaW50IGdldEFy
Z3VtZW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbUFyZ3VtZW50TnVtYmVyOyB9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVy
c2VyKTsKK3ByaXZhdGU6CisgICAgaW50IG1Bcmd1bWVudE51bWJlcjsKK307CisKKy8vCisvLyBI
YW5kbGUgZnVuY3Rpb24gY2FsbHMuCisvLworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsIDogcHVi
bGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCisgICAgICAgIDogVEdyYXBoUGFy
ZW50Tm9kZShpbnRlcm1GdW5jdGlvbkNhbGwpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoRnVuY3Rp
b25DYWxsKCkge30KKyAgICBjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBnZXRJbnRlcm1GdW5jdGlv
bkNhbGwoKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBo
VHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgc3ltYm9scy4KKy8vCitjbGFzcyBUR3Jh
cGhTeW1ib2wgOiBwdWJsaWMgVEdyYXBoUGFyZW50Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBo
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCkgOiBUR3JhcGhQYXJlbnROb2RlKGlu
dGVybVN5bWJvbCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhTeW1ib2woKSB7fQorICAgIGNvbnN0
IFRJbnRlcm1TeW1ib2wqIGdldEludGVybVN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5v
ZGUtPmdldEFzU3ltYm9sTm9kZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5k
bGUgaWYgc3RhdGVtZW50cyBhbmQgdGVybmFyeSBvcGVyYXRvcnMuCisvLworY2xhc3MgVEdyYXBo
U2VsZWN0aW9uIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFNlbGVj
dGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pIDogVEdyYXBoTm9kZShpbnRl
cm1TZWxlY3Rpb24pIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU2VsZWN0aW9uKCkge30KKyAgICBj
b25zdCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRJbnRlcm1TZWxlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9Owor
CisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBsb29wcy4KKy8vCitjbGFz
cyBUR3JhcGhMb29wIDogcHVibGljIFRHcmFwaE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaExv
b3AoVEludGVybUxvb3AqIGludGVybUxvb3ApIDogVEdyYXBoTm9kZShpbnRlcm1Mb29wKSB7fQor
ICAgIHZpcnR1YWwgflRHcmFwaExvb3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1Mb29wKiBnZXRJ
bnRlcm1Mb29wKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNMb29wTm9kZSgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdy
YXBoVHJhdmVyc2VyKTsKK307CisKKy8vCisvLyBIYW5kbGUgbG9naWNhbCBhbmQsIG9yLgorLy8K
K2NsYXNzIFRHcmFwaExvZ2ljYWxPcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKSA6IFRHcmFw
aE5vZGUoaW50ZXJtTG9naWNhbE9wKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaExvZ2ljYWxPcCgp
IHt9CisgICAgY29uc3QgVEludGVybUJpbmFyeSogZ2V0SW50ZXJtTG9naWNhbE9wKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7IH0KKyAgICBjb25zdCBjaGFy
KiBnZXRPcFN0cmluZygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gQSBkZXBl
bmRlbmN5IGdyYXBoIG9mIHN5bWJvbHMsIGZ1bmN0aW9uIGNhbGxzLCBjb25kaXRpb25zIGV0Yy4K
Ky8vCisvLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgZW50cnkgcG9p
bnRzIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorLy8KKy8vIERlcGVuZGVuY3kgZ3JhcGggbm9k
ZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBwcm92aWRlZCAiY3JlYXRl
Li4uIiBtZXRob2RzLgorLy8gVGhpcyBjbGFzcyAoYW5kIG5vYm9keSBlbHNlKSBtYW5hZ2VzIHRo
ZSBtZW1vcnkgb2YgdGhlIGNyZWF0ZWQgbm9kZXMuCisvLyBOb2RlcyBtYXkgbm90IGJlIHJlbW92
ZWQgYWZ0ZXIgYmVpbmcgYWRkZWQsIHNvIGFsbCBjcmVhdGVkIG5vZGVzIHdpbGwgZXhpc3Qgd2hp
bGUgdGhlCisvLyBURGVwZW5kZW5jeUdyYXBoIGluc3RhbmNlIGV4aXN0cy4KKy8vCitjbGFzcyBU
RGVwZW5kZW5jeUdyYXBoIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoKFRJbnRlcm1O
b2RlKiBpbnRlcm1Ob2RlKTsKKyAgICB+VERlcGVuZGVuY3lHcmFwaCgpOworICAgIFRHcmFwaE5v
ZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVz
LmJlZ2luKCk7IH0KKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtQWxsTm9kZXMuZW5kKCk7IH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5TYW1wbGVyU3ltYm9scygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEdyYXBo
U3ltYm9sVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmRTYW1wbGVyU3ltYm9scygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJTeW1ib2xzLmVuZCgpOworICAgIH0KKworICAg
IFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxzLmJlZ2luKCk7CisgICAgfQorCisgICAgVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzLmVuZCgpOworICAgIH0KKwor
ICAgIFRHcmFwaEFyZ3VtZW50KiBjcmVhdGVBcmd1bWVudChUSW50ZXJtQWdncmVnYXRlKiBpbnRl
cm1GdW5jdGlvbkNhbGwsIGludCBhcmd1bWVudE51bWJlcik7CisgICAgVEdyYXBoRnVuY3Rpb25D
YWxsKiBjcmVhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsKTsKKyAgICBUR3JhcGhTeW1ib2wqIGdldE9yQ3JlYXRlU3ltYm9sKFRJbnRlcm1TeW1ib2wq
IGludGVybVN5bWJvbCk7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBjcmVhdGVTZWxlY3Rpb24oVElu
dGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKTsKKyAgICBUR3JhcGhMb29wKiBjcmVhdGVM
b29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKTsKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGNyZWF0
ZUxvZ2ljYWxPcChUSW50ZXJtQmluYXJ5KiBpbnRlcm1Mb2dpY2FsT3ApOworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIFRNYXA8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRNYXA7CisgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8aW50LCBUR3JhcGhTeW1ib2wqPiBUU3ltYm9sSWRQYWlyOworCisgICAg
VEdyYXBoTm9kZVZlY3RvciBtQWxsTm9kZXM7CisgICAgVEdyYXBoU3ltYm9sVmVjdG9yIG1TYW1w
bGVyU3ltYm9sczsKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yIG1Vc2VyRGVmaW5lZEZ1bmN0aW9u
Q2FsbHM7CisgICAgVFN5bWJvbElkTWFwIG1TeW1ib2xJZE1hcDsKK307CisKKy8vCisvLyBGb3Ig
dHJhdmVyc2luZyB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVXNlcnMgc2hvdWxkIGRlcml2ZSBmcm9t
IHRoaXMsCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0
aGVuIHBhc3MgaXQgdG8gYQorLy8gdHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdoZW4gdXNpbmcg
dGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVk
LgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIoKSA6IG1EZXB0aCgwKSB7fQorCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKSB7fTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogc2VsZWN0aW9uKSB7fTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNh
bGwpIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24q
IHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBs
b29wKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9w
KiBsb2dpY2FsT3ApIHt9OworCisgICAgaW50IGdldERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURl
cHRoOyB9CisgICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHsgKyttRGVwdGg7IH0KKyAgICB2b2lk
IGRlY3JlbWVudERlcHRoKCkgeyAtLW1EZXB0aDsgfQorCisgICAgdm9pZCBjbGVhclZpc2l0ZWQo
KSB7IG1WaXNpdGVkLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1hcmtWaXNpdGVkKFRHcmFwaE5vZGUq
IG5vZGUpIHsgbVZpc2l0ZWQuaW5zZXJ0KG5vZGUpOyB9CisgICAgYm9vbCBpc1Zpc2l0ZWQoVEdy
YXBoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbVZpc2l0ZWQuZmluZChub2RlKSAhPSBtVmlz
aXRlZC5lbmQoKTsgfQorcHJpdmF0ZToKKyAgICBpbnQgbURlcHRoOworICAgIFRHcmFwaE5vZGVT
ZXQgbVZpc2l0ZWQ7Cit9OworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoVEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5
R3JhcGgqIGdyYXBoKQoreworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIGJ1aWxkZXIoZ3Jh
cGgpOworICAgIGJ1aWxkZXIuYnVpbGQobm9kZSk7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1BZ2dyZWdhdGUpCit7CisgICAgc3dpdGNoIChpbnRlcm1BZ2dyZWdhdGUtPmdldE9wKCkp
IHsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oaW50
ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiB2aXNp
dEZ1bmN0aW9uQ2FsbChpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDog
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihpbnRlcm1BZ2dyZWdhdGUpOyBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSkK
K3sKKyAgICAvLyBDdXJyZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5j
dGlvbnMuCisgICAgaWYgKGludGVybUFnZ3JlZ2F0ZS0+Z2V0TmFtZSgpICE9ICJtYWluKCIpCisg
ICAgICAgIHJldHVybjsKKworICAgIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVn
YXRlKTsKK30KKworLy8gVGFrZXMgYW4gZXhwcmVzc2lvbiBsaWtlICJmKHgpIiBhbmQgY3JlYXRl
cyBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorLy8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlv
biBjYWxsIi4KK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25DYWxs
KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkKK3sKKyAgICBUR3JhcGhGdW5j
dGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9IG1HcmFwaC0+Y3JlYXRlRnVuY3Rpb25DYWxsKGludGVy
bUZ1bmN0aW9uQ2FsbCk7CisKKyAgICAvLyBSdW4gdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbCBh
cmd1bWVudHMuCisgICAgaW50IGFyZ3VtZW50TnVtYmVyID0gMDsKKyAgICBUSW50ZXJtU2VxdWVu
Y2UmIGludGVybUFyZ3VtZW50cyA9IGludGVybUZ1bmN0aW9uQ2FsbC0+Z2V0U2VxdWVuY2UoKTsK
KyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGludGVybUFy
Z3VtZW50cy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBpbnRlcm1Bcmd1bWVudHMuZW5kKCk7
CisgICAgICAgICArK2l0ZXIsICsrYXJndW1lbnROdW1iZXIpCisgICAgeworICAgICAgICBUTm9k
ZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgVEludGVy
bU5vZGUqIGludGVybUFyZ3VtZW50ID0gKml0ZXI7CisgICAgICAgIGludGVybUFyZ3VtZW50LT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGFyZ3VtZW50Tm9k
ZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaEFyZ3VtZW50
KiBhcmd1bWVudCA9IG1HcmFwaC0+Y3JlYXRlQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBh
cmd1bWVudE51bWJlcik7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xl
Tm9kZShhcmd1bWVudE5vZGVzLCBhcmd1bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudC0+YWRk
RGVwZW5kZW50Tm9kZShmdW5jdGlvbkNhbGwpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBj
dXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUg
cmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAgICAvLyBUaHVzLCBhbiBleHByZXNzaW9u
IGxpa2UgInkgPSBmKHgpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlCisgICAg
Ly8gInggLT4gYXJndW1lbnQgMCAtPiBmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIC8vIFRoaXMg
bGluZSBlc3NlbnRpYWxseSBwYXNzZXMgdGhlIGZ1bmN0aW9uIGNhbGwgbm9kZSBiYWNrIHVwIHRv
IGFuIGVhcmxpZXIgdmlzaXRBc3NpZ25tZW50CisgICAgLy8gY2FsbCwgd2hpY2ggd2lsbCBjcmVh
dGUgdGhlIGNvbm5lY3Rpb24gImZ1bmN0aW9uIGNhbGwgLT4geSIuCisgICAgbU5vZGVTZXRzLmlu
c2VydEludG9Ub3BTZXQoZnVuY3Rpb25DYWxsKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGUpCit7CisgICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IGludGVybUFnZ3Jl
Z2F0ZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBmb3IoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybUNoaWxkID0gKml0ZXI7Cisg
ICAgICAgIGludGVybUNoaWxkLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIGludGVybVN5
bWJvbCkKK3sKKyAgICAvLyBQdXNoIHRoaXMgc3ltYm9sIGludG8gdGhlIHNldCBvZiBkZXBlbmRl
bnQgc3ltYm9scyBmb3IgdGhlIGN1cnJlbnQgYXNzaWdubWVudCBvciBjb25kaXRpb24KKyAgICAv
LyB0aGF0IHdlIGFyZSB0cmF2ZXJzaW5nLgorICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gbUdy
YXBoLT5nZXRPckNyZWF0ZVN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgIG1Ob2RlU2V0cy5pbnNl
cnRJbnRvVG9wU2V0KHN5bWJvbCk7CisKKyAgICAvLyBJZiB0aGlzIHN5bWJvbCBpcyB0aGUgY3Vy
cmVudCBsZWZ0bW9zdCBzeW1ib2wgdW5kZXIgYW4gYXNzaWdubWVudCwgcmVwbGFjZSB0aGUgcHJl
dmlvdXMKKyAgICAvLyBsZWZ0bW9zdCBzeW1ib2wgd2l0aCB0aGlzIHN5bWJvbC4KKyAgICBpZiAo
IW1MZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSAmJiBtTGVmdG1vc3RTeW1ib2xzLnRvcCgpICE9ICZt
UmlnaHRTdWJ0cmVlKSB7CisgICAgICAgIG1MZWZ0bW9zdFN5bWJvbHMucG9wKCk7CisgICAgICAg
IG1MZWZ0bW9zdFN5bWJvbHMucHVzaChzeW1ib2wpOworICAgIH0KK30KKworYm9vbCBURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
IGludGVybUJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBpbnRlcm1CaW5hcnktPmdldE9w
KCk7CisgICAgaWYgKG9wID09IEVPcEluaXRpYWxpemUgfHwgaW50ZXJtQmluYXJ5LT5tb2RpZmll
c1N0YXRlKCkpCisgICAgICAgIHZpc2l0QXNzaWdubWVudChpbnRlcm1CaW5hcnkpOworICAgIGVs
c2UgaWYgKG9wID09IEVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gRU9wTG9naWNhbE9yKQorICAgICAg
ICB2aXNpdExvZ2ljYWxPcChpbnRlcm1CaW5hcnkpOworICAgIGVsc2UKKyAgICAgICAgdmlzaXRC
aW5hcnlDaGlsZHJlbihpbnRlcm1CaW5hcnkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQoVEludGVybUJpbmFy
eSogaW50ZXJtQXNzaWdubWVudCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBp
bnRlcm1Bc3NpZ25tZW50LT5nZXRMZWZ0KCk7CisgICAgaWYgKCFpbnRlcm1MZWZ0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBUR3JhcGhTeW1ib2wqIGxlZnRtb3N0U3ltYm9sID0gTlVMTDsKKwor
ICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMp
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBp
bnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9sID0g
bUxlZnRtb3N0U3ltYm9scy50b3AoKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgdHJhdmVyc2lu
ZyB0aGUgbGVmdCBzdWJ0cmVlIG9mIHRoaXMgYXNzaWdubWVudCwgd2Ugc2hvdWxkIGhhdmUgZm91
bmQgYSByZWFsCisgICAgICAgICAgICAvLyBsZWZ0bW9zdCBzeW1ib2wsIGFuZCB0aGUgbGVmdG1v
c3Qgc3ltYm9sIHNob3VsZCBub3QgYmUgYSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIEFTU0VS
VChsZWZ0bW9zdFN5bWJvbCAhPSAmbUxlZnRTdWJ0cmVlKTsKKyAgICAgICAgICAgIEFTU0VSVChs
ZWZ0bW9zdFN5bWJvbCAhPSAmbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUFzc2lnbm1lbnQtPmdldFJpZ2h0
KCkpIHsKKyAgICAgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJtUmln
aHQtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2Rl
U2V0KiBhc3NpZ25tZW50Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpCisgICAgICAgICAg
ICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShhc3NpZ25tZW50Tm9kZXMsIGxlZnRt
b3N0U3ltYm9sKTsKKyAgICB9CisKKyAgICAvLyBQdXNoIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2Yg
dGhpcyBhc3NpZ25tZW50IGludG8gdGhlIGN1cnJlbnQgc2V0IG9mIGRlcGVuZGVudCBzeW1ib2xz
IHRvCisgICAgLy8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhpcyBhc3NpZ25tZW50LgorICAg
IC8vIEFuIGV4cHJlc3Npb24gbGlrZSAiYSA9IChiID0gYykiIHdpbGwgeWllbGQgYSBkZXBlbmRl
bmN5IGdyYXBoIGxpa2UgImMgLT4gYiAtPiBhIi4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFs
bHkgcGFzc2VzIHRoZSBsZWZ0bW9zdCBzeW1ib2wgb2YgdGhlIG5lc3RlZCBhc3NpZ25tZW50ICgi
YiIgaW4gdGhpcworICAgIC8vIGV4YW1wbGUpIGJhY2sgdXAgdG8gdGhlIGVhcmxpZXIgdmlzaXRB
c3NpZ25tZW50IGNhbGwgZm9yIHRoZSBvdXRlciBhc3NpZ25tZW50LCB3aGljaCB3aWxsCisgICAg
Ly8gY3JlYXRlIHRoZSBjb25uZWN0aW9uICJiIC0+IGEiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJ
bnRvVG9wU2V0KGxlZnRtb3N0U3ltYm9sKTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6dmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKQorewor
ICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybUxlZnQgPSBpbnRlcm1Mb2dpY2FsT3AtPmdldExl
ZnQoKSkgeworICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciBub2RlU2V0TWFp
bnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBsZWZ0Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0
KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wID0gbUdyYXBoLT5j
cmVhdGVMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICAgICAgICAgIGNvbm5lY3RNdWx0
aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGxlZnROb2RlcywgbG9naWNhbE9wKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtTG9naWNh
bE9wLT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRl
cm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkqIGludGVybUJpbmFy
eSkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQmluYXJ5LT5n
ZXRMZWZ0KCkpCisgICAgICAgIGludGVybUxlZnQtPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYg
KFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1CaW5hcnktPmdldFJpZ2h0KCkpIHsK
KyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lciBsZWZ0bW9zdFN5bWJvbE1haW50YWlu
ZXIodGhpcywgbVJpZ2h0U3VidHJlZSk7CisgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7
CisgICAgaWYgKFRJbnRlcm1Ob2RlKiBpbnRlcm1Db25kaXRpb24gPSBpbnRlcm1TZWxlY3Rpb24t
PmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFp
bnRhaW5lcih0aGlzKTsKKworICAgICAgICBpbnRlcm1Db25kaXRpb24tPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICBpZiAoVFBhcmVudE5vZGVTZXQqIGNvbmRpdGlvbk5vZGVzID0gbU5vZGVTZXRz
LmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbiA9
IG1HcmFwaC0+Y3JlYXRlU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgICAgICAgICBj
b25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywgc2VsZWN0aW9u
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtVHJ1ZUJs
b2NrID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtVHJ1
ZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtRmFs
c2VCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICBpbnRl
cm1GYWxzZUJsb2NrLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50
ZXJtTG9vcCogaW50ZXJtTG9vcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1Db25k
aXRpb24gPSBpbnRlcm1Mb29wLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1h
aW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0
aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRp
b25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoTG9v
cCogbG9vcCA9IG1HcmFwaC0+Y3JlYXRlTG9vcChpbnRlcm1Mb29wKTsKKyAgICAgICAgICAgIGNv
bm5lY3RNdWx0aXBsZU5vZGVzVG9TaW5nbGVOb2RlKGNvbmRpdGlvbk5vZGVzLCBsb29wKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQm9keSA9IGludGVy
bUxvb3AtPmdldEJvZHkoKSkKKyAgICAgICAgaW50ZXJtQm9keS0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1FeHByZXNzaW9uID0gaW50ZXJtTG9vcC0+Z2V0
RXhwcmVzc2lvbigpKQorICAgICAgICBpbnRlcm1FeHByZXNzaW9uLT50cmF2ZXJzZSh0aGlzKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUR3JhcGhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoVFBhcmVudE5vZGVT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2Rlcy0+YmVnaW4oKTsgaXRlciAhPSBub2Rlcy0+
ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFBhcmVudE5vZGUqIGN1cnJlbnRO
b2RlID0gKml0ZXI7CisgICAgICAgIGN1cnJlbnROb2RlLT5hZGREZXBlbmRlbnROb2RlKG5vZGUp
OworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBF
TkRFTkNZX0dSQVBIX0JVSUxERVJfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRF
TkNZX0dSQVBIX0JVSUxERVJfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmgiCisKKy8vCisvLyBDcmVhdGVzIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1i
b2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuIGJ5IHRyYXZlcnNpbmcgYQorLy8g
aW50ZXJtZWRpYXRlIHRyZWUuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYnVpbGQo
VEludGVybU5vZGUqIG5vZGUsIFREZXBlbmRlbmN5R3JhcGgqIGdyYXBoKTsKKworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29s
IHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmly
dHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7
CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsK
KworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VEdyYXBoU3ltYm9sKj4gVFN5bWJv
bFN0YWNrOworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VEdyYXBoUGFyZW50Tm9kZSo+IFRQYXJlbnRO
b2RlU2V0OworCisgICAgLy8KKyAgICAvLyBGb3IgY29sbGVjdGluZyB0aGUgZGVwZW5kZW50IG5v
ZGVzIG9mIGFzc2lnbm1lbnRzLCBjb25kaXRpb25zLCBldGMuCisgICAgLy8gd2hpbGUgdHJhdmVy
c2luZyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisgICAgLy8KKyAgICAvLyBUaGlzIGRhdGEgc3Ry
dWN0dXJlIGlzIHN0YWNrIG9mIHNldHMuIEVhY2ggc2V0IGNvbnRhaW5zIGRlcGVuZGVuY3kgZ3Jh
cGggcGFyZW50IG5vZGVzLgorICAgIC8vCisgICAgY2xhc3MgVE5vZGVTZXRTdGFjayB7CisgICAg
cHVibGljOgorICAgICAgICBUTm9kZVNldFN0YWNrKCkge307CisgICAgICAgIH5UTm9kZVNldFN0
YWNrKCkgeyBjbGVhcigpOyB9CisKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYWZ0ZXIgYSBwdXNoU2V0LgorICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIHRvcCBz
ZXQgaXMgZW1wdHkuCisgICAgICAgIFRQYXJlbnROb2RlU2V0KiBnZXRUb3BTZXQoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAg
ICAgICAgVFBhcmVudE5vZGVTZXQqIHRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAg
ICAgcmV0dXJuICF0b3BTZXQtPmVtcHR5KCkgPyB0b3BTZXQgOiBOVUxMOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBwdXNoU2V0KCkgeyBub2RlU2V0cy5wdXNoKG5ldyBUUGFyZW50Tm9kZVNl
dCgpKTsgfQorICAgICAgICB2b2lkIHBvcFNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAgICAgICBkZWxldGUgbm9kZVNldHMudG9w
KCk7CisgICAgICAgICAgICBub2RlU2V0cy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFBvcHMgdGhlIHRvcCBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvIHRoZSBuZXcgdG9wIHNl
dC4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBwdXNoU2V0
LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZXQgYmVsb3cgdGhlIHRvcCBzZXQsIHRoZSB0
b3Agc2V0IGlzIGp1c3QgZGVsZXRlZC4KKyAgICAgICAgdm9pZCBwb3BTZXRJbnRvTmV4dCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZVNldHMuZW1wdHkoKSk7CisgICAgICAg
ICAgICBUUGFyZW50Tm9kZVNldCogb2xkVG9wU2V0ID0gbm9kZVNldHMudG9wKCk7CisgICAgICAg
ICAgICBub2RlU2V0cy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKCFub2RlU2V0cy5lbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG5ld1RvcFNldCA9IG5vZGVTZXRz
LnRvcCgpOworICAgICAgICAgICAgICAgIG5ld1RvcFNldC0+aW5zZXJ0KG9sZFRvcFNldC0+YmVn
aW4oKSwgb2xkVG9wU2V0LT5lbmQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRl
bGV0ZSBvbGRUb3BTZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb2VzIG5vdGhpbmcgaWYg
dGhlcmUgaXMgbm8gdG9wIHNldC4KKyAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIHdoZW4g
dGhlcmUgaXMgbm8gdG9wIHNldCBpZiB3ZSBhcmUgdmlzaXRpbmcKKyAgICAgICAgLy8gc3ltYm9s
cyB0aGF0IGFyZSBub3QgdW5kZXIgYW4gYXNzaWdubWVudCBvciBjb25kaXRpb24uCisgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhvc2Ugc3ltYm9scy4KKyAgICAgICAgdm9pZCBp
bnNlcnRJbnRvVG9wU2V0KFRHcmFwaFBhcmVudE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgbm9kZVNldHMudG9wKCktPmluc2VydChub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIW5vZGVT
ZXRzLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgcG9wU2V0KCk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxUUGFyZW50Tm9kZVNldCo+IFRQ
YXJlbnROb2RlU2V0U3RhY2s7CisKKyAgICAgICAgVFBhcmVudE5vZGVTZXRTdGFjayBub2RlU2V0
czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1
c2hlcyBhIG5ldyBub2RlIHNldCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBp
bnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwgaXQgYW5kIHBvcHMgdGhlIG5vZGUgc2V0LgorICAg
IC8vCisgICAgY2xhc3MgVE5vZGVTZXRNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFROb2RlU2V0TWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAg
ICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0K
KyAgICAgICAgflROb2RlU2V0TWFpbnRhaW5lcigpIHsgc2V0cy5wb3BTZXQoKTsgfQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0czsKKyAgICB9OworCisgICAgLy8K
KyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHB1c2hlcyBhIG5ldyBub2RlIHNldCB3
aGVuIGluc3RhbnRpYXRlZC4KKyAgICAvLyBXaGVuIHRoZSBpbnN0YW5jZSBnb2VzIG91dCBvZiBz
Y29wZSwgaXQgYW5kIHBvcHMgdGhlIHRvcCBub2RlIHNldCBhbmQgYWRkcyBpdHMgY29udGVudHMg
dG8KKyAgICAvLyB0aGUgbmV3IHRvcCBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2Rl
U2V0UHJvcGFnYXRpbmdNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFROb2RlU2V0
UHJvcGFnYXRpbmdNYWludGFpbmVyKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKiBmYWN0b3J5KQor
ICAgICAgICAgICAgOiBzZXRzKGZhY3RvcnktPm1Ob2RlU2V0cykgeyBzZXRzLnB1c2hTZXQoKTsg
fQorICAgICAgICB+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIoKSB7IHNldHMucG9wU2V0
SW50b05leHQoKTsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgVE5vZGVTZXRTdGFjayYgc2V0
czsKKyAgICB9OworCisgICAgLy8KKyAgICAvLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGtl
ZXBzIHRyYWNrIG9mIHRoZSBsZWZ0bW9zdCBzeW1ib2wgd2hpbGUgd2UncmUgZXhwbG9yaW5nIGFu
CisgICAgLy8gYXNzaWdubWVudC4KKyAgICAvLyBJdCB3aWxsIHB1c2ggdGhlIHBsYWNlaG9sZGVy
IHN5bWJvbCBrTGVmdFN1YnRyZWUgd2hlbiBpbnN0YW50aWF0ZWQgdW5kZXIgYSBsZWZ0IHN1YnRy
ZWUsCisgICAgLy8gYW5kIGtSaWdodFN1YnRyZWUgdW5kZXIgYSByaWdodCBzdWJ0cmVlLgorICAg
IC8vIFdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IHdpbGwgcG9wIHRoZSBsZWZ0bW9zdCBz
eW1ib2wgYXQgdGhlIHRvcCBvZiB0aGUgc2NvcGUuCisgICAgLy8gRHVyaW5nIHRyYXZlcnNhbCwg
dGhlIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIHdpbGwgcmVwbGFjZSBrTGVmdFN1YnRyZWUgd2l0
aCBhIHJlYWwgc3ltYm9sLgorICAgIC8vIGtSaWdodFN1YnRyZWUgd2lsbCBuZXZlciBiZSByZXBs
YWNlZCBieSBhIHJlYWwgc3ltYm9sIGJlY2F1c2Ugd2UgYXJlIHRyYWNraW5nIHRoZSBsZWZ0bW9z
dAorICAgIC8vIHN5bWJvbC4KKyAgICAvLworICAgIGNsYXNzIFRMZWZ0bW9zdFN5bWJvbE1haW50
YWluZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcihU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSwgVEdyYXBoU3ltYm9sJiBzdWJ0cmVlKQor
ICAgICAgICAgICAgOiBsZWZ0bW9zdFN5bWJvbHMoZmFjdG9yeS0+bUxlZnRtb3N0U3ltYm9scykK
KyAgICAgICAgeworICAgICAgICAgICAgbmVlZHNQbGFjZWhvbGRlclN5bWJvbCA9IGxlZnRtb3N0
U3ltYm9scy5lbXB0eSgpIHx8IGxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmc3VidHJlZTsKKyAg
ICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxl
ZnRtb3N0U3ltYm9scy5wdXNoKCZzdWJ0cmVlKTsKKyAgICAgICAgfQorCisgICAgICAgIH5UTGVm
dG1vc3RTeW1ib2xNYWludGFpbmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5lZWRz
UGxhY2Vob2xkZXJTeW1ib2wpCisgICAgICAgICAgICAgICAgbGVmdG1vc3RTeW1ib2xzLnBvcCgp
OworICAgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFRTeW1ib2xTdGFjayYgbGVm
dG1vc3RTeW1ib2xzOworICAgICAgICBib29sIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2w7CisgICAg
fTsKKworICAgIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKFREZXBlbmRlbmN5R3JhcGgqIGdyYXBo
KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAg
ICAsIG1MZWZ0U3VidHJlZShOVUxMKQorICAgICAgICAsIG1SaWdodFN1YnRyZWUoTlVMTCkKKyAg
ICAgICAgLCBtR3JhcGgoZ3JhcGgpIHt9CisgICAgdm9pZCBidWlsZChUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZSkgeyBpbnRlcm1Ob2RlLT50cmF2ZXJzZSh0aGlzKTsgfQorCisgICAgdm9pZCBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShUUGFyZW50Tm9kZVNldCogbm9kZXMsIFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0OworCisgICAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoVEludGVybUJp
bmFyeSopOworICAgIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5Kik7CisgICAgdm9pZCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpOworICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlKik7CisKKyAgICBUR3JhcGhT
eW1ib2wgbUxlZnRTdWJ0cmVlOworICAgIFRHcmFwaFN5bWJvbCBtUmlnaHRTdWJ0cmVlOworCisg
ICAgVERlcGVuZGVuY3lHcmFwaCogbUdyYXBoOworICAgIFROb2RlU2V0U3RhY2sgbU5vZGVTZXRz
OworICAgIFRTeW1ib2xTdGFjayBtTGVmdG1vc3RTeW1ib2xzOworfTsKKworI2VuZGlmICAvLyBD
T01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0JVSUxERVJfSApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIK
Kwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbigpCit7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXREZXB0aCgpOyArK2kpCisgICAgICAgIG1TaW5rIDw8
ICIgICI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudChU
R3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7Cisg
ICAgbVNpbmsgPDwgImFyZ3VtZW50ICIgPDwgcGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigp
IDw8ICIgb2YgY2FsbCB0byAiCisgICAgICAgICAgPDwgcGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFw
aE91dHB1dDo6dmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNh
bGwpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCAiZnVuY3Rpb24g
Y2FsbCAiIDw8ICBmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5nZXROYW1l
KCkgPDwgIlxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJv
bChUR3JhcGhTeW1ib2wqIHN5bWJvbCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCktPmdldFN5bWJvbCgpIDw8ICIgKHN5
bWJvbCBpZDogIgorICAgICAgICAgIDw8IHN5bWJvbC0+Z2V0SW50ZXJtU3ltYm9sKCktPmdldElk
KCkgPDwgIilcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTZWxl
Y3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgb3V0cHV0SW5kZW50YXRp
b24oKTsKKyAgICBtU2luayA8PCAic2VsZWN0aW9uXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImxvb3AgY29uZGl0aW9uXG4iOworfQorCit2b2lk
IFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImxv
Z2ljYWwgIiA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkgPDwgIlxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKQoreworICAgIG1TaW5rIDw8ICJcbiI7CisKKyAgICBmb3IgKFRHcmFwaE5v
ZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpbigpOyBpdGVyICE9IGdy
YXBoLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhOb2RlKiBzeW1ib2wgPSAq
aXRlcjsKKyAgICAgICAgbVNpbmsgPDwgIi0tLSBEZXBlbmRlbmN5IGdyYXBoIHNwYW5uaW5nIHRy
ZWUgLS0tXG4iOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAgc3ltYm9sLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgbVNpbmsgPDwgIlxuIjsKKyAgICB9Cit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisjZGVm
aW5lIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKKworI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgOiBwdWJsaWMg
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFw
aE91dHB1dChUSW5mb1NpbmtCYXNlJiBzaW5rKSA6IG1TaW5rKHNpbmspIHt9CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U3ltYm9sKFRHcmFwaFN5bWJvbCogc3ltYm9sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVj
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3Ap
OworCisgICAgdm9pZCBvdXRwdXRBbGxTcGFubmluZ1RyZWVzKFREZXBlbmRlbmN5R3JhcGgmIGdy
YXBoKTsKK3ByaXZhdGU6CisgICAgdm9pZCBvdXRwdXRJbmRlbnRhdGlvbigpOworCisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RFUEdSQVBIX0RF
UEVOREVOQ1lfR1JBUEhfT1VUUFVUX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCisKKy8vIFRoZXNlIG1ldGhvZHMg
ZG8gYSBicmVhZHRoLWZpcnN0IHRyYXZlcnNhbCB0aHJvdWdoIHRoZSBncmFwaCBhbmQgbWFyayB2
aXNpdGVkIG5vZGVzLgorCit2b2lkIFRHcmFwaE5vZGU6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT5tYXJr
VmlzaXRlZCh0aGlzKTsKK30KKwordm9pZCBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBUR3JhcGhOb2Rl
Ojp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisKKyAgICBncmFwaFRyYXZlcnNlci0+aW5jcmVt
ZW50RGVwdGgoKTsKKworICAgIC8vIFZpc2l0IHRoZSBwYXJlbnQgbm9kZSdzIGNoaWxkcmVuLgor
ICAgIGZvciAoVEdyYXBoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1EZXBlbmRlbnRO
b2Rlcy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBtRGVwZW5kZW50Tm9kZXMuZW5kKCk7Cisg
ICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhOb2RlKiBub2RlID0gKml0ZXI7
CisgICAgICAgIGlmICghZ3JhcGhUcmF2ZXJzZXItPmlzVmlzaXRlZChub2RlKSkKKyAgICAgICAg
ICAgIG5vZGUtPnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKKyAgICB9CisKKyAgICBncmFwaFRy
YXZlcnNlci0+ZGVjcmVtZW50RGVwdGgoKTsKK30KKwordm9pZCBUR3JhcGhBcmd1bWVudDo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
Z3JhcGhUcmF2ZXJzZXItPnZpc2l0QXJndW1lbnQodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9k
ZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaEZ1bmN0aW9uQ2Fs
bDo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7
CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0RnVuY3Rpb25DYWxsKHRoaXMpOworICAgIFRHcmFw
aFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhT
eW1ib2w6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdFN5bWJvbCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU2Vs
ZWN0aW9uOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTZWxlY3Rpb24odGhpcyk7CisgICAgVEdy
YXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaExvb3A6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvb3AodGhpcyk7CisgICAgVEdyYXBoTm9kZTo6dHJh
dmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaExvZ2ljYWxPcDo6dHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3Jh
cGhUcmF2ZXJzZXItPnZpc2l0TG9naWNhbE9wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZl
cnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9i
YWxzLmgiCiAKQEAgLTMwNyw3ICszMDgsNyBAQCBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CiAgICAg
aW50IHNpemU7CiB9OwogCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07Citz
dGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAs
IHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07CiBBdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxl
OwogCiBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hh
ciAqcywgaW50IGF0b20pOwpAQCAtNDM0LDE0ICs0MzUsMTQgQEAgc3RhdGljIGludCBGaW5kSGFz
aExvYyhBdG9tVGFibGUgKmF0YWJsZQogICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1w
QXRvbVRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaW50IGlpOwogICAgICAgICAgICAgICAgIGNo
YXIgc3RyWzIwMF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IioqKiBIYXNoIGZhaWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3Jl
YXNlIGhhc2ggdGFibGUgc2l6ZS4gKioqIiwKICAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUyk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0
cik7CiAKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3RyaW5nIFwiJXNc
IiwgaGFzaD0lMDR4LCBkZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOwor
ICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmlu
ZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRl
bHRhKTsKICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAg
ICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykg
ewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkg
JWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAg
c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFz
aCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlp
ICsgMSwgY29sbGlzaW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxl
LmVudHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZyhzdHIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4NSwxNCArNjg2LDE0IEBA
IHZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCiAgICAgY2hhciBzdHJbMjAw
XTsKIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKLSAg
ICAgICAgc3ByaW50ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJp
bmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKKyAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3Ry
KSwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFw
W2lpXV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KLSAgICBzcHJpbnRm
KHN0ciwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKKyAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiSGFzaCB0YWJsZTogc2l6ZT0lZCwgZW50cmll
cz0lZCwgY29sbGlzaW9ucz0iLAogICAgICAgICAgICBhdGFibGUtPmh0YWJsZS5zaXplLCBhdGFi
bGUtPmh0YWJsZS5lbnRyaWVzKTsKICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIGZvciAo
aWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAg
c3ByaW50ZihzdHIsICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKKyAgICAgICAg
c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCIsIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tp
aV0pOwogICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwogICAgIH0KIApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5jCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTEkKICNpbmNsdWRlIDxz
dHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiAKICNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtNjc4LDcgKzY3OSw3IEBAIHN0YXRpYyBpbnQgQ1BQcHJh
Z21hKHl5c3R5cGVwcCAqIHl5bHZhbHAKIAkJY2FzZSAtMToKICAgICAgICAgICAgIC8vIEVPRgog
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3
aXRoIGEgbmV3bGluZSIpOwkJCQotCQkJcmV0dXJuIHRva2VuOworCQkJZ290byBmcmVlTWVtb3J5
QW5kUmV0dXJuVG9rZW47CiAJCWRlZmF1bHQ6CiAJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CiAJ
CQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKQEAgLTY4OCwxMCArNjg5LDkgQEAgc3RhdGljIGludCBD
UFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscAogCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAJfQogCi0JY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHRva2VuLCB5eWx2YWxwcCk7CiAJSGFu
ZGxlUHJhZ21hKChjb25zdCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQl0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAJ
CitmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW46CiAJZm9yIChpID0gMDsgaSA8IHRva2VuQ291bnQ7
ICsraSkgewogCQlmcmVlIChhbGxUb2tlbnNbaV0pOwogCX0KQEAgLTc4NCw3ICs3ODQsNiBAQCBp
bnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCiB7CiAgICAgaW50IHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAg
ICBjb25zdCBjaGFyICptZXNzYWdlOwotICAgIGludCBpc1ZlcnNpb24gPSAwOwogCiAgICAgaWYg
KHRva2VuID09IENQUF9JREVOVElGSUVSKSB7CiAgICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRl
bnQgPT0gZGVmaW5lQXRvbSkgewpAQCAtODYxLDcgKzg2MCw2IEBAIGludCByZWFkQ1BQbGluZSh5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgICB0b2tlbiA9IENQUGVycm9yKHl5bHZh
bHBwKTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVyc2lvbkF0
b20pIHsKICAgICAgICAgICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICBpc1ZlcnNpb24gPSAxOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVu
dCA9PSBleHRlbnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUGV4dGVuc2lvbih5
eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC04ODYsMTUgKzg4NCwxNSBAQCB2b2lkIEZy
ZWVNYWNybyhNYWNyb1N5bWJvbCAqcykgewogfQogCiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkgewotICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHsw
fTsKKyAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MCwgMH07CiAgICAgU3ltYm9sICpzeW1ib2wg
PSBOVUxMOwotICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezB9OwotICAgIHl5c3R5cGVwcCB2YWwg
PSB7MH07CisgICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MCwgTlVMTCwgTlVMTCwgMCwgMH07Cisg
ICAgeXlzdHlwZXBwIHZhbCA9IHswLCAwLjAsIDAsIHswfX07CiAgICAgaW50IGF0b20gPSAwOwog
CiAgICAgbWFjcm8uYm9keSA9IE5ld1Rva2VuU3RyZWFtKG5hbWUsIG1hY3Jvcy0+cG9vbCk7CiAg
ICAgdmFsLnNjX2ludCA9IHZhbHVlOwotICAgIHNwcmludGYodmFsLnN5bWJvbF9uYW1lLCAiJWQi
LCB2YWx1ZSk7CisgICAgc25wcmludGYodmFsLnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVf
TEVOKzEsICIlZCIsIHZhbHVlKTsKICAgICBSZWNvcmRUb2tlbihtYWNyby5ib2R5LCBDUFBfSU5U
Q09OU1RBTlQsICZ2YWwpOwogICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBuYW1l
KTsKICAgICBzeW1ib2wgPSBBZGRTeW1ib2woJmxvY2F0aW9uLCBtYWNyb3MsIGF0b20sIE1BQ1JP
X1MpOwpAQCAtOTkxLDEzICs5ODksMTMgQEAgaW50IE1hY3JvRXhwYW5kKGludCBhdG9tLCB5eXN0
eXBlcHAgKiB5eQogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJaWYgKGF0b20gPT0gX19MSU5F
X19BdG9tKSB7CiAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0g
ICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2lu
dCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9O
QU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKICAgICAgICAgVW5nZXRUb2tlbihD
UFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAg
IGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0g
R2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1l
LCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsK
ICAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKICAgICAgICAg
cmV0dXJuIDE7CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiAxMjIyMzkpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBAIHZvaWQgIENQUFNoSW5mb0xvZ01zZyhj
b25zdCBjaGFyKik7ICAgICAKIHZvaWQgIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAq
bXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZvIGxvZwogdm9pZCAgSGFu
ZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAvLyAjcHJhZ21hIGRpcmVj
dGl2ZSBjb250YWluZXIuCiB2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7ICAgICAgICAgICAgICAg
ICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lkICBDUFBFcnJvclRvSW5mb0xv
ZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2guSW5m
by5sb2cgICAuCi12b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAgICAgICAgICAgICAgIC8v
IFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lkICBDUFBFcnJvclRvSW5m
b0xvZyhjb25zdCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2gu
SW5mby5sb2cuCit2b2lkICBTdG9yZVN0cihjb25zdCBjaGFyKik7ICAgICAgICAgICAgICAgIC8v
IFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCiB2b2lkICBTZXRMaW5lTnVtYmVy
KGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAogdm9pZCAgU2V0
U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51bWJlci4g
ICAgCiBpbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgIC8vIEdldCB0
aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkocmV2
aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBOVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaWZuZGVmIF9fTUVNT1JZX0gK
ICNkZWZpbmUgX19NRU1PUllfSAogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKIHR5cGVkZWYgc3Ry
dWN0IE1lbW9yeVBvb2xfcmVjIE1lbW9yeVBvb2w7CiAKIGV4dGVybiBNZW1vcnlQb29sICptZW1f
Q3JlYXRlUG9vbChzaXplX3QgY2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw1ICs0Nyw0IEBAIGV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKIGlu
dCBJbml0Q1BQU3RydWN0KHZvaWQpOwogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsK
IGludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKTsKLWludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKIGNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9t
VGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4IEBAIHR5
cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBjaGFyICpwOwogfSBTdHJpbmdJbnB1
dFNyYzsKIAorc3RhdGljIGludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKKwogc3Rh
dGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewog
ICAgIHJldHVybiBFT0Y7CkBAIC03Myw3ICs3NSw3IEBAIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5w
dXRTcmMgKmlzLCB5eXN0eXAKIAogc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBj
aCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CiAKLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRz
cmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9Oworc3RhdGljIElucHV0U3Jj
IGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wLCAwLCAwIH07
CiAKIHN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KTsKIApAQCAtMTI2LDYgKzEyOCwxNiBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAgICByZXR1
cm4gKEZyZWVDUFAoKSk7CiB9CiAKK2ludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3Bw
LCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pCit7CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBz
dHJpbmc7CisgICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7CisgICAgY3BwLT5QYVN0ckxlbiAg
ID0gbGVuZ3RoOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgcmV0dXJuIDA7
Cit9CisKIC8qCiAgKiBzdHJfZ2V0Y2goKQogICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20g
bXVsdGlwbGUgc3RyaW5ncy4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOSBAQCB0eXBlZGVmIHN0
cnVjdCBJbnB1dFNyYyB7CiB9IElucHV0U3JjOwogCiBpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0
ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IFNjYW5Gcm9tU3Ry
aW5nKGNvbnN0IGNoYXIgKik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZyb20g
dGhlIHN0cmluZyBtZW50aW9uZWQuCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNw
cCwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKTsKIGludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhp
dCBhIEVPRiBhYnJ1cHRseSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAvLyBz
dGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQgQ1BQ
RXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUg
aW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKIHZvaWQgU2V0TGluZU51bWJlcihpbnQpOwogdm9p
ZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKIHZvaWQgSW5jTGluZU51bWJlcih2b2lkKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9j
LCBTY29wZSAKIFN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3Bl
LCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKIFN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2wo
U2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwogU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZT
Y29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwogCiAKICNl
bmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwko
cmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuYwkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBO
VklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgpAQCAtMjY1LDYg
KzI2Niw4IEBAIGludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGUKICAgICBj
aGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKICAgICBpbnQgbHRva2VuLCBsZW47
CiAgICAgY2hhciBjaDsKKyAgICBpbnQgYmFzZSwgYWNjdW07CisgICAgY2hhciBjaF92YWw7CiAK
ICAgICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgaWYgKGx0b2tlbiA+PSAwKSB7CkBA
IC0zMTUsMTggKzMxOCw0MSBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0
eXBlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAg
ICAgICAgICAgICBsZW4gPSAwOworCSAgICBhY2N1bSA9IDA7CiAgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0
ZShwVG9rKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewog
ICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZSA9IDE2OwogICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShw
VG9rKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiYXNl
ID0gODsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGxl
biA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2hfdmFsID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoY2gpKQorICAgICAgICAg
ICAgICAgICAgICBjaF92YWwgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChp
c3hkaWdpdChjaCkpCisgICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IHRvbG93ZXIoY2gpIC0g
J2EnICsgMTA7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hfdmFsIDwgMCB8fCBjaF92YWwgPj0g
YmFzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBzeW1i
b2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBhY2N1bSA9IGFjY3VtICogYmFz
ZSArIGNoX3ZhbDsKKyAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwogICAgICAgICAg
ICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2ko
eXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBh
Y2N1bTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7CkBAIC00MTQsMTAgKzQ0MCwxMCBA
QCB2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlCiAgICAgICAgIHN3aXRj
aCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKICAgICAgICAgY2FzZSBD
UFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0
b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFs
cHAtPnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfU1RS
Q09OU1RBTlQ6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDUFBfRkxPQVRD
T05TVEFOVDoKICAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZh
bCk7CkBAIC00MjcsOSArNDUzLDkgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRv
a2VuU3RyZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBpZiAodG9rZW4gPj0gMTI3KQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwg
R2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7CisgICAgICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tl
bik7CisgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9r
ZW4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQ1BQRGVidWdMb2dN
c2coc3RyKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJCiAjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKICNkZWZpbmUgX19U
T0tFTlNfSCAxCiAKKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wYXJzZXIuaCIKIAogI2RlZmluZSBFT0ZfU1kgKC0xKQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvQ29udGV4dC5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzc3RyZWFtPgot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKLSNp
bmNsdWRlICJ0b2tlbl90eXBlLmgiCi0KLXN0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQo
Y29uc3Qgc3RkOjpzdHJpbmcqIG5hbWUpCi17Ci0gICAgQVNTRVJUKG5hbWUpOwotCi0gICAgLy8g
TmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCi0gICAgaWYgKG5hbWUtPnN1
YnN0cigwLCAzKSA9PSAiR0xfIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOYW1l
cyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCi0g
ICAgaWYgKG5hbWUtPmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1uYW1lc3BhY2UgcHAKLXsKLQot
Q29udGV4dDo6Q29udGV4dCgpCi0gICAgOiBtTGV4ZXIoTlVMTCksCi0gICAgICBtSW5wdXQoTlVM
TCksCi0gICAgICBtT3V0cHV0KE5VTEwpCi17Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkKLXsK
LSAgICBkZXN0cm95TGV4ZXIoKTsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0KCkKLXsKLSAgICBy
ZXR1cm4gaW5pdExleGVyKCk7Ci0KLSAgICAvLyBUT0RPKGFsb2twKTogRGVmaW5lIGJ1aWx0LWlu
IG1hY3JvcyBoZXJlIHNvIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8KLSAgICAvLyBkZWZpbmUgdGhl
bSBldmVyeXRpbWUgaW4gcHJvY2VzcygpLgotfQotCi1ib29sIENvbnRleHQ6OnByb2Nlc3MoaW50
IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAg
ICAgICAgICAgICBUb2tlblZlY3Rvciogb3V0cHV0KQotewotICAgIEFTU0VSVCgoY291bnQgPj0w
KSAmJiAoc3RyaW5nICE9IE5VTEwpICYmIChvdXRwdXQgIT0gTlVMTCkpOwotCi0gICAgLy8gU2V0
dXAuCi0gICAgbUlucHV0ID0gbmV3IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAg
bU91dHB1dCA9IG91dHB1dDsKLSAgICBkZWZpbmVCdWlsdEluTWFjcm8oIkdMX0VTIiwgMSk7Ci0K
LSAgICAvLyBQYXJzZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZSgpOwotCi0gICAgLy8gQ2xl
YW51cC4KLSAgICByZXNldCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIENvbnRl
eHQ6OmRlZmluZU1hY3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6
OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6
VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cykKLXsKLSAgICBzdGQ6OmF1dG9fcHRyPE1hY3JvPiBt
YWNybyhuZXcgTWFjcm8odHlwZSwgbmFtZSwgcGFyYW1ldGVycywgcmVwbGFjZW1lbnRzKSk7Ci0g
ICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RP
KGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmIChpc01hY3JvRGVmaW5lZChuYW1lKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3Ap
OiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtTWFj
cm9zWypuYW1lXSA9IG1hY3JvLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDb250ZXh0Ojp1bmRlZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAg
IE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3Jvcy5maW5kKCpuYW1lKTsKLSAgICBpZiAo
aXRlciA9PSBtTWFjcm9zLmVuZCgpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJl
cG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtTWFjcm9zLmVy
YXNlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmlzTWFjcm9E
ZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIHJldHVybiBtTWFjcm9zLmZp
bmQoKm5hbWUpICE9IG1NYWNyb3MuZW5kKCk7Ci19Ci0KLS8vIFJlc2V0IHRvIGluaXRpYWxpemVk
IHN0YXRlLgotdm9pZCBDb250ZXh0OjpyZXNldCgpCi17Ci0gICAgc3RkOjpmb3JfZWFjaChtTWFj
cm9zLmJlZ2luKCksIG1NYWNyb3MuZW5kKCksIERlbGV0ZVNlY29uZCgpKTsKLSAgICBtTWFjcm9z
LmNsZWFyKCk7Ci0KLSAgICBkZWxldGUgbUlucHV0OwotICAgIG1JbnB1dCA9IE5VTEw7Ci0KLSAg
ICBtT3V0cHV0ID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWZpbmVCdWlsdEluTWFjcm8o
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSkKLXsKLSAgICBzdGQ6Om9zdHJpbmdz
dHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLSAgICBUb2tlbiogdG9rZW4gPSBu
ZXcgVG9rZW4oMCwgSU5UX0NPTlNUQU5ULCBuZXcgc3RkOjpzdHJpbmcoc3RyZWFtLnN0cigpKSk7
Ci0gICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyA9IG5ldyBwcDo6VG9rZW5WZWN0b3IoMSwg
dG9rZW4pOwotCi0gICAgbU1hY3Jvc1tuYW1lXSA9IG5ldyBNYWNybyhNYWNybzo6a1R5cGVPYmos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgc3RkOjpzdHJpbmcobmFtZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRl
ZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfQ09OVEVYVF9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfQ09OVEVYVF9IXwotCi0jaW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJJbnB1dC5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0j
aW5jbHVkZSAiVG9rZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIENvbnRleHQKLXsK
LSAgcHVibGljOgotICAgIENvbnRleHQoKTsKLSAgICB+Q29udGV4dCgpOwotCi0gICAgYm9vbCBp
bml0KCk7Ci0gICAgYm9vbCBwcm9jZXNzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAgICAgVG9rZW5WZWN0b3Iq
IG91dHB1dCk7Ci0KLSAgICB2b2lkKiBsZXhlcigpIHsgcmV0dXJuIG1MZXhlcjsgfQotICAgIGlu
dCByZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0gICAgVG9rZW5WZWN0b3IqIG91
dHB1dCgpIHsgcmV0dXJuIG1PdXRwdXQ7IH0KLQotICAgIGJvb2wgZGVmaW5lTWFjcm8ocHA6OlRv
a2VuOjpMb2NhdGlvbiBsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIHBwOjpNYWNybzo6
VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAg
ICAgICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgYm9vbCB1bmRl
ZmluZU1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKTsKLSAgICBib29sIGlzTWFjcm9EZWZp
bmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihDb250ZXh0KTsKLSAgICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3Ry
aW5nLCBNYWNybyo+IE1hY3JvU2V0OwotCi0gICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wgaW5p
dExleGVyKCk7Ci0gICAgdm9pZCBkZXN0cm95TGV4ZXIoKTsKLSAgICB2b2lkIGRlZmluZUJ1aWx0
SW5NYWNybyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IHZhbHVlKTsKLSAgICBib29sIHBh
cnNlKCk7Ci0KLSAgICB2b2lkKiBtTGV4ZXI7ICAvLyBMZXhlciBoYW5kbGUuCi0gICAgSW5wdXQq
IG1JbnB1dDsKLSAgICBUb2tlblZlY3RvciogbU91dHB1dDsKLSAgICBNYWNyb1NldCBtTWFjcm9z
OyAgLy8gRGVmaW5lZCBtYWNyb3MuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAg
Ly8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAK
K3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciByZXBvcnRp
bmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KK2NsYXNzIERpYWdu
b3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFNldmVyaXR5CisgICAgeworICAgICAgICBF
UlJPUiwKKyAgICAgICAgV0FSTklORworICAgIH07CisgICAgZW51bSBJRAorICAgIHsKKyAgICAg
ICAgRVJST1JfQkVHSU4sCisgICAgICAgIElOVEVSTkFMX0VSUk9SLAorICAgICAgICBPVVRfT0Zf
TUVNT1JZLAorICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgSU5WQUxJRF9OVU1C
RVIsCisgICAgICAgIElOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgRElWSVNJT05fQllfWkVS
TywKKyAgICAgICAgRU9GX0lOX0NPTU1FTlQsCisgICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisg
ICAgICAgIFVORVhQRUNURURfVE9LRU4sCisgICAgICAgIERJUkVDVElWRV9JTlZBTElEX05BTUUs
CisgICAgICAgIE1BQ1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgIE1BQ1JPX1JFREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BSRURF
RklORURfVU5ERUZJTkVELAorICAgICAgICBNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwK
KyAgICAgICAgTUFDUk9fVE9PX0ZFV19BUkdTLAorICAgICAgICBNQUNST19UT09fTUFOWV9BUkdT
LAorICAgICAgICBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05ESVRJ
T05BTF9FTFNFX1dJVEhPVVRfSUYsCisgICAgICAgIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxT
RSwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICBDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwK
KyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJ
T05fQkVIQVZJT1IsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAgICAg
ICAgSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9WRVJTSU9OX0RJUkVD
VElWRSwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9GSUxF
X05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgRVJST1Jf
RU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5J
TkdfRU5ECisgICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lk
IHJlcG9ydChJRCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJp
bmcmIHRleHQpOworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorCisjaW5j
bHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNlIHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25v
c3RpY3MoKQoreworfQorCit2b2lkIERpYWdub3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFs
b2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9ycyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQs
IGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2
ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChpZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJP
Ul9FTkQpKQorICAgICAgICByZXR1cm4gRVJST1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19C
RUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQpKQorICAgICAgICByZXR1cm4gV0FSTklORzsKKwor
ICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0dXJuIEVSUk9SOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+
CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2Ug
Y2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2ZXMuCisvLyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlz
IGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50cyBhYm91dCBjZXJ0YWluCisvLyBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IKKy8vIGhh
bmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlhdGUgbWFubmVyLgorY2xhc3MgRGlyZWN0aXZlSGFu
ZGxlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+RGlyZWN0aXZlSGFuZGxlcigpOworCisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsK
KworICAgIC8vIEhhbmRsZSBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldCisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRlbnNpb24oY29uc3QgU291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIGJlaGF2aW9yKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihj
b25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB2ZXJzaW9uKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8g
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICAr
IHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkRp
cmVjdGl2ZUhhbmRsZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK0RpcmVjdGl2ZUhhbmRsZXI6
On5EaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxs
b3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZVBhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg5OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJl
Y3RpdmVQYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4K
KyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRl
ICJEaXJlY3RpdmVIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgorI2lu
Y2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUgIlRv
a2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAgRElS
RUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5ERUYs
CisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJVkVf
SUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAgIERJ
UkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BSQUdN
QSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAorICAg
IERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3RpdmVU
eXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4tPnR5
cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX05P
TkU7CisKKyAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfREVGSU5FOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBr
RGlyZWN0aXZlVW5kZWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVU5ERUY7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmZGVmKQor
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGTkRFRjsK
KyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVj
dGl2ZUVsaWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRUxJRjsKKyAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X0VORElGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfUFJBR01BOwor
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQorICAgICAg
ICByZXR1cm4gRElSRUNUSVZFX0VYVEVOU0lPTjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsK
KyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCisgICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfTElORTsKKworICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsKK30KKwor
c3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERpcmVjdGl2ZShEaXJlY3RpdmVUeXBlIGRpcmVjdGl2
ZSkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICB7CisgICAgICBjYXNlIERJUkVDVElW
RV9JRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgY2FzZSBESVJFQ1RJVkVf
SUZOREVGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxTRToKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJlcHJlc2VudHMgRW5kIE9mIERpcmVjdGl2ZS4KK3N0
YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpUb2tlbiogdG9rZW4pCit7CisgICAgcmV0dXJuICh0
b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9rZW4tPnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUKTsK
K30KKworc3RhdGljIHZvaWQgc2tpcFVudGlsRU9EKHBwOjpMZXhlciogbGV4ZXIsIHBwOjpUb2tl
biogdG9rZW4pCit7CisgICAgd2hpbGUoIWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIGxl
eGVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNNYWNyb05hbWVSZXNl
cnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBOYW1lcyBwcmVmaXhlZCB3
aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5zdWJzdHIoMCwgMykgPT0gIkdM
XyIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28g
Y29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLmZpbmQo
Il9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpc01hY3JvUHJlZGVmaW5lZChjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBw
OjpNYWNyb1NldCYgbWFjcm9TZXQpCit7CisgICAgcHA6Ok1hY3JvU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1lKTsKKyAgICByZXR1cm4gaXRlciAhPSBtYWNyb1Nl
dC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkIDogZmFsc2U7Cit9CisKK25hbWVzcGFj
ZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1Ymxp
YzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgIGNv
bnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykgOgorICAgICAgICBtTGV4ZXIobGV4ZXIpLAorICAgICAgICBtTWFjcm9TZXQo
bWFjcm9TZXQpLAorICAgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCisgICAgeworICAg
IH0KKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlZmluZWQoImRlZmluZWQi
KTsKKworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KHRva2VuLT52YWx1ZSAhPSBrRGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBib29sIHBhcmVuID0gZmFsc2U7CisgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAg
ICAgaWYgKHRva2VuLT50eXBlID09ICcoJykKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW4g
PSB0cnVlOworICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9U
T0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgICAgICBz
dGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gIjEiIDog
IjAiOworCisgICAgICAgIGlmIChwYXJlbikKKyAgICAgICAgeworICAgICAgICAgICAgbUxleGVy
LT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgc2tpcFVu
dGlsRU9EKG1MZXhlciwgdG9rZW4pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGhhdmUgYSB2YWxpZCBkZWZpbmVkIG9w
ZXJhdG9yLgorICAgICAgICAvLyBDb252ZXJ0IHRoZSBjdXJyZW50IHRva2VuIGludG8gYSBDT05T
VF9JTlQgdG9rZW4uCisgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKKyAg
ICAgICAgdG9rZW4tPnZhbHVlID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAg
ICBMZXhlciogbUxleGVyOworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlh
Z25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZl
UGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1Ub2tlbml6
ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIoZGlyZWN0aXZlSGFuZGxlcikK
K3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAg
ZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisKKyAgICAgICAgaWYg
KHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAgICB7CisgICAgICAgICAgICBw
YXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4tPnR5
cGUgPT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUNvbmRpdGlv
bmFsU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBD
b25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
VU5URVJNSU5BVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LmxvY2F0aW9uLCBibG9jay50eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChza2lwcGluZygpIHx8ICh0b2tlbi0+dHlwZSA9
PSAnXG4nKSk7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShUb2tl
biogdG9rZW4pCit7CisgICAgYXNzZXJ0KHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKTsK
KworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3Rp
dmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOworCisgICAgLy8gV2hpbGUgaW4gYW4gZXhjbHVkZWQg
Y29uZGl0aW9uYWwgYmxvY2svZ3JvdXAsCisgICAgLy8gd2Ugb25seSBwYXJzZSBjb25kaXRpb25h
bCBkaXJlY3RpdmVzLgorICAgIGlmIChza2lwcGluZygpICYmICFpc0NvbmRpdGlvbmFsRGlyZWN0
aXZlKGRpcmVjdGl2ZSkpCisgICAgeworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoKGRpcmVjdGl2ZSkK
KyAgICB7CisgICAgICBjYXNlIERJUkVDVElWRV9OT05FOgorICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNUSVZFX0lOVkFMSURfTkFNRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRElSRUNUSVZFX0RFRklORToKKyAgICAgICAgcGFyc2VEZWZpbmUodG9rZW4pOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX1VOREVGOgorICAgICAgICBwYXJzZVVu
ZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRjoKKyAg
ICAgICAgcGFyc2VJZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJ
VkVfSUZERUY6CisgICAgICAgIHBhcnNlSWZkZWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgcGFyc2VJZm5kZWYodG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6CisgICAgICAgIHBhcnNl
RWxzZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoK
KyAgICAgICAgcGFyc2VFbGlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FTkRJRjoKKyAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBESVJFQ1RJVkVfRVJST1I6CisgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX1BSQUdNQToKKyAgICAgICAg
cGFyc2VQcmFnbWEodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VYVEVOU0lPTjoKKyAgICAgICAgcGFyc2VFeHRlbnNpb24odG9rZW4pOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRElSRUNUSVZFX1ZFUlNJT046CisgICAgICAgIHBhcnNlVmVyc2lvbih0
b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfTElORToKKyAgICAg
ICAgcGFyc2VMaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
TEFTVCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpF
T0ZfSU5fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
KyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3JvUHJlZGVmaW5lZCh0b2tl
bi0+dmFsdWUsICptTWFjcm9TZXQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnZhbHVl
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNS
T19OQU1FX1JFU0VSVkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNy
byBtYWNybzsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5h
bWUgPSB0b2tlbi0+dmFsdWU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT52YWx1ZSk7CisKKyAgICAgICAg
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBHZXQgJywnLgorICAgICAgICB9IHdoaWxl
ICh0b2tlbi0+dHlwZSA9PSAnLCcpOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOyAgLy8gR2V0ICcpJy4KKyAgICB9CisKKyAgICB3aGlsZSAoKHRva2VuLT50
eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAg
ICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2Fy
eSBpbiByZXBsYWNlbWVudAorICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxv
d3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCisgICAgICAgIC8vIGNvbXBhcmUgbWFj
cm9zLgorICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgICAg
ICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7CisgICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICghbWFjcm8ucmVwbGFjZW1lbnRzLmVtcHR5
KCkpCisgICAgeworICAgICAgICAvLyBXaGl0ZXNwYWNlIHByZWNlZGluZyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mCisgICAgICAgIC8vIHRoZSByZXBsYWNl
bWVudCBsaXN0IGZvciBlaXRoZXIgZm9ybSBvZiBtYWNyby4KKyAgICAgICAgbWFjcm8ucmVwbGFj
ZW1lbnRzLmZyb250KCkuc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKKyAgICB9CisKKyAgICAv
LyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0aW9uLgorICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKG1hY3JvLm5hbWUpOworICAgIGlmIChpdGVyICE9
IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3JvLmVxdWFscyhpdGVyLT5zZWNvbmQpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5F
RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5uYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtTWFjcm9TZXQtPmluc2VydChzdGQ6Om1ha2VfcGFpcihtYWNyby5uYW1lLCBtYWNy
bykpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1VOREVGKTsK
KworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52
YWx1ZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICB7CisgICAgICAg
IGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURfVU5ERUZJTkVE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRv
a2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJ
VkVfSUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUlmZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJ
Zih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmbmRlZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
TkRFRik7CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVj
dGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMU0UpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0
YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
b25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBp
ZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1
c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIs
IHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNl
R3JvdXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBibG9jay5m
b3VuZEVsc2VHcm91cCA9IHRydWU7CisgICAgYmxvY2suc2tpcEdyb3VwID0gYmxvY2suZm91bmRW
YWxpZEdyb3VwOworICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IHRydWU7CisKKyAgICAvLyBX
YXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMgYWZ0ZXIgI2Vsc2UuCisgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAg
fQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxJRik7CisKKyAg
ICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFs
U3RhY2suYmFjaygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAv
LyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAg
ICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRWYWxpZEdyb3VwKQorICAgIHsKKyAgICAgICAgLy8g
RG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9uLgorICAgICAgICAvLyBBbHNvIGJlIGNhcmVmdWwg
bm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBibG9jay5za2lwR3JvdXAgPSB0cnVl
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaW50IGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tl
bik7CisgICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVzc2lvbiA9PSAwOworICAgIGJsb2NrLmZv
dW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7CisKKyAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2su
ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtQ29u
ZGl0aW9uYWxTdGFjay5wb3BfYmFjaygpOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9r
ZW5zIGFmdGVyICNlbmRpZi4KKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICgh
aXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVu
dGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVycm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZl
KHRva2VuKSA9PSBESVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgc3RyZWFtIDw8ICp0b2tlbjsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB9CisgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUVycm9yKHRva2VuLT5sb2NhdGlvbiwg
c3RyZWFtLnN0cigpKTsKK30KKworLy8gUGFyc2VzIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5h
bWVbKHZhbHVlKV0uCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9QUkFH
TUEpOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgUFJBR01BX05BTUUsCisgICAg
ICAgIExFRlRfUEFSRU4sCisgICAgICAgIFBSQUdNQV9WQUxVRSwKKyAgICAgICAgUklHSFRfUEFS
RU4KKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFt
ZSwgdmFsdWU7CisgICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaChzdGF0ZSsrKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKKyAgICAgICAgICAgIG5hbWUg
PSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlw
ZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIExFRlRfUEFSRU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlw
ZSA9PSAnKCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFM
VUU6CisgICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIHZhbGlk
ID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46CisgICAgICAgICAgICB2YWxp
ZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAg
IH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFHTUFfTkFNRSkgfHwgICAg
IC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gTEVGVF9Q
QVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgIChz
dGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCisgICAgaWYgKCF2YWxp
ZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJF
Q09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAg
Ly8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsKKyAgICAgICAgbURpcmVj
dGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24sIG5hbWUsIHZhbHVlKTsK
KyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VY
VEVOU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBFWFRfTkFNRSwKKyAg
ICAgICAgQ09MT04sCisgICAgICAgIEVYVF9CRUhBVklPUgorICAgIH07CisKKyAgICBib29sIHZh
bGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCBiZWhhdmlvcjsKKyAgICBpbnQgc3Rh
dGUgPSBFWFRfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUg
KCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBFWFRfTkFNRToKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZhbGlkKSBuYW1lID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9r
ZW4tPnR5cGUgIT0gJzonKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRVhUX0JFSEFWSU9SOgorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBiZWhh
dmlvciA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIH0KKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEVYVF9CRUhBVklPUiAr
IDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgIH0KKyAgICBpZiAodmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVF
eHRlbnNpb24odG9rZW4tPmxvY2F0aW9uLCBuYW1lLCBiZWhhdmlvcik7Cit9CisKK3ZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9WRVJTSU9OKTsKKworICAgIGVudW0gU3Rh
dGUKKyAgICB7CisgICAgICAgIFZFUlNJT05fTlVNQkVSCisgICAgfTsKKworICAgIGJvb2wgdmFs
aWQgPSB0cnVlOworICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICBpbnQgc3RhdGUgPSBWRVJTSU9O
X05VTUJFUjsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tl
bi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBWRVJT
SU9OX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFs
dWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24gPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAo
dmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBp
ZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX0RJUkVD
VElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAodmFsaWQp
CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5sb2NhdGlv
biwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4q
IHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9M
SU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVSLAorICAg
ICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBp
bnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVSOworCisg
ICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURp
YWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0
b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBM
SU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodmFsaWQpIGxpbmUgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklMRV9OVU1CRVI6CisgICAgICAgICAgICBp
ZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBmaWxlID0gYXRv
aSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbWFjcm9FeHBhbmRl
ci5sZXgodG9rZW4pOworICAgIH0KKworICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRklMRV9O
VU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9ESVJFQ1RJVkUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgIHsK
KyAgICAgICAgbVRva2VuaXplci0+c2V0TGluZU51bWJlcihsaW5lKTsKKyAgICAgICAgaWYgKHN0
YXRlID09IEZJTEVfTlVNQkVSICsgMSkgbVRva2VuaXplci0+c2V0RmlsZU51bWJlcihmaWxlKTsK
KyAgICB9Cit9CisKK2Jvb2wgRGlyZWN0aXZlUGFyc2VyOjpza2lwcGluZygpIGNvbnN0Cit7Cisg
ICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpIHJldHVybiBmYWxzZTsKKworICAgIGNv
bnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwor
ICAgIHJldHVybiBibG9jay5za2lwQmxvY2sgfHwgYmxvY2suc2tpcEdyb3VwOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBDb25kaXRpb25hbEJsb2NrIGJsb2NrOworICAgIGJsb2NrLnR5cGUgPSB0b2tlbi0+dmFsdWU7
CisgICAgYmxvY2subG9jYXRpb24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBp
bmcoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRl
IGFub3RoZXIgY29uZGl0aW9uYWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4g
QXMgYSBjb25zZXF1ZW5jZSB0aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8v
IEJlIGNhcmVmdWwgbm90IHRvIHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQg
bWlnaHQKKyAgICAgICAgLy8gZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVP
RChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0g
Z2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAg
ICAgIHN3aXRjaCAoZGlyZWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJ
VkVfSUY6CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Cisg
ICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAg
ICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6
IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJs
b2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxp
ZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5w
dXNoX2JhY2soYmxvY2spOworfQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Np
b25JZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09
IERJUkVDVElWRV9JRikgfHwKKyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElS
RUNUSVZFX0VMSUYpKTsKKworICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5p
emVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4
cGFuZGVyKCZkZWZpbmVkUGFyc2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhw
cmVzc2lvblBhcnNlciBleHByZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3Rp
Y3MpOworCisgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRv
a2VuKTsKKyAgICBleHByZXNzaW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisK
KyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisg
ICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KKworICAgIHJldHVybiBl
eHByZXNzaW9uOworfQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRl
ZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9JRkRFRikgfHwKKyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElS
RUNUSVZFX0lGTkRFRikpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+Zmlu
ZCh0b2tlbi0+dmFsdWUpOworICAgIGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQt
PmVuZCgpID8gMSA6IDA7CisKKyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIg
I2lmZGVmIGV4cHJlc3Npb24uCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAo
IWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorICAgIHJldHVybiBleHByZXNzaW9u
OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBh
cnNlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCisj
aW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxz
LmgiCisjaW5jbHVkZSAiU291cmNlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2Ns
YXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK2NsYXNzIFRva2VuaXpl
cjsKKworY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoK
KyAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
KworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQ
YXJzZXIpOworCisgICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
SWZkZWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRWxpZihU
b2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOworICAgIHZv
aWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlTGluZShUb2tlbiog
dG9rZW4pOworCisgICAgYm9vbCBza2lwcGluZygpIGNvbnN0OworICAgIHZvaWQgcGFyc2VDb25k
aXRpb25hbElmKFRva2VuKiB0b2tlbik7CisgICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2Vu
KiB0b2tlbik7CisgICAgaW50IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7CisK
KyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxCbG9jaworICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcg
dHlwZTsKKyAgICAgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIGJvb2wgc2tp
cEJsb2NrOworICAgICAgICBib29sIHNraXBHcm91cDsKKyAgICAgICAgYm9vbCBmb3VuZFZhbGlk
R3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRFbHNlR3JvdXA7CisKKyAgICAgICAgQ29uZGl0aW9u
YWxCbG9jaygpIDoKKyAgICAgICAgICAgIHNraXBCbG9jayhmYWxzZSksCisgICAgICAgICAgICBz
a2lwR3JvdXAoZmFsc2UpLAorICAgICAgICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKKyAg
ICAgICAgICAgIGZvdW5kRWxzZUdyb3VwKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICB9OworICAgIHN0ZDo6dmVjdG9yPENvbmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNr
OworICAgIFRva2VuaXplciogbVRva2VuaXplcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0Owor
ICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURp
cmVjdGl2ZUhhbmRsZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlUGFyc2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRy
dWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2Vy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE5MjggQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQu
Mi4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlr
ZSBwYXJzZXJzIGluIEMKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAs
IDIwMDAtMjAwNiwgMjAwOS0yMDEwIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4K
KyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90
LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVj
aWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5z
CisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmli
dXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBz
a2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tl
bGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAg
dGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1v
dmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxl
dG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5z
ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMg
c3BlY2lhbCBleGNlcHRpb24uCisgICAKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFk
ZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9m
IEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJp
Y2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVk
ICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBz
aG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNl
ciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFy
aWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jv
cy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1
ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFy
ZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKwor
LyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJp
c29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNC4yIgorCisvKiBT
a2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8q
IFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFB1c2ggcGFyc2Vycy4g
ICovCisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZ
UFVMTCAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAw
CisKKy8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCisj
ZGVmaW5lIHl5cGFyc2UgICAgICAgICBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgICAgICAgICBw
cGxleAorI2RlZmluZSB5eWVycm9yICAgICAgICAgcHBlcnJvcgorI2RlZmluZSB5eWx2YWwgICAg
ICAgICAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgICAgICAgICBwcGNoYXIKKyNkZWZpbmUgeXlk
ZWJ1ZyAgICAgICAgIHBwZGVidWcKKyNkZWZpbmUgeXluZXJycyAgICAgICAgIHBwbmVycnMKKwor
CisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJp
Z2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01T
Q19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNp
bmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1
ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNz
LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5l
ZChfTVNDX1ZFUikKK3R5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOworI2RlZmluZSBzdHJ0b2xsIF9z
dHJ0b2k2NAorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50bWF4X3QgWVlT
VFlQRTsKKyNlbmRpZiAgLy8gX01TQ19WRVIKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEK
KyNkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29u
dGV4dAoreworICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVy
KiBsZXhlcjsKKyAgICBwcDo6VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30g
IC8vIG5hbWVzcGFjZQorCisKK3N0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRl
eHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBjaGFyKiByZWFzb24pOworCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYg
WVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9z
ZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZ
RVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJs
ZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAor
I2VuZGlmCisKKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5l
IFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUs
IHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4g
ICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgQ09OU1RfSU5UID0gMjU4LAorICAgICBP
UF9PUiA9IDI1OSwKKyAgICAgT1BfQU5EID0gMjYwLAorICAgICBPUF9ORSA9IDI2MSwKKyAgICAg
T1BfRVEgPSAyNjIsCisgICAgIE9QX0dFID0gMjYzLAorICAgICBPUF9MRSA9IDI2NCwKKyAgICAg
T1BfUklHSFQgPSAyNjUsCisgICAgIE9QX0xFRlQgPSAyNjYsCisgICAgIFVOQVJZID0gMjY3Cisg
ICB9OworI2VuZGlmCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZ
U1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBF
X0lTX1RSSVZJQUwgMQorIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3
aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjZW5k
aWYKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
CisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlU
WVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBF
X0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9p
bnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNp
ZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsK
KyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlm
CisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQx
NjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lm
bmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1Qg
X19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qg
c2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMg
IGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5l
IFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBkZWZp
bmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBp
bmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMg
ICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKKyMg
IGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lk
CisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdz
IGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNf
XworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBkZWZpbmUgWVlVU0Uo
ZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBz
dXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KKyNpZm5kZWYg
bGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IHl5aSkKKyNlbHNlCitz
dGF0aWMgaW50CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKKyNlbmRpZgoreworICByZXR1cm4g
eXlpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZF
UkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0
aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQor
IyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxU
SU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlT
VEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNs
dWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBk
ZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
IGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElC
X0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgICAgaW5jbHVk
ZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlm
bmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAgIGVuZGlmCisj
ICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFD
S19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8K
KyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZ
WUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAvKiBUaGUgT1Mg
bWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUg
c3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5
dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4g
ZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAgICAgICB0byBh
bGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4g
ICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUg
Y2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Mg
WVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5kZWYgWVlTVEFD
S19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVf
TUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5l
ZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQg
bWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisj
ICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGVuZGlm
CisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxv
YworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9U
KTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRp
ZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVm
aW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyog
ISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRl
ZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8
fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisK
Ky8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIu
ICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlT
VFlQRSB5eXZzX2FsbG9jOworfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJl
dHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RB
Q0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6
ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdp
dGgKKyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAg
ICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAg
ICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBG
Uk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFw
LiAgKi8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19H
TlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWls
dGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxz
ZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwK
Kwl7CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwg
KENvdW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJ
CQkJXAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVs
b2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisg
ICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5k
IG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJ
CQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlc
CisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3Rh
Y2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5
eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAg
IHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVy
IG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0CisvKiBZ
WUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTc1
CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlO
VE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2Rl
ZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVm
aW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisj
ZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZU
T0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlY
KQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNs
YXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24g
c3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1LCAgICAy
NiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAy
NCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0g
SW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZ
WVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAg
ICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAg
MjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwg
ICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4
MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRl
ZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMs
ICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAgNywg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEz
LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAg
IDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAtMSwgICAgMjks
ICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwK
KyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAy
OSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAg
ICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0
LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAg
IC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0t
IHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAgODcsICAg
IDg3LCAgICA5NCwgICAgOTUsICAgIDk4LCAgIDEwMSwgICAxMDQsICAgMTA3LCAgIDExMCwKKyAg
ICAgMTEzLCAgIDExNiwgICAxMTksICAgMTIyLCAgIDEyNSwgICAxMjgsICAgMTMxLCAgIDEzNCwg
ICAxMzcsICAgMTQwLAorICAgICAxNTMsICAgMTY2LCAgIDE2OSwgICAxNzIsICAgMTc1LCAgIDE3
OCwgICAxODEKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8
IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2Yg
dGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0
YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFy
ICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwg
IkNPTlNUX0lOVCIsICJPUF9PUiIsICJPUF9BTkQiLCAiJ3wnIiwKKyAgIideJyIsICInJiciLCAi
T1BfTkUiLCAiT1BfRVEiLCAiJzwnIiwgIic+JyIsICJPUF9HRSIsICJPUF9MRSIsCisgICJPUF9S
SUdIVCIsICJPUF9MRUZUIiwgIicrJyIsICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVU5B
UlkiLCAiJyEnIiwKKyAgIid+JyIsICInKCciLCAiJyknIiwgIiRhY2NlcHQiLCAiaW5wdXQiLCAi
ZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05V
TVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisg
ICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tu
dW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAg
IDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYz
LCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAorICAgICAgNDcsICAg
IDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307CisjIGVuZGlmCisKKy8q
IFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2
ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJv
bHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMK
K307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ug
d2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkg
c29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBl
cnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAg
ICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAx
NiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsKKworLyogWVlERUZH
T1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1td
ID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1d
IC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUt
TlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEsICAgLTExLCAgIC0x
MSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCisgICAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4NSwgICAxMDEs
ICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEwLCAgIC0xMCwgICAt
MTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCisgICAgIC0xMSwg
ICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAgLTIKK307CisKKy8q
IFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1O
VU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVk
dWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywg
ZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3Iu
ICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAxNCwg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisgICAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAg
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAz
MiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KK3sKKyAg
ICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMy
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIz
LAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAg
ICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwg
ICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
CisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCit9OworCisvKiBZ
WVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2lu
ZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisg
ICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAy
OSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZp
bmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisj
ZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2Rl
ZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVy
cm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlz
IHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0
aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24g
MiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZ
RkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkg
ZGVwcmVjYXRlZAorICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4g
dG8gcGhhc2UgaXQgb3V0IGlzCisgICBkaXNjdXNzZWQuICAqLworCisjZGVmaW5lIFlZRkFJTAkJ
Z290byB5eWVycmxhYgorI2lmIGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBz
dXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9z
LiAgTm9ybWFsbHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAg
c29tZSB1c2VycyBkbywgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byBy
ZW1vdmUKKyAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9t
IEJpc29uIDIuNS4gICovCisjZW5kaWYKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXll
cnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJ
CQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9
IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJ
CQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJ
CQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisg
ICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi
KSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJ
RCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKwor
CisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv
IFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j
YXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg
ZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorI2lm
bmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhz
LCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJCQkJCQlc
CisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGlu
ZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0
X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4p
Lmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhz
LCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7
CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGlu
ZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3Vy
cmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlS
SFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUg
KFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhl
IGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQg
b3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNl
ciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZu
ZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYm
IFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExv
YykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChM
b2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3Rf
bGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05f
UFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxF
WCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lm
ZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFS
QU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCisjZW5k
aWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcK
KworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5k
aWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDAp
KQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlv
bikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAg
ICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJ
CQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlw
ZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJ
CQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlP
VVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NV
U0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMg
dm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UK
K3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7Cisg
ICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7
CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47CisgIFlZVVNFIChjb250
ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZ
UFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisg
IFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAg
ICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENv
bnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQor
ICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsK
KyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5
eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9t
IGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3Ap
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisg
ICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOworI2Vu
ZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7CisgIGZvciAoOyB5eWJv
dHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXli
b3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9Cisg
IFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQo
Qm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwK
KyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJ
RCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQK
K3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUsIENvbnRleHQgKmNv
bnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5cnVs
ZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXlydWxlOworICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsK
KyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07
CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAl
bHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVp
bmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAg
ICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
KwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAgCQkgICAg
ICAgLCBjb250ZXh0KTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9
CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAo
eXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQp
OyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0
cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBtdWx0aXBsZSBwYXJz
ZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyogIVlZREVCVUcgKi8K
KyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxl
LCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20s
IFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlmIC8qICFZWURFQlVH
ICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBz
dGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAw
CisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4g
Z3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNp
b24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJn
ZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19BTExPQ19NQVhJTVVN
IDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRl
LXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVmIFlZTUFYREVQVEgK
KyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNpZiBZWUVSUk9SX1ZF
UkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRl
ZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorIyAgZWxzZQorLyog
UmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKGNvbnN0IGNoYXIg
Knl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNv
bnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVuOworICBmb3IgKHl5
bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVlOworICByZXR1cm4g
eXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0cGNweQorIyAgaWYg
ZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NP
VVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8qIENvcHkgWVlTUkMg
dG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcg
aW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAq
eXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisg
ICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2VuZGlmCit7CisgIGNo
YXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUg
KCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5
ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRuYW1lcnIKKy8qIENv
cHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVu
bmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFi
bGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5n
IGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlucyBhbiBhcG9zdHJv
cGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNr
c2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51
bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSBy
ZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVy
ciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAoKnl5c3RyID09ICci
JykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hhciBjb25zdCAqeXlw
ID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXApCisJICB7CisJICBj
YXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwor
CisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkgICAgICBnb3RvIGRv
X25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJICBkZWZhdWx0
OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CisJICAgIHl5bisr
OworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5
eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAgICBkb19ub3Rfc3Ry
aXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJldHVybiB5eXN0cmxl
biAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwor
fQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91
dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUu
ICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNsdWRpbmcgdGhlIHRl
cm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAorICAgY29w
eSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJl
CisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkg
InN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1V
TSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0
YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0
ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICBpZiAo
ISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAgcmV0dXJuIDA7Cisg
IGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Cisg
ICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwor
ICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7
CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0geyBZWUVSUk9SX1ZF
UkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJP
Ul9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisjIGlmIDAKKyAgICAg
IC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhh
dCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZWV8oInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIp
OworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNvbnN0ICp5eWY7Cisg
ICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIs
IGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVz
IjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAorCQkgICAgKyBzaXpl
b2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAgICBjaGFyIGNvbnN0
ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBp
ZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZQ0hFQ0suICAqLwor
ICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisgICAgICAvKiBTdGF5
IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgIGlu
dCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5eXhlbmQgPSB5eWNo
ZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgIGludCB5
eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07CisgICAgICB5
eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKworICAgICAgZm9yICh5
eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXljaGVja1t5eXggKyB5
eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlmICh5eWNvdW50ID09
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5eWNvdW50ID0gMTsK
KwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFd
ID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0
bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1l
W3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworCSAg
ICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVm
aXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZv
cm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7CisgICAgICB5
eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAgeXlzaXplID0geXlz
aXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4gWVlTSVpFX01BWElN
VU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0
aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAgICBEb24ndCBoYXZl
IHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorCSAgICAgcHJvZHVj
ZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKwkgIGNoYXIg
Knl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAoKCp5eXAgPSAqeXlm
KSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAn
cycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlh
cmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHl5
cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4geXlzaXplOwor
ICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVt
b3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAo
Y29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0
ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBl
LCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0
eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5k
aWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgh
eXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNn
LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNoICh5eXR5cGUpCisg
ICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworLyogUHJldmVudCB3
YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBZWVBBUlNFX1BB
UkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlw
YXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5k
aWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpOworI2Vs
c2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICov
CisKKworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXBhcnNlIG9yIHl5
cHVzaF9wYXJzZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZ
UEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitp
bnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZ
WVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8q
ICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK2ludAoreXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFy
c2UgKGNvbnRleHQpCisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCit7Cisv
KiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50
aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisK
KyAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworICAgIGludCB5eW5l
cnJzOworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlm
dCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVz
OworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiBy
ZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFs
dWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJz
LCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVy
ZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5
eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9p
bnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAg
IFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlT
VFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICBpbnQgeXluOwor
ICBpbnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJh
bnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CisgIC8qIFRoZSB2YXJp
YWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhl
CisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisKKyNpZiBZWUVS
Uk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxv
Y2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5
eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5k
aWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4p
KQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2Vk
IHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVk
LiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3Nh
OworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgWVlE
UFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsK
KyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsg
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNr
IHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24g
c3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0
YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXpl
ZC4gICovCisgIHl5c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRz
dGF0ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2gg
aXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFs
bCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tz
CisgICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2
ZW5zIHRoZSBzdGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3Nw
ID0geXlzdGF0ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAg
ICB7CisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFj
a3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlz
cyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hh
bmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNv
IHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnku
ICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlz
czsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBz
aXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhp
cyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJh
IGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMg
YSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAg
ICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNz
MTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisj
IGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworIyBl
bHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlm
IChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAg
ICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkK
Kwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50MTYgKnl5
c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAq
KSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5
cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2Fs
bG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKKyMgIHVu
ZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZS
RUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICov
CisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMg
KyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGlu
Y3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkp
OworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JU
OworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwg
eXlzdGF0ZSkpOworCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisK
KyAgZ290byB5eWJhY2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0t
LS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBn
aXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQgdG9rZW4gaWYg
d2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0
IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQg
dG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlQQUNU
X05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxv
b2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNI
QVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9s
LiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7Cisg
ICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0geXl0
b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBp
bnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlUUkFO
U0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwg
eXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9wZXIg
YWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAgICBk
ZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tlbjsK
KyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2Vu
KQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4g
PD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikK
Kwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7
CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0
aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVz
KQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4g
ICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5
bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9
IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAg
Z290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVs
dCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAg
eXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJy
bGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1
bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZ
WUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlv
bjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5l
IHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50
ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWdu
aW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0
IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1h
eSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwor
CisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAg
ICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGlj
X2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEpXSkpOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNw
WygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9
PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+
PiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisK
KyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygz
KSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgz
KV0pID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygz
KSAtICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNz
OjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAl
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVh
bSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9C
WV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgfQorICAgIGJyZWFrOworCisg
IGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMild
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDI1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDIpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisKKworICAgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5
eW5dLCAmeXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9
IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisKKyAgKisreXl2c3AgPSB5eXZh
bDsKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRl
cm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3
ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAq
LworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5U
T0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNU
ICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5
c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNd
OworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYg
bm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4g
ICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEg
WVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJv
ciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3Ig
KDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNn
X2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFs
bG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxs
b2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19B
TExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFD
S19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlh
bGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJ
ICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0g
c2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5
c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5
eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOwor
CSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJy
b3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFi
OworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMg
PT0gMykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2Ug
bG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAg
ICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBl
bmQgb2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsK
Kwl9CisgICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwK
KwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZ
OworCX0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9r
ZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVy
cmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlF
UlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdo
ZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJl
bCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4g
ICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAv
KiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJp
Z2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAg
eXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0g
Knl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBj
b21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0
ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9
IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAg
eXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXlj
aGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5d
OworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyog
UG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3Ig
dG9rZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAg
ICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2
c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5
c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgKisr
eXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOwor
CisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNv
bWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQg
Y29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVm
aW5lZCh5eW92ZXJmbG93KSB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVt
b3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChj
b250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyog
RmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZ
WUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQi
LAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRo
ZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZ
WUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7Cisg
ICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0s
IHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYg
eXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3Mp
OworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikK
KyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBp
cyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQg
eXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUg
PSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRj
aCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoK
KyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7
CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl
IHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9F
UTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlw
ZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9IE9Q
X0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IE9QX1JJ
R0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gT1BfTEVG
VDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7CisgICAgICBjYXNl
ICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsgYnJl
YWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBjYXNlICc8Jzog
dHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7Cisg
ICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICclJzogdHlwZSA9
ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7CisgICAgICBj
YXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlwZSA9ICchJzsg
YnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAgICBjYXNlICco
JzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJlYWs7
CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFuY2UgdG8gdGhl
IG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlmICh0eXBlICE9
IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5cGU7Cit9CisK
K3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCit7Cisg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURf
RVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7
Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25QYXJz
ZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIo
bGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworYm9vbCBFeHBy
ZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQoreworICAgIENv
bnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNzOwor
ICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9IHRva2VuOwor
ICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBhcnNlKCZjb250
ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6CisgICAgICBjYXNl
IDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIi
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9F
UlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMK
ICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9F
WFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNl
IHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47
CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25Q
YXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9v
bCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQ
X0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVy
KiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5h
bWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9Q
QVJTRVJfSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2Vy
LnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc0IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1Ro
aXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nv
ciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJl
cHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1
dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Np
b25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNp
bmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJM
ZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlw
ZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0CisjZWxzZQor
I2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAv
LyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6
OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBw
OjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisl
fQorCislZGVmaW5lIGFwaS5wdXJlCislbmFtZS1wcmVmaXg9InBwIgorJXBhcnNlLXBhcmFtIHtD
b250ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKworJXsKK3N0
YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGlj
IHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0K
KworJXRva2VuIENPTlNUX0lOVAorJWxlZnQgT1BfT1IKKyVsZWZ0IE9QX0FORAorJWxlZnQgJ3wn
CislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgT1BfRVEgT1BfTkUKKyVsZWZ0ICc8JyAnPicg
T1BfTEUgT1BfR0UKKyVsZWZ0IE9QX0xFRlQgT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0
ICcqJyAnLycgJyUnCislcmlnaHQgVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Np
b24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsK
KyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBDT05TVF9J
TlQKKyAgICB8IGV4cHJlc3Npb24gT1BfT1IgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
fHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9BTkQgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiBPUF9ORSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIE9QX0VRIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfR0UgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9MRSBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+
JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJzwnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBPUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PiAk
MzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAi
IDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpE
SVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJl
YW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAg
IFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFVOQVJZ
IHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVj
IFVOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8ICctJyBleHByZXNzaW9u
ICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHBy
ZXNzaW9uICVwcmVjIFVOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICco
JyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5
cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lO
VDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwg
MCk7CisgICAgICAgIHR5cGUgPSBDT05TVF9JTlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBPUF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9ORTogdHlwZSA9IE9QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9FUTogdHlwZSA9IE9QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTog
dHlwZSA9IE9QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9
IE9QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IE9Q
X1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gT1Bf
TEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7CisgICAgICBj
YXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsg
YnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBjYXNlICc8
JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7
CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICclJzogdHlw
ZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7CisgICAg
ICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlwZSA9ICch
JzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAgICBjYXNl
ICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJl
YWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFuY2UgdG8g
dGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlmICh0eXBl
ICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCit7
CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNv
bik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25Q
YXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4
ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworYm9vbCBF
eHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQoreworICAg
IENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNz
OworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9IHRva2Vu
OworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBhcnNlKCZj
b250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6CisgICAgICBj
YXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChm
YWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5B
TF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwog
ICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMTU5ICs2LDQ5IEBACiAKICNp
bmNsdWRlICJJbnB1dC5oIgogCi0jaW5jbHVkZSA8Y3N0ZGlvPgotCi0jaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNp
bmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgcHAKIHsKIAotSW5wdXQ6OklucHV0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKLSAg
ICA6IG1Db3VudChjb3VudCksCi0gICAgICBtU3RyaW5nKHN0cmluZyksCi0gICAgICBtTGVuZ3Ro
KGxlbmd0aCksCi0gICAgICBtSW5kZXgoLTEpLAotICAgICAgbVNpemUoMCksCi0gICAgICBtRXJy
b3Ioa0Vycm9yTm9uZSksCi0gICAgICBtU3RhdGUoa1N0YXRlSW5pdGlhbCkKK0lucHV0OjpJbnB1
dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDApCiB7Ci0gICAgQVNTRVJUKG1Db3VudCA+PSAwKTsK
LSAgICBzd2l0Y2hUb05leHRTdHJpbmcoKTsKIH0KIAotYm9vbCBJbnB1dDo6ZW9mKCkgY29uc3QK
K0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQoY291bnQpLAorICAgIG1TdHJpbmcoc3RyaW5n
KQogewotICAgIEFTU0VSVChtSW5kZXggPD0gbUNvdW50KTsKLSAgICByZXR1cm4gbUluZGV4ID09
IG1Db3VudDsKKyAgICBhc3NlcnQobUNvdW50ID49IDApOworICAgIG1MZW5ndGgucmVzZXJ2ZSht
Q291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvdW50OyArK2kpCisgICAgeworICAg
ICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ldIDogLTE7CisgICAgICAgIG1MZW5ndGgu
cHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4obVN0cmluZ1tpXSkgOiBsZW4pOworICAgIH0KIH0K
IAotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IGJ1ZlNpemUpCitpbnQgSW5wdXQ6OnJl
YWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKIHsKLSAgICBpbnQgbnJlYWQgPSAwOwotICAgIGlu
dCBzdGFydEluZGV4ID0gbUluZGV4OwotICAgIC8vIEtlZXAgcmVhZGluZyB1bnRpbCB0aGUgYnVm
ZmVyIGlzIGZ1bGwgb3IgdGhlIGN1cnJlbnQgc3RyaW5nIGlzIGV4aGF1c3RlZC4KLSAgICB3aGls
ZSAoKG1JbmRleCA9PSBzdGFydEluZGV4KSAmJiAobnJlYWQgPCBidWZTaXplKSkKKyAgICBpbnQg
blJlYWQgPSAwOworICAgIHdoaWxlICgoblJlYWQgPCBtYXhTaXplKSAmJiAobVJlYWRMb2Muc0lu
ZGV4IDwgbUNvdW50KSkKICAgICB7Ci0gICAgICAgIGludCBjID0gZ2V0Q2hhcigpOwotICAgICAg
ICBpZiAoYyA9PSBFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUgPT0ga1N0
YXRlQmxvY2tDb21tZW50KQotICAgICAgICAgICAgICAgIG1FcnJvciA9IGtFcnJvclVuZXhwZWN0
ZWRFT0Y7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBpbnQgc2l6ZSA9
IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRleDsKKyAgICAgICAgc2l6
ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOworICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQs
IG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAg
ICAgIG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOwogCi0g
ICAgICAgIHN3aXRjaCAobVN0YXRlKQorICAgICAgICAvLyBBZHZhbmNlIHN0cmluZyBpZiB3ZSBy
ZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcuCisgICAgICAgIGlmIChtUmVhZExvYy5j
SW5kZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdKQogICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBrU3RhdGVJbml0aWFsOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbGx5IGEgY29tbWVudC4KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHBlZWtDaGFyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGdldENoYXIoKTsgIC8vIEVh
dCAnLycuCi0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUxpbmVDb21tZW50Owot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgot
ICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJyonLgotICAgICAgICAgICAg
ICAgICAgICBtU3RhdGUgPSBrU3RhdGVCbG9ja0NvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTm90IGEgY29tbWVudC4KLSAgICAgICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0g
YzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBr
U3RhdGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICdcbicpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYnVmW25yZWFkKytdID0gYzsKLSAgICAgICAgICAgICAgICBt
U3RhdGUgPSBrU3RhdGVJbml0aWFsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIGtTdGF0ZUJsb2NrQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChj
ID09ICcqJyAmJiAocGVla0NoYXIoKSA9PSAnLycpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdldENoYXIoKTsgICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgIGJ1ZltucmVh
ZCsrXSA9ICcgJzsgIC8vIFJlcGxhY2UgY29tbWVudCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAg
ICAgICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIExpbmUgYnJlYWtz
IGFyZSBuZXZlciBza2lwcGVkLgotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICArK21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAgIG1SZWFkTG9jLmNJbmRleCA9IDA7CiAg
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWludCBJbnB1dDo6Z2V0
Q2hhcigpCi17Ci0gICAgaWYgKGVvZigpKSByZXR1cm4gRU9GOwotCi0gICAgY29uc3QgY2hhciog
c3RyID0gbVN0cmluZ1ttSW5kZXhdOwotICAgIGludCBjID0gc3RyW21TaXplKytdOwotCi0gICAg
Ly8gU3dpdGNoIHRvIG5leHQgc3RyaW5nIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBmdWxseSByZWFk
LgotICAgIGludCBsZW5ndGggPSBzdHJpbmdMZW5ndGgobUluZGV4KTsKLSAgICAvLyBXZSBuZXZl
ciByZWFkIGZyb20gZW1wdHkgc3RyaW5nLgotICAgIEFTU0VSVChsZW5ndGggIT0gMCk7Ci0gICAg
aWYgKCgobGVuZ3RoIDwgMCkgJiYgKHN0clttU2l6ZV0gPT0gJ1wwJykpIHx8Ci0gICAgICAgICgo
bGVuZ3RoID4gMCkgJiYgKG1TaXplID09IGxlbmd0aCkpKQotICAgICAgICBzd2l0Y2hUb05leHRT
dHJpbmcoKTsKLQotICAgIHJldHVybiBjOwotfQotCi1pbnQgSW5wdXQ6OnBlZWtDaGFyKCkKLXsK
LSAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IGluZGV4ID0g
bUluZGV4OwotICAgIGludCBzaXplID0gbVNpemU7Ci0gICAgaW50IGMgPSBnZXRDaGFyKCk7Ci0K
LSAgICAvLyBSZXN0b3JlIHJlYWQgcG9zaXRpb24uCi0gICAgbUluZGV4ID0gaW5kZXg7Ci0gICAg
bVNpemUgPSBzaXplOwotICAgIHJldHVybiBjOwotfQotCi12b2lkIElucHV0Ojpzd2l0Y2hUb05l
eHRTdHJpbmcoKQotewotICAgIEFTU0VSVChtSW5kZXggPCBtQ291bnQpOwotCi0gICAgbVNpemUg
PSAwOwotICAgIGRvCi0gICAgewotICAgICAgICArK21JbmRleDsKLSAgICB9IHdoaWxlICghZW9m
KCkgJiYgaXNTdHJpbmdFbXB0eShtSW5kZXgpKTsKLX0KLQotYm9vbCBJbnB1dDo6aXNTdHJpbmdF
bXB0eShpbnQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbUNvdW50KTsKLQotICAgIGNv
bnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5n
TGVuZ3RoKG1JbmRleCk7Ci0gICAgcmV0dXJuIChsZW5ndGggPT0gMCkgfHwgKChsZW5ndGggPCAw
KSAmJiAoc3RyWzBdID09ICdcMCcpKTsKLX0KLQotaW50IElucHV0OjpzdHJpbmdMZW5ndGgoaW50
IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1MZW5n
dGggPyBtTGVuZ3RoW2luZGV4XSA6IC0xOworICAgIHJldHVybiBuUmVhZDsKIH0KIAogfSAgLy8g
bmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgJ
KHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcsNjYgKzcsNDAg
QEAKICNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCiAjZGVmaW5lIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogCisjaW5jbHVkZSA8dmVjdG9yPgorCiBuYW1lc3Bh
Y2UgcHAKIHsKIAotLy8gUmVhZHMgdGhlIGdpdmVuIHNldCBvZiBzdHJpbmdzIGludG8gaW5wdXQg
YnVmZmVyLgotLy8gU3RyaXBzIGNvbW1lbnRzLgorLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZv
ciBMZXhlci4KIGNsYXNzIElucHV0CiB7CiAgIHB1YmxpYzoKKyAgICBJbnB1dCgpOwogICAgIElu
cHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5n
dGhbXSk7CiAKLSAgICBlbnVtIEVycm9yCi0gICAgewotICAgICAgICBrRXJyb3JOb25lLAotICAg
ICAgICBrRXJyb3JVbmV4cGVjdGVkRU9GCi0gICAgfTsKLSAgICBFcnJvciBlcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1FcnJvcjsgfQorICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1Db3Vu
dDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1T
dHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1MZW5ndGhbaW5kZXhdOyB9CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBzdHJpbmcg
Y3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IHN0cmluZ0luZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbUluZGV4OyB9Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIEVPRiBoYXMgcmVhY2hlZC4K
LSAgICBib29sIGVvZigpIGNvbnN0OwotCi0gICAgLy8gUmVhZHMgdXAgdG8gYnVmU2l6ZSBjaGFy
YWN0ZXJzIGludG8gYnVmLgotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQuCi0gICAgLy8gSXQgcmVwbGFjZXMgZWFjaCBjb21tZW50IGJ5IGEgd2hpdGVzcGFjZS4g
SXQgcmVhZHMgb25seSBvbmUgc3RyaW5nCi0gICAgLy8gYXQgYSB0aW1lIHNvIHRoYXQgdGhlIGxl
eGVyIGhhcyBvcHBvcnR1bml0eSB0byB1cGRhdGUgdGhlIHN0cmluZyBudW1iZXIKLSAgICAvLyBm
b3IgbWVhbmluZ2Z1bCBkaWFnbm9zdGljIG1lc3NhZ2VzLgotICAgIGludCByZWFkKGNoYXIqIGJ1
ZiwgaW50IGJ1ZlNpemUpOworICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwog
Ci1wcml2YXRlOgotICAgIGVudW0gU3RhdGUKKyAgICBzdHJ1Y3QgTG9jYXRpb24KICAgICB7Ci0g
ICAgICAgIGtTdGF0ZUluaXRpYWwsCi0gICAgICAgIGtTdGF0ZUxpbmVDb21tZW50LAotICAgICAg
ICBrU3RhdGVCbG9ja0NvbW1lbnQKLSAgICB9OworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3Ry
aW5nIGluZGV4OworICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KIAotICAgIGlu
dCBnZXRDaGFyKCk7Ci0gICAgaW50IHBlZWtDaGFyKCk7Ci0gICAgLy8gU3dpdGNoZXMgaW5wdXQg
YnVmZmVyIHRvIHRoZSBuZXh0IG5vbi1lbXB0eSBzdHJpbmcuCi0gICAgLy8gVGhpcyBpcyBjYWxs
ZWQgd2hlbiB0aGUgY3VycmVudCBzdHJpbmcgaXMgZnVsbHkgcmVhZC4KLSAgICB2b2lkIHN3aXRj
aFRvTmV4dFN0cmluZygpOwotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5n
IGlzIGVtcHR5LgotICAgIGJvb2wgaXNTdHJpbmdFbXB0eShpbnQgaW5kZXgpOwotICAgIC8vIFJl
dHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgLy8gUmV0dXJucyBhIG5l
Z2F0aXZlIHZhbHVlIGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4KLSAgICBpbnQgc3RyaW5n
TGVuZ3RoKGludCBpbmRleCk7CisgICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRl
eCgwKSB7IH0KKyAgICB9OworICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyBy
ZXR1cm4gbVJlYWRMb2M7IH0KIAorICBwcml2YXRlOgogICAgIC8vIElucHV0LgogICAgIGludCBt
Q291bnQ7CiAgICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgY29uc3QgaW50KiBt
TGVuZ3RoOworICAgIHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKIAotICAgIC8vIEN1cnJlbnQg
cmVhZCBwb3NpdGlvbi4KLSAgICBpbnQgbUluZGV4OyAgIC8vIEluZGV4IG9mIHN0cmluZyBjdXJy
ZW50bHkgYmVpbmcgc2Nhbm5lZC4KLSAgICBpbnQgbVNpemU7ICAgIC8vIFNpemUgb2Ygc3RyaW5n
IGFscmVhZHkgc2Nhbm5lZC4KLQotICAgIC8vIEN1cnJlbnQgZXJyb3IgYW5kIHN0YXRlLgotICAg
IEVycm9yIG1FcnJvcjsKLSAgICBTdGF0ZSBtU3RhdGU7CisgICAgTG9jYXRpb24gbVJlYWRMb2M7
CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkxleGVyLmgiCisKK25hbWVz
cGFjZSBwcAoreworCitMZXhlcjo6fkxleGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFi
cwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgVG9rZW47
CisKK2NsYXNzIExleGVyCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5MZXhlcigpOworCisg
ICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pID0gMDsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsg
dHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAJKHJldmlzaW9uIDEyMjIz
OSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiwzOSArNiwxNyBAQAogCiAjaW5jbHVk
ZSAiTWFjcm8uaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgInN0bF91dGls
cy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1NYWNybzo6TWFj
cm8oVHlwZSB0eXBlLAotICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAg
ICAgIFRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMpCi0gICAgOiBtVHlwZSh0eXBlKSwKLSAgICAgIG1OYW1lKG5hbWUpLAotICAg
ICAgbVBhcmFtZXRlcnMocGFyYW1ldGVycyksCi0gICAgICBtUmVwbGFjZW1lbnRzKHJlcGxhY2Vt
ZW50cykKK2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0CiB7Ci19
Ci0KLU1hY3JvOjp+TWFjcm8oKQotewotICAgIGRlbGV0ZSBtTmFtZTsKLQotICAgIGlmIChtUGFy
YW1ldGVycykKLSAgICB7Ci0gICAgICAgIHN0ZDo6Zm9yX2VhY2gobVBhcmFtZXRlcnMtPmJlZ2lu
KCksIG1QYXJhbWV0ZXJzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVBhcmFt
ZXRlcnM7Ci0gICAgfQotCi0gICAgaWYgKG1SZXBsYWNlbWVudHMpCi0gICAgewotICAgICAgICBz
dGQ6OmZvcl9lYWNoKG1SZXBsYWNlbWVudHMtPmJlZ2luKCksIG1SZXBsYWNlbWVudHMtPmVuZCgp
LCBEZWxldGUoKSk7Ci0gICAgICAgIGRlbGV0ZSBtUmVwbGFjZW1lbnRzOwotICAgIH0KKyAgICBy
ZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIu
bmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYK
KyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwogfQogCiB9
ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDQ1ICs3LDM4IEBACiAjaWZu
ZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfTUFDUk9fSF8KIAorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAj
aW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNs
dWRlICJUb2tlbi5oIgotCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgTWFjcm8KK3N0cnVjdCBU
b2tlbjsKKworc3RydWN0IE1hY3JvCiB7Ci0gIHB1YmxpYzoKICAgICBlbnVtIFR5cGUKICAgICB7
CiAgICAgICAgIGtUeXBlT2JqLAogICAgICAgICBrVHlwZUZ1bmMKICAgICB9OworICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBzdGQ6
OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmluZWQo
ZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wgZXF1
YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7CiAKLSAgICAvLyBUYWtlcyBvd25lcnNoaXAg
b2YgcG9pbnRlciBwYXJhbWV0ZXJzLgotICAgIE1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICBz
dGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAg
ICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKTsKLSAgICB+TWFjcm8oKTsKLQotICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJp
bmcqIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgIGNvbnN0IFRva2Vu
VmVjdG9yKiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbVBhcmFtZXRlcnM7IH0KLSAgICBj
b25zdCBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbVJlcGxhY2Vt
ZW50czsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3Jv
KTsKLQotICAgIFR5cGUgbVR5cGU7Ci0gICAgc3RkOjpzdHJpbmcqIG1OYW1lOwotICAgIFRva2Vu
VmVjdG9yKiBtUGFyYW1ldGVyczsKLSAgICBUb2tlblZlY3RvciogbVJlcGxhY2VtZW50czsKKyAg
ICBib29sIHByZWRlZmluZWQ7CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAgVHlw
ZSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJz
OworICAgIFJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7CiB9OwogCi19ICAvLyBuYW1lc3BhY2Ug
cHAKLSNlbmRpZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KK3R5cGVkZWYgc3RkOjpt
YXA8c3RkOjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKIAorfSAgLy8gbmFtZXNwYWNlIHBwCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm8uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvRXhwYW5kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY5IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRl
ICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7CisgcHVibGljOgorICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisgICAgVG9rZW5MZXhlcihUb2tl
blZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5zLT5zd2FwKG1Ub2tlbnMpOwor
ICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlmIChtSXRlciA9PSBtVG9rZW5z
LmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+cmVzZXQoKTsKKyAgICAgICAg
ICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIrKzsKKyAgICAgICAgfQorICAg
IH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuTGV4
ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBUb2tlblZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVy
KiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
IDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURp
YWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4cGFuZGVyOjp+TWFjcm9FeHBh
bmRlcigpCit7CisgICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpIHBvcE1hY3JvKCk7
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB3aGls
ZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRva2VuKTsKKworICAgICAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVkKCkpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+
ZmluZCh0b2tlbi0+dmFsdWUpOworICAgICAgICBpZiAoaXRlciA9PSBtTWFjcm9TZXQtPmVuZCgp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY29uc3QgTWFjcm8mIG1hY3JvID0gaXRl
ci0+c2Vjb25kOworICAgICAgICBpZiAobWFjcm8uZGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIElmIGEgcGFydGljdWxhciB0b2tlbiBpcyBub3QgZXhwYW5kZWQsIGl0IGlzIG5l
dmVyIGV4cGFuZGVkLgorICAgICAgICAgICAgdG9rZW4tPnNldEV4cGFuc2lvbkRpc2FibGVkKHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChtYWNyby50
eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpICYmICFpc05leHRUb2tlbkxlZnRQYXJlbigpKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl
IG1hY3JvIG5hbWUgaXMgbm90IGEgJygnLAorICAgICAgICAgICAgLy8gdGhpcyBtYWNybyBzaG91
bGQgbm90IGJlIGV4cGFuZGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBwdXNoTWFjcm8obWFjcm8sICp0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhw
YW5kZXI6OmdldFRva2VuKFRva2VuKiB0b2tlbikKK3sKKyAgICBpZiAobVJlc2VydmVUb2tlbi5n
ZXQoKSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9ICptUmVzZXJ2ZVRva2VuOworICAgICAgICBt
UmVzZXJ2ZVRva2VuLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBG
aXJzdCBwb3AgYWxsIGVtcHR5IG1hY3JvIGNvbnRleHRzLgorICAgIHdoaWxlICghbUNvbnRleHRT
dGFjay5lbXB0eSgpICYmIG1Db250ZXh0U3RhY2suYmFjaygpLT5lbXB0eSgpKQorICAgIHsKKyAg
ICAgICAgcG9wTWFjcm8oKTsKKyAgICB9CisKKyAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHko
KSkKKyAgICB7CisgICAgICAgICp0b2tlbiA9IG1Db250ZXh0U3RhY2suYmFjaygpLT5nZXQoKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAg
IH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjp1bmdldFRva2VuKGNvbnN0IFRva2VuJiB0b2tl
bikKK3sKKyAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgIE1h
Y3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOworICAgICAgICBjb250
ZXh0LT51bmdldCgpOworICAgICAgICBhc3NlcnQoY29udGV4dC0+aW5kZXggPj0gMCk7CisgICAg
ICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5kZXhdID09IHRva2Vu
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFtUmVzZXJ2ZVRva2Vu
LmdldCgpKTsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9rZW4odG9rZW4pKTsK
KyAgICB9Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKQor
eworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICBib29sIGxw
YXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOworICAgIHVuZ2V0VG9rZW4odG9rZW4pOworCisgICAg
cmV0dXJuIGxwYXJlbjsKK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmllcikKK3sKKyAgICBhc3NlcnQoIW1h
Y3JvLmRpc2FibGVkKTsKKyAgICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5zaW9uRGlzYWJsZWQo
KSk7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Cisg
ICAgYXNzZXJ0KGlkZW50aWZpZXIudmFsdWUgPT0gbWFjcm8ubmFtZSk7CisKKyAgICBzdGQ6OnZl
Y3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworICAgIGlmICghZXhwYW5kTWFjcm8obWFjcm8sIGlk
ZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5zaW9uIHVudGlsIGl0IGlzIHBvcHBlZCBvZmYg
dGhlIHN0YWNrLgorICAgIG1hY3JvLmRpc2FibGVkID0gdHJ1ZTsKKworICAgIE1hY3JvQ29udGV4
dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7CisgICAgY29udGV4dC0+bWFjcm8gPSAmbWFj
cm87CisgICAgY29udGV4dC0+cmVwbGFjZW1lbnRzLnN3YXAocmVwbGFjZW1lbnRzKTsKKyAgICBt
Q29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygpCit7CisgICAgYXNzZXJ0KCFtQ29udGV4dFN0
YWNrLmVtcHR5KCkpOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFj
ay5iYWNrKCk7CisgICAgbUNvbnRleHRTdGFjay5wb3BfYmFjaygpOworCisgICAgYXNzZXJ0KGNv
bnRleHQtPmVtcHR5KCkpOworICAgIGFzc2VydChjb250ZXh0LT5tYWNyby0+ZGlzYWJsZWQpOwor
ICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9IGZhbHNlOworICAgIGRlbGV0ZSBjb250ZXh0
OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNy
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiog
cmVwbGFjZW1lbnRzKQoreworICAgIHJlcGxhY2VtZW50cy0+Y2xlYXIoKTsKKyAgICBpZiAobWFj
cm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCisgICAgeworICAgICAgICByZXBsYWNlbWVudHMt
PmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVuZCgpKTsKKworICAgICAgICBpZiAobWFjcm8u
cHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtMaW5lID0gIl9fTElORV9fIjsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7CisKKyAgICAgICAgICAgIGFzc2VydChyZXBsYWNlbWVu
dHMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRz
LT5mcm9udCgpOworICAgICAgICAgICAgaWYgKG1hY3JvLm5hbWUgPT0ga0xpbmUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7CisgICAgICAgICAg
ICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0ZpbGUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVh
bSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7CisgICAgICAgICAgICAgICAgcmVwbC52YWx1
ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBhc3NlcnQobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5j
KTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+IGFyZ3M7CisgICAgICAgIGFyZ3MucmVz
ZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7CisgICAgICAgIGlmICghY29sbGVjdE1hY3Jv
QXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHJlcGxhY2VNYWNyb1BhcmFtcyhtYWNybywgYXJncywgcmVwbGFjZW1lbnRz
KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcGxhY2VtZW50cy0+c2l6
ZSgpOyArK2kpCisgICAgeworICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+YXQo
aSk7CisgICAgICAgIGlmIChpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBm
aXJzdCB0b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpbmhlcml0cyB0aGUgcGFkZGluZwor
ICAgICAgICAgICAgLy8gcHJvcGVydGllcyBvZiB0aGUgaWRlbnRpZmllciB0b2tlbi4KKyAgICAg
ICAgICAgIHJlcGwuc2V0QXRTdGFydE9mTGluZShpZGVudGlmaWVyLmF0U3RhcnRPZkxpbmUoKSk7
CisgICAgICAgICAgICByZXBsLnNldEhhc0xlYWRpbmdTcGFjZShpZGVudGlmaWVyLmhhc0xlYWRp
bmdTcGFjZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXBsLmxvY2F0aW9uID0gaWRlbnRpZmll
ci5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFjcm9FeHBh
bmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdz
KQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7CisgICAgYXNzZXJ0
KHRva2VuLnR5cGUgPT0gJygnKTsKKworICAgIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsK
KyAgICBmb3IgKGludCBvcGVuUGFyZW5zID0gMTsgb3BlblBhcmVucyAhPSAwOyApCisgICAgewor
ICAgICAgICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRv
a2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnZhbHVl
KTsKKyAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAgICAgICAgICAgIHVu
Z2V0VG9rZW4odG9rZW4pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2VuIGlzIHBhcnQgb2Yg
dGhlIGN1cnJlbnQgYXJndW1lbnQuCisgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgKytvcGVuUGFyZW5zOworICAg
ICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSAnKSc6CisgICAgICAgICAgICAtLW9wZW5QYXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IG9w
ZW5QYXJlbnMgIT0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJywnOgor
ICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkg
Y29tbWEgdG9rZW5zLCBidXQKKyAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0b2tlbnMgYmV0d2Vl
biBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAgICAgIC8vIHNlcGVy
YXRlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09IDEpIGFyZ3MtPnB1
c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAx
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlz
QXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChp
c0FyZykKKyAgICAgICAgeworICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmJhY2so
KTsKKyAgICAgICAgICAgIC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUg
YXJndW1lbnQuCisgICAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2VuLnNldEhhc0xlYWRp
bmdTcGFjZShmYWxzZSk7CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBwYXJhbXMgPSBtYWNy
by5wYXJhbWV0ZXJzOworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVtcHR5IGFyZ3VtZW50
LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3VtZW50LgorICAgIGlmIChwYXJhbXMuZW1wdHko
KSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIGFyZ3MtPmNsZWFyKCk7CisgICAgfQorICAgIC8vIFZhbGlkYXRlIHRoZSBudW1i
ZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFyYW1zLnNpemUoKSkK
KyAgICB7CisgICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNpemUoKSA8IG1hY3Jv
LnBhcmFtZXRlcnMuc2l6ZSgpID8KKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09f
RkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19NQU5ZX0FSR1M7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVyLmxvY2F0aW9uLCBp
ZGVudGlmaWVyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZvcmUgc3Vic3RpdHV0aW9uLgorICAgIC8vIFRo
aXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5IGJlZm9yZSB0aGV5IGFy
ZQorICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1hY3JvIGJvZHkuCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIE1hY3JvQXJnJiBh
cmcgPSBhcmdzLT5hdChpKTsKKyAgICAgICAgVG9rZW5MZXhlciBsZXhlcigmYXJnKTsKKyAgICAg
ICAgTWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNz
KTsKKworICAgICAgICBhcmcuY2xlYXIoKTsKKyAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7
CisgICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuOjpMQVNUKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgICAgIGV4cGFuZGVyLmxl
eCgmdG9rZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IE1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxN
YWNyb0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNv
bnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAgICAgICBpZiAocmVw
bC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXBs
YWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8v
IFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4K
KyAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFj
ZW1lbnQgdG9rZW4uCisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gc3RkOjpmaW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBt
YWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnZhbHVlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0g
bWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVwbGFjZW1l
bnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHNpemVfdCBpQXJnID0gc3RkOjpkaXN0YW5jZShtYWNyby5wYXJhbWV0ZXJzLmJl
Z2luKCksIGl0ZXIpOworICAgICAgICBjb25zdCBNYWNyb0FyZyYgYXJnID0gYXJnc1tpQXJnXTsK
KyAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMtPnNpemUo
KTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQoKSwgYXJn
LmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0b2tlbiBp
bmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBtYWNybyByZXBsYWNl
bWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFzTGVhZGlu
Z1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNw
YWNlIHBwCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvRXhwYW5kZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHZl
Y3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRl
ICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisK
K2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIE1h
Y3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigpOworCisgICAgdmly
dHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgdm9pZCBnZXRUb2tlbihU
b2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pOwor
ICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAgIGJvb2wgcHVzaE1hY3JvKGNv
bnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOworICAgIHZvaWQgcG9w
TWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29sIGNvbGxlY3RNYWNyb0FyZ3Mo
Y29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tl
biYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFj
cm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYg
bWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFj
cm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRv
a2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNyb0NvbnRleHQKKyAgICB7Cisg
ICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc2l6ZV90IGluZGV4OworICAgICAg
ICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworCisgICAgICAgIE1hY3JvQ29udGV4
dCgpIDogbWFjcm8oMCksIGluZGV4KDApIHsgfQorICAgICAgICBib29sIGVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsgfQorICAgICAgICBjb25zdCBU
b2tlbiYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4KytdOyB9CisgICAgICAgIHZv
aWQgdW5nZXQoKSB7IC0taW5kZXg7IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAg
ICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisK
KyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0ZDo6dmVjdG9y
PE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAK
KyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10
YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vz
c29yLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNiw0NyArNiwxMDggQEAKIAogI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgogCi0jaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4K
IAotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2lu
Y2x1ZGUgInN0bF91dGlscy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAi
RGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4
cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKIAog
bmFtZXNwYWNlIHBwCiB7CiAKLVByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKCkgOiBtQ29udGV4
dChOVUxMKQorc3RydWN0IFByZXByb2Nlc3NvckltcGwKIHsKKyAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9TZXQ7CisgICAgVG9rZW5pemVyIHRva2VuaXpl
cjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFyc2VyOworICAgIE1hY3JvRXhwYW5k
ZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXByb2Nlc3NvckltcGwoRGlhZ25vc3RpY3MqIGRp
YWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5k
bGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAorICAgICAgICB0b2tlbml6ZXIoZGlh
ZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5pemVyLCAmbWFjcm9TZXQsIGRpYWcs
IGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBtYWNyb0V4cGFuZGVyKCZkaXJlY3RpdmVQYXJz
ZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7CisgICAgfQorfTsKKworUHJlcHJvY2Vzc29yOjpQ
cmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikKK3sKKyAgICBtSW1w
bCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNzLCBkaXJlY3RpdmVIYW5kbGVyKTsK
IH0KIAogUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKIHsKLSAgICBkZWxldGUgbUNvbnRl
eHQ7CisgICAgZGVsZXRlIG1JbXBsOwogfQogCi1ib29sIFByZXByb2Nlc3Nvcjo6aW5pdCgpCi17
Ci0gICAgbUNvbnRleHQgPSBuZXcgQ29udGV4dDsKLSAgICByZXR1cm4gbUNvbnRleHQtPmluaXQo
KTsKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0KGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga0dMU0xWZXJz
aW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0YW5kYXJkIHByZS1kZWZpbmVkIG1hY3Jvcy4KKyAg
ICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19G
SUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19WRVJTSU9OX18iLCBrR0xTTFZlcnNp
b24pOworICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOworCisgICAgcmV0dXJuIG1JbXBs
LT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwogfQogCi1ib29sIFByZXBy
b2Nlc3Nvcjo6cHJvY2VzcyhpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGludCBsZW5ndGhbXSkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyhjb25z
dCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKChjb3VudCA+PTApICYmIChz
dHJpbmcgIT0gTlVMTCkpOwotICAgIGlmICgoY291bnQgPCAwKSB8fCAoc3RyaW5nID09IE5VTEwp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwor
ICAgIHN0cmVhbSA8PCB2YWx1ZTsKIAotICAgIHJlc2V0KCk7CisgICAgVG9rZW4gdG9rZW47Cisg
ICAgdG9rZW4udHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgdG9rZW4udmFsdWUgPSBzdHJl
YW0uc3RyKCk7CisKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1
ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBu
YW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOwogCi0gICAgcmV0
dXJuIG1Db250ZXh0LT5wcm9jZXNzKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgJm1Ub2tlbnMpOwor
ICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nlc3Nv
cjo6cmVzZXQoKQordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7Ci0gICAg
c3RkOjpmb3JfZWFjaChtVG9rZW5zLmJlZ2luKCksIG1Ub2tlbnMuZW5kKCksIERlbGV0ZSgpKTsK
LSAgICBtVG9rZW5zLmNsZWFyKCk7CisgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7CisgICAg
d2hpbGUgKCF2YWxpZFRva2VuKQorICAgIHsKKyAgICAgICAgbUltcGwtPm1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKKyAgICAgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5nIGludGVybmFsIHByZXByb2Nlc3Np
bmcgdG9rZW5zLgorICAgICAgICAgIC8vIENvbnZlcnQgcHJlcHJvY2Vzc2luZyB0b2tlbnMgdG8g
Y29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAorICAgICAgICAgIC8vIGRpYWdub3N0aWNzLgorICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAg
ICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
TlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFsaWRUb2tlbiA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfSAgLy8g
bmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03LDM0ICs3LDQxIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9QUkVQUk9DRVNTT1JfSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBS
T0NFU1NPUl9IXwogCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJU
b2tlbi5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFz
cyBDb250ZXh0OworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwor
c3RydWN0IFByZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47CiAKIGNsYXNzIFByZXByb2Nl
c3NvcgogewogICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKCk7CisgICAgUHJlcHJvY2Vzc29y
KERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFu
ZGxlcik7CiAgICAgflByZXByb2Nlc3NvcigpOwogCi0gICAgYm9vbCBpbml0KCk7CisgICAgLy8g
Y291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5k
IGxlbmd0aCBhcnJheXMuCisgICAgLy8gc3RyaW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9p
bnRlcnMgdG8gc3RyaW5ncy4KKyAgICAvLyBsZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBz
dHJpbmcgbGVuZ3Rocy4KKyAgICAvLyBJZiBsZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMg
YXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCisgICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFs
dWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2ludHMgdG8gYW4gYXJyYXkgY29udGFpbmluZworICAg
IC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50
cyBvZiBzdHJpbmcuCisgICAgLy8gRWFjaCBlbGVtZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5
IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBv
ciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGluZGljYXRlIHRoYXQgdGhlIHN0cmluZworICAgIC8v
IGlzIG51bGwgdGVybWluYXRlZC4KKyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKyAgICAvLyBBZGRzIGEgcHJl
LWRlZmluZWQgbWFjcm8uCisgICAgdm9pZCBwcmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1l
LCBpbnQgdmFsdWUpOwogCi0gICAgYm9vbCBwcm9jZXNzKGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0gICAgVG9rZW5JdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuYmVnaW4oKTsgfQotICAgIFRva2VuSXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbVRva2Vucy5lbmQoKTsgfQorICAgIHZvaWQgbGV4KFRv
a2VuKiB0b2tlbik7CiAKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UHJlcHJvY2Vzc29yKTsKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJvY2Vz
c29yKTsKIAotICAgIC8vIFJlc2V0IHRvIGluaXRpYWxpemVkIHN0YXRlLgotICAgIHZvaWQgcmVz
ZXQoKTsKLQotICAgIENvbnRleHQqIG1Db250ZXh0OwotICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7
ICAvLyBPdXRwdXQuCisgICAgUHJlcHJvY2Vzc29ySW1wbCogbUltcGw7CiB9OwogCiB9ICAvLyBu
YW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Tb3VyY2VMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3Qg
U291cmNlTG9jYXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmlsZSgwKSwgbGluZSgw
KSB7IH0KKyAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmlsZShmKSwgbGluZShs
KSB7IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxlKSAmJiAobGluZSA9
PSBvdGhlci5saW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBpbnQgbGluZTsKK307
CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29u
c3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNv
bnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfU09VUkNFX0xPQ0FUSU9OX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02LDUwICs2LDU2IEBACiAKICNpbmNsdWRlICJUb2tlbi5oIgogCi0jaW5jbHVk
ZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgY29uc3QgaW50IGtMb2NhdGlvbkxpbmVTaXplID0g
MTY7ICAvLyBpbiBiaXRzLgotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lTWFzayA9ICgx
IDw8IGtMb2NhdGlvbkxpbmVTaXplKSAtIDE7Ci0KIG5hbWVzcGFjZSBwcAogewogCi1Ub2tlbjo6
TG9jYXRpb24gVG9rZW46OmVuY29kZUxvY2F0aW9uKGludCBsaW5lLCBpbnQgZmlsZSkKK3ZvaWQg
VG9rZW46OnJlc2V0KCkKIHsKLSAgICByZXR1cm4gKGZpbGUgPDwga0xvY2F0aW9uTGluZVNpemUp
IHwgKGxpbmUgJiBrTG9jYXRpb25MaW5lTWFzayk7CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3Mg
PSAwOworICAgIGxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICB2YWx1ZS5jbGVhcigp
OwogfQogCi12b2lkIFRva2VuOjpkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGlu
ZSwgaW50KiBmaWxlKQorYm9vbCBUb2tlbjo6ZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29u
c3QKIHsKLSAgICBpZiAoZmlsZSkgKmZpbGUgPSBsb2MgPj4ga0xvY2F0aW9uTGluZVNpemU7Ci0g
ICAgaWYgKGxpbmUpICpsaW5lID0gbG9jICYga0xvY2F0aW9uTGluZU1hc2s7CisgICAgcmV0dXJu
ICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFn
cykgJiYKKyAgICAgICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAg
ICAgICAodmFsdWUgPT0gb3RoZXIudmFsdWUpOwogfQogCi1Ub2tlbjo6VG9rZW4oTG9jYXRpb24g
bG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpCi0gICAgOiBtTG9jYXRpb24o
bG9jYXRpb24pLAotICAgICAgbVR5cGUodHlwZSksCi0gICAgICBtVmFsdWUodmFsdWUpCit2b2lk
IFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpCiB7CisgICAgaWYgKHN0YXJ0KQor
ICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9MSU5FOworICAgIGVsc2UKKyAgICAgICAgZmxh
Z3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7CiB9CiAKLVRva2VuOjp+VG9rZW4oKSB7Ci0gICAgZGVs
ZXRlIG1WYWx1ZTsKK3ZvaWQgVG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQor
eworICAgIGlmIChzcGFjZSkKKyAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7Cisg
ICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7Cit9CisKK3ZvaWQg
VG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSkKK3sKKyAgICBpZiAoZGlz
YWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gRVhQQU5TSU9OX0RJU0FCTEVEOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkVYUEFOU0lPTl9ESVNBQkxFRDsKIH0KIAogc3RkOjpvc3RyZWFtJiBv
cGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pCiB7Ci0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpCi0gICAgewotICAgICAgY2FzZSBJTlRfQ09OU1RBTlQ6Ci0g
ICAgICBjYXNlIEZMT0FUX0NPTlNUQU5UOgotICAgICAgY2FzZSBJREVOVElGSUVSOgotICAgICAg
ICBvdXQgPDwgKih0b2tlbi52YWx1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBvdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4odG9rZW4udHlwZSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgIGlmICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICAg
ICAgb3V0IDw8ICIgIjsKKworICAgIG91dCA8PCB0b2tlbi52YWx1ZTsKICAgICByZXR1cm4gb3V0
OwogfQotfSAgLy8gbmFtZXNwYWNlIHBwCiAKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDQyICs3LDk0IEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9UT0tFTl9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5f
SF8KIAorI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiU291cmNl
TG9jYXRpb24uaCIKIAogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIFRva2VuCitzdHJ1Y3QgVG9r
ZW4KIHsKLSAgcHVibGljOgotICAgIHR5cGVkZWYgaW50IExvY2F0aW9uOwotICAgIHN0YXRpYyBM
b2NhdGlvbiBlbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpOwotICAgIHN0YXRpYyB2
b2lkIGRlY29kZUxvY2F0aW9uKExvY2F0aW9uIGxvYywgaW50KiBsaW5lLCBpbnQqIGZpbGUpOwot
Ci0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHN0cmluZy4KLSAgICBUb2tlbihMb2NhdGlvbiBs
b2NhdGlvbiwgaW50IHR5cGUsIHN0ZDo6c3RyaW5nKiB2YWx1ZSk7Ci0gICAgflRva2VuKCk7Ci0K
LSAgICBMb2NhdGlvbiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdGlvbjsgfQotICAg
IGludCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLSAgICBjb25zdCBzdGQ6OnN0cmlu
ZyogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbik7Ci0KLSAgICBMb2NhdGlvbiBtTG9jYXRpb247
Ci0gICAgaW50IG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtVmFsdWU7CisgICAgZW51bSBUeXBl
CisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KKworICAgICAgICBJREVOVElGSUVS
ID0gMjU4LAorCisgICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1RfRkxPQVQsCisKKyAg
ICAgICAgT1BfSU5DLAorICAgICAgICBPUF9ERUMsCisgICAgICAgIE9QX0xFRlQsCisgICAgICAg
IE9QX1JJR0hULAorICAgICAgICBPUF9MRSwKKyAgICAgICAgT1BfR0UsCisgICAgICAgIE9QX0VR
LAorICAgICAgICBPUF9ORSwKKyAgICAgICAgT1BfQU5ELAorICAgICAgICBPUF9YT1IsCisgICAg
ICAgIE9QX09SLAorICAgICAgICBPUF9BRERfQVNTSUdOLAorICAgICAgICBPUF9TVUJfQVNTSUdO
LAorICAgICAgICBPUF9NVUxfQVNTSUdOLAorICAgICAgICBPUF9ESVZfQVNTSUdOLAorICAgICAg
ICBPUF9NT0RfQVNTSUdOLAorICAgICAgICBPUF9MRUZUX0FTU0lHTiwKKyAgICAgICAgT1BfUklH
SFRfQVNTSUdOLAorICAgICAgICBPUF9BTkRfQVNTSUdOLAorICAgICAgICBPUF9YT1JfQVNTSUdO
LAorICAgICAgICBPUF9PUl9BU1NJR04sCisKKyAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyB0b2tl
biB0eXBlcy4KKyAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgYnkgdGhlIHByZXByb2Nl
c3NvciBpbnRlcm5hbGx5LgorICAgICAgICAvLyBQcmVwcm9jZXNzb3IgY2xpZW50cyBtdXN0IG5v
dCBkZXBlbmQgb3IgY2hlY2sgZm9yIHRoZW0uCisgICAgICAgIFBQX0hBU0gsCisgICAgICAgIFBQ
X05VTUJFUiwKKyAgICAgICAgUFBfT1RIRVIKKyAgICB9OworICAgIGVudW0gRmxhZ3MKKyAgICB7
CisgICAgICAgIEFUX1NUQVJUX09GX0xJTkUgICA9IDEgPDwgMCwKKyAgICAgICAgSEFTX0xFQURJ
TkdfU1BBQ0UgID0gMSA8PCAxLAorICAgICAgICBFWFBBTlNJT05fRElTQUJMRUQgPSAxIDw8IDIK
KyAgICB9OworCisgICAgVG9rZW4oKSA6IHR5cGUoMCksIGZsYWdzKDApIHsgfQorCisgICAgdm9p
ZCByZXNldCgpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3Q7CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdG9rZW4gb24gbGluZS4K
KyAgICAvLyBJdCBkaXNyZWdhcmRzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgYm9vbCBh
dFN0YXJ0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgQVRfU1RBUlRfT0ZfTElORSkg
IT0gMDsgfQorICAgIHZvaWQgc2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KTsKKworICAgIGJv
b2wgaGFzTGVhZGluZ1NwYWNlKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgSEFTX0xFQURJTkdf
U1BBQ0UpICE9IDA7IH0KKyAgICB2b2lkIHNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKTsK
KworICAgIGJvb2wgZXhwYW5zaW9uRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBF
WFBBTlNJT05fRElTQUJMRUQpICE9IDA7IH0KKyAgICB2b2lkIHNldEV4cGFuc2lvbkRpc2FibGVk
KGJvb2wgZGlzYWJsZSk7CisKKyAgICBpbnQgdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7
CisgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CiB9
OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuKj4gVG9rZW5WZWN0b3I7Ci10eXBlZGVmIFRv
a2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBUb2tlbkl0ZXJhdG9yOworaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVy
biBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9r
ZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhz
KTsKK30KIAogZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91
dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKIAogfSAgLy8gbmFtZXBzYWNlIHBwCiAjZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwotCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzQ1IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIu
bCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXpl
ci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGlj
YWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgor
I2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZF
UlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVY
X1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZp
cnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmlj
IGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxl
eCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZp
bmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5
IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lP
Tl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlm
IHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICov
CisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4
X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3Qg
ZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBp
bnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyNl
bHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQg
ZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3Vp
bnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAh
IEM5OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhf
TUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5k
ZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQor
I2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAg
ICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhf
TUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZp
bmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJf
TUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYK
KyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUp
CisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAg
ICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJf
TUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVY
SU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2Ut
Y2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxz
ZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBk
ZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNF
X0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9f
Y3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25z
dAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5k
LW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5
IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdl
ciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0
aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVk
IGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9f
VUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUg
cG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlf
VFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKwor
LyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBi
ZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmlu
ZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5
eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVm
aW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+
eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNy
byByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUg
ZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVm
aW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSAr
IDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVl
IHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBz
dGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisg
Ki8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZ
WVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2
ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9P
Rl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0
IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFy
dCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisK
Ky8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpF
CisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBt
dXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRo
ZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVG
X1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVG
X1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlw
ZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKwor
I2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9G
SUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVT
U19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hl
ZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNz
KG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRl
eHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAg
WVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1
Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAor
CQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBc
CisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4
dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVm
aW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5k
aWYKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlf
aW5wdXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNo
YXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwor
CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisK
KwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVk
aW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
CisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkg
aXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkv
KiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBh
bmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1
c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBm
ZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhl
IGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2
ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9h
dF9ib2w7CisKKyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwor
ICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5
X2J1ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JV
RkZFUl9OT1JNQUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMg
WVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJl
YWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGls
bCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkg
KiBwb3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhl
IEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgp
KSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBv
aW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVS
X0VPRl9QRU5ESU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUgKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVz
IGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0
ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5z
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
KyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICpp
bnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlf
QlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lk
IHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lk
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9p
ZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9p
ZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxvYyAo
dm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAodm9p
ZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2Ny
ZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUp
IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRl
cmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRf
Ym9sKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpF
ICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9i
b2wgPSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUg
eXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlv
dXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlf
dHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlz
Y2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4g
aGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24g
LSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5
eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5
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
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBk
ZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9m
YXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdt
aXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
K3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2Vk
IHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmlu
ZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAg
ICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNl
OyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGls
ZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+
c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBp
bnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5M
b2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5M
b2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAx
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVm
aW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRy
YS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisjZGVmaW5lIElOSVRJQUwgMAorI2RlZmlu
ZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpUb2tlbml6ZXI6OkNvbnRl
eHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVy
LiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisgICAgLyogVXNlci1kZWZpbmVkLiBOb3Qg
dG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOworCisgICAg
LyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBu
b24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAg
ICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2su
ICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3Rh
Y2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNr
IGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9jaGFyOworICAgIGludCB5eV9uX2No
YXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgIGludCB5
eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7CisgICAgaW50IHl5X3N0YXJ0X3N0
YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3RhY2s7CisgICAgeXlfc3RhdGVfdHlwZSB5
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9z
OworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKKworICAg
IGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3JlX2ZsYWc7CisgICAgaW50IHl5X21vcmVf
bGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOworCisgICAgWVlMVFlQRSAqIHl5bGxvY19y
OworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5X2lu
aXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAvKiBUaGlzIG11c3QgZ28g
aGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICogZnJv
bSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5
Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2Nfcgor
ICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHBwbGV4X2lu
aXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsK
KworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlz
aWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50
IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfZGVidWcg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxh
ZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVz
ZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X2luICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCit2b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworaW50IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICpwcGdl
dF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2xpbmVubyAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCitZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICog
eXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKy8qIE1hY3JvcyBhZnRl
ciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGlu
CisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
I2Vsc2UKK2V4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgor
I2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5
IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlm
CisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmbmRlZiBZWV9O
T19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisjZWxzZQorc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1
cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZ
WV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0
IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisv
KiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQg
Y29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNI
TyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZW5kaWYKKworLyogR2V0cyBp
bnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFk
LCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYg
WVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJ
CWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytu
ICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQli
dWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkg
KSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7
IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwK
KwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYm
IGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7
IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7
IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlp
bik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRl
ciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisg
KiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0
aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVh
Y2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0
ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVz
IGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RB
UlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKwor
LyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVm
aW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikK
KyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJv
dG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVy
IC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisg
Ki8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorCitleHRlcm4g
aW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZ
UEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKyNkZWZpbmUgWVlfREVD
TCBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZ
TFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZ
X0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVs
ZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNp
Zm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisv
KiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9C
UkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVf
U0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9u
IHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlf
c3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlf
YnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKwor
ICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsK
KworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lm
ZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXln
LT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUg
Ki8KKworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0
ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsK
KwkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9CisJCQkJcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOworCQl9CisKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0K
KworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICov
CisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRl
eHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50
cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUg
Y3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNj
ZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19j
cG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQp
IHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0K
KwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgzICk7CisJCXl5X2NwID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZTsKKworeXlfZmluZF9hY3Rpb246CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5
eV9jdXJyZW50X3N0YXRlXTsKKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCitkb19hY3Rpb246
CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKwor
CQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8K
KwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9m
IFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwor
CQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rp
b247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCisvKiBCbG9jayBjb21t
ZW50ICovCisvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAq
LworLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorY2Fz
ZSAyOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihDT01NRU5UKTsgfQorCVlZX0JSRUFLCitjYXNl
IDM6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVMRV9TRVRVUAor
CisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxF
X1NFVFVQCit7ICsreXlsaW5lbm87IH0KKwlZWV9CUkVBSworY2FzZSA2OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElB
TCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAvLyAjIGlz
IG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMu
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRyYS0+
bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKK30K
KwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQor
CVlZX0JSRUFLCitjYXNlIDk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKK30KKwlZ
WV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisJ
WVlfQlJFQUsKKy8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElH
SVR9IG11c3QgYmUgYSBudW1iZXIuICovCisvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGlu
dGVnZXJzIGFuZCBmbG9hdHMuICovCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9O
VU1CRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lO
QzsKK30KKwlZWV9CUkVBSworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOwor
fQorCVlZX0JSRUFLCitjYXNlIDE0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOworfQor
CVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKwlZ
WV9CUkVBSworY2FzZSAxNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMTc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOworfQorCVlZX0JSRUFLCitj
YXNlIDE4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKwlZWV9CUkVBSworY2FzZSAx
OToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjA6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKK30KKwlZWV9CUkVBSworY2FzZSAyMToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfWE9SOworfQorCVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9PUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfQUREX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNDoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNToKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNjoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNzoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyODoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
Mjk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKwlZWV9CUkVBSwor
Y2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKwlZWV9CUkVB
SworY2FzZSAzMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKK30KKwlZWV9C
UkVBSworY2FzZSAzMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCVlZ
X0JSRUFLCitjYXNlIDMzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKwlZWV9CUkVBSworY2FzZSAz
NDoKK1lZX1JVTEVfU0VUVVAKK3sgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQorCVlZ
X0JSRUFLCitjYXNlIDM1OgorLyogcnVsZSAzNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NF
VFVQCit7CisgICAgKyt5eWxpbmVubzsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKKyAg
ICByZXR1cm4gJ1xuJzsKK30KKwlZWV9CUkVBSworY2FzZSAzNjoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46
OlBQX09USEVSOworfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nh
c2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgoreworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5v
dCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3Ig
RU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5w
dXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9j
OworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwor
ICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8g
V2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUK
KyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0g
c0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRl
eE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsK
KyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAg
ICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8s
IHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Cisg
ICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxF
X1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsK
KwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4g
Ki8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWct
Pnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9S
RV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JF
X1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2Fubmlu
ZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQg
dGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBh
dCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdl
IGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVG
RkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBk
byBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFu
IHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBp
bnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJl
IHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhl
IGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxy
ZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAo
c2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5k
LW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4g
aW5wdXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3
YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJ
CQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5
eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0
aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVz
ZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5
IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGlu
dG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkg
Ki8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3Rh
dGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRo
ZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJ
ZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQln
b3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7
CisKKwkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTog
YmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigp
IHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJ
ICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2Ug
ZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2Ug
cmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgor
CQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0
ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0K
KworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9
CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
KworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JF
X0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJ
ZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRj
aCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHBw
bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1
ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglF
T0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUg
c2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0g
ZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0
X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisK
KwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwg
ZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwor
CWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJ
eyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8K
KwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9
PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9C
LCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJu
IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0
Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQu
CisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8q
IFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0
byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJl
cl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0Zf
UEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRv
IHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJ
ZWxzZQorCQl7CisJCQlpbnQgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90
b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdy
b3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1
ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKworCQkJ
aW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+
eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJ
aW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8
PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVs
c2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFy
ICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXBw
cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3du
IGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYg
KQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQg
YnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVm
W3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJ
fQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJ
WVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3Rv
X21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7
CisJCX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVy
X3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5E
X09GX0ZJTEU7CisJCQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxz
ZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5E
SU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU47CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3Zl
KSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5k
IHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJ
eXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAo
eXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWctPnl5
X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKiB5
eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0Ig
Y2hhciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVf
dHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQor
CQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19V
SSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJ
CQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsK
KwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJl
bnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQl5eV9jID0g
eXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9
IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107
CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3Ry
YW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgor
ICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0
YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAo
eXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CXJlZ2lzdGVyIGludCB5eV9pc19qYW07CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVu
ZGluZyB1cG9uIG9wdGlvbnMuICovCisJcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2Nf
YnVmX3A7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkK
KwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOworCisJcmV0
dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05P
X0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFy
YWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRo
ZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRo
ZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55
eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlf
Y19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJ
CWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5
Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5u
ZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlz
IGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1
bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJ
ICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1
dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4K
KwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVP
Ql9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0
dXMuICovCisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRI
Uk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlm
ICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJaWYgKCAh
IHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOwor
I2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxz
ZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQlj
YXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMg
PSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBj
aGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICov
CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsK
K30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3
aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBB
IHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0
aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5w
dXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXsKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCX0KKworCXBwX2luaXRfYnVmZmVyKFlZX0NV
UlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVm
ZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfc3dpdGNo
X3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMg
ZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXBwcG9wX2J1ZmZlcl9zdGF0ZSgp
OworCSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXBwZW5z
dXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09
IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJ
eworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMg
c3dpdGNoIGR1cmluZworCSAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25s
eSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBj
YWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0Lgor
CSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGlj
IHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5
Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5
eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3M7CisJeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5w
dXRfZmlsZTsKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8q
KiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFy
YW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIg
YnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4K
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVh
dGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBh
bGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYg
KCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9j
cmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9j
aF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBi
ZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMu
CisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSAr
IDIgLHl5c2Nhbm5lciApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwli
LT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2Fu
bmVyKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBh
cmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2RlbGV0ZV9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlp
ZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8q
IE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCisJCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJcHBm
cmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWlu
aXRpYWxpemVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVk
IG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEg
cHByZXN0YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZm
ZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVy
KQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXBwX2ZsdXNoX2J1ZmZlcihiICx5eXNj
YW5uZXIpOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIg
PSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9i
dWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0
aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0
IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIg
IT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAg
ICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRl
cmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFs
bCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJl
IGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1
YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisK
KwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVm
ZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRo
ZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0
aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9i
dWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKQorCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1
c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMK
KyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBz
dGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0
YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lk
IHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisK
KwlwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMg
Y29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICov
CisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlm
IChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHBw
X3N3aXRjaF90b19idWZmZXIuICovCisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3Zl
cyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUg
bmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKwor
CXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID4gMCkKKwkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9C
VUZGRVIpIHsKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUg
c3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQg
bGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCWludCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWct
Pnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3Ig
MiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2ls
bCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJ
CSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworCQlu
dW1fdG9fYWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopcHBhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWct
Pnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0
KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVt
X3RvX2FsbG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJ
fQorCisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3Ig
YSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3Jv
dyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCAr
IGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJCQkJ
CW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJ
LCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNr
KCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZm
ZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVy
IGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0g
c2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxv
Y2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2Fu
X2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAg
ICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtz
aXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxl
YXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZF
Ul9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0g
MjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGIt
Pnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5w
dXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lz
X2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVy
ID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXBwX3N3aXRj
aF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVw
IHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0
byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBh
cmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVz
IHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHBwX3NjYW5f
Ynl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5
Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJldHVy
biBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisKKy8q
KiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBU
aGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBA
YSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBh
cmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBA
YSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJl
dHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50ICBf
eXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7
CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuOworCWludCBpOworICAgIAorCS8qIEdldCBtZW1v
cnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAq
LworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAseXlz
Y2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5
Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVz
X2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJ
YiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlf
RkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCS8qIEl0
J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQK
KwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MTsKKworCXJldHVybiBiOworfQorCisjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQorI2RlZmluZSBZ
WV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5
eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQpIGZw
cmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsK
K30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUu
ICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAor
CQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50
IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNz
X21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJ
CXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55
eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAn
XDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAw
ICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3Qg
bWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nh
bm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitZWV9F
WFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfbGluZW5v
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVO
VF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXlsaW5l
bm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfY29sdW1uICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZG
RVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXljb2x1bW47Cit9
CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRf
b3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8q
KiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVu
dCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisK
K2NoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMg
bmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhl
IGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRS
QV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5ZXh0
cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVy
LgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlm
IGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdp
dGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5bGluZW5vID0gbGluZV9u
dW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIGxpbmVf
bnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9p
ZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhp
c3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5
X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNj
YW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKK30KKworLyoqIFNldCB0
aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlu
cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1
ZmZlcgorICovCit2b2lkIHBwc2V0X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9CisKK3ZvaWQgcHBzZXRfb3V0IChGSUxF
ICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5b3V0ID0gb3V0X3N0
ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAg
cmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCAgYmRlYnVn
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsK
K30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KKworWVlT
VFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKK30KKwor
WVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJu
IHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5eWxsb2NfcGFy
YW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsK
K30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8KKworLyogcHBsZXhfaW5pdCBpcyBzcGVj
aWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCisgKiB0
aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIg
YXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxl
IHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgorICovCisKK2lu
dCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKKworeworICAgIGlmIChwdHJf
eXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJl
dHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxv
YyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKKworICAgIGlmICgqcHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdz
IGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisgICAg
bWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKKwor
ICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKK30KKworLyog
cHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBwcGxleF9pbml0
LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBzY2FubmVyIGFz
IHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQKKyAqIHRoaXMgaXMgYSAqcG9p
bnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGlzIGNhbGwg
KGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBhbHNvIG11c3Qg
aGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICogVGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBp
biB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgdG8gcHBhbGxvYyBpbgorICog
dGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHBwbGV4X2luaXRfZXh0cmEoWVlfRVhUUkFf
VFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkKKworeworICAg
IHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisKKyAgICBwcHNldF9leHRyYSAoeXlfdXNl
cl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBO
VUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0
cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7CisJCisgICAgaWYgKCpwdHJfeXlfZ2xv
YmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4cG9zZSBidWdz
IGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8K
KyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkp
OworICAgIAorICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFs
cyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyAp
OworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVu
dHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4
X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKi8KKworICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwor
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7CisgICAgeXlnLT55eV9jX2J1Zl9wID0g
KGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAwOworICAgIHl5Zy0+eXlfc3RhcnQgPSAw
OworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOworICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKKworLyog
RGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGlu
OworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gKEZJTEUgKikgMDsKKyAg
ICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJl
bmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiBw
cGxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogcHBsZXhfZGVzdHJv
eSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitp
bnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBQb3Ag
dGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlf
Q1VSUkVOVF9CVUZGRVIpeworCQlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5
eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJcHBwb3Bf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRz
ZWxmLiAqLworCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsKKwl5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25k
aXRpb24gc3RhY2suICovCisgICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNj
YW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBS
ZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNj
YW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHBwbGV4KCkgaXMgY2FsbGVkLCBpbml0aWFs
aXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRfZ2xvYmFscyggeXlzY2FubmVyKTsK
KworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25seSkuICovCisg
ICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7CisgICAgeXlzY2FubmVyID0gTlVM
TDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMu
CisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkg
KGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtp
XSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGlu
dCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJ
cmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsK
K30KKwordm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xs
b3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hh
ciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJp
YyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBB
TlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9p
bnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJ
ICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJuICh2b2lkICop
IHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQorCit2b2lkIHBwZnJlZSAodm9pZCAq
IHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyog
c2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5p
emVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRl
eHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVy
KCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10p
Cit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAw
KSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9
IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7
Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAgIC8v
IFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNybyB5
eWZpbGVuby4KKyAgICBwcHNldF9jb2x1bW4oZmlsZSxtSGFuZGxlKTsKK30KKwordm9pZCBUb2tl
bml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgcHBzZXRfbGluZW5vKGxpbmUs
bUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAg
IHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1ZSwmdG9rZW4tPmxvY2F0aW9uLG1IYW5k
bGUpOworICAgIHRva2VuLT5mbGFncyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGlu
ZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50
eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0Lmxl
YWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jv
b2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwp
ICYmIHBwbGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcHByZXN0YXJ0KDAsbUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYgKG1IYW5kbGUg
PT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHBsZXhfZGVzdHJveShtSGFuZGxlKTsK
KyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICAr
IHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUgIklucHV0Lmgi
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6IHB1YmxpYyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7CisgICAgICAgIERp
YWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsKKyAgICAgICAg
Ly8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxvY2F0aW9uIHNo
b3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6Om1SZWFkTG9j
IGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlmIHRleHQgaXMg
YnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAgICBJbnB1dDo6
TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsKKyAgICAgICAg
Ym9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAg
dm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50
IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9v
bCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQq
IG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8g
U2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitU
aGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXBy
b2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vz
c29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNj
eHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJV
TiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRo
aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBF
RElUIQorfQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25v
c3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8v
IFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24u
CisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNl
bmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VM
b2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0
byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4K
KworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJh
LT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlf
VVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9
ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6
SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBc
CisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQt
Pmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBz
Y2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwK
KyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5Zmls
ZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9j
LT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJl
c3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBt
YXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0
aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCislb3B0
aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRl
eHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVOVElGSUVSICBb
X2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6
Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFMX0NPTlNUQU5U
ICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsK
KworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1b
Ky1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8
KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisiLy8iW15cclxu
XSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVz
dCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxh
Y2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQorPENP
TU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5FfSB7ICsreXls
aW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMgb25seSB2YWxp
ZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICB5eWx2
YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQg
PyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOworfQorCit7SURFTlRJ
RklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NP
TlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCisoe0RJ
R0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFS
VH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMg
d2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKyAgICAvKiBS
dWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCisoe0RJR0lU
fStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVN
QkVSOworfQorCisiKysiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorIi0tIiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKyI8
PCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9MRUZUOworfQorIj4+IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorIjw9IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0xFOworfQorIj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOworfQorIj09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorIiE9IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX05FOworfQorIiYmIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKK30KKyJeXiIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9
CisifHwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfT1I7Cit9CisiKz0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjsKK30KKyItPSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9TVUJfQVNTSUdOOworfQorIio9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisiLz0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfRElWX0FTU0lHTjsKK30KKyIlPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorIjw8
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKyI+Pj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwor
fQorIiY9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisiXj0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsK
K30KKyJ8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisKK3tQVU5DVFVBVE9SfSB7CisgICAgeXls
dmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCitb
IFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisKK3tORVdMSU5F
fSB7CisgICAgKyt5eWxpbmVubzsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKKyAgICBy
ZXR1cm4gJ1xuJzsKK30KKworLiB7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKworPCo+PDxFT0Y+PiB7CisgICAg
Ly8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAv
LyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2Fu
TG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAs
IGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhN
YXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFy
ZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAg
ICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7Cisg
ICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5
bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAg
IHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsK
KyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVP
Rl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpT
b3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKworJSUK
KworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRp
YWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAgIGRlc3Ryb3lT
Y2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hh
ciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBpZiAoY291bnQg
PCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkp
IHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmlu
ZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9pZCBUb2tlbml6
ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNlIGNvbHVtbiBudW1i
ZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgorICAgIHl5c2V0
X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1i
ZXIoaW50IGxpbmUpCit7CisgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOworfQorCit2
b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0b2tlbi0+dHlwZSA9IHl5
bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOworICAgIHRva2Vu
LT5mbGFncyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5l
U3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisK
KyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7Cisg
ICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjpp
bml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRf
ZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tl
bml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAg
ICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUg
PSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5l
cmF0ZV9wYXJzZXIuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtpbmcgY29weSkKQEAgLTEsMjcgKzEsMjYg
QEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0jIEdlbmVyYXRlcyBHTFNMIEVTIHBy
ZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBhbmQgcHBfdGFiLmNwcAorIyBHZW5l
cmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgogCiBydW5f
ZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1dF9zb3VyY2U9JHNj
cmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3Nv
dXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0k
b3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5fYmlzb24oKQogewotaW5wdXRfZmls
ZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQxX3RhYi5oCi1v
dXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0tbm8tbGluZXMgLS1z
a2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0PSRvdXRwdXRf
c291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291
cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0t
b3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHNjcmlwdF9kaXI9JChkaXJu
YW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggcHAKLXJ1bl9iaXNv
biBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jpc29uIEV4cHJl
c3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2Vu
ZXJhdGVfcGFyc2VyLnNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHAubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNz
b3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBH
cmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5
LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2Vu
ZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZp
bGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEK
LX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQu
aCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAg
XAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAg
ICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgw
KTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3Vs
dCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6
c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0lfQot
Ci0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24geXls
aW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVvcHRpb24gc3Rh
Y2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0cmEtdHlwZT0icHA6OkNvbnRleHQq
IgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAgICAgXntIU1BBQ0V9KiN7SFNQQUNFfSoK
LUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7
fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKgot
T0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hY
XVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAgICAgICBbMC05XQotRVhQT05FTlRfUEFS
VCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9
KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0KLXtIQVNIfSB7IHJldHVybiBIQVNI
OyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS9bIFx0XG5dIHsKLSAgICB5
eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1
cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9
LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci17SEFTSH11bmRlZntIU1BBQ0V9
KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlmIHsgcmV0dXJuIEhBU0hfSUY7IH0K
LXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLXtIQVNIfWlmbmRlZiB7IHJldHVy
biBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVybiBIQVNIX0VMU0U7IH0KLXtIQVNI
fWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1lbmRpZiB7IHJldHVybiBIQVNIX0VO
RElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsgfQotCi17SEFTSH1lcnJvciB7IHJl
dHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyByZXR1cm4gSEFTSF9QUkFHTUE7IH0K
LXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQote0hBU0h9dmVyc2lv
biB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxpbmUgeyByZXR1cm4gSEFTSF9MSU5F
OyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5n
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLQote0RFQ0lNQUxf
Q09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAg
eXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1
cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJ
T05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3
IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7
Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRbMF07IH0KLQotWyBcdFx2XGZdKyB7
IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewotICAgICsreXlsaW5lbm87IHl5Y29s
dW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi08Kj48PEVPRj4+ICAgICB7IHl5
dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29u
c3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMgb2Yg
dGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAgLy8gV2UganVz
dCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+
IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpzdHJpbmcqIG5h
bWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICB7
Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQnKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBpICsgMSwgbGVu
IC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNT
RVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1pbnQg
Q29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5y
ZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAgICAgICAgICAg
KG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0gICAgICAgICAg
IChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0gMCwgZmlsZSA9
IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24oeXlnZXRfbGluZW5vKG1MZXhl
ciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7
Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZp
bGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1ZiwgbWF4U2l6
ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvclVu
ZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBv
cnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1ib29s
IENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBOVUxMKTsKLQot
ICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4ZXIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIpOwot
Ci0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwLnkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVw
cm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEK
LQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5s
ZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVm
aXg9InBwIgotJWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCogY29udGV4dH0K
LQotJXVuaW9uIHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBw
cDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLQotJXsKLWV4
dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhl
cik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAg
ICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRl
eHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFs
QmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0ggSEFTSF9VTkRF
RgotJXRva2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VMU0UgSEFTSF9F
TElGIEhBU0hfRU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9QUkFHTUEgSEFT
SF9FWFRFTlNJT04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFsPiBIQVNIX0RF
RklORV9PQkogSEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09OU1RBTlQgRkxP
QVRfQ09OU1RBTlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0ldHlwZSA8dHZh
bD4gY29uZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1ldGVyX2xpc3Qg
cmVwbGFjZW1lbnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUlCi0KLWlucHV0
Ci0gICAgOiAvKiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5lCi0gICAgOiB0
ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAgICA6ICdcbicK
LSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQg
bWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgp
OwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwgJDEtPmVuZCgp
KTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5lCi0gICAgOiBI
QVNIICdcbicKLSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0ICdcbicgewot
ICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtU
eXBlT2JqLCAkMSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5FX0ZVTkMgJygn
IHBhcmFtZXRlcl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250
ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgJDEs
ICQzLCAkNSk7Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdcbicgewotICAg
ICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGIGNv
bmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRl
eHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVGIElERU5USUZJ
RVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsIGNvbnRleHQt
PmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYgSURFTlRJRklF
UiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNvbnRleHQt
PmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNvbmRpdGlvbmFs
X2xpc3QgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAgIH0KLSAgICB8
IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7
Ci0gICAgfQotICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdNQSAnXG4nCi0g
ICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xuJwotICAgIHwg
SEFTSF9MSU5FICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyogZW1wdHkgKi8g
eyAkJCA9IE5VTEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xpc3QKLSAgICA6
IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAg
JCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKG5ldyBwcDo6
VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0gICAgfCBwYXJh
bWV0ZXJfbGlzdCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQk
LT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMykp
OwotICAgIH0KLQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxfdG9rZW4gewot
ICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2so
JDEpOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxfdG9rZW4gewot
ICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0K
LXRva2VuX2xpc3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVj
dG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0b2tlbl9saXN0
IHRva2VuIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0g
ICAgfQotOwotCi1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVOVElGSUVSIHsK
LSAgICB9Ci0gICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAgfQotICAgIHwg
dG9rZW4KLTsKLQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6
OlRva2VuKEAxLmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJTlRfQ09OU1RB
TlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSU5UX0NPTlNU
QU5ULCAkMSk7Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5l
dyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0g
ICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xp
bmUsIElERU5USUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAgOiAnWycgeyAk
JCA9ICdbJzsgfQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7ICQkID0gJzwn
OyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAnKCc7IH0KLSAg
ICB8ICcpJyB7ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQotICAgIHwgJ30n
IHsgJCQgPSAnfSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAnKycgeyAkJCA9
ICcrJzsgfQotICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQkID0gJy8nOyB9
Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7IH0KLSAgICB8
ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAgIHwgJyYnIHsg
JCQgPSAnJic7IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScgeyAkJCA9ICc9
JzsgfQotICAgIHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0gJzonOyB9Ci0g
ICAgfCAnOycgeyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0KLSAgICB8ICc/
JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwg
cHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBw
dXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24p
Ci17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkK
LXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5
ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7
Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9s
ZXguY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubCIK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICJjb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0
IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVm
aW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmlu
ZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJ
T04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVU
QQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9y
IGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFk
ZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVh
ZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRl
ZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGlu
dHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZp
bmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQot
LyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGlu
ZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZv
ciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUg
X19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10
eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7
Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3Vp
bnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3Qg
ZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90Owot
dHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90
OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50
MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMu
ICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0x
MjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAg
ICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQz
Ml9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhf
TUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRl
ZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5k
aWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIx
NDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAg
ICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBV
SU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01B
WAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgot
Ci0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRo
ZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZ
X1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVp
cmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENf
XykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBkZWZpbmVkIChfX1NURENf
XykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlfVVNFX0NPTlNU
Ci0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QKLSNlbmRpZgot
Ci0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9OVUxMIDAKLQot
LyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8g
YW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRo
ZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBp
dCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJsZSBjYXN0Lgot
ICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hh
cikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlf
U0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBlZGVmIHZvaWQq
IHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1
cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJh
bnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmluZSB5eW91dCB5
eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2RlZmluZSB5eWxl
bmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgotI2RlZmluZSB5
eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCi0jZGVmaW5l
IHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKLSNkZWZp
bmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRlciBhIHN0YXJ0
IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIs
Ci0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMg
YnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNkZWZpbmUgQkVH
SU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0
YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKLSAqIHRvIEJF
R0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4
Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFy
dCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rpb24gbnVtYmVy
IGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmluZSBZWV9TVEFU
RV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0vKiBTcGVjaWFs
IGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwotI2RlZmlu
ZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2RlZmluZSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAq
LwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAotI2VuZGlm
Ci0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3Rh
dGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZpbmUgWVlfU1RB
VEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkp
Ci0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVG
RkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSNk
ZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAy
Ci0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVs
ZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAgKiAgICAgICBhY2Nlc3Mg
dG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywg
aXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwg
eXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAgICBPbmUgb2J2aW91cyBz
b2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3
Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nh
bm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBh
cyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgotICAgICAqLwot
ICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAgIGRvIHsgXAotICAg
ICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5
bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXls
XSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKLSAgICAg
ICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBt
YXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwotI2RlZmluZSB5
eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2Fy
ZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0g
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIFlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2Jw
ICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAgICAgIFlZX0RPX0JFRk9S
RV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAgICAgICB9IFwKLSAgICB3
aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0
ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKLSNlbmRpZgot
Ci0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlfU1RSVUNUX1lZ
X0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAgIHsKLSAgICBGSUxFICp5
eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyogaW5wdXQgYnVm
ZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBp
biBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVz
LCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICov
Ci0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVtYmVyIG9mIGNoYXJhY3Rl
cnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAgICAgKiBjaGFyYWN0
ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAgLyogV2hldGhlciB3ZSAi
b3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFu
ZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0g
ICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOwotCi0g
ICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBz
bywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdh
bnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJl
IHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNoIG5ld2xpbmUuCi0gICAg
ICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAgICAqIElmIHNv
LCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQot
ICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwotCi0gICAgaW50IHl5X2Jz
X2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNfY29sdW1uOyAv
Kio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8g
ZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0
LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAgIGludCB5eV9idWZmZXJf
c3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9S
TUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZ
X0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSBy
ZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICog
c3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9m
Ci0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0
dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICog
KHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5n
IGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAg
ICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAgICB9OwotI2VuZGlmIC8q
ICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZv
ciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICogZnV0dXJlIHdlIHdh
bnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5l
ciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4K
LSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5
X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQot
Ci0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0
IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFs
dWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQot
Ci12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChG
SUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZGVsZXRl
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBw
cF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5lIFlZX0ZMVVNI
X0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKLQot
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAo
eXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NU
QVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNk
ZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUgeXlfc2V0X2lu
dGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAg
IHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0g
XAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19p
bnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAotICAg
IHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0la
RSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAq
LwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVk
ZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwot
Ci0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0
ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5
c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVu
dCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRp
bmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FD
VElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxlbmcgPSAoc2l6
ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsg
XAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKLQot
I2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAyNAotLyog
VGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAgYnV0IGl0cyBwcmVz
ZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwotICAgIHsKLSAgICBm
bGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0gICAgfTsK
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1XSA9Ci0gICAgeyAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIsICAgMjAsICAgMjAsICAg
MTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgMjEsICAgMTksICAgMTks
ICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcsICAgMTcsICAgMjEsICAg
IDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMTks
ICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0g
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgIDksICAgIDgsICAgIDAs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAsICAgIDAsICAgIDAsICAg
MTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMsICAgIDQsICAgIDAsICAg
IDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAgICAgMywgICAgMCwgICAx
NCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAgIDEsICAgIDcsCi0gICAg
ICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUsICAgMTAsICAgMTEsICAg
MTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAgMTIsICAgIDUs
ICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0gICAgICAgIDUsICAgIDEs
ICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMsICAgMTgsCi0KLSAgICAg
ICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwgICAyMywgICAyNCwgICAy
NSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAzMiwg
ICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAg
fSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzM0XSA9Ci0gICAgeyAg
IDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDEs
ICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDcsICAg
IDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcs
ICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDcsICAgIDcKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTExXSA9Ci0gICAg
eyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEsICAxODUsICAxODUsICAg
MjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAgNzEsICAgMTIsICAgMzIs
ICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxNjIsICAg
NjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAxNTcsICAxNTAsICAxNTIs
ICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQsCi0gICAgICAgNjIsICAx
NTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAxMzksICAgNzYsCi0gICAg
ICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUsICAxNDEsICAxNDAsICAx
NDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAxMjcsICAxODUsICAxODUs
ICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUsICAxMjIsICAxMjUsICAx
MjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAxODUsICAxMjAsICAxMTMs
ICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUsICAxODUsICAxMDUsICAg
NzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0KLSAgICAgIDE4NSwgIDEw
MywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEyNiwgIDEzMgotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzExMV0gPQotICAgIHsgICAw
LAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA3LCAgMTA3
LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2LCAgMTA2LCAgMTA0LCAg
IDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMTAsICAx
MDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0KLSAgICB7ICAgMCwKLSAg
ICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAgNywgICAgNywgICAgOCwg
ICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgIDEwNCwgICAx
MiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAxNCwgICAgNywgICAgNywg
ICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgIDEwNCwgIDEw
MywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAyNSwgICAyMCwgICAxNSwg
ICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwKLSAgICAgICAzNSwgICAz
NiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICA5OSwKLSAgICAg
ICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwgICAxNSwgICA0MSwgICAy
NiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAzNywgICAzNywgICA1MCwg
ICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwgICA1OSwgICA1MSwgICA1
MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAzMCwgICAzMSwgICA1MSwg
ICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3LCAgIDMzLCAgIDM0LCAg
MTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAotICAgICAgIDExLCAgIDEx
LCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAg
IDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDk4LCAgIDkzLCAgIDky
LAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAg
MTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg1LCAgIDg0
LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAg
IDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAgIDY5LCAgIDY4LCAgIDY3
LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAgICAgIDU4LCAgIDU3LCAg
IDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDQ1LAotICAgICAgIDQw
LCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgNSwg
ICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwKLSAgICAgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAg
ICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwgICAgOSwgICAgOSwgICAg
OSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAxNiwgICAgOSwgICAxNywg
ICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwgICAyMCwgICAyMCwgICAz
NiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAxMCwgICAxMCwgICAxMCwg
ICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwgICAxMCwgICAxNCwgICAy
OSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwg
ICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwgICAxNCwKLSAgICAgICA0
MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAxNCwgICA5OCwgICA5OCwK
LQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAyLCAgIDkzLCAgIDkwLCAg
IDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1
LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3LCAgMTA3LCAgMTA4LCAg
MTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAgMTA5LCAgMTA5LCAgMTEw
LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAgICAgIDgyLCAgIDc5LCAg
IDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAgIDcwLAotICAgICAgIDY5
LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYwLCAgIDU5LCAgIDU4LAot
ICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3
LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5LCAgIDM0LCAgIDMzLCAg
IDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAgICAzLCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotLyog
VGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzI0XSA9Ci0gICAg
eyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVudCBiZWhpbmQg
dGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVD
VCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0
X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVj
dGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4
IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9z
b2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJ
RlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSov
Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNp
bmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAg
ICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXlj
b2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQot
I2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5
ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5n
KiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSNkZWZpbmUg
SU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29udGV4dCoKLQotLyogSG9s
ZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3Qg
eXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZs
ZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBh
cmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQg
c2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9i
dWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZ
WV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25fY2hhcnM7Ci0gICAgaW50
IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAg
aW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAg
aW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0g
ICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQg
eXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0
X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZ
WVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAv
KiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2Ug
WVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1
dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgot
ICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgcHBs
ZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlf
RVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3Nv
ciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBsZXhfZGVzdHJv
eSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBz
ZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBn
ZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3RleHQgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
dm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQg
Y2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24g
MS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4
dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJu
IGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lm
bmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNv
bnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZ
X05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNp
ZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRp
ZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCBuZXdfc3Rh
dGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0aWMgaW50IHl5X3RvcF9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8g
c2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNk
ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0
aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYg
RUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5n
IG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVm
aW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8q
IEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0j
aWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwK
LSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBc
Ci0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBpbnQgbjsgXAot
ICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAgICAgICAgICAg
KGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAgICAgICAg
ICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4nICkgXAotICAg
ICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gRU9GICYm
IGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBp
biBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47IFwKLSAgICAg
ICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0wOyBcCi0gICAg
ICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAm
JiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgaWYoIGVycm5v
ICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgICAg
ICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGVycm5vPTA7
IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAg
ICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3Jy
ZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2Fu
dCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNl
Ci0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1l
bnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0
dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFy
dC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IK
LSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZh
dGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZWV9GQVRBTF9F
UlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotLyog
ZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KLQot
LyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNv
IHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0jaWZuZGVmIFlZ
X0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCBwcGxleCBcCi0g
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwK
LSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9j
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNMICovCi0KLS8q
IENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4
dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVmIFlZX1VTRVJf
QUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29kZSBleGVjdXRl
ZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsKLSNkZWZpbmUg
WVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBp
ZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5nIC0gMV0gPT0gJ1xuJyk7
IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3
aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotICAgIHJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCwg
Knl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFsID0geXlsdmFs
X3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0gICAgaWYgKCAheXlnLT55
eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYg
WVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0gICAgICAgIGlm
ICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyog
Zmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlpbiApCi0gICAgICAgICAg
ICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAgICAgIHl5
b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLSAg
ICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgcHBfY3JlYXRlX2J1
ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIH0KLQotICAgIHdoaWxl
ICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0gICAg
ICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAgLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwot
Ci0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9m
IHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwot
ICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwoteXlf
bWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAgICAgICAgIGlm
ICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQg
aW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5
eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxl
ICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0g
eXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJ
T047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxl
X2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
eXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0g
ICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAg
fXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotICAgICAgICBzd2l0Y2gg
KCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAg
ICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAvKiB1bmRvIHRo
ZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAgICp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNh
c2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0
IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1h
Y3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX09CSjsKLX0K
LSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVu
ZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlf
Y3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8K
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0KLSAgICBZWV9C
UkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9VTkRFRjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZERUY7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9J
Rk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
SEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExOgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1ZFUlNJT047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfTElO
RTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElE
RU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDIw
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9T
RVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0
WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLXsgeXl0
ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAotRUNI
TzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7
Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9C
IGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkg
KHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZm
ZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAg
IGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JV
RkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJs
ZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVz
dCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAq
IHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICog
Y29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAg
ICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UK
LSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3Nz
aWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBu
ZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25f
Y2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9m
IHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAg
ICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0
ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0Ig
dG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3
aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAg
ICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxs
eSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQot
ICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dl
dF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdl
J3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNp
dGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19z
dGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3Nz
aWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8g
YnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2ls
bCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25l
eHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVy
KTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsK
LQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5
X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAg
ICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7
Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FD
VF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCBw
cHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAg
ICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAg
ICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAg
ICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAg
ICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAg
ICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAg
ICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZ
X1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9u
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxF
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAg
ICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAg
ICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAg
ICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAg
ICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5
eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwot
ICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0g
ICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8g
YWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAg
ICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8qIGVuZCBvZiBwcGxleCAq
LwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIK
LSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9B
Q1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nh
bm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVu
ZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwotICAgIGludCBy
ZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5k
IG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwg
dGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVP
Qiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdl
IG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0gICAgICAgICAgICAg
KiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FD
VF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAvKiBUcnkgdG8g
cmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3Rh
cnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1i
ZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihzb3VyY2UrKyk7Ci0KLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBu
b3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAgKiBqdXN0IGZvcmNlIGFu
IEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29t
IGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAgICAvKiBqdXN0IGEgc2hv
cnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAgIFlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1
Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGIt
Pnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdfc2l6ZSA9IGItPnl5X2J1
Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAg
ICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9
IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQotICAgICAgICAg
ICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotICAgICAg
ICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9z
aXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8K
LSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAgICBpZiAoICEg
Yi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAg
ICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsK
LQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfdG9f
bW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90b19yZWFkID4g
WVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JFQURfQlVG
X1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAgICAgIFlZX0lO
UFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3Zl
XSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7
Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkK
LSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxF
OwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElO
RzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAgICByZXRfdmFs
ID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9
IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAx
KTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAq
KSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYs
bmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAg
eXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4g
cmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBq
dXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0YXRpYyB5eV9z
dGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3Rl
ciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsK
LSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0gICAgZm9yICggeXlfY3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7
ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgq
eXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAgICBpZiAoIHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgfQot
ICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAg
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsK
LX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0
aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0ZSA9IHl5X3Ry
eV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRo
aXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdp
c3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAgIHJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAg
ICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAg
ICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAgICAgICB5eV9jdXJyZW50
X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
eXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQotICAgIHJldHVybiB5eV9p
c19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19JTlBVVAot
I2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Agbm93IHBvaW50
cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAgKiBJZiB0aGlz
IG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0gICAgICAg
ICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZm
ZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAg
ICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5eWctPnl5X2Nf
YnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyogbmVlZCBtb3Jl
IGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAg
ICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotICAgICAg
ICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotICAgICAgICAg
ICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAgICAgICAgICAg
ICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAgICAgICAgICAg
ICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAgICAgICAgICAg
ICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAgICAgICAgKi8K
LQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotICAgICAg
ICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9F
TkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSNpZmRl
ZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBjID0g
Kih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hh
cidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4
dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0gICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9PSAnXG4nKTsKLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkKLSAgICAgICAgICAgCi0g
ICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07
Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0K
LS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICog
QHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVz
ZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHBy
ZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsK
LSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxl
ICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQot
Ci0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyog
VE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBi
b2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAg
ICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotICAgIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24g
Zm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0g
eXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRo
aXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0
aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdy
YXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdvIGFoZWFkIGFuZCBhbHdh
eXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3Ag
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hh
ciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBh
biBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4K
LSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4g
aW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KLSAq
LwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGlu
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsK
LSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVy
KCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAgICAvKiB5eV9jaF9idWYg
aGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNl
Ci0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0g
ICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6
ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVy
KCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHBwX2luaXRfYnVm
ZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwotfQotCi0vKiogRGVzdHJv
eSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0
ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBw
b3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZF
Ul9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHBw
ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0gICAgcHBmcmVlKCh2
b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxp
emVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUg
dGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgcHByZXN0
YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgIChZ
WV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotCi17
Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNoX2J1ZmZlcihiICx5eXNj
YW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlfZmlsbF9i
dWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBf
aW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQo
KSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdl
IGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAg
aWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAx
OwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9p
c19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBE
aXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBV
VCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1
c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsKLQotICAgIC8qIFdlIGFs
d2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2Vz
Ci0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNl
Y29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGIt
Pnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZb
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9idWZfcG9zID0gJmItPnl5
X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0
YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIg
KQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1
c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMK
LSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBz
dGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0
YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lk
IHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotICAgIC8q
IFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQg
aW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotICAgIC8q
IGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAgcHBfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
aWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0g
KiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwb3Bf
YnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICghWVlfQ1VSUkVO
VF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
TlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15
eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsK
LSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19Ci0KLS8qIEFsbG9jYXRl
cyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBm
b3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1fdG9fYWxsb2M7Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0g
ICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAgIC8qIEZpcnN0IGFsbG9j
YXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlz
Ci0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5z
dGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRo
ZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAg
ICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBh
bGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayAp
Ci0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBw
cGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFy
ZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXplID0gOCAvKiBh
cmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9IHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAg
ICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCki
ICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAgICAgICAgbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBn
cm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KLX0KLQotLyoqIFNl
dHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1z
cGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIg
YnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVy
IGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0g
ICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0In
cy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBh
bGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAg
aWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplIC0g
MjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAgIGItPnl5X2J1Zl9wb3Mg
PSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAwOwotICAg
IGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6
ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+eXlfYXRfYm9sID0gMTsK
LSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZ
X0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwot
Ci0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZy
b20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVk
IHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICog
QG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1
ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgp
IHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0
ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRl
cyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNoYXIgKmJ1ZjsKLSAg
ICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBHZXQgbWVtb3J5IGZvciBm
dWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLSAgICBu
ID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nh
bm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICBmb3IgKCBpID0g
MDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXlieXRlc1tpXTsK
LQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVy
KTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBp
biBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRo
aXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICogYXdheSB3aGVuIHdlJ3Jl
IGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICByZXR1
cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAgbmV3X3N0YXRl
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+eXlfc3RhcnRfc3RhY2tf
cHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgIHl5
X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICs9
IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0geXlnLT55eV9zdGFydF9z
dGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHBh
bGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
eXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2b2lkICopIHl5Zy0+eXlf
c3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGlmICggISB5eWct
Pnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIG1l
bW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwotICAgICAgICB9Ci0KLSAg
ICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyKytdID0gWVlfU1RB
UlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcG9w
X3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIC0teXlnLT55eV9zdGFy
dF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJzdGFydC1jb25kaXRp
b24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55eV9zdGFydF9zdGFja1t5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGljIGludCB5eV90b3Bfc3Rh
dGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWctPnl5X3N0YXJ0X3N0
YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNpZm5kZWYgWVlfRVhJVF9G
QUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGljIHZvaWQg
eXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4
aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3
b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxl
c3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBv
ZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9
IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAg
ICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5
X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZf
cCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAg
ICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBm
dW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRlZmlu
ZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAg
ICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4g
bnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWlu
dCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X2luICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdldCB0
aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2Vu
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdl
dF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsZW5nOwotfQot
Ci0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNlci1kZWZpbmVk
IGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgotICogQHBh
cmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2Fu
bmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQg
cHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8qKiBTZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2xpbmVubyAoaW50
ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogbGlu
ZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBw
c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0g
ICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBjb2x1
bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlm
IGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdp
dGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1uID0gY29sdW1u
X25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2Fy
ZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0ciBBIHJlYWRh
YmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5f
c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3RyIDsKLX0KLQot
dm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQotdm9pZCBwcHNl
dF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5X2Zs
ZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwg
YW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBF
ICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlsdmFsID0g
eXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9pZCBwcHNldF9sbG9jIChZ
WUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXls
bG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQSSAqLwotCi0v
KiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0
c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNu
J3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRoYXQncyB3aHkg
d2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91
ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxz
KQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCAp
OwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBF
Tk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNldHRpbmcgdG8g
MHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZv
ciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0
cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlf
Z2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlv
bmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVudGlvbiBvZiB0
YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhh
dAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxs
b2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlz
IGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0gKiBUaGUg
dXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJs
ZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1pbnQgcHBsZXhf
aW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5
X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKLQotICAg
IHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwotCi0gICAgaWYg
KHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5f
dCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsK
LSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9
IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNldHRp
bmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZl
IGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgw
MCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0cmEgKHl5X3Vz
ZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5pdF9n
bG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9i
YWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRo
ZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBo
ZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
MDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5pdCA9
IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0
ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55eV9z
dGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVmIFlZ
X1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxzZQot
ICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRpZgot
Ci0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ug
d2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwotICAgIHJldHVy
biAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9u
LXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVh
Y2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHBw
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBwcHBvcF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYu
ICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNv
bmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5
c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKLQotICAgIC8q
IFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQg
c2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRp
YWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIp
OwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8K
LSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBO
VUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5l
cy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNw
eSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSAp
Ci0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RS
TEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBz
W25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lk
ICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
cmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJlYWxsb2MgICh2
b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJz
LCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQg
d29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysr
IGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUg
dG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0
aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikg
cmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgcHBmcmVlICh2b2lkICog
cHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAg
IC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZ
VEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1hY3JvTmFtZShj
b25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBpcyBv
ZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAgICAvLyBXZSBq
dXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0ciAmJiAobGVu
ID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6OnN0cmluZyog
bmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKQotICAg
IHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdcdCcpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciArIGkgKyAxLCBs
ZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBB
U1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLWlu
dCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQg
bnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgotICAgICAgICAg
ICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYKLSAgICAgICAg
ICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUgPSAwLCBmaWxl
ID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihwcGdldF9saW5lbm8obUxl
eGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3RyaW5nSW5kZXgo
KTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRpb24obGluZSwg
ZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNp
emUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JV
bmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVw
b3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9v
bCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0K
LSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlcik7Ci0K
LSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAko
cmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcyICsw
LDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0v
KiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBp
biBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAw
MiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVj
aWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5z
Ci0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmli
dXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBz
a2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tl
bGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAg
dGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1v
dmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxl
dG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5z
ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMg
c3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJp
c29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hh
cmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJz
ZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91
bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBu
YW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFi
bGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4K
LSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUg
ZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBu
b3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyog
SWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29u
IHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0
b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJl
IHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAq
LwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBh
bmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUg
eXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBw
cGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0j
ZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0KLS8qIFRva2Vu
cy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQRQotICAgLyog
UHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3Ro
ZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51bSB5eXRva2Vu
dHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTksCi0gICAgIEhB
U0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hfSUZOREVGID0g
MjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2NCwKLSAgICAg
SEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFTSF9FUlJPUiA9
IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5TSU9OID0gMjY5
LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3MSwKLSAgICAg
SEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0gMjczLAotICAg
ICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1LAotICAgICBJ
REVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBI
QVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lGIDI2MAotI2Rl
ZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNkZWZpbmUgSEFT
SF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hfRU5ESUYgMjY1
Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0jZGVmaW5lIEhB
U0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZpbmUgSEFTSF9W
RVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hfREVGSU5FX09C
SiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5UX0NPTlNUQU5U
IDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJRklFUiAyNzYK
LQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
Ci0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBn
ZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNsdWRlICJDb250
ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQotI2RlZmluZSBZ
WURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0j
IGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1l
c3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJC
T1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1Jf
VkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNp
Zm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQot
I2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10
eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6c3RyaW5n
KiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3IqIHRsaXN0
OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmlu
ZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0j
IGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklB
TCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxUWVBF
X0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9saW5l
OwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9jb2x1
bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7
IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMg
ZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5IHRoZSBzZWNv
bmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGludCB5eWxleChZ
WVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lk
IHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1z
dGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9v
bCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4
dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYg
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
fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmlu
ZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9I
IDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZ
WU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFs
bG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBl
bmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUK
LSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRp
ZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwot
Ci0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3Bs
dXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVf
SVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZ
WVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25l
ZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9p
bnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwotfTsKLQotLyog
VGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5k
IHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5p
b24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91
Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50
MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAgICAgICsgMiAq
IFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00g
dG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAq
LwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNf
XwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5f
bWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0j
ICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAgZG8gICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZU0laRV9U
IHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5
eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYK
LSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRo
ZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0la
RSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFj
aywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFk
dmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAot
ICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5
bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5T
dGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sgPSAmeXlwdHIt
PlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tz
aXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZWUlEICgwKSkK
LQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlv
biBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4
IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlOVE9LRU5TIC0t
IE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3Ci0vKiBZWU5O
VFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMTIKLS8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA2Mgot
LyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAg
OTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVz
cG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlN
QVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNs
YXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24g
c3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDIy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICA0Mywg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAgIDIzLCAgICAy
NCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0NiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAgMzgsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAgIDMxLCAgICA0
MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJI
U1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZ
TiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9
Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAgIDM4LCAgICA0
MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIsICAgIDY1LCAg
ICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwgICAgODMsCi0g
ICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEwMywgICAxMDUs
ICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAgIDExOSwgICAx
MjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMzLCAgIDEzNSwg
ICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDksCi0gICAgIDE1
MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qg
b2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10g
PQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0OSwgICAgLTEs
ICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAgICA1NSwgICAg
MjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUyLCAgICAyMiwg
ICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIsICAgIC0xLAot
ICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAgMjIsICAgIC0x
LCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwgICAgMjIsICAg
IC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAyMiwgICAgLTEs
ICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEzLAotICAgICAg
MjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAgIC0xLCAgICAx
NiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDIxLCAg
ICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAgLTEsICAgIDU0
LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAgICAgLTEsICAg
IDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAgICAtMSwgICAg
NTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIwLCAgICAtMSwg
ICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAt
MSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEsICAgIDMwLCAg
ICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsCi0g
ICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgs
ICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAg
NDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1LCAgICAtMSwg
ICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlOXSAtLSBzb3Vy
Y2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYzLCAgICA2Mywg
ICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUsCi0gICAgICA4
OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTEw
LCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwgICAxMjIsICAg
MTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1NSwgICAxNTcs
ICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAgIDE3OSwgICAx
ODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4
OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQsICAgMTk1LCAg
IDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsKLSNlbmRpZgot
Ci0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlU
TkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0u
Ci0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBu
b250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17
Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNIX1VOREVGIiwg
IkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNIX0VMU0UiLCAi
SEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VSUk9SIiwgIkhB
U0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0gICJIQVNIX0xJ
TkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5UX0NPTlNUQU5U
IiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAiJygnIiwgIicp
JyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIsICInfSciLCAi
Jy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14nIiwgIid8JyIs
ICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyciLAotICAiJGFj
Y2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xpbmUiLAotICAi
cmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25hbF9saXN0Iiwg
InRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAib3BlcmF0b3Ii
LCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVN
XSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlM
RVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewot
ICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYy
LCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAg
MjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAgMTAs
ICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYyLAotICAgICAx
MjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAgIDM3LCAgICA5
NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgsICAgIDU5LCAg
ICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3lt
Ym9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5
LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAg
IDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAotICAgICAgNTEs
ICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1NCwg
ICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1
NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAg
ICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAgNTgsICAgIDU4
LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
Ci0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9m
IHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAw
LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMywKLSAgICAg
ICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAgICAyLCAgICAg
NCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19OwotCi0vKiBZ
WURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3Rh
dGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBl
bHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAgICAyLCAgICAg
MCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
ICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0NCwgICAgNjEs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAotICAg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAotICAgICAgMjUs
ICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5LCAgICAxMywg
ICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAg
MCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURFRkdPVE9bTlRF
Uk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQotewot
ICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAgODMsICAgIDU1
LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1O
VU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RB
VEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAgLTE3LCAgIC0x
OCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwgICAtNTUsCi0g
ICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMsCi0gICAgIC01
NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAtNTUsICAgIDMx
LCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAgIDM3LCAgIC01
NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwKLSAgICAgIC0x
LCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRv
IGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4g
IElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bw
b3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05J
TkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3LCAgICA3NCwg
ICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUsCi0gICAgICA4
NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAgMTksICAgIDIw
LCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDcyLCAgICA2
NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEsICAgIDg0LCAg
ICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAg
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTQsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDcx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAotICAgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19OwotCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1NSwgICAgMjEs
ICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0LAotICAgICAg
MjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICA0OSwgICAg
MjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMSwg
ICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0g
ICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAz
NywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDExLCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAg
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsKLQotLyogWVlT
VE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcK
LSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAotICAgICAgNTcs
ICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3LCAgICAyMSwg
ICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAy
MiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcsICAgIDIyLCAg
ICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAgMjIsICAgIDIy
LCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1MiwgICAgMjEs
Ci0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQot
I2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAg
ICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290
byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZp
bmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2Vw
dCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8g
ZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdD
Qy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMg
Y2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFiCi0KLSNkZWZp
bmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRv
a2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNo
YXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZhbCA9IChWYWx1
ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5
eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJv
cjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi13aGlsZSAo
WVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAg
IDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBS
SFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBl
bXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0g
KGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylb
S10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJy
ZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAo
UmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0g
WVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJlbnQpLmxhc3Rf
bGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAgICAgIChDdXJy
ZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsgICBcCi0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUg
ICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7ICAgICAgICAg
ICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9j
b2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47ICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
d2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJp
bnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFu
ZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJl
YWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwot
Ci0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAg
ZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAotICAgICBmcHJp
bnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAgKExvYykuZmly
c3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYykubGFzdF9saW5l
LCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklO
VChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8qIFlZTEVYIC0t
IGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwotCi0jaWZkZWYg
WVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxF
WF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYykK
LSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCi0jaWYgWVlE
RUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50Zgot
IyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBc
Ci0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQot
Ci0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikg
ICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15
eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9u
cCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92
YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250
ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBj
b25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0
aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFs
dWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRl
eHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlQ
UklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0jIGVsc2UKLSAg
WVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAg
ICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoRklM
RSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwg
WVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkK
LSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5
eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAg
aW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlM
VFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0
OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5
eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIFlZ
X0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlGUFJJTlRGICh5
eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlw
ZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1
dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRo
ZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRl
ZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5
cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRv
bSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9w
OwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAo
OyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIs
ICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZ
X1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAg
ICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlz
IGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBZ
WUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQot
c3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGNvbnRl
eHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0gICAgaW50IHl5
cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBpbnQgeXlucmhz
ID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9
IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBi
eSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOwot
ICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkgPSAwOyB5eWkg
PCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9
ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJo
c1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5
bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkg
ICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAg
ICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwKLWRvIHsgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBcCi0gICAgeXlf
cmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZ
WUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxl
ZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0
LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBS
SU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwg
TG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5l
IFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJ
TklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lm
bmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyog
WVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0
aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVz
ZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMg
YXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRF
UyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRl
Z2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFY
REVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5k
ZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19I
Ci0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5n
dGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UK
LXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3Ry
OwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJb
eXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBl
bmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJD
X18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmlu
ZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1
cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4g
ICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNo
YXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQot
c3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0
OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVz
dDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlz
KyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBl
bmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhl
IGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBx
dW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3Iu
ICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5
IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBv
ciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIg
aXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5
OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxk
IGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMs
IGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAg
ICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAg
ICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdc
Jyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwot
Ci0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAg
ICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICov
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXlu
XSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAn
Iic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAg
ICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0g
ICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0g
IHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0v
KiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3Rl
ZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51
bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwg
Ynl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVz
dCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBB
cyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIK
LSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBv
Y2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAot
eXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikK
LXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYg
PCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0g
ICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5
eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1Qg
eXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlz
aXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28g
eGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLSAgICAgY29u
c3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgot
ICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMi
OwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAl
cyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNo
YXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBzaXplb2YgeXll
eHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFy
IGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQg
LVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0gICAgIFlZQ0hF
Q0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAg
ICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8K
LSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhl
bmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAg
ICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07
Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAg
ICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAgICBpZiAoeXlj
aGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAgICB7Ci0gICAg
ICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0gICAgICAg
ICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAg
ICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5
eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5
eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAg
ICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwg
eXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0KLSAgICAgIHl5
ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5
Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAg
eXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLSAgICByZXR1
cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7Ci0gICAgICAv
KiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3Bh
Y2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0
cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVt
YmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotICAgICAgaW50
IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotICAgICAgICB7
Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXlj
b3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdb
eXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwotICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRp
ZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQg
dG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXlt
c2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxvY2F0aW9ucCwg
cHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5
bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBjb25zdCBj
aGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAg
IFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlm
Ci17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNF
IChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKLSAg
WVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOwot
Ci0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsK
LSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90
eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7
Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJB
TSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5
cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNl
bmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0t
LS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJB
TQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFS
QU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNF
X1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50
Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNv
bnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAv
KiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFu
dGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsK
LQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwot
LyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZTFRZUEUg
eXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0g
IC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJs
ZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4g
aW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0g
MDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywg
YW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hh
ciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAg
ICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2Vt
YW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAg
IFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlv
dmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBU
aGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwot
ICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQot
ICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5J
VERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQot
ICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRI
XTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsKLSAgLyogVGhl
IGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAqLwotICBZWUxU
WVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAt
PSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tz
aXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBz
ZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVz
LiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAvKiBUaGUgbnVt
YmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVw
IHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxl
biA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQot
ICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXlj
aGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAg
LyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2Yg
dmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBz
YW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBh
cmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5
eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0gIC8qIEluaXRp
YWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRzLiAgKi8KLSAg
eXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0gIHl5bGxvYy5m
aXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0KLSAgZ290byB5
eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3
aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyog
SW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBz
dGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhl
cmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAq
eXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3Nw
KQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVl
IHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3Ag
LSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKLQotICAg
IC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9m
IHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1
c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJh
IGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cg
aXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiks
Ci0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAg
ICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMx
LCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOwot
ICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOwot
ICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxP
Q0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5k
IHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0
YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0g
MjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlzdGFja3NpemUg
PSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlT
VEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0
cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlz
cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAo
eXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5c3Nh
KQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5kaWYg
Lyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOwot
ICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0geXlscyArIHl5
c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVh
c2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXpl
KSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIFlZ
QUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVk
XG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwg
eXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9w
cmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBs
b29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25l
LiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZl
cmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsK
LSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBO
b3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUg
b25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2
YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAg
ICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAg
ICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAg
IHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewot
ICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BS
SU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0K
LQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0
byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAg
Ki8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5
eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0
YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8
IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15
eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwp
Ci0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7
IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXll
cnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVh
ZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5
bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3Mg
aXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVN
UFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotICAqKyt5eWxz
cCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAt
LSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkK
LSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhl
IG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXlu
XTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFs
dWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhl
IGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlv
ciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1
cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0
aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2Fybmlu
ZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5
dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZWUxMT0NfREVG
QVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURVQ0VfUFJJTlQg
KHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3OgotCi0gICAgewot
ICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAgcHA6OlRva2Vu
VmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5pbnNlcnQob3V0
LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2c3BbKDEpIC0g
KDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkgLSAoMildLnRs
aXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsKLSAgICAgICAg
Y29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xpbmUsIHBwOjpN
YWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAoeXl2c3BbKDIp
IC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAg
IHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2KV0pLmZpcnN0
X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5zdmFsKSwgKHl5
dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+dW5k
ZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250
ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFs
QmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygyKSAtICgzKV0u
c3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7Ci0gICAg
ICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01hY3JvRGVmaW5l
ZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICBwb3BD
b25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
MzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5W
ZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5
eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDEpIC0gKDEp
XS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygzKSAtICgzKV0p
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwpKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIp
XS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0g
KDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewot
ICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5
dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkg
PSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hf
YmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMzoKLQotICAg
IHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUs
ICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4o
KHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5dnNwWygxKSAt
ICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSku
Zmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5U
SUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcqJzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ14nOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd8JzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnJic7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ34nOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc9Jzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzon
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc7
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
LCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
Jz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0g
ICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0i
LCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0g
IHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZz
cCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hpZnQnIHRoZSBy
ZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAgIHRoYXQg
Z29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVs
ZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5dOwotCi0g
IHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlmICgwIDw9
IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlz
c3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5eXN0YXRl
ID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBo
ZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20g
YW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1cykKLSAg
ICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAgIHl5ZXJy
b3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAg
IHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXlj
aGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNU
QUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5YWxsb2MgPSAy
ICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8
PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FM
TE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICAgICAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FM
TE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5bXNnX2FsbG9j
ID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgeXltc2cgPSB5
eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0gICAgICAg
ICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2Fs
bG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0
YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCB5eW1zZyk7
Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6ZSAhPSAwKQot
ICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAoeXllcnJzdGF0
dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1
c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICov
Ci0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0dXJuIGZh
aWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0Yp
Ci0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVz
dHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9Ci0g
ICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRl
ciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5ZXJybGFiMTsK
LQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUg
dXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJy
b3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAg
aWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0gIHl5ZXJyb3Jf
cmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJv
bHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZRVJST1Iu
ICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVycmxhYjE7
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4
IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVycnN0YXR1
cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwot
Ci0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAg
aWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0g
ICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlU
RVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAg
ICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBl
cnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOwot
Ci0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwg
Y29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlzc3A7
Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBpZiAoeXlu
ID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAg
eXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0aW5n
LCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9vay1haGVhZC4g
IFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2Ms
ICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIFNo
aWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwg
eXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5
eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7
Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsK
LSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0t
IG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJv
ciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3Vs
dCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlm
ICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3Qg
KCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMg
b2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3Ig
WVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVz
dHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2
c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5k
ZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5
c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1
ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJ
RCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi12
b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRl
eHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFs
QmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29s
IENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJz
ZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KLQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHBfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3Rh
Yi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwg
bWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBC
aXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAx
OTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
LCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBh
IGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBw
YXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBv
ZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBh
cnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0
aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91
IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwg
d2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29u
IG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
Ci0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMuICAqLwotI2lm
bmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9r
ZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2Vy
cwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAg
ICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNIX0lGID0gMjYw
LAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2MiwKLSAgICAg
SEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhBU0hfRU5ESUYg
PSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAyNjcsCi0gICAg
IEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwKLSAgICAgSEFT
SF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhBU0hfREVGSU5F
X09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAgSU5UX0NPTlNU
QU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURFTlRJRklFUiA9
IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFTSCAyNTgKLSNk
ZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZpbmUgSEFTSF9J
RkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hfRUxTRSAyNjMK
LSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQotI2RlZmluZSBE
RUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNIX1BSQUdNQSAy
NjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVSU0lPTiAyNzAK
LSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkogMjcyCi0jZGVm
aW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAyNzQKLSNkZWZp
bmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0KLQotCi0KLSNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlw
ZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyog
c3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsK
LX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsKLSMgZGVmaW5l
IHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFM
IDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5lZCBZWUxU
WVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBmaXJzdF9s
aW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQgbGFzdF9j
b2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jzb2xlc2Nl
bnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEK
LSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29t
bW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwor
CisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRv
cj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFy
YXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBc
CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJv
Y2Vzc29yLnZjcHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTMgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QK
KwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9InByZXBy
b2Nlc3NvciIKKwlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdC
QzMyNX0iCisJUm9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9IldpbjMyUHJv
aiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJ
CTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0i
eDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJ
PENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIi
CisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSki
CisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0
YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQ
cm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRp
bWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztf
TElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0i
MyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIK
KwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJ
bmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0
MTI3OzQyNDQ7NDcwMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291
cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1
cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91
dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUlu
dGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0
aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5z
aWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05E
RUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2
ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5p
bmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9u
Rm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29u
ZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNv
bHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVy
bWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgor
CQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
WE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNl
cnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01J
RExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxk
PSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0i
MSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJ
CQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJ
CQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1
cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1
dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1l
ZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxk
RXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9u
bWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIK
KwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVu
dGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJ
CQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdh
cm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlz
YWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgor
CTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5h
bWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hw
ajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2
LUEwNjYtMkEzMkQ3NTJBMkZGfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XERpYWdub3N0aWNzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElu
cHV0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxMZXhlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii5cTWFjcm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZp
bGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVu
dGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2
ZVBhcnNlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXEV4cHJlc3Npb25QYXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2Nh
dGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFRva2VuLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cVG9rZW5pemVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVz
PgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaAko
cmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RMIHV0aWxpdGll
cy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9OX1NUTFVUSUxT
X0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsgfQotfTsKLQot
c3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEI+Ci0g
ICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRlIHguc2Vjb25k
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9TVExVVElMU19I
XwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy90b2tlbl90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8K
LSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQotI2luY2x1ZGUg
InBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBF
X0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKKyNpbmNsdWRlICJj
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorCitSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZv
U2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2luayhzaW5rKQorICAgICwgbU51bUVycm9ycygwKQor
eworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBvbmx5IGluIGZyYWdtZW50IHNoYWRlcnMuCisg
ICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7ZjE7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzO2YxOyIpOworICAgIG1TYW1w
bGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2YxOyIpOworICAgIC8vIFNhbXBsaW5n
IG9wcyBmb3VuZCBpbiBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMu
aW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2Vy
dCgidGV4dHVyZTJEUHJvaihzMjE7dmY0OyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmVDdWJlKHNDMTt2ZjM7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IE9F
U19FR0xfaW1hZ2VfZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJE
KDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjM7
Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3ZmNDsiKTsKKyAg
ICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3RleHR1cmVfcmVjdGFuZ2xlLgorICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7CisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7Cit9CisKKy8vIEZJWE1FKG12
dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGJ1aWx0LWlu
IG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFzZWQgb24gdGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQgcmVzdHJpY3Qg
dGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3Jj
ZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtTnVt
RXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVuZGVuY3kgZ3Jh
cGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMgcmlnaHQgbm93
LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3RhcnRpbmcgZnJv
bSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFuZCBnZW5lcmF0
ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJlIHNhbXBsZXIg
ZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3JhcGhTeW1ib2xW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJTeW1ib2xzKCk7
CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICAr
K2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1ib2wgPSAqaXRl
cjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1ib2wtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
Ojp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMoKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1bmN0aW9uQ2Fs
bCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0SW50ZXJtRnVu
Y3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNlciBkZWZpbmVk
IGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2Rl
KQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZpeEVycm9yKTsK
KyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCitib29sIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVnYXRl
KiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpbnRlcm1GdW5jdGlv
bkNhbGwtPmlzVXNlckRlZmluZWQoKSAmJgorICAgICAgICAgICBtU2FtcGxpbmdPcHMuZmluZChp
bnRlcm1GdW5jdGlvbkNhbGwtPmdldE5hbWUoKSkgIT0gbVNhbXBsaW5nT3BzLmVuZCgpOworfQor
Cit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQoVEdyYXBo
QXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBUZXh0dXJlIGNhY2hlIGFjY2VzcyB0aW1l
IG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorICAgIC8vIFRodXMsIHdlIHJlc3Ry
aWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFmZmVjdGluZyB0aGUgY29vcmRpbmF0
ZSBvciBMT0QgYmlhcyBvZiBhCisgICAgLy8gc2FtcGxpbmcgb3BlcmF0aW9uLgorICAgIGlmIChp
c1NhbXBsaW5nT3AocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSkpIHsKKyAgICAg
ICAgc3dpdGNoIChwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICAvLyBTZWNvbmQgYXJndW1lbnQgKGNvb3JkKQorICAg
ICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9u
IGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAg
ICAgICA8PCAiIGNvb3JkaW5hdGUgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4i
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIC8vIFRoaXJkIGFyZ3VtZW50IChiaWFzKQorICAgICAgICAgICAgICAgIGJlZ2luRXJy
b3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAg
bVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVy
bWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGJpYXMgYXJndW1l
bnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBhcmd1bWVudCAo
c2FtcGxlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlvbihUR3JhcGhT
ZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlvbi0+Z2V0SW50
ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBv
biBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC5c
biI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKFRH
cmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRlcm1Mb29wKCkp
OworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMg
bm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJtTG9naWNhbE9w
KCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIg
aXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dpY2FsICIKKyAg
ICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8PCAiIG9wZXJh
dG9yLlxuIjsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCitjbGFz
cyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIDog
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKTsKKyAgICB2b2lkIGVuZm9yY2VSZXN0
cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGludCBudW1FcnJv
cnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpOworICAgIHZvaWQgdmFsaWRh
dGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdy
YXBoKTsKKyAgICBib29sIGlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRl
cm1GdW5jdGlvbkNhbGwpIGNvbnN0OworCisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
aW50IG1OdW1FcnJvcnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IFN0cmluZ1Nl
dDsKKyAgICBTdHJpbmdTZXQgbVNhbXBsaW5nT3BzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxF
Ul9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1TaW5rLnByZWZp
eChFUHJlZml4RXJyb3IpOworICAgICAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkp
OworICAgICAgICBtU2luayA8PCAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4
IHNoYWRlcnMuXG4iOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKworY2xhc3MgVEluZm9TaW5rQmFz
ZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcoVEluZm9T
aW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBm
YWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAgICAsIG1OdW1FcnJvcnMoMCkge30K
KworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgeyByb290
LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVybiBtTnVtRXJy
b3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwor
cHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsK
K307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJf
VElNSU5HX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5Miw2ICs5OTIsMjIg
QEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQogICAgIHJldHVybiBTVUND
RUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3Vy
cmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDUp
KTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERpcmVjdDNEOQor
Ly8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2Fu
IG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0Qz
RDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBj
b25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAgICBtRDNk
OS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsK
KworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfREVQVEhT
VEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOworICAgIGJvb2wgbnVsbCA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9T
VVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAgcmV0dXJuIGludHogJiYgbnVsbDsKK30KKwog
Ym9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBi
b29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9k
ZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBPT0wgRGlzcGxheTo6Z2V0QnVmZmVyUG9vbChE
V09SRCB1c2EKICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwogfQogCi1EM0RQT09MIERpc3Bs
YXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3QKK0QzRFBPT0wgRGlzcGxh
eTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXgg
IT0gTlVMTCkKICAgICB7CkBAIC0xMDg5LDcgKzExMDUsNyBAQCBEM0RQT09MIERpc3BsYXk6Omdl
dFRleHR1cmVQb29sKGJvb2wgcmVuCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlm
ICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0VfREVQVEhTVEVO
Q0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtNzgsMTAgKzc4LDExIEBAIGNsYXNzIERpc3BsYXkKICAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRWZXJ0ZXhU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKICAgICBib29sIGlzRGV2aWNl
TG9zdCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIFN1
cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QKICAgICA6IG1EaXNwbGF5KGRp
c3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKIHsKICAgICBtU3dhcENoYWluID0gTlVM
TDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAg
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwpA
QCAtNjQsNiArNjUsNyBAQCBTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0
CiAgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVdpbmRvdyhOVUxMKSwgbUNvbmZpZyhjb25maWcp
LCBtU2hhcmVIYW5kbGUoc2hhcmVIYW5kbGUpLCBtV2lkdGgod2lkdGgpLCBtSGVpZ2h0KGhlaWdo
dCksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKEVHTF9GQUxTRSkKIHsKICAgICBtU3dhcENoYWlu
ID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbCA9IE5V
TEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBO
VUxMOwpAQCAtMTIxLDYgKzEyMywxMiBAQCB2b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQogICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKICAgICB9CiAKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAg
eworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9
IE5VTEw7CisgICAgfQorCiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewogICAgICAgICBt
RGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CkBAIC0xNDQsNiArMTUyLDggQEAgdm9pZCBTdXJmYWNl
OjpyZWxlYXNlKCkKICAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwogICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgfQorCisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKIH0K
IAogYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigpCkBAIC0xNzQsNTcgKzE4NCwxMyBAQCBi
b29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSogcHJlc2VydmVkUmVuZGVyVGFy
Z2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgJiYgbVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJn
ZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQotCiAg
ICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1v
cnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwogICAgIC8vIGJlZm9yZSByZWFsbG9jYXRpbmcg
dGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgogICAgIGRl
dmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAgcmVsZWFzZSgpOwogCiAgICAgRDNE
UFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwogICAgIEhSRVNVTFQg
cmVzdWx0OwogCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigp
ID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCk7Ci0KLSAg
ICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hpbmcgd2hlbiByZXNpemluZyB3aW5k
b3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNpZGUgb2YgdGhlIFdNX1BBSU5UIGNh
bGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2JsZW0gaW4KLSAgICAvLyBzaW5nbGUg
cHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vhcmx5IG5vdGljZWFibGUgaW4gbXVs
dGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVyZWZvcmUsIGlmIHRoZSBjcmVhdG9y
IHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAgICAvLyB0aGUgY3VycmVudCBwcm9j
ZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdPUkQgd2luZG93UElEOwotICAgIEdl
dFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2luZG93UElEKTsKLSAgICBpZiAod2lu
ZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBF
eCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMgaGFyZHdhcmUgZG9lcyBub3Qgc3Vw
cG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhlciB0aGUKLSAgICAvLyBkZXZpY2Ug
Zm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3QgMzItYml0LgotICAgIEhEQyBkZXZp
Y2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmljZUZvcm1hdEJpdHMgPSBHZXREZXZp
Y2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0gICAgUmVsZWFzZURDKDAsIGRldmlj
ZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVyU2l6ZSAhPSAzMiB8fCBkZXZpY2VG
b3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMgYWx3YXlzIFZTWU5DZWQKLSAgICBp
ZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggZG9lcyBub3QgcHJlc2VydmUg
dGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAgICB7
Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQogICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0
OwogICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1c2UgRDNE
U1dBUEVGRkVDVF9GTElQRVguCiAgICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIERpcmVjdFggZG9j
cyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0byAxCkBAIC0yMzksNDEgKzIw
NSw1MCBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgcHJl
c2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVW5pbXBsZW1lbnRlZAogICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxl
VHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKICAg
ICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2
YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdyZWF0ZXIuCi0gICAgaWYodXNlRmxp
cEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1Rf
RkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBt
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZFQ1RfQ09QWSA6IEQzRFNXQVBFRkZF
Q1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVG
RkVDVF9ESVNDQVJEOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKICAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7
CiAKLSAgICBpZiAobVdpbmRvdykKKyAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJlc291cmNlcyB0
byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGlsZSB0aGUKKyAg
ICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHBy
ZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dhcENoYWluKQogICAgIHsKLSAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFy
YW1ldGVycywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhBTkRMRSAqcFNo
YXJlSGFuZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBv
cnRlZCgpKSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOwotICAg
ICAgICB9CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAgbVN3YXBDaGFp
biA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOwor
ICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNl
KCk7CisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RF
UlJfREVWSUNFTE9TVCk7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgRVJSKCJD
b3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZh
Y2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKKyAgICBpZiAobURlcHRo
U3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIAotICAgICAgICBpZiAo
cHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmVzZXJ2ZWRS
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdl
dCA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOworICAgIEhBTkRM
RSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBpZiAoIW1XaW5kb3cgJiYgbURpc3BsYXktPnNo
YXJlSGFuZGxlU3VwcG9ydGVkKCkpCisgICAgeworICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNo
YXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNE
UE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9m
ZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKIAog
ICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgICAgICB7CkBAIC0yODYs
MjAgKzI2MSwxMiBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVdpbmRvdykKLSAgICB7Ci0gICAgICAgIG1Td2Fw
Q2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtUmVuZGVy
VGFyZ2V0KTsKLSAgICAgICAgaWYgKCFwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNFKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsKLSAgICB9CisgICAgSURpcmVjdDNE
U3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7CiAKLSAgICBpZiAocHJl
c2VydmVkUmVuZGVyVGFyZ2V0KQorICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgUkVDVCBy
ZWN0ID0KICAgICAgICAgewpAQCAtMzE4LDEwICsyODUsMzcgQEAgYm9vbCBTdXJmYWNlOjpyZXNl
dFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgICAgICB9CiAKICAgICAgICAgbURpc3BsYXktPmVu
ZFNjZW5lKCk7Ci0gICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QocHJlc2VydmVkUmVuZGVyVGFy
Z2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAg
ICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIHByZXNlcnZlZFJl
bmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qo
b2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9O
RSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgb2xkUmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cpCisgICAgewor
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNl
bnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJf
SU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKworICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2Ny
ZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisK
KyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IG1T
d2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFj
a0J1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCiAg
ICAgaWYgKG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCkBA
IC0zMjksMTUgKzMyMywyNCBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNr
YnVmCiAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50
UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxp
dHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0gICAgfQogCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJS
X0lOVkFMSURDQUxMKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOwog
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3Ig
bmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hh
aW46IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAg
ICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKQEAgLTM0Nyw2ICszNTAsMTEzIEBAIGJvb2wgU3Vy
ZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIW1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoeCArIHdpZHRoID4gbVdpZHRoKQorICAgIHsK
KyAgICAgICAgd2lkdGggPSBtV2lkdGggLSB4OworICAgIH0KKworICAgIGlmICh5ICsgaGVpZ2h0
ID4gbUhlaWdodCkKKyAgICB7CisgICAgICAgIGhlaWdodCA9IG1IZWlnaHQgLSB5OworICAgIH0K
KworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3Bs
YXktPmdldERldmljZSgpOworCisgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9u
cworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0Up
OworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09M
SUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBG
QUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxF
LCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNE
Q1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFC
TEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVO
QUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5B
QkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9CTFVF
IHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFMU0Up
OworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZB
TFNFKTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgIGRldmljZS0+U2V0
VmVydGV4U2hhZGVyKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbUJh
Y2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKKwor
ICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFS
RzEpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJH
MSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBE
M0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0
YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1Nf
Q0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1Ys
IEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwg
RDNERlZGX1RFWDEpOworCisgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0gezAsIDAsIG1XaWR0
aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3Bv
cnQpOworCisgICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKKyAgICBmbG9hdCB5MSA9IChtSGVpZ2h0
IC0geSAtIGhlaWdodCkgLSAwLjVmOworICAgIGZsb2F0IHgyID0gKHggKyB3aWR0aCkgLSAwLjVm
OworICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7CisKKyAgICBmbG9hdCB1MSA9
IHggLyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1IZWlnaHQpOwor
ICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYy
ID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7CisKKyAgICBmbG9hdCBxdWFkWzRdWzZd
ID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAorICAgICAgICAgICAgICAgICAgICAgICAg
e3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHt4
MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdgorCisg
ICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChE
M0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOworICAgIG1EaXNw
bGF5LT5lbmRTY2VuZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOworCisg
ICAgUkVDVCByZWN0ID0KKyAgICB7CisgICAgICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAor
ICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5CisgICAgfTsKKworICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwor
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGds
R2V0Q3VycmVudENvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBj
b250ZXh0LT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIH0KKworICAgIGlmIChpc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxv
c3QoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVz
dWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCiBIV05EIFN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSgpCiB7CiAg
ICAgcmV0dXJuIG1XaW5kb3c7CkBAIC00NjcsODcgKzU3NywxOCBAQCBEV09SRCBTdXJmYWNlOjpj
b252ZXJ0SW50ZXJ2YWwoRUdMaW50IGluCiAKIGJvb2wgU3VyZmFjZTo6c3dhcCgpCiB7Ci0gICAg
aWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVMTCwg
TlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOwogfQogCiBi
b29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lk
dGgsIEVHTGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwg
MCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFS
QU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCiAgICAgaWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZCkKICAgICB7CiAgICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNo
b3VsZCBiZSBoYW5kbGVkLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KLSAgICBpZiAo
bVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0gICAg
ICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHgsIG1IZWlnaHQgLSB5IC0g
aGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQotICAgICAgICB9Owot
Ci0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90
dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBtSGVp
Z2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QubGVmdCA9PSByZWN0LnJpZ2h0IHx8
IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+
UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCByZXN1bHQgPT0gRDNE
RVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VSRU1PVkVEKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgZmFsc2UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
RUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKQEAgLTU2NSw2ICs2MDYsOCBAQCBFR0xp
bnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkCiAgICAgcmV0dXJuIG1Qb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
CisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3Qz
RFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQpAQCAtNTc1LDYgKzYxOCw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpn
ZXRSZW5kZXJUYXIKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAorLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2ls
KCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNiArNjksNyBAQCBwcml2YXRlOgogCiAgICAgRGlzcGxheSAqY29uc3QgbURpc3BsYXk7CiAg
ICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbUJhY2tCdWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIG1SZW5kZXJUYXJnZXQ7CiAgICAgSURpcmVjdDNEVGV4dHVy
ZTkqIG1PZmZzY3JlZW5UZXh0dXJlOwpAQCAtNzgsNiArNzksNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3ViY2xhc3NXaW5kb3coKTsKICAgICB2b2lkIHVuc3ViY2xhc3NXaW5kb3coKTsKICAgICBi
b29sIHJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVp
Z2h0KTsKKyAgICBib29sIHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KTsKICAgICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEVHTGlu
dCBpbnRlcnZhbCk7CiAKICAgICBjb25zdCBIV05EIG1XaW5kb3c7ICAgICAgICAgICAgLy8gV2lu
ZG93IHRoYXQgdGhlIHN1cmZhY2UgaXMgY3JlYXRlZCBmb3IuCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMDgsNiArMTEwOCwxMSBAQCBFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0
U3ViQnVmZmVyTlYoCiAKICAgICB0cnkKICAgICB7CisgICAgICAgIGlmICh4IDwgMCB8fCB5IDwg
MCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKICAg
ICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4o
ZHB5KTsKICAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWds
OjpTdXJmYWNlKj4oc3VyZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMxMSw3IEBAIHZvaWQgQ29u
dGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICoKICAgICAgICAgbVN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRz
RmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMp
OwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKKyAg
ICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREZXB0aFRleHR1cmVT
dXBwb3J0KCk7CiAKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURldmljZUNhcHMu
TWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwogCkBAIC00MDUsNiArNDA3LDExIEBAIHZvaWQg
Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9
IE5VTEw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCit7CisgICAg
bUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Cit9CisKIHZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRM
b3N0KCkKIHsKICAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JF
U0VUX0VYVCkKQEAgLTE2NDYsNiArMTY1MywxMiBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2
KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVH
WV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAg
KnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFS
WV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
OworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1l
dGVySW5mbyhHTGVuCiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJ
RklDQVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllf
Rk9STUFUU19PRVM6CisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAxOwpAQCAtMTgzNSwxMyArMTg1MCwzMSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVu
ZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAorICAgIC8vIGlmIHRoZXJlIGlzIG5v
IGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xvcmF0dGFjaG1l
bnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMgc2hvdWxkIG9u
bHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENv
bG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJP
YmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIoKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAgICBpZiAoIXJlbmRlcmJ1ZmZlck9i
amVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5kZXJidWZmZXIg
Zm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgcmVu
ZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRT
ZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAg
dW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0
U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRh
cmdldFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRl
clRhcmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKICAgICAg
ICAgfQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsK
QEAgLTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChi
b29sIGlnbgogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKICAgICBp
ZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgZGVw
dGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICBpZiAo
IWRlcHRoU3RlbmNpbCkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2ls
IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAgICAgICBkZXB0
aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAgICAgZWxz
ZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9O
RSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZmZXIg
KnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwor
ICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsK
ICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigi
RGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2VyaWFs
KCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJp
YWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0
aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4Nyw5ICsxOTIyLDE0IEBAIGJvb2wgQ29udGV4dDo6YXBw
bHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVk
ID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorCiAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0
RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCiAgICAgewotICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJl
bmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5k
ZXJUYXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250
ZXh0IG11c3QgYmUgbG9zdApAQCAtMTkxNSwxMSArMTk1NSwxMCBAQCBib29sIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUudmlld3BvcnRYLCBtU3RhdGUu
dmlld3BvcnRZLCBtU3RhdGUudmlld3BvcnRXaWR0aCwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCBt
UmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpOwotICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAocmVj
dC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsK
LSAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9O
Rz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0g
Y2xhbXAocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlgpKTsKLSAg
ICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAocmVjdC5ib3R0b20gLSByZWN0LnRvcCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBzdGF0aWNfY2Fz
dDxMT05HPih2aWV3cG9ydC5ZKSk7CisgICAgICAgIHZpZXdwb3J0LlggPSBjbGFtcChtU3RhdGUu
dmlld3BvcnRYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgp
KTsKKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKKyAgICAgICAgdmlld3Bv
cnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0
LlgpKTsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0SGVp
Z2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSAtIHN0
YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlkpKTsKICAgICAgICAgdmlld3BvcnQuTWluWiA9IHpO
ZWFyOwogICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsKICAgICB9CkBAIC0xOTQxLDExICsx
OTgwLDExIEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICB7
CiAgICAgICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUuc2Npc3NvclgsIG1TdGF0ZS5z
Y2lzc29yWSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIG1SZW5k
ZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChyZWN0
LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwot
ICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9
IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVz
Yy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRvbSwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOworICAgICAg
ICAgICAgUkVDVCByZWN0OworICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2xhbXAobVN0YXRlLnNj
aXNzb3JYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsK
KyAgICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7CisgICAgICAgICAgICByZWN0
LnJpZ2h0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7CisgICAgICAgICAg
ICByZWN0LmJvdHRvbSA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7CiAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7CiAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7CiAg
ICAgICAgIH0KQEAgLTE5NjAsMjYgKzE5OTksMjYgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbgogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0gJiYgbUR4VW5p
Zm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRD
dXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdMaW50IGhhbGZQ
aXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOwor
ICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3Bv
cnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAgIHByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCi0gICAgICAgIC8v
IFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9n
cmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hhZGVyIE1vZGVs
IDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmplY3QtPmdldER4
Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hhZGVyTW9kZWwz
ID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4w
ZjsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4w
ZiwgaCwgCisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGds
X0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4KKyAgICAgICAgR0xpbnQgY29v
cmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9h
dCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0
SGVpZ2h0IC8gMi4wZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUu
dmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWln
aHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRmdihjb29yZCwg
MSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYoY29vcmQsIDEs
IHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0
aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhE
ZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikg
LyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVw
dGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CiAgICAg
ICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07
Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVh
ckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFu
Z2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwog
ICAgIH0KIApAQCAtMTk5MCwxOCArMjAyOSwxNyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVy
VGFyZ2V0KGJvb2wgaWduCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2Rl
KQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwor
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9n
cmFtQmluYXJ5KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKIAotICAgIEdMZW51bSBhZGp1c3RlZEZyb250RmFjZSA9IGFkanVz
dFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0KLSAgICBHTGludCBmcm9udENDVyA9IHByb2dy
YW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOwotICAgIEdMaW50IGNjdyA9IChhZGp1
c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0x
aXYoZnJvbnRDQ1csIDEsICZjY3cpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xpbnQgY2N3ID0gKG1TdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ0NXKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250
Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOworICAgIEdMaW50IHBvaW50c09yTGluZXMg
PSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwogICAgIEdMaW50
IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtT2Jq
ZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7CisgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJv
bnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5
LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJvb2wgemVyb0NvbG9yTWFza0FsbG93ZWQg
PSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7CkBAIC0yMDE1LDcgKzIwNTMsNyBAQCB2
b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgewogICAgICAgICBp
ZiAobVN0YXRlLmN1bGxGYWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUu
Y3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUu
Y3VsbE1vZGUsIG1TdGF0ZS5mcm9udEZhY2UpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAg
ICAgICAgIHsKQEAgLTIxMTUsMzIgKzIxNTMsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRl
KEdMZW51bSBkcmF3TW9kZQogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1
ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgICAg
ICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXpl
KCkpIC0gMTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRG
cm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19T
VEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NU
RU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVO
Q0lMRlVOQywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252
ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKIAotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RF
TkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxSZWYgPCAoR0xp
bnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NX
ID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVu
Y2lsTWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJF
RiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5j
aWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19D
Q1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7CiAKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NU
RU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJ
TEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBH
TF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFT
UyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDog
RDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7
CiAKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNl
ID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJ
VEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdS
SVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxG
VU5DLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRD
b21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKIAotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAo
R0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0
ZS5zdGVuY2lsQmFja01hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1df
U1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA8IChHTGludCltYXhTdGVuY2lsKSA/
IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5D
SUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsK
IAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJT
X0NDV19TVEVOQ0lMWkZBSUwsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMWkZBSUwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsKSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBH
TF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0y
MjgwLDE4ICsyMzE4LDIwIEBAIEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0
IEcKIHZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKIHsKICAgICBQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCiAgICAgaWYgKHBy
b2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCkKICAgICB7
Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1P
YmplY3QtPmdldFZlcnRleFNoYWRlcigpOwotICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0UGl4ZWxTaGFkZXIoKTsKKyAgICAgICAg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
VmVydGV4U2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFk
ZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbFNoYWRlcigpOwogCiAgICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKICAgICAgICAgbURldmljZS0+U2V0VmVydGV4
U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5p
Zm9ybXMoKTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwogICAg
ICAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsK
ICAgICB9CiAKLSAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7CisgICAgcHJvZ3Jh
bUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCiAvLyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBh
bmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCkBAIC0yMzExLDMwICsy
MzUxLDMyIEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCiB2b2lkIENvbnRleHQ6OmFw
cGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKIHsKICAgICBQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCiAgICAgaW50IHNhbXBs
ZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJhbmdlIG9mIERp
cmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCiAgICAgdW5zaWduZWQgaW50
ICphcHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gbUFwcGxp
ZWRUZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsKICAgICBpbnQgZDNk
U2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQzRFZFUlRFWFRF
WFRVUkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0
VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKIAogICAgIGZvciAoaW50IHNhbXBsZXJJ
bmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspCiAg
ICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVy
TWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVu
aXQgaW5kZXgKKyAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2Ft
cGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFn
ZSB1bml0IGluZGV4CiAgICAgICAgIGludCBkM2RTYW1wbGVyID0gc2FtcGxlckluZGV4ICsgZDNk
U2FtcGxlck9mZnNldDsKIAogICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbU9iamVjdC0+
Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CisgICAgICAgICAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJl
VHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwogCiAgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJl
ID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB0ZXhTZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7
CiAKLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9
IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRl
cnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQorICAgICAgICAgICAgaWYgKGFwcGxp
ZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhh
c0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJl
ID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1
cmUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkg
fHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0
dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdldFdyYXBUKCk7
CkBAIC0yMzUxLDcgKzIzOTMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxl
clR5cGUgCiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJp
YWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVy
ZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5
SW1hZ2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTIzNjEsNyArMjQwMyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0
dXJlcyhTYW1wbGVyVHlwZSAKICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVy
ZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1
cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYXBwbGllZFRleHR1
cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKKyAg
ICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4U2Vy
aWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMjQyOSw3ICsyNDcxLDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4
ZWxzKEdMaW50IHgsIEdMaW50IAogCiAgICAgSFJFU1VMVCByZXN1bHQ7CiAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOwotICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMg
PSBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgpIDw9IDQgJiYg
bURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYKKyAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0g
IWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAmJiBt
RGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB4
ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWln
aHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9y
bWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAgLTI0NTEsNiAr
MjQ5Myw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCAKICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQ4MSwx
MyArMjUyNCwxMyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrOwotICAgIFJF
Q1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkZXNjLkhl
aWdodCk7Ci0gICAgcmVjdC5sZWZ0ID0gY2xhbXAocmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8
TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QudG9wID0gY2xhbXAocmVjdC50b3AsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotICAgIHJlY3QucmlnaHQgPSBjbGFtcChy
ZWN0LnJpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3Qu
Ym90dG9tID0gY2xhbXAocmVjdC5ib3R0b20sIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhl
aWdodCkpOworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSBjbGFtcCh4LCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3QudG9wID0gY2xhbXAoeSwgMEws
IHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7CisgICAgcmVjdC5yaWdodCA9IGNsYW1w
KHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICByZWN0
LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhl
aWdodCkpOwogCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKICAgICByZXN1bHQgPSBzeXN0ZW1T
dXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwogCiAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjUwNSwxMyArMjU0OCwxMyBAQCB2b2lkIENvbnRleHQ6
OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgaW50IGlucHV0UGl0Y2g7CiAgICAgaWYg
KGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSkKICAgICB7Ci0gICAgICAgIHNvdXJjZSA9ICh1bnNp
Z25lZCBjaGFyKilsb2NrLnBCaXRzOwotICAgICAgICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsK
KyAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxvY2suUGl0
Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOworICAgICAgICBpbnB1dFBpdGNoID0g
LWxvY2suUGl0Y2g7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNvdXJjZSA9ICgo
dW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3QuYm90dG9tIC0g
cmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNoOworICAgICAg
ICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAgaW5wdXRQaXRj
aCA9IGxvY2suUGl0Y2g7CiAgICAgfQogCiAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wOyBqKyspCkBAIC0yNzM4LDYgKzI3ODEsNyBAQCB2b2lkIENvbnRleHQ6
OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAgICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2Mp
OworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1h
dCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAt
IDE7CkBAIC0yOTUyLDcgKzI5OTYsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVt
IG1vZGUsIEdMCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0g
ICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAg
ICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVT
YW1wbGVycyhOVUxMKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgfQpAQCAtMzA0Miw3ICszMDg2LDcgQEAgdm9pZCBDb250ZXh0OjpkcmF3
RWxlbWVudHMoR0xlbnVtIG1vZGUsIAogICAgIGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4
dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVy
cyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5
KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zNDUyLDYgKzM0OTYsMTEgQEAgYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dAogICAgIHJldHVybiBtU3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7
Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAogewogICAg
IHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MjYsNyBAQCB2b2lk
IENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8vbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3MCwxMSBAQCB2
b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4
dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgeworICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7CisgICAgfQor
CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwog
ICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBAIC0zODIwLDE3
ICszODc1LDE3IEBAIHZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gKIAog
ICAgIGlmIChzcmNZMCA8IHNyY1kxKQogICAgIHsKLSAgICAgICAgc291cmNlUmVjdC50b3AgPSBy
ZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZm
ZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSByZWFkQnVmZmVy
SGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWln
aHQgLSBkc3RZMDsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBzcmNZMTsKKyAgICAgICAg
ZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTA7
CisgICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkwOwogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAg
ICAgZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJl
Y3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOworICAgICAgICBzb3VyY2VSZWN0
LmJvdHRvbSA9IHNyY1kwOworICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMDsKKyAgICAg
ICAgc291cmNlUmVjdC50b3AgPSBzcmNZMTsKKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTE7
CiAgICAgfQogCiAgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNlUmVjdDsKQEAg
LTQwNDMsNyArNDA5OCwxMyBAQCB2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBz
cmNYCiAKICAgICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3RGVwdGhTdGVuY2lsID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2lsLCBOVUxMLCBkcmF3RGVw
dGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgICAgICByZWFkRGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBkcmF3RGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7CiAKICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgICAgIHsKQEAg
LTQxMTUsNiArNDE3Niw4IEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURl
Y2wKICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAx
XTsKICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKIAorICAg
IFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5
KCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQog
ICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3MCw3ICs0MjMz
LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbAogICAgICAgICAg
ICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKICAgICAgICAgICAgIGVsZW1l
bnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAgIGVsZW1lbnQt
PlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxlbWVudC0+VXNh
Z2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgICAgICBlbGVt
ZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsKICAg
ICAgICAgICAgIGVsZW1lbnQrKzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiAxMjIy
MzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIGNsYXNzIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1NYXhMcnU7CiAKLSAgICBlbnVtIHsgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9OworICAgIGVudW0geyBOVU1fVkVSVEVYX0RF
Q0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAgICBzdHJ1Y3QgVkJEYXRhCiAgICAgewpAQCAt
MjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQKIAogICAgIHZvaWQgbWFrZUN1cnJlbnQoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogCi0gICAgdm9pZCBt
YXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgp
OworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIG1h
cmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAtNDk1LDYgKzQ5
Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNv
bnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7Cisg
ICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpAQCAtNjE3LDYg
KzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJh
YmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKICAgICBi
b29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNE
ZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGludCBt
TnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZmZXI6On5GcmFt
ZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbURlcHRo
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChO
VUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9CiAKIFJlbmRl
cmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1
aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBpbnQgRnJhbWVi
dWZmZXI6OmdldFJlbmRlclRhcmdlCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2lu
dGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1
ZmZlcjo6Z2V0UmVuZGUKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
CiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQ
b2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJidWZmZXIgKkZyYW1lYnVm
ZmVyOjpnZXRTdGVuY2lsYnVmCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQo
KTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkK
K3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50
ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVy
KCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJSKCJVbmV4cGVj
dGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRX
aWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwor
CisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxidWZmZXItPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQorICAgIHsKKyAg
ICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdp
ZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50
ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVmZmVyOworfQor
CiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAgICAgcmV0dXJu
IG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJhbWVidWZmZXI6
Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7Cisg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAgIGludCB3aWR0
aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKKyAgICBi
b29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBl
ICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAg
ICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5h
bEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVy
LT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChpbnRlcm5h
bGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8
fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAorICAg
ICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZv
cm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBv
cnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAgICAgICAoZHgy
ZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRD
b250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKKyAgICAgICAg
ICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAgICAgICAgICAo
ZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfTFVN
SU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlOQU5D
RV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNk
Zm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRo
KCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAg
c2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRU
QUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICB9CiAKICAg
ICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwxMSArMzQwLDYgQEAg
R0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZl
clR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9
IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCi0g
ICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAg
ICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGgg
PT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQog
ICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAg
ICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1hdCgpOworCisg
ICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xF
X2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQogICAgICAg
ICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2Ft
cGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBtaXNzaW5nQXR0
YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBk
ZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEgKzM5OSw2IEBA
IEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtU3RlbmNpbGJ1
ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5
cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBzdGVuY2lsYnVm
ZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikK
QEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkK
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1TdGVu
Y2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9
IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVu
Y2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxi
dWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRh
cmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgRDNERk9S
TUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAg
ICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0Cisg
ICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVw
dGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVy
ZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKICAgICAgICAg
eworICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBz
YW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2lu
Z0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAh
PSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBzdGVuY2lsYnVmZmVyLT5n
ZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzYW1w
bGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKSkKICAgICAgICAgewpAQCAtMzc4LDE0
ICs0NTcsMTcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYm
IG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgLy8gaWYgd2UgaGF2
ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhl
IHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9z
dGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5jaWwKKyAgICBpZiAoZGVwdGhi
dWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikp
CiAgICAgewotICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAg
ICAgIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKSAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGF0dGFjaG1l
bnQgdG8gYmUgY29tcGxldGUKKyAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7
CiAgICAgfQogCiAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNz
IEZyYW1lYnVmZmVyCiAgICAgUmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOwogICAgIFJl
bmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIgKmdldFN0ZW5j
aWxidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcigpOwogCiAg
ICAgR0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOwogICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZl
clR5cGUoKTsKQEAgLTczLDYgKzc0LDggQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0g
bVN0ZW5jaWxidWZmZXJUeXBlOwogICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0
ZW5jaWxidWZmZXJQb2ludGVyOwogCisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlcjsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOCw2ICs4LDcgQEAKIC8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgogCiAjaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgog
CiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTE3LDIyNjEgKzE4LDg1IEBACiAKICNp
bmNsdWRlIDxzdHJpbmc+CiAKLSNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTCkKLSNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09N
UElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCi0jZW5kaWYKLQogbmFtZXNwYWNlIGdsCiB7Ci11bnNp
Z25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwotY29uc3QgY2hhciAqZmFrZXBh
dGggPSAiQzpcXGZha2VwYXRoIjsKLQotc3RkOjpzdHJpbmcgc3RyKGludCBpKQotewotICAgIGNo
YXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7Ci0gICAgcmV0dXJu
IGJ1ZmZlcjsKLX0KLQotVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpz
dHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQotICAgIDogdHlwZSh0eXBlKSwg
X25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFy
cmF5U2l6ZShhcnJheVNpemUpCi17Ci0gICAgaW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6
ZSh0eXBlKSAqIGFycmF5U2l6ZTsKLSAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNd
OwotICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7Ci0gICAgZGlydHkgPSB0cnVlOwotfQotCi1V
bmlmb3JtOjp+VW5pZm9ybSgpCi17Ci0gICAgZGVsZXRlW10gZGF0YTsKLX0KLQotYm9vbCBVbmlm
b3JtOjppc0FycmF5KCkKLXsKLSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikg
PT0gMDsKLX0KLQotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpz
dHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAK
LSAgICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChl
bGVtZW50KSwgaW5kZXgoaW5kZXgpCi17Ci19Ci0KLVByb2dyYW06OlByb2dyYW0oUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdl
ciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQotewotICAgIG1EZXZp
Y2UgPSBnZXREZXZpY2UoKTsKLSAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwotICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOwotCi0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVZl
cnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAg
IG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0gICAgbUluZm9Mb2cgPSBOVUxMOwotICAgIG1W
YWxpZGF0ZWQgPSBmYWxzZTsKLQotICAgIHVubGluaygpOwotCi0gICAgbURlbGV0ZVN0YXR1cyA9
IGZhbHNlOwotCi0gICAgbVJlZkNvdW50ID0gMDsKLX0KLQotUHJvZ3JhbTo6flByb2dyYW0oKQot
ewotICAgIHVubGluayh0cnVlKTsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5VTEwpCi0g
ICAgewotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYg
KG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFk
ZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NI
QURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4U2hhZGVy
ID0gKFZlcnRleFNoYWRlciopc2hhZGVyOwotICAgICAgICBtVmVydGV4U2hhZGVyLT5hZGRSZWYo
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRf
U0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZyYWdtZW50
U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRl
ci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikK
LXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7
Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleFNoYWRlci0+
cmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAg
ICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOwotICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Citjb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0aCA9ICJDOlxc
ZmFrZXBhdGgiOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRh
Y2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtVmVydGV4U2hhZGVyID8g
MSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsKLX0KK3Vuc2lnbmVkIGludCBQcm9n
cmFtOjptQ3VycmVudFNlcmlhbCA9IDE7CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3Jh
bTo6Z2V0UGl4ZWxTaGFkZXIoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdz
KCkKIHsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKIH0KIAotSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjp+
QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKIH0K
IAotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25z
dCBjaGFyICpuYW1lKQorSW5mb0xvZzo6SW5mb0xvZygpIDogbUluZm9Mb2coTlVMTCkKIHsKLSAg
ICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7Ci0gICAgfQogfQogCi1H
THVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK0lu
Zm9Mb2c6On5JbmZvTG9nKCkKIHsKLSAgICBpZiAobmFtZSkKLSAgICB7Ci0gICAgICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0
ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsK
KyAgICBkZWxldGVbXSBtSW5mb0xvZzsKIH0KIAotaW50IFByb2dyYW06OmdldFNlbWFudGljSW5k
ZXgoaW50IGF0dHJpYnV0ZUluZGV4KQotewotICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAw
ICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAKLSAgICByZXR1
cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOwotfQogCi0vLyBSZXR1cm5zIG9uZSBt
b3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJvZ3JhbTo6
Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEluZm9Mb2c6OmdldExl
bmd0aCgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmICghbUluZm9Mb2cpCiAg
ICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4gbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIHJldHVy
biBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLX0KLQotLy8gUmV0dXJucyB0aGUg
aW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBh
IERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIg
YW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbTo6Z2V0U2FtcGxl
ck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsK
LSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotCi0g
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9m
KG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQotICAgICAgICBpZiAobVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9n
aWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVy
ZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBSZXR1cm5zIHRoZSB0ZXh0
dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRl
eCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRl
cikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5
cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsKLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLSAg
ICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAg
cmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBjYXNl
IFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1T
YW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwotfQotCi1HTGludCBQcm9ncmFtOjpn
ZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRv
ciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5k
X2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScp
OwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUubGVu
Z3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihv
cGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJhc2Uob3Blbik7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBs
b2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5h
bWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpz
ZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
KiB2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAg
ICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAg
ICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZb
MV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0g
MDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9W
RUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
IAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIHJldHVybiBzdHJsZW4obUlu
Zm9Mb2cpICsgMTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KQordm9pZCBJbmZvTG9nOjpnZXRMb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCi0g
ICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwot
Ci0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKyAgICBpbnQg
aW5kZXggPSAwOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdl
dFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAg
dGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiAr
PSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUMzKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIGlmIChtSW5mb0xvZykKICAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5
KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCi0gICAgICAg
ICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAgICBpbmZvTG9n
W2luZGV4XSA9ICdcMCc7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKIAotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBp
bnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Ci12b2lkIHRyYW5z
cG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGludCBj
b3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAgIGludCBjb3B5
SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0gICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
eCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKGludCB4
ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQot
ICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0
OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAg
dGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0
LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkg
KiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAg
ICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lO
VCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKLSAg
ICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgIHYsIHNpemVvZihH
TGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAotICAgICAgICAgICAgICAgdiwg
MiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0zaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
ICogMywKLSAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAg
IH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAg
ICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCi0gICAgICAgICAgICAgICB2LCA0ICogc2l6
ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8g
c2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91
Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0g
VW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpi
dWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZs
b2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0
LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4
dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSAoZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgIC8vIHNpemVk
IHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0g
ICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZv
cm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6
ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB7
Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiAxMik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQs
NCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9
IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21w
b25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChV
bmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMaW50KWJvb2xQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpm
bG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxv
YXRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAg
ICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCi0g
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjpkaXJ0eUFsbFVuaWZvcm1zKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5p
Zm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0g
MDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3Jt
c1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLS8vIEFwcGxpZXMgYWxsIHRoZSB1
bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2
aWNlCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMoKQotewotICAgIGZvciAoc3RkOjp2ZWN0
b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlm
b3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0gICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7
Ci0gICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAg
ICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgMiwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFw
cGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0
VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5p
Zm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBM
RVJfQ1VCRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0x
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFy
cmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMz
OiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hh
ZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLUlEM0QxMEJsb2IgKlByb2dyYW06OmNvbXBp
bGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENv
bnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQotewotICAgIGlmICghaGxzbCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERXT1JEIHJlc3VsdDsKLSAgICBVSU5U
IGZsYWdzID0gMDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OwotICAgIGlmIChwZXJmQWN0
aXZlKCkpCi0gICAgewotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOwotI2lmZGVm
IE5ERUJVRwotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TDsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047
Ci0jZW5kaWYKLQotICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgo
KTsKLSAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3Vy
Y2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7Ci0gICAg
ICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291
cmNlVGV4dC5zaXplKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmbGFncyB8
PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKLSAgICAgICAgc291cmNlVGV4dCA9
IGhsc2w7Ci0gICAgfQotCi0gICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKLSAgICBJRDNE
MTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIHJlc3VsdCA9IEQzRENvbXBpbGUoaGxz
bCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBm
bGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7Ci0KLSAgICBpZiAoZXJyb3JNZXNzYWdl
KQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJv
ck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICBhcHBlbmRUb0luZm9Mb2dT
YW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAg
IFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNl
KCk7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAg
ICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShz
dGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29u
c3RhbnRUYWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBiaW5hcnk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlp
bmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBm
cm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEg
c2VjdGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5n
IHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtOjpwYWNrVmFyeWlu
Z3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKQotewotICAgIENvbnRleHQgKmNvbnRleHQg
PSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4
dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFy
eWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmct
PnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAobSA9
PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5n
VmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7
IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdb
ciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjb2x1
bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8
IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBj
b2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
ID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsg
bjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5nLT5j
b2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAg
aWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNv
dWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOwotCi0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhl
IG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAwOwotCi0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgIHsKLSAgICAg
ICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8
IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKLX0KLQotYm9vbCBQcm9ncmFt
OjpsaW5rVmFyeWluZ3MoKQotewotICAgIGlmIChtUGl4ZWxITFNMLmVtcHR5KCkgfHwgbVZlcnRl
eEhMU0wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cwotICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyBmcmFnVmFyICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFn
VmFyKyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAgICAgZnJhZ1Zh
ci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4
VmFyID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAhPSBtVmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZ0eFZhcisrKQotICAgIHsKLSAgICAgICAgdnR4VmFy
LT5yZWcgPSAtMTsKLSAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICAvLyBN
YXAgdGhlIHZhcnlpbmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCi0gICAgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJl
Z2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhwYWNraW5nKTsKLQotICAgIGlmIChyZWdpc3RlcnMgPCAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHRo
ZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFk
ZXJNb2RlbDMoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFy
eWluZ1ZlY3RvcnMgJiYgbUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0g
ICAgICAgIGFwcGVuZFRvSW5mb0xvZygiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBw
b3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IG1GcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyBpbnB1dCsrKQotICAgIHsKLSAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAg
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gbVZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7
IG91dHB1dCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlu
cHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5
cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUeXBlIG9m
IHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZh
cnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG91dHB1dC0+
cmVnID0gaW5wdXQtPnJlZzsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5j
b2w7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbWF0Y2hlZCkK
LSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVudCB2YXJ5aW5n
ICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3Ry
KCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09S
RCIpOwotCi0gICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgotICAgICAgICAg
ICAgICAgICAgICJ7XG4iOwotCi0gICAgaW50IHNlbWFudGljSW5kZXggPSAwOwotICAgIGZvciAo
QXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5l
bmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgbVZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhI
TFNMICs9IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDogVEVYQ09PUkQi
ICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7Ci0KLSAgICAgICAgc2VtYW50aWNJbmRleCAr
PSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgfQotCi0gICAgbVZlcnRl
eEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKLQot
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBp
bnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMg
OiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZh
cnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdp
c3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9p
bnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQg
Z2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiVlNfT1VU
UFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwot
Ci0gICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8v
IE1hdHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4SExTTCArPSAidHJhbnNwb3Nl
IjsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29y
YXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgbVZl
cnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgot
ICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBV
VCBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xu
IgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3Np
dGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBn
bF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRl
ci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBz
dHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlv
bjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9
IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlp
bmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQg
cm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwotICAg
ICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsK
LQotICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8g
UmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hd
ICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihz
aGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogbVZlcnRleEhMU0wgKz0gIngiOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG1WZXJ0ZXhI
TFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBtVmVydGV4SExTTCArPSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogbVZlcnRleEhMU0wgKz0gInciOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhM
U0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAg
In1cbiI7Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAg
ICAgICAgICAgICJ7XG4iOwotICAgIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZh
cnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1G
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAg
ICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVn
ICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFn
Q29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAg
ICAgICAgaWYgKHNtMykgewotICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBk
eF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExT
TCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQwO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOwotICAgIH0KLQot
ICAgIG1QaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4iCi0g
ICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAg
ICAgICAgICJ7XG4iOwotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNtMykKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVuZGVyIHRhcmdl
dCBoZWlnaHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBkeF9D
b29yZC55IC0gaW5wdXQuZHhfVlBvcy55IC0gMC41O1xuIjsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkIGNvbnRhaW5zIHRoZSB2aWV3
cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGds
X0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLngg
KyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC55ID0gLShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsgZHhf
Q29vcmQudztcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9E
ZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5t
VXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGdsX1BvaW50Q29vcmQgPSBpbnB1dC5nbF9Qb2ludENvb3JkO1xuIjsKLSAgICB9Ci0KLSAgICBp
ZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhf
RnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtc
biI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1G
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5
aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93
cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlp
bmctPm5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9
ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgPSBp
bnB1dC52IiArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIG1QaXhl
bEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRw
dXQ7XG4iICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAi
fVxuIjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9m
IHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5n
cywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRy
aWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5pZm9ybXMKLXZv
aWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKCk7Ci0KLSAgICBpZiAoIW1GcmFnbWVu
dFNoYWRlciB8fCAhbUZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtVmVydGV4U2hhZGVyIHx8ICFtVmVydGV4U2hh
ZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bVBpeGVsSExTTCA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOwotICAgIG1WZXJ0ZXhITFNM
ID0gbVZlcnRleFNoYWRlci0+Z2V0SExTTCgpOwotCi0gICAgaWYgKCFsaW5rVmFyeWluZ3MoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5z
dXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICBjb25zdCBj
aGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBz
XzNfMCIgOiAicHNfMl8wIjsKLQotICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBp
bGVUb0JpbmFyeShtVmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50
VGFibGVWUyk7Ci0gICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnko
bVBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKLQot
ICAgIGlmICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCi0gICAgewotICAgICAgICBIUkVT
VUxUIHZlcnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZl
cnRleEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOwotICAg
ICAgICBIUkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERX
T1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7
Ci0KLSAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVE
KHBpeGVsUmVzdWx0KSk7Ci0KLSAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAg
ICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7
Ci0gICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKLQotICAgICAgICBpZiAobVZlcnRleEV4ZWN1
dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFs
aW5rQXR0cmlidXRlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50
VGFibGVQUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVZT
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5
LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCi0gICAgICAgICAgICAvLyBhcmUgcmVzZXJ2
ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KLSAg
ICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
RGVwdGhSYW5nZSIpOwotICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAgICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7Ci0gICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiKTsKLSAgICAg
ICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250
Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKLQotICAgICAgICAgICAgbUxpbmtlZCA9IHRy
dWU7ICAgLy8gU3VjY2VzcwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBEZXRlcm1pbmVzIHRo
ZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQgRGlyZWN0M0QgOSB2ZXJ0ZXggc3Ry
ZWFtIHVzYWdlIGluZGljZXMKLWJvb2wgUHJvZ3JhbTo6bGlua0F0dHJpYnV0ZXMoKQotewotICAg
IHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsKLQotICAgIC8vIExpbmsgYXR0cmlidXRl
cyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6
aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0
cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5
IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1l
IGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxp
bmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwotCi0gICAgICAgICAgICBpbnQg
cm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLQotICAgICAgICAgICAg
aWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBh
dCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigp
LCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24g
KyBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIExpbmsgYXR0
cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGdldEF0dHJpYnV0
ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
ICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICAg
ICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExv
Y2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgICAgICAgICAgaWYgKGF2
YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhf
QVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIo
KSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCi0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5k
ZXhdID0gKmF0dHJpYnV0ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKLSAg
ICB7Ci0gICAgICAgIGludCBpbmRleCA9IG1WZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dz
ID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUlu
ZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4Kytd
ID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkK
LXsKLSAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xv
Y2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIFByb2dyYW06OmxpbmtVbmlmb3JtcyhJRDNE
WENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWENPTlNUQU5UVEFCTEVf
REVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0gICAgRDNEWENPTlNUQU5UX0RFU0MgY29u
c3RhbnREZXNjcmlwdGlvbjsKLSAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0gICAg
Y29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKLQotICAg
IGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29u
c3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsrKQotICAgIHsK
LSAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENv
bnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0
YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3Jp
cHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLQotICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oY29uc3RhbnRIYW5kbGUsIGNvbnN0
YW50RGVzY3JpcHRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVz
Y3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUg
bGlzdCBvZiB1bmlmb3JtcwotLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBu
b3QgYWxyZWFkeSBkZWZpbmVkKQotYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQz
RFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNj
cmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9
IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3Rh
bnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5h
bWUpOwotCi0gICAgICAgICAgICBpZiAocHNDb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChz
YW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCAr
IDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3Rh
bnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBU
RVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlZlcnRl
eCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoKGNvbnN0
YW50RGVzY3JpcHRpb24uQ2xhc3MpCi0gICAgewotICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsg
YXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9
IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhh
bmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVs
ZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlw
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQot
ICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdl
dENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlv
bkNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0i
KSA6ICIiOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShmaWVsZEhh
bmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSAr
IHN0cnVjdEluZGV4ICsgIi4iKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgotICAgICAgY2FzZSBEM0RYUENfVkVD
VE9SOgotICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6Ci0gICAgICBjYXNlIEQzRFhQ
Q19PQkpFQ1Q6Ci0gICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRp
b24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgVW5pZm9y
bSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOwot
Ci0gICAgaWYoIXVuaWZvcm0pCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCi0gICAgR0xpbnQgbG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7Ci0gICAgR0xlbnVtIHR5cGUgPSB1bmlm
b3JtLT50eXBlOwotCi0gICAgaWYgKGxvY2F0aW9uID49IDApCi0gICAgewotICAgICAgICBkZWxl
dGUgdW5pZm9ybTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XS0+dHlwZSAhPSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluaXRpYWxpemVDb25zdGFudEhh
bmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnBzLCBtQ29uc3RhbnRUYWJsZVBTKTsKLSAgICBpbml0
aWFsaXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT52cywgbUNvbnN0YW50VGFi
bGVWUyk7Ci0KLSAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwotICAgIHVuc2lnbmVk
IGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCi0gICAgewotICAg
ICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVu
aWZvcm1JbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1Vbmlmb3JtICpQ
cm9ncmFtOjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50
RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
MTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBU
X1NBTVBMRVJDVUJFOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9JTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKLSAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24u
Q29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9G
TE9BVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6
ZGVjb3JhdGUKLXN0ZDo6c3RyaW5nIFByb2dyYW06OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9
IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICJfIiArIG5hbWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQotCi1zdGQ6
OnN0cmluZyBQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25h
bWUpCi17Ci0gICAgaWYgKF9uYW1lWzBdID09ICdfJykKLSAgICB7Ci0gICAgICAgIHJldHVybiBf
bmFtZS5zdWJzdHIoMSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKF9uYW1lLmNvbXBhcmUoMCwgMywg
ImFyXyIpID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gX25hbWUuc3Vic3RyKDMpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gX25hbWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwg
Y29uc3QgR0xib29sZWFuICp2KQotewotICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMgKiA0XTsKLSAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFO
VFNdOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCB8fAotICAgICAgICB0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
U2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgewotICAgICAgICBBU1NFUlQoY291bnQgPD0gRDNE
OV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGor
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRoKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAodltp
ICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhS
U19CT09MIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgewotICAgICAg
ICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19C
T09MID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCB2
c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IGNvcHlDb3Vu
dCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291bnQpKTsK
LSAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewot
ICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJ
bmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9n
cmFtOjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9h
dCAqdikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwot
ICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAgIHsK
LSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9y
bTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckluZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgs
IChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmly
c3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0
ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9y
bTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7Ci0KLSAgICAgICAg
diArPSAyOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3Vu
dCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5
VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRT
KTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rv
cltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0s
IDApOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFy
Z2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZb
MV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0OwotICAgIH0K
LQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybW5pdihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVj
dG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19G
TE9BVDQpOwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KQorICAgIGlmIChsZW5ndGgpCiAgICAgewotICAgICAgICBBU1NF
UlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpOworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CiAgICAgfQogfQogCiAvLyBh
cHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgogLy8gVGhl
IEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdh
cm5pbmcgb3IgZXJyb3IgCiAvLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVu
Y2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBQcm9ncmFtOjph
cHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKK3ZvaWQgSW5mb0xv
Zzo6YXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgc3RkOjpzdHJp
bmcgbXNnKG1lc3NhZ2UpOwogCiAgICAgc2l6ZV90IGZvdW5kOwogICAgIGRvCiAgICAgewotICAg
ICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKKyAgICAgICAgZm91bmQgPSBtc2cuZmlu
ZChnX2Zha2VwYXRoKTsKICAgICAgICAgaWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxlbihmYWtlcGF0aCkp
OworICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtlcGF0aCkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CiAK
LSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cuY19zdHIoKSk7CisgICAgYXBwZW5kKCIl
c1xuIiwgbXNnLmNfc3RyKCkpOwogfQogCi12b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZyhj
b25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3ZvaWQgSW5mb0xvZzo6YXBwZW5kKGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uKQogewogICAgIGlmICghZm9ybWF0KQogICAgIHsKQEAgLTIzMDQsNyArMTI5
LDcgQEAgdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhcgogICAgIH0KIH0K
IAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQordm9pZCBJbmZvTG9nOjpyZXNldCgpCiB7
CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAgLTIzMTMsOTkgKzEzOCwxNzAgQEAgdm9pZCBQ
cm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0KIH0KIAotLy8gUmV0dXJucyB0aGUgcHJvZ3Jh
bSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBk
ZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQorUHJvZ3JhbTo6
UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJlc291
cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2VyaWFs
KCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAg
ICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
ID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgbVZl
cnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAgIG1EZWxl
dGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291bnQgPSAwOworfQogCi0gICAgICAgIGlmICht
VmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxl
YXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAg
IH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmsodHJ1ZSk7CiAKLSAgICBpZiAo
bVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxMKQogICAgIHsK
LSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0K
IAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9
IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQorYm9vbCBQ
cm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+
Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAg
IH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAg
ICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1WZXJ0
ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUo
KSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZT
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworICAgICAgICBp
ZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIq
KXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKICAgICB9CisgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorYm9vbCBQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+
Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAgICAgICBtTGlua2VkQXR0
cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4
XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykK
KyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICBtVmVydGV4U2hhZGVy
ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJB
R01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9
IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdt
ZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAg
ICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitp
bnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAoreworICAgIHJldHVy
biAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Cit9
CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQgQXR0cmlidXRlQmluZGluZ3M6OmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYg
KGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJzVlNb
aW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtQXR0cmlidXRlQmlu
ZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BdHRyaWJ1dGVCaW5k
aW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAgfQorfQorCit2b2lkIFByb2dyYW06OmJpbmRB
dHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAg
bUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7Cit9
CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVy
IGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBi
aW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3Rp
bmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkKK3sKKyAgICB1
bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1V
c2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1JbmZvTG9nLnJlc2V0KCk7CiAKLSAgICB3
aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIG1Qcm9ncmFtQmluYXJ5ID0gbmV3IFByb2dy
YW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJp
YnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFj
aygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwogICAgIH0KK30KIAotICAgIG1EeERlcHRoUmFu
Z2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29y
ZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAg
bUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9
IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9j
YXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBp
ZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJp
bmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9j
YXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7Cisg
ICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVsSExTTC5jbGVhcigpOwotICAgIG1WZXJ0ZXhI
TFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtl
ZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dy
YW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0
IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOworICAgICAg
ICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQogCi0gICAgZGVsZXRlW10g
bUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOworICAgICAgICBpZiAobVZlcnRleFNoYWRl
cikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAg
ICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBt
TGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7Cisg
ICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKK1Byb2dyYW1CaW5hcnkqIFByb2dy
YW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHJldHVybiBtTGlua2VkOworICAgIHJldHVy
biBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0
IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CisgICAgdW5saW5rKGZhbHNlKTsKKyAg
ICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6cmVs
ZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAgdW5zaWduZWQgaW50IFByb2dyYW06Omlzc3Vl
U2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAogewotICAg
IGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQorICAg
IHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKIH0KIAogdm9pZCBQcm9ncmFtOjpnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQogewot
ICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBp
bmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAg
ICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAo
YnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0K
LSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0K
KyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7CiB9
CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdM
c2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCkBAIC0yNTAzLDE1MiArMzc2LDk2IEBAIHZv
aWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkKIAogdm9pZCBQcm9ncmFtOjpn
ZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewotICAg
IC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0gICAgdW5zaWduZWQgaW50IGFjdGl2
ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKLSAgICBmb3IgKGF0
dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKysp
CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRl
eCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBh
Y3RpdmVBdHRyaWJ1dGUrKzsKKyAgICAgICAgbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJp
YnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0K
LSAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKLQot
ICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVm
c2l6ZSAtIDFdID0gJ1wwJzsKLQorICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5h
bWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAq
c2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5
cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKKyAgICAgICAgKnR5cGUgPSBH
TF9OT05FOworICAgICAgICAqc2l6ZSA9IDE7CisgICAgfQogfQogCiBHTGludCBQcm9ncmFtOjpn
ZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCiB7Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsK
LSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4g
Y291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgp
CiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRl
eCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJp
YnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0g
ICAgcmV0dXJuIG1heExlbmd0aDsKIH0KIAogdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3Jt
KEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpz
aXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICAvLyBTa2lwIG92ZXIgaW50
ZXJuYWwgdW5pZm9ybXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7Ci0gICAg
dW5zaWduZWQgaW50IHVuaWZvcm07Ci0gICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1V
bmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAg
ewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOworICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUs
IGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0gICAgQVNTRVJUKHVuaWZvcm0g
PCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFt
ZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAg
IGlmIChidWZzaXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0i
OworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CiAgICAgICAgIH0KIAotICAgICAgICBzdHJu
Y3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXpl
IC0gMV0gPSAnXDAnOwotCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAg
ICAgICAgfQotICAgIH0KIAotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNp
emU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKKyAgICAgICAgKnNp
emUgPSAwOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7CisgICAgfQogfQogCiBHTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQogewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1z
OyB1bmlmb3JtSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAg
ICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikg
IT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4g
Y291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQog
ewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1z
ID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXgg
PSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgaWYg
KG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBh
cmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZW5ndGgg
PSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOwotICAg
ICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBd
Ii4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0
aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKIH0KIAogdm9p
ZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQpAQCAtMjY2MywxNjEgKzQ4MCwyOCBAQCBib29s
IFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uCiAKIHZvaWQgUHJvZ3JhbTo6dmFs
aWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAgIG1JbmZvTG9nLnJlc2V0KCk7CiAK
LSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0g
ICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5
IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgICAgICBtUHJvZ3Jh
bUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAg
ICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycyh0cnVl
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVycyhi
b29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBh
IHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCi0g
ICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFt
LCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERyYXdBcnJheXMg
YW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4K
LQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
Z2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwotICAg
IFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAgIHRleHR1cmVV
bml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNh
bXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05P
V04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRl
eHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29u
ZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCku
IiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1
bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFj
dGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxl
cnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVk
cyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVy
ZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRU
eXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxv
Z0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0
aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4
dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbUluZm9Mb2cuYXBw
ZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOwogICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dyYW06OmluaXRpYWxpemVDb25zdGFu
dEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVnaXN0ZXJJbmZvICpy
aSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQorYm9vbCBQcm9ncmFtOjppc1Zh
bGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25zdGFudFRhYmxl
LT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0cigpKTsKLSAg
ICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIFVJ
TlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0
YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+
R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlv
bkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgcmkt
PnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7Ci0gICAg
ICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50
OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
U2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVkKCk7CiAgICAg
fQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gMDsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aFJh
bmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247
Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4Q29vcmRM
b2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0KLUdM
aW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRE
eEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0
aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQogfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJ
KHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSw3IEBACiAjZGVmaW5lIExJQkdM
RVNWMl9QUk9HUkFNX0hfCiAKICNpbmNsdWRlIDxkM2R4OS5oPgotI2luY2x1ZGUgPGQzZGNvbXBp
bGVyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDxz
ZXQ+CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCkBAIC0yNSw0MiArMjMsMzYgQEAg
Y2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogY2xhc3MgRnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0
ZXhTaGFkZXI7CiAKLS8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRl
ciB1bmlmb3JtCi1zdHJ1Y3QgVW5pZm9ybQotewotICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7Ci0KLSAgICB+
VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBHTGVudW0gdHlw
ZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBnX2Zh
a2VwYXRoOwogCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBib29sIGRpcnR5OworY2xh
c3MgQXR0cmlidXRlQmluZGluZ3MKK3sKKyAgcHVibGljOgorICAgIEF0dHJpYnV0ZUJpbmRpbmdz
KCk7CisgICAgfkF0dHJpYnV0ZUJpbmRpbmdzKCk7CiAKLSAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZv
Ci0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0gICAgICAgIGludCByZWdpc3Rlcklu
ZGV4OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OworICAgIHZvaWQgYmluZEF0
dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50
IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OwogCi0g
ICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKKyAgcHJpdmF0ZToKKyAg
ICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKIH07CiAKLS8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVt
ZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3QgVW5pZm9ybUxvY2F0aW9u
CitjbGFzcyBJbmZvTG9nCiB7Ci0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5n
ICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisgIHB1
YmxpYzoKKyAgICBJbmZvTG9nKCk7CisgICAgfkluZm9Mb2coKTsKKworICAgIGludCBnZXRMZW5n
dGgoKSBjb25zdDsKKyAgICB2b2lkIGdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqaW5mb0xvZyk7CiAKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2ln
bmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICB2b2lkIGFwcGVu
ZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBj
aGFyICppbmZvLCAuLi4pOworICAgIHZvaWQgcmVzZXQoKTsKKyAgcHJpdmF0ZToKKyAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oSW5mb0xvZyk7CisgICAgY2hhciAqbUluZm9Mb2c7CiB9Owog
CiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0NSArNjYsMTIgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJv
b2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKICAgICBpbnQgZ2V0QXR0YWNoZWRTaGFk
ZXJzQ291bnQoKSBjb25zdDsKIAotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxT
aGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsK
LQogICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hh
ciAqbmFtZSk7Ci0gICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5h
bWUpOwotICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7Ci0KLSAg
ICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KTsKLSAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2Ft
cGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgR0xpbnQgZ2V0
VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIEdMaW50IGdldFVuaWZv
cm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKLSAgICBib29sIHNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wg
c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9y
bU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9y
bTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAg
IGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOwotCi0gICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOwotCi0gICAgR0xp
bnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeERlcHRo
TG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50
IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKLSAg
ICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKIAogICAgIHZvaWQgbGluaygpOwotICAgIGJvb2wgaXNM
aW5rZWQoKTsKKyAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworCiAgICAg
aW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIGdldEluZm9Mb2coR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwogICAgIHZvaWQgZ2V0
QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQg
KnNoYWRlcnMpOwpAQCAtMTMyLDkwICs5MSwyNCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgYm9vbCBp
c0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCB2YWxpZGF0ZSgpOwotICAg
IGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9vbCBpc1ZhbGlk
YXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0g
ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVt
b3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KGNv
bnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAq
KmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsK
IAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKTsKLSAg
ICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcygpOwotICAg
IGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLQotICAg
IGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0g
ICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
bmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RF
U0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBV
bmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZv
cm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9v
bCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5
VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jt
bml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNU
T1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKLQot
ICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50
VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAq
bWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywgLi4u
KTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBp
c3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBGcmFn
bWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNo
YWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpzdHJpbmcgbVZl
cnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRpbmdzOwogCi0g
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29uc3RhbnRUYWJs
ZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRh
YmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFY
X1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVS
VEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNd
OwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAg
ICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1
cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lN
QUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAg
ICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwot
ICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0g
ICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdl
TG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29y
ZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGlu
dCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlv
bjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3JhbUJpbmFy
eTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotICAgIGNoYXIg
Km1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVkIGludCBtUmVm
Q291bnQ7CiAKQEAgLTIyNSw2ICsxMTgsOCBAQCBjbGFzcyBQcm9ncmFtCiAKICAgICBSZXNvdXJj
ZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiAgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CisK
KyAgICBJbmZvTG9nIG1JbmZvTG9nOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDgwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3Mu
IEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgIWRlZmluZWQoQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMworI2VuZGlmCisK
K25hbWVzcGFjZSBnbAoreworc3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVm
ZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsK
KyAgICByZXR1cm4gYnVmZmVyOworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCisgICAgOiB0
eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVu
aWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBV
bmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOworICAgIGRhdGEgPSBuZXcgdW5z
aWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICBkaXJ0
eSA9IHRydWU7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkKK3sKKyAgICBkZWxldGVbXSBkYXRh
OworfQorCitib29sIFVuaWZvcm06OmlzQXJyYXkoKQoreworICAgIHJldHVybiBfbmFtZS5jb21w
YXJlKDAsIDMsICJhcl8iKSA9PSAwOworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2Nh
dGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNp
Z25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5p
Zm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK3sKK30KKworUHJv
Z3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgbURldmljZSA9IGdldERldmljZSgp
OworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxl
VlMgPSBOVUxMOworCisgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOworICAgIH0KKworICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKKyAgICB7
CisgICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3Rp
dmUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Cisg
ICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7CisKKyAgICBtRHhEZXB0aFJhbmdlTG9jYXRp
b24gPSAtMTsKKyAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7CisgICAgbUR4Q29vcmRMb2NhdGlv
biA9IC0xOworICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOworICAgIG1EeEZyb250
Q0NXTG9jYXRpb24gPSAtMTsKKyAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKK30K
KworUHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQoreworICAgIGlmIChtUGl4ZWxFeGVj
dXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAg
IH0KKworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1Db25zdGFudFRhYmxlUFMp
CisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZT
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOworICAgICAgICBtVW5pZm9ybXMu
cG9wX2JhY2soKTsKKyAgICB9Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwor
fQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFk
ZXIoKQoreworICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKworR0x1aW50IFByb2dy
YW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAg
aWYgKG5hbWUpCisgICAgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUxp
bmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBQcm9ncmFtQmluYXJ5Ojpn
ZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKK3sKKyAgICBBU1NFUlQoYXR0cmli
dXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Cisg
ICAgCisgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKK30KKworLy8g
UmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgor
ICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKyAgICAgIGNhc2UgU0FNUExF
Ul9WRVJURVg6CisgICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAo
MC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8gaW5kZXggKDAt
MTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgor
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQgPSAtMTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJf
UElYRUw6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMp
L3NpemVvZihtU2FtcGxlcnNQU1swXSkpOworCisgICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9naWNhbFRleHR1cmVV
bml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAgICAg
ICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBs
ZXJzVlNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVy
c1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAo
bG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdl
dENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCisvLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0
M0QgOSBzYW1wbGVyIHR5cGUgYW5kCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRl
ciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitUZXh0dXJlVHlwZSBQcm9ncmFtQmlu
YXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBT
QU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3Nh
bXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgorICAg
ICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNh
bXBsZXJzVlNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVy
ZVR5cGU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRp
b24oc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsK
KworICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUg
dGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsK
KyAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOworICAgIGlmIChvcGVu
ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQorICAg
IHsKKyAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIo
KSk7CisgICAgICAgIG5hbWUuZXJhc2Uob3Blbik7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAg
IHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgor
ICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAg
IHRhcmdldFsxXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAgICAgICAg
dGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAgdiAr
PSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRf
VkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0Owor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07
CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsK
KyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAgdiArPSAyOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMy
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFd
OworICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKKyAgICAgICAgICAgIHRhcmdldFszXSA9
IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMzsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAor
ICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNX
aWR0aCwgaW50IHNyY0hlaWdodD4KK3ZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdl
dFdpZHRoLCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRI
ZWlnaHQsIHNyY0hlaWdodCk7CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsg
eCsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChU
KXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFy
IHVuZmlsbGVkIHJpZ2h0IHNpZGUKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7
IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdp
ZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGgg
KyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90
dG9tLgorICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykK
KyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZs
b2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gODsKKyAgICAg
ICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
MykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiAxMjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKKyAg
ICAgICAgdGFyZ2V0ICs9IDEyOworICAgICAgICB2YWx1ZSArPSA5OworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7
CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFy
Z2V0ICs9IDE2OworICAgICAgICB2YWx1ZSArPSAxNjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
IHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAorICAg
ICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdM
aW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xi
b29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCisgICAgICAgICAgICAg
ICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9G
QUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7
CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBj
b3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9P
TF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29s
ZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVD
NCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKKyAgICAgICAg
ICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2
W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpn
ZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBh
cmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlk
ZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAorICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAg
ICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0t
PnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0
Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9y
bUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xl
YW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/
IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpw
YXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3Zp
ZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAg
ICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+
KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgeworICAgICAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJu
YWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5
cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVu
aWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRl
cm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQg
KiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5p
Zm9ybXMoKQoreworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1z
OyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVl
OworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBw
cm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0
ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAh
PSB1ZTsgKyt1YikgeworICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworCisg
ICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICAgICAgICAgIEdM
ZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdM
aW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xib29s
ZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIDEsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIDQsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVu
aWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRVJfMkQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3Jt
LCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRf
VkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3Jt
M2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisvLyBD
b21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0
YWJsZSBiaW5hcmllcworSUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
IElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAgaWYgKCFobHNsKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRFdPUkQgcmVzdWx0Owor
ICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7CisgICAgaWYg
KHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7
CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElN
SVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRU
ZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIi
KSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNs
KTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0
cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwor
ICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gRDNEQ29t
cGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwg
cHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOworCisgICAgaWYgKGVy
cm9yTWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3Qg
Y2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7CisKKyAgICAgICAgaW5mb0xv
Zy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7
CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJyb3JNZXNzYWdl
LT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgfQorCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3Rh
bnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOworCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtQmlu
YXJ5OjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2lu
Z1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAgQ29udGV4dCAq
Y29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMg
PSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
ICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZh
cnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBp
ZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2Vzczsgcisr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAg
ICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHld
W3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYg
bSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhW
YXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
Y2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAw
IDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
dCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFj
ZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1u
XSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkg
PCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVu
ZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisK
KyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgewor
ICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1b
Ml0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYg
cGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBpZiAocGl4ZWxI
TFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2ln
bm1lbnRzCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCisgICAgeworICAgICAgICBmcmFnVmFyLT5yZWcgPSAt
MTsKKyAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsg
dnR4VmFyICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKKyAgICB7
CisgICAgICAgIHZ0eFZhci0+cmVnID0gLTE7CisgICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Cisg
ICAgfQorCisgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQorICAg
IGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05V
TEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIpOworCisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0
cHV0IGRlY2xhcmF0aW9ucworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Cisg
ICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOworICAg
IGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5n
VmVjdG9ycygpOworCisgICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIp
OworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5w
dXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKKyAgICB7Cisg
ICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1
dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBv
dXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNf
c3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAg
ICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAg
bWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2
ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2Vt
YW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOworCisgICAgdmVydGV4SExTTCAr
PSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBp
bnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUg
IT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAi
OyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NHg0ICI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUt
Pm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOworCisg
ICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
OworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlv
biA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyBy
KyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQg
OiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7CisKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiAr
IHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7CisgICAg
fQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdT
ZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4SExT
TCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKKyAgICB9CisKKyAgICB2
ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1l
KSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlw
ZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7CisgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9
ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0
LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOworICAgIH0K
KworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFp
bigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3Np
dGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkg
PSAtKGdsX1Bvc2l0aW9uLnkgKyBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53KTtc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bv
c2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBpZiAo
dmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCisgICAgeworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwg
MS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7
XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisg
ICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGds
X1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2
YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYg
KHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
OworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3Ry
KHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsg
ICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
cl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5n
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngi
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRl
eEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
OworCisgICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZh
cnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiBy
b3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2
IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgICAgIGlmIChz
bTMpIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBP
UztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9
ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0cnVj
dCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgorICAgICAgICAgICAgICAgICAg
In07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiUFNfT1VU
UFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztc
biI7CisgICAgICAgIAorICAgICAgICBpZiAoc20zKQorICAgICAgICB7CisgICAgICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0
LmR4X1ZQb3MueSArIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwg
aGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVy
VGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0g
KGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3Jk
LnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRo
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztc
biI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYg
c20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0g
aW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
UG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xuIjsKKyAgICB9CisK
KyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwg
KGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4w
KSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZh
cnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiBy
b3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5
aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9
ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5w
dXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBwaXhlbEhM
U0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7
XG4iICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0Nv
bG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdz
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKQoreworICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0Nv
bXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9
IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CisgICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9
IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xv
ZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDb250ZXh0ICpjb250
ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250
ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKKyAgICBj
b25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygp
ID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKworICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9
IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2Zp
bGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNv
bXBpbGVUb0JpbmFyeShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAm
bUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5
KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVW
ZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1W
ZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSwgJm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwg
cGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKworICAgICAgICB2
ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsK
KyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxM
OworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJp
YnV0ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNv
bnN0YW50VGFibGVQUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZv
TG9nLCBHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBi
ZWNhdXNlIGdsXyBhbmQgZHhfCisgICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMs
IGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAgIG1E
eERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIp
OworICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
RGVwdGgiKTsKKyAgICAgICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0Nvb3JkIik7CisgICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiKTsKKyAgICAgICAgICAgIG1EeEZy
b250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7CisgICAg
ICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4
X1BvaW50c09yTGluZXMiKTsKKworICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNE
aXJ0eSgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVu
IEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2Vz
Citib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICB1bnNp
Z25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhh
dCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJh
dG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmli
dXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAg
IHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRl
QmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkg
ICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQg
dG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisKKyAgICAg
ICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworCisg
ICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmli
dXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5h
bWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwg
KGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0
cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxv
Y2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3Vu
dChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxs
b2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJ
QlMpOworCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxl
SW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMp
IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlu
a2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhT
aGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRp
Y0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJ
bmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0
YW50VGFibGUpCit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVz
Y3JpcHRpb247CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVz
Y3JpcHRpb24pOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNv
bnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFu
dEluZGV4KyspCisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29u
c3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisKKyAgICAgICAgRDNE
WENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlw
dGlvbkNvdW50ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5H
ZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVz
Y3JpcHRpb25Db3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgY29uc3RhbnRIYW5kbGUs
IGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0
aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0
byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5p
Zm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlm
b3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNv
bnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdp
c3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5H
ZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworCisgICAg
ICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlcklu
ZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVf
Q1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVz
ZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4
ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
UGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdl
dFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2Ft
cGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5
cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Cisg
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2Ug
PSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hhZGVyIHNhbXBs
ZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBn
ZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9u
LkNsYXNzKQorICAgIHsKKyAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNv
bnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3Rh
bnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOworCisgICAgICAg
ICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247CisgICAgICAg
ICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisKKyAgICAgICAgICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2Mo
ZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBmaWVs
ZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFt
ZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgorICAgICAgY2FzZSBEM0RYUENf
VkVDVE9SOgorICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6CisgICAgICBjYXNlIEQz
RFhQQ19PQkpFQ1Q6CisgICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3Rh
bnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRl
ciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9y
bShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7CisKKyAgICBpZighdW5pZm9ybSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBhbHJlYWR5
IGRlZmluZWQKKyAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3Jt
LT5uYW1lKTsKKyAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7CisKKyAgICBpZiAobG9j
YXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlmb3JtOworICAgICAgICB1bmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB9CisK
KyAgICBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikgdW5pZm9ybS0+cHMuc2V0KGNv
bnN0YW50RGVzY3JpcHRpb24pOworICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikg
ICB1bmlmb3JtLT52cy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisKKyAgICBpZiAobG9jYXRp
b24gPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB1bmlmb3JtLT50eXBlID09IHR5cGU7Cisg
ICAgfQorCisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKKyAgICB1bnNpZ25lZCBp
bnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQorICAgIHsKKyAgICAg
ICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlm
b3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVW5pZm9ybSAqUHJv
Z3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIGlmIChjb25z
dGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQz
RFhQVF9TQU1QTEVSQ1VCRToKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBEM0RYUFRfSU5UOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
MiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6CisgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RY
UFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhM
U0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0
ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMs
ICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZTsK
K30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qg
c3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBfbmFtZTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgYW55IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9uCisgICAgc2l6
ZV90IHBvcyA9IDA7CisgICAgd2hpbGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwgcG9zKSkgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAgICBuYW1lLnJlcGxhY2UocG9zLCAyLCAi
LiIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0aW9uCisgICAg
aWYgKG5hbWVbMF0gPT0gJ18nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDEp
OworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDApCisg
ICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMyk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBuYW1lOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5idihVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9v
bGVhbiAqdikKK3sKKyAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICog
NF07CisgICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKKworICAg
IGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0t
PnZzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBBU1NFUlQoY291bnQgPD0gRDNE
OV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGor
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRoKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAodltp
ICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5ib29sSW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAg
ICB7CisgICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49
IDAgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAgaW50IHZz
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4o
Y291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOworICAgICAgICBBU1NF
UlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9v
bFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NElu
ZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAg
ICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwKQorICAgIHsK
KyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+
cHMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49
IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMu
Ym9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJD
b25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQg
KnYpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgewor
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5w
cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAg
fQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsKKyAgICB9CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5z
aWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXg7CisK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRl
eCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NElu
ZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRl
eDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJz
dEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVy
ZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlm
b3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZs
b2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZl
Y3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7CisK
KyAgICAgICAgdiArPSAyOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlm
b3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsx
XSwgKGZsb2F0KXZbMl0sIDApOworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBhcHBs
eVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNT
RVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQg
dmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgo
ZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7CisKKyAg
ICAgICAgdiArPSA0OworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3Jt
LCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW1C
aW5hcnk6OmFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKQoreworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0t
PnBzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNv
bnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVj
dG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURldmljZS0+U2V0
VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29u
c3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAg
IH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAoreworICAg
IHJldHVybiBtVmFsaWRhdGVkOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0
dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBv
dmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRl
ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0g
MDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7Cisg
ICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
Y3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgfQorCisgICAgaWYg
KGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAgICBzdHJuY3B5KG5h
bWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsK
KworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0g
c3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFs
d2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0dHJp
YnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQg
YXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb3Vu
dCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBt
YXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1
dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0
aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lk
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2ln
bmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAg
ICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsr
KQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAs
IDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsK
KyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGlu
ZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCisKKyAgICBp
ZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5p
Zm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+
aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsK
KyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOwor
CisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsK
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5p
Zm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlm
b3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQor
eworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1z
ID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXgg
PSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgewor
ICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3Jt
SW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW3Vu
aWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBs
ZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5
Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQoreworICAgIGFwcGx5VW5pZm9ybXMoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoJmluZm9Mb2cpKQorICAgIHsKKyAgICAgICAgbVZhbGlk
YXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVmFsaWRhdGVk
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVy
cyhJbmZvTG9nICppbmZvTG9nKQoreworICAgIC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJz
IGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNh
bWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHBy
b2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5kCisgICAgLy8gRHJhd0Fy
cmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVy
cm9yLgorCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7
CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQorICAgIHsKKyAgICAgICAgdGV4
dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsK
KyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQo
IlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VO
S05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ld
LnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNv
bmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQp
LiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVb
dW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0
ZXhTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5h
Y3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBs
ZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRz
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5
cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5m
b0xvZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUg
c2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVy
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9u
dENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGlu
ZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlv
bjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5l
cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisv
LyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAy
LjEwLjMgcGFnZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgor
I2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZl
Y3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50U2hhZGVyOwor
Y2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNp
bmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlmb3JtKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUp
OworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgpOworCisgICAgY29uc3Qg
R0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVk
IG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1l
CisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIg
KmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdpc3RlckluZm8KKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0NElu
ZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsKKyAgICAgICAgICAgIGJv
b2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJT
X0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4
ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRp
b24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3RlckNvdW50ID0gY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaW50IGZs
b2F0NEluZGV4OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAgICAgICBpbnQgYm9vbElu
ZGV4OworCisgICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07CisKKyAgICBSZWdpc3Rl
ckluZm8gcHM7CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8gU3RydWN0IHVzZWQgZm9y
IGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRs
ZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qg
c3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGlu
ZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7
CisgICAgdW5zaWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9m
IGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQg
dG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sKKyAgcHVibGljOgorICAg
IFByb2dyYW1CaW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOworCisgICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRl
cjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9u
KGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1
dGVJbmRleCk7CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBl
LCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVy
VGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7
CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAg
IEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBib29sIHNl
dFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAg
IGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBn
ZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJh
bXMpOworCisgICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKKyAgICBH
TGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeENvb3JkTG9j
YXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNv
bnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50
IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxs
VW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIGJvb2wgbGluayhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGlu
Z3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhT
aGFkZXIpOworICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdM
c2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOworCisgICAgdm9pZCBnZXRBY3RpdmVBdHRy
aWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xp
bnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3Rp
dmVBdHRyaWJ1dGVDb3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0
aCgpOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hh
ciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7CisgICAgR0xpbnQg
Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworCisgICAgdm9pZCB2YWxpZGF0ZShJbmZvTG9n
ICZpbmZvTG9nKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZyk7
CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgc3RhdGljIHN0ZDo6c3RyaW5n
IGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVu
ZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3Jt
KGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29y
ZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW1CaW5h
cnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9Mb2cs
IGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJs
ZSAqKmNvbnN0YW50VGFibGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlcik7CisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgc3RkOjpz
dHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVy
ICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9v
bCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5n
cyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xv
ZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRh
YmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNo
YWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOworICAg
IGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIFVu
aWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVz
Y3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBib29sIGFwcGx5VW5pZm9y
bW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlV
bmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1u
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RP
UjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpOworCisg
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4
RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZHVyaW5nIGxpbmtpbmcu
CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVBTOworICAgIElEM0RYQ29u
c3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKKworICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0
cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9W
RVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3QgU2FtcGxlcgorICAgIHsKKyAgICAgICAgYm9v
bCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgVGV4
dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsKKworICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNb
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisgICAgR0x1aW50IG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOworCisgICAgdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OworICAgIFVuaWZvcm1BcnJh
eSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVu
aWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKKworICAgIEdMaW50
IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOworICAg
IEdMaW50IG1EeENvb3JkTG9jYXRpb247CisgICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uOworICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CisgICAgR0xpbnQgbUR4UG9pbnRz
T3JMaW5lc0xvY2F0aW9uOworCisgICAgYm9vbCBtVmFsaWRhdGVkOworfTsKK30KKworI2VuZGlm
ICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZp
c2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDY4ICs2MywxNDQgQEAgR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbAogICAgIHJldHVybiBkeDJlczo6R2V0
U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjpS
ZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRh
cmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24g
Ly8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQo
VGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorewor
ICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOwor
fQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291
bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVz
LiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkK
K3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkK
K3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRh
cmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RT
dXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9CisKK0dMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4dHVyZSk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4
dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNldChOVUxMKTsK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9CisKK0QzREZP
Uk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQor
Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7
Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8v
Ly8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0
KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOworfQorCitSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKK3sK
KyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJlcyBuZWVkIHRv
IG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCiAv
LyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRl
eHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmFkZFByb3h5
UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAgIG1U
ZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5hZGRQcm94
eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4
dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAtPnJlbGVhc2VQ
cm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJl
OjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RT
dXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7
Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwogfQogCi1JRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVuY2lsKCkKKy8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwogfQog
Ci1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdl
dFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTHNpemVp
IFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6ZWkgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVp
Z2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1HTGVudW0gUmVu
ZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitHTGVudW0gUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0dXJuIG1UZXh0
dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEQzREZvcm1h
dCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZv
cm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3JtYXQoKTsKKyAg
ICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRT
YW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNh
bXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1
cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVD
dWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8vLy8vLyBSZW5k
ZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVm
ZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3Vu
dE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBAIC0xNTIsMTEg
KzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAgICAgUmVmQ291
bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0yNDMs
MTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnCiB7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0z
NTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAgfQogfQogCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTQyOCw4ICs1
MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKAogICAgIH0K
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhT
dGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogeworICAgIGlmIChtRGVwdGhTdGVuY2ls
KQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCiAgICAg
cmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMTIyMjM5
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNs
YXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKIGNs
YXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2ls
YnVmZmVyOwpAQCAtNTgsMTIgKzU5LDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFjZQog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZhY2UpOwogfTsK
IAotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRl
cmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4
dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUy
RCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CiAKLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJU
ZXh0dXJlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7CiAKICAgICB2
b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogICAgIHZvaWQgcmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwpAQCAtODAsOSArODEsMzcgQEAg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZQogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUpOworICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCi0gICAgQmluZGluZ1BvaW50ZXIg
PFRleHR1cmU+IG1UZXh0dXJlOworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0
dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9OworCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKKyAgcHVibGljOgor
ICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBH
TGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwor
ICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgRDNERk9S
TUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVz
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1U
ZXh0dXJlQ3ViZU1hcDsKICAgICBHTGVudW0gbVRhcmdldDsKIH07CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9u
IDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBTaGFkZXI6Omdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLAogewogICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBp
ZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXgg
PSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAg
bWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAobUlu
Zm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAt
IDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywg
bUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewog
ICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcsMTQgKzE0Nywx
NCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsCiB7CiAgICAgaW50
IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAg
IHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291
cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgIH0KKyAg
ICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1p
bihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAgICBtZW1jcHko
YnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUpCi0g
ICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5
aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIFByb2dyYW07
CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgogICAgIFNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTI4LDcgKzEy
OCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGUKIAogY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOworICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFk
ZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2
aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsMTIgQEAgdW5zaWduZWQgaW50
IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleAogCiBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKLSAgICBpZiAo
Zm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgZm9y
bWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlmIChJc0RlcHRo
VGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOworICAg
IH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9CkBAIC03NSw2
ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwCiAKIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKIHsK
KyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogICAgIHN3aXRjaChmb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRf
TDg6CkBAIC05NSw2ICsxMDMsMjEgQEAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVy
YWJsZShEMwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGlubGluZSBEV09SRCBHZXRU
ZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlKQoreworICAgIERXT1JEIGQzZHVzYWdlID0gMDsKKworICAgIGlmIChkM2RmbXQg
PT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBU
SFNURU5DSUw7CisgICAgfQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9BTkdMRSkpKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0Vf
UkVOREVSVEFSR0VUOworICAgIH0KKyAgICByZXR1cm4gZDNkdXNhZ2U7Cit9CisKIEltYWdlOjpJ
bWFnZSgpCiB7CiAgICAgbVdpZHRoID0gMDsgCkBAIC0xNTUsNiArMTc4LDggQEAgdm9pZCBJbWFn
ZTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBO
VUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKICAgICBjb25z
dCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIGNvbnN0IEQzREZP
Uk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKKyAgICBBU1NFUlQoZDNkRm9ybWF0ICE9
IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0
dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAgICB7CkBAIC0x
NzgsNyArMjAzLDcgQEAgdm9pZCBJbWFnZTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgICAgICAgICBs
ZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50OwogICAgICAgICB9CiAKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVl
c3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGdldEQzREZvcm1hdCgpLAorICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0
aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZDNkRm9ybWF0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1Vz
ZSwgJm5ld1RleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAg
LTI2NCw5ICsyODksMTMgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJm
YQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgp
OwogCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCisgICAgaWYgKHNvdXJj
ZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKICAgICB7Ci0gICAgICAg
IFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBtSGVpZ2h0KTsKKyAgICAgICAgUkVDVCByZWN0OworICAgICAgICByZWN0LmxlZnQg
PSB4b2Zmc2V0OworICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7CisgICAgICAgIHJlY3Qucmln
aHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHJlY3QuYm90dG9tID0geW9mZnNldCArIGhl
aWdodDsKIAogICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQogICAgICAg
ICB7CkBAIC0yODQsMTIgKzMxMywyNCBAQCB2b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhCiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBi
eSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3Jt
YXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBhdCBv
dXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KKy8vIGlu
dG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCiB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKKyAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqaW5wdXQpCiB7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gLUNvbXB1dGVQaXRjaCh3aWR0
aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKLSAgICBpbnB1dCA9ICgoY2hhciop
aW5wdXQpIC0gaW5wdXRQaXRjaCAqIChoZWlnaHQgLSAxKTsKKyAgICBSRUNUIGxvY2tSZWN0ID0K
KyAgICB7CisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0
aCwgeW9mZnNldCArIGhlaWdodAorICAgIH07CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdM
c2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50KTsKIAogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0yOTcsMjkgKzMz
OCwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGluCiAgICAgICAg
IHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0g
ICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2FkQWxw
aGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAg
ICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgp
ID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQz
REZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKKyAgICAg
ICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RG
TVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAg
ICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAg
bG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9h
ZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGxvYWRSR0JB
VUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwg
b3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzI4
LDcgKzM3Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4KICAg
ICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzM3LDcgKzM4NSw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgc3dpdGNoIChtRm9y
bWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9h
ZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDRE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyArMzk0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAg
IHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgIH0KQEAgLTM1NiwxOSArNDA0LDE5IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFGbG9h
dERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWlu
YW5jZUFscGhhRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OworICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgIH0KQEAgLTM3OCwyOCArNDI2LDMwIEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBj
b252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGlu
IEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JI
YWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CisKKyAgICB1bmxvY2so
KTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRB
bHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq
c291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTgsNyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFE
YXRhKEdMaW50IHhvZmZzZXQsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
ICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAt
NDE5LDcgKzQ2OSw0NyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQs
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgKmRlc3Qg
PSBOVUxMOworICAgIF9fbTEyOGkgemVyb1dpZGUgPSBfbW1fc2V0emVyb19zaTEyOCgpOworCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJj
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaDsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOworCisg
ICAgICAgIGludCB4OworICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZAorICAg
ICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0W3hdKSAm
IDB4RikgIT0gMCAmJiB4IDwgd2lkdGgpOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
c3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQorICAgICAgICB7
CisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBpNjQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOworICAgICAgICAgICAgLy8g
SW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5dGUgdG8gemVy
bworICAgICAgICAgICAgc291cmNlRGF0YSA9IF9tbV91bnBhY2tsb19lcGk4KHplcm9XaWRlLCBz
b3VyY2VEYXRhKTsKKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJpdCB0byAzMmJp
dCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybworICAgICAgICAgICAgX19tMTI4aSBsbyA9
IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisgICAgICAgICAgICBf
X20xMjhpIGhpID0gX21tX3VucGFja2hpX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKwor
ICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZk
ZXN0W3hdKSwgbG8pOworICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nh
c3Q8X19tMTI4aSo+KCZkZXN0W3ggKyA0XSksIGhpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEhhbmRsZSB0aGUgcmVtYWluZGVyCisgICAgICAgIGZvciAoOyB4IDwgd2lkdGg7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
c291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbWFnZTo6bG9h
ZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxv
YXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00MjgsNyArNTE4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFs
cGhhRmxvYXREYXRhKEdMaW50IHhvZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAg
KyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyOSw3IEBAIHZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2YKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6
OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxv
YXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDQ4LDcgKzUzOCw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7
CkBAIC00NTksMTcgKzU0OSwxNiBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRh
KEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3Zv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
IGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAxOiA0
OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKIAogICAgICAgICBpZiAo
IW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKICAgICAgICAgewpAQCAtNDg4
LDcgKzU3Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50IHhvZmYKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDk3LDcgKzU4Niw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
ICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwpAQCAt
NTA4LDcgKzU5Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQK
ICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwpAQCAtNTE3LDcgKzYwNiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXRE
YXRhKEcKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAg
IHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUyOCwxNyAr
NjE3LDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEcKICAgICB9
CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2
ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDI6
IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKICAgICB1bnNpZ25l
ZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICAKICAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAg
IHsKQEAgLTU1Nyw3ICs2NDUsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRh
KEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVM
TDsKQEAgLTU2Niw3ICs2NTQsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGEoCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01NzcsNyArNjY1LDcgQEAgdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01ODYsNyAr
Njc0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RAogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4
KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU5Nyw3ICs2ODUsNyBAQCB2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRECiAgICAgfQogfQogCi12b2lk
IEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtNjA2LDcgKzY5NCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURh
dGEoR0xpbnQgeG9mZnMKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAg
IHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICog
MyArIDJdOwpAQCAtNjE3LDcgKzcwNSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEo
R0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
dm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjI2LDcgKzcxNCw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAr
IHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9
IHNvdXJjZVt4XTsKQEAgLTYzOCw3ICs3MjYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0
YShHTGludCB4b2Zmc2V0CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTY0Nyw3ICs3MzUsNyBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzCiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxm
bG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyAr
IDBdOwpAQCAtNjU4LDcgKzc0Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xp
bnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjY3
LDcgKzc1NSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHgKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNl
dCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAgLTY3OCw3ICs3
NjYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4CiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjps
b2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBAIC02ODgsNyArNzc2LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IAogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4ID0gMDsKIAog
ICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcgKzgwOCw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCAKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0
ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAq
c291cmNlID0gTlVMTDsKQEAgLTcyOCw3ICs4MTYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVC
eXRlRGF0YShHTGludCB4b2ZmCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
ICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKIAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKQEAgLTczOCw3ICs4MjYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRl
RGF0YShHTGludCB4b2ZmCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTc0Nyw3ICs4
MzUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03NTksNyArODQ3LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZFJHQkE0NDQ0RGF0YShHTGludCB4b2ZmcwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJH
QkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC03NjgsNyArODU2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zm
cwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2OCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxM
OwpAQCAtNzg5LDEyICs4NzcsMTIgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xp
bnQgeG9mZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYp
OworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgbWVtY3B5
KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2Fk
UkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwpAQCAtODAzLDEyICs4OTEsMTIgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFI
YWxmRmxvYXREYXRhKEdMaW50IAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
CiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4
b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyODMgKzkwNSwzNyBAQCB2b2lkIElt
YWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgCiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91
dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjpsb2FkQ29tcHJl
c3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QgewotICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCi0gICAgewotICAgICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgICAgbG9h
ZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwot
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQxQmxv
Y2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsK
LSAgLy8gQSBEWFQxIGJsb2NrIGxheW91dCBpczoKLSAgLy8gWzAtMV0gY29sb3IwLgotICAvLyBb
Mi0zXSBjb2xvcjEuCi0gIC8vIFs0LTddIGNvbG9yIGJpdG1hcCwgMiBiaXRzIHBlciBwaXhlbC4K
LSAgLy8gU28gZWFjaCBvZiB0aGUgNC03IGJ5dGVzIHJlcHJlc2VudHMgb25lIGxpbmUsIGZsaXBw
aW5nIGEgYmxvY2sgaXMganVzdAotICAvLyBmbGlwcGluZyB0aG9zZSBieXRlcy4KLQotICAvLyBG
aXJzdCAzMi1iaXRzIGlzIHR3byBSR0I1NjUgY29sb3JzIHNoYXJlZCBieSB0aWxlIGFuZCBkb2Vz
IG5vdCBuZWVkIHRvIGJlIG1vZGlmaWVkLgotICBkZXN0WzBdID0gc291cmNlWzBdOwotCi0gIC8v
IFNlY29uZCAzMi1iaXRzIGNvbnRhaW5zIDQgcm93cyBvZiA0IDItYml0IGludGVycG9sYW50cyBi
ZXR3ZWVuIHRoZSBjb2xvcnMuIEFsbCByb3dzIHNob3VsZCBiZSBmbGlwcGVkLgotICBkZXN0WzFd
ID0gKHNvdXJjZVsxXSA+PiAyNCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0gPDwgOCkgJiAw
eDAwRkYwMDAwKSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA+PiA4KSAmIDB4MDAwMEZGMDAp
IHwKLSAgICAgICAgICAgIChzb3VyY2VbMV0gPDwgMjQpOwotfQotCi0vLyBGbGlwcyB0aGUgZmly
c3QgMiBsaW5lcyBvZiBhIERYVDEgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZv
aWQgRmxpcENvcHlEWFQxQmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNp
Z25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgZGVzdFswXSA9IHNv
dXJjZVswXTsKLSAgZGVzdFsxXSA9ICgoc291cmNlWzFdIDw8IDgpICYgMHgwMDAwRkYwMCkgfAot
ICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDAwMEZGKTsKLX0KLQotLy8gRmxp
cHMgYSBmdWxsIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxp
cENvcHlEWFQzQmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBp
bnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQzIGJsb2NrIGxheW91dCBpczoKLSAgLy8gWzAtN10gIGFs
cGhhIGJpdG1hcCwgNCBiaXRzIHBlciBwaXhlbC4KLSAgLy8gWzgtMTVdIGEgRFhUMSBibG9jay4K
LQotICAvLyBGaXJzdCBhbmQgU2Vjb25kIDMyIGJpdHMgYXJlIDRiaXQgcGVyIHBpeGVsIGFscGhh
IGFuZCBuZWVkIHRvIGJlIGZsaXBwZWQuCi0gIGRlc3RbMF0gPSAoc291cmNlWzFdID4+IDE2KSB8
IChzb3VyY2VbMV0gPDwgMTYpOwotICBkZXN0WzFdID0gKHNvdXJjZVswXSA+PiAxNikgfCAoc291
cmNlWzBdIDw8IDE2KTsKLQotICAvLyBBbmQgZmxpcCB0aGUgRFhUMSBibG9jayB1c2luZyB0aGUg
YWJvdmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2UgKyAyLCBkZXN0
ICsgMik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEgRFhUMyBibG9jayBp
biB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDNCbG9ja0hhbGYoY29u
c3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUg
bGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAoc291cmNlWzFd
IDw8IDE2KTsKLSAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsK
LX0KLQotLy8gRmxpcHMgYSBmdWxsIERYVDUgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3Rh
dGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNl
LCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQ1IGJsb2NrIGxheW91dCBpczoKLSAg
Ly8gWzBdICAgIGFscGhhMC4KLSAgLy8gWzFdICAgIGFscGhhMS4KLSAgLy8gWzItN10gIGFscGhh
IGJpdG1hcCwgMyBiaXRzIHBlciBwaXhlbC4KLSAgLy8gWzgtMTVdIGEgRFhUMSBibG9jay4KLQot
ICAvLyBUaGUgYWxwaGEgYml0bWFwIGRvZXNuJ3QgZWFzaWx5IG1hcCBsaW5lcyB0byBieXRlcywg
c28gd2UgaGF2ZSB0bwotICAvLyBpbnRlcnByZXQgaXQgY29ycmVjdGx5LiAgRXh0cmFjdGVkIGZy
b20KLSAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL3JlZ2lzdHJ5L3NwZWNzL0VYVC90ZXh0dXJl
X2NvbXByZXNzaW9uX3MzdGMudHh0IDoKLSAgLy8KLSAgLy8gICBUaGUgNiAiYml0cyIgYnl0ZXMg
b2YgdGhlIGJsb2NrIGFyZSBkZWNvZGVkIGludG8gb25lIDQ4LWJpdCBpbnRlZ2VyOgotICAvLwot
ICAvLyAgICAgYml0cyA9IGJpdHNfMCArIDI1NiAqIChiaXRzXzEgKyAyNTYgKiAoYml0c18yICsg
MjU2ICogKGJpdHNfMyArCi0gIC8vICAgICAgICAgICAgICAgICAgIDI1NiAqIChiaXRzXzQgKyAy
NTYgKiBiaXRzXzUpKSkpCi0gIC8vCi0gIC8vICAgYml0cyBpcyBhIDQ4LWJpdCB1bnNpZ25lZCBp
bnRlZ2VyLCBmcm9tIHdoaWNoIGEgdGhyZWUtYml0IGNvbnRyb2wgY29kZQotICAvLyAgIGlzIGV4
dHJhY3RlZCBmb3IgYSB0ZXhlbCBhdCBsb2NhdGlvbiAoeCx5KSBpbiB0aGUgYmxvY2sgdXNpbmc6
Ci0gIC8vCi0gIC8vICAgICAgIGNvZGUoeCx5KSA9IGJpdHNbMyooNCp5K3gpKzEuLjMqKDQqeSt4
KSswXQotICAvLwotICAvLyAgIHdoZXJlIGJpdCA0NyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBh
bmQgYml0IDAgaXMgdGhlIGxlYXN0Ci0gIC8vICAgc2lnbmlmaWNhbnQgYml0LgotICBjb25zdCB1
bnNpZ25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNlKSk7Ci0gIHVuc2lnbmVkIGNoYXIq
IGRlc3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDx2b2lk
Kj4oZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEgPSBzb3VyY2VCeXRlc1syXSArIDI1
NiAqIChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5dGVzWzRdKTsKLSAgdW5zaWduZWQg
aW50IGxpbmVfMl8zID0gc291cmNlQnl0ZXNbNV0gKyAyNTYgKiAoc291cmNlQnl0ZXNbNl0gKyAy
NTYgKiBzb3VyY2VCeXRlc1s3XSk7Ci0gIC8vIHN3YXAgbGluZXMgMCBhbmQgMSBpbiBsaW5lXzBf
MS4KLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5lXzBfMSAmIDB4MDAwZmZmKSA8PCAx
MikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVfMF8xICYgMHhmZmYwMDApID4+
IDEyKTsKLSAgLy8gc3dhcCBsaW5lcyAyIGFuZCAzIGluIGxpbmVfMl8zLgotICB1bnNpZ25lZCBp
bnQgbGluZV8zXzIgPSAoKGxpbmVfMl8zICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICgobGluZV8yXzMgJiAweGZmZjAwMCkgPj4gMTIpOwotICBkZXN0Qnl0
ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVzWzFdID0gc291cmNlQnl0ZXNbMV07
Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfM18yICYgMHhmZjsKLSAgZGVzdEJ5dGVzWzNdID0gKGxp
bmVfM18yICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNbNF0gPSAobGluZV8zXzIgJiAweGZm
MDAwMCkgPj4gMTY7Ci0gIGRlc3RCeXRlc1s1XSA9IGxpbmVfMV8wICYgMHhmZjsKLSAgZGVzdEJ5
dGVzWzZdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNbN10gPSAobGlu
ZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0KLSAgLy8gQW5kIGZsaXAgdGhlIERYVDEgYmxvY2sg
dXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNl
ICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERY
VDUgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1Qmxv
Y2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsK
LSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgY29uc3QgdW5zaWduZWQgY2hhciogc291cmNlQnl0
ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0Qnl0ZXMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRlc3QpKTsKLSAgdW5zaWduZWQg
aW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAoc291cmNlQnl0ZXNbM10gKyAy
NTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzFfMCA9ICgobGluZV8w
XzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5l
XzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RCeXRlc1swXSA9IHNvdXJjZUJ5dGVzWzBd
OwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sxXTsKLSAgZGVzdEJ5dGVzWzJdID0gbGlu
ZV8xXzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAobGluZV8xXzAgJiAweGZmMDApID4+IDg7
Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzFfMCAmIDB4ZmYwMDAwKSA+PiAxNjsKLSAgRmxpcENv
cHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQotdm9pZCBJbWFnZTo6
bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0Ci17CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQp
IHsKICAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CiAgICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRo
ID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKLSAgICBBU1NFUlQob3V0
cHV0UGl0Y2ggJSA4ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25l
ZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7CiAK
LSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGlu
dCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBi
bG9ja3NBY3Jvc3MgKiAyOworICAgIFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgICAgIHhvZmZzZXQs
IHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAorICAg
IH07CiAKLSAgICBzd2l0Y2ggKGhlaWdodCkKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Cisg
ICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7CisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3VyY2VbeCArIDFd
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2UgKyB4
LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQgJSA0ID09IDApOwotICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA4KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9z
czsgeCArPSAyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxpcENv
cHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDAp
OwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0ID09
IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRjaCAl
IDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNl
IGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAv
IDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dpdGNo
IChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAgICAgICAgICAg
ICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBG
bGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwogCi0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQzQmxvY2tGdWxsKHNvdXJjZSArIHgs
IGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3
aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRl
Q29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAgICBpbnQgcm93cyA9IGlucHV0U2l6
ZSAvIGlucHV0UGl0Y2g7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCisgICAg
eworICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tl
ZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBp
dGNoKTsKICAgICB9Ci19CiAKLXZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zmc2V0
ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHdp
ZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJUKGlu
cHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAwKTsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0gICAgLy8gUm91bmQgd2lkdGgg
dXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQgYmxvY2tzQWNyb3NzID0gKHdp
ZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxvY2tzQWNyb3NzICogNDsKLQot
ICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAgIGRl
c3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3VyY2Vb
eCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gc291cmNlW3ggKyAyXTsKLSAg
ICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsgM107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKLQotICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tGdWxs
KHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgdW5sb2NrKCk7CiB9CiAKIC8vIFRoaXMg
aW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVy
bmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwpAQCAtMTEyMSw5ICs5
NjMsOCBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvCiAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKLSAgICBSRUNUIHNvdXJj
ZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVzY3JpcHRp
b24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQo
eW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQs
IGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRlc3RZT2Zmc2V0ICsgaGVpZ2h0fTsKKyAg
ICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsKKyAgICBS
RUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNl
dCArIGhlaWdodH07CiAKICAgICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCiAgICAgewpAQCAt
MTI2Nyw5ICsxMTA4LDkgQEAgdm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
bwogICAgIG1EaXJ0eSA9IHRydWU7CiB9CiAKLVRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KSwK
LSAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJlbmRlclRhcmdl
dCkpLAorVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKQorICAgIDog
bUQzRFVzYWdlKHVzYWdlKSwKKyAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVy
ZVBvb2wodXNhZ2UpKSwKICAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgp
KQogewogfQpAQCAtMTI4MCw3ICsxMTIxLDcgQEAgVGV4dHVyZVN0b3JhZ2U6On5UZXh0dXJlU3Rv
cmFnZSgpCiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKKyAgICByZXR1cm4gKG1EM0RVc2FnZSAmIChEM0RV
U0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwpKSAhPSAwOwogfQogCiBi
b29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBjb25zdApAQCAtMTI5Myw2ICsxMTM0LDEx
IEBAIEQzRFBPT0wgVGV4dHVyZVN0b3JhZ2U6OmdldFBvb2woKSBjb25zdAogICAgIHJldHVybiBt
RDNEUG9vbDsKIH0KIAorRFdPUkQgVGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUQzRFVzYWdlOworfQorCiB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6
OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsK
QEAgLTE0NTAsMTUgKzEyOTYsNyBAQCB2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVucGFj
a0FsaWduCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9D
S0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZs
b2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBp
bWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5s
b2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2Ut
PmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0K
IH0KQEAgLTE0NjcsNTIgKzEzMDUsMTYgQEAgdm9pZCBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9j
aygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGlu
dCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdpZHRoKCksIGlt
YWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAgICAgIGltYWdl
LT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRI
ZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsg
aW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxv
YWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdo
dCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0KIAog
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7
Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAr
IHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChJ
c0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAg
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9j
a2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwp
OwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0
LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
ICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZERh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTUy
MSwzNyArMTMyMyw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0wK
IAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKIHsKLSAg
ICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9m
ZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1h
dCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBp
eGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247Ci0gICAgICAg
IHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9mZnNl
dCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7Ci0KLSAgICAg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdl
LT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBDb21wdXRl
Q29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAgaW50IGlucHV0U2l6
ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgICAg
ICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlP
ZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0
LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNp
emUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZENvbXBy
ZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CiAgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNjY3LDIzICsxNDQxLDI3IEBA
IGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0
dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UodHJ1ZSksIG1SZW5kZXJUYXJn
ZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9y
YWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJl
KSA6IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCksIG1SZW5kZXJUYXJnZXRT
ZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKIHsKICAgICBtVGV4dHVy
ZSA9IHN1cmZhY2VUZXh0dXJlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFn
ZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Ym9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQpLCBt
UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitU
ZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgOiBUZXh0dXJl
U3RvcmFnZSh1c2FnZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6
aXNzdWVTZXJpYWwoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGlzUmVuZGVyVGFyZ2V0KCkg
PyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJl
LCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAvLyBpZiB0aGUgd2lkdGgg
b3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGlu
Y29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcg
dGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAw
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhl
aWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBO
VUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTE2OTUsNiArMTQ3Myw4IEBAIFRleHR1cmVTdG9yYWdl
MkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZl
bChpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpA
QCAtMTc3OCwxOSArMTU1OCwyMCBAQCBHTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVpZ2h0KEdMaW50
IGxldmVsCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRl
cm5hbEZvcm1hdCgpIGNvbnN0CitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChH
TGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0
KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUoKSBjb25zdAotewotICAgIHJldHVy
biBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxd
LmdldEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQz
REZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgVGV4dHVy
ZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFn
ZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsK
IH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKQEAgLTE5
MzgsMTkgKzE3MTksMTcgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwg
RwogCiAgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2
ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFu
c2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChz
b3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7
Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBz
b3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9y
YnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBj
bGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4
ZWxZT2Zmc2V0KDAsIGhlaWdodCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsKKyAg
ICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9
IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5
ICsgaGVpZ2h0OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwogCiAgICAgICAgICAg
ICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCkt
PmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBk
ZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBz
b3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwogICAgICAgICAgICAgICAgIGRlc3QtPlJl
bGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk5MCwxOSArMTc2OSwxOCBA
QCB2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnCiAKICAgICAgICAgaWYg
KGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJj
ZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJl
Y3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdo
dCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICAgICAgR0xpbnQg
ZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSW1h
Z2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwogCiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwogCiAgICAg
ICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRG
b3JtYXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOworICAgICAgICAgICAgICAgIGdl
dEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBd
LmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKICAgICAgICAgICAgICAgICBk
ZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMTYsMTAgKzE3
OTQsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIAogICAgIEdM
ZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgR0xl
bnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwogICAgIEQzREZPUk1B
VCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBj
b25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10
KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAK
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAg
ICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMjA3NCw4ICsxODUy
LDggQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwogICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0
KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKKyAg
ICBpZiAoKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCkt
PnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAorICAgICAgICAoZ2V0SW50ZXJuYWxG
b3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNG
bG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0g
R0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0g
R0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTIxNTcsOSArMTkzNSwx
NCBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoKSBjb25zdAorYm9vbCBU
ZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Cit9CisKK2Jvb2wgVGV4dHVy
ZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNz
ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzRGVwdGhUZXh0dXJlKGdldElu
dGVybmFsRm9ybWF0KGxldmVsKSk7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTczLDExICsxOTU2LDExIEBAIHZvaWQg
VGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKICAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJy
YXlbMF0uZ2V0V2lkdGgoKTsKICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdl
dEhlaWdodCgpOwogICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWln
aHQpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQo
KTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUp
OworICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsK
KyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFs
c2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRl
eHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdl
dCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZt
dCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIAogICAgIGlmIChtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpCiAgICAgewpAQCAtMjIxNyw5ICsyMDAwLDEwIEBAIHZvaWQgVGV4dHVyZTJE
Ojpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICBHTHNpemVpIHdpZHRoID0gbUltYWdl
QXJyYXlbMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS5nZXRIZWlnaHQoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMo
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVV
c2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwogCi0g
ICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4
dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwog
CiAgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQogICAgICAgICB7CkBAIC0yMjMyLDgg
KzIwMTYsOCBAQCB2b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICAg
ICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9y
YWdlLT5pc01hbmFnZWQoKSkpCiAgICAgICAgICAgICAgICAgeyAgIAogICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIzMTUsMTIg
KzIwOTksMTQgQEAgUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcgogCiAg
ICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAgICAgewotICAgICAgICBtQ29sb3Ji
dWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRl
cmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKHRoaXMsIHRhcmdldCkpOwog
ICAgIH0KIAogICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKIH0KIAorLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJn
ZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
OwpAQCAtMjMzMyw2ICsyMTE5LDMzIEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6Omdl
dFJlbmRlclQKIAogICAgIHVwZGF0ZVRleHR1cmUoKTsKICAgICAKKyAgICAvLyBlbnN1cmUgdGhp
cyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgoMCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJm
YWNlTGV2ZWwoMCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCit7CisgICAg
QVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5k
ZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBO
VUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlVGV4
dHVyZSgpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJl
CisgICAgaWYgKCFpc0RlcHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQogICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwogfQogCkBAIC0y
MzUzLDE4ICsyMTY2LDIyIEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2Uo
Ym8KICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCBz
aXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJlbmRlclRhcmdl
dCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1
YmVTZXJpYWxzKCkpCitUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1h
cChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpCisg
ICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCiB7Ci0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywg
aXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IC8vIGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFz
IGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tp
cHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHNpemUgPiAwKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywg
Z2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CiAgICAg
fQogfQogCkBAIC0yMzc2LDYgKzIxOTMsOCBAQCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5UZXh0
dXJlU3RvcmFnZUN1CiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdM
ZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjI3MywzNiBAQCBHTGVudW0gVGV4dHVyZUN1YmVN
YXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7CiB9
CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAor
R0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldFdpZHRoKCk7
CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdl
dFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xzaXplaSBUZXh0
dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJl
Q3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewog
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpn
ZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBd
LmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5cGUoKSBjb25z
dAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0u
Z2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotRDNE
Rk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAg
IGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0
KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9CiAKIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjQwMiw4IEBAIGJvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAh
Z2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAg
KGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQo
KS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxG
b3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAh
Z2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAg
KGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0g
R0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8
fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9N
SVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjQ5OSw5IEBAIGJvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsK
LSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVy
biBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwogfQogCiBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0CkBAIC0yNjk0LDExICsyNTE0LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNE
Rk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNv
bnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNE
Rk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAK
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNk
dXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7
CkBAIC0yNzQyLDkgKzI1NjIsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVu
ZGVyVGFyZwogICAgIHsKICAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwg
MCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RG
b3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShk
M2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwogCi0gICAgICAg
IG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0
LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKIAogICAgICAgICBpZiAo
bVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjc1OSw4ICsyNTgwLDggQEAgdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01h
bmFnZWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjg0NywxOSArMjY2OCwxNyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5
SW1hZ2UoR0xlbnVtIHRhCiAKICAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291
cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xh
bXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVs
WU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmdldFdpZHRo
KCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IHkgKyBoZWlnaHQ7CiAKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwogCiAgICAg
ICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZT2Zm
c2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFy
Z2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwogICAgICAgICAgICAgICAgIGRl
c3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjkwMywxOSArMjcy
MiwxNyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtCiAKICAgICAg
ICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNU
IHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNv
dXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAw
LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291
cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zm
c2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJl
Y3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNl
UmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAogICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZh
Y2UodGFyZ2V0LCBsZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChkZXN0KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJj
ZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBkZXN0WU9mZnNl
dCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdl
dCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlv
ZmZzZXQsIGRlc3QpOwogICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjkyOSwxMCArMjc0NiwxMCBAQCB2b2lkIFRleHR1cmVDdWJl
TWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2CiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0
Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlw
ZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJl
Rm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0g
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJl
VXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsK
LSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2Rm
bXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAgICAgbUltbXV0
YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBs
ZXZlbCsrKQpAQCAtMzA0OSwxMiArMjg2NiwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJl
TWFwOjpnZXRSZW5kZXJiCiAKICAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCiAg
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCks
IG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOworICAgICAgICBtRmFjZVBy
b3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKICAgICB9CiAKICAgICByZXR1cm4gbUZhY2VQcm94
aWVzW2ZhY2VdOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCiB7CiAg
ICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CkBAIC0zMDg3LDQgKzI5
MDYsNCBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhCiAgICAgcmV0
dXJuIG1UZXhTdG9yYWdlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw2IEBAIGNsYXNzIElt
YWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJr
Q2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9S
RUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwot
CiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0
RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU2ICs2Nyw1MiBAQCBjbGFzcyBJbWFnZQogICAg
IHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAg
dm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
QWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRB
bHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQg
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5h
bmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAg
dm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5h
bmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2
b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JIYWxm
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRl
RGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxv
YWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0
NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkQ29tcHJlc3Nl
ZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUNURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCiAgICAgdm9pZCBjb3B5KEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKIApAQCAtMTI4LDYg
KzEyMSw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKIAorICAg
IEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVj
dCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6
ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsKQEAgLTE0NCwyMCArMTQwLDIxIEBAIGNs
YXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIGV4cGxpY2l0IFRleHR1
cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCk7
CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc01hbmFnZWQo
KSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKKyAgICBEV09SRCBnZXRVc2Fn
ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJn
ZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBib29sIG1SZW5kZXJUYXJnZXQ7CisgICAg
Y29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBvb2w7CiAKICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7CkBAIC0xOTAsMTQgKzE4Nyw3IEBA
IGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51
bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNv
bnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAwOwogCiAgICAgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBSZW5kZXJidWZm
ZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CkBAIC0yMTYsOCArMjA2LDYg
QEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogICAgIHN0YXRpYyBjb25z
dCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7
ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFs
dWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBy
ZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVy
YnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CiAgICAgYm9vbCBzdWJJbWFnZShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZElt
YWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7
CkBAIC0yNTgsNyArMjQ2LDcgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UyRCA6IHB1YmxpYyBUZXh0
dXJlUwogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0
M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRl
clRhcmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9y
bWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAtMjg2LDExICsyNzQsMTIgQEAgY2xhc3MgVGV4dHVy
ZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xl
bnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQo
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBH
THNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVy
bmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkg
Y29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zMDEsNyArMjkwLDYgQEAgY2xhc3MgVGV4dHVy
ZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAg
ICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2Uo
ZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdl
KCk7CiAKQEAgLTMwOSw2ICsyOTcsMTEgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1
cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0
dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0zMTYsNyArMzA5LDYgQEAgY2xhc3MgVGV4dHVyZTJE
IDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRl
clRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRT
dG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgp
IGNvbnN0OwpAQCAtMzQxLDcgKzMzMyw3IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0
dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RG
T1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpOworICAgIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwg
aW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7CiAKQEAg
LTM2OSwxMSArMzYxLDExIEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUK
IAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNp
emVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0
SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0SW1hZ2VOZWdY
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKQEAgLTM5MSw3ICszODMsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0
dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKQEAgLTM5OSw2ICszOTAsMTAgQEAgY2xh
c3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgc3RhdGljIHVuc2lnbmVk
IGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7CisgICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKIApAQCAtNDA2LDcg
KzQwMSw2IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1
YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAg
ICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsK
IAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiAr
MTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3ZlcnRleGNv
bnZlcnNpb24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleEQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRy
aWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9ncmFtICpwcm9n
cmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGZvciAo
aW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0
ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRl
eCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAo
cHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwog
ICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1
c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250
YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1Y3QgQ29udmVy
c2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtCiB0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBz
dHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpO
b3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwogCiAvLyBV
c2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFs
bHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMu
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZU
X0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6
OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVy
c2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8
R0xpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklY
RUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9
OwogCiAvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAv
MSkKIC8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZp
c2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgpAQCAt
NTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9v
bCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlKQorLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29t
YmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5
IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQorICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Cisg
ICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElO
VkFMSURfRU5VTQorICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+
IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgor
ICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0K
KworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Cisg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JB
OgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9Cit9Citib29sIHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQogewogICAgIGlmICgh
dGV4dHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29t
cHJlc3NlZCgpKQorICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChs
ZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9
IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCkpCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05F
ICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpCiAgICAgewog
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9
CiAKICAgICBpZiAoY29tcHJlc3NlZCkKICAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9
IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8IAorICAgICAgICBpZiAoKHdp
ZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAogICAgICAg
ICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDAp
KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBmYWxzZSk7CkBAIC04OSw2ICsxODUsNDMgQEAgYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zKGJvb2wgY29tcHJlcwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1
cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbXByZXNzZWQg
IT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVzc2VkKQorICAg
IHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRX
aWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWln
aHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0
YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0
SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8g
Y2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBhcmUgdmFsaWQg
Zm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29t
cHJlc3NlZFRleFN1YkltYWdlMkQKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwg
bGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1
YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xMTAyLDcgKzEyMzUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTJECiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9m
ZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2Vk
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
aW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjU4LDYgKzEzOTEsMTkg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRo
VGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyArMTUwMSwzMSBA
QCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAgICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsK
ICAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAg
ICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gR0xfUkdCQTsKIAogICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXgyZCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVn
aXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwg
R0xfTk9ORSwgdGV4dHVyZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwor
ICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdp
ZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRl
eGN1YmUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3ViZS0+
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IHRleGN1YmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJl
Rm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKIAogICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxl
IDMuOQogICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KQpAQCAtMTQxNCw2ICsxNTY4
LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVO
Q0lMX09FUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0yMzA2LDE5ICsyNDYz
LDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgc3dp
dGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQo
KSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNf
Y2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgog
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CkBA
IC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0wKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVS
RV9DVUJFX01BUCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0
YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwpAQCAtMjQ0
MCwyOCArMjYwNiw0MSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0
CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlOwotCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRo
KDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0
ZU1pcG1hcHMoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC0yNzU5LDEyICsyOTM4LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlv
bihHTHVpbnQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRl
TG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0
cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9n
cmFtaXYoR0x1aW50IHBybwogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJv
Z3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKQEAgLTMyNDEs
NiArMzQyMSw5IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm8KICAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BST0dS
QU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMzc2
NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50
CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFw
cm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0
VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZv
cm1mdihHTHVpbnQgcHJvCiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTM4NDAsMTcgKzQwMzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRuVW5pZm9ybWl2RVhUKEdMdWludAogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwg
JmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVu
aWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3Jt
aXYoR0x1aW50IHBybwogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFy
YW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0
aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zOTMwLDEy
ICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW4KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUp
OworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihu
YW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01
MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgfQogCisgICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vj
b25kYXJ5IGtleSBiZWxvdykKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV82XzU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80Ogor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICAgIGNhc2UgR0xf
SEFMRl9GTE9BVF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsg
PHR5cGU+IGNvbWJpbmF0aW9ucworICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0
cyBJTlZBTElEX0VOVU0KKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21i
aW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCiAgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKQEAgLTUwMjQsNyArNTI0Miw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAg
ICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBH
TF9SR0I6CkBAIC01MDM2LDcgKzUyNTQsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQo
R0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyArNTI2Nyw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9CR1JB
X0VYVDoKQEAgLTUwNTgsNyArNTI3Niw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChH
TGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAv
LyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwpA
QCAtNTA2Niw4ICs1Mjg0LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2UKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6
CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgogICAg
ICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4MywyMyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9U
RVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRh
IGFuZCBtdWx0aXBsZSBsZXZlbHMsCisgICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRo
X3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwg
bGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTQxNiw2ICs1NjcwLDI1IEBAIHZvaWQgX19zdGRj
YWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEFOR0xF
X2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCisgICAgICAgICAg
ICAgICAgaWYgKGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3NTcsOSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWdsOjpDaGVja1RleHR1
cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRo
ID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgIGlmICghY2hl
Y2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlzIHNldCBieSBoZWxwZXIg
ZnVuY3Rpb24KICAgICAgICAgfQogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CkBAIC01NTE3LDExICs1Nzg1LDI5IEBAIHZvaWQgX19zdGRj
YWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0
cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwg
cGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1
YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZl
bCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFn
ZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwg
Zm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyArNTgxNSw3IEBAIHZvaWQgX19zdGRjYWxsIGds
VGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVt
YXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhmYWxzZSwgd2lk
dGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCisg
ICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0
aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1
cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3Vi
SW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2MjIsNyArNTkx
NCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NzE0LDcgKzYw
MTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU3NjAsNyArNjA3MCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0zZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYobG9j
YXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTgwNiw3ICs2
MTIyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zaXYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CkBAIC01ODUyLDcgKzYxNzQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5
KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4OTgsNyAr
NjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9u
LCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybU1hdHJpeDJmdihHTGludCAKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTU5NzgsNyArNjMxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0
cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2
KEdMaW50IAogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjA1
NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncgog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb2dy
YW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmIChw
cm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQgX19zdGRjYWxs
IGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGEKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGds
R2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJv
Z3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmluYXJ5Rm9ybWF0
ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZlNp
emUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlGb3JtYXQgPSBH
TF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYmluYXJ5
LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJp
bmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVkKSIsCisgICAg
ICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3Qt
PnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAg
ICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MjQsOCBAQCBfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJh
eXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5
T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9n
cmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9
OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBz
aXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagkocmV2aXNp
b24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNiArNDAxLDEwIEBACiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVl
cnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5Lmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnku
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKICAg
ICB9CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChHTGludCB4LCBHTGludCB5
LCBHTGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAgIFJFQ1QgcmVj
dCA9IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geSAtIGgsCi0gICAgICAg
ICAgICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geX07Ci0g
ICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KEdM
aW50IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQpCi17Ci0gICAgcmV0dXJu
IHN1cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5lIEdMZW51bSBhZGp1c3RX
aW5kaW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5kaW5nID09IEdMX0NXIHx8
IHdpbmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9PSBHTF9DVyA/IEdMX0ND
VyA6IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQogewogICAgIHN0YXRp
YyBib29sIGNoZWNrZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9y
bWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQorewor
ICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAgICAgIGZvcm1hdCA9
PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0
ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEgQEAgaW50IENv
bXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbgogICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80OgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgog
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09F
UzoKKyAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAgY2FzZSBHTF9G
TE9BVDoKICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsKQEAgLTMzMyw1MyArMzQ4
LDYgQEAgYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZwogICAgIHJldHVy
biB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdl
dCk7CiB9CiAKLS8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJp
bmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdC
OgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9SR0JBKTsKLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGlu
dGVybmFsZm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCkBAIC00MDcsNiAr
Mzc1LDkgQEAgR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybQogICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5B
TkNFOwogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1
cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9ERVBU
SF9DT01QT05FTlQ7CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAg
ICAgIHJldHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQK
ICAgICB9CiB9CkBAIC00MzgsNiArNDA5LDkgQEAgR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBp
bnRlcm5hbGZvcm1hdAogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAgIGNh
c2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVE
X0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJl
dHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84
X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC02MzgsOSArNjEyLDYg
QEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIAogewogICAgIEQzRENV
QkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOwogCi0gICAgLy8g
TWFwIGEgY3ViZSBtYXAgdGV4dHVyZSB0YXJnZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgIEQzRCBz
dXJmYWNlIGluZGV4LiBOb3RlIHRoYXQgdGhlCi0gICAgLy8gWSBmYWNlcyBhcmUgc3dhcHBlZCBi
ZWNhdXNlIHRoZSBZIGNvb3JkaW5hdGUgdG8gdGhlIHRleHR1cmUgbG9va3VwIGludHJpbnNpYyBm
dW5jdGlvbnMKLSAgICAvLyBhcmUgbmVnYXRlZCBpbiB0aGUgcGl4ZWwgc2hhZGVyLgogICAgIHN3
aXRjaCAoY3ViZUZhY2UpCiAgICAgewogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6CkBAIC02NTAsMTAgKzYyMSwxMCBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRD
dWJlRmFjZShHTGVudW0gCiAgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVf
WDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOworICAgICAg
ICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBE
M0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWTsKKyAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFD
RV9ORUdBVElWRV9ZOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgogICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZF
X1o7CkBAIC03NjcsNiArNzM4LDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQoR0xlbgogewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNhc2UgR0xfTk9O
RTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNhc2UgR0xfUkdC
QTQ6CiAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAg
ICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAtNzk0LDYgKzc2NiwxMCBAQCBuYW1l
c3BhY2UgZHgyZXMKIAogdW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVu
Y2lsRm9ybWF0KQogeworICAgIGlmIChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQogICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQog
ICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKQEAgLTkwNCw2ICs4ODAsMTAgQEAgdW5z
aWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvcgogCiB1bnNpZ25lZCBpbnQgR2V0
RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCkKIHsKKyAgICBpZiAoZGVwdGhGb3JtYXQg
PT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gMjQ7CisgICAgfQogICAgIHN3
aXRjaCAoZGVwdGhGb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxF
OiAgcmV0dXJuIDE2OwpAQCAtOTY1LDYgKzk0NSwxNiBAQCBib29sIElzRmxvYXQxNkZvcm1hdChE
M0RGT1JNQVQgc3VyZmFjZUZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhU
ZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJldHVybiAoc3Vy
ZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZv
cm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZhY2VGb3Jt
YXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1w
bGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBEM0RN
VUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xlbnVtIENvbnZl
cnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVAogCiBHTGVudW0gQ29udmVydERlcHRoU3RlbmNp
bEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lO
VFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAg
fQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNjoKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRp
ZXMuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5j
bHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1B
VCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1U
X05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5h
bWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdM
c2l6ZWkgd2lkdGgsIEdMZW4KIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVp
IHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDb21w
cmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0
KTsKIGJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZv
cm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOwogR0xlbnVtIEV4dHJhY3RGb3Jt
YXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50
ZXJuYWxmb3JtYXQpOwogCkBAIC03OSw2ICs4Miw4IEBAIEdMdWludCBHZXREZXB0aFNpemUoRDNE
Rk9STUFUIGRlcHRoRm9ybWEKIEdMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNp
bEZvcm1hdCk7CiBib29sIElzRmxvYXQzMkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7
CiBib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElz
RGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jvb2wgSXNTdGVu
Y2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdMc2l6ZWkgR2V0
U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDYtMjggIE1heCBWdWpv
dmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSBpbiBXZWJL
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRl
IEFOR0xFIHRvIHIxMTcwLCB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKworICAg
ICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Yy5jcHAgdG8gRGlhZ25vc3RpY0Jhc2UuY3BwLgorICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgdG8gRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwLgorCisgICAgICAgIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBBTkdM
RSdzIG5ldyBwcmVwcm9jZXNzb3IsIHRoZXJlIHdlcmUgdHdvIGZpbGVzIG5hbWVkIERpYWdub3N0
aWMuY3BwCisgICAgICAgIGluIEFOR0xFIHVuZGVyIGRpZmZlcmVudCBmb2xkZXJzLiBUaGlzIGNh
dXNlZCBwcm9ibGVtcyBvbiB0aGUgUVQgYnVpbGQgd2hlbiB0aGVpciBvYmplY3QKKyAgICAgICAg
ZmlsZXMsIGJvdGggbmFtZWQgRGlhZ25vc3RpYy5vLCB0cmllZCB0byBnbyBpbiB0aGUgc2FtZSBm
b2xkZXIuIFJlbmFtaW5nIG9uZSBvZiB0aGVtIHRvCisgICAgICAgIERpYWdub3N0aWNCYXNlLmNw
cCBhdm9pZHMgdGhpcyBjb25mbGljdC4gVGhlIHNhbWUgc2l0dWF0aW9uIG9jY3VycmVkIHdpdGgK
KyAgICAgICAgRGlyZWN0aXZlSGFuZGxlci5jcHAuIEkgd2lsbCB0cnkgdG8gZ2V0IHRoZWlyIG5h
bWVzIGNoYW5nZWQgaW4gQU5HTEUgZm9yIGZ1dHVyZSB1cGRhdGVzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorCiAyMDEyLTA3LTEwICBTdWRhcnNhbmEgTmFnaW5lbmkgIDxzdWRhcnNhbmEubmFnaW5lbmlA
bGludXguaW50ZWwuY29tPgogCiAgICAgICAgIFtHVEtdIEZpeCBtZW1vcnkgbGVha3MgYnkgYWRv
cHRpbmcgYWxsb2NhdGlvbiBvZiBHZGtQaXhidWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMxOCw3ICsyMzE4LDIwIEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
ZGVHZW5HTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvQ29tcGlsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9EaWFnbm9zdGljcy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nX2xleC5jcHAKQEAgLTIzMjYsNiArMjMzOSw3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3Bw
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
RGxsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcApAQCAtMjMzOCwyMiArMjM1
Miw1MiBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cHN0cnVjdC5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFn
bm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVI
YW5kbGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIu
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvSW5wdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vz
c29yLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4u
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3lt
Ym9scy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTkw
OCw4ICs1OTA4LDIxIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlYnVnLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5o
IFwKQEAgLTU5MjIsNiArNTkzNSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1l
ZGlhdGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91
dC5jcHAgXApAQCAtNTk0NSw2ICs1OTU5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAgXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKQEAgLTU5
NTQsNiArNTk2OSwyOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvRXhwYW5kZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgXApAQCAtNTk2Nyw2
ICs2MDA1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKQEAgLTU5NzUsNiArNjAxNCwxMCBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVy
c2lvbkdMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVy
c2lvbkdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKQEAgLTU5
ODIsOCArNjAyNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29w
eSkKQEAgLTM5ODIsNyArMzk4MiwxMyBAQCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dS
QVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21tb24uaCBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAor
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29u
dGludWl0eS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vy
c2lvbi5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCkBAIC0zOTk3LDExICs0MDAz
LDI0IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01NYXAuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1ByYWdtYS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NvbXBpbGUuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2xlbmd0aF9saW1pdHMuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBcCkBAIC00MDE2LDE0ICs0MDM1LDE3IEBAIGNv
bnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvUmVtb3ZlVHJlZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFt
ZUZ1bmN0aW9uLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3lt
Ym9sLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKKyAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yR0xTTC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JITFNMLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0g
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKQEAgLTQwMzYsMTMgKzQwNTgsMjEgQEAgY29u
dGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9kZWJ1Zy5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKyAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250
aW51aXR5LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1
cnNpb24uY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNz
LmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVy
LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNw
cCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcIAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBcCkBAIC00MDYwLDEwICs0MDkwLDEyIEBAIGNvbnRh
aW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwIFwKLSAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQwNzQsNiArNDEwNiwxNyBA
QCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5j
cHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKyAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyby5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
Y3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmMgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuYyBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151538</attachid>
            <date>2012-07-10 15:33:38 -0700</date>
            <delta_ts>2012-07-16 11:48:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039-svn-2.patch</filename>
            <type>text/plain</type>
            <size>1287236</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDExNjIgQEAKKzIwMTItMDctMTAgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgor
CisgICAgICAgIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVh
biBKYWNrc29uLgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byByMTE3MCwgd2l0aCB0aGUgZm9s
bG93aW5nIG1vZGlmaWNhdGlvbnM6CisKKyAgICAgICAgUmVuYW1lIEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWMuY3BwIHRvIERpYWdub3N0aWNCYXNlLmNwcC4K
KyAgICAgICAgUmVuYW1lIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXIuY3BwIHRvIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcC4KKworICAgICAgICBX
aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQU5HTEUncyBuZXcgcHJlcHJvY2Vzc29yLCB0aGVyZSB3
ZXJlIHR3byBmaWxlcyBuYW1lZCBEaWFnbm9zdGljLmNwcAorICAgICAgICBpbiBBTkdMRSB1bmRl
ciBkaWZmZXJlbnQgZm9sZGVycy4gVGhpcyBjYXVzZWQgcHJvYmxlbXMgb24gdGhlIFFUIGJ1aWxk
IHdoZW4gdGhlaXIgb2JqZWN0CisgICAgICAgIGZpbGVzLCBib3RoIG5hbWVkIERpYWdub3N0aWMu
bywgdHJpZWQgdG8gZ28gaW4gdGhlIHNhbWUgZm9sZGVyLiBSZW5hbWluZyBvbmUgb2YgdGhlbSB0
bworICAgICAgICBEaWFnbm9zdGljQmFzZS5jcHAgYXZvaWRzIHRoaXMgY29uZmxpY3QuIFRoZSBz
YW1lIHNpdHVhdGlvbiBvY2N1cnJlZCB3aXRoCisgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
LiBJIHdpbGwgdHJ5IHRvIGdldCB0aGVpciBuYW1lcyBjaGFuZ2VkIGluIEFOR0xFIGZvciBmdXR1
cmUgdXBkYXRlcy4KKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAgICAgKiBpbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHNyYy9jb21tb24vYW5nbGV1dGlscy5oOgorICAg
ICAgICAqIHNyYy9jb21tb24vdmVyc2lvbi5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWls
dEluRnVuY3Rpb25FbXVsYXRvci5jcHA6CisgICAgICAgIChCdWlsdEluRnVuY3Rpb25FbXVsYXRv
cjo6SWRlbnRpZnlGdW5jdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKGlzV2ViR0xCYXNlZFNwZWMpOgorICAgICAgICAoVENvbXBpbGVyOjpjb21waWxlKToK
KyAgICAgICAgKFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcik6CisgICAgICAgIChUQ29tcGls
ZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZv
cmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVy
OjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OkRl
dGVjdExvb3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZSk6CisgICAgICAgIChzaCk6CisgICAgICAg
IChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKHNo
OjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoc2g6
OmNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50
T3BlcmF0aW9uOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6RGV0ZWN0R3JhZGllbnRPcGVyYXRp
b246OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6Y29udGFpbnNHcmFkaWVudE9wZXJhdGlvbik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaDogQWRkZWQuCisg
ICAgICAgIChzaCk6CisgICAgICAgIChEZXRlY3RMb29wRGlzY29udGludWl0eSk6CisgICAgICAg
IChEZXRlY3RHcmFkaWVudE9wZXJhdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpYWdu
b3N0aWNzLmNwcDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyk6
CisgICAgICAgIChURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdu
b3N0aWNzOjp3cml0ZUluZm8pOgorICAgICAgICAoVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKToK
KyAgICAgICAgKFREaWFnbm9zdGljczo6cHJpbnQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9E
aWFnbm9zdGljcy5oOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGljcyk6CisgICAgICAgIChU
RGlhZ25vc3RpY3M6OmluZm9TaW5rKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0QmVoYXZpb3IpOgorICAgICAgICAoVERp
cmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVI
YW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6
OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEp
OgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbik6CisgICAgICAg
IChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChURGlyZWN0aXZlSGFuZGxl
cik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6cHJhZ21hKToKKyAgICAgICAgKFREaXJl
Y3RpdmVIYW5kbGVyOjpleHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0V4dGVuc2lvbkJlaGF2aW9yLmg6CisgICAgICAgIChnZXRCZWhhdmlvclN0cmluZyk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAgICAoQnVpbHRJbkNvbnN0
YW50cyk6CisgICAgICAgIChUQnVpbHRJbnM6OmluaXRpYWxpemUpOgorICAgICAgICAoSWRlbnRp
ZnlCdWlsdElucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCk6Cisg
ICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAoSW5pdGlhbGl6ZUdsb2Jh
bFBhcnNlQ29udGV4dCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0KToKKyAgICAgICAgKEdl
dEdsb2JhbFBhcnNlQ29udGV4dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaDoKKyAgICAgICAgKFRUaHJlYWRQYXJzZUNvbnRleHRSZWMpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoVEludGVybWVkaWF0
ZTo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAg
ICAgKHNoOjpzdHIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Ok91dHB1dEhMU0wpOgorICAg
ICAgICAoc2g6Ok91dHB1dEhMU0w6On5PdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRI
TFNMOjpvdXRwdXQpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAg
IChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6
OnZpc2l0VW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToK
KyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6
T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0cmF2ZXJz
ZVN0YXRlbWVudHMpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6Omhh
bmRsZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnR5cGVTdHJpbmcp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKHNo
OjpPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oOgorICAgICAgICAoc2gpOgorICAgICAgICAoT3V0cHV0SExTTCk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OnBhcnNlVmVjdG9yRmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4
RmllbGRzKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVycm9yKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6dHJhY2UpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3Ip
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OmNvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJy
b3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6dm9pZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hl
Y2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJh
eVR5cGVFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUpOgorICAgICAgICAo
VFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUpOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OmZpbmRGdW5jdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlh
bGl6ZXIpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbik6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0TWF0cml4Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9k
ZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdCk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKToKKyAgICAgICAgKFBhUGFyc2VTdHJpbmdz
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaDoKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNlQ29udGV4dCk6CisgICAg
ICAgIChUUGFyc2VDb250ZXh0OjppbmZvU2luayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25CZWhhdmlvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwcmFnbWEpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAgICAoVEFsbG9jYXRpb246
OmNoZWNrR3VhcmRCbG9jayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ByYWdtYS5oOiBBZGRl
ZC4KKyAgICAgICAgKFRQcmFnbWEpOgorICAgICAgICAoVFByYWdtYTo6VFByYWdtYSk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoUmVu
YW1lRnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OlJlbmFtZUZ1bmN0aW9uKToK
KyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXIpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKGdldFZhcmlhYmxlSW5mbyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKFRUeXBlOjpi
dWlsZE1hbmdsZWROYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
Y3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdCk6CisgICAg
ICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZSk6Cisg
ICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6CisgICAgICAgIChz
aDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6VW5m
b2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVuZm9sZFNob3J0Q2ly
Y3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmguCisgICAgICAgIChzaCk6CisgICAgICAgIChVbmZv
bGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVidWcuY3BwOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaDo6flREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6
Y3JlYXRlQXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rp
b25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6
OmNyZWF0ZUxvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5n
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFk
ZGVkLgorICAgICAgICAoVEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhO
b2RlKToKKyAgICAgICAgKFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFw
aFBhcmVudE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9k
ZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAg
ICAgIChUR3JhcGhQYXJlbnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFw
aEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6Cisg
ICAgICAgIChUR3JhcGhBcmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFw
aEFyZ3VtZW50OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1l
bnQ6OmdldEFyZ3VtZW50TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAg
IChUR3JhcGhGdW5jdGlvbkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdy
YXBoRnVuY3Rpb25DYWxsOjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBo
U3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAg
KFRHcmFwaFN5bWJvbDo6flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6Omdl
dEludGVybVN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdy
YXBoU2VsZWN0aW9uOjpUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9u
Ojp+VEdyYXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJt
U2VsZWN0aW9uKToKKyAgICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6
VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAg
IChUR3JhcGhMb29wOjpnZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6
CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChU
R3JhcGhMb2dpY2FsT3A6On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNh
bE9wOjpnZXRJbnRlcm1Mb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoOjplbmQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9s
cyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6
OmdldERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVu
dERlcHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERl
cHRoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRBc3NpZ25tZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRC
aW5hcnlDaGlsZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRT
ZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNU
b1NpbmdsZU5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIp
OgorICAgICAgICAoVE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VE5vZGVTZXRTdGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJ
bnRvTmV4dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFj
azo6aW5zZXJ0SW50b1RvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2Rl
U2V0TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVT
ZXRNYWludGFpbmVyOjp+VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJv
cGFnYXRpbmdNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpU
Tm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWlu
ZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRp
bmdNYWludGFpbmVyOjp+VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFp
bnRhaW5lcjo6flRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0
Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNl
bGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3ApOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oOiBBZGRl
ZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAgICAgICAoVERlcGVuZGVu
Y3lHcmFwaE91dHB1dDo6VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChUR3JhcGhOb2RlOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp0
cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVyc2UpOgorICAgICAgICAo
VEdyYXBoRnVuY3Rpb25DYWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OnRy
YXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UpOgorICAgICAgICAo
VEdyYXBoTG9vcDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJz
ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvZ2xzbGFuZy5sOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLnk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAgICAgKHl5X2dldF9wcmV2
aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKHN0cmlu
Z19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGdsc2xhbmdfZmluYWxpemUp
OgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFu
Z190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdh
dGU6OlRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6flRJbnRl
cm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6
CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlKToKKyAgICAgICAgKFRJbnRlcm1UcmF2ZXJzZXI6
On5USW50ZXJtVHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmM6CisgICAgICAgIChG
aW5kSGFzaExvYyk6CisgICAgICAgIChQcmludEF0b21UYWJsZSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYzoKKyAgICAgICAgKENQUHByYWdtYSk6CisgICAgICAg
IChyZWFkQ1BQbGluZSk6CisgICAgICAgIChQcmVkZWZpbmVJbnRNYWNybyk6CisgICAgICAgIChN
YWNyb0V4cGFuZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaDoK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oOiBB
ZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpYWdub3N0aWNzKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKToK
KyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6cmVwb3J0KToKKyAgICAgICAgKHBwOjpEaWFnbm9z
dGljczo6c2V2ZXJpdHkpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZUhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChEaXJl
Y3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVIYW5kbGVyQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAo
cHA6OkRpcmVjdGl2ZUhhbmRsZXI6On5EaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGdldERpcmVjdGl2ZSk6CisgICAgICAgIChpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKToK
KyAgICAgICAgKGlzRU9EKToKKyAgICAgICAgKHNraXBVbnRpbEVPRCk6CisgICAgICAgIChpc01h
Y3JvTmFtZVJlc2VydmVkKToKKyAgICAgICAgKGlzTWFjcm9QcmVkZWZpbmVkKToKKyAgICAgICAg
KHBwKToKKyAgICAgICAgKERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJz
ZXI6OkRlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6Cisg
ICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAo
cHA6OkRpcmVjdGl2ZVBhcnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRGlyZWN0aXZlKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVm
aW5lKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUlmZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
SWZuZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAg
ICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUVycm9yKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUxpbmUpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6c2tp
cHBpbmcpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElm
KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaDogQWRk
ZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAo
Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpDb25kaXRp
b25hbEJsb2NrOjpDb25kaXRpb25hbEJsb2NrKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAu
CisgICAgICAgICh5eXN5bnRheF9lcnJvcik6CisgICAgICAgICh5eWxleCk6CisgICAgICAgICh5
eWVycm9yKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpFeHByZXNzaW9uUGFyc2VyOjpF
eHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKHBwOjpFeHByZXNzaW9uUGFyc2VyOjpwYXJzZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKEV4cHJlc3Npb25QYXJzZXIpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
eTogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
Y3BwOgorICAgICAgICAocHA6OklucHV0OjpJbnB1dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnJl
YWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0Lmg6Cisg
ICAgICAgIChwcCk6CisgICAgICAgIChJbnB1dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OmNvdW50
KToKKyAgICAgICAgKHBwOjpJbnB1dDo6c3RyaW5nKToKKyAgICAgICAgKHBwOjpJbnB1dDo6bGVu
Z3RoKToKKyAgICAgICAgKExvY2F0aW9uKToKKyAgICAgICAgKHBwOjpJbnB1dDo6TG9jYXRpb246
OkxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpJbnB1dDo6cmVhZExvYyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBw
KToKKyAgICAgICAgKHBwOjpMZXhlcjo6fkxleGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAg
KExleGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHA6CisgICAgICAgIChwcDo6TWFjcm86OmVxdWFscyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaDoKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpN
YWNybzo6TWFjcm8pOgorICAgICAgICAoTWFjcm8pOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBwKToK
KyAgICAgICAgKFRva2VuTGV4ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4ZXI6OlRva2VuTGV4
ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4ZXI6OmxleCk6CisgICAgICAgIChwcDo6TWFjcm9F
eHBhbmRlcjo6TWFjcm9FeHBhbmRlcik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6fk1h
Y3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmxleCk6CisgICAgICAg
IChwcDo6TWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OnVuZ2V0VG9rZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2Vu
TGVmdFBhcmVuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8pOgorICAg
ICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKToKKyAgICAgICAgKHBwOjpNYWNyb0V4
cGFuZGVyOjpleHBhbmRNYWNybyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Y29sbGVj
dE1hY3JvQXJncyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFy
YW1zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFu
ZGVyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoTWFjcm9FeHBhbmRlcik6Cisg
ICAgICAgIChNYWNyb0NvbnRleHQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3Jv
Q29udGV4dDo6TWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNy
b0NvbnRleHQ6OmVtcHR5KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRl
eHQ6OmdldCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0Ojp1bmdl
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29y
LmNwcDoKKyAgICAgICAgKFByZXByb2Nlc3NvckltcGwpOgorICAgICAgICAocHA6OlByZXByb2Nl
c3NvckltcGw6OlByZXByb2Nlc3NvckltcGwpOgorICAgICAgICAocHApOgorICAgICAgICAocHA6
OlByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6
On5QcmVwcm9jZXNzb3IpOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6aW5pdCk6CisgICAg
ICAgIChwcDo6UHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyk6CisgICAgICAgIChwcDo6UHJl
cHJvY2Vzc29yOjpsZXgpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5oOgorICAgICAgICAocHApOgorICAgICAgICAoUHJlcHJvY2Vzc29yKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6U291
cmNlTG9jYXRpb24pOgorICAgICAgICAoU291cmNlTG9jYXRpb24pOgorICAgICAgICAocHA6OlNv
dXJjZUxvY2F0aW9uOjplcXVhbHMpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAocHA6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmNwcDoKKyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAocHA6
OlRva2VuOjplcXVhbHMpOgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKToK
KyAgICAgICAgKHBwOjpUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwKToK
KyAgICAgICAgKHBwOjpUb2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQpOgorICAgICAgICAocHA6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmg6CisgICAgICAgIChwcDo6VG9rZW46OlRva2VuKToKKyAgICAgICAgKFRva2VuKToKKyAg
ICAgICAgKHBwOjpUb2tlbjo6YXRTdGFydE9mTGluZSk6CisgICAgICAgIChwcDo6VG9rZW46Omhh
c0xlYWRpbmdTcGFjZSk6CisgICAgICAgIChwcDo6VG9rZW46OmV4cGFuc2lvbkRpc2FibGVkKToK
KyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHl5X2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgICh5
eV90cmFuc19pbmZvKToKKyAgICAgICAgKHl5Z3V0c190KToKKyAgICAgICAgKHl5X2dldF9wcmV2
aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGlucHV0
KToKKyAgICAgICAgKHBwcmVzdGFydCk6CisgICAgICAgIChwcF9zd2l0Y2hfdG9fYnVmZmVyKToK
KyAgICAgICAgKHBwX2xvYWRfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBwX2NyZWF0ZV9idWZm
ZXIpOgorICAgICAgICAocHBfZGVsZXRlX2J1ZmZlcik6CisgICAgICAgIChwcF9pbml0X2J1ZmZl
cik6CisgICAgICAgIChwcF9mbHVzaF9idWZmZXIpOgorICAgICAgICAocHBwdXNoX2J1ZmZlcl9z
dGF0ZSk6CisgICAgICAgIChwcHBvcF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBlbnN1cmVf
YnVmZmVyX3N0YWNrKToKKyAgICAgICAgKHBwX3NjYW5fYnVmZmVyKToKKyAgICAgICAgKHBwX3Nj
YW5fc3RyaW5nKToKKyAgICAgICAgKHBwX3NjYW5fYnl0ZXMpOgorICAgICAgICAoeXlfZmF0YWxf
ZXJyb3IpOgorICAgICAgICAocHBnZXRfZXh0cmEpOgorICAgICAgICAocHBnZXRfbGluZW5vKToK
KyAgICAgICAgKHBwZ2V0X2NvbHVtbik6CisgICAgICAgIChwcGdldF9pbik6CisgICAgICAgIChw
cGdldF9vdXQpOgorICAgICAgICAocHBnZXRfbGVuZyk6CisgICAgICAgIChwcGdldF90ZXh0KToK
KyAgICAgICAgKHBwc2V0X2V4dHJhKToKKyAgICAgICAgKHBwc2V0X2xpbmVubyk6CisgICAgICAg
IChwcHNldF9jb2x1bW4pOgorICAgICAgICAocHBzZXRfaW4pOgorICAgICAgICAocHBzZXRfb3V0
KToKKyAgICAgICAgKHBwZ2V0X2RlYnVnKToKKyAgICAgICAgKHBwc2V0X2RlYnVnKToKKyAgICAg
ICAgKHBwZ2V0X2x2YWwpOgorICAgICAgICAocHBzZXRfbHZhbCk6CisgICAgICAgIChwcGdldF9s
bG9jKToKKyAgICAgICAgKHBwc2V0X2xsb2MpOgorICAgICAgICAocHBsZXhfaW5pdCk6CisgICAg
ICAgIChwcGxleF9pbml0X2V4dHJhKToKKyAgICAgICAgKHl5X2luaXRfZ2xvYmFscyk6CisgICAg
ICAgIChwcGxleF9kZXN0cm95KToKKyAgICAgICAgKHl5X2ZsZXhfc3RybmNweSk6CisgICAgICAg
ICh5eV9mbGV4X3N0cmxlbik6CisgICAgICAgIChwcGFsbG9jKToKKyAgICAgICAgKHBwcmVhbGxv
Yyk6CisgICAgICAgIChwcGZyZWUpOgorICAgICAgICAocHApOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6VG9rZW5pemVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6On5Ub2tlbml6ZXIpOgor
ICAgICAgICAocHA6OlRva2VuaXplcjo6aW5pdCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpz
ZXRGaWxlTnVtYmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIpOgor
ICAgICAgICAocHA6OlRva2VuaXplcjo6bGV4KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6Omlu
aXRTY2FubmVyKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaDogQWRkZWQu
CisgICAgICAgIChwcCk6CisgICAgICAgIChUb2tlbml6ZXIpOgorICAgICAgICAoQ29udGV4dCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmw6IEFk
ZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3Bh
cnNlci5zaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sOiBS
ZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnk6IFJl
bW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90
YWIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF91dGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcmVwcm9jZXNzb3IudmNwcm9qOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmg6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6CisgICAgICAgIChJbml0U2Nhbm5lcklucHV0KToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jOgorICAgICAgICAoUmVhZFRva2VuKToKKyAgICAg
ICAgKER1bXBUb2tlblN0cmVhbSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci90b2tlbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyk6CisgICAgICAgIChS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25D
YWxsVXNhZ2UpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5F
cnJvcik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5n
T3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRBcmd1bWVu
dCk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlv
bik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvb3ApOgor
ICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3ApOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcpOgorICAg
ICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6bnVtRXJyb3JzKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDogQWRk
ZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1ib2wpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyk6CisgICAgICAg
IChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcp
OgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0cmljdGlv
bnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6Cisg
ICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAgICAgICAgKGVnbCk6CisgICAgICAg
IChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpE
aXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5Lmg6
CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAgKGVnbCk6CisgICAgICAg
IChlZ2w6OlN1cmZhY2U6On5TdXJmYWNlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6aW5pdGlh
bGl6ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVhc2UpOgorICAgICAgICAoZWdsOjpT
dXJmYWNlOjpyZXNldFN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXBSZWN0
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZVdpbmRvd1Byb2MpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzdWJjbGFzc1dp
bmRvdyk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3cpOgorICAgICAg
ICAoZWdsOjpTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbik6CisgICAgICAgIChl
Z2w6OlN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3
YXApOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6Z2V0V2lkdGgpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRIZWlnaHQp
OgorICAgICAgICAoZWdsOjpTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRPZmZzY3Jl
ZW5UZXh0dXJlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c2V0U3dhcEludGVydmFsKToKKyAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChlZ2w6OlN1
cmZhY2U6OmdldFRleHR1cmVUYXJnZXQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRCb3Vu
ZFRleHR1cmUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRCb3VuZFRleHR1cmUpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpnZXRGb3JtYXQpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3Vy
ZmFjZS5oOgorICAgICAgICAoU3VyZmFjZSk6CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wu
Y3BwOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Q29udGV4dCk6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
fkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
bWFya0R4VW5pZm9ybXNEaXJ0eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFya0NvbnRleHRM
b3N0KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRDbGVhckNvbG9yKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVh
ckRlcHRoKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnNldEN1bGxGYWNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0N1
bGxGYWNlRW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Q3VsbE1vZGUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyb250RmFjZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0RGVwdGhUZXN0KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldERlcHRoRnVuYyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c2V0RGVwdGhSYW5nZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0QmxlbmQpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmlzQmxlbmRFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRCbGVuZEZhY3RvcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJsZW5kQ29s
b3IpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEJsZW5kRXF1YXRpb24pOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxUZXN0KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1N0
ZW5jaWxUZXN0RW5hYmxlZCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbFBhcmFt
cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbEJhY2tQYXJhbXMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2spOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRT
dGVuY2lsT3BlcmF0aW9ucyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0U3RlbmNpbEJhY2tP
cGVyYXRpb25zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbCk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFBvbHlnb25PZmZzZXRQYXJhbXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpzZXRTYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNTYW1wbGVDb3Zl
cmFnZUVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFy
YW1zKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRTY2lzc29yVGVzdCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldERpdGhlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNEaXRoZXJFbmFibGVkKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRMaW5lV2lkdGgpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnNldEdlbmVyYXRlTWlwbWFwSGludCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0Vmlld3Bv
cnRQYXJhbXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldENvbG9yTWFzayk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c2V0RGVwdGhNYXNrKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRBY3RpdmVTYW1wbGVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRBcnJheUJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QWN0aXZlUXVl
cnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRl
eEF0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFBhY2tBbGlnbm1lbnQpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFVucGFja0FsaWdubWVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VW5w
YWNrQWxpZ25tZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09y
ZGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVNoYWRlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVGcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlRmVuY2UpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRl
VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6ZGVsZXRlRmVuY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVF1ZXJ5KToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6YmluZEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kRWxl
bWVudEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZTJEKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJp
bmREcmF3RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnVzZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmJlZ2luUXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmVuZFF1ZXJ5KToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8pOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRGZW5jZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0UXVlcnkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5
QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dEZsb2F0dik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U3RhdGUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBs
eVNoYWRlcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5VGV4dHVyZXMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNsZWFy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN5bmMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmRyYXdMaW5lTG9vcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVj
b3JkSW52YWxpZEVudW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1
ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbik6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0RXJyb3IpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlc2V0U3RhdHVzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNTaGFkZXJNb2RlbDMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c0V2ZW50UXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnN1cHBvcnRzRFhUNVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MzJSZW5kZXJhYmxlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFi
bGVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1l
bnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVu
c2lvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0
c05vblBvd2VyMlRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzSW5zdGFu
Y2luZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoQnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpkZXRhY2hUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Y3VsbFNraXBzRHJhdyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aXNUcmlh
bmdsZU1vZGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJp
bmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmVyU3RyaW5nKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OlZlcnRleERlY2xh
cmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUpOgorICAgICAgICAoZ2w6OlZlcnRl
eERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9uKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZy
YW1lYnVmZmVyKToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0
TnVsbENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNz
KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6CisgICAgICAgIChGcmFt
ZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAgICAg
KGdsKToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3Mp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgor
ICAgICAgICAoZ2w6OkluZm9Mb2c6OkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6On5J
bmZvTG9nKToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjpnZXRMZW5ndGgpOgorICAgICAgICAoZ2w6
OkluZm9Mb2c6OmdldExvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kU2FuaXRpemVk
KToKKyAgICAgICAgKGdsOjpJbmZvTG9nOjphcHBlbmQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6
OnJlc2V0KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjp+UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5k
aW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpiaW5k
QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmspOgorICAgICAg
ICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFByb2dyYW1C
aW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnNldFByb2dyYW1CaW5hcnkpOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06
OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZSk6
CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQpOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChn
bDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0
QWN0aXZlVW5pZm9ybUNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlm
b3JtTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp2YWxpZGF0ZSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJv
Z3JhbS5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAg
ICAgICAoSW5mb0xvZyk6CisgICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwLgorICAgICAgICAoZ2w6OnN0cik6CisgICAgICAg
IChnbCk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6VW5pZm9ybSk6CisgICAgICAgIChnbDo6VW5p
Zm9ybTo6flVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OmlzQXJyYXkpOgorICAgICAg
ICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxT
aGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5kZXgpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVu
aWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFm
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6CisgICAgICAgIChnbDo6dHJhbnNwb3NlTWF0cml4KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGlydHlB
bGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtcyk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGluayk6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJpYnV0ZXMpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6ZGVmaW5lVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y3JlYXRl
VW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uYnYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtMWl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdik6
CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtNGl2KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRy
aWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0
aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUpOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2FtcGxlcnMpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXREeERlcHRoTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dER4Q29vcmRMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RnJv
bnRDQ1dMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNP
ckxpbmVzTG9jYXRpb24pOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uaC4KKyAgICAgICAgKGdsKToKKyAgICAgICAgKFVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVu
aWZvcm06OlJlZ2lzdGVySW5mbzo6UmVnaXN0ZXJJbmZvKToKKyAgICAgICAgKFJlZ2lzdGVySW5m
byk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6UmVnaXN0ZXJJbmZvOjpzZXQpOgorICAgICAgICAo
VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoU2Ft
cGxlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAg
ICAoZ2wpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVy
VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJi
dWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRk
UHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVBy
b3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdl
dCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcyk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCk6CisgICAgICAg
IChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChnbCk6CisgICAgICAgIChSZW5k
ZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmNwcDoKKyAgICAgICAgKGdsOjpTaGFk
ZXI6OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6Z2V0U291cmNlSW1wbCk6Cisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaDoKKyAgICAgICAgKFNoYWRlcik6CisgICAg
ICAgIChWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6
CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29udmVydFRleHR1cmVGb3JtYXRUeXBlKToK
KyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKToKKyAgICAgICAgKGdsOjpH
ZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpJbWFnZSk6CisgICAgICAgIChn
bDo6SW1hZ2U6On5JbWFnZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OnJlZGVmaW5lKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvY2sp
OgorICAgICAgICAoZ2w6OkltYWdlOjp1bmxvY2spOgorICAgICAgICAoZ2w6OkltYWdlOjppc1Jl
bmRlcmFibGVGb3JtYXQpOgorICAgICAgICAoZ2w6OkltYWdlOjpnZXREM0RGb3JtYXQpOgorICAg
ICAgICAoZ2w6OkltYWdlOjpnZXRTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6c2V0TWFu
YWdlZFN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjp1cGRhdGVTdXJmYWNlKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQWxwaGFE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRGF0YVNTRTIpOgorICAgICAgICAo
Z2w6OkltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
QWxwaGFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWlu
YW5jZUFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JVQnl0
ZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCNTY1RGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdC
SGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NF
Mik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JB
NTU1MURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YSk6CisgICAg
ICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRCR1JBRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmNvcHkpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9y
YWdlOjpUZXh0dXJlU3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6On5UZXh0
dXJlU3RvcmFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKToKKyAgICAgICAgKGds
OjpUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6
OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlh
bCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6flRl
eHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldE1pbkZpbHRlcik6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6c2V0TWFnRmlsdGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRXcmFw
Uyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0V3JhcFQpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6OnNldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRNaW5GaWx0ZXIpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OmdldE1hZ0ZpbHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
Z2V0V3JhcFMpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldFdyYXBUKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2UpOgor
ICAgICAgICAoZ2w6OlRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpoYXNE
aXJ0eUltYWdlcyk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6cmVzZXREaXJ0eSk6CisgICAgICAg
IChnbDo6VGV4dHVyZTo6Z2V0VGV4dHVyZVNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjppc0ltbXV0YWJs
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMpOgorICAgICAgICAoZ2w6
OlRleHR1cmU6OmxldmVsQ291bnQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldEJsaXR0ZXIp
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChnbDo6VGV4
dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmVT
dG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2Uy
RDo6Z2V0QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlMkQ6OmdldFJl
bmRlclRhcmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpUZXh0dXJlMkQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6flRleHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjphZGRQcm94eVJlZik6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpyZWxlYXNlUHJveHkp
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0VGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEhlaWdodCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVkZWZp
bmVJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRJbWFnZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6cmVs
ZWFzZVRleEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFn
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb21taXRSZWN0KToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb3B5SW1hZ2UpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN0
b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjppc0NvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNEZXB0aCk6
CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSk6CisgICAgICAgIChnbDo6
VGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnVwZGF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcyk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6
Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNp
bCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRTdG9yYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChn
bDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
UHJveHkpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEludGVy
bmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6c2V0SW1hZ2VQb3NZKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1h
Z2VOZWdZKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Y29tbWl0UmVjdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1Yklt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0
QmFzZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChn
bDo6VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6ZmFjZUluZGV4KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFn
ZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OnN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1p
cG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L1RleHR1cmUuaDoKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChnbCk6CisgICAgICAgIChJbWFn
ZSk6CisgICAgICAgIChnbDo6SW1hZ2U6Om1hcmtEaXJ0eSk6CisgICAgICAgIChnbDo6SW1hZ2U6
Om1hcmtDbGVhbik6CisgICAgICAgIChnbDo6SW1hZ2U6OmdldFdpZHRoKToKKyAgICAgICAgKGds
OjpJbWFnZTo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpJbWFnZTo6Z2V0Rm9ybWF0KToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6Z2V0VHlwZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmlzRGlydHkp
OgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAg
IChUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKFRleHR1cmUyRCk6CisgICAgICAgIChUZXh0
dXJlU3RvcmFnZUN1YmVNYXApOgorICAgICAgICAoVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRl
eERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuY3BwOgorICAgICAgICAoY2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAg
ICAgICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFn
ZVBhcmFtc0N1YmUpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajoK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL21hdGh1dGlsLmg6CisgICAgICAgICogc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAg
ICAgKGdsKToKKyAgICAgICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpF
eHRyYWN0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJk
eDo6Q29udmVydEN1YmVGYWNlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVy
Rm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpHZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChkeDJl
czo6R2V0RGVwdGhTaXplKToKKyAgICAgICAgKGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdCk6
CisgICAgICAgIChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1h
dCk6CisgICAgICAgIChkeDJlczo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGR4
MmVzKToKKwogMjAxMi0wNi0yMiAgSm9zaHVhIE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFNhbml0aXplIEdMU0wgY29kZSB1c2luZyBB
TkdMRS4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNDggQEAKIAkJQTBBQUJFNDUxM0FGRTk0NTAwRjJFQkQxIC8qIE91
dHB1dEVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi87IH07CiAJCUEwQUFC
RTQ4MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEg
LyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwogCQlBMEFBQkU0OTEzQUZFOTYxMDBGMkVCRDEg
LyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICov
OyB9OworCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjAxNTlDMjFC
MTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkMxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAq
LzsgfTsKKwkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjIx
NTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjY1NjdC
RTE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuY3BwICovOyB9OworCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJh
Z21hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi87IH07CisJCUEyNjU2N0MxMTU5QzIx
QjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1
bmN0aW9uLmggKi87IH07CisJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
c0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJ
CUEyNjU2N0VEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmggKi87IH07CisJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovOyB9OworCQlBMjY1NjdFRjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
SGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLzsgfTsKKwkJ
QTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDQzE1OUMyMUNFMDAz
OTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjExNTlDMjFDRTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovOyB9OworCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY1NjdDRTE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJ
CUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRjE1OUMyMUNFMDAz
OTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovOyB9OworCQlBMjY1NjdGNTE1OUMyMUNFMDAz
OTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLzsgfTsKKwkJ
QTI2NTY3RjYxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEMzE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCAqLzsgfTsKKwkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q0MTU5QzIx
Q0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggKi87IH07CisJCUEyNjU2N0Y5
MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3Bw
ICovOyB9OworCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q3MTU5QzIxQ0UwMDM5
ODUzOSAvKiBNYWNyby5oICovOyB9OworCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFj
cm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07
CisJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdEOTE1OUMyMUNFMDAz
OTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovOyB9OworCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1
MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3Bw
ICovOyB9OworCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMTE1OUMy
MUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi87IH07CisJCUEyNjU2ODA1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0
aW9uLmggKi87IH07CisJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNDE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovOyB9OworCQlBMjY1Njgw
QTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovOyB9OworCQlBMjY1NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdF
ODE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi87IH07CisJCUEyNjU2ODJCMTU5QzIz
ODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi87
IH07CisJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkQxNTlD
MjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyNjU2ODNBMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGguaCAqLzsgfTsKKwkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuY3BwICovOyB9OworCQlBMjY1NjgzQzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCAqLzsgfTsKKwkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91
dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsg
fTsKKwkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzIx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovOyB9OworCQlBMjY1
NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzMxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTI2NTY4
NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzUxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9Owor
CQlBMjY1Njg0MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4
MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLzsg
fTsKKwkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAg
Ki87IH07CisJCUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgg
Ki87IH07CiAJCUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVB
MDAwODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsK
IAkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbmZvU2luay5jcHAgKi87IH07CkBAIC02Myw3ICsxMDUsNiBAQAogCQlGQjM5RDJBODEy
MDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVy
TGFuZy5jcHAgKi87IH07CiAJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQlGQjM5RDJB
QzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8q
IFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKLQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8q
IFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLzsg
fTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4
OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGlj
LCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTEwMyw2ICsx
NDQsNTIgQEAKIAkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVT
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckVT
U0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMEFBQkU0NzEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3
QUUxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRl
Y3REaXNjb250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVj
dERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjAx
NTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMzE1OUMyMUIxMDAz
OTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1
MzkgLyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNjE1OUMyMUIxMDAzOTg1Mzkg
LyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
YW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjcxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2ly
Y3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDODE1OUMyMUNFMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpYWdub3N0aWNzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFu
ZGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQjE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERp
cmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3Rp
dmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0UxNTlDMjFD
RTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0NGMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDIxNTlDMjFDRTAwMzk4NTM5IC8qIElu
cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8q
IElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBM
ZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFj
cm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhw
YW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBh
bmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3
RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmVwcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2Vu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTgxNTlDMjFD
RTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkExNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHBwX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJEMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzExNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMzE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjgzNzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzODE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFO
R0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAv
KiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2
OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE2MiwxNSArMjQ5LDExIEBACiAJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2
OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhF
NjkgLyogU3ltYm9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRv
cl9jb21tb24udmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSB0cmFuc2xhdG9yX2Nv
bW1vbi52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNDMTIwMEYy
NjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnhtbDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IHRyYW5zbGF0b3JfaGxzbC52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQ0UxMjAw
RjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0
b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxRDAxMjAwRjI2
MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFE
MjEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDMxMjAwRjI2MjAwMDg4RTY5IC8q
IFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRT
ZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjExMjAwRjM1QTAw
MDg4RTY5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0g
QmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIyMTIwMEYz
NUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjI5LDggKzMxMiw2IEBACiAJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9y
R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9y
R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjY5MTIwMEYzNUEw
MDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIz
OUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2
RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwogCkBAIC0yNTUsNiArMzM2LDYyIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1Mzkg
LyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
MjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY1NjdDODE1
OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDOTE1
OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdDQTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTI2NTY3Q0MxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTI2NTY3Q0QxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyNjU2N0NFMTU5QzIx
Q0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRjE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyNjU2N0QyMTU5QzIx
Q0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8sCisJCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5
IC8qIElucHV0LmggKi8sCisJCQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNw
cCAqLywKKwkJCQlBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKKwkJCQlB
MjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwICovLAorCQkJCUEyNjU2N0Q3MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICovLAorCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUz
OSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywKKwkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1Mzkg
LyogTWFjcm9FeHBhbmRlci5oICovLAorCQkJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQ
cmVwcm9jZXNzb3IuY3BwICovLAorCQkJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVw
cm9jZXNzb3IuaCAqLywKKwkJCQlBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLywKKwkJCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICov
LAorCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovLAorCQkJCUEyNjU2
N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwICovLAorCQkJCUEyNjU2N0U4MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3Owor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4
NTM5IC8qIGRlcGdyYXBoICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAq
LywKKwkJCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8s
CisJCQkJQTI2NTY4MkYxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwICovLAorCQkJCUEyNjU2ODMwMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmggKi8sCisJCQkJQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTI2NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJCUEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBo
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTI2NTY4MzQxNTlDMjNFMTAw
Mzk4NTM5IC8qIHRpbWluZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8sCisJCQkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5
IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjY1NjgzODE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gdGltaW5nOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRkIz
OUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTI2OCw4ICs0MDUsOCBAQAogCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlG
QjM5RDJCRDEyMDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLywKIAkJCQlGQjM5RDE4NTEyMDBG
MjYyMDAwODhFNjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5
IC8qIEdMU0xBTkcgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFNvdXJjZTsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yOTIsNiArNDI5LDggQEAKIAkJCQlGQjM5RDE4QTEyMDBGMjYyMDAw
ODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRlYnVn
LmggKi8sCisJCQkJQTI2NTY3QUUxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2NvbnRpbnVp
dHkuY3BwICovLAorCQkJCUEyNjU2N0FGMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250
aW51aXR5LmggKi8sCiAJCQkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNw
cCAqLywKIAkJCQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJ
CQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0zMjcs
MTUgKzQ2NiwxMyBAQAogCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAvKiBTaEhhbmRsZS5o
ICovLAogCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8s
CiAJCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJ
RkIzOUQxQ0IxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLywK
LQkJCQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNsLnZjcHJvaiAq
LywKIAkJCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICov
LAogCQkJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAog
CQkJCUZCMzlEMUNGMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCiAJ
CQkJRkIzOUQxRDAxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCiAJCQkJ
RkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQxRDIxMjAw
RjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQxRDMxMjAwRjI2
MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyNjU2N0I3MTU5QzIxQjEwMDM5
ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEyNjU2N0I4MTU5QzIxQjEw
MDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKIAkJCSk7CiAJCQlpbmNsdWRlSW5J
bmRleCA9IDA7CiAJCQluYW1lID0gY29tcGlsZXI7CkBAIC0zNzAsMTcgKzUwNyw2IEBACiAJCUZC
MzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0
cHV0R0xTTEJhc2UuaCAqLywKLQkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwICovLAotCQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xh
dG9yRVNTTC5oICovLAotCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NM
LmNwcCAqLywKLQkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
LAotCQkJCUEwQUFCRTJFMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5j
cHAgKi8sCi0JCQkJQTBBQUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmggKi8sCi0JCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
Y3BwICovLAotCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmgg
Ki8sCi0JCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJ
CQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCiAJCQkJNDk5NTFD
MDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKIAkJ
CQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAq
LywKQEAgLTM5MCwxMyArNTE2LDIwIEBACiAJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKIAkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAogCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAor
CQkJCUEyNjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLywKIAkJCQk0OTk1MUMw
NzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywKIAkJCQk0OTk1MUMw
ODE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCisJCQkJQTI2NTY3QjAx
NTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJCQlBMjY1NjdCMTE1OUMy
MUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjY1NjdCMjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTI2NTY3QjMxNTlDMjFCMTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKIAkJCQk5MEQ5QjBGQTEyRTExRENCMDAy
RDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKKwkJCQlBMEFBQkUyQTEzQUZFODEwMDBG
MkVCRDEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCisJCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJF
QkQxIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUg
LyogZ2xzbGFuZy5oICovLAogCQkJCTkwRDlCMEZCMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
X2xleC5jcHAgKi8sCiAJCQkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFi
LmNwcCAqLywKIAkJCQk5MEQ5QjBGRDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuaCAq
LywKLQkJCQk5MEQ5QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovLAogCQkJCUZC
MzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQyMkIx
MjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQyMkMxMjAwRjM1QTAw
MDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLApAQCAtNDA0LDM5ICs1MzcsNTAgQEAKIAkJCQlG
QjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJRkIz
OUQyMkYxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKIAkJCQlGQjM5RDIz
MDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjY1NjdC
NDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJ
RkIzOUQyMzExMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywK
IAkJCQlGQjM5RDIzMjEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKIAkJ
CQlGQjM5RDIzMzEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCiAJCQkJRkIz
OUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi8sCiAJCQkJRkIzOUQyMzUx
MjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQlGQjM5RDIzNjEy
MDBGMzVBMDAwODhFNjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlBMEFBQkUyRTEz
QUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAorCQkJCUEwQUFC
RTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAogCQkJCUZC
MzlEMjM3MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1
QTAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAogCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1
NSAvKiBvc3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAv
KiBvc3NvdXJjZV93aW4uY3BwICovLAorCQkJCUEwQUFCRTQyMTNBRkU5NDUwMEYyRUJEMSAvKiBP
dXRwdXRFU1NMLmNwcCAqLywKKwkJCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0
RVNTTC5oICovLAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNw
cCAqLywKIAkJCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAor
CQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCisJ
CQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJ
RkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCUZCMzlE
MjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJRkIzOUQyNDEx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1
QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovLAorCQkJCUEyNjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCAqLywKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovLAogCQkJCUZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAg
Ki8sCiAJCQkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8s
CiAJCQkJRkIzOUQyNTgxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJ
CUZCMzlEMjU5MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTI2NTY3
QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJOTBEOUIxMDAx
MkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJOTBEOUIxMDExMkUx
MURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovLAogCQkJCUZCMzlEMjVBMTIwMEYzNUEw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKIAkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhF
NjkgLyogU2hIYW5kbGUuaCAqLywKIAkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovLAogCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5oICovLAorCQkJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8sCisJ
CQkJQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKKwkJ
CQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQlG
QjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJCUZC
MzlEMjY5MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAogCQkJCUZCMzlE
MjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMjZEMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMjZFMTIwMEYzNUEwMDA4
OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKIAkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUg
LyogdXRpbC5jcHAgKi8sCiAJCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAq
LywKIAkJCQk5MEQ5QjEwRDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAgKi8sCkBAIC00NTMsNiArNTk3LDcgQEAKIAkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8q
IHByZXByb2Nlc3NvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTI2NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLywKIAkJCQlGQjM5RDI0NTEy
MDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovLAogCQkJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2
OSAvKiBhdG9tLmggKi8sCiAJCQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUu
aCAqLywKQEAgLTUwOCw2ICs2NTMsMjggQEAKIAkJCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUg
LyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEExNEI3QUFEODAw
NjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OTk1MUMwQzE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdDMDE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21h
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0VEMTU5QzIxQ0UwMDM5ODUzOSAv
KiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUYxNTlDMjFDRTAwMzk4
NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0YxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEy
NjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwODE1OUMyMUNFMDAzOTg1MzkgLyogVG9r
ZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODJCMTU5QzIzODgwMDM5ODUzOSAvKiBw
cF91dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0ExNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4M0MxNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEy
NjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTg4
LDcgKzc1NSw2IEBACiAJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJv
bFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAv
KiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDJCMTEyMDBGMzVB
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTAy
MTJFMTFEQ0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MEQ5
QjEwNDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTBEOUIxMDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNjA0LDYgKzc3MCwyNiBAQAogCQkJCUEwQUFCRTQ4MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTk1MUMwOTE0QjdBQUQ4
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDk5NTFDMEIxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjY1NjdCQjE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkQxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3
RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjAxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMjE1OUMyMUNFMDAzOTg1Mzkg
LyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNTE1OUMy
MUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjcxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y5MTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGQjE1
OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0IxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0QxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4NDIxNTlD
MjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2ds
MmV4dC5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNs
dWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiArMjM4LDExIEBAIHR5
cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9ESVZJU09SX0FOR0xFICAgICAgICAgICAgICAgICAgICAweDg4RkUKICNlbmRpZgogCisvKiBH
TF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTNBNgorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogQVBQTEUg
ZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTQ4Nyw2ICsxNDkyLDEx
IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xf
VklWX3NoYWRlcl9iaW5hcnkgMQogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0FOR0xFX3By
b2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcv
U2hhZGVyTGFuZy5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5z
bGF0aW9uIEFQSS4KIC8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5n
ZXMuCi0jZGVmaW5lIFNIX1ZFUlNJT04gMTA1CisjZGVmaW5lIFNIX1ZFUlNJT04gMTA3CiAKIC8v
CiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBi
eSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC00OSw3ICs0OSwyOSBAQCB0eXBlZGVmIGVudW0gewog
CiB0eXBlZGVmIGVudW0gewogICBTSF9HTEVTMl9TUEVDID0gMHg4QjQwLAotICBTSF9XRUJHTF9T
UEVDID0gMHg4QjQxCisgIFNIX1dFQkdMX1NQRUMgPSAweDhCNDEsCisKKyAgLy8gVGhlIENTUyBT
aGFkZXJzIHNwZWMgaXMgYSBzdWJzZXQgb2YgdGhlIFdlYkdMIHNwZWMuCisgIC8vCisgIC8vIElu
IGJvdGggQ1NTIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBS
ZXNlcnZlcyB0aGUgImNzc18iIHByZWZpeC4KKyAgLy8gKDIpIFJlbmFtZXMgdGhlIG1haW4gZnVu
Y3Rpb24gdG8gY3NzX21haW4uCisgIC8vICgzKSBEaXNhYmxlcyB0aGUgZ2xfTWF4RHJhd0J1ZmZl
cnMgYnVpbHQtaW4uCisgIC8vCisgIC8vIEluIENTUyBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToK
KyAgLy8gKDEpIERpc2FibGVzIHRoZSBnbF9GcmFnQ29sb3IgYnVpbHQtaW4uCisgIC8vICgyKSBE
aXNhYmxlcyB0aGUgZ2xfRnJhZ0RhdGEgYnVpbHQtaW4uCisgIC8vICgzKSBFbmFibGVzIHRoZSBj
c3NfTWl4Q29sb3IgYnVpbHQtaW4uCisgIC8vICg0KSBFbmFibGVzIHRoZSBjc3NfQ29sb3JNYXRy
aXggYnVpbHQtaW4uCisgIC8vCisgIC8vIEFmdGVyIHBhc3NpbmcgYSBDU1Mgc2hhZGVyIHRocm91
Z2ggQU5HTEUsIHRoZSBicm93c2VyIGlzIGV4cGVjdGVkIHRvIGFwcGVuZAorICAvLyBhIG5ldyBt
YWluIGZ1bmN0aW9uIHRvIGl0LgorICAvLyBUaGlzIG5ldyBtYWluIGZ1bmN0aW9uIHdpbGwgY2Fs
bCB0aGUgY3NzX21haW4gZnVuY3Rpb24uCisgIC8vIEl0IG1heSBhbHNvIHBlcmZvcm0gYWRkaXRp
b25hbCBvcGVyYXRpb25zIGxpa2UgdmFyeWluZyBhc3NpZ25tZW50LCB0ZXh0dXJlCisgIC8vIGFj
Y2VzcywgYW5kIGdsX0ZyYWdDb2xvciBhc3NpZ25tZW50IGluIG9yZGVyIHRvIGltcGxlbWVudCB0
aGUgQ1NTIFNoYWRlcnMKKyAgLy8gYmxlbmQgbW9kZXMuCisgIC8vCisgIFNIX0NTU19TSEFERVJT
X1NQRUMgPSAweDhCNDIKIH0gU2hTaGFkZXJTcGVjOwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTA0
LDcgKzEyNiwyMyBAQCB0eXBlZGVmIGVudW0gewogICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9J
TlRFR0VSX0lOREVYID0gMHgwMDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3
b3JrYXJvdW5kIGZvciBjZXJ0YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KLSAgU0hfRU1VTEFURV9C
VUlMVF9JTl9GVU5DVElPTlMgPSAweDAxMDAKKyAgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElP
TlMgPSAweDAxMDAsCisKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZv
cmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAorICAvLyB0aW1pbmcgYXR0YWNr
cy4KKyAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0
IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKKyAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhl
IHRpbWluZyBjaGFubmVsLgorICAvLyBUbyB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCBjb21waWxl
IHRoZSBzaGFkZXIgdW5kZXIgdGhlIFdlYkdMIHNwZWMKKyAgLy8gKHVzaW5nIHRoZSBTSF9XRUJH
TF9TUEVDIGZsYWcpLgorICBTSF9USU1JTkdfUkVTVFJJQ1RJT05TID0gMHgwMjAwLAorICAgIAor
ICAvLyBUaGlzIGZsYWcgcHJpbnRzIHRoZSBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgaXMgdXNlZCB0
byBlbmZvcmNlIHRpbWluZworICAvLyByZXN0cmljdGlvbnMgb24gZnJhZ21lbnQgc2hhZGVycy4K
KyAgLy8gVGhpcyBmbGFnIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBhbGwgb2YgdGhlIGZvbGxvd2lu
ZyBhcmUgdHJ1ZToKKyAgLy8gLSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KKyAg
Ly8gLSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElP
TlMgZmxhZy4KKyAgLy8gLSBUaGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgor
ICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8v
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIyMjM5
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDMyIEBACiAJCTg4OEYx
MzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcu
Y3BwICovOyB9OwogCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsg
fTsKIAkJOTNBNDFBRjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3
RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTk4ODZCQ0Q1RDBERDY5
QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi87IH07CiAJCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAvKiBPdXRwdXRHTFNM
QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovOyB9OwogCQk5
RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYg
LyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owor
CQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyMTE1OUMzMUEw
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHBy
ZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5MTU5QzMxQTAwMEU1
N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjAxMDg0MjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkYxNTlD
MzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OworCQlBMjAxMDg0NDE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9j
ZXNzb3IuY3BwICovOyB9OworCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzYx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDYxNTlDMzFBMDAw
RTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87
IH07CisJCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NEMxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07CisJCUEyMDEwODY0MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjUxNTlDMzI0
RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NjYxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyMDEwODY3MTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lv
bi5jcHAgKi87IH07CisJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1
NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjAxMDg2OTE1
OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NkIxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjAxMDg2QzE1OUMzMjRGMDBFNTdC
QkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTIwMTA4NzExNTlDMzI2MjAw
RTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovOyB9OworCQlBMjAxMDg3MjE1OUMzMjYyMDBFNTdCQkUgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1
aXQuY3BwICovOyB9OwogCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDM2RUZG
MDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CiAJCUFEODU1MTdGMDg2
RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICov
OyB9OwogCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkUyNTg0ODYwMDVG
NjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKQEAgLTEwNCw3ICsxMjcs
NiBAQAogCQkyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5NEY0NDJB
MjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBV
bmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJF
N0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
REREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9jb21tb24uYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE0Nyw2ICsxNjksNTkgQEAKIAkJOUQ0N0Ix
QUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1
YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQ0U0MzYzMTg0
OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE2NDRCMDBFOTMwNEM0MDdG
REM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBsaWJ0cmFuc2xhdG9yX2dsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9u
IGNvcHkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gImxpYnRyYW5zbGF0b3JfY29t
bW9uIGNvcHkuYSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEw
ODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjIxNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZl
UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI1MTU5QzMxQTAw
MEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJBMTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3Jv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvRXhwYW5k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMDE1OUMzMUEwMDBF
NTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODMx
MTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgz
MjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNjE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdC
QkUgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzgxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzOTE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0ODE1OUMz
MjA5MDBFNTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
MDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRBMTU5QzMyNEYwMEU1
N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRF
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTExNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTMxNTlD
MzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlh
Z25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25v
c3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1NjE1OUMzMjRG
MDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTcx
NTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5k
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJF
IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuc2lvbkJlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUg
LyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdtYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyog
UmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuYW1l
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVGMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4NjExNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZEMTU5QzMy
NjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29u
dGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250
aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZGMTU5QzMyNjIw
MEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTQ0N0Y3NUYzM0RBNEM0QzEyM0FDOTUy
IC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJ0cmFuc2xhdG9yX2hsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVF
RUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OCw3ICsyNTMsNiBAQAogCQlEREQzQjdF
M0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREVBRjZGMzEyNkMy
RUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1P
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUVBRkM2MThBM0IzM0YxRkJG
RTM1MzYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNFMDlEQzhFMUJG
NUQyOTU4QUFDRURFIC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1i
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MCw2ICsyNjQsMTMgQEAKIC8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQlBNUM5OTRFNzREQjFF
NjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTIyMyw4ICsz
MDQsMTAgQEAKIAkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCiAJCQkJ
NTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAogCQkJCTgwNThBMEEyQTBBMDIz
ODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKKwkJCQlBMjAxMDg0ODE1OUMzMjA5MDBFNTdC
QkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAogCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAv
KiBtZW1vcnkuYyAqLywKIAkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8sCisJCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKIAkJCQlDRkQxMkM2
RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCiAJCQkJNkJCQzgyMjRCOUQ4RTIzNEQx
MTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKIAkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQg
Lyogc2Nhbm5lci5jICovLApAQCAtMjQxLDE1ICszMjQsMzIgQEAKIAkJMTk2REI2QUIwMDZCQjgz
NTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywK
IAkJCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCisJCQkJQTIw
MTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywK
KwkJCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCAqLywKIAkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCiAJ
CQkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAogCQkJCTBBMTE4RTUw
MDNFNUMwRTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCiAJCQkJQjJGNUNBMTFFRUE5MkRG
MjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAorCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAorCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywK
KwkJCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAg
Ki8sCisJCQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHku
aCAqLywKKwkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNw
cCAqLywKKwkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmgg
Ki8sCisJCQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywK
KwkJCQlBMjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlB
MjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJ
QTIwMTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlB
MjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKIAkJCQk1
REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCiAJCQkJMTgy
QkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKKwkJCQk0OTdDNUMy
NEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAorCQkJCTczQTU3QzZENDEzNzczQUVC
QTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCisJCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkz
OEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAg
LyogZ2xzbGFuZ190YWIuaCAqLywKIAkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5o
ICovLAogCQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTI1NywxMiArMzU3LDE4IEBACiAJCQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIElu
aXRpYWxpemVEbGwuY3BwICovLAogCQkJCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0
aWFsaXplRGxsLmggKi8sCiAJCQkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxp
emVHbG9iYWxzLmggKi8sCisJCQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovLAogCQkJCTg1ODQ1RkZGNUE4RTYzMzY0MzA4MjM2RCAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCi0JCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFC
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYg
LyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyog
TU1hcC5oICovLAorCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUu
aCAqLywKKwkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywK
KwkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAor
CQkJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAog
CQkJCTU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8sCiAJCQkJODFDQzQyNDVBOEU1QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmggKi8sCisJCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQlD
OEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYw
MDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKIAkJCQlEQjI5MTdDNUI2
MjQ3MTIzNjRERTRBNzUgLyogT3V0cHV0RVNTTC5jcHAgKi8sCiAJCQkJNkJCNjZBQjU4NzM4NjhF
MjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLywKIAkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMz
NTEgLyogT3V0cHV0R0xTTC5jcHAgKi8sCkBAIC0yNzEsMjAgKzM3NywyNSBAQAogCQkJCUI1NUIz
NTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAogCQkJCTlBNUI1QkIy
NTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKIAkJCQk1QTIxNTk5QzU5QkMx
QTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAorCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZG
OURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKIAkJCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYg
LyogUGFyc2VIZWxwZXIuY3BwICovLAogCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQ
YXJzZUhlbHBlci5oICovLAogCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxs
b2MuY3BwICovLAogCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAq
LywKKwkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCisJCQkJMEU4
RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQk0ODU3RTE4Nzk5
RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAogCQkJCTlENDdCMUFDODJF
NEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAogCQkJCUI0MzZFRkYwNjkxM0ZD
QjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKIAkJCQlENDBGNzhDQjlCQTBDODk5MjFG
QTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBT
ZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFy
Y2hTeW1ib2wuaCAqLywKLQkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUu
aCAqLywKIAkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8s
CisJCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJQjdF
NUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKIAkJCQk3QzZCQjEy
QUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQlBMjAxMDg1RDE1OUMz
MjRGMDBFNTdCQkUgLyogdGltaW5nICovLAogCQkJCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCiAJCQkJRDUzREREMENERjE1RUUxREQwMUYxQTIwIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJNkZCNzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLywKQEAgLTI5MiwyOSArNDAzLDE3IEBACiAJCQkJQzNEQUZGNkJG
MTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKIAkJCQlFM0EyOUI2RTlD
MjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKIAkJCQlBQTUzQjY2MzJDNzZG
OTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkg
LyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyog
VW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oICovLAorCQkJCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLywKKwkJCQkzRUU3MjE1QTdBQjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8s
CisJCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLywKIAkJCQlCMTQ4RDk2
N0I4RDI4OEE4MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCiAJCQkJOTAy
NTQ4NDJENzI5NzU2NzJDMkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKIAkJCQky
N0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKIAkJCQk1RDk5
MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFibGVJbmZvLmggKi8sCiAJCQkJRjcyN0FFQzkw
NjcxMkVDMjM4MDQxNDY0IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKIAkJCQkxMjBBRDBBM0I3NjQy
RkI1QTlBRTNBNTYgLyogVmVyc2lvbkdMU0wuaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBk
ZWJ1Zy5oICovLAotCQkJCTQ5N0M1QzI0RUVGNDY2RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8s
Ci0JCQkJNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKLQkJ
CQkzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovLAotCQkJCURFQUY2RjMx
MjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAotCQkJCTc5OURDOTYxMUVFMkVB
M0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3
M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8q
IG9zc291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyog
cGFyc2VDb25zdC5jcHAgKi8sCi0JCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0
ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJ
CQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovLAogCQkJKTsKIAkJCW5hbWUg
PSBTb3VyY2U7CiAJCQlwYXRoID0gY29tcGlsZXI7CkBAIC0zMjksNiArNDI4LDYyIEBACiAJCQkp
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTIwMTA4MUUxNTlDMzFBMDAw
RTU3QkJFIC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKKwkJ
CQlBMjAxMDgyMDE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKKwkJCQlBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCisJCQkJQTIw
MTA4MjIxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjAx
MDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAx
MDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyMDEw
ODI2MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTIwMTA4
MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjAxMDgyQTE1OUMzMUEw
MDBFNTdCQkUgLyogSW5wdXQuaCAqLywKKwkJCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyog
TGV4ZXIuY3BwICovLAorCQkJCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICov
LAorCQkJCUEyMDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTIw
MTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmggKi8sCisJCQkJQTIwMTA4MkYxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyMDEwODMwMTU5QzMxQTAw
MEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3
QkJFIC8qIHBwX3V0aWxzLmggKi8sCisJCQkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTIwMTA4MzMxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5oICovLAorCQkJCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3VyY2VMb2Nh
dGlvbi5oICovLAorCQkJCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8s
CisJCQkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8sCisJCQkJQTIwMTA4
MzgxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTIwMTA4MzkxNTlD
MzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg0QjE1OUMzMjRGMDBFNTdC
QkUgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCUEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICov
LAorCQkJCUEyMDEwODREMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLywK
KwkJCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi8sCisJCQkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLywKKwkJCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3JhcGg7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjAxMDg1RDE1OUMzMjRGMDBF
NTdCQkUgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAgKi8sCisJCQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUg
LyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyMDEwODYxMTU5QzMy
NEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMkMx
ODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtMzQ0LDYgKzQ5OSw3IEBACiAJCQkJM0REREM3NzIxNjIwMkE0
REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8sCiAJCQkJQTE2NDRCMDBFOTMw
NEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovLAogCQkJCUE0NDdGNzVGMzNE
QTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLywKKwkJCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovLAogCQkJKTsK
IAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODMs
NiArNTM5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4
QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20u
YXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKIAkJfTsKKwkJQTIwMTA3REMxNTlD
MzEzQzAwRTU3QkJFIC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdC
QkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXBy
b2Nlc3NvciIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlBMjAxMDdERDE1OUMzMTNDMDBF
NTdCQkUgLyogU291cmNlcyAqLywKKwkJCQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJh
bWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVu
Y2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gcHJlcHJvY2Vzc29yOworCQkJcHJvZHVjdE5hbWUg
PSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMz
MTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovOworCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CiAJ
CUE4MzhFOTU3NEIzRkYxNDc5MURCREFCMSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7CiAJCQlp
c2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5
Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hsc2wiICovOwpAQCAtNDA5LDcgKzU4MSwxMSBAQAogCQkJ
fTsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIg
Ki87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJZGV2ZWxvcG1l
bnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlr
bm93blJlZ2lvbnMgPSAoCisJCQkJZW4sCisJCQkpOwogCQkJbWFpbkdyb3VwID0gNUJCRUZGOUI5
MTczODI5N0I5NUM1NjhEOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290
ID0gIiI7CkBAIC00MTgsNiArNTk0LDcgQEAKIAkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIg
LyogdHJhbnNsYXRvcl9jb21tb24gKi8sCiAJCQkJNTg5MkM3QTM2OTUzMzA0MzdBRkU1NzE0IC8q
IHRyYW5zbGF0b3JfZ2xzbCAqLywKIAkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJh
bnNsYXRvcl9obHNsICovLAorCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9j
ZXNzb3IgKi8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAt
NDMwLDggKzYwNywyNyBAQAogCQkJCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2Vu
SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RjdCNTJBNTREQ0U4MTU1RUQ5NEVDRjggLyog
T3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFOTlENkQ4MERCRjA1RUNFNzEwOEIy
NkQgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTg4NkJDRDVEMERE
NjlCNkZERTA5REQ4IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTY0
NjY1NjZEOEMwRjAyM0E1NTM3NjAgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAv
KiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJQTIwMTA4M0IxNTlD
MzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODNDMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyMDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8q
IElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUg
LyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJF
IC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDQxNTlDMzFB
MDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0
NTE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ4
Myw2ICs2NzksMTcgQEAKIAkJCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5j
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNl
X3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODYyMTU5QzMyNEYwMEU1N0JCRSAv
KiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
MzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjYxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODY3MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTIwMTA4NjgxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUEyMDEwODY5MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODZC
MTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODZDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2MSw2ICs3NjgsMzggQEAKIAkJ
CX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAv
KiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJP
Q0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAor
CQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDBcIiIsCisJCQkJKTsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAor
CQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gInRy
YW5zbGF0b3JfY29tbW9uIGNvcHkiOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJ
QTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJCSk7CisJ
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJ
CQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKIAkJQUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8q
IFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxk
U2V0dGluZ3MgPSB7CkBAIC02NzIsNiArOTExLDE1IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDE7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKIAkJ
fTsKKwkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0geworCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTIwMTA3
RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAorCQkJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1
N0JCRSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOworCQl9OwogCQlD
NzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZp
Z3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUsNCArMTUsOCBAQAogICBUeXBlTmFtZShjb25zdCBUeXBl
TmFtZSYpOyAgICAgICAgICAgICAgIFwKICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUm
KQogCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisj
ZW5kaWYKKwogI2VuZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAkocmV2aXNpb24gMTIyMjM5KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBN
SU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVmaW5lIEJVSUxEX1JF
VklTSU9OIDEwMDkKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTE2NgogCiAjZGVmaW5lIFNUUklO
R0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5HSUZZKHgpCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDExICsxNiw2IEBAIG5hbWVzcGFjZSB7CiAvLyBl
dmFsdWF0ZWQuIFRoaXMgaXMgdW5saWtlbHkgdG8gc2hvdyB1cCBpbiByZWFsIHNoYWRlcnMsIGJ1
dCBpcyBzb21ldGhpbmcgdG8KIC8vIGNvbnNpZGVyLgogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11
bGF0aW9uVmVydGV4U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0
YW4oZmxvYXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfYXRhbl9lbXUodmVjMiB5LCB2ZWMy
IHgpIHsgcmV0dXJuIHZlYzIoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSk7IH0i
LAotICAgICJ2ZWMzIHdlYmdsX2F0YW5fZW11KHZlYzMgeSwgdmVjMyB4KSB7IHJldHVybiB2ZWMz
KGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSkpOyB9
IiwKLSAgICAidmVjNCB3ZWJnbF9hdGFuX2VtdSh2ZWM0IHksIHZlYzQgeCkgeyByZXR1cm4gdmVj
NChhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pLCBh
dGFuKHlbM10sIHhbM10pKTsgfSIsCi0KICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29z
KGZsb2F0KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMyKSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyh2ZWMzKSIsCkBAIC00MSwxMSArMzYsNiBAQCBj
b25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9y
IGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0
LCBmbG9hdCkiLAotICAgICJ2ZWMyIHdlYmdsX21vZF9lbXUodmVjMiB4LCB2ZWMyIHkpIHsgcmV0
dXJuIHZlYzIobW9kKHhbMF0sIHlbMF0pLCBtb2QoeFsxXSwgeVsxXSkpOyB9IiwKLSAgICAidmVj
MyB3ZWJnbF9tb2RfZW11KHZlYzMgeCwgdmVjMyB5KSB7IHJldHVybiB2ZWMzKG1vZCh4WzBdLCB5
WzBdKSwgbW9kKHhbMV0sIHlbMV0pLCBtb2QoeFsyXSwgeVsyXSkpOyB9IiwKLSAgICAidmVjNCB3
ZWJnbF9tb2RfZW11KHZlYzQgeCwgdmVjNCB5KSB7IHJldHVybiB2ZWM0KG1vZCh4WzBdLCB5WzBd
KSwgbW9kKHhbMV0sIHlbMV0pLCBtb2QoeFsyXSwgeVsyXSksIG1vZCh4WzNdLCB5WzNdKSk7IH0i
LAotCiAgICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFsaXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAu
MCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBub3JtYWxpemUodmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3Jt
YWxpemUodmVjMykiLApAQCAtNTgsNDIgKzQ4LDMyIEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVt
dWxhdGlvblZlcnRleFNvdXIKIH07CiAKIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZy
YWdtZW50U291cmNlW10gPSB7Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4oZmxv
YXQsIGZsb2F0KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjMiwgdmVj
MikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzMsIHZlYzMpIiwKLSAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWM0LCB2ZWM0KSIsCi0KICAgICAid2Vi
Z2xfZW11X3ByZWNpc2lvbiBmbG9hdCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24g
ZmxvYXQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWMyIHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMyIGEpIHsgcmV0dXJuIGNv
cyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMyB3ZWJnbF9jb3NfZW11KHdl
YmdsX2VtdV9wcmVjaXNpb24gdmVjMyBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJn
bF9lbXVfcHJlY2lzaW9uIHZlYzQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZl
YzQgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBkaXN0YW5jZShmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9kaXN0YW5jZV9l
bXUoeCwgeSkgKCh4KSA+PSAoeSkgPyAoeCkgLSAoeSkgOiAoeSkgLSAoeCkpIiwKICAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzQsIHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBkb3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZG90X2Vt
dSh4LCB5KSAoKHgpICogKHkpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2
ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWMzLCB2ZWMz
KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRvdCh2ZWM0LCB2ZWM0KSIsCiAKLSAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKGZsb2F0KSIsCisgICAgIiNkZWZpbmUg
d2ViZ2xfbGVuZ3RoX2VtdSh4KSAoKHgpID49IDAuMCA/ICh4KSA6IC0oeCkpIiwKICAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbGVu
Z3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxvYXQsIGZs
b2F0KSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMyLCB2ZWMyKSIsCi0g
ICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG1vZCh2ZWM0LCB2ZWM0KSIsCi0KLSAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3Igbm9ybWFsaXplKGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfbm9ybWFs
aXplX2VtdSh4KSAoKHgpID09IDAuMCA/IDAuMCA6ICgoeCkgPiAwLjAgPyAxLjAgOiAtMS4wKSki
LAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMikiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjMykiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBub3JtYWxpemUodmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIHJlZmxlY3QoZmxvYXQsIGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfcmVmbGVj
dF9lbXUoSSwgTikgKChJKSAtIDIuMCAqIChOKSAqIChJKSAqIChOKSkiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVt
dWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMzLCB2ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIHJlZmxlY3QodmVjNCwgdmVjNCkiCkBAIC0xMDIsMTAgKzgyLDYgQEAgY29uc3QgY2hh
cioga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRTbwogY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVs
YXRpb25WZXJ0ZXhNYXNrW10gPSB7CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAgICAgLy8gV29y
ayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
QXRhbjFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMl8yCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkF0YW4zXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjRfNAogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQ29zMwpAQCAtMTIyLDEwICs5OCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4TWFza1sKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk1vZDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QzXzMKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kNF80CiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUzCkBAIC0xMzYsMTAgKzEwOCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4TWFza1sKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKICAg
ICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCi0gICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkF0YW4xXzEKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW40XzQKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTE1NiwxMCArMTI0LDYgQEAgY29uc3QgYm9v
bCBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrWwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25M
ZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICB0cnVlLCAg
Ly8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIHRy
dWUsICAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk5vcm1hbGl6ZTMKQEAgLTE3MywyMiArMTM3LDM4IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9u
RW11bGF0aW9uVmVydGV4TWFza1sKIH07CiAKIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRNYXNrW10gPSB7Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuM18z
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40XzQKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LSAgICAvLyBXb3JrIGFyb3VuZCBhIEFUSSBkcml2ZXIgYnVnIGluIE1hYyB0aGF0IGNhdXNlcyBj
cmFzaGVzLgorICAgIC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBNYWMuCiAgICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczEKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMgogICAg
IHRydWUsICAvLyBURnVuY3Rpb25Db3MzCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczQKKyAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
RGlzdGFuY2UyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKKyAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2U0XzQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uRG90MV8x
CisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRvdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
b3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90NF80CisgICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkxlbmd0aDEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgorICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25MZW5ndGgzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKKyAgICB0
cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3Jt
YWxpemUyCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKKyAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTm9ybWFsaXplNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25SZWZsZWN0MV8xCisg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
UmVmbGVjdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CiAjZWxzZQorICAg
IC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4KICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkNvczMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zNAotI2VuZGlmCiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMV8xCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3Rh
bmNlMl8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCkBAIC0yMDEsMTAgKzE4
MSw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21lbnRNYXMKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgzCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9k
MV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Nb2QzXzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbk5vcm1hbGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0yMTMsNiArMTg5LDcgQEAgY29uc3Qg
Ym9vbCBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudE1hcwogICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25SZWZsZWN0Ml8yCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKICAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAorI2VuZGlmCiAgICAgZmFsc2UgIC8vIFRGdW5jdGlv
blVua25vd24KIH07CiAKQEAgLTM4NiwxOCArMzYzLDEyIEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yOjpJZGVudGlmeUZ1bmN0aW8KIAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRGdW5j
dGlvblVua25vd247CiAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcEF0YW46Ci0g
ICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkF0YW4xXzE7Ci0gICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBFT3BEaXN0YW5jZToKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1
bmN0aW9uRGlzdGFuY2UxXzE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BE
b3Q6CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRvdDFfMTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1vZDoKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1
bmN0aW9uTW9kMV8xOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wUmVmbGVj
dDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uUmVmbGVjdDFfMTsKICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNyBAQCBwcml2YXRl
OgogICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucy4KICAgICAvLwogICAgIGVudW0gVEJ1aWx0SW5G
dW5jdGlvbiB7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4xXzEgPSAwLCAgLy8gZmxvYXQgYXRhbihm
bG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25BdGFuMl8yLCAgLy8gdmVjMiBhdGFuKHZl
YzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuM18zLCAgLy8gdmVjMyBhdGFuKHZlYzMs
IHZlYzIpOwotICAgICAgICBURnVuY3Rpb25BdGFuNF80LCAgLy8gdmVjNCBhdGFuKHZlYzQsIHZl
YzIpOwotCi0gICAgICAgIFRGdW5jdGlvbkNvczEsICAvLyBmbG9hdCBjb3MoZmxvYXQpOworICAg
ICAgICBURnVuY3Rpb25Db3MxID0gMCwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7CiAgICAgICAgIFRG
dW5jdGlvbkNvczIsICAvLyB2ZWMyIGNvcyh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uQ29zMywg
IC8vIHZlYzMgY29zKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25Db3M0LCAgLy8gdmVjNCBjb3Mo
dmVjNCk7CkBAIC03MCwxMSArNjUsNiBAQCBwcml2YXRlOgogICAgICAgICBURnVuY3Rpb25MZW5n
dGgzLCAgLy8gZmxvYXQgbGVuZ3RoKHZlYzMpOwogICAgICAgICBURnVuY3Rpb25MZW5ndGg0LCAg
Ly8gZmxvYXQgbGVuZ3RoKHZlYzQpOwogCi0gICAgICAgIFRGdW5jdGlvbk1vZDFfMSwgIC8vIGZs
b2F0IG1vZChmbG9hdCwgZmxvYXQpOwotICAgICAgICBURnVuY3Rpb25Nb2QyXzIsICAvLyB2ZWMy
IG1vZCh2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kM18zLCAgLy8gdmVjMyBtb2Qo
dmVjMywgdmVjMyk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDRfNCwgIC8vIHZlYzQgbW9kKHZlYzQs
IHZlYzQpOwotCiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTEsICAvLyBmbG9hdCBub3JtYWxp
emUoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Ob3JtYWxpemUyLCAgLy8gdmVjMiBub3JtYWxp
emUodmVjMik7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTMsICAvLyB2ZWMzIG5vcm1hbGl6
ZSh2ZWMzKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0NvbXBpbGVyLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCwxMCAr
OCwyMSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW5hbWVGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgiCisKK2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK3sKKyAgICAg
cmV0dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQ
RUM7Cit9CiAKIG5hbWVzcGFjZSB7CiBib29sIEluaXRpYWxpemVTeW1ib2xUYWJsZSgKQEAgLTEy
Myw3ICsxMzQsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFs
aWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4KLSAgICBpZiAoc2hhZGVyU3BlYyA9PSBT
SF9XRUJHTF9TUEVDKQorICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAg
ICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAg
Ly8gRmlyc3Qgc3RyaW5nIGlzIHBhdGggb2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRo
ZSBhY3R1YWwgc291cmNlIGZvbGxvd3MuCkBAIC0xNjEsNiArMTcyLDEyIEBAIGJvb2wgVENvbXBp
bGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNv
bXBpbGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBz
dWNjZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIAorICAgICAgICBpZiAoc3VjY2Vz
cyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9USU1JTkdfUkVTVFJJQ1RJT05TKSkKKyAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBlbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKHJvb3QsIChjb21waWxlT3B0
aW9ucyAmIFNIX0RFUEVOREVOQ1lfR1JBUEgpICE9IDApOworCisgICAgICAgIGlmIChzdWNjZXNz
ICYmIHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKKyAgICAgICAgICAgIHJld3Jp
dGVDU1NTaGFkZXIocm9vdCk7CisKICAgICAgICAgLy8gVW5yb2xsIGZvci1sb29wIG1hcmt1cCBu
ZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9J
TlRFR0VSX0lOREVYKSkKICAgICAgICAgICAgIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dp
dGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhyb290KTsKQEAgLTIzNSwxMiArMjUyLDU4IEBA
IGJvb2wgVENvbXBpbGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU4KICAgICB9CiB9CiAKK3Zv
aWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KQoreworICAg
IFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwgImNzc19tYWluKCIpOworICAgIHJvb3Qt
PnRyYXZlcnNlKCZyZW5hbWVyKTsKK30KKwogYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlTGltaXRh
dGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBWYWxpZGF0ZUxpbWl0YXRpb25zIHZhbGlk
YXRlKHNoYWRlclR5cGUsIGluZm9TaW5rLmluZm8pOwogICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxp
ZGF0ZSk7CiAgICAgcmV0dXJuIHZhbGlkYXRlLm51bUVycm9ycygpID09IDA7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBi
b29sIG91dHB1dEdyYXBoKQoreworICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMp
IHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiVGltaW5nIHJlc3RyaWN0aW9ucyBtdXN0IGJl
IGVuZm9yY2VkIHVuZGVyIHRoZSBXZWJHTCBzcGVjLiI7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpIHsKKyAg
ICAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKKworICAgICAgICAvLyBPdXRwdXQg
YW55IGVycm9ycyBmaXJzdC4KKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZW4sIG91dHB1dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKyAgICAgICAgaWYgKG91dHB1dEdyYXBo
KSB7CisgICAgICAgICAgICBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IG91dHB1dChpbmZvU2luay5p
bmZvKTsKKyAgICAgICAgICAgIG91dHB1dC5vdXRwdXRBbGxTcGFubmluZ1RyZWVzKGdyYXBoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICByZXR1cm4gZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0
aW9ucyhyb290KTsKKyAgICB9Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlRnJhZ21lbnRT
aGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7
CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyByZXN0cmljdG9yKGluZm9TaW5rLmlu
Zm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhncmFwaCk7CisgICAgcmV0
dXJuIHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30KKworYm9vbCBUQ29tcGlsZXI6OmVu
Zm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpCit7
CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZv
KTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VSZXN0cmljdGlvbnMocm9vdCk7CisgICAgcmV0dXJu
IHJlc3RyaWN0b3IubnVtRXJyb3JzKCkgPT0gMDsKK30KKwogdm9pZCBUQ29tcGlsZXI6OmNvbGxl
Y3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJvb3QpCiB7CiAgICAgQ29sbGVjdEF0dHJp
YnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29u
dGludWl0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3Ig
ZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGlu
dHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0
ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citib29sIERldGVjdExv
b3BEaXNjb250aW51aXR5Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtTG9v
cERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBy
ZXR1cm4gbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIERldGVjdExvb3BEaXNjb250aW51
aXR5Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAg
ICBpZiAobUxvb3BEaXNjb250aW51aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2Fz
ZSBFT3BLaWxsOgorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICBj
YXNlIEVPcENvbnRpbnVlOgorICAgICAgICBtTG9vcERpc2NvbnRpbnVpdHkgPSB0cnVlOworICAg
ICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGludWl0eTsKK30KKwor
Ym9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCit7CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVp
dHk7Cit9CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGludWl0eShUSW50ZXJtTm9kZSAqbm9k
ZSkKK3sKKyAgICBEZXRlY3RMb29wRGlzY29udGludWl0eSBkZXRlY3RMb29wRGlzY29udGludWl0
eTsKKyAgICByZXR1cm4gZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkudHJhdmVyc2Uobm9kZSk7Cit9
CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZl
cnNlKHRoaXMpOworICAgIHJldHVybiBtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0
ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSAqbm9kZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7
CisgICAgICBjYXNlIEVPcERGZHg6CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIG1HcmFk
aWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBEZXRlY3RH
cmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BG
dW5jdGlvbkNhbGwpCisgICAgeworICAgICAgICBpZiAoIW5vZGUtPmlzVXNlckRlZmluZWQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmds
ZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1
cmUyRCIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fAorICAg
ICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiBhIHVz
ZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdlIGhhdmUgdG8KKyAgICAgICAgICAgIC8v
IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCB0byBjb250YWluIGdyYWRpZW50IG9wZXJhdGlvbnMK
KyAgICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gIW1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBjb250YWluc0dy
YWRpZW50T3BlcmF0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIERldGVjdEdyYWRpZW50
T3BlcmF0aW9uIGRldGVjdEdyYWRpZW50T3BlcmF0aW9uOworICAgIHJldHVybiBkZXRlY3RHcmFk
aWVudE9wZXJhdGlvbi50cmF2ZXJzZShub2RlKTsKK30KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EZXRlY3REaXNjb250aW51aXR5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdp
dGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1c2Ugb2YgaW50cmluc2ljIGZ1
bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21wdXRlCisvLyBncmFk
aWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworI2RlZmluZSBDT01QSUxFUl9ERVRFQ1RE
SVNDT05USU5VSVRZX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisvLyBDaGVja3Mgd2hldGhlciBhIGxvb3AgY2FuIHJ1biBmb3IgYSB2
YXJpYWJsZSBudW1iZXIgb2YgaXRlcmF0aW9ucworY2xhc3MgRGV0ZWN0TG9vcERpc2NvbnRpbnVp
dHkgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2
ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRC
cmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpOworICAgIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9v
bCBtTG9vcERpc2NvbnRpbnVpdHk7Cit9OworCitib29sIGNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkoVEludGVybU5vZGUgKm5vZGUpOworCisvLyBDaGVja3MgZm9yIGludHJpbnNpYyBmdW5jdGlv
bnMgd2hpY2ggY29tcHV0ZSBncmFkaWVudHMKK2NsYXNzIERldGVjdEdyYWRpZW50T3BlcmF0aW9u
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJhdmVy
c2UoVEludGVybU5vZGUgKm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSk7CisgICAgYm9vbCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBib29sIG1H
cmFkaWVudE9wZXJhdGlvbjsKK307CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihU
SW50ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmICAgLy8gQ09NUElMRVJfREVURUNURElT
Q09OVElOVUlUWV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9z
dGljcy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgiCisKK1REaWFnbm9zdGljczo6
VERpYWdub3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspIDogbUluZm9TaW5rKGluZm9TaW5rKQor
eworfQorCitURGlhZ25vc3RpY3M6On5URGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIFREaWFn
bm9zdGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgc2luayA9IG1JbmZvU2luay5pbmZvOworICAgIFRQcmVmaXhUeXBlIHByZWZpeCA9IHNl
dmVyaXR5ID09IEVSUk9SID8gRVByZWZpeEVycm9yIDogRVByZWZpeFdhcm5pbmc7CisKKyAgICAv
KiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWlu
Zm8gKi8KKyAgICBzaW5rLnByZWZpeChwcmVmaXgpOworICAgIHNpbmsubG9jYXRpb24oRW5jb2Rl
U291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOworICAgIHNpbmsgPDwgIiciIDw8IHRva2Vu
IDw8ICAiJyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYSA8PCAiXG4iOworfQorCit2b2lk
IFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAg
IG1JbmZvU2luay5kZWJ1ZyA8PCBzdHI7Cit9CisKK3ZvaWQgVERpYWdub3N0aWNzOjpwcmludChJ
RCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24m
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkK
K3sKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9z
dGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5l
IENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzLmgiCisKK2NsYXNzIFRJbmZvU2luazsKKworY2xhc3MgVERpYWdu
b3N0aWNzIDogcHVibGljIHBwOjpEaWFnbm9zdGljcworeworICBwdWJsaWM6CisgICAgVERpYWdu
b3N0aWNzKFRJbmZvU2luayYgaW5mb1NpbmspOworICAgIHZpcnR1YWwgflREaWFnbm9zdGljcygp
OworCisgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIG1JbmZvU2luazsgfQorCisg
ICAgdm9pZCB3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCisgICAgICAgICAgICAgICAgICAg
Y29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4dHJhKTsK
KworICAgIHZvaWQgd3JpdGVEZWJ1Zyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOworCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5r
JiBtSW5mb1Npbms7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9EaXJlY3Rp
dmVIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIv
ZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgorCitzdGF0aWMgVEJl
aGF2aW9yIGdldEJlaGF2aW9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtSZXF1aXJlKCJyZXF1aXJlIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtFbmFibGUoImVuYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlzYWJsZSgiZGlzYWJsZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBr
V2Fybigid2FybiIpOworCisgICAgaWYgKHN0ciA9PSBrUmVxdWlyZSkgcmV0dXJuIEVCaFJlcXVp
cmU7CisgICAgZWxzZSBpZiAoc3RyID09IGtFbmFibGUpIHJldHVybiBFQmhFbmFibGU7CisgICAg
ZWxzZSBpZiAoc3RyID09IGtEaXNhYmxlKSByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlm
IChzdHIgPT0ga1dhcm4pIHJldHVybiBFQmhXYXJuOworICAgIHJldHVybiBFQmhVbmRlZmluZWQ7
Cit9CisKK1REaXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpCisgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0
QmVoYXZpb3IpLAorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitURGly
ZWN0aXZlSGFuZGxlcjo6flREaXJlY3RpdmVIYW5kbGVyKCkKK3sKK30KKwordm9pZCBURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNn
KQoreworICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwg
bG9jLCBtc2csICIiLCAiIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVBy
YWdtYShjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtTVERHTCgiU1RER0wiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga09wdGltaXplKCJvcHRpbWl6ZSIpOworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGVidWcoImRlYnVnIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtPbigib24iKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga09mZigib2ZmIik7CisK
KyAgICBib29sIGludmFsaWRWYWx1ZSA9IGZhbHNlOworICAgIGlmIChuYW1lID09IGtTVERHTCkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBTVERHTCBwcmFnbWEgaXMgdXNlZCB0byByZXNlcnZlIHBy
YWdtYXMgZm9yIHVzZSBieSBmdXR1cmUKKyAgICAgICAgLy8gcmV2aXNpb25zIG9mIEdMU0wuIEln
bm9yZSBpdC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09IGtP
cHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBrT24pIG1QcmFnbWEub3B0aW1p
emUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBrT2ZmKSBtUHJhZ21hLm9wdGlt
aXplID0gZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAobmFtZSA9PSBrRGVidWcpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT0g
a09uKSBtUHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0ga09m
ZikgbVByYWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRy
dWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLCBsb2MsIG5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGludmFsaWRWYWx1ZSkKKyAgICAgIG1EaWFnbm9z
dGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW52YWxpZCBwcmFnbWEgdmFsdWUiLCB2YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIidvbicgb3IgJ29mZicgZXhwZWN0ZWQiKTsKK30KKwordm9p
ZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0V4dEFsbCgiYWxsIik7CisKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBn
ZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFVuZGVmaW5l
ZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNz
OjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlvciIs
IG5hbWUsICJpbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmFt
ZSA9PSBrRXh0QWxsKQorICAgIHsKKyAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVp
cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRp
YWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImNhbm5vdCBoYXZlICdyZXF1aXJlJyBiZWhhdmlvciIpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGhhdmUgJ2VuYWJsZScgYmVoYXZp
b3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoVEV4dGVuc2lvbkJlaGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9y
LmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVu
ZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRFeHRlbnNpb25CZWhh
dmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5maW5kKG5hbWUpOworICAg
IGlmIChpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKSkKKyAgICB7CisgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
cHA6OkRpYWdub3N0aWNzOjpTZXZlcml0eSBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJS
T1I7CisgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgY2FzZSBFQmhSZXF1aXJlOgor
ICAgICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6RVJST1I7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFQmhFbmFibGU6CisgICAgICBjYXNlIEVCaFdhcm46CisgICAgICBjYXNl
IEVCaERpc2FibGU6CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpXQVJOSU5H
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHNldmVy
aXR5LCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwg
ImlzIG5vdCBzdXBwb3J0ZWQiKTsKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxl
VmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBrVmVyc2lvbiA9IDEwMDsKKworICAgIGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIHsK
KyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgdmVy
c2lvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFtLnN0cigpOworICAgICAgICBt
RGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiBudW1iZXIiLCBzdHIsICJub3Qgc3Vw
cG9ydGVkIik7CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfRElSRUNUSVZFX0hB
TkRMRVJfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvUHJhZ21hLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVIYW5kbGVyLmgiCisKK2NsYXNzIFREaWFnbm9zdGljczsKKworY2xhc3Mg
VERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVi
bGljOgorICAgIFREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZp
b3IsCisgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcyk7Cisg
ICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAgIGNvbnN0IFRQcmFnbWEmIHBy
YWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KKyAgICBjb25zdCBURXh0ZW5zaW9uQmVo
YXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbUV4dGVuc2lvbkJlaGF2
aW9yOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3IoY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBtc2cpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25zdCBwcDo6U291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRlbnNpb24oY29u
c3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbik7CisKKyAgcHJpdmF0ZToKKyAgICBUUHJh
Z21hIG1QcmFnbWE7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBtRXh0ZW5zaW9uQmVoYXZpb3I7
CisgICAgVERpYWdub3N0aWNzJiBtRGlhZ25vc3RpY3M7Cit9OworCisjZW5kaWYgIC8vIENPTVBJ
TEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOSArNywxMSBAQAogI2lmbmRlZiBfRVhU
RU5TSU9OX0JFSEFWSU9SX0lOQ0xVREVEXwogI2RlZmluZSBfRVhURU5TSU9OX0JFSEFWSU9SX0lO
Q0xVREVEXwogCi0jaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSA8bWFwPgor
I2luY2x1ZGUgPHN0cmluZz4KIAotdHlwZWRlZiBlbnVtIHsKK3R5cGVkZWYgZW51bQorewogICAg
IEVCaFJlcXVpcmUsCiAgICAgRUJoRW5hYmxlLAogICAgIEVCaFdhcm4sCkBAIC0xOSwyMCArMjEs
MTcgQEAgdHlwZWRlZiBlbnVtIHsKIAogaW5saW5lIGNvbnN0IGNoYXIqIGdldEJlaGF2aW9yU3Ry
aW5nKFRCZWhhdmlvciBiKQogewotICAgIHN3aXRjaChiKSB7Ci0gICAgICBjYXNlIEVCaFJlcXVp
cmU6Ci0gICAgICAgIHJldHVybiAicmVxdWlyZSI7Ci0gICAgICBjYXNlIEVCaEVuYWJsZToKLSAg
ICAgICAgcmV0dXJuICJlbmFibGUiOwotICAgICAgY2FzZSBFQmhXYXJuOgotICAgICAgICByZXR1
cm4gIndhcm4iOwotICAgICAgY2FzZSBFQmhEaXNhYmxlOgotICAgICAgICByZXR1cm4gImRpc2Fi
bGUiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3dpdGNoKGIp
CisgICAgeworICAgICAgY2FzZSBFQmhSZXF1aXJlOiByZXR1cm4gInJlcXVpcmUiOworICAgICAg
Y2FzZSBFQmhFbmFibGU6IHJldHVybiAiZW5hYmxlIjsKKyAgICAgIGNhc2UgRUJoV2FybjogcmV0
dXJuICJ3YXJuIjsKKyAgICAgIGNhc2UgRUJoRGlzYWJsZTogcmV0dXJuICJkaXNhYmxlIjsKKyAg
ICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOwogICAgIH0KIH0KIAotdHlwZWRlZiBUTWFwPFRTdHJp
bmcsIFRCZWhhdmlvcj4gVEV4dGVuc2lvbkJlaGF2aW9yOworLy8gTWFwcGluZyBiZXR3ZWVuIGV4
dGVuc2lvbiBuYW1lIGFuZCBiZWhhdmlvci4KK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcs
IFRCZWhhdmlvcj4gVEV4dGVuc2lvbkJlaGF2aW9yOwogCiAjZW5kaWYgLy8gX0VYVEVOU0lPTl9U
QUJMRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIHN0YXRpYyBUU3RyaW5nIERlZmF1bHRQcmVjaXNpb25GcmFn
bWVudCgKIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiBjb25zdGFudHMuCiAv
LwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRz
KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQorc3RhdGljIFRTdHJpbmcgQnVp
bHRJbkNvbnN0YW50cyhTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
ICZyZXNvdXJjZXMpCiB7CiAgICAgVFN0cmluZ1N0cmVhbSBzOwogCkBAIC00ODcsNyArNDg3LDkg
QEAgc3RhdGljIFRTdHJpbmcgQnVpbHRJbkNvbnN0YW50cyhjb25zdCBTaAogICAgIHMgPDwgImNv
bnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50
IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdl
VW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7
Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMu
TWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNf
U1BFQykKKyAgICAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCBy
ZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPDwgIjsiOwogCiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9
CkBAIC01MTMsNyArNTE1LDcgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoU2hTaGFkZXJU
eXBlIAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRl
ZCIpOwogICAgIH0KIAotICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29uc3Rh
bnRzKHJlc291cmNlcykpOworICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29u
c3RhbnRzKHNwZWMsIHJlc291cmNlcykpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNTI2LDExICs1MjgsMjIgQEAg
dm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLAogICAgIC8vCiAgICAgc3dp
dGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nv
b3JkLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xv
ciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
Q29sb3IsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29y
ZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50
Q29vcmQsICAyKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICAgVFR5
cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRG
YWNpbmciKSwgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVk
LCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAgICAgICAgICAgICAg
ICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOwor
CisgICAgICAgIC8vCisgICAgICAgIC8vIEluIENTUyBTaGFkZXJzLCBnbF9GcmFnQ29sb3IsIGds
X0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1ZmZlcnMgYXJlIG5vdCBhdmFpbGFibGUuCisgICAg
ICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xvciBhbmQgY3NzX0NvbG9yTWF0cml4IGFyZSBhdmFp
bGFibGUuCisgICAgICAgIC8vCisgICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQ
RUMpIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtn
bF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Rh
dGEsICAgIDQpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCAgICAg
ICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAg
NCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksICAgICAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0LCB0cnVlKSkpOworICAgICAgICB9CisK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CkBAIC02MjAsNyAr
NjMzLDggQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLAogCiAgICAg
Ly8gRmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFyaWFibGVzLgogICAgIHN3aXRjaCh0
eXBlKSB7Ci0gICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6IHsKKyAgICBjYXNlIFNIX0ZSQUdN
RU5UX1NIQURFUjoKKyAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewog
ICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCiAgICAg
ICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
NCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0
aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGl6
ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQWxs
b2NhdGUgYSBUTFMgaW5kZXguCisgICAgLy8KKyAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
IE9TX0FsbG9jVExTSW5kZXgoKTsKKyAgICAKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXpl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBPU19UTFNJbmRleCB0bHNp
SW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKKworICAgIGlmIChHbG9iYWxQYXJzZUNv
bnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAm
JiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRh
bGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKKyAgICByZXR1cm4gT1NfRnJl
ZVRMU0luZGV4KHRsc2lJbmRleCk7Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29u
dGV4dCgpCit7CisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURf
VExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGl6ZWQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1
ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworICAgIGlmIChscFBhcnNlQ29udGV4dCAhPSAw
KSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTog
UGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwVGhyZWFkRGF0YSA9IG5ldyBU
VGhyZWFkUGFyc2VDb250ZXh0KCk7CisgICAgaWYgKGxwVGhyZWFkRGF0YSA9PSAwKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk6IFVuYWJsZSB0
byBjcmVhdGUgdGhyZWFkIHBhcnNlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGxwVGhyZWFkRGF0YS0+bHBHbG9iYWxQYXJzZUNvbnRleHQgPSAwOworICAg
IE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4LCBscFRocmVhZERhdGEpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dCgpCit7CisgICAg
aWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Cisg
ICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5k
ZXggbm90IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVh
ZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkp
OworICAgIGlmIChscFBhcnNlQ29udGV4dCkKKyAgICAgICAgZGVsZXRlIGxwUGFyc2VDb250ZXh0
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1RQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQoreworICAgIC8vCisgICAgLy8gTWluaW1hbCBlcnJvciBjaGVja2lu
ZyBmb3Igc3BlZWQKKyAgICAvLworCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisKKyAgICByZXR1cm4gbHBQYXJzZUNvbnRleHQt
PmxwR2xvYmFsUGFyc2VDb250ZXh0OworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDQgKzEz
LDE0IEBAIGJvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7CiBib29sIEluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTsKIGJvb2wgRnJlZVBhcnNlQ29udGV4dCgpOwogCitzdHJ1Y3QgVFBh
cnNlQ29udGV4dDsKK3R5cGVkZWYgVFBhcnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7
CitleHRlcm4gVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwor
I2RlZmluZSBHbG9iYWxQYXJzZUNvbnRleHQgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKKwordHlw
ZWRlZiBzdHJ1Y3QgVFRocmVhZFBhcnNlQ29udGV4dFJlYworeworICAgIFRQYXJzZUNvbnRleHQg
KmxwR2xvYmFsUGFyc2VDb250ZXh0OworfSBUVGhyZWFkUGFyc2VDb250ZXh0OworCiAjZW5kaWYg
Ly8gX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAko
cmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTM3Myw3ICszNzMsNyBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0CiAvLyB0aGVpciBvcGVyYXRvciB0byBF
T3BTZXF1ZW5jZS4KIC8vCiAvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3Vs
ZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgotLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRl
LgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlIGJ1dCBubyBvcGVyYXRvciB3YXMgc2V0
LgogLy8KIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKIHsK
QEAgLTU5MiwxMCArNTkyLDEwIEBAIFRJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxl
Y3Rpb24KICAgICAvLwogCiAgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRB
c1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7Ci0gICAgICAgIGlmIChjb25kLT5nZXRB
c1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5n
ZXRCQ29uc3QoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAg
aWYgKGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldEJDb25zdCgpID09IHRydWUpCisgICAgICAgICAgICByZXR1cm4gbm9k
ZVBhaXIubm9kZTEgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2RlMSwgRU9wU2Vx
dWVuY2UsIG5vZGVQYWlyLm5vZGUxLT5nZXRMaW5lKCkpIDogTlVMTDsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUyOworICAgICAgICAgICAgcmV0dXJuIG5v
ZGVQYWlyLm5vZGUyID8gc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTIsIEVPcFNl
cXVlbmNlLCBub2RlUGFpci5ub2RlMi0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgfQogCiAgICAg
VEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIG5vZGVQ
YWlyLm5vZGUxLCBub2RlUGFpci5ub2RlMik7CkBAIC02NTYsNiArNjU2LDcgQEAgVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3RpbwogICAgIC8vIE1ha2UgYSBzZWxlY3Rpb24g
bm9kZS4KICAgICAvLwogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNl
bGVjdGlvbihjb25kLCB0cnVlQmxvY2ssIGZhbHNlQmxvY2ssIHRydWVCbG9jay0+Z2V0VHlwZSgp
KTsKKyAgICBub2RlLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5
KTsKICAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwogCiAgICAgcmV0dXJuIG5vZGU7CkBAIC0xNDQ0
LDkgKzE0NDUsMyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAg
ICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVU
bywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgp
LCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAotdm9p
ZCBUSW50ZXJtQWdncmVnYXRlOjphZGRUb1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYg
cFRhYmxlKQotewotICAgIGFzc2VydCghcHJhZ21hVGFibGUpOwotICAgIHByYWdtYVRhYmxlID0g
bmV3IFRQcmFnbWFUYWJsZSgpOwotICAgICpwcmFnbWFUYWJsZSA9IHBUYWJsZTsKLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1l
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUsNyArMTUsOSBAQCBUU3RyaW5nIG1hcExvbmdOYW1lKGludCBpZCwg
Y29uc3QgVFN0cmluCiAgICAgc3RyZWFtIDw8ICJ3ZWJnbF8iOwogICAgIGlmIChpc0dsb2JhbCkK
ICAgICAgICAgc3RyZWFtIDw8ICJnIjsKLSAgICBzdHJlYW0gPDwgaWQgPDwgIl8iOworICAgIHN0
cmVhbSA8PCBpZDsKKyAgICBpZiAobmFtZVswXSAhPSAnXycpCisgICAgICAgIHN0cmVhbSA8PCAi
XyI7CiAgICAgc3RyZWFtIDw8IG5hbWUuc3Vic3RyKDAsIE1BWF9TSE9SVEVORURfSURFTlRJRklF
Ul9TSVpFIC0gc3RyZWFtLnN0cigpLnNpemUoKSk7CiAgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiwxMCAr
NiwxMiBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgogCisjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0RGlzY29u
dGludWl0eS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CkBA
IC0yMCwxMyArMjIsMTMgQEAgbmFtZXNwYWNlIHNoCiBUU3RyaW5nIHN0cihpbnQgaSkKIHsKICAg
ICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOworICAgIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwogICAgIHJldHVybiBidWZm
ZXI7CiB9CiAKIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCkg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250ZXh0KQog
ewotICAgIG1VbmZvbGRTZWxlY3QgPSBuZXcgVW5mb2xkU2VsZWN0KGNvbnRleHQsIHRoaXMpOwor
ICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0KGNvbnRleHQs
IHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCiAgICAgbVVzZXNUZXh0dXJl
MkQgPSBmYWxzZTsKQEAgLTM4LDYgKzQwLDEyIEBAIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBh
cnNlQ29udGV4dCAmY28KICAgICBtVXNlc1RleHR1cmVDdWJlID0gZmFsc2U7CiAgICAgbVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7CiAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNl
OworICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJETG9k
MF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IGZhbHNlOworICAg
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1
YmVMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwog
ICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7
CiAgICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7CkBAIC03NSwyMCArODMsMjYgQEAgT3V0cHV0
SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwogICAgIG1TY29wZURlcHRoID0gMDsK
IAogICAgIG1VbmlxdWVJbmRleCA9IDA7CisKKyAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0
eSA9IGZhbHNlOworICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICBtSW5zaWRl
RGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKIH0KIAogT3V0cHV0SExTTDo6fk91dHB1dEhMU0wo
KQogewotICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworICAgIGRlbGV0ZSBtVW5mb2xkU2hvcnRD
aXJjdWl0OwogfQogCiB2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7CisgICAgbUNvbnRhaW5z
TG9vcERpc2NvbnRpbnVpdHkgPSBjb250YWluc0xvb3BEaXNjb250aW51aXR5KG1Db250ZXh0LnRy
ZWVSb290KTsKKwogICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBP
dXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBo
ZWFkZXIKICAgICBoZWFkZXIoKTsKIAotICAgIG1Db250ZXh0LmluZm9TaW5rLm9iaiA8PCBtSGVh
ZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
CisgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUhlYWRlci5jX3N0cigpOworICAgIG1D
b250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKIFRJbmZvU2lua0Jh
c2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQpAQCAtMjA1LDI1ICsyMTksMTEgQEAgdm9p
ZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwogICAgICAg
ICBvdXQgPDwgIlxuIjsKIAotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRjaCBmdW5jdGlvbnMg
ImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVyLiBUaGlzIGlzIGJl
Y2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIE9w
ZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQiLCByYXRoZXIgdGhh
biB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8vIGlzICJ0b3AgbGVm
dCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4cGVjdCB0ZXh0dXJl
cyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAgLy8gY29udmVudGlv
biwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIGlzIGFkanVzdGVk
IHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBzaW1wbGVzdCBjYXNl
IGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwgd2hpY2ggbWFwcyBb
MCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgdGV4dHVyZTJEUHJv
aiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUgcHJvamVjdGlvbiBk
aXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAgICAvLyBjYXNlLCB0
aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNoIGFnYWluIG1hcHMg
WzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9yIGN1YmUgdGV4dHVy
ZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFdIC0+IFsxLCAtMV0u
IFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0gICAgICAgIC8vICtZ
IGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNpZGVzIiBvZiB0aGUg
Y3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0aGUKLSAgICAgICAg
Ly8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0IHRoZSBjb2RlLgot
ICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAgICB7CiAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkQocywgZmxvYXQyKHQueCwgMSAtIHQueSkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZv
aWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIK
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCAxIC0gdC55LCAwLCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwg
YmlhcykpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAg
IlxuIjsKICAgICAgICAgfQpAQCAtMjQxLDEyICsyNDEsMTIgQEAgdm9pZCBPdXRwdXRITFNMOjpo
ZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54
LCB0LnogLSB0LnksIDAsIHQueikpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0LnksIDAsIHQueikpO1xuIgogICAgICAgICAgICAg
ICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgogICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCiAgICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RHByb2oocywgZmxvYXQ0KHQueCwgdC53IC0gdC55LCB0LnosIHQudykpO1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtcbiIKICAgICAgICAgICAgICAg
ICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI1NSwx
MiArMjU1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQz
IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgMSAtICh0
LnkgLyB0LnopLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xuIgog
ICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgogICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0
IHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgMSAtICh0
LnkgLyB0LncpLCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgYmlhcykpO1xuIgog
ICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAg
ICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIGZsb2F0Myh0LngsIC10LnksIHQueikpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCiAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9
CkBAIC0yNzgsNyArMjc4LDczIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAg
ewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUg
cywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCAt
dC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhD
VUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xuIgorICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3MgYXJlIG5vdCBhdmFpbGFibGUgaW4gR0wgZnJh
Z21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8gVGhleSBhcmUgdXNlZCB0byBzYW1wbGUgdXNpbmcg
ZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAobVVzZXNUZXh0
dXJlMkRMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExv
ZDBfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChz
LCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VC
RSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAg
ICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTg5Nyw3ICs5NjMsNyBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewotICAgICAgICAg
ICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5h
bWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwogCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTk3Myw5ICsxMDM5LDkgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVs
ZFR5cGUgPSAoKmZpZWxkcylbaV0udHlwZTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdldExl
ZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxk
VHlwZS0+Z2V0RmllbGROYW1lKCkgKyAiID09ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIu
IiArIGRlY29yYXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVm
dCgpLT5nZXRUeXBlKCkpICsgIiA9PSAiOwogICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0
KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlw
ZSgpKTsKIAogICAgICAgICAgICAgICAgIGlmIChpIDwgZmllbGRzLT5zaXplKCkgLSAxKQogICAg
ICAgICAgICAgICAgIHsKQEAgLTEwNTQsMTIgKzExMjAsMTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDog
b3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFr
OwogICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwg
Im11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNw
b3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9n
aWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAg
YnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAgb3V0IDw8ICJzIiA8PCBt
VW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgogICAgICAgICBtVXNlc1hvciA9
IHRydWU7CiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ4b3IoIiwgIiwgIiwgIikiKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6ICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BM
b2dpY2FsQW5kOgorICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdl
dE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApAQCAtMTEzMSw5ICsxMjAxLDM2IEBAIGJvb2wg
T3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgIGNhc2UgRU9wRnJhY3Q6
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZyYWMoIiwgIiIsICIpIik7ICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJsZW5ndGgoIiwgIiIsICIpIik7ICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BOb3JtYWxp
emU6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibm9ybWFsaXplKCIsICIiLCAiKSIpOyBi
cmVhazsKLSAgICAgIGNhc2UgRU9wREZkeDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImRkeCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHk6ICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLWRkeSgiLCAiIiwgIikpIik7ICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiZndpZHRoKCIsICIiLCAiKSIpOyAgICBicmVhazsgICAgICAgIAorICAgICAgY2FzZSBFT3BE
RmR4OgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBG
dW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wREZkeToKKyAgICAgICAgaWYobUluc2lk
ZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImRkeSgiLCAiIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wRndpZHRoOgorICAgICAgICBpZihtSW5zaWRlRGlzY29udGludW91c0xvb3AgfHwg
bU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwg
IikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wQW55OiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwgIikiKTsgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKQEAgLTExNzEsMTIgKzEyNjgsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURp
cmVjdGl2ZSgoKnNpdCktPmdldExpbmUoKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoaXNTaW5n
bGVTdGF0ZW1lbnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZSgqc2l0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAoKnNpdCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIHRy
YXZlcnNlU3RhdGVtZW50cygqc2l0KTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsK
ICAgICAgICAgICAgIH0KQEAgLTEyOTAsNTkgKzEzODIsNjQgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogCi0gICAgICAg
ICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmlu
Zyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1h
aW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFpbigiOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiOworICAgICAg
ICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobU91dHB1dExvZDBGdW5jdGlvbiA/
ICJMb2QwKCIgOiAiKCIpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT0gIm1haW4iKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF9tYWluKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShu
YW1lKSA8PCAiKCI7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgVEludGVybVNlcXVl
bmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJt
U2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRT
ZXF1ZW5jZSgpOwogCi0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZh
cmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgICAgICBpZiAoc3ltYm9sKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJv
bE5vZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCiAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wtPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0
KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJv
bC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUo
KSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgp
IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBzZXF1ZW5j
ZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKLQotICAgICAgICAgICAgICAgIG91dCA8PCAiKVxu
IjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZl
KG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAgIntc
biI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5zaXplKCkgPiAxKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgc2VxdWVuY2VbMV0tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
ICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RW5kTGluZSgpKTsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAifVxu
IjsKIAotICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1bmN0aW9u
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICJtYWluIikKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CkBAIC0xMzUw
LDU0ICsxNDQ3LDEwNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
CiAgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+
Z2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBib29sIGxvZDAgPSBtSW5zaWRlRGlzY29udGlu
dW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbjsKIAogICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigiOworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgKGxvZDAgPyAiTG9kMCgiIDogIigiKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJEID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJEX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4
dHVyZTJETG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
MkQoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExv
ZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIikKICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxv
ZDApCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZTJEUHJvaigiOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikKICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCiAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleHR1cmUyRExvZCIpCiAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTE1ODMsMTEgKzE3
MzIsMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aQogCiAgICAg
aWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAi
cyIgPDwgbVVuZm9sZFNlbGVjdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIG91
dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7
CiAgICAgfQogICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CiAgICAgewotICAgICAgICBt
VW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisgICAgICAgIG1V
bmZvbGRTaG9ydENpcmN1aXQtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKIAogICAg
ICAgICBvdXQgPDwgImlmKCI7CiAKQEAgLTE2MDAsMTEgKzE3NDksMTEgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aQogCiAgICAgICAgIGlmIChub2RlLT5nZXRUcnVl
QmxvY2soKSkKICAgICAgICAgewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldFRy
dWVCbG9jaygpKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9k
ZS0+Z2V0TGluZSgpKTsKLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgb3V0IDw8ICI7
XG59XG4iOwogCiAgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCiAgICAgICAgIHsK
QEAgLTE2MTQsMTAgKzE3NjMsMTAgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aQogICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwogCiAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsKLSAgICAgICAg
ICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKIAogICAgICAgICAgICAg
b3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUoKSk7Ci0g
ICAgICAgICAgICBvdXQgPDwgIjt9XG4iOworICAgICAgICAgICAgb3V0IDw8ICI7XG59XG4iOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0xNjMxLDYgKzE3ODAsMTMgQEAgdm9pZCBPdXRwdXRITFNM
Ojp2aXNpdENvbnN0YW50VW5pb24oVEludAogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiB7CisgICAgYm9vbCB3YXNEaXNjb250aW51
b3VzID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOworCisgICAgaWYgKCFtSW5zaWRlRGlzY29u
dGludW91c0xvb3ApCisgICAgeworICAgICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSBj
b250YWluc0xvb3BEaXNjb250aW51aXR5KG5vZGUpOworICAgIH0KKwogICAgIGlmIChoYW5kbGVF
eGNlc3NpdmVMb29wKG5vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY3
Niw3ICsxODMyLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAog
CiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICB7Ci0gICAgICAgIG5vZGUtPmdldEJvZHko
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRC
b2R5KCkpOwogICAgIH0KIAogICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgp
KTsKQEAgLTE2OTQsNiArMTg1MCw4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LCAKIAogICAgIG91dCA8PCAifVxuIjsKIAorICAgIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3
MzIsNiArMTg5MCwxNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6dHJhdmVyc2VTdGF0ZW1l
bnRzKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2Rl
KSkKKyAgICB7CisgICAgICAgIG1VbmZvbGRTaG9ydENpcmN1aXQtPnRyYXZlcnNlKG5vZGUpOwor
ICAgIH0KKworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworfQorCiBib29sIE91dHB1dEhMU0w6
OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKQogewogICAgIFRJbnRlcm1BZ2dy
ZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CkBAIC0xNzU5LDkgKzE5
MjcsMTEgQEAgYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50ZQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJh
dGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCisvLyBIYW5kbGUg
bG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU0IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkp
IGJ5IHNwbGl0dGluZyB0aGVtCisvLyAoVGhlIEQzRCBkb2N1bWVudGF0aW9uIHNheXMgMjU1IGl0
ZXJhdGlvbnMsIGJ1dCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGF0IGFueXRoaW5nIG1vcmUgdGhh
biAyNTQpLgogYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29w
ICpub2RlKQogeworICAgIGNvbnN0IGludCBNQVhfTE9PUF9JVEVSQVRJT05TID0gMjU0OwogICAg
IFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCiAgICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhl
IGZvcm06CkBAIC0xODc3LDE0ICsyMDQ3LDE0IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhj
ZXNzaXZlTG9vcChUSW4KICAgICAgICAgewogICAgICAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAo
bGltaXQgLSBpbml0aWFsKSAvIGluY3JlbWVudDsKIAotICAgICAgICAgICAgaWYgKGl0ZXJhdGlv
bnMgPD0gMjU1KQorICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gTUFYX0xPT1BfSVRFUkFU
SU9OUykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8g
Tm90IGFuIGV4Y2Vzc2l2ZSBsb29wCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHdoaWxl
IChpdGVyYXRpb25zID4gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2xh
bXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9u
cyk7CisgICAgICAgICAgICAgICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1l
bnQgKiBzdGQ6Om1pbihNQVhfTE9PUF9JVEVSQVRJT05TLCBpdGVyYXRpb25zKTsKIAogICAgICAg
ICAgICAgICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1p
dDsgaW5kZXggKz0gaW5jcmVtZW50KQogCkBAIC0xOTE1LDggKzIwODUsOCBAQCBib29sIE91dHB1
dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAgICAgICAgICAgICAgICAgb3V0cHV0TGlu
ZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31c
biI7CiAKLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKLSAgICAg
ICAgICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9
IE1BWF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0
aW9ucyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIwMTIsNyArMjE4Miw3IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6
dHlwZVN0cmluZyhjb25zdCBUVHkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAgICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5h
bWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgICAgIHN0cmlu
ZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29yYXRlKGZpZWxkLmdl
dEZpZWxkTmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKQEAgLTIwNjUsNiArMjIzNSw4IEBAIFRT
dHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHkKICAgICAgICAgICAgIHJldHVy
biAic2FtcGxlckNVQkUiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgog
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzNSw3ICsyMzA3LDcgQEAg
dm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVAogICAgICAgICB7CiAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CiAKLSAgICAgICAg
ICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxk
LmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLmdldEZpZWxkTmFtZSgpLCB0eXBlKSArIGFycmF5U3RyaW5nKGZpZWxkKSAr
ICI7XG4iOwogICAgICAgICB9CiAKICAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKQEAgLTI0
MzQsNCArMjYwNiwxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25z
CiAgICAgCiAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CisKK1RTdHJpbmcgT3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpCit7CisgICAgaWYgKHN0cnVjdHVyZS5nZXRUeXBlTmFtZSgpLmNvbXBhcmUoMCwg
MywgImdsXyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxMjIy
MzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBACiAKIG5hbWVzcGFjZSBzaAogewotY2xh
c3MgVW5mb2xkU2VsZWN0OworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0OwogCiBjbGFzcyBPdXRw
dXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKIHsKQEAgLTMzLDYgKzMzLDcgQEAgY2xh
c3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIHN0YXRpYyBUU3RyaW5n
IGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVw
ZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRT
dHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAm
c3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBoZWFkZXIoKTsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVycwogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCopOwogICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsK
IAorICAgIHZvaWQgdHJhdmVyc2VTdGF0ZW1lbnRzKFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBi
b29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKICAgICBib29sIGhhbmRs
ZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOwogICAgIHZvaWQgb3V0cHV0VHJpcGxl
dChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZp
blN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CkBAIC02Miw3ICs2NCw3IEBAIGNs
YXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAgICBUU3RyaW5nIHN0cnVj
dExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7CiAKICAgICBUUGFyc2VDb250ZXh0ICZt
Q29udGV4dDsKLSAgICBVbmZvbGRTZWxlY3QgKm1VbmZvbGRTZWxlY3Q7CisgICAgVW5mb2xkU2hv
cnRDaXJjdWl0ICptVW5mb2xkU2hvcnRDaXJjdWl0OwogICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9u
OwogCiAgICAgLy8gT3V0cHV0IHN0cmVhbXMKQEAgLTg0LDYgKzg2LDEyIEBAIGNsYXNzIE91dHB1
dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7
CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7CiAgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZUxvZDA7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOwogICAgIGJvb2wgbVVz
ZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CiAgICAgYm9vbCBtVXNlc1Bv
aW50Q29vcmQ7CkBAIC0xMzIsNiArMTQwLDEwIEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMg
VEludGVybVRyYXZlcnMKICAgICB1bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKICAgICBpbnQg
bVVuaXF1ZUluZGV4OyAgIC8vIEZvciBjcmVhdGluZyB1bmlxdWUgbmFtZXMKKworICAgIGJvb2wg
bUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7CisgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9u
OworICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogfTsKIH0KIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
Y3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUGFyc2VIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwzMyArMTAsNyBAQAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRlICJjb21waWxlci9nbHNsYW5nLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oIgotCi1leHRlcm4gIkMiIHsKLWV4dGVybiBpbnQgSW5pdFByZXByb2Nlc3Nv
cigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotZXh0ZXJuIHZvaWQgUHJl
ZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKLX0KLQotc3RhdGlj
IHZvaWQgUmVwb3J0SW5mbyhUSW5mb1NpbmtCYXNlJiBzaW5rLAotICAgICAgICAgICAgICAgICAg
ICAgICBUUHJlZml4VHlwZSB0eXBlLCBUU291cmNlTG9jIGxvYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKLXsKLSAgICAvKiBWQysrIGZvcm1h
dDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAgICBz
aW5rLnByZWZpeCh0eXBlKTsKLSAgICBzaW5rLmxvY2F0aW9uKGxvYyk7Ci0gICAgc2luayA8PCAi
JyIgPDwgdG9rZW4gPDwgICInIDogIiA8PCByZWFzb24gPDwgIiAiIDw8IGV4dHJhSW5mbyA8PCAi
XG4iOwotfQotCi1zdGF0aWMgdm9pZCBEZWZpbmVFeHRlbnNpb25NYWNyb3MoY29uc3QgVEV4dGVu
c2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikKLXsKLSAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlv
cjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7Ci0gICAgICAgICBp
dGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgUHJlZGVmaW5lSW50
TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0gICAgfQotfQorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
IC8vCkBAIC01Miw3ICsyNiw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVs
ZHMoY28KIHsKICAgICBmaWVsZHMubnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7CiAgICAg
aWYgKGZpZWxkcy5udW0gPiA0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3Rv
ciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTExNCwyMCArODgsMjAg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjbwogICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlc3RwcTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlv
biIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewogICAgICAgICBpZiAoZmllbGRzLm9mZnNldHNb
aV0gPj0gdmVjU2l6ZSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInZlY3RvciBmaWVsZCBz
ZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgZXJyb3IobGluZSwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwg
IGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAh
PSBmaWVsZFNldFtpLTFdKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
LSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3Ry
aW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCAt
IHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBTdHJp
bmcuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xNDksMjAgKzEyMywyMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBh
cnNlTWF0cml4RmllbGRzKGNvCiAgICAgZmllbGRzLmNvbCA9IC0xOwogCiAgICAgaWYgKGNvbXBT
dHJpbmcuc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3Ro
IG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rp
b24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5n
WzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IHRydWU7CiAgICAgICAgIGZpZWxk
cy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOwogICAgIH0gZWxzZSBpZiAoY29tcFN0cmluZ1sx
XSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmlu
Z1swXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLndob2xlUm93ID0gdHJ1ZTsKQEAgLTE3MCw3ICsxNDQsNyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvbXBT
dHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAogICAgICAgICAgICAgY29t
cFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmll
bGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcw
JzsKQEAgLTE3OCw3ICsxNTIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4Rmll
bGRzKGNvCiAgICAgfQogCiAgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMu
Y29sID49IG1hdFNpemUpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJp
bmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTIwMywzMCAr
MTc3LDI4IEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCiAvLwogdm9pZCBUUGFyc2VD
b250ZXh0OjplcnJvcihUU291cmNlTG9jIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm8pCiB7Ci0gICAgY2hhciBleHRyYUlu
Zm9bNTEyXTsKLSAgICB2YV9saXN0IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJh
SW5mb0Zvcm1hdCk7Ci0gICAgdnNucHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyks
IGV4dHJhSW5mb0Zvcm1hdCwgbWFya2VyKTsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOwog
Ci0gICAgUmVwb3J0SW5mbyhpbmZvU2luay5pbmZvLCBFUHJlZml4RXJyb3IsIGxvYywgcmVhc29u
LCB0b2tlbiwgZXh0cmFJbmZvKTsKLQotICAgIHZhX2VuZChtYXJrZXIpOwogICAgICsrbnVtRXJy
b3JzOwogfQogCiB2b2lkIFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLikgewotICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07Ci0gICAgdmFfbGlzdCBt
YXJrZXI7Ci0gICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOwotICAgIHZzbnBy
aW50ZihleHRyYUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQsIG1hcmtl
cik7Ci0KLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhXYXJuaW5nLCBsb2Ms
IHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXh0cmFJbmZvKSB7CisgICAgcHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsK
KyAgICBEZWNvZGVTb3VyY2VMb2MobG9jLCAmc3JjTG9jLmZpbGUsICZzcmNMb2MubGluZSk7Cisg
ICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6V0FSTklORywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOwor
fQogCi0gICAgdmFfZW5kKG1hcmtlcik7Cit2b2lkIFRQYXJzZUNvbnRleHQ6OnRyYWNlKGNvbnN0
IGNoYXIqIHN0cikKK3sKKyAgICBkaWFnbm9zdGljcy53cml0ZURlYnVnKHN0cik7CiB9CiAKIC8v
CkBAIC0yMzQsOCArMjA2LDEwIEBAIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNl
TG9jIGwKIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGludCBsaW5lLCBjb25z
dCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxp
bmUsICIiLCBvcCwgImNhbm5vdCBjb252ZXJ0IGZyb20gJyVzJyB0byAnJXMnIiwKLSAgICAgICAg
ICByaWdodC5jX3N0cigpLCBsZWZ0LmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4
dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IGZy
b20gJyIgPDwgcmlnaHQgPDwgIicgdG8gJyIgPDwgbGVmdCA8PCAiJyI7CisgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgIGVycm9yKGxpbmUsICIi
LCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOwogfQogCiAvLwpAQCAtMjQzLDkgKzIxNywxMSBAQCB2
b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGludCBsaW5lCiAvLwogdm9pZCBUUGFyc2VD
b250ZXh0Ojp1bmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9w
ZXJhbmQpCiB7Ci0gICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9wLCAKLSAg
ICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFuZCBv
ZiB0eXBlICVzIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwKLSAgICAg
ICAgICBvcCwgb3BlcmFuZC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3Ag
PDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFuZCBvZiB0eXBlICIgPDwgb3BlcmFuZCAK
KyAgICAgICAgICAgICAgICAgICAgPDwgIiAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252
ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIGV4dHJhSW5m
by5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI1MywxMCArMjI5LDExIEBAIHZvaWQgVFBhcnNlQ29u
dGV4dDo6dW5hcnlPcEVycm9yKGludCBsaW4KIC8vCiB2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFy
eU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcg
cmlnaHQpCiB7Ci0gICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAK
LSAgICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQt
aGFuZCBvcGVyYW5kIG9mIHR5cGUgJyVzJyBhbmQgIgotICAgICAgICAgICAgImEgcmlnaHQgb3Bl
cmFuZCBvZiB0eXBlICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbiki
LCAKLSAgICAgICAgICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwg
Im5vIG9wZXJhdGlvbiAnIiA8PCBvcCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFu
ZCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgbGVmdCAKKyAgICAgICAgICAgICAgICAgICAgPDwgIicg
YW5kIGEgcmlnaHQgb3BlcmFuZCBvZiB0eXBlICciIDw8IHJpZ2h0IDw8ICInIChvciB0aGVyZSBp
cyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8g
PSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5k
IHR5cGVzICIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7IAogfQogCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBU
QmFzaWNUeXBlIHR5cGUpewpAQCAtMjY1LDEzICsyNDIsMTMgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpwcmVjaXNpb25FcnJvckNoZWNrKAogICAgIHN3aXRjaCggdHlwZSApewogICAgIGNhc2UgRWJ0
RmxvYXQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAi
IiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmll
ZCBmb3IgKGZsb2F0KSIsICIiICk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICBjYXNlIEVidEludDoKICAgICAgICAgaWYoIHByZWNpc2lv
biA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lz
aW9uIHNwZWNpZmllZCAoaW50KSIsICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUs
ICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzEzLDcgKzI5MCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQKICAgICAgICAgICAgICAgICAg
ICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAgICAgICAgICAgICAgICAgICAg
IG9mZnNldFt2YWx1ZV0rKzsgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3Zh
bHVlXSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAi
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dp
enpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wKTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMy
NCw3ICszMDEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50CiAg
ICAgICAgIGRlZmF1bHQ6IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
ZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0zNjQsNyArMzQxLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVF
cnJvckNoZWNrKGludAogICAgIH0KIAogICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9k
ZSA9PSAwICYmIHN5bU5vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJl
cXVpcmVkIiwgb3ApOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTM3OSwxMCAr
MzU2LDE4IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQKICAgICAv
LwogICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2Uu
CiAgICAgLy8KLSAgICBpZiAoc3ltTm9kZSkKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVl
IHJlcXVpcmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxz
ZQotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBt
ZXNzYWdlKTsKKyAgICBpZiAoc3ltTm9kZSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiXCIiIDw8IHN5bWJv
bCA8PCAiXCIgKCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZh
bHVlIHJlcXVpcmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CisgICAgZWxzZSB7
CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICIoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5l
LCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6Y29uc3RFcnJvckNoZWNrKFRJbnQKICAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExp
bmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOworICAgIGVycm9y
KG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIik7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQxNCw3ICszOTksNyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OmludGVnZXJFcnJvckNoZWNrKFRJCiAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09
IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiBy
ZXF1aXJlZCIsIHRva2VuLCAiIik7CisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdl
ciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC00MzAsNyArNDE1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGlu
dAogICAgIGlmIChnbG9iYWwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGVycm9yKGxp
bmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4sICIiKTsKKyAgICBlcnJv
cihsaW5lLCAib25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtNDQ5LDI0ICs0MzQsMjYgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpy
ZXNlcnZlZEVycm9yQ2hlY2soaQogICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1z
ZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKICAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVp
bHRJbkxldmVsKCkpIHsKICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCAzLCAiZ2xf
IikgPT0gMCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8i
LCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNoYWRlclNw
ZWMgPT0gU0hfV0VCR0xfU1BFQykgeworICAgICAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFk
ZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA2LCAid2Vi
Z2xfIikgPT0gMCkgewotICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNn
LCAid2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJy
TXNnLCAid2ViZ2xfIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDcsICJfd2ViZ2xfIikg
PT0gMCkgewotICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dl
YmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywg
Il93ZWJnbF8iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUMgJiYgaWRl
bnRpZmllci5jb21wYXJlKDAsIDQsICJjc3NfIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGVy
cm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiY3NzXyIpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChpZGVudGlmaWVy
LmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgLy9lcnJvcihsaW5l
LCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVz
ZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7Ci0gICAgICAgICAgICAvL3JldHVybiB0
cnVlOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAi
VHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4i
LCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJpZGVudGlmaWVycyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyAo
X18pIGFyZSByZXNlcnZlZCBhcyBwb3NzaWJsZSBmdXR1cmUga2V5d29yZHMiLCBpZGVudGlmaWVy
LmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTUyNyw1MSArNTE0LDUxIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJv
ckNoZWMKICAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKIAogICAgIGlmICh0
eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0QXJyYXlTaXplKCkgIT0gZnVuY3Rpb24uZ2V0UGFy
YW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBjb25zdHJ1Y3RvciBuZWVk
cyBvbmUgYXJndW1lbnQgcGVyIGFycmF5IGVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBjb25zdHJ1Y3RvciBuZWVkcyBvbmUgYXJndW1lbnQg
cGVyIGFycmF5IGVsZW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCiAgICAgaWYgKGFycmF5QXJnICYmIG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVu
Y2VkIGFycmF5IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY29u
c3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5IiwgImNvbnN0cnVjdG9yIik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChtYXRyaXhJbk1hdHJpeCAm
JiAhdHlwZS0+aXNBcnJheSgpKSB7CiAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50
KCkgIT0gMSkgewotICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZy
b20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIp
OworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4
IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAob3ZlckZ1bGwpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgInRvbyBtYW55IGFyZ3VtZW50cyIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgInRvbyBtYW55IGFyZ3VtZW50cyIsICJjb25zdHJ1Y3Rv
ciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKG9wID09IEVP
cENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIGludCh0eXBlLT5nZXRTdHJ1
Y3QoKS0+c2l6ZSgpKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNo
IHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMg
bm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoIXR5cGUtPmlzTWF0cml4
KCkgfHwgIW1hdHJpeEluTWF0cml4KSB7CiAgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAog
ICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0
T2JqZWN0U2l6ZSgpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0
YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0
aW9uIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIFRJbnRlcm1UeXBlZCAqdHlwZWQgPSBub2RlID8gbm9kZS0+Z2V0QXNU
eXBlZCgpIDogMDsKICAgICBpZiAodHlwZWQgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
Y29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3Ii
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5v
dCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZWQt
PmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQg
YSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fu
bm90IGNvbnZlcnQgYSBzYW1wbGVyIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAodHlwZWQtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsK
LSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgdm9pZCIsICJjb25zdHJ1Y3Rv
ciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgdm9pZCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTU4NSw3ICs1
NzIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjCiBib29sIFRQ
YXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVu
dGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKIHsKICAgICBpZiAocHViVHlwZS50
eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5
cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
ICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTU5OSw3ICs1ODYsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xF
cnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5
cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0b3IoKSkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSAKIApAQCAtNjEzLDcgKzYwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
Ym9vbEVycm9yQ2hlY2soaW50IGwKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2so
aW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKICAgICBpZiAocFR5cGUudHlw
ZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6
ZSA+IDEpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0
ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogCkBAIC02MzEsNyAr
NjE4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhpbgogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBl
LnR5cGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5
cGUudHlwZSksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmlu
ZyhwVHlwZS50eXBlKSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjQzLDcg
KzYzMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3IKIHsKICAg
ICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVy
ID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgJiYK
ICAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwg
ImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5
cGUucXVhbGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQg
d2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY1OCw3ICs2NDUsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvCiB7CiAgICAgaWYgKChx
dWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbk91dCkgJiYgCiAgICAgICAg
ICAgICAgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGUu
Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5ub3Qg
YmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5
cGUuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
NjkwLDE0ICs2NzcsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNr
KAogewogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29u
c3RhbnRVbmlvbigpOwogICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRJbnQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVz
dCBiZSBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbiIsICIiLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Np
b24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHNpemUgPSBjb25z
dGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CiAKICAgICBpZiAoc2l6
ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3Np
dGl2ZSBpbnRlZ2VyIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUg
bXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7CiAgICAgICAgIHNpemUgPSAxOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MTMsNyArNzAwLDcgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKAogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1
YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiB7CiAgICAgaWYg
KCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBF
dnFDb25zdCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBv
ZiB0aGlzIHF1YWxpZmllciIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIo
KSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRo
aXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC03MzEsNyArNzE4LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNrKAogICAgIC8vIENhbiB0aGUgdHlwZSBi
ZSBhbiBhcnJheT8KICAgICAvLwogICAgIGlmICh0eXBlLmFycmF5KSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0
Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5u
b3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC03NjcsMzQg
Kzc1NCwzNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhpbnQgCiAKICAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAg
IGRlbGV0ZSB2YXJpYWJsZTsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJP
UiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwog
ICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5vbi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZp
ZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyaW5nIG5v
bi1hcnJheSBhcyBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRB
cnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9u
IG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoISB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNhbWVFbGVtZW50VHlwZShU
VHlwZSh0eXBlKSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9m
IGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRp
ZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKICAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJ
bmZvcm1hdGlvblR5cGUoKTsKICAgICAgICAgd2hpbGUgKHQgIT0gMCkgewogICAgICAgICAgICAg
aWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKLSAgICAgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhl
IGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3Io
bGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwpAQCAt
ODE2LDcgKzgwMyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnQK
ICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsKICAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xU
YWJsZS5maW5kKG5vZGUtPmdldFN5bWJvbCgpLCAmYnVpbHRJbik7CiAgICAgaWYgKHN5bWJvbCA9
PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgdW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9k
ZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIHVuZGVj
bGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC04MjgsMTQgKzgxNSwxMSBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50CiAgICAgLy8gaXRzIGFuIGVycm9yCiAgICAgaWYg
KG5vZGUtPmdldFN5bWJvbCgpID09ICJnbF9GcmFnRGF0YSIpIHsKICAgICAgICAgVFN5bWJvbCog
ZnJhZ0RhdGEgPSBzeW1ib2xUYWJsZS5maW5kKCJnbF9NYXhEcmF3QnVmZmVycyIsICZidWlsdElu
KTsKLSAgICAgICAgaWYgKGZyYWdEYXRhID09IDApIHsKLSAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgImdsX01heERyYXdCdWZmZXJzIG5vdCBk
ZWZpbmVkIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoZnJhZ0RhdGEpOwogCiAgICAgICAgIGludCBmcmFnRGF0YVZhbHVlID0gc3Rh
dGljX2Nhc3Q8VFZhcmlhYmxlKj4oZnJhZ0RhdGEpLT5nZXRDb25zdFBvaW50ZXIoKVswXS5nZXRJ
Q29uc3QoKTsKICAgICAgICAgaWYgKGZyYWdEYXRhVmFsdWUgPD0gc2l6ZSkgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXgg
YXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIsICIiKTsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFy
cmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg1NCw3IEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGUKICAgICAvLwogICAgIGlmICh0eXBlLnF1YWxp
ZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFy
eTsKLSAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3Qn
IG11c3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5p
dGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTg5MSw3ICs4NzUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJv
ckNoZWNrKGluCiAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlw
ZSh0eXBlKSk7CiAKICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewot
ICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5j
X3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAg
IHZhcmlhYmxlID0gMDsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05MDYsNyArODkwLDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbgogYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVh
bGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKIHsgICAgCiAgICAgaWYgKHF1YWxp
ZmllciAhPSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVy
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0ZXIiLCBnZXRRdWFs
aWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7
CkBAIC05MjQsOCArOTA4LDkgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2so
aW50IAogCiBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0g
ICAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICBjb25zdCBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBU
RXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5maW5k
KGV4dGVuc2lvbi5jX3N0cigpKTsKKyAgICBpZiAoaXRlciA9PSBleHRCZWhhdmlvci5lbmQoKSkg
ewogICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLmNfc3RyKCksICJp
cyBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTkzNSw4
ICs5MjAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdhcm4p
IHsKLSAgICAgICAgVFN0cmluZyBtc2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNpb24gKyAiIGlz
IGJlaW5nIHVzZWQiOwotICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5p
bmcsIG1zZy5jX3N0cigpLCBsaW5lKTsKKyAgICAgICAgd2FybmluZyhsaW5lLCAiZXh0ZW5zaW9u
IiwgZXh0ZW5zaW9uLmNfc3RyKCksICJpcyBiZWluZyB1c2VkIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTk0NSw4ICs5MjksMjMgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25FcnJvckNoZWNrKAogCiBib29sIFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikKIHsKLSAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5maW5kKGV4dGVuc2lvbik7Ci0g
ICAgcmV0dXJuIChpdGVyICE9IGV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKTsKKyAgICBjb25zdCBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJlaGF2aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAg
ICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRiZWhhdmlvci5m
aW5kKGV4dGVuc2lvbik7CisgICAgcmV0dXJuIChpdGVyICE9IGV4dGJlaGF2aW9yLmVuZCgpKTsK
K30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoaW50IGxp
bmUsIGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIHBw
OjpTb3VyY2VMb2NhdGlvbiBsb2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxpbmUsICZsb2MuZmls
ZSwgJmxvYy5saW5lKTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVuc2lvbihsb2Ms
IGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFn
bWFEaXJlY3RpdmUoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVl
KQoreworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBsb2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxp
bmUsICZsb2MuZmlsZSwgJmxvYy5saW5lKTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZVBy
YWdtYShsb2MsIG5hbWUsIHZhbHVlKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBA
IC05NzAsMTIgKzk2OSwxMiBAQCBjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRG
dW5jCiAgICAgfQogCiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2Fk
ZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAogICAgIGlmICghc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCku
Y19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3Rl
ZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
CkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFs
aXplcihUCiAgICAgICAgIC8vCiAgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRl
bnRpZmllciwgdHlwZSk7CiAgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZp
bml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQg
YnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKICAgICAgICAgICAgIC8vIHBvcCB3aWxs
IHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5CkBAIC0xMDE1LDcgKzEwMTQsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUCiAgICAgLy8KICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CiAgICAgaWYgKChx
dWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYg
KHF1YWxpZmllciAhPSBFdnFDb25zdCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3Qg
aW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3Qg
aW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
Ly8KQEAgLTEwMjQsMTMgKzEwMjMsMTYgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5p
dGlhbGl6ZXIoVAogCiAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkgewogICAgICAgICBp
ZiAocXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9
IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIo
KSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0
Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUlu
Zm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFz
c2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBp
bml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1t
YXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwgCi0gICAgICAgICAgICAgICAg
dmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xMDQ5LDcgKzEwNTEsMTAgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwogICAgICAg
ICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0i
LCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fu
bm90IGFzc2lnbiB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgdmFy
aWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xMjM0LDE0ICsxMjM5LDE0IEBAIFRJbnRlcm1U
eXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnUKICAgICAgICAgYnJlYWs7CiAKICAgICBk
ZWZhdWx0OgotICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwg
IiIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIs
ICIiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2Rl
LT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKICAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEyNzAsOCArMTI3NSwxMiBAQCBUSW50ZXJtVHlwZWQq
IFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdFN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
dHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgp
LCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZy
b20gJyVzJyB0byAnJXMnIiwgcGFyYW1Db3VudCwKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRB
c1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmlu
ZygpKTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAiIDw8IHBhcmFt
Q291bnQgCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGZyb20gJyIgPDwgbm9kZS0+Z2V0
QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgIicgdG8gJyIgPDwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSA8PCAiJyI7CisgICAg
ICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAg
ICAgICAgcmVjb3ZlcigpOwogICAgIH0KIApAQCAtMTI5MywxNSArMTMwMiwxMyBAQCBUSW50ZXJt
VHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjCiAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheTsKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICB1bmlvbkFycmF5
ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgQVNT
RVJUKHVuaW9uQXJyYXkpOwogCi0gICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBl
cnJvciBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSByYWlzZWQKLSAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGlu
aXRpYWxpemVkIGluIGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOwotICAgICAg
ICAgICAgcmVjb3ZlcigpOwotCisgICAgICAgIGlmICghdW5pb25BcnJheSkgewogICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMg
dG8gYmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1w
Q29uc3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVycm9yCi0gICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIik7CiAgICAg
ICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMTEsNyArMTMxOCwxMCBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjCiAKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewogICAgICAgICBpZiAoZmllbGRzLm9mZnNl
dHNbaV0gPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSkgewotICAgICAgICAgICAg
ZXJyb3IobGluZSwgIiIsICJbIiwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
ICclZCciLCBmaWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgInZlY3Rv
ciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGZpZWxkcy5vZmZzZXRzW2ldIDw8
ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRz
W2ldID0gMDsKICAgICAgICAgfQpAQCAtMTMzNSw3ICsxMzQ1LDEwIEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXQKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVt
cENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogCiAgICAgaWYgKGlu
ZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Ci0gICAgICAgIGVycm9y
KGxpbmUsICIiLCAiWyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQn
IiwgaW5kZXgpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8g
PSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4
dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBpbmRleCA9IDA7
CiAgICAgfQpAQCAtMTM0NSw3ICsxMzU4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0
OjphZGRDb25zdE1hdAogICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhdLCB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CiAg
ICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTEzNjksNyArMTM4Miwx
MCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAgYXJyYXlF
bGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwogCiAgICAgaWYgKGluZGV4ID49IG5vZGUtPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAi
YXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOworICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0
cmVhbSA8PCAiYXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8
PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5z
dHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
ICAgICAgICByZWNvdmVyKCk7CiAgICAgICAgIGluZGV4ID0gMDsKICAgICB9CkBAIC0xMzgwLDcg
KzEzOTYsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MTYsNyAr
MTQzMiw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHIKIAogICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5
cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwg
IkVycm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRo
ZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTQzMyw3ICsxNDQ5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjplbnRlclN0
cnVjdERlY2xhcmF0aQogICAgIC8vIFRoZXkgYXJlbid0IGFsbG93ZWQgaW4gR0xTTCBlaXRoZXIs
IGJ1dCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGhlcmUKICAgICAvLyBzbyB3ZSBkb24ndCByZWx5
IG9uIHRoZSBHTFNMIGNvbXBpbGVyIHRvIGNhdGNoIGl0LgogICAgIGlmIChzdHJ1Y3ROZXN0aW5n
TGV2ZWwgPiAxKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRl
ZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIs
ICJFbWJlZGRlZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2VkIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ1Myw3ICsxNDY5LDcgQEAgY29uc3QgaW50IGtX
ZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5l
c3RpbmdFcnJvckNoZWNrKFRTb3VyY2VMb2MgbGluZSwgY29uc3QgVFR5cGUmIGZpZWxkVHlwZSkK
IHsKLSAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7CisgICAgaWYgKCFpc1dl
YkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTE0NjQsOCArMTQ4MCwxMSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3Rp
bmdFcnJvckNoCiAgICAgLy8gV2UncmUgYWxyZWFkeSBpbnNpZGUgYSBzdHJ1Y3R1cmUgZGVmaW5p
dGlvbiBhdCB0aGlzIHBvaW50LCBzbyBhZGQKICAgICAvLyBvbmUgdG8gdGhlIGZpZWxkJ3Mgc3Ry
dWN0IG5lc3RpbmcuCiAgICAgaWYgKDEgKyBmaWVsZFR5cGUuZ2V0RGVlcGVzdFN0cnVjdE5lc3Rp
bmcoKSA+IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIs
ICIiLCAiUmVmZXJlbmNlIG9mIHN0cnVjdCB0eXBlICVzIGV4Y2VlZHMgbWF4aW11bSBzdHJ1Y3Qg
bmVzdGluZyBvZiAlZCIsCi0gICAgICAgICAgICAgIGZpZWxkVHlwZS5nZXRUeXBlTmFtZSgpLmNf
c3RyKCksIGtXZWJHTE1heFN0cnVjdE5lc3RpbmcpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiUmVmZXJlbmNl
IG9mIHN0cnVjdCB0eXBlICIgPDwgZmllbGRUeXBlLmdldFR5cGVOYW1lKCkgCisgICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGV4Y2VlZHMgbWF4aW11bSBzdHJ1Y3QgbmVzdGluZyBvZiAiIDw8
IGtXZWJHTE1heFN0cnVjdE5lc3Rpbmc7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9
IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICIiLCBleHRy
YUluZm8uY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ4Miwx
MDUgKzE1MDEsMTcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29uc3QgY2hhcgog
ICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJu
IDE7CiAKLSAgICAvLyBzZXR1cCBwcmVwcm9jZXNzb3IuCi0gICAgaWYgKEluaXRQcmVwcm9jZXNz
b3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnRl
eHQtPmV4dGVuc2lvbkJlaGF2aW9yKTsKLQogICAgIGlmIChnbHNsYW5nX2luaXRpYWxpemUoY29u
dGV4dCkpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJp
bmcsIGxlbmd0aCwgY29udGV4dCk7Ci0gICAgaW50IGVycm9yID0gZ2xzbGFuZ19wYXJzZShjb250
ZXh0KTsKKyAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3NjYW4oY291bnQsIHN0cmluZywgbGVuZ3Ro
LCBjb250ZXh0KTsKKyAgICBpZiAoIWVycm9yKQorICAgICAgICBlcnJvciA9IGdsc2xhbmdfcGFy
c2UoY29udGV4dCk7CiAKICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwotICAgIEZpbmFs
aXplUHJlcHJvY2Vzc29yKCk7Ci0gICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+
bnVtRXJyb3JzID09IDApID8gMCA6IDE7Ci19Ci0KLU9TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0KLWJvb2wgSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCkKLXsKLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJz
ZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgLy8KLSAgICAvLyBBbGxvY2F0ZSBhIFRM
UyBpbmRleC4KLSAgICAvLwotICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NU
TFNJbmRleCgpOwotICAgIAotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
cmVlUGFyc2VDb250ZXh0SW5kZXgoKQotewotICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4OwotCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgo
dGxzaUluZGV4KTsKLX0KLQotYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKLXsK
LSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTog
UGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKLSAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJz
ZUNvbnRleHQoKTsKLSAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKLSAgICAgICAgYXNzZXJ0
KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0
aHJlYWQgcGFyc2UgY29udGV4dCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7Ci0gICAgT1NfU2V0VExT
VmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKLXsKLSAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVFRocmVhZFBh
cnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250
ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0gICAgaWYg
KGxwUGFyc2VDb250ZXh0KQotICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0LT5udW1FcnJv
cnMgPT0gMCkgPyAwIDogMTsKIH0KIAotVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBh
cnNlQ29udGV4dCgpCi17Ci0gICAgLy8KLSAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZv
ciBzcGVlZAotICAgIC8vCiAKLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4
dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLQotICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBH
bG9iYWxQYXJzZUNvbnRleHQ7Ci19CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9QYXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw4ICs2LDEwIEBACiAjaWZuZGVmIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVE
XwogI2RlZmluZSBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVy
L0V4dGVuc2lvbkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIK
KyNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1ByZXByb2Nlc3Nvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKIApAQCAtMTgsMTMgKzIwLDYgQEAgc3RydWN0
IFRNYXRyaXhGaWVsZHMgewogICAgIGludCBjb2w7CiB9OwogCi1zdHJ1Y3QgVFByYWdtYSB7Ci0g
ICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9Ci0g
ICAgYm9vbCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJsZSBwcmFn
bWFUYWJsZTsKLX07Ci0KIC8vCiAvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJsZXMg
bmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCiAvLyB0aGV5IGNhbiBi
ZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCkBAIC0zMyw4
ICsyOCw2IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBUUGFyc2VDb250ZXh0KFRTeW1i
b2xUYWJsZSYgc3ltdCwgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGlu
dGVybSwgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBpbnQgb3B0aW9ucywg
Ym9vbCBjaGVja3NQcmVjRXJyb3JzLCBjb25zdCBjaGFyKiBzb3VyY2VQYXRoLCBUSW5mb1Npbmsm
IGlzKSA6CiAgICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwKICAgICAgICAgICAgIHN5
bWJvbFRhYmxlKHN5bXQpLAotICAgICAgICAgICAgZXh0ZW5zaW9uQmVoYXZpb3IoZXh0KSwKLSAg
ICAgICAgICAgIGluZm9TaW5rKGlzKSwKICAgICAgICAgICAgIHNoYWRlclR5cGUodHlwZSksCiAg
ICAgICAgICAgICBzaGFkZXJTcGVjKHNwZWMpLAogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMo
b3B0aW9ucyksCkBAIC00OCwxMiArNDEsMTIgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAg
ICAgICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKICAgICAgICAgICAgIGZ1bmN0aW9u
UmV0dXJuc1ZhbHVlKGZhbHNlKSwKICAgICAgICAgICAgIGNoZWNrc1ByZWNpc2lvbkVycm9ycyhj
aGVja3NQcmVjRXJyb3JzKSwKLSAgICAgICAgICAgIGNvbnRleHRQcmFnbWEodHJ1ZSwgZmFsc2Up
LAorICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAorICAgICAgICAgICAgZGlyZWN0aXZlSGFu
ZGxlcihleHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25v
c3RpY3MsICZkaXJlY3RpdmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAg
fQogICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQg
YSBwYXJzZSB0cmVlCiAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wg
dGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQK
LSAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yOyAgLy8gbWFwcGluZyBi
ZXR3ZWVuIHN1cHBvcnRlZCBleHRlbnNpb25zIGFuZCBjdXJyZW50IGJlaGF2aW9yLgotICAgIFRJ
bmZvU2luayYgaW5mb1Npbms7CiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAg
ICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBh
Y2spCiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFu
Z3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdM
LgogICAgIGludCBjb21waWxlT3B0aW9uczsKQEAgLTY3LDE1ICs2MCwxOSBAQCBzdHJ1Y3QgVFBh
cnNlQ29udGV4dCB7CiAgICAgY29uc3QgVFR5cGUqIGN1cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0
aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcGFy
c2VkCiAgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZv
aWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCiAgICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7
ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBp
cyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhwbGljaXQgb3IgaW1wbGljaXQuCi0gICAg
c3RydWN0IFRQcmFnbWEgY29udGV4dFByYWdtYTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CiAg
ICAgYm9vbCBBZnRlckVPRjsKKyAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CisgICAgVERp
cmVjdGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKKyAgICBwcDo6UHJlcHJvY2Vzc29yIHBy
ZXByb2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgVEluZm9TaW5rJiBpbmZvU2lu
aygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKFRT
b3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKICAgICB2b2lkIHdhcm5pbmcoVFNvdXJj
ZUxvYyBsb2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvPSIiKTsKKyAgICB2b2lkIHRyYWNlKGNvbnN0IGNo
YXIqIHN0cik7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKICAgICBib29sIHBhcnNlVmVjdG9yRmll
bGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5l
KTsKQEAgLTEwNSw3ICsxMDIsMTMgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wg
bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hl
Y2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlm
aWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBUU3RyaW5nJik7CisKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25C
ZWhhdmlvcigpOyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRl
bnNpb24pOworICAgIHZvaWQgaGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGludCBsaW5lLCBjb25z
dCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisKKyAgICBjb25zdCBUUHJh
Z21hJiBwcmFnbWEoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9
CisgICAgdm9pZCBoYW5kbGVQcmFnbWFEaXJlY3RpdmUoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBl
JiB0eXBlKTsKICAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdn
ck5vZGUpOwpAQCAtMTM1LDEzICsxMzgsNCBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiBpbnQg
UGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdLAogICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOwogCi10eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOwotZXh0
ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKLSNkZWZp
bmUgR2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCi0KLXR5cGVkZWYg
c3RydWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKLXsKLSAgICBUUGFyc2VDb250ZXh0ICpscEds
b2JhbFBhcnNlQ29udGV4dDsKLX0gVFRocmVhZFBhcnNlQ29udGV4dDsKLQogI2VuZGlmIC8vIF9Q
QVJTRVJfSEVMUEVSX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCkBAIC0xNTgs
MTAgKzE1OSwxMCBAQCB2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5zaWduCiAK
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3Mg
aGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICAg
ICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxs
b2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmludGYoYXNzZXJ0TXNnLCBzaXpl
b2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24g
YXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsK
ICNlbHNlCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdl
ICVzICV6dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgIHNucHJpbnRm
KGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUg
Ynl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxvY1RleHQs
IHNpemUsIGRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxs
b2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJBR01BX0hfCisjZGVm
aW5lIENPTVBJTEVSX1BSQUdNQV9IXworCitzdHJ1Y3QgVFByYWdtYSB7CisgICAgLy8gQnkgZGVm
YXVsdCBvcHRpbWl6YXRpb24gaXMgdHVybmVkIG9uIGFuZCBkZWJ1ZyBpcyB0dXJuZWQgb2ZmLgor
ICAgIFRQcmFnbWEoKSA6IG9wdGltaXplKHRydWUpLCBkZWJ1ZyhmYWxzZSkgeyB9CisgICAgVFBy
YWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9CisKKyAgICBi
b29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJf
UFJBR01BX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVu
YW1lRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9SRU5BTUVfRlVO
Q1RJT04KKyNkZWZpbmUgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFJlbmFtZXMgYSBmdW5jdGlvbiwgaW5jbHVk
aW5nIGl0cyBkZWNsYXJhdGlvbiBhbmQgYW55IGNhbGxzIHRvIGl0LgorLy8KK2NsYXNzIFJlbmFt
ZUZ1bmN0aW9uIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBSZW5h
bWVGdW5jdGlvbihjb25zdCBUU3RyaW5nJiBvbGRGdW5jdGlvbk5hbWUsIGNvbnN0IFRTdHJpbmcm
IG5ld0Z1bmN0aW9uTmFtZSkKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZh
bHNlKQorICAgICwgbU9sZEZ1bmN0aW9uTmFtZShvbGRGdW5jdGlvbk5hbWUpCisgICAgLCBtTmV3
RnVuY3Rpb25OYW1lKG5ld0Z1bmN0aW9uTmFtZSkge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIGlmICgob3AgPT0g
RU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2RlLT5nZXROYW1lKCkg
PT0gbU9sZEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIG5vZGUtPnNldE5hbWUobU5ld0Z1bmN0
aW9uTmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBUU3RyaW5nJiBtT2xkRnVuY3Rpb25OYW1lOworICAgIGNvbnN0IFRTdHJpbmcmIG1OZXdG
dW5jdGlvbk5hbWU7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1JFTkFNRV9GVU5DVElPTgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TaEhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwxMyBAQAogCiBjbGFz
cyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGg7
CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFz
ZWQgb24gdGhlIFdlYkdMIHNwZWMsCisvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgorLy8K
K2Jvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUg
YmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpA
QCAtNzAsNiArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKICAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24gaXMgZGV0ZWN0ZWQuCiAgICAg
Ym9vbCBkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpOworICAgIC8vIFJld3JpdGVz
IGEgc2hhZGVyJ3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgorICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCk7CiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRo
ZSBtaW5pbXVtCiAgICAgLy8gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVj
IEFwcGVuZGl4IEEuCiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKQEAgLTc5LDYgKzg4LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIG1hcExvbmdWYXJp
YWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0
IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAw
OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rp
b25zIHRoYXQgYWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCisgICAgYm9vbCBlbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMu
CisgICAgYm9vbCBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1O
b2RlKiByb290KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1
c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAorICAgIC8vIGZs
b3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZh
bHVlcy4KKyAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhj
b25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVu
c2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlv
ciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKIApJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkocmV2aXNpb24g
MTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxh
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTQgQEAgc3RhdGljIHZvaWQgZ2V0
VmFyaWFibGVJbmZvKFNoU2hhZGVySW5mbwogICAgIGludCBhY3RpdmVVbmlmb3JtQW5kQXR0cmli
TGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgQVNTRVJUKGNoZWNrQWN0aXZl
VW5pZm9ybUFuZEF0dHJpYk1heExlbmd0aHMoaGFuZGxlLCBhY3RpdmVVbmlmb3JtQW5kQXR0cmli
TGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgYWN0aXZl
VW5pZm9ybUFuZEF0dHJpYkxlbmd0aCk7CisgICAgbmFtZVthY3RpdmVVbmlmb3JtQW5kQXR0cmli
TGVuZ3RoIC0gMV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMg
c2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFN
RV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCiAgICAgICAgIGludCBtYXhNYXBwZWRO
YW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIEFTU0VSVChjaGVj
a01hcHBlZE5hbWVNYXhMZW5ndGgoaGFuZGxlLCBtYXhNYXBwZWROYW1lTGVuZ3RoKSk7CiAgICAg
ICAgIHN0cm5jcHkobWFwcGVkTmFtZSwgdmFySW5mby5tYXBwZWROYW1lLmNfc3RyKCksIG1heE1h
cHBlZE5hbWVMZW5ndGgpOworICAgICAgICBtYXBwZWROYW1lW21heE1hcHBlZE5hbWVMZW5ndGgg
LSAxXSA9IDA7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2LDkgKzE2LDEwIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9s
VGFibGUuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAK
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCiAvLwogLy8gVFR5cGUgaGVscGVyIGZ1
bmN0aW9uIG5lZWRzIGEgcGxhY2UgdG8gbGl2ZS4KIC8vCkBAIC01Niw3ICs1Nyw3IEBAIHZvaWQg
VFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoVFN0cmluZyYgbWEKICAgICBtYW5nbGVkTmFtZSArPSBz
dGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJh
eSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKLSAgICAgICAgc3ByaW50ZihidWYsICIlZCIs
IGFycmF5U2l6ZSk7CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGFy
cmF5U2l6ZSk7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsKICAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gYnVmOwogICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5j
cHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBACiAK
ICNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgogCisjaW5jbHVkZSAiY29tcGls
ZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhM
U0wuaCIKIAogVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYykKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVW5m
b2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0
b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL091dHB1dEhMU0wuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1VbmZvbGRTZWxlY3Q6
OlVuZm9sZFNlbGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRI
TFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQotewotICAg
IG1UZW1wb3JhcnlJbmRleCA9IDA7Ci19Ci0KLXZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShU
SW50ZXJtTm9kZSAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5k
ZXg7Ci0gICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3
aW5kSW5kZXg7Ci19Ci0KLWJvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJu
YXJ5T3BlcmF0b3IoKSkKLSAgICB7Ci0gICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4Owot
Ci0gICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkp
IDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICBvdXQgPDwgImlmKCI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBv
dXQgPDwgIilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOwotICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgImVsc2VcbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
LSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNl
QmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCi17Ci0gICAgaW50IHJld2luZElu
ZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotCi0gICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICB7
Ci0gICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotICAgIAot
ICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKLSAgICB7Ci0gICAgICAgIG5vZGUtPmdldENv
bmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhw
cmVzc2lvbigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJz
ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRleDsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFVuZm9sZFNlbGVjdDo6Z2V0TmV4dFRlbXBvcmFy
eUluZGV4KCkKLXsKLSAgICByZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Ci19Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91
dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xE
U0VMRUNUX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNzIE91dHB1
dEhMU0w7Ci0KLWNsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17
Ci0gIHB1YmxpYzoKLSAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uICpub2RlKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpOwotCi0gICAgaW50IGdldE5leHRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHByb3RlY3Rl
ZDoKLSAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpjb25zdCBt
T3V0cHV0SExTTDsKLQotICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0jZW5kaWYg
ICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJjdWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIg
dG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3BlcmF0b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50
cy4KKy8vIFRoZSByZXN1bHRzIGFyZSBhc3NpZ25lZCB0byBzIyB0ZW1wb3Jhcmllcywgd2hpY2gg
YXJlIHVzZWQgYnkgdGhlIG1haW4gdHJhbnNsYXRvciBpbnN0ZWFkIG9mCisvLyB0aGUgb3JpZ2lu
YWwgZXhwcmVzc2lvbi4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1
aXQuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK1VuZm9sZFNob3J0Q2lyY3VpdDo6
VW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91
dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7
CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30KKwordm9pZCBVbmZvbGRTaG9ydENpcmN1aXQ6
OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIGludCByZXdpbmRJbmRleCA9IG1U
ZW1wb3JhcnlJbmRleDsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtVGVtcG9yYXJ5
SW5kZXggPSByZXdpbmRJbmRleDsKK30KKworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lu
a0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAg
IC8vICJ4IHx8IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB0cnVlIDogeSIsIHdoaWNoIHVuZm9s
ZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHRydWU7IGVsc2UgcyA9IHk7IiwKKyAgICAgICAgLy8g
YW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKCFzKSBz
ID0geTsiLgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsK
KworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAg
ICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAiaWYo
IXMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAi
OworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2Rl
LT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwg
IjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9
XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAg
IC8vICJ4ICYmIHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPyB5IDogZmFsc2UiLCB3aGljaCB1bmZv
bGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB5OyBlbHNlIHMgPSBmYWxzZTsiLAorICAgICAgICAv
LyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYocykg
cyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7
CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAg
ICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAx
OworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlm
KHMiIDw8IGkgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAg
IG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAi
OworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2Rl
LT5nZXRSaWdodCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwg
IjtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ9
XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVy
bVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExT
TC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgLy8gVW5mb2xkICJiID8geCA6IHkiIGludG8gInR5
cGUgczsgaWYoYikgcyA9IHg7IGVsc2UgcyA9IHk7IgorICAgIGlmIChub2RlLT51c2VzVGVybmFy
eU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKKwor
ICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8
PCAiIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
b3V0IDw8ICJpZigiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0
IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJlbHNlXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Cisg
ICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJs
b2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAg
ICAgICAgICAgICAifVxuIjsKKworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIGludCByZXdp
bmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKKworICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisg
ICAgeworICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAg
ICAKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAgeworICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdl
dEV4cHJlc3Npb24oKSkKKyAgICB7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgfQorCisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBVbmZvbGRTaG9ydENpcmN1aXQ6OmdldE5l
eHRUZW1wb3JhcnlJbmRleCgpCit7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOworfQor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0Q2lyY3Vp
dCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9wZXJhdG9y
cyBhcyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0hP
UlRDSVJDVUlUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworCisj
aW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitjbGFz
cyBVbmZvbGRTaG9ydENpcmN1aXQgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJs
aWM6CisgICAgVW5mb2xkU2hvcnRDaXJjdWl0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1
dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9k
ZSk7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOwor
ICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5v
ZGUpOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSk7
CisKKyAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgorICAg
IFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRwdXRI
TFNMOworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8vIENP
TVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBA
QAogCiAjaW5jbHVkZSAiY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAKIG5hbWVzcGFj
ZSB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1
Zy5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNpbmNs
dWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCisjaW5jbHVkZSAiY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVy
LmgiCiAKIHN0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKQEAgLTI4LDcg
KzI5LDcgQEAgdm9pZCBUcmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgewogICAgICAgICB2
c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7CiAgICAgICAgIHZh
X2VuZChhcmdzKTsKIAotICAgICAgICBwYXJzZUNvbnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1
ZjsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmFjZShidWYpOwogICAgIH0KIH0KIH0gIC8vIGV4
dGVybiAiQyIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDkgQEAgc3Ry
dWN0IFRQYXJzZUNvbnRleHQ7CiBleHRlcm4gaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250
ZXh0KiBjb250ZXh0KTsKIAotZXh0ZXJuIHZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CitleHRlcm4gaW50IGdsc2xhbmdfc2Nh
bihpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBz
dHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGlu
dCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xT
TCBFUyBMRVhFUiAoZ2xzbGEKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0zOCw2ICszOCw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEK
ICV7CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Bh
cnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgog
CkBAIC0xNTksNiArMTYwLDcgQEAgTyAgICAgICAgICAgWzAtN10KICJleHRlcm4iICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImV4dGVybmFsIiAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaW50ZXJmYWNlIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAibG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQpAQCAtMTY2LDYgKzE2OCw3IEBAIE8gICAgICAgICAgIFswLTddCiAi
aGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJmaXhl
ZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInVuc2lnbmVk
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic3VwZXJwIiAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImlucHV0IiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAib3V0cHV0IiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE3MywxMiArMTc2LDIxIEBAIE8g
ICAgICAgICAgIFswLTddCiAiaHZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJodmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogImh2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzIiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmdmVjMyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2
ZWM0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzIi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjMyIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWM0IiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzIiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMyIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWM0IiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVyMUQiICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIzRCIgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVyMURTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisKKyJzYW1wbGVyM0RSZWN0IiB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogInNpemVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CiAiY2FzdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KQEAgLTE5Myw3ICsyMDUsNyBAQCBPICAgICAgICAgICBbMC03XQogCiAw
W3hYXXtIfSsgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsg
cmV0dXJuKElOVENPTlNUQU5UKTsgfQogMHtPfSsgICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5p
ID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KLTB7RH0rICAg
ICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJl
ci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRleHQtPnJlY292ZXIoKTsgcmV0dXJuIDA7fQorMHtE
fSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwg
bnVtYmVyLiIsIHl5dGV4dCk7IGNvbnRleHQtPnJlY292ZXIoKTsgcmV0dXJuIDA7fQoge0R9KyAg
ICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KIAoge0R9K3tFfSAgICAgICAgICAgeyB5eWx2YWwtPmxleC5mID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFO
VCk7IH0KQEAgLTI2MCwxMCArMjcyLDE1IEBAIE8gICAgICAgICAgIFswLTddCiAKICUlCiAKKyNp
ZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIGV4dGVybiAiQyIgewogLy8gUHJlcHJvY2Vz
c29yIGludGVyZmFjZS4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
cy5oIgogCitleHRlcm4gaW50IEluaXRQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiBpbnQgRmluYWxp
emVQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNo
YXIgKm5hbWUsIGludCB2YWx1ZSk7CisKICNkZWZpbmUgU0VUVVBfQ09OVEVYVChwcCkgXAogICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNlQ29udGV4dCopIHBwLT5wQzsgXAogICAg
IHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5u
ZXI7CkBAIC0yNzIsMjYgKzI4OSwyNiBAQCBleHRlcm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dN
c2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250
ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRl
eHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFy
ICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndhcm5pbmco
eXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBt
c2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQogewog
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNn
LCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNn
KQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBf
Q09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7
CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKIH0KIApAQCAtMzQ2LDg4ICszNjMsMTUgQEAgdm9pZCBEZWNMaW5lTnVtYmVyKCkK
IHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlmICghc3RyY21wKHRva2Vuc1swXSwgIm9w
dGltaXplIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJj
bXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwi
IGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJd
LCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0
cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAg
ICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhw
ZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwg
IikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBl
bmQgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIpKSB7Ci0gICAgICAgIGlm
IChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBw
cmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtl
eXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0
LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0
b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVi
dWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
Ilwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
XCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmZGVmIFBSQUdNQV9UQUJMRQotICAgICAg
ICAvLwotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKLSAgICAgICAg
Ly8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKLSAgICAgICAgLy8gRm9y
IG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5u
b3QgcmVjb2duaXplCi0gICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50
YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKLSAgICAgICAgLy8gI3By
YWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQotICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFt
ZSBpbiBwcmFnbWFUYWJsZS4KLSAgICAgICAgLy8gICAgICAgIAotICAgICAgICBpZiAobnVtVG9r
ZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10s
ICIpIikpIHsgICAgICAgICAgICAgIAotICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFU
YWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOwotICAgICAgICAg
ICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKLSAgICAgICAg
ICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXRl
ci0+c2Vjb25kID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9
ICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgewotICAgICAgICAg
ICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMp
LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwotICAgICAgICAgICAgVFByYWdtYVRhYmxlOjpp
dGVyYXRvciBpdGVyOwotICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmlu
Zyh0b2tlbnNbMF0pKTsKLSAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgp
KSB7Ci0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0
b2tlbnNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBQUkFHTUFfVEFC
TEUKLSAgICB9CisKKyAgICBpZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKKyAgICBpZiAoc3Ry
Y21wKHRva2Vuc1sxXSwgIigiKSAhPSAwKSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNb
M10sICIpIikgIT0gMCkgcmV0dXJuOworCisgICAgY29udGV4dC0+aGFuZGxlUHJhZ21hRGlyZWN0
aXZlKHl5bGluZW5vLCB0b2tlbnNbMF0sIHRva2Vuc1syXSk7CiB9CiAKLXZvaWQgU3RvcmVTdHIo
Y2hhciAqc3RyaW5nKQordm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwogICAgIFRTdHJpbmcgc3RyU3JjOwpAQCAtNDQ5LDcxICszOTMs
MzMgQEAgdm9pZCBSZXNldFRTdHJpbmcodm9pZCkKICAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0g
IiI7CiB9CiAKLVRCZWhhdmlvciBHZXRCZWhhdmlvcihjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsK
LSAgICBpZiAoIXN0cmNtcCgicmVxdWlyZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVC
aFJlcXVpcmU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZW5hYmxlIiwgYmVoYXZpb3IpKQotICAg
ICAgICByZXR1cm4gRUJoRW5hYmxlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBi
ZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhEaXNhYmxlOwotICAgIGVsc2UgaWYgKCFzdHJj
bXAoIndhcm4iLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhXYXJuOwotICAgIGVsc2Ug
ewotICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2
aW9yICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOwotICAgICAgICByZXR1cm4gRUJo
RGlzYWJsZTsKLSAgICB9ICAgICAgICAKLX0KLQogdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlv
cihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKIHsKICAgICBTRVRV
UF9DT05URVhUKGNwcCk7Ci0gICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3Io
YmVoYXZpb3IpOwotICAgIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7
Ci0gICAgVFN0cmluZyBtc2c7Ci0gICAgCi0gICAgLy8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4
dGVuc2lvbgotICAgIGlmICghc3RyY21wKGV4dE5hbWUsICJhbGwiKSkgewotICAgICAgICBpZiAo
YmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSB8fCBiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsK
LSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZl
ICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlvciIpOyAgCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5leHRl
bnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVyICE9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JW
YWw7Ci0gICAgICAgIH0gICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGl0ZXIgPSBjb250
ZXh0LT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOwotICAgICAgICBp
ZiAoaXRlciA9PSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKSkgewotICAgICAgICAg
ICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewotICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgot
ICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSAr
IGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7ICAKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRUJoRW5hYmxlOgotICAgICAgICAgICAgY2Fz
ZSBFQmhXYXJuOgotICAgICAgICAgICAgY2FzZSBFQmhEaXNhYmxlOgotICAgICAgICAgICAgICAg
IG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBv
cnRlZCI7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXlsaW5lbm8pOyAKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7Ci0gICAgfQorICAgIGNvbnRleHQtPmhhbmRs
ZUV4dGVuc2lvbkRpcmVjdGl2ZSh5eWxpbmVubywgZXh0TmFtZSwgYmVoYXZpb3IpOwogfQogfSAg
Ly8gZXh0ZXJuICJDIgorI2VuZGlmICAvLyAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAog
aW50IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2Fu
bmVyKSB7Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4
X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobGVuID49IG1heF9zaXpl
KSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoImlucHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3Qg
ZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIik7CisgICAgaW50IGxl
biA9IDA7CiAKLSAgICBidWZbbGVuXSA9ICcgJzsKLSAgICByZXR1cm4gbGVuKzE7CisjaWYgQU5H
TEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgeXlnZXRf
ZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworICAgIGxlbiA9IHRv
a2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVlLnNpemUoKTsKKyAg
ICBpZiAoKGxlbiA+IDApICYmIChsZW4gPCBtYXhfc2l6ZSkpCisgICAgICAgIG1lbWNweShidWYs
IHRva2VuLnZhbHVlLmNfc3RyKCksIGxlbik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJj
ZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5saW5lKSwgeXlzY2FubmVy
KTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkK
KyAgICAgICAgWVlfRkFUQUxfRVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOworICAgIGVs
c2UgaWYgKGxlbiA+IDApCisgICAgICAgIGJ1ZltsZW4rK10gPSAnICc7CisgICAgcmV0dXJuIGxl
bjsKIH0KIAogaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CkBAIC01NDQsOSAr
NDUwLDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbgogICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7
CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9
CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtNTY1LDIyICs0NzEsNDMgQEAgaW50IGds
c2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udAogICAgIGlmIChzY2FubmVyID09IE5V
TEwpIHJldHVybiAwOwogICAgIAogICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOwotICAgIHJl
dHVybiB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7
CisKKyNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBGaW5hbGl6ZVByZXByb2Nl
c3NvcigpOworI2VuZGlmCisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgZ2xzbGFuZ19zY2FuKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
LSAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKK2ludCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdLAorICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CiAgICAg
eXlyZXN0YXJ0KE5VTEwsIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIHl5c2V0X2xpbmVubyhFbmNv
ZGVTb3VyY2VMb2MoMCwgMSksIGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVy
RU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJ
bml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgor
ICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkp
CisgICAgICAgIHJldHVybiAxOwogICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFX
aGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFB
cmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsK
KyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiAxOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgor
CisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAg
Zm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlv
ci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7
CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJv
Y2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAg
ICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYK
KyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkod29ya2luZyBjb3B5KQpA
QCAtODQsMjEgKzg0LDIxIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29u
dGUKICNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5z
aGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5z
aGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJy
b3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAi
IiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0
ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwK
ICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0g
ICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9u
bHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAog
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAot
ICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBw
b3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwog
ICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09
IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3Ry
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5cGUg
dHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogZmFr
ZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5cGUpOwpAQCAtMTc2LDcgKzE3
Niw3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCiAg
ICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2
YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUg
PSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjA2LDcgKzIwNiw3
IEBAIHByaW1hcnlfZXhwcmVzc2lvbgogICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9y
IGNvbnN0YW50cwogICAgICAgICAvLwogICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0
YW50IG92ZXJmbG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CkBAIC0yMzUsOSArMjM1LDkgQEAgcG9zdGZpeF9l
eHByZXNzaW9uCiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYm
ICEkMS0+aXNNYXRyaXgoKSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgk
MS0+Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0
b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBu
b3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBl
IGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0
eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewpAQCAtMjU0LDcgKzI1NCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpIHsKICAgICAgICAgICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJp
eCgpKSAmJiAkMS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlz
QXJyYXkoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
IiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewpAQCAtMjY3
LDcgKzI3MCwxMCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5n
ZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdl
ICclZCciLCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJ
bmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0
cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTYsNyBAQCBwb3N0Zml4
X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NF
TEVDVElPTiB7CiAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJh
eSIsICIuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5v
dCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAgLTM1NSw3ICszNjEsNyBAQCBwb3N0Zml4
X2V4cHJlc3Npb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9s
ZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIs
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2Fs
YXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOwpAQCAtMzczLDcgKzM3OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
ICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlw
ZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBp
ZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmll
bGRzIiwgIkludGVybmFsIEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAt
NDA1LDEzICs0MTEsMTMgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmlu
Zy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2Vs
ZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5k
IHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9y
LCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAg
ICAgfQpAQCAtNTAwLDkgKzUwNiwxMCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5l
KCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAg
VHlwZTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxU
SW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nh
c3Q8VEludGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50
ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWVlFUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTUyNiw3ICs1MzMsNyBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0
IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdl
dEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+
Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3Ig
J2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtNTUxLDcgKzU1OCw3IEBAIGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9k
CiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBm
dW5jdGlvbl9jYWxsX2dlbmVyaWMgewotICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAi
bWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwogICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQpAQCAtNjQ3LDcgKzY1
NCw3IEBAIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5
cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2lj
U3RyaW5nKCQxLnR5cGUpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0RmxvYXQ7CkBAIC0xMDA3LDEyICsxMDE0LDEyIEBAIGZ1bmN0aW9uX3Byb3Rv
dHlwZQogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24q
Pihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAg
ICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlw
ZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJl
dHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5n
ZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQ
YXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0
UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVh
bGlmaWVycyIsICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEt
PmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTEwNjAsNyArMTA2Nyw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMK
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlz
IHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBh
biBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDc0LDcgKzEwODEsNyBAQCBmdW5jdGlvbl9oZWFkZXJf
d2l0aF9wYXJhbWV0ZXJzCiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90
eXBlIElERU5USUZJRVIgTEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0g
RXZxR2xvYmFsICYmICQxLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0
aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZv
ciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFr
ZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgpAQCAtMTA5NSw3ICsx
MTAyLDcgQEAgcGFyYW1ldGVyX2RlY2xhcmF0b3IKICAgICAvLyBUeXBlICsgbmFtZQogICAgIDog
dHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVidFZv
aWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBv
ZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3Ry
aW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5z
dHJpbmcpKQpAQCAtMTE5MSw3ICsxMTk4LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICB8
IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEu
dHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhJDMuc3ltYm9sKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRl
Y2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAgLTEyOTgsNyArMTMwNSw3IEBAIHNpbmdsZV9k
ZWNsYXJhdGlvbgogICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZU
X0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bnNpemVkIGFy
cmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUo
JDEpLCAkMi5saW5lKTsKQEAgLTEzNjQsNyArMTM3MSw3IEBAIHNpbmdsZV9kZWNsYXJhdGlvbgog
ICAgICAgICAkJC50eXBlLnNldEJhc2ljKEVidEludmFyaWFudCwgRXZxSW52YXJpYW50VmFyeWlu
Z091dCwgJDIubGluZSk7CiAgICAgICAgIGlmICghJDIuc3ltYm9sKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRl
Y2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSAwOwpAQCAtMTQzOCw3ICsxNDQ1LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAvLyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJDIuc3RyaW5nLCAkMSk7CiAvLyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCokJC52YXJpYWJsZSkpIHsKLS8vICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworLy8gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0
aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKIC8vICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAk
JC52YXJpYWJsZSwgdGhlIHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAg
fQpAQCAtMTQ1MCwyNiArMTQ1NywyNiBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAk
JCA9ICQxOwogCiAgICAgICAgIGlmICgkMS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlw
ZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKICAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAg
ICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0
cmluZygkMS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEu
cXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBF
YnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygk
MS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQk
ID0gJDI7CkBAIC0xNjU0LDcgKzE2NjEsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAg
IH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVy
RXh0ZXJuYWxPRVMiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2Ft
cGxlckV4dGVybmFsT0VTIiwgJDEubGluZSk7CkBAIC0xNjYzLDcgKzE2NzAsNyBAQCB0eXBlX3Nw
ZWNpZmllcl9ub25hcnJheQogICAgIH0KICAgICB8IFNBTVBMRVIyRFJFQ1QgewogICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUi
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5
cGUiLCAic2FtcGxlcjJEUmVjdCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c2FtcGxlcjJEUmVjdCIsICQxLmxpbmUpOwpAQCAtMTk2NiwxNCArMTk3MywxNCBAQCBmb3JfcmVz
dF9zdGF0ZW1lbnQKIGp1bXBfc3RhdGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewog
ICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dl
ZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0K
ICAgICB8IEJSRUFLIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVh
ayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGlu
IGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywg
JDEubGluZSk7CkBAIC0xOTgxLDcgKzE5ODgsNyBAQCBqdW1wX3N0YXRlbWVudAogICAgIHwgUkVU
VVJOIFNFTUlDT0xPTiB7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BSZXR1cm4sICQxLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1
bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFs
dWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIik7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTg5LDEw
ICsxOTk2LDEwIEBAIGp1bXBfc3RhdGVtZW50CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKICAgICAgICAgY29udGV4
dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOwogICAgICAgICBpZiAoY29udGV4dC0+Y3Vy
cmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBh
IHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRl
eHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5n
IHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjAz
Nyw3ICsyMDQ0LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCiAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFs
cmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEg
Ym9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpA
QCAtMjA0Nyw3ICsyMDU0LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLwogICAg
ICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKICAgICAgICAgICAgIGlm
IChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMp
IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIo
cykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKQEAgLTIwNzksNyAr
MjA4Niw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQg
dGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNl
cnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0yMTE2LDkgKzIxMjMsOCBAQCBmdW5jdGlvbl9kZWZpbml0aW9u
CiAKICAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5k
IG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgLy8gaW5mb3JtYXRp
b24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQot
ICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4
dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1
Zyhjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVn
YXRlKCktPmFkZFRvUHJhZ21hVGFibGUoY29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJs
ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5w
cmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1
Zyhjb250ZXh0LT5wcmFnbWEoKS5kZWJ1Zyk7CiAKICAgICAgICAgaWYgKCQzICYmICQzLT5nZXRB
c0FnZ3JlZ2F0ZSgpKQogICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExp
bmUoJDMtPmdldEFzQWdncmVnYXRlKCktPmdldEVuZExpbmUoKSk7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAi
Li9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgzLDggKzM4Myw4
IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIKIAkqeXlfY3AgPSAn
XDAnOyBcCiAJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVT
IDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMg
MTU1CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTU2CiAvKiBUaGlzIHN0cnVjdCBpcyBub3Qg
dXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4g
Ki8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC0zOTIsNTUgKzM5Miw1OCBAQCBzdHJ1Y3QgeXlf
dHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254
dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0MjZdID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNDU5XSA9CiAgICAgeyAgIDAsCi0g
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUs
ICAxNDUsCi0gICAgICAxMzAsICAxMzYsICAxNDEsICAxMjUsICAxMjYsICAxMzQsICAxMzMsICAx
MjIsICAxMzEsICAxMjksCi0gICAgICAxMzUsICAgOTQsICAgOTQsICAxMjMsICAxMTksICAxMzcs
ICAxMjQsICAxMzgsICAxNDIsICAgOTAsCi0gICAgICAxMjcsICAxMjgsICAxNDAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAxMjAsICAxMzksICAxMjEsICAxMzIsICAgIDMsICAgIDQsICAgIDMsCi0gICAg
ICAxNDQsICAxNDcsICAxNDMsICAxMTYsICAxMDIsICAxMjEsICAxMTAsICAxMDUsICAxMDAsICAx
MDgsCi0gICAgICAgOTgsICAxMDksICAgOTksICAgOTcsICAgIDIsICAgIDEsICAxMDEsICAgOTYs
ICAgOTIsICAgOTMsCi0gICAgICAgIDAsICAgIDAsICAgOTQsICAxMjgsICAxMjAsICAxMjcsICAx
MTcsICAxMTMsICAxMTUsICAxMTQsCi0gICAgICAxMTgsICAgOTAsICAxMDYsICAxMTIsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0KLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICAxNywgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMCwgICAyMiwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgIDEw
NywgIDExMSwgICAgNSwgIDE0MywKLSAgICAgICAgMCwgICAgMSwgICA5NiwgICAgMCwgICAgMCwg
ICA5NSwgICA5MSwgIDEwMywgIDEwNCwgICA1MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAxOCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyNiwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICAyMywgICA5MCwgICA5MCwgICA5
MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgICAwLCAgIDk3LAotICAgICAgICAwLCAgIDk2LCAgIDkwLCAgIDI4
LCAgIDkwLCAgIDkwLCAgIDg3LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDIxLCAgIDUzLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDU4LCAgIDcyLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDY5LCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDU2LCAgIDI5LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDM2LAotICAgICAgIDM3LCAgIDM4LCAgIDI3LCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LAotICAgICAgIDUxLCAgIDEyLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDgzLCAgIDg0LCAgIDg1LCAgIDkwLAotCi0gICAgICAgMzAs
ICAgNzMsICAgMjUsICAgODAsICAgODEsICAgODIsICAgIDcsICAgNzcsICAgNzgsICAgNzksCi0g
ICAgICAgOTAsICAgMjQsICAgNzUsICAgOTAsICAgOTAsICAgMzksICAgNDAsICAgNDEsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
NzAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgNTIs
ICAgOTAsICAgODksICAgOTAsICAgOTAsCi0gICAgICAgMTksICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgNzEsICAgNjYsICAgNjEsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAs
ICAgNzYsICAgNTcsICAgOTAsICAgNjQsICAgMzIsICAgOTAsICAgODYsCi0gICAgICAgNjUsICAg
NDksICAgNTksICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAg
ICAgOTAsICAgNjAsICAgMzEsICAgOTAsICAgOTAsICAgOTAsICAgIDgsICAgOTAsICAgOTAsICAg
OTAsCi0gICAgICAgOTAsICAgOTAsICAgNTQsICAgMTMsICAgOTAsICAgMTQsICAgOTAsICAgOTAs
ICAgMTYsICAgNjcsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgNjIsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgNTUsICAgNzQsCi0KLSAgICAgICA2MywgICAxMSwgICA2OCwgICAgNiwgICA4
OCwgICAxMCwgICA0NSwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA0NiwgICA5MCwgICA5MCwgICA5MCwgICA0OCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA0NywgICAgMAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgMTU2LCAgMTU0LCAgMTUzLCAgMTUzLAorICAgICAgMTM4LCAgMTQ0LCAgMTQ5LCAgMTMz
LCAgMTM0LCAgMTQyLCAgMTQxLCAgMTMwLCAgMTM5LCAgMTM3LAorICAgICAgMTQzLCAgMTAyLCAg
MTAyLCAgMTMxLCAgMTI3LCAgMTQ1LCAgMTMyLCAgMTQ2LCAgMTUwLCAgIDk4LAorICAgICAgMTM1
LCAgMTM2LCAgMTQ4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTI4LCAgMTQ3LCAgMTI5LCAgMTQwLCAg
ICAzLCAgICA0LCAgICAzLAorICAgICAgMTUyLCAgMTU1LCAgMTUxLCAgMTI0LCAgMTEwLCAgMTI5
LCAgMTE4LCAgMTEzLCAgMTA4LCAgMTE2LAorICAgICAgMTA2LCAgMTE3LCAgMTA3LCAgMTA1LCAg
ICAyLCAgICAxLCAgMTA5LCAgMTA0LCAgMTAwLCAgMTAxLAorICAgICAgICAwLCAgICAwLCAgMTAy
LCAgMTM2LCAgMTI4LCAgMTM1LCAgMTI1LCAgMTIxLCAgMTIzLCAgMTIyLAorICAgICAgMTI2LCAg
IDk4LCAgMTE0LCAgMTIwLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorCisg
ICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgMTcsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgMjAsICAgMjIsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAxMTUsICAxMTksICAgIDUsCisgICAgICAxNTEsICAg
IDAsICAgIDEsICAxMDQsICAgIDAsICAgIDAsICAxMDMsICAgOTksICAxMTEsICAxMTIsCisgICAg
ICAgNTAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgMTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgMjYsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgMjMsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAg
ICA5OCwgICAgMCwgIDEwNSwgICAgMCwgIDEwNCwgICA5OCwgICAyOCwgICA5OCwgICA5OCwgICA5
NSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyMSwg
ICA1MywgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA2OSwgICA5OCwgICA5OCwgICA1OCwgICA3
MywgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA3MCwgICAgOSwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NiwgICAyOSwgICA5OCwgICA5OCwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAzNiwgICAzNywgICAzOCwgICAyNywgICA5OCwgICA5OCwK
KyAgICAgICA5OCwgICAxNSwgICA0MiwgICA0MywgICA0NCwgICA1MSwgICAxMiwgICA5OCwgICA5
OCwgICA5OCwKKworICAgICAgIDk4LCAgIDgyLCAgIDgzLCAgIDg0LCAgIDk4LCAgIDMwLCAgIDc0
LCAgIDI1LCAgIDg1LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDc5LCAgIDgwLCAgIDgxLCAg
IDk4LCAgIDI0LCAgIDc3LCAgIDk4LCAgIDk4LAorICAgICAgIDM5LCAgIDQwLCAgIDQxLCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDcxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDUyLCAgIDk4LCAgIDk3LCAgIDk4LCAgIDk4LCAgIDE5LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDcyLCAgIDY2LCAgIDYxLCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDc4LAorICAgICAgIDU3LCAgIDk4LCAgIDY0LCAgIDMyLCAgIDk4LCAgIDk0LCAgIDY1LCAg
IDQ5LCAgIDc2LCAgIDU5LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDYwLCAgIDMxLAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgICA4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU0LAorICAgICAgIDEzLCAgIDk4LCAgIDE0
LCAgIDk4LCAgIDk4LCAgIDE2LCAgIDY3LCAgIDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgNjIs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTUsICAgNzUsICAgNjMsCisg
ICAgICAgMTEsICAgNjgsICAgIDYsICAgOTYsICAgMTAsICAgODgsICAgNDUsICAgODksICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgNDYsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgNDgsICAgOTgsCisgICAgICAgOTIsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTAsICAgOTgsICAgOTEsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgNDcsICAgOTMsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDUwLDE1ICs0NTMsMTUgQEAgc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAy
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAg
ICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3
LAotICAgICAgIDE4LCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIwLCAgIDIwLCAgIDIxLCAg
IDIyLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgICAxLCAgIDI3LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDI3LAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAg
IDMxLCAgIDMxLCAgIDMxLCAgIDMyLCAgIDMxLAotICAgICAgIDMxLCAgIDMzLCAgIDM0LCAgIDMx
LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDM1LCAgIDMxLCAgIDMxLAotICAgICAgIDM2LCAgICAxLCAg
IDM3LCAgIDM4LCAgIDMxLCAgICAxLCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLAotCi0gICAgICAg
NDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgMzEsICAgNDgsICAgNDksICAgNTAsICAgNTEs
Ci0gICAgICAgNTIsICAgNTMsICAgMzEsICAgNTQsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAg
NTksICAgNjAsCi0gICAgICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTgsICAgMTksICAgMjAsICAgMjAsICAgMjAsICAg
MjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCisgICAgICAgMzIsICAgMzIsICAg
MzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAgMzIsCisgICAgICAgMzIs
ICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYsICAgMzIsICAgMzIsCisg
ICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAgNDAsICAgNDEsICAgNDIs
ICAgNDMsCisKKyAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKKyAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKKyAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKQEAgLTQ3NSwyMDEgKzQ3OCwyMTQgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90
IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7
CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY3XSA9CitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAg
ICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLCAgICAxLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA0
LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAzLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICA0
LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAg
ICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0
LAogICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAg
ICA0LCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAg
ICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDMxXSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYmFzZVs0NjRdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICA2NCwgICA2NSwgICA3NCwgICAgMCwgIDYyNywgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAgIDYw
MiwgICA0NSwgIDEzNSwgIDYyOCwgIDYyOCwgIDYwMSwgIDEzMiwgIDYyOCwgIDEzMSwgIDEyOSwK
LSAgICAgIDE0MywgIDE1NSwgIDE2MywgIDU5OSwgIDYyOCwgIDE3OSwgIDU5OSwgICA0NywgIDYy
OCwgICAgMCwKLSAgICAgIDYyOCwgIDYyOCwgIDEyNiwgICA5OCwgIDEwOCwgIDE0NywgIDE1OCwg
IDE1OCwgIDE2NSwgIDU3MCwKLSAgICAgIDEzMCwgIDEwNywgIDU2OSwgIDE0OCwgIDE1NiwgIDU2
MywgIDE3MiwgIDU3NiwgIDE3NCwgIDE4MSwKLSAgICAgIDE3NywgIDE5NSwgIDU3MiwgIDYyOCwg
IDE3MywgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYwMywKLSAgICAgIDYyOCwgIDYyOCwgICAg
MCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwgIDYyOCwKLSAgICAgIDYyOCwg
IDYyOCwgIDYyOCwgIDIzMywgIDYyOCwgICAgMCwgIDYyOCwgIDIzOSwgIDI1NSwgIDI3MSwKLSAg
ICAgIDI4NywgICAgMCwgIDMwMCwgIDYyOCwgIDYyOCwgIDYyOCwgIDU5MiwgIDYyOCwgIDYyOCwg
IDYyOCwKLSAgICAgIDU5MSwgICAgMCwgIDYyOCwgIDYyOCwgIDU2NCwgIDU1NywgIDU2MCwgIDU2
OCwgIDU2NywgIDU1NCwKLQotICAgICAgNTY5LCAgNTU2LCAgNTYyLCAgNTUwLCAgNTQ3LCAgNTYw
LCAgNTQ3LCAgNTQ0LCAgNTQ0LCAgNTUwLAotICAgICAgNTM4LCAgNTQ1LCAgNTQyLCAgNTUyLCAg
NTM4LCAgNTQ0LCAgNTQ3LCAgNTQ4LCAgICAwLCAgMTg3LAotICAgICAgNTQ3LCAgMjQxLCAgNTMz
LCAgNTQ2LCAgNTM3LCAgNTM5LCAgNTI5LCAgNTQzLCAgNTQwLCAgNTQyLAotICAgICAgNTI1LCAg
NTMwLCAgNTI3LCAgNTE2LCAgMTkyLCAgNTMwLCAgNTI2LCAgNTI4LCAgNTE3LCAgNTIwLAotICAg
ICAgMjc0LCAgNTI1LCAgNTE3LCAgNTI5LCAgMTE0LCAgNTIyLCAgNjI4LCAgNjI4LCAgNjI4LCAg
ICAwLAotICAgICAgMzE2LCAgICAwLCAgMzIyLCAgMzM4LCAgMzQ0LCAgMzUxLCAgICAwLCAgNjI4
LCAgNjI4LCAgICAwLAotICAgICAgNTE0LCAgNTE4LCAgNTI3LCAgNTI0LCAgNTA4LCAgNTA4LCAg
MjA1LCAgNTIzLCAgNTIwLCAgNTIwLAotICAgICAgNTE4LCAgNTE1LCAgNTA3LCAgNTEzLCAgNTAw
LCAgNTExLCAgNTE0LCAgICAwLCAgNTExLCAgNDk5LAotICAgICAgNTA2LCAgNTAzLCAgNTA3LCAg
NTAwLCAgNDg5LCAgNDg4LCAgNTAxLCAgNTA0LCAgNTAxLCAgNDk2LAotICAgICAgNDg3LCAgMjQ3
LCAgNDkyLCAgNDk1LCAgNDg2LCAgNDgzLCAgNDg3LCAgNDkzLCAgNDg0LCAgNDc1LAotCi0gICAg
ICA0NzgsICA0NzYsICA0ODYsICA0NzIsICA0NzAsICA0NzAsICA0NzIsICA0NjksICA0ODAsICA0
NzksCi0gICAgICAzMjgsICA0NzQsICA0NjksICA0NTgsICAyNjAsICA0NzYsICA0NzgsICA0Njcs
ICAzNTgsICAzNjYsCi0gICAgICAzNzIsICAzNzgsICA0NjgsICAgIDAsICA0NjYsICAyNzYsICAg
IDAsICA0NTgsICA0NTYsICA0NjQsCi0gICAgICA0NTMsICA0NzAsICA0NTksICAyOTEsICAgIDAs
ICAgIDAsICA0NTMsICA0NjMsICA0NjMsICA0NDgsCi0gICAgICAzMDUsICAgIDAsICAgIDAsICA0
NTAsICAzMjcsICA0NTEsICA0NDUsICA0NDQsICA0NDUsICA0NDQsCi0gICAgICAzODIsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NDAsICA0NDEsICA0NDYsICA0MzcsCi0gICAgICA0
NTAsICA0NDUsICA0NDQsICA0MzYsICA0NDAsICA0MzIsICA0MzUsICA0MzksICA0NDQsICA0NDMs
Ci0gICAgICA0MzQsICAgIDAsICAgIDAsICA0NDAsICA0MjksICA0MjksICA0MzQsICA0MzMsICA0
MzAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICA0MjAsICA0MzIsICA0MzQsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICA0MjIsICA0MjMsICA0MTcsICA0
MjcsICAgIDAsICAgIDAsICAgIDAsICA0MTgsCi0KLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgIDQyNSwgICAgMCwg
ICAgMCwgIDQyMywgIDQxOSwgICAgMCwgICAgMCwgICAgMCwgIDQxNSwgIDQxMSwKLSAgICAgIDQx
NiwgIDQwNiwgIDQxOSwgIDQwNSwgIDQxOCwgIDQwNywgIDQxNCwgICAgMCwgIDQxMiwgIDQxNCwK
LSAgICAgIDM5OCwgIDQwNywgIDQxMywgIDQwOCwgIDM5NiwgICAgMCwgIDM5OCwgICAgMCwgIDM5
NywgIDQwMCwKLSAgICAgICAgMCwgIDM4OSwgIDM4OCwgIDM4OCwgIDQwMSwgICAgMCwgIDQwMywg
ICAgMCwgIDQwMiwgIDQwMSwKLSAgICAgIDM4NiwgIDM5OSwgIDM4NiwgICAgMCwgICAgMCwgIDM4
OSwgICAgMCwgICAgMCwgIDM4MSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDM3OCwg
IDM4OSwgIDM4MiwgIDM4OCwgIDM4NSwgIDM4MCwgIDM3MiwKLSAgICAgIDM4MiwgICAgMCwgICAg
MCwgIDM2NSwgIDM3MSwgIDM2MCwgICAgMCwgIDM2OSwgIDM2NiwgIDM1NiwKLSAgICAgIDM4NSwg
IDM2NCwgICAgMCwgICAgMCwgIDM2NCwgICAgMCwgIDM2MiwgIDM2MSwgICAgMCwgICAgMCwKLSAg
ICAgIDM2MCwgIDMyMywgIDMwOCwgICAgMCwgIDI5OCwgIDMxOCwgIDI3MCwgIDI2NSwgICAgMCwg
ICAgMCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMjc5LCAg
MjcxLCAgMjQwLCAgMjQwLAotICAgICAgMjM4LCAgMjM3LCAgMjI2LCAgICAwLCAgMjA4LCAgMTg4
LCAgMTkwLCAgICAwLCAgMTg2LCAgMTczLAotICAgICAgMTg3LCAgMTY0LCAgMTU4LCAgICAwLCAg
NjI4LCAgNDE1LCAgNDE3LCAgNDE5LCAgNDIzLCAgMTg2CisgICAgICAgIDAsICAgIDAsICAgNjUs
ICAgNjYsICAgNzUsICAgIDAsICA2ODAsICA2ODEsICA2ODEsICA2ODEsCisgICAgICA2NTQsICAg
NDUsICAxMzcsICA2ODEsICA2ODEsICA2NTMsICAxMzQsICA2ODEsICAxMzMsICAxMzEsCisgICAg
ICAxNDYsICAxNTksICAxNjgsICA2NTEsICA2ODEsICAxODYsICA2NTEsICAgNDcsICA2ODEsICAg
IDAsCisgICAgICA2ODEsICA2ODEsICAxMjgsICAxMDAsICAxMTAsICAxNTIsICAxNTYsICAxNDYs
ICAxNjYsICA2MjIsCisgICAgICAxNzMsICAxMDksICA2MjEsICAxMjYsICAxNzcsICA2MTUsICAx
NzgsICA2MjgsICAxODcsICAxODQsCisgICAgICAxNDEsICAxOTcsICA2MjQsICA2ODEsICAxNTcs
ICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2NTYsCisgICAgICA2ODEsICA2ODEsICAgIDAsICA2
ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsICA2ODEsCisgICAgICA2ODEsICA2ODEs
ICA2ODEsICAyMzYsICA2ODEsICAgIDAsICA2ODEsICAyNDMsICAyNzMsICAyODIsCisgICAgICAz
MDQsICAgIDAsICAzMTQsICA2ODEsICA2ODEsICA2ODEsICA2NDQsICA2ODEsICA2ODEsICA2ODEs
CisgICAgICA2NDMsICAgIDAsICA2ODEsICA2ODEsICA2MTYsICA2MDksICA2MTIsICA2MjAsICA2
MTksICA2MDYsCisKKyAgICAgIDYyMSwgIDYwOCwgIDYxNCwgIDYwMiwgIDU5OSwgIDYxMiwgIDU5
OSwgIDU5NiwgIDU5NiwgIDYwMiwKKyAgICAgIDU5MCwgIDE4OSwgIDU5NSwgIDYwNSwgIDU5MSwg
IDU5NywgIDYwMCwgIDYwMSwgICAgMCwgIDIxNiwKKyAgICAgIDYwMCwgIDE4OCwgIDU4NiwgIDU5
OSwgIDU5MCwgIDU5MiwgIDU4MiwgIDU5NiwgIDU5MywgIDU5NSwKKyAgICAgIDU3OCwgIDU4Mywg
IDU4MCwgIDU2OSwgIDE4MywgIDU3NywgIDU4MiwgIDU3OCwgIDU4MCwgIDU2OSwKKyAgICAgIDU3
MiwgIDIyMCwgIDU3NywgIDU2OSwgIDU4MSwgIDE3NiwgIDU3NCwgIDY4MSwgIDY4MSwgIDY4MSwK
KyAgICAgICAgMCwgIDMzMSwgICAgMCwgIDM0NCwgIDM2MSwgIDI5MCwgIDM3NCwgICAgMCwgIDY4
MSwgIDY4MSwKKyAgICAgICAgMCwgIDU2NiwgIDU3MCwgIDU3OSwgIDU3NiwgIDU2MCwgIDU2MCwg
IDIxNSwgIDU3NSwgIDU3MiwKKyAgICAgIDU3MiwgIDU3MCwgIDU2NywgIDU1OSwgIDU2NSwgIDU1
MiwgIDU2MywgIDU0OSwgIDU2NSwgICAgMCwKKyAgICAgIDU2MiwgIDU1MCwgIDU1NywgIDU1NCwg
IDU1OCwgIDU1MSwgIDU0MCwgIDUzOSwgIDU1MiwgIDU1NSwKKyAgICAgIDU1MiwgIDU0NywgIDUz
OCwgIDI2MCwgIDU0MywgIDU0NiwgIDUzNywgIDUzNCwgIDUzOCwgIDU0NCwKKworICAgICAgNTM1
LCAgNTI2LCAgNTI5LCAgNTI3LCAgNTM3LCAgNTIzLCAgNTIxLCAgNTM0LCAgNTIwLCAgNTIyLAor
ICAgICAgNTE5LCAgNTMwLCAgNTI5LCAgMjgzLCAgNTI0LCAgNTE5LCAgNTA4LCAgMjY0LCAgNTI2
LCAgNTI4LAorICAgICAgNTE3LCAgMzgxLCAgMzg4LCAgMzk1LCAgNDAyLCAgNTE4LCAgICAwLCAg
NTE2LCAgMzIwLCAgICAwLAorICAgICAgNTA4LCAgNTA2LCAgNTE0LCAgNTAzLCAgNTIwLCAgNTA5
LCAgMzM2LCAgICAwLCAgICAwLCAgNTAzLAorICAgICAgNTEzLCAgNTEzLCAgICAwLCAgNDk4LCAg
MzQ5LCAgICAwLCAgICAwLCAgNTAwLCAgMzY2LCAgNTAxLAorICAgICAgNDk1LCAgNDk0LCAgNDk1
LCAgNDk0LCAgNDA3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNDkwLCAg
NDkxLCAgNDk2LCAgNDg3LCAgNTAwLCAgNDk1LCAgNDk0LCAgNDg2LCAgNDkwLCAgNDgyLAorICAg
ICAgNDg1LCAgNDg5LCAgNDk0LCAgNDgwLCAgNDkyLCAgNDgzLCAgICAwLCAgICAwLCAgNDg5LCAg
NDc4LAorICAgICAgNDc4LCAgNDgzLCAgNDgyLCAgNDc5LCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgNDY5LCAgNDgxLAorICAgICAgNDgzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgNDcxLCAgNDcyLCAgNDY2LAorCisgICAgICA0NzYsICAgIDAsICAgIDAsICAgIDAsICA0
NjcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICA0NzQsICAgIDAsICAgIDAsICA0NzIsICA0NjgsCisgICAgICAgIDAsICAg
IDAsICAgIDAsICA0NjQsICA0NjAsICA0NjUsICA0NTUsICA0NjgsICA0NTQsICA0NjcsCisgICAg
ICA0NTYsICA0NjMsICAgIDAsICA0NjEsICA0NjMsICA0NDcsICA0NDksICA0NTUsICA0NjEsICA0
NTYsCisgICAgICA0NDQsICAgIDAsICA0NDYsICAgIDAsICA0NDUsICA0NDgsICAgIDAsICA0Mzcs
ICA0MzYsICA0MzYsCisgICAgICA0NDksICAgIDAsICA0NTEsICAgIDAsICA0NTAsICA0NDksICA0
MzQsICA0NDcsICA0MzQsICAgIDAsCisgICAgICAgIDAsICA0MzcsICAgIDAsICAgIDAsICA0Mjks
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0MjYsICA0MzcsICA0MzAsICA0
MzYsICA0MzMsICA0MjgsICA0MjAsICA0MzIsICAgIDAsICAgIDAsCisgICAgICA0MjUsICA0MzIs
ICA0MjEsICAgIDAsICA0MzAsICA0MjcsICA0MTcsICA0MTEsICA0MjUsICAgIDAsCisgICAgICAg
IDAsICA0MjUsICAgIDAsICA0MjMsICA0MjIsICAgIDAsICAgIDAsICA0MjEsICA0MDcsICA0MTks
CisKKyAgICAgICAgMCwgIDQxMCwgIDQzMSwgIDQzMCwgIDQyOSwgIDQwMCwgIDM5NiwgICAgMCwg
ICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQyMSwgIDI1
MCwgIDQyMSwgIDQxMSwgIDM4NCwKKyAgICAgIDM5MiwgIDM5NCwgIDM5MCwgIDM5MiwgIDM5MSwg
IDM5MCwgIDM5MywgIDM5MCwgIDM5MSwgIDM4OCwKKyAgICAgICAgMCwgIDMzMiwgIDM0MywgIDMx
NywgIDMyOSwgIDMxMywgIDMxNywgIDMwNCwgIDMyMSwgIDI5MSwKKyAgICAgICAgMCwgIDMwMiwg
IDI4MCwgIDI3MSwgIDI1NSwgIDI2MiwgICAgMCwgIDI1NiwgICAgMCwgIDIzMiwKKyAgICAgIDIw
NiwgIDIxMiwgIDE0OCwgIDE1OSwgIDExMywgICAgMCwgICAgMCwgIDY4MSwgIDQ0MiwgIDQ0NCwK
KyAgICAgIDQ0NiwgIDQ1MCwgIDE2MQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfZGVmWzQzMV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0
NjRdID0KICAgICB7ICAgMCwKLSAgICAgIDQyNSwgICAgMSwgIDQyNiwgIDQyNiwgIDQyNSwgICAg
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNywKLSAgICAgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyOCwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyOSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQzMCwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQy
NywgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI4LAotICAgICAgNDI1LCAgNDI5
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDMwLCAgNDI1LCAgNDI1LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsCi0gICAgICA0
MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgICAwLCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1CisgICAgICA0NTgsICAgIDEsICA0NTksICA0NTksICA0NTgsICAgIDUsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsCisgICAgICA0NTgsICA0NTgs
ICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NjEsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NjIsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NjMsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NjAsICA0
NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ2MSwgIDQ1OCwgIDQ2
MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgICAgMCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1
OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY5NV0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs3NDldID0KICAgICB7ICAgMCwKICAg
ICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwg
ICAxNywKICAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywKLSAgICAgICAyNCwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAyOSwg
ICAzMCwgICAzMCwgICAzMCwgICAzMCwKLSAgICAgICAzMCwgICAzMCwgICAzMCwgICAzMCwgICAz
MCwgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKLSAgICAgICAzNiwgICAzNywgICAzOCwg
ICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywgICA0NCwKLSAgICAgICA0NSwgICA0
NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1MywgICAzMCwKLSAgICAg
ICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwgICA1OSwgICA2NSwgICA2
NiwKLSAgICAgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2MSwgICA2MiwgICAgOCwg
ICAgOCwgICAgOCwKKyAgICAgICAyMywgICAyNCwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAy
OSwgICAzMCwgICAzMCwgICAzMCwKKyAgICAgICAzMCwgICAzMCwgICAzMCwgICAzMCwgICAzMCwg
ICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwKKyAgICAgICAzNSwgICAzNiwgICAzNywgICAz
OCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICAzMCwgICA0MywKKyAgICAgICA0NCwgICA0NSwg
ICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwgICA1MiwgICA1MywKKyAgICAgICAz
MCwgICAzMCwgICAzMCwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OSwgICA1OSwgICA2NSwK
KyAgICAgICA2NiwgICA5MCwgICA5MSwgICA2MCwgICA2MCwgICAgOCwgICA2MSwgICA2MiwgICAg
OCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwg
ICAgOCwgICAgOCwgICAgOCwKICAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAg
OCwgICAgOCwgICAgOCwgICAgOCwgICAgOCwKIAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4LAogICAgICAgICA4LCAgICA4LCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorICAgICAgIDYz
LCAgICA4LCAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAog
ICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LCAgIDYzLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LAotICAgICAgIDY3LCAgIDcwLCAgIDcyLCAgIDc0LCAgIDc0LCAgIDc0
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDkzLAotICAgICAgMTE5LCAgIDc1LCAgIDk1LCAgIDk2LCAg
IDczLCAgIDcxLCAgIDc2LCAgMTIwLCAgIDY4LCAgIDk3LAotICAgICAgMjE2LCAgIDk4LCAgMjE3
LCAgIDk0LCAgMTIxLCAgIDk5LCAgIDc3LCAgIDc4LCAgMTE2LCAgIDc5LAotICAgICAgIDc5LCAg
IDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgMTE3LCAgIDgzLCAgIDgzLCAgIDgzLAotICAg
ICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgxLCAgMTAwLCAgMTIzLCAgMTE4LCAgMTU3LCAg
IDgyLAotICAgICAgMTI0LCAgNDI0LCAgIDgxLCAgNDIzLCAgMTI1LCAgMTAxLCAgMTQ3LCAgIDgx
LCAgMTAyLCAgIDg2LAotCi0gICAgICAxMDMsICAgODcsICAgODgsICAxMTAsICAxMDQsICAgODEs
ICAxMDcsICAxMjYsICAxMDgsICAxMDUsCi0gICAgICAxMjgsICAxMTEsICAxMzIsICAxMTIsICAg
ODIsICAxMDYsICAxMTMsICAxMDksICA0MjIsICAxMzMsCi0gICAgICAxMzQsICA0MjEsICAxMTQs
ICAxMzcsICA0MjAsICAxMjksICAxMzgsICAxNDEsICAxMzAsICAxMzUsCi0gICAgICAyMDQsICAx
NDIsICAxMzYsICAxNDMsICAxMzksICAxODQsICAxNDgsICAxNDQsICAxODUsICAxODYsCi0gICAg
ICA0MTksICAxNDAsICAxODcsICA0MTgsICAxODgsICAyMDUsICAxNDUsICAgNzQsICAgNzQsICAg
NzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMs
ICAxNTMsICAyMjksCi0gICAgICAyMzAsICA0MTcsICAxNTEsICAyNTQsICAyNTUsICAyNTYsICA0
MTYsICAgNzgsICAxNTQsICAgNzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgODAs
ICAxNTEsICAyODAsICAyODEsICAyODIsICA0MTUsCi0gICAgICA0MTQsICAxNTQsICA0MTMsICAg
NzgsICAgODEsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAxOTAs
ICAyODgsICAyODksICAyOTAsICA0MTIsICAxNTUsICAgODEsICAxNTUsICAxOTEsCi0KLSAgICAg
ICA4MSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDI5NywgIDI5OCwgIDI5
OSwKLSAgICAgIDQxMSwgIDQxMCwgICA3OCwgICA4MSwgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywKLSAgICAgIDIxMSwgIDMwNCwgIDMwNSwgIDMwNiwgIDQwOSwgIDIxOSwgIDQw
OCwgIDIxOSwgIDIxMiwgICA4MSwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwg
IDIyMCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywKLSAgICAgIDE1MywgIDE1MywgICA4MSwgIDMw
OCwgIDMwOSwgIDMxMCwgIDQwNywgIDIyMSwgIDQwNiwgIDIyMSwKLSAgICAgIDQwNSwgIDE1NCwg
IDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1
NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NCwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwK
LSAgICAgIDE1NiwgIDI3NSwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDQw
NCwgIDI3NiwKLSAgICAgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMiwg
IDIyMiwgIDIyMiwgIDIyMiwKLSAgICAgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIy
MiwgIDIyMiwgIDIyMiwgIDMxNiwgIDMxNywKLQotICAgICAgMzE4LCAgMzk2LCAgNDAzLCAgNDAy
LCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk1LCAgMzk0LCAgMzkzLAotICAgICAgMzkyLCAgMzkxLCAg
Mzk3LCAgMzkwLCAgMzk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDkyLAotICAgICAgIDky
LCAgMTUwLCAgMTUwLCAgMTUyLCAgMzg5LCAgMTUyLCAgMTUyLCAgMzg4LCAgMzg3LCAgMzg2LAot
ICAgICAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3
LCAgMzc2LAotICAgICAgMzc1LCAgMzc0LCAgMzczLCAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAg
MzY4LCAgMzY3LCAgMzY2LAotICAgICAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLCAgMzYxLCAgMzYw
LCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LAotICAgICAgMzU1LCAgMzU0LCAgMzUzLCAgMzUyLCAg
MzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LAotICAgICAgMzQ1LCAgMzQ0LCAgMzQz
LCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LAotICAgICAgMzM1LCAg
MzM0LCAgMzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LAotICAg
ICAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAg
MzEzLAotCi0gICAgICAzMTIsICAzMTEsICAzMDcsICAzMDMsICAzMDIsICAzMDEsICAzMDAsICAy
OTYsICAyOTUsICAyOTQsCi0gICAgICAyOTMsICAyOTIsICAyOTEsICAyODcsICAyODYsICAyODUs
ICAyODQsICAyODMsICAyNzksICAyNzgsCi0gICAgICAyNzcsICAyNzQsICAyNzMsICAyNzIsICAy
NzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsCi0gICAgICAyNjUsICAyNjQsICAyNjMs
ICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAyNTMsCi0gICAgICAyNTIsICAy
NTEsICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQsICAyNDMsCi0gICAg
ICAyNDIsICAyNDEsICAyNDAsICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAy
MzMsCi0gICAgICAyMzIsICAyMzEsICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAyMjMs
ICAyMTgsICAyMTUsCi0gICAgICAyMTQsICAyMTMsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAy
MDYsICAyMDMsICAyMDIsICAyMDEsCi0gICAgICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYs
ICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksCi0gICAgICAxODMsICAxODIsICAxODEsICAx
ODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCi0KLSAgICAgIDE3MywgIDE3
MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwKLSAgICAg
IDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE0OSwgIDE0NiwgIDEzMSwgIDEy
NywKLSAgICAgIDEyMiwgIDExNSwgICA4OSwgICA4NCwgICA2OSwgICA2NCwgIDQyNSwgICAgNywg
IDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwg
IDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwKLSAgICAgIDQy
NSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwK
LSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNSwgIDQy
NSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNSwgIDQyNQotCisgICAgICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsICAgIDgsCisgICAgICAg
IDgsICAgIDgsICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
CisgICAgICAgNzQsICAgNzQsICAgOTMsICAxMTksICAgNzUsICAgOTUsICAgOTYsICAgNzMsICAg
NzEsICAgNzYsCisgICAgICAxMjAsICAgNjgsICAgOTcsICAxNTgsICAgOTgsICAxMjMsICAgOTQs
ICAxMjEsICAgOTksICAxMjQsCisgICAgICAgNzcsICAgNzgsICA0NTcsICAgNzksICAgNzksICAg
NzksICAgNzksICAgNzksICAgNzksICAgODAsCisgICAgICAgNzgsICAxNDgsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODEsCisgICAgICAgODUsICAxMDAsICAx
NDIsICA0NTYsICAgODIsICAxMDcsICAxNDMsICAxMDgsICAgODEsICAxMDMsCisKKyAgICAgIDQ1
NSwgIDEwMSwgICA4MSwgIDEwNCwgIDEwMiwgIDExMCwgIDEwOSwgICA4NiwgIDEwNSwgICA4NywK
KyAgICAgICA4OCwgICA4MSwgIDExNiwgIDExMSwgIDEwNiwgIDExMiwgIDEyNSwgIDEyOCwgIDEx
MywgICA4MiwKKyAgICAgIDExNywgIDE0OSwgIDIwNiwgIDIxOSwgIDExNCwgIDIyMCwgIDEzMiwg
IDEzOCwgIDE3OCwgIDEyNiwKKyAgICAgIDEzOSwgIDExOCwgIDEyOSwgIDEzMywgIDEzNCwgIDEz
MCwgIDE0NCwgIDIwNywgIDE0MCwgIDE5MiwKKyAgICAgIDE0NSwgIDE3OSwgIDQ1NCwgIDEzNSwg
IDEzNiwgIDE0MSwgIDEzNywgIDE5MywgIDQ1MywgIDE0NiwKKyAgICAgICA3NCwgICA3NCwgICA3
NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgIDE1NCwgIDE1NCwgIDE1NCwKKyAgICAgIDE1NCwg
IDE1NCwgIDE1NCwgIDE1NCwgIDQ1MiwgIDE4NiwgIDE1MiwgIDIxNCwgIDE4NywgIDE4OCwKKyAg
ICAgIDIzMiwgIDIzMywgIDE4OSwgIDE1NSwgIDE5MCwgIDIxNSwgIDI1OCwgIDI1OSwgIDI2MCwg
IDE1MiwKKyAgICAgIDI4NSwgIDI4NiwgIDI4NywgIDQyMiwgIDQyMywgICA3OCwgIDE1NSwgICA3
OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3OCwgIDQ1MSwg
ICA4MCwgICA4MCwgICA4MCwgICA4MCwKKworICAgICAgIDgwLCAgIDgwLCAgIDgwLCAgIDgxLCAg
MTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAgNDUwLCAgIDgx
LCAgMTU2LCAgNDQ5LCAgMTU2LCAgIDgxLCAgNDQ4LCAgMTU3LCAgMTU3LAorICAgICAgMTU3LCAg
MTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgIDgxLCAgIDc4LCAgMjgwLCAgIDgzLCAgIDgzLAorICAg
ICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgMjgxLCAgMjkzLCAgMjk0LCAgMjk1LCAg
NDQ3LAorICAgICAgMjIyLCAgNDQ2LCAgMjIyLCAgNDQ1LCAgIDgxLCAgMjIzLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLAorICAgICAgMjIzLCAgMjIzLCAgMzAyLCAgMzAzLCAgMzA0LCAgNDQ0LCAg
NDQzLCAgIDgxLCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0
LCAgMzA5LCAgMzEwLCAgMzExLCAgNDQyLCAgNDQxLAorICAgICAgMjI0LCAgNDQwLCAgMjI0LCAg
NDM5LCAgMTU1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1LCAgMjI1
LCAgMzEzLCAgMzE0LCAgMzE1LCAgNDM4LCAgNDM3LCAgMTU1LCAgMTU3LCAgMTU3LAorICAgICAg
MTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIz
LAorCisgICAgICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMs
ICAyMjMsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAy
MjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAyMjUsICAzMjEsICAzMjIs
ICAzMjMsICA0MDMsICA0MDQsICA0MDUsICA0MzYsCisgICAgICA0MzUsICA0MzQsICA0MzMsICA0
MzIsICA0MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MDYsCisgICAgICA0MjYsICA0MDcs
ICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsICAgOTIsICAxNTEsICAxNTEsCisgICAgICAx
NTMsICA0MjUsICAxNTMsICAxNTMsICA0MjQsICA0MjEsICA0MjAsICA0MTksICA0MTgsICA0MTcs
CisgICAgICA0MTYsICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICA0
MDgsICA0MDIsCisgICAgICA0MDEsICA0MDAsICAzOTksICAzOTgsICAzOTcsICAzOTYsICAzOTUs
ICAzOTQsICAzOTMsICAzOTIsCisgICAgICAzOTEsICAzOTAsICAzODksICAzODgsICAzODcsICAz
ODYsICAzODUsICAzODQsICAzODMsICAzODIsCisgICAgICAzODEsICAzODAsICAzNzksICAzNzgs
ICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsICAzNzIsCisKKyAgICAgIDM3MSwgIDM3MCwg
IDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywgIDM2MiwKKyAgICAgIDM2
MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywgIDM1MiwK
KyAgICAgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0
MywgIDM0MiwKKyAgICAgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwg
IDMzNCwgIDMzMywgIDMzMiwKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMy
NiwgIDMyNSwgIDMyNCwgIDMyMCwgIDMxOSwKKyAgICAgIDMxOCwgIDMxNywgIDMxNiwgIDMxMiwg
IDMwOCwgIDMwNywgIDMwNiwgIDMwNSwgIDMwMSwgIDMwMCwKKyAgICAgIDI5OSwgIDI5OCwgIDI5
NywgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4NCwKKyAgICAgIDI4Mywg
IDI4MiwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwKKyAg
ICAgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2Mywg
IDI2MiwKKyAgICAgIDI2MSwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI1MiwgIDI1
MSwgIDI1MCwgIDI0OSwKKworICAgICAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQz
LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM5LAorICAgICAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAg
MjM0LCAgMjMxLCAgMjMwLCAgMjI5LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjIxLCAgMjE4
LCAgMjE3LCAgMjE2LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LAorICAgICAgMjA4LCAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LAorICAg
ICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkxLCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAg
MTgwLAorICAgICAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcw
LCAgMTY5LCAgMTY4LAorICAgICAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAg
MTYxLCAgMTYwLCAgMTU5LCAgMTUwLAorICAgICAgMTQ3LCAgMTMxLCAgMTI3LCAgMTIyLCAgMTE1
LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDU4LAorICAgICAgICA3LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2Noa1s2OTVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9j
aGtbNzQ5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC02NzcsOCArNjkzLDgg
QEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2OTVdIAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAzLCAgICA0LCAgIDEyLCAgIDEyLAotICAgICAgIDI4LCAgIDI4LCAgICAzLCAgICA0LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICA0LCAgIDEyLAorICAgICAgIDEyLCAgIDI4
LCAgIDI4LCAgICAzLCAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAogICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LAogCkBAIC02ODYsNzIgKzcwMiw3NyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzY5NV0gCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgMTMs
ICAgMTcsICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMzMsCi0g
ICAgICAgNDIsICAgMjEsICAgMzQsICAgMzQsICAgMTksICAgMTcsICAgMjEsICAgNDIsICAgMTMs
ICAgMzUsCi0gICAgICAxNDUsICAgMzUsICAxNDUsICAgMzMsICAgNDIsICAgMzUsICAgMjEsICAg
MjIsICAgNDEsICAgMjIsCi0gICAgICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjIsICAgMjMs
ICAgNDEsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjYsICAg
MjIsICAgMzYsICAgNDQsICAgNDEsICA0MzAsICAgMjIsCi0gICAgICAgNDQsICA0MjMsICAgMjMs
ICA0MjIsICAgNDUsICAgMzYsICAgNTUsICAgMjIsICAgMzYsICAgMjYsCi0KLSAgICAgICAzNywg
ICAyNiwgICAyNiwgICAzOSwgICAzNywgICAyMywgICAzOCwgICA0NSwgICAzOCwgICAzNywKLSAg
ICAgICA0NywgICAzOSwgICA0OSwgICAzOSwgICAyMiwgICAzNywgICAzOSwgICAzOCwgIDQyMSwg
ICA0OSwKLSAgICAgICA0OSwgIDQyMCwgICAzOSwgICA1MCwgIDQxOSwgICA0NywgICA1MCwgICA1
MSwgICA0NywgICA0OSwKLSAgICAgIDEzNSwgICA1MSwgICA0OSwgICA1MiwgICA1MCwgIDEyMCwg
ICA1NSwgICA1MiwgIDEyMCwgIDEyMCwKLSAgICAgIDQxNywgICA1MCwgIDEyMCwgIDQxNiwgIDEy
MCwgIDEzNSwgICA1MiwgICA3NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwg
ICA3OCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwgICA3OCwgIDE2NywKLSAgICAgIDE2NywgIDQx
NSwgICA3NCwgIDE5MiwgIDE5MiwgIDE5MiwgIDQxMywgICA3OSwgICA3OCwgICA3OSwKLSAgICAg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3NCwgIDIxNSwgIDIxNSwgIDIxNSwgIDQx
MiwKLSAgICAgIDQxMSwgICA3OCwgIDQxMCwgICA4MCwgICA3OSwgICA4MCwgICA4MCwgICA4MCwg
ICA4MCwgICA4MCwKLSAgICAgICA4MCwgIDEyMiwgIDIyNiwgIDIyNiwgIDIyNiwgIDQwOSwgICA4
MSwgICA3OSwgICA4MSwgIDEyMiwKLQotICAgICAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgx
LCAgIDgxLCAgIDgxLCAgMjM0LCAgMjM0LCAgMjM0LAotICAgICAgNDA4LCAgNDA3LCAgIDgzLCAg
IDgwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMTQxLCAgMjQx
LCAgMjQxLCAgMjQxLCAgMzk4LCAgMTUxLCAgMzk3LCAgMTUxLCAgMTQxLCAgIDgzLAotICAgICAg
MTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUz
LAotICAgICAgMTUzLCAgMTUzLCAgIDgzLCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzk2LCAgMTU0LCAg
Mzk1LCAgMTU0LAotICAgICAgMzkzLCAgMTUzLCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0
LCAgMTU0LCAgMTU1LCAgMTU1LAotICAgICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTUzLCAg
MTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjExLCAgMjE5LCAgMjE5
LCAgMjE5LCAgMjE5LCAgMjE5LCAgMjE5LCAgMzkyLCAgMjExLAotICAgICAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAotICAgICAgMjIx
LCAgMjIxLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjUxLCAgMjUxLAot
Ci0gICAgICAyNTEsICAzODEsICAzOTEsICAzODgsICAzODcsICAzODUsICAzODIsICAzODAsICAz
NzksICAzNzgsCi0gICAgICAzNzYsICAzNzUsICAzODEsICAzNzQsICAzODEsICA0MjYsICA0MjYs
ICA0MjYsICA0MjYsICA0MjcsCi0gICAgICA0MjcsICA0MjgsICA0MjgsICA0MjksICAzNzEsICA0
MjksICA0MjksICAzNzAsICAzNjksICAzNjgsCi0gICAgICAzNjcsICAzNjYsICAzNjUsICAzNjQs
ICAzNTksICAzNTYsICAzNTMsICAzNTIsICAzNTEsICAzNTAsCi0gICAgICAzNDksICAzNDcsICAz
NDUsICAzNDQsICAzNDMsICAzNDIsICAzNDAsICAzMzksICAzMzcsICAzMzUsCi0gICAgICAzMzQs
ICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAzMjQsCi0g
ICAgICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTEsICAzMDAs
ICAyOTYsCi0gICAgICAyOTUsICAyOTQsICAyOTMsICAyODYsICAyODUsICAyODQsICAyNzksICAy
NzgsICAyNzcsICAyNzYsCi0gICAgICAyNzUsICAyNzQsICAyNzEsICAyNzAsICAyNjksICAyNjgs
ICAyNjcsICAyNjYsICAyNjUsICAyNjQsCi0gICAgICAyNjMsICAyNjIsICAyNjEsICAyNjAsICAy
NTksICAyNTgsICAyNTcsICAyNTAsICAyNDksICAyNDgsCi0KLSAgICAgIDI0NywgIDI0NiwgIDI0
NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwKLSAgICAgIDIzMCwg
IDIyOSwgIDIyOCwgIDIyNSwgIDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywKLSAg
ICAgIDIxMiwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywg
IDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5
NCwgIDE5MywgIDE5MSwKLSAgICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgIDE4NSwg
IDE4NCwgIDE4MywgIDE4MiwgIDE4MSwKLSAgICAgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwgIDE3
NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwKLSAgICAgIDE2OSwgIDE2OCwgIDE2Niwg
IDE2NSwgIDE2NCwgIDE2MywgIDE2MiwgIDE2MSwgIDE0NiwgIDE0NCwKLSAgICAgIDE0MywgIDE0
MiwgIDE0MCwgIDEzOSwgIDEzOCwgIDEzNywgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwKLSAgICAg
IDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEy
MSwKLSAgICAgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwg
IDExMCwgIDEwOSwKLQotICAgICAgMTA4LCAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAg
MTAyLCAgMTAxLCAgMTAwLCAgIDk5LAotICAgICAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LCAgIDkx
LCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4LCAgIDQ2LAotICAgICAgIDQzLCAgIDQwLCAgIDI3LCAg
IDI0LCAgIDE2LCAgIDExLCAgICA3LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1Ci0KKyAgICAgICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAyMCwgICAy
MCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAzMywgICA0MiwgICAyMSwg
ICAzNCwgICAzNCwgICAxOSwgICAxNywgICAyMSwKKyAgICAgICA0MiwgICAxMywgICAzNSwgIDQ2
MywgICAzNSwgICA0NCwgICAzMywgICA0MiwgICAzNSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwg
IDQ1NSwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwKKyAgICAgICAy
MywgICA1NSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMiwK
KyAgICAgICAyNiwgICAzNiwgICA1MSwgIDQ1NCwgICAyMiwgICAzOCwgICA1MSwgICAzOCwgICAy
MywgICAzNywKKworICAgICAgNDUzLCAgIDM2LCAgIDIyLCAgIDM3LCAgIDM2LCAgIDM5LCAgIDM4
LCAgIDI2LCAgIDM3LCAgIDI2LAorICAgICAgIDI2LCAgIDIzLCAgIDQxLCAgIDM5LCAgIDM3LCAg
IDM5LCAgIDQ1LCAgIDQ3LCAgIDM5LCAgIDIyLAorICAgICAgIDQxLCAgIDU1LCAgMTM1LCAgMTQ2
LCAgIDM5LCAgMTQ2LCAgIDQ5LCAgIDUwLCAgMTEyLCAgIDQ1LAorICAgICAgIDUwLCAgIDQxLCAg
IDQ3LCAgIDQ5LCAgIDQ5LCAgIDQ3LCAgIDUyLCAgMTM1LCAgIDUwLCAgMTIyLAorICAgICAgIDUy
LCAgMTEyLCAgNDUyLCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgMTIyLCAgNDUxLCAgIDUyLAor
ICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4
LCAgIDc4LAorICAgICAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgNDUwLCAgMTIwLCAgIDc0LCAg
MTQyLCAgMTIwLCAgMTIwLAorICAgICAgMTY4LCAgMTY4LCAgMTIwLCAgIDc4LCAgMTIwLCAgMTQy
LCAgMTk0LCAgMTk0LCAgMTk0LCAgIDc0LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgNDE3LCAg
NDE3LCAgIDc5LCAgIDc4LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5
LCAgIDc5LCAgIDgwLCAgNDQ4LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAs
ICAgODAsICAgODAsICAgNzksICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisg
ICAgICAxNTYsICA0NDYsICAgODAsICAgODEsICA0NDUsICAgODEsICAgNzksICA0NDQsICAgODEs
ICAgODEsCisgICAgICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODAsICAgODMsICAy
MTQsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyMTQs
ICAyMjksICAyMjksICAyMjksICA0NDMsCisgICAgICAxNTIsICA0NDIsICAxNTIsICA0NDAsICAg
ODMsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAyMzcs
ICAyMzcsICAyMzcsICA0MzksICA0MzgsICAgODMsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAx
NTQsICAxNTQsICAxNTQsICAxNTQsICAyNDUsICAyNDUsICAyNDUsICA0MzcsICA0MzYsCisgICAg
ICAxNTUsICA0MzUsICAxNTUsICA0MzQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAx
NTUsCisgICAgICAxNTUsICAxNTUsICAyNDksICAyNDksICAyNDksICA0MzMsICA0MzIsICAxNTQs
ICAxNTcsICAxNTcsCisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAyMjIsCisKKyAgICAgIDIyMiwgIDIyMiwgIDIyMywgIDIyMywgIDIy
MywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyNCwKKyAgICAgIDIyNCwgIDIyNCwgIDIyNCwg
IDIyNCwgIDIyNCwgIDIyNCwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIy
NSwgIDIyNSwgIDI1NSwgIDI1NSwgIDI1NSwgIDM4OCwgIDM4OCwgIDM4OCwgIDQzMCwKKyAgICAg
IDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMSwgIDM4
OCwKKyAgICAgIDQyMCwgIDM4OCwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ2MCwgIDQ2MCwg
IDQ2MSwgIDQ2MSwKKyAgICAgIDQ2MiwgIDQxOSwgIDQ2MiwgIDQ2MiwgIDQxOCwgIDQxNiwgIDQw
NywgIDQwNiwgIDQwNSwgIDQwNCwKKyAgICAgIDQwMywgIDQwMiwgIDQwMCwgIDM5OSwgIDM5OCwg
IDM5NSwgIDM5NCwgIDM5MiwgIDM4OSwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4MywgIDM4
MiwgIDM4MSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwKKyAgICAgIDM3MywgIDM3Miwg
IDM3MSwgIDM2NSwgIDM2MiwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwKKyAgICAgIDM1
MywgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwK
KworICAgICAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMyLCAgMzMxLCAg
MzMwLCAgMzI5LAorICAgICAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5
LCAgMzE2LCAgMzA1LCAgMzAxLAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjkxLCAgMjkwLCAg
Mjg5LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAorICAgICAgMjgwLCAgMjc5LCAgMjc2LCAgMjc1
LCAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LAorICAgICAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjU0LCAgMjUzLAorICAgICAgMjUy
LCAgMjUxLCAgMjUwLCAgMjQ4LCAgMjQ0LCAgMjQyLCAgMjQxLCAgMjQwLCAgMjM2LCAgMjM1LAor
ICAgICAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjI4LCAgMjI2LCAgMjIxLCAgMjIwLCAgMjE5
LCAgMjE3LAorICAgICAgMjE2LCAgMjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAg
MjA4LCAgMjA3LCAgMjA2LAorICAgICAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAw
LCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAorICAgICAgMTk1LCAgMTkzLCAgMTkyLCAgMTkxLCAg
MTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1LAorCisgICAgICAxODQsICAxODMsICAx
ODIsICAxODEsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAgICAxNzMs
ICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsCisg
ICAgICAxNjIsICAxNDcsICAxNDUsICAxNDQsICAxNDMsICAxNDEsICAxNDAsICAxMzksICAxMzgs
ICAxMzcsCisgICAgICAxMzYsICAxMzQsICAxMzMsICAxMzIsICAxMzEsICAxMzAsICAxMjksICAx
MjgsICAxMjcsICAxMjYsCisgICAgICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMTgsICAxMTcs
ICAxMTYsICAxMTUsICAxMTQsICAxMTMsCisgICAgICAxMTEsICAxMTAsICAxMDksICAxMDgsICAx
MDcsICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDIsCisgICAgICAxMDEsICAxMDAsICAgOTks
ICAgOTgsICAgOTcsICAgOTYsICAgOTUsICAgOTEsICAgODcsICAgNjAsCisgICAgICAgNTMsICAg
NDgsICAgNDYsICAgNDMsICAgNDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsCisgICAg
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsCisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwog
CiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE1Nl0g
PQogICAgIHsgICAwLAogMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjAsNyArNzgxLDcgQEAgc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuXwogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAot
ICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcxLDcgKzc5Miw3IEBAIHN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg2
LDYgKzgwNyw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKIAog
I2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhl
bHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNp
bmNsdWRlICJjb21waWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAt
OTQ0LDcgKzk2Niw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwog
CWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKIAkJ
eyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCWludCBuOyBcCiAJCWZv
ciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkg
IT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKQEAg
LTEwODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewog
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0J
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0
YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUg
KCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUg
IT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTEwMyw3
ICsxMTI1LDcgQEAgeXlfZmluZF9hY3Rpb246CiAKIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09G
X0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCiAJCQl7Ci0JCQl5eV9z
aXplX3QgeXlsOworCQkJaW50IHl5bDsKIAkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsg
Kyt5eWwgKQogCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCiAJCQkJCSAgIApAQCAtMTQ4
MSwyMjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJp
bmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nh
bm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAog
eyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFO
VCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5
eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7
IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIs
ICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3Zl
cigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVf
U0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5U
Q09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VU
VVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQp
KTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEw
NDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0Pihh
dG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRp
Y19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6Citj
YXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JS
RUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9B
U1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDEx
MToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJ
R04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NF
VFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4
OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
MTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1Jf
T1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9S
VUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2Fz
ZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
TEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEy
NzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVy
bihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxF
X1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFD
RSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgog
WVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFm
dGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgor
Y2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNl
IDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNv
bnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlw
ZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAx
Mjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
KFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9S
VUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERB
U0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAx
NDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
NToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5U
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEz
OToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
Q0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAx
NDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBA
IC0xNzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VM
RUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRV
UAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICov
CitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAK
IHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VP
RihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVy
RU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2Ug
MTU0OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93
biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3Ogor
Y2FzZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0yMDE2LDcgKzIw
NzAsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAJCXdoaWxl
ICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50
X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJCWlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTIwNDUsMTEgKzIwOTks
MTEgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdoaWxlICgg
eXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0
YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDI2ICkKKwkJaWYgKCB5eV9jdXJy
ZW50X3N0YXRlID49IDQ1OSApCiAJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9j
XTsKIAkJfQogCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0
YXRlID09IDQyNSk7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDU4KTsKIAog
CXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KQEAgLTI4OTQsMTAg
KzI5NDgsMTUgQEAgdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYQogCiAj
ZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgogCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJ
bml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Citl
eHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
OworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBjb250
ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjkwNiwyNiArMjk2
NSwyNiBAQCBleHRlcm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNn
KQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1
Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9
CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VU
VVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIs
ICIiKTsKKyAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9p
ZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNv
bnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJy
b3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAt
Mjk4MCw4OCArMzAzOSwxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIoKQogdm9pZCBIYW5kbGVQcmFn
bWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKIHsKICAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewotICAg
ICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
b3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIo
IikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIg
J29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAg
ICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAgIGVs
c2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5j
b250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcg
Zm9yICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHBy
YWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgh
c3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0
KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXggaXMg
aW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEu
ZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIp
KQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2Zm
XCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sz
XSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0
byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAgICAvLyB1c2UgKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhl
IGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9y
ZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKLSAg
ICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFn
bWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUo
cHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBj
dXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxl
LgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3Ry
Y21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAg
ICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21h
VGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
cHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tl
bnNbMl07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxl
WyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAg
ICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGUm
IHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEu
cHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0g
ICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwot
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQotICAgIH0KKworICAg
IGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAi
KCIpICE9IDApIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSBy
ZXR1cm47CisKKyAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRv
a2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2
b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNw
cCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMDgzLDcxICszMDY5LDMzIEBAIHZvaWQgUmVz
ZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVo
YXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJj
bXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAg
IGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVC
aEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAg
ICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVo
YXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5v
dCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAg
fSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciog
ZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHAp
OwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAg
ICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcg
bXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBp
ZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09
IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3Ig
J2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3Iu
YmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVy
KQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9
ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVo
YXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicg
aXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAg
ICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5n
KCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
bXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29u
ZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJl
Y3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIK
KyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5w
dXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGlu
dCBsZW47CisgICAgaW50IGxlbiA9IDA7CiAKLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNh
bid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6OlRva2VuIHRva2VuOworICAgIHl5Z2V0
X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0
b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7Cisg
ICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3NpemUpKQorICAgICAgICBtZW1jcHkoYnVm
LCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSkseXlzY2FubmVy
KTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2VuZGlmICAv
LyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0gICAgYnVmW2xlbl0gPSAnICc7Ci0gICAg
cmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChsZW4gPiAwKQor
ICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47CiB9CiAKIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAtMzE3OCw5ICszMTI2LDkgQEAgdm9pZCB5
eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbgogICAgIHN0cnVjdCB5eWd1dHNfdCog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29u
dGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNv
biwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVu
bywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogfQpAQCAtMzE5OSwyMiArMzE0Nyw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6
ZShUUGFyc2VDb250ZXh0KiBjb250CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7
CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rl
c3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdM
RV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAg
ICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAg
ICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVM
TCxjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAs
IDEpLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0g
ICAgCi0gICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXBy
b2Nlc3Nvci4KKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4
dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIDE7CisjZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVy
biAxOwogICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0g
ICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50
OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRl
bWVudCA9IDA7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNj
YW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAx
OworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5l
IGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAg
ICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNF
X05FV19QUkVQUk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmlu
ZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5l
SW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0
dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nX3RhYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAq
LwogCiAvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4
NCwgMTk4OS0xOTkwLCAyMDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3Vu
ZGF0aW9uLCBJbmMuCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIg
b3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
CisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAg
Ki8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91
IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBv
ZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAt
MjksNyArMjcsNyBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlv
biB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lv
biAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Nyw3ICs0NSw3IEBACiAjZGVmaW5lIFlZQklTT04g
MQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMi
CisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAq
LwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDExICs1Myw2NyBAQAog
LyogUHVyZSBwYXJzZXJzLiAgKi8KICNkZWZpbmUgWVlQVVJFIDEKIAorLyogUHVzaCBwYXJzZXJz
LiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUg
WVlQVUxMIDEKKwogLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVE
IDAKIAogCiAKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAq
LworCisKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRl
ZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisvLyBJZ25vcmUgZXJyb3Jz
IGluIGF1dG8tZ2VuZXJhdGVkIGNvZGUuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24iCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQx
ODkpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCisKKwor
LyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJV
RyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisj
aWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUg
WVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2Vu
ZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5f
VEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKwogLyogVG9rZW5zLiAg
Ki8KICNpZm5kZWYgWVlUT0tFTlRZUEUKICMgZGVmaW5lIFlZVE9LRU5UWVBFCkBAIC0xNjEsMTU2
ICsyMTUsMTQgQEAKICAgICAgUVVFU1RJT04gPSAzNTAKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vu
cy4gICovCi0jZGVmaW5lIElOVkFSSUFOVCAyNTgKLSNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5
Ci0jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04gMjYwCi0jZGVmaW5lIExPV19QUkVDSVNJT04gMjYx
Ci0jZGVmaW5lIFBSRUNJU0lPTiAyNjIKLSNkZWZpbmUgQVRUUklCVVRFIDI2MwotI2RlZmluZSBD
T05TVF9RVUFMIDI2NAotI2RlZmluZSBCT09MX1RZUEUgMjY1Ci0jZGVmaW5lIEZMT0FUX1RZUEUg
MjY2Ci0jZGVmaW5lIElOVF9UWVBFIDI2NwotI2RlZmluZSBCUkVBSyAyNjgKLSNkZWZpbmUgQ09O
VElOVUUgMjY5Ci0jZGVmaW5lIERPIDI3MAotI2RlZmluZSBFTFNFIDI3MQotI2RlZmluZSBGT1Ig
MjcyCi0jZGVmaW5lIElGIDI3MwotI2RlZmluZSBESVNDQVJEIDI3NAotI2RlZmluZSBSRVRVUk4g
Mjc1Ci0jZGVmaW5lIEJWRUMyIDI3NgotI2RlZmluZSBCVkVDMyAyNzcKLSNkZWZpbmUgQlZFQzQg
Mjc4Ci0jZGVmaW5lIElWRUMyIDI3OQotI2RlZmluZSBJVkVDMyAyODAKLSNkZWZpbmUgSVZFQzQg
MjgxCi0jZGVmaW5lIFZFQzIgMjgyCi0jZGVmaW5lIFZFQzMgMjgzCi0jZGVmaW5lIFZFQzQgMjg0
Ci0jZGVmaW5lIE1BVFJJWDIgMjg1Ci0jZGVmaW5lIE1BVFJJWDMgMjg2Ci0jZGVmaW5lIE1BVFJJ
WDQgMjg3Ci0jZGVmaW5lIElOX1FVQUwgMjg4Ci0jZGVmaW5lIE9VVF9RVUFMIDI4OQotI2RlZmlu
ZSBJTk9VVF9RVUFMIDI5MAotI2RlZmluZSBVTklGT1JNIDI5MQotI2RlZmluZSBWQVJZSU5HIDI5
MgotI2RlZmluZSBTVFJVQ1QgMjkzCi0jZGVmaW5lIFZPSURfVFlQRSAyOTQKLSNkZWZpbmUgV0hJ
TEUgMjk1Ci0jZGVmaW5lIFNBTVBMRVIyRCAyOTYKLSNkZWZpbmUgU0FNUExFUkNVQkUgMjk3Ci0j
ZGVmaW5lIFNBTVBMRVJfRVhURVJOQUxfT0VTIDI5OAotI2RlZmluZSBTQU1QTEVSMkRSRUNUIDI5
OQotI2RlZmluZSBJREVOVElGSUVSIDMwMAotI2RlZmluZSBUWVBFX05BTUUgMzAxCi0jZGVmaW5l
IEZMT0FUQ09OU1RBTlQgMzAyCi0jZGVmaW5lIElOVENPTlNUQU5UIDMwMwotI2RlZmluZSBCT09M
Q09OU1RBTlQgMzA0Ci0jZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDUKLSNkZWZpbmUgTEVGVF9P
UCAzMDYKLSNkZWZpbmUgUklHSFRfT1AgMzA3Ci0jZGVmaW5lIElOQ19PUCAzMDgKLSNkZWZpbmUg
REVDX09QIDMwOQotI2RlZmluZSBMRV9PUCAzMTAKLSNkZWZpbmUgR0VfT1AgMzExCi0jZGVmaW5l
IEVRX09QIDMxMgotI2RlZmluZSBORV9PUCAzMTMKLSNkZWZpbmUgQU5EX09QIDMxNAotI2RlZmlu
ZSBPUl9PUCAzMTUKLSNkZWZpbmUgWE9SX09QIDMxNgotI2RlZmluZSBNVUxfQVNTSUdOIDMxNwot
I2RlZmluZSBESVZfQVNTSUdOIDMxOAotI2RlZmluZSBBRERfQVNTSUdOIDMxOQotI2RlZmluZSBN
T0RfQVNTSUdOIDMyMAotI2RlZmluZSBMRUZUX0FTU0lHTiAzMjEKLSNkZWZpbmUgUklHSFRfQVNT
SUdOIDMyMgotI2RlZmluZSBBTkRfQVNTSUdOIDMyMwotI2RlZmluZSBYT1JfQVNTSUdOIDMyNAot
I2RlZmluZSBPUl9BU1NJR04gMzI1Ci0jZGVmaW5lIFNVQl9BU1NJR04gMzI2Ci0jZGVmaW5lIExF
RlRfUEFSRU4gMzI3Ci0jZGVmaW5lIFJJR0hUX1BBUkVOIDMyOAotI2RlZmluZSBMRUZUX0JSQUNL
RVQgMzI5Ci0jZGVmaW5lIFJJR0hUX0JSQUNLRVQgMzMwCi0jZGVmaW5lIExFRlRfQlJBQ0UgMzMx
Ci0jZGVmaW5lIFJJR0hUX0JSQUNFIDMzMgotI2RlZmluZSBET1QgMzMzCi0jZGVmaW5lIENPTU1B
IDMzNAotI2RlZmluZSBDT0xPTiAzMzUKLSNkZWZpbmUgRVFVQUwgMzM2Ci0jZGVmaW5lIFNFTUlD
T0xPTiAzMzcKLSNkZWZpbmUgQkFORyAzMzgKLSNkZWZpbmUgREFTSCAzMzkKLSNkZWZpbmUgVElM
REUgMzQwCi0jZGVmaW5lIFBMVVMgMzQxCi0jZGVmaW5lIFNUQVIgMzQyCi0jZGVmaW5lIFNMQVNI
IDM0MwotI2RlZmluZSBQRVJDRU5UIDM0NAotI2RlZmluZSBMRUZUX0FOR0xFIDM0NQotI2RlZmlu
ZSBSSUdIVF9BTkdMRSAzNDYKLSNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NwotI2RlZmluZSBDQVJF
VCAzNDgKLSNkZWZpbmUgQU1QRVJTQU5EIDM0OQotI2RlZmluZSBRVUVTVElPTiAzNTAKLQogCiAK
IAotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLS8vIElnbm9yZSBlcnJvcnMgaW4gYXV0
by1nZW5lcmF0ZWQgY29kZS4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln
bm9yZWQgIi1Xc3dpdGNoLWVudW0iCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQwNjUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE4OSkKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3
MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0KLQotLyogRW5hYmxp
bmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5k
aWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlF
UlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9W
RVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8q
IEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMg
ZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAm
JiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0K
IHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAgICB1
bmlvbiB7CkBAIC0zNDAsMTcgKzI1MiwxNiBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAg
ICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07Ci19
Ci0vKiBMaW5lIDE5MyBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7
CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBF
IC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9J
U19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAot
CiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIApA
QCAtMzYwLDI4ICsyNzEsMjYgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZQogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAg
XAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMg
b25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBc
CiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBc
Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1
cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5j
LiAgKi8KLQogCiAjaWZkZWYgc2hvcnQKICMgdW5kZWYgc2hvcnQKQEAgLTQ1NiwxNCArMzY1LDE0
IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGlu
dCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5
aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwog
fQogI2VuZGlmCiAKQEAgLTU0NCw5ICs0NTMsOSBAQCB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElO
RlJJTkdFUyBPTiBVU0VSCiAvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBh
bnkgc3RhY2sgbWVtYmVyLiAgKi8KIHVuaW9uIHl5YWxsb2MKIHsKLSAgeXl0eXBlX2ludDE2IHl5
c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgfTsKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7Cisg
IFlZU1RZUEUgeXl2c19hbGxvYzsKK307CiAKIC8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdh
cCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCiAjIGRlZmluZSBZ
WVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKQEAgLTU4MCwx
MiArNDg5LDEyIEBAIHVuaW9uIHl5YWxsb2MKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5k
IFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2Ug
WVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3Rh
Y2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCiAgICAgZG8JCQkJCQkJ
CQlcCiAgICAgICB7CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZ
Q09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0
ci0+U3RhY2s7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5
c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKIAl5eW5ld2J5
dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVN
OyBcCiAJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAogICAgICAg
fQkJCQkJCQkJCVwKQEAgLTc0OSwyNiArNjU4LDI2IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50
MTYgeXlyaHNbXSA9CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQogewog
ICAgICAgIDAsICAgMTY1LCAgIDE2NSwgICAyMDAsICAgMjAzLCAgIDIxNiwgICAyMjEsICAgMjI2
LCAgIDIzMiwgICAyMzUsCi0gICAgIDMwOCwgICAzMTEsICAgNDIwLCAgIDQzMCwgICA0NDMsICAg
NDUxLCAgIDU1MCwgICA1NTMsICAgNTYxLCAgIDU2NSwKLSAgICAgNTcyLCAgIDU3NiwgICA1ODMs
ICAgNTg5LCAgIDU5OCwgICA2MDYsICAgNjYxLCAgIDY2OCwgICA2NzgsICAgNjgxLAotICAgICA2
OTEsICAgNzAxLCAgIDcyMiwgICA3MjMsICAgNzI0LCAgIDcyOSwgICA3MzAsICAgNzM5LCAgIDc1
MSwgICA3NTIsCi0gICAgIDc2MCwgICA3NzEsICAgNzc1LCAgIDc3NiwgICA3ODYsICAgNzk2LCAg
IDgwNiwgICA4MTksICAgODIwLCAgIDgzMCwKLSAgICAgODQzLCAgIDg0NywgICA4NTEsICAgODU1
LCAgIDg1NiwgICA4NjksICAgODcwLCAgIDg4MywgICA4ODQsICAgODk3LAotICAgICA4OTgsICAg
OTE1LCAgIDkxNiwgICA5MjksICAgOTMwLCAgIDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNywgICA5
NDAsCi0gICAgIDk1MSwgICA5NTksICAgOTg2LCAgIDk5MSwgICA5OTgsICAxMDM2LCAgMTAzOSwg
IDEwNDYsICAxMDU0LCAgMTA3NSwKLSAgICAxMDk2LCAgMTEwNywgIDExMzYsICAxMTQxLCAgMTE1
MSwgIDExNTYsICAxMTY2LCAgMTE2OSwgIDExNzIsICAxMTc1LAotICAgIDExODEsICAxMTg4LCAg
MTE5MSwgIDEyMTMsICAxMjMxLCAgMTI1NSwgIDEyNzgsICAxMjgyLCAgMTMwMCwgIDEzMDgsCi0g
ICAgMTM0MCwgIDEzNjAsICAxNDQ5LCAgMTQ1OCwgIDE0ODEsICAxNDg0LCAgMTQ5MCwgIDE0OTgs
ICAxNTA2LCAgMTUxNCwKLSAgICAxNTI0LCAgMTUzMSwgIDE1MzQsICAxNTM3LCAgMTU0MywgIDE1
NDYsICAxNTYxLCAgMTU2NSwgIDE1NjksICAxNTczLAotICAgIDE1ODIsICAxNTg3LCAgMTU5Miwg
IDE1OTcsICAxNjAyLCAgMTYwNywgIDE2MTIsICAxNjE3LCAgMTYyMiwgIDE2MjcsCi0gICAgMTYz
MywgIDE2MzksICAxNjQ1LCAgMTY1MCwgIDE2NTUsICAxNjY0LCAgMTY3MywgIDE2NzgsICAxNjkx
LCAgMTY5MSwKLSAgICAxNzA1LCAgMTcwNSwgIDE3MTQsICAxNzE3LCAgMTczMiwgIDE3NjgsICAx
NzcyLCAgMTc3OCwgIDE3ODYsICAxODAyLAotICAgIDE4MDYsICAxODEwLCAgMTgxMSwgIDE4MTcs
ICAxODE4LCAgMTgxOSwgIDE4MjAsICAxODIxLCAgMTgyNSwgIDE4MjYsCi0gICAgMTgyNiwgIDE4
MjYsICAxODM2LCAgMTgzNywgIDE4NDEsICAxODQxLCAgMTg0MiwgIDE4NDIsICAxODQ3LCAgMTg1
MCwKLSAgICAxODYwLCAgMTg2MywgIDE4NjksICAxODcwLCAgMTg3NCwgIDE4ODIsICAxODg2LCAg
MTg5NiwgIDE5MDEsICAxOTE4LAotICAgIDE5MTgsICAxOTIzLCAgMTkyMywgIDE5MzAsICAxOTMw
LCAgMTkzOCwgIDE5NDEsICAxOTQ3LCAgMTk1MCwgIDE5NTYsCi0gICAgMTk2MCwgIDE5NjcsICAx
OTc0LCAgMTk4MSwgIDE5ODgsICAxOTk5LCAgMjAwOCwgIDIwMTIsICAyMDE5LCAgMjAyMiwKLSAg
ICAyMDI4LCAgMjAyOAorICAgICAzMTQsICAgMzE3LCAgIDQyNiwgICA0MzYsICAgNDQ5LCAgIDQ1
NywgICA1NTcsICAgNTYwLCAgIDU2OCwgICA1NzIsCisgICAgIDU3OSwgICA1ODMsICAgNTkwLCAg
IDU5NiwgICA2MDUsICAgNjEzLCAgIDY2OCwgICA2NzUsICAgNjg1LCAgIDY4OCwKKyAgICAgNjk4
LCAgIDcwOCwgICA3MjksICAgNzMwLCAgIDczMSwgICA3MzYsICAgNzM3LCAgIDc0NiwgICA3NTgs
ICAgNzU5LAorICAgICA3NjcsICAgNzc4LCAgIDc4MiwgICA3ODMsICAgNzkzLCAgIDgwMywgICA4
MTMsICAgODI2LCAgIDgyNywgICA4MzcsCisgICAgIDg1MCwgICA4NTQsICAgODU4LCAgIDg2Miwg
ICA4NjMsICAgODc2LCAgIDg3NywgICA4OTAsICAgODkxLCAgIDkwNCwKKyAgICAgOTA1LCAgIDky
MiwgICA5MjMsICAgOTM2LCAgIDkzNywgICA5MzgsICAgOTM5LCAgIDk0MCwgICA5NDQsICAgOTQ3
LAorICAgICA5NTgsICAgOTY2LCAgIDk5MywgICA5OTgsICAxMDA1LCAgMTA0MywgIDEwNDYsICAx
MDUzLCAgMTA2MSwgIDEwODIsCisgICAgMTEwMywgIDExMTQsICAxMTQzLCAgMTE0OCwgIDExNTgs
ICAxMTYzLCAgMTE3MywgIDExNzYsICAxMTc5LCAgMTE4MiwKKyAgICAxMTg4LCAgMTE5NSwgIDEx
OTgsICAxMjIwLCAgMTIzOCwgIDEyNjIsICAxMjg1LCAgMTI4OSwgIDEzMDcsICAxMzE1LAorICAg
IDEzNDcsICAxMzY3LCAgMTQ1NiwgIDE0NjUsICAxNDg4LCAgMTQ5MSwgIDE0OTcsICAxNTA1LCAg
MTUxMywgIDE1MjEsCisgICAgMTUzMSwgIDE1MzgsICAxNTQxLCAgMTU0NCwgIDE1NTAsICAxNTUz
LCAgMTU2OCwgIDE1NzIsICAxNTc2LCAgMTU4MCwKKyAgICAxNTg5LCAgMTU5NCwgIDE1OTksICAx
NjA0LCAgMTYwOSwgIDE2MTQsICAxNjE5LCAgMTYyNCwgIDE2MjksICAxNjM0LAorICAgIDE2NDAs
ICAxNjQ2LCAgMTY1MiwgIDE2NTcsICAxNjYyLCAgMTY3MSwgIDE2ODAsICAxNjg1LCAgMTY5OCwg
IDE2OTgsCisgICAgMTcxMiwgIDE3MTIsICAxNzIxLCAgMTcyNCwgIDE3MzksICAxNzc1LCAgMTc3
OSwgIDE3ODUsICAxNzkzLCAgMTgwOSwKKyAgICAxODEzLCAgMTgxNywgIDE4MTgsICAxODI0LCAg
MTgyNSwgIDE4MjYsICAxODI3LCAgMTgyOCwgIDE4MzIsICAxODMzLAorICAgIDE4MzMsICAxODMz
LCAgMTg0MywgIDE4NDQsICAxODQ4LCAgMTg0OCwgIDE4NDksICAxODQ5LCAgMTg1NCwgIDE4NTcs
CisgICAgMTg2NywgIDE4NzAsICAxODc2LCAgMTg3NywgIDE4ODEsICAxODg5LCAgMTg5MywgIDE5
MDMsICAxOTA4LCAgMTkyNSwKKyAgICAxOTI1LCAgMTkzMCwgIDE5MzAsICAxOTM3LCAgMTkzNywg
IDE5NDUsICAxOTQ4LCAgMTk1NCwgIDE5NTcsICAxOTYzLAorICAgIDE5NjcsICAxOTc0LCAgMTk4
MSwgIDE5ODgsICAxOTk1LCAgMjAwNiwgIDIwMTUsICAyMDE5LCAgMjAyNiwgIDIwMjksCisgICAg
MjAzNSwgIDIwMzUKIH07CiAjZW5kaWYKIApAQCAtODEyLDE2ICs3MjEsMTYgQEAgc3RhdGljIGNv
bnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiAgICJpbml0X2RlY2xhcmF0b3JfbGlzdCIsICJz
aW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lmaWVkX3R5cGUiLAogICAidHlwZV9xdWFs
aWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lzaW9uX3F1YWxpZmllciIsCiAgICJ0eXBl
X3NwZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVyX25vbmFycmF5IiwgInN0cnVjdF9z
cGVjaWZpZXIiLAotICAiQDEiLCAiQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3QiLCAic3Ry
dWN0X2RlY2xhcmF0aW9uIiwKKyAgIiRAMSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xp
c3QiLCAic3RydWN0X2RlY2xhcmF0aW9uIiwKICAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAi
c3RydWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLAogICAiZGVjbGFyYXRpb25fc3RhdGVt
ZW50IiwgInN0YXRlbWVudCIsICJzaW1wbGVfc3RhdGVtZW50IiwKLSAgImNvbXBvdW5kX3N0YXRl
bWVudCIsICJAMyIsICJANCIsICJzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwKLSAgInN0YXRlbWVu
dF93aXRoX3Njb3BlIiwgIkA1IiwgIkA2IiwgImNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2Nv
cGUiLAorICAiY29tcG91bmRfc3RhdGVtZW50IiwgIiRAMyIsICIkQDQiLCAic3RhdGVtZW50X25v
X25ld19zY29wZSIsCisgICJzdGF0ZW1lbnRfd2l0aF9zY29wZSIsICIkQDUiLCAiJEA2IiwgImNv
bXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUiLAogICAic3RhdGVtZW50X2xpc3QiLCAiZXhw
cmVzc2lvbl9zdGF0ZW1lbnQiLCAic2VsZWN0aW9uX3N0YXRlbWVudCIsCi0gICJzZWxlY3Rpb25f
cmVzdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9uIiwgIml0ZXJhdGlvbl9zdGF0ZW1lbnQiLCAiQDci
LAotICAiQDgiLCAiQDkiLCAiZm9yX2luaXRfc3RhdGVtZW50IiwgImNvbmRpdGlvbm9wdCIsICJm
b3JfcmVzdF9zdGF0ZW1lbnQiLAorICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRp
dGlvbiIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIiRANyIsCisgICIkQDgiLCAiJEA5IiwgImZv
cl9pbml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwK
ICAgImp1bXBfc3RhdGVtZW50IiwgInRyYW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFy
YXRpb24iLAotICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIsICJAMTAiLCAwCisgICJmdW5jdGlvbl9k
ZWZpbml0aW9uIiwgIiRAMTAiLCAwCiB9OwogI2VuZGlmCiAKQEAgLTEzNDUsOSArMTI1NCwxOCBA
QCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIAogLyogTGlrZSBZWUVSUk9S
IGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQog
ICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwg
Zm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEs
IHRoaXMgY2FuIGdvLiAgKi8KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2
ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgSG93ZXZlciwKKyAgIFlZRkFJTCBhcHBlYXJzIHRvIGJl
IGluIHVzZS4gIE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAorICAgaW4g
Qmlzb24gMi40LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlz
CisgICBkaXNjdXNzZWQuICAqLwogCiAjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2lm
IGRlZmluZWQgWVlGQUlMCisgIC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBm
cm9tIHRoZSBHQ0MgY3BwJ3MKKyAgICAgLVd1bnVzZWQtbWFjcm9zLiAgTm9ybWFsbHkgd2UgZG9u
J3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKKyAgICAgc29tZSB1c2VycyBkbywgYW5k
IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byByZW1vdmUKKyAgICAgWVlGQUlM
IHVzZXMsIHdoaWNoIHdpbGwgcHJvZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovCisj
ZW5kaWYKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAKQEAgLTE1
MTgsMTcgKzE0MzYsMjAgQEAgeXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bAogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lk
Ci15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9w
KQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAq
eXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkK
LSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0
YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsK
KyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0g
eXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOwor
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklO
VEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTE1NjMsMTEgKzE0ODQsMTEgQEAgeXlfcmVkdWNl
X3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQogICAvKiBUaGUgc3ltYm9scyBiZWluZyBy
ZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsK
LSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9w
cmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5
dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7
Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIs
ICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTg0OSwxMCArMTc3MCw4IEBAIHl5ZGVzdHJ1Y3QgKHl5
bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb24KIAlicmVhazsKICAgICB9CiB9Ci0MCiAKIC8qIFBy
ZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KICNpZmRlZiBZ
WVBBUlNFX1BBUkFNCiAjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
CiBpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CkBAIC0xODcxLDEwICsxNzkwLDkg
QEAgaW50IHl5cGFyc2UgKCk7CiAKIAogCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwK
LWAtLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBv
ciB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRl
ZiBZWVBBUlNFX1BBUkFNCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKQEAgLTE4OTgsMjIgKzE4MTYsNDYgQEAgeXlwYXJzZSAoY29udGV4dCkKICNlbmRp
ZgogI2VuZGlmCiB7Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgbG9v
a2FoZWFkIHN5bWJvbC4gICovCiBpbnQgeXljaGFyOwogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUg
b2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0
aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBZWVNUWVBFIHl5bHZhbDsKIAotLyogTnVtYmVyIG9m
IHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOworICAgIC8qIE51bWJlciBv
ZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCisgICAgaW50IHl5bmVycnM7CisKKyAgICBpbnQg
eXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBt
ZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBpbnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUg
c3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVz
LgorICAgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBS
ZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3Zl
cmZsb3cKKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8q
IFRoZSBzdGF0ZSBzdGFjay4gICovCisgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRI
XTsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKwor
ICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZ
WUlOSVRERVBUSF07CisgICAgWVlTVFlQRSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKwor
ICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOwogCi0gIGludCB5eXN0YXRlOwogICBpbnQgeXluOwog
ICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVy
cm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2st
YWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICov
Ci0gIGludCB5eXRva2VuID0gMDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFs
ICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhl
IHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJv
bSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKwogI2lm
IFlZRVJST1JfVkVSQk9TRQogICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRz
IGFsbG9jYXRlZCBzaXplLiAgKi8KICAgY2hhciB5eW1zZ2J1ZlsxMjhdOwpAQCAtMTkyMSw1MSAr
MTg2MywyOCBAQCBpbnQgeXluZXJyczsKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2Yg
eXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgot
ICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8g
c2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0g
ICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cg
eXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAv
KiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhd
OwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsK
LQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZ
SU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsK
LQotCi0KICNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChO
KSkKIAotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2
YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20g
dGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLQogICAv
KiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgog
ICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAg
IGludCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2
cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJy
c3RhdHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVz
ZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBh
IHRva2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMu
CiAgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAg
ICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2su
CiAgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQog
ICB5eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTk5NSw3ICsxOTE0LDYgQEAg
aW50IHl5bmVycnM7CiAJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwogCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOwogCi0KIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dl
ZCBieSB0aGUgc2l6ZSBvZiB0aGUKIAkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBi
eXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCiAJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhl
IHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodApAQCAtMjAwMyw3ICsxOTIxLDYgQEAgaW50
IHl5bmVycnM7CiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAm
eXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICog
c2l6ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3Mx
OwpAQCAtMjAyNiw5ICsxOTQzLDggQEAgaW50IHl5bmVycnM7CiAJICAodW5pb24geXlhbGxvYyAq
KSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5
cHRyKQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsK
LQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5k
ZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJF
RSAoeXlzczEpOwpAQCAtMjAzOSw3ICsxOTU1LDYgQEAgaW50IHl5bmVycnM7CiAgICAgICB5eXNz
cCA9IHl5c3MgKyB5eXNpemUgLSAxOwogICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsK
IAotCiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAl
bHVcbiIsCiAJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCkBAIC0yMDQ5
LDYgKzE5NjQsOSBAQCBpbnQgeXluZXJyczsKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRl
cmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwp
CisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAg
LTIwNTcsMTYgKzE5NzUsMTYgQEAgaW50IHl5bmVycnM7CiB5eWJhY2t1cDoKIAogICAvKiBEbyBh
cHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0g
ICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0
byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmly
c3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVh
ZCB0b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBB
Q1RfTklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEg
bG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90
IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25l
LiAgKi8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxp
ZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBv
ciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09
IFlZRU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRv
a2VuOiAiKSk7CkBAIC0yMDk4LDIwICsyMDE2LDE2IEBAIHl5YmFja3VwOgogICAgICAgZ290byB5
eXJlZHVjZTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwot
CiAgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVy
biBvZmYgZXJyb3IKICAgICAgc3RhdHVzLiAgKi8KICAgaWYgKHl5ZXJyc3RhdHVzKQogICAgIHl5
ZXJyc3RhdHVzLS07CiAKLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAv
KiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KICAgWVlfU1lNQk9MX1BSSU5UICgiU2hp
ZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKIAotICAvKiBEaXNjYXJkIHRoZSBz
aGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9G
KQotICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4u
ICAqLworICB5eWNoYXIgPSBZWUVNUFRZOwogCiAgIHl5c3RhdGUgPSB5eW47CiAgICorK3l5dnNw
ID0geXlsdmFsOwpAQCAtMjE1Nyw3ICsyMDcxLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIGNvbnN0
IFRTeW1ib2wqIHN5bWJvbCA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sOwogICAgICAg
ICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwg
InVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAg
ICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuc3RyaW5nLCB0eXBlKTsKQEAgLTIxNjYsNyArMjA4MCw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5
IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNW
YXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhcmlhYmxlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTIxODMsMTQgKzIwOTcsMTQg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA0OgpAQCAtMjIwMSwxMyArMjExNSwxMyBAQCB5eXJlZHVjZToKICAgICAgICAg
Ly8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAg
aWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49ICgxIDw8IDE2KSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVn
ZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZs
b3ciLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwog
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU6CkBAIC0yMjE2LDcgKzIxMzAsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5mKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKQEAgLTIyMjUsMjEgKzIx
MzksMjEgQEAgeXlyZWR1Y2U6CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuYik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDk6CkBAIC0yMjQ3LDkgKzIxNjEsOSBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGlu
ZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3Ig
IiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9s
Tm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5v
dCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNf
c3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlw
ZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxl
ZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhw
cmVzc2lvbiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewpAQCAt
MjI2Niw3ICsyMTgwLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUo
KSA8PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxp
bmUsICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAg
ICBleHRyYUluZm9TdHJlYW0gPDwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5z
dHIoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0
KV0ubGV4KS5saW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmlzQXJyYXkoKSkgewpAQCAtMjI3OSw3ICsyMTk2LDEwIEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJh
eVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiBy
YW5nZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZv
U3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
YXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICciIDw8ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxp
bmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTIzMTYsMjEgKzIyMzYsMjEgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCks
IEV2cVRlbXBvcmFyeSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5v
dCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBs
eSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAgLTIzNzUsNyArMjI5NSw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxk
cy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0
IiwgIi4iLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQi
LCAiLiIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAg
ICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwpAQCAtMjM5Myw3ICsyMzEz
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAg
IGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVy
bmFsIEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI0MjUs
MTggKzIzNDUsMTggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBu
byBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUs
ICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXgg
b24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3Ig
bWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQz
LnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCi0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxMjoKQEAgLTI0NTAsNyArMjM3MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAg
ICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgpAQCAtMjQ2NCw3
ICsyMzg0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6CkBAIC0yNDczLDcgKzIzOTMsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxNToKQEAgLTI1MzAsOSArMjQ1MCwxMCBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rp
b24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJh
bmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjU1Niw3ICsyNDc3LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5kaWRhdGUtPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1
YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgp
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZh
bHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAi
RXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29u
c3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0
ZXJzLiIsICJFcnJvciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMjU3MywyMyArMjQ5NCwyMyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBkZWxldGUgZm5DYWxsOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIi
KTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5l
LCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKQEAgLTI1OTcsNyAr
MjUxOCw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTk6CkBAIC0yNjA1LDcgKzI1MjYsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICAgICAgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDIwOgpAQCAtMjYxMyw3ICsyNTM0LDcgQEAgeXly
ZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bU5vZGUgPSAwOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6CkBAIC0y
NjIxLDcgKzI1NDIsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSAyMjoKQEAgLTI2MzEsNyArMjU1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDIzOgpAQCAtMjY0MSwxNCArMjU2MiwxNCBAQCB5eXJlZHVjZToKICAg
ICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBh
cmFtKTsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9u
KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAyNToKQEAgLTI2OTcsNyArMjYxOCw3IEBAIHl5cmVkdWNlOgog
ICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5
cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNT
dHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVP
cENvbnN0cnVjdEZsb2F0OwpAQCAtMjcwNyw3ICsyNjI4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
IFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDI2OgpAQCAtMjcxOCw3ICsyNjM5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAg
VEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5zdHJpbmcsIHR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0
aW9uOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6CkBAIC0yNzI5LDE0
ICsyNjUwLDE0IEBAIHl5cmVkdWNlOgogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgKHl5dmFsLmludGVy
bS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDI5OgpAQCAtMjc1MCw3ICsyNjcxLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMzA6CkBAIC0yNzY0LDcgKzI2ODUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMToKQEAgLTI3ODUsMjcgKzI3
MDYsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAzMjoKIAotICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIHsgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKIAotICAgIHsgKHl5
dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmlu
dGVybSkub3AgPSBFT3BOZWdhdGl2ZTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRp
dmU7IH0KICAgICBicmVhazsKIAogICBjYXNlIDM0OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cExvZ2ljYWxOb3Q7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDM1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKQEAgLTI4
MTgsNyArMjczOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDM3OgpAQCAtMjgzMSwxMiArMjc1MiwxMiBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAzODoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6CkBAIC0yODQ4LDcgKzI3NjksNyBA
QCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA0MDoKQEAgLTI4NjAsMTcgKzI3ODEsMTcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
ICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6CiAKLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDQyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKQEAgLTI4
ODQsNyArMjgwNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0
NDoKQEAgLTI4OTgsNyArMjgxOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0NToKQEAgLTI5MTIsNyArMjgzMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA0NjoKQEAgLTI5MjYsMTIgKzI4NDcsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0
ODoKQEAgLTI5NDUsNyArMjg2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA0OToKQEAgLTI5NTksMjcgKzI4ODAsMjcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgNTI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDUzOgogCi0gICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA1NDoKQEAgLTI5OTMsMTIgKzI5MTQsMTIgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU1OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1
NjoKQEAgLTMwMTIsMTIgKzI5MzMsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDU3OgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKQEAgLTMwMzEsMTIgKzI5
NTIsMTIgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7
CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDU5OgogCi0g
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA2MDoKQEAgLTMwNTQsMTIgKzI5NzUsMTIgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
NjE6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDYyOgpAQCAtMzA3MywzOSArMjk5NCwzOSBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA2MzoKIAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsKIAogICBj
YXNlIDY0OgogCi0gICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgeyBGUkFH
X1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BNdWxBc3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY1OgogCi0gICAg
eyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAg
KHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0i
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZB
c3NpZ247IH0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0gICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQWRkQXNzaWduOyA7fQorICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFk
ZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6CiAKLSAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9Cisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxp
bmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
U3ViQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2
OToKQEAgLTMxMTcsNyArMzAzOCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgIH0KLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDcwOgpAQCAtMzEyNiw3ICszMDQ3LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDcxOgpAQCAtMzE1Nyw3ICszMDc4LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7CiAKICAgICAg
ICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA3MjoKQEAgLTMxNjYsNyArMzA4Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCiAgICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVj
bGFyYXRpb24pOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA3MzoKQEAgLTMxNzQsNyArMzA5NSw3IEBAIHl5cmVkdWNlOgogICAgIHsK
ICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5w
cmVjaXNpb24pICk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNzQ6CkBAIC0zMTkxLDEyICszMTEyLDEy
IEBAIHl5cmVkdWNlOgogICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2
RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1
YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjEzLDIxICszMTM0LDIxIEBAIHl5
cmVkdWNlOgogICAgICAgICAvLyBXZSdyZSBhdCB0aGUgaW5uZXIgc2NvcGUgbGV2ZWwgb2YgdGhl
IGZ1bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCBib2R5IHN0YXRlbWVudC4KICAgICAgICAgLy8gQWRk
IHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIHN1cnJvdW5kaW5nIHNjb3BlIGluc3RlYWQu
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldE91dGVyTGV2ZWwoKS0+aW5zZXJ0KCoo
eXl2YWwuaW50ZXJtKS5mdW5jdGlvbik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA3NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDc3OgpAQCAtMzIzOSw3ICszMTYwLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0
ZXIoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGRlbGV0ZSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGU7Ci0gICAg
O30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKQEAgLTMyNTMsNyArMzE3NCw3IEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVy
ID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0
eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1
bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybSkucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyNjEsMTQgKzMxODIsMTQg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CiAgICAgICAgICAgICAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKS5wYXJhbSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDc5OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2
ZWQgYXMgd2VsbC4uLgpAQCAtMzI4MiwxNCArMzIwMywxNCBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKICAgICAgICAgCiAgICAgICAgIGNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDgwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ug
b2YgdHlwZSAndm9pZCciLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCkBAIC0zMjk3LDcgKzMyMTgsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSl9Owog
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgODE6CkBAIC0zMzE5LDcgKzMyNDAsNyBAQCB5eXJlZHVjZToK
ICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJp
bmcsIHR5cGUgfTsKICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAo
NSldLmxleCkubGluZTsKICAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgyOgpAQCAtMzMyOCw3ICszMjQ5LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFs
aWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJt
KS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgpAQCAtMzMzOSw3ICszMjYwLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250
ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFU
ZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50
ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7
fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDg0OgpAQCAtMzM0OCw3ICszMjY5LDcgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDg1OgpAQCAtMzM1OSwzNSArMzI4MCwzNSBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRl
bXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9
IEV2cUluOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODg6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDkwOgpAQCAtMzM5NSwxNCArMzMxNiwxNCBAQCB5eXJlZHVjZToKICAgICB7CiAgICAg
ICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkpIH07CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnBhcmFtID0gcGFyYW07Ci0g
ICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTI6CkBAIC0zNDEwLDcgKzMzMzEsNyBAQCB5eXJlZHVj
ZToKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUudHlw
ZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KIApAQCAtMzQyOCw3ICszMzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCiAgICAgICAgICAg
ICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDkzOgpAQCAtMzQ1MCw3ICszMzcxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAo
NSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDk0OgpAQCAtMzQ3OCw3ICszMzk5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICB0eXBl
LnNldEFycmF5U2l6ZShzaXplKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkg
LSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFsoMykgLSAo
NildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2
c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSA5NToKQEAgLTM1MDIsNyArMzQyMyw3IEBAIHl5cmVkdWNlOgogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgOTY6CkBAIC0zNTEwLDcgKzM0MzEsNyBAQCB5eXJlZHVjZToKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6CkBAIC0zNTMy
LDE5ICszNDUzLDE5IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQogICAgICAgICAgICAgc3ltYm9sLT5z
ZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7
CiAKICAgY2FzZSA5ODoKIAogICAgIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBv
cnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgInVuc2l6ZWQg
YXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKICAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1h
a2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwogICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6CkBAIC0zNTgwLDcgKzM1MDEs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCiAgICAg
ICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CiAgICAg
ICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKQEAgLTM2MDQs
NyArMzUyNSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAg
fQotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgpAQCAtMzYxNiw3ICsz
NTM3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMo
RWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50Iiwg
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7
CkBAIC0zNjI2LDcgKzM1NDcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2YWwuaW50ZXJtKS50eXBlKSwgKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTAyOgpAQCAtMzYzNSw0MiArMzU1Niw0MiBAQCB5eXJlZHVj
ZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFy
cmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMikg
LSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZp
cnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJp
bmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgog
ICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJv
b2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6CkBAIC0z
NjgwLDcgKzM2MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBF
dnFBdHRyaWJ1dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDY6CkBAIC0zNjkyLDcgKzM2MTMsNyBAQCB5eXJlZHVj
ZToKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nSW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxMDc6CkBAIC0zNzA0LDcgKzM2MjUsNyBAQCB5eXJlZHVjZToKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJp
YW50VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6CkBAIC0zNzEzLDcgKzM2MzQsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJ1bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEwOToKQEAgLTM3MjcsNyArMzY0OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgpAQCAtMzczNSwzNSArMzY1NiwzNSBAQCB5eXJl
ZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9u
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7Ci0gICAgO30KKyAgICB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSAxMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
cHJlY2lzaW9uKSA9IEVicEhpZ2g7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1l
ZGl1bTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDExMzoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE1OgpAQCAtMzc3OSw3ICszNzAwLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgpAQCAtMzc4Nyw3ICszNzA4LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDExNzoKQEAgLTM3OTUsNyArMzcxNiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9
CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgpAQCAtMzgwMyw3ICszNzI0LDcgQEAg
eXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTE5OgpAQCAtMzgxMSw3ICszNzMyLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQor
ICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKQEAgLTM4MjAsNyArMzc0MSw3IEBAIHl5
cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTIxOgpAQCAtMzgyOSw3ICsz
NzUwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoMyk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjI6CkBA
IC0zODM4LDcgKzM3NTksNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDEyMzoKQEAgLTM4NDcsNyArMzc2OCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAxMjQ6CkBAIC0zODU2LDcgKzM3NzcsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgpAQCAtMzg2NSw3ICszNzg2LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKQEAgLTM4NzQsNyArMzc5NSw3
IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgyKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKQEAgLTM4ODMs
NyArMzgwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEyODoK
QEAgLTM4OTIsNyArMzgxMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDEyOToKQEAgLTM5MDIsNyArMzgyMyw3IEBAIHl5cmVkdWNlOgogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTMwOgpAQCAtMzkxMiw3ICszODMzLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7
Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzE6CkBAIC0zOTIyLDcgKzM4
NDMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSg0LCB0cnVlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEz
MjoKQEAgLTM5MzEsNyArMzg1Miw3IEBAIHl5cmVkdWNlOgogICAgICAgICBGUkFHX1ZFUlRfT05M
WSgic2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAg
ICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKQEAgLTM5NDAsMzMgKzM4NjEs
MzMgQEAgeXlyZWR1Y2U6CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3Vi
ZSwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEzNDoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBv
cnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUi
LCAic2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJFeHRlcm5hbE9FUyIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
RXh0ZXJuYWxPRVMsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzU6CiAKICAgICB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUs
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXIyRFJlY3QiLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bnN1cHBvcnRlZCB0
eXBlIiwgInNhbXBsZXIyRFJlY3QiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEUmVjdCIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRSZWN0
LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwotICAgIDt9CisgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMTM2OgpAQCAtMzk3NSw3ICszODk2LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM3OgpAQCAt
Mzk4OSwxMiArMzkxMCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEzODoKIAotICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRp
b24oKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5z
dHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJT
dHJ1Y3REZWNsYXJhdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgMTM5OgpAQCAtNDAxMiwxMiArMzkzMywxMiBAQCB5eXJlZHVjZToKICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
dnNwWygxKSAtICg2KV0ubGV4KS5saW5lKTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51
c2VyRGVmID0gc3RydWN0dXJlOwogICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRp
b24oKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKIAotICAgIHsg
aWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVy
KCk7IDt9CisgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNv
bnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgpAQCAtNDAyNywx
NCArMzk0OCwxNCBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5l
KTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwogICAg
ICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKLSAgICA7fQorICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDE0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQzOgpAQCAtNDA1MCw3ICszOTcxLDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0
KS0+cHVzaF9iYWNrKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0pOwog
ICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6CkBAIC00
MDg3LDcgKzQwMDgsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVh
azsKIAogICBjYXNlIDE0NToKQEAgLTQwOTUsMTQgKzQwMTYsMTQgQEAgeXlyZWR1Y2U6CiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsK
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hf
YmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0udHlwZUxpbmUpKTsKLSAgICA7fQorICAgIH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE0NzoKQEAgLTQxMTQsNyArNDAzNSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZv
aWQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ4OgpAQCAtNDEzMSw2NyAr
NDA1Miw2NyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShz
aXplKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE0OToKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCiAgIGNhc2UgMTUwOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUxOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IDt9Cisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKIAotICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1MzoK
IAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDE1NDoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVh
azsKIAogICBjYXNlIDE1NToKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE1NjoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKIAotICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30K
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKIAotICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gMDsgO30KKyAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE1OToKIAotICAg
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9s
VGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjA6CiAKLSAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7IH0KICAgICBicmVhazsKIAogICBjYXNlIDE2MToKQEAgLTQyMDIsNDQgKzQxMjMsNDQgQEAg
eXlyZWR1Y2U6CiAgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdn
cmVnYXRlKS0+c2V0RW5kTGluZSgoeXl2c3BbKDUpIC0gKDUpXS5sZXgpLmxpbmUpOwogICAgICAg
ICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykg
LSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTYyOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTYzOgogCi0gICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY0OgogCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE2NToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1O
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY2OgogCi0gICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wdXNoKCk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE2NzoKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUu
cG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1O
b2RlKTsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDE2OToKQEAgLTQyNTAsMzEgKzQxNzEsMzEgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0RW5kTGluZSgo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICB9CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
LCAwKTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MToKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzI6CiAKLSAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAwOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKIAotICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpOyA7fQorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzQ6CkBAIC00MjgzLDcg
KzQyMDQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNl
bGVjdGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
Wyg1KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5l
KTsKLSAgICA7fQorICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDE3NToKQEAgLTQyOTEsNyAr
NDIxMiw3IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFp
cikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc2OgpA
QCAtNDI5OSw3ICs0MjIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwotICAgIDt9Cisg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc3OgpAQCAtNDMwOCw3ICs0MjI5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTc4OgpAQCAtNDMyNiwxMiArNDI0NywxMiBAQCB5eXJlZHVjZToKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IDA7CiAgICAgICAgIH0KLSAgICA7fQorICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDE3OToKIAotICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2Nv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgMTgwOgpAQCAtNDM0MCwxMiArNDI2MSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgY29udGV4
dC0+c3ltYm9sVGFibGUucG9wKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAoeXl2c3BbKDQp
IC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwgKHl5dnNwWyg2KSAtICg2KV0uaW50
ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOwogICAgICAgICAt
LWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxODE6CiAKLSAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAg
ICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTgyOgpAQCAtNDM1NiwxMiArNDI3NywxMiBAQCB5eXJlZHVjZToKIAogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BE
b1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgMCwg
KHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgpXS5s
ZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7Ci0gICAgO30K
KyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODM6CiAKLSAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDE4NDoKQEAgLTQzNzAsMzUgKzQyOTEsMzUgQEAgeXlyZWR1
Y2U6CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BG
b3IsICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2Fz
dDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
KSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRl
cm0ubm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybU5vZGUp
LCAoeXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOwogICAgICAgICAtLWNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxODY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxODc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwotICAgIDt9CisgICAgfQog
ICAgIGJyZWFrOwogCiAgIGNhc2UgMTg5OgpAQCAtNDQwNiw3ICs0MzI3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMiA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxOTA6CkBAIC00NDE0LDI5ICs0MzM1LDI5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIg
PSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICA7fQorICAg
IH0KICAgICBicmVhazsKIAogICBjYXNlIDE5MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxs
b3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2Vk
IGluIGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUp
OwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1l
bnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5
IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSk7Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTM6CkBAIC00NDQ0
LDEwICs0MzY1LDEwIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAo
eXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVu
Y3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24tdm9pZCBmdW5j
dGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgO30KKyAgICB9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxOTQ6CkBAIC00NDU2LDEzICs0Mzc3LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVy
bnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1
cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZz
cFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0
aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rp
b24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgIDt9CisgICAgfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgMTk1OgpAQCAtNDQ3MCw3ICs0MzkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgewog
ICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BLaWxsLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOwotICAg
IDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgpAQCAtNDQ3OCw3ICs0Mzk5LDcg
QEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgICAgICBjb250ZXh0LT50
cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7Ci0gICAgO30KKyAgICB9CiAgICAg
YnJlYWs7CiAKICAgY2FzZSAxOTc6CkBAIC00NDg2LDIxICs0NDA3LDIxIEBAIHl5cmVkdWNlOgog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2Rl
KSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKICAgICAgICAgY29u
dGV4dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwotICAgIDt9CisgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwot
ICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgpAQCAt
NDUxNyw3ICs0NDM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
Ly8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxp
bmUsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwpAQCAtNDUyNyw3ICs0NDQ4LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgp
ID09ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkg
PiAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0
YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZv
aWQpIHsKQEAgLTQ1NTksNyArNDQ4MCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAg
ICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2
YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NTgwLDcgKzQ1MDEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29u
dGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBh
cmFtZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CiAgICAgICAgICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKICAgICAg
ICAgY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgO30KKyAgICB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSAyMDE6CkBAIC00NjAwLDE5ICs0NTIxLDE3IEBAIHl5cmVkdWNlOgogCiAg
ICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRp
bWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBU
aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1p
emUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRl
eHRQcmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRB
c0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJh
Z21hVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNv
bnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwogCiAgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgIDt9CisgICAgfQogICAgIGJyZWFrOwog
CiAKLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsK
ICAgICB9CkBAIC00NjI0LDcgKzQ1NDMsNiBAQCB5eXJlZHVjZToKIAogICAqKyt5eXZzcCA9IHl5
dmFsOwogCi0KICAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAg
RGV0ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3Rh
dGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5
LiAgKi8KQEAgLTQ2ODksNyArNDYwNyw3IEBAIHl5ZXJybGFiOgogCiAgIGlmICh5eWVycnN0YXR1
cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVz
ZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBm
YWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJk
IGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTQ3MDYsNyArNDYyNCw3
IEBAIHl5ZXJybGFiOgogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwg
dHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAg
ICAgdG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtNDc2Myw5ICs0NjgxLDYgQEAg
eXllcnJsYWIxOgogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAK
LSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXls
dmFsOwogCiAKQEAgLTQ3OTAsNyArNDcwNSw3IEBAIHl5YWJvcnRsYWI6CiAgIHl5cmVzdWx0ID0g
MTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQo
eXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBl
eGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00ODAxLDcgKzQ3MTYsNyBAQCB5eWV4aGF1c3RlZGxh
YjoKICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIg
IT0gWVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgi
Q2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29u
dGV4dCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNo
IGFjdGlvbiB0cmlnZ2VyZWQKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nX3RhYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyNCArMSwyMiBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDIuMy4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIuICAq
LwogCiAvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIw
MDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5
ODktMTk5MCwgMjAwMC0yMDA2LCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlv
biwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlv
bikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQorICAg
CiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisg
ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4gICovCiAKIC8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkg
Y3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwogICAgcGFydCBvciBhbGwgb2YgdGhl
IEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKQEAgLTI5LDEw
ICsyNywxMSBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNr
ZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGlj
ZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRo
aXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3
YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAy
LjIgb2YgQmlzb24uICAqLwogCisKIC8qIFRva2Vucy4gICovCiAjaWZuZGVmIFlZVE9LRU5UWVBF
CiAjIGRlZmluZSBZWVRPS0VOVFlQRQpAQCAtMTM0LDEwOCArMTMzLDE0IEBACiAgICAgIFFVRVNU
SU9OID0gMzUwCiAgICB9OwogI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBJTlZBUklB
TlQgMjU4Ci0jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIDI1OQotI2RlZmluZSBNRURJVU1fUFJFQ0lT
SU9OIDI2MAotI2RlZmluZSBMT1dfUFJFQ0lTSU9OIDI2MQotI2RlZmluZSBQUkVDSVNJT04gMjYy
Ci0jZGVmaW5lIEFUVFJJQlVURSAyNjMKLSNkZWZpbmUgQ09OU1RfUVVBTCAyNjQKLSNkZWZpbmUg
Qk9PTF9UWVBFIDI2NQotI2RlZmluZSBGTE9BVF9UWVBFIDI2NgotI2RlZmluZSBJTlRfVFlQRSAy
NjcKLSNkZWZpbmUgQlJFQUsgMjY4Ci0jZGVmaW5lIENPTlRJTlVFIDI2OQotI2RlZmluZSBETyAy
NzAKLSNkZWZpbmUgRUxTRSAyNzEKLSNkZWZpbmUgRk9SIDI3MgotI2RlZmluZSBJRiAyNzMKLSNk
ZWZpbmUgRElTQ0FSRCAyNzQKLSNkZWZpbmUgUkVUVVJOIDI3NQotI2RlZmluZSBCVkVDMiAyNzYK
LSNkZWZpbmUgQlZFQzMgMjc3Ci0jZGVmaW5lIEJWRUM0IDI3OAotI2RlZmluZSBJVkVDMiAyNzkK
LSNkZWZpbmUgSVZFQzMgMjgwCi0jZGVmaW5lIElWRUM0IDI4MQotI2RlZmluZSBWRUMyIDI4Mgot
I2RlZmluZSBWRUMzIDI4MwotI2RlZmluZSBWRUM0IDI4NAotI2RlZmluZSBNQVRSSVgyIDI4NQot
I2RlZmluZSBNQVRSSVgzIDI4NgotI2RlZmluZSBNQVRSSVg0IDI4NwotI2RlZmluZSBJTl9RVUFM
IDI4OAotI2RlZmluZSBPVVRfUVVBTCAyODkKLSNkZWZpbmUgSU5PVVRfUVVBTCAyOTAKLSNkZWZp
bmUgVU5JRk9STSAyOTEKLSNkZWZpbmUgVkFSWUlORyAyOTIKLSNkZWZpbmUgU1RSVUNUIDI5Mwot
I2RlZmluZSBWT0lEX1RZUEUgMjk0Ci0jZGVmaW5lIFdISUxFIDI5NQotI2RlZmluZSBTQU1QTEVS
MkQgMjk2Ci0jZGVmaW5lIFNBTVBMRVJDVUJFIDI5NwotI2RlZmluZSBTQU1QTEVSX0VYVEVSTkFM
X09FUyAyOTgKLSNkZWZpbmUgU0FNUExFUjJEUkVDVCAyOTkKLSNkZWZpbmUgSURFTlRJRklFUiAz
MDAKLSNkZWZpbmUgVFlQRV9OQU1FIDMwMQotI2RlZmluZSBGTE9BVENPTlNUQU5UIDMwMgotI2Rl
ZmluZSBJTlRDT05TVEFOVCAzMDMKLSNkZWZpbmUgQk9PTENPTlNUQU5UIDMwNAotI2RlZmluZSBG
SUVMRF9TRUxFQ1RJT04gMzA1Ci0jZGVmaW5lIExFRlRfT1AgMzA2Ci0jZGVmaW5lIFJJR0hUX09Q
IDMwNwotI2RlZmluZSBJTkNfT1AgMzA4Ci0jZGVmaW5lIERFQ19PUCAzMDkKLSNkZWZpbmUgTEVf
T1AgMzEwCi0jZGVmaW5lIEdFX09QIDMxMQotI2RlZmluZSBFUV9PUCAzMTIKLSNkZWZpbmUgTkVf
T1AgMzEzCi0jZGVmaW5lIEFORF9PUCAzMTQKLSNkZWZpbmUgT1JfT1AgMzE1Ci0jZGVmaW5lIFhP
Ul9PUCAzMTYKLSNkZWZpbmUgTVVMX0FTU0lHTiAzMTcKLSNkZWZpbmUgRElWX0FTU0lHTiAzMTgK
LSNkZWZpbmUgQUREX0FTU0lHTiAzMTkKLSNkZWZpbmUgTU9EX0FTU0lHTiAzMjAKLSNkZWZpbmUg
TEVGVF9BU1NJR04gMzIxCi0jZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjIKLSNkZWZpbmUgQU5EX0FT
U0lHTiAzMjMKLSNkZWZpbmUgWE9SX0FTU0lHTiAzMjQKLSNkZWZpbmUgT1JfQVNTSUdOIDMyNQot
I2RlZmluZSBTVUJfQVNTSUdOIDMyNgotI2RlZmluZSBMRUZUX1BBUkVOIDMyNwotI2RlZmluZSBS
SUdIVF9QQVJFTiAzMjgKLSNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyOQotI2RlZmluZSBSSUdIVF9C
UkFDS0VUIDMzMAotI2RlZmluZSBMRUZUX0JSQUNFIDMzMQotI2RlZmluZSBSSUdIVF9CUkFDRSAz
MzIKLSNkZWZpbmUgRE9UIDMzMwotI2RlZmluZSBDT01NQSAzMzQKLSNkZWZpbmUgQ09MT04gMzM1
Ci0jZGVmaW5lIEVRVUFMIDMzNgotI2RlZmluZSBTRU1JQ09MT04gMzM3Ci0jZGVmaW5lIEJBTkcg
MzM4Ci0jZGVmaW5lIERBU0ggMzM5Ci0jZGVmaW5lIFRJTERFIDM0MAotI2RlZmluZSBQTFVTIDM0
MQotI2RlZmluZSBTVEFSIDM0MgotI2RlZmluZSBTTEFTSCAzNDMKLSNkZWZpbmUgUEVSQ0VOVCAz
NDQKLSNkZWZpbmUgTEVGVF9BTkdMRSAzNDUKLSNkZWZpbmUgUklHSFRfQU5HTEUgMzQ2Ci0jZGVm
aW5lIFZFUlRJQ0FMX0JBUiAzNDcKLSNkZWZpbmUgQ0FSRVQgMzQ4Ci0jZGVmaW5lIEFNUEVSU0FO
RCAzNDkKLSNkZWZpbmUgUVVFU1RJT04gMzUwCi0KIAogCiAKICNpZiAhIGRlZmluZWQgWVlTVFlQ
RSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBF
Ci0KIHsKKworCiAgICAgc3RydWN0IHsKICAgICAgICAgVFNvdXJjZUxvYyBsaW5lOwogICAgICAg
ICB1bmlvbiB7CkBAIC0yNjUsMTQgKzE3MCwxNSBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAg
ICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CiAgICAgICAgIH07CiAgICAgfSBpbnRlcm07
Ci19Ci0vKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7CisKKworfSBZWVNU
WVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5c3R5cGUgWVlT
VFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZ
UEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgog
CiAKIAorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJt
ZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
MywxNSArNDMzLDE1IEBAIHByb3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2Rl
Kj4gVEludGVybVNlcXVlbmNlOwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7
Ci10eXBlZGVmIFRNYXA8VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCiAvLwogLy8g
Tm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4u
CiAvLwogY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3Igewog
cHVibGljOgotICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxs
KSwgdXNlckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSwgZW5kTGluZSgwKSwgdXNlRW11
bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0gICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3Ig
bykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHByYWdtYVRhYmxlKDApLCB1c2VFbXVsYXRlZEZ1bmN0
aW9uKGZhbHNlKSB7IH0KLSAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRh
YmxlOyB9CisgICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwp
LCB1c2VyRGVmaW5lZChmYWxzZSksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFs
c2UpIHsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJh
dG9yKG8pLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICB+VEludGVybUFnZ3Jl
Z2F0ZSgpIHsgfQogCiAgICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciopOwpAQCAtNDUyLDE0ICs0NTIsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJp
bmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJE
ZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlzVXNlckRlZmluZWQo
KSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIGJvb2wgaXNVc2VyRGVmaW5lZCgpIGNvbnN0
IHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CiAKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykg
eyBvcHRpbWl6ZSA9IG87IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1p
emU7IH0KICAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29s
IGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KLSAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUo
Y29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpOwotICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0
UHJhZ21hVGFibGUoKSBjb25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogICAgIHZvaWQg
c2V0RW5kTGluZShUU291cmNlTG9jIGxpbmUpIHsgZW5kTGluZSA9IGxpbmU7IH0KICAgICBUU291
cmNlTG9jIGdldEVuZExpbmUoKSBjb25zdCB7IHJldHVybiBlbmRMaW5lOyB9CiAKQEAgLTQ3NSw3
ICs0NzQsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIG9wdGltaXplOwogICAgIGJvb2wgZGVi
dWc7Ci0gICAgVFByYWdtYVRhYmxlICpwcmFnbWFUYWJsZTsKICAgICBUU291cmNlTG9jIGVuZExp
bmU7CiAKICAgICAvLyBJZiBzZXQgdG8gdHJ1ZSwgcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rp
b24gY2FsbCB3aXRoIGFuIGVtdWxhdGVkIG9uZQpAQCAtNTMzLDYgKzUzMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAogICAgICAgICAgICAgcmlnaHRUb0xl
ZnQocmlnaHRUb0xlZnQpLAogICAgICAgICAgICAgZGVwdGgoMCkge30KKyAgICB2aXJ0dWFsIH5U
SW50ZXJtVHJhdmVyc2VyKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopIHt9CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiopIHt9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3NpbmNsdWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3LDcgKzE3LDcgQEAKICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
bGludXhfXykgfHwgXAogICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09w
ZW5CU0RfXykgfHwgXAogICAgICAgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChBTkRST0lEKSB8
fCBcCi0gICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9fKSB8fCBkZWZp
bmVkKF9fUU5YX18pCisgICAgICBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9f
KQogI2RlZmluZSBBTkdMRV9PU19QT1NJWAogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0
Zm9ybS4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdy
YXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBo
KTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7
CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVy
bUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRG
dW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7
CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rp
b25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAg
ICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0
ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMg
YSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24g
Y2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rp
b25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1G
dW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJn
dW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNl
JiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7Cisg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1
bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOwor
ICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVT
ZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJh
dmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVz
ID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCog
YXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJn
dW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5v
ZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERl
cGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1
c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3Vy
cmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJl
c3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBs
aWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8v
ICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxp
bmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBh
biBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRl
IHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNl
cnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdn
cmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdh
dGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRl
cikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAg
ICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50
IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8g
dGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFw
aC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0
SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJl
bnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZp
b3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFt
TGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJp
Z2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBt
TGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBp
bnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgp
OworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNT
dGF0ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNl
IGlmIChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAg
dmlzaXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0Qmlu
YXJ5Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkq
IGludGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50
ZXJtQXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAg
ICB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsK
KworICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1M
ZWZ0bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcg
dGhlIGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5k
IGEgcmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0
IHN5bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQo
bGVmdG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgp
KSB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNl
dCogYXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAg
Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9z
dFN5bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRo
aXMgYXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0
bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAv
LyBBbiBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5j
eSBncmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5
IHBhc3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIi
IGluIHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNz
aWdubWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8v
IGNyZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAg
ICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0
KCkpIHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50
YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgp
KSB7CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3Jl
YXRlTG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlw
bGVOb2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxP
cC0+Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJt
UmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkp
Cit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0
TGVmdCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChU
SW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7Cisg
ICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVy
KHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhp
cyk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQorewor
ICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5n
ZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50
YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBt
R3JhcGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9j
ayA9IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVC
bG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNl
QmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
RmFsc2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0
aW9uID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWlu
dGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlv
bi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9u
Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3Aq
IGxvb3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1M
b29wLT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4
cHJlc3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVu
ZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9k
ZSA9ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsK
KyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5E
RU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5D
WV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9s
cywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJzaW5nIGEKKy8vIGlu
dGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJ
bnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xT
dGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUqPiBUUGFyZW50Tm9k
ZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRlcGVuZGVudCBub2Rl
cyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRjLgorICAgIC8vIHdoaWxlIHRyYXZlcnNp
bmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhpcyBkYXRhIHN0cnVj
dHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBlbmRlbmN5IGdyYXBo
IHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0U3RhY2sgeworICAgIHB1
YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OworICAgICAgICB+VE5vZGVTZXRTdGFj
aygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0
IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0KCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAg
ICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
IHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBhcmVudE5vZGVTZXQo
KSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgp
OworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQ
b3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQu
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4K
KyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Agc2V0LCB0aGUgdG9w
IHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0SW50b05leHQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAg
ICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAgIGlmICghbm9kZVNldHMuZW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50
b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRUb3BTZXQtPmJlZ2lu
KCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxl
dGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIHRo
ZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRo
ZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCisgICAgICAgIC8vIHN5bWJvbHMg
dGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uLgorICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCisgICAgICAgIHZvaWQgaW5z
ZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCFub2RlU2V0
cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNldCgpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5vZGVTZXQqPiBUUGFy
ZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJlbnROb2RlU2V0U3RhY2sgbm9kZVNldHM7
CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNo
ZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5z
dGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2RlIHNldC4KKyAgICAv
LworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBU
Tm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAg
ICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9Cisg
ICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7IH0KKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisg
ICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hl
biBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRv
CisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNl
dFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFBy
b3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAg
ICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0K
KyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldElu
dG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7
CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVw
cyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4cGxvcmluZyBhbgor
ICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBwbGFjZWhvbGRlciBz
eW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVl
LAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3VidHJlZS4KKyAgICAv
LyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3lt
Ym9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAgIC8vIER1cmluZyB0cmF2ZXJzYWwsIHRo
ZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGgg
YSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFj
ZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0aGUgbGVmdG1vc3QK
KyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFzcyBUTGVmdG1vc3RTeW1ib2xNYWludGFp
bmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYgc3VidHJlZSkKKyAg
ICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5
bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7CisgICAg
ICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAgICBsZWZ0
bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+VExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsK
KyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRt
b3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAgIH07
CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkK
KyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAg
LCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0cmVlKE5VTEwpCisgICAg
ICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIGludGVy
bU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KKworICAgIHZvaWQgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhO
b2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5h
cnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lk
IHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlv
bkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgVEdyYXBoU3lt
Ym9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3VidHJlZTsKKworICAg
IFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1Ob2RlU2V0czsK
KyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAi
ICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8
PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNh
bGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgp
IDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBt
U2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1i
b2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgp
IDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0
aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9u
KCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dp
Y2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFw
aC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0
ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVl
IC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorI2RlZmlu
ZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisKKyNpbmNsdWRl
ICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVibGljIFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rp
b24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsK
KworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAgIFRJbmZv
U2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQSF9ERVBF
TkRFTkNZX0dSQVBIX09VVFBVVF9ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRv
IGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlz
aXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zp
c2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVu
dERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAg
ICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9k
ZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAg
ICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAg
ICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2
ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdy
YXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3lt
Ym9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikK
K3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFy
ZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVj
dGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZl
cnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkocmV2aXNpb24gMTIy
MjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFs
cy5oIgogCkBAIC0zMDcsNyArMzA4LDcgQEAgc3RydWN0IEF0b21UYWJsZV9SZWMgewogICAgIGlu
dCBzaXplOwogfTsKIAotc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9Oworc3Rh
dGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IE5VTEwsIDAsIDAgfSwgeyBOVUxMLCAwLCAwLCB7
MH0gfSwgTlVMTCwgTlVMTCwgMCwgMCB9OwogQXRvbVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsK
IAogc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIg
KnMsIGludCBhdG9tKTsKQEAgLTQzNCwxNCArNDM1LDE0IEBAIHN0YXRpYyBpbnQgRmluZEhhc2hM
b2MoQXRvbVRhYmxlICphdGFibGUKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0
b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFy
IHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVk
IHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBz
aXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIq
KiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFz
ZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFC
TEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIp
OwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIs
IGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcg
XCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0
YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAg
ICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVk
IGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2gg
ZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSAr
IDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5l
bnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2
b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07
CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAg
ICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5n
c1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks
ICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtp
aV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50Zihz
dHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAg
c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9
JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxl
LT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlp
ID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNw
cmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWld
KTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHAuYwkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBA
QCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYg
ZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdt
YSh5eXN0eXBlcHAgKiB5eWx2YWxwCiAJCWNhc2UgLTE6CiAgICAgICAgICAgICAvLyBFT0YKICAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0
aCBhIG5ld2xpbmUiKTsJCQkKLQkJCXJldHVybiB0b2tlbjsKKwkJCWdvdG8gZnJlZU1lbW9yeUFu
ZFJldHVyblRva2VuOwogCQlkZWZhdWx0OgogCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwogCQkJ
U3JjU3RyTmFtZVsxXSA9ICdcMCc7CkBAIC02ODgsMTAgKzY4OSw5IEBAIHN0YXRpYyBpbnQgQ1BQ
cHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHAKIAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOwogCUhhbmRs
ZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7Ci0JdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCQor
ZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyAr
K2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyArNzg0LDYgQEAgaW50
IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGludCB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAg
Y29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsKIAogICAgIGlmICh0
b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewogICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50
ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxpbmUoeXlz
dHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxw
cCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9t
KSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAg
ICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQg
PT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXls
dmFscHApOwogICAgICAgICB9IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUgQEAgdm9pZCBGcmVl
TWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07
CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJvbCAqc3ltYm9sID0g
TlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0eXBlcHAgdmFsID0g
ezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OworICAg
IHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCB7MH19OwogICAgIGludCBhdG9tID0gMDsKIAog
ICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAg
IHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwg
dmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xF
TisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENP
TlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7
CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19T
KTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlw
ZXBwICogeXkKICAgICBjb25zdCBjaGFyICptZXNzYWdlOwogCWlmIChhdG9tID09IF9fTElORV9f
QXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwotICAg
ICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQp
OworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFN
RV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4oQ1BQ
X0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBp
ZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdl
dFN0cmluZ051bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwi
JWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9s
X25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAg
ICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJl
dHVybiAxOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCB2b2lkICBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciopOyAgICAgCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1z
Zyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRs
ZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3Rp
dmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAg
ICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2co
Y2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8u
bG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9M
b2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLklu
Zm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihp
bnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0
cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAg
IAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlz
aW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2lmbmRlZiBfX01FTU9SWV9ICiAj
ZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0eXBlZGVmIHN0cnVj
dCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5UG9vbCAqbWVtX0Ny
ZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQg
SW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBp
bnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2Nh
bkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRh
YmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZp
c2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuYwkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOCBAQCB0eXBl
ZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CiAgICAgY2hhciAqcDsKIH0gU3RyaW5nSW5wdXRT
cmM7CiAKK3N0YXRpYyBpbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CisKIHN0YXRp
YyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAg
ICByZXR1cm4gRU9GOwpAQCAtNzMsNyArNzUsNyBAQCBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0
U3JjICppcywgeXlzdHlwCiAKIHN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gs
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7fQogCi1zdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3Jj
ID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsKK3N0YXRpYyBJbnB1dFNyYyBl
b2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCwgMCwgMCB9Owog
CiBzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7
CiAKQEAgLTEyNiw2ICsxMjgsMTYgQEAgaW50IEZyZWVTY2FubmVyKHZvaWQpCiAgICAgcmV0dXJu
IChGcmVlQ1BQKCkpOwogfQogCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwg
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQoreworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gc3Ry
aW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OworICAgIGNwcC0+UGFTdHJMZW4gICA9
IGxlbmd0aDsKKyAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiAwOwor
fQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11
bHRpcGxlIHN0cmluZ3MuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAkocmV2aXNpb24gMTIy
MjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1
Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAq
Y3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmlu
Zyhjb25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRo
ZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAs
IGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQg
YSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3Rp
Y2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVy
cm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGlu
dG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQg
U2V0U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywg
U2NvcGUgCiBTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwg
aW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKTsKIFN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2Nv
cGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsKIAogCiAjZW5k
aWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0cmluZy5o
PgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsy
NjYsOCBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgY2hh
ciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tlbiwgbGVuOwog
ICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hfdmFsOwogCiAg
ICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0gMCkgewpAQCAt
MzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlw
ZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAg
ICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVh
ZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05B
TUVfTEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAg
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUo
cFRvayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAg
ICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9
IDg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNo
X3ZhbCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4
ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdh
JyArIDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJh
c2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9s
X25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2Ug
KyBjaF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAg
IGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9s
X25hbWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJv
bF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNj
dW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAg
dm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZQogICAgICAgICBzd2l0Y2gg
KHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQ
X1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9t
U3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50
ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNP
TlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5n
KGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIs
IHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5z
Y19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09O
U1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwp
OwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tl
blN0cmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4p
OworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2Vu
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNn
KHN0cik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSQogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9L
RU5TX0ggMQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvcGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJD
b250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5j
bHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNv
bnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5h
bWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJz
dHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMg
Y29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAg
IGlmIChuYW1lLT5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNv
bnRleHQ6OkNvbnRleHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwp
LAotICAgICAgbU91dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0g
ICAgZGVzdHJveUxleGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0
dXJuIGluaXRMZXhlcigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBt
YWNyb3MgaGVyZSBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0g
ZXZlcnl0aW1lIGluIHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBj
b3VudCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgVG9rZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkg
JiYgKHN0cmluZyAhPSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVw
LgotICAgIG1JbnB1dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1P
dXRwdXQgPSBvdXRwdXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0g
ICAgLy8gUGFyc2UuCi0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFu
dXAuCi0gICAgcmVzZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0
OjpkZWZpbmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpU
b2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRv
a2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFj
cm8obmV3IE1hY3JvKHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAg
IGlmIChpc01hY3JvTmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoaXNNYWNyb0RlZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTog
UmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jv
c1sqbmFtZV0gPSBtYWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
Q29udGV4dDo6dW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBN
YWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0
ZXIgPT0gbU1hY3Jvcy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBv
cnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFz
ZShpdGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVm
aW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5k
KCpuYW1lKSAhPSBtTWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBz
dGF0ZS4KLXZvaWQgQ29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jv
cy5iZWdpbigpLCBtTWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5j
bGVhcigpOwotCi0gICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAg
bU91dHB1dCA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNv
bnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3
IFRva2VuKDAsIElOVF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwot
ICAgIFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRv
a2VuKTsKLQotICAgIG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJNYWNyby5oIgotI2lu
Y2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBDb250ZXh0Ci17Ci0g
IHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQotICAgIGJvb2wgaW5p
dCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBv
dXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7IH0KLSAgICBpbnQg
cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2VuVmVjdG9yKiBvdXRw
dXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1hY3JvKHBwOjpUb2tl
bjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5
cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAg
ICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAgIGJvb2wgdW5kZWZp
bmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBpc01hY3JvRGVmaW5l
ZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmlu
ZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGluaXRM
ZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBkZWZpbmVCdWlsdElu
TWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgYm9vbCBwYXJz
ZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgotICAgIElucHV0KiBt
SW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9TZXQgbU1hY3Jvczsg
IC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfRElBR05PU1RJQ1NfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5n
IGRpYWdub3N0aWMgbWVzc2FnZXMuCisvLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxl
IGZvciBmb3JtYXR0aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCitjbGFzcyBEaWFnbm9z
dGljcworeworICBwdWJsaWM6CisgICAgZW51bSBTZXZlcml0eQorICAgIHsKKyAgICAgICAgRVJS
T1IsCisgICAgICAgIFdBUk5JTkcKKyAgICB9OworICAgIGVudW0gSUQKKyAgICB7CisgICAgICAg
IEVSUk9SX0JFR0lOLAorICAgICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01F
TU9SWSwKKyAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVS
LAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8s
CisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAg
ICAgICBVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAor
ICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisg
ICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRCwKKyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisg
ICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywK
KyAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9O
QUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0Us
CisgICAgICAgIENPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9O
QUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisg
ICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9O
X0JFSEFWSU9SLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAg
IElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfRklMRV9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VO
RCwKKworICAgICAgICBXQVJOSU5HX0JFR0lOLAorICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBXQVJOSU5H
X0VORAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOworCisgICAgdm9pZCBy
ZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwor
CisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgdGV4dCkgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKworI2luY2x1
ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRpYWdub3N0
aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9ETyhhbG9r
cCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50KGlkLCBs
b2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVy
aXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1Jf
RU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5JTkdfQkVH
SU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7CisKKyAg
ICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNs
YXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBj
bGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8gcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCisvLyBoYW5k
bGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERpcmVjdGl2ZUhhbmRs
ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7CisK
KyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29u
c3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0
cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhh
bmRsZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJl
Y3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitEaXJlY3RpdmVIYW5kbGVyOjp+
RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93
LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4OTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0
aXZlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+Cisj
aW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAi
RGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNs
dWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tl
bml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2VudW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVD
VElWRV9OT05FLAorICAgIERJUkVDVElWRV9ERUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAor
ICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJFQ1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lG
TkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJF
Q1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZFX0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEs
CisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKKyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBE
SVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlw
ZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBl
ICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05F
OworCisgICAgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0RFRklORTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJ
VkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAg
ICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1
cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVFbGlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9r
ZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9F
TkRJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlUHJhZ21hKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAg
ICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1
cm4gRElSRUNUSVZFX0xJTkU7CisKKyAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0
YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUp
Cit7CisgICAgc3dpdGNoIChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lG
TkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6CisgICAgICBjYXNlIERJUkVDVElWRV9F
TElGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0
aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHJldHVybiAodG9r
ZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4q
IHRva2VuKQoreworICAgIHdoaWxlKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBsZXhl
ci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2
ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0
aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8i
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNv
bnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJf
XyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6
TWFjcm9TZXQmIG1hY3JvU2V0KQoreworICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQu
ZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCA6IGZhbHNlOworfQorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGVmaW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6
CisgICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICBjb25z
dCBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpIDoKKyAgICAgICAgbUxleGVyKGxleGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1h
Y3JvU2V0KSwKKyAgICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9
CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7
CisKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0
b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Ym9vbCBwYXJlbiA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAg
IGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0g
dHJ1ZTsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAg
ICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9L
RU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIw
IjsKKworICAgICAgICBpZiAocGFyZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHNraXBVbnRp
bEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVy
YXRvci4KKyAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1Rf
SU5UIHRva2VuLgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAg
ICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247CisgICAgfQorCisgIHByaXZhdGU6CisgICAg
TGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdu
b3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBh
cnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVy
KHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3Mo
ZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7
Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRv
CisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFy
c2VEaXJlY3RpdmUodG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBl
ID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25h
bFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAg
ICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
VEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5s
b2NhdGlvbiwgYmxvY2sudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0g
J1xuJykpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4q
IHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZl
ID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNv
bmRpdGlvbmFsIGJsb2NrL2dyb3VwLAorICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwg
ZGlyZWN0aXZlcy4KKyAgICBpZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2
ZShkaXJlY3RpdmUpKQorICAgIHsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaChkaXJlY3RpdmUpCisg
ICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfTk9ORToKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRl
Zih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAg
ICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgICBwYXJzZUVs
c2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6Cisg
ICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJF
Q1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBh
cnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9F
WFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZlcnNpb24odG9r
ZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAg
IHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2tpcFVudGls
RU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxB
U1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9G
X0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2Vu
KSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4t
PnZhbHVlLCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9f
TkFNRV9SRVNFUlZFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm8g
bWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1l
ID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgewor
ICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAg
ICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAgICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAo
dG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
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+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFs
dWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgeworICAgICAgICBp
ZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tl
biogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZF
X0lGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVj
dGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYo
dG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5E
RUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYg
KGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0
IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdy
b3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNP
TkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxvY2suZm91
bmRFbHNlR3JvdXAgPSB0cnVlOworICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFs
aWRHcm91cDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOworCisgICAgLy8gV2Fy
biBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFmdGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0K
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7Cisg
ICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAg
aWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0
YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8g
Tm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVu
dGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRHcm91cCkKKyAgICB7CisgICAgICAgIC8vIERv
IG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5v
dCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGludCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4p
OworICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICBibG9jay5mb3Vu
ZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVt
cHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRp
dGlvbmFsU3RhY2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2Vu
cyBhZnRlciAjZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlz
RU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0
b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUg
IT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAg
IHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
fQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0
cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1l
Wyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tl
bikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01B
KTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAg
ICBMRUZUX1BBUkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVO
CisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUs
IHZhbHVlOworICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0g
dG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUg
PT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUg
PT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVF
OgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9
IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIFJJR0hUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQg
PSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJyknKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisKKyAgICB2YWxpZCA9IHZhbGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAv
LyBFbXB0eSBwcmFnbWEuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRfUEFS
RU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNP
R05JWkVEX1BSQUdNQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8v
IERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KKyAgICB7CisgICAgICAgIG1EaXJlY3Rp
dmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7Cisg
ICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FWFRF
TlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAg
ICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxp
ZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRl
ID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
RVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgQ09MT046CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2
YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZB
TElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZp
b3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAx
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZB
TElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0
ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRl
CisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlk
ID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9O
VU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4t
PnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lP
Tl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZh
bGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYg
KHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQor
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0
b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElO
RSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAg
ICAgRklMRV9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50
IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAg
IE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFn
bm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElO
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5W
QUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2ko
dG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVN
QkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7Cisg
ICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0
ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7Cisg
ICAgfQorfQorCitib29sIERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAg
IGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25z
dCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAg
ICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAg
Q29uZGl0aW9uYWxCbG9jayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVlOwor
ICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYgKHNraXBwaW5n
KCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBh
bm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFz
IGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAgICAgICAvLyBC
ZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1p
Z2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdl
dERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRElSRUNUSVZF
X0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAg
ICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAg
ICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAw
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFz
c2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibG9j
ay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRH
cm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVz
aF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9u
SWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXpl
ciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBh
bmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJl
c3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNz
KTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tl
bik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisg
ICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgorICAg
IGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhw
cmVzc2lvbjsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJF
Q1RJVkVfSUZERUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9JRk5ERUYpKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQo
dG9rZW4tPnZhbHVlKTsKKyAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5l
bmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNp
ZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFp
c0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsK
K30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2lu
Y2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5o
IgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFz
cyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7
CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6Cisg
ICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAg
ICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisK
KyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFy
c2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlm
ZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOwor
ICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRv
a2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0
aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiog
dG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisg
ICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5
cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBC
bG9jazsKKyAgICAgICAgYm9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdy
b3VwOworICAgICAgICBib29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFs
QmxvY2soKSA6CisgICAgICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tp
cEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAg
ICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
fTsKKyAgICBzdGQ6OnZlY3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsK
KyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAg
ICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJl
Y3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxOTI4IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjIu
ICAqLworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy
MDAwLTIwMDYsIDIwMDktMjAxMCBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuCisg
ICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg
c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3BlY2lh
bCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwor
ICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0
ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRo
YXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tl
bGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxl
dG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRo
ZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3Zl
IHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRv
biBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNw
ZWNpYWwgZXhjZXB0aW9uLgorICAgCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBC
aXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNo
YXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAi
c2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hv
dWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIg
bmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlh
YmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3Mu
CisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRl
IGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUg
bm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8q
IElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNv
biB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMiIKKworLyogU2tl
bGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQ
dXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBQdXNoIHBhcnNlcnMuICAq
LworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBV
TEwgMQorCisvKiBVc2luZyBsb2NhdGlvbnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAor
CisvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2Rl
ZmluZSB5eXBhcnNlICAgICAgICAgcHBwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgcHBs
ZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIHBwZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAg
ICAgIHBwbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgcHBjaGFyCisjZGVmaW5lIHl5ZGVi
dWcgICAgICAgICBwcGRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICBwcG5lcnJzCisKKwor
LyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXJzZXIuc2guIERPIE5PVCBFRElUIQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdn
ZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxpZiBkZWZpbmVkKF9NU0Nf
VkVSKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5j
bHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQo
X01TQ19WRVIpCit0eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKKyNkZWZpbmUgc3RydG9sbCBfc3Ry
dG9pNjQKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZ
UEU7CisjZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisj
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugeworc3RydWN0IENvbnRl
eHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIHBwOjpMZXhlciog
bGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3VsdDsKK307Cit9ICAv
LyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0
KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogcmVhc29uKTsKKworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZ
REVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2Ug
ZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVS
Uk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUg
WVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUu
ICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNl
bmRpZgorCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZ
WVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBz
byB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAq
LworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIENPTlNUX0lOVCA9IDI1OCwKKyAgICAgT1Bf
T1IgPSAyNTksCisgICAgIE9QX0FORCA9IDI2MCwKKyAgICAgT1BfTkUgPSAyNjEsCisgICAgIE9Q
X0VRID0gMjYyLAorICAgICBPUF9HRSA9IDI2MywKKyAgICAgT1BfTEUgPSAyNjQsCisgICAgIE9Q
X1JJR0hUID0gMjY1LAorICAgICBPUF9MRUZUID0gMjY2LAorICAgICBVTkFSWSA9IDI2NworICAg
fTsKKyNlbmRpZgorCisKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2ls
bCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlm
CisKKworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwor
CisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQ
RV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVk
ZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9J
TlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50
ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgorCisjaWZk
ZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Cisj
ZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7
CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisKKyNpZm5k
ZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0laRV9UIF9f
U0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNlCisjICBk
ZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBZ
WVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYgZGVmaW5l
ZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5j
bHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAg
ZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBl
bmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAor
IyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBi
eSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18K
KyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUp
IC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3Vw
cHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxp
bnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCB5eWkpCisjZWxzZQorc3Rh
dGljIGludAorWVlJRCAoeXlpKQorICAgIGludCB5eWk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIHl5
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
Ki8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7CisgIFlZU1RZ
UEUgeXl2c19hbGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3
ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNL
X0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUg
b2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRo
CisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAo
KE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAg
ICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJP
TSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4g
ICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05V
Q19fCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRp
bl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UK
KyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJ
ewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChD
b3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJ
CVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9j
YXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAg
bG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBu
ZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0
aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJv
cGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJ
CQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAor
CVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNr
ID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUg
KiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3
aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBv
ZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlM
QVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQor
CisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRP
S0VOUyAgMjcKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZp
bmUgWVlOTlRTICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmlu
ZSBZWU5SVUxFUyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2Rl
ZmluZSBZWU5TVEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1i
b2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9L
ICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJ
CQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0
ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYs
ICAgIDE5LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIElu
ZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlS
SFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAg
MCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIz
LCAgICAyNywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAg
IDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIs
ICAgIDg1LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQg
bGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXly
aHNbXSA9Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAg
ICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5
LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAg
IDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAg
MjksCisgICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywg
ICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAx
MiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAg
ICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisg
ICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgIDIxLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwg
ICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAt
MSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBz
b3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4
NywgICAgOTQsICAgIDk1LCAgICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAg
IDExMywgICAxMTYsICAgMTE5LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAg
MTM3LCAgIDE0MCwKKyAgICAgMTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgs
ICAgMTgxCit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZ
WVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRo
ZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFy
dGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAq
Y29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJD
T05TVF9JTlQiLCAiT1BfT1IiLCAiT1BfQU5EIiwgIid8JyIsCisgICInXiciLCAiJyYnIiwgIk9Q
X05FIiwgIk9QX0VRIiwgIic8JyIsICInPiciLCAiT1BfR0UiLCAiT1BfTEUiLAorICAiT1BfUklH
SFQiLCAiT1BfTEVGVCIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlVOQVJZ
IiwgIichJyIsCisgICInficiLCAiJygnIiwgIicpJyIsICIkYWNjZXB0IiwgImlucHV0IiwgImV4
cHJlc3Npb24iLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1b
WVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAg
dG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVt
W10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAx
MjQsICAgIDk0LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2Mywg
ICAyNjQsICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAz
NywgICAyNjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZ
WVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVz
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywKKyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9
OworCisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdp
dGggaW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNv
bWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJy
b3IuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAg
ICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDIsICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYs
ICAgIDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9
Cit7CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAt
LSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5V
TS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eXBhY3RbXSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEs
ICAgIDI3LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAg
NDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAg
IDExNiwgICAxMzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEw
LCAgIC0xMCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAg
LTExCit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV9pbnQ4IHl5cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZ
WVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVN
LiAgSWYKKyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVj
ZSB0aGUgcnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRv
IHdoYXQgWVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAg
Ki8KKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
dGFibGVbXSA9Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsCisgICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIs
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywK
KyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMgorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAg
ICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywK
KyAgICAgIDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAg
IDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAg
ICA5LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAor
ICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlT
VE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcK
KyAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5Cit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5l
IHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2Rl
ZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZp
bmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJv
cmxhYgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyBy
ZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhl
IG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIg
aGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhvd2V2ZXIsCisgICBZWUZB
SUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0IGlzIGZvcm1hbGx5IGRl
cHJlY2F0ZWQKKyAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwgd2hlcmUgYSBwbGFuIHRv
IHBoYXNlIGl0IG91dCBpcworICAgZGlzY3Vzc2VkLiAgKi8KKworI2RlZmluZSBZWUZBSUwJCWdv
dG8geXllcnJsYWIKKyNpZiBkZWZpbmVkIFlZRkFJTAorICAvKiBUaGlzIGlzIGhlcmUgdG8gc3Vw
cHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCisgICAgIC1XdW51c2VkLW1hY3Jvcy4g
IE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CisgICAgIHNv
bWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVt
b3ZlCisgICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxsIHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBC
aXNvbiAyLjUuICAqLworI2VuZGlmCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJy
c3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJ
CQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJ
CQkJCQkJXAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAo
VmFsdWUpOwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJ
XAorICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJ
CQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAg
ICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikp
OyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQg
KDApKQorCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKwor
LyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBS
SFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0
aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRl
ZmluZWQpLiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5k
ZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywg
TikJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAor
CSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7
CVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9j
b2x1bW47CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5s
YXN0X2xpbmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywg
TikubGFzdF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJ
CQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUg
ICA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJl
bnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhT
TE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZ
WUlEICgwKSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBs
b2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9y
aWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIg
Y29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRl
ZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZ
WUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2Mp
CQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9j
KS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xp
bmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVgg
LS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRl
ZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFN
KQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQorI2VuZGlm
CisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisK
KyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlm
CisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRl
YnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkK
KworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24p
CQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAg
ewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJ
CQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUs
IFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJ
CSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNF
RCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZv
aWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZ
U1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAg
IFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0Owor
I2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVTRSAoY29udGV4
dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBS
SU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMgZWxzZQorICBZ
WVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAg
ICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5
eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250
ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKHl5b3V0
cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0cHV0OworICAg
IGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworICAgIENv
bnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAg
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Cisg
IGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0
eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBp
dHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0
YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQor
I2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXlib3R0b20sIHl5dG9wKQorICAg
IHl5dHlwZV9pbnQxNiAqeXlib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp5eXRvcDsKKyNlbmRp
ZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0
b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90
dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisg
ICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5
eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUs
IGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250
ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Cisg
IGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwor
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1
KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5n
IHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAg
eworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAg
IHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJ
CSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAg
ICwgY29udGV4dCk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQor
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
IHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIFByZXZlbnQgd2Fy
bmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFy
c2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlm
CisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNl
CitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwor
CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1
c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBB
UlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50
Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQ
QVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNl
IChjb250ZXh0KQorICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworLyog
VGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGlj
IHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisg
ICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKyAgICBpbnQgeXluZXJy
czsKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQg
YmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsK
KworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVs
YXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVl
cy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywg
dG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50
MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZ
UEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAg
aW50IHl5cmVzdWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuOworICAvKiBUaGUgdmFyaWFi
bGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQor
ICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlFUlJP
Ul9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2Nh
dGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXlt
c2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlm
CisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkK
KworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBy
dWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4g
ICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsK
KyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7Cisg
IHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7IC8q
IENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBw
b2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0
YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0
ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQu
ICAqLworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3Rh
dGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlz
IGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwg
Y2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwor
ICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVu
cyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9
IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAg
eworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tz
LCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3Mg
KyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5j
ZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0
aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAg
Ki8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6
ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMg
dXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBh
cmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEg
bWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAq
IHNpemVvZiAoKnl5dnNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7
CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBp
Zm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxz
ZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAo
WVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAg
eXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJ
eXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNz
MSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikg
WVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0
cikKKwkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxv
YywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisjICB1bmRl
ZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVF
ICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwor
CisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsg
eXlzaXplIC0gMTsKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNy
ZWFzZWQgdG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsK
KworICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsK
KyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5
c3RhdGUpKTsKKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisg
IGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0t
LS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2
ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdl
IG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0
cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRv
a2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9O
SU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29r
YWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAg
IH0KKworICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9r
ZW4gPSBZWUVPRjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5w
dXQuXG4iKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNM
QVRFICh5eWNoYXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5
dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFj
dGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0
ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47Cisg
IGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikK
KyAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9
IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJ
Z290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOwor
ICAgIH0KKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhy
ZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykK
KyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAq
LworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxs
b2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZ
WUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOworCisgIGdv
dG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQg
YWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5
biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxh
YjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxl
IHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlM
RU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246
CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBz
ZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVk
IGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmlu
ZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBz
bWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkg
YmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKwor
CisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgeworICAgICAg
ICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19j
YXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0g
KHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4g
KHl5dnNwWygzKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxOToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyld
KSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAg
ICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAyMDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0g
PDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0pOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDIzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMjQ6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAtICh5eXZzcFsoMikgLSAoMildKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygyKSAtICgzKV0pOworICAgIH0KKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXlu
XSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAw
OworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7
CisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJt
aW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2Ug
cG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8K
KworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9L
RU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0
YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsK
KworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5v
dCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAq
LworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZ
RVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgw
LCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19h
bGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxv
YyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9j
IDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxs
b2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAg
ICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNp
emVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNp
emUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXlt
c2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkg
IH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9y
IikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAg
IGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5k
IG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJ
fQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJ
CSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsK
Kwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2Vu
IGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJs
YWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJS
T1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KK3l5ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVu
IHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwg
eXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAq
LworICBpZiAoLypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyog
RG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdn
ZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5
eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29t
bW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVk
IGRlY3JlbWVudHMgdGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5
eXBhY3RbeXlzdGF0ZV07CisgICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5
biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hl
Y2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsK
KwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBv
cCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRv
a2VuLiAgKi8KKyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAg
eXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNw
LCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNz
cDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgICorK3l5
dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKwor
ICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21l
cyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Y2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNv
bWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Ym9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWYgIWRlZmlu
ZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9y
eSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoY29u
dGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZh
bGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlF
TVBUWSkKKyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwK
KwkJIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUg
c3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlB
Qk9SVCBvciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tf
UFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAg
ICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5
eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5
b3ZlcmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsK
KyNlbmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisg
ICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMg
dXNlZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5
bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0g
MDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2gg
KHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Cisg
ICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwor
ICAgICAgICB0eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0FORDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfTkU6IHR5cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6
IHR5cGUgPSBPUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUg
PSBPUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBPUF9M
RTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9SSUdI
VDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xFRlQ7
IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAn
Xic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFr
OworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5
cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAg
ICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAn
JSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJy
ZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6
IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwor
CisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBu
ZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAw
KSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2
b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAg
IGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VY
UFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwor
fQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2Vy
KExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxl
eGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVz
c2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250
ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAg
ICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAg
ICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4
dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAx
OgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7
CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2Up
OworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJS
T1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAg
ICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9FWFBSRVNTSU9OX1BBUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KKworI2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIExleGVyOworc3RydWN0IFRva2VuOwor
CitjbGFzcyBFeHByZXNzaW9uUGFyc2VyCit7CisgIHB1YmxpYzoKKyAgICBFeHByZXNzaW9uUGFy
c2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKKworICAgIGJvb2wg
cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCk7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9E
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRXhwcmVzc2lvblBhcnNlcik7CisKKyAgICBMZXhlciog
bUxleGVyOworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFS
U0VSX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlz
IGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3Ig
ZXhwcmVzc2lvbi4KKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBS
VU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXBy
b2Nlc3NvciBleHByZXNzaW9uIHBhcnNlci4KKyovCisKKyV7CisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9U
IEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRv
LWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9u
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiTGV4
ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKK3R5cGVk
ZWYgX19pbnQ2NCBZWVNUWVBFOworI2RlZmluZSBzdHJ0b2xsIF9zdHJ0b2k2NAorI2Vsc2UKKyNp
bmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50bWF4X3QgWVlTVFlQRTsKKyNlbmRpZiAgLy8g
X01TQ19WRVIKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9J
U19ERUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6
VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorJX0K
KworJWRlZmluZSBhcGkucHVyZQorJW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29u
dGV4dCAqY29udGV4dH0KKyVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0
aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2
b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKyV9CisK
KyV0b2tlbiBDT05TVF9JTlQKKyVsZWZ0IE9QX09SCislbGVmdCBPUF9BTkQKKyVsZWZ0ICd8Jwor
JWxlZnQgJ14nCislbGVmdCAnJicKKyVsZWZ0IE9QX0VRIE9QX05FCislbGVmdCAnPCcgJz4nIE9Q
X0xFIE9QX0dFCislbGVmdCBPUF9MRUZUIE9QX1JJR0hUCislbGVmdCAnKycgJy0nCislbGVmdCAn
KicgJy8nICclJworJXJpZ2h0IFVOQVJZCisKKyUlCisKK2lucHV0CisgICAgOiBleHByZXNzaW9u
IHsKKyAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigkMSk7Cisg
ICAgICAgIFlZQUNDRVBUOworICAgIH0KKzsKKworZXhwcmVzc2lvbgorICAgIDogQ09OU1RfSU5U
CisgICAgfCBleHByZXNzaW9uIE9QX09SIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIHx8
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfQU5EIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxICYmICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ3wnIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxIHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnXicgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgXiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9u
ICcmJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAmICQzOworICAgIH0KKyAgICB8IGV4
cHJlc3Npb24gT1BfTkUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgIT0gJDM7CisgICAg
fQorICAgIHwgZXhwcmVzc2lvbiBPUF9FUSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA9
PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIE9QX0dFIGV4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxID49ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gT1BfTEUgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgPD0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPicg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPiAkMzsKKyAgICB9CisgICAgfCBleHByZXNz
aW9uICc8JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8ICQzOworICAgIH0KKyAgICB8
IGV4cHJlc3Npb24gT1BfUklHSFQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj4gJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBPUF9MRUZUIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxIDw8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJy0nIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxIC0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnKycgZXhwcmVz
c2lvbiB7CisgICAgICAgICQkID0gJDEgKyAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcl
JyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8
PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElW
SVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgJSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IGV4cHJlc3Npb24gJy8nIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgewor
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFt
IDw8ICQxIDw8ICIgLyAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0
cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZ
WUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAvICQzOworICAg
ICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnKicgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgKiAkMzsKKyAgICB9CisgICAgfCAnIScgZXhwcmVzc2lvbiAlcHJlYyBVTkFSWSB7
CisgICAgICAgICQkID0gISAkMjsKKyAgICB9CisgICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBV
TkFSWSB7CisgICAgICAgICQkID0gfiAkMjsKKyAgICB9CisgICAgfCAnLScgZXhwcmVzc2lvbiAl
cHJlYyBVTkFSWSB7CisgICAgICAgICQkID0gLSAkMjsKKyAgICB9CisgICAgfCAnKycgZXhwcmVz
c2lvbiAlcHJlYyBVTkFSWSB7CisgICAgICAgICQkID0gKyAkMjsKKyAgICB9CisgICAgfCAnKCcg
ZXhwcmVzc2lvbiAnKScgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKzsKKworJSUKKworaW50
IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBl
ID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0
Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6
CisgICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDAp
OworICAgICAgICB0eXBlID0gQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBlID0gT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0FORDogdHlwZSA9IE9QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTkU6IHR5cGUgPSBPUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
RVE6IHR5cGUgPSBPUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5
cGUgPSBPUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBP
UF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBPUF9S
SUdIVDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IE9QX0xF
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
ICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAg
KyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvSW5wdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAkocmV2aXNpb24gMTIy
MjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvSW5wdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5j
bHVkZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5j
bHVkZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAg
OiBtQ291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChs
ZW5ndGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9y
KGtFcnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQo
KSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0g
ICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJ
bnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykK
IHsKLSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBt
Q291bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNv
dW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAg
ICAgaW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1
c2hfYmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAK
LWludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFk
KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQg
c3RhcnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZl
ciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUg
KChtSW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5S
ZWFkID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRl
eCA8IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAg
aWYgKGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0
ZUJsb2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVk
RU9GOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IHNpemUgPSBt
TGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUg
PSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBt
U3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAgICAg
ICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKIAotICAg
ICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVh
Y2hlZCB0aGUgZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2MuY0lu
ZGV4ID09IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAgIGNh
c2Uga1N0YXRlSW5pdGlhbDoKLSAgICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChwZWVrQ2hhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQg
Jy8nLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAg
ICAgICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAgICAg
ICAgICAgbVN0YXRlID0ga1N0YXRlQmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8v
IE5vdCBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0
YXRlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgbVN0
YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgY2FzZSBrU3RhdGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9
PSAnKicgJiYgKHBlZWtDaGFyKCkgPT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnZXRDaGFyKCk7ICAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQr
K10gPSAnICc7ICAvLyBSZXBsYWNlIGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAgICAg
ICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMg
PT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFrcyBh
cmUgbmV2ZXIgc2tpcHBlZC4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
KyttUmVhZExvYy5zSW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwogICAg
ICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6OmdldENo
YXIoKQotewotICAgIGlmIChlb2YoKSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIqIHN0
ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAgIC8v
IFN3aXRjaCB0byBuZXh0IHN0cmluZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVhZC4K
LSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIg
cmVhZCBmcm9tIGVtcHR5IHN0cmluZy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgIGlm
ICgoKGxlbmd0aCA8IDApICYmIChzdHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAoKGxl
bmd0aCA+IDApICYmIChtU2l6ZSA9PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0U3Ry
aW5nKCk7Ci0KLSAgICByZXR1cm4gYzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17Ci0g
ICAgLy8gU2F2ZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9IG1J
bmRleDsKLSAgICBpbnQgc2l6ZSA9IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwotCi0g
ICAgLy8gUmVzdG9yZSByZWFkIHBvc2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAgIG1T
aXplID0gc2l6ZTsKLSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0
U3RyaW5nKCkKLXsKLSAgICBBU1NFUlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXplID0g
MDsKLSAgICBkbwotICAgIHsKLSAgICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigp
ICYmIGlzU3RyaW5nRW1wdHkobUluZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1w
dHkoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBjb25z
dCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xl
bmd0aChtSW5kZXgpOwotICAgIHJldHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwgMCkg
JiYgKHN0clswXSA9PSAnXDAnKSk7Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGludCBp
bmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVuZ3Ro
ID8gbUxlbmd0aFtpbmRleF0gOiAtMTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5h
bWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCShy
ZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDY2ICs3LDQwIEBA
CiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNl
IHBwCiB7CiAKLS8vIFJlYWRzIHRoZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1
ZmZlci4KLS8vIFN0cmlwcyBjb21tZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3Ig
TGV4ZXIuCiBjbGFzcyBJbnB1dAogewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1
dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3Ro
W10pOwogCi0gICAgZW51bSBFcnJvcgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAg
ICAga0Vycm9yVW5leHBlY3RlZEVPRgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7
IHJldHVybiBtRXJyb3I7IH0KKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7
IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3Ry
aW5nW2luZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
TGVuZ3RoW2luZGV4XTsgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1
cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1JbmRleDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0g
ICAgYm9vbCBlb2YoKSBjb25zdDsKLQotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFj
dGVycyBpbnRvIGJ1Zi4KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBy
ZWFkLgotICAgIC8vIEl0IHJlcGxhY2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0
IHJlYWRzIG9ubHkgb25lIHN0cmluZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhl
ciBoYXMgb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9y
IG1lYW5pbmdmdWwgZGlhZ25vc3RpYyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYs
IGludCBidWZTaXplKTsKKyAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAot
cHJpdmF0ZToKLSAgICBlbnVtIFN0YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAg
ICAgICBrU3RhdGVJbml0aWFsLAotICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAg
a1N0YXRlQmxvY2tDb21tZW50Ci0gICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmlu
ZyBpbmRleDsKKyAgICAgICAgaW50IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQg
Z2V0Q2hhcigpOwotICAgIGludCBwZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1
ZmZlciB0byB0aGUgbmV4dCBub24tZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVk
IHdoZW4gdGhlIGN1cnJlbnQgc3RyaW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hU
b05leHRTdHJpbmcoKTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBp
cyBlbXB0eS4KLSAgICBib29sIGlzU3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1
cm4gdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdh
dGl2ZSB2YWx1ZSBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xl
bmd0aChpbnQgaW5kZXgpOworICAgICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgo
MCkgeyB9CisgICAgfTsKKyAgICBjb25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0
dXJuIG1SZWFkTG9jOyB9CiAKKyAgcHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNv
dW50OwogICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxl
bmd0aDsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7CiAKLSAgICAvLyBDdXJyZW50IHJl
YWQgcG9zaXRpb24uCi0gICAgaW50IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVu
dGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBh
bHJlYWR5IHNjYW5uZWQuCi0KLSAgICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBF
cnJvciBtRXJyb3I7Ci0gICAgU3RhdGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwog
fTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3Bh
Y2UgcHAKK3sKKworTGV4ZXI6On5MZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMK
ICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TGV4ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9MRVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOwor
CitjbGFzcyBMZXhlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRy
dWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCShyZXZpc2lvbiAxMjIyMzkp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMzkgKzYsMTcgQEAKIAogI2luY2x1ZGUg
Ik1hY3JvLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGxfdXRpbHMu
aCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotTWFjcm86Ok1hY3Jv
KFR5cGUgdHlwZSwKLSAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAg
ICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcmVw
bGFjZW1lbnRzKQotICAgIDogbVR5cGUodHlwZSksCi0gICAgICBtTmFtZShuYW1lKSwKLSAgICAg
IG1QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLAotICAgICAgbVJlcGxhY2VtZW50cyhyZXBsYWNlbWVu
dHMpCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotfQot
Ci1NYWNybzo6fk1hY3JvKCkKLXsKLSAgICBkZWxldGUgbU5hbWU7Ci0KLSAgICBpZiAobVBhcmFt
ZXRlcnMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1QYXJhbWV0ZXJzLT5iZWdpbigp
LCBtUGFyYW1ldGVycy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1QYXJhbWV0
ZXJzOwotICAgIH0KLQotICAgIGlmIChtUmVwbGFjZW1lbnRzKQotICAgIHsKLSAgICAgICAgc3Rk
Ojpmb3JfZWFjaChtUmVwbGFjZW1lbnRzLT5iZWdpbigpLCBtUmVwbGFjZW1lbnRzLT5lbmQoKSwg
RGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVJlcGxhY2VtZW50czsKLSAgICB9CisgICAgcmV0
dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90aGVyLm5h
bWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMpICYmCisg
ICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKIH0KIAogfSAg
Ly8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw0NSArNywzOCBAQAogI2lmbmRl
ZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX01BQ1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2lu
Y2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVk
ZSAiVG9rZW4uaCIKLQogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9r
ZW47CisKK3N0cnVjdCBNYWNybwogewotICBwdWJsaWM6CiAgICAgZW51bSBUeXBlCiAgICAgewog
ICAgICAgICBrVHlwZU9iaiwKICAgICAgICAga1R5cGVGdW5jCiAgICAgfTsKKyAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZh
bHNlKSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFs
cyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9m
IHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3Rk
OjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAg
ICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5n
KiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZl
Y3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29u
c3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVu
dHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7
Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZl
Y3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAg
Ym9vbCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUg
dHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsK
KyAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFw
PHN0ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVzcGFjZSBwcAorI2Vu
ZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
b0V4cGFuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvRXhwYW5kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKwor
Y2xhc3MgVG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgoreworIHB1YmxpYzoKKyAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsKKworICAgIFRva2VuTGV4ZXIoVG9rZW5W
ZWN0b3IqIHRva2VucykKKyAgICB7CisgICAgICAgIHRva2Vucy0+c3dhcChtVG9rZW5zKTsKKyAg
ICAgICAgbUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGxleChUb2tlbiogdG9rZW4pCisgICAgeworICAgICAgICBpZiAobUl0ZXIgPT0gbVRva2Vucy5l
bmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdG9rZW4tPnJlc2V0KCk7CisgICAgICAgICAg
ICB0b2tlbi0+dHlwZSA9IFRva2VuOjpMQVNUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7CisgICAgICAgIH0KKyAgICB9
CisKKyBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbkxleGVy
KTsKKworICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7CisgICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIG1JdGVyOworfTsKKworTWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcihMZXhlciog
bGV4ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6
CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgIG1EaWFn
bm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworTWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5k
ZXIoKQoreworICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpKSBwb3BNYWNybygpOwor
fQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgd2hpbGUg
KHRydWUpCisgICAgeworICAgICAgICBnZXRUb2tlbih0b2tlbik7CisKKyAgICAgICAgaWYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgaWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZp
bmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNvbnN0IE1hY3JvJiBtYWNybyA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4cGFuZGVkLCBpdCBpcyBuZXZl
ciBleHBhbmRlZC4KKyAgICAgICAgICAgIHRva2VuLT5zZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgobWFjcm8udHlw
ZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBt
YWNybyBuYW1lIGlzIG5vdCBhICcoJywKKyAgICAgICAgICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxk
IG5vdCBiZSBleHBhbmRlZC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFu
ZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4pCit7CisgICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0
KCkpCisgICAgeworICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVUb2tlbjsKKyAgICAgICAgbVJl
c2VydmVUb2tlbi5yZXNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmly
c3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4KKyAgICB3aGlsZSAoIW1Db250ZXh0U3Rh
Y2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1wdHkoKSkKKyAgICB7CisgICAg
ICAgIHBvcE1hY3JvKCk7CisgICAgfQorCisgICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkp
CisgICAgeworICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNrLmJhY2soKS0+Z2V0KCk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4p
Cit7CisgICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBNYWNy
b0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICAgICAgY29udGV4
dC0+dW5nZXQoKTsKKyAgICAgICAgYXNzZXJ0KGNvbnRleHQtPmluZGV4ID49IDApOworICAgICAg
ICBhc3NlcnQoY29udGV4dC0+cmVwbGFjZW1lbnRzW2NvbnRleHQtPmluZGV4XSA9PSB0b2tlbik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydCghbVJlc2VydmVUb2tlbi5n
ZXQoKSk7CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQobmV3IFRva2VuKHRva2VuKSk7Cisg
ICAgfQorfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKCkKK3sK
KyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgYm9vbCBscGFy
ZW4gPSB0b2tlbi50eXBlID09ICcoJzsKKyAgICB1bmdldFRva2VuKHRva2VuKTsKKworICAgIHJl
dHVybiBscGFyZW47Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKGNvbnN0IE1h
Y3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpCit7CisgICAgYXNzZXJ0KCFtYWNy
by5kaXNhYmxlZCk7CisgICAgYXNzZXJ0KCFpZGVudGlmaWVyLmV4cGFuc2lvbkRpc2FibGVkKCkp
OworICAgIGFzc2VydChpZGVudGlmaWVyLnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAg
IGFzc2VydChpZGVudGlmaWVyLnZhbHVlID09IG1hY3JvLm5hbWUpOworCisgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKyAgICBpZiAoIWV4cGFuZE1hY3JvKG1hY3JvLCBpZGVu
dGlmaWVyLCAmcmVwbGFjZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
TWFjcm8gaXMgZGlzYWJsZWQgZm9yIGV4cGFuc2lvbiB1bnRpbCBpdCBpcyBwb3BwZWQgb2ZmIHRo
ZSBzdGFjay4KKyAgICBtYWNyby5kaXNhYmxlZCA9IHRydWU7CisKKyAgICBNYWNyb0NvbnRleHQq
IGNvbnRleHQgPSBuZXcgTWFjcm9Db250ZXh0OworICAgIGNvbnRleHQtPm1hY3JvID0gJm1hY3Jv
OworICAgIGNvbnRleHQtPnJlcGxhY2VtZW50cy5zd2FwKHJlcGxhY2VtZW50cyk7CisgICAgbUNv
bnRleHRTdGFjay5wdXNoX2JhY2soY29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgTWFjcm9FeHBhbmRlcjo6cG9wTWFjcm8oKQoreworICAgIGFzc2VydCghbUNvbnRleHRTdGFj
ay5lbXB0eSgpKTsKKworICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2su
YmFjaygpOworICAgIG1Db250ZXh0U3RhY2sucG9wX2JhY2soKTsKKworICAgIGFzc2VydChjb250
ZXh0LT5lbXB0eSgpKTsKKyAgICBhc3NlcnQoY29udGV4dC0+bWFjcm8tPmRpc2FibGVkKTsKKyAg
ICBjb250ZXh0LT5tYWNyby0+ZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBkZWxldGUgY29udGV4dDsK
K30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyhjb25zdCBNYWNybyYgbWFjcm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJl
cGxhY2VtZW50cykKK3sKKyAgICByZXBsYWNlbWVudHMtPmNsZWFyKCk7CisgICAgaWYgKG1hY3Jv
LnR5cGUgPT0gTWFjcm86OmtUeXBlT2JqKQorICAgIHsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5h
c3NpZ24obWFjcm8ucmVwbGFjZW1lbnRzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5lbmQoKSk7CisKKyAgICAgICAgaWYgKG1hY3JvLnBy
ZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrTGluZSA9ICJfX0xJTkVfXyI7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0ZpbGUgPSAiX19GSUxFX18iOworCisgICAgICAgICAgICBhc3NlcnQocmVwbGFjZW1lbnRz
LT5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+
ZnJvbnQoKTsKKyAgICAgICAgICAgIGlmIChtYWNyby5uYW1lID09IGtMaW5lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAg
ICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5saW5lOworICAgICAgICAgICAg
ICAgIHJlcGwudmFsdWUgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtYWNyby5uYW1lID09IGtGaWxlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBzdHJlYW0g
PDwgaWRlbnRpZmllci5sb2NhdGlvbi5maWxlOworICAgICAgICAgICAgICAgIHJlcGwudmFsdWUg
PSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7
CisgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiBhcmdzOworICAgICAgICBhcmdzLnJlc2Vy
dmUobWFjcm8ucGFyYW1ldGVycy5zaXplKCkpOworICAgICAgICBpZiAoIWNvbGxlY3RNYWNyb0Fy
Z3MobWFjcm8sIGlkZW50aWZpZXIsICZhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXBsYWNlTWFjcm9QYXJhbXMobWFjcm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUo
KTsgKytpKQorICAgIHsKKyAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkp
OworICAgICAgICBpZiAoaSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmly
c3QgdG9rZW4gaW4gdGhlIHJlcGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAg
ICAgICAgICAgIC8vIHByb3BlcnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAg
ICAgICByZXBsLnNldEF0U3RhcnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOwor
ICAgICAgICAgICAgcmVwbC5zZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5n
U3BhY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIu
bG9jYXRpb247CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5k
ZXI6OmNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykK
K3sKKyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0
b2tlbi50eXBlID09ICcoJyk7CisKKyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7Cisg
ICAgZm9yIChpbnQgb3BlblBhcmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAg
ICAgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tl
bjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7
CisgICAgICAgICAgICAvLyBEbyBub3QgbG9zZSBFT0YgdG9rZW4uCisgICAgICAgICAgICB1bmdl
dFRva2VuKHRva2VuKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNBcmcgPSBmYWxzZTsgLy8gVHJ1ZSBpZiB0b2tlbiBpcyBwYXJ0IG9mIHRo
ZSBjdXJyZW50IGFyZ3VtZW50LgorICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICsrb3BlblBhcmVuczsKKyAgICAg
ICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
JyknOgorICAgICAgICAgICAgLS1vcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSBvcGVu
UGFyZW5zICE9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICcsJzoKKyAg
ICAgICAgICAgIC8vIFRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGNv
bW1hIHRva2VucywgYnV0CisgICAgICAgICAgICAvLyB0aGUgY29tbWEgdG9rZW5zIGJldHdlZW4g
bWF0Y2hpbmcgaW5uZXIgcGFyZW50aGVzZXMgZG8gbm90CisgICAgICAgICAgICAvLyBzZXBlcmF0
ZSBhcmd1bWVudHMuCisgICAgICAgICAgICBpZiAob3BlblBhcmVucyA9PSAxKSBhcmdzLT5wdXNo
X2JhY2soTWFjcm9BcmcoKSk7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpc0Fy
ZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNB
cmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5iYWNrKCk7
CisgICAgICAgICAgICAvLyBJbml0aWFsIHdoaXRlc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGFy
Z3VtZW50LgorICAgICAgICAgICAgaWYgKGFyZy5lbXB0eSgpKSB0b2tlbi5zZXRIYXNMZWFkaW5n
U3BhY2UoZmFsc2UpOworICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb25zdCBNYWNybzo6UGFyYW1ldGVycyYgcGFyYW1zID0gbWFjcm8u
cGFyYW1ldGVyczsKKyAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbXB0eSBhcmd1bWVudCwg
aXQgaXMgZXF1aXZhbGVudCB0byBubyBhcmd1bWVudC4KKyAgICBpZiAocGFyYW1zLmVtcHR5KCkg
JiYgKGFyZ3MtPnNpemUoKSA9PSAxKSAmJiBhcmdzLT5mcm9udCgpLmVtcHR5KCkpCisgICAgewor
ICAgICAgICBhcmdzLT5jbGVhcigpOworICAgIH0KKyAgICAvLyBWYWxpZGF0ZSB0aGUgbnVtYmVy
IG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCisg
ICAgeworICAgICAgICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5w
YXJhbWV0ZXJzLnNpemUoKSA/CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZF
V19BUkdTIDoKKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOwor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChpZCwgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRl
bnRpZmllci52YWx1ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQ
cmUtZXhwYW5kIGVhY2ggYXJndW1lbnQgYmVmb3JlIHN1YnN0aXR1dGlvbi4KKyAgICAvLyBUaGlz
IHN0ZXAgZXhwYW5kcyBlYWNoIGFyZ3VtZW50IGluZGl2aWR1YWxseSBiZWZvcmUgdGhleSBhcmUK
KyAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBtYWNybyBib2R5LgorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJncy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJn
ID0gYXJncy0+YXQoaSk7CisgICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAg
IE1hY3JvRXhwYW5kZXIgZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7
CisKKyAgICAgICAgYXJnLmNsZWFyKCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOwor
ICAgICAgICB3aGlsZSAodG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgo
JnRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBN
YWNyb0V4cGFuZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFj
cm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYWNyby5yZXBsYWNlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBjb25z
dCBUb2tlbiYgcmVwbCA9IG1hY3JvLnJlcGxhY2VtZW50c1tpXTsKKyAgICAgICAgaWYgKHJlcGwu
dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBPcHRpbWl6ZSB0aGlzLgorICAgICAgICAvLyBU
aGVyZSBpcyBubyBuZWVkIHRvIHNlYXJjaCBmb3IgbWFjcm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCisg
ICAgICAgIC8vIFRoZSBwYXJhbSBpbmRleCBjYW4gYmUgY2FjaGVkIHdpdGggdGhlIHJlcGxhY2Vt
ZW50IHRva2VuLgorICAgICAgICBNYWNybzo6UGFyYW1ldGVyczo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHN0ZDo6ZmluZCgKKyAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFj
cm8ucGFyYW1ldGVycy5lbmQoKSwgcmVwbC52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1h
Y3JvLnBhcmFtZXRlcnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50
cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdp
bigpLCBpdGVyKTsKKyAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107Cisg
ICAgICAgIGlmIChhcmcuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IGlSZXBsID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7
CisgICAgICAgIHJlcGxhY2VtZW50cy0+aW5zZXJ0KHJlcGxhY2VtZW50cy0+ZW5kKCksIGFyZy5i
ZWdpbigpLCBhcmcuZW5kKCkpOworICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5o
ZXJpdHMgcGFkZGluZyBwcm9wZXJ0aWVzIGZyb20KKyAgICAgICAgLy8gbWFjcm8gcmVwbGFjZW1l
bnQgdG9rZW4uCisgICAgICAgIHJlcGxhY2VtZW50cy0+YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdT
cGFjZShyZXBsLmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyb0V4cGFuZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAi
cHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitj
bGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNy
b0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKKworICAgIHZvaWQgZ2V0VG9rZW4oVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKKyAg
ICBib29sIGlzTmV4dFRva2VuTGVmdFBhcmVuKCk7CisKKyAgICBib29sIHB1c2hNYWNybyhjb25z
dCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHBvcE1h
Y3JvKCk7CisKKyAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxUb2tlbj4gTWFjcm9Bcmc7CisgICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNv
bnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4m
IGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3Jv
QXJnPiogYXJncyk7CisgICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3Jv
QXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tl
bj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0CisgICAgeworICAg
ICAgICBjb25zdCBNYWNybyogbWFjcm87CisgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAg
c3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKworICAgICAgICBNYWNyb0NvbnRleHQo
KSA6IG1hY3JvKDApLCBpbmRleCgwKSB7IH0KKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIGluZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7IH0KKyAgICAgICAgY29uc3QgVG9r
ZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRleCsrXTsgfQorICAgICAgICB2b2lk
IHVuZ2V0KCkgeyAtLWluZGV4OyB9CisgICAgfTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAg
TWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworCisg
ICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKKyAgICBzdGQ6OnZlY3RvcjxN
YWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFi
cwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYsNDcgKzYsMTA4IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CiAK
LSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNs
dWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRp
cmVjdGl2ZVBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBh
bmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAKIG5h
bWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQo
TlVMTCkKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCiB7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2VuaXplciB0b2tlbml6ZXI7
CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVy
IG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFn
LAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxl
cikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAgdG9rZW5pemVyKGRpYWcp
LAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBk
aXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2Vy
LCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1ByZXByb2Nlc3Nvcjo6UHJl
cHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpCit7CisgICAgbUltcGwg
PSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7CiB9
CiAKIFByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0
OworICAgIGRlbGV0ZSBtSW1wbDsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewot
ICAgIG1Db250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7
Citib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lv
biA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBtYWNyb3MuCisgICAg
cHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fRklM
RV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9u
KTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKworICAgIHJldHVybiBtSW1wbC0+
dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAotYm9vbCBQcmVwcm9j
ZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgbGVuZ3RoW10pCit2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3Qg
Y2hhciogbmFtZSwgaW50IHZhbHVlKQogewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAmJiAoc3Ry
aW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAg
ICBzdHJlYW0gPDwgdmFsdWU7CiAKLSAgICByZXNldCgpOworICAgIFRva2VuIHRva2VuOworICAg
IHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFt
LnN0cigpOworCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7
CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gbmFt
ZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsKIAotICAgIHJldHVy
biBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAg
ICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6
OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0
ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0g
ICAgbVRva2Vucy5jbGVhcigpOworICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdo
aWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxl
eCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5n
IHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNv
bXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAg
ICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX05VTUJFUjoKKyAgICAg
ICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05V
TUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
VG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0gIC8vIG5h
bWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1ByZXByb2Nlc3Nvci5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNywzNCArNyw0MSBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9D
RVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9r
ZW4uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3Mg
Q29udGV4dDsKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK3N0
cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOwogCiBjbGFzcyBQcmVwcm9jZXNz
b3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRs
ZXIpOwogICAgIH5QcmVwcm9jZXNzb3IoKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNv
dW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBs
ZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50
ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3Ry
aW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFz
c3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVl
IG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAv
LyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMg
b2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBj
b250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3Ig
YSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBp
cyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1k
ZWZpbmVkIG1hY3JvLgorICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwg
aW50IHZhbHVlKTsKIAotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tl
biogdG9rZW4pOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
ZXByb2Nlc3Nvcik7CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nv
cik7CiAKLSAgICAvLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0
KCk7Ci0KLSAgICBDb250ZXh0KiBtQ29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAg
Ly8gT3V0cHV0LgorICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOwogfTsKIAogfSAgLy8gbmFt
ZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvU291cmNlTG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNv
dXJjZUxvY2F0aW9uCit7CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkg
eyB9CisgICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkg
eyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0g
b3RoZXIubGluZSk7CisgICAgfQorCisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9Owor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25z
dCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1NPVVJDRV9MT0NBVElPTl9IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNiw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUg
InRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2
OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8
PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46Okxv
Y2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRv
a2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8
IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0g
MDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsK
IH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUs
IGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAg
IGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAo
dHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3Mp
ICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAg
ICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxv
Y2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxv
Y2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0
ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sK
KyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAg
IGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRv
a2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2Fi
bGUpCisgICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAg
ICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3
aXRjaCAodG9rZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAg
ICAgY2FzZSBGTE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAg
b3V0IDw8ICoodG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAg
IG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsK
IH0KLX0gIC8vIG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4u
aAkod29ya2luZyBjb3B5KQpAQCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hf
CiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0
b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxv
Y2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2Vu
CiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9j
YXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9p
ZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKLQot
ICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9j
YXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOwotCi0g
ICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtTG9jYXRpb247IH0KLSAgICBp
bnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcq
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOwotCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwot
ICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIGVudW0gVHlwZQor
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
b29sIGRpc2FibGUpOworCisgICAgaW50IHR5cGU7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOwor
ICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsK
IAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tl
blZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4g
bGhzLmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2Vu
JiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7
Cit9CiAKIGV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQs
IGNvbnN0IFRva2VuJiB0b2tlbik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4u
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM0NSBAQAorI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwi
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9Ub2tlbml6ZXIu
Y3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2Fs
IHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNk
ZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJT
SU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJz
dCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBp
c3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXgg
aW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5l
IEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBz
eXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05f
XykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmlu
ZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5
b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLwor
I2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
MQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9p
bnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50
MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxz
ZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50
MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBD
OTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01J
TgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVm
IElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNl
bmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAo
LTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01B
WCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5l
IElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01B
WAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisj
aWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQor
I2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAg
ICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01B
WCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgRkxFWElO
VF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNs
YXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJ
LyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVm
aW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9D
T05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2Nw
bHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QK
KyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1v
Zi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBu
ZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIg
Zm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2
ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBj
aGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJ
KGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogQW4gb3BhcXVlIHBv
aW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8q
IEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVs
b3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUg
eXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXll
eHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmlu
ZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5
X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8g
cmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRp
c2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmlu
aXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAy
ICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0
aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3Rh
dGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CisgKiBjb21wYXRpYmlsaXR5LgorICov
CisjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKKyNkZWZpbmUgWVlT
VEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVu
IHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0Zf
QlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBw
cm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQo
eXlpbiAseXlzY2FubmVyICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisv
KiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQor
I2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0ZSBidWYgbXVz
dCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUg
bWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9T
SVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKK3R5cGVk
ZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2VuZGlmCisKKyNk
ZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklM
RSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1Nf
TElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQg
Y2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhu
KSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0
LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZ
X0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJ
WVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAor
CXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRf
cHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlm
CisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lu
cHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFy
ICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKwor
CS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9y
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJ
LyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGlu
ZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hl
dGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAor
CSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0
IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyog
V2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5k
CisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNl
IGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0
Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2lu
dGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBi
ZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUg
b24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRf
Ym9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAg
ICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyog
V2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhl
CisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9i
dWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZG
RVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGls
bCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZ
X0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFk
aW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwg
aGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICog
cG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBF
T0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSks
IHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2lu
dGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9F
T0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRF
ICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBp
biBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVz
IGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
PyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3Jv
LCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Cisg
KiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4K
KyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3Rh
Y2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5w
dXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JV
RkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAo
WVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBw
cHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQg
cHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQg
cHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVm
ZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3Qg
Y2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxs
b2MgKHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZv
aWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQg
KiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVh
dGVfYnVmZmVyCisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBc
CisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2Jv
bCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5l
IHBwd3JhcChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBZWV9DSEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5
dGV4dF9wdHIgeXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3Ry
eV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhh
cyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0g
c2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXln
LT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9i
cCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwK
Kwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKKyNk
ZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4g
dGhpcyBzY2FubmVyLAorICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1
Y3QgeXlfdHJhbnNfaW5mbworCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50
MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
ODRdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAz
NiwgICAzNCwgICAzNSwgICAzNSwgICAzMywKKyAgICAgICAgNywgICAzMywgICAzMywgICAzMywg
ICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAgOSwKKyAgICAgICAgOSwgICAzMywgICAz
MywgICAzMywgICAgOCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKKyAgICAgICAgNCwg
ICAzNCwgICAzNSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKKyAg
ICAgICAxMywgICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwg
ICAxMSwKKyAgICAgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAx
NSwgICAgOCwgICAzMSwKKyAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwg
ICAxMSwgICAxMCwgICAxMSwgICAgMSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAg
OSwgICAyOCwgICAyOSwgICAgMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAxMCwgICAgMAor
ICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAg
eyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDIsICAgIDMsCisgICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDUs
ICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCisgICAgICAgIDksICAg
MTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCisgICAg
ICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAg
MTgsCisgICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjIsICAgMjEsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCisgICAgICAgIDksICAgIDEsICAgIDksICAg
MjUsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAgICAyMiwgICAy
MSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
NCwKKyAgICAgICAyMywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAgIDAsCisgICAg
ICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsCisgICAgICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKKyAg
ICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1
OSwgIDE0NSwgIDEyOCwKKyAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwg
ICAyNSwgICAzMCwgICAyOSwgICAzNiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAg
MCwgICAxNiwgICA0NywgICAgMCwgIDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3MywgIDE1OSwg
IDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAgIDE1OSwgIDE1
OSwgICA2MSwgIDE1OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKKyAgICAg
ICA5NSwgICA2OCwgICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1
OSwKKyAgICAgIDE1OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwg
IDExMCwgICAgMCwKKyAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1
OSwgIDEwMSwgICA5NywgIDExMiwKKyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwg
IDE0NSwgIDE1MCwgIDE1MgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfZGVmWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgMjAsICAg
ODMsICAgODMsICAgODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCisgICAg
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAs
ICAgMjAsICAgNDcsCisgICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMs
ICAgODMsICAgNDMsICAgNDMsICAgNjcsICAgODcsCisgICAgICAgNDcsICAgNTAsICAgODMsICAg
NTEsICAgODgsICAgODMsICAgODMsICAgODMsICAgNjksICAgNzIsCisgICAgICAgODMsICAgODMs
ICAgIDAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKKyAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAz
MCwgICAyOSwgICAzMCwKKyAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwg
ICA0MSwgICA3NywgICA0NCwgICA0MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0
MywgICA0MywgICA0MywgICA0NiwgICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0OCwgICA0OSwg
ICA1NCwgICA1NSwgICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAgICA1MywgICA1
MywgICA1MywgICA1NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKKyAgICAg
ICA0OSwgICA0OSwgICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1
MCwKKyAgICAgICA1MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwg
ICA3MSwgICA3MSwKKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwKKworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUw
LCAgIDczLCAgIDczLCAgIDgzLCAgIDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDY3LCAg
IDY3LCAgIDY3LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAgIDc4LCAgIDc4
LCAgIDgzLCAgIDgzLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAorICAgICAg
IDM1LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgy
LAorICAgICAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAg
IDY0LCAgIDY0LAorICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1
LCAgIDgzLCAgICA1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9jaGtbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCisgICAg
ICAgMTMsICAgMTYsICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAg
MTYsCisgICAgICAgMjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTks
ICAgMjAsICAgNTQsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAg
MjAsICAgMjAsICAgMjAsICAgMjAsCisgICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQs
ICAgMjcsICAgNzMsICAgNzMsICAgNzMsICAgMjEsCisgICAgICAgNDksICAgNDksICAgMjcsICAg
NDMsICAgMzIsICAgNDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCisgICAgICAgNTIsICAgNDMs
ICAgNDMsICAgNDMsICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCisgICAgICAg
NTIsICAgNTIsICAgNzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAs
CisKKyAgICAgICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwg
ICA3OSwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3
OCwgICA3OCwgICAyMywgICA2NywKKyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwg
ICA2OSwgICA2OSwgICA3MiwgICA3MiwgICAxNSwKKyAgICAgICAxMiwgICA3MiwgICA3MiwgICA3
MiwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKKyAgICAgICA4
NywgICAgNywgICA4NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAg
IH0gOworCisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisj
ZGVmaW5lIFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9y
ZSgpIHl5bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAor
I2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXBy
b2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworI2luY2x1ZGUgIlRva2VuaXplci5oIgor
CisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVm
aW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0
YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlz
c2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0
eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5
eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUg
eXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAg
ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5
eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsg
XAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUo
MCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
cHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNj
YW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5w
dXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9j
LT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9j
LT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5
bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmlu
ZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEt
PmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUg
Q09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0
KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4g
Ki8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRv
dWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8q
IFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9u
LXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAg
c2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAq
LworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNr
LiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBh
cyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFy
czsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlf
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
CisKK2ludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRf
dGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIg
dGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgor
ICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNl
bHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNl
bmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgor
CisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9f
SU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAg
d2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlf
UkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBy
dWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyog
VGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNv
bnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8g
ZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5w
dXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwg
b3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZ
X0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlp
bnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYm
IFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiAp
IFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVm
W24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkg
XAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBc
CisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJ
CXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBm
ZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBc
CisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBc
CisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4p
OyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIg
cmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICog
d2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhh
dCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNo
YWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVy
bWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBi
eSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJU
X1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8q
IFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmlu
ZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisj
ZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3Rv
dHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAt
IGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICov
CisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGlu
dCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBF
ICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wg
aW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxU
WVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9E
RUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUs
IGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZu
ZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyog
Q29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJF
QUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NF
VFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3
aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0
YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2Jw
OworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAg
ICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisK
KwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRl
ZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+
eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICov
CisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCAp
CisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJ
CQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0
LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMg
dG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1
cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlf
Q0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
cyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5
eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJ
CXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkv
KiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJ
c3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJ
CQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZ
WV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJ
CXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
OworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVu
dCAqLworLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8K
Ky8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2Ug
MjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAz
OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKwor
CVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9T
RVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwp
OworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBv
bmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgor
ICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxp
bmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZ
WV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZ
X0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lU
fSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRl
Z2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVN
QkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30K
KwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZ
WV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFL
CitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2Fz
ZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9C
UkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5
eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6
CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9C
UkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRV
UAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAg
cmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQ
UF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNl
IFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3Qg
aW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVP
RiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsK
KyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAg
ICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdl
IGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisg
ICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJ
bmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhN
YXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87Cisg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAg
aWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5
eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAg
IH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9T
RVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJ
CS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICov
CisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55
eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRo
aXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g
c28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw
b3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lu
cHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBm
aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNp
bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1v
Zi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlu
cHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2Fz
IHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJ
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhl
IE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9w
cmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBv
ZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRv
IGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICov
CisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRl
ICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUg
TlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVs
c2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwor
CisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0
byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJ
CQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9
IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisK
KwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQor
CisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQor
CQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisK
KwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRl
ZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5h
bCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxl
eCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZm
ZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9C
X0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNj
YW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVu
ZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9w
dHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJ
aWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZs
ZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsg
LyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJ
CWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0g
MSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwg
c28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBF
T0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNo
ZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0Lgor
CQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBU
cnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8g
c3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJf
dG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BF
TkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byBy
ZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVs
c2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9f
cmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93
IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZm
ZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWlu
dCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5
X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWlu
dCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0g
MCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNl
CisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAq
KQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJl
YWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVy
ICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBp
dC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkK
KwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1
ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5
eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0K
KworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVh
ZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZ
X0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19t
b3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFkICk7CisKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwor
CQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90
b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9P
Rl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UK
KwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElO
RzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FO
OworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkg
PiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0
aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5
X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5
Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9u
X2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNo
YXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2
aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5
cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJy
ZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJ
eworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUko
Knl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJ
eworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFu
cyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAq
IHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0
ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwly
ZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRp
bmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9j
dXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwor
CQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9k
ZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJ
CQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQp
IHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVy
biB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19J
TlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5f
dCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFj
dGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUg
RU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVu
IHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlf
Y19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25f
Y2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2Nf
YnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQlp
bnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWct
Pnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBo
YXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11
bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAq
IHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQg
Zm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJ
CQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0Jf
QUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVz
LiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJP
VUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAo
IHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJCQkJCWlmICggISB5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNp
ZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UK
KwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2Fz
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0g
Kih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hh
cidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwor
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9
CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0
Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlv
biB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0
X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICl7CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlp
bixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZl
ci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90
b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVu
dGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsK
KwkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBu
ZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsK
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3
aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkg
dGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2Fs
bGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkg
Ki8KKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2
b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWct
Pnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXln
LT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0
X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiog
QWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFt
IGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1
ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRl
X2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxs
b2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICgg
ISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3Jl
YXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hf
YnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVj
YXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgor
CSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAy
ICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5l
cik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJh
bSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVm
ZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYg
KCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBO
b3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIg
KQorCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJl
ZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0
aWFsaXplcyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBt
b3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBw
cmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVy
ICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
KworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2Fu
bmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0g
MTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVm
ZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhy
b3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3
YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9
IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAg
ICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwg
YnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBj
YWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFs
bHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
IGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJ
Yi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUg
ZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhh
dCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVm
X3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNo
ZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisg
KiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3Rh
Y2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0
ZS4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBw
cHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ
cHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNv
cGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwor
CQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBP
bmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9z
d2l0Y2hfdG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMg
YW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5l
eHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlw
cF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+
IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKSB7CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0
YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxl
YXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1
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
RVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5
Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOwor
CWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5
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
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQg
dG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitj
aGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0
ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5l
dmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBk
YXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFf
VFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJh
ID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4K
KyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBh
biBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZF
UiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRo
IG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVt
YmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBsaW5lX251
bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQg
cHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
KyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBTZXQgdGhl
IGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1
dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90b19idWZm
ZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAoRklMRSAq
ICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91dF9zdHIg
OworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJl
dHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Cit9
CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisKK1lZU1RZ
UEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXls
dmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9CisKK1lZ
TFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFt
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Cit9
CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMgc3BlY2lh
bCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworICogdGhl
IE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFz
IHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0
aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLworCitpbnQg
cHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAocHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9n
bG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBp
biB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1l
bXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAg
ICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHBw
bGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwg
YnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0
aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50
ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChh
bmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhh
bmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4g
dGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KKyAqIHRo
ZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZ
UEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJf
ZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisJ
CisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1
Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5X2dsb2Jh
bHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBp
bgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCisg
ICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsK
KyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMp
OworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsK
K30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRy
YW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9k
ZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5eWctPnl5
X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKyAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZfcCA9IChj
aGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0ID0gMDsK
KworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisKKy8qIERl
ZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBzdGRpbjsK
KyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7CisgICAg
eXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5j
ZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAgICogcHBs
ZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rlc3Ryb3kg
aXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLworaW50
IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogUG9wIHRo
ZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NV
UlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlz
Y2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBwcG9wX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2Vs
Zi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55
eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0
aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2Fu
bmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAgLyogUmVz
ZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2Fu
bmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6
YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CisK
KyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLworICAg
IHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9IE5VTEw7
CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgor
ICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChj
aGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0g
PSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQg
eXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKKworCXJl
dHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9
CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93
aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIq
IGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMg
cG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5T
SSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50
ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAq
IGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSBy
ZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZvaWQgKiBw
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNl
ZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVT
X05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2VuaXpl
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0
LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigp
Cit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50
IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQor
eworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkg
JiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJ
bnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOwor
fQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBX
ZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlm
aWxlbm8uCisgICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5p
emVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVubyhsaW5lLG1I
YW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0
b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxl
KTsKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUo
bUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlw
ZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFk
aW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29s
IFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAm
JiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09
IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7Cisg
ICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0
cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgor
I2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBw
Cit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4
ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8v
IFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91
bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBi
ZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1
ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6Okxv
Y2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJv
b2wgbGluZVN0YXJ0OworICAgIH07CisKKyAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisKKyAgICBib29sIGluaXQoaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKworICAgIHZv
aWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7CisgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBs
aW5lKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRl
OgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIpOworICAgIGJvb2wg
aW5pdFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7CisKKyAgICB2b2lkKiBt
SGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNj
YW5uZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzI5IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlz
IGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBU
cmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjZW5k
aWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9j
YXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8g
dHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisK
KyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+
bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VT
RVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAm
eXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6Oklu
cHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAor
ICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5s
ZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2Nh
bkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisg
ICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+
bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1
bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4
U2l6ZSk7CisKKyV9CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2
ZQorJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucworJW9wdGlv
biBwcmVmaXg9InBwIgorJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6VG9rZW5pemVyOjpDb250ZXh0
KiIKKyV4IENPTU1FTlQKKworTkVXTElORSAgICAgXG58XHJ8XHJcbgorSURFTlRJRklFUiAgW19h
LXpBLVpdW19hLXpBLVowLTldKgorUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjss
P10KKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCitPQ1RBTF9DT05TVEFOVCAg
ICAgICAgMFswLTddKgorSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCisK
K0RJR0lUICAgICAgICAgICAgICAgIFswLTldCitFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWyst
XT97RElHSVR9KworRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7
RElHSVR9KyIuIikKKworJSUKKworICAgIC8qIExpbmUgY29tbWVudCAqLworIi8vIlteXHJcbl0q
CisKKyAgICAvKiBCbG9jayBjb21tZW50ICovCisgICAgLyogTGluZSBicmVha3MgYXJlIGp1c3Qg
Y291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKyAgICAvKiBUaGUgY29tbWVudCBpcyByZXBsYWNl
ZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCisiLyoiIHsgQkVHSU4oQ09NTUVOVCk7IH0KKzxDT01N
RU5UPlteKlxyXG5dKworPENPTU1FTlQ+IioiCis8Q09NTUVOVD57TkVXTElORX0geyArK3l5bGlu
ZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVl
OworICAgIEJFR0lOKElOSVRJQUwpOworfQorCisjIHsKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQg
YXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgeXlsdmFs
LT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8g
cHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwore0lERU5USUZJ
RVJ9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwore0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05T
VEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKK30KKworKHtESUdJ
VH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9
PykgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKworICAgIC8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdp
dGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCisgICAgLyogUnVs
ZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLworKHtESUdJVH0r
W19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16QS1aMC05Ll0qKSB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05VTUJF
UjsKK30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisiPDwi
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKyI8PSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9M
RTsKK30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKyIhPSIgewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOworfQor
Inx8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisiLT0iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorIi89IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKK30KKyI8PD0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30K
KyImPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9
CisifD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRPUn0geworICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKworWyBc
dFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQorCit7TkVXTElORX0g
eworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0
dXJuICdcbic7Cit9CisKKy4geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKKzwqPjw8RU9GPj4geworICAgIC8v
IFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCisgICAgLy8g
U2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAgIHBwOjpJbnB1dCog
aW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2Nhbkxv
YyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBp
bnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUg
ZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KKyAgICAg
ICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOworICAg
ICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAgIH0KKyAgICB5eWxs
b2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKKyAgICB7Cisg
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291
cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7Cit9CisKKyUlCisK
K25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFn
bm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nh
bm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwg
MCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcs
IGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVy
OjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVy
IGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVuby4KKyAgICB5eXNldF9j
b2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVy
KGludCBsaW5lKQoreworICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFuZGxlKTsKK30KKwordm9p
ZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSB5eWxl
eCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICB0b2tlbi0+
ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQubGluZVN0
YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4nOworCisg
ICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2UpOworICAg
IG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOworfQorCitib29sIFRva2VuaXplcjo6aW5p
dFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiB5eWxleF9pbml0X2V4
dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB5
eXJlc3RhcnQoMCwgbUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVG9rZW5p
emVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYgKG1IYW5kbGUgPT0gTlVMTCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgeXlsZXhfZGVzdHJveShtSGFuZGxlKTsKKyAgICBtSGFuZGxlID0g
TlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJh
dGVfcGFyc2VyLnNoCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAkocmV2aXNpb24gMTIy
MjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3ICsxLDI2IEBA
CiAjIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
ICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAotIyBHZW5lcmF0ZXMgR0xTTCBFUyBwcmVw
cm9jZXNzb3IgLSBwcF9sZXguY3BwLCBwcF90YWIuaCwgYW5kIHBwX3RhYi5jcHAKKyMgR2VuZXJh
dGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nlc3Nvci4KIAogcnVuX2Zs
ZXgoKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS5sCi1vdXRwdXRfc291cmNlPSRzY3Jp
cHRfZGlyLyQxX2xleC5jcHAKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3Vy
Y2U9JHNjcmlwdF9kaXIvJDIKIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91
dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0KIAogcnVuX2Jpc29uKCkKIHsKLWlucHV0X2ZpbGU9
JHNjcmlwdF9kaXIvJDEueQotb3V0cHV0X2hlYWRlcj0kc2NyaXB0X2Rpci8kMV90YWIuaAotb3V0
cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV90YWIuY3BwCi1iaXNvbiAtLW5vLWxpbmVzIC0tc2tl
bGV0b249eWFjYy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hlYWRlciAtLW91dHB1dD0kb3V0cHV0X3Nv
dXJjZSAkaW5wdXRfZmlsZQoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3NvdXJj
ZT0kc2NyaXB0X2Rpci8kMgorYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLW91
dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBzY3JpcHRfZGlyPSQoZGlybmFt
ZSAkMCkKIAogIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IKLXJ1bl9mbGV4IHBwCi1ydW5fYmlzb24g
cHAKK3J1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKK3J1bl9iaXNvbiBFeHByZXNz
aW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVy
YXRlX3BhcnNlci5zaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvcHAubAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubAkod29ya2luZyBj
b3B5KQpAQCAtMSwxODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmls
ZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29y
LgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3Jh
bW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5h
c3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX3BhcnNlci5zaC4KLSovCi0KLSV0b3B7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxl
IGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi19
Ci0KLSV7Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVubzsgICAgICAgIFwK
LSAgICAgICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7ICBcCi0gICAgICAg
IHl5Y29sdW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCk7
Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1bHQg
PSB5eWV4dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6OnN0
cmluZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwotJX0KLQot
JW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHl5bGlu
ZW5vIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIHN0YWNr
Ci0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpDb250ZXh0KiIK
LQotSFNQQUNFICAgICAgWyBcdF0KLUhBU0ggICAgICAgIF57SFNQQUNFfSoje0hTUEFDRX0qCi1J
REVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1QVU5DVFVBVE9SICBbXVs8Pigpe30u
Ky0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKLU9D
VEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1b
MC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KLUVYUE9ORU5UX1BBUlQg
ICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoi
LiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi17SEFTSH0geyByZXR1cm4gSEFTSDsg
fQotCi17SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0vWyBcdFxuXSB7Ci0gICAgeXls
dmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IEhBU0hfREVGSU5FX09CSjsKLX0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS8i
KCIgewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBIQVNIX0RFRklORV9GVU5DOwotfQote0hBU0h9dW5kZWZ7SFNQQUNFfSsg
eyByZXR1cm4gSEFTSF9VTkRFRjsgfQotCi17SEFTSH1pZiB7IHJldHVybiBIQVNIX0lGOyB9Ci17
SEFTSH1pZmRlZiB7IHJldHVybiBIQVNIX0lGREVGOyB9Ci17SEFTSH1pZm5kZWYgeyByZXR1cm4g
SEFTSF9JRk5ERUY7IH0KLXtIQVNIfWVsc2UgeyByZXR1cm4gSEFTSF9FTFNFOyB9Ci17SEFTSH1l
bGlmIHsgcmV0dXJuIEhBU0hfRUxJRjsgfQote0hBU0h9ZW5kaWYgeyByZXR1cm4gSEFTSF9FTkRJ
RjsgfQotImRlZmluZWQiIHsgcmV0dXJuIERFRklORUQ7IH0KLQote0hBU0h9ZXJyb3IgeyByZXR1
cm4gSEFTSF9FUlJPUjsgfQote0hBU0h9cHJhZ21hIHsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci17
SEFTSH1leHRlbnNpb24geyByZXR1cm4gSEFTSF9FWFRFTlNJT047IH0KLXtIQVNIfXZlcnNpb24g
eyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci17SEFTSH1saW5lIHsgcmV0dXJuIEhBU0hfTElORTsg
fQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0KLXtERUNJTUFMX0NP
TlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0gewotICAgIHl5
bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IElOVF9DT05TVEFOVDsKLX0KLQotKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9O
QUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9PykgewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBz
dGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwot
fQotCi17UFVOQ1RVQVRPUn0geyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0KLVsgXHRcdlxmXSsgeyAv
KiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci0KLVxuIHsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVt
biA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLQotPCo+PDxFT0Y+PiAgICAgeyB5eXRl
cm1pbmF0ZSgpOyB9Ci0KLSUlCi0KLXN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0
IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBUaGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRo
ZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfQotICAgIC8vIFdlIGp1c3Qg
bmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAgICBBU1NFUlQoc3RyICYmIChsZW4gPiA4
KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsKLQotICAgIHN0ZDo6c3RyaW5nKiBuYW1l
ID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgewot
ICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChzdHJbaV0gPT0gJ1x0JykpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpzdHJpbmcoc3RyICsgaSArIDEsIGxlbiAt
IGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VS
VChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLQotaW50IENv
bnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBtYXhTaXplKQotewotICAgIGludCBucmVh
ZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQtPmVvZigpICYmCi0gICAgICAgICAgICht
SW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JOb25lKSAmJgotICAgICAgICAgICAo
bnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAw
OwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0aW9uKHl5Z2V0X2xpbmVubyhtTGV4ZXIp
LCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0gbUlucHV0LT5zdHJpbmdJbmRleCgpOwot
ICAgICAgICB5eXNldF9saW5lbm8ocHA6OlRva2VuOjplbmNvZGVMb2NhdGlvbihsaW5lLCBmaWxl
KSwgbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChidWYsIG1heFNpemUp
OwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJyb3JVbmV4
cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0
IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsKLX0KLQotYm9vbCBD
b250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAg
ICBpZiAoeXlsZXhfaW5pdF9leHRyYSh0aGlzLCAmbUxleGVyKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgeXlyZXN0YXJ0KDAsIG1MZXhlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyKTsKLQot
ICAgIHl5bGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4ZXIgPSBOVUxMOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgcHAKLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55CShyZXZpc2lvbiAxMjIy
MzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcC55CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyNSArMCwwIEBACi0vKgotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHBy
ZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJv
Y2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
MnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRP
IFJVTiBnZW5lcmF0ZV9nbHNsX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBF
UyBQQVJTRVIuCi0qLwotCi0lewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0K
LSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4
ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLSV9Ci0KLSVwdXJlLXBhcnNlcgotJW5hbWUtcHJlZml4
PSJwcCIKLSVsb2NhdGlvbnMKLSVwYXJzZS1wYXJhbSB7cHA6OkNvbnRleHQqIGNvbnRleHR9Ci0K
LSV1bmlvbiB7Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6
OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0KLSV7Ci1leHRl
cm4gaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCogbGV4ZXIp
Owotc3RhdGljIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAgICAgICAg
ICAgcHA6OkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJlYXNvbik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRpb25hbEJs
b2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSV9Ci0KLSV0b2tlbiBIQVNIIEhBU0hfVU5ERUYK
LSV0b2tlbiBIQVNIX0lGIEhBU0hfSUZERUYgSEFTSF9JRk5ERUYgSEFTSF9FTFNFIEhBU0hfRUxJ
RiBIQVNIX0VORElGIERFRklORUQKLSV0b2tlbiBIQVNIX0VSUk9SIEhBU0hfUFJBR01BIEhBU0hf
RVhURU5TSU9OIEhBU0hfVkVSU0lPTiBIQVNIX0xJTkUKLSV0b2tlbiA8c3ZhbD4gSEFTSF9ERUZJ
TkVfT0JKIEhBU0hfREVGSU5FX0ZVTkMKLSV0b2tlbiA8c3ZhbD4gSU5UX0NPTlNUQU5UIEZMT0FU
X0NPTlNUQU5UIElERU5USUZJRVIKLSV0eXBlIDxpdmFsPiBvcGVyYXRvcgotJXR5cGUgPHR2YWw+
IGNvbmRpdGlvbmFsX3Rva2VuIHRva2VuCi0ldHlwZSA8dGxpc3Q+IHBhcmFtZXRlcl9saXN0IHJl
cGxhY2VtZW50X2xpc3QgY29uZGl0aW9uYWxfbGlzdCB0b2tlbl9saXN0Ci0lJQotCi1pbnB1dAot
ICAgIDogLyogZW1wdHkgKi8KLSAgICB8IGlucHV0IGxpbmUKLTsKLQotbGluZQotICAgIDogdGV4
dF9saW5lCi0gICAgfCBjb250cm9sX2xpbmUKLTsKLQotdGV4dF9saW5lCi0gICAgOiAnXG4nCi0g
ICAgfCB0b2tlbl9saXN0ICdcbicgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1h
Y3Jvcy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsK
LSAgICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgJDEtPmJlZ2luKCksICQxLT5lbmQoKSk7
Ci0gICAgICAgIGRlbGV0ZSAkMTsKLSAgICB9Ci07Ci0KLWNvbnRyb2xfbGluZQotICAgIDogSEFT
SCAnXG4nCi0gICAgfCBIQVNIX0RFRklORV9PQkogcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAg
ICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlw
ZU9iaiwgJDEsIE5VTEwsICQyKTsKLSAgICB9Ci0gICAgfCBIQVNIX0RFRklORV9GVU5DICcoJyBw
YXJhbWV0ZXJfbGlzdCAnKScgcmVwbGFjZW1lbnRfbGlzdCAnXG4nIHsKLSAgICAgICAgY29udGV4
dC0+ZGVmaW5lTWFjcm8oQDEuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICQxLCAk
MywgJDUpOwotICAgIH0KLSAgICB8IEhBU0hfVU5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAg
ICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygkMik7Ci0gICAgfQotICAgIHwgSEFTSF9JRiBjb25k
aXRpb25hbF9saXN0ICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0
LCAkMiA/IHRydWUgOiBmYWxzZSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRkRFRiBJREVOVElGSUVS
ICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5p
c01hY3JvRGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfSUZOREVGIElERU5USUZJRVIg
J1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5p
c01hY3JvRGVmaW5lZCgkMikpOwotICAgIH0KLSAgICB8IEhBU0hfRUxJRiBjb25kaXRpb25hbF9s
aXN0ICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRUxTRSAnXG4nIHsKLSAgICB9Ci0gICAgfCBI
QVNIX0VORElGICdcbicgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwot
ICAgIH0KLSAgICB8IEhBU0hfRVJST1IgJ1xuJwotICAgIHwgSEFTSF9QUkFHTUEgJ1xuJwotICAg
IHwgSEFTSF9FWFRFTlNJT04gJ1xuJwotICAgIHwgSEFTSF9WRVJTSU9OICdcbicKLSAgICB8IEhB
U0hfTElORSAnXG4nCi07Ci0KLXJlcGxhY2VtZW50X2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsg
JCQgPSBOVUxMOyB9Ci0gICAgfCB0b2tlbl9saXN0Ci0KLXBhcmFtZXRlcl9saXN0Ci0gICAgOiAv
KiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQk
ID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRv
a2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKSk7Ci0gICAgfQotICAgIHwgcGFyYW1l
dGVyX2xpc3QgJywnIElERU5USUZJRVIgewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+
cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDMuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDMpKTsK
LSAgICB9Ci0KLWNvbmRpdGlvbmFsX2xpc3QKLSAgICA6IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAg
ICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQx
KTsKLSAgICB9Ci0gICAgfCBjb25kaXRpb25hbF9saXN0IGNvbmRpdGlvbmFsX3Rva2VuIHsKLSAg
ICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi10
b2tlbl9saXN0Ci0gICAgOiB0b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3Rv
cjsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgdG9rZW5fbGlzdCB0
b2tlbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDIpOwotICAg
IH0KLTsKLQotY29uZGl0aW9uYWxfdG9rZW4KLSAgICA6IERFRklORUQgSURFTlRJRklFUiB7Ci0g
ICAgfQotICAgIHwgREVGSU5FRCAnKCcgSURFTlRJRklFUiAnKScgewotICAgIH0KLSAgICB8IHRv
a2VuCi07Ci0KLXRva2VuCi0gICAgOiBvcGVyYXRvciB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpU
b2tlbihAMS5maXJzdF9saW5lLCAkMSwgTlVMTCk7Ci0gICAgfQotICAgIHwgSU5UX0NPTlNUQU5U
IHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElOVF9DT05TVEFO
VCwgJDEpOwotICAgIH0KLSAgICB8IEZMT0FUX0NPTlNUQU5UIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAg
IHwgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5l
LCBJREVOVElGSUVSLCAkMSk7Ci0gICAgfQotOwotCi1vcGVyYXRvcgotICAgIDogJ1snIHsgJCQg
PSAnWyc7IH0KLSAgICB8ICddJyB7ICQkID0gJ10nOyB9Ci0gICAgfCAnPCcgeyAkJCA9ICc8Jzsg
fQotICAgIHwgJz4nIHsgJCQgPSAnPic7IH0KLSAgICB8ICcoJyB7ICQkID0gJygnOyB9Ci0gICAg
fCAnKScgeyAkJCA9ICcpJzsgfQotICAgIHwgJ3snIHsgJCQgPSAneyc7IH0KLSAgICB8ICd9JyB7
ICQkID0gJ30nOyB9Ci0gICAgfCAnLicgeyAkJCA9ICcuJzsgfQotICAgIHwgJysnIHsgJCQgPSAn
Kyc7IH0KLSAgICB8ICctJyB7ICQkID0gJy0nOyB9Ci0gICAgfCAnLycgeyAkJCA9ICcvJzsgfQot
ICAgIHwgJyonIHsgJCQgPSAnKic7IH0KLSAgICB8ICclJyB7ICQkID0gJyUnOyB9Ci0gICAgfCAn
XicgeyAkJCA9ICdeJzsgfQotICAgIHwgJ3wnIHsgJCQgPSAnfCc7IH0KLSAgICB8ICcmJyB7ICQk
ID0gJyYnOyB9Ci0gICAgfCAnficgeyAkJCA9ICd+JzsgfQotICAgIHwgJz0nIHsgJCQgPSAnPSc7
IH0KLSAgICB8ICchJyB7ICQkID0gJyEnOyB9Ci0gICAgfCAnOicgeyAkJCA9ICc6JzsgfQotICAg
IHwgJzsnIHsgJCQgPSAnOyc7IH0KLSAgICB8ICcsJyB7ICQkID0gJywnOyB9Ci0gICAgfCAnPycg
eyAkJCA9ICc/JzsgfQotOwotCi0lJQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBw
OjpDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVz
aENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQot
ewotfQotCi12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17
Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRl
YnVnID0gMTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwot
fQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4
LmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MjY4ICswLDAgQEAKLSNsaW5lIDE2ICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwiCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcF9sZXguY3BwIgotCi0jZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBp
bnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KLQotI2RlZmlu
ZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKLSNkZWZpbmUg
WVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9O
IDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAotI2RlZmluZSBGTEVYX0JFVEEK
LSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBj
b21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0KLS8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVy
cy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIGVuZCBzdGFuZGFyZCBDIGhlYWRl
cnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCi0KLSNpZm5kZWYg
RkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAotCi0vKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0
eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLwotCi0jaWYgZGVmaW5l
ZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0KLS8q
IEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcg
c3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3Ig
aW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9f
U1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotdHlw
ZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90Owot
dHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgdWludDE2X3QgZmxleF91aW50
MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVpbnQzMl90IGZs
ZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKLXR5
cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsK
LXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAotdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMy
X3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAq
LwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4
KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAg
ICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NSU4KLSNkZWZpbmUgSU5UMzJf
TUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQ4X01B
WAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jZW5kaWYKLSNpZm5kZWYg
SU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQotI2VuZGlm
Ci0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3
NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2RlZmluZSBVSU5UOF9NQVggICAg
ICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9NQVgKLSNkZWZpbmUgVUlO
VDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQzMl9NQVgK
LSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCi0jZW5kaWYKLQot
I2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vKiBUaGUg
ImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLwotI2RlZmluZSBZWV9V
U0VfQ09OU1QKLQotI2Vsc2UgICAvKiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJl
cyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18p
Ci0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbmRpZiAgLyogZGVmaW5lZCAoX19TVERDX18p
ICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAot
I2RlZmluZSB5eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQot
LyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8q
IFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFu
IHVuc2lnbmVkCi0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUg
c2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQg
YXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAq
LwotI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIp
IGMpCi0KLS8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1ND
QU5ORVJfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5
eXNjYW5fdDsKLSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMg
dGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50
IHNjYW5uZXIuICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXln
LT55eW91dF9yCi0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5n
IHl5Zy0+eXlsZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXls
aW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5
eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5l
IHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBj
b25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAot
ICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5
IHRoZSAoKS1sZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lO
IHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFy
dCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJ
TiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAot
ICogY29tcGF0aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQg
LSAxKSAvIDIpCi0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBm
b3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVf
RU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBh
Y3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUg
WVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUl9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8K
LSNpZm5kZWYgWVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgot
Ci0vKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRl
IHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRF
X0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQot
Ci0jaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZf
WVlfQlVGRkVSX1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZF
Ul9TVEFURTsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCi0jZGVm
aW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgot
Ci0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVf
Y2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0gICAgICogICAgICAgYWNjZXNzIHRv
IHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0
IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5
bGVzcygpIGZyb20gT1VUU0lERSBwcGxleC4gCi0gICAgICogICAgICAgT25lIG9idmlvdXMgc29s
dXRpb24gaXQgdG8gbWFrZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJpZWQgdGhhdCwgYW5kIHNhdwot
ICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5u
ZXIsIGJlY2F1c2UgeXlfYWN0IGlzCi0gICAgICogICAgICAgbm9ybWFsbHkgZGVjbGFyZWQgYXMg
YSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBpdC4KLSAgICAgKi8KLSAg
ICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCi0gICAgICAgICAgICBkbyB7IFwKLSAgICAg
ICAgICAgICAgICBpbnQgeXlsO1wKLSAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwg
PCB5eWxlbmc7ICsreXlsIClcCi0gICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0g
PT0gJ1xuJyApXAotICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCi0gICAgICAg
ICAgICB9d2hpbGUoMCkKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0
Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgeXls
ZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRvIGVmZmVjdHMg
b2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcg
PSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotICAg
ICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICBZWV9SRVNUT1JFX1lZ
X01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCAr
IHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAgICAgICBZWV9ET19CRUZPUkVf
QUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAgICAgICAgfSBcCi0gICAgd2hp
bGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIg
LCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZ
X1RZUEVERUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAgICB7Ci0gICAgRklMRSAqeXlf
aW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAgICAgIC8qIGlucHV0IGJ1ZmZl
ciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4g
aW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywg
bm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwot
ICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQotICAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0gICAgICogY2hhcmFjdGVy
cy4KLSAgICAgKi8KLSAgICBpbnQgeXlfbl9jaGFyczsKLQotICAgIC8qIFdoZXRoZXIgd2UgIm93
biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLSAgICAgKiBhbmQg
Y2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotICAg
ICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKLQotICAg
IC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28s
IGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50
IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3
ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAq
LwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotICAgIC8qIFdoZXRoZXIgd2UncmUgY29u
c2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLSAgICAgKiBJZiBzbywg
J14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKLSAg
ICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5X2F0X2JvbDsKLQotICAgIGludCB5eV9ic19s
aW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCi0gICAgaW50IHl5X2JzX2NvbHVtbjsgLyoq
PCBUaGUgY29sdW1uIGNvdW50LiAqLwotICAgIAotICAgIC8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZp
bGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAgICAqIGVuZCBvZiBpdC4K
LSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZmZXI7Ci0KLSAgICBpbnQgeXlfYnVmZmVyX3N0
YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1B
TCAxCi0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29t
ZSB0ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9F
T0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVh
ZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0
aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgot
ICAgICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVh
bGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotICAgICAqICh2
aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBi
eQotICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAq
LwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0gICAgfTsKLSNlbmRpZiAvKiAh
WVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBwcm92aWRlIG1hY3JvcyBmb3Ig
YWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKLSAqIGZ1dHVyZSB3ZSB3YW50
IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAotICogInNjYW5uZXIg
c3RhdGUiLgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCi0g
Ki8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKLQot
LyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0
aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVl
LiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KLQot
dm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
dm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklM
RSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2RlbGV0ZV9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBf
Zmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12
b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLQotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUg
YixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSBZWV9GTFVTSF9C
VUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCi0KLVlZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5
Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFU
RSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVm
aW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgotCi0jZGVmaW5lIHl5X3NldF9pbnRl
cmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5U
X0JVRkZFUiApeyBcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsg
XAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBw
cF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwK
LSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50
ZXJhY3RpdmU7IFwKLSAgICB9Ci0KLSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKLSAgICB7
IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCi0gICAgICAgIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KLQotI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0KLS8qIEJlZ2luIHVzZXIgc2VjdDMgKi8K
LQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmluZSBZWV9TS0lQX1lZV1JBUAotCi10eXBlZGVm
IHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKLQot
I2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dl
dF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNj
YW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBt
c2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQg
cGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCi0gKiBjb3JyZXNwb25kaW5n
IGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0jZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJ
T04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0gICAgeXlsZW5nID0gKHNpemVf
dCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwK
LSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7Ci0KLSNk
ZWZpbmUgWVlfTlVNX1JVTEVTIDIzCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjQKLS8qIFRo
aXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2Vu
Y2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLSAgICB7Ci0gICAgZmxl
eF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4X2ludDMyX3QgeXlfbnh0OwotICAgIH07Ci1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzEwNV0gPQotICAgIHsgICAwLAot
ICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDIzLCAgIDIxLCAgIDIyLCAgIDIwLCAgIDIwLCAgIDE4
LCAgIDE4LAotICAgICAgIDE3LCAgIDE3LCAgIDIxLCAgICAxLCAgIDIxLCAgIDE5LCAgIDE5LCAg
IDE4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgIDE4LCAgIDE3LCAgIDE3LCAgIDIxLCAgICAx
LCAgICAxLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgIDE5LCAgIDE4LCAgIDE3LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICA1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgIDE5LCAg
IDE3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDE3LCAgICAwLCAgICA5LCAgICA4LCAgICAwLCAg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgIDE2LCAgICAwLCAgICAwLCAgICAwLCAgIDE3
LCAgICAwLCAgIDEwLAotICAgICAgIDEyLCAgICAwLCAgICA2LCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgIDExLCAgICAwLCAgICAwLAotICAgICAgICA3LCAgIDEzLCAgICA0LCAgICAwLCAgICAw
LCAgICAwLCAgIDE1LCAgICAwLCAgICAwLCAgICAyLAotCi0gICAgICAgIDMsICAgIDAsICAgMTQs
ICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0g
PQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAy
LCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA1LCAgICA1LCAgICAxLCAgICA3LAotICAgICAg
ICA1LCAgICA1LCAgICA4LCAgICA1LCAgICA4LCAgICA5LCAgICA1LCAgIDEwLCAgIDExLCAgIDEx
LAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDEyLCAgIDEyLCAgICA1LCAg
ICA1LCAgICA1LAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgIDEzLCAgIDEzLCAgIDEz
LCAgIDEzLCAgIDE0LCAgIDEzLAotICAgICAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAg
IDE1LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1LAotICAgICAgIDE1LCAgIDE1LCAgIDE1LCAgIDE1
LCAgIDE1LCAgIDE1LCAgIDE1LCAgIDE2LCAgIDE1LCAgIDE1LAotICAgICAgICA1LCAgICAxLCAg
ICA1LCAgICA1LCAgIDE1LCAgICAxLCAgIDE3LCAgIDEzLCAgIDEzLCAgIDE4LAotCi0gICAgICAg
MTksICAgMjAsICAgMjEsICAgMTUsICAgMjIsICAgMTUsICAgMTUsICAgMjMsICAgMjQsICAgMjUs
Ci0gICAgICAgMjYsICAgMjcsICAgMTUsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAg
MTUsICAgMzMsCi0gICAgICAgMTUsICAgMTUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQotICAgIH0g
OwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszNF0gPQotICAgIHsgICAw
LAotICAgICAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAg
ICAxLCAgICA0LAotICAgICAgICA0LCAgICA0LCAgICA1LCAgICA2LCAgICA3LCAgICA3LCAgICA1
LCAgICA1LCAgICA2LCAgICA1LAotICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAg
ICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3LCAgICA3LCAgICA3Ci0gICAg
fSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExMV0gPQotICAgIHsg
ICAwLAotICAgICAgICAwLCAgIDE4LCAgMTg0LCAgMTg1LCAgIDExLCAgMTg1LCAgMTg1LCAgIDIx
LCAgIDI4LCAgIDUzLAotICAgICAgICAwLCAgMTY0LCAgIDM5LCAgIDcxLCAgIDEyLCAgIDMyLCAg
IDM0LCAgICAxLCAgIDM5LCAgIDQ0LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgMTYyLCAgIDY0
LCAgICAwLCAgICAwLCAgMTYyLCAgIDQ2LCAgMTYwLAotICAgICAgMTU3LCAgMTUwLCAgMTUyLCAg
MTU3LCAgIDcwLCAgIDQ3LCAgIDY1LCAgICAwLCAgMTUzLCAgMTU0LAotICAgICAgIDYyLCAgMTU1
LCAgMTQ0LCAgMTQxLCAgIDY3LCAgMTQ1LCAgMTUyLCAgMTUwLCAgMTM5LCAgIDc2LAotICAgICAg
IDg1LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ0LCAgMTQwLCAgMTM1LCAgMTQxLCAgMTQwLCAgMTQw
LAotICAgICAgMTM4LCAgMTM1LCAgMTM2LCAgMTI1LCAgMTM0LCAgMTI3LCAgMTg1LCAgMTg1LCAg
MTMxLCAgMTIyLAotICAgICAgMTI0LCAgMTI4LCAgMTI4LCAgMTg1LCAgMTIyLCAgMTI1LCAgMTIy
LCAgMTI1LCAgMTIzLCAgMTg1LAotICAgICAgMTg1LCAgMTEyLCAgMTg1LCAgMTIwLCAgMTEzLCAg
MTI3LCAgIDk3LCAgICAwLCAgMTA3LCAgIDg2LAotICAgICAgMTg1LCAgMTg1LCAgMTA1LCAgIDc2
LCAgIDgxLCAgIDM0LCAgMTg1LCAgIDk3LCAgIDEwLCAgMTg1LAotCi0gICAgICAxODUsICAxMDMs
ICAxODUsICAxODUsICAxMTAsICAxMTQsICAxMTgsICAxMjEsICAxMjYsICAxMzIKLSAgICB9IDsK
LQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTFdID0KLSAgICB7ICAgMCwK
LSAgICAgIDEwNSwgIDEwNSwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwKLSAgICAgIDEwNiwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNywgIDEwNywg
ICAgOSwgICAxOCwgIDEwNCwKLSAgICAgIDEwOCwgICAxMCwgIDEwNiwgIDEwNiwgIDEwNCwgICAx
NCwgICAxNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwOCwgIDEwNiwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwg
IDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNiwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
OSwgIDEwNCwgIDEwNCwgIDExMCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTEwLCAgMTA0
LCAgICAwLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAg
ICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDQsICAgIDcsICAgIDcsICAgIDgsICAg
IDksCi0gICAgICAgMTAsICAgMTAsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAxMDQsICAgMTIs
ICAgIDQsICAgMTMsCi0gICAgICAgIDYsICAgIDUsICAgIDcsICAgMTQsICAgIDcsICAgIDcsICAg
IDgsICAgIDksICAgMTAsICAgMTAsCi0gICAgICAgMTYsICAgMTYsICAgMTYsICAxMDQsICAxMDMs
ICAgMTIsICAgMTcsICAgMTgsICAgMTgsICAgMTksCi0gICAgICAgMjUsICAgMjAsICAgMTUsICAg
MjEsICAgMjYsICAgMzUsICAgMjAsICAgMzUsICAgMTksICAgMTksCi0gICAgICAgMzUsICAgMzYs
ICAgMzUsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgMzcsICAgOTksCi0gICAgICAg
MjEsICAgMTcsICAgMjIsICAgMjIsICAgMjIsICAgMjUsICAgMjAsICAgMTUsICAgNDEsICAgMjYs
Ci0gICAgICAgNDIsICAgMjAsICAgMjcsICAgNDMsICAgMzcsICAgMzcsICAgMzcsICAgNTAsICAg
NDQsICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAgOTUsICAgNTQsICAgNTksICAgNTEsICAgNTEs
ICAgNTEsICAgMjgsICAgMjksCi0gICAgICAgNTUsICAgNjAsICAgMzAsICAgMzEsICAgNTEsICAg
NTEsICAgNTEsICAgMzIsICAxMDAsICAxMDAsCi0KLSAgICAgICA5NywgICAzMywgICAzNCwgIDEw
MSwgIDEwMCwgIDEwMCwgICA5MywgICA5NiwgICA5NSwgIDEwMSwKLSAgICAgICAxMSwgICAxMSwg
ICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAy
MywgICAxNiwgICA5NCwgICAxNiwgICAzOCwgICAzOCwgICAzOCwgICA5OCwgICA5MywgICA5MiwK
LSAgICAgICA5OCwgICA5OCwgICA5OCwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEwMiwgIDEw
MiwgICA5MSwKLSAgICAgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwgICA4NSwgICA4NCwg
ICA4MywgICA4MiwgICA4MSwKLSAgICAgICA4MCwgICA3OSwgICA3OCwgICA3NywgICA3NiwgICA3
NSwgICA3NCwgICA3MywgICA3MiwgICA3MSwKLSAgICAgICA3MCwgICA2OSwgICA2OCwgICA2Nywg
ICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwKLSAgICAgICA1OCwgICA1NywgICA1
NiwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0NywgICA0NiwgICA0NSwKLSAgICAgICA0MCwg
ICAzOSwgICAyNCwgIDEwNCwgICAgMywgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAg
ICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9j
aGtbMjE5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDUsICAg
MTUsICAgIDUsICAgMTUsICAgMTgsICAgIDEsICAgIDIsICAgIDIsCi0gICAgICAgIDIsICAgIDIs
ICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAg
IDgsICAgIDgsICAgIDgsICAgMTgsICAgOTksICAgIDIsICAgIDksICAgIDksICAgIDksICAgIDks
Ci0gICAgICAgMTMsICAgIDksICAgMTMsICAgIDksICAgMTMsICAgMTYsICAgIDksICAgMTcsICAg
MTksICAgMTksCi0gICAgICAgMTYsICAgMjAsICAgMTcsICAgMjAsICAgMjAsICAgMjAsICAgMzYs
ICAgMzYsICAgMzYsICAgOTYsCi0gICAgICAgIDksICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAg
MjUsICAgMTAsICAgMjUsICAgMjksICAgMjUsCi0gICAgICAgMjksICAgMTAsICAgMTQsICAgMjks
ICAgMzcsICAgMzcsICAgMzcsICAgMzUsICAgMjksICAgMzUsCi0gICAgICAgMzUsICAgMzUsICAg
OTUsICAgNDEsICAgNDUsICAgNTAsICAgNTAsICAgNTAsICAgMTQsICAgMTQsCi0gICAgICAgNDEs
ICAgNDUsICAgMTQsICAgMTQsICAgNTEsICAgNTEsICAgNTEsICAgMTQsICAgOTgsICAgOTgsCi0K
LSAgICAgICA5NCwgICAxNCwgICAxNCwgICA5OCwgIDEwMiwgIDEwMiwgICA5MywgICA5MCwgICA4
OSwgIDEwMiwKLSAgICAgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwgIDEwNSwg
IDEwNiwgIDEwNiwgIDEwNiwKLSAgICAgIDEwNiwgIDEwNywgICA4NywgIDEwNywgIDEwOCwgIDEw
OCwgIDEwOCwgIDEwOSwgICA4NiwgICA4NSwKLSAgICAgIDEwOSwgIDEwOSwgIDEwOSwgIDExMCwg
IDExMCwgIDExMCwgIDExMCwgIDExMCwgIDExMCwgICA4NCwKLSAgICAgICA4MiwgICA3OSwgICA3
OCwgICA3NywgICA3NiwgICA3NSwgICA3MywgICA3MiwgICA3MSwgICA3MCwKLSAgICAgICA2OSwg
ICA2NiwgICA2NSwgICA2NCwgICA2MywgICA2MiwgICA2MSwgICA2MCwgICA1OSwgICA1OCwKLSAg
ICAgICA1NywgICA1NiwgICA1NSwgICA1NCwgICA1MywgICA1MiwgICA0OSwgICA0OCwgICA0Nywg
ICA0NiwKLSAgICAgICA0NCwgICA0MywgICA0MiwgICA0MCwgICAzOSwgICAzNCwgICAzMywgICAz
MiwgICAzMSwgICAzMCwKLSAgICAgICAyOCwgICAyNCwgICAxMiwgICAgMywgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLQotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0Ci0gICAgfSA7Ci0KLS8qIFRh
YmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyNF0gPQotICAgIHsg
ICAwLAotMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgICAgIH07Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRo
aXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qg
d2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9u
b3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3Rl
ZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZT
RVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBz
cGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29m
dCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5t
aWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZ
IFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJDb250ZXh0LmgiCi0jaW5j
bHVkZSAicHBfdGFiLmgiCi0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICB5eWxsb2MtPmZpcnN0X2xpbmUgPSB5eWxpbmVubzsgICAgICAgIFwKLSAgICAg
ICAgeXlsbG9jLT5maXJzdF9jb2x1bW4gPSB5eWNvbHVtbiArIDE7ICBcCi0gICAgICAgIHl5Y29s
dW1uICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNk
ZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1bHQgPSB5eWV4
dHJhLT5yZWFkSW5wdXQoYnVmLCBtYXhTaXplKTsKLSAgICAKLXN0YXRpYyBzdGQ6OnN0cmluZyog
ZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwotCi0jZGVmaW5lIElO
SVRJQUwgMAotCi0jZGVmaW5lIFlZX0VYVFJBX1RZUEUgcHA6OkNvbnRleHQqCi0KLS8qIEhvbGRz
IHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotc3RydWN0IHl5
Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4
LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0gICAgLyogVGhlIHJlc3QgYXJl
IHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNj
YW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKLSAgICBzaXplX3QgeXlfYnVm
ZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi0gICAgc2l6ZV90
IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCi0gICAgWVlf
QlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAq
LwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5
eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0OwotICAgIGlu
dCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOwotICAgIGlu
dCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwotICAg
IGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0gICAgaW50IHl5
bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIgKnl5dGV4dF9y
OwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwotCi0gICAgWVlT
VFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0gICAgfTsgLyog
ZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZ
U1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNvbiBvdXRwdXQg
aW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKLSAg
ICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAotaW50IHBwbGV4
X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VY
VFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyogQWNjZXNzb3Ig
bWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVl
bnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4X2Rlc3Ryb3kg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi1GSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0
X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0
X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZv
aWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNh
biBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEu
Ci0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRl
cm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBp
bnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5k
ZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25z
dCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9O
RUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5
c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZk
ZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYK
LQotI2VuZGlmCi0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQgbmV3X3N0YXRl
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHl5X3BvcF9zdGF0
ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgc3RhdGljIGludCB5eV90b3Bfc3Rh
dGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogQW1vdW50IG9mIHN0dWZmIHRvIHNs
dXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwotI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCi0jZGVm
aW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgotI2VuZGlmCi0KLS8qIENvcHkgd2hhdGV2ZXIgdGhl
IGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCi0jaWZuZGVmIEVD
SE8KLS8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBt
aWdodCBjb250YWluIE5VTCdzLAotICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KLSAqLwotI2RlZmlu
ZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKLSNlbmRpZgotCi0vKiBH
ZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQsIG9yIFlZX05VTEwsCi0gKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KLSAqLwotI2lm
bmRlZiBZWV9JTlBVVAotI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCi0g
ICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAot
ICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAgICAgaW50IG47IFwKLSAg
ICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gICAgICAgICAgICAgICAgIChj
ID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0gICAgICAgICAg
ICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gJ1xuJyApIFwKLSAgICAg
ICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBjID09IEVPRiAmJiBm
ZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4g
ZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1bHQgPSBuOyBcCi0gICAgICAg
IH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAgZXJybm89MDsgXAotICAgICAg
ICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYg
ZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAgICAgICAgIGlmKCBlcnJubyAh
PSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICAgICAg
ICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBlcnJubz0wOyBc
Ci0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAg
IH1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVj
dCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRvbid0IHdhbnQg
YW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQot
ICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50
cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVy
biBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQt
Y29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCi0j
ZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBvcnQgYSBmYXRh
bCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlfRkFUQUxfRVJS
T1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQotI2VuZGlmCi0KLS8qIGVu
ZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCi0KLS8q
IERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0
aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lmbmRlZiBZWV9E
RUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgcHBsZXggXAotICAg
ICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxvY19wYXJh
bSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCBwcGxleCBcCi0g
ICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5bGxvY19w
YXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAhWVlfREVDTCAqLwotCi0vKiBD
b2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQg
YW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZWV9VU0VSX0FD
VElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUgZXhlY3V0ZWQg
YXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0jZGVmaW5lIFlZ
X0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCi0gICAgaWYg
KCB5eWxlbmcgPiAwICkgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0
X2JvbCA9IFwKLSAgICAgICAgICAgICAgICAoeXl0ZXh0W3l5bGVuZyAtIDFdID09ICdcbicpOyBc
Ci0gICAgWVlfVVNFUl9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hp
Y2ggZG9lcyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsKLSAgICByZWdpc3RlciB5eV9z
dGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5
eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5bHZhbCA9IHl5bHZhbF9w
YXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotICAgIGlmICggIXl5Zy0+eXlf
aW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9pbml0ID0gMTsKLQotI2lmZGVmIFlZ
X1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYKLQotICAgICAgICBpZiAo
ICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0ID0gMTsgIC8qIGZp
cnN0IHN0YXJ0IHN0YXRlICovCi0KLSAgICAgICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAg
eXlpbiA9IHN0ZGluOwotCi0gICAgICAgIGlmICggISB5eW91dCApCi0gICAgICAgICAgICB5eW91
dCA9IHN0ZG91dDsKLQotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7Ci0gICAg
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZm
ZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBw
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB9Ci0KLSAgICB3aGlsZSAo
IDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwotICAgICAg
ICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0gICAgICAgIC8qIFN1cHBv
cnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQot
ICAgICAgICAvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0
aGUgc3RhcnQgb2YKLSAgICAgICAgICogdGhlIGN1cnJlbnQgcnVuLgotICAgICAgICAgKi8KLSAg
ICAgICAgeXlfYnAgPSB5eV9jcDsKLQotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0woKTsKLXl5X21h
dGNoOgotICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXIgWVlf
Q0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0gICAgICAgICAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRl
OwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gMTA1ICkKLSAgICAgICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlf
Y107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAo
IHl5X2N1cnJlbnRfc3RhdGUgIT0gMTA0ICk7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0gICAgICAgIHl5X2FjdCA9IHl5
X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotICAgICAgICBZWV9ET19CRUZPUkVfQUNUSU9O
OwotCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9j
YW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaW50IHl5
bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5eWwgKQotICAg
ICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCi0gICAgICAgICAgICAgICAg
ICAgICAgIAotICAgIGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13
aGlsZSgwKQotOwotICAgICAgICAgICAgfQotCi1kb19hY3Rpb246ICAvKiBUaGlzIGxhYmVsIGlz
IHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0KLSAgICAgICAgc3dpdGNoICgg
eXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAg
ICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotICAgICAgICAgICAgLyogdW5kbyB0aGUg
ZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0gICAgICAgICAgICAqeXlfY3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCi1jYXNl
IDE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MjoKLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCi0qeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15eWctPnl5X2NfYnVm
X3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBh
Z2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNy
b05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9PQko7Ci19Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMzoKLSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRv
IGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
IC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1Z
WV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRl
eHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci0gICAgWVlfQlJF
QUsKLWNhc2UgNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfVU5ERUY7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSA1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9JRjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0lGREVGOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfSUZO
REVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhB
U0hfRUxTRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX0VMSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfRU5ESUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIERFRklORUQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfUFJBR01BOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9WRVJTSU9OOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0xJTkU7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJREVO
VElGSUVSOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRVUAotewotICAg
IHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIElOVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VU
VVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAyMDoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHl5dGV4dFswXTsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDIxOgotWVlfUlVMRV9TRVRVUAoteyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMjI6Ci0vKiBydWxlIDIyIGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VU
VVAKLXsKLSAgICArK3l5bGluZW5vOyB5eWNvbHVtbiA9IDA7Ci0gICAgcmV0dXJuIHl5dGV4dFsw
XTsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Ci17IHl5dGVy
bWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLUVDSE87
Ci0gICAgWVlfQlJFQUsKLQotICAgIGNhc2UgWVlfRU5EX09GX0JVRkZFUjoKLSAgICAgICAgewot
ICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBj
aGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5
eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgICAgIC8qIFVuZG8gdGhlIGVmZmVj
dHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9o
b2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLQotICAgICAgICBp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZG
RVJfTkVXICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlJ3JlIHNjYW5uaW5nIGEg
bmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotICAgICAgICAgICAgICogcG9zc2libGUg
dGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKLSAgICAgICAgICAgICAqIGp1c3Qg
cG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCi0gICAgICAgICAgICAgKiBw
cGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKLSAgICAgICAgICAgICAqIGNv
bnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgotICAgICAgICAgICAg
ICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCi0g
ICAgICAgICAgICAgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2li
bHkgYQotICAgICAgICAgICAgICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3
IGlucHV0IHNvdXJjZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgeXlnLT55eV9uX2No
YXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKLSAgICAgICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9OT1JNQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2Ug
dGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0
aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAg
ICAgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVy
Ci0gICAgICAgICAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRv
IHRoZQotICAgICAgICAgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0
aCB0aGUgdGVzdAotICAgICAgICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8KLSAgICAgICAg
aWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkg
YSBOVUwuICovCi0gICAgICAgICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7Ci0KLSAg
ICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAvKiBPa2F5LCB3ZSdy
ZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKLSAgICAgICAgICAgICAqIHRyYW5zaXRp
b24uICBXZSBjb3VsZG4ndCBoYXZlCi0gICAgICAgICAgICAgKiB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLSAgICAgICAgICAgICAqIGZvciB1cyBiZWNhdXNlIGl0
IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAotICAgICAgICAgICAgICogd2l0aCB0aGUgcG9zc2li
aWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0Ci0gICAgICAgICAgICAgKiB3YW50IHRvIGJ1
aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKLSAgICAgICAgICAgICAqIHdpbGwg
cnVuIG1vcmUgc2xvd2x5KS4KLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICB5eV9uZXh0
X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7
Ci0KLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0K
LSAgICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAgICAgICB5eV9j
cCA9ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAg
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwot
ICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVy
KCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKLQotICAgICAgICAgICAgICAgIGlmICggcHB3
cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KLSAgICAgICAgICAgICAg
ICAgICAgICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLSAgICAgICAgICAg
ICAgICAgICAgICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotICAgICAgICAgICAgICAgICAg
ICAgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotICAgICAgICAgICAgICAgICAg
ICAgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KLSAgICAgICAgICAgICAgICAg
ICAgICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCi0gICAgICAgICAgICAg
ICAgICAgICAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0gICAgICAgICAg
ICAgICAgICAgICAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0gICAgICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9T
VEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAg
ICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55
eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgICAg
IHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwot
Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAg
ICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAg
ICBnb3RvIHl5X21hdGNoOwotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoK
LSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOwotCi0gICAg
ICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAg
ICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAg
ICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBZWV9GQVRBTF9FUlJP
UigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFj
dGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAg
IH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQgb2YgcHBsZXggKi8K
LQotLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCi0g
KgotICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAqICBFT0JfQUNU
X0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5u
aW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICogIEVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQg
b2YgZmlsZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRl
eHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLSAgICBpbnQgcmV0
X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKLSAgICAgICAgWVlfRkFUQUxf
RVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBv
ZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAgICB7IC8qIERvbid0IHRyeSB0byBmaWxsIHRo
ZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0Is
IHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgotICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBt
YXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICog
cHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1Rf
TEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgLyogVHJ5IHRvIHJl
YWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0
IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVy
X3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVzdCsrKSA9ICooc291cmNlKyspOwotCi0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBF
T0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgIHdoaWxl
ICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAgICAgICB7IC8qIE5vdCBlbm91Z2ggcm9vbSBp
biB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotICAgICAgICAgICAgLyoganVzdCBhIHNob3J0
ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgICAgICBZWV9CVUZGRVJf
U1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCi0gICAgICAgICAgICBpbnQgeXlfY19idWZf
cF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOwotCi0gICAgICAgICAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbmV3X3NpemUgPSBiLT55eV9idWZf
c2l6ZSAqIDI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAgKQotICAgICAg
ICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAqPSAy
OwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAg
ICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAg
ICAgICAgICAgICAgcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6
ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAgaWYgKCAhIGIt
Pnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAg
ICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0K
LSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9v
ZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21v
dmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9fcmVhZCA+IFlZ
X1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9T
SVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBV
VCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0p
LAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOwot
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0g
ICAgICAgIHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsK
LSAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9C
X0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfc2l6ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUg
bnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5
eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikg
cHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5l
d19zaXplICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5
Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
cyArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRleHRfcHRyID0g
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJl
dF92YWw7Ci19Ci0KLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVz
dCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCi0KLSAgICBzdGF0aWMgeXlfc3Rh
dGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIg
Y2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCi0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0g
ICAgeXlfY3VycmVudF9zdGF0ZSArPSBZWV9BVF9CT0woKTsKLQotICAgIGZvciAoIHl5X2NwID0g
eXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyAr
K3l5X2NwICkKLSAgICAgICAgewotICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5
X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKLSAgICAgICAgaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgeXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAg
ICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgIGlm
ICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgfQotICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Ci19
Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhl
IE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5vcHNpcwotICogIG5leHRfc3RhdGUgPSB5eV90cnlf
TlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCB5eV9pc19qYW07Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlz
IHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCi0gICAgcmVnaXN0
ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICByZWdpc3RlciBZWV9DSEFS
IHl5X2MgPSAxOwotICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAg
ICAgewotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9z
dGF0ZTsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAg
ICAgIH0KLSAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3VycmVudF9z
dGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgaWYgKCB5eV9j
dXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLSAgICAgICAgfQotICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgIHl5
X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwNCk7Ci0KLSAgICByZXR1cm4geXlfaXNf
amFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNpZm5kZWYgWVlfTk9fSU5QVVQKLSNp
ZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQot
I2VuZGlmCi0KLXsKLSAgICBpbnQgYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eV9ob2xkX2NoYXI7Ci0KLSAgICBpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAgICAvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMg
dG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLSAgICAgICAgICogSWYgdGhpcyBv
Y2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQotICAgICAgICAg
KiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVy
LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAg
ICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICAqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7IC8qIG5lZWQgbW9yZSBp
bnB1dCAqLwotICAgICAgICAgICAgaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+
eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXlnLT55eV9jX2J1Zl9wOwotCi0gICAgICAgICAg
ICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAg
ICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKLSAgICAgICAg
ICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKLSAgICAgICAgICAg
ICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwotICAgICAgICAgICAg
ICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotICAgICAgICAgICAgICAg
ICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAotICAgICAgICAgICAgICAgICAg
ICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgotICAgICAgICAgICAgICAgICAg
ICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLSAgICAgICAgICAgICAgICAg
ICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLSAgICAgICAgICAgICAgICAgICAgICovCi0K
LSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KLSAgICAgICAg
ICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5E
X09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVP
RjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0jaWZkZWYg
X19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVy
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgYyA9ICoo
dW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIn
cyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQg
Ki8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKLQotICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gKGMgPT0gJ1xuJyk7Ci0gICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCApCi0gICAgICAgICAgIAotICAg
IGRveyB5eWxpbmVubysrOwotICAgICAgICB5eWNvbHVtbj0wOwotICAgIH13aGlsZSgwKQotOwot
Ci0gICAgcmV0dXJuIGM7Ci19Ci0jZW5kaWYgIC8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLwotCi0v
KiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KLSAqIEBw
YXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0
IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0gKi8KLSAgICB2b2lkIHBwcmVz
dGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAg
IGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAg
ICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0g
ICAgfQotCi0gICAgcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAs
eXlzY2FubmVyKTsKLSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQot
LyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVS
X1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFRP
RE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9k
eQotICAgICAqIHdpdGgKLSAgICAgKiAgICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSgpOwotICAgICAq
ICAgICAgcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8KLSAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZv
ciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xk
X2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5
Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2No
YXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlz
IHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhl
IG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFw
KCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAgICAgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlz
IHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9
IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnM7Ci0gICAgeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotICAgIHl5aW4gPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0gICAgeXlnLT55eV9ob2xkX2NoYXIg
PSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4g
aW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0g
KiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGlu
IGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCi0gKi8K
LSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQg
IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0g
ICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigp
IiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0gICAgLyogeXlfY2hfYnVmIGhh
cyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQot
ICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAg
ICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUg
KyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigp
IiApOwotCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLSAgICBwcF9pbml0X2J1ZmZl
cihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ryb3kg
dGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVf
YnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0g
ICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9w
IGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJf
U1RBVEUpIDA7Ci0KLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAgICAgICBwcGZy
ZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotICAgIHBwZnJlZSgodm9p
ZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXpl
cyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRo
YW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFy
dCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewot
ICAgIGludCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBwcF9mbHVzaF9idWZmZXIoYiAseXlzY2Fu
bmVyKTsKLQotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5X2ZpbGxfYnVm
ZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2lu
aXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkg
b3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBk
b24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAqLwotICAgIGlm
IChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsK
LSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNf
aW50ZXJhY3RpdmUgPSAwOwotICAgIAotICAgIGVycm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNo
ZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggISBiICkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYi0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICAvKiBXZSBhbHdh
eXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwot
ICAgICAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNv
bmQgY2F1c2VzCi0gICAgICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55
eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9j
aF9idWZbMF07Ci0KLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkK
LSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNo
ZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0g
KiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3Rh
Y2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0
ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBw
cHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBU
aGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGlu
Zm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICAvKiBP
bmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLSAgICBp
ZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsr
OwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0KLSAgICAvKiBj
b3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0g
MTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlm
IHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgotICog
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwcG9wX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRf
QlVGRkVSKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSICx5eXNjYW5uZXIpOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5V
TEw7Ci0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0gICAgICAgIC0teXln
LT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0g
ICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQotfQotCi0vKiBBbGxvY2F0ZXMg
dGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9y
IGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBpbnQgbnVtX3RvX2FsbG9jOwotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAg
IGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0
aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwot
ICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3Rl
YWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUg
bmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0gMTsKLSAgICAg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxs
b2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxvYyAqIHNpemVv
ZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQot
ICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9j
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICAgICAg
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUg
Zm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDggLyogYXJi
aXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAg
ICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9Ci19Ci0KLS8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3Bl
Y2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1
ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBi
dWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVy
biB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZG
RVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotICAg
IGlmICggc2l6ZSA8IDIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgfHwKLSAgICAgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgKQotICAgICAgICAvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3Mu
ICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxs
b2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlm
ICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7
ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KLSAgICBiLT55eV9idWZfcG9zID0g
Yi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMDsKLSAgICBi
LT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7
Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0g
ICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOwotCi0gICAgcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQot
ICAgIHJldHVybiBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBz
Y2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9t
IGEgQGUgY29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBz
dHJpbmcgdG8gc2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
KiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqIEBu
b3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVz
LCB0aGVuIHVzZQotICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCi0gKi8KLVlZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgCi0gICAgcmV0dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3Ry
bGVuKHl5c3RyKSAseXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIg
c3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVz
IHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0
ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMg
ICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICBjaGFyICpidWY7Ci0gICAg
eXlfc2l6ZV90IG47Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVs
bCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9
IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5u
ZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgZm9yICggaSA9IDA7
IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAgICAgIGJ1ZltpXSA9IHl5Ynl0ZXNbaV07Ci0K
LSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7Ci0KLSAgICBiID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7
Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4g
cHBfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlz
IGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAotICAgICAqIGF3YXkgd2hlbiB3ZSdyZSBk
b25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0gICAgcmV0dXJu
IGI7Ci19Ci0KLSAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQgIG5ld19zdGF0ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0
ciA+PSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICkKLSAgICAgICAgewotICAgICAgICB5eV9z
aXplX3QgbmV3X3NpemU7Ci0KLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCArPSBZ
WV9TVEFSVF9TVEFDS19JTkNSOwotICAgICAgICBuZXdfc2l6ZSA9IHl5Zy0+eXlfc3RhcnRfc3Rh
Y2tfZGVwdGggKiBzaXplb2YoIGludCApOwotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0
X3N0YWNrICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBwYWxs
b2MobmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHBwcmVhbGxvYygodm9pZCAqKSB5eWctPnl5X3N0
YXJ0X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAgICBpZiAoICEgeXlnLT55
eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBtZW1v
cnkgZXhwYW5kaW5nIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayIgKTsKLSAgICAgICAgfQotCi0gICAg
eXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cisrXSA9IFlZX1NUQVJU
OwotCi0gICAgQkVHSU4obmV3X3N0YXRlKTsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3BvcF9z
dGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAtLXl5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyIDwgMCApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAic3RhcnQtY29uZGl0aW9u
IHN0YWNrIHVuZGVyZmxvdyIgKTsKLQotICAgIEJFR0lOKHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXln
LT55eV9zdGFydF9zdGFja19wdHJdKTsKLX0KLQotICAgIHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRl
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlnLT55eV9zdGFydF9zdGFj
a1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFdOwotfQotCi0jaWZuZGVmIFlZX0VYSVRfRkFJ
TFVSRQotI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHl5
X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKLSAgICBleGl0
KCBZWV9FWElUX0ZBSUxVUkUgKTsKLX0KLQotLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29y
a3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCi0KLSN1bmRlZiB5eWxlc3MKLSNkZWZpbmUgeXlsZXNz
KG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRvIGVmZmVjdHMgb2Yg
c2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAo
bik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotICAgICAg
ICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIHl5Zy0+eXlf
Y19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLSAgICAgICAgeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3Ag
PSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKLSAgICAgICAg
fSBcCi0gICAgd2hpbGUgKCAwICkKLQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVu
Y3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KLQotLyoqIEdldCB0aGUgdXNlci1kZWZpbmVk
IGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICByZXR1cm4geXlleHRyYTsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBs
aW5lIG51bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci1pbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICByZXR1cm4geXlsaW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQg
cHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYg
KCEgWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBy
ZXR1cm4geXljb2x1bW47Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9pbiAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5aW47Ci19Ci0KLS8qKiBHZXQgdGhl
IG91dHB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1
cm4geXlvdXQ7Ci19Ci0KLS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRf
bGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGVuZzsKLX0KLQot
LyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi0KLWNoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHJldHVybiB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBk
YXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KLSAqIEBwYXJh
bSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5l
ci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBw
c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwotfQotCi0vKiogU2V0IHRoZSBj
dXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9saW5lbm8gKGludCAg
bGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGxpbmVu
byBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlm
ICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNl
dF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAg
IHl5bGluZW5vID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1u
LgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBh
biBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZF
UiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRo
IG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWNvbHVtbiA9IGNvbHVtbl9u
bzsKLX0KLQotLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQg
dGhlIGN1cnJlbnQKLSAqIGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJs
ZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBz
ZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgotICovCi12b2lkIHBwc2V0X2luIChGSUxFICogIGluX3N0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9IGluX3N0ciA7Ci19Ci0KLXZv
aWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5b3V0ID0gb3V0X3N0ciA7Ci19Ci0KLWludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Ci19Ci0KLXZvaWQgcHBzZXRf
ZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eV9mbGV4
X2RlYnVnID0gYmRlYnVnIDsKLX0KLQotLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFu
ZCB5eWxsb2MgKi8KLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHJldHVybiB5eWx2YWw7Ci19Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAq
ICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bHZhbCA9IHl5
bHZhbF9wYXJhbTsKLX0KLQotWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZvaWQgcHBzZXRfbGxvYyAoWVlM
VFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bGxv
YyA9IHl5bGxvY19wYXJhbTsKLX0KLSAgICAKLS8qIFVzZXItdmlzaWJsZSBBUEkgKi8KLQotLyog
cHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNl
bGYsIHNvIGl0IGlzCi0gKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0
IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCi0gKiBUaGF0J3Mgd2h5IHdl
IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIg
bWFjcm9zLgotICovCi0KLWludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykK
LQotewotICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBF
SU5WQUw7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICpwdHJfeXlfZ2xvYmFscyA9
ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsK
LQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5P
TUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4
QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3Ig
cmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1
Y3QgeXlndXRzX3QpKTsKLQotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2ds
b2JhbHMgKTsKLX0KLQotLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25h
bGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKLSAqIGNvbnZlbnRpb24gb2YgdGFr
aW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQK
LSAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9j
YXRlZCBieSB0aGlzIGNhbGwgKGFuZAotICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBm
dW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgotICogVGhlIHVz
ZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUg
dG8gcHBhbGxvYyBpbgotICogdGhlIHl5ZXh0cmEgZmllbGQuCi0gKi8KLQotaW50IHBwbGV4X2lu
aXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9n
bG9iYWxzICkKLQotewotICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7Ci0KLSAgICBw
cHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKLQotICAgIGlmIChw
dHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAg
IHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3Qp
IHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0g
ICAgCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBF
Tk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAvKiBCeSBzZXR0aW5n
IHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCi0gICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBh
dCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAs
c2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotICAgIAotICAgIHBwc2V0X2V4dHJhICh5eV91c2Vy
X2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7Ci0gICAgCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xv
YmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFs
cyAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUg
c2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVy
ZS4KLSAgICAgKi8KLQotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKLSAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7
Ci0gICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKLSAgICB5eWctPnl5X2luaXQgPSAw
OwotICAgIHl5Zy0+eXlfc3RhcnQgPSAwOwotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIg
PSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOwotICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgPSAgTlVMTDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNpZmRlZiBZWV9T
VERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0OwotI2Vsc2UKLSAg
ICB5eWluID0gKEZJTEUgKikgMDsKLSAgICB5eW91dCA9IChGSUxFICopIDA7Ci0jZW5kaWYKLQot
ICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdl
IGFyZSBjYWxsZWQgYnkKLSAgICAgKiBwcGxleF9pbml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4g
MDsKLX0KLQotLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMuICovCi1pbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNo
IGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBwcF9k
ZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICAgICAgcHBwb3BfYnVmZmVyX3N0YXRl
KHl5c2Nhbm5lcik7Ci0gICAgfQotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAq
LwotICAgIHBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVyKTsKLSAgICB5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25k
aXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNj
YW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBS
ZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNj
YW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHBwbGV4KCkgaXMgY2FsbGVkLCBpbml0aWFs
aXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xvYmFscyggeXlzY2FubmVyKTsK
LQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25seSkuICovCi0g
ICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0gICAgeXlzY2FubmVyID0gTlVM
TDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMu
Ci0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkg
KGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQot
ICAgICAgICBzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxF
Tgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgbjsKLSAgICBmb3IgKCBuID0gMDsgc1tu
XTsgKytuICkKLSAgICAgICAgOwotCi0gICAgcmV0dXJuIG47Ci19Ci0jZW5kaWYKLQotdm9pZCAq
cHBhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJl
dHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKLX0KLQotdm9pZCAqcHByZWFsbG9jICAodm9p
ZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIC8q
IFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgK
LSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywg
YW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdv
cmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBh
bGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLSAgICAgKiBhbnkgcG9pbnRlciB0eXBlIHRv
IHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCi0gICAgICogYXMgdGhv
dWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAgICovCi0gICAgcmV0dXJuICh2b2lkICopIHJl
YWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lkIHBwZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBmcmVlKCAoY2hhciAqKSBwdHIgKTsgICAv
KiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KLX0KLQotI2RlZmluZSBZWVRB
QkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29u
c3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgaXMgb2Yg
dGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAgLy8gV2UganVz
dCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIgJiYgKGxlbiA+
IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpzdHJpbmcqIG5h
bWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICB7
Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQnKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBpICsgMSwgbGVu
IC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNT
RVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1pbnQg
Q29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5y
ZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAgICAgICAgICAg
KG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0gICAgICAgICAg
IChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0gMCwgZmlsZSA9
IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24ocHBnZXRfbGluZW5vKG1MZXhl
ciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmluZ0luZGV4KCk7
Ci0gICAgICAgIHBwc2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9uKGxpbmUsIGZp
bGUpLG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5wdXQtPnJlYWQoYnVmLCBtYXhTaXpl
KTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yVW5l
eHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9y
dCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnJlYWQ7Ci19Ci0KLWJvb2wg
Q29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQobUxleGVyID09IE5VTEwpOwotCi0g
ICAgaWYgKHBwbGV4X2luaXRfZXh0cmEodGhpcywmbUxleGVyKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUxleGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIpOwotCi0g
ICAgcHBsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjA3MiArMCww
IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyog
U2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4g
QwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIs
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lh
bCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwot
ICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0
ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRo
YXQgd29yayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tl
bGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxl
dG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRo
ZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3Zl
IHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRv
biBhbmQgdGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNw
ZWNpYWwgZXhjZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNv
bi4gICovCi0KLS8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJk
IFN0YWxsbWFuLCBieQotICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2Vt
YW50aWMiIHBhcnNlci4gICovCi0KLS8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxk
IGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCi0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFt
ZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKLSAgIHZhcmlhYmxl
cywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCi0g
ICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZp
bGVzIHRvCi0gICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90
ZWQgIklORlJJTkdFUyBPTgotICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCi0KLS8qIElk
ZW50aWZ5IEJpc29uIG91dHB1dC4gICovCi0jZGVmaW5lIFlZQklTT04gMQotCi0vKiBCaXNvbiB2
ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCi0KLS8qIFNrZWxldG9u
IG5hbWUuICAqLwotI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVyZSBw
YXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVVJFIDEKLQotLyogVXNpbmcgbG9jYXRpb25zLiAgKi8K
LSNkZWZpbmUgWVlMU1BfTkVFREVEIDEKLQotLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5k
IGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNkZWZpbmUgeXlwYXJzZSBwcHBhcnNlCi0jZGVmaW5lIHl5
bGV4ICAgcHBsZXgKLSNkZWZpbmUgeXllcnJvciBwcGVycm9yCi0jZGVmaW5lIHl5bHZhbCAgcHBs
dmFsCi0jZGVmaW5lIHl5Y2hhciAgcHBjaGFyCi0jZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZwotI2Rl
ZmluZSB5eW5lcnJzIHBwbmVycnMKLSNkZWZpbmUgeXlsbG9jIHBwbGxvYwotCi0vKiBUb2tlbnMu
ICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5
cGUgewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNI
X0lGID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2
MiwKLSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhB
U0hfRU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAy
NjcsCi0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwK
LSAgICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhB
U0hfREVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAg
SU5UX0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURF
TlRJRklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFT
SCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZp
bmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hf
RUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQot
I2RlZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNI
X1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVS
U0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkog
MjcyCi0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAy
NzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0K
LQotCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwot
Ci0KLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4
dC5oIgotCi0jZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlE
RUJVRyAxCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBk
ZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNz
YWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9T
RQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZF
UkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZu
ZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlw
ZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyog
c3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsK
LX0KLS8qIExpbmUgMTg3IG9mIHlhY2MuYy4gICovCi0KLSAgICBZWVNUWVBFOwotIyBkZWZpbmUg
eXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBk
ZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwg
MQotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQRV9J
U19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGluZTsK
LSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29sdW1u
OwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50OyB3
aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRl
ZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotLyogQ29weSB0aGUgc2Vjb25k
IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLWV4dGVybiBpbnQgeXlsZXgoWVlT
VFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5
eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCog
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3Rh
dGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wg
Y29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQq
IGNvbnRleHQpOwotCi0KLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNo
b3J0Ci0jIHVuZGVmIHNob3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRl
ZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hh
ciB5eXR5cGVfdWludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZ
VFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBl
ZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQx
NgotdHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBF
X0lOVDE2Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRl
ZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMg
aWZkZWYgX19TSVpFX1RZUEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMg
ZWxpZiBkZWZpbmVkIHNpemVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEg
ZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci0jICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LwotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1Qg
dW5zaWduZWQgaW50Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAo
KFlZU0laRV9UKSAtMSkKLQotI2lmbmRlZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBF
TkFCTEVfTkxTCi0jICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50
aW1lIiwgbXNnaWQpCi0jICBlbmRpZgotIyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUg
WVlfKG1zZ2lkKSBtc2dpZAotIyBlbmRpZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12
YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8
IGRlZmluZWQgX19HTlVDX18KLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UK
LSMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVu
Y3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9u
cy4gICovCi0jaWZuZGVmIGxpbnQKLSMgZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGlu
dCBpKQotI2Vsc2UKLXN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsK
LSAgcmV0dXJuIGk7Ci19Ci0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZ
RVJST1JfVkVSQk9TRQotCi0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsg
ZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0Vf
QUxMT0NBCi0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVk
IF9fQlVJTFRJTl9WQV9BUkdfSU5DUgotIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0j
ICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
Ci0jICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgYWxsb2NhCi0jICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVk
IF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAg
ICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
IyAgICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAg
ZW5kaWYKLSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRl
ZiBZWVNUQUNLX0FMTE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5p
bmcuICAqLwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0g
d2hpbGUgKFlZSUQgKDApKQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8q
IFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9t
IG9mIHRoZSBzdGFjaywKLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFz
IDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAo
TikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAg
ICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNr
IHNsb3RzLiAgKi8KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVh
c29uYWJsZSBjaXJjYSAyMDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFD
S19BTExPQyBZWU1BTExPQwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVN
IFlZU0laRV9NQVhJTVVNCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYg
ISBkZWZpbmVkIF9TVERMSUJfSCBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwg
ZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVk
IGZyZWUpKSkKLSMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLwotIyAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAx
Ci0jICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlN
QUxMT0MgbWFsbG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJ
Ql9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxv
YyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5k
aWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0j
ICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYK
LSNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQot
Ci0jaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVz
cGx1cyBcCi0gICAgIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lT
X1RSSVZJQUwgXAotICAgICAgICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlT
VFlQRV9JU19UUklWSUFMKSkpCi0KLS8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQg
Zm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50
MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICAgIFlZTFRZUEUgeXlsczsKLX07Ci0KLS8qIFRo
ZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0
aGUgbmV4dC4gICovCi0jIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9u
IHl5YWxsb2MpIC0gMSkKLQotLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdo
IHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCi0gICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVm
aW5lIFlZU1RBQ0tfQllURVMoTikgXAotICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2
KSArIHNpemVvZiAoWVlTVFlQRSkgKyBzaXplb2YgKFlZTFRZUEUpKSBcCi0gICAgICArIDIgKiBZ
WVNUQUNLX0dBUF9NQVhJTVVNKQotCi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRv
IFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8K
LSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18K
LSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21l
bWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAg
IGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSAgICAgIFwKLSAgICAgIGRvICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWVNJWkVfVCB5
eWk7ICAgICAgICAgICAgIFwKLSAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlp
KyspICAgXAotICAgICAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0j
IGVuZGlmCi0KLS8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUg
bmV3IG9uZS4gIFRoZQotICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUg
Z2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ss
IGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZh
bmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAg
IHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5l
d2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3Rh
Y2ssIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5T
dGFjazsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICB5eXB0ciAr
PSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgXAotICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0K
LSNlbmRpZgotCi0vKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24g
c3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFMICAyCi0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBp
biBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMjQ3Ci0KLS8qIFlZTlRPS0VOUyAtLSBO
dW1iZXIgb2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA0NwotLyogWVlOTlRT
IC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDEyCi0vKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjIKLS8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDkx
Ci0KLS8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLwotI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFY
VVRPSyAgIDI3NgotCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0
ZVtZWVhdIDogWVlVTkRFRlRPSykKLQotLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAyMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgNDMsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgIDM3LCAgICA0MCwgICAgIDIsCi0gICAgICAyMywgICAgMjQs
ICAgIDM2LCAgICAzMywgICAgMjUsICAgIDM0LCAgICAzMiwgICAgMzUsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgNDQsICAgIDQ1LAotICAgICAgMjgsICAgIDQyLCAgICAyOSwgICAgNDYsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgIDI2LCAgICAgMiwgICAgMjcsICAgIDM4LCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzAsICAgIDM5LCAgICAzMSwgICAgNDEs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNb
WVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4g
aW4KLSAgIFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQot
ewotICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAg
IDEzLCAgICAxNiwgICAgMTksCi0gICAgICAyMywgICAgMzAsICAgIDM0LCAgICAzOCwgICAgNDIs
ICAgIDQ2LCAgICA1MCwgICAgNTMsICAgIDU2LCAgICA1OSwKLSAgICAgIDYyLCAgICA2NSwgICAg
NjgsICAgIDcxLCAgICA3MiwgICAgNzQsICAgIDc1LCAgICA3NywgICAgODEsICAgIDgzLAotICAg
ICAgODYsICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk5LCAgIDEwMSwgICAxMDMsICAgMTA1LCAg
IDEwNywgICAxMDksCi0gICAgIDExMSwgICAxMTMsICAgMTE1LCAgIDExNywgICAxMTksICAgMTIx
LCAgIDEyMywgICAxMjUsICAgMTI3LCAgIDEyOSwKLSAgICAgMTMxLCAgIDEzMywgICAxMzUsICAg
MTM3LCAgIDEzOSwgICAxNDEsICAgMTQzLCAgIDE0NSwgICAxNDcsICAgMTQ5LAotICAgICAxNTEs
ICAgMTUzLCAgIDE1NQotfTsKLQotLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9m
IHRoZSBydWxlcycgUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0K
LXsKLSAgICAgIDQ4LCAgICAgMCwgICAgLTEsICAgIC0xLCAgICA0OCwgICAgNDksICAgIC0xLCAg
ICA1MCwgICAgLTEsICAgIDUxLAotICAgICAgLTEsICAgIDIyLCAgICAtMSwgICAgNTUsICAgIDIy
LCAgICAtMSwgICAgIDMsICAgIDIyLCAgICAtMSwgICAgMTcsCi0gICAgICA1MiwgICAgMjIsICAg
IC0xLCAgICAxOCwgICAgMjMsICAgIDUzLCAgICAyNCwgICAgNTIsICAgIDIyLCAgICAtMSwKLSAg
ICAgICA0LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgNSwgICAgNTQsICAgIDIyLCAgICAtMSwg
ICAgIDYsICAgIDIxLAotICAgICAgMjIsICAgIC0xLCAgICAgNywgICAgMjEsICAgIDIyLCAgICAt
MSwgICAgIDksICAgIDU0LCAgICAyMiwgICAgLTEsCi0gICAgICAgOCwgICAgMjIsICAgIC0xLCAg
ICAxMCwgICAgMjIsICAgIC0xLCAgICAxMiwgICAgMjIsICAgIC0xLCAgICAxMywKLSAgICAgIDIy
LCAgICAtMSwgICAgMTQsICAgIDIyLCAgICAtMSwgICAgMTUsICAgIDIyLCAgICAtMSwgICAgMTYs
ICAgIDIyLAotICAgICAgLTEsICAgIC0xLCAgICA1NSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
LTEsICAgIDUzLCAgICAyNSwgICAgMjEsCi0gICAgICAtMSwgICAgNTYsICAgIC0xLCAgICA1NCwg
ICAgNTYsICAgIC0xLCAgICA1NywgICAgLTEsICAgIDU1LCAgICA1NywKLSAgICAgIC0xLCAgICAx
MSwgICAgMjEsICAgIC0xLCAgICAxMSwgICAgMjMsICAgIDIxLCAgICAyNCwgICAgLTEsICAgIDU3
LAotICAgICAgLTEsICAgIDU4LCAgICAtMSwgICAgMTksICAgIC0xLCAgICAyMCwgICAgLTEsICAg
IDIxLCAgICAtMSwgICAgMjYsCi0gICAgICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEs
ICAgIDI5LCAgICAtMSwgICAgMjMsICAgIC0xLCAgICAyNCwKLSAgICAgIC0xLCAgICAzMCwgICAg
LTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LAotICAg
ICAgLTEsICAgIDM1LCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAzNywgICAgLTEsICAgIDM4LCAg
ICAtMSwgICAgMzksCi0gICAgICAtMSwgICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQy
LCAgICAtMSwgICAgNDMsICAgIC0xLCAgICA0NCwKLSAgICAgIC0xLCAgICA0NSwgICAgLTEsICAg
IDI1LCAgICAtMSwgICAgNDYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNl
IGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA2MywgICAgNjMsICAg
IDY1LCAgICA2OSwgICAgNzAsICAgIDc0LCAgICA3NSwgICAgODQsICAgIDg1LAotICAgICAgODgs
ICAgIDkxLCAgICA5NCwgICAgOTcsICAgMTAwLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDExMCwg
ICAxMTEsCi0gICAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExOCwgICAxMTksICAgMTIyLCAgIDEy
MywgICAxMjcsICAgMTMzLCAgIDEzNywKLSAgICAgMTQ0LCAgIDE0OCwgICAxNTUsICAgMTU3LCAg
IDE1OSwgICAxNjMsICAgMTY2LCAgIDE2OSwgICAxNzIsICAgMTc4LAotICAgICAxNzksICAgMTgw
LCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgs
Ci0gICAgIDE4OSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDE5NSwgICAx
OTYsICAgMTk3LCAgIDE5OCwKLSAgICAgMTk5LCAgIDIwMCwgICAyMDEKLX07Ci0jZW5kaWYKLQot
I2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5B
TUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgot
ICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9u
dGVybWluYWxzLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewot
ICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIkhBU0giLCAiSEFTSF9VTkRFRiIsICJI
QVNIX0lGIiwKLSAgIkhBU0hfSUZERUYiLCAiSEFTSF9JRk5ERUYiLCAiSEFTSF9FTFNFIiwgIkhB
U0hfRUxJRiIsICJIQVNIX0VORElGIiwKLSAgIkRFRklORUQiLCAiSEFTSF9FUlJPUiIsICJIQVNI
X1BSQUdNQSIsICJIQVNIX0VYVEVOU0lPTiIsICJIQVNIX1ZFUlNJT04iLAotICAiSEFTSF9MSU5F
IiwgIkhBU0hfREVGSU5FX09CSiIsICJIQVNIX0RFRklORV9GVU5DIiwgIklOVF9DT05TVEFOVCIs
Ci0gICJGTE9BVF9DT05TVEFOVCIsICJJREVOVElGSUVSIiwgIidcXG4nIiwgIicoJyIsICInKSci
LCAiJywnIiwgIidbJyIsCi0gICInXSciLCAiJzwnIiwgIic+JyIsICIneyciLCAiJ30nIiwgIicu
JyIsICInKyciLCAiJy0nIiwgIicvJyIsICInKiciLAotICAiJyUnIiwgIideJyIsICInfCciLCAi
JyYnIiwgIid+JyIsICInPSciLCAiJyEnIiwgIic6JyIsICInOyciLCAiJz8nIiwKLSAgIiRhY2Nl
cHQiLCAiaW5wdXQiLCAibGluZSIsICJ0ZXh0X2xpbmUiLCAiY29udHJvbF9saW5lIiwKLSAgInJl
cGxhY2VtZW50X2xpc3QiLCAicGFyYW1ldGVyX2xpc3QiLCAiY29uZGl0aW9uYWxfbGlzdCIsICJ0
b2tlbl9saXN0IiwKLSAgImNvbmRpdGlvbmFsX3Rva2VuIiwgInRva2VuIiwgIm9wZXJhdG9yIiwg
MAotfTsKLSNlbmRpZgotCi0jIGlmZGVmIFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZTEVYLU5VTV0g
LS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRva2VuIFlZTEVY
LU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KLXsKLSAg
ICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2Miwg
ICAyNjMsICAgMjY0LAotICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3
MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCi0gICAgIDI3NSwgICAyNzYsICAgIDEwLCAg
ICA0MCwgICAgNDEsICAgIDQ0LCAgICA5MSwgICAgOTMsICAgIDYwLCAgICA2MiwKLSAgICAgMTIz
LCAgIDEyNSwgICAgNDYsICAgIDQzLCAgICA0NSwgICAgNDcsICAgIDQyLCAgICAzNywgICAgOTQs
ICAgMTI0LAotICAgICAgMzgsICAgMTI2LCAgICA2MSwgICAgMzMsICAgIDU4LCAgICA1OSwgICAg
NjMKLX07Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJv
bCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXIxW10gPQotewotICAgICAgIDAsICAgIDQ3LCAgICA0OCwgICAgNDgsICAgIDQ5LCAgICA0OSwg
ICAgNTAsICAgIDUwLCAgICA1MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1
MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAg
ICA1MSwgICAgNTEsICAgIDUyLCAgICA1MiwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTQsICAg
IDU0LAotICAgICAgNTUsICAgIDU1LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcs
ICAgIDU3LCAgICA1NywgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwg
ICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAot
ICAgICAgNTgsICAgIDU4LCAgICA1OAotfTsKLQotLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBz
eW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwotc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQotewotICAgICAgIDAsICAgICAyLCAgICAgMCwg
ICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDMsCi0gICAgICAg
NiwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAg
ICAxLCAgICAgMywgICAgIDEsICAgICAyLAotICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMQotfTsKLQotLyogWVlE
RUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRl
Ci0gICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxz
ZSB0byBkby4gIFplcm8KLSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAgICAgMiwgICAgIDAs
ICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAg
MCwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgICA2LCAgICA0MywgICAgNDQsICAgIDYxLCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDUsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKLSAgICAg
IDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjIsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICAwLAotICAgICAgMzAsICAgIDM1LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMjgsICAgIDM0LCAgICAgMCwgICAgIDAsCi0gICAgICAxNiwgICAgIDAsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAyNCwKLSAgICAgIDI1LCAg
ICAgNywgICAgMzEsICAgIDExLCAgICAzMiwgICAgIDAsICAgIDEyLCAgICAyOSwgICAgMTMsICAg
IDE0LAotICAgICAgMTUsICAgICA5LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAs
ICAgIDMzLCAgICAgMCwgICAgMjcsCi0gICAgICAxMAotfTsKLQotLyogWVlERUZHT1RPW05URVJN
LU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAg
ICAgIC0xLCAgICAgMSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNjgsICAgIDgzLCAgICA1NSwg
ICAgNjksICAgIDU2LAotICAgICAgNTcsICAgIDUxCi19OwotCi0vKiBZWVBBQ1RbU1RBVEUtTlVN
XSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLSAgIFNUQVRF
LU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC01NQotc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eXBhY3RbXSA9Ci17Ci0gICAgIC01NSwgICAgNzMsICAgLTU1LCAgIC0xNywgICAtMTgs
ICAgMTQ1LCAgIC0xMCwgICAgLTksICAgLTE2LCAgIDE0NSwKLSAgICAgIC04LCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjcsICAgMjAxLCAgICAyOCwgICAtNTUsICAgLTU1LAotICAg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgMTczLAotICAgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAgMzAsICAgLTE5LCAgICAtMywgICAtNTUsICAgLTU1LCAgICAzMSwg
ICAgMzIsCi0gICAgIC01NSwgICAxMDksICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgIDMzLCAgIDIwMSwKLSAgICAgIDI5LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAgMzUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtMTUsICAgLTExLCAgIDIwMSwgICAgMzYsICAgLTU1LCAgICAzNywgICAtNTUs
Ci0gICAgIC01NQotfTsKLQotLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQotewotICAgICAtNTUsICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC0yNywgICAtNTUsICAgIDUxLCAgICA2MCwgICAtNTQsCi0gICAgICAtMSwg
ICAtNTUKLX07Ci0KLS8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBp
biBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJ
ZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9z
aXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5G
LCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KLXsKLSAgICAgIDUwLCAgICA3NywgICAgNzQsICAg
IDUzLCAgICA3NSwgICAgNTIsICAgIDYwLCAgICA3NywgICAgNTQsICAgIDg1LAotICAgICAgODYs
ICAgIDU4LCAgICA1OSwgICAgODcsICAgIDYyLCAgICA1MCwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgNzYsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAotICAgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA3MiwgICAgNjcs
Ci0gICAgICA4MiwgICAgNzAsICAgIDczLCAgICA3OCwgICAgNzksICAgIDgxLCAgICA4NCwgICAg
ODksICAgIDg4LCAgICA5MCwKLSAgICAgIDYxLCAgICA0OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgNzIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgNTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCi0gICAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwKLSAgICAgIDU0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTgsICAgIDE5LAotICAgICAgMjAsICAgIDgwLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwK
LSAgICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDU0LCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKLSAgICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3MSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKLSAgICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LAotICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NQotfTsKLQotc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Ci17Ci0gICAgICAgMSwgICAgNTUsICAgIDIxLCAg
ICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwgICAgNjEsICAgIDExLCAgICAyNCwKLSAgICAgIDI1
LCAgICAyMSwgICAgMjEsICAgIDI0LCAgICAyMiwgICAgMTYsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNDksICAgIDIy
LAotICAgICAgMjEsICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjEsICAg
IDIxLCAgICA4NSwgICAgMjIsCi0gICAgICAgOSwgICAgIDEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDY5LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDg1LCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAotICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsCi0gICAgICAxMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
Ci0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAtMSwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCi0gICAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYKLX07Ci0KLS8qIFlZU1RP
U1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0g
ICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlzdG9zW10gPQotewotICAgICAgIDAsICAgIDQ4LCAgICAgMCwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1NSwKLSAgICAgIDU3LCAg
ICA1OCwgICAgMjIsICAgIDIxLCAgICAxMSwgICAgNTQsICAgIDU2LCAgICA1NywgICAgMjEsICAg
IDIxLAotICAgICAgMjIsICAgIDU0LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIs
ICAgIDIyLCAgICA1MiwgICAgNTUsCi0gICAgICAyMywgICAgMjIsICAgIDU3LCAgICAyMiwgICAg
MjEsICAgIDIzLCAgICAyMiwgICAgNTYsICAgIDIyLCAgICAyMiwKLSAgICAgIDIyLCAgICAyMiwg
ICAgMjEsICAgIDUzLCAgICAyMSwgICAgMjQsICAgIDI1LCAgICAyNCwgICAgNTIsICAgIDIxLAot
ICAgICAgMjIKLX07Ci0KLSNkZWZpbmUgeXllcnJvayAgICAgKHl5ZXJyc3RhdHVzID0gMCkKLSNk
ZWZpbmUgeXljbGVhcmluICAgKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkgICAg
ICgtMikKLSNkZWZpbmUgWVlFT0YgICAgICAgMAotCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8g
eXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5l
IFlZRVJST1IgICAgIGdvdG8geXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQg
ZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVh
c2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0Mu
Ci0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNh
biBnby4gICovCi0KLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgotCi0jZGVmaW5l
IFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tl
biwgVmFsdWUpICAgICAgICAgICAgICAgICAgXAotZG8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKSAgICAgICAgICAg
ICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXljaGFy
ID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUp
OyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsgICAgICAgICAgICAgICBcCi0gICAgICBZWVBPUFNUQUNLICgxKTsgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6
IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKFlZ
SUQgKDApKQotCi0KLSNkZWZpbmUgWVlURVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAy
NTYKLQotCi0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhT
WzFdIHRvIFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1w
dHkgbG9jYXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChh
bHdheXMgZGVmaW5lZCkuICAqLwotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0td
KQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVu
dCwgUmhzLCBOKSAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJo
cywgMSkuZmlyc3RfbGluZTsgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZ
UkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2xp
bmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7ICAgICBcCi0gICAgICAoQ3VycmVu
dCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47ICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAg
PSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOyAgICAgICAgICAg
ICAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29s
dW1uID0gICAgICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOyAgICAg
ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdo
aWxlIChZWUlEICgwKSkKLSNlbmRpZgotCi0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50
IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgotICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRh
dGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKLSAgIHdlIHdvbid0IGJyZWFr
IHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KLQot
I2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKLSMgIGRl
ZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICAgICAgICAgIFwKLSAgICAgZnByaW50
ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwgICAgICAgICAgXAotICAgICAgICAgIChMb2MpLmZpcnN0
X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwgXAotICAgICAgICAgIChMb2MpLmxhc3RfbGluZSwg
IChMb2MpLmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQo
RmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBj
YWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZ
TEVYX1BBUkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhf
UEFSQU0pCi0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCi0j
ZW5kaWYKLQotLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVC
VUcKLQotIyBpZm5kZWYgWVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMg
ZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAot
ICAgIFlZRlBSSU5URiBBcmdzOyAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQot
IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAg
ICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xf
cHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwg
VmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJc
biIpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlf
c3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBj
b25zdCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAs
IHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFs
dWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4
dCkKLSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlv
bnA7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVl
cCkKLSAgICByZXR1cm47Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0
KTsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJ
TlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZ
VVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUg
Knl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZ
TFRZUEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0j
ZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2
YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGlu
dCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZ
UEUgY29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsK
LSNlbmRpZgotewotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlv
dXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBS
SU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICBZWV9M
T0NBVElPTl9QUklOVCAoeXlvdXRwdXQsICp5eWxvY2F0aW9ucCk7Ci0gIFlZRlBSSU5URiAoeXlv
dXRwdXQsICI6ICIpOwotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUs
IHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICIpIik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUg
c3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQp
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
c3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBl
X2ludDE2ICp0b3ApCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20s
IHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsK
LSNlbmRpZgotewotICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwotICBmb3IgKDsg
Ym90dG9tIDw9IHRvcDsgKytib3R0b20pCi0gICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAq
Ym90dG9tKTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwotfQotCi0jIGRlZmluZSBZWV9T
VEFDS19QUklOVChCb3R0b20sIFRvcCkgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAg
ICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBn
b2luZyB0byBiZSByZWR1Y2VkLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgWVlM
VFlQRSAqeXlsc3AsIGludCB5eXJ1bGUsIHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0
YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjb250ZXh0
KQotICAgIFlZU1RZUEUgKnl5dnNwOwotICAgIFlZTFRZUEUgKnl5bHNwOwotICAgIGludCB5eXJ1
bGU7Ci0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9
IHl5cjJbeXlydWxlXTsKLSAgaW50IHl5aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5
eXJsaW5lW3l5cnVsZV07Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkg
cnVsZSAlZCAobGluZSAlbHUpOlxuIiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAg
LyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwg
eXlucmhzOyB5eWkrKykKLSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAi
LCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCi0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKLSAgICAgICAgICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAg
ICAgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAg
fQotfQotCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAg
ICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgXAotICAgIHl5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJ
RCAoMCkpCi0KLS8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0
IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4g
ICovCi1pbnQgeXlkZWJ1ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklO
VEYoQXJncykKLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExv
Y2F0aW9uKQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZ
WV9SRURVQ0VfUFJJTlQoUnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5J
VERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5k
ZWYgWVlJTklUREVQVEgKLSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZ
TUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2
ZSBvbmx5Ci0gICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2Vk
KS4KLQotICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFy
ZSB1bmRlZmluZWQgaWYKLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMg
KFlZTUFYREVQVEgpCi0gICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdl
ciBhcml0aG1ldGljLiAgKi8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERF
UFRIIDEwMDAwCi0jZW5kaWYKLQotDAotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVm
IHl5c3RybGVuCi0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAot
IyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3Ro
IG9mIFlZU1RSLiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1zdGF0aWMgWVlTSVpFX1QKLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1z
dGF0aWMgWVlTSVpFX1QKLXl5c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsK
LSNlbmRpZgotewotICBZWVNJWkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5
bGVuXTsgeXlsZW4rKykKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5k
aWYKLSMgZW5kaWYKLQotIyBpZm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19f
ICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUg
eXlzdHBjcHkgc3RwY3B5Ci0jICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJu
aW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAq
LwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFy
ICoKLXl5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0
YXRpYyBjaGFyICoKLXl5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsK
LSAgICBjb25zdCBjaGFyICp5eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7
Ci0gIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysr
KSAhPSAnXDAnKQotICAgIGNvbnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5k
aWYKLSMgZW5kaWYKLQotIyBpZm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBj
b250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVv
dGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAg
VGhlCi0gICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1
bmxlc3MgdGhlIHN0cmluZwotICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3Ig
YmFja3NsYXNoIChvdGhlciB0aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlz
IHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsg
aW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBo
YXZlIGJlZW4uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBj
b25zdCBjaGFyICp5eXN0cikKLXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAg
WVlTSVpFX1QgeXluID0gMDsKLSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAg
ICBmb3IgKDs7KQotICAgIHN3aXRjaCAoKisreXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcn
OgotICAgICAgY2FzZSAnLCc6Ci0gICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQot
ICAgICAgY2FzZSAnXFwnOgotICAgICAgICBpZiAoKisreXlwICE9ICdcXCcpCi0gICAgICAgICAg
Z290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0g
PSAqeXlwOwotICAgICAgICB5eW4rKzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJyIn
OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0gICAg
ICAgIHJldHVybiB5eW47Ci0gICAgICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAg
IH0KLQotICBpZiAoISB5eXJlcykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICBy
ZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyog
Q29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQg
dG9rZW4KLSAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgY29waWVkLAotICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5
dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3Qg
cmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMg
YSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0g
ICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2Nj
dXJzIGR1cmluZwotICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5
c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17
Ci0gIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwg
eXluICYmIHl5biA8PSBZWUxBU1QpKQotICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAg
ICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlz
aXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5
c2l6ZSA9IHl5c2l6ZTA7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6
ZV9vdmVyZmxvdyA9IDA7Ci0gICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TSA9IDUgfTsKLSAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01B
WElNVU1dOwotICAgICAgaW50IHl5eDsKLQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhn
ZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0gICAgIGNvbnN0
cnVjdGVkIG9uIHRoZSBmbHkuICAqLwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBl
eHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4
cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAg
ICAgIGNoYXIgKnl5Zm10OwotICAgICAgY2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNo
YXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsK
LSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMi
OwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFy
IHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKLSAgICAgICAgICAgICsgc2l6ZW9mIHl5ZXhw
ZWN0aW5nIC0gMQotICAgICAgICAgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0g
LSAyKQotICAgICAgICAgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOwotICAgICAgY2hhciBj
b25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsKLQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1Z
WU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICBZWUNIRUNL
LiAgKi8KLSAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLQotICAgICAg
LyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCi0g
ICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICBpbnQgeXl4ZW5k
ID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAg
ICBpbnQgeXljb3VudCA9IDE7Ci0KLSAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwot
ICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Ci0KLSAgICAg
IGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCi0gICAgaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotICAgICAgewotICAgICAg
ICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAgICAg
IHsKLSAgICAgICAgeXljb3VudCA9IDE7Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gICAg
ICAgIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4
XTsKLSAgICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhd
KTsKLSAgICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAg
ICAgeXlzaXplID0geXlzaXplMTsKLSAgICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5
cHJlZml4KTsKLSAgICAgICAgeXlwcmVmaXggPSB5eW9yOwotICAgICAgfQotCi0gICAgICB5eWYg
PSBZWV8oeXlmb3JtYXQpOwotICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYp
OwotICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLSAgICAgIHl5
c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCi0gICAgcmV0dXJu
IFlZU0laRV9NQVhJTVVNOwotCi0gICAgICBpZiAoeXlyZXN1bHQpCi0gICAgewotICAgICAgLyog
QXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNl
LgotICAgICAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJh
bnNsYXRpb24KLSAgICAgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJl
ciBvZiAiJXMicy4gICovCi0gICAgICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKLSAgICAgIGludCB5
eWkgPSAwOwotICAgICAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKLSAgICAgICAgewot
ICAgICAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5
aSsrXSk7Ci0gICAgICAgICAgeXlmICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5eWYrKzsKLSAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgICAgcmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYg
LyogWVlFUlJPUl9WRVJCT1NFICovCi0MCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRv
IHRoaXMgc3ltYm9sLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNn
LCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgWVlMVFlQRSAqeXlsb2NhdGlvbnAsIHBw
OjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1z
ZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgY29uc3QgY2hh
ciAqeXltc2c7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKLSAgICBZ
WUxUWVBFICp5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgot
ewotICBZWVVTRSAoeXl2YWx1ZXApOwotICBZWVVTRSAoeXlsb2NhdGlvbnApOwotICBZWVVTRSAo
Y29udGV4dCk7Ci0KLSAgaWYgKCF5eW1zZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZ
X1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQot
ICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0g
ICAgfQotfQotDAotCi0vKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlw
ZXMuICAqLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwot
I2Vsc2UKLWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0g
Ki8KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBh
cnNlIChwcDo6Q29udGV4dCogY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5k
aWYKLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0t
LS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0K
LSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2Ug
KHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFN
KQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9Q
QVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAot
eXlwYXJzZSAocHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250
ZXh0KQotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyog
VGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0K
LS8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLS8q
IExvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWUxUWVBFIHl5
bGxvYzsKLQotICBpbnQgeXlzdGF0ZTsKLSAgaW50IHl5bjsKLSAgaW50IHl5cmVzdWx0OwotICAv
KiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVk
LiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGlu
dGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7
Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFu
ZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLwotICBjaGFyIHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIg
Knl5bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNn
YnVmOwotI2VuZGlmCi0KLSAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAg
YHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKLSAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFu
dGljIHZhbHVlcywKLSAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KLQotICAgICBS
ZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3Zl
cmZsb3cKLSAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCi0KLSAgLyogVGhl
IHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAg
eXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAg
LyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KLSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRE
RVBUSF07Ci0gIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKLSAgWVlTVFlQRSAqeXl2c3A7Ci0KLSAg
LyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KLSAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07
Ci0gIFlZTFRZUEUgKnl5bHMgPSB5eWxzYTsKLSAgWVlMVFlQRSAqeXlsc3A7Ci0gIC8qIFRoZSBs
b2NhdGlvbnMgd2hlcmUgdGhlIGVycm9yIHN0YXJ0ZWQgYW5kIGVuZGVkLiAgKi8KLSAgWVlMVFlQ
RSB5eWVycm9yX3JhbmdlWzJdOwotCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0g
KE4pLCB5eXNzcCAtPSAoTiksIHl5bHNwIC09IChOKSkKLQotICBZWVNJWkVfVCB5eXN0YWNrc2l6
ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2Vt
YW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4g
ICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0gIFlZTFRZUEUgeXlsb2M7Ci0KLSAgLyogVGhlIG51bWJl
ciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0
byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4g
PSAwOwotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAg
eXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3RhdHVzID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hh
ciA9IFlZRU1QVFk7ICAgICAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8q
IEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCi0gICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZh
bHVlIGFuZCBsb2NhdGlvbiBzdGFjawotICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2Ft
ZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCi0gICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJl
IG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQotICB5eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2
czsKLSAgeXlsc3AgPSB5eWxzOwotI2lmIFlZTFRZUEVfSVNfVFJJVklBTAotICAvKiBJbml0aWFs
aXplIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGJlZm9yZSBwYXJzaW5nIHN0YXJ0cy4gICovCi0gIHl5
bGxvYy5maXJzdF9saW5lICAgPSB5eWxsb2MubGFzdF9saW5lICAgPSAxOwotICB5eWxsb2MuZmly
c3RfY29sdW1uID0geXlsbG9jLmxhc3RfY29sdW1uID0gMDsKLSNlbmRpZgotCi0gIGdvdG8geXlz
ZXRzdGF0ZTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hp
Y2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0gIC8qIElu
IGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3Rh
Y2tzCi0gICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJl
IGV2ZW5zIHRoZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToKLSAgKnl5
c3NwID0geXlzdGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkK
LSAgICB7Ci0gICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBz
dGFja3MsIGluIGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0g
eXlzcyArIDE7Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0gICAgLyogR2l2ZSB1c2Vy
IGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAg
IHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAg
ICAgICBtZW1vcnkuICAqLwotICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVf
aW50MTYgKnl5c3MxID0geXlzczsKLSAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAv
KiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0
aGUKLSAgICAgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNl
ZCB0byBiZSBhCi0gICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBh
cmdzLCBidXQgdGhhdCBtaWdodAotICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlz
IGEgbWFjcm8uICAqLwotICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAot
ICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAg
ICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLSAg
ICB5eWxzID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsKLSAg
ICAgIH0KLSNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NB
VEUKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0jIGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0
aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwotICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFj
a3NpemUpCi0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIHl5c3RhY2tzaXplICo9IDI7
Ci0gICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0g
WVlNQVhERVBUSDsKLQotICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwot
ICAgIHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RB
Q0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIp
Ci0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3Mp
OwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5
bHMpOwotIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkK
LSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8q
IG5vIHl5b3ZlcmZsb3cgKi8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAg
ICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eWxzcCA9IHl5bHMgKyB5eXNp
emUgLSAxOwotCi0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNl
ZCB0byAlbHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkp
OwotCi0gICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFC
T1JUOwotICAgIH0KLQotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxu
IiwgeXlzdGF0ZSkpOwotCi0gIGdvdG8geXliYWNrdXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5
YmFja3VwLiAgfAotYC0tLS0tLS0tLS0tKi8KLXl5YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJp
YXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9v
ay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4g
ICovCi0KLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJl
bmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLwotICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0g
IGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90
IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9u
ZS4gICovCi0KLSAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFs
aWQgbG9vay1haGVhZCBzeW1ib2wuICAqLwotICBpZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAg
ewotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAg
ICB5eWNoYXIgPSBZWUxFWDsKLSAgICB9Ci0KLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7
Ci0gICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRl
cnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAg
ICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklO
VCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0K
LSAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8g
cmVkdWNlIG9yIHRvCi0gICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICov
Ci0gIHl5biArPSB5eXRva2VuOwotICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXlj
aGVja1t5eW5dICE9IHl5dG9rZW4pCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFi
bGVbeXluXTsKLSAgaWYgKHl5biA8PSAwKQotICAgIHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5
eW4gPT0gWVlUQUJMRV9OSU5GKQotICAgIGdvdG8geXllcnJsYWI7Ci0gICAgICB5eW4gPSAteXlu
OwotICAgICAgZ290byB5eXJlZHVjZTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQot
ICAgIFlZQUNDRVBUOwotCi0gIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBh
ZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKLSAgICAgc3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJy
c3RhdHVzKQotICAgIHl5ZXJyc3RhdHVzLS07Ci0KLSAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQg
dG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0
IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBU
WTsKLQotICB5eXN0YXRlID0geXluOwotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAgKisreXlsc3Ag
PSB5eWxsb2M7Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWRlZmF1bHQgLS0g
ZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15
eWRlZmF1bHQ6Ci0gIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IDApCi0g
ICAgZ290byB5eWVycmxhYjsKLSAgZ290byB5eXJlZHVjZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKLWAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eXJlZHVjZToKLSAgLyogeXluIGlzIHRoZSBu
dW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KLSAgeXlsZW4gPSB5eXIyW3l5bl07
Ci0KLSAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVl
IG9mIHRoZSBhY3Rpb246Ci0gICAgIGAkJCA9ICQxJy4KLQotICAgICBPdGhlcndpc2UsIHRoZSBm
b2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCi0gICAgIFRoaXMgYmVoYXZpb3Ig
aXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgotICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBv
biBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAotICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhl
IHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKLSAgICAgR0NDIHdhcm5pbmcg
dGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KLSAgeXl2YWwgPSB5eXZz
cFsxLXl5bGVuXTsKLQotICAvKiBEZWZhdWx0IGxvY2F0aW9uLiAgKi8KLSAgWVlMTE9DX0RFRkFV
TFQgKHl5bG9jLCAoeXlsc3AgLSB5eWxlbiksIHl5bGVuKTsKLSAgWVlfUkVEVUNFX1BSSU5UICh5
eW4pOwotICBzd2l0Y2ggKHl5bikKLSAgICB7Ci0gICAgICAgIGNhc2UgNzoKLQotICAgIHsKLSAg
ICAgICAgLy8gVE9ETyhhbG9rcCk6IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZl
Y3Rvciogb3V0ID0gY29udGV4dC0+b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+
ZW5kKCksICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KS0+YmVnaW4oKSwgKHl5dnNwWygxKSAtICgy
KV0udGxpc3QpLT5lbmQoKSk7Ci0gICAgICAgIGRlbGV0ZSAoeXl2c3BbKDEpIC0gKDIpXS50bGlz
dCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAgICAgIGNv
bnRleHQtPmRlZmluZU1hY3JvKCh5eWxzcFsoMSkgLSAoMyldKS5maXJzdF9saW5lLCBwcDo6TWFj
cm86OmtUeXBlT2JqLCAoeXl2c3BbKDEpIC0gKDMpXS5zdmFsKSwgTlVMTCwgKHl5dnNwWygyKSAt
ICgzKV0udGxpc3QpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7
Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKCh5eWxzcFsoMSkgLSAoNildKS5maXJzdF9s
aW5lLCBwcDo6TWFjcm86OmtUeXBlRnVuYywgKHl5dnNwWygxKSAtICg2KV0uc3ZhbCksICh5eXZz
cFsoMykgLSAoNildLnRsaXN0KSwgKHl5dnNwWyg1KSAtICg2KV0udGxpc3QpKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTE6Ci0KLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVm
aW5lTWFjcm8oKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMjoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4
dCwgKHl5dnNwWygyKSAtICgzKV0udGxpc3QpID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJs
b2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2
YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAg
ICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQo
KHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTU6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgcG9wQ29u
ZGl0aW9uYWxCbG9jayhjb250ZXh0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjM6
Ci0KLSAgICB7ICh5eXZhbC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MjU6Ci0KLSAgICB7ICh5eXZhbC50bGlzdCkgPSBOVUxMOyA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMjY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVj
dG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbigoeXls
c3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0u
c3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDMpXS50bGlzdCk7Ci0gICAgICAgICh5
eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMykgLSAoMyldKS5m
aXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3BbKDMpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFj
aygoeXl2c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDI5OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0u
dGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygyKSAtICgy
KV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMDoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZh
bC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS50dmFsKSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDMxOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0g
KHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2Jh
Y2soKHl5dnNwWygyKSAtICgyKV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAzMjoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzM6Ci0KLSAgICB7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDM1OgotCi0gICAgewotICAgICAgICAoeXl2
YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCAo
eXl2c3BbKDEpIC0gKDEpXS5pdmFsKSwgTlVMTCk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDM2OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2VuKCh5
eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAo
MSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzc6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZp
cnN0X2xpbmUsIEZMT0FUX0NPTlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDM4OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZh
bCkgPSBuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElG
SUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDM5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnWyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA0MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ10nOyA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgNDE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc8JzsgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDQyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPic7IDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA0MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJygnOyA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcpJzsgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDQ1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAneyc7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA0NjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ30nOyA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNDc6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcuJzsgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDQ4OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKyc7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSA0OToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgNTA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcvJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDUxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA1MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDU0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfCc7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA1NToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNTY6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd+JzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDU3OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnPSc7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1ODoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyEnOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc6Jzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDYwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJywn
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc/
JzsgO30KLSAgICBicmVhazsKLQotCi0vKiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAg
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9Iiwg
eXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5
eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3Ag
PSB5eXZhbDsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVz
dWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdv
ZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUK
LSAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5
eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5
eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3Nw
KQotICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9
IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVy
ZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi15eWVycmxhYjoKLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFu
IGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAg
ewotICAgICAgKyt5eW5lcnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9y
ICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7
Ci0gICAgWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hh
cik7Ci0gICAgaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFD
S19BTExPQ19NQVhJTVVNKQotICAgICAgewotICAgICAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAq
IHl5c2l6ZTsKLSAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0g
WVlTVEFDS19BTExPQ19NQVhJTVVNKSkKLSAgICAgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExP
Q19NQVhJTVVNOwotICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgICAgICAgWVlT
VEFDS19GUkVFICh5eW1zZyk7Ci0gICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExP
QyAoeXlhbGxvYyk7Ci0gICAgICAgIGlmICh5eW1zZykKLSAgICAgICAgICB5eW1zZ19hbGxvYyA9
IHl5YWxsb2M7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgIHl5bXNnID0geXlt
c2didWY7Ci0gICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotICAgICAgICAg
IH0KLSAgICAgIH0KLQotICAgIGlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxv
YykKLSAgICAgIHsKLSAgICAgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0
ZSwgeXljaGFyKTsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgeXltc2cpOwot
ICAgICAgfQotICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgeXllcnJvciAoJnl5bGxvYywgY29u
dGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0gICAgICAgIGlmICh5eXNpemUgIT0gMCkKLSAg
ICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgfQotICAgICAgfQotI2VuZGlmCi0g
ICAgfQotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxsb2M7Ci0KLSAgaWYgKHl5ZXJyc3RhdHVz
ID09IDMpCi0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNl
IGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwot
Ci0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWls
dXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQot
ICAgICAgICBZWUFCT1JUOwotICAgIH0KLSAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3Ry
dWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFs
LCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0gICAgfQotICAg
IH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIg
c2hpZnRpbmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwK
LWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
eXllcnJvcmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVz
ZXIgY29kZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9y
bGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlm
ICgvKkNPTlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQotICB5eWVycm9yX3Jh
bmdlWzBdID0geXlsc3BbMS15eWxlbl07Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xz
IG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAg
Ki8KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5U
ICh5eXNzLCB5eXNzcCk7Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwot
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBl
cnJvciBhbmQgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMg
PSAzOyAgLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQot
ICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlm
ICh5eW4gIT0gWVlQQUNUX05JTkYpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAg
LyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJy
b3IgdG9rZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKLQot
ICAgICAgeXllcnJvcl9yYW5nZVswXSA9ICp5eWxzcDsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogcG9wcGluZyIsCi0gICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNv
bnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwot
ICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9
PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIHl5
ZXJyb3JfcmFuZ2VbMV0gPSB5eWxsb2M7Ci0gIC8qIFVzaW5nIFlZTExPQyBpcyB0ZW1wdGluZywg
YnV0IHdvdWxkIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YKLSAgICAgdGhlIGxvb2stYWhlYWQuICBZ
WUxPQyBpcyBhdmFpbGFibGUgdGhvdWdoLiAgKi8KLSAgWVlMTE9DX0RFRkFVTFQgKHl5bG9jLCAo
eXllcnJvcl9yYW5nZSAtIDEpLCAyKTsKLSAgKisreXlsc3AgPSB5eWxvYzsKLQotICAvKiBTaGlm
dCB0aGUgZXJyb3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5
c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXlu
ZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwot
ICBnb3RvIHl5cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgotfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0g
IGdvdG8geXlyZXR1cm47Ci0KLSNpZm5kZWYgeXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBt
ZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQg
PSAyOwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAo
eXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQotICAgICB5eWRlc3RydWN0ICgi
Q2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAotICAgICAgICAgeXl0b2tlbiwgJnl5bHZh
bCwgJnl5bGxvYywgY29udGV4dCk7Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9m
IHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JUIG9yIFlZ
QUNDRVBULiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOwotICB3aGlsZSAoeXlzc3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5eWRlc3Ry
dWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCi0gICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
LCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVm
IHl5b3ZlcmZsb3cKLSAgaWYgKHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNz
KTsKLSNlbmRpZgotI2lmIFlZRVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYp
Ci0gICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQg
aXMgdXNlZC4gICovCi0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotdm9p
ZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hh
ciogcmVhc29uKQotewotfQotCi12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0
KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJs
b2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBD
b250ZXh0OjpwYXJzZSgpCi17Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2Uo
dGhpcykgPT0gMCA/IHRydWUgOiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCi0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3RhYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTkgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1h
ZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGludGVyZmFjZSBmb3IgQmlz
b24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4
OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg
b3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBs
YXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFy
c2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2Yg
eW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJz
ZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhl
cmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBt
YXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdo
aWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBv
dXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwot
ICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3Bl
Y2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24g
aW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5k
ZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2Vu
cyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMK
LSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAg
SEFTSCA9IDI1OCwKLSAgICAgSEFTSF9VTkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwK
LSAgICAgSEFTSF9JRkRFRiA9IDI2MSwKLSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhB
U0hfRUxTRSA9IDI2MywKLSAgICAgSEFTSF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0g
MjY1LAotICAgICBERUZJTkVEID0gMjY2LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBI
QVNIX1BSQUdNQSA9IDI2OCwKLSAgICAgSEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hf
VkVSU0lPTiA9IDI3MCwKLSAgICAgSEFTSF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9P
QkogPSAyNzIsCi0gICAgIEhBU0hfREVGSU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFO
VCA9IDI3NCwKLSAgICAgRkxPQVRfQ09OU1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAy
NzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVm
aW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVmaW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZE
RUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZOREVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0j
ZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNkZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVG
SU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9FUlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4
Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9OIDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0j
ZGVmaW5lIEhBU0hfTElORSAyNzEKLSNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmlu
ZSBIQVNIX0RFRklORV9GVU5DIDI3MwotI2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5l
IEZMT0FUX0NPTlNUQU5UIDI3NQotI2RlZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0jaWYg
ISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLXR5cGVk
ZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2
YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBwOjpUb2tlblZlY3RvciogdGxpc3Q7Ci19
Ci0vKiBMaW5lIDE0ODkgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5
eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAx
Ci0jZW5kaWYKLQotCi0KLSNpZiAhIGRlZmluZWQgWVlMVFlQRSAmJiAhIGRlZmluZWQgWVlMVFlQ
RV9JU19ERUNMQVJFRAotdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQotewotICBpbnQgZmlyc3RfbGlu
ZTsKLSAgaW50IGZpcnN0X2NvbHVtbjsKLSAgaW50IGxhc3RfbGluZTsKLSAgaW50IGxhc3RfY29s
dW1uOwotfSBZWUxUWVBFOwotIyBkZWZpbmUgeXlsdHlwZSBZWUxUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcF91dGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHBwX3V0aWxzLmg6IENvbW1v
biBwcmVwcm9jZXNzb3IgdXRpbGl0aWVzCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1BQVVRJTFNfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKwor
Ly8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9
IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0
aW9ucyBmb3IgYSBjbGFzcy4KKyNkZWZpbmUgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5
cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAor
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKyNlbmRpZiAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfUFBVVElMU19IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nl
c3Nvci52Y3Byb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJ
UHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJwcmVwcm9j
ZXNzb3IiCisJUHJvamVjdEdVSUQ9IntGQkUzMkRGMy0wRkIwLTRGMkYtQTQyNC0yQzIxQkQ3QkMz
MjV9IgorCVJvb3ROYW1lc3BhY2U9InByZXByb2Nlc3NvciIKKwlLZXl3b3JkPSJXaW4zMlByb2oi
CisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8
UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2
NCIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxD
b25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgor
CQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgor
CQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZp
Z3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFH
ZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJv
eHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1p
emF0aW9uPSIwIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJ
QiIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMi
CisJCQkJUnVudGltZUxpYnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJ
CQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5m
b3JtYXRpb25Gb3JtYXQ9IjQiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEy
Nzs0MjQ0OzQ3MDIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJj
ZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21w
aWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJh
dGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRw
dXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRl
cm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlv
blR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRp
b249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmluc2lj
RnVuY3Rpb25zPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVC
VUc7X0xJQiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVs
TGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5n
TGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZv
cm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZp
Z3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1
dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1l
ZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hN
TERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2
aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURM
VG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCVByZXByb2Nl
c3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKKwkJCQlNaW5pbWFsUmVidWlsZD0i
dHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjEi
CisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJ
CVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJ
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjc7NDcwMiIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
QUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9z
dEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJh
dGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRp
YXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlD
b25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3Jh
bU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2
ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1l
bnQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJ
CQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1bnRp
bWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJu
QXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2Fi
bGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3IgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVu
dFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8
UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1l
PSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7
YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1B
MDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxE
aWFnbm9zdGljcy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHByZXNzaW9uUGFyc2VyLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1
dC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
TGV4ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXE1hY3JvLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxNYWNyb0V4cGFuZGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxl
cyIKKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgorCQkJVW5pcXVlSWRlbnRp
Zmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCisJCQk+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhhbmRsZXIuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQ
YXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxFeHByZXNzaW9uUGFyc2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cSW5wdXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxMZXhlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXHBwX3V0aWxzLmgiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29yLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU291cmNlTG9jYXRp
b24uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxU
b2tlbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFRva2VuaXplci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4K
Kwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRh
YnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgJKHJl
dmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBzdGxfdXRpbHMuaDogQ29tbW9uIFNUTCB1dGlsaXRpZXMu
Ci0KLSNpZm5kZWYgQ09NTU9OX1NUTFVUSUxTX0hfCi0jZGVmaW5lIENPTU1PTl9TVExVVElMU19I
XwotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IERlbGV0ZQotewotICAgIHRlbXBsYXRlPGNs
YXNzIFQ+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChUIHgpIHsgZGVsZXRlIHg7IH0KLX07Ci0KLXN0
cnVjdCBEZWxldGVTZWNvbmQKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCPgotICAg
IHZvaWQgb3BlcmF0b3IoKSAoc3RkOjpwYWlyPEEsIEI+JiB4KSB7IGRlbGV0ZSB4LnNlY29uZDsg
fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAvLyBDT01NT05fU1RMVVRJTFNfSF8K
LQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvdG9rZW5fdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaAkocmV2aXNpb24gMTIy
MjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvdG9rZW5fdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KLSNpbmNsdWRlICJw
cF90YWIuaCIKLQotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fVFlQRV9I
XwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCIKKworUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1Np
bmtCYXNlJiBzaW5rKQorICAgIDogbVNpbmsoc2luaykKKyAgICAsIG1OdW1FcnJvcnMoMCkKK3sK
KyAgICAvLyBTYW1wbGluZyBvcHMgZm91bmQgb25seSBpbiBmcmFnbWVudCBzaGFkZXJzLgorICAg
IG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyO2YxOyIpOworICAgIG1TYW1w
bGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMztmMTsiKTsKKyAgICAvLyBTYW1wbGluZyBv
cHMgZm91bmQgaW4gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFByb2ooczIxO3ZmNDsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlQ3ViZShzQzE7dmYzOyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBPRVNf
RUdMX2ltYWdlX2V4dGVybmFsLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRCgx
O3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKDE7dmYzOyIp
OworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooMTt2ZjQ7Iik7CisgICAg
Ly8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEFSQl90ZXh0dXJlX3JlY3RhbmdsZS4KKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworfQorCisvLyBGSVhNRShtdnVq
b3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBv
cGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KKy8vIGNhbiB2YXJ5IGJhc2VkIG9uIHRoZSB2
YWx1ZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzLiBJZiBzbywgd2Ugc2hvdWxkIHJlc3RyaWN0IHRo
b3NlIGFzIHdlbGwuCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmVuZm9yY2VS
ZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgbU51bUVy
cm9ycyA9IDA7CisKKyAgICAvLyBGSVhNRShtdnVqb3ZpYyk6IFRoZSBkZXBlbmRlbmN5IGdyYXBo
IGRvZXMgbm90IHN1cHBvcnQgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGNhbGxzIHJpZ2h0IG5vdywK
KyAgICAvLyBzbyB3ZSBnZW5lcmF0ZSBlcnJvcnMgZm9yIHRoZW0uCisgICAgdmFsaWRhdGVVc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGdyYXBoKTsKKworICAgIC8vIFN0YXJ0aW5nIGZyb20g
ZWFjaCBzYW1wbGVyLCB0cmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBhbmQgZ2VuZXJhdGUg
YW4gZXJyb3IgZWFjaCB0aW1lIHdlCisgICAgLy8gaGl0IGEgbm9kZSB3aGVyZSBzYW1wbGVyIGRl
cGVuZGVudCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGZvciAoVEdyYXBoU3ltYm9sVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5TYW1wbGVyU3ltYm9scygpOwor
ICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRTYW1wbGVyU3ltYm9scygpOworICAgICAgICAgKytp
dGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoU3ltYm9sKiBzYW1wbGVyU3ltYm9sID0gKml0ZXI7
CisgICAgICAgIGNsZWFyVmlzaXRlZCgpOworICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5R3Jh
cGgmIGdyYXBoKQoreworICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CisgICAgICAg
ICBpdGVyICE9IGdyYXBoLmVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOworICAgICAgICAg
KytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwg
PSAqaXRlcjsKKyAgICAgICAgYmVnaW5FcnJvcihmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0
aW9uQ2FsbCgpKTsKKyAgICAgICAgbVNpbmsgPDwgIkEgY2FsbCB0byBhIHVzZXIgZGVmaW5lZCBm
dW5jdGlvbiBpcyBub3QgcGVybWl0dGVkLlxuIjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6YmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9kZSkK
K3sKKyAgICArK21OdW1FcnJvcnM7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7Cisg
ICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKK30KKworYm9vbCBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nOjppc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtRnVuY3Rpb25DYWxsKSBjb25zdAoreworICAgIHJldHVybiAhaW50ZXJtRnVuY3Rpb25D
YWxsLT5pc1VzZXJEZWZpbmVkKCkgJiYKKyAgICAgICAgICAgbVNhbXBsaW5nT3BzLmZpbmQoaW50
ZXJtRnVuY3Rpb25DYWxsLT5nZXROYW1lKCkpICE9IG1TYW1wbGluZ09wcy5lbmQoKTsKK30KKwor
dm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdEFyZ3VtZW50KFRHcmFwaEFy
Z3VtZW50KiBwYXJhbWV0ZXIpCit7CisgICAgLy8gVGV4dHVyZSBjYWNoZSBhY2Nlc3MgdGltZSBt
aWdodCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAgICAvLyBUaHVzLCB3ZSByZXN0cmlj
dCBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgZnJvbSBhZmZlY3RpbmcgdGhlIGNvb3JkaW5hdGUg
b3IgTE9EIGJpYXMgb2YgYQorICAgIC8vIHNhbXBsaW5nIG9wZXJhdGlvbi4KKyAgICBpZiAoaXNT
YW1wbGluZ09wKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpKSB7CisgICAgICAg
IHN3aXRjaCAocGFyYW1ldGVyLT5nZXRBcmd1bWVudE51bWJlcigpKSB7CisgICAgICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICAgICAgLy8gU2Vjb25kIGFyZ3VtZW50IChjb29yZCkKKyAgICAg
ICAgICAgICAgICBiZWdpbkVycm9yKHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkp
OworICAgICAgICAgICAgICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAg
ICAgPDwgIiBjb29yZGluYXRlIGFyZ3VtZW50IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
ICAgICAvLyBUaGlyZCBhcmd1bWVudCAoYmlhcykKKyAgICAgICAgICAgICAgICBiZWdpbkVycm9y
KHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICAgICAgICAgIG1T
aW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1p
dHRlZCB0byBiZSB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBiaWFzIGFyZ3VtZW50
IG9mIGEgc2FtcGxpbmcgb3BlcmF0aW9uLlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgKHNh
bXBsZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgYmVnaW5FcnJvcihzZWxlY3Rpb24tPmdldEludGVy
bVNlbGVjdGlvbigpKTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24g
YSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuXG4i
OworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9vcChUR3Jh
cGhMb29wKiBsb29wKQoreworICAgIGJlZ2luRXJyb3IobG9vcC0+Z2V0SW50ZXJtTG9vcCgpKTsK
KyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5v
dCBwZXJtaXR0ZWQgaW4gYSBsb29wIGNvbmRpdGlvbi5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dp
Y2FsT3ApCit7CisgICAgYmVnaW5FcnJvcihsb2dpY2FsT3AtPmdldEludGVybUxvZ2ljYWxPcCgp
KTsKKyAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlz
IG5vdCBwZXJtaXR0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIGEgbG9naWNhbCAiCisgICAg
ICAgICAgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpCisgICAgICAgICAgPDwgIiBvcGVyYXRv
ci5cbiI7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9USU1J
TkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworI2RlZmluZSBDT01QSUxFUl9U
SU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXworCisjaW5jbHVkZSAiR0xT
TEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIK
KyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKworY2xhc3Mg
VEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyA6IFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luayk7CisgICAgdm9pZCBlbmZvcmNlUmVzdHJp
Y3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBpbnQgbnVtRXJyb3Jz
KCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExv
Z2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICB2b2lkIHZhbGlkYXRl
VXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7CisgICAgYm9vbCBpc1NhbXBsaW5nT3AoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsKSBjb25zdDsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGlu
dCBtTnVtRXJyb3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJpbmdTZXQ7
CisgICAgU3RyaW5nU2V0IG1TYW1wbGluZ09wczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmgiCisKK3ZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNp
Y1R5cGUoKSkpIHsKKyAgICAgICAgKyttTnVtRXJyb3JzOworICAgICAgICBtU2luay5wcmVmaXgo
RVByZWZpeEVycm9yKTsKKyAgICAgICAgbVNpbmsubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsK
KyAgICAgICAgbVNpbmsgPDwgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBz
aGFkZXJzLlxuIjsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7
CisKK2NsYXNzIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIgeworcHVibGljOgorICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKFRJbmZvU2lu
a0Jhc2UmIHNpbmspCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFs
c2UpCisgICAgICAgICwgbVNpbmsoc2luaykKKyAgICAgICAgLCBtTnVtRXJyb3JzKDApIHt9CisK
KyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QpIHsgcm9vdC0+
dHJhdmVyc2UodGhpcyk7IH0KKyAgICBpbnQgbnVtRXJyb3JzKCkgeyByZXR1cm4gbU51bUVycm9y
czsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKK3By
aXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJvcnM7Cit9
OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJ
TUlOR19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTIsNiArOTkyLDIyIEBA
IGJvb2wgRGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gU1VDQ0VF
REVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7
CiB9CiAKKy8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKKy8v
IHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBt
YWtlIGRlcHRoLW9ubHkgRkJPcworLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5
R1BVSGFja3MuaHRtbAorYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29u
c3QKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDkt
PkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisK
KyAgICBib29sIGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKKyAgICBib29sIG51bGwgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VS
RkFDRSwgRDNERk1UX05VTEwpKTsKKworICAgIHJldHVybiBpbnR6ICYmIG51bGw7Cit9CisKIGJv
b2wgRGlzcGxheTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9v
bCAqcmVuZGVyYWJsZSkKIHsKICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7
CkBAIC0xMDgxLDcgKzEwOTcsNyBAQCBEM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdP
UkQgdXNhCiAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKIH0KIAotRDNEUE9PTCBEaXNwbGF5
OjpnZXRUZXh0dXJlUG9vbChib29sIHJlbmRlcmFibGUpIGNvbnN0CitEM0RQT09MIERpc3BsYXk6
OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9
IE5VTEwpCiAgICAgewpAQCAtMTA4OSw3ICsxMTA1LDcgQEAgRDNEUE9PTCBEaXNwbGF5OjpnZXRU
ZXh0dXJlUG9vbChib29sIHJlbgogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAo
IXJlbmRlcmFibGUpCisgICAgICAgIGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJ
TCB8IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gRDNEUE9PTF9NQU5BR0VEOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDEwICs3OCwxMSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgdmlydHVhbCBib29sIGdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4VGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7CiAgICAgYm9vbCBpc0RldmljZUxv
c3QoKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJm
YWNlLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9TdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBTdXJm
YWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgOiBtRGlzcGxheShkaXNw
bGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVN3YXBDaGFpbiA9IE5VTEw7
CisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKQEAg
LTY0LDYgKzY1LDcgQEAgU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdAog
ICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWcoY29uZmlnKSwg
bVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQp
LCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCiB7CiAgICAgbVN3YXBDaGFpbiA9
IE5VTEw7CisgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxM
OwogICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVM
TDsKQEAgLTEyMSw2ICsxMjMsMTIgQEAgdm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKICAgICAgICAg
bVN3YXBDaGFpbiA9IE5VTEw7CiAgICAgfQogCisgICAgaWYgKG1CYWNrQnVmZmVyKQorICAgIHsK
KyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZmZXIgPSBO
VUxMOworICAgIH0KKwogICAgIGlmIChtRGVwdGhTdGVuY2lsKQogICAgIHsKICAgICAgICAgbURl
cHRoU3RlbmNpbC0+UmVsZWFzZSgpOwpAQCAtMTQ0LDYgKzE1Miw4IEBAIHZvaWQgU3VyZmFjZTo6
cmVsZWFzZSgpCiAgICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsKICAgICAgICAg
bVRleHR1cmUgPSBOVUxMOwogICAgIH0KKworICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7CiB9CiAK
IGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQpAQCAtMTc0LDU3ICsxODQsMTMgQEAgYm9v
bCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgSURpcmVjdDNEU3VyZmFjZTkqIHByZXNlcnZlZFJlbmRlclRhcmdl
dCA9IE5VTEw7Ci0gICAgaWYgKG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkICYmIG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0
OwotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQogICAg
IC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5
IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKICAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRo
ZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KICAgICBkZXZp
Y2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotICAgIHJlbGVhc2UoKTsKIAogICAgIEQzRFBS
RVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKICAgICBIUkVTVUxUIHJl
c3VsdDsKIAotICAgIGJvb2wgdXNlRmxpcEV4ID0gKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+
PSB2ZXJzaW9uV2luZG93czcpICYmIG1EaXNwbGF5LT5pc0QzZDlFeERldmljZSgpOwotCi0gICAg
Ly8gRmxpcEV4IGNhdXNlcyB1bnNlZW1seSBzdHJldGNoaW5nIHdoZW4gcmVzaXppbmcgd2luZG93
cyBBTkQgd2hlbiBvbmUKLSAgICAvLyBkcmF3cyBvdXRzaWRlIG9mIHRoZSBXTV9QQUlOVCBjYWxs
YmFjay4gV2hpbGUgdGhpcyBpcyBzZWxkb20gYSBwcm9ibGVtIGluCi0gICAgLy8gc2luZ2xlIHBy
b2Nlc3MgYXBwbGljYXRpb25zLCBpdCBpcyBwYXJ0aWN1YXJseSBub3RpY2VhYmxlIGluIG11bHRp
cHJvY2VzcwotICAgIC8vIGFwcGxpY2F0aW9ucy4gVGhlcmVmb3JlLCBpZiB0aGUgY3JlYXRvciBw
cm9jZXNzIG9mIG91ciB3aW5kb3cgaXMgbm90IGluCi0gICAgLy8gdGhlIGN1cnJlbnQgcHJvY2Vz
cywgZGlzYWJsZSB1c2Ugb2YgRmxpcEV4LgotICAgIERXT1JEIHdpbmRvd1BJRDsKLSAgICBHZXRX
aW5kb3dUaHJlYWRQcm9jZXNzSWQobVdpbmRvdywgJndpbmRvd1BJRCk7Ci0gICAgaWYgKHdpbmRv
d1BJRCAhPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpCi0gICAgewotICAgICAgICB1c2VGbGlwRXgg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBWYXJpb3VzIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBv
cnQgRDNEU1dBUEVGRkVDVF9GTElQRVggd2hlbiBlaXRoZXIgdGhlCi0gICAgLy8gZGV2aWNlIGZv
cm1hdCBvciBiYWNrIGJ1ZmZlciBmb3JtYXQgaXMgbm90IDMyLWJpdC4KLSAgICBIREMgZGV2aWNl
Q29udGV4dCA9IEdldERDKDApOwotICAgIGludCBkZXZpY2VGb3JtYXRCaXRzID0gR2V0RGV2aWNl
Q2FwcyhkZXZpY2VDb250ZXh0LCBCSVRTUElYRUwpOwotICAgIFJlbGVhc2VEQygwLCBkZXZpY2VD
b250ZXh0KTsKLSAgICBpZiAobUNvbmZpZy0+bUJ1ZmZlclNpemUgIT0gMzIgfHwgZGV2aWNlRm9y
bWF0Qml0cyAhPSAzMikKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEQzRFNXQVBFRkZFQ1RfRkxJUEVYIGlzIGFsd2F5cyBWU1lOQ2VkCi0gICAgaWYg
KG1Td2FwSW50ZXJ2YWwgPT0gMCkKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEQzRFNXQVBFRkZFQ1RfRkxJUEVYIGRvZXMgbm90IHByZXNlcnZlIHRo
ZSBiYWNrIGJ1ZmZlci4KLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCi0gICAgewot
ICAgICAgICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9Ci0KICAgICBwcmVzZW50UGFyYW1ldGVy
cy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gbUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdDsK
ICAgICAvLyBXZSBzZXQgQmFja0J1ZmZlckNvdW50ID0gMSBldmVuIHdoZW4gd2UgdXNlIEQzRFNX
QVBFRkZFQ1RfRkxJUEVYLgogICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBEaXJlY3RYIGRvY3Mg
YXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0IHRoaXMgdG8gMQpAQCAtMjM5LDQxICsyMDUs
NTAgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgIHByZXNl
bnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFVuaW1wbGVtZW50ZWQKICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5
cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCiAgICAg
cHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudEludGVydmFs
OwotICAgIC8vIFVzZSBmbGlwRXggb24gV2luNyBvciBncmVhdGVyLgotICAgIGlmKHVzZUZsaXBF
eCkKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0ZM
SVBFWDsKLSAgICBlbHNlCi0gICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gbVBv
c3RTdWJCdWZmZXJTdXBwb3J0ZWQgPyBEM0RTV0FQRUZGRUNUX0NPUFkgOiBEM0RTV0FQRUZGRUNU
X0RJU0NBUkQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZF
Q1RfRElTQ0FSRDsKICAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CiAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwogICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0Owog
Ci0gICAgaWYgKG1XaW5kb3cpCisgICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8g
ZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCisgICAg
Ly8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVz
ZXJ2aW5nIGl0cyBjb250ZW50cy4KKyAgICBpZiAobVN3YXBDaGFpbikKICAgICB7Ci0gICAgICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFt
ZXRlcnMsICZtU3dhcENoYWluKTsKLSAgICB9IGVsc2UgewotICAgICAgICBIQU5ETEUgKnBTaGFy
ZUhhbmRsZSA9IE5VTEw7Ci0gICAgICAgIGlmIChtRGlzcGxheS0+c2hhcmVIYW5kbGVTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICAg
ICAgfQorICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgICAgIG1Td2FwQ2hhaW4g
PSBOVUxMOworICAgIH0KIAotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0
LCBEM0RQT09MX0RFRkFVTFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAg
ICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgp
OworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCB8fCByZXN1bHQgPT0gRDNERVJS
X0RFVklDRUxPU1QpOworICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOworICAg
ICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNl
czogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7CisgICAgaWYgKG1EZXB0aFN0
ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KIAotICAgICAgICAKLSAgICAgICAgaWYgKHBy
ZXNlcnZlZFJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJlc2VydmVkUmVu
ZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQg
PSBOVUxMOwotICAgICAgICB9CisgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBIQU5ETEUg
KnBTaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgaWYgKCFtV2luZG93ICYmIG1EaXNwbGF5LT5zaGFy
ZUhhbmRsZVN1cHBvcnRlZCgpKQorICAgIHsKKyAgICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFy
ZUhhbmRsZTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBP
T0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOworICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZz
Y3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOworICAgICAgICByZWxlYXNlKCk7CiAKICAg
ICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjg2LDIw
ICsyNjEsMTIgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICBtU3dhcENo
YWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbVJlbmRlclRh
cmdldCk7Ci0gICAgICAgIGlmICghcHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBJbnZhbGlkYXRlUmVjdChtV2luZG93LCBOVUxMLCBGQUxTRSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbCgwLCAmbVJlbmRlclRhcmdldCk7Ci0gICAgfQorICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0OwogCi0gICAgaWYgKHByZXNl
cnZlZFJlbmRlclRhcmdldCkKKyAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgaWYgKG9sZFJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIFJFQ1QgcmVj
dCA9CiAgICAgICAgIHsKQEAgLTMxOCwxMCArMjg1LDM3IEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRT
d2FwQ2hhaW4oaW50IGJhY2tidWYKICAgICAgICAgfQogCiAgICAgICAgIG1EaXNwbGF5LT5lbmRT
Y2VuZSgpOwotICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KHByZXNlcnZlZFJlbmRlclRhcmdl
dCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwogCi0gICAgICAg
IHByZXNlcnZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBwcmVzZXJ2ZWRSZW5k
ZXJUYXJnZXQgPSBOVUxMOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9s
ZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIG9sZFJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtV2luZG93KQorICAgIHsKKyAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50
UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lO
VkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisKKyAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVl
biBzdXJmYWNlczogJTA4bFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFzZSgpOworCisg
ICAgICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBtU3dh
cENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tC
dWZmZXIpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAogICAg
IGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQpAQCAt
MzI5LDE1ICszMjMsMjQgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1
ZgogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVySGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBh
cmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5
LCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOwotICAgIH0KIAotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9J
TlZBTElEQ0FMTCk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKIAot
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5l
dyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWlu
OiAweCUwOFgiLCByZXN1bHQpOworICAgICAgICAgICAgcmVsZWFzZSgpOworCisgICAgICAgICAg
ICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBtV2lkdGggPSBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7CkBAIC0zNDcsNiArMzUwLDExMyBAQCBib29sIFN1cmZh
Y2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgU3VyZmFjZTo6c3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVH
TGludCBoZWlnaHQpCit7CisgICAgaWYgKCFtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkKKyAgICB7Cisg
ICAgICAgIHdpZHRoID0gbVdpZHRoIC0geDsKKyAgICB9CisKKyAgICBpZiAoeSArIGhlaWdodCA+
IG1IZWlnaHQpCisgICAgeworICAgICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsKKyAgICB9CisK
KyAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5
LT5nZXREZXZpY2UoKTsKKworICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElE
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFM
U0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwg
RkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENV
TExfTk9ORSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxF
LCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFC
TEUsIDApOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8
IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Cisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxT
RSk7CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICBkZXZpY2UtPlNldFZl
cnRleFNoYWRlcihOVUxMKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNr
QnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAg
ICBkZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOworICAgIGRldmljZS0+
U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcx
KTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEs
IEQzRFRBX1RFWFRVUkUpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNE
VFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NM
QU1QKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBE
M0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQz
REZWRl9URVgxKTsKKworICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgs
IG1IZWlnaHQsIDAuMGYsIDEuMGZ9OworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0
KTsKKworICAgIGZsb2F0IHgxID0geCAtIDAuNWY7CisgICAgZmxvYXQgeTEgPSAobUhlaWdodCAt
IHkgLSBoZWlnaHQpIC0gMC41ZjsKKyAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsK
KyAgICBmbG9hdCB5MiA9IChtSGVpZ2h0IC0geSkgLSAwLjVmOworCisgICAgZmxvYXQgdTEgPSB4
IC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKKyAg
ICBmbG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKKyAgICBmbG9hdCB2MiA9
ICh5ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOworCisgICAgZmxvYXQgcXVhZFs0XVs2XSA9
IHt7eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9LAorICAgICAgICAgICAgICAgICAgICAgICAg
e3gyLCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHt4
MiwgeTIsIDAuMGYsIDEuMGYsIHUyLCB2MX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDEs
IHkyLCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAg
IG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNE
UFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKKyAgICBtRGlzcGxh
eS0+ZW5kU2NlbmUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAg
IFJFQ1QgcmVjdCA9CisgICAgeworICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwKKyAg
ICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQorICAgIH07CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKKwor
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdl
dEN1cnJlbnRDb250ZXh0KCkpOworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgY29u
dGV4dC0+bWFya0FsbFN0YXRlRGlydHkoKTsKKyAgICB9CisKKyAgICBpZiAoaXNEZXZpY2VMb3N0
RXJyb3IocmVzdWx0KSkKKyAgICB7CisgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKworICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQogewogICAg
IHJldHVybiBtV2luZG93OwpAQCAtNDY3LDg3ICs1NzcsMTggQEAgRFdPUkQgU3VyZmFjZTo6Y29u
dmVydEludGVydmFsKEVHTGludCBpbgogCiBib29sIFN1cmZhY2U6OnN3YXAoKQogewotICAgIGlm
IChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
bURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAg
ICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3dhcFJlY3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsKIH0KIAogYm9v
bCBTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KQogewotICAgIGlmICh4IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgZmFsc2UpOwotICAgIH0KLQogICAgIGlmICghbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQp
CiAgICAgewogICAgICAgICAvLyBTcGVjIGlzIG5vdCBjbGVhciBhYm91dCBob3cgdGhpcyBzaG91
bGQgYmUgaGFuZGxlZC4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgaWYgKG1T
d2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAg
ICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhl
aWdodCwKLSAgICAgICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKLSAgICAgICAgfTsKLQot
ICAgICAgICBpZiAocmVjdC5yaWdodCA+IG1XaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVjdC5yaWdodCA9IG1XaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRv
bSA+IG1IZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gbUhlaWdo
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmxlZnQgPT0gcmVjdC5yaWdodCB8fCBy
ZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlBy
ZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8
IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QgfHwgcmVzdWx0ID09IEQzREVS
Ul9ERVZJQ0VIVU5HIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFUkVNT1ZFRCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIGZhbHNlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAg
Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICByZXR1cm4gc3dhcFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIEVH
TGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0CkBAIC01NjUsNiArNjA2LDggQEAgRUdMaW50
IFN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZAogICAgIHJldHVybiBtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgor
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RT
dXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRh
cmdldCkKQEAgLTU3NSw2ICs2MTgsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0
UmVuZGVyVGFyCiAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldERlcHRoU3RlbmNpbCgp
CiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDYgKzY5LDcgQEAgcHJpdmF0ZToKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwogICAg
IElEaXJlY3QzRFN3YXBDaGFpbjkgKm1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
Km1CYWNrQnVmZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwogICAg
IElEaXJlY3QzRFN1cmZhY2U5KiBtUmVuZGVyVGFyZ2V0OwogICAgIElEaXJlY3QzRFRleHR1cmU5
KiBtT2Zmc2NyZWVuVGV4dHVyZTsKQEAgLTc4LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN1YmNsYXNzV2luZG93KCk7CiAgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CiAgICAgYm9v
bCByZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCk7CisgICAgYm9vbCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCk7CiAgICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQg
aW50ZXJ2YWwpOwogCiAgICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRv
dyB0aGF0IHRoZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTA4LDYgKzExMDgsMTEgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUG9zdFN1
YkJ1ZmZlck5WKAogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAg
fHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CiAgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6
U3VyZmFjZSo+KHN1cmZhY2UpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL1F1ZXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKQEAgLTMxMCw2ICszMTEsNyBAQCB2b2lkIENvbnRl
eHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqCiAgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZU
ZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zs
b2F0MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsK
ICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0
dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAg
ICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3Vw
cG9ydCgpOwogCiAgICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1h
eFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKIApAQCAtNDA1LDYgKzQwNywxMSBAQCB2b2lkIENv
bnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBO
VUxMOwogfQogCit2b2lkIENvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkoKQoreworICAgIG1E
eFVuaWZvcm1zRGlydHkgPSB0cnVlOworfQorCiB2b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9z
dCgpCiB7CiAgICAgaWYgKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQpCkBAIC0xNjQ2LDYgKzE2NTMsMTIgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihH
TGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lf
RVhUOgogICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7CiAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CisgICAgICAgICpw
YXJhbXMgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllf
Rk9STUFUU19PRVM6CisgICAgICAgICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsK
KyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtMTczNyw2ICsxNzUwLDggQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRl
ckluZm8oR0xlbgogICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKICAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJ
Q0FUSU9OX1NUUkFURUdZX0VYVDoKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZP
Uk1BVFNfT0VTOgorICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKICAg
ICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFy
YW1zID0gMTsKQEAgLTE4MzUsMTMgKzE4NTAsMzEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbgogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKKyAgICAvLyBpZiB0aGVyZSBpcyBubyBj
b2xvciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50
CisgICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5
IGJlIHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
cmJ1ZmZlck9iamVjdCA9IE5VTEw7CisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXROdWxsQ29sb3JidWZmZXIoKTsKKyAgICB9CisgICAgaWYgKCFyZW5kZXJidWZmZXJPYmpl
Y3QpCisgICAgeworICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZv
ciBGQk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHJlbmRl
clRhcmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNl
cmlhbCgpOwogICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJn
ZXRTZXJpYWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXQoKTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CiAgICAgICAg
IH0KICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CkBA
IC0xODU2LDI1ICsxODg5LDI3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9v
bCBpZ24KICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7CiAgICAgaWYg
KGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAg
IHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgIGRlcHRo
U3RlbmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFk
ZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBw
b2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CiAgICAgfQogICAgIGVsc2Ug
aWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUp
CiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpz
dGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAg
ICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAg
ICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkRl
cHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNl
cmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldFNlcmlhbCgp
OworICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFs
KCk7CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWwgfHwKQEAgLTE4ODcsOSArMTkyMiwxNCBAQCBib29sIENvbnRleHQ6OmFwcGx5
UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9
IHRydWU7CiAgICAgfQogCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRl
cHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKwogICAgIGlmICghbVJlbmRlclRhcmdldERl
c2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFuZ2VkKQogICAgIHsKLSAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJl
bmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlmICghcmVuZGVy
VGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QKQEAgLTE5MTUsMTEgKzE5NTUsMTAgQEAgYm9vbCBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldChib29sIGlnbgogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBS
RUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QobVN0YXRlLnZpZXdwb3J0WCwgbVN0YXRlLnZp
ZXdwb3J0WSwgbVN0YXRlLnZpZXdwb3J0V2lkdGgsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgbVJl
bmRlclRhcmdldERlc2MuSGVpZ2h0KTsKLSAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKHJlY3Qu
bGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0g
ICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+
KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNs
YW1wKHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAg
ICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8
TE9ORz4odmlld3BvcnQuWSkpOworICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0YXRlLnZp
ZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7
CisgICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChtU3RhdGUudmlld3BvcnRZLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7CisgICAgICAgIHZpZXdwb3J0
LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05H
PihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5Y
KSk7CisgICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydEhlaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBzdGF0
aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7CiAgICAgICAgIHZpZXdwb3J0Lk1pblogPSB6TmVh
cjsKICAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7CiAgICAgfQpAQCAtMTk0MSwxMSArMTk4
MCwxMSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgewog
ICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBS
RUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QobVN0YXRlLnNjaXNzb3JYLCBtU3RhdGUuc2Np
c3NvclksIG1TdGF0ZS5zY2lzc29yV2lkdGgsIG1TdGF0ZS5zY2lzc29ySGVpZ2h0LCBtUmVuZGVy
VGFyZ2V0RGVzYy5IZWlnaHQpOwotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2xhbXAocmVjdC5s
ZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsKLSAg
ICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAocmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05H
PihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBj
bGFtcChyZWN0LnJpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
V2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2xhbXAocmVjdC5ib3R0b20sIDBM
LCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKKyAgICAgICAg
ICAgIFJFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lz
c29yWCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Cisg
ICAgICAgICAgICByZWN0LnRvcCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWSwgMEwsIHN0YXRpY19j
YXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOworICAgICAgICAgICAgcmVjdC5y
aWdodCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOworICAgICAgICAgICAg
cmVjdC5ib3R0b20gPSBjbGFtcChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwogICAg
ICAgICAgICAgbURldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOwogICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOwogICAg
ICAgICB9CkBAIC0xOTYwLDI2ICsxOTk5LDI2IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJU
YXJnZXQoYm9vbCBpZ24KICAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZv
cm1zRGlydHkpCiAgICAgewogICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3Vy
cmVudFByb2dyYW0oKTsKKyAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAotICAgICAgICBHTGludCBoYWxmUGl4
ZWxTaXplID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKKyAg
ICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5hcnktPmdldER4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0
LldpZHRoLCAtMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOworICAgICAgICBwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKIAotICAgICAgICAvLyBU
aGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3Jh
bTo6bGlua1ZhcnlpbmdzKCkuIFRoZSBhcHByb2FjaCBkZXBlbmRzIG9uIFNoYWRlciBNb2RlbCAz
LjAgc3VwcG9ydC4KLSAgICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtT2JqZWN0LT5nZXREeENv
b3JkTG9jYXRpb24oKTsKLSAgICAgICAgZmxvYXQgaCA9IG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/
IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCA6IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGY7
Ci0gICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYs
IGgsIAorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9G
cmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkuCisgICAgICAgIEdMaW50IGNvb3Jk
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhDb29yZExvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQg
d2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhl
aWdodCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZp
ZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0
IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm00ZnYoY29vcmQsIDEs
IHdoeHkpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGNvb3JkLCAxLCB3
aHh5KTsKIAotICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhM
b2NhdGlvbigpOworICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5hcnktPmdldER4RGVw
dGhMb2NhdGlvbigpOwogICAgICAgICBHTGZsb2F0IGR6WzJdID0geyh6RmFyIC0gek5lYXIpIC8g
Mi4wZiwgKHpOZWFyICsgekZhcikgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMmZ2KGRlcHRoLCAxLCBkeik7CiAKLSAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dy
YW1PYmplY3QtPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRo
UmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpOwogICAgICAg
ICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0gek5lYXJ9Owot
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJG
YXJEaWZmKTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdl
LCAxLCBuZWFyRmFyRGlmZik7CiAgICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAg
ICB9CiAKQEAgLTE5OTAsMTggKzIwMjksMTcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldChib29sIGlnbgogdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSkK
IHsKICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAg
ICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOwogCiAgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBHTGVudW0gYWRqdXN0ZWRGcm9udEZhY2UgPSBhZGp1c3RX
aW5kaW5nKG1TdGF0ZS5mcm9udEZhY2UpOwotCi0gICAgR0xpbnQgZnJvbnRDQ1cgPSBwcm9ncmFt
T2JqZWN0LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKLSAgICBHTGludCBjY3cgPSAoYWRqdXN0
ZWRGcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2
KGZyb250Q0NXLCAxLCAmY2N3KTsKKyAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1CaW5hcnkt
PmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGNjdyA9IChtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NDVyk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9udEND
VywgMSwgJmNjdyk7CiAKLSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+
Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKICAgICBHTGludCBh
bHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci0gICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250
KTsKIAogICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+
Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0g
aWRlbnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwpAQCAtMjAxNSw3ICsyMDUzLDcgQEAgdm9p
ZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogICAgIHsKICAgICAgICAgaWYg
KG1TdGF0ZS5jdWxsRmFjZSkKICAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1
bGxNb2RlLCBhZGp1c3RlZEZyb250RmFjZSkpOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0Q3VsbE1vZGUobVN0YXRlLmN1
bGxNb2RlLCBtU3RhdGUuZnJvbnRGYWNlKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAg
ICAgICB7CkBAIC0yMTE1LDMyICsyMTUzLDMyIEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShH
TGVudW0gZHJhd01vZGUKICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZm
ZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAg
R0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgp
KSAtIDE7CiAKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RF
TkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNf
U1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVO
Q0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5m
cm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJ
TEZVTkMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVy
dENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5jKSk7CiAKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50
KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNp
bE1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYs
IChtU3RhdGUuc3RlbmNpbFJlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2ls
UmVmIDogbWF4U3RlbmNpbCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NX
X1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOwogCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVO
Q0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBH
TF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1Mg
OiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQz
RFJTX0NDV19TVEVOQ0lMUEFTUywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcykpOwog
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRF
TUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJ
TEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklU
RU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3Jp
dGVtYXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9u
dEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVO
QywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29t
cGFyaXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7CiAKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJ
TFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdM
aW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBH
TF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUu
c3RlbmNpbEJhY2tNYXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NU
RU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBt
U3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lM
TUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7CiAK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
VyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRl
LnN0ZW5jaWxCYWNrRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTFpGQUlMLCAKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1df
U1RFTkNJTFpGQUlMLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8g
RDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMjI4
MCwxOCArMjMxOCwyMCBAQCBHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBH
CiB2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGlmIChwcm9n
cmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpCiAgICAgewot
ICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2Jq
ZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFBpeGVsU2hhZGVyKCk7CisgICAgICAgIElE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZl
cnRleFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVy
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxTaGFkZXIoKTsKIAogICAgICAgICBtRGV2aWNlLT5T
ZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5kaXJ0eUFsbFVuaWZv
cm1zKCk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICAg
ICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCk7CiAg
ICAgfQogCi0gICAgcHJvZ3JhbU9iamVjdC0+YXBwbHlVbmlmb3JtcygpOworICAgIHByb2dyYW1C
aW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKIH0KIAogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5k
IHNhbXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQpAQCAtMjMxMSwzMCArMjM1
MSwzMiBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQogdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIGludCBzYW1wbGVy
Q291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
IDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJl
Y3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQogICAgIHVuc2lnbmVkIGludCAq
YXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVk
VGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7CiAgICAgaW50IGQzZFNh
bXBsZXJPZmZzZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhU
VVJFU0FNUExFUjA7Ci0gICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1PYmplY3QtPmdldFVz
ZWRTYW1wbGVyUmFuZ2UodHlwZSk7CisgICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5h
cnktPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7CiAKICAgICBmb3IgKGludCBzYW1wbGVySW5k
ZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAg
IHsKLSAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2FtcGxlck1h
cHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0
IGluZGV4CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBs
ZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2Ug
dW5pdCBpbmRleAogICAgICAgICBpbnQgZDNkU2FtcGxlciA9IHNhbXBsZXJJbmRleCArIGQzZFNh
bXBsZXJPZmZzZXQ7CiAKICAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQogICAgICAgICB7
Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdl
dFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOworICAgICAgICAgICAgVGV4
dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5
cGUodHlwZSwgc2FtcGxlckluZGV4KTsKIAogICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9
IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwog
Ci0gICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0
ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJz
KCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgIGlmIChhcHBsaWVk
VGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNE
aXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4dHVyZSA9
IHRleHR1cmUtPmdldFRleHR1cmUoKTsKIAogICAgICAgICAgICAgICAgIGlmIChkM2RUZXh0dXJl
KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8
IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
YXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVy
ZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwpA
QCAtMjM1MSw3ICsyMzkzLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJU
eXBlIAogICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQz
ZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFs
W3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1cmUt
Pmhhc0RpcnR5SW1hZ2VzKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUlt
YWdlcygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yMzYxLDcgKzI0MDMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVy
ZXMoU2FtcGxlclR5cGUgCiAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUo
ZDNkU2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJl
KCkpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJl
U2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CisgICAg
ICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleFNlcmlh
bDsKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldERpcnR5KCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTI0MjksNyArMjQ3MSw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCAKIAogICAgIEhSRVNVTFQgcmVzdWx0OwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0g
Z2V0UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGlnbm1lbnQoKSA8PSA0ICYmIG1E
aXNwbGF5LT5pc0QzZDlFeERldmljZSgpICYmCisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFn
ZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgpIDw9IDQgJiYgbURp
c3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9
PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0
KSA9PSBkZXNjLkhlaWdodCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLkZvcm1h
dCA9PSBEM0RGTVRfQThSOEc4QjggJiYgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmIHR5cGUgPT0g
R0xfVU5TSUdORURfQllURTsKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCkBAIC0yNDUxLDYgKzI0
OTMsNyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0ODEsMTMg
KzI1MjQsMTMgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKLSAgICBSRUNU
IHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVzYy5IZWln
aHQpOwotICAgIHJlY3QubGVmdCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVj
dC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICByZWN0LmJv
dHRvbSA9IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWln
aHQpKTsKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gY2xhbXAoeCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKKyAgICByZWN0LnRvcCA9IGNsYW1wKHksIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIHJlY3QucmlnaHQgPSBjbGFtcCh4
ICsgd2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7CisgICAgcmVjdC5i
b3R0b20gPSBjbGFtcCh5ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWln
aHQpKTsKIAorICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7CiAgICAgcmVzdWx0ID0gc3lzdGVtU3Vy
ZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKIAogICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKQEAgLTI1MDUsMTMgKzI1NDgsMTMgQEAgdm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgIGludCBpbnB1dFBpdGNoOwogICAgIGlmIChn
ZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCiAgICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWdu
ZWQgY2hhciopbG9jay5wQml0czsKLSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Cisg
ICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNo
ICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKKyAgICAgICAgaW5wdXRQaXRjaCA9IC1s
b2NrLlBpdGNoOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzb3VyY2UgPSAoKHVu
c2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJl
Y3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKKyAgICAgICAg
c291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7CisgICAgICAgIGlucHV0UGl0Y2gg
PSBsb2NrLlBpdGNoOwogICAgIH0KIAogICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgaisrKQpAQCAtMjczOCw2ICsyNzgxLDcgQEAgdm9pZCBDb250ZXh0Ojpj
bGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwogICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsK
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwogCiAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc3RlbmNpbFNpemUgPSBkeDJlczo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQp
OwogICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAx
OwpAQCAtMjk1Miw3ICsyOTk2LDcgQEAgdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBt
b2RlLCBHTAogICAgIGFwcGx5U2hhZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAg
IGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAg
aWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2Ft
cGxlcnMoTlVMTCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgIH0KQEAgLTMwNDIsNyArMzA4Niw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCAKICAgICBhcHBseVNoYWRlcnMoKTsKICAgICBhcHBseVRleHR1
cmVzKCk7CiAKLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMo
ZmFsc2UpKQorICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
LT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQpAQCAtMzQ1Miw2ICszNDk2LDExIEBAIGJvb2wg
Q29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHQKICAgICByZXR1cm4gbVN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RlcHRo
VGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwor
fQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwpAQCAtMzY3Nyw2ICszNzI2LDcgQEAgdm9pZCBD
b250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKICAgICB9CiAKICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKKyAgICAvL21FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAiOwogCkBAIC0zNzIwLDYgKzM3NzAsMTEgQEAgdm9p
ZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlICI7CiAKICAgICAvLyBBTkdMRS1zcGVjaWZpYyBleHRl
bnNpb25zCisgICAgaWYgKHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgIHsKKyAgICAgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOworICAgIH0KKwog
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKICAg
ICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCiAgICAgewpAQCAtMzgyMCwxNyAr
Mzg3NSwxNyBAQCB2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYCiAKICAg
ICBpZiAoc3JjWTAgPCBzcmNZMSkKICAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0gcmVh
ZEJ1ZmZlckhlaWdodCAtIHNyY1kxOwotICAgICAgICBkZXN0UmVjdC50b3AgPSBkcmF3QnVmZmVy
SGVpZ2h0IC0gZHN0WTE7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhl
aWdodCAtIHNyY1kwOwotICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVpZ2h0
IC0gZHN0WTA7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7CisgICAgICAgIGRl
c3RSZWN0LmJvdHRvbSA9IGRzdFkxOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOwor
ICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAg
IGRlc3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKLSAgICAgICAgc291cmNl
UmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0
LmJvdHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKKyAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSBzcmNZMDsKKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7CisgICAgICAg
IHNvdXJjZVJlY3QudG9wID0gc3JjWTE7CisgICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkxOwog
ICAgIH0KIAogICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7CkBAIC00
MDQzLDcgKzQwOTgsMTMgQEAgdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3Jj
WAogCiAgICAgICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhTdGVuY2lsKCksIE5VTEwsIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
KCksIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSog
cmVhZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Cisg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZERlcHRoU3RlbmNpbCwgTlVMTCwgZHJhd0RlcHRo
U3RlbmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgcmVhZERlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOworICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbC0+UmVsZWFzZSgp
OwogCiAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgICAgICB7CkBAIC00
MTE1LDYgKzQxNzYsOCBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNs
CiAgICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07
CiAgICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07CiAKKyAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAg
ICB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKQEAgLTQxNzAsNyArNDIzMyw3
IEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2wKICAgICAgICAgICAg
IGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7CiAgICAgICAgICAgICBlbGVtZW50
LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7CiAgICAgICAgICAgICBlbGVtZW50LT5V
c2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdl
SW5kZXggPSBwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGkpOworICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CiAgICAg
ICAgICAgICBlbGVtZW50Kys7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMTIyMjM5
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBjbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlCiAgIHByaXZhdGU6CiAgICAgVUlOVCBtTWF4THJ1OwogCi0gICAgZW51bSB7IE5VTV9WRVJU
RVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMTYgfTsKKyAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNM
X0NBQ0hFX0VOVFJJRVMgPSAzMiB9OwogCiAgICAgc3RydWN0IFZCRGF0YQogICAgIHsKQEAgLTI4
MSw3ICsyODEsOCBAQCBjbGFzcyBDb250ZXh0CiAKICAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6
RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKIAotICAgIHZvaWQgbWFy
a0FsbFN0YXRlRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsK
KyAgICB2b2lkIG1hcmtEeFVuaWZvcm1zRGlydHkoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJr
Q29udGV4dExvc3QoKTsKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKQEAgLTQ5NSw2ICs0OTYs
NyBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4
dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25z
dDsKICAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0OworICAg
IGJvb2wgc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0czMy
Yml0SW5kaWNlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkg
Y29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKQEAgLTYxNyw2ICs2
MTksNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJs
ZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CiAgICAgYm9v
bCBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOworICAgIGJvb2wgbVN1cHBvcnRzRGVw
dGhUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0czMyYml0SW5kaWNlczsKICAgICBpbnQgbU51
bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yOSw2ICsyOSw3IEBAIEZyYW1lYnVmZmVyOjp+RnJhbWVi
dWZmZXIoKQogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1EZXB0aGJ1
ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVM
TCk7CisgICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogfQogCiBSZW5kZXJi
dWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBoYW5kbGUpIGNvbnN0CkBAIC0xMjgsNiArMTI5LDggQEAgdW5zaWduZWQgaW50IEZyYW1lYnVm
ZmVyOjpnZXRSZW5kZXJUYXJnZQogICAgIHJldHVybiAwOwogfQogCisvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
KCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRl
ci5nZXQoKTsKQEAgLTE0MCw2ICsxNDMsOCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZm
ZXI6OmdldFJlbmRlCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQog
ewogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9p
bnRlci5nZXQoKTsKQEAgLTE5Niw2ICsyMDEsMzAgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZgogICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7
CiB9CiAKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldE51bGxDb2xvcmJ1ZmZlcigpCit7
CisgICAgUmVuZGVyYnVmZmVyICpudWxsYnVmZmVyICA9IG1OdWxsQ29sb3JidWZmZXJQb2ludGVy
LmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigp
OworCisgICAgaWYgKCFkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiVW5leHBlY3Rl
ZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4iKTsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lk
dGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKwor
ICAgIGlmICghbnVsbGJ1ZmZlciB8fAorICAgICAgICB3aWR0aCAhPSBudWxsYnVmZmVyLT5nZXRX
aWR0aCgpIHx8IGhlaWdodCAhPSBudWxsYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICB7CisgICAg
ICAgIG51bGxidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKDAsIG5ldyBDb2xvcmJ1ZmZlcih3aWR0
aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7CisgICAgICAgIG1OdWxsQ29sb3JidWZmZXJQb2ludGVy
LnNldChudWxsYnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbGJ1ZmZlcjsKK30KKwog
R0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUoKQogewogICAgIHJldHVybiBt
Q29sb3JidWZmZXJUeXBlOwpAQCAtMjQzLDkgKzI3MiwxMSBAQCBib29sIEZyYW1lYnVmZmVyOjpo
YXNTdGVuY2lsKCkKIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogeworICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKICAgICBpbnQgd2lkdGgg
PSAwOwogICAgIGludCBoZWlnaHQgPSAwOwogICAgIGludCBzYW1wbGVzID0gLTE7CisgICAgYm9v
bCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7CiAKICAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQogICAgIHsKQEAgLTI3MCwzMSArMzAxLDM4IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChJc0ludGVybmFs
VGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKElzQ29tcHJlc3NlZChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAg
ICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoaW50ZXJuYWxm
b3JtYXQpIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQUxQSEEgfHwK
KyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgfHwKKyAgICAg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoKGR4MmVzOjpJc0Zsb2F0MzJGb3Jt
YXQoY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpKSAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwgCi0gICAgICAgICAgICAgICAgKGR4MmVz
OjpJc0Zsb2F0MTZGb3JtYXQoY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpKSAmJiAhZ2V0Q29u
dGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCisgICAgICAgICAg
ICBpZiAoKGR4MmVzOjpJc0Zsb2F0MzJGb3JtYXQoZDNkZm9ybWF0KSAmJiAhY29udGV4dC0+c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8CisgICAgICAgICAgICAgICAgKGR4
MmVzOjpJc0Zsb2F0MTZGb3JtYXQoZDNkZm9ybWF0KSAmJiAhY29udGV4dC0+c3VwcG9ydHNGbG9h
dDE2UmVuZGVyYWJsZVRleHR1cmVzKCkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0xVTUlO
QU5DRSB8fCBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0Vf
QUxQSEEpCisgICAgICAgICAgICBpZiAoZHgyZXM6OklzRGVwdGhUZXh0dXJlRm9ybWF0KGQzZGZv
cm1hdCkgfHwgZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7CisgICAgICAgIH0KIAogICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgp
OwogICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgIHNh
bXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQ7CisgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CkBAIC0zMDIsMTEgKzM0MCw2IEBAIEdM
ZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmIChtRGVwdGhidWZmZXJU
eXBlICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBH
TF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9VTlNVUFBPUlRFRDsgICAvLyBSZXF1aXJlcyBHTF9PRVNfZGVwdGhfdGV4dHVyZQotICAg
ICAgICB9Ci0KICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAg
ICAgIGlmICghZGVwdGhidWZmZXIpCkBAIC0zMTksMTkgKzM1Miw0NCBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09
IDApCisgICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAg
ICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAg
ICAgICAgICAgIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAg
IGlmICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1h
dCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAh
PSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAg
RDNERk9STUFUIGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAg
ICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9k
ZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0
dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghZHgyZXM6OklzRGVwdGhUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKICAgICAgICAg
eworICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAg
ICAgIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIHNhbXBs
ZXMgPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpOworICAgICAgICAgICAgbWlzc2luZ0F0dGFj
aG1lbnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0
aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9ESU1FTlNJT05TOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gZGVw
dGhidWZmZXItPmdldFNhbXBsZXMoKSkKICAgICAgICAgewpAQCAtMzQxLDExICszOTksNiBAQCBH
TGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAKICAgICBpZiAobVN0ZW5jaWxidWZm
ZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBl
ICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICB9Ci0KICAgICAgICAgc3RlbmNpbGJ1ZmZl
ciA9IGdldFN0ZW5jaWxidWZmZXIoKTsKIAogICAgICAgICBpZiAoIXN0ZW5jaWxidWZmZXIpCkBA
IC0zNTgsMTkgKzQxMSw0NSBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAgICAgIGlmIChtU3RlbmNp
bGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3
aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBz
dGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNp
bFJlbmRlcmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3
aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBzdGVuY2lsYnVm
ZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1B
VCBkM2Rmb3JtYXQgPSBzdGVuY2lsYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAg
ICAgLy8gdGV4dHVyZSBzdGVuY2lsIGF0dGFjaG1lbnRzIGNvbWUgYWxvbmcgYXMgcGFydAorICAg
ICAgICAgICAgLy8gb2YgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICsgT0VTL0FOR0xFX2RlcHRo
X3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVz
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChz
YW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCiAgICAgICAgIHsK
KyAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAg
ICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgc2Ft
cGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgIG1pc3NpbmdB
dHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0g
c3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2FtcGxl
cyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsKQEAgLTM3OCwxNCAr
NDU3LDE3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUiAmJiBt
U3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIC8vIGlmIHdlIGhhdmUg
Ym90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgdGhleSBtdXN0IHJlZmVyIHRvIHRoZSBz
YW1lIG9iamVjdAorICAgIC8vIHNpbmNlIHdlIG9ubHkgc3VwcG9ydCBwYWNrZWRfZGVwdGhfc3Rl
bmNpbCBhbmQgbm90IHNlcGFyYXRlIGRlcHRoIGFuZCBzdGVuY2lsCisgICAgaWYgKGRlcHRoYnVm
ZmVyICYmIHN0ZW5jaWxidWZmZXIgJiYgKGRlcHRoYnVmZmVyICE9IHN0ZW5jaWxidWZmZXIpKQog
ICAgIHsKLSAgICAgICAgaWYgKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8Ci0gICAgICAgICAg
ICBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCkgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CisgICAgfQorCisgICAgLy8gd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50
IHRvIGJlIGNvbXBsZXRlCisgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwog
ICAgIH0KIAogICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJ
KHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBjbGFzcyBG
cmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoKTsKICAgICBSZW5k
ZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRTdGVuY2ls
YnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoKTsKIAogICAg
IEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJU
eXBlKCk7CkBAIC03Myw2ICs3NCw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgR0xlbnVtIG1T
dGVuY2lsYnVmZmVyVHlwZTsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVu
Y2lsYnVmZmVyUG9pbnRlcjsKIAorICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51
bGxDb2xvcmJ1ZmZlclBvaW50ZXI7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRnJhbWVidWZmZXIpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgsNiArOCw3IEBACiAvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKIAog
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0xNywyMjYxICsxOCw4NSBAQAogCiAjaW5j
bHVkZSA8c3RyaW5nPgogCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KIG5hbWVzcGFjZSBnbAogewotdW5zaWdu
ZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLWNvbnN0IGNoYXIgKmZha2VwYXRo
ID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsKLSAgICBjaGFy
IGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOwotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIF9u
YW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJh
eVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUo
dHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsK
LSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLX0KLQotVW5p
Zm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19Ci0KLWJvb2wgVW5pZm9y
bTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09
IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCi0g
ICAgOiBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1lbnQoZWxl
bWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFu
YWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIp
LCBtSGFuZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKLXsKLSAgICBtRGV2aWNl
ID0gZ2V0RGV2aWNlKCk7Ci0gICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICBtVmVydGV4
U2hhZGVyID0gTlVMTDsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICBt
Q29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICBtVmFs
aWRhdGVkID0gZmFsc2U7Ci0KLSAgICB1bmxpbmsoKTsKLQotICAgIG1EZWxldGVTdGF0dXMgPSBm
YWxzZTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0KLVByb2dyYW06On5Qcm9ncmFtKCkKLXsK
LSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmICht
RnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+
cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVy
ICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFE
RVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleFNoYWRlciA9
IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+YWRkUmVmKCk7
Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NI
QURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GcmFnbWVudFNo
YWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBtRnJhZ21lbnRTaGFkZXIt
PmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCi17
Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewot
ICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJl
bGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAg
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJl
bGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICB9Ci0gICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAiQzpcXGZh
a2VwYXRoIjsKIAotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEg
OiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Cit1bnNpZ25lZCBpbnQgUHJvZ3Jh
bTo6bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW06
OmdldFBpeGVsU2hhZGVyKCkKK0F0dHJpYnV0ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5kaW5ncygp
CiB7Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7CiB9CiAKLUlEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5nczo6fkF0
dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7CiB9CiAK
LXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3Qg
Y2hhciAqbmFtZSkKK0luZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCiB7Ci0gICAg
aWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwotICAgIH0KIH0KIAotR0x1
aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCitJbmZv
TG9nOjp+SW5mb0xvZygpCiB7Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6
OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Cisg
ICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAKLWludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4
KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAm
JiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJu
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KIAotLy8gUmV0dXJucyBvbmUgbW9y
ZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dyYW06Omdl
dFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKK2ludCBJbmZvTG9nOjpnZXRMZW5n
dGgoKSBjb25zdAogewotICAgIHN3aXRjaCAodHlwZSkKKyAgICBpZiAoIW1JbmZvTG9nKQogICAg
IHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxT
YW1wbGVyUmFuZ2U7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4g
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIGlu
ZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBE
aXJlY3QzRCA5IHNhbXBsZXIKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFu
ZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW06OmdldFNhbXBsZXJN
YXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0g
ICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlcklu
ZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQotICAg
ICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBTQU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZiht
U2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dp
Y2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJl
VW5pdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2lj
YWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVV
bml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUgdGV4dHVy
ZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAotLy8gaW5kZXgg
KDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIp
LgotVGV4dHVyZVR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgc3dpdGNoICh0eXBlKQot
ICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJ
bmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0gICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJl
dHVybiBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgY2FzZSBT
QU1QTEVSX1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0
VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgdW5zaWduZWQgaW50IHN1
YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3Ig
YW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9s
YXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsK
LSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0
aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3Bl
biArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9j
YXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1l
ID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
PT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0
VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9h
dCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAg
ICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAg
ICAgIHYgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFd
OwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7
Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVD
MikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZv
TG9nKSArIDE7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3ZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICppbmZvTG9nKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAgaW50IGlu
ZGV4ID0gMDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRb
MV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0g
MzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDMykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICBpZiAobUluZm9Mb2cpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihi
dWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAgICAgIG1lbWNweShp
bmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
CiAKLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAgICAgICAg
ICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICAgICAgaW5mb0xvZ1tp
bmRleF0gPSAnXDAnOwogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CiAKLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
KEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyAr
K2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0aCwgaW50
IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9pZCB0cmFuc3Bv
c2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpbnQgY29w
eVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKLSAgICBpbnQgY29weUhl
aWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKLQotICAgIGZvciAoaW50
IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0gICAgewotICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3gg
KiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsg
eSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRh
cmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dy
YW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJh
bnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRh
cmdldCArPSA4OwotICAgICAgICB2YWx1ZSArPSA0OwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBH
TF9GTE9BVF9NQVQzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDEyOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRhcmdldCwg
dmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0
cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICog
MTYpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwgdmFsdWUpOwotICAgICAg
ICB0YXJnZXQgKz0gMTY7Ci0gICAgICAgIHZhbHVlICs9IDE2OwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQg
fHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAg
ICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0g
ICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXplb2YoR0xp
bnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
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
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAg
ICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAqIHNpemVv
ZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAq
IDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgIC8vIHNp
emVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdo
Ci0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVu
aWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVm
U2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9h
dCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0
LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRl
cm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAgICAgdW5z
aWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0
YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFt
cywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBx
dWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAg
IGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3Jt
RXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUg
PCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAg
ewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgewot
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQs
ND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBV
bmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9u
ZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxv
YXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0
UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAg
ICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAotICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCi0gICAgewotICAgICAgICBtVW5pZm9ybXNb
aW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBBcHBsaWVzIGFsbCB0aGUgdW5p
Zm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0ZDo6dmVjdG9y
PFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9y
bXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSAqdWI7Ci0KLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwot
ICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwot
ICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0gICAg
ICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdl
dFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUs
IDIsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBs
eVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVu
aWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZv
cm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVS
X0NVQkU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzog
ICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLS8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVkIHNoYWRl
cnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFtOjpjb21waWxl
VG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25z
dGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAgewotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0gICAgVUlOVCBm
bGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAocGVyZkFjdGl2
ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLSNpZmRlZiBO
REVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7
Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwot
I2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7
Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNl
UGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAg
ICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJj
ZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0g
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBo
bHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0gICAgSUQzRDEw
QmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2ws
IHN0cmxlbihobHNsKSwgZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxh
Z3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JN
ZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nU2Fu
aXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwotICAgICAgICBU
UkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGVycm9yTWVzc2FnZS0+UmVsZWFzZSgp
OwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50VGFibGUoc3Rh
dGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0
YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKLQotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5OwotfQotCi0vLyBQYWNrcyB2YXJ5aW5n
cyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJv
bSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNl
Y3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyBy
ZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbTo6cGFja1Zhcnlpbmdz
KGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQt
PmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRl
cmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlp
bmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7
Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlp
bmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50
eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG0gPT0g
MiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0g
JiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYq
dmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1Zl
Y3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4
IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFp
bGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3Ig
KyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0gICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgY29sdW1u
ID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2VbeF0gPCBz
cGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29s
dW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9
IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIG47
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgIGlm
ICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJDb3Vs
ZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBu
dW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQotICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0gICAgICAg
IGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBw
YWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6
bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1WZXJ0ZXhI
TFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgZnJhZ1ZhciAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1Zh
cisrKQotICAgIHsKLSAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7Ci0gICAgICAgIGZyYWdWYXIt
PmNvbCA9IC0xOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZh
ciA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gbVZlcnRleFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZhci0+
cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8gTWFw
IHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBh
Y2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCByZWdp
c3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzIDwgMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUg
SExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0
TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09IG1heFZhcnlp
bmdWZWN0b3JzICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9y
dCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
aW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCi0gICAgICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBv
dXRwdXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlwZSBvZiB2
ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5
aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRwdXQtPnJl
ZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29s
OwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNoZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFyeWluZyAl
cyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigp
KTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQi
KTsKLQotICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAgICAgICAgICAg
ICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExT
TCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0g
VmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIG1WZXJ0ZXhI
TFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7Ci0KLSAg
ICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAgICAgICAgaW50
IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDog
KHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0
ZXJzKSArICI7XG4iOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50
U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IGds
X1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtc
biIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIlZTX09VVFBV
VCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0g
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKLQot
ICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBN
YXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7
Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0
ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIG1WZXJ0
ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQg
b3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLngg
PSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRp
b24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xf
UG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIt
Pm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3Ry
KChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0K
LQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247
XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBt
VmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5n
LT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2
YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAg
ICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJl
Z2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAm
JiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hh
cmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9ICJ4IjsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBtVmVydGV4SExT
TCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICJ9
XG4iOwotCi0gICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0gICAgICAgICAg
ICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5
aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAg
aWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAg
ICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhf
VlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9Ci0KLSAg
ICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgotICAg
ICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQot
ICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0
LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbTMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkLnkgY29udGFpbnMgdGhlIHJlbmRlciB0YXJnZXQg
aGVpZ2h0LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gZHhfQ29v
cmQueSAtIGlucHV0LmR4X1ZQb3MueSAtIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3Bv
cnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsg
ZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29v
cmQueSA9IC0oaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nv
b3JkLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtUGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVw
dGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFn
Q29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVz
ZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBn
bF9Qb2ludENvb3JkID0gaW5wdXQuZ2xfUG9pbnRDb29yZDtcbiI7Ci0gICAgfQotCi0gICAgaWYg
KG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zy
b250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4i
OwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBy
b3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3Mg
KyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5n
LT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAi
WyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiID0gaW5w
dXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBtUGl4ZWxI
TFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0
O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9D
b2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1c
biI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0
aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3Ms
Ci0vLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmli
dXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZvcm1zCi12b2lk
IFByb2dyYW06OmxpbmsoKQotewotICAgIHVubGluaygpOwotCi0gICAgaWYgKCFtRnJhZ21lbnRT
aGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRleFNoYWRl
ci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1Q
aXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBtVmVydGV4SExTTCA9
IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1ZhcnlpbmdzKCkpCi0g
ICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7Ci0gICAgY29uc3QgY2hh
ciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18z
XzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxl
VG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRh
YmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1Q
aXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7Ci0KLSAg
ICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAgSFJFU1VM
VCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0
ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKLSAgICAg
ICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09S
RCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOwot
Ci0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
dmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NFRURFRChw
aXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAg
ICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBOVUxMOwot
ICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhFeGVjdXRh
YmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbGlu
a0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRh
YmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVWUykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1k
ZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVk
IHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCi0gICAg
ICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Rl
cHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7Ci0gICAgICAg
ICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udEND
VyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIG1MaW5rZWQgPSB0cnVl
OyAgIC8vIFN1Y2Nlc3MKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRGV0ZXJtaW5lcyB0aGUg
bWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVh
bSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkKLXsKLSAgICB1
bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMg
dGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0
ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
Ci0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJp
YnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1MaW5rZWRB
dHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBs
b2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5r
ZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIGlm
IChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQg
bG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwg
bG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsg
aSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsg
YXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVC
aW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAg
IC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAg
ICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2Nh
dGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFp
bGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJU
b28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkp
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4
XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCi0gICAg
ewotICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBpbnQgcm93cyA9
IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRl
eF0udHlwZSksIDEpOwotCi0gICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9
IGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50
IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17
Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklC
UzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2Nh
dGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMoSUQzRFhD
b25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFOVFRBQkxFX0RF
U0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOwotICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0
YW50RGVzY3JpcHRpb247Ci0gICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQotICAgIGNv
bnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0
YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKLSAgICB7Ci0g
ICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25z
dGFudCgwLCBjb25zdGFudEluZGV4KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFu
dFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0
aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGNvbnN0YW50SGFuZGxlLCBjb25zdGFu
dERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFkZHMgdGhlIGRlc2Ny
aXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxp
c3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90
IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RY
SEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3RhbnQgPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0
aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNvbnN0YW50
VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1l
KTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdl
dFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2Ft
cGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVy
ZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkg
PyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxl
cnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAx
LCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
VG9JbmZvTG9nKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVz
Y3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVY
VFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5s
b2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxl
clJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJWZXJ0ZXgg
c2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0
cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaChjb25zdGFu
dERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFy
cmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAw
OyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5k
bGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQp
OwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRp
b247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRD
b25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25D
b3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikg
OiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oZmllbGRIYW5k
bGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUgKyBz
dHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RP
UjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgotICAgICAgY2FzZSBEM0RYUENf
T0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9u
LCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIFVuaWZvcm0g
KnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKLQot
ICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAotICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOwotICAgIEdMZW51bSB0eXBlID0gdW5pZm9y
bS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAwKQotICAgIHsKLSAgICAgICAgZGVsZXRl
IHVuaWZvcm07Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplQ29uc3RhbnRIYW5k
bGVzKHVuaWZvcm0sICZ1bmlmb3JtLT5wcywgbUNvbnN0YW50VGFibGVQUyk7Ci0gICAgaW5pdGlh
bGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+dnMsIG1Db25zdGFudFRhYmxl
VlMpOwotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBp
bnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsKLSAgICAg
ICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlm
b3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJv
Z3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25zdGFudERl
c2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9T
QU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9W
RUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3Rh
bnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxP
QVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRl
Y29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpz
dHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
KQotewotICAgIGlmIChfbmFtZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICByZXR1cm4gX25h
bWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChfbmFtZS5jb21wYXJlKDAsIDMsICJh
cl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigzKTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIF9uYW1lOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9y
bW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNv
bnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRT
XTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQgfHwKLSAgICAgICAgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlf
TUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAq
IHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNf
Qk9PTCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYmIHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgIHsKLSAgICAgICAg
aW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9P
TCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgdnND
b3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MID8gdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBjb3B5Q291bnQg
PSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7Ci0g
ICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAg
ICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVySW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5k
ZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQg
KnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewot
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAg
ICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0x
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Ci17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAg
RDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBE
M0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0
ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCAo
Y29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfU0FNUExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0
SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4OwotCi0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0
ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAq
KXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0y
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Ci17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAg
RDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBE
M0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOwotCi0gICAgICAgIHYg
Kz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQs
IHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAw
KTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdl
dFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsKLSAgICB9Ci0K
LSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rv
cikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxP
QVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKKyAgICBpZiAobGVuZ3RoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OwogICAgIH0KIH0KIAogLy8gYXBw
ZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBpbmZvIGxvZy4KIC8vIFRoZSBE
M0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBpbiBzb21lIG9mIHRoZSB3YXJu
aW5nIG9yIGVycm9yIAogLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVtb3ZlIGFsbCBvY2N1cnJlbmNl
cyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4KLXZvaWQgUHJvZ3JhbTo6YXBw
ZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit2b2lkIEluZm9Mb2c6
OmFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIHN0ZDo6c3RyaW5n
IG1zZyhtZXNzYWdlKTsKIAogICAgIHNpemVfdCBmb3VuZDsKICAgICBkbwogICAgIHsKLSAgICAg
ICAgZm91bmQgPSBtc2cuZmluZChmYWtlcGF0aCk7CisgICAgICAgIGZvdW5kID0gbXNnLmZpbmQo
Z19mYWtlcGF0aCk7CiAgICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKICAg
ICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZmFrZXBhdGgpKTsK
KyAgICAgICAgICAgIG1zZy5lcmFzZShmb3VuZCwgc3RybGVuKGdfZmFrZXBhdGgpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOwogCi0g
ICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbXNnLmNfc3RyKCkpOworICAgIGFwcGVuZCgiJXNc
biIsIG1zZy5jX3N0cigpKTsKIH0KIAotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2coY29u
c3QgY2hhciAqZm9ybWF0LCAuLi4pCit2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBjaGFyICpm
b3JtYXQsIC4uLikKIHsKICAgICBpZiAoIWZvcm1hdCkKICAgICB7CkBAIC0yMzA0LDcgKzEyOSw3
IEBAIHZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIKICAgICB9CiB9CiAK
LXZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKK3ZvaWQgSW5mb0xvZzo6cmVzZXQoKQogewog
ICAgIGlmIChtSW5mb0xvZykKICAgICB7CkBAIC0yMzEzLDk5ICsxMzgsMTcwIEBAIHZvaWQgUHJv
Z3JhbTo6cmVzZXRJbmZvTG9nKCkKICAgICB9CiB9CiAKLS8vIFJldHVybnMgdGhlIHByb2dyYW0g
b2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVz
dHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKK1Byb2dyYW06OlBy
b2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJj
ZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgp
KQogewotICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCi0gICAg
ewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOworICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOworICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKKyAgICBtRGVsZXRl
U3RhdHVzID0gZmFsc2U7CisgICAgbVJlZkNvdW50ID0gMDsKK30KIAotICAgICAgICBpZiAobVZl
cnRleFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFz
ZSgpOwotICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9
CitQcm9ncmFtOjp+UHJvZ3JhbSgpCit7CisgICAgdW5saW5rKHRydWUpOwogCi0gICAgaWYgKG1Q
aXhlbEV4ZWN1dGFibGUpCisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0g
ICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVBpeGVsRXhlY3V0
YWJsZSA9IE5VTEw7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKICAgICB9CiAK
LSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBO
VUxMKQogICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJl
bGVhc2UoKTsKICAgICB9Cit9CiAKLSAgICBpZiAobUNvbnN0YW50VGFibGVQUykKK2Jvb2wgUHJv
Z3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdl
dFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFi
bGVQUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICB9
CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgICAg
ICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOworICAgICAgICBtVmVydGV4
U2hhZGVyLT5hZGRSZWYoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkg
PT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+
UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKyAgICAgICAgaWYg
KG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilz
aGFkZXI7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7CiAgICAgfQorICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKK2Jvb2wgUHJv
Z3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdl
dFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQogICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJp
YnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0g
PSAtMTsKLSAgICB9CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisg
ICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9
IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAg
IH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50
IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQog
Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEY7IGluZGV4KyspCit2b2lkIEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmli
dXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlmIChp
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKICAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2lu
ZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRp
bmdbaV0uZXJhc2UobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGlu
Z1tpbmRleF0uaW5zZXJ0KG5hbWUpOwogICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kQXR0
cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIG1B
dHRyaWJ1dGVCaW5kaW5ncy5iaW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOworfQor
CisvLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBi
eSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5ncywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8gYmlu
YXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5n
CisvLyBhIGxpc3Qgb2YgdW5pZm9ybXMKK3ZvaWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAgdW5s
aW5rKGZhbHNlKTsKIAotICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKLSAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKyAgICBtSW5mb0xvZy5yZXNldCgpOwogCi0gICAgd2hp
bGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFt
QmluYXJ5OworICAgIGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1
dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKICAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2so
KTsKKyAgICAgICAgdW5saW5rKGZhbHNlKTsKICAgICB9Cit9CiAKLSAgICBtRHhEZXB0aFJhbmdl
TG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRM
b2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1E
eEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAt
MTsKK2ludCBBdHRyaWJ1dGVCaW5kaW5nczo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0
aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYg
KG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5k
aW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0
aW9uOworICAgICAgICB9CisgICAgfQogCi0gICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworICAg
IHJldHVybiAtMTsKK30KIAotICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKLSAgICBtVmVydGV4SExT
TC5jbGVhcigpOworLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQg
c3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFt
Ojp1bmxpbmsoYm9vbCBkZXN0cm95KQoreworICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBi
ZWluZyBkZXN0cnVjdGVkCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KIAotICAgIGRlbGV0ZVtdIG1J
bmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgICAgICB9CisgICAgfQogCi0gICAgbUxp
bmtlZCA9IGZhbHNlOworICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZSBtUHJvZ3JhbUJpbmFyeTsKKyAgICAgICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOworICAg
IH0KIH0KIAotYm9vbCBQcm9ncmFtOjppc0xpbmtlZCgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFt
OjpnZXRQcm9ncmFtQmluYXJ5KCkKIHsKLSAgICByZXR1cm4gbUxpbmtlZDsKKyAgICByZXR1cm4g
bVByb2dyYW1CaW5hcnk7CiB9CiAKLWJvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAK
K3ZvaWQgUHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KQogewotICAgIHJldHVybiBtVmFsaWRhdGVkOworICAgIHVubGluayhmYWxzZSk7CisgICAg
bVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5OwogfQogCiB2b2lkIFByb2dyYW06OnJlbGVh
c2UoKQpAQCAtMjQ0MCwzNSArMzM2LDEyIEBAIHVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNl
cmlhbCgpCiAKIGludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICBy
ZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3RoKCk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAg
ICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAg
ICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGJ1
ZlNpemUpCi0gICAgewotICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0g
ICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Cisg
ICAgcmV0dXJuIG1JbmZvTG9nLmdldExvZyhidWZTaXplLCBsZW5ndGgsIGluZm9Mb2cpOwogfQog
CiB2b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNp
emVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKQpAQCAtMjUwMywxNTIgKzM3Niw5NiBAQCB2b2lk
IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpCiAKIHZvaWQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICAv
LyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVB
dHRyaWJ1dGUgPSAwOwotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRy
aWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQor
ICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0
aXZlQXR0cmlidXRlKys7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1
dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0g
ICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIg
KnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0KLSAg
ICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNp
emUgLSAxXSA9ICdcMCc7Ci0KKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
aWYgKGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1l
KTsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgKnNp
emUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKLQotICAgICp0eXBl
ID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7CisgICAgICAgICp0eXBlID0gR0xf
Tk9ORTsKKyAgICAgICAgKnNpemUgPSAxOworICAgIH0KIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlQ291bnQoKQogewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3Ig
KGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0g
ICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIGNv
dW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQog
ewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOwotICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAg
IHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGludGVy
bmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAgIHVu
c2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5p
Zm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsK
LSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8i
KSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBs
ZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwogICAgIH0KLQotICAgIEFTU0VSVCh1bmlmb3JtIDwg
bVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAgICAg
ewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7
Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICBp
ZiAoYnVmc2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsK
KyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwogICAgICAgICB9CiAKLSAgICAgICAgc3RybmNw
eShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAt
IDFdID0gJ1wwJzsKLQogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXpl
OwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7CisgICAgICAgICpzaXpl
ID0gMDsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgIH0KIH0KIAogR0xpbnQgUHJvZ3Jh
bTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKIHsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAg
dW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3Jtczsg
dW5pZm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAg
aWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIGNv
dW50OwogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKIHsK
LSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9
IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlmICht
UHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJl
KDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0g
KGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAgICAg
ICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIu
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgs
IG1heExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5n
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKIHZvaWQg
UHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKQEAgLTI2NjMsMTYxICs0ODAsMjggQEAgYm9vbCBQ
cm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbgogCiB2b2lkIFByb2dyYW06OnZhbGlk
YXRlKCkKIHsKLSAgICByZXNldEluZm9Mb2coKTsKKyAgICBtSW5mb0xvZy5yZXNldCgpOwogCi0g
ICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBs
aW5rZWQuIik7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgbVByb2dyYW1C
aW5hcnktPnZhbGlkYXRlKG1JbmZvTG9nKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAg
ICAgYXBwbHlVbmlmb3JtcygpOwotICAgICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnModHJ1ZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoYm9v
bCBsb2dFcnJvcnMpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBw
cm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAg
IC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwg
dGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFu
ZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdl
dENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5p
dFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAg
ICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1w
bGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dO
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50ZXh0
dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZs
aWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIs
IHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5p
dF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhT
YW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3Rp
dmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJz
VlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMg
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVV
bml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlw
ZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dF
cnJvcnMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1
cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1JbmZvTG9nLmFwcGVu
ZCgiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBQcm9ncmFtOjppbml0aWFsaXplQ29uc3RhbnRI
YW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcmks
IElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxp
ZGF0ZWQoKSBjb25zdAogewotICAgIEQzRFhIQU5ETEUgaGFuZGxlID0gY29uc3RhbnRUYWJsZS0+
R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+X25hbWUuY19zdHIoKSk7Ci0gICAg
aWYgKGhhbmRsZSkKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBVSU5U
IGRlc2NyaXB0aW9uQ291bnQgPSAxOwotICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFu
dERlc2NyaXB0aW9uOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdl
dENvbnN0YW50RGVzYyhoYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25D
b3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIHJpLT5y
ZWdpc3RlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OwotICAgICAg
ICByaS0+cmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsK
LSAgICAgICAgcmktPnJlZ2lzdGVyU2V0ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNl
dDsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5pc1ZhbGlkYXRlZCgpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewotICAgICAgICByaS0+cmVnaXN0ZXJDb3VudCA9IDA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhSYW5n
ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwot
fQotCi1HTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeENvb3JkTG9j
YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOwotfQotCi1HTGlu
dCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhG
cm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlv
bjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247Ci19Ci0KIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShy
ZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVT
VjJfUFJPR1JBTV9IXwogCiAjaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxl
ci5oPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8c2V0
PgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMjUsNDIgKzIzLDM2IEBAIGNs
YXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEZyYWdtZW50U2hhZGVyOwogY2xhc3MgVmVydGV4
U2hhZGVyOwogCi0vLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIg
dW5pZm9ybQotc3RydWN0IFVuaWZvcm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25z
dCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOwotCi0gICAgflVu
aWZvcm0oKTsKLQotICAgIGJvb2wgaXNBcnJheSgpOwotCi0gICAgY29uc3QgR0xlbnVtIHR5cGU7
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKLSAgICBj
b25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qg
dW5zaWduZWQgaW50IGFycmF5U2l6ZTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ19mYWtl
cGF0aDsKIAotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKK2NsYXNz
IEF0dHJpYnV0ZUJpbmRpbmdzCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncygp
OworICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwogCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwot
ICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2V0OwotICAgICAgICBpbnQgcmVnaXN0ZXJJbmRl
eDsKLSAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKKyAgICB2b2lkIGJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBn
ZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKIAotICAg
IFJlZ2lzdGVySW5mbyBwczsKLSAgICBSZWdpc3RlckluZm8gdnM7CisgIHByaXZhdGU6CisgICAg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklC
U107CiB9OwogCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVu
dHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgor
Y2xhc3MgSW5mb0xvZwogewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICBwdWJs
aWM6CisgICAgSW5mb0xvZygpOworICAgIH5JbmZvTG9nKCk7CisKKyAgICBpbnQgZ2V0TGVuZ3Ro
KCkgY29uc3Q7CisgICAgdm9pZCBnZXRMb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmluZm9Mb2cpOwogCi0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgICAgdm9pZCBhcHBlbmRT
YW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hh
ciAqaW5mbywgLi4uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEluZm9Mb2cpOworICAgIGNoYXIgKm1JbmZvTG9nOwogfTsKIAog
Y2xhc3MgUHJvZ3JhbQpAQCAtNzQsNDUgKzY2LDEyIEBAIGNsYXNzIFByb2dyYW0KICAgICBib29s
IGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CiAgICAgaW50IGdldEF0dGFjaGVkU2hhZGVy
c0NvdW50KCkgY29uc3Q7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hh
ZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7Ci0K
ICAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIg
Km5hbWUpOwotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1l
KTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAg
R0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVz
ZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3Jt
TG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0z
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50
IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExv
Y2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0g
ICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBn
ZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGlu
ZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAg
dm9pZCBhcHBseVVuaWZvcm1zKCk7CiAKICAgICB2b2lkIGxpbmsoKTsKLSAgICBib29sIGlzTGlu
a2VkKCk7CisgICAgdm9pZCBzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGlu
dCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKICAgICB2b2lkIGdldEF0
dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpz
aGFkZXJzKTsKQEAgLTEzMiw5MCArOTEsMjQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgaXNG
bGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICBi
b29sIHZhbGlkYXRlU2FtcGxlcnMoYm9vbCBsb2dFcnJvcnMpOwogICAgIGJvb2wgaXNWYWxpZGF0
ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAotICAg
IHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmlu
ZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92
ZSBsZWFkaW5nIHVuZGVyc2NvcmUKLQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihQcm9ncmFtKTsKIAotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShjb25z
dCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipj
b25zdGFudFRhYmxlKTsKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAK
LSAgICBpbnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSk7Ci0gICAg
Ym9vbCBsaW5rVmFyeWluZ3MoKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoKTsKLSAgICBp
bnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0KLSAgICBi
b29sIGxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotICAg
IGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5h
bWUgPSAiIik7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgVW5p
Zm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wgYXBwbHlVbmlmb3Jt
bmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wg
YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVu
aWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5p
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9S
NCAqdmVjdG9yKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0KLSAg
ICB2b2lkIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
VW5pZm9ybTo6UmVnaXN0ZXJJbmZvICpycywgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRh
YmxlKTsKLQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1l
c3NhZ2UpOwotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7
Ci0gICAgdm9pZCByZXNldEluZm9Mb2coKTsKLQogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKIAotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgRnJhZ21l
bnRTaGFkZXIgKm1GcmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFk
ZXI7CiAKLSAgICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOwotICAgIHN0ZDo6c3RyaW5nIG1WZXJ0
ZXhITFNMOworICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKIAotICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJRDNEWENvbnN0YW50VGFibGUg
Km1Db25zdGFudFRhYmxlUFM7Ci0gICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJs
ZVZTOwotCi0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9W
RVJURVhfQVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
LQotICAgIHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAgICAg
ICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZTsKLSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0gICAg
R0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKLSAg
ICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OwotICAg
IFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxv
Y2F0aW9uOwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4Q29vcmRM
b2NhdGlvbjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci0gICAgR0xpbnQg
bUR4RnJvbnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247
Ci0KLSAgICBib29sIG1MaW5rZWQ7CisgICAgUHJvZ3JhbUJpbmFyeSogbVByb2dyYW1CaW5hcnk7
CiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUg
cHJvZ3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLSAgICBjaGFyICpt
SW5mb0xvZzsKLSAgICBib29sIG1WYWxpZGF0ZWQ7CiAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNv
dW50OwogCkBAIC0yMjUsNiArMTE4LDggQEAgY2xhc3MgUHJvZ3JhbQogCiAgICAgUmVzb3VyY2VN
YW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOworCisg
ICAgSW5mb0xvZyBtSW5mb0xvZzsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ4MCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJ
bXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmICFkZWZpbmVkKEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCitu
YW1lc3BhY2UgZ2wKK3sKK3N0ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZl
clsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7Cisg
ICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQorICAgIDogdHlw
ZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlm
b3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5p
Zm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbYnl0ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkg
PSB0cnVlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsK
K30KKworYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKK3sKKyAgICByZXR1cm4gX25hbWUuY29tcGFy
ZSgwLCAzLCAiYXJfIikgPT0gMDsKK30KKworVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWdu
ZWQgaW50IGluZGV4KSAKKyAgICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dy
YW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQoreworICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsK
KworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0g
TlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZT
ID0gTlVMTDsKKworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgeworICAgICAg
ICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgewor
ICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgfQorCisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEY7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZl
ID0gZmFsc2U7CisgICAgfQorCisgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOworICAg
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworCisgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9u
ID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAgIG1EeENvb3JkTG9jYXRpb24g
PSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAtMTsKKyAgICBtRHhGcm9udEND
V0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7Cit9CisK
K1Byb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKK3sKKyAgICBpZiAobVBpeGVsRXhlY3V0
YWJsZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhl
Y3V0YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+
UmVsZWFzZSgpOworICAgIH0KKworICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCisgICAg
eworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKKyAgICAgICAgbVVuaWZvcm1zLnBv
cF9iYWNrKCk7CisgICAgfQorfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW1CaW5h
cnk6OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30K
KworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4U2hhZGVy
KCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK0dMdWludCBQcm9ncmFt
QmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlm
IChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1MaW5r
ZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0
ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
IAorICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Cit9CisKKy8vIFJl
dHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVzZWQuCitHTGlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAg
ICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7CisgICAgICBjYXNlIFNBTVBMRVJf
VkVSVEVYOgorICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIGltYWdlIHVuaXQgKDAt
MTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4ICgwLTE1
IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVu
c2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0
ID0gLTE7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJ
WEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9z
aXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5p
dCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAg
QVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1wbGVy
c1ZTWzBdKSk7CisKKyAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KQorICAgICAgICB7CisgICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGxv
Z2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IChHTGludClnZXRD
b250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBhIGdpdmVuIERpcmVjdDNE
IDkgc2FtcGxlciB0eXBlIGFuZAorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIg
YW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgorVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFy
eTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXgpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgU0FN
UExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxl
cnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlOworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAg
ICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykvc2l6ZW9mKG1TYW1w
bGVyc1ZTWzBdKSk7CisgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSk7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
VEVYVFVSRV8yRDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0aW9u
KHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7CisK
KyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRo
ZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Cisg
ICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAh
PSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKKyAgICB7
CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkp
OworICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50
IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7
CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKKyAg
ICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0
YXJnZXRbMV0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0g
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZF
QzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwor
ICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Cisg
ICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0gMjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikK
KyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9W
RUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsK
KyAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07CisgICAgICAgICAgICB0YXJnZXRbM10gPSAw
OworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAgICB2ICs9IDM7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAg
ICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lk
dGgsIGludCBzcmNIZWlnaHQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRX
aWR0aCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVp
Z2h0LCBzcmNIZWlnaHQpOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgr
KykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBjbGVhciB1
bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5
KyspCisgICAgeworICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0
aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsg
eF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRv
bS4KKyAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCisg
ICAgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9h
dCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDg7CisgICAgICAg
IHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMTI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7CisgICAg
ICAgIHRhcmdldCArPSAxMjsKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAgIHRhcmdl
dCArPSAxNjsKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8
fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKKyAgICAg
ICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGlu
dCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAg
diwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMywKKyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAg
ICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVk
IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAg
IGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNo
ICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
KyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1J
bnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAg
ICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAw
LjBmIDogMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCks
CisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFy
YW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRl
ZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAgICAg
ICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihw
YXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHsKKyAgICAgICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFs
Q291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBl
KTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlm
b3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFs
Q291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJu
YWxDb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICog
c2l6ZW9mKEdMaW50KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZv
cm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3Jtczsg
aW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsK
KyAgICB9Cit9CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJv
Z3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybXMoKQoreworICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVy
YXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0g
dWU7ICsrdWIpIHsKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKworICAg
ICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZs
b2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGlu
dCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVh
biAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCAxLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCA0LCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlm
b3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEOgorICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZF
QzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNp
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJy
YXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQ29t
cGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFi
bGUgYmluYXJpZXMKK0lEM0QxMEJsb2IgKlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeShJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJ
RDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERXT1JEIHJlc3VsdDsKKyAg
ICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlmIChw
ZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOwor
I2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElP
Tl9MRVZFTDsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUla
QVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVt
cFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikg
KyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7
CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIo
KSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
bGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKKyAgICAgICAgc291cmNl
VGV4dCA9IGhsc2w7CisgICAgfQorCisgICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsKKyAg
ICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIHJlc3VsdCA9IEQzRENvbXBp
bGUoaGxzbCwgc3RybGVuKGhsc2wpLCBnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLCAibWFpbiIsIHBy
b2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKKworICAgIGlmIChlcnJv
ck1lc3NhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNo
YXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgIGluZm9Mb2cu
YXBwZW5kU2FuaXRpemVkKG1lc3NhZ2UpOworICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwor
ICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgIGVycm9yTWVzc2FnZS0+
UmVsZWFzZSgpOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOworICAgIH0KKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0gRDNEWEdldFNoYWRlckNvbnN0YW50
VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSksIGNvbnN0YW50VGFibGUpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBiaW5hcnktPlJlbGVhc2UoKTsKKworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gYmluYXJ5OworfQorCisvLyBQYWNr
cyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdv
cml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBl
bmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQg
dmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCitpbnQgUHJvZ3JhbUJpbmFy
eTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdb
XVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKQoreworICAgIENvbnRleHQgKmNv
bnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0g
Y29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBmb3IgKFZhcnlpbmdM
aXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigp
OyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
KyAgICB7CisgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAq
IHZhcnlpbmctPnNpemU7CisgICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5
aW5nLT50eXBlKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgaWYg
KG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5Kysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4
XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0g
PT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFy
eWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+Y29sID0gMjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OworCisgICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6
IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQg
Y29sdW1uID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IG4gJiYgc3BhY2Vb
eF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uID0geDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0p
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gY29sdW1uOworCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQo
IkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAg
ICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJd
IHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBp
eGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKHBpeGVsSExT
TC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25t
ZW50cworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQorICAgIHsKKyAgICAgICAgZnJhZ1Zhci0+cmVnID0gLTE7
CisgICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xp
c3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0
eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCisgICAgewor
ICAgICAgICB2dHhWYXItPnJlZyA9IC0xOworICAgICAgICB2dHhWYXItPmNvbCA9IC0xOworICAg
IH0KKworICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKKyAgICBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxM
fTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKGluZm9Mb2csIHBhY2tpbmcsIGZy
YWdtZW50U2hhZGVyKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1
dCBkZWNsYXJhdGlvbnMKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAg
IGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBj
b25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1Zl
Y3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsK
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAg
ICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQg
IT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0
cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBu
b3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0
cigpKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOworICAgICAg
ICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKKworICAgICAgICAgICAgICAgIG1h
dGNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAgICAgICB7CisgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVy
dGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFu
dGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKKworICAgIHZlcnRleEhMU0wgKz0g
InN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50
IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9
IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4
NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAg
ICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsK
KyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24g
OiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisr
KQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDog
KHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBz
dHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIH0K
KworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2Vt
YW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgdmVy
dGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkg
KyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
ID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
dHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZlcnRleEhMU0wgKz0gIihpbnB1dC4i
ICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisK
KyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBW
U19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRp
b24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0g
LShnbF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udyk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3Np
dGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKHZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEu
MCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Q
b3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsK
KyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihy
KTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAg
Ly8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhI
TFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsK
KworICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5
aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93
cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIg
KyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2
YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAgICBpZiAoc20z
KSB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7
XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1Bv
aW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQy
IGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAi
fTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1Y3Qg
UFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9
O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAg
ICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4i
OworICAgICAgICAKKyAgICAgICAgaWYgKHNtMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5k
eF9WUG9zLnkgKyAwLjU7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhl
aWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldCgpCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChp
bnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsgZHhfQ29vcmQuejtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsgZHhfQ29vcmQudztcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56
ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4i
OworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNt
MykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueCA9IGlu
cHV0LmdsX1BvaW50Q29vcmQueDtcbiI7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1Bv
aW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7CisgICAgfQorCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChk
eF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkp
O1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5
aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93
cyArIGopOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWlu
Zy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
WyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0
LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcGl4ZWxITFNM
ICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0cHV0O1xu
IiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Db2xv
clswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9M
b2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRl
cikKK3sKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21w
aWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
dmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBm
cmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOworICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2
ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKGluZm9Mb2cs
IHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4
dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29u
c3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
ICJwc18zXzAiIDogInBzXzJfMCI7CisKKyAgICBJRDNEMTBCbG9iICp2ZXJ0ZXhCaW5hcnkgPSBj
b21waWxlVG9CaW5hcnkoaW5mb0xvZywgdmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxl
LCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21w
aWxlVG9CaW5hcnkoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkK
KyAgICB7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVy
dGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCks
ICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBp
eGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVy
dGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7Cisg
ICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsK
KworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcyhpbmZvTG9nLCBhdHRyaWJ1
dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIG1Db25z
dGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5mb0xv
ZywgR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVWUykpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVj
YXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBh
bmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCisgICAgICAgICAgICBtRHhE
ZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0RlcHRoUmFuZ2UiKTsK
KyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Rl
cHRoIik7CisgICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9u
KCJkeF9Db29yZCIpOworICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7CisgICAgICAgICAgICBtRHhGcm9u
dENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIpOworICAgICAg
ICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Q
b2ludHNPckxpbmVzIik7CisKKyAgICAgICAgICAgIGNvbnRleHQtPm1hcmtEeFVuaWZvcm1zRGly
dHkoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBH
TCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpm
cmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgdW5zaWdu
ZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQg
aGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRv
ciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0
ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7
CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJp
bmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAg
Ly8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOworCisgICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKworICAg
ICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0
ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1l
LmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChs
b2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJp
YnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2Nh
dGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9j
YXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJT
KTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUlu
ZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIs
IGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgICAvLyBGYWlsIHRvIGxpbmsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtl
ZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgKQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hh
ZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5h
bWUpOworICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworCisgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VtYW50aWNJ
bmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMoSW5m
b0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFu
dFRhYmxlKQoreworICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2Ny
aXB0aW9uOworCisgICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRUYWJsZURlc2Ny
aXB0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25z
dGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsgY29uc3RhbnRJ
bmRleCsrKQorICAgIHsKKyAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRsZSA9IGNvbnN0
YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOworCisgICAgICAgIEQzRFhD
T05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247CisgICAgICAgIFVJTlQgZGVzY3JpcHRp
b25Db3VudCA9IDE7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0
Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2Ny
aXB0aW9uQ291bnQpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGNvbnN0YW50SGFuZGxlLCBj
b25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEFkZHMgdGhl
IGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8g
dGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZv
cm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9y
bShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25z
dGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24s
IHN0ZDo6c3RyaW5nIG5hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJs
ZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwor
ICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0
Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKKworICAgICAg
ICAgICAgaWYgKHBzQ29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRl
eChwc0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NV
QkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2Vk
UGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlBp
eGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRT
YW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBs
ZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVy
c1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBl
ID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJl
VW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0g
c3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVmVydGV4IHNoYWRlciBzYW1wbGVy
IGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5D
bGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25z
dGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAg
ICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAg
ICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZp
ZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgZmllbGRI
YW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUg
KyBzdHJ1Y3RJbmRleCArICIuIikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZF
Q1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RY
UENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShzaGFkZXIsIGNvbnN0YW50
RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUpCit7CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0o
Y29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBk
ZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+
bmFtZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0
aW9uID49IDApCisgICAgeworICAgICAgICBkZWxldGUgdW5pZm9ybTsKKyAgICAgICAgdW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgfQorCisg
ICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHVuaWZvcm0tPnBzLnNldChjb25z
dGFudERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpICAg
dW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOworCisgICAgaWYgKGxvY2F0aW9u
ID49IDApCisgICAgeworICAgICAgICByZXR1cm4gdW5pZm9ybS0+dHlwZSA9PSB0eXBlOworICAg
IH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKKyAgICB7CisgICAgICAg
IG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihfbmFtZSwgaSwgdW5pZm9y
bUluZGV4KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dy
YW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBpZiAoY29uc3Rh
bnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RY
UFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
Q29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAg
ICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlw
dGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBU
X0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IHJldHVybiAwOworfQorCisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNM
OjpkZWNvcmF0ZQorc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUo
Y29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAi
Z2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgeworICAg
ICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9
CisKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBuYW1lID0gX25hbWU7CisgICAg
CisgICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUgZmllbGQgZGVjb3JhdGlvbgorICAgIHNpemVf
dCBwb3MgPSAwOworICAgIHdoaWxlICgocG9zID0gbmFtZS5maW5kKCIuXyIsIHBvcykpICE9IHN0
ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgbmFtZS5yZXBsYWNlKHBvcywgMiwgIi4i
KTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgZGVjb3JhdGlvbgorICAgIGlm
IChuYW1lWzBdID09ICdfJykKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigxKTsK
KyAgICB9CisgICAgZWxzZSBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDMpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gbmFtZTsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uYnYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xl
YW4gKnYpCit7CisgICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRd
OworICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNUQU5UU107CisKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlf
TUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGogPCB3aWR0aCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gKHZbaSAq
IHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
Ym9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAg
eworICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAw
ID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCB2c0Nv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT52
cy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAgICAgaW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNv
dW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291bnQpKTsKKyAgICAgICAgQVNTRVJU
KGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2xW
ZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRl
eCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAg
ICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnBz
LmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7
CisgICAgfQorICAgIAorICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmJv
b2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMu
ZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0K
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZs
b2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0x
aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAg
RDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBE
M0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4OworCisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXgg
KyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRl
eCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQqKXZlY3RvciwgdGFyZ2V0
VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
dW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXg7
CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJ
bmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9y
bS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9h
dCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisg
ICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9y
bSwgY291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UU107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0s
IChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgYXBwbHlV
bmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZl
Y3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZs
b2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisgICAg
ICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwg
Y291bnQsIHZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtQmlu
YXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5w
cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3Rv
ciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQodGFy
Z2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZpY2UtPlNldFZl
cnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0
IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICBy
ZXR1cm4gbVZhbGlkYXRlZDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRy
aWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xp
bnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3Zl
ciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9
IDA7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKKyAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7
IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCisgICAgeworICAg
ICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0
aXZlQXR0cmlidXRlID09IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgIH0KKworICAgIGlmIChi
dWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7CisKKyAgICAgICAgc3RybmNweShuYW1l
LCBzdHJpbmcsIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisK
KyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0
cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gMTsgICAvLyBBbHdh
eXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCisKKyAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlXS50eXBlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVB
dHRyaWJ1dGVDb3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZvciAoaW50IGF0
dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0
cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQr
KzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4
TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAg
ICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAq
bmFtZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKKyAgICB1bnNpZ25l
ZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm07CisgICAg
Zm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykK
KyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuY29tcGFyZSgwLCAz
LCAiZHhfIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVVbmlmb3JtKys7Cisg
ICAgfQorCisgICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRl
eCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQorCisgICAgaWYg
KGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVuaWZv
cm1zW3VuaWZvcm1dLT5uYW1lOworCisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAg
ICB9CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7Cisg
ICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9
CisgICAgfQorCisgICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKKwor
ICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOworfQorCitHTGludCBQcm9ncmFt
QmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisK
KyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZv
cm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKK3sK
KyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9
IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlm
b3JtSW5kZXhdLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVu
Z3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBhcHBseVVuaWZvcm1zKCk7CisgICAg
aWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCZpbmZvTG9nKSkKKyAgICB7CisgICAgICAgIG1WYWxpZGF0
ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9
IHRydWU7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2FtcGxlcnMo
SW5mb0xvZyAqaW5mb0xvZykKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBp
biBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1l
CisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9n
cmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJh
eXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJv
ci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwor
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEZdOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKKyAgICB7CisgICAgICAgIHRleHR1
cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7Cisg
ICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVVbml0Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJT
YW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktO
T1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS50
ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25m
bGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4i
LCB1bml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3Vu
aXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0uYWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVy
c1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVu
aXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBl
W3VuaXRdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm9M
b2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9M
b2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNh
bWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVU
eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOworfQorCitHTGludCBQcm9n
cmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhE
ZXB0aExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeENvb3JkTG9jYXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9uOworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RnJvbnRD
Q1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVz
TG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMg
dGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8g
YW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4x
MC4zIHBhZ2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXworCisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNp
bmNsdWRlIDxkM2Rjb21waWxlci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2Ns
YXNzIFZlcnRleFNoYWRlcjsKKworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5n
bGUgc2hhZGVyIHVuaWZvcm0KK3N0cnVjdCBVbmlmb3JtCit7CisgICAgVW5pZm9ybShHTGVudW0g
dHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsK
KworICAgIH5Vbmlmb3JtKCk7CisKKyAgICBib29sIGlzQXJyYXkoKTsKKworICAgIGNvbnN0IEdM
ZW51bSB0eXBlOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBu
YW1lCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpk
YXRhOworICAgIGJvb2wgZGlydHk7CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCisgICAgewor
ICAgICAgICBSZWdpc3RlckluZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdDRJbmRl
eCA9IC0xOworICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7CisgICAgICAgICAgICBib29s
SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyU2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19C
T09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9hdDRJbmRleCA9
IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmVn
aXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyQ291bnQpOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmbG9h
dDRJbmRleDsKKyAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKKyAgICAgICAgaW50IGJvb2xJbmRl
eDsKKworICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKKyAgICB9OworCisgICAgUmVnaXN0ZXJJ
bmZvIHBzOworICAgIFJlZ2lzdGVySW5mbyB2czsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBj
b3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVz
CitzdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50Owor
ICAgIHVuc2lnbmVkIGludCBpbmRleDsKK307CisKKy8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBs
aW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUgcGFzc2VkIHRv
IFByb2dyYW1CaW5hcnkuCitjbGFzcyBQcm9ncmFtQmluYXJ5Cit7CisgIHB1YmxpYzoKKyAgICBQ
cm9ncmFtQmluYXJ5KCk7CisgICAgflByb2dyYW1CaW5hcnkoKTsKKworICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihj
b25zdCBjaGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRl
SW5kZXgpOworCisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwg
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRl
eHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwor
ICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7CisKKyAgICBH
TGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KTsKKyAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAg
ICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0y
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBi
b29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0
VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1z
KTsKKworICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xp
bnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0
aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25z
dDsKKyAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBn
ZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OworCisgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisKKyAgICBib29sIGxpbmsoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdz
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNp
emVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmli
dXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50
ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZl
QXR0cmlidXRlQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdl
dEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAm
aW5mb0xvZyk7CisgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwor
ICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5
KTsKKworICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUg
Kipjb25zdGFudFRhYmxlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3Ry
aW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wg
bGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cg
JmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFk
ZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBi
b29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0Mg
JmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlm
b3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1u
ZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBh
cHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5p
Zm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0
ICp2ZWN0b3IpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKKworICAg
IElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
Km1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4
ZWN1dGFibGU7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgor
ICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0
YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7CisKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJp
YnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVS
VEVYX0FUVFJJQlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wg
YWN0aXZlOworICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFRleHR1
cmVUeXBlIHRleHR1cmVUeXBlOworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOworICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZTsKKyAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKworICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkg
bVVuaWZvcm1zOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlm
b3JtSW5kZXg7CisgICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBt
RHhEZXB0aFJhbmdlTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBH
TGludCBtRHhDb29yZExvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09y
TGluZXNMb2NhdGlvbjsKKworICAgIGJvb2wgbVZhbGlkYXRlZDsKK307Cit9CisKKyNlbmRpZiAg
IC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNp
b24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2OCArNjMsMTQ0IEBAIEdMdWludCBS
ZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWwKICAgICByZXR1cm4gZHgyZXM6OkdldFN0
ZW5jaWxTaXplKGdldEQzREZvcm1hdCgpKTsKIH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6UmVu
ZGVyYnVmZmVyVGV4dHVyZShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJn
ZXQodGFyZ2V0KQorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTJEIEltcGxlbWVudGF0aW9uIC8v
Ly8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRl
eHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAg
ICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCkKK3sKKyAgICBtVGV4dHVyZTJELnNldChOVUxMKTsKK30K
KworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7
CisgICAgbVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7
CisgICAgbVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworLy8gSW5jcmVtZW50
cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1
cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpn
ZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJn
ZXQobVRhcmdldCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJnZXQpOworfQorCitHTHNpemVp
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRXaWR0aCgwKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgbVRleHR1cmUuc2V0KHRleHR1cmUpOworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQoMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlclRleHR1
cmU6On5SZW5kZXJidWZmZXJUZXh0dXJlKCkKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQoTlVMTCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KDApOworfQorCitEM0RGT1JN
QVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAoreworICAgIHJl
dHVybiBtVGV4dHVyZTJELT5nZXREM0RGb3JtYXQoMCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwor
fQorCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8v
Ly8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0
YXJnZXQpCit7CisgICAgbVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpCit7Cisg
ICAgbVRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKIH0KIAogLy8gVGV4dHVyZXMgbmVlZCB0byBt
YWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQogLy8g
UmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0
dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlOjphZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBtVGV4
dHVyZS0+YWRkUHJveHlSZWYocHJveHkpOworICAgIG1UZXh0dXJlQ3ViZU1hcC0+YWRkUHJveHlS
ZWYocHJveHkpOwogfQogCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6OnJlbGVhc2VQcm94eShj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgbVRleHR1
cmUtPnJlbGVhc2VQcm94eShwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFwLT5yZWxlYXNlUHJv
eHkocHJveHkpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6
Z2V0UmVuZGVyVGFyZ2V0KCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKIH0KIAotSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldERlcHRoU3RlbmNpbCgpCisvLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVMTDsKIH0KIAot
R0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRXaWR0aCgpIGNvbnN0CitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlLT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRX
aWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAotR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAorCitHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4
dHVyZS0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdo
dChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQotIAotR0xlbnVtIFJlbmRl
cmJ1ZmZlclRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKKworR0xlbnVtIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgIHJldHVybiBtVGV4dHVy
ZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCk7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXREM0RGb3JtYXQo
KSBjb25zdAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3Jt
YXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0RDNERm9ybWF0KCk7CisgICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RDNERm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7CiB9CiAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2Ft
cGxlcygpIGNvbnN0CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1w
bGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRlcmJ1
ZmZlclRleHR1cmU6OmdldFNlcmlhbCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwogfQogCisvLy8vLy8gUmVuZGVy
YnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCiBSZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZl
cihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDogUmVmQ291bnRP
YmplY3QoaWQpCiB7CiAgICAgQVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwpAQCAtMTUyLDExICsy
MjgsMTUgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnJlbGVhc2UoKSBjb25zdAogICAgIFJlZkNvdW50
T2JqZWN0OjpyZWxlYXNlKCk7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwo
KQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMjQzLDEx
ICszMjMsMTUgQEAgUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZwogewog
fQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBOVUxMOwogfQog
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBOVUxMOwpAQCAtMzU2
LDYgKzQ0MCw4IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogICAgIH0KIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqQ29sb3JidWZmZXI6Omdl
dFJlbmRlclRhcmdldCgpCiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC00MjgsOCArNTE0
LDE1IEBAIERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigKICAgICB9CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoU3Rl
bmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkK
KyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIHJl
dHVybiBtRGVwdGhTdGVuY2lsOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDEyMjIzOSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFz
cyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFz
cyBSZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1
ZmZlcjsKQEAgLTU4LDEyICs1OSwxMiBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKIH07CiAK
LWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNl
CitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJm
YWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1
cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQg
KnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4
dHVyZSgpOworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCiAgICAgdm9p
ZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKICAgICB2b2lkIHJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKQEAgLTgwLDkgKzgxLDM3IEBAIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUgOiBwdWJsaWMgUmVuZGUKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlKTsKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKIAotICAgIEJpbmRpbmdQb2ludGVyIDxU
ZXh0dXJlPiBtVGV4dHVyZTsKKyAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVy
ZTJEOworICAgIEdMZW51bSBtVGFyZ2V0OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAg
ICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgp
OworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAg
ICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygp
IGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXApOworCisgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmVDdWJlTWFwPiBtVGV4
dHVyZUN1YmVNYXA7CiAgICAgR0xlbnVtIG1UYXJnZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lvbiAx
MjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYg
KG1JbmZvTG9nKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGluZGV4ID0g
c3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgIG1l
bWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKG1JbmZv
TG9nKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAx
LCAoaW50KXN0cmxlbihtSW5mb0xvZykpOworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1J
bmZvTG9nLCBpbmRleCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAgIHsKICAg
ICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwogICAgIH0KIApAQCAtMTQ3LDE0ICsxNDcsMTQg
QEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLAogewogICAgIGludCBp
bmRleCA9IDA7CiAKLSAgICBpZiAoc291cmNlKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7
Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJj
ZSkpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKLSAgICB9CisgICAg
ICAgIGlmIChzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4o
YnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOworICAgICAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgc291cmNlLCBpbmRleCk7CisgICAgICAgIH0KIAotICAgIGlmIChidWZTaXplKQotICAg
IHsKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJldmlzaW9uIDEy
MjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWlu
Zz4gVmFyeWluZ0xpc3Q7CiAKIGNsYXNzIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9ncmFtOwor
ICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIo
UmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKQEAgLTEyOCw3ICsxMjgs
NyBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlCiAKIGNsYXNzIFZl
cnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBmcmllbmQgUHJvZ3JhbTsKKyAgICBm
cmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAogICBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVy
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlz
aW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEyIEBAIHVuc2lnbmVkIGludCBU
ZXh0dXJlU3RvcmFnZTo6bUN1cnJlbnRUZXgKIAogc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4
dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7Ci0gICAgaWYgKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8Ci0gICAgICAgIGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKKyAgICBpZiAoSXNEZXB0aFRl
eHR1cmUoZm9ybWF0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RGTVRfSU5UWjsKKyAgICB9
CisgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQg
fHwKKyAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQpCiAgICAgewogICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7CiAgICAgfQpAQCAtNzUsNiAr
NzksMTAgQEAgc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cAogCiBzdGF0
aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCiB7Cisg
ICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KICAgICBzd2l0Y2goZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0w4
OgpAQCAtOTUsNiArMTAzLDIxIEBAIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoRDMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgRFdPUkQgR2V0VGV4
dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSkKK3sKKyAgICBEV09SRCBkM2R1c2FnZSA9IDA7CisKKyAgICBpZiAoZDNkZm10ID09
IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfREVQVEhT
VEVOQ0lMOworICAgIH0KKyAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNUZXh0dXJl
Rm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQU5HTEUpKSkKKyAgICB7CisgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX1JF
TkRFUlRBUkdFVDsKKyAgICB9CisgICAgcmV0dXJuIGQzZHVzYWdlOworfQorCiBJbWFnZTo6SW1h
Z2UoKQogewogICAgIG1XaWR0aCA9IDA7IApAQCAtMTU1LDYgKzE3OCw4IEBAIHZvaWQgSW1hZ2U6
OmNyZWF0ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVM
TDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAgICAgY29uc3Qg
RDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1FTTsKKyAgICBjb25zdCBEM0RGT1JN
QVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7CisgICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBE
M0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVy
ZXMKIAogICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCiAgICAgewpAQCAtMTc4
LDcgKzIwMyw3IEBAIHZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQogICAgICAgICAgICAgbGV2
ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKICAgICAgICAgfQogCi0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0
SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBnZXREM0RGb3JtYXQoKSwKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgs
IHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2Us
ICZuZXdUZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0y
NjQsOSArMjg5LDEzIEBAIHZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmEK
IHsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsK
IAotICAgIGlmIChzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJmYWNlKQorICAgIGlmIChzb3VyY2VT
dXJmYWNlICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCiAgICAgewotICAgICAgICBS
RUNUIHJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgbUhlaWdodCk7CisgICAgICAgIFJFQ1QgcmVjdDsKKyAgICAgICAgcmVjdC5sZWZ0ID0g
eG9mZnNldDsKKyAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OworICAgICAgICByZWN0LnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWln
aHQ7CiAKICAgICAgICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKICAgICAgICAg
ewpAQCAtMjg0LDEyICszMTMsMjQgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0
M0RTdXJmYQogfQogCiAvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkg
eG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0
L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0
cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCisvLyBpbnRv
IHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgogdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
CisgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KmlucHV0KQogewotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IC1Db21wdXRlUGl0Y2god2lkdGgs
IG1Gb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0gICAgaW5wdXQgPSAoKGNoYXIqKWlu
cHV0KSAtIGlucHV0UGl0Y2ggKiAoaGVpZ2h0IC0gMSk7CisgICAgUkVDVCBsb2NrUmVjdCA9Cisg
ICAgeworICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICB4b2Zmc2V0ICsgd2lkdGgs
IHlvZmZzZXQgKyBoZWlnaHQKKyAgICB9OworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHTHNp
emVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIG1Gb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCk7CiAKICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtMjk3LDI5ICszMzgs
MzYgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICBz
d2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAg
ICAgICAgICAgbG9hZEFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBpZiAo
c3VwcG9ydHNTU0UyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9hZEFscGhh
RGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAg
ICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RG
b3JtYXQoKSA9PSBEM0RGTVRfTDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0LCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CisgICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1U
X0E4TDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxv
YWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKICAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwor
ICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRS
R0JBVUJ5dGVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVC
eXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMyOCw3
ICszNzYsNyBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGluCiAgICAg
ICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfUkdCOgot
ICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAg
bG9hZFJHQjU2NURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszODUsNyBAQCB2b2lkIElt
YWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGluCiAgICAgICAgIHN3aXRjaCAobUZvcm1h
dCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRS
R0JBNDQ0NERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgfQpAQCAtMzQ2LDcgKzM5NCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7
CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUxRGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CkBAIC0zNTYsMTkgKzQwNCwxOSBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGluCiAgICAgICAgIHsKICAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29u
dmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBE
M0QKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRmxvYXRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsK
KyAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBRmxvYXREYXRhKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQ
aXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBRmxvYXREYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CkBAIC0zNzgsMjggKzQyNiwzMCBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGluCiAgICAgICAgIHsKICAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29u
dmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBE
M0QKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZs
b2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0
KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCSGFs
ZkZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQorCisgICAgdW5sb2NrKCk7
CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQWxw
aGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7CkBAIC00MDgsNyArNDU4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0
YShHTGludCB4b2Zmc2V0LAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKQEAgLTQx
OSw3ICs0NjksNDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0LAog
ICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50ICpkZXN0ID0g
TlVMTDsKKyAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKKworICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKKworICAg
ICAgICBpbnQgeDsKKyAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKKyAgICAg
ICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAw
eEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0
W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OworICAgICAg
ICB9CisKKyAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKKyAgICAgICAgewor
ICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKKyAgICAgICAgICAgIC8vIElu
dGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHplcm8K
KyAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291
cmNlRGF0YSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJiaXQs
IG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KKyAgICAgICAgICAgIF9fbTEyOGkgbG8gPSBf
bW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAgICAgICAgICAgX19t
MTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisKKyAg
ICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVz
dFt4XSksIGxvKTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0
PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBI
YW5kbGUgdGhlIHJlbWFpbmRlcgorICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNv
dXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2U6OmxvYWRB
bHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDI4LDcgKzUxOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUZsb2F0RGF0YShHTGludCB4b2YKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsg
eG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKQEAgLTQzOSw3ICs1MjksNyBAQCB2b2lkIEltYWdl
Ojpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mCiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTQ0OCw3ICs1MzgsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
QWxwaGFIYWxmRmxvYXREYXRhKEdMaW50CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpA
QCAtNDU5LDE3ICs1NDksMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShH
TGludAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBj
b25zdAogewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQZXJQaXhlbCA9IG5hdGl2ZT8gMTogNDsK
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOwogCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
ICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9m
ZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAKICAgICAgICAgaWYgKCFu
YXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTQ4OCw3
ICs1NzcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2ZmCiAgICAg
fQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsK
ICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTQ5Nyw3ICs1ODYsNyBAQCB2b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50CiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAgLTUw
OCw3ICs1OTcsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMaW50CiAg
ICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3Zv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsK
QEAgLTUxNyw3ICs2MDYsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YShHCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CkBAIC01MjgsMTcgKzYx
NywxNiBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHCiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
IGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZlPyAyOiA0
OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgCiAgICAg
ICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICB7
CkBAIC01NTcsNyArNjQ1LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShH
TGludAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7
CkBAIC01NjYsNyArNjU0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXRE
YXRhKAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwor
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbMip4KzBdOwpAQCAtNTc3LDcgKzY2NSw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSgKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNTg2LDcgKzY3
NCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdEQKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01OTcsNyArNjg1LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RAogICAgIH0KIH0KIAotdm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsKQEAgLTYwNiw3ICs2OTQsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRh
KEdMaW50IHhvZmZzCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAq
IDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMg
KyAyXTsKQEAgLTYxNyw3ICs3MDUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdM
aW50IHhvZmZzCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3Zv
aWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTYyNiw3ICs3MTQsNyBAQCB2b2lk
IEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0CiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBz
b3VyY2VbeF07CkBAIC02MzgsNyArNzI2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEo
R0xpbnQgeG9mZnNldAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC02NDcsNyArNzM1LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2ZmcwogICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zmxv
YXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAw
XTsKQEAgLTY1OCw3ICs3NDYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50
IHhvZmZzCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
K3ZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAgLTY2Nyw3
ICs3NTUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4CiAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQg
KiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NzgsNyArNzY2
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeAogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjg4LDcgKzc3Niw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCAKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5
ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBpbnQgeCA9IDA7CiAKICAg
ICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKQEAgLTcyMCw3ICs4MDgsNyBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgCiAgICAgfQogfQogCi12b2lk
IEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNv
dXJjZSA9IE5VTEw7CkBAIC03MjgsNyArODE2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0
ZURhdGEoR0xpbnQgeG9mZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7CiAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQog
ICAgICAgICB7CkBAIC03MzgsNyArODI2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGEoR0xpbnQgeG9mZgogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC03NDcsNyArODM1
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTGludCB4b2ZmcwogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzU5LDcgKzg0Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRS
R0JBNDQ0NERhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JB
NTU1MURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAt
NzY4LDcgKzg1Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnMK
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKQEAgLTc4MCw3ICs4NjgsNyBAQCB2b2lkIElt
YWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzCiAgICAgfQogfQogCi12b2lkIEltYWdl
Ojpsb2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
QEAgLTc4OSwxMiArODc3LDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50
IHhvZmYKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsK
KyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJH
QkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKQEAgLTgwMywxMiArODkxLDEyIEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFs
ZkZsb2F0RGF0YShHTGludCAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9m
ZnNldCAqIDg7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGggKiA4KTsKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQg
SW1hZ2U6OmxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MTcsMjgzICs5MDUsMzcgQEAgdm9pZCBJbWFn
ZTo6bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIG1lbWNweShkZXN0
LCBzb3VyY2UsIHdpZHRoKjQpOwogICAgIH0KIH0KIAogdm9pZCBJbWFnZTo6bG9hZENvbXByZXNz
ZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0IHsKLSAgICBzd2l0Y2ggKGdldEQzREZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBE
M0RGTVRfRFhUMToKLSAgICAgICAgICBsb2FkRFhUMURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgICAgIGxvYWRE
WFQzRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RDNERk1UX0RYVDU6Ci0gICAgICAgICAgbG9hZERYVDVEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAg
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUMUJsb2Nr
RnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0g
IC8vIEEgRFhUMSBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTFdIGNvbG9yMC4KLSAgLy8gWzIt
M10gY29sb3IxLgotICAvLyBbNC03XSBjb2xvciBiaXRtYXAsIDIgYml0cyBwZXIgcGl4ZWwuCi0g
IC8vIFNvIGVhY2ggb2YgdGhlIDQtNyBieXRlcyByZXByZXNlbnRzIG9uZSBsaW5lLCBmbGlwcGlu
ZyBhIGJsb2NrIGlzIGp1c3QKLSAgLy8gZmxpcHBpbmcgdGhvc2UgYnl0ZXMuCi0KLSAgLy8gRmly
c3QgMzItYml0cyBpcyB0d28gUkdCNTY1IGNvbG9ycyBzaGFyZWQgYnkgdGlsZSBhbmQgZG9lcyBu
b3QgbmVlZCB0byBiZSBtb2RpZmllZC4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLQotICAvLyBT
ZWNvbmQgMzItYml0cyBjb250YWlucyA0IHJvd3Mgb2YgNCAyLWJpdCBpbnRlcnBvbGFudHMgYmV0
d2VlbiB0aGUgY29sb3JzLiBBbGwgcm93cyBzaG91bGQgYmUgZmxpcHBlZC4KLSAgZGVzdFsxXSA9
IChzb3VyY2VbMV0gPj4gMjQpIHwKLSAgICAgICAgICAgICgoc291cmNlWzFdIDw8IDgpICYgMHgw
MEZGMDAwMCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDBGRjAwKSB8
Ci0gICAgICAgICAgICAoc291cmNlWzFdIDw8IDI0KTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0
IDIgbGluZXMgb2YgYSBEWFQxIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lk
IEZsaXBDb3B5RFhUMUJsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWdu
ZWQgaW50KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSBzb3Vy
Y2VbMF07Ci0gIGRlc3RbMV0gPSAoKHNvdXJjZVsxXSA8PCA4KSAmIDB4MDAwMEZGMDApIHwKLSAg
ICAgICAgICAgICgoc291cmNlWzFdID4+IDgpICYgMHgwMDAwMDBGRik7Ci19Ci0KLS8vIEZsaXBz
IGEgZnVsbCBEWFQzIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBD
b3B5RFhUM0Jsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50
KiBkZXN0KSB7Ci0gIC8vIEEgRFhUMyBibG9jayBsYXlvdXQgaXM6Ci0gIC8vIFswLTddICBhbHBo
YSBiaXRtYXAsIDQgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0K
LSAgLy8gRmlyc3QgYW5kIFNlY29uZCAzMiBiaXRzIGFyZSA0Yml0IHBlciBwaXhlbCBhbHBoYSBh
bmQgbmVlZCB0byBiZSBmbGlwcGVkLgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAo
c291cmNlWzFdIDw8IDE2KTsKLSAgZGVzdFsxXSA9IChzb3VyY2VbMF0gPj4gMTYpIHwgKHNvdXJj
ZVswXSA8PCAxNik7Ci0KLSAgLy8gQW5kIGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFi
b3ZlIGZ1bmN0aW9uLgotICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCAr
IDIpOwotfQotCi0vLyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDMgYmxvY2sgaW4g
dGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tIYWxmKGNvbnN0
IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxh
eW91dCBhYm92ZS4KLSAgZGVzdFswXSA9IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8
PCAxNik7Ci0gIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19
Ci0KLS8vIEZsaXBzIGEgZnVsbCBEWFQ1IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRp
YyB2b2lkIEZsaXBDb3B5RFhUNUJsb2NrRnVsbChjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwg
dW5zaWduZWQgaW50KiBkZXN0KSB7Ci0gIC8vIEEgRFhUNSBibG9jayBsYXlvdXQgaXM6Ci0gIC8v
IFswXSAgICBhbHBoYTAuCi0gIC8vIFsxXSAgICBhbHBoYTEuCi0gIC8vIFsyLTddICBhbHBoYSBi
aXRtYXAsIDMgYml0cyBwZXIgcGl4ZWwuCi0gIC8vIFs4LTE1XSBhIERYVDEgYmxvY2suCi0KLSAg
Ly8gVGhlIGFscGhhIGJpdG1hcCBkb2Vzbid0IGVhc2lseSBtYXAgbGluZXMgdG8gYnl0ZXMsIHNv
IHdlIGhhdmUgdG8KLSAgLy8gaW50ZXJwcmV0IGl0IGNvcnJlY3RseS4gIEV4dHJhY3RlZCBmcm9t
Ci0gIC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9yZWdpc3RyeS9zcGVjcy9FWFQvdGV4dHVyZV9j
b21wcmVzc2lvbl9zM3RjLnR4dCA6Ci0gIC8vCi0gIC8vICAgVGhlIDYgImJpdHMiIGJ5dGVzIG9m
IHRoZSBibG9jayBhcmUgZGVjb2RlZCBpbnRvIG9uZSA0OC1iaXQgaW50ZWdlcjoKLSAgLy8KLSAg
Ly8gICAgIGJpdHMgPSBiaXRzXzAgKyAyNTYgKiAoYml0c18xICsgMjU2ICogKGJpdHNfMiArIDI1
NiAqIChiaXRzXzMgKwotICAvLyAgICAgICAgICAgICAgICAgICAyNTYgKiAoYml0c180ICsgMjU2
ICogYml0c181KSkpKQotICAvLwotICAvLyAgIGJpdHMgaXMgYSA0OC1iaXQgdW5zaWduZWQgaW50
ZWdlciwgZnJvbSB3aGljaCBhIHRocmVlLWJpdCBjb250cm9sIGNvZGUKLSAgLy8gICBpcyBleHRy
YWN0ZWQgZm9yIGEgdGV4ZWwgYXQgbG9jYXRpb24gKHgseSkgaW4gdGhlIGJsb2NrIHVzaW5nOgot
ICAvLwotICAvLyAgICAgICBjb2RlKHgseSkgPSBiaXRzWzMqKDQqeSt4KSsxLi4zKig0KnkreCkr
MF0KLSAgLy8KLSAgLy8gICB3aGVyZSBiaXQgNDcgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYW5k
IGJpdCAwIGlzIHRoZSBsZWFzdAotICAvLyAgIHNpZ25pZmljYW50IGJpdC4KLSAgY29uc3QgdW5z
aWduZWQgY2hhciogc291cmNlQnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBk
ZXN0Qnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+
KGRlc3QpKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYg
KiAoc291cmNlQnl0ZXNbM10gKyAyNTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGlu
dCBsaW5lXzJfMyA9IHNvdXJjZUJ5dGVzWzVdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzZdICsgMjU2
ICogc291cmNlQnl0ZXNbN10pOwotICAvLyBzd2FwIGxpbmVzIDAgYW5kIDEgaW4gbGluZV8wXzEu
Ci0gIHVuc2lnbmVkIGludCBsaW5lXzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIp
IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAx
Mik7Ci0gIC8vIHN3YXAgbGluZXMgMiBhbmQgMyBpbiBsaW5lXzJfMy4KLSAgdW5zaWduZWQgaW50
IGxpbmVfM18yID0gKChsaW5lXzJfMyAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKGxpbmVfMl8zICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVz
WzBdID0gc291cmNlQnl0ZXNbMF07Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwot
ICBkZXN0Qnl0ZXNbMl0gPSBsaW5lXzNfMiAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5l
XzNfMiAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfM18yICYgMHhmZjAw
MDApID4+IDE2OwotICBkZXN0Qnl0ZXNbNV0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRl
c1s2XSA9IChsaW5lXzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzddID0gKGxpbmVf
MV8wICYgMHhmZjAwMDApID4+IDE2OwotCi0gIC8vIEFuZCBmbGlwIHRoZSBEWFQxIGJsb2NrIHVz
aW5nIHRoZSBhYm92ZSBmdW5jdGlvbi4KLSAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSAr
IDIsIGRlc3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGluZXMgb2YgYSBEWFQ1
IGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBDb3B5RFhUNUJsb2Nr
SGFsZihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50KiBkZXN0KSB7Ci0g
IC8vIFNlZSBsYXlvdXQgYWJvdmUuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZv
aWQqPihzb3VyY2UpKTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGlu
dCBsaW5lXzBfMSA9IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2
ICogc291cmNlQnl0ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVfMF8x
ICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8w
XzEgJiAweGZmZjAwMCkgPj4gMTIpOwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsK
LSAgZGVzdEJ5dGVzWzFdID0gc291cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVf
MV8wICYgMHhmZjsKLSAgZGVzdEJ5dGVzWzNdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4Owot
ICBkZXN0Qnl0ZXNbNF0gPSAobGluZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIEZsaXBDb3B5
RFhUMUJsb2NrSGFsZihzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWREWFQxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAoteworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KSB7
CiAgICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwogICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9
PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9
PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDggPT0gMCk7Ci0gICAgQVNTRVJUKG91dHB1
dFBpdGNoICUgOCA9PSAwKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQg
aW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwogCi0g
ICAgLy8gUm91bmQgd2lkdGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQg
YmxvY2tzQWNyb3NzID0gKHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxv
Y2tzQWNyb3NzICogMjsKKyAgICBSRUNUIGxvY2tSZWN0ID0geworICAgICAgICB4b2Zmc2V0LCB5
b2Zmc2V0LAorICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKKyAgICB9
OwogCi0gICAgc3dpdGNoIChoZWlnaHQpCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAg
IEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKICAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0W3hdID0g
c291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3ggKyAxXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgeCwg
ZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogOCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7
IHggKz0gMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEZsaXBDb3B5
RFhUMUJsb2NrRnVsbChzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWREWFQzRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsK
LSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHdpZHRoICUgNCA9PSAw
IHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJUKGlucHV0UGl0Y2ggJSAx
NiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAxNiA9PSAwKTsKLQotICAgIGNvbnN0
IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBp
bnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0gICAgLy8gUm91bmQgd2lkdGggdXAgaW4gY2FzZSBp
dCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQgYmxvY2tzQWNyb3NzID0gKHdpZHRoICsgMykgLyA0
OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxvY2tzQWNyb3NzICogNDsKLQotICAgIHN3aXRjaCAo
aGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3VyY2VbeCArIDFdOwotICAg
ICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gc291cmNlW3ggKyAyXTsKLSAgICAgICAgICAgICAg
ICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsgM107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxp
cENvcHlEWFQzQmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
KGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2KTsKIAotICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUM0Jsb2NrRnVsbChzb3VyY2UgKyB4LCBk
ZXN0ICsgeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7CisgICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lk
dGgsIGhlaWdodCwgbUZvcm1hdCk7CisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZUNv
bXByZXNzZWRQaXRjaCh3aWR0aCwgbUZvcm1hdCk7CisgICAgaW50IHJvd3MgPSBpbnB1dFNpemUg
LyBpbnB1dFBpdGNoOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQorICAgIHsK
KyAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQu
UGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRj
aCk7CiAgICAgfQotfQogCi12b2lkIEltYWdlOjpsb2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0
aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1
dFBpdGNoICUgMTYgPT0gMCk7Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUgMTYgPT0gMCk7Ci0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJvdW5kIHdpZHRoIHVw
IGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0
aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDQ7Ci0KLSAg
ICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAgICAgICAgICBkZXN0
W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFdID0gc291cmNlW3gg
KyAxXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEZsaXBDb3B5RFhUNUJsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVChoZWlnaHQgJSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQgLyA0OyArK3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAxNik7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUNUJsb2NrRnVsbChz
b3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHVubG9jaygpOwogfQogCiAvLyBUaGlzIGlt
cGxlbWVudHMgZ2xDb3B5VGV4W1N1Yl1JbWFnZTJEIGZvciBub24tcmVuZGVyYWJsZSBpbnRlcm5h
bCB0ZXh0dXJlIGZvcm1hdHMgYW5kIGluY29tcGxldGUgdGV4dHVyZXMKQEAgLTExMjEsOSArOTYz
LDggQEAgdm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5bwogICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCi0gICAgUkVDVCBzb3VyY2VS
ZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlc2NyaXB0aW9u
LkhlaWdodCk7Ci0gICAgaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlv
ZmZzZXQsIGhlaWdodCwgbUhlaWdodCk7Ci0gICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCBk
ZXN0WU9mZnNldCwgeG9mZnNldCArIHdpZHRoLCBkZXN0WU9mZnNldCArIGhlaWdodH07CisgICAg
UkVDVCBzb3VyY2VSZWN0ID0ge3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07CisgICAgUkVD
VCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQg
KyBoZWlnaHR9OwogCiAgICAgaWYgKGlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKQEAgLTEy
NjcsOSArMTEwOCw5IEBAIHZvaWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW8K
ICAgICBtRGlydHkgPSB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2Uo
Ym9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCksCi0g
ICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQb29sKG1SZW5kZXJUYXJnZXQp
KSwKK1RleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSkKKyAgICA6IG1E
M0RVc2FnZSh1c2FnZSksCisgICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdldFRleHR1cmVQ
b29sKHVzYWdlKSksCiAgICAgICBtVGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVTZXJpYWwoKSkK
IHsKIH0KQEAgLTEyODAsNyArMTEyMSw3IEBAIFRleHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3Jh
Z2UoKQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNB
R0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsKIH0KIAogYm9v
bCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QKQEAgLTEyOTMsNiArMTEzNCwxMSBA
QCBEM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKICAgICByZXR1cm4gbUQz
RFBvb2w7CiB9CiAKK0RXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1EM0RVc2FnZTsKK30KKwogdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpn
ZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVRleHR1cmVTZXJpYWw7CkBA
IC0xNDUwLDE1ICsxMjk2LDcgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tB
bGlnbgogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9j
a2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9j
aygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5n
ZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9
CkBAIC0xNDY3LDUyICsxMzA1LDE2IEBAIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdl
KEdMc2l6ZWkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2so
JmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2go
aW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRGb3JtYXQoKSk7Ci0gICAgICAgICAgICBpbnQg
aW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFn
ZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRGb3JtYXQoKSk7Ci0gICAgICAgICAgICBpbWFnZS0+
bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVp
Z2h0KCksIC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocGl4ZWxzKSArIGlu
cHV0U2l6ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5sb2Fk
Q29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKIGJv
b2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQogewot
ICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgKyB5
b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoSXND
b21wcmVzc2VkKGltYWdlLT5nZXRGb3JtYXQoKSkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoZm9ybWF0ICE9IGltYWdlLT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAg
IGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsK
LQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwg
aGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAg
ICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWREYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTE1MjEs
MzcgKzEzMjMsOSBAQCBib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMCiAK
IGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAg
aWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZz
ZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQg
IT0gZ2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmIChwaXhl
bHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgICAgICB1
cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5yaWdodCA9
IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmJvdHRvbSA9IHlvZmZzZXQg
KyBoZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAgICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWFnZS0+
bG9jaygmbG9ja2VkLCAmdXBkYXRlUmVnaW9uKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNv
bXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUg
PSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICAgICAg
ICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgdHJhbnNmb3JtUGl4ZWxZT2Zm
c2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgsIGhlaWdodCwg
LWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXpl
IC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAg
aW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVz
c2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgICAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIApAQCAtMTY2NywyMyArMTQ0MSwyNyBAQCBi
b29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVy
ZTkgKnN1cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKHRydWUpLCBtUmVuZGVyVGFyZ2V0
U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFn
ZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkg
OiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCiB7CiAgICAgbVRleHR1cmUg
PSBzdXJmYWNlVGV4dHVyZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2Uy
RChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJv
b2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbVJl
bmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4
dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9y
bWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogVGV4dHVyZVN0
b3JhZ2UodXNhZ2UpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
c3VlU2VyaWFsKCkpCiB7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7Ci0KICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8g
RDNEVVNBR0VfUkVOREVSVEFSR0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHdpZHRoIG9y
IGhlaWdodCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNv
bXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRo
ZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Cisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWln
aHQsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC0xNjk1LDYgKzE0NzMsOCBAQCBUZXh0dXJlU3RvcmFnZTJE
Ojp+VGV4dHVyZVN0b3JhZ2UyRCgpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwo
aW50IGxldmVsKQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKQEAg
LTE3NzgsMTkgKzE1NTgsMjAgQEAgR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBs
ZXZlbAogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50ZXJu
YWxGb3JtYXQoKSBjb25zdAorR0xlbnVtIFRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgp
OwotfQotCi1HTGVudW0gVGV4dHVyZTJEOjpnZXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBHTF9OT05FOwogfQogCi1EM0RG
T1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNERk9STUFUIFRleHR1cmUy
RDo6Z2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9
CiAKIHZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpCkBAIC0xOTM4
LDE5ICsxNzE5LDE3IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEcK
IAogICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0ID0gdHJhbnNm
b3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gY2xhbXAoc291
cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRvcCwgMCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gY2xh
bXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVp
Z2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVs
WU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7CisgICAg
ICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSAr
IGhlaWdodDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKIAogICAgICAgICAgICAg
aWYgKGRlc3QpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5j
b3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCBkZXN0WU9mZnNldCwgZGVz
dCk7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291
cmNlUmVjdCwgZm9ybWF0LCAwLCAwLCBkZXN0KTsKICAgICAgICAgICAgICAgICBkZXN0LT5SZWxl
YXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5OTAsMTkgKzE3NjksMTggQEAg
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZwogCiAgICAgICAgIGlmIChs
ZXZlbCA8IGxldmVsQ291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VS
ZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0
ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdl
dFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0
LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNl
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3Qu
Ym90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAg
ICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSB4ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CiAKLSAgICAgICAgICAgIEdMaW50IGRl
c3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsKIAogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKIAogICAgICAg
ICAgICAgaWYgKGRlc3QpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRl
cigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9y
bWF0KCksIHhvZmZzZXQsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRC
bGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5n
ZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7CiAgICAgICAgICAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDE2LDEwICsxNzk0
LDEwIEBAIHZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCAKICAgICBHTGVu
dW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51
bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQg
ZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29u
c3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkg
JiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09S
RCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAg
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlMkQobGV2ZWxzLCBkM2RmbXQsIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAg
bVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNh
Z2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1JbW11dGFibGUgPSB0cnVlOwogCiAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKQEAgLTIwNzQsOCArMTg1Miw4
IEBAIGJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnMKICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgp
ID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
cigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FUX09F
UyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisgICAg
aWYgKChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5z
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9y
bWF0KDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlcigpKSkKICAgICB7CiAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdM
X05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdM
X05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CkBAIC0yMTU3LDkgKzE5MzUsMTQg
QEAgYm9vbCBUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wgVGV4
dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElz
Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworfQorCitib29sIFRleHR1cmUy
RDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2Vk
KGdldEludGVybmFsRm9ybWF0KCkpOworICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUy
RDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE3MywxMSArMTk1NiwxMSBAQCB2b2lkIFRl
eHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCk7CiAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRI
ZWlnaHQoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0
KTsKLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7
Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxl
KGZvcm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsK
KyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Cisg
ICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNl
KTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0
dXJlU3RvcmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQp
OworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQs
IGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAKICAgICBpZiAobVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKQogICAgIHsKQEAgLTIyMTcsOSArMjAwMCwxMCBAQCB2b2lkIFRleHR1cmUyRDo6
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKICAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFy
cmF5WzBdLmdldFdpZHRoKCk7CiAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlb
MF0uZ2V0SGVpZ2h0KCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0u
Z2V0RDNERm9ybWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNh
Z2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAg
ICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHRydWUpOworICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1
cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKIAog
ICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjIzMiw4ICsy
MDE2LDggQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAg
ICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpKQogICAgICAgICAgICAgICAgIHsgICAKICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
aWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzE1LDEyICsy
MDk5LDE0IEBAIFJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIKIAogICAg
IGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJl
KHRoaXMsIHRhcmdldCkpOworICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJi
dWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsK
QEAgLTIzMzMsNiArMjExOSwzMyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJUCiAKICAgICB1cGRhdGVUZXh0dXJlKCk7CiAgICAgCisgICAgLy8gZW5zdXJlIHRoaXMg
aXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKDApKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFj
ZUxldmVsKDApOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQoreworICAgIEFT
U0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVy
bHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVM
TCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVRleHR1
cmUoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQor
ICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
ICAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsKIH0KIApAQCAtMjM1
MywxOCArMjE2NiwyMiBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
CiAgICAgcmV0dXJuIG1UZXhTdG9yYWdlOwogfQogCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRl
eHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6
ZSwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJUYXJnZXQp
LCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJl
U2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
aW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKQorICAg
IDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQogewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGlz
UmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBv
b2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAv
LyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBh
biBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBw
aW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmIChzaXplID4gMCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGdl
dFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIApAQCAtMjM3Niw2ICsyMTkzLDggQEAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVy
ZVN0b3JhZ2VDdQogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlID0gTlVMTDsKQEAgLTI0NTQsMzUgKzIyNzMsMzYgQEAgR0xlbnVtIFRleHR1cmVDdWJlTWFw
OjpnZXRUYXJnZXQoKSBjb25zdAogICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwogfQog
Ci1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKK0dM
c2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRXaWR0aCgpOwor
ICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRX
aWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVy
ZUN1YmVNYXA6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKK0dMc2l6ZWkgVGV4dHVyZUN1
YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAg
ICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7CisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEhlaWdodCgpOwogICAg
IGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5n
ZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUeXBlKCkgY29uc3QK
K0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldFR5
cGUoKTsKKyAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdl
dEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLUQzREZP
Uk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0QzREZPUk1BVCBUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dAogewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICBp
ZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJl
dHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEQzREZvcm1hdCgp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOwogfQogCiB2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCkBAIC0yNTgyLDggKzI0MDIsOCBAQCBib29sIFRl
eHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChn
ZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCkt
PnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKKyAgICBpZiAoKGdldEludGVybmFsRm9y
bWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfRkxPQVQgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChn
ZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdM
X0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZp
bHRlcigpKSkKICAgICB7CiAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwg
KG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQ
TUFQX05FQVJFU1QpKQogICAgICAgICB7CkBAIC0yNjc5LDkgKzI0OTksOSBAQCBib29sIFRleHR1
cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnN0Citib29sIFRleHR1cmVDdWJl
TWFwOjppc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICByZXR1cm4g
SXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKIH0KIAogSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25z
dApAQCAtMjY5NCwxMSArMjUxNCwxMSBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0
dXJlKCkKIHsKICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgp
OwogICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgIEQzREZP
Uk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICBjb25z
dCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAm
JiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIEQzREZP
Uk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICBEV09S
RCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAg
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4
U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVz
YWdlLCBzaXplKTsKIAogICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewpA
QCAtMjc0Miw5ICsyNTYyLDEwIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRl
clRhcmcKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dFdpZHRoKCk7CiAgICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDAp
OwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9y
bWF0KCk7CisgICAgICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRE
M0RGb3JtYXQoKTsKKyAgICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNk
Zm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKIAotICAgICAgICBu
ZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGZvcm1hdCwg
c2l6ZSwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICAgICAgaWYgKG1U
ZXhTdG9yYWdlICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTI3NTksOCArMjU4MCw4IEBAIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmcKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5h
Z2VkKCkpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKQEAgLTI4NDcsMTkgKzI2NjgsMTcgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUlt
YWdlKEdMZW51bSB0YQogCiAgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENv
dW50KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9y
bVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJj
ZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1w
KHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdo
dCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlP
ZmZzZXQoMCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5nZXRXaWR0aCgp
KTsKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAg
ICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0
b20gPSB5ICsgaGVpZ2h0OwogCiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9
IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKIAogICAgICAg
ICAgICAgaWYgKGRlc3QpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRl
cigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCBkZXN0WU9mZnNl
dCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdl
dCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCAwLCBkZXN0KTsKICAgICAgICAgICAgICAgICBkZXN0
LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI5MDMsMTkgKzI3MjIs
MTcgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bQogCiAgICAgICAg
IGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVDVCBz
b3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVy
KCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3Vy
Y2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNl
dCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmdldFdpZHRoKCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0
OworICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CiAKICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KHRhcmdldCwgbGV2ZWwpOwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VS
ZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQs
IGRlc3QpOworICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQs
IHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zm
c2V0LCBkZXN0KTsKICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTI5MjksMTAgKzI3NDYsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c3RvcmFnZShHTHNpemVpIGxldgogICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZv
cm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUo
aW50ZXJuYWxmb3JtYXQpOwogICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZv
cm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElz
VGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0g
ICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10
LCBzaXplLCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9y
YWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwogICAgIG1JbW11dGFi
bGUgPSB0cnVlOwogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2
ZWwrKykKQEAgLTMwNDksMTIgKzI4NjYsMTQgQEAgUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0UmVuZGVyYgogCiAgICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQogICAg
IHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBu
ZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1GYWNlUHJveGll
c1tmYWNlXTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQogewogICAg
IEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwpAQCAtMzA4Nyw0ICsyOTA2
LDQgQEAgVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYQogICAgIHJldHVy
biBtVGV4U3RvcmFnZTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5o
CShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsNiBAQCBjbGFzcyBJbWFn
ZQogICAgIHZvaWQgbWFya0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0Ns
ZWFuKCkge21EaXJ0eSA9IGZhbHNlO30KIAotICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVD
VCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQog
ICAgIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CiAgICAgRDNERk9STUFUIGdldEQz
REZvcm1hdCgpIGNvbnN0OwogCkBAIC03MCw1NiArNjcsNTIgQEAgY2xhc3MgSW1hZ2UKICAgICB2
b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHZv
aWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFs
cGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxw
aGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRM
dW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5j
ZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0OwotICAgIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5j
ZUFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQg
bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9p
ZCBsb2FkUkdCNTY1RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCSGFsZkZs
b2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURh
dGFTU0UyKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2Fk
UkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE0NDQ0
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZv
aWQgbG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZENvbXByZXNzZWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZERYVDVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKIAogICAgIHZvaWQgY29weShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7CiAKQEAgLTEyOCw2ICsx
MjEsOSBAQCBjbGFzcyBJbWFnZQogCiAgICAgdm9pZCBjcmVhdGVTdXJmYWNlKCk7CiAKKyAgICBI
UkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3Qp
OworICAgIHZvaWQgdW5sb2NrKCk7CisKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNpemVp
IG1IZWlnaHQ7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CkBAIC0xNDQsMjAgKzE0MCwyMSBAQCBjbGFz
cyBJbWFnZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0
IFRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBsaWNpdCBUZXh0dXJl
U3RvcmFnZShEV09SRCB1c2FnZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwog
CiAgICAgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgaXNNYW5hZ2VkKCkg
Y29uc3Q7CiAgICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CisgICAgRFdPUkQgZ2V0VXNhZ2Uo
KSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VGV4dHVyZVN0b3JhZ2UpOwogCi0gICAgY29uc3QgYm9vbCBtUmVuZGVyVGFyZ2V0OworICAgIGNv
bnN0IERXT1JEIG1EM0RVc2FnZTsKICAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwogCiAgICAg
Y29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwpAQCAtMTkwLDE0ICsxODcsNyBAQCBj
bGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgR0xlbnVtIGdldFdyYXBU
KCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0g
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25z
dCA9IDA7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0ID0gMDsKIAogICAgIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVy
ICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwpAQCAtMjE2LDggKzIwNiw2IEBA
IGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBzdGF0aWMgY29uc3Qg
R0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAg
IC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVl
IGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVz
b3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmU7Ci0KICAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIGJvb2wgc3ViSW1hZ2UoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFn
ZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwpA
QCAtMjU4LDcgKzI0Niw3IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVy
ZVMKIHsKICAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNE
VGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZl
bHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJU
YXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1h
dCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlU3RvcmFnZTJEKCk7CiAKQEAgLTI4NiwxMSArMjc0LDEyIEBAIGNsYXNzIFRleHR1cmUy
RCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51
bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNv
bnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNl
dEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpOwpAQCAtMzAxLDcgKzI5MCw2IEBAIGNsYXNzIFRleHR1cmUy
RCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0NvbXByZXNzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgp
OwogCkBAIC0zMDksNiArMjk3LDExIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJl
CiAKICAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpOwogCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5j
aWwoR0xlbnVtIHRhcmdldCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZTJEKTsKIApAQCAtMzE2LDcgKzMwOSw2IEBAIGNsYXNzIFRleHR1cmUyRCA6
IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3Rv
cmFnZShib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBj
b25zdDsKQEAgLTM0MSw3ICszMzMsNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVy
ZQogY2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7
CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9S
TUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBUZXh0dXJlU3Rv
cmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGlu
dCBzaXplKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOwogCkBAIC0z
NjksMTEgKzM2MSwxMSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAK
ICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldElu
dGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldEltYWdlTmVnWChH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CkBAIC0zOTEsNyArMzgzLDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVy
ZQogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHNpemUpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCkBAIC0zOTksNiArMzkwLDEwIEBAIGNsYXNz
IFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKIAorICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKQEAgLTQwNiw3ICs0
MDEsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgp
OwogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFs
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAgICAg
dmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CiAK
ICAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEz
LDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi92ZXJ0ZXhjb252
ZXJzaW9uLmgiCkBAIC0xMjgsMTAgKzEyOSwxMSBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6
OnByZXBhcmVWZXJ0ZXhECiAKICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmYXR0cmli
cyA9IG1Db250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CiAgICAgUHJvZ3JhbSAqcHJvZ3Jh
bSA9IG1Db250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBmb3IgKGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJ
bmRleF0uYWN0aXZlID0gKHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgp
ICE9IC0xKTsKKyAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHBy
b2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKICAg
ICB9CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNl
ZCBidWZmZXIsIGFuZCBpbnZhbGlkYXRlIHN0YXRpYyBidWZmZXJzIHRoYXQgZG9uJ3QgY29udGFp
biBtYXRjaGluZyBhdHRyaWJ1dGVzCkBAIC00NDgsOCArNDUwLDggQEAgc3RydWN0IENvbnZlcnNp
b25SdWxlIDogZ2w6OkNhc3Q8dHlwZW5hbQogdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3Ry
dWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9y
bWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKIAogLy8gVXNl
IGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5
IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgot
dGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9G
TE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpG
aXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNp
b25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdM
aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVE
LCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsK
IAogLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFs
dWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEp
CiAvLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkocmV2aXNp
b24gMTIyMjM5KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibGli
R0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKQEAgLTU0
LDI2ICs1NSwxMjEgQEAgYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wg
Y29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBnbDo6VGV4dHVyZSAq
dGV4dHVyZSkKKy8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJp
bmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KK2Jvb2wgY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK3sKKyAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiBieSBp
dHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgorICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZB
TElEX0VOVU0KKyAgICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBz
ZXRzIElOVkFMSURfT1BFUkFUSU9OCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAg
ICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisK
KyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToK
KyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX1JHQjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
KyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfMjRfOF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAgfQorfQorYm9vbCB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKIHsKICAgICBpZiAoIXRl
eHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQoKSkKKyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQobGV2
ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAm
JiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgaWYgKGNvbXByZXNzZWQpCiAgICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAw
ICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fCAKKyAgICAgICAgaWYgKCh3aWR0
aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKICAgICAgICAg
ICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOwpAQCAtODksNiArMTg1LDQzIEBAIGJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFt
cyhib29sIGNvbXByZXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
KQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVzc2VkICE9
IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlm
IChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoY29tcHJlc3NlZCkKKyAgICB7
CisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lk
dGgodGFyZ2V0LCAwKSkgfHwKKyAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0
ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFy
Z2V0LCBsZXZlbCkgfHwKKyAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8vIGNo
ZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlkIGZv
ciBSZWFkUGl4ZWxzCiBib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpCiB7CkBAIC0xMDk0LDcgKzEyMjcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJECiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTEwMiw3ICsxMjM1LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRAogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTI1OCw2ICsxMzkxLDE5IEBA
IHZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHQKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM6CisgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTEzNTUsMjMgKzE1MDEsMzEgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAg
ICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFs
Rm9ybWF0KCk7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAg
ICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7CiAKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lz
dGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVs
KTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFn
ZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdM
X05PTkUsIHRleHR1cmUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAg
ICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0
aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhj
dWJlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUg
PSB0ZXhjdWJlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZv
cm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAz
LjkKICAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKQEAgLTE0MTQsNiArMTU2OCw5
IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnUKICAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgogICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMjMwNiwxOSArMjQ2Mywy
MSBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgIHN3aXRj
aCAodGV4dGFyZ2V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkg
IT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nh
c3Q8Z2w6OlRleHR1cmUyRCAqPih0ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgpAQCAt
MjMyNiwxMSArMjQ4NSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMCiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WToKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVf
Q1VCRV9NQVApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0
aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTI0NDAs
MjggKzI2MDYsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdAog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZTsKLQogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgy
ZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgw
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVN
aXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpA
QCAtMjc1OSwxMiArMjkzOCwxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24o
R0x1aW50CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJpYnV0ZUxv
Y2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEF0dHJp
YnV0ZUxvY2F0aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKQEAgLTMyMTgsNyArMzM5OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3Jh
bWl2KEdMdWludCBwcm8KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+
aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKSAhPSBOVUxMOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CkBAIC0zMjQxLDYg
KzM0MjEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvCiAgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFN
X0JJTkFSWV9MRU5HVEhfT0VTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTM3NjYs
MTIgKzM5NDksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludAog
CiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVu
aWZvcm1mdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTM4MDAsMTIgKzM5ODksMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3Jt
ZnYoR0x1aW50IHBybwogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC0zODQwLDE3ICs0MDM1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
blVuaWZvcm1pdkVYVChHTHVpbnQKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sICZi
dWZTaXplLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlm
b3JtaXYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CkBAIC0zODc5LDE3ICs0MDc1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWl2
KEdMdWludCBwcm8KIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFt
cykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlv
biwgTlVMTCwgcGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzkzMCwxMiAr
NDEyNywxMyBAQCBpbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWluCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsK
KyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtTG9jYXRpb24obmFt
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTAx
Miw2ICs1MjEwLDI2IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
IH0KIAorICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29u
ZGFyeSBrZXkgYmVsb3cpCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0
eXBlPiBjb21iaW5hdGlvbnMKKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMg
SU5WQUxJRF9FTlVNCisgICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmlu
YXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
ICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CkBAIC01MDI0LDcgKzUyNDIsNyBA
QCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xf
UkdCOgpAQCAtNTAzNiw3ICs1MjU0LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6CkBAIC01MDQ5LDcgKzUyNjcsNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9F
WFQ6CkBAIC01MDU4LDcgKzUyNzYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xl
bnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8g
ZXJyb3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRsZWQgYmVsb3cKQEAg
LTUwNjYsOCArNTI4NCwyNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRh
cmdlCiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgog
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAgICAg
ICAgICAgIGJyZWFrOyAKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6
CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoYm9yZGVyICE9IDApCkBAIC01MTQ2LDYgKzUzODMsMjMgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVY
VFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBh
bmQgbXVsdGlwbGUgbGV2ZWxzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90
ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxl
dmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTU0MTYsNiArNTY3MCwyNSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBBTkdMRV9k
ZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMgMS1sZXZlbCB0ZXh0dXJlcworICAgICAgICAgICAg
ICAgIGlmIChsZXZlbHMgIT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCkBAIC01NDg0LDE0ICs1NzU3LDkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFnbDo6Q2hlY2tUZXh0dXJl
Rm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9
PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAgICAgICBpZiAoIWNoZWNr
VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVscGVyIGZ1
bmN0aW9uCiAgICAgICAgIH0KIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwpAQCAtNTUxNywxMSArNTc4NSwyOSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1
cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMg
bG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBp
eGVscyA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWws
IGZvcm1hdCwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZv
cm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC01NTI5LDcgKzU4MTUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRo
LCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgs
IGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJl
KSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1Yklt
YWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNTU3OCw3ICs1ODY0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTFmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlv
biwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjIyLDcgKzU5MTQs
MTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aQogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFpdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KQEAgLTU2NjgsNyArNTk2NiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTcxNCw3ICs2MDE4
LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC01NzYwLDcgKzYwNzAsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtM2Z2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4MDYsNyArNjEy
MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNTg1Miw3ICs2MTc0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0tPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODk4LDcgKzYy
MjYsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aQogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTU5MzgsNyArNjI3MiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm1NYXRyaXgyZnYoR0xpbnQgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CkBAIC01OTc4LDcgKzYzMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0
cml4M2Z2KEdMaW50IAogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpA
QCAtNjAxOCw3ICs2MzY0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihH
TGludCAKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwNTQs
NyArNjQwNiw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3IKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwcm9ncmFt
ICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICBpZiAocHJv
Z3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTY0NjMsNiArNjgxNSw3OSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFRleEltYWdlM0RPRVMoR0xlbnVtIHRhCiAgICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdl
dFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
KmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dy
YW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9
IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXpl
LCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xf
UFJPR1JBTV9CSU5BUllfQU5HTEU7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwg
R0xpbnQgbGVuZ3RoKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5h
cnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5ndGggPSAlZCkiLAorICAgICAg
ICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
YmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZXRQcm9ncmFtQmluYXJ5KE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUg
X19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCiB7CiAgICAg
c3RydWN0IEV4dGVuc2lvbgpAQCAtNjQ5OSw3ICs2OTI0LDggQEAgX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZQogICAgICAgICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFO
R0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEV9LAogICAgICAgICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlz
SW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUi
LCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFfSwKLSAgICB9OworICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9F
UyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3Jh
bUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsK
IAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6
ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHJldmlzaW9u
IDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAxLDYgKzQwMSwxMCBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuY3Bw
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5
LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00OTEsNiArNDk1LDEwIEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5Lmgi
CiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAkocmV2aXNpb24gMTIyMjM5KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCwyNiArNzAsNiBAQCBpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0IHgpCiAgICAg
fQogfQogCi1pbmxpbmUgUkVDVCB0cmFuc2Zvcm1QaXhlbFJlY3QoR0xpbnQgeCwgR0xpbnQgeSwg
R0xpbnQgdywgR0xpbnQgaCwgR0xpbnQgc3VyZmFjZUhlaWdodCkKLXsKLSAgICBSRUNUIHJlY3Qg
PSB7eCwKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAtIHkgLSBoLAotICAgICAgICAg
ICAgICAgICB4ICsgdywKLSAgICAgICAgICAgICAgICAgc3VyZmFjZUhlaWdodCAtIHl9OwotICAg
IHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgaW50IHRyYW5zZm9ybVBpeGVsWU9mZnNldChHTGlu
dCB5b2Zmc2V0LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAgIHJldHVybiBz
dXJmYWNlSGVpZ2h0IC0geW9mZnNldCAtIGg7Ci19Ci0KLWlubGluZSBHTGVudW0gYWRqdXN0V2lu
ZGluZyhHTGVudW0gd2luZGluZykKLXsKLSAgICBBU1NFUlQod2luZGluZyA9PSBHTF9DVyB8fCB3
aW5kaW5nID09IEdMX0NDVyk7Ci0gICAgcmV0dXJuIHdpbmRpbmcgPT0gR0xfQ1cgPyBHTF9DQ1cg
OiBHTF9DVzsKLX0KLQogaW5saW5lIGJvb2wgc3VwcG9ydHNTU0UyKCkKIHsKICAgICBzdGF0aWMg
Ym9vbCBjaGVja2VkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMjIyMzkpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTI3NCw2ICsyNzQsMTcgQEAgYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1h
dCkKICAgICB9CiB9CiAKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCkKK3sKKyAg
ICBpZiAoZm9ybWF0ID09IEdMX0RFUFRIX0NPTVBPTkVOVCB8fAorICAgICAgICBmb3JtYXQgPT0g
R0xfREVQVEhfU1RFTkNJTF9PRVMpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVz
LCBvZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQogaW50IENvbXB1dGVQaXhlbFNpemUoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7CkBAIC0yOTQsNyArMzA1LDExIEBAIGludCBDb21w
dXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW4KICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgIGNhc2UgR0xfRkxP
QVQ6CiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CkBAIC0zMzMsNTMgKzM0OCw2
IEBAIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmcKICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OwogfQogCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5h
dGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoK
LSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0g
R0xfUkdCQSk7Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAg
IHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRl
cm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQpAQCAtNDA3LDYgKzM3
NSw5IEBAIEdMZW51bSBFeHRyYWN0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm0KICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5D
RTsKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJu
IEdMX0xVTUlOQU5DRV9BTFBIQTsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFfRVhUOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhf
Q09NUE9ORU5UOworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAg
ICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9PRVM7CiAgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCiAg
ICAgfQogfQpAQCAtNDM4LDYgKzQwOSw5IEBAIEdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50
ZXJuYWxmb3JtYXQKICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEExNkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNl
IEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9C
WVRFOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfU0hPUlQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOiAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfMjRfOF9P
RVM7CiAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCiAgICAgfQogfQpAQCAtNjM4LDkgKzYxMiw2IEBA
IEQzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKIHsKICAgICBEM0RDVUJF
TUFQX0ZBQ0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsKIAotICAgIC8vIE1h
cCBhIGN1YmUgbWFwIHRleHR1cmUgdGFyZ2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nICBEM0Qgc3Vy
ZmFjZSBpbmRleC4gTm90ZSB0aGF0IHRoZQotICAgIC8vIFkgZmFjZXMgYXJlIHN3YXBwZWQgYmVj
YXVzZSB0aGUgWSBjb29yZGluYXRlIHRvIHRoZSB0ZXh0dXJlIGxvb2t1cCBpbnRyaW5zaWMgZnVu
Y3Rpb25zCi0gICAgLy8gYXJlIG5lZ2F0ZWQgaW4gdGhlIHBpeGVsIHNoYWRlci4KICAgICBzd2l0
Y2ggKGN1YmVGYWNlKQogICAgIHsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgpAQCAtNjUwLDEwICs2MjEsMTAgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3Vi
ZUZhY2UoR0xlbnVtIAogICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1g7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWTsKKyAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOwogICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
TkVHQVRJVkVfWTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKICAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9a
OwpAQCAtNzY3LDYgKzczOCw3IEBAIEQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KEdMZW4KIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEdMX05PTkU6
ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7CiAgICAgICBjYXNlIEdMX1JHQkE0
OgogICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAg
ICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKQEAgLTc5NCw2ICs3NjYsMTAgQEAgbmFtZXNw
YWNlIGR4MmVzCiAKIHVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNp
bEZvcm1hdCkKIHsKKyAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7
CisgICAgICAgIHJldHVybiA4OworICAgIH0KICAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKICAg
ICB7CiAgICAgICBjYXNlIEQzREZNVF9EMjRGUzg6CkBAIC05MDQsNiArODgwLDEwIEBAIHVuc2ln
bmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQgY29sb3IKIAogdW5zaWduZWQgaW50IEdldERl
cHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCiB7CisgICAgaWYgKGRlcHRoRm9ybWF0ID09
IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDI0OworICAgIH0KICAgICBzd2l0
Y2ggKGRlcHRoRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTog
IHJldHVybiAxNjsKQEAgLTk2NSw2ICs5NDUsMTYgQEAgYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNE
Rk9STUFUIHN1cmZhY2VGbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJc0RlcHRoVGV4
dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1cmZh
Y2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCitib29sIElzU3RlbmNpbFRleHR1cmVGb3Jt
YXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0
ID09IEQzREZNVF9JTlRaKTsKK30KKwogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCkBAIC05OTEsNiArOTgxLDEwIEBAIEdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQKIAogR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCkKIHsKKyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRa
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgIH0K
ICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CiAgICAgICBjYXNlIEQzREZNVF9EMTY6CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVz
LmgJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDYgKzE2LDkgQEAKIAogI2luY2x1
ZGUgPHN0cmluZz4KIAorY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQp
KE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOworY29uc3QgRDNERk9STUFUIEQzREZNVF9O
VUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOworCiBuYW1l
c3BhY2UgZ2wKIHsKIApAQCAtMzYsOSArMzksOSBAQCBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNp
emVpIHdpZHRoLCBHTGVuCiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3
aWR0aCwgR0xlbnVtIGZvcm1hdCk7CiBHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ29tcHJl
c3NlZChHTGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCk7
CiBib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBDaGVja1RleHR1cmVGb3Jt
YXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdMZW51bSBFeHRyYWN0Rm9ybWF0
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiBHTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVy
bmFsZm9ybWF0KTsKIApAQCAtNzksNiArODIsOCBAQCBHTHVpbnQgR2V0RGVwdGhTaXplKEQzREZP
Uk1BVCBkZXB0aEZvcm1hCiBHTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxG
b3JtYXQpOwogYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwog
Ym9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOworYm9vbCBJc0Rl
cHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Citib29sIElzU3RlbmNp
bFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwogCiBHTHNpemVpIEdldFNh
bXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA3LTEwICBNYXggVnVqb3Zp
YyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTAzOQor
CisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICBVcGRhdGUgQU5H
TEUgdG8gcjExNzAsIHdpdGggdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgICAgICAg
IFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljLmNw
cCB0byBEaWFnbm9zdGljQmFzZS5jcHAuCisgICAgICAgIFJlbmFtZSBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCB0byBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAuCisKKyAgICAgICAgV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIEFOR0xFJ3Mg
bmV3IHByZXByb2Nlc3NvciwgdGhlcmUgd2VyZSB0d28gZmlsZXMgbmFtZWQgRGlhZ25vc3RpYy5j
cHAKKyAgICAgICAgaW4gQU5HTEUgdW5kZXIgZGlmZmVyZW50IGZvbGRlcnMuIFRoaXMgY2F1c2Vk
IHByb2JsZW1zIG9uIHRoZSBRVCBidWlsZCB3aGVuIHRoZWlyIG9iamVjdAorICAgICAgICBmaWxl
cywgYm90aCBuYW1lZCBEaWFnbm9zdGljLm8sIHRyaWVkIHRvIGdvIGluIHRoZSBzYW1lIGZvbGRl
ci4gUmVuYW1pbmcgb25lIG9mIHRoZW0gdG8KKyAgICAgICAgRGlhZ25vc3RpY0Jhc2UuY3BwIGF2
b2lkcyB0aGlzIGNvbmZsaWN0LiBUaGUgc2FtZSBzaXR1YXRpb24gb2NjdXJyZWQgd2l0aAorICAg
ICAgICBEaXJlY3RpdmVIYW5kbGVyLmNwcC4gSSB3aWxsIHRyeSB0byBnZXQgdGhlaXIgbmFtZXMg
Y2hhbmdlZCBpbiBBTkdMRSBmb3IgZnV0dXJlIHVwZGF0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisK
IDIwMTItMDctMTAgIFN1ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBsaW51
eC5pbnRlbC5jb20+CiAKICAgICAgICAgW0dUS10gRml4IG1lbW9yeSBsZWFrcyBieSBhZG9wdGlu
ZyBhbGxvY2F0aW9uIG9mIEdka1BpeGJ1ZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDEyMjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yMzE4LDcgKzIzMTgsMjAgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdl
bkdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9D
b21waWxlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdf
bGV4LmNwcApAQCAtMjMyNiw2ICsyMzM5LDcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCkBAIC0yMzM4LDIyICsyMzUyLDUy
IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wYXJzZUNvbnN0LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3Ry
dWN0LmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuYworICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWNzLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3Iu
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xz
LmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjIyMzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01OTA4LDgg
KzU5MDgsMjEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVidWcuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVidWcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5jcHAgXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXApA
QCAtNTkyMiw2ICs1OTM1LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
Y3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRl
LmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNw
cCBcCkBAIC01OTQ1LDYgKzU5NTksNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggXApAQCAtNTk1NCw2
ICs1OTY5LDI5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVy
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCkBAIC01OTY3LDYgKzYw
MDUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW1vdmVUcmVlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9SZW5hbWVGdW5jdGlvbi5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXApAQCAtNTk3NSw2ICs2MDE0LDEwIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9u
R0xTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9u
R0xTTC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmggXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXApAQCAtNTk4Miw4
ICs2MDI1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTIyMjM5KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMzk4Miw3ICszOTgyLDEzIEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJ
Q1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbW1vbi5oIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIFwKKyAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBcCisgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51
aXR5LmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9u
LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXAogICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oIFwKQEAgLTM5OTcsMTEgKzQwMDMsMjQg
QEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvTU1hcC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvb3NpbmNsdWRlLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
UHJhZ21hLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2F0b20uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y29tcGlsZS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bGVuZ3RoX2xpbWl0cy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBc
CisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJl
c3Npb25QYXJzZXIuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKyAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRp
b24uaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbml6ZXIuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcGFyc2VyLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIFwKQEAgLTQwMTYsMTQgKzQwMzUsMTcgQEAgY29udGFp
bnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9S
ZW1vdmVUcmVlLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVuYW1lRnVu
Y3Rpb24uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wu
aCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
aCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yRVNTTC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JHTFNMLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLSAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKyAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvVmFyaWFibGVJbmZvLmggXApAQCAtNDAzNiwxMyArNDA1OCwyMSBAQCBjb250YWlu
cyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvQ29tcGlsZXIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2Rl
YnVnLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lv
bi5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
IFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3Bw
IFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgXAogICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwIFwKICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIFwgCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL2ludGVybU91dC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvSW50ZXJtVHJhdmVyc2UuY3BwIFwKQEAgLTQwNjAsMTAgKzQwOTAsMTIgQEAgY29udGFpbnMo
REVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9TaGFkZXJMYW5nLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAgXAotICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCisgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXApAQCAtNDA3NCw2ICs0MTA2LDE3IEBAIGNv
bnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMgXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKKyAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcCBc
CisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVj
dGl2ZUhhbmRsZXJCYXNlLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNw
cCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCisgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAg
XAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YyBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5jIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYwo=
</data>
<flag name="review"
          id="160040"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152576</attachid>
            <date>2012-07-16 11:48:47 -0700</date>
            <delta_ts>2012-07-16 15:21:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039-svn-3.patch</filename>
            <type>text/plain</type>
            <size>1219269</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjczOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDkwNCBAQAorMjAxMi0wNy0xNiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEFOR0xFIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gcjExNzAsIHdpdGggdGhlIGZv
bGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgICAgICAgICgxKSBVc2UgQmlzb24gMi4zIGluc3Rl
YWQgb2YgQmlzb24gMi40LjIgdG8gZ2VuZXJhdGUgRXhwcmVzc2lvblBhcnNlci5jcHAgYW5kCisg
ICAgICAgIGdsc2xhbmdfdGFiLmNwcC4gSSBoYWQgdG8gbW9kaWZ5IEV4cHJlc3Npb25QYXJzZXIu
eSB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBCaXNvbgorICAgICAgICAyLjMuIFRoZSBjaGFu
Z2VzIGhhdmUgYmVlbiBjb250cmlidXRlZCBiYWNrIHRvIEFOR0xFIGluIHIxMjI0LgorCisgICAg
ICAgICgyKSBDb250aW51ZSB0byByZWNvZ25pemUgUU5YIGFzIFBPU0lYIGluIEFOR0xFLiBUaGlz
IGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJhY2sgdG8gQU5HTEUKKyAgICAgICAgaW4gcjEyMjMuCisK
KyAgICAgICAgKDMpIFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljLmNwcCB0byBEaWFnbm9zdGljQmFzZS5jcHAuCisgICAgICAgIFJlbmFtZSBBTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCB0byBE
aXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAuCisKKyAgICAgICAgV2l0aCB0aGUgaW50cm9kdWN0aW9u
IG9mIEFOR0xFJ3MgbmV3IHByZXByb2Nlc3NvciwgdGhlcmUgd2VyZSB0d28gZmlsZXMgbmFtZWQg
RGlhZ25vc3RpYy5jcHAKKyAgICAgICAgaW4gQU5HTEUgdW5kZXIgZGlmZmVyZW50IGZvbGRlcnMu
IFRoaXMgY2F1c2VkIHByb2JsZW1zIG9uIHRoZSBRVCBidWlsZCB3aGVuIHRoZWlyIG9iamVjdAor
ICAgICAgICBmaWxlcywgYm90aCBuYW1lZCBEaWFnbm9zdGljLm8sIHRyaWVkIHRvIGdvIGluIHRo
ZSBzYW1lIGZvbGRlci4gUmVuYW1pbmcgb25lIG9mIHRoZW0gdG8KKyAgICAgICAgRGlhZ25vc3Rp
Y0Jhc2UuY3BwIGF2b2lkcyB0aGlzIGNvbmZsaWN0LiBUaGUgc2FtZSBzaXR1YXRpb24gb2NjdXJy
ZWQgd2l0aAorICAgICAgICBEaXJlY3RpdmVIYW5kbGVyLmNwcC4gSSB3aWxsIHdvcmsgb24gY29u
dHJpYnV0aW5nIHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUgZm9yIGZ1dHVyZQorICAgICAgICB1
cGRhdGVzLgorCisgICAgICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBpbmNsdWRlL0dMRVMyL2dsMmV4dC5oOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmg6CisgICAgICAgICogc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9kZWJ1Zy5jcHA6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6b3V0
cHV0KToKKyAgICAgICAgKGdsOjp0cmFjZSk6CisgICAgICAgIChnbDo6cGVyZkFjdGl2ZSk6Cisg
ICAgICAgIChnbDo6U2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIp
OgorICAgICAgICAoZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlcjo6flNjb3BlZFBlcmZFdmVudEhl
bHBlcik6CisgICAgICAgICogc3JjL2NvbW1vbi92ZXJzaW9uLmg6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDoKKyAgICAgICAgKEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQ29tcGls
ZXIuY3BwOgorICAgICAgICAoaXNXZWJHTEJhc2VkU3BlYyk6CisgICAgICAgIChUQ29tcGlsZXI6
OmNvbXBpbGUpOgorICAgICAgICAoVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKToKKyAgICAg
ICAgKFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgIChUQ29t
cGlsZXI6OmVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAg
IChUQ29tcGlsZXI6OmVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcDogQWRkZWQuCisgICAg
ICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6OnRyYXZlcnNlKToKKyAgICAgICAgKHNo
KToKKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2gpOgor
ICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEFnZ3JlZ2F0ZSk6Cisg
ICAgICAgIChzaDo6Y29udGFpbnNMb29wRGlzY29udGludWl0eSk6CisgICAgICAgIChzaDo6RGV0
ZWN0R3JhZGllbnRPcGVyYXRpb246OnRyYXZlcnNlKToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFk
aWVudE9wZXJhdGlvbjo6dmlzaXRVbmFyeSk6CisgICAgICAgIChzaDo6RGV0ZWN0R3JhZGllbnRP
cGVyYXRpb246OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0dyYWRpZW50
T3BlcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoKToKKyAgICAgICAgKERldGVjdExvb3BEaXNjb250aW51aXR5
KToKKyAgICAgICAgKERldGVjdEdyYWRpZW50T3BlcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvRGlhZ25vc3RpY3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKFREaWFnbm9zdGljczo6VERp
YWdub3N0aWNzKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6flREaWFnbm9zdGljcyk6CisgICAg
ICAgIChURGlhZ25vc3RpY3M6OndyaXRlSW5mbyk6CisgICAgICAgIChURGlhZ25vc3RpY3M6Ondy
aXRlRGVidWcpOgorICAgICAgICAoVERpYWdub3N0aWNzOjpwcmludCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmg6IEFkZGVkLgorICAgICAgICAoVERpYWdub3N0aWNzKToK
KyAgICAgICAgKFREaWFnbm9zdGljczo6aW5mb1NpbmspOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRCZWhhdmlvcik6Cisg
ICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAo
VERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0
aXZlSGFuZGxlcjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6Omhh
bmRsZVByYWdtYSk6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9u
KToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVWZXJzaW9uKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFREaXJl
Y3RpdmVIYW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpwcmFnbWEpOgorICAg
ICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OmV4dGVuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaDoKKyAgICAgICAgKGdldEJlaGF2aW9yU3Ry
aW5nKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHA6CisgICAgICAgIChC
dWlsdEluQ29uc3RhbnRzKToKKyAgICAgICAgKFRCdWlsdEluczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChJZGVudGlmeUJ1aWx0SW5zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dEluZGV4KToKKyAgICAgICAgKEZyZWVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChJbml0
aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKEZyZWVQYXJzZUNvbnRleHQpOgor
ICAgICAgICAoR2V0R2xvYmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOgorICAgICAgICAoVFRocmVhZFBhcnNlQ29udGV4dFJl
Yyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHA6CisgICAgICAgIChU
SW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9NYXBM
b25nVmFyaWFibGVOYW1lcy5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwOgorICAgICAgICAoc2g6OnN0cik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6T3V0cHV0
SExTTCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6fk91dHB1dEhMU0wpOgorICAgICAgICAo
c2g6Ok91dHB1dEhMU0w6Om91dHB1dCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVy
KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6
T3V0cHV0SExTTDo6dmlzaXRVbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRB
Z2dyZWdhdGUpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKToKKyAg
ICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdExvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnRyYXZlcnNlU3RhdGVtZW50cyk6CisgICAgICAgIChzaCk6CisgICAgICAgIChzaDo6T3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6
dHlwZVN0cmluZyk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IpOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRITFNMLmg6CisgICAgICAgIChzaCk6CisgICAgICAgIChPdXRwdXRITFNM
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
cGFyc2VNYXRyaXhGaWVsZHMpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXJyb3IpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6d2FybmluZyk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojp0
cmFjZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcik6CisgICAgICAgIChU
UGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Ymlu
YXJ5T3BFcnJvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNr
KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2spOgorICAgICAgICAo
VFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmludGVnZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpi
b29sRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVj
ayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2spOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXJy
YXlFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZSk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OnBhcmFtRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleHRlbnNp
b25FcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9u
KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZSk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUpOgorICAgICAgICAo
VFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmV4
ZWN1dGVJbml0aWFsaXplcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWls
dEluKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdFN0cnVjdCk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6YWRkQ29uc3RNYXRyaXhOb2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0QXJyYXlOb2RlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24pOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2spOgorICAgICAgICAoUGFQ
YXJzZVN0cmluZ3MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9QYXJzZUhlbHBlci5oOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6VFBhcnNlQ29udGV4dCk6CisgICAgICAgIChUUGFyc2VDb250
ZXh0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmluZm9TaW5rKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OmV4dGVuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBy
YWdtYSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHA6CisgICAgICAgIChU
QWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUHJh
Z21hLmg6IEFkZGVkLgorICAgICAgICAoVFByYWdtYSk6CisgICAgICAgIChUUHJhZ21hOjpUUHJh
Z21hKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaDogQWRkZWQuCisg
ICAgICAgIChSZW5hbWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5jdGlvbjo6UmVuYW1l
RnVuY3Rpb24pOgorICAgICAgICAoUmVuYW1lRnVuY3Rpb246OnZpc2l0QWdncmVnYXRlKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU2hIYW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoZ2V0VmFyaWFi
bGVJbmZvKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAg
ICAoVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFu
c2xhdG9ySExTTC5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdCk6Cisg
ICAgICAgIChzaCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZSk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeSk6CisgICAgICAg
IChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChzaDo6
VW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdExvb3ApOgorICAgICAgICAoc2g6OlVuZm9sZFNob3J0
Q2lyY3VpdDo6Z2V0TmV4dFRlbXBvcmFyeUluZGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0Lmg6IEFkZGVkLgorICAgICAgICAoc2gpOgorICAgICAgICAoVW5m
b2xkU2hvcnRDaXJjdWl0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlYnVnLmNwcDoKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGg6OlREZXBlbmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6flREZXBl
bmRlbmN5R3JhcGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGg6OmdldE9yQ3JlYXRlU3ltYm9sKToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBo
OjpjcmVhdGVMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvZ2ljYWxP
cCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldE9wU3RyaW5nKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
VEdyYXBoTm9kZSk6CisgICAgICAgIChUR3JhcGhOb2RlOjpUR3JhcGhOb2RlKToKKyAgICAgICAg
KFRHcmFwaE5vZGU6On5UR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGUpOgor
ICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZTo6VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChU
R3JhcGhQYXJlbnROb2RlOjp+VEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjphZGREZXBlbmRlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50KToKKyAg
ICAgICAgKFRHcmFwaEFyZ3VtZW50OjpUR3JhcGhBcmd1bWVudCk6CisgICAgICAgIChUR3JhcGhB
cmd1bWVudDo6flRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50OjpnZXRJ
bnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEFyZ3VtZW50
TnVtYmVyKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhG
dW5jdGlvbkNhbGw6OlRHcmFwaEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlv
bkNhbGw6On5UR3JhcGhGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25DYWxs
OjpnZXRJbnRlcm1GdW5jdGlvbkNhbGwpOgorICAgICAgICAoVEdyYXBoU3ltYm9sKToKKyAgICAg
ICAgKFRHcmFwaFN5bWJvbDo6VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFN5bWJvbDo6
flRHcmFwaFN5bWJvbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OmdldEludGVybVN5bWJvbCk6
CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjpU
R3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp+VEdyYXBoU2VsZWN0
aW9uKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbjo6Z2V0SW50ZXJtU2VsZWN0aW9uKToKKyAg
ICAgICAgKFRHcmFwaExvb3ApOgorICAgICAgICAoVEdyYXBoTG9vcDo6VEdyYXBoTG9vcCk6Cisg
ICAgICAgIChUR3JhcGhMb29wOjp+VEdyYXBoTG9vcCk6CisgICAgICAgIChUR3JhcGhMb29wOjpn
ZXRJbnRlcm1Mb29wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3Jh
cGhMb2dpY2FsT3A6OlRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6
On5UR3JhcGhMb2dpY2FsT3ApOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjpnZXRJbnRlcm1M
b2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpiZWdpbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjplbmQpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6YmVnaW5TYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoOjplbmRTYW1wbGVyU3ltYm9scyk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoOjpiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjplbmRVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMpOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
OjpURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlz
aXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OnZpc2l0TG9naWNh
bE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmdldERlcHRoKToKKyAg
ICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmluY3JlbWVudERlcHRoKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmRlY3JlbWVudERlcHRoKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmNsZWFyVmlzaXRlZCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjptYXJrVmlzaXRlZCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyOjppc1Zpc2l0ZWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRl
cjo6dmlzaXRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEJpbmFyeSk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25t
ZW50KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdExvZ2ljYWxPcCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTZWxlY3Rpb24pOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg6
IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAgICAgICAoVE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6VE5vZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
VE5vZGVTZXRTdGFjazo6flROb2RlU2V0U3RhY2spOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0U3RhY2s6OmdldFRvcFNldCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cHVzaFNldCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6cG9wU2V0KToKKyAgICAgICAgKFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpwb3BTZXRJbnRvTmV4dCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6aW5zZXJ0SW50b1Rv
cFNldCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6
Y2xlYXIpOgorICAgICAgICAoVE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6OlROb2RlU2V0TWFpbnRhaW5lcik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRNYWludGFpbmVyOjp+
VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFp
bmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjp+
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVExlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0
U3ltYm9sTWFpbnRhaW5lcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcjo6flRMZWZ0
bW9zdFN5bWJvbE1haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OlREZXBlbmRlbmN5R3JhcGhCdWlsZGVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpidWlsZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaE91dHB1dC5jcHA6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
b3V0cHV0SW5kZW50YXRpb24pOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlz
aXRBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEZ1bmN0
aW9uQ2FsbCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFN5bWJvbCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdFNlbGVjdGlvbik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oOiBBZGRlZC4KKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhPdXRwdXQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
VERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2Rl
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZSk6CisgICAg
ICAgIChUR3JhcGhBcmd1bWVudDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoRnVuY3Rpb25D
YWxsOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAg
ICAgKFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9vcDo6dHJh
dmVyc2UpOgorICAgICAgICAoVEdyYXBoTG9naWNhbE9wOjp0cmF2ZXJzZSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL2dsc2xhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5s
OgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLnk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL2dsc2xhbmdfbGV4LmNwcDoKKyAgICAgICAgKHl5X2J1ZmZlcl9zdGF0ZSk6CisgICAgICAg
ICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9nZXRfcHJldmlvdXNfc3RhdGUpOgorICAgICAgICAo
eXlfdHJ5X05VTF90cmFucyk6CisgICAgICAgIChpbnB1dCk6CisgICAgICAgICh5eWVuc3VyZV9i
dWZmZXJfc3RhY2spOgorICAgICAgICAoeXlfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eWdldF9s
ZW5nKToKKyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAg
ICAgKGdsc2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9p
bnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdh
dGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6flRJbnRlcm1BZ2dyZWdhdGUpOgorICAg
ICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJt
QWdncmVnYXRlKToKKyAgICAgICAgKFRJbnRlcm1UcmF2ZXJzZXI6On5USW50ZXJtVHJhdmVyc2Vy
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmg6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmM6CisgICAgICAgIChGaW5kSGFzaExvYyk6CisgICAg
ICAgIChQcmludEF0b21UYWJsZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYzoKKyAgICAgICAgKENQUHByYWdtYSk6CisgICAgICAgIChyZWFkQ1BQbGluZSk6Cisg
ICAgICAgIChQcmVkZWZpbmVJbnRNYWNybyk6CisgICAgICAgIChNYWNyb0V4cGFuZCk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3OiBBZGRlZCBwcm9wZXJ0aWVzIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFs
bG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMs
IGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRh
YnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93
LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFs
bG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMsIGFsbG93LXRhYnMs
IGFsbG93LXRhYnMsIGFsbG93LXRhYnMgYW5kIGFsbG93LXRhYnMuCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmg6IEFkZGVkLgor
ICAgICAgICAocHApOgorICAgICAgICAoRGlhZ25vc3RpY3MpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAocHApOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MpOgorICAgICAg
ICAocHA6OkRpYWdub3N0aWNzOjpyZXBvcnQpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjpz
ZXZlcml0eSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZUhh
bmRsZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXJCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAo
Z2V0RGlyZWN0aXZlKToKKyAgICAgICAgKGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUpOgorICAgICAg
ICAoaXNFT0QpOgorICAgICAgICAoc2tpcFVudGlsRU9EKToKKyAgICAgICAgKGlzTWFjcm9OYW1l
UmVzZXJ2ZWQpOgorICAgICAgICAoaXNNYWNyb1ByZWRlZmluZWQpOgorICAgICAgICAocHApOgor
ICAgICAgICAoRGVmaW5lZFBhcnNlcik6CisgICAgICAgIChwcDo6RGVmaW5lZFBhcnNlcjo6RGVm
aW5lZFBhcnNlcik6CisgICAgICAgIChwcDo6RGVmaW5lZFBhcnNlcjo6bGV4KToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcik6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpsZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VE
aXJlY3RpdmUpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUpOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZik6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlSWZkZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYp
OgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVuZGlmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJy
b3IpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEpOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24pOgorICAgICAgICAocHA6OkRp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJz
ZXI6OnBhcnNlTGluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpza2lwcGluZyk6
CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsSWYpOgorICAg
ICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYpOgorICAgICAgICAo
cHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oOiBBZGRlZC4KKyAg
ICAgICAgKHBwKToKKyAgICAgICAgKERpcmVjdGl2ZVBhcnNlcik6CisgICAgICAgIChDb25kaXRp
b25hbEJsb2NrKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OkNvbmRpdGlvbmFsQmxv
Y2s6OkNvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHl5c3ludGF4X2Vy
cm9yKToKKyAgICAgICAgKHl5bGV4KToKKyAgICAgICAgKHl5ZXJyb3IpOgorICAgICAgICAocHAp
OgorICAgICAgICAocHA6OkV4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25QYXJzZXIpOgorICAg
ICAgICAocHA6OkV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAo
cHApOgorICAgICAgICAoRXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55OiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHA6IEFkZGVkIHByb3BlcnR5IGFs
bG93LXRhYnMuCisgICAgICAgIChwcDo6SW5wdXQ6OklucHV0KToKKyAgICAgICAgKHBwOjpJbnB1
dDo6cmVhZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aDogQWRkZWQgcHJvcGVydHkgYWxsb3ctdGFicy4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKElu
cHV0KToKKyAgICAgICAgKHBwOjpJbnB1dDo6Y291bnQpOgorICAgICAgICAocHA6OklucHV0Ojpz
dHJpbmcpOgorICAgICAgICAocHA6OklucHV0OjpsZW5ndGgpOgorICAgICAgICAoTG9jYXRpb24p
OgorICAgICAgICAocHA6OklucHV0OjpMb2NhdGlvbjo6TG9jYXRpb24pOgorICAgICAgICAocHA6
OklucHV0OjpyZWFkTG9jKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6OkxleGVyOjp+
TGV4ZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmg6
IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoTGV4ZXIpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcDogQWRkZWQgcHJvcGVydHkgYWxsb3ct
dGFicy4KKyAgICAgICAgKHBwOjpNYWNybzo6ZXF1YWxzKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJzLgor
ICAgICAgICAocHApOgorICAgICAgICAocHA6Ok1hY3JvOjpNYWNybyk6CisgICAgICAgIChNYWNy
byk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5jcHA6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5MZXhlcik6CisgICAg
ICAgIChwcDo6VG9rZW5MZXhlcjo6VG9rZW5MZXhlcik6CisgICAgICAgIChwcDo6VG9rZW5MZXhl
cjo6bGV4KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKToKKyAg
ICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjp+TWFjcm9FeHBhbmRlcik6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6bGV4KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpnZXRUb2tl
bik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbik6CisgICAgICAgIChw
cDo6TWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4pOgorICAgICAgICAocHA6Ok1h
Y3JvRXhwYW5kZXI6OnB1c2hNYWNybyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cG9w
TWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKToKKyAgICAg
ICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKToKKyAgICAgICAgKHBwOjpN
YWNyb0V4cGFuZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6
CisgICAgICAgIChNYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKE1hY3JvQ29udGV4dCk6CisgICAg
ICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0OjpNYWNyb0NvbnRleHQpOgorICAg
ICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6ZW1wdHkpOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6Z2V0KToKKyAgICAgICAgKHBwOjpNYWNy
b0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6OnVuZ2V0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10
YWJzLgorICAgICAgICAoUHJlcHJvY2Vzc29ySW1wbCk6CisgICAgICAgIChwcDo6UHJlcHJvY2Vz
c29ySW1wbDo6UHJlcHJvY2Vzc29ySW1wbCk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6
UHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IpOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6
flByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjppbml0KToKKyAgICAg
ICAgKHBwOjpQcmVwcm9jZXNzb3I6OnByZWRlZmluZU1hY3JvKToKKyAgICAgICAgKHBwOjpQcmVw
cm9jZXNzb3I6OmxleCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmg6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChwcCk6
CisgICAgICAgIChQcmVwcm9jZXNzb3IpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAg
ICAocHA6OlNvdXJjZUxvY2F0aW9uOjpTb3VyY2VMb2NhdGlvbik6CisgICAgICAgIChTb3VyY2VM
b2NhdGlvbik6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRpb246OmVxdWFscyk6CisgICAgICAg
IChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcDo6b3BlcmF0b3IhPSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwOiBBZGRlZCBwcm9wZXJ0eSBh
bGxvdy10YWJzLgorICAgICAgICAocHA6OlRva2VuOjpyZXNldCk6CisgICAgICAgIChwcDo6VG9r
ZW46OmVxdWFscyk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEF0U3RhcnRPZkxpbmUpOgorICAg
ICAgICAocHA6OlRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHApOgorICAg
ICAgICAocHA6OlRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZCk6CisgICAgICAgIChwcDo6b3Bl
cmF0b3I8PCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4u
aDogQWRkZWQgcHJvcGVydHkgYWxsb3ctdGFicy4KKyAgICAgICAgKHBwOjpUb2tlbjo6VG9rZW4p
OgorICAgICAgICAoVG9rZW4pOgorICAgICAgICAocHA6OlRva2VuOjphdFN0YXJ0T2ZMaW5lKToK
KyAgICAgICAgKHBwOjpUb2tlbjo6aGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBwOjpUb2tl
bjo6ZXhwYW5zaW9uRGlzYWJsZWQpOgorICAgICAgICAocHA6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAocHApOgorICAgICAgICAocHA6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlfYnVm
ZmVyX3N0YXRlKToKKyAgICAgICAgKHl5X3RyYW5zX2luZm8pOgorICAgICAgICAoeXlndXRzX3Qp
OgorICAgICAgICAoeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxf
dHJhbnMpOgorICAgICAgICAoaW5wdXQpOgorICAgICAgICAocHByZXN0YXJ0KToKKyAgICAgICAg
KHBwX3N3aXRjaF90b19idWZmZXIpOgorICAgICAgICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgor
ICAgICAgICAocHBfY3JlYXRlX2J1ZmZlcik6CisgICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToK
KyAgICAgICAgKHBwX2luaXRfYnVmZmVyKToKKyAgICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6Cisg
ICAgICAgIChwcHB1c2hfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0
ZSk6CisgICAgICAgIChwcGVuc3VyZV9idWZmZXJfc3RhY2spOgorICAgICAgICAocHBfc2Nhbl9i
dWZmZXIpOgorICAgICAgICAocHBfc2Nhbl9zdHJpbmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRl
cyk6CisgICAgICAgICh5eV9mYXRhbF9lcnJvcik6CisgICAgICAgIChwcGdldF9leHRyYSk6Cisg
ICAgICAgIChwcGdldF9saW5lbm8pOgorICAgICAgICAocHBnZXRfY29sdW1uKToKKyAgICAgICAg
KHBwZ2V0X2luKToKKyAgICAgICAgKHBwZ2V0X291dCk6CisgICAgICAgIChwcGdldF9sZW5nKToK
KyAgICAgICAgKHBwZ2V0X3RleHQpOgorICAgICAgICAocHBzZXRfZXh0cmEpOgorICAgICAgICAo
cHBzZXRfbGluZW5vKToKKyAgICAgICAgKHBwc2V0X2NvbHVtbik6CisgICAgICAgIChwcHNldF9p
bik6CisgICAgICAgIChwcHNldF9vdXQpOgorICAgICAgICAocHBnZXRfZGVidWcpOgorICAgICAg
ICAocHBzZXRfZGVidWcpOgorICAgICAgICAocHBnZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9s
dmFsKToKKyAgICAgICAgKHBwZ2V0X2xsb2MpOgorICAgICAgICAocHBzZXRfbGxvYyk6CisgICAg
ICAgIChwcGxleF9pbml0KToKKyAgICAgICAgKHBwbGV4X2luaXRfZXh0cmEpOgorICAgICAgICAo
eXlfaW5pdF9nbG9iYWxzKToKKyAgICAgICAgKHBwbGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlf
ZmxleF9zdHJuY3B5KToKKyAgICAgICAgKHl5X2ZsZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxs
b2MpOgorICAgICAgICAocHByZWFsbG9jKToKKyAgICAgICAgKHBwZnJlZSk6CisgICAgICAgIChw
cCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpUb2tlbml6ZXIpOgorICAgICAgICAocHA6OlRv
a2VuaXplcjo6flRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0KToKKyAg
ICAgICAgKHBwOjpUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIpOgorICAgICAgICAocHA6OlRva2Vu
aXplcjo6c2V0TGluZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpsZXgpOgorICAg
ICAgICAocHA6OlRva2VuaXplcjo6aW5pdFNjYW5uZXIpOgorICAgICAgICAocHA6OlRva2VuaXpl
cjo6ZGVzdHJveVNjYW5uZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFRva2VuaXpl
cik6CisgICAgICAgIChDb250ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIubDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJz
LgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmw6IFJlbW92ZWQu
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueTogUmVtb3ZlZC4K
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFi
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dXRpbHMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
cHJlcHJvY2Vzc29yLnZjcHJvajogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoSW5pdFNjYW5uZXJJbnB1dCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlYWRUb2tlbik6CisgICAgICAg
IChEdW1wVG9rZW5TdHJlYW0pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWluZzogQWRkZWQuCisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDog
QWRkZWQuCisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmc6OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6dmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKToKKyAgICAgICAg
KFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IpOgorICAgICAgICAoUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNTYW1wbGluZ09wKToKKyAgICAgICAgKFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1lbnQpOgorICAgICAgICAoUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb29wKToKKyAgICAgICAgKFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAg
IChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHA6IEFkZGVkLgorICAgICAgICAoUmVzdHJp
Y3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg6IEFkZGVkLgorICAgICAgICAo
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmc6OlJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nKToKKyAgICAgICAgKFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nOjpudW1FcnJvcnMpOgorICAgICAgICAqIHNyYy9saWJFR0wv
RGlzcGxheS5jcHA6CisgICAgICAgIChlZ2wpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0VGV4dHVyZVBv
b2wpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOgorICAgICAgICAoRGlzcGxheSk6
CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNlLmNwcDoKKyAgICAgICAgKGVnbDo6U3VyZmFj
ZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVhc2UpOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3
YXBSZWN0KToKKyAgICAgICAgKGVnbCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnN3YXApOgor
ICAgICAgICAoZWdsOjpTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKFN1cmZhY2UpOgorICAgICAgICAqIHNyYy9saWJFR0wv
bGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJr
RHhVbmlmb3Jtc0RpcnR5KToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTaGFk
ZXJzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVRleHR1cmVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjbGVhcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVy
ZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6VmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9Db250ZXh0Lmg6CisgICAgICAgIChDb250ZXh0KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVy
KToKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9y
YnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6CisgICAgICAgIChGcmFtZWJ1ZmZlcik6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAgICAgKGdsKToKKyAg
ICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAg
ICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAo
Z2w6OkluZm9Mb2c6OkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6On5JbmZvTG9nKToK
KyAgICAgICAgKGdsOjpJbmZvTG9nOjpnZXRMZW5ndGgpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6
OmdldExvZyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKToKKyAgICAg
ICAgKGdsOjpJbmZvTG9nOjphcHBlbmQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OnJlc2V0KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+
UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KToKKyAgICAgICAgKGdsOjpBdHRyaWJ1dGVCaW5kaW5nczo6Ymlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpiaW5kQXR0cmlidXRl
TG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmspOgorICAgICAgICAoZ2w6OkF0
dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjp1bmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFByb2dyYW1CaW5hcnkpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OnNldFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OmdldEluZm9Mb2dMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEluZm9M
b2cpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlVW5p
Zm9ybUNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVu
Z3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp2YWxpZGF0ZSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6aXNWYWxpZGF0ZWQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5oOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoQXR0cmlidXRlQmluZGluZ3MpOgorICAgICAgICAoSW5m
b0xvZyk6CisgICAgICAgIChQcm9ncmFtKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dy
YW1CaW5hcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpzdHIpOgorICAgICAgICAoZ2wpOgor
ICAgICAgICAoZ2w6OlVuaWZvcm06OlVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06On5V
bmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3JtOjppc0FycmF5KToKKyAgICAgICAgKGdsOjpV
bmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6flByb2dy
YW1CaW5hcnkpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXRTYW1wbGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxl
clRleHR1cmVUeXBlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9j
YXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm00ZnYpOgorICAgICAgICAoZ2w6OnRyYW5zcG9zZU1hdHJpeCk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTJpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXRVbmlmb3JtaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9y
bXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMpOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNvbXBpbGVUb0JpbmFyeSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojps
aW5rVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmspOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRl
ZmluZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0p
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjphcHBseVVuaWZvcm1uZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5
VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYpOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
Ojppc1ZhbGlkYXRlZCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0
cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVD
b3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4
TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFt
QmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojpn
ZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0
RHhEZXB0aExvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeENvb3Jk
TG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9j
YXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaDogQWRkZWQu
CisgICAgICAgIChnbCk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKGdsOjpVbmlmb3Jt
OjpSZWdpc3RlckluZm86OlJlZ2lzdGVySW5mbyk6CisgICAgICAgIChSZWdpc3RlckluZm8pOgor
ICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6c2V0KToKKyAgICAgICAgKFVuaWZv
cm1Mb2NhdGlvbik6CisgICAgICAgIChQcm9ncmFtQmluYXJ5KToKKyAgICAgICAgKFNhbXBsZXIp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGds
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1
cmUyRCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVyYnVmZmVy
VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmFkZFByb3h5
UmVmKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eSk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6
OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgorICAgICAgICAoZ2wpOgorICAgICAgICAoUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAgICAgIChnbDo6U2hhZGVyOjpn
ZXRJbmZvTG9nKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFNvdXJjZUltcGwpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAgICAgIChTaGFkZXIpOgorICAgICAgICAo
VmVydGV4U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAg
ICAgICAoZ2w6OkNvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNUZXh0
dXJlRm9ybWF0UmVuZGVyYWJsZSk6CisgICAgICAgIChnbDo6R2V0VGV4dHVyZVVzYWdlKToKKyAg
ICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpJbWFnZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OnVwZGF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkRGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGEpOgorICAgICAgICAoZ2w6Oklt
YWdlOjpsb2FkQWxwaGFEYXRhU1NFMik6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUZs
b2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YSk6CisgICAgICAgIChnbDo6SW1h
Z2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVt
aW5hbmNlSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRSR0I1NjVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkZsb2F0
RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6bG9hZFJHQkFVQnl0ZURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQTQ0NDRE
YXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YSk6CisgICAgICAgIChn
bDo6SW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJH
QkFIYWxmRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEJHUkFEYXRhKToKKyAg
ICAgICAgKGdsOjpJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFn
ZTo6Y29weSk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0
SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnN1Yklt
YWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6Y29weUltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6
CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OmlzU2FtcGxlckNvbXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJl
c3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc0RlcHRoKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29udmVy
dFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpUZXh0dXJlU3Rv
cmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVp
Z2h0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNy
ZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuaDoKKyAgICAg
ICAgKEltYWdlKToKKyAgICAgICAgKFRleHR1cmVTdG9yYWdlKToKKyAgICAgICAgKFRleHR1cmUp
OgorICAgICAgICAoVGV4dHVyZVN0b3JhZ2UyRCk6CisgICAgICAgIChUZXh0dXJlMkQpOgorICAg
ICAgICAoVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKFRleHR1cmVDdWJlTWFwKToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKGNoZWNrVGV4dHVyZUZvcm1hdFR5
cGUpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKToKKyAgICAgICAgKHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oOgorICAgICAgICAo
Z2wpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGds
OjpJc0RlcHRoVGV4dHVyZSk6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBp
eGVsU2l6ZSk6CisgICAgICAgIChnbDo6RXh0cmFjdEZvcm1hdCk6CisgICAgICAgIChnbDo6RXh0
cmFjdFR5cGUpOgorICAgICAgICAoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZSk6CisgICAgICAgIChl
czJkeDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChkeDJlczo6R2V0U3Rl
bmNpbFNpemUpOgorICAgICAgICAoZHgyZXM6OkdldERlcHRoU2l6ZSk6CisgICAgICAgIChkeDJl
czo6SXNEZXB0aFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXMpOgorICAgICAgICAoZHgy
ZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnREZXB0
aFN0ZW5jaWxGb3JtYXQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6Cisg
ICAgICAgIChnbCk6CisgICAgICAgIChkeDJlcyk6CisKIDIwMTItMDctMTEgIE1hcmsgUm93ZSAg
PG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi85MTAyND4g
QnVpbGQgYWdhaW5zdCB0aGUgbGF0ZXN0IFNESyB3aGVuIHRhcmdldGluZyBvbGRlciBPUyBYIHZl
cnNpb25zLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw0OCBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsKIAkJQTBB
QUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJE
MSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEwMEYyRUJE
MSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmgg
Ki87IH07CisJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMDE1OUMy
MUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OworCQlBMjY1NjdCQzE1OUMyMUIx
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdC
MjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CisJCUEyNjU2
N0JFMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMzE1OUMyMUIxMDAzOTg1Mzkg
LyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9OworCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CisJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKKwkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKKwkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
KwkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKKwkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owor
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OworCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07CisJCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
KwkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07CisJCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owor
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OworCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKKwkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07CisJCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07CisJCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKKwkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07CisJCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07CisJCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKKwkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKKwkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07CisJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07CisJCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07CisJCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKKwkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKKwkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OworCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CisJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5oICovOyB9OworCQlBMjY1NjgzRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
OyB9OworCQlBMjY1NjgzRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1Njgz
MjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi87IH07CisJCUEy
NjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzMzE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9OworCQlBMjY1
Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNTE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07
CisJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICov
OyB9OworCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cCAqLzsgfTsKKwkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aCAqLzsgfTsKIAkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIw
MEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CiAJCUZCMzlEMjc1MTIwMEYz
NUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9
OwogCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKQEAgLTYzLDcgKzEwNSw2IEBACiAJCUZCMzlEMkE4
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFk
ZXJMYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRh
YmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCUZCMzlE
MkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OwotCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTAzLDYg
KzE0NCw1MiBAQAogCQlBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRFU1NMLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9y
RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9y
RVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEwQUFCRTQ3MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUcmFuc2xhdG9yRVNTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERl
dGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0
ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdC
MDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdCMTE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFu
ZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IzMTU5QzIxQjEw
MDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2ODMyMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODMzMTU5QzIz
RTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM4MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGli
QU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliQU5HTEUuYTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5
IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxODcxMjAwRjI2MjAwMDg4
RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTYyLDE1ICsyNDksMTEgQEAKIAkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUMxMTIwMEYyNjIwMDA4
OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xh
dG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IHRyYW5zbGF0b3Jf
Y29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0MxMjAw
RjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxlRW5jb2RpbmcgPSA0
OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJh
bnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRTEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9
IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFEMDEyMDBG
MjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMzEyMDBGMjYyMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMTEyMDBGMzVB
MDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyMjIxMjAw
RjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjksOCArMzEyLDYgQEAKIAkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0
b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNjkxMjAwRjM1
QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCiAKQEAgLTI1NSw2ICszMzYsNjIgQEAKIAkJCXBhdGggPSBDb25maWd1cmF0aW9uczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUEyNjU2N0M1MTU5QzIxQ0UwMDM5ODUz
OSAvKiBuZXcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovLAorCQkJCUEyNjU2N0M4
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjU2N0M5
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0NBMTU5QzIx
Q0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgKi8sCisJCQkJQTI2NTY3Q0Ix
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKKwkJCQlBMjY1NjdDQzE1
OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLywKKwkJCQlBMjY1NjdDRDE1
OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3Q0UxNTlD
MjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovLAorCQkJCUEyNjU2N0NGMTU5
QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCisJCQkJQTI2NTY3RDIxNTlD
MjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCAqLywKKwkJCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1
MzkgLyogSW5wdXQuaCAqLywKKwkJCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIu
Y3BwICovLAorCQkJCUEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5oICovLAorCQkJ
CUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgKi8sCisJCQkJQTI2NTY3RDcx
NTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8sCisJCQkJQTI2NTY3RDgxNTlDMjFDRTAwMzk4
NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovLAorCQkJCUEyNjU2N0Q5MTU5QzIxQ0UwMDM5ODUz
OSAvKiBNYWNyb0V4cGFuZGVyLmggKi8sCisJCQkJQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5jcHAgKi8sCisJCQkJQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovLAorCQkJCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovLAorCQkJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAg
Ki8sCisJCQkJQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi8sCisJCQkJQTI2
NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgKi8sCisJCQkJQTI2NTY3RTgx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBuZXc7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgyQzE1OUMyM0UxMDAz
OTg1MzkgLyogZGVwZ3JhcGggKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3Bw
ICovLAorCQkJCUEyNjU2ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAq
LywKKwkJCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRl
ci5jcHAgKi8sCisJCQkJQTI2NTY4MzAxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuaCAqLywKKwkJCQlBMjY1NjgzMTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCAqLywKKwkJCQlBMjY1NjgzMjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8sCisJCQkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gZGVwZ3Jh
cGg7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMjY1NjgzNDE1OUMyM0Ux
MDAzOTg1MzkgLyogdGltaW5nICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlBMjY1NjgzNTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzYxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLywKKwkJCQlBMjY1NjgzNzE1OUMyM0UxMDAzOTg1
MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyNjU2ODM4MTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB0aW1pbmc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlG
QjM5RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjY4LDggKzQwNSw4IEBACiAJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAv
KiBTb3VyY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJCUZCMzlEMTg1MTIw
MEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKKwkJCQlGQjM5RDJCRDEyMDBGM0U2MDAwODhF
NjkgLyogR0xTTEFORyAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTI5Miw2ICs0MjksOCBAQAogCQkJCUZCMzlEMThBMTIwMEYyNjIw
MDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQxOEIxMjAwRjI2MjAwMDg4
RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuaCAqLywKKwkJCQlBMjY1NjdBRTE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgKi8sCisJCQkJQTI2NTY3QUYxNTlDMjFCMTAwMzk4NTM5IC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuaCAqLywKIAkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1Npbmsu
Y3BwICovLAogCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAog
CQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKQEAgLTMy
NywxNSArNDY2LDEzIEBACiAJCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxl
LmggKi8sCiAJCQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKIAkJCQlGQjM5RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlGQjM5RDFDQjEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNwcm9qICov
LAotCQkJCUZCMzlEMUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9q
ICovLAogCQkJCUZCMzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCiAJCQkJRkIzOUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8s
CiAJCQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywK
IAkJCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKIAkJ
CQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5RDFEMjEy
MDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFEMzEyMDBG
MjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJQTI2NTY3QjcxNTlDMjFCMTAw
Mzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8sCisJCQkJQTI2NTY3QjgxNTlDMjFC
MTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJKTsKIAkJCWluY2x1ZGVJ
bkluZGV4ID0gMDsKIAkJCW5hbWUgPSBjb21waWxlcjsKQEAgLTM3MCwxNyArNTA3LDYgQEAKIAkJ
RkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVCRDEgLyog
T3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAvKiBP
dXRwdXRHTFNMQmFzZS5oICovLAotCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFu
c2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5z
bGF0b3JFU1NMLmggKi8sCi0JCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVT
U0wuY3BwICovLAotCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmgg
Ki8sCi0JCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCAqLywKLQkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCAqLywKLQkJCQlBMEFBQkUyQTEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9s
bC5jcHAgKi8sCi0JCQkJQTBBQUJFMkIxM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwu
aCAqLywKLQkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAog
CQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJCQk0OTk1
MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovLAog
CQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
ICovLApAQCAtMzkwLDEzICs1MTYsMjAgQEAKIAkJCQlGQjM5RDIyNTEyMDBGMzVBMDAwODhFNjkg
LyogQ29uc3RhbnRVbmlvbi5oICovLAogCQkJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBk
ZWJ1Zy5jcHAgKi8sCiAJCQkJRkIzOUQyMjcxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmggKi8s
CisJCQkJQTI2NTY4MkMxNTlDMjNFMTAwMzk4NTM5IC8qIGRlcGdyYXBoICovLAogCQkJCTQ5OTUx
QzA3MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovLAogCQkJCTQ5OTUx
QzA4MTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLywKKwkJCQlBMjY1NjdC
MDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovLAorCQkJCUEyNjU2N0IxMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEyNjU2N0IyMTU5QzIxQjEw
MDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlBMjY1NjdCMzE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAogCQkJCTkwRDlCMEZBMTJFMTFEQ0Iw
MDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAorCQkJCUEwQUFCRTJBMTNBRkU4MTAw
MEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKKwkJCQlBMEFBQkUyQjEzQUZFODEwMDBG
MkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1
NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xh
bmdfbGV4LmNwcCAqLywKIAkJCQk5MEQ5QjBGQzEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190
YWIuY3BwICovLAogCQkJCTkwRDlCMEZEMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5o
ICovLAotCQkJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nLmggKi8sCiAJCQkJ
RkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGQjM5RDIy
QjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlGQjM5RDIyQzEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC00MDQsMzkgKzUzNyw1MCBAQAogCQkJ
CUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJCQlG
QjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCUZCMzlE
MjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEyNjU2
N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKIAkJ
CQlGQjM5RDIzMTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICov
LAogCQkJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAog
CQkJCUZCMzlEMjMzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQlG
QjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKIAkJCQlGQjM5RDIz
NTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCUZCMzlEMjM2
MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUEwQUFCRTJF
MTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCisJCQkJQTBB
QUJFMkYxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCiAJCQkJ
RkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKIAkJCQlGQjM5RDIzODEyMDBG
MzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCiAJCQkJOTBEOUIwRkYxMkUxMURDQjAwMkQ0
MjU1IC8qIG9zc291cmNlX25zcHIuY3BwICovLAogCQkJCUZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2
OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5
IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCisJCQkJQTBBQUJFNDIxM0FGRTk0NTAwRjJFQkQxIC8q
IE91dHB1dEVTU0wuY3BwICovLAorCQkJCUEwQUFCRTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRw
dXRFU1NMLmggKi8sCiAJCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wu
Y3BwICovLAogCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8s
CisJCQkJQTBBQUJFMzIxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLywK
KwkJCQlBMEFBQkUzMzEzQUZFODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJ
CQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJCQkJRkIz
OUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlGQjM5RDI0
MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlGQjM5RDI0MjEyMDBG
MzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQlGQjM5RDI0MzEyMDBGMzVBMDAw
ODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8q
IFByYWdtYS5oICovLAorCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNz
b3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNw
cCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAq
LywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBMjY1
NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQk5MEQ5QjEw
MDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQk5MEQ5QjEwMTEy
RTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4
OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJv
bFRhYmxlLmggKi8sCisJCQkJQTI2NTY4MzQxNTlDMjNFMTAwMzk4NTM5IC8qIHRpbWluZyAqLywK
KwkJCQlBMEFBQkU0NjEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAor
CQkJCUEwQUFCRTQ3MTNBRkU5NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJ
CUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCiAJCQkJ
RkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCiAJCQkJRkIz
OUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCi0JCQkJRkIzOUQyNkQxMjAwRjM1
QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJRkIzOUQyNkUxMjAwRjM1QTAw
MDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAogCQkJCTkwRDlCMTBCMTJFMTFERDYwMDJENDI1
NSAvKiB1dGlsLmNwcCAqLywKIAkJCQk5MEQ5QjEwQzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5o
ICovLAogCQkJCTkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCAqLywKQEAgLTQ1Myw2ICs1OTcsNyBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkg
LyogcHJlcHJvY2Vzc29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAogCQkJCUZCMzlEMjQ1
MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCiAJCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4
RTY5IC8qIGF0b20uaCAqLywKIAkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGls
ZS5oICovLApAQCAtNTA4LDYgKzY1MywyOCBAQAogCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk1MUMwQTE0QjdBQUQ4
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5OTUxQzBDMTRCN0FBRDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFn
bWEuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0MxMTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5h
bWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5
IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdFRjE1OUMyMUNFMDAz
OTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RjEx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMjY1NjdGQTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCUEyNjU2N0ZDMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjgwNDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA4MTU5QzIxQ0UwMDM5ODUzOSAvKiBU
b2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4MkIxNTlDMjM4ODAwMzk4NTM5IC8q
IHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQTE1OUMyM0UxMDAzOTg1Mzkg
LyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzQzE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODQzMTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01
ODgsNyArNzU1LDYgQEAKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIxMTIwMEYz
NUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIx
MDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkw
RDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC02MDQsNiArNzcwLDI2IEBACiAJCQkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQx
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzA5MTRCN0FB
RDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OTk1MUMwQjE0QjdBQUQ4MDA2MEU5NkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0
aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1
MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2N0VFMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0
aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUz
OSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y1MTU5
QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGNzE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3Rjkx
NTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0ZC
MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyNjU2ODAzMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyNjU2ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgzRDE1OUMy
M0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1Njg0MjE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyZXh0LmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw2ICsyMzgsMTEgQEAg
dHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBM
RSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDg3LDYgKzE0OTIs
MTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTgogI2RlZmluZSBH
TF9WSVZfc2hhZGVyX2JpbmFyeSAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5h
cnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQU5HTEVf
cHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAgZXh0ZXJuICJDIiB7CiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJh
bnNsYXRpb24gQVBJLgogLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hh
bmdlcy4KLSNkZWZpbmUgU0hfVkVSU0lPTiAxMDUKKyNkZWZpbmUgU0hfVkVSU0lPTiAxMDcKIAog
Ly8KIC8vIFRoZSBuYW1lcyBvZiB0aGUgZm9sbG93aW5nIGVudW1zIGhhdmUgYmVlbiBkZXJpdmVk
IGJ5IHJlcGxhY2luZyBHTCBwcmVmaXgKQEAgLTQ5LDcgKzQ5LDI5IEBAIHR5cGVkZWYgZW51bSB7
CiAKIHR5cGVkZWYgZW51bSB7CiAgIFNIX0dMRVMyX1NQRUMgPSAweDhCNDAsCi0gIFNIX1dFQkdM
X1NQRUMgPSAweDhCNDEKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MSwKKworICAvLyBUaGUgQ1NT
IFNoYWRlcnMgc3BlYyBpcyBhIHN1YnNldCBvZiB0aGUgV2ViR0wgc3BlYy4KKyAgLy8KKyAgLy8g
SW4gYm90aCBDU1MgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLCBBTkdMRToKKyAgLy8gKDEp
IFJlc2VydmVzIHRoZSAiY3NzXyIgcHJlZml4LgorICAvLyAoMikgUmVuYW1lcyB0aGUgbWFpbiBm
dW5jdGlvbiB0byBjc3NfbWFpbi4KKyAgLy8gKDMpIERpc2FibGVzIHRoZSBnbF9NYXhEcmF3QnVm
ZmVycyBidWlsdC1pbi4KKyAgLy8KKyAgLy8gSW4gQ1NTIGZyYWdtZW50IHNoYWRlcnMsIEFOR0xF
OgorICAvLyAoMSkgRGlzYWJsZXMgdGhlIGdsX0ZyYWdDb2xvciBidWlsdC1pbi4KKyAgLy8gKDIp
IERpc2FibGVzIHRoZSBnbF9GcmFnRGF0YSBidWlsdC1pbi4KKyAgLy8gKDMpIEVuYWJsZXMgdGhl
IGNzc19NaXhDb2xvciBidWlsdC1pbi4KKyAgLy8gKDQpIEVuYWJsZXMgdGhlIGNzc19Db2xvck1h
dHJpeCBidWlsdC1pbi4KKyAgLy8KKyAgLy8gQWZ0ZXIgcGFzc2luZyBhIENTUyBzaGFkZXIgdGhy
b3VnaCBBTkdMRSwgdGhlIGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gYXBwZW5kCisgIC8vIGEgbmV3
IG1haW4gZnVuY3Rpb24gdG8gaXQuCisgIC8vIFRoaXMgbmV3IG1haW4gZnVuY3Rpb24gd2lsbCBj
YWxsIHRoZSBjc3NfbWFpbiBmdW5jdGlvbi4KKyAgLy8gSXQgbWF5IGFsc28gcGVyZm9ybSBhZGRp
dGlvbmFsIG9wZXJhdGlvbnMgbGlrZSB2YXJ5aW5nIGFzc2lnbm1lbnQsIHRleHR1cmUKKyAgLy8g
YWNjZXNzLCBhbmQgZ2xfRnJhZ0NvbG9yIGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gaW1wbGVtZW50
IHRoZSBDU1MgU2hhZGVycworICAvLyBibGVuZCBtb2Rlcy4KKyAgLy8KKyAgU0hfQ1NTX1NIQURF
UlNfU1BFQyA9IDB4OEI0MgogfSBTaFNoYWRlclNwZWM7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0x
MDQsNyArMTI2LDIzIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRI
X0lOVEVHRVJfSU5ERVggPSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBh
IHdvcmthcm91bmQgZm9yIGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgotICBTSF9FTVVMQVRF
X0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4MDEwMAorICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNU
SU9OUyA9IDB4MDEwMCwKKworICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVu
Zm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgCisgIC8vIHRpbWluZyBhdHRh
Y2tzLgorICAvLyBJdCBnZW5lcmF0ZXMgY29tcGlsYXRpb24gZXJyb3JzIGZvciBzaGFkZXJzIHRo
YXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZQorICAvLyB0ZXh0dXJlIGluZm9ybWF0aW9uIHZpYSB0
aGUgdGltaW5nIGNoYW5uZWwuCisgIC8vIFRvIHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IGNvbXBp
bGUgdGhlIHNoYWRlciB1bmRlciB0aGUgV2ViR0wgc3BlYworICAvLyAodXNpbmcgdGhlIFNIX1dF
QkdMX1NQRUMgZmxhZykuCisgIFNIX1RJTUlOR19SRVNUUklDVElPTlMgPSAweDAyMDAsCisgICAg
CisgIC8vIFRoaXMgZmxhZyBwcmludHMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCBpcyB1c2Vk
IHRvIGVuZm9yY2UgdGltaW5nCisgIC8vIHJlc3RyaWN0aW9ucyBvbiBmcmFnbWVudCBzaGFkZXJz
LgorICAvLyBUaGlzIGZsYWcgb25seSBoYXMgYW4gZWZmZWN0IGlmIGFsbCBvZiB0aGUgZm9sbG93
aW5nIGFyZSB0cnVlOgorICAvLyAtIFRoZSBzaGFkZXIgc3BlYyBpcyBTSF9XRUJHTF9TUEVDLgor
ICAvLyAtIFRoZSBjb21waWxlIG9wdGlvbnMgY29udGFpbiB0aGUgU0hfVElNSU5HX1JFU1RSSUNU
SU9OUyBmbGFnLgorICAvLyAtIFRoZSBzaGFkZXIgdHlwZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIu
CisgIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0MDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAog
Ly8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMzIgQEAKIAkJODg4
RjEzODI0OThFMkQ3NEFGMjgwMUM4IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1
Zy5jcHAgKi87IH07CiAJCTg5NkI3MjBCRDIxRjY3NDlBN0Q4M0YzMCAvKiBNYXBMb25nVmFyaWFi
bGVOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICov
OyB9OwogCQk5M0E0MUFGMDM2RTVFRjg3QjM2NkI1NjMgLyogVHJhbnNsYXRvckVTU0wuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEEzQTI2MEY1Mzc5
QTdFMjY1NUQ0MEYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsKLQkJOTg4NkJDRDVEMERE
NjlCNkZERTA5REQ4IC8qIFVuZm9sZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xk
U2VsZWN0LmNwcCAqLzsgfTsKIAkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdM
U0xCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDREYwMUYwMDJBREU5REI4QTNFRjRGRSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi87IH07CiAJ
CTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyQzlDOEVCNEE3RUZGNUI2N0ZGOURC
RiAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKKwkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi87IH07
CisJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODIxMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0QxNTlD
MzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGly
ZWN0aXZlUGFyc2VyLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4
cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3Bw
ICovOyB9OworCQlBMjAxMDg0MDE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjkxNTlDMzFBMDAw
RTU3QkJFIC8qIElucHV0LmNwcCAqLzsgfTsKKwkJQTIwMTA4NDExNTlDMzFBMDAwRTU3QkJFIC8q
IExleGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi87IH07CisJCUEyMDEwODQy
MTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3Bw
ICovOyB9OworCQlBMjAxMDg0MzE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyRjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi87IH07CisJCUEyMDEwODQ0MTU5
QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5jcHAgKi87IH07CisJCUEyMDEwODQ1MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovOyB9OworCQlBMjAxMDg0NjE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3Bw
ICovOyB9OworCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAq
LzsgfTsKKwkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0QzE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjQx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NEUxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovOyB9OworCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovOyB9OworCQlBMjAxMDg2NjE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjcxNTlDMzI0RjAwRTU3
QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJz
aW9uLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjgxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi87IH07CisJCUEyMDEwODY5
MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NkExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovOyB9OworCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyog
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi87IH07CisJCUEyMDEwODZDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyog
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjAxMDg3MTE1OUMzMjYy
MDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi87IH07CisJCUEyMDEwODcyMTU5QzMyNjIwMEU1N0JCRSAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAgKi87IH07CiAJCUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZF
RkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJQUQ4NTUxN0Yw
ODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMg
Ki87IH07CiAJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAw
NUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OwpAQCAtMTA0LDcgKzEy
Nyw2IEBACiAJCTI3QzExRUUxMEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJsZUluZm8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5IC8qIEJhc2VUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk0RjQ0
MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8q
IFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTQ3LDYgKzE2OSw1OSBAQAogCQk5RDQ3
QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBDRTQzNjMx
ODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlh
bGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTY0NEIwMEU5MzA0QzQw
N0ZEQzVGNDcgLyogbGlidHJhbnNsYXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IGxpYnRyYW5zbGF0b3JfZ2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQlBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21t
b24gY29weS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9j
b21tb24gY29weS5hIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQTIw
MTA4MUYxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMjE1OUMz
MUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERp
cmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3Rp
dmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjUxNTlDMzFB
MDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyMDEwODI2MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElu
cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8q
IElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBM
ZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFj
cm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBh
bmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODMwMTU5QzMxQTAw
MEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MzExNTlDMzFBMDAwRTU3QkJFIC8qIHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHBwX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzMxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxv
Y2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JC
RSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tl
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM3MTU5QzMxQTAwMEU1
N0JCRSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRv
a2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODM5MTU5QzMx
QTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODQ4MTU5
QzMyMDkwMEU1N0JCRSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NDkxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEExNTlDMzI0RjAw
RTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3
QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXBlbmRlbmN5R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NEUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAv
KiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MTE1OUMzMjRGMDBF
NTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdy
YXBoVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MzE1
OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODU0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFn
bm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU2MTU5QzMy
NEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdC
QkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXh0ZW5zaW9uQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4NUExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JC
RSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAv
KiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5h
bWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1RTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3
QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkQxNTlD
MzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNj
b250aW51aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2Nv
bnRpbnVpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkYxNTlDMzI2
MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg3MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJj
dWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3Vp
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5
NTIgLyogbGlidHJhbnNsYXRvcl9obHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYnRyYW5zbGF0b3JfaGxzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NEYyRUQwRDgyRDdCQkNBNEU5
RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4LDcgKzI1Myw2IEBACiAJCURERDNC
N0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVy
bU91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFRUFGQzYxOEEzQjMzRjFG
QkZFMzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0UwOURDOEUx
QkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5
bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwLDYgKzI2NCwxMyBAQAog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUEyMDEwN0ZCMTU5QzMxM0MwMEU1N0JCRSAvKiBG
cmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMjIzLDgg
KzMwNCwxMCBAQAogCQkJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLywKIAkJ
CQk1MjhGRjIwMTgzOUM2RjIzM0UyNkZGREEgLyogY3BwLmggKi8sCiAJCQkJODA1OEEwQTJBMEEw
MjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovLAorCQkJCUEyMDEwODQ4MTU5QzMyMDkwMEU1
N0JCRSAvKiBsZW5ndGhfbGltaXRzLmggKi8sCiAJCQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhF
IC8qIG1lbW9yeS5jICovLAogCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnku
aCAqLywKKwkJCQlBMjAxMDgxRTE1OUMzMUEwMDBFNTdCQkUgLyogbmV3ICovLAogCQkJCUNGRDEy
QzZFNDZFQkUwODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLywKIAkJCQk2QkJDODIyNEI5RDhFMjM0
RDExN0ZBMEMgLyogcHJlcHJvY2Vzcy5oICovLAogCQkJCUZGM0FBNjk0REY5QTQ0NTVBODEzMjM0
RCAvKiBzY2FubmVyLmMgKi8sCkBAIC0yNDEsMTUgKzMyNCwzMiBAQAogCQkxOTZEQjZBQjAwNkJC
ODM1MDNDN0Q3ODYgLyogU291cmNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICov
LAogCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQlB
MjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICov
LAorCQkJCUEyMDEwODRBMTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oICovLAogCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAg
Ki8sCiAJCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNwcCAqLywK
IAkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8sCiAJCQkJMEExMThF
NTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVyLmNwcCAqLywKIAkJCQlCMkY1Q0ExMUVFQTky
REYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8q
IGRlYnVnLmggKi8sCisJCQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICov
LAorCQkJCUEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLywKKwkJCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0
eS5oICovLAorCQkJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
Y3BwICovLAorCQkJCUEyMDEwODU0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24u
aCAqLywKKwkJCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICov
LAorCQkJCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJ
CUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJ
CQlBMjAxMDg1ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJ
CUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovLAogCQkJ
CTVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKIAkJCQkx
ODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMgLyogRm9yTG9vcFVucm9sbC5oICovLAorCQkJCTQ5N0M1
QzI0RUVGNDY2RkI0QjUwQTI1OSAvKiBnbHNsYW5nLmggKi8sCisJCQkJNzNBNTdDNkQ0MTM3NzNB
RUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLywKKwkJCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovLAorCQkJCTRGQ0YzMkNCMkQ4QTQyQzkzMEE2NkIw
MCAvKiBnbHNsYW5nX3RhYi5oICovLAogCQkJCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJ
bmZvU2luay5jcHAgKi8sCiAJCQkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5r
LmggKi8sCiAJCQkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
LApAQCAtMjU3LDEyICszNTcsMTggQEAKIAkJCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyog
SW5pdGlhbGl6ZURsbC5jcHAgKi8sCiAJCQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLywKIAkJCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLywKKwkJCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8sCiAJCQkJODU4NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8q
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3
MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAogCQkJCTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYw
RiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAv
KiBNTWFwLmggKi8sCisJCQkJNzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0
ZS5oICovLAorCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICov
LAorCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8s
CisJCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8s
CiAJCQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cCAqLywKIAkJCQk4MUNDNDI0NUE4RTVBQjU1ODREMzM2RjMgLyogTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCAqLywKKwkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyogTU1hcC5oICovLAorCQkJ
CUM4QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKKwkJCQlCRTI1ODQ4
NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAogCQkJCURCMjkxN0M1
QjYyNDcxMjM2NERFNEE3NSAvKiBPdXRwdXRFU1NMLmNwcCAqLywKIAkJCQk2QkI2NkFCNTg3Mzg2
OEUyMzY3NUI2REIgLyogT3V0cHV0RVNTTC5oICovLAogCQkJCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKQEAgLTI3MSwyMCArMzc3LDI1IEBACiAJCQkJQjU1
QjM1OUNGN0U0ODZEQkM0OUJCRjBBIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCiAJCQkJOUE1QjVC
QjI1MjY4MDI0NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICovLAogCQkJCTVBMjE1OTlDNTlC
QzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRITFNMLmggKi8sCisJCQkJRDJDOUM4RUI0QTdFRkY1QjY3
RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAogCQkJCTk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5
NiAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCiAJCQkJQ0VFMEM5MERGNkQ1MDREMUYzNjI5NzExIC8q
IFBhcnNlSGVscGVyLmggKi8sCiAJCQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xB
bGxvYy5jcHAgKi8sCiAJCQkJMTJFQUYwMjgzMTFFRUE0NzUzRTgyODE4IC8qIFBvb2xBbGxvYy5o
ICovLAorCQkJCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLywKKwkJCQkw
RThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovLAogCQkJCTQ4NTdFMTg3
OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCiAJCQkJOUQ0N0IxQUM4
MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8sCiAJCQkJQjQzNkVGRjA2OTEz
RkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovLAogCQkJCUQ0MEY3OENCOUJBMEM4OTky
MUZBMzE5RCAvKiBSZW1vdmVUcmVlLmggKi8sCisJCQkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8sCiAJCQkJMjI4QTZERURERjA4REIzNzAzOTRBN0FEIC8q
IFNlYXJjaFN5bWJvbC5jcHAgKi8sCiAJCQkJRjNFMDlEQzhFMUJGNUQyOTU4QUFDRURFIC8qIFNl
YXJjaFN5bWJvbC5oICovLAotCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRs
ZS5oICovLAogCQkJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAq
LywKKwkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKIAkJCQlC
N0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovLAogCQkJCTdDNkJC
MTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUEyMDEwODVEMTU5
QzMyNEYwMEU1N0JCRSAvKiB0aW1pbmcgKi8sCiAJCQkJMEEzQTI2MEY1Mzc5QTdFMjY1NUQ0MEYz
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKIAkJCQlENTNEREQwQ0RGMTVFRTFERDAxRjFBMjAg
LyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyog
VHJhbnNsYXRvckdMU0wuY3BwICovLApAQCAtMjkyLDI5ICs0MDMsMTcgQEAKIAkJCQlDM0RBRkY2
QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAogCQkJCUUzQTI5QjZF
OUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAogCQkJCUFBNTNCNjYzMkM3
NkY5MDVERjA4RTU2NCAvKiBUeXBlcy5oICovLAotCQkJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FD
OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAotCQkJCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAv
KiBVbmZvbGRTZWxlY3QuaCAqLywKKwkJCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcCAqLywKKwkJCQlBMjAxMDg3MDE1OUMzMjYyMDBFNTdCQkUgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCisJCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8q
IHVuaXN0ZC5oICovLAorCQkJCTNFRTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAq
LywKKwkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyogdXRpbC5oICovLAogCQkJCUIxNDhE
OTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKIAkJCQk5
MDI1NDg0MkQ3Mjk3NTY3MkMyRTlBOTMgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5oICovLAogCQkJ
CTI3QzExRUUxMEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJsZUluZm8uY3BwICovLAogCQkJCTVE
OTkzNTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLywKIAkJCQlGNzI3QUVD
OTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovLAogCQkJCTEyMEFEMEEzQjc2
NDJGQjVBOUFFM0E1NiAvKiBWZXJzaW9uR0xTTC5oICovLAotCQkJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCi0JCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8q
IGRlYnVnLmggKi8sCi0JCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcuaCAq
LywKLQkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovLAot
CQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCi0JCQkJ
NEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJREVBRjZG
MzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCi0JCQkJNzk5REM5NjExRUUy
RUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCUM4QkQ1OUJENzA1NkZGQzIx
MzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IFNvdXJjZTsKIAkJCXBhdGggPSBjb21waWxlcjsKQEAgLTMyOSw2ICs0MjgsNjIgQEAKIAkJ
CSk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMjAxMDgxRTE1OUMzMUEw
MDBFNTdCQkUgLyogbmV3ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovLAor
CQkJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovLAorCQkJCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKKwkJCQlB
MjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJCUEy
MDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEy
MDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjAx
MDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTIw
MTA4MjYxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjAx
MDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovLAorCQkJCUEyMDEwODJBMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5oICovLAorCQkJCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgKi8sCisJCQkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmgg
Ki8sCisJCQkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlB
MjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLywKKwkJCQlBMjAxMDgyRjE1OUMz
MUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJCQkJQTIwMTA4MzAxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlBMjAxMDgzMTE1OUMzMUEwMDBF
NTdCQkUgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyog
UHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjAxMDgzMzE1OUMzMUEwMDBFNTdCQkUgLyogUHJl
cHJvY2Vzc29yLmggKi8sCisJCQkJQTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxv
Y2F0aW9uLmggKi8sCisJCQkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAq
LywKKwkJCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uaCAqLywKKwkJCQlBMjAx
MDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLywKKwkJCQlBMjAxMDgzOTE1
OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IG5ldzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUEyMDEwODRCMTU5QzMyNEYwMEU1
N0JCRSAvKiBkZXBncmFwaCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
Ki8sCisJCQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5oICov
LAorCQkJCUEyMDEwODRFMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCAqLywKKwkJCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oICovLAorCQkJCUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwICovLAorCQkJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKKwkJCQlBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBkZXBncmFw
aDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUEyMDEwODVEMTU5QzMyNEYw
MEU1N0JCRSAvKiB0aW1pbmcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAorCQkJCUEyMDEwODYwMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTIwMTA4NjExNTlD
MzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHRpbWluZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUIy
QzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zNDQsNiArNDk5LDcgQEAKIAkJCQkzREREQzc3MjE2MjAy
QTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLywKIAkJCQlBMTY0NEIwMEU5
MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNsYXRvcl9nbHNsLmEgKi8sCiAJCQkJQTQ0N0Y3NUYz
M0RBNEM0QzEyM0FDOTUyIC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovLAorCQkJCUEyMDEwN0ZG
MTU5QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4
Myw2ICs1MzksMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSAzREREQzc3MjE2MjAyQTRERTE4
MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwogCQl9OworCQlBMjAxMDdEQzE1
OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovID0geworCQkJaXNhID0gUEJYTmF0aXZl
VGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEEyMDEwN0ZDMTU5QzMxM0MwMEU1
N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJl
cHJvY2Vzc29yIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUEyMDEwN0REMTU5QzMxM0Mw
MEU1N0JCRSAvKiBTb3VyY2VzICovLAorCQkJCUEyMDEwN0ZCMTU5QzMxM0MwMEU1N0JCRSAvKiBG
cmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5k
ZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBwcmVwcm9jZXNzb3I7CisJCQlwcm9kdWN0TmFt
ZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEEyMDEwN0ZGMTU5
QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi87CisJCQlwcm9k
dWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsK
IAkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDNzFF
NzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi87CkBAIC00MDksNyArNTgxLDExIEBACiAJ
CQl9OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENF
NyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKKwkJ
CWtub3duUmVnaW9ucyA9ICgKKwkJCQllbiwKKwkJCSk7CiAJCQltYWluR3JvdXAgPSA1QkJFRkY5
QjkxNzM4Mjk3Qjk1QzU2OEQ7CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwogCQkJcHJvamVjdFJv
b3QgPSAiIjsKQEAgLTQxOCw2ICs1OTQsNyBAQAogCQkJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQz
MiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLywKIAkJCQk1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQg
LyogdHJhbnNsYXRvcl9nbHNsICovLAogCQkJCUE4MzhFOTU3NEIzRkYxNDc5MURCREFCMSAvKiB0
cmFuc2xhdG9yX2hsc2wgKi8sCisJCQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXBy
b2Nlc3NvciAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBA
IC00MzAsOCArNjA3LDI3IEBACiAJCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVH
ZW5ITFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAv
KiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4
QjI2RCAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5ODg2QkNENUQw
REQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5
NjQ2NjU2NkQ4QzBGMDIzQTU1Mzc2MCAvKiBTZWFyY2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTIwMTA4NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJF
IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlBMjAxMDgzQjE1
OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIw
MTA4M0MxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA4M0QxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lv
blBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MDE1OUMzMUEwMDBFNTdCQkUg
LyogSW5wdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDExNTlDMzFBMDAwRTU3QkJF
IC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQyMTU5QzMxQTAwMEU1N0JC
RSAvKiBNYWNyby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0MzE1OUMzMUEwMDBFNTdC
QkUgLyogTWFjcm9FeHBhbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg0NDE1OUMz
MUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODQ1MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAx
MDg0NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
NDgzLDYgKzY3OSwxNyBAQAogCQkJCUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xz
LmMgaW4gU291cmNlcyAqLywKIAkJCQlFOEM3MjdBQThFOURDNUU3QjU4ODU3REYgLyogdG9rZW5z
LmMgaW4gU291cmNlcyAqLywKIAkJCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTIwMTA4NjQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVu
ZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NjE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA4NjcxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjAxMDg2ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NkExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4
NkIxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTYxLDYgKzc2OCwzOCBAQAog
CQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKKwkJQTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJF
IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIs
CisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAo
CisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSAi
dHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9Owor
CQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxF
X1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAorCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCisJCQkJKTsK
KwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAor
CQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOworCQkJ
fTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OwogCQlBRjdDMkNEMTBDNkZFQTA3NkIxNDFFNkUg
LyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKQEAgLTY3Miw2ICs5MTEsMTUgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMTsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwog
CQl9OworCQlBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi8gPSB7CisJCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlBMjAx
MDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8sCisJCQkJQTIwMTA3RkUxNTlDMzEzQzAw
RTU3QkJFIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CisJCX07CiAJ
CUM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHJldmlzaW9u
IDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGls
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw0ICsxNSw4IEBACiAgIFR5cGVOYW1lKGNvbnN0IFR5
cGVOYW1lJik7ICAgICAgICAgICAgICAgXAogICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFt
ZSYpCiAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYK
KyNlbmRpZgorCiAjZW5kaWYgLy8gQ09NTU9OX0FOR0xFVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxMjI3Mzgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDMgKzEsMTAzIEBACi0vLw0KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotLy8NCi0NCi0v
LyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMuDQotDQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIg0KLQ0KLSNpbmNsdWRlIDxzdGRpby5oPg0KLSNpbmNsdWRlIDxzdGRhcmcuaD4NCi0j
aW5jbHVkZSA8ZDNkOS5oPg0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotDQotbmFtZXNwYWNlIGds
DQotew0KLQ0KLXR5cGVkZWYgdm9pZCAoV0lOQVBJICpQZXJmT3V0cHV0RnVuY3Rpb24pKEQzRENP
TE9SLCBMUENXU1RSKTsNCi0NCi1zdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1
Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2
YV9saXN0IHZhcmFyZykNCi17DQotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikNCi0g
ICAgaWYgKHBlcmZBY3RpdmUoKSkNCi0gICAgew0KLSAgICAgICAgY2hhciBtZXNzYWdlWzMyNzY4
XTsNCi0gICAgICAgIGludCBsZW4gPSB2c3ByaW50Zl9zKG1lc3NhZ2UsIGZvcm1hdCwgdmFyYXJn
KTsNCi0gICAgICAgIGlmIChsZW4gPCAwKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVy
bjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8vIFRoZXJlIGFyZSBubyBBU0NJSSB2YXJpYW50
cyBvZiB0aGVzZSBEM0RQRVJGIGZ1bmN0aW9ucy4NCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3Nh
Z2VbMzI3NjhdOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkNCi0gICAg
ICAgIHsNCi0gICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07DQotICAgICAg
ICB9DQotICAgICAgICB3aWRlTWVzc2FnZVtsZW5dID0gMDsNCi0NCi0gICAgICAgIHBlcmZGdW5j
KDAsIHdpZGVNZXNzYWdlKTsNCi0gICAgfQ0KLSNlbmRpZg0KLQ0KLSNpZiAhZGVmaW5lZChBTkdM
RV9ESVNBQkxFX1RSQUNFKQ0KLSNpZiBkZWZpbmVkKE5ERUJVRykNCi0gICAgaWYgKHRyYWNlRmls
ZURlYnVnT25seSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotI2VuZGlmDQot
DQotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihUUkFDRV9PVVRQVVRfRklMRSwgImEiKTsNCi0gICAg
aWYgKGZpbGUpDQotICAgIHsNCi0gICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwgdmFyYXJn
KTsNCi0gICAgICAgIGZjbG9zZShmaWxlKTsNCi0gICAgfQ0KLSNlbmRpZg0KLX0NCi0NCi12b2lk
IHRyYWNlKGJvb2wgdHJhY2VGaWxlRGVidWdPbmx5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikN
Ci17DQotICAgIHZhX2xpc3QgdmFyYXJnOw0KLSAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
DQotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQ0KLSAgICBvdXRwdXQodHJhY2VGaWxl
RGVidWdPbmx5LCBOVUxMLCBmb3JtYXQsIHZhcmFyZyk7DQotI2Vsc2UNCi0gICAgb3V0cHV0KHRy
YWNlRmlsZURlYnVnT25seSwgRDNEUEVSRl9TZXRNYXJrZXIsIGZvcm1hdCwgdmFyYXJnKTsNCi0j
ZW5kaWYNCi0gICAgdmFfZW5kKHZhcmFyZyk7DQotfQ0KLQ0KLWJvb2wgcGVyZkFjdGl2ZSgpDQot
ew0KLSNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikNCi0gICAgcmV0dXJuIGZhbHNlOw0K
LSNlbHNlDQotICAgIHN0YXRpYyBib29sIGFjdGl2ZSA9IEQzRFBFUkZfR2V0U3RhdHVzKCkgIT0g
MDsNCi0gICAgcmV0dXJuIGFjdGl2ZTsNCi0jZW5kaWYNCi19DQotDQotU2NvcGVkUGVyZkV2ZW50
SGVscGVyOjpTY29wZWRQZXJmRXZlbnRIZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pDQot
ew0KLSNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpDQotICAgIHZhX2xpc3QgdmFyYXJn
Ow0KLSAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7DQotICAgIG91dHB1dCh0cnVlLCByZWlu
dGVycHJldF9jYXN0PFBlcmZPdXRwdXRGdW5jdGlvbj4oRDNEUEVSRl9CZWdpbkV2ZW50KSwgZm9y
bWF0LCB2YXJhcmcpOw0KLSAgICB2YV9lbmQodmFyYXJnKTsNCi0jZW5kaWYNCi19DQotDQotU2Nv
cGVkUGVyZkV2ZW50SGVscGVyOjp+U2NvcGVkUGVyZkV2ZW50SGVscGVyKCkNCi17DQotI2lmICFk
ZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikNCi0gICAgaWYgKHBlcmZBY3RpdmUoKSkNCi0gICAg
ew0KLSAgICAgICAgRDNEUEVSRl9FbmRFdmVudCgpOw0KLSAgICB9DQotI2VuZGlmDQotfQ0KLX0N
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMu
CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KworbmFtZXNwYWNlIGdsCit7CisKK3R5cGVkZWYgdm9pZCAoV0lOQVBJICpQZXJmT3V0cHV0RnVu
Y3Rpb24pKEQzRENPTE9SLCBMUENXU1RSKTsKKworc3RhdGljIHZvaWQgb3V0cHV0KGJvb2wgdHJh
Y2VGaWxlRGVidWdPbmx5LCBQZXJmT3V0cHV0RnVuY3Rpb24gcGVyZkZ1bmMsIGNvbnN0IGNoYXIg
KmZvcm1hdCwgdmFfbGlzdCB2YXJhcmcpCit7CisjaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9Q
RVJGKQorICAgIGlmIChwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBjaGFyIG1lc3NhZ2Vb
MzI3NjhdOworICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZh
cmFyZyk7CisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMg
b2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCisgICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2Vb
MzI3NjhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07CisgICAgICAgIH0KKyAg
ICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1l
c3NhZ2UpOworICAgIH0KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFD
RSkKKyNpZiBkZWZpbmVkKE5ERUJVRykKKyAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRklMRSogZmlsZSA9IGZv
cGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOworICAgIGlmIChmaWxlKQorICAgIHsKKyAgICAg
ICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBmY2xvc2UoZmlsZSk7
CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgdHJhY2UoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHks
IGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgdmFyYXJnOworICAgIHZh
X3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikK
KyAgICBvdXRwdXQodHJhY2VGaWxlRGVidWdPbmx5LCBOVUxMLCBmb3JtYXQsIHZhcmFyZyk7Cisj
ZWxzZQorICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIEQzRFBFUkZfU2V0TWFya2VyLCBm
b3JtYXQsIHZhcmFyZyk7CisjZW5kaWYKKyAgICB2YV9lbmQodmFyYXJnKTsKK30KKworYm9vbCBw
ZXJmQWN0aXZlKCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKKyAgICByZXR1
cm4gZmFsc2U7CisjZWxzZQorICAgIHN0YXRpYyBib29sIGFjdGl2ZSA9IEQzRFBFUkZfR2V0U3Rh
dHVzKCkgIT0gMDsKKyAgICByZXR1cm4gYWN0aXZlOworI2VuZGlmCit9CisKK1Njb3BlZFBlcmZF
dmVudEhlbHBlcjo6U2NvcGVkUGVyZkV2ZW50SGVscGVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KQoreworI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKKyAgICB2YV9saXN0IHZhcmFy
ZzsKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CisgICAgb3V0cHV0KHRydWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2luRXZlbnQpLCBmb3Jt
YXQsIHZhcmFyZyk7CisgICAgdmFfZW5kKHZhcmFyZyk7CisjZW5kaWYKK30KKworU2NvcGVkUGVy
ZkV2ZW50SGVscGVyOjp+U2NvcGVkUGVyZkV2ZW50SGVscGVyKCkKK3sKKyNpZiAhZGVmaW5lZChB
TkdMRV9ESVNBQkxFX1BFUkYpCisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAg
IEQzRFBFUkZfRW5kRXZlbnQoKTsKKyAgICB9CisjZW5kaWYKK30KK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCShyZXZpc2lvbiAxMjI3Mzgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCiAjZGVmaW5l
IE1JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBCVUlMRF9WRVJTSU9OIDAKLSNkZWZpbmUgQlVJTERf
UkVWSVNJT04gMTAwOQorI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAxMTY2CiAKICNkZWZpbmUgU1RS
SU5HSUZZKHgpICN4CiAjZGVmaW5lIE1BQ1JPX1NUUklOR0lGWSh4KSBTVFJJTkdJRlkoeCkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsMTEgKzE2LDYgQEAgbmFtZXNwYWNlIHsKIC8v
IGV2YWx1YXRlZC4gVGhpcyBpcyB1bmxpa2VseSB0byBzaG93IHVwIGluIHJlYWwgc2hhZGVycywg
YnV0IGlzIHNvbWV0aGluZyB0bwogLy8gY29uc2lkZXIuCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25F
bXVsYXRpb25WZXJ0ZXhTb3VyY2VbXSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
YXRhbihmbG9hdCwgZmxvYXQpIiwKLSAgICAidmVjMiB3ZWJnbF9hdGFuX2VtdSh2ZWMyIHksIHZl
YzIgeCkgeyByZXR1cm4gdmVjMihhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0sIHhbMV0pKTsg
fSIsCi0gICAgInZlYzMgd2ViZ2xfYXRhbl9lbXUodmVjMyB5LCB2ZWMzIHgpIHsgcmV0dXJuIHZl
YzMoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFdLCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSk7
IH0iLAotICAgICJ2ZWM0IHdlYmdsX2F0YW5fZW11KHZlYzQgeSwgdmVjNCB4KSB7IHJldHVybiB2
ZWM0KGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSksIGF0YW4oeVsyXSwgeFsyXSks
IGF0YW4oeVszXSwgeFszXSkpOyB9IiwKLQogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBj
b3MoZmxvYXQpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzIpIiwKICAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgY29zKHZlYzMpIiwKQEAgLTQxLDExICszNiw2IEBA
IGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXIKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgbGVuZ3RoKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3IgbGVuZ3RoKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QoZmxv
YXQsIGZsb2F0KSIsCi0gICAgInZlYzIgd2ViZ2xfbW9kX2VtdSh2ZWMyIHgsIHZlYzIgeSkgeyBy
ZXR1cm4gdmVjMihtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSk7IH0iLAotICAgICJ2
ZWMzIHdlYmdsX21vZF9lbXUodmVjMyB4LCB2ZWMzIHkpIHsgcmV0dXJuIHZlYzMobW9kKHhbMF0s
IHlbMF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSk7IH0iLAotICAgICJ2ZWM0
IHdlYmdsX21vZF9lbXUodmVjNCB4LCB2ZWM0IHkpIHsgcmV0dXJuIHZlYzQobW9kKHhbMF0sIHlb
MF0pLCBtb2QoeFsxXSwgeVsxXSksIG1vZCh4WzJdLCB5WzJdKSwgbW9kKHhbM10sIHlbM10pKTsg
fSIsCi0KICAgICAiI2RlZmluZSB3ZWJnbF9ub3JtYWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8g
MC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjApKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRp
b24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5v
cm1hbGl6ZSh2ZWMzKSIsCkBAIC01OCw0MiArNDgsMzIgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9u
RW11bGF0aW9uVmVydGV4U291cgogfTsKIAogY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
RnJhZ21lbnRTb3VyY2VbXSA9IHsKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbihm
bG9hdCwgZmxvYXQpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMyLCB2
ZWMyKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0YW4odmVjMywgdmVjMykiLAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzQsIHZlYzQpIiwKLQogICAgICJ3
ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lv
biBmbG9hdCBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJlY2lzaW9u
IHZlYzIgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzIgYSkgeyByZXR1cm4g
Y29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIHdlYmdsX2Nvc19lbXUo
d2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWMzIGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAgICAgIndl
YmdsX2VtdV9wcmVjaXNpb24gdmVjNCB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9wcmVjaXNpb24g
dmVjNCBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIGRpc3RhbmNlKGZsb2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2Rpc3RhbmNl
X2VtdSh4LCB5KSAoKHgpID49ICh5KSA/ICh4KSAtICh5KSA6ICh5KSAtICh4KSkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNlKHZlYzMsIHZlYzMpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBl
bXVsYXRpb24gZm9yIGRvdChmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9kb3Rf
ZW11KHgsIHkpICgoeCkgKiAoeSkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90
KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzMsIHZl
YzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KHZlYzQsIHZlYzQpIiwKIAot
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgoZmxvYXQpIiwKKyAgICAiI2RlZmlu
ZSB3ZWJnbF9sZW5ndGhfZW11KHgpICgoeCkgPj0gMC4wID8gKHgpIDogLSh4KSkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBsZW5ndGgodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBs
ZW5ndGgodmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwg
ZmxvYXQpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzIsIHZlYzIpIiwK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzMsIHZlYzMpIiwKLSAgICAiI2Vy
cm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKHZlYzQsIHZlYzQpIiwKLQotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBub3JtYWxpemUoZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9ub3Jt
YWxpemVfZW11KHgpICgoeCkgPT0gMC4wID8gMC4wIDogKCh4KSA+IDAuMCA/IDEuMCA6IC0xLjAp
KSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMyKSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWMzKSIsCiAgICAgIiNlcnJvciBu
byBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZSh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdChmbG9hdCwgZmxvYXQpIiwKKyAgICAiI2RlZmluZSB3ZWJnbF9yZWZs
ZWN0X2VtdShJLCBOKSAoKEkpIC0gMi4wICogKE4pICogKEkpICogKE4pKSIsCiAgICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzMsIHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxh
dGlvbiBmb3IgcmVmbGVjdCh2ZWM0LCB2ZWM0KSIKQEAgLTEwMiwxMCArODIsNiBAQCBjb25zdCBj
aGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvCiBjb25zdCBib29sIGtGdW5jdGlvbkVt
dWxhdGlvblZlcnRleE1hc2tbXSA9IHsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAvLyBX
b3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgotICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFs
c2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25Db3MzCkBAIC0xMjIsMTAgKzk4LDYgQEAgY29uc3QgYm9vbCBrRnVu
Y3Rpb25FbXVsYXRpb25WZXJ0ZXhNYXNrWwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgy
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9u
TGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDNfMwotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Nb2Q0XzQKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMQogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTMKQEAgLTEzNiwxMCArMTA4LDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRp
b25WZXJ0ZXhNYXNrWwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CiAjZWxzZQog
ICAgIC8vIFdvcmsgYXJvdW5kIEQzRCBkcml2ZXIgYnVnIGluIFdpbi4KLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQXRhbjFfMQotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuMl8yCi0gICAgdHJ1
ZSwgIC8vIFRGdW5jdGlvbkF0YW4zXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjRfNAog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMwpAQCAtMTU2LDEwICsxMjQsNiBAQCBjb25zdCBi
b29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxp
emUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTm9ybWFsaXplMwpAQCAtMTczLDIyICsxMzcsMzggQEAgY29uc3QgYm9vbCBrRnVuY3Rp
b25FbXVsYXRpb25WZXJ0ZXhNYXNrWwogfTsKIAogY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRp
b25GcmFnbWVudE1hc2tbXSA9IHsKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjFfMQotICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4z
XzMKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjRfNAogI2lmIGRlZmluZWQoX19BUFBMRV9f
KQotICAgIC8vIFdvcmsgYXJvdW5kIGEgQVRJIGRyaXZlciBidWcgaW4gTWFjIHRoYXQgY2F1c2Vz
IGNyYXNoZXMuCisgICAgLy8gV29yayBhcm91bmQgQVRJIGRyaXZlciBidWdzIGluIE1hYy4KICAg
ICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMQogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MyCiAg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczMKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zNAor
ICAgIHRydWUsICAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25EaXN0YW5jZTJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMworICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25Eb3Qx
XzEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDNfMworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Q0XzQKKyAgICB0cnVlLCAgLy8gVEZ1
bmN0aW9uTGVuZ3RoMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkxlbmd0aDMKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAorICAg
IHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5v
cm1hbGl6ZTIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMworICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Ob3JtYWxpemU0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvblJlZmxlY3QxXzEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25SZWZsZWN0M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKICNlbHNlCisg
ICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBidWcgaW4gV2luLgogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Db3MxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczIKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uQ29zMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3M0Ci0jZW5kaWYKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UxXzEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlz
dGFuY2UyXzIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRGlzdGFuY2UzXzMKQEAgLTIwMSwxMCAr
MTgxLDYgQEAgY29uc3QgYm9vbCBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudE1hcwogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25MZW5ndGgyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDMK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoNAotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25N
b2QxXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMl8yCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk1vZDNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2Q0XzQKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTm9ybWFsaXplMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUyCiAg
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTMKQEAgLTIxMyw2ICsxODksNyBAQCBjb25z
dCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzCiAgICAgZmFsc2UsIC8vIFRGdW5j
dGlvblJlZmxlY3QyXzIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDNfMwogICAgIGZh
bHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0NF80CisjZW5kaWYKICAgICBmYWxzZSAgLy8gVEZ1bmN0
aW9uVW5rbm93bgogfTsKIApAQCAtMzg2LDE4ICszNjMsMTIgQEAgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I6OklkZW50aWZ5RnVuY3RpbwogCiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wQXRhbjoK
LSAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uQXRhbjFfMTsKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVPcERpc3RhbmNlOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBU
RnVuY3Rpb25EaXN0YW5jZTFfMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVP
cERvdDoKICAgICAgICAgICAgIGZ1bmN0aW9uID0gVEZ1bmN0aW9uRG90MV8xOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBU
RnVuY3Rpb25Nb2QxXzE7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BSZWZs
ZWN0OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rpb25SZWZsZWN0MV8xOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSw3IEBAIHByaXZh
dGU6CiAgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIC8vCiAgICAgZW51bSBUQnVpbHRJ
bkZ1bmN0aW9uIHsKLSAgICAgICAgVEZ1bmN0aW9uQXRhbjFfMSA9IDAsICAvLyBmbG9hdCBhdGFu
KGZsb2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4yXzIsICAvLyB2ZWMyIGF0YW4o
dmVjMiwgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW4zXzMsICAvLyB2ZWMzIGF0YW4odmVj
MywgdmVjMik7Ci0gICAgICAgIFRGdW5jdGlvbkF0YW40XzQsICAvLyB2ZWM0IGF0YW4odmVjNCwg
dmVjMik7Ci0KLSAgICAgICAgVEZ1bmN0aW9uQ29zMSwgIC8vIGZsb2F0IGNvcyhmbG9hdCk7Cisg
ICAgICAgIFRGdW5jdGlvbkNvczEgPSAwLCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKICAgICAgICAg
VEZ1bmN0aW9uQ29zMiwgIC8vIHZlYzIgY29zKHZlYzIpOwogICAgICAgICBURnVuY3Rpb25Db3Mz
LCAgLy8gdmVjMyBjb3ModmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkNvczQsICAvLyB2ZWM0IGNv
cyh2ZWM0KTsKQEAgLTcwLDExICs2NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFRGdW5jdGlvbkxl
bmd0aDMsICAvLyBmbG9hdCBsZW5ndGgodmVjMyk7CiAgICAgICAgIFRGdW5jdGlvbkxlbmd0aDQs
ICAvLyBmbG9hdCBsZW5ndGgodmVjNCk7CiAKLSAgICAgICAgVEZ1bmN0aW9uTW9kMV8xLCAgLy8g
ZmxvYXQgbW9kKGZsb2F0LCBmbG9hdCk7Ci0gICAgICAgIFRGdW5jdGlvbk1vZDJfMiwgIC8vIHZl
YzIgbW9kKHZlYzIsIHZlYzIpOwotICAgICAgICBURnVuY3Rpb25Nb2QzXzMsICAvLyB2ZWMzIG1v
ZCh2ZWMzLCB2ZWMzKTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kNF80LCAgLy8gdmVjNCBtb2QodmVj
NCwgdmVjNCk7Ci0KICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMSwgIC8vIGZsb2F0IG5vcm1h
bGl6ZShmbG9hdCk7CiAgICAgICAgIFRGdW5jdGlvbk5vcm1hbGl6ZTIsICAvLyB2ZWMyIG5vcm1h
bGl6ZSh2ZWMyKTsKICAgICAgICAgVEZ1bmN0aW9uTm9ybWFsaXplMywgIC8vIHZlYzMgbm9ybWFs
aXplKHZlYzMpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDEw
ICs4LDIxIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0
ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaCIKKworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAg
ICByZXR1cm4gc3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNf
U1BFQzsKK30KIAogbmFtZXNwYWNlIHsKIGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKApAQCAt
MTIzLDcgKzEzNCw3IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2
YWxpZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChzaGFkZXJTcGVjID09
IFNIX1dFQkdMX1NQRUMpCisgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpCiAg
ICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CiAKICAg
ICAvLyBGaXJzdCBzdHJpbmcgaXMgcGF0aCBvZiBzb3VyY2UgZmlsZSBpZiBmbGFnIGlzIHNldC4g
VGhlIGFjdHVhbCBzb3VyY2UgZm9sbG93cy4KQEAgLTE2MSw2ICsxNzIsMTIgQEAgYm9vbCBUQ29t
cGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkKICAgICAgICAgICAg
IHN1Y2Nlc3MgPSB2YWxpZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCisgICAgICAgIGlmIChzdWNj
ZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1RJTUlOR19SRVNUUklDVElPTlMpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMocm9vdCwgKGNvbXBpbGVP
cHRpb25zICYgU0hfREVQRU5ERU5DWV9HUkFQSCkgIT0gMCk7CisKKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgc2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDKQorICAgICAgICAgICAgcmV3
cml0ZUNTU1NoYWRlcihyb290KTsKKwogICAgICAgICAvLyBVbnJvbGwgZm9yLWxvb3AgbWFya3Vw
IG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MuCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRI
X0lOVEVHRVJfSU5ERVgpKQogICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3Bz
V2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOwpAQCAtMjM1LDEyICsyNTIsNTgg
QEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTgogICAgIH0KIH0KIAor
dm9pZCBUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpCit7Cisg
ICAgUmVuYW1lRnVuY3Rpb24gcmVuYW1lcigibWFpbigiLCAiY3NzX21haW4oIik7CisgICAgcm9v
dC0+dHJhdmVyc2UoJnJlbmFtZXIpOworfQorCiBib29sIFRDb21waWxlcjo6dmFsaWRhdGVMaW1p
dGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIFZhbGlkYXRlTGltaXRhdGlvbnMgdmFs
aWRhdGUoc2hhZGVyVHlwZSwgaW5mb1NpbmsuaW5mbyk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnZh
bGlkYXRlKTsKICAgICByZXR1cm4gdmFsaWRhdGUubnVtRXJyb3JzKCkgPT0gMDsKIH0KIAorYm9v
bCBUQ29tcGlsZXI6OmVuZm9yY2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3Qs
IGJvb2wgb3V0cHV0R3JhcGgpCit7CisgICAgaWYgKHNoYWRlclNwZWMgIT0gU0hfV0VCR0xfU1BF
QykgeworICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJUaW1pbmcgcmVzdHJpY3Rpb25zIG11c3Qg
YmUgZW5mb3JjZWQgdW5kZXIgdGhlIFdlYkdMIHNwZWMuIjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgewor
ICAgICAgICBURGVwZW5kZW5jeUdyYXBoIGdyYXBoKHJvb3QpOworCisgICAgICAgIC8vIE91dHB1
dCBhbnkgZXJyb3JzIGZpcnN0LgorICAgICAgICBib29sIHN1Y2Nlc3MgPSBlbmZvcmNlRnJhZ21l
bnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgorICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpIHsKKyAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5r
LmluZm8pOworICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJp
Y3Rpb25zKHJvb3QpOworICAgIH0KK30KKworYm9vbCBUQ29tcGlsZXI6OmVuZm9yY2VGcmFnbWVu
dFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkK
K3sKKyAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1Npbmsu
aW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVzdHJpY3Rpb25zKGdyYXBoKTsKKyAgICBy
ZXR1cm4gcmVzdHJpY3Rvci5udW1FcnJvcnMoKSA9PSAwOworfQorCitib29sIFRDb21waWxlcjo6
ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCkK
K3sKKyAgICBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyByZXN0cmljdG9yKGluZm9TaW5rLmlu
Zm8pOworICAgIHJlc3RyaWN0b3IuZW5mb3JjZVJlc3RyaWN0aW9ucyhyb290KTsKKyAgICByZXR1
cm4gcmVzdHJpY3Rvci5udW1FcnJvcnMoKSA9PSAwOworfQorCiB2b2lkIFRDb21waWxlcjo6Y29s
bGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBDb2xsZWN0QXR0
cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gQ29udGFpbnMgYW5hbHlzaXMgdXRpbGl0aWVzIGZv
ciBkZWFsaW5nIHdpdGggSExTTCdzIGxhY2sgb2Ygc3VwcG9ydCBmb3IKKy8vIHRoZSB1c2Ugb2Yg
aW50cmluc2ljIGZ1bmN0aW9ucyB3aGljaCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBjb21w
dXRlCisvLyBncmFkaWVudHMgb2YgZnVuY3Rpb25zIHdpdGggZGlzY29udGludWl0aWVzLiAKKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2Jvb2wgRGV0ZWN0
TG9vcERpc2NvbnRpbnVpdHk6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1M
b29wRGlzY29udGludWl0eSA9IGZhbHNlOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IHJldHVybiBtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRp
bnVpdHk6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQorewor
ICAgIGlmIChtTG9vcERpc2NvbnRpbnVpdHkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKKyAgICB7CisgICAgICBj
YXNlIEVPcEtpbGw6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BCcmVhazoKKyAgICAg
IGNhc2UgRU9wQ29udGludWU6CisgICAgICAgIG1Mb29wRGlzY29udGludWl0eSA9IHRydWU7Cisg
ICAgICBjYXNlIEVPcFJldHVybjoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQor
Citib29sIERldGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICByZXR1cm4gIW1Mb29wRGlzY29udGlu
dWl0eTsKK30KKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIERldGVjdExvb3BEaXNjb250aW51aXR5IGRldGVjdExvb3BEaXNjb250aW51
aXR5OworICAgIHJldHVybiBkZXRlY3RMb29wRGlzY29udGludWl0eS50cmF2ZXJzZShub2RlKTsK
K30KKworYm9vbCBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpCit7CisgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gZmFsc2U7CisgICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1HcmFkaWVudE9wZXJhdGlvbjsKK30KKworYm9vbCBE
ZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVu
YXJ5ICpub2RlKQoreworICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAg
IHsKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgIGNhc2UgRU9wREZkeToKKyAgICAgICAgbUdy
YWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiAhbUdyYWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVj
dEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBpZiAobUdyYWRpZW50T3BlcmF0aW9uKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVP
cEZ1bmN0aW9uQ2FsbCkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+aXNVc2VyRGVmaW5lZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFu
Z2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4
dHVyZTJEIiB8fAorICAgICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmUyRFByb2oiIHx8Cisg
ICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1HcmFkaWVudE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXaGVuIGEg
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2UgaGF2ZSB0bworICAgICAgICAgICAg
Ly8gY29uc2VydmF0aXZlbHkgYXNzdW1lIGl0IHRvIGNvbnRhaW4gZ3JhZGllbnQgb3BlcmF0aW9u
cworICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAhbUdyYWRpZW50T3BlcmF0aW9uOworfQorCitib29sIGNvbnRhaW5z
R3JhZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0R3JhZGll
bnRPcGVyYXRpb24gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb247CisgICAgcmV0dXJuIGRldGVjdEdy
YWRpZW50T3BlcmF0aW9uLnRyYXZlcnNlKG5vZGUpOworfQorfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisvLyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcg
d2l0aCBITFNMJ3MgbGFjayBvZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMg
ZnVuY3Rpb25zIHdoaWNoIChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdy
YWRpZW50cyBvZiBmdW5jdGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9ERVRFQ1RESVNDT05USU5VSVRZX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFVEVD
VERJU0NPTlRJTlVJVFlfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKy8vIENoZWNrcyB3aGV0aGVyIGEgbG9vcCBjYW4gcnVuIGZvciBh
IHZhcmlhYmxlIG51bWJlciBvZiBpdGVyYXRpb25zCitjbGFzcyBEZXRlY3RMb29wRGlzY29udGlu
dWl0eSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRy
YXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSk7CisgICAgYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisKKyAgICBi
b29sIG1Mb29wRGlzY29udGludWl0eTsKK307CisKK2Jvb2wgY29udGFpbnNMb29wRGlzY29udGlu
dWl0eShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKy8vIENoZWNrcyBmb3IgaW50cmluc2ljIGZ1bmN0
aW9ucyB3aGljaCBjb21wdXRlIGdyYWRpZW50cworY2xhc3MgRGV0ZWN0R3JhZGllbnRPcGVyYXRp
b24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgYm9vbCB0cmF2
ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGJvb2wgdmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wg
bUdyYWRpZW50T3BlcmF0aW9uOworfTsKKworYm9vbCBjb250YWluc0dyYWRpZW50T3BlcmF0aW9u
KFRJbnRlcm1Ob2RlICpub2RlKTsKKworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERVRFQ1RE
SVNDT05USU5VSVRZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlhZ25vc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdu
b3N0aWNzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKworVERpYWdub3N0aWNz
OjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1NpbmsoaW5mb1Npbmsp
Cit7Cit9CisKK1REaWFnbm9zdGljczo6flREaWFnbm9zdGljcygpCit7Cit9CisKK3ZvaWQgVERp
YWdub3N0aWNzOjp3cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87CisgICAgVFByZWZpeFR5cGUgcHJlZml4ID0g
c2V2ZXJpdHkgPT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKworICAg
IC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJh
aW5mbyAqLworICAgIHNpbmsucHJlZml4KHByZWZpeCk7CisgICAgc2luay5sb2NhdGlvbihFbmNv
ZGVTb3VyY2VMb2MobG9jLmZpbGUsIGxvYy5saW5lKSk7CisgICAgc2luayA8PCAiJyIgPDwgdG9r
ZW4gPDwgICInIDogIiA8PCByZWFzb24gPDwgIiAiIDw8IGV4dHJhIDw8ICJcbiI7Cit9CisKK3Zv
aWQgVERpYWdub3N0aWNzOjp3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCit7Cisg
ICAgbUluZm9TaW5rLmRlYnVnIDw8IHN0cjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OnByaW50
KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KQoreworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdu
b3N0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KKyNkZWZp
bmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKworY2xhc3MgVEluZm9TaW5rOworCitjbGFzcyBURGlh
Z25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBURGlh
Z25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luayk7CisgICAgdmlydHVhbCB+VERpYWdub3N0aWNz
KCk7CisKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CisK
KyAgICB2b2lkIHdyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgcmVhc29uLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEp
OworCisgICAgdm9pZCB3cml0ZURlYnVnKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOworCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7CisKKyAgcHJpdmF0ZToKKyAgICBUSW5mb1Np
bmsmIG1JbmZvU2luazsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVj
dGl2ZUhhbmRsZXIuaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisKK3N0YXRpYyBU
QmVoYXZpb3IgZ2V0QmVoYXZpb3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga1JlcXVpcmUoInJlcXVpcmUiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0VuYWJsZSgiZW5hYmxlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXNhYmxlKCJkaXNhYmxlIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtXYXJuKCJ3YXJuIik7CisKKyAgICBpZiAoc3RyID09IGtSZXF1aXJlKSByZXR1cm4gRUJoUmVx
dWlyZTsKKyAgICBlbHNlIGlmIChzdHIgPT0ga0VuYWJsZSkgcmV0dXJuIEVCaEVuYWJsZTsKKyAg
ICBlbHNlIGlmIChzdHIgPT0ga0Rpc2FibGUpIHJldHVybiBFQmhEaXNhYmxlOworICAgIGVsc2Ug
aWYgKHN0ciA9PSBrV2FybikgcmV0dXJuIEVCaFdhcm47CisgICAgcmV0dXJuIEVCaFVuZGVmaW5l
ZDsKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6OlREaXJlY3RpdmVIYW5kbGVyKFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGljcykKKyAgICA6IG1FeHRlbnNpb25CZWhhdmlvcihl
eHRCZWhhdmlvciksCisgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK1RE
aXJlY3RpdmVIYW5kbGVyOjp+VERpcmVjdGl2ZUhhbmRsZXIoKQoreworfQorCit2b2lkIFREaXJl
Y3RpdmVIYW5kbGVyOjpoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBt
c2cpCit7CisgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9S
LCBsb2MsIG1zZywgIiIsICIiKTsKK30KKwordm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxl
UHJhZ21hKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1NUREdMKCJTVERHTCIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrT3B0aW1pemUoIm9wdGltaXplIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEZWJ1ZygiZGVidWciKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga09uKCJvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT2ZmKCJvZmYiKTsK
KworICAgIGJvb2wgaW52YWxpZFZhbHVlID0gZmFsc2U7CisgICAgaWYgKG5hbWUgPT0ga1NUREdM
KQorICAgIHsKKyAgICAgICAgLy8gVGhlIFNUREdMIHByYWdtYSBpcyB1c2VkIHRvIHJlc2VydmUg
cHJhZ21hcyBmb3IgdXNlIGJ5IGZ1dHVyZQorICAgICAgICAvLyByZXZpc2lvbnMgb2YgR0xTTC4g
SWdub3JlIGl0LgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0g
a09wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5vcHRp
bWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEub3B0
aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0K
KyAgICBlbHNlIGlmIChuYW1lID09IGtEZWJ1ZykKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9
PSBrT24pIG1QcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBr
T2ZmKSBtUHJhZ21hLmRlYnVnID0gZmFsc2U7CisgICAgICAgIGVsc2UgaW52YWxpZFZhbHVlID0g
dHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsIGxvYywgbmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW52YWxpZFZhbHVlKQorICAgICAgbURpYWdu
b3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHByYWdtYSB2YWx1ZSIsIHZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiJ29uJyBvciAnb2ZmJyBleHBlY3RlZCIpOworfQorCit2
b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFeHRlbnNpb24oY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKQoreworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRXh0QWxsKCJhbGwiKTsKKworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9
IGdldEJlaGF2aW9yKGJlaGF2aW9yKTsKKyAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoVW5kZWZp
bmVkKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3Rp
Y3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9y
IiwgbmFtZSwgImludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
YW1lID09IGtFeHRBbGwpCisgICAgeworICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVx
dWlyZSkKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6
RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJleHRlbnNpb24iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2Fubm90IGhhdmUgJ3JlcXVpcmUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAnZW5hYmxlJyBiZWhh
dmlvciIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5zaW9uQmVoYXZp
b3IuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZh
bDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVEV4dGVuc2lvbkJl
aGF2aW9yOjppdGVyYXRvciBpdGVyID0gbUV4dGVuc2lvbkJlaGF2aW9yLmZpbmQobmFtZSk7Cisg
ICAgaWYgKGl0ZXIgIT0gbUV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKQorICAgIHsKKyAgICAgICAg
aXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBwcDo6RGlhZ25vc3RpY3M6OlNldmVyaXR5IHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpF
UlJPUjsKKyAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6
CisgICAgICAgIHNldmVyaXR5ID0gcHA6OkRpYWdub3N0aWNzOjpFUlJPUjsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgIGNh
c2UgRUJoRGlzYWJsZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OldBUk5J
Tkc7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8oc2V2
ZXJpdHksIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iLCBuYW1l
LCAiaXMgbm90IHN1cHBvcnRlZCIpOworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5k
bGVWZXJzaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGtWZXJzaW9uID0gMTAwOworCisgICAgaWYgKHZlcnNpb24gIT0ga1ZlcnNpb24pCisgICAg
eworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB2
ZXJzaW9uOworICAgICAgICBzdGQ6OnN0cmluZyBzdHIgPSBzdHJlYW0uc3RyKCk7CisgICAgICAg
IG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciIsIHN0ciwgIm5vdCBz
dXBwb3J0ZWQiKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9ESVJFQ1RJVkVf
SEFORExFUl9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNp
bmNsdWRlICJjb21waWxlci9QcmFnbWEuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCIKKworY2xhc3MgVERpYWdub3N0aWNzOworCitjbGFz
cyBURGlyZWN0aXZlSGFuZGxlciA6IHB1YmxpYyBwcDo6RGlyZWN0aXZlSGFuZGxlcgoreworICBw
dWJsaWM6CisgICAgVERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhh
dmlvciwKKyAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsK
KyAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOworCisgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQorICAgIGNvbnN0IFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBtRXh0ZW5zaW9uQmVo
YXZpb3I7IH0KKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG1zZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJhZ21hKGNvbnN0IHBwOjpT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgdmFsdWUpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihj
b25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVWZXJzaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKTsKKworICBwcml2YXRlOgorICAgIFRQ
cmFnbWEgbVByYWdtYTsKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlv
cjsKKyAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfRElSRUNUSVZFX0hBTkRMRVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCShyZXZpc2lv
biAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5z
aW9uQmVoYXZpb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNyw5ICs3LDExIEBACiAjaWZuZGVmIF9F
WFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCiAjZGVmaW5lIF9FWFRFTlNJT05fQkVIQVZJT1Jf
SU5DTFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlIDxtYXA+
CisjaW5jbHVkZSA8c3RyaW5nPgogCi10eXBlZGVmIGVudW0gewordHlwZWRlZiBlbnVtCit7CiAg
ICAgRUJoUmVxdWlyZSwKICAgICBFQmhFbmFibGUsCiAgICAgRUJoV2FybiwKQEAgLTE5LDIwICsy
MSwxNyBAQCB0eXBlZGVmIGVudW0gewogCiBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmVoYXZpb3JT
dHJpbmcoVEJlaGF2aW9yIGIpCiB7Ci0gICAgc3dpdGNoKGIpIHsKLSAgICAgIGNhc2UgRUJoUmVx
dWlyZToKLSAgICAgICAgcmV0dXJuICJyZXF1aXJlIjsKLSAgICAgIGNhc2UgRUJoRW5hYmxlOgot
ICAgICAgICByZXR1cm4gImVuYWJsZSI7Ci0gICAgICBjYXNlIEVCaFdhcm46Ci0gICAgICAgIHJl
dHVybiAid2FybiI7Ci0gICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgIHJldHVybiAiZGlz
YWJsZSI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2go
YikKKyAgICB7CisgICAgICBjYXNlIEVCaFJlcXVpcmU6IHJldHVybiAicmVxdWlyZSI7CisgICAg
ICBjYXNlIEVCaEVuYWJsZTogcmV0dXJuICJlbmFibGUiOworICAgICAgY2FzZSBFQmhXYXJuOiBy
ZXR1cm4gIndhcm4iOworICAgICAgY2FzZSBFQmhEaXNhYmxlOiByZXR1cm4gImRpc2FibGUiOwor
ICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi10eXBlZGVmIFRNYXA8VFN0
cmluZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisvLyBNYXBwaW5nIGJldHdlZW4g
ZXh0ZW5zaW9uIG5hbWUgYW5kIGJlaGF2aW9yLgordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmlu
ZywgVEJlaGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CiAKICNlbmRpZiAvLyBfRVhURU5TSU9O
X1RBQkxFX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIFRTdHJpbmcgRGVmYXVsdFByZWNpc2lvbkZy
YWdtZW50KAogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4K
IC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFu
dHMoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMpCitzdGF0aWMgVFN0cmluZyBC
dWlsdEluQ29uc3RhbnRzKFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMgJnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4Nyw3ICs0ODcs
OSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFNoCiAgICAgcyA8PCAi
Y29uc3QgaW50IGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNl
cy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKICAgICBzIDw8ICJjb25zdCBp
bnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1h
Z2VVbml0cyA8PCAiOyI7CiAgICAgcyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7
IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyA8PCAiOyI7CisKKyAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVS
U19TUEVDKQorICAgICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8
IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsK
IH0KQEAgLTUxMyw3ICs1MTUsNyBAQCB2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShTaFNoYWRl
clR5cGUgCiAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9y
dGVkIik7CiAgICAgfQogCi0gICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5Db25z
dGFudHMocmVzb3VyY2VzKSk7CisgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5D
b25zdGFudHMoc3BlYywgcmVzb3VyY2VzKSk7CiB9CiAKIHZvaWQgSWRlbnRpZnlCdWlsdElucyhT
aFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCkBAIC01MjYsMTEgKzUyOCwyMiBA
QCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8KICAgICBz
d2l0Y2godHlwZSkgewogICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29y
ZCIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
Q29vcmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nv
bG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb2xvciwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlw
ZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENv
b3JkIiksICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9p
bnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9u
dEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmlu
ZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7
CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwg
Z2xfRnJhZ0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KKyAg
ICAgICAgLy8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2
YWlsYWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNf
U1BFQykgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
W2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
RGF0YSwgICAgNCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01peENvbG9yIiksICAg
ICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAg
ICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAgICAgICAgICAgICAgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQsIHRydWUpKSk7CisgICAgICAgIH0K
KwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKQEAgLTYyMCw3
ICs2MzMsOCBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAKICAg
ICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNo
KHR5cGUpIHsKLSAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjogeworICAgIGNhc2UgU0hfRlJB
R01FTlRfU0hBREVSOgorICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7
CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAg
ICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRh
LCA0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVz
b3VyY2VzLk1heERyYXdCdWZmZXJzKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIklu
aXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFs
aXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBB
bGxvY2F0ZSBhIFRMUyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxp
emVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRs
c2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgw
ICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5p
dGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19G
cmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJz
ZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJz
ZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1Zh
bHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9
IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgp
OiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3
IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxl
IHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7Cisg
ICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAg
ICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBp
bmRleCBub3QgaW5pdGFsaXplZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhy
ZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRl
eHQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNr
aW5nIGZvciBzcGVlZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNl
Q29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFs
dWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4
dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsNCAr
MTMsMTQgQEAgYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIGJvb2wgSW5pdGlhbGl6ZUds
b2JhbFBhcnNlQ29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7CiAKK3N0cnVjdCBU
UGFyc2VDb250ZXh0OwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRl
cjsKK2V4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7
CisjZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0
eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4
dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKICNlbmRp
ZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
CShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzczLDcgKzM3Myw3IEBAIFRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXQKIC8vIHRoZWlyIG9wZXJhdG9yIHRv
IEVPcFNlcXVlbmNlLgogLy8KIC8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5vZGUsIHdoaWNoIGNv
dWxkIGJlIHRoZSBvbmUgcGFzc2VkIGluIGlmCi0vLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdh
dGUuCisvLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUgYnV0IG5vIG9wZXJhdG9yIHdhcyBz
ZXQuCiAvLwogVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3Bl
cmF0b3IoVEludGVybU5vZGUqIG5vZGUsIFRPcGVyYXRvciBvcCwgVFNvdXJjZUxvYyBsaW5lKQog
ewpAQCAtNTkyLDEwICs1OTIsMTAgQEAgVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNl
bGVjdGlvbgogICAgIC8vCiAKICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKLSAgICAgICAgaWYgKGNvbmQtPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldEJDb25zdCgpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxOworICAgICAg
ICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlUGFpci5ub2RlMSA/IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUxLCBFT3BT
ZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTEtPmdldExpbmUoKSkgOiBOVUxMOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTI7CisgICAgICAgICAgICByZXR1cm4g
bm9kZVBhaXIubm9kZTIgPyBzZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlUGFpci5ub2RlMiwgRU9w
U2VxdWVuY2UsIG5vZGVQYWlyLm5vZGUyLT5nZXRMaW5lKCkpIDogTlVMTDsKICAgICB9CiAKICAg
ICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgbm9k
ZVBhaXIubm9kZTEsIG5vZGVQYWlyLm5vZGUyKTsKQEAgLTY1Niw2ICs2NTYsNyBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvCiAgICAgLy8gTWFrZSBhIHNlbGVjdGlv
biBub2RlLgogICAgIC8vCiAgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJt
U2VsZWN0aW9uKGNvbmQsIHRydWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBl
KCkpOworICAgIG5vZGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOwogICAgIG5vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gbm9kZTsKQEAgLTE0
NDQsOSArMTQ0NSwzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMK
ICAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90
ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXpl
KCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCi12
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxl
JiBwVGFibGUpCi17Ci0gICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7Ci0gICAgcHJhZ21hVGFibGUg
PSBuZXcgVFByYWdtYVRhYmxlKCk7Ci0gICAgKnByYWdtYVRhYmxlID0gcFRhYmxlOwotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw5IEBAIFRTdHJpbmcgbWFwTG9uZ05hbWUoaW50IGlk
LCBjb25zdCBUU3RyaW4KICAgICBzdHJlYW0gPDwgIndlYmdsXyI7CiAgICAgaWYgKGlzR2xvYmFs
KQogICAgICAgICBzdHJlYW0gPDwgImciOwotICAgIHN0cmVhbSA8PCBpZCA8PCAiXyI7CisgICAg
c3RyZWFtIDw8IGlkOworICAgIGlmIChuYW1lWzBdICE9ICdfJykKKyAgICAgICAgc3RyZWFtIDw8
ICJfIjsKICAgICBzdHJlYW0gPDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElG
SUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgpKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDEw
ICs2LDEyIEBACiAKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAKKyNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxl
Y3QuaCIKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TZWFyY2hTeW1ib2wuaCIKKyNpbmNsdWRlICJjb21waWxlci9EZXRlY3REaXNj
b250aW51aXR5LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
QEAgLTIwLDEzICsyMiwxMyBAQCBuYW1lc3BhY2Ugc2gKIFRTdHJpbmcgc3RyKGludCBpKQogewog
ICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAg
c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CiAgICAgcmV0dXJuIGJ1
ZmZlcjsKIH0KIAogT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0
KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQp
CiB7Ci0gICAgbVVuZm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRTZWxlY3QoY29udGV4dCwgdGhpcyk7
CisgICAgbVVuZm9sZFNob3J0Q2lyY3VpdCA9IG5ldyBVbmZvbGRTaG9ydENpcmN1aXQoY29udGV4
dCwgdGhpcyk7CiAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CiAKICAgICBtVXNlc1RleHR1
cmUyRCA9IGZhbHNlOwpAQCAtMzgsNiArNDAsMTIgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChU
UGFyc2VDb250ZXh0ICZjbwogICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKICAgICBtVXNl
c1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFs
c2U7CisgICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRM
b2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJl
Q3ViZUxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7
CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxz
ZTsKICAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKQEAgLTc1LDIwICs4MywyNiBAQCBPdXRw
dXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbVNjb3BlRGVwdGggPSAw
OwogCiAgICAgbVVuaXF1ZUluZGV4ID0gMDsKKworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51
aXR5ID0gZmFsc2U7CisgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOworICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwogfQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExT
TCgpCiB7Ci0gICAgZGVsZXRlIG1VbmZvbGRTZWxlY3Q7CisgICAgZGVsZXRlIG1VbmZvbGRTaG9y
dENpcmN1aXQ7CiB9CiAKIHZvaWQgT3V0cHV0SExTTDo6b3V0cHV0KCkKIHsKKyAgICBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eSA9IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobUNvbnRleHQu
dHJlZVJvb3QpOworCiAgICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8v
IE91dHB1dCB0aGUgYm9keSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhl
IGhlYWRlcgogICAgIGhlYWRlcigpOwogCi0gICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1I
ZWFkZXIuY19zdHIoKTsKLSAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIo
KTsKKyAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAg
bUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwgbUJvZHkuY19zdHIoKTsKIH0KIAogVEluZm9TaW5r
QmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCkBAIC0yMDUsMjUgKzIxOSwxMSBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CiAgICAg
ICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlIGZldGNoIGZ1bmN0aW9u
cyAiZmxpcCIgdGhlIFkgY29vcmRpbmF0ZSBpbiBvbmUgd2F5IG9yIGFub3RoZXIuIFRoaXMgaXMg
YmVjYXVzZSB0ZXh0dXJlcyBhcmUgc3RvcmVkCi0gICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUg
T3BlbkdMIGNvbnZlbnRpb24sIGkuZS4gKDAsIDApIGlzICJib3R0b20gbGVmdCIsIHJhdGhlciB0
aGFuIHRoZSBEM0QgY29udmVudGlvbiB3aGVyZSAoMCwgMCkKLSAgICAgICAgLy8gaXMgInRvcCBs
ZWZ0Ii4gU2luY2UgdGhlIEhMU0wgdGV4dHVyZSBmZXRjaCBmdW5jdGlvbnMgZXhwZWN0IHRleHR1
cmVzIHRvIGJlIHN0b3JlZCBhY2NvcmRpbmcgdG8gdGhlIEQzRAotICAgICAgICAvLyBjb252ZW50
aW9uLCB0aGUgWSBjb29yZGluYXRlIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMgaXMgYWRqdXN0
ZWQgdG8gY29tcGVuc2F0ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHNpbXBsZXN0IGNh
c2UgaXMgdGV4dHVyZTJEIHdoZXJlIHRoZSBtYXBwaW5nIGlzIFkgLT4gMS1ZLCB3aGljaCBtYXBz
IFswLCAxXSAtPiBbMSwgMF0uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSB0ZXh0dXJlMkRQ
cm9qIGZ1bmN0aW9ucyBhcmUgbW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIHRoZSBwcm9qZWN0aW9u
IGRpdmlkZXMgYnkgZWl0aGVyIFogb3IgVy4gRm9yIHRoZSB2ZWMzCi0gICAgICAgIC8vIGNhc2Us
IHRoZSBtYXBwaW5nIGlzIFkgLT4gWi1ZIG9yIFkvWiAtPiAxLVkvWiwgd2hpY2ggYWdhaW4gbWFw
cyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBGb3IgY3ViZSB0ZXh0
dXJlcyB0aGUgbWFwcGluZyBpcyBZIC0+IC1ZLCB3aGljaCBtYXBzIFstMSwgMV0gLT4gWzEsIC0x
XS4gVGhpcyBpcyBub3Qgc3VmZmljaWVudCBvbiBpdHMgb3duIGZvciB0aGUKLSAgICAgICAgLy8g
K1kgYW5kIC1ZIGZhY2VzLCB3aGljaCBhcmUgbm93IG9uIHRoZSAid3Jvbmcgc2lkZXMiIG9mIHRo
ZSBjdWJlLiBUaGlzIGlzIGNvbXBlbnNhdGVkIGZvciBieSBleGNoYW5naW5nIHRoZQotICAgICAg
ICAvLyArWSBhbmQgLVkgZmFjZXMgZXZlcnl3aGVyZSBlbHNlIHRocm91Z2hvdXQgdGhlIGNvZGUu
Ci0gICAgICAgIAogICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQp
XG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRChzLCBmbG9hdDIodC54LCAxIC0gdC55KSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIK
ICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC0yMzIsNyArMjMyLDcgQEAg
dm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIDEgLSB0LnksIDAsIGJpYXMpKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBiaWFzKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6
OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0
LngsIHQueiAtIHQueSwgMCwgdC56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEcHJvaihzLCBmbG9hdDQodC54LCB0LncgLSB0LnksIHQueiwgdC53KSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgogICAgICAgICAgICAg
ICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjU1
LDEyICsyNTUsMTIgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDMgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCAxIC0g
KHQueSAvIHQueiksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCAxIC0g
KHQueSAvIHQudyksIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgZmxvYXQzKHQueCwgLXQueSwgdC56KSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTI3OCw3ICsyNzgsNzMgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VC
RSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0Lngs
IC10LnksIHQueiwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlc2UgKkxvZDAgaW50cmluc2ljcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBHTCBm
cmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLyBUaGV5IGFyZSB1c2VkIHRvIHNhbXBsZSB1c2lu
ZyBkaXNjb250aW51b3VzIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRExvZDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCwgdC55LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
TG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9k
KHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRFByb2pMb2QwKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxv
ZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1w
bGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgor
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBm
bG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJD
VUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54
LCB0LnksIHQueiwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtODk3LDcgKzk2Myw3IEBAIGJvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RT
dHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxk
TmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtOTczLDkgKzEwMzksOSBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZp
ZWxkVHlwZSA9ICgqZmllbGRzKVtpXS50eXBlOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmll
bGRUeXBlLT5nZXRGaWVsZE5hbWUoKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
Ii4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Umln
aHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxk
VHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29y
YXRlRmllbGQoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRU
eXBlKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEpCiAg
ICAgICAgICAgICAgICAgewpAQCAtMTA1NCwxMiArMTEyMCwxNiBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJl
YWs7CiAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFu
c3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBvdXQgPDwgInMiIDw8
IG1VbmZvbGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+
Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xMTMxLDkgKzEyMDEsMzYgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LAogICAgICAgY2FzZSBFT3BGcmFj
dDogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAg
ICBicmVhazsKICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImxlbmd0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7
IGJyZWFrOwotICAgICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZGR4KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wREZkeTog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtZGR5KCIsICIiLCAiKSkiKTsgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmd2lkdGgoIiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVP
cERGZHg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9k
MEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBpZihtSW5z
aWRlRGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIiwgMC4wKSIpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZGR5KCIsICIiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BGd2lkdGg6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8
fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIi
LCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbnk6ICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImFsbCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwpAQCAtMTE3MSwxMiArMTI2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQgdmkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXRwdXRMaW5l
RGlyZWN0aXZlKCgqc2l0KS0+Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChpc1Np
bmdsZVN0YXRlbWVudCgqc2l0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
dHJhdmVyc2VTdGF0ZW1lbnRzKCpzaXQpOwogCiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4i
OwogICAgICAgICAgICAgfQpAQCAtMTI5MCw1OSArMTM4Miw2NCBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRTdHJpbmcg
bmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKLSAgICAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3Ry
aW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSAi
bWFpbiIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8IChtT3V0cHV0TG9kMEZ1bmN0aW9u
ID8gIkxvZDAoIiA6ICIoIik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
bmFtZSA9PSAibWFpbiIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgImdsX21haW4oIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRl
KG5hbWUpIDw8ICIoIjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRl
cm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdl
dFNlcXVlbmNlKCk7CiAKLSAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNl
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
JmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6
ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKIAotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQor
ICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3lt
Ym9sTm9kZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChzeW1ib2wtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZENvbnN0cnVjdG9yKHN5bWJvbC0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1
Y3Qoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3lt
Ym9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRUeXBlTmFt
ZSgpKSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7CisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXpl
KCkgLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNlcXVl
bmNlLmVyYXNlKHNlcXVlbmNlLmJlZ2luKCkpOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNlcXVlbmNlLnNpemUoKSA+IDEp
CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBzZXF1ZW5jZVsxXS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRFbmRMaW5lKCkpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAifVxuIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0IDw8ICJ9
XG4iOwogCi0gICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYgIW1PdXRwdXRMb2QwRnVuY3Rp
b24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIm1haW4iKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dExvZDBGdW5jdGlv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTEz
NTAsNTQgKzE0NDcsMTA2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmkKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250
aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAobG9kMCA/ICJMb2QwKCIgOiAiKCIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4
dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmUyRCgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJE
TG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQog
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlMkRQcm9qKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QwKCI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQogICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlh
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAidGV4dHVyZTJETG9kIikKICAgICAgICAgICAgICAgICAgICAgewpAQCAtMTU4MywxMSAr
MTczMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpCiAKICAg
ICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICJzIiA8PCBtVW5mb2xkU2VsZWN0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICAgICAg
b3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgo
KTsKICAgICB9CiAgICAgZWxzZSAgLy8gaWYvZWxzZSBzdGF0ZW1lbnQKICAgICB7Ci0gICAgICAg
IG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlvbigpKTsKKyAgICAgICAg
bVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOwogCiAg
ICAgICAgIG91dCA8PCAiaWYoIjsKIApAQCAtMTYwMCwxMSArMTc0OSwxMSBAQCBib29sIE91dHB1
dEhMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpCiAKICAgICAgICAgaWYgKG5vZGUtPmdldFRy
dWVCbG9jaygpKQogICAgICAgICB7Ci0gICAgICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0
VHJ1ZUJsb2NrKCkpOwogICAgICAgICB9CiAKICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShu
b2RlLT5nZXRMaW5lKCkpOwotICAgICAgICBvdXQgPDwgIjt9XG4iOworICAgICAgICBvdXQgPDwg
Ijtcbn1cbiI7CiAKICAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKICAgICAgICAg
ewpAQCAtMTYxNCwxMCArMTc2MywxMCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpCiAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CiAKICAgICAgICAgICAgIG91dHB1
dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAg
ICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
IHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOwogCiAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldEZhbHNlQmxvY2soKS0+Z2V0TGluZSgpKTsK
LSAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CisgICAgICAgICAgICBvdXQgPDwgIjtcbn1cbiI7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2MzEsNiArMTc4MCwxMyBAQCB2b2lkIE91dHB1dEhM
U0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50CiAKIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAgICBib29sIHdhc0Rpc2NvbnRp
bnVvdXMgPSBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAgICBpZiAoIW1JbnNpZGVEaXNj
b250aW51b3VzTG9vcCkKKyAgICB7CisgICAgICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9
IGNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkobm9kZSk7CisgICAgfQorCiAgICAgaWYgKGhhbmRs
ZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
Njc2LDcgKzE4MzIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwg
CiAKICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQogICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Qm9k
eSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdl
dEJvZHkoKSk7CiAgICAgfQogCiAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5l
KCkpOwpAQCAtMTY5NCw2ICsxODUwLDggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIAogCiAgICAgb3V0IDw8ICJ9XG4iOwogCisgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gd2FzRGlzY29udGludW91czsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
MTczMiw2ICsxODkwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjp0cmF2ZXJzZVN0YXRl
bWVudHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5v
ZGUpKQorICAgIHsKKyAgICAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdC0+dHJhdmVyc2Uobm9kZSk7
CisgICAgfQorCisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKIGJvb2wgT3V0cHV0SExT
TDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKQEAgLTE3NTksOSAr
MTkyNywxMSBAQCBib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIEhhbmRsZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTUgaXRl
cmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNEOSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIEhhbmRs
ZSBsb29wcyB3aXRoIG1vcmUgdGhhbiAyNTQgaXRlcmF0aW9ucyAodW5zdXBwb3J0ZWQgYnkgRDNE
OSkgYnkgc3BsaXR0aW5nIHRoZW0KKy8vIChUaGUgRDNEIGRvY3VtZW50YXRpb24gc2F5cyAyNTUg
aXRlcmF0aW9ucywgYnV0IHRoZSBjb21waWxlciBjb21wbGFpbnMgYXQgYW55dGhpbmcgbW9yZSB0
aGFuIDI1NCkuCiBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiB7CisgICAgY29uc3QgaW50IE1BWF9MT09QX0lURVJBVElPTlMgPSAyNTQ7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKICAgICAvLyBQYXJzZSBsb29wcyBvZiB0
aGUgZm9ybToKQEAgLTE4NzcsMTQgKzIwNDcsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVF
eGNlc3NpdmVMb29wKFRJbgogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9
IChsaW1pdCAtIGluaXRpYWwpIC8gaW5jcmVtZW50OwogCi0gICAgICAgICAgICBpZiAoaXRlcmF0
aW9ucyA8PSAyNTUpCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBNQVhfTE9PUF9JVEVS
QVRJT05TKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAv
LyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hp
bGUgKGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBj
bGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oMjU1LCBpdGVyYXRp
b25zKTsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3Jl
bWVudCAqIHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwogCiAgICAg
ICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBlZExp
bWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCiAKQEAgLTE5MTUsOCArMjA4NSw4IEBAIGJvb2wgT3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KICAgICAgICAgICAgICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICI7
fVxuIjsKIAotICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gMjU1ICogaW5jcmVtZW50OwotICAg
ICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gMjU1OworICAgICAgICAgICAgICAgIGluaXRpYWwg
Kz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVy
YXRpb25zIC09IE1BWF9MT09QX0lURVJBVElPTlM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMjAxMiw3ICsyMTgyLDcgQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAgICAgICAgICAgIHN0
cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxk
TmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGUoZmllbGQu
Z2V0RmllbGROYW1lKCkpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwpAQCAtMjA2NSw2ICsyMjM1LDggQEAg
VFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgICAgcmV0
dXJuICJzYW1wbGVyQ1VCRSI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6
CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTM1LDcgKzIzMDcsNyBA
QCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKIAotICAgICAg
ICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmll
bGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGRlY29y
YXRlRmllbGQoZmllbGQuZ2V0RmllbGROYW1lKCksIHR5cGUpICsgYXJyYXlTdHJpbmcoZmllbGQp
ICsgIjtcbiI7CiAgICAgICAgIH0KIAogICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4iOwpAQCAt
MjQzNCw0ICsyNjA2LDE0IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVVbmlmb3JtKGNv
bnMKICAgICAKICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKIH0KKworVFN0cmluZyBPdXRw
dXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0dXJlLmdldFR5cGVOYW1lKCkuY29tcGFyZSgw
LCAzLCAiZ2xfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcp
OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgJKHJldmlzaW9uIDEy
MjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNM
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcgQEAKIAogbmFtZXNwYWNlIHNoCiB7Ci1j
bGFzcyBVbmZvbGRTZWxlY3Q7CitjbGFzcyBVbmZvbGRTaG9ydENpcmN1aXQ7CiAKIGNsYXNzIE91
dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogewpAQCAtMzMsNiArMzMsNyBAQCBj
bGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgc3RhdGljIFRTdHJp
bmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRl
Y29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFBy
ZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMg
VFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlw
ZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5n
ICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpOwogCiAgIHByb3RlY3RlZDoKICAgICB2
b2lkIGhlYWRlcigpOwpAQCAtNDcsNiArNDgsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1M
b29wKik7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCop
OwogCisgICAgdm9pZCB0cmF2ZXJzZVN0YXRlbWVudHMoVEludGVybU5vZGUgKm5vZGUpOwogICAg
IGJvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpOwogICAgIGJvb2wgaGFu
ZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSk7CiAgICAgdm9pZCBvdXRwdXRUcmlw
bGV0KFZpc2l0IHZpc2l0LCBjb25zdCBUU3RyaW5nICZwcmVTdHJpbmcsIGNvbnN0IFRTdHJpbmcg
JmluU3RyaW5nLCBjb25zdCBUU3RyaW5nICZwb3N0U3RyaW5nKTsKQEAgLTYyLDcgKzY0LDcgQEAg
Y2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIFRTdHJpbmcgc3Ry
dWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKIAogICAgIFRQYXJzZUNvbnRleHQg
Jm1Db250ZXh0OwotICAgIFVuZm9sZFNlbGVjdCAqbVVuZm9sZFNlbGVjdDsKKyAgICBVbmZvbGRT
aG9ydENpcmN1aXQgKm1VbmZvbGRTaG9ydENpcmN1aXQ7CiAgICAgYm9vbCBtSW5zaWRlRnVuY3Rp
b247CiAKICAgICAvLyBPdXRwdXQgc3RyZWFtcwpAQCAtODQsNiArODYsMTIgQEAgY2xhc3MgT3V0
cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZTsKICAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKICAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVMb2Q7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7CisgICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRExvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDA7CisgICAg
Ym9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXM7CiAgICAgYm9vbCBt
VXNlc0RlcHRoUmFuZ2U7CiAgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKICAgICBib29sIG1Vc2Vz
UG9pbnRDb29yZDsKQEAgLTEzMiw2ICsxNDAsMTAgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVycwogICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKIAogICAgIGlu
dCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcworCisgICAgYm9v
bCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsKKyAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rp
b247CisgICAgYm9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CiB9OwogfQogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9QYXJzZUhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDMzICsxMCw3IEBACiAj
aW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNs
dWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCi0KLWV4dGVybiAiQyIgewotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vz
c29yKCk7Ci1leHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQ
cmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotfQotCi1zdGF0
aWMgdm9pZCBSZXBvcnRJbmZvKFRJbmZvU2lua0Jhc2UmIHNpbmssCi0gICAgICAgICAgICAgICAg
ICAgICAgIFRQcmVmaXhUeXBlIHR5cGUsIFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQotewotICAgIC8qIFZDKysgZm9y
bWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLwotICAg
IHNpbmsucHJlZml4KHR5cGUpOwotICAgIHNpbmsubG9jYXRpb24obG9jKTsKLSAgICBzaW5rIDw8
ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIgPDwgZXh0cmFJbmZvIDw8
ICJcbiI7Ci19Ci0KLXN0YXRpYyB2b2lkIERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb25zdCBURXh0
ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQotewotICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2
aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKLSAgICAgICAg
IGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotICAgICAgICBQcmVkZWZpbmVJ
bnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSAgICB9Ci19CisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIgogCiAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwogLy8KQEAgLTUyLDcgKzI2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZp
ZWxkcyhjbwogewogICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKICAg
ICBpZiAoZmllbGRzLm51bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE0LDIwICs4OCwy
MCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvCiAgICAgICAgICAg
ICBmaWVsZFNldFtpXSA9IGVzdHBxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0
aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0
c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2Ui
LCAgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgaWYgKGZpZWxkU2V0W2ld
ICE9IGZpZWxkU2V0W2ktMV0pIHsKLSAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCAtIHZlY3RvciBjb21wb25lbnQgZmllbGRzIG5vdCBmcm9tIHRoZSBzYW1lIHNldCIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTE0OSwyMCArMTIzLDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
cGFyc2VNYXRyaXhGaWVsZHMoY28KICAgICBmaWVsZHMuY29sID0gLTE7CiAKICAgICBpZiAoY29t
cFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5n
dGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKICAgICBpZiAoY29tcFN0cmluZ1swXSA9PSAnXycpIHsKICAgICAgICAgaWYgKGNvbXBTdHJp
bmdbMV0gPCAnMCcgfHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNl
bGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKICAgICAgICAgZmll
bGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CiAgICAgfSBlbHNlIGlmIChjb21wU3RyaW5n
WzFdID09ICdfJykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3Ry
aW5nWzBdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBm
aWVsZHMud2hvbGVSb3cgPSB0cnVlOwpAQCAtMTcwLDcgKzE0NCw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY28KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY29t
cFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8CiAgICAgICAgICAgICBj
b21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAg
IGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5n
LmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBm
aWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpZWxkcy5yb3cgPSBjb21wU3RyaW5nWzBdIC0g
JzAnOwpAQCAtMTc4LDcgKzE1Miw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhG
aWVsZHMoY28KICAgICB9CiAKICAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxk
cy5jb2wgPj0gbWF0U2l6ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNl
bGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjAzLDMw
ICsxNzcsMjggQEAgdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykKIHsKLSAgICBjaGFyIGV4dHJh
SW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwgZXh0
cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJbmZv
KSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNM
b2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUp
OworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
CiAKLSAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhFcnJvciwgbG9jLCByZWFz
b24sIHRva2VuLCBleHRyYUluZm8pOwotCi0gICAgdmFfZW5kKG1hcmtlcik7CiAgICAgKytudW1F
cnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNo
YXIqIHRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKSB7Ci0gICAgY2hhciBleHRyYUluZm9bNTEyXTsKLSAgICB2YV9saXN0
IG1hcmtlcjsKLSAgICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKLQotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdhcm5pbmcsIGxv
YywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBleHRyYUluZm8pIHsKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9j
OworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzcmNMb2MuZmlsZSwgJnNyY0xvYy5saW5lKTsK
KyAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpXQVJOSU5HLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNMb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7
Cit9CiAKLSAgICB2YV9lbmQobWFya2VyKTsKK3ZvaWQgVFBhcnNlQ29udGV4dDo6dHJhY2UoY29u
c3QgY2hhciogc3RyKQoreworICAgIGRpYWdub3N0aWNzLndyaXRlRGVidWcoc3RyKTsKIH0KIAog
Ly8KQEAgLTIzNCw4ICsyMDYsMTAgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3Vy
Y2VMb2MgbAogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNv
bnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCiB7Ci0gICAgZXJyb3Io
bGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAotICAgICAg
ICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0g
ZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQg
ZnJvbSAnIiA8PCByaWdodCA8PCAiJyB0byAnIiA8PCBsZWZ0IDw8ICInIjsKKyAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgZXJyb3IobGluZSwg
IiIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNDMsOSArMjE3LDExIEBA
IHZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUKIC8vCiB2b2lkIFRQYXJz
ZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcg
b3BlcmFuZCkKIHsKLSAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAot
ICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5k
IG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAg
ICAgICAgIG9wLCBvcGVyYW5kLmNfc3RyKCkpOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKKyAgICBleHRyYUluZm9TdHJlYW0gPDwgIm5vIG9wZXJhdGlvbiAnIiA8PCBv
cCA8PCAiJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgIiA8PCBvcGVyYW5k
IAorICAgICAgICAgICAgICAgICAgICA8PCAiIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNv
bnZlcnNpb24pIjsKKyAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0u
c3RyKCk7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgZXh0cmFJ
bmZvLmNfc3RyKCkpOwogfQogCiAvLwpAQCAtMjUzLDEwICsyMjksMTEgQEAgdm9pZCBUUGFyc2VD
b250ZXh0Ojp1bmFyeU9wRXJyb3IoaW50IGxpbgogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6Ymlu
YXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmlu
ZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZXMgIiwgb3As
IAotICAgICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVm
dC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAnJXMnIGFuZCAiCi0gICAgICAgICAgICAiYSByaWdodCBv
cGVyYW5kIG9mIHR5cGUgJyVzJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9u
KSIsIAotICAgICAgICAgICAgb3AsIGxlZnQuY19zdHIoKSwgcmlnaHQuY19zdHIoKSk7CisgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVhbSA8
PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1o
YW5kIG9wZXJhbmQgb2YgdHlwZSAnIiA8PCBsZWZ0IAorICAgICAgICAgICAgICAgICAgICA8PCAi
JyBhbmQgYSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyIgPDwgcmlnaHQgPDwgIicgKG9yIHRoZXJl
IGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJh
bmQgdHlwZXMgIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsgCiB9CiAKIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBwcmVjaXNpb24s
IFRCYXNpY1R5cGUgdHlwZSl7CkBAIC0yNjUsMTMgKzI0MiwxMyBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soCiAgICAgc3dpdGNoKCB0eXBlICl7CiAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKLSAgICAg
ICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIs
ICIiLCAiIiApOworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lm
aWVkIGZvciAoZmxvYXQpIiwgIiIgKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWJ0SW50OgogICAgICAgICBpZiggcHJlY2lz
aW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVj
aXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvciggbGlu
ZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiApOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0zMTMsNyArMjkwLDcgQEAg
Ym9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAgICAgICAgICAgICAg
ICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRb
dmFsdWVdID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZh
bHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCwgIiIs
ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBz
d2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3ApOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MzI0LDcgKzMwMSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQK
ICAgICAgICAgZGVmYXVsdDogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3ApOwogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTM2NCw3ICszNDEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1
ZUVycm9yQ2hlY2soaW50CiAgICAgfQogCiAgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlO
b2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1
ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
cmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzc5LDEw
ICszNTYsMTggQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAg
IC8vCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2Fn
ZS4KICAgICAvLwotICAgIGlmIChzeW1Ob2RlKQotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFs
dWUgcmVxdWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9sLCBtZXNzYWdlKTsKLSAgICBl
bHNlCi0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiKCVzKSIs
IG1lc3NhZ2UpOworICAgIGlmIChzeW1Ob2RlKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJcIiIgPDwgc3lt
Ym9sIDw8ICJcIiAoIiA8PCBtZXNzYWdlIDw8ICIpIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0
cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgIigiIDw8IG1lc3NhZ2UgPDwgIikiOworICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxp
bmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTgsNyArMzgzLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludAogICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiLCAiIik7CisgICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDE0LDcgKzM5OSw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEkKICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9u
IHJlcXVpcmVkIiwgdG9rZW4sICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRl
Z2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTQzMCw3ICs0MTUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9yQ2hlY2so
aW50CiAgICAgaWYgKGdsb2JhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZXJyb3Io
bGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworICAgIGVy
cm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4pOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC00NDksMjQgKzQzNCwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnJlc2VydmVkRXJyb3JDaGVjayhpCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc2VydmVkRXJy
TXNnID0gInJlc2VydmVkIGJ1aWx0LWluIG5hbWUiOwogICAgIGlmICghc3ltYm9sVGFibGUuYXRC
dWlsdEluTGV2ZWwoKSkgewogICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDMsICJn
bF8iKSA9PSAwKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImds
XyIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIik7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2hhZGVy
U3BlYyA9PSBTSF9XRUJHTF9TUEVDKSB7CisgICAgICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNo
YWRlclNwZWMpKSB7CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3
ZWJnbF8iKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJ3ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRF
cnJNc2csICJ3ZWJnbF8iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNywgIl93ZWJnbF8i
KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJf
d2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNn
LCAiX3dlYmdsXyIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQyAmJiBp
ZGVudGlmaWVyLmNvbXBhcmUoMCwgNCwgImNzc18iKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJjc3NfIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuZmluZCgiX18iKSAhPSBUU3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgICAvL2Vycm9yKGxp
bmUsICJUd28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUg
dXNlLiIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIsICIiKTsKLSAgICAgICAgICAgIC8vcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
ICJUd28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNl
LiIsIGxpbmUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZXJyb3Io
bGluZSwgImlkZW50aWZpZXJzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVz
IChfXykgYXJlIHJlc2VydmVkIGFzIHBvc3NpYmxlIGZ1dHVyZSBrZXl3b3JkcyIsIGlkZW50aWZp
ZXIuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNTI3LDUxICs1MTQsNTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVy
cm9yQ2hlYwogICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYg
KHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQ
YXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5l
ZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVy
ZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJj
b25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3Ii
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1hdHJpeEluTWF0cml4
ICYmICF0eXBlLT5pc0FycmF5KCkpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKSAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXgg
ZnJvbSBtYXRyaXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiLCAi
Iik7CisgICAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBtYXRyaXggZnJvbSBtYXRy
aXggY2FuIG9ubHkgdGFrZSBvbmUgYXJndW1lbnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChvdmVyRnVsbCkgewot
ICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwg
IiIpOworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVj
dG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0
cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBl
cnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0
Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9l
cyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9y
Iik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghdHlwZS0+aXNNYXRy
aXgoKSB8fCAhbWF0cml4SW5NYXRyaXgpIHsKICAgICAgICAgaWYgKChvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QgJiYgc2l6ZSAhPSAxICYmIHNpemUgPCB0eXBlLT5nZXRPYmplY3RTaXplKCkpIHx8
CiAgICAgICAgICAgICAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgPCB0eXBlLT5n
ZXRPYmplY3RTaXplKCkpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBk
YXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3Rpb24iLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAibm90IGVub3VnaCBkYXRhIHByb3ZpZGVkIGZvciBjb25zdHJ1
Y3Rpb24iLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgVEludGVybVR5cGVkICp0eXBlZCA9IG5vZGUgPyBub2RlLT5nZXRB
c1R5cGVkKCkgOiAwOwogICAgIGlmICh0eXBlZCA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3Rv
ciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMg
bm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBl
ZC0+Z2V0QmFzaWNUeXBlKCkpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVy
dCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwg
ImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTg1LDcg
KzU3Miw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0b3JFcnJvckNoZWMKIGJvb2wg
VFBhcnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlk
ZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiBwdWJUeXBlKQogewogICAgIGlmIChwdWJUeXBl
LnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGlu
ZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNTk5LDcgKzU4Niw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6dm9pZEVycm9yQ2hlY2soaW50IGwKIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9v
bEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRJbnRlcm1UeXBlZCogdHlwZSkKIHsKICAgICBp
ZiAodHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCB0eXBlLT5pc0FycmF5KCkgfHwg
dHlwZS0+aXNNYXRyaXgoKSB8fCB0eXBlLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBlcnJv
cihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9IAogCkBAIC02MTMsNyArNjAwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
Ojpib29sRXJyb3JDaGVjayhpbnQgbAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQogewogICAgIGlmIChwVHlwZS50
eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8IChwVHlwZS5z
aXplID4gMSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBl
Y3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYzMSw3
ICs2MTgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGluCiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5
cGUudHlwZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBnZXRCYXNpY1N0cmluZyhw
VHlwZS50eXBlKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NDMs
NyArNjMwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvcgogewog
ICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAm
JgogICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhw
VHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNl
ZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllcikp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjU4LDcgKzY0NSw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm8KIHsKICAgICBpZiAo
KHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAKICAgICAg
ICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5v
dCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwg
dHlwZS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC02OTAsMTQgKzY3NywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hl
Y2soCiB7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhwci0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CiAgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3RhbnQtPmdldEJh
c2ljVHlwZSgpICE9IEVidEludCkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBt
dXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIsICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVz
c2lvbiIsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgc2l6ZSA9IGNv
bnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKIAogICAgIGlmIChz
aXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6
ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKICAgICAgICAgc2l6ZSA9IDE7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcxMyw3ICs3MDAsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2soCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKIHsKICAgICBp
ZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09
IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlz
IG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
dGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTczMSw3ICs3MTgsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soCiAgICAgLy8gQ2FuIHRoZSB0eXBl
IGJlIGFuIGFycmF5PwogICAgIC8vCiAgICAgaWYgKHR5cGUuYXJyYXkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBkZWNsYXJlIGFycmF5cyBvZiBhcnJheXMiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc2Nywz
NCArNzU0LDM0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGludCAKIAog
ICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewogICAgICAgICAg
ICAgZGVsZXRlIHZhcmlhYmxlOwotICAgICAgICAgICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVS
Uk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGUgZXhwZWN0ZWQi
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KIAogICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7
CiAgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcg
bm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRp
b24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVu
dGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBl
KFRUeXBlKHR5cGUpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24g
b2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEg
ZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBUVHlwZSogdCA9IHZhcmlhYmxlLT5nZXRBcnJh
eUluZm9ybWF0aW9uVHlwZSgpOwogICAgICAgICB3aGlsZSAodCAhPSAwKSB7CiAgICAgICAgICAg
ICBpZiAodC0+Z2V0TWF4QXJyYXlTaXplKCkgPiB0eXBlLmFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJoaWdoZXIgaW5kZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0
aGUgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5Iiwg
aWRlbnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHQtPnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CkBA
IC04MTYsNyArODAzLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVElu
dAogICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOwogICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJv
bFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZidWlsdEluKTsKICAgICBpZiAoc3ltYm9s
ID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBu
b2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIgdW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgbm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKQEAgLTgyOCwxNCArODE1LDExIEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnQKICAgICAvLyBpdHMgYW4gZXJyb3IKICAgICBp
ZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEYXRhIikgewogICAgICAgICBUU3ltYm9s
KiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1aWx0
SW4pOwotICAgICAgICBpZiAoZnJhZ0RhdGEgPT0gMCkgewotICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMgbm90
IGRlZmluZWQiLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChmcmFnRGF0YSk7CiAKICAgICAgICAgaW50IGZyYWdEYXRhVmFsdWUgPSBz
dGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigpWzBdLmdl
dElDb25zdCgpOwogICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7Ci0gICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2ZSBhIG1h
eCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJbIiwgImdsX0ZyYWdEYXRhIGNhbiBvbmx5IGhhdmUgYSBtYXgg
YXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhEcmF3QnVmZmVycyIpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04NzAsNyArODU0LDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZQogICAgIC8vCiAgICAgaWYgKHR5cGUucXVh
bGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9y
YXJ5OwotICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25z
dCcgbXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBp
bml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtODkxLDcgKzg3NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVy
cm9yQ2hlY2soaW4KICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRU
eXBlKHR5cGUpKTsKIAogICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAg
ICAgdmFyaWFibGUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkwNiw3ICs4OTAsNyBA
QCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGluCiBib29sIFRQYXJzZUNv
bnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRR
dWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKQogeyAgICAKICAgICBpZiAocXVh
bGlmaWVyICE9IEV2cUNvbnN0ICYmIHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAg
ICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCBvbiBmdW5jdGlvbiBwYXJhbWV0
ZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1
YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4p
IHsKQEAgLTkyNCw4ICs5MDgsOSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVj
ayhpbnQgCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGlu
ZSwgY29uc3QgVFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsK
LSAgICBpZiAoaXRlciA9PSBleHRlbnNpb25CZWhhdmlvci5lbmQoKSkgeworICAgIGNvbnN0IFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOworICAg
IFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmZp
bmQoZXh0ZW5zaW9uLmNfc3RyKCkpOworICAgIGlmIChpdGVyID09IGV4dEJlaGF2aW9yLmVuZCgp
KSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwg
ImlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTM1
LDggKzkyMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjaygKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2Fy
bikgewotICAgICAgICBUU3RyaW5nIG1zZyA9ICJleHRlbnNpb24gIiArIGV4dGVuc2lvbiArICIg
aXMgYmVpbmcgdXNlZCI7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fy
bmluZywgbXNnLmNfc3RyKCksIGxpbmUpOworICAgICAgICB3YXJuaW5nKGxpbmUsICJleHRlbnNp
b24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIGJlaW5nIHVzZWQiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtOTQ1LDggKzkyOSwyMyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewotICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoZXh0ZW5zaW9uKTsK
LSAgICByZXR1cm4gKGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpOworICAgIGNvbnN0
IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwor
ICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dGJlaGF2aW9y
LmZpbmQoZXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZXh0YmVoYXZpb3IuZW5kKCkp
OworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQg
bGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAg
cHA6OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobGluZSwgJmxvYy5m
aWxlLCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKGxv
YywgZXh0TmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVBy
YWdtYURpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFs
dWUpCit7CisgICAgcHA6OlNvdXJjZUxvY2F0aW9uIGxvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2Mo
bGluZSwgJmxvYy5maWxlLCAmbG9jLmxpbmUpOworICAgIGRpcmVjdGl2ZUhhbmRsZXIuaGFuZGxl
UHJhZ21hKGxvYywgbmFtZSwgdmFsdWUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
QEAgLTk3MCwxMiArOTY5LDEyIEBAIGNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6Zmlu
ZEZ1bmMKICAgICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1l
KCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3Zlcmxv
YWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVj
dGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKQEAgLTEwMDMsNyArMTAwMiw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRp
YWxpemVyKFQKICAgICAgICAgLy8KICAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZp
ZGVudGlmaWVyLCB0eXBlKTsKICAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJp
YWJsZSkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNl
ZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIAogICAgICAgICAgICAgLy8gcG9wIHdp
bGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkKQEAgLTEwMTUsNyArMTAxNCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKICAgICAvLwogICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKICAgICBpZiAo
KHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAm
JiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5v
dCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5v
dCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAvLwpAQCAtMTAyNCwxMyArMTAyMywxNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJ
bml0aWFsaXplcihUCiAKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAg
IGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkg
ewotICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwg
Ij0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiJyIgPDwgdmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRDb21wbGV0ZVN0cmluZygpIDw8ICInIjsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIg
YXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlICE9
IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9u
LW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKLSAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwNDksNyArMTA1MSwxMCBA
QCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUCiAgICAgICAgICAgICBD
b25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7CiAgICAg
ICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAi
PSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAg
ICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICInIiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJ
bmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBj
YW5ub3QgYXNzaWduIHRvIiwgIj0iLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEyMzQsMTQgKzEyMzksMTQgQEAgVEludGVy
bVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdQogICAgICAgICBicmVhazsKIAogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24i
LCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9u
IiwgIiIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5v
ZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwogICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTI3MCw4ICsxMjc1LDEyIEBAIFRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3QKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihub2RlLT5nZXRBc1R5cGVk
KCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgJWQg
ZnJvbSAnJXMnIHRvICclcyciLCBwYXJhbUNvdW50LAotICAgICAgICAgICAgICAgIG5vZGUtPmdl
dEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljU3RyaW5nKCksIHR5cGUtPmdldEJhc2ljU3Ry
aW5nKCkpOworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICIgPDwgcGFy
YW1Db3VudCAKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZnJvbSAnIiA8PCBub2RlLT5n
ZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpCisgICAgICAgICAgICAgICAg
ICAgICAgICA8PCAiJyB0byAnIiA8PCB0eXBlLT5nZXRCYXNpY1N0cmluZygpIDw8ICInIjsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
ICAgICAgICByZWNvdmVyKCk7CiAgICAgfQogCkBAIC0xMjkzLDE1ICsxMzAyLDEzIEBAIFRJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWMKICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5OwogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CiAgICAgICAgIHVuaW9uQXJy
YXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBB
U1NFUlQodW5pb25BcnJheSk7CiAKLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7ICAvLyB0aGlz
IGVycm9yIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGJlIHJhaXNlZAotICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnRVbmlvbiBub3Qg
aW5pdGlhbGl6ZWQgaW4gYWRkQ29uc3RWZWN0b3JOb2RlIGZ1bmN0aW9uIiwgbGluZSk7Ci0gICAg
ICAgICAgICByZWNvdmVyKCk7Ci0KKyAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7CiAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7IC8vIFRoZSBub2RlIGhh
cyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBvciBhIHRl
bXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKLSAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiKTsKICAg
ICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTMxMSw3ICsxMzE4LDEw
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWMKIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CiAgICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAidmVj
dG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgZmllbGRzLm9mZnNldHNbaV0g
PDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNf
c3RyKCkpOwogICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbaV0gPSAwOwogICAgICAgICB9CkBAIC0xMzM1LDcgKzEzNDUsMTAgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdAogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0
ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKICAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJbIiwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICcl
ZCciLCBpbmRleCk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsK
KyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwg
ZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZWNvdmVyKCk7CiAgICAgICAgIGluZGV4ID0g
MDsKICAgICB9CkBAIC0xMzQ1LDcgKzEzNTgsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZENvbnN0TWF0CiAgICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiKTsK
ICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTM2OSw3ICsxMzgy
LDEwIEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnIKICAgICBhcnJh
eUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAKICAgICBpZiAoaW5kZXggPj0gbm9kZS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRleCk7CisgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4
IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7
CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0KQEAgLTEzODAs
NyArMTM5Niw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnIKICAg
ICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewotICAgICAgICBl
cnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIsICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJy
b3IiKTsKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQxNiw3
ICsxNDMyLDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cgogCiAg
ICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFy
cmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8g
dHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAgICB9IGVsc2Ug
ewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUi
LCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8g
dGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xNDMzLDcgKzE0NDksNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVy
U3RydWN0RGVjbGFyYXRpCiAgICAgLy8gVGhleSBhcmVuJ3QgYWxsb3dlZCBpbiBHTFNMIGVpdGhl
ciwgYnV0IHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMgaGVyZQogICAgIC8vIHNvIHdlIGRvbid0IHJl
bHkgb24gdGhlIEdMU0wgY29tcGlsZXIgdG8gY2F0Y2ggaXQuCiAgICAgaWYgKHN0cnVjdE5lc3Rp
bmdMZXZlbCA+IDEpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJFbWJlZGRlZCBzdHJ1Y3Qg
ZGVmaW5pdGlvbnMgYXJlIG5vdCBhbGxvd2VkIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDUzLDcgKzE0NjksNyBAQCBjb25zdCBpbnQg
a1dlYkdMTWF4U3RydWN0TmVzdGluZyA9IDQ7CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soVFNvdXJjZUxvYyBsaW5lLCBjb25zdCBUVHlwZSYgZmllbGRUeXBl
KQogewotICAgIGlmIChzaGFkZXJTcGVjICE9IFNIX1dFQkdMX1NQRUMpIHsKKyAgICBpZiAoIWlz
V2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMTQ2NCw4ICsxNDgwLDExIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVz
dGluZ0Vycm9yQ2gKICAgICAvLyBXZSdyZSBhbHJlYWR5IGluc2lkZSBhIHN0cnVjdHVyZSBkZWZp
bml0aW9uIGF0IHRoaXMgcG9pbnQsIHNvIGFkZAogICAgIC8vIG9uZSB0byB0aGUgZmllbGQncyBz
dHJ1Y3QgbmVzdGluZy4KICAgICBpZiAoMSArIGZpZWxkVHlwZS5nZXREZWVwZXN0U3RydWN0TmVz
dGluZygpID4ga1dlYkdMTWF4U3RydWN0TmVzdGluZykgewotICAgICAgICBlcnJvcihsaW5lLCAi
IiwgIiIsICJSZWZlcmVuY2Ugb2Ygc3RydWN0IHR5cGUgJXMgZXhjZWVkcyBtYXhpbXVtIHN0cnVj
dCBuZXN0aW5nIG9mICVkIiwKLSAgICAgICAgICAgICAgZmllbGRUeXBlLmdldFR5cGVOYW1lKCku
Y19zdHIoKSwga1dlYkdMTWF4U3RydWN0TmVzdGluZyk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJSZWZlcmVu
Y2Ugb2Ygc3RydWN0IHR5cGUgIiA8PCBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKSAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICIgZXhjZWVkcyBtYXhpbXVtIHN0cnVjdCBuZXN0aW5nIG9mICIg
PDwga1dlYkdMTWF4U3RydWN0TmVzdGluZzsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZv
ID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIiIsIGV4
dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDgy
LDEwNSArMTUwMSwxNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoaW50IGNvdW50LCBjb25zdCBjaGFy
CiAgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQogICAgICAgICByZXR1
cm4gMTsKIAotICAgIC8vIHNldHVwIHByZXByb2Nlc3Nvci4KLSAgICBpZiAoSW5pdFByZXByb2Nl
c3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBEZWZpbmVFeHRlbnNpb25NYWNyb3MoY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IpOwotCiAgICAgaWYgKGdsc2xhbmdfaW5pdGlhbGl6ZShj
b250ZXh0KSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBnbHNsYW5nX3NjYW4oY291bnQsIHN0
cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKLSAgICBpbnQgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNv
bnRleHQpOworICAgIGludCBlcnJvciA9IGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5n
dGgsIGNvbnRleHQpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIGVycm9yID0gZ2xzbGFuZ19w
YXJzZShjb250ZXh0KTsKIAogICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7Ci0gICAgRmlu
YWxpemVQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0
LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKLX0KLQotT1NfVExTSW5kZXggR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotYm9vbCBJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKQotewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICAvLwotICAgIC8vIEFsbG9jYXRlIGEg
VExTIGluZGV4LgotICAgIC8vCi0gICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxv
Y1RMU0luZGV4KCk7Ci0gICAgCi0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0g
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0KLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwotCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRl
eCh0bHNpSW5kZXgpOwotfQotCi1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQot
ewotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgp
OiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9
IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgewotICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBh
cnNlQ29udGV4dCgpOwotICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRl
IHRocmVhZCBwYXJzZSBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKLSAgICBPU19TZXRU
TFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZyZWVQYXJzZUNvbnRleHQoKQotewotICAgIGlmIChHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBh
c3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBp
bml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKLSAgICBp
ZiAobHBQYXJzZUNvbnRleHQpCi0gICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVy
cm9ycyA9PSAwKSA/IDAgOiAxOwogfQogCi1UUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFs
UGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcg
Zm9yIHNwZWVkCi0gICAgLy8KIAotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5s
cEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHJldmlzaW9uIDEyMjczOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDggKzYsMTAgQEAKICNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVE
RURfCiAjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiY29tcGls
ZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJjb21w
aWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgogCkBAIC0xOCwxMyArMjAsNiBAQCBzdHJ1
Y3QgVE1hdHJpeEZpZWxkcyB7CiAgICAgaW50IGNvbDsKIH07CiAKLXN0cnVjdCBUUHJhZ21hIHsK
LSAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0K
LSAgICBib29sIG9wdGltaXplOwotICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRhYmxlIHBy
YWdtYVRhYmxlOwotfTsKLQogLy8KIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxl
cyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KIC8vIHRoZXkgY2Fu
IGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KQEAgLTMz
LDggKzI4LDYgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIFRQYXJzZUNvbnRleHQoVFN5
bWJvbFRhYmxlJiBzeW10LCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dCwgVEludGVybWVkaWF0ZSYg
aW50ZXJtLCBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIGludCBvcHRpb25z
LCBib29sIGNoZWNrc1ByZWNFcnJvcnMsIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGgsIFRJbmZvU2lu
ayYgaXMpIDoKICAgICAgICAgICAgIGludGVybWVkaWF0ZShpbnRlcm0pLAogICAgICAgICAgICAg
c3ltYm9sVGFibGUoc3ltdCksCi0gICAgICAgICAgICBleHRlbnNpb25CZWhhdmlvcihleHQpLAot
ICAgICAgICAgICAgaW5mb1NpbmsoaXMpLAogICAgICAgICAgICAgc2hhZGVyVHlwZSh0eXBlKSwK
ICAgICAgICAgICAgIHNoYWRlclNwZWMoc3BlYyksCiAgICAgICAgICAgICBjb21waWxlT3B0aW9u
cyhvcHRpb25zKSwKQEAgLTQ4LDEyICs0MSwxMiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAg
ICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rp
b25SZXR1cm5zVmFsdWUoZmFsc2UpLAogICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3Jz
KGNoZWNrc1ByZWNFcnJvcnMpLAotICAgICAgICAgICAgY29udGV4dFByYWdtYSh0cnVlLCBmYWxz
ZSksCisgICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCisgICAgICAgICAgICBkaXJlY3RpdmVI
YW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgcHJlcHJvY2Vzc29yKCZkaWFn
bm9zdGljcywgJmRpcmVjdGl2ZUhhbmRsZXIpLAogICAgICAgICAgICAgc2Nhbm5lcihOVUxMKSB7
ICB9CiAgICAgVEludGVybWVkaWF0ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWls
ZCBhIHBhcnNlIHRyZWUKICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJv
bCB0YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNl
ZAotICAgIFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3I7ICAvLyBtYXBwaW5n
IGJldHdlZW4gc3VwcG9ydGVkIGV4dGVuc2lvbnMgYW5kIGN1cnJlbnQgYmVoYXZpb3IuCi0gICAg
VEluZm9TaW5rJiBpbmZvU2luazsKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAg
ICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVu
cGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBs
YW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2Vi
R0wuCiAgICAgaW50IGNvbXBpbGVPcHRpb25zOwpAQCAtNjcsMTUgKzYwLDE5IEBAIHN0cnVjdCBU
UGFyc2VDb250ZXh0IHsKICAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8v
IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBw
YXJzZWQKICAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24t
dm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAgICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9y
czsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxl
IGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNpdC4KLSAg
ICBzdHJ1Y3QgVFByYWdtYSBjb250ZXh0UHJhZ21hOwogICAgIFRTdHJpbmcgSGFzaEVyck1zZzsK
ICAgICBib29sIEFmdGVyRU9GOworICAgIFREaWFnbm9zdGljcyBkaWFnbm9zdGljczsKKyAgICBU
RGlyZWN0aXZlSGFuZGxlciBkaXJlY3RpdmVIYW5kbGVyOworICAgIHBwOjpQcmVwcm9jZXNzb3Ig
cHJlcHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBUSW5mb1NpbmsmIGluZm9T
aW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJyb3Io
VFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0g
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwogICAgIHZvaWQgd2FybmluZyhUU291
cmNlTG9jIGxvYywgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pOworICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOworICAgIHZvaWQgdHJhY2UoY29uc3Qg
Y2hhciogc3RyKTsKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0b3JG
aWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgaW50IGxp
bmUpOwpAQCAtMTA1LDcgKzEwMiwxMyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9v
bCBub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKICAgICBib29sIHBhcmFtRXJyb3JD
aGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFs
aWZpZXIsIFRUeXBlKiB0eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IFRTdHJpbmcmKTsKKworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lv
bkJlaGF2aW9yKCk7IH0KICAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4
dGVuc2lvbik7CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKKworICAgIGNvbnN0IFRQ
cmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7
IH0KKyAgICB2b2lkIGhhbmRsZVByYWdtYURpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciog
bmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwogCiAgICAgYm9vbCBjb250YWluc1NhbXBsZXIoVFR5
cGUmIHR5cGUpOwogICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBh
Z2dyTm9kZSk7CkBAIC0xMzUsMTMgKzEzOCw0IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKIGlu
dCBQYVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10sCiAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CiAKLXR5cGVkZWYgVFBhcnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7Ci1l
eHRlcm4gVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotI2Rl
ZmluZSBHbG9iYWxQYXJzZUNvbnRleHQgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKLQotdHlwZWRl
ZiBzdHJ1Y3QgVFRocmVhZFBhcnNlQ29udGV4dFJlYwotewotICAgIFRQYXJzZUNvbnRleHQgKmxw
R2xvYmFsUGFyc2VDb250ZXh0OwotfSBUVGhyZWFkUGFyc2VDb250ZXh0OwotCiAjZW5kaWYgLy8g
X1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAK
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCiAKQEAgLTE1
OCwxMCArMTU5LDEwIEBAIHZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ24K
IAogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhlIGFzc2VydCBtZXNzYWdlLiAgSXQn
cyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAg
ICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBh
bGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNp
emVvZihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJUl1IGJ5dGUgYWxsb2NhdGlv
biBhdCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkp
OwogI2Vsc2UKLSAgICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1h
Z2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgc25wcmlu
dGYoYXNzZXJ0TXNnLCBzaXplb2YoYXNzZXJ0TXNnKSwgIlBvb2xBbGxvYzogRGFtYWdlICVzICV6
dSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgbG9jVGV4
dCwgc2l6ZSwgZGF0YSgpKTsKICNlbmRpZgogICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xB
bGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkFHTUFfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfUFJBR01BX0hfCisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICAvLyBCeSBk
ZWZhdWx0IG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb24gYW5kIGRlYnVnIGlzIHR1cm5lZCBvZmYu
CisgICAgVFByYWdtYSgpIDogb3B0aW1pemUodHJ1ZSksIGRlYnVnKGZhbHNlKSB7IH0KKyAgICBU
UHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKworICAg
IGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxF
Ul9QUkFHTUFfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1JFTkFNRV9G
VU5DVElPTgorI2RlZmluZSBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLworLy8gUmVuYW1lcyBhIGZ1bmN0aW9uLCBpbmNs
dWRpbmcgaXRzIGRlY2xhcmF0aW9uIGFuZCBhbnkgY2FsbHMgdG8gaXQuCisvLworY2xhc3MgUmVu
YW1lRnVuY3Rpb24gOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFJl
bmFtZUZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcmIG9sZEZ1bmN0aW9uTmFtZSwgY29uc3QgVFN0cmlu
ZyYgbmV3RnVuY3Rpb25OYW1lKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpCisgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKKyAgICAsIG1O
ZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQorCisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHsK
KyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgaWYgKChvcCA9
PSBFT3BGdW5jdGlvbiB8fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUo
KSA9PSBtT2xkRnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgbm9kZS0+c2V0TmFtZShtTmV3RnVu
Y3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IFRTdHJpbmcmIG1PbGRGdW5jdGlvbk5hbWU7CisgICAgY29uc3QgVFN0cmluZyYgbU5l
d0Z1bmN0aW9uTmFtZTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9O
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEzIEBACiAKIGNs
YXNzIExvbmdOYW1lTWFwOwogY2xhc3MgVENvbXBpbGVyOworY2xhc3MgVERlcGVuZGVuY3lHcmFw
aDsKKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBi
YXNlZCBvbiB0aGUgV2ViR0wgc3BlYywKKy8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCisv
LworYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKIAogLy8KIC8vIFRo
ZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIu
CkBAIC03MCw2ICs3Nyw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwog
ICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZC4KICAg
ICBib29sIGRldGVjdFJlY3Vyc2lvbihUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV3cml0
ZXMgYSBzaGFkZXIncyBpbnRlcm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFk
ZXJzIHNwZWMuCisgICAgdm9pZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQg
dGhlIG1pbmltdW0KICAgICAvLyBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMgQXBwZW5kaXggQS4KICAgICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUq
IHJvb3QpOwpAQCAtNzksNiArODgsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgbWFwTG9uZ1Zh
cmlhYmxlTmFtZXMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmpl
Y3QgY29kZS4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9
IDA7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgcGFzc2VzIHRoZSByZXN0cmlj
dGlvbnMgdGhhdCBhaW0gdG8gcHJldmVudCB0aW1pbmcgYXR0YWNrcy4KKyAgICBib29sIGVuZm9y
Y2VUaW1pbmdSZXN0cmljdGlvbnMoVEludGVybU5vZGUqIHJvb3QsIGJvb2wgb3V0cHV0R3JhcGgp
OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVy
cy4KKyAgICBib29sIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoVEludGVy
bU5vZGUqIHJvb3QpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90
IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCisgICAgLy8g
ZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQg
dmFsdWVzLgorICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25z
KGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0
ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lv
biAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVy
TGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxNCBAQCBzdGF0aWMgdm9pZCBn
ZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvCiAgICAgaW50IGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICBBU1NFUlQoY2hlY2tBY3Rp
dmVVbmlmb3JtQW5kQXR0cmliTWF4TGVuZ3RocyhoYW5kbGUsIGFjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGgpKTsKICAgICBzdHJuY3B5KG5hbWUsIHZhckluZm8ubmFtZS5jX3N0cigpLCBhY3Rp
dmVVbmlmb3JtQW5kQXR0cmliTGVuZ3RoKTsKKyAgICBuYW1lW2FjdGl2ZVVuaWZvcm1BbmRBdHRy
aWJMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhp
cyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KICAgICAgICAgaW50IG1heE1hcHBl
ZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKICAgICAgICAgQVNTRVJUKGNo
ZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAg
ICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCk7CisgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0
aCAtIDFdID0gMDsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTIyNzM4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlICJjb21waWxlci9TeW1i
b2xUYWJsZS5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogI2luY2x1ZGUgPGFsZ29yaXRobT4K
IAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKIC8vCiAvLyBUVHlwZSBoZWxwZXIg
ZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgogLy8KQEAgLTU2LDcgKzU3LDcgQEAgdm9p
ZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYQogICAgIG1hbmdsZWROYW1lICs9
IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0Fy
cmF5KCkpIHsKICAgICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVk
IiwgYXJyYXlTaXplKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwg
YXJyYXlTaXplKTsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwogICAgICAgICBtYW5nbGVk
TmFtZSArPSBidWY7CiAgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
IAogI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCiAKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0
SExTTC5oIgogCiBUcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHJldmlzaW9uIDEyMjczOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBV
bmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVy
YXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9V
bmZvbGRTZWxlY3QuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0jaW5jbHVk
ZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLVVuZm9sZFNlbGVj
dDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1
dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCi17Ci0g
ICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKLX0KLQotdm9pZCBVbmZvbGRTZWxlY3Q6OnRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKQotewotICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJ
bmRleDsKLSAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSBy
ZXdpbmRJbmRleDsKLX0KLQotYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQotewotICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7Ci0KLSAgICBpZiAobm9kZS0+dXNlc1Rl
cm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7
Ci0KLSAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUo
KSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOwotCi0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
ICAgIG91dCA8PCAiaWYoIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAg
IG91dCA8PCAiKVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIG1UZW1wb3JhcnlJ
bmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1w
b3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIjtcbiIKLSAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAiZWxzZVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2Nr
KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAi
OwotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8PCAiO1xuIgot
ICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFVuZm9sZFNlbGVjdDo6dmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBpbnQgcmV3aW5k
SW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Ci0KLSAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQotICAg
IHsKLSAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0
Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChub2RlLT5nZXRF
eHByZXNzaW9uKCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZl
cnNlKHRoaXMpOwotICAgIH0KLQotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4Owot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgVW5mb2xkU2VsZWN0OjpnZXROZXh0VGVtcG9y
YXJ5SW5kZXgoKQotewotICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKLX0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotLy8gVW5mb2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8g
b3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCi0vLwot
Ci0jaWZuZGVmIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotI2RlZmluZSBDT01QSUxFUl9VTkZP
TERTRUxFQ1RfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCi0KLW5hbWVzcGFjZSBzaAotewotY2xhc3MgT3V0
cHV0SExTTDsKLQotY2xhc3MgVW5mb2xkU2VsZWN0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
LXsKLSAgcHVibGljOgotICAgIFVuZm9sZFNlbGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBP
dXRwdXRITFNMICpvdXRwdXRITFNMKTsKLQotICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24gKm5vZGUpOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSk7Ci0KLSAgICBpbnQgZ2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7Ci0KLSAgcHJvdGVj
dGVkOgotICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OwotICAgIE91dHB1dEhMU0wgKmNvbnN0
IG1PdXRwdXRITFNMOwotCi0gICAgaW50IG1UZW1wb3JhcnlJbmRleDsKLX07Ci19Ci0KLSNlbmRp
ZiAgIC8vIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1l
bnRzLgorLy8gVGhlIHJlc3VsdHMgYXJlIGFzc2lnbmVkIHRvIHMjIHRlbXBvcmFyaWVzLCB3aGlj
aCBhcmUgdXNlZCBieSB0aGUgbWFpbiB0cmFuc2xhdG9yIGluc3RlYWQgb2YKKy8vIHRoZSBvcmln
aW5hbCBleHByZXNzaW9uLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNob3J0Q2ly
Y3VpdC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworVW5mb2xkU2hvcnRDaXJjdWl0
OjpVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAq
b3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkK
K3sKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOworfQorCit2b2lkIFVuZm9sZFNob3J0Q2lyY3Vp
dDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgaW50IHJld2luZEluZGV4ID0g
bVRlbXBvcmFyeUluZGV4OworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgIG1UZW1wb3Jh
cnlJbmRleCA9IHJld2luZEluZGV4OworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAg
ICAgLy8gInggfHwgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHRydWUgOiB5Iiwgd2hpY2ggdW5m
b2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0gdHJ1ZTsgZWxzZSBzID0geTsiLAorICAgICAgICAv
LyBhbmQgdGhlbiBmdXJ0aGVyIHNpbXBsaWZpZXMgZG93biB0byAiYm9vbCBzID0geDsgaWYoIXMp
IHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4
OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAg
ICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJp
ZighcyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9
ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgICAgICBvdXQgPDwg
In1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAg
ICAgLy8gInggJiYgeSIgaXMgZXF1aXZhbGVudCB0byAieCA/IHkgOiBmYWxzZSIsIHdoaWNoIHVu
Zm9sZHMgdG8gImJvb2wgczsgaWYoeCkgcyA9IHk7IGVsc2UgcyA9IGZhbHNlOyIsCisgICAgICAg
IC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZihz
KSBzID0geTsiLgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRl
eDsKKworICAgICAgICAgICAgb3V0IDw8ICJib29sIHMiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAg
ICAgICAgIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSAr
IDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgb3V0IDw8ICJzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICAgICAgbVRlbXBvcmFyeUlu
ZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKG1PdXRw
dXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIG91dCA8PCAi
aWYocyIgPDwgaSA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9
ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5v
ZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgICAgIG91dCA8
PCAiO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgICAgICBvdXQgPDwg
In1cbiI7CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRI
TFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICAvLyBVbmZvbGQgImIgPyB4IDogeSIgaW50byAi
dHlwZSBzOyBpZihiKSBzID0geDsgZWxzZSBzID0geTsiCisgICAgaWYgKG5vZGUtPnVzZXNUZXJu
YXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4Owor
CisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkp
IDw8ICIgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgImlmKCI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBv
dXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBtVGVtcG9yYXJ5SW5k
ZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9y
YXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldEZhbHNl
QmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6
OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgaW50IHJl
d2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgaWYgKG5vZGUtPmdldEluaXQoKSkK
KyAgICB7CisgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQor
ICAgIAorICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+
Z2V0RXhwcmVzc2lvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSByZXdpbmRJbmRl
eDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFVuZm9sZFNob3J0Q2lyY3VpdDo6Z2V0
TmV4dFRlbXBvcmFyeUluZGV4KCkKK3sKKyAgICByZXR1cm4gbVRlbXBvcmFyeUluZGV4Kys7Cit9
Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hv
cnRDaXJjdWl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVW5mb2xkU2hvcnRDaXJj
dWl0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHNob3J0LWNpcmN1aXRpbmcgb3BlcmF0
b3JzIGFzIGlmLWVsc2Ugc3RhdGVtZW50cworLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERT
SE9SVENJUkNVSVRfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCisK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Q
YXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91dHB1dEhMU0w7CisKK2Ns
YXNzIFVuZm9sZFNob3J0Q2lyY3VpdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBVbmZvbGRTaG9ydENpcmN1aXQoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0
cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAq
bm9kZSk7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2Rl
KTsKKworICAgIGludCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90ZWN0ZWQ6Cisg
ICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1
dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2VuZGlmICAgLy8g
Q09NUElMRVJfVU5GT0xEU0hPUlRDSVJDVUlUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3
IEBACiAKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKIAogbmFtZXNw
YWNlIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
YnVnLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaCIKIAogc3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwpAQCAtMjgs
NyArMjksNyBAQCB2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CiAgICAgICAg
IHZzbnByaW50ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKICAgICAgICAg
dmFfZW5kKGFyZ3MpOwogCi0gICAgICAgIHBhcnNlQ29udGV4dC0+aW5mb1NpbmsuZGVidWcgPDwg
YnVmOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyYWNlKGJ1Zik7CiAgICAgfQogfQogfSAgLy8g
ZXh0ZXJuICJDIgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZy5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDkgKzgsOSBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dDsKIGV4dGVybiBpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpOwogZXh0ZXJuIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4dGVybiBpbnQgZ2xzbGFuZ19z
Y2FuKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRlcm4g
aW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
bAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBH
TFNMIEVTIExFWEVSIChnbHNsYQogCiAldG9wewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTM4LDYgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNs
YQogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNsYW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgi
CiAKQEAgLTE1OSw2ICsxNjAsNyBAQCBPICAgICAgICAgICBbMC03XQogImV4dGVybiIgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZXh0ZXJuYWwiICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJpbnRlcmZhY2UiICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJsb25nIiAgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogInNob3J0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xNjYsNiArMTY4LDcgQEAgTyAgICAgICAgICAgWzAtN10K
ICJoYWxmIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImZp
eGVkIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAidW5zaWdu
ZWQiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzdXBlcnAiICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAiaW5wdXQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJvdXRwdXQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQpAQCAtMTczLDEyICsxNzYsMjEgQEAg
TyAgICAgICAgICAgWzAtN10KICJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQogImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CiAiaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMiIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRCIgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjNEIiAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIxRFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJEU2hhZG93IiB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNhbXBsZXIzRFJlY3QiIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiAic2l6ZW9mIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KICJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQpAQCAtMTkzLDcgKzIwNSw3IEBAIE8gICAgICAgICAgIFswLTddCiAK
IDBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDAp
OyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAwe099KyAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4
LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQotMHtEfSsg
ICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVt
YmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cisw
e0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3Rh
bCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiB7RH0r
ICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0
dXJuKElOVENPTlNUQU5UKTsgfQogCiB7RH0re0V9ICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmYg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNU
QU5UKTsgfQpAQCAtMjYwLDEwICsyNzIsMTUgQEAgTyAgICAgICAgICAgWzAtN10KIAogJSUKIAor
I2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogZXh0ZXJuICJDIiB7CiAvLyBQcmVwcm9j
ZXNzb3IgaW50ZXJmYWNlLgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgiCiAKK2V4dGVybiBpbnQgSW5pdFByZXByb2Nlc3NvcigpOworZXh0ZXJuIGludCBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworZXh0ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwogI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCiAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCiAg
ICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nh
bm5lcjsKQEAgLTI3MiwyNiArMjg5LDI2IEBAIGV4dGVybiAiQyIgewogdm9pZCBDUFBEZWJ1Z0xv
Z01zZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNv
bnRleHQtPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7CisgICAgY29u
dGV4dC0+dHJhY2UobXNnKTsKIH0KIAogdm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+d2Fybmlu
Zyh5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8s
IG1zZywgIiIpOwogfQogCiB2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7
CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBt
c2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICpt
c2cpCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRV
UF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIi
KTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogfQogCkBAIC0zNDYsODggKzM2MywxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIo
KQogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykK
IHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAi
b3B0aW1pemUiKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIo
XCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNb
Ml0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAg
ICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBl
eHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNd
LCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRv
IGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKLSAgICAgICAg
aWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVn
IHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0g
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycg
a2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21w
KHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5k
ZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdt
YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAg
ICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAgICAgICAvLyBG
b3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNh
bm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1l
bnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAgICAgICAvLyAj
cHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50
YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBu
YW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIGlmIChudW1U
b2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1sz
XSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdt
YVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAg
ICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAg
ICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBp
dGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAg
IH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAg
ICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6
Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3Ry
aW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9
IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9U
QUJMRQotICAgIH0KKworICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChz
dHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJl
Y3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0
cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAg
ICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC00NDksNzEgKzM5
MywzMyBAQCB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogICAgIGNvbnRleHQtPkhhc2hFcnJNc2cg
PSAiIjsKIH0KIAotVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQot
ewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCi0g
ICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIs
IGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgZWxzZSBpZiAoIXN0
cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaFdhcm47Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVo
YXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBF
QmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQotCiB2b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2
aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlv
cihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRl
cjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwg
ZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkg
ewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhh
dmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9IGNvbnRleHQtPmV4
dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZp
b3IuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlv
clZhbDsKLSAgICAgICAgfSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRlciA9IGNv
bnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7Ci0gICAgICAg
IGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7Ci0gICAgICAgICAgICBjYXNlIEVCaFJlcXVpcmU6
Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNpb24gJyIp
ICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAgICAgICBj
YXNlIEVCaFdhcm46Ci0gICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Ci0gICAgICAgICAgICAg
ICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3Vw
cG9ydGVkIjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICB9CisgICAgY29udGV4dC0+aGFu
ZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7CiB9CiB9
ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgog
CiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBt
YXhfc2l6ZSkpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChsZW4gPj0gbWF4X3Np
emUpIAotICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBjYW4n
dCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKyAgICBpbnQg
bGVuID0gMDsKIAotICAgIGJ1ZltsZW5dID0gJyAnOwotICAgIHJldHVybiBsZW4rMTsKKyNpZiBB
TkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICB5eWdl
dF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7CisgICAgbGVuID0g
dG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDogdG9rZW4udmFsdWUuc2l6ZSgpOwor
ICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICB5eXNldF9saW5lbm8oRW5jb2RlU291
cmNlTG9jKHRva2VuLmxvY2F0aW9uLmZpbGUsIHRva2VuLmxvY2F0aW9uLmxpbmUpLCB5eXNjYW5u
ZXIpOworI2Vsc2UKKyAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSk7CisjZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisKKyAgICBpZiAobGVuID49IG1heF9zaXpl
KQorICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJmbG93Iik7CisgICAg
ZWxzZSBpZiAobGVuID4gMCkKKyAgICAgICAgYnVmW2xlbisrXSA9ICcgJzsKKyAgICByZXR1cm4g
bGVuOwogfQogCiBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKQEAgLTU0NCw5
ICs0NTAsOSBAQCB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uCiAgICAg
c3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5l
cjsKIAogICAgIGlmIChjb250ZXh0LT5BZnRlckVPRikgewotICAgICAgICBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgICAgIGNvbnRl
eHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVkIEVPRiIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIp
OworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQpOwogICAg
IH0KICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CkBAIC01NjUsMjIgKzQ3MSw0MyBAQCBpbnQg
Z2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250CiAgICAgaWYgKHNjYW5uZXIgPT0g
TlVMTCkgcmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVy
KTsKKworI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJv
Y2Vzc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4o
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
LAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xh
bmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAg
ICB5eXJlc3RhcnQoTlVMTCwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgeXlzZXRfbGluZW5vKEVu
Y29kZVNvdXJjZUxvYygwLCAxKSwgY29udGV4dC0+c2Nhbm5lcik7CiAgICAgY29udGV4dC0+QWZ0
ZXJFT0YgPSBmYWxzZTsKLSAgICAKLSAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKworICAgIC8v
IEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgorI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5n
dGgpKQorICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgaWYgKEluaXRQcmVwcm9jZXNzb3Io
KSkKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5Q
YVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Ci0gICAgY3BwLT5Q
YUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3RoOwogICAgIGNw
cC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0p
OworICAgIGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIDE7CisjZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisKKyAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KKyAgICBjb25zdCBURXh0ZW5zaW9u
QmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAg
ICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2
aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIp
IHsKKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZWxzZQor
ICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbmRp
ZgorICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkp
CkBAIC04NCwyMSArODQsMjEgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBj
b250ZQogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMs
ICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZl
cnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAg
XAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwK
LSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMg
b25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBc
CiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBc
Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRl
cnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1
cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CkBAIC0xNjcsNyArMTY3LDcgQEAgdmFyaWFi
bGVfaWRlbnRpZmllcgogICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7
CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19z
dHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlw
ZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiBm
YWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wK
ICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMDYsNyArMjA2
LDcgQEAgcHJpbWFyeV9leHByZXNzaW9uCiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBm
b3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoJDEuaSkgPj0gKDEgPDwg
MTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29u
c3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIzNSw5ICsyMzUsOSBAQCBwb3N0Zml4
X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdl
cl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkg
JiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYg
KCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZl
Y3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlz
IG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xO
b2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5
cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9m
IHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQxLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7CkBAIC0yNTQsNyArMjU0LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFD
b25zdCkgewogICAgICAgICAgICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEtPmlzTWF0
cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEkMS0+
aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rpb24gb3V0
IG9mIHJhbmdlICciIDw8ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7CkBAIC0y
NjcsNyArMjcwLDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEt
PmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2YgcmFu
Z2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICIn
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxNiw3IEBAIHBvc3Rm
aXhfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERf
U0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFy
cmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM2MSw3IEBAIHBvc3Rm
aXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndo
b2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIu
IiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNj
YWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoMCk7CkBAIC0zNzMsNyArMzc5LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAg
ICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnN0IFRU
eXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAg
IGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBm
aWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC00MDUsMTMgKzQxMSwxMyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBz
ZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhh
bmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0
b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAg
ICAgICB9CkBAIC01MDAsOSArNTA2LDEwIEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJh
SW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNf
Y2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRy
YUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJ
bnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtNTI2LDcgKzUzMyw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+
Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFP
dXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+
Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2Rl
LT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBv
ciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJD
b25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFt
ZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTU4LDcgQEAgZnVuY3Rpb25fY2FsbF9vcl9tZXRo
b2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9U
IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUs
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02NDcsNyAr
NjU0LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMg
dHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFz
aWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcsMTIgKzEwMTQsMTIgQEAgZnVuY3Rpb25fcHJv
dG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlv
bio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKICAg
ICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5U
eXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUg
cmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5j
dGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUo
KS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMt
PmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdl
dFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBx
dWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAi
Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAk
MS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtMTA2MCw3ICsxMDY3LDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVy
cwogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3Qg
aXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZv
aWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJl
IGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlw
ZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQsNyArMTA4MSw3IEBAIGZ1bmN0aW9uX2hlYWRl
cl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3BlY2lmaWVk
X3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxpZmllciAh
PSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVu
Y3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQg
Zm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBt
YWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0xMDk1LDcg
KzExMDIsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAg
OiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0
Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNl
IG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5z
dHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZykpCkBAIC0xMTkxLDcgKzExOTgsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlzdAogICAg
IHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAgIGlmICgk
MS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIg
ZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMzA1LDcgQEAgc2luZ2xl
X2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExF
RlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQg
YXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwog
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3lt
Ym9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlw
ZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsxMzcxLDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9u
CiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIg
ZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0NDUsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24KIC8vICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1i
b2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0
cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmlu
aXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRl
ICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8vICAgICAg
ICB9CkBAIC0xNDUwLDI2ICsxNDU3LDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAg
ICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwg
ImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0
eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZp
cnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCiAgICAg
ICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAk
MS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50eXBlID09
IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAg
JCQgPSAkMjsKQEAgLTE2NTQsNyArMTY2MSw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAg
ICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBs
ZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJz
YW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY3MCw3IEBAIHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3Rhbmds
ZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQg
dHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZ
KCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBAIC0xOTY2LDE0ICsxOTczLDE0IEBAIGZvcl9y
ZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQKICAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7
CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxv
d2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7CiAgICAg
fQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJy
ZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFr
LCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk4OCw3IEBAIGp1bXBfc3RhdGVtZW50CiAgICAgfCBS
RVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2
YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE5ODks
MTAgKzE5OTYsMTAgQEAganVtcF9zdGF0ZW1lbnQKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxpbmUpOwogICAgICAgICBjb250
ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5j
dXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJu
IGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYgKCooY29u
dGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hp
bmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MDM3LDcgKzIwNDQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24g
YWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7
CkBAIC0yMDQ3LDcgKzIwNTQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgIC8vCiAg
ICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09ICJtYWluIikgewogICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIo
cykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRl
cihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtMjA3OSw3
ICsyMDg2LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIC8vIEluc2Vy
dCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAg
ICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmlu
c2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlv
biIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTIxMTYsOSArMjEyMyw4IEBAIGZ1bmN0aW9uX2RlZmluaXRp
b24KIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBh
bmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBpbmZvcm1h
dGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVl
Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250
ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERl
YnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQt
PnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERl
YnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoJDMgJiYgJDMtPmdl
dEFzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5k
TGluZSgkMy0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0RW5kTGluZSgpKTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfbGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3
ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOTEsNiArMTkx
LDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CiB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUgKllZX0JVRkZFUl9TVEFURTsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlf
U0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9z
aXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAogI2RlZmlu
ZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKQEAg
LTIwNCw3ICsyMDksNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZF
CiAgICAgICovCiAgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAogICAgICAgICAgICAg
ZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAgICAgeXlfc2l6
ZV90IHl5bDtcCiAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAogICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwK
ICAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XApAQCAtMjI2LDExICsyMzEsNiBA
QCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFCiAKICNkZWZpbmUgdW5w
dXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlw
ZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCkBAIC0yNDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQog
CS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRp
bmcgRU9CCiAJICogY2hhcmFjdGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXpl
X3QgeXlfbl9jaGFyczsKIAogCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4s
IHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93
IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2
b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1QKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3Nj
YW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5
Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVu
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMsOCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0
YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgogCSp5eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVm
X3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9P
Rl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05VTV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwK
ICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2lu
Zm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQz
Ml90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQyNl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEz
NiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwgIDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAg
IDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDExOSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5
MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwg
IDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAgMywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDEx
NiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwgIDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwg
ICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEwMSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAg
MCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwgIDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwK
LSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDExMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIyLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAot
ICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAwLCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0
LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAs
ICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAgOTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDks
ICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAg
ICAgOTAsICAgNTYsICAgMjksICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
MzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcsICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIs
ICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAgMTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
ODMsICAgODQsICAgODUsICAgOTAsCi0KLSAgICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4
MSwgICA4MiwgICAgNywgICA3NywgICA3OCwgICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwg
ICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5
MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2
NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAgICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5
MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5
MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwK
LQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAgICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAg
IDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMs
ICAxNTMsCisgICAgICAxMzgsICAxNDQsICAxNDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAx
MzAsICAxMzksICAxMzcsCisgICAgICAxNDMsICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUs
ICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisgICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgOTgsICAxMjgsICAxNDcsICAxMjksICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAg
ICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAxMTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAx
MTYsCisgICAgICAxMDYsICAxMTcsICAxMDcsICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQs
ICAxMDAsICAxMDEsCisgICAgICAgIDAsICAgIDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAx
MjUsICAxMjEsICAxMjMsICAxMjIsCisgICAgICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAgIDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwg
ICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDExMiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwK
KyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5
OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAw
LCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAgIDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAgIDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0
LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQy
LCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAgIDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgs
ICAgODIsICAgODMsICAgODQsICAgOTgsICAgMzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisg
ICAgICAgODcsICAgIDcsICAgNzksICAgODAsICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgs
ICAgOTgsCisgICAgICAgMzksICAgNDAsICAgNDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAg
OTgsICAgOTgsICAgMTksICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYs
ICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAg
OTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQsICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAg
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAg
MzEsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgNTQsCisgICAgICAgMTMsICAgOTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAg
NjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwgICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwg
ICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAg
ICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5
OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwg
ICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5
MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2
XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlf
ZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAg
MTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAsICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQs
ICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0g
ICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIs
ICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAgMzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAg
MzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYsICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEs
ICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0KLSAgICAgICA0MywgICA0NCwgICA0NSwgICA0Niwg
ICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAz
MSwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwg
ICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAyNywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAz
MCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwg
ICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAgICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAz
MiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwgICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwg
ICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMyLCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAg
ICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAg
IDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4
LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9t
ZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMs
Ci0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsCisgICAgICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQs
ICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAg
MSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2
NF0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAw
LCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAg
NjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMxLCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYz
LCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAgIDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAg
NjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAg
ICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAgMTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAg
MTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcyLCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4
LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAgNjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAg
NjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4
LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAgMjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAg
NjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAw
LCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAgNTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAg
ICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1
NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIsICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgs
ICAgIDAsICAxODcsCi0gICAgICA1NDcsICAyNDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1
MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAgICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIs
ICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1
MjksICAxMTQsICA1MjIsICA2MjgsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAs
ICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAgIDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1
MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgsICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAs
Ci0gICAgICA1MTgsICA1MTUsICA1MDcsICA1MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1
MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMsICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEs
ICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0
ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUsCi0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3
MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwgIDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwg
IDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3
MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2NiwgIDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwK
LSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2
MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwgICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwg
IDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywKLSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwg
IDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAg
MCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwgIDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQzNCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywgIDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwg
IDQxOCwKLQotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAw
LCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAotICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAg
NDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEyLCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEz
LCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAgICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAg
Mzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAwLCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAg
ICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAgICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1
LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAgICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAg
ICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAgICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0
LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAgICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAg
ICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAg
ICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAyMDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAx
NzMsCi0gICAgICAxODcsICAxNjQsICAxNTgsICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTks
ICA0MjMsICAxODYKKyAgICAgICAgMCwgICAgMCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4
MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwg
IDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEzMSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1
MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0NywgIDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwg
IDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3
MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3NywgIDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwK
KyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4
MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwgICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwg
IDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAg
MCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwKKyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwg
IDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4
MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwgIDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIx
LCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAgNjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAor
ICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAw
LCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAgNTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAg
NTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3
LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAorICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAg
NTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAw
LCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAgICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAg
NTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYwLCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAg
ICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAgNTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAg
ICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5
LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAgNTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAg
NTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisgICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1
MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAsICA1MjIsCisgICAgICA1MTksICA1MzAsICA1Mjks
ICAyODMsICA1MjQsICA1MTksICA1MDgsICAyNjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAz
ODEsICAzODgsICAzOTUsICA0MDIsICA1MTgsICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAg
ICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1
MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAsICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAs
ICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAs
ICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0
ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAsICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMs
ICA0ODIsICA0NzksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0
ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYs
CisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwgICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAg
MCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwg
IDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2
MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwgIDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwg
IDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAgMCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0
OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwgIDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwK
KyAgICAgICAgMCwgIDQzNywgICAgMCwgICAgMCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywgIDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwg
IDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQyNSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQy
NywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwKKyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywg
IDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQwNywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAg
NDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAor
ICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzkyLCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkx
LCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAgMzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAg
MzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAwLCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYy
LCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAorICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAg
MTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQyLCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYx
CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAg
ICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAgNDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMwLCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUs
ICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1
OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwgICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAg
ICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4
LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAw
LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsgICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAg
IDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5
LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAg
IDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAg
IDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQy
LCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAg
IDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1
LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAg
IDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIz
LCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAor
ICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMz
LCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAg
IDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAg
IDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkx
LCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAg
ICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LAogCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAg
ICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
OTMsCi0gICAgICAxMTksICAgNzUsICAgOTUsICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAs
ICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAgOTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAg
NzcsICAgNzgsICAxMTYsICAgNzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgODAs
ICAgNzgsICAxMTcsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAg
ODUsICAgODEsICAxMDAsICAxMjMsICAxMTgsICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQs
ICAgODEsICA0MjMsICAxMjUsICAxMDEsICAxNDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAg
IDEwMywgICA4NywgICA4OCwgIDExMCwgIDEwNCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEw
NSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwgIDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwg
IDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQyMSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEz
OCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAgIDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwg
IDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQx
OCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwg
ICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIz
MCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwgIDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwK
LSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4
MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwgIDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwg
ICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQx
MiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwKLQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2
LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAgMjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAg
IDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjEx
LCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAgMjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAot
ICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUz
LCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAg
MjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAotICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIw
LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAg
MjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAg
ICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAg
MzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAz
OTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIsICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgs
ICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0gICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAz
ODksICAxNTIsICAxNTIsICAzODgsICAzODcsICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMs
ICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAz
NzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAg
ICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAz
NTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgs
ICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAz
MzksICAzMzgsICAzMzcsICAzMzYsCi0gICAgICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAz
MjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMx
MSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAg
IDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3
OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwg
IDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1
OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwg
IDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIz
OSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwg
IDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIx
NCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwK
LSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5
MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3Nywg
IDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAg
MTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYw
LCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAgMTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAg
IDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICAgOCwgICAgOCwKKyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwg
ICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5
MywgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwg
ICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEyMywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAg
ICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwg
ICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MSwKKyAgICAgICA4NSwgIDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywg
IDE0MywgIDEwOCwgICA4MSwgIDEwMywKKworICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAg
MTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2
LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAgMTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAg
MTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIwLCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAg
ICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAgMTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAg
MTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkz
LCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAg
IDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUy
LCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAgMTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAg
MTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2
LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAgMTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAg
IDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgw
LAorCisgICAgICAgODAsICAgODAsICAgODAsICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcs
ICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAg
ODEsICA0NDgsICAxNTcsICAxNTcsCisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcs
ICAgODEsICAgNzgsICAyODAsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAyODEsICAyOTMsICAyOTQsICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYs
ICAyMjIsICA0NDUsICAgODEsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAy
MjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQsICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQs
CisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0
NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAsICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUs
ICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0
MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcsCisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcs
ICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywg
IDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwK
KyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMyMSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQw
NSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwgIDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwg
IDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQyNiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1
OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwKKyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1Mywg
IDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQx
NCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwg
IDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAg
ICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4Mywg
IDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3
NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2
LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAorICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAg
MzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5
LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAg
MzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAg
ICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAg
MzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1
LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAgMjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAg
MjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAgICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3
LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAg
MjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3
LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAg
ICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAy
MzksCisgICAgICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjks
ICAyMjgsICAyMjcsCisgICAgICAyMjYsICAyMjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAy
MTIsICAyMTEsICAyMTAsICAyMDksCisgICAgICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIs
ICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAx
OTEsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYs
ICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAx
NjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAs
CisgICAgICAxNDcsICAxMzEsICAxMjcsICAxMjIsICAxMTUsICAgODksICAgODQsICAgNjksICAg
NjQsICA0NTgsCisgICAgICAgIDcsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfY2hrWzY5NV0gCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIs
Ci0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3
MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSAKICAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAxMywgICAxNywgICAxOSwgICAyMCwgICAy
MCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAzMywKLSAgICAgICA0MiwgICAyMSwgICAzNCwg
ICAzNCwgICAxOSwgICAxNywgICAyMSwgICA0MiwgICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAz
NSwgIDE0NSwgICAzMywgICA0MiwgICAzNSwgICAyMSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMywgICA0MSwgICAyMywgICAyMywgICAy
MywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyNiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwg
IDQzMCwgICAyMiwKLSAgICAgICA0NCwgIDQyMywgICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1
NSwgICAyMiwgICAzNiwgICAyNiwKLQotICAgICAgIDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3
LCAgIDIzLCAgIDM4LCAgIDQ1LCAgIDM4LCAgIDM3LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAg
IDM5LCAgIDIyLCAgIDM3LCAgIDM5LCAgIDM4LCAgNDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIw
LCAgIDM5LCAgIDUwLCAgNDE5LCAgIDQ3LCAgIDUwLCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAg
MTM1LCAgIDUxLCAgIDQ5LCAgIDUyLCAgIDUwLCAgMTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIw
LAotICAgICAgNDE3LCAgIDUwLCAgMTIwLCAgNDE2LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAg
IDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4
LCAgIDc4LCAgIDc4LCAgMTY3LAotICAgICAgMTY3LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAg
MTkyLCAgNDEzLCAgIDc5LCAgIDc4LCAgIDc5LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5
LCAgIDc5LCAgIDc0LCAgMjE1LCAgMjE1LCAgMjE1LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAg
NDEwLCAgIDgwLCAgIDc5LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgw
LCAgMTIyLCAgMjI2LCAgMjI2LCAgMjI2LCAgNDA5LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAot
Ci0gICAgICAgODAsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAyMzQsICAy
MzQsICAyMzQsCi0gICAgICA0MDgsICA0MDcsICAgODMsICAgODAsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsCi0gICAgICAxNDEsICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAx
NTEsICAzOTcsICAxNTEsICAxNDEsICAgODMsCi0gICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEs
ICAxNTEsICAxNTEsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAg
ODMsICAyNDUsICAyNDUsICAyNDUsICAzOTYsICAxNTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMs
ICAxNTMsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0g
ICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYs
ICAxNTYsCi0gICAgICAxNTYsICAyMTEsICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAy
MTksICAzOTIsICAyMTEsCi0gICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAs
ICAyMjEsICAyMjEsICAyMjEsICAyMjEsCi0gICAgICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAy
MjIsICAyMjIsICAyMjIsICAyMjIsICAyNTEsICAyNTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5
MSwgIDM4OCwgIDM4NywgIDM4NSwgIDM4MiwgIDM4MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3Niwg
IDM3NSwgIDM4MSwgIDM3NCwgIDM4MSwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAg
ICAgIDQyNywgIDQyOCwgIDQyOCwgIDQyOSwgIDM3MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwg
IDM2OCwKLSAgICAgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1
MiwgIDM1MSwgIDM1MCwKLSAgICAgIDM0OSwgIDM0NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0Miwg
IDM0MCwgIDMzOSwgIDMzNywgIDMzNSwKLSAgICAgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMz
MCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwg
IDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMSwgIDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5
NCwgIDI5MywgIDI4NiwgIDI4NSwgIDI4NCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAg
IDI3NSwgIDI3NCwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2
NCwKLSAgICAgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwg
IDI0OSwgIDI0OCwKLQotICAgICAgMjQ3LCAgMjQ2LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAg
MjM3LCAgMjMzLCAgMjMyLCAgMjMxLAotICAgICAgMjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIz
LCAgMjE4LCAgMjE3LCAgMjE2LCAgMjE0LCAgMjEzLAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAg
MjA4LCAgMjA3LCAgMjA2LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAw
LCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAg
MTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LAotICAgICAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAg
MTcxLCAgMTcwLAotICAgICAgMTY5LCAgMTY4LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYy
LCAgMTYxLCAgMTQ2LCAgMTQ0LAotICAgICAgMTQzLCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAg
MTM3LCAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4
LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAg
MTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAx
MDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTks
Ci0gICAgICAgOTgsICAgOTcsICAgOTYsICAgOTUsICAgOTEsICAgODcsICAgNjAsICAgNTMsICAg
NDgsICAgNDYsCi0gICAgICAgNDMsICAgNDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1
LCAgICA1LCAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAor
ICAgICAgIDIwLCAgIDIwLCAgIDMzLCAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3
LCAgIDIxLAorICAgICAgIDQyLCAgIDEzLCAgIDM1LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAg
IDQyLCAgIDM1LCAgIDQ0LAorICAgICAgIDIxLCAgIDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIy
LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLAorICAgICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUx
LCAgNDU0LCAgIDIyLCAgIDM4LCAgIDUxLCAgIDM4LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMs
ICAgMzYsICAgMjIsICAgMzcsICAgMzYsICAgMzksICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisg
ICAgICAgMjYsICAgMjMsICAgNDEsICAgMzksICAgMzcsICAgMzksICAgNDUsICAgNDcsICAgMzks
ICAgMjIsCisgICAgICAgNDEsICAgNTUsICAxMzUsICAxNDYsICAgMzksICAxNDYsICAgNDksICAg
NTAsICAxMTIsICAgNDUsCisgICAgICAgNTAsICAgNDEsICAgNDcsICAgNDksICAgNDksICAgNDcs
ICAgNTIsICAxMzUsICAgNTAsICAxMjIsCisgICAgICAgNTIsICAxMTIsICA0NTIsICAgNDksICAg
NDksICAgNTAsICAgNDksICAxMjIsICA0NTEsICAgNTIsCisgICAgICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzgsICAgNzgsICAgNzgsCisgICAgICAgNzgsICAg
NzgsICAgNzgsICAgNzgsICA0NTAsICAxMjAsICAgNzQsICAxNDIsICAxMjAsICAxMjAsCisgICAg
ICAxNjgsICAxNjgsICAxMjAsICAgNzgsICAxMjAsICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAg
NzQsCisgICAgICAyMTgsICAyMTgsICAyMTgsICA0MTcsICA0MTcsICAgNzksICAgNzgsICAgNzks
ICAgNzksICAgNzksCisgICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICA0NDgsICAg
ODAsICAgODAsICAgODAsICAgODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1
NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwg
ICA4MSwgIDQ0NSwgICA4MSwgICA3OSwgIDQ0NCwgICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4
MSwgICA4MSwgICA4MSwgICA4MSwgICA4MCwgICA4MywgIDIxNCwgICA4MywgICA4MywKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgIDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0
MywKKyAgICAgIDE1MiwgIDQ0MiwgIDE1MiwgIDQ0MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1Miwg
IDE1MiwgIDE1MiwKKyAgICAgIDE1MiwgIDE1MiwgIDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQz
OCwgICA4MywgIDE1NCwgIDE1NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwg
IDI0NSwgIDI0NSwgIDI0NSwgIDQzNywgIDQzNiwKKyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQz
NCwgIDE1NCwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwg
IDI0OSwgIDI0OSwgIDI0OSwgIDQzMywgIDQzMiwgIDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1
NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwK
KworICAgICAgMjIyLCAgMjIyLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAg
MjIzLCAgMjI0LAorICAgICAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1
LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAg
MjU1LCAgMzg4LCAgMzg4LCAgMzg4LCAgNDMwLAorICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2
LCAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIxLCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAg
NDU5LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDYwLCAgNDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYy
LCAgNDE5LCAgNDYyLCAgNDYyLCAgNDE4LCAgNDE2LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAor
ICAgICAgNDAzLCAgNDAyLCAgNDAwLCAgMzk5LCAgMzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5
LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAg
Mzc2LCAgMzc1LCAgMzc0LAorICAgICAgMzczLCAgMzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5
LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAgICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAg
MzQ4LCAgMzQ2LCAgMzQ1LCAgMzQzLCAgMzQxLCAgMzQwLAorCisgICAgICAzMzksICAzMzgsICAz
MzcsICAzMzYsICAzMzUsICAzMzQsICAzMzIsICAzMzEsICAzMzAsICAzMjksCisgICAgICAzMjgs
ICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAsICAzMTksICAzMTYsICAzMDUsICAzMDEsCisg
ICAgICAzMDAsICAyOTksICAyOTgsICAyOTEsICAyOTAsICAyODksICAyODQsICAyODMsICAyODIs
ICAyODEsCisgICAgICAyODAsICAyNzksICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAy
NzEsICAyNzAsICAyNjksCisgICAgICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMs
ICAyNjIsICAyNjEsICAyNTQsICAyNTMsCisgICAgICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAy
NDQsICAyNDIsICAyNDEsICAyNDAsICAyMzYsICAyMzUsCisgICAgICAyMzQsICAyMzMsICAyMzIs
ICAyMzEsICAyMjgsICAyMjYsICAyMjEsICAyMjAsICAyMTksICAyMTcsCisgICAgICAyMTYsICAy
MTUsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsCisgICAg
ICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAx
OTYsCisgICAgICAxOTUsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcs
ICAxODYsICAxODUsCisKKyAgICAgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwg
IDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2
OSwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwg
IDE0NCwgIDE0MywgIDE0MSwgIDE0MCwgIDEzOSwgIDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEz
NCwgIDEzMywgIDEzMiwgIDEzMSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAg
IDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDEx
MywKKyAgICAgIDExMSwgIDExMCwgIDEwOSwgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwg
IDEwMywgIDEwMiwKKyAgICAgIDEwMSwgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5
NSwgICA5MSwgICA4NywgICA2MCwKKyAgICAgICA1MywgICA0OCwgICA0NiwgICA0MywgICA0MCwg
ICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4CiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5z
LCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAw
LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKQEAgLTc2MCw3ICs3ODEsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVs
ZV9jYW5fCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwg
MCwgMCwgICAgIH07CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSwgMCwgMCwgICAgIH07CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBp
cyB0aGF0IGl0J2xsIGNhdGNoCiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNz
ZWQuCkBAIC03NzEsNyArNzkyLDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1
bGVfY2FuXwogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VO
RVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xz
bGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwu
aCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCkBAIC04MjEsOCArODQzLDggQEAgc3RydWN0
IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkg
b2Ygc3RhY2suICovCiAgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8
IFN0YWNrIGFzIGFuIGFycmF5LiAqLwogICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5
eV9uX2NoYXJzOwotICAgIGludCB5eWxlbmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsK
KyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQg
eXlfaW5pdDsKICAgICBpbnQgeXlfc3RhcnQ7CkBAIC04NzUsNyArODk3LDcgQEAgRklMRSAqeXln
ZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICog
b3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKIAogY2hhciAqeXlnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYs
MTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5
X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0K
IAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9j
dXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4
ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50
X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1
MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQ
b29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9
CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwt
PmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZ
WV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxl
eC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9C
UkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29u
dGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1
cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsg
eXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXls
dmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJu
KEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JV
TEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5
eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6Citj
YXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZs
b2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNT
SUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7
ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1
cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6
CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
QU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVf
U0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nh
c2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVM
RV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNl
IDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4o
TEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQ
CiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZ
WV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2Ogor
Y2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJl
dHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JV
TEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09M
T04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7
IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJ
R0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9T
RVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6
CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmlu
VHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0g
ZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNl
IDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JS
QUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQ
CiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoK
K2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihU
SUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2Ug
MTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVG
VF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2Ug
MTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNl
IDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEy
ICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwog
fQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZ
WV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1
MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZ
WV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5U
KToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1
ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlf
UlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwg
eXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2FzZSAxNTU6
CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JSRUFLCkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBz
dGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAKIAllbHNlCiAJCXsKLQkJ
CWludCBudW1fdG9fcmVhZCA9CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQogCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKIAog
CQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQpAQCAtMTkyMyw3ICsxOTc3LDcgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCiAJCQlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7
CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJCQkJaWYg
KCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUg
LyA4OwpAQCAtMTk1NCw3ICsyMDA4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IAogCiAJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwogCQlZWV9JTlBVVCggKCZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotCQkJ
eXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOworCQkJeXlnLT55eV9uX2No
YXJzLCBudW1fdG9fcmVhZCApOwogCiAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKIAkJfQpAQCAtMjAxNiw3ICsyMDcwLDcgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCQl3aGlsZSAoIHl5X2Noa1t5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7
CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJ
CX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0yMDQ1LDExICsyMDk5LDExIEBAIHN0YXRpYyBp
bnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0
NTkgKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOwor
CXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNf
amFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzMsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAKIAkJZWxzZQogCQkJeyAvKiBu
ZWVkIG1vcmUgaW5wdXQgKi8KLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWct
Pnl5dGV4dF9wdHI7CisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyOwogCQkJKyt5eWctPnl5X2NfYnVmX3A7CiAKIAkJCXN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQpAQCAtMjEwMyw3ICsyMTU3LDcgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCQkJCWNhc2UgRU9CX0FDVF9FTkRf
T0ZfRklMRToKIAkJCQkJewogCQkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCQly
ZXR1cm4gRU9GOworCQkJCQkJcmV0dXJuIDA7CiAKIAkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mICkKIAkJCQkJCVlZX05FV19GSUxFOwpAQCAtMjM2Niw3ICsyNDIw
LDcgQEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2NhbgogICovCiBzdGF0
aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLQlp
bnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5eWct
Pnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwxMiArMjUxOCwxMSBAQCBZWV9CVUZGRVJfU1RB
VEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUg
b2JqZWN0LgogICovCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hh
ciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9z
aXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlZWV9CVUZGRVJf
U1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG47Ci0JaW50IGk7CisJeXlfc2l6ZV90
IG4sIGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBz
cGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0y
NjE5LDcgKzI2NzIsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAv
KiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCiAgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotaW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
ICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CiAgICAgcmV0dXJuIHl5bGVuZzsKQEAgLTI4OTQsMTAgKzI5NDcsMTUgQEAgdm9pZCB5eWZyZWUg
KHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYQogCiAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5
dGFibGVzIgogCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsK
IC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRl
cm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRN
YWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRF
WFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBw
cC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBj
b250ZXh0LT5zY2FubmVyOwpAQCAtMjkwNiwyNiArMjk2NCwyNiBAQCBleHRlcm4gIkMiIHsKIHZv
aWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBt
c2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5m
b0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNv
bnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53YXJu
aW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3Qg
Y2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBt
c2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0lu
Zm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cp
CiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwog
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApAQCAtMjk4MCw4OCArMzAzOCwxNSBAQCB2b2lk
IERlY0xpbmVOdW1iZXIoKQogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2Vucywg
aW50IG51bVRva2VucykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJj
bXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQp
IHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBp
cyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAo
IXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFBy
YWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJd
LCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0g
ZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9u
XCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChz
dHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
KVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVn
IikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5z
WzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVk
IGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOwotICAgICAgICBl
bHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+
Y29udGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZv
ciAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAg
Q1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJB
R01BX1RBQkxFCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmlj
IHByYWdtYQotICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRl
eHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdt
YQotICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGlt
cGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBv
bmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlr
ZQotICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8v
IFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWlu
c3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAvLyAgICAgICAgCi0g
ICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAh
c3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUUHJh
Z21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRl
eHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9y
IGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vu
c1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sy
XTsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+
PSAyKSB7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAg
ICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21h
VGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
cHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tl
bnNbMV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxl
WyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vu
ZGlmIC8vIFBSQUdNQV9UQUJMRQotICAgIH0KKworICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0
dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKKyAgICBp
ZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAgICBjb250ZXh0LT5o
YW5kbGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0K
IAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIg
KnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7
CkBAIC0zMDgzLDcxICszMDY4LDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3Qg
Y2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikp
Ci0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJs
ZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICgh
c3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsK
LSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4g
RUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJi
ZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsK
LSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBk
YXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVo
YXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlv
clZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlv
cj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNp
YWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxs
IikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JW
YWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lv
biAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChp
dGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0
LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXIt
PnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4
dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAg
IGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJp
bmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3Ry
KCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJs
ZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJs
ZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFt
ZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsg
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0K
KyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUs
IGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9O
RVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3Np
emUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW47CisgICAgaW50IGxlbiA9IDA7
CiAKLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1
c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CisgICAgcHA6OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXBy
b2Nlc3Nvci5sZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6
TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVu
IDwgbWF4X3NpemUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBs
ZW4pOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmls
ZSwgdG9rZW4ubG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXls
ZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NF
U1NPUgogCi0gICAgYnVmW2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChs
ZW4gPj0gbWF4X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3Zl
cmZsb3ciKTsKKyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAn
OworICAgIHJldHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5l
cikgewpAQCAtMzE3OCw5ICszMTI1LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNv
bnRleHQsIGNvbgogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
IGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAg
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIp
OworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBF
T0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVh
c29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNv
biwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzE5OSwy
MiArMzE0Niw0MyBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250CiAg
ICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nh
bm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgor
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRl
eHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVyKTsKICAg
ICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLGNvbnRleHQtPnNjYW5uZXIpOwog
ICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gSW5pdCBwcmVwcm9j
ZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNpZiBBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgIGlmIChJ
bml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJldHVybiAxOwogICAgIGNwcC0+cEMgPSBjb250
ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3Ry
aW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9
IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21T
dHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50LCBz
dHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2VuZGlmICAvLyBBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAg
Y29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lv
bkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlv
ci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3Ry
KCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19z
dHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNw
cAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBACiAK
IAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNjAsMjEgKzM2MCwy
MSBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRlCiAjZGVmaW5lIEZS
QUdfVkVSVF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9GUkFHTUVOVF9TSEFERVIgJiYgIFwKICAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBT
SF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRl
eHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBz
aGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CiAKICNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAg
XAogICAgIH0gIFwKIH0KQEAgLTQzMSw3ICs0MzEsNyBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7CiAjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQogCiAjaWZu
ZGVmIFlZXwotIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKKyMgaWYg
WVlFTkFCTEVfTkxTCiAjICBpZiBFTkFCTEVfTkxTCiAjICAgaW5jbHVkZSA8bGliaW50bC5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgZGVmaW5lIFlZXyhtc2dpZCkg
ZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCkBAIC03NDksMjYgKzc0OSwyNiBAQCBz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAgIDE2NSwgICAxNjUsICAgMjAwLCAgIDIw
MywgICAyMTYsICAgMjIxLCAgIDIyNiwgICAyMzIsICAgMjM1LAotICAgICAzMDgsICAgMzExLCAg
IDQyMCwgICA0MzAsICAgNDQzLCAgIDQ1MSwgICA1NTAsICAgNTUzLCAgIDU2MSwgICA1NjUsCi0g
ICAgIDU3MiwgICA1NzYsICAgNTgzLCAgIDU4OSwgICA1OTgsICAgNjA2LCAgIDY2MSwgICA2Njgs
ICAgNjc4LCAgIDY4MSwKLSAgICAgNjkxLCAgIDcwMSwgICA3MjIsICAgNzIzLCAgIDcyNCwgICA3
MjksICAgNzMwLCAgIDczOSwgICA3NTEsICAgNzUyLAotICAgICA3NjAsICAgNzcxLCAgIDc3NSwg
ICA3NzYsICAgNzg2LCAgIDc5NiwgICA4MDYsICAgODE5LCAgIDgyMCwgICA4MzAsCi0gICAgIDg0
MywgICA4NDcsICAgODUxLCAgIDg1NSwgICA4NTYsICAgODY5LCAgIDg3MCwgICA4ODMsICAgODg0
LCAgIDg5NywKLSAgICAgODk4LCAgIDkxNSwgICA5MTYsICAgOTI5LCAgIDkzMCwgICA5MzEsICAg
OTMyLCAgIDkzMywgICA5MzcsICAgOTQwLAotICAgICA5NTEsICAgOTU5LCAgIDk4NiwgICA5OTEs
ICAgOTk4LCAgMTAzNiwgIDEwMzksICAxMDQ2LCAgMTA1NCwgIDEwNzUsCi0gICAgMTA5NiwgIDEx
MDcsICAxMTM2LCAgMTE0MSwgIDExNTEsICAxMTU2LCAgMTE2NiwgIDExNjksICAxMTcyLCAgMTE3
NSwKLSAgICAxMTgxLCAgMTE4OCwgIDExOTEsICAxMjEzLCAgMTIzMSwgIDEyNTUsICAxMjc4LCAg
MTI4MiwgIDEzMDAsICAxMzA4LAotICAgIDEzNDAsICAxMzYwLCAgMTQ0OSwgIDE0NTgsICAxNDgx
LCAgMTQ4NCwgIDE0OTAsICAxNDk4LCAgMTUwNiwgIDE1MTQsCi0gICAgMTUyNCwgIDE1MzEsICAx
NTM0LCAgMTUzNywgIDE1NDMsICAxNTQ2LCAgMTU2MSwgIDE1NjUsICAxNTY5LCAgMTU3MywKLSAg
ICAxNTgyLCAgMTU4NywgIDE1OTIsICAxNTk3LCAgMTYwMiwgIDE2MDcsICAxNjEyLCAgMTYxNywg
IDE2MjIsICAxNjI3LAotICAgIDE2MzMsICAxNjM5LCAgMTY0NSwgIDE2NTAsICAxNjU1LCAgMTY2
NCwgIDE2NzMsICAxNjc4LCAgMTY5MSwgIDE2OTEsCi0gICAgMTcwNSwgIDE3MDUsICAxNzE0LCAg
MTcxNywgIDE3MzIsICAxNzY4LCAgMTc3MiwgIDE3NzgsICAxNzg2LCAgMTgwMiwKLSAgICAxODA2
LCAgMTgxMCwgIDE4MTEsICAxODE3LCAgMTgxOCwgIDE4MTksICAxODIwLCAgMTgyMSwgIDE4MjUs
ICAxODI2LAotICAgIDE4MjYsICAxODI2LCAgMTgzNiwgIDE4MzcsICAxODQxLCAgMTg0MSwgIDE4
NDIsICAxODQyLCAgMTg0NywgIDE4NTAsCi0gICAgMTg2MCwgIDE4NjMsICAxODY5LCAgMTg3MCwg
IDE4NzQsICAxODgyLCAgMTg4NiwgIDE4OTYsICAxOTAxLCAgMTkxOCwKLSAgICAxOTE4LCAgMTky
MywgIDE5MjMsICAxOTMwLCAgMTkzMCwgIDE5MzgsICAxOTQxLCAgMTk0NywgIDE5NTAsICAxOTU2
LAotICAgIDE5NjAsICAxOTY3LCAgMTk3NCwgIDE5ODEsICAxOTg4LCAgMTk5OSwgIDIwMDgsICAy
MDEyLCAgMjAxOSwgIDIwMjIsCi0gICAgMjAyOCwgIDIwMjgKKyAgICAgMzE0LCAgIDMxNywgICA0
MjYsICAgNDM2LCAgIDQ0OSwgICA0NTcsICAgNTU3LCAgIDU2MCwgICA1NjgsICAgNTcyLAorICAg
ICA1NzksICAgNTgzLCAgIDU5MCwgICA1OTYsICAgNjA1LCAgIDYxMywgICA2NjgsICAgNjc1LCAg
IDY4NSwgICA2ODgsCisgICAgIDY5OCwgICA3MDgsICAgNzI5LCAgIDczMCwgICA3MzEsICAgNzM2
LCAgIDczNywgICA3NDYsICAgNzU4LCAgIDc1OSwKKyAgICAgNzY3LCAgIDc3OCwgICA3ODIsICAg
NzgzLCAgIDc5MywgICA4MDMsICAgODEzLCAgIDgyNiwgICA4MjcsICAgODM3LAorICAgICA4NTAs
ICAgODU0LCAgIDg1OCwgICA4NjIsICAgODYzLCAgIDg3NiwgICA4NzcsICAgODkwLCAgIDg5MSwg
ICA5MDQsCisgICAgIDkwNSwgICA5MjIsICAgOTIzLCAgIDkzNiwgICA5MzcsICAgOTM4LCAgIDkz
OSwgICA5NDAsICAgOTQ0LCAgIDk0NywKKyAgICAgOTU4LCAgIDk2NiwgICA5OTMsICAgOTk4LCAg
MTAwNSwgIDEwNDMsICAxMDQ2LCAgMTA1MywgIDEwNjEsICAxMDgyLAorICAgIDExMDMsICAxMTE0
LCAgMTE0MywgIDExNDgsICAxMTU4LCAgMTE2MywgIDExNzMsICAxMTc2LCAgMTE3OSwgIDExODIs
CisgICAgMTE4OCwgIDExOTUsICAxMTk4LCAgMTIyMCwgIDEyMzgsICAxMjYyLCAgMTI4NSwgIDEy
ODksICAxMzA3LCAgMTMxNSwKKyAgICAxMzQ3LCAgMTM2NywgIDE0NTYsICAxNDY1LCAgMTQ4OCwg
IDE0OTEsICAxNDk3LCAgMTUwNSwgIDE1MTMsICAxNTIxLAorICAgIDE1MzEsICAxNTM4LCAgMTU0
MSwgIDE1NDQsICAxNTUwLCAgMTU1MywgIDE1NjgsICAxNTcyLCAgMTU3NiwgIDE1ODAsCisgICAg
MTU4OSwgIDE1OTQsICAxNTk5LCAgMTYwNCwgIDE2MDksICAxNjE0LCAgMTYxOSwgIDE2MjQsICAx
NjI5LCAgMTYzNCwKKyAgICAxNjQwLCAgMTY0NiwgIDE2NTIsICAxNjU3LCAgMTY2MiwgIDE2NzEs
ICAxNjgwLCAgMTY4NSwgIDE2OTgsICAxNjk4LAorICAgIDE3MTIsICAxNzEyLCAgMTcyMSwgIDE3
MjQsICAxNzM5LCAgMTc3NSwgIDE3NzksICAxNzg1LCAgMTc5MywgIDE4MDksCisgICAgMTgxMywg
IDE4MTcsICAxODE4LCAgMTgyNCwgIDE4MjUsICAxODI2LCAgMTgyNywgIDE4MjgsICAxODMyLCAg
MTgzMywKKyAgICAxODMzLCAgMTgzMywgIDE4NDMsICAxODQ0LCAgMTg0OCwgIDE4NDgsICAxODQ5
LCAgMTg0OSwgIDE4NTQsICAxODU3LAorICAgIDE4NjcsICAxODcwLCAgMTg3NiwgIDE4NzcsICAx
ODgxLCAgMTg4OSwgIDE4OTMsICAxOTAzLCAgMTkwOCwgIDE5MjUsCisgICAgMTkyNSwgIDE5MzAs
ICAxOTMwLCAgMTkzNywgIDE5MzcsICAxOTQ1LCAgMTk0OCwgIDE5NTQsICAxOTU3LCAgMTk2MywK
KyAgICAxOTY3LCAgMTk3NCwgIDE5ODEsICAxOTg4LCAgMTk5NSwgIDIwMDYsICAyMDE1LCAgMjAx
OSwgIDIwMjYsICAyMDI5LAorICAgIDIwMzUsICAyMDM1CiB9OwogI2VuZGlmCiAKQEAgLTE0MDQs
NyArMTQwNCw3IEBAIHdoaWxlIChZWUlEICgwKSkKICAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29k
ZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KIAogI2lmbmRlZiBZ
WV9MT0NBVElPTl9QUklOVAotIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxU
WVBFX0lTX1RSSVZJQUwKKyMgaWYgWVlMVFlQRV9JU19UUklWSUFMCiAjICBkZWZpbmUgWVlfTE9D
QVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKICAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVk
LiVkIiwJCQlcCiAJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlc
CkBAIC0yMTU3LDcgKzIxNTcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgY29uc3QgVFN5bWJvbCog
c3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJl
ZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5n
LT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
IFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFi
bGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsyMTY2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJp
YWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjIwMSw3ICsyMjAxLDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCiAgICAgICAgIC8v
CiAgICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKSA+PSAoMSA8PCAxNikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgIiBpbnRlZ2VyIGNvbnN0
YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKQEAgLTIyNDcsOSArMjI0Nyw5IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAg
aWYgKCEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgp
ICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgo
KSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9y
KCkpIHsKICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0
eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3Ig
dmVjdG9yICIsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAi
LCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJy
YXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBAIC0yMjY2LDcgKzIyNjYsMTAgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNWZWN0b3IoKSB8fCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0
SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQg
c2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVy
KCktPmdldElDb25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsIGV4dHJh
SW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CkBAIC0yMjc5
LDcgKzIyODIsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKHl5dnNwWygzKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAi
IiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIg
PDwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJ
bmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3Ry
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjMzMCw3
ICsyMzM2LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYXBwbHkg
ZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9w
ZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogCkBAIC0yMzc1LDcgKzIzODEsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVD
b2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwg
IiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKQEAgLTIzOTMsNyArMjM5OSw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAg
ICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmll
bGRzID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJv
ciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIp
OwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNDI1LDEzICsyNDMx
LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBm
aWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZpZWxk
IHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQg
aGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
IiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBv
biBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgICAgICB9CkBAIC0yNTMwLDkgKzI1MzYsMTAgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRM
aW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9u
LiAgVHlwZTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0
aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI1NTYsNyArMjU2Myw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJh
bShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChx
dWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2
YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwg
IkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNv
bnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1l
dGVycy4iLCAiRXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTI1ODYsNyArMjU5Myw3IEBAIHl5cmVkdWNlOgogICBjYXNlIDE3
OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBh
cmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CiAgICAgO30K
QEAgLTI2OTcsNyArMjcwNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgZGVmYXVsdDogYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5v
dCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBF
YnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwpAQCAtMzE5
MSwxMiArMzE5OCwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0g
c3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAg
IGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgp
ICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlw
ZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5n
ZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZl
IHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlm
aWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlw
ZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzI1Myw3ICsz
MjYwLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhpcyBw
YXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGJlIGFuIGFy
Z3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGJl
IGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewpAQCAtMzI2OCw3ICsz
Mjc1LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVy
cyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMg
YWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlz
IG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0zMjg5LDcgKzMyOTYsNyBAQCB5eXJlZHVjZToK
IAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBl
ID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3Zv
aWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5y
ZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5zdHJpbmcpKQpAQCAtMzQxMCw3ICszNDE3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0g
RWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKICAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5l
LCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFso
MykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZp
ZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmct
PmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAK
QEAgLTM1MzgsNyArMzU0NSw3IEBAIHl5cmVkdWNlOgogICBjYXNlIDk4OgogCiAgICAgewotICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICJ1bnNpemVk
IGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBv
cnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCku
c3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUpOwpAQCAtMzYxNiw3ICszNjIzLDcgQEAgeXlyZWR1Y2U6CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAo
ISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBp
bnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0zNjM1LDcgKzM2NDIsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXki
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAgICAgIH0KQEAgLTM2NDYsMTkg
KzM2NTMsMTkgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJz
dC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFz
cyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRR
dWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciks
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFso
MSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAg
ICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29s
IHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5s
aW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFso
MSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBi
ZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKTsKQEAgLTM5NDcsNyArMzk1NCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewog
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdl
X2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05M
WSgic2FtcGxlckV4dGVybmFsT0VTIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKQEAg
LTM5NjAsNyArMzk2Nyw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5z
dXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIs
ICJzYW1wbGVyMkRSZWN0Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRFJlY3QiLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtNDQyMSw3ICs0NDI4LDcgQEAgeXlyZWR1Y2U6CiAKICAg
ICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRp
bnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUg
c3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5dnNw
WygxKSAtICgyKV0ubGV4KS5saW5lKTsKQEAgLTQ0MzIsNyArNDQzOSw3IEBAIHl5cmVkdWNlOgog
CiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJi
cmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0
YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkg
LSAoMildLmxleCkubGluZSk7CkBAIC00NDQ0LDcgKzQ0NTEsNyBAQCB5eXJlZHVjZToKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9
IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMild
LmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0
dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1
cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIDt9
CkBAIC00NDU2LDEwICs0NDYzLDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4s
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0g
KDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9
IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1
ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIs
ICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBl
bHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVy
biBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJu
IGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIDt9CkBAIC00NTE3LDcgKzQ1MjQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24g
YWxyZWFkeSBoYXMgYSBib2R5LgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkg
aGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rp
b24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVj
LT5zZXREZWZpbmVkKCk7CkBAIC00NTI3LDcgKzQ1MzQsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
Ly8KICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CiAgICAgICAg
ICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlv
biBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIs
IGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRS
ZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtNDU1OSw3ICs0NTY2
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJz
IHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19z
dHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ2MDAs
OSArNDYwNyw4IEBAIHl5cmVkdWNlOgogCiAgICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5m
b3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmlj
CiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVk
IGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRp
bWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRl
KCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxl
KGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5w
cmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdl
dEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAg
ICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExp
bmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5nZXRFbmRMaW5lKCkpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MzMsMTUgKzQzMywxNSBAQCBwcm90ZWN0ZWQ6CiAKIHR5cGVkZWYgVFZlY3RvcjxU
SW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKIHR5cGVkZWYgVFZlY3RvcjxpbnQ+IFRRdWFs
aWZpZXJMaXN0OwotdHlwZWRlZiBUTWFwPFRTdHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJsZTsK
KwogLy8KIC8vIE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9m
IGNoaWxkcmVuLgogLy8KIGNsYXNzIFRJbnRlcm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9w
ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0
b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgcHJhZ21hVGFibGUoMCksIGVuZExpbmUo
MCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQotICAgIFRJbnRlcm1BZ2dyZWdhdGUo
VE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBwcmFnbWFUYWJsZSgwKSwgdXNlRW11
bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0gICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0
ZSBwcmFnbWFUYWJsZTsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRv
cihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBlbmRMaW5lKDApLCB1c2VFbXVsYXRlZEZ1
bmN0aW9uKGZhbHNlKSB7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9CisgICAgflRJ
bnRlcm1BZ2dyZWdhdGUoKSB7IH0KIAogICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0
QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKQEAgLTQ1MiwxNCArNDUyLDEzIEBAIHB1YmxpYzoKICAgICBj
b25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQogCiAgICAgdm9p
ZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc1Vz
ZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKyAgICBib29sIGlzVXNlckRlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6
ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9CiAgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0
dXJuIG9wdGltaXplOyB9CiAgICAgdm9pZCBzZXREZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBkOyB9
CiAgICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9Ci0gICAgdm9pZCBhZGRUb1By
YWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKTsKLSAgICBjb25zdCBUUHJhZ21h
VGFibGUmIGdldFByYWdtYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gKnByYWdtYVRhYmxlOyB9CisK
ICAgICB2b2lkIHNldEVuZExpbmUoVFNvdXJjZUxvYyBsaW5lKSB7IGVuZExpbmUgPSBsaW5lOyB9
CiAgICAgVFNvdXJjZUxvYyBnZXRFbmRMaW5lKCkgY29uc3QgeyByZXR1cm4gZW5kTGluZTsgfQog
CkBAIC00NzUsNyArNDc0LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBvcHRpbWl6ZTsKICAg
ICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJsZSAqcHJhZ21hVGFibGU7CiAgICAgVFNvdXJj
ZUxvYyBlbmRMaW5lOwogCiAgICAgLy8gSWYgc2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1aWx0
LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUKQEAgLTUzMyw2ICs1MzEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAg
IHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAg
dmlydHVhbCB+VEludGVybVRyYXZlcnNlcigpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2aXNpb24gMTIyNzM4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw4IEBACiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKICAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19PcGVuQlNEX18pIHx8IFwKICAgICAgIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQo
QU5EUk9JRCkgfHwgXAotICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVf
XykgfHwgZGVmaW5lZChfX1FOWF9fKQorICAgICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmlu
ZWQoX19HTlVfXykgfHwgXAorICAgICAgZGVmaW5lZChfX1FOWF9fKQogI2RlZmluZSBBTkdMRV9P
U19QT1NJWAogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybS4KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50
ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBo
KCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
QWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7
CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7
CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJn
dW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikK
K3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50
ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFj
ayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNh
bGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRl
KiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlv
bkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwt
PmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2Vy
RGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJu
IGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRP
ckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJv
bElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3lt
Ym9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAg
IGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWly
IHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAg
ICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFp
ciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElk
TWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJv
bHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9t
IHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJh
c2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9s
KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFRE
ZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1T
ZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBo
U2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxl
Y3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRl
bmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdy
YXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rl
cy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxP
cCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVy
bUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3Jh
cGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxv
Z2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBo
TG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJp
bmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsK
KyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IG9wU3RyaW5nOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2Rl
ZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNr
PgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRH
cmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3lt
Ym9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRH
cmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBU
R3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9k
ZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9s
VmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rp
b25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3Jh
cGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9k
ZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+
VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdy
YXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50
Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2Rl
KFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5U
R3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9k
ZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUp
OyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIq
IGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50
Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8K
K2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGlj
OgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJt
RnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFn
Z3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0
IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAg
IGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxz
LgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2Rl
IHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rp
b25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1
cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisv
LworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRH
cmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAg
dmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJ
bnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5k
IHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBU
R3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlv
biogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAg
IHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlv
biogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNT
ZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3Is
IGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1Ymxp
YyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRl
cm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhM
b29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9Owor
CisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2Fs
T3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxP
cCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRl
cm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUt
PmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciog
Z3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1i
b2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBw
cm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5j
eSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVk
IGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRo
aXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVh
dGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVk
LCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVu
Y3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7Citw
dWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7Cisg
ICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdy
YXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5v
ZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJl
Z2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVy
U3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOwor
ICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCog
Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQg
YXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25D
YWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3lt
Ym9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAg
IFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVy
bVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50
ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJp
bmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwg
VEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwg
VEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFs
bE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1
bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJ
ZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVu
ZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWly
IHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8v
IHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0
aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3Jh
cGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rp
b25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKwor
ICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5j
cmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsg
LS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigp
OyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmlu
c2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZh
dGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAg
ICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1
aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQorewor
ICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9w
RnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJt
QWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRy
ZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlv
bihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5
LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRl
cm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAg
ICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2Vz
IGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBo
IGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBp
bnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNh
bGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisg
ICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBh
cmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMg
PSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAg
ICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCAr
K2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVT
ZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVu
dCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRv
cFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgt
PmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAg
ICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2Rlcywg
YXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rp
b25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5
bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5k
ZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0
aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2ls
bCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAg
LT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFz
c2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNz
aWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJm
dW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0
aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVn
YXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJ
bnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7
CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNl
LmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+
dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVz
aCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBj
dXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVy
c2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1i
b2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wp
OworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9s
IHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1v
c3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVt
cHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAg
ICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1
c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7Cisg
ICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBF
T3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNTdGF0ZSgpKQorICAgICAgICB2
aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlIGlmIChvcCA9PSBFT3BMb2dp
Y2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAgdmlzaXRMb2dpY2FsT3AoaW50
ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0QmluYXJ5Q2hpbGRyZW4oaW50ZXJt
QmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqIGludGVybUFzc2lnbm1lbnQp
Cit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0
TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVEdy
YXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAgICB7CisgICAgICAgIFROb2Rl
U2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsKKworICAgICAgICB7CisgICAg
ICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1MZWZ0bW9zdFN5bWJvbHMudG9w
KCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcgdGhlIGxlZnQgc3VidHJlZSBv
ZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGEgcmVhbAorICAgICAgICAg
ICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0IHN5bWJvbCBzaG91bGQgbm90
IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wgIT0g
Jm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wgIT0gJm1S
aWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50
ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgpKSB7CisgICAgICAgICAgICBU
TGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBt
UmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogYXNzaWdubWVudE5vZGVz
ID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9zdFN5bWJvbCk7CisgICAgfQor
CisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoaXMgYXNzaWdubWVudCBpbnRv
IHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0bworICAgIC8vIHJlcHJlc2Vu
dCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAvLyBBbiBleHByZXNzaW9uIGxp
a2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlICJjIC0+
IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5IHBhc3NlcyB0aGUgbGVmdG1v
c3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIiIGluIHRoaXMKKyAgICAvLyBl
eGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNzaWdubWVudCBjYWxsIGZvciB0
aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8vIGNyZWF0ZSB0aGUgY29ubmVj
dGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50b1RvcFNldChsZWZ0bW9zdFN5
bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9naWNhbE9w
KFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVk
KiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0KCkpIHsKKyAgICAgICAgVE5v
ZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9k
ZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBU
R3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3JlYXRlTG9naWNhbE9wKGludGVy
bUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9k
ZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVElu
dGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxPcC0+Z2V0UmlnaHQoKSkgewor
ICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRo
aXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5h
cnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgaWYgKFRJbnRl
cm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0TGVmdCgpKQorICAgICAgICBp
bnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVy
bVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5
bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRy
ZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCiti
b29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQoreworICAgIGlmIChUSW50ZXJtTm9k
ZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5nZXRDb25kaXRpb24oKSkgewor
ICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAg
ICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJl
bnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAg
ICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBtR3JhcGgtPmNyZWF0ZVNlbGVj
dGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNU
b1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9jayA9IGludGVybVNlbGVjdGlv
bi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVCbG9jay0+dHJhdmVyc2UodGhp
cyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNlQmxvY2sgPSBpbnRlcm1TZWxl
Y3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJtRmFsc2VCbG9jay0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIGludGVybUxvb3Ap
Cit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtTG9vcC0+
Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWlu
dGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlvbi0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9uTm9kZXMgPSBtTm9kZVNldHMu
Z2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3AqIGxvb3AgPSBtR3JhcGgtPmNy
ZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1Rv
U2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1Mb29wLT5nZXRCb2R5KCkpCisg
ICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBl
ZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4cHJlc3Npb24oKSkKKyAgICAg
ICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEdyYXBoTm9kZSog
bm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVuZCgpOyArK2l0ZXIpCisgICAg
eworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9kZSA9ICppdGVyOworICAgICAg
ICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsKKyAgICB9Cit9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVS
X0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gK
KworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLwor
Ly8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMs
IGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJzaW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgor
Ly8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNp
dCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVm
IHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUqPiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisg
ICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRlcGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywg
Y29uZGl0aW9ucywgZXRjLgorICAgIC8vIHdoaWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0
ZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBz
ZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBlbmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAg
ICAvLworICAgIGNsYXNzIFROb2RlU2V0U3RhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5v
ZGVTZXRTdGFjaygpIHt9OworICAgICAgICB+VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQor
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4K
KyAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAg
ICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0
KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5l
bXB0eSgpID8gdG9wU2V0IDogTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNl
dCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBhcmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9p
ZCBwb3BTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5
KCkpOworICAgICAgICAgICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9k
ZVNldHMucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFu
ZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhl
cmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Agc2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0
ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0SW50b05leHQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQq
IG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7
CisKKyAgICAgICAgICAgIGlmICghbm9kZVNldHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
ICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRUb3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5k
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQu
CisgICAgICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQg
aWYgd2UgYXJlIHZpc2l0aW5nCisgICAgICAgIC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVy
IGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uLgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IHRyYWNrIHRob3NlIHN5bWJvbHMuCisgICAgICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3Jh
cGhQYXJlbnROb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMu
ZW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRz
LnRvcCgpLT5pbnNlcnQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHBvcFNldCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0
eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5vZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOwor
CisgICAgICAgIFRQYXJlbnROb2RlU2V0U3RhY2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8v
CisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQg
d2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Yg
c2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2RlIHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2Rl
U2V0TWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFj
dG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1h
aW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFRO
b2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ug
b2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisg
ICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRo
ZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0
b3Agbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRh
aW5lciB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5l
cihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhm
YWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0
UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8v
CisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVm
dG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQu
CisgICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBwbGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVl
IHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmln
aHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3VidHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0
IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2Yg
dGhlIHNjb3BlLgorICAgIC8vIER1cmluZyB0cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAg
ICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJv
bCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisg
ICAgLy8KKyAgICBjbGFzcyBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYgc3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1v
c3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBs
ZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQ
bGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgm
c3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQor
ICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAg
ICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5j
eUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJt
VHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVM
TCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0cmVlKE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBo
KSB7fQorICAgIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9k
ZS0+dHJhdmVyc2UodGhpcyk7IH0KKworICAgIHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1Np
bmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsK
KworICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZp
c2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRy
ZW4oVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVElu
dGVybUFnZ3JlZ2F0ZSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRy
ZW4oVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsK
KyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3VidHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgq
IG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sg
bUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQ
RU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lH
cmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAiICAiOworfQorCit2b2lkIFRE
ZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFt
ZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVu
dCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgor
ICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUo
KSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rp
b25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1dElu
ZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25D
YWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3Zv
aWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1i
b2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdl
dEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAg
ICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2
b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlv
biogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwg
InNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExv
b3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0
cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBv
dXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9w
LT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1
dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAg
ICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQor
ICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1TaW5r
IDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAg
Y2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQ
R1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQ
SF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitj
bGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFz
ZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChU
R3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25D
YWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0
QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAg
IHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwor
fTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBV
VF9ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0
cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9p
ZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisK
K3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
ciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2
ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAv
LyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAg
IHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBo
VHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShn
cmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERl
cHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNp
dEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJh
dmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2Vy
LT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZl
cnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2Uo
Z3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2
ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdy
YXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5j
eUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+
dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2Vy
KTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExv
Z2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7
Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCkBAIC0zMDcsNyAr
MzA4LDcgQEAgc3RydWN0IEF0b21UYWJsZV9SZWMgewogICAgIGludCBzaXplOwogfTsKIAotc3Rh
dGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9Oworc3RhdGljIEF0b21UYWJsZSBsYXRh
YmxlID0geyB7IE5VTEwsIDAsIDAgfSwgeyBOVUxMLCAwLCAwLCB7MH0gfSwgTlVMTCwgTlVMTCwg
MCwgMCB9OwogQXRvbVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsKIAogc3RhdGljIGludCBBZGRB
dG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKQEAg
LTQzNCwxNCArNDM1LDE0IEBAIHN0YXRpYyBpbnQgRmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFi
bGUKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAg
ICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAg
ICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVk
IGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAg
ICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0
aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUu
ICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMp
OwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAg
ICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9
JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgs
IGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlp
IDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0
eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9m
KHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwi
JXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0s
IEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWld
XS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxl
KEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0g
MDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAi
JWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWld
XSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWks
ICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQ
RGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBz
aXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwK
ICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7
CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RB
QkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwg
YXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9m
KHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVi
dWdMb2dNc2coc3RyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikK
QEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2
YWxwCiAJCWNhc2UgLTE6CiAgICAgICAgICAgICAvLyBFT0YKICAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUiKTsJCQkK
LQkJCXJldHVybiB0b2tlbjsKKwkJCWdvdG8gZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwogCQlk
ZWZhdWx0OgogCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwogCQkJU3JjU3RyTmFtZVsxXSA9ICdc
MCc7CkBAIC02ODgsMTAgKzY4OSw5IEBAIHN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAq
IHl5bHZhbHAKIAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOwogCUhhbmRsZVByYWdtYSgoY29uc3QgY2hh
cioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7Ci0JdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCQorZnJlZU1lbW9yeUFuZFJldHVy
blRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKIAkJZnJlZSAoYWxs
VG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyArNzg0LDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsKIAogICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgewogICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsK
QEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHAp
CiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0
b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsK
ICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkg
ewogICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOwogICAgICAgICB9
IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUgQEAgdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wg
KnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQg
dmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07CisgICAgU291cmNlTG9jIGxv
Y2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5
bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIE1hY3JvU3lt
Ym9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7
MCwgMC4wLCAwLCB7MH19OwogICAgIGludCBhdG9tID0gMDsKIAogICAgIG1hY3JvLmJvZHkgPSBO
ZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAgIHZhbC5zY19pbnQgPSB2YWx1
ZTsKLSAgICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwgdmFsdWUpOworICAgIHNucHJp
bnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7
CiAgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKICAg
ICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CiAgICAgc3ltYm9sID0gQWRk
U3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKQEAgLTk5MSwxMyArOTg5
LDEzIEBAIGludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICogeXkKICAgICBjb25z
dCBjaGFyICptZXNzYWdlOwogCWlmIChhdG9tID09IF9fTElORV9fQXRvbSkgewogICAgICAgICB5
eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50
Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXls
dmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2
YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBpZiAoYXRvbSA9PSBfX0ZJTEVf
X0F0b20pIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOwot
ICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19p
bnQpOworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xf
TkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4o
Q1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOCArNzMsOCBAQCB2b2lkICBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciopOyAgICAgCiB2
b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJu
aW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFy
KiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9p
ZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2Fn
ZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAg
ICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3Rv
cmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBp
biBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAg
ICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3Rv
cmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBp
biBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51
bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51
bWJlci4gCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSQogI2lmbmRlZiBfX01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gK
IAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBN
ZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNo
dW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJv
Y2Vzcy5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lk
KTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShB
dG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3Qg
Y2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBh
dG9tKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZpc2lvbiAxMjI3MzgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
Ywkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOCBAQCB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJ
bnB1dFNyYyB7CiAgICAgY2hhciAqcDsKIH0gU3RyaW5nSW5wdXRTcmM7CiAKK3N0YXRpYyBpbnQg
U2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CisKIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5w
dXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICByZXR1cm4gRU9GOwpAQCAt
NzMsNyArNzUsNyBAQCBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwCiAK
IHN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKSB7fQogCi1zdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0geyAwLCAmZW9mX3NjYW4s
ICZlb2Zfc2NhbiwgJm5vb3AgfTsKK3N0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAs
ICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCwgMCwgMCB9OwogCiBzdGF0aWMgaW50IGJ5dGVf
c2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CiAKQEAgLTEyNiw2ICsxMjgs
MTYgQEAgaW50IEZyZWVTY2FubmVyKHZvaWQpCiAgICAgcmV0dXJuIChGcmVlQ1BQKCkpOwogfQog
CitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGNwcC0+UGFX
aGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFB
cmdjICAgICA9IGNvdW50OworICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBTY2Fu
RnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiAwOworfQorCiAvKgogICogc3RyX2dl
dGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewogfSBJ
bnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxp
c2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAg
ICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVk
LgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiBpbnQgY2hlY2tfRU9G
KGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12
b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5l
IGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0
IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLklu
Zm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQgU2V0U3RyaW5nTnVtYmVyKGlu
dCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
aAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgCiBTeW1ib2wgKkFk
ZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtp
bmQga2luZCk7CiBTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBh
dG9tKTsKIFN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQoX19T
WU1CT0xTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9uIDEyMjczOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBl
Lmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsyNjYsOCBAQCBpbnQgUmVhZFRv
a2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9T
VFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAg
aW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRC
eXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAg
aW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsK
KwkgICAgYWNjdW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAg
ICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAg
ICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytd
ID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAg
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsK
ICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVf
TEVOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAg
ICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0g
Y2ggLSAnMCc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAg
ICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAg
ICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7
CisgICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAg
ICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAn
KTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUp
OwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFt
ZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0g
bFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJl
YW0oRklMRSAqZnAsIFRva2VuU3RyZQogICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAg
IGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgot
ICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXls
dmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIp
LCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAg
ICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXCIl
c1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CiAgICAgICAgICAg
ICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOwpAQCAtNDI3LDkgKzQ1Myw5
IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykK
LSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxl
LCB0b2tlbikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIl
cyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQog
I2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9LRU5TX0ggMQogCisjaW5jbHVk
ZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCiAK
ICNkZWZpbmUgRU9GX1NZICgtMSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5o
IgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBu
YW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGgg
IkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJzdHIoMCwgMykgPT0gIkdMXyIp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29u
c2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5maW5kKCJf
XyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRleHQoKQot
ICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwpLAotICAgICAgbU91dHB1dChO
VUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgZGVzdHJveUxleGVyKCk7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0dXJuIGluaXRMZXhlcigpOwot
Ci0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBzbyB0aGF0
IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGluIHByb2Nl
c3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICAgICAgVG9rZW5WZWN0
b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkgJiYgKHN0cmluZyAhPSBOVUxM
KSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVwLgotICAgIG1JbnB1dCA9IG5l
dyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1PdXRwdXQgPSBvdXRwdXQ7Ci0g
ICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgLy8gUGFyc2UuCi0gICAg
Ym9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFudXAuCi0gICAgcmVzZXQoKTsK
LSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0OjpkZWZpbmVNYWNybyhwcDo6
VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6
TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcq
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1l
dGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNl
bWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFjcm8obmV3IE1hY3JvKHR5cGUs
IG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAgIGlmIChpc01hY3JvTmFtZVJl
c2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJv
ci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb0RlZmluZWQo
bmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jvc1sqbmFtZV0gPSBtYWNyby5y
ZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5kZWZpbmVN
YWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBNYWNyb1NldDo6aXRlcmF0b3Ig
aXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jvcy5lbmQo
KSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0
cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBtTWFjcm9z
LmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLXZvaWQgQ29udGV4
dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jvcy5iZWdpbigpLCBtTWFjcm9z
LmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5jbGVhcigpOwotCi0gICAgZGVs
ZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAgbU91dHB1dCA9IE5VTEw7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICBz
dHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3IFRva2VuKDAsIElOVF9DT05T
VEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwotICAgIFRva2VuVmVjdG9yKiBy
ZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRva2VuKTsKLQotICAgIG1NYWNy
b3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50
cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
Q29udGV4dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8K
LQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5j
bHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJNYWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0K
LW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBDb250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250
ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQotICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJv
Y2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVu
Z3RoW10sCi0gICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9p
ZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1
ZiwgaW50IG1heFNpemUpOwotICAgIFRva2VuVmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0
cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1hY3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6
OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2Vu
VmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAgIGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6
OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBpc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmlu
ZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29u
dGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1Nl
dDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQg
ZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBkZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCog
bUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgotICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5W
ZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9TZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9z
LgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9DT05URVhUX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Y3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFH
Tk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8K
KworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VM
b2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdub3N0aWMgbWVzc2Fn
ZXMuCisvLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIGFu
ZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCitjbGFzcyBEaWFnbm9zdGljcworeworICBwdWJsaWM6
CisgICAgZW51bSBTZXZlcml0eQorICAgIHsKKyAgICAgICAgRVJST1IsCisgICAgICAgIFdBUk5J
TkcKKyAgICB9OworICAgIGVudW0gSUQKKyAgICB7CisgICAgICAgIEVSUk9SX0JFR0lOLAorICAg
ICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01FTU9SWSwKKyAgICAgICAgSU5W
QUxJRF9DSEFSQUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVSLAorICAgICAgICBJTlZBTElE
X0VYUFJFU1NJT04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9D
T01NRU5ULAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAgICAgICBVTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19OQU1F
X1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAg
ICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RPT19G
RVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElUSU9O
QUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lG
LAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElP
TkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNF
LAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURfRVhU
RU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAg
ICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFM
SURfTElORV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIsCisgICAgICAgIElO
VkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VORCwKKworICAgICAgICBXQVJO
SU5HX0JFR0lOLAorICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAg
ICBVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBXQVJOSU5HX0VORAorICAgIH07CisKKyAg
ICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOworCisgICAgdm9pZCByZXBvcnQoSUQgaWQsIGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcm90
ZWN0ZWQ6CisgICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOworCisgICAgdmlydHVhbCB2b2lk
IHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkg
PSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESUFHTk9TVElDU19IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25h
bWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKCkKK3sKK30KKwordm9p
ZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9ETyhhbG9rcCk6IEtlZXAgYSBjb3VudCBv
ZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50KGlkLCBsb2MsIHRleHQpOworfQorCitE
aWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVyaXR5KElEIGlkKQoreworICAg
IGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1JfRU5EKSkKKyAgICAgICAgcmV0
dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5J
TkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7CisKKyAgICBhc3NlcnQoZmFsc2UpOwor
ICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAg
KyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJF
Q1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sK
Kworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBk
aXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhl
IGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2
ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFw
cHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgor
ICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJh
Z21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24m
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfSEFORExFUl9IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxl
ci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisK
K25hbWVzcGFjZSBwcAoreworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigp
Cit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
OTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisKKyNp
bmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4K
KworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5o
IgorI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVy
LmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNw
YWNlIHsKK2VudW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJ
UkVDVElWRV9ERUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwK
KyAgICBESVJFQ1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJ
VkVfRUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAg
RElSRUNUSVZFX0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VY
VEVOU0lPTiwKKyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsK
K30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29u
c3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
cmVjdGl2ZURlZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtE
aXJlY3RpdmVVbmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rp
cmVjdGl2ZUlmKCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
SWZkZWYoImlmZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJ
Zm5kZWYoImlmbmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
RWxzZSgiZWxzZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxp
ZigiZWxpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYo
ImVuZGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigi
ZXJyb3IiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgi
cHJhZ21hIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNp
b24oImV4dGVuc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
VmVyc2lvbigidmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0
aXZlTGluZSgibGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURF
TlRJRklFUikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0RF
RklORTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKQorICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlSWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBp
ZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmbmRl
ZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7CisgICAgZWxzZSBpZiAodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7
CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbGlmKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJRjsKKyAgICBlbHNlIGlm
ICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNU
SVZFX0VSUk9SOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlUHJhZ21h
KQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAgICBlbHNlIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9F
WFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9u
KQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0xJTkU7
CisKKyAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0YXRpYyBib29sIGlzQ29uZGl0
aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUpCit7CisgICAgc3dpdGNoIChk
aXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICBjYXNlIERJ
UkVDVElWRV9JRkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0VMU0U6CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgY2FzZSBE
SVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0
b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0aWMgYm9vbCBpc0VPRChjb25z
dCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHJldHVybiAodG9rZW4tPnR5cGUgPT0gJ1xuJykg
fHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNr
aXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHdo
aWxlKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBsZXhlci0+bGV4KHRva2VuKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJp
bmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2
ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8iKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2Nv
cmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5n
OjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6TWFjcm9TZXQmIG1hY3JvU2V0
KQoreworICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hY3JvU2V0LmZp
bmQobmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVyLT5zZWNv
bmQucHJlZGVmaW5lZCA6IGZhbHNlOworfQorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGVm
aW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGVmaW5lZFBhcnNl
cihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb1NldCogbWFjcm9T
ZXQsCisgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICAg
ICAgbUxleGVyKGxleGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICAgICAg
bURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7CisKKyAgICAgICAgbUxleGVy
LT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJ
RVIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0b2tlbi0+dmFsdWUgIT0ga0Rl
ZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJlbiA9IGZhbHNl
OworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9
PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAgICAgICAg
IG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhwcmVzc2lv
biA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIwIjsKKworICAgICAgICBpZiAo
cGFyZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAg
ICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2Vu
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAgICAgLy8g
Q29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgorICAgICAg
ICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT52YWx1ZSA9
IGV4cHJlc3Npb247CisgICAgfQorCisgIHByaXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAg
ICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3Rp
Y3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRv
a2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNy
b1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRs
ZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciksCisgICAg
bU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpLAorICAg
IG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAgICAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tl
bjo6UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUodG9rZW4p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxv
Y2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlw
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
fSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0gJ1xuJykpOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRv
a2VuKTsKKworICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJsb2NrL2dy
b3VwLAorICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KKyAgICBp
ZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2ZShkaXJlY3RpdmUpKQorICAg
IHsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHN3aXRjaChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBE
SVJFQ1RJVkVfTk9ORToKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJ
TkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRlZih0b2tlbik7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4p
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICBw
YXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9J
Rk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0
b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAg
ICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNU
SVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FWFRFTlNJT046CisgICAgICAg
IHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVD
VElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZlcnNpb24odG9rZW4pOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0
b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVG
SU5FKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4tPnZhbHVlLCAqbU1hY3JvU2V0
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNS
T19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8u
dHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygn
ICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlv
bi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1h
Y3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJ
RVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJz
LnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywn
KTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdl
dCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHRv
a2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1lbnQKKyAg
ICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dzIHVzIHRvIHJldXNlIFRva2Vu
OjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jvcy4KKyAgICAgICAgdG9rZW4t
PmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRz
LnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAg
IH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAg
Ly8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50IGxpc3QgaXMgbm90IGNvbnNp
ZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3IgZWl0aGVy
IGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5mcm9udCgpLnNldEhh
c0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJl
ZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYm
ICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5p
bnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXRE
aXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRl
cmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOworICAgIGlmIChpdGVy
ICE9IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnBy
ZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYWNyb1NldC0+ZXJhc2Uo
aXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
fQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiogdG9rZW4pCit7CisgICAg
YXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKTsKKyAgICBwYXJzZUNv
bmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRl
ZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElS
RUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpOworICAgIHBhcnNlQ29u
ZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2Uo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VM
U0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxv
Y2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykK
KyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxp
bmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZU
RVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxvY2suZm91bmRFbHNlR3JvdXAgPSB0cnVl
OworICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFsaWRHcm91cDsKKyAgICBibG9j
ay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgZXh0
cmEgdG9rZW5zIGFmdGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
aWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVj
dGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0
YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
b25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBp
ZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1
c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIs
IHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNl
R3JvdXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2Nr
LmZvdW5kVmFsaWRHcm91cCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCBwYXJzZSB0aGUgZXhw
cmVzc2lvbi4KKyAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEgZGlhZ25v
c3RpYy4KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsKKyAgICAgICAgc2tpcFVudGls
RU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlu
dCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgIGJsb2NrLnNraXBH
cm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHBy
ZXNzaW9uICE9IDA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2Vu
KiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
RU5ESUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZf
V0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3RhY2sucG9wX2Jh
Y2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjZW5kaWYuCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tl
biogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZF
X0VSUk9SKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47
CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVI
YW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisK
Ky8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAgIGVudW0gU3Rh
dGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BBUkVOLAorICAg
ICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsKKworICAgIGJv
b2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOworICAgIGludCBz
dGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3
aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFT
VCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnZhbHVlOworICAg
ICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJ
RVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAg
ICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFs
dWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFJJR0hUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4t
PnR5cGUgPT0gJyknKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICB2YWxpZCA9IHZh
bGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAvLyBFbXB0eSBwcmFnbWEuCisg
ICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRfUEFSRU4pIHx8ICAgICAgLy8gV2l0
aG91dCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gUklHSFRfUEFSRU4g
KyAxKSk7ICAvLyBXaXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKKyAgICB9
CisgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9y
IGVtcHR5IHByYWdtYS4KKyAgICB7CisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVQ
cmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FWFRFTlNJT04pOworCisgICAgZW51
bSBTdGF0ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAg
ICBFWFRfQkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3Rk
OjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xu
JykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkg
bmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
Q09MT046CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhB
VklPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYg
KHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBW
RVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQg
dmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3Rh
dGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2
ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVY
UEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAh
PSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
dmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZl
SGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3Nl
cnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0
YXRlCisgICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAg
ICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0g
MDsKKyAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFj
cm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSBsaW5l
ID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3Ry
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB9
CisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0g
RklMRV9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXIt
PnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJFUiAr
IDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29sIERp
cmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9uYWxT
dGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJsb2Nr
JiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2suc2tp
cEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9jayBi
bG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVlOworICAgIGJsb2NrLmxvY2F0aW9u
ID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYgKHNraXBwaW5nKCkpCisgICAgeworICAgICAg
ICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFs
IGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhp
cyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBw
YXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVt
aXQgYSBkaWFnbm9zdGljLgorICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OworICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7
CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICAgICAg
ZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICAgICAgZXhwcmVzc2lv
biA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBw
YXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAwOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibG9jay5za2lwR3JvdXAgPSBleHBy
ZXNzaW9uID09IDA7CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24g
IT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30K
KworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8Cisg
ICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKSk7CisKKyAg
ICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlh
Z25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNl
ciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVz
c2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNzKTsKKworICAgIGludCBleHBy
ZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lv
blBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisgICAgLy8gV2FybiBpZiB0aGVy
ZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgorICAgIGlmICghaXNFT0QodG9rZW4p
KQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworaW50
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKQorewor
ICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpIHx8Cisg
ICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYpKTsKKwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAg
ICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAwOworCisg
ICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZmRlZiBleHByZXNzaW9uLgor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworfSAgLy8gbmFtZXNw
YWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisj
aW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJj
ZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2Ns
YXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2
ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2Vy
KFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAg
ICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQ
UF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQg
cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2Vu
KiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNl
KFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2
b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4q
IHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2Vu
KiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wg
c2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9r
ZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBw
YXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlv
bmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJj
ZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9v
bCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29s
IGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAg
ICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAg
ICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VH
cm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBzdGQ6OnZlY3Rv
cjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsKKyAgICBUb2tlbml6ZXIqIG1U
b2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURp
YWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9E
SVJFQ1RJVkVfUEFSU0VSX0hfCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTM4IEBACisvKiBB
IEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24g
aW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworCisgICBD
b3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAg
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBv
ciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdv
cmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBp
c24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3Ig
YSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0
ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIg
c2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAg
IHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhl
IHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhj
ZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisK
Ky8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFu
LCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBh
cnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdp
dGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4g
IFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhl
eSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBh
cmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisg
ICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJ
TkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJp
c29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAg
Ki8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisKKy8qIFNrZWxldG9uIG5hbWUuICAq
LworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAg
Ki8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUg
WVlMU1BfTkVFREVEIDAKKworLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9u
IG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlwYXJzZSBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgcHBs
ZXgKKyNkZWZpbmUgeXllcnJvciBwcGVycm9yCisjZGVmaW5lIHl5bHZhbCAgcHBsdmFsCisjZGVm
aW5lIHl5Y2hhciAgcHBjaGFyCisjZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZworI2RlZmluZSB5eW5l
cnJzIHBwbmVycnMKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBk
ZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0
YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0
aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBUT0tfQ09OU1RfSU5UID0gMjU4
LAorICAgICBUT0tfT1BfT1IgPSAyNTksCisgICAgIFRPS19PUF9BTkQgPSAyNjAsCisgICAgIFRP
S19PUF9ORSA9IDI2MSwKKyAgICAgVE9LX09QX0VRID0gMjYyLAorICAgICBUT0tfT1BfR0UgPSAy
NjMsCisgICAgIFRPS19PUF9MRSA9IDI2NCwKKyAgICAgVE9LX09QX1JJR0hUID0gMjY1LAorICAg
ICBUT0tfT1BfTEVGVCA9IDI2NiwKKyAgICAgVE9LX1VOQVJZID0gMjY3CisgICB9OworI2VuZGlm
CisvKiBUb2tlbnMuICAqLworI2RlZmluZSBUT0tfQ09OU1RfSU5UIDI1OAorI2RlZmluZSBUT0tf
T1BfT1IgMjU5CisjZGVmaW5lIFRPS19PUF9BTkQgMjYwCisjZGVmaW5lIFRPS19PUF9ORSAyNjEK
KyNkZWZpbmUgVE9LX09QX0VRIDI2MgorI2RlZmluZSBUT0tfT1BfR0UgMjYzCisjZGVmaW5lIFRP
S19PUF9MRSAyNjQKKyNkZWZpbmUgVE9LX09QX1JJR0hUIDI2NQorI2RlZmluZSBUT0tfT1BfTEVG
VCAyNjYKKyNkZWZpbmUgVE9LX1VOQVJZIDI2NworCisKKworCisvKiBDb3B5IHRoZSBmaXJzdCBw
YXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhp
cyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdl
bmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFy
c2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVk
ZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIu
aCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKK3R5cGVkZWYg
X19pbnQ2NCBZWVNUWVBFOworI2RlZmluZSBzdHJ0b2xsIF9zdHJ0b2k2NAorI2Vsc2UKKyNpbmNs
dWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50bWF4X3QgWVlTVFlQRTsKKyNlbmRpZiAgLy8gX01T
Q19WRVIKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9JU19E
RUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9r
ZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQorCisKK3N0
YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGlj
IHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisK
Ky8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVC
VUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwor
I2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5l
IFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNl
bmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VO
X1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisjaWYgISBkZWZpbmVk
IFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZ
U1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisKKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0
IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAq
LworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZ
UEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVf
SU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2lu
dDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lm
ZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2Owor
I2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2
OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZu
ZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBf
X1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBz
aXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAg
ZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUg
WVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIFlZRU5B
QkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0
ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVm
IFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBT
dXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAh
IGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZv
aWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisK
Ky8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNv
bnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChu
KQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0
aWMgaW50CitZWUlEIChpbnQgaSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEIChpKQorICAgIGlu
dCBpOworI2VuZGlmCit7CisgIHJldHVybiBpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQg
eXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFs
bG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlm
ZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZk
ZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQor
IyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxs
b2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmlu
ZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVm
aW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisj
ICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9D
QV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NU
RExJQl9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisj
IGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0
eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7
IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9D
X01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBh
Z2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNh
biBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAg
IGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21h
bGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVk
IHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQor
IyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUg
WVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVk
IF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZp
bmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZS
RUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmlu
ZSBfU1RETElCX0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisj
ICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBk
ZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Cit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZ
WUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0gg
JiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lk
ICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVu
ZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9W
RVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRl
ZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYg
WVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWdu
ZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVf
aW50MTYgeXlzczsKKyAgWVlTVFlQRSB5eXZzOworICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUg
bWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwor
IyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEp
CisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBz
dGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZ
VEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZ
U1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQg
b2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwor
ICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05V
Q19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBc
CisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihG
cm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisg
ICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5
eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlb
eXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBl
bmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5l
dyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdp
dmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBh
bmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5j
ZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBz
dGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRv
CQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJ
CVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sg
PSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXpl
b2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRl
cyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAo
WVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUg
dGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAxNAorLyogWVlMQVNUIC0t
IExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDE3NQorCisvKiBZ
WU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAg
MjcKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlO
TlRTICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5S
VUxFUyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZ
WU5TVEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisj
ZGVmaW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlc
CisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhd
IDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBu
dW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAyNSwgICAgMjYsICAgIDE5
LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3LCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAgMiwgICAgMjQsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAz
LCAgICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9m
IHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAq
Lworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAg
IDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAgMTksICAgIDIzLCAgICAy
NywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0NywgICAgNTEsICAgIDU1LCAg
ICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3OSwgICAgODIsICAgIDg1
LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBv
ZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9
Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEsICAgICAzLCAgICAtMSwg
ICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgIDUsICAgIDI5LCAgICAt
MSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgIDcsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOSwgICAgMjksCisg
ICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMywgICAgMjks
ICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMiwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxNSwg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAx
OCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDIx
LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAgICAtMSwgICAgMjksICAg
IDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0xLCAgICAyNCwgICAgMjks
ICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjksCisgICAgICAtMSwgICAg
MjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2Ug
bGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgIDg3LCAgICA4NywgICAg
OTQsICAgIDk1LCAgICA5OCwgICAxMDEsICAgMTA0LCAgIDEwNywgICAxMTAsCisgICAgIDExMywg
ICAxMTYsICAgMTE5LCAgIDEyMiwgICAxMjUsICAgMTI4LCAgIDEzMSwgICAxMzQsICAgMTM3LCAg
IDE0MCwKKyAgICAgMTUzLCAgIDE2NiwgICAxNjksICAgMTcyLCAgIDE3NSwgICAxNzgsICAgMTgx
Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VO
X1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1i
b2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBh
dCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg
eXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUT0tfQ09O
U1RfSU5UIiwgIlRPS19PUF9PUiIsCisgICJUT0tfT1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYn
IiwgIlRPS19PUF9ORSIsICJUT0tfT1BfRVEiLCAiJzwnIiwKKyAgIic+JyIsICJUT0tfT1BfR0Ui
LCAiVE9LX09QX0xFIiwgIlRPS19PUF9SSUdIVCIsICJUT0tfT1BfTEVGVCIsICInKyciLAorICAi
Jy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlRPS19VTkFSWSIsICInISciLCAiJ34nIiwgIico
JyIsICInKSciLAorICAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNzaW9uIiwgMAorfTsKKyNl
bmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJu
YWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAg
IDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAg
MjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYs
ICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAgMjY3LCAgICAzMywgICAx
MjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjkKK307
CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFu
ZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltd
ID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKworLyogWVlERUZBQ1RbU1RB
VEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCisgICBTVEFU
RS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4g
IFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0
LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAx
NCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIx
LAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQoreworICAgICAgLTEsICAgICA3
LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBv
ZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAqLworI2RlZmluZSBZWVBB
Q1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAg
ICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAg
ICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAyNywgICAtMTEsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYsICAgMTMwLCAgIDE0Mywg
ICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgIDM3LCAgICAz
NywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQorfTsKKworLyogWVlQR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQor
eworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUt
TlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwg
c2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAg
IG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMu
CisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVf
TklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQoreworICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4
LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAy
MCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAg
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIKK307CisKK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAy
MCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAg
MywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDE4
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAg
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRo
ZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUg
U1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQorewor
ICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI4
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgIDAsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOQorfTsKKworI2RlZmlu
ZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9
IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2Rl
ZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlh
Ym9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZ
RVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFy
aWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVS
Uk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNp
b24gMSwgdGhpcyBjYW4gZ28uICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgor
CisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJB
Q0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZ
RU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9
IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sgKDEp
OwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAg
ZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
Xygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJCQkJ
CQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKworCisjZGVmaW5lIFlZVEVS
Uk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNl
dCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0
aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUg
cHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCisKKyNkZWZpbmUg
WVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisjIGRl
ZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJ
CVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5l
ICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3Rf
Y29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVudCku
bGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJl
bnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJ
CQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5m
aXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAo
UmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3Vy
cmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVt
bjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKworCisv
KiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4K
KyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBp
ZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRo
ZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMg
aWYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwg
TG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAg
KExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYykubGFz
dF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElP
Tl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZ
TEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCisj
aWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9Q
QVJBTSkKKyNlbHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNl
bmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJV
RworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBl
bmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAo
eXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAo
MCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0
aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAor
ICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUp
OwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBU
eXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJ
CQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZ
WU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJH
U1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBl
LCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxz
ZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwg
eXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsK
KyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4
dDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNv
bnRleHQpOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAg
WVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UK
KyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgewor
ICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Citg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklM
RSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwg
Q29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAg
ICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMp
CisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0p
OworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1l
W3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwg
eXl2YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZy
b20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5
eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQor
I2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoYm90dG9tLCB0b3ApCisgICAgeXl0
eXBlX2ludDE2ICpib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp0b3A7CisjZW5kaWYKK3sKKyAg
WVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IGJvdHRvbSA8PSB0b3A7
ICsrYm90dG9tKQorICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90
dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAg
ICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJRCAo
MCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5
X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUsIENvbnRleHQgKmNvbnRl
eHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5cnVsZSwg
Y29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXlydWxlOworICAgIENvbnRl
eHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKKyAg
aW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07Cisg
IFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUp
OlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcg
cmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7
CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAg
ICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICwg
Y29udGV4dCk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVn
KQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30g
d2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAg
SXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2Fu
IGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZp
bmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQor
IyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKwor
CisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4g
ICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRp
ZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRv
IChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRo
b2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUg
cmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNU
QUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lz
aW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZp
bmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQor
CisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBf
U1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4g
dGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIp
CisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hh
ciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAw
OyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsK
K30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVk
IF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisj
ICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURF
U1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAg
WVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykK
KyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFy
ICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlk
ID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQr
KyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsK
K30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZ
WVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3Nh
cnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3Ig
eXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5u
ZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEg
Y29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCku
ICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8g
bm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAor
ICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFy
ICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAg
IHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0
cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wn
JzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNh
c2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAg
IGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAg
IGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5
bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90
ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0
cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVu
ZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1
bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVy
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRp
bmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRo
aW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNv
cGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4
IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92
ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZ
U0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQg
eXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBB
Q1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQor
ICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZ
U0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZ
WVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAg
IGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJP
U0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhp
cyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQor
CSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywg
ZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywg
ZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVu
ZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0
YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0
aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAg
ICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4
cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikK
KwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJl
Zml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0
aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBp
bnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGlu
IGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hl
Y2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0g
PCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQg
PSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0g
eXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5
eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0g
eXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJP
Ul9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNp
emUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAn
OworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5
eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7
CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6
ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJ
ICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsK
KyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9v
dmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOwor
CisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKwor
ICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5m
cmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZp
bmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0
cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0g
eXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdc
MCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5
eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkr
K10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJ
CSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQor
fQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNz
b2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBj
aGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRl
eHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7Cisg
ICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgorewor
ICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykK
KyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlw
ZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisK
KyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorDAorCisvKiBQcmV2ZW50IHdhcm5p
bmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJB
TQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFy
c2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlm
CisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNl
CitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwor
CisKKworCisKKworLyotLS0tLS0tLS0tLgorfCB5eXBhcnNlLiAgfAorYC0tLS0tLS0tLS0qLwor
CisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQK
K3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRp
ZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UK
K2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCisj
ZW5kaWYKK3sKKyAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisK
Ky8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworWVlT
VFlQRSB5eWx2YWw7CisKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitp
bnQgeXluZXJyczsKKworICBpbnQgeXlzdGF0ZTsKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0
OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBl
bmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29rLWFoZWFkIHRva2VuIGFz
IGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tl
biA9IDA7CisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2Fn
ZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07Cisg
IGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9m
IHl5bXNnYnVmOworI2VuZGlmCisKKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoK
KyAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKKyAgICAgYHl5dnMnOiByZWxhdGVkIHRv
IHNlbWFudGljIHZhbHVlcywKKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKwor
ICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93
IHl5b3ZlcmZsb3cKKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAg
LyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRI
XTsKKyAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7CisgIHl5dHlwZV9pbnQxNiAqeXlzc3A7
CisKKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgWVlTVFlQRSB5eXZzYVtZ
WUlOSVRERVBUSF07CisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKKyAgWVlTVFlQRSAqeXl2c3A7
CisKKworCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAo
TikpCisKKyAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICAvKiBUaGUg
dmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9t
IHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisKKyAg
LyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4K
KyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLwor
ICBpbnQgeXlsZW4gPSAwOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNl
XG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9
IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAq
LworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVt
ZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBv
biB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxl
bWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3M7CisgIHl5
dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRl
IC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0
aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQu
ICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3Ar
KzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5
eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50
IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZ
WVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdwor
ICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4g
IFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhl
IHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7
CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRl
ciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNl
IGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRp
b25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAg
YmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAo
WVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAo
Knl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCisJCSAg
ICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAg
IH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUK
KyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUg
c3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3Np
emUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAg
ICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBU
SDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxs
b2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tf
QllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMp
OworCisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAg
WVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlv
dmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2
c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJT
dGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBz
dGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0t
LS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERv
IGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEK
KyAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhv
dXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlz
dGF0ZV07CisgIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisK
KyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFk
eSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9G
IG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1Q
VFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAi
KSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVP
RikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQor
ICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZ
TUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
KyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9L
RU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFj
dGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5
eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5
biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4g
PT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4g
PSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJ
TkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVy
cm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYg
KHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2st
YWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4s
ICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5s
ZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0g
WVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBn
b3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0
IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5
eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJs
YWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVs
ZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZ
TEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9u
OgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUg
c2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRl
ZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25p
bmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQg
c21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5
IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisK
KworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAg
ICAgY2FzZSAyOgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFlZQUNDRVBUOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDc6CisKKyAgICB7
CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMp
XSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA9PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDExOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
PDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAtICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisgICAgeworICAgICAgICBpZiAo
KHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAl
ICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9
IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAg
ICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykg
LSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Cisg
ICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZz
cFsoMykgLSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIy
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
fiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAo
eXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgzKV0pOworICAgIDt9CisgICAg
YnJlYWs7CisKKworLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwg
Jnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOwor
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisK
KworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1p
bmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBw
b3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwor
CisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tF
TlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYm
IHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3Rh
dGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOwor
CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90
IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICov
CisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlF
UlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIp
KTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAs
IHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2Fs
bG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9j
ID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2Mg
PD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExP
Q19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxv
Yyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAg
IGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6
ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6
ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1z
ZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAg
fQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwor
CSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0g
MykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9v
ay1haGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAg
IGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5k
IG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJ
fQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJ
CSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsK
Kwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tl
biBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJy
bGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVS
Uk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hl
biB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVs
IHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAg
Ki8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8q
IERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmln
Z2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5
eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAq
eXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNv
bW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRl
ZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAg
IHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZz
cCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlz
c3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAo
eXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisK
KworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJT
aGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47
CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXly
ZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJl
c3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1
c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6
CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1
bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBp
ZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0
ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwg
Y29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdo
aWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8K
KyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwor
ICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51
cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAh
PSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9W
RVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNn
KTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZ
SUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENv
bnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0
b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgewor
ICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9s
bCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09O
U1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0
eXBlID0gVE9LX09QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5
cGUgPSBUT0tfT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlw
ZSA9IFRPS19PUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUg
PSBUT0tfT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0g
VE9LX09QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9IFRP
S19PUF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBU
T0tfT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUg
PSBUT0tfT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7
CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlw
ZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAg
ICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICct
JzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNl
ICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJl
YWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzog
dHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7Cisg
ICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9
ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFk
dmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAg
IGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJu
IHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBy
ZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4
cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoK
KyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30K
KworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0
KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURp
YWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tl
biA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5
eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6
CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+
bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgTGV4ZXI7Citz
dHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAgcHVibGljOgorICAg
IEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
OworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKKworICBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsK
KworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307
CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
RVhQUkVTU0lPTl9QQVJTRVJfSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc0IEBACisvKgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVT
IHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1Ug
QUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhF
IEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2Vy
ZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRp
YWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZF
UikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1
ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8
Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIK
KyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9N
U0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRv
aTY0CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBF
OworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2Rl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0
Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxl
eGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8g
bmFtZXNwYWNlCislfQorCislcHVyZS1wYXJzZXIKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2Ut
cGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQor
Cisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7
CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNv
bik7CislfQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAorJWxlZnQgVE9LX09QX09SCislbGVmdCBU
T0tfT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBUT0tfT1Bf
RVEgVE9LX09QX05FCislbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBUT0tfT1BfR0UKKyVsZWZ0IFRP
S19PUF9MRUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScK
KyVyaWdodCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAg
ICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsKKyAgICAgICAg
WVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBUT0tfQ09OU1RfSU5UCisg
ICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8
fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9BTkQgZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVz
c2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICde
JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgIT0g
JDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfR0UgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPD0gJDM7CisgICAgfQor
ICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPiAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAk
MSA8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX1JJR0hUIGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09Q
X0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAo
JDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7Cisg
ICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAk
MSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lv
biB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVh
bSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29u
dGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pF
Uk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRv
a2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNz
aW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8
ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gISAkMjsKKyAg
ICB9CisgICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgeworICAgICAgICAkJCA9
IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAg
ICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFRPS19V
TkFSWSB7CisgICAgICAgICQkID0gKyAkMjsKKyAgICB9CisgICAgfCAnKCcgZXhwcmVzc2lvbiAn
KScgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKzsKKworJSUKKworaW50IHl5bGV4KFlZU1RZ
UEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAg
IHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50
eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICAgICps
dmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOworICAgICAgICB0
eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
TEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJ
R0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUg
PSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAg
Y2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7
IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAn
LSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFr
OworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5
cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAg
ICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAn
fic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9
CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBp
cyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsK
KworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNz
aW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25v
c3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2Vu
LCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFn
bm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAg
IGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAg
ICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgewor
ICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2Fz
ZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01F
TU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZh
dWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIKIAotI2luY2x1ZGUgPGNzdGRp
bz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7
CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQpLAotICAgICAgbVN0cmluZyhz
dHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAgbUluZGV4KC0xKSwKLSAgICAg
IG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAotICAgICAgbVN0YXRlKGtTdGF0
ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQogewotICAg
IEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJv
b2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50
KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQobUluZGV4IDw9IG1Db3VudCk7
Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsK
KyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1D
b3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6
IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdb
aV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBi
dWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCiB7Ci0gICAg
aW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1JbmRleDsKLSAgICAvLyBLZWVw
IHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRoZSBjdXJyZW50IHN0cmluZyBp
cyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3RhcnRJbmRleCkgJiYgKG5yZWFk
IDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4
U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAgICAgewotICAgICAgICBpbnQg
YyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkKLSAgICAgICAgICAgICAgICBt
RXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExv
Yy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExv
Yy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAgICAgICBtUmVhZExv
Yy5jSW5kZXggKz0gc2l6ZTsKIAotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgLy8g
QWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgor
ICAgICAgICBpZiAobVJlYWRMb2MuY0luZGV4ID09IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkK
ICAgICAgICAgewotICAgICAgICAgIGNhc2Uga1N0YXRlSW5pdGlhbDoKLSAgICAgICAgICAgIGlm
IChjID09ICcvJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBQb3RlbnRpYWxs
eSBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgc3dpdGNoIChwZWVrQ2hhcigpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAg
ICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAgICAgICBtU3RhdGUg
PSBrU3RhdGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhcigpOyAgLy8g
RWF0ICcqJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlQmxvY2tDb21tZW50
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAg
ICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAo
YyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9
IGM7Ci0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3RhdGVCbG9ja0NvbW1l
bnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgKHBlZWtDaGFyKCkgPT0gJy8nKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAgLy8gRWF0ICcvJy4KLSAg
ICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSAnICc7ICAvLyBSZXBsYWNlIGNvbW1lbnQgd2l0
aCB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBMaW5lIGJyZWFrcyBhcmUgbmV2ZXIgc2tpcHBlZC4KLSAgICAgICAgICAgICAg
ICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgKyttUmVhZExvYy5zSW5kZXg7CisgICAgICAgICAgICBt
UmVhZExvYy5jSW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIG5yZWFk
OwotfQotCi1pbnQgSW5wdXQ6OmdldENoYXIoKQotewotICAgIGlmIChlb2YoKSkgcmV0dXJuIEVP
RjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsKLSAgICBpbnQgYyA9
IHN0clttU2l6ZSsrXTsKLQotICAgIC8vIFN3aXRjaCB0byBuZXh0IHN0cmluZyBpZiB0aGUgY3Vy
cmVudCBvbmUgaXMgZnVsbHkgcmVhZC4KLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1J
bmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIgcmVhZCBmcm9tIGVtcHR5IHN0cmluZy4KLSAgICBBU1NF
UlQobGVuZ3RoICE9IDApOwotICAgIGlmICgoKGxlbmd0aCA8IDApICYmIChzdHJbbVNpemVdID09
ICdcMCcpKSB8fAotICAgICAgICAoKGxlbmd0aCA+IDApICYmIChtU2l6ZSA9PSBsZW5ndGgpKSkK
LSAgICAgICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gYzsKLX0KLQotaW50
IElucHV0OjpwZWVrQ2hhcigpCi17Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVudCByZWFkIHBvc2l0
aW9uLgotICAgIGludCBpbmRleCA9IG1JbmRleDsKLSAgICBpbnQgc2l6ZSA9IG1TaXplOwotICAg
IGludCBjID0gZ2V0Q2hhcigpOwotCi0gICAgLy8gUmVzdG9yZSByZWFkIHBvc2l0aW9uLgotICAg
IG1JbmRleCA9IGluZGV4OwotICAgIG1TaXplID0gc2l6ZTsKLSAgICByZXR1cm4gYzsKLX0KLQot
dm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0U3RyaW5nKCkKLXsKLSAgICBBU1NFUlQobUluZGV4IDwg
bUNvdW50KTsKLQotICAgIG1TaXplID0gMDsKLSAgICBkbwotICAgIHsKLSAgICAgICAgKyttSW5k
ZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigpICYmIGlzU3RyaW5nRW1wdHkobUluZGV4KSk7Ci19Ci0K
LWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1wdHkoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRl
eCA8IG1Db3VudCk7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBtU3RyaW5nW21JbmRleF07Ci0g
ICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5kZXgpOwotICAgIHJldHVybiAobGVuZ3Ro
ID09IDApIHx8ICgobGVuZ3RoIDwgMCkgJiYgKHN0clswXSA9PSAnXDAnKSk7Ci19Ci0KLWludCBJ
bnB1dDo6c3RyaW5nTGVuZ3RoKGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBtQ291
bnQpOwotICAgIHJldHVybiBtTGVuZ3RoID8gbUxlbmd0aFtpbmRleF0gOiAtMTsKKyAgICByZXR1
cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03LDY2ICs3LDQwIEBACiAjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9J
TlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KIAorI2luY2x1
ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7CiAKLS8vIFJlYWRzIHRoZSBnaXZlbiBzZXQg
b2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4KLS8vIFN0cmlwcyBjb21tZW50cy4KKy8vIEhv
bGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCiBjbGFzcyBJbnB1dAogewogICBwdWJsaWM6
CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0gICAgZW51bSBFcnJvcgotICAgIHsKLSAg
ICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vycm9yVW5leHBlY3RlZEVPRgotICAgIH07Ci0g
ICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtRXJyb3I7IH0KKyAgICBpbnQgY291bnQo
KSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQogCi0gICAgLy8gUmV0dXJu
cyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVkLgotICAgIGludCBz
dHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsKLQotICAgIC8vIFJl
YWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBpbnRvIGJ1Zi4KLSAgICAvLyBSZXR1cm5zIHRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotICAgIC8vIEl0IHJlcGxhY2VzIGVhY2ggY29t
bWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRzIG9ubHkgb25lIHN0cmluZwotICAgIC8vIGF0
IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMgb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZSBz
dHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5pbmdmdWwgZGlhZ25vc3RpYyBtZXNzYWdlcy4K
LSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKTsKKyAgICBpbnQgcmVhZChjaGFy
KiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0ZToKLSAgICBlbnVtIFN0YXRlCisgICAgc3Ry
dWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBrU3RhdGVJbml0aWFsLAotICAgICAgICBrU3Rh
dGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRlQmxvY2tDb21tZW50Ci0gICAgfTsKKyAgICAg
ICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50IGNJbmRleDsgIC8v
IENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hhcigpOwotICAgIGludCBwZWVrQ2hhcigpOwot
ICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0byB0aGUgbmV4dCBub24tZW1wdHkgc3RyaW5n
LgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgc3RyaW5nIGlzIGZ1bGx5
IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0eS4KLSAgICBib29sIGlzU3RyaW5nRW1wdHko
aW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gc3RyaW5n
LgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0
cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChpbnQgaW5kZXgpOworICAgICAgICBMb2NhdGlv
bigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9CisgICAgfTsKKyAgICBjb25zdCBMb2NhdGlv
biYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1SZWFkTG9jOyB9CiAKKyAgcHJpdmF0ZToKICAg
ICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50OwogICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBtU3Ry
aW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5n
dGg7CiAKLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50IG1JbmRleDsgICAv
LyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0gICAgaW50IG1TaXpl
OyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNjYW5uZWQuCi0KLSAgICAvLyBDdXJyZW50
IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBtRXJyb3I7Ci0gICAgU3RhdGUgbVN0YXRlOwor
ICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5MZXhlcigpCit7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCituYW1lc3BhY2Ug
cHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgoreworICBwdWJsaWM6CisgICAg
dmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9
IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0xFWEVSX0hfCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYs
MzkgKzYsMTcgQEAKIAogI2luY2x1ZGUgIk1hY3JvLmgiCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0KLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgogCiBuYW1lc3Bh
Y2UgcHAKIHsKIAotTWFjcm86Ok1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAgICAgICBzdGQ6OnN0
cmluZyogbmFtZSwKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAg
ICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotICAgIDogbVR5cGUodHlwZSksCi0g
ICAgICBtTmFtZShuYW1lKSwKLSAgICAgIG1QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLAotICAgICAg
bVJlcGxhY2VtZW50cyhyZXBsYWNlbWVudHMpCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFj
cm8mIG90aGVyKSBjb25zdAogewotfQotCi1NYWNybzo6fk1hY3JvKCkKLXsKLSAgICBkZWxldGUg
bU5hbWU7Ci0KLSAgICBpZiAobVBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBzdGQ6OmZvcl9l
YWNoKG1QYXJhbWV0ZXJzLT5iZWdpbigpLCBtUGFyYW1ldGVycy0+ZW5kKCksIERlbGV0ZSgpKTsK
LSAgICAgICAgZGVsZXRlIG1QYXJhbWV0ZXJzOwotICAgIH0KLQotICAgIGlmIChtUmVwbGFjZW1l
bnRzKQotICAgIHsKLSAgICAgICAgc3RkOjpmb3JfZWFjaChtUmVwbGFjZW1lbnRzLT5iZWdpbigp
LCBtUmVwbGFjZW1lbnRzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBkZWxldGUgbVJlcGxh
Y2VtZW50czsKLSAgICB9CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAg
ICAgICAgIChuYW1lID09IG90aGVyLm5hbWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09
IG90aGVyLnBhcmFtZXRlcnMpICYmCisgICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIu
cmVwbGFjZW1lbnRzKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyby5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtNyw0NSArNywzOCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8K
ICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQogbmFtZXNwYWNlIHBwCiB7CiAK
LWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9rZW47CisKK3N0cnVjdCBNYWNybwogewotICBwdWJsaWM6
CiAgICAgZW51bSBUeXBlCiAgICAgewogICAgICAgICBrVHlwZU9iaiwKICAgICAgICAga1R5cGVG
dW5jCiAgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0
ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAg
IE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBl
T2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OwogCi0g
ICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4KLSAgICBNYWNybyhU
eXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgVG9rZW5W
ZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7
Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsg
fQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbU5h
bWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJu
IG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxhY2VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwotICAgIHN0ZDo6c3Ry
aW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0
b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9v
bCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAg
IFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOwog
fTsKIAotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01B
Q1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAK
K30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFD
Uk9fSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVy
LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRl
IDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgVG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgor
eworIHB1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsK
KworICAgIFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRva2VucykKKyAgICB7CisgICAgICAgIHRv
a2Vucy0+c3dhcChtVG9rZW5zKTsKKyAgICAgICAgbUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCisgICAgeworICAgICAg
ICBpZiAobUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdG9r
ZW4tPnJlc2V0KCk7CisgICAgICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpMQVNUOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKnRva2VuID0gKm1J
dGVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUb2tlbkxleGVyKTsKKworICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7Cisg
ICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1JdGVyOworfTsKKworTWFjcm9FeHBhbmRl
cjo6TWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtTWFjcm9T
ZXQobWFjcm9TZXQpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworTWFj
cm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIoKQoreworICAgIHdoaWxlICghbUNvbnRleHRTdGFj
ay5lbXB0eSgpKSBwb3BNYWNybygpOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgICBnZXRUb2tlbih0
b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxl
ZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgaWYgKGl0
ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNv
bnN0IE1hY3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaWYgKG1hY3JvLmRpc2Fi
bGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMg
bm90IGV4cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRlZC4KKyAgICAgICAgICAgIHRva2VuLT5z
ZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0
VG9rZW5MZWZ0UGFyZW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgdGhlIHRva2Vu
IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICcoJywKKyAgICAgICAg
ICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4pOworICAg
IH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4pCit7Cisg
ICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0KCkpCisgICAgeworICAgICAgICAqdG9rZW4gPSAqbVJl
c2VydmVUb2tlbjsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4K
KyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2so
KS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHBvcE1hY3JvKCk7CisgICAgfQorCisgICAgaWYg
KCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICAqdG9rZW4gPSBtQ29udGV4
dFN0YWNrLmJhY2soKS0+Z2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1M
ZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRU
b2tlbihjb25zdCBUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5
KCkpCisgICAgeworICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNr
LmJhY2soKTsKKyAgICAgICAgY29udGV4dC0+dW5nZXQoKTsKKyAgICAgICAgYXNzZXJ0KGNvbnRl
eHQtPmluZGV4ID49IDApOworICAgICAgICBhc3NlcnQoY29udGV4dC0+cmVwbGFjZW1lbnRzW2Nv
bnRleHQtPmluZGV4XSA9PSB0b2tlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGFzc2VydCghbVJlc2VydmVUb2tlbi5nZXQoKSk7CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVz
ZXQobmV3IFRva2VuKHRva2VuKSk7CisgICAgfQorfQorCitib29sIE1hY3JvRXhwYW5kZXI6Omlz
TmV4dFRva2VuTGVmdFBhcmVuKCkKK3sKKyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigm
dG9rZW4pOworCisgICAgYm9vbCBscGFyZW4gPSB0b2tlbi50eXBlID09ICcoJzsKKyAgICB1bmdl
dFRva2VuKHRva2VuKTsKKworICAgIHJldHVybiBscGFyZW47Cit9CisKK2Jvb2wgTWFjcm9FeHBh
bmRlcjo6cHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIpCit7CisgICAgYXNzZXJ0KCFtYWNyby5kaXNhYmxlZCk7CisgICAgYXNzZXJ0KCFpZGVudGlm
aWVyLmV4cGFuc2lvbkRpc2FibGVkKCkpOworICAgIGFzc2VydChpZGVudGlmaWVyLnR5cGUgPT0g
VG9rZW46OklERU5USUZJRVIpOworICAgIGFzc2VydChpZGVudGlmaWVyLnZhbHVlID09IG1hY3Jv
Lm5hbWUpOworCisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKyAgICBpZiAo
IWV4cGFuZE1hY3JvKG1hY3JvLCBpZGVudGlmaWVyLCAmcmVwbGFjZW1lbnRzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gTWFjcm8gaXMgZGlzYWJsZWQgZm9yIGV4cGFuc2lvbiB1
bnRpbCBpdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjay4KKyAgICBtYWNyby5kaXNhYmxlZCA9IHRy
dWU7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBuZXcgTWFjcm9Db250ZXh0OworICAg
IGNvbnRleHQtPm1hY3JvID0gJm1hY3JvOworICAgIGNvbnRleHQtPnJlcGxhY2VtZW50cy5zd2Fw
KHJlcGxhY2VtZW50cyk7CisgICAgbUNvbnRleHRTdGFjay5wdXNoX2JhY2soY29udGV4dCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6cG9wTWFjcm8oKQorewor
ICAgIGFzc2VydCghbUNvbnRleHRTdGFjay5lbXB0eSgpKTsKKworICAgIE1hY3JvQ29udGV4dCog
Y29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOworICAgIG1Db250ZXh0U3RhY2sucG9wX2Jh
Y2soKTsKKworICAgIGFzc2VydChjb250ZXh0LT5lbXB0eSgpKTsKKyAgICBhc3NlcnQoY29udGV4
dC0+bWFjcm8tPmRpc2FibGVkKTsKKyAgICBjb250ZXh0LT5tYWNyby0+ZGlzYWJsZWQgPSBmYWxz
ZTsKKyAgICBkZWxldGUgY29udGV4dDsKK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpleHBhbmRN
YWNybyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICByZXBsYWNlbWVudHMt
PmNsZWFyKCk7CisgICAgaWYgKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlT2JqKQorICAgIHsK
KyAgICAgICAgcmVwbGFjZW1lbnRzLT5hc3NpZ24obWFjcm8ucmVwbGFjZW1lbnRzLmJlZ2luKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5lbmQoKSk7
CisKKyAgICAgICAgaWYgKG1hY3JvLnByZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrTGluZSA9ICJfX0xJTkVfXyI7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0ZpbGUgPSAiX19GSUxFX18iOworCisgICAgICAg
ICAgICBhc3NlcnQocmVwbGFjZW1lbnRzLT5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBUb2tl
biYgcmVwbCA9IHJlcGxhY2VtZW50cy0+ZnJvbnQoKTsKKyAgICAgICAgICAgIGlmIChtYWNyby5u
YW1lID09IGtMaW5lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2Nh
dGlvbi5saW5lOworICAgICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJlYW0uc3RyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtYWNyby5uYW1lID09IGtGaWxlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsK
KyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5maWxlOworICAg
ICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1hY3JvLnR5
cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7CisgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiBh
cmdzOworICAgICAgICBhcmdzLnJlc2VydmUobWFjcm8ucGFyYW1ldGVycy5zaXplKCkpOworICAg
ICAgICBpZiAoIWNvbGxlY3RNYWNyb0FyZ3MobWFjcm8sIGlkZW50aWZpZXIsICZhcmdzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXBsYWNlTWFjcm9QYXJhbXMobWFj
cm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgVG9rZW4mIHJl
cGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBpZiAoaSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHJlcGxhY2VtZW50IGxpc3Qg
aW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgb2YgdGhlIGlk
ZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNldEF0U3RhcnRPZkxpbmUoaWRlbnRp
Zmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAgcmVwbC5zZXRIYXNMZWFkaW5nU3Bh
Y2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVw
bC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8m
IG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2Vu
JiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tl
bigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09ICcoJyk7CisKKyAgICBhcmdzLT5w
dXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQgb3BlblBhcmVucyA9IDE7IG9wZW5Q
YXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZP
Q0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5sb2Nh
dGlvbiwgaWRlbnRpZmllci52YWx1ZSk7CisgICAgICAgICAgICAvLyBEbyBub3QgbG9zZSBFT0Yg
dG9rZW4uCisgICAgICAgICAgICB1bmdldFRva2VuKHRva2VuKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNBcmcgPSBmYWxzZTsgLy8gVHJ1
ZSBpZiB0b2tlbiBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorICAgICAgICBzd2l0
Y2ggKHRva2VuLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAg
ICAgICsrb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICAgLS1vcGVuUGFyZW5zOwor
ICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDA7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgIC8vIFRoZSBpbmRpdmlkdWFsIGFyZ3Vt
ZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hIHRva2VucywgYnV0CisgICAgICAgICAgICAvLyB0
aGUgY29tbWEgdG9rZW5zIGJldHdlZW4gbWF0Y2hpbmcgaW5uZXIgcGFyZW50aGVzZXMgZG8gbm90
CisgICAgICAgICAgICAvLyBzZXBlcmF0ZSBhcmd1bWVudHMuCisgICAgICAgICAgICBpZiAob3Bl
blBhcmVucyA9PSAxKSBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgICAgICAgICBp
c0FyZyA9IG9wZW5QYXJlbnMgIT0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXNBcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hY3Jv
QXJnJiBhcmcgPSBhcmdzLT5iYWNrKCk7CisgICAgICAgICAgICAvLyBJbml0aWFsIHdoaXRlc3Bh
Y2UgaXMgbm90IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICAgICAgaWYgKGFyZy5lbXB0
eSgpKSB0b2tlbi5zZXRIYXNMZWFkaW5nU3BhY2UoZmFsc2UpOworICAgICAgICAgICAgYXJnLnB1
c2hfYmFjayh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBNYWNybzo6UGFy
YW1ldGVycyYgcGFyYW1zID0gbWFjcm8ucGFyYW1ldGVyczsKKyAgICAvLyBJZiB0aGVyZSBpcyBv
bmx5IG9uZSBlbXB0eSBhcmd1bWVudCwgaXQgaXMgZXF1aXZhbGVudCB0byBubyBhcmd1bWVudC4K
KyAgICBpZiAocGFyYW1zLmVtcHR5KCkgJiYgKGFyZ3MtPnNpemUoKSA9PSAxKSAmJiBhcmdzLT5m
cm9udCgpLmVtcHR5KCkpCisgICAgeworICAgICAgICBhcmdzLT5jbGVhcigpOworICAgIH0KKyAg
ICAvLyBWYWxpZGF0ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoYXJncy0+c2l6
ZSgpICE9IHBhcmFtcy5zaXplKCkpCisgICAgeworICAgICAgICBEaWFnbm9zdGljczo6SUQgaWQg
PSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSA/CisgICAgICAgICAgICBE
aWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKKyAgICAgICAgICAgIERpYWdub3N0aWNz
OjpNQUNST19UT09fTUFOWV9BUkdTOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChpZCwg
aWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBQcmUtZXhwYW5kIGVhY2ggYXJndW1lbnQgYmVmb3JlIHN1
YnN0aXR1dGlvbi4KKyAgICAvLyBUaGlzIHN0ZXAgZXhwYW5kcyBlYWNoIGFyZ3VtZW50IGluZGl2
aWR1YWxseSBiZWZvcmUgdGhleSBhcmUKKyAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBtYWNybyBi
b2R5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy0+c2l6ZSgpOyArK2kpCisgICAg
eworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YXQoaSk7CisgICAgICAgIFRva2VuTGV4
ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhwYW5kZXIgZXhwYW5kZXIoJmxleGVyLCBt
TWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAgICAgYXJnLmNsZWFyKCk7CisgICAgICAg
IGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3aGlsZSAodG9rZW4udHlwZSAhPSBUb2tl
bjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7Cisg
ICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMo
Y29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNyby5yZXBsYWNlbWVudHMuc2l6ZSgpOyAr
K2kpCisgICAgeworICAgICAgICBjb25zdCBUb2tlbiYgcmVwbCA9IG1hY3JvLnJlcGxhY2VtZW50
c1tpXTsKKyAgICAgICAgaWYgKHJlcGwudHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBPcHRp
bWl6ZSB0aGlzLgorICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHNlYXJjaCBmb3IgbWFj
cm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCisgICAgICAgIC8vIFRoZSBwYXJhbSBpbmRleCBjYW4gYmUg
Y2FjaGVkIHdpdGggdGhlIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICBNYWNybzo6UGFyYW1l
dGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0ZDo6ZmluZCgKKyAgICAgICAgICAgIG1hY3Jv
LnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFjcm8ucGFyYW1ldGVycy5lbmQoKSwgcmVwbC52YWx1ZSk7
CisgICAgICAgIGlmIChpdGVyID09IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFu
Y2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBpdGVyKTsKKyAgICAgICAgY29uc3QgTWFjcm9B
cmcmIGFyZyA9IGFyZ3NbaUFyZ107CisgICAgICAgIGlmIChhcmcuZW1wdHkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IGlSZXBs
ID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7CisgICAgICAgIHJlcGxhY2VtZW50cy0+aW5zZXJ0KHJl
cGxhY2VtZW50cy0+ZW5kKCksIGFyZy5iZWdpbigpLCBhcmcuZW5kKCkpOworICAgICAgICAvLyBU
aGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5oZXJpdHMgcGFkZGluZyBwcm9wZXJ0aWVzIGZyb20KKyAg
ICAgICAgLy8gbWFjcm8gcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIHJlcGxhY2VtZW50cy0+
YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdTcGFjZShyZXBsLmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAg
ICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvRXhwYW5kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2Rl
ZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1
ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVy
Cit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQq
IG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgfk1hY3Jv
RXhwYW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBw
cml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNyb0V4cGFuZGVyKTsK
KworICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4o
Y29uc3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlzTmV4dFRva2VuTGVmdFBhcmVuKCk7CisK
KyAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVu
dGlmaWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisKKyAgICBib29sIGV4cGFuZE1hY3JvKGNv
bnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVu
dGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNl
bWVudHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFjcm9Bcmc7CisgICAg
Ym9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7CisgICAgdm9pZCByZXBsYWNlTWFj
cm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICBzdHJ1Y3Qg
TWFjcm9Db250ZXh0CisgICAgeworICAgICAgICBjb25zdCBNYWNybyogbWFjcm87CisgICAgICAg
IHNpemVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsK
KworICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgwKSB7IH0KKyAgICAg
ICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxhY2VtZW50cy5zaXpl
KCk7IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxhY2VtZW50c1tp
bmRleCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9CisgICAgfTsKKwor
ICAgIExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9z
dGljcyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVU
b2tlbjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9N
QUNST19FWFBBTkRFUl9IXworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNDcgKzYsMTA4IEBACiAKICNpbmNsdWRlICJQ
cmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0
PgorI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2lu
Y2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJEaWFn
bm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorI2luY2x1ZGUgIk1hY3Jv
LmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisjaW5j
bHVkZSAiVG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVwcm9jZXNzb3I6OlBy
ZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVMTCkKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCiB7
CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0Owor
ICAgIFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBh
cnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNz
b3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwK
KyAgICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2Vu
aXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9F
eHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0K
K307CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGlj
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2
ZUhhbmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGlj
cywgZGlyZWN0aXZlSGFuZGxlcik7CiB9CiAKIFByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3Nvcigp
CiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OworICAgIGRlbGV0ZSBtSW1wbDsKIH0KIAotYm9vbCBQ
cmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1Db250ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAg
cmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Citib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBw
cmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7Cisg
ICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9f
VkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAx
KTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKTsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCit2b2lkIFByZXByb2Nlc3Nv
cjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQogewotICAgIEFT
U0VSVCgoY291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBpZiAoKGNvdW50IDwg
MCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CiAKLSAgICByZXNldCgp
OworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOwor
ICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOworCisgICAgTWFjcm8gbWFjcm87CisgICAg
bWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9i
ajsKKyAgICBtYWNyby5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9i
YWNrKHRva2VuKTsKIAotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5n
LCBsZW5ndGgsICZtVG9rZW5zKTsKKyAgICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsK
IH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgo
VG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5iZWdpbigpLCBtVG9r
ZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOworICAgIGJvb2wgdmFs
aWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAgICAg
IG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9rZW4t
PnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmlu
ZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0IHBy
ZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAgICAg
ICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAgICAg
ICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
VG9rZW46OlBQX05VTUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAgbUlt
cGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNywzNCArNyw0MSBAQAogI2lm
bmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAjZGVmaW5lIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAotI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgogCiBu
YW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgQ29udGV4dDsKK2NsYXNzIERpYWdub3N0aWNzOworY2xh
c3MgRGlyZWN0aXZlSGFuZGxlcjsKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRv
a2VuOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IKIHsKICAgcHVibGljOgotICAgIFByZXByb2Nlc3Nv
cigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2
ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogICAgIH5QcmVwcm9jZXNzb3IoKTsKIAotICAg
IGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVt
ZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3Bl
Y2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBz
cGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlz
IE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAg
IC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFu
IGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhl
IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBp
biB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8g
Y29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgorICAgIHZvaWQgcHJlZGVmaW5l
TWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKIAotICAgIGJvb2wgcHJvY2Vzcyhp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10p
OwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtVG9rZW5zLmJlZ2lu
KCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1Ub2tlbnMuZW5k
KCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCiAgIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CisgICAgUFBfRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKLSAgICAvLyBSZXNldCB0byBpbml0aWFsaXpl
ZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBDb250ZXh0KiBtQ29udGV4dDsKLSAg
ICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0cHV0LgorICAgIFByZXByb2Nlc3NvckltcGwq
IG1JbXBsOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Nv
dXJjZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1NvdXJjZUxvY2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworCituYW1l
c3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAgU291cmNlTG9jYXRp
b24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRpb24oaW50IGYsIGlu
dCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBTb3Vy
Y2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGZpbGUgPT0g
b3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQorCisgICAgaW50IGZp
bGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0
dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJl
dHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvU291cmNlTG9jYXRpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsg
dHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAJKHJldmlzaW9uIDEyMjcz
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw1MCArNiw1NiBAQAogCiAjaW5jbHVk
ZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3RhdGljIGNvbnN0IGlu
dCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4gYml0cy4KLXN0YXRpYyBjb25zdCBpbnQg
a0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkgLSAxOwotCiBuYW1l
c3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRva2VuOjplbmNvZGVMb2NhdGlvbihpbnQg
bGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNldCgpCiB7Ci0gICAgcmV0dXJuIChmaWxl
IDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYga0xvY2F0aW9uTGluZU1hc2spOworICAg
IHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9u
KCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9pZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24o
TG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhj
b25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbGUpICpmaWxlID0gbG9jID4+
IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5lKSAqbGluZSA9IGxvYyAmIGtMb2NhdGlv
bkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAg
ICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhl
ci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKIH0KIAot
VG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBpbnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZh
bHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwKLSAgICAgIG1UeXBlKHR5cGUpLAotICAg
ICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0
KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsK
KyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOwogfQogCi1Ub2tl
bjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFk
aW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9
IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFE
SU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRp
c2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9E
SVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7
CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qg
VG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKQotICAgIHsKLSAgICAg
IGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05TVEFOVDoKLSAgICAgIGNh
c2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFsdWUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+
KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAodG9rZW4uaGFz
TGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwgdG9rZW4u
dmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFjZSBwcAogCit9ICAvLyBu
YW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtNyw0MiArNyw5NCBA
QAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1j
bGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0eXBlZGVmIGludCBM
b2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24oaW50IGxpbmUsIGlu
dCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2NhdGlvbiBsb2MsIGlu
dCogbGluZSwgaW50KiBmaWxlKTsKLQotICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBzdHJpbmcu
Ci0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6OnN0cmluZyogdmFs
dWUpOwotICAgIH5Ub2tlbigpOwotCi0gICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9
Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9
Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW4pOwotCi0g
ICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBzdGQ6OnN0cmluZyog
bVZhbHVlOworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAgTEFTVCA9IDAsICAvLyBFT0Yu
CisKKyAgICAgICAgSURFTlRJRklFUiA9IDI1OCwKKworICAgICAgICBDT05TVF9JTlQsCisgICAg
ICAgIENPTlNUX0ZMT0FULAorCisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAg
ICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAg
IE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwK
KyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwK
KyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAg
T1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9B
U1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwK
KyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAorCisgICAgICAg
IC8vIFByZXByb2Nlc3NpbmcgdG9rZW4gdHlwZXMuCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIGFy
ZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgaW50ZXJuYWxseS4KKyAgICAgICAgLy8gUHJlcHJv
Y2Vzc29yIGNsaWVudHMgbXVzdCBub3QgZGVwZW5kIG9yIGNoZWNrIGZvciB0aGVtLgorICAgICAg
ICBQUF9IQVNILAorICAgICAgICBQUF9OVU1CRVIsCisgICAgICAgIFBQX09USEVSCisgICAgfTsK
KyAgICBlbnVtIEZsYWdzCisgICAgeworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8
IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFICA9IDEgPDwgMSwKKyAgICAgICAgRVhQQU5T
SU9OX0RJU0FCTEVEID0gMSA8PCAyCisgICAgfTsKKworICAgIFRva2VuKCkgOiB0eXBlKDApLCBm
bGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBU
b2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhl
IGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3
aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFn
cyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUo
Ym9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRIYXNMZWFk
aW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBib29sIGV4cGFuc2lvbkRpc2FibGVkKCkgY29u
c3QgeyByZXR1cm4gKGZsYWdzICYgRVhQQU5TSU9OX0RJU0FCTEVEKSAhPSAwOyB9CisgICAgdm9p
ZCBzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpOworCisgICAgaW50IHR5cGU7Cisg
ICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAg
IHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbio+IFRv
a2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgVG9rZW5JdGVy
YXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9r
ZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCit7CisgICAg
cmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJh
dG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbik7CiAKIH0gIC8vIG5h
bWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAg
ICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM0NCBAQAor
I2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKwor
CisjbGluZSAxMyAiLi9Ub2tlbml6ZXIuY3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBz
aG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKwor
I2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNk
ZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9W
RVJTSU9OIDM1CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVY
X0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZp
YyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMg
aGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBD
IGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNp
Zm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZl
IDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYg
ZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFM
CisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNs
dWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3Jv
cyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVm
aW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5o
PgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50
OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxl
eF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhf
dDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50
MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhf
dWludDMyX3Q7CisjZW5kaWYgLyogISBDOTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5
cGVzLiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAg
ICgtMTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAg
ICAgICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUg
SU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJ
TlQ4X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNp
Zm5kZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQor
I2VuZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAg
ICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9N
QVggICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZp
bmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQz
Ml9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5k
aWYKKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisv
KiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmlu
ZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVx
dWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1RE
Q19fKQorCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERD
X18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNU
CisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgor
CisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKwor
LyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8g
YW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRo
ZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBp
dCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0Lgor
ICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hh
cikgYykKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlf
U0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQq
IHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1
cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJh
bnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5
eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxl
bmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5
eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5l
IHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZp
bmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0
IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIs
CisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMg
YnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVH
SU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0
YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJF
R0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4
CisgKiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFy
dCAtIDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVy
IGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFU
RV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFs
IGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmlu
ZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKKworI2RlZmluZSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAq
LworI2lmbmRlZiBZWV9CVUZfU0laRQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlm
CisKKy8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3Rh
dGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RB
VEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkp
CisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9CVUZGRVJfU1RBVEUKK3R5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVG
RkVSX1NUQVRFOworI2VuZGlmCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZp
bmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRp
ZgorCisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5E
X09GX0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgI2RlZmluZSBZ
WV9MRVNTX0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBt
YXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5
eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVw
IHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAg
ICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5
X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURK
OyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAor
CQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+
eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9T
VEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkv
KiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlv
biBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVz
LCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlf
c2l6ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRv
IHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5
X3NpemVfdCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0g
aS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLwor
CWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFj
dGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8g
Zm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJl
YWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNo
IG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3
ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElm
IHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lz
ZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVu
bzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRo
ZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUg
aW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWlu
dCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZ
X0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVP
RidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAq
IHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0
aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBh
bnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBt
YXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgor
CSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRv
ICJuZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRp
bnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZp
bGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlm
IC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9z
IGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdl
IHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nh
bm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVM
TC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxM
KQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0
aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBs
dmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
XQorCit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVy
IChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZGVs
ZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9p
ZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZM
VVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikK
KworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBz
aXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmlu
ZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVS
X1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCisKKyNkZWZpbmUg
eXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHBw
X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2
ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAg
IHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisj
ZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkK
KworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHBwd3JhcChuKSAxCisjZGVmaW5l
IFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOworCit0eXBl
ZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKKwor
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRl
X3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IHl5
X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9m
YXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
LyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJl
Zm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8K
KyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7
IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRf
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
Y3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRy
aWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRp
ZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2Nh
dGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0
cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKwor
I2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5s
aW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5
eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5w
dXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisg
ICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxl
bmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2Fu
TG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAg
ICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5v
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5s
aW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3Vs
dCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhT
aXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUgQ09NTUVOVCAxCisKKyNkZWZpbmUg
WVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50
aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAor
ICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAg
ICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2Ft
ZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAq
LworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFj
a190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZm
ZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9T
VEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBj
aGFyIHl5X2hvbGRfY2hhcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXpl
X3QgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAg
ICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAg
ICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsK
KyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGlu
dCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRl
eHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAg
IFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07
IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVz
ZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0
cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9y
CisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBw
cGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZ
WV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vz
c29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9u
LXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0
cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3l5X3Np
emVfdCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxv
Y19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhp
cyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICog
c2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNl
CitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRp
ZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hh
ciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisj
aWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3Qg
Y2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5Q
VVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0
aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVB
RF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxl
IG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhp
cyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRh
aW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndy
aXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQg
YW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3Ig
WVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lO
UFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQg
YyA9ICcqJzsgXAorCQl5eV9zaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXpl
ICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsr
biApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJ
YnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiAp
ICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBc
CisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAm
JiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJ
eyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiAp
OyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5
aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0
ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQor
ICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2Ug
dGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJl
YWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5
dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmll
cyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NU
QVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisK
Ky8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIp
CisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHBy
b3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5l
ciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgor
ICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJu
IGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxU
WVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RF
Q0wgaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZ
WV9ERUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1
bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisj
aWZuZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKwor
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlf
QlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxF
X1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlv
biB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5
X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisK
KyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07
CisKKwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNp
ZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5
Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRl
ICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91
dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7
CisJCQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9
CisKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAq
LworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0
ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2lu
dHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhl
IGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2Fj
Y2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvcyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9
CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9u
OgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisK
KwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
CisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBv
ZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
KwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0
aW9uOworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29t
bWVudCAqLworLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4g
Ki8KKy8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nh
c2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAK
KworCVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVM
RV9TRVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJ
QUwpOworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBp
cyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVz
LgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEt
PmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30K
KwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQor
CVlZX0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJ
R0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBp
bnRlZ2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBf
TlVNQkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9J
TkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsK
K30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30K
KwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JS
RUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSwor
Y2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNl
IDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZ
WV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigx
LCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZ
WV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9T
RVRVUAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7Cisg
ICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpQUF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Citj
YXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBu
b3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9y
IEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlu
cHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2Nhbkxv
YzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsK
KyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8v
IFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhl
CisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9
IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5k
ZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87
CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisg
ICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5v
LCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwor
ICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVM
RV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7
CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIu
ICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXln
LT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5p
bmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0
IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4g
YXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3
ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JV
RkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8g
ZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhh
biBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcg
aW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVy
ZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRo
ZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFs
cmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICog
KHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVu
ZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGlu
IGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMg
d2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKwor
CQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSgg
eXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2Ug
dGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dl
dF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1
c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0
eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBp
bnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJ
ICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JF
X0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0
aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJ
CWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJ
Z290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9n
ZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRf
T0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAw
OworCisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6
IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIo
KSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJ
CSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtl
IGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdl
IHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIK
KwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2Fj
dCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9
CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJ
fQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3Ag
PQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FD
VF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKwor
CWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0
Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBw
cGxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBi
dWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJ
RU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVl
IHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAt
IGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4
dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOwor
CisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFs
IGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisK
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJ
CXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICov
CisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREog
PT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVP
Qiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVy
biBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1h
dGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0
LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkv
KiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMg
dG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlf
Y19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1i
ZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9G
X1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0
byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKwor
CWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUg
KCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZm
ZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3Vy
cmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7
CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZf
cCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJ
eworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlm
ICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXpl
IC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9j
aF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJz
LiAqLworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXpl
ICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQs
IHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEg
Yi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBz
Y2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0g
JmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92
ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSAp
CisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3Jl
IGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7
CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2No
YXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51
bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNU
X0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJ
CWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0Zf
UEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5V
RV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9f
bW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4
dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICov
CisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3Zl
ICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXln
LT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKwor
LyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUg
RU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dl
dF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0
YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5
eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2Nw
ICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0Nf
VE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0g
KQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9j
dXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05V
TF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3Rlcgor
ICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVu
dF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBk
ZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5
X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50
KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4
NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKwor
CXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZ
WV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUg
Y2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3Jl
KiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90
LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5
Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWct
Pnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWct
Pnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICov
CisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJ
CQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQg
d2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2Nl
ZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8g
Y29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJ
CQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBi
dWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJ
CQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJ
eworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gMDsKKworCQkJ
CQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVX
X0ZJTEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVy
KTsKKyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0K
KworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ
fQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9y
IDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5
eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJl
dHVybiBjOworfQorI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRp
YXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1
dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFy
dCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJ
TEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApeworICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5l
cik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICBwcF9jcmVhdGVf
YnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5pdF9idWZm
ZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBp
bnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4K
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBw
cF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxh
Y2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVy
X3N0YXRlKCk7CisJICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICov
CisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9C
VUZGRVIgPT0gbmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
KwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBk
aWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0
IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3Jh
cCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBz
ZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQor
CitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2No
YXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsK
K30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4K
KyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNo
YXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JV
Rl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0
dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRF
IHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NU
QVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIg
KTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKwor
CS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXpl
IGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hh
cmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1
Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIg
KTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIoYixmaWxl
ICx5eXNjYW5uZXIpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIu
CisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBf
ZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19v
dXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7
CisKKwlwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVz
IG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1l
cyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBk
dXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9p
bml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVy
KGIgLHl5c2Nhbm5lcik7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxs
X2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBw
cF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFy
dCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwg
d2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAg
ICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9
IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5
X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERp
c2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVU
IHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVz
aGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVG
RkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJl
dHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVu
ZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRp
b24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEg
amFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwor
CWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsK
KwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQor
CisvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUg
YmVjb21lcworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2Nh
dGUgdGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRo
ZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJl
dHVybjsKKworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBi
bG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1
ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJ
fQorCisJLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3Au
ICovCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ar
KzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVk
IGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8q
KiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50Lgor
ICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0
dXJuOworCisJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsK
KwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9D
VVJSRU5UX0JVRkZFUikgeworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJ
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2Nh
dGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNl
IGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlv
biBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJ
ICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEg
dG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAg
ICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0g
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2Mg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsK
KwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJ
CQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7
CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0
byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8q
IGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9z
dGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFj
ayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLwor
CQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgs
IDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNp
ZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZm
ZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVm
ZmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4g
dGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVS
X1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNp
emUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8
CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhl
eSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKwor
CWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZf
c2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55
eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3Np
emU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+
eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
OworCisJcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOwor
fQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBU
aGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBA
YSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2Nhbgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50
IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICog
ICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgCisJcmV0dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2Fu
bmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUg
Z2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20g
YSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0
byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBw
b2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5
eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG4sIGk7CisgICAg
CisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJh
aWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikg
cHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICgg
aSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisK
KwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisKKwliID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYg
KCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygp
IiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNo
b3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlM
VVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlf
ZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VY
SVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBz
ZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAor
CWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8g
XAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNT
X0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9o
b2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2Fy
ZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlv
bnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0
YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUg
bnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2lu
dCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBp
ZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAg
IHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdl
dF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZ
WV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0
cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
CitGSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5
eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCBwcGdl
dF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQor
CisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KKworY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVk
IGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBh
cmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2Fu
bmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQg
cHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50
ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGlu
ZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBw
c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisg
ICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1
bW4uCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlm
IGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdp
dGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1u
X25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2Fy
ZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRh
YmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICog
QHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5f
c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwor
dm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNl
dF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2Zs
ZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwg
YW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBF
ICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0g
eXlsdmFsX3BhcmFtOworfQorCitZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsbG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZ
WUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXls
bG9jID0geXlsbG9jX3BhcmFtOworfQorICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisv
KiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0
c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNu
J3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkg
d2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91
ciBtYWNyb3MuCisgKi8KKworaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxz
KQorCit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9
IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCAp
OworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBF
Tk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8g
MHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZv
ciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0
cnVjdCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlf
Z2xvYmFscyApOworfQorCisvKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlv
bmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0
YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhh
dAorICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxs
b2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlz
IGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUg
dXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJs
ZSB0byBwcGFsbG9jIGluCisgKiB0aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhf
aW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5
X2dsb2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAg
IHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYg
KHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgfQorCQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkg
cHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkK
KyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01F
TTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8g
MHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4
MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXpl
b2Yoc3RydWN0IHl5Z3V0c190KSk7CisgICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVm
aW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxz
ICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1l
IGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgor
ICAgICAqLworCisgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAg
ICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7Cisg
ICAgeXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7
CisgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9z
dGFjayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElO
SVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5
aW4gPSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAg
LyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJl
IGNhbGxlZCBieQorICAgICAqIHBwbGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOwor
fQorCisvKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50
cmFudCBzY2FubmVycy4gKi8KK2ludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxl
bWVudC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIo
WVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBOVUxMOworCQlwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBE
ZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICx5eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERl
c3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+
eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
ID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBp
biBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgo
KSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9n
bG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJl
ZW50cmFudCBvbmx5KS4gKi8KKyAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsK
KyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJu
YWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsg
aSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05F
RURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBz
W25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9j
ICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lk
ICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8g
KGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVu
dGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0
aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVy
CisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1l
bnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJn
dW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkg
Ki8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisK
K3ZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUo
IChjaGFyICopIHB0ciApOwkvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8K
K30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsK
KworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5k
bGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitU
b2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jv
b2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7
CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKwor
ICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICBy
ZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIo
aW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIu
CisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5k
bGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAg
ICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChU
b2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnZhbHVlLCZ0
b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRv
a2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQu
bGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFk
aW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3Bh
Y2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBp
ZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5k
bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkK
K3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxl
eF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9U
T0tFTklaRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwor
CisjaW5jbHVkZSAiSW5wdXQuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgInBwX3V0
aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKKworY2xhc3Mg
VG9rZW5pemVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udGV4
dAorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworCisgICAgICAgIElu
cHV0IGlucHV0OworICAgICAgICAvLyBUaGUgbG9jYXRpb24gd2hlcmUgeXl0ZXh0IHBvaW50cyB0
by4gVG9rZW4gbG9jYXRpb24gc2hvdWxkIHRyYWNrCisgICAgICAgIC8vIHNjYW5Mb2MgaW5zdGVh
ZCBvZiBJbnB1dDo6bVJlYWRMb2MgYmVjYXVzZSB0aGV5IG1heSBub3QgYmUgdGhlIHNhbWUKKyAg
ICAgICAgLy8gaWYgdGV4dCBpcyBidWZmZXJlZCB1cCBpbiB0aGUgc2Nhbm5lciBpbnB1dCBidWZm
ZXIuCisgICAgICAgIElucHV0OjpMb2NhdGlvbiBzY2FuTG9jOworCisgICAgICAgIGJvb2wgbGVh
ZGluZ1NwYWNlOworICAgICAgICBib29sIGxpbmVTdGFydDsKKyAgICB9OworCisgICAgVG9rZW5p
emVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgflRva2VuaXplcigpOworCisgICAg
Ym9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSk7CisKKyAgICB2b2lkIHNldEZpbGVOdW1iZXIoaW50IGZpbGUpOworICAgIHZv
aWQgc2V0TGluZU51bWJlcihpbnQgbGluZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2Vu
KiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VG9rZW5pemVyKTsKKyAgICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9pZCBkZXN0cm95U2Nh
bm5lcigpOworCisgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgorICAgIENv
bnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwog
ICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyOSBAQAorLyoKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRp
b24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0b3B7Cisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5pemVyLmgi
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBk
ZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9m
YXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdt
aXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
K3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2Vk
IHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmlu
ZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAg
ICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNl
OyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGls
ZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+
c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBp
bnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5M
b2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5M
b2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAx
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVm
aW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRy
YS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFwIG5v
dW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBi
aXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlwZT0i
cHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxufFxy
fFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1IgIFtd
Wzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVsw
LTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNUQU5U
ICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQT05F
TlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQgICh7
RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5lIGNv
bW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAgIC8q
IExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAgLyog
VGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7IEJF
R0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENPTU1F
TlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXlleHRy
YS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7Cisg
ICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBk
aXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJu
IHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBf
T1RIRVI7Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJTUFM
X0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0geworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpD
T05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NP
TlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAvKiBB
bnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEg
bnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5k
IGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2EtekEt
WjAtOS5dKikgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklH
SFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQor
Il5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
RERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIg
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BV
TkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVy
biB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9
IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNz
aWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwtPmFz
c2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOworfQor
Cis8Kj48PEVPRj4+IHsKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3Ig
aGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51
YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJ
bnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0lu
ZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2Nhbkxv
Yy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJl
YWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVu
ZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2Nh
bkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5v
ID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5s
aW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJU
ID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRl
cm1pbmF0ZSgpOworfQorCislJQorCituYW1lc3BhY2UgcHAgeworCitUb2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXpl
cigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4g
MCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQg
PSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigp
OworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAv
LyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8g
eXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1uKGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lkIFRv
a2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8obGlu
ZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQorewor
ICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1ZSwgJnRva2VuLT5sb2NhdGlvbiwg
bUhhbmRsZSk7CisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0
T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9r
ZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRl
eHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30K
KworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0g
TlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmICht
SGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3kobUhh
bmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJz
CiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9w
YXJzZXIuc2gJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyNyArMSwyNiBAQAogIyEvYmluL2Jhc2gKLSMgQ29weXJpZ2h0IChjKSAyMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKLSMg
R2VuZXJhdGVzIEdMU0wgRVMgcHJlcHJvY2Vzc29yIC0gcHBfbGV4LmNwcCwgcHBfdGFiLmgsIGFu
ZCBwcF90YWIuY3BwCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCiAKIHJ1bl9mbGV4KCkKIHsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEu
bAotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMV9sZXguY3BwCitpbnB1dF9maWxlPSRzY3Jp
cHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCiBmbGV4IC0tbm9saW5lIC0t
bm91bmlzdGQgLS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHJ1bl9i
aXNvbigpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLnkKLW91dHB1dF9oZWFkZXI9JHNj
cmlwdF9kaXIvJDFfdGFiLmgKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfdGFiLmNwcAot
Ymlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLWRlZmluZXM9JG91dHB1dF9oZWFk
ZXIgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK2lucHV0X2ZpbGU9JHNjcmlw
dF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGluZXMg
LS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKIH0K
IAogc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAKICMgR2VuZXJhdGUgcHJlcHJvY2Vzc29yCi1y
dW5fZmxleCBwcAotcnVuX2Jpc29uIHBwCitydW5fZmxleCBUb2tlbml6ZXIubCBUb2tlbml6ZXIu
Y3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25QYXJzZXIuY3BwCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxs
b3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLmwJKHJldmlzaW9uIDEy
MjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwLmwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZv
ciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlv
IDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1Ug
QUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0ldG9wewotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJz
ZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5l
ID0geXlsaW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXlj
b2x1bW4gKyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBt
YXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7
Ci0gICAgCi1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciog
c3RyLCBpbnQgbGVuKTsKLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRl
cmFjdGl2ZQotJW9wdGlvbiB5eWxpbmVubyByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxv
Y2F0aW9ucwotJW9wdGlvbiBzdGFjawotJW9wdGlvbiBwcmVmaXg9InBwIgotJW9wdGlvbiBleHRy
YS10eXBlPSJwcDo6Q29udGV4dCoiCi0KLUhTUEFDRSAgICAgIFsgXHRdCi1IQVNIICAgICAgICBe
e0hTUEFDRX0qI3tIU1BBQ0V9KgotSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgot
UFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KLQotREVDSU1BTF9DT05TVEFO
VCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgotSEVYQURF
Q0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCi0KLURJR0lUICAgICAgICAgICAgICAg
IFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KwotRlJBQ1RJT05B
TF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKLQotJSUKLQot
e0hBU0h9IHsgcmV0dXJuIEhBU0g7IH0KLQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJ
RVJ9L1sgXHRcbl0gewotICAgIHl5bHZhbC0+c3ZhbCA9IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklORV9PQko7Ci19Ci17SEFTSH1kZWZpbmV7
SFNQQUNFfSt7SURFTlRJRklFUn0vIigiIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFj
cm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0K
LXtIQVNIfXVuZGVme0hTUEFDRX0rIHsgcmV0dXJuIEhBU0hfVU5ERUY7IH0KLQote0hBU0h9aWYg
eyByZXR1cm4gSEFTSF9JRjsgfQote0hBU0h9aWZkZWYgeyByZXR1cm4gSEFTSF9JRkRFRjsgfQot
e0hBU0h9aWZuZGVmIHsgcmV0dXJuIEhBU0hfSUZOREVGOyB9Ci17SEFTSH1lbHNlIHsgcmV0dXJu
IEhBU0hfRUxTRTsgfQote0hBU0h9ZWxpZiB7IHJldHVybiBIQVNIX0VMSUY7IH0KLXtIQVNIfWVu
ZGlmIHsgcmV0dXJuIEhBU0hfRU5ESUY7IH0KLSJkZWZpbmVkIiB7IHJldHVybiBERUZJTkVEOyB9
Ci0KLXtIQVNIfWVycm9yIHsgcmV0dXJuIEhBU0hfRVJST1I7IH0KLXtIQVNIfXByYWdtYSB7IHJl
dHVybiBIQVNIX1BSQUdNQTsgfQote0hBU0h9ZXh0ZW5zaW9uIHsgcmV0dXJuIEhBU0hfRVhURU5T
SU9OOyB9Ci17SEFTSH12ZXJzaW9uIHsgcmV0dXJuIEhBU0hfVkVSU0lPTjsgfQote0hBU0h9bGlu
ZSB7IHJldHVybiBIQVNIX0xJTkU7IH0KLQote0lERU5USUZJRVJ9IHsKLSAgICB5eWx2YWwtPnN2
YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJREVOVElG
SUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lN
QUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0KLSh7RElHSVR9K3tFWFBP
TkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKLSAg
ICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBGTE9BVF9DT05TVEFOVDsKLX0KLQote1BVTkNUVUFUT1J9IHsgcmV0dXJuIHl5dGV4dFsw
XTsgfQotCi1bIFx0XHZcZl0rIHsgLyogSWdub3JlIHdoaXRlc3BhY2UgKi8gfQotCi1cbiB7Ci0g
ICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAwOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0K
LTwqPjw8RU9GPj4gICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotCi0lJQotCi1zdGQ6OnN0cmluZyog
ZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhl
IGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJ
RklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAg
QVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0K
LSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7
IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3Ry
W2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3Ry
aW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5h
bWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4
U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5l
b2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9y
Tm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAg
aW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlv
bih5eWdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1J
bnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgeXlzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5j
b2RlTG9jYXRpb24obGluZSwgZmlsZSksIG1MZXhlcik7Ci0KLSAgICAgICAgbnJlYWQgPSBtSW5w
dXQtPnJlYWQoYnVmLCBtYXhTaXplKTsKLQotICAgICAgICBpZiAobUlucHV0LT5lcnJvcigpID09
IHBwOjpJbnB1dDo6a0Vycm9yVW5leHBlY3RlZEVPRikKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gbnJlYWQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdExleGVyKCkKLXsKLSAgICBBU1NFUlQo
bUxleGVyID09IE5VTEwpOwotCi0gICAgaWYgKHl5bGV4X2luaXRfZXh0cmEodGhpcywgJm1MZXhl
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtTGV4ZXIpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0g
ICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICB5eWxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxl
eGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHAueQkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAueQkod29ya2luZyBjb3B5KQpAQCAtMSwyMjUg
KzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2Mg
Z3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElT
IEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfZ2xzbF9wYXJzZXIuc2gsCi1XSElD
SCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfZ2xzbGFuZ19wYXJz
ZXIuc2guIERPIE5PVCBFRElUIQotCi0jaW5jbHVkZSAiQ29udGV4dC5oIgotCi0jZGVmaW5lIFlZ
TEVYX1BBUkFNIGNvbnRleHQtPmxleGVyKCkKLSNkZWZpbmUgWVlERUJVRyAxCi0lfQotCi0lcHVy
ZS1wYXJzZXIKLSVuYW1lLXByZWZpeD0icHAiCi0lbG9jYXRpb25zCi0lcGFyc2UtcGFyYW0ge3Bw
OjpDb250ZXh0KiBjb250ZXh0fQotCi0ldW5pb24gewotICAgIGludCBpdmFsOwotICAgIHN0ZDo6
c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0b3Iq
IHRsaXN0OwotfQotCi0lewotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQ
RSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxv
Y3AsCi0gICAgICAgICAgICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGlj
IHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0lfQotCi0l
dG9rZW4gSEFTSCBIQVNIX1VOREVGCi0ldG9rZW4gSEFTSF9JRiBIQVNIX0lGREVGIEhBU0hfSUZO
REVGIEhBU0hfRUxTRSBIQVNIX0VMSUYgSEFTSF9FTkRJRiBERUZJTkVECi0ldG9rZW4gSEFTSF9F
UlJPUiBIQVNIX1BSQUdNQSBIQVNIX0VYVEVOU0lPTiBIQVNIX1ZFUlNJT04gSEFTSF9MSU5FCi0l
dG9rZW4gPHN2YWw+IEhBU0hfREVGSU5FX09CSiBIQVNIX0RFRklORV9GVU5DCi0ldG9rZW4gPHN2
YWw+IElOVF9DT05TVEFOVCBGTE9BVF9DT05TVEFOVCBJREVOVElGSUVSCi0ldHlwZSA8aXZhbD4g
b3BlcmF0b3IKLSV0eXBlIDx0dmFsPiBjb25kaXRpb25hbF90b2tlbiB0b2tlbgotJXR5cGUgPHRs
aXN0PiBwYXJhbWV0ZXJfbGlzdCByZXBsYWNlbWVudF9saXN0IGNvbmRpdGlvbmFsX2xpc3QgdG9r
ZW5fbGlzdAotJSUKLQotaW5wdXQKLSAgICA6IC8qIGVtcHR5ICovCi0gICAgfCBpbnB1dCBsaW5l
Ci07Ci0KLWxpbmUKLSAgICA6IHRleHRfbGluZQotICAgIHwgY29udHJvbF9saW5lCi07Ci0KLXRl
eHRfbGluZQotICAgIDogJ1xuJwotICAgIHwgdG9rZW5fbGlzdCAnXG4nIHsKLSAgICAgICAgLy8g
VE9ETyhhbG9rcCk6IEV4cGFuZCBtYWNyb3MuCi0gICAgICAgIHBwOjpUb2tlblZlY3Rvciogb3V0
ID0gY29udGV4dC0+b3V0cHV0KCk7Ci0gICAgICAgIG91dC0+aW5zZXJ0KG91dC0+ZW5kKCksICQx
LT5iZWdpbigpLCAkMS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUgJDE7Ci0gICAgfQotOwotCi1j
b250cm9sX2xpbmUKLSAgICA6IEhBU0ggJ1xuJwotICAgIHwgSEFTSF9ERUZJTkVfT0JKIHJlcGxh
Y2VtZW50X2xpc3QgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0
X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICQxLCBOVUxMLCAkMik7Ci0gICAgfQotICAgIHwg
SEFTSF9ERUZJTkVfRlVOQyAnKCcgcGFyYW1ldGVyX2xpc3QgJyknIHJlcGxhY2VtZW50X2xpc3Qg
J1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPmRlZmluZU1hY3JvKEAxLmZpcnN0X2xpbmUsIHBwOjpN
YWNybzo6a1R5cGVGdW5jLCAkMSwgJDMsICQ1KTsKLSAgICB9Ci0gICAgfCBIQVNIX1VOREVGIElE
RU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIGNvbnRleHQtPnVuZGVmaW5lTWFjcm8oJDIpOwotICAg
IH0KLSAgICB8IEhBU0hfSUYgY29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICAgICAgcHVzaENv
bmRpdGlvbmFsQmxvY2soY29udGV4dCwgJDIgPyB0cnVlIDogZmFsc2UpOwotICAgIH0KLSAgICB8
IEhBU0hfSUZERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxv
Y2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBI
QVNIX0lGTkRFRiBJREVOVElGSUVSICdcbicgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxCbG9j
ayhjb250ZXh0LCAhY29udGV4dC0+aXNNYWNyb0RlZmluZWQoJDIpKTsKLSAgICB9Ci0gICAgfCBI
QVNIX0VMSUYgY29uZGl0aW9uYWxfbGlzdCAnXG4nIHsKLSAgICB9Ci0gICAgfCBIQVNIX0VMU0Ug
J1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTkRJRiAnXG4nIHsKLSAgICAgICAgcG9wQ29uZGl0
aW9uYWxCbG9jayhjb250ZXh0KTsKLSAgICB9Ci0gICAgfCBIQVNIX0VSUk9SICdcbicKLSAgICB8
IEhBU0hfUFJBR01BICdcbicKLSAgICB8IEhBU0hfRVhURU5TSU9OICdcbicKLSAgICB8IEhBU0hf
VkVSU0lPTiAnXG4nCi0gICAgfCBIQVNIX0xJTkUgJ1xuJwotOwotCi1yZXBsYWNlbWVudF9saXN0
Ci0gICAgOiAvKiBlbXB0eSAqLyB7ICQkID0gTlVMTDsgfQotICAgIHwgdG9rZW5fbGlzdAotCi1w
YXJhbWV0ZXJfbGlzdAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IElE
RU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQk
LT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAkMSkp
OwotICAgIH0KLSAgICB8IHBhcmFtZXRlcl9saXN0ICcsJyBJREVOVElGSUVSIHsKLSAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFjayhuZXcgcHA6OlRva2VuKEAzLmZpcnN0X2xp
bmUsIElERU5USUZJRVIsICQzKSk7Ci0gICAgfQotCi1jb25kaXRpb25hbF9saXN0Ci0gICAgOiBj
b25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAg
ICAgICAgJCQtPnB1c2hfYmFjaygkMSk7Ci0gICAgfQotICAgIHwgY29uZGl0aW9uYWxfbGlzdCBj
b25kaXRpb25hbF90b2tlbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2Jh
Y2soJDIpOwotICAgIH0KLTsKLQotdG9rZW5fbGlzdAotICAgIDogdG9rZW4gewotICAgICAgICAk
JCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAg
IH0KLSAgICB8IHRva2VuX2xpc3QgdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAk
JC0+cHVzaF9iYWNrKCQyKTsKLSAgICB9Ci07Ci0KLWNvbmRpdGlvbmFsX3Rva2VuCi0gICAgOiBE
RUZJTkVEIElERU5USUZJRVIgewotICAgIH0KLSAgICB8IERFRklORUQgJygnIElERU5USUZJRVIg
JyknIHsKLSAgICB9Ci0gICAgfCB0b2tlbgotOwotCi10b2tlbgotICAgIDogb3BlcmF0b3Igewot
ICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgJDEsIE5VTEwpOwotICAg
IH0KLSAgICB8IElOVF9DT05TVEFOVCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5m
aXJzdF9saW5lLCBJTlRfQ09OU1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBGTE9BVF9DT05TVEFO
VCB7Ci0gICAgICAgICQkID0gbmV3IHBwOjpUb2tlbihAMS5maXJzdF9saW5lLCBGTE9BVF9DT05T
VEFOVCwgJDEpOwotICAgIH0KLSAgICB8IElERU5USUZJRVIgewotICAgICAgICAkJCA9IG5ldyBw
cDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpOwotICAgIH0KLTsKLQotb3Bl
cmF0b3IKLSAgICA6ICdbJyB7ICQkID0gJ1snOyB9Ci0gICAgfCAnXScgeyAkJCA9ICddJzsgfQot
ICAgIHwgJzwnIHsgJCQgPSAnPCc7IH0KLSAgICB8ICc+JyB7ICQkID0gJz4nOyB9Ci0gICAgfCAn
KCcgeyAkJCA9ICcoJzsgfQotICAgIHwgJyknIHsgJCQgPSAnKSc7IH0KLSAgICB8ICd7JyB7ICQk
ID0gJ3snOyB9Ci0gICAgfCAnfScgeyAkJCA9ICd9JzsgfQotICAgIHwgJy4nIHsgJCQgPSAnLic7
IH0KLSAgICB8ICcrJyB7ICQkID0gJysnOyB9Ci0gICAgfCAnLScgeyAkJCA9ICctJzsgfQotICAg
IHwgJy8nIHsgJCQgPSAnLyc7IH0KLSAgICB8ICcqJyB7ICQkID0gJyonOyB9Ci0gICAgfCAnJScg
eyAkJCA9ICclJzsgfQotICAgIHwgJ14nIHsgJCQgPSAnXic7IH0KLSAgICB8ICd8JyB7ICQkID0g
J3wnOyB9Ci0gICAgfCAnJicgeyAkJCA9ICcmJzsgfQotICAgIHwgJ34nIHsgJCQgPSAnfic7IH0K
LSAgICB8ICc9JyB7ICQkID0gJz0nOyB9Ci0gICAgfCAnIScgeyAkJCA9ICchJzsgfQotICAgIHwg
JzonIHsgJCQgPSAnOic7IH0KLSAgICB8ICc7JyB7ICQkID0gJzsnOyB9Ci0gICAgfCAnLCcgeyAk
JCA9ICcsJzsgfQotICAgIHwgJz8nIHsgJCQgPSAnPyc7IH0KLTsKLQotJSUKLQotdm9pZCB5eWVy
cm9yKFlZTFRZUEUqIGxsb2NwLCBwcDo6Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVh
c29uKQotewotfQotCi12b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250
ZXh0LCBib29sIGNvbmRpdGlvbikKLXsKLX0KLQotdm9pZCBwb3BDb25kaXRpb25hbEJsb2NrKHBw
OjpDb250ZXh0KiBjb250ZXh0KQotewotfQotCi1uYW1lc3BhY2UgcHAgewotYm9vbCBDb250ZXh0
OjpwYXJzZSgpCi17Ci0gICAgeXlkZWJ1ZyA9IDE7Ci0gICAgcmV0dXJuIHl5cGFyc2UodGhpcykg
PT0gMCA/IHRydWUgOiBmYWxzZTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMjI2OCArMCwwIEBACi0jbGluZSAxNiAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcC5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0KLQotI2xp
bmUgMTMgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcCIKLQotI2RlZmluZSAg
WVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0KLS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRl
ZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxFWF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFK
T1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZ
X0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+
IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAg
cGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBi
ZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0v
KiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZp
bml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyog
Qzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5
IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJT
SU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01B
Q1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0
IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJ
TUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5j
bHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1
aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVk
IGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBl
ZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90
OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVu
c2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCi0KLS8qIExpbWl0
cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNpZm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9N
SU4gICAgICAgICAgICAgICAoLTEyOCkKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZp
bmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5U
MzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0j
ZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAo
MTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01BWAotI2RlZmluZSBJTlQxNl9NQVggICAgICAg
ICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJf
TUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKLSNlbmRpZgotI2lmbmRlZiBVSU5UOF9NQVgK
LSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKLSNlbmRpZgotI2lmbmRlZiBV
SU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKLSNlbmRp
ZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQy
OTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLQotLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2
YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbHNlICAgLyogISBfX2NwbHVzcGx1
cyAqLwotCi0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwot
I2lmIGRlZmluZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZW5kaWYg
IC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVzICovCi0K
LSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAotI2Vsc2UKLSNkZWZp
bmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCi0j
ZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3Nz
aWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBmb3IgdXNlIGFzIGFu
IGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAotICogd2Ugd2Fu
dCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRo
ZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25l
ZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KLSNp
Zm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FO
TkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyogRm9yIGNvbnZlbmll
bmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKLSAgIGFyZSBt
YWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5eWluIHl5Zy0+eXlp
bl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXll
eHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5lIHl5dGV4dCB5eWct
Pnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19y
Ci0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQg
dG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVm
dHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBvZiBCRUdJ
Ti4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgotCi0vKiBUcmFu
c2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxh
dGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNU
QVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgWVlf
U1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJU
Ci0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUu
ICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0
ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBu
ZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8qIFNpemUgb2YgZGVm
YXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0jZGVmaW5lIFlZX0JV
Rl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVu
b3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4K
LSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNp
emVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFU
RQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRlZiBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2RlZmluZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKLSNkZWZpbmUg
RU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxseSBvbWl0
IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1aXJlcwot
ICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5
eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhawotICAgICAqICAgICAgIGV4aXN0aW5n
IHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgcHBsZXguIAotICAgICAq
ICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJ
IHRyaWVkIHRoYXQsIGFuZCBzYXcKLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBp
biBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcwotICAgICAqICAgICAg
IG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBpcyBub3Qg
d29ydGggaXQuCi0gICAgICovCi0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAotICAg
ICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5bDtcCi0gICAgICAgICAgICAg
ICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAotICAgICAgICAgICAgICAg
ICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKLSAgICAgICAgICAgICAgICAgICAgICAg
IC0teXlsaW5lbm87XAotICAgICAgICAgICAgfXdoaWxlKDApCi0gICAgCi0vKiBSZXR1cm4gYWxs
IGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBz
dHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAg
ICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAg
IGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5
bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwK
LSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19i
dWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwK
LSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBc
Ci0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1
dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRlZiBZWV9UWVBFREVG
X1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3Qg
eXlfc2l6ZV90OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQot
I2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
Ci0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7
ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAv
KiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBp
bnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICog
Y2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgaW50IHl5X25fY2hhcnM7Ci0K
LSAgICAvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNy
ZWF0ZWQgaXQsCi0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNo
b3VsZCBmcmVlKCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5
X2lzX291cl9idWZmZXI7Ci0KLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZl
IiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBm
b3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5zdGVhZCBvZiBm
cmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotICAgICAq
IGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLSAg
ICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBh
IGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4
dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9i
b2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwotICAg
IGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLSAgICAv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVmZmVyOwot
Ci0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0j
ZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVu
IGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBt
YXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAg
ICAgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3Jl
LiAgV2UgbWlnaHQKLSAgICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNo
LCB0aG91Z2gsIGJlY2F1c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAq
Ci0gICAgICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0
dXMgdG8gIm5ldyIKLSAgICAgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBj
YW4gY29udGludWUgc2Nhbm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBu
ZXcgaW5wdXQgZmlsZS4KLSAgICAgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIK
LQotICAgIH07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KLQotLyog
V2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4g
dGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3Jl
IGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5zIHRoZSB0b3Agb2Yg
dGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXln
LT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlf
YnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2Vm
dWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKLSAqIE5VTEwgb3Ig
d2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICovCi0jZGVm
aW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5
X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRF
IHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJf
U1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwcG9wX2J1ZmZl
cl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9pbml0X2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgKGNoYXIg
KmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NU
QVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRl
cyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIK
LQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAgICB7IFwK
LSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0gICAgfQotCi0jZGVmaW5lIHl5X3Nl
dF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1
ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9Ci0KLSNkZWZp
bmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0v
KiBCZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlf
U0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYg
aW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlw
ZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFs
X2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBE
b25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3Jl
IHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2Rl
ZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsg
XAotICAgIHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlf
Y19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAyMwotI2RlZmluZSBZWV9F
TkRfT0ZfQlVGRkVSIDI0Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5u
ZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFu
c19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxleF9pbnQz
Ml90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2Vw
dFsxMDVdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNCwgICAyMywgICAyMSwg
ICAyMiwgICAyMCwgICAyMCwgICAxOCwgICAxOCwKLSAgICAgICAxNywgICAxNywgICAyMSwgICAg
MSwgICAyMSwgICAxOSwgICAxOSwgICAxOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAxOCwg
ICAxNywgICAxNywgICAyMSwgICAgMSwgICAgMSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxOSwgICAxOCwgICAxNywgICAgMCwK
LSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgNSwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwKLSAgICAgICAxOSwgICAxNywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxNywgICAg
MCwgICAgOSwgICAgOCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAxNiwg
ICAgMCwgICAgMCwgICAgMCwgICAxNywgICAgMCwgICAxMCwKLSAgICAgICAxMiwgICAgMCwgICAg
NiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMSwgICAgMCwgICAgMCwKLSAgICAgICAgNywg
ICAxMywgICAgNCwgICAgMCwgICAgMCwgICAgMCwgICAxNSwgICAgMCwgICAgMCwgICAgMiwKLQot
ICAgICAgICAzLCAgICAwLCAgIDE0LCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgNCwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNSwgICAg
NSwgICAgMSwgICAgNywKLSAgICAgICAgNSwgICAgNSwgICAgOCwgICAgNSwgICAgOCwgICAgOSwg
ICAgNSwgICAxMCwgICAxMSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAxMSwgICAx
MSwgICAxMiwgICAxMiwgICAgNSwgICAgNSwgICAgNSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwg
ICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxNCwgICAxMywKLSAgICAgICAxNSwgICAx
NSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwKLSAgICAg
ICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNSwgICAxNiwgICAxNSwgICAx
NSwKLSAgICAgICAgNSwgICAgMSwgICAgNSwgICAgNSwgICAxNSwgICAgMSwgICAxNywgICAxMywg
ICAxMywgICAxOCwKLQotICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDE1LCAgIDIyLCAgIDE1LCAg
IDE1LCAgIDIzLCAgIDI0LCAgIDI1LAotICAgICAgIDI2LCAgIDI3LCAgIDE1LCAgIDI4LCAgIDI5
LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDE1LCAgIDMzLAotICAgICAgIDE1LCAgIDE1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X21ldGFbMzRdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAgMywgICAgMSwgICAg
MSwgICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgNCwKLSAgICAgICAgNCwgICAgNCwgICAgNSwg
ICAgNiwgICAgNywgICAgNywgICAgNSwgICAgNSwgICAgNiwgICAgNSwKLSAgICAgICAgNywgICAg
NywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKLSAgICAg
ICAgNywgICAgNywgICAgNwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYmFzZVsxMTFdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMCwgICAxOCwgIDE4NCwgIDE4NSwg
ICAxMSwgIDE4NSwgIDE4NSwgICAyMSwgICAyOCwgICA1MywKLSAgICAgICAgMCwgIDE2NCwgICAz
OSwgICA3MSwgICAxMiwgICAzMiwgICAzNCwgICAgMSwgICAzOSwgICA0NCwKLSAgICAgICAgMCwg
ICAgMCwgICAgMCwgIDE2MiwgICA2NCwgICAgMCwgICAgMCwgIDE2MiwgICA0NiwgIDE2MCwKLSAg
ICAgIDE1NywgIDE1MCwgIDE1MiwgIDE1NywgICA3MCwgICA0NywgICA2NSwgICAgMCwgIDE1Mywg
IDE1NCwKLSAgICAgICA2MiwgIDE1NSwgIDE0NCwgIDE0MSwgICA2NywgIDE0NSwgIDE1MiwgIDE1
MCwgIDEzOSwgICA3NiwKLSAgICAgICA4NSwgIDE0MSwgIDE0MywgIDE0NCwgIDE0NCwgIDE0MCwg
IDEzNSwgIDE0MSwgIDE0MCwgIDE0MCwKLSAgICAgIDEzOCwgIDEzNSwgIDEzNiwgIDEyNSwgIDEz
NCwgIDEyNywgIDE4NSwgIDE4NSwgIDEzMSwgIDEyMiwKLSAgICAgIDEyNCwgIDEyOCwgIDEyOCwg
IDE4NSwgIDEyMiwgIDEyNSwgIDEyMiwgIDEyNSwgIDEyMywgIDE4NSwKLSAgICAgIDE4NSwgIDEx
MiwgIDE4NSwgIDEyMCwgIDExMywgIDEyNywgICA5NywgICAgMCwgIDEwNywgICA4NiwKLSAgICAg
IDE4NSwgIDE4NSwgIDEwNSwgICA3NiwgICA4MSwgICAzNCwgIDE4NSwgICA5NywgICAxMCwgIDE4
NSwKLQotICAgICAgMTg1LCAgMTAzLCAgMTg1LCAgMTg1LCAgMTEwLCAgMTE0LCAgMTE4LCAgMTIx
LCAgMTI2LCAgMTMyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9k
ZWZbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAxMDUsICAxMDUsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDYsICAxMDYsICAxMDQsICAx
MDQsICAxMDQsICAxMDcsICAxMDcsICAgIDksICAgMTgsICAxMDQsCi0gICAgICAxMDgsICAgMTAs
ICAxMDYsICAxMDYsICAxMDQsICAgMTQsICAgMTQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDgsICAxMDYsICAxMDQs
Ci0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsCi0gICAgICAxMDQsICAxMDYsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDYsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDksICAxMDQsICAxMDQsICAxMTAsICAxMDQsICAxMDQsCi0K
LSAgICAgIDEwNCwgIDExMCwgIDEwNCwgICAgMCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzIx
OV0gPQotICAgIHsgICAwLAotICAgICAgICA0LCAgICA1LCAgICA2LCAgICA1LCAgICA3LCAgICA0
LCAgICA3LCAgICA3LCAgICA4LCAgICA5LAotICAgICAgIDEwLCAgIDEwLCAgIDE1LCAgIDE1LCAg
IDE1LCAgIDE1LCAgMTA0LCAgIDEyLCAgICA0LCAgIDEzLAotICAgICAgICA2LCAgICA1LCAgICA3
LCAgIDE0LCAgICA3LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDEwLAotICAgICAgIDE2LCAg
IDE2LCAgIDE2LCAgMTA0LCAgMTAzLCAgIDEyLCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE5LAotICAg
ICAgIDI1LCAgIDIwLCAgIDE1LCAgIDIxLCAgIDI2LCAgIDM1LCAgIDIwLCAgIDM1LCAgIDE5LCAg
IDE5LAotICAgICAgIDM1LCAgIDM2LCAgIDM1LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM3
LCAgIDM3LCAgIDk5LAotICAgICAgIDIxLCAgIDE3LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDI1LCAg
IDIwLCAgIDE1LCAgIDQxLCAgIDI2LAotICAgICAgIDQyLCAgIDIwLCAgIDI3LCAgIDQzLCAgIDM3
LCAgIDM3LCAgIDM3LCAgIDUwLCAgIDQ0LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDk1LCAg
IDU0LCAgIDU5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDI4LCAgIDI5LAotICAgICAgIDU1LCAgIDYw
LCAgIDMwLCAgIDMxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDMyLCAgMTAwLCAgMTAwLAotCi0gICAg
ICAgOTcsICAgMzMsICAgMzQsICAxMDEsICAxMDAsICAxMDAsICAgOTMsICAgOTYsICAgOTUsICAx
MDEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMjMs
ICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMTYsICAgOTQsICAgMTYsICAgMzgsICAgMzgsICAg
MzgsICAgOTgsICAgOTMsICAgOTIsCi0gICAgICAgOTgsICAgOTgsICAgOTgsICAxMDIsICAxMDIs
ICAxMDIsICAxMDIsICAxMDIsICAxMDIsICAgOTEsCi0gICAgICAgOTAsICAgODksICAgODgsICAg
ODcsICAgODYsICAgODUsICAgODQsICAgODMsICAgODIsICAgODEsCi0gICAgICAgODAsICAgNzks
ICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzQsICAgNzMsICAgNzIsICAgNzEsCi0gICAgICAg
NzAsICAgNjksICAgNjgsICAgNjcsICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEs
Ci0gICAgICAgNTgsICAgNTcsICAgNTYsICAgNTMsICAgNTIsICAgNDksICAgNDgsICAgNDcsICAg
NDYsICAgNDUsCi0gICAgICAgNDAsICAgMzksICAgMjQsICAxMDQsICAgIDMsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0KLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwg
IDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNAotICAgIH0gOwotCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzIxOV0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICA1LCAgIDE1LCAgICA1LCAgIDE1LCAgIDE4LCAgICAxLCAgICAyLCAg
ICAyLAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLAotICAgICAgICA4LCAgICA4LCAgICA4LCAgIDE4LCAgIDk5LCAgICAyLCAg
ICA5LCAgICA5LCAgICA5LCAgICA5LAotICAgICAgIDEzLCAgICA5LCAgIDEzLCAgICA5LCAgIDEz
LCAgIDE2LCAgICA5LCAgIDE3LCAgIDE5LCAgIDE5LAotICAgICAgIDE2LCAgIDIwLCAgIDE3LCAg
IDIwLCAgIDIwLCAgIDIwLCAgIDM2LCAgIDM2LCAgIDM2LCAgIDk2LAotICAgICAgICA5LCAgIDEw
LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDI1LCAgIDEwLCAgIDI1LCAgIDI5LCAgIDI1LAotICAgICAg
IDI5LCAgIDEwLCAgIDE0LCAgIDI5LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDM1LCAgIDI5LCAgIDM1
LAotICAgICAgIDM1LCAgIDM1LCAgIDk1LCAgIDQxLCAgIDQ1LCAgIDUwLCAgIDUwLCAgIDUwLCAg
IDE0LCAgIDE0LAotICAgICAgIDQxLCAgIDQ1LCAgIDE0LCAgIDE0LCAgIDUxLCAgIDUxLCAgIDUx
LCAgIDE0LCAgIDk4LCAgIDk4LAotCi0gICAgICAgOTQsICAgMTQsICAgMTQsICAgOTgsICAxMDIs
ICAxMDIsICAgOTMsICAgOTAsICAgODksICAxMDIsCi0gICAgICAxMDUsICAxMDUsICAxMDUsICAx
MDUsICAxMDUsICAxMDUsICAxMDUsICAxMDYsICAxMDYsICAxMDYsCi0gICAgICAxMDYsICAxMDcs
ICAgODcsICAxMDcsICAxMDgsICAxMDgsICAxMDgsICAxMDksICAgODYsICAgODUsCi0gICAgICAx
MDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAxMTAsICAgODQs
Ci0gICAgICAgODIsICAgNzksICAgNzgsICAgNzcsICAgNzYsICAgNzUsICAgNzMsICAgNzIsICAg
NzEsICAgNzAsCi0gICAgICAgNjksICAgNjYsICAgNjUsICAgNjQsICAgNjMsICAgNjIsICAgNjEs
ICAgNjAsICAgNTksICAgNTgsCi0gICAgICAgNTcsICAgNTYsICAgNTUsICAgNTQsICAgNTMsICAg
NTIsICAgNDksICAgNDgsICAgNDcsICAgNDYsCi0gICAgICAgNDQsICAgNDMsICAgNDIsICAgNDAs
ICAgMzksICAgMzQsICAgMzMsICAgMzIsICAgMzEsICAgMzAsCi0gICAgICAgMjgsICAgMjQsICAg
MTIsICAgIDMsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0K
LSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEw
NCwgIDEwNCwKLSAgICAgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwgIDEwNCwg
IDEwNAotICAgIH0gOwotCi0vKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxk
IG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbMjRdID0KLSAgICB7ICAgMCwKLTAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDAsICAgICB9OwotCi0v
KiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAot
ICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVmaW5lIFJF
SkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgpIHl5bW9y
ZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2RlZmluZSBZ
WV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNz
b3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBH
cmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5
LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2Vu
ZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5j
bHVkZSAiQ29udGV4dC5oIgotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZGVmaW5lIFlZX1VTRVJf
QUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maXJzdF9saW5lID0geXls
aW5lbm87ICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfY29sdW1uID0geXljb2x1bW4g
KyAxOyAgXAotICAgICAgICB5eWNvbHVtbiArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgIFwK
LSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXpl
KSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+cmVhZElucHV0KGJ1ZiwgbWF4U2l6ZSk7Ci0gICAg
Ci1zdGF0aWMgc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBp
bnQgbGVuKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBw
OjpDb250ZXh0KgotCi0vKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQg
c2Nhbm5lci4gKi8KLXN0cnVjdCB5eWd1dHNfdAotICAgIHsKLQotICAgIC8qIFVzZXItZGVmaW5l
ZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KLSAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsK
LQotICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBp
biB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLwotICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0
X3I7Ci0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9m
IHN0YWNrLiAqLwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5
IG9mIHN0YWNrLiAqLwotICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoq
PCBTdGFjayBhcyBhbiBhcnJheS4gKi8KLSAgICBjaGFyIHl5X2hvbGRfY2hhcjsKLSAgICBpbnQg
eXlfbl9jaGFyczsKLSAgICBpbnQgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAg
ICBpbnQgeXlfaW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9z
dGFydF9zdGFja19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRl
X3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKLQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7
Ci0KLSAgICBjaGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5
eV9tb3JlX2xlbjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5
eWxsb2NfcjsKLQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGlu
dCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBt
dXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAg
ICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5
bHZhbCB5eWctPnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXls
bG9jX3IKLSAgICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCBw
cGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nh
bm5lcik7Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBt
YWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICov
Ci0KLWludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0
X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRl
YnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4
dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFf
VFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9p
biAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLWludCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hh
ciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9saW5lbm8g
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVt
YmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFy
YW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAo
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNy
b3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0
aW9ucyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNp
ZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhf
c3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsK
LSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJs
ZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5k
ZWYgWVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVz
aF9zdGF0ZSAoaW50IG5ld19zdGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSAgICAKLSAgICBz
dGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAg
IHN0YXRpYyBpbnQgeXlfdG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8q
IEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYg
WVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgot
Ci0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQg
b3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwg
YnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2Ug
ZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIu
ICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQg
aW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBc
Ci0gICAgICAgIGludCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYg
XAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xu
JzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYg
KCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0gICAg
ICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAgICAg
cmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBt
YXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBcCi0g
ICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwKLSAg
ICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWls
ZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0gXAot
ICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwKLSAg
ICAgICAgICAgIH0gXAotICAgICAgICB9XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xv
biBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7
IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVj
YXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0
IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZp
bmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBl
bnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYg
WVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5k
aWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9S
Ci0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nh
bm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBh
bmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBz
Y2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRl
cnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1l
eHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFt
LFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUg
WVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFy
YW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYg
LyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVh
Y2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0g
Ki8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRp
ZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRl
ZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZ
X1JVTEVfU0VUVVAgXAotICAgIGlmICggeXlsZW5nID4gMCApIFwKLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBcCi0gICAgICAgICAgICAgICAgKHl5dGV4dFt5
eWxlbmcgLSAxXSA9PSAnXG4nKTsgXAotICAgIFlZX1VTRVJfQUNUSU9OCi0KLS8qKiBUaGUgbWFp
biBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1ZWV9ERUNM
Ci17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJl
Z2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2FjdDsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0K
LSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07
Ci0KLSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlf
aW5pdCA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLSAgICAgICAgWVlfVVNFUl9JTklUOwot
I2VuZGlmCi0KLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAgICAgICAgICAgeXln
LT55eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0gICAgICAgIGlmICgg
ISB5eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKLQotICAgICAgICBpZiAoICEgeXlv
dXQgKQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7Ci0KLSAgICAgICAgaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAg
ICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAg
ICAgICAgfQotCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxl
IGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKLQotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLSAgICAgICAgKnl5X2NwID0g
eXlnLT55eV9ob2xkX2NoYXI7Ci0KLSAgICAgICAgLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3Np
dGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAqIHRoZSBjdXJyZW50
IHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7Ci0KLSAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUg
Kz0gWVlfQVRfQk9MKCk7Ci15eV9tYXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGls
ZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVu
dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAg
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAgICAgIHl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDEwNCApOwotICAgICAg
ICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9u
OgotICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLSAgICAg
ICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKLQotICAgICAgICBpZiAoIHl5X2FjdCAhPSBZWV9FTkRf
T0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIGludCB5eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwg
PCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAg
ICAgeXljb2x1bW49MDsKLSAgICB9d2hpbGUoMCkKLTsKLSAgICAgICAgICAgIH0KLQotZG9fYWN0
aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAq
LwotCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0
aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAg
ICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwot
ICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5
eV9maW5kX2FjdGlvbjsKLQotY2FzZSAxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDI6Ci0vKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLwotKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dCAqLwoteXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJ
T047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
SEFTSF9ERUZJTkVfT0JKOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDM6Ci0qeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi15
eWctPnl5X2NfYnVmX3AgPSB5eV9jcCAtPSAxOwotWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0
IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9
IGV4dHJhY3RNYWNyb05hbWUoeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBIQVNIX0RFRklO
RV9GVU5DOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBIQVNIX1VOREVGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNToKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEhBU0hfSUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9JRkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBIQVNIX0lGTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VMU0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTElGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VORElGOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBERUZJTkVEOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX0VSUk9SOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1BSQUdNQTsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9F
WFRFTlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEhBU0hfVkVSU0lPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE2OgotWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxF
X1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAxODoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBuZXcgc3RkOjpzdHJpbmcoeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBJTlRfQ09OU1RBTlQ7Ci19Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6
c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiB5eXRleHRbMF07
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsgLyogSWdub3JlIHdo
aXRlc3BhY2UgKi8gfQotICAgIFlZX0JSRUFLCi1jYXNlIDIyOgotLyogcnVsZSAyMiBjYW4gbWF0
Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsgeXljb2x1bW4gPSAw
OwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVf
RU9GKElOSVRJQUwpOgoteyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjM6
Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotICAgIFlZX0JSRUFLCi0KLSAgICBjYXNlIFlZX0VORF9P
Rl9CVUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBu
b3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAg
ICAgICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0gICAg
ICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAg
ICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2Vy
Ci0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotICAgICAgICAgICAgICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQotCi0gICAgICAg
IC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9z
aXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5
eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQg
cGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtl
IHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZlciBzdGF0
ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5wdXQoKS4K
LSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAg
IHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgeXlfc3RhdGVfdHlw
ZSB5eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICB5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAg
ICAgICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0g
ICAgICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAg
ICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAg
ICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAg
ICAgICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAg
ICAgICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0
Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8K
LQotICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJl
bnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25leHRfc3RhdGUgKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBOVUwuICov
Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAgICAgICBn
b3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlIHN3aXRj
aCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBj
YXJlIGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhh
dmUgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQg
dXAKLSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90
YWwKLSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRz
IHRvCi0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0
dXJuIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3Jr
IC0gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVy
bmVkLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAgICAg
ICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAg
ICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FD
VF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAg
ICAgICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3Rl
eHQ7Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAgICAgICAgICAgY2Fz
ZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0K
LSAgICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwot
ICAgICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2YgYWN0
aW9uIHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8K
LX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byBy
ZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBh
biBhY3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0JfQUNUX0NPTlRJTlVF
X1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqICBFT0Jf
QUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNo
YXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3Rv
X21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAx
XSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAv
KiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAg
ICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FE
SiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5n
bGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBh
IGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwg
Zmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1v
dmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUg
PSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBm
b3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykg
PSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAg
ICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbnVtX3RvX3JlYWQgPQotICAgICAgICAg
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3Zl
IC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAgICAgICAg
eyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLSAgICAg
ICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwot
ICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotICAg
ICAgICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoaW50KSAo
eXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotICAgICAgICAgICAgaWYgKCBiLT55
eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50
IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0gICAgICAgICAgICAgICAgaWYgKCBu
ZXdfc2l6ZSA8PSAwICkKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+
eXlfYnVmX3NpemUgLyA4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9
IChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBF
T0IgY2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVhbGxvYygodm9pZCAqKSBiLT55
eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLyogQ2FuJ3QgZ3JvdyBpdCwg
d2UgZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IDA7Ci0K
LSAgICAgICAgICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKAotICAgICAgICAgICAgICAgICJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQg
YnVmZmVyIG92ZXJmbG93IiApOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSAmYi0+
eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotICAgICAgICAgICAgbnVtX3RvX3JlYWQg
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAg
IGlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90
b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotICAgICAgICAvKiBSZWFkIGluIG1vcmUgZGF0
YS4gKi8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycywgKHNp
emVfdCkgbnVtX3RvX3JlYWQgKTsKLQotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIGlmICggeXln
LT55eV9uX2NoYXJzID09IDAgKQotICAgICAgICB7Ci0gICAgICAgIGlmICggbnVtYmVyX3RvX21v
dmUgPT0gWVlfTU9SRV9BREogKQotICAgICAgICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9
IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAgLHl5c2Nh
bm5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAgICAgICAgICAgICAg
WVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBl
bHNlCi0gICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLSAgICBpZiAo
KHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAgLyogRXh0ZW5kIHRoZSBh
cnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLSAgICAgICAg
eXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAo
eXlnLT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0gICAgICAgIGlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIo
KSIgKTsKLSAgICB9Ci0KLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7Ci0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQot
ICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZlswXTsKLQotICAgIHJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAq
LwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OwotICAgIHl5X2N1cnJlbnRfc3RhdGUgKz0gWVlfQVRfQk9MKCk7
Ci0KLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9j
cCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAgcmVnaXN0
ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDog
MSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAg
ICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLQotICAgIHJldHVy
biB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1h
a2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAq
ICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwotICovCi0g
ICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUg
eXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBp
bnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBv
cHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwot
Ci0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5X2FjY2VwdFt5eV9j
dXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICB7
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAg
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLSAgICB5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSAxMDQp
OwotCi0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0j
aWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5
aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0gICAgaW50IGM7Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgKnl5
Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgaWYgKCAqeXlnLT55eV9j
X2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyog
eXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4u
Ci0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywg
dGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55
eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAg
ICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIGludCBvZmZzZXQgPSB5
eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlf
Y19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNj
YW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FD
VF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVz
ZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1
bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdl
IG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBi
ZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRl
ci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01B
VENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAg
ICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZl
ciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAgICAgICAg
ICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5
Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAg
IFlZX05FV19GSUxFOwotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAg
ICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOyAv
KiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KLSAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsg
ICAgLyogcHJlc2VydmUgeXl0ZXh0ICovCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWct
Pnl5X2NfYnVmX3A7Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9
IChjID09ICdcbicpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9i
b2wgKQotICAgICAgICAgICAKLSAgICBkb3sgeXlsaW5lbm8rKzsKLSAgICAgICAgeXljb2x1bW49
MDsKLSAgICB9d2hpbGUoMCkKLTsKLQotICAgIHJldHVybiBjOwotfQotI2VuZGlmICAvKiBpZm5k
ZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVu
dCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQG5vdGUgVGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwg
LgotICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKLSAgICAg
ICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JV
Rl9TSVpFICx5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIHBwX2luaXRfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVm
ZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfc3dpdGNo
X3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRo
aXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICogICAgICBwcHBvcF9i
dWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZl
cik7Ci0gICAgICovCi0gICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAg
IGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZs
dXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQot
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICBwcF9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5IGtu
b3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GIChwcHdyYXAo
KSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICogaXMgbG9v
a2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0gICAgICog
dG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZl
cl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0
ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Bv
czsKLSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwot
ICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKLX0KLQotLyoqIEFsbG9j
YXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAqIEBwYXJhbSBmaWxl
IEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIg
c2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZm
ZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IFlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZTsK
LQotICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRo
ZSBzaXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1i
dWZmZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKSBw
cGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGItPnl5
X2NoX2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAx
OwotCi0gICAgcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwotCi0gICAgcmV0dXJu
IGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZlciBj
cmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIGlmICggISBiICkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90
IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0gICAgaWYgKCBiLT55eV9pc19vdXJf
YnVmZmVyICkKLSAgICAgICAgcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVy
ICk7Ci0KLSAgICBwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8qIEluaXRp
YWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHNv
bWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICogc3Vj
aCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0aWMgdm9p
ZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi0KLXsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgcHBf
Zmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLSAgICBiLT55eV9pbnB1dF9maWxlID0gZmls
ZTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJy
ZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNh
bGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAg
ICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNv
bHVtbi4KLSAgICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAg
IGItPnl5X2JzX2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAg
fQotCi0gICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLSAgICBlcnJubyA9
IG9lcnJubzsKLX0KLQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRo
ZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1
ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgot
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBw
X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKLQotICAgIGItPnl5X25fY2hhcnMg
PSAwOwotCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVy
cy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1i
dWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFtIGluIHRoYXQgc3Rh
dGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIt
Pnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0gICAgYi0+eXlfYXRfYm9sID0gMTsK
LSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIGlmICggYiA9
PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRo
ZSBuZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9u
IHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBu
ZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRF
IG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVy
ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5
eXNjYW5uZXIpOwotCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hf
dG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0g
ICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAg
ICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
LSAgICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwg
cmVwbGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICB5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBu
ZXdfYnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8K
LSAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgotICogIFRoZSBuZXh0IGVsZW1lbnQgYmVj
b21lcyB0aGUgbmV3IHRvcC4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotICAgIGlmIChZ
WV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAg
IH0KLX0KLQotLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAq
ICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3RhdGljIHZv
aWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgaW50
IG51bV90b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci0KLSAg
ICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3
ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBh
IHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAgICAgICAgICogaW1t
ZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KLSAgICAgICAgICovCi0gICAgICAgIG51
bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9m
IGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBu
dW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49
ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLSAgICAgICAgLyogSW5jcmVhc2Ug
dGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0gICAgICAgIGlu
dCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLSAgICAgICAgbnVt
X3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFs
bG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWctPnl5X2J1ZmZlcl9zdGFj
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0g
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVu
c3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotICAgICAgICAvKiB6ZXJvIG9ubHkgdGhlIG5ldyBz
bG90cy4qLwotICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikpOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7
Ci0gICAgfQotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRp
cmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICogQHBhcmFt
IGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5
dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUg
b2JqZWN0LiAKLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJh
c2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZG
RVJfU1RBVEUgYjsKLSAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBiYXNlW3Np
emUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3NpemUtMV0g
IT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3QgdG8gbGVh
dmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsKLQotICAgIGIgPSAo
WVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAp
ICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55
eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICov
Ci0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9j
aGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAg
ICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55
eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotICAgIHBwX3N3aXRjaF90b19idWZm
ZXIoYiAseXlzY2FubmVyICk7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotLyoqIFNldHVwIHRoZSBp
bnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byBwcGxl
eCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFtIHl5
c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQg
bWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBwX3NjYW5fYnl0ZXMo
KSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3Qg
Y2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotICAgIHJldHVybiBw
cF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0KLS8qKiBT
ZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUg
bmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBi
eXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFt
IGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBi
eXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVy
biB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZX0JVRkZF
Ul9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50ICBfeXli
eXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7
Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIGludCBpOwotICAgIAotICAg
IC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWls
aW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFy
ICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIg
KTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBi
dWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgYiA9IHBwX3NjYW5fYnVm
ZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIC8qIEl0J3Mg
b2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLSAg
ICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJfYnVm
ZmVyID0gMTsKLQotICAgIHJldHVybiBiOwotfQotCi0gICAgc3RhdGljIHZvaWQgeXlfcHVzaF9z
dGF0ZSAoaW50ICBuZXdfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICgg
eXlnLT55eV9zdGFydF9zdGFja19wdHIgPj0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCApCi0g
ICAgICAgIHsKLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplOwotCi0gICAgICAgIHl5Zy0+eXlf
c3RhcnRfc3RhY2tfZGVwdGggKz0gWVlfU1RBUlRfU1RBQ0tfSU5DUjsKLSAgICAgICAgbmV3X3Np
emUgPSB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICogc2l6ZW9mKCBpbnQgKTsKLQotICAgICAg
ICBpZiAoICEgeXlnLT55eV9zdGFydF9zdGFjayApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrID0gKGludCAqKSBwcGFsbG9jKG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gKGludCAqKSBwcHJlYWxs
b2MoKHZvaWQgKikgeXlnLT55eV9zdGFydF9zdGFjayxuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0K
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgbWVtb3J5IGV4cGFuZGluZyBzdGFydC1jb25kaXRpb24gc3RhY2si
ICk7Ci0gICAgICAgIH0KLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9z
dGFja19wdHIrK10gPSBZWV9TVEFSVDsKLQotICAgIEJFR0lOKG5ld19zdGF0ZSk7Ci19Ci0KLSAg
ICBzdGF0aWMgdm9pZCB5eV9wb3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IGlmICggLS15eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA8IDAgKQotICAgICAgICBZWV9GQVRBTF9F
UlJPUiggInN0YXJ0LWNvbmRpdGlvbiBzdGFjayB1bmRlcmZsb3ciICk7Ci0KLSAgICBCRUdJTih5
eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyXSk7Ci19Ci0KLSAgICBz
dGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0
dXJuIHl5Zy0+eXlfc3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHIgLSAxXTsKLX0K
LQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNl
bmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgICAgICh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIl
c1xuIiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVm
aW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYg
eXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAg
ICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGlu
dCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVz
c19tYWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJn
OyBcCi0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotICAg
ICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxlbmcgPSB5eWxlc3Nf
bWFjcm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29y
ICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8q
KiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBwcGdldF9l
eHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0K
LS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0
IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBp
bnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
LwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5
eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGgg
b2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotaW50IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICpwcGdldF90ZXh0
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiog
U2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkg
dGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZp
bmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVk
IDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5l
X251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZv
aWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIg
ZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAg
IHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5
eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiog
U2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfY29sdW1uIChp
bnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29s
dW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBw
c2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0g
ICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4g
VGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBA
cGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCBw
cHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5
aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgcHBn
ZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2Rl
YnVnOwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29y
IG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiBwcGdldF9sdmFs
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lk
IHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnBwZ2V0X2xs
b2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAg
Ci12b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2Vy
LXZpc2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNy
ZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50
IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3Vt
ZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24s
IGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdCh5eXNj
YW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0K
LSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVj
dCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwp
ewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0g
ICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2Jh
bHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2ds
b2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5p
dF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4X2luaXRfZXh0cmEg
aGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhl
Ci0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVu
dC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5l
ciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSBy
ZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRl
Y2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3Vt
ZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxk
LgotICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZp
bmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
ZHVtbXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15
X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVy
cm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgKnB0cl95
eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3Qg
KSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVM
TCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0g
ICAgCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5
X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0
KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAg
ICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAot
ICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3Rh
dGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyog
SW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5u
ZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCks
IHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9z
dGFjayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7
Ci0gICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5
Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRo
ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4g
bWFpbi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91
dCA9IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAo
RklMRSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVy
cm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogcHBsZXhfaW5pdCgp
Ci0gICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJv
dGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHBwbGV4X2Rl
c3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIg
c3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxlKFlZX0NVUlJFTlRf
QlVGRkVSKXsKLSAgICAgICAgcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlz
Y2FubmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAg
ICAgIHBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIC8qIERlc3Ry
b3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICBwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sg
LHl5c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyog
RGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXln
LT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3Rh
Y2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50
IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxl
eCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0
X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAo
cmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciAp
OwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRl
cm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGlj
IHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAo
IGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgot
Ci0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IG47
Ci0gICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKLQotICAgIHJldHVybiBu
OwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0K
LXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93
aW5nIGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNo
YXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQgdXNlIHZvaWQqIGdl
bmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAgICAgKiBiZWNhdXNl
IGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0gICAg
ICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252
ZXJzaW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotICAgICAqLwot
ICAgIHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQot
dm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgZnJl
ZSggKGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0
ICovCi19Ci0KLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLXN0ZDo6c3RyaW5n
KiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbikKLXsKLSAgICAvLyBU
aGUgaW5wdXQgc3RyaW5nIGlzIG9mIHRoZSBmb3JtIHtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVO
VElGSUVSfQotICAgIC8vIFdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSBsYXN0IEhTUEFDRS4KLSAg
ICBBU1NFUlQoc3RyICYmIChsZW4gPiA4KSk7ICAvLyBzdHJsZW4oIiNkZWZpbmUgIikgPT0gODsK
LQotICAgIHN0ZDo6c3RyaW5nKiBuYW1lID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gbGVuIC0g
MTsgaSA+PSAwOyAtLWkpCi0gICAgewotICAgICAgICBpZiAoKHN0cltpXSA9PSAnICcpIHx8IChz
dHJbaV0gPT0gJ1x0JykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWUgPSBuZXcgc3RkOjpz
dHJpbmcoc3RyICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLQotaW50IENvbnRleHQ6OnJlYWRJbnB1dChjaGFyKiBidWYsIGludCBt
YXhTaXplKQotewotICAgIGludCBucmVhZCA9IFlZX05VTEw7Ci0gICAgd2hpbGUgKCFtSW5wdXQt
PmVvZigpICYmCi0gICAgICAgICAgIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0OjprRXJy
b3JOb25lKSAmJgotICAgICAgICAgICAobnJlYWQgPT0gWVlfTlVMTCkpCi0gICAgewotICAgICAg
ICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgICAgICBwcDo6VG9rZW46OmRlY29kZUxvY2F0
aW9uKHBwZ2V0X2xpbmVubyhtTGV4ZXIpLCAmbGluZSwgJmZpbGUpOwotICAgICAgICBmaWxlID0g
bUlucHV0LT5zdHJpbmdJbmRleCgpOwotICAgICAgICBwcHNldF9saW5lbm8ocHA6OlRva2VuOjpl
bmNvZGVMb2NhdGlvbihsaW5lLCBmaWxlKSxtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlu
cHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9
PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJU
KG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmIChwcGxleF9pbml0X2V4dHJhKHRoaXMsJm1MZXhl
cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1MZXhlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVzdHJveUxleGVyKCkKLXsKLSAg
ICBBU1NFUlQobUxleGVyKTsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUxleGVyKTsKLSAgICBtTGV4
ZXIgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcF90YWIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDIwNzIgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05V
IEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidz
IFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAx
OTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAo
YXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
ICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdl
ciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIg
c2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3Vy
IGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBn
ZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9m
Ci0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAo
YXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2gg
d2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1
dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBM
aWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgot
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxl
dG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBv
cmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9s
cyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAg
aW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4g
Zm9yIGxvY2FsCi0gICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFu
ZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0
aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5
IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFD
RSIgYmVsb3cuICAqLwotCi0vKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZ
WUJJU09OIDEKLQotLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMi4zIgotCi0vKiBTa2VsZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1F
ICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8q
IFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCAxCi0KLS8qIFN1YnN0
aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFy
c2UgcHBwYXJzZQotI2RlZmluZSB5eWxleCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJv
cgotI2RlZmluZSB5eWx2YWwgIHBwbHZhbAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmlu
ZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZpbmUgeXluZXJycyBwcG5lcnJzCi0jZGVmaW5lIHl5bGxv
YyBwcGxsb2MKLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5l
IFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUs
IHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4g
ICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgSEFTSCA9IDI1OCwKLSAgICAgSEFTSF9V
TkRFRiA9IDI1OSwKLSAgICAgSEFTSF9JRiA9IDI2MCwKLSAgICAgSEFTSF9JRkRFRiA9IDI2MSwK
LSAgICAgSEFTSF9JRk5ERUYgPSAyNjIsCi0gICAgIEhBU0hfRUxTRSA9IDI2MywKLSAgICAgSEFT
SF9FTElGID0gMjY0LAotICAgICBIQVNIX0VORElGID0gMjY1LAotICAgICBERUZJTkVEID0gMjY2
LAotICAgICBIQVNIX0VSUk9SID0gMjY3LAotICAgICBIQVNIX1BSQUdNQSA9IDI2OCwKLSAgICAg
SEFTSF9FWFRFTlNJT04gPSAyNjksCi0gICAgIEhBU0hfVkVSU0lPTiA9IDI3MCwKLSAgICAgSEFT
SF9MSU5FID0gMjcxLAotICAgICBIQVNIX0RFRklORV9PQkogPSAyNzIsCi0gICAgIEhBU0hfREVG
SU5FX0ZVTkMgPSAyNzMsCi0gICAgIElOVF9DT05TVEFOVCA9IDI3NCwKLSAgICAgRkxPQVRfQ09O
U1RBTlQgPSAyNzUsCi0gICAgIElERU5USUZJRVIgPSAyNzYKLSAgIH07Ci0jZW5kaWYKLS8qIFRv
a2Vucy4gICovCi0jZGVmaW5lIEhBU0ggMjU4Ci0jZGVmaW5lIEhBU0hfVU5ERUYgMjU5Ci0jZGVm
aW5lIEhBU0hfSUYgMjYwCi0jZGVmaW5lIEhBU0hfSUZERUYgMjYxCi0jZGVmaW5lIEhBU0hfSUZO
REVGIDI2MgotI2RlZmluZSBIQVNIX0VMU0UgMjYzCi0jZGVmaW5lIEhBU0hfRUxJRiAyNjQKLSNk
ZWZpbmUgSEFTSF9FTkRJRiAyNjUKLSNkZWZpbmUgREVGSU5FRCAyNjYKLSNkZWZpbmUgSEFTSF9F
UlJPUiAyNjcKLSNkZWZpbmUgSEFTSF9QUkFHTUEgMjY4Ci0jZGVmaW5lIEhBU0hfRVhURU5TSU9O
IDI2OQotI2RlZmluZSBIQVNIX1ZFUlNJT04gMjcwCi0jZGVmaW5lIEhBU0hfTElORSAyNzEKLSNk
ZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI3MgotI2RlZmluZSBIQVNIX0RFRklORV9GVU5DIDI3Mwot
I2RlZmluZSBJTlRfQ09OU1RBTlQgMjc0Ci0jZGVmaW5lIEZMT0FUX0NPTlNUQU5UIDI3NQotI2Rl
ZmluZSBJREVOVElGSUVSIDI3NgotCi0KLQotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVz
ZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0
LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICov
Ci0jaWZuZGVmIFlZREVCVUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0KLS8qIEVuYWJs
aW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQot
IyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxz
ZQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUg
dG9rZW4gdGFibGUuICAqLwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VO
X1RBQkxFIDAKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZ
U1RZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgdW5pb24gWVlTVFlQRQotCi17Ci0gICAgaW50IGl2
YWw7Ci0gICAgc3RkOjpzdHJpbmcqIHN2YWw7Ci0gICAgcHA6OlRva2VuKiB0dmFsOwotICAgIHBw
OjpUb2tlblZlY3RvciogdGxpc3Q7Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwotCi0g
ICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2ls
bCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZp
bmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIFlZTFRZUEUg
JiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZUEUK
LXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0X2xp
bmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUgWVlM
VFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZTFRZ
UEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgot
Ci0KLS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQot
Ci1leHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBZWUxUWVBFKiBsbG9jcCwgdm9pZCog
bGV4ZXIpOwotc3RhdGljIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwKLSAgICAgICAgICAg
ICAgICAgICAgcHA6OkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHJlYXNvbik7Ci0KLXN0YXRpYyB2b2lkIHB1c2hDb25kaXRpb25hbEJsb2NrKHBwOjpD
b250ZXh0KiBjb250ZXh0LCBib29sIGNvbmRpdGlvbik7Ci1zdGF0aWMgdm9pZCBwb3BDb25kaXRp
b25hbEJsb2NrKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLQotCi0vKiBMaW5lIDIxNiBvZiB5YWNj
LmMuICAqLwotCi0KLSNpZmRlZiBzaG9ydAotIyB1bmRlZiBzaG9ydAotI2VuZGlmCi0KLSNpZmRl
ZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKLSNlbHNl
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZ
WVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKLSNlbGlmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0
eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7Ci0jZW5kaWYK
LQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWlu
dDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Ci0j
ZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBl
X2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgot
Ci0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0laRV9UWVBFX18KLSMgIGRlZmluZSBZWVNJ
WkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5lZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJ
WkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxz
ZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAotIyBlbmRpZgotI2VuZGlmCi0KLSNk
ZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCi0KLSNpZm5kZWYgWVlfCi0jIGlm
IFlZRU5BQkxFX05MUwotIyAgaWYgRU5BQkxFX05MUwotIyAgIGluY2x1ZGUgPGxpYmludGwuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGRlZmluZSBZWV8obXNnaWQp
IGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQotIyAgZW5kaWYKLSMgZW5kaWYKLSMg
aWZuZGVmIFlZXwotIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKLSMgZW5kaWYKLSNlbmRpZgot
Ci0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8K
LSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRlZmluZSBZWVVTRShl
KSAoKHZvaWQpIChlKSkKLSNlbHNlCi0jIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLwotI2Vu
ZGlmCi0KLS8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFi
b3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwotI2lmbmRlZiBsaW50Ci0jIGRlZmluZSBZWUlE
KG4pIChuKQotI2Vsc2UKLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Ci1zdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKLSNlbHNlCi1zdGF0aWMgaW50Ci1ZWUlEIChpKQot
ICAgIGludCBpOwotI2VuZGlmCi17Ci0gIHJldHVybiBpOwotfQotI2VuZGlmCi0KLSNpZiAhIGRl
ZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKLQotLyogVGhlIHBhcnNlciBpbnZv
a2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwot
Ci0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0j
ICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2Fs
bG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKLSMgICAgaW5jbHVk
ZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbGlm
IGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQotIyAgIGVs
aWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKLSMgICBl
bHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBpZiAhIGRlZmluZWQg
X0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQotIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgICBkZWZp
bmUgX1NURExJQl9IIDEKLSMgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVu
ZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlTVEFDS19BTExPQwotICAgLyogUGFjaWZ5IEdDQydz
IGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRy
KSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKLSMgIGlmbmRlZiBZWVNUQUNL
X0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1
YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCi0gICAgICAgYW5kIGEgcGFnZSBz
aXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQot
ICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0
bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxs
b2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCi0jICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLwotIyAgZW5kaWYKLSMg
ZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKLSMgIGRlZmluZSBZWVNUQUNL
X0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0jICAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQotIyAgZW5kaWYKLSMgIGlmIChk
ZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAotICAgICAgICYmICEg
KChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVm
aW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgX1NURExJQl9ICi0j
ICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZ
TUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxs
b2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZRlJFRQotIyAg
IGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBf
U1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
LSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCBm
cmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5k
aWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwg
WVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCi0gICAg
ICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotICAgICB8fCAoZGVmaW5lZCBZWUxUWVBFX0lT
X1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFMIFwKLSAgICAgICAgICYmIGRlZmluZWQgWVlT
VFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhh
dCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5
YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgICBZWUxU
WVBFIHl5bHM7Ci19OwotCi0vKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBv
bmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBf
TUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFu
IGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAg
TiBlbGVtZW50cy4gICovCi0jIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAq
IChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxU
WVBFKSkgXAotICAgICAgKyAyICogWVlTVEFDS19HQVBfTUFYSU1VTSkKLQotLyogQ29weSBDT1VO
VCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRv
Ci0gICBub3Qgb3ZlcmxhcC4gICovCi0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19H
TlVDX18gJiYgMSA8IF9fR05VQ19fCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQp
IFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgq
KEZyb20pKSkKLSMgIGVsc2UKLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgICAg
ICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAgICBcCi0gICAgICBmb3IgKHl5aSA9
IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKLSAgICAgICAgKFRvKVt5eWldID0gKEZyb20p
W3l5aV07ICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICBcCi0gICAgICB3aGlsZSAo
WVlJRCAoMCkpCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0
cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZ
WVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAg
ZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBv
ZiB0aGUKLSAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9j
YXRpb24gZm9yIHRoZSBuZXh0Ci0gICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9D
QVRFKFN0YWNrKSAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgWVlTSVpFX1QgeXluZXdieXRlczsgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAgIFwK
LSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2s7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5
eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9N
QVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAg
ICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1i
ZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMgotLyog
WVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDI0
NwotCi0vKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZ
TlRPS0VOUyAgNDcKLS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNk
ZWZpbmUgWVlOTlRTICAxMgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNk
ZWZpbmUgWVlOUlVMRVMgIDYyCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8K
LSNkZWZpbmUgWVlOU1RBVEVTICA5MQotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24g
c3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRF
RlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNzYKLQotI2RlZmluZSBZWVRSQU5TTEFURShZ
WVgpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0g
WVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNM
QVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVgu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAg
ICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgIDQzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAzNywgICAgNDAsICAg
ICAyLAotICAgICAgMjMsICAgIDI0LCAgICAzNiwgICAgMzMsICAgIDI1LCAgICAzNCwgICAgMzIs
ICAgIDM1LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDQ0LCAgICA0NSwKLSAgICAgIDI4LCAgICA0Miwg
ICAgMjksICAgIDQ2LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAyNiwgICAgIDIs
ICAgIDI3LCAgICAzOCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDMw
LCAgICAzOSwgICAgMzEsICAgIDQxLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAg
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0j
aWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1i
b2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cHJoc1tdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA0LCAg
ICAgNywgICAgIDksICAgIDExLCAgICAxMywgICAgMTYsICAgIDE5LAotICAgICAgMjMsICAgIDMw
LCAgICAzNCwgICAgMzgsICAgIDQyLCAgICA0NiwgICAgNTAsICAgIDUzLCAgICA1NiwgICAgNTks
Ci0gICAgICA2MiwgICAgNjUsICAgIDY4LCAgICA3MSwgICAgNzIsICAgIDc0LCAgICA3NSwgICAg
NzcsICAgIDgxLCAgICA4MywKLSAgICAgIDg2LCAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5OSwg
ICAxMDEsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTA5LAotICAgICAxMTEsICAgMTEzLCAgIDEx
NSwgICAxMTcsICAgMTE5LCAgIDEyMSwgICAxMjMsICAgMTI1LCAgIDEyNywgICAxMjksCi0gICAg
IDEzMSwgICAxMzMsICAgMTM1LCAgIDEzNywgICAxMzksICAgMTQxLCAgIDE0MywgICAxNDUsICAg
MTQ3LCAgIDE0OSwKLSAgICAgMTUxLCAgIDE1MywgICAxNTUKLX07Ci0KLS8qIFlZUkhTIC0tIEEg
YC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCi1zdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDggeXlyaHNbXSA9Ci17Ci0gICAgICA0OCwgICAgIDAsICAgIC0xLCAgICAtMSwg
ICAgNDgsICAgIDQ5LCAgICAtMSwgICAgNTAsICAgIC0xLCAgICA1MSwKLSAgICAgIC0xLCAgICAy
MiwgICAgLTEsICAgIDU1LCAgICAyMiwgICAgLTEsICAgICAzLCAgICAyMiwgICAgLTEsICAgIDE3
LAotICAgICAgNTIsICAgIDIyLCAgICAtMSwgICAgMTgsICAgIDIzLCAgICA1MywgICAgMjQsICAg
IDUyLCAgICAyMiwgICAgLTEsCi0gICAgICAgNCwgICAgMjEsICAgIDIyLCAgICAtMSwgICAgIDUs
ICAgIDU0LCAgICAyMiwgICAgLTEsICAgICA2LCAgICAyMSwKLSAgICAgIDIyLCAgICAtMSwgICAg
IDcsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA5LCAgICA1NCwgICAgMjIsICAgIC0xLAotICAg
ICAgIDgsICAgIDIyLCAgICAtMSwgICAgMTAsICAgIDIyLCAgICAtMSwgICAgMTIsICAgIDIyLCAg
ICAtMSwgICAgMTMsCi0gICAgICAyMiwgICAgLTEsICAgIDE0LCAgICAyMiwgICAgLTEsICAgIDE1
LCAgICAyMiwgICAgLTEsICAgIDE2LCAgICAyMiwKLSAgICAgIC0xLCAgICAtMSwgICAgNTUsICAg
IC0xLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICA1MywgICAgMjUsICAgIDIxLAotICAgICAgLTEs
ICAgIDU2LCAgICAtMSwgICAgNTQsICAgIDU2LCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA1NSwg
ICAgNTcsCi0gICAgICAtMSwgICAgMTEsICAgIDIxLCAgICAtMSwgICAgMTEsICAgIDIzLCAgICAy
MSwgICAgMjQsICAgIC0xLCAgICA1NywKLSAgICAgIC0xLCAgICA1OCwgICAgLTEsICAgIDE5LCAg
ICAtMSwgICAgMjAsICAgIC0xLCAgICAyMSwgICAgLTEsICAgIDI2LAotICAgICAgLTEsICAgIDI3
LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIzLCAgICAtMSwgICAgMjQs
Ci0gICAgICAtMSwgICAgMzAsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAg
MzMsICAgIC0xLCAgICAzNCwKLSAgICAgIC0xLCAgICAzNSwgICAgLTEsICAgIDM2LCAgICAtMSwg
ICAgMzcsICAgIC0xLCAgICAzOCwgICAgLTEsICAgIDM5LAotICAgICAgLTEsICAgIDQwLCAgICAt
MSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDQsCi0gICAg
ICAtMSwgICAgNDUsICAgIC0xLCAgICAyNSwgICAgLTEsICAgIDQ2LCAgICAtMQotfTsKLQotLyog
WVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVm
aW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Ci17Ci0gICAg
ICAgMCwgICAgNjMsICAgIDYzLCAgICA2NSwgICAgNjksICAgIDcwLCAgICA3NCwgICAgNzUsICAg
IDg0LCAgICA4NSwKLSAgICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk3LCAgIDEwMCwgICAxMDMs
ICAgMTA1LCAgIDEwNywgICAxMTAsICAgMTExLAotICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTgsICAgMTE5LCAgIDEyMiwgICAxMjMsICAgMTI3LCAgIDEzMywgICAxMzcsCi0gICAgIDE0NCwg
ICAxNDgsICAgMTU1LCAgIDE1NywgICAxNTksICAgMTYzLCAgIDE2NiwgICAxNjksICAgMTcyLCAg
IDE3OCwKLSAgICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LAotICAgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAg
MTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5NywgICAxOTgsCi0gICAgIDE5OSwgICAyMDAs
ICAgMjAxCi19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZ
WVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRo
ZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFy
dGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCi1zdGF0aWMgY29uc3QgY2hhciAq
Y29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJI
QVNIIiwgIkhBU0hfVU5ERUYiLCAiSEFTSF9JRiIsCi0gICJIQVNIX0lGREVGIiwgIkhBU0hfSUZO
REVGIiwgIkhBU0hfRUxTRSIsICJIQVNIX0VMSUYiLCAiSEFTSF9FTkRJRiIsCi0gICJERUZJTkVE
IiwgIkhBU0hfRVJST1IiLCAiSEFTSF9QUkFHTUEiLCAiSEFTSF9FWFRFTlNJT04iLCAiSEFTSF9W
RVJTSU9OIiwKLSAgIkhBU0hfTElORSIsICJIQVNIX0RFRklORV9PQkoiLCAiSEFTSF9ERUZJTkVf
RlVOQyIsICJJTlRfQ09OU1RBTlQiLAotICAiRkxPQVRfQ09OU1RBTlQiLCAiSURFTlRJRklFUiIs
ICInXFxuJyIsICInKCciLCAiJyknIiwgIicsJyIsICInWyciLAotICAiJ10nIiwgIic8JyIsICIn
PiciLCAiJ3snIiwgIid9JyIsICInLiciLCAiJysnIiwgIictJyIsICInLyciLCAiJyonIiwKLSAg
IiclJyIsICInXiciLCAiJ3wnIiwgIicmJyIsICInficiLCAiJz0nIiwgIichJyIsICInOiciLCAi
JzsnIiwgIic/JyIsCi0gICIkYWNjZXB0IiwgImlucHV0IiwgImxpbmUiLCAidGV4dF9saW5lIiwg
ImNvbnRyb2xfbGluZSIsCi0gICJyZXBsYWNlbWVudF9saXN0IiwgInBhcmFtZXRlcl9saXN0Iiwg
ImNvbmRpdGlvbmFsX2xpc3QiLCAidG9rZW5fbGlzdCIsCi0gICJjb25kaXRpb25hbF90b2tlbiIs
ICJ0b2tlbiIsICJvcGVyYXRvciIsIDAKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0v
KiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTks
ICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwKLSAgICAgMjY1LCAgIDI2NiwgICAy
NjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAotICAg
ICAyNzUsICAgMjc2LCAgICAxMCwgICAgNDAsICAgIDQxLCAgICA0NCwgICAgOTEsICAgIDkzLCAg
ICA2MCwgICAgNjIsCi0gICAgIDEyMywgICAxMjUsICAgIDQ2LCAgICA0MywgICAgNDUsICAgIDQ3
LCAgICA0MiwgICAgMzcsICAgIDk0LCAgIDEyNCwKLSAgICAgIDM4LCAgIDEyNiwgICAgNjEsICAg
IDMzLCAgICA1OCwgICAgNTksICAgIDYzCi19OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0g
U3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAgICAwLCAgICA0NywgICAgNDgs
ICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDUwLCAgICA1MCwgICAgNTEsICAgIDUxLAotICAgICAg
NTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1
MSwgICAgNTEsCi0gICAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTIsICAgIDUzLCAg
ICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwKLSAgICAgIDU1LCAgICA1NSwgICAgNTYsICAgIDU2
LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4LAotICAgICAgNTgsICAg
IDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAg
NTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwg
ICAgNTgsICAgIDU4LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgKLX07Ci0KLS8qIFlZ
UjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9m
IHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAg
ICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwg
ICAgIDIsICAgICAzLAotICAgICAgIDYsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMCwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwKLSAgICAgICAx
LCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAg
MSwgICAgIDEKLX07Ci0KLS8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0
byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0
IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVs
dCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10g
PQotewotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyMywgICAgIDAsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAgNiwg
ICAgNDMsICAgIDQ0LCAgICA2MSwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQ1LAot
ICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsCi0gICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgMCwKLSAgICAgIDMwLCAgICAzNSwgICAgIDgs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI4LCAgICAzNCwgICAgIDAsICAgICAwLAotICAgICAg
MTYsICAgICAwLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAg
MCwgICAgMjQsCi0gICAgICAyNSwgICAgIDcsICAgIDMxLCAgICAxMSwgICAgMzIsICAgICAwLCAg
ICAxMiwgICAgMjksICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAgOSwgICAgMjYsICAgICAw
LCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzMywgICAgIDAsICAgIDI3LAotICAgICAgMTAKLX07
Ci0KLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50
OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAgIDEsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDY4LCAgICA4MywgICAgNTUsICAgIDY5LCAgICA1NiwKLSAgICAgIDU3LCAgICA1MQotfTsK
LQotLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlv
biBkZXNjcmliaW5nCi0gICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtNTUK
LXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQotewotICAgICAtNTUsICAgIDcz
LCAgIC01NSwgICAtMTcsICAgLTE4LCAgIDE0NSwgICAtMTAsICAgIC05LCAgIC0xNiwgICAxNDUs
Ci0gICAgICAtOCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI3LCAgIDIwMSwgICAg
MjgsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAg
LTU1LCAgIDE3MywKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDMwLCAgIC0xOSwgICAgLTMs
ICAgLTU1LCAgIC01NSwgICAgMzEsICAgIDMyLAotICAgICAtNTUsICAgMTA5LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMywgICAyMDEsCi0gICAgICAyOSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgIDM1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTE1LCAgIC0xMSwgICAyMDEsICAgIDM2
LCAgIC01NSwgICAgMzcsICAgLTU1LAotICAgICAtNTUKLX07Ci0KLS8qIFlZUEdPVE9bTlRFUk0t
TlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KLXsKLSAgICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtMjcsICAgLTU1LCAgICA1MSwgICAg
NjAsICAgLTU0LAotICAgICAgLTEsICAgLTU1Ci19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFU
RS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZl
LCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAot
ICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5
cy4KLSAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJM
RV9OSU5GIC0xCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Ci17Ci0gICAg
ICA1MCwgICAgNzcsICAgIDc0LCAgICA1MywgICAgNzUsICAgIDUyLCAgICA2MCwgICAgNzcsICAg
IDU0LCAgICA4NSwKLSAgICAgIDg2LCAgICA1OCwgICAgNTksICAgIDg3LCAgICA2MiwgICAgNTAs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDc2LAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNzIsICAgIDY3LAotICAgICAgODIsICAgIDcwLCAgICA3MywgICAgNzgsICAg
IDc5LCAgICA4MSwgICAgODQsICAgIDg5LCAgICA4OCwgICAgOTAsCi0gICAgICA2MSwgICAgNDks
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDcyLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDUwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICA1NCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAg
ICA4MCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksCi0gICAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA1NCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDIzLAot
ICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsCi0gICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgNzEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgICAw
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUKLX07Ci0KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQotewotICAg
ICAgIDEsICAgIDU1LCAgICAyMSwgICAgMjEsICAgIDIzLCAgICAyMiwgICAgMjIsICAgIDYxLCAg
ICAxMSwgICAgMjQsCi0gICAgICAyNSwgICAgMjEsICAgIDIxLCAgICAyNCwgICAgMjIsICAgIDE2
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMjIsICAgIDIyLCAgICAy
MiwgICAgMjIsICAgIDQ5LCAgICAyMiwKLSAgICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAg
ICAyMiwgICAgMjIsICAgIDIxLCAgICAyMSwgICAgODUsICAgIDIyLAotICAgICAgIDksICAgICAx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA2OSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA4NSwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAgICAyNCwK
LSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCi0gICAgICA0NSwgICAgNDYsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAt
MSwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAg
IDM4LAotICAgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2Ci19OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJl
ciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICA0OCwg
ICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAot
ICAgICAgMTAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTUsCi0gICAgICA1NywgICAgNTgsICAgIDIyLCAgICAyMSwgICAgMTEsICAgIDU0LCAg
ICA1NiwgICAgNTcsICAgIDIxLCAgICAyMSwKLSAgICAgIDIyLCAgICA1NCwgICAgMjIsICAgIDIy
LCAgICAyMiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgNTIsICAgIDU1LAotICAgICAgMjMsICAg
IDIyLCAgICA1NywgICAgMjIsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDU2LCAgICAyMiwgICAg
MjIsCi0gICAgICAyMiwgICAgMjIsICAgIDIxLCAgICA1MywgICAgMjEsICAgIDI0LCAgICAyNSwg
ICAgMjQsICAgIDUyLCAgICAyMSwKLSAgICAgIDIyCi19OwotCi0jZGVmaW5lIHl5ZXJyb2sgICAg
ICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNoYXIgPSBZWUVNUFRZ
KQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgIDAKLQotI2Rl
ZmluZSBZWUFDQ0VQVCAgICBnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgIGdv
dG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICBnb3RvIHl5ZXJyb3JsYWIKLQotCi0v
KiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJl
IHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmlu
ZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFu
dGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLwotCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdv
dG8geXllcnJsYWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0K
LSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgIFwKLWRvICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYg
eXlsZW4gPT0gMSkgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eXRv
a2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7ICAgICAgICAgICAgICAgXAotICAgICAgWVlQT1BT
VEFDSyAoMSk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnb3RvIHl5YmFja3VwOyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRl
eHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJP
UjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLXdoaWxlIChZWUlEICgwKSkKLQotCi0jZGVmaW5lIFlZVEVSUk9SICAgIDEK
LSNkZWZpbmUgWVlFUlJDT0RFICAgMjU2Ci0KLQotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENV
UlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4g
c2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2
aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KLQotI2RlZmluZSBZWVJI
U0xPQyhSaHMsIEspICgoUmhzKVtLXSkKLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5l
IFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgXAotICAgIGRv
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmIChZWUlEIChOKSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0
X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7ICAgIFwKLSAgICAgIChDdXJy
ZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47ICBcCi0g
ICAgICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5l
OyAgICAgXAotICAgICAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4p
Lmxhc3RfY29sdW1uOyAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0g
KEN1cnJlbnQpLmxhc3RfbGluZSAgID0gICAgICBcCi0gICAgICAgIFlZUkhTTE9DIChSaHMsIDAp
Lmxhc3RfbGluZTsgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2NvbHVt
biA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhz
LCAwKS5sYXN0X2NvbHVtbjsgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0jZW5kaWYKLQotCi0vKiBZWV9M
T0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KLSAgIFRo
aXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBr
bm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2Nh
dGlvbnMgd2Uga25vdy4gICovCi0KLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKLSMgaWYgWVlM
VFlQRV9JU19UUklWSUFMCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAg
ICAgICAgICBcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsICAgICAgICAgIFwK
LSAgICAgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sIFwKLSAgICAg
ICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKLSMgZWxzZQotIyAgZGVm
aW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQotIyBlbmRpZgotI2Vu
ZGlmCi0KLQotLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3Vt
ZW50cy4gICovCi0KLSNpZmRlZiBZWUxFWF9QQVJBTQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5
eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVmaW5lIFlZTEVYIHl5bGV4
ICgmeXlsdmFsLCAmeXlsbG9jKQotI2VuZGlmCi0KLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVx
dWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBSSU5URgotIyAgaW5jbHVk
ZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgZGVmaW5l
IFlZRlBSSU5URiBmcHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKSAg
ICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVn
KSAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgXAot
fSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlw
ZSwgVmFsdWUsIExvY2F0aW9uKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDAp
KQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMg
c3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQs
IGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25z
dCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0
aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5
dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBj
b25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2Vu
ZGlmCi17Ci0gIGlmICgheXl2YWx1ZXApCi0gICAgcmV0dXJuOwotICBZWVVTRSAoeXlsb2NhdGlv
bnApOwotICBZWVVTRSAoY29udGV4dCk7Ci0jIGlmZGVmIFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8
IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5
dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAoeXlvdXRwdXQpOwotIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQot
Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJv
bCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K
LSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAot
eXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25z
dCAqIGNvbnN0IHl5dmFsdWVwLCBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnAsIHBw
OjpDb250ZXh0KiBjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQg
KHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAgICBG
SUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBjb25z
dCB5eXZhbHVlcDsKLSAgICBZWUxUWVBFIGNvbnN0ICogY29uc3QgeXlsb2NhdGlvbnA7Ci0gICAg
cHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VO
UykKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBl
XSk7Ci0gIGVsc2UKLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5h
bWVbeXl0eXBlXSk7Ci0KLSAgWVlfTE9DQVRJT05fUFJJTlQgKHl5b3V0cHV0LCAqeXlsb2NhdGlv
bnApOwotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiOiAiKTsKLSAgeXlfc3ltYm9sX3ZhbHVlX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpOwot
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlfc3Rh
Y2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBp
dHMgfAotfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBl
X2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15
eV9zdGFja19wcmludCAoYm90dG9tLCB0b3ApCi0gICAgeXl0eXBlX2ludDE2ICpib3R0b207Ci0g
ICAgeXl0eXBlX2ludDE2ICp0b3A7Ci0jZW5kaWYKLXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJT
dGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4i
KTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAg
ICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVi
dWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0
b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9y
dCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmlu
dCAoWVlTVFlQRSAqeXl2c3AsIFlZTFRZUEUgKnl5bHNwLCBpbnQgeXlydWxlLCBwcDo6Q29udGV4
dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwg
eXlsc3AsIHl5cnVsZSwgY29udGV4dCkKLSAgICBZWVNUWVBFICp5eXZzcDsKLSAgICBZWUxUWVBF
ICp5eWxzcDsKLSAgICBpbnQgeXlydWxlOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2Vu
ZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2ln
bmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5
eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwot
ICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQg
KHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5
eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5
aSArIDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRm
IChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1
bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAg
ICAgICAgICAgIFwKLSAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29u
dGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBh
cnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKLSAgIG11bHRpcGxl
IHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwotaW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAhWVlERUJV
RyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQo
VGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYgLyogIVlZ
REVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNl
cidzIHN0YWNrcy4gICovCi0jaWZuZGVmIFlZSU5JVERFUFRICi0jIGRlZmluZSBZWUlOSVRERVBU
SCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tz
IGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQotICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4
dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9v
IGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FMTE9DX01B
WElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQotICAgZXZhbHVhdGVkIHdpdGggaW5m
aW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCi0KLSNpZm5kZWYgWVlNQVhE
RVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAotI2VuZGlmCi0KLQwKLQotI2lmIFlZRVJS
T1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18g
JiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0jICBlbHNl
Ci0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3Qg
Y2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoeXlzdHIpCi0g
ICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47Ci0gIGZv
ciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCi0gICAgY29udGludWU7Ci0gIHJl
dHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5c3RwY3B5Ci0j
ICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9H
TlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQotLyogQ29weSBZ
WVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcg
J1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBj
aGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlkZXN0LCB5eXNy
YykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0jZW5kaWYKLXsK
LSAgY2hhciAqeXlkID0geXlkZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3
aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1
cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgot
LyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3
YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBz
dWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1
b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFw
b3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNo
LWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwot
ICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQg
dGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0
bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIg
PT0gJyInKQotICAgIHsKLSAgICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0
ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9yICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkKLSAg
ICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2UgJywnOgotICAgICAgICBnb3RvIGRv
X25vdF9zdHJpcF9xdW90ZXM7Ci0KLSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5
cCAhPSAnXFwnKQotICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAg
LyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykK
LSAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlICciJzoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5
cmVzW3l5bl0gPSAnXDAnOwotICAgICAgICByZXR1cm4geXluOwotICAgICAgfQotICAgIGRvX25v
dF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0dXJuIHl5
c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXly
ZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdl
IGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCi0gICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlT
VEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKLSAgIGluY2x1ZGluZyB0
aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Ci0g
ICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291
bGQgYmUKLSAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRp
bmFyeSAic3ludGF4IGVycm9yIgotICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9N
QVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKLSAgIHNpemUgY2FsY3VsYXRpb24uICAq
Lwotc3RhdGljIFlZU0laRV9UCi15eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5
eXN0YXRlLCBpbnQgeXljaGFyKQotewotICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOwotCi0g
IGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKLSAgICByZXR1cm4g
MDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFy
KTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBl
XSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICAgICAgWVlTSVpFX1QgeXlz
aXplMTsKLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOwotICAgICAgZW51bSB7IFlZRVJS
T1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLSAgICAgIGludCB5eXg7Ci0KLSMgaWYgMAot
ICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0
cyB0aGF0IGFyZQotICAgICBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KLSAgICAgIFlZXygi
c3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7Ci0gICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVz
IG9yICVzIik7Ci0jIGVuZGlmCi0gICAgICBjaGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29uc3Qg
Knl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGlu
Z1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9
ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0gICAg
ICAgICAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLSAgICAgICAgICAgICsgKChZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKLSAgICAgICAgICAgICAgICogKHNpemVvZiB5eW9y
IC0gMSkpXTsKLSAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAg
ICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGlu
ZGV4ZXMgaW4KLSAgICAgWVlDSEVDSy4gICovCi0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAw
ID8gLXl5biA6IDA7Ci0KLSAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hl
Y2sgYW5kIHl5dG5hbWUuICAqLwotICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4g
KyAxOwotICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNr
bGltIDogWVlOVE9LRU5TOwotICAgICAgaW50IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1sw
XSA9IHl5dG5hbWVbeXl0eXBlXTsKLSAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5
eXVuZXhwZWN0ZWQpOwotCi0gICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7
ICsreXl4KQotICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRF
UlJPUikKLSAgICAgIHsKLSAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FS
R1NfTUFYSU1VTSkKLSAgICAgICAgICB7Ci0gICAgICAgIHl5Y291bnQgPSAxOwotICAgICAgICB5
eXNpemUgPSB5eXNpemUwOwotICAgICAgICB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0g
MV0gPSAnXDAnOwotICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIHl5YXJnW3l5
Y291bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0gICAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRu
YW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7Ci0gICAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlz
aXplMSA8IHl5c2l6ZSk7Ci0gICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gICAgICAgIHl5Zm10
ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Ci0gICAgICAgIHl5cHJlZml4ID0geXlvcjsK
LSAgICAgIH0KLQotICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5
eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXpl
MSA8IHl5c2l6ZSk7Ci0gICAgICB5eXNpemUgPSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXpl
X292ZXJmbG93KQotICAgIHJldHVybiBZWVNJWkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVz
dWx0KQotICAgIHsKLSAgICAgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9u
IHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLSAgICAgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJl
aGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0gICAgICAgICBwcm9kdWNlZCBhIHN0cmlu
ZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwotICAgICAgY2hhciAqeXlwID0g
eXlyZXN1bHQ7Ci0gICAgICBpbnQgeXlpID0gMDsKLSAgICAgIHdoaWxlICgoKnl5cCA9ICp5eWYp
ICE9ICdcMCcpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFd
ID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgeXlwICs9IHl5
dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotICAgICAgICAgIHl5ZiArPSAyOwotICAgICAg
ICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgeXlwKys7Ci0gICAgICAg
ICAgeXlmKys7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAgIHJldHVybiB5eXNp
emU7Ci0gICAgfQotfQotI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZWxlYXNlIHRo
ZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eWRlc3Ry
dWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFlZ
TFRZUEUgKnl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBj
b250ZXh0KQotICAgIGNvbnN0IGNoYXIgKnl5bXNnOwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlT
VFlQRSAqeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSAqeXlsb2NhdGlvbnA7Ci0gICAgcHA6OkNvbnRl
eHQqIGNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKHl5
bG9jYXRpb25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXlt
c2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFs
dWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBk
ZWZhdWx0OgotICAgIGJyZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBm
cm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2
b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vs
c2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAocHA6OkNvbnRleHQqIGNvbnRleHQpOwotI2Vsc2UK
LWludCB5eXBhcnNlICgpOwotI2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0K
LQotCi0KLQotCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0K
LSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotaW50Ci15eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAot
eXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKLSAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlm
Ci0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KQotI2Vs
c2UKLWludAoteXlwYXJzZSAoY29udGV4dCkKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXlj
aGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAg
Ki8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIu
ICAqLwotaW50IHl5bmVycnM7Ci0vKiBMb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9vay1haGVhZCBz
eW1ib2wuICAqLwotWVlMVFlQRSB5eWxsb2M7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47
Ci0gIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUg
ZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9v
ay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAg
Ki8KLSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIg
Zm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5
eW1zZ2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1z
Z19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBh
bmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5
eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0
byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBv
aW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNl
d2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5
eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5
cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0g
IFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0g
IFlZU1RZUEUgKnl5dnNwOwotCi0gIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCi0gIFlZTFRZ
UEUgeXlsc2FbWVlJTklUREVQVEhdOwotICBZWUxUWVBFICp5eWxzID0geXlsc2E7Ci0gIFlZTFRZ
UEUgKnl5bHNwOwotICAvKiBUaGUgbG9jYXRpb25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFu
ZCBlbmRlZC4gICovCi0gIFlZTFRZUEUgeXllcnJvcl9yYW5nZVsyXTsKLQotI2RlZmluZSBZWVBP
UFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pLCB5eWxzcCAtPSAoTikpCi0K
LSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKLQotICAvKiBUaGUgdmFyaWFi
bGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQot
ICAgICBhY3Rpb24gcm91dGluZXMuICAqLwotICBZWVNUWVBFIHl5dmFsOwotICBZWUxUWVBFIHl5
bG9jOwotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1
Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9w
cGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFy
dGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0g
IHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOyAgICAgLyogQ2F1c2UgYSB0b2tlbiB0
byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBX
YXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhh
dCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBU
aGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3Ag
PSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0gIHl5bHNwID0geXlsczsKLSNpZiBZWUxUWVBFX0lT
X1RSSVZJQUwKLSAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUgcGFy
c2luZyBzdGFydHMuICAqLwotICB5eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3RfbGlu
ZSAgID0gMTsKLSAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9IDA7
Ci0jZW5kaWYKLQotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eW5ld3N0YXRlIC0t
IFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUg
dmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBT
byBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KLSAgeXlzc3ArKzsK
LQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7Ci0KLSAgaWYgKHl5c3MgKyB5eXN0
YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVz
ZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCi0gICAgICBZWVNJ
WkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0jaWZkZWYgeXlvdmVyZmxvdwotICAg
ICAgewotICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4g
IFVzZSBjb3BpZXMgb2YKLSAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2Ug
dGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZz
MSA9IHl5dnM7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAq
eXlsczEgPSB5eWxzOwotCi0gICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9s
bG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFj
aywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3Vu
ZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRl
ZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8o
Im1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXlzc3ApLAotICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCks
Ci0gICAgICAgICAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAg
ICAgICZ5eXN0YWNrc2l6ZSk7Ci0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsK
LSAgICB5eXZzID0geXl2czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0j
IGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBl
bHNlCi0gICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlm
IChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0g
ICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6
ZSkKLSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLSAgICB5eXR5cGVf
aW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAo
dW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6
ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZ
WVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLSAg
ICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKLSMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAg
ICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKLSAgICAg
IH0KLSMgZW5kaWYKLSNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCi0KLSAgICAgIHl5c3NwID0g
eXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwotICAg
ICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBs
b25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt
IDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwot
Ci0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1
cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0
YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hh
dCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXlu
ID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8g
eXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlm
IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlF
TVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRp
bmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5
eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwot
ICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAg
ICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZh
bCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWlu
ZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3Is
IHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAg
fHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlk
ZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0g
ICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLSAgICBnb3RvIHl5ZXJy
bGFiOwotICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0g
IGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMg
c2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0
YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8q
IFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hp
ZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBz
aGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9G
KQotICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3Ag
PSB5eWx2YWw7Ci0gICorK3l5bHNwID0geXlsbG9jOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJl
bnQgc3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRl
XTsKLSAgaWYgKHl5biA9PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8g
YSByZWR1Y3Rpb24uICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1
Y2U6Ci0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICov
Ci0gIHl5bGVuID0geXlyMlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxl
bWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0K
LSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdl
LgotICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNl
cnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5j
b25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lk
cyBhCi0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXpl
ZC4gICovCi0gIHl5dmFsID0geXl2c3BbMS15eWxlbl07Ci0KLSAgLyogRGVmYXVsdCBsb2NhdGlv
bi4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7
Ci0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAg
ICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9z
LgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAg
ICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmJl
Z2luKCksICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KS0+ZW5kKCkpOwotICAgICAgICBkZWxldGUg
KHl5dnNwWygxKSAtICgyKV0udGxpc3QpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5
OgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXlsc3BbKDEpIC0gKDMp
XSkuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZU9iaiwgKHl5dnNwWygxKSAtICgzKV0uc3Zh
bCksIE5VTEwsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDEwOgotCi0gICAgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybygoeXls
c3BbKDEpIC0gKDYpXSkuZmlyc3RfbGluZSwgcHA6Ok1hY3JvOjprVHlwZUZ1bmMsICh5eXZzcFso
MSkgLSAoNildLnN2YWwpLCAoeXl2c3BbKDMpIC0gKDYpXS50bGlzdCksICh5eXZzcFsoNSkgLSAo
NildLnRsaXN0KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDExOgotCi0gICAgewot
ICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hD
b25kaXRpb25hbEJsb2NrKGNvbnRleHQsICh5eXZzcFsoMikgLSAoMyldLnRsaXN0KSA/IHRydWUg
OiBmYWxzZSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAg
ICAgICBwdXNoQ29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCBjb250ZXh0LT5pc01hY3JvRGVmaW5l
ZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNDoKLQotICAgIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgIWNv
bnRleHQtPmlzTWFjcm9EZWZpbmVkKCh5eXZzcFsoMikgLSAoMyldLnN2YWwpKSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDE1OgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNjoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0K
LSAgICB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDIzOgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDI1OgotCi0gICAgeyAoeXl2YWwudGxpc3QpID0gTlVMTDsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDI2OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxp
c3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9i
YWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElERU5USUZJ
RVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDI3OgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gKHl5dnNwWygxKSAtICgz
KV0udGxpc3QpOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tl
bigoeXlsc3BbKDMpIC0gKDMpXSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygzKSAt
ICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAo
eXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0udHZhbCkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyOToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVz
aF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMzA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSBuZXcgcHA6OlRva2Vu
VmVjdG9yOwotICAgICAgICAoeXl2YWwudGxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgx
KV0udHZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMikgLSAoMildLnR2YWwpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzI6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDMzOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEp
IC0gKDEpXSkuZmlyc3RfbGluZSwgKHl5dnNwWygxKSAtICgxKV0uaXZhbCksIE5VTEwpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2
YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgSU5UX0NP
TlNUQU5ULCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDM3OgotCi0gICAgewotICAgICAgICAoeXl2YWwudHZhbCkgPSBuZXcgcHA6OlRva2Vu
KCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBGTE9BVF9DT05TVEFOVCwgKHl5dnNwWygx
KSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzODoKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEpIC0gKDEp
XSkuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzOToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJ1sn
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDA6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdd
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQxOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
PCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MjoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
Jz4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDM6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICcoJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ0OgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnKSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJ3snOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDY6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICd9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ3OgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnLic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJysnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDk6Ci0KLSAgICB7ICh5eXZhbC5p
dmFsKSA9ICctJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUwOgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnLyc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJyonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTI6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICclJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnXic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NDoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJ3wnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICcmJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU2OgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAnfic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NzoKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJz0nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTg6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICchJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU5OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnOic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MDoKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJzsnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjE6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICcsJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYyOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnPyc7IDt9Ci0gICAgYnJlYWs7Ci0KLQotLyogTGluZSAxMjY3
IG9mIHlhY2MuYy4gICovCi0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgWVlfU1lN
Qk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwotCi0gIFlZ
UE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywg
eXlzc3ApOwotCi0gICorK3l5dnNwID0geXl2YWw7Ci0gICorK3l5bHNwID0geXlsb2M7Ci0KLSAg
LyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdo
YXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVk
IGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5
eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSAr
ICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsK
LSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBn
b3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIElmIG5vdCBhbHJl
YWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBp
ZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJyczsKLSNpZiAhIFlZRVJST1Jf
VkVSQk9TRQotICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJy
b3IiKSk7Ci0jZWxzZQotICAgICAgewotICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vy
cm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgIGlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAm
JiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLSAgICAgIHsKLSAgICAgICAg
WVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0gICAgICAgIGlmICghICh5eXNpemUgPD0g
eXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0gICAgICAgICAg
eXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKLSAgICAgICAgaWYgKHl5bXNnICE9IHl5
bXNnYnVmKQotICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotICAgICAgICB5eW1zZyA9
IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOwotICAgICAgICBpZiAoeXltc2cpCi0g
ICAgICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ewotICAgICAgICB5eW1zZyA9IHl5bXNnYnVmOwotICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVv
ZiB5eW1zZ2J1ZjsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICBpZiAoMCA8IHl5c2l6ZSAm
JiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0gICAgICB7Ci0gICAgICAgICh2b2lkKSB5eXN5bnRh
eF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0gICAgICAgIHl5ZXJyb3IgKCZ5eWxs
b2MsIGNvbnRleHQsIHl5bXNnKTsKLSAgICAgIH0KLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICAg
IHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotICAgICAg
ICBpZiAoeXlzaXplICE9IDApCi0gICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAg
IH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICB5eWVycm9yX3JhbmdlWzBdID0geXlsbG9j
OwotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJp
ZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCi0gICAgIGVy
cm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7
Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAg
aWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9Ci0gICAgICBlbHNl
Ci0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAg
ICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7Ci0gICAgICB5eWNoYXIg
PSBZWUVNUFRZOwotICAgIH0KLSAgICB9Ci0KLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBs
b29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgotICAgICB0b2tlbi4gICov
Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBs
aWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJyb3JsYWI6Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVy
cyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcwotICAgICBZWUVSUk9S
IGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2Vy
Ci0gICAgIGNvZGUuICAqLwotICBpZiAoLypDT05TVENPTkQqLyAwKQotICAgICBnb3RvIHl5ZXJy
b3JsYWI7Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNwWzEteXlsZW5dOwotICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
Ci0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4g
PSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3Nw
OwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24g
Y29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVy
cmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRl
Y3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBh
Y3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQotICAgIHsKLSAgICAg
IHl5biArPSBZWVRFUlJPUjsKLSAgICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYm
IHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKLSAgICAgICAgewotICAgICAgICAgIHl5biA9IHl5
dGFibGVbeXluXTsKLSAgICAgICAgICBpZiAoMCA8IHl5bikKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0
IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgIGlmICh5eXNzcCA9PSB5
eXNzKQotICAgIFlZQUJPUlQ7Ci0KLSAgICAgIHl5ZXJyb3JfcmFuZ2VbMF0gPSAqeXlsc3A7Ci0g
ICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0
YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAg
ICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7
Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAqKyt5
eXZzcCA9IHl5bHZhbDsKLQotICB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwotICAvKiBVc2lu
ZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCi0g
ICAgIHRoZSBsb29rLWFoZWFkLiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZ
TExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7Ci0gICorK3l5bHNw
ID0geXlsb2M7Ci0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0
YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRs
YWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhl
cmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxh
YjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZs
b3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXho
YXVzdGVkbGFiOgotICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhh
dXN0ZWQiKSk7Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRp
ZgotCi15eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBU
WSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAg
ICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAvKiBEbyBub3Qg
cmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0g
ICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsK
LSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3Mp
Ci0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAg
IHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFD
SyAoMSk7Ci0gICAgfQotI2lmbmRlZiB5eW92ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQot
ICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7Ci0jZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAg
aWYgKHl5bXNnICE9IHl5bXNnYnVmKQotICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlm
Ci0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1
bHQpOwotfQotCi0KLQotCi0KLXZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0K
LXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAx
OwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAv
LyBuYW1lc3BhY2UgcHAKLQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaAkocmV2
aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAK
LS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2Vs
ZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBD
b3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAg
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwotICAgcGFydCBv
ciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdv
cmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBp
c24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3Ig
YSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0
ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKLSAgIHRoZSBwYXJzZXIg
c2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKLSAg
IHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhl
IHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhj
ZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCi0K
LS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQ
RQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdE
QiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51
bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTks
Ci0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hf
SUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2
NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFT
SF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5T
SU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3
MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0g
MjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1
LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwot
I2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lG
IDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNk
ZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hf
RU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0j
ZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZp
bmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hf
REVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5U
X0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJ
RklFUiAyNzYKLQotCi0KLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFs
OwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6
VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxNDg5IG9mIHlhY2MuYy4gICovCi0KLSAg
ICBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxs
IGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmlu
ZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0jaWYgISBkZWZpbmVkIFlZTFRZ
UEUgJiYgISBkZWZpbmVkIFlZTFRZUEVfSVNfREVDTEFSRUQKLXR5cGVkZWYgc3RydWN0IFlZTFRZ
UEUKLXsKLSAgaW50IGZpcnN0X2xpbmU7Ci0gIGludCBmaXJzdF9jb2x1bW47Ci0gIGludCBsYXN0
X2xpbmU7Ci0gIGludCBsYXN0X2NvbHVtbjsKLX0gWVlMVFlQRTsKLSMgZGVmaW5lIHl5bHR5cGUg
WVlMVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZ
TFRZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNlbmRp
ZgotCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwX3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3V0aWxzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBwcF91dGlscy5oOiBDb21tb24gcHJlcHJvY2Vzc29yIHV0aWxpdGllcworCisjaWZuZGVm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9QUFVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29u
c3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGlu
IHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MuCisjZGVmaW5lIFBQX0RJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAorICBUeXBlTmFtZShjb25zdCBUeXBlTmFt
ZSYpOyAgICAgICAgICAgICAgIFwKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQor
CisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3BwX3V0aWxzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUK
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8
VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249
IjkuMDAiCisJTmFtZT0icHJlcHJvY2Vzc29yIgorCVByb2plY3RHVUlEPSJ7RkJFMzJERjMtMEZC
MC00RjJGLUE0MjQtMkMyMUJEN0JDMzI1fSIKKwlSb290TmFtZXNwYWNlPSJwcmVwcm9jZXNzb3Ii
CisJS2V5d29yZD0iV2luMzJQcm9qIgorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyIK
Kwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwkJ
PFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxl
cz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikk
KENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1
cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0i
MSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7X0RFQlVHO19MSUIiCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJ
QmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJv
cj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJCURpc2FibGVTcGVj
aWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0NzAyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmln
dXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25O
YW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJ
V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21C
dWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0
b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIy
IgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJ
CQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgor
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2Vk
UmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291
cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZl
bnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NN
YWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0Nv
bmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3x4NjQiCisJCQlP
dXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJh
dGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChD
b25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3Rl
clNldD0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8
VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXph
dGlvbj0iMCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUIi
CisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgor
CQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJ
CVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7
NDI0NDs0MjY3OzQ3MDIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNv
dXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VD
b21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmln
dXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8eDY0IgorCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRp
b25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29u
ZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJT
ZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0
YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQ
cm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29s
IgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmlu
c2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtO
REVCVUc7X0xJQiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxl
dmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJu
aW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7
NDI2NyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgor
CTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxl
cz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJjcHA7Yztj
YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9
Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9IgorCQkJPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlhZ25vc3RpY3MuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhhbmRsZXIuY3BwIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBh
cnNlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cRXhwcmVzc2lvblBhcnNlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cSW5wdXQuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyby5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29yLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tl
bi5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
VG9rZW5pemVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVy
CisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5j
O3hzZCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVG
QkU1MkVCRkJ9IgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlhZ25vc3Rp
Y3MuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxE
aXJlY3RpdmVIYW5kbGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRXhwcmVzc2lvblBhcnNlci5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTGV4ZXIuaCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyby5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxwcF91
dGlscy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFByZXByb2Nlc3Nvci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFNvdXJjZUxvY2F0aW9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxT
dHVkaW9Qcm9qZWN0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3N0bF91dGlscy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3N0bF91dGlscy5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gc3RsX3V0aWxzLmg6
IENvbW1vbiBTVEwgdXRpbGl0aWVzLgotCi0jaWZuZGVmIENPTU1PTl9TVExVVElMU19IXwotI2Rl
ZmluZSBDT01NT05fU1RMVVRJTFNfSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBEZWxl
dGUKLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgb3BlcmF0b3IoKSAoVCB4KSB7
IGRlbGV0ZSB4OyB9Ci19OwotCi1zdHJ1Y3QgRGVsZXRlU2Vjb25kCi17Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgQj4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKHN0ZDo6cGFpcjxBLCBCPiYg
eCkgeyBkZWxldGUgeC5zZWNvbmQ7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
Ly8gQ09NTU9OX1NUTFVUSUxTX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tl
bl90eXBlLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Rva2VuX3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfVE9LRU5fVFlQRV9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5f
VFlQRV9IXwotCi0jaW5jbHVkZSAicHBfdGFiLmgiCi0KLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgiCisKK1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICA6IG1TaW5rKHNpbmspCisg
ICAgLCBtTnVtRXJyb3JzKDApCit7CisgICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5kIG9ubHkgaW4g
ZnJhZ21lbnQgc2hhZGVycy4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIx
O3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2
ZjM7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0
O2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7ZjE7
Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIGZvdW5kIGluIGJvdGggdmVydGV4IGFuZCBmcmFnbWVu
dCBzaGFkZXJzLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRChzMjE7dmYyOyIp
OworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmMzsiKTsKKyAg
ICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjQ7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmUoc0MxO3ZmMzsiKTsKKyAgICAvLyBTYW1wbGlu
ZyBvcHMgcHJvdmlkZWQgYnkgT0VTX0VHTF9pbWFnZV9leHRlcm5hbC4KKyAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoMTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJEUHJvaigxO3ZmMzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJl
MkRQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBBUkJfdGV4
dHVyZV9yZWN0YW5nbGUuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdCgx
O3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3Zm
MzsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsi
KTsKK30KKworLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0
aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCisvLyBj
YW4gdmFyeSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGFyZ3VtZW50cy4gSWYgc28s
IHdlIHNob3VsZCByZXN0cmljdCB0aG9zZSBhcyB3ZWxsLgordm9pZCBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nOjplbmZvcmNlUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgm
IGdyYXBoKQoreworICAgIG1OdW1FcnJvcnMgPSAwOworCisgICAgLy8gRklYTUUobXZ1am92aWMp
OiBUaGUgZGVwZW5kZW5jeSBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHVzZXIgZGVmaW5lZCBmdW5j
dGlvbiBjYWxscyByaWdodCBub3csCisgICAgLy8gc28gd2UgZ2VuZXJhdGUgZXJyb3JzIGZvciB0
aGVtLgorICAgIHZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2FnZShncmFwaCk7CisK
KyAgICAvLyBTdGFydGluZyBmcm9tIGVhY2ggc2FtcGxlciwgdHJhdmVyc2UgdGhlIGRlcGVuZGVu
Y3kgZ3JhcGggYW5kIGdlbmVyYXRlIGFuIGVycm9yIGVhY2ggdGltZSB3ZQorICAgIC8vIGhpdCBh
IG5vZGUgd2hlcmUgc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4KKyAg
ICBmb3IgKFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJl
Z2luU2FtcGxlclN5bWJvbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kU2FtcGxlclN5
bWJvbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaFN5bWJvbCog
c2FtcGxlclN5bWJvbCA9ICppdGVyOworICAgICAgICBjbGVhclZpc2l0ZWQoKTsKKyAgICAgICAg
c2FtcGxlclN5bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZhbGlkYXRlVXNlckRlZmluZWRGdW5jdGlvbkNhbGxVc2Fn
ZShjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKFRGdW5jdGlvbkNh
bGxWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxscygpOworICAgICAgICAgaXRlciAhPSBncmFwaC5lbmRVc2VyRGVmaW5lZEZ1bmN0
aW9uQ2FsbHMoKTsKKyAgICAgICAgICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaEZ1bmN0
aW9uQ2FsbCogZnVuY3Rpb25DYWxsID0gKml0ZXI7CisgICAgICAgIGJlZ2luRXJyb3IoZnVuY3Rp
b25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgIG1TaW5rIDw8ICJBIGNh
bGwgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgbm90IHBlcm1pdHRlZC5cbiI7CisgICAg
fQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmJlZ2luRXJyb3IoY29u
c3QgVEludGVybU5vZGUqIG5vZGUpCit7CisgICAgKyttTnVtRXJyb3JzOworICAgIG1TaW5rLnBy
ZWZpeChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7
Cit9CisKK2Jvb2wgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6aXNTYW1wbGluZ09wKGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIWludGVybUZ1bmN0aW9uQ2FsbC0+aXNVc2VyRGVmaW5lZCgpICYmCisgICAgICAgICAg
IG1TYW1wbGluZ09wcy5maW5kKGludGVybUZ1bmN0aW9uQ2FsbC0+Z2V0TmFtZSgpKSAhPSBtU2Ft
cGxpbmdPcHMuZW5kKCk7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
dmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKQoreworICAgIC8vIFRleHR1
cmUgY2FjaGUgYWNjZXNzIHRpbWUgbWlnaHQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCisg
ICAgLy8gVGh1cywgd2UgcmVzdHJpY3Qgc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIGZyb20gYWZm
ZWN0aW5nIHRoZSBjb29yZGluYXRlIG9yIExPRCBiaWFzIG9mIGEKKyAgICAvLyBzYW1wbGluZyBv
cGVyYXRpb24uCisgICAgaWYgKGlzU2FtcGxpbmdPcChwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0
aW9uQ2FsbCgpKSkgeworICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1i
ZXIoKSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIC8vIFNlY29uZCBh
cmd1bWVudCAoY29vcmQpCisgICAgICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdl
dEludGVybUZ1bmN0aW9uQ2FsbCgpKTsKKyAgICAgICAgICAgICAgICBtU2luayA8PCAiQW4gZXhw
cmVzc2lvbiBkZXBlbmRlbnQgb24gYSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhl
IgorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgY29vcmRpbmF0ZSBhcmd1bWVudCBvZiBhIHNh
bXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLy8gVGhpcmQgYXJndW1lbnQgKGJpYXMpCisgICAg
ICAgICAgICAgICAgYmVnaW5FcnJvcihwYXJhbWV0ZXItPmdldEludGVybUZ1bmN0aW9uQ2FsbCgp
KTsKKyAgICAgICAgICAgICAgICBtU2luayA8PCAiQW4gZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24g
YSBzYW1wbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgdGhlIgorICAgICAgICAgICAgICAgICAg
ICAgIDw8ICIgYmlhcyBhcmd1bWVudCBvZiBhIHNhbXBsaW5nIG9wZXJhdGlvbi5cbiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IC8vIEZpcnN0IGFyZ3VtZW50IChzYW1wbGVyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZp
c2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIGJlZ2luRXJy
b3Ioc2VsZWN0aW9uLT5nZXRJbnRlcm1TZWxlY3Rpb24oKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4
cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIGluIGEgY29u
ZGl0aW9uYWwgc3RhdGVtZW50LlxuIjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nOjp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBiZWdpbkVycm9yKGxv
b3AtPmdldEludGVybUxvb3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5k
ZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIGluIGEgbG9vcCBjb25kaXRpb24uXG4i
OworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0TG9naWNhbE9w
KFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKQoreworICAgIGJlZ2luRXJyb3IobG9naWNhbE9w
LT5nZXRJbnRlcm1Mb2dpY2FsT3AoKSk7CisgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVw
ZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lk
ZSBvZiBhIGxvZ2ljYWwgIgorICAgICAgICAgIDw8IGxvZ2ljYWxPcC0+Z2V0T3BTdHJpbmcoKQor
ICAgICAgICAgIDw8ICIgb3BlcmF0b3IuXG4iOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1J
TkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcgOiBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoK
KyAgICBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspOwor
ICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7CisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdEFyZ3VtZW50KFRHcmFwaEFyZ3VtZW50KiBwYXJhbWV0ZXIp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVj
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9vcChUR3JhcGhMb29wKiBsb29wKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRMb2dpY2FsT3AoVEdyYXBoTG9naWNhbE9wKiBsb2dpY2FsT3Ap
OworCitwcml2YXRlOgorICAgIHZvaWQgYmVnaW5FcnJvcihjb25zdCBUSW50ZXJtTm9kZSogbm9k
ZSk7CisgICAgdm9pZCB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3Qg
VERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGJvb2wgaXNTYW1wbGluZ09wKGNvbnN0IFRJ
bnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCkgY29uc3Q7CisKKyAgICBUSW5mb1Np
bmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VFN0cmluZz4gU3RyaW5nU2V0OworICAgIFN0cmluZ1NldCBtU2FtcGxpbmdPcHM7Cit9Owor
CisjZW5kaWYgIC8vIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElN
SU5HX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgorCit2b2lkIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIGlmIChJ
c1NhbXBsZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKSB7CisgICAgICAgICsrbU51bUVycm9yczsK
KyAgICAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIG1TaW5rLmxvY2F0
aW9uKG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIG1TaW5rIDw8ICJTYW1wbGVycyBhcmUgbm90
IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiI7CisgICAgfQorfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElN
SU5HX0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJ
TUlOR19IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgor
CitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
ZyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICA6IFRJbnRlcm1UcmF2
ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKQorICAgICAgICAsIG1TaW5rKHNpbmspCisgICAgICAg
ICwgbU51bUVycm9ycygwKSB7fQorCisgICAgdm9pZCBlbmZvcmNlUmVzdHJpY3Rpb25zKFRJbnRl
cm1Ob2RlKiByb290KSB7IHJvb3QtPnRyYXZlcnNlKHRoaXMpOyB9CisgICAgaW50IG51bUVycm9y
cygpIHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKik7Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOwor
ICAgIGludCBtTnVtRXJyb3JzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVT
VFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTkyLDYgKzk5MiwyMiBAQCBib29sIERpc3BsYXk6OmdldERYVDVUZXh0dXJlU3VwcG9y
dCgpCiAgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfRFhUNSkpOwogfQogCisvLyB3ZSB1c2UgSU5UWiBmb3IgZGVwdGggdGV4
dHVyZXMgaW4gRGlyZWN0M0Q5CisvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQg
dG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKKy8vIHNlZSBodHRwOi8v
YXJhcy1wLmluZm8vdGV4dHMvRDNEOUdQVUhhY2tzLmh0bWwKK2Jvb2wgRGlzcGxheTo6Z2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERp
c3BsYXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZj
dXJyZW50RGlzcGxheU1vZGUpOworCisgICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9JTlRa
KSk7CisgICAgYm9vbCBudWxsID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7CisKKyAgICByZXR1cm4g
aW50eiAmJiBudWxsOworfQorCiBib29sIERpc3BsYXk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCiB7CiAgICAgRDNERElTUExBWU1P
REUgY3VycmVudERpc3BsYXlNb2RlOwpAQCAtMTA4MSw3ICsxMDk3LDcgQEAgRDNEUE9PTCBEaXNw
bGF5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYQogICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7
CiB9CiAKLUQzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxlKSBj
b25zdAorRDNEUE9PTCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QK
IHsKICAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQogICAgIHsKQEAgLTEwODksNyArMTEwNSw3IEBA
IEQzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woYm9vbCByZW4KICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgaWYgKCFyZW5kZXJhYmxlKQorICAgICAgICBpZiAoISh1c2FnZSAm
IChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpKSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJldmlz
aW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsMTEgQEAgY2xhc3MgRGlzcGxheQogICAg
IHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CiAgICAgdmly
dHVhbCBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2Nj
bHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNp
bmdTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdP
UkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChib29s
IHJlbmRlcmFibGUpIGNvbnN0OworICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChE
V09SRCB1c2FnZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgp
OwogICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDcgQEAgU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25z
dAogICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5k
b3cpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQogewog
ICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAgICBtRGVw
dGhTdGVuY2lsID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZSA9IE5VTEw7CkBAIC02NCw2ICs2NSw3IEBAIFN1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QKICAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5V
TEwpLCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhhbmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3
aWR0aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNF
KQogewogICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAg
ICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7CkBAIC0xMjEsNiArMTIzLDEyIEBAIHZvaWQgU3VyZmFj
ZTo6cmVsZWFzZSgpCiAgICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwogICAgIH0KIAorICAgIGlm
IChtQmFja0J1ZmZlcikKKyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Cisg
ICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICB9CisKICAgICBpZiAobURlcHRoU3RlbmNp
bCkKICAgICB7CiAgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKQEAgLTE0NCw2ICsx
NTIsOCBAQCB2b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQogICAgICAgICBtVGV4dHVyZS0+cmVsZWFz
ZVRleEltYWdlKCk7CiAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICB9CisKKyAgICBtU2hh
cmVIYW5kbGUgPSBOVUxMOwogfQogCiBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKQEAg
LTE3NCw1NyArMTg0LDEzIEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2ti
dWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIElEaXJlY3QzRFN1cmZhY2U5
KiBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZCAmJiBtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVy
VGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5B
ZGRSZWYoKTsKLSAgICB9Ci0KICAgICAvLyBFdmljdCBhbGwgbm9uLXJlbmRlciB0YXJnZXQgdGV4
dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzCiAgICAgLy8g
YmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVjaCB2aWRlbyBtZW1vcnkg
YXMgcG9zc2libGUuCiAgICAgZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNvdXJjZXMoKTsKLSAgICBy
ZWxlYXNlKCk7CiAKICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMg
PSB7MH07CiAgICAgSFJFU1VMVCByZXN1bHQ7CiAKLSAgICBib29sIHVzZUZsaXBFeCA9IChnZXRD
b21wYXJhYmxlT1NWZXJzaW9uKCkgPj0gdmVyc2lvbldpbmRvd3M3KSAmJiBtRGlzcGxheS0+aXNE
M2Q5RXhEZXZpY2UoKTsKLQotICAgIC8vIEZsaXBFeCBjYXVzZXMgdW5zZWVtbHkgc3RyZXRjaGlu
ZyB3aGVuIHJlc2l6aW5nIHdpbmRvd3MgQU5EIHdoZW4gb25lCi0gICAgLy8gZHJhd3Mgb3V0c2lk
ZSBvZiB0aGUgV01fUEFJTlQgY2FsbGJhY2suIFdoaWxlIHRoaXMgaXMgc2VsZG9tIGEgcHJvYmxl
bSBpbgotICAgIC8vIHNpbmdsZSBwcm9jZXNzIGFwcGxpY2F0aW9ucywgaXQgaXMgcGFydGljdWFy
bHkgbm90aWNlYWJsZSBpbiBtdWx0aXByb2Nlc3MKLSAgICAvLyBhcHBsaWNhdGlvbnMuIFRoZXJl
Zm9yZSwgaWYgdGhlIGNyZWF0b3IgcHJvY2VzcyBvZiBvdXIgd2luZG93IGlzIG5vdCBpbgotICAg
IC8vIHRoZSBjdXJyZW50IHByb2Nlc3MsIGRpc2FibGUgdXNlIG9mIEZsaXBFeC4KLSAgICBEV09S
RCB3aW5kb3dQSUQ7Ci0gICAgR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZ3aW5k
b3dQSUQpOwotICAgIGlmICh3aW5kb3dQSUQgIT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpKQotICAg
IHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVmFyaW91cyBo
YXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IEQzRFNXQVBFRkZFQ1RfRkxJUEVYIHdoZW4gZWl0aGVy
IHRoZQotICAgIC8vIGRldmljZSBmb3JtYXQgb3IgYmFjayBidWZmZXIgZm9ybWF0IGlzIG5vdCAz
Mi1iaXQuCi0gICAgSERDIGRldmljZUNvbnRleHQgPSBHZXREQygwKTsKLSAgICBpbnQgZGV2aWNl
Rm9ybWF0Qml0cyA9IEdldERldmljZUNhcHMoZGV2aWNlQ29udGV4dCwgQklUU1BJWEVMKTsKLSAg
ICBSZWxlYXNlREMoMCwgZGV2aWNlQ29udGV4dCk7Ci0gICAgaWYgKG1Db25maWctPm1CdWZmZXJT
aXplICE9IDMyIHx8IGRldmljZUZvcm1hdEJpdHMgIT0gMzIpCi0gICAgewotICAgICAgICB1c2VG
bGlwRXggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBFWCBpcyBh
bHdheXMgVlNZTkNlZAotICAgIGlmIChtU3dhcEludGVydmFsID09IDApCi0gICAgewotICAgICAg
ICB1c2VGbGlwRXggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBEM0RTV0FQRUZGRUNUX0ZMSVBF
WCBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgYmFjayBidWZmZXIuCi0gICAgaWYgKG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQot
CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWct
Pm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEg
ZXZlbiB3aGVuIHdlIHVzZSBEM0RTV0FQRUZGRUNUX0ZMSVBFWC4KICAgICAvLyBXZSBkbyB0aGlz
IGJlY2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlz
IHRvIDEKQEAgLTIzOSw0MSArMjA1LDUwIEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4o
aW50IGJhY2tidWYKICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAw
OyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCiAgICAgcHJlc2VudFBh
cmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsgICAvLyBGSVhN
RTogVW5pbXBsZW1lbnRlZAogICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVy
dmFsID0gbVByZXNlbnRJbnRlcnZhbDsKLSAgICAvLyBVc2UgZmxpcEV4IG9uIFdpbjcgb3IgZ3Jl
YXRlci4KLSAgICBpZih1c2VGbGlwRXgpCi0gICAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZm
ZWN0ID0gRDNEU1dBUEVGRkVDVF9GTElQRVg7Ci0gICAgZWxzZQotICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuU3dhcEVmZmVjdCA9IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkID8gRDNEU1dBUEVGRkVD
VF9DT1BZIDogRDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3
YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7CiAgICAgcHJlc2VudFBhcmFtZXRlcnMu
V2luZG93ZWQgPSBUUlVFOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9
IGJhY2tidWZmZXJXaWR0aDsKICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0
ID0gYmFja2J1ZmZlckhlaWdodDsKIAotICAgIGlmIChtV2luZG93KQorICAgIC8vIFJlbGVhc2Ug
c3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0
YXJnZXQsIHdoaWxlIHRoZQorICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBm
b3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCisgICAgaWYgKG1Td2Fw
Q2hhaW4pCiAgICAgewotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxT
d2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgICAgICBpZiAobURpc3Bs
YXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIHBTaGFyZUhhbmRsZSA9
ICZtU2hhcmVIYW5kbGU7Ci0gICAgICAgIH0KKyAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgp
OworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFS
R0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1
cmUsIHBTaGFyZUhhbmRsZSk7CisgICAgaWYgKG1CYWNrQnVmZmVyKQorICAgIHsKKyAgICAgICAg
bUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwogICAg
IH0KIAotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
CiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENB
TEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKyAgICAgICAgbU9mZnNjcmVlblRl
eHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOworICAg
IH0KIAotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlu
cyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFz
ZSgpOworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9CiAKLSAg
ICAgICAgCi0gICAgICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
cHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1TaGFyZUhhbmRs
ZSA9IE5VTEw7CisgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOworICAgIGlmICghbVdp
bmRvdyAmJiBtRGlzcGxheS0+c2hhcmVIYW5kbGVTdXBwb3J0ZWQoKSkKKyAgICB7CisgICAgICAg
IHBTaGFyZUhhbmRsZSA9ICZtU2hhcmVIYW5kbGU7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyRm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNo
YXJlSGFuZGxlKTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1cmU6ICUwOGxYIiwgcmVzdWx0KTsKKyAg
ICAgICAgcmVsZWFzZSgpOwogCiAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkp
CiAgICAgICAgIHsKQEAgLTI4NiwyMCArMjYxLDEyIEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRTd2Fw
Q2hhaW4oaW50IGJhY2tidWYKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtV2luZG93KQot
ICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVS
X1RZUEVfTU9OTywgJm1SZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoIXByZXNlcnZlZFJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgSW52YWxpZGF0ZVJlY3QobVdpbmRvdywg
TlVMTCwgRkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwot
ICAgIH0KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRh
cmdldDsKIAotICAgIGlmIChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCisgICAgcmVzdWx0ID0gbU9m
ZnNjcmVlblRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmbVJlbmRlclRhcmdldCk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChvbGRSZW5kZXJUYXJnZXQpCiAg
ICAgewogICAgICAgICBSRUNUIHJlY3QgPQogICAgICAgICB7CkBAIC0zMTgsMTAgKzI4NSwzNyBA
QCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgICAgIH0KIAog
ICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVj
dChwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNE
VEVYRl9OT05FKTsKIAotICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsK
LSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0
LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBp
ZiAobVdpbmRvdykKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRp
b25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsKKworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklD
RUxPU1QpOworCisgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBz
d2FwIGNoYWlucyBvciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlbGVhc2UoKTsKKworICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVz
dWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2
aWNlTG9zdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmVzdWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVG
RkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKICAgICB9CiAKICAgICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEM0RGTVRfVU5LTk9XTikKQEAgLTMyOSwxNSArMzIzLDI0IEBAIGJvb2wgU3VyZmFjZTo6cmVz
ZXRTd2FwQ2hhaW4oaW50IGJhY2tidWYKICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVE
ZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0
ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLSAg
ICB9CiAKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
IHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOworICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQz
REVSUl9JTlZBTElEQ0FMTCk7CiAKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRo
c3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKLSAg
ICAgICAgcmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFs
c2UpOworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJm
YWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
bGVhc2UoKTsKKworICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAg
ICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOwpAQCAtMzQ3LDYg
KzM1MCwxMTMgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIFN1cmZhY2U6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xp
bnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQoreworICAgIGlmICghbVN3YXBDaGFp
bikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh4ICsgd2lk
dGggPiBtV2lkdGgpCisgICAgeworICAgICAgICB3aWR0aCA9IG1XaWR0aCAtIHg7CisgICAgfQor
CisgICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaGVpZ2h0ID0g
bUhlaWdodCAtIHk7CisgICAgfQorCisgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICAvLyBEaXNhYmxlIGFs
bCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19G
SUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09M
T1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JH
QldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
Q0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVM
TCk7CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7CisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5U
ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
Uk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJFKTsKKyAgICBkZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7CisgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9J
TlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0
RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CisKKyAgICBEM0RWSUVXUE9SVDkgdmll
d3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsKKyAgICBkZXZpY2Ut
PlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7CisKKyAgICBmbG9hdCB4MSA9IHggLSAwLjVmOworICAg
IGZsb2F0IHkxID0gKG1IZWlnaHQgLSB5IC0gaGVpZ2h0KSAtIDAuNWY7CisgICAgZmxvYXQgeDIg
PSAoeCArIHdpZHRoKSAtIDAuNWY7CisgICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41
ZjsKKworICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7CisgICAgZmxvYXQgdjEgPSB5
IC8gZmxvYXQobUhlaWdodCk7CisgICAgZmxvYXQgdTIgPSAoeCArIHdpZHRoKSAvIGZsb2F0KG1X
aWR0aCk7CisgICAgZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBmbG9hdChtSGVpZ2h0KTsKKwor
ICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7e3gxLCB5MSwgMC4wZiwgMS4wZiwgdTEsIHYyfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEuMGYsIHUyLCB2Mn0sCisgICAg
ICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9LAorICAgICAg
ICAgICAgICAgICAgICAgICAge3gxLCB5MiwgMC4wZiwgMS4wZiwgdTEsIHYxfX07ICAgLy8geCwg
eSwgeiwgcmh3LCB1LCB2CisKKyAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgIGRldmlj
ZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9m
KGZsb2F0KSk7CisgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7CisKKyAgICBkZXZpY2UtPlNldFRl
eHR1cmUoMCwgTlVMTCk7CisKKyAgICBSRUNUIHJlY3QgPQorICAgIHsKKyAgICAgICAgeCwgbUhl
aWdodCAtIHkgLSBoZWlnaHQsCisgICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKKyAgICB9
OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVj
dCwgTlVMTCwgTlVMTCwgMCk7CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19j
YXN0PGdsOjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29udGV4dCgpKTsKKyAgICBpZiAoY29udGV4
dCkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPm1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgfQor
CisgICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgeworICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgIH0K
KworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBjaGVja0Zvck91dE9mRGF0
ZVN3YXBDaGFpbigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIEhXTkQgU3VyZmFjZTo6Z2V0
V2luZG93SGFuZGxlKCkKIHsKICAgICByZXR1cm4gbVdpbmRvdzsKQEAgLTQ2Nyw4NyArNTc3LDE4
IEBAIERXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW4KIAogYm9vbCBTdXJm
YWNlOjpzd2FwKCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNw
bGF5LT5lbmRTY2VuZSgpOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+
UHJlc2VudChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0
aCwgbUhlaWdodCk7CiB9CiAKIGJvb2wgU3VyZmFjZTo6cG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwg
RUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKIHsKLSAgICBpZiAoeCA8IDAg
fHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIGZhbHNlKTsKLSAgICB9Ci0KICAgICBpZiAoIW1Q
b3N0U3ViQnVmZmVyU3VwcG9ydGVkKQogICAgIHsKICAgICAgICAgLy8gU3BlYyBpcyBub3QgY2xl
YXIgYWJvdXQgaG93IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLQotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbURpc3BsYXkt
PmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAg
ICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsCi0gICAgICAgICAgICB4ICsgd2lkdGgsIG1IZWln
aHQgLSB5Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3QucmlnaHQgPiBtV2lkdGgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBtV2lkdGg7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAocmVjdC5ib3R0b20gPiBtSGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZWN0LmJvdHRvbSA9IG1IZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjdC5s
ZWZ0ID09IHJlY3QucmlnaHQgfHwgcmVjdC50b3AgPT0gcmVjdC5ib3R0b20pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJS
T1IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFSFVORyB8fCByZXN1bHQgPT0gRDNERVJSX0RF
VklDRVJFTU9WRUQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09O
VEVYVF9MT1NULCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIHN3YXBSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwogfQogCiBFR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdApAQCAt
NTY1LDYgKzYwNiw4IEBAIEVHTGludCBTdXJmYWNlOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQK
ICAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7CiB9CiAKKy8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC01NzUsNiArNjE4LDggQEAgSURpcmVjdDNE
U3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcgogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJm
YWNlOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmIChtRGVwdGhTdGVuY2lsKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJldmlzaW9u
IDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHByaXZhdGU6CiAKICAgICBEaXNwbGF5
ICpjb25zdCBtRGlzcGxheTsKICAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOwor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbURlcHRoU3RlbmNpbDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsK
ICAgICBJRGlyZWN0M0RUZXh0dXJlOSogbU9mZnNjcmVlblRleHR1cmU7CkBAIC03OCw2ICs3OSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdWJjbGFzc1dpbmRvdygpOwogICAgIHZvaWQgdW5zdWJj
bGFzc1dpbmRvdygpOwogICAgIGJvb2wgcmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0
aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpOworICAgIGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVH
TGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpOwogICAgIHN0YXRpYyBEV09SRCBj
b252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKTsKIAogICAgIGNvbnN0IEhXTkQgbVdpbmRv
dzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhhdCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJ
KHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
bGliRUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwOCw2ICsxMTA4LDExIEBAIEVHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFBvc3RTdWJCdWZmZXJOVigKIAogICAgIHRyeQogICAgIHsKKyAgICAg
ICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxT
RSk7CisgICAgICAgIH0KKwogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZh
Y2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKIApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZp
c2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAibGli
R0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lQnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCkBAIC0zMTAs
NiArMzExLDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAg
ICAgICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQxNlRleHR1
cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQx
NlJlbmRlcmFibGVUZXh0dXJlcyk7CiAgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
ID0gbURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBw
b3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1cmVzID0gbURpc3Bs
YXktPmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKTsKIAogICAgICAgICBtU3VwcG9ydHMzMmJpdElu
ZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7CiAKQEAgLTQw
NSw2ICs0MDcsMTEgQEAgdm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbUNh
Y2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKIH0KIAordm9pZCBDb250ZXh0OjptYXJrRHhVbmlm
b3Jtc0RpcnR5KCkKK3sKKyAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKK30KKwogdm9pZCBD
b250ZXh0OjptYXJrQ29udGV4dExvc3QoKQogewogICAgIGlmIChtUmVzZXRTdHJhdGVneSA9PSBH
TF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKQpAQCAtMTY0Niw2ICsxNjUzLDEyIEBAIGJvb2wg
Q29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgIGNhc2UgR0xfUkVTRVRf
Tk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKICAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0
ZWd5OwogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZP
Uk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1zID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgorICAgICAgICAqcGFyYW1zID0gR0xf
UFJPR1JBTV9CSU5BUllfQU5HTEU7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MzcsNiArMTc1MCw4IEBAIGJvb2wgQ29u
dGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgIGNhc2UgR0xfVEVYVFVSRV9C
SU5ESU5HXzJEOgogICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CiAgICAg
ICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CisgICAgICBjYXNlIEdM
X05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgIGNhc2UgR0xfUFJPR1JBTV9C
SU5BUllfRk9STUFUU19PRVM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CkBAIC0xODM1LDEzICsxODUwLDMxIEBAIGJv
b2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCisg
ICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0IHN5bnRoZXNpemUg
YSBOVUxMIGNvbG9yYXR0YWNobWVudAorICAgIC8vIHRvIGtlZXAgdGhlIEQzRCBydW50aW1lIGhh
cHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkZXB0aCB0ZXh0dXJpbmcuCisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBOVUxMOworICAgIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7Cisg
ICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1
ZmZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW5kZXJidWZmZXJPYmpl
Y3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENvbG9yYnVmZmVyKCk7CisgICAgfQorICAg
IGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQorICAgIHsKKyAgICAgICAgRVJSKCJ1bmFibGUgdG8g
bG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJPLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCiAgICAgYm9vbCByZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJU
YXJnZXRTZXJpYWwoKTsKKyAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVu
ZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwoKTsKICAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFs
ICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJn
ZXQoKTsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1
ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0
KQogICAgICAgICB7CisgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4
cGVjdGVkbHkgbnVsbC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0
IG11c3QgYmUgbG9zdAogICAgICAgICB9CiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclRhcmdl
dCgwLCByZW5kZXJUYXJnZXQpOwpAQCAtMTg1NiwyNSArMTg4OSwyNyBAQCBib29sIENvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSAwOwogICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsKCk7CiAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAg
ICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0U2Vy
aWFsKCk7CisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXItPmdldFNlcmlh
bCgpOwogICAgIH0KICAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7Cisg
ICAgICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbCA9IHN0ZW5jaWxidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAg
ewogICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0
ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpOwogICAgIH0KIAogICAgIGlmIChkZXB0aGJ1ZmZlclNl
cmlhbCAhPSBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsIHx8CkBAIC0xODg3LDkgKzE5MjIsMTQg
QEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgICAgICBtRGVw
dGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIGlmIChkZXB0aFN0ZW5j
aWwpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9CisKICAg
ICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdl
ZCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgp
OwogICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0CkBAIC0xOTE1LDExICsxOTU1LDEw
IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICB9CiAgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KG1TdGF0
ZS52aWV3cG9ydFgsIG1TdGF0ZS52aWV3cG9ydFksIG1TdGF0ZS52aWV3cG9ydFdpZHRoLCBtU3Rh
dGUudmlld3BvcnRIZWlnaHQsIG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgIHZp
ZXdwb3J0LlggPSBjbGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICB2aWV3cG9ydC5ZID0gY2xhbXAocmVjdC50b3As
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAg
ICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpIC0gc3RhdGljX2Nhc3Q8TE9O
Rz4odmlld3BvcnQuWCkpOwotICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFtcChyZWN0LmJv
dHRvbSAtIHJlY3QudG9wLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
SGVpZ2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlkpKTsKKyAgICAgICAgdmlld3Bv
cnQuWCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVu
ZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOworICAgICAgICB2aWV3cG9ydC5ZID0gY2xhbXAobVN0YXRl
LnZpZXdwb3J0WSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdo
dCkpOworICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFdpZHRo
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpIC0gc3RhdGlj
X2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBjbGFt
cChtU3RhdGUudmlld3BvcnRIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWSkpOwogICAgICAg
ICB2aWV3cG9ydC5NaW5aID0gek5lYXI7CiAgICAgICAgIHZpZXdwb3J0Lk1heFogPSB6RmFyOwog
ICAgIH0KQEAgLTE5NDEsMTEgKzE5ODAsMTEgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldChib29sIGlnbgogICAgIHsKICAgICAgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKICAg
ICAgICAgewotICAgICAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KG1TdGF0
ZS5zY2lzc29yWCwgbVN0YXRlLnNjaXNzb3JZLCBtU3RhdGUuc2Npc3NvcldpZHRoLCBtU3RhdGUu
c2Npc3NvckhlaWdodCwgbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KTsKLSAgICAgICAgICAgIHJl
Y3QubGVmdCA9IGNsYW1wKHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJU
YXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LnRvcCA9IGNsYW1wKHJlY3QudG9w
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAocmVjdC5yaWdodCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9
IGNsYW1wKHJlY3QuYm90dG9tLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERl
c2MuSGVpZ2h0KSk7CisgICAgICAgICAgICBSRUNUIHJlY3Q7CisgICAgICAgICAgICByZWN0Lmxl
ZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOworICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChtU3RhdGUu
c2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQp
KTsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclggKyBtU3Rh
dGUuc2Npc3NvcldpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
V2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZ
ICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQpKTsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZy
ZWN0KTsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JU
RVNURU5BQkxFLCBUUlVFKTsKICAgICAgICAgfQpAQCAtMTk2MCwyNiArMTk5OSwyNiBAQCBib29s
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgaWYgKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQogICAgIHsKICAgICAgICAgUHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgICAgIFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAK
LSAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFt
QmluYXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOwogICAgICAgICBHTGZsb2F0IHh5
WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgLTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9Owot
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5
KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAx
LCB4eSk7CiAKLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcg
Z2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLiBUaGUgYXBwcm9hY2ggZGVw
ZW5kcyBvbiBTaGFkZXIgTW9kZWwgMy4wIHN1cHBvcnQuCi0gICAgICAgIEdMaW50IGNvb3JkID0g
cHJvZ3JhbU9iamVjdC0+Z2V0RHhDb29yZExvY2F0aW9uKCk7Ci0gICAgICAgIGZsb2F0IGggPSBt
U3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgOiBtU3RhdGUu
dmlld3BvcnRIZWlnaHQgLyAyLjBmOwotICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRl
LnZpZXdwb3J0V2lkdGggLyAyLjBmLCBoLCAKKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1
c2VkIGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygp
LgorICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlv
bigpOworICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAy
LjBmLCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIu
MGYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSAr
IG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZXRVbmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5KTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CiAKLSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9n
cmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgZGVwdGggPSBw
cm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCBkelsy
XSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07Ci0gICAg
ICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKKyAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwogCi0gICAgICAgIEdM
aW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFtT2JqZWN0LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigp
OworICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aFJh
bmdlTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlmZlszXSA9IHt6TmVhciwg
ekZhciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTNm
dihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwogICAgICAgICBtRHhVbmlm
b3Jtc0RpcnR5ID0gZmFsc2U7CiAgICAgfQogCkBAIC0xOTkwLDE4ICsyMDI5LDE3IEBAIGJvb2wg
Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KIHZvaWQgQ29udGV4dDo6YXBwbHlT
dGF0ZShHTGVudW0gZHJhd01vZGUpCiB7CiAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAogICAgIEZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogCi0gICAgR0xlbnVtIGFkanVz
dGVkRnJvbnRGYWNlID0gYWRqdXN0V2luZGluZyhtU3RhdGUuZnJvbnRGYWNlKTsKLQotICAgIEdM
aW50IGZyb250Q0NXID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0g
ICAgR0xpbnQgY2N3ID0gKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyk7Ci0gICAgcHJvZ3Jh
bU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7CisgICAgR0xpbnQgZnJv
bnRDQ1cgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKKyAgICBHTGlu
dCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOworICAgIHByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOwogCi0gICAgR0xpbnQgcG9pbnRzT3JM
aW5lcyA9IHByb2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7CisgICAg
R0xpbnQgcG9pbnRzT3JMaW5lcyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uKCk7CiAgICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01v
ZGUpOwotICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwg
JmFsd2F5c0Zyb250KTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09y
TGluZXMsIDEsICZhbHdheXNGcm9udCk7CiAKICAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICpp
ZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CiAgICAgYm9vbCB6
ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsKQEAg
LTIwMTUsNyArMjA1Myw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01v
ZGUKICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29u
dmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgYWRqdXN0ZWRGcm9udEZhY2UpKTsKKyAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29u
dmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMjExNSwzMiArMjE1MywzMiBAQCB2b2lk
IENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKICAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0gKDEgPDwgc3RlbmNpbGJ1
ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwogCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJ
VEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVt
YXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRG
YWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5D
LCAKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJ
VEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxG
VU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwog
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3Rh
dGUuc3RlbmNpbFJlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDog
bWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3Rl
ZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVO
Q0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6
IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3Rl
bmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19T
VEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsK
IAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAor
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBH
TF9DQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1T
dGF0ZS5zdGVuY2lsRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNf
Q0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMWkZBSUwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0ND
VyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8g
RDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aFBhc3MpKTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDog
RDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ss
IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZVTkMg
OiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOwog
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0
ZS5zdGVuY2lsQmFja1JlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsQmFj
a1JlZiA6IG1heFN0ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0ND
V19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RF
TkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwg
KEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7
CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0
ZS5zdGVuY2lsQmFja01hc2spOwogCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNf
Q0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19T
VEVOQ0lMRkFJTCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpD
b252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RF
TkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFj
a1Bhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFk
anVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1df
U1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5D
SUxQQVNTLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZl
cnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKQEAgLTIyODAsMTggKzIzMTgsMjAgQEAgR0xlbnVtIENvbnRleHQ6OmFw
cGx5SW5kZXhCdWZmZXIoY29uc3QgRwogdm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQogewog
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7CisKICAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQ
cm9ncmFtU2VyaWFsKQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVy
dGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAgIElE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRQaXhl
bFNoYWRlcigpOworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7
CiAKICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwogICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0
eUFsbFVuaWZvcm1zKCk7CiAgICAgICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1P
YmplY3QtPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHByb2dyYW1PYmplY3QtPmFwcGx5VW5p
Zm9ybXMoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKIC8vIEFw
cGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBk
ZXZpY2UKQEAgLTIzMTEsMzAgKzIzNTEsMzIgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KCkKIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQogewogICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7CiAKICAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5
cGUKICAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0gKHR5cGUgPT0gU0FN
UExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBsaWVkVGV4dHVyZVNl
cmlhbFZTOwogICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0gU0FNUExFUl9QSVhF
TCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBzYW1wbGVyUmFuZ2Ug
PSBwcm9ncmFtT2JqZWN0LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGludCBzYW1w
bGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwogCiAg
ICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJhbmdl
OyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dy
YW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8gT3Bl
bkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBw
cm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8v
IE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKICAgICAgICAgaW50IGQzZFNhbXBsZXIg
PSBzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0OwogCiAgICAgICAgIGlmICh0ZXh0dXJl
VW5pdCAhPSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5
cGUgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlcklu
ZGV4KTsKKyAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CiAKICAgICAgICAg
ICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4
dHVyZVR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKTsKIAotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIHx8IHRleHR1
cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCisg
ICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhT
ZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkgfHwgdGV4dHVyZS0+aGFzRGly
dHlJbWFnZXMoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlKCk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoZDNkVGV4dHVyZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUt
PmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0g
IT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpKQogICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0
dXJlLT5nZXRXcmFwUygpOwogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0g
dGV4dHVyZS0+Z2V0V3JhcFQoKTsKQEAgLTIzNTEsNyArMjM5Myw3IEBAIHZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlw
RmlsdGVyKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1
cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwg
fHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RU
ZXh0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM2MSw3ICsyNDAzLDcgQEAgdm9p
ZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIAogICAgICAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGdldEluY29tcGxldGVUZXh0dXJlKHRl
eHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gdGV4dHVyZS0+Z2V0
VGV4dHVyZVNlcmlhbCgpOworICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7CiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXRE
aXJ0eSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDI5LDcgKzI0NzEsNyBAQCB2
b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAKICAgICBIUkVTVUxUIHJl
c3VsdDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAg
Ym9vbCBkaXJlY3RUb1BpeGVscyA9IGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNr
QWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgorICAgIGJv
b2wgZGlyZWN0VG9QaXhlbHMgPSAhZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tB
bGlnbm1lbnQoKSA8PSA0ICYmIG1EaXNwbGF5LT5pc0QzZDlFeERldmljZSgpICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVz
Yy5XaWR0aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBH
TF9CR1JBX0VYVCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7CiAgICAgaWYgKGRpcmVjdFRv
UGl4ZWxzKQpAQCAtMjQ1MSw2ICsyNDkzLDcgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdM
aW50IHgsIEdMaW50IAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNDgxLDEzICsyNTI0LDEzIEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEQzRExPQ0tF
RF9SRUNUIGxvY2s7Ci0gICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGRlc2MuSGVpZ2h0KTsKLSAgICByZWN0LmxlZnQgPSBjbGFtcChyZWN0Lmxl
ZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC50b3AgPSBj
bGFtcChyZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0gICAg
cmVjdC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNj
LldpZHRoKSk7Ci0gICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0LmJvdHRvbSwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7CisgICAgUkVDVCByZWN0OworICAgIHJlY3QubGVm
dCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7CisgICAgcmVj
dC50b3AgPSBjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKKyAg
ICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVz
Yy5XaWR0aCkpOworICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7CiAKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrOwog
ICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9D
S19SRUFET05MWSk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0yNTA1LDEzICsyNTQ4
LDEzIEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCAKICAgICBpbnQg
aW5wdXRQaXRjaDsKICAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpKQogICAgIHsKLSAg
ICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Ci0gICAgICAgIGlucHV0
UGl0Y2ggPSBsb2NrLlBpdGNoOworICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxv
Y2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Cisg
ICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKICAgICB9CiAgICAgZWxzZQogICAgIHsK
LSAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxvY2suUGl0
Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwotICAgICAgICBpbnB1dFBpdGNoID0g
LWxvY2suUGl0Y2g7CisgICAgICAgIHNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRz
OworICAgICAgICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsKICAgICB9CiAKICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGorKykKQEAgLTI3MzgsNiArMjc4
MSw3IEBAIHZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKICAgICAgICAgICAgIGRlcHRoU3Rl
bmNpbC0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKIAogICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6OkdldFN0
ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKICAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgw
eDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKQEAgLTI5NTIsNyArMjk5Niw3IEBAIHZvaWQgQ29udGV4
dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKICAgICBhcHBseVNoYWRlcnMoKTsKICAgICBh
cHBseVRleHR1cmVzKCk7CiAKLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRl
U2FtcGxlcnMoZmFsc2UpKQorICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zMDQyLDcgKzMwODYsNyBA
QCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgYXBwbHlTaGFk
ZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJlcygpOwogCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3Jh
bSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFt
KCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCiAgICAgewog
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KQEAgLTM0
NTIsNiArMzQ5NiwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0
CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CiB9CiAKK2Jvb2wg
Q29udGV4dDo6c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1
cHBvcnRzRGVwdGhUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5k
aWNlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKQEAgLTM2
NzcsNiArMzcyNiw3IEBAIHZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAgICAg
fQogCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
ICI7CisgICAgLy9tRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5
ICI7CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKIApAQCAt
MzcyMCw2ICszNzcwLDExIEBAIHZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwogCiAgICAg
Ly8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVy
ZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRo
X3RleHR1cmUgIjsKKyAgICB9CisKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0ICI7CiAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAw
KQogICAgIHsKQEAgLTM4MjAsMTcgKzM4NzUsMTcgQEAgdm9pZCBDb250ZXh0OjpibGl0RnJhbWVi
dWZmZXIoR0xpbnQgc3JjWAogCiAgICAgaWYgKHNyY1kwIDwgc3JjWTEpCiAgICAgewotICAgICAg
ICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAgICAgZGVz
dFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0
LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90
dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOworICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHNyY1kxOworICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsKKyAgICAgICAgc291
cmNlUmVjdC50b3AgPSBzcmNZMDsKKyAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7CiAgICAg
fQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0gcmVhZEJ1ZmZlckhl
aWdodCAtIHNyY1kwOwotICAgICAgICBkZXN0UmVjdC50b3AgPSBkcmF3QnVmZmVySGVpZ2h0IC0g
ZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gcmVhZEJ1ZmZlckhlaWdodCAtIHNy
Y1kxOwotICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVpZ2h0IC0gZHN0WTE7
CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LmJv
dHRvbSA9IGRzdFkwOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kxOworICAgICAgICBk
ZXN0UmVjdC50b3AgPSBkc3RZMTsKICAgICB9CiAKICAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJl
Y3QgPSBzb3VyY2VSZWN0OwpAQCAtNDA0Myw3ICs0MDk4LDEzIEBAIHZvaWQgQ29udGV4dDo6Ymxp
dEZyYW1lYnVmZmVyKEdMaW50IHNyY1gKIAogICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkK
ICAgICAgICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNo
UmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBkcmF3RnJhbWVi
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdE
ZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworCisgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0
ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAg
ICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRyYXdE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKIAogICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQogICAgICAgICAgICAgewpAQCAtNDExNSw2ICs0MTc2LDggQEAgR0xlbnVtIFZlcnRleERlY2xh
cmF0aW9uQ2FjaGU6OmFwcGx5RGVjbAogICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01B
WF9WRVJURVhfQVRUUklCUyArIDFdOwogICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0g
JmVsZW1lbnRzWzBdOwogCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewogICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3Rp
dmUpCkBAIC00MTcwLDcgKzQyMzMsNyBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6
YXBwbHlEZWNsCiAgICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBl
OwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwog
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Ci0gICAg
ICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChp
KTsKKyAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRT
ZW1hbnRpY0luZGV4KGkpOwogICAgICAgICAgICAgZWxlbWVudCsrOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250
ZXh0LmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgY2xh
c3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQogICBwcml2YXRlOgogICAgIFVJTlQgbU1heExydTsK
IAotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDE2IH07CisgICAg
ZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTID0gMzIgfTsKIAogICAgIHN0cnVj
dCBWQkRhdGEKICAgICB7CkBAIC0yODEsNyArMjgxLDggQEAgY2xhc3MgQ29udGV4dAogCiAgICAg
dm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7CiAKLSAgICB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdmlydHVhbCB2b2lk
IG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgYm9vbCBpc0NvbnRleHRM
b3N0KCk7CkBAIC00OTUsNiArNDk2LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9y
dHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhh
VGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBv
cnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5n
KCkgY29uc3Q7CkBAIC02MTcsNiArNjE5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWlu
YW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsK
KyAgICBib29sIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJp
dEluZGljZXM7CiAgICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjksNiArMjksNyBA
QCBGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKICAgICBtU3RlbmNp
bGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVm
ZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25zdApAQCAtMTI4LDYgKzEyOSw4IEBA
IHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2UKICAgICByZXR1cm4gMDsK
IH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVi
dWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CkBAIC0xNDAsNiArMTQzLDggQEAgSURpcmVj
dDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZQogICAgIHJldHVybiBOVUxMOwogfQog
CisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1
ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CkBAIC0xOTYsNiArMjAxLDMwIEBAIFJl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWYKICAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXJQb2ludGVyLmdldCgpOwogfQogCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXROdWxsQ29sb3JidWZmZXIoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKKworICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgewor
ICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBG
Qk8uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGgg
ID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoIW51bGxidWZmZXIgfHwKKyAgICAgICAgd2lk
dGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCisgICAgeworICAgICAgICBudWxsYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigw
LCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgR0xfTk9ORSwgMCkpOworICAgICAgICBt
TnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxidWZmZXI7Cit9CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJU
eXBlKCkKIHsKICAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKQEAgLTI0Myw5ICsyNzIsMTEg
QEAgYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6
Y29tcGxldGVuZXNzKCkKIHsKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKICAgICBpbnQg
c2FtcGxlcyA9IC0xOworICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQgPSB0cnVlOwogCiAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7CkBAIC0yNzAsMzEgKzMwMSwz
OCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29s
b3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNk
Zm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAorICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ID09IEdMX0FMUEhBIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFX0FMUEhBKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKSkgJiYg
IWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKCkpIHx8IAot
ICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGNvbG9yYnVmZmVyLT5nZXRE
M0RGb3JtYXQoKSkgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRl
eHR1cmVzKCkpKQorICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZv
cm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8
fAorICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYg
IWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29sb3JidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgaWYgKGR4MmVzOjpJc0Rl
cHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9y
bWF0KGQzZGZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CiAKICAgICAgICAgd2lkdGggPSBj
b2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdl
dEhlaWdodCgpOwogICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9
IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOwpA
QCAtMzAyLDExICszNDAsNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAK
ICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgaWYg
KG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7ICAgLy8gUmVxdWlyZXMgR0xf
T0VTX2RlcHRoX3RleHR1cmUKLSAgICAgICAgfQotCiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0
RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBpZiAoIWRlcHRoYnVmZmVyKQpAQCAtMzE5LDE5ICsz
NTIsNDQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gZGVwdGhi
dWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUzsKKyAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+
Z2V0RDNERm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1cmUgYXR0YWNobWVu
dHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChk
M2Rmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICBpZiAobWlzc2lu
Z0F0dGFjaG1lbnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAg
ICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBl
bHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsK
QEAgLTM0MSwxMSArMzk5LDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQog
CiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAg
aWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgfQot
CiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKICAgICAgICAg
aWYgKCFzdGVuY2lsYnVmZmVyKQpAQCAtMzU4LDE5ICs0MTEsNDUgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA9PSAw
KQorICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAg
ICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8
fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7
CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNE
Rm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBj
b21lIGFsb25nIGFzIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNk
Zm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdB
dHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXIt
PmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWln
aHQoKTsKICAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7
CisgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0
ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQog
ICAgICAgICB7CkBAIC0zNzgsMTQgKzQ1NywxNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBs
ZXRlbmVzcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRo
ZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1
cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwgYW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3Rl
bmNpbAorICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZl
ciAhPSBzdGVuY2lsYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAg
ICAgc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUyB8fAotICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5j
aWxidWZmZXItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIH0KKworICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBh
dCBsZWFzdCBvbmUgYXR0YWNobWVudCB0byBiZSBjb21wbGV0ZQorICAgIGlmIChtaXNzaW5nQXR0
YWNobWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEU7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5kZXJidWZmZXIgKmdldENv
bG9yYnVmZmVyKCk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwogICAgIFJl
bmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVs
bENvbG9yYnVmZmVyKCk7CiAKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7CiAgICAg
R0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOwpAQCAtNzMsNiArNzQsOCBAQCBjbGFzcyBGcmFt
ZWJ1ZmZlcgogICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7CiAgICAgQmluZGluZ1BvaW50
ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7CiAKKyAgICBCaW5kaW5nUG9p
bnRlcjxSZW5kZXJidWZmZXI+IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyOworCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsNyBAQAogLy8gYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2Ug
MjguCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIApAQCAtMTcs
MjI2MSArMTgsODUgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmICFkZWZpbmVkKEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKLSNlbmRpZgotCiBu
YW1lc3BhY2UgZ2wKIHsKLXVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7
Ci1jb25zdCBjaGFyICpmYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwotCi1zdGQ6OnN0cmluZyBz
dHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAi
JWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUp
Ci0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0
ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMg
PSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcg
dW5zaWduZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBk
aXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBk
YXRhOwotfQotCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5j
b21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1
bnNpZ25lZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9y
bShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3Jh
bTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbVJl
c291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlzc3VlU2Vy
aWFsKCkpCi17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotICAgIG1GcmFnbWVudFNoYWRl
ciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0KLSAgICBtUGl4ZWxFeGVjdXRh
YmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUNvbnN0YW50
VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7Ci0KLSAgICBtSW5m
b0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgdW5saW5rKCk7Ci0K
LSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Q
cm9ncmFtOjp+UHJvZ3JhbSgpCi17Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0
ZXhTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2Uo
KTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAg
ICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5
cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5
cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50
U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hh
ZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9W
RVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBO
VUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVO
VF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK2NvbnN0IGNoYXIgKiBjb25z
dCBnX2Zha2VwYXRoID0gIkM6XFxmYWtlcGF0aCI7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOwot
fQordW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKIAotSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCitBdHRyaWJ1dGVCaW5kaW5n
czo6QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwog
fQogCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQor
QXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCiB7Ci0gICAgcmV0dXJuIG1W
ZXJ0ZXhFeGVjdXRhYmxlOwogfQogCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlv
bihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCitJbmZvTG9nOjpJbmZvTG9nKCkgOiBt
SW5mb0xvZyhOVUxMKQogewotICAgIGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKLSAg
ICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChu
YW1lKTsKLSAgICB9CiB9CiAKLUdMdWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihj
b25zdCBjaGFyICpuYW1lKQorSW5mb0xvZzo6fkluZm9Mb2coKQogewotICAgIGlmIChuYW1lKQot
ICAgIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgaW5kZXgrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1
dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIC0xOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCi1pbnQgUHJv
Z3JhbTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCi17Ci0gICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlMpOwotICAgIAotICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07Ci19
CiAKLS8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGluZGV4IHVz
ZWQuCi1HTGludCBQcm9ncmFtOjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUp
CitpbnQgSW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgaWYgKCFtSW5mb0xvZykKICAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAg
ICAgIHJldHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZF
UlRFWDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
fQotCi0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5
KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGlu
dCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBp
bnQgc2FtcGxlckluZGV4KQotewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOwot
Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAg
ICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1T
YW1wbGVyc1BTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChz
YW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkp
OwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChsb2dpY2FsVGV4
dHVyZVVuaXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0K
LS8vIFJldHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBs
ZXIgdHlwZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMg
Zm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW06OmdldFNhbXBsZXJU
ZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQot
ewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0g
ICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZiht
U2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VSVChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOwot
ICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAg
ICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRVUkVfMkQ7Ci19
Ci0KLUdMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQot
ewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOwotCi0gICAgLy8gU3RyaXAgYW55IHRy
YWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6
ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5h
bWUuZmluZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3Mg
JiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQg
PSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFz
ZShvcGVuKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9y
bUluZGV4LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0
aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwot
fQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAg
dGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAg
ICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAg
ICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAg
ICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwogICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIEluZm9Mb2c6OmdldExvZyhHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfRkxPQVRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA0OworICAgIGludCBpbmRleCA9IDA7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBd
OwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9
IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9
IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7
Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAg
aWYgKG1JbmZvTG9nKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7
CisgICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKICAgICAgICAg
fQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
ZmxvYXQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3Vu
dCk7CisgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwogCi0gICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltp
XSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNy
Y0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCi17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNX
aWR0aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hl
aWdodCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBz
cmNXaWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJp
Z2h0IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZv
ciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0
ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdl
dCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0
cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAg
ICAgICB2YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wg
UHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5
ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0
YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAx
NjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlm
b3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfQ1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAg
ICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIs
Ci0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihH
TGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAg
ICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRV
bmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFt
cykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQg
YnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAg
aW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5
cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUlu
dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAu
MGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAg
ICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50
ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlm
b3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZl
ciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCBy
ZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJn
ZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAg
ICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwz
LDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9
IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5
cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yo
R0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAg
IHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ly8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCi17
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
QmxvYiAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNo
YXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAg
aWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdP
UkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRl
eHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENP
TVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElM
RV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJj
ZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmco
IiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6
OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291
cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwot
ICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5h
cnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVz
dWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGZha2VwYXRoLCBOVUxMLCBOVUxM
LCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLQot
ICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNzYWdl
ID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAg
ICAgIGFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxu
JXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBl
cnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRT
aGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNl
KCk7Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsK
LX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1
c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAg
cmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51
bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50
IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0g
ICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFy
eWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQo
dmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxl
Q29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYm
ICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFp
bGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYm
IGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
ID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4Kysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9
IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2
YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
ciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFj
a2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4
XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3Rv
cnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFj
a2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5n
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5h
bWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJl
Z2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3Jz
OyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFd
IHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJz
OwotfQotCi1ib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1QaXhlbEhM
U0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2ln
bm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IG1GcmFnbWVu
dFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gbUZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9
IC0xOwotICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgdnR4VmFyICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4VmFyKyspCi0g
ICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXItPmNvbCA9IC0x
OwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUK
LSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zXVs0XSA9
IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0g
ICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBj
b250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5n
VmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJl
Z2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0g
bUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gbUZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNo
ZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQg
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0g
aW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhh
dCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91
dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5n
IiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMg
PyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZT
X0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJ
bmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
bVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VDogICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0
ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAg
ICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsK
LSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9u
IDogUE9TSVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIr
KykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6
IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAg
ICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiAr
IHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0g
ICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAg
ICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAh
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewot
ICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1
dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xu
IjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUu
eCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3Np
dGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnog
PSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQot
ICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAg
ICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChnbF9Q
b2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhf
U00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0Zy
YWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcg
KyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVn
aXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBt
VmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVydGV4SExTTCArPSAidyI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2
YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJb
IiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVZlcnRl
eEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIK
LSAgICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQ
U19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZh
cnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsg
aisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
biA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVn
aXN0ZXJzKSArICI7XG4iOwotICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAg
ewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhD
T09SRDA7XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRG
YWNpbmcpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBW
RkFDRTtcbiI7Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29s
b3JbMV0gOiBDT0xPUjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlu
cHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBm
bG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZC55IGNvbnRh
aW5zIHRoZSByZW5kZXIgdGFyZ2V0IGhlaWdodC4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KCkKLSAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlu
cHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IGR4X0Nvb3JkLnkgLSBpbnB1dC5keF9WUG9zLnkgLSAwLjU7XG4iOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29v
cmQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQg
Y2VudGVyLnkuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLngg
KiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAtKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3
KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlm
IChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGlucHV0LmdsX1BvaW50Q29vcmQ7
XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Q
b2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlu
cHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZh
cnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0
cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIK
LSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIExp
bmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNo
aW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywg
ZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEg
bGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoKTsK
LQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGls
ZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhT
aGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNM
KCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBp
ZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4
UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2
c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAq
dmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRl
eFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFy
eSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVy
dGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCks
ICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4UmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHBp
eGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4
UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5h
cnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
dmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxp
bmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZv
cm1zKG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJl
IHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KLSAgICAg
ICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0
aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAgICAgICAgICBtRHhEZXB0aExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOwotICAgICAgICAgICAgbUR4
Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKLSAgICAgICAg
ICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFs
ZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOwotCi0gICAg
ICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBE
aXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtOjpsaW5r
QXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0g
ICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0
QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlv
biAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0
ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7
Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0
aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0
cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9u
cyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9j
YXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxv
Y2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9u
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVG
aXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwot
Ci0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXgg
KyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0
dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRl
ci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1l
KTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5k
ZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRp
b24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAo
bUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRp
bmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRp
b247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKLXsKLSAg
ICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKLSAgICBE
M0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQgZGVzY3JpcHRp
b25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxl
RGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7
IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25z
dGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0g
Y29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFu
ZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShj
b25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBi
aW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW06OmRl
ZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQotewot
ICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVS
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRDNE
WEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUo
TlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUg
dnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNv
bnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQ
U1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9
PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3Rk
OjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291
bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZz
Q29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50
KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgp
LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0
dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXgg
KyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiVmVydGV4IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBj
YXNlIEQzRFhQQ19TVFJVQ1Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50czsgYXJyYXlJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVj
dE1lbWJlcnM7IGZpZWxkKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQo
Y29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2Ny
aXB0aW9uQ291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0
cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBz
dHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0g
ICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1O
UzoKLSAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZv
cm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZf
bmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERl
c2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAg
ICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAg
ICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkK
LSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyh1bmlmb3JtLCAmdW5pZm9ybS0+cHMsIG1Db25zdGFu
dFRhYmxlUFMpOwotICAgIGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZv
cm0tPnZzLCBtQ29uc3RhbnRUYWJsZVZTKTsKLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5p
Zm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkg
LSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNp
emU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1M
b2NhdGlvbihfbmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVVuaWZvcm0gKlByb2dyYW06OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkK
LXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBh
bmQgc2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9CT09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZM
T0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9B
VF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0g
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
RkxPQVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0
byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3Jh
dGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUuY29t
cGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDAp
Ci0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBpZiAoX25hbWVbMF0gPT0gJ18nKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIF9uYW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
X25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBf
bmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfbmFtZTsKLX0KLQotdm9p
ZCBQcm9ncmFtOjphcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVj
dG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltE
M0Q5X01BWF9CT09MX0NPTlNUQU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxP
QVQ0IHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChqIDwgd2lkdGgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0
b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAx
LjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCAmJiB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNf
Qk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNl
dCA9PSBEM0RYUlNfQk9PTCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwot
ICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgo
cHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFY
X0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xf
RkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
clNldCA9PSBEM0RYUlNfRkxPQVQ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCB2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09M
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
Qih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHZlY3RvciwgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+
cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwot
ICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsK
LSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1Q
TEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9y
bS0+cHMucmVnaXN0ZXJJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJ
bmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBm
aXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
LSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFd
LCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2
KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5
X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9h
dCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAg
IGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAg
ICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0s
IGNvdW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9h
dCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisgICAgaWYgKGxlbmd0aCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlclNldCA9PSBE
M0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3Rvciwg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICpsZW5ndGggPSBpbmRl
eDsKICAgICB9CiB9CiAKIC8vIGFwcGVuZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhlIHByb2dy
YW0gaW5mbyBsb2cuCiAvLyBUaGUgRDNEIGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBmaWxlIHBh
dGggaW4gc29tZSBvZiB0aGUgd2FybmluZyBvciBlcnJvciAKIC8vIG1lc3NhZ2VzLCBzbyBsZXRz
IHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9tIHRoZSBs
b2cuCi12b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZ1Nhbml0aXplZChjb25zdCBjaGFyICpt
ZXNzYWdlKQordm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2Fn
ZSkKIHsKICAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7CiAKICAgICBzaXplX3QgZm91bmQ7
CiAgICAgZG8KICAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZmFrZXBhdGgpOworICAg
ICAgICBmb3VuZCA9IG1zZy5maW5kKGdfZmFrZXBhdGgpOwogICAgICAgICBpZiAoZm91bmQgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1zZy5lcmFzZShmb3Vu
ZCwgc3RybGVuKGZha2VwYXRoKSk7CisgICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxl
bihnX2Zha2VwYXRoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKGZvdW5kICE9IHN0
ZDo6c3RyaW5nOjpucG9zKTsKIAotICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1zZy5jX3N0
cigpKTsKKyAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7CiB9CiAKLXZvaWQgUHJvZ3Jh
bTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQordm9pZCBJbmZvTG9n
OjphcHBlbmQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgaWYgKCFmb3JtYXQpCiAg
ICAgewpAQCAtMjMwNCw3ICsxMjksNyBAQCB2b2lkIFByb2dyYW06OmFwcGVuZFRvSW5mb0xvZyhj
b25zdCBjaGFyCiAgICAgfQogfQogCi12b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCit2b2lk
IEluZm9Mb2c6OnJlc2V0KCkKIHsKICAgICBpZiAobUluZm9Mb2cpCiAgICAgewpAQCAtMjMxMyw5
OSArMTM4LDE3MCBAQCB2b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCiAgICAgfQogfQogCi0v
LyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3Jl
IHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dyYW06OnVubGluayhib29s
IGRlc3Ryb3kpCitQcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1
aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSks
IG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKIHsKLSAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3Qg
YmVpbmcgZGVzdHJ1Y3RlZAotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwotICAgICAgICB9CisgICAgbUZyYWdtZW50U2hh
ZGVyID0gTlVMTDsKKyAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtUHJvZ3JhbUJpbmFy
eSA9IE5VTEw7CisgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOworICAgIG1SZWZDb3VudCA9IDA7
Cit9CiAKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBO
VUxMOwotICAgICAgICB9Ci0gICAgfQorUHJvZ3JhbTo6flByb2dyYW0oKQoreworICAgIHVubGlu
ayh0cnVlKTsKIAotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAgIGlmIChtVmVydGV4U2hh
ZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgICAgICBtVmVydGV4U2hhZGVy
LT5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAgIGlm
IChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAg
ICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgfQorfQogCi0gICAgaWYgKG1Db25z
dGFudFRhYmxlUFMpCitib29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikK
K3sKKyAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKLSAgICAgICAgbUNvbnN0YW50
VGFibGVQUyA9IE5VTEw7Ci0gICAgfQorICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKLSAgICBpZiAobUNv
bnN0YW50VGFibGVWUykKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNo
YWRlcjsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+YWRkUmVmKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7Ci0gICAg
ICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKLSAgICAgICAgbUNvbnN0YW50VGFibGVW
UyA9IE5VTEw7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRl
ciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmFk
ZFJlZigpOwogICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGluZGV4KyspCitib29sIFByb2dyYW06OmRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikK
K3sKKyAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7
Ci0gICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUuY2xlYXIoKTsKLSAgICAgICAg
bVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7Ci0gICAgfQorICAgICAgICBpZiAobVZlcnRleFNo
YWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTOyBpbmRleCsrKQorICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Cisg
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXIt
PmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBtU2FtcGxl
cnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIg
IT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKKyAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gTlVMTDsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2ludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVu
dFNoYWRlciA/IDEgOiAwKTsKK30KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQordm9pZCBBdHRyaWJ1
dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hh
ciAqbmFtZSkKK3sKKyAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgewot
ICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOworICAgICAgICB9CisKKyAg
ICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsKICAgICB9Cit9CisK
K3ZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKyAgICBtQXR0cmlidXRlQmluZGluZ3MuYmluZEF0dHJpYnV0ZUxvY2F0
aW9uKGluZGV4LCBuYW1lKTsKK30KKworLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVy
dGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCisvLyBj
b21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1h
cHBpbmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBsaXN0IG9mIHVuaWZvcm1zCit2b2lkIFByb2dy
YW06OmxpbmsoKQoreworICAgIHVubGluayhmYWxzZSk7CiAKLSAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7CisgICAgbUluZm9M
b2cucmVzZXQoKTsKIAotICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCisgICAgbVByb2dy
YW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsKKyAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5LT5s
aW5rKG1JbmZvTG9nLCBtQXR0cmlidXRlQmluZGluZ3MsIG1GcmFnbWVudFNoYWRlciwgbVZlcnRl
eFNoYWRlcikpCiAgICAgewotICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKLSAgICAg
ICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgICAgIHVubGluayhmYWxzZSk7CiAgICAgfQor
fQogCi0gICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RGVwdGhMb2NhdGlv
biA9IC0xOwotICAgIG1EeENvb3JkTG9jYXRpb24gPSAtMTsKLSAgICBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb24gPSAtMTsKLSAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7Ci0gICAgbUR4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7CitpbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJp
YnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0Cit7CisgICAgZm9yIChp
bnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24r
KykKKyAgICB7CisgICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChu
YW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG1Vbmlm
b3JtSW5kZXguY2xlYXIoKTsKKyAgICByZXR1cm4gLTE7Cit9CiAKLSAgICBtUGl4ZWxITFNMLmNs
ZWFyKCk7Ci0gICAgbVZlcnRleEhMU0wuY2xlYXIoKTsKKy8vIFJldHVybnMgdGhlIHByb2dyYW0g
b2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVz
dHJ1Y3Rpb24KK3ZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKK3sKKyAgICBpZiAo
ZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcgZGVzdHJ1Y3RlZAorICAgIHsKKyAgICAgICAgaWYg
KG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOworICAgICAg
ICB9CiAKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAg
ICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4U2hh
ZGVyLT5yZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAg
ICAgfQorICAgIH0KIAotICAgIG1MaW5rZWQgPSBmYWxzZTsKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCisgICAgeworICAgICAgICBkZWxldGUgbVByb2dyYW1CaW5hcnk7CisgICAgICAgIG1Qcm9n
cmFtQmluYXJ5ID0gTlVMTDsKKyAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQor
UHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgcmV0dXJu
IG1MaW5rZWQ7CisgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwogfQogCi1ib29sIFByb2dyYW06
OmlzVmFsaWRhdGVkKCkgY29uc3QgCit2b2lkIFByb2dyYW06OnNldFByb2dyYW1CaW5hcnkoUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICByZXR1cm4gbVZhbGlkYXRlZDsKKyAg
ICB1bmxpbmsoZmFsc2UpOworICAgIG1Qcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbUJpbmFyeTsKIH0K
IAogdm9pZCBQcm9ncmFtOjpyZWxlYXNlKCkKQEAgLTI0NDAsMzUgKzMzNiwxMiBAQCB1bnNpZ25l
ZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQogCiBpbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xl
bmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9M
b2cpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmdldExlbmd0aCgpOwogfQogCiB2
b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChtSW5mb0xv
ZykKLSAgICB7Ci0gICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3Ry
bGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgp
OwotICAgIH0KLQotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW5mb0xvZ1tpbmRl
eF0gPSAnXDAnOwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAgewotICAgICAgICAqbGVu
Z3RoID0gaW5kZXg7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMb2coYnVmU2l6ZSwg
bGVuZ3RoLCBpbmZvTG9nKTsKIH0KIAogdm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMo
R0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKQEAgLTI1
MDMsMTUyICszNzYsOTYgQEAgdm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXpl
aQogCiB2b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBH
TGNoYXIgKm5hbWUpCiB7Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKLSAg
ICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYXR0
cmlidXRlOwotICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAg
ICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0
aXZlQXR0cmlidXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOworICAgICAgICBtUHJvZ3JhbUJp
bmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5
cGUsIG5hbWUpOwogICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKKyAgICBlbHNlCiAgICAg
ewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXpl
KTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCisgICAgICAgIGlmIChidWZz
aXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
ICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAg
ICAgfQotICAgIH0KIAotICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUn
IGluc3RhbmNlCi0KLSAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBl
OworICAgICAgICAqdHlwZSA9IEdMX05PTkU7CisgICAgICAgICpzaXplID0gMTsKKyAgICB9CiB9
CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKIHsKLSAgICBpbnQg
Y291bnQgPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICBpZiAobVBy
b2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmli
dXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsK
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJp
YnV0ZUNvdW50KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlTWF4TGVuZ3RoKCkKIHsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsK
LSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVu
Z3RoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2
ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCiB2b2lkIFByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQogewot
ICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3Rp
dmVVbmlmb3JtID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZv
cm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIGlmICht
UHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5h
bWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3Rp
dmVVbmlmb3JtKys7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKICAgICB9Ci0K
LSAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3Qg
YmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6
ZSA+IDApCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gbVVu
aWZvcm1zW3VuaWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0t
PmlzQXJyYXkoKSkKKyAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwot
ICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KICAgICAgICAgaWYgKGxlbmd0aCkK
ICAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICAgICAg
ICAgICpsZW5ndGggPSAwOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgKnNpemUgPSBtVW5pZm9y
bXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1d
LT50eXBlOworICAgICAgICAqc2l6ZSA9IDA7CisgICAgICAgICp0eXBlID0gR0xfTk9ORTsKKyAg
ICB9CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCiB7Ci0gICAg
aW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jt
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9y
bUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKICAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5j
b21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsr
OwotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
VW5pZm9ybU1heExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlm
b3JtSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAo
IW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZv
cm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1l
Lmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
PmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsg
IC8vIENvdW50aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICByZXR1cm4g
bWF4TGVuZ3RoOwogfQogCiB2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCkBAIC0yNjYz
LDE2MSArNDgwLDI4IEBAIGJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb24K
IAogdm9pZCBQcm9ncmFtOjp2YWxpZGF0ZSgpCiB7Ci0gICAgcmVzZXRJbmZvTG9nKCk7CisgICAg
bUluZm9Mb2cucmVzZXQoKTsKIAotICAgIGlmICghaXNMaW5rZWQoKSkgCisgICAgaWYgKG1Qcm9n
cmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQcm9ncmFtIGhhcyBu
b3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOwotICAgICAgICBtVmFsaWRhdGVkID0gZmFs
c2U7CisgICAgICAgIG1Qcm9ncmFtQmluYXJ5LT52YWxpZGF0ZShtSW5mb0xvZyk7CiAgICAgfQog
ICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGFwcGx5VW5pZm9ybXMoKTsKLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVNhbXBsZXJzKHRydWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmFsaWRhdGVk
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtVmFsaWRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFt
Ojp2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3JzKQotewotICAgIC8vIGlmIGFueSB0d28g
YWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQg
cmVmZXIgdG8gdGhlIHNhbWUKLSAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlz
IHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5k
Ci0gICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFM
SURfT1BFUkFUSU9OIGVycm9yLgotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKCk7Ci0gICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQotICAg
IHsKLSAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOwotICAgIH0K
LQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dp
Y2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49IG1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3Vu
aXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0
dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBp
ZiAobVNhbXBsZXJzVlNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVy
IHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICgl
ZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJl
VHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAobG9nRXJyb3JzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZsaWN0
aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVu
aXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
PSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgICAgICBtSW5mb0xvZy5hcHBlbmQoIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxs
eSBsaW5rZWQuIik7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUHJvZ3Jh
bTo6aW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlm
b3JtOjpSZWdpc3RlckluZm8gKnJpLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUp
Citib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKIHsKLSAgICBEM0RYSEFORExFIGhh
bmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0t
Pl9uYW1lLmNfc3RyKCkpOwotICAgIGlmIChoYW5kbGUpCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQogICAgIHsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgRDNE
WENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoaGFuZGxlLCAmY29uc3RhbnREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICByaS0+cmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24u
UmVnaXN0ZXJJbmRleDsKLSAgICAgICAgcmktPnJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2Ny
aXB0aW9uLlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIHJpLT5yZWdpc3RlclNldCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQ7CisgICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+
aXNWYWxpZGF0ZWQoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcmktPnJlZ2lz
dGVyQ291bnQgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1HTGludCBQ
cm9ncmFtOjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
eERlcHRoUmFuZ2VMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKLX0KLQotR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4Q29v
cmRMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRp
b24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci19Ci0K
LUdMaW50IFByb2dyYW06OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4UG9pbnRz
T3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uOwotfQotCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KIAogI2luY2x1ZGUgPGQzZHg5Lmg+
Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
dmVjdG9yPgogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIK
QEAgLTI1LDQyICsyMywzNiBAQCBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBGcmFnbWVu
dFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIAotLy8gSGVscGVyIHN0cnVjdCByZXByZXNl
bnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5p
Zm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQot
ICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8v
IERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNv
cmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CitleHRlcm4gY29u
c3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGg7CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwot
ICAgIGJvb2wgZGlydHk7CitjbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncworeworICBwdWJsaWM6Cisg
ICAgQXR0cmlidXRlQmluZGluZ3MoKTsKKyAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKIAotICAg
IHN0cnVjdCBSZWdpc3RlckluZm8KLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNldDsKLSAg
ICAgICAgaW50IHJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIGludCByZWdpc3RlckNvdW50OwotICAg
IH07CisgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBj
aGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSkgY29uc3Q7CiAKLSAgICBSZWdpc3RlckluZm8gcHM7Ci0gICAgUmVnaXN0ZXJJbmZv
IHZzOworICBwcml2YXRlOgorICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmlu
ZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogfTsKIAotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJl
bGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0
cnVjdCBVbmlmb3JtTG9jYXRpb24KK2NsYXNzIEluZm9Mb2cKIHsKLSAgICBVbmlmb3JtTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWdu
ZWQgaW50IGluZGV4KTsKKyAgcHVibGljOgorICAgIEluZm9Mb2coKTsKKyAgICB+SW5mb0xvZygp
OworCisgICAgaW50IGdldExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0TG9nKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKIAotICAgIHN0ZDo6c3Ry
aW5nIG5hbWU7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50IGlu
ZGV4OworICAgIHZvaWQgYXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworICAg
IHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldCgpOwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmZvTG9nKTsKKyAgICBj
aGFyICptSW5mb0xvZzsKIH07CiAKIGNsYXNzIFByb2dyYW0KQEAgLTc0LDQ1ICs2NiwxMiBAQCBj
bGFzcyBQcm9ncmFtCiAgICAgYm9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwogICAg
IGludCBnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0OwogCi0gICAgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KmdldFZlcnRleFNoYWRlcigpOwotCiAgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9j
YXRpb24oY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0
dHJpYnV0ZUluZGV4KTsKLQotICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIFRleHR1cmVUeXBlIGdldFNh
bXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlcklu
ZGV4KTsKLSAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOwot
Ci0gICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOwotICAgIGJv
b2wgc2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0
VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7
Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRV
bmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0KLSAgICBib29sIGdldFVuaWZvcm1mdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKLSAgICBi
b29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQg
KnBhcmFtcyk7Ci0KLSAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Owot
ICAgIEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4Q29v
cmRMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7Ci0gICAg
R0xpbnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgZGly
dHlBbGxVbmlmb3JtcygpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOwogCiAgICAgdm9pZCBs
aW5rKCk7Ci0gICAgYm9vbCBpc0xpbmtlZCgpOworICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9n
cmFtQmluYXJ5KCk7CisKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZv
aWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZyk7CiAgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CkBAIC0xMzIsOTAgKzkxLDI0IEBAIGNsYXNz
IFByb2dyYW0KICAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKICAgICB2
b2lkIHZhbGlkYXRlKCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKGJvb2wgbG9nRXJyb3Jz
KTsKICAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1
dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUK
LSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKLSAgICBJRDNEMTBCbG9i
ICpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwg
SUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CiAgICAgdm9pZCB1bmxpbmsoYm9v
bCBkZXN0cm95ID0gZmFsc2UpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5n
ICpwYWNraW5nW11bNF0pOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7Ci0KLSAgICBib29sIGxp
bmtBdHRyaWJ1dGVzKCk7Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpOwotCi0gICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxl
ICpjb25zdGFudFRhYmxlKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRM
RSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpOwotICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
LSAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBH
TGZsb2F0ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZv
cm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0g
ICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIFVuaWZvcm06OlJlZ2lzdGVySW5mbyAqcnMsIElEM0RYQ29u
c3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0KLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZ1Nh
bml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhj
b25zdCBjaGFyICppbmZvLCAuLi4pOwotICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7Ci0KICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CiAKLSAgICBJRGlyZWN0M0REZXZpY2U5
ICptRGV2aWNlOwogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAgICAgVmVy
dGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCi0gICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsK
LSAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICBBdHRyaWJ1dGVCaW5kaW5ncyBtQXR0
cmlidXRlQmluZGluZ3M7CiAKLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1
dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0g
ICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVBTOwotICAgIElEM0RYQ29uc3Rh
bnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKLQotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBt
QXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEF0dHJpYnV0ZSBtTGlu
a2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgaW50IG1TZW1hbnRpY0luZGV4
W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdHJ1Y3QgU2FtcGxlcgotICAgIHsKLSAgICAg
ICAgYm9vbCBhY3RpdmU7Ci0gICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7Ci0gICAgfTsKLQotICAgIFNhbXBsZXIgbVNhbXBs
ZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIFNhbXBsZXIgbVNhbXBsZXJzVlNb
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgR0x1aW50IG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlOwotICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotCi0g
ICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OwotICAgIFVuaWZv
cm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRp
b24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKLQotICAg
IEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9u
OwotICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOworICAgIFByb2dyYW1C
aW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFn
IHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25n
ZXIgaW4gdXNlCi0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwogCiAg
ICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsKIApAQCAtMjI1LDYgKzExOCw4IEBAIGNsYXNzIFBy
b2dyYW0KIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKICAgICBjb25z
dCBHTHVpbnQgbUhhbmRsZTsKKworICAgIEluZm9Mb2cgbUluZm9Mb2c7CiB9OwogfQogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0
ODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAu
MyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+
CisKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCkKKyNkZWZp
bmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwzCisjZW5kaWYKKworbmFtZXNwYWNlIGdsCit7CitzdGQ6OnN0cmluZyBzdHIoaW50
IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1VuaWZvcm06OlVu
aWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZSkKKyAgICA6IHR5cGUodHlwZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFt
QmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQor
eworICAgIGludCBieXRlcyA9IFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7
CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICBtZW1zZXQoZGF0YSwg
MCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKK30KKworVW5pZm9ybTo6flVuaWZvcm0oKQor
eworICAgIGRlbGV0ZVtdIGRhdGE7Cit9CisKK2Jvb2wgVW5pZm9ybTo6aXNBcnJheSgpCit7Cisg
ICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDA7Cit9CisKK1VuaWZvcm1M
b2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWdu
ZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCisgICAgOiBuYW1lKFByb2dyYW1C
aW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4
KGluZGV4KQoreworfQorCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KCkKK3sKKyAgICBt
RGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAg
ICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7
CisgICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7CisKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
bmRleCsrKQorICAgIHsKKyAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAg
fQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9
IGZhbHNlOworICAgIH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNh
bXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlID0gMDsKKyAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKKworICAg
IG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsK
KyAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9u
ID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbiA9IC0xOworfQorCitQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCit7
CisgICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRh
YmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAg
IHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBp
ZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1V
bmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7
CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KK30KKworSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbFNoYWRlcigpCit7CisgICAgcmV0dXJu
IG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW1C
aW5hcnk6OmdldFZlcnRleFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxl
OworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmFtZSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3Ry
aW5nKG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
aW50IFByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQor
eworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFY
X1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAKKyAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmli
dXRlSW5kZXhdOworfQorCisvLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2Ft
cGxlciBpbmRleCB1c2VkLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VXNlZFNhbXBsZXJSYW5n
ZShTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBj
YXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIHJldHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdl
OworICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRFWDoKKyAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUg
dGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBz
YW1wbGVyCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0
aGUgdmVydGV4IHNoYWRlcikuCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGlu
ZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIEdM
aW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKKyAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8
IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7CisKKyAgICAgICAg
aWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAg
ICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2lj
YWxUZXh0dXJlVW5pdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU0FN
UExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworCisgICAgICAgIGlmIChtU2FtcGxlcnNW
U1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9naWNhbFRl
eHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBsb2dpY2FsVGV4
dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsK
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIHRleHR1cmUgdHlw
ZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNhbXBsZXIgdHlwZSBhbmQKKy8vIGluZGV4ICgwLTE1
IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KK1Rl
eHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlw
ZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VSVChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOworICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICBy
ZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAgIGNhc2Ug
U0FNUExFUl9WRVJURVg6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNh
bXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1swXSkpOworICAgICAgICBBU1NFUlQobVNhbXBs
ZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKQoreworICAgIHVuc2lnbmVk
IGludCBzdWJzY3JpcHQgPSAwOworCisgICAgLy8gU3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9w
ZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAgc2l6ZV90IG9wZW4gPSBuYW1l
LmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmluZF9sYXN0X29m
KCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFt
ZS5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vi
c3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS5lcmFzZShvcGVuKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9y
bXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0ubmFtZSA9PSBuYW1lICYmCisgICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0
aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisg
ICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0g
PSB2WzBdOworICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKKyAgICAgICAgICAgIHRhcmdldFsy
XSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9
IDQ7CisgICAgICAgICAgICB2ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOworICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKKyAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7CisgICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7CisgICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAg
ICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOworICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAg
ICAgICAgdiArPSAzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQp
ICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdM
Ym9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRXaWR0aCwgaW50IHRh
cmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgordm9pZCB0cmFuc3Bvc2VN
YXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpbnQgY29weVdp
ZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY1dpZHRoKTsKKyAgICBpbnQgY29weUhlaWdo
dCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjSGVpZ2h0KTsKKworICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgY29weVdpZHRoOyB4KyspCisgICAgeworICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3ggKiB0
YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lkZQorICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHNy
Y1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAv
LyBjbGVhciB1bmZpbGxlZCBib3R0b20uCisgICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8
IHRhcmdldEhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0
YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdl
dFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgor
CisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwyLDIsMj4odGFyZ2V0LCB2YWx1ZSk7CisgICAgICAg
IHRhcmdldCArPSA4OworICAgICAgICB2YWx1ZSArPSA0OworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+
KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTI7CisgICAgICAgIHZhbHVlICs9
IDk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMZmxvYXQpICogMTYpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
KyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwg
dmFsdWUpOworICAgICAgICB0YXJnZXQgKz0gMTY7CisgICAgICAgIHZhbHVlICs9IDE2OworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9TQU1QTEVSXzJEIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExF
Ul9DVUJFKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCisgICAgICAg
ICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
ICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAg
IH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOworCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCisgICAgICAgICAgICAgICB2LCAz
ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihH
TGludCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7
CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAq
YnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIC8vIHNpemVkIHF1ZXJpZXMg
LS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5h
bFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVp
cmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIs
Miw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihw
YXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTYpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVu
dENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGlu
dGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKKworICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJn
ZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJh
bXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENv
dW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNp
emVvZihHTGZsb2F0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQg
KmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBh
cmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXplZCBxdWVyaWVz
IC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAorICAgIGlmIChi
dWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJu
YWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1
aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgeworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgeworICAgICAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0Ogor
ICAgICAgICB7CisgICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQsND4ocGFy
YW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxNik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3Jt
RXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNv
bXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGlu
dClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJh
bXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0UGFyYW1z
W2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAg
ICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xpbnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3Jh
bUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBtVW5pZm9ybXNb
aW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFsbCB0aGUgdW5p
Zm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQordm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICBmb3IgKHN0ZDo6
dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBt
VW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKSB7CisgICAgICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSAqdWI7CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7
CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2
KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMSwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJh
eVNpemUsIDIsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwgYik7ICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBs
eVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgZik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVSX0NVQkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlm
b3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3Jt
LCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRf
VkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3Jt
NGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVk
IHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEMTBCbG9iICpQcm9ncmFtQmlu
YXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwg
Y29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkK
K3sKKyAgICBpZiAoIWhsc2wpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK
KyAgICBEV09SRCByZXN1bHQ7CisgICAgVUlOVCBmbGFncyA9IDA7CisgICAgc3RkOjpzdHJpbmcg
c291cmNlVGV4dDsKKyAgICBpZiAocGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAgICAgZmxhZ3Mg
fD0gRDNEQ09NUElMRV9ERUJVRzsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAgZmxhZ3MgfD0gQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7CisjZWxzZQorICAgICAgICBmbGFncyB8PSBE
M0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOworI2VuZGlmCisKKyAgICAgICAgc3RkOjpzdHJp
bmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7CisgICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6
OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4i
KSArIHN0ZDo6c3RyaW5nKGhsc2wpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0
cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUw7CisgICAgICAgIHNvdXJjZVRleHQgPSBobHNsOworICAgIH0KKworICAgIElEM0QxMEJs
b2IgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsK
KyAgICByZXN1bHQgPSBEM0RDb21waWxlKGhsc2wsIHN0cmxlbihobHNsKSwgZ19mYWtlcGF0aCwg
TlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVz
c2FnZSk7CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIo
KTsKKworICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNzYWdlKTsKKyAgICAgICAg
VFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKKwor
ICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0g
TlVMTDsKKyAgICB9CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9
IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxlKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmlu
YXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgYmluYXJ5
LT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJu
IGJpbmFyeTsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVn
aXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1
YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nl
c2Z1bAoraW50IFByb2dyYW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
cikKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGlu
dCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygp
OworCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93
Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOworICAgICAgICBpbnQgbSA9IFZh
cmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMg
LSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1b
eF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBt
OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNz
OyByLS0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBib29sIGF2YWls
YWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
ICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
Y2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4
IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChtID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHsw
fTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsg
eSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0g
Kz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChz
cGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWlu
Z1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2
YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWlu
Zy0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKKyAgICBp
bnQgcmVnaXN0ZXJzID0gMDsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1Zl
Y3RvcnM7IHIrKykKKyAgICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdb
cl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAgICB7CisgICAg
ICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZWdp
c3RlcnM7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmlu
Zm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBG
cmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVy
KQoreworICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIHZh
cnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciBmcmFnVmFyID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBmcmFnVmFyICE9
IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGZyYWdWYXIrKykKKyAgICB7CisgICAg
ICAgIGZyYWdWYXItPnJlZyA9IC0xOworICAgICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKKyAgICB9
CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2dHhWYXIgPSB2ZXJ0ZXhTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZ0eFZhcisrKQorICAgIHsKKyAgICAgICAgdnR4VmFyLT5yZWcgPSAtMTsKKyAgICAgICAg
dnR4VmFyLT5jb2wgPSAtMTsKKyAgICB9CisKKyAgICAvLyBNYXAgdGhlIHZhcnlpbmdzIHRvIHRo
ZSByZWdpc3RlciBmaWxlCisgICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19W
RUNUT1JTX1NNM11bNF0gPSB7TlVMTH07CisgICAgaW50IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5n
cyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICBpZiAocmVnaXN0ZXJz
IDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0
ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25zCisgICAgQ29udGV4dCAqY29udGV4
dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4
dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzID09IG1h
eFZhcnlpbmdWZWN0b3JzICYmIGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7
CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1
cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAg
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBv
dXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUeXBlIG9mIHZl
cnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlp
bmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVn
ID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7
CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hlZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHZhcnlpbmcgJXMg
ZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7
CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICBmb3IgKEF0dHJp
YnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBh
dHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQgIjsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIg
IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICB2ZXJ0ZXhITFNMICs9IGRlY29yYXRl
QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDogVEVYQ09PUkQiICsgc3RyKHNlbWFudGlj
SW5kZXgpICsgIjtcbiI7CisKKyAgICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0Nv
dW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19P
VVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAgIGludCByZWdpc3RlclNpemUg
PSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFd
ID8gMiA6IDEpKTsKKworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJl
Z2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBz
dHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFn
Q29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAg
ICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCisgICAg
eworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7
XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAg
ICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1
dClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4o
KTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7CisKKyAgICAgICAgaWYgKFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAgICAgIH0KKworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiKTtcbiI7CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQ
aXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24ueSArIGR4X0hhbGZQaXhlbFNpemUu
eSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlv
bi53O1xuIjsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykK
KyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0g
Y2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVf
UkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRw
dXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAgIH0KKworICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdp
bigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKysp
CisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5n
LT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQudiIgKyBzdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFy
ZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWlu
Z3MKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1b
MF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIi4iOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyXVt4XSA9PSAmKnZhcnlpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiID0gIiArIHZh
cnlpbmctPm5hbWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICBwaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBV
VFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgCisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsg
dmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisg
ICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50
eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIo
dmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiAr
ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0
NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAi
O1xuIjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQwO1xuIjsKKyAg
ICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgewor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4i
CisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAg
ICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAg
ICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlu
cHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKyAgICAgICAgCisgICAgICAgIGlmIChzbTMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGR4X0Nvb3JkIGNvbnRhaW5zIHRo
ZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUg
Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQorICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29v
cmQueCArIGR4X0Nvb3JkLno7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xf
RnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSAr
IGR4X0Nvb3JkLnc7XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBk
eF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENv
b3JkLnk7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZh
Y2luZykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0g
ZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6
IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsg
dmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisg
ICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50
eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIo
dmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3Ry
KGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGds
X21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIg
ICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKKyAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAg
ICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5n
cyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAh
ZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc0Nv
bXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
OjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKKyAgICBzdGQ6
OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisKKyAgICBpZiAo
IWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhlbEhMU0wsIHZlcnRleEhMU0wsIGZyYWdtZW50U2hh
ZGVyLCB2ZXJ0ZXhTaGFkZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgY2hhciAq
dmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18w
IiA6ICJ2c18yXzAiOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1
cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiOworCisgICAgSUQzRDEw
QmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHZlcnRleEhMU0wu
Y19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAgIElEM0QxMEJs
b2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHBpeGVsSExTTC5jX3N0
cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlmICh2ZXJ0ZXhC
aW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBIUkVTVUxUIHZlcnRleFJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0
QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOworICAgICAgICBIUkVTVUxUIHBp
eGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFy
eS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAgICAgICAgaWYg
KHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYmIFNVQ0NFRURFRChwaXhlbFJl
c3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICBwaXhl
bEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2ZXJ0ZXhCaW5hcnkgPSBOVUxMOworICAgICAg
ICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYm
IG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbGlua0F0dHJp
YnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmluZGluZ3MsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhT
aGFkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xf
RlJBR01FTlRfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVBTKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIG1Db25zdGFudFRhYmxl
VlMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFz
IGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KKyAgICAgICAgICAgIC8vIGFy
ZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3Jh
dGlvbgorICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9EZXB0aFJhbmdlIik7CisgICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIpOworICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfQ29vcmQiKTsKKyAgICAgICAgICAgIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIp
OworICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigi
ZHhfRnJvbnRDQ1ciKTsKKyAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIpOworCisgICAgICAgICAgICBjb250
ZXh0LT5tYXJrRHhVbmlmb3Jtc0RpcnR5KCk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEZXRlcm1pbmVz
IHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQgRGlyZWN0M0QgOSB2ZXJ0ZXgg
c3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJpYnV0ZXMo
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRp
bmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4
U2hhZGVyKQoreworICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsKKworICAgIC8v
IExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChB
dHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQo
KTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVC
aW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAg
aWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUu
ZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3Rp
dmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0g
KmF0dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0
dHJpYnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhf
VkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRv
IGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVz
ZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBi
aW5kaW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAg
ICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0
dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBz
ZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQg
YXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJv
d3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRl
eCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFj
dGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJp
YnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAg
IGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChW
YXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAx
KTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RY
Q29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RBTlRUQUJMRV9E
RVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERl
c2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBj
b25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudElu
ZGV4KTsKKworICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwor
ICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0
YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hh
ZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGlu
IHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBSZXR1cm5zIHRy
dWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCitib29sIFByb2dy
YW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwg
Y29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVND
ICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQoreworICAgIGlmIChjb25z
dGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJl
Z2lzdGVyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0Nv
bnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3Rh
bnREZXNjcmlwdGlvbi5OYW1lKTsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9
IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChwc0NvbnN0YW50KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRU
YWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHNDb25zdGFudCkgKyBpOworCisgICAgICAgICAgICAg
ICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5h
Y3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5k
ZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FN
UExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAg
ICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxl
ckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkuIiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodnNDb25zdGFudCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
bUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxlckluZGV4KHZzQ29uc3RhbnQpICsgaTsKKworICAg
ICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9D
VUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVXNl
ZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQo
IlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNo
KGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENfU1RS
VUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4
ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBm
aWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVs
ZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBm
aWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxl
LCBmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGRE
ZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0g
MTsKKworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxl
UFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNj
cmlwdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgp
ICsgIl0iKSA6ICIiOworCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShp
bmZvTG9nLCBzaGFkZXIsIGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29u
c3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6
CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09M
VU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVu
aWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlw
dGlvbi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5l
VW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIFVuaWZvcm0gKnVu
aWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKKworICAg
IGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUpOworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+
dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVu
aWZvcm07CisgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIH0KKworICAgIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVS
KSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisgICAgaWYgKHNoYWRlciA9
PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZvcm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9u
KTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuaWZv
cm0tPnR5cGUgPT0gdHlwZTsKKyAgICB9CisKKyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZv
cm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0g
MTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXpl
OyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9j
YXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitVbmlmb3JtICpQcm9ncmFtQmluYXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhD
T05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25h
bWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3Rv
cnMgYW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAg
ICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJf
MkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBz
d2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMz
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQ
VF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5z
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
RkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dz
ID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAg
IHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3Rh
bnREZXNjcmlwdGlvbi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVl
ZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW1CaW5h
cnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlm
IChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJk
eF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRl
Y29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCit7CisgICAgc3RkOjpzdHJp
bmcgbmFtZSA9IF9uYW1lOworICAgIAorICAgIC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxk
IGRlY29yYXRpb24KKyAgICBzaXplX3QgcG9zID0gMDsKKyAgICB3aGlsZSAoKHBvcyA9IG5hbWUu
ZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIG5h
bWUucmVwbGFjZShwb3MsIDIsICIuIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBsZWFk
aW5nIGRlY29yYXRpb24KKyAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmFtZS5zdWJzdHIoMSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgw
LCAzLCAiYXJfIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGlu
dCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIGZsb2F0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKKyAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9P
TF9DT05TVEFOVFNdOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49
IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChqIDwgd2lkdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0
b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAx
LjBmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZz
LmJvb2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlm
b3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQg
OiAwOworICAgICAgICBpbnQgdnNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+
PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCA6IDA7CisgICAgICAgIGludCBj
b3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAqIHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0Nv
dW50KSk7CisgICAgICAgIEFTU0VSVChjb3B5Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFO
VFMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvcHlDb3VudDsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBib29sVmVjdG9yW2ldID0gdltpXSAhPSBHTF9GQUxTRTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0
VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9v
bEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KKyAgICAKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgs
IGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3Rh
bnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJDb3VudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwor
ICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsK
KyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0t
PnBzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVy
SW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7
CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRl
eHR1cmVVbml0ID0gdltpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0
VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0
IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisg
ICAgeworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5p
Zm9ybS0+dnMuc2FtcGxlckluZGV4OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHNh
bXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZs
b2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VSVChjb3VudCA8PSBE
M0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChm
bG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgYXBwbHlV
bmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEFTU0VS
VChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOworICAgIEQzRFhWRUNUT1I0IHZl
Y3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZs
b2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAz
OworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVj
dG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5
VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRT
KTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3Rv
cltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0s
IChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7CisgICAgfQorCisgICAgYXBwbHlVbmlm
b3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCit7Cisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBB
U1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCk7CisgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
OworICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOwor
ICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCk7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRh
dGVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Cit9CisKK3ZvaWQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkKK3sKKyAgICAvLyBTa2lwIG92ZXIgaW5hY3RpdmUgYXR0cmlidXRlcworICAgIHVuc2lnbmVk
IGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOworICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Cisg
ICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVBdHRyaWJ1dGUr
KzsKKyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBjb25zdCBj
aGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwor
CisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVti
dWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQorCisgICAg
KnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKworR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGludCBjb3VudCA9
IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYg
KCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExl
bmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1
dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9
IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVu
Z3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBt
YXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwg
R0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGludGVybmFs
IHVuaWZvcm1zCisgICAgdW5zaWduZWQgaW50IGFjdGl2ZVVuaWZvcm0gPSAwOworICAgIHVuc2ln
bmVkIGludCB1bmlmb3JtOworICAgIGZvciAodW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9y
bXMuc2l6ZSgpOyB1bmlmb3JtKyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZv
cm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0g
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgYWN0aXZlVW5pZm9ybSsrOworICAgIH0KKworICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZv
cm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCkKKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIHN0ZDo6
c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKKworICAgICAgICBpZiAo
bVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0
cmluZyArPSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5n
LmNfc3RyKCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisK
KyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0
cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVuaWZvcm1zW3Vu
aWZvcm1dLT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlw
ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKK3sK
KyAgICBpbnQgY291bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVu
aWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAg
ICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZl
VW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAs
IDMsICJkeF8iKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGlu
dCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAg
ICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+aXNBcnJheSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGxlbmd0aCArPSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1h
eExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQor
Cit2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAg
YXBwbHlVbmlmb3JtcygpOworICAgIGlmICghdmFsaWRhdGVTYW1wbGVycygmaW5mb0xvZykpCisg
ICAgeworICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpCit7CisgICAgLy8gaWYgYW55
IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMs
IGJ1dCByZWZlciB0byB0aGUgc2FtZQorICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRo
aXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWls
LCBhbmQKKyAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUg
SU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKTsKKyAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kp
CisgICAgeworICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxl
clJhbmdlOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ld
LmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHVuaXQg
Pj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBl
W3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRd
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFw
cGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4
dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAg
aWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIg
dW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVk
KSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVU
eXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5n
IHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQp
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBt
U2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERl
cHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoUmFuZ2VMb2Nh
dGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4Q29vcmRM
b2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9j
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Cit9
CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5h
cnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBH
TCBwcm9ncmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9Q
Uk9HUkFNX0JJTkFSWV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KKwor
I2luY2x1ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxz
dHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xh
c3MgRnJhZ21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1
Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQor
eworICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgYm9vbCBpc0Fy
cmF5KCk7CisKKyAgICBjb25zdCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBf
bmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAg
IC8vIFVuZGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOwor
CisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAgc3RydWN0
IFJlZ2lzdGVySW5mbworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJbmZvKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZmxvYXQ0SW5kZXggPSAtMTsKKyAgICAgICAgICAgIHNhbXBsZXJJbmRleCA9
IC0xOworICAgICAgICAgICAgYm9vbEluZGV4ID0gLTE7CisgICAgICAgICAgICByZWdpc3RlckNv
dW50ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0KGNvbnN0IEQzRFhDT05TVEFO
VF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2goY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBEM0RYUlNfQk9PTDogICAgYm9vbEluZGV4ID0gY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlckluZGV4OyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNf
RkxPQVQ0OiAgZmxvYXQ0SW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfU0FNUExFUjogc2FtcGxlckluZGV4
ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQgPT0gMCB8fCByZWdpc3RlckNvdW50ID09
IChpbnQpY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIHJl
Z2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7CisgICAgICAg
IH0KKworICAgICAgICBpbnQgZmxvYXQ0SW5kZXg7CisgICAgICAgIGludCBzYW1wbGVySW5kZXg7
CisgICAgICAgIGludCBib29sSW5kZXg7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQ7Cisg
ICAgfTsKKworICAgIFJlZ2lzdGVySW5mbyBwczsKKyAgICBSZWdpc3RlckluZm8gdnM7Cit9Owor
CisvLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5p
Zm9ybSBhcnJheXMgdG8gaGFuZGxlcworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVt
ZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1
bnNpZ25lZCBpbnQgZWxlbWVudDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCisvLyBU
aGlzIGlzIHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0
aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmluYXJ5LgorY2xhc3MgUHJvZ3JhbUJpbmFy
eQoreworICBwdWJsaWM6CisgICAgUHJvZ3JhbUJpbmFyeSgpOworICAgIH5Qcm9ncmFtQmluYXJ5
KCk7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAg
SURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTHVpbnQg
Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFu
dGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBw
aW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFRl
eHR1cmVUeXBlIGdldFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBHTGludCBnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBs
ZXJUeXBlIHR5cGUpOworCisgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5n
IG5hbWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVu
aWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBz
ZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
CisgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBib29s
IGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAq
cGFyYW1zKTsKKyAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAq
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisKKyAgICBHTGludCBnZXREeERlcHRoUmFuZ2VMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhGcm9udENDV0xvY2F0aW9u
KCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdDsK
KworICAgIHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtcygp
OworCisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRp
bmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMo
R0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAg
ICB2b2lkIGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
OworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1
aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUs
IEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3Jt
Q291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2
b2lkIHZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpOworICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVy
cyhJbmZvTG9nICppbmZvTG9nKTsKKyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAg
ICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJp
bmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKTsgICAvLyBSZW1v
dmUgbGVhZGluZyB1bmRlcnNjb3JlCisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CisKKyAgICBJRDNEMTBCbG9iICpjb21waWxlVG9CaW5h
cnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmls
ZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CisKKyAgICBpbnQgcGFja1Zh
cnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZv
TG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4
SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcik7CisKKyAgICBib29sIGxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisKKyAgICBib29s
IGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0
YW50VGFibGUgKmNvbnN0YW50VGFibGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShJbmZvTG9n
ICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRs
ZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3Ry
aW5nIG5hbWUgPSAiIik7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSk7CisgICAgVW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwor
ICAgIGJvb2wgYXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
ZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9y
bTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAg
ICB2b2lkIGFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybW5i
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0
IEdMYm9vbGVhbiAqdik7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworCisgICAg
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkg
dXNlZCBkdXJpbmcgbGlua2luZy4KKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRh
YmxlUFM7CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisgICAg
QXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQg
bVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVy
CisgICAgeworICAgICAgICBib29sIGFjdGl2ZTsKKyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1
cmVVbml0OworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICB9OworCisgICAg
U2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgU2FtcGxl
ciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKKyAgICBH
THVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7CisgICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2U7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJy
YXk7CisgICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9y
bUluZGV4OworCisgICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxvY2F0aW9uOworICAgIEdMaW50IG1E
eERlcHRoTG9jYXRpb247CisgICAgR0xpbnQgbUR4Q29vcmRMb2NhdGlvbjsKKyAgICBHTGludCBt
RHhIYWxmUGl4ZWxTaXplTG9jYXRpb247CisgICAgR0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsK
KyAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CisKKyAgICBib29sIG1WYWxpZGF0
ZWQ7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NjggKzYzLDE0NCBAQCBHTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRTdGVuY2lsCiAg
ICAgcmV0dXJuIGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShnZXREM0RGb3JtYXQoKSk7CiB9CiAKLVJl
bmRlcmJ1ZmZlclRleHR1cmU6OlJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwg
R0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDog
bVRhcmdldCh0YXJnZXQpCit7CisgICAgbVRleHR1cmUyRC5zZXQodGV4dHVyZSk7Cit9CisKK1Jl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6flJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpCit7CisgICAgbVRl
eHR1cmUyRC5zZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhl
aXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZl
cnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJl
ZmVyZW5jZS4KK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkQtPmFkZFByb3h5UmVmKHByb3h5
KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkQtPnJlbGVhc2VQcm94eShwcm94
eSk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBt
dXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRl
eHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworfQorCisvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldERl
cHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU3RlbmNpbCht
VGFyZ2V0KTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFdpZHRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgoMCk7Cit9CisKK0dMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRIZWlnaHQoKSBjb25zdAogewotICAgIG1UZXh0
dXJlLnNldCh0ZXh0dXJlKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwog
fQogCi1SZW5kZXJidWZmZXJUZXh0dXJlOjp+UmVuZGVyYnVmZmVyVGV4dHVyZSgpCitHTGVudW0g
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAg
bVRleHR1cmUuc2V0KE5VTEwpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZv
cm1hdCgwKTsKK30KKworRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9y
bWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RDNERm9ybWF0KDApOwor
fQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRh
cmdldFNlcmlhbChtVGFyZ2V0KTsKK30KKworLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVu
dW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQo
dGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXAoKQoreworICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQoTlVMTCk7CiB9CiAK
IC8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBm
b3IgcmVmZXJlbmNlcyB2aWEKIC8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhl
cmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpCiB7Ci0gICAgbVRleHR1cmUtPmFkZFByb3h5UmVmKHByb3h5KTsKKyAgICBtVGV4
dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHByb3h5KTsKIH0KIAotdm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3ZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQogewotICAgIG1UZXh0dXJlLT5yZWxlYXNlUHJveHkocHJveHkpOworICAgIG1UZXh0
dXJlQ3ViZU1hcC0+cmVsZWFzZVByb3h5KHByb3h5KTsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkg
KlJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFJlbmRlclRhcmdldCgpCisvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6
Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQo
bVRhcmdldCk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpn
ZXREZXB0aFN0ZW5jaWwoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0V2lk
dGgoKSBjb25zdAorR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgoMCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKIH0KLSAKLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29u
c3QKKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAw
KTsKIH0KLSAKLUdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCgp
IGNvbnN0CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1hdChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQogCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVy
VGV4dHVyZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUt
PmdldEQzREZvcm1hdCgpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEQzREZvcm1h
dChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwogfQogCi1HTHNpemVpIFJlbmRl
cmJ1ZmZlclRleHR1cmU6OmdldFNhbXBsZXMoKSBjb25zdAorR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRTZXJpYWwoKSBjb25zdAordW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAog
ewotICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0
KTsKIH0KIAorLy8vLy8vIFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKwogUmVu
ZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2Ug
Kmluc3RhbmNlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAh
PSBOVUxMKTsKQEAgLTE1MiwxMSArMjI4LDE1IEBAIHZvaWQgUmVuZGVyYnVmZmVyOjpyZWxlYXNl
KCkgY29uc3QKICAgICBSZWZDb3VudE9iamVjdDo6cmVsZWFzZSgpOwogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRl
clRhcmdldCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiB9
CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJl
bGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1
ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0
aFN0ZW5jaWwoKTsKQEAgLTI0MywxMSArMzIzLDE1IEBAIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5S
ZW5kZXJidWZmZXJTdG9yYWcKIHsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsK
ICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAg
ICByZXR1cm4gTlVMTDsKQEAgLTM1Niw2ICs0NDAsOCBAQCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVm
ZmVyKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3Vy
ZmFjZTkgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQpAQCAtNDI4LDggKzUxNCwxNSBAQCBEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0
ZW5jaWxidWZmZXIoCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJl
Y3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7Cisg
ICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRS
ZWYoKTsKKyAgICB9CisKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKIH0KIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw4IEBACiAK
IG5hbWVzcGFjZSBnbAogewotY2xhc3MgVGV4dHVyZTsKK2NsYXNzIFRleHR1cmUyRDsKK2NsYXNz
IFRleHR1cmVDdWJlTWFwOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3MgQ29sb3JidWZmZXI7
CiBjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CkBAIC01OCwxMiArNTksMTIgQEAgY2xhc3MgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1
ZmZlckludGVyZmFjZSk7CiB9OwogCi1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckludGVyZmFjZQorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVi
bGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVy
VGV4dHVyZShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKIAotICAgIHZp
cnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJU
ZXh0dXJlMkQoKTsKIAogICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CiAgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CkBAIC04MCw5ICs4MSwzNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlIDogcHVibGljIFJl
bmRlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZSk7
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAK
LSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZT4gbVRleHR1cmU7CisgICAgQmluZGluZ1BvaW50
ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKKyAgICBHTGVudW0gbVRhcmdldDsKK307CisKK2Ns
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVy
ZmFjZQoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworCisgICAgdmlydHVhbCB+UmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdmlydHVh
bCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKKworICAgIEJpbmRpbmdQb2ludGVy
IDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwogICAgIEdMZW51bSBtVGFyZ2V0Owog
fTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTQgKzEwMiwx
NCBAQCB2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsCiB7CiAgICAgaW50
IGluZGV4ID0gMDsKIAotICAgIGlmIChtSW5mb0xvZykKKyAgICBpZiAoYnVmU2l6ZSA+IDApCiAg
ICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbiht
SW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAg
ICB9CisgICAgICAgIGlmIChtSW5mb0xvZykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXgg
PSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKKyAgICAgICAg
ICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOworICAgICAgICB9CiAKLSAgICBp
ZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9
CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIg
KnNvdXJjZSwKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgaWYgKHNvdXJjZSkKKyAgICBp
ZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUg
LSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNl
LCBpbmRleCk7Ci0gICAgfQorICAgICAgICBpZiAoc291cmNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsK
KyAgICAgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOworICAgICAgICB9CiAK
LSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7CiAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSAnXDAnOwog
ICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHR5
cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwogCiBjbGFzcyBTaGFkZXIKIHsK
LSAgICBmcmllbmQgUHJvZ3JhbTsKKyAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIAog
ICBwdWJsaWM6CiAgICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhh
bmRsZSk7CkBAIC0xMjgsNyArMTI4LDcgQEAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+
IEF0dHJpYnV0ZQogCiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAg
ZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVi
bGljOgogICAgIFZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBo
YW5kbGUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSwxMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4CiAKIHN0YXRp
YyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQogewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQpCisgICAgaWYgKElzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgeworICAgICAgICByZXR1
cm4gRDNERk1UX0lOVFo7CisgICAgfQorICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQogICAgIHsKICAgICAgICAgcmV0dXJuIEQzREZNVF9E
WFQxOwogICAgIH0KQEAgLTc1LDYgKzc5LDEwIEBAIHN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRl
eHR1cmVGb3JtYXRUeXAKIAogc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShE
M0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgc3dpdGNoKGZvcm1hdCkKICAgICB7
CiAgICAgICBjYXNlIEQzREZNVF9MODoKQEAgLTk1LDYgKzEwMywyMSBAQCBzdGF0aWMgYm9vbCBJ
c1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0
aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0g
Z2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCit7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSAw
OworCisgICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIGQzZHVz
YWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKKyAgICB9CisgICAgZWxzZSBpZihmb3JjZVJl
bmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2Fn
ZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgeworICAgICAgICBk
M2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CisgICAgfQorICAgIHJldHVybiBkM2R1
c2FnZTsKK30KKwogSW1hZ2U6OkltYWdlKCkKIHsKICAgICBtV2lkdGggPSAwOyAKQEAgLTE1NSw2
ICsxNzgsOCBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKICAgICBJRGlyZWN0M0RUZXh0
dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZh
Y2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1N
RU07CisgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOworICAg
IEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0
IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdo
dCAhPSAwKQogICAgIHsKQEAgLTE3OCw3ICsyMDMsNyBAQCB2b2lkIEltYWdlOjpjcmVhdGVTdXJm
YWNlKCkKICAgICAgICAgICAgIGxldmVsVG9GZXRjaCA9IHVwc2FtcGxlQ291bnQ7CiAgICAgICAg
IH0KIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJl
KHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZ2V0
RDNERm9ybWF0KCksCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0
ZVRleHR1cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBO
VUxMLCBkM2RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9vbFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMjY0LDkgKzI4OSwxMyBAQCB2b2lkIEltYWdlOjp1cGRhdGVT
dXJmYWNlKElEaXJlY3QzRFN1cmZhCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1
cmZhY2UgPSBnZXRTdXJmYWNlKCk7CiAKLSAgICBpZiAoc291cmNlU3VyZmFjZSAhPSBkZXN0U3Vy
ZmFjZSkKKyAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9IGRlc3RTdXJm
YWNlKQogICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIG1IZWlnaHQpOworICAgICAgICBSRUNUIHJlY3Q7
CisgICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7CisgICAgICAgIHJlY3QudG9wID0geW9mZnNl
dDsKKyAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKKyAgICAgICAgcmVjdC5i
b3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwogCiAgICAgICAgIGlmIChtRDNEUG9vbCA9PSBEM0RQ
T09MX01BTkFHRUQpCiAgICAgICAgIHsKQEAgLTI4NCwxMiArMzEzLDI0IEBAIHZvaWQgSW1hZ2U6
OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmEKIH0KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJl
Y3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBw
aXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQg
cGl4ZWwgcmVjdGFuZ2xlIGF0IG91dHB1dCB3aXRoIG91dHB1dFBpdGNoIGJ5dGVzIGluIGJldHdl
ZW4gZWFjaCBsaW5lLgorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KIHZvaWQg
SW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2gg
PSAtQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwot
ICAgIGlucHV0ID0gKChjaGFyKilpbnB1dCkgLSBpbnB1dFBpdGNoICogKGhlaWdodCAtIDEpOwor
ICAgIFJFQ1QgbG9ja1JlY3QgPQorICAgIHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAg
ICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKKworICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwg
JmxvY2tSZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRo
LCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOwogCiAgICAgc3dpdGNoICh0eXBlKQog
ICAgIHsKQEAgLTI5NywyOSArMzM4LDM2IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW4KICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGxvYWRBbHBoYURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKKyAgICAgICAgICAgIGxvYWRMdW1p
bmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAg
bG9hZEx1bWluYW5jZUFscGhhRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCwgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdl
dEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6CiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNT
U0UyKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFT
U0UyKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBv
dXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNT
RTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBs
b2FkQkdSQURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICB9CkBAIC0zMjgsNyArMzc2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbgogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAg
ICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwg
b3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0z
MzcsNyArMzg1LDcgQEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgog
ICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM0Niw3ICszOTQsNyBA
QCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGluCiAgICAgICAgIHN3aXRj
aCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
ICAgIGxvYWRSR0JBNTU1MURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzU2LDE5ICs0MDQsMTkgQEAgdm9pZCBJbWFn
ZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICB7CiAgICAgICAgICAgLy8g
ZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdy
ZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAg
ICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBs
b2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0
Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICBsb2FkUkdCQUZsb2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdC
QUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzc4LDI4ICs0MjYsMzAgQEAgdm9pZCBJbWFn
ZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICB7CiAgICAgICAgICAgLy8g
ZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdy
ZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAg
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAg
ICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZs
b2F0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZs
b2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9h
dERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCOgot
ICAgICAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAg
ICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0
UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgIH0KKworICAgIHVubG9jaygpOwogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAordm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtNDA4LDcgKzQ1OCw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IDA7CkBAIC00MTksNyArNDY5LDQ3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBo
YURhdGEoR0xpbnQgeG9mZnNldCwKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAg
IHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7CisgICAgX19tMTI4aSB6ZXJvV2lkZSA9IF9tbV9z
ZXR6ZXJvX3NpMTI4KCk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQor
ICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7CisKKyAgICAgICAgaW50IHg7CisgICAgICAgIC8vIE1ha2Ugb3V0cHV0
IHdyaXRlcyBhbGlnbmVkCisgICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc291
cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyB4ICsgNyA8IHdpZHRo
OyB4ICs9IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9t
bV9sb2FkbF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hd
KSk7CisgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJpdCwgbWFrZSB0
aGUgbG93ZXIgYnl0ZSB0byB6ZXJvCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gX21tX3VucGFj
a2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2
ZSBlYWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6ZXJvCisgICAg
ICAgICAgICBfX20xMjhpIGxvID0gX21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VE
YXRhKTsKKyAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBpMTYoemVyb1dp
ZGUsIHNvdXJjZURhdGEpOworCisgICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnBy
ZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCBsbyk7CisgICAgICAgICAgICBfbW1fc3RvcmVf
c2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwgaGkpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXIKKyAgICAgICAgZm9yICg7
IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0W3hdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTQyOCw3ICs1MTgsNyBA
QCB2b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mCiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CkBAIC00Mzks
NyArNTI5LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZgogICAg
IH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC00NDgsNyArNTM4
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsK
KyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gMDsKQEAgLTQ1OSwxNyArNTQ5LDE2IEBAIHZvaWQgSW1hZ2U6Omxv
YWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVy
UGl4ZWwgPSBuYXRpdmU/IDE6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwogCiAgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1h
dAogICAgICAgICB7CkBAIC00ODgsNyArNTc3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZURhdGEoR0xpbnQgeG9mZgogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZs
b2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBA
IC00OTcsNyArNTg2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTGlu
dAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbeF07CkBAIC01MDgsNyArNTk3LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUZsb2F0RGF0YShHTGludAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5j
ZUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBAIC01MTcsNyArNjA2LDcgQEAgdm9pZCBJbWFnZTo6bG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoRwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwpAQCAtNTI4LDE3ICs2MTcsMTYgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhh
bGZGbG9hdERhdGEoRwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAogewotICAgIGNvbnN0IGludCBkZXN0Qnl0ZXNQ
ZXJQaXhlbCA9IG5hdGl2ZT8gMjogNDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOworICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2g7CiAgICAgICAgIAogICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5h
dGlvbiBmb3JtYXQKICAgICAgICAgewpAQCAtNTU3LDcgKzY0NSw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNTY2LDcgKzY1NCw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSgKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zmxv
YXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewog
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU3Nyw3ICs2
NjUsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoCiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKQEAgLTU4Niw3ICs2NzQsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxw
aGFIYWxmRmxvYXRECiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1
dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwpA
QCAtNTk3LDcgKzY4NSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9h
dEQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC02MDYsNyArNjk0LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2ZmcwogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlW3ggKiAzICsgMl07CkBAIC02MTcsNyArNzA1LDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZFJHQlVCeXRlRGF0YShHTGludCB4b2ZmcwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6
bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC02MjYsNyArNzE0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xpbnQgeG9mZnNl
dAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNjM4LDcgKzcyNiw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQKICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2U6OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpA
QCAtNjQ3LDcgKzczNSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9m
ZnMKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3ggKiAzICsgMF07CkBAIC02NTgsNyArNzQ2LDcgQEAgdm9pZCBJbWFnZTo6
bG9hZFJHQkZsb2F0RGF0YShHTGludCB4b2ZmcwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7CkBAIC02NjcsNyArNzU1LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZG
bG9hdERhdGEoR0xpbnQgeAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBv
dXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICog
MyArIDBdOwpAQCAtNjc4LDcgKzc2Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXRE
YXRhKEdMaW50IHgKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NF
MihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAg
LTY4OCw3ICs3NzYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQg
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0
ICogNCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAg
ICAgICAgaW50IHggPSAwOwogCiAgICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVk
CkBAIC03MjAsNyArODA4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdM
aW50IAogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzI4LDcgKzgxNiw3IEBAIHZv
aWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmYKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0KTsKKyAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogCiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewpAQCAtNzM4LDcgKzgyNiw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmYKICAgICB9CiB9CiAKLXZvaWQgSW1h
Z2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOwpAQCAtNzQ3LDcgKzgzNSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEo
R0xpbnQgeG9mZnMKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsK
ICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKQEAgLTc1OSw3ICs4NDcs
NyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzCiAgICAgfQogfQog
Ci12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE1
NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKQEAgLTc2OCw3ICs4NTYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdC
QTU1NTFEYXRhKEdMaW50IHhvZmZzCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03
ODAsNyArODY4LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmcwog
ICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdl
Ojpsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC03ODksMTIgKzg3NywxMiBAQCB2b2lkIEltYWdlOjps
b2FkUkdCQUZsb2F0RGF0YShHTGludCB4b2ZmCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKICAgICB9CiB9
CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6Omxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CkBAIC04MDMsMTIgKzg5MSwxMiBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgCiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIG1l
bWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7CiAgICAgfQogfQogCi12b2lkIEltYWdlOjps
b2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtODE3LDI4
MyArOTA1LDM3IEBAIHZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCAKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwogICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCo0KTsKICAgICB9CiB9CiAKIHZv
aWQgSW1hZ2U6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdCB7Ci0gICAgc3dpdGNoIChnZXREM0RGb3JtYXQoKSkK
LSAgICB7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgICAgbG9hZERYVDFEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEM0RGTVRf
RFhUMzoKLSAgICAgICAgICBsb2FkRFhUM0RhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICAgIGxvYWREWFQ1RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCBGbGlwQ29weURYVDFCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVu
c2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDEgYmxvY2sgbGF5b3V0IGlzOgotICAvLyBb
MC0xXSBjb2xvcjAuCi0gIC8vIFsyLTNdIGNvbG9yMS4KLSAgLy8gWzQtN10gY29sb3IgYml0bWFw
LCAyIGJpdHMgcGVyIHBpeGVsLgotICAvLyBTbyBlYWNoIG9mIHRoZSA0LTcgYnl0ZXMgcmVwcmVz
ZW50cyBvbmUgbGluZSwgZmxpcHBpbmcgYSBibG9jayBpcyBqdXN0Ci0gIC8vIGZsaXBwaW5nIHRo
b3NlIGJ5dGVzLgotCi0gIC8vIEZpcnN0IDMyLWJpdHMgaXMgdHdvIFJHQjU2NSBjb2xvcnMgc2hh
cmVkIGJ5IHRpbGUgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgbW9kaWZpZWQuCi0gIGRlc3RbMF0g
PSBzb3VyY2VbMF07Ci0KLSAgLy8gU2Vjb25kIDMyLWJpdHMgY29udGFpbnMgNCByb3dzIG9mIDQg
Mi1iaXQgaW50ZXJwb2xhbnRzIGJldHdlZW4gdGhlIGNvbG9ycy4gQWxsIHJvd3Mgc2hvdWxkIGJl
IGZsaXBwZWQuCi0gIGRlc3RbMV0gPSAoc291cmNlWzFdID4+IDI0KSB8Ci0gICAgICAgICAgICAo
KHNvdXJjZVsxXSA8PCA4KSAmIDB4MDBGRjAwMDApIHwKLSAgICAgICAgICAgICgoc291cmNlWzFd
ID4+IDgpICYgMHgwMDAwRkYwMCkgfAotICAgICAgICAgICAgKHNvdXJjZVsxXSA8PCAyNCk7Ci19
Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEgRFhUMSBibG9jayBpbiB0aGUgeSBk
aXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDFCbG9ja0hhbGYoY29uc3QgdW5zaWdu
ZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUgbGF5b3V0IGFi
b3ZlLgotICBkZXN0WzBdID0gc291cmNlWzBdOwotICBkZXN0WzFdID0gKChzb3VyY2VbMV0gPDwg
OCkgJiAweDAwMDBGRjAwKSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA+PiA4KSAmIDB4MDAw
MDAwRkYpOwotfQotCi0vLyBGbGlwcyBhIGZ1bGwgRFhUMyBibG9jayBpbiB0aGUgeSBkaXJlY3Rp
b24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDNCbG9ja0Z1bGwoY29uc3QgdW5zaWduZWQgaW50
KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDMgYmxvY2sgbGF5b3V0
IGlzOgotICAvLyBbMC03XSAgYWxwaGEgYml0bWFwLCA0IGJpdHMgcGVyIHBpeGVsLgotICAvLyBb
OC0xNV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIEZpcnN0IGFuZCBTZWNvbmQgMzIgYml0cyBhcmUg
NGJpdCBwZXIgcGl4ZWwgYWxwaGEgYW5kIG5lZWQgdG8gYmUgZmxpcHBlZC4KLSAgZGVzdFswXSA9
IChzb3VyY2VbMV0gPj4gMTYpIHwgKHNvdXJjZVsxXSA8PCAxNik7Ci0gIGRlc3RbMV0gPSAoc291
cmNlWzBdID4+IDE2KSB8IChzb3VyY2VbMF0gPDwgMTYpOwotCi0gIC8vIEFuZCBmbGlwIHRoZSBE
WFQxIGJsb2NrIHVzaW5nIHRoZSBhYm92ZSBmdW5jdGlvbi4KLSAgRmxpcENvcHlEWFQxQmxvY2tG
dWxsKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgdGhlIGZpcnN0IDIgbGlu
ZXMgb2YgYSBEWFQzIGJsb2NrIGluIHRoZSB5IGRpcmVjdGlvbi4KLXN0YXRpYyB2b2lkIEZsaXBD
b3B5RFhUM0Jsb2NrSGFsZihjb25zdCB1bnNpZ25lZCBpbnQqIHNvdXJjZSwgdW5zaWduZWQgaW50
KiBkZXN0KSB7Ci0gIC8vIFNlZSBsYXlvdXQgYWJvdmUuCi0gIGRlc3RbMF0gPSAoc291cmNlWzFd
ID4+IDE2KSB8IChzb3VyY2VbMV0gPDwgMTYpOwotICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291
cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyBhIGZ1bGwgRFhUNSBibG9jayBpbiB0
aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDVCbG9ja0Z1bGwoY29uc3Qg
dW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewotICAvLyBBIERYVDUg
YmxvY2sgbGF5b3V0IGlzOgotICAvLyBbMF0gICAgYWxwaGEwLgotICAvLyBbMV0gICAgYWxwaGEx
LgotICAvLyBbMi03XSAgYWxwaGEgYml0bWFwLCAzIGJpdHMgcGVyIHBpeGVsLgotICAvLyBbOC0x
NV0gYSBEWFQxIGJsb2NrLgotCi0gIC8vIFRoZSBhbHBoYSBiaXRtYXAgZG9lc24ndCBlYXNpbHkg
bWFwIGxpbmVzIHRvIGJ5dGVzLCBzbyB3ZSBoYXZlIHRvCi0gIC8vIGludGVycHJldCBpdCBjb3Jy
ZWN0bHkuICBFeHRyYWN0ZWQgZnJvbQotICAvLyBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvcmVnaXN0
cnkvc3BlY3MvRVhUL3RleHR1cmVfY29tcHJlc3Npb25fczN0Yy50eHQgOgotICAvLwotICAvLyAg
IFRoZSA2ICJiaXRzIiBieXRlcyBvZiB0aGUgYmxvY2sgYXJlIGRlY29kZWQgaW50byBvbmUgNDgt
Yml0IGludGVnZXI6Ci0gIC8vCi0gIC8vICAgICBiaXRzID0gYml0c18wICsgMjU2ICogKGJpdHNf
MSArIDI1NiAqIChiaXRzXzIgKyAyNTYgKiAoYml0c18zICsKLSAgLy8gICAgICAgICAgICAgICAg
ICAgMjU2ICogKGJpdHNfNCArIDI1NiAqIGJpdHNfNSkpKSkKLSAgLy8KLSAgLy8gICBiaXRzIGlz
IGEgNDgtYml0IHVuc2lnbmVkIGludGVnZXIsIGZyb20gd2hpY2ggYSB0aHJlZS1iaXQgY29udHJv
bCBjb2RlCi0gIC8vICAgaXMgZXh0cmFjdGVkIGZvciBhIHRleGVsIGF0IGxvY2F0aW9uICh4LHkp
IGluIHRoZSBibG9jayB1c2luZzoKLSAgLy8KLSAgLy8gICAgICAgY29kZSh4LHkpID0gYml0c1sz
Kig0KnkreCkrMS4uMyooNCp5K3gpKzBdCi0gIC8vCi0gIC8vICAgd2hlcmUgYml0IDQ3IGlzIHRo
ZSBtb3N0IHNpZ25pZmljYW50IGFuZCBiaXQgMCBpcyB0aGUgbGVhc3QKLSAgLy8gICBzaWduaWZp
Y2FudCBiaXQuCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNvdXJjZUJ5dGVzID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihzb3VyY2Up
KTsKLSAgdW5zaWduZWQgY2hhciogZGVzdEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KHN0YXRpY19jYXN0PHZvaWQqPihkZXN0KSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzBfMSA9
IHNvdXJjZUJ5dGVzWzJdICsgMjU2ICogKHNvdXJjZUJ5dGVzWzNdICsgMjU2ICogc291cmNlQnl0
ZXNbNF0pOwotICB1bnNpZ25lZCBpbnQgbGluZV8yXzMgPSBzb3VyY2VCeXRlc1s1XSArIDI1NiAq
IChzb3VyY2VCeXRlc1s2XSArIDI1NiAqIHNvdXJjZUJ5dGVzWzddKTsKLSAgLy8gc3dhcCBsaW5l
cyAwIGFuZCAxIGluIGxpbmVfMF8xLgotICB1bnNpZ25lZCBpbnQgbGluZV8xXzAgPSAoKGxpbmVf
MF8xICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGlu
ZV8wXzEgJiAweGZmZjAwMCkgPj4gMTIpOwotICAvLyBzd2FwIGxpbmVzIDIgYW5kIDMgaW4gbGlu
ZV8yXzMuCi0gIHVuc2lnbmVkIGludCBsaW5lXzNfMiA9ICgobGluZV8yXzMgJiAweDAwMGZmZikg
PDwgMTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lXzJfMyAmIDB4ZmZmMDAw
KSA+PiAxMik7Ci0gIGRlc3RCeXRlc1swXSA9IHNvdXJjZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNb
MV0gPSBzb3VyY2VCeXRlc1sxXTsKLSAgZGVzdEJ5dGVzWzJdID0gbGluZV8zXzIgJiAweGZmOwot
ICBkZXN0Qnl0ZXNbM10gPSAobGluZV8zXzIgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0
XSA9IChsaW5lXzNfMiAmIDB4ZmYwMDAwKSA+PiAxNjsKLSAgZGVzdEJ5dGVzWzVdID0gbGluZV8x
XzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbNl0gPSAobGluZV8xXzAgJiAweGZmMDApID4+IDg7Ci0g
IGRlc3RCeXRlc1s3XSA9IChsaW5lXzFfMCAmIDB4ZmYwMDAwKSA+PiAxNjsKLQotICAvLyBBbmQg
ZmxpcCB0aGUgRFhUMSBibG9jayB1c2luZyB0aGUgYWJvdmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5
RFhUMUJsb2NrRnVsbChzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBm
aXJzdCAyIGxpbmVzIG9mIGEgRFhUNSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMg
dm9pZCBGbGlwQ29weURYVDVCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVu
c2lnbmVkIGludCogZGVzdCkgewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNlKSk7Ci0gIHVuc2lnbmVkIGNoYXIqIGRl
c3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDx2b2lkKj4o
ZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEgPSBzb3VyY2VCeXRlc1syXSArIDI1NiAq
IChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5dGVzWzRdKTsKLSAgdW5zaWduZWQgaW50
IGxpbmVfMV8wID0gKChsaW5lXzBfMSAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKGxpbmVfMF8xICYgMHhmZmYwMDApID4+IDEyKTsKLSAgZGVzdEJ5dGVz
WzBdID0gc291cmNlQnl0ZXNbMF07Ci0gIGRlc3RCeXRlc1sxXSA9IHNvdXJjZUJ5dGVzWzFdOwot
ICBkZXN0Qnl0ZXNbMl0gPSBsaW5lXzFfMCAmIDB4ZmY7Ci0gIGRlc3RCeXRlc1szXSA9IChsaW5l
XzFfMCAmIDB4ZmYwMCkgPj4gODsKLSAgZGVzdEJ5dGVzWzRdID0gKGxpbmVfMV8wICYgMHhmZjAw
MDApID4+IDE2OwotICBGbGlwQ29weURYVDFCbG9ja0hhbGYoc291cmNlICsgMiwgZGVzdCArIDIp
OwotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICppbnB1dCkgewogICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKICAg
ICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8
IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAgQVNTRVJUKGlucHV0UGl0Y2ggJSA4ID09
IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDggPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNp
Z25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4o
aW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4ob3V0cHV0KTsKIAotICAgIC8vIFJvdW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMg
bGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAg
ICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9zcyAqIDI7CisgICAgUkVDVCBsb2NrUmVjdCA9
IHsKKyAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKKyAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5
b2Zmc2V0ICsgaGVpZ2h0CisgICAgfTsKIAotICAgIHN3aXRjaCAoaGVpZ2h0KQorICAgIEQzRExP
Q0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxv
Y2tSZWN0KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewotICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gMikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAg
ICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3gg
KyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNy
b3NzOyB4ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQx
QmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAl
IDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsr
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGlu
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAq
IG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBGbGlwQ29weURYVDFCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm47CiAgICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkRFhUM0RhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAg
IEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAg
IEFTU0VSVChpbnB1dFBpdGNoICUgMTYgPT0gMCk7Ci0gICAgQVNTRVJUKG91dHB1dFBpdGNoICUg
MTYgPT0gMCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oaW5wdXQpOwotICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4ob3V0cHV0KTsKLQotICAgIC8vIFJv
dW5kIHdpZHRoIHVwIGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIDQuCi0gICAgaW50IGJsb2Nrc0Fj
cm9zcyA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgaW50c0Fjcm9zcyA9IGJsb2Nrc0Fjcm9z
cyAqIDQ7Ci0KLSAgICBzd2l0Y2ggKGhlaWdodCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIC8vIGp1c3QgY29weSB0aGUgYmxvY2sKLSAgICAgICAg
ICAgICAgICBkZXN0W3hdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDFd
ID0gc291cmNlW3ggKyAxXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAyXSA9IHNvdXJjZVt4
ICsgMl07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgM10gPSBzb3VyY2VbeCArIDNdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUM0Jsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0
ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQgJSA0ID09IDApOwotICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiAx
Nik7CiAKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHgg
Kz0gNCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBGbGlwQ29weURYVDNC
bG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gQ29t
cHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1Gb3JtYXQpOworICAgIEdMc2l6ZWkg
aW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1Gb3JtYXQpOworICAg
IGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJvd3M7ICsraSkKKyAgICB7CisgICAgICAgIG1lbWNweSgodm9pZCopKChCWVRFKilsb2Nr
ZWQucEJpdHMgKyBpICogbG9ja2VkLlBpdGNoKSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICog
aW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwogICAgIH0KLX0KIAotdm9pZCBJbWFnZTo6bG9hZERY
VDVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9
PSAwKTsKLSAgICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9
PSAxKTsKLSAgICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRw
dXRQaXRjaCAlIDE2ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25l
ZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0K
LSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGlu
dCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBi
bG9ja3NBY3Jvc3MgKiA0OwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBj
YXNlIDE6Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0g
NCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2Nr
Ci0gICAgICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBk
ZXN0W3ggKyAxXSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0g
PSBzb3VyY2VbeCArIDJdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3gg
KyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDVCbG9ja0hhbGYoc291cmNl
ICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4
b2Zmc2V0ICogMTYpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRz
QWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBG
bGlwQ29weURYVDVCbG9ja0Z1bGwoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB1bmxv
Y2soKTsKIH0KIAogLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Ig
bm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRl
eHR1cmVzCkBAIC0xMTIxLDkgKzk2Myw4IEBAIHZvaWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW8KICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAg
IH0KIAotICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBkZXNjcmlwdGlvbi5IZWlnaHQpOwotICAgIGludCBkZXN0WU9mZnNldCA9IHRy
YW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIG1IZWlnaHQpOwotICAgIFJFQ1Qg
ZGVzdFJlY3QgPSB7eG9mZnNldCwgZGVzdFlPZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgZGVzdFlP
ZmZzZXQgKyBoZWlnaHR9OworICAgIFJFQ1Qgc291cmNlUmVjdCA9IHt4LCB5LCB4ICsgd2lkdGgs
IHkgKyBoZWlnaHR9OworICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9m
ZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsKIAogICAgIGlmIChpc1JlbmRlcmFibGVG
b3JtYXQoKSkKICAgICB7CkBAIC0xMjY3LDkgKzExMDgsOSBAQCB2b2lkIEltYWdlOjpjb3B5KEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvCiAgICAgbURpcnR5ID0gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0
b3JhZ2U6OlRleHR1cmVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogbVJlbmRlclRh
cmdldChyZW5kZXJUYXJnZXQpLAotICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0
dXJlUG9vbChtUmVuZGVyVGFyZ2V0KSksCitUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2Uo
RFdPUkQgdXNhZ2UpCisgICAgOiBtRDNEVXNhZ2UodXNhZ2UpLAorICAgICAgbUQzRFBvb2woZ2V0
RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbCh1c2FnZSkpLAogICAgICAgbVRleHR1cmVTZXJpYWwo
aXNzdWVUZXh0dXJlU2VyaWFsKCkpCiB7CiB9CkBAIC0xMjgwLDcgKzExMjEsNyBAQCBUZXh0dXJl
U3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkKIAogYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5k
ZXJUYXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJldHVy
biAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCkpICE9IDA7CiB9CiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0
CkBAIC0xMjkzLDYgKzExMzQsMTEgQEAgRDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1EM0RQb29sOwogfQogCitEV09SRCBUZXh0dXJlU3RvcmFnZTo6
Z2V0VXNhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtRDNEVXNhZ2U7Cit9CisKIHVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1UZXh0dXJlU2VyaWFsOwpAQCAtMTQ1MCwxNSArMTI5Niw3IEBAIHZvaWQgVGV4dHVyZTo6
c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ24KIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAg
ICAgewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwg
aW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUoKSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAgICAgIGltYWdlLT5s
b2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFn
ZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogfQpAQCAtMTQ2Nyw1MiArMTMwNSwxNiBAQCB2b2lkIFRleHR1
cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxM
KQogICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2ggPSBD
b21wdXRlQ29tcHJlc3NlZFBpdGNoKGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0Rm9ybWF0
KCkpOwotICAgICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZShp
bWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0Rm9ybWF0KCkp
OwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0
V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0K
LQorICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CiAgICAgfQogfQogCiBib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7
Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKElzQ29tcHJlc3NlZChpbWFnZS0+Z2V0Rm9ybWF0KCkpKQotICAg
IHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbWFnZS0+Z2V0Rm9ybWF0KCkpCi0g
ICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAg
ICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1hZ2Ut
PmxvY2soJmxvY2tlZCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgdHJhbnNmb3Jt
UGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgaW1hZ2UtPmdldEhlaWdodCgpKSwgd2lkdGgs
IGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7CiAgICAgfQogCkBAIC0xNTIxLDM3ICsxMzIzLDkgQEAgYm9vbCBUZXh0dXJlOjpzdWJJbWFn
ZShHTGludCB4b2Zmc2V0LCBHTAogCiBib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywg
SW1hZ2UgKmltYWdlKQogewotICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWFnZS0+Z2V0V2lk
dGgoKSB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1hZ2UtPmdldEhlaWdodCgpKQotICAgIHsKLSAg
ICAgICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGdldEludGVybmFsRm9ybWF0KCkpCi0gICAgewotICAg
ICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBSRUNUIHVw
ZGF0ZVJlZ2lvbjsKLSAgICAgICAgdXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OwotICAgICAg
ICB1cGRhdGVSZWdpb24ucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHVwZGF0ZVJl
Z2lvbi5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgICAgICB1cGRhdGVSZWdpb24udG9w
ID0geW9mZnNldDsKLQotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gaW1hZ2UtPmxvY2soJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbik7Ci0KLSAg
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIGZvcm1hdCk7Ci0gICAg
ICAgICAgICBpbnQgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWln
aHQsIGZvcm1hdCk7Ci0gICAgICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZz
ZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWln
aHQoKSksIHdpZHRoLCBoZWlnaHQsIC1pbnB1dFBpdGNoLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4ocGl4ZWxzKSArIGlucHV0U2l6ZSAtIGlucHV0UGl0Y2gsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKLSAgICAgICAgICAgIGltYWdlLT51bmxvY2soKTsKLSAgICAgICAgfQotCisgICAg
ICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKQEAg
LTE2NjcsMjMgKzE0NDEsMjcgQEAgYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURp
cmVjdAogICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3Rv
cmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFn
ZSh0cnVlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNl
cmlhbCgpKQorVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0
dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UoRDNEVVNBR0VfUkVOREVSVEFS
R0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlh
bCgpKQogewogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CiB9CiAKLVRleHR1cmVTdG9y
YWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9y
YWdlKHJlbmRlclRhcmdldCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50
IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChS
ZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQogewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVs
cywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZvcm1hdCwg
Z2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAod2lk
dGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTY5NSw2ICsxNDcz
LDggQEAgVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQogICAgIH0KIH0KIAor
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3Jh
Z2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKIHsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0xNzc4LDE5ICsxNTU4LDIwIEBAIEdMc2l6ZWkgVGV4dHVy
ZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLUdMZW51
bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK0dMZW51bSBUZXh0dXJlMkQ6
OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW1h
Z2VBcnJheVswXS5nZXRGb3JtYXQoKTsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VHlwZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKTsKKyAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29u
c3QKK0QzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEQzREZNVF9VTktOT1dOOwogfQogCiB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlKQpAQCAtMTkzOCwxOSArMTcxOSwxNyBAQCB2b2lkIFRleHR1cmUyRDo6Y29w
eUltYWdlKEdMaW50IGxldmVsLCBHCiAKICAgICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0
ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJF
Q1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0gY2xhbXAo
c291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkp
OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJjZVJlY3QucmlnaHQs
IDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBz
b3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAwLCBzb3VyY2UtPmdl
dENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQotICAgICAgICAgICAgR0xpbnQgZGVzdFlP
ZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoMCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAg
ICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4
ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAgICBz
b3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChs
ZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChkZXN0KQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1h
dCwgMCwgZGVzdFlPZmZzZXQsIGRlc3QpOworICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+
Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7CiAgICAg
ICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xOTkwLDE5ICsxNzY5LDE4IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVt
IHRhcmcKIAogICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwgc291cmNl
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1wKHNvdXJj
ZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90dG9tLCAw
LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIFJF
Q1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAg
ICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVj
dC50b3AgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0Owog
Ci0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCh5
b2Zmc2V0LCBoZWlnaHQsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSk7CiAKICAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChsZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChkZXN0KQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3Qs
IG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBkZXN0WU9mZnNldCwgZGVzdCk7
CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNl
UmVjdCwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3Qp
OwogICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjAxNiwxMCArMTc5NCwxMCBAQCB2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNp
emVpIGxldmVscywgCiAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVy
bmFsZm9ybWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZv
cm1hdCk7CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShm
b3JtYXQsIHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10
LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCB3aWR0aCwgaGVpZ2h0
LCByZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQo
bGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBtSW1tdXRhYmxl
ID0gdHJ1ZTsKIAogICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVs
KyspCkBAIC0yMDc0LDggKzE4NTIsOCBAQCBib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxl
dGUoKSBjb25zCiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAotICAgIGlm
ICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0
KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxP
QVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Cisg
ICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0
Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAg
ICBpZiAobU1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgbU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAg
ewpAQCAtMjE1Nyw5ICsxOTM1LDE0IEBAIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRl
KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJl
c3NlZCgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
KTsKK30KKworYm9vbCBUZXh0dXJlMkQ6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICByZXR1cm4g
SXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKIH0KIAogSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNzMs
MTEgKzE5NTYsMTEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQogICAgIEdMc2l6
ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRp
b25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFy
cmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdLmdldEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdl
KGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgCiAg
ICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yMjE3LDkgKzIwMDAs
MTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCiAgICAgICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwogICAgICAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwogICAgICAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGZv
cm1hdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEM0RGT1JNQVQg
ZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIERXT1JEIGQz
ZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3Rv
cmFnZTJEKGxldmVscywgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKKyAgICAgICAgbmV3
VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCiAg
ICAgICAgIHsKQEAgLTIyMzIsOCArMjAxNiw4IEBAIHZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQogICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRl
c3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICB7
ICAgCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgZGVzdC0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgp
OworICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjMxNSwxMiArMjA5OSwxNCBAQCBSZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6
Z2V0UmVuZGVyYnVmZmVyCiAKICAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKICAg
ICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBu
ZXcgUmVuZGVyYnVmZmVyVGV4dHVyZSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJl
MkQodGhpcywgdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5
OwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQogewogICAgIEFTU0VSVCh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCk7CkBAIC0yMzMzLDYgKzIxMTksMzMgQEAgSURpcmVjdDNEU3Vy
ZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVAogCiAgICAgdXBkYXRlVGV4dHVyZSgpOwogICAg
IAorICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNE
ZXB0aCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsKK30KKworLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xl
bnVtIHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworCisg
ICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmIChn
ZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICB1cGRhdGVUZXh0dXJlKCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1
YWxseSBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgoMCkpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNl
TGV2ZWwoMCk7CiB9CiAKQEAgLTIzNTMsMTggKzIxNjYsMjIgQEAgVGV4dHVyZVN0b3JhZ2UgKlRl
eHR1cmUyRDo6Z2V0U3RvcmFnZShibwogICAgIHJldHVybiBtVGV4U3RvcmFnZTsKIH0KIAotVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwOjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNE
Rk9STUFUIGZvcm1hdCwgaW50IHNpemUsIGJvb2wgcmVuZGVyVGFyZ2V0KQotICAgIDogVGV4dHVy
ZVN0b3JhZ2UocmVuZGVyVGFyZ2V0KSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JE
IHVzYWdlLCBpbnQgc2l6ZSkKKyAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkK
IHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQogICAgIG1U
ZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRl
eHR1cmUoc2l6ZSwgbGV2ZWxzLCBpc1JlbmRlclRhcmdldCgpID8gRDNEVVNBR0VfUkVOREVSVEFS
R0VUIDogMCwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMg
c2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFu
ZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBp
ZiAoc2l6ZSA+IDApCiAgICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRl
eHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIzNzYsNiArMjE5Myw4IEBAIFRleHR1cmVT
dG9yYWdlQ3ViZU1hcDo6flRleHR1cmVTdG9yYWdlQ3UKICAgICB9CiB9CiAKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CkBAIC0yNDU0LDM1ICsyMjczLDM2IEBA
IEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gR0xf
VEVYVFVSRV9DVUJFX01BUDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVsw
XVtsZXZlbF0uZ2V0V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAw
OwogfQogCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNv
bnN0CitHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdldEhl
aWdodCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xl
dmVsXS5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVu
dW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0VHlwZSgpIGNvbnN0CitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFs
Rm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBt
SW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXS5nZXRGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBHTF9OT05FOwogfQogCi1EM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgp
IGNvbnN0CitEM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0RDNERm9ybWF0KCk7CisgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCld
W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRf
VU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQpAQCAtMjU4
Miw4ICsyNDAyLDggQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNTYW1wbGVyQ29tcGxldGUoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9IQUxGX0ZMT0FU
X09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCisg
ICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gs
IDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlcigpKSB8fAorICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5z
dXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCiAgICAgewogICAgICAgICBpZiAobU1hZ0Zp
bHRlciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewpAQCAtMjY3OSw5
ICsyNDk5LDkgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBj
b25zdAorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxG
b3JtYXQoKSk7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSk7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6
OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTI2OTQsMTEgKzI1MTQsMTEgQEAgdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgpCiB7CiAgICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVs
cyhzaXplLCAwKTsKLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
RDNERm9ybWF0KCk7Ci0gICAgY29uc3QgYm9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKTsKKyAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10
LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBmb3JtYXQsIHNpemUsIHJl
bmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2Ut
PmlzTWFuYWdlZCgpKQogICAgIHsKQEAgLTI3NDIsOSArMjU2MiwxMCBAQCB2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnCiAgICAgewogICAgICAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwogICAgICAgICBHTGludCBsZXZlbHMgPSBj
cmVhdGlvbkxldmVscyhzaXplLCAwKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7CisgICAgICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSk7CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAobGV2ZWxzLCBmb3JtYXQsIHNpemUsIHRydWUpOworICAgICAgICBuZXdUZXhTdG9yYWdl
ID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNp
emUpOwogCiAgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQogICAgICAgICB7CkBAIC0y
NzU5LDggKzI1ODAsOCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJn
CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJj
ZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNl
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0yODQ3LDE5ICsyNjY4LDE3IEBAIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGEKIAogICAgICAgICBpZiAod2lkdGgg
PiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNU
IHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNv
dXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAw
LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291
cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zm
c2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KDAsIGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWlu
ZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC5y
aWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAg
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAogICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFy
Z2V0LCBsZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChkZXN0KQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3Qs
IGZvcm1hdCwgMCwgZGVzdFlPZmZzZXQsIGRlc3QpOworICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7
CiAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0yOTAzLDE5ICsyNzIyLDE3IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJ
bWFnZShHTGVudW0KIAogICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IGNsYW1wKHNvdXJjZVJlY3QubGVmdCwgMCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QudG9wID0gY2xhbXAoc291cmNlUmVjdC50b3AsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IGNsYW1w
KHNvdXJjZVJlY3QucmlnaHQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgo
KSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IGNsYW1wKHNvdXJjZVJlY3QuYm90
dG9tLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLQotICAgICAg
ICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwg
aGVpZ2h0LCBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5nZXRXaWR0aCgpKTsKKyAgICAg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICAgICAg
c291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsg
aGVpZ2h0OwogCiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKIAogICAgICAgICAgICAgaWYg
KGRlc3QpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5
KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCks
IHhvZmZzZXQsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVy
KCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRG
b3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7CiAgICAgICAgICAgICAgICAgZGVzdC0+
UmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yOTI5LDEwICsyNzQ2LDEw
IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXYKICAgICBHTGVudW0g
Zm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIEdMZW51bSB0
eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKICAgICBEM0RGT1JNQVQgZDNk
Zm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgY29uc3Qg
Ym9vbCByZW5kZXJUYXJnZXQgPSBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYg
KG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKyAgICBEV09SRCBk
M2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdl
Q3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgc2l6ZSwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCBzaXplKTsKICAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKIAogICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCkBAIC0zMDQ5LDEyICsyODY2LDE0IEBAIFJlbmRl
cmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmIKIAogICAgIGlmIChtRmFjZVByb3hp
ZXNbZmFjZV0gPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5l
dyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0
KSk7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwg
bmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOwogICAgIH0KIAog
ICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291
bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3Vy
ZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKTsKQEAgLTMwODcsNCArMjkwNiw0IEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0U3RvcmEKICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDkgKzUzLDYgQEAgY2xhc3MgSW1hZ2UKICAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0
cnVlO30KICAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9CiAKLSAgICBIUkVT
VUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwot
ICAgIHZvaWQgdW5sb2NrKCk7Ci0KICAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0
OwogICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIApAQCAtNzAsNTYgKzY3LDUy
IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCB1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CiAKICAgICB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0
ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2
b2lkIGxvYWRBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRBbHBo
YURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkQWxwaGFGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAorICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1p
bmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZEx1bWluYW5jZUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9h
dERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRS
R0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVE
YXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
dm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRS
R0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxv
YWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRCR1JBRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKICAg
ICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQxRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWREWFQzRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWREWFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKICAgICB2
b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXQpOwogCkBAIC0xMjgsNiArMTIxLDkgQEAgY2xhc3MgSW1hZ2UKIAogICAgIHZvaWQgY3Jl
YXRlU3VyZmFjZSgpOwogCisgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRS
ZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKKyAgICB2b2lkIHVubG9jaygpOworCiAgICAgR0xzaXpl
aSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OwogICAgIEdMZW51bSBtRm9ybWF0OwpAQCAt
MTQ0LDIwICsxNDAsMjEgQEAgY2xhc3MgSW1hZ2UKIGNsYXNzIFRleHR1cmVTdG9yYWdlCiB7CiAg
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7
CisgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOwogCiAgICAgdmlydHVh
bCB+VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsK
ICAgICBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwogICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0
OworICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1
cmVTZXJpYWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwogCiAgIHByaXZhdGU6CiAgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKIAotICAgIGNvbnN0IGJvb2wg
bVJlbmRlclRhcmdldDsKKyAgICBjb25zdCBEV09SRCBtRDNEVXNhZ2U7CiAgICAgY29uc3QgRDNE
UE9PTCBtRDNEUG9vbDsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGludCBtVGV4dHVyZVNlcmlhbDsK
QEAgLTE5MCwxNCArMTg3LDcgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVj
dAogICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwogICAgIEdMZW51bSBnZXRVc2FnZSgpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBEM0RGT1JN
QVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBj
b25zdCA9IDA7CiAKICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsKICAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0g
MDsKQEAgLTIxNiw4ICsyMDYsNiBAQCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2Jq
ZWN0CiAgICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0
aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNy
ZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciBy
ZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCiAKICAgcHJvdGVjdGVkOgotICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlOwotCiAgICAgdm9pZCBzZXRJbWFnZShH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsK
ICAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CiAgICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscywgSW1hZ2UgKmltYWdlKTsKQEAgLTI1OCw3ICsyNDYsNyBAQCBjbGFzcyBUZXh0dXJlU3Rv
cmFnZTJEIDogcHVibGljIFRleHR1cmVTCiB7CiAgIHB1YmxpYzoKICAgICBleHBsaWNpdCBUZXh0
dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7Ci0gICAgVGV4
dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOwogCkBAIC0yODYsMTEgKzI3
NCwxMiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgdmlydHVhbCBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21w
cmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKQEAgLTMwMSw3ICsy
OTAsNiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsKIApAQCAtMzA5LDYgKzI5NywxMSBAQCBjbGFzcyBUZXh0
dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKIAorICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpOworCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7CiAKQEAgLTMxNiw3ICszMDks
NiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgYm9v
bCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7CkBAIC0zNDEsNyArMzMzLDcgQEAgY2xhc3MgVGV4
dHVyZTJEIDogcHVibGljIFRleHR1cmUKIGNsYXNzIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRh
cmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBm
b3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3Rv
cmFnZUN1YmVNYXAoKTsKIApAQCAtMzY5LDExICszNjEsMTEgQEAgY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
R0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3Jt
YXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEltYWdlUG9zWChHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAg
ICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOwpAQCAtMzkxLDcgKzM4Myw2IEBAIGNsYXNzIFRleHR1cmVD
dWJlTWFwIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNz
ZWQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKIApAQCAt
Mzk5LDYgKzM5MCwxMCBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAK
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0gZmFjZSk7CiAKKyAgcHJv
dGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsKKyAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdl
dCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1
YmVNYXApOwogCkBAIC00MDYsNyArNDAxLDYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2Uo
Ym9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFu
YWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgpAQCAtMTI4LDEwICsxMjksMTEgQEAgR0xl
bnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogCiAgICAgY29uc3QgVmVydGV4
QXR0cmlidXRlQXJyYXkgJmF0dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4QXR0cmlidXRlcygp
OwogICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
KyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOwogCiAgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFtLT5nZXRTZW1hbnRp
Y0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgICAgIHRyYW5zbGF0ZWRbYXR0cmli
dXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGF0dHJp
YnV0ZUluZGV4KSAhPSAtMSk7CiAgICAgfQogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSByZXF1aXJl
ZCBzdG9yYWdlIHNpemUgcGVyIHVzZWQgYnVmZmVyLCBhbmQgaW52YWxpZGF0ZSBzdGF0aWMgYnVm
ZmVycyB0aGF0IGRvbid0IGNvbnRhaW4gbWF0Y2hpbmcgYXR0cmlidXRlcwpAQCAtNDQ4LDggKzQ1
MCw4IEBAIHN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW0KIHRlbXBsYXRl
IDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+
Ojp0eXBlPiB7IH07CiAKIC8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28g
dGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1h
bGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxH
TF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNl
LCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+
IDogZ2w6OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBD
b252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRv
RmxvYXQ8R0xpbnQsIDE2PiB7IH07CiAKIC8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNl
ZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURl
ZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQogLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5v
dC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiAr
MjQsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCkBAIC01NCwyNiArNTUsMTIxIEBAIGJvb2wgdmFsaWRJbWFnZVNpemUo
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRh
dGVTdWJJbWFnZVBhcmFtcyhib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlw
ZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIGNoZWNr
VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgLy8g
dmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cp
CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgY2FzZSBHTF9BTFBI
QToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgIGNhc2UgR0xfREVQVEhf
U1RFTkNJTF9PRVM6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIGludmFs
aWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCisgICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8
dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgorICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2Fz
ZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2Up
OworICAgIH0KK30KK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3Nl
ZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgaWYgKGNvbXByZXNz
ZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4
dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQgIT0g
R0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICBp
ZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChjb21wcmVzc2VkKQogICAgIHsKLSAgICAg
ICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkg
fHwgCisgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0
V2lkdGgoMCkpIHx8CiAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0
ZXh0dXJlLT5nZXRIZWlnaHQoMCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKQEAgLTg5LDYgKzE4NSw0MyBAQCBib29s
IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVzc2VkLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICB9CisK
KyAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKGNvbXByZXNzZWQpCisgICAgeworICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdp
ZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkpIHx8CisgICAgICAgICAgICAoaGVp
Z2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+
IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8CisgICAgICAgIHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCiAvLyBjaGVjayBmb3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQg
dHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwogYm9vbCB2YWxpZFJlYWRGb3JtYXRU
eXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMTA5NCw3ICsxMjI3LDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRAogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVlLCB3aWR0aCwgaGVpZ2h0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOwogICAgICAgICAgICAgICAgIH0KQEAgLTExMDIsNyArMTIzNSw3IEBAIHZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQKICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJ
c0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyh0cnVl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVy
ZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKHRydWUs
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwg
dGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0K
QEAgLTEyNTgsNiArMTM5MSwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdM
ZW51bSB0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VT
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBA
IC0xMzU1LDIzICsxNTAxLDMxIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQo
R0xlbnUKICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpOwogICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0
ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9S
R0JBOwogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUs
IHRleDJkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleDJkLT5n
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleDJk
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0
LCBsZXZlbCwgR0xfTk9ORSwgdGV4Y3ViZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1
cmVGb3JtYXQgPSB0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OworICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgICAgICAgICAvLyBbT3Bl
bkdMIEVTIDIuMC4yNF0gdGFibGUgMy45CiAgICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3Jt
YXQpCkBAIC0xNDE0LDYgKzE1NjgsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFn
ZTJEKEdMZW51CiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKICAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KQEAgLTIzMDYsMTkgKzI0NjMsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh0ZXgt
PmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0K
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAh
PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKQEAgLTIzMjYsMTEgKzI0ODUsMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRU
YXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVY
VFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRh
cmdldCwgbGV2ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CkBAIC0yNDQwLDI4ICsyNjA2LDQxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2Vu
ZXJhdGVNaXBtYXAoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+Z2VuZXJhdGVN
aXBtYXBzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRl
TWlwbWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1
cmUtPmlzQ29tcHJlc3NlZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI3NTksMTIgKzI5MzgsMTMgQEAgaW50IF9fc3RkY2Fs
bCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludAogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCAtMSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFt
T2JqZWN0LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBw
cm9ncmFtQmluYXJ5LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMjE4LDcgKzMzOTgsNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvCiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkgIT0gTlVM
TDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkFMSURB
VEVfU1RBVFVTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc1Zh
bGlkYXRlZCgpOwpAQCAtMzI0MSw2ICszNDIxLDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9n
cmFtaXYoR0x1aW50IHBybwogICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX01B
WF9MRU5HVEg6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFj
dGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CkBAIC0zNzY2LDEyICszOTQ5LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
blVuaWZvcm1mdkVYVChHTHVpbnQKIAogICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sICZidWZTaXpl
LCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0zODAwLDEyICszOTg5LDE4IEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm8KIAogICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2Vk
KCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtZnYobG9j
YXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwg
cGFyYW1zKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg0MCwxNyArNDAzNSwxOCBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50CiAKICAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5p
c0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzg3OSwxNyArNDA3NSwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvCiAKICAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2
KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTM5MzAsMTIgKzQxMjcsMTMgQEAgaW50IF9fc3RkY2FsbCBnbEdldFVuaWZv
cm1Mb2NhdGlvbihHTHVpbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRV
bmlmb3JtTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+
Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTUwMTIsNiArNTIxMCwyNiBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5
IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQorICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVf
NV8xOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgLy8g
dmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCisgICAgICAgIC8vIC0gaW52
YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgICAgICAvLyAtIGludmFsaWQg
PGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KICAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgpAQCAtNTAyNCw3ICs1MjQyLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKQEAgLTUwMzYsNyArNTI1NCw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgY2FzZSBHTF9I
QUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgpAQCAt
NTA0OSw3ICs1MjY3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZQogICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgpAQCAtNTA1OCw3ICs1Mjc2LDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVz
IGFyZSBoYW5kbGVkIGJlbG93CkBAIC01MDY2LDggKzUyODQsMjcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRToKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfQU5HTEU6CiAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJvcmRlciAhPSAwKQpAQCAt
NTE0Niw2ICs1MzgzLDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVO
Q0lMX09FUzoKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0
dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0
cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKKyAgICAgICAgICAgICAg
ICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGlm
IChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01NDE2LDYgKzU2
NzAsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwg
dGV4dHVyZXMKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQpAQCAtNTQ4NCwxNCArNTc1
Nyw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVM
TCkKKyAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsgLy8gZXJy
b3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgogICAgICAgICB9CiAKICAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKQEAgLTU1MTcsMTEgKzU3
ODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRl
eHR1cmUoZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE9FU19k
ZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRo
X3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPT0g
MCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhv
ZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQorICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZz
ZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxp
Z25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUyOSw3ICs1ODE1LDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQogICAgICAgICAgICAg
ZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwg
Zm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwg
bGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1NzgsNyArNTg2NCwxMyBAQCB2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtNTYyMiw3ICs1OTE0LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihH
TGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihsb2NhdGlvbiwgY291
bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01NjY4LDcgKzU5NjYsMTMgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU3MTQsNyArNjAxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTc2MCw3ICs2MDcwLDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CkBAIC01ODA2LDcgKzYxMjIsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2
KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBj
b3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU4NTIsNyArNjE3NCwxMyBA
QCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwg
dikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNTg5OCw3ICs2MjI2LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRp
dihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01OTM4LDcgKzYyNzIsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IAogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
Y291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTk3OCw3ICs2MzE4LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCAKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2
YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KQEAgLTYwMTgsNyArNjM2NCwxMyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CkBAIC02MDU0LDcgKzY0MDYsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVzZVBy
b2dyYW0oR0x1aW50IHByb2dyCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
KQorICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NDYzLDYgKzY4MTUs
NzkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YQogICAgIH0KIH0K
IAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3JtYXQsIHZvaWQgKmJpbmFyeSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYnVmU2l6ZSA9ICVzLCBsZW5ndGggPSAw
eCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOworCisgICAgICAgICAg
ICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpsZW5ndGggPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3Jh
bSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0gMHgleCwgYmluYXJ5ID0gMHglMC44cCwg
bGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwg
bGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1hdCAhPSBHTF9QUk9HUkFNX0JJTkFSWV9B
TkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJpbmFyeShOVUxMKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNo
YXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24KQEAgLTY0OTksNyArNjkyNCw4
IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUKICAgICAgICAgeyJn
bFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKICAgICAgICAgeyJnbERy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdF
bGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgfTsKKyAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAorICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CiAKICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXpl
b2YoZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmNwcm9qCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw2
ICs0MDEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxQcm9ncmFtQmluYXJ5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDkxLDYg
KzQ5NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXFByb2dyYW1CaW5hcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLlxRdWVyeS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9u
IDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0
aWwuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjYgKzcwLDYgQEAgaW5saW5lIHVuc2lnbmVkIGlu
dCB1bm9ybShmbG9hdCB4KQogICAgIH0KIH0KIAotaW5saW5lIFJFQ1QgdHJhbnNmb3JtUGl4ZWxS
ZWN0KEdMaW50IHgsIEdMaW50IHksIEdMaW50IHcsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWln
aHQpCi17Ci0gICAgUkVDVCByZWN0ID0ge3gsCi0gICAgICAgICAgICAgICAgIHN1cmZhY2VIZWln
aHQgLSB5IC0gaCwKLSAgICAgICAgICAgICAgICAgeCArIHcsCi0gICAgICAgICAgICAgICAgIHN1
cmZhY2VIZWlnaHQgLSB5fTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIGludCB0cmFu
c2Zvcm1QaXhlbFlPZmZzZXQoR0xpbnQgeW9mZnNldCwgR0xpbnQgaCwgR0xpbnQgc3VyZmFjZUhl
aWdodCkKLXsKLSAgICByZXR1cm4gc3VyZmFjZUhlaWdodCAtIHlvZmZzZXQgLSBoOwotfQotCi1p
bmxpbmUgR0xlbnVtIGFkanVzdFdpbmRpbmcoR0xlbnVtIHdpbmRpbmcpCi17Ci0gICAgQVNTRVJU
KHdpbmRpbmcgPT0gR0xfQ1cgfHwgd2luZGluZyA9PSBHTF9DQ1cpOwotICAgIHJldHVybiB3aW5k
aW5nID09IEdMX0NXID8gR0xfQ0NXIDogR0xfQ1c7Ci19Ci0KIGlubGluZSBib29sIHN1cHBvcnRz
U1NFMigpCiB7CiAgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNzQsNiArMjc0LDE3IEBAIGJvb2wgSXND
b21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCiAgICAgfQogfQogCitib29sIElzRGVwdGhUZXh0dXJl
KEdMZW51bSBmb3JtYXQpCit7CisgICAgaWYgKGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQg
fHwKKyAgICAgICAgZm9ybWF0ID09IEdMX0RFUFRIX1NURU5DSUxfT0VTKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBSZXR1
cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGlu
dCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMjk0
LDcgKzMwNSwxMSBAQCBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVuCiAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNp
Z25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGlu
dCk7CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICAg
ICAgewpAQCAtMzMzLDUzICszNDgsNiBAQCBib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdM
ZW51bSB0YXJnCiAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKIH0KIAotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUg
YXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBDaGVja1Rl
eHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRj
aCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBHTGVudW0gRXh0
cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5h
bGZvcm1hdCkKQEAgLTQwNyw2ICszNzUsOSBAQCBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0g
aW50ZXJuYWxmb3JtCiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7CiAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7CiAgICAgICBjYXNlIEdM
X0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VYVDsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RF
UFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VTOwogICAg
ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9O
RTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0KIH0KQEAgLTQzOCw2ICs0MDksOSBAQCBHTGVudW0g
RXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFsZm9ybWF0CiAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZf
RkxPQVRfT0VTOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOworICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5U
OworICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4g
R0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOwogICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAogICAgIH0K
IH0KQEAgLTYzOCw5ICs2MTIsNiBAQCBEM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShH
TGVudW0gCiB7CiAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BP
U0lUSVZFX1g7CiAKLSAgICAvLyBNYXAgYSBjdWJlIG1hcCB0ZXh0dXJlIHRhcmdldCB0byB0aGUg
Y29ycmVzcG9uZGluZyAgRDNEIHN1cmZhY2UgaW5kZXguIE5vdGUgdGhhdCB0aGUKLSAgICAvLyBZ
IGZhY2VzIGFyZSBzd2FwcGVkIGJlY2F1c2UgdGhlIFkgY29vcmRpbmF0ZSB0byB0aGUgdGV4dHVy
ZSBsb29rdXAgaW50cmluc2ljIGZ1bmN0aW9ucwotICAgIC8vIGFyZSBuZWdhdGVkIGluIHRoZSBw
aXhlbCBzaGFkZXIuCiAgICAgc3dpdGNoIChjdWJlRmFjZSkKICAgICB7CiAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKQEAgLTY1MCwxMCArNjIxLDEwIEBAIEQzRENV
QkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKICAgICAgICAgZmFjZSA9IEQzRENV
QkVNQVBfRkFDRV9ORUdBVElWRV9YOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X05FR0FUSVZFX1k7CisgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOworICAgICAgICBm
YWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7CiAgICAgICAgIGJyZWFrOwogICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgIGZhY2UgPSBEM0RD
VUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKQEAgLTc2Nyw2ICs3MzgsNyBAQCBEM0RGT1JNQVQgQ29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVuCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAg
eworICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9OVUxM
OwogICAgICAgY2FzZSBHTF9SR0JBNDoKICAgICAgIGNhc2UgR0xfUkdCNV9BMToKICAgICAgIGNh
c2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CkBAIC03
OTQsNiArNzY2LDEwIEBAIG5hbWVzcGFjZSBkeDJlcwogCiB1bnNpZ25lZCBpbnQgR2V0U3RlbmNp
bFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpCiB7CisgICAgaWYgKHN0ZW5jaWxGb3JtYXQg
PT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gODsKKyAgICB9CiAgICAgc3dp
dGNoKHN0ZW5jaWxGb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgpAQCAt
OTA0LDYgKzg4MCwxMCBAQCB1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9y
CiAKIHVuc2lnbmVkIGludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQogewor
ICAgIGlmIChkZXB0aEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVy
biAyNDsKKyAgICB9CiAgICAgc3dpdGNoIChkZXB0aEZvcm1hdCkKICAgICB7CiAgICAgICBjYXNl
IEQzREZNVF9EMTZfTE9DS0FCTEU6ICByZXR1cm4gMTY7CkBAIC05NjUsNiArOTQ1LDE2IEBAIGJv
b2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm8KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK2Jvb2wgSXNEZXB0aFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQp
Cit7CisgICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKK30KKworYm9v
bCBJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAg
IHJldHVybiAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKIEdMc2l6ZWkgR2V0
U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQogewog
ICAgIGlmICh0eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQpAQCAtOTkxLDYgKzk4
MSwxMCBAQCBHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUCiAKIEdMZW51
bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCiB7CisgICAgaWYg
KGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzsKKyAgICB9CiAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgewogICAgICAg
Y2FzZSBEM0RGTVRfRDE2OgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
Niw2ICsxNiw5IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKK2NvbnN0IEQzREZPUk1BVCBEM0RG
TVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKK2Nv
bnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywn
VScsJ0wnLCdMJykpKTsKKwogbmFtZXNwYWNlIGdsCiB7CiAKQEAgLTM2LDkgKzM5LDkgQEAgR0xz
aXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbgogR0xzaXplaSBDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQpOwogR0xzaXplaSBDb21w
dXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQpOwogYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCk7Citib29sIElzRGVwdGhU
ZXh0dXJlKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51
bSB0YXJnZXQpOwogYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsK
LWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7
CiBHTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogR0xlbnVtIEV4
dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAKQEAgLTc5LDYgKzgyLDggQEAgR0x1
aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYQogR0x1aW50IEdldFN0ZW5jaWxT
aXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZP
Uk1BVCBzdXJmYWNlRm9ybWF0KTsKIGJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJm
YWNlRm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpOworYm9vbCBJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9y
bWF0KTsKIAogR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNB
TVBMRV9UWVBFIHR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjI3MzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAor
MjAxMi0wNy0xNiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisKKyAgICAgICAg
VXBkYXRlIEFOR0xFIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gcjExNzAsIHdpdGggdGhlIGZvbGxvd2luZyBt
b2RpZmljYXRpb25zOgorCisgICAgICAgICgxKSBVc2UgQmlzb24gMi4zIGluc3RlYWQgb2YgQmlz
b24gMi40LjIgdG8gZ2VuZXJhdGUgRXhwcmVzc2lvblBhcnNlci5jcHAgYW5kCisgICAgICAgIGds
c2xhbmdfdGFiLmNwcC4gSSBoYWQgdG8gbW9kaWZ5IEV4cHJlc3Npb25QYXJzZXIueSB0byBtYWtl
IGl0IGNvbXBhdGlibGUgd2l0aCBCaXNvbgorICAgICAgICAyLjMuIFRoZSBjaGFuZ2VzIGhhdmUg
YmVlbiBjb250cmlidXRlZCBiYWNrIHRvIEFOR0xFIGluIHIxMjI0LgorCisgICAgICAgICgyKSBD
b250aW51ZSB0byByZWNvZ25pemUgUU5YIGFzIFBPU0lYIGluIEFOR0xFLiBUaGlzIGhhcyBiZWVu
IGNvbnRyaWJ1dGVkIGJhY2sgdG8gQU5HTEUKKyAgICAgICAgaW4gcjEyMjMuCisKKyAgICAgICAg
KDMpIFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGlj
LmNwcCB0byBEaWFnbm9zdGljQmFzZS5jcHAuCisgICAgICAgIFJlbmFtZSBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCB0byBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAuCisKKyAgICAgICAgV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIEFOR0xF
J3MgbmV3IHByZXByb2Nlc3NvciwgdGhlcmUgd2VyZSB0d28gZmlsZXMgbmFtZWQgRGlhZ25vc3Rp
Yy5jcHAKKyAgICAgICAgaW4gQU5HTEUgdW5kZXIgZGlmZmVyZW50IGZvbGRlcnMuIFRoaXMgY2F1
c2VkIHByb2JsZW1zIG9uIHRoZSBRVCBidWlsZCB3aGVuIHRoZWlyIG9iamVjdAorICAgICAgICBm
aWxlcywgYm90aCBuYW1lZCBEaWFnbm9zdGljLm8sIHRyaWVkIHRvIGdvIGluIHRoZSBzYW1lIGZv
bGRlci4gUmVuYW1pbmcgb25lIG9mIHRoZW0gdG8KKyAgICAgICAgRGlhZ25vc3RpY0Jhc2UuY3Bw
IGF2b2lkcyB0aGlzIGNvbmZsaWN0LiBUaGUgc2FtZSBzaXR1YXRpb24gb2NjdXJyZWQgd2l0aAor
ICAgICAgICBEaXJlY3RpdmVIYW5kbGVyLmNwcC4gSSB3aWxsIHdvcmsgb24gY29udHJpYnV0aW5n
IHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUgZm9yIGZ1dHVyZQorICAgICAgICB1cGRhdGVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorCiAyMDEyLTA3LTE2ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5Ymlu
QGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5OiBmaXggb3V0cHV0IHdyaXRlIGxvZ2ljIHRvIHN1cHBvcnQgaW5jcmVtZW50YWwgYnVp
bGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjMyNCw3ICsyMzI0LDIw
IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRs
ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJl
Y3RpdmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1
dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRp
bnVpdHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTIzMzIsNiArMjM0
NSw3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91
dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVy
bVRyYXZlcnNlLmNwcApAQCAtMjM0NCwyMiArMjM1OCw1MiBAQCBJRiAoRU5BQkxFX1dFQkdMKQog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5j
cHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9v
bEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
UHJhZ21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlhZ25vc3RpY3NCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhh
bmRsZXJCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbi5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCisgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1
bmN0aW9uLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Nl
YXJjaFN5bWJvbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL1NoYWRlckxhbmcuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9TeW1ib2xUYWJsZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNo
b3J0Q2lyY3VpdC5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci91dGlsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTkxNyw4ICs1OTE3LDIxIEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50
VW5pb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNw
cCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGguY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaE91dHB1dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVp
dHkuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlz
Y29udGludWl0eS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0
ZWN0UmVjdXJzaW9uLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdFJlY3Vyc2lvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlhZ25vc3RpY3MuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKQEAgLTU5MzEsNiArNTk0NCw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVHbG9iYWxzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAgXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAgXApAQCAtNTk1NCw2ICs1OTY4LDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1By
YWdtYS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKQEAgLTU5NjMsNiArNTk3OCwyOSBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJz
ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9MZXhlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlv
bi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3By
ZXByb2Nlc3MuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmMgXApAQCAtNTk3Niw2ICs2MDE0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxp
dmUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
Y3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5j
cHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3Bw
IFwKQEAgLTU5ODQsNiArNjAyMywxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9yRVNTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKQEAgLTU5OTEsOCArNjAzNCw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JITFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBl
cy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dXRpbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQwMDIsNyArNDAwMiwxMyBAQCBj
b250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9Db21tb24uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
ZGVidWcuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGguaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2dsc2xhbmcuaCBcCkBAIC00MDE3LDExICs0MDIzLDI0IEBAIGNvbnRhaW5zKERFRklORVMsIFdU
Rl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01N
YXAuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVO
YW1lcy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oIFwK
KyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCiAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmggXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGlj
cy5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBc
CisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAorICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKICAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgg
XAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
aCBcCkBAIC00MDM2LDE0ICs0MDU1LDE3IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0Rf
R1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5o
IFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKyAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3Rp
bWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9V
bmZvbGRTaG9ydENpcmN1aXQuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91
dGlsLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0
aW9ucy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
IFwKQEAgLTQwNTYsMTMgKzQwNzgsMjEgQEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9H
UkFQSElDUz0xKQogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wu
Y3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKKyAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvZ2xzbGFuZ190YWIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0luZm9TaW5rLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFs
aXplLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxs
LmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmNwcCBcIAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRp
YXRlLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3Bw
IFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBc
CkBAIC00MDgwLDEwICs0MTEwLDEyIEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JB
UEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5j
cHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuY3BwIFwKLSAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5m
b2xkU2hvcnRDaXJjdWl0LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91
dGlsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUlu
Zm8uY3BwIFwKQEAgLTQwOTQsNiArNDEyNiwxNyBAQCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNF
XzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcHN0cnVjdC5jIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAor
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAorICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVy
LmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1ByZXByb2Nlc3Nvci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>
<flag name="review"
          id="161297"
          type_id="1"
          status="+"
          setter="mrowe"
    />
    <flag name="commit-queue"
          id="161309"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152623</attachid>
            <date>2012-07-16 15:21:07 -0700</date>
            <delta_ts>2012-07-17 10:48:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039-svn-4.patch</filename>
            <type>text/plain</type>
            <size>1220823</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjczOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDkxNSBAQAorMjAxMi0wNy0xNiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEFOR0xFIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gcjExNzAsIHdpdGggdGhlIGZv
bGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgICAgICAgICgxKSBVc2UgQmlzb24gMi4zIGluc3Rl
YWQgb2YgQmlzb24gMi40LjIgdG8gZ2VuZXJhdGUgRXhwcmVzc2lvblBhcnNlci5jcHAgYW5kCisg
ICAgICAgIGdsc2xhbmdfdGFiLmNwcC4gSSBoYWQgdG8gbW9kaWZ5IEV4cHJlc3Npb25QYXJzZXIu
eSB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBCaXNvbgorICAgICAgICAyLjMuIFRoZSBjaGFu
Z2VzIGhhdmUgYmVlbiBjb250cmlidXRlZCBiYWNrIHRvIEFOR0xFIGluIHIxMjI0LgorCisgICAg
ICAgICgyKSBDb250aW51ZSB0byByZWNvZ25pemUgUU5YIGFzIFBPU0lYIGluIEFOR0xFLiBUaGlz
IGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJhY2sgdG8gQU5HTEUKKyAgICAgICAgaW4gcjEyMjMuCisK
KyAgICAgICAgKDMpIFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljLmNwcCB0byBEaWFnbm9zdGljQmFzZS5jcHAuCisgICAgICAgIFJlbmFtZSBBTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmNwcCB0byBE
aXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAuCisKKyAgICAgICAgV2l0aCB0aGUgaW50cm9kdWN0aW9u
IG9mIEFOR0xFJ3MgbmV3IHByZXByb2Nlc3NvciwgdGhlcmUgd2VyZSB0d28gZmlsZXMgbmFtZWQg
RGlhZ25vc3RpYy5jcHAKKyAgICAgICAgaW4gQU5HTEUgdW5kZXIgZGlmZmVyZW50IGZvbGRlcnMu
IFRoaXMgY2F1c2VkIHByb2JsZW1zIG9uIHRoZSBRVCBidWlsZCB3aGVuIHRoZWlyIG9iamVjdAor
ICAgICAgICBmaWxlcywgYm90aCBuYW1lZCBEaWFnbm9zdGljLm8sIHRyaWVkIHRvIGdvIGluIHRo
ZSBzYW1lIGZvbGRlci4gUmVuYW1pbmcgb25lIG9mIHRoZW0gdG8KKyAgICAgICAgRGlhZ25vc3Rp
Y0Jhc2UuY3BwIGF2b2lkcyB0aGlzIGNvbmZsaWN0LiBUaGUgc2FtZSBzaXR1YXRpb24gb2NjdXJy
ZWQgd2l0aAorICAgICAgICBEaXJlY3RpdmVIYW5kbGVyLmNwcC4gSSB3aWxsIHdvcmsgb24gY29u
dHJpYnV0aW5nIHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUgZm9yIGZ1dHVyZQorICAgICAgICB1
cGRhdGVzLgorCisgICAgICAgICg0KSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBnbHNsYW5n
LnkgYW5kIEV4cHJlc3Npb25QYXJzZXIueToKKyAgICAgICAgI2RlZmluZSBZWUVOQUJMRV9OTFMg
MAorICAgICAgICAjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisKKyAgICAgICAgQmlzb24g
Mi4zIGRvZXNuJ3QgZmlyc3QgY2hlY2sgdGhhdCB0aGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgYmVm
b3JlIHJlYWRpbmcgdGhlaXIgdmFsdWUsCisgICAgICAgIHdoaWNoIGNhdXNlcyB0aGUgUVQgYnVp
bGQgdG8gZmFpbC4KKworICAgICAgICBXZSB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlIGluIHRoZSBz
YW1lIHdheSBpbiBDU1NHcmFtbWFyLnkuCisKKyAgICAgICAgSSB3aWxsIHdvcmsgb24gY29udHJp
YnV0aW5nIHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUuCisKKyAgICAgICAgKiBBTkdMRS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBzcmMv
YnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBzcmMvY29t
bW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmNwcDoKKyAgICAg
ICAgKGdsKToKKyAgICAgICAgKGdsOjpvdXRwdXQpOgorICAgICAgICAoZ2w6OnRyYWNlKToKKyAg
ICAgICAgKGdsOjpwZXJmQWN0aXZlKToKKyAgICAgICAgKGdsOjpTY29wZWRQZXJmRXZlbnRIZWxw
ZXI6OlNjb3BlZFBlcmZFdmVudEhlbHBlcik6CisgICAgICAgIChnbDo6U2NvcGVkUGVyZkV2ZW50
SGVscGVyOjp+U2NvcGVkUGVyZkV2ZW50SGVscGVyKToKKyAgICAgICAgKiBzcmMvY29tbW9uL3Zl
cnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24p
OgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChpc1dlYkdMQmFzZWRT
cGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChUQ29tcGlsZXI6
OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZVZlcnRleFNoYWRl
clRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RldGVjdERpc2Nv
bnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29wRGlzY29udGludWl0
eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRldGVjdExvb3BEaXNj
b250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0TG9vcERpc2NvbnRp
bnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWluc0xvb3BEaXNjb250
aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dHJhdmVyc2Up
OgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVuYXJ5KToKKyAg
ICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAoc2gpOgorICAgICAg
ICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0R3JhZGllbnRPcGVy
YXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoVERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdub3N0
aWNzOjp+VERpYWdub3N0aWNzKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6d3JpdGVJbmZvKToK
KyAgICAgICAgKFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyk6CisgICAgICAgIChURGlhZ25vc3Rp
Y3M6OnByaW50KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaDogQWRkZWQu
CisgICAgICAgIChURGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdub3N0aWNzOjppbmZvU2lu
ayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGdldEJlaGF2aW9yKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpURGly
ZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6flREaXJlY3RpdmVI
YW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFcnJvcik6CisgICAg
ICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlUHJhZ21hKToKKyAgICAgICAgKFREaXJlY3Rp
dmVIYW5kbGVyOjpoYW5kbGVFeHRlbnNpb24pOgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6
OmhhbmRsZVZlcnNpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVy
Lmg6IEFkZGVkLgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXIpOgorICAgICAgICAoVERpcmVj
dGl2ZUhhbmRsZXI6OnByYWdtYSk6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6ZXh0ZW5z
aW9uQmVoYXZpb3IpOgorICAgICAgICAqIHNyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5o
OgorICAgICAgICAoZ2V0QmVoYXZpb3JTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9J
bml0aWFsaXplLmNwcDoKKyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgorICAgICAgICAoVEJ1
aWx0SW5zOjppbml0aWFsaXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDogQWRkZWQuCisgICAg
ICAgIChJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAoRnJlZVBhcnNlQ29u
dGV4dEluZGV4KToKKyAgICAgICAgKEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQpOgorICAg
ICAgICAoRnJlZVBhcnNlQ29udGV4dCk6CisgICAgICAgIChHZXRHbG9iYWxQYXJzZUNvbnRleHQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0Lmg6CisgICAg
ICAgIChUVGhyZWFkUGFyc2VDb250ZXh0UmVjKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW50
ZXJtZWRpYXRlLmNwcDoKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbik6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHA6CisgICAgICAgIChzaDo6c3RyKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpPdXRwdXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNM
Ojp+T3V0cHV0SExTTCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6b3V0cHV0KToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjpoZWFkZXIpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZp
c2l0QmluYXJ5KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6T3V0cHV0
SExTTDo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0TG9v
cCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dHJhdmVyc2VTdGF0ZW1lbnRzKToKKyAgICAg
ICAgKHNoKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKToK
KyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0eXBlU3RyaW5nKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjphZGRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6ZGVjb3Jh
dGVGaWVsZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaDoKKyAgICAgICAg
KHNoKToKKyAgICAgICAgKE91dHB1dEhMU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5jcHA6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjplcnJvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojp3YXJuaW5nKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnRyYWNlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmFzc2lnbkVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcik6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bFZh
bHVlRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hlY2sp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2spOgorICAgICAgICAo
VFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpyZXNlcnZlZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0
b3JFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cGFyYW1l
dGVyU2FtcGxlckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXJyYXlTaXpl
RXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JDaGVjayk6Cisg
ICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6YXJyYXlTZXRNYXhTaXplKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Om5vbklu
aXRDb25zdEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9y
Q2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aGFu
ZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmhhbmRsZVBy
YWdtYURpcmVjdGl2ZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24pOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKToKKyAgICAgICAgKFRQ
YXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4pOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
Y29uc3RydWN0U3RydWN0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9y
Tm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJheU5vZGUpOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZW50ZXJT
dHJ1Y3REZWNsYXJhdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5n
RXJyb3JDaGVjayk6CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmg6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpUUGFyc2VDb250
ZXh0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
aW5mb1NpbmspOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uQmVoYXZpb3IpOgor
ICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJhZ21hKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmNwcDoKKyAgICAgICAgKFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2spOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9QcmFnbWEuaDogQWRkZWQuCisgICAgICAgIChUUHJhZ21h
KToKKyAgICAgICAgKFRQcmFnbWE6OlRQcmFnbWEpOgorICAgICAgICAqIHNyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFJlbmFtZUZ1bmN0aW9uOjpSZW5hbWVGdW5jdGlvbik6CisgICAgICAgIChSZW5hbWVGdW5j
dGlvbjo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TaEhhbmRsZS5o
OgorICAgICAgICAoVENvbXBpbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHA6CisgICAgICAgIChnZXRWYXJpYWJsZUluZm8pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcDoKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvVW5mb2xkU2VsZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlVuZm9sZFNob3J0Q2lyY3Vp
dDo6VW5mb2xkU2hvcnRDaXJjdWl0KToKKyAgICAgICAgKHNoKToKKyAgICAgICAgKHNoOjpVbmZv
bGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1
aXQ6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0
U2VsZWN0aW9uKToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnZpc2l0TG9vcCk6
CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaDogQWRkZWQuCisg
ICAgICAgIChzaCk6CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvZGVidWcuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHA6IEFkZGVk
LgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoOjp+VERlcGVuZGVuY3lHcmFwaCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpj
cmVhdGVGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Z2V0T3JDcmVh
dGVTeW1ib2wpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlU2VsZWN0aW9uKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3ApOgorICAgICAgICAoVERlcGVu
ZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6
Z2V0T3BTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGguaDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlKToKKyAgICAgICAgKFRHcmFwaE5v
ZGU6OlRHcmFwaE5vZGUpOgorICAgICAgICAoVEdyYXBoTm9kZTo6flRHcmFwaE5vZGUpOgorICAg
ICAgICAoVEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJlbnROb2RlOjpUR3Jh
cGhQYXJlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6On5UR3JhcGhQYXJlbnRO
b2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6OmFkZERlcGVuZGVudE5vZGUpOgorICAg
ICAgICAoVEdyYXBoQXJndW1lbnQpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OlRHcmFwaEFy
Z3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp+VEdyYXBoQXJndW1lbnQpOgorICAg
ICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEludGVybUZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChU
R3JhcGhBcmd1bWVudDo6Z2V0QXJndW1lbnROdW1iZXIpOgorICAgICAgICAoVEdyYXBoRnVuY3Rp
b25DYWxsKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6VEdyYXBoRnVuY3Rpb25DYWxs
KToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6flRHcmFwaEZ1bmN0aW9uQ2FsbCk6Cisg
ICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OmdldEludGVybUZ1bmN0aW9uQ2FsbCk6CisgICAg
ICAgIChUR3JhcGhTeW1ib2wpOgorICAgICAgICAoVEdyYXBoU3ltYm9sOjpUR3JhcGhTeW1ib2wp
OgorICAgICAgICAoVEdyYXBoU3ltYm9sOjp+VEdyYXBoU3ltYm9sKToKKyAgICAgICAgKFRHcmFw
aFN5bWJvbDo6Z2V0SW50ZXJtU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFNlbGVjdGlvbik6Cisg
ICAgICAgIChUR3JhcGhTZWxlY3Rpb246OlRHcmFwaFNlbGVjdGlvbik6CisgICAgICAgIChUR3Jh
cGhTZWxlY3Rpb246On5UR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9u
OjpnZXRJbnRlcm1TZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoTG9vcCk6CisgICAgICAgIChU
R3JhcGhMb29wOjpUR3JhcGhMb29wKToKKyAgICAgICAgKFRHcmFwaExvb3A6On5UR3JhcGhMb29w
KToKKyAgICAgICAgKFRHcmFwaExvb3A6OmdldEludGVybUxvb3ApOgorICAgICAgICAoVEdyYXBo
TG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6VEdyYXBoTG9naWNhbE9wKToK
KyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6flRHcmFwaExvZ2ljYWxPcCk6CisgICAgICAgIChU
R3JhcGhMb2dpY2FsT3A6OmdldEludGVybUxvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5j
eUdyYXBoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luKToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGg6OmVuZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjpiZWdpblNh
bXBsZXJTeW1ib2xzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZFNhbXBsZXJTeW1i
b2xzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luVXNlckRlZmluZWRGdW5jdGlv
bkNhbGxzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZFVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OlREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAg
ICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdExvb3ApOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlcjo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcjo6Z2V0RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
cjo6aW5jcmVtZW50RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6
ZGVjcmVtZW50RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6Y2xl
YXJWaXNpdGVkKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6Om1hcmtWaXNp
dGVkKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OmlzVmlzaXRlZCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpidWlsZCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbCk6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGlsZHJlbik6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpjb25uZWN0TXVs
dGlwbGVOb2Rlc1RvU2luZ2xlTm9kZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcik6CisgICAgICAgIChUTm9kZVNldFN0YWNrKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpUTm9kZVNldFN0YWNrKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjp+VE5vZGVTZXRTdGFjayk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRTdGFjazo6Z2V0VG9w
U2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpw
dXNoU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNr
Ojpwb3BTZXQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0U3Rh
Y2s6OnBvcFNldEludG9OZXh0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpU
Tm9kZVNldFN0YWNrOjppbnNlcnRJbnRvVG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpjbGVhcik6CisgICAgICAgIChUTm9kZVNldE1haW50
YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0TWFpbnRh
aW5lcjo6VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpUTm9kZVNldE1haW50YWluZXI6On5UTm9kZVNldE1haW50YWluZXIpOgorICAgICAgICAo
VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjpUTm9kZVNldFByb3BhZ2F0
aW5nTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVT
ZXRQcm9wYWdhdGluZ01haW50YWluZXI6On5UTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcik6
CisgICAgICAgIChUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpUTGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1v
c3RTeW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcik6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIpOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRkZWQuCisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6CisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFREZXBlbmRlbmN5
R3JhcGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRw
dXQ6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZp
c2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxP
cCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRBbGxTcGFubmluZ1Ry
ZWVzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0
cHV0Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1dCk6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0cHV0KToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaFBh
cmVudE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp0cmF2ZXJzZSk6
CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFw
aFN5bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9uOjp0cmF2ZXJzZSk6
CisgICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb2dpY2Fs
T3A6OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5oOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xh
bmcueToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwOgorICAgICAgICAo
eXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5Z3V0c190KToKKyAgICAgICAgKHl5X2dldF9w
cmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGlu
cHV0KToKKyAgICAgICAgKHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgICh5eV9zY2Fu
X2J5dGVzKToKKyAgICAgICAgKHl5Z2V0X2xlbmcpOgorICAgICAgICAoc3RyaW5nX2lucHV0KToK
KyAgICAgICAgKHl5ZXJyb3IpOgorICAgICAgICAoZ2xzbGFuZ19maW5hbGl6ZSk6CisgICAgICAg
IChnbHNsYW5nX3NjYW4pOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHA6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oOgorICAgICAgICAoVEludGVy
bUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRl
Ojp+VEludGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjppc1VzZXJE
ZWZpbmVkKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybVRy
YXZlcnNlcjo6flRJbnRlcm1UcmF2ZXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9vc2lu
Y2x1ZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYzoKKyAg
ICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFByaW50QXRvbVRhYmxlKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jOgorICAgICAgICAoQ1BQcHJhZ21hKToK
KyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAgKFByZWRlZmluZUludE1hY3JvKToKKyAg
ICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXc6IEFkZGVkIHByb3BlcnRpZXMg
YWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFi
cywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ct
dGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxs
b3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywg
YWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFi
cywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicyBhbmQgYWxs
b3ctdGFicy4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9D
b250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChEaWFnbm9z
dGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Y3NCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RGlhZ25vc3Rp
Y3M6On5EaWFnbm9zdGljcyk6CisgICAgICAgIChwcDo6RGlhZ25vc3RpY3M6OnJlcG9ydCk6Cisg
ICAgICAgIChwcDo6RGlhZ25vc3RpY3M6OnNldmVyaXR5KToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAo
cHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKHBwKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxl
cik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAgICAgICAoaXNDb25k
aXRpb25hbERpcmVjdGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAgIChza2lwVW50aWxF
T0QpOgorICAgICAgICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAgIChpc01hY3JvUHJl
ZGVmaW5lZCk6CisgICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFyc2VyKToKKyAgICAg
ICAgKHBwOjpEZWZpbmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAgICAgKHBwOjpEZWZp
bmVkUGFyc2VyOjpsZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZl
UGFyc2VyKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6CisgICAgICAgIChw
cDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAgIChwcDo6RGlyZWN0
aXZlUGFyc2VyOjpwYXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpw
YXJzZVVuZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYpOgorICAg
ICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUVsc2UpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKToK
KyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgorICAgICAgICAocHA6
OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFy
c2VyOjpwYXJzZVByYWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
dGVuc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24pOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAgICAgICAgKHBwOjpE
aXJlY3RpdmVQYXJzZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUV4cHJlc3Npb25JZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJl
c3Npb25JZmRlZik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZl
UGFyc2VyKToKKyAgICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAgICAocHA6OkRpcmVj
dGl2ZVBhcnNlcjo6Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9jayk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXlsZXgpOgorICAgICAg
ICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNl
cjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lvblBhcnNlcjo6cGFy
c2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHByZXNzaW9uUGFyc2Vy
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcDogQWRkZWQgcHJvcGVydHkgYWxsb3ctdGFicy4KKyAgICAgICAgKHBwOjpJbnB1dDo6
SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJzLgor
ICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3Vu
dCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxl
bmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9u
OjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAg
IChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8u
Y3BwOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJzLgorICAgICAgICAocHA6Ok1hY3JvOjplcXVh
bHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmg6IEFk
ZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TWFj
cm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpUb2tlbkxleGVy
KToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAocHA6Ok1hY3JvRXhw
YW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6On5NYWNy
b0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgpOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVy
Ojp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxl
ZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKToKKyAgICAg
ICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBh
bmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFt
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhwYW5kZXIpOgorICAg
ICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpNYWNyb0Nv
bnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9D
b250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0
OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29udGV4dDo6dW5nZXQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5j
cHA6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBs
KToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAg
ICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nvcik6Cisg
ICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAgICAgICAgKHBwOjpQ
cmVwcm9jZXNzb3I6OmluaXQpOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6cHJlZGVmaW5l
TWFjcm8pOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaDogQWRkZWQgcHJvcGVydHkg
YWxsb3ctdGFicy4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nlc3Nvcik6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRpb246OlNvdXJjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpTb3VyY2VM
b2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHBw
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5jcHA6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChwcDo6VG9rZW46
OnJlc2V0KToKKyAgICAgICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpUb2tl
bjo6c2V0QXRTdGFydE9mTGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEhhc0xlYWRpbmdT
cGFjZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNldEV4cGFuc2lvbkRp
c2FibGVkKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJzLgor
ICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChw
cDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2VuOjpoYXNMZWFkaW5n
U3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNhYmxlZCk6CisgICAgICAg
IChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNw
cDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAgICAgICAoeXlfdHJhbnNf
aW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9nZXRfcHJldmlvdXNfc3Rh
dGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAgIChpbnB1dCk6CisgICAg
ICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1ZmZlcik6CisgICAgICAg
IChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVhdGVfYnVmZmVyKToKKyAg
ICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5pdF9idWZmZXIpOgorICAg
ICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9idWZmZXJfc3RhdGUpOgor
ICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAgIChwcF9zY2FuX3N0cmlu
Zyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5X2ZhdGFsX2Vycm9yKToK
KyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xpbmVubyk6CisgICAgICAg
IChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAgICAgICAocHBnZXRfb3V0
KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRfdGV4dCk6CisgICAgICAg
IChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgorICAgICAgICAocHBzZXRf
Y29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBwc2V0X291dCk6CisgICAg
ICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6CisgICAgICAgIChwcGdl
dF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAocHBnZXRfbGxvYyk6Cisg
ICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQpOgorICAgICAgICAocHBs
ZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMpOgorICAgICAgICAocHBs
ZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgorICAgICAgICAoeXlfZmxl
eF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChwcHJlYWxsb2MpOgorICAg
ICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OlRv
a2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5pemVyKToKKyAgICAgICAg
KHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6c2V0RmlsZU51
bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKToKKyAgICAgICAg
KHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjppbml0U2Nhbm5l
cik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFkZGVkLgorICAgICAg
ICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENvbnRleHQpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2g6
IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNz
Lmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6CisgICAg
ICAgIChJbml0U2Nhbm5lcklucHV0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jOgorICAg
ICAgICAoUmVhZFRva2VuKToKKyAgICAgICAgKER1bXBUb2tlblN0cmVhbSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdGltaW5nOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0
RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcpOgorICAgICAgICAo
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyk6CisgICAg
ICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVu
Y3Rpb25DYWxsVXNhZ2UpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
YmVnaW5FcnJvcik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjppc1Nh
bXBsaW5nT3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRB
cmd1bWVudCk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNl
bGVjdGlvbik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExv
b3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlzaXRMb2dpY2Fs
T3ApOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcp
OgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6bnVtRXJyb3JzKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeW1i
b2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZyk6Cisg
ICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OmVuZm9yY2VSZXN0
cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6Om51bUVycm9y
cyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAgICAgICAgKGVnbCk6Cisg
ICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAo
ZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNw
bGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2Uu
Y3BwOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6U3Vy
ZmFjZTo6cmVsZWFzZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlc2V0U3dhcENoYWluKToK
KyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcFJlY3QpOgorICAgICAgICAoZWdsKToKKyAgICAg
ICAgKGVnbDo6U3VyZmFjZTo6c3dhcCk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnBvc3RTdWJC
dWZmZXIpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAgICAgICAoU3VyZmFj
ZSk6CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFrZUN1cnJlbnQpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgorICAgICAgICAoZ2wp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5
UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVN0YXRlKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjphcHBseVNoYWRlcnMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFw
cGx5VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3QXJyYXlz
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6aW5p
dEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2xhcmF0aW9u
KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuaDoKKyAgICAgICAgKENvbnRleHQp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aDoKKyAgICAgICAgKEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dy
YW0uY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpB
dHRyaWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6On5BdHRy
aWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6SW5mb0xvZyk6CisgICAgICAg
IChnbDo6SW5mb0xvZzo6fkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmdldExlbmd0
aCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TG9nKToKKyAgICAgICAgKGdsOjpJbmZvTG9n
OjphcHBlbmRTYW5pdGl6ZWQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFwcGVuZCk6CisgICAg
ICAgIChnbDo6SW5mb0xvZzo6cmVzZXQpOgorICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dyYW0p
OgorICAgICAgICAoZ2w6OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFt
OjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFjaFNoYWRlcik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQpOgorICAgICAgICAo
Z2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAo
Z2w6OlByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJp
bmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0UHJvZ3Jh
bUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1
dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVu
Z3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnZh
bGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc1ZhbGlkYXRlZCk6CisgICAgICAgICog
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmg6CisgICAgICAgIChnbCk6CisgICAgICAgIChBdHRyaWJ1
dGVCaW5kaW5ncyk6CisgICAgICAgIChJbmZvTG9nKToKKyAgICAgICAgKFByb2dyYW0pOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHA6IEFkZGVkLgorICAgICAgICAo
Z2w6OnN0cik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6VW5pZm9ybSk6
CisgICAgICAgIChnbDo6VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06
OmlzQXJyYXkpOgorICAgICAgICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KToKKyAgICAgICAg
KGdsOjpQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dFZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QXR0cmlidXRl
TG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNlbWFudGljSW5kZXgp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTFmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdik6Cisg
ICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6CisgICAgICAgIChnbDo6
dHJhbnNwb3NlTWF0cml4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4
M2Z2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlm
b3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRv
QmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJp
YnV0ZXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3Jtcyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
ZGVjb3JhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnVuZGVjb3Jh
dGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uYnYp
OgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYpOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAoZ2w6OlByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6Omdl
dEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0
aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6dmFsaWRh
dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2FtcGxlcnMpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24pOgorICAgICAgICAoZ2w6
OlByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3Jh
bUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24pOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oOiBBZGRlZC4KKyAgICAgICAgKGdsKToKKyAgICAgICAgKFVuaWZv
cm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6UmVnaXN0ZXJJbmZvKToK
KyAgICAgICAgKFJlZ2lzdGVySW5mbyk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6UmVnaXN0ZXJJ
bmZvOjpzZXQpOgorICAgICAgICAoVW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFByb2dyYW1C
aW5hcnkpOgorICAgICAgICAoU2FtcGxlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVp
Z2h0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEludGVybmFsRm9y
bWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCk6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6
YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpy
ZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpn
ZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6Omdl
dEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6CisgICAgICAg
IChnbCk6CisgICAgICAgIChSZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmNw
cDoKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEluZm9Mb2cpOgorICAgICAgICAoZ2w6OlNoYWRl
cjo6Z2V0U291cmNlSW1wbCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaDoKKyAg
ICAgICAgKFNoYWRlcik6CisgICAgICAgIChWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbDo6Q29udmVydFRleHR1cmVGb3JtYXRU
eXBlKToKKyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKToKKyAgICAgICAg
KGdsOjpHZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkltYWdl
OjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRlU3VyZmFjZSk6Cisg
ICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFs
cGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKToKKyAgICAg
ICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6
bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YSk6Cisg
ICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKToKKyAgICAgICAg
KGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdC
VUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURhdGEpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9h
ZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0
YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQ29tcHJlc3Nl
ZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAgKGdsOjpUZXh0dXJl
U3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlOjpp
c1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEQzREZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OmlzRGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omdl
dFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwp
OgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJl
TWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6Omdl
dEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBs
ZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlT
dWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvVGV4dHVyZS5oOgorICAgICAgICAoSW1hZ2UpOgorICAgICAgICAoVGV4dHVyZVN0
b3JhZ2UpOgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZTJEKToK
KyAgICAgICAgKFRleHR1cmUyRCk6CisgICAgICAgIChUZXh0dXJlU3RvcmFnZUN1YmVNYXApOgor
ICAgICAgICAoVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvVmVydGV4
RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJl
VmVydGV4RGF0YSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwOgorICAg
ICAgICAoY2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgICh2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zMkQpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajoKKyAgICAgICAgKiBzcmMvbGliR0xF
U3YyL21hdGh1dGlsLmg6CisgICAgICAgIChnbCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91
dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToKKyAgICAgICAgKGds
KToKKyAgICAgICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpFeHRyYWN0
Rm9ybWF0KToKKyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29u
dmVydEN1YmVGYWNlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KToKKyAgICAgICAgKGR4MmVzOjpHZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChkeDJlczo6R2V0
RGVwdGhTaXplKToKKyAgICAgICAgKGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdCk6CisgICAg
ICAgIChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdCk6Cisg
ICAgICAgIChkeDJlczo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdCk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGR4MmVzKToK
KwogMjAxMi0wNy0xMSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzkxMDI0PiBCdWlsZCBhZ2FpbnN0IHRoZSBsYXRlc3QgU0RLIHdo
ZW4gdGFyZ2V0aW5nIG9sZGVyIE9TIFggdmVyc2lvbnMuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDQ4IEBACiAJCUEw
QUFCRTQ1MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0MzEzQUZFOTQ1MDBGMkVCRDEgLyog
T3V0cHV0RVNTTC5oICovOyB9OwogCQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNs
YXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLzsgfTsK
IAkJQTBBQUJFNDkxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0NzEzQUZFOTYxMDBG
MkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLzsgfTsKKwkJQTI2NTY3QkIxNTlDMjFCMTAwMzk4
NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAg
Ki87IH07CisJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjExNTlDMjFC
MTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi87IH07CisJCUEyNjU2N0JEMTU5QzIxQjEwMDM5
ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi87IH07CisJ
CUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0I0MTU5
QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKKwkJQTI2
NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdt
YS5oICovOyB9OworCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0I2
MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovOyB9OworCQlBMjY1NjdFQzE1
OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M4MTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovOyB9OworCQlB
MjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0ExNTlDMjFD
RTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLzsgfTsKKwkJQTI2NTY3RUYx
NTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aXJlY3RpdmVIYW5kbGVyLmggKi87IH07CisJCUEyNjU2N0YwMTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAg
Ki87IH07CisJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NEMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjIxNTlD
MjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0UxNTlDMjFDRTAwMzk4NTM5IC8qIEV4
cHJlc3Npb25QYXJzZXIuY3BwICovOyB9OworCQlBMjY1NjdGMzE1OUMyMUNFMDAzOTg1MzkgLyog
RXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCAq
LzsgfTsKKwkJQTI2NTY3RjUxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QyMTU5QzIxQ0UwMDM5
ODUzOSAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNjU2N0Y2MTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi87IH07CisJCUEyNjU2N0Y3MTU5QzIx
Q0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwICovOyB9
OworCQlBMjY1NjdGODE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q1MTU5QzIxQ0UwMDM5ODUzOSAv
KiBMZXhlci5oICovOyB9OworCQlBMjY1NjdGOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDYx
NTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NTY3RkExNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2
NTY3RkIxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDgxNTlDMjFDRTAwMzk4NTM5
IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OworCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1Mzkg
LyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RDkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsg
fTsKKwkJQTI2NTY4MDMxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMDE1OUMyMUNF
MDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTI2NTY4MDQxNTlDMjFDRTAw
Mzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5o
ICovOyB9OworCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UyMTU5
QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VMb2NhdGlvbi5oICovOyB9OworCQlBMjY1NjgwNzE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCAqLzsg
fTsKKwkJQTI2NTY4MDgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2NTY4MEExNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdFNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NTY4MEIx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXpl
ci5oICovOyB9OworCQlBMjY1NjgyQjE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJBMTU5QzIz
ODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovOyB9OworCQlBMjY1NjgzOTE1OUMyM0UxMDAzOTg1
MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovOyB9OworCQlBMjY1NjgzQTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi87IH07CisJCUEyNjU2
ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJGMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY4M0Mx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMwMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07CisJCUEyNjU2ODNEMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzExNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMyMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAgKi87IH07CisJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyNjU2ODQyMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNzE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjY1Njg0MzE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM4MTU5QzIzRTEwMDM5ODUzOSAvKiBS
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAw
ODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNw
cCAqLzsgfTsKIAkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEw
MDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAv
KiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAt
NjMsNyArMTA1LDYgQEAKIAkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQy
NUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwogCQlGQjM5RDJBQTEy
MDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJv
bFRhYmxlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0J
CUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNkQxMjAwRjM1QTAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi87IH07CiAJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2
OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwogCkBAIC0xMDMsNiArMTQ0LDUyIEBACiAJCUEwQUFCRTQzMTNBRkU5NDUw
MEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDYxM0FG
RTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3RE
aXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFn
bm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCMjE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0I3MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENp
cmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjgxNTlD
MjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzQmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25v
c3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0ExNTlDMjFDRTAw
Mzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMyMUNFMDAzOTg1Mzkg
LyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2N0NEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDRjE1OUMyMUNFMDAz
OTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHByZXNzaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3
RDYxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0Q4
MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9j
ZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlcHJvY2Vz
c29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTExNTlDMjFDRTAw
Mzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3RTIx
NTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY1NjdFNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJFMTU5QzIzRTEw
MDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1OUMyM0UxMDAzOTg1
MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzIxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4
MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODM2MTU5QzIz
RTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2Vu
R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIsMTUgKzI0OSwxMSBA
QAogCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9
IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9s
VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDMjEyMDBGMjYy
MDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Ix
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueG1sOyBwYXRoID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9obHNs
LnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
dGV4dC54bWw7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9q
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xT
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyog
VHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
aW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyog
Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAogCQlGQjM5RDI2ODEy
MDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNl
bGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAw
ODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyQkYx
MjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVu
ZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMzNiw2MiBAQAogCQkJ
cGF0aCA9IENvbmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJQTI2NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAwMzk4NTM5IC8qIHBw
X3V0aWxzLmggKi8sCisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgKi8sCisJCQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
LmggKi8sCisJCQkJQTI2NTY3Q0ExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFu
ZGxlci5oICovLAorCQkJCUEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJz
ZXIuY3BwICovLAorCQkJCUEyNjU2N0NEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJz
ZXIuaCAqLywKKwkJCQlBMjY1NjdDRTE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNl
ci5jcHAgKi8sCisJCQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJz
ZXIuaCAqLywKKwkJCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovLAor
CQkJCUEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovLAorCQkJCUEyNjU2N0Q0
MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NTY3RDUxNTlDMjFDRTAw
Mzk4NTM5IC8qIExleGVyLmggKi8sCisJCQkJQTI2NTY3RDYxNTlDMjFDRTAwMzk4NTM5IC8qIE1h
Y3JvLmNwcCAqLywKKwkJCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAqLywK
KwkJCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCisJ
CQkJQTI2NTY3RDkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKKwkJCQlB
MjY1NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY1
NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NTY3RTIx
NTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NTY3RTQxNTlD
MjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY1NjdFNTE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uaCAqLywKKwkJCQlBMjY1NjdFNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5p
emVyLmNwcCAqLywKKwkJCQlBMjY1NjdFODE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCUEyNjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2NTY4MkQxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8sCisJCQkJQTI2NTY4MkUxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovLAorCQkJCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLywKKwkJCQlBMjY1NjgzMDE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAorCQkJCUEyNjU2ODMxMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICovLAorCQkJCUEyNjU2
ODMyMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKKwkJCQlB
MjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICov
LAorCQkJKTsKKwkJCXBhdGggPSBkZXBncmFwaDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyNjU2ODM1MTU5QzIzRTEwMDM5
ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjY1Njgz
NjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAor
CQkJCUEyNjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zy5jcHAgKi8sCisJCQkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHRpbWluZzsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4OEU2OSA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNjgsOCArNDA1LDggQEAKIAkJ
RkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdM
U0xBTkcgKi8sCiAJCQkJRkIzOUQxODUxMjAwRjI2MjAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAor
CQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAogCQkJKTsKIAkJCW5h
bWUgPSBTb3VyY2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjkyLDYgKzQyOSw4
IEBACiAJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywK
IAkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuY3BwICovLAogCQkJCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUEyNjU2N0FFMTU5QzIxQjEw
MDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLywKKwkJCQlBMjY1NjdBRjE1OUMy
MUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovLAogCQkJCUZCMzlEMThGMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQxOTAxMjAwRjI2MjAw
MDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQxOTExMjAwRjI2MjAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovLApAQCAtMzI3LDE1ICs0NjYsMTMgQEAKIAkJCQlGQjM5RDFDMDEy
MDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKIAkJCQlGQjM5RDFDMTEyMDBGMjYyMDAw
ODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAogCQkJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2
OSAvKiBTeW1ib2xUYWJsZS5oICovLAotCQkJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0
cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCi0JCQkJRkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5
IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCiAJCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4
RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKIAkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAv
KiBUcmFuc2xhdG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBU
eXBlcy5oICovLAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
Y3BwICovLAotCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAq
LywKKwkJCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cCAqLywKKwkJCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0
LmggKi8sCiAJCQkpOwogCQkJaW5jbHVkZUluSW5kZXggPSAwOwogCQkJbmFtZSA9IGNvbXBpbGVy
OwpAQCAtMzcwLDE3ICs1MDcsNiBAQAogCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29t
cGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUEw
QUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgKi8sCi0JCQkJQTBB
QUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8sCi0JCQkJQTBBQUJF
NDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywKLQkJCQlBMEFBQkU0
NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKLQkJCQlBMEFBQkU0MjEz
QUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8sCi0JCQkJQTBBQUJFNDMxM0FGRTk0
NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLywKLQkJCQlBMEFBQkUyRTEzQUZFODMwMDBGMkVC
RDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAotCQkJCUEwQUFCRTJGMTNBRkU4MzAw
MEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAotCQkJCUEwQUFCRTJBMTNBRkU4
MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKLQkJCQlBMEFBQkUyQjEzQUZFODEw
MDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAotCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4
OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5IC8q
IEJhc2VUeXBlcy5oICovLAogCQkJCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCiAJCQkJNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCkBAIC0zOTAsMTMgKzUxNiwyMCBAQAogCQkJ
CUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIz
OUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDIyNzEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjgyQzE1OUMyM0UxMDAzOTg1Mzkg
LyogZGVwZ3JhcGggKi8sCiAJCQkJNDk5NTFDMDcxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJl
Y3Vyc2lvbi5jcHAgKi8sCiAJCQkJNDk5NTFDMDgxNEI3QUFEODAwNjBFOTZFIC8qIERldGVjdFJl
Y3Vyc2lvbi5oICovLAorCQkJCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGlj
cy5jcHAgKi8sCisJCQkJQTI2NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmgg
Ki8sCisJCQkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
ICovLAorCQkJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmgg
Ki8sCiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lvbkJlaGF2aW9yLmgg
Ki8sCisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BVbnJvbGwuY3BwICov
LAorCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJ
CQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQk5MEQ5QjBG
QjEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJCTkwRDlCMEZDMTJF
MTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBEOUIwRkQxMkUxMURD
QjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0
MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovLAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywK
QEAgLTQwNCwzOSArNTM3LDUwIEBACiAJCQkJRkIzOUQyMkUxMjAwRjM1QTAwMDg4RTY5IC8qIElu
aXRpYWxpemVEbGwuY3BwICovLAogCQkJCUZCMzlEMjJGMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplRGxsLmggKi8sCiAJCQkJRkIzOUQyMzAxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxp
emVHbG9iYWxzLmggKi8sCisJCQkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwICovLAogCQkJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCiAJCQkJRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5
IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCiAJCQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8q
IGludGVybWVkaWF0ZS5oICovLAogCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRl
cm1PdXQuY3BwICovLAogCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2
ZXJzZS5jcHAgKi8sCiAJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJt
ZWRpYXRlLmggKi8sCisJCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8qIE1hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcCAqLywKKwkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVCRDEgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhFNjkgLyogTU1h
cC5oICovLAogCQkJCUZCMzlEMjM4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywK
IAkJCQk5MEQ5QjBGRjEyRTExRENCMDAyRDQyNTUgLyogb3Nzb3VyY2VfbnNwci5jcHAgKi8sCiAJ
CQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKIAkJ
CQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlB
MEFBQkU0MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8sCisJCQkJQTBBQUJF
NDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLywKIAkJCQlGQjM5RDIzQjEyMDBG
MzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQyM0MxMjAwRjM1QTAw
MDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlBMEFBQkUzMjEzQUZFODQ3MDBGMkVCRDEg
LyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAorCQkJCUEwQUFCRTMzMTNBRkU4NDcwMEYyRUJEMSAv
KiBPdXRwdXRHTFNMQmFzZS5oICovLAogCQkJCUZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2OSAvKiBw
YXJzZUNvbnN0LmNwcCAqLywKIAkJCQlGQjM5RDI0MDEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VI
ZWxwZXIuY3BwICovLAogCQkJCUZCMzlEMjQxMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBl
ci5oICovLAogCQkJCUZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICov
LAogCQkJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKKwkJCQlB
MjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi8sCisJCQkJRkIzOUQyNDQxMjAw
RjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQlGQjM5RDI1NjEyMDBGMzVBMDAw
ODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAogCQkJCUZCMzlEMjU3MTIwMEYzNUEwMDA4
OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAogCQkJCUZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2
OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKIAkJCQlGQjM5RDI1OTEyMDBGMzVBMDAwODhFNjkgLyog
UmVtb3ZlVHJlZS5oICovLAorCQkJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVG
dW5jdGlvbi5oICovLAogCQkJCTkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1i
b2wuY3BwICovLAogCQkJCTkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wu
aCAqLywKIAkJCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi8s
CiAJCQkJRkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJRkIz
OUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKIAkJCQlGQjM5RDI1
RDEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQlBMjY1NjgzNDE1OUMy
M0UxMDAzOTg1MzkgLyogdGltaW5nICovLAorCQkJCUEwQUFCRTQ2MTNBRkU5NjEwMEYyRUJEMSAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCisJCQkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8q
IFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJh
bnNsYXRvckdMU0wuaCAqLywKIAkJCQlGQjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMu
aCAqLywKLQkJCQlGQjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAq
LywKLQkJCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCiAJ
CQkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovLAogCQkJCTkwRDlCMTBD
MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi8sCiAJCQkJOTBEOUIxMEQxMkUxMURENjAwMkQ0
MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLApAQCAtNDUzLDYgKzU5Nyw3IEBACiAJ
CUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUEyNjU2N0M1MTU5QzIxQ0UwMDM5ODUz
OSAvKiBuZXcgKi8sCiAJCQkJRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLywK
IAkJCQlGQjM5RDI0NjEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5oICovLAogCQkJCUZCMzlEMjQ3
MTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCkBAIC01MDgsNiArNjUzLDI4IEBACiAJ
CQkJNDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OTUxQzBBMTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEMxNEI3QUFEODAwNjBFOTZFIC8qIERl
dGVjdFJlY3Vyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkMxNTlDMjFCMTAwMzk4
NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdCRTE1OUMyMUIx
MDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3
QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3
QzExNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMjY1NjdFRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
LAorCQkJCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdGMzE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RjYxNTlDMjFDRTAwMzk4
NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdGODE1OUMyMUNFMDAzOTg1
MzkgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUz
OSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5
IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA0MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODA1MTU5
QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2
NTY4MDgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
MjY1NjgyQjE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1Njg0MTE1OUMyM0Ux
MDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU4OCw3ICs3NTUsNiBAQAogCQkJCUZCMzlEMkE4MTIw
MEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xh
bmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFEQ0IwMDJENDI1NSAv
KiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3NzAsMjYgQEAKIAkJ
CQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDk5NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FBRDgwMDYwRTk2RSAv
KiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3QkIxNTlDMjFC
MTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0JE
MTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Yw
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTI2NTY3RjIxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY3RjUxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyNjU2N0Y3MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBMjY1NjdGOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RkIxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4MDMxNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgwNzE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4MEExNTlDMjFDRTAwMzk4
NTM5IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgzOTE1OUMyM0Ux
MDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2
ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyNjU2ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4NTM5IC8q
IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2ODQw
MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyNjU2ODQyMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24gMTIyNzM4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM4LDYgKzIzOCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAj
ZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAg
ICAgICAgMHg4OEZFCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNp
Zm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllf
QU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KQEAgLTE0ODcsNiArMTQ5MiwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEVORFRJTElOCiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgog
CisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFt
X2JpbmFyeQorI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogI2lm
ZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMTIyNzM4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBleHRlcm4gIkMiIHsKIAogLy8gVmVy
c2lvbiBudW1iZXIgZm9yIHNoYWRlciB0cmFuc2xhdGlvbiBBUEkuCiAvLyBJdCBpcyBpbmNyZW1l
bnRlZCBldmVyeXRpbWUgdGhlIEFQSSBjaGFuZ2VzLgotI2RlZmluZSBTSF9WRVJTSU9OIDEwNQor
I2RlZmluZSBTSF9WRVJTSU9OIDEwNwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dp
bmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtNDks
NyArNDksMjkgQEAgdHlwZWRlZiBlbnVtIHsKIAogdHlwZWRlZiBlbnVtIHsKICAgU0hfR0xFUzJf
U1BFQyA9IDB4OEI0MCwKLSAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MQorICBTSF9XRUJHTF9TUEVD
ID0gMHg4QjQxLAorCisgIC8vIFRoZSBDU1MgU2hhZGVycyBzcGVjIGlzIGEgc3Vic2V0IG9mIHRo
ZSBXZWJHTCBzcGVjLgorICAvLworICAvLyBJbiBib3RoIENTUyB2ZXJ0ZXggYW5kIGZyYWdtZW50
IHNoYWRlcnMsIEFOR0xFOgorICAvLyAoMSkgUmVzZXJ2ZXMgdGhlICJjc3NfIiBwcmVmaXguCisg
IC8vICgyKSBSZW5hbWVzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGNzc19tYWluLgorICAvLyAoMykg
RGlzYWJsZXMgdGhlIGdsX01heERyYXdCdWZmZXJzIGJ1aWx0LWluLgorICAvLworICAvLyBJbiBD
U1MgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBEaXNhYmxlcyB0aGUgZ2xfRnJh
Z0NvbG9yIGJ1aWx0LWluLgorICAvLyAoMikgRGlzYWJsZXMgdGhlIGdsX0ZyYWdEYXRhIGJ1aWx0
LWluLgorICAvLyAoMykgRW5hYmxlcyB0aGUgY3NzX01peENvbG9yIGJ1aWx0LWluLgorICAvLyAo
NCkgRW5hYmxlcyB0aGUgY3NzX0NvbG9yTWF0cml4IGJ1aWx0LWluLgorICAvLworICAvLyBBZnRl
ciBwYXNzaW5nIGEgQ1NTIHNoYWRlciB0aHJvdWdoIEFOR0xFLCB0aGUgYnJvd3NlciBpcyBleHBl
Y3RlZCB0byBhcHBlbmQKKyAgLy8gYSBuZXcgbWFpbiBmdW5jdGlvbiB0byBpdC4KKyAgLy8gVGhp
cyBuZXcgbWFpbiBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNzc19tYWluIGZ1bmN0aW9uLgorICAv
LyBJdCBtYXkgYWxzbyBwZXJmb3JtIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyBsaWtlIHZhcnlpbmcg
YXNzaWdubWVudCwgdGV4dHVyZQorICAvLyBhY2Nlc3MsIGFuZCBnbF9GcmFnQ29sb3IgYXNzaWdu
bWVudCBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIENTUyBTaGFkZXJzCisgIC8vIGJsZW5kIG1v
ZGVzLgorICAvLworICBTSF9DU1NfU0hBREVSU19TUEVDID0gMHg4QjQyCiB9IFNoU2hhZGVyU3Bl
YzsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTEwNCw3ICsxMjYsMjMgQEAgdHlwZWRlZiBlbnVtIHsK
ICAgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCA9IDB4MDA4MCwKIAogICAv
LyBUaGlzIGlzIG5lZWRlZCBvbmx5IGFzIGEgd29ya2Fyb3VuZCBmb3IgY2VydGFpbiBPcGVuR0wg
ZHJpdmVyIGJ1Z3MuCi0gIFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TID0gMHgwMTAwCisg
IFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TID0gMHgwMTAwLAorCisgIC8vIFRoaXMgaXMg
YW4gZXhwZXJpbWVudGFsIGZsYWcgdG8gZW5mb3JjZSByZXN0cmljdGlvbnMgdGhhdCBhaW0gdG8g
cHJldmVudCAKKyAgLy8gdGltaW5nIGF0dGFja3MuCisgIC8vIEl0IGdlbmVyYXRlcyBjb21waWxh
dGlvbiBlcnJvcnMgZm9yIHNoYWRlcnMgdGhhdCBjb3VsZCBleHBvc2Ugc2Vuc2l0aXZlCisgIC8v
IHRleHR1cmUgaW5mb3JtYXRpb24gdmlhIHRoZSB0aW1pbmcgY2hhbm5lbC4KKyAgLy8gVG8gdXNl
IHRoaXMgZmxhZywgeW91IG11c3QgY29tcGlsZSB0aGUgc2hhZGVyIHVuZGVyIHRoZSBXZWJHTCBz
cGVjCisgIC8vICh1c2luZyB0aGUgU0hfV0VCR0xfU1BFQyBmbGFnKS4KKyAgU0hfVElNSU5HX1JF
U1RSSUNUSU9OUyA9IDB4MDIwMCwKKyAgICAKKyAgLy8gVGhpcyBmbGFnIHByaW50cyB0aGUgZGVw
ZW5kZW5jeSBncmFwaCB0aGF0IGlzIHVzZWQgdG8gZW5mb3JjZSB0aW1pbmcKKyAgLy8gcmVzdHJp
Y3Rpb25zIG9uIGZyYWdtZW50IHNoYWRlcnMuCisgIC8vIFRoaXMgZmxhZyBvbmx5IGhhcyBhbiBl
ZmZlY3QgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisgIC8vIC0gVGhlIHNoYWRl
ciBzcGVjIGlzIFNIX1dFQkdMX1NQRUMuCisgIC8vIC0gVGhlIGNvbXBpbGUgb3B0aW9ucyBjb250
YWluIHRoZSBTSF9USU1JTkdfUkVTVFJJQ1RJT05TIGZsYWcuCisgIC8vIC0gVGhlIHNoYWRlciB0
eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KKyAgU0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQw
MAogfSBTaENvbXBpbGVPcHRpb25zOwogCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFCQTIz
MEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2QjcyMEJEMjFGNjc0
OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBN
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2
MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5mb2xkU2VsZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzExQTQ4
QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQk5QjExMUI4M0ZC
NjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VGNEZFIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8qIHBh
cnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQlB
MjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OworCQlBMjAx
MDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMzMUEwMDBFNTdC
QkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQwMTU5QzMxQTAwMEU1
N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovOyB9OworCQlB
MjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExl
eGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJEMTU5
QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQzMTU5QzMxQTAwMEU1
N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVy
LmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgz
MjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDUx
NTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAg
Ki87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MzgxNTlDMzFB
MDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYyMTU5QzMyNEYwMEU1
N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87
IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovOyB9
OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUzMTU5QzMy
NEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlBMjAxMDg2ODE1OUMz
MjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0
aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovOyB9Owor
CQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1QTE1
OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CisJCUEy
MDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVF
MTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsg
fTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAg
Ki87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLzsgfTsKKwkJ
QTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2RjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJQUMyM0Y1OEZERDND
NTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRy
ZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdFNTQzNjVCRThDREUz
OTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEwRkVEMjk3OTkzMUZG
QzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBCODJFMThEQ0JFREYx
QzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
QTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDAwNzQ1REE5
OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5p
dGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxp
YnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRy
YW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBA
IC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZp
ZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURs
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9yX2dsc2wu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2
ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9nbHNsLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZGMTU5QzMxM0MwMEU1
N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25v
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlhZ25vc3Rp
Y3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyMDE1OUMzMUEwMDBF
NTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjExNTlD
MzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYxNTlDMzFBMDAwRTU3
QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAx
MDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODJE
MTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyRjE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUgLyogcHBfdXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVwcm9jZXNz
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMzE1OUMzMUEwMDBF
NTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzNTE1
OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBFNTdCQkUgLyogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NEMxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5j
eUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoT3V0cHV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JC
RSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV0ZWN0UmVjdXJz
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTQxNTlDMzI0RjAw
RTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIw
MTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2
ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1ODE1OUMz
MjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYwMTU5
QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGlu
dWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3REaXNj
b250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NkUxNTlD
MzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2ly
Y3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODcwMTU5QzMyNjIw
MEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsg
aW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNsLmE7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAv
KiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0
b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcxMUE0OEEwQkYxNkIx
Q0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNl
bGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5QjZFOUMyMUI2N0My
NUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4
QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBTZWFyY2hTeW1ib2wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJQTIw
MTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhG
cmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJ
CQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8g
PSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1NzA3QjM5M0I3RUFC
N0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBj
cHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8s
CisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJ
CQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJCQkJODMxMzk5REVF
NURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFFMTU5QzMxQTAwMEU1
N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5o
ICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8sCiAJ
CQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKQEAgLTI0MSwxNSAr
MzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRGREI4NERB
QUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5
IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWls
dEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEyN0M3NUI1NzZGQzAw
RDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIw
RTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAxN0M0NCAv
KiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIu
Y3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmgg
Ki8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKKwkJCQk5
NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMjAxMDg0QjE1OUMz
MjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJF
IC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZFMTU5QzMyNjIwMEU1
N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4NTMxNTlDMzI0RjAw
RTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4NTQxNTlDMzI0RjAw
RTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1MTU5QzMyNEYwMEU1
N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERp
cmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJFIC8qIEV4
dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0MxIC8qIEZv
ckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAvKiBGb3JM
b29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcu
aCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICov
LAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJ
CQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCiAJCQkJNkU2
OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJCQlGN0IyOTcxRDRF
QjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRF
OUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1NywxOCBAQAogCQkJCTYw
QzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKIAkJCQlBMENF
NDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAogCQkJCTJFN0M5QjZF
NkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUEyMDEwODVB
MTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKIAkJCQk4
NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAot
CQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJ
CQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCi0JCQkJ
REVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3OTlEQzk2MTFFRTJF
QTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3
Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFC
IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYg
LyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQz
MzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFG
QkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9z
aW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9w
b3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wu
Y3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8s
CiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLApAQCAt
MjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0
R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExT
TC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAq
LywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCiAJ
CQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKIAkJCQlD
RUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKIAkJCQlCNjRFQUJF
NzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkxMkVBRjAyODMxMUVF
QTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3
QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAvKiBwcmVw
cm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxp
dmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJ
CQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKIAkJCQky
MjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKIAkJCQlGM0Uw
OURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJQUU2NUUxMzlB
RTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5OUJBNTAwQTg0QzM1
MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVC
MSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1i
b2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5bWJvbFRh
YmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLywKIAkJ
CQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICovLAogCQkJ
CUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovLAogCQkJCTZG
QjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCkBAIC0yOTIs
MjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9y
SExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JI
TFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8sCi0J
CQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCi0JCQkJ
MkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUEyMDEw
ODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAorCQkJCUEy
MDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKKwkJCQlB
RTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJM0VFNzIxNUE3QUI0
RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkw
MiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRl
TGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxp
ZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZh
cmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlh
YmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xT
TC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmgg
Ki8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKLQkJCQk5
NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0
LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmgg
Ki8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmgg
Ki8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICovLAotCQkJ
CUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCi0JCQkJ
RDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJCUFFNzY3
NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3MjE1QTdBQjRFRjcx
Qzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8q
IHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0aCA9IGNvbXBpbGVy
OwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5QzMxQTAwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVz
c2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5j
cHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8sCisJCQkJ
QTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJCQlBMjAxMDgyQzE1
OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdC
QkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNy
by5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICov
LAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAorCQkJCUEy
MDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAorCQkJCUEyMDEw
ODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJCQlBMjAxMDgzNTE1
OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlBMjAxMDgzNjE1OUMz
MUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JC
RSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJF
IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEwODRGMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJQTIwMTA4NTAxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCisJCQkJQTIwMTA4
NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAorCQkJCUEy
MDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8s
CisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUxNTlDMzI0RjAwRTU3
QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAorCQkJCUEyMDEwODVG
MTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8sCisJ
CQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxk
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM0NCw2ICs0
OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2Nv
bW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRv
cl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0
b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5h
ICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0
YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9jZXNzb3Ig
Ki8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJYnVpbGRQaGFzZXMg
PSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMgKi8sCisJCQkJQTIw
MTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRS
dWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHBy
ZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJCQlwcm9k
dWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3Jf
Y29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5
cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyog
dHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVp
bGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBj
b25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAq
LzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24g
PSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1Nj
YW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCWVuLAorCQkJ
KTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKIAkJCXByb2plY3RE
aXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYgKzU5NCw3IEBACiAJ
CQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovLAogCQkJ
CTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCiAJCQkJQTgz
OEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKKwkJCQlBMjAxMDdE
QzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsKIAkJfTsKIC8qIEVu
ZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAKIAkJCQk0QjRCREU3
QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBVbmZvbGRTZWxlY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJj
aFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMzMjYyMDBFNTdCQkUg
LyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9Owor
CQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdC
QkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODNFMTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJCQkJQUQ4NTUxN0Yw
ODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAogCQkJCUU4QzcyN0FB
OEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUI0ODU4NDE3
RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVu
Y3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2
NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY4MTU5QzMyNEYw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2OTE1
OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QzE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9Owor
CQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAorCQkJCSk7CisJ
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJ
CQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5IjsKKwkJCX07
CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0MwMEU1N0JCRSAvKiBS
ZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNl
dHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19QUkVQUk9D
RVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIsCisJ
CQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BUSU1J
WkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJ
CQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSAidHJh
bnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAJ
CUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtNjcyLDYgKzkxMSwx
NSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwogCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5QzMxM0MwMEU1N0JC
RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJlcHJv
Y2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAq
LywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJ
CQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJh
dGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDQgKzE1
LDggQEAKICAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCiAgIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKIAorI2lmIGRlZmluZWQoX01TQ19WRVIpCisj
ZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNlbmRpZiAvLyBDT01NT05fQU5H
TEVVVElMU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMSwxMDMgQEAKLS8v
DQotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4NCi0vLw0KLQ0KLS8vIGRlYnVnLmNwcDogRGVidWdnaW5nIHV0aWxpdGll
cy4NCi0NCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiDQotDQotI2luY2x1ZGUgPHN0ZGlvLmg+
DQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlIDxkM2Q5Lmg+DQotI2luY2x1ZGUgPHdp
bmRvd3MuaD4NCi0NCi1uYW1lc3BhY2UgZ2wNCi17DQotDQotdHlwZWRlZiB2b2lkIChXSU5BUEkg
KlBlcmZPdXRwdXRGdW5jdGlvbikoRDNEQ09MT1IsIExQQ1dTVFIpOw0KLQ0KLXN0YXRpYyB2b2lk
IG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZG
dW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQ0KLXsNCi0jaWYgIWRlZmlu
ZWQoQU5HTEVfRElTQUJMRV9QRVJGKQ0KLSAgICBpZiAocGVyZkFjdGl2ZSgpKQ0KLSAgICB7DQot
ICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOw0KLSAgICAgICAgaW50IGxlbiA9IHZzcHJpbnRm
X3MobWVzc2FnZSwgZm9ybWF0LCB2YXJhcmcpOw0KLSAgICAgICAgaWYgKGxlbiA8IDApDQotICAg
ICAgICB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy8g
VGhlcmUgYXJlIG5vIEFTQ0lJIHZhcmlhbnRzIG9mIHRoZXNlIEQzRFBFUkYgZnVuY3Rpb25zLg0K
LSAgICAgICAgd2NoYXJfdCB3aWRlTWVzc2FnZVszMjc2OF07DQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbjsgKytpKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHdpZGVNZXNzYWdl
W2ldID0gbWVzc2FnZVtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHdpZGVNZXNzYWdlW2xlbl0g
PSAwOw0KLQ0KLSAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UpOw0KLSAgICB9DQotI2Vu
ZGlmDQotDQotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpDQotI2lmIGRlZmluZWQo
TkRFQlVHKQ0KLSAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQ0KLSAgICB7DQotICAgICAgICBy
ZXR1cm47DQotICAgIH0NCi0jZW5kaWYNCi0NCi0gICAgRklMRSogZmlsZSA9IGZvcGVuKFRSQUNF
X09VVFBVVF9GSUxFLCAiYSIpOw0KLSAgICBpZiAoZmlsZSkNCi0gICAgew0KLSAgICAgICAgdmZw
cmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOw0KLSAgICAgICAgZmNsb3NlKGZpbGUpOw0KLSAg
ICB9DQotI2VuZGlmDQotfQ0KLQ0KLXZvaWQgdHJhY2UoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHks
IGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQ0KLXsNCi0gICAgdmFfbGlzdCB2YXJhcmc7DQotICAg
IHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsNCi0jaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BF
UkYpDQotICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwgdmFyYXJn
KTsNCi0jZWxzZQ0KLSAgICBvdXRwdXQodHJhY2VGaWxlRGVidWdPbmx5LCBEM0RQRVJGX1NldE1h
cmtlciwgZm9ybWF0LCB2YXJhcmcpOw0KLSNlbmRpZg0KLSAgICB2YV9lbmQodmFyYXJnKTsNCi19
DQotDQotYm9vbCBwZXJmQWN0aXZlKCkNCi17DQotI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9Q
RVJGKQ0KLSAgICByZXR1cm4gZmFsc2U7DQotI2Vsc2UNCi0gICAgc3RhdGljIGJvb2wgYWN0aXZl
ID0gRDNEUEVSRl9HZXRTdGF0dXMoKSAhPSAwOw0KLSAgICByZXR1cm4gYWN0aXZlOw0KLSNlbmRp
Zg0KLX0NCi0NCi1TY29wZWRQZXJmRXZlbnRIZWxwZXI6OlNjb3BlZFBlcmZFdmVudEhlbHBlcihj
b25zdCBjaGFyKiBmb3JtYXQsIC4uLikNCi17DQotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikNCi0gICAgdmFfbGlzdCB2YXJhcmc7DQotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0
KTsNCi0gICAgb3V0cHV0KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9u
PihEM0RQRVJGX0JlZ2luRXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7DQotICAgIHZhX2VuZCh2YXJh
cmcpOw0KLSNlbmRpZg0KLX0NCi0NCi1TY29wZWRQZXJmRXZlbnRIZWxwZXI6On5TY29wZWRQZXJm
RXZlbnRIZWxwZXIoKQ0KLXsNCi0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQ0KLSAg
ICBpZiAocGVyZkFjdGl2ZSgpKQ0KLSAgICB7DQotICAgICAgICBEM0RQRVJGX0VuZEV2ZW50KCk7
DQotICAgIH0NCi0jZW5kaWYNCi19DQotfQ0KKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVn
LmNwcDogRGVidWdnaW5nIHV0aWxpdGllcy4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxkM2Q5
Lmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCituYW1lc3BhY2UgZ2wKK3sKKwordHlwZWRlZiB2
b2lkIChXSU5BUEkgKlBlcmZPdXRwdXRGdW5jdGlvbikoRDNEQ09MT1IsIExQQ1dTVFIpOworCitz
dGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBlcmZPdXRwdXRGdW5j
dGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmFyZykKK3sKKyNp
ZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAg
ICB7CisgICAgICAgIGNoYXIgbWVzc2FnZVszMjc2OF07CisgICAgICAgIGludCBsZW4gPSB2c3By
aW50Zl9zKG1lc3NhZ2UsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
ZXJlIGFyZSBubyBBU0NJSSB2YXJpYW50cyBvZiB0aGVzZSBEM0RQRVJGIGZ1bmN0aW9ucy4KKyAg
ICAgICAgd2NoYXJfdCB3aWRlTWVzc2FnZVszMjc2OF07CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdlW2ldID0g
bWVzc2FnZVtpXTsKKyAgICAgICAgfQorICAgICAgICB3aWRlTWVzc2FnZVtsZW5dID0gMDsKKwor
ICAgICAgICBwZXJmRnVuYygwLCB3aWRlTWVzc2FnZSk7CisgICAgfQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRlZmluZWQoTkRFQlVHKQorICAgIGlm
ICh0cmFjZUZpbGVEZWJ1Z09ubHkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUsICJhIik7Cisg
ICAgaWYgKGZpbGUpCisgICAgeworICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFy
Zyk7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCB0cmFj
ZShib29sIHRyYWNlRmlsZURlYnVnT25seSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cisg
ICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOworI2lmIGRl
ZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQorICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHks
IE5VTEwsIGZvcm1hdCwgdmFyYXJnKTsKKyNlbHNlCisgICAgb3V0cHV0KHRyYWNlRmlsZURlYnVn
T25seSwgRDNEUEVSRl9TZXRNYXJrZXIsIGZvcm1hdCwgdmFyYXJnKTsKKyNlbmRpZgorICAgIHZh
X2VuZCh2YXJhcmcpOworfQorCitib29sIHBlcmZBY3RpdmUoKQoreworI2lmIGRlZmluZWQoQU5H
TEVfRElTQUJMRV9QRVJGKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgc3RhdGljIGJv
b2wgYWN0aXZlID0gRDNEUEVSRl9HZXRTdGF0dXMoKSAhPSAwOworICAgIHJldHVybiBhY3RpdmU7
CisjZW5kaWYKK30KKworU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRIZWxw
ZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisjaWYgIWRlZmluZWQoQU5HTEVfRElTQUJM
RV9QRVJGKQorICAgIHZhX2xpc3QgdmFyYXJnOworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0
KTsKKyAgICBvdXRwdXQodHJ1ZSwgcmVpbnRlcnByZXRfY2FzdDxQZXJmT3V0cHV0RnVuY3Rpb24+
KEQzRFBFUkZfQmVnaW5FdmVudCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJn
KTsKKyNlbmRpZgorfQorCitTY29wZWRQZXJmRXZlbnRIZWxwZXI6On5TY29wZWRQZXJmRXZlbnRI
ZWxwZXIoKQoreworI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKKyAgICBpZiAocGVy
ZkFjdGl2ZSgpKQorICAgIHsKKyAgICAgICAgRDNEUEVSRl9FbmRFdmVudCgpOworICAgIH0KKyNl
bmRpZgorfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJz
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi92
ZXJzaW9uLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vdmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogI2RlZmlu
ZSBNQUpPUl9WRVJTSU9OIDEKICNkZWZpbmUgTUlOT1JfVkVSU0lPTiAwCiAjZGVmaW5lIEJVSUxE
X1ZFUlNJT04gMAotI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAxMDA5CisjZGVmaW5lIEJVSUxEX1JF
VklTSU9OIDExNjYKIAogI2RlZmluZSBTVFJJTkdJRlkoeCkgI3gKICNkZWZpbmUgTUFDUk9fU1RS
SU5HSUZZKHgpIFNUUklOR0lGWSh4KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwx
MSArMTYsNiBAQCBuYW1lc3BhY2UgewogLy8gZXZhbHVhdGVkLiBUaGlzIGlzIHVubGlrZWx5IHRv
IHNob3cgdXAgaW4gcmVhbCBzaGFkZXJzLCBidXQgaXMgc29tZXRoaW5nIHRvCiAvLyBjb25zaWRl
ci4KIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXJjZVtdID0gewotICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICJ2ZWMy
IHdlYmdsX2F0YW5fZW11KHZlYzIgeSwgdmVjMiB4KSB7IHJldHVybiB2ZWMyKGF0YW4oeVswXSwg
eFswXSksIGF0YW4oeVsxXSwgeFsxXSkpOyB9IiwKLSAgICAidmVjMyB3ZWJnbF9hdGFuX2VtdSh2
ZWMzIHksIHZlYzMgeCkgeyByZXR1cm4gdmVjMyhhdGFuKHlbMF0sIHhbMF0pLCBhdGFuKHlbMV0s
IHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pKTsgfSIsCi0gICAgInZlYzQgd2ViZ2xfYXRhbl9lbXUo
dmVjNCB5LCB2ZWM0IHgpIHsgcmV0dXJuIHZlYzQoYXRhbih5WzBdLCB4WzBdKSwgYXRhbih5WzFd
LCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSwgYXRhbih5WzNdLCB4WzNdKSk7IH0iLAotCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAogICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBjb3ModmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3Mo
dmVjMykiLApAQCAtNDEsMTEgKzM2LDYgQEAgY29uc3QgY2hhcioga0Z1bmN0aW9uRW11bGF0aW9u
VmVydGV4U291cgogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjMykiLAog
ICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAogCi0gICAgIiNlcnJv
ciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwgZmxvYXQpIiwKLSAgICAidmVjMiB3ZWJnbF9t
b2RfZW11KHZlYzIgeCwgdmVjMiB5KSB7IHJldHVybiB2ZWMyKG1vZCh4WzBdLCB5WzBdKSwgbW9k
KHhbMV0sIHlbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xfbW9kX2VtdSh2ZWMzIHgsIHZlYzMg
eSkgeyByZXR1cm4gdmVjMyhtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSwgbW9kKHhb
Ml0sIHlbMl0pKTsgfSIsCi0gICAgInZlYzQgd2ViZ2xfbW9kX2VtdSh2ZWM0IHgsIHZlYzQgeSkg
eyByZXR1cm4gdmVjNChtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFdKSwgbW9kKHhbMl0s
IHlbMl0pLCBtb2QoeFszXSwgeVszXSkpOyB9IiwKLQogICAgICIjZGVmaW5lIHdlYmdsX25vcm1h
bGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkp
IiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAi
I2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKQEAgLTU4LDQyICs0OCwz
MiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3VyCiB9OwogCiBjb25z
dCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0gewotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGF0
YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gZmxvYXQgd2ViZ2xf
Y29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIs
CiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11KHdlYmdsX2VtdV9w
cmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3ZWJnbF9lbXVfcHJl
Y2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgYSkgeyBy
ZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IHdlYmdsX2Nv
c19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNvcyhhKTsgfSIsCiAK
LSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQsIGZsb2F0KSIsCisg
ICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0gKHkpID8gKHgpIC0g
KHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGRpc3RhbmNl
KHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UodmVj
MywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0YW5jZSh2ZWM0LCB2
ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZsb2F0LCBmbG9hdCki
LAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5KSkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAgICIjZXJyb3Igbm8g
ZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9u
IGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxl
bmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUoeCkgKCh4KSA+PSAw
LjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2
ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWMzKSIsCiAgICAg
IiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBt
b2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjNCwg
dmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1hbGl6ZShmbG9hdCki
LAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAg
OiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBm
b3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFs
aXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzQp
IiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZsb2F0LCBmbG9hdCki
LAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkgLSAyLjAgKiAoTikg
KiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgcmVmbGVjdCh2ZWMy
LCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxlY3QodmVjMywgdmVj
MykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZlYzQsIHZlYzQpIgpA
QCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50
U28KIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4TWFza1tdID0gewogI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQogICAgIC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2ZXIgYnVncyBpbiBN
YWMuCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uQXRhbjJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuM18zCi0gICAgZmFsc2UsIC8v
IFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMQogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczMKQEAgLTEyMiwx
MCArOTgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIHRydWUsICAv
LyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIK
ICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEwICsxMDgsNiBAQCBj
b25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvblJlZmxlY3Q0XzQKICNlbHNlCiAgICAgLy8gV29yayBhcm91bmQgRDNEIGRyaXZlciBi
dWcgaW4gV2luLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgdHJ1ZSwgIC8v
IFRGdW5jdGlvbkF0YW4yXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIHRy
dWUsICAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCkBA
IC0xNTYsMTAgKzEyNCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4TWFz
a1sKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgogICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25MZW5ndGgzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTW9kMV8xCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDJfMgotICAgIHRydWUs
ICAvLyBURnVuY3Rpb25Nb2QzXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uTW9kNF80CiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9y
bWFsaXplMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCkBAIC0xNzMsMjIgKzEz
NywzOCBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiB9OwogCiBj
b25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0gewotICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFu
NF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91bmQgYSBBVEkgZHJp
dmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBXb3JrIGFyb3VuZCBB
VEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3MxCiAgICAg
dHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQ29zMwogICAg
IHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRpc3RhbmNl
MV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlNF80Cisg
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Eb3Qy
XzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMworICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEK
KyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTQKKyAgICB0cnVl
LCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0
Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBEM0QgZHJpdmVyIGJ1
ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAgZmFsc2UsIC8vIFRG
dW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTFfMQog
ICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNlLCAvLyBURnVuY3Rp
b25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVt
dWxhdGlvbkZyYWdtZW50TWFzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0
Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25N
b2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5j
dGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXpl
MwpAQCAtMjEzLDYgKzE4OSw3IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uRnJhZ21l
bnRNYXMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgogICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25SZWZsZWN0M18zCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKKyNl
bmRpZgogICAgIGZhbHNlICAvLyBURnVuY3Rpb25Vbmtub3duCiB9OwogCkBAIC0zODYsMTggKzM2
MywxMiBAQCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvCiAKICAgICB1
bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAgIHN3aXRjaCAob3Ap
IHsKLSAgICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgZnVuY3Rpb24gPSBURnVuY3Rp
b25BdGFuMV8xOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6
CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRpc3RhbmNlMV8xOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wRG90OgogICAgICAgICAgICAgZnVuY3Rpb24gPSBU
RnVuY3Rpb25Eb3QxXzE7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNb2Q6
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbk1vZDFfMTsKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRG
dW5jdGlvblJlZmxlY3QxXzE7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTIgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMu
CiAgICAgLy8KICAgICBlbnVtIFRCdWlsdEluRnVuY3Rpb24gewotICAgICAgICBURnVuY3Rpb25B
dGFuMV8xID0gMCwgIC8vIGZsb2F0IGF0YW4oZmxvYXQsIGZsb2F0KTsKLSAgICAgICAgVEZ1bmN0
aW9uQXRhbjJfMiwgIC8vIHZlYzIgYXRhbih2ZWMyLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9u
QXRhbjNfMywgIC8vIHZlYzMgYXRhbih2ZWMzLCB2ZWMyKTsKLSAgICAgICAgVEZ1bmN0aW9uQXRh
bjRfNCwgIC8vIHZlYzQgYXRhbih2ZWM0LCB2ZWMyKTsKLQotICAgICAgICBURnVuY3Rpb25Db3Mx
LCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uQ29zMSA9IDAsICAvLyBm
bG9hdCBjb3MoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Db3MyLCAgLy8gdmVjMiBjb3ModmVj
Mik7CiAgICAgICAgIFRGdW5jdGlvbkNvczMsICAvLyB2ZWMzIGNvcyh2ZWMzKTsKICAgICAgICAg
VEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZlYzQpOwpAQCAtNzAsMTEgKzY1LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxlbmd0aCh2ZWMzKTsK
ICAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2ZWM0KTsKIAotICAg
ICAgICBURnVuY3Rpb25Nb2QxXzEsICAvLyBmbG9hdCBtb2QoZmxvYXQsIGZsb2F0KTsKLSAgICAg
ICAgVEZ1bmN0aW9uTW9kMl8yLCAgLy8gdmVjMiBtb2QodmVjMiwgdmVjMik7Ci0gICAgICAgIFRG
dW5jdGlvbk1vZDNfMywgIC8vIHZlYzMgbW9kKHZlYzMsIHZlYzMpOwotICAgICAgICBURnVuY3Rp
b25Nb2Q0XzQsICAvLyB2ZWM0IG1vZCh2ZWM0LCB2ZWM0KTsKLQogICAgICAgICBURnVuY3Rpb25O
b3JtYWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKICAgICAgICAgVEZ1bmN0aW9u
Tm9ybWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOwogICAgICAgICBURnVuY3Rpb25O
b3JtYWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAJKHJldmlzaW9uIDEy
MjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgsMTAgKzgsMjEgQEAKICNpbmNsdWRlICJjb21waWxlci9E
ZXRlY3RSZWN1cnNpb24uaCIKICNpbmNsdWRlICJjb21waWxlci9Gb3JMb29wVW5yb2xsLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9NYXBMb25nVmFyaWFibGVO
YW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvUmVuYW1lRnVuY3Rpb24uaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgorCitib29sIGlzV2ViR0xCYXNlZFNwZWMo
U2hTaGFkZXJTcGVjIHNwZWMpCit7CisgICAgIHJldHVybiBzcGVjID09IFNIX1dFQkdMX1NQRUMg
fHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOworfQogCiBuYW1lc3BhY2UgewogYm9vbCBJ
bml0aWFsaXplU3ltYm9sVGFibGUoCkBAIC0xMjMsNyArMTM0LDcgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGluZGV4aW5nIGFzIHdl
bGwuCi0gICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfV0VCR0xfU1BFQykKKyAgICBpZiAoaXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAt
MTYxLDYgKzE3MiwxMiBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25z
CiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1ZBTElEQVRFX0xP
T1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRlTGltaXRhdGlvbnMo
cm9vdCk7CiAKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVElN
SU5HX1JFU1RSSUNUSU9OUykpCisgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVRpbWluZ1Jl
c3RyaWN0aW9ucyhyb290LCAoY29tcGlsZU9wdGlvbnMgJiBTSF9ERVBFTkRFTkNZX0dSQVBIKSAh
PSAwKTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJTcGVjID09IFNIX0NTU19TSEFE
RVJTX1NQRUMpCisgICAgICAgICAgICByZXdyaXRlQ1NTU2hhZGVyKHJvb3QpOworCiAgICAgICAg
IC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRl
TGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCiAgICAgICAgICAgICBG
b3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmco
cm9vdCk7CkBAIC0yMzUsMTIgKzI1Miw1OCBAQCBib29sIFRDb21waWxlcjo6ZGV0ZWN0UmVjdXJz
aW9uKFRJbnRlcm1OCiAgICAgfQogfQogCit2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWlu
KCIsICJjc3NfbWFpbigiKTsKKyAgICByb290LT50cmF2ZXJzZSgmcmVuYW1lcik7Cit9CisKIGJv
b2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KSB7CiAg
ICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBpbmZvU2luay5pbmZv
KTsKICAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwogICAgIHJldHVybiB2YWxpZGF0ZS5u
dW1FcnJvcnMoKSA9PSAwOwogfQogCitib29sIFRDb21waWxlcjo6ZW5mb3JjZVRpbWluZ1Jlc3Ry
aWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCkKK3sKKyAgICBpZiAo
c2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwg
IlRpbWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZvcmNlZCB1bmRlciB0aGUgV2ViR0wgc3Bl
Yy4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKSB7CisgICAgICAgIFREZXBlbmRlbmN5R3JhcGggZ3JhcGgo
cm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3QuCisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhncmFw
aCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRlcGVuZGVuY3kgZ3Jh
cGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkgeworICAgICAgICAgICAgVERlcGVuZGVuY3lH
cmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7CisgICAgICAgICAgICBvdXRwdXQub3V0
cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVuZm9y
Y2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMocm9vdCk7CisgICAgfQorfQorCitib29s
IFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0
IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmljdG9yLmVuZm9yY2VS
ZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09
IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJp
Y3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7CisgICAgcmVzdHJpY3Rvci5lbmZvcmNlUmVz
dHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0cmljdG9yLm51bUVycm9ycygpID09IDA7
Cit9CisKIHZvaWQgVENvbXBpbGVyOjpjb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2Rl
KiByb290KQogewogICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1
bmlmb3Jtcyk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0
ZWN0RGlzY29udGludWl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHku
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBDb250
YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNMJ3MgbGFjayBvZiBz
dXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIChpbXBs
aWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBvZiBmdW5jdGlvbnMg
d2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERp
c2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25h
bWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dHJhdmVyc2UoVElu
dGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CisgICAg
bm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29udGludWl0eTsKK30K
KworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29udGludWl0eSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdl
dEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToKKyAgICAgICAgbUxv
b3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
ICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQorewor
ICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNvbnRhaW5zTG9vcERp
c2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0TG9vcERpc2NvbnRp
bnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRldGVjdExvb3BEaXNj
b250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3JhZGllbnRPcGVyYXRp
b24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICByZXR1cm4gbUdyYWRp
ZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgaWYgKG1HcmFkaWVu
dE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BERmR4OgorICAgICAg
Y2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRP
cGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246OnZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIGlmIChtR3Jh
ZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAgIHsKKyAgICAgICAg
aWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJp
bmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAgICAgICAgICAgbmFt
ZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJl
Q3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRpZW50T3BlcmF0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVk
LCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgdG8g
Y29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3JhZGllbnRPcGVyYXRp
b24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFtR3JhZGllbnRPcGVy
YXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihUSW50ZXJtTm9kZSAq
bm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RHcmFkaWVudE9wZXJh
dGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJhdmVyc2Uobm9kZSk7
Cit9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0
RGlzY29udGludWl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENvbnRhaW5zIGFuYWx5
c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9mIHN1cHBvcnQgZm9y
CisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGltcGxpY2l0bHkgb3Ig
ZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9ucyB3aXRoIGRpc2Nv
bnRpbnVpdGllcy4gCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlf
SF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFjZSBzaAoreworLy8gQ2hlY2tzIHdo
ZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEgdmFyaWFibGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMK
K2NsYXNzIERldGVjdExvb3BEaXNjb250aW51aXR5IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
K3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworCisg
IHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUxvb3BEaXNjb250aW51aXR5OworfTsKKwor
Ym9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpub2RlKTsKKworLy8g
Q2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIGNvbXB1dGUgZ3JhZGllbnRzCitj
bGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKKworICBw
cm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkg
Km5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtR3JhZGllbnRPcGVyYXRpb247Cit9OworCitib29s
IGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFn
bm9zdGljcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VM
b2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0aWNzOjp+VERpYWdu
b3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBz
ZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxv
Y2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1NpbmsuaW5mbzsK
KyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/IEVQcmVmaXhFcnJv
ciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgocHJlZml4
KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwgbG9jLmxpbmUp
KTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAiICIg
PDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlRGVidWcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcgPDwgc3RyOworfQor
Cit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9ESUFHTk9TVElDU19IXworCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIgorCitjbGFz
cyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3Rp
Y3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9TaW5rKTsK
KyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJbmZvU2luayYgaW5mb1Npbmso
KSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAgIHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNl
dmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9j
LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisKKyAgICB2b2lkIHdyaXRlRGVidWcoY29uc3Qg
c3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwcmlu
dChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsK
KworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYgbUluZm9TaW5rOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVI
YW5kbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisjaW5jbHVkZSA8c3N0
cmVhbT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6
OnN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrUmVxdWlyZSgi
cmVxdWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5hYmxlKCJlbmFibGUi
KTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRpc2FibGUiKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKworICAgIGlmIChzdHIg
PT0ga1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRW5h
YmxlKSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBrRGlzYWJsZSkgcmV0
dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSByZXR1cm4gRUJoV2Fy
bjsKKyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZlSGFuZGxlcjo6VERp
cmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQor
ICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5URGlyZWN0aXZlSGFu
ZGxlcigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUVycm9yKGNvbnN0
IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25vc3RpY3Mud3JpdGVJ
bmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIpOworfQorCit2b2lk
IFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrU1RE
R0woIlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPcHRpbWl6ZSgib3B0
aW1pemUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVnKCJkZWJ1ZyIpOwor
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlkVmFsdWUgPSBmYWxz
ZTsKKyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAvLyBUaGUgU1RER0wg
cHJhZ21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkgZnV0dXJlCisgICAg
ICAgIC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGlu
dmFsaWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0ga0RlYnVnKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1ZyA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAg
ICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6VU5SRUNPR05JWkVE
X1BSQUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChp
bnZhbGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGlj
czo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcHJh
Z21hIHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb24nIG9y
ICdvZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4
dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZp
b3IpCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwoImFsbCIpOworCisg
ICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAgICB7CisgICAgICAg
IGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7CisgICAgICAgICAgICBt
RGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVxdWlyZScgYmVoYXZp
b3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZhbCA9PSBFQmhFbmFi
bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRp
YWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImNhbm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6aXRlcmF0
b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAgICAgICAgICAgICBp
dGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0ZXIgPSBtRXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0ZW5zaW9uQmVoYXZp
b3IuZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6U2V2ZXJpdHkgc2V2
ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwp
IHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkgPSBwcDo6RGlhZ25v
c3RpY3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAg
ICAgY2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAgICAgICBzZXZlcml0
eSA9IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
bURpYWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVkIik7Cit9CisKK3Zv
aWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0
aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJz
aW9uKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7CisKKyAgICBpZiAo
dmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0
cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0
ciA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6RGlh
Z25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZl
cnNpb24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1ByYWdtYS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIgorCitj
bGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJlY3RpdmVIYW5kbGVyIDogcHVibGljIHBw
OjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoKKyAgICBURGlyZWN0aXZlSGFuZGxlcihU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICAgIFRE
aWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgflREaXJlY3RpdmVIYW5kbGVy
KCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBjb25zdCB7IHJldHVybiBtUHJhZ21h
OyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNv
bnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsgfQorCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVo
YXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJj
ZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNp
b24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBtUHJhZ21hOworICAgIFRFeHRlbnNpb25C
ZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAgIFREaWFnbm9zdGljcyYgbURpYWdub3N0
aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4
dGVuc2lvbkJlaGF2aW9yLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC03LDkgKzcsMTEgQEAKICNpZm5kZWYgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KICNk
ZWZpbmUgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KIAotI2luY2x1ZGUgImNvbXBpbGVy
L0NvbW1vbi5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAKLXR5cGVkZWYg
ZW51bSB7Cit0eXBlZGVmIGVudW0KK3sKICAgICBFQmhSZXF1aXJlLAogICAgIEVCaEVuYWJsZSwK
ICAgICBFQmhXYXJuLApAQCAtMTksMjAgKzIxLDE3IEBAIHR5cGVkZWYgZW51bSB7CiAKIGlubGlu
ZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0cmluZyhUQmVoYXZpb3IgYikKIHsKLSAgICBzd2l0
Y2goYikgewotICAgICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICByZXR1cm4gInJlcXVpcmUi
OwotICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAgIHJldHVybiAiZW5hYmxlIjsKLSAgICAg
IGNhc2UgRUJoV2FybjoKLSAgICAgICAgcmV0dXJuICJ3YXJuIjsKLSAgICAgIGNhc2UgRUJoRGlz
YWJsZToKLSAgICAgICAgcmV0dXJuICJkaXNhYmxlIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBOVUxMOworICAgIHN3aXRjaChiKQorICAgIHsKKyAgICAgIGNhc2UgRUJoUmVxdWly
ZTogcmV0dXJuICJyZXF1aXJlIjsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOiByZXR1cm4gImVuYWJs
ZSI7CisgICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7CisgICAgICBjYXNlIEVCaERp
c2FibGU6IHJldHVybiAiZGlzYWJsZSI7CisgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKICAg
ICB9CiB9CiAKLXR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhh
dmlvcjsKKy8vIE1hcHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQgYmVoYXZpb3IuCit0
eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlv
cjsKIAogI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw3ICs0NzUsNyBAQCBzdGF0aWMg
VFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXBl
bmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgogLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3Rh
dGljIFRTdHJpbmcgQnVpbHRJbkNvbnN0YW50cyhjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJl
c291cmNlcykKK3N0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoU2hTaGFkZXJTcGVjIHNw
ZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogewogICAgIFRTdHJpbmdT
dHJlYW0gczsKIApAQCAtNDg3LDcgKzQ4Nyw5IEBAIHN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25z
dGFudHMoY29uc3QgU2gKICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMg
PDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIg
PDwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKICAgICBzIDw8ICJjb25z
dCBpbnQgZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhE
cmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzIDw8ICI7IjsKKworICAg
IGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgICAgIHMgPDwgImNvbnN0IGlu
dCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzIDw8ICI7
IjsKIAogICAgIHJldHVybiBzLnN0cigpOwogfQpAQCAtNTEzLDcgKzUxNSw3IEBAIHZvaWQgVEJ1
aWx0SW5zOjppbml0aWFsaXplKFNoU2hhZGVyVHlwZSAKICAgICBkZWZhdWx0OiBhc3NlcnQoZmFs
c2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKICAgICB9CiAKLSAgICBidWlsdEluU3Ry
aW5ncy5wdXNoX2JhY2soQnVpbHRJbkNvbnN0YW50cyhyZXNvdXJjZXMpKTsKKyAgICBidWlsdElu
U3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkNvbnN0YW50cyhzcGVjLCByZXNvdXJjZXMpKTsKIH0K
IAogdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMg
c3BlYywKQEAgLTUyNiwxMSArNTI4LDIyIEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRl
clR5cGUgdHlwZSwKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFH
TUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9u
dEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFb
Z2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdE
YXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQi
KSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
UG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbiBD
U1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZm
ZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3Ig
YW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAvLworICAgICAgICBp
ZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAg
ICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
SF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElu
cyhTaFNoYWRlclR5cGUgdHlwZSwKIAogICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNp
ZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgU0hfRlJBR01FTlRf
U0hBREVSOiB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGlmIChzcGVj
ICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKICAgICAgICAgICAgIC8vIFNldCB1cCBnbF9GcmFn
RGF0YS4gIFRoZSBhcnJheSBzaXplLgogICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAg
IGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9vc2lu
Y2x1ZGUuaCIKKworT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZB
TElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQorewor
ICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkg
eworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBh
cnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisg
ICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisg
ICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFy
c2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJzZUNvbnRleHRJbmRl
eCgpCit7CisgICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXg7CisKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQ
YXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExT
X0lOREVYOworCisgICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOworfQorCiti
b29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJz
ZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4
IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
VGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQ
YXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsK
KyAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxp
emVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VD
b250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlm
IChscFRocmVhZERhdGEgPT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUds
b2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRocmVhZERhdGEtPmxw
R2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNv
bnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEZyZWVQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNl
Q29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNl
Q29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFs
dWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQpCisg
ICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKKworICAgIHJldHVybiB0cnVlOworfQorCitU
UGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICAvLwor
ICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKworICAgIFRU
aHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBh
cnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwor
CisgICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKK30KKwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw0ICsxMywxNCBAQCBib29sIEZyZWVQYXJzZUNvbnRleHRJ
bmRleCgpOwogYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7CiBib29sIEZyZWVQ
YXJzZUNvbnRleHQoKTsKIAorc3RydWN0IFRQYXJzZUNvbnRleHQ7Cit0eXBlZGVmIFRQYXJzZUNv
bnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOworZXh0ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVy
JiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyNkZWZpbmUgR2xvYmFsUGFyc2VDb250ZXh0IEdl
dEdsb2JhbFBhcnNlQ29udGV4dCgpCisKK3R5cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJzZUNvbnRl
eHRSZWMKK3sKKyAgICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBhcnNlQ29udGV4dDsKK30gVFRo
cmVhZFBhcnNlQ29udGV4dDsKKwogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhU
X0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0zNzMsNyArMzczLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFy
eU1hdAogLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCiAvLwogLy8gUmV0dXJucyBh
biBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYKLS8v
IGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZS4KKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3Jl
Z2F0ZSBidXQgbm8gb3BlcmF0b3Igd2FzIHNldC4KIC8vCiBUSW50ZXJtQWdncmVnYXRlKiBUSW50
ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJh
dG9yIG9wLCBUU291cmNlTG9jIGxpbmUpCiB7CkBAIC01OTIsMTAgKzU5MiwxMCBAQCBUSW50ZXJt
Tm9kZSogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uCiAgICAgLy8KIAogICAgIGlmIChjb25k
LT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAgICAgICAgICByZXR1
cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSA9PSB0
cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0QWdncmVnYXRlT3Bl
cmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5ub2RlMS0+Z2V0TGlu
ZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5u
b2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIubm9kZTItPmdldExp
bmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcg
VEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOwpA
QCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0
aW8KICAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCiAgICAgLy8KICAgICBUSW50ZXJtU2Vs
ZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxz
ZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0VHlwZVBvaW50ZXIo
KS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgbm9kZS0+c2V0TGluZShsaW5lKTsK
IAogICAgIHJldHVybiBub2RlOwpAQCAtMTQ0NCw5ICsxNDQ1LDMgQEAgVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29ucwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKLXZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6YWRkVG9QcmFn
bWFUYWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSkKLXsKLSAgICBhc3NlcnQoIXByYWdt
YVRhYmxlKTsKLSAgICBwcmFnbWFUYWJsZSA9IG5ldyBUUHJhZ21hVGFibGUoKTsKLSAgICAqcHJh
Z21hVGFibGUgPSBwVGFibGU7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDkgQEAg
VFN0cmluZyBtYXBMb25nTmFtZShpbnQgaWQsIGNvbnN0IFRTdHJpbgogICAgIHN0cmVhbSA8PCAi
d2ViZ2xfIjsKICAgICBpZiAoaXNHbG9iYWwpCiAgICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAg
c3RyZWFtIDw8IGlkIDw8ICJfIjsKKyAgICBzdHJlYW0gPDwgaWQ7CisgICAgaWYgKG5hbWVbMF0g
IT0gJ18nKQorICAgICAgICBzdHJlYW0gPDwgIl8iOwogICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0
cigwLCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkp
OwogICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMTAgKzYsMTIgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVy
L091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKIAogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIyLDEzIEBAIG5hbWVzcGFjZSBz
aAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmlu
dGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp
LCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBPdXRwdXRITFNMOjpPdXRwdXRI
TFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVl
LCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVu
Zm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3
IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5zaWRlRnVuY3Rpb24g
PSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CkBAIC0zOCw2ICs0MCwxMiBA
QCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbVVzZXNUZXh0
dXJlQ3ViZSA9IGZhbHNlOwogICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwogICAg
IG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDAgPSBm
YWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4
dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMg
PSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IGZhbHNlOworICAgIG1Vc2VzVGV4
dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsK
ICAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOwogICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNl
OwpAQCAtNzUsMjAgKzgzLDI2IEBAIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4
dCAmY28KICAgICBtU2NvcGVEZXB0aCA9IDA7CiAKICAgICBtVW5pcXVlSW5kZXggPSAwOworCisg
ICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBtT3V0cHV0TG9kMEZ1
bmN0aW9uID0gZmFsc2U7CisgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CiB9
CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKIHsKLSAgICBkZWxldGUgbVVuZm9sZFNlbGVj
dDsKKyAgICBkZWxldGUgbVVuZm9sZFNob3J0Q2lyY3VpdDsKIH0KIAogdm9pZCBPdXRwdXRITFNM
OjpvdXRwdXQoKQogeworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gY29udGFpbnNM
b29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7CisKICAgICBtQ29udGV4dC50cmVl
Um9vdC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZpcnN0IHRvIGRldGVy
bWluZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCiAgICAgaGVhZGVyKCk7CiAKLSAgICBt
Q29udGV4dC5pbmZvU2luay5vYmogPDwgbUhlYWRlci5jX3N0cigpOwotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtQm9keS5jX3N0cigpOworICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2Jq
IDw8IG1IZWFkZXIuY19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtQm9k
eS5jX3N0cigpOwogfQogCiBUSW5mb1NpbmtCYXNlICZPdXRwdXRITFNMOjpnZXRCb2R5U3RyZWFt
KCkKQEAgLTIwNSwyNSArMjE5LDExIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgb3V0IDw8ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgLy8g
VGhlIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zICJmbGlwIiB0aGUgWSBjb29yZGluYXRlIGluIG9u
ZSB3YXkgb3IgYW5vdGhlci4gVGhpcyBpcyBiZWNhdXNlIHRleHR1cmVzIGFyZSBzdG9yZWQKLSAg
ICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBPcGVuR0wgY29udmVudGlvbiwgaS5lLiAoMCwgMCkg
aXMgImJvdHRvbSBsZWZ0IiwgcmF0aGVyIHRoYW4gdGhlIEQzRCBjb252ZW50aW9uIHdoZXJlICgw
LCAwKQotICAgICAgICAvLyBpcyAidG9wIGxlZnQiLiBTaW5jZSB0aGUgSExTTCB0ZXh0dXJlIGZl
dGNoIGZ1bmN0aW9ucyBleHBlY3QgdGV4dHVyZXMgdG8gYmUgc3RvcmVkIGFjY29yZGluZyB0byB0
aGUgRDNECi0gICAgICAgIC8vIGNvbnZlbnRpb24sIHRoZSBZIGNvb3JkaW5hdGUgcGFzc2VkIHRv
IHRoZXNlIGZ1bmN0aW9ucyBpcyBhZGp1c3RlZCB0byBjb21wZW5zYXRlLgotICAgICAgICAvLwot
ICAgICAgICAvLyBUaGUgc2ltcGxlc3QgY2FzZSBpcyB0ZXh0dXJlMkQgd2hlcmUgdGhlIG1hcHBp
bmcgaXMgWSAtPiAxLVksIHdoaWNoIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gVGhlIHRleHR1cmUyRFByb2ogZnVuY3Rpb25zIGFyZSBtb3JlIGNvbXBsaWNh
dGVkIGJlY2F1c2UgdGhlIHByb2plY3Rpb24gZGl2aWRlcyBieSBlaXRoZXIgWiBvciBXLiBGb3Ig
dGhlIHZlYzMKLSAgICAgICAgLy8gY2FzZSwgdGhlIG1hcHBpbmcgaXMgWSAtPiBaLVkgb3IgWS9a
IC0+IDEtWS9aLCB3aGljaCBhZ2FpbiBtYXBzIFswLCAxXSAtPiBbMSwgMF0uCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIEZvciBjdWJlIHRleHR1cmVzIHRoZSBtYXBwaW5nIGlzIFkgLT4gLVksIHdo
aWNoIG1hcHMgWy0xLCAxXSAtPiBbMSwgLTFdLiBUaGlzIGlzIG5vdCBzdWZmaWNpZW50IG9uIGl0
cyBvd24gZm9yIHRoZQotICAgICAgICAvLyArWSBhbmQgLVkgZmFjZXMsIHdoaWNoIGFyZSBub3cg
b24gdGhlICJ3cm9uZyBzaWRlcyIgb2YgdGhlIGN1YmUuIFRoaXMgaXMgY29tcGVuc2F0ZWQgZm9y
IGJ5IGV4Y2hhbmdpbmcgdGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcyBldmVyeXdoZXJl
IGVsc2UgdGhyb3VnaG91dCB0aGUgY29kZS4KLSAgICAgICAgCiAgICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIGZsb2F0Mih0LngsIDEgLSB0
LnkpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCB0KTtcbiIK
ICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAg
ICAgIH0KQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQg
cywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgMSAt
IHQueSwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKICAgICAgICAgICAgICAgICAg
ICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI0MSwxMiAr
MjQxLDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQp
XG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC56IC0gdC55LCAwLCB0LnopKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55
LCAwLCB0LnopKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAg
ICAgICJcbiIKICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2Ft
cGxlcjJEIHMsIGZsb2F0NCB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQudyAtIHQu
eSwgdC56LCB0LncpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAg
ICAiXG4iOwogICAgICAgICB9CkBAIC0yNTUsMTIgKzI1NSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6
OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFz
KHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSAodC55IC8gdC56KSwgMCwgYmlhcykpO1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56
LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAg
ICAgICAgICAgICAgICAgICJcbiIKICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFz
KHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSAodC55IC8gdC53KSwgMCwgYmlhcykpO1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAg
ICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lk
IE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShz
LCBmbG9hdDModC54LCAtdC55LCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjc4LDcgKzI3OCw3MyBAQCB2b2lkIE91
dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0
LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNz
IGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCisgICAgICAgIC8vIFRo
ZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGlu
YXRlcy4KKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQy
IHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0
LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKHNhbXBsZXIy
RCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAg
ICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChz
YW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0
LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQ
cm9qTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgor
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBz
LCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0Lncs
IHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVD
dWJlTG9kMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9h
dDQodC54LCB0LnksIHQueiwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC04
OTcsNyArOTYzLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdAog
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBub2RlLT5nZXRUeXBl
KCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVs
ZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlw
ZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC05NzMsOSAr
MTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ldLnR5cGU7CiAK
ICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpICsgIiA9PSAi
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkVHlwZS0+
Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSArICIgPT0gIjsKICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUtPmdldEZpZWxkTmFt
ZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAo
aSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0xMDU0LDEyICsx
MTIwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAg
IGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwoIiwg
IiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNW
ZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwodHJhbnNwb3NlKCIsICIpLCAiLCAiKSIp
OyBicmVhazsKICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgiLCAiKSwgdHJhbnNwb3NlKCIsICIpKSki
KTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjogICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2Fs
T3I6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3VpdC0+Z2V0TmV4dFRl
bXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIGNhc2UgRU9wTG9n
aWNhbFhvcjoKICAgICAgICAgbVVzZXNYb3IgPSB0cnVlOwogICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAieG9yKCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIp
Iik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgb3V0IDw8ICJz
IiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAK
QEAgLTExMzEsOSArMTIwMSwzNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsCiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BMZW5ndGg6
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBi
cmVhazsKICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERGZHg6ICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKC1kZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRndpZHRoOiAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJl
YWs7ICAgICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYobUluc2lkZURpc2Nv
bnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJkZHgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcERGZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCB8fCBtT3V0cHV0
TG9kMEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoKKyAgICAgICAgaWYo
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJhbnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVh
azsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEyICsxMjY4LDcgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5nZXRMaW5lKCkpOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KCpzaXQpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2UoKnNp
dCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMoKnNpdCk7CiAKICAg
ICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CiAgICAgICAgICAgICB9CkBAIC0xMjkwLDU5ICsx
MzgyLDY0IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAg
ICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQor
ICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisK
KyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2Rl
LT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFt
ZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFpbigiOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigiOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5j
ZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKIAotICAgICAgICAgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVuY2VbMF0tPmdldEFz
QWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3lt
Ym9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbC0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3Ioc3lt
Ym9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUoKS5nZXRUeXBlTmFt
ZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHN5
bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3lt
Ym9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVuY2UuYmVnaW4oKSk7Ci0K
LSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8
PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHNlcXVlbmNlWzFdLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUt
PmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAgICAgICAgICAgICBtSW5zaWRl
RnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGlu
dWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVu
Y3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0NywxMDYgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgaWYgKHZpc2l0ID09IFBy
ZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRG
dW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rp
b247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8
ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8IChsb2Qw
ID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZDAgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRM
b2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9q
X2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAz
KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZDAoIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiKQogICAgICAgICAg
ICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzMyLDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmkKIAogICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9y
KCkpCiAgICAgewotICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRTZWxlY3QtPmdldE5leHRU
ZW1wb3JhcnlJbmRleCgpOworICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRTaG9ydENpcmN1
aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwogICAgIH0KICAgICBlbHNlICAvLyBpZi9lbHNl
IHN0YXRlbWVudAogICAgIHsKLSAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+
Z2V0Q29uZGl0aW9uKCkpOworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShu
b2RlLT5nZXRDb25kaXRpb24oKSk7CiAKICAgICAgICAgb3V0IDw8ICJpZigiOwogCkBAIC0xNjAw
LDExICsxNzQ5LDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmkK
IAogICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIHRy
YXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgIG91dCA8
PCAiO31cbiI7CisgICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAgICBpZiAobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYzLDEwIEBAIGJvb2wg
T3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmkKICAgICAgICAgICAgIG91dCA8PCAi
e1xuIjsKIAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRGYWxzZUJs
b2NrKCktPmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRzKG5vZGUtPmdldEZh
bHNlQmxvY2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0
RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAg
ICAgICAgICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzMSw2
ICsxNzgwLDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnQKIAog
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2Rl
KQogeworICAgIGJvb2wgd2FzRGlzY29udGludW91cyA9IG1JbnNpZGVEaXNjb250aW51b3VzTG9v
cDsKKworICAgIGlmICghbUluc2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAgIHsKKyAgICAgICAg
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShub2Rl
KTsKKyAgICB9CisKICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJvb2wgT3V0cHV0SExT
TDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCAKIAogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAg
ICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB0
cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAKICAgICBvdXRwdXRM
aW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4NTAsOCBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgCiAKICAgICBvdXQgPDwgIn1cbiI7
CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3VzOworCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAsMTYgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdAogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lk
IE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAg
ICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgeworICAgICAgICBtVW5mb2xkU2hv
cnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9k
ZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBub2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTI3LDExIEBAIGJvb2wgT3V0cHV0SExTTDo6aXNT
aW5nbGVTdGF0ZW1lbnQoVEludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gSGFuZGxlIGxv
b3BzIHdpdGggbW9yZSB0aGFuIDI1NSBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBi
eSBzcGxpdHRpbmcgdGhlbQorLy8gSGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0aGFuIDI1NCBpdGVy
YXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhlbQorLy8gKFRoZSBE
M0QgZG9jdW1lbnRhdGlvbiBzYXlzIDI1NSBpdGVyYXRpb25zLCBidXQgdGhlIGNvbXBpbGVyIGNv
bXBsYWlucyBhdCBhbnl0aGluZyBtb3JlIHRoYW4gMjU0KS4KIGJvb2wgT3V0cHV0SExTTDo6aGFu
ZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAgICBjb25zdCBpbnQgTUFY
X0xPT1BfSVRFUkFUSU9OUyA9IDI1NDsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsK
IAogICAgIC8vIFBhcnNlIGxvb3BzIG9mIHRoZSBmb3JtOgpAQCAtMTg3NywxNCArMjA0NywxNCBA
QCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCkgLyBpbmNyZW1lbnQ7
CiAKLSAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IDI1NSkKKyAgICAgICAgICAgIGlmIChp
dGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1l
bnQgKiBzdGQ6Om1pbigyNTUsIGl0ZXJhdGlvbnMpOworICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKICAgICAgICAgICAgICAgICAvLyBmb3IoaW50IGluZGV4ID0g
aW5pdGlhbDsgaW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKIApAQCAt
MTkxNSw4ICsyMDg1LDggQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJ
bgogICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+Z2V0TGluZSgpKTsK
ICAgICAgICAgICAgICAgICBvdXQgPDwgIjt9XG4iOwogCi0gICAgICAgICAgICAgICAgaW5pdGlh
bCArPSAyNTUgKiBpbmNyZW1lbnQ7Ci0gICAgICAgICAgICAgICAgaXRlcmF0aW9ucyAtPSAyNTU7
CisgICAgICAgICAgICAgICAgaW5pdGlhbCArPSBNQVhfTE9PUF9JVEVSQVRJT05TICogaW5jcmVt
ZW50OworICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gTUFYX0xPT1BfSVRFUkFUSU9OUzsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDEyLDcgKzIx
ODIsNyBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50
eXBlOwogCi0gICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmll
bGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVs
ZCkgKyAiICIgKyBkZWNvcmF0ZShmaWVsZC5nZXRGaWVsZE5hbWUoKSkgKyBhcnJheVN0cmluZyhm
aWVsZCkgKyAiO1xuIjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RyaW5nICs9ICJ9
ICI7CkBAIC0yMDY1LDYgKzIyMzUsOCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmco
Y29uc3QgVFR5CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJE
IjsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTIxMzUsNyArMjMwNyw3IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0
b3IoY29uc3QgVFQKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0g
KmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5n
KGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVT
dHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC5nZXRGaWVsZE5hbWUoKSwg
dHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKICAgICAgICAgfQogCiAgICAgICAg
IHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0LDQgKzI2MDYsMTQgQEAgVFN0cmluZyBPdXRw
dXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29ucwogICAgIAogICAgIHJldHVybiBkZWNvcmF0ZShz
dHJpbmcpOwogfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0
cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1
cmUuZ2V0VHlwZU5hbWUoKS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsK
K30KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRI
TFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs
NyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsKLWNsYXNzIFVuZm9sZFNlbGVjdDsKK2NsYXNzIFVuZm9s
ZFNob3J0Q2lyY3VpdDsKIAogY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyCiB7CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnMKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00Nyw2ICs0OCw3IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAgICBib29sIHZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKICAgICBib29sIHZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CiAKKyAgICB2b2lkIHRyYXZlcnNlU3RhdGVtZW50
cyhUSW50ZXJtTm9kZSAqbm9kZSk7CiAgICAgYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJt
Tm9kZSAqbm9kZSk7CiAgICAgYm9vbCBoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpu
b2RlKTsKICAgICB2b2lkIG91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcg
JnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RT
dHJpbmcpOwpAQCAtNjIsNyArNjQsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzCiAgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5h
bWUpOwogCiAgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5mb2xkU2VsZWN0ICpt
VW5mb2xkU2VsZWN0OworICAgIFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9sZFNob3J0Q2lyY3Vp
dDsKICAgICBib29sIG1JbnNpZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1dCBzdHJlYW1zCkBA
IC04NCw2ICs4NiwxMiBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
CiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9i
aWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlh
czsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wgbVVzZXNUZXh0dXJl
Q3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29sIG1Vc2Vz
RnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMyLDYgKzE0MCwxMCBA
QCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgdW5zaWduZWQg
aW50IG1TY29wZURlcHRoOwogCiAgICAgaW50IG1VbmlxdWVJbmRleDsgICAvLyBGb3IgY3JlYXRp
bmcgdW5pcXVlIG5hbWVzCisKKyAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5Owor
ICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKKyAgICBib29sIG1JbnNpZGVEaXNjb250aW51
b3VzTG9vcDsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9QYXJzZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTAsMzMgKzEwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAi
Y29tcGlsZXIvZ2xzbGFuZy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLQotZXh0ZXJuICJDIiB7
Ci1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVw
cm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5h
bWUsIGludCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFJlcG9ydEluZm8oVEluZm9TaW5rQmFz
ZSYgc2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgVFByZWZpeFR5cGUgdHlwZSwgVFNvdXJj
ZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29u
c3QgY2hhciogdG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm8pCi17Ci0gICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAn
dG9rZW4nIDogZXh0cmFpbmZvICovCi0gICAgc2luay5wcmVmaXgodHlwZSk7Ci0gICAgc2luay5s
b2NhdGlvbihsb2MpOwotICAgIHNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICAiJyA6ICIgPDwgcmVh
c29uIDw8ICIgIiA8PCBleHRyYUluZm8gPDwgIlxuIjsKLX0KLQotc3RhdGljIHZvaWQgRGVmaW5l
RXh0ZW5zaW9uTWFjcm9zKGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IpCi17
Ci0gICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRC
ZWhhdmlvci5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytp
dGVyKSB7Ci0gICAgICAgIFByZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEp
OwotICAgIH0KLX0KKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmgiCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwpAQCAtNTIsNyArMjYsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvCiB7CiAgICAgZmllbGRzLm51bSA9IChp
bnQpIGNvbXBTdHJpbmcuc2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4gNCkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmlu
Zy5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xMTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VW
ZWN0b3JGaWVsZHMoY28KICAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24i
LCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyArK2kpIHsK
ICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IHZlY1NpemUpIHsKLSAgICAgICAgICAg
IGVycm9yKGxpbmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsICBjb21w
U3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2ZWN0b3IgZmll
bGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGkgPiAwKSB7CiAg
ICAgICAgICAgICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgewotICAgICAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90
IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3Qg
ZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ5LDIwICsxMjMs
MjAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjbwogICAgIGZpZWxk
cy5jb2wgPSAtMTsKIAogICAgIGlmIChjb21wU3RyaW5nLnNpemUoKSAhPSAyKSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJpbGxlZ2FsIGxlbmd0aCBvZiBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwg
Y29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIGxl
bmd0aCBvZiBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChjb21wU3RyaW5nWzBdID09ICdf
JykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4g
JzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2Vs
ZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBmaWVsZHMud2hv
bGVDb2wgPSB0cnVlOwogICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsK
ICAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0gJ18nKSB7CiAgICAgICAgIGlmIChjb21w
U3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycpIHsKLSAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IHRydWU7CkBAIC0xNzAs
NyArMTQ0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjbwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcgfHwgY29tcFN0cmlu
Z1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmll
bGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUyLDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjbwogICAgIH0KIAogICAgIGlmIChmaWVs
ZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJp
bmcuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC0yMDMsMzAgKzE3NywyOCBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6
OnJlY292ZXIoKQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxvYyBsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0
cmFJbmZvKQogewotICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07Ci0gICAgdmFfbGlzdCBtYXJrZXI7
Ci0gICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOwotICAgIHZzbnByaW50Zihl
eHRyYUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7Cisg
ICAgcHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBEZWNvZGVTb3VyY2VMb2MobG9jLCAm
c3JjTG9jLmZpbGUsICZzcmNMb2MubGluZSk7CisgICAgZGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBw
OjpEaWFnbm9zdGljczo6RVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywg
cmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5m
bywgRVByZWZpeEVycm9yLCBsb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7Ci0KLSAgICB2
YV9lbmQobWFya2VyKTsKICAgICArK251bUVycm9yczsKIH0KIAogdm9pZCBUUGFyc2VDb250ZXh0
Ojp3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pIHsKLSAgICBjaGFyIGV4
dHJhSW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0YXJ0KG1hcmtlciwg
ZXh0cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJ
bmZvKSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOwotCi0gICAgUmVwb3J0SW5mbyhpbmZvU2lu
ay5pbmZvLCBFUHJlZml4V2FybmluZywgbG9jLCByZWFzb24sIHRva2VuLCBleHRyYUluZm8pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbykgeworICAg
IHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgRGVjb2RlU291cmNlTG9jKGxvYywgJnNy
Y0xvYy5maWxlLCAmc3JjTG9jLmxpbmUpOworICAgIGRpYWdub3N0aWNzLndyaXRlSW5mbyhwcDo6
RGlhZ25vc3RpY3M6OldBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0xvYywg
cmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30KIAotICAgIHZhX2VuZChtYXJrZXIpOwordm9p
ZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7CisgICAgZGlhZ25vc3Rp
Y3Mud3JpdGVEZWJ1ZyhzdHIpOwogfQogCiAvLwpAQCAtMjM0LDggKzIwNiwxMCBAQCB2b2lkIFRQ
YXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsCiAvLwogdm9pZCBUUGFyc2VDb250ZXh0
Ojphc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0
cmluZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIiwgb3AsICJjYW5ub3QgY29udmVydCBm
cm9tICclcycgdG8gJyVzJyIsCi0gICAgICAgICAgcmlnaHQuY19zdHIoKSwgbGVmdC5jX3N0cigp
KTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8ICInIHRvICciIDw8
IGxlZnQgPDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKIH0K
IAogLy8KQEAgLTI0Myw5ICsyMTcsMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJv
cihpbnQgbGluZQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKGludCBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQogewotICAgZXJyb3IobGluZSwgIiB3
cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgCi0gICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4
aXN0cyB0aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAlcyAob3IgdGhlcmUgaXMgbm8gYWNj
ZXB0YWJsZSBjb252ZXJzaW9uKSIsCi0gICAgICAgICAgb3AsIG9wZXJhbmQuY19zdHIoKSk7Cisg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4dHJhSW5mb1N0cmVh
bSA8PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0IHRha2VzIGFuIG9w
ZXJhbmQgb2YgdHlwZSAiIDw8IG9wZXJhbmQgCisgICAgICAgICAgICAgICAgICAgIDw8ICIgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0ZDo6c3RyaW5nIGV4
dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIHdyb25n
IG9wZXJhbmQgdHlwZSIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAKIC8vCkBAIC0yNTMs
MTAgKzIyOSwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluCiAv
Lwogdm9pZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVycm9yKGxpbmUsICIg
d3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8gb3BlcmF0aW9uICcl
cycgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5k
ICIKLSAgICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBp
cyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBvcCwgbGVmdC5jX3N0
cigpLCByaWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJl
YW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIgPDwgb3AgPDwgIicg
ZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICciIDw8IGxlZnQg
CisgICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAn
IiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSI7
CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0cmFJbmZvLmNfc3Ry
KCkpOyAKIH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBs
aW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKQEAgLTI2NSwxMyAr
MjQyLDEzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjaygKICAgICBz
d2l0Y2goIHR5cGUgKXsKICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICBpZiggcHJlY2lzaW9u
ID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNp
b24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAgICAgICBlcnJvcigg
bGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiApOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBF
YnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7Ci0gICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwgIiIg
KTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50
KSIsICIiICk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTMxMyw3ICsyOTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9y
Q2hlY2soaW50CiAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlw
ZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpOwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBs
aWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNv
bXBvbmVudHMiLCBvcCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMjQsNyArMzAxLDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQi
LCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0LDcgKzM0MSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQKICAgICB9CiAKICAgICBp
ZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0zNzksMTAgKzM1NiwxOCBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50CiAgICAgLy8KICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ug
aGF2ZSBhbiBlcnJvciBhbmQgYSBtZXNzYWdlLgogICAgIC8vCi0gICAgaWYgKHN5bU5vZGUpCi0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiXCIlc1wiICglcyki
LCBzeW1ib2wsIG1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZh
bHVlIHJlcXVpcmVkIiwgb3AsICIoJXMpIiwgbWVzc2FnZSk7CisgICAgaWYgKHN5bU5vZGUpIHsK
KyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRy
YUluZm9TdHJlYW0gPDwgIlwiIiA8PCBzeW1ib2wgPDwgIlwiICgiIDw8IG1lc3NhZ2UgPDwgIiki
OworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7
CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCBleHRyYUluZm8u
Y19zdHIoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiKCIgPDwgbWVzc2Fn
ZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVh
bS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsIGV4
dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5OCw3
ICszODMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayhUSW50CiAgICAg
aWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBleHByZXNzaW9uIHJl
cXVpcmVkIiwgIiIsICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBl
eHByZXNzaW9uIHJlcXVpcmVkIiwgIiIpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MTQs
NyArMzk5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSQogICAg
IGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNp
emUoKSA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihub2RlLT5nZXRM
aW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbiwgIiIpOworICAgIGVy
cm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2Vu
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDMwLDcgKzQxNSw3IEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayhpbnQKICAgICBpZiAoZ2xvYmFsKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihsaW5lLCAib25seSBhbGxvd2VkIGF0IGdsb2JhbCBz
Y29wZSIsIHRva2VuLCAiIik7CisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9i
YWwgc2NvcGUiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ0OSwyNCArNDM0
LDI2IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGkKICAgICBzdGF0
aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7
CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAgICAgICAgIGlmIChp
ZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAgICAgICAgIGVycm9y
KGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAgICAgZXJyb3IobGlu
ZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKKyAgICAg
ICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChp
ZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKKyAgICAgICAgICAg
ICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlkZW50aWZp
ZXIuY29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hhZGVyU3BlYyA9
PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgwLCA0LCAiY3NzXyIp
ID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImNz
c18iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3Mp
IHsKLSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3Jl
cyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwg
IiIpOwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBh
cmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMgY29udGFpbmluZyB0
d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQgYXMgcG9zc2libGUg
ZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUxNCw1MSBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjCiAgICAgICAgIHR5cGUtPnNldFF1YWxp
ZmllcihFdnFDb25zdCk7CiAKICAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFy
cmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBlcnJvcihs
aW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVt
ZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29u
c3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVj
dG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChhcnJheUFyZyAm
JiBvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0
cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJl
bmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgewogICAgICAg
ICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKLSAgICAgICAgICBlcnJvcihs
aW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBh
cmd1bWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICBlcnJvcihsaW5lLCAiY29u
c3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIs
ICJjb25zdHJ1Y3RvciIpOwogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKG92ZXJGdWxsKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBh
cmd1bWVudHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28g
bWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAogICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlz
QXJyYXkoKSAmJiBpbnQodHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSkgIT0gZnVuY3Rpb24uZ2V0
UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0
b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVs
ZHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2Yg
Y29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVj
dHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpIHx8ICFtYXRyaXhJbk1hdHJpeCkgewogICAg
ICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplICE9IDEgJiYgc2l6ZSA8
IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKICAgICAgICAgICAgIChvcCA9PSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkpIHsKLSAgICAgICAgICAg
IGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIs
ICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdo
IGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBUSW50ZXJtVHlwZWQg
KnR5cGVkID0gbm9kZSA/IG5vZGUtPmdldEFzVHlwZWQoKSA6IDA7CiAgICAgaWYgKHR5cGVkID09
IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3VtZW50IGRvZXMgbm90
IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAi
Y29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3Ii
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25z
dHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHR5cGVkLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3Qg
Y29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC01ODUsNyArNTcyLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpj
b25zdHJ1Y3RvckVycm9yQ2hlYwogYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHB1
YlR5cGUpCiB7CiAgICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIo
KSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCci
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogCkBA
IC01OTksNyArNTg2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayhpbnQg
bAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVElu
dGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRC
b29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVj
dG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3Rl
ZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhw
ZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAKQEAgLTYxMyw3ICs2
MDAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsCiBib29sIFRQ
YXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYg
cFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8
fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
c2FtcGxlckVycm9yQ2hlY2soaW4KICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5l
LCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwogCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnN0cnVjdFF1YWxpZmllckVycm9yCiB7CiAgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCiAgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3Ry
dWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0
dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC02NTgsNyArNjQ1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0
ZXJTYW1wbGVyRXJybwogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZp
ZXIgPT0gRXZxSW5PdXQpICYmIAogICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0g
RWJ0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgewotICAgICAgICBl
cnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5n
ZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJzYW1wbGVycyBjYW5u
b3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5nKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY5MCwxNCArNjc3LDE0IEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Ci0gICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAg
ICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwg
IiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygK
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBU
UHVibGljVHlwZSB0eXBlKQogewogICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwg
ImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRUeXBlKHR5cGUpLmdl
dENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtNzMxLDcgKzcxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JD
aGVjaygKICAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJyYXk/CiAgICAgLy8KICAgICBpZiAo
dHlwZS5hcnJheSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlz
IG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIs
IFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtNzY3LDM0ICs3NTQsMzQgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjphcnJheUVycm9yQ2hlY2soaW50IAogCiAgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2Vy
dCgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVu
dGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBF
UlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgh
IHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFi
bGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKICAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5
cGUoKS5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBu
b24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVy
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPiAwKSB7Ci0gICAgICAgICAg
ICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNpemUiLCBpZGVudGlm
aWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9u
IG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCEgdmFyaWFibGUt
PmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7Ci0gICAgICAgICAgICBl
cnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUi
LCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
Y2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlkZW50aWZpZXIuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIFRU
eXBlKiB0ID0gdmFyaWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CiAgICAgICAgIHdo
aWxlICh0ICE9IDApIHsKICAgICAgICAgICAgIGlmICh0LT5nZXRNYXhBcnJheVNpemUoKSA+IHR5
cGUuYXJyYXlTaXplKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRl
eCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwg
IiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJoaWdoZXIgaW5kZXggdmFsdWUgYWxy
ZWFkeSB1c2VkIGZvciB0aGUgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdC0+c2V0QXJy
YXlTaXplKHR5cGUuYXJyYXlTaXplKTsKQEAgLTgxNiw3ICs4MDMsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50CiAgICAgYm9vbCBidWlsdEluID0gZmFsc2U7CiAg
ICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRTeW1ib2woKSwg
JmJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
IHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsK
KyAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2RlLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtODI4
LDE0ICs4MTUsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1heFNpemUoVEludAog
ICAgIC8vIGl0cyBhbiBlcnJvcgogICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJh
Z0RhdGEiKSB7CiAgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3ltYm9sVGFibGUuZmluZCgi
Z2xfTWF4RHJhd0J1ZmZlcnMiLCAmYnVpbHRJbik7Ci0gICAgICAgIGlmIChmcmFnRGF0YSA9PSAw
KSB7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsICJnbF9NYXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGZyYWdEYXRhKTsKIAogICAg
ICAgICBpbnQgZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KGZyYWdEYXRh
KS0+Z2V0Q29uc3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CiAgICAgICAgIGlmIChmcmFnRGF0
YVZhbHVlIDw9IHNpemUpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9G
cmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJh
d0J1ZmZlcnMiLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJh
Z0RhdGEgY2FuIG9ubHkgaGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdC
dWZmZXJzIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAg
LTg3MCw3ICs4NTQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hl
CiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAg
dHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2YXJp
YWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBx
dWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyArODc1LDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbgogICAgIHZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwogCiAgICAgaWYgKCEgc3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5p
dGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihs
aW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAg
ICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICB2YXJpYWJsZSA9IDA7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtOTA2LDcgKzg5MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVy
cm9yQ2hlY2soaW4KIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCBsaW5l
LCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUq
IHR5cGUpCiB7ICAgIAogICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgcXVhbGlmaWVy
ICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBh
bGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24g
ZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCAm
JiBwYXJhbVF1YWxpZmllciAhPSBFdnFJbikgewpAQCAtOTI0LDggKzkwOCw5IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCAKIAogYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCiB7
Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJlaGF2
aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIoKSk7CisgICAgaWYg
KGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImV4dGVu
c2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
OjpleHRlbnNpb25FcnJvckNoZWNrKAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKGl0ZXItPnNlY29uZCA9PSBFQmhXYXJuKSB7Ci0gICAgICAgIFRTdHJpbmcgbXNnID0gImV4
dGVuc2lvbiAiICsgZXh0ZW5zaW9uICsgIiBpcyBiZWluZyB1c2VkIjsKLSAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgbGluZSk7CisgICAg
ICAgIHdhcm5pbmcobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgYmVp
bmcgdXNlZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05NDUsOCArOTI5
LDIzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjaygKIAogYm9vbCBU
UGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7
Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9u
QmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIHJldHVybiAoaXRlciAhPSBleHRlbnNpb25C
ZWhhdmlvci5lbmQoKSk7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlv
ciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOworICAgIHJldHVybiAo
aXRlciAhPSBleHRiZWhhdmlvci5lbmQoKSk7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6aGFu
ZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25z
dCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gbG9jOworICAgIERl
Y29kZVNvdXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZsb2MubGluZSk7CisgICAgZGlyZWN0aXZl
SGFuZGxlci5oYW5kbGVFeHRlbnNpb24obG9jLCBleHROYW1lLCBiZWhhdmlvcik7Cit9CisKK3Zv
aWQgVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24g
bG9jOworICAgIERlY29kZVNvdXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZsb2MubGluZSk7Cisg
ICAgZGlyZWN0aXZlSGFuZGxlci5oYW5kbGVQcmFnbWEobG9jLCBuYW1lLCB2YWx1ZSk7CiB9CiAK
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtOTcwLDEyICs5NjksMTIgQEAgY29uc3QgVEZ1
bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuYwogICAgIH0KIAogICAgIGlmIChzeW1ib2wg
PT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5j
dGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAoIXN5
bWJvbC0+aXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1l
IGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDAyLDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAgICAvLwogICAgICAgICB2
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwogICAgICAgICBpZiAo
ISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCku
Y19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0
IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBv
b2wgCiAgICAgICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQpAQCAt
MTAxNSw3ICsxMDE0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIo
VAogICAgIC8vCiAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpOwogICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYg
KHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxp
ZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxp
ZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vCkBAIC0xMDI0LDEzICsxMDIzLDE2IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKIAogICAgIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFz
c2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICIn
IiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiciOworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0i
LCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNl
dFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRp
YWxpemVyICIsIAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0
UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMTA0OSw3ICsxMDUxLDEwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUlu
aXRpYWxpemVyKFQKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFy
LT5nZXRDb25zdFBvaW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9p
bnRlcihjb25zdEFycmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgp
LmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIici
IDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiJyI7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsIGV4dHJhSW5m
by5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVy
KEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MTIzNCwxNCArMTIzOSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVj
dEJ1CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZXJyb3IobGluZSwg
InVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
ICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgaWYgKG5ld05vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVy
dCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZl
cnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMjcw
LDggKzEyNzUsMTIgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlwZWQoKSwgRU9wQ29uc3RydWN0U3RydWN0LCBsaW5lKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgImNh
bm5vdCBjb252ZXJ0IHBhcmFtZXRlciAlZCBmcm9tICclcycgdG8gJyVzJyIsIHBhcmFtQ291bnQs
Ci0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNT
dHJpbmcoKSwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3Qg
Y29udmVydCBwYXJhbWV0ZXIgIiA8PCBwYXJhbUNvdW50IAorICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgIiBmcm9tICciIDw8IG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2lj
U3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICInIHRvICciIDw8IHR5cGUtPmdl
dEJhc2ljU3RyaW5nKCkgPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3RydWN0
b3IiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsKICAgICB9CiAKQEAg
LTEyOTMsMTUgKzEzMDIsMTMgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25z
dFZlYwogICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYgKHRlbXBDb25zdGFu
dE5vZGUpIHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsKIAotICAgICAgICBp
ZiAoIXVuaW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUg
cmFpc2VkCi0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5v
ZGUgZnVuY3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsKLQorICAgICAgICBp
ZiAoIXVuaW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9y
IGFuIGFnZ3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBl
cnJvcgotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3Ii
LCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8g
dGhlIHZlY3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0
OjphZGRDb25zdFZlYwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKysp
IHsKICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3Ig
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOwor
ICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5n
ZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICByZWNvdmVyKCk7
CiAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CiAgICAgICAgIH0KQEAgLTEzMzUs
NyArMTM0NSwxMCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0CiAg
ICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKIAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAibWF0cml4IGZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIm1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgIHJl
Y292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0KQEAgLTEzNDUsNyArMTM1OCw3IEBA
IFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXQKICAgICAgICAgIGludCBz
aXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CiAgICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9
IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRy
aXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdEFycgogICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsK
IAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKLSAg
ICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZv
U3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBl
eHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICBp
bmRleCA9IDA7CiAgICAgfQpAQCAtMTM4MCw3ICsxMzk2LDcgQEAgVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0OjphZGRDb25zdEFycgogICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJh
eSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CiAgICAgICAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJh
eUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8g
dGhlIGFycmF5IiwgIkVycm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9m
ZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0xNDE2LDcgKzE0MzIsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0U3RyCiAKICAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2Fs
bGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qg
b2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7CiAgICAg
ICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMsNyArMTQ0OSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGkKICAgICAvLyBUaGV5IGFy
ZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBo
ZXJlCiAgICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21waWxlciB0byBjYXRj
aCBpdC4KICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAgICAgICBlcnJvcihs
aW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90IGFsbG93ZWQiLCAi
Iik7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0IGRlZmluaXRpb25z
IGFyZSBub3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0
NTMsNyArMTQ2OSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAog
Ym9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhUU291cmNlTG9jIGxp
bmUsIGNvbnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRlclNwZWMgIT0gU0hf
V0VCR0xfU1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0ODAsMTEgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaAogICAgIC8vIFdlJ3JlIGFscmVh
ZHkgaW5zaWRlIGEgc3RydWN0dXJlIGRlZmluaXRpb24gYXQgdGhpcyBwb2ludCwgc28gYWRkCiAg
ICAgLy8gb25lIHRvIHRoZSBmaWVsZCdzIHN0cnVjdCBuZXN0aW5nLgogICAgIGlmICgxICsgZmll
bGRUeXBlLmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5n
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiIiwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlw
ZSAlcyBleGNlZWRzIG1heGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgJWQiLAotICAgICAgICAgICAg
ICBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKS5jX3N0cigpLCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5n
KTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBl
eHRyYUluZm9TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAiIDw8IGZpZWxkVHlw
ZS5nZXRUeXBlTmFtZSgpIAorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBleGNlZWRzIG1h
eGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgIiA8PCBrV2ViR0xNYXhTdHJ1Y3ROZXN0aW5nOworICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAg
ICAgIGVycm9yKGxpbmUsICIiLCAiIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0ODIsMTA1ICsxNTAxLDE3IEBAIGludCBQYVBhcnNlU3Ry
aW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIKICAgICBpZiAoKGNvdW50ID09IDApIHx8IChzdHJp
bmcgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgLy8gc2V0dXAgcHJlcHJvY2Vz
c29yLgotICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCi0gICAgICAgIHJldHVybiAxOwotICAg
IERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcik7Ci0KICAg
ICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQpKQogICAgICAgICByZXR1cm4gMTsKIAot
ICAgIGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5ndGgsIGNvbnRleHQpOwotICAgIGlu
dCBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CisgICAgaW50IGVycm9yID0gZ2xzbGFu
Z19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAgaWYgKCFlcnJvcikK
KyAgICAgICAgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOwogCiAgICAgZ2xzbGFuZ19m
aW5hbGl6ZShjb250ZXh0KTsKLSAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotICAgIHJldHVy
biAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVycm9ycyA9PSAwKSA/IDAgOiAxOwotfQot
Ci1PU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lO
REVYOwotCi1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgaWYgKEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAg
IGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4
dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAot
ICAgIC8vCi0gICAgLy8gQWxsb2NhdGUgYSBUTFMgaW5kZXguCi0gICAgLy8KLSAgICBHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICAKLSAgICBpZiAoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAg
YXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0
IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBPU19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKLQotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRl
eHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0K
LSAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7Ci19Ci0KLWJvb2wgSW5pdGlh
bGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0
aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRh
bGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJz
ZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4
dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotICAgIGlmIChs
cFBhcnNlQ29udGV4dCAhPSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxw
VGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkUGFyc2VDb250ZXh0KCk7Ci0gICAgaWYgKGxwVGhyZWFk
RGF0YSA9PSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCk6IFVuYWJsZSB0byBjcmVhdGUgdGhyZWFkIHBhcnNlIGNvbnRleHQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGxwVGhyZWFkRGF0YS0+bHBHbG9iYWxQYXJz
ZUNvbnRleHQgPSAwOwotICAgIE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
LCBscFRocmVhZERhdGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJlZVBhcnNl
Q29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFM
SURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0KCk6
IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCkpOwotICAgIGlmIChscFBhcnNlQ29udGV4dCkKLSAgICAgICAgZGVs
ZXRlIGxwUGFyc2VDb250ZXh0OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIChlcnJv
ciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6IDE7CiB9CiAKLVRQYXJz
ZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotewotICAgIC8vCi0gICAg
Ly8gTWluaW1hbCBlcnJvciBjaGVja2luZyBmb3Igc3BlZWQKLSAgICAvLwogCi0gICAgVFRocmVh
ZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VD
b250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0KLSAg
ICByZXR1cm4gbHBQYXJzZUNvbnRleHQtPmxwR2xvYmFsUGFyc2VDb250ZXh0OwotfQogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYsOCArNiwxMCBAQAogI2lm
bmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgi
CiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29s
OwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDog
b3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7Ci0gICAgYm9vbCBk
ZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAvLwogLy8gVGhlIGZv
bGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFyc2luZywgZ3JvdXBl
ZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIgd2l0aG91
dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vycm9ycywgY29uc3Qg
Y2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAgICAgaW50ZXJtZWRp
YXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwKLSAgICAgICAgICAg
IGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2luayhpcyksCiAgICAg
ICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVyU3BlYyhzcGVjKSwK
ICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgsMTIgKzQxLDEyIEBA
IHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUo
TlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAg
ICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCi0gICAgICAgICAg
ICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRpYWdub3N0aWNzKGlz
KSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcyksCisgICAg
ICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAg
ICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1l
ZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5n
dWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRl
bnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBh
bmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwogICAgIFNoU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxh
bmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJT
cGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIg
Y29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGlsZU9wdGlvbnM7CkBA
IC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGNvbnN0IFRUeXBl
KiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlv
biB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5z
VmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAg
IGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJl
IGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24s
IGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7
CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7CisgICAgVERpYWdu
b3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRs
ZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5l
cjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZv
U2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVh
c29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyKiByZWFzb24s
IGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUlu
Zm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mbz0i
Iik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZvaWQgcmVjb3Zlcigp
OwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1Np
emUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAyLDEzIEBAIHN0cnVj
dCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxp
ZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAgIGJvb2wg
ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOworCisgICAgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lkIGhhbmRsZUV4dGVu
c2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4g
ZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0
aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAg
ICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGls
ZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwxMyArMTM4LDQgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICAgICAgICAg
ICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBUUGFyc2VDb250ZXh0
KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9i
YWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVj
Ci17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQ
YXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2Mu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUG9vbEFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2Vu
ZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKICNpbmNsdWRlICJjb21w
aWxlci9vc2luY2x1ZGUuaCIKIApAQCAtMTU4LDEwICsxNTksMTAgQEAgdm9pZCBUQWxsb2NhdGlv
bjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbgogCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBwcmlu
dCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxwZnVsLgogI2lm
IGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xB
bGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAg
ICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQb29sQWxsb2M6IERh
bWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAgICAgICAgICAgICAg
ICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAgICAgICAgICAgc3ByaW50Zihh
c3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4
JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVvZihhc3NlcnRNc2cp
LCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAog
ICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwogI2VuZGlmCiAgICAg
ICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3VhcmQgYmxvY2siKTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1BSQUdNQV9IXworI2RlZmluZSBDT01QSUxFUl9QUkFHTUFfSF8KKworc3Ry
dWN0IFRQcmFnbWEgeworICAgIC8vIEJ5IGRlZmF1bHQgb3B0aW1pemF0aW9uIGlzIHR1cm5lZCBv
biBhbmQgZGVidWcgaXMgdHVybmVkIG9mZi4KKyAgICBUUHJhZ21hKCkgOiBvcHRpbWl6ZSh0cnVl
KSwgZGVidWcoZmFsc2UpIHsgfQorICAgIFRQcmFnbWEoYm9vbCBvLCBib29sIGQpIDogb3B0aW1p
emUobyksIGRlYnVnKGQpIHsgfQorCisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVn
OworfTsKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSQUdNQV9IXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1l
RnVuY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisjZGVmaW5lIENPTVBJTEVSX1JFTkFN
RV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisv
LyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRpb24gYW5kIGFueSBj
YWxscyB0byBpdC4KKy8vCitjbGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CitwdWJsaWM6CisgICAgUmVuYW1lRnVuY3Rpb24oY29uc3QgVFN0cmluZyYgb2xk
RnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUpCisgICAgOiBUSW50
ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAsIG1PbGRGdW5jdGlvbk5hbWUo
b2xkRnVuY3Rpb25OYW1lKQorICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5jdGlvbk5hbWUp
IHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLT5n
ZXRPcCgpOworICAgICAgICBpZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9wID09IEVPcEZ1bmN0
aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5hbWUpCisgICAgICAg
ICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVFN0cmluZyYgbU9sZEZ1bmN0aW9uTmFt
ZTsKKyAgICBjb25zdCBUU3RyaW5nJiBtTmV3RnVuY3Rpb25OYW1lOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVNYXA7CiBjbGFzcyBUQ29tcGls
ZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBXZWJHTCBzcGVjLAorLy8gbGlr
ZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFk
ZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRs
ZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3LDggQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJuIHRydWUgaWYgZnVuY3Rpb24g
cmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0UmVjdXJzaW9uKFRJbnRlcm1O
b2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVl
IGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAgICB2b2lkIHJld3JpdGVDU1NT
aGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2
ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQogICAgIC8vIGZ1bmN0aW9uYWxp
dHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBBLgogICAgIGJvb2wgdmFsaWRh
dGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03OSw2ICs4OCwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCk7
CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAgIHZpcnR1YWwgdm9pZCB0cmFu
c2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWlu
ZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9k
ZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBz
aGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3JjZVZlcnRleFNoYWRl
clRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyB0
byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMgd2hvc2UgdGlt
ZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBlbmZvcmNlRnJhZ21l
bnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgp
OwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGggZGVmYXVsdCBiZWhhdmlvci4K
ICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJM
YW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIs
MTIgKzcyLDE0IEBAIHN0YXRpYyB2b2lkIGdldFZhcmlhYmxlSW5mbyhTaFNoYWRlckluZm8KICAg
ICBpbnQgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05BTUVf
TEVOOwogICAgIEFTU0VSVChjaGVja0FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJNYXhMZW5ndGhzKGhh
bmRsZSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCkpOwogICAgIHN0cm5jcHkobmFtZSwg
dmFySW5mby5uYW1lLmNfc3RyKCksIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJMZW5ndGgpOworICAg
IG5hbWVbYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCAtIDFdID0gMDsKICAgICBpZiAobWFw
cGVkTmFtZSkgewogICAgICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQg
YnkKICAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCBpbiBTaEdldEluZm8sIGJl
bG93LgogICAgICAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IDEgKyBNQVhfU1lNQk9MX05B
TUVfTEVOOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwg
bWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhcklu
Zm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKKyAgICAgICAgbWFw
cGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFi
bGUuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw5ICsxNiwxMCBA
QAogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKICNpbmNsdWRlIDxzdGRpby5o
PgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKwogLy8KIC8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRvIGxpdmUu
CiAvLwpAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKFRTdHJp
bmcmIG1hCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9t
aW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAgICBjaGFyIGJ1ZlsyMF07
Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJheVNpemUpOworICAgICAgICBzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNpemUpOwogICAgICAgICBtYW5nbGVkTmFt
ZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9IGJ1ZjsKICAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gJ10nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRv
ckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIK
ICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAKIFRyYW5zbGF0b3JITFNMOjpUcmFu
c2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTYgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBBU1QgdHJhdmVyc2Vy
IHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ugc3RhdGVtZW50cwot
Ly8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCi0KLW5h
bWVzcGFjZSBzaAotewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAm
Y29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91
dHB1dEhMU0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOwotfQotCi12
b2lkIFVuZm9sZFNlbGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCi17Ci0gICAgaW50
IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1ib29sIFVuZm9sZFNl
bGVjdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUp
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0o
KTsKLQotICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0gICAgewotICAgICAg
ICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wt
PnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwgIjtcbiI7Ci0KLSAg
ICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlv
bigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBtVGVt
cG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZl
cnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAi
e1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwg
aSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5v
ZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAgICAgIG91dCA8
PCAiO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJlbHNlXG4iCi0g
ICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0g
ICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91
dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkg
KyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNM
KTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAg
ICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
ICpub2RlKQotewotICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRJbml0KCktPnRy
YXZlcnNlKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
Ci0gICAgewotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7Ci0gICAgICAgIG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQotCi0gICAgbVRlbXBv
cmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBV
bmZvbGRTZWxlY3Q6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAgcmV0dXJuIG1UZW1w
b3JhcnlJbmRleCsrOwotfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBVbmZvbGRTZWxl
Y3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVyYXRvciA/OiBh
cyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VMRUNU
X0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLQot
bmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBVbmZvbGRTZWxlY3Qg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgVW5mb2xkU2VsZWN0
KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOwotCi0gICAg
dm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGludCBnZXROZXh0VGVt
cG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29udGV4dCAmbUNvbnRl
eHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAgICBpbnQgbVRlbXBv
cmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hf
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFVuZm9sZFNob3J0
Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1jaXJjdWl0aW5nIG9w
ZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0cyBhcmUgYXNzaWdu
ZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBtYWluIHRyYW5zbGF0
b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNl
IHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3VpdChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9
CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkK
K3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisgICAgbm9kZS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Cit9CisKK2Jv
b2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0
Qm9keVN0cmVhbSgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAg
IGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBlcXVpdmFsZW50IHRv
ICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlmKHgpIHMgPSB0cnVl
OyBlbHNlIHMgPSB5OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIgc2ltcGxpZmllcyBk
b3duIHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91dCA8PCAiYm9vbCBz
IiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwgaSA8PCAiID0gIjsK
KyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAgICBvdXQgPDwgIjtc
biI7CisgICAgICAgICAgICBvdXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAg
ICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
b3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAvLyAieCAmJiB5IiBpcyBlcXVpdmFsZW50IHRv
ICJ4ID8geSA6IGZhbHNlIiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBpZih4KSBzID0geTsg
ZWxzZSBzID0gZmFsc2U7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhlciBzaW1wbGlmaWVz
IGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgImJvb2wg
cyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAg
ICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldExlZnQo
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8IGkgPDwgIiA9ICI7
CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUt
PmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7
XG4iOworICAgICAgICAgICAgb3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAg
ICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
b3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRl
eCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UobU91dHB1
dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgbVRlbXBvcmFy
eUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIC8v
IFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4OyBlbHNlIHMgPSB5
OyIKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAg
aW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50
eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7XG4iOworCisgICAg
ICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24o
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbVRlbXBv
cmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJz
ZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntc
biI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5nZXRU
cnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkg
PDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2Rl
LT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwg
IjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAg
ICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAg
ICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsg
MTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7
CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7CisK
KyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlv
bigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMp
OworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgeworICAgICAg
ICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIG1U
ZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJl
dHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKK30KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xk
U2hvcnRDaXJjdWl0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRw
dXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2RlZmluZSBDT01QSUxF
Ul9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAor
eworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJjdWl0IDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNob3J0Q2lyY3VpdChU
UGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKworICAgIHZv
aWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0
IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5leHRUZW1wb3JhcnlJ
bmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAg
ICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5SW5k
ZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL1ZhbGlk
YXRlTGltaXRhdGlvbnMuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgogCiBuYW1lc3BhY2UgewpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3Rk
aW8uaD4KIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgogCiBzdGF0aWMgY29uc3QgaW50IGtUcmFj
ZUJ1ZmZlckxlbiA9IDEwMjQ7CkBAIC0yOCw3ICsyOSw3IEBAIHZvaWQgVHJhY2UoY29uc3QgY2hh
ciAqZm9ybWF0LCAuLi4pIHsKICAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1RyYWNlQnVmZmVyTGVu
LCBmb3JtYXQsIGFyZ3MpOwogICAgICAgICB2YV9lbmQoYXJncyk7CiAKLSAgICAgICAgcGFyc2VD
b250ZXh0LT5pbmZvU2luay5kZWJ1ZyA8PCBidWY7CisgICAgICAgIHBhcnNlQ29udGV4dC0+dHJh
Y2UoYnVmKTsKICAgICB9CiB9CiB9ICAvLyBleHRlcm4gIkMiCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgJKHJldmlzaW9uIDEyMjczOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0OwogZXh0ZXJuIGlu
dCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiBleHRlcm4gaW50
IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKLWV4dGVybiB2b2lk
IGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50
IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRl
eHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VD
b250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0
KiBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUs
NyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAKICV0b3B7CiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiArMzgsNyBAQCBXSElDSCBHRU5FUkFU
RVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAlewogI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xh
bmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgi
CiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMTU5LDYgKzE2MCw3IEBAIE8gICAgICAg
ICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisi
ZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAogImxv
bmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAic2hvcnQi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KQEAgLTE2Niw2ICsx
NjgsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBAQCBPICAgICAgICAgICBbMC03XQogImh2ZWMyIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZlYzMiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjNCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisi
c2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1w
bGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxl
cjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzYW1wbGVy
MkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisic2FtcGxl
cjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisic2FtcGxlcjJE
UmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJzaXpl
b2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImNhc3QiICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBAIC0xOTMsNyArMjA1
LDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogMFt4WF17SH0rICAgICAgICAgeyB5eWx2YWwtPmxl
eC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIDB7T30r
ICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1
cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9KyAgICAgICAgICAgICB7IGNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBjb250ZXh0
LT5yZWNvdmVyKCk7IHJldHVybiAwO30KKzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJy
b3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQpOyBjb250ZXh0LT5y
ZWNvdmVyKCk7IHJldHVybiAwO30KIHtEfSsgICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9
IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAKIHtEfSt7RX0g
ICAgICAgICAgIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5
eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CkBAIC0yNjAsMTAgKzI3MiwxNSBAQCBP
ICAgICAgICAgICBbMC03XQogCiAlJQogCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09S
CiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGludCBJbml0UHJlcHJv
Y2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CitleHRlcm4gdm9p
ZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOworCiAjZGVm
aW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQ
YXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjcyLDI2ICsyODksMjYgQEAgZXh0
ZXJuICJDIiB7CiB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShF
UHJlZml4Tm9uZSwgbXNnKTsKKyAgICBjb250ZXh0LT50cmFjZShtc2cpOwogfQogCiB2b2lkIENQ
UFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKLSAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7CiB9CiAKIHZvaWQgQ1BQU2hJbmZv
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5lcnJv
cih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQogCi12b2lk
IENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29u
c3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5l
cnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKQEAgLTM0Niw4OCArMzYz
LDE1IEBAIHZvaWQgRGVjTGluZU51bWJlcigpCiB2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFy
ICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAg
ICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6ZSIpKSB7Ci0gICAgICAgIGlmIChudW1U
b2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFn
bWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewotICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1pemUnIGtl
eXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICBjb250ZXh0
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXN0cmNt
cCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEu
b3B0aW1pemUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXpl
JyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5z
WzBdLCAiZGVidWciKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIo
XCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0s
ICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7
Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAg
ICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBh
ZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0g
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcn
IHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAgICAgICAgLy8KLSAgICAgICAgLy8gaW1wbGVtZW50YXRp
b24gc3BlY2lmaWMgcHJhZ21hCi0gICAgICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24g
YWJvdXQgcHJhZ21hCi0gICAgICAgIC8vIEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEg
dGhhdCB0aGUgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlY29nbml6ZQotICAgICAgICAvLyBBbiBF
eGFtcGxlIG9mIG9uZSBzdWNoIGltcGxlbWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBh
IHN5bnRheCBsaWtlCi0gICAgICAgIC8vICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkK
LSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21h
dmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21hIG5hbWUgaW4gcHJhZ21hVGFibGUuCi0gICAgICAgIC8v
ICAgICAgICAKLSAgICAgICAgaWYgKG51bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFd
LCAiKCIpICYmICFzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJs
ZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRT
dHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5l
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBd
ID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAgIH0gZWxzZSBpZiAo
bnVtVG9rZW5zID49IDIpIHsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUg
PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsK
LSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0
ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBp
ZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNl
Y29uZCA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzFdOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0jZW5kaWYgLy8gUFJBR01BX1RBQkxFCi0gICAgfQorCisgICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKKworICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwogfQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3ZvaWQgU3RvcmVTdHIo
Y29uc3QgY2hhciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKICAgICBUU3Ry
aW5nIHN0clNyYzsKQEAgLTQ0OSw3MSArMzkzLDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQp
CiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZp
b3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBi
ZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJj
bXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBl
bHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJo
RGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAg
ICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChU
U3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0K
IHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3Qg
Y2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlv
ciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcs
IFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAg
IC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHRO
YW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwg
YmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
ImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZp
b3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAh
PSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAg
ICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9
IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChU
U3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAg
ICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRl
ZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2Ug
RUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIp
ICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5
bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFs
OwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8s
IGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBp
bnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW47Ci0KLSAgICBp
ZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJp
bnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5l
ciB1c2VzIFJFSkVDVCIpOworICAgIGludCBsZW4gPSAwOwogCi0gICAgYnVmW2xlbl0gPSAnICc7
Ci0gICAgcmV0dXJuIGxlbisxOworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAg
cHA6OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nv
ci5sZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/
IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4
X3NpemUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOwor
ICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9r
ZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5lcik7CisjZWxzZQorICAgIGxlbiA9IHl5bGV4X0NQ
UChidWYsIG1heF9zaXplKTsKKyNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IK
KworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1
dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChsZW4gPiAwKQorICAgICAgICBidWZb
bGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nh
bl90IHl5c2Nhbm5lcikgewpAQCAtNTQ0LDkgKzQ1MCw5IEBAIHZvaWQgeXllcnJvcihUUGFyc2VD
b250ZXh0KiBjb250ZXh0LCBjb24KICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRleHQtPkFmdGVyRU9G
KSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVjdGVk
IEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgInVu
ZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGlu
ZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0K
QEAgLTU2NSwyMiArNDcxLDQzIEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQq
IGNvbnQKICAgICBpZiAoc2Nhbm5lciA9PSBOVUxMKSByZXR1cm4gMDsKICAgICAKICAgICBjb250
ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICByZXR1cm4geXlsZXhfZGVzdHJveShzY2FubmVyKTsK
KyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworCisjaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJP
Q0VTU09SCisgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKyNlbmRpZgorICAgIHJldHVybiAw
OwogfQogCi12b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgICBUUGFyc2VDb250
ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgewogICAgIHl5cmVzdGFydChOVUxMLCBjb250ZXh0LT5zY2Fu
bmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEpLCBjb250ZXh0LT5z
Y2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVPRiA9IGZhbHNlOwotICAgIAotICAgIC8vIElu
aXQgcHJlcHJvY2Vzc29yLgorCisgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCisjaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAxOworI2Vsc2UK
KyAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQorICAgICAgICByZXR1cm4gMTsKICAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOwotICAgIGNwcC0+UGFBcmd2
ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKLSAgICBjcHAtPlBh
U3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAg
IFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgaWYgKEluaXRTY2FubmVySW5wdXQoY3Bw
LCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gMTsKKyNlbmRpZiAgLy8g
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKworICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFj
cm9zLgorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0
LT5leHRlbnNpb25CZWhhdmlvcigpOworICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0g
ZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgeworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VT
U09SCisgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybyhpdGVyLT5m
aXJzdC5jX3N0cigpLCAxKTsKKyNlbHNlCisgICAgICAgIFByZWRlZmluZUludE1hY3JvKGl0ZXIt
PmZpcnN0LmNfc3RyKCksIDEpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiAwOwogfQogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJ
KHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nLnkJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAgV0hJQ0ggR0VORVJB
VEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbAogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVs
cGVyLmgiCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKKyNkZWZpbmUgWVlFTkFC
TEVfTkxTIDAKKyNkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKKwogI2RlZmluZSBZWUxFWF9Q
QVJBTSBjb250ZXh0LT5zY2FubmVyCiAlfQogCkBAIC04NCwyMSArODcsMjEgQEAgZXh0ZXJuIHZv
aWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZQogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShT
LCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSICYmICBcCiAgICAgICAgIGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NIQURF
UikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgv
ZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwg
Uyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9CiAKICNk
ZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBl
ICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBz
dXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAg
ICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIs
IFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAj
ZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
IT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIg
c3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9u
bHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBcCiB9
CkBAIC0xNjcsNyArMTcwLDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICBjb25zdCBU
U3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFy
aWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQp
OwogICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQx
LnN0cmluZywgdHlwZSk7CkBAIC0xNzYsNyArMTc5LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5
IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNW
YXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZh
cmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5n
LT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CkBAIC0yMDYsNyArMjA5LDcgQEAgcHJpbWFyeV9leHByZXNzaW9uCiAgICAg
ICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAg
ICAgIGlmIChhYnMoJDEuaSkgPj0gKDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJm
bG93IiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
QEAgLTIzNSw5ICsyMzgsOSBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhw
cmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewog
ICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNW
ZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBv
ZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCkt
PmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9y
IHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIs
ICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9y
ICIsICJleHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBAIC0yNTQsNyArMjU3LDEw
IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYg
KCQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAgICAgIGlmICgo
JDEtPmlzVmVjdG9yKCkgfHwgJDEtPmlzTWF0cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpICYmICEkMS0+aXNBcnJheSgpICkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91
dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3Ry
ZWFtIDw8ICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8ICQzLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPDwgIiciOwor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJl
YW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIi
LCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgkMS0+aXNBcnJheSgpKSB7CkBAIC0yNjcsNyArMjczLDEwIEBAIHBvc3RmaXhfZXhwcmVz
c2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAi
WyIsICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGluZGV4IG91
dCBvZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgZXh0
cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMzEwLDcgKzMxOSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHBv
c3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5p
c0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBh
cnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
IApAQCAtMzU1LDcgKzM2NCw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVs
ZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHll
dCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBAIC0zNzMsNyArMzgy
LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBm
YWxzZTsKICAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlmIChmaWVsZHMgPT0gMCkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIs
ICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgJCQgPSAk
MTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MDUsMTMgKzQxNCwxMyBAQCBwb3N0Zml4X2V4
cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylb
aV0udHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2gg
ZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2
ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rp
b24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lk
ZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICB9CkBAIC01MDAsOSArNTA5LDEwIEBAIGZ1
bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmlu
dGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAi
SW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQg
aW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1
bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1O
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4dHJhSW5mby5jX3N0
cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTI2LDcgKzUz
Niw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNh
bmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQk
LT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2Uo
KVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBj
YW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9y
IiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
MS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2Vk
IGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01NTEsNyArNTYx
LDcgQEAgZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAg
ICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Ci0gICAg
ICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwg
IiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5v
dCBzdXBwb3J0ZWQiLCAiIik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
JCQgPSAkMzsKICAgICB9CkBAIC02NDcsNyArNjU3LDcgQEAgZnVuY3Rpb25faWRlbnRpZmllcgog
ICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
LCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBj
b25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0
RmxvYXQ7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKQEAgLTEwMDcs
MTIgKzEwMTcsMTIgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
JDEtPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMpIHsKICAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1
bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlw
ZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVy
biB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigp
ICE9ICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVz
dCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNh
bWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlm
aWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMDcwLDcgQEAgZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8KICAgICAgICAgICAg
IC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlw
ZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAn
KHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBkZWxldGUgJDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNzQs
NyArMTA4NCw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKIGZ1bmN0aW9uX2hl
YWRlcgogICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsK
ICAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9
IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5v
IHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxp
ZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZv
bHZlZCBhcyB3ZWxsLi4uCkBAIC0xMDk1LDcgKzExMDUsNyBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRv
cgogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsK
ICAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdh
bCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkxLDcgKzEyMDEsNyBA
QCBpbml0X2RlY2xhcmF0b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEg
SURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYm
ICEkMy5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAi
dW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+
Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KIApA
QCAtMTI5OCw3ICsxMzA4LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICAgICBzeW1i
b2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAgICAgfCBmdWxseV9z
cGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25z
IG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0
ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
ICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpAQCAtMTM2NCw3ICsx
Mzc0LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUuc2V0QmFzaWMoRWJ0
SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsKICAgICAgICAgaWYg
KCEkMi5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDIuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
dW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQyLnN0cmluZy0+
Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4LDcgKzE0NDgsNyBA
QCBzaW5nbGVfZGVjbGFyYXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ly8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKIC8v
ICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkg
ewotLy8gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwg
JCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCkpOwogLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAg
ICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2ls
bCB0YWtlIGNhcmUgb2YgaXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsxNDYwLDI2IEBAIGZ1
bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAgICAgaWYgKCQxLmFy
cmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm90IHN1cHBvcnRl
ZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAg
ewogICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xh
c3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICQyLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8
ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVh
bGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkg
JiYKICAgICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wg
b3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRR
dWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQsNyArMTY2NCw3IEBA
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExFUl9FWFRFUk5BTF9P
RVMgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdM
X2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJF
eHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9
CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMiLCAkMS5saW5lKTsK
QEAgLTE2NjMsNyArMTY3Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAg
IHwgU0FNUExFUjJEUkVDVCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0IiwgJDEubGluZSk7CkBA
IC0xOTY2LDE0ICsxOTc2LDE0IEBAIGZvcl9yZXN0X3N0YXRlbWVudAoganVtcF9zdGF0ZW1lbnQK
ICAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJj
b250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBh
bGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BDb250aW51ZSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4g
bG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJy
ZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5saW5lKTsKQEAgLTE5ODEsNyArMTk5MSw3
IEBAIGp1bXBfc3RhdGVtZW50CiAgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CiAg
ICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZv
aWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1
cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE5ODksMTAgKzE5OTksMTAgQEAganVtcF9zdGF0ZW1lbnQK
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwg
JDIsICQxLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRy
dWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
dm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJl
dHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0g
JDItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1
bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3Qg
bWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDM3LDcgKzIwNDcsNyBAQCBmdW5jdGlvbl9kZWZp
bml0aW9uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9u
IGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5j
X3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CkBAIC0yMDQ3LDcgKzIwNTcsNyBAQCBmdW5jdGlv
bl9kZWZpbml0aW9uCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgp
ID09ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQYXJhbUNvdW50KCkg
PiAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9u
IGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rp
b24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19z
dHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Vm9pZCkgewpAQCAtMjA3OSw3ICsyMDg5LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlv
bgogICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4g
dGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIGlm
ICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMTYsOSAr
MjEyNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJh
Z21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBz
cGVjaWZpYwogICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUg
cXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVlCi0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKLSAgICAgICAg
JCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVi
dWcpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250
ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVn
YXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXplKTsKKyAgICAgICAg
JCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdtYSgpLmRlYnVnKTsK
IAogICAgICAgICBpZiAoJDMgJiYgJDMtPmdldEFzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgkMy0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0
RW5kTGluZSgpKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0xOTEsNiArMTkxLDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7
CiB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKICNlbmRp
ZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZp
bmUgRU9CX0FDVF9MQVNUX01BVENIIDIKQEAgLTIwNCw3ICsyMDksNyBAQCB0eXBlZGVmIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFCiAgICAgICovCiAgICAgI2RlZmluZSAgWVlfTEVT
U19MSU5FTk8obikgXAogICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgaW50IHl5
bDtcCisgICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDtcCiAgICAgICAgICAgICAgICAgZm9y
ICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAogICAgICAgICAgICAgICAgICAgICBp
ZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKICAgICAgICAgICAgICAgICAgICAgICAgIC0teXls
aW5lbm87XApAQCAtMjI2LDExICsyMzEsNiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUgKllZX0JVRkZFCiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRf
cHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlm
Ci0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJVQ1Rf
WVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCkBAIC0yNDgsNyArMjQ4LDcg
QEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQg
aW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJICogY2hhcmFjdGVycy4KIAkgKi8K
LQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKIAogCS8qIFdoZXRoZXIg
d2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKIAkgKiBh
bmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwpA
QCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJf
U1QKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVf
dCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0
cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIHZvaWQgKnl5cmVh
bGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC0zODMsOCAr
MzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgogCSp5eV9j
cCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1f
UlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05VTV9S
VUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRoaXMgc3RydWN0IGlz
IG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNz
YXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzkyLDU4IEBAIHN0cnVj
dCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3Qg
eXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQyNl0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTldID0KICAgICB7ICAg
MCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0OCwgIDE0Niwg
IDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEyNiwgIDEzNCwgIDEz
MywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwgIDEyMywgIDExOSwg
IDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEyOCwgIDE0MCwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5
MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywgICAgNCwgICAgMywK
LSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDExMCwgIDEwNSwgIDEw
MCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwgICAgMSwgIDEwMSwg
ICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEyOCwgIDEyMCwgIDEy
NywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwgIDEwNiwgIDExMiwg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIwLCAgIDIyLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAgIDk2LCAgICAwLCAg
ICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkwLCAgIDkwLAotICAg
ICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAgIDkwLCAgIDkwLCAg
IDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIzLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAsICAgOTYsICAgOTAs
ICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAg
ICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjksICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAgMzgsICAgMjcsICAg
OTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAgICAgNTEsICAgMTIs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAgOTAsCi0KLSAgICAg
ICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3NywgICA3OCwgICA3
OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwgICA0MCwgICA0MSwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwg
ICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4NiwKLSAgICAgICA2
NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwK
LSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAgOCwgICA5MCwgICA5
MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwgICAxNCwgICA5MCwg
ICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2MiwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDExLCAgIDY4LCAgICA2
LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAg
IDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgsICAxNDQsICAxNDks
ICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisgICAgICAxNDMsICAx
MDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAsICAgOTgsCisgICAg
ICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAxNDcsICAxMjksICAx
NDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEsICAxMjQsICAxMTAs
ICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAxMTcsICAxMDcsICAx
MDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAgICAgIDAsICAgIDAs
ICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAxMjIsCisgICAgICAx
MjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
CisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAgNSwKKyAgICAgIDE1
MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwgIDExMSwgIDExMiwK
KyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4LCAgIDk4LCAgIDk4
LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4LCAgIDk4LCAgIDU4
LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4LCAgIDk4LAorICAg
ICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI3LCAgIDk4LCAg
IDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUxLCAgIDEyLCAgIDk4
LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQsICAgOTgsICAgMzAs
ICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAgNzksICAgODAsICAg
ODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzksICAgNDAsICAgNDEs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAg
OTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAg
ICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAgOTgsICAgOTgsICAg
OTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAgOTgsICAgOTQsICAg
NjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAg
IDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAgICAgMTMsICAgOTgs
ICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAgOTgsCisKKyAgICAg
ICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1NSwgICA3NSwgICA2
MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwgICA0NSwgICA4OSwg
ICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1MywxNSBAQCBzdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEs
ICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAg
ICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYs
ICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAgMjAsICAgMjAsICAg
MjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEsICAgMjcsICAgMjcs
ICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAg
MzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEsICAgMzMsICAgMzQs
ICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0gICAgICAgMzYsICAg
IDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0KLSAg
ICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwgICA0OSwgICA1MCwg
ICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1NiwgICA1NywgICA1
OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2Niwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAyMCwgICAyMCwgICAy
MCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAyNiwgICAyNywg
ICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAgICAgICAzMiwgICAz
MiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywgICAzMiwKKyAgICAg
ICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzNiwgICAzMiwgICAz
MiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwgICA0MCwgICA0MSwg
ICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDMyLCAg
IDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMyLCAgIDU1LCAgIDU2
LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAgIDYzLCAgIDY0LCAg
IDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAg
ICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjddID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAgIDAsCiAgICAgICAg
IDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDMsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisg
ICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
KyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwog
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0KK3N0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAg
ICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4LCAgNjI4LAotICAg
ICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAgNjI4LCAgMTMxLCAg
MTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5LCAgNTk5LCAgIDQ3
LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAgMTA4LCAgMTQ3LCAg
MTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5LCAgMTQ4LCAgMTU2
LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAgMTk1LCAgNTcyLCAg
NjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAgICAgNjI4LCAgNjI4
LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAg
NjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5LCAgMjU1LCAgMjcx
LAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNTkyLCAgNjI4LCAg
NjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0LCAgNTU3LCAgNTYw
LCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIsICA1NTAsICA1NDcs
ICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1NDUsICA1NDIsICA1
NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAgICA1NDcsICAyNDEs
ICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1NDIsCi0gICAgICA1
MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1MjgsICA1MTcsICA1MjAs
Ci0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2MjgsICA2MjgsICA2
MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQsICAzNTEsICAgIDAs
ICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1MjQsICA1MDgsICA1
MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUsICA1MDcsICA1MTMs
ICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1MDYsICA1MDMsICA1
MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYsCi0gICAgICA0ODcs
ICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0ODQsICA0NzUsCi0K
LSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3MiwgIDQ2OSwgIDQ4
MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwgIDQ3NiwgIDQ3OCwg
IDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAgMCwgIDQ2NiwgIDI3
NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwgIDQ1OSwgIDI5MSwg
ICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMwNSwgICAgMCwgICAg
MCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwKLSAgICAgIDM4Miwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0NiwgIDQzNywKLSAg
ICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwgIDQzOSwgIDQ0NCwg
IDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQyOSwgIDQzNCwgIDQz
MywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwgIDQzMiwgIDQzNCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQyMiwgIDQyMywgIDQx
NywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgNDI1LCAg
ICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1LCAgNDExLAotICAg
ICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAgICAwLCAgNDEyLCAg
NDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAwLCAgMzk4LCAgICAw
LCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAgNDAxLCAgICAwLCAg
NDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2LCAgICAwLCAgICAw
LCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAg
Mzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAgICAgMzgyLCAgICAw
LCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAgMzU2LAotICAgICAg
Mzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYxLCAgICAwLCAgICAw
LAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAgMjcwLCAgMjY1LCAg
ICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAy
NzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYsICAgIDAsICAyMDgs
ICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAxNjQsICAxNTgsICAg
IDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAgICAgMCwgICAgMCwg
ICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY1
NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwgIDEzMywgIDEzMSwK
KyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1MSwgICA0NywgIDY4
MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwgIDE1MiwgIDE1Niwg
IDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEyNiwgIDE3NywgIDYx
NSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5NywgIDYyNCwgIDY4MSwg
IDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4MSwgIDY4MSwgICAg
MCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY4MSwg
IDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3MywgIDI4MiwKKyAg
ICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwgIDY4MSwgIDY4MSwg
IDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYwOSwgIDYxMiwgIDYy
MCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAyLCAgNTk5LCAgNjEy
LCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAgNTk1LCAgNjA1LCAg
NTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAwLCAgMTg4LCAgNTg2
LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAorICAgICAgNTc4LCAg
NTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgwLCAgNTY5LAorICAg
ICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAgNjgxLCAgNjgxLCAg
NjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkwLCAgMzc0LCAgICAw
LCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAgNTc2LCAgNTYwLCAg
NTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3LCAgNTU5LCAgNTY1
LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAgNTUwLCAgNTU3LCAg
NTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAgICAgNTUyLCAgNTQ3
LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAgNTQ0LAorCisgICAg
ICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1MzQsICA1MjAsICA1
MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTksICA1MDgsICAyNjQs
ICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0MDIsICA1MTgsICAg
IDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQsICA1MDMsICA1MjAs
ICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1MTMsICAgIDAsICA0
OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAgICA0OTUsICA0OTQs
ICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICA0
OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYsICA0OTAsICA0ODIs
CisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAgIDAsICAgIDAsICA0
ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAgMCwgICAgMCwgICAg
MCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2OCwKKyAgICAgICAg
MCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwgIDQ1NCwgIDQ2NywK
KyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0OSwgIDQ1NSwgIDQ2
MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwgIDQ0OCwgICAgMCwg
IDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAgMCwgIDQ1MCwgIDQ0
OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywgICAgMCwgICAgMCwg
IDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQyNiwgIDQzNywgIDQz
MCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwKKyAgICAgIDQyNSwg
IDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQyNSwgICAgMCwKKyAg
ICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwgIDQyMSwgIDQwNywg
IDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDAwLCAgMzk2LCAg
ICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDIx
LCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAgMzkwLCAgMzkyLCAg
MzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAwLCAgMzMyLCAgMzQz
LCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAorICAgICAgICAwLCAg
MzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAwLCAgMjMyLAorICAg
ICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAgNjgxLCAgNDQyLCAg
NDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
ZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2LCAgNDI2LCAgNDI1
LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LAotICAgICAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDMwLCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAot
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0MjgsCi0gICAgICA0MjUs
ICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0MjUsICA0MjcsCi0g
ICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNSwgIDQyNSwKLSAg
ICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
Ci0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1OSwgIDQ1OCwgICAg
NSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwKKyAgICAgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2MywgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ2
MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDYxLCAgNDU4
LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAgNDU4LAorICAgICAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisg
ICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAg
ICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKworICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAg
ICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjk1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0gPQogICAgIHsgICAw
LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAg
IDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAg
IDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAgIDM2LCAgIDM3LCAg
IDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LAotICAgICAgIDQ1
LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMwLAot
ICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1
LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAg
ICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1LCAgIDM2LCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAorICAgICAgIDQ0LCAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLAorICAg
ICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAg
IDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAgIDYxLCAgIDYy
LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAgICAgICAgIDgsICAg
IDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAg
ICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
IDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAgNzUsICAgOTUsICAg
OTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAgICAyMTYsICAgOTgs
ICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAgNzksCi0gICAgICAg
NzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMsICAgODMsICAgODMs
Ci0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAxMjMsICAxMTgsICAx
NTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUsICAxMDEsICAxNDcs
ICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwgIDExMCwgIDEwNCwg
ICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDExMSwgIDEzMiwgIDEx
MiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAgIDEzNCwgIDQyMSwg
IDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEzNSwKLSAgICAgIDIw
NCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwgIDE4NSwgIDE4NiwK
LSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0NSwgICA3NCwgICA3
NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1NCwgIDI1NSwgIDI1
NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwgICA3OSwgICA3OSwg
ICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQxNCwgIDE1NCwgIDQx
MywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwg
IDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1NSwgIDE5MSwKLQot
ICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMjk3LCAgMjk4
LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2LCAgNDA5LCAgMjE5
LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUzLCAgMTUzLCAgIDgx
LCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAotICAgICAgNDA1LCAg
MTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2LCAgMTU2LAotICAg
ICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAg
MTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgsICAzOTYsICA0MDMs
ICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0gICAgICAzOTIsICAz
OTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTIsCi0gICAg
ICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAzODgsICAzODcsICAz
ODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgs
ICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAz
NjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMsICAzNjIsICAzNjEs
ICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAzNTQsICAzNTMsICAz
NTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAgICAzNDUsICAzNDQs
ICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsCi0gICAgICAz
MzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYs
Ci0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAz
MTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMwMiwgIDMwMSwgIDMw
MCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwgIDI4NywgIDI4Niwg
IDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3NCwgIDI3MywgIDI3
MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAgIDI2NSwgIDI2NCwg
IDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MywKLSAgICAgIDI1
MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywK
LSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIz
NCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwg
IDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwgIDIw
NywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwgIDE5OCwgIDE5Nywg
IDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4MywgIDE4MiwgIDE4
MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKLQotICAgICAgMTcz
LCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LAot
ICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5LCAgMTQ2LCAgMTMx
LCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDI1LCAg
ICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0KKyAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAgOCwgICAgOCwKKyAg
ICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5NSwgICA5NiwgICA3
MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwgICA5OCwgIDEyMywg
ICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1NywgICA3OSwgICA3
OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwgIDE0OCwgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAgICAgICA4NSwgIDEw
MCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwgIDEwMywKKworICAg
ICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAgIDg2LCAgMTA1LCAg
IDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEyLCAgMTI1LCAgMTI4
LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAgMTE0LCAgMjIwLCAg
MTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5LCAgMTMzLCAgMTM0
LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAgMTc5LCAgNDU0LCAg
MTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAgICAgIDc0LCAgIDc0
LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAg
MTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0LCAgMTg3LCAgMTg4
LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAgMjU4LCAgMjU5LCAg
MjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIzLCAgIDc4LCAgMTU1
LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAg
NDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAgODAsICAgODAsICAg
ODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAgICAxNTcsICA0NTAs
ICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAxNTcsCisgICAgICAx
NTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAsICAgODMsICAgODMs
CisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAyOTMsICAyOTQsICAy
OTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEsICAyMjMsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAzMDMsICAzMDQsICA0
NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQs
ICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAyMjQsICA0NDAsICAy
MjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsCisgICAgICAyMjUs
ICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAxNTcsICAxNTcsCisg
ICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMsICAyMjMsICAyMjMs
ICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywg
IDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDMyMSwg
IDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQzNSwgIDQzNCwgIDQz
MywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwKKyAgICAgIDQyNiwg
IDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1MSwgIDE1MSwKKyAg
ICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwg
IDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwgIDQw
OSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwgIDM5NywgIDM5Niwg
IDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4
NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwgIDM4MCwgIDM3OSwg
IDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKworICAgICAgMzcxLCAg
MzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLCAgMzYyLAorICAg
ICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUzLCAg
MzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0
LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAg
MzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3
LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAgMzE3LCAgMzE2LCAg
MzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAgICAgMjk5LCAgMjk4
LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg0LAorICAgICAg
MjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcy
LAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAg
MjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUy
LCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDQs
ICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAyMzcsICAyMzYsICAy
MzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAgICAyMjYsICAyMjEs
ICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksCisgICAgICAy
MDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcs
CisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAxODMsICAxODIsICAx
ODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEs
ICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAx
NjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEsICAxMjcsICAxMjIs
ICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAgIDcsICA0NTgsICA0
NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisgICAgICA0NTgs
ICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsCisK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY3Nyw4ICs2
OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gCiAgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0gICAgICAgMjgsICAgMjgsICAgIDMsICAgIDQs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsCisgICAgICAgMTIs
ICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAg
ICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiArNzAyLDc3IEBAIHN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9jaGtbNjk1XSAKICAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKLSAgICAg
ICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAz
MywKLSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywgICAyMSwgICA0Miwg
ICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0MiwgICAzNSwgICAy
MSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwg
ICAyMywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAy
NiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAgICA0NCwgIDQyMywg
ICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAyNiwKLQotICAgICAg
IDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1LCAgIDM4LCAgIDM3
LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAgIDM5LCAgIDM4LCAg
NDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5LCAgIDQ3LCAgIDUw
LCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAgIDUyLCAgIDUwLCAg
MTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUwLCAgMTIwLCAgNDE2
LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3LAotICAgICAgMTY3
LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAgIDc4LCAgIDc5LAot
ICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1LCAgMjE1LCAgMjE1
LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAgIDgwLCAgIDgwLCAg
IDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2LCAgMjI2LCAgNDA5
LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEsICAgODEsICAgODEs
ICAgODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0MDgsICA0MDcsICAg
ODMsICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAxNDEs
ICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAxNDEsICAgODMsCi0g
ICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMsICAxNTMsICAxNTMs
ICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAyNDUsICAzOTYsICAx
NTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQsICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAx
NTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAyMTEsICAyMTks
ICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0gICAgICAyMjAsICAy
MjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEsICAyMjEsCi0gICAg
ICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyNTEsICAy
NTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4NSwgIDM4MiwgIDM4
MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwgIDM4MSwgIDQyNiwg
IDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQyOCwgIDQyOSwgIDM3
MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2NywgIDM2NiwgIDM2NSwg
IDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAgICAgIDM0OSwgIDM0
NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwKLSAgICAg
IDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwgIDMy
NCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMSwg
IDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4NSwgIDI4NCwgIDI3
OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwgIDI3MCwgIDI2OSwg
IDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2MiwgIDI2MSwgIDI2
MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAgICAgMjQ3LCAgMjQ2
LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAgMjMxLAotICAgICAg
MjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjE0LCAgMjEz
LAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjA1LCAgMjA0LCAg
MjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1
LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAg
MTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAgMTY5LCAgMTY4LCAg
MTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0LAotICAgICAgMTQz
LCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLAot
ICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIz
LCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAg
MTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAx
MDMsICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcsICAgOTYsICAgOTUs
ICAgOTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAgNDMsICAgNDAsICAg
MjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0
MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3LCAgIDE5LCAgIDIw
LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAgIDMzLCAgIDQyLCAg
IDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQyLCAgIDEzLCAgIDM1
LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAorICAgICAgIDIxLCAg
IDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLAorICAg
ICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4LCAgIDUxLCAgIDM4
LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcsICAgMzYsICAgMzks
ICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAgNDEsICAgMzksICAg
MzcsICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEsICAgNTUsICAxMzUs
ICAxNDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisgICAgICAgNTAsICAg
NDEsICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAsICAxMjIsCisgICAg
ICAgNTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAxMjIsICA0NTEsICAg
NTIsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzgs
ICAgNzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0NTAsICAxMjAsICAg
NzQsICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAsICAgNzgsICAxMjAs
ICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAyMTgsICAyMTgsICA0
MTcsICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAgNzks
ICAgNzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAgODAsCisKKyAgICAg
ICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwgICA3OSwgIDQ0NCwg
ICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MCwgICA4
MywgIDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
IDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0MiwgIDE1MiwgIDQ0
MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAgIDE1MiwgIDE1Miwg
IDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1NCwKKyAgICAgIDE1
NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwgIDQzNywgIDQzNiwK
KyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwgIDQzMywgIDQzMiwg
IDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDIy
MiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIyLCAgMjIzLCAgMjIz
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAgMjI0LCAgMjI0LCAg
MjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1LAorICAgICAgMjI1
LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAgMzg4LCAgNDMwLAor
ICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIx
LCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDU5LCAgNDYwLCAg
NDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYyLCAgNDE4LCAgNDE2
LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAgNDAwLCAgMzk5LCAg
Mzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzgz
LCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAorICAgICAgMzczLCAg
MzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LAorICAg
ICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAgMzQzLCAgMzQxLCAg
MzQwLAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzIsICAz
MzEsICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjAs
ICAzMTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTEsICAy
OTAsICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAsICAyNzksICAyNzYs
ICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisgICAgICAyNjgsICAy
NjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQsICAyNTMsCisgICAg
ICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAyNDAsICAyMzYsICAy
MzUsCisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYsICAyMjEsICAyMjAs
ICAyMTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAy
MDksICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEs
ICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAxOTMsICAxOTIsICAx
OTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAgICAgIDE4NCwgIDE4
MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAg
IDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2
MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwgIDE0MCwgIDEzOSwg
IDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEzMSwgIDEzMCwgIDEy
OSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDExOCwg
IDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDExMCwgIDEwOSwgIDEw
OCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAgIDEwMSwgIDEwMCwg
ICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2MCwKKyAgICAgICA1
MywgICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwgICAxMSwgICAgNywK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAor
ICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4CiAgICAg
fSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9s
LiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsx
NDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
MTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEsNyBAQCBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CisgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CiAKIC8qIFRoZSBpbnRl
bnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCiAgKiBhbnkgdXNl
cyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03NzEsNyArNzkyLDcgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuXwogI2RlZmluZSBZWV9SRVNUT1JFX1lZ
X01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC03ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNs
YQogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Bh
cnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgog
CkBAIC04MjEsOCArODQzLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6ZV90IHl5X2J1ZmZl
cl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAgWVlfQlVGRkVSX1NU
QVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwogICAgIGNo
YXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGludCB5eWxlbmdfcjsK
KyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CiAgICAg
Y2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQgeXlfc3RhcnQ7CkBA
IC04NzUsNyArODk3LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
IAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5X3NpemVfdCB5eWdl
dF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRfdGV4dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDgsMTMgQEAgeXlfbWF0Y2g6CiAJCQl3
aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3Vy
cmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5
eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQyNSApOworCQl3aGls
ZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9C
UkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTI6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA5
NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCiB7CiAg
ICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVy
biBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2UgOTE6CitjYXNlIDk5
OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7
IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoKK2Nhc2UgMTAwOgog
WVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJl
dHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nhc2UgMTAxOgogWVlf
UlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVt
YmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0
KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsKLWNhc2UgOTQ6Citj
YXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQs
IDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTU6CitjYXNl
IDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0
YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQp
OyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKIHsgeXls
dmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJu
KEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNlIDEwNjoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDk5Ogor
Y2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihNVUxf
QVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5OgogWVlfUlVMRV9TRVRV
UAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTAyOgorY2FzZSAx
MTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihMRUZUX0FTU0lH
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1OgorY2FzZSAxMTM6
CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfQVNTSUdOKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0
dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNlIDExNjoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA5OgorY2Fz
ZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQogCVlZX0JSRUFLCi1j
YXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKEFORF9PUCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEzOgorY2FzZSAxMjE6
CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE0
OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1ApOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oRVFfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAxMjU6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTg6CitjYXNl
IDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0KIAlZWV9CUkVBSwot
Y2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIwOgor
Y2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNl
OyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6CitjYXNlIDEyOToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZX0JSRUFLCi1jYXNl
IDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4dC0+aW5UeXBlUGFy
ZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihDT0xP
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKIHsg
Y29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0
ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRf
UEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
KExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNlIDEzNjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI5
OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9U
KTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEzOToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMyOgorY2FzZSAxNDA6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzM6
CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihTVEFSKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
U0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoKK2Nhc2UgMTQ1Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAx
Mzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4o
VkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2UgMTQ4OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQxOgorY2FzZSAx
NDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihRVUVTVElPTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VUVVAKIHsgCiAgICAg
QkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU2LDEyIEBAIFlZX1JVTEVfU0VUVVAKICAg
ICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNlIDE0NDoKK2Nhc2Ug
MTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0
NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNhbiBtYXRjaCBlb2wg
Ki8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwxMSArMTc3MCwxMSBA
QCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6
CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAogeyBjb250ZXh0LT53YXJuaW5n
KHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAJWVlf
QlJFQUsKLWNhc2UgMTQ3OgorY2FzZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBFQ0hPOwogCVlZX0JS
RUFLCkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAo
eXlzY2FuX3QgCiAKIAllbHNlCiAJCXsKLQkJCWludCBudW1fdG9fcmVhZCA9CisJCQl5eV9zaXpl
X3QgbnVtX3RvX3JlYWQgPQogCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKIAogCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQpA
QCAtMTkyMyw3ICsxOTc3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IAogCiAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQogCQkJCXsKLQkJCQlpbnQgbmV3
X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+
eXlfYnVmX3NpemUgKiAyOwogCiAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKIAkJCQkJYi0+eXlf
YnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwpAQCAtMTk1NCw3ICsyMDA4LDcgQEAgc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCiAJCS8qIFJlYWQgaW4gbW9y
ZSBkYXRhLiAqLwogCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZltudW1iZXJfdG9fbW92ZV0pLAotCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1f
dG9fcmVhZCApOworCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwogCiAJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKIAkJfQpA
QCAtMjAxNiw3ICsyMDcwLDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IAogCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQy
NiApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5eV9jID0geXlfbWV0
YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0y
MDQ1LDExICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCAKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQyNiApCisJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2ln
bmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAo
eXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRl
ID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9
CkBAIC0yMDc5LDcgKzIxMzMsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgCiAKIAkJZWxzZQogCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCWludCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQl5eV9zaXplX3Qgb2Zm
c2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwogCQkJKyt5eWctPnl5X2Nf
YnVmX3A7CiAKIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQpA
QCAtMjEwMyw3ICsyMTU3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IAogCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKIAkJCQkJewogCQkJCQlpZiAoIHl5
d3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCQlyZXR1cm4gRU9GOworCQkJCQkJcmV0dXJuIDA7CiAK
IAkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKIAkJCQkJCVlZ
X05FV19GSUxFOwpAQCAtMjM2Niw3ICsyNDIwLDcgQEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUg
KHl5c2Nhbl90IHl5c2NhbgogICovCiBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLQlpbnQgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBu
dW1fdG9fYWxsb2M7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwogCiAJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewpAQCAtMjQ2NCwx
MiArMjUxOCwxMSBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgCiAg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCi1ZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQorWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5
eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6
ZV90IG47Ci0JaW50IGk7CisJeXlfc2l6ZV90IG4sIGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBm
b3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJ
biA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yNjE5LDcgKzI2NzIsNyBAQCBGSUxFICp5eWdldF9v
dXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJl
bnQgdG9rZW4uCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwot
aW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit5eV9zaXplX3QgeXlnZXRfbGVu
ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgcmV0dXJuIHl5bGVuZzsKQEAgLTI4OTQs
MTAgKzI5NDcsMTUgQEAgdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYQog
CiAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgogCisjaWYgIUFOR0xFX1VTRV9ORVdf
UFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGlu
dCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7
CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFs
dWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBj
b250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3Qq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjkwNiwyNiAr
Mjk2NCwyNiBAQCBleHRlcm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAq
bXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5pbmZvU2luay5k
ZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQtPnRyYWNlKG1zZyk7
CiB9CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAg
U0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1zZywg
IiIsICIiKTsKKyAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKIH0KIAog
dm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAg
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQordm9pZCBDUFBFcnJv
clRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwot
ICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIApA
QCAtMjk4MCw4OCArMzAzOCwxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIoKQogdm9pZCBIYW5kbGVQ
cmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKIHsKICAgICBTRVRVUF9D
T05URVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewot
ICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
Zygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0s
ICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0
ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQotICAg
ICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAgICAgICBjb250ZXh0
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAn
KCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7Ci0gICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUn
IHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
ICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKLSAgICAgICAgaWYgKG51bVRva2VucyAh
PSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXgg
aXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFz
dHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9m
ZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwi
b2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vu
c1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3Rl
ZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAgICAvLyB1c2UgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUg
dGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGln
bm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUK
LSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBw
cmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5h
bWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRo
ZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRh
YmxlLgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAh
c3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAg
ICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJh
Z21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIg
IT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0
b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRh
YmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0gICAgICAgIAotICAg
ICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAgICAgICBUUHJhZ21hVGFi
bGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7
Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkp
OwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQotICAgIH0KKwor
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzFd
LCAiKCIpICE9IDApIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAw
KSByZXR1cm47CisKKyAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8s
IHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcp
Cit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMDgzLDcxICszMDY4LDMzIEBAIHZvaWQg
UmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1U
QmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFz
dHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwot
ICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJu
IEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQot
ICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwg
YmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAg
Q1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlz
IG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0g
ICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsK
LSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJp
bmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAg
ICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFs
ID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScg
b3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZp
b3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytp
dGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAg
ICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5z
aW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
YmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsg
IicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoK
LSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3Ry
aW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNl
Y29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25E
aXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAi
QyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdf
aW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAg
IGludCBsZW47CisgICAgaW50IGxlbiA9IDA7CiAKLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChi
dWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBt
YXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3cs
IGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworI2lm
IEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6OlRva2VuIHRva2VuOworICAgIHl5
Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKKyAgICBsZW4g
PSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7
CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3NpemUpKQorICAgICAgICBtZW1jcHko
YnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVT
b3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSkseXlzY2Fu
bmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOworI2VuZGlm
ICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0gICAgYnVmW2xlbl0gPSAnICc7Ci0g
ICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChsZW4gPiAw
KQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47CiB9CiAKIGludCBj
aGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAtMzE3OCw5ICszMTI1LDkgQEAgdm9p
ZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbgogICAgIHN0cnVjdCB5eWd1dHNf
dCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CiAKICAgICBpZiAo
Y29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJl
YXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2UgewotICAgICAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9CiAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogfQpAQCAtMzE5OSwyMiArMzE0Niw0MyBAQCBpbnQgZ2xzbGFuZ19maW5h
bGl6ZShUUGFyc2VDb250ZXh0KiBjb250CiAgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0dXJu
IDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIHl5bGV4
X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKworI2lmICFB
TkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAg
ICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xhbmdfc2NhbihpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisg
ICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAgICB5eXJlc3RhcnQo
TlVMTCxjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9j
KDAsIDEpLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7
Ci0gICAgCi0gICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJbml0aWFsaXplIHBy
ZXByb2Nlc3Nvci4KKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIGlmICghY29u
dGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDE7CisjZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCisgICAgICAgIHJl
dHVybiAxOwogICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7
Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNv
dW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAtPnBhc3RGaXJzdFN0
YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKKyAgICBpZiAoSW5p
dFNjYW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVy
biAxOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorCisgICAgLy8gRGVm
aW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRC
ZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9yIChURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7CisjaWYgQU5HTEVf
VVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRl
ZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAgICAgICAgUHJlZGVm
aW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYKKyAgICB9CisgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nX3RhYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0yODYsNiArMjg2LDkgQEAKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhl
bHBlci5oIgogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCisjZGVmaW5lIFlZRU5B
QkxFX05MUyAwCisjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisKICNkZWZpbmUgWVlMRVhf
UEFSQU0gY29udGV4dC0+c2Nhbm5lcgogCiAKQEAgLTM2MCwyMSArMzYzLDIxIEBAIGV4dGVybiB2
b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGUKICNkZWZpbmUgRlJBR19WRVJUX09OTFko
UywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NI
QURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFE
RVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4
L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIs
IFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQogCiAj
ZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlw
ZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIg
c3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAi
LCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KIAog
I2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBl
ICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAi
IHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAog
fQpAQCAtNDMxLDcgKzQzNCw3IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICNk
ZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCiAKICNpZm5kZWYgWVlfCi0jIGlm
IGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyBpZiBZWUVOQUJMRV9OTFMK
ICMgIGlmIEVOQUJMRV9OTFMKICMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJp
c29uLXJ1bnRpbWUiLCBtc2dpZCkKQEAgLTc0OCwyNyArNzUxLDI3IEBAIHN0YXRpYyBjb25zdCB5
eXR5cGVfaW50MTYgeXlyaHNbXSA9CiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hl
cmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAxNjUsICAgMTY1LCAgIDIwMCwgICAy
MDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAgMzA4LCAgIDMxMSwg
ICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1NjEsICAgNTY1LAot
ICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwgICA2NjEsICAgNjY4
LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcyMywgICA3MjQsICAg
NzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAgIDc3MSwgICA3NzUs
ICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAgODMwLAotICAgICA4
NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAsICAgODgzLCAgIDg4
NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5MzAsICAgOTMxLCAg
IDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwgICA5ODYsICAgOTkx
LCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAotICAgIDEwOTYsICAx
MTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5LCAgMTE3MiwgIDEx
NzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAxMjU1LCAgMTI3OCwg
IDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDksICAxNDU4LCAgMTQ4
MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1MjQsICAxNTMxLCAg
MTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2OSwgIDE1NzMsCi0g
ICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYxMiwgIDE2MTcs
ICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUwLCAgMTY1NSwgIDE2
NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAxNzA1LCAgMTcxNCwg
IDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4MDIsCi0gICAgMTgw
NiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwgIDE4MjEsICAxODI1
LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0MSwgIDE4NDEsICAx
ODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAgMTg2OSwgIDE4NzAs
ICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0gICAgMTkxOCwgIDE5
MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcsICAxOTUwLCAgMTk1
NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5OTksICAyMDA4LCAg
MjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgICAgMCwgICAxNjgsICAg
MTY4LCAgIDIwMywgICAyMDYsICAgMjE5LCAgIDIyNCwgICAyMjksICAgMjM1LCAgIDIzOCwKKyAg
ICAgMzE3LCAgIDMyMCwgICA0MjksICAgNDM5LCAgIDQ1MiwgICA0NjAsICAgNTYwLCAgIDU2Mywg
ICA1NzEsICAgNTc1LAorICAgICA1ODIsICAgNTg2LCAgIDU5MywgICA1OTksICAgNjA4LCAgIDYx
NiwgICA2NzEsICAgNjc4LCAgIDY4OCwgICA2OTEsCisgICAgIDcwMSwgICA3MTEsICAgNzMyLCAg
IDczMywgICA3MzQsICAgNzM5LCAgIDc0MCwgICA3NDksICAgNzYxLCAgIDc2MiwKKyAgICAgNzcw
LCAgIDc4MSwgICA3ODUsICAgNzg2LCAgIDc5NiwgICA4MDYsICAgODE2LCAgIDgyOSwgICA4MzAs
ICAgODQwLAorICAgICA4NTMsICAgODU3LCAgIDg2MSwgICA4NjUsICAgODY2LCAgIDg3OSwgICA4
ODAsICAgODkzLCAgIDg5NCwgICA5MDcsCisgICAgIDkwOCwgICA5MjUsICAgOTI2LCAgIDkzOSwg
ICA5NDAsICAgOTQxLCAgIDk0MiwgICA5NDMsICAgOTQ3LCAgIDk1MCwKKyAgICAgOTYxLCAgIDk2
OSwgICA5OTYsICAxMDAxLCAgMTAwOCwgIDEwNDYsICAxMDQ5LCAgMTA1NiwgIDEwNjQsICAxMDg1
LAorICAgIDExMDYsICAxMTE3LCAgMTE0NiwgIDExNTEsICAxMTYxLCAgMTE2NiwgIDExNzYsICAx
MTc5LCAgMTE4MiwgIDExODUsCisgICAgMTE5MSwgIDExOTgsICAxMjAxLCAgMTIyMywgIDEyNDEs
ICAxMjY1LCAgMTI4OCwgIDEyOTIsICAxMzEwLCAgMTMxOCwKKyAgICAxMzUwLCAgMTM3MCwgIDE0
NTksICAxNDY4LCAgMTQ5MSwgIDE0OTQsICAxNTAwLCAgMTUwOCwgIDE1MTYsICAxNTI0LAorICAg
IDE1MzQsICAxNTQxLCAgMTU0NCwgIDE1NDcsICAxNTUzLCAgMTU1NiwgIDE1NzEsICAxNTc1LCAg
MTU3OSwgIDE1ODMsCisgICAgMTU5MiwgIDE1OTcsICAxNjAyLCAgMTYwNywgIDE2MTIsICAxNjE3
LCAgMTYyMiwgIDE2MjcsICAxNjMyLCAgMTYzNywKKyAgICAxNjQzLCAgMTY0OSwgIDE2NTUsICAx
NjYwLCAgMTY2NSwgIDE2NzQsICAxNjgzLCAgMTY4OCwgIDE3MDEsICAxNzAxLAorICAgIDE3MTUs
ICAxNzE1LCAgMTcyNCwgIDE3MjcsICAxNzQyLCAgMTc3OCwgIDE3ODIsICAxNzg4LCAgMTc5Niwg
IDE4MTIsCisgICAgMTgxNiwgIDE4MjAsICAxODIxLCAgMTgyNywgIDE4MjgsICAxODI5LCAgMTgz
MCwgIDE4MzEsICAxODM1LCAgMTgzNiwKKyAgICAxODM2LCAgMTgzNiwgIDE4NDYsICAxODQ3LCAg
MTg1MSwgIDE4NTEsICAxODUyLCAgMTg1MiwgIDE4NTcsICAxODYwLAorICAgIDE4NzAsICAxODcz
LCAgMTg3OSwgIDE4ODAsICAxODg0LCAgMTg5MiwgIDE4OTYsICAxOTA2LCAgMTkxMSwgIDE5Mjgs
CisgICAgMTkyOCwgIDE5MzMsICAxOTMzLCAgMTk0MCwgIDE5NDAsICAxOTQ4LCAgMTk1MSwgIDE5
NTcsICAxOTYwLCAgMTk2NiwKKyAgICAxOTcwLCAgMTk3NywgIDE5ODQsICAxOTkxLCAgMTk5OCwg
IDIwMDksICAyMDE4LCAgMjAyMiwgIDIwMjksICAyMDMyLAorICAgIDIwMzgsICAyMDM4CiB9Owog
I2VuZGlmCiAKQEAgLTE0MDQsNyArMTQwNyw3IEBAIHdoaWxlIChZWUlEICgwKSkKICAgIHdlIHdv
bid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93
LiAgKi8KIAogI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBkZWZpbmVkIFlZTFRZUEVf
SVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgaWYgWVlMVFlQRV9JU19UUklWSUFM
CiAjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKICAgICAgZnByaW50
ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCiAJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExv
YykuZmlyc3RfY29sdW1uLAlcCkBAIC0yMTU3LDcgKzIxNjAsNyBAQCB5eXJlZHVjZToKICAgICAg
ICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7
CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wg
PT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAg
ICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsyMTY5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIg
Y2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAgICAgaWYgKCEgc3lt
Ym9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQi
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyaWFi
bGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpAQCAtMjIwMSw3ICsy
MjA0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29u
c3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIyNDcsOSArMjI1MCw5IEBAIHl5cmVkdWNl
OgogICAgIHsKICAgICAgICAgaWYgKCEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNBcnJheSgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQg
b2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdl
dFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUg
YXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBt
YXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0
UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBAIC0yMjY2LDcgKzIy
NjksMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSB8fCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJb
IiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5m
b1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxp
bmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNB
cnJheSgpKSB7CkBAIC0yMjc5LDcgKzIyODUsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+PSAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCci
LCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBpbmRl
eCBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJ
Q29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
ZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJb
IiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjMzMCw3ICsyMzM5LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxp
bmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJj
YW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogCkBAIC0yMzc1LDcgKzIzODQsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJv
dyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxl
bWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVt
ZW50ZWQgeWV0IiwgIi4iKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwogICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKQEAgLTIz
OTMsNyArMjQwMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0g
ZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAg
ICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxk
cyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIs
ICJJbnRlcm5hbCBFcnJvciIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC0yNDI1LDEzICsyNDM0LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0u
dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2
ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9CkBAIC0yNTMwLDkgKzI1Mzks
MTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRl
cm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFs
IEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWx0IGluIHVuYXJ5
IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVu
YXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlw
ZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5m
byA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLCBleHRyYUluZm8u
Y19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI1NTYs
NyArMjU2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9IGZu
Q2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNl
KClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRM
aW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5v
dXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5v
ZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQn
IG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1ODYsNyArMjU5Niw3IEBAIHl5
cmVkdWNlOgogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwg
IiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
KS5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybSk7CiAgICAgO30KQEAgLTI2OTcsNyArMjcwNyw3IEBAIHl5cmVkdWNlOgogICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBn
ZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmco
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0
cnVjdEZsb2F0OwpAQCAtMzE5MSwxMiArMzIwMSwxMiBAQCB5eXJlZHVjZToKICAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVk
TmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAgICBpZiAocHJldkRl
Yy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVh
bGlmaWVyKCkgIT0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0o
aSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMg
bXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtMzI1Myw3ICszMjYzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIs
ICJ2b2lkIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBk
ZWxldGUgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwogICAgICAgICB9IGVs
c2UgewpAQCAtMzI2OCw3ICszMjc4LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAm
JiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFy
eSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFs
aWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGlu
ZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtl
IHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0zMjg5LDcgKzMy
OTksNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3Zv
aWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQpAQCAtMzQxMCw3ICszNDIw
LDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN5bWJvbCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGlu
dmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICJ1
bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAKQEAgLTM1MzgsNyArMzU0OCw3IEBAIHl5cmVkdWNlOgogICBjYXNl
IDk4OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgKHl5
dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAidW5zaXplZCBhcnJheSBkZWNs
YXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5j
X3N0cigpKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZz
cFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwpAQCAtMzYxNiw3ICszNjI2LDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0QmFzaWMoRWJ0SW52
YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3ltYm9sKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0z
NjM1LDcgKzM2NDUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CiAgICAg
ICAgIH0KQEAgLTM2NDYsMTkgKzM2NTYsMTkgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAg
IGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAibm90
IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBv
cnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5
KGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgYmUg
Ym9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFy
eWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBl
ID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM5NDcsNyArMzk1Nyw3IEBAIHl5
cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9u
KCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2Ft
cGxlckV4dGVybmFsT0VTIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyRXh0ZXJu
YWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VTIiwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKQEAgLTM5NjAsNyArMzk3MCw3IEBAIHl5cmVkdWNlOgogCiAgICAgewog
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9BUkJfdGV4dHVyZV9y
ZWN0YW5nbGUiKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0IiwgIiIpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAi
dW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIy
RFJlY3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtNDQyMSw3ICs0NDMxLDcg
QEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMild
LmxleCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAi
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4
KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKQEAgLTQ0MzIsNyArNDQ0
Miw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9w
QnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDQ0LDcgKzQ0NTQsNyBA
QCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygxKSAtICgy
KV0ubGV4KS5saW5lKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUt
PmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0
dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1
cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgIDt9CkBAIC00NDU2LDEwICs0NDY2LDEwIEBAIHl5cmVkdWNlOgogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5j
dGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVu
Y3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNh
bm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5v
dCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUp
ICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5l
LCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIDt9CkBAIC00NTE3
LDcgKzQ1MjcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBU
aGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5LgogICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwg
ImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CkBAIC00NTI3LDcgKzQ1MzcsNyBAQCB5
eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0g
Im1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKSA+IDAp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rp
b24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2Ug
YW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkg
ewpAQCAtNDU1OSw3ICs0NTY5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUu
aW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUt
PmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ2MDAsOSArNDYxMCw4IEBAIHl5cmVkdWNlOgogCiAgICAgICAgIC8vIHN0
b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3Ro
ZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0
aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+
Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVi
dWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRP
cHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdt
YSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUp
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTUgKzQzMywxNSBAQCBwcm90ZWN0ZWQ6CiAK
IHR5cGVkZWYgVFZlY3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKIHR5cGVkZWYg
VFZlY3RvcjxpbnQ+IFRRdWFsaWZpZXJMaXN0OwotdHlwZWRlZiBUTWFwPFRTdHJpbmcsIFRTdHJp
bmc+IFRQcmFnbWFUYWJsZTsKKwogLy8KIC8vIE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJp
dHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgogLy8KIGNsYXNzIFRJbnRlcm1BZ2dyZWdhdGUg
OiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBUSW50ZXJtQWdncmVnYXRl
KCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgcHJhZ21h
VGFibGUoMCksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFsc2UpIHsgfQotICAg
IFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBwcmFn
bWFUYWJsZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0gICAgflRJbnRlcm1B
Z2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUo
KSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBlbmRMaW5l
KDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRl
KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihm
YWxzZSkgeyB9CisgICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IH0KIAogICAgIHZpcnR1YWwgVElu
dGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKQEAgLTQ1MiwxNCArNDUyLDEz
IEBAIHB1YmxpYzoKICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZTsgfQogCiAgICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVl
OyB9Ci0gICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKyAg
ICBib29sIGlzVXNlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQogCiAg
ICAgdm9pZCBzZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9CiAgICAgYm9vbCBn
ZXRPcHRpbWl6ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9CiAgICAgdm9pZCBzZXREZWJ1Zyhib29s
IGQpIHsgZGVidWcgPSBkOyB9CiAgICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9
Ci0gICAgdm9pZCBhZGRUb1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKTsK
LSAgICBjb25zdCBUUHJhZ21hVGFibGUmIGdldFByYWdtYVRhYmxlKCkgY29uc3QgeyByZXR1cm4g
KnByYWdtYVRhYmxlOyB9CisKICAgICB2b2lkIHNldEVuZExpbmUoVFNvdXJjZUxvYyBsaW5lKSB7
IGVuZExpbmUgPSBsaW5lOyB9CiAgICAgVFNvdXJjZUxvYyBnZXRFbmRMaW5lKCkgY29uc3QgeyBy
ZXR1cm4gZW5kTGluZTsgfQogCkBAIC00NzUsNyArNDc0LDYgQEAgcHJvdGVjdGVkOgogCiAgICAg
Ym9vbCBvcHRpbWl6ZTsKICAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJsZSAqcHJhZ21h
VGFibGU7CiAgICAgVFNvdXJjZUxvYyBlbmRMaW5lOwogCiAgICAgLy8gSWYgc2V0IHRvIHRydWUs
IHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBlbXVsYXRlZCBvbmUK
QEAgLTUzMyw2ICs1MzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZp
c2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKICAgICAgICAgICAg
IGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigpIHt9OwogCiAgICAg
dmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQogICAgIHZpcnR1YWwg
dm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L29zaW5jbHVkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw4IEBACiAjZWxpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKICAgICAgIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKICAgICAgIGRlZmluZWQo
X19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAotICAgICAgZGVmaW5lZChfX0dMSUJDX18p
IHx8IGRlZmluZWQoX19HTlVfXykgfHwgZGVmaW5lZChfX1FOWF9fKQorICAgICAgZGVmaW5lZChf
X0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgXAorICAgICAgZGVmaW5lZChfX1FOWF9f
KQogI2RlZmluZSBBTkdMRV9PU19QT1NJWAogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0
Zm9ybS4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1ZGUgImNvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVu
Y3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBlbmRlbmN5R3JhcGg6
On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBtQWxsTm9kZXMuZW5k
KCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAg
ICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVudCogVERlcGVuZGVu
Y3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJndW1lbnQgPSBuZXcg
VEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51bWJlcik7CisgICAg
bUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFyZ3VtZW50OworfQor
CitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUZ1bmN0aW9uQ2Fs
bChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVu
Y3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25DYWxsKGludGVybUZ1
bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlvbkNhbGwpOworICAg
IGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5pc1VzZXJEZWZpbmVk
KCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9iYWNrKGZ1bmN0aW9u
Q2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBoU3ltYm9sKiBURGVw
ZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVN5bWJvbElk
TWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFwaFN5bWJvbCogc3lt
Ym9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5lbmQoKSkgeworICAg
ICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3ltYm9sID0gcGFpci5z
ZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRHcmFwaFN5bWJvbChp
bnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7CisKKyAg
ICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sKTsK
KyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAgICAvLyBXZSBzYXZl
IGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBjYW4gc3RhcnQgZ3Jh
cGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYgKElzU2FtcGxlcihp
bnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1TYW1wbGVyU3ltYm9s
cy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltYm9sOworfQorCitU
R3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVjdGlvbihUSW50ZXJt
U2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7CisgICAgbUFsbE5v
ZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKK1RH
cmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVybUxvb3AqIGludGVy
bUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhMb29wKGludGVybUxv
b3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0dXJuIGxvb3A7Cit9
CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKFRJ
bnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9wKTsKKyAgICBtQWxs
Tm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2ljYWxPcDsKK30KKwor
Y29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNvbnN0Cit7CisgICAg
Y29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0SW50ZXJtTG9naWNh
bE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvcFN0cmluZyA9
ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9wU3RyaW5nID0gIm9y
IjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25vd24iOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFUEdSQVBIX0RFUEVO
REVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBI
X0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0
PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xhc3MgVEdyYXBoUGFy
ZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBoRnVuY3Rpb25DYWxs
OworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9uOworY2xhc3MgVEdy
YXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0eXBlZGVmIHN0ZDo6
c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3Jh
cGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8VEdyYXBoU3lt
Ym9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUR3JhcGhGdW5j
dGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFzZSBjbGFzcyBmb3Ig
YWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBoTm9kZSB7CitwdWJs
aWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRlcm1Ob2RlKG5vZGUp
IHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3Byb3RlY3Rl
ZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisvLyBCYXNlIGNsYXNz
IGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFwaE5vZGUobm9kZSkg
e30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2b2lkIGFkZERlcGVu
ZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlzKSBtRGVwZW5kZW50
Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFREZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6CisgICAgVEdyYXBo
Tm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNh
bGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVibGljIFRHcmFwaFBh
cmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRlcm1BZ2dyZWdhdGUq
IGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAgICAgICA6IFRHcmFw
aFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1Bcmd1bWVudE51bWJl
cihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1bWVudCgpIHt9Cisg
ICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAgIGludCBnZXRBcmd1
bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNl
cik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9OworCisvLworLy8gSGFu
ZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9uQ2FsbCA6IHB1Ymxp
YyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5jdGlvbkNhbGwoVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6IFRHcmFwaFBhcmVu
dE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaEZ1bmN0aW9u
Q2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRy
YXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLworY2xhc3MgVEdyYXBo
U3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFyZW50Tm9kZShpbnRl
cm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30KKyAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVybiBpbnRlcm1Ob2Rl
LT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5k
ZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxl
IGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRHcmFwaFNl
bGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhTZWxlY3Rp
b24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFwaE5vZGUoaW50ZXJt
U2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigpIHt9CisgICAgY29u
c3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
aW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKwor
Ly8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3Mg
VEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhMb29w
KFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJtTG9vcCkge30KKyAg
ICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJtTG9vcCogZ2V0SW50
ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9vcE5vZGUoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5kLCBvci4KKy8vCitj
bGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7CitwdWJsaWM6CisgICAg
VEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkgOiBUR3JhcGhO
b2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb2dpY2FsT3AoKSB7
fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxPcCgpIGNvbnN0IHsg
cmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAgY29uc3QgY2hhciog
Z2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8KKy8vIEEgZGVwZW5k
ZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0aW9ucyBldGMuCisv
LworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGVudHJ5IHBvaW50
cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5IGdyYXBoIG5vZGVz
IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlkZWQgImNyZWF0ZS4u
LiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkgbWFuYWdlcyB0aGUg
bWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5vdCBiZSByZW1vdmVk
IGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxsIGV4aXN0IHdoaWxl
IHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisvLworY2xhc3MgVERl
cGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAgICBUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1BbGxOb2Rlcy5i
ZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhTeW1ib2xWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKworICAgIFRHcmFwaFN5
bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAgICB9CisKKyAgICBU
RnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rp
b25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsKKyAgICB9CisKKyAg
ICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
RnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFwaEZ1bmN0aW9uQ2Fs
bCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2Fs
bCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2VsZWN0aW9uKFRJbnRl
cm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9vcCogY3JlYXRlTG9v
cChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNhbE9wKiBjcmVhdGVM
b2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFwOworICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFpcjsKKworICAgIFRH
cmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZlY3RvciBtU2FtcGxl
clN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmluZWRGdW5jdGlvbkNh
bGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBkZXJpdmUgZnJvbSB0
aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhl
biBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRo
aXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4K
Ky8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9v
cCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0
aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9CisgICAgdm9pZCBk
ZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xlYXJWaXNpdGVkKCkg
eyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChUR3JhcGhOb2RlKiBu
b2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNWaXNpdGVkKFRHcmFw
aE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9kZSkgIT0gbVZpc2l0
ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBUR3JhcGhOb2RlU2V0
IG1WaXNpdGVkOworfTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisKK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdy
YXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBidWlsZGVyKGdyYXBo
KTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRlLT5nZXRPcCgpKSB7
CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKGludGVy
bUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogdmlzaXRG
dW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUpCit7
CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rp
b25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAibWFpbigiKQorICAg
ICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGludGVybUFnZ3JlZ2F0
ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIgYW5kIGNyZWF0ZXMg
YSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24g
Y2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2FsbChU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAgVEdyYXBoRnVuY3Rp
b25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm1G
dW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgYXJn
dW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVEludGVybVNlcXVlbmNl
JiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNlcXVlbmNlKCk7Cisg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbnRlcm1Bcmd1
bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1lbnRzLmVuZCgpOwor
ICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAgICAgICAgVE5vZGVT
ZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1Bcmd1bWVudC0+dHJh
dmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBhcmd1bWVudE5vZGVz
ID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhBcmd1bWVudCog
YXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0aW9uQ2FsbCwgYXJn
dW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5v
ZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnQtPmFkZERl
cGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFB1
c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgY3Vy
cmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXByZXNlbnQgdGhlIHJl
c3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4gZXhwcmVzc2lvbiBs
aWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGggbGlrZQorICAgIC8v
ICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAgICAvLyBUaGlzIGxp
bmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUgYmFjayB1cCB0byBh
biBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNoIHdpbGwgY3JlYXRl
IHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1Ob2RlU2V0cy5pbnNl
cnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdn
cmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBpbnRlcm1BZ2dyZWdh
dGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRl
cikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9ICppdGVyOworICAg
ICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1i
b2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQgb2YgZGVwZW5kZW50
IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uCisgICAgLy8g
dGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5bWJvbCA9IG1HcmFw
aC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9kZVNldHMuaW5zZXJ0
SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wgaXMgdGhlIGN1cnJl
bnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxhY2UgdGhlIHByZXZp
b3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wuCisgICAgaWYgKCFt
TGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50b3AoKSAhPSAmbVJp
Z2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgpOworICAgICAgICBt
TGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jvb2wgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBp
bnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmluYXJ5LT5nZXRPcCgp
OworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFyeS0+bW9kaWZpZXNT
dGF0ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNl
IGlmIChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxPcikKKyAgICAgICAg
dmlzaXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHZpc2l0Qmlu
YXJ5Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5hcnkq
IGludGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50
ZXJtQXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVmdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9IE5VTEw7CisKKyAg
ICB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRhaW5lcih0aGlzKTsK
KworICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAgICAgICAgICAgaW50
ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9zdFN5bWJvbCA9IG1M
ZWZ0bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVyIHRyYXZlcnNpbmcg
dGhlIGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3VsZCBoYXZlIGZvdW5k
IGEgcmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQgdGhlIGxlZnRtb3N0
IHN5bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAgICAgICBBU1NFUlQo
bGVmdG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAgICBBU1NFUlQobGVm
dG1vc3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50LT5nZXRSaWdodCgp
KSB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRtb3N0U3ltYm9s
TWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAgIGludGVybVJpZ2h0
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNl
dCogYXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQorICAgICAgICAgICAg
Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5vZGVzLCBsZWZ0bW9z
dFN5bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRo
aXMgYXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRlbnQgc3ltYm9scyB0
bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdubWVudC4KKyAgICAv
LyBBbiBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxkIGEgZGVwZW5kZW5j
eSBncmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5lIGVzc2VudGlhbGx5
IHBhc3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNzaWdubWVudCAoImIi
IGluIHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJsaWVyIHZpc2l0QXNz
aWdubWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2ggd2lsbAorICAgIC8v
IGNyZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNldHMuaW5zZXJ0SW50
b1RvcFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxk
ZXI6OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAg
ICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNhbE9wLT5nZXRMZWZ0
KCkpIHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIgbm9kZVNldE1haW50
YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgp
KSB7CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG1HcmFwaC0+Y3Jl
YXRlTG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBjb25uZWN0TXVsdGlw
bGVOb2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGludGVybUxvZ2ljYWxP
cC0+Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgaW50ZXJt
UmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBo
QnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkp
Cit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVybUJpbmFyeS0+Z2V0
TGVmdCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsKKworICAgIGlmIChU
SW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRSaWdodCgpKSB7Cisg
ICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1ib2xNYWludGFpbmVy
KHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+dHJhdmVyc2UodGhp
cyk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKQorewor
ICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtU2VsZWN0aW9uLT5n
ZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIgbm9kZVNldE1haW50
YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9IG1Ob2RlU2V0cy5n
ZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBt
R3JhcGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAgICAgICAgICAgY29u
bmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMsIHNlbGVjdGlvbik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybVRydWVCbG9j
ayA9IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIGludGVybVRydWVC
bG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUZhbHNl
QmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgaW50ZXJt
RmFsc2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtQ29uZGl0
aW9uID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgVE5vZGVTZXRNYWlu
dGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGludGVybUNvbmRpdGlv
bi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogY29uZGl0aW9u
Tm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAgIFRHcmFwaExvb3Aq
IGxvb3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAgICAgICAgICBjb25u
ZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2RlcywgbG9vcCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJvZHkgPSBpbnRlcm1M
b29wLT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVybUxvb3AtPmdldEV4
cHJlc3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6
Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQYXJlbnROb2RlU2V0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMtPmVu
ZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2RlKiBjdXJyZW50Tm9k
ZSA9ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50Tm9kZShub2RlKTsK
KyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
ZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5E
RU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5D
WV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3JhcGggb2Ygc3ltYm9s
cywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJzaW5nIGEKKy8vIGlu
dGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGJ1aWxkKFRJ
bnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJvbCo+IFRTeW1ib2xT
dGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUqPiBUUGFyZW50Tm9k
ZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRlcGVuZGVudCBub2Rl
cyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRjLgorICAgIC8vIHdoaWxlIHRyYXZlcnNp
bmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhpcyBkYXRhIHN0cnVj
dHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBlbmRlbmN5IGdyYXBo
IHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0U3RhY2sgeworICAgIHB1
YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OworICAgICAgICB+VE5vZGVTZXRTdGFj
aygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSB0b3Agc2V0
IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0KCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgpKTsKKyAgICAgICAg
ICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAg
IHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBhcmVudE5vZGVTZXQo
KSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgZGVsZXRlIG5vZGVTZXRzLnRvcCgp
OworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQ
b3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUgbmV3IHRvcCBzZXQu
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4K
KyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Agc2V0LCB0aGUgdG9w
IHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0SW50b05leHQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAg
ICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgpOworICAgICAgICAg
ICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAgIGlmICghbm9kZVNldHMuZW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQgPSBub2RlU2V0cy50
b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRUb3BTZXQtPmJlZ2lu
KCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxl
dGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIHRo
ZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVuIHRo
ZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCisgICAgICAgIC8vIHN5bWJvbHMg
dGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9uLgorICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCisgICAgICAgIHZvaWQgaW5z
ZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCFub2RlU2V0
cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNldCgpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5vZGVTZXQqPiBUUGFy
ZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJlbnROb2RlU2V0U3RhY2sgbm9kZVNldHM7
CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNo
ZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5z
dGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2RlIHNldC4KKyAgICAv
LworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBU
Tm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnkpCisgICAg
ICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVzaFNldCgpOyB9Cisg
ICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7IH0KKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisg
ICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hl
biBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2Nv
cGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRzIGNvbnRlbnRzIHRv
CisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisgICAgLy8KKyAgICBjbGFzcyBUTm9kZVNl
dFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAgICBUTm9kZVNldFBy
b3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciogZmFjdG9yeSkKKyAg
ICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5wdXNoU2V0KCk7IH0K
KyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBzZXRzLnBvcFNldElu
dG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7
CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBrZWVw
cyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4cGxvcmluZyBhbgor
ICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBwbGFjZWhvbGRlciBz
eW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEgbGVmdCBzdWJ0cmVl
LAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3VidHJlZS4KKyAgICAv
LyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUgbGVmdG1vc3Qgc3lt
Ym9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAgIC8vIER1cmluZyB0cmF2ZXJzYWwsIHRo
ZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRTdWJ0cmVlIHdpdGgg
YSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2ZXIgYmUgcmVwbGFj
ZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0aGUgbGVmdG1vc3QK
KyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFzcyBUTGVmdG1vc3RTeW1ib2xNYWludGFp
bmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYgc3VidHJlZSkKKyAg
ICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9zdFN5bWJvbHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wgPSBsZWZ0bW9zdFN5
bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1YnRyZWU7CisgICAg
ICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAgICAgICAgICBsZWZ0
bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAgICAgICB+VExlZnRt
b3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1Bs
YWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3ltYm9scy5wb3AoKTsK
KyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9sU3RhY2smIGxlZnRt
b3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3ltYm9sOworICAgIH07
CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdyYXBoKiBncmFwaCkK
KyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAg
LCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0cmVlKE5VTEwpCisgICAg
ICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQgYnVpbGQoVEludGVybU5vZGUqIGludGVy
bU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KKworICAgIHZvaWQgY29ubmVj
dE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5vZGVzLCBUR3JhcGhO
b2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50KFRJbnRlcm1CaW5h
cnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lk
IHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOworICAgIHZvaWQgdmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZvaWQgdmlzaXRGdW5jdGlv
bkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsKKyAgICB2b2lkIHZp
c2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOworCisgICAgVEdyYXBoU3lt
Ym9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3VidHJlZTsKKworICAg
IFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNrIG1Ob2RlU2V0czsK
KyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRw
dXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aE91dHB1dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRpb24oKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAgICBtU2luayA8PCAi
ICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0QXJndW1lbnQoVEdy
YXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAg
IG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1lbnROdW1iZXIoKSA8
PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0SW50ZXJtRnVuY3Rp
b25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxs
KQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgImZ1bmN0aW9uIGNh
bGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKS0+Z2V0TmFtZSgp
IDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6dmlzaXRTeW1ib2wo
VEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRpb24oKTsKKyAgICBt
U2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2woKSA8PCAiIChzeW1i
b2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRJZCgp
IDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0
aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1dEluZGVudGF0aW9u
KCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAgICBvdXRwdXRJbmRl
bnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dpY2FsT3AqIGxv
Z2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb2dp
Y2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERl
cGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdy
YXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9yIChUR3JhcGhOb2Rl
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsgaXRlciAhPSBncmFw
aC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogc3ltYm9sID0gKml0
ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBzcGFubmluZyB0cmVl
IC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5bWJvbC0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91
dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQVVRfSAorI2RlZmlu
ZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICisKKyNpbmNsdWRl
ICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0IDogcHVibGljIFRE
ZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBlbmRlbmN5R3JhcGhP
dXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQorICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVuY3Rpb25DYWxsKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rp
b24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsK
KworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5jeUdyYXBoJiBncmFw
aCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsKKworICAgIFRJbmZv
U2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ERVBHUkFQSF9ERVBF
TkRFTkNZX0dSQVBIX09VVFBVVF9ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVzZSBtZXRob2RzIGRv
IGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGggYW5kIG1hcmsgdmlz
aXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBo
VHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+bWFya1Zp
c2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoVERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAgVEdyYXBoTm9kZTo6
dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJzZXItPmluY3JlbWVu
dERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBjaGlsZHJlbi4KKyAg
ICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtRGVwZW5kZW50Tm9k
ZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVzLmVuZCgpOworICAg
ICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkpCisgICAgICAgICAg
ICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisgICAgZ3JhcGhUcmF2
ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJndW1lbnQ6OnRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdy
YXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFwaFBhcmVudE5vZGU6
OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhGdW5jdGlvbkNhbGw6
OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQorewor
ICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsKKyAgICBUR3JhcGhQ
YXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3ZvaWQgVEdyYXBoU3lt
Ym9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikK
K3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7CisgICAgVEdyYXBoUGFy
ZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lkIFRHcmFwaFNlbGVj
dGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIp
Cit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb29wOjp0
cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAg
ICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFwaE5vZGU6OnRyYXZl
cnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNl
KFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQoreworICAgIGdyYXBo
VHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhOb2RlOjp0cmF2ZXJz
ZShncmFwaFRyYXZlcnNlcik7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJRElBIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFs
cy5oIgogCkBAIC0zMDcsNyArMzA4LDcgQEAgc3RydWN0IEF0b21UYWJsZV9SZWMgewogICAgIGlu
dCBzaXplOwogfTsKIAotc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9Oworc3Rh
dGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IE5VTEwsIDAsIDAgfSwgeyBOVUxMLCAwLCAwLCB7
MH0gfSwgTlVMTCwgTlVMTCwgMCwgMCB9OwogQXRvbVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsK
IAogc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIg
KnMsIGludCBhdG9tKTsKQEAgLTQzNCwxNCArNDM1LDE0IEBAIHN0YXRpYyBpbnQgRmluZEhhc2hM
b2MoQXRvbVRhYmxlICphdGFibGUKICAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0
b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAgICAgICAgICBjaGFy
IHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhhc2ggZmFpbGVk
IHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBz
aXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIq
KiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFz
ZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFC
TEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIp
OwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIs
IGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5ldyBzdHJpbmcg
XCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0
YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAgICAgICAgICAgICAg
ICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVk
IGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2gg
ZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSAr
IDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5l
bnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQgKzY4NiwxNCBAQCB2
b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNoYXIgc3RyWzIwMF07
CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAg
ICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5n
c1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks
ICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtp
aV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0gICAgc3ByaW50Zihz
dHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAg
c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9
JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxl
LT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICBmb3IgKGlp
ID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNw
cmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIHNu
cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWld
KTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHAuYwkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBA
QCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogCiAjaWYg
ZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgaW50IENQUHByYWdt
YSh5eXN0eXBlcHAgKiB5eWx2YWxwCiAJCWNhc2UgLTE6CiAgICAgICAgICAgICAvLyBFT0YKICAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0
aCBhIG5ld2xpbmUiKTsJCQkKLQkJCXJldHVybiB0b2tlbjsKKwkJCWdvdG8gZnJlZU1lbW9yeUFu
ZFJldHVyblRva2VuOwogCQlkZWZhdWx0OgogCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwogCQkJ
U3JjU3RyTmFtZVsxXSA9ICdcMCc7CkBAIC02ODgsMTAgKzY4OSw5IEBAIHN0YXRpYyBpbnQgQ1BQ
cHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHAKIAkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOwogCUhhbmRs
ZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7Ci0JdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCQor
ZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyAr
K2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyArNzg0LDYgQEAgaW50
IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGludCB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAg
Y29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsKIAogICAgIGlmICh0
b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewogICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50
ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVhZENQUGxpbmUoeXlz
dHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxw
cCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9t
KSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAg
ICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQg
PT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXls
dmFscHApOwogICAgICAgICB9IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUgQEAgdm9pZCBGcmVl
TWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07
CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJvbCAqc3ltYm9sID0g
TlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0eXBlcHAgdmFsID0g
ezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OworICAg
IHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCB7MH19OwogICAgIGludCBhdG9tID0gMDsKIAog
ICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwogICAg
IHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgIiVkIiwg
dmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xF
TisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENP
TlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7
CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19T
KTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlw
ZXBwICogeXkKICAgICBjb25zdCBjaGFyICptZXNzYWdlOwogCWlmIChhdG9tID09IF9fTElORV9f
QXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwotICAg
ICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQp
OworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFN
RV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4oQ1BQ
X0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBp
ZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdl
dFN0cmluZ051bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwi
JWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9s
X25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAg
ICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJl
dHVybiAxOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMTIyNzM4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCB2b2lkICBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciopOyAgICAgCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1z
Zyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKIHZvaWQgIEhhbmRs
ZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3Rp
dmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAg
ICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2co
Y2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8u
bG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQRXJyb3JUb0luZm9M
b2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLklu
Zm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0TGluZU51bWJlcihp
bnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKIHZvaWQgIFNldFN0
cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAg
IAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlz
aW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2lmbmRlZiBfX01FTU9SWV9ICiAj
ZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0eXBlZGVmIHN0cnVj
dCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5UG9vbCAqbWVtX0Ny
ZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQg
SW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBp
bnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2Nh
bkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRh
YmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZp
c2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NjYW5uZXIuYwkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOCBAQCB0eXBl
ZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CiAgICAgY2hhciAqcDsKIH0gU3RyaW5nSW5wdXRT
cmM7CiAKK3N0YXRpYyBpbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CisKIHN0YXRp
YyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAg
ICByZXR1cm4gRU9GOwpAQCAtNzMsNyArNzUsNyBAQCBzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0
U3JjICppcywgeXlzdHlwCiAKIHN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gs
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7fQogCi1zdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3Jj
ID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsKK3N0YXRpYyBJbnB1dFNyYyBl
b2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCwgMCwgMCB9Owog
CiBzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7
CiAKQEAgLTEyNiw2ICsxMjgsMTYgQEAgaW50IEZyZWVTY2FubmVyKHZvaWQpCiAgICAgcmV0dXJu
IChGcmVlQ1BQKCkpOwogfQogCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwg
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQoreworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gc3Ry
aW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OworICAgIGNwcC0+UGFTdHJMZW4gICA9
IGxlbmd0aDsKKyAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAgIHJldHVybiAwOwor
fQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11
bHRpcGxlIHN0cmluZ3MuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgdHlwZWRlZiBzdHJ1
Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAq
Y3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmlu
Zyhjb25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRo
ZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAs
IGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQg
YSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3Rp
Y2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIENQUEVy
cm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGlu
dG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKIHZvaWQg
U2V0U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywg
U2NvcGUgCiBTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwg
aW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKTsKIFN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2Nv
cGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsKIAogCiAjZW5k
aWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0cmluZy5o
PgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKQEAgLTI2NSw2ICsy
NjYsOCBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgY2hh
ciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0b2tlbiwgbGVuOwog
ICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIgY2hfdmFsOwogCiAg
ICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4gPj0gMCkgewpAQCAt
MzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlw
ZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAg
ICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAgICAgICAgY2ggPSBsUmVh
ZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05B
TUVfTEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAgICAgICAgICAgICAg
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUo
cFRvayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKICAg
ICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9
IDg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNo
X3ZhbCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4
ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdh
JyArIDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJh
c2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgc3ltYm9s
X25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2Ug
KyBjaF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAg
IGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9s
X25hbWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJv
bF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNj
dW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEwICs0NDAsMTAgQEAg
dm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZQogICAgICAgICBzd2l0Y2gg
KHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAgICAgIGNhc2UgQ1BQ
X1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9t
U3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50
ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX1NUUkNP
TlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5n
KGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBzbnByaW50ZihzdHIs
IHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5z
Y19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09O
U1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwp
OwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tl
blN0cmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
aWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4p
OworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlYyIsIHRva2Vu
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIENQUERlYnVnTG9nTXNn
KHN0cik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSQogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAjZGVmaW5lIF9fVE9L
RU5TX0ggMQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvcGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJD
b250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQot
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0aWxzLmgiCi0jaW5j
bHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNv
bnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsKLQotICAgIC8vIE5h
bWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1lLT5zdWJz
dHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMg
Y29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAg
IGlmIChuYW1lLT5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLUNv
bnRleHQ6OkNvbnRleHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAgbUlucHV0KE5VTEwp
LAotICAgICAgbU91dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0g
ICAgZGVzdHJveUxleGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgpCi17Ci0gICAgcmV0
dXJuIGluaXRMZXhlcigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmluZSBidWlsdC1pbiBt
YWNyb3MgaGVyZSBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8gZGVmaW5lIHRoZW0g
ZXZlcnl0aW1lIGluIHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpwcm9jZXNzKGludCBj
b3VudCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgVG9rZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoKGNvdW50ID49MCkg
JiYgKHN0cmluZyAhPSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQotICAgIC8vIFNldHVw
LgotICAgIG1JbnB1dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIG1P
dXRwdXQgPSBvdXRwdXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9FUyIsIDEpOwotCi0g
ICAgLy8gUGFyc2UuCi0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQotICAgIC8vIENsZWFu
dXAuCi0gICAgcmVzZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb250ZXh0
OjpkZWZpbmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpU
b2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlRv
a2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0cjxNYWNybz4gbWFj
cm8obmV3IE1hY3JvKHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2VtZW50cykpOwotICAg
IGlmIChpc01hY3JvTmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoaXNNYWNyb0RlZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTog
UmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbU1hY3Jv
c1sqbmFtZV0gPSBtYWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
Q29udGV4dDo6dW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICBN
YWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7Ci0gICAgaWYgKGl0
ZXIgPT0gbU1hY3Jvcy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3ApOiBSZXBv
cnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbU1hY3Jvcy5lcmFz
ZShpdGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc01hY3JvRGVm
aW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4gbU1hY3Jvcy5maW5k
KCpuYW1lKSAhPSBtTWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBpbml0aWFsaXplZCBz
dGF0ZS4KLXZvaWQgQ29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9yX2VhY2gobU1hY3Jv
cy5iZWdpbigpLCBtTWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0gICAgbU1hY3Jvcy5j
bGVhcigpOwotCi0gICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBOVUxMOwotCi0gICAg
bU91dHB1dCA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVpbHRJbk1hY3JvKGNv
bnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpvc3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4qIHRva2VuID0gbmV3
IFRva2VuKDAsIElOVF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVhbS5zdHIoKSkpOwot
ICAgIFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2VuVmVjdG9yKDEsIHRv
a2VuKTsKLQotICAgIG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86OmtUeXBlT2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5nKG5hbWUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJNYWNyby5oIgotI2lu
Y2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBDb250ZXh0Ci17Ci0g
IHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQotICAgIGJvb2wgaW5p
dCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRva2VuVmVjdG9yKiBv
dXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7IH0KLSAgICBpbnQg
cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2VuVmVjdG9yKiBvdXRw
dXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1hY3JvKHBwOjpUb2tl
bjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5
cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBuYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAg
ICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAgIGJvb2wgdW5kZWZp
bmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBpc01hY3JvRGVmaW5l
ZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmlu
ZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIGluaXRM
ZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBkZWZpbmVCdWlsdElu
TWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgYm9vbCBwYXJz
ZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgotICAgIElucHV0KiBt
SW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9TZXQgbU1hY3Jvczsg
IC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfRElBR05PU1RJQ1NfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5n
IGRpYWdub3N0aWMgbWVzc2FnZXMuCisvLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxl
IGZvciBmb3JtYXR0aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCitjbGFzcyBEaWFnbm9z
dGljcworeworICBwdWJsaWM6CisgICAgZW51bSBTZXZlcml0eQorICAgIHsKKyAgICAgICAgRVJS
T1IsCisgICAgICAgIFdBUk5JTkcKKyAgICB9OworICAgIGVudW0gSUQKKyAgICB7CisgICAgICAg
IEVSUk9SX0JFR0lOLAorICAgICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgT1VUX09GX01F
TU9SWSwKKyAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIElOVkFMSURfTlVNQkVS
LAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklTSU9OX0JZX1pFUk8s
CisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAg
ICAgICBVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAor
ICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisg
ICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRCwKKyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisg
ICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywK
KyAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9O
QUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0Us
CisgICAgICAgIENPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9O
QUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisg
ICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9O
X0JFSEFWSU9SLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAg
IElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfRklMRV9O
VU1CRVIsCisgICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VO
RCwKKworICAgICAgICBXQVJOSU5HX0JFR0lOLAorICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICBXQVJOSU5H
X0VORAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOworCisgICAgdm9pZCBy
ZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5n
JiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwor
CisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgdGV4dCkgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKworI2luY2x1
ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRpYWdub3N0
aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9ETyhhbG9r
cCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50KGlkLCBs
b2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVy
aXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1Jf
RU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5JTkdfQkVH
SU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7CisKKyAg
ICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNs
YXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBj
bGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8gcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCisvLyBoYW5k
bGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERpcmVjdGl2ZUhhbmRs
ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7CisK
KyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29u
c3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0
cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhh
bmRsZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJl
Y3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitEaXJlY3RpdmVIYW5kbGVyOjp+
RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93
LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4OTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0
aXZlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+Cisj
aW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAi
RGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNs
dWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tl
bml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2VudW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVD
VElWRV9OT05FLAorICAgIERJUkVDVElWRV9ERUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAor
ICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJFQ1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lG
TkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJF
Q1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZFX0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEs
CisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKKyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBE
SVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlw
ZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcg
a0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5n
IGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBl
ICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05F
OworCisgICAgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQorICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0RFRklORTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJ
VkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikKKyAg
ICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQorICAgICAgICByZXR1
cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVFbGlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMSUY7CisgICAgZWxzZSBpZiAodG9r
ZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9F
TkRJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQorICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlUHJhZ21hKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsKKyAg
ICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09
IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQorICAgICAgICByZXR1
cm4gRElSRUNUSVZFX0xJTkU7CisKKyAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Cit9CisKK3N0
YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUp
Cit7CisgICAgc3dpdGNoIChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lG
TkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6CisgICAgICBjYXNlIERJUkVDVElWRV9F
TElGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCitzdGF0
aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHJldHVybiAodG9r
ZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9rZW4q
IHRva2VuKQoreworICAgIHdoaWxlKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBsZXhl
ci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVzZXJ2
ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMgcHJlZml4ZWQgd2l0
aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJHTF8i
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdvIGNv
bnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5maW5kKCJf
XyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qgc3Rk
OjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcDo6
TWFjcm9TZXQmIG1hY3JvU2V0KQoreworICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9TZXQu
ZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCA6IGZhbHNlOworfQorCituYW1lc3BhY2Ug
cHAKK3sKKworY2xhc3MgRGVmaW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6
CisgICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAgICAgICBjb25z
dCBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpIDoKKyAgICAgICAgbUxleGVyKGxleGVyKSwKKyAgICAgICAgbU1hY3JvU2V0KG1h
Y3JvU2V0KSwKKyAgICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQorICAgIHsKKyAgICB9
CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVkIik7
CisKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0
b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Ym9vbCBwYXJlbiA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAg
IGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0g
dHJ1ZTsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAg
ICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9L
RU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICAgICAgc3Rk
OjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6ICIw
IjsKKworICAgICAgICBpZiAocGFyZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHNraXBVbnRp
bEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVy
YXRvci4KKyAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1Rf
SU5UIHRva2VuLgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAg
ICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247CisgICAgfQorCisgIHByaXZhdGU6CisgICAg
TGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdu
b3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2ZVBh
cnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAgICBtVG9rZW5pemVy
KHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3Mo
ZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7
Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRv
CisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFy
c2VEaXJlY3RpdmUodG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBl
ID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Db25kaXRpb25h
bFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgICAg
ICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VO
VEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5s
b2NhdGlvbiwgYmxvY2sudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUgPT0g
J1xuJykpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4q
IHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZl
ID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVkIGNv
bmRpdGlvbmFsIGJsb2NrL2dyb3VwLAorICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9uYWwg
ZGlyZWN0aXZlcy4KKyAgICBpZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVjdGl2
ZShkaXJlY3RpdmUpKQorICAgIHsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaChkaXJlY3RpdmUpCisg
ICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfTk9ORToKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAgcGFyc2VVbmRl
Zih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAg
ICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgICBwYXJzZUVs
c2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6Cisg
ICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJF
Q1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6CisgICAgICAgIHBh
cnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9F
WFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZlcnNpb24odG9r
ZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6CisgICAgICAg
IHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2tpcFVudGls
RU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxB
U1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RU9G
X0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2Vu
KSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9rZW4t
PnZhbHVlLCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1ZSkp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9f
TkFNRV9SRVNFUlZFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFjcm8g
bWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1l
ID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAo
dG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgewor
ICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAg
ICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOworCisgICAgICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAgICAgfSB3aGlsZSAo
dG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
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+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFs
dWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgeworICAgICAgICBp
ZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tl
biogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZF
X0lGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVj
dGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYo
dG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5E
RUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFj
ay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29u
ZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7CisgICAgaWYg
KGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBKdXN0
IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kRWxzZUdy
b3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNP
TkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxvY2suZm91
bmRFbHNlR3JvdXAgPSB0cnVlOworICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5kVmFs
aWRHcm91cDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOworCisgICAgLy8gV2Fy
biBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFmdGVyICNlbHNlLgorICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0K
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7Cisg
ICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAg
aWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0
YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8g
Tm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVu
dGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRHcm91cCkKKyAgICB7CisgICAgICAgIC8vIERv
IG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVsIG5v
dCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1ZTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGludCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4p
OworICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAgICBibG9jay5mb3Vu
ZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVt
cHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRp
dGlvbmFsU3RhY2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2Vu
cyBhZnRlciAjZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlz
RU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0
b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUg
IT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAg
IHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
fQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0
cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1l
Wyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tl
bikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01B
KTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAg
ICBMRUZUX1BBUkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVO
CisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUs
IHZhbHVlOworICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0g
dG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUg
PT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUg
PT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUFJBR01BX1ZBTFVF
OgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICB2YWxpZCA9
IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIFJJR0hUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQg
PSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJyknKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisKKyAgICB2YWxpZCA9IHZhbGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAgICAv
LyBFbXB0eSBwcmFnbWEuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRfUEFS
RU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgorICAgIGlmICghdmFsaWQp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5SRUNP
R05JWkVEX1BSQUdNQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkgIC8v
IERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KKyAgICB7CisgICAgICAgIG1EaXJlY3Rp
dmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7Cisg
ICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4qIHRv
a2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FWFRF
TlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgRVhUX05BTUUsCisgICAg
ICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJT1IKKyAgICB9OworCisgICAgYm9vbCB2YWxp
ZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7CisgICAgaW50IHN0YXRl
ID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
RVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgQ09MT046CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKKyAgICAgICAgICAgIGlmICh2
YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZB
TElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZp
b3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1IgKyAx
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZB
TElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0
ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBlbnVtIFN0YXRl
CisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlk
ID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRlID0gVkVSU0lPTl9O
VU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4t
PnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgVkVSU0lP
Tl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZh
bGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYg
KHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQor
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0
b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElO
RSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAg
ICAgRklMRV9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50
IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAg
IE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFn
bm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElO
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5W
QUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0b2ko
dG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKKyAgICB9CisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVfTlVN
QkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7Cisg
ICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0
ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7Cisg
ICAgfQorfQorCitib29sIERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAg
IGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25z
dCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAg
ICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAg
Q29uZGl0aW9uYWxCbG9jayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVlOwor
ICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYgKHNraXBwaW5n
KCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lkZSBh
bm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQuIEFz
IGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAgICAgICAvLyBC
ZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IG1p
Z2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdl
dERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOworICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRElSRUNUSVZF
X0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAg
ICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKKyAgICAgICAg
ICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEgOiAw
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFz
c2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBibG9j
ay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgICAgIGJsb2NrLmZvdW5kVmFsaWRH
cm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucHVz
aF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9u
SWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2VuaXpl
ciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBh
bmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIEV4cHJl
c3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0aWNz
KTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tl
bik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOworCisg
ICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgorICAg
IGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhw
cmVzc2lvbjsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZkZWYo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJF
Q1RJVkVfSUZERUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9JRk5ERUYpKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQo
dG9rZW4tPnZhbHVlKTsKKyAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5l
bmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNp
ZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFp
c0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gZXhwcmVzc2lvbjsK
K30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2lu
Y2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5o
IgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFz
cyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7
CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6Cisg
ICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAg
ICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisK
KyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFy
c2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlm
ZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOwor
ICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9r
ZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQg
cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRv
a2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0
aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiog
dG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisg
ICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5
cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBC
bG9jazsKKyAgICAgICAgYm9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdy
b3VwOworICAgICAgICBib29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFs
QmxvY2soKSA6CisgICAgICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tp
cEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAg
ICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
fTsKKyAgICBzdGQ6OnZlY3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0aW9uYWxTdGFjazsK
KyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAg
ICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhhbmRsZXIqIG1EaXJl
Y3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZVBhcnNlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxOTQwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAg
Ki8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBh
cnNlcnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIw
MDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlv
bikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIEFz
IGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBj
b250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQg
ZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBs
b25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2lu
ZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFy
c2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1
dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlv
bikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRo
ZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJl
IGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91
dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdh
cyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIu
MiBvZiBCaXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBi
eSBSaWNoYXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNh
bGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVs
b3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9u
IHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAg
IHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBt
YWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBp
bmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhl
eSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICov
CisKKy8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisv
KiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisKKy8q
IFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKwor
LyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogVXNpbmcgbG9jYXRp
b25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vic3RpdHV0ZSB0aGUgdmFy
aWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlwYXJzZSBwcHBhcnNlCisj
ZGVmaW5lIHl5bGV4ICAgcHBsZXgKKyNkZWZpbmUgeXllcnJvciBwcGVycm9yCisjZGVmaW5lIHl5
bHZhbCAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgcHBjaGFyCisjZGVmaW5lIHl5ZGVidWcgcHBk
ZWJ1ZworI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRl
ZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5z
IGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2Vycwor
ICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBU
T0tfQ09OU1RfSU5UID0gMjU4LAorICAgICBUT0tfT1BfT1IgPSAyNTksCisgICAgIFRPS19PUF9B
TkQgPSAyNjAsCisgICAgIFRPS19PUF9ORSA9IDI2MSwKKyAgICAgVE9LX09QX0VRID0gMjYyLAor
ICAgICBUT0tfT1BfR0UgPSAyNjMsCisgICAgIFRPS19PUF9MRSA9IDI2NCwKKyAgICAgVE9LX09Q
X1JJR0hUID0gMjY1LAorICAgICBUT0tfT1BfTEVGVCA9IDI2NiwKKyAgICAgVE9LX1VOQVJZID0g
MjY3CisgICB9OworI2VuZGlmCisvKiBUb2tlbnMuICAqLworI2RlZmluZSBUT0tfQ09OU1RfSU5U
IDI1OAorI2RlZmluZSBUT0tfT1BfT1IgMjU5CisjZGVmaW5lIFRPS19PUF9BTkQgMjYwCisjZGVm
aW5lIFRPS19PUF9ORSAyNjEKKyNkZWZpbmUgVE9LX09QX0VRIDI2MgorI2RlZmluZSBUT0tfT1Bf
R0UgMjYzCisjZGVmaW5lIFRPS19PUF9MRSAyNjQKKyNkZWZpbmUgVE9LX09QX1JJR0hUIDI2NQor
I2RlZmluZSBUT0tfT1BfTEVGVCAyNjYKKyNkZWZpbmUgVE9LX1VOQVJZIDI2NworCisKKworCisv
KiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3Bh
cnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dl
cmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRlZmluZWQoX01TQ19W
RVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNs
dWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUg
PGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgi
CisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChf
TVNDX1ZFUikKK3R5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOworI2RlZmluZSBzdHJ0b2xsIF9zdHJ0
b2k2NAorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50bWF4X3QgWVlTVFlQ
RTsKKyNlbmRpZiAgLy8gX01TQ19WRVIKKyNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKKyNkZWZpbmUg
WVlMVFlQRV9JU19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNkZWZp
bmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAor
eworICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhl
cjsKKyAgICBwcDo6VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5h
bWVzcGFjZQorCisKK3N0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNv
bnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFy
KiByZWFzb24pOworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcK
KyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3Ig
bWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZF
UkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJP
Ul9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLwor
I2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgor
CisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQK
K3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xl
c2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVE
IDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisKKy8qIENvcHkg
dGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvKiBMaW5lIDIx
NiBvZiB5YWNjLmMuICAqLworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlm
CisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50
ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisK
KyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNl
bGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVk
IGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7
CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5
eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91
aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5U
MTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsK
KyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRl
ZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRl
ZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXpl
X3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2Vu
ZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYg
WVlfCisjIGlmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxp
YmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZ
WV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMg
ZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYK
KyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5n
IiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmlu
ZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0
eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdh
cm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRl
ZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgaSkKKyNlbHNlCitzdGF0aWMgaW50CitZ
WUlEIChpKQorICAgIGludCBpOworI2VuZGlmCit7CisgIHJldHVybiBpOworfQorI2VuZGlmCisK
KyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBh
cnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJv
bHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0Vf
QUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19i
dWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMg
ICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9j
YQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxv
Y2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAh
IGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElO
RlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMg
ICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5k
aWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFj
aWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNL
X0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9u
bHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5k
IGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90
IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNl
IGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29t
cGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAg
ZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmlu
ZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisj
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYK
KyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAg
ICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAm
JiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGli
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJ
Ql9ICisjICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZu
ZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5l
ZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJF
RQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVm
aW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
dm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZs
b3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBc
CisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBF
X0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlz
IHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxv
YworeworICB5eXR5cGVfaW50MTYgeXlzczsKKyAgWVlTVFlQRSB5eXZzOworICB9OworCisvKiBU
aGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQg
dGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlv
biB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3Vn
aCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRl
ZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQx
NikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisK
Ky8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBk
ZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBp
ZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8s
IEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50
KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJv
bSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJ
CQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8p
W3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkp
CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9j
YXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5k
IFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMg
aW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAg
IHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9y
IHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNr
KQkJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5
eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUp
OwkJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlz
dGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlw
dHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJ
CVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRl
IG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICAx
NAorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFT
VCAgIDE3NQorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVm
aW5lIFlZTlRPS0VOUyAgMjcKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAg
Ki8KKyNkZWZpbmUgWVlOTlRTICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAq
LworI2RlZmluZSBZWU5SVUxFUyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMu
ICAqLworI2RlZmluZSBZWU5TVEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBC
aXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZ
WVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVmaW5lIFlZVFJBTlNM
QVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5
eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0t
IEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgMjMsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCisgICAgICAy
NSwgICAgMjYsICAgIDE5LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgMTEsICAgICAyLCAgICAxMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA3
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAgICAg
MiwgICAgMjQsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZ
WU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBp
bgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9Cit7
CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwgICAg
MTksICAgIDIzLCAgICAyNywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0Nywg
ICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEsICAgIDc1LCAgICA3
OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1z
ZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDggeXlyaHNbXSA9Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAgLTEs
ICAgICAzLCAgICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAg
IDUsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAg
ICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAgOSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAxMywgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAorICAgICAgLTEs
ICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAtMSwg
ICAgMjksCisgICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDIxLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAgICAgMjksICAgIC0x
LCAgICAyNCwgICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAgMjks
CisgICAgICAtMSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisKKy8qIFlZUkxJTkVb
WVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAq
Lworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAg
IDg5LCAgICA4OSwgICAgOTYsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA2LCAgIDEwOSwgICAx
MTIsCisgICAgIDExNSwgICAxMTgsICAgMTIxLCAgIDEyNCwgICAxMjcsICAgMTMwLCAgIDEzMywg
ICAxMzYsICAgMTM5LCAgIDE0MiwKKyAgICAgMTU1LCAgIDE2OCwgICAxNzEsICAgMTc0LCAgIDE3
NywgICAxODAsICAgMTgzCit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVS
Qk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBu
YW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0
aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29u
c3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVm
aW5lZCIsICJUT0tfQ09OU1RfSU5UIiwgIlRPS19PUF9PUiIsCisgICJUT0tfT1BfQU5EIiwgIid8
JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9ORSIsICJUT0tfT1BfRVEiLCAiJzwnIiwKKyAgIic+
JyIsICJUT0tfT1BfR0UiLCAiVE9LX09QX0xFIiwgIlRPS19PUF9SSUdIVCIsICJUT0tfT1BfTEVG
VCIsICInKyciLAorICAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlRPS19VTkFSWSIsICIn
ISciLCAiJ34nIiwgIicoJyIsICInKSciLAorICAiJGFjY2VwdCIsICJpbnB1dCIsICJleHByZXNz
aW9uIiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW1lZTEVY
LU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KKyAgIHRva2Vu
IFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0K
K3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0LCAg
ICA5NCwgICAgMzgsICAgMjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAgMjY0
LCAgIDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0NywgICAgMzcsICAg
MjY3LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZ
WU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwK
KyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjkKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21w
b3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisg
ICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMworfTsKKwor
LyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGlu
IHN0YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhp
bmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwg
ICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAg
ICAyNSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwK
KyAgICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAgICAx
OCwgICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZWURFRkdPVE9bTlRF
Uk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQorewor
ICAgICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5k
ZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFURS1OVU0uICAq
LworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlw
YWN0W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEsICAgLTExLCAgICAy
NywgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAxMTYs
ICAgMTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAt
MTAsICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMQor
fTsKKworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50
OCB5eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsKKworLyogWVlUQUJM
RVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElm
CisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhl
IHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0
IFlZREVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisj
ZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxl
W10gPQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LAorICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
CisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIK
K307CisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQoreworICAgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
CisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAgMywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCisgICAg
ICAyNCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3LCAg
ICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAgOSwK
KyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisKKy8qIFlZU1RPU1tT
VEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBz
eW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAy
OQorfTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNs
ZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgtMikKKyNkZWZpbmUg
WVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZ
QUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIK
KworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlu
cyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcg
bWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBz
dXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworCisjZGVmaW5lIFlZRkFJTAkJ
Z290byB5eWVycmxhYgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykK
KworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBp
ZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwK
KyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJ
CQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAg
IFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAg
IH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJy
b3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAg
ICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZWUlEICgwKSkKKwor
CisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExP
Q19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgor
ICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGlj
aCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4g
ICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisjaWZuZGVmIFlZTExP
Q19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwK
KyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJCVwKKwkgIChDdXJy
ZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCisJICAo
Q3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOwlc
CisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5l
OwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3Rf
Y29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwK
KwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJXAor
CSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChDdXJyZW50KS5maXJz
dF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZWVJIU0xPQyAoUmhz
LCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkp
CisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24g
b24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5
OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdo
ZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9D
QVRJT05fUFJJTlQKKyMgaWYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJ
T05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVk
IiwJCQlcCisJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCisJ
ICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisjIGVsc2UKKyMgIGRl
ZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyMgZW5kaWYKKyNl
bmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1
bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgm
eXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4g
ICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGluY2x1ZGUgPHN0ZGlv
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWUZQUklO
VEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7
CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlw
ZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAorICBpZiAoeXlkZWJ1
ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJy
LCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJ
CQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9IHdoaWxlIChZWUlE
ICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0
aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0
cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQg
KmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVy
bjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZ
WU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZh
bHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5
eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24g
WVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlf
c3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBG
SUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25z
dCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5
cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5
eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJt
ICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhl
IHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVk
KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Citg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlw
ZV9pbnQxNiAqdG9wKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoYm90dG9t
LCB0b3ApCisgICAgeXl0eXBlX2ludDE2ICpib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp0b3A7
CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7
IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQorICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwg
KmJvdHRvbSk7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlf
U1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVi
dWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8g
YmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUs
IENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAo
eXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXly
dWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5
cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJs
aW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVs
ZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhl
IHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhz
OyB5eWkrKykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkg
KyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxl
XSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAg
ICAgIAkJICAgICAgICwgY29udGV4dCk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwor
ICAgIH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlc
CisgIGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwg
Y29udGV4dCk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50
IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRp
cGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlE
RUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJ
TlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5U
KEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyog
IVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBh
cnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRE
RVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3Rh
Y2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNr
IGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUg
dG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9D
X01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGgg
aW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlN
QVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZ
RVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJD
X18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBl
bHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29u
c3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIp
CisgICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47Cisg
IGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7Cisg
IHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5
CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVk
IF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29w
eSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRp
bmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25z
dCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5
eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYK
K3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKwor
ICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICBy
ZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVy
cgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5n
IGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQn
cyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91Ymxl
LXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFu
IGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3Ns
YXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBp
cworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdo
YXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAor
eXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlz
dHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNv
bnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkg
IHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9x
dW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkg
IGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkg
ICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQor
CSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRv
X25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJu
IHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0g
eXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNz
YWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUg
WVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGlu
ZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90
CisgICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQg
d291bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBv
cmRpbmFyeSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0la
RV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24u
ICAqLworc3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGlu
dCB5eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOwor
CisgIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1
cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0
eXBlXSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1Qg
eXlzaXplMTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZ
RVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFy
Z1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYg
MAorICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9y
bWF0cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygi
c3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVz
IG9yICVzIik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3Qg
Knl5ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGlu
Z1tdID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9
ICIgb3IgJXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAg
ICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJH
U19NQVhJTVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNo
YXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBh
dCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVD
Sy4gICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAg
IC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLwor
ICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVu
ZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAg
ICAgaW50IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsK
KyAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAg
ICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNr
W3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5
Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291
bnQgPSAxOworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVj
dGVkIC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQr
K10gPSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAs
IHl5dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6
ZSk7CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10
LCB5eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0g
WVlfKHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsK
KyAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNp
emUgPSB5eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJ
WkVfTUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmlu
dGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERv
bid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAg
ICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLwor
CSAgY2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5
cCA9ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlm
WzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAo
eXlwLCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7
CisJCSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5
eXNpemU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNl
IHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRl
c3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAs
IENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNn
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAg
IGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4
dDsKKyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4dCk7CisK
KyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklO
VCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0Y2ggKHl5
dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorDAorCisv
KiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworCisjaWZk
ZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cworaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2ludCB5eXBh
cnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChDb250ZXh0ICpj
b250ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2VuZGlmIC8qICEgWVlQ
QVJTRV9QQVJBTSAqLworCisKKworCisKKworLyotLS0tLS0tLS0tLgorfCB5eXBhcnNlLiAgfAor
YC0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJB
TSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAgdm9pZCAqWVlQQVJT
RV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlIChDb250ZXh0ICpj
b250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKyAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8K
K2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBz
eW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3Jz
IHNvIGZhci4gICovCitpbnQgeXluZXJyczsKKworICBpbnQgeXlzdGF0ZTsKKyAgaW50IHl5bjsK
KyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBl
cnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29r
LWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAq
LworICBpbnQgeXl0b2tlbiA9IDA7CisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBm
b3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5
bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNn
X2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyAgLyogVGhyZWUgc3RhY2tzIGFu
ZCB0aGVpciB0b29sczoKKyAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKKyAgICAgYHl5
dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKKyAgICAgYHl5bHMnOiByZWxhdGVkIHRv
IGxvY2F0aW9ucy4KKworICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9p
bnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3
aGVyZS4gICovCisKKyAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgeXl0eXBlX2ludDE2IHl5
c3NhW1lZSU5JVERFUFRIXTsKKyAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7CisgIHl5dHlw
ZV9pbnQxNiAqeXlzc3A7CisKKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAg
WVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKKyAg
WVlTVFlQRSAqeXl2c3A7CisKKworCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0g
KE4pLCB5eXNzcCAtPSAoTikpCisKKyAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBU
SDsKKworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFu
ZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBF
IHl5dmFsOworCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhl
IHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBi
ZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwg
IlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0g
MDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2Vu
IHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAg
IFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0
aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAg
IFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNz
cCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5
c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4g
eW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1
c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tz
LiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisK
KyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyog
R2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50
cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZk
ZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9j
YXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3Mg
ZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBF
ICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKworCS8qIEVh
Y2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQor
CSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0
aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICov
CisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgq
eXl2c3ApLAorCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMg
PSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZ
U1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAg
IC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQ
VEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tz
aXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tz
aXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNz
OworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworCVlZU1RBQ0tf
UkVMT0NBVEUgKHl5dnMpOworCisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3Mx
ICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisj
ZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUg
LSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworCisgICAgICBZWURQUklO
VEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2ln
bmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tz
aXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRl
cnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGdvdG8geXliYWNrdXA7
CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFj
a3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQg
c3RhdGUuICBSZWFkIGEKKyAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQg
ZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3
aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290
byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4g
aWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZ
WUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLworICBpZiAo
eXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVh
ZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYg
KHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7
CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOwor
ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFy
KTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2Vl
aW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJv
ciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwg
MCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5
eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsK
KyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXllcnJs
YWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAg
aWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIENvdW50IHRva2VucyBz
aGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3Rh
dHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyog
U2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlm
dGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNo
aWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0Yp
CisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9
IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0t
IGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQor
ICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUg
bnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5d
OworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1
ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUg
Zm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9y
IGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVw
b24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRo
ZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5n
IHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2
c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXlu
KQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisgICAgeworICAgICAgICAqKGNvbnRleHQtPnJl
c3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFlZ
QUNDRVBUOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgXiAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
PD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAoeXl2
c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisgICAg
eworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEp
IC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIo
KSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8
ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRl
eHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAg
ICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgIH0KKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gISAoeXl2c3BbKDIp
IC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgeworICAg
ICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIpIC0g
KDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCisK
KyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQg
PSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsK
KyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5
dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1
Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9u
IHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJl
ZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290
b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3Rh
dGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUg
PSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4g
LSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3Rpbmcg
ZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxh
YjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQg
dGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5l
cnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8o
InN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlz
eW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlz
aXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZ
WVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFs
bG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9j
ID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJ
ICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFD
S19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9
IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5
bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwg
eXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3lu
dGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4
dCwgeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlf
KCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAo
eXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBp
dC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZh
aWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJ
ICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjog
ZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXlj
aGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2Ug
bG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAq
LworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhw
bGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxl
cnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJP
UiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNl
cgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVy
cm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdo
aWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFD
SyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7
CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJP
Ui4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJl
YWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAg
eworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1Rf
TklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9
IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4g
PSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJ
fQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFu
ZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFC
T1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9z
W3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAg
IHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwor
ICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgKisreXl2
c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9T
WU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisg
IHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVz
IGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFj
Y2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29t
ZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFi
b3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZm5kZWYgeXlv
dmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisK
K3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQor
ICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkgeXl0
b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xz
IG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9y
IFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAo
eXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRl
c3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCBj
b250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxv
dworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlm
CisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNU
QUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAg
Ki8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitpbnQgeXlsZXgoWVlT
VFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUgPSAwOworCisg
ICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRjaCAodG9rZW4t
PnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAg
Kmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7CisgICAgICAg
IHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX09SOiB0eXBlID0gVE9LX09QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9BTkQ6IHR5cGUgPSBUT0tfT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9ORTogdHlwZSA9IFRPS19PUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfRVE6IHR5cGUgPSBUT0tfT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0dFOiB0eXBlID0gVE9LX09QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9MRTogdHlwZSA9IFRPS19PUF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
UklHSFQ6IHR5cGUgPSBUT0tfT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0xFRlQ6IHR5cGUgPSBUT0tfT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlw
ZSA9ICd8JzsgYnJlYWs7CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAg
ICBjYXNlICcmJzogdHlwZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+
JzsgYnJlYWs7CisgICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNl
ICctJzogdHlwZSA9ICctJzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJl
YWs7CisgICAgICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzog
dHlwZSA9ICcvJzsgYnJlYWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7Cisg
ICAgICBjYXNlICchJzogdHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9
ICd+JzsgYnJlYWs7CisgICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBj
YXNlICcpJzogdHlwZSA9ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25l
IGlzIHZhbGlkLgorICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4p
OworCisgICAgcmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJl
c3Npb25QYXJzZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFn
bm9zdGljcykKK3sKK30KKworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9r
ZW4sIGludCogcmVzdWx0KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRp
YWdub3N0aWNzID0gbURpYWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7Cisg
ICAgY29udGV4dC50b2tlbiA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0Owor
ICAgIGludCByZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7
CisgICAgICBjYXNlIDA6CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBj
YXNlIDI6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0Zf
TUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8g
bmFtZXNwYWNlIHBwCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVk
ZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOwor
Y2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sK
KyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVz
dWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHBy
ZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1E
aWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4
cHJlc3Npb25QYXJzZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc2
IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFt
bWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZ
IFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElD
SCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgor
Ki8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVD
X18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4K
KyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgorI2VsaWYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisj
ZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisK
KyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZGVmaW5l
IHN0cnRvbGwgX3N0cnRvaTY0CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBp
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
ICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOworICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQu
Y19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAn
LycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIg
PDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAg
ICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJ
VklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOwor
ICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQk
ID0gISAkMjsKKyAgICB9CisgICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgewor
ICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVE9L
X1VOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9u
ICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gKyAkMjsKKyAgICB9CisgICAgfCAnKCcg
ZXhwcmVzc2lvbiAnKScgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKzsKKworJSUKKworaW50
IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBl
ID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0
Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6
CisgICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDAp
OworICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKKyAgICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOworICAgICAgY2Fz
ZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJy
ZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6
IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwor
ICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUg
PSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAg
Y2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7
IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAn
fic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFr
OworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBj
dXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+
bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAg
eworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2Uo
VG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAg
Y29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0g
bUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9
IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChy
ZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlv
biwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNl
ci55Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0lucHV0LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5wdXQuaCIKIAotI2lu
Y2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogbmFt
ZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQoY291bnQpLAotICAg
ICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAotICAgICAgbUluZGV4
KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5vbmUpLAotICAgICAg
bVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmlu
ZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNoVG9OZXh0U3RyaW5n
KCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5wdXQoaW50IGNvdW50
LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAg
bUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBBU1NFUlQobUluZGV4
IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7CisgICAgYXNzZXJ0KG1D
b3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/
IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3Ry
bGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1dDo6cmVhZChjaGFy
KiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNp
emUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRleCA9IG1JbmRleDsK
LSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIG9yIHRoZSBjdXJy
ZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXggPT0gc3RhcnRJbmRl
eCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3aGlsZSAo
KG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCiAgICAgewot
ICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0gRU9GKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29tbWVudCkKLSAgICAg
ICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRl
eF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhT
aXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21SZWFkTG9jLnNJbmRl
eF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCArPSBzaXplOworICAg
ICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKIAotICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkK
KyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIGN1cnJl
bnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2MuY0luZGV4ID09IG1MZW5ndGhbbVJlYWRM
b2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAgIGNhc2Uga1N0YXRlSW5pdGlhbDoKLSAg
ICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgc3dpdGNoIChwZWVrQ2hh
cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgotICAg
ICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJy8nLgotICAgICAgICAgICAgICAg
ICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAgICAgICAgZ2V0
Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRl
QmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIGNvbW1lbnQuCi0gICAg
ICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlTGluZUNvbW1lbnQ6Ci0gICAg
ICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1
ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlSW5pdGlhbDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBrU3Rh
dGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYgKHBlZWtDaGFyKCkg
PT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAgLy8g
RWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSAnICc7ICAvLyBSZXBsYWNl
IGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0
ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFrcyBhcmUgbmV2ZXIgc2tpcHBlZC4KLSAg
ICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKyttUmVhZExvYy5zSW5kZXg7Cisg
ICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQotCi0gICAg
cmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6OmdldENoYXIoKQotewotICAgIGlmIChlb2Yo
KSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJpbmdbbUluZGV4XTsK
LSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAgIC8vIFN3aXRjaCB0byBuZXh0IHN0cmlu
ZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVhZC4KLSAgICBpbnQgbGVuZ3RoID0gc3Ry
aW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIgcmVhZCBmcm9tIGVtcHR5IHN0cmlu
Zy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgIGlmICgoKGxlbmd0aCA8IDApICYmIChz
dHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAoKGxlbmd0aCA+IDApICYmIChtU2l6ZSA9
PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
YzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17Ci0gICAgLy8gU2F2ZSB0aGUgY3VycmVu
dCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9IG1JbmRleDsKLSAgICBpbnQgc2l6ZSA9
IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwotCi0gICAgLy8gUmVzdG9yZSByZWFkIHBv
c2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAgIG1TaXplID0gc2l6ZTsKLSAgICByZXR1
cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0U3RyaW5nKCkKLXsKLSAgICBBU1NF
UlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXplID0gMDsKLSAgICBkbwotICAgIHsKLSAg
ICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigpICYmIGlzU3RyaW5nRW1wdHkobUlu
ZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1wdHkoaW50IGluZGV4KQotewotICAg
IEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHIgPSBtU3RyaW5n
W21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5kZXgpOwotICAgIHJl
dHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwgMCkgJiYgKHN0clswXSA9PSAnXDAnKSk7
Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQo
aW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVuZ3RoID8gbUxlbmd0aFtpbmRleF0gOiAt
MTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvSW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDY2ICs3LDQwIEBACiAjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRf
SF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7CiAKLS8vIFJlYWRzIHRo
ZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4KLS8vIFN0cmlwcyBjb21t
ZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCiBjbGFzcyBJbnB1dAog
ewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0gICAgZW51bSBFcnJv
cgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vycm9yVW5leHBlY3RlZEVP
RgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtRXJyb3I7IH0KKyAg
ICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBjb25zdCBjaGFyKiBz
dHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQorICAgIGlu
dCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQogCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBiZWluZyBzY2FubmVk
LgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRleDsgfQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBlb2YoKSBjb25zdDsK
LQotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBpbnRvIGJ1Zi4KLSAgICAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotICAgIC8vIEl0IHJlcGxh
Y2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRzIG9ubHkgb25lIHN0cmlu
ZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMgb3Bwb3J0dW5pdHkgdG8g
dXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5pbmdmdWwgZGlhZ25vc3Rp
YyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKTsKKyAgICBp
bnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0ZToKLSAgICBlbnVtIFN0
YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBrU3RhdGVJbml0aWFsLAot
ICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRlQmxvY2tDb21tZW50Ci0g
ICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50
IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hhcigpOwotICAgIGludCBw
ZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0byB0aGUgbmV4dCBub24t
ZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgc3Ry
aW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRTdHJpbmcoKTsKLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0eS4KLSAgICBib29sIGlz
U3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUg
Z2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBmb3IgbnVsbC10
ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChpbnQgaW5kZXgpOworICAg
ICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9CisgICAgfTsKKyAgICBj
b25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1SZWFkTG9jOyB9CiAKKyAg
cHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50OwogICAgIGNvbnN0IGNoYXIq
IGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsKKyAgICBzdGQ6OnZlY3Rv
cjxpbnQ+IG1MZW5ndGg7CiAKLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gICAgaW50
IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5nIHNjYW5uZWQuCi0g
ICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNjYW5uZWQuCi0KLSAg
ICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBtRXJyb3I7Ci0gICAgU3Rh
dGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRh
YnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0xleGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5M
ZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4
ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgoreworICBw
dWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9r
ZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm8uY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYsMzkgKzYsMTcgQEAKIAogI2luY2x1ZGUgIk1hY3JvLmgiCiAKLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgogCiBuYW1lc3BhY2UgcHAKIHsKIAotTWFjcm86Ok1hY3JvKFR5cGUgdHlwZSwKLSAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcGFyYW1l
dGVycywKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRzKQotICAgIDogbVR5
cGUodHlwZSksCi0gICAgICBtTmFtZShuYW1lKSwKLSAgICAgIG1QYXJhbWV0ZXJzKHBhcmFtZXRl
cnMpLAotICAgICAgbVJlcGxhY2VtZW50cyhyZXBsYWNlbWVudHMpCitib29sIE1hY3JvOjplcXVh
bHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotfQotCi1NYWNybzo6fk1hY3JvKCkKLXsK
LSAgICBkZWxldGUgbU5hbWU7Ci0KLSAgICBpZiAobVBhcmFtZXRlcnMpCi0gICAgewotICAgICAg
ICBzdGQ6OmZvcl9lYWNoKG1QYXJhbWV0ZXJzLT5iZWdpbigpLCBtUGFyYW1ldGVycy0+ZW5kKCks
IERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1QYXJhbWV0ZXJzOwotICAgIH0KLQotICAgIGlm
IChtUmVwbGFjZW1lbnRzKQotICAgIHsKLSAgICAgICAgc3RkOjpmb3JfZWFjaChtUmVwbGFjZW1l
bnRzLT5iZWdpbigpLCBtUmVwbGFjZW1lbnRzLT5lbmQoKSwgRGVsZXRlKCkpOwotICAgICAgICBk
ZWxldGUgbVJlcGxhY2VtZW50czsKLSAgICB9CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5
cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90aGVyLm5hbWUpICYmCisgICAgICAgICAgIChw
YXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMpICYmCisgICAgICAgICAgIChyZXBsYWNlbWVu
dHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyby5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICAr
IHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgJKHJldmlzaW9uIDEyMjczOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtNyw0NSArNywzOCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCiAKKyNp
bmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQogbmFtZXNw
YWNlIHBwCiB7CiAKLWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9rZW47CisKK3N0cnVjdCBNYWNybwog
ewotICBwdWJsaWM6CiAgICAgZW51bSBUeXBlCiAgICAgewogICAgICAgICBrVHlwZU9iaiwKICAg
ICAgICAga1R5cGVGdW5jCiAgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFJlcGxhY2Vt
ZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlzYWJsZWQoZmFsc2Up
LCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIp
IGNvbnN0OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIgcGFyYW1ldGVycy4K
LSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAg
ICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHJl
cGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5WZWN0b3IqIHJlcGxh
Y2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBUeXBlIG1UeXBlOwot
ICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBhcmFtZXRlcnM7Ci0g
ICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBwcmVkZWZpbmVkOworICAg
IG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVw
bGFjZW1lbnRzOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybz4g
TWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfTUFDUk9fSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJN
YWNyb0V4cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fzc2Vy
dD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgVG9rZW5MZXhlciA6IHB1
YmxpYyBMZXhlcgoreworIHB1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBU
b2tlblZlY3RvcjsKKworICAgIFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRva2VucykKKyAgICB7
CisgICAgICAgIHRva2Vucy0+c3dhcChtVG9rZW5zKTsKKyAgICAgICAgbUl0ZXIgPSBtVG9rZW5z
LmJlZ2luKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCisg
ICAgeworICAgICAgICBpZiAobUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgdG9rZW4tPnJlc2V0KCk7CisgICAgICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2Vu
OjpMQVNUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
KnRva2VuID0gKm1JdGVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyBwcml2YXRlOgorICAgIFBQ
X0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbkxleGVyKTsKKworICAgIFRva2VuVmVjdG9y
IG1Ub2tlbnM7CisgICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1JdGVyOworfTsKKwor
TWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwK
KyAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
K3sKK30KKworTWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIoKQoreworICAgIHdoaWxlICgh
bUNvbnRleHRTdGFjay5lbXB0eSgpKSBwb3BNYWNybygpOworfQorCit2b2lkIE1hY3JvRXhwYW5k
ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAg
ICBnZXRUb2tlbih0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHRva2VuLT5leHBh
bnNpb25EaXNhYmxlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAg
ICAgICAgaWYgKGl0ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNvbnN0IE1hY3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaWYg
KG1hY3JvLmRpc2FibGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3Vs
YXIgdG9rZW4gaXMgbm90IGV4cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRlZC4KKyAgICAgICAg
ICAgIHRva2VuLT5zZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5j
KSAmJiAhaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
SWYgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICco
JywKKyAgICAgICAgICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAq
dG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiog
dG9rZW4pCit7CisgICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0KCkpCisgICAgeworICAgICAgICAq
dG9rZW4gPSAqbVJlc2VydmVUb2tlbjsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNy
byBjb250ZXh0cy4KKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4
dFN0YWNrLmJhY2soKS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHBvcE1hY3JvKCk7CisgICAg
fQorCisgICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICAqdG9r
ZW4gPSBtQ29udGV4dFN0YWNrLmJhY2soKS0+Z2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBh
bmRlcjo6dW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKCFtQ29udGV4
dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBt
Q29udGV4dFN0YWNrLmJhY2soKTsKKyAgICAgICAgY29udGV4dC0+dW5nZXQoKTsKKyAgICAgICAg
YXNzZXJ0KGNvbnRleHQtPmluZGV4ID49IDApOworICAgICAgICBhc3NlcnQoY29udGV4dC0+cmVw
bGFjZW1lbnRzW2NvbnRleHQtPmluZGV4XSA9PSB0b2tlbik7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGFzc2VydCghbVJlc2VydmVUb2tlbi5nZXQoKSk7CisgICAgICAgIG1SZXNl
cnZlVG9rZW4ucmVzZXQobmV3IFRva2VuKHRva2VuKSk7CisgICAgfQorfQorCitib29sIE1hY3Jv
RXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKCkKK3sKKyAgICBUb2tlbiB0b2tlbjsKKyAg
ICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgYm9vbCBscGFyZW4gPSB0b2tlbi50eXBlID09ICco
JzsKKyAgICB1bmdldFRva2VuKHRva2VuKTsKKworICAgIHJldHVybiBscGFyZW47Cit9CisKK2Jv
b2wgTWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9r
ZW4mIGlkZW50aWZpZXIpCit7CisgICAgYXNzZXJ0KCFtYWNyby5kaXNhYmxlZCk7CisgICAgYXNz
ZXJ0KCFpZGVudGlmaWVyLmV4cGFuc2lvbkRpc2FibGVkKCkpOworICAgIGFzc2VydChpZGVudGlm
aWVyLnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgIGFzc2VydChpZGVudGlmaWVyLnZh
bHVlID09IG1hY3JvLm5hbWUpOworCisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50
czsKKyAgICBpZiAoIWV4cGFuZE1hY3JvKG1hY3JvLCBpZGVudGlmaWVyLCAmcmVwbGFjZW1lbnRz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTWFjcm8gaXMgZGlzYWJsZWQgZm9y
IGV4cGFuc2lvbiB1bnRpbCBpdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjay4KKyAgICBtYWNyby5k
aXNhYmxlZCA9IHRydWU7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBuZXcgTWFjcm9D
b250ZXh0OworICAgIGNvbnRleHQtPm1hY3JvID0gJm1hY3JvOworICAgIGNvbnRleHQtPnJlcGxh
Y2VtZW50cy5zd2FwKHJlcGxhY2VtZW50cyk7CisgICAgbUNvbnRleHRTdGFjay5wdXNoX2JhY2so
Y29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6cG9w
TWFjcm8oKQoreworICAgIGFzc2VydCghbUNvbnRleHRTdGFjay5lbXB0eSgpKTsKKworICAgIE1h
Y3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOworICAgIG1Db250ZXh0
U3RhY2sucG9wX2JhY2soKTsKKworICAgIGFzc2VydChjb250ZXh0LT5lbXB0eSgpKTsKKyAgICBh
c3NlcnQoY29udGV4dC0+bWFjcm8tPmRpc2FibGVkKTsKKyAgICBjb250ZXh0LT5tYWNyby0+ZGlz
YWJsZWQgPSBmYWxzZTsKKyAgICBkZWxldGUgY29udGV4dDsKK30KKworYm9vbCBNYWNyb0V4cGFu
ZGVyOjpleHBhbmRNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICBy
ZXBsYWNlbWVudHMtPmNsZWFyKCk7CisgICAgaWYgKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBl
T2JqKQorICAgIHsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hc3NpZ24obWFjcm8ucmVwbGFjZW1l
bnRzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5lbmQoKSk7CisKKyAgICAgICAgaWYgKG1hY3JvLnByZWRlZmluZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrTGluZSA9ICJfX0xJTkVfXyI7
CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0ZpbGUgPSAiX19GSUxFX18i
OworCisgICAgICAgICAgICBhc3NlcnQocmVwbGFjZW1lbnRzLT5zaXplKCkgPT0gMSk7CisgICAg
ICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+ZnJvbnQoKTsKKyAgICAgICAgICAg
IGlmIChtYWNyby5uYW1lID09IGtMaW5lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRl
bnRpZmllci5sb2NhdGlvbi5saW5lOworICAgICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJl
YW0uc3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtYWNyby5uYW1l
ID09IGtGaWxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlv
bi5maWxlOworICAgICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJlYW0uc3RyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0KG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7CisgICAgICAgIHN0ZDo6dmVjdG9y
PE1hY3JvQXJnPiBhcmdzOworICAgICAgICBhcmdzLnJlc2VydmUobWFjcm8ucGFyYW1ldGVycy5z
aXplKCkpOworICAgICAgICBpZiAoIWNvbGxlY3RNYWNyb0FyZ3MobWFjcm8sIGlkZW50aWZpZXIs
ICZhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXBsYWNlTWFj
cm9QYXJhbXMobWFjcm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAg
ICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBpZiAoaSA9PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHJlcGxh
Y2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8vIHByb3BlcnRp
ZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNldEF0U3RhcnRP
ZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAgcmVwbC5zZXRI
YXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNyb0FyZ3Mo
Y29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tlbiB0b2tlbjsK
KyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09ICcoJyk7CisK
KyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQgb3BlblBhcmVu
cyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4oJnRva2Vu
KTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1VOVEVS
TUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7CisgICAgICAgICAgICAvLyBEbyBu
b3QgbG9zZSBFT0YgdG9rZW4uCisgICAgICAgICAgICB1bmdldFRva2VuKHRva2VuKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNBcmcgPSBm
YWxzZTsgLy8gVHJ1ZSBpZiB0b2tlbiBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFyZ3VtZW50Lgor
ICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICco
JzoKKyAgICAgICAgICAgICsrb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICAgLS1v
cGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDA7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgIC8vIFRoZSBpbmRp
dmlkdWFsIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hIHRva2VucywgYnV0CisgICAg
ICAgICAgICAvLyB0aGUgY29tbWEgdG9rZW5zIGJldHdlZW4gbWF0Y2hpbmcgaW5uZXIgcGFyZW50
aGVzZXMgZG8gbm90CisgICAgICAgICAgICAvLyBzZXBlcmF0ZSBhcmd1bWVudHMuCisgICAgICAg
ICAgICBpZiAob3BlblBhcmVucyA9PSAxKSBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7Cisg
ICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNBcmcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5iYWNrKCk7CisgICAgICAgICAgICAvLyBJbml0
aWFsIHdoaXRlc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICAgICAg
aWYgKGFyZy5lbXB0eSgpKSB0b2tlbi5zZXRIYXNMZWFkaW5nU3BhY2UoZmFsc2UpOworICAgICAg
ICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25z
dCBNYWNybzo6UGFyYW1ldGVycyYgcGFyYW1zID0gbWFjcm8ucGFyYW1ldGVyczsKKyAgICAvLyBJ
ZiB0aGVyZSBpcyBvbmx5IG9uZSBlbXB0eSBhcmd1bWVudCwgaXQgaXMgZXF1aXZhbGVudCB0byBu
byBhcmd1bWVudC4KKyAgICBpZiAocGFyYW1zLmVtcHR5KCkgJiYgKGFyZ3MtPnNpemUoKSA9PSAx
KSAmJiBhcmdzLT5mcm9udCgpLmVtcHR5KCkpCisgICAgeworICAgICAgICBhcmdzLT5jbGVhcigp
OworICAgIH0KKyAgICAvLyBWYWxpZGF0ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBp
ZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCisgICAgeworICAgICAgICBEaWFnbm9z
dGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSA/Cisg
ICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKKyAgICAgICAgICAg
IERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChpZCwgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQcmUtZXhwYW5kIGVhY2ggYXJndW1l
bnQgYmVmb3JlIHN1YnN0aXR1dGlvbi4KKyAgICAvLyBUaGlzIHN0ZXAgZXhwYW5kcyBlYWNoIGFy
Z3VtZW50IGluZGl2aWR1YWxseSBiZWZvcmUgdGhleSBhcmUKKyAgICAvLyBpbnNlcnRlZCBpbnRv
IHRoZSBtYWNybyBib2R5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy0+c2l6ZSgp
OyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YXQoaSk7CisgICAg
ICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhwYW5kZXIgZXhwYW5k
ZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAgICAgYXJnLmNsZWFy
KCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3aGlsZSAodG9rZW4u
dHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJnLnB1c2hfYmFj
ayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpyZXBsYWNl
TWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBs
YWNlbWVudHMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNyby5yZXBsYWNlbWVu
dHMuc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUb2tlbiYgcmVwbCA9IG1hY3Jv
LnJlcGxhY2VtZW50c1tpXTsKKyAgICAgICAgaWYgKHJlcGwudHlwZSAhPSBUb2tlbjo6SURFTlRJ
RklFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVw
bCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8o
YWxva3ApOiBPcHRpbWl6ZSB0aGlzLgorICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHNl
YXJjaCBmb3IgbWFjcm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCisgICAgICAgIC8vIFRoZSBwYXJhbSBp
bmRleCBjYW4gYmUgY2FjaGVkIHdpdGggdGhlIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICBN
YWNybzo6UGFyYW1ldGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0ZDo6ZmluZCgKKyAgICAg
ICAgICAgIG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFjcm8ucGFyYW1ldGVycy5lbmQoKSwg
cmVwbC52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaUFyZyA9
IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBpdGVyKTsKKyAgICAgICAg
Y29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107CisgICAgICAgIGlmIChhcmcuZW1wdHko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
c2l6ZV90IGlSZXBsID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7CisgICAgICAgIHJlcGxhY2VtZW50
cy0+aW5zZXJ0KHJlcGxhY2VtZW50cy0+ZW5kKCksIGFyZy5iZWdpbigpLCBhcmcuZW5kKCkpOwor
ICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5oZXJpdHMgcGFkZGluZyBwcm9wZXJ0
aWVzIGZyb20KKyAgICAgICAgLy8gbWFjcm8gcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIHJl
cGxhY2VtZW50cy0+YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdTcGFjZShyZXBsLmhhc0xlYWRpbmdT
cGFjZSgpKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsg
dHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBB
TkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8K
KworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJMZXhl
ci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNw
YWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNyb0V4cGFuZGVyIDog
cHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhl
ciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIHZp
cnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNy
b0V4cGFuZGVyKTsKKworICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lk
IHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlzTmV4dFRva2VuTGVm
dFBhcmVuKCk7CisKKyAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0
IFRva2VuJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisKKyAgICBib29sIGV4
cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9r
ZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFj
cm9Bcmc7CisgICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7CisgICAgdm9p
ZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisK
KyAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0CisgICAgeworICAgICAgICBjb25zdCBNYWNybyogbWFj
cm87CisgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJl
cGxhY2VtZW50czsKKworICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgw
KSB7IH0KKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxh
Y2VtZW50cy5zaXplKCk7IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJl
cGxhY2VtZW50c1tpbmRleCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9
CisgICAgfTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsK
KyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tl
bj4gbVJlc2VydmVUb2tlbjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4
dFN0YWNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDEyMjcz
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1ByZXByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNDcgKzYsMTA4IEBACiAK
ICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjb21waWxlci9k
ZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNp
bmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorI2lu
Y2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBwcAogewogCi1QcmVw
cm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVMTCkKK3N0cnVjdCBQcmVwcm9j
ZXNzb3JJbXBsCiB7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0
IG1hY3JvU2V0OworICAgIFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2Vy
IGRpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAg
ICBQcmVwcm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAg
ICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9z
dGljcyhkaWFnKSwKKyAgICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQ
YXJzZXIoJnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAg
ICAgICAgbWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisg
ICAgeworICAgIH0KK307CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRs
ZXIqIGRpcmVjdGl2ZUhhbmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1w
bChkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7CiB9CiAKIFByZXByb2Nlc3Nvcjo6flBy
ZXByb2Nlc3NvcigpCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OworICAgIGRlbGV0ZSBtSW1wbDsK
IH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1Db250ZXh0ID0gbmV3IENv
bnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Citib29sIFByZXByb2Nlc3Nvcjo6
aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFk
ZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElO
RV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVm
aW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNy
bygiR0xfRVMiLCAxKTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQs
IHN0cmluZywgbGVuZ3RoKTsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OnByb2Nlc3MoaW50IGNv
dW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCit2b2lk
IFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVl
KQogewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5VTEwpKTsKLSAgICBp
ZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CiAK
LSAgICByZXNldCgpOworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6
Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOworCisgICAgTWFjcm8g
bWFjcm87CisgICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1h
Y3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNl
bWVudHMucHVzaF9iYWNrKHRva2VuKTsKIAotICAgIHJldHVybiBtQ29udGV4dC0+cHJvY2Vzcyhj
b3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAgICBtSW1wbC0+bWFjcm9TZXRbbmFt
ZV0gPSBtYWNybzsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkKK3ZvaWQgUHJlcHJv
Y2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2VhY2gobVRva2Vucy5i
ZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vucy5jbGVhcigpOwor
ICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAg
ICB7CisgICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90
IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAv
LyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBv
cnQKKyAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9I
QVNIOgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgVG9rZW46OlBQX05VTUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX09USEVSOgorICAg
ICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
Q0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAg
ICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNywzNCAr
Nyw0MSBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCiAj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KIAotI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJwcF91
dGlscy5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgQ29udGV4dDsKK2NsYXNzIERpYWdu
b3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBs
Oworc3RydWN0IFRva2VuOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IKIHsKICAgcHVibGljOgotICAg
IFByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogICAgIH5QcmVwcm9jZXNz
b3IoKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51
bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8v
IHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAg
Ly8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8g
SWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJt
aW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQg
cG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9y
IGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVh
Y2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2Yg
dGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0
byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisg
ICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgorICAgIHZv
aWQgcHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKIAotICAgIGJv
b2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBp
bnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
VG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCiAgIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CisgICAgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKLSAgICAvLyBSZXNldCB0
byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBDb250ZXh0KiBt
Q29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0cHV0LgorICAgIFByZXBy
b2Nlc3NvckltcGwqIG1JbXBsOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsg
dHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0Vf
TE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElP
Tl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAg
U291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRp
b24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQor
CisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMp
Cit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhz
KQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
cHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxv
dy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw1MCArNiw1NiBA
QAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5cGUuaCIKLQotc3Rh
dGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4gYml0cy4KLXN0YXRp
YyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRpb25MaW5lU2l6ZSkg
LSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRva2VuOjplbmNvZGVM
b2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNldCgpCiB7Ci0gICAg
cmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYga0xvY2F0aW9uTGlu
ZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBsb2NhdGlvbiA9IFNv
dXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9pZCBUb2tlbjo6ZGVj
b2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmlsZSkKK2Jvb2wgVG9r
ZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbGUpICpm
aWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5lKSAqbGluZSA9IGxv
YyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAm
JgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAgICAgICAgIChsb2Nh
dGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVlID09IG90aGVyLnZh
bHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBpbnQgdHlwZSwgc3Rk
OjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwKLSAgICAgIG1UeXBl
KHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGlu
ZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RB
UlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5F
OwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7Cit2b2lkIFRva2Vu
OjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAoc3BhY2UpCisgICAg
ICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3Mg
Jj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRFeHBhbnNpb25EaXNh
YmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAgICAgIGZsYWdzIHw9
IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5FWFBBTlNJ
T05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0m
IG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKQot
ICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBGTE9BVF9DT05TVEFO
VDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoodG9rZW4udmFsdWUo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3V0IDw8IHN0YXRp
Y19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBp
ZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBv
dXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8vIG5hbWVzcGFjZSBw
cAogCit9ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW4uaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAt
Nyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KICNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNsdWRlIDxvc3RyZWFt
PgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFj
ZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1YmxpYzoKLSAgICB0
eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5jb2RlTG9jYXRpb24o
aW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVMb2NhdGlvbihMb2Nh
dGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKLQotICAgIC8vIFRha2VzIG93bmVyc2hp
cCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGludCB0eXBlLCBzdGQ6
OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOwotCi0gICAgTG9jYXRpb24gbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbVZhbHVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VG9rZW4pOwotCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBtVHlwZTsKLSAgICBz
dGQ6OnN0cmluZyogbVZhbHVlOworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAgTEFTVCA9
IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJRklFUiA9IDI1OCwKKworICAgICAgICBDT05T
VF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAorCisgICAgICAgIE9QX0lOQywKKyAgICAgICAg
T1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1Bf
TEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAg
ICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAgT1Bf
QUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lH
TiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAg
ICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1Bf
QU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdO
LAorCisgICAgICAgIC8vIFByZXByb2Nlc3NpbmcgdG9rZW4gdHlwZXMuCisgICAgICAgIC8vIFRo
ZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgaW50ZXJuYWxseS4KKyAgICAg
ICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVzdCBub3QgZGVwZW5kIG9yIGNoZWNrIGZvciB0
aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAgICBQUF9OVU1CRVIsCisgICAgICAgIFBQX09U
SEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAgeworICAgICAgICBBVF9TVEFSVF9PRl9M
SU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFICA9IDEgPDwgMSwKKyAg
ICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8PCAyCisgICAgfTsKKworICAgIFRva2VuKCkg
OiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVx
dWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBh
bnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsg
cmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0
U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9p
ZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBib29sIGV4cGFuc2lvbkRp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgRVhQQU5TSU9OX0RJU0FCTEVEKSAhPSAw
OyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpOworCisgICAg
aW50IHR5cGU7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgIFNvdXJjZUxvY2F0aW9uIGxv
Y2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxo
cywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiBy
aHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4dGVybiBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbik7
CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
VE9LRU5fSF8KLQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBh
bGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjM0NCBAQAorI2xpbmUgMTYgIi4vcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisK
Ky8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxF
WF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZM
RVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQor
I2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5k
aWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGls
ZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICov
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJu
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAq
LworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJ
TlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMu
aD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9f
U1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkg
c2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGlu
dC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0
eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENf
TElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYg
aW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVk
ZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7
Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3Vp
bnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVm
IHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90Owor
I2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNp
Zm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNl
bmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAo
LTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAg
ICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNk
ZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2
X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lm
bmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0
NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAg
ICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9N
QVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVm
aW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRp
ZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25z
dCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NP
TlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1RE
Q19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2Rl
ZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2Vu
ZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5
eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJu
ZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVz
IGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVk
CisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNo
YXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1i
aXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmlu
ZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8q
IEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAor
I2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsK
KyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29u
IHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIu
ICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9y
CisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXls
ZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAo
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhf
ZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24u
ICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdl
IGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1s
ZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlf
c3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBp
bnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1
cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0
aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIp
CisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1
bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRl
KSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVh
bmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJ
TEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZF
Ul9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYg
WVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUg
c3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFy
YWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpF
ICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVm
IFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVS
X1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsK
KyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2RlZmlu
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEK
KyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19MSU5F
Tk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFy
YWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwK
KwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICov
IFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVT
U19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9wID0g
eXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9E
T19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hp
bGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIg
LCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZp
bmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsK
KwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVm
ZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQg
YnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1
ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9i
dWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYs
IG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlf
bl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtu
b3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBh
bmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNf
b3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0
IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwg
dGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1h
a2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgor
CSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lk
ZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1
bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3Qu
CisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhl
IGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNv
dW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZl
ciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9i
dWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVX
IDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNl
ZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1h
cmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAq
IHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBX
ZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3Vn
aCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdl
IGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAq
ICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2Fubmlu
ZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLwor
I2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RS
VUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNz
aW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1
dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUi
LgorICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNk
ZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2Ft
ZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVm
ZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBw
cHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBw
cF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmls
ZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBw
cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxF
ICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIg
cHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZF
Ul9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3Qg
Y2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwordm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVm
aW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRl
cmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApeyBcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisK
KyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXtcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVf
YnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9B
VF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2lu
IHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZ
V1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlf
c3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9z
dGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Citz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJl
bnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3Ig
KHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0
ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisg
KiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZ
X0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5n
ID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlf
Y3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNk
ZWZpbmUgWVlfTlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRo
aXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2Vu
Y2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQz
Ml90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAg
ICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAg
IDksCisgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMs
ICAgIDUsICAgIDUsCisgICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAg
MzAsICAgMjUsICAgMTIsICAgMjMsCisgICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEs
ICAgMjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAg
MTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIs
ICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAg
MTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAs
CisgICAgICAgMTAsICAgMTAsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAy
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAg
ICAxLCAgICA5LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE3LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAx
LCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAor
ICAgICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIx
LCAgIDIxLAorCisgICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYs
ICAgIDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0
YVsyN10gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAx
LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAg
MjYsICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIs
ICAgMjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAg
NDYsICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQs
CisgICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAx
NTksICAxNTksCisgICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMs
ICAgMzIsICAgNTYsICAgODMsCisgICAgICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAx
NTksICAxNTksICAgMTksICAgIDAsICAxNTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAs
ICAxNTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAg
NTIsICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAs
ICAxMjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAg
IDgzLCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgz
LCAgIDg2LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAg
IDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgz
LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAor
ICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5
LCAgIDcyLAorICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9
CisgICAgeyAgIDAsCisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAg
MTIsICAgMTMsICAgMTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAs
ICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAg
MjUsICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzks
ICAgNTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAg
NjEsICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYs
CisgICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAg
NTAsICAgNTIsCisgICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEs
ICAgODEsICAgODEsICAgNTAsCisgICAgICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAg
NjgsICAgNjgsICAgNjgsICAgNjYsICAgNTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcs
ICAgNjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAg
NTAsICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4
MywgICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwK
KyAgICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1
NiwgICA2NywKKyAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwg
ICA3OCwgICA3OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4
MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwg
ICAyOCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3
MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAz
LCAgICAzLCAgICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAg
ICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3
LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAg
IDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIx
LCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAor
ICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMx
LCAgIDQ5LAorICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAg
IDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3
LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUs
ICAgNTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAg
NjcsICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjks
ICAgNjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisg
ICAgICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIs
ICAgODIsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAg
IDksICAgODYsICAgODYsCisgICAgICAgODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgs
ICAgODgsICAgIDUsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25v
dF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVk
CisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNF
VAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNw
ZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0
IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1p
Y3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkg
VEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisK
KyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCisjaW5j
bHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkg
dGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjZW5kaWYKKwordHlwZWRl
ZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQ
RTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAo
c3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisKKyNkZWZpbmUgWVlf
VVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlleHRy
YS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0g
dHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5w
dXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0OjpMb2NhdGlv
biogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAorICAgICAgICB3aGls
ZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2Nhbkxv
Yy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4
IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisgICAgICAgICAgICAr
K3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGlu
ZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2Nhbkxv
Yy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUp
IFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyNk
ZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQorCisjZGVmaW5lIFlZX0VYVFJBX1RZ
UEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBv
ZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QKKyAgICB7CisKKyAg
ICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisgICAgWVlfRVhUUkFf
VFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGds
b2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KKyAgICBGSUxF
ICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8
IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21h
eDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9i
dWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAgY2hhciB5eV9ob2xk
X2NoYXI7CisgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlfc2l6ZV90IHl5bGVuZ19y
OworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7CisgICAgaW50IHl5X3N0
YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7CisgICAgaW50IHl5X3N0
YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7CisgICAgaW50ICp5
eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBpbnQgeXlsaW5lbm9f
cjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0ZXh0X3I7CisgICAg
aW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAgICBZWVNUWVBFICog
eXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9OyAvKiBlbmQgc3Ry
dWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBh
bmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0
aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgorICAgIAorICAg
ICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQgcHBsZXhfaW5pdCAo
eXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQ
RSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2Rz
IHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQg
c2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgcHBsZXhfZGVzdHJveSAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2
b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJ
TEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfb3V0ICAo
RklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5eV9zaXplX3QgcHBnZXRf
bGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
Kwordm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9p
ZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
ICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2Fu
IGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4K
KyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQorZXh0ZXJuIGlu
dCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRl
ZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0
IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZX05F
RURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlz
Y2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgor
CisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFk
LiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUg
ODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRv
IHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBi
ZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAor
ICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0
LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMg
aXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisg
KiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmlu
ZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwK
KwkJeXlfc2l6ZV90IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkg
ICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQli
dWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0g
KGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZ
X0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1
bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAo
IChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5
aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZ
X0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJy
ZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJ
fSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsg
Y29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0
IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBj
YXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3Rh
dGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgp
IHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2gg
c3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19J
TkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQg
YSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFU
QUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQorI2VuZGlmCisK
Ky8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICov
CisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmlu
ZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRl
ZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgcHBsZXgg
XAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxv
Y19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNMIGludCBwcGxl
eCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLwor
CisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5
eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9V
U0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhl
Y3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVm
aW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJ
WVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9l
cyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdp
c3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLworCisgICAgeXlsdmFs
ID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworCisJaWYgKCAh
eXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNF
Ul9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0
ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlm
ICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlv
dXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJ
CX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUg
KCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJ
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBw
b3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1
bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlf
YyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3Vy
cmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9j
cDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0
YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJ
CQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAo
IHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlvbjoJLyogVGhpcyBs
YWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJCXN3aXRjaCAo
IHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLworCQkJY2FzZSAw
OiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVG
T1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKworY2Fz
ZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNvbW1lbnQgKi8KKy8q
IExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisvKiBUaGUg
Y29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitjYXNlIDI6CitZWV9S
VUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JV
TEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVB
SworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sg
Kyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKwlZ
WV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMgaXMgb25seSB2YWxp
ZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICB5eWx2
YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQg
PyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOworfQorCVlZX0JSRUFL
CitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQorCVlZX0JSRUFLCitj
YXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKwlZWV9CUkVBSwor
LyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBi
ZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5k
IGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05VTUJFUjsKK30K
KwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorCVlZ
X0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorCVlZX0JSRUFLCitj
YXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9CUkVBSworY2FzZSAx
NzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
RERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMwOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMx
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNl
IDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBd
KTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVM
RV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAn
XG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgorY2FzZSBZWV9TVEFU
RV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQg
Zm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4g
bWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBw
cDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50
IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNj
YW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25s
eSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAv
LyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7
IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxp
bmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxv
Yy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9T
VEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAg
eXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVfU0VUVVAKK0VD
SE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBBbW91
bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlpbnQg
eXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0
cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4g
Ki8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1
cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZp
bGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBl
bmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNv
dXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBh
c3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91
cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNh
dXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkg
YQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJj
ZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxl
ID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBm
b3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUgZmlyc3QgRU9C
IGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChzaW5jZSBhbGwg
c3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQtb2YtYnVmZmVy
IHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBpbnB1dCgpLgor
CQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkg
YSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisK
KwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciAp
OworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJ
CSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNf
c3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNu
J3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWlu
ZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNh
dXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAqLworCisJCQl5
eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nh
bm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJ
CWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8K
KwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJ
eworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJCWdvdG8geXlfZmlu
ZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVm
ZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJ
CQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKworCQkJCWlm
ICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdl
J3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBz
ZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkgKiB5eV9jX2J1
Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2Vs
Zikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhl
CisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJCQkJCSAqIFlZ
X05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3QgPSBZWV9TVEFU
RV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQorCisJCQkJZWxz
ZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
CisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2Fz
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkJeXln
LT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRD
SDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0Ogor
CQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3It
LW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCisJCX0g
LyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQgb2YgcHBsZXggKi8KKwor
LyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCisgKgor
ICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFT
VF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBm
cm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmls
ZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRfcHRyOworCXJl
Z2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKworCWlmICggeXln
LT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRhbCBmbGV4IHNjYW5u
ZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOworCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQorCQl7IC8qIERvbid0
IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLworCQlpZiAoIHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQorCQkJ
eworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCisJCQkg
KiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9F
TkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUg
dGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLwor
CQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJLyogVHJ5IHRvIHJl
YWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9m
IGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkK
KwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFu
IEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7CisKKwllbHNlCisJCXsK
KwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxlICggbnVtX3RvX3Jl
YWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBp
dC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVy
ICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOworCisJCQlpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9j
aF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQl5eV9z
aXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXpl
IDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJ
ZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNo
YXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJ
cHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nh
bm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBv
d24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAhIGItPnl5X2NoX2J1
ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1
dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9i
dWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOworCisJ
CQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQorCQkJbnVtX3Rv
X3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwor
CQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJf
dG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOworCisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQor
CisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsKKwkJaWYgKCBudW1iZXJfdG9fbW92
ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklM
RTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKKwkJCX0KKworCQllbHNlCisJCQl7
CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7CisJ
CQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKKwor
CWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFy
cmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5eV9zaXpl
X3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5
X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0g
KGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCXl5Zy0+eXlfbl9jaGFy
cyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5X2dldF9w
cmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdh
cyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hr
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkK
KwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0
cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKKyAqCisgKiBzeW5v
cHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsK
KyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0
ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVw
b24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
KworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJfQor
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5
X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5eV9jdXJyZW50X3N0YXRl
ID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9j
XTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7CisKKwlyZXR1cm4geXlf
aXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9fSU5QVVQK
KyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9o
b2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9D
SEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3
ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBj
aGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2
ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVm
X3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9jX2J1Zl9w
ID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJeXlfc2l6
ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsreXln
LT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMg
aGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3Vt
dWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkg
KiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0
IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgor
CQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9C
X0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1
cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxMVEhS
T1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhIHl5
Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lm
ZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQor
CQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAq
KHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFy
J3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJ
eXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsKK30K
KyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRj
aCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9u
IHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRf
ZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKXsKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCX0KKworCXBwX2luaXRfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfc3dpdGNoX3Rv
X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50
aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXBwcG9wX2J1ZmZlcl9zdGF0ZSgpOwor
CSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAqLworCXBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5l
d19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJewor
CQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dp
dGNoIGR1cmluZworCSAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0
aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxs
ZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAq
LworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworc3RhdGljIHZv
aWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXl5Zy0+
eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwl5eWct
Pnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9wb3M7CisJeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZTsKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Cit9CisKKy8qKiBB
bGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCisgKiBAcGFyYW0g
ZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVm
ZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgYWxs
b2NhdGVkIGJ1ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVf
YnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAh
IGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVh
dGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9i
dWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNh
dXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJ
ICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVy
KTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFt
IGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAo
ICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5v
dCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciAp
CisJCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCisJcHBmcmVl
KCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRp
YWxpemVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1v
cmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgcHBy
ZXN0YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
Cit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXBwX2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5u
ZXIpOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAx
OworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZm
ZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJv
dWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdh
bnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisgICAgICovCisgICAgaWYgKGIgIT0g
WVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOworICAgICAg
ICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKworICAgICAgICBiLT55eV9pc19pbnRlcmFj
dGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBi
dWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNh
bGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxs
eSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCisgICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAg
YiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwli
LT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBl
bmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0
IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
KwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZf
cG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZG
RVIgKQorCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hl
cyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAq
ICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFj
aworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRl
LgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBw
cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlw
cGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9u
bHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZ
WV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHBwX3N3
aXRjaF90b19idWZmZXIuICovCisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJ
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisvKiogUmVtb3ZlcyBh
bmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4
dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXBw
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7CisJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4g
MCkKKwkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZG
RVIpIHsKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3Rh
Y2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVh
c3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBm
b3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIg
d2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFu
CisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLwor
CQludW1fdG9fYWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKiopcHBhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5
eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
bnVtX3RvX2FsbG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47
CisJfQorCisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBm
b3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkg
Z3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCArIGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCisJCQkJ
CQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJ
CQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0
YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3Np
emUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBi
dWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFj
dGVyIGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFy
YW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAor
CSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFz
ZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRv
IGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JV
RkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlz
Y2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXpl
IC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9
IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlf
aW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5
X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVm
ZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXBwX3N3
aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNl
dHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2Fs
bCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICog
QHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5
dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHBwX3Nj
YW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAorCXJl
dHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Cit9CisK
Ky8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVz
LiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBv
ZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICog
QHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBi
eSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICog
QHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlf
c2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVS
X1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuLCBpOworICAgIAorCS8qIEdldCBt
ZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidz
LiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAs
eXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwg
X3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5
dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCS8q
IEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cg
aXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55eV9pc19vdXJfYnVmZmVy
ID0gMTsKKworCXJldHVybiBiOworfQorCisjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQorI2RlZmlu
ZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9y
ICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQp
IGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUg
KTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNv
ZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsg
XAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAg
aW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXls
ZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
CisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXln
LT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUg
KCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1
Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMg
c2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitZ
WV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfbGlu
ZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VS
UkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXls
aW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBnZXRfY29sdW1uICAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9C
VUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4geXljb2x1bW47
Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0u
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBn
ZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlvdXQ7Cit9CisK
Ky8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit5eV9zaXplX3QgcHBnZXRfbGVuZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0
aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICovCisKK2NoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlz
IGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBwYXJhbSB1c2VyX2Rl
ZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KKyAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2V4dHJh
IChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGxp
bmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9saW5lbm8gKGludCAgbGluZV9udW1i
ZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5
IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8g
Y2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5bGluZW5v
ID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgorICogQHBh
cmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLwordm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBi
dWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCisgICAg
ICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKK30KKwor
LyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJl
bnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0u
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBzZWUgcHBfc3dp
dGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHBwc2V0X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9CisKK3ZvaWQgcHBzZXRf
b3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5b3V0
ID0gb3V0X3N0ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgcHBzZXRfZGVidWcgKGlu
dCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eV9mbGV4X2RlYnVnID0g
YmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2Mg
Ki8KKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxf
cGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJh
bTsKK30KKworWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Cisg
ICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5
eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bGxvYyA9IHl5bGxv
Y19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8KKworLyogcHBsZXhfaW5p
dCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0
IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhl
IHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0
bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgor
ICovCisKK2ludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKKworeworICAg
IGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5f
dCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKKworICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4
cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMu
ICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRz
X3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsK
K30KKworLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBw
cGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBz
Y2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQKKyAqIHRoaXMg
aXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0
aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBh
bHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICogVGhlIHVzZXIgZGVmaW5l
ZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgdG8gcHBhbGxv
YyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHBwbGV4X2luaXRfZXh0cmEo
WVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkK
KworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisKKyAgICBwcHNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAgIGlmIChwdHJfeXlfZ2xv
YmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBz
aXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7CisJCisgICAgaWYgKCpw
dHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAg
IHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4
cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxl
YXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5
eWd1dHNfdCkpOworICAgIAorICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJf
eXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlf
Z2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhl
IG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm
cm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKi8KKwor
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7CisgICAgeXlnLT55eV9j
X2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAwOworICAgIHl5Zy0+eXlf
c3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOworICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVM
TDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlp
biA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gKEZJTEUg
KikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1
cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkK
KyAgICAgKiBwcGxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogcHBs
ZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5l
cnMuICovCitpbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAg
ICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJ
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJLyogRGVzdHJveSB0aGUg
c3RhY2sgaXRzZWxmLiAqLworCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVy
KTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBEZXN0cm95IHRoZSBz
dGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0
YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7CisK
KyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVl
bnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHBwbGV4KCkgaXMgY2FsbGVk
LCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRfZ2xvYmFscyggeXlz
Y2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25s
eSkuICovCisgICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7CisgICAgeXlzY2Fu
bmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHV0aWxpdHkg
cm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kg
KQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgor
c3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkK
KwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAodm9pZCAqKSBtYWxsb2Mo
IHNpemUgKTsKK30KKwordm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGlu
IHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhh
dCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9p
ZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1
c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkg
KiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZl
cnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJu
ICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQorCit2b2lkIHBwZnJl
ZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlmcmVlKCAoY2hhciAqKSBw
dHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZp
bmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK25hbWVzcGFjZSBwcCB7CisKK1Rva2VuaXpl
cjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7Cisg
ICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+
VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXpl
cjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgo
Y291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4
dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRT
Y2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQor
eworICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNl
ZSBtYWNybyB5eWZpbGVuby4KKyAgICBwcHNldF9jb2x1bW4oZmlsZSxtSGFuZGxlKTsKK30KKwor
dm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgcHBzZXRfbGlu
ZW5vKGxpbmUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2Vu
KQoreworICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1ZSwmdG9rZW4tPmxvY2F0
aW9uLG1IYW5kbGUpOworICAgIHRva2VuLT5mbGFncyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRT
dGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9
IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1D
b250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7
Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxl
ID09IE5VTEwpICYmIHBwbGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCZtSGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcHByZXN0YXJ0KDAsbUhhbmRsZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYg
KG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHBsZXhfZGVzdHJveSht
SGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2luY2x1ZGUg
IklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCitu
YW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2VuaXplciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAgICB7Cisg
ICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBpbnB1dDsK
KyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRva2VuIGxv
Y2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2YgSW5wdXQ6
Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAgIC8vIGlm
IHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgorICAgICAg
ICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdTcGFjZTsK
KyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2VuaXplcihEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChp
bnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10p
OworCisgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVO
dW1iZXIoaW50IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwor
CisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7
CisgICAgYm9vbCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKwor
ICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250
ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNM
IEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAg
UHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xp
YnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBO
RUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQorfQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dO
VUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3Ig
ZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3Jl
dHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxccnxcclxuCitJREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKK09DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9ORU5UX1BBUlQgICAg
ICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBjb21tZW50ICovCisi
Ly8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAvKiBMaW5lIGJyZWFr
cyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8qIFRoZSBjb21tZW50
IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBCRUdJTihDT01NRU5U
KTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01NRU5UPntORVdMSU5F
fSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgeworICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJhLT5s
aW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOworfQor
Cit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQ
T05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
KyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICov
Cisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6UFBfTlVNQkVSOworfQorCisiKysiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorIi0tIiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RF
QzsKK30KKyI8PCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOworfQorIj4+IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQorIjw9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0xFOworfQorIj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOworfQorIj09IiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROwor
fQorIiE9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX05FOworfQorIiYmIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKK30KKyJeXiIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1I7Cit9CisifHwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisiKz0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjsK
K30KKyItPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorIio9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047
Cit9CisiLz0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKK30KKyIlPSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdO
OworfQorIjw8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKyI+Pj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRf
QVNTSUdOOworfQorIiY9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisiXj0iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9S
X0FTU0lHTjsKK30KKyJ8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisKK3tQVU5DVFVBVE9SfSB7
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBd
OworfQorCitbIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisK
K3tORVdMSU5FfSB7CisgICAgKyt5eWxpbmVubzsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4n
KTsKKyAgICByZXR1cm4gJ1xuJzsKK30KKworLiB7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0
ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKworPCo+PDxFT0Y+
PiB7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVP
Ri4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAg
cHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0
aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0
ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAh
PSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlm
IHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlu
cHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRl
eCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAg
fQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+bGluZSA9IHl5bGlu
ZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5U
KQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsK
K30KKworJSUKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9z
dGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAg
IGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBp
ZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJp
bmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9p
ZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNlIGNv
bHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgor
ICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNl
dExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUp
OworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB0b2tlbi0+
dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOwor
ICAgIHRva2VuLT5mbGFncyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29u
dGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09
ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdT
cGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9r
ZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5
bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBO
VUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAg
IG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUK
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0jIEdlbmVyYXRlcyBH
TFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBhbmQgcHBfdGFiLmNw
cAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJlcHJvY2Vzc29y
LgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxLmwKLW91dHB1dF9z
b3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQor
b3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0t
b3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5fYmlzb24oKQogewot
aW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyLyQx
X3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAKLWJpc29uIC0tbm8t
bGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVhZGVyIC0tb3V0cHV0
PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitv
dXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249
eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9CiAKIHNjcmlwdF9k
aXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggcHAK
LXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jp
c29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAg
KyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHAubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCShyZXZpc2lvbiAxMjI3MzgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5s
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXBy
b2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUg
IkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElP
TiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5v
OyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsg
IFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAot
ICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3Rh
dGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxl
bik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVv
cHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVv
cHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0cmEtdHlwZT0icHA6
OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAgICAgXntIU1BBQ0V9KiN7
SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKLVBVTkNUVUFUT1Ig
IFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05
XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NPTlNU
QU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAgICAgICBbMC05XQotRVhQ
T05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0KLXtIQVNIfSB7IHJl
dHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElGSUVSfS9bIFx0XG5d
IHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5le0hTUEFDRX0re0lE
RU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRl
eHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19Ci17SEFTSH11bmRl
ZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlmIHsgcmV0dXJuIEhB
U0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLXtIQVNIfWlmbmRl
ZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVybiBIQVNIX0VMU0U7
IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1lbmRpZiB7IHJldHVy
biBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsgfQotCi17SEFTSH1l
cnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyByZXR1cm4gSEFTSF9Q
UkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVOU0lPTjsgfQote0hB
U0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxpbmUgeyByZXR1cm4g
SEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0
ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJRklFUjsKLX0KLQot
e0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5U
fSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0p
fCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5z
dmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gRkxPQVRf
Q09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRbMF07IH0KLQotWyBc
dFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewotICAgICsreXlsaW5l
bm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi08Kj48PEVPRj4+
ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcqIGV4dHJhY3RNYWNy
b05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRoZSBpbnB1dCBzdHJp
bmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5USUZJRVJ9Ci0gICAg
Ly8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAgIEFTU0VSVChzdHIg
JiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4OwotCi0gICAgc3RkOjpz
dHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IC0t
aSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0cltpXSA9PSAnXHQn
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0cmluZyhzdHIgKyBp
ICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1uYW1lc3BhY2UgcHAg
ewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0g
ICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+ZW9mKCkgJiYKLSAg
ICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJvck5vbmUpICYmCi0g
ICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0g
MCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRpb24oeXlnZXRfbGlu
ZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBtSW5wdXQtPnN0cmlu
Z0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVuY29kZUxvY2F0aW9u
KGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlucHV0LT5yZWFkKGJ1
ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6
OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8oYWxv
a3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5yZWFkOwot
fQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1MZXhlciA9PSBO
VUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewotICAgIEFTU0VSVCht
TGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1MZXhlciA9IE5VTEw7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwLnkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI1ICswLDAgQEAKLS8q
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9y
IEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8g
MjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVT
IFRIRSBHTFNMIEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBm
aWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZWUxFWF9QQVJBTSBj
b250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1cmUtcGFyc2VyCi0l
bmFtZS1wcmVmaXg9InBwIgotJWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtwcDo6Q29udGV4dCog
Y29udGV4dH0KLQotJXVuaW9uIHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6OnN0cmluZyogc3Zh
bDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0K
LQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZUEUqIGxsb2NwLCB2
b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2NwLAotICAgICAg
ICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2so
cHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRpYyB2b2lkIHBvcENv
bmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQotJXRva2VuIEhBU0gg
SEFTSF9VTkRFRgotJXRva2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lGTkRFRiBIQVNIX0VM
U0UgSEFTSF9FTElGIEhBU0hfRU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hfRVJST1IgSEFTSF9Q
UkFHTUEgSEFTSF9FWFRFTlNJT04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQotJXRva2VuIDxzdmFs
PiBIQVNIX0RFRklORV9PQkogSEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxzdmFsPiBJTlRfQ09O
U1RBTlQgRkxPQVRfQ09OU1RBTlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+IG9wZXJhdG9yCi0l
dHlwZSA8dHZhbD4gY29uZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0bGlzdD4gcGFyYW1l
dGVyX2xpc3QgcmVwbGFjZW1lbnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRva2VuX2xpc3QKLSUl
Ci0KLWlucHV0Ci0gICAgOiAvKiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGluZQotOwotCi1saW5l
Ci0gICAgOiB0ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10ZXh0X2xpbmUKLSAg
ICA6ICdcbicKLSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8vIFRPRE8oYWxva3Ap
OiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91dCA9IGNvbnRleHQt
Pm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAkMS0+YmVnaW4oKSwg
JDEtPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQotY29udHJvbF9saW5l
Ci0gICAgOiBIQVNIICdcbicKLSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBsYWNlbWVudF9saXN0
ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6
TWFjcm86OmtUeXBlT2JqLCAkMSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8IEhBU0hfREVGSU5F
X0ZVTkMgJygnIHBhcmFtZXRlcl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0ICdcbicgewotICAg
ICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6TWFjcm86OmtUeXBl
RnVuYywgJDEsICQzLCAkNSk7Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJREVOVElGSUVSICdc
bicgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAgICB9Ci0gICAgfCBI
QVNIX0lGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJs
b2NrKGNvbnRleHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAgfCBIQVNIX0lGREVG
IElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQs
IGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9JRk5ERUYg
SURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwg
IWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwgSEFTSF9FTElGIGNv
bmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNFICdcbicgewotICAg
IH0KLSAgICB8IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRpdGlvbmFsQmxvY2so
Y29udGV4dCk7Ci0gICAgfQotICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAgfCBIQVNIX1BSQUdN
QSAnXG4nCi0gICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNIX1ZFUlNJT04gJ1xu
JwotICAgIHwgSEFTSF9MSU5FICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlzdAotICAgIDogLyog
ZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQotcGFyYW1ldGVyX2xp
c3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJREVOVElGSUVSIHsK
LSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNr
KG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEpKTsKLSAgICB9Ci0g
ICAgfCBwYXJhbWV0ZXJfbGlzdCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAgICQkID0gJDE7Ci0g
ICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9saW5lLCBJREVOVElG
SUVSLCAkMykpOwotICAgIH0KLQotY29uZGl0aW9uYWxfbGlzdAotICAgIDogY29uZGl0aW9uYWxf
dG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICQkLT5w
dXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3QgY29uZGl0aW9uYWxf
dG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQyKTsKLSAg
ICB9Ci07Ci0KLXRva2VuX2xpc3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6
OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAgICB9Ci0gICAgfCB0
b2tlbl9saXN0IHRva2VuIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPnB1c2hfYmFj
aygkMik7Ci0gICAgfQotOwotCi1jb25kaXRpb25hbF90b2tlbgotICAgIDogREVGSU5FRCBJREVO
VElGSUVSIHsKLSAgICB9Ci0gICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVSICcpJyB7Ci0gICAg
fQotICAgIHwgdG9rZW4KLTsKLQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsKLSAgICAgICAgJCQg
PSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAgICB9Ci0gICAgfCBJ
TlRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwg
SU5UX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RBTlQgewotICAgICAg
ICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICQxKTsK
LSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAx
LmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9wZXJhdG9yCi0gICAg
OiAnWycgeyAkJCA9ICdbJzsgfQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0KLSAgICB8ICc8JyB7
ICQkID0gJzwnOyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwgJygnIHsgJCQgPSAn
KCc7IH0KLSAgICB8ICcpJyB7ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAkJCA9ICd7JzsgfQot
ICAgIHwgJ30nIHsgJCQgPSAnfSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4nOyB9Ci0gICAgfCAn
KycgeyAkJCA9ICcrJzsgfQotICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAgICB8ICcvJyB7ICQk
ID0gJy8nOyB9Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUnIHsgJCQgPSAnJSc7
IH0KLSAgICB8ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9ICd8JzsgfQotICAg
IHwgJyYnIHsgJCQgPSAnJic7IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9Ci0gICAgfCAnPScg
eyAkJCA9ICc9JzsgfQotICAgIHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8ICc6JyB7ICQkID0g
JzonOyB9Ci0gICAgfCAnOycgeyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsgJCQgPSAnLCc7IH0K
LSAgICB8ICc/JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXllcnJvcihZWUxUWVBF
KiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLX0K
LQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCwgYm9vbCBj
b25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCog
Y29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4dDo6cGFyc2UoKQot
ewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMpID09IDAgPyB0cnVl
IDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9wcF9sZXguY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElH
TkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAq
LwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04g
MgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1J
Tk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5l
IEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNw
ZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRh
cmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5k
YXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8K
LQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1z
IGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0K
LSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5
OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3Jl
IGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikg
bWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MK
LSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5
cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4
X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZf
dCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYg
dWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhf
aW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxl
eF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQg
ZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdy
YWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAg
ICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01J
TiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2Rl
ZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZu
ZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRp
ZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3
NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAg
ICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJ
TlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAot
I2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYg
VUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkK
LSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0j
ZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KLQotLyog
Qzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVk
IChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmICAvKiBkZWZpbmVk
IChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlf
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
ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9T
Q0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFT
VF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBm
b3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKLSAgICAgKiAgICAg
ICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMg
YSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0
aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAgKiAgICAgICBPbmUg
b2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0
LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXls
aW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBub3JtYWxseSBk
ZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0Lgot
ICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAgICAgICAgIGRv
IHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAgIGZvciAoIHl5
bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5
eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5v
O1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZp
cnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwot
I2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVu
ZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNz
X21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9f
YXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0gICAgICAgIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9j
cCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCi0gICAgICAgIFlZ
X0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAotICAgICAgICB9
IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+
eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QK
LSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsK
LSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUgWVlf
U1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotICAgIHsKLSAg
ICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyog
aW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBw
b3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVy
IGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAqIGNoYXJhY3RlcnMu
Ci0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAgLyogTnVtYmVyIG9m
IGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLSAgICAg
KiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwotCi0gICAgLyogV2hl
dGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAot
ICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgp
IGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5eV9pc19vdXJfYnVm
ZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291
cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0
aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8g
bWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAgKiBlYWNoIG5ld2xp
bmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0gICAgLyogV2hldGhl
ciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAg
ICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90
aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOwotCi0gICAg
aW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNf
Y29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAgLyogV2hldGhlciB0
byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICog
ZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsKLQotICAgIGludCB5
eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9C
VUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUn
cyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVm
ZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxk
bid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0
Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBi
ZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdo
ZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXci
Ci0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVl
IHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZp
bGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLSAgICB9Owot
I2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3ZpZGUg
bWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICogZnV0
dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCi0g
KiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
b3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFj
a1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Ug
a25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2UgbmVl
ZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdf
YnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVf
YnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQg
cHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVmaW5l
IFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3Np
emVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9zY2Fu
X3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0KLSNkZWZpbmUg
eXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5
eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsg
XAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3Rp
dmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2Jv
bCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAg
cHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZ
WV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVmaW5lIFlZX0FUX0JP
TCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNl
ciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQ
Ci0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVmIGludCB5eV9zdGF0
ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRl
X3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRp
YyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9z
dGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZl
ciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXlj
b25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyogRG9uZSBhZnRlciB0
aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNv
cnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9f
QkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxl
bmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9
ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5
eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZF
UiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAotICAgYnV0
IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNfaW5mbwotICAg
IHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50MzJfdCB5eV9ueHQ7
Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA1XSA9Ci0g
ICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEsICAgMjIsICAgMjAs
ICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgMjEsICAg
MTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgsICAgMTcsICAgMTcs
ICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAsCi0gICAgICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0g
ICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgIDksICAg
IDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYsICAgIDAsICAgIDAs
ICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAgIDYsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcsICAgMTMsICAgIDQs
ICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0KLSAgICAgICAgMywg
ICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3Qg
eXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAgIDUsICAgIDEsICAg
IDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDksICAgIDUsICAgMTAs
ICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAgMTIsICAg
MTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAgMTUsICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAgICAgMTUsICAgMTUs
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAgMTUsCi0gICAgICAg
IDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMsICAgMTMsICAgMTgs
Ci0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwgICAxNSwgICAyMywg
ICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAyOSwgICAzMCwgICAz
MSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzM0XSA9
Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAg
IDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUsICAgIDYsICAgIDcs
ICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAgIDcsICAgIDcsICAg
IDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAgICAgIDcsICAgIDcs
ICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTEx
XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUsICAgMTEsICAxODUs
ICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAgMzksICAgNzEsICAg
MTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAsICAgIDAsICAgIDAs
ICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0gICAgICAxNTcsICAx
NTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMsICAxNTQsCi0gICAg
ICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAxNTAsICAxMzksICAg
NzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAsICAxMzUsICAxNDEs
ICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAxMzQsICAxMjcsICAx
ODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgsICAxODUsICAxMjIs
ICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAxMTIsICAxODUsICAx
MjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAgICAxODUsICAxODUs
ICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAxODUsCi0KLSAgICAg
IDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEyMSwgIDEyNiwgIDEz
MgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzExMV0gPQot
ICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEwLCAgMTA2LCAgMTA2
LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0LAotICAgICAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
ICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQs
ICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMTldID0KLSAgICB7
ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAgNCwgICAgNywgICAg
NywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwgICAxNSwgICAxNSwg
IDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAgNywgICAxNCwgICAg
NywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwgICAxNiwgICAxNiwg
IDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAgICAgICAyNSwgICAy
MCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwgICAxOSwKLSAgICAg
ICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICAzNywgICA5
OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMCwgICAxNSwg
ICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAzNywgICAzNywgICAz
NywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwgICA1NCwgICA1OSwg
ICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2MCwgICAzMCwgICAz
MSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAgICAgIDk3LCAgIDMz
LCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAgMTAxLAotICAgICAg
IDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIzLCAgIDIzLCAgIDIz
LAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAgIDM4LCAgIDk4LCAg
IDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAy
LCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAg
IDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3
LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAgIDcwLCAgIDY5LCAg
IDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLAotICAgICAgIDU4
LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDQ1LAot
ICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwgICAgMiwKLSAgICAg
ICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwgICAgOSwgICAgOSwg
ICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAxMywgICAxNiwgICAg
OSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywgICAyMCwgICAyMCwg
ICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAxMCwgICAxMCwgICAx
MCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAgICAyOSwgICAxMCwg
ICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAzNSwKLSAgICAgICAz
NSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwgICAxNCwgICAxNCwK
LSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1MSwgICAxNCwgICA5
OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAyLCAgMTAyLCAgIDkz
LCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAg
MTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3LCAgIDg3LCAgMTA3
LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAgMTA5LCAgMTA5LCAg
MTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0LAotICAgICAgIDgy
LCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAgIDcxLCAgIDcwLAot
ICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYxLCAgIDYwLCAgIDU5
LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAgIDUyLCAgIDQ5LCAg
IDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQwLCAgIDM5LCAgIDM0
LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAgIDEyLCAgICAzLCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0g
ICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9
IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wu
ICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzI0
XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQotLyogVGhlIGludGVu
dCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2Vz
IG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0
X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRf
bm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlu
cyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQg
b24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0
dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlG
IFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNl
ci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5bGluZW5vOyAgICAg
ICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1uICsgMTsgIFwKLSAg
ICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGls
ZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJl
c3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAgIAotc3RhdGljIHN0
ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0K
LSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6Q29udGV4dCoK
LQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICov
Ci1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3Vj
aGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBU
aGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOwotICAgIHNp
emVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8K
LSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4g
Ki8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMg
YW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50IHl5X25fY2hhcnM7
Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2lu
aXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tf
ZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0K
LSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hh
ciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47
Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0K
LSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9n
bG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJl
IGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJp
c29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55
eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAg
Ci1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9l
eHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0v
KiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxl
IHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBs
ZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9k
ZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
Ci1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3Rl
eHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxs
b2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRo
aXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAq
IHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1
c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxz
ZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5k
aWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNo
YXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQot
I2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0
IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lO
UFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGlu
dCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQg
eXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICBzdGF0aWMgaW50
IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBBbW91bnQgb2Yg
c3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVG
X1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3
aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8K
LSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0
aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgot
ICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2Vu
ZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQi
LgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4
X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBp
bnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAg
ICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwK
LSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4n
ICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMg
PT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47
IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0w
OyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5
aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAg
aWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0g
ICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAg
IGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9
IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0
dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQotICogd2Ug
ZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3
aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJs
ZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVmaW5lIHl5dGVybWlu
YXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZW50cmllcyBieSB3
aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVmIFlZX1NUQVJUX1NU
QUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2VuZGlmCi0KLS8qIFJl
cG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgotI2RlZmluZSBZ
WV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCi0jZW5k
aWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlw
ZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEg
ZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgotICovCi0j
aWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQotZXh0ZXJuIGludCBw
cGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICog
eXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5lIFlZX0RFQ0wgaW50
IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBF
ICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlmIC8qICFZWV9ERUNM
ICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFm
dGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgotICovCi0jaWZuZGVm
IFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5kaWYKLQotLyogQ29k
ZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5kZWYgWVlfQlJFQUsK
LSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZWV9SVUxFX1NFVFVQ
IFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRbeXlsZW5nIC0gMV0g
PT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5lciBm
dW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotICAgIHJl
Z2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFy
ICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgeXlsdmFs
ID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0gICAgaWYg
KCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOwot
Ci0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0g
ICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQg
PSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAoICEgeXlpbiApCi0g
ICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAg
ICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAg
ICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgcHBf
Y3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIH0KLQot
ICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVk
ICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLSAgICAg
ICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlf
Y2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAg
ICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JP
TCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBy
ZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAg
ICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGlu
dCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAgIGlmICggeXlfY3Vy
cmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLSAgICAgICAg
eXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAgICAgIFlZX0RPX0JF
Rk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAm
JiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1u
PTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2FjdGlvbjogIC8qIFRo
aXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotICAgICAg
ICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAv
KiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAg
ICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rp
b247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLXl5
Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQg
dXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0g
ZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5F
X09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwoteXlnLT55eV9jX2J1
Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQg
YWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFj
cm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfRlVOQzsKLX0K
LSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9VTkRF
RjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNI
X0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhB
U0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOgotWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEy
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRVhURU5TSU9OOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBIQVNIX1ZF
UlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewot
ICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIDE5Ogot
WVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRl
eHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBdOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3aGl0ZXNwYWNlICov
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1hdGNoIGVvbCAqLwot
WVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1
cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFM
KToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9T
RVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgot
ICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGlu
ZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0
ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5k
byB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAot
Ci0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUg
c2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAg
KiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAg
ICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAg
ICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAg
ICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0g
ICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28s
IGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIg
dGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2gg
Zm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5
eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0g
ICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWlu
OwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRo
YXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAg
ICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3
aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5V
TCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9u
cyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJh
c3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAq
LwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMg
d2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9z
dGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsg
eXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8q
IE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAg
ICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9w
cmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVz
IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRo
IHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAq
IHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAg
ICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAg
ICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAg
ICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRj
aDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAg
ICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAot
ICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAg
ICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAg
ICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAg
ICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIK
LSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5
X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8g
ZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZ
X05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAg
ICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAg
ICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAg
ICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAg
ICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAg
ICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBl
cnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8qIGVuZCBv
ZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5l
dyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgot
ICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29u
dGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0Zf
RklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFyICpzb3VyY2Ug
PSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwot
ICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAg
ICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBl
cnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5
IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICgg
eXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3Rl
ciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0Yu
Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxF
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0gICAg
ICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1
cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAv
KiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBtb3ZlIGxhc3QgY2hh
cnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3ZlID0gKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAgZm9yICggaSA9IDA7
IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0KyspID0gKihzb3VyY2Ur
Kyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1
cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24ndCBkbyB0aGUgcmVh
ZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAgICAgICAgKiBqdXN0
IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAgICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAg
ICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVu
b3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAgICAgICAgICAvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAg
IFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAgICAgICAgICAgIGlu
dCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5Zy0+eXlfY19i
dWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1
ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuZXdfc2l6ZSA9
IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0g
MCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXpl
IC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1
Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQot
ICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAq
LwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGIt
Pnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93
biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAg
ICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigK
LSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5
eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBu
dW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90
b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZ
X1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAg
ICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJl
cl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90
b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFy
cyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01P
UkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VO
RF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9F
T0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAg
ICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3Qp
ICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAl
LCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBu
ZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9j
aGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYg
PSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAg
fQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5
dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAg
ICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRo
ZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0
YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAg
ICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgpOwotCi0gICAgZm9y
ICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5
X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIg
eXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAg
ICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsK
LSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAg
ICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAg
ICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAgICAgICAgICAgICAg
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4geXlfY3VycmVu
dF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNp
dGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0
ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwotICAgIHN0YXRpYyB5
eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRf
c3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2ph
bTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8K
LSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotICAgIHJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0
ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5
eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAgICAgICB5
eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAg
ICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAgIHl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9zdGF0
ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlf
Y107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0KTsKLQotICAgIHJl
dHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9O
T19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Ag
bm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAg
KiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBh
Ci0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
LSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5
eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyog
bmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1
Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRD
SDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2Io
KQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQot
ICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0g
ICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAg
ICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAg
ICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAg
ICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAg
ICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAq
LwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKLQotICAg
ICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAgICAgICAgIGNhc2Ug
RU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklM
RTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1
dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5
c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNl
cnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9w
OwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSAoYyA9PSAnXG4n
KTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sICkKLSAgICAg
ICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdo
aWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lO
UFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3Ry
ZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9l
cyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAg
IHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixp
bnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBm
dW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3BfYnVmZmVyX3N0YXRl
KCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAq
LwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICBpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5m
b3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KLQotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIg
d2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3Np
bmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxvb2tlZCBhdCBpcyBh
ZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAqIHRvIGdvIGFoZWFk
IGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5
X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlp
biA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5
X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxvY2F0ZSBhbmQgaW5p
dGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxl
IHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0
ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBz
dGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAq
IGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBZWV9CVUZGRVJf
U1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2Yo
IHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVh
dGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLSAgICAvKiB5
eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZl
biBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJh
Y3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55
eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQot
ICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVh
dGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKLQotICAgIHBw
X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVybiBiOwotfQotCi0v
KiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRo
IHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdl
IHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
KFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0g
ICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0gICAg
cHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciBy
ZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2Fs
bGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5n
IGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9i
dWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBwX2ZsdXNoX2J1ZmZl
cihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+
eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIs
IHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBw
cHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0
IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAg
ICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19s
aW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAg
ICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8gPSBvZXJybm87Ci19
Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2Fu
LCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUg
dG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYg
KCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJzID0gMDsKLQotICAg
IC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmly
c3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRl
LiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAq
LwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55
eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiLT55eV9idWZfcG9z
ID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0K
LQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRl
IGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9j
YXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBU
aGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsK
LQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4g
Ki8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0K
LQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9w
LiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
LQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCi0gICAgcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRo
ZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5l
dyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZv
aWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICgh
WVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwX2RlbGV0ZV9idWZm
ZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAg
ICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9C
VUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAg
ICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAgICB9Ci19Ci0KLS8q
IEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVl
cyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGludCBudW1fdG9fYWxs
b2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0gICAgICAgIC8qIEZp
cnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25v
dyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2Ug
dXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFs
bG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2Mg
PSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZl
cl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBu
dW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9j
OwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5u
ZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVy
X3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAg
ICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAg
ICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KLX0K
LQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9t
IGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBj
aGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUg
Y2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0g
Ki8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXpl
X3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7
Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9y
IHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0gKFlZX0JVRkZFUl9T
VEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVy
ICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+eXlfYnVmX3NpemUg
PSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotICAgIGItPnl5
X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lzX291cl9idWZmZXIg
PSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25fY2hhcnMgPSBiLT55
eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgYi0+eXlfYXRf
Ym9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfYnVmZmVyX3N0
YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nh
bm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0g
KiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10
ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2Jq
ZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWlu
IE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4K
LSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4gcHBfc2Nhbl9ieXRl
cyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlu
cHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0
byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBA
cGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51
bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBf
c2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNoYXIg
KmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAgICAvKiBHZXQgbWVt
b3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4g
Ki8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hhciAqKSBwcGFsbG9j
KG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICBm
b3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXli
eXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAs
eXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiYmFk
IGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdzIG9rYXkgdG8gZ3Jv
dyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAgICogYXdheSB3
aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0K
LSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAg
bmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIHl5Zy0+eXlfc3Rh
cnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQotICAgICAgICB7Ci0g
ICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
X2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19zaXplID0geXlnLT55
eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAgICAgaWYgKCAhIHl5
Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChp
bnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFsbG9jKCh2b2lkICop
IHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCi0gICAgICAgIGlm
ICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNrIiApOwotICAgICAg
ICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyKytd
ID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0gICAgc3RhdGljIHZv
aWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIC0teXln
LT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJzdGFy
dC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4oeXlnLT55eV9zdGFy
dF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAgc3RhdGljIGludCB5
eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWctPnl5
X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19Ci0KLSNpZm5kZWYg
WVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3Rh
dGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyAp
OwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3Mo
KSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2Rl
ZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8g
ZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21h
Y3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJn
KTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAg
ICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAg
ICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsg
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAo
Z2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1
c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRo
ZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVu
dCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAot
ICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFt
LgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBw
Z2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQot
LyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJy
ZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
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
TDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJfeXlfZ2xvYmFscyA9
ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95
eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAg
ICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8q
IEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2Jh
bHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2ds
b2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0
cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4g
eXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlf
aW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0
aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAq
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBh
bGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwot
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+
eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAg
eXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwot
I2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7
Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsK
LSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJv
ciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwot
ICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFu
dCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0
cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0g
ICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICBwcHBvcF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzdGFj
ayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIp
OwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8qIERlc3Ryb3kgdGhl
IHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRf
c3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsK
LQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBsZXgoKSBpcyBjYWxs
ZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCB5
eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBv
bmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKLSAgICB5eXNj
YW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50ZXJuYWwgdXRpbGl0
eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2Zs
ZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3IgKCBpID0gMDsgaSA8
IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFlZ
X05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBz
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAo
IG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4gbjsKLX0KLSNlbmRp
ZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJl
YWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1v
ZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmlj
IHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50
ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kg
QyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2lu
dGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAg
ICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4g
KHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0KLXZvaWQgcHBmcmVl
ICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZyZWUoIChjaGFyICop
IHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0j
ZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmluZyogZXh0cmFjdE1h
Y3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8gVGhlIGlucHV0IHN0
cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURFTlRJRklFUn0KLSAg
ICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0gICAgQVNTRVJUKHN0
ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7Ci0KLSAgICBzdGQ6
OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsg
LS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAoc3RyW2ldID09ICdc
dCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6c3RyaW5nKHN0ciAr
IGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLW5hbWVzcGFjZSBw
cCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsK
LSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0LT5lb2YoKSAmJgot
ICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vycm9yTm9uZSkgJiYK
LSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAgICAgaW50IGxpbmUg
PSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2NhdGlvbihwcGdldF9s
aW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9IG1JbnB1dC0+c3Ry
aW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6ZW5jb2RlTG9jYXRp
b24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1JbnB1dC0+cmVhZChi
dWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkgPT0gcHA6OklucHV0
OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPKGFs
b2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBucmVhZDsK
LX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VSVChtTGV4ZXIgPT0g
TlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4ZXIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0gICAgQVNTRVJUKG1M
ZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxleGVyID0gTlVMTDsK
LX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBf
dGFiLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMu
ICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwg
MjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0
aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KLQotLyog
QXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0
IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFu
ZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNv
IGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIgZ2VuZXJhdG9yIHVz
aW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgotICAgYXMgYSBw
YXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0
aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2Ug
dGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8g
YmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSB3aXRo
b3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24g
d2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLSAgIHZlcnNpb24g
Mi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVu
IGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28t
Y2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBi
ZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAgIGluZnJpbmdpbmcg
b24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAot
ICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2Vy
IG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGlu
IGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0
aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAg
Ki8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUgWVlCSVNPTiAxCi0K
LS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKLQot
LyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgot
Ci0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQotCi0vKiBVc2luZyBsb2Nh
dGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBTdWJzdGl0dXRlIHRoZSB2
YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UK
LSNkZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKLSNkZWZpbmUg
eXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyBw
cGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5eWxsb2MgcHBsbG9jCi0K
LS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQ
RQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdE
QiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51
bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hfVU5ERUYgPSAyNTks
Ci0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEsCi0gICAgIEhBU0hf
SUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhBU0hfRUxJRiA9IDI2
NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2NiwKLSAgICAgSEFT
SF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAgIEhBU0hfRVhURU5T
SU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhBU0hfTElORSA9IDI3
MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RFRklORV9GVU5DID0g
MjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NPTlNUQU5UID0gMjc1
LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwot
I2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2RlZmluZSBIQVNIX0lG
IDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lGTkRFRiAyNjIKLSNk
ZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0jZGVmaW5lIEhBU0hf
RU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hfRVJST1IgMjY3Ci0j
ZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lPTiAyNjkKLSNkZWZp
bmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0jZGVmaW5lIEhBU0hf
REVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMKLSNkZWZpbmUgSU5U
X0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNkZWZpbmUgSURFTlRJ
RklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0
aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpbmNs
dWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+bGV4ZXIoKQot
I2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZ
WURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3Nl
IGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlF
UlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5l
IFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxl
LiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0j
ZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RF
Q0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBpdmFsOwotICAgIHN0
ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBwcDo6VG9rZW5WZWN0
b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLQotICAgIFlZU1RZUEU7
Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRy
YXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVf
SVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVmaW5l
ZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGludCBm
aXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBpbnQg
bGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0vKiBDb3B5
IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotZXh0ZXJuIGlu
dCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQqIGxleGVyKTsKLXN0
YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAgICAgICAgICAgIHBw
OjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFz
b24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29u
dGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQot
Ci0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJ
TlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgK
LXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4Owot
I2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZ
WVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNl
Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNp
ZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNl
bHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZ
WVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpF
X1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90
Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmlu
ZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0la
RV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9O
TFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAo
ImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8K
LSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJl
c3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZp
bmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAo
ZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJ
ZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFu
dCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNl
bHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGlu
dAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsK
LSNlbmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3Zl
cmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Eg
b3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZ
WVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9f
R05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBl
bGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9B
SVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQg
X01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAm
JiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJf
SCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRp
ZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYt
Ym9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBl
bXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJ
TVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0
IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUg
YXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZv
a2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIg
bnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1w
b3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0g
NDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJF
RQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2Nw
bHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZ
WU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVF
IHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUg
X1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAg
IGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVm
aW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
dm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlG
UkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAq
KTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRp
ZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVS
Qk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZp
bmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYm
IFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJ
VklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVy
bHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0g
IHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlMVFlQRSB5eWxzOwot
fTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQg
c3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNp
emVvZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJn
ZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMu
ICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5
eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpIFwKLSAg
ICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBm
cm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92
ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEg
PCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCi0gICAgICBf
X2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0j
ICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpICAgICAgXAotICAgICAg
ZG8gICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
IFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAo
Q291bnQpOyB5eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOyAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQot
IyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0
aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZ
WVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGlu
IHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBz
dGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0
aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZ
U0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAo
Jnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICBcCi0gICAgU3RhY2sg
PSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9
IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAot
ICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBc
Ci0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChZ
WUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0
ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIKLS8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAyNDcKLQotLyogWVlO
VE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDQ3
Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5U
UyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJV
TEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZ
TlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1i
ZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNk
ZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/
IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5TTEFURVtZWUxFWF0g
LS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICA0MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQwLCAgICAgMiwKLSAgICAg
IDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAgIDMyLCAgICAzNSwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAgNDIsICAgIDI5LCAgICA0
NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAgICAyLCAgICAyNywgICAg
MzgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAzMCwgICAgMzksICAg
IDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsKLQotI2lmIFlZREVCVUcK
LS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUg
bnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDcsICAgICA5
LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAgICAzMCwgICAgMzQsICAg
IDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5LAotICAgICAgNjIs
ICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUsICAgIDc3LCAgICA4MSwg
ICAgODMsCi0gICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTksICAgMTAxLCAgIDEw
MywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywgICAxMTUsICAgMTE3LCAg
IDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAotICAgICAxMzEsICAgMTMz
LCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1LCAgIDE0NywgICAxNDks
Ci0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJh
dGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5cmhzW10gPQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwgICAgMjIsICAgIC0xLCAg
ICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAgICAxNywKLSAgICAgIDUy
LCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0LCAgICA1MiwgICAgMjIs
ICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA1LCAgICA1NCwgICAg
MjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEsICAgICA3LCAgICAyMSwg
ICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwKLSAgICAgICA4LCAgICAy
MiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAyMiwgICAgLTEsICAgIDEz
LAotICAgICAgMjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAgICAxNSwgICAgMjIsICAg
IC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1LCAgICAtMSwgICAgLTEs
ICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAgIC0xLCAgICA1NiwgICAg
LTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNTUsICAgIDU3LAotICAg
ICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywgICAgMjEsICAgIDI0LCAg
ICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIw
LCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAgICAyNywgICAgLTEsICAg
IDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0LAotICAgICAgLTEs
ICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwg
ICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAgICAt
MSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAg
ICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAotICAgICAgLTEsICAgIDQ1
LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJTkVbWVlO
XSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAgICAgIDAsICAgIDYz
LCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1LCAgICA4NCwgICAgODUs
Ci0gICAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNSwgICAx
MDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE4LCAgIDExOSwg
ICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAxNDQsICAgMTQ4LCAgIDE1
NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3MiwgICAxNzgsCi0gICAg
IDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAg
MTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAxOTQs
ICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAgMjAwLCAgIDIwMQotfTsK
LSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJM
RQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZ
TUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlO
VE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5h
bWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiSEFTSCIsICJIQVNI
X1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNIX0lGTkRFRiIsICJIQVNI
X0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVGSU5FRCIsICJIQVNIX0VS
Uk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhBU0hfVkVSU0lPTiIsCi0g
ICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVGSU5FX0ZVTkMiLCAiSU5U
X0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJRVIiLCAiJ1xcbiciLCAi
JygnIiwgIicpJyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCciLCAiJz4nIiwgIid7JyIs
ICInfSciLCAiJy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIsCi0gICInJSciLCAiJ14n
IiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzonIiwgIic7JyIsICInPyci
LAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGluZSIsICJjb250cm9sX2xp
bmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlzdCIsICJjb25kaXRpb25h
bF9saXN0IiwgInRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9rZW4iLCAidG9rZW4iLCAi
b3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1b
WVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bwotICAg
dG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVt
W10gPQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAy
NjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwg
ICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3
NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5MywgICAgNjAsICAgIDYy
LAotICAgICAxMjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAgICA0NywgICAgNDIsICAg
IDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYxLCAgICAzMywgICAgNTgs
ICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1i
ZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAg
NDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwg
ICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAot
ICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDUz
LCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsICAg
IDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LAotICAgICAg
NTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1
OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0g
TnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAg
IDIsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAg
MywKLSAgICAgICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAx
LCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAgICAgMSwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxCi19
OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdp
dGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNv
bWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJy
b3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAg
ICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgIDYsICAgIDQzLCAgICA0
NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0NSwKLSAgICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAg
IDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MiwgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAgICA4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAgICAgIDE2LCAgICAgMCwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgIDI0LAot
ICAgICAgMjUsICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAgMCwgICAgMTIsICAgIDI5
LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAgICAgMCwgICAgIDAsICAg
IDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEwCi19OwotCi0vKiBZWURF
RkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3Rv
W10gPQotewotICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA2OCwgICAg
ODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEKLX07Ci0KLS8qIFlZUEFD
VFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmlu
ZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTU1Ci1zdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAgICA3MywgICAtNTUsICAg
LTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAgMTQ1LAotICAgICAgLTgs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEsICAgIDI4LCAgIC01NSwg
ICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAgICAtNTUsICAgLTU1
LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAxNzMs
Ci0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAgIC0zLCAgIC01NSwgICAt
NTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAgMjksICAgLTU1LCAgIC01
NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsCi0gICAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAgICAzNiwgICAtNTUsICAg
IDM3LCAgIC01NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEsICAgIDYwLCAgIC01NCwK
LSAgICAgIC0xLCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBX
aGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhh
dCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBp
cyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZ
WVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQot
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewotICAgICAgNTAsICAgIDc3
LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3LCAgICA1NCwgICAgODUs
Ci0gICAgICA4NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAgIDUwLCAgICAxOCwgICAg
MTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCi0gICAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAg
IDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4LCAgICA3OSwgICAgODEs
ICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAgIDQ5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1MCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwK
LSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgODAsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDMzLAotICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAot
ICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1Ci19Owot
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAxLCAgICA1
NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2MSwgICAgMTEsICAgIDI0
LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAgICAxNiwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAotICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIyLCAg
ICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDIy
LCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAgICAgMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgODUsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
Ci0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwK
LSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NgotfTsK
LQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBh
Y2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgNDgsICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDU1LAot
ICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1NCwgICAgNTYsICAgIDU3
LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAgICAyMiwgICAgMjIsICAg
IDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIzLCAgICAyMiwgICAgNTcs
ICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIsICAgIDIyLAotICAgICAg
MjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAgMjUsICAgIDI0LCAgICA1
MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0
dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUg
WVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NF
UFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRs
YWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVS
Uk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3Jhcmls
eQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJP
UiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9u
IDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAgICBnb3RvIHl5ZXJybGFi
Ci0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZ
QkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEp
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5bHZh
bCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXl0b2tlbiA9IFlZVFJB
TlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOyAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVs
c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5
bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZ
RVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNw
YW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5U
IHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9s
OiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBL
KSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVG
QVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZ
WVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAoQ3VycmVudCkuZmlyc3Rf
Y29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgXAotICAgICAgKEN1cnJl
bnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsgICAgIFwKLSAg
ICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVt
bjsgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5s
YXN0X2xpbmUgICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7
ICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVu
dCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9j
b2x1bW47ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJ
TlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdh
cyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ug
d29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtu
b3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJ
VklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgICAgICAgICAgXAot
ICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAgICBcCi0gICAgICAgICAg
KExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0gICAgICAgICAgKExvYyku
bGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMgIGRlZmluZSBZWV9MT0NB
VElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYKLSNlbmRpZgotCi0KLS8q
IFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLwot
Ci0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCAmeXls
bG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwg
Jnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICov
Ci0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0ZGlvLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQUklOVEYg
ZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBc
Ci1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAg
ICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZ
SUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBM
b2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
IHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZ
WU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJH
U1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRp
YyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBl
LCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29uc3QgKiBjb25zdCB5
eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5
X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRp
b25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUgY29uc3QgKiBjb25z
dCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBp
ZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRpb25wKTsKLSAgWVlV
U0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMp
Ci0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Ci0j
IGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0g
ICAgewotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQ
VVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBwcDo6Q29udGV4dCog
Y29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwg
eXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRw
dXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7
Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0
KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlG
UFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNl
Ci0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0p
OwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRpb25wKTsKLSAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRw
dXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRG
ICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0t
IFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9Q
IChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90
dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJp
bnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9p
bnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7
Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMg
ZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkp
OyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUg
WVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUg
Knl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNvbnRleHQqIGNvbnRleHQp
Ci0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1
bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlMVFlQRSAqeXlsc3A7Ci0g
ICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNlbmRpZgotewotICBp
bnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25lZCBsb25nIGlu
dCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2lu
ZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwg
eXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9yICh5eWkg
PSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwg
IiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5
cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5
eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
XG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBc
Ci0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19
IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4g
IEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNh
biBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkK
LSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0K
LQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3Mu
ICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5k
aWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0
byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0
aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhl
IHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlT
VEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNp
c2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVm
aW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UK
LQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQg
X1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJu
IHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3Ry
KQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNo
YXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0g
MDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47
Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5l
ZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQot
IyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlE
RVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAg
IFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
c3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMp
Ci0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hh
ciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5
ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlk
KysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7
Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8g
WVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNz
YXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9y
IHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVu
bmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBh
IGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gp
LiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRv
IG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQK
LSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hh
ciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAg
ICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlz
dHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAg
ICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBf
cXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykK
LSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhy
b3VnaC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAg
eXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0g
J1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVv
dGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlz
dHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBl
bmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUg
dW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0
aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0
aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBj
b3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRh
eCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBv
dmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZ
WVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50
IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQ
QUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UK
LSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZ
WVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAg
WVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAg
ICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRo
aXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUK
LSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwot
IyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4
cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsK
LSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotICAgICAgICAgICAgKyBz
aXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FS
R1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0g
ICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFy
dCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0g
ICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAw
OwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRu
YW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAg
IGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRP
S0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1l
W3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVk
KTsKLQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLSAg
ICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0gICAg
ICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0p
Ci0gICAgICAgICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAgeXlzaXplID0geXlz
aXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0g
eXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5
eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNp
emUpOwotICAgICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5eWZtdCA9IHl5c3RwY3B5
ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5b3I7Ci0gICAgICB9Ci0K
LSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlz
dHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUp
OwotICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykK
LSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLSAgICB7
Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidz
IG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVu
IGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUg
d3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5cCA9IHl5cmVzdWx0Owot
ICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQot
ICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYg
eXlpIDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5
cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAgICAgICAgfQotICAgICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAgICAgIHl5ZisrOwot
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0K
LX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFz
c29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3Qg
Y2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZWUxUWVBFICp5eWxv
Y2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVz
dHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwgY29udGV4dCkKLSAg
ICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFs
dWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpDb250ZXh0KiBjb250ZXh0
OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNFICh5eWxvY2F0aW9ucCk7
Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0
aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2Nh
dGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAg
ICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3Np
bmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJT
RV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQ
QVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJz
ZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQot
LyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQ
QVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWlu
dAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZ
UEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyog
ISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5
cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRp
ZgotewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyog
VGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBF
IHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5
eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8K
LVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXly
ZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3Nh
Z2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9r
ZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5
eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBt
ZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4
XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBz
aXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRv
b2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0
ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25z
LgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8g
YWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8K
LQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklU
REVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5
eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5
dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5
eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxUWVBFIHl5bHNhW1lZ
SU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxUWVBFICp5eWxzcDsK
LSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuICAq
LwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUgWVlQT1BTVEFDSyhOKSAg
ICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQotCi0gIFlZU0laRV9U
IHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRv
IHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9u
IHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5eWxvYzsKLQotICAv
KiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgot
ICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0g
IGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2Vc
biIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0g
MDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4g
ICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVs
ZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5
IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBl
bGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAg
eXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9JU19UUklWSUFMCi0g
IC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBhcnNpbmcgc3RhcnRz
LiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xpbmUgICA9IDE7Ci0g
IHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAwOwotI2VuZGlmCi0K
LSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3
IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0
ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBs
b2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBh
IHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0
YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAx
IDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2Yg
dGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXpl
ID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAv
KiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVz
IG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9u
ZXMgaW50bwotICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwot
ICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXls
czsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRo
ZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVz
LiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUg
dHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5
b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXho
YXVzdGVkIiksCi0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwK
LSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAg
ICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFj
a3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9
IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlT
VEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQotICAgICAg
LyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAgICBpZiAoWVlNQVhERVBU
SCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgICAgeXlzdGFj
a3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCi0gICAgeXlz
dGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNz
MSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxs
b2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBp
ZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxP
Q0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0gICAgWVlTVEFDS19S
RUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3Mx
ICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlm
Ci0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNp
emUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5bHNwID0g
eXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNp
emUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5
c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3Nw
KQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5n
IHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0t
LS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyog
RG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQg
YQotICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5
IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0
aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5
eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsK
LQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJl
YWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlF
T0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlF
TVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46
ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZ
RU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNl
Ci0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlf
U1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2Mp
OwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlU
T0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQg
YWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8
IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAg
eXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5
biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5eWVycmxhYjsKLSAgICAg
IHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09
IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2lu
Y2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwot
ICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUg
bG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0
b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tl
biB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNo
YXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwot
ICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5
eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9u
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5
eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9
IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVy
d2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhp
cyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBu
b3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxs
eSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBH
Q0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5
eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRpb24uICAqLwotICBZ
WUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOwotICBZWV9SRURV
Q0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA3Ogot
Ci0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jvcy4KLSAgICAgICAg
cHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAgICAgICAgb3V0LT5p
bnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5iZWdpbigpLCAoeXl2
c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICh5eXZzcFsoMSkg
LSAoMildLnRsaXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgOToKLQotICAgIHsK
LSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICgzKV0pLmZpcnN0X2xp
bmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyldLnN2YWwpLCBOVUxMLCAo
eXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MDoKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICg2
KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2c3BbKDEpIC0gKDYpXS5z
dmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS50bGlzdCkp
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgY29u
dGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBwdXNoQ29uZGl0aW9uYWxC
bG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0cnVlIDogZmFsc2UpOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAgICAgICAgcHVzaENv
bmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmluZWQoKHl5dnNwWygy
KSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAg
ICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFjb250ZXh0LT5pc01h
Y3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6
Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAg
ICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9IG5ldyBw
cDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjayhuZXcgcHA6
OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElGSUVSLCAoeXl2c3Bb
KDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNzoKLQot
ICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAoMyldLnRsaXN0KTsK
LSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oKHl5bHNwWygz
KSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMykgLSAoMyldLnN2YWwp
KSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0gICAgewotICAgICAgICAo
eXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0
KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2
c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAg
ICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlz
dCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAz
MzoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZp
cnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBw
cDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElOVF9DT05TVEFOVCwgKHl5
dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNzoK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tlbigoeXlsc3BbKDEp
IC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZzcFsoMSkgLSAoMSldLnN2
YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xp
bmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdbJzsgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7IDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJzwnOyA7fQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICc+JzsgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICd7JzsgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcrJzsg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5dmFsLml2YWwpID0gJy8n
OyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICcq
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
JSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
J14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICd8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICc9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0KLSAgICB7ICh5eXZhbC5p
dmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMu
ICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAo
Ii0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5
eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQot
ICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0gIC8qIE5vdyBgc2hp
ZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0g
ICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFu
ZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5
eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0g
IGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRl
XSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAg
ICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0
YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVy
cmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVy
aW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0
YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAg
ICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vs
c2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlz
dGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxs
b2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAgICAgIFlZU0laRV9UIHl5
YWxsb2MgPSAyICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYg
eXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgICAgIHl5YWxsb2MgPSBZ
WVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAg
ICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZ
WVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNnKQotICAgICAgICAgIHl5
bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAg
eXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7
Ci0gICAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9
IHl5bXNnX2FsbG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5
bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0
LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAgICAgICB5eWVycm9yICgm
eXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAgICAgICAgaWYgKHl5c2l6
ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0gICAgICB9
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bGxvYzsKLQotICBpZiAo
eXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2Fy
ZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyog
UmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIg
PT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAgZWxzZQotICAgIHsKLSAg
ICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9r
ZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsK
LSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0
b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAqLwotICBnb3RvIHl5
ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZ
WUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mg
d2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxh
YmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2Rl
LiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOwotCi0g
IHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8gbm90IHJlY2xhaW0g
dGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlz
IFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5
eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJv
dGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5
eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRo
aXMuICAqLwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVd
OwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlU
RVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5
bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFu
ZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZ
WUFCT1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwotICAgICAgeXlkZXN0
cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNw
LCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUg
PSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQot
ICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisreXl2c3AgPSB5eWx2
YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyogVXNpbmcgWVlMTE9DIGlz
IHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGUgbG9v
ay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwotICBZWUxMT0NfREVGQVVM
VCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5eWxzcCA9IHl5bG9jOwot
Ci0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNo
aWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsK
LSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJl
c3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVz
dWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVz
dGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoK
LSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwot
ICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1
cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0gICAgICAgICB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZ
QUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5
c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAg
IH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNL
X0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAh
PSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtl
IHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQot
Ci0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRpdGlvbmFsQmxvY2so
cHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQotCi12b2lkIHBvcENv
bmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0KLW5hbWVzcGFjZSBw
cCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0gMTsKLSAgICByZXR1
cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAgLy8gbmFtZXNwYWNl
IHBwCi0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHBfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgJKHJldmlzaW9uIDEyMjcz
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3RhYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKiBBIEJpc29u
IHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tlbGV0b24gaW50ZXJm
YWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChD
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
Rm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBUb2tlbnMu
ICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5
cGUgewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5LAotICAgICBIQVNI
X0lGID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNIX0lGTkRFRiA9IDI2
MiwKLSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAyNjQsCi0gICAgIEhB
U0hfRU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhBU0hfRVJST1IgPSAy
NjcsCi0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVOU0lPTiA9IDI2OSwK
LSAgICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAyNzEsCi0gICAgIEhB
U0hfREVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9IDI3MywKLSAgICAg
SU5UX0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3NSwKLSAgICAgSURF
TlRJRklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgSEFT
SCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9JRiAyNjAKLSNkZWZp
bmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0jZGVmaW5lIEhBU0hf
RUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNIX0VORElGIDI2NQot
I2RlZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2NwotI2RlZmluZSBIQVNI
X1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVmaW5lIEhBU0hfVkVS
U0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNIX0RFRklORV9PQkog
MjcyCi0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElOVF9DT05TVEFOVCAy
NzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5USUZJRVIgMjc2Ci0K
LQotCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNM
QVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6
OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9y
KiB0bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0gICAgWVlTVFlQRTsK
LSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJh
d24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxUWVBFICYmICEgZGVm
aW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBFCi17Ci0gIGlu
dCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9saW5lOwotICBp
bnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZTFRZUEUgLyog
b2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxUWVBFX0lTX0RF
Q0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cF91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRp
bHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBV
VElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFu
ZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0
ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAg
ICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91
dGlscy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJv
Y2Vzc29yLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHJlcHJvY2Vzc29yLnZjcHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTMgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRp
b1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5h
bWU9InByZXByb2Nlc3NvciIKKwlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0
LTJDMjFCRDdCQzMyNX0iCisJUm9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29yIgorCUtleXdvcmQ9
IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0
Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQor
CQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29s
RmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVi
dWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0
aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUp
IgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQk+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dl
YlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMy
O19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGlt
ZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhl
YWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJ
CQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFu
YWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNS
ZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlu
a0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIK
KwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZD
QnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJ
PC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1l
KSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlD
b25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCVdob2xlUHJvZ3Jh
bU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2
ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlFbmFi
bGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1
bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgor
CQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKKwkJCQlEZWJ1Z0lu
Zm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQx
Mjc7NDI0NCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29t
cGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVy
VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNY
RENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9u
PgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0
b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIK
KwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlv
bk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJ
CQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1l
PSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxU
b29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJ
CQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmlt
YWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1l
TGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2
ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0
NzAyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29s
IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01h
a2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJ
TmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJ
CTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91dHB1dERpcmVjdG9y
eT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCisJ
CQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25O
YW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIxIgorCQkJ
V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21C
dWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0
b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJn
ZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9u
cz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIi
CisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9
InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSI0
IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMi
CisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJW
Q0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJ
CQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29s
CisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bv
c3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3Vy
YXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0
ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtv
ZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEt
QzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Np
b25QYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXElucHV0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxMZXhlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0i
SGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlV
bmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIK
KwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFu
ZGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XERpcmVjdGl2ZVBhcnNlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNz
b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxT
b3VyY2VMb2NhdGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFRva2VuLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4K
Kwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVj
dD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxf
dXRpbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5oOiBDb21tb24gU1RM
IHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNkZWZpbmUgQ09NTU9O
X1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVsZXRlCi17Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkgeyBkZWxldGUgeDsg
fQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4mIHgpIHsgZGVsZXRl
IHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmIC8vIENPTU1PTl9T
VExVVElMU19IXwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9rZW5fdHlwZS5oCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
X1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX1RZUEVfSF8KLQot
I2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9U
T0tFTl9UWVBFX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
KyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKKyNp
bmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgor
CitSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2luayhzaW5rKQorICAgICwgbU51bUVy
cm9ycygwKQoreworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBvbmx5IGluIGZyYWdtZW50IHNo
YWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMyMTt2ZjI7ZjE7Iik7
CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmYzO2YxOyIpOwor
ICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3ZmNDtmMTsiKTsKKyAg
ICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2YxOyIpOworICAgIC8v
IFNhbXBsaW5nIG9wcyBmb3VuZCBpbiBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4K
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0OyIpOworICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3Zp
ZGVkIGJ5IE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJEKDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFBy
b2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaigxO3Zm
NDsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3RleHR1cmVfcmVjdGFu
Z2xlLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7Cisg
ICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7Cit9CisKKy8v
IEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlvbiB0aW1lIG9m
IGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8gY2FuIHZhcnkgYmFz
ZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNvLCB3ZSBzaG91bGQg
cmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sK
KyAgICBtTnVtRXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmljKTogVGhlIGRlcGVu
ZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVuY3Rpb24gY2FsbHMg
cmlnaHQgbm93LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3IgdGhlbS4KKyAgICB2
YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOworCisgICAgLy8gU3Rh
cnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFu
ZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQgYSBub2RlIHdoZXJl
IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisgICAgZm9yIChUR3Jh
cGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblNhbXBsZXJT
eW1ib2xzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJTeW1ib2xzKCk7Cisg
ICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wqIHNhbXBsZXJTeW1i
b2wgPSAqaXRlcjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHNhbXBsZXJTeW1i
b2wtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoY29uc3QgVERl
cGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25DYWxsVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMo
KTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7
CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5jdGlvbkNhbGwqIGZ1
bmN0aW9uQ2FsbCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0aW9uQ2FsbC0+Z2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBjYWxsIHRvIGEgdXNl
ciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAgIH0KK30KKwordm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNvbnN0IFRJbnRlcm1O
b2RlKiBub2RlKQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5wcmVmaXgoRVByZWZp
eEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworfQorCitib29s
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJt
QWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpbnRl
cm1GdW5jdGlvbkNhbGwtPmlzVXNlckRlZmluZWQoKSAmJgorICAgICAgICAgICBtU2FtcGxpbmdP
cHMuZmluZChpbnRlcm1GdW5jdGlvbkNhbGwtPmdldE5hbWUoKSkgIT0gbVNhbXBsaW5nT3BzLmVu
ZCgpOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OnZpc2l0QXJndW1l
bnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBUZXh0dXJlIGNhY2hlIGFj
Y2VzcyB0aW1lIG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorICAgIC8vIFRodXMs
IHdlIHJlc3RyaWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFmZmVjdGluZyB0aGUg
Y29vcmRpbmF0ZSBvciBMT0QgYmlhcyBvZiBhCisgICAgLy8gc2FtcGxpbmcgb3BlcmF0aW9uLgor
ICAgIGlmIChpc1NhbXBsaW5nT3AocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSkp
IHsKKyAgICAgICAgc3dpdGNoIChwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVtYmVyKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAvLyBTZWNvbmQgYXJndW1lbnQgKGNv
b3JkKQorICAgICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVw
ZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAg
ICAgICAgICAgICAgICA8PCAiIGNvb3JkaW5hdGUgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVy
YXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgIC8vIFRoaXJkIGFyZ3VtZW50IChiaWFzKQorICAgICAgICAgICAgICAg
IGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAg
ICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBp
cyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGJp
YXMgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBh
cmd1bWVudCAoc2FtcGxlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdFNlbGVjdGlv
bihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVycm9yKHNlbGVjdGlv
bi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRl
cGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNvbmRpdGlvbmFsIHN0
YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6dmlz
aXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihsb29wLT5nZXRJbnRl
cm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNh
bXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxuIjsKK30KKwordm9p
ZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxPcChUR3JhcGhMb2dp
Y2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxPcC0+Z2V0SW50ZXJt
TG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVuZGVudCBvbiBh
IHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgYSBsb2dp
Y2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkKKyAgICAgICAgICA8
PCAiIG9wZXJhdG9yLlxuIjsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCisKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
IgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nIDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKTsKKyAgICB2b2lkIGVu
Zm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxlY3Rpb24pOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9wKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5vZGUpOworICAgIHZv
aWQgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0IFREZXBlbmRlbmN5
R3JhcGgmIGdyYXBoKTsKKyAgICBib29sIGlzU2FtcGxpbmdPcChjb25zdCBUSW50ZXJtQWdncmVn
YXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0OworCisgICAgVEluZm9TaW5rQmFzZSYgbVNp
bms7CisgICAgaW50IG1OdW1FcnJvcnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+
IFN0cmluZ1NldDsKKyAgICBTdHJpbmdTZXQgbVNhbXBsaW5nT3BzOworfTsKKworI2VuZGlmICAv
LyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZl
cnRleFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKG5v
ZGUtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7CisgICAgICAgIG1T
aW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBtU2luay5sb2NhdGlvbihub2RlLT5n
ZXRMaW5lKCkpOworICAgICAgICBtU2luayA8PCAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQg
aW4gdmVydGV4IHNoYWRlcnMuXG4iOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXworI2Rl
ZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KKwor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKworY2xhc3MgVElu
Zm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUs
IGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAgICAsIG1OdW1FcnJv
cnMoMCkge30KKworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9v
dCkgeyByb290LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJvcnMoKSB7IHJldHVy
biBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCopOworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51
bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRF
WF9TSEFERVJfVElNSU5HX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5Miw2
ICs5OTIsMjIgQEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQogICAgIHJl
dHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNE
Rk1UX0RYVDUpKTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERp
cmVjdDNEOQorLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0
aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUgaHR0cDovL2FyYXMtcC5pbmZv
L3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1
cHBvcnQoKSBjb25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsK
KyAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3Bs
YXlNb2RlKTsKKworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNB
R0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOworICAgIGJv
b2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBE
M0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAgcmV0dXJuIGludHogJiYgbnVs
bDsKK30KKwogYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmls
dGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBPT0wgRGlzcGxheTo6Z2V0QnVm
ZmVyUG9vbChEV09SRCB1c2EKICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwogfQogCi1EM0RQ
T09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkgY29uc3QKK0QzRFBP
T0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYg
KG1EM2Q5RXggIT0gTlVMTCkKICAgICB7CkBAIC0xMDg5LDcgKzExMDUsNyBAQCBEM0RQT09MIERp
c3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0g
ICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0Vf
REVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxMjI3Mzgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsMTAgKzc4LDExIEBAIGNsYXNzIERpc3BsYXkKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwogICAgIHZpcnR1YWwgYm9vbCBn
ZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Q
b3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRl
eHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5
U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woYm9vbCByZW5kZXJhYmxl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsKICAgICBib29s
IGlzRGV2aWNlTG9zdCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw3IEBAIFN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QKICAgICA6IG1E
aXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKIHsKICAgICBtU3dhcENo
YWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbCA9
IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbU9mZnNjcmVlblRleHR1cmUg
PSBOVUxMOwpAQCAtNjQsNiArNjUsNyBAQCBTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0CiAgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVdpbmRvdyhOVUxMKSwgbUNvbmZp
Zyhjb25maWcpLCBtU2hhcmVIYW5kbGUoc2hhcmVIYW5kbGUpLCBtV2lkdGgod2lkdGgpLCBtSGVp
Z2h0KGhlaWdodCksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKEVHTF9GQUxTRSkKIHsKICAgICBt
U3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgbURlcHRoU3Rl
bmNpbCA9IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbU9mZnNjcmVlblRl
eHR1cmUgPSBOVUxMOwpAQCAtMTIxLDYgKzEyMywxMiBAQCB2b2lkIFN1cmZhY2U6OnJlbGVhc2Uo
KQogICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKICAgICB9CiAKKyAgICBpZiAobUJhY2tCdWZm
ZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtQmFj
a0J1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewog
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CkBAIC0xNDQsNiArMTUyLDggQEAgdm9p
ZCBTdXJmYWNlOjpyZWxlYXNlKCkKICAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgp
OwogICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgfQorCisgICAgbVNoYXJlSGFuZGxlID0g
TlVMTDsKIH0KIAogYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigpCkBAIC0xNzQsNTcgKzE4
NCwxMyBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSogcHJlc2VydmVk
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgJiYg
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IG1S
ZW5kZXJUYXJnZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0g
ICAgfQotCiAgICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5
c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwogICAgIC8vIGJlZm9yZSByZWFs
bG9jYXRpbmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxl
LgogICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAgcmVsZWFzZSgpOwog
CiAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwogICAg
IEhSRVNVTFQgcmVzdWx0OwogCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0Q29tcGFyYWJsZU9T
VmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNl
KCk7Ci0KLSAgICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hpbmcgd2hlbiByZXNp
emluZyB3aW5kb3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNpZGUgb2YgdGhlIFdN
X1BBSU5UIGNhbGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2JsZW0gaW4KLSAgICAv
LyBzaW5nbGUgcHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vhcmx5IG5vdGljZWFi
bGUgaW4gbXVsdGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVyZWZvcmUsIGlmIHRo
ZSBjcmVhdG9yIHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAgICAvLyB0aGUgY3Vy
cmVudCBwcm9jZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdPUkQgd2luZG93UElE
OwotICAgIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2luZG93UElEKTsKLSAg
ICBpZiAod2luZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAgICB7Ci0gICAgICAg
IHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMgaGFyZHdhcmUgZG9l
cyBub3Qgc3VwcG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhlciB0aGUKLSAgICAv
LyBkZXZpY2UgZm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3QgMzItYml0LgotICAg
IEhEQyBkZXZpY2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmljZUZvcm1hdEJpdHMg
PSBHZXREZXZpY2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0gICAgUmVsZWFzZURD
KDAsIGRldmljZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVyU2l6ZSAhPSAzMiB8
fCBkZXZpY2VGb3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMgYWx3YXlzIFZTWU5D
ZWQKLSAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAgICAgdXNlRmxpcEV4
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggZG9lcyBub3Qg
cHJlc2VydmUgdGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZCkKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQogICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVu
Y2lsRm9ybWF0OwogICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3
ZSB1c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguCiAgICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIERp
cmVjdFggZG9jcyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0byAxCkBAIC0y
MzksNDEgKzIwNSw1MCBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVm
CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAogICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVt
ZW50ZWQKICAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdyZWF0ZXIuCi0gICAg
aWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNX
QVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBF
ZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZFQ1RfQ09QWSA6IEQz
RFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0g
RDNEU1dBUEVGRkVDVF9ESVNDQVJEOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0g
VFJVRTsKICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSBiYWNrYnVmZmVy
V2lkdGg7CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IGJhY2tidWZm
ZXJIZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRvdykKKyAgICAvLyBSZWxlYXNlIHNwZWNpZmljIHJl
c291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0LCB3aGls
ZSB0aGUKKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRoZSBwdXJw
b3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dhcENoYWluKQogICAg
IHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZw
cmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhB
TkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNwbGF5LT5zaGFyZUhh
bmRsZVN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFu
ZGxlOwotICAgICAgICB9CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAg
bVN3YXBDaGFpbiA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVI
YW5kbGUpOworICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICB7CisgICAgICAgIG1CYWNrQnVmZmVy
LT5SZWxlYXNlKCk7CisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAgICB9CiAKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAgICB9CiAKLSAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2Ny
ZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKKyAgICBp
ZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKKyAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIAotICAg
ICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBw
cmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByZXNlcnZlZFJl
bmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwor
ICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBpZiAoIW1XaW5kb3cgJiYgbURp
c3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCisgICAgeworICAgICAgICBwU2hhcmVIYW5k
bGUgPSAmbVNoYXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZv
cm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVh
c2UoKTsKIAogICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgICAgICB7
CkBAIC0yODYsMjAgKzI2MSwxMiBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBi
YWNrYnVmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVdpbmRvdykKLSAgICB7Ci0gICAg
ICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8s
ICZtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKCFwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3csIE5VTEwsIEZBTFNF
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVu
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsKLSAgICB9CisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7CiAKLSAg
ICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQorICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAg
ICAgUkVDVCByZWN0ID0KICAgICAgICAgewpAQCAtMzE4LDEwICsyODUsMzcgQEAgYm9vbCBTdXJm
YWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgICAgICB9CiAKICAgICAgICAgbURp
c3BsYXktPmVuZFNjZW5lKCk7Ci0gICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QocHJlc2VydmVk
UmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7
CiAKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIHBy
ZXNlcnZlZFJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3Ry
ZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQz
RFRFWEZfTk9ORSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAg
ICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1XaW5kb3cp
CisgICAgeworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hh
aW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKwor
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMg
b3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxl
YXNlKCk7CisKKyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
c3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01P
Tk8sICZtQmFja0J1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAg
ICAgfQogCiAgICAgaWYgKG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VO
S05PV04pCkBAIC0zMjksMTUgKzMyMywyNCBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWlu
KGludCBiYWNrYnVmCiAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0
LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNh
bXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0gICAgfQogCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQg
PT0gRDNERVJSX0lOVkFMSURDQUxMKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJ
RENBTEwpOwogCi0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3Vy
ZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVh
c2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAg
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3
IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgICAgICByZWxlYXNlKCk7CisK
KyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKQEAgLTM0Nyw2ICszNTAsMTEzIEBA
IGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWYKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGlu
dCB3aWR0aCwgRUdMaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIW1Td2FwQ2hhaW4pCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoeCArIHdpZHRoID4gbVdpZHRo
KQorICAgIHsKKyAgICAgICAgd2lkdGggPSBtV2lkdGggLSB4OworICAgIH0KKworICAgIGlmICh5
ICsgaGVpZ2h0ID4gbUhlaWdodCkKKyAgICB7CisgICAgICAgIGhlaWdodCA9IG1IZWlnaHQgLSB5
OworICAgIH0KKworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbURpc3BsYXktPmdldERldmljZSgpOworCisgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUg
b3BlcmF0aW9ucworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNE
WkJfRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQz
REZJTExfU09MSUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNU
RU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxM
TU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NM
SVBQTEFORUVOQUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xP
UldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVO
QUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFC
TEVfUkVEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJM
RSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RF
TkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgIGRl
dmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJn
ZXQoMCwgbUJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShO
VUxMKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVyZSk7Cisg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9Q
X1NFTEVDVEFSRzEpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNT
X0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOworICAgIGRldmljZS0+U2V0
U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lO
VCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNE
VEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBf
QUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZf
WFlaUkhXIHwgRDNERlZGX1RFWDEpOworCisgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0ID0gezAs
IDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07CisgICAgZGV2aWNlLT5TZXRWaWV3cG9y
dCgmdmlld3BvcnQpOworCisgICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKKyAgICBmbG9hdCB5MSA9
IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOworICAgIGZsb2F0IHgyID0gKHggKyB3aWR0
aCkgLSAwLjVmOworICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7CisKKyAgICBm
bG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYxID0geSAvIGZsb2F0KG1I
ZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgpOworICAg
IGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7CisKKyAgICBmbG9hdCBx
dWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCisgICAgICAgICAgICAg
ICAgICAgICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAorICAgICAgICAgICAgICAg
ICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHosIHJodywg
dSwgdgorCisgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICBkZXZpY2UtPkRyYXdQcmlt
aXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOwor
ICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5V
TEwpOworCisgICAgUkVDVCByZWN0ID0KKyAgICB7CisgICAgICAgIHgsIG1IZWlnaHQgLSB5IC0g
aGVpZ2h0LAorICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5CisgICAgfTsKKworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5V
TEwsIDApOworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29u
dGV4dCo+KGdsR2V0Q3VycmVudENvbnRleHQoKSk7CisgICAgaWYgKGNvbnRleHQpCisgICAgewor
ICAgICAgICBjb250ZXh0LT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIH0KKworICAgIGlmIChp
c0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbURpc3BsYXktPm5vdGlm
eURldmljZUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9CisKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4o
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBIV05EIFN1cmZhY2U6OmdldFdpbmRvd0hhbmRs
ZSgpCiB7CiAgICAgcmV0dXJuIG1XaW5kb3c7CkBAIC00NjcsODcgKzU3NywxOCBAQCBEV09SRCBT
dXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGluCiAKIGJvb2wgU3VyZmFjZTo6c3dhcCgp
CiB7Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlzcGxheS0+ZW5kU2Nl
bmUoKTsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQp
OwogfQogCiBib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBF
R0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8
IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCiAgICAgaWYgKCFtUG9zdFN1YkJ1ZmZl
clN1cHBvcnRlZCkKICAgICB7CiAgICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0IGhv
dyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0K
LSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgp
OwotCi0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHgsIG1IZWln
aHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQotICAg
ICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlY3QuYm90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0
b20gPSBtSGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QubGVmdCA9PSByZWN0
LnJpZ2h0IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3
YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDApOwotCi0gICAgICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCB8fCByZXN1
bHQgPT0gRDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VSRU1PVkVE
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKIH0KIAogRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKQEAgLTU2NSw2ICs2MDYs
OCBAQCBFR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkCiAgICAgcmV0dXJu
IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
IElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQpAQCAtNTc1LDYgKzYxOCw4IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpT
dXJmYWNlOjpnZXRSZW5kZXJUYXIKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVw
dGhTdGVuY2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAxMjI3MzgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNiArNjksNyBAQCBwcml2YXRlOgogCiAgICAgRGlzcGxheSAqY29uc3QgbURp
c3BsYXk7CiAgICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0
ZW5jaWw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkqIG1SZW5kZXJUYXJnZXQ7CiAgICAgSURpcmVj
dDNEVGV4dHVyZTkqIG1PZmZzY3JlZW5UZXh0dXJlOwpAQCAtNzgsNiArNzksNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ViY2xhc3NXaW5kb3coKTsKICAgICB2b2lkIHVuc3ViY2xhc3NXaW5kb3co
KTsKICAgICBib29sIHJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNr
YnVmZmVySGVpZ2h0KTsKKyAgICBib29sIHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdM
aW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KTsKICAgICBzdGF0aWMgRFdPUkQgY29udmVydEludGVy
dmFsKEVHTGludCBpbnRlcnZhbCk7CiAKICAgICBjb25zdCBIV05EIG1XaW5kb3c7ICAgICAgICAg
ICAgLy8gV2luZG93IHRoYXQgdGhlIHN1cmZhY2UgaXMgY3JlYXRlZCBmb3IuCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiAx
MjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMDgsNiArMTEwOCwxMSBAQCBFR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xQb3N0U3ViQnVmZmVyTlYoCiAKICAgICB0cnkKICAgICB7CisgICAgICAgIGlmICh4IDwg
MCB8fCB5IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAg
ICB9CisKICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKICAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2aXNpb24gMTIyNzM4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5j
ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVm
ZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEwLDYgKzMxMSw3IEBA
IHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICoKICAgICAgICAgbVN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5
LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBv
cnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREZXB0
aFRleHR1cmVTdXBwb3J0KCk7CiAKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURl
dmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwogCkBAIC00MDUsNiArNDA3LDEx
IEBAIHZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIG1DYWNoZWRDdXJyZW50
UHJvZ3JhbSA9IE5VTEw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgp
Cit7CisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Cit9CisKIHZvaWQgQ29udGV4dDo6bWFy
a0NvbnRleHRMb3N0KCkKIHsKICAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05U
RVhUX09OX1JFU0VUX0VYVCkKQEAgLTE2NDYsNiArMTY1MywxMiBAQCBib29sIENvbnRleHQ6Omdl
dEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElP
Tl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoK
KyAgICAgICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUk9H
UkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklO
QVJZX0FOR0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENvbnRleHQ6OmdldFF1
ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoK
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAgICAgY2FzZSBHTF9S
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgY2FzZSBHTF9OVU1fUFJPR1JB
TV9CSU5BUllfRk9STUFUU19PRVM6CisgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1B
VFNfT0VTOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOwpAQCAtMTgzNSwxMyArMTg1MCwzMSBAQCBib29sIENvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAorICAgIC8vIGlmIHRo
ZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVMTCBjb2xv
cmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4gIFRoaXMg
c2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgorICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICByZW5k
ZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIoKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVi
dWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0ZSByZW5k
ZXJidWZmZXIgZm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAg
IGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGludCByZW5k
ZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KCk7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9i
amVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICAgICAg
eworICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51
bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxv
c3QKICAgICAgICAgfQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVy
VGFyZ2V0KTsKQEAgLTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbgogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0g
MDsKICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKKyAg
ICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAg
ICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJEZXB0
aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlcHRoYnVmZmVyU2VyaWFs
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAg
ICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkg
IT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBSZW5k
ZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGVu
Y2lsYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0U2VyaWFsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVy
LT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFw
cGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4Nyw5ICsxOTIyLDE0IEBAIGJvb2wgQ29u
dGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgbURlcHRoU3RlbmNpbElu
aXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsK
KyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorCiAgICAgaWYgKCFtUmVu
ZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5nZWQpCiAgICAgewot
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAg
aWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdApAQCAtMTkxNSwxMSArMTk1NSwxMCBAQCBib29sIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUudmlld3BvcnRY
LCBtU3RhdGUudmlld3BvcnRZLCBtU3RhdGUudmlld3BvcnRXaWR0aCwgbVN0YXRlLnZpZXdwb3J0
SGVpZ2h0LCBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpOwotICAgICAgICB2aWV3cG9ydC5YID0g
Y2xhbXAocmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
V2lkdGgpKTsKLSAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKHJlY3QudG9wLCAwTCwgc3RhdGlj
X2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgIHZpZXdwb3J0
LldpZHRoID0gY2xhbXAocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0
LlgpKTsKLSAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAocmVjdC5ib3R0b20gLSByZWN0
LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBz
dGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7CisgICAgICAgIHZpZXdwb3J0LlggPSBjbGFt
cChtU3RhdGUudmlld3BvcnRYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERl
c2MuV2lkdGgpKTsKKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFks
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKKyAgICAg
ICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExPTkc+
KHZpZXdwb3J0LlgpKTsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAobVN0YXRlLnZp
ZXdwb3J0SGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlkpKTsKICAgICAgICAgdmlld3BvcnQu
TWluWiA9IHpOZWFyOwogICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsKICAgICB9CkBAIC0x
OTQxLDExICsxOTgwLDExIEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBp
Z24KICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3RhdGUuc2Npc3Nvclgs
IG1TdGF0ZS5zY2lzc29yWSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRlLnNjaXNzb3JIZWln
aHQsIG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBj
bGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5X
aWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRvcCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVj
dC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcChyZWN0
LmJvdHRvbSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkp
OworICAgICAgICAgICAgUkVDVCByZWN0OworICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2xhbXAo
bVN0YXRlLnNjaXNzb3JYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
V2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAw
TCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7CisgICAgICAg
ICAgICByZWN0LnJpZ2h0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JX
aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Cisg
ICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5z
Y2lzc29ySGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0KSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7CiAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwg
VFJVRSk7CiAgICAgICAgIH0KQEAgLTE5NjAsMjYgKzE5OTksMjYgQEAgYm9vbCBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0g
JiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgICAgIEdM
aW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpOworICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBm
IC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CisgICAgICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCi0g
ICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29y
ZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRlcGVuZHMgb24gU2hh
ZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1PYmpl
Y3QtPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBmbG9hdCBoID0gbVN1cHBvcnRzU2hh
ZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDogbVN0YXRlLnZpZXdwb3J0SGVp
Z2h0IC8gMi4wZjsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdp
ZHRoIC8gMi4wZiwgaCwgCisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29t
cHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4KKyAgICAgICAg
R0xpbnQgY29vcmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsKKyAgICAg
ICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0IC8gMi4wZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9h
dCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmll
d3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTRm
dihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYo
Y29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+
Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KHpGYXIg
LSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAgIHByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBHTGludCBkZXB0aFJh
bmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAg
R0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxvY2F0aW9u
KCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIg
LSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5n
ZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2
KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9
IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCArMjAyOSwxNyBAQCBib29sIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVt
IGRyYXdNb2RlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmpl
Y3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIEdMZW51bSBhZGp1c3RlZEZyb250RmFj
ZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0KLSAgICBHTGludCBmcm9udEND
VyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOwotICAgIEdMaW50IGNj
dyA9IChhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1PYmplY3QtPnNl
dFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOworICAgIEdMaW50IGZyb250Q0NXID0gcHJv
Z3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xpbnQgY2N3ID0gKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
MWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9n
cmFtT2JqZWN0LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOworICAgIEdMaW50IHBvaW50
c09yTGluZXMgPSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwog
ICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBw
cm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9u
dCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAm
YWx3YXlzRnJvbnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9
IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJvb2wgemVyb0NvbG9yTWFz
a0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7CkBAIC0yMDE1LDcgKzIw
NTMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgewog
ICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9k
ZShtU3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9k
ZShtU3RhdGUuY3VsbE1vZGUsIG1TdGF0ZS5mcm9udEZhY2UpKTsKICAgICAgICAgfQogICAgICAg
ICBlbHNlCiAgICAgICAgIHsKQEAgLTIxMTUsMzIgKzIxNTMsMzIgQEAgdm9pZCBDb250ZXh0Ojph
cHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0
ZW5jaWxTaXplKCkpIC0gMTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
YWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQz
RFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0
YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJT
X0NDV19TVEVOQ0lMRlVOQywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVz
MmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKIAotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8g
RDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxS
ZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1T
dGF0ZS5zdGVuY2lsTWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1df
U1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0
YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sg
OiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7CiAKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNp
bEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
WkZBSUwsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpG
QUlMLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRT
dGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19T
VEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCisgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVw
dGhQYXNzKSk7CiAKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVk
RnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19T
VEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NX
X1NURU5DSUxGVU5DLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKIAotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBE
M0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJh
Y2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhT
dGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1B
U0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBE
M0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA8IChHTGludCltYXhT
dGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQz
RFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJh
Y2tNYXNrKTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRG
cm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lM
RkFJTCwgCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUws
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5j
aWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJ
TCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250
RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNT
LCAKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2Ug
PT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9w
KG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKICAgICAgICAgfQogICAgICAgICBl
bHNlCkBAIC0yMjgwLDE4ICsyMzE4LDIwIEBAIEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVm
ZmVyKGNvbnN0IEcKIHZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKIHsKICAgICBQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCiAg
ICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbVNlcmlh
bCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9
IHByb2dyYW1PYmplY3QtPmdldFZlcnRleFNoYWRlcigpOwotICAgICAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0UGl4ZWxTaGFkZXIoKTsK
KyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
cGl4ZWxTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbFNoYWRlcigpOwogCiAgICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKICAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPmRp
cnR5QWxsVW5pZm9ybXMoKTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jt
cygpOwogICAgICAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRT
ZXJpYWwoKTsKICAgICB9CiAKLSAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Cisg
ICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCiAvLyBBcHBsaWVzIHRoZSB0
ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCkBAIC0y
MzExLDMwICsyMzUxLDMyIEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCiB2b2lkIENv
bnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKIHsKICAgICBQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCiAgICAg
aW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8vIFJh
bmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCiAgICAgdW5z
aWduZWQgaW50ICphcHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwp
ID8gbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsKICAg
ICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6IEQz
RFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBpbnQgc2FtcGxlclJhbmdlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKIAogICAgIGZvciAoaW50
IHNhbXBsZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlcklu
ZGV4KyspCiAgICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJl
IGltYWdlIHVuaXQgaW5kZXgKKyAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4
dHVyZSBpbWFnZSB1bml0IGluZGV4CiAgICAgICAgIGludCBkM2RTYW1wbGVyID0gc2FtcGxlcklu
ZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKIAogICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7CisgICAg
ICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBs
ZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwogCiAgICAgICAgICAgICBUZXh0dXJl
ICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZXhTZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJl
U2VyaWFsKCk7CiAKLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVy
SW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0
eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQorICAgICAgICAgICAg
aWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpk
M2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwogCiAgICAgICAgICAgICAgICAgaWYg
KGQzZFRleHR1cmUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
YXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJl
U2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlh
bCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3Jh
cFMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwVCA9IHRleHR1cmUtPmdl
dFdyYXBUKCk7CkBAIC0yMzUxLDcgKzIzOTMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVy
ZXMoU2FtcGxlclR5cGUgCiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkg
fHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFw
cGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUt
Pmhhc0RpcnR5SW1hZ2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNkVGV4dHVyZSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNjEsNyArMjQwMyw3IEBAIHZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSkt
PmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYXBw
bGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJp
YWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQyOSw3ICsyNDcxLDcgQEAgdm9pZCBDb250ZXh0
OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogCiAgICAgSFJFU1VMVCByZXN1bHQ7CiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOwotICAgIGJvb2wgZGlyZWN0
VG9QaXhlbHMgPSBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgp
IDw9IDQgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYKKyAgICBib29sIGRpcmVjdFRv
UGl4ZWxzID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkg
PD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgogICAgICAgICAgICAgICAgICAg
ICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYg
VUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQg
JiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAg
LTI0NTEsNiArMjQ5Myw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGlu
dCAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwogICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjQ4MSwxMyArMjUyNCwxMyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwg
R0xpbnQgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEM0RMT0NLRURfUkVDVCBsb2Nr
OwotICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBkZXNjLkhlaWdodCk7Ci0gICAgcmVjdC5sZWZ0ID0gY2xhbXAocmVjdC5sZWZ0LCAwTCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QudG9wID0gY2xhbXAocmVjdC50
b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotICAgIHJlY3QucmlnaHQg
PSBjbGFtcChyZWN0LnJpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwot
ICAgIHJlY3QuYm90dG9tID0gY2xhbXAocmVjdC5ib3R0b20sIDBMLCBzdGF0aWNfY2FzdDxMT05H
PihkZXNjLkhlaWdodCkpOworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSBjbGFtcCh4
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJlY3QudG9wID0gY2xh
bXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7CisgICAgcmVjdC5yaWdo
dCA9IGNsYW1wKHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsK
KyAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05H
PihkZXNjLkhlaWdodCkpOwogCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKICAgICByZXN1bHQg
PSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkp
OwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjUwNSwxMyArMjU0OCwxMyBAQCB2b2lk
IENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgaW50IGlucHV0UGl0Y2g7
CiAgICAgaWYgKGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSkKICAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOwotICAgICAgICBpbnB1dFBpdGNoID0gbG9j
ay5QaXRjaDsKKyAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSAr
IGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOworICAgICAgICBpbnB1
dFBpdGNoID0gLWxvY2suUGl0Y2g7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNv
dXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNo
OworICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICAgICAg
aW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7CiAgICAgfQogCiAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCkBAIC0yNzM4LDYgKzI3ODEsNyBAQCB2b2lk
IENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERl
c2MoJmRlc2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShk
ZXNjLkZvcm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5j
aWxTaXplKSAtIDE7CkBAIC0yOTUyLDcgKzI5OTYsNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAgYXBwbHlUZXh0dXJl
cygpOwogCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZh
bHNlKSkKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+
dmFsaWRhdGVTYW1wbGVycyhOVUxMKSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgfQpAQCAtMzA0Miw3ICszMDg2LDcgQEAgdm9pZCBDb250
ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIAogICAgIGFwcGx5U2hhZGVycygpOwogICAg
IGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRh
dGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9n
cmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0zNDUyLDYgKzM0OTYs
MTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dAogICAgIHJldHVy
biBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCitib29sIENvbnRleHQ6OnN1
cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRo
VGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25z
dAogewogICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBAIC0zNjc3LDYgKzM3MjYs
NyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIH0KIAogICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIC8v
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOwogICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAKQEAgLTM3MjAsNiArMzc3
MCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAogICAgIC8vIEFOR0xFLXNw
ZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAg
eworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7
CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CkBA
IC0zODIwLDE3ICszODc1LDE3IEBAIHZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50
IHNyY1gKIAogICAgIGlmIChzcmNZMCA8IHNyY1kxKQogICAgIHsKLSAgICAgICAgc291cmNlUmVj
dC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9
IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBy
ZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRyYXdC
dWZmZXJIZWlnaHQgLSBkc3RZMDsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBzcmNZMTsK
KyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7CisgICAgICAgIHNvdXJjZVJlY3QudG9w
ID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkwOwogICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZ
MDsKLSAgICAgICAgZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkwOwotICAg
ICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBzcmNZMTsKLSAgICAg
ICAgZGVzdFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkxOworICAgICAgICBz
b3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kwOworICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZ
MDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMTsKKyAgICAgICAgZGVzdFJlY3QudG9w
ID0gZHN0WTE7CiAgICAgfQogCiAgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNl
UmVjdDsKQEAgLTQwNDMsNyArNDA5OCwxMyBAQCB2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZl
cihHTGludCBzcmNYCiAKICAgICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aFN0ZW5jaWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3RGVwdGhTdGVuY2ls
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2lsLCBOVUxM
LCBkcmF3RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgICAgICBy
ZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBkcmF3RGVwdGhTdGVuY2ls
LT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAg
ICAgIHsKQEAgLTQxMTUsNiArNDE3Niw4IEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
OjphcHBseURlY2wKICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FU
VFJJQlMgKyAxXTsKICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1sw
XTsKIAorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQogICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQpAQCAtNDE3
MCw3ICs0MjMzLDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbAog
ICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKICAgICAgICAg
ICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAg
IGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgZWxl
bWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAg
ICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRl
eChpKTsKICAgICAgICAgICAgIGVsZW1lbnQrKzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCShyZXZp
c2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIGNsYXNzIFZlcnRleERl
Y2xhcmF0aW9uQ2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1NYXhMcnU7CiAKLSAgICBlbnVt
IHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9OworICAgIGVudW0geyBOVU1f
VkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAgICBzdHJ1Y3QgVkJEYXRhCiAg
ICAgewpAQCAtMjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQKIAogICAgIHZvaWQgbWFrZUN1
cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogCi0g
ICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwogCiAgICAgdmlydHVh
bCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwpAQCAt
NDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkg
Y29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29s
IHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwpA
QCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1TdXBwb3J0c0Zsb2F0
MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJl
czsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBt
U3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwog
ICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcgQEAgRnJhbWVidWZm
ZXI6On5GcmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAg
ICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChOVUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiB9
CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0g
dHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBAQCB1bnNpZ25lZCBp
bnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdlCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRS
ZW5kZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3Ji
dWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJlY3QzRFN1cmZhY2U5
ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGUKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRo
U3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVw
dGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBSZW5kZXJidWZmZXIg
KkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmCiAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9p
bnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0TnVsbENvbG9y
YnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0gbU51bGxDb2xvcmJ1
ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldERl
cHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgRVJS
KCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkgRkJPLiIpOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoICA9IGRlcHRoYnVm
ZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhl
aWdodCgpOworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdpZHRoICE9IG51bGxi
dWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdldEhlaWdodCgpKQor
ICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgbmV3IENvbG9y
YnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBudWxsYnVm
ZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCiB7CiAg
ICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDExIEBAIGJvb2wgRnJh
bWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVz
cygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwogICAg
IGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAt
MTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAgIGlmIChtQ29sb3Ji
dWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEsMzggQEAgR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1h
dCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGNv
bG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYgKElzQ29tcHJlc3Nl
ZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBH
TF9BTFBIQSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5D
RSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBI
QSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgoZHgyZXM6Oklz
RmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAKLSAgICAgICAgICAg
ICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkp
ICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkK
KyAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKKyAgICAgICAg
ICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
PT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdM
X0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3Jt
YXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQogCiAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXIt
PmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsK
ICAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01J
U1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAg
ICB9CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKQEAgLTMwMiwxMSAr
MzQwLDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1E
ZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtRGVwdGhidWZm
ZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90
ZXh0dXJlCi0gICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVy
KCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSArMzUyLDQ0IEBAIEdM
ZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVS
QlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwor
ICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgZWxzZSBpZiAo
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Cisg
ICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1h
dCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUg
T0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50
KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwogICAgICAg
ICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7CisgICAgICAgICAgICBt
aXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdp
ZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+
Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2Ft
cGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7CkBAIC0zNDEsMTEg
KzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKIAogICAgIGlmICht
U3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlmIChtU3RlbmNp
bGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0KLQogICAgICAgICBz
dGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNp
bGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAg
aWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAg
IGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFn
bDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9
IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFs
VGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAg
ICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOwor
CisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBh
cyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMv
QU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Rl
cHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkK
ICAgICAgICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAg
ICAgICAgICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpOworICAgICAgICAg
ICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBzdGVuY2ls
YnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQogICAgICAgICBlbHNl
IGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKSkKICAgICAgICAgewpA
QCAtMzc4LDE0ICs0NTcsMTcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVS
QlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgLy8g
aWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVm
ZXIgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tl
ZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5jaWwKKyAgICBp
ZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNp
bGJ1ZmZlcikpCiAgICAgewotICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIHN0ZW5jaWxi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwK
LSAgICAgICAgICAgIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKSAhPSBzdGVuY2lsYnVmZmVyLT5n
ZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9V
TlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25l
IGF0dGFjaG1lbnQgdG8gYmUgY29tcGxldGUKKyAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FU
VEFDSE1FTlQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJh
bWVidWZmZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3
IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgUmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigp
OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKICAgICBSZW5kZXJidWZmZXIg
KmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZl
cigpOwogCiAgICAgR0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOwogICAgIEdMZW51bSBnZXRE
ZXB0aGJ1ZmZlclR5cGUoKTsKQEAgLTczLDYgKzc0LDggQEAgY2xhc3MgRnJhbWVidWZmZXIKICAg
ICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwogICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1
ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwogCisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVy
YnVmZmVyPiBtTnVsbENvbG9yYnVmZmVyUG9pbnRlcjsKKwogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOCw2ICs4LDcgQEAKIC8vIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgogCiAjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTE3LDIyNjEgKzE4LDg1
IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKLSNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTCkKLSNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCi0jZW5kaWYKLQogbmFtZXNwYWNlIGds
CiB7Ci11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwotY29uc3QgY2hh
ciAqZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotc3RkOjpzdHJpbmcgc3RyKGludCBpKQot
ewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQotICAgIDogdHlw
ZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW06OnVuZGVjb3JhdGVVbmlmb3JtKF9u
YW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCi17Ci0gICAgaW50IGJ5dGVzID0gVW5pZm9ybUlu
dGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKLSAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNo
YXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7Ci0gICAgZGlydHkgPSB0cnVl
OwotfQotCi1Vbmlmb3JtOjp+VW5pZm9ybSgpCi17Ci0gICAgZGVsZXRlW10gZGF0YTsKLX0KLQot
Ym9vbCBVbmlmb3JtOjppc0FycmF5KCkKLXsKLSAgICByZXR1cm4gX25hbWUuY29tcGFyZSgwLCAz
LCAiYXJfIikgPT0gMDsKLX0KLQotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29u
c3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwg
ZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCi17Ci19Ci0KLVByb2dyYW06OlByb2dyYW0o
UmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFn
ZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQotewot
ICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwot
ICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotCi0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7
Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlUFMgPSBO
VUxMOwotICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0gICAgbUluZm9Mb2cgPSBOVUxM
OwotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLQotICAgIHVubGluaygpOwotCi0gICAgbURlbGV0
ZVN0YXR1cyA9IGZhbHNlOwotCi0gICAgbVJlZkNvdW50ID0gMDsKLX0KLQotUHJvZ3JhbTo6flBy
b2dyYW0oKQotewotICAgIHVubGluayh0cnVlKTsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyICE9
IE5VTEwpCi0gICAgewotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbUZyYWdt
ZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmF0dGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
VkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVy
dGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOwotICAgICAgICBtVmVydGV4U2hhZGVy
LT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
RlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
bUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1GcmFn
bWVudFNoYWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmRldGFjaFNoYWRlcihTaGFkZXIg
KnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURF
UikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRl
eFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICB9
Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQot
ICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwotICAg
IH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Citjb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0
aCA9ICJDOlxcZmFrZXBhdGgiOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFt
OjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtVmVydGV4
U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsKLX0KK3Vuc2lnbmVk
IGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7CiAKLUlEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQorQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0
ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKIH0KIAotSURpcmVj
dDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkKK0F0dHJpYnV0ZUJp
bmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0
YWJsZTsKIH0KIAotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGlu
ZGV4LCBjb25zdCBjaGFyICpuYW1lKQorSW5mb0xvZzo6SW5mb0xvZygpIDogbUluZm9Mb2coTlVM
TCkKIHsKLSAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7Ci0gICAg
fQogfQogCi1HTHVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAq
bmFtZSkKK0luZm9Mb2c6On5JbmZvTG9nKCkKIHsKLSAgICBpZiAobmFtZSkKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5u
YW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiAtMTsKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKIH0KIAotaW50IFByb2dyYW06OmdldFNl
bWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQotewotICAgIEFTU0VSVChhdHRyaWJ1dGVJ
bmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAK
LSAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOwotfQogCi0vLyBSZXR1
cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQg
UHJvZ3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQoraW50IEluZm9M
b2c6OmdldExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmICghbUlu
Zm9Mb2cpCiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4g
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLX0KLQotLy8gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9u
ZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhl
bCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbTo6
Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCkKLXsKLSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAgIHN3aXRj
aCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1sw
XSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4
IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQotICAgICAg
ICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49
IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11
bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2dp
Y2FsVGV4dHVyZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBSZXR1cm5z
IHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5k
Ci0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVy
dGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUo
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NF
UlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNb
MF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
LSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0g
ICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLSAgICAgICAgQVNT
RVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwotfQotCi1HTGludCBQ
cm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICB1bnNp
Z25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJh
eSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNpemVfdCBvcGVuID0g
bmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFz
dF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09
IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1l
LnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJhc2Uob3Blbik7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVu
aWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBs
b2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
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
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdl
dFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFy
Z2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAy
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsg
KytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIHJldHVybiBz
dHJsZW4obUluZm9Mb2cpICsgMTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQordm9pZCBJbmZvTG9nOjpnZXRMb2coR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KyAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAg
ICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAg
ICAgICAgdiArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIGlmIChtSW5mb0xv
ZykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9
IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOworICAgICAgICAg
ICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9G
TE9BVF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQs
Ci0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgICAg
ICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKIAotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdl
dFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Ci12
b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewot
ICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAg
IGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0g
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBm
b3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9
Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0g
c3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRh
cmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FU
X01BVDIpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsK
LSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMs
Mz4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUg
Kz0gOTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIFByb2dyYW06OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
IHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1
ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
MkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCi0g
ICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwot
Ci0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgIHYs
IHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMy
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAotICAgICAgICAg
ICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBH
TGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZb
aV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpICogMywKLSAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291
bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVh
biopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCi0gICAgICAgICAgICAgICB2
LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
Ci0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJl
ZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlm
b3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJh
bnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0g
VW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBv
bmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVu
aWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICBt
ZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCksCi0gICAgICAgICAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAg
IC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2Ug
ZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRl
cyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlm
ICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+
dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgot
ICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFy
YW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5
cGUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50
ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAg
c3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBH
TGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpZmxvYXRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5U
OgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihH
TGludCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBQcm9ncmFtOjpkaXJ0eUFsbFVuaWZvcm1zKCkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50
IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLS8vIEFwcGxpZXMg
YWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMoKQotewotICAgIGZvciAo
c3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1
ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKLSAgICAgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0gICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YTsKLSAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZv
cm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0s
IGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xf
VkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1u
YnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBs
eVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVu
aWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVu
aWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0
YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLUlEM0QxMEJsb2IgKlByb2dy
YW06OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxl
LCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQotewotICAgIGlmICghaGxzbCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERXT1JEIHJlc3VsdDsK
LSAgICBVSU5UIGZsYWdzID0gMDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OwotICAgIGlm
IChwZXJmQWN0aXZlKCkpCi0gICAgewotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVH
OwotI2lmZGVmIE5ERUJVRwotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT047Ci0jZW5kaWYKLQotICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0
VGVtcFBhdGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwi
IikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxz
bCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19z
dHIoKSwgc291cmNlVGV4dC5zaXplKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsKLSAgICAgICAgc291
cmNlVGV4dCA9IGhsc2w7Ci0gICAgfQotCi0gICAgSUQzRDEwQmxvYiAqYmluYXJ5ID0gTlVMTDsK
LSAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIHJlc3VsdCA9IEQzRENv
bXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBw
cm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7Ci0KLSAgICBpZiAoZXJy
b3JNZXNzYWdlKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBj
aGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICBhcHBlbmRU
b0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7
Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAgICAgICAgZXJyb3JNZXNzYWdl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3Rh
bnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpKSwgY29uc3RhbnRUYWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBiaW5hcnk7Ci19Ci0KLS8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtOjpw
YWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKQotewotICAgIENvbnRleHQg
KmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWlu
ZysrKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpICogdmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50
KHZhcnlpbmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAg
ICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2Vzczsg
cisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1
ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7
IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciAr
IHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mg
JiYgbSA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBt
YXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkr
KykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0g
PyAwIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBz
cGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29s
dW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7
IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0K
LSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmRUb0lu
Zm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkp
OwotCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAw
OwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAg
IHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5n
W3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVy
cysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKLX0KLQotYm9v
bCBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKQotewotICAgIGlmIChtUGl4ZWxITFNMLmVtcHR5KCkg
fHwgbVZlcnRleEhMU0wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3NpZ25tZW50cwotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBtRnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyBmcmFnVmFyICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyBmcmFnVmFyKyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAg
ICAgZnJhZ1Zhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRl
cmF0b3IgdnR4VmFyID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZ0eFZhciAh
PSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZ0eFZhcisrKQotICAgIHsKLSAgICAg
ICAgdnR4VmFyLT5yZWcgPSAtMTsKLSAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0K
LSAgICAvLyBNYXAgdGhlIHZhcnlpbmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCi0gICAgY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07Ci0g
ICAgaW50IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhwYWNraW5nKTsKLQotICAgIGlmIChyZWdp
c3RlcnMgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBDb250ZXh0ICpj
b250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBj
b250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGlmIChyZWdpc3RlcnMg
PT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgbUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
LSAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVm
dCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IG1GcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyBpbnB1dCsrKQotICAgIHsKLSAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7
Ci0KLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gbVZlcnRleFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSBtVmVydGV4U2hhZGVyLT5tVmFyeWlu
Z3MuZW5kKCk7IG91dHB1dCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5u
YW1lID09IGlucHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChv
dXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXpl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZy
YWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9
IGlucHV0LT5jb2w7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
bWF0Y2hlZCkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVu
dCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5u
YW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6
ICJURVhDT09SRCIpOwotCi0gICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaW50IHNlbWFudGljSW5kZXggPSAwOwot
ICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJp
YnV0ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1WZXJ0ZXhITFNMICs9IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiIDog
VEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7Ci0KLSAgICAgICAgc2VtYW50
aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgfQotCi0g
ICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9O
O1xuIjsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewot
ICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1ty
XVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgbVZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAi
IDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwotICAgIH0KLQotICAgIGlm
IChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyAr
IHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIt
Pm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwotICAgIH0KLQotICAgIG1WZXJ0ZXhI
TFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAg
IntcbiI7Ci0KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBt
VmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgbVZl
cnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSAr
ICIgPSAiOwotCi0gICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkg
PiAxKSAgIC8vIE1hdHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4SExTTCArPSAi
dHJhbnNwb3NlIjsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIoaW5wdXQu
IiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQot
Ci0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFp
bigpO1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAg
IFZTX09VVFBVVCBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3Np
dGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkg
PSBnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udztcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0
aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0KLSAgICBpZiAobVZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAx
LjAsICIgKyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtc
biI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0g
ICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBn
bF9Qb3NpdGlvbjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
dmFyeWluZyA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1W
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAg
aWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3Mg
KyBqOwotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiAr
IHN0cihyKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFs
c2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4Kysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNr
aW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3Rl
ciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBpZihzaGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZh
cnlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogbVZlcnRleEhMU0wg
Kz0gIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6
IG1WZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBtVmVydGV4SExTTCArPSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVZlcnRleEhMU0wgKz0gInciOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFt
ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5n
LT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
bVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikg
KyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJc
biIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIn1cbiI7Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIK
LSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0
ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5
aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFy
eWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAi
O1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0
NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAi
O1xuIjsKLSAgICAgICAgaWYgKHNtMykgewotICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQwO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAg
IHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOwot
ICAgIH0KLQotICAgIG1QaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgotICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDogQ09M
T1I7XG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIK
LSAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dClcbiIKLSAg
ICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0g
MS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNt
MykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250YWlucyB0aGUgcmVu
ZGVyIHRhcmdldCBoZWlnaHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAg
ICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9z
LnggKyAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnkgPSBkeF9Db29yZC55IC0gaW5wdXQuZHhfVlBvcy55IC0gMC41O1xuIjsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nvb3JkIGNvbnRhaW5z
IHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBT
ZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAgICAgbVBpeGVsSExTTCAr
PSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4
X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGdsX0ZyYWdDb29yZC55ID0gLShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29y
ZC55ICsgZHhfQ29vcmQudztcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1QaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJo
dykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAi
ICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExT
TCArPSAiICAgIGdsX1BvaW50Q29vcmQgPSBpbnB1dC5nbF9Qb2ludENvb3JkO1xuIjsKLSAgICB9
Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAg
ICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5l
cyB8fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8
PSAwLjApKTtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAg
IGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcg
KyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAg
IiArIHZhcnlpbmctPm5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFy
cmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNM
ICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIG1QaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCi0gICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAg
ICAgICAgICAifVxuIjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBMaW5rcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVp
ciB2YXJ5aW5ncywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5n
IHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5p
Zm9ybXMKLXZvaWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKCk7Ci0KLSAgICBpZiAo
IW1GcmFnbWVudFNoYWRlciB8fCAhbUZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtVmVydGV4U2hhZGVyIHx8ICFt
VmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbVBpeGVsSExTTCA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOwotICAgIG1W
ZXJ0ZXhITFNMID0gbVZlcnRleFNoYWRlci0+Z2V0SExTTCgpOwotCi0gICAgaWYgKCFsaW5rVmFy
eWluZ3MoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDb250ZXh0ICpj
b250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBj
b250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAg
ICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVs
MygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKLQotICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFy
eSA9IGNvbXBpbGVUb0JpbmFyeShtVmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAm
bUNvbnN0YW50VGFibGVWUyk7Ci0gICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5hcnkgPSBjb21waWxl
VG9CaW5hcnkobVBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJs
ZVBTKTsKLQotICAgIGlmICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCi0gICAgewotICAg
ICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigo
RFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFi
bGUpOwotICAgICAgICBIUkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxT
aGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhl
Y3V0YWJsZSk7Ci0KLSAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYg
U1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7Ci0KLSAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNl
KCk7Ci0gICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHZlcnRleEJpbmFy
eSA9IE5VTEw7Ci0gICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKLQotICAgICAgICBpZiAobVZl
cnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFsaW5rQXR0cmlidXRlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMo
bUNvbnN0YW50VGFibGVQUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3Rh
bnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBh
cyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCi0gICAgICAgICAgICAvLyBh
cmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29y
YXRpb24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAgICAgICAgIG1EeENvb3JkTG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7Ci0gICAgICAgICAgICBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUi
KTsKLSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKLQotICAgICAgICAgICAgbUxp
bmtlZCA9IHRydWU7ICAgLy8gU3VjY2VzcwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBEZXRl
cm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQgRGlyZWN0M0QgOSB2
ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKLWJvb2wgUHJvZ3JhbTo6bGlua0F0dHJpYnV0ZXMo
KQotewotICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsKLQotICAgIC8vIExpbmsg
YXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBh
dHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGdldEF0dHJpYnV0ZUJp
bmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAg
Ly8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwotCi0gICAgICAg
ICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLQotICAg
ICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFjdGl2ZSBhdHRyaWJ1
dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFt
ZS5jX3N0cigpLCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAo
bG9jYXRpb24gKyBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAg
Zm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGdl
dEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KTsKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0
cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRU
b0luZm9Mb2coIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5h
bWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0
byBsaW5rCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZh
aWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
aW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7ICkKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IG1WZXJ0ZXhTaGFkZXItPmdldFNlbWFu
dGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAg
IGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBy
b3dzOyByKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0
ZUluZGV4KytdID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSkKLXsKLSAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1BdHRyaWJ1dGVC
aW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9u
XS5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIFByb2dyYW06OmxpbmtVbmlm
b3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWENPTlNU
QU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0gICAgRDNEWENPTlNUQU5U
X0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAx
OwotCi0gICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRUYWJsZURlc2NyaXB0aW9u
KTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAwOyBjb25zdGFudElu
ZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsgY29uc3RhbnRJbmRleCsr
KQotICAgIHsKLSAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRsZSA9IGNvbnN0YW50VGFi
bGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0
YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLQotICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oY29uc3RhbnRIYW5k
bGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRk
cyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRl
ciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcwotLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAo
dW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQotYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3Jt
KGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICBpZiAoY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgcHND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHNDb25zdGFudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBs
ZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJF
X0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1V
c2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCi0gICAgewotICAgICAgY2FzZSBEM0RYUENf
U1RSVUNUOgotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5
SW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBm
aWVsZCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRDNEWEhBTkRM
RSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFu
ZGxlLCBmaWVsZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmll
bGREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRh
YmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9
IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5k
ZXgpICsgIl0iKSA6ICIiOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRp
b24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgotICAgICAgY2FzZSBE
M0RYUENfVkVDVE9SOgotICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6Ci0gICAgICBj
YXNlIEQzRFhQQ19PQkpFQ1Q6Ci0gICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKGNvbnN0YW50
RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0g
ICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwg
X25hbWUpOwotCi0gICAgaWYoIXVuaWZvcm0pCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCi0gICAgR0xpbnQgbG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7Ci0gICAgR0xlbnVtIHR5
cGUgPSB1bmlmb3JtLT50eXBlOwotCi0gICAgaWYgKGxvY2F0aW9uID49IDApCi0gICAgewotICAg
ICAgICBkZWxldGUgdW5pZm9ybTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XS0+dHlwZSAhPSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluaXRpYWxpemVD
b25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnBzLCBtQ29uc3RhbnRUYWJsZVBTKTsK
LSAgICBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlmb3JtLT52cywgbUNv
bnN0YW50VGFibGVWUyk7Ci0KLSAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwotICAg
IHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKLQotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCi0g
ICAgewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25h
bWUsIGksIHVuaWZvcm1JbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1V
bmlmb3JtICpQcm9ncmFtOjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgaWYg
KGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgotICAgICAgICAgICAgc3dpdGNo
IChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX1NBTVBMRVJDVUJFOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfQk9P
TDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9C
T09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lO
VF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcwotICAgIHsKLSAgICAgICAgc3dp
dGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEQzRFhQVF9GTE9BVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5S
b3dzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0
cHV0SExTTDo6ZGVjb3JhdGUKLXN0ZDo6c3RyaW5nIFByb2dyYW06OmRlY29yYXRlQXR0cmlidXRl
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywg
ImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICJfIiArIG5hbWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwot
fQotCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUpCi17Ci0gICAgaWYgKF9uYW1lWzBdID09ICdfJykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBfbmFtZS5zdWJzdHIoMSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKF9uYW1lLmNvbXBh
cmUoMCwgMywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gX25hbWUuc3Vic3Ry
KDMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gX25hbWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6
YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGlu
dCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQotewotICAgIGZsb2F0IHZlY3RvcltEM0Q5X01B
WF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKLSAgICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9P
TF9DT05TVEFOVFNdOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQg
JiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCB8fAotICAg
ICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgewotICAgICAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRo
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsg
al0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0
ID09IEQzRFhSU19CT09MIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0JPT0wpCi0gICAg
ewotICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19CT09MID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6IDA7Ci0gICAg
ICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJT
X0JPT0wgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50
IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZz
Q291bnQpKTsKLSAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNU
QU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFk
ZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgdmVjdG9yLCB0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9PTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAg
ICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQot
Ym9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFw
cGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZl
Y3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICAg
ICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckluZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBs
ZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZl
KTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2Fs
VGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVySW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXg7Ci0KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCAr
IGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0g
dltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgKGNv
bnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmFw
cGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZl
Y3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7Ci0K
LSAgICAgICAgdiArPSAyOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlm
b3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW06OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAg
ICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZs
b2F0KXZbMl0sIDApOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZv
cm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9
IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlf
TUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwg
KGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0
OwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVj
dG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9y
bW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVD
VE9SNCAqdmVjdG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyU2V0ID09
IEQzRFhSU19GTE9BVDQpOwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIGlmIChsZW5ndGgpCiAgICAgewotICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FU
NCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CiAgICAgfQog
fQogCiAvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9n
LgogLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUg
b2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCiAvLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxs
IG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBQ
cm9ncmFtOjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKK3Zv
aWQgSW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAg
c3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwogCiAgICAgc2l6ZV90IGZvdW5kOwogICAgIGRvCiAg
ICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKKyAgICAgICAgZm91bmQg
PSBtc2cuZmluZChnX2Zha2VwYXRoKTsKICAgICAgICAgaWYgKGZvdW5kICE9IHN0ZDo6c3RyaW5n
OjpucG9zKQogICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxlbihm
YWtlcGF0aCkpOworICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtlcGF0
aCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6
bnBvcyk7CiAKLSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cuY19zdHIoKSk7CisgICAg
YXBwZW5kKCIlc1xuIiwgbXNnLmNfc3RyKCkpOwogfQogCi12b2lkIFByb2dyYW06OmFwcGVuZFRv
SW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3ZvaWQgSW5mb0xvZzo6YXBwZW5kKGNv
bnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIGlmICghZm9ybWF0KQogICAgIHsKQEAgLTIz
MDQsNyArMTI5LDcgQEAgdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhcgog
ICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQordm9pZCBJbmZvTG9nOjpy
ZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAgLTIzMTMsOTkgKzEzOCwxNzAg
QEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0KIH0KIAotLy8gUmV0dXJucyB0
aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5n
LCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQor
UHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUp
IDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlz
c3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3Ry
dWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7
CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOwor
ICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291bnQgPSAwOworfQogCi0gICAg
ICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hh
ZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAg
ICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmsodHJ1ZSk7CiAK
LSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZlcnRleFNoYWRlciAhPSBOVUxM
KQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgp
OwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICBpZiAobUZyYWdtZW50
U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlmIChtQ29uc3RhbnRUYWJsZVBT
KQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYg
KHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBO
VUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKG1Db25zdGFudFRhYmxl
VlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7CisgICAg
ICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXIt
PmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBtQ29uc3Rh
bnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwor
ICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21l
bnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKICAg
ICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsr
KQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYg
KHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAgICAgICBt
TGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAgIG1TZW1hbnRpY0lu
ZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hh
ZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAot
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsg
aW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOworICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkg
PT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbVNhbXBsZXJzUFNbaW5kZXhd
LmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAx
IDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQgQXR0cmlidXRlQmluZGluZ3M6
OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7
CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgIHsKLSAgICAgICAgbVNh
bXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtQXR0
cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BdHRy
aWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAgfQorfQorCit2b2lkIFByb2dy
YW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwg
bmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4
ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRo
ZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5k
IGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkK
K3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAw
OwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1JbmZvTG9nLnJlc2V0KCk7
CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIG1Qcm9ncmFtQmluYXJ5ID0g
bmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xv
ZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpKQog
ICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jt
cy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwogICAgIH0KK30KIAotICAgIG1E
eERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0g
LTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5n
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAgIGZvciAoaW50IGxvY2F0aW9u
ID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCisgICAgewor
ICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0
dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtVW5pZm9ybUluZGV4LmNs
ZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVsSExTTC5jbGVhcigpOwotICAg
IG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBh
biB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCit2
b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYgKGRlc3Ryb3kpICAg
Ly8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRT
aGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgp
OworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQogCi0gICAg
ZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOworICAgICAgICBpZiAobVZl
cnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFz
ZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQorICAgIHsK
KyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJvZ3JhbUJpbmFyeSA9
IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkKK1Byb2dyYW1CaW5h
cnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHJldHVybiBtTGlua2VkOwor
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRl
ZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CisgICAgdW5saW5rKGZh
bHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7CiB9CiAKIHZvaWQgUHJv
Z3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAgdW5zaWduZWQgaW50IFByb2dy
YW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25z
dAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0g
ICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKIH0KIAogdm9pZCBQcm9ncmFt
OjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZv
TG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewot
ICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xv
ZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICB9Ci0K
LSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsK
LSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4
OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5m
b0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4
Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCkBAIC0yNTAzLDE1MiArMzc2
LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkKIAogdm9pZCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQogewotICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0gICAgdW5zaWduZWQg
aW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKLSAg
ICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlKyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0
ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKKyAgICAgICAgbVByb2dyYW1CaW5hcnktPmdldEFj
dGl2ZUF0dHJpYnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsK
ICAgICB9Ci0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgZWxzZQogICAgIHsKLSAgICAgICAg
Y29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19z
dHIoKTsKLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7Ci0gICAgICAg
IG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQorICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0g
c3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAgICAgICAgIH0KLSAgICB9
CiAKLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQot
Ci0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKKyAgICAgICAg
KnR5cGUgPSBHTF9OT05FOworICAgICAgICAqc2l6ZSA9IDE7CisgICAgfQogfQogCiBHTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCiB7Ci0gICAgaW50IGNvdW50ID0gMDsK
LQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQogICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5u
YW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAg
ICByZXR1cm4gY291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1h
eExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRy
aWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVN
YXhMZW5ndGgoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKIH0KIAogdm9pZCBQcm9ncmFtOjpnZXRBY3Rp
dmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICAvLyBTa2lw
IG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9
IDA7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm07Ci0gICAgZm9yICh1bmlmb3JtID0gMDsgdW5p
Zm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICBpZiAobVByb2dyYW1CaW5h
cnkpCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUo
MCwgMywgImR4XyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsr
OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgs
IGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQotCi0gICAgQVNTRVJU
KHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIg
dGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQorICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5KCkp
CisgICAgICAgIGlmIChidWZzaXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgc3RyaW5n
ICs9ICJbMF0iOworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFt
ZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCiAgICAgICAgIGlmIChsZW5ndGgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgICAgICAqbGVuZ3Ro
ID0gMDsKICAgICAgICAgfQotICAgIH0KIAotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1d
LT5hcnJheVNpemU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKKyAg
ICAgICAgKnNpemUgPSAwOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7CisgICAgfQogfQogCiBH
TGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQogewotICAgIGludCBjb3VudCA9
IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51
bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1CaW5hcnkpCiAgICAg
ewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAz
LCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAg
fQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAg
ICByZXR1cm4gY291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhM
ZW5ndGgoKQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4Kysp
CisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKCFtVW5pZm9ybXNb
dW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5u
YW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSAr
IDEpOwotICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGlu
ZyBpbiAiWzBdIi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6
bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsK
IH0KIAogdm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQpAQCAtMjY2MywxNjEgKzQ4MCwy
OCBAQCBib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uCiAKIHZvaWQgUHJv
Z3JhbTo6dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAgIG1JbmZvTG9nLnJl
c2V0KCk7CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkK
ICAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3Vj
Y2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgICAg
ICBtUHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0KICAgICBlbHNlCiAg
ICAgewotICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTYW1w
bGVycyh0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRl
ZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVT
YW1wbGVycyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1w
bGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRo
ZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVu
dCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAotICAgIC8vIERy
YXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElP
TiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7Ci0gICAgICAg
IHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7ICsraSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNhbFRleHR1cmVV
bml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsb2dF
cnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0lu
Zm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhU
VVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVy
c1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxl
cnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1
bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVV
bml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVy
c1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQg
PSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlciB1bmlmb3JtICgl
ZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5pdCwg
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0gdGV4
dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyBy
ZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJz
VlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbUlu
Zm9Mb2cuYXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIp
OwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dyYW06OmluaXRpYWxp
emVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5pZm9ybTo6UmVnaXN0
ZXJJbmZvICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQorYm9vbCBQcm9n
cmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBoYW5kbGUgPSBjb25z
dGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5fbmFtZS5jX3N0
cigpKTsKLSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7Ci0g
ICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQzRFhDT05TVEFOVF9E
RVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29uc3Rh
bnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICAgICAgcmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5k
ZXg7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdp
c3RlckNvdW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVk
KCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0g
MDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQgUHJvZ3JhbTo6Z2V0
RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdl
TG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06Omdl
dER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247
Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9n
cmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9u
dENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2Nh
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0K
LQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSw3IEBACiAjZGVm
aW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCiAKICNpbmNsdWRlIDxkM2R4OS5oPgotI2luY2x1ZGUg
PGQzZGNvbXBpbGVyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KICNp
bmNsdWRlIDxzZXQ+CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCkBAIC0yNSw0MiAr
MjMsMzYgQEAgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogY2xhc3MgRnJhZ21lbnRTaGFkZXI7CiBj
bGFzcyBWZXJ0ZXhTaGFkZXI7CiAKLS8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2lu
Z2xlIHNoYWRlciB1bmlmb3JtCi1zdHJ1Y3QgVW5pZm9ybQotewotICAgIFVuaWZvcm0oR0xlbnVt
IHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7
Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBH
TGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQg
bmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUK
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBj
b25zdCBnX2Zha2VwYXRoOwogCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBib29sIGRp
cnR5OworY2xhc3MgQXR0cmlidXRlQmluZGluZ3MKK3sKKyAgcHVibGljOgorICAgIEF0dHJpYnV0
ZUJpbmRpbmdzKCk7CisgICAgfkF0dHJpYnV0ZUJpbmRpbmdzKCk7CiAKLSAgICBzdHJ1Y3QgUmVn
aXN0ZXJJbmZvCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0gICAgICAgIGludCBy
ZWdpc3RlckluZGV4OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OworICAgIHZv
aWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7
CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNv
bnN0OwogCi0gICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKKyAgcHJp
dmF0ZToKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIH07CiAKLS8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlm
b3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3QgVW5pZm9y
bUxvY2F0aW9uCitjbGFzcyBJbmZvTG9nCiB7Ci0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCk7CisgIHB1YmxpYzoKKyAgICBJbmZvTG9nKCk7CisgICAgfkluZm9Mb2coKTsKKworICAgIGlu
dCBnZXRMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CiAKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICB2
b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBjaGFyICppbmZvLCAuLi4pOworICAgIHZvaWQgcmVzZXQoKTsKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5mb0xvZyk7CisgICAgY2hhciAqbUluZm9M
b2c7CiB9OwogCiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0NSArNjYsMTIgQEAgY2xhc3MgUHJvZ3Jh
bQogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKICAgICBpbnQgZ2V0QXR0
YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKIAotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
Z2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhT
aGFkZXIoKTsKLQogICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwg
Y29uc3QgY2hhciAqbmFtZSk7Ci0gICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0
IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRl
eCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVy
ZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAg
R0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIEdMaW50
IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKLSAgICBib29sIHNldFVuaWZv
cm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwot
ICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wg
c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRVbmlm
b3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOwot
Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBn
ZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24o
KSBjb25zdDsKLSAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Owot
ICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpcnR5QWxsVW5pZm9y
bXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKIAogICAgIHZvaWQgbGluaygpOwotICAg
IGJvb2wgaXNMaW5rZWQoKTsKKyAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgp
OworCiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIGdldEluZm9M
b2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwogICAg
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50
LCBHTHVpbnQgKnNoYWRlcnMpOwpAQCAtMTMyLDkwICs5MSwyNCBAQCBjbGFzcyBQcm9ncmFtCiAg
ICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCB2YWxpZGF0
ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycyk7CiAgICAgYm9v
bCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNv
bnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGlj
IHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7
ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZhdGU6CiAgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRv
QmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3Rh
bnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9
IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1td
WzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRl
cygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRU
YWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50
SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3Rk
OjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBh
cHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBi
b29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFu
ICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNEWENvbnN0YW50VGFibGUg
KmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29u
c3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAq
aW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsK
ICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAq
bVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhMU0w7Ci0gICAgc3RkOjpz
dHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJpbmRp
bmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOwotICAg
IElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgIElEM0RYQ29u
c3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1D
b25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJp
bmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0
ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVY
X0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0
aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVU
eXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYg
c3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVu
aWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3Jt
SW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhE
ZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGlu
dCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsK
LSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9ncmFtQmluYXJ5KiBtUHJv
Z3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0
ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQot
ICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsKIAogICAgIHVuc2lnbmVk
IGludCBtUmVmQ291bnQ7CiAKQEAgLTIyNSw2ICsxMTgsOCBAQCBjbGFzcyBQcm9ncmFtCiAKICAg
ICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiAgICAgY29uc3QgR0x1aW50IG1I
YW5kbGU7CisKKyAgICBJbmZvTG9nIG1JbmZvTG9nOwogfTsKIH0KIApJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDgwIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dy
YW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgIWRl
ZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NP
TVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwor
I2VuZGlmCisKK25hbWVzcGFjZSBnbAoreworc3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAg
IGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAi
JWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUp
CisgICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5k
ZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQg
Ynl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOworICAgIGRhdGEg
PSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsK
KyAgICBkaXJ0eSA9IHRydWU7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkKK3sKKyAgICBkZWxl
dGVbXSBkYXRhOworfQorCitib29sIFVuaWZvcm06OmlzQXJyYXkoKQoreworICAgIHJldHVybiBf
bmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOworfQorCitVbmlmb3JtTG9jYXRpb246OlVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVt
ZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRl
Y29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK3sK
K30KKworUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSgpCit7CisgICAgbURldmljZSA9IGdl
dERldmljZSgpOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbVZlcnRleEV4
ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOworICAgIG1Db25z
dGFudFRhYmxlVlMgPSBOVUxMOworCisgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworCisgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAg
ICB7CisgICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOworICAgIH0KKworICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgr
KykKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1ZTW2lu
ZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZSA9IDA7CisgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7CisKKyAgICBtRHhEZXB0aFJh
bmdlTG9jYXRpb24gPSAtMTsKKyAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7CisgICAgbUR4Q29v
cmRMb2NhdGlvbiA9IC0xOworICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOworICAg
IG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKKyAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24g
PSAtMTsKK30KKworUHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQoreworICAgIGlmICht
UGl4ZWxFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1Db25zdGFu
dFRhYmxlUFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgeworICAgICAgICBtQ29uc3Rh
bnRUYWJsZVZTLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOworICAgICAgICBt
VW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICB9Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAq
UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVybiBtUGl4ZWxFeGVj
dXRhYmxlOworfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRW
ZXJ0ZXhTaGFkZXIoKQoreworICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKworR0x1
aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisgICAgaWYgKG5hbWUpCisgICAgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBQcm9ncmFt
QmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUyk7CisgICAgCisgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsK
K30KKworLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXgg
dXNlZC4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBTQU1QTEVS
X1BJWEVMOgorICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKKyAgICAgIGNh
c2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1h
Z2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8g
aW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBz
aGFkZXIpLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5
cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBHTGludCBsb2dpY2Fs
VGV4dHVyZVVuaXQgPSAtMTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNh
bXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOworCisgICAgICAgIGlmIChtU2FtcGxl
cnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9naWNh
bFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNBTVBMRVJfVkVSVEVY
OgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXpl
b2YobVNhbXBsZXJzVlNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9
IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwg
KEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisg
ICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2
ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCisvLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBp
eGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitUZXh0dXJlVHlwZSBQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAg
ICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6
ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKyAgICAgICAgQVNTRVJU
KG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBjYXNlIFNBTVBMRVJfVkVS
VEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9z
aXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0udGV4dHVyZVR5cGU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBURVhUVVJFXzJEOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2Ny
aXB0ID0gMDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQg
cmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rf
b2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOworICAg
IGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkg
LSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsg
MSkuY19zdHIoKSk7CisgICAgICAgIG5hbWUuZXJhc2Uob3Blbik7CisgICAgfQorCisgICAgdW5z
aWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlv
bisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0g
bmFtZSAmJgorICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBz
dWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAg
ICAgICAgICAgIHRhcmdldFsxXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAg
ICAgICAgdiArPSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfRkxPQVRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsx
XSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAgICAgICAgdGFyZ2V0
WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAgICAgdiArPSAyOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
Qk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChH
TGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0ZMT0FUX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAgICAgICB0YXJnZXRb
MV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKKyAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAgICAgICAgIHYgKz0g
MzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
KEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyAr
K2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9h
dCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQs
IGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KK3ZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6
bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1p
bih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CisKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNv
cHlXaWR0aDsgeCsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVp
Z2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGgg
KyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICB9CisgICAgfQorICAg
IC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNv
cHlIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8
IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFy
Z2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gY2xlYXIgdW5m
aWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWln
aHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7
IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhd
ID0gKFQpMDsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOworICAgICAgICB0YXJnZXQgKz0g
ODsKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xf
RkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxMjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZh
bHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDEyOworICAgICAgICB2YWx1ZSArPSA5OworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0
KSAqIDE2KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKKyAg
ICAgICAgdGFyZ2V0ICs9IDE2OworICAgICAgICB2YWx1ZSArPSAxNjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8y
RCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAorICAgICAgICAgICAgICAgdiwg
c2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCisgICAg
ICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihH
TGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwK
KyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
ZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0
aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAorICAgIGlmIChidWZTaXplKQorICAg
IHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdl
dFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiAxMik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50
ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisK
KyAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+
dHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdM
X0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVv
ZihHTGZsb2F0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9h
dCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMg
PSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUg
dGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAoYnVmU2l6ZSkKKyAg
ICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50
LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5z
cG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogMTYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29t
cG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVu
aWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBl
KHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFt
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgbWVtY3B5KHBh
cmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmRp
cnR5QWxsVW5pZm9ybXMoKQoreworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlm
b3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51
bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGly
dHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBm
b3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlm
b3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVu
ZCgpOyB1YiAhPSB1ZTsgKyt1YikgeworICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
KnViOworCisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICAg
ICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAg
ICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAg
ICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlm
b3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
T09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBi
KTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlm
b3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3Jt
LCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2
KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXpl
LCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBw
bHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRV
bmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
fQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGlu
dG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGls
ZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIg
KnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAgaWYg
KCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgRFdPUkQg
cmVzdWx0OworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7
CisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJ
TEVfREVCVUc7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9T
S0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBh
dGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNs
aW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0
cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNl
VGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworICAg
ICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNEMTBCbG9iICpiaW5hcnkg
PSBOVUxMOworICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgcmVzdWx0
ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGdfZmFrZXBhdGgsIE5VTEwsIE5VTEws
ICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOworCisg
ICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2Ug
PSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7CisKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVz
IiwgaGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisKKyAgICAgICAgZXJy
b3JNZXNzYWdlLT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAg
fQorCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBEM0RYR2V0U2hh
ZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVm
ZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFyeS0+UmVsZWFzZSgp
OworCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBiaW5hcnk7Cit9
CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNp
bmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJl
di4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1i
ZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBQ
cm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWlu
ZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCit7CisgICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGZv
ciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
dmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlp
bmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVt
bkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3Vj
Y2VzczsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxl
ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFp
bGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJs
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7
CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5
XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9
PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdb
eV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0g
biAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyBy
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdb
cl1bY29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVy
cyA9IDA7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
CisgICAgeworICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBh
Y2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVn
aXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQor
Citib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6
OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBp
ZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lz
dGVyIGFzc2lnbm1lbnRzCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9
IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCisgICAgeworICAgICAgICBmcmFnVmFy
LT5yZWcgPSAtMTsKKyAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIr
KykKKyAgICB7CisgICAgICAgIHZ0eFZhci0+cmVnID0gLTE7CisgICAgICAgIHZ0eFZhci0+Y29s
ID0gLTE7CisgICAgfQorCisgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIg
ZmlsZQorICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNd
WzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywg
cGFja2luZywgZnJhZ21lbnRTaGFkZXIpOworCisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhMU0wg
aW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250
ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVs
MygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGlt
dW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVj
dG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0Zy
YWdDb29yZCIpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykK
KyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+
dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWlu
ZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5y
ZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworCisgICAgICAg
ICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1h
dGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB2
YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOworCisgICAgdmVy
dGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6
aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogdmVydGV4SExTTCArPSAiICAg
IGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4
SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gz
ICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShh
dHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7
XG4iOworCisgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1
dGUtPnR5cGUpOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVn
aXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1ty
XVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7
CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUp
ICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtc
biI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisgICAg
aWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCisgICAg
ICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRv
ciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0
ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7
CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmli
dXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7CisgICAgICAgICAgICB2ZXJ0
ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4i
OworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBv
dXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLngg
KiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKyBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3Np
dGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56
ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7CisK
KyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1Bv
aW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9T
TTMpICsgIik7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdD
b29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWlu
ZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAq
IHJvd3MgKyBqOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIg
PSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJl
Z2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0g
Jip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhM
U0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1l
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmct
PmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmVydGV4SExTTCArPSAiXG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAg
ICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAg
ICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJl
ZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAg
ICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9W
UG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7CisgICAgfQorCisgICAg
aWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisgICAgcGl4
ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgorICAgICAgICAg
ICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgewor
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFn
Q29vcmQudztcbiI7CisgICAgICAgIAorICAgICAgICBpZiAoc20zKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3Mu
eCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQu
eSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQg
d2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdD
b29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9D
b29yZC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55
ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53
O1xuIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCAr
IGR4X0RlcHRoLnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQu
dyA9IHJodztcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50
Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRD
b29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xuIjsK
KyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAg
eworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09y
TGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZh
Y2UgPD0gMC4wKSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJl
ZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
ICIgKyB2YXJ5aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5h
cnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCAr
PSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBV
VCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAg
ICAgICAifVxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKQoreworICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hh
ZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHBp
eGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CisgICAgc3RkOjpzdHJpbmcgdmVy
dGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworCisgICAgaWYgKCFsaW5rVmFyeWlu
Z3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDb250
ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2Zp
bGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8w
IjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRl
ck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKworICAgIElEM0QxMEJsb2IgKnZlcnRl
eEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHZl
cnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJRDNEMTBCbG9iICpwaXhlbEJp
bmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQ
cm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBp
eGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZl
clBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxS
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKwor
ICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJl
bGVhc2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5h
cnkgPSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVj
dXRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9M
b2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NI
QURFUiwgbUNvbnN0YW50VGFibGVQUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtVbmlm
b3JtcyhpbmZvTG9nLCBHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRl
Y29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisgICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQg
cHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAg
ICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVw
dGhSYW5nZSIpOworICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfRGVwdGgiKTsKKyAgICAgICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImR4X0Nvb3JkIik7CisgICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiKTsKKyAgICAgICAg
ICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NX
Iik7CisgICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKKworICAgICAgICAgICAgY29udGV4dC0+bWFya0R4
VW5pZm9ybXNEaXJ0eSgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGlu
ZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2Fn
ZSBpbmRpY2VzCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sK
KyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4o
KTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0
QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlv
biAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0
ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7
CisKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3Rp
dmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRy
aWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJvd3M7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25z
IHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2Nh
dGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmlu
ZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFi
bGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUlu
ZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVS
VEVYX0FUVFJJQlMpOworCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwg
YXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmli
dXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXgg
PSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dD
b3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFi
bGUgKmNvbnN0YW50VGFibGUpCit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb247CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb24pOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRl
eCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRz
OyBjb25zdGFudEluZGV4KyspCisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFu
ZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisKKyAg
ICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlO
VCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFu
dFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0
aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgY29uc3Rh
bnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5
IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nl
c2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFtQmluYXJ5Ojpk
ZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhI
QU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlw
dGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1D
b25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRp
b24uTmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRU
YWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUp
OworCisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0
U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1w
bGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJl
VHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/
IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEs
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRh
YmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2Ny
aXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJS
YW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hh
ZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaChjb25zdGFudERl
c2NyaXB0aW9uLkNsYXNzKQorICAgIHsKKyAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5
SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBm
aWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOwor
CisgICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247
CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisKKyAgICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25z
dGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3Vu
dCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikgOiAi
IjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hh
ZGVyLCBmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgorICAgICAgY2Fz
ZSBEM0RYUENfVkVDVE9SOgorICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6CisgICAg
ICBjYXNlIEQzRFhQQ19PQkpFQ1Q6CisgICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKHNoYWRl
ciwgY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24s
IGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBVbmlmb3JtICp1bmlmb3JtID0gY3Jl
YXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7CisKKyAgICBpZighdW5pZm9y
bSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBp
ZiBhbHJlYWR5IGRlZmluZWQKKyAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlv
bih1bmlmb3JtLT5uYW1lKTsKKyAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7CisKKyAg
ICBpZiAobG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlmb3JtOworICAg
ICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB9CisKKyAgICBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikgdW5pZm9ybS0+
cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOworICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVY
X1NIQURFUikgICB1bmlmb3JtLT52cy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7CisKKyAgICBp
ZiAobG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB1bmlmb3JtLT50eXBlID09
IHR5cGU7CisgICAgfQorCisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKKyAgICB1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQorICAg
IHsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1l
LCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVW5p
Zm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2Fs
YXJzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKKyAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBU
X0JPT0w6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xf
VkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgorICAgICAgICAgICAgc3dpdGNoIChjb25z
dGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFu
dERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBEM0RYUFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uUm93cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9N
QVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNo
IE91dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0
ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21w
YXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gbmFtZTsKK30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZv
cm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBf
bmFtZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgYW55IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9u
CisgICAgc2l6ZV90IHBvcyA9IDA7CisgICAgd2hpbGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwg
cG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAgICBuYW1lLnJlcGxhY2Uo
cG9zLCAyLCAiLiIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0
aW9uCisgICAgaWYgKG5hbWVbMF0gPT0gJ18nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWUu
c3Vic3RyKDEpOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIp
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMyk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBuYW1lOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNv
bnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTICogNF07CisgICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRT
XTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDQ7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRo
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsg
al0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgg
Pj0gMCkKKyAgICB7CisgICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9v
bEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKKyAgICAg
ICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQgY29weUNvdW50ID0g
c3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOworICAg
ICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwor
ICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAw
KQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0
VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdp
c3RlckNvdW50KTsKKyAgICB9CisgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0
NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25z
dGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9y
bS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9y
LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQp
CisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCisg
ICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5p
Zm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RB
TlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZl
Y3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVy
SW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBz
LmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJD
b25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCopdmVj
dG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleCA+PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnNh
bXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXgg
PCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0
aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwg
KGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OmFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7Cisg
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwg
MCwgMCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0
YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0g
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAo
ZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisK
KyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7
CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7CisgICAgRDNE
WFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RY
VkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlsz
XSk7CisKKyAgICAgICAgdiArPSA0OworICAgIH0KKworICAgIGFwcGx5VW5pZm9ybW5pdih0YXJn
ZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKQoreworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhcmdl
dFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZs
b2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAgbURl
dmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NElu
ZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0
IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6Omdl
dEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAg
Ly8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZl
QXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0
cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykK
KyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7CisgICAgfQor
CisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5n
ID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAgICBz
dHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFd
ID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAq
bGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAx
OyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0gbUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAg
Zm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQor
CitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQorewor
ICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAw
OyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykK
KyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFt
ZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgo
aW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSks
IG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOwor
fQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBH
THNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlw
ZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3Jtcwor
ICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5p
Zm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsg
dW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5j
b21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZVVu
aWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkp
OyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJp
bmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1
bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIlsw
XSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBi
dWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlm
IChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJy
YXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dM
aW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNv
dW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4
IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhM
ZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4Kysp
CisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5
KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAgICAgICBpZiAobVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9n
cmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQoreworICAgIGFwcGx5VW5pZm9y
bXMoKTsKKyAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoJmluZm9Mb2cpKQorICAgIHsKKyAgICAg
ICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
VmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRh
dGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKQoreworICAgIC8vIGlmIGFueSB0d28gYWN0aXZl
IHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIg
dG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBj
dXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5kCisgICAg
Ly8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BF
UkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQorICAgIHsKKyAg
ICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOworICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytp
KQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4
dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGluZm9Mb2cpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9n
LT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBU
RVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1w
bGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBs
ZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2Ug
dW5pdCAoJWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
VW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxl
cnNWU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0
ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVk
KSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBt
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0
dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZl
ciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNb
aV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9j
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Cit9CisK
K0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4
Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Cit9
CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBv
aW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0u
aDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBv
YmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9CSU5B
UllfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisKKyNpbmNsdWRlIDxk
M2R4OS5oPgorI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50
U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2Vu
dGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlm
b3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNBcnJheSgpOworCisg
ICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgX25hbWU7ICAgLy8g
RGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAgICAvLyBVbmRlY29y
YXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2ln
bmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVjdCBSZWdpc3Rlcklu
Zm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVySW5kZXggPSAtMTsKKyAgICAg
ICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleDsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0ZMT0FUNDogIGZs
b2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50
RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9PSAoaW50KWNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICByZWdpc3RlckNvdW50
ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OworICAgICAgICB9CisKKyAgICAg
ICAgaW50IGZsb2F0NEluZGV4OworICAgICAgICBpbnQgc2FtcGxlckluZGV4OworICAgICAgICBp
bnQgYm9vbEluZGV4OworCisgICAgICAgIGludCByZWdpc3RlckNvdW50OworICAgIH07CisKKyAg
ICBSZWdpc3RlckluZm8gcHM7CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsKKworLy8gU3RydWN0
IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlz
IHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWdu
ZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50
IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworfTsKKworLy8gVGhpcyBpcyB0aGUg
cmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBi
ZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5hcnkKK3sKKyAgcHVi
bGljOgorICAgIFByb2dyYW1CaW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFyeSgpOworCisgICAg
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZl
cnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgR0x1aW50IGdldEF0dHJpYnV0
ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGlu
dCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVy
VHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBUZXh0dXJlVHlwZSBn
ZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCk7CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBl
KTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAg
ICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29s
IHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBnZXRVbmlmb3Jt
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Cisg
ICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
aW50ICpwYXJhbXMpOworCisgICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25z
dDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXRE
eENvb3JkTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Owor
ICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lk
IGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIGJv
b2wgbGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmli
dXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOworICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4
Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOworCisgICAgdm9pZCBnZXRB
Y3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGlu
dCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0
ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5
cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7Cisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworCisgICAgdm9pZCB2YWxpZGF0
ZShJbmZvTG9nICZpbmZvTG9nKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAq
aW5mb0xvZyk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgc3RhdGljIHN0
ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAg
Ly8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3Jh
dGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcg
dW5kZXJzY29yZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW1CaW5hcnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmluYXJ5KEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29u
c3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVy
ICpmcmFnbWVudFNoYWRlcik7CisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
Zywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwor
CisgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1
dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rVW5pZm9y
bXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhDb25zdGFudFRhYmxlICpj
b25zdGFudFRhYmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oSW5mb0xvZyAmaW5mb0xvZywg
R0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQz
RFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0g
IiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBEM0RYQ09O
U1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
OworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBib29sIGFw
cGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBs
eVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
RDNEWFZFQ1RPUjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25zdCBHTGJvb2xlYW4g
KnYpOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZHVyaW5n
IGxpbmtpbmcuCisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVBTOworICAg
IElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKKworICAgIEF0dHJpYnV0ZSBt
TGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgaW50IG1TZW1hbnRpY0lu
ZGV4W01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3QgU2FtcGxlcgorICAgIHsKKyAg
ICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAg
ICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsKKworICAgIFNhbXBsZXIgbVNh
bXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIFNhbXBsZXIgbVNhbXBsZXJz
VlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisgICAgR0x1aW50IG1Vc2Vk
VmVydGV4U2FtcGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwor
CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OworICAgIFVu
aWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9j
YXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKKwor
ICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0
aW9uOworICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247CisgICAgR0xpbnQgbUR4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uOworICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CisgICAgR0xpbnQg
bUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworCisgICAgYm9vbCBtVmFsaWRhdGVkOworfTsKK30K
KworI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDY4ICs2MywxNDQg
QEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbAogICAgIHJldHVybiBk
eDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1SZW5kZXJidWZmZXJU
ZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJn
ZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVt
ZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFy
Z2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1UZXh0dXJlMkQuc2V0
KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZl
cmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBh
cyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2
b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3Zv
aWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCisv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdl
dFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJ
RGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwo
KQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cit9
CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4dHVyZS5zZXQodGV4
dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKIH0KIAotUmVuZGVy
YnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIG1UZXh0dXJlLnNl
dChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Cit9
CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVy
biAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwo
KSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwo
bVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVu
dGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkg
OiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwor
fQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQogCiAvLyBUZXh0dXJl
cyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5j
ZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3Rp
ZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmU6
OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQog
ewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRleHR1cmVDdWJlTWFw
LT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6cmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsK
LSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4dHVyZUN1YmVNYXAt
PnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZm
ZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCitJ
RGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRh
cmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7
CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwog
fQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0RGVwdGhTdGVu
Y2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBO
VUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QK
K0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0g
Ci1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNvbnN0CisKK0dMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CiB9Ci0gCi1H
TGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAorCitH
TGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmU6Omdl
dEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXREM0RGb3Jt
YXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0
dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vuc2lnbmVkIGludCBS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1cm4g
bVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CiB9CiAKKy8v
Ly8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJlbmRlcmJ1ZmZlcjo6
UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkg
OiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CkBA
IC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0CiAg
ICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQog
ewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwogfQogCisvLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERl
cHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTdGVuY2lsKCk7
CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVy
U3RvcmFnCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFj
ZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJu
IE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkg
KlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5V
TEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAgICAg
fQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpDb2xv
cmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAg
LTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVy
KAogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNl
OSAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogeworICAgIGlmIChtRGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAg
fQorCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNp
b24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogCiBuYW1lc3BhY2Ug
Z2wKIHsKLWNsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcDsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVw
dGhTdGVuY2lsYnVmZmVyOwpAQCAtNTgsMTIgKzU5LDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZQogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZh
Y2UpOwogfTsKIAotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUoVGV4
dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
KFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CiAKLSAgICB2aXJ0dWFsIH5SZW5k
ZXJidWZmZXJUZXh0dXJlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKICAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogICAg
IHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwpAQCAtODAsOSAr
ODEsMzcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBSZW5kZQogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUpOworICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCi0gICAgQmluZGlu
Z1BvaW50ZXIgPFRleHR1cmU+IG1UZXh0dXJlOworICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJl
MkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9OworCitjbGFzcyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKKyAg
cHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
OworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1YWwgR0xzaXplaSBn
ZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBn
ZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZUN1
YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKICAgICBHTGVudW0gbVRhcmdldDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJ
KHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBT
aGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLAogewogICAgIGludCBpbmRleCA9IDA7
CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAg
ICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsK
LSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgfQorICAgICAg
ICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4o
YnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAgICAgICBtZW1jcHko
aW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1ZlNpemUp
Ci0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQogCkBAIC0xNDcs
MTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsCiB7
CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAgaWYgKGJ1ZlNpemUg
PiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwot
ICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXgg
PSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7CisgICAgICAgICAg
ICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGJ1
ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB0eXBlZGVmIHN0ZDo6
bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7Ci0gICAgZnJpZW5k
IFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAKICAgcHVibGljOgog
ICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwpAQCAt
MTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGUK
IAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBQcm9n
cmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1YmxpYzoKICAgICBW
ZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsMTIgQEAgdW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleAogCiBzdGF0aWMgRDNERk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsK
LSAgICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAg
ICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIGlm
IChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9J
TlRaOworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKICAgICB9
CkBAIC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0
VHlwCiAKIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZv
cm1hdCkKIHsKKyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQogICAgIHN3aXRjaChmb3JtYXQpCiAgICAgewogICAgICAgY2Fz
ZSBEM0RGTVRfTDg6CkBAIC05NSw2ICsxMDMsMjEgQEAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShEMwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGlubGluZSBE
V09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlKQoreworICAgIERXT1JEIGQzZHVzYWdlID0gMDsKKworICAgIGlm
IChkM2RmbXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICBkM2R1c2FnZSB8PSBEM0RV
U0FHRV9ERVBUSFNURU5DSUw7CisgICAgfQorICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8
IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQorICAgIHsKKyAgICAgICAgZDNkdXNhZ2UgfD0g
RDNEVVNBR0VfUkVOREVSVEFSR0VUOworICAgIH0KKyAgICByZXR1cm4gZDNkdXNhZ2U7Cit9CisK
IEltYWdlOjpJbWFnZSgpCiB7CiAgICAgbVdpZHRoID0gMDsgCkBAIC0xNTUsNiArMTc4LDggQEAg
dm9pZCBJbWFnZTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1Rl
eHR1cmUgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsK
ICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOworICAgIGNv
bnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKKyAgICBBU1NFUlQoZDNk
Rm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBk
ZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAg
ICB7CkBAIC0xNzgsNyArMjAzLDcgQEAgdm9pZCBJbWFnZTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAg
ICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50OwogICAgICAgICB9CiAKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lk
dGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGdldEQzREZvcm1hdCgp
LAorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJl
cXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZDNkRm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKQEAgLTI2NCw5ICsyODksMTMgQEAgdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGly
ZWN0M0RTdXJmYQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0
U3VyZmFjZSgpOwogCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCisgICAg
aWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKICAgICB7
Ci0gICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKKyAgICAgICAgUkVDVCByZWN0OworICAgICAgICBy
ZWN0LmxlZnQgPSB4b2Zmc2V0OworICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7CisgICAgICAg
IHJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHJlY3QuYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKIAogICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VE
KQogICAgICAgICB7CkBAIC0yODQsMTIgKzMxMywyNCBAQCB2b2lkIEltYWdlOjp1cGRhdGVTdXJm
YWNlKElEaXJlY3QzRFN1cmZhCiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVz
aWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3Jl
ZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3Rh
bmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGlu
ZS4KKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCiB2b2lkIEltYWdlOjpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gLUNvbXB1dGVQ
aXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKLSAgICBpbnB1dCA9
ICgoY2hhciopaW5wdXQpIC0gaW5wdXRQaXRjaCAqIChoZWlnaHQgLSAxKTsKKyAgICBSRUNUIGxv
Y2tSZWN0ID0KKyAgICB7CisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZz
ZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAorICAgIH07CisKKyAgICBEM0RMT0NLRURfUkVD
VCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKIAogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0y
OTcsMjkgKzMzOCwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
CiAgICAgICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRBbHBoYURhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQz
REZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4
KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQo
KSA9PSBEM0RGTVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdM
X1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRh
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRw
dXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAg
fQpAQCAtMzI4LDcgKzM3Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW4KICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAtMzM3LDcgKzM4NSw3
IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgc3dp
dGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2Fk
UkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyArMzk0LDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQp
CiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdC
QTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgIH0KQEAgLTM1NiwxOSArNDA0LDE5IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRleHR1
cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRo
YXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2Fk
QWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEFscGhhRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQp
OworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAg
bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFG
bG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgIH0KQEAgLTM3OCwyOCArNDI2LDMwIEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8vIGZsb2F0IHRleHR1
cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRo
YXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2Fk
QWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRBbHBo
YUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAg
IGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRS
R0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CisKKyAg
ICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1h
Z2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTgsNyBAQCB2b2lkIEltYWdlOjps
b2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAwOwpAQCAtNDE5LDcgKzQ2OSw0NyBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50
IHhvZmZzZXQsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBp
bnQgKmRlc3QgPSBOVUxMOworICAgIF9fbTEyOGkgemVyb1dpZGUgPSBfbW1fc2V0emVyb19zaTEy
OCgpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOworCisgICAgICAgIGludCB4OworICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxp
Z25lZAorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZk
ZXN0W3hdKSAmIDB4RikgIT0gMCAmJiB4IDwgd2lkdGgpOyB4KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwg
MjQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQor
ICAgICAgICB7CisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBp
NjQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOworICAgICAg
ICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5
dGUgdG8gemVybworICAgICAgICAgICAgc291cmNlRGF0YSA9IF9tbV91bnBhY2tsb19lcGk4KHpl
cm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJp
dCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybworICAgICAgICAgICAgX19t
MTI4aSBsbyA9IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7CisgICAg
ICAgICAgICBfX20xMjhpIGhpID0gX21tX3VucGFja2hpX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VE
YXRhKTsKKworICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19t
MTI4aSo+KCZkZXN0W3hdKSwgbG8pOworICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50
ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3ggKyA0XSksIGhpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEhhbmRsZSB0aGUgcmVtYWluZGVyCisgICAgICAgIGZvciAoOyB4IDwgd2lkdGg7
IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJ
bWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00MjgsNyArNTE4LDcgQEAgdm9pZCBJbWFn
ZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAg
ICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDM5LDcgKzUyOSw3IEBA
IHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2YKICAgICB9CiB9CiAKLXZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQWxw
aGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDQ4LDcgKzUzOCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IDA7CkBAIC00NTksMTcgKzU0OSwxNiBAQCB2b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxm
RmxvYXREYXRhKEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9v
bCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0
aXZlPyAxOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0
UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKIAogICAg
ICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKICAgICAgICAg
ewpAQCAtNDg4LDcgKzU3Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMaW50
IHhvZmYKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Cit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDk3LDcgKzU4
Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNl
W3hdOwpAQCAtNTA4LDcgKzU5Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERh
dGEoR0xpbnQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtNTE3LDcgKzYwNiw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VI
YWxmRmxvYXREYXRhKEcKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAg
IHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0
cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKQEAg
LTUyOCwxNyArNjE3LDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRh
KEcKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBi
b29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVyUGl4ZWwgPSBu
YXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKICAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0
CiAgICAgICAgIHsKQEAgLTU1Nyw3ICs2NDUsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFEYXRhKEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsKQEAgLTU2Niw3ICs2NTQsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGEoCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAg
ICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZz
ZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01NzcsNyArNjY1LDcgQEAgdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKAogICAgIH0KIH0KIAotdm9pZCBJ
bWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC01ODYsNyArNjc0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0
RAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhv
ZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewog
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKQEAgLTU5Nyw3ICs2
ODUsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRECiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJH
QlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtNjA2LDcgKzY5NCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRS
R0JVQnl0ZURhdGEoR0xpbnQgeG9mZnMKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzcwNSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JV
Qnl0ZURhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNjI2LDcgKzcx
NCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgcmdiYSA9IHNvdXJjZVt4XTsKQEAgLTYzOCw3ICs3MjYsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
UkdCNTY1RGF0YShHTGludCB4b2Zmc2V0CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdC
RmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTY0Nyw3ICs3
MzUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzCiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVt4ICogMyArIDBdOwpAQCAtNjU4LDcgKzc0Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9h
dERhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwpAQCAtNjY3LDcgKzc1NSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
aW50IHgKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
ICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAg
ICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKQEAg
LTY3OCw3ICs3NjYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4
CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
IHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBAIC02ODgsNyArNzc2
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50IAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQpOworICAg
ICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGludCB4
ID0gMDsKIAogICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZApAQCAtNzIwLDcg
KzgwOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTGludCAKICAgICB9
CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9h
ZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTcyOCw3ICs4MTYsNyBAQCB2b2lkIEltYWdlOjps
b2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2ZmCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNCk7CisgICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKIAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCiAgICAgICAgIHsKQEAgLTczOCw3ICs4MjYsNyBAQCB2b2lkIEltYWdlOjpsb2Fk
UkdCQVVCeXRlRGF0YShHTGludCB4b2ZmCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdC
QTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKQEAg
LTc0Nyw3ICs4MzUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZz
CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03NTksNyArODQ3LDcgQEAgdm9pZCBJ
bWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTGludCB4b2ZmcwogICAgIH0KIH0KIAotdm9pZCBJbWFn
ZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7CkBAIC03NjgsNyArODU2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShH
TGludCB4b2ZmcwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewog
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
KHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAtNzgwLDcgKzg2OCw3
IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAK
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkFG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3Vy
Y2UgPSBOVUxMOwpAQCAtNzg5LDEyICs4NzcsMTIgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9h
dERhdGEoR0xpbnQgeG9mZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zm
c2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAg
ICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7CiAgICAgfQogfQogCi12b2lkIElt
YWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtODAzLDEyICs4OTEsMTIgQEAgdm9pZCBJbWFnZTo6
bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQ
aXRjaCAgKyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBtZW1jcHkoZGVzdCwg
c291cmNlLCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywyODMgKzkwNSwzNyBA
QCB2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgCiAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlOjps
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QgewotICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkpCi0gICAgewotICAg
ICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAg
ICAgICAgbG9hZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgRmxpcENv
cHlEWFQxQmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQq
IGRlc3QpIHsKLSAgLy8gQSBEWFQxIGJsb2NrIGxheW91dCBpczoKLSAgLy8gWzAtMV0gY29sb3Iw
LgotICAvLyBbMi0zXSBjb2xvcjEuCi0gIC8vIFs0LTddIGNvbG9yIGJpdG1hcCwgMiBiaXRzIHBl
ciBwaXhlbC4KLSAgLy8gU28gZWFjaCBvZiB0aGUgNC03IGJ5dGVzIHJlcHJlc2VudHMgb25lIGxp
bmUsIGZsaXBwaW5nIGEgYmxvY2sgaXMganVzdAotICAvLyBmbGlwcGluZyB0aG9zZSBieXRlcy4K
LQotICAvLyBGaXJzdCAzMi1iaXRzIGlzIHR3byBSR0I1NjUgY29sb3JzIHNoYXJlZCBieSB0aWxl
IGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1vZGlmaWVkLgotICBkZXN0WzBdID0gc291cmNlWzBd
OwotCi0gIC8vIFNlY29uZCAzMi1iaXRzIGNvbnRhaW5zIDQgcm93cyBvZiA0IDItYml0IGludGVy
cG9sYW50cyBiZXR3ZWVuIHRoZSBjb2xvcnMuIEFsbCByb3dzIHNob3VsZCBiZSBmbGlwcGVkLgot
ICBkZXN0WzFdID0gKHNvdXJjZVsxXSA+PiAyNCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0g
PDwgOCkgJiAweDAwRkYwMDAwKSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsxXSA+PiA4KSAmIDB4
MDAwMEZGMDApIHwKLSAgICAgICAgICAgIChzb3VyY2VbMV0gPDwgMjQpOwotfQotCi0vLyBGbGlw
cyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDEgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgot
c3RhdGljIHZvaWQgRmxpcENvcHlEWFQxQmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291
cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgZGVz
dFswXSA9IHNvdXJjZVswXTsKLSAgZGVzdFsxXSA9ICgoc291cmNlWzFdIDw8IDgpICYgMHgwMDAw
RkYwMCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAwMDAwMEZGKTsKLX0K
LQotLy8gRmxpcHMgYSBmdWxsIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGlj
IHZvaWQgRmxpcENvcHlEWFQzQmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1
bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQzIGJsb2NrIGxheW91dCBpczoKLSAgLy8g
WzAtN10gIGFscGhhIGJpdG1hcCwgNCBiaXRzIHBlciBwaXhlbC4KLSAgLy8gWzgtMTVdIGEgRFhU
MSBibG9jay4KLQotICAvLyBGaXJzdCBhbmQgU2Vjb25kIDMyIGJpdHMgYXJlIDRiaXQgcGVyIHBp
eGVsIGFscGhhIGFuZCBuZWVkIHRvIGJlIGZsaXBwZWQuCi0gIGRlc3RbMF0gPSAoc291cmNlWzFd
ID4+IDE2KSB8IChzb3VyY2VbMV0gPDwgMTYpOwotICBkZXN0WzFdID0gKHNvdXJjZVswXSA+PiAx
NikgfCAoc291cmNlWzBdIDw8IDE2KTsKLQotICAvLyBBbmQgZmxpcCB0aGUgRFhUMSBibG9jayB1
c2luZyB0aGUgYWJvdmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2NrRnVsbChzb3VyY2Ug
KyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxpbmVzIG9mIGEgRFhU
MyBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlwQ29weURYVDNCbG9j
a0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGludCogZGVzdCkgewot
ICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0gKHNvdXJjZVsxXSA+PiAxNikgfCAo
c291cmNlWzFdIDw8IDE2KTsKLSAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRl
c3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgYSBmdWxsIERYVDUgYmxvY2sgaW4gdGhlIHkgZGlyZWN0
aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGlu
dCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQ1IGJsb2NrIGxheW91
dCBpczoKLSAgLy8gWzBdICAgIGFscGhhMC4KLSAgLy8gWzFdICAgIGFscGhhMS4KLSAgLy8gWzIt
N10gIGFscGhhIGJpdG1hcCwgMyBiaXRzIHBlciBwaXhlbC4KLSAgLy8gWzgtMTVdIGEgRFhUMSBi
bG9jay4KLQotICAvLyBUaGUgYWxwaGEgYml0bWFwIGRvZXNuJ3QgZWFzaWx5IG1hcCBsaW5lcyB0
byBieXRlcywgc28gd2UgaGF2ZSB0bwotICAvLyBpbnRlcnByZXQgaXQgY29ycmVjdGx5LiAgRXh0
cmFjdGVkIGZyb20KLSAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL3JlZ2lzdHJ5L3NwZWNzL0VY
VC90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMudHh0IDoKLSAgLy8KLSAgLy8gICBUaGUgNiAiYml0
cyIgYnl0ZXMgb2YgdGhlIGJsb2NrIGFyZSBkZWNvZGVkIGludG8gb25lIDQ4LWJpdCBpbnRlZ2Vy
OgotICAvLwotICAvLyAgICAgYml0cyA9IGJpdHNfMCArIDI1NiAqIChiaXRzXzEgKyAyNTYgKiAo
Yml0c18yICsgMjU2ICogKGJpdHNfMyArCi0gIC8vICAgICAgICAgICAgICAgICAgIDI1NiAqIChi
aXRzXzQgKyAyNTYgKiBiaXRzXzUpKSkpCi0gIC8vCi0gIC8vICAgYml0cyBpcyBhIDQ4LWJpdCB1
bnNpZ25lZCBpbnRlZ2VyLCBmcm9tIHdoaWNoIGEgdGhyZWUtYml0IGNvbnRyb2wgY29kZQotICAv
LyAgIGlzIGV4dHJhY3RlZCBmb3IgYSB0ZXhlbCBhdCBsb2NhdGlvbiAoeCx5KSBpbiB0aGUgYmxv
Y2sgdXNpbmc6Ci0gIC8vCi0gIC8vICAgICAgIGNvZGUoeCx5KSA9IGJpdHNbMyooNCp5K3gpKzEu
LjMqKDQqeSt4KSswXQotICAvLwotICAvLyAgIHdoZXJlIGJpdCA0NyBpcyB0aGUgbW9zdCBzaWdu
aWZpY2FudCBhbmQgYml0IDAgaXMgdGhlIGxlYXN0Ci0gIC8vICAgc2lnbmlmaWNhbnQgYml0Lgot
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNlKSk7Ci0gIHVuc2ln
bmVkIGNoYXIqIGRlc3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdGF0aWNf
Y2FzdDx2b2lkKj4oZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEgPSBzb3VyY2VCeXRl
c1syXSArIDI1NiAqIChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5dGVzWzRdKTsKLSAg
dW5zaWduZWQgaW50IGxpbmVfMl8zID0gc291cmNlQnl0ZXNbNV0gKyAyNTYgKiAoc291cmNlQnl0
ZXNbNl0gKyAyNTYgKiBzb3VyY2VCeXRlc1s3XSk7Ci0gIC8vIHN3YXAgbGluZXMgMCBhbmQgMSBp
biBsaW5lXzBfMS4KLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5lXzBfMSAmIDB4MDAw
ZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmVfMF8xICYgMHhm
ZmYwMDApID4+IDEyKTsKLSAgLy8gc3dhcCBsaW5lcyAyIGFuZCAzIGluIGxpbmVfMl8zLgotICB1
bnNpZ25lZCBpbnQgbGluZV8zXzIgPSAoKGxpbmVfMl8zICYgMHgwMDBmZmYpIDw8IDEyKSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8yXzMgJiAweGZmZjAwMCkgPj4gMTIpOwot
ICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVzWzFdID0gc291cmNl
Qnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfM18yICYgMHhmZjsKLSAgZGVzdEJ5dGVz
WzNdID0gKGxpbmVfM18yICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNbNF0gPSAobGluZV8z
XzIgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIGRlc3RCeXRlc1s1XSA9IGxpbmVfMV8wICYgMHhmZjsK
LSAgZGVzdEJ5dGVzWzZdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNb
N10gPSAobGluZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0KLSAgLy8gQW5kIGZsaXAgdGhlIERY
VDEgYmxvY2sgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICBGbGlwQ29weURYVDFCbG9ja0Z1
bGwoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5l
cyBvZiBhIERYVDUgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENv
cHlEWFQ1QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQq
IGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgY29uc3QgdW5zaWduZWQgY2hhciog
c291cmNlQnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBkZXN0Qnl0ZXMgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGRlc3QpKTsKLSAg
dW5zaWduZWQgaW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYgKiAoc291cmNlQnl0
ZXNbM10gKyAyNTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGludCBsaW5lXzFfMCA9
ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RCeXRlc1swXSA9IHNvdXJj
ZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sxXTsKLSAgZGVzdEJ5dGVz
WzJdID0gbGluZV8xXzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAobGluZV8xXzAgJiAweGZm
MDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzFfMCAmIDB4ZmYwMDAwKSA+PiAxNjsK
LSAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5wdXQpIHsKICAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CiAgICAgQVNTRVJUKHlv
ZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8fCB3aWR0aCA9PSAy
IHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9PSAwKTsKLSAgICBB
U1NFUlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAg
ICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91
dHB1dCk7CiAKLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0
LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNB
Y3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiAyOworICAgIFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgICAg
IHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhl
aWdodAorICAgIH07CiAKLSAgICBzd2l0Y2ggKGhlaWdodCkKKyAgICBEM0RMT0NLRURfUkVDVCBs
b2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7Cisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0gPSBzb3Vy
Y2VbeCArIDFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhUMUJsb2NrSGFsZihz
b3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQgJSA0ID09IDApOwot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyArK3kpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiA4KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aW50c0Fjcm9zczsgeCArPSAyKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHhvZmZzZXQg
JSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQod2lk
dGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAgICBBU1NFUlQoaW5w
dXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAlIDE2ID09IDApOwot
Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBSb3VuZCB3aWR0aCB1
cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lk
dGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiA0OwotCi0g
ICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAgICAgICAgICAgZGVz
dFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAxXSA9IHNvdXJjZVt4
ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2VbeCArIDJdOwotICAg
ICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBGbGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVzdCArIHgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogMTYpOwogCi0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQzQmxvY2tGdWxsKHNv
dXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVz
c2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBHTHNpemVpIGlucHV0UGl0Y2gg
PSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAgICBpbnQgcm93cyA9
IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyAr
K2kpCisgICAgeworICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsg
aSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gp
LCBpbnB1dFBpdGNoKTsKICAgICB9Ci19CiAKLXZvaWQgSW1hZ2U6OmxvYWREWFQ1RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIEFTU0VS
VCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Ci0gICAg
QVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGggPT0gMSk7Ci0gICAg
QVNTRVJUKGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSAx
NiA9PSAwKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwotCi0gICAgLy8gUm91
bmQgd2lkdGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBpbnQgYmxvY2tzQWNy
b3NzID0gKHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0gYmxvY2tzQWNyb3Nz
ICogNDsKLQotICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAgICAgICAg
ICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMV0g
PSBzb3VyY2VbeCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJdID0gc291cmNlW3gg
KyAyXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4ICsgM107Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJjZSArIHgsIGRlc3Qg
KyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRlc3Qg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDE2
KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCAr
PSA0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1
QmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgdW5sb2NrKCk7CiB9CiAK
IC8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJh
YmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwpAQCAt
MTEyMSw5ICs5NjMsOCBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKLSAgICBS
RUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwg
ZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhl
bFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBSRUNUIGRlc3RSZWN0ID0g
e3hvZmZzZXQsIGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRlc3RZT2Zmc2V0ICsgaGVp
Z2h0fTsKKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0
fTsKKyAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0
aCwgeW9mZnNldCArIGhlaWdodH07CiAKICAgICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCiAg
ICAgewpAQCAtMTI2Nyw5ICsxMTA4LDkgQEAgdm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zmc2V0
LCBHTGludCB5bwogICAgIG1EaXJ0eSA9IHRydWU7CiB9CiAKLVRleHR1cmVTdG9yYWdlOjpUZXh0
dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJUYXJnZXQocmVuZGVy
VGFyZ2V0KSwKLSAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wobVJl
bmRlclRhcmdldCkpLAorVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdl
KQorICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKKyAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+
Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKICAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVy
ZVNlcmlhbCgpKQogewogfQpAQCAtMTI4MCw3ICsxMTIxLDcgQEAgVGV4dHVyZVN0b3JhZ2U6On5U
ZXh0dXJlU3RvcmFnZSgpCiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKKyAgICByZXR1cm4gKG1EM0RVc2Fn
ZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwpKSAhPSAw
OwogfQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBjb25zdApAQCAtMTI5Myw2
ICsxMTM0LDExIEBAIEQzRFBPT0wgVGV4dHVyZVN0b3JhZ2U6OmdldFBvb2woKSBjb25zdAogICAg
IHJldHVybiBtRDNEUG9vbDsKIH0KIAorRFdPUkQgVGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUQzRFVzYWdlOworfQorCiB1bnNpZ25lZCBpbnQgVGV4dHVy
ZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVy
ZVNlcmlhbDsKQEAgLTE0NTAsMTUgKzEyOTYsNyBAQCB2b2lkIFRleHR1cmU6OnNldEltYWdlKEdM
aW50IHVucGFja0FsaWduCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdl
LT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGltYWdlLT5nZXRX
aWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCksIHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBp
bWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwg
MCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldFR5cGUo
KSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KIH0KQEAgLTE0NjcsNTIgKzEzMDUsMTYgQEAgdm9pZCBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xzaXplaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0g
ICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBp
bWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXBy
ZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAg
ICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUoaW1hZ2UtPmdldFdp
ZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgpKTsKLSAgICAgICAg
ICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGlt
YWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihw
aXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9Ci0KKyAgICAgICAg
aW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KIH0KIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAq
aW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5nZXRXaWR0aCgpIHx8
IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAgICB7Ci0gICAgICAg
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQotICAgIHsKLSAgICAg
ICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2Nr
ZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9ybVBpeGVsWU9mZnNl
dCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRoLCBoZWlnaHQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFn
ZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0K
IApAQCAtMTUyMSwzNyArMTMyMyw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9m
ZnNldCwgR0wKIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFn
ZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdpZHRoKCkgfHwgaGVp
Z2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAg
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247
Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgdXBkYXRlUmVn
aW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9t
ID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7
Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0gICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gg
PSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICAgICAgaW50
IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQp
OwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB0cmFuc2Zv
cm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVpZ2h0KCkpLCB3aWR0
aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBpeGVscykg
KyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+
bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVs
cyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0xNjY3LDIzICsx
NDQxLDI3IEBAIGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChJRGly
ZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2UodHJ1ZSksIG1S
ZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1Rl
eHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZh
Y2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCksIG1SZW5k
ZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKIHsKICAg
ICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwogfQogCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0
dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZShyZW5kZXJU
YXJnZXQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2Vy
aWFsKCkpCitUZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQz
REZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAg
OiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVy
U3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMsIGlzUmVuZGVy
VGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQsIGdldFBvb2woKSwg
Jm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAvLyBpZiB0
aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVk
IGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkg
c2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
d2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1U
ZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTE2OTUsNiArMTQ3Myw4IEBAIFRleHR1
cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKICAgICB9CiB9CiAKKy8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1
cmZhY2VMZXZlbChpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2Ug
PSBOVUxMOwpAQCAtMTc3OCwxOSArMTU1OCwyMCBAQCBHTHNpemVpIFRleHR1cmUyRDo6Z2V0SGVp
Z2h0KEdMaW50IGxldmVsCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVudW0gVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CitHTGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5h
bEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlbMF0u
Z2V0Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYgKGxldmVsIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbbGV2ZWxdLmdldEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7
CiB9CiAKLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JN
QVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBEM0RGTVRf
VU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlw
ZSkKQEAgLTE5MzgsMTkgKzE3MTksMTcgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGlu
dCBsZXZlbCwgRwogCiAgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxl
dmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJl
Y3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0
V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3Qu
dG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2Ut
PmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJh
bnNmb3JtUGl4ZWxZT2Zmc2V0KDAsIGhlaWdodCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdo
dCgpKTsKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QubGVmdCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOwor
ICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSB5ICsgaGVpZ2h0OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwogCiAg
ICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRC
bGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIGRlc3RZ
T2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVy
VGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwogICAgICAgICAgICAgICAg
IGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk5MCwxOSAr
MTc2OSwxOCBAQCB2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnCiAKICAg
ICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBS
RUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1w
KHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgp
KTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0
LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJl
Y3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNl
UmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICAg
ICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVp
Z2h0LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwogCiAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwp
OwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJh
eVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3QpOworICAgICAgICAg
ICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFn
ZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKICAgICAgICAg
ICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIw
MTYsMTAgKzE3OTQsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IAogICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7
CiAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwogICAg
IEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBl
KTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUp
OworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBm
YWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFy
Z2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNk
Zm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAK
ICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMjA3
NCw4ICsxODUyLDggQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwog
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAoKGdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdCgpID09IEdMX0hB
TEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRl
cigpKSkKKyAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0ZMT0FUICYmICFnZXRD
b250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAorICAgICAgICAoZ2V0
SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+
c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdG
aWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTIxNTcs
OSArMTkzNSwxNCBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoKSBjb25z
dAorYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Cit9CisKK2Jv
b2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJ
c0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJuIElzRGVwdGhUZXh0
dXJlKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTczLDExICsxOTU2LDEx
IEBAIHZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKICAgICBHTHNpemVpIHdpZHRoID0g
bUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFy
cmF5WzBdLmdldEhlaWdodCgpOwogICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5nZXRE
M0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQU5HTEUpOworICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RG
b3JtYXQoKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1V
c2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdl
ID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHJl
bmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZl
bHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIAogICAgIGlmIChtVGV4
U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewpAQCAtMjIxNyw5ICsyMDAwLDEwIEBAIHZvaWQg
VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICBHTHNpemVpIHdpZHRo
ID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBt
SW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRp
b25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1J
bWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdl
dFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRy
dWUpOwogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZl
bHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7CisgICAgICAgIG5ld1RleFN0b3JhZ2Ug
PSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBo
ZWlnaHQpOwogCiAgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQogICAgICAgICB7CkBA
IC0yMjMyLDggKzIwMTYsOCBAQCB2b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
KCkKICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2Us
IG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCiAgICAgICAgICAgICAgICAgeyAgIAogICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgIHNv
dXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwogICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICB9CiAKQEAg
LTIzMTUsMTIgKzIwOTksMTQgQEAgUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1
ZmZlcgogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAgICAgewotICAgICAg
ICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1
ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0g
bmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKHRoaXMsIHRh
cmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKIH0KIAorLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpOwpAQCAtMjMzMyw2ICsyMTE5LDMzIEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlMkQ6OmdldFJlbmRlclQKIAogICAgIHVwZGF0ZVRleHR1cmUoKTsKICAgICAKKyAgICAvLyBl
bnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgoMCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1UZXhTdG9yYWdl
LT5nZXRTdXJmYWNlTGV2ZWwoMCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURp
cmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQp
Cit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoZ2V0U3RvcmFnZSh0
cnVlKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
dXBkYXRlVGV4dHVyZSgpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0
aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQogICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwog
fQogCkBAIC0yMzUzLDE4ICsyMTY2LDIyIEBAIFRleHR1cmVTdG9yYWdlICpUZXh0dXJlMkQ6Omdl
dFN0b3JhZ2UoYm8KICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLVRleHR1cmVTdG9yYWdl
Q3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3Jt
YXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHJl
bmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZUN1YmVTZXJpYWxzKCkpCitUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9y
YWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50
IHNpemUpCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1GaXJzdFJlbmRlclRhcmdldFNl
cmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCiB7Ci0gICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KICAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUs
IGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCA6IDAsIGZv
cm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIC8vIGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0
cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhl
cmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUs
IGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7
CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICB9CiAgICAgfQogfQogCkBAIC0yMzc2LDYgKzIxOTMsOCBAQCBUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6On5UZXh0dXJlU3RvcmFnZUN1CiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBT
dXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjI3MywzNiBAQCBHTGVudW0gVGV4
dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VC
RV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bbGV2ZWxdLmdl
dFdpZHRoKCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xz
aXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXpl
aSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRIZWlnaHQoKTsKKyAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVp
Z2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xlbnVtIFRleHR1cmVD
dWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbWFnZUFy
cmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFR5
cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUltYWdlQXJyYXlb
MF1bMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQp
XVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gR0xfTk9ORTsK
IH0KIAotRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAorRDNE
Rk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1h
dCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykK
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CiB9
CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKQEAgLTI1ODIsOCArMjQwMiw4
IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
LSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQorICAgIGlmICgoZ2V0
SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
KyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xf
TkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xf
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTI2NzksOSArMjQ5OSw5IEBA
IGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkgY29uc3QKK2Jvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KCkpOwor
ICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkp
OwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0CkBAIC0yNjk0LDExICsyNTE0LDExIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNyZWF0ZVRleHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7
Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgp
OwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7
CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgp
OworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBm
YWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCByZW5kZXJUYXJnZXQp
OworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQz
ZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQo
KSkKICAgICB7CkBAIC0yNzQyLDkgKzI1NjIsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29u
dmVydFRvUmVuZGVyVGFyZwogICAgIHsKICAgICAgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZl
bHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1
cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwog
Ci0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVs
cywgZm9ybWF0LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0
dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKIAogICAg
ICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAtMjc1OSw4ICsyNTgw
LDggQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9y
YWdlLT5pc01hbmFnZWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIApAQCAtMjg0NywxOSArMjY2OCwxNyBAQCB2b2lkIFRleHR1cmVDdWJl
TWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhCiAKICAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZl
bCA8IGxldmVsQ291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0
ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZS0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0g
Y2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdp
ZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChzb3VyY2VSZWN0LnRv
cCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwgMCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90
dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9mZnNldCA9IHRyYW5z
Zm9ybVBpeGVsWU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxd
LmdldFdpZHRoKCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAg
c291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsg
d2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CiAKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwp
OwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAs
IGRlc3RZT2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHko
cmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwogICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjkw
MywxOSArMjcyMiwxNyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVt
CiAKICAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9
IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhl
aWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0
LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAg
ICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291
cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50
IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQsIGhlaWdodCwgbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7CisgICAgICAgICAgICBSRUNU
IHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAg
ICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAog
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3Vi
ZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChkZXN0KQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJn
ZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCBk
ZXN0WU9mZnNldCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJl
bmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCksIHhv
ZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwogICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjkyOSwxMCArMjc0NiwxMCBAQCB2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2CiAgICAgR0xlbnVtIGZvcm1hdCA9IGds
OjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVudW0gdHlwZSA9IGdsOjpF
eHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZl
cnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVy
VGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChtVXNhZ2UgPT0g
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdPUkQgZDNkdXNhZ2UgPSBH
ZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2
ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7CiAg
ICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
bGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwxMiArMjg2NiwxNCBAQCBSZW5kZXJidWZmZXIgKlRl
eHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJiCiAKICAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09
IE5VTEwpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVm
ZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdldCkpOworICAgICAg
ICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKICAgICB9CiAKICAgICByZXR1cm4g
bUZhY2VQcm94aWVzW2ZhY2VdOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpCiB7CiAgICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CkBAIC0z
MDg3LDQgKzI5MDYsNCBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3Jh
CiAgICAgcmV0dXJuIG1UZXhTdG9yYWdlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1Myw2IEBA
IGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAg
dm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJFU1VMVCBsb2NrKEQz
RExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVu
bG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU2ICs2Nyw1MiBAQCBjbGFzcyBJ
bWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdm9pZCBsb2FkQWxw
aGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAg
dm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxwaGFEYXRhU1NFMihH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2
b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQg
bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJH
QlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxv
YWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJH
QkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQUhhbGZG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQkdSQURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2Fk
Q29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0RhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUNURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCiAgICAgdm9pZCBjb3B5KEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKIApA
QCAtMTI4LDYgKzEyMSw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2Uo
KTsKIAorICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3Qg
UkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdMc2l6ZWkgbVdpZHRoOwog
ICAgIEdMc2l6ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsKQEAgLTE0NCwyMCArMTQw
LDIxIEBAIGNsYXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIGV4cGxp
Y2l0IFRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlKCk7CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgYm9vbCBp
c01hbmFnZWQoKSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKKyAgICBEV09S
RCBnZXRVc2FnZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBib29sIG1SZW5kZXJUYXJn
ZXQ7CisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBv
b2w7CiAKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7CkBAIC0xOTAsMTQg
KzE4Nyw3IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKICAgICBHTGVu
dW0gZ2V0V3JhcFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZv
cm1hdCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAwOwog
CiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBS
ZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CkBAIC0yMTYs
OCArMjA2LDYgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogICAgIHN0
YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1
aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1l
LiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3
aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7CiAgICAgYm9vbCBz
dWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAgIHZvaWQgc2V0Q29t
cHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdl
ICppbWFnZSk7CkBAIC0yNTgsNyArMjQ2LDcgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UyRCA6IHB1
YmxpYyBUZXh0dXJlUwogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2Uy
RChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBi
b29sIHJlbmRlclRhcmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RG
T1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAg
IHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAtMjg2LDExICsyNzQsMTIgQEAgY2xh
c3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRh
cmdldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXRE
M0RGb3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25z
dDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVt
IGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0
RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKIAog
ICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxl
dmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zMDEsNyArMjkwLDYgQEAgY2xh
c3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBiaW5k
VGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZVRleEltYWdlKCk7CiAKQEAgLTMwOSw2ICsyOTcsMTEgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVi
bGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0zMTYsNyArMzA5LDYgQEAgY2xhc3Mg
VGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVy
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lk
IGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNNaXBtYXBD
b21wbGV0ZSgpIGNvbnN0OwpAQCAtMzQxLDcgKzMzMyw3IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1
YmxpYyBUZXh0dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVy
ZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2
ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJUYXJnZXQpOworICAg
IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09S
RCB1c2FnZSwgaW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VDdWJlTWFw
KCk7CiAKQEAgLTM2OSwxMSArMzYxLDExIEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGlj
IFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwogICAgIAot
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0
SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKQEAgLTM5MSw3ICszODMsNiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1
YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKQEAgLTM5OSw2ICszOTAs
MTAgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgc3RhdGlj
IHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwogCisgIHByb3RlY3RlZDoKKyAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7CisgICAgdmlydHVhbCBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKIApA
QCAtNDA2LDcgKzQwMSw2IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUK
ICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwot
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVy
VGFyZ2V0KTsKIAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4
RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3ZlcnRleGNvbnZlcnNpb24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdMZW51bSBWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKIAogICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFy
cmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICBQcm9n
cmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKIAog
ICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICB0cmFuc2xhdGVk
W2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRy
aWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5h
Y3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkg
IT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBz
aXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBk
b24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0NTAsOCBAQCBzdHJ1
Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtCiB0ZW1wbGF0ZSA8R0xlbnVtIGZy
b21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9
OwogCiAvLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJl
ZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxv
YXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRy
dWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxP
QVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhl
ZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1
bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50
LCAxNj4geyB9OwogCiAvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1
bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVz
IChpLmUuIDAvMSkKIC8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZm
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVs
LCBHTHNpemVpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKQorLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBv
ZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBjaGVja1RleHR1cmVGb3Jt
YXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIC8vIHZhbGlkYXRlIDxm
b3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQorICAgIHN3aXRj
aCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICBj
YXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VT
OgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBpbnZhbGlkIDx0eXBlPiAt
PiBzZXRzIElOVkFMSURfRU5VTQorICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJp
bmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KKyAgICBzd2l0Y2ggKHR5cGUpCisgICAg
eworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX0JH
UkFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6
CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Cisg
ICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9B
VF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQ
SEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9Cit9
Citib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQogewog
ICAgIGlmICghdGV4dHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1
cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29t
cHJlc3NlZChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYg
Zm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCkpCisgICAgaWYgKGZvcm1hdCAh
PSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkp
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKICAgICB9CiAKICAgICBpZiAoY29tcHJlc3NlZCkKICAgICB7Ci0gICAgICAgIGlmICgod2lk
dGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8IAorICAgICAg
ICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8
fAogICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0
SGVpZ2h0KDApKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7CkBAIC04OSw2ICsxODUsNDMgQEAgYm9vbCB2YWxpZGF0ZVN1
YkltYWdlUGFyYW1zKGJvb2wgY29tcHJlcwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNv
bXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAg
fQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChjb21wcmVz
c2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0g
MCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5n
ZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUgdGhhdCBh
cmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBAIHZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwg
eW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9m
ZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xMTAyLDcgKzEyMzUsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJECiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4
dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhl
aWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQog
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VD
b21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjU4LDYg
KzEzOTEsMTkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMTM1NSwyMyAr
MTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKTsKICAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gR0xfUkdCQTsKIAogICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdp
ZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXgyZCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFs
cmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0SW50ZXJuYWxG
b3JtYXQobGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgICAgICAgICAgaWYgKCF2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFn
ZVBhcmFtcworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUo
ZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdM
X05PTkUsIHRleGN1YmUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBh
cmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0g
dGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IHRleGN1YmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51
bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAu
MjRdIHRhYmxlIDMuOQogICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KQpAQCAtMTQx
NCw2ICsxNTY4LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQog
ICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAg
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0yMzA2
LDE5ICsyNDYzLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4LT5pc0NvbXByZXNz
ZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAg
ICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5n
ZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVS
RV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQg
PSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0wKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0g
R0xfVEVYVFVSRV9DVUJFX01BUCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9N
QVApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4
Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwpAQCAtMjQ0MCwyOCArMjYwNiw0MSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFw
KEdMZW51bSB0CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJk
LT5pc0RlcHRoKDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0dXJl
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC0yNzU5LDEyICsyOTM4LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRBdHRy
aWJMb2NhdGlvbihHTHVpbnQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0
QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFy
eS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRQcm9ncmFtaXYoR0x1aW50IHBybwogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9n
cmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKTsKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoK
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsK
QEAgLTMyNDEsNiArMzQyMSw5IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWlu
dCBwcm8KICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgog
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3Jt
TWF4TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
fQpAQCAtMzc2NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZF
WFQoR0x1aW50CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldFVuaWZvcm1mdihHTHVpbnQgcHJvCiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxM
LCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NDAsMTcgKzQwMzUsMTggQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludAogCiAgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihs
b2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRVbmlmb3JtaXYoR0x1aW50IHBybwogCiAgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1pdihsb2NhdGlvbiwg
TlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9y
bWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBA
IC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24o
R0x1aW4KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUxvY2F0
aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1M
b2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgfQogCisgICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVz
ZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgorICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZhbGlkYXRlIDxm
b3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucworICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1h
dD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0
eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCiAgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKQEAgLTUwMjQs
NyArNTI0Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAg
ICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBHTF9SR0I6CkBAIC01MDM2LDcgKzUyNTQsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9P
RVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAgLTUwNDksNyArNTI2
Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAg
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKQEAgLTUwNTgsNyArNTI3Niw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxl
ZCBiZWxvdwpAQCAtNTA2Niw4ICs1Mjg0LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2UKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAgLTUxNDYsNiArNTM4
MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Cisg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBk
ZXB0aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCisgICAgICAgICAgICAgICAgLy8gYnV0IEFO
R0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9
IE5VTEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTQxNiw2ICs1NjcwLDI1IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8y
RCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCisg
ICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3NTcsOSBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWdsOjpD
aGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAg
IGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlzIHNldCBi
eSBoZWxwZXIgZnVuY3Rpb24KICAgICAgICAgfQogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CkBAIC01NTE3LDExICs1Nzg1LDI5IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1h
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVy
ZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRv
ZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0
ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsaWRh
dGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBw
aXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyArNTgxNSw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtcyhm
YWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4
dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKICAgICAgICAgICAgICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU2
MjIsNyArNTkxNCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBAIHZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01
NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0
aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihs
b2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU3NjAsNyArNjA3MCwxMyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAt
NTgwNiw3ICs2MTIyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2Nh
dGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zaXYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODUyLDcgKzYxNzQsMTMgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAg
LTU4OTgsNyArNjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGl2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEzIEBAIHZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCAKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1
ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTU5NzgsNyArNjMxOCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
TWF0cml4NGZ2KEdMaW50IAogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+
c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWlu
dCBwcm9ncgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1LDc5IEBAIHZvaWQg
X19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGEKICAgICB9CiB9CiAKK3ZvaWQgX19z
dGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7CisgICAgRVZFTlQoIihH
TGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0gMHglMC44cCwgYmlu
YXJ5Rm9ybWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dy
YW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpiaW5hcnlG
b3JtYXQgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAgICAgaWYgKGxlbmd0
aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMZW51bSBi
aW5hcnlGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9
IDB4JVgsIGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAsIGxlbmd0aCA9ICVk
KSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dy
YW1PYmplY3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFt
ZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MjQsOCBAQCBfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlCiAgICAgICAgIHsiZ2xWZXJ0ZXhBdHRy
aWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSln
bERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAgIHsiZ2xHZXRQcm9n
cmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlP
RVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5z
aW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJv
agkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNiArNDAxLDEwIEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3Jh
bUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5MSw2ICs0OTUsMTAgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFt
QmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAxMjI3MzgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxv
YXQgeCkKICAgICB9CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVsUmVjdChHTGludCB4
LCBHTGludCB5LCBHTGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVpZ2h0KQotewotICAg
IFJFQ1QgcmVjdCA9IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0IC0geSAtIGgs
Ci0gICAgICAgICAgICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVpZ2h0
IC0geX07Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJhbnNmb3JtUGl4ZWxZ
T2Zmc2V0KEdMaW50IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VIZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIHN1cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQotaW5saW5lIEdMZW51
bSBhZGp1c3RXaW5kaW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VSVCh3aW5kaW5nID09
IEdMX0NXIHx8IHdpbmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2luZGluZyA9PSBHTF9D
VyA/IEdMX0NDVyA6IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQogewog
ICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDEy
MjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElzQ29tcHJlc3NlZChH
TGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9y
bWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8CisgICAgICAg
IGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0dXJucyB0aGUgc2l6
ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBpbnQgQ29tcHV0ZVBp
eGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5NCw3ICszMDUsMTEg
QEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbgogICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzVfNV8xOgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQp
OworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF8yNF84X09FUzoKKyAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAg
Y2FzZSBHTF9GTE9BVDoKICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsKQEAgLTMz
Myw1MyArMzQ4LDYgQEAgYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZwog
ICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCk7CiB9CiAKLS8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2Yg
dGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KLWJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0
VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdM
X0JHUkFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQ
SEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0JBKTsKLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLQotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogR0xlbnVtIEV4dHJhY3RGb3JtYXQo
R0xlbnVtIGludGVybmFsZm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCkBA
IC00MDcsNiArMzc1LDkgQEAgR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9y
bQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4g
R0xfTFVNSU5BTkNFOwogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAg
ICAgICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwogICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7CisgICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05F
TlQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVy
biBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OiAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5z
dXBwb3J0ZWQKICAgICB9CiB9CkBAIC00MzgsNiArNDA5LDkgQEAgR0xlbnVtIEV4dHJhY3RUeXBl
KEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsK
ICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAg
ICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGNh
c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC02Mzgs
OSArNjEyLDYgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIAogewog
ICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOwog
Ci0gICAgLy8gTWFwIGEgY3ViZSBtYXAgdGV4dHVyZSB0YXJnZXQgdG8gdGhlIGNvcnJlc3BvbmRp
bmcgIEQzRCBzdXJmYWNlIGluZGV4LiBOb3RlIHRoYXQgdGhlCi0gICAgLy8gWSBmYWNlcyBhcmUg
c3dhcHBlZCBiZWNhdXNlIHRoZSBZIGNvb3JkaW5hdGUgdG8gdGhlIHRleHR1cmUgbG9va3VwIGlu
dHJpbnNpYyBmdW5jdGlvbnMKLSAgICAvLyBhcmUgbmVnYXRlZCBpbiB0aGUgcGl4ZWwgc2hhZGVy
LgogICAgIHN3aXRjaCAoY3ViZUZhY2UpCiAgICAgewogICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CkBAIC02NTAsMTAgKzYyMSwxMCBAQCBEM0RDVUJFTUFQX0ZBQ0VT
IENvbnZlcnRDdWJlRmFjZShHTGVudW0gCiAgICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0Vf
TkVHQVRJVkVfWDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9Z
OworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAg
IGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWTsKKyAgICAgICAgZmFjZSA9IEQzRENV
QkVNQVBfRkFDRV9ORUdBVElWRV9ZOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X1BPU0lUSVZFX1o7CkBAIC03NjcsNiArNzM4LDcgQEAgRDNERk9STUFUIENvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQoR0xlbgogewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKKyAgICAgIGNh
c2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKICAgICAgIGNh
c2UgR0xfUkdCQTQ6CiAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBjYXNlIEdMX1JHQkE4
X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAtNzk0LDYgKzc2Niwx
MCBAQCBuYW1lc3BhY2UgZHgyZXMKIAogdW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZP
Uk1BVCBzdGVuY2lsRm9ybWF0KQogeworICAgIGlmIChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9J
TlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQogICAgIHN3aXRjaChzdGVuY2ls
Rm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKQEAgLTkwNCw2ICs4ODAs
MTAgQEAgdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvcgogCiB1bnNpZ25l
ZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCkKIHsKKyAgICBpZiAoZGVw
dGhGb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gMjQ7CisgICAg
fQogICAgIHN3aXRjaCAoZGVwdGhGb3JtYXQpCiAgICAgewogICAgICAgY2FzZSBEM0RGTVRfRDE2
X0xPQ0tBQkxFOiAgcmV0dXJuIDE2OwpAQCAtOTY1LDYgKzk0NSwxNiBAQCBib29sIElzRmxvYXQx
NkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29s
IElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQoreworICAgIHJl
dHVybiAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jvb2wgSXNTdGVuY2ls
VGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAgICByZXR1cm4gKHN1
cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdldFNhbXBsZXNGcm9t
TXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsKICAgICBpZiAodHlw
ZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5ODEsMTAgQEAgR0xl
bnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVAogCiBHTGVudW0gQ29udmVydERl
cHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7CisgICAgfQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1U
X0QxNjoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNiArMTYsOSBA
QAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAo
KEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JN
QVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcp
KSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdMc2l6ZWkgQ29tcHV0
ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW4KIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKIEdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNz
ZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKIGJv
b2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVu
dW0gZm9ybWF0KTsKIGJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsK
IGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci1ib29sIENoZWNr
VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOwogR0xlbnVtIEV4
dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIEdMZW51bSBFeHRyYWN0VHlwZShH
TGVudW0gaW50ZXJuYWxmb3JtYXQpOwogCkBAIC03OSw2ICs4Miw4IEBAIEdMdWludCBHZXREZXB0
aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWEKIEdMdWludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JN
QVQgc3RlbmNpbEZvcm1hdCk7CiBib29sIElzRmxvYXQzMkZvcm1hdChEM0RGT1JNQVQgc3VyZmFj
ZUZvcm1hdCk7CiBib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7
Citib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKK2Jv
b2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7CiAKIEdM
c2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0
eXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNzM5KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTItMDctMTYg
IE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAgIFVwZGF0ZSBBTkdM
RSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg5MDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIEFOR0xFIHRvIHIxMTcwLCB3aXRoIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9u
czoKKworICAgICAgICAoMSkgVXNlIEJpc29uIDIuMyBpbnN0ZWFkIG9mIEJpc29uIDIuNC4yIHRv
IGdlbmVyYXRlIEV4cHJlc3Npb25QYXJzZXIuY3BwIGFuZAorICAgICAgICBnbHNsYW5nX3RhYi5j
cHAuIEkgaGFkIHRvIG1vZGlmeSBFeHByZXNzaW9uUGFyc2VyLnkgdG8gbWFrZSBpdCBjb21wYXRp
YmxlIHdpdGggQmlzb24KKyAgICAgICAgMi4zLiBUaGUgY2hhbmdlcyBoYXZlIGJlZW4gY29udHJp
YnV0ZWQgYmFjayB0byBBTkdMRSBpbiByMTIyNC4KKworICAgICAgICAoMikgQ29udGludWUgdG8g
cmVjb2duaXplIFFOWCBhcyBQT1NJWCBpbiBBTkdMRS4gVGhpcyBoYXMgYmVlbiBjb250cmlidXRl
ZCBiYWNrIHRvIEFOR0xFCisgICAgICAgIGluIHIxMjIzLgorCisgICAgICAgICgzKSBSZW5hbWUg
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpYy5jcHAgdG8gRGlh
Z25vc3RpY0Jhc2UuY3BwLgorICAgICAgICBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAgdG8gRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwLgorCisgICAgICAgIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBBTkdMRSdzIG5ldyBwcmVw
cm9jZXNzb3IsIHRoZXJlIHdlcmUgdHdvIGZpbGVzIG5hbWVkIERpYWdub3N0aWMuY3BwCisgICAg
ICAgIGluIEFOR0xFIHVuZGVyIGRpZmZlcmVudCBmb2xkZXJzLiBUaGlzIGNhdXNlZCBwcm9ibGVt
cyBvbiB0aGUgUVQgYnVpbGQgd2hlbiB0aGVpciBvYmplY3QKKyAgICAgICAgZmlsZXMsIGJvdGgg
bmFtZWQgRGlhZ25vc3RpYy5vLCB0cmllZCB0byBnbyBpbiB0aGUgc2FtZSBmb2xkZXIuIFJlbmFt
aW5nIG9uZSBvZiB0aGVtIHRvCisgICAgICAgIERpYWdub3N0aWNCYXNlLmNwcCBhdm9pZHMgdGhp
cyBjb25mbGljdC4gVGhlIHNhbWUgc2l0dWF0aW9uIG9jY3VycmVkIHdpdGgKKyAgICAgICAgRGly
ZWN0aXZlSGFuZGxlci5jcHAuIEkgd2lsbCB3b3JrIG9uIGNvbnRyaWJ1dGluZyB0aGlzIGNoYW5n
ZSBiYWNrIHRvIEFOR0xFIGZvciBmdXR1cmUKKyAgICAgICAgdXBkYXRlcy4KKworICAgICAgICAo
NCkgQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gZ2xzbGFuZy55IGFuZCBFeHByZXNzaW9uUGFy
c2VyLnk6CisgICAgICAgICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKKyAgICAgICAgI2RlZmluZSBZ
WUxUWVBFX0lTX1RSSVZJQUwgMQorCisgICAgICAgIEJpc29uIDIuMyBkb2Vzbid0IGZpcnN0IGNo
ZWNrIHRoYXQgdGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIGJlZm9yZSByZWFkaW5nIHRoZWlyIHZh
bHVlLAorICAgICAgICB3aGljaCBjYXVzZXMgdGhlIFFUIGJ1aWxkIHRvIGZhaWwuCisKKyAgICAg
ICAgV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZSBpbiB0aGUgc2FtZSB3YXkgaW4gQ1NTR3JhbW1h
ci55LgorCisgICAgICAgIEkgd2lsbCB3b3JrIG9uIGNvbnRyaWJ1dGluZyB0aGlzIGNoYW5nZSBi
YWNrIHRvIEFOR0xFLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorCiAyMDEyLTA3LTE2ICBQZXRlciBSeWJp
biAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBmaXggb3V0cHV0IHdyaXRlIGxvZ2ljIHRvIHN1cHBvcnQg
aW5jcmVtZW50YWwgYnVpbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjMyNCw3ICsyMzI0LDIwIEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9z
dGljcy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Rp
YWdub3N0aWNzLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAK
QEAgLTIzMzIsNiArMjM0NSw3IEBAIElGIChFTkFCTEVfV0VCR0wpCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcApAQCAtMjM0NCwyMiArMjM1OCw1MiBAQCBJRiAo
RU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
CisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0lucHV0LmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8u
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBh
bmRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
U291cmNlTG9jYXRpb24uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxp
ZmllckFsaXZlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvUmVtb3ZlVHJlZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAorICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNob3J0Q2lyY3VpdC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci91dGlsLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTkxNyw4ICs1OTE3LDIx
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlYnVnLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlYnVnLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Rl
dGVjdERpc2NvbnRpbnVpdHkuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJvbGwuY3BwIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKQEAgLTU5MzEs
NiArNTk0NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAgXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAgXApAQCAt
NTk1NCw2ICs1OTY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaCBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKQEAgLTU5NjMsNiArNTk3OCwy
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9z
dGljc0Jhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3BhcnNlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgXApAQCAtNTk3Niw2ICs2MDE0LDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1JlbW92ZVRyZWUuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUmVtb3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UmVuYW1lRnVuY3Rpb24uaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NlYXJjaFN5bWJvbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TZWFyY2hTeW1ib2wuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoYWRlckxhbmcuY3BwIFwKQEAgLTU5ODQsNiArNjAyMywxMCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3Bw
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIFwKQEAgLTU5OTEsOCArNjAzNCw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2VsZWN0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1VuZm9sZFNlbGVjdC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci91dGlsLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMjcz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQwMDIs
NyArNDAwMiwxMyBAQCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db21tb24uaCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmggXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggXAor
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIFwKICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCkBAIC00MDE3LDExICs0MDIzLDI0IEBAIGNvbnRh
aW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL01NYXAuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L29zaW5jbHVkZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ByYWdtYS5o
IFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgg
XAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUu
aCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgg
XAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9s
aW1pdHMuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9JbnB1dC5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBcCisgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAor
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5o
IFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NjYW5uZXIuaCBcCkBAIC00MDM2LDE0ICs0MDU1LDE3IEBAIGNvbnRhaW5zKERFRklO
RVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxp
ZmllckFsaXZlLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvUmVtb3ZlVHJl
ZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgg
XAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmggXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggXAorICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVT
U0wuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5o
IFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAog
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHlwZXMuaCBcCi0gICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaCBcCisgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
VmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oIFwKQEAgLTQwNTYsMTMgKzQwNzgsMjEgQEAgY29udGFpbnMoREVGSU5F
UywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmNwcCBc
CiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EZXRlY3RSZWN1cnNpb24uY3BwIFwK
KyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBcCisgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmNwcCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAgXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9Jbml0aWFsaXplLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9J
bml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcIAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9pbnRlcm1PdXQuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0ludGVy
bVRyYXZlcnNlLmNwcCBcCkBAIC00MDgwLDEwICs0MTEwLDEyIEBAIGNvbnRhaW5zKERFRklORVMs
IFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L1NlYXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hh
ZGVyTGFuZy5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU3ltYm9sVGFi
bGUuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBcCiAgICAgICAgICQkQU5H
TEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwIFwKLSAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci91dGlsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQwOTQsNiArNDEyNiwxNyBAQCBjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBcCisgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAorICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAorICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAgXAorICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNy
by5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAorICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIFwKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152784</attachid>
            <date>2012-07-17 10:48:48 -0700</date>
            <delta_ts>2012-07-17 12:01:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>89039-svn-4.patch</filename>
            <type>text/plain</type>
            <size>1220847</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjczOSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDkxNSBAQAorMjAxMi0wNy0xNiAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIEFOR0xFIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzkKKworICAgICAgICBSZXZpZXdlZCBieSBEZWFu
IEphY2tzb24gYW5kIE1hcmsgUm93ZS4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8gcjExNzAs
IHdpdGggdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgICAgICAgICgxKSBVc2UgQmlz
b24gMi4zIGluc3RlYWQgb2YgQmlzb24gMi40LjIgdG8gZ2VuZXJhdGUgRXhwcmVzc2lvblBhcnNl
ci5jcHAgYW5kCisgICAgICAgIGdsc2xhbmdfdGFiLmNwcC4gSSBoYWQgdG8gbW9kaWZ5IEV4cHJl
c3Npb25QYXJzZXIueSB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBCaXNvbgorICAgICAgICAy
LjMuIFRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBjb250cmlidXRlZCBiYWNrIHRvIEFOR0xFIGluIHIx
MjI0LgorCisgICAgICAgICgyKSBDb250aW51ZSB0byByZWNvZ25pemUgUU5YIGFzIFBPU0lYIGlu
IEFOR0xFLiBUaGlzIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJhY2sgdG8gQU5HTEUKKyAgICAgICAg
aW4gcjEyMjMuCisKKyAgICAgICAgKDMpIFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaWFnbm9zdGljLmNwcCB0byBEaWFnbm9zdGljQmFzZS5jcHAuCisgICAgICAg
IFJlbmFtZSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyLmNwcCB0byBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAuCisKKyAgICAgICAgV2l0aCB0aGUg
aW50cm9kdWN0aW9uIG9mIEFOR0xFJ3MgbmV3IHByZXByb2Nlc3NvciwgdGhlcmUgd2VyZSB0d28g
ZmlsZXMgbmFtZWQgRGlhZ25vc3RpYy5jcHAKKyAgICAgICAgaW4gQU5HTEUgdW5kZXIgZGlmZmVy
ZW50IGZvbGRlcnMuIFRoaXMgY2F1c2VkIHByb2JsZW1zIG9uIHRoZSBRVCBidWlsZCB3aGVuIHRo
ZWlyIG9iamVjdAorICAgICAgICBmaWxlcywgYm90aCBuYW1lZCBEaWFnbm9zdGljLm8sIHRyaWVk
IHRvIGdvIGluIHRoZSBzYW1lIGZvbGRlci4gUmVuYW1pbmcgb25lIG9mIHRoZW0gdG8KKyAgICAg
ICAgRGlhZ25vc3RpY0Jhc2UuY3BwIGF2b2lkcyB0aGlzIGNvbmZsaWN0LiBUaGUgc2FtZSBzaXR1
YXRpb24gb2NjdXJyZWQgd2l0aAorICAgICAgICBEaXJlY3RpdmVIYW5kbGVyLmNwcC4gSSB3aWxs
IHdvcmsgb24gY29udHJpYnV0aW5nIHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUgZm9yIGZ1dHVy
ZQorICAgICAgICB1cGRhdGVzLgorCisgICAgICAgICg0KSBBZGQgdGhlIGZvbGxvd2luZyBsaW5l
cyB0byBnbHNsYW5nLnkgYW5kIEV4cHJlc3Npb25QYXJzZXIueToKKyAgICAgICAgI2RlZmluZSBZ
WUVOQUJMRV9OTFMgMAorICAgICAgICAjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisKKyAg
ICAgICAgQmlzb24gMi4zIGRvZXNuJ3QgZmlyc3QgY2hlY2sgdGhhdCB0aGVzZSBtYWNyb3MgYXJl
IGRlZmluZWQgYmVmb3JlIHJlYWRpbmcgdGhlaXIgdmFsdWUsCisgICAgICAgIHdoaWNoIGNhdXNl
cyB0aGUgUVQgYnVpbGQgdG8gZmFpbC4KKworICAgICAgICBXZSB3b3JrIGFyb3VuZCB0aGlzIGlz
c3VlIGluIHRoZSBzYW1lIHdheSBpbiBDU1NHcmFtbWFyLnkuCisKKyAgICAgICAgSSB3aWxsIHdv
cmsgb24gY29udHJpYnV0aW5nIHRoaXMgY2hhbmdlIGJhY2sgdG8gQU5HTEUuCisKKyAgICAgICAg
KiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluY2x1ZGUvR0xF
UzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAg
ICAgICAgKiBzcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVn
LmNwcDoKKyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpvdXRwdXQpOgorICAgICAgICAoZ2w6
OnRyYWNlKToKKyAgICAgICAgKGdsOjpwZXJmQWN0aXZlKToKKyAgICAgICAgKGdsOjpTY29wZWRQ
ZXJmRXZlbnRIZWxwZXI6OlNjb3BlZFBlcmZFdmVudEhlbHBlcik6CisgICAgICAgIChnbDo6U2Nv
cGVkUGVyZkV2ZW50SGVscGVyOjp+U2NvcGVkUGVyZkV2ZW50SGVscGVyKToKKyAgICAgICAgKiBz
cmMvY29tbW9uL3ZlcnNpb24uaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwOgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50
aWZ5RnVuY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db21waWxlci5jcHA6CisgICAgICAgIChp
c1dlYkdMQmFzZWRTcGVjKToKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAg
IChUQ29tcGlsZXI6OnJld3JpdGVDU1NTaGFkZXIpOgorICAgICAgICAoVENvbXBpbGVyOjplbmZv
cmNlVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKToKKyAgICAgICAgKFRDb21waWxlcjo6ZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0RldGVjdERpc2NvbnRpbnVpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpEZXRlY3RMb29w
RGlzY29udGludWl0eTo6dHJhdmVyc2UpOgorICAgICAgICAoc2gpOgorICAgICAgICAoc2g6OkRl
dGVjdExvb3BEaXNjb250aW51aXR5Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgIChzaDo6RGV0ZWN0
TG9vcERpc2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpjb250YWlu
c0xvb3BEaXNjb250aW51aXR5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlv
bjo6dHJhdmVyc2UpOgorICAgICAgICAoc2g6OkRldGVjdEdyYWRpZW50T3BlcmF0aW9uOjp2aXNp
dFVuYXJ5KToKKyAgICAgICAgKHNoOjpEZXRlY3RHcmFkaWVudE9wZXJhdGlvbjo6dmlzaXRBZ2dy
ZWdhdGUpOgorICAgICAgICAoc2g6OmNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24pOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5Lmg6IEFkZGVkLgorICAgICAgICAo
c2gpOgorICAgICAgICAoRGV0ZWN0TG9vcERpc2NvbnRpbnVpdHkpOgorICAgICAgICAoRGV0ZWN0
R3JhZGllbnRPcGVyYXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaWFnbm9zdGljcy5j
cHA6IEFkZGVkLgorICAgICAgICAoVERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MpOgorICAgICAg
ICAoVERpYWdub3N0aWNzOjp+VERpYWdub3N0aWNzKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6
d3JpdGVJbmZvKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6d3JpdGVEZWJ1Zyk6CisgICAgICAg
IChURGlhZ25vc3RpY3M6OnByaW50KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGlhZ25vc3Rp
Y3MuaDogQWRkZWQuCisgICAgICAgIChURGlhZ25vc3RpY3MpOgorICAgICAgICAoVERpYWdub3N0
aWNzOjppbmZvU2luayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKGdldEJlaGF2aW9yKToKKyAgICAgICAgKFREaXJlY3RpdmVI
YW5kbGVyOjpURGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6
flREaXJlY3RpdmVIYW5kbGVyKToKKyAgICAgICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVF
cnJvcik6CisgICAgICAgIChURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlUHJhZ21hKToKKyAgICAg
ICAgKFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVFeHRlbnNpb24pOgorICAgICAgICAoVERpcmVj
dGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9EaXJl
Y3RpdmVIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAoVERpcmVjdGl2ZUhhbmRsZXIpOgorICAg
ICAgICAoVERpcmVjdGl2ZUhhbmRsZXI6OnByYWdtYSk6CisgICAgICAgIChURGlyZWN0aXZlSGFu
ZGxlcjo6ZXh0ZW5zaW9uQmVoYXZpb3IpOgorICAgICAgICAqIHNyYy9jb21waWxlci9FeHRlbnNp
b25CZWhhdmlvci5oOgorICAgICAgICAoZ2V0QmVoYXZpb3JTdHJpbmcpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoKKyAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgor
ICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFsaXplKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJ
bnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDog
QWRkZWQuCisgICAgICAgIChJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
RnJlZVBhcnNlQ29udGV4dEluZGV4KToKKyAgICAgICAgKEluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQpOgorICAgICAgICAoRnJlZVBhcnNlQ29udGV4dCk6CisgICAgICAgIChHZXRHbG9iYWxQ
YXJzZUNvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250
ZXh0Lmg6CisgICAgICAgIChUVGhyZWFkUGFyc2VDb250ZXh0UmVjKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcDoKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFkZFNl
bGVjdGlvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL01hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHA6CisgICAgICAgIChzaDo6
c3RyKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpPdXRwdXRITFNMKToKKyAgICAgICAgKHNo
OjpPdXRwdXRITFNMOjp+T3V0cHV0SExTTCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6b3V0
cHV0KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoZWFkZXIpOgorICAgICAgICAoc2g6Ok91
dHB1dEhMU0w6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAg
IChzaDo6T3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoc2g6Ok91dHB1dEhM
U0w6OnZpc2l0TG9vcCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dHJhdmVyc2VTdGF0ZW1l
bnRzKToKKyAgICAgICAgKHNoKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoYW5kbGVFeGNl
c3NpdmVMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp0eXBlU3RyaW5nKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChzaDo6T3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
aDoKKyAgICAgICAgKHNoKToKKyAgICAgICAgKE91dHB1dEhMU0wpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9QYXJzZUhlbHBlci5jcHA6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJzZVZl
Y3RvckZpZWxkcyk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjplcnJvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0
Ojp3YXJuaW5nKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnRyYWNlKToKKyAgICAgICAgKFRQ
YXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKToKKyAgICAg
ICAgKFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpjb25z
dEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2sp
OgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayk6CisgICAgICAgIChU
UGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnZvaWRF
cnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJz
ZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6YXJyYXlTaXplRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheVF1
YWxpZmllckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJy
b3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2spOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
bm9uSW5pdEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2spOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKToKKyAgICAgICAgKFRQYXJzZUNvbnRl
eHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpmaW5k
RnVuY3Rpb24pOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKToK
KyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4pOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0VmVjdG9yTm9kZSk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJp
eE5vZGUpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RBcnJheU5vZGUpOgorICAg
ICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbik6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojpz
dHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayk6CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmg6CisgICAgICAgIChUUGFyc2VDb250ZXh0
OjpUUGFyc2VDb250ZXh0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQpOgorICAgICAgICAoVFBh
cnNlQ29udGV4dDo6aW5mb1NpbmspOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9u
QmVoYXZpb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6cHJhZ21hKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcDoKKyAgICAgICAgKFRBbGxvY2F0aW9uOjpjaGVja0d1
YXJkQmxvY2spOgorICAgICAgICAqIHNyYy9jb21waWxlci9QcmFnbWEuaDogQWRkZWQuCisgICAg
ICAgIChUUHJhZ21hKToKKyAgICAgICAgKFRQcmFnbWE6OlRQcmFnbWEpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFJlbmFtZUZ1bmN0
aW9uKToKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjpSZW5hbWVGdW5jdGlvbik6CisgICAgICAg
IChSZW5hbWVGdW5jdGlvbjo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9TaEhhbmRsZS5oOgorICAgICAgICAoVENvbXBpbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvU2hhZGVyTGFuZy5jcHA6CisgICAgICAgIChnZXRWYXJpYWJsZUluZm8pOgorICAgICAgICAq
IHNyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChUVHlwZTo6YnVpbGRNYW5n
bGVkTmFtZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlVuZm9s
ZFNob3J0Q2lyY3VpdDo6VW5mb2xkU2hvcnRDaXJjdWl0KToKKyAgICAgICAgKHNoKToKKyAgICAg
ICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6OnRyYXZlcnNlKToKKyAgICAgICAgKHNoOjpVbmZv
bGRTaG9ydENpcmN1aXQ6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENp
cmN1aXQ6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKHNoOjpVbmZvbGRTaG9ydENpcmN1aXQ6
OnZpc2l0TG9vcCk6CisgICAgICAgIChzaDo6VW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVt
cG9yYXJ5SW5kZXgpOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
aDogQWRkZWQuCisgICAgICAgIChzaCk6CisgICAgICAgIChVbmZvbGRTaG9ydENpcmN1aXQpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZGVidWcuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFw
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5jcHA6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6VERlcGVuZGVuY3lHcmFw
aCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoOjp+VERlcGVuZGVuY3lHcmFwaCk6CisgICAg
ICAgIChURGVwZW5kZW5jeUdyYXBoOjpjcmVhdGVBcmd1bWVudCk6CisgICAgICAgIChURGVwZW5k
ZW5jeUdyYXBoOjpjcmVhdGVGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aDo6Z2V0T3JDcmVhdGVTeW1ib2wpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3ApOgorICAg
ICAgICAoVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlTG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFw
aExvZ2ljYWxPcDo6Z2V0T3BTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9kZXBncmFw
aC9EZXBlbmRlbmN5R3JhcGguaDogQWRkZWQuCisgICAgICAgIChUR3JhcGhOb2RlKToKKyAgICAg
ICAgKFRHcmFwaE5vZGU6OlRHcmFwaE5vZGUpOgorICAgICAgICAoVEdyYXBoTm9kZTo6flRHcmFw
aE5vZGUpOgorICAgICAgICAoVEdyYXBoUGFyZW50Tm9kZSk6CisgICAgICAgIChUR3JhcGhQYXJl
bnROb2RlOjpUR3JhcGhQYXJlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6On5U
R3JhcGhQYXJlbnROb2RlKToKKyAgICAgICAgKFRHcmFwaFBhcmVudE5vZGU6OmFkZERlcGVuZGVu
dE5vZGUpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQpOgorICAgICAgICAoVEdyYXBoQXJndW1l
bnQ6OlRHcmFwaEFyZ3VtZW50KToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50Ojp+VEdyYXBoQXJn
dW1lbnQpOgorICAgICAgICAoVEdyYXBoQXJndW1lbnQ6OmdldEludGVybUZ1bmN0aW9uQ2FsbCk6
CisgICAgICAgIChUR3JhcGhBcmd1bWVudDo6Z2V0QXJndW1lbnROdW1iZXIpOgorICAgICAgICAo
VEdyYXBoRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6VEdyYXBo
RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFRHcmFwaEZ1bmN0aW9uQ2FsbDo6flRHcmFwaEZ1bmN0
aW9uQ2FsbCk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OmdldEludGVybUZ1bmN0aW9u
Q2FsbCk6CisgICAgICAgIChUR3JhcGhTeW1ib2wpOgorICAgICAgICAoVEdyYXBoU3ltYm9sOjpU
R3JhcGhTeW1ib2wpOgorICAgICAgICAoVEdyYXBoU3ltYm9sOjp+VEdyYXBoU3ltYm9sKToKKyAg
ICAgICAgKFRHcmFwaFN5bWJvbDo6Z2V0SW50ZXJtU3ltYm9sKToKKyAgICAgICAgKFRHcmFwaFNl
bGVjdGlvbik6CisgICAgICAgIChUR3JhcGhTZWxlY3Rpb246OlRHcmFwaFNlbGVjdGlvbik6Cisg
ICAgICAgIChUR3JhcGhTZWxlY3Rpb246On5UR3JhcGhTZWxlY3Rpb24pOgorICAgICAgICAoVEdy
YXBoU2VsZWN0aW9uOjpnZXRJbnRlcm1TZWxlY3Rpb24pOgorICAgICAgICAoVEdyYXBoTG9vcCk6
CisgICAgICAgIChUR3JhcGhMb29wOjpUR3JhcGhMb29wKToKKyAgICAgICAgKFRHcmFwaExvb3A6
On5UR3JhcGhMb29wKToKKyAgICAgICAgKFRHcmFwaExvb3A6OmdldEludGVybUxvb3ApOgorICAg
ICAgICAoVEdyYXBoTG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6VEdyYXBo
TG9naWNhbE9wKToKKyAgICAgICAgKFRHcmFwaExvZ2ljYWxPcDo6flRHcmFwaExvZ2ljYWxPcCk6
CisgICAgICAgIChUR3JhcGhMb2dpY2FsT3A6OmdldEludGVybUxvZ2ljYWxPcCk6CisgICAgICAg
IChURGVwZW5kZW5jeUdyYXBoKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luKToK
KyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoOjpiZWdpblNhbXBsZXJTeW1ib2xzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVu
ZFNhbXBsZXJTeW1ib2xzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmJlZ2luVXNlckRl
ZmluZWRGdW5jdGlvbkNhbGxzKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGg6OmVuZFVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxscyk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Vy
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6OlREZXBlbmRlbmN5R3JhcGhU
cmF2ZXJzZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRTeW1i
b2wpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRBcmd1bWVudCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdEZ1bmN0aW9uQ2FsbCk6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbik6Cisg
ICAgICAgIChURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyOjp2aXNpdExvb3ApOgorICAgICAgICAo
VERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlcjo6Z2V0RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lH
cmFwaFRyYXZlcnNlcjo6aW5jcmVtZW50RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFw
aFRyYXZlcnNlcjo6ZGVjcmVtZW50RGVwdGgpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlcjo6Y2xlYXJWaXNpdGVkKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJz
ZXI6Om1hcmtWaXNpdGVkKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXI6Omlz
VmlzaXRlZCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aEJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpi
dWlsZCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0
aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1bmN0aW9uQ2Fs
bCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBZ2dyZWdhdGVDaGls
ZHJlbik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRTeW1ib2wpOgor
ICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9naWNhbE9wKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdEJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojpjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChU
RGVwZW5kZW5jeUdyYXBoQnVpbGRlcik6CisgICAgICAgIChUTm9kZVNldFN0YWNrKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpUTm9kZVNldFN0YWNr
KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjp+VE5v
ZGVTZXRTdGFjayk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VE5vZGVTZXRT
dGFjazo6Z2V0VG9wU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9k
ZVNldFN0YWNrOjpwdXNoU2V0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpU
Tm9kZVNldFN0YWNrOjpwb3BTZXQpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6
OlROb2RlU2V0U3RhY2s6OnBvcFNldEludG9OZXh0KToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjppbnNlcnRJbnRvVG9wU2V0KToKKyAgICAgICAgKFRE
ZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldFN0YWNrOjpjbGVhcik6CisgICAgICAgIChU
Tm9kZVNldE1haW50YWluZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlRO
b2RlU2V0TWFpbnRhaW5lcjo6VE5vZGVTZXRNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhCdWlsZGVyOjpUTm9kZVNldE1haW50YWluZXI6On5UTm9kZVNldE1haW50YWluZXIp
OgorICAgICAgICAoVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIpOgorICAgICAgICAoVERl
cGVuZGVuY3lHcmFwaEJ1aWxkZXI6OlROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyOjpUTm9k
ZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVp
bGRlcjo6VE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXI6On5UTm9kZVNldFByb3BhZ2F0aW5n
TWFpbnRhaW5lcik6CisgICAgICAgIChUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjpU
TGVmdG1vc3RTeW1ib2xNYWludGFpbmVyKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3JhcGhCdWls
ZGVyOjpUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyOjp+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5l
cik6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6VERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIpOgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDogQWRk
ZWQuCisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRJbmRlbnRhdGlvbik6
CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdEFyZ3VtZW50KToKKyAgICAg
ICAgKFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKToKKyAgICAgICAg
KFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0U3ltYm9sKToKKyAgICAgICAgKFREZXBlbmRl
bmN5R3JhcGhPdXRwdXQ6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFREZXBlbmRlbmN5R3Jh
cGhPdXRwdXQ6OnZpc2l0TG9vcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2
aXNpdExvZ2ljYWxPcCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpvdXRwdXRB
bGxTcGFubmluZ1RyZWVzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0Lmg6IEFkZGVkLgorICAgICAgICAoVERlcGVuZGVuY3lHcmFwaE91dHB1
dCk6CisgICAgICAgIChURGVwZW5kZW5jeUdyYXBoT3V0cHV0OjpURGVwZW5kZW5jeUdyYXBoT3V0
cHV0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRHcmFwaE5vZGU6OnRyYXZlcnNlKToKKyAgICAg
ICAgKFRHcmFwaFBhcmVudE5vZGU6OnRyYXZlcnNlKToKKyAgICAgICAgKFRHcmFwaEFyZ3VtZW50
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhGdW5jdGlvbkNhbGw6OnRyYXZlcnNlKToKKyAg
ICAgICAgKFRHcmFwaFN5bWJvbDo6dHJhdmVyc2UpOgorICAgICAgICAoVEdyYXBoU2VsZWN0aW9u
Ojp0cmF2ZXJzZSk6CisgICAgICAgIChUR3JhcGhMb29wOjp0cmF2ZXJzZSk6CisgICAgICAgIChU
R3JhcGhMb2dpY2FsT3A6OnRyYXZlcnNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFu
Zy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3Bw
OgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5Z3V0c190KToKKyAgICAg
ICAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToK
KyAgICAgICAgKGlucHV0KToKKyAgICAgICAgKHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayk6CisgICAg
ICAgICh5eV9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5Z2V0X2xlbmcpOgorICAgICAgICAoc3Ry
aW5nX2lucHV0KToKKyAgICAgICAgKHl5ZXJyb3IpOgorICAgICAgICAoZ2xzbGFuZ19maW5hbGl6
ZSk6CisgICAgICAgIChnbHNsYW5nX3NjYW4pOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNs
YW5nX3RhYi5jcHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oOgorICAg
ICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50
ZXJtQWdncmVnYXRlOjp+VEludGVybUFnZ3JlZ2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVn
YXRlOjppc1VzZXJEZWZpbmVkKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGUpOgorICAgICAg
ICAoVEludGVybVRyYXZlcnNlcjo6flRJbnRlcm1UcmF2ZXJzZXIpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9vc2luY2x1ZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2F0b20uYzoKKyAgICAgICAgKEZpbmRIYXNoTG9jKToKKyAgICAgICAgKFByaW50QXRvbVRhYmxl
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jOgorICAgICAgICAo
Q1BQcHJhZ21hKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAgKFByZWRlZmluZUlu
dE1hY3JvKToKKyAgICAgICAgKE1hY3JvRXhwYW5kKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5Lmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXc6IEFkZGVk
IHByb3BlcnRpZXMgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFi
cywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ct
dGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxs
b3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywg
YWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFi
cywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ctdGFicywgYWxsb3ct
dGFicyBhbmQgYWxsb3ctdGFicy4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Db250ZXh0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Db250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAg
ICAgIChEaWFnbm9zdGljcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3NCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChw
cDo6RGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcyk6CisgICAgICAgIChwcDo6RGlhZ25vc3RpY3M6
OnJlcG9ydCk6CisgICAgICAgIChwcDo6RGlhZ25vc3RpY3M6OnNldmVyaXR5KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmg6IEFkZGVk
LgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVIYW5kbGVyOjp+RGly
ZWN0aXZlSGFuZGxlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChnZXREaXJlY3RpdmUpOgorICAg
ICAgICAoaXNDb25kaXRpb25hbERpcmVjdGl2ZSk6CisgICAgICAgIChpc0VPRCk6CisgICAgICAg
IChza2lwVW50aWxFT0QpOgorICAgICAgICAoaXNNYWNyb05hbWVSZXNlcnZlZCk6CisgICAgICAg
IChpc01hY3JvUHJlZGVmaW5lZCk6CisgICAgICAgIChwcCk6CisgICAgICAgIChEZWZpbmVkUGFy
c2VyKToKKyAgICAgICAgKHBwOjpEZWZpbmVkUGFyc2VyOjpEZWZpbmVkUGFyc2VyKToKKyAgICAg
ICAgKHBwOjpEZWZpbmVkUGFyc2VyOjpsZXgpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNl
cjo6RGlyZWN0aXZlUGFyc2VyKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OmxleCk6
CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZSk6CisgICAgICAg
IChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZSk6CisgICAgICAgIChwcDo6RGlyZWN0
aXZlUGFyc2VyOjpwYXJzZVVuZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlSWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZik6CisgICAg
ICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmbmRlZik6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VFbGlmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYpOgor
ICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcik6CisgICAgICAgIChwcDo6
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYSk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUV4dGVuc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZVZlcnNpb24pOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnNraXBwaW5nKToKKyAgICAgICAgKHBwOjpEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUV4cHJlc3Npb25JZmRlZik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAg
ICAoRGlyZWN0aXZlUGFyc2VyKToKKyAgICAgICAgKENvbmRpdGlvbmFsQmxvY2spOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6Q29uZGl0aW9uYWxCbG9jazo6Q29uZGl0aW9uYWxCbG9j
ayk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoeXls
ZXgpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6RXhw
cmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcik6CisgICAgICAgIChwcDo6RXhwcmVzc2lv
blBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0V4cHJlc3Npb25QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChFeHBy
ZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLnk6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmNwcDogQWRkZWQgcHJvcGVydHkgYWxsb3ctdGFicy4KKyAgICAgICAg
KHBwOjpJbnB1dDo6SW5wdXQpOgorICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oOiBBZGRlZCBwcm9wZXJ0eSBh
bGxvdy10YWJzLgorICAgICAgICAocHApOgorICAgICAgICAoSW5wdXQpOgorICAgICAgICAocHA6
OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5wdXQ6OnN0cmluZyk6CisgICAgICAgIChw
cDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5w
dXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OnJlYWRMb2MpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TGV4ZXI6On5MZXhlcik6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaDogQWRkZWQuCisgICAgICAgIChw
cCk6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uY3BwOiBBZGRlZCBwcm9wZXJ0eSBhbGxvdy10YWJzLgorICAgICAgICAocHA6
Ok1hY3JvOjplcXVhbHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmg6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChwcCk6CisgICAg
ICAgIChwcDo6TWFjcm86Ok1hY3JvKToKKyAgICAgICAgKE1hY3JvKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVy
OjpUb2tlbkxleGVyKToKKyAgICAgICAgKHBwOjpUb2tlbkxleGVyOjpsZXgpOgorICAgICAgICAo
cHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhw
YW5kZXI6On5NYWNyb0V4cGFuZGVyKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpsZXgp
OgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmdldFRva2VuKToKKyAgICAgICAgKHBwOjpN
YWNyb0V4cGFuZGVyOjp1bmdldFRva2VuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpp
c05leHRUb2tlbkxlZnRQYXJlbik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cHVzaE1h
Y3JvKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwb3BNYWNybyk6CisgICAgICAgIChw
cDo6TWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6OmNvbGxlY3RNYWNyb0FyZ3MpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnJlcGxh
Y2VNYWNyb1BhcmFtcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm9FeHBhbmRlci5oOiBBZGRlZC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKE1hY3JvRXhw
YW5kZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFu
ZGVyOjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChwcDo6TWFjcm9FeHBh
bmRlcjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6
TWFjcm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6Ok1hY3JvQ29u
dGV4dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5jcHA6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgIChQcmVw
cm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNz
b3JJbXBsKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OlByZXBy
b2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKToKKyAg
ICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQpOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nv
cjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6bGV4KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaDogQWRk
ZWQgcHJvcGVydHkgYWxsb3ctdGFicy4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFByZXByb2Nl
c3Nvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaDogQWRkZWQuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6U291cmNlTG9jYXRp
b246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5jcHA6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAg
IChwcDo6VG9rZW46OnJlc2V0KToKKyAgICAgICAgKHBwOjpUb2tlbjo6ZXF1YWxzKToKKyAgICAg
ICAgKHBwOjpUb2tlbjo6c2V0QXRTdGFydE9mTGluZSk6CisgICAgICAgIChwcDo6VG9rZW46OnNl
dEhhc0xlYWRpbmdTcGFjZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW46OnNl
dEV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAgICAgKHBwOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oOiBBZGRlZCBwcm9wZXJ0eSBh
bGxvdy10YWJzLgorICAgICAgICAocHA6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChUb2tlbik6
CisgICAgICAgIChwcDo6VG9rZW46OmF0U3RhcnRPZkxpbmUpOgorICAgICAgICAocHA6OlRva2Vu
OjpoYXNMZWFkaW5nU3BhY2UpOgorICAgICAgICAocHA6OlRva2VuOjpleHBhbnNpb25EaXNhYmxl
ZCk6CisgICAgICAgIChwcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChw
cDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICh5eV9idWZmZXJfc3RhdGUpOgorICAgICAg
ICAoeXlfdHJhbnNfaW5mbyk6CisgICAgICAgICh5eWd1dHNfdCk6CisgICAgICAgICh5eV9nZXRf
cHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAgIChp
bnB1dCk6CisgICAgICAgIChwcHJlc3RhcnQpOgorICAgICAgICAocHBfc3dpdGNoX3RvX2J1ZmZl
cik6CisgICAgICAgIChwcF9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcF9jcmVhdGVf
YnVmZmVyKToKKyAgICAgICAgKHBwX2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAocHBfaW5pdF9i
dWZmZXIpOgorICAgICAgICAocHBfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHBwcHVzaF9idWZm
ZXJfc3RhdGUpOgorICAgICAgICAocHBwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHBwZW5z
dXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgIChwcF9zY2FuX2J1ZmZlcik6CisgICAgICAgIChw
cF9zY2FuX3N0cmluZyk6CisgICAgICAgIChwcF9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5X2Zh
dGFsX2Vycm9yKToKKyAgICAgICAgKHBwZ2V0X2V4dHJhKToKKyAgICAgICAgKHBwZ2V0X2xpbmVu
byk6CisgICAgICAgIChwcGdldF9jb2x1bW4pOgorICAgICAgICAocHBnZXRfaW4pOgorICAgICAg
ICAocHBnZXRfb3V0KToKKyAgICAgICAgKHBwZ2V0X2xlbmcpOgorICAgICAgICAocHBnZXRfdGV4
dCk6CisgICAgICAgIChwcHNldF9leHRyYSk6CisgICAgICAgIChwcHNldF9saW5lbm8pOgorICAg
ICAgICAocHBzZXRfY29sdW1uKToKKyAgICAgICAgKHBwc2V0X2luKToKKyAgICAgICAgKHBwc2V0
X291dCk6CisgICAgICAgIChwcGdldF9kZWJ1Zyk6CisgICAgICAgIChwcHNldF9kZWJ1Zyk6Cisg
ICAgICAgIChwcGdldF9sdmFsKToKKyAgICAgICAgKHBwc2V0X2x2YWwpOgorICAgICAgICAocHBn
ZXRfbGxvYyk6CisgICAgICAgIChwcHNldF9sbG9jKToKKyAgICAgICAgKHBwbGV4X2luaXQpOgor
ICAgICAgICAocHBsZXhfaW5pdF9leHRyYSk6CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMpOgor
ICAgICAgICAocHBsZXhfZGVzdHJveSk6CisgICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgorICAg
ICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAgICAgICAocHBhbGxvYyk6CisgICAgICAgIChwcHJl
YWxsb2MpOgorICAgICAgICAocHBmcmVlKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpU
b2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjp+VG9rZW5pemVy
KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmluaXQpOgorICAgICAgICAocHA6OlRva2VuaXpl
cjo6c2V0RmlsZU51bWJlcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpzZXRMaW5lTnVtYmVy
KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OmxleCk6CisgICAgICAgIChwcDo6VG9rZW5pemVy
Ojppbml0U2Nhbm5lcik6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmg6IEFk
ZGVkLgorICAgICAgICAocHApOgorICAgICAgICAoVG9rZW5pemVyKToKKyAgICAgICAgKENvbnRl
eHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5s
OiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0
ZV9wYXJzZXIuc2g6IEFkZGVkIHByb3BlcnR5IGFsbG93LXRhYnMuCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF90YWIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9q
OiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRp
bHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90
b2tlbl90eXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmM6CisgICAgICAgIChJbml0U2Nhbm5lcklucHV0KToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3N5bWJvbHMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5jOgorICAgICAgICAoUmVhZFRva2VuKToKKyAgICAgICAgKER1bXBUb2tlblN0cmVhbSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdGltaW5nOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcp
OgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0
aW9ucyk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVz
ZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZzo6YmVnaW5FcnJvcik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nOjppc1NhbXBsaW5nT3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZzo6dmlzaXRBcmd1bWVudCk6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAgIChSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nOjp2aXNpdExvb3ApOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6
dmlzaXRMb2dpY2FsT3ApOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oOiBBZGRlZC4KKyAgICAgICAgKFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6bnVt
RXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWlu
Zzo6dmlzaXRTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaDogQWRkZWQuCisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZyk6CisgICAgICAgIChSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6UmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6
OmVuZm9yY2VSZXN0cmljdGlvbnMpOgorICAgICAgICAoUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmc6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAgICAg
ICAgKGVnbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQp
OgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbCk6CisgICAgICAgICogc3Jj
L2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgIChEaXNwbGF5KToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAg
ICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlc2V0
U3dhcENoYWluKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcFJlY3QpOgorICAgICAgICAo
ZWdsKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcCk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OnBvc3RTdWJCdWZmZXIpOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAg
ICAgICAoU3VyZmFjZSk6CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFr
ZUN1cnJlbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtEeFVuaWZvcm1zRGlydHkpOgor
ICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVN0
YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVNoYWRlcnMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5VGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhl
bHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Ymxp
dEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBs
eURlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuaDoKKyAgICAg
ICAgKENvbnRleHQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwOgor
ICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2wpOgor
ICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIpOgorICAgICAgICAo
Z2w6OkZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuaDoKKyAgICAgICAgKEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL1Byb2dyYW0uY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OkF0dHJpYnV0
ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmlu
ZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6SW5mb0xv
Zyk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6fkluZm9Mb2cpOgorICAgICAgICAoZ2w6OkluZm9M
b2c6OmdldExlbmd0aCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6Z2V0TG9nKToKKyAgICAgICAg
KGdsOjpJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQpOgorICAgICAgICAoZ2w6OkluZm9Mb2c6OmFw
cGVuZCk6CisgICAgICAgIChnbDo6SW5mb0xvZzo6cmVzZXQpOgorICAgICAgICAoZ2w6OlByb2dy
YW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFj
aFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQp
OgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRlTG9jYXRpb24p
OgorICAgICAgICAoZ2w6OlByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbTo6bGluayk6CisgICAgICAgIChnbDo6QXR0cmlidXRlQmluZGluZ3M6Omdl
dEF0dHJpYnV0ZUJpbmRpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3Jh
bTo6c2V0UHJvZ3JhbUJpbmFyeSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xl
bmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0SW5mb0xvZyk6CisgICAgICAgIChnbDo6
UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRB
Y3RpdmVBdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZlQXR0
cmlidXRlTWF4TGVuZ3RoKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3Jt
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQpOgorICAgICAg
ICAoZ2w6OlByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgpOgorICAgICAgICAoZ2w6
OlByb2dyYW06OnZhbGlkYXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjppc1ZhbGlkYXRlZCk6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmg6CisgICAgICAgIChnbCk6CisgICAg
ICAgIChBdHRyaWJ1dGVCaW5kaW5ncyk6CisgICAgICAgIChJbmZvTG9nKToKKyAgICAgICAgKFBy
b2dyYW0pOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHA6IEFkZGVk
LgorICAgICAgICAoZ2w6OnN0cik6CisgICAgICAgIChnbCk6CisgICAgICAgIChnbDo6VW5pZm9y
bTo6VW5pZm9ybSk6CisgICAgICAgIChnbDo6VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAo
Z2w6OlVuaWZvcm06OmlzQXJyYXkpOgorICAgICAgICAoZ2w6OlVuaWZvcm1Mb2NhdGlvbjo6VW5p
Zm9ybUxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSk6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6
Z2V0QXR0cmlidXRlTG9jYXRpb24pOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNl
bWFudGljSW5kZXgpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVy
UmFuZ2UpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUpOgorICAg
ICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTJmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTNmdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdik6Cisg
ICAgICAgIChnbDo6dHJhbnNwb3NlTWF0cml4KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4NGZ2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KToK
KyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtZnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6
UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6Y29tcGlsZVRvQmluYXJ5KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpwYWNrVmFy
eWluZ3MpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6bGlua0F0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmxpbmtVbmlm
b3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybSk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5h
cnk6OnVuZGVjb3JhdGVVbmlmb3JtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1uYnYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5m
dik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KToKKyAgICAg
ICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYpOgorICAgICAgICAoZ2w6OlBy
b2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtNGl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm1uaXYpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGUpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKGds
OjpQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgpOgorICAgICAgICAo
Z2w6OlByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCk6CisgICAgICAgIChnbDo6UHJvZ3JhbUJp
bmFyeTo6dmFsaWRhdGUpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OnZhbGlkYXRlU2Ft
cGxlcnMpOgorICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5nZUxvY2F0
aW9uKToKKyAgICAgICAgKGdsOjpQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24pOgor
ICAgICAgICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbik6CisgICAgICAg
IChnbDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24pOgorICAgICAg
ICAoZ2w6OlByb2dyYW1CaW5hcnk6OmdldER4RnJvbnRDQ1dMb2NhdGlvbik6CisgICAgICAgIChn
bDo6UHJvZ3JhbUJpbmFyeTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24pOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oOiBBZGRlZC4KKyAgICAgICAgKGdsKToKKyAg
ICAgICAgKFVuaWZvcm0pOgorICAgICAgICAoZ2w6OlVuaWZvcm06OlJlZ2lzdGVySW5mbzo6UmVn
aXN0ZXJJbmZvKToKKyAgICAgICAgKFJlZ2lzdGVySW5mbyk6CisgICAgICAgIChnbDo6VW5pZm9y
bTo6UmVnaXN0ZXJJbmZvOjpzZXQpOgorICAgICAgICAoVW5pZm9ybUxvY2F0aW9uKToKKyAgICAg
ICAgKFByb2dyYW1CaW5hcnkpOgorICAgICAgICAoU2FtcGxlcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2wpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5KToKKyAgICAgICAgKGdsOjpSZW5k
ZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1w
bGVzKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCk6Cisg
ICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
Lmg6CisgICAgICAgIChnbCk6CisgICAgICAgIChSZW5kZXJidWZmZXJUZXh0dXJlMkQpOgorICAg
ICAgICAoUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvU2hhZGVyLmNwcDoKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldEluZm9Mb2cpOgorICAgICAg
ICAoZ2w6OlNoYWRlcjo6Z2V0U291cmNlSW1wbCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaDoKKyAgICAgICAgKFNoYWRlcik6CisgICAgICAgIChWZXJ0ZXhTaGFkZXIpOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbDo6Q29udmVydFRl
eHR1cmVGb3JtYXRUeXBlKToKKyAgICAgICAgKGdsOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxl
KToKKyAgICAgICAgKGdsOjpHZXRUZXh0dXJlVXNhZ2UpOgorICAgICAgICAoZ2wpOgorICAgICAg
ICAoZ2w6OkltYWdlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpJbWFnZTo6dXBkYXRl
U3VyZmFjZSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWREYXRhKToKKyAgICAgICAgKGdsOjpJ
bWFnZTo6bG9hZEFscGhhRGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRBbHBoYURhdGFT
U0UyKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKToKKyAgICAgICAg
KGdsOjpJbWFnZTo6bG9hZEFscGhhSGFsZkZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6
OmxvYWRMdW1pbmFuY2VEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUZs
b2F0RGF0YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRh
KToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YSk6CisgICAgICAg
IChnbDo6SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YSk6CisgICAgICAgIChnbDo6
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6Oklt
YWdlOjpsb2FkUkdCVUJ5dGVEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQjU2NURh
dGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCRmxvYXREYXRhKToKKyAgICAgICAgKGds
OjpJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2Fk
UkdCQVVCeXRlRGF0YVNTRTIpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQVVCeXRlRGF0
YSk6CisgICAgICAgIChnbDo6SW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEpOgorICAgICAgICAoZ2w6
OkltYWdlOjpsb2FkUkdCQTU1NTFEYXRhKToKKyAgICAgICAgKGdsOjpJbWFnZTo6bG9hZFJHQkFG
bG9hdERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEpOgor
ICAgICAgICAoZ2w6OkltYWdlOjpsb2FkQkdSQURhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjps
b2FkQ29tcHJlc3NlZERhdGEpOgorICAgICAgICAoZ2w6OkltYWdlOjpjb3B5KToKKyAgICAgICAg
KGdsOjpUZXh0dXJlU3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmVTdG9yYWdlOjppc1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZVN0b3JhZ2U6
OmdldFVzYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpz
dWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb3B5SW1hZ2UpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlMkQ6OnN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxl
dGUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmlzRGVwdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y3JlYXRlVGV4
dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRE
ZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6Omlz
U2FtcGxlckNvbXBsZXRlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVz
c2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN0b3Jh
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIpOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5oOgorICAgICAgICAoSW1hZ2UpOgorICAgICAg
ICAoVGV4dHVyZVN0b3JhZ2UpOgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChUZXh0dXJl
U3RvcmFnZTJEKToKKyAgICAgICAgKFRleHR1cmUyRCk6CisgICAgICAgIChUZXh0dXJlU3RvcmFn
ZUN1YmVNYXApOgorICAgICAgICAoVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlVmVydGV4RGF0YSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIuY3BwOgorICAgICAgICAoY2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgICh2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zMkQpOgorICAgICAgICAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1
YmUpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajoKKyAgICAgICAg
KiBzcmMvbGliR0xFU3YyL21hdGh1dGlsLmg6CisgICAgICAgIChnbCk6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6OklzRGVwdGhUZXh0dXJlKToK
KyAgICAgICAgKGdsKToKKyAgICAgICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAg
KGdsOjpFeHRyYWN0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpFeHRyYWN0VHlwZSk6CisgICAgICAg
IChlczJkeDo6Q29udmVydEN1YmVGYWNlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpHZXRTdGVuY2lsU2l6ZSk6CisgICAgICAg
IChkeDJlczo6R2V0RGVwdGhTaXplKToKKyAgICAgICAgKGR4MmVzOjpJc0RlcHRoVGV4dHVyZUZv
cm1hdCk6CisgICAgICAgIChkeDJlcyk6CisgICAgICAgIChkeDJlczo6SXNTdGVuY2lsVGV4dHVy
ZUZvcm1hdCk6CisgICAgICAgIChkeDJlczo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdCk6Cisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaDoKKyAgICAgICAgKGdsKToKKyAgICAg
ICAgKGR4MmVzKToKKwogMjAxMi0wNy0xMSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgog
CiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzkxMDI0PiBCdWlsZCBhZ2FpbnN0IHRoZSBs
YXRlc3QgU0RLIHdoZW4gdGFyZ2V0aW5nIG9sZGVyIE9TIFggdmVyc2lvbnMuCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDQ4IEBACiAJCUEwQUFCRTQ1MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0MzEzQUZFOTQ1
MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5oICovOyB9OwogCQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVC
RDEgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NM
LmNwcCAqLzsgfTsKIAkJQTBBQUJFNDkxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NM
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMEFBQkU0
NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLzsgfTsKKwkJQTI2NTY3QkIx
NTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFn
bm9zdGljcy5jcHAgKi87IH07CisJCUEyNjU2N0JDMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9z
dGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi87IH07CisJCUEyNjU2N0JE
MTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IyMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLzsgfTsKKwkJQTI2NTY3QkUxNTlDMjFCMTAwMzk4NTM5
IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
LmggKi87IH07CisJCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0I0MTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LzsgfTsKKwkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3QjUxNTlDMjFCMTAwMzk4
NTM5IC8qIFByYWdtYS5oICovOyB9OworCQlBMjY1NjdDMTE1OUMyMUIxMDAzOTg1MzkgLyogUmVu
YW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyNjU2N0I2MTU5QzIxQjEwMDM5ODUzOSAvKiBSZW5hbWVGdW5jdGlvbi5oICovOyB9Owor
CQlBMjY1NjdFQzE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovOyB9OworCQlBMjY1NjdFRDE1OUMyMUNF
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0M5MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OworCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NTY3Q0ExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLzsgfTsK
KwkJQTI2NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NCMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi87IH07CisJCUEyNjU2N0YwMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2
ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJ
QTI2NTY3RjIxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0UxNTlDMjFDRTAw
Mzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9OworCQlBMjY1NjdGMzE1OUMyMUNF
MDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Np
b25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NTY3RjUxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Qy
MTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi87IH07CisJCUEyNjU2N0Y2MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi87IH07CisJCUEy
NjU2N0Y3MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4
ZXIuY3BwICovOyB9OworCQlBMjY1NjdGODE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q1MTU5QzIx
Q0UwMDM5ODUzOSAvKiBMZXhlci5oICovOyB9OworCQlBMjY1NjdGOTE1OUMyMUNFMDAzOTg1Mzkg
LyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTI2NTY3RDYxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NTY3
RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm8uaCAq
LzsgfTsKKwkJQTI2NTY3RkIxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDgxNTlD
MjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OworCQlBMjY1NjdGQzE1OUMy
MUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhw
YW5kZXIuaCAqLzsgfTsKKwkJQTI2NTY4MDMxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKKwkJQTI2NTY4
MDQxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTExNTlDMjFDRTAwMzk4NTM5IC8qIFBy
ZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY1NjgwNTE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNl
TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VMb2NhdGlvbi5oICovOyB9OworCQlB
MjY1NjgwNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuLmNwcCAqLzsgfTsKKwkJQTI2NTY4MDgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFNTE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2NTY4MEExNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjdFNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAqLzsgfTsK
KwkJQTI2NTY4MEIxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTgxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY1NjgyQjE1OUMyMzg4MDAzOTg1MzkgLyogcHBf
dXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oICovOyB9OworCQlBMjY1NjgzOTE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODJEMTU5QzIzRTEwMDM5ODUzOSAvKiBE
ZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMjY1NjgzQTE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmggKi87
IH07CisJCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsK
KwkJQTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMwMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi87IH07CisJCUEyNjU2
ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzExNTlDMjNFMTAw
Mzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi87IH07CisJCUEyNjU2ODNFMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMyMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCAqLzsgfTsKKwkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODMzMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07CisJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM1MTU5QzIzRTEwMDM5ODUzOSAvKiBS
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKKwkJQTI2NTY4NDExNTlDMjNF
MTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM2MTU5QzIzRTEwMDM5ODUz
OSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi87IH07CisJCUEyNjU2ODQyMTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNzE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwICovOyB9OworCQlBMjY1Njg0
MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2ODM4MTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovOyB9OwogCQlGQjM5RDI3
MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENv
ZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYz
NUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3Bw
ICovOyB9OwpAQCAtNjMsNyArMTA1LDYgQEAKIAkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8q
IFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovOyB9Owog
CQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUMxMjAwRjM1QTAwMDg4
RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5j
cHAgKi87IH07Ci0JCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi87IH07CiAJCUZCMzlENzZFMTIw
MTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFu
Zy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIC8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0xMDMsNiArMTQ0LDUyIEBACiAJCUEwQUFC
RTQzMTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0
b3JFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NM
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUz
OSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0IxMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1
NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjMxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFu
ZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdCNDE1OUMyMUIxMDAz
OTg1MzkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjUxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QjYxNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0I3MTU5QzIxQjEwMDM5ODUzOSAvKiBV
bmZvbGRTaG9ydENpcmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NTY3QjgxNTlDMjFCMTAwMzk4NTM5IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9z
dGljc0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDOTE1OUMy
MUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3
Q0ExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3Q0IxNTlDMjFDRTAwMzk4NTM5IC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0
aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdDQzE1OUMy
MUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0NEMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHBy
ZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdD
RjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY1NjdENDE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY3RDYxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NTY3RDcxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0V4cGFuZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUz
OSAvKiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY3
RTExNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjU2N0U0MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMjY1NjdFNzE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODJBMTU5QzIzODgwMDM5ODUzOSAvKiBw
cF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgyRDE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlcGVuZGVuY3lHcmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjU2
ODJFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjU2ODJGMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY1NjgzMDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NTY4MzIxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzMxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTI2NTY4MzUxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEy
NjU2ODM2MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzcxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1
ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjIs
MTUgKzI0OSwxMSBAQAogCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5
RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQ0IxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvaiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gdHJhbnNsYXRvcl9jb21tb24udmNwcm9qOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDQzEyMDBGMjYyMDAwODhFNjkgLyogdHJh
bnNsYXRvcl9obHNsLnZjcHJvaiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gdGV4dC54bWw7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSB0cmFuc2xhdG9y
X2hsc2wudmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRDEyMDBG
MjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUNFMTIwMEYyNjIwMDA4OEU2OSAvKiBU
cmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xh
dG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFDRjEyMDBGMjYy
MDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFu
c2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9y
SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDFEMTEyMDBGMjYyMDAw
ODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdl
bkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyNDEyMDBGMzVB
MDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBD
b21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOSw4ICszMTIsNiBAQAog
CQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JH
TFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjZDMTIwMEYzNUEwMDA4
OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2
RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGlu
ZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtMjU1LDYgKzMz
Niw2MiBAQAogCQkJcGF0aCA9IENvbmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJQTI2NTY3QzUxNTlDMjFDRTAwMzk4NTM5IC8qIG5ldyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2NTY4MkExNTlDMjM4ODAw
Mzk4NTM5IC8qIHBwX3V0aWxzLmggKi8sCisJCQkJQTI2NTY3QzgxNTlDMjFDRTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzQmFzZS5jcHAgKi8sCisJCQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8q
IERpYWdub3N0aWNzLmggKi8sCisJCQkJQTI2NTY3Q0ExNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVj
dGl2ZUhhbmRsZXJCYXNlLmNwcCAqLywKKwkJCQlBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5oICovLAorCQkJCUEyNjU2N0NDMTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjU2N0NEMTU5QzIxQ0UwMDM5ODUzOSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY1NjdDRTE1OUMyMUNFMDAzOTg1MzkgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjU2N0Q0MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NTY3
RDUxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmggKi8sCisJCQkJQTI2NTY3RDYxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY1NjdENzE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NTY3RDkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY1NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAq
LywKKwkJCQlBMjY1NjdFMTE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJ
CQkJQTI2NTY3RTIxNTlDMjFDRTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJ
QTI2NTY3RTQxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY1NjdFNTE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uaCAqLywKKwkJCQlBMjY1NjdFNzE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW5pemVyLmNwcCAqLywKKwkJCQlBMjY1NjdFODE1OUMyMUNFMDAzOTg1MzkgLyog
VG9rZW5pemVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IG5ldzsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCUEyNjU2ODJDMTU5QzIzRTEwMDM5ODUzOSAvKiBkZXBncmFwaCAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8sCisJCQkJQTI2NTY4MkUx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oICovLAorCQkJCUEyNjU2ODJGMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLywKKwkJCQlBMjY1
NjgzMDE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovLAorCQkJ
CUEyNjU2ODMxMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwICov
LAorCQkJCUEyNjU2ODMyMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCAqLywKKwkJCQlBMjY1NjgzMzE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBkZXBncmFwaDsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCUEyNjU2ODM0MTU5QzIzRTEwMDM5ODUzOSAvKiB0aW1pbmcg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyNjU2ODM1
MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLywK
KwkJCQlBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oICovLAorCQkJCUEyNjU2ODM3MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5jcHAgKi8sCisJCQkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJl
c3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHRpbWluZzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUZCMzlEMDZFMTIwMEVEOTIwMDA4
OEU2OSA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNjgsOCAr
NDA1LDggQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAw
MDg4RTY5IC8qIEdMU0xBTkcgKi8sCiAJCQkJRkIzOUQxODUxMjAwRjI2MjAwMDg4RTY5IC8qIGNv
bXBpbGVyICovLAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAog
CQkJKTsKIAkJCW5hbWUgPSBTb3VyY2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjkyLDYgKzQyOSw4IEBACiAJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50
VW5pb24uaCAqLywKIAkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuY3BwICov
LAogCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUEyNjU2
N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLywKKwkJCQlB
MjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICovLAogCQkJ
CUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCiAJCQkJRkIzOUQx
OTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCiAJCQkJRkIzOUQxOTExMjAwRjI2
MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLApAQCAtMzI3LDE1ICs0NjYsMTMgQEAKIAkJ
CQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKIAkJCQlGQjM5RDFD
MTEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAogCQkJCUZCMzlEMUMyMTIw
MEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAotCQkJCUZCMzlEMUNCMTIwMEYyNjIw
MDA4OEU2OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCi0JCQkJRkIzOUQxQ0MxMjAw
RjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCiAJCQkJRkIzOUQxQ0Qx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDFDRTEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKIAkJCQlGQjM5RDFDRjEyMDBG
MjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAogCQkJCUZCMzlEMUQwMTIwMEYy
NjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAogCQkJCUZCMzlEMUQxMTIwMEYyNjIw
MDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZv
bGRTZWxlY3QuaCAqLywKKwkJCQlBMjY1NjdCNzE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmNwcCAqLywKKwkJCQlBMjY1NjdCODE1OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xk
U2hvcnRDaXJjdWl0LmggKi8sCiAJCQkpOwogCQkJaW5jbHVkZUluSW5kZXggPSAwOwogCQkJbmFt
ZSA9IGNvbXBpbGVyOwpAQCAtMzcwLDE3ICs1MDcsNiBAQAogCQlGQjM5RDIyMDEyMDBGMzVBMDAw
ODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAotCQkJCUEwQUFCRTMyMTNBRkU4NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5jcHAg
Ki8sCi0JCQkJQTBBQUJFMzMxM0FGRTg0NzAwRjJFQkQxIC8qIE91dHB1dEdMU0xCYXNlLmggKi8s
Ci0JCQkJQTBBQUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLywK
LQkJCQlBMEFBQkU0NzEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKLQkJ
CQlBMEFBQkU0MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8sCi0JCQkJQTBB
QUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLywKLQkJCQlBMEFBQkUyRTEz
QUZFODMwMDBGMkVCRDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAotCQkJCUEwQUFC
RTJGMTNBRkU4MzAwMEYyRUJEMSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAotCQkJCUEw
QUFCRTJBMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLywKLQkJCQlBMEFB
QkUyQjEzQUZFODEwMDBGMkVCRDEgLyogRm9yTG9vcFVucm9sbC5oICovLAotCQkJCUZCMzlEMjQ0
MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJRkIzOUQyMjExMjAwRjM1
QTAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAogCQkJCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2
RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCiAJCQkJNDk5NTFDMDYxNEI3QUFE
ODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCkBAIC0zOTAsMTMgKzUx
NiwyMCBAQAogCQkJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmgg
Ki8sCiAJCQkJRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlG
QjM5RDIyNzEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuaCAqLywKKwkJCQlBMjY1NjgyQzE1OUMy
M0UxMDAzOTg1MzkgLyogZGVwZ3JhcGggKi8sCiAJCQkJNDk5NTFDMDcxNEI3QUFEODAwNjBFOTZF
IC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCiAJCQkJNDk5NTFDMDgxNEI3QUFEODAwNjBFOTZF
IC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyNjU2N0IwMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTI2NTY3QjExNTlDMjFCMTAwMzk4NTM5IC8qIERp
YWdub3N0aWNzLmggKi8sCisJCQkJQTI2NTY3QjIxNTlDMjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyNjU2N0IzMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggKi8sCiAJCQkJOTBEOUIwRkExMkUxMURDQjAwMkQ0MjU1IC8qIEV4dGVuc2lv
bkJlaGF2aW9yLmggKi8sCisJCQkJQTBBQUJFMkExM0FGRTgxMDAwRjJFQkQxIC8qIEZvckxvb3BV
bnJvbGwuY3BwICovLAorCQkJCUEwQUFCRTJCMTNBRkU4MTAwMEYyRUJEMSAvKiBGb3JMb29wVW5y
b2xsLmggKi8sCisJCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywK
IAkJCQk5MEQ5QjBGQjEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwICovLAogCQkJ
CTkwRDlCMEZDMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCiAJCQkJOTBE
OUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJOTBEOUIwRkUx
MkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5RDIyQTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAogCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAv
KiBJbmZvU2luay5oICovLAogCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFs
aXplLmNwcCAqLywKQEAgLTQwNCwzOSArNTM3LDUwIEBACiAJCQkJRkIzOUQyMkUxMjAwRjM1QTAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAogCQkJCUZCMzlEMjJGMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCiAJCQkJRkIzOUQyMzAxMjAwRjM1QTAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCisJCQkJQTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovLAogCQkJCUZCMzlEMjMxMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCiAJCQkJRkIzOUQyMzIxMjAw
RjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCiAJCQkJRkIzOUQyMzMxMjAwRjM1
QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAogCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4
OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8q
IGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJQTBBQUJFMkUxM0FGRTgzMDAwRjJFQkQxIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKKwkJCQlBMEFBQkUyRjEzQUZFODMwMDBGMkVC
RDEgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQlGQjM5RDIzNzEyMDBGMzVBMDAw
ODhFNjkgLyogTU1hcC5oICovLAogCQkJCUZCMzlEMjM4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc2lu
Y2x1ZGUuaCAqLywKIAkJCQk5MEQ5QjBGRjEyRTExRENCMDAyRDQyNTUgLyogb3Nzb3VyY2VfbnNw
ci5jcHAgKi8sCiAJCQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCAqLywKIAkJCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNw
cCAqLywKKwkJCQlBMEFBQkU0MjEzQUZFOTQ1MDBGMkVCRDEgLyogT3V0cHV0RVNTTC5jcHAgKi8s
CisJCQkJQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLywKIAkJCQlG
QjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCiAJCQkJRkIzOUQy
M0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlBMEFBQkUzMjEzQUZF
ODQ3MDBGMkVCRDEgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAorCQkJCUEwQUFCRTMzMTNBRkU4
NDcwMEYyRUJEMSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAogCQkJCUZCMzlEMjNGMTIwMEYzNUEw
MDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCAqLywKIAkJCQlGQjM5RDI0MDEyMDBGMzVBMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuY3BwICovLAogCQkJCUZCMzlEMjQxMTIwMEYzNUEwMDA4OEU2OSAv
KiBQYXJzZUhlbHBlci5oICovLAogCQkJCUZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29s
QWxsb2MuY3BwICovLAogCQkJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2Mu
aCAqLywKKwkJCQlBMjY1NjdCNTE1OUMyMUIxMDAzOTg1MzkgLyogUHJhZ21hLmggKi8sCisJCQkJ
RkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKIAkJCQlGQjM5RDI1
NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAogCQkJCUZCMzlEMjU3
MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAogCQkJCUZCMzlEMjU4MTIw
MEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKIAkJCQlGQjM5RDI1OTEyMDBGMzVB
MDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAogCQkJCTkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAv
KiBTZWFyY2hTeW1ib2wuY3BwICovLAogCQkJCTkwRDlCMTAxMTJFMTFEQ0IwMDJENDI1NSAvKiBT
ZWFyY2hTeW1ib2wuaCAqLywKIAkJCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVy
TGFuZy5jcHAgKi8sCiAJCQkJRkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFuZGxlLmgg
Ki8sCiAJCQkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLywK
IAkJCQlGQjM5RDI1RDEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQlB
MjY1NjgzNDE1OUMyM0UxMDAzOTg1MzkgLyogdGltaW5nICovLAorCQkJCUEwQUFCRTQ2MTNBRkU5
NjEwMEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCisJCQkJQTBBQUJFNDcxM0FGRTk2
MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCiAJCQkJRkIzOUQyNjgxMjAwRjM1QTAw
MDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKIAkJCQlGQjM5RDI2OTEyMDBGMzVBMDAw
ODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKIAkJCQlGQjM5RDI2QzEyMDBGMzVBMDAwODhF
NjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xk
U2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2Vs
ZWN0LmggKi8sCiAJCQkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovLAog
CQkJCTkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi8sCiAJCQkJOTBEOUIxMEQx
MkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLApAQCAtNDUzLDYg
KzU5Nyw3IEBACiAJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUEyNjU2N0M1MTU5
QzIxQ0UwMDM5ODUzOSAvKiBuZXcgKi8sCiAJCQkJRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8q
IGF0b20uYyAqLywKIAkJCQlGQjM5RDI0NjEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5oICovLAog
CQkJCUZCMzlEMjQ3MTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCkBAIC01MDgsNiAr
NjUzLDI4IEBACiAJCQkJNDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OTUxQzBBMTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5NTFDMEMxNEI3QUFEODAw
NjBFOTZFIC8qIERldGVjdFJlY3Vyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3QkMx
NTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
NjdCRTE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3QzAxNTlDMjFCMTAwMzk4NTM5IC8qIFByYWdtYS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTI2NTY3QzExNTlDMjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMjY1NjdFRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBp
biBIZWFkZXJzICovLAorCQkJCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdGMTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdGMzE1OUMyMUNFMDAz
OTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RjYx
NTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjdGODE1
OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2N0ZBMTU5
QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NTY3RkMxNTlD
MjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2
ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUEyNjU2ODA1MTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VMb2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTI2NTY4MDgxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBMjY1NjgwQjE1OUMyMUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY1NjgyQjE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjU2ODNBMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjU2ODNDMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1NjgzRTE1OUMyM0UxMDAz
OTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY1
Njg0MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU4OCw3ICs3NTUsNiBAQAogCQkJ
CUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZCMzlEMkFBMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGQjM5RDJBQzEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQjExMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9s
ZFNlbGVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MEQ5QjEwMjEyRTExRENCMDAyRDQyNTUg
LyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTBEOUIxMDQxMkUxMURDQjAwMkQ0
MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwRDlCMTA1MTJFMTFE
Q0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTYwNCw2ICs3
NzAsMjYgQEAKIAkJCQlBMEFBQkU0ODEzQUZFOTYxMDBGMkVCRDEgLyogVHJhbnNsYXRvckVTU0wu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk5NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5OTUxQzBCMTRCN0FB
RDgwMDYwRTk2RSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2
NTY3QkIxNTlDMjFCMTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2N0JEMTU5QzIxQjEwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyNjU2N0JGMTU5QzIxQjEwMDM5ODUzOSAvKiBJbml0aWFsaXplUGFy
c2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0VDMTU5QzIxQ0UwMDM5ODUz
OSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RUUxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2N0YwMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTI2NTY3RjIxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RjUxNTlDMjFDRTAwMzk4NTM5IC8qIElu
cHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2N0Y3MTU5QzIxQ0UwMDM5ODUzOSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjdGOTE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY3RkIxNTlDMjFDRTAwMzk4NTM5IC8q
IE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4MDMxNTlDMjFDRTAw
Mzk4NTM5IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1NjgwNzE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4MEEx
NTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY1
NjgzOTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjU2ODNCMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2ODNEMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NTY4M0YxNTlDMjNF
MTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjU2ODQyMTU5QzIzRTEwMDM5ODUzOSAvKiBS
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWds
SW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAg
ICAgICAgICAgICAgICAgICAgMHg4OEZFCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9i
aW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJP
R1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYK
KyNlbmRpZgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiB0b2tlbnMK
ICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE0ODcsNiArMTQ5MiwxMSBAQCB0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElOCiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5
IDEKICNlbmRpZgogCisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9B
TkdMRV9wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisj
ZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2
aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBleHRlcm4gIkMi
IHsKIAogLy8gVmVyc2lvbiBudW1iZXIgZm9yIHNoYWRlciB0cmFuc2xhdGlvbiBBUEkuCiAvLyBJ
dCBpcyBpbmNyZW1lbnRlZCBldmVyeXRpbWUgdGhlIEFQSSBjaGFuZ2VzLgotI2RlZmluZSBTSF9W
RVJTSU9OIDEwNQorI2RlZmluZSBTSF9WRVJTSU9OIDEwNwogCiAvLwogLy8gVGhlIG5hbWVzIG9m
IHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHBy
ZWZpeApAQCAtNDksNyArNDksMjkgQEAgdHlwZWRlZiBlbnVtIHsKIAogdHlwZWRlZiBlbnVtIHsK
ICAgU0hfR0xFUzJfU1BFQyA9IDB4OEI0MCwKLSAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MQorICBT
SF9XRUJHTF9TUEVDID0gMHg4QjQxLAorCisgIC8vIFRoZSBDU1MgU2hhZGVycyBzcGVjIGlzIGEg
c3Vic2V0IG9mIHRoZSBXZWJHTCBzcGVjLgorICAvLworICAvLyBJbiBib3RoIENTUyB2ZXJ0ZXgg
YW5kIGZyYWdtZW50IHNoYWRlcnMsIEFOR0xFOgorICAvLyAoMSkgUmVzZXJ2ZXMgdGhlICJjc3Nf
IiBwcmVmaXguCisgIC8vICgyKSBSZW5hbWVzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGNzc19tYWlu
LgorICAvLyAoMykgRGlzYWJsZXMgdGhlIGdsX01heERyYXdCdWZmZXJzIGJ1aWx0LWluLgorICAv
LworICAvLyBJbiBDU1MgZnJhZ21lbnQgc2hhZGVycywgQU5HTEU6CisgIC8vICgxKSBEaXNhYmxl
cyB0aGUgZ2xfRnJhZ0NvbG9yIGJ1aWx0LWluLgorICAvLyAoMikgRGlzYWJsZXMgdGhlIGdsX0Zy
YWdEYXRhIGJ1aWx0LWluLgorICAvLyAoMykgRW5hYmxlcyB0aGUgY3NzX01peENvbG9yIGJ1aWx0
LWluLgorICAvLyAoNCkgRW5hYmxlcyB0aGUgY3NzX0NvbG9yTWF0cml4IGJ1aWx0LWluLgorICAv
LworICAvLyBBZnRlciBwYXNzaW5nIGEgQ1NTIHNoYWRlciB0aHJvdWdoIEFOR0xFLCB0aGUgYnJv
d3NlciBpcyBleHBlY3RlZCB0byBhcHBlbmQKKyAgLy8gYSBuZXcgbWFpbiBmdW5jdGlvbiB0byBp
dC4KKyAgLy8gVGhpcyBuZXcgbWFpbiBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNzc19tYWluIGZ1
bmN0aW9uLgorICAvLyBJdCBtYXkgYWxzbyBwZXJmb3JtIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyBs
aWtlIHZhcnlpbmcgYXNzaWdubWVudCwgdGV4dHVyZQorICAvLyBhY2Nlc3MsIGFuZCBnbF9GcmFn
Q29sb3IgYXNzaWdubWVudCBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIENTUyBTaGFkZXJzCisg
IC8vIGJsZW5kIG1vZGVzLgorICAvLworICBTSF9DU1NfU0hBREVSU19TUEVDID0gMHg4QjQyCiB9
IFNoU2hhZGVyU3BlYzsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTEwNCw3ICsxMjYsMjMgQEAgdHlw
ZWRlZiBlbnVtIHsKICAgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCA9IDB4
MDA4MCwKIAogICAvLyBUaGlzIGlzIG5lZWRlZCBvbmx5IGFzIGEgd29ya2Fyb3VuZCBmb3IgY2Vy
dGFpbiBPcGVuR0wgZHJpdmVyIGJ1Z3MuCi0gIFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05T
ID0gMHgwMTAwCisgIFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TID0gMHgwMTAwLAorCisg
IC8vIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZsYWcgdG8gZW5mb3JjZSByZXN0cmljdGlvbnMg
dGhhdCBhaW0gdG8gcHJldmVudCAKKyAgLy8gdGltaW5nIGF0dGFja3MuCisgIC8vIEl0IGdlbmVy
YXRlcyBjb21waWxhdGlvbiBlcnJvcnMgZm9yIHNoYWRlcnMgdGhhdCBjb3VsZCBleHBvc2Ugc2Vu
c2l0aXZlCisgIC8vIHRleHR1cmUgaW5mb3JtYXRpb24gdmlhIHRoZSB0aW1pbmcgY2hhbm5lbC4K
KyAgLy8gVG8gdXNlIHRoaXMgZmxhZywgeW91IG11c3QgY29tcGlsZSB0aGUgc2hhZGVyIHVuZGVy
IHRoZSBXZWJHTCBzcGVjCisgIC8vICh1c2luZyB0aGUgU0hfV0VCR0xfU1BFQyBmbGFnKS4KKyAg
U0hfVElNSU5HX1JFU1RSSUNUSU9OUyA9IDB4MDIwMCwKKyAgICAKKyAgLy8gVGhpcyBmbGFnIHBy
aW50cyB0aGUgZGVwZW5kZW5jeSBncmFwaCB0aGF0IGlzIHVzZWQgdG8gZW5mb3JjZSB0aW1pbmcK
KyAgLy8gcmVzdHJpY3Rpb25zIG9uIGZyYWdtZW50IHNoYWRlcnMuCisgIC8vIFRoaXMgZmxhZyBv
bmx5IGhhcyBhbiBlZmZlY3QgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisgIC8v
IC0gVGhlIHNoYWRlciBzcGVjIGlzIFNIX1dFQkdMX1NQRUMuCisgIC8vIC0gVGhlIGNvbXBpbGUg
b3B0aW9ucyBjb250YWluIHRoZSBTSF9USU1JTkdfUkVTVFJJQ1RJT05TIGZsYWcuCisgIC8vIC0g
VGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KKyAgU0hfREVQRU5ERU5DWV9H
UkFQSCA9IDB4MDQwMAogfSBTaENvbXBpbGVPcHRpb25zOwogCiAvLwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0NywzMiBAQAogCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAx
QzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJODk2
QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07CiAJCTkzQTQxQUYwMzZF
NUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJh
bnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5ODg2QkNENUQwREQ2OUI2RkRFMDlERDggLyogVW5m
b2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9Owog
CQk5QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhB
M0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKIAkJOUU4REZFMUNDRUYwMzhCRjJC
NjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3Bw
ICovOyB9OworCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlD
MzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4M0MxNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVj
dGl2ZUhhbmRsZXIuY3BwICovOyB9OworCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGly
ZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICov
OyB9OworCQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1
OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07CisJCUEyMDEwODQw
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3Bw
ICovOyB9OworCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAw
RTU3QkJFIC8qIExleGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07CisJCUEyMDEwODQz
MTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCAqLzsgfTsKKwkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFBy
ZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsK
KwkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAv
KiBUb2tlbi5jcHAgKi87IH07CisJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIw
MTA4MzgxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07CisJCUEyMDEwODYy
MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBF
NTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OworCQlBMjAxMDg2MzE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBE
ZXBlbmRlbmN5R3JhcGguY3BwICovOyB9OworCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoQnVpbGRlci5jcHAgKi87IH07CisJCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91
dHB1dC5jcHAgKi87IH07CisJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwICovOyB9OworCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJz
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OworCQlB
MjAxMDg2ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKKwkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIu
Y3BwICovOyB9OworCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAg
Ki87IH07CisJCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmNwcCAqLzsgfTsKKwkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5jcHAgKi87IH07CisJCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3RE
aXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNw
cCAqLzsgfTsKKwkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKIAkJ
QUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3
IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OwogCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyog
c3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKIAkJQjQ4NTg0MTdF
NTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBv
c3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CkBAIC0xMDQsNyArMTI3LDYgQEAKIAkJMjdDMTFFRTEw
RkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
YXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyN0U0QzdFRDBC
ODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUg
LyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRv
a2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdDOUI2RTZEQjc1MUUxMkEy
RjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0REREM3NzIxNjIwMkE0REUx
ODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CkBAIC0xNDcsNiArMTY5LDU5IEBACiAJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0
MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyog
SW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFu
c2xhdG9yX2dsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRv
cl9nbHNsLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUEyMDEwN0ZG
MTU5QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdC
QkUgLyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgy
MDE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJl
Y3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2
ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjMxNTlDMzFB
MDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyNDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVz
c2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHBy
ZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MjYx
NTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMjAxMDgyQTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUEyMDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgyRjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4cGFuZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzAxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9FeHBhbmRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgzMTE1OUMzMUEwMDBFNTdCQkUg
LyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHBfdXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzIxNTlDMzFBMDAwRTU3QkJF
IC8qIFByZXByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcmVwcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDgz
MzE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByZXByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjAxMDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzcxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9rZW5pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4MzkxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2Vu
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxl
bmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xp
bWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0OTE1OUMzMjRGMDBF
NTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg0RDE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NEYxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVwZW5kZW5j
eUdyYXBoT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUyMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBE
ZXRlY3RSZWN1cnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0UmVjdXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4
NTQxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpYWdub3N0aWNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODU3MTU5QzMyNEYwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjAxMDg1ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyMDEwODU5MTU5QzMyNEYwMEU1N0JCRSAvKiBFeHRlbnNpb25CZWhh
dmlvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25CZWhhdmlv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdC
QkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTIwMTA4NUIxNTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmFnbWEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTIwMTA4NUMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlbmFtZUZ1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmFtZUZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEwODYxMTU5
QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0
ZWN0RGlzY29udGludWl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXRlY3REaXNjb250aW51aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV0ZWN0RGlzY29udGludWl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMjAxMDg2RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xk
U2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
Zm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyMDEw
ODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE0NDdGNzVGMzNEQTRDNEMxMjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9y
X2hsc2wuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9obHNs
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE1MUM3MjhCNjE1QjQx
RTFENTlFOTkwMiAvKiB1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNzgsNyArMjUzLDYgQEAKIAkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3
IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBp
bnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMzcx
MUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTI5
QjZFOUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMDEzQTcyNDBC
REFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAvKiBT
ZWFyY2hTeW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoU3ltYm9sLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTAsNiArMjY0LDEzIEBACiAvKiBFbmQgUEJYRmlsZVJlZmVy
ZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZy
YW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMjMsOCArMzA0LDEwIEBACiAJCQkJQjc1
NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAogCQkJCTUyOEZGMjAxODM5QzZGMjMz
RTI2RkZEQSAvKiBjcHAuaCAqLywKIAkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bw
c3RydWN0LmMgKi8sCisJCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1p
dHMuaCAqLywKIAkJCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCiAJ
CQkJODMxMzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAorCQkJCUEyMDEwODFF
MTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8sCiAJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1
IC8qIHBhcnNlci5oICovLAogCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9j
ZXNzLmggKi8sCiAJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywK
QEAgLTI0MSwxNSArMzI0LDMyIEBACiAJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3Vy
Y2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2
NUY1ODRGREI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJMjdFNEM3RUQwQjgy
RTE4RENCRURGMUM5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1
N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCisJCQkJQTIwMTA4NEExNTlD
MzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCiAJCQkJQjdCMTEy
N0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKIAkJCQlDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAogCQkJCUY3NDYxOEYxOEZFNTQ0
ODExNTAxN0M0NCAvKiBDb21tb24uaCAqLywKIAkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4Mzkg
LyogQ29tcGlsZXIuY3BwICovLAogCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25z
dGFudFVuaW9uLmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNw
cCAqLywKKwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlB
MjAxMDg0QjE1OUMzMjRGMDBFNTdCQkUgLyogZGVwZ3JhcGggKi8sCisJCQkJQTIwMTA4NkQxNTlD
MzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovLAorCQkJCUEyMDEwODZF
MTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8sCisJCQkJQTIwMTA4
NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCisJCQkJQTIwMTA4
NTQxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5oICovLAorCQkJCUEyMDEwODU1
MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4NTYxNTlD
MzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4NTcxNTlDMzI0RjAw
RTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODU4MTU5QzMyNEYw
MEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4NTkxNTlDMzI0RjAw
RTU3QkJFIC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8sCiAJCQkJNURDOUI2NDdFMTBGNjVGNjYx
NDJFQ0MxIC8qIEZvckxvb3BVbnJvbGwuY3BwICovLAogCQkJCTE4MkJBRDUwRDRFNThCODg0RjVF
QjlGMyAvKiBGb3JMb29wVW5yb2xsLmggKi8sCisJCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5
IC8qIGdsc2xhbmcuaCAqLywKKwkJCQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFu
Z19sZXguY3BwICovLAorCQkJCTNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3Rh
Yi5jcHAgKi8sCisJCQkJNEZDRjMyQ0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmgg
Ki8sCiAJCQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKIAkJ
CQlGN0IyOTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKIAkJCQlBNTRGMkVE
MEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCkBAIC0yNTcsMTIgKzM1Nywx
OCBAQAogCQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAq
LywKIAkJCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAog
CQkJCTJFN0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAor
CQkJCUEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNw
cCAqLywKIAkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oICovLAotCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJz
ZS5jcHAgKi8sCiAJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5j
cHAgKi8sCi0JCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk3
OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJREVBRjZG
MzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJQzRGRTk4OEVGOUEy
OTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2
RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKIAkJCQk1N0NGMUY4M0U4NDI5
MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICovLAogCQkJCTgxQ0M0MjQ1
QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovLAorCQkJCURFRUFG
QzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJQzhCRDU5QkQ3MDU2RkZDMjEz
NzNDNTBBIC8qIG9zaW5jbHVkZS5oICovLAorCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAv
KiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCiAJCQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovLAogCQkJCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRw
dXRFU1NMLmggKi8sCiAJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wu
Y3BwICovLApAQCAtMjcxLDIwICszNzcsMjUgQEAKIAkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJG
MEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLywKIAkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMg
LyogT3V0cHV0SExTTC5jcHAgKi8sCiAJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91
dHB1dEhMU0wuaCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25z
dC5jcHAgKi8sCiAJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNw
cCAqLywKIAkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywK
IAkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKIAkJCQkx
MkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJQTIwMTA4NUIx
NTlDMzI0RjAwRTU3QkJFIC8qIFByYWdtYS5oICovLAorCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJE
Mzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCiAJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8q
IFF1YWxpZmllckFsaXZlLmNwcCAqLywKIAkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyog
UXVhbGlmaWVyQWxpdmUuaCAqLywKIAkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVt
b3ZlVHJlZS5jcHAgKi8sCiAJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRy
ZWUuaCAqLywKKwkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24u
aCAqLywKIAkJCQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAq
LywKIAkJCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0J
CQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCiAJCQkJNTZDN0U5
OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAorCQkJCUFFNjVFMTM5QUUx
MERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBE
RThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCiAJCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhG
IC8qIFN5bWJvbFRhYmxlLmggKi8sCisJCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRp
bWluZyAqLywKIAkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovLAogCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovLAogCQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCkBAIC0yOTIsMjkgKzQwMywxNyBAQAogCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAv
KiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCiAJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8q
IFRyYW5zbGF0b3JITFNMLmggKi8sCiAJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5
cGVzLmggKi8sCi0JCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5j
cHAgKi8sCi0JCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICov
LAorCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3Bw
ICovLAorCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQu
aCAqLywKKwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkJ
M0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAorCQkJCUE1MUM3MjhCNjE1
QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCiAJCQkJQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNB
IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAogCQkJCTkwMjU0ODQyRDcyOTc1NjcyQzJF
OUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCiAJCQkJMjdDMTFFRTEwRkVEMjk3OTkz
MUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCiAJCQkJNUQ5OTM1NEM0RDgxODdEMzg0Qzgx
MjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAogCQkJCUY3MjdBRUM5MDY3MTJFQzIzODA0MTQ2NCAv
KiBWZXJzaW9uR0xTTC5jcHAgKi8sCiAJCQkJMTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZl
cnNpb25HTFNMLmggKi8sCi0JCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNw
cCAqLywKLQkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQk0
OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEz
NzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3
MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBB
NjZCMDAgLyogZ2xzbGFuZ190YWIuaCAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0Yg
LyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50
ZXJtZWRpYXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVk
ZS5oICovLAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5j
cHAgKi8sCi0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICov
LAotCQkJCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCQkzRUU3
MjE1QTdBQjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi8sCi0JCQkJQTUxQzcyOEI2MTVCNDFF
MUQ1OUU5OTAyIC8qIHV0aWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gU291cmNlOwogCQkJcGF0
aCA9IGNvbXBpbGVyOwpAQCAtMzI5LDYgKzQyOCw2MiBAQAogCQkJKTsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CisJCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEyMDEwODFGMTU5
QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCisJCQkJQTIwMTA4MjAxNTlDMzFB
MDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCisJCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAorCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1
N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCisJCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCisJCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovLAorCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JC
RSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLywKKwkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdC
QkUgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAorCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JC
RSAvKiBJbnB1dC5jcHAgKi8sCisJCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0
LmggKi8sCisJCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKKwkJ
CQlBMjAxMDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKKwkJCQlBMjAxMDgyRDE1
OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAorCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1
N0JCRSAvKiBNYWNyby5oICovLAorCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLywKKwkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9F
eHBhbmRlci5oICovLAorCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5o
ICovLAorCQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICov
LAorCQkJCUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKKwkJ
CQlBMjAxMDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKKwkJCQlB
MjAxMDgzNjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAorCQkJCUEyMDEwODM3MTU5
QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovLAorCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JC
RSAvKiBUb2tlbml6ZXIuY3BwICovLAorCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbmV3OworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMjAxMDg0QzE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKKwkJCQlBMjAxMDg0RDE1
OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCisJCQkJQTIwMTA4NEUxNTlD
MzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAorCQkJCUEyMDEw
ODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCisJCQkJ
QTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8s
CisJCQkJQTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5o
ICovLAorCQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2
ZXJzZS5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRlcGdyYXBoOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTIwMTA4NUUx
NTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAor
CQkJCUEyMDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggKi8sCisJCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCAqLywKKwkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdGltaW5nOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjJDMTg0QzM1NDMxOThCQTUxNTky
RUE0IC8qIEJ1aWxkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTM0NCw2ICs0OTksNyBAQAogCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0
cmFuc2xhdG9yX2NvbW1vbi5hICovLAogCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBs
aWJ0cmFuc2xhdG9yX2dsc2wuYSAqLywKIAkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyog
bGlidHJhbnNsYXRvcl9obHNsLmEgKi8sCisJCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8q
IGxpYnRyYW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVj
dHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzgzLDYgKzUzOSwyMiBAQAogCQkJ
cHJvZHVjdFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xh
dG9yX2NvbW1vbi5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS5saWJyYXJ5LnN0YXRpYyI7CiAJCX07CisJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAvKiBw
cmVwcm9jZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovOworCQkJ
YnVpbGRQaGFzZXMgPSAoCisJCQkJQTIwMTA3REQxNTlDMzEzQzAwRTU3QkJFIC8qIFNvdXJjZXMg
Ki8sCisJCQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8sCisJCQkp
OworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOwor
CQkJbmFtZSA9IHByZXByb2Nlc3NvcjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21t
b247CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxp
YnRyYW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBs
ZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OwogCQlBODM4RTk1NzRCM0ZGMTQ3
OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFy
Z2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3OUM3ODI5RkQ3OTZDRjYyMUI0
NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNs
YXRvcl9obHNsIiAqLzsKQEAgLTQwOSw3ICs1ODEsMTEgQEAKIAkJCX07CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwogCQkJY29tcGF0aWJp
bGl0eVZlcnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlz
aDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAor
CQkJCWVuLAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsK
IAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIiOwpAQCAtNDE4LDYg
KzU5NCw3IEBACiAJCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29t
bW9uICovLAogCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wg
Ki8sCiAJCQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywK
KwkJCQlBMjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAogCQkJKTsK
IAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTQzMCw4ICs2MDcsMjcgQEAK
IAkJCQk0QjRCREU3QUQ2MjY2QjM5RUQ0M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUY3QjUyQTU0RENFODE1NUVEOTRFQ0Y4IC8qIE91dHB1dEhMU0wuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRyYW5zbGF0b3JI
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk4ODZCQ0Q1RDBERDY5QjZGREUwOUREOCAvKiBV
bmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2NDY2NTY2RDhDMEYwMjNBNTUz
NzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg3MTE1OUMz
MjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjAxMDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLyA9IHsK
KwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUEyMDEwODNCMTU5QzMxQTAwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdC
QkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDgzRDE1
OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUEyMDEwODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ0MTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVw
cm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJF
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JC
RSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00ODMsNiArNjc5LDE3IEBACiAJ
CQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAog
CQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAog
CQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjAxMDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJF
IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NDE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBMjAxMDg2NTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyMDEw
ODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MjAxMDg2QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC01NjEsNiArNzY4LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IERl
YnVnOwogCQl9OworCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVidWcgKi8gPSB7CisJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJ
RVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9O
UyA9ICgKKwkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKKwkJCQkJIlwiQU5HTEVfQ09N
UElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIi
LAorCQkJCSk7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4v
aW5jbHVkZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBj
b3B5IjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUEyMDEwN0ZFMTU5QzMxM0Mw
MEU1N0JCRSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJ
CUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSJcIkFOR0xFX0RJU0FCTEVf
VFJBQ0VcIiIsCisJCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENP
TVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKKwkJCQkpOworCQkJCUhFQURFUl9TRUFSQ0hf
UEFUSFMgPSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNU
X05BTUUgPSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVh
c2U7CisJCX07CiAJCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxlYXNlICovID0gewog
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAt
NjcyLDYgKzkxMSwxNSBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwog
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7CiAJCX07CisJCUEyMDEwN0ZDMTU5
QzMxM0MwMEU1N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAicHJlcHJvY2Vzc29yIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JC
RSAvKiBEZWJ1ZyAqLywKKwkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKKwkJfTsKIAkJQzcxRTc5Qzc4MjlGRDc5NkNG
NjIxQjQ0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0
cmFuc2xhdG9yX2hsc2wiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJ
CWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2FuZ2xldXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDQgKzE1LDggQEAKICAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAg
ICAgICBcCiAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKIAorI2lmIGRlZmluZWQo
X01TQ19WRVIpCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNlbmRpZiAv
LyBDT01NT05fQU5HTEVVVElMU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9kZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyAr
MSwxMDMgQEAKLS8vDQotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0vLw0KLQ0KLS8vIGRlYnVnLmNwcDogRGVidWdn
aW5nIHV0aWxpdGllcy4NCi0NCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiDQotDQotI2luY2x1
ZGUgPHN0ZGlvLmg+DQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlIDxkM2Q5Lmg+DQot
I2luY2x1ZGUgPHdpbmRvd3MuaD4NCi0NCi1uYW1lc3BhY2UgZ2wNCi17DQotDQotdHlwZWRlZiB2
b2lkIChXSU5BUEkgKlBlcmZPdXRwdXRGdW5jdGlvbikoRDNEQ09MT1IsIExQQ1dTVFIpOw0KLQ0K
LXN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1
bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQ0KLXsN
Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQ0KLSAgICBpZiAocGVyZkFjdGl2ZSgp
KQ0KLSAgICB7DQotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOw0KLSAgICAgICAgaW50IGxl
biA9IHZzcHJpbnRmX3MobWVzc2FnZSwgZm9ybWF0LCB2YXJhcmcpOw0KLSAgICAgICAgaWYgKGxl
biA8IDApDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLQ0K
LSAgICAgICAgLy8gVGhlcmUgYXJlIG5vIEFTQ0lJIHZhcmlhbnRzIG9mIHRoZXNlIEQzRFBFUkYg
ZnVuY3Rpb25zLg0KLSAgICAgICAgd2NoYXJfdCB3aWRlTWVzc2FnZVszMjc2OF07DQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAg
IHdpZGVNZXNzYWdlW2ldID0gbWVzc2FnZVtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHdpZGVN
ZXNzYWdlW2xlbl0gPSAwOw0KLQ0KLSAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UpOw0K
LSAgICB9DQotI2VuZGlmDQotDQotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpDQot
I2lmIGRlZmluZWQoTkRFQlVHKQ0KLSAgICBpZiAodHJhY2VGaWxlRGVidWdPbmx5KQ0KLSAgICB7
DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0jZW5kaWYNCi0NCi0gICAgRklMRSogZmlsZSA9
IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOw0KLSAgICBpZiAoZmlsZSkNCi0gICAgew0K
LSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOw0KLSAgICAgICAgZmNsb3Nl
KGZpbGUpOw0KLSAgICB9DQotI2VuZGlmDQotfQ0KLQ0KLXZvaWQgdHJhY2UoYm9vbCB0cmFjZUZp
bGVEZWJ1Z09ubHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQ0KLXsNCi0gICAgdmFfbGlzdCB2
YXJhcmc7DQotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsNCi0jaWYgZGVmaW5lZChBTkdM
RV9ESVNBQkxFX1BFUkYpDQotICAgIG91dHB1dCh0cmFjZUZpbGVEZWJ1Z09ubHksIE5VTEwsIGZv
cm1hdCwgdmFyYXJnKTsNCi0jZWxzZQ0KLSAgICBvdXRwdXQodHJhY2VGaWxlRGVidWdPbmx5LCBE
M0RQRVJGX1NldE1hcmtlciwgZm9ybWF0LCB2YXJhcmcpOw0KLSNlbmRpZg0KLSAgICB2YV9lbmQo
dmFyYXJnKTsNCi19DQotDQotYm9vbCBwZXJmQWN0aXZlKCkNCi17DQotI2lmIGRlZmluZWQoQU5H
TEVfRElTQUJMRV9QRVJGKQ0KLSAgICByZXR1cm4gZmFsc2U7DQotI2Vsc2UNCi0gICAgc3RhdGlj
IGJvb2wgYWN0aXZlID0gRDNEUEVSRl9HZXRTdGF0dXMoKSAhPSAwOw0KLSAgICByZXR1cm4gYWN0
aXZlOw0KLSNlbmRpZg0KLX0NCi0NCi1TY29wZWRQZXJmRXZlbnRIZWxwZXI6OlNjb3BlZFBlcmZF
dmVudEhlbHBlcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikNCi17DQotI2lmICFkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikNCi0gICAgdmFfbGlzdCB2YXJhcmc7DQotICAgIHZhX3N0YXJ0KHZh
cmFyZywgZm9ybWF0KTsNCi0gICAgb3V0cHV0KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91
dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2luRXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7DQotICAg
IHZhX2VuZCh2YXJhcmcpOw0KLSNlbmRpZg0KLX0NCi0NCi1TY29wZWRQZXJmRXZlbnRIZWxwZXI6
On5TY29wZWRQZXJmRXZlbnRIZWxwZXIoKQ0KLXsNCi0jaWYgIWRlZmluZWQoQU5HTEVfRElTQUJM
RV9QRVJGKQ0KLSAgICBpZiAocGVyZkFjdGl2ZSgpKQ0KLSAgICB7DQotICAgICAgICBEM0RQRVJG
X0VuZEV2ZW50KCk7DQotICAgIH0NCi0jZW5kaWYNCi19DQotfQ0KKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIGRlYnVnLmNwcDogRGVidWdnaW5nIHV0aWxpdGllcy4KKworI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxkM2Q5Lmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCituYW1lc3BhY2UgZ2wKK3sK
KwordHlwZWRlZiB2b2lkIChXSU5BUEkgKlBlcmZPdXRwdXRGdW5jdGlvbikoRDNEQ09MT1IsIExQ
Q1dTVFIpOworCitzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09ubHksIFBl
cmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZh
cmFyZykKK3sKKyNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCisgICAgaWYgKHBlcmZB
Y3RpdmUoKSkKKyAgICB7CisgICAgICAgIGNoYXIgbWVzc2FnZVszMjc2OF07CisgICAgICAgIGlu
dCBsZW4gPSB2c3ByaW50Zl9zKG1lc3NhZ2UsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICAgICAgaWYg
KGxlbiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRoZXJlIGFyZSBubyBBU0NJSSB2YXJpYW50cyBvZiB0aGVzZSBEM0RQRVJGIGZ1
bmN0aW9ucy4KKyAgICAgICAgd2NoYXJfdCB3aWRlTWVzc2FnZVszMjc2OF07CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZGVN
ZXNzYWdlW2ldID0gbWVzc2FnZVtpXTsKKyAgICAgICAgfQorICAgICAgICB3aWRlTWVzc2FnZVts
ZW5dID0gMDsKKworICAgICAgICBwZXJmRnVuYygwLCB3aWRlTWVzc2FnZSk7CisgICAgfQorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQorI2lmIGRlZmluZWQoTkRF
QlVHKQorICAgIGlmICh0cmFjZUZpbGVEZWJ1Z09ubHkpCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJ
TEUsICJhIik7CisgICAgaWYgKGZpbGUpCisgICAgeworICAgICAgICB2ZnByaW50ZihmaWxlLCBm
b3JtYXQsIHZhcmFyZyk7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICB9CisjZW5kaWYKK30K
Kwordm9pZCB0cmFjZShib29sIHRyYWNlRmlsZURlYnVnT25seSwgY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3Jt
YXQpOworI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQorICAgIG91dHB1dCh0cmFjZUZp
bGVEZWJ1Z09ubHksIE5VTEwsIGZvcm1hdCwgdmFyYXJnKTsKKyNlbHNlCisgICAgb3V0cHV0KHRy
YWNlRmlsZURlYnVnT25seSwgRDNEUEVSRl9TZXRNYXJrZXIsIGZvcm1hdCwgdmFyYXJnKTsKKyNl
bmRpZgorICAgIHZhX2VuZCh2YXJhcmcpOworfQorCitib29sIHBlcmZBY3RpdmUoKQoreworI2lm
IGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisg
ICAgc3RhdGljIGJvb2wgYWN0aXZlID0gRDNEUEVSRl9HZXRTdGF0dXMoKSAhPSAwOworICAgIHJl
dHVybiBhY3RpdmU7CisjZW5kaWYKK30KKworU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQ
ZXJmRXZlbnRIZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisjaWYgIWRlZmluZWQo
QU5HTEVfRElTQUJMRV9QRVJGKQorICAgIHZhX2xpc3QgdmFyYXJnOworICAgIHZhX3N0YXJ0KHZh
cmFyZywgZm9ybWF0KTsKKyAgICBvdXRwdXQodHJ1ZSwgcmVpbnRlcnByZXRfY2FzdDxQZXJmT3V0
cHV0RnVuY3Rpb24+KEQzRFBFUkZfQmVnaW5FdmVudCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2
YV9lbmQodmFyYXJnKTsKKyNlbmRpZgorfQorCitTY29wZWRQZXJmRXZlbnRIZWxwZXI6On5TY29w
ZWRQZXJmRXZlbnRIZWxwZXIoKQoreworI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikK
KyAgICBpZiAocGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAgICAgRDNEUEVSRl9FbmRFdmVudCgp
OworICAgIH0KKyNlbmRpZgorfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi92ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi92ZXJzaW9uLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogI2RlZmluZSBNQUpPUl9WRVJTSU9OIDEKICNkZWZpbmUgTUlOT1JfVkVSU0lPTiAwCiAj
ZGVmaW5lIEJVSUxEX1ZFUlNJT04gMAotI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAxMDA5CisjZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKIAogI2RlZmluZSBTVFJJTkdJRlkoeCkgI3gKICNkZWZp
bmUgTUFDUk9fU1RSSU5HSUZZKHgpIFNUUklOR0lGWSh4KQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNiwxMSArMTYsNiBAQCBuYW1lc3BhY2UgewogLy8gZXZhbHVhdGVkLiBUaGlzIGlz
IHVubGlrZWx5IHRvIHNob3cgdXAgaW4gcmVhbCBzaGFkZXJzLCBidXQgaXMgc29tZXRoaW5nIHRv
CiAvLyBjb25zaWRlci4KIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleFNvdXJj
ZVtdID0gewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCki
LAotICAgICJ2ZWMyIHdlYmdsX2F0YW5fZW11KHZlYzIgeSwgdmVjMiB4KSB7IHJldHVybiB2ZWMy
KGF0YW4oeVswXSwgeFswXSksIGF0YW4oeVsxXSwgeFsxXSkpOyB9IiwKLSAgICAidmVjMyB3ZWJn
bF9hdGFuX2VtdSh2ZWMzIHksIHZlYzMgeCkgeyByZXR1cm4gdmVjMyhhdGFuKHlbMF0sIHhbMF0p
LCBhdGFuKHlbMV0sIHhbMV0pLCBhdGFuKHlbMl0sIHhbMl0pKTsgfSIsCi0gICAgInZlYzQgd2Vi
Z2xfYXRhbl9lbXUodmVjNCB5LCB2ZWM0IHgpIHsgcmV0dXJuIHZlYzQoYXRhbih5WzBdLCB4WzBd
KSwgYXRhbih5WzFdLCB4WzFdKSwgYXRhbih5WzJdLCB4WzJdKSwgYXRhbih5WzNdLCB4WzNdKSk7
IH0iLAotCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGNvcyhmbG9hdCkiLAogICAgICIj
ZXJyb3Igbm8gZW11bGF0aW9uIGZvciBjb3ModmVjMikiLAogICAgICIjZXJyb3Igbm8gZW11bGF0
aW9uIGZvciBjb3ModmVjMykiLApAQCAtNDEsMTEgKzM2LDYgQEAgY29uc3QgY2hhcioga0Z1bmN0
aW9uRW11bGF0aW9uVmVydGV4U291cgogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5n
dGgodmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBsZW5ndGgodmVjNCkiLAog
Ci0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG1vZChmbG9hdCwgZmxvYXQpIiwKLSAgICAi
dmVjMiB3ZWJnbF9tb2RfZW11KHZlYzIgeCwgdmVjMiB5KSB7IHJldHVybiB2ZWMyKG1vZCh4WzBd
LCB5WzBdKSwgbW9kKHhbMV0sIHlbMV0pKTsgfSIsCi0gICAgInZlYzMgd2ViZ2xfbW9kX2VtdSh2
ZWMzIHgsIHZlYzMgeSkgeyByZXR1cm4gdmVjMyhtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5
WzFdKSwgbW9kKHhbMl0sIHlbMl0pKTsgfSIsCi0gICAgInZlYzQgd2ViZ2xfbW9kX2VtdSh2ZWM0
IHgsIHZlYzQgeSkgeyByZXR1cm4gdmVjNChtb2QoeFswXSwgeVswXSksIG1vZCh4WzFdLCB5WzFd
KSwgbW9kKHhbMl0sIHlbMl0pLCBtb2QoeFszXSwgeVszXSkpOyB9IiwKLQogICAgICIjZGVmaW5l
IHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8g
MS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZl
YzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzMpIiwKQEAg
LTU4LDQyICs0OCwzMiBAQCBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25WZXJ0ZXhTb3Vy
CiB9OwogCiBjb25zdCBjaGFyKiBrRnVuY3Rpb25FbXVsYXRpb25GcmFnbWVudFNvdXJjZVtdID0g
ewotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKGZsb2F0LCBmbG9hdCkiLAotICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBhdGFuKHZlYzIsIHZlYzIpIiwKLSAgICAiI2Vycm9y
IG5vIGVtdWxhdGlvbiBmb3IgYXRhbih2ZWMzLCB2ZWMzKSIsCi0gICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGF0YW4odmVjNCwgdmVjNCkiLAotCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24g
ZmxvYXQgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9uIGZsb2F0IGEpIHsgcmV0dXJu
IGNvcyhhKTsgfSIsCiAgICAgIndlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiB3ZWJnbF9jb3NfZW11
KHdlYmdsX2VtdV9wcmVjaXNpb24gdmVjMiBhKSB7IHJldHVybiBjb3MoYSk7IH0iLAogICAgICJ3
ZWJnbF9lbXVfcHJlY2lzaW9uIHZlYzMgd2ViZ2xfY29zX2VtdSh3ZWJnbF9lbXVfcHJlY2lzaW9u
IHZlYzMgYSkgeyByZXR1cm4gY29zKGEpOyB9IiwKICAgICAid2ViZ2xfZW11X3ByZWNpc2lvbiB2
ZWM0IHdlYmdsX2Nvc19lbXUod2ViZ2xfZW11X3ByZWNpc2lvbiB2ZWM0IGEpIHsgcmV0dXJuIGNv
cyhhKTsgfSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZGlzdGFuY2UoZmxvYXQs
IGZsb2F0KSIsCisgICAgIiNkZWZpbmUgd2ViZ2xfZGlzdGFuY2VfZW11KHgsIHkpICgoeCkgPj0g
KHkpID8gKHgpIC0gKHkpIDogKHkpIC0gKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIGRpc3RhbmNlKHZlYzIsIHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
ZGlzdGFuY2UodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkaXN0
YW5jZSh2ZWM0LCB2ZWM0KSIsCiAKLSAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgZG90KGZs
b2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2RvdF9lbXUoeCwgeSkgKCh4KSAqICh5
KSkiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMiwgdmVjMikiLAogICAg
ICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciBkb3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Ig
bm8gZW11bGF0aW9uIGZvciBkb3QodmVjNCwgdmVjNCkiLAogCi0gICAgIiNlcnJvciBubyBlbXVs
YXRpb24gZm9yIGxlbmd0aChmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX2xlbmd0aF9lbXUo
eCkgKCh4KSA+PSAwLjAgPyAoeCkgOiAtKHgpKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24g
Zm9yIGxlbmd0aCh2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2
ZWMzKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIGxlbmd0aCh2ZWM0KSIsCiAKLSAg
ICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3IgbW9kKGZsb2F0LCBmbG9hdCkiLAotICAgICIjZXJy
b3Igbm8gZW11bGF0aW9uIGZvciBtb2QodmVjMiwgdmVjMikiLAotICAgICIjZXJyb3Igbm8gZW11
bGF0aW9uIGZvciBtb2QodmVjMywgdmVjMykiLAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZv
ciBtb2QodmVjNCwgdmVjNCkiLAotCi0gICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIG5vcm1h
bGl6ZShmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX25vcm1hbGl6ZV9lbXUoeCkgKCh4KSA9
PSAwLjAgPyAwLjAgOiAoKHgpID4gMC4wID8gMS4wIDogLTEuMCkpIiwKICAgICAiI2Vycm9yIG5v
IGVtdWxhdGlvbiBmb3Igbm9ybWFsaXplKHZlYzIpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlv
biBmb3Igbm9ybWFsaXplKHZlYzMpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Igbm9y
bWFsaXplKHZlYzQpIiwKIAotICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KGZs
b2F0LCBmbG9hdCkiLAorICAgICIjZGVmaW5lIHdlYmdsX3JlZmxlY3RfZW11KEksIE4pICgoSSkg
LSAyLjAgKiAoTikgKiAoSSkgKiAoTikpIiwKICAgICAiI2Vycm9yIG5vIGVtdWxhdGlvbiBmb3Ig
cmVmbGVjdCh2ZWMyLCB2ZWMyKSIsCiAgICAgIiNlcnJvciBubyBlbXVsYXRpb24gZm9yIHJlZmxl
Y3QodmVjMywgdmVjMykiLAogICAgICIjZXJyb3Igbm8gZW11bGF0aW9uIGZvciByZWZsZWN0KHZl
YzQsIHZlYzQpIgpAQCAtMTAyLDEwICs4Miw2IEBAIGNvbnN0IGNoYXIqIGtGdW5jdGlvbkVtdWxh
dGlvbkZyYWdtZW50U28KIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0aW9uVmVydGV4TWFza1td
ID0gewogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogICAgIC8vIFdvcmsgYXJvdW5kIEFUSSBkcml2
ZXIgYnVncyBpbiBNYWMuCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW4xXzEKLSAgICBmYWxz
ZSwgLy8gVEZ1bmN0aW9uQXRhbjJfMgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuM18zCi0g
ICAgZmFsc2UsIC8vIFRGdW5jdGlvbkF0YW40XzQKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29z
MQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MyCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNv
czMKQEAgLTEyMiwxMCArOTgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRl
eE1hc2tbCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1
bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0Ci0gICAgZmFsc2Us
IC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Nb2QyXzIKLSAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDRfNAog
ICAgIHRydWUsICAvLyBURnVuY3Rpb25Ob3JtYWxpemUxCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMwpAQCAtMTM2LDEw
ICsxMDgsNiBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1hc2tbCiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3Q0XzQKICNlbHNlCiAgICAgLy8gV29yayBhcm91bmQg
RDNEIGRyaXZlciBidWcgaW4gV2luLgotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0g
ICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkF0YW4yXzIKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uQXRh
bjNfMwotICAgIHRydWUsICAvLyBURnVuY3Rpb25BdGFuNF80CiAgICAgZmFsc2UsIC8vIFRGdW5j
dGlvbkNvczEKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25Db3MzCkBAIC0xNTYsMTAgKzEyNCw2IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11bGF0
aW9uVmVydGV4TWFza1sKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMgogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25MZW5ndGgzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDQKLSAg
ICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kMV8xCi0gICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbk1vZDJf
MgotICAgIHRydWUsICAvLyBURnVuY3Rpb25Nb2QzXzMKLSAgICB0cnVlLCAgLy8gVEZ1bmN0aW9u
TW9kNF80CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTEKICAgICBmYWxzZSwgLy8g
VEZ1bmN0aW9uTm9ybWFsaXplMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCkBA
IC0xNzMsMjIgKzEzNywzOCBAQCBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvblZlcnRleE1h
c2tbCiB9OwogCiBjb25zdCBib29sIGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFza1tdID0g
ewotICAgIGZhbHNlLCAvLyBURnVuY3Rpb25BdGFuMV8xCi0gICAgZmFsc2UsIC8vIFRGdW5jdGlv
bkF0YW4yXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uQXRhbjNfMwotICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25BdGFuNF80CiAjaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgLy8gV29yayBhcm91
bmQgYSBBVEkgZHJpdmVyIGJ1ZyBpbiBNYWMgdGhhdCBjYXVzZXMgY3Jhc2hlcy4KKyAgICAvLyBX
b3JrIGFyb3VuZCBBVEkgZHJpdmVyIGJ1Z3MgaW4gTWFjLgogICAgIHRydWUsICAvLyBURnVuY3Rp
b25Db3MxCiAgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkNvczIKICAgICB0cnVlLCAgLy8gVEZ1bmN0
aW9uQ29zMwogICAgIHRydWUsICAvLyBURnVuY3Rpb25Db3M0CisgICAgdHJ1ZSwgIC8vIFRGdW5j
dGlvbkRpc3RhbmNlMV8xCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlMl8yCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkRpc3RhbmNlM18zCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkRp
c3RhbmNlNF80CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlvbkRvdDFfMQorICAgIGZhbHNlLCAvLyBU
RnVuY3Rpb25Eb3QyXzIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uRG90M18zCisgICAgZmFsc2Us
IC8vIFRGdW5jdGlvbkRvdDRfNAorICAgIHRydWUsICAvLyBURnVuY3Rpb25MZW5ndGgxCisgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkxlbmd0aDIKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3Ro
MworICAgIGZhbHNlLCAvLyBURnVuY3Rpb25MZW5ndGg0CisgICAgdHJ1ZSwgIC8vIFRGdW5jdGlv
bk5vcm1hbGl6ZTEKKyAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTm9ybWFsaXplMgorICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25Ob3JtYWxpemUzCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6
ZTQKKyAgICB0cnVlLCAgLy8gVEZ1bmN0aW9uUmVmbGVjdDFfMQorICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25SZWZsZWN0Ml8yCisgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJlZmxlY3QzXzMKKyAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDRfNAogI2Vsc2UKKyAgICAvLyBXb3JrIGFyb3VuZCBE
M0QgZHJpdmVyIGJ1ZyBpbiBXaW4uCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkNvczEKICAgICBm
YWxzZSwgLy8gVEZ1bmN0aW9uQ29zMgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Db3MzCiAgICAg
ZmFsc2UsIC8vIFRGdW5jdGlvbkNvczQKLSNlbmRpZgogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25E
aXN0YW5jZTFfMQogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25EaXN0YW5jZTJfMgogICAgIGZhbHNl
LCAvLyBURnVuY3Rpb25EaXN0YW5jZTNfMwpAQCAtMjAxLDEwICsxODEsNiBAQCBjb25zdCBib29s
IGtGdW5jdGlvbkVtdWxhdGlvbkZyYWdtZW50TWFzCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbkxl
bmd0aDIKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTGVuZ3RoMwogICAgIGZhbHNlLCAvLyBURnVu
Y3Rpb25MZW5ndGg0Ci0gICAgZmFsc2UsIC8vIFRGdW5jdGlvbk1vZDFfMQotICAgIGZhbHNlLCAv
LyBURnVuY3Rpb25Nb2QyXzIKLSAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uTW9kM18zCi0gICAgZmFs
c2UsIC8vIFRGdW5jdGlvbk1vZDRfNAogICAgIGZhbHNlLCAvLyBURnVuY3Rpb25Ob3JtYWxpemUx
CiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvbk5vcm1hbGl6ZTIKICAgICBmYWxzZSwgLy8gVEZ1bmN0
aW9uTm9ybWFsaXplMwpAQCAtMjEzLDYgKzE4OSw3IEBAIGNvbnN0IGJvb2wga0Z1bmN0aW9uRW11
bGF0aW9uRnJhZ21lbnRNYXMKICAgICBmYWxzZSwgLy8gVEZ1bmN0aW9uUmVmbGVjdDJfMgogICAg
IGZhbHNlLCAvLyBURnVuY3Rpb25SZWZsZWN0M18zCiAgICAgZmFsc2UsIC8vIFRGdW5jdGlvblJl
ZmxlY3Q0XzQKKyNlbmRpZgogICAgIGZhbHNlICAvLyBURnVuY3Rpb25Vbmtub3duCiB9OwogCkBA
IC0zODYsMTggKzM2MywxMiBAQCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5j
dGlvCiAKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BBdGFuOgotICAgICAgICAgICAgZnVuY3Rp
b24gPSBURnVuY3Rpb25BdGFuMV8xOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wRGlzdGFuY2U6CiAgICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbkRpc3RhbmNlMV8x
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wRG90OgogICAgICAgICAgICAg
ZnVuY3Rpb24gPSBURnVuY3Rpb25Eb3QxXzE7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BNb2Q6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IFRGdW5jdGlvbk1vZDFfMTsKLSAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6CiAgICAgICAgICAgICBm
dW5jdGlvbiA9IFRGdW5jdGlvblJlZmxlY3QxXzE7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBCdWlsdC1p
biBmdW5jdGlvbnMuCiAgICAgLy8KICAgICBlbnVtIFRCdWlsdEluRnVuY3Rpb24gewotICAgICAg
ICBURnVuY3Rpb25BdGFuMV8xID0gMCwgIC8vIGZsb2F0IGF0YW4oZmxvYXQsIGZsb2F0KTsKLSAg
ICAgICAgVEZ1bmN0aW9uQXRhbjJfMiwgIC8vIHZlYzIgYXRhbih2ZWMyLCB2ZWMyKTsKLSAgICAg
ICAgVEZ1bmN0aW9uQXRhbjNfMywgIC8vIHZlYzMgYXRhbih2ZWMzLCB2ZWMyKTsKLSAgICAgICAg
VEZ1bmN0aW9uQXRhbjRfNCwgIC8vIHZlYzQgYXRhbih2ZWM0LCB2ZWMyKTsKLQotICAgICAgICBU
RnVuY3Rpb25Db3MxLCAgLy8gZmxvYXQgY29zKGZsb2F0KTsKKyAgICAgICAgVEZ1bmN0aW9uQ29z
MSA9IDAsICAvLyBmbG9hdCBjb3MoZmxvYXQpOwogICAgICAgICBURnVuY3Rpb25Db3MyLCAgLy8g
dmVjMiBjb3ModmVjMik7CiAgICAgICAgIFRGdW5jdGlvbkNvczMsICAvLyB2ZWMzIGNvcyh2ZWMz
KTsKICAgICAgICAgVEZ1bmN0aW9uQ29zNCwgIC8vIHZlYzQgY29zKHZlYzQpOwpAQCAtNzAsMTEg
KzY1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoMywgIC8vIGZsb2F0IGxl
bmd0aCh2ZWMzKTsKICAgICAgICAgVEZ1bmN0aW9uTGVuZ3RoNCwgIC8vIGZsb2F0IGxlbmd0aCh2
ZWM0KTsKIAotICAgICAgICBURnVuY3Rpb25Nb2QxXzEsICAvLyBmbG9hdCBtb2QoZmxvYXQsIGZs
b2F0KTsKLSAgICAgICAgVEZ1bmN0aW9uTW9kMl8yLCAgLy8gdmVjMiBtb2QodmVjMiwgdmVjMik7
Ci0gICAgICAgIFRGdW5jdGlvbk1vZDNfMywgIC8vIHZlYzMgbW9kKHZlYzMsIHZlYzMpOwotICAg
ICAgICBURnVuY3Rpb25Nb2Q0XzQsICAvLyB2ZWM0IG1vZCh2ZWM0LCB2ZWM0KTsKLQogICAgICAg
ICBURnVuY3Rpb25Ob3JtYWxpemUxLCAgLy8gZmxvYXQgbm9ybWFsaXplKGZsb2F0KTsKICAgICAg
ICAgVEZ1bmN0aW9uTm9ybWFsaXplMiwgIC8vIHZlYzIgbm9ybWFsaXplKHZlYzIpOwogICAgICAg
ICBURnVuY3Rpb25Ob3JtYWxpemUzLCAgLy8gdmVjMyBub3JtYWxpemUodmVjMyk7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAJ
KHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsMTAgKzgsMjEgQEAKICNpbmNsdWRl
ICJjb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCIKICNpbmNsdWRlICJjb21waWxlci9Gb3JMb29w
VW5yb2xsLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9NYXBM
b25nVmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCIKICNpbmNsdWRlICJjb21waWxlci9T
aEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNp
bmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNsdWRlICJj
b21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgorCitib29sIGlzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCit7CisgICAgIHJldHVybiBzcGVjID09IFNI
X1dFQkdMX1NQRUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOworfQogCiBuYW1lc3Bh
Y2UgewogYm9vbCBJbml0aWFsaXplU3ltYm9sVGFibGUoCkBAIC0xMjMsNyArMTM0LDcgQEAgYm9v
bCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIC8vIElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGlu
ZGV4aW5nIGFzIHdlbGwuCi0gICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfV0VCR0xfU1BFQykKKyAg
ICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlv
bnMgfD0gU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBp
cyBwYXRoIG9mIHNvdXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBm
b2xsb3dzLgpAQCAtMTYxLDYgKzE3MiwxMiBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25z
dCBjaGFyKiBjb25zCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X1ZBTElEQVRFX0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRl
TGltaXRhdGlvbnMocm9vdCk7CiAKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRp
b25zICYgU0hfVElNSU5HX1JFU1RSSUNUSU9OUykpCisgICAgICAgICAgICBzdWNjZXNzID0gZW5m
b3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhyb290LCAoY29tcGlsZU9wdGlvbnMgJiBTSF9ERVBFTkRF
TkNZX0dSQVBIKSAhPSAwKTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJTcGVjID09
IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgICAgICAgICByZXdyaXRlQ1NTU2hhZGVyKHJvb3Qp
OworCiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFm
dGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNv
bXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCiAg
ICAgICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNG
b3JVbnJvbGxpbmcocm9vdCk7CkBAIC0yMzUsMTIgKzI1Miw1OCBAQCBib29sIFRDb21waWxlcjo6
ZGV0ZWN0UmVjdXJzaW9uKFRJbnRlcm1OCiAgICAgfQogfQogCit2b2lkIFRDb21waWxlcjo6cmV3
cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW5hbWVGdW5jdGlvbiBy
ZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKKyAgICByb290LT50cmF2ZXJzZSgmcmVuYW1l
cik7Cit9CisKIGJvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2Rl
KiByb290KSB7CiAgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBp
bmZvU2luay5pbmZvKTsKICAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwogICAgIHJldHVy
biB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOwogfQogCitib29sIFRDb21waWxlcjo6ZW5mb3Jj
ZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCkK
K3sKKyAgICBpZiAoc2hhZGVyU3BlYyAhPSBTSF9XRUJHTF9TUEVDKSB7CisgICAgICAgIGluZm9T
aW5rLmluZm8gPDwgIlRpbWluZyByZXN0cmljdGlvbnMgbXVzdCBiZSBlbmZvcmNlZCB1bmRlciB0
aGUgV2ViR0wgc3BlYy4iOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSB7CisgICAgICAgIFREZXBlbmRlbmN5
R3JhcGggZ3JhcGgocm9vdCk7CisKKyAgICAgICAgLy8gT3V0cHV0IGFueSBlcnJvcnMgZmlyc3Qu
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3Ry
aWN0aW9ucyhncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVuLCBvdXRwdXQgdGhlIGRl
cGVuZGVuY3kgZ3JhcGguCisgICAgICAgIGlmIChvdXRwdXRHcmFwaCkgeworICAgICAgICAgICAg
VERlcGVuZGVuY3lHcmFwaE91dHB1dCBvdXRwdXQoaW5mb1NpbmsuaW5mbyk7CisgICAgICAgICAg
ICBvdXRwdXQub3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhncmFwaCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIGVuZm9yY2VWZXJ0ZXhTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMocm9vdCk7CisgICAg
fQorfQorCitib29sIFRDb21waWxlcjo6ZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJp
Y3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKQoreworICAgIFJlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcgcmVzdHJpY3RvcihpbmZvU2luay5pbmZvKTsKKyAgICByZXN0cmlj
dG9yLmVuZm9yY2VSZXN0cmljdGlvbnMoZ3JhcGgpOworICAgIHJldHVybiByZXN0cmljdG9yLm51
bUVycm9ycygpID09IDA7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjplbmZvcmNlVmVydGV4U2hhZGVy
VGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nIHJlc3RyaWN0b3IoaW5mb1NpbmsuaW5mbyk7CisgICAgcmVzdHJpY3Rv
ci5lbmZvcmNlUmVzdHJpY3Rpb25zKHJvb3QpOworICAgIHJldHVybiByZXN0cmljdG9yLm51bUVy
cm9ycygpID09IDA7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpjb2xsZWN0QXR0cmlic1VuaWZvcm1z
KFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVj
dChhdHRyaWJzLCB1bmlmb3Jtcyk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERp
c2NvbnRpbnVpdHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisvLyBDb250YWlucyBhbmFseXNpcyB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBITFNM
J3MgbGFjayBvZiBzdXBwb3J0IGZvcgorLy8gdGhlIHVzZSBvZiBpbnRyaW5zaWMgZnVuY3Rpb25z
IHdoaWNoIChpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkpIGNvbXB1dGUKKy8vIGdyYWRpZW50cyBv
ZiBmdW5jdGlvbnMgd2l0aCBkaXNjb250aW51aXRpZXMuIAorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVs
cGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6
dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbUxvb3BEaXNjb250aW51aXR5ID0g
ZmFsc2U7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgcmV0dXJuIG1Mb29wRGlzY29u
dGludWl0eTsKK30KKworYm9vbCBEZXRlY3RMb29wRGlzY29udGludWl0eTo6dmlzaXRCcmFuY2go
VmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgaWYgKG1Mb29wRGlzY29u
dGludWl0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDoKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEJyZWFrOgorICAgICAgY2FzZSBFT3BDb250aW51ZToK
KyAgICAgICAgbUxvb3BEaXNjb250aW51aXR5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wUmV0dXJu
OgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuICFtTG9vcERpc2NvbnRpbnVpdHk7Cit9CisKK2Jvb2wgRGV0ZWN0TG9vcERp
c2NvbnRpbnVpdHk6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
ICpub2RlKQoreworICAgIHJldHVybiAhbUxvb3BEaXNjb250aW51aXR5OworfQorCitib29sIGNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRGV0ZWN0
TG9vcERpc2NvbnRpbnVpdHkgZGV0ZWN0TG9vcERpc2NvbnRpbnVpdHk7CisgICAgcmV0dXJuIGRl
dGVjdExvb3BEaXNjb250aW51aXR5LnRyYXZlcnNlKG5vZGUpOworfQorCitib29sIERldGVjdEdy
YWRpZW50T3BlcmF0aW9uOjp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtR3Jh
ZGllbnRPcGVyYXRpb24gPSBmYWxzZTsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBy
ZXR1cm4gbUdyYWRpZW50T3BlcmF0aW9uOworfQorCitib29sIERldGVjdEdyYWRpZW50T3BlcmF0
aW9uOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAg
aWYgKG1HcmFkaWVudE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BE
RmR4OgorICAgICAgY2FzZSBFT3BERmR5OgorICAgICAgICBtR3JhZGllbnRPcGVyYXRpb24gPSB0
cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
ICFtR3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgRGV0ZWN0R3JhZGllbnRPcGVyYXRpb246
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQorewor
ICAgIGlmIChtR3JhZGllbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxsKQorICAg
IHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1VzZXJEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8CisgICAgICAg
ICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwKKyAgICAgICAgICAgICAgICBuYW1l
ID09ICJ0ZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUdyYWRp
ZW50T3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYSB1c2VyIGRlZmluZWQgZnVuY3Rp
b24gaXMgY2FsbGVkLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmVseSBh
c3N1bWUgaXQgdG8gY29udGFpbiBncmFkaWVudCBvcGVyYXRpb25zCisgICAgICAgICAgICBtR3Jh
ZGllbnRPcGVyYXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICFt
R3JhZGllbnRPcGVyYXRpb247Cit9CisKK2Jvb2wgY29udGFpbnNHcmFkaWVudE9wZXJhdGlvbihU
SW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiBkZXRlY3RH
cmFkaWVudE9wZXJhdGlvbjsKKyAgICByZXR1cm4gZGV0ZWN0R3JhZGllbnRPcGVyYXRpb24udHJh
dmVyc2Uobm9kZSk7Cit9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGlu
dWl0eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIENv
bnRhaW5zIGFuYWx5c2lzIHV0aWxpdGllcyBmb3IgZGVhbGluZyB3aXRoIEhMU0wncyBsYWNrIG9m
IHN1cHBvcnQgZm9yCisvLyB0aGUgdXNlIG9mIGludHJpbnNpYyBmdW5jdGlvbnMgd2hpY2ggKGlt
cGxpY2l0bHkgb3IgZXhwbGljaXRseSkgY29tcHV0ZQorLy8gZ3JhZGllbnRzIG9mIGZ1bmN0aW9u
cyB3aXRoIGRpc2NvbnRpbnVpdGllcy4gCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RFVEVDVERJ
U0NPTlRJTlVJVFlfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVURUNURElTQ09OVElOVUlUWV9IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFjZSBzaAorewor
Ly8gQ2hlY2tzIHdoZXRoZXIgYSBsb29wIGNhbiBydW4gZm9yIGEgdmFyaWFibGUgbnVtYmVyIG9m
IGl0ZXJhdGlvbnMKK2NsYXNzIERldGVjdExvb3BEaXNjb250aW51aXR5IDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGJvb2wgdHJhdmVyc2UoVEludGVybU5vZGUg
Km5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoICpub2RlKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKworICAgIGJvb2wgbUxvb3BEaXNjb250aW51
aXR5OworfTsKKworYm9vbCBjb250YWluc0xvb3BEaXNjb250aW51aXR5KFRJbnRlcm1Ob2RlICpu
b2RlKTsKKworLy8gQ2hlY2tzIGZvciBpbnRyaW5zaWMgZnVuY3Rpb25zIHdoaWNoIGNvbXB1dGUg
Z3JhZGllbnRzCitjbGFzcyBEZXRlY3RHcmFkaWVudE9wZXJhdGlvbiA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBib29sIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpu
b2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpOworCisgICAgYm9vbCBtR3JhZGllbnRPcGVyYXRpb247
Cit9OworCitib29sIGNvbnRhaW5zR3JhZGllbnRPcGVyYXRpb24oVEludGVybU5vZGUgKm5vZGUp
OworCit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFVEVDVERJU0NPTlRJTlVJVFlfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdu
b3N0aWNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Tb3VyY2VMb2NhdGlvbi5oIgorCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5m
b1NpbmsmIGluZm9TaW5rKSA6IG1JbmZvU2luayhpbmZvU2luaykKK3sKK30KKworVERpYWdub3N0
aWNzOjp+VERpYWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5m
byhTZXZlcml0eSBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIGV4dHJhKQoreworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5m
b1NpbmsuaW5mbzsKKyAgICBUUHJlZml4VHlwZSBwcmVmaXggPSBzZXZlcml0eSA9PSBFUlJPUiA/
IEVQcmVmaXhFcnJvciA6IEVQcmVmaXhXYXJuaW5nOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZp
bGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5w
cmVmaXgocHJlZml4KTsKKyAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmls
ZSwgbG9jLmxpbmUpKTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJl
YXNvbiA8PCAiICIgPDwgZXh0cmEgPDwgIlxuIjsKK30KKwordm9pZCBURGlhZ25vc3RpY3M6Ondy
aXRlRGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBtSW5mb1NpbmsuZGVidWcg
PDwgc3RyOworfQorCit2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7Cit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFn
bm9zdGljcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxFUl9ESUFHTk9T
VElDU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGlj
cy5oIgorCitjbGFzcyBUSW5mb1Npbms7CisKK2NsYXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBw
cDo6RGlhZ25vc3RpY3MKK3sKKyAgcHVibGljOgorICAgIFREaWFnbm9zdGljcyhUSW5mb1Npbmsm
IGluZm9TaW5rKTsKKyAgICB2aXJ0dWFsIH5URGlhZ25vc3RpY3MoKTsKKworICAgIFRJbmZvU2lu
ayYgaW5mb1NpbmsoKSB7IHJldHVybiBtSW5mb1Npbms7IH0KKworICAgIHZvaWQgd3JpdGVJbmZv
KFNldmVyaXR5IHNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VM
b2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFz
b24sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2VuLAorICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSk7CisKKyAgICB2b2lkIHdyaXRl
RGVidWcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBwcmludChJRCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6OlNv
dXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiB0ZXh0KTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2luayYgbUluZm9TaW5rOworfTsK
KworI2VuZGlmICAvLyBDT01QSUxFUl9ESUFHTk9TVElDU19IXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oIgorCisj
aW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKKworc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlv
cihjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmlu
ZyBrUmVxdWlyZSgicmVxdWlyZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRW5h
YmxlKCJlbmFibGUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rpc2FibGUoImRp
c2FibGUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga1dhcm4oIndhcm4iKTsKKwor
ICAgIGlmIChzdHIgPT0ga1JlcXVpcmUpIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYg
KHN0ciA9PSBrRW5hYmxlKSByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKHN0ciA9PSBr
RGlzYWJsZSkgcmV0dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoc3RyID09IGtXYXJuKSBy
ZXR1cm4gRUJoV2FybjsKKyAgICByZXR1cm4gRUJoVW5kZWZpbmVkOworfQorCitURGlyZWN0aXZl
SGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRp
YWdub3N0aWNzKQorICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKKyAgICAg
IG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworVERpcmVjdGl2ZUhhbmRsZXI6On5U
RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRs
ZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKK3sKKyAgICBtRGlhZ25v
c3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywgbXNnLCAiIiwgIiIp
OworfQorCit2b2lkIFREaXJlY3RpdmVIYW5kbGVyOjpoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNv
dXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrU1RER0woIlNUREdMIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtP
cHRpbWl6ZSgib3B0aW1pemUiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlYnVn
KCJkZWJ1ZyIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrT24oIm9uIik7CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtPZmYoIm9mZiIpOworCisgICAgYm9vbCBpbnZhbGlk
VmFsdWUgPSBmYWxzZTsKKyAgICBpZiAobmFtZSA9PSBrU1RER0wpCisgICAgeworICAgICAgICAv
LyBUaGUgU1RER0wgcHJhZ21hIGlzIHVzZWQgdG8gcmVzZXJ2ZSBwcmFnbWFzIGZvciB1c2UgYnkg
ZnV0dXJlCisgICAgICAgIC8vIHJldmlzaW9ucyBvZiBHTFNMLiBJZ25vcmUgaXQuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSBrT3B0aW1pemUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUgPT0ga09uKSBtUHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAodmFsdWUgPT0ga09mZikgbVByYWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAg
ICAgICBlbHNlIGludmFsaWRWYWx1ZSA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUg
PT0ga0RlYnVnKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlID09IGtPbikgbVByYWdtYS5kZWJ1
ZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IGtPZmYpIG1QcmFnbWEuZGVidWcg
PSBmYWxzZTsKKyAgICAgICAgZWxzZSBpbnZhbGlkVmFsdWUgPSB0cnVlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MucmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
VU5SRUNPR05JWkVEX1BSQUdNQSwgbG9jLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChpbnZhbGlkVmFsdWUpCisgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBw
OjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImludmFsaWQgcHJhZ21hIHZhbHVlIiwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICInb24nIG9yICdvZmYnIGV4cGVjdGVkIik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUV4dGVuc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxvYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgYmVoYXZpb3IpCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtFeHRBbGwo
ImFsbCIpOworCisgICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gZ2V0QmVoYXZpb3IoYmVoYXZp
b3IpOworICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhVbmRlZmluZWQpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsIGxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVoYXZpb3IiLCBuYW1lLCAiaW52YWxpZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0ga0V4dEFsbCkKKyAg
ICB7CisgICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRGlhZ25vc3RpY3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1Is
IGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaGF2ZSAncmVx
dWlyZScgYmVoYXZpb3IiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiZWhhdmlvclZh
bCA9PSBFQmhFbmFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy53cml0
ZUluZm8ocHA6OkRpYWdub3N0aWNzOjpFUlJPUiwgbG9jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImNhbm5vdCBoYXZlICdlbmFibGUnIGJlaGF2aW9yIik7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRFeHRlbnNpb25CZWhh
dmlvcjo6aXRlcmF0b3IgaXRlciA9IG1FeHRlbnNpb25CZWhhdmlvci5iZWdpbigpOworICAgICAg
ICAgICAgICAgICBpdGVyICE9IG1FeHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAg
ICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3I6Oml0ZXJhdG9yIGl0
ZXIgPSBtRXh0ZW5zaW9uQmVoYXZpb3IuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtRXh0
ZW5zaW9uQmVoYXZpb3IuZW5kKCkpCisgICAgeworICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhh
dmlvclZhbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBwOjpEaWFnbm9zdGljczo6
U2V2ZXJpdHkgc2V2ZXJpdHkgPSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgIHN3aXRjaCAo
YmVoYXZpb3JWYWwpIHsKKyAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgc2V2ZXJpdHkg
PSBwcDo6RGlhZ25vc3RpY3M6OkVSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUJo
RW5hYmxlOgorICAgICAgY2FzZSBFQmhXYXJuOgorICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAg
ICAgICBzZXZlcml0eSA9IHBwOjpEaWFnbm9zdGljczo6V0FSTklORzsKKyAgICAgICAgYnJlYWs7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgbURpYWdub3N0aWNzLndyaXRlSW5mbyhzZXZlcml0eSwgbG9jLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbiIsIG5hbWUsICJpcyBub3Qgc3VwcG9ydGVk
Iik7Cit9CisKK3ZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB2ZXJzaW9uKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7
CisKKyAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICB7CisgICAgICAgIHN0ZDo6c3Ry
aW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CisgICAgICAgIHN0
ZDo6c3RyaW5nIHN0ciA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgbURpYWdub3N0aWNzLndyaXRl
SW5mbyhwcDo6RGlhZ25vc3RpY3M6OkVSUk9SLCBsb2MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInZlcnNpb24gbnVtYmVyIiwgc3RyLCAibm90IHN1cHBvcnRlZCIpOworICAgIH0K
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVI
YW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RJUkVDVElWRV9I
QU5ETEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCisKKyNpbmNs
dWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1By
YWdtYS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFu
ZGxlci5oIgorCitjbGFzcyBURGlhZ25vc3RpY3M7CisKK2NsYXNzIFREaXJlY3RpdmVIYW5kbGVy
IDogcHVibGljIHBwOjpEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoKKyAgICBURGlyZWN0
aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAorICAgICAgICAgICAg
ICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpOworICAgIHZpcnR1YWwgflREaXJl
Y3RpdmVIYW5kbGVyKCk7CisKKyAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBjb25zdCB7IHJl
dHVybiBtUHJhZ21hOyB9CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25C
ZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbnNpb25CZWhhdmlvcjsgfQorCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKTsKKworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IHBwOjpTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgYmVoYXZpb3IpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29u
c3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHZlcnNpb24pOworCisgIHByaXZhdGU6CisgICAgVFByYWdtYSBtUHJhZ21hOworICAg
IFRFeHRlbnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOworICAgIFREaWFnbm9zdGlj
cyYgbURpYWdub3N0aWNzOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFO
RExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0V4dGVu
c2lvbkJlaGF2aW9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03LDkgKzcsMTEgQEAKICNpZm5kZWYgX0VYVEVOU0lPTl9CRUhBVklPUl9J
TkNMVURFRF8KICNkZWZpbmUgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KIAotI2luY2x1
ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmc+
CiAKLXR5cGVkZWYgZW51bSB7Cit0eXBlZGVmIGVudW0KK3sKICAgICBFQmhSZXF1aXJlLAogICAg
IEVCaEVuYWJsZSwKICAgICBFQmhXYXJuLApAQCAtMTksMjAgKzIxLDE3IEBAIHR5cGVkZWYgZW51
bSB7CiAKIGlubGluZSBjb25zdCBjaGFyKiBnZXRCZWhhdmlvclN0cmluZyhUQmVoYXZpb3IgYikK
IHsKLSAgICBzd2l0Y2goYikgewotICAgICAgY2FzZSBFQmhSZXF1aXJlOgotICAgICAgICByZXR1
cm4gInJlcXVpcmUiOwotICAgICAgY2FzZSBFQmhFbmFibGU6Ci0gICAgICAgIHJldHVybiAiZW5h
YmxlIjsKLSAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgcmV0dXJuICJ3YXJuIjsKLSAgICAg
IGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgcmV0dXJuICJkaXNhYmxlIjsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIHN3aXRjaChiKQorICAgIHsKKyAgICAgIGNh
c2UgRUJoUmVxdWlyZTogcmV0dXJuICJyZXF1aXJlIjsKKyAgICAgIGNhc2UgRUJoRW5hYmxlOiBy
ZXR1cm4gImVuYWJsZSI7CisgICAgICBjYXNlIEVCaFdhcm46IHJldHVybiAid2FybiI7CisgICAg
ICBjYXNlIEVCaERpc2FibGU6IHJldHVybiAiZGlzYWJsZSI7CisgICAgICBkZWZhdWx0OiByZXR1
cm4gTlVMTDsKICAgICB9CiB9CiAKLXR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IFRF
eHRlbnNpb25CZWhhdmlvcjsKKy8vIE1hcHBpbmcgYmV0d2VlbiBleHRlbnNpb24gbmFtZSBhbmQg
YmVoYXZpb3IuCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRl
bnNpb25CZWhhdmlvcjsKIAogI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw3ICs0NzUs
NyBAQCBzdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uRnJhZ21lbnQoCiAvLyBJbXBsZW1l
bnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgogLy8KIC8vPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJbkNvbnN0YW50cyhjb25zdCBTaEJ1aWx0SW5S
ZXNvdXJjZXMgJnJlc291cmNlcykKK3N0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoU2hT
aGFkZXJTcGVjIHNwZWMsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyAmcmVzb3VyY2VzKQogewog
ICAgIFRTdHJpbmdTdHJlYW0gczsKIApAQCAtNDg3LDcgKzQ4Nyw5IEBAIHN0YXRpYyBUU3RyaW5n
IEJ1aWx0SW5Db25zdGFudHMoY29uc3QgU2gKICAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMgPDwgIjsiOwogICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhUZXh0dXJlSW1h
Z2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKICAg
ICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9ICIgPDwgcmVz
b3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0
IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzIDw8
ICI7IjsKKworICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpCisgICAgICAgIHMg
PDwgImNvbnN0IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzIDw8ICI7IjsKIAogICAgIHJldHVybiBzLnN0cigpOwogfQpAQCAtNTEzLDcgKzUxNSw3
IEBAIHZvaWQgVEJ1aWx0SW5zOjppbml0aWFsaXplKFNoU2hhZGVyVHlwZSAKICAgICBkZWZhdWx0
OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKICAgICB9CiAKLSAg
ICBidWlsdEluU3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkNvbnN0YW50cyhyZXNvdXJjZXMpKTsK
KyAgICBidWlsdEluU3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkNvbnN0YW50cyhzcGVjLCByZXNv
dXJjZXMpKTsKIH0KIAogdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBT
aFNoYWRlclNwZWMgc3BlYywKQEAgLTUyNiwxMSArNTI4LDIyIEBAIHZvaWQgSWRlbnRpZnlCdWls
dElucyhTaFNoYWRlclR5cGUgdHlwZSwKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAg
Y2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAg
ICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZp
bmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAg
ICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygi
Z2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRp
dW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAgICAgICAgICAg
ICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcs
IDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICAvLworICAg
ICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGds
X01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgICAvLyBJbnN0ZWFkLCBj
c3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgorICAgICAgICAv
LworICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
YWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNd
IiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5
cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19D
b2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgpAQCAtNjIwLDcgKzYzMyw4IEBAIHZvaWQgSWRl
bnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwKIAogICAgIC8vIEZpbmFsbHkgYWRkIHJl
c291cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2Ug
U0hfRlJBR01FTlRfU0hBREVSOiB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6CisgICAg
ICAgIGlmIChzcGVjICE9IFNIX0NTU19TSEFERVJTX1NQRUMpIHsKICAgICAgICAgICAgIC8vIFNl
dCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgogICAgICAgICAgICAgVFR5cGUgZnJh
Z0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250
ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKyNpbmNsdWRlICJj
b21waWxlci9vc2luY2x1ZGUuaCIKKworT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0
SW5kZXgoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElE
X1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4
LgorICAgIC8vCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4
KCk7CisgICAgCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURf
VExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0
SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGl6ZWQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyZWVQYXJz
ZUNvbnRleHRJbmRleCgpCit7CisgICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFy
c2VDb250ZXh0SW5kZXg7CisKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRl
eHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9T
X0lOVkFMSURfVExTX0lOREVYOworCisgICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5k
ZXgpOworfQorCitib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlm
IChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBD
b250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19j
YXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxy
ZWFkeSBpbml0YWxpemVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
VGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4
dCgpOworICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAi
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBw
YXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRo
cmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEZyZWVQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNv
bnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAm
JiAiRnJlZVBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpemVk
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250
ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4o
T1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJz
ZUNvbnRleHQpCisgICAgICAgIGRlbGV0ZSBscFBhcnNlQ29udGV4dDsKKworICAgIHJldHVybiB0
cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkK
K3sKKyAgICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAg
Ly8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCkpOworCisgICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29u
dGV4dDsKK30KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw0ICsxMywxNCBAQCBib29sIEZyZWVQ
YXJzZUNvbnRleHRJbmRleCgpOwogYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7
CiBib29sIEZyZWVQYXJzZUNvbnRleHQoKTsKIAorc3RydWN0IFRQYXJzZUNvbnRleHQ7Cit0eXBl
ZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOworZXh0ZXJuIFRQYXJzZUNv
bnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyNkZWZpbmUgR2xvYmFsUGFy
c2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCisKK3R5cGVkZWYgc3RydWN0IFRUaHJl
YWRQYXJzZUNvbnRleHRSZWMKK3sKKyAgICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBhcnNlQ29u
dGV4dDsKK30gVFRocmVhZFBhcnNlQ29udGV4dDsKKwogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9Q
QVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDEyMjczOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0zNzMsNyArMzczLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRVbmFyeU1hdAogLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCiAvLwog
Ly8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNz
ZWQgaW4gaWYKLS8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZS4KKy8vIGl0IHdhcyBhbHJl
YWR5IGFuIGFnZ3JlZ2F0ZSBidXQgbm8gb3BlcmF0b3Igd2FzIHNldC4KIC8vCiBUSW50ZXJtQWdn
cmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSog
bm9kZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9jIGxpbmUpCiB7CkBAIC01OTIsMTAgKzU5Miwx
MCBAQCBUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uCiAgICAgLy8KIAog
ICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5
cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRC
Q29uc3QoKSA9PSB0cnVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxID8gc2V0
QWdncmVnYXRlT3BlcmF0b3Iobm9kZVBhaXIubm9kZTEsIEVPcFNlcXVlbmNlLCBub2RlUGFpci5u
b2RlMS0+Z2V0TGluZSgpKSA6IE5VTEw7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBub2RlUGFpci5ub2RlMjsKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMiA/IHNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGVQYWlyLm5vZGUyLCBFT3BTZXF1ZW5jZSwgbm9kZVBhaXIu
bm9kZTItPmdldExpbmUoKSkgOiBOVUxMOwogICAgIH0KIAogICAgIFRJbnRlcm1TZWxlY3Rpb24q
IG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBh
aXIubm9kZTIpOwpAQCAtNjU2LDYgKzY1Niw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkU2VsZWN0aW8KICAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCiAgICAgLy8KICAg
ICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1
ZUJsb2NrLCBmYWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+Z2V0
VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKIAogICAgIHJldHVybiBub2RlOwpAQCAtMTQ0NCw5ICsxNDQ1LDMgQEAgVElu
dGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29ucwogICAgIHJldHVybiBhZGRDb25z
dGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9u
KCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0
LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7CiB9CiAKLXZvaWQgVEludGVybUFnZ3JlZ2F0
ZTo6YWRkVG9QcmFnbWFUYWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSkKLXsKLSAgICBh
c3NlcnQoIXByYWdtYVRhYmxlKTsKLSAgICBwcmFnbWFUYWJsZSA9IG5ldyBUUHJhZ21hVGFibGUo
KTsKLSAgICAqcHJhZ21hVGFibGUgPSBwVGFibGU7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVO
YW1lcy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
LDcgKzE1LDkgQEAgVFN0cmluZyBtYXBMb25nTmFtZShpbnQgaWQsIGNvbnN0IFRTdHJpbgogICAg
IHN0cmVhbSA8PCAid2ViZ2xfIjsKICAgICBpZiAoaXNHbG9iYWwpCiAgICAgICAgIHN0cmVhbSA8
PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkIDw8ICJfIjsKKyAgICBzdHJlYW0gPDwgaWQ7CisgICAg
aWYgKG5hbWVbMF0gIT0gJ18nKQorICAgICAgICBzdHJlYW0gPDwgIl8iOwogICAgIHN0cmVhbSA8
PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAtIHN0cmVhbS5z
dHIoKS5zaXplKCkpOwogICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShy
ZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0SExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMTAgKzYsMTIgQEAKIAogI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZv
U2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJjaFN5
bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKIAogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjAsMTMgKzIyLDEzIEBA
IG5hbWVzcGFjZSBzaAogVFN0cmluZyBzdHIoaW50IGkpCiB7CiAgICAgY2hhciBidWZmZXJbMjBd
OwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAiJWQiLCBpKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCiBPdXRwdXRI
TFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKIHsKLSAgICBtVW5mb2xkU2Vs
ZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtVW5mb2xkU2hvcnRD
aXJjdWl0ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5z
aWRlRnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CkBAIC0z
OCw2ICs0MCwxMiBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAg
ICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOwogICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9
IGZhbHNlOwogICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1
cmUyRExvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRExvZDBfYmlhcyA9IGZhbHNlOwor
ICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFBy
b2pMb2QwX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IGZhbHNlOwor
ICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxzZTsKICAgICBtVXNlc0RlcHRoUmFu
Z2UgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOwogICAgIG1Vc2VzUG9pbnRD
b29yZCA9IGZhbHNlOwpAQCAtNzUsMjAgKzgzLDI2IEBAIE91dHB1dEhMU0w6Ok91dHB1dEhMU0wo
VFBhcnNlQ29udGV4dCAmY28KICAgICBtU2NvcGVEZXB0aCA9IDA7CiAKICAgICBtVW5pcXVlSW5k
ZXggPSAwOworCisgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKKyAgICBt
T3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CisgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29w
ID0gZmFsc2U7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKIHsKLSAgICBkZWxldGUg
bVVuZm9sZFNlbGVjdDsKKyAgICBkZWxldGUgbVVuZm9sZFNob3J0Q2lyY3VpdDsKIH0KIAogdm9p
ZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogeworICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
ID0gY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7CisKICAgICBt
Q29udGV4dC50cmVlUm9vdC0+dHJhdmVyc2UodGhpcyk7ICAgLy8gT3V0cHV0IHRoZSBib2R5IGZp
cnN0IHRvIGRldGVybWluZSB3aGF0IGhhcyB0byBnbyBpbiB0aGUgaGVhZGVyCiAgICAgaGVhZGVy
KCk7CiAKLSAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUhlYWRlci5jX3N0cigpOwotICAg
IG1Db250ZXh0LmluZm9TaW5rLm9iaiA8PCBtQm9keS5jX3N0cigpOworICAgIG1Db250ZXh0Lmlu
Zm9TaW5rKCkub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luaygp
Lm9iaiA8PCBtQm9keS5jX3N0cigpOwogfQogCiBUSW5mb1NpbmtCYXNlICZPdXRwdXRITFNMOjpn
ZXRCb2R5U3RyZWFtKCkKQEAgLTIwNSwyNSArMjE5LDExIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVh
ZGVyKCkKICAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAK
LSAgICAgICAgLy8gVGhlIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zICJmbGlwIiB0aGUgWSBjb29y
ZGluYXRlIGluIG9uZSB3YXkgb3IgYW5vdGhlci4gVGhpcyBpcyBiZWNhdXNlIHRleHR1cmVzIGFy
ZSBzdG9yZWQKLSAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBPcGVuR0wgY29udmVudGlvbiwg
aS5lLiAoMCwgMCkgaXMgImJvdHRvbSBsZWZ0IiwgcmF0aGVyIHRoYW4gdGhlIEQzRCBjb252ZW50
aW9uIHdoZXJlICgwLCAwKQotICAgICAgICAvLyBpcyAidG9wIGxlZnQiLiBTaW5jZSB0aGUgSExT
TCB0ZXh0dXJlIGZldGNoIGZ1bmN0aW9ucyBleHBlY3QgdGV4dHVyZXMgdG8gYmUgc3RvcmVkIGFj
Y29yZGluZyB0byB0aGUgRDNECi0gICAgICAgIC8vIGNvbnZlbnRpb24sIHRoZSBZIGNvb3JkaW5h
dGUgcGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcyBhZGp1c3RlZCB0byBjb21wZW5zYXRlLgot
ICAgICAgICAvLwotICAgICAgICAvLyBUaGUgc2ltcGxlc3QgY2FzZSBpcyB0ZXh0dXJlMkQgd2hl
cmUgdGhlIG1hcHBpbmcgaXMgWSAtPiAxLVksIHdoaWNoIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHRleHR1cmUyRFByb2ogZnVuY3Rpb25zIGFyZSBt
b3JlIGNvbXBsaWNhdGVkIGJlY2F1c2UgdGhlIHByb2plY3Rpb24gZGl2aWRlcyBieSBlaXRoZXIg
WiBvciBXLiBGb3IgdGhlIHZlYzMKLSAgICAgICAgLy8gY2FzZSwgdGhlIG1hcHBpbmcgaXMgWSAt
PiBaLVkgb3IgWS9aIC0+IDEtWS9aLCB3aGljaCBhZ2FpbiBtYXBzIFswLCAxXSAtPiBbMSwgMF0u
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEZvciBjdWJlIHRleHR1cmVzIHRoZSBtYXBwaW5nIGlz
IFkgLT4gLVksIHdoaWNoIG1hcHMgWy0xLCAxXSAtPiBbMSwgLTFdLiBUaGlzIGlzIG5vdCBzdWZm
aWNpZW50IG9uIGl0cyBvd24gZm9yIHRoZQotICAgICAgICAvLyArWSBhbmQgLVkgZmFjZXMsIHdo
aWNoIGFyZSBub3cgb24gdGhlICJ3cm9uZyBzaWRlcyIgb2YgdGhlIGN1YmUuIFRoaXMgaXMgY29t
cGVuc2F0ZWQgZm9yIGJ5IGV4Y2hhbmdpbmcgdGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNl
cyBldmVyeXdoZXJlIGVsc2UgdGhyb3VnaG91dCB0aGUgY29kZS4KLSAgICAgICAgCiAgICAgICAg
IGlmIChtVXNlc1RleHR1cmUyRCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIGZsb2F0
Mih0LngsIDEgLSB0LnkpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RChzLCB0KTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAg
ICJcbiI7CiAgICAgICAgIH0KQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIE91dHB1dEhMU0w6Omhl
YWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCiAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCwgMSAtIHQueSwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKICAgICAg
ICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0K
QEAgLTI0MSwxMiArMjQxLDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAg
ewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC56IC0gdC55LCAwLCB0
LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxv
YXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAg
ICAgICAgICAgICAgICAgICJcbiIKICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0
LngsIHQudyAtIHQueSwgdC56LCB0LncpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRHByb2oocywgdCk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAg
ICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC0yNTUsMTIgKzI1NSwxMiBAQCB2b2lk
IE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSAodC55IC8gdC56KSwgMCwgYmlh
cykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9h
dDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKICAgICAgICAgICAgICAgICAg
ICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiIKICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSAodC55IC8gdC53KSwgMCwgYmlh
cykpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKICAgICAgICAgICAgICAgICAg
ICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTI2OSw3ICsy
NjksNyBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4Q1VCRShzLCBmbG9hdDModC54LCAtdC55LCB0LnopKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9
XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtMjc4LDcgKzI3OCw3
MyBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9h
dCBiaWFzKVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCBiaWFzKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0
KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVzZSAqTG9k
MCBpbnRyaW5zaWNzIGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCisg
ICAgICAgIC8vIFRoZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4
dHVyZSBjb29yZGluYXRlcy4KKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVy
MkQgcywgZmxvYXQyIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtc
biIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55
LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QwKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0
LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCisgICAgICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQo
dC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwg
ZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwg
MCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFz
KHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0
NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
VXNlc1RleHR1cmVDdWJlTG9kMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZs
b2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC04OTcsNyArOTYzLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdAogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBu
b2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChub2RlLT5nZXRUeXBlKCkuZ2V0RmllbGROYW1lKCksIG5vZGUtPmdldExl
ZnQoKS0+Z2V0VHlwZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC05NzMsOSArMTAzOSw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMp
W2ldLnR5cGU7CiAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFt
ZSgpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxk
KGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKSAr
ICIgPT0gIjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlz
KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUo
KTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZFR5cGUt
PmdldEZpZWxkTmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBA
IC0xMDU0LDEyICsxMTIwLDE2IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQKICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dHB1dFRyaXBsZXQodmlz
aXQsICJtdWwoIiwgIiwgdHJhbnNwb3NlKCIsICIpKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNWZWN0b3I6IG91dHB1dFRyaXBsZXQodmlzaXQsICJtdWwodHJhbnNwb3NlKCIs
ICIpLCAiLCAiKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91
dHB1dFRyaXBsZXQodmlzaXQsICJ0cmFuc3Bvc2UobXVsKHRyYW5zcG9zZSgiLCAiKSwgdHJhbnNw
b3NlKCIsICIpKSkiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxPcjogICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIG91dCA8PCAicyIgPDwgbVVuZm9sZFNob3J0Q2lyY3Vp
dC0+Z2V0TmV4dFRlbXBvcmFyeUluZGV4KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
IGNhc2UgRU9wTG9naWNhbFhvcjoKICAgICAgICAgbVVzZXNYb3IgPSB0cnVlOwogICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAieG9yKCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICYmICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAg
ICAgb3V0IDw8ICJzIiA8PCBtVW5mb2xkU2hvcnRDaXJjdWl0LT5nZXROZXh0VGVtcG9yYXJ5SW5k
ZXgoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKICAgICB9CiAKQEAgLTExMzEsOSArMTIwMSwzNiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBFT3BMZW5ndGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIi
LCAiKSIpOyAgICBicmVhazsKICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcERGZHg6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIp
Iik7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BERmR5OiAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKC1kZHkoIiwgIiIsICIpKSIpOyAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wRndpZHRoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwg
IikiKTsgICAgYnJlYWs7ICAgICAgICAKKyAgICAgIGNhc2UgRU9wREZkeDoKKyAgICAgICAgaWYo
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb24pCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIsIDAuMCkiKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcERGZHk6CisgICAgICAgIGlmKG1JbnNpZGVEaXNjb250aW51b3VzTG9v
cCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIiLCAiLCAwLjApIik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIs
ICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDoK
KyAgICAgICAgaWYobUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIs
ICIsIDAuMCkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJhbnkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBF
T3BBbGw6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIp
OyAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CkBAIC0xMTcxLDEy
ICsxMjY4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUoKCpzaXQpLT5n
ZXRMaW5lKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KCpzaXQp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+
dHJhdmVyc2UoKnNpdCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgKCpz
aXQpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMo
KnNpdCk7CiAKICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CiAgICAgICAgICAgICB9CkBA
IC0xMjkwLDU5ICsxMzgyLDY0IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmkKICAgICAgICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1
bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAotICAgICAgICAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgp
KSA8PCAiICI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgdHlw
ZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ZGVjb3JhdGUobmFtZSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJtYWluIikKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfbWFpbigiOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSkgPDwgIigiOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBu
b2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVu
dHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKIAotICAg
ICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5j
ZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gc2VxdWVu
Y2VbMF0tPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNb
aV0tPmdldEFzU3ltYm9sTm9kZSgpOwogCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29u
c3RydWN0b3Ioc3ltYm9sLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChzeW1ib2wtPmdldFR5cGUo
KS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3RvcihzeW1ib2wtPmdldFR5cGUoKSwgc2Nv
cGVkU3RydWN0KHN5bWJvbC0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpLCBOVUxMKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1l
bnRTdHJpbmcoc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3Ry
aW5nKHN5bWJvbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRz
LnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpIDwgYXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVuY2Uu
YmVnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiI7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRMaW5lKCkp
OwotICAgICAgICAgICAgICAgIG91dCA8PCAie1xuIjsKLSAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoc2VxdWVuY2Uuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHNl
cXVlbmNlWzFdLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rp
b24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRMaW5lRGly
ZWN0aXZlKG5vZGUtPmdldEVuZExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4i
OworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CiAKLSAgICAgICAgICAg
ICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtQ29udGFpbnNM
b29wRGlzY29udGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1P
dXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTM1MCw1NCArMTQ0NywxMDYgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRTdHJp
bmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRw
dXRMb2QwRnVuY3Rpb247CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5l
ZCgpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5h
bWUpIDw8IChsb2QwID8gIkxvZDAoIiA6ICIoIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChuYW1lID09ICJ0ZXh0dXJlMkQiKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkQoIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMp
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRExvZDAgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
UHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
X2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZDAoIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQogICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2Jp
YXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1
YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1
cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1
cmVDdWJlKCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
Q3ViZUxvZDAoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2Qi
KQogICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNTgzLDExICsxNzMyLDExIEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmkKIAogICAgIGlmIChub2RlLT51c2VzVGVy
bmFyeU9wZXJhdG9yKCkpCiAgICAgewotICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZvbGRTZWxl
Y3QtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOworICAgICAgICBvdXQgPDwgInMiIDw8IG1VbmZv
bGRTaG9ydENpcmN1aXQtPmdldE5leHRUZW1wb3JhcnlJbmRleCgpOwogICAgIH0KICAgICBlbHNl
ICAvLyBpZi9lbHNlIHN0YXRlbWVudAogICAgIHsKLSAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJh
dmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOworICAgICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0
LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CiAKICAgICAgICAgb3V0IDw8ICJpZigi
OwogCkBAIC0xNjAwLDExICsxNzQ5LDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmkKIAogICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgICAgIHRyYXZlcnNlU3RhdGVtZW50cyhub2RlLT5nZXRUcnVlQmxvY2soKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7Ci0g
ICAgICAgIG91dCA8PCAiO31cbiI7CisgICAgICAgIG91dCA8PCAiO1xufVxuIjsKIAogICAgICAg
ICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQogICAgICAgICB7CkBAIC0xNjE0LDEwICsxNzYz
LDEwIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmkKICAgICAgICAg
ICAgIG91dCA8PCAie1xuIjsKIAogICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2Rl
LT5nZXRGYWxzZUJsb2NrKCktPmdldExpbmUoKSk7Ci0gICAgICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgdHJhdmVyc2VTdGF0ZW1lbnRz
KG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CiAKICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3Rp
dmUobm9kZS0+Z2V0RmFsc2VCbG9jaygpLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgb3V0IDw8
ICI7fVxuIjsKKyAgICAgICAgICAgIG91dCA8PCAiO1xufVxuIjsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTYzMSw2ICsxNzgwLDEzIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVu
aW9uKFRJbnQKIAogYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQogeworICAgIGJvb2wgd2FzRGlzY29udGludW91cyA9IG1JbnNpZGVEaXNj
b250aW51b3VzTG9vcDsKKworICAgIGlmICghbUluc2lkZURpc2NvbnRpbnVvdXNMb29wKQorICAg
IHsKKyAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gY29udGFpbnNMb29wRGlzY29u
dGludWl0eShub2RlKTsKKyAgICB9CisKICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2Rl
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NzYsNyArMTgzMiw3IEBAIGJv
b2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCAKIAogICAgIGlmIChub2RlLT5n
ZXRCb2R5KCkpCiAgICAgewotICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICB0cmF2ZXJzZVN0YXRlbWVudHMobm9kZS0+Z2V0Qm9keSgpKTsKICAgICB9CiAK
ICAgICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CkBAIC0xNjk0LDYgKzE4
NTAsOCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgCiAKICAgICBv
dXQgPDwgIn1cbiI7CiAKKyAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250
aW51b3VzOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMyLDYgKzE4OTAsMTYgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdAogICAgIHJldHVybiB0cnVl
OwogfQogCit2b2lkIE91dHB1dEhMU0w6OnRyYXZlcnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAq
bm9kZSkKK3sKKyAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgeworICAgICAg
ICBtVW5mb2xkU2hvcnRDaXJjdWl0LT50cmF2ZXJzZShub2RlKTsKKyAgICB9CisKKyAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKK30KKwogYm9vbCBPdXRwdXRITFNMOjppc1NpbmdsZVN0YXRlbWVu
dChUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUg
PSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOwpAQCAtMTc1OSw5ICsxOTI3LDExIEBAIGJvb2wgT3V0
cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ly8gSGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0aGFuIDI1NSBpdGVyYXRpb25zICh1bnN1cHBvcnRl
ZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhlbQorLy8gSGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0
aGFuIDI1NCBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhl
bQorLy8gKFRoZSBEM0QgZG9jdW1lbnRhdGlvbiBzYXlzIDI1NSBpdGVyYXRpb25zLCBidXQgdGhl
IGNvbXBpbGVyIGNvbXBsYWlucyBhdCBhbnl0aGluZyBtb3JlIHRoYW4gMjU0KS4KIGJvb2wgT3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAgICBj
b25zdCBpbnQgTUFYX0xPT1BfSVRFUkFUSU9OUyA9IDI1NDsKICAgICBUSW5mb1NpbmtCYXNlICZv
dXQgPSBtQm9keTsKIAogICAgIC8vIFBhcnNlIGxvb3BzIG9mIHRoZSBmb3JtOgpAQCAtMTg3Nywx
NCArMjA0NywxNCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCkg
LyBpbmNyZW1lbnQ7CiAKLSAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IDI1NSkKKyAgICAg
ICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUg
bG9vcAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDAp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRp
YWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbigyNTUsIGl0ZXJhdGlvbnMpOworICAgICAgICAgICAg
ICAgIGludCBjbGFtcGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFY
X0xPT1BfSVRFUkFUSU9OUywgaXRlcmF0aW9ucyk7CiAKICAgICAgICAgICAgICAgICAvLyBmb3Io
aW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3Jl
bWVudCkKIApAQCAtMTkxNSw4ICsyMDg1LDggQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNl
c3NpdmVMb29wKFRJbgogICAgICAgICAgICAgICAgIG91dHB1dExpbmVEaXJlY3RpdmUobm9kZS0+
Z2V0TGluZSgpKTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIjt9XG4iOwogCi0gICAgICAgICAg
ICAgICAgaW5pdGlhbCArPSAyNTUgKiBpbmNyZW1lbnQ7Ci0gICAgICAgICAgICAgICAgaXRlcmF0
aW9ucyAtPSAyNTU7CisgICAgICAgICAgICAgICAgaW5pdGlhbCArPSBNQVhfTE9PUF9JVEVSQVRJ
T05TICogaW5jcmVtZW50OworICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMgLT0gTUFYX0xPT1Bf
SVRFUkFUSU9OUzsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yMDEyLDcgKzIxODIsNyBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3Qg
VFR5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0g
KmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5
cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmlu
ZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlw
ZVN0cmluZyhmaWVsZCkgKyAiICIgKyBkZWNvcmF0ZShmaWVsZC5nZXRGaWVsZE5hbWUoKSkgKyBh
cnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
c3RyaW5nICs9ICJ9ICI7CkBAIC0yMDY1LDYgKzIyMzUsOCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6
OnR5cGVTdHJpbmcoY29uc3QgVFR5CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsK
ICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVy
biAic2FtcGxlcjJEIjsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTIxMzUsNyArMjMwNyw3IEBAIHZvaWQgT3V0cHV0SExTTDo6
YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgVFR5
cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0g
IiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSAr
IGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIg
ICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC5nZXRG
aWVsZE5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKICAgICAgICAg
fQogCiAgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CkBAIC0yNDM0LDQgKzI2MDYsMTQgQEAg
VFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29ucwogICAgIAogICAgIHJldHVy
biBkZWNvcmF0ZShzdHJpbmcpOwogfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmll
bGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKQoreworICAg
IGlmIChzdHJ1Y3R1cmUuZ2V0VHlwZU5hbWUoKS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0
dXJuIHN0cmluZzsKK30KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUsNyArMTUsNyBAQAogCiBuYW1lc3BhY2Ugc2gKIHsKLWNsYXNzIFVuZm9sZFNlbGVjdDsK
K2NsYXNzIFVuZm9sZFNob3J0Q2lyY3VpdDsKIAogY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCiB7CkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBw
dWJsaWMgVEludGVybVRyYXZlcnMKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29y
ZSB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5p
Zm9ybShjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0
aWMgVFN0cmluZyBkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5
cGUgJnN0cnVjdHVyZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgaGVhZGVyKCk7CkBAIC00
Nyw2ICs0OCw3IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKICAgICBib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CiAKKyAgICB2b2lkIHRyYXZl
cnNlU3RhdGVtZW50cyhUSW50ZXJtTm9kZSAqbm9kZSk7CiAgICAgYm9vbCBpc1NpbmdsZVN0YXRl
bWVudChUSW50ZXJtTm9kZSAqbm9kZSk7CiAgICAgYm9vbCBoYW5kbGVFeGNlc3NpdmVMb29wKFRJ
bnRlcm1Mb29wICpub2RlKTsKICAgICB2b2lkIG91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNv
bnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJnBvc3RTdHJpbmcpOwpAQCAtNjIsNyArNjQsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0
cmluZyAmdHlwZU5hbWUpOwogCiAgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7Ci0gICAgVW5m
b2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAgIFVuZm9sZFNob3J0Q2lyY3VpdCAqbVVuZm9s
ZFNob3J0Q2lyY3VpdDsKICAgICBib29sIG1JbnNpZGVGdW5jdGlvbjsKIAogICAgIC8vIE91dHB1
dCBzdHJlYW1zCkBAIC04NCw2ICs4NiwxMiBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzCiAgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwogICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzOwogICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDsKKyAgICBib29s
IG1Vc2VzVGV4dHVyZTJETG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzOwor
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
UHJvakxvZDBfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwOworICAgIGJvb2wg
bVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAg
ICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwpAQCAtMTMy
LDYgKzE0MCwxMCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAg
ICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOwogCiAgICAgaW50IG1VbmlxdWVJbmRleDsgICAv
LyBGb3IgY3JlYXRpbmcgdW5pcXVlIG5hbWVzCisKKyAgICBib29sIG1Db250YWluc0xvb3BEaXNj
b250aW51aXR5OworICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKKyAgICBib29sIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcDsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMzMgKzEwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgog
CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5j
bHVkZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLQot
ZXh0ZXJuICJDIiB7Ci1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiBpbnQg
RmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFJlcG9ydEluZm8o
VEluZm9TaW5rQmFzZSYgc2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgVFByZWZpeFR5cGUg
dHlwZSwgVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBleHRyYUluZm8pCi17Ci0gICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCi0gICAgc2luay5wcmVmaXgodHlwZSk7
Ci0gICAgc2luay5sb2NhdGlvbihsb2MpOwotICAgIHNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICAi
JyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYUluZm8gPDwgIlxuIjsKLX0KLQotc3RhdGlj
IHZvaWQgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
QmVoYXZpb3IpCi17Ci0gICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlv
ci5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFByZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0
LmNfc3RyKCksIDEpOwotICAgIH0KLX0KKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgiCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwpAQCAtNTIsNyArMjYs
NyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvCiB7CiAgICAgZmll
bGRzLm51bSA9IChpbnQpIGNvbXBTdHJpbmcuc2l6ZSgpOwogICAgIGlmIChmaWVsZHMubnVtID4g
NCkgewotICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9u
IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTQsMjAgKzg4LDIwIEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY28KICAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0
cHE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMu
bnVtOyArK2kpIHsKICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IHZlY1NpemUpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiBy
YW5nZSIsICBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsICBjb21wU3RyaW5nLmNfc3Ry
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGkgPiAwKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkg
ewotICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVu
dCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50
IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTQ5LDIwICsxMjMsMjAgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhj
bwogICAgIGZpZWxkcy5jb2wgPSAtMTsKIAogICAgIGlmIChjb21wU3RyaW5nLnNpemUoKSAhPSAy
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIGxlbmd0aCBvZiBtYXRyaXggZmllbGQg
c2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
ICJpbGxlZ2FsIGxlbmd0aCBvZiBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5j
X3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChjb21wU3Ry
aW5nWzBdID09ICdfJykgewogICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21w
U3RyaW5nWzFdID4gJzMnKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRy
aXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmlu
Zy5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOwogICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmlu
Z1sxXSAtICcwJzsKICAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0gJ18nKSB7CiAgICAg
ICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycpIHsKLSAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2Fs
IG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IHRy
dWU7CkBAIC0xNzAsNyArMTQ0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZp
ZWxkcyhjbwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8
IGNvbXBTdHJpbmdbMF0gPiAnMycgfHwKICAgICAgICAgICAgIGNvbXBTdHJpbmdbMV0gPCAnMCcg
fHwgY29tcFN0cmluZ1sxXSA+ICczJykgewotICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVn
YWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNv
bXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CkBAIC0xNzgsNyArMTUy
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjbwogICAgIH0KIAog
ICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5n
ZSIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMDMsMzAgKzE3NywyOCBAQCB2b2lkIFRQ
YXJzZUNvbnRleHQ6OnJlY292ZXIoKQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNv
dXJjZUxvYyBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNv
biwgY29uc3QgY2hhciogdG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogZXh0cmFJbmZvKQogewotICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07Ci0gICAgdmFf
bGlzdCBtYXJrZXI7Ci0gICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOwotICAg
IHZzbnByaW50ZihleHRyYUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQs
IG1hcmtlcik7CisgICAgcHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBEZWNvZGVTb3Vy
Y2VMb2MobG9jLCAmc3JjTG9jLmZpbGUsICZzcmNMb2MubGluZSk7CisgICAgZGlhZ25vc3RpY3Mu
d3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgIFJlcG9ydEluZm8o
aW5mb1NpbmsuaW5mbywgRVByZWZpeEVycm9yLCBsb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5m
byk7Ci0KLSAgICB2YV9lbmQobWFya2VyKTsKICAgICArK251bUVycm9yczsKIH0KIAogdm9pZCBU
UGFyc2VDb250ZXh0Ojp3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvRm9ybWF0LCAuLi4pIHsK
LSAgICBjaGFyIGV4dHJhSW5mb1s1MTJdOwotICAgIHZhX2xpc3QgbWFya2VyOwotICAgIHZhX3N0
YXJ0KG1hcmtlciwgZXh0cmFJbmZvRm9ybWF0KTsKLSAgICB2c25wcmludGYoZXh0cmFJbmZvLCBz
aXplb2YoZXh0cmFJbmZvKSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOwotCi0gICAgUmVwb3J0
SW5mbyhpbmZvU2luay5pbmZvLCBFUHJlZml4V2FybmluZywgbG9jLCByZWFzb24sIHRva2VuLCBl
eHRyYUluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJh
SW5mbykgeworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgRGVjb2RlU291cmNl
TG9jKGxvYywgJnNyY0xvYy5maWxlLCAmc3JjTG9jLmxpbmUpOworICAgIGRpYWdub3N0aWNzLndy
aXRlSW5mbyhwcDo6RGlhZ25vc3RpY3M6OldBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKK30KIAotICAgIHZhX2VuZCht
YXJrZXIpOwordm9pZCBUUGFyc2VDb250ZXh0Ojp0cmFjZShjb25zdCBjaGFyKiBzdHIpCit7Cisg
ICAgZGlhZ25vc3RpY3Mud3JpdGVEZWJ1ZyhzdHIpOwogfQogCiAvLwpAQCAtMjM0LDggKzIwNiwx
MCBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsCiAvLwogdm9pZCBU
UGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJp
bmcgbGVmdCwgVFN0cmluZyByaWdodCkKIHsKLSAgICBlcnJvcihsaW5lLCAiIiwgb3AsICJjYW5u
b3QgY29udmVydCBmcm9tICclcycgdG8gJyVzJyIsCi0gICAgICAgICAgcmlnaHQuY19zdHIoKSwg
bGVmdC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07Cisg
ICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJjYW5ub3QgY29udmVydCBmcm9tICciIDw8IHJpZ2h0IDw8
ICInIHRvICciIDw8IGxlZnQgPDwgIiciOworICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsIGV4dHJhSW5mby5j
X3N0cigpKTsKIH0KIAogLy8KQEAgLTI0Myw5ICsyMTcsMTEgQEAgdm9pZCBUUGFyc2VDb250ZXh0
Ojphc3NpZ25FcnJvcihpbnQgbGluZQogLy8KIHZvaWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVy
cm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQogewotICAgZXJy
b3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgCi0gICAgICAgICAgIm5vIG9wZXJh
dGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAlcyAob3IgdGhl
cmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSIsCi0gICAgICAgICAgb3AsIG9wZXJhbmQu
Y19zdHIoKSk7CisgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgIGV4
dHJhSW5mb1N0cmVhbSA8PCAibm8gb3BlcmF0aW9uICciIDw8IG9wIDw8ICInIGV4aXN0cyB0aGF0
IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAiIDw8IG9wZXJhbmQgCisgICAgICAgICAgICAgICAg
ICAgIDw8ICIgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiOworICAgIHN0
ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICBlcnJvcihs
aW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9wLCBleHRyYUluZm8uY19zdHIoKSk7CiB9CiAK
IC8vCkBAIC0yNTMsMTAgKzIyOSwxMSBAQCB2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJv
cihpbnQgbGluCiAvLwogdm9pZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5l
LCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQogewotICAgIGVy
cm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgCi0gICAgICAgICAgICAibm8g
b3BlcmF0aW9uICclcycgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0
eXBlICclcycgYW5kICIKLSAgICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMn
IChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCi0gICAgICAgICAgICBv
cCwgbGVmdC5jX3N0cigpLCByaWdodC5jX3N0cigpKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJubyBvcGVyYXRpb24gJyIg
PDwgb3AgPDwgIicgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBl
ICciIDw8IGxlZnQgCisgICAgICAgICAgICAgICAgICAgIDw8ICInIGFuZCBhIHJpZ2h0IG9wZXJh
bmQgb2YgdHlwZSAnIiA8PCByaWdodCA8PCAiJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBj
b252ZXJzaW9uKSI7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgZXh0
cmFJbmZvLmNfc3RyKCkpOyAKIH0KIAogYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJv
ckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsK
QEAgLTI2NSwxMyArMjQyLDEzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JD
aGVjaygKICAgICBzd2l0Y2goIHR5cGUgKXsKICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICBp
ZiggcHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUs
ICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAi
IiApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVk
ICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGlu
dCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNw
ZWNpZmllZCAoaW50KSIsICIiICk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKQEAgLTMxMyw3ICsyOTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soaW50CiAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgq
cCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpOwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5u
b3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUg
ZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMjQsNyArMzAxLDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludAogICAgICAgICBkZWZhdWx0OiAK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVycm9yKGxpbmUsICIgbC12
YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFs
dWUgcmVxdWlyZWQiLCBvcCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzY0
LDcgKzM0MSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQKICAg
ICB9CiAKICAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2Rl
ID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIi
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wKTsKIAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNzksMTAgKzM1NiwxOCBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50CiAgICAgLy8KICAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSwgd2UgaGF2ZSBhbiBlcnJvciBhbmQgYSBtZXNzYWdlLgogICAgIC8vCi0gICAgaWYg
KHN5bU5vZGUpCi0gICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAi
XCIlc1wiICglcykiLCBzeW1ib2wsIG1lc3NhZ2UpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3Io
bGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIoJXMpIiwgbWVzc2FnZSk7CisgICAgaWYg
KHN5bU5vZGUpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwor
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIlwiIiA8PCBzeW1ib2wgPDwgIlwiICgiIDw8IG1l
c3NhZ2UgPDwgIikiOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9T
dHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9w
LCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAi
KCIgPDwgbWVzc2FnZSA8PCAiKSI7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4
dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTM5OCw3ICszODMsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVj
ayhUSW50CiAgICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBl
eHByZXNzaW9uIHJlcXVpcmVkIiwgIiIsICIiKTsKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
ICJjb25zdGFudCBleHByZXNzaW9uIHJlcXVpcmVkIiwgIiIpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00MTQsNyArMzk5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JD
aGVjayhUSQogICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+
Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJv
cihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbiwg
IiIpOworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1
aXJlZCIsIHRva2VuKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDMwLDcgKzQxNSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayhpbnQKICAgICBpZiAoZ2xvYmFs
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlcnJvcihsaW5lLCAib25seSBhbGxvd2Vk
IGF0IGdsb2JhbCBzY29wZSIsIHRva2VuLCAiIik7CisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxs
b3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTQ0OSwyNCArNDM0LDI2IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNr
KGkKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVp
bHQtaW4gbmFtZSI7CiAgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CiAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgMywgImdsXyIpID09IDApIHsKLSAgICAg
ICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOworICAgICAgICAg
ICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQ
RUMpIHsKKyAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKLSAg
ICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsK
KyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIuY29tcGFyZSgwLCA3LCAiX3dlYmdsXyIpID09IDApIHsKLSAgICAgICAg
ICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIl93ZWJnbF8iLCAiIik7CisgICAg
ICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
c2hhZGVyU3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDICYmIGlkZW50aWZpZXIuY29tcGFyZSgw
LCA0LCAiY3NzXyIpID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZl
ZEVyck1zZywgImNzc18iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRT
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5j
X3N0cigpLCAiIiwgIiIpOwotICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1
bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWRlbnRpZmllcnMg
Y29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgKF9fKSBhcmUgcmVzZXJ2ZWQg
YXMgcG9zc2libGUgZnV0dXJlIGtleXdvcmRzIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsNTEgKzUxNCw1
MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjCiAgICAgICAgIHR5
cGUtPnNldFF1YWxpZmllcihFdnFDb25zdCk7CiAKICAgICBpZiAodHlwZS0+aXNBcnJheSgpICYm
IHR5cGUtPmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBl
ciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50
IiwgImNvbnN0cnVjdG9yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlm
IChhcnJheUFyZyAmJiBvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3Io
bGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEgbm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdGluZyBmcm9tIGEg
bm9uLWRlcmVmZXJlbmNlZCBhcnJheSIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXko
KSkgewogICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKLSAgICAg
ICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25s
eSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICBlcnJv
cihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9u
ZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKG92ZXJGdWxsKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9y
KGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3Qg
JiYgIXR5cGUtPmlzQXJyYXkoKSAmJiBpbnQodHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSkgIT0g
ZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIg
b2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0
cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUs
ICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVt
YmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpIHx8ICFtYXRyaXhJbk1h
dHJpeCkgewogICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplICE9
IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKICAgICAgICAgICAgIChvcCA9
PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkpIHsK
LSAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNv
bnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3Rv
ciIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBU
SW50ZXJtVHlwZWQgKnR5cGVkID0gbm9kZSA/IG5vZGUtPmdldEFzVHlwZWQoKSA6IDA7CiAgICAg
aWYgKHR5cGVkID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNvbnN0cnVjdG9yIGFyZ3Vt
ZW50IGRvZXMgbm90IGhhdmUgYSB0eXBlIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICBl
cnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAi
Y29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChvcCAh
PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkp
IHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2Ft
cGxlciIsICJjb25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHZvaWQiLCAiY29uc3RydWN0b3IiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC01ODUsNyArNTcyLDcgQEAgYm9vbCBUUGFy
c2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlYwogYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lk
RXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1
YmxpY1R5cGUmIHB1YlR5cGUpCiB7CiAgICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7
Ci0gICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB1c2Ugb2Yg
dHlwZSAndm9pZCciLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9IAogCkBAIC01OTksNyArNTg2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJy
b3JDaGVjayhpbnQgbAogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGlu
ZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQogewogICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8
IHR5cGUtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVz
c2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4
cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAK
QEAgLTYxMyw3ICs2MDAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGlu
dCBsCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpCiB7CiAgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBw
VHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKIApAQCAtNjMxLDcgKzYxOCw3IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW4KICAgICAgICAgCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAg
ICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSkpOwog
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY0Myw3ICs2MzAsNyBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yCiB7CiAgICAgaWYgKChwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0
IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCiAgICAgICAgIHBUeXBlLnR5
cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3
aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUi
LCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02NTgsNyArNjQ1LDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJybwogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91
dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIAogICAgICAgICAgICAgIHR5cGUuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkg
ewotICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0
ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJz
YW1wbGVycyBjYW5ub3QgYmUgb3V0cHV0IHBhcmFtZXRlcnMiLCB0eXBlLmdldEJhc2ljU3RyaW5n
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY5MCwxNCArNjc3LDE0IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygKIHsKICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAg
ICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBp
bnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkg
c2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpOwogCiAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIi
LCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2
ZSBpbnRlZ2VyIiwgIiIpOwogICAgICAgICBzaXplID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNzEzLDcgKzcwMCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXpl
RXJyb3JDaGVjaygKIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogewogICAgIGlmICgodHlwZS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIi
LCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBkZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRU
eXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtNzMxLDcgKzcxOCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJy
YXlUeXBlRXJyb3JDaGVjaygKICAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJyYXk/CiAgICAg
Ly8KICAgICBpZiAodHlwZS5hcnJheSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRl
Y2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCku
Y19zdHIoKSwgIiIpOworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlz
IG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNzY3LDM0ICs3NTQsMzQgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IAogCiAgICAgICAgIGlmICghIHN5bWJv
bFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBz
eW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihs
aW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHZhcmlh
YmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKICAgICAgICAgaWYgKCEgdmFy
aWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXki
LCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPiAwKSB7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIHNp
emUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCEgdmFyaWFibGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlm
ZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggYSBkaWZmZXJlbnQgdHlwZSIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
CiAgICAgICAgIFRUeXBlKiB0ID0gdmFyaWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7
CiAgICAgICAgIHdoaWxlICh0ICE9IDApIHsKICAgICAgICAgICAgIGlmICh0LT5nZXRNYXhBcnJh
eVNpemUoKSA+IHR5cGUuYXJyYXlTaXplKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwg
ImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZp
ZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJoaWdoZXIgaW5k
ZXggdmFsdWUgYWxyZWFkeSB1c2VkIGZvciB0aGUgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCkp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgdC0+c2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKQEAgLTgxNiw3ICs4MDMsNyBAQCBi
b29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50CiAgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7CiAgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5n
ZXRTeW1ib2woKSwgJmJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBl
cnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIi
LCBub2RlLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1i
b2wpOwpAQCAtODI4LDE0ICs4MTUsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNldE1h
eFNpemUoVEludAogICAgIC8vIGl0cyBhbiBlcnJvcgogICAgIGlmIChub2RlLT5nZXRTeW1ib2wo
KSA9PSAiZ2xfRnJhZ0RhdGEiKSB7CiAgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3ltYm9s
VGFibGUuZmluZCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCAmYnVpbHRJbik7Ci0gICAgICAgIGlmIChm
cmFnRGF0YSA9PSAwKSB7Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsICJnbF9NYXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGZyYWdE
YXRhKTsKIAogICAgICAgICBpbnQgZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJs
ZSo+KGZyYWdEYXRhKS0+Z2V0Q29uc3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CiAgICAgICAg
IGlmIChmcmFnRGF0YVZhbHVlIDw9IHNpemUpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAg
dG8gZ2xfTWF4RHJhd0J1ZmZlcnMiLCAiIik7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRv
IGdsX01heERyYXdCdWZmZXJzIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTg3MCw3ICs4NTQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRD
b25zdEVycm9yQ2hlCiAgICAgLy8KICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
IHsKICAgICAgICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9y
KGxpbmUsICJ2YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxp
emVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJ2YXJp
YWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRlbnRp
Zmllci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04OTEsNyAr
ODc1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhpbgogICAgIHZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwogCiAgICAg
aWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgZXJyb3IobGlu
ZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0
cigpKTsKICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICB2YXJpYWJsZSA9IDA7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTA2LDcgKzg5MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6bm9uSW5pdEVycm9yQ2hlY2soaW4KIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNo
ZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxp
ZmllciwgVFR5cGUqIHR5cGUpCiB7ICAgIAogICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3Qg
JiYgcXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5lLCAicXVh
bGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90
IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxp
ZmllcikpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHF1YWxpZmllciA9
PSBFdnFDb25zdCAmJiBwYXJhbVF1YWxpZmllciAhPSBFdnFJbikgewpAQCAtOTI0LDggKzkwOCw5
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCAKIAogYm9vbCBUUGFy
c2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBl
eHRlbnNpb24pCiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIGlmIChpdGVyID09IGV4
dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRCZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuZmluZChleHRlbnNpb24uY19zdHIo
KSk7CisgICAgaWYgKGl0ZXIgPT0gZXh0QmVoYXZpb3IuZW5kKCkpIHsKICAgICAgICAgZXJyb3Io
bGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgbm90IHN1cHBvcnRlZCIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MzUsOCArOTIwLDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhXYXJuKSB7Ci0gICAgICAgIFRTdHJp
bmcgbXNnID0gImV4dGVuc2lvbiAiICsgZXh0ZW5zaW9uICsgIiBpcyBiZWluZyB1c2VkIjsKLSAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwg
bGluZSk7CisgICAgICAgIHdhcm5pbmcobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0
cigpLCAiaXMgYmVpbmcgdXNlZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC05NDUsOCArOTI5LDIzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVj
aygKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBl
eHRlbnNpb24pCiB7Ci0gICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24pOwotICAgIHJldHVybiAoaXRlciAh
PSBleHRlbnNpb25CZWhhdmlvci5lbmQoKSk7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9y
JiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgVEV4dGVuc2lvbkJlaGF2
aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0YmVoYXZpb3IuZmluZChleHRlbnNpb24pOwor
ICAgIHJldHVybiAoaXRlciAhPSBleHRiZWhhdmlvci5lbmQoKSk7Cit9CisKK3ZvaWQgVFBhcnNl
Q29udGV4dDo6aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24g
bG9jOworICAgIERlY29kZVNvdXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZsb2MubGluZSk7Cisg
ICAgZGlyZWN0aXZlSGFuZGxlci5oYW5kbGVFeHRlbnNpb24obG9jLCBleHROYW1lLCBiZWhhdmlv
cik7Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKGludCBs
aW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291
cmNlTG9jYXRpb24gbG9jOworICAgIERlY29kZVNvdXJjZUxvYyhsaW5lLCAmbG9jLmZpbGUsICZs
b2MubGluZSk7CisgICAgZGlyZWN0aXZlSGFuZGxlci5oYW5kbGVQcmFnbWEobG9jLCBuYW1lLCB2
YWx1ZSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtOTcwLDEyICs5NjksMTIg
QEAgY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuYwogICAgIH0KIAogICAg
IGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3Zl
cmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5k
IiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
ICAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJm
dW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgImZ1bmN0aW9uIG5hbWUgZXhwZWN0ZWQiLCBjYWxsLT5nZXROYW1l
KCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTAwMyw3ICsxMDAy
LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAgICAv
LwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwog
ICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAgICAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5
LCBhbmQgdGhlIHBvb2wgCiAgICAgICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhl
IG1lbW9yeQpAQCAtMTAxNSw3ICsxMDE0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRl
SW5pdGlhbGl6ZXIoVAogICAgIC8vCiAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwogICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRl
bXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZx
Q29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0
eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmlu
ZygpLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0
eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmlu
ZygpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8vCkBAIC0xMDI0LDEzICsx
MDIzLDE2IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKIAogICAg
IGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgaWYgKHF1YWxpZmllciAhPSBp
bml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAg
c3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICInIiA8PCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkg
PDwgIiciOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0
YW50IHRvIiwgIj0iLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5
cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9y
IGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQpAQCAtMTA0OSw3ICsxMDUxLDEwIEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0
QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5z
aGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgIiciIDw8IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKSA8
PCAiJyI7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJl
YW0uc3RyKCk7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAi
PSIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCku
c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtMTIzNCwxNCArMTIzOSwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmNvbnN0cnVjdEJ1CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAg
ZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiLCAiIik7CisgICAgICAg
IGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CiAgICAgICAgIHJl
Y292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgbmV3Tm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1i
b2xUYWJsZSk7CiAgICAgaWYgKG5ld05vZGUgPT0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAi
Y2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgZXJyb3IobGluZSwg
ImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCkBAIC0xMjcwLDggKzEyNzUsMTIgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpj
b25zdHJ1Y3RTdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlwZWQoKSwgRU9wQ29uc3RydWN0U3Ry
dWN0LCBsaW5lKTsKICAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0
cnVjdG9yIiwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAlZCBmcm9tICclcycgdG8gJyVzJyIs
IHBhcmFtQ291bnQsCi0gICAgICAgICAgICAgICAgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFt
IDw8ICJjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIgIiA8PCBwYXJhbUNvdW50IAorICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgIiBmcm9tICciIDw8IG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlw
ZSgpLmdldEJhc2ljU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICInIHRvICci
IDw8IHR5cGUtPmdldEJhc2ljU3RyaW5nKCkgPDwgIiciOworICAgICAgICBzdGQ6OnN0cmluZyBl
eHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiY29uc3RydWN0b3IiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgIHJlY292ZXIoKTsK
ICAgICB9CiAKQEAgLTEyOTMsMTUgKzEzMDIsMTMgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdFZlYwogICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CiAgICAgaWYg
KHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIEFTU0VSVCh1bmlvbkFycmF5KTsK
IAotICAgICAgICBpZiAoIXVuaW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91
bGQgbmV2ZXIgYmUgcmFpc2VkCi0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRD
b25zdFZlY3Rvck5vZGUgZnVuY3Rpb24iLCBsaW5lKTsKLSAgICAgICAgICAgIHJlY292ZXIoKTsK
LQorICAgICAgICBpZiAoIXVuaW9uQXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiBub2RlOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5
bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVs
c2UsIGl0cyBhbiBlcnJvcgotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRv
IHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qg
b2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CiAK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzExLDcgKzEzMTgsMTAgQEAgVEludGVybVR5cGVkKiBU
UGFyc2VDb250ZXh0OjphZGRDb25zdFZlYwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVs
ZHMubnVtOyBpKyspIHsKICAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCkpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAi
WyIsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9m
ZnNldHNbaV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9u
IG91dCBvZiByYW5nZSAnIiA8PCBmaWVsZHMub2Zmc2V0c1tpXSA8PCAiJyI7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAg
ICByZWNvdmVyKCk7CiAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CiAgICAgICAg
IH0KQEAgLTEzMzUsNyArMTM0NSwxMCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0TWF0CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBu
b2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAi
bWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9T
dHJlYW0gPDwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4
IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7
CiAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgaW5kZXggPSAwOwogICAgIH0KQEAgLTEzNDUs
NyArMTM1OCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXQKICAg
ICAgICAgIGludCBzaXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCk7CiAgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bigmdW5pb25BcnJheVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBs
aW5lKTsKICAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBp
bnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7
CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzY5LDcgKzEzODIsMTAgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycgogICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJB
cnJheW5lc3MoKTsKIAogICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlT
aXplKCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5IGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAgICBz
dGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgIGVy
cm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgcmVjb3Zlcigp
OwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfQpAQCAtMTM4MCw3ICsxMzk2LDcgQEAgVEludGVy
bVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycgogICAgICAgICAgQ29uc3RhbnRVbmlv
biogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CiAgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5p
b25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRU
eXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qg
b2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIiwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICByZWNv
dmVyKCk7CiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDE2LDcgKzE0MzIsNyBAQCBUSW50ZXJt
VHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RyCiAKICAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKKyAg
ICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVy
cm9yIik7CiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MzMs
NyArMTQ0OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGkKICAg
ICAvLyBUaGV5IGFyZW4ndCBhbGxvd2VkIGluIEdMU0wgZWl0aGVyLCBidXQgd2UgbmVlZCB0byBk
ZXRlY3QgdGhpcyBoZXJlCiAgICAgLy8gc28gd2UgZG9uJ3QgcmVseSBvbiB0aGUgR0xTTCBjb21w
aWxlciB0byBjYXRjaCBpdC4KICAgICBpZiAoc3RydWN0TmVzdGluZ0xldmVsID4gMSkgewotICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIkVtYmVkZGVkIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm90
IGFsbG93ZWQiLCAiIik7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiRW1iZWRkZWQgc3RydWN0
IGRlZmluaXRpb25zIGFyZSBub3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE0NTMsNyArMTQ2OSw3IEBAIGNvbnN0IGludCBrV2ViR0xNYXhTdHJ1Y3ROZXN0
aW5nID0gNDsKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhU
U291cmNlTG9jIGxpbmUsIGNvbnN0IFRUeXBlJiBmaWVsZFR5cGUpCiB7Ci0gICAgaWYgKHNoYWRl
clNwZWMgIT0gU0hfV0VCR0xfU1BFQykgeworICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFk
ZXJTcGVjKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDY0LDggKzE0
ODAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0aW5nRXJyb3JDaAogICAgIC8v
IFdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgc3RydWN0dXJlIGRlZmluaXRpb24gYXQgdGhpcyBwb2lu
dCwgc28gYWRkCiAgICAgLy8gb25lIHRvIHRoZSBmaWVsZCdzIHN0cnVjdCBuZXN0aW5nLgogICAg
IGlmICgxICsgZmllbGRUeXBlLmdldERlZXBlc3RTdHJ1Y3ROZXN0aW5nKCkgPiBrV2ViR0xNYXhT
dHJ1Y3ROZXN0aW5nKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiIiwgIlJlZmVyZW5jZSBv
ZiBzdHJ1Y3QgdHlwZSAlcyBleGNlZWRzIG1heGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgJWQiLAot
ICAgICAgICAgICAgICBmaWVsZFR5cGUuZ2V0VHlwZU5hbWUoKS5jX3N0cigpLCBrV2ViR0xNYXhT
dHJ1Y3ROZXN0aW5nKTsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFt
OworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgIlJlZmVyZW5jZSBvZiBzdHJ1Y3QgdHlwZSAi
IDw8IGZpZWxkVHlwZS5nZXRUeXBlTmFtZSgpIAorICAgICAgICAgICAgICAgICAgICAgICAgPDwg
IiBleGNlZWRzIG1heGltdW0gc3RydWN0IG5lc3Rpbmcgb2YgIiA8PCBrV2ViR0xNYXhTdHJ1Y3RO
ZXN0aW5nOworICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0u
c3RyKCk7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0ODIsMTA1ICsxNTAxLDE3IEBAIGlu
dCBQYVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIKICAgICBpZiAoKGNvdW50ID09
IDApIHx8IChzdHJpbmcgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgLy8gc2V0
dXAgcHJlcHJvY2Vzc29yLgotICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCi0gICAgICAgIHJl
dHVybiAxOwotICAgIERlZmluZUV4dGVuc2lvbk1hY3Jvcyhjb250ZXh0LT5leHRlbnNpb25CZWhh
dmlvcik7Ci0KICAgICBpZiAoZ2xzbGFuZ19pbml0aWFsaXplKGNvbnRleHQpKQogICAgICAgICBy
ZXR1cm4gMTsKIAotICAgIGdsc2xhbmdfc2Nhbihjb3VudCwgc3RyaW5nLCBsZW5ndGgsIGNvbnRl
eHQpOwotICAgIGludCBlcnJvciA9IGdsc2xhbmdfcGFyc2UoY29udGV4dCk7CisgICAgaW50IGVy
cm9yID0gZ2xzbGFuZ19zY2FuKGNvdW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAg
aWYgKCFlcnJvcikKKyAgICAgICAgZXJyb3IgPSBnbHNsYW5nX3BhcnNlKGNvbnRleHQpOwogCiAg
ICAgZ2xzbGFuZ19maW5hbGl6ZShjb250ZXh0KTsKLSAgICBGaW5hbGl6ZVByZXByb2Nlc3Nvcigp
OwotICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRleHQtPm51bUVycm9ycyA9PSAwKSA/
IDAgOiAxOwotfQotCi1PU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lO
VkFMSURfVExTX0lOREVYOwotCi1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpCi17
Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVY
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTog
UGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KIAotICAgIC8vCi0gICAgLy8gQWxsb2NhdGUgYSBUTFMgaW5kZXguCi0gICAgLy8K
LSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICAK
LSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQ
YXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJlZVBhcnNlQ29udGV4dElu
ZGV4KCkKLXsKLSAgICBPU19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleDsKLQotICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6
IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9U
TFNfSU5ERVg7Ci0KLSAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7Ci19Ci0K
LWJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2Vy
dCgwICYmICJJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5k
ZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVh
ZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkp
OwotICAgIGlmIChscFBhcnNlQ29udGV4dCAhPSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJ
bml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRh
bGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJz
ZUNvbnRleHQgKmxwVGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkUGFyc2VDb250ZXh0KCk7Ci0gICAg
aWYgKGxwVGhyZWFkRGF0YSA9PSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXpl
R2xvYmFsUGFyc2VDb250ZXh0KCk6IFVuYWJsZSB0byBjcmVhdGUgdGhyZWFkIHBhcnNlIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGxwVGhyZWFkRGF0YS0+
bHBHbG9iYWxQYXJzZUNvbnRleHQgPSAwOwotICAgIE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4LCBscFRocmVhZERhdGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRnJlZVBhcnNlQ29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFy
c2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFy
c2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNW
YWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotICAgIGlmIChscFBhcnNlQ29udGV4dCkK
LSAgICAgICAgZGVsZXRlIGxwUGFyc2VDb250ZXh0OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6IDE7
CiB9CiAKLVRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotewot
ICAgIC8vCi0gICAgLy8gTWluaW1hbCBlcnJvciBjaGVja2luZyBmb3Igc3BlZWQKLSAgICAvLwog
Ci0gICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxU
VGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4KSk7Ci0KLSAgICByZXR1cm4gbHBQYXJzZUNvbnRleHQtPmxwR2xvYmFsUGFyc2VDb250ZXh0
OwotfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYsOCAr
NiwxMCBAQAogI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KICNkZWZpbmUgX1BBUlNF
Ul9IRUxQRVJfSU5DTFVERURfCiAKLSNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlv
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRp
YXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3Iu
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5
bWJvbFRhYmxlLmgiCiAKQEAgLTE4LDEzICsyMCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsK
ICAgICBpbnQgY29sOwogfTsKIAotc3RydWN0IFRQcmFnbWEgewotICAgIFRQcmFnbWEoYm9vbCBv
LCBib29sIGQpIDogb3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQotICAgIGJvb2wgb3B0aW1pemU7
Ci0gICAgYm9vbCBkZWJ1ZzsKLSAgICBUUHJhZ21hVGFibGUgcHJhZ21hVGFibGU7Ci19OwotCiAv
LwogLy8gVGhlIGZvbGxvd2luZyBhcmUgZXh0cmEgdmFyaWFibGVzIG5lZWRlZCBkdXJpbmcgcGFy
c2luZywgZ3JvdXBlZCB0b2dldGhlciBzbwogLy8gdGhleSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBw
YXJzZXIgd2l0aG91dCBuZWVkaW5nIGEgZ2xvYmFsLgpAQCAtMzMsOCArMjgsNiBAQCBzdHJ1Y3Qg
VFBhcnNlQ29udGV4dCB7CiAgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIFNoU2hhZGVyVHlw
ZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgaW50IG9wdGlvbnMsIGJvb2wgY2hlY2tzUHJlY0Vy
cm9ycywgY29uc3QgY2hhciogc291cmNlUGF0aCwgVEluZm9TaW5rJiBpcykgOgogICAgICAgICAg
ICAgaW50ZXJtZWRpYXRlKGludGVybSksCiAgICAgICAgICAgICBzeW1ib2xUYWJsZShzeW10KSwK
LSAgICAgICAgICAgIGV4dGVuc2lvbkJlaGF2aW9yKGV4dCksCi0gICAgICAgICAgICBpbmZvU2lu
ayhpcyksCiAgICAgICAgICAgICBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgICAgICAgc2hhZGVy
U3BlYyhzcGVjKSwKICAgICAgICAgICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLApAQCAtNDgs
MTIgKzQxLDEyIEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRG
dW5jdGlvblR5cGUoTlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxz
ZSksCiAgICAgICAgICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyks
Ci0gICAgICAgICAgICBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSwKKyAgICAgICAgICAgIGRp
YWdub3N0aWNzKGlzKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9z
dGljcyksCisgICAgICAgICAgICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZl
SGFuZGxlciksCiAgICAgICAgICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRp
YXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAg
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3
aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcjsgIC8vIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQg
ZXh0ZW5zaW9ucyBhbmQgY3VycmVudCBiZWhhdmlvci4KLSAgICBUSW5mb1NpbmsmIGluZm9TaW5r
OwogICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlOyAgICAgICAgICAgICAgLy8gdmVydGV4IG9y
IGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVy
U3BlYyBzaGFkZXJTcGVjOyAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRp
b24gY29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KICAgICBpbnQgY29tcGls
ZU9wdGlvbnM7CkBAIC02NywxNSArNjAsMTkgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAg
IGNvbnN0IFRUeXBlKiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhlIHJldHVybiB0eXBlIG9m
IHRoZSBmdW5jdGlvbiB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIGJvb2wgZnVu
Y3Rpb25SZXR1cm5zVmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lkIGZ1bmN0aW9uIGhhcyBh
IHJldHVybgogICAgIGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3JzOyAgLy8gdHJ1ZSBpZiBhbiBl
cnJvciB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aG91
dCBwcmVjaXNpb24sIGV4cGxpY2l0IG9yIGltcGxpY2l0LgotICAgIHN0cnVjdCBUUHJhZ21hIGNv
bnRleHRQcmFnbWE7CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIGJvb2wgQWZ0ZXJFT0Y7
CisgICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOworICAgIFREaXJlY3RpdmVIYW5kbGVyIGRp
cmVjdGl2ZUhhbmRsZXI7CisgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAg
dm9pZCogc2Nhbm5lcjsKIAorICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJldHVybiBkaWFn
bm9zdGljcy5pbmZvU2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29u
c3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGV4dHJhSW5mbz0iIik7CiAgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBj
aGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAotICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGV4dHJhSW5mbz0iIik7CisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyKiBzdHIpOwogICAgIHZv
aWQgcmVjb3ZlcigpOwogCiAgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5n
JiwgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CkBAIC0xMDUsNyArMTAy
LDEzIEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNr
KGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVh
bGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUp
OwogICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYp
OworCisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNv
bnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAg
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKKyAgICB2b2lk
IGhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShpbnQgbGluZSwgY29uc3QgY2hhciogZXh0TmFtZSwg
Y29uc3QgY2hhciogYmVoYXZpb3IpOworCisgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29u
c3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQorICAgIHZvaWQgaGFuZGxl
UHJhZ21hRGlyZWN0aXZlKGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2
YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9v
bCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKQEAgLTEzNSwx
MyArMTM4LDQgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogaW50IFBhUGFyc2VTdHJpbmdzKGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwK
ICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAotdHlwZWRlZiBU
UGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4dGVybiBUUGFyc2VDb250ZXh0
UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVmaW5lIEdsb2JhbFBhcnNlQ29u
dGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFy
c2VDb250ZXh0UmVjCi17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7
Ci19IFRUaHJlYWRQYXJzZUNvbnRleHQ7Ci0KICNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNM
VURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiAr
MTEsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKICNp
bmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIApAQCAtMTU4LDEwICsxNTksMTAgQEAgdm9p
ZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbgogCiAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBo
ZWxwZnVsLgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAgICAgICBzcHJpbnRmKGFzc2Vy
dE1zZywgIlBvb2xBbGxvYzogRGFtYWdlICVzICVJdSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxu
IiwKKyAgICAgICAgICAgIHNucHJpbnRmKGFzc2VydE1zZywgc2l6ZW9mKGFzc2VydE1zZyksICJQ
b29sQWxsb2M6IERhbWFnZSAlcyAlSXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCiAgICAg
ICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CiAjZWxzZQotICAgICAgICAg
ICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAlenUgYnl0ZSBhbGxv
Y2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICBzbnByaW50Zihhc3NlcnRNc2csIHNpemVv
Zihhc3NlcnRNc2cpLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXp1IGJ5dGUgYWxsb2NhdGlvbiBh
dCAweCVwXG4iLAogICAgICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOwog
I2VuZGlmCiAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3Vh
cmQgYmxvY2siKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
cmFnbWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUHJhZ21hLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUHJhZ21hLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSQUdNQV9IXworI2RlZmluZSBDT01QSUxFUl9QUkFH
TUFfSF8KKworc3RydWN0IFRQcmFnbWEgeworICAgIC8vIEJ5IGRlZmF1bHQgb3B0aW1pemF0aW9u
IGlzIHR1cm5lZCBvbiBhbmQgZGVidWcgaXMgdHVybmVkIG9mZi4KKyAgICBUUHJhZ21hKCkgOiBv
cHRpbWl6ZSh0cnVlKSwgZGVidWcoZmFsc2UpIHsgfQorICAgIFRQcmFnbWEoYm9vbCBvLCBib29s
IGQpIDogb3B0aW1pemUobyksIGRlYnVnKGQpIHsgfQorCisgICAgYm9vbCBvcHRpbWl6ZTsKKyAg
ICBib29sIGRlYnVnOworfTsKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSQUdNQV9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1
bmN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvUmVuYW1lRnVuY3Rpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUkVOQU1FX0ZVTkNUSU9OCisjZGVmaW5lIENP
TVBJTEVSX1JFTkFNRV9GVU5DVElPTgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCisKKy8vCisvLyBSZW5hbWVzIGEgZnVuY3Rpb24sIGluY2x1ZGluZyBpdHMgZGVjbGFyYXRp
b24gYW5kIGFueSBjYWxscyB0byBpdC4KKy8vCitjbGFzcyBSZW5hbWVGdW5jdGlvbiA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUmVuYW1lRnVuY3Rpb24oY29uc3Qg
VFN0cmluZyYgb2xkRnVuY3Rpb25OYW1lLCBjb25zdCBUU3RyaW5nJiBuZXdGdW5jdGlvbk5hbWUp
CisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAsIG1PbGRG
dW5jdGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQorICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdG
dW5jdGlvbk5hbWUpIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQg
dmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgeworICAgICAgICBUT3BlcmF0b3Ig
b3AgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBpZiAoKG9wID09IEVPcEZ1bmN0aW9uIHx8IG9w
ID09IEVPcEZ1bmN0aW9uQ2FsbCkgJiYgbm9kZS0+Z2V0TmFtZSgpID09IG1PbGRGdW5jdGlvbk5h
bWUpCisgICAgICAgICAgICBub2RlLT5zZXROYW1lKG1OZXdGdW5jdGlvbk5hbWUpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVFN0cmluZyYgbU9s
ZEZ1bmN0aW9uTmFtZTsKKyAgICBjb25zdCBUU3RyaW5nJiBtTmV3RnVuY3Rpb25OYW1lOworfTsK
KworI2VuZGlmICAvLyBDT01QSUxFUl9SRU5BTUVfRlVOQ1RJT04KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsMTMgQEAKIAogY2xhc3MgTG9uZ05hbWVNYXA7CiBj
bGFzcyBUQ29tcGlsZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoOworCisvLworLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBXZWJHTCBz
cGVjLAorLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKy8vCitib29sIGlzV2ViR0xCYXNl
ZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0
byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTcwLDYgKzc3LDggQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJuIHRydWUg
aWYgZnVuY3Rpb24gcmVjdXJzaW9uIGlzIGRldGVjdGVkLgogICAgIGJvb2wgZGV0ZWN0UmVjdXJz
aW9uKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVy
bWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KKyAgICB2b2lk
IHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQogICAgIC8v
IGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBBLgogICAg
IGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CkBAIC03OSw2ICs4
OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJt
Tm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAgIHZpcnR1
YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBw
cmV2ZW50IHRpbWluZyBhdHRhY2tzLgorICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9u
cyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBvdXRwdXRHcmFwaCk7CisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXJzLgorICAgIGJvb2wgZW5mb3Jj
ZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5k
ZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAKKyAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlv
bnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRoZSBpbnB1dCB2YWx1ZXMuCisgICAgYm9vbCBl
bmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lH
cmFwaCYgZ3JhcGgpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGggZGVmYXVs
dCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJl
aGF2aW9yKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsMTIgKzcyLDE0IEBAIHN0YXRpYyB2b2lkIGdldFZhcmlhYmxlSW5mbyhTaFNo
YWRlckluZm8KICAgICBpbnQgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCA9IDEgKyBNQVhf
U1lNQk9MX05BTUVfTEVOOwogICAgIEFTU0VSVChjaGVja0FjdGl2ZVVuaWZvcm1BbmRBdHRyaWJN
YXhMZW5ndGhzKGhhbmRsZSwgYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCkpOwogICAgIHN0
cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIGFjdGl2ZVVuaWZvcm1BbmRBdHRyaWJM
ZW5ndGgpOworICAgIG5hbWVbYWN0aXZlVW5pZm9ybUFuZEF0dHJpYkxlbmd0aCAtIDFdID0gMDsK
ICAgICBpZiAobWFwcGVkTmFtZSkgewogICAgICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0
aGF0IHF1ZXJpZWQgYnkKICAgICAgICAgLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCBpbiBT
aEdldEluZm8sIGJlbG93LgogICAgICAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVu
Z3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBl
ZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsK
KyAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Niw5ICsxNiwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKICNpbmNs
dWRlIDxzdGRpby5oPgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKwogLy8KIC8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBs
YWNlIHRvIGxpdmUuCiAvLwpAQCAtNTYsNyArNTcsNyBAQCB2b2lkIFRUeXBlOjpidWlsZE1hbmds
ZWROYW1lKFRTdHJpbmcmIG1hCiAgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4o
JzAnICsgZ2V0Tm9taW5hbFNpemUoKSk7CiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAgICBj
aGFyIGJ1ZlsyMF07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJheVNpemUpOworICAg
ICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNpemUpOwogICAgICAg
ICBtYW5nbGVkTmFtZSArPSAnWyc7CiAgICAgICAgIG1hbmdsZWROYW1lICs9IGJ1ZjsKICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ10nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxMjI3
MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCiAKIFRyYW5zbGF0
b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNw
ZWMpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2VsZWN0LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFVuZm9sZFNlbGVjdCBpcyBhbiBB
U1QgdHJhdmVyc2VyIHRvIG91dHB1dCB0aGUgc2VsZWN0IG9wZXJhdG9yID86IGFzIGlmLWVsc2Ug
c3RhdGVtZW50cwotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRI
TFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBh
cnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChj
b250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVtcG9yYXJ5SW5kZXgg
PSAwOwotfQotCi12b2lkIFVuZm9sZFNlbGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUp
Ci17Ci0gICAgaW50IHJld2luZEluZGV4ID0gbVRlbXBvcmFyeUluZGV4OwotICAgIG5vZGUtPnRy
YXZlcnNlKHRoaXMpOwotICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OwotfQotCi1i
b29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24gKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdl
dEJvZHlTdHJlYW0oKTsKLQotICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCi0g
ICAgewotICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleDsKLQotICAgICAgICBvdXQgPDwg
bU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHMiIDw8IGkgPDwg
IjtcbiI7Ci0KLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwot
ICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0
aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAg
ICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7Ci0gICAg
ICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8
ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7
Ci0gICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0g
ICAgICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICJlbHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbVRlbXBvcmFyeUluZGV4
ID0gaSArIDE7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7
Ci0gICAgICAgIG91dCA8PCAiICAgIHMiIDw8IGkgPDwgIiA9ICI7Ci0gICAgICAgIG1UZW1wb3Jh
cnlJbmRleCA9IGkgKyAxOwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKLSAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxu
IjsKLQotICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wICpub2RlKQotewotICAgIGludCByZXdpbmRJbmRleCA9IG1UZW1wb3JhcnlJ
bmRleDsKLQotICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAgewotICAgICAgICBub2RlLT5n
ZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Z2V0
Q29uZGl0aW9uKCkpCi0gICAgewotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICB7
Ci0gICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfQot
Ci0gICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5kZXg7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWludCBVbmZvbGRTZWxlY3Q6OmdldE5leHRUZW1wb3JhcnlJbmRleCgpCi17Ci0gICAg
cmV0dXJuIG1UZW1wb3JhcnlJbmRleCsrOwotfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAkocmV2aXNpb24gMTIy
NzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0v
LyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBv
cGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
VU5GT0xEU0VMRUNUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwotCi0jaW5j
bHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBPdXRwdXRITFNMOwotCi1jbGFzcyBV
bmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAg
VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhM
U0wpOwotCi0gICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7Ci0gICAgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7Ci0gICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKTsKLQotICAgIGlu
dCBnZXROZXh0VGVtcG9yYXJ5SW5kZXgoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgVFBhcnNlQ29u
dGV4dCAmbUNvbnRleHQ7Ci0gICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7Ci0KLSAg
ICBpbnQgbVRlbXBvcmFyeUluZGV4OwotfTsKLX0KLQotI2VuZGlmICAgLy8gQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2hvcnRDaXJjdWl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8v
IFVuZm9sZFNob3J0Q2lyY3VpdCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIG91dHB1dCBzaG9ydC1j
aXJjdWl0aW5nIG9wZXJhdG9ycyBhcyBpZi1lbHNlIHN0YXRlbWVudHMuCisvLyBUaGUgcmVzdWx0
cyBhcmUgYXNzaWduZWQgdG8gcyMgdGVtcG9yYXJpZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBt
YWluIHRyYW5zbGF0b3IgaW5zdGVhZCBvZgorLy8gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisKKyNpbmNsdWRl
ICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIK
KworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTaG9ydENpcmN1aXQ6OlVuZm9sZFNob3J0Q2lyY3Vp
dChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250
ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJ
bmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0Ojp0cmF2ZXJzZShUSW50ZXJt
Tm9kZSAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9yYXJ5SW5kZXg7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gcmV3aW5kSW5k
ZXg7Cit9CisKK2Jvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0
cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQor
ICAgIHsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAvLyAieCB8fCB5IiBpcyBl
cXVpdmFsZW50IHRvICJ4ID8gdHJ1ZSA6IHkiLCB3aGljaCB1bmZvbGRzIHRvICJib29sIHM7IGlm
KHgpIHMgPSB0cnVlOyBlbHNlIHMgPSB5OyIsCisgICAgICAgIC8vIGFuZCB0aGVuIGZ1cnRoZXIg
c2ltcGxpZmllcyBkb3duIHRvICJib29sIHMgPSB4OyBpZighcykgcyA9IHk7Ii4KKyAgICAgICAg
eworICAgICAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgICAgIG91
dCA8PCAiYm9vbCBzIiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgICAgICBvdXQgPDwgIntcbiI7
CisKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9k
ZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAicyIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgICAg
ICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICBvdXQgPDwgImlmKCFzIiA8PCBpIDw8ICIpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1U
ZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJh
dmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAvLyAieCAmJiB5IiBpcyBl
cXVpdmFsZW50IHRvICJ4ID8geSA6IGZhbHNlIiwgd2hpY2ggdW5mb2xkcyB0byAiYm9vbCBzOyBp
Zih4KSBzID0geTsgZWxzZSBzID0gZmFsc2U7IiwKKyAgICAgICAgLy8gYW5kIHRoZW4gZnVydGhl
ciBzaW1wbGlmaWVzIGRvd24gdG8gImJvb2wgcyA9IHg7IGlmKHMpIHMgPSB5OyIuCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4OworCisgICAgICAgICAgICBv
dXQgPDwgImJvb2wgcyIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICAgICAgb3V0IDw8ICJ7XG4i
OworCisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIG5v
ZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwgInMiIDw8
IGkgPDwgIiA9ICI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXggPSBpICsgMTsKKyAgICAg
ICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAg
ICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgb3V0IDw8ICJpZihzIiA8PCBpIDw8ICIpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBtVGVtcG9yYXJ5SW5kZXgg
PSBpICsgMTsKKyAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgb3V0IDw8ICIgICAgcyIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgICAgIG1U
ZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJh
dmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAg
ICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFVuZm9sZFNob3J0Q2ly
Y3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUp
Cit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0o
KTsKKworICAgIC8vIFVuZm9sZCAiYiA/IHggOiB5IiBpbnRvICJ0eXBlIHM7IGlmKGIpIHMgPSB4
OyBlbHNlIHMgPSB5OyIKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAg
IHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXg7CisKKyAgICAgICAgb3V0IDw8IG1P
dXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiBzIiA8PCBpIDw8ICI7
XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAg
ICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlv
bigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOworICAgICAg
ICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAi
ICAgIHMiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwor
ICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAg
ICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAi
ZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9
IGkgKyAxOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICBvdXQgPDwgIiAgICBzIiA8PCBpIDw8ICIgPSAiOworICAgICAgICBtVGVtcG9yYXJ5
SW5kZXggPSBpICsgMTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSht
T3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7
CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRMb29wKFZpc2l0IHZp
c2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpbnQgcmV3aW5kSW5kZXggPSBtVGVtcG9y
YXJ5SW5kZXg7CisKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgbm9k
ZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUt
PmdldENvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisg
ICAgeworICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAg
IH0KKworICAgIG1UZW1wb3JhcnlJbmRleCA9IHJld2luZEluZGV4OworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbnQgVW5mb2xkU2hvcnRDaXJjdWl0OjpnZXROZXh0VGVtcG9yYXJ5SW5kZXgo
KQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXgrKzsKK30KK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRD
aXJjdWl0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisvLyBVbmZvbGRTaG9ydENpcmN1aXQgaXMgYW4gQVNUIHRyYXZl
cnNlciB0byBvdXRwdXQgc2hvcnQtY2lyY3VpdGluZyBvcGVyYXRvcnMgYXMgaWYtZWxzZSBzdGF0
ZW1lbnRzCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNIT1JUQ0lSQ1VJVF9IXworI2Rl
ZmluZSBDT01QSUxFUl9VTkZPTERTSE9SVENJUkNVSVRfSF8KKworI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25h
bWVzcGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2hvcnRDaXJj
dWl0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNo
b3J0Q2lyY3VpdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNM
KTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKyAgICBib29sIHZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldE5l
eHRUZW1wb3JhcnlJbmRleCgpOworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZt
Q29udGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBt
VGVtcG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTSE9S
VENJUkNVSVRfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMjcz
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgogCiBuYW1lc3BhY2UgewpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShyZXZpc2lvbiAx
MjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNv
bnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgogCiBzdGF0aWMgY29u
c3QgaW50IGtUcmFjZUJ1ZmZlckxlbiA9IDEwMjQ7CkBAIC0yOCw3ICsyOSw3IEBAIHZvaWQgVHJh
Y2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKICAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1Ry
YWNlQnVmZmVyTGVuLCBmb3JtYXQsIGFyZ3MpOwogICAgICAgICB2YV9lbmQoYXJncyk7CiAKLSAg
ICAgICAgcGFyc2VDb250ZXh0LT5pbmZvU2luay5kZWJ1ZyA8PCBidWY7CisgICAgICAgIHBhcnNl
Q29udGV4dC0+dHJhY2UoYnVmKTsKICAgICB9CiB9CiB9ICAvLyBleHRlcm4gIkMiCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgJKHJldmlz
aW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTgsOSArOCw5IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0
OwogZXh0ZXJuIGludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7
CiBleHRlcm4gaW50IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAK
LWV4dGVybiB2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGxlbmd0aFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIGV4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xh
CiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsNiArMzgsNyBAQCBX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAlewogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKICNpbmNsdWRlICJjb21w
aWxlci91dGlsLmgiCiAjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMTU5LDYgKzE2MCw3
IEBAIE8gICAgICAgICAgIFswLTddCiAiZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KICJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQogImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KIAogImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
QEAgLTE2Niw2ICsxNjgsNyBAQCBPICAgICAgICAgICBbMC03XQogImhhbGYiICAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZml4ZWQiICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN1cGVycCIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKICJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQogIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CkBAIC0xNzMsMTIgKzE3NiwyMSBAQCBPICAgICAgICAgICBbMC03XQog
Imh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiaHZl
YzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJodmVjNCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogImR2ZWMyIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAiZHZlYzMiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KICJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisiZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKyJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCisic2FtcGxlcjFEIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJzYW1wbGVyM0QiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCisic2FtcGxlcjFEU2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJzYW1wbGVyMkRTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCisic2FtcGxlcjNEUmVjdCIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CiAKICJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQogImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CkBA
IC0xOTMsNyArMjA1LDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogMFt4WF17SH0rICAgICAgICAg
eyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFO
VCk7IH0KIDB7T30rICAgICAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQs
IDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we0R9KyAgICAgICAgICAgICB7IGNvbnRl
eHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwg
IiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KKzB7RH0rICAgICAgICAgICAgIHsg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQp
OyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KIHtEfSsgICAgICAgICAgICAgIHsgeXls
dmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9
CiAKIHtEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CkBAIC0yNjAsMTAg
KzI3MiwxNSBAQCBPICAgICAgICAgICBbMC03XQogCiAlJQogCisjaWYgIUFOR0xFX1VTRV9ORVdf
UFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCiAj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAorZXh0ZXJuIGlu
dCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7
CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFs
dWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFyc2VDb250ZXh0KiBj
b250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1Y3QgeXlndXRzX3Qq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpAQCAtMjcyLDI2ICsy
ODksMjYgQEAgZXh0ZXJuICJDIiB7CiB2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1z
ZykKIHsKICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+aW5mb1NpbmsuZGVi
dWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKKyAgICBjb250ZXh0LT50cmFjZShtc2cpOwog
fQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIi
LCAiIik7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7CiB9CiAKIHZv
aWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBTRVRVUF9DT05URVhU
KGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBj
b250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7CiAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogfQogCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3ZvaWQgQ1BQRXJyb3JU
b0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAg
ICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiB9CiAKQEAg
LTM0Niw4OCArMzYzLDE1IEBAIHZvaWQgRGVjTGluZU51bWJlcigpCiB2b2lkIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQogewogICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6ZSIpKSB7Ci0gICAg
ICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJv
cHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigi
KSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAn
b3B0aW1pemUnIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAg
ICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNv
bnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBm
b3IgJ29wdGltaXplJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJh
Z21hIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFz
dHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQp
IHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBp
bmNvcnJlY3QiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNt
cCh0b2tlbnNbMl0sICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5k
ZWJ1ZyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikp
Ci0gICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZc
IiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNd
LCAiKSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRv
IGVuZCAnZGVidWcnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSNpZmRlZiBQUkFHTUFfVEFCTEUKLSAgICAgICAgLy8KLSAgICAgICAgLy8g
aW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCi0gICAgICAgIC8vIHVzZSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSB0byBzdG9yZSB0aGUg
aW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCi0gICAgICAgIC8vIEZvciBub3csIGp1c3QgaWdub3Jl
IHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlY29nbml6ZQotICAg
ICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxlbWVudGF0aW9uIGZvciBhIHByYWdt
YSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCi0gICAgICAgIC8vICNwcmFnbWEgcHJhZ21hbmFtZShw
cmFnbWF2YWx1ZSkKLSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgdGhlIGN1
cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21hIG5hbWUgaW4gcHJhZ21hVGFibGUu
Ci0gICAgICAgIC8vICAgICAgICAKLSAgICAgICAgaWYgKG51bVRva2VucyA9PSA0ICYmICFzdHJj
bXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7ICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKLSAgICAgICAgICAg
IFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFU
YWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBw
cmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vu
c1syXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJhZ21hVGFibGVb
IHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOwotICAgICAgICAgICAgfSAgICAgICAgCi0gICAgICAg
IH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYg
cHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5w
cmFnbWFUYWJsZTsKLSAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKLSAg
ICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7Ci0g
ICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzFdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gUFJBR01BX1RBQkxFCi0gICAgfQorCisgICAg
aWYgKG51bVRva2VucyAhPSA0KSByZXR1cm47CisgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIo
IikgIT0gMCkgcmV0dXJuOworICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJl
dHVybjsKKworICAgIGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9r
ZW5zWzBdLCB0b2tlbnNbMl0pOwogfQogCi12b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3Zv
aWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5nKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3Bw
KTsKICAgICBUU3RyaW5nIHN0clNyYzsKQEAgLTQ0OSw3MSArMzkzLDMzIEBAIHZvaWQgUmVzZXRU
U3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9ICIiOwogfQogCi1UQmVoYXZp
b3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFzdHJjbXAo
InJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhSZXF1aXJlOwotICAgIGVs
c2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVCaEVu
YWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQotICAgICAg
ICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZp
b3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBz
dXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Ci0gICAgfSAg
ICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0
TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwot
ICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9yKTsKLSAgICBU
TWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOwotICAgIFRTdHJpbmcgbXNn
OwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24KLSAgICBpZiAo
IXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVC
aFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7Ci0gICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2Vu
YWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVn
aW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQot
ICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgICAgICB9ICAg
ICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVo
YXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gY29udGV4
dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZp
b3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMg
bm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAg
ICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJl
eHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNn
LmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9
IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3Rp
dmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0gIC8vIGV4dGVybiAiQyIKKyNl
bmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKIGludCBzdHJpbmdfaW5wdXQo
Y2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBs
ZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJl
Y2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworICAgIGludCBsZW4gPSAwOwogCi0gICAgYnVm
W2xlbl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJP
Q0VTU09SCisgICAgcHA6OlRva2VuIHRva2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lcikt
PnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpU
b2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAm
JiAobGVuIDwgbWF4X3NpemUpKQorICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0
cigpLCBsZW4pOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRp
b24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5lcik7CisjZWxzZQorICAgIGxl
biA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKKyNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19Q
UkVQUk9DRVNTT1IKKworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNlIGlmIChsZW4gPiAwKQor
ICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47CiB9CiAKIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAtNTQ0LDkgKzQ1MCw5IEBAIHZvaWQgeXll
cnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb24KICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwogCiAgICAgaWYgKGNvbnRl
eHQtPkFmdGVyRU9GKSB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24s
ICJ1bmV4cGVjdGVkIEVPRiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4
dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCk7CiAgICAgfQogICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKIH0KQEAgLTU2NSwyMiArNDcxLDQzIEBAIGludCBnbHNsYW5nX2ZpbmFsaXplKFRQ
YXJzZUNvbnRleHQqIGNvbnQKICAgICBpZiAoc2Nhbm5lciA9PSBOVUxMKSByZXR1cm4gMDsKICAg
ICAKICAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKLSAgICByZXR1cm4geXlsZXhfZGVzdHJv
eShzY2FubmVyKTsKKyAgICB5eWxleF9kZXN0cm95KHNjYW5uZXIpOworCisjaWYgIUFOR0xFX1VT
RV9ORVdfUFJFUFJPQ0VTU09SCisgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKyNlbmRpZgor
ICAgIHJldHVybiAwOwogfQogCi12b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAg
ICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CitpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAg
ICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIHl5cmVzdGFydChOVUxMLCBj
b250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKDAsIDEp
LCBjb250ZXh0LT5zY2FubmVyKTsKICAgICBjb250ZXh0LT5BZnRlckVPRiA9IGZhbHNlOwotICAg
IAotICAgIC8vIEluaXQgcHJlcHJvY2Vzc29yLgorCisgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9j
ZXNzb3IuCisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICBpZiAoIWNvbnRleHQt
PnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisgICAgICAgIHJldHVy
biAxOworI2Vsc2UKKyAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQorICAgICAgICByZXR1cm4g
MTsKICAgICBjcHAtPnBDID0gY29udGV4dDsKLSAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOwotICAg
IGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsK
LSAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CiAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1l
bnQgPSAwOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7CisgICAgaWYgKEluaXRTY2Fu
bmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gMTsK
KyNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKworICAgIC8vIERlZmluZSBl
eHRlbnNpb24gbWFjcm9zLgorICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZp
b3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOworICAgIGZvciAoVEV4dGVuc2lvbkJl
aGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgeworI2lmIEFOR0xFX1VTRV9O
RVdfUFJFUFJPQ0VTU09SCisgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVN
YWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyNlbHNlCisgICAgICAgIFByZWRlZmluZUlu
dE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2VuZGlmCisgICAgfQorICAgIHJldHVy
biAwOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nLnkJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAg
V0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbAogI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKKyNk
ZWZpbmUgWVlFTkFCTEVfTkxTIDAKKyNkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKKwogI2Rl
ZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCiAlfQogCkBAIC04NCwyMSArODcsMjEg
QEAgZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZQogI2RlZmluZSBGUkFH
X1ZFUlRfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hf
RlJBR01FTlRfU0hBREVSICYmICBcCiAgICAgICAgIGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hf
VkVSVEVYX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAg
ICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFk
ZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9
ICBcCiB9CiAKICNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+
ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIp
OyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICBcCiAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwg
IiIpOyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVu
dCBzaGFkZXJzIG9ubHkgIiwgUyk7ICBcCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
ICAgICB9ICBcCiB9CkBAIC0xNjcsNyArMTcwLDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAg
ICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwg
InVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBF
YnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CkBAIC0xNzYsNyArMTc5LDcgQEAgdmFyaWFibGVf
aWRlbnRpZmllcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlm
aWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICgh
IHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVk
IiwgJDEuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNv
bnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CkBAIC0yMDYsNyArMjA5LDcgQEAgcHJpbWFyeV9leHBy
ZXNzaW9uCiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCiAgICAg
ICAgIC8vCiAgICAgICAgIGlmIChhYnMoJDEuaSkgPj0gKDEgPDwgMTYpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAi
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNv
bnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKQEAgLTIzNSw5ICsyMzgsOSBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB8
IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hU
X0JSQUNLRVQgewogICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkgJiYgISQxLT5pc01hdHJpeCgp
ICYmICEkMS0+aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5v
ZGUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2Yg
J1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5
LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgp
LmNfc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwg
b3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJp
eCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBAIC0y
NTQsNyArMjU3LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAg
ICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEtPmlzTWF0cml4KCkpICYmICQxLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVu
aW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEkMS0+aXNBcnJheSgpICkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiZmllbGQg
c2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAg
ZXh0cmFJbmZvU3RyZWFtIDw8ICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8ICQz
LT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0
KCkgPDwgIiciOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBl
eHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7CkBAIC0yNjcsNyArMjczLDEwIEBAIHBv
c3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdldFR5cGUoKS5nZXRBcnJh
eVNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0
cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFy
cmF5IGluZGV4IG91dCBvZiByYW5nZSAnIiA8PCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwg
IiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxOSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
IH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKICAgICAg
ICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxp
bmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVy
YXRvciB0byBhbiBhcnJheSIsICIuIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KIApAQCAtMzU1LDcgKzM2NCw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9u
LXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGlt
cGxlbWVudGVkIHlldCIsICIuIik7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CkBA
IC0zNzMsNyArMzgyLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICBib29sIGZp
ZWxkRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0g
JDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGlmIChmaWVsZHMgPT0gMCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFz
IG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwg
RXJyb3IiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MDUsMTMgKzQxNCwxMyBA
QCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBl
KCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm8gc3VjaCBm
aWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMg
c3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmlu
Zy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBm
aWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBs
ZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICB9CkBAIC01MDAsOSAr
NTA5LDEwIEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCQx
LmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5
IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQq
PigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9k
ZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsIGV4
dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpA
QCAtNTI2LDcgKzUzNiw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAg
IHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJ
bk91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25z
dGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRl
cnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5u
b3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBA
IC01NTEsNyArNTYxLDcgQEAgZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKICAgICAgICAgJCQgPSAk
MTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2Vu
ZXJpYyB7Ci0gICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qg
c3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1l
dGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CkBAIC02NDcsNyArNjU3LDcgQEAgZnVuY3Rpb25f
aWRlbnRpZmllcgogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3Ry
aW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkp
OwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAk
MS50eXBlID0gRWJ0RmxvYXQ7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9h
dDsKQEAgLTEwMDcsMTIgKzEwMTcsMTIgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIFRG
dW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJl
dHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRo
ZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygp
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllcigpICE9ICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgJDEtPmdl
dFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0
IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlw
ZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTA2MCw3ICsx
MDcwLDcgQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwogICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4g
YXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUg
ZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlwZTsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTEwNzQsNyArMTA4NCw3IEBAIGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMK
IGZ1bmN0aW9uX2hlYWRlcgogICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBM
RUZUX1BBUkVOIHsKICAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEu
cXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVy
biIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVy
IGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBAIC0xMDk1LDcgKzExMDUsNyBAQCBwYXJhbWV0
ZXJfZGVjbGFyYXRvcgogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgOiB0eXBlX3NwZWNpZmllciBJ
REVOVElGSUVSIHsKICAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0Vm9pZCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwg
JDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCkBAIC0xMTkx
LDcgKzEyMDEsNyBAQCBpbml0X2RlY2xhcmF0b3JfbGlzdAogICAgIHwgaW5pdF9kZWNsYXJhdG9y
X2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0
SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQzLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJp
YW50IiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMy5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIs
ICQzLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KIApAQCAtMTI5OCw3ICsxMzA4LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKICAgICB9CiAg
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9C
UkFDS0VUIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkg
ZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25z
IG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAKICAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpOwpA
QCAtMTM2NCw3ICsxMzc0LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgICQkLnR5cGUu
c2V0QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAkMi5saW5lKTsK
ICAgICAgICAgaWYgKCEkMi5zeW1ib2wpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJp
YW50IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMi5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIs
ICQyLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CkBAIC0xNDM4
LDcgKzE0NDgsNyBAQCBzaW5nbGVfZGVjbGFyYXRpb24KIC8vICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJp
bmcsICQxKTsKIC8vICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQk
LnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVk
ZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUg
cG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8vICAgICAgICB9CkBAIC0xNDUwLDI2ICsx
NDYwLDI2IEBAIGZ1bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAgICQkID0gJDE7CiAKICAgICAg
ICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
bm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5
Iik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS5zZXRB
cnJheShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBl
X3NwZWNpZmllciAgewogICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iiwg
IiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQi
LCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9
PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmll
cikpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAg
IGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlw
ZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBv
ciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQgPSAkMjsKQEAgLTE2NTQs
NyArMTY2NCw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgfQogICAgIHwgU0FNUExF
Ul9FWFRFUk5BTF9PRVMgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9u
KCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bnN1cHBvcnRlZCB0eXBl
IiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyRXh0ZXJuYWxPRVMi
LCAkMS5saW5lKTsKQEAgLTE2NjMsNyArMTY3Myw3IEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5
CiAgICAgfQogICAgIHwgU0FNUExFUjJEUkVDVCB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRS
ZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuc3VwcG9y
dGVkIHR5cGUiLCAic2FtcGxlcjJEUmVjdCIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkRSZWN0Iiwg
JDEubGluZSk7CkBAIC0xOTY2LDE0ICsxOTc2LDE0IEBAIGZvcl9yZXN0X3N0YXRlbWVudAoganVt
cF9zdGF0ZW1lbnQKICAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0
ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgQlJFQUsgU0VN
SUNPTE9OIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5
IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIik7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5saW5lKTsKQEAgLTE5
ODEsNyArMTk5MSw3IEBAIGp1bXBfc3RhdGVtZW50CiAgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsK
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwg
JDEubGluZSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAi
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE5ODksMTAgKzE5OTksMTAgQEAganVt
cF9zdGF0ZW1lbnQKICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNo
KEVPcFJldHVybiwgJDIsICQxLmxpbmUpOwogICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVy
bnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJu
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rp
b24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9IGVsc2UgaWYgKCooY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
JDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJu
IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJl
dHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIik7CiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDM3LDcgKzIwNDcsNyBAQCBm
dW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0
aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5
IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CkBAIC0yMDQ3LDcgKzIwNTcs
NyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChmdW5jdGlv
bi0+Z2V0TmFtZSgpID09ICJtYWluIikgewogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRQ
YXJhbUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewpAQCAtMjA3OSw3ICsyMDg5LDcgQEAgZnVuY3Rp
b25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3
aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRp
b24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXRO
YW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAgIH0K
QEAgLTIxMTYsOSArMjEyNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KIAogICAgICAgICAvLyBz
dG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90
aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1h
dGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVlCi0gICAgICAgICQkLT5nZXRB
c0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXpl
KTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRl
eHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFn
bWFUYWJsZShjb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICAgICAgJCQt
PmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKGNvbnRleHQtPnByYWdtYSgpLm9wdGltaXpl
KTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPnByYWdt
YSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoJDMgJiYgJDMtPmdldEFzQWdncmVnYXRlKCkpCiAg
ICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RW5kTGluZSgkMy0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0RW5kTGluZSgpKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAkocmV2aXNpb24gMTIyNzM4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3ICIuL2dsc2xhbmcubCIKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOTEsNiArMTkxLDExIEBAIHR5cGVkZWYgdm9p
ZCogeXlzY2FuX3Q7CiB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9T
VEFURTsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZ
X1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwog
I2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9G
SUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKQEAgLTIwNCw3ICsyMDksNyBAQCB0
eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFCiAgICAgICovCiAgICAgI2Rl
ZmluZSAgWVlfTEVTU19MSU5FTk8obikgXAogICAgICAgICAgICAgZG8geyBcCi0gICAgICAgICAg
ICAgICAgaW50IHl5bDtcCisgICAgICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDtcCiAgICAgICAg
ICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAogICAgICAgICAg
ICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKICAgICAgICAgICAgICAgICAg
ICAgICAgIC0teXlsaW5lbm87XApAQCAtMjI2LDExICsyMzEsNiBAQCB0eXBlZGVmIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFCiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywg
eXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJ
WkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlfc2l6
ZV90OwotI2VuZGlmCi0KICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmlu
ZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCkBAIC0y
NDgsNyArMjQ4LDcgQEAgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQogCS8qIE51bWJlciBvZiBjaGFy
YWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCiAJICogY2hhcmFj
dGVycy4KIAkgKi8KLQlpbnQgeXlfbl9jaGFyczsKKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKIAog
CS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRl
ZCBpdCwKIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZy
ZWUoKSBpdCB0bwpAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVy
IChZWV9CVUZGRVJfU1QKIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpi
YXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIFlZX0JVRkZFUl9TVEFU
RSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMs
aW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
eXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIAogdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
IHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7
CkBAIC0zODMsOCArMzgzLDggQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3Qg
Y2hhcgogCSp5eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2Rl
ZmluZSBZWV9OVU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVm
aW5lIFlZX05VTV9SVUxFUyAxNTUKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNTYKIC8qIFRo
aXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2Vu
Y2UgaXMgbmVjZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTM5Miw1NSArMzky
LDU4IEBAIHN0cnVjdCB5eV90cmFuc19pbmZvCiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlm
bGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzQyNl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NTld
ID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDE0OCwgIDE0NiwgIDE0NSwgIDE0NSwKLSAgICAgIDEzMCwgIDEzNiwgIDE0MSwgIDEyNSwgIDEy
NiwgIDEzNCwgIDEzMywgIDEyMiwgIDEzMSwgIDEyOSwKLSAgICAgIDEzNSwgICA5NCwgICA5NCwg
IDEyMywgIDExOSwgIDEzNywgIDEyNCwgIDEzOCwgIDE0MiwgICA5MCwKLSAgICAgIDEyNywgIDEy
OCwgIDE0MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgIDEyMCwgIDEzOSwgIDEyMSwgIDEzMiwgICAgMywg
ICAgNCwgICAgMywKLSAgICAgIDE0NCwgIDE0NywgIDE0MywgIDExNiwgIDEwMiwgIDEyMSwgIDEx
MCwgIDEwNSwgIDEwMCwgIDEwOCwKLSAgICAgICA5OCwgIDEwOSwgICA5OSwgICA5NywgICAgMiwg
ICAgMSwgIDEwMSwgICA5NiwgICA5MiwgICA5MywKLSAgICAgICAgMCwgICAgMCwgICA5NCwgIDEy
OCwgIDEyMCwgIDEyNywgIDExNywgIDExMywgIDExNSwgIDExNCwKLSAgICAgIDExOCwgICA5MCwg
IDEwNiwgIDExMiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwKLQotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDIwLCAgIDIyLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkw
LCAgIDkwLCAgIDkwLCAgMTA3LCAgMTExLCAgICA1LCAgMTQzLAotICAgICAgICAwLCAgICAxLCAg
IDk2LCAgICAwLCAgICAwLCAgIDk1LCAgIDkxLCAgMTAzLCAgMTA0LCAgIDUwLAotICAgICAgIDkw
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAot
ICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDE4LCAgIDkw
LCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDI2LCAg
IDkwLCAgIDkwLCAgIDkwLAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLCAgIDIz
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkwLAotCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgIDAsICAgOTcsCi0gICAgICAgIDAs
ICAgOTYsICAgOTAsICAgMjgsICAgOTAsICAgOTAsICAgODcsICAgOTAsICAgOTAsICAgOTAsCi0g
ICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMjEsICAgNTMsICAgOTAsICAgOTAsICAgOTAs
ICAgOTAsCi0gICAgICAgOTAsICAgNTgsICAgNzIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNjksICAgIDksICAgMzMsICAgMzQsICAgMzUs
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAg
OTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsCi0gICAgICAgOTAsICAgNTYsICAgMjks
ICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgMzYsCi0gICAgICAgMzcsICAg
MzgsICAgMjcsICAgOTAsICAgOTAsICAgOTAsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCi0gICAg
ICAgNTEsICAgMTIsICAgOTAsICAgOTAsICAgOTAsICAgOTAsICAgODMsICAgODQsICAgODUsICAg
OTAsCi0KLSAgICAgICAzMCwgICA3MywgICAyNSwgICA4MCwgICA4MSwgICA4MiwgICAgNywgICA3
NywgICA3OCwgICA3OSwKLSAgICAgICA5MCwgICAyNCwgICA3NSwgICA5MCwgICA5MCwgICAzOSwg
ICA0MCwgICA0MSwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5
MCwgICA5MCwgICA5MCwgICA3MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwgICA1MiwgICA5MCwgICA4OSwgICA5MCwgICA5MCwKLSAgICAgICAxOSwgICA5
MCwgICA5MCwgICA5MCwgICA5MCwgICA3MSwgICA2NiwgICA2MSwgICA5MCwgICA5MCwKLSAgICAg
ICA5MCwgICA5MCwgICA5MCwgICA3NiwgICA1NywgICA5MCwgICA2NCwgICAzMiwgICA5MCwgICA4
NiwKLSAgICAgICA2NSwgICA0OSwgICA1OSwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA5MCwg
ICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA2MCwgICAzMSwgICA5MCwgICA5MCwgICA5MCwgICAg
OCwgICA5MCwgICA5MCwgICA5MCwKLSAgICAgICA5MCwgICA5MCwgICA1NCwgICAxMywgICA5MCwg
ICAxNCwgICA5MCwgICA5MCwgICAxNiwgICA2NywKLSAgICAgICA5MCwgICA5MCwgICA5MCwgICA2
MiwgICA5MCwgICA5MCwgICA5MCwgICA5MCwgICA1NSwgICA3NCwKLQotICAgICAgIDYzLCAgIDEx
LCAgIDY4LCAgICA2LCAgIDg4LCAgIDEwLCAgIDQ1LCAgIDkwLCAgIDkwLCAgIDkwLAotICAgICAg
IDkwLCAgIDkwLCAgIDkwLCAgIDQ2LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ4LCAgIDkwLCAgIDkw
LAotICAgICAgIDkwLCAgIDkwLCAgIDkwLCAgIDQ3LCAgICAwCisgICAgICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAxNTYsICAxNTQsICAxNTMsICAxNTMsCisgICAgICAxMzgs
ICAxNDQsICAxNDksICAxMzMsICAxMzQsICAxNDIsICAxNDEsICAxMzAsICAxMzksICAxMzcsCisg
ICAgICAxNDMsICAxMDIsICAxMDIsICAxMzEsICAxMjcsICAxNDUsICAxMzIsICAxNDYsICAxNTAs
ICAgOTgsCisgICAgICAxMzUsICAxMzYsICAxNDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgOTgsICAgOTgsICAxMjgsICAx
NDcsICAxMjksICAxNDAsICAgIDMsICAgIDQsICAgIDMsCisgICAgICAxNTIsICAxNTUsICAxNTEs
ICAxMjQsICAxMTAsICAxMjksICAxMTgsICAxMTMsICAxMDgsICAxMTYsCisgICAgICAxMDYsICAx
MTcsICAxMDcsICAxMDUsICAgIDIsICAgIDEsICAxMDksICAxMDQsICAxMDAsICAxMDEsCisgICAg
ICAgIDAsICAgIDAsICAxMDIsICAxMzYsICAxMjgsICAxMzUsICAxMjUsICAxMjEsICAxMjMsICAx
MjIsCisgICAgICAxMjYsICAgOTgsICAxMTQsICAxMjAsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsCisKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxNywgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICAyMCwgICAyMiwKKyAgICAgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgIDExNSwgIDExOSwgICAg
NSwKKyAgICAgIDE1MSwgICAgMCwgICAgMSwgIDEwNCwgICAgMCwgICAgMCwgIDEwMywgICA5OSwg
IDExMSwgIDExMiwKKyAgICAgICA1MCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAxOCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyNiwgICA5OCwKKyAgICAgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICAyMywgICA5OCwgICA5OCwKKworICAgICAg
IDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4
LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LAorICAgICAgIDk4LCAgICAwLCAgMTA1LCAgICAwLCAgMTA0LCAgIDk4LCAgIDI4
LCAgIDk4LCAgIDk4LCAgIDk1LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDIxLCAgIDUzLCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDY5LCAgIDk4
LCAgIDk4LCAgIDU4LCAgIDczLCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAg
IDk4LCAgIDk4LCAgIDk4LCAgIDcwLCAgICA5LCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDk4
LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAor
ICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDU2LCAgIDI5LCAgIDk4
LCAgIDk4LAorICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM2LCAgIDM3LCAgIDM4LCAg
IDI3LCAgIDk4LCAgIDk4LAorICAgICAgIDk4LCAgIDE1LCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDUx
LCAgIDEyLCAgIDk4LCAgIDk4LCAgIDk4LAorCisgICAgICAgOTgsICAgODIsICAgODMsICAgODQs
ICAgOTgsICAgMzAsICAgNzQsICAgMjUsICAgODUsICAgODYsCisgICAgICAgODcsICAgIDcsICAg
NzksICAgODAsICAgODEsICAgOTgsICAgMjQsICAgNzcsICAgOTgsICAgOTgsCisgICAgICAgMzks
ICAgNDAsICAgNDEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisg
ICAgICAgOTgsICAgOTgsICAgNzEsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsCisgICAgICAgOTgsICAgNTIsICAgOTgsICAgOTcsICAgOTgsICAgOTgsICAgMTksICAg
OTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAgNzIsICAgNjYsICAgNjEsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgNzgsCisgICAgICAgNTcsICAgOTgsICAgNjQsICAgMzIsICAg
OTgsICAgOTQsICAgNjUsICAgNDksICAgNzYsICAgNTksCisgICAgICAgOTgsICAgOTgsICAgOTgs
ICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNjAsICAgMzEsCisgICAgICAgOTgsICAg
OTgsICAgOTgsICAgIDgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgOTgsICAgNTQsCisgICAg
ICAgMTMsICAgOTgsICAgMTQsICAgOTgsICAgOTgsICAgMTYsICAgNjcsICAgOTgsICAgOTgsICAg
OTgsCisKKyAgICAgICA2MiwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA1
NSwgICA3NSwgICA2MywKKyAgICAgICAxMSwgICA2OCwgICAgNiwgICA5NiwgICAxMCwgICA4OCwg
ICA0NSwgICA4OSwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA0NiwgICA5OCwgICA5OCwg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA0OCwgICA5OCwKKyAgICAgICA5MiwgICA5
OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5MCwgICA5OCwgICA5MSwgICA5OCwKKyAgICAg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA0NywgICA5MywgICAgMAogICAgIH0gOwog
CiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTAsMTUgKzQ1
MywxNSBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAg
IDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQs
ICAgMTUsICAgMTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMTYsICAgMTYsICAgMTYsICAg
MjAsICAgMjAsICAgMjEsICAgMjIsICAgMjMsCi0gICAgICAgMjQsICAgMjUsICAgMjYsICAgIDEs
ICAgMjcsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMjcsCi0gICAgICAgMzEsICAgMzEsICAg
MzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzIsICAgMzEsCi0gICAgICAgMzEs
ICAgMzMsICAgMzQsICAgMzEsICAgMzEsICAgMzEsICAgMzEsICAgMzUsICAgMzEsICAgMzEsCi0g
ICAgICAgMzYsICAgIDEsICAgMzcsICAgMzgsICAgMzEsICAgIDEsICAgMzksICAgNDAsICAgNDEs
ICAgNDIsCi0KLSAgICAgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICAzMSwgICA0OCwg
ICA0OSwgICA1MCwgICA1MSwKLSAgICAgICA1MiwgICA1MywgICAzMSwgICA1NCwgICA1NSwgICA1
NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwKLSAgICAgICA2MSwgICA2MiwgICA2MywgICA2NCwg
ICA2NSwgICA2NiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOCwgICAxOSwgICAy
MCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwg
ICAyNiwgICAyNywgICAgMSwgICAyOCwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOCwKKyAg
ICAgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAzMywg
ICAzMiwKKyAgICAgICAzMiwgICAzNCwgICAzNSwgICAzMiwgICAzMiwgICAzMiwgICAzMiwgICAz
NiwgICAzMiwgICAzMiwKKyAgICAgICAzNywgICAgMSwgICAzOCwgICAzOSwgICAzMiwgICAgMSwg
ICA0MCwgICA0MSwgICA0MiwgICA0MywKKworICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAg
IDQ4LCAgIDMyLCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDMy
LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLAorICAgICAgIDYyLCAg
IDYzLCAgIDY0LCAgIDY1LCAgIDY2LCAgIDY3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNDc1LDIwMSArNDc4LDIxNCBAQCBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
NjddID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CiAgICAgeyAg
IDAsCiAgICAgICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAg
IDMsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMs
CisgICAgICAgIDMsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCiAgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAg
MQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MzFdID0K
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQ2NF0gPQogICAgIHsgICAwLAot
ICAgICAgICAwLCAgICAwLCAgIDY0LCAgIDY1LCAgIDc0LCAgICAwLCAgNjI3LCAgNjI4LCAgNjI4
LCAgNjI4LAotICAgICAgNjAyLCAgIDQ1LCAgMTM1LCAgNjI4LCAgNjI4LCAgNjAxLCAgMTMyLCAg
NjI4LCAgMTMxLCAgMTI5LAotICAgICAgMTQzLCAgMTU1LCAgMTYzLCAgNTk5LCAgNjI4LCAgMTc5
LCAgNTk5LCAgIDQ3LCAgNjI4LCAgICAwLAotICAgICAgNjI4LCAgNjI4LCAgMTI2LCAgIDk4LCAg
MTA4LCAgMTQ3LCAgMTU4LCAgMTU4LCAgMTY1LCAgNTcwLAotICAgICAgMTMwLCAgMTA3LCAgNTY5
LCAgMTQ4LCAgMTU2LCAgNTYzLCAgMTcyLCAgNTc2LCAgMTc0LCAgMTgxLAotICAgICAgMTc3LCAg
MTk1LCAgNTcyLCAgNjI4LCAgMTczLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjAzLAotICAg
ICAgNjI4LCAgNjI4LCAgICAwLCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAg
NjI4LAotICAgICAgNjI4LCAgNjI4LCAgNjI4LCAgMjMzLCAgNjI4LCAgICAwLCAgNjI4LCAgMjM5
LCAgMjU1LCAgMjcxLAotICAgICAgMjg3LCAgICAwLCAgMzAwLCAgNjI4LCAgNjI4LCAgNjI4LCAg
NTkyLCAgNjI4LCAgNjI4LCAgNjI4LAotICAgICAgNTkxLCAgICAwLCAgNjI4LCAgNjI4LCAgNTY0
LCAgNTU3LCAgNTYwLCAgNTY4LCAgNTY3LCAgNTU0LAotCi0gICAgICA1NjksICA1NTYsICA1NjIs
ICA1NTAsICA1NDcsICA1NjAsICA1NDcsICA1NDQsICA1NDQsICA1NTAsCi0gICAgICA1MzgsICA1
NDUsICA1NDIsICA1NTIsICA1MzgsICA1NDQsICA1NDcsICA1NDgsICAgIDAsICAxODcsCi0gICAg
ICA1NDcsICAyNDEsICA1MzMsICA1NDYsICA1MzcsICA1MzksICA1MjksICA1NDMsICA1NDAsICA1
NDIsCi0gICAgICA1MjUsICA1MzAsICA1MjcsICA1MTYsICAxOTIsICA1MzAsICA1MjYsICA1Mjgs
ICA1MTcsICA1MjAsCi0gICAgICAyNzQsICA1MjUsICA1MTcsICA1MjksICAxMTQsICA1MjIsICA2
MjgsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICAzMTYsICAgIDAsICAzMjIsICAzMzgsICAzNDQs
ICAzNTEsICAgIDAsICA2MjgsICA2MjgsICAgIDAsCi0gICAgICA1MTQsICA1MTgsICA1MjcsICA1
MjQsICA1MDgsICA1MDgsICAyMDUsICA1MjMsICA1MjAsICA1MjAsCi0gICAgICA1MTgsICA1MTUs
ICA1MDcsICA1MTMsICA1MDAsICA1MTEsICA1MTQsICAgIDAsICA1MTEsICA0OTksCi0gICAgICA1
MDYsICA1MDMsICA1MDcsICA1MDAsICA0ODksICA0ODgsICA1MDEsICA1MDQsICA1MDEsICA0OTYs
Ci0gICAgICA0ODcsICAyNDcsICA0OTIsICA0OTUsICA0ODYsICA0ODMsICA0ODcsICA0OTMsICA0
ODQsICA0NzUsCi0KLSAgICAgIDQ3OCwgIDQ3NiwgIDQ4NiwgIDQ3MiwgIDQ3MCwgIDQ3MCwgIDQ3
MiwgIDQ2OSwgIDQ4MCwgIDQ3OSwKLSAgICAgIDMyOCwgIDQ3NCwgIDQ2OSwgIDQ1OCwgIDI2MCwg
IDQ3NiwgIDQ3OCwgIDQ2NywgIDM1OCwgIDM2NiwKLSAgICAgIDM3MiwgIDM3OCwgIDQ2OCwgICAg
MCwgIDQ2NiwgIDI3NiwgICAgMCwgIDQ1OCwgIDQ1NiwgIDQ2NCwKLSAgICAgIDQ1MywgIDQ3MCwg
IDQ1OSwgIDI5MSwgICAgMCwgICAgMCwgIDQ1MywgIDQ2MywgIDQ2MywgIDQ0OCwKLSAgICAgIDMw
NSwgICAgMCwgICAgMCwgIDQ1MCwgIDMyNywgIDQ1MSwgIDQ0NSwgIDQ0NCwgIDQ0NSwgIDQ0NCwK
LSAgICAgIDM4MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ0MCwgIDQ0MSwgIDQ0
NiwgIDQzNywKLSAgICAgIDQ1MCwgIDQ0NSwgIDQ0NCwgIDQzNiwgIDQ0MCwgIDQzMiwgIDQzNSwg
IDQzOSwgIDQ0NCwgIDQ0MywKLSAgICAgIDQzNCwgICAgMCwgICAgMCwgIDQ0MCwgIDQyOSwgIDQy
OSwgIDQzNCwgIDQzMywgIDQzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDQyMCwg
IDQzMiwgIDQzNCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDQy
MiwgIDQyMywgIDQxNywgIDQyNywgICAgMCwgICAgMCwgICAgMCwgIDQxOCwKLQotICAgICAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgNDI1LCAgICAwLCAgICAwLCAgNDIzLCAgNDE5LCAgICAwLCAgICAwLCAgICAwLCAgNDE1
LCAgNDExLAotICAgICAgNDE2LCAgNDA2LCAgNDE5LCAgNDA1LCAgNDE4LCAgNDA3LCAgNDE0LCAg
ICAwLCAgNDEyLCAgNDE0LAotICAgICAgMzk4LCAgNDA3LCAgNDEzLCAgNDA4LCAgMzk2LCAgICAw
LCAgMzk4LCAgICAwLCAgMzk3LCAgNDAwLAotICAgICAgICAwLCAgMzg5LCAgMzg4LCAgMzg4LCAg
NDAxLCAgICAwLCAgNDAzLCAgICAwLCAgNDAyLCAgNDAxLAotICAgICAgMzg2LCAgMzk5LCAgMzg2
LCAgICAwLCAgICAwLCAgMzg5LCAgICAwLCAgICAwLCAgMzgxLCAgICAwLAotICAgICAgICAwLCAg
ICAwLCAgICAwLCAgMzc4LCAgMzg5LCAgMzgyLCAgMzg4LCAgMzg1LCAgMzgwLCAgMzcyLAotICAg
ICAgMzgyLCAgICAwLCAgICAwLCAgMzY1LCAgMzcxLCAgMzYwLCAgICAwLCAgMzY5LCAgMzY2LCAg
MzU2LAotICAgICAgMzg1LCAgMzY0LCAgICAwLCAgICAwLCAgMzY0LCAgICAwLCAgMzYyLCAgMzYx
LCAgICAwLCAgICAwLAotICAgICAgMzYwLCAgMzIzLCAgMzA4LCAgICAwLCAgMjk4LCAgMzE4LCAg
MjcwLCAgMjY1LCAgICAwLCAgICAwLAotCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAyNzksICAyNzEsICAyNDAsICAyNDAsCi0gICAgICAyMzgsICAyMzcsICAyMjYs
ICAgIDAsICAyMDgsICAxODgsICAxOTAsICAgIDAsICAxODYsICAxNzMsCi0gICAgICAxODcsICAx
NjQsICAxNTgsICAgIDAsICA2MjgsICA0MTUsICA0MTcsICA0MTksICA0MjMsICAxODYKKyAgICAg
ICAgMCwgICAgMCwgICA2NSwgICA2NiwgICA3NSwgICAgMCwgIDY4MCwgIDY4MSwgIDY4MSwgIDY4
MSwKKyAgICAgIDY1NCwgICA0NSwgIDEzNywgIDY4MSwgIDY4MSwgIDY1MywgIDEzNCwgIDY4MSwg
IDEzMywgIDEzMSwKKyAgICAgIDE0NiwgIDE1OSwgIDE2OCwgIDY1MSwgIDY4MSwgIDE4NiwgIDY1
MSwgICA0NywgIDY4MSwgICAgMCwKKyAgICAgIDY4MSwgIDY4MSwgIDEyOCwgIDEwMCwgIDExMCwg
IDE1MiwgIDE1NiwgIDE0NiwgIDE2NiwgIDYyMiwKKyAgICAgIDE3MywgIDEwOSwgIDYyMSwgIDEy
NiwgIDE3NywgIDYxNSwgIDE3OCwgIDYyOCwgIDE4NywgIDE4NCwKKyAgICAgIDE0MSwgIDE5Nywg
IDYyNCwgIDY4MSwgIDE1NywgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY1NiwKKyAgICAgIDY4
MSwgIDY4MSwgICAgMCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwgIDY4MSwK
KyAgICAgIDY4MSwgIDY4MSwgIDY4MSwgIDIzNiwgIDY4MSwgICAgMCwgIDY4MSwgIDI0MywgIDI3
MywgIDI4MiwKKyAgICAgIDMwNCwgICAgMCwgIDMxNCwgIDY4MSwgIDY4MSwgIDY4MSwgIDY0NCwg
IDY4MSwgIDY4MSwgIDY4MSwKKyAgICAgIDY0MywgICAgMCwgIDY4MSwgIDY4MSwgIDYxNiwgIDYw
OSwgIDYxMiwgIDYyMCwgIDYxOSwgIDYwNiwKKworICAgICAgNjIxLCAgNjA4LCAgNjE0LCAgNjAy
LCAgNTk5LCAgNjEyLCAgNTk5LCAgNTk2LCAgNTk2LCAgNjAyLAorICAgICAgNTkwLCAgMTg5LCAg
NTk1LCAgNjA1LCAgNTkxLCAgNTk3LCAgNjAwLCAgNjAxLCAgICAwLCAgMjE2LAorICAgICAgNjAw
LCAgMTg4LCAgNTg2LCAgNTk5LCAgNTkwLCAgNTkyLCAgNTgyLCAgNTk2LCAgNTkzLCAgNTk1LAor
ICAgICAgNTc4LCAgNTgzLCAgNTgwLCAgNTY5LCAgMTgzLCAgNTc3LCAgNTgyLCAgNTc4LCAgNTgw
LCAgNTY5LAorICAgICAgNTcyLCAgMjIwLCAgNTc3LCAgNTY5LCAgNTgxLCAgMTc2LCAgNTc0LCAg
NjgxLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgMzMxLCAgICAwLCAgMzQ0LCAgMzYxLCAgMjkw
LCAgMzc0LCAgICAwLCAgNjgxLCAgNjgxLAorICAgICAgICAwLCAgNTY2LCAgNTcwLCAgNTc5LCAg
NTc2LCAgNTYwLCAgNTYwLCAgMjE1LCAgNTc1LCAgNTcyLAorICAgICAgNTcyLCAgNTcwLCAgNTY3
LCAgNTU5LCAgNTY1LCAgNTUyLCAgNTYzLCAgNTQ5LCAgNTY1LCAgICAwLAorICAgICAgNTYyLCAg
NTUwLCAgNTU3LCAgNTU0LCAgNTU4LCAgNTUxLCAgNTQwLCAgNTM5LCAgNTUyLCAgNTU1LAorICAg
ICAgNTUyLCAgNTQ3LCAgNTM4LCAgMjYwLCAgNTQzLCAgNTQ2LCAgNTM3LCAgNTM0LCAgNTM4LCAg
NTQ0LAorCisgICAgICA1MzUsICA1MjYsICA1MjksICA1MjcsICA1MzcsICA1MjMsICA1MjEsICA1
MzQsICA1MjAsICA1MjIsCisgICAgICA1MTksICA1MzAsICA1MjksICAyODMsICA1MjQsICA1MTks
ICA1MDgsICAyNjQsICA1MjYsICA1MjgsCisgICAgICA1MTcsICAzODEsICAzODgsICAzOTUsICA0
MDIsICA1MTgsICAgIDAsICA1MTYsICAzMjAsICAgIDAsCisgICAgICA1MDgsICA1MDYsICA1MTQs
ICA1MDMsICA1MjAsICA1MDksICAzMzYsICAgIDAsICAgIDAsICA1MDMsCisgICAgICA1MTMsICA1
MTMsICAgIDAsICA0OTgsICAzNDksICAgIDAsICAgIDAsICA1MDAsICAzNjYsICA1MDEsCisgICAg
ICA0OTUsICA0OTQsICA0OTUsICA0OTQsICA0MDcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCisgICAgICA0OTAsICA0OTEsICA0OTYsICA0ODcsICA1MDAsICA0OTUsICA0OTQsICA0ODYs
ICA0OTAsICA0ODIsCisgICAgICA0ODUsICA0ODksICA0OTQsICA0ODAsICA0OTIsICA0ODMsICAg
IDAsICAgIDAsICA0ODksICA0NzgsCisgICAgICA0NzgsICA0ODMsICA0ODIsICA0NzksICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICA0NjksICA0ODEsCisgICAgICA0ODMsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICA0NzEsICA0NzIsICA0NjYsCisKKyAgICAgIDQ3NiwgICAg
MCwgICAgMCwgICAgMCwgIDQ2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ3NCwgICAgMCwgICAgMCwgIDQ3MiwgIDQ2
OCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDQ2NCwgIDQ2MCwgIDQ2NSwgIDQ1NSwgIDQ2OCwg
IDQ1NCwgIDQ2NywKKyAgICAgIDQ1NiwgIDQ2MywgICAgMCwgIDQ2MSwgIDQ2MywgIDQ0NywgIDQ0
OSwgIDQ1NSwgIDQ2MSwgIDQ1NiwKKyAgICAgIDQ0NCwgICAgMCwgIDQ0NiwgICAgMCwgIDQ0NSwg
IDQ0OCwgICAgMCwgIDQzNywgIDQzNiwgIDQzNiwKKyAgICAgIDQ0OSwgICAgMCwgIDQ1MSwgICAg
MCwgIDQ1MCwgIDQ0OSwgIDQzNCwgIDQ0NywgIDQzNCwgICAgMCwKKyAgICAgICAgMCwgIDQzNywg
ICAgMCwgICAgMCwgIDQyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQy
NiwgIDQzNywgIDQzMCwgIDQzNiwgIDQzMywgIDQyOCwgIDQyMCwgIDQzMiwgICAgMCwgICAgMCwK
KyAgICAgIDQyNSwgIDQzMiwgIDQyMSwgICAgMCwgIDQzMCwgIDQyNywgIDQxNywgIDQxMSwgIDQy
NSwgICAgMCwKKyAgICAgICAgMCwgIDQyNSwgICAgMCwgIDQyMywgIDQyMiwgICAgMCwgICAgMCwg
IDQyMSwgIDQwNywgIDQxOSwKKworICAgICAgICAwLCAgNDEwLCAgNDMxLCAgNDMwLCAgNDI5LCAg
NDAwLCAgMzk2LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNDIxLCAgMjUwLCAgNDIxLCAgNDExLCAgMzg0LAorICAgICAgMzkyLCAgMzk0LCAg
MzkwLCAgMzkyLCAgMzkxLCAgMzkwLCAgMzkzLCAgMzkwLCAgMzkxLCAgMzg4LAorICAgICAgICAw
LCAgMzMyLCAgMzQzLCAgMzE3LCAgMzI5LCAgMzEzLCAgMzE3LCAgMzA0LCAgMzIxLCAgMjkxLAor
ICAgICAgICAwLCAgMzAyLCAgMjgwLCAgMjcxLCAgMjU1LCAgMjYyLCAgICAwLCAgMjU2LCAgICAw
LCAgMjMyLAorICAgICAgMjA2LCAgMjEyLCAgMTQ4LCAgMTU5LCAgMTEzLCAgICAwLCAgICAwLCAg
NjgxLCAgNDQyLCAgNDQ0LAorICAgICAgNDQ2LCAgNDUwLCAgMTYxCiAgICAgfSA7CiAKLXN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDMxXSA9CitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzQ2NF0gPQogICAgIHsgICAwLAotICAgICAgNDI1LCAgICAxLCAgNDI2
LCAgNDI2LCAgNDI1LCAgICA1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAg
ICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI3LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI4LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI5LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAg
NDI1LCAgNDMwLCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LAotICAgICAgNDI1LCAgNDI3LCAgNDI1LCAgNDI1LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjUsICA0MjUsICA0MjUsICA0Mjgs
Ci0gICAgICA0MjUsICA0MjksICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MzAsICA0MjUsICA0
MjUsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsCi0KLSAgICAgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywK
LSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NSwgIDQyNSwKLSAgICAgIDQyNSwgIDQyNSwgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAgICAgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywKLSAg
ICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQy
NywgIDQyNywgIDQyNywKLSAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyNywg
IDQyNywgIDQyNywgIDQyNywgIDQyNywKLQotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAg
ICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3LCAgNDI3LCAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAgNDI3LCAgNDI3
LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LAotICAgICAg
NDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3LCAgNDI3
LAotCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0Mjcs
ICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0
MjcsICA0MjcsICA0MjcsICA0MjcsCi0gICAgICA0MjcsICA0MjcsICA0MjcsICA0MjcsICAgIDAs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUKKyAgICAgIDQ1OCwgICAgMSwgIDQ1OSwgIDQ1
OSwgIDQ1OCwgICAgNSwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwK
KyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ2MSwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ2MiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwg
IDQ2MywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAg
ICAgIDQ1OCwgIDQ2MCwgIDQ1OCwgIDQ1OCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwKKworICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDU4LCAgNDU4LCAgNDU4LAorICAg
ICAgNDYxLCAgNDU4LCAgNDYyLCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDYzLCAgNDU4LCAg
NDU4LAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorCisgICAgICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAg
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsCisgICAgICA0NjAsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsCisgICAgICA0
NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
CisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0
NjAsICA0NjAsCisgICAgICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAsICA0NjAs
ICA0NjAsICA0NjAsICA0NjAsCisKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwK
KyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwgIDQ2MCwgIDQ2
MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKyAgICAgIDQ2MCwg
IDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwKKwor
ICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAgNDYwLCAgNDYw
LCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLAorICAgICAgNDYwLCAg
NDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgNDYwLCAgICAwLCAgNDU4LCAgNDU4LAorICAg
ICAgNDU4LCAgNDU4LCAgNDU4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9ueHRbNjk1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0Wzc0OV0g
PQogICAgIHsgICAwLAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAg
IDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIy
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDI0LCAgIDI1LCAgIDI2LCAg
IDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAotICAgICAgIDMwLCAgIDMw
LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAotICAgICAg
IDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0
LAotICAgICAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAg
IDUzLCAgIDMwLAotICAgICAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5
LCAgIDU5LCAgIDY1LCAgIDY2LAotICAgICAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4LCAg
IDYxLCAgIDYyLCAgICA4LCAgICA4LCAgICA4LAorICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2
LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAg
IDMwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LAorICAgICAgIDM1
LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLAor
ICAgICAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUy
LCAgIDUzLAorICAgICAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAg
IDU5LCAgIDU5LCAgIDY1LAorICAgICAgIDY2LCAgIDkwLCAgIDkxLCAgIDYwLCAgIDYwLCAgICA4
LCAgIDYxLCAgIDYyLCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogICAgICAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAogCi0gICAgICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgIDgsCiAg
ICAgICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCisgICAgICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsCiAgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsCi0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgIDgsCi0gICAgICAgNjcsICAgNzAsICAgNzIs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgOTMsCi0gICAgICAxMTksICAg
NzUsICAgOTUsICAgOTYsICAgNzMsICAgNzEsICAgNzYsICAxMjAsICAgNjgsICAgOTcsCi0gICAg
ICAyMTYsICAgOTgsICAyMTcsICAgOTQsICAxMjEsICAgOTksICAgNzcsICAgNzgsICAxMTYsICAg
NzksCi0gICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsICAxMTcsICAgODMs
ICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODUsICAgODEsICAxMDAsICAx
MjMsICAxMTgsICAxNTcsICAgODIsCi0gICAgICAxMjQsICA0MjQsICAgODEsICA0MjMsICAxMjUs
ICAxMDEsICAxNDcsICAgODEsICAxMDIsICAgODYsCi0KLSAgICAgIDEwMywgICA4NywgICA4OCwg
IDExMCwgIDEwNCwgICA4MSwgIDEwNywgIDEyNiwgIDEwOCwgIDEwNSwKLSAgICAgIDEyOCwgIDEx
MSwgIDEzMiwgIDExMiwgICA4MiwgIDEwNiwgIDExMywgIDEwOSwgIDQyMiwgIDEzMywKLSAgICAg
IDEzNCwgIDQyMSwgIDExNCwgIDEzNywgIDQyMCwgIDEyOSwgIDEzOCwgIDE0MSwgIDEzMCwgIDEz
NSwKLSAgICAgIDIwNCwgIDE0MiwgIDEzNiwgIDE0MywgIDEzOSwgIDE4NCwgIDE0OCwgIDE0NCwg
IDE4NSwgIDE4NiwKLSAgICAgIDQxOSwgIDE0MCwgIDE4NywgIDQxOCwgIDE4OCwgIDIwNSwgIDE0
NSwgICA3NCwgICA3NCwgICA3NCwKLSAgICAgICA3NCwgICA3NCwgICA3NCwgIDE1MywgIDE1Mywg
IDE1MywgIDE1MywgIDE1MywgIDE1MywgIDIyOSwKLSAgICAgIDIzMCwgIDQxNywgIDE1MSwgIDI1
NCwgIDI1NSwgIDI1NiwgIDQxNiwgICA3OCwgIDE1NCwgICA3OSwKLSAgICAgICA3OSwgICA3OSwg
ICA3OSwgICA3OSwgICA4MCwgIDE1MSwgIDI4MCwgIDI4MSwgIDI4MiwgIDQxNSwKLSAgICAgIDQx
NCwgIDE1NCwgIDQxMywgICA3OCwgICA4MSwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwK
LSAgICAgICA4MCwgIDE5MCwgIDI4OCwgIDI4OSwgIDI5MCwgIDQxMiwgIDE1NSwgICA4MSwgIDE1
NSwgIDE5MSwKLQotICAgICAgIDgxLCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2
LCAgMjk3LCAgMjk4LCAgMjk5LAotICAgICAgNDExLCAgNDEwLCAgIDc4LCAgIDgxLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgMjExLCAgMzA0LCAgMzA1LCAgMzA2
LCAgNDA5LCAgMjE5LCAgNDA4LCAgMjE5LCAgMjEyLCAgIDgxLAotICAgICAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLAotICAgICAgMTUz
LCAgMTUzLCAgIDgxLCAgMzA4LCAgMzA5LCAgMzEwLCAgNDA3LCAgMjIxLCAgNDA2LCAgMjIxLAot
ICAgICAgNDA1LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMTU2
LCAgMTU2LAotICAgICAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU0LCAgMTU2LCAgMTU2LCAg
MTU2LCAgMTU2LCAgMTU2LAotICAgICAgMTU2LCAgMjc1LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LCAgMjIwLCAgMjIwLCAgNDA0LCAgMjc2LAotICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
MjIwLCAgMjIwLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAotICAgICAgMjIyLCAgMjIyLCAgMjIy
LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMzE2LCAgMzE3LAotCi0gICAgICAzMTgs
ICAzOTYsICA0MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTUsICAzOTQsICAzOTMsCi0g
ICAgICAzOTIsICAzOTEsICAzOTcsICAzOTAsICAzOTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgs
ICAgOTIsCi0gICAgICAgOTIsICAxNTAsICAxNTAsICAxNTIsICAzODksICAxNTIsICAxNTIsICAz
ODgsICAzODcsICAzODYsCi0gICAgICAzODUsICAzODQsICAzODMsICAzODIsICAzODEsICAzODAs
ICAzNzksICAzNzgsICAzNzcsICAzNzYsCi0gICAgICAzNzUsICAzNzQsICAzNzMsICAzNzIsICAz
NzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsCi0gICAgICAzNjUsICAzNjQsICAzNjMs
ICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsCi0gICAgICAzNTUsICAz
NTQsICAzNTMsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsCi0gICAg
ICAzNDUsICAzNDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAz
MzYsCi0gICAgICAzMzUsICAzMzQsICAzMzMsICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgs
ICAzMjcsICAzMjYsCi0gICAgICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsICAzMjAsICAz
MTksICAzMTUsICAzMTQsICAzMTMsCi0KLSAgICAgIDMxMiwgIDMxMSwgIDMwNywgIDMwMywgIDMw
MiwgIDMwMSwgIDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwKLSAgICAgIDI5MywgIDI5MiwgIDI5MSwg
IDI4NywgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwKLSAgICAgIDI3NywgIDI3
NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwKLSAgICAg
IDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1
MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwg
IDI0NCwgIDI0MywKLSAgICAgIDI0MiwgIDI0MSwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIz
NiwgIDIzNSwgIDIzNCwgIDIzMywKLSAgICAgIDIzMiwgIDIzMSwgIDIyOCwgIDIyNywgIDIyNiwg
IDIyNSwgIDIyNCwgIDIyMywgIDIxOCwgIDIxNSwKLSAgICAgIDIxNCwgIDIxMywgIDIxMCwgIDIw
OSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwKLSAgICAgIDIwMCwgIDE5OSwg
IDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwKLSAgICAgIDE4
MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwK
LQotICAgICAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAg
MTY1LCAgMTY0LAotICAgICAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTQ5
LCAgMTQ2LCAgMTMxLCAgMTI3LAotICAgICAgMTIyLCAgMTE1LCAgIDg5LCAgIDg0LCAgIDY5LCAg
IDY0LCAgNDI1LCAgICA3LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAot
ICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAg
NDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1
LCAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1LAotICAgICAgNDI1LCAgNDI1LCAgNDI1LCAgNDI1Ci0K
KyAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICAg
OCwgICAgOCwKKyAgICAgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3NCwgICA3NCwg
ICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA5MywgIDExOSwgICA3NSwgICA5
NSwgICA5NiwgICA3MywgICA3MSwgICA3NiwKKyAgICAgIDEyMCwgICA2OCwgICA5NywgIDE1OCwg
ICA5OCwgIDEyMywgICA5NCwgIDEyMSwgICA5OSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDQ1
NywgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwKKyAgICAgICA3OCwg
IDE0OCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MSwKKyAg
ICAgICA4NSwgIDEwMCwgIDE0MiwgIDQ1NiwgICA4MiwgIDEwNywgIDE0MywgIDEwOCwgICA4MSwg
IDEwMywKKworICAgICAgNDU1LCAgMTAxLCAgIDgxLCAgMTA0LCAgMTAyLCAgMTEwLCAgMTA5LCAg
IDg2LCAgMTA1LCAgIDg3LAorICAgICAgIDg4LCAgIDgxLCAgMTE2LCAgMTExLCAgMTA2LCAgMTEy
LCAgMTI1LCAgMTI4LCAgMTEzLCAgIDgyLAorICAgICAgMTE3LCAgMTQ5LCAgMjA2LCAgMjE5LCAg
MTE0LCAgMjIwLCAgMTMyLCAgMTM4LCAgMTc4LCAgMTI2LAorICAgICAgMTM5LCAgMTE4LCAgMTI5
LCAgMTMzLCAgMTM0LCAgMTMwLCAgMTQ0LCAgMjA3LCAgMTQwLCAgMTkyLAorICAgICAgMTQ1LCAg
MTc5LCAgNDU0LCAgMTM1LCAgMTM2LCAgMTQxLCAgMTM3LCAgMTkzLCAgNDUzLCAgMTQ2LAorICAg
ICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgMTU0LCAgMTU0LCAg
MTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgNDUyLCAgMTg2LCAgMTUyLCAgMjE0
LCAgMTg3LCAgMTg4LAorICAgICAgMjMyLCAgMjMzLCAgMTg5LCAgMTU1LCAgMTkwLCAgMjE1LCAg
MjU4LCAgMjU5LCAgMjYwLCAgMTUyLAorICAgICAgMjg1LCAgMjg2LCAgMjg3LCAgNDIyLCAgNDIz
LCAgIDc4LCAgMTU1LCAgIDc5LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAg
IDgwLCAgIDc4LCAgNDUxLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorCisgICAgICAgODAsICAg
ODAsICAgODAsICAgODEsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCisgICAg
ICAxNTcsICA0NTAsICAgODEsICAxNTYsICA0NDksICAxNTYsICAgODEsICA0NDgsICAxNTcsICAx
NTcsCisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgODEsICAgNzgsICAyODAs
ICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAyODEsICAy
OTMsICAyOTQsICAyOTUsICA0NDcsCisgICAgICAyMjIsICA0NDYsICAyMjIsICA0NDUsICAgODEs
ICAyMjMsICAyMjMsICAyMjMsICAyMjMsICAyMjMsCisgICAgICAyMjMsICAyMjMsICAzMDIsICAz
MDMsICAzMDQsICA0NDQsICA0NDMsICAgODEsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTQsICAzMDksICAzMTAsICAzMTEsICA0NDIsICA0NDEsCisgICAgICAy
MjQsICA0NDAsICAyMjQsICA0MzksICAxNTUsICAyMjUsICAyMjUsICAyMjUsICAyMjUsICAyMjUs
CisgICAgICAyMjUsICAyMjUsICAzMTMsICAzMTQsICAzMTUsICA0MzgsICA0MzcsICAxNTUsICAx
NTcsICAxNTcsCisgICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAyMjMsICAyMjMs
ICAyMjMsICAyMjMsICAyMjMsCisKKyAgICAgIDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyMywg
IDIyMywgIDIyMywgIDIyMywgIDIyMywgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwgIDIyNSwgIDIy
NSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwgIDIyNSwKKyAgICAgIDIyNSwgIDIyNSwg
IDIyNSwgIDMyMSwgIDMyMiwgIDMyMywgIDQwMywgIDQwNCwgIDQwNSwgIDQzNiwKKyAgICAgIDQz
NSwgIDQzNCwgIDQzMywgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQwNiwK
KyAgICAgIDQyNiwgIDQwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA5MiwgICA5MiwgIDE1
MSwgIDE1MSwKKyAgICAgIDE1MywgIDQyNSwgIDE1MywgIDE1MywgIDQyNCwgIDQyMSwgIDQyMCwg
IDQxOSwgIDQxOCwgIDQxNywKKyAgICAgIDQxNiwgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwgIDQwOSwgIDQwOCwgIDQwMiwKKyAgICAgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwg
IDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwKKyAgICAgIDM5MSwgIDM5MCwgIDM4
OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwKKyAgICAgIDM4MSwg
IDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwKKwor
ICAgICAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYz
LCAgMzYyLAorICAgICAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAg
MzU0LCAgMzUzLCAgMzUyLAorICAgICAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2
LCAgMzQ1LCAgMzQ0LCAgMzQzLCAgMzQyLAorICAgICAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAg
MzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzMzLCAgMzMyLAorICAgICAgMzMxLCAgMzMwLCAgMzI5
LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIwLCAgMzE5LAorICAgICAgMzE4LCAg
MzE3LCAgMzE2LCAgMzEyLCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzAxLCAgMzAwLAorICAg
ICAgMjk5LCAgMjk4LCAgMjk3LCAgMjk2LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg4LCAg
Mjg0LAorICAgICAgMjgzLCAgMjgyLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LCAgMjc0
LCAgMjczLCAgMjcyLAorICAgICAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAg
MjY1LCAgMjY0LCAgMjYzLCAgMjYyLAorICAgICAgMjYxLCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0
LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LAorCisgICAgICAyNDgsICAyNDcsICAyNDYs
ICAyNDUsICAyNDQsICAyNDMsICAyNDIsICAyNDEsICAyNDAsICAyMzksCisgICAgICAyMzgsICAy
MzcsICAyMzYsICAyMzUsICAyMzQsICAyMzEsICAyMzAsICAyMjksICAyMjgsICAyMjcsCisgICAg
ICAyMjYsICAyMjEsICAyMTgsICAyMTcsICAyMTYsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAy
MDksCisgICAgICAyMDgsICAyMDUsICAyMDQsICAyMDMsICAyMDIsICAyMDEsICAyMDAsICAxOTks
ICAxOTgsICAxOTcsCisgICAgICAxOTYsICAxOTUsICAxOTQsICAxOTEsICAxODUsICAxODQsICAx
ODMsICAxODIsICAxODEsICAxODAsCisgICAgICAxNzcsICAxNzYsICAxNzUsICAxNzQsICAxNzMs
ICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsCisgICAgICAxNjcsICAxNjYsICAxNjUsICAx
NjQsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTAsCisgICAgICAxNDcsICAxMzEs
ICAxMjcsICAxMjIsICAxMTUsICAgODksICAgODQsICAgNjksICAgNjQsICA0NTgsCisgICAgICAg
IDcsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgs
CisgICAgICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0NTgsICA0
NTgsICA0NTgsCisKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OAogICAgIH0gOwogCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5NV0gPQorc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1s3NDldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
QEAgLTY3Nyw4ICs2OTMsOCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY5
NV0gCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsCi0gICAgICAgMjgsICAgMjgs
ICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIs
CisgICAgICAgMTIsICAgMjgsICAgMjgsICAgIDMsICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAKQEAgLTY4Niw3MiArNzAyLDc3IEBAIHN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjk1XSAKICAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKLSAgICAgICAxMywgICAxNywgICAxOSwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAzMywKLSAgICAgICA0MiwgICAyMSwgICAzNCwgICAzNCwgICAxOSwgICAxNywg
ICAyMSwgICA0MiwgICAxMywgICAzNSwKLSAgICAgIDE0NSwgICAzNSwgIDE0NSwgICAzMywgICA0
MiwgICAzNSwgICAyMSwgICAyMiwgICA0MSwgICAyMiwKLSAgICAgICAyMiwgICAyMiwgICAyMiwg
ICAyMiwgICAyMiwgICAyMywgICA0MSwgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAy
MywgICAyMywgICAyNiwgICAyMiwgICAzNiwgICA0NCwgICA0MSwgIDQzMCwgICAyMiwKLSAgICAg
ICA0NCwgIDQyMywgICAyMywgIDQyMiwgICA0NSwgICAzNiwgICA1NSwgICAyMiwgICAzNiwgICAy
NiwKLQotICAgICAgIDM3LCAgIDI2LCAgIDI2LCAgIDM5LCAgIDM3LCAgIDIzLCAgIDM4LCAgIDQ1
LCAgIDM4LCAgIDM3LAotICAgICAgIDQ3LCAgIDM5LCAgIDQ5LCAgIDM5LCAgIDIyLCAgIDM3LCAg
IDM5LCAgIDM4LCAgNDIxLCAgIDQ5LAotICAgICAgIDQ5LCAgNDIwLCAgIDM5LCAgIDUwLCAgNDE5
LCAgIDQ3LCAgIDUwLCAgIDUxLCAgIDQ3LCAgIDQ5LAotICAgICAgMTM1LCAgIDUxLCAgIDQ5LCAg
IDUyLCAgIDUwLCAgMTIwLCAgIDU1LCAgIDUyLCAgMTIwLCAgMTIwLAotICAgICAgNDE3LCAgIDUw
LCAgMTIwLCAgNDE2LCAgMTIwLCAgMTM1LCAgIDUyLCAgIDc0LCAgIDc0LCAgIDc0LAotICAgICAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMTY3
LAotICAgICAgMTY3LCAgNDE1LCAgIDc0LCAgMTkyLCAgMTkyLCAgMTkyLCAgNDEzLCAgIDc5LCAg
IDc4LCAgIDc5LAotICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc0LCAgMjE1
LCAgMjE1LCAgMjE1LCAgNDEyLAotICAgICAgNDExLCAgIDc4LCAgNDEwLCAgIDgwLCAgIDc5LCAg
IDgwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAotICAgICAgIDgwLCAgMTIyLCAgMjI2LCAgMjI2
LCAgMjI2LCAgNDA5LCAgIDgxLCAgIDc5LCAgIDgxLCAgMTIyLAotCi0gICAgICAgODAsICAgODEs
ICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsICAyMzQsICAyMzQsICAyMzQsCi0gICAgICA0
MDgsICA0MDcsICAgODMsICAgODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
Ci0gICAgICAxNDEsICAyNDEsICAyNDEsICAyNDEsICAzOTgsICAxNTEsICAzOTcsICAxNTEsICAx
NDEsICAgODMsCi0gICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTMs
ICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAgODMsICAyNDUsICAyNDUsICAy
NDUsICAzOTYsICAxNTQsICAzOTUsICAxNTQsCi0gICAgICAzOTMsICAxNTMsICAxNTQsICAxNTQs
ICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAxNTUsCi0gICAgICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYs
ICAyMTEsICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAzOTIsICAyMTEsCi0g
ICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEs
ICAyMjEsCi0gICAgICAyMjEsICAyMjEsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAy
MjIsICAyNTEsICAyNTEsCi0KLSAgICAgIDI1MSwgIDM4MSwgIDM5MSwgIDM4OCwgIDM4NywgIDM4
NSwgIDM4MiwgIDM4MCwgIDM3OSwgIDM3OCwKLSAgICAgIDM3NiwgIDM3NSwgIDM4MSwgIDM3NCwg
IDM4MSwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNywKLSAgICAgIDQyNywgIDQyOCwgIDQy
OCwgIDQyOSwgIDM3MSwgIDQyOSwgIDQyOSwgIDM3MCwgIDM2OSwgIDM2OCwKLSAgICAgIDM2Nywg
IDM2NiwgIDM2NSwgIDM2NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwKLSAg
ICAgIDM0OSwgIDM0NywgIDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywg
IDMzNSwKLSAgICAgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMy
NiwgIDMyNSwgIDMyNCwKLSAgICAgIDMyMywgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwg
IDMxNCwgIDMxMSwgIDMwMCwgIDI5NiwKLSAgICAgIDI5NSwgIDI5NCwgIDI5MywgIDI4NiwgIDI4
NSwgIDI4NCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MSwg
IDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwKLSAgICAgIDI2MywgIDI2
MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwKLQotICAg
ICAgMjQ3LCAgMjQ2LCAgMjQ0LCAgMjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAg
MjMxLAotICAgICAgMjMwLCAgMjI5LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2
LCAgMjE0LCAgMjEzLAotICAgICAgMjEyLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAg
MjA1LCAgMjA0LCAgMjAzLCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3
LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkxLAotICAgICAgMTkwLCAgMTg5LCAgMTg4LCAg
MTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLAotICAgICAgMTgwLCAgMTc5
LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLAotICAgICAg
MTY5LCAgMTY4LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0
LAotICAgICAgMTQzLCAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAg
MTMzLCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1
LCAgMTI0LCAgMTIzLCAgMTIxLAotICAgICAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAg
MTEzLCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5LAotCi0gICAgICAxMDgsICAxMDcsICAxMDYsICAx
MDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTksCi0gICAgICAgOTgsICAgOTcs
ICAgOTYsICAgOTUsICAgOTEsICAgODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsCi0gICAgICAg
NDMsICAgNDAsICAgMjcsICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MjUsICA0MjUsICA0MjUs
Ci0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUsICA0MjUsICA0
MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0gICAgICA0MjUs
ICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCi0g
ICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUKLQorICAgICAgICA1LCAgICA1LCAgIDEzLCAgIDE3
LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAg
IDMzLCAgIDQyLCAgIDIxLCAgIDM0LCAgIDM0LCAgIDE5LCAgIDE3LCAgIDIxLAorICAgICAgIDQy
LCAgIDEzLCAgIDM1LCAgNDYzLCAgIDM1LCAgIDQ0LCAgIDMzLCAgIDQyLCAgIDM1LCAgIDQ0LAor
ICAgICAgIDIxLCAgIDIyLCAgNDU1LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIy
LCAgIDIyLAorICAgICAgIDIzLCAgIDU1LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIyLAorICAgICAgIDI2LCAgIDM2LCAgIDUxLCAgNDU0LCAgIDIyLCAgIDM4
LCAgIDUxLCAgIDM4LCAgIDIzLCAgIDM3LAorCisgICAgICA0NTMsICAgMzYsICAgMjIsICAgMzcs
ICAgMzYsICAgMzksICAgMzgsICAgMjYsICAgMzcsICAgMjYsCisgICAgICAgMjYsICAgMjMsICAg
NDEsICAgMzksICAgMzcsICAgMzksICAgNDUsICAgNDcsICAgMzksICAgMjIsCisgICAgICAgNDEs
ICAgNTUsICAxMzUsICAxNDYsICAgMzksICAxNDYsICAgNDksICAgNTAsICAxMTIsICAgNDUsCisg
ICAgICAgNTAsICAgNDEsICAgNDcsICAgNDksICAgNDksICAgNDcsICAgNTIsICAxMzUsICAgNTAs
ICAxMjIsCisgICAgICAgNTIsICAxMTIsICA0NTIsICAgNDksICAgNDksICAgNTAsICAgNDksICAx
MjIsICA0NTEsICAgNTIsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzgsICAgNzgsICAgNzgsCisgICAgICAgNzgsICAgNzgsICAgNzgsICAgNzgsICA0
NTAsICAxMjAsICAgNzQsICAxNDIsICAxMjAsICAxMjAsCisgICAgICAxNjgsICAxNjgsICAxMjAs
ICAgNzgsICAxMjAsICAxNDIsICAxOTQsICAxOTQsICAxOTQsICAgNzQsCisgICAgICAyMTgsICAy
MTgsICAyMTgsICA0MTcsICA0MTcsICAgNzksICAgNzgsICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICA0NDgsICAgODAsICAgODAsICAgODAsICAg
ODAsCisKKyAgICAgICA4MCwgICA4MCwgICA4MCwgICA3OSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1
NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NiwgIDQ0NiwgICA4MCwgICA4MSwgIDQ0NSwgICA4MSwg
ICA3OSwgIDQ0NCwgICA4MSwgICA4MSwKKyAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4
MSwgICA4MCwgICA4MywgIDIxNCwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgIDIxNCwgIDIyOSwgIDIyOSwgIDIyOSwgIDQ0MywKKyAgICAgIDE1MiwgIDQ0
MiwgIDE1MiwgIDQ0MCwgICA4MywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKKyAgICAg
IDE1MiwgIDE1MiwgIDIzNywgIDIzNywgIDIzNywgIDQzOSwgIDQzOCwgICA4MywgIDE1NCwgIDE1
NCwKKyAgICAgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDI0NSwgIDI0NSwgIDI0NSwg
IDQzNywgIDQzNiwKKyAgICAgIDE1NSwgIDQzNSwgIDE1NSwgIDQzNCwgIDE1NCwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDI0OSwgIDI0OSwgIDI0OSwg
IDQzMywgIDQzMiwgIDE1NCwgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1
NywgIDE1NywgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwKKworICAgICAgMjIyLCAgMjIy
LCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjIzLCAgMjI0LAorICAgICAg
MjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI1LCAgMjI1LCAgMjI1LCAgMjI1
LAorICAgICAgMjI1LCAgMjI1LCAgMjI1LCAgMjU1LCAgMjU1LCAgMjU1LCAgMzg4LCAgMzg4LCAg
Mzg4LCAgNDMwLAorICAgICAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIz
LCAgNDIyLCAgNDIxLCAgMzg4LAorICAgICAgNDIwLCAgMzg4LCAgNDU5LCAgNDU5LCAgNDU5LCAg
NDU5LCAgNDYwLCAgNDYwLCAgNDYxLCAgNDYxLAorICAgICAgNDYyLCAgNDE5LCAgNDYyLCAgNDYy
LCAgNDE4LCAgNDE2LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LAorICAgICAgNDAzLCAgNDAyLCAg
NDAwLCAgMzk5LCAgMzk4LCAgMzk1LCAgMzk0LCAgMzkyLCAgMzg5LCAgMzg3LAorICAgICAgMzg2
LCAgMzg1LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LAor
ICAgICAgMzczLCAgMzcyLCAgMzcxLCAgMzY1LCAgMzYyLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2
LCAgMzU1LAorICAgICAgMzUzLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ2LCAgMzQ1LCAg
MzQzLCAgMzQxLCAgMzQwLAorCisgICAgICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAz
MzQsICAzMzIsICAzMzEsICAzMzAsICAzMjksCisgICAgICAzMjgsICAzMjcsICAzMjYsICAzMjUs
ICAzMjQsICAzMjAsICAzMTksICAzMTYsICAzMDUsICAzMDEsCisgICAgICAzMDAsICAyOTksICAy
OTgsICAyOTEsICAyOTAsICAyODksICAyODQsICAyODMsICAyODIsICAyODEsCisgICAgICAyODAs
ICAyNzksICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksCisg
ICAgICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNTQs
ICAyNTMsCisgICAgICAyNTIsICAyNTEsICAyNTAsICAyNDgsICAyNDQsICAyNDIsICAyNDEsICAy
NDAsICAyMzYsICAyMzUsCisgICAgICAyMzQsICAyMzMsICAyMzIsICAyMzEsICAyMjgsICAyMjYs
ICAyMjEsICAyMjAsICAyMTksICAyMTcsCisgICAgICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAy
MTEsICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsCisgICAgICAyMDUsICAyMDQsICAyMDMs
ICAyMDIsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAx
OTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsICAxODUsCisKKyAg
ICAgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwg
IDE3NCwKKyAgICAgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwgIDE2MywKKyAgICAgIDE2MiwgIDE0NywgIDE0NSwgIDE0NCwgIDE0MywgIDE0MSwg
IDE0MCwgIDEzOSwgIDEzOCwgIDEzNywKKyAgICAgIDEzNiwgIDEzNCwgIDEzMywgIDEzMiwgIDEz
MSwgIDEzMCwgIDEyOSwgIDEyOCwgIDEyNywgIDEyNiwKKyAgICAgIDEyNSwgIDEyNCwgIDEyMywg
IDEyMSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywKKyAgICAgIDExMSwgIDEx
MCwgIDEwOSwgIDEwOCwgIDEwNywgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwKKyAgICAg
IDEwMSwgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwgICA5MSwgICA4NywgICA2
MCwKKyAgICAgICA1MywgICA0OCwgICA0NiwgICA0MywgICA0MCwgICAyNywgICAyNCwgICAxNiwg
ICAxMSwgICAgNywKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1
OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKyAgICAgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwg
IDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKKworICAgICAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4
LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAorICAgICAg
NDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAg
NDU4LCAgNDU4LAorICAgICAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4
LCAgNDU4CiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291
bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2Fu
X21hdGNoX2VvbFsxNDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbMTU2XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MCw3ICs3ODEs
NyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CiAK
IC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNo
CiAgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCkBAIC03NzEsNyArNzky
LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuXwogI2RlZmluZSBZ
WV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC03ODYsNiArODA3LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVT
IExFWEVSIChnbHNsYQogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKICNpbmNsdWRlICJnbHNs
YW5nX3RhYi5oIgogCkBAIC04MjEsOCArODQzLDggQEAgc3RydWN0IHl5Z3V0c190CiAgICAgc2l6
ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCiAgICAg
WVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5
LiAqLwogICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIGludCB5eV9uX2NoYXJzOwotICAgIGlu
dCB5eWxlbmdfcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXls
ZW5nX3I7CiAgICAgY2hhciAqeXlfY19idWZfcDsKICAgICBpbnQgeXlfaW5pdDsKICAgICBpbnQg
eXlfc3RhcnQ7CkBAIC04NzUsNyArODk3LDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKIAogdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CiAKLWludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3l5
X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogY2hhciAqeXlnZXRf
dGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKQEAgLTEwODYsMTMgKzExMDgsMTMgQEAgeXlf
bWF0Y2g6CiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQyNiApCisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ1OSApCiAJCQkJCXl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQy
NSApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDU4ICk7CiAJCXl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZTsKIApAQCAtMTQ4MSwyMjAgKzE1MDMsMjUyIEBAIFlZX1JVTEVf
U0VUVVAKIAlZWV9CUkVBSwogY2FzZSA5MDoKIFlZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxF
X1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQp
OyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9CiAJWVlfQlJFQUsKLWNhc2Ug
OTE6CitjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5
dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MjoK
K2Nhc2UgMTAwOgogWVlfUlVMRV9TRVRVUAogeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAlZWV9CUkVBSwotY2FzZSA5MzoKK2Nh
c2UgMTAxOgogWVlfUlVMRV9TRVRVUAoteyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIkludmFs
aWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Cit7IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1i
ZXIuIiwgeXl0ZXh0KTsgY29udGV4dC0+cmVjb3ZlcigpOyByZXR1cm4gMDt9CiAJWVlfQlJFQUsK
LWNhc2UgOTQ6CitjYXNlIDEwMjoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguaSA9IHN0
cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNh
c2UgOTU6CitjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRp
Y19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgOTY6CitjYXNlIDEwNDoKIFlZX1JVTEVfU0VUVVAKIHsgeXlsdmFs
LT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZM
T0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTc6CitjYXNlIDEwNToKIFlZX1JVTEVf
U0VUVVAKIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRl
eHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CiAJWVlfQlJFQUsKLWNhc2UgOTg6CitjYXNl
IDEwNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQogCVlZX0JSRUFL
Ci1jYXNlIDk5OgorY2FzZSAxMDc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oU1VCX0FTU0lH
Tik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDA6CitjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKIHsg
IHJldHVybihNVUxfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwMToKK2Nhc2UgMTA5Ogog
WVlfUlVMRV9TRVRVUAogeyAgcmV0dXJuKERJVl9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTAyOgorY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMDM6CitjYXNlIDExMToKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVy
bihMRUZUX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDQ6CitjYXNlIDExMjoKIFlZX1JV
TEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9BU1NJR04pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTA1
OgorY2FzZSAxMTM6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KIAlZ
WV9CUkVBSwotY2FzZSAxMDY6CitjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihY
T1JfQVNTSUdOKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEwNzoKK2Nhc2UgMTE1OgogWVlfUlVMRV9T
RVRVUAogeyAgcmV0dXJuKE9SX0FTU0lHTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMDg6CitjYXNl
IDExNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihJTkNfT1ApOyB9CiAJWVlfQlJFQUsKLWNh
c2UgMTA5OgorY2FzZSAxMTc6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oREVDX09QKTsgfQog
CVlZX0JSRUFLCi1jYXNlIDExMDoKK2Nhc2UgMTE4OgogWVlfUlVMRV9TRVRVUAogeyAgcmV0dXJu
KEFORF9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTE6CitjYXNlIDExOToKIFlZX1JVTEVfU0VU
VVAKIHsgIHJldHVybihPUl9PUCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMTI6CitjYXNlIDEyMDoK
IFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihYT1JfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTEz
OgorY2FzZSAxMjE6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVfT1ApOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTE0OgorY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oR0VfT1Ap
OyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE1OgorY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCiB7ICBy
ZXR1cm4oRVFfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE2OgorY2FzZSAxMjQ6CiBZWV9SVUxF
X1NFVFVQCiB7ICByZXR1cm4oTkVfT1ApOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTE3OgorY2FzZSAx
MjU6CiBZWV9SVUxFX1NFVFVQCiB7ICByZXR1cm4oTEVGVF9PUCk7IH0KIAlZWV9CUkVBSwotY2Fz
ZSAxMTg6CitjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKIHsgIHJldHVybihSSUdIVF9PUCk7IH0K
IAlZWV9CUkVBSwotY2FzZSAxMTk6CitjYXNlIDEyNzoKIFlZX1JVTEVfU0VUVVAKIHsgY29udGV4
dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CiAJWVlfQlJFQUsK
LWNhc2UgMTIwOgorY2FzZSAxMjg6CiBZWV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjE6
CitjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQogCVlZ
X0JSRUFLCi1jYXNlIDEyMjoKK2Nhc2UgMTMwOgogWVlfUlVMRV9TRVRVUAogeyBpZiAoY29udGV4
dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09N
TUEpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTIzOgorY2FzZSAxMzE6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybihDT0xPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjQ6CitjYXNlIDEzMjoKIFlZX1JV
TEVfU0VUVVAKIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7
IH0KIAlZWV9CUkVBSwotY2FzZSAxMjU6CitjYXNlIDEzMzoKIFlZX1JVTEVfU0VUVVAKIHsgY29u
dGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsg
cmV0dXJuKExFRlRfUEFSRU4pOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTI2OgorY2FzZSAxMzQ6CiBZ
WV9SVUxFX1NFVFVQCiB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdI
VF9QQVJFTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjc6CitjYXNlIDEzNToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMjg6CitjYXNl
IDEzNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CiAJWVlfQlJF
QUsKLWNhc2UgMTI5OgorY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCiB7IEJFR0lOKEZJRUxEUyk7
ICByZXR1cm4oRE9UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzMDoKK2Nhc2UgMTM4OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4oQkFORyk7IH0KIAlZWV9CUkVBSwotY2FzZSAxMzE6CitjYXNlIDEz
OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKERBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTMy
OgorY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihUSUxERSk7IH0KIAlZWV9CUkVB
SwotY2FzZSAxMzM6CitjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFBMVVMpOyB9
CiAJWVlfQlJFQUsKLWNhc2UgMTM0OgorY2FzZSAxNDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
bihTVEFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNToKK2Nhc2UgMTQzOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oU0xBU0gpOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTM2OgorY2FzZSAxNDQ6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybihQRVJDRU5UKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzNzoK
K2Nhc2UgMTQ1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KIAlZWV9C
UkVBSwotY2FzZSAxMzg6CitjYXNlIDE0NjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuKFJJR0hU
X0FOR0xFKTsgfQogCVlZX0JSRUFLCi1jYXNlIDEzOToKK2Nhc2UgMTQ3OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQogCVlZX0JSRUFLCi1jYXNlIDE0MDoKK2Nhc2Ug
MTQ4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4oQ0FSRVQpOyB9CiAJWVlfQlJFQUsKLWNhc2Ug
MTQxOgorY2FzZSAxNDk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihBTVBFUlNBTkQpOyB9CiAJ
WVlfQlJFQUsKLWNhc2UgMTQyOgorY2FzZSAxNTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybihR
VUVTVElPTik7IH0KIAlZWV9CUkVBSwotY2FzZSAxNDM6CitjYXNlIDE1MToKIFlZX1JVTEVfU0VU
VVAKIHsgCiAgICAgQkVHSU4oSU5JVElBTCk7CkBAIC0xNzAyLDEyICsxNzU2LDEyIEBAIFlZX1JV
TEVfU0VUVVAKICAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOwogfQogCVlZX0JSRUFLCi1jYXNl
IDE0NDoKK2Nhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAoge30KIAlZWV9CUkVBSwotY2FzZSAxNDU6
Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDE1MzoKKy8qIHJ1bGUgMTUzIGNh
biBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgIH0KIAlZWV9CUkVBSwpAQCAtMTcxNiwx
MSArMTc3MCwxMSBAQCBjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKIGNhc2UgWVlfU1RBVEVf
RU9GKEZJRUxEUyk6CiB7IGNvbnRleHQtPkFmdGVyRU9GID0gdHJ1ZTsgeXl0ZXJtaW5hdGUoKTsg
fQogCVlZX0JSRUFLCi1jYXNlIDE0NjoKK2Nhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAogeyBjb250
ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVy
biAwOyB9CiAJWVlfQlJFQUsKLWNhc2UgMTQ3OgorY2FzZSAxNTU6CiBZWV9SVUxFX1NFVFVQCiBF
Q0hPOwogCVlZX0JSRUFLCkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9u
ZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAKIAllbHNlCiAJCXsKLQkJCWludCBudW1fdG9fcmVhZCA9
CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQogCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKIAogCQl3aGlsZSAoIG51bV90b19y
ZWFkIDw9IDAgKQpAQCAtMTkyMyw3ICsxOTc3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IAogCiAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQogCQkJCXsK
LQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisJCQkJeXlfc2l6ZV90IG5l
d19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwogCiAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkK
IAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwpAQCAtMTk1NCw3ICsy
MDA4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCiAJCS8q
IFJlYWQgaW4gbW9yZSBkYXRhLiAqLwogCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotCQkJeXlnLT55eV9uX2NoYXJzLCAo
c2l6ZV90KSBudW1fdG9fcmVhZCApOworCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCAp
OwogCiAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKIAkJfQpAQCAtMjAxNiw3ICsyMDcwLDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IAogCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0
YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDQyNiApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDU5ICkKIAkJCQl5
eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkg
eXlfY107CkBAIC0yMDQ1LDExICsyMDk5LDExIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCAKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQyNiApCisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NTkgKQogCQkJeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlf
bnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5
eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MjUpOworCXl5X2lzX2phbSA9ICh5eV9j
dXJyZW50X3N0YXRlID09IDQ1OCk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CiB9CkBAIC0yMDc5LDcgKzIxMzMsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgCiAKIAkJZWxzZQogCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQl5
eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwogCQkJ
Kyt5eWctPnl5X2NfYnVmX3A7CiAKIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlz
Y2FubmVyICkgKQpAQCAtMjEwMyw3ICsyMTU3LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IAogCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKIAkJCQkJewog
CQkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCQlyZXR1cm4gRU9GOworCQkJCQkJ
cmV0dXJuIDA7CiAKIAkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ICkKIAkJCQkJCVlZX05FV19GSUxFOwpAQCAtMjM2Niw3ICsyNDIwLDcgQEAgdm9pZCB5eXBvcF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2NhbgogICovCiBzdGF0aWMgdm9pZCB5eWVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLQlpbnQgbnVtX3RvX2FsbG9jOwor
CXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykg
ewpAQCAtMjQ2NCwxMiArMjUxOCwxMSBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqIEBy
ZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCi1ZWV9C
VUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAg
X3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorWVlfQlVGRkVSX1NUQVRFIHl5X3Nj
YW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xl
biAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpi
dWY7Ci0JeXlfc2l6ZV90IG47Ci0JaW50IGk7CisJeXlfc2l6ZV90IG4sIGk7CiAgICAgCiAJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yNjE5LDcgKzI2NzIsNyBAQCBG
SUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAvKiogR2V0IHRoZSBsZW5ndGgg
b2YgdGhlIGN1cnJlbnQgdG9rZW4uCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KICAqLwotaW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit5eV9zaXpl
X3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgcmV0dXJuIHl5bGVu
ZzsKQEAgLTI4OTQsMTAgKzI5NDcsMTUgQEAgdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYQogCiAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgogCisjaWYgIUFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiBleHRlcm4gIkMiIHsKIC8vIFByZXByb2Nlc3NvciBp
bnRlcmZhY2UuCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIK
IAorZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpu
YW1lLCBpbnQgdmFsdWUpOworCiAjZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKICAgICBUUGFy
c2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKICAgICBzdHJ1
Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwpA
QCAtMjkwNiwyNiArMjk2NCwyNiBAQCBleHRlcm4gIkMiIHsKIHZvaWQgQ1BQRGVidWdMb2dNc2co
Y29uc3QgY2hhciAqbXNnKQogewogICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0
LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworICAgIGNvbnRleHQt
PnRyYWNlKG1zZyk7CiB9CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCiB7CiAgICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXls
aW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2cs
ICIiKTsKIH0KIAogdm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQogewogICAg
IFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiKTsKICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiB9CiAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQor
dm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7CiAgICAgU0VUVVBfQ09O
VEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7Cisg
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKIH0KIApAQCAtMjk4MCw4OCArMzAzOCwxNSBAQCB2b2lkIERlY0xpbmVOdW1iZXIoKQog
dm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKIHsK
ICAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0
aW1pemUiKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNt
cCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIg
ZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0s
ICJvbiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRy
dWU7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCi0gICAgICAg
ICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBl
Y3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAi
KSIpKSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVu
ZCAnb3B0aW1pemUnIHByYWdtYSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKLSAgICAgICAgaWYg
KG51bVRva2VucyAhPSA0KSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHBy
YWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7Ci0gICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5
d29yZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRv
a2Vuc1syXSwgIm9mZiIpKQotICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1
ZyA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
XCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
IilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUFJBR01BX1RBQkxFCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQotICAgICAgICAv
LyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAgICAgICAvLyBGb3Ig
bm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5v
dCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRh
dGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAgICAgICAvLyAjcHJh
Z21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRp
b24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1l
IGluIHByYWdtYVRhYmxlLgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAgIGlmIChudW1Ub2tl
bnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwg
IikiKSkgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRh
YmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAg
ICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVy
LT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAgICAgICAgICAgIH0g
ICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Ci0gICAgICAgICAg
ICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQykt
PmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0
ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5n
KHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkp
IHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRv
a2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFBSQUdNQV9UQUJM
RQotICAgIH0KKworICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOworICAgIGlmIChzdHJj
bXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKKyAgICBpZiAoc3RyY21wKHRva2Vuc1sz
XSwgIikiKSAhPSAwKSByZXR1cm47CisKKyAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3Rp
dmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKIH0KIAotdm9pZCBTdG9yZVN0cihj
aGFyICpzdHJpbmcpCit2b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKICAgICBT
RVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0cmluZyBzdHJTcmM7CkBAIC0zMDgzLDcxICszMDY4
LDMzIEBAIHZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCiAgICAgY29udGV4dC0+SGFzaEVyck1zZyA9
ICIiOwogfQogCi1UQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCi17
Ci0gICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBF
QmhSZXF1aXJlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKLSAg
ICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKLSAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwg
YmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKLSAgICBlbHNlIGlmICghc3Ry
Y21wKCJ3YXJuIiwgYmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoV2FybjsKLSAgICBlbHNl
IHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhh
dmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIEVC
aERpc2FibGU7Ci0gICAgfSAgICAgICAgCi19Ci0KIHZvaWQgdXBkYXRlRXh0ZW5zaW9uQmVoYXZp
b3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCiB7CiAgICAgU0VU
VVBfQ09OVEVYVChjcHApOwotICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9y
KGJlaGF2aW9yKTsKLSAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVy
OwotICAgIFRTdHJpbmcgbXNnOwotICAgIAotICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBl
eHRlbnNpb24KLSAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKLSAgICAgICAgaWYg
KGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7
Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2
ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpdGVyID0gY29udGV4dC0+ZXh0
ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlv
ci5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9y
VmFsOwotICAgICAgICB9ICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBpdGVyID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKLSAgICAgICAg
aWYgKGl0ZXIgPT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToK
LSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikg
KyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKLSAgICAgICAgICAgIGNh
c2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKLSAgICAgICAgICAgICAg
ICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBw
b3J0ZWQiOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4V2FybmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KKyAgICBjb250ZXh0LT5oYW5k
bGVFeHRlbnNpb25EaXJlY3RpdmUoeXlsaW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKIH0KIH0g
IC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAK
IGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nh
bm5lcikgewotICAgIGludCBsZW47CisgICAgaW50IGxlbiA9IDA7CiAKLSAgICBpZiAoKGxlbiA9
IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKGxlbiA+PSBtYXhfc2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZm
ZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJF
SkVDVCIpOworI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCisgICAgcHA6OlRva2VuIHRv
a2VuOworICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2Vu
KTsKKyAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52
YWx1ZS5zaXplKCk7CisgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3NpemUpKQorICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAgIHl5c2V0X2xp
bmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24u
bGluZSkseXlzY2FubmVyKTsKKyNlbHNlCisgICAgbGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3Np
emUpOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogCi0gICAgYnVmW2xl
bl0gPSAnICc7Ci0gICAgcmV0dXJuIGxlbisxOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpCisg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKKyAgICBlbHNl
IGlmIChsZW4gPiAwKQorICAgICAgICBidWZbbGVuKytdID0gJyAnOworICAgIHJldHVybiBsZW47
CiB9CiAKIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewpAQCAtMzE3OCw5ICsz
MTI1LDkgQEAgdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbgogICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7
CiAKICAgICBpZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKLSAgICAgICAgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sIHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgICAgICBjb250ZXh0
LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5leHBlY3RlZCBFT0YiKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCB5eXRleHQsICIiKTsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0KTsKICAgICB9
CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogfQpAQCAtMzE5OSwyMiArMzE0Niw0MyBAQCBpbnQg
Z2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250CiAgICAgaWYgKHNjYW5uZXIgPT0g
TlVMTCkgcmV0dXJuIDA7CiAgICAgCiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7Ci0gICAg
cmV0dXJuIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CisgICAgeXlsZXhfZGVzdHJveShzY2FubmVy
KTsKKworI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgorICAgIEZpbmFsaXplUHJlcHJv
Y2Vzc29yKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBnbHNsYW5nX3NjYW4o
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
LAotICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworaW50IGdsc2xh
bmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10sCisgICAgICAgICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKICAg
ICB5eXJlc3RhcnQoTlVMTCxjb250ZXh0LT5zY2FubmVyKTsKICAgICB5eXNldF9saW5lbm8oRW5j
b2RlU291cmNlTG9jKDAsIDEpLGNvbnRleHQtPnNjYW5uZXIpOwogICAgIGNvbnRleHQtPkFmdGVy
RU9GID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCisKKyAgICAvLyBJ
bml0aWFsaXplIHByZXByb2Nlc3Nvci4KKyNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgor
ICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkp
CisgICAgICAgIHJldHVybiAxOwogICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+UGFX
aGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFB
cmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKICAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsK
KyAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiAxOworI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgor
CisgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCisgICAgY29uc3QgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAg
Zm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlv
ci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7
CisjaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKKyAgICAgICAgY29udGV4dC0+cHJlcHJv
Y2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOworI2Vsc2UKKyAg
ICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7CisjZW5kaWYK
KyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMTIyNzM4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yODYsNiArMjg2LDkgQEAKICNpbmNsdWRlICJjb21w
aWxlci9QYXJzZUhlbHBlci5oIgogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCisj
ZGVmaW5lIFlZRU5BQkxFX05MUyAwCisjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisKICNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgogCiAKQEAgLTM2MCwyMSArMzYzLDIx
IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGUKICNkZWZpbmUgRlJB
R19WRVJUX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X0ZSQUdNRU5UX1NIQURFUiAmJiAgXAogICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNI
X1ZFUlRFWF9TSEFERVIpIHsgIFwKLSAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAg
ICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hh
ZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAg
fSAgXAogfQogCiAjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKICAgICBpZiAoY29udGV4
dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCi0gICAgICAgIGNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNo
YWRlcnMgb25seSAiLCBTKTsgIFwKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAg
IH0gIFwKIH0KIAogI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAogICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAotICAgICAgICBjb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMpOyAgXAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CiAgICAgfSAgXAogfQpAQCAtNDMxLDcgKzQzNCw3IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlw
ZV9pbnQxNjsKICNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCiAKICNpZm5k
ZWYgWVlfCi0jIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyBpZiBZ
WUVOQUJMRV9OTFMKICMgIGlmIEVOQUJMRV9OTFMKICMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBkZWZpbmUgWVlfKG1zZ2lkKSBk
Z2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKQEAgLTc0OCwyNyArNzUxLDI3IEBAIHN0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9CiAvKiBZWVJMSU5FW1lZTl0gLS0gc291
cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAxNjUsICAgMTY1
LCAgIDIwMCwgICAyMDMsICAgMjE2LCAgIDIyMSwgICAyMjYsICAgMjMyLCAgIDIzNSwKLSAgICAg
MzA4LCAgIDMxMSwgICA0MjAsICAgNDMwLCAgIDQ0MywgICA0NTEsICAgNTUwLCAgIDU1MywgICA1
NjEsICAgNTY1LAotICAgICA1NzIsICAgNTc2LCAgIDU4MywgICA1ODksICAgNTk4LCAgIDYwNiwg
ICA2NjEsICAgNjY4LCAgIDY3OCwgICA2ODEsCi0gICAgIDY5MSwgICA3MDEsICAgNzIyLCAgIDcy
MywgICA3MjQsICAgNzI5LCAgIDczMCwgICA3MzksICAgNzUxLCAgIDc1MiwKLSAgICAgNzYwLCAg
IDc3MSwgICA3NzUsICAgNzc2LCAgIDc4NiwgICA3OTYsICAgODA2LCAgIDgxOSwgICA4MjAsICAg
ODMwLAotICAgICA4NDMsICAgODQ3LCAgIDg1MSwgICA4NTUsICAgODU2LCAgIDg2OSwgICA4NzAs
ICAgODgzLCAgIDg4NCwgICA4OTcsCi0gICAgIDg5OCwgICA5MTUsICAgOTE2LCAgIDkyOSwgICA5
MzAsICAgOTMxLCAgIDkzMiwgICA5MzMsICAgOTM3LCAgIDk0MCwKLSAgICAgOTUxLCAgIDk1OSwg
ICA5ODYsICAgOTkxLCAgIDk5OCwgIDEwMzYsICAxMDM5LCAgMTA0NiwgIDEwNTQsICAxMDc1LAot
ICAgIDEwOTYsICAxMTA3LCAgMTEzNiwgIDExNDEsICAxMTUxLCAgMTE1NiwgIDExNjYsICAxMTY5
LCAgMTE3MiwgIDExNzUsCi0gICAgMTE4MSwgIDExODgsICAxMTkxLCAgMTIxMywgIDEyMzEsICAx
MjU1LCAgMTI3OCwgIDEyODIsICAxMzAwLCAgMTMwOCwKLSAgICAxMzQwLCAgMTM2MCwgIDE0NDks
ICAxNDU4LCAgMTQ4MSwgIDE0ODQsICAxNDkwLCAgMTQ5OCwgIDE1MDYsICAxNTE0LAotICAgIDE1
MjQsICAxNTMxLCAgMTUzNCwgIDE1MzcsICAxNTQzLCAgMTU0NiwgIDE1NjEsICAxNTY1LCAgMTU2
OSwgIDE1NzMsCi0gICAgMTU4MiwgIDE1ODcsICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAg
MTYxMiwgIDE2MTcsICAxNjIyLCAgMTYyNywKLSAgICAxNjMzLCAgMTYzOSwgIDE2NDUsICAxNjUw
LCAgMTY1NSwgIDE2NjQsICAxNjczLCAgMTY3OCwgIDE2OTEsICAxNjkxLAotICAgIDE3MDUsICAx
NzA1LCAgMTcxNCwgIDE3MTcsICAxNzMyLCAgMTc2OCwgIDE3NzIsICAxNzc4LCAgMTc4NiwgIDE4
MDIsCi0gICAgMTgwNiwgIDE4MTAsICAxODExLCAgMTgxNywgIDE4MTgsICAxODE5LCAgMTgyMCwg
IDE4MjEsICAxODI1LCAgMTgyNiwKLSAgICAxODI2LCAgMTgyNiwgIDE4MzYsICAxODM3LCAgMTg0
MSwgIDE4NDEsICAxODQyLCAgMTg0MiwgIDE4NDcsICAxODUwLAotICAgIDE4NjAsICAxODYzLCAg
MTg2OSwgIDE4NzAsICAxODc0LCAgMTg4MiwgIDE4ODYsICAxODk2LCAgMTkwMSwgIDE5MTgsCi0g
ICAgMTkxOCwgIDE5MjMsICAxOTIzLCAgMTkzMCwgIDE5MzAsICAxOTM4LCAgMTk0MSwgIDE5NDcs
ICAxOTUwLCAgMTk1NiwKLSAgICAxOTYwLCAgMTk2NywgIDE5NzQsICAxOTgxLCAgMTk4OCwgIDE5
OTksICAyMDA4LCAgMjAxMiwgIDIwMTksICAyMDIyLAotICAgIDIwMjgsICAyMDI4CisgICAgICAg
MCwgICAxNjgsICAgMTY4LCAgIDIwMywgICAyMDYsICAgMjE5LCAgIDIyNCwgICAyMjksICAgMjM1
LCAgIDIzOCwKKyAgICAgMzE3LCAgIDMyMCwgICA0MjksICAgNDM5LCAgIDQ1MiwgICA0NjAsICAg
NTYwLCAgIDU2MywgICA1NzEsICAgNTc1LAorICAgICA1ODIsICAgNTg2LCAgIDU5MywgICA1OTks
ICAgNjA4LCAgIDYxNiwgICA2NzEsICAgNjc4LCAgIDY4OCwgICA2OTEsCisgICAgIDcwMSwgICA3
MTEsICAgNzMyLCAgIDczMywgICA3MzQsICAgNzM5LCAgIDc0MCwgICA3NDksICAgNzYxLCAgIDc2
MiwKKyAgICAgNzcwLCAgIDc4MSwgICA3ODUsICAgNzg2LCAgIDc5NiwgICA4MDYsICAgODE2LCAg
IDgyOSwgICA4MzAsICAgODQwLAorICAgICA4NTMsICAgODU3LCAgIDg2MSwgICA4NjUsICAgODY2
LCAgIDg3OSwgICA4ODAsICAgODkzLCAgIDg5NCwgICA5MDcsCisgICAgIDkwOCwgICA5MjUsICAg
OTI2LCAgIDkzOSwgICA5NDAsICAgOTQxLCAgIDk0MiwgICA5NDMsICAgOTQ3LCAgIDk1MCwKKyAg
ICAgOTYxLCAgIDk2OSwgICA5OTYsICAxMDAxLCAgMTAwOCwgIDEwNDYsICAxMDQ5LCAgMTA1Niwg
IDEwNjQsICAxMDg1LAorICAgIDExMDYsICAxMTE3LCAgMTE0NiwgIDExNTEsICAxMTYxLCAgMTE2
NiwgIDExNzYsICAxMTc5LCAgMTE4MiwgIDExODUsCisgICAgMTE5MSwgIDExOTgsICAxMjAxLCAg
MTIyMywgIDEyNDEsICAxMjY1LCAgMTI4OCwgIDEyOTIsICAxMzEwLCAgMTMxOCwKKyAgICAxMzUw
LCAgMTM3MCwgIDE0NTksICAxNDY4LCAgMTQ5MSwgIDE0OTQsICAxNTAwLCAgMTUwOCwgIDE1MTYs
ICAxNTI0LAorICAgIDE1MzQsICAxNTQxLCAgMTU0NCwgIDE1NDcsICAxNTUzLCAgMTU1NiwgIDE1
NzEsICAxNTc1LCAgMTU3OSwgIDE1ODMsCisgICAgMTU5MiwgIDE1OTcsICAxNjAyLCAgMTYwNywg
IDE2MTIsICAxNjE3LCAgMTYyMiwgIDE2MjcsICAxNjMyLCAgMTYzNywKKyAgICAxNjQzLCAgMTY0
OSwgIDE2NTUsICAxNjYwLCAgMTY2NSwgIDE2NzQsICAxNjgzLCAgMTY4OCwgIDE3MDEsICAxNzAx
LAorICAgIDE3MTUsICAxNzE1LCAgMTcyNCwgIDE3MjcsICAxNzQyLCAgMTc3OCwgIDE3ODIsICAx
Nzg4LCAgMTc5NiwgIDE4MTIsCisgICAgMTgxNiwgIDE4MjAsICAxODIxLCAgMTgyNywgIDE4Mjgs
ICAxODI5LCAgMTgzMCwgIDE4MzEsICAxODM1LCAgMTgzNiwKKyAgICAxODM2LCAgMTgzNiwgIDE4
NDYsICAxODQ3LCAgMTg1MSwgIDE4NTEsICAxODUyLCAgMTg1MiwgIDE4NTcsICAxODYwLAorICAg
IDE4NzAsICAxODczLCAgMTg3OSwgIDE4ODAsICAxODg0LCAgMTg5MiwgIDE4OTYsICAxOTA2LCAg
MTkxMSwgIDE5MjgsCisgICAgMTkyOCwgIDE5MzMsICAxOTMzLCAgMTk0MCwgIDE5NDAsICAxOTQ4
LCAgMTk1MSwgIDE5NTcsICAxOTYwLCAgMTk2NiwKKyAgICAxOTcwLCAgMTk3NywgIDE5ODQsICAx
OTkxLCAgMTk5OCwgIDIwMDksICAyMDE4LCAgMjAyMiwgIDIwMjksICAyMDMyLAorICAgIDIwMzgs
ICAyMDM4CiB9OwogI2VuZGlmCiAKQEAgLTE0MDQsNyArMTQwNyw3IEBAIHdoaWxlIChZWUlEICgw
KSkKICAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0
aW9ucyB3ZSBrbm93LiAgKi8KIAogI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBkZWZp
bmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgaWYgWVlMVFlQ
RV9JU19UUklWSUFMCiAjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwK
ICAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCiAJICAgICAgKExvYykuZmly
c3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCkBAIC0yMTU3LDcgKzIxNjAsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5zeW1ib2w7CiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CiAgICAgICAg
IGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwpAQCAtMjE2Niw3ICsy
MTY5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlz
IGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAogICAgICAgICAg
ICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidmFyaWFi
bGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwpA
QCAtMjIwMSw3ICsyMjA0LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIC8vIGNoZWNrIGZvciBvdmVy
ZmxvdyBmb3IgY29uc3RhbnRzCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhYnMoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJm
bG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAgLTIyNDcsOSArMjI1MCw5
IEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgaWYgKCEoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5s
aW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3Rv
ciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1i
b2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMg
bm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0
eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIg
bGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJl
eHByZXNzaW9uIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CkBA
IC0yMjY2LDcgKzIyNjksMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSB8fCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CisgICAgICAgICAgICAgICAg
ICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8
PCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpIDw8ICInIjsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNBcnJheSgpKSB7CkBAIC0yMjc5LDcgKzIyODUsMTAgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+PSAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldEFy
cmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9m
IHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyIgPDwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLT5nZXRJQ29uc3QoKSA8PCAiJyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMjMzMCw3ICsyMzM5LDcgQEAgeXlyZWR1Y2U6CiAKICAg
ICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5Iiwg
Ii4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogCkBAIC0yMzc1LDcg
KzIzODQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZp
ZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVs
ZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBub24tc2NhbGFyIGZpZWxk
cyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dCgwKTsKQEAgLTIzOTMsNyArMjQwMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CiAgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUg
aGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFz
IG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOwogICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CkBAIC0yNDI1LDEzICsyNDM0LDEzIEBAIHl5cmVkdWNlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCoo
KmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBm
aWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1
cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMg
c3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFso
MykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgICAgICB9CkBAIC0y
NTMwLDkgKzI1MzksMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLwog
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBl
IiwgIkludGVybmFsIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1
aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwg
ImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2Fz
dDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVy
bU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3Ii
LCBleHRyYUluZm8uY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJP
UjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTI1NTYsNyArMjU2Niw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2
cUluT3V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRl
cm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAn
b3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNz
ZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1ODYsNyAr
MjU5Niw3IEBAIHl5cmVkdWNlOgogICBjYXNlIDE3OgogCiAgICAgewotICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qg
c3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMykgLSAoMyldLmludGVybSk7CiAgICAgO30KQEAgLTI2OTcsNyArMjcwNyw3IEBAIHl5cmVk
dWNlOgogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0
aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0
QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBv
cCA9IEVPcENvbnN0cnVjdEZsb2F0OwpAQCAtMzE5MSwxMiArMzIwMSwxMiBAQCB5eXJlZHVjZToK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24p
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAg
ICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25z
IG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1D
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSku
dHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVh
bGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBo
YXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMzI1Myw3ICszMjYzLDcgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCiAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZv
aWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZv
ciAnKHZvaWQpJyIsICJ2b2lkIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICBkZWxldGUgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOwog
ICAgICAgICB9IGVsc2UgewpAQCAtMzI2OCw3ICszMjc4LDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7
CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9
IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9
IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1
cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJu
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
ICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCkBA
IC0zMjg5LDcgKzMyOTksNyBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidFZvaWQpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgImlsbGVnYWwgdXNl
IG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQpAQCAt
MzQxMCw3ICszNDIwLDcgQEAgeXlyZWR1Y2U6CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN5bWJvbCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRl
Y2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50Iiwg
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKQEAgLTM1MzgsNyArMzU0OCw3IEBAIHl5cmVk
dWNlOgogICBjYXNlIDk4OgogCiAgICAgewotICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLmxpbmUsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3Vw
cG9ydGVkIiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAidW5zaXpl
ZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAg
ICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOwpAQCAtMzYx
Niw3ICszNjI2LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUuc2V0
QmFzaWMoRWJ0SW52YXJpYW50LCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmUpOwogICAgICAgICBpZiAoISh5eXZzcFsoMikgLSAoMildLmxleCkuc3lt
Ym9sKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJp
YW50IiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgInVuZGVj
bGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IDA7CkBAIC0zNjM1LDcgKzM2NDUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKIAogICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBz
dXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0
ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShm
YWxzZSk7CiAgICAgICAgIH0KQEAgLTM2NDYsMTkgKzM2NTYsMTkgQEAgeXlyZWR1Y2U6CiAKICAg
ICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBl
KS5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5l
LCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgogICAgICAg
ICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJv
b2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmll
clN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM5NDcsNyAr
Mzk1Nyw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuc3VwcG9ydGVk
IHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJz
YW1wbGVyRXh0ZXJuYWxPRVMiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckV4dGVybmFsT0VTIiwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKQEAgLTM5NjAsNyArMzk3MCw3IEBAIHl5cmVkdWNl
OgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRS
ZWN0IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lLCAidW5zdXBwb3J0ZWQgdHlwZSIsICJzYW1wbGVyMkRSZWN0Iik7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgRlJBR19WRVJUX09O
TFkoInNhbXBsZXIyRFJlY3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwpAQCAtNDQy
MSw3ICs0NDMxLDcgQEAgeXlyZWR1Y2U6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQg
aW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgyKV0ubGV4KS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBs
b29wcyIsICIiKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKQEAg
LTQ0MzIsNyArNDQ0Miw3IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2Vk
IGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9v
cHMiLCAiIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CkBAIC00NDQ0
LDcgKzQ0NTQsNyBAQCB5eXJlZHVjZToKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5
dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRG
dW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rp
b24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIDt9CkBAIC00NDU2LDEwICs0NDY2LDEwIEBAIHl5
cmVkdWNlOgogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUpOwogICAgICAgICBj
b250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lk
IGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2b2lkIGZ1
bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRG
dW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAi
cmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgz
KV0ubGV4KS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJy
ZXR1cm4iKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAg
IDt9CkBAIC00NTE3LDcgKzQ1MjcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5LgogICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVu
Y3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CkBAIC00NTI3LDcg
KzQ1MzcsNyBAQCB5eXJlZHVjZToKICAgICAgICAgLy8KICAgICAgICAgaWYgKGZ1bmN0aW9uLT5n
ZXROYW1lKCkgPT0gIm1haW4iKSB7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFBhcmFt
Q291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVy
KHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24g
Y2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Vm9pZCkgewpAQCAtNDU1OSw3ICs0NTY5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRh
YmxlLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+
c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAicmVkZWZpbml0aW9u
IiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5p
dGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxl
OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ2MDAsOSArNDYxMCw4IEBAIHl5cmVkdWNlOgogCiAg
ICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRp
bWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9ybWF0aW9uLiBU
aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1p
emUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRl
eHRQcmFnbWEuZGVidWcpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRB
c0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJh
Z21hVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5zZXRPcHRpbWl6ZShjb250ZXh0LT5wcmFnbWEoKS5vcHRpbWl6ZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKGNv
bnRleHQtPnByYWdtYSgpLmRlYnVnKTsKIAogICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybU5vZGUpICYmICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKSkKICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPnNldEVuZExpbmUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRFbmRMaW5lKCkpOwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTUgKzQzMywxNSBAQCBw
cm90ZWN0ZWQ6CiAKIHR5cGVkZWYgVFZlY3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5j
ZTsKIHR5cGVkZWYgVFZlY3RvcjxpbnQ+IFRRdWFsaWZpZXJMaXN0OwotdHlwZWRlZiBUTWFwPFRT
dHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJsZTsKKwogLy8KIC8vIE5vZGVzIHRoYXQgb3BlcmF0
ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgogLy8KIGNsYXNzIFRJbnRl
cm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBUSW50
ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZh
bHNlKSwgcHJhZ21hVGFibGUoMCksIGVuZExpbmUoMCksIHVzZUVtdWxhdGVkRnVuY3Rpb24oZmFs
c2UpIHsgfQotICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJh
dG9yKG8pLCBwcmFnbWFUYWJsZSgwKSwgdXNlRW11bGF0ZWRGdW5jdGlvbihmYWxzZSkgeyB9Ci0g
ICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorICAgIFRJbnRl
cm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFs
c2UpLCBlbmRMaW5lKDApLCB1c2VFbXVsYXRlZEZ1bmN0aW9uKGZhbHNlKSB7IH0KKyAgICBUSW50
ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgdXNlRW11bGF0
ZWRGdW5jdGlvbihmYWxzZSkgeyB9CisgICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IH0KIAogICAg
IHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlz
OyB9CiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKQEAgLTQ1
MiwxNCArNDUyLDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29u
c3QgeyByZXR1cm4gbmFtZTsgfQogCiAgICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRl
ZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRl
ZmluZWQ7IH0KKyAgICBib29sIGlzVXNlckRlZmluZWQoKSBjb25zdCB7IHJldHVybiB1c2VyRGVm
aW5lZDsgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9
CiAgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9CiAgICAgdm9pZCBz
ZXREZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBkOyB9CiAgICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0
dXJuIGRlYnVnOyB9Ci0gICAgdm9pZCBhZGRUb1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJs
ZSYgcFRhYmxlKTsKLSAgICBjb25zdCBUUHJhZ21hVGFibGUmIGdldFByYWdtYVRhYmxlKCkgY29u
c3QgeyByZXR1cm4gKnByYWdtYVRhYmxlOyB9CisKICAgICB2b2lkIHNldEVuZExpbmUoVFNvdXJj
ZUxvYyBsaW5lKSB7IGVuZExpbmUgPSBsaW5lOyB9CiAgICAgVFNvdXJjZUxvYyBnZXRFbmRMaW5l
KCkgY29uc3QgeyByZXR1cm4gZW5kTGluZTsgfQogCkBAIC00NzUsNyArNDc0LDYgQEAgcHJvdGVj
dGVkOgogCiAgICAgYm9vbCBvcHRpbWl6ZTsKICAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFU
YWJsZSAqcHJhZ21hVGFibGU7CiAgICAgVFNvdXJjZUxvYyBlbmRMaW5lOwogCiAgICAgLy8gSWYg
c2V0IHRvIHRydWUsIHJlcGxhY2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGNhbGwgd2l0aCBhbiBl
bXVsYXRlZCBvbmUKQEAgLTUzMyw2ICs1MzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwb3N0
VmlzaXQocG9zdFZpc2l0KSwKICAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwK
ICAgICAgICAgICAgIGRlcHRoKDApIHt9CisgICAgdmlydHVhbCB+VEludGVybVRyYXZlcnNlcigp
IHt9OwogCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQog
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24q
KSB7fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVk
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9v
c2luY2x1ZGUuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw4IEBA
CiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKICAg
ICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKICAg
ICAgIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoQU5EUk9JRCkgfHwgXAotICAgICAgZGVmaW5l
ZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgZGVmaW5lZChfX1FOWF9fKQorICAg
ICAgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19HTlVfXykgfHwgXAorICAgICAgZGVm
aW5lZChfX1FOWF9fKQogI2RlZmluZSBBTkdMRV9PU19QT1NJWAogI2Vsc2UKICNlcnJvciBVbnN1
cHBvcnRlZCBwbGF0Zm9ybS4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcxOCkKKworI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCIKKworVERlcGVuZGVuY3lHcmFw
aDo6VERlcGVuZGVuY3lHcmFwaChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSkKK3sKKyAgICBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6YnVpbGQoaW50ZXJtTm9kZSwgdGhpcyk7Cit9CisKK1REZXBl
bmRlbmN5R3JhcGg6On5URGVwZW5kZW5jeUdyYXBoKCkKK3sKKyAgICBmb3IgKFRHcmFwaE5vZGVW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQWxsTm9kZXMuYmVnaW4oKTsgaXRlciAhPSBt
QWxsTm9kZXMuZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRHcmFwaE5vZGUqIG5vZGUg
PSAqaXRlcjsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorfQorCitUR3JhcGhBcmd1bWVu
dCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3JlZ2F0ZSogaW50
ZXJtRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBhcmd1bWVudE51bWJlcikKK3sKKyAgICBUR3JhcGhBcmd1bWVudCogYXJn
dW1lbnQgPSBuZXcgVEdyYXBoQXJndW1lbnQoaW50ZXJtRnVuY3Rpb25DYWxsLCBhcmd1bWVudE51
bWJlcik7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhhcmd1bWVudCk7CisgICAgcmV0dXJuIGFy
Z3VtZW50OworfQorCitUR3JhcGhGdW5jdGlvbkNhbGwqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0
ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7Cisg
ICAgVEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBuZXcgVEdyYXBoRnVuY3Rpb25D
YWxsKGludGVybUZ1bmN0aW9uQ2FsbCk7CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhmdW5jdGlv
bkNhbGwpOworICAgIGlmIChmdW5jdGlvbkNhbGwtPmdldEludGVybUZ1bmN0aW9uQ2FsbCgpLT5p
c1VzZXJEZWZpbmVkKCkpCisgICAgICAgIG1Vc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbHMucHVzaF9i
YWNrKGZ1bmN0aW9uQ2FsbCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKK30KKworVEdyYXBo
U3ltYm9sKiBURGVwZW5kZW5jeUdyYXBoOjpnZXRPckNyZWF0ZVN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpCit7CisgICAgVFN5bWJvbElkTWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbVN5bWJvbElkTWFwLmZpbmQoaW50ZXJtU3ltYm9sLT5nZXRJZCgpKTsKKworICAgIFRHcmFw
aFN5bWJvbCogc3ltYm9sID0gTlVMTDsKKworICAgIGlmIChpdGVyICE9IG1TeW1ib2xJZE1hcC5l
bmQoKSkgeworICAgICAgICBUU3ltYm9sSWRQYWlyIHBhaXIgPSAqaXRlcjsKKyAgICAgICAgc3lt
Ym9sID0gcGFpci5zZWNvbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ltYm9sID0gbmV3IFRH
cmFwaFN5bWJvbChpbnRlcm1TeW1ib2wpOworICAgICAgICBtQWxsTm9kZXMucHVzaF9iYWNrKHN5
bWJvbCk7CisKKyAgICAgICAgVFN5bWJvbElkUGFpciBwYWlyKGludGVybVN5bWJvbC0+Z2V0SWQo
KSwgc3ltYm9sKTsKKyAgICAgICAgbVN5bWJvbElkTWFwLmluc2VydChwYWlyKTsKKworICAgICAg
ICAvLyBXZSBzYXZlIGFsbCBzYW1wbGVyIHN5bWJvbHMgaW4gYSBjb2xsZWN0aW9uLCBzbyB3ZSBj
YW4gc3RhcnQgZ3JhcGggdHJhdmVyc2FscyBmcm9tIHRoZW0gcXVpY2tseS4KKyAgICAgICAgaWYg
KElzU2FtcGxlcihpbnRlcm1TeW1ib2wtPmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgICAgIG1T
YW1wbGVyU3ltYm9scy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3lt
Ym9sOworfQorCitUR3JhcGhTZWxlY3Rpb24qIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZVNlbGVj
dGlvbihUSW50ZXJtU2VsZWN0aW9uKiBpbnRlcm1TZWxlY3Rpb24pCit7CisgICAgVEdyYXBoU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24gPSBuZXcgVEdyYXBoU2VsZWN0aW9uKGludGVybVNlbGVjdGlvbik7
CisgICAgbUFsbE5vZGVzLnB1c2hfYmFjayhzZWxlY3Rpb24pOworICAgIHJldHVybiBzZWxlY3Rp
b247Cit9CisKK1RHcmFwaExvb3AqIFREZXBlbmRlbmN5R3JhcGg6OmNyZWF0ZUxvb3AoVEludGVy
bUxvb3AqIGludGVybUxvb3ApCit7CisgICAgVEdyYXBoTG9vcCogbG9vcCA9IG5ldyBUR3JhcGhM
b29wKGludGVybUxvb3ApOworICAgIG1BbGxOb2Rlcy5wdXNoX2JhY2sobG9vcCk7CisgICAgcmV0
dXJuIGxvb3A7Cit9CisKK1RHcmFwaExvZ2ljYWxPcCogVERlcGVuZGVuY3lHcmFwaDo6Y3JlYXRl
TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxPcCkKK3sKKyAgICBUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCA9IG5ldyBUR3JhcGhMb2dpY2FsT3AoaW50ZXJtTG9naWNhbE9w
KTsKKyAgICBtQWxsTm9kZXMucHVzaF9iYWNrKGxvZ2ljYWxPcCk7CisgICAgcmV0dXJuIGxvZ2lj
YWxPcDsKK30KKworY29uc3QgY2hhciogVEdyYXBoTG9naWNhbE9wOjpnZXRPcFN0cmluZygpIGNv
bnN0Cit7CisgICAgY29uc3QgY2hhciogb3BTdHJpbmcgPSBOVUxMOworICAgIHN3aXRjaCAoZ2V0
SW50ZXJtTG9naWNhbE9wKCktPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OiBvcFN0cmluZyA9ICJhbmQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IG9w
U3RyaW5nID0gIm9yIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG9wU3RyaW5nID0gInVua25v
d24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG9wU3RyaW5nOworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0RF
UEdSQVBIX0RFUEVOREVOQ1lfR1JBUEhfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBF
TkRFTkNZX0dSQVBIX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisj
aW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0YWNrPgorCitjbGFzcyBUR3JhcGhOb2RlOworY2xh
c3MgVEdyYXBoUGFyZW50Tm9kZTsKK2NsYXNzIFRHcmFwaEFyZ3VtZW50OworY2xhc3MgVEdyYXBo
RnVuY3Rpb25DYWxsOworY2xhc3MgVEdyYXBoU3ltYm9sOworY2xhc3MgVEdyYXBoU2VsZWN0aW9u
OworY2xhc3MgVEdyYXBoTG9vcDsKK2NsYXNzIFRHcmFwaExvZ2ljYWxPcDsKK2NsYXNzIFREZXBl
bmRlbmN5R3JhcGhUcmF2ZXJzZXI7CitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0OworCit0
eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaE5vZGUqPiBUR3JhcGhOb2RlU2V0OwordHlwZWRlZiBzdGQ6
OnZlY3RvcjxUR3JhcGhOb2RlKj4gVEdyYXBoTm9kZVZlY3RvcjsKK3R5cGVkZWYgc3RkOjp2ZWN0
b3I8VEdyYXBoU3ltYm9sKj4gVEdyYXBoU3ltYm9sVmVjdG9yOwordHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUR3JhcGhGdW5jdGlvbkNhbGwqPiBURnVuY3Rpb25DYWxsVmVjdG9yOworCisvLworLy8gQmFz
ZSBjbGFzcyBmb3IgYWxsIGRlcGVuZGVuY3kgZ3JhcGggbm9kZXMuCisvLworY2xhc3MgVEdyYXBo
Tm9kZSB7CitwdWJsaWM6CisgICAgVEdyYXBoTm9kZShUSW50ZXJtTm9kZSogbm9kZSkgOiBpbnRl
cm1Ob2RlKG5vZGUpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoTm9kZSgpIHt9CisgICAgdmlydHVh
bCB2b2lkIHRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKK307CisKKy8vCisv
LyBCYXNlIGNsYXNzIGZvciBkZXBlbmRlbmN5IGdyYXBoIG5vZGVzIHRoYXQgbWF5IGhhdmUgY2hp
bGRyZW4uCisvLworY2xhc3MgVEdyYXBoUGFyZW50Tm9kZSA6IHB1YmxpYyBUR3JhcGhOb2RlIHsK
K3B1YmxpYzoKKyAgICBUR3JhcGhQYXJlbnROb2RlKFRJbnRlcm1Ob2RlKiBub2RlKSA6IFRHcmFw
aE5vZGUobm9kZSkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhQYXJlbnROb2RlKCkge30KKyAgICB2
b2lkIGFkZERlcGVuZGVudE5vZGUoVEdyYXBoTm9kZSogbm9kZSkgeyBpZiAobm9kZSAhPSB0aGlz
KSBtRGVwZW5kZW50Tm9kZXMuaW5zZXJ0KG5vZGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKTsKK3ByaXZhdGU6
CisgICAgVEdyYXBoTm9kZVNldCBtRGVwZW5kZW50Tm9kZXM7Cit9OworCisvLworLy8gSGFuZGxl
IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLgorLy8KK2NsYXNzIFRHcmFwaEFyZ3VtZW50IDogcHVi
bGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgorICAgIFRHcmFwaEFyZ3VtZW50KFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUZ1bmN0aW9uQ2FsbCwgaW50IGFyZ3VtZW50TnVtYmVyKQorICAg
ICAgICA6IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICAsIG1B
cmd1bWVudE51bWJlcihhcmd1bWVudE51bWJlcikge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhBcmd1
bWVudCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50ZXJtRnVuY3Rpb25D
YWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsgfQorICAg
IGludCBnZXRBcmd1bWVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1Bcmd1bWVudE51bWJlcjsg
fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBn
cmFwaFRyYXZlcnNlcik7Citwcml2YXRlOgorICAgIGludCBtQXJndW1lbnROdW1iZXI7Cit9Owor
CisvLworLy8gSGFuZGxlIGZ1bmN0aW9uIGNhbGxzLgorLy8KK2NsYXNzIFRHcmFwaEZ1bmN0aW9u
Q2FsbCA6IHB1YmxpYyBUR3JhcGhQYXJlbnROb2RlIHsKK3B1YmxpYzoKKyAgICBUR3JhcGhGdW5j
dGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKQorICAgICAgICA6
IFRHcmFwaFBhcmVudE5vZGUoaW50ZXJtRnVuY3Rpb25DYWxsKSB7fQorICAgIHZpcnR1YWwgflRH
cmFwaEZ1bmN0aW9uQ2FsbCgpIHt9CisgICAgY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogZ2V0SW50
ZXJtRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIHN5bWJvbHMuCisvLwor
Y2xhc3MgVEdyYXBoU3ltYm9sIDogcHVibGljIFRHcmFwaFBhcmVudE5vZGUgeworcHVibGljOgor
ICAgIFRHcmFwaFN5bWJvbChUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpIDogVEdyYXBoUGFy
ZW50Tm9kZShpbnRlcm1TeW1ib2wpIHt9CisgICAgdmlydHVhbCB+VEdyYXBoU3ltYm9sKCkge30K
KyAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBnZXRJbnRlcm1TeW1ib2woKSBjb25zdCB7IHJldHVy
biBpbnRlcm1Ob2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2
ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisv
LworLy8gSGFuZGxlIGlmIHN0YXRlbWVudHMgYW5kIHRlcm5hcnkgb3BlcmF0b3JzLgorLy8KK2Ns
YXNzIFRHcmFwaFNlbGVjdGlvbiA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAgICBU
R3JhcGhTZWxlY3Rpb24oVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2VsZWN0aW9uKSA6IFRHcmFw
aE5vZGUoaW50ZXJtU2VsZWN0aW9uKSB7fQorICAgIHZpcnR1YWwgflRHcmFwaFNlbGVjdGlvbigp
IHt9CisgICAgY29uc3QgVEludGVybVNlbGVjdGlvbiogZ2V0SW50ZXJtU2VsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gaW50ZXJtTm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJz
ZXIpOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMu
CisvLworY2xhc3MgVEdyYXBoTG9vcCA6IHB1YmxpYyBUR3JhcGhOb2RlIHsKK3B1YmxpYzoKKyAg
ICBUR3JhcGhMb29wKFRJbnRlcm1Mb29wKiBpbnRlcm1Mb29wKSA6IFRHcmFwaE5vZGUoaW50ZXJt
TG9vcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhMb29wKCkge30KKyAgICBjb25zdCBUSW50ZXJt
TG9vcCogZ2V0SW50ZXJtTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzTG9v
cE5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2VyKiBncmFwaFRyYXZlcnNlcik7Cit9OworCisvLworLy8gSGFuZGxlIGxvZ2ljYWwgYW5k
LCBvci4KKy8vCitjbGFzcyBUR3JhcGhMb2dpY2FsT3AgOiBwdWJsaWMgVEdyYXBoTm9kZSB7Citw
dWJsaWM6CisgICAgVEdyYXBoTG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2ljYWxP
cCkgOiBUR3JhcGhOb2RlKGludGVybUxvZ2ljYWxPcCkge30KKyAgICB2aXJ0dWFsIH5UR3JhcGhM
b2dpY2FsT3AoKSB7fQorICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkqIGdldEludGVybUxvZ2ljYWxP
cCgpIGNvbnN0IHsgcmV0dXJuIGludGVybU5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOyB9CisgICAg
Y29uc3QgY2hhciogZ2V0T3BTdHJpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpOworfTsKKworLy8K
Ky8vIEEgZGVwZW5kZW5jeSBncmFwaCBvZiBzeW1ib2xzLCBmdW5jdGlvbiBjYWxscywgY29uZGl0
aW9ucyBldGMuCisvLworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVudHJ5IHBvaW50cyBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KKy8vCisvLyBEZXBlbmRlbmN5
IGdyYXBoIG5vZGVzIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHVzaW5nIG9uZSBvZiB0aGUgcHJvdmlk
ZWQgImNyZWF0ZS4uLiIgbWV0aG9kcy4KKy8vIFRoaXMgY2xhc3MgKGFuZCBub2JvZHkgZWxzZSkg
bWFuYWdlcyB0aGUgbWVtb3J5IG9mIHRoZSBjcmVhdGVkIG5vZGVzLgorLy8gTm9kZXMgbWF5IG5v
dCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGFkZGVkLCBzbyBhbGwgY3JlYXRlZCBub2RlcyB3aWxs
IGV4aXN0IHdoaWxlIHRoZQorLy8gVERlcGVuZGVuY3lHcmFwaCBpbnN0YW5jZSBleGlzdHMuCisv
LworY2xhc3MgVERlcGVuZGVuY3lHcmFwaCB7CitwdWJsaWM6CisgICAgVERlcGVuZGVuY3lHcmFw
aChUSW50ZXJtTm9kZSogaW50ZXJtTm9kZSk7CisgICAgflREZXBlbmRlbmN5R3JhcGgoKTsKKyAg
ICBUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1BbGxOb2Rlcy5iZWdpbigpOyB9CisgICAgVEdyYXBoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbUFsbE5vZGVzLmVuZCgpOyB9CisKKyAgICBUR3JhcGhT
eW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luU2FtcGxlclN5bWJvbHMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5iZWdpbigpOworICAgIH0KKwor
ICAgIFRHcmFwaFN5bWJvbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kU2FtcGxlclN5bWJvbHMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyU3ltYm9scy5lbmQoKTsKKyAg
ICB9CisKKyAgICBURnVuY3Rpb25DYWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpblVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJE
ZWZpbmVkRnVuY3Rpb25DYWxscy5iZWdpbigpOworICAgIH0KKworICAgIFRGdW5jdGlvbkNhbGxW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZFVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscy5lbmQoKTsK
KyAgICB9CisKKyAgICBUR3JhcGhBcmd1bWVudCogY3JlYXRlQXJndW1lbnQoVEludGVybUFnZ3Jl
Z2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsLCBpbnQgYXJndW1lbnROdW1iZXIpOworICAgIFRHcmFw
aEZ1bmN0aW9uQ2FsbCogY3JlYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUZ1bmN0aW9uQ2FsbCk7CisgICAgVEdyYXBoU3ltYm9sKiBnZXRPckNyZWF0ZVN5bWJvbChUSW50
ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wpOworICAgIFRHcmFwaFNlbGVjdGlvbiogY3JlYXRlU2Vs
ZWN0aW9uKFRJbnRlcm1TZWxlY3Rpb24qIGludGVybVNlbGVjdGlvbik7CisgICAgVEdyYXBoTG9v
cCogY3JlYXRlTG9vcChUSW50ZXJtTG9vcCogaW50ZXJtTG9vcCk7CisgICAgVEdyYXBoTG9naWNh
bE9wKiBjcmVhdGVMb2dpY2FsT3AoVEludGVybUJpbmFyeSogaW50ZXJtTG9naWNhbE9wKTsKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBUTWFwPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkTWFw
OworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgVEdyYXBoU3ltYm9sKj4gVFN5bWJvbElkUGFp
cjsKKworICAgIFRHcmFwaE5vZGVWZWN0b3IgbUFsbE5vZGVzOworICAgIFRHcmFwaFN5bWJvbFZl
Y3RvciBtU2FtcGxlclN5bWJvbHM7CisgICAgVEZ1bmN0aW9uQ2FsbFZlY3RvciBtVXNlckRlZmlu
ZWRGdW5jdGlvbkNhbGxzOworICAgIFRTeW1ib2xJZE1hcCBtU3ltYm9sSWRNYXA7Cit9OworCisv
LworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIGRlcGVuZGVuY3kgZ3JhcGguIFVzZXJzIHNob3VsZCBk
ZXJpdmUgZnJvbSB0aGlzLAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGlu
IGl0LCBhbmQgdGhlbiBwYXNzIGl0IHRvIGEKKy8vIHRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBX
aGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdh
bnQgdmlzaXRlZC4KKy8vCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyIHsKK3B1Ymxp
YzoKKyAgICBURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKCkgOiBtRGVwdGgoMCkge30KKworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCkge307CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHNlbGVjdGlvbikge307
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCog
ZnVuY3Rpb25DYWxsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBo
U2VsZWN0aW9uKiBzZWxlY3Rpb24pIHt9OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdy
YXBoTG9vcCogbG9vcCkge307CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFw
aExvZ2ljYWxPcCogbG9naWNhbE9wKSB7fTsKKworICAgIGludCBnZXREZXB0aCgpIGNvbnN0IHsg
cmV0dXJuIG1EZXB0aDsgfQorICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ICsrbURlcHRoOyB9
CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHsgLS1tRGVwdGg7IH0KKworICAgIHZvaWQgY2xl
YXJWaXNpdGVkKCkgeyBtVmlzaXRlZC5jbGVhcigpOyB9CisgICAgdm9pZCBtYXJrVmlzaXRlZChU
R3JhcGhOb2RlKiBub2RlKSB7IG1WaXNpdGVkLmluc2VydChub2RlKTsgfQorICAgIGJvb2wgaXNW
aXNpdGVkKFRHcmFwaE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1WaXNpdGVkLmZpbmQobm9k
ZSkgIT0gbVZpc2l0ZWQuZW5kKCk7IH0KK3ByaXZhdGU6CisgICAgaW50IG1EZXB0aDsKKyAgICBU
R3JhcGhOb2RlU2V0IG1WaXNpdGVkOworfTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2Rl
cGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmgiCisK
K3ZvaWQgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OmJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBU
RGVwZW5kZW5jeUdyYXBoKiBncmFwaCkKK3sKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciBi
dWlsZGVyKGdyYXBoKTsKKyAgICBidWlsZGVyLmJ1aWxkKG5vZGUpOworfQorCitib29sIFREZXBl
bmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIHN3aXRjaCAoaW50ZXJtQWdncmVnYXRl
LT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uKGludGVybUFnZ3JlZ2F0ZSk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9u
Q2FsbDogdmlzaXRGdW5jdGlvbkNhbGwoaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6IHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oaW50ZXJtQWdncmVnYXRlKTsgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGUpCit7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyBub3Qgc3VwcG9ydCB1c2VyIGRl
ZmluZWQgZnVuY3Rpb25zLgorICAgIGlmIChpbnRlcm1BZ2dyZWdhdGUtPmdldE5hbWUoKSAhPSAi
bWFpbigiKQorICAgICAgICByZXR1cm47CisKKyAgICB2aXNpdEFnZ3JlZ2F0ZUNoaWxkcmVuKGlu
dGVybUFnZ3JlZ2F0ZSk7Cit9CisKKy8vIFRha2VzIGFuIGV4cHJlc3Npb24gbGlrZSAiZih4KSIg
YW5kIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGdyYXBoIGxpa2UKKy8vICJ4IC0+IGFyZ3VtZW50IDAg
LT4gZnVuY3Rpb24gY2FsbCIuCit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdEZ1
bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpCit7CisgICAg
VEdyYXBoRnVuY3Rpb25DYWxsKiBmdW5jdGlvbkNhbGwgPSBtR3JhcGgtPmNyZWF0ZUZ1bmN0aW9u
Q2FsbChpbnRlcm1GdW5jdGlvbkNhbGwpOworCisgICAgLy8gUnVuIHRocm91Z2ggdGhlIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzLgorICAgIGludCBhcmd1bWVudE51bWJlciA9IDA7CisgICAgVElu
dGVybVNlcXVlbmNlJiBpbnRlcm1Bcmd1bWVudHMgPSBpbnRlcm1GdW5jdGlvbkNhbGwtPmdldFNl
cXVlbmNlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBpbnRlcm1Bcmd1bWVudHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gaW50ZXJtQXJndW1l
bnRzLmVuZCgpOworICAgICAgICAgKytpdGVyLCArK2FyZ3VtZW50TnVtYmVyKQorICAgIHsKKyAg
ICAgICAgVE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Bcmd1bWVudCA9ICppdGVyOworICAgICAgICBpbnRlcm1B
cmd1bWVudC0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBh
cmd1bWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3Jh
cGhBcmd1bWVudCogYXJndW1lbnQgPSBtR3JhcGgtPmNyZWF0ZUFyZ3VtZW50KGludGVybUZ1bmN0
aW9uQ2FsbCwgYXJndW1lbnROdW1iZXIpOworICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9k
ZXNUb1NpbmdsZU5vZGUoYXJndW1lbnROb2RlcywgYXJndW1lbnQpOworICAgICAgICAgICAgYXJn
dW1lbnQtPmFkZERlcGVuZGVudE5vZGUoZnVuY3Rpb25DYWxsKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFB1c2ggdGhlIGxlZnRtb3N0IHN5bWJvbCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwg
aW50byB0aGUgY3VycmVudCBzZXQgb2YgZGVwZW5kZW50IHN5bWJvbHMgdG8KKyAgICAvLyByZXBy
ZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgICAgLy8gVGh1cywgYW4g
ZXhwcmVzc2lvbiBsaWtlICJ5ID0gZih4KSIgd2lsbCB5aWVsZCBhIGRlcGVuZGVuY3kgZ3JhcGgg
bGlrZQorICAgIC8vICJ4IC0+IGFyZ3VtZW50IDAgLT4gZnVuY3Rpb24gY2FsbCAtPiB5Ii4KKyAg
ICAvLyBUaGlzIGxpbmUgZXNzZW50aWFsbHkgcGFzc2VzIHRoZSBmdW5jdGlvbiBjYWxsIG5vZGUg
YmFjayB1cCB0byBhbiBlYXJsaWVyIHZpc2l0QXNzaWdubWVudAorICAgIC8vIGNhbGwsIHdoaWNo
IHdpbGwgY3JlYXRlIHRoZSBjb25uZWN0aW9uICJmdW5jdGlvbiBjYWxsIC0+IHkiLgorICAgIG1O
b2RlU2V0cy5pbnNlcnRJbnRvVG9wU2V0KGZ1bmN0aW9uQ2FsbCk7Cit9CisKK3ZvaWQgVERlcGVu
ZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0
ZSogaW50ZXJtQWdncmVnYXRlKQoreworICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBp
bnRlcm1BZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCk7CisgICAgZm9yKFRJbnRlcm1TZXF1ZW5jZTo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7IGl0ZXIgIT0gc2VxdWVuY2Uu
ZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1DaGlsZCA9
ICppdGVyOworICAgICAgICBpbnRlcm1DaGlsZC0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQor
Cit2b2lkIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wpCit7CisgICAgLy8gUHVzaCB0aGlzIHN5bWJvbCBpbnRvIHRoZSBzZXQg
b2YgZGVwZW5kZW50IHN5bWJvbHMgZm9yIHRoZSBjdXJyZW50IGFzc2lnbm1lbnQgb3IgY29uZGl0
aW9uCisgICAgLy8gdGhhdCB3ZSBhcmUgdHJhdmVyc2luZy4KKyAgICBUR3JhcGhTeW1ib2wqIHN5
bWJvbCA9IG1HcmFwaC0+Z2V0T3JDcmVhdGVTeW1ib2woaW50ZXJtU3ltYm9sKTsKKyAgICBtTm9k
ZVNldHMuaW5zZXJ0SW50b1RvcFNldChzeW1ib2wpOworCisgICAgLy8gSWYgdGhpcyBzeW1ib2wg
aXMgdGhlIGN1cnJlbnQgbGVmdG1vc3Qgc3ltYm9sIHVuZGVyIGFuIGFzc2lnbm1lbnQsIHJlcGxh
Y2UgdGhlIHByZXZpb3VzCisgICAgLy8gbGVmdG1vc3Qgc3ltYm9sIHdpdGggdGhpcyBzeW1ib2wu
CisgICAgaWYgKCFtTGVmdG1vc3RTeW1ib2xzLmVtcHR5KCkgJiYgbUxlZnRtb3N0U3ltYm9scy50
b3AoKSAhPSAmbVJpZ2h0U3VidHJlZSkgeworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnBvcCgp
OworICAgICAgICBtTGVmdG1vc3RTeW1ib2xzLnB1c2goc3ltYm9sKTsKKyAgICB9Cit9CisKK2Jv
b2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5KiBpbnRlcm1CaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gaW50ZXJtQmlu
YXJ5LT5nZXRPcCgpOworICAgIGlmIChvcCA9PSBFT3BJbml0aWFsaXplIHx8IGludGVybUJpbmFy
eS0+bW9kaWZpZXNTdGF0ZSgpKQorICAgICAgICB2aXNpdEFzc2lnbm1lbnQoaW50ZXJtQmluYXJ5
KTsKKyAgICBlbHNlIGlmIChvcCA9PSBFT3BMb2dpY2FsQW5kIHx8IG9wID09IEVPcExvZ2ljYWxP
cikKKyAgICAgICAgdmlzaXRMb2dpY2FsT3AoaW50ZXJtQmluYXJ5KTsKKyAgICBlbHNlCisgICAg
ICAgIHZpc2l0QmluYXJ5Q2hpbGRyZW4oaW50ZXJtQmluYXJ5KTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRBc3NpZ25tZW50KFRJ
bnRlcm1CaW5hcnkqIGludGVybUFzc2lnbm1lbnQpCit7CisgICAgVEludGVybVR5cGVkKiBpbnRl
cm1MZWZ0ID0gaW50ZXJtQXNzaWdubWVudC0+Z2V0TGVmdCgpOworICAgIGlmICghaW50ZXJtTGVm
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVEdyYXBoU3ltYm9sKiBsZWZ0bW9zdFN5bWJvbCA9
IE5VTEw7CisKKyAgICB7CisgICAgICAgIFROb2RlU2V0TWFpbnRhaW5lciBub2RlU2V0TWFpbnRh
aW5lcih0aGlzKTsKKworICAgICAgICB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWlu
dGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtTGVmdFN1YnRyZWUpOworICAg
ICAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBsZWZ0bW9z
dFN5bWJvbCA9IG1MZWZ0bW9zdFN5bWJvbHMudG9wKCk7CisKKyAgICAgICAgICAgIC8vIEFmdGVy
IHRyYXZlcnNpbmcgdGhlIGxlZnQgc3VidHJlZSBvZiB0aGlzIGFzc2lnbm1lbnQsIHdlIHNob3Vs
ZCBoYXZlIGZvdW5kIGEgcmVhbAorICAgICAgICAgICAgLy8gbGVmdG1vc3Qgc3ltYm9sLCBhbmQg
dGhlIGxlZnRtb3N0IHN5bWJvbCBzaG91bGQgbm90IGJlIGEgcGxhY2Vob2xkZXIuCisgICAgICAg
ICAgICBBU1NFUlQobGVmdG1vc3RTeW1ib2wgIT0gJm1MZWZ0U3VidHJlZSk7CisgICAgICAgICAg
ICBBU1NFUlQobGVmdG1vc3RTeW1ib2wgIT0gJm1SaWdodFN1YnRyZWUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtUmlnaHQgPSBpbnRlcm1Bc3NpZ25tZW50
LT5nZXRSaWdodCgpKSB7CisgICAgICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWludGFpbmVyIGxl
ZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAgICAgICAgICAg
IGludGVybVJpZ2h0LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChU
UGFyZW50Tm9kZVNldCogYXNzaWdubWVudE5vZGVzID0gbU5vZGVTZXRzLmdldFRvcFNldCgpKQor
ICAgICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoYXNzaWdubWVudE5v
ZGVzLCBsZWZ0bW9zdFN5bWJvbCk7CisgICAgfQorCisgICAgLy8gUHVzaCB0aGUgbGVmdG1vc3Qg
c3ltYm9sIG9mIHRoaXMgYXNzaWdubWVudCBpbnRvIHRoZSBjdXJyZW50IHNldCBvZiBkZXBlbmRl
bnQgc3ltYm9scyB0bworICAgIC8vIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHRoaXMgYXNzaWdu
bWVudC4KKyAgICAvLyBBbiBleHByZXNzaW9uIGxpa2UgImEgPSAoYiA9IGMpIiB3aWxsIHlpZWxk
IGEgZGVwZW5kZW5jeSBncmFwaCBsaWtlICJjIC0+IGIgLT4gYSIuCisgICAgLy8gVGhpcyBsaW5l
IGVzc2VudGlhbGx5IHBhc3NlcyB0aGUgbGVmdG1vc3Qgc3ltYm9sIG9mIHRoZSBuZXN0ZWQgYXNz
aWdubWVudCAoImIiIGluIHRoaXMKKyAgICAvLyBleGFtcGxlKSBiYWNrIHVwIHRvIHRoZSBlYXJs
aWVyIHZpc2l0QXNzaWdubWVudCBjYWxsIGZvciB0aGUgb3V0ZXIgYXNzaWdubWVudCwgd2hpY2gg
d2lsbAorICAgIC8vIGNyZWF0ZSB0aGUgY29ubmVjdGlvbiAiYiAtPiBhIi4KKyAgICBtTm9kZVNl
dHMuaW5zZXJ0SW50b1RvcFNldChsZWZ0bW9zdFN5bWJvbCk7Cit9CisKK3ZvaWQgVERlcGVuZGVu
Y3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkqIGludGVybUxvZ2lj
YWxPcCkKK3sKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1MZWZ0ID0gaW50ZXJtTG9naWNh
bE9wLT5nZXRMZWZ0KCkpIHsKKyAgICAgICAgVE5vZGVTZXRQcm9wYWdhdGluZ01haW50YWluZXIg
bm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtTGVmdC0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNldCogbGVmdE5vZGVzID0gbU5vZGVTZXRz
LmdldFRvcFNldCgpKSB7CisgICAgICAgICAgICBUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCA9
IG1HcmFwaC0+Y3JlYXRlTG9naWNhbE9wKGludGVybUxvZ2ljYWxPcCk7CisgICAgICAgICAgICBj
b25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShsZWZ0Tm9kZXMsIGxvZ2ljYWxPcCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybVR5cGVkKiBpbnRlcm1SaWdodCA9IGlu
dGVybUxvZ2ljYWxPcC0+Z2V0UmlnaHQoKSkgeworICAgICAgICBUTGVmdG1vc3RTeW1ib2xNYWlu
dGFpbmVyIGxlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcih0aGlzLCBtUmlnaHRTdWJ0cmVlKTsKKyAg
ICAgICAgaW50ZXJtUmlnaHQtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBURGVw
ZW5kZW5jeUdyYXBoQnVpbGRlcjo6dmlzaXRCaW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5KiBp
bnRlcm1CaW5hcnkpCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtTGVmdCA9IGludGVy
bUJpbmFyeS0+Z2V0TGVmdCgpKQorICAgICAgICBpbnRlcm1MZWZ0LT50cmF2ZXJzZSh0aGlzKTsK
KworICAgIGlmIChUSW50ZXJtVHlwZWQqIGludGVybVJpZ2h0ID0gaW50ZXJtQmluYXJ5LT5nZXRS
aWdodCgpKSB7CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1haW50YWluZXIgbGVmdG1vc3RTeW1i
b2xNYWludGFpbmVyKHRoaXMsIG1SaWdodFN1YnRyZWUpOworICAgICAgICBpbnRlcm1SaWdodC0+
dHJhdmVyc2UodGhpcyk7CisgICAgfQorfQorCitib29sIFREZXBlbmRlbmN5R3JhcGhCdWlsZGVy
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogaW50ZXJtU2Vs
ZWN0aW9uKQoreworICAgIGlmIChUSW50ZXJtTm9kZSogaW50ZXJtQ29uZGl0aW9uID0gaW50ZXJt
U2VsZWN0aW9uLT5nZXRDb25kaXRpb24oKSkgeworICAgICAgICBUTm9kZVNldE1haW50YWluZXIg
bm9kZVNldE1haW50YWluZXIodGhpcyk7CisKKyAgICAgICAgaW50ZXJtQ29uZGl0aW9uLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFRQYXJlbnROb2RlU2V0KiBjb25kaXRpb25Ob2RlcyA9
IG1Ob2RlU2V0cy5nZXRUb3BTZXQoKSkgeworICAgICAgICAgICAgVEdyYXBoU2VsZWN0aW9uKiBz
ZWxlY3Rpb24gPSBtR3JhcGgtPmNyZWF0ZVNlbGVjdGlvbihpbnRlcm1TZWxlY3Rpb24pOworICAg
ICAgICAgICAgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoY29uZGl0aW9uTm9kZXMs
IHNlbGVjdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGlu
dGVybVRydWVCbG9jayA9IGludGVybVNlbGVjdGlvbi0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAg
IGludGVybVRydWVCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICBpZiAoVEludGVybU5vZGUq
IGludGVybUZhbHNlQmxvY2sgPSBpbnRlcm1TZWxlY3Rpb24tPmdldEZhbHNlQmxvY2soKSkKKyAg
ICAgICAgaW50ZXJtRmFsc2VCbG9jay0+dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXI6OnZpc2l0TG9vcChWaXNpdCB2
aXNpdCwgVEludGVybUxvb3AqIGludGVybUxvb3ApCit7CisgICAgaWYgKFRJbnRlcm1UeXBlZCog
aW50ZXJtQ29uZGl0aW9uID0gaW50ZXJtTG9vcC0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAg
VE5vZGVTZXRNYWludGFpbmVyIG5vZGVTZXRNYWludGFpbmVyKHRoaXMpOworCisgICAgICAgIGlu
dGVybUNvbmRpdGlvbi0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChUUGFyZW50Tm9kZVNl
dCogY29uZGl0aW9uTm9kZXMgPSBtTm9kZVNldHMuZ2V0VG9wU2V0KCkpIHsKKyAgICAgICAgICAg
IFRHcmFwaExvb3AqIGxvb3AgPSBtR3JhcGgtPmNyZWF0ZUxvb3AoaW50ZXJtTG9vcCk7CisgICAg
ICAgICAgICBjb25uZWN0TXVsdGlwbGVOb2Rlc1RvU2luZ2xlTm9kZShjb25kaXRpb25Ob2Rlcywg
bG9vcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVEludGVybU5vZGUqIGludGVybUJv
ZHkgPSBpbnRlcm1Mb29wLT5nZXRCb2R5KCkpCisgICAgICAgIGludGVybUJvZHktPnRyYXZlcnNl
KHRoaXMpOworCisgICAgaWYgKFRJbnRlcm1UeXBlZCogaW50ZXJtRXhwcmVzc2lvbiA9IGludGVy
bUxvb3AtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgaW50ZXJtRXhwcmVzc2lvbi0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwordm9pZCBURGVwZW5kZW5jeUdy
YXBoQnVpbGRlcjo6Y29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVT
ZXQqIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEdyYXBoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKFRQ
YXJlbnROb2RlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbm9kZXMtPmJlZ2luKCk7IGl0ZXIg
IT0gbm9kZXMtPmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhQYXJlbnROb2Rl
KiBjdXJyZW50Tm9kZSA9ICppdGVyOworICAgICAgICBjdXJyZW50Tm9kZS0+YWRkRGVwZW5kZW50
Tm9kZShub2RlKTsKKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE4MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQ
R1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKyNkZWZpbmUgQ09NUElMRVJfREVQR1JB
UEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdy
YXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLworLy8gQ3JlYXRlcyBhIGRlcGVuZGVuY3kgZ3Jh
cGggb2Ygc3ltYm9scywgZnVuY3Rpb24gY2FsbHMsIGNvbmRpdGlvbnMgZXRjLiBieSB0cmF2ZXJz
aW5nIGEKKy8vIGludGVybWVkaWF0ZSB0cmVlLgorLy8KK2NsYXNzIFREZXBlbmRlbmN5R3JhcGhC
dWlsZGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIGJ1aWxkKFRJbnRlcm1Ob2RlKiBub2RlLCBURGVwZW5kZW5jeUdyYXBoKiBncmFwaCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wKik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnN0YWNrPFRHcmFwaFN5bWJv
bCo+IFRTeW1ib2xTdGFjazsKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRHcmFwaFBhcmVudE5vZGUq
PiBUUGFyZW50Tm9kZVNldDsKKworICAgIC8vCisgICAgLy8gRm9yIGNvbGxlY3RpbmcgdGhlIGRl
cGVuZGVudCBub2RlcyBvZiBhc3NpZ25tZW50cywgY29uZGl0aW9ucywgZXRjLgorICAgIC8vIHdo
aWxlIHRyYXZlcnNpbmcgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorICAgIC8vCisgICAgLy8gVGhp
cyBkYXRhIHN0cnVjdHVyZSBpcyBzdGFjayBvZiBzZXRzLiBFYWNoIHNldCBjb250YWlucyBkZXBl
bmRlbmN5IGdyYXBoIHBhcmVudCBub2Rlcy4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0U3Rh
Y2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVE5vZGVTZXRTdGFjaygpIHt9OworICAgICAgICB+
VE5vZGVTZXRTdGFjaygpIHsgY2xlYXIoKTsgfQorCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGFmdGVyIGEgcHVzaFNldC4KKyAgICAgICAgLy8gUmV0dXJucyBOVUxMIGlm
IHRoZSB0b3Agc2V0IGlzIGVtcHR5LgorICAgICAgICBUUGFyZW50Tm9kZVNldCogZ2V0VG9wU2V0
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlU2V0cy5lbXB0eSgp
KTsKKyAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiB0b3BTZXQgPSBub2RlU2V0cy50b3AoKTsK
KyAgICAgICAgICAgIHJldHVybiAhdG9wU2V0LT5lbXB0eSgpID8gdG9wU2V0IDogTlVMTDsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaFNldCgpIHsgbm9kZVNldHMucHVzaChuZXcgVFBh
cmVudE5vZGVTZXQoKSk7IH0KKyAgICAgICAgdm9pZCBwb3BTZXQoKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkpOworICAgICAgICAgICAgZGVsZXRlIG5v
ZGVTZXRzLnRvcCgpOworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBQb3BzIHRoZSB0b3Agc2V0IGFuZCBhZGRzIGl0cyBjb250ZW50cyB0byB0aGUg
bmV3IHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVy
IGEgcHVzaFNldC4KKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2V0IGJlbG93IHRoZSB0b3Ag
c2V0LCB0aGUgdG9wIHNldCBpcyBqdXN0IGRlbGV0ZWQuCisgICAgICAgIHZvaWQgcG9wU2V0SW50
b05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGVTZXRzLmVtcHR5KCkp
OworICAgICAgICAgICAgVFBhcmVudE5vZGVTZXQqIG9sZFRvcFNldCA9IG5vZGVTZXRzLnRvcCgp
OworICAgICAgICAgICAgbm9kZVNldHMucG9wKCk7CisKKyAgICAgICAgICAgIGlmICghbm9kZVNl
dHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRQYXJlbnROb2RlU2V0KiBuZXdUb3BTZXQg
PSBub2RlU2V0cy50b3AoKTsKKyAgICAgICAgICAgICAgICBuZXdUb3BTZXQtPmluc2VydChvbGRU
b3BTZXQtPmJlZ2luKCksIG9sZFRvcFNldC0+ZW5kKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBkZWxldGUgb2xkVG9wU2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9lcyBu
b3RoaW5nIGlmIHRoZXJlIGlzIG5vIHRvcCBzZXQuCisgICAgICAgIC8vIFRoaXMgY2FuIGJlIGNh
bGxlZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBzZXQgaWYgd2UgYXJlIHZpc2l0aW5nCisgICAgICAg
IC8vIHN5bWJvbHMgdGhhdCBhcmUgbm90IHVuZGVyIGFuIGFzc2lnbm1lbnQgb3IgY29uZGl0aW9u
LgorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRob3NlIHN5bWJvbHMuCisgICAg
ICAgIHZvaWQgaW5zZXJ0SW50b1RvcFNldChUR3JhcGhQYXJlbnROb2RlKiBub2RlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobm9kZVNldHMuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIG5vZGVTZXRzLnRvcCgpLT5pbnNlcnQobm9kZSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hp
bGUgKCFub2RlU2V0cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIHBvcFNldCgpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHN0ZDo6c3RhY2s8VFBhcmVudE5v
ZGVTZXQqPiBUUGFyZW50Tm9kZVNldFN0YWNrOworCisgICAgICAgIFRQYXJlbnROb2RlU2V0U3Rh
Y2sgbm9kZVNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhp
cyBjbGFzcyBwdXNoZXMgYSBuZXcgbm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8g
V2hlbiB0aGUgaW5zdGFuY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSBub2Rl
IHNldC4KKyAgICAvLworICAgIGNsYXNzIFROb2RlU2V0TWFpbnRhaW5lciB7CisgICAgcHVibGlj
OgorICAgICAgICBUTm9kZVNldE1haW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZh
Y3RvcnkpCisgICAgICAgICAgICA6IHNldHMoZmFjdG9yeS0+bU5vZGVTZXRzKSB7IHNldHMucHVz
aFNldCgpOyB9CisgICAgICAgIH5UTm9kZVNldE1haW50YWluZXIoKSB7IHNldHMucG9wU2V0KCk7
IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0U3RhY2smIHNldHM7CisgICAgfTsK
KworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBwdXNoZXMgYSBuZXcg
bm9kZSBzZXQgd2hlbiBpbnN0YW50aWF0ZWQuCisgICAgLy8gV2hlbiB0aGUgaW5zdGFuY2UgZ29l
cyBvdXQgb2Ygc2NvcGUsIGl0IGFuZCBwb3BzIHRoZSB0b3Agbm9kZSBzZXQgYW5kIGFkZHMgaXRz
IGNvbnRlbnRzIHRvCisgICAgLy8gdGhlIG5ldyB0b3Agbm9kZSBzZXQuCisgICAgLy8KKyAgICBj
bGFzcyBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lciB7CisgICAgcHVibGljOgorICAgICAg
ICBUTm9kZVNldFByb3BhZ2F0aW5nTWFpbnRhaW5lcihURGVwZW5kZW5jeUdyYXBoQnVpbGRlciog
ZmFjdG9yeSkKKyAgICAgICAgICAgIDogc2V0cyhmYWN0b3J5LT5tTm9kZVNldHMpIHsgc2V0cy5w
dXNoU2V0KCk7IH0KKyAgICAgICAgflROb2RlU2V0UHJvcGFnYXRpbmdNYWludGFpbmVyKCkgeyBz
ZXRzLnBvcFNldEludG9OZXh0KCk7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFROb2RlU2V0
U3RhY2smIHNldHM7CisgICAgfTsKKworICAgIC8vCisgICAgLy8gQW4gaW5zdGFuY2Ugb2YgdGhp
cyBjbGFzcyBrZWVwcyB0cmFjayBvZiB0aGUgbGVmdG1vc3Qgc3ltYm9sIHdoaWxlIHdlJ3JlIGV4
cGxvcmluZyBhbgorICAgIC8vIGFzc2lnbm1lbnQuCisgICAgLy8gSXQgd2lsbCBwdXNoIHRoZSBw
bGFjZWhvbGRlciBzeW1ib2wga0xlZnRTdWJ0cmVlIHdoZW4gaW5zdGFudGlhdGVkIHVuZGVyIGEg
bGVmdCBzdWJ0cmVlLAorICAgIC8vIGFuZCBrUmlnaHRTdWJ0cmVlIHVuZGVyIGEgcmlnaHQgc3Vi
dHJlZS4KKyAgICAvLyBXaGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBpdCB3aWxsIHBvcCB0aGUg
bGVmdG1vc3Qgc3ltYm9sIGF0IHRoZSB0b3Agb2YgdGhlIHNjb3BlLgorICAgIC8vIER1cmluZyB0
cmF2ZXJzYWwsIHRoZSBURGVwZW5kZW5jeUdyYXBoQnVpbGRlciB3aWxsIHJlcGxhY2Uga0xlZnRT
dWJ0cmVlIHdpdGggYSByZWFsIHN5bWJvbC4KKyAgICAvLyBrUmlnaHRTdWJ0cmVlIHdpbGwgbmV2
ZXIgYmUgcmVwbGFjZWQgYnkgYSByZWFsIHN5bWJvbCBiZWNhdXNlIHdlIGFyZSB0cmFja2luZyB0
aGUgbGVmdG1vc3QKKyAgICAvLyBzeW1ib2wuCisgICAgLy8KKyAgICBjbGFzcyBUTGVmdG1vc3RT
eW1ib2xNYWludGFpbmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRMZWZ0bW9zdFN5bWJvbE1h
aW50YWluZXIoVERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIqIGZhY3RvcnksIFRHcmFwaFN5bWJvbCYg
c3VidHJlZSkKKyAgICAgICAgICAgIDogbGVmdG1vc3RTeW1ib2xzKGZhY3RvcnktPm1MZWZ0bW9z
dFN5bWJvbHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRzUGxhY2Vob2xkZXJTeW1ib2wg
PSBsZWZ0bW9zdFN5bWJvbHMuZW1wdHkoKSB8fCBsZWZ0bW9zdFN5bWJvbHMudG9wKCkgIT0gJnN1
YnRyZWU7CisgICAgICAgICAgICBpZiAobmVlZHNQbGFjZWhvbGRlclN5bWJvbCkKKyAgICAgICAg
ICAgICAgICBsZWZ0bW9zdFN5bWJvbHMucHVzaCgmc3VidHJlZSk7CisgICAgICAgIH0KKworICAg
ICAgICB+VExlZnRtb3N0U3ltYm9sTWFpbnRhaW5lcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChuZWVkc1BsYWNlaG9sZGVyU3ltYm9sKQorICAgICAgICAgICAgICAgIGxlZnRtb3N0U3lt
Ym9scy5wb3AoKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBUU3ltYm9s
U3RhY2smIGxlZnRtb3N0U3ltYm9sczsKKyAgICAgICAgYm9vbCBuZWVkc1BsYWNlaG9sZGVyU3lt
Ym9sOworICAgIH07CisKKyAgICBURGVwZW5kZW5jeUdyYXBoQnVpbGRlcihURGVwZW5kZW5jeUdy
YXBoKiBncmFwaCkKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxz
ZSkKKyAgICAgICAgLCBtTGVmdFN1YnRyZWUoTlVMTCkKKyAgICAgICAgLCBtUmlnaHRTdWJ0cmVl
KE5VTEwpCisgICAgICAgICwgbUdyYXBoKGdyYXBoKSB7fQorICAgIHZvaWQgYnVpbGQoVEludGVy
bU5vZGUqIGludGVybU5vZGUpIHsgaW50ZXJtTm9kZS0+dHJhdmVyc2UodGhpcyk7IH0KKworICAg
IHZvaWQgY29ubmVjdE11bHRpcGxlTm9kZXNUb1NpbmdsZU5vZGUoVFBhcmVudE5vZGVTZXQqIG5v
ZGVzLCBUR3JhcGhOb2RlKiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgdmlzaXRBc3NpZ25tZW50
KFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2b2lkIHZpc2l0TG9naWNhbE9wKFRJbnRlcm1CaW5hcnkq
KTsKKyAgICB2b2lkIHZpc2l0QmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSopOworICAgIHZv
aWQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZvaWQg
dmlzaXRGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtRnVuY3Rpb25DYWxsKTsK
KyAgICB2b2lkIHZpc2l0QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSopOworCisg
ICAgVEdyYXBoU3ltYm9sIG1MZWZ0U3VidHJlZTsKKyAgICBUR3JhcGhTeW1ib2wgbVJpZ2h0U3Vi
dHJlZTsKKworICAgIFREZXBlbmRlbmN5R3JhcGgqIG1HcmFwaDsKKyAgICBUTm9kZVNldFN0YWNr
IG1Ob2RlU2V0czsKKyAgICBUU3ltYm9sU3RhY2sgbUxlZnRtb3N0U3ltYm9sczsKK307CisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9CVUlMREVSX0gKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0Rl
cGVuZGVuY3lHcmFwaE91dHB1dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmgiCisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0SW5kZW50YXRp
b24oKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0RGVwdGgoKTsgKytpKQorICAgICAg
ICBtU2luayA8PCAiICAiOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0
QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICBvdXRwdXRJbmRlbnRh
dGlvbigpOworICAgIG1TaW5rIDw8ICJhcmd1bWVudCAiIDw8IHBhcmFtZXRlci0+Z2V0QXJndW1l
bnROdW1iZXIoKSA8PCAiIG9mIGNhbGwgdG8gIgorICAgICAgICAgIDw8IHBhcmFtZXRlci0+Z2V0
SW50ZXJtRnVuY3Rpb25DYWxsKCktPmdldE5hbWUoKSA8PCAiXG4iOworfQorCit2b2lkIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQ6OnZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCog
ZnVuY3Rpb25DYWxsKQoreworICAgIG91dHB1dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwg
ImZ1bmN0aW9uIGNhbGwgIiA8PCAgZnVuY3Rpb25DYWxsLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KS0+Z2V0TmFtZSgpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6
dmlzaXRTeW1ib2woVEdyYXBoU3ltYm9sKiBzeW1ib2wpCit7CisgICAgb3V0cHV0SW5kZW50YXRp
b24oKTsKKyAgICBtU2luayA8PCBzeW1ib2wtPmdldEludGVybVN5bWJvbCgpLT5nZXRTeW1ib2wo
KSA8PCAiIChzeW1ib2wgaWQ6ICIKKyAgICAgICAgICA8PCBzeW1ib2wtPmdldEludGVybVN5bWJv
bCgpLT5nZXRJZCgpIDw8ICIpXG4iOworfQorCit2b2lkIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQ6
OnZpc2l0U2VsZWN0aW9uKFRHcmFwaFNlbGVjdGlvbiogc2VsZWN0aW9uKQoreworICAgIG91dHB1
dEluZGVudGF0aW9uKCk7CisgICAgbVNpbmsgPDwgInNlbGVjdGlvblxuIjsKK30KKwordm9pZCBU
RGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCkKK3sKKyAg
ICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1TaW5rIDw8ICJsb29wIGNvbmRpdGlvblxuIjsK
K30KKwordm9pZCBURGVwZW5kZW5jeUdyYXBoT3V0cHV0Ojp2aXNpdExvZ2ljYWxPcChUR3JhcGhM
b2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBvdXRwdXRJbmRlbnRhdGlvbigpOworICAgIG1T
aW5rIDw8ICJsb2dpY2FsICIgPDwgbG9naWNhbE9wLT5nZXRPcFN0cmluZygpIDw8ICJcbiI7Cit9
CisKK3ZvaWQgVERlcGVuZGVuY3lHcmFwaE91dHB1dDo6b3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhU
RGVwZW5kZW5jeUdyYXBoJiBncmFwaCkKK3sKKyAgICBtU2luayA8PCAiXG4iOworCisgICAgZm9y
IChUR3JhcGhOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW4oKTsg
aXRlciAhPSBncmFwaC5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSog
c3ltYm9sID0gKml0ZXI7CisgICAgICAgIG1TaW5rIDw8ICItLS0gRGVwZW5kZW5jeSBncmFwaCBz
cGFubmluZyB0cmVlIC0tLVxuIjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAgIHN5
bWJvbC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1TaW5rIDw8ICJcbiI7CisgICAgfQorfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBl
bmRlbmN5R3JhcGhPdXRwdXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfREVQR1JBUEhfREVQRU5ERU5DWV9HUkFQSF9PVVRQ
VVRfSAorI2RlZmluZSBDT01QSUxFUl9ERVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9I
CisKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKKyNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBURGVwZW5kZW5jeUdyYXBoT3V0cHV0
IDogcHVibGljIFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIgeworcHVibGljOgorICAgIFREZXBl
bmRlbmN5R3JhcGhPdXRwdXQoVEluZm9TaW5rQmFzZSYgc2luaykgOiBtU2luayhzaW5rKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUR3JhcGhTeW1ib2wqIHN5bWJvbCk7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0RnVuY3Rpb25DYWxsKFRHcmFwaEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb25DYWxsKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0
aW9uKiBzZWxlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCog
bG9vcCk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCog
bG9naWNhbE9wKTsKKworICAgIHZvaWQgb3V0cHV0QWxsU3Bhbm5pbmdUcmVlcyhURGVwZW5kZW5j
eUdyYXBoJiBncmFwaCk7Citwcml2YXRlOgorICAgIHZvaWQgb3V0cHV0SW5kZW50YXRpb24oKTsK
KworICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9E
RVBHUkFQSF9ERVBFTkRFTkNZX0dSQVBIX09VVFBVVF9ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgorCisvLyBUaGVz
ZSBtZXRob2RzIGRvIGEgYnJlYWR0aC1maXJzdCB0cmF2ZXJzYWwgdGhyb3VnaCB0aGUgZ3JhcGgg
YW5kIG1hcmsgdmlzaXRlZCBub2Rlcy4KKwordm9pZCBUR3JhcGhOb2RlOjp0cmF2ZXJzZShURGVw
ZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZl
cnNlci0+bWFya1Zpc2l0ZWQodGhpcyk7Cit9CisKK3ZvaWQgVEdyYXBoUGFyZW50Tm9kZTo6dHJh
dmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3JhcGhUcmF2ZXJzZXIpCit7CisgICAg
VEdyYXBoTm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworCisgICAgZ3JhcGhUcmF2ZXJz
ZXItPmluY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBWaXNpdCB0aGUgcGFyZW50IG5vZGUncyBj
aGlsZHJlbi4KKyAgICBmb3IgKFRHcmFwaE5vZGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
RGVwZW5kZW50Tm9kZXMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gbURlcGVuZGVudE5vZGVz
LmVuZCgpOworICAgICAgICAgKytpdGVyKQorICAgIHsKKyAgICAgICAgVEdyYXBoTm9kZSogbm9k
ZSA9ICppdGVyOworICAgICAgICBpZiAoIWdyYXBoVHJhdmVyc2VyLT5pc1Zpc2l0ZWQobm9kZSkp
CisgICAgICAgICAgICBub2RlLT50cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7CisgICAgfQorCisg
ICAgZ3JhcGhUcmF2ZXJzZXItPmRlY3JlbWVudERlcHRoKCk7Cit9CisKK3ZvaWQgVEdyYXBoQXJn
dW1lbnQ6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2Vy
KQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEFyZ3VtZW50KHRoaXMpOworICAgIFRHcmFw
aFBhcmVudE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhG
dW5jdGlvbkNhbGw6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJh
dmVyc2VyKQoreworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdEZ1bmN0aW9uQ2FsbCh0aGlzKTsK
KyAgICBUR3JhcGhQYXJlbnROb2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CisKK3Zv
aWQgVEdyYXBoU3ltYm9sOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFw
aFRyYXZlcnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRTeW1ib2wodGhpcyk7Cisg
ICAgVEdyYXBoUGFyZW50Tm9kZTo6dHJhdmVyc2UoZ3JhcGhUcmF2ZXJzZXIpOworfQorCit2b2lk
IFRHcmFwaFNlbGVjdGlvbjo6dHJhdmVyc2UoVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciogZ3Jh
cGhUcmF2ZXJzZXIpCit7CisgICAgZ3JhcGhUcmF2ZXJzZXItPnZpc2l0U2VsZWN0aW9uKHRoaXMp
OworICAgIFRHcmFwaE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBU
R3JhcGhMb29wOjp0cmF2ZXJzZShURGVwZW5kZW5jeUdyYXBoVHJhdmVyc2VyKiBncmFwaFRyYXZl
cnNlcikKK3sKKyAgICBncmFwaFRyYXZlcnNlci0+dmlzaXRMb29wKHRoaXMpOworICAgIFRHcmFw
aE5vZGU6OnRyYXZlcnNlKGdyYXBoVHJhdmVyc2VyKTsKK30KKwordm9pZCBUR3JhcGhMb2dpY2Fs
T3A6OnRyYXZlcnNlKFREZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZXIqIGdyYXBoVHJhdmVyc2VyKQor
eworICAgIGdyYXBoVHJhdmVyc2VyLT52aXNpdExvZ2ljYWxPcCh0aGlzKTsKKyAgICBUR3JhcGhO
b2RlOjp0cmF2ZXJzZShncmFwaFRyYXZlcnNlcik7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9hdG9tLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgogCkBAIC0zMDcsNyArMzA4LDcgQEAgc3RydWN0IEF0b21UYWJsZV9S
ZWMgewogICAgIGludCBzaXplOwogfTsKIAotc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7
IDAgfSB9Oworc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IE5VTEwsIDAsIDAgfSwgeyBO
VUxMLCAwLCAwLCB7MH0gfSwgTlVMTCwgTlVMTCwgMCwgMCB9OwogQXRvbVRhYmxlICphdGFibGUg
PSAmbGF0YWJsZTsKIAogc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUs
IGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKQEAgLTQzNCwxNCArNDM1LDE0IEBAIHN0YXRpYyBp
bnQgRmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFibGUKICAgICAgICAgICAgIGlmIChjcHAtPm9w
dGlvbnMuRHVtcEF0b21UYWJsZSkgewogICAgICAgICAgICAgICAgIGludCBpaTsKICAgICAgICAg
ICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioq
IEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2Ug
aGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6
ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4g
TXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwogICAgICAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZyhzdHIpOwogCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0
cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFz
aGRlbHRhKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioq
IE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25b
MF0sIGhhc2hkZWx0YSk7CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CiAg
ICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lP
TlM7IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlk
ZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAg
ICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5
ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwogICAgICAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKICAgICAgICAgICAgICAgICB9CkBAIC02ODUsMTQg
KzY4NiwxNCBAQCB2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQogICAgIGNo
YXIgc3RyWzIwMF07CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBp
aSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5z
dGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIHNucHJpbnRmKHN0ciwg
c2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0
YWJsZS0+YW1hcFtpaV1dKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9Ci0g
ICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNp
b25zPSIsCisgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9
JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKICAgICAgICAgICAgYXRhYmxlLT5odGFibGUu
c2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CiAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
ICAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7
Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7
CisgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJs
ZS5jb3VudHNbaWldKTsKICAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJCiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFs
cy5oIgogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMg
aW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwCiAJCWNhc2UgLTE6CiAgICAgICAgICAg
ICAvLyBFT0YKICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUg
bXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUiKTsJCQkKLQkJCXJldHVybiB0b2tlbjsKKwkJCWdvdG8g
ZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwogCQlkZWZhdWx0OgogCQkJU3JjU3RyTmFtZVswXSA9
IHRva2VuOwogCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7CkBAIC02ODgsMTAgKzY4OSw5IEBAIHN0
YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHAKIAkJdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogCX0KIAotCWNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFs
cHApOwogCUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7
Ci0JdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwogCQorZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgogCWZvciAoaSA9IDA7IGkgPCB0
b2tlbkNvdW50OyArK2kpIHsKIAkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKIAl9CkBAIC03ODQsNyAr
Nzg0LDYgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGlu
dCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBpbnQgaXNWZXJzaW9uID0gMDsK
IAogICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewogICAgICAgICBpZiAoeXlsdmFs
cHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKQEAgLTg2MSw3ICs4NjAsNiBAQCBpbnQgcmVh
ZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCiAgICAgICAgICAgICAgdG9rZW4gPSBDUFBl
cnJvcih5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IHZlcnNpb25BdG9tKSB7CiAgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHAp
OwotICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKICAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxw
cC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewogICAgICAgICAgICAgdG9rZW4gPSBDUFBl
eHRlbnNpb24oeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgewpAQCAtODg2LDE1ICs4ODQsMTUg
QEAgdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKIH0KIAogdm9pZCBQcmVkZWZpbmVJ
bnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9j
YXRpb24gPSB7MH07CisgICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwogICAgIFN5bWJv
bCAqc3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswfTsKLSAgICB5eXN0
eXBlcHAgdmFsID0gezB9OworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEws
IDAsIDB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCB7MH19OwogICAgIGludCBh
dG9tID0gMDsKIAogICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3Mt
PnBvb2wpOwogICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBzcHJpbnRmKHZhbC5zeW1ib2xf
bmFtZSwgIiVkIiwgdmFsdWUpOworICAgIHNucHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZ
TUJPTF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7CiAgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9k
eSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKICAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0
YWJsZSwgbmFtZSk7CiAgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBh
dG9tLCBNQUNST19TKTsKQEAgLTk5MSwxMyArOTg5LDEzIEBAIGludCBNYWNyb0V4cGFuZChpbnQg
YXRvbSwgeXlzdHlwZXBwICogeXkKICAgICBjb25zdCBjaGFyICptZXNzYWdlOwogCWlmIChhdG9t
ID09IF9fTElORV9fQXRvbSkgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51
bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZh
bHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1B
WF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7CiAgICAgICAgIFVu
Z2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KICAgICBpZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKICAgICAgICAgeXlsdmFscHAt
PnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBzbnByaW50Zih5eWx2
YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAt
PnNjX2ludCk7CiAgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7
CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCB2b2lkICBDUFBTaElu
Zm9Mb2dNc2coY29uc3QgY2hhciopOyAgICAgCiB2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNv
bnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cK
IHZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3By
YWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgogdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAg
ICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJy
b3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBp
bnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgQ1BQ
RXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciopOyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9y
cyBpbnRvIFNoLkluZm8ubG9nLgordm9pZCAgU3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgogdm9pZCAgU2V0
TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAK
IHZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmlu
ZyBudW1iZXIuICAgIAogaW50ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDggQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2lmbmRlZiBf
X01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiB0
eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwogCiBleHRlcm4gTWVtb3J5
UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWdu
KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvcHJlcHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAxMjI3MzgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNSArNDcsNCBAQCBleHRlcm4gQ1BQU3RydWN0
ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1
Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6
ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdP
ZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsOCBAQCB0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CiAgICAgY2hhciAqcDsKIH0g
U3RyaW5nSW5wdXRTcmM7CiAKK3N0YXRpYyBpbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAq
cyk7CisKIHN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkKIHsKICAgICByZXR1cm4gRU9GOwpAQCAtNzMsNyArNzUsNyBAQCBzdGF0aWMgaW50IGVv
Zl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwCiAKIHN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMg
KmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7fQogCi1zdGF0aWMgSW5wdXRTcmMg
ZW9mX2lucHV0c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsKK3N0YXRp
YyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9v
cCwgMCwgMCB9OwogCiBzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCk7CiAKQEAgLTEyNiw2ICsxMjgsMTYgQEAgaW50IEZyZWVTY2FubmVyKHZvaWQp
CiAgICAgcmV0dXJuIChGcmVlQ1BQKCkpOwogfQogCitpbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBT
dHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKQoreworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFy
Z3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50OworICAgIGNwcC0+
UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOworICAg
IHJldHVybiAwOworfQorCiAvKgogICogc3RyX2dldGNoKCkKICAqIHRha2VzIGNhcmUgb2YgcmVh
ZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAg
dHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVy
KENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBp
bnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IEluaXRTY2FubmVySW5wdXQoQ1BQ
U3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7CiBpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIg
Kik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9n
Cit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhl
IG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIo
aW50KTsKIHZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7CiB2b2lkIEluY0xpbmVOdW1iZXIodm9p
ZCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBTeW1ib2wgKk5ld1N5bWJvbChTb3Vy
Y2VMb2MgKmxvYywgU2NvcGUgCiBTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2Nv
cGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CiBTeW1ib2wgKkxvb2tVcExv
Y2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKIFN5bWJvbCAqTG9va1VwU3ltYm9s
KFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAq
KTsKIAogCiAjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmMJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIK
QEAgLTI2NSw2ICsyNjYsOCBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0
eXBlCiAgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CiAgICAgaW50IGx0
b2tlbiwgbGVuOwogICAgIGNoYXIgY2g7CisgICAgaW50IGJhc2UsIGFjY3VtOworICAgIGNoYXIg
Y2hfdmFsOwogCiAgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwogICAgIGlmIChsdG9rZW4g
Pj0gMCkgewpAQCAtMzE1LDE4ICszMTgsNDEgQEAgaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAq
cFRvaywgeXlzdHlwZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1BQX0lOVENP
TlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKKwkgICAgYWNjdW0gPSAwOwogICAgICAgICAg
ICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAm
JiBjaCA8PSAnOScpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBN
QVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7CisgICAg
ICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgY2gg
PSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9
PSAnWCcpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBs
UmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZSA9IDg7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHdoaWxlIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNoX3ZhbCA9IC0xOworICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkK
KyAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xv
d2VyKGNoKSAtICdhJyArIDEwOworCisgICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwg
Y2hfdmFsID49IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgYWNjdW0gPSBh
Y2N1bSAqIGJhc2UgKyBjaF92YWw7CisgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsK
ICAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2
YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNj
X2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gYWNjdW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnKCc6CiAg
ICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwpAQCAtNDE0LDEw
ICs0NDAsMTAgQEAgdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZQogICAg
ICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CiAgICAg
ICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICIl
cyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAg
ICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBz
bnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IHl5bHZhbHBwLT5zY19pZGVudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1BQX0ZMT0FUQ09OU1RBTlQ6CiAgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFs
cHAtPnNjX2Z2YWwpOwpAQCAtNDI3LDkgKzQ1Myw5IEBAIHZvaWQgRHVtcFRva2VuU3RyZWFtKEZJ
TEUgKmZwLCBUb2tlblN0cmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0
ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
dG9rZW4pKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwg
IiVjIiwgdG9rZW4pOworICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks
ICIlYyIsIHRva2VuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDEy
MjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCiAj
ZGVmaW5lIF9fVE9LRU5TX0ggMQogCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCiAKICNkZWZpbmUgRU9GX1NZICgtMSkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Db250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8
c3N0cmVhbT4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAic3RsX3V0
aWxzLmgiCi0jaW5jbHVkZSAidG9rZW5fdHlwZS5oIgotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFt
ZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3RyaW5nKiBuYW1lKQotewotICAgIEFTU0VSVChuYW1lKTsK
LQotICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2VydmVkLgotICAgIGlm
IChuYW1lLT5zdWJzdHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJl
c2VydmVkLgotICAgIGlmIChuYW1lLT5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotbmFtZXNwYWNl
IHBwCi17Ci0KLUNvbnRleHQ6OkNvbnRleHQoKQotICAgIDogbUxleGVyKE5VTEwpLAotICAgICAg
bUlucHV0KE5VTEwpLAotICAgICAgbU91dHB1dChOVUxMKQotewotfQotCi1Db250ZXh0Ojp+Q29u
dGV4dCgpCi17Ci0gICAgZGVzdHJveUxleGVyKCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aW5pdCgp
Ci17Ci0gICAgcmV0dXJuIGluaXRMZXhlcigpOwotCi0gICAgLy8gVE9ETyhhbG9rcCk6IERlZmlu
ZSBidWlsdC1pbiBtYWNyb3MgaGVyZSBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvCi0gICAgLy8g
ZGVmaW5lIHRoZW0gZXZlcnl0aW1lIGluIHByb2Nlc3MoKS4KLX0KLQotYm9vbCBDb250ZXh0Ojpw
cm9jZXNzKGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10sCi0g
ICAgICAgICAgICAgICAgICAgICAgVG9rZW5WZWN0b3IqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQo
KGNvdW50ID49MCkgJiYgKHN0cmluZyAhPSBOVUxMKSAmJiAob3V0cHV0ICE9IE5VTEwpKTsKLQot
ICAgIC8vIFNldHVwLgotICAgIG1JbnB1dCA9IG5ldyBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5n
dGgpOwotICAgIG1PdXRwdXQgPSBvdXRwdXQ7Ci0gICAgZGVmaW5lQnVpbHRJbk1hY3JvKCJHTF9F
UyIsIDEpOwotCi0gICAgLy8gUGFyc2UuCi0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2UoKTsKLQot
ICAgIC8vIENsZWFudXAuCi0gICAgcmVzZXQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQot
Ym9vbCBDb250ZXh0OjpkZWZpbmVNYWNybyhwcDo6VG9rZW46OkxvY2F0aW9uIGxvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHBwOjpUb2tlblZlY3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpCi17Ci0gICAgc3RkOjphdXRvX3B0
cjxNYWNybz4gbWFjcm8obmV3IE1hY3JvKHR5cGUsIG5hbWUsIHBhcmFtZXRlcnMsIHJlcGxhY2Vt
ZW50cykpOwotICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKG5hbWUpKQotICAgIHsKLSAgICAg
ICAgLy8gVE9ETyhhbG9rcCk6IFJlcG9ydCBlcnJvci4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAoaXNNYWNyb0RlZmluZWQobmFtZSkpCi0gICAgewotICAgICAgICAvLyBU
T0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbU1hY3Jvc1sqbmFtZV0gPSBtYWNyby5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6dW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFt
ZSkKLXsKLSAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb3MuZmluZCgqbmFtZSk7
Ci0gICAgaWYgKGl0ZXIgPT0gbU1hY3Jvcy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8o
YWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
bU1hY3Jvcy5lcmFzZShpdGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0
Ojppc01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSkKLXsKLSAgICByZXR1cm4g
bU1hY3Jvcy5maW5kKCpuYW1lKSAhPSBtTWFjcm9zLmVuZCgpOwotfQotCi0vLyBSZXNldCB0byBp
bml0aWFsaXplZCBzdGF0ZS4KLXZvaWQgQ29udGV4dDo6cmVzZXQoKQotewotICAgIHN0ZDo6Zm9y
X2VhY2gobU1hY3Jvcy5iZWdpbigpLCBtTWFjcm9zLmVuZCgpLCBEZWxldGVTZWNvbmQoKSk7Ci0g
ICAgbU1hY3Jvcy5jbGVhcigpOwotCi0gICAgZGVsZXRlIG1JbnB1dDsKLSAgICBtSW5wdXQgPSBO
VUxMOwotCi0gICAgbU91dHB1dCA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVmaW5lQnVp
bHRJbk1hY3JvKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgdmFsdWU7Ci0gICAgVG9rZW4q
IHRva2VuID0gbmV3IFRva2VuKDAsIElOVF9DT05TVEFOVCwgbmV3IHN0ZDo6c3RyaW5nKHN0cmVh
bS5zdHIoKSkpOwotICAgIFRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMgPSBuZXcgcHA6OlRva2Vu
VmVjdG9yKDEsIHRva2VuKTsKLQotICAgIG1NYWNyb3NbbmFtZV0gPSBuZXcgTWFjcm8oTWFjcm86
OmtUeXBlT2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHN0ZDo6c3RyaW5n
KG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBw
cAotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvQ29udGV4dC5oCShyZXZpc2lvbiAxMjI3Mzgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0NPTlRFWFRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBD
b250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KCk7Ci0gICAgfkNvbnRleHQoKTsKLQot
ICAgIGJvb2wgaW5pdCgpOwotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCi0gICAgICAgICAgICAgICAgIFRv
a2VuVmVjdG9yKiBvdXRwdXQpOwotCi0gICAgdm9pZCogbGV4ZXIoKSB7IHJldHVybiBtTGV4ZXI7
IH0KLSAgICBpbnQgcmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwotICAgIFRva2Vu
VmVjdG9yKiBvdXRwdXQoKSB7IHJldHVybiBtT3V0cHV0OyB9Ci0KLSAgICBib29sIGRlZmluZU1h
Y3JvKHBwOjpUb2tlbjo6TG9jYXRpb24gbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBw
cDo6TWFjcm86OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBwYXJhbWV0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgcHA6OlRva2VuVmVjdG9yKiByZXBsYWNlbWVudHMpOwotICAg
IGJvb2wgdW5kZWZpbmVNYWNybyhjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0gICAgYm9vbCBp
c01hY3JvRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyogbmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0gICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgTWFjcm8qPiBNYWNyb1NldDsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAg
ICBib29sIGluaXRMZXhlcigpOwotICAgIHZvaWQgZGVzdHJveUxleGVyKCk7Ci0gICAgdm9pZCBk
ZWZpbmVCdWlsdEluTWFjcm8oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0g
ICAgYm9vbCBwYXJzZSgpOwotCi0gICAgdm9pZCogbUxleGVyOyAgLy8gTGV4ZXIgaGFuZGxlLgot
ICAgIElucHV0KiBtSW5wdXQ7Ci0gICAgVG9rZW5WZWN0b3IqIG1PdXRwdXQ7Ci0gICAgTWFjcm9T
ZXQgbU1hY3JvczsgIC8vIERlZmluZWQgbWFjcm9zLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9DT05URVhUX0hfCi0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWNzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFt
ZXNwYWNlIHBwCit7CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBm
b3IgcmVwb3J0aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMuCisvLyBEZXJpdmVkIGNsYXNzZXMgYXJl
IHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCitj
bGFzcyBEaWFnbm9zdGljcworeworICBwdWJsaWM6CisgICAgZW51bSBTZXZlcml0eQorICAgIHsK
KyAgICAgICAgRVJST1IsCisgICAgICAgIFdBUk5JTkcKKyAgICB9OworICAgIGVudW0gSUQKKyAg
ICB7CisgICAgICAgIEVSUk9SX0JFR0lOLAorICAgICAgICBJTlRFUk5BTF9FUlJPUiwKKyAgICAg
ICAgT1VUX09GX01FTU9SWSwKKyAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCisgICAgICAgIElO
VkFMSURfTlVNQkVSLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBFT0ZfSU5fRElS
RUNUSVZFLAorICAgICAgICBVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5W
QUxJRF9OQU1FLAorICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19S
RURFRklORUQsCisgICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAorICAgICAgICBN
QUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKKyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lO
Vk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9P
X01BTllfQVJHUywKKyAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAg
ICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAg
ICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRF
Uk1JTkFURUQsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFM
SURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJ
VkUsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVS
U0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCisgICAgICAgIElO
VkFMSURfRklMRV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAg
ICAgIEVSUk9SX0VORCwKKworICAgICAgICBXQVJOSU5HX0JFR0lOLAorICAgICAgICBDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAorICAg
ICAgICBXQVJOSU5HX0VORAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOwor
CisgICAgdm9pZCByZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0
IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgU2V2ZXJpdHkgc2V2ZXJp
dHkoSUQgaWQpOworCisgICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJz
CiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3Rp
Y3NCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlhZ25vc3RpY3Mu
aCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGlj
czo6fkRpYWdub3N0aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAg
Ly8gVE9ETyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAg
IHByaW50KGlkLCBsb2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25v
c3RpY3M6OnNldmVyaXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYg
KGlkIDwgRVJST1JfRU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+
IFdBUk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdB
Uk5JTkc7CisKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisjZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5jbHVk
ZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOwor
CisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vzc29y
IHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgorLy8g
cHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUg
Zm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNzIERp
cmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRs
ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlv
biYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVso
dmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRp
b24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93
LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
bmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitEaXJlY3Rp
dmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBw
cAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUg
PGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgi
CisjaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJz
ZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNp
bmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2VudW0gRGlyZWN0aXZlVHlwZQor
eworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJUkVDVElWRV9ERUZJTkUsCisgICAgRElSRUNU
SVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJFQ1RJVkVfSUZERUYsCisgICAg
RElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwKKyAgICBESVJFQ1RJVkVfRUxJ
RiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZFX0VSUk9SLAorICAgIERJUkVD
VElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKKyAgICBESVJFQ1RJVkVfVkVS
U0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5hbWVzcGFjZQorCitzdGF0aWMg
RGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKKyAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJpZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIpOworICAgIHN0YXRpYyBj
b25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOworICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVyc2lvbiIpOworICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGluZSIpOworCisgICAgaWYg
KHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgcmV0dXJuIERJ
UkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5l
KQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0RFRklORTsKKyAgICBlbHNlIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVG
OworICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWYpCisgICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3Rp
dmVJZmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsKKyAgICBlbHNlIGlmICh0
b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElW
RV9JRk5ERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQor
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVFbGlmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMSUY7CisgICAg
ZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FTkRJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2
ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOworICAgIGVsc2UgaWYgKHRv
a2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlUHJhZ21hKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X1BSQUdNQTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lv
bikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9r
ZW4tPnZhbHVlID09IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQor
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0xJTkU7CisKKyAgICByZXR1cm4gRElSRUNUSVZFX05P
TkU7Cit9CisKK3N0YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlw
ZSBkaXJlY3RpdmUpCit7CisgICAgc3dpdGNoIChkaXJlY3RpdmUpCisgICAgeworICAgICAgY2Fz
ZSBESVJFQ1RJVkVfSUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGTkRFRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6CisgICAgICBjYXNl
IERJUkVDVElWRV9FTElGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJl
Y3RpdmUuCitzdGF0aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAg
IHJldHVybiAodG9rZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tl
bjo6TEFTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVy
LCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHdoaWxlKCFpc0VPRCh0b2tlbikpCisgICAgewor
ICAgICAgICBsZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzTWFj
cm9OYW1lUmVzZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgICAgLy8gTmFtZXMg
cHJlZml4ZWQgd2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuc3Vic3RyKDAs
IDMpID09ICJHTF8iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5hbWVzIGNvbnRh
aW5pbmcgdHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KKyAgICBpZiAo
bmFtZS5maW5kKCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmlu
ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBwcDo6TWFjcm9TZXQmIG1hY3JvU2V0KQoreworICAgIHBwOjpNYWNyb1NldDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7CisgICAgcmV0dXJuIGl0ZXIg
IT0gbWFjcm9TZXQuZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCA6IGZhbHNlOworfQor
CituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGVmaW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgor
eworICBwdWJsaWM6CisgICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4ZXIsCisgICAgICAgICAg
ICAgICAgICBjb25zdCBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICAgICAgbUxleGVyKGxleGVyKSwKKyAgICAgICAg
bU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQor
ICAgIHsKKyAgICB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4q
IHRva2VuKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVk
KCJkZWZpbmVkIik7CisKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICh0b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgYm9vbCBwYXJlbiA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tl
bik7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHBhcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAg
ICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVO
RVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVy
LCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQo
KSA/ICIxIiA6ICIwIjsKKworICAgICAgICBpZiAocGFyZW4pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAn
KScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAg
ICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQg
ZGVmaW5lZCBvcGVyYXRvci4KKyAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBp
bnRvIGEgQ09OU1RfSU5UIHRva2VuLgorICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05T
VF9JTlQ7CisgICAgICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247CisgICAgfQorCisgIHBy
aXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0
OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6
OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAg
ICBtVG9rZW5pemVyKHRva2VuaXplciksCisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBt
RGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpLAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2
ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2Vu
KQoreworICAgIGRvCisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworCisg
ICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGFyc2VEaXJlY3RpdmUodG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IW1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNr
KCk7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNP
TkRJVElPTkFMX1VOVEVSTUlOQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9jay5sb2NhdGlvbiwgYmxvY2sudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9r
ZW4tPnR5cGUgPT0gJ1xuJykpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIERpcmVjdGl2ZVR5
cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKKworICAgIC8vIFdoaWxlIGluIGFu
IGV4Y2x1ZGVkIGNvbmRpdGlvbmFsIGJsb2NrL2dyb3VwLAorICAgIC8vIHdlIG9ubHkgcGFyc2Ug
Y29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KKyAgICBpZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRp
b25hbERpcmVjdGl2ZShkaXJlY3RpdmUpKQorICAgIHsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1U
b2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaChk
aXJlY3RpdmUpCisgICAgeworICAgICAgY2FzZSBESVJFQ1RJVkVfTk9ORToKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAg
ICAgcGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJ
VkVfSUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVm
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAg
ICAgICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNU
SVZFX0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6
CisgICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IERJUkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJz
ZVZlcnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJ
TkU6CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUg
PT0gVG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgIH0KK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKKworICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNNYWNyb1ByZWRl
ZmluZWQodG9rZW4tPnZhbHVlLCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRv
a2VuLT52YWx1ZSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6TUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAg
ICBtYWNyby5uYW1lID0gdG9rZW4tPnZhbHVlOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNl
KCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3Vt
ZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgICAgICAgICBpZiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOwor
CisgICAgICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcsJy4KKyAgICAg
ICAgfSB3aGlsZSAodG9rZW4tPnR5cGUgPT0gJywnKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5
cGUgIT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUg
KCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQor
ICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMg
dW5uZWNlc3NhcnkgaW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0
IGFsc28gYWxsb3dzIHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBj
b21wYXJlIG1hY3Jvcy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24o
KTsKKyAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2Vt
ZW50cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhl
IHJlcGxhY2VtZW50IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0
aGUgcmVwbGFjZW1lbnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1h
Y3JvLnJlcGxhY2VtZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAg
fQorCisgICAgLy8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBp
ZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25k
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNS
T19SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8u
bmFtZSwgbWFjcm8pKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9r
ZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElW
RV9VTkRFRik7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+
dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+Zmlu
ZCh0b2tlbi0+dmFsdWUpOworICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkpCisgICAg
eworICAgICAgICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVE
X1VOREVGSU5FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VJZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0lGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2
b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNv
bmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5k
ZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9JRk5ERUYpOworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3Zv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29u
ZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAg
ICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNr
KCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8vIE5vIGRpYWdu
b3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2Nr
LmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYmxvY2suZm91bmRFbHNlR3JvdXAgPSB0cnVlOworICAgIGJsb2NrLnNraXBHcm91cCA9IGJs
b2NrLmZvdW5kVmFsaWRHcm91cDsKKyAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOwor
CisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFmdGVyICNlbHNlLgorICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5F
WFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9r
ZW4pOworICAgIH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VM
SUYpOworCisgICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRI
T1VUX0lGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQorICAgIHsK
KyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KKyAg
ICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAgeworICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRHcm91cCkKKyAgICB7Cisg
ICAgICAgIC8vIERvIG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgLy8gQWxzbyBi
ZSBjYXJlZnVsIG5vdCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KKyAgICAgICAgYmxvY2suc2tpcEdy
b3VwID0gdHJ1ZTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNz
aW9uSWYodG9rZW4pOworICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKKyAg
ICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7Cit9CisKK3ZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOworCisgICAgaWYgKG1Db25kaXRp
b25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbUNvbmRpdGlvbmFsU3RhY2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhl
cmUgYXJlIHRva2VucyBhZnRlciAjZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
KyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKworICAgIHN0ZDo6c3RyaW5n
c3RyZWFtIHN0cmVhbTsKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAg
ICB7CisgICAgICAgIHN0cmVhbSA8PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7CisgICAgfQorICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+
bG9jYXRpb24sIHN0cmVhbS5zdHIoKSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTog
I3ByYWdtYSBuYW1lWyh2YWx1ZSldLgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21h
KFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJF
Q1RJVkVfUFJBR01BKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9O
QU1FLAorICAgICAgICBMRUZUX1BBUkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAg
IFJJR0hUX1BBUkVOCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6
c3RyaW5nIG5hbWUsIHZhbHVlOworICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicp
ICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2go
c3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAg
ICAgICBuYW1lID0gdG9rZW4tPnZhbHVlOworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
UFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+dmFsdWU7CisgICAgICAg
ICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFJJR0hUX1BBUkVOOgorICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJyknKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICB9CisKKyAgICB2YWxpZCA9IHZhbGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05B
TUUpIHx8ICAgICAvLyBFbXB0eSBwcmFnbWEuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRl
ID09IExFRlRfUEFSRU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAoc3RhdGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgorICAg
IGlmICghdmFsaWQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6VU5SRUNPR05JWkVEX1BSQUdNQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCBuYW1lKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFH
TUFfTkFNRSkgIC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KKyAgICB7CisgICAg
ICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1l
LCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNp
b24oVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9FWFRFTlNJT04pOworCisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAgRVhU
X05BTUUsCisgICAgICAgIENPTE9OLAorICAgICAgICBFWFRfQkVIQVZJT1IKKyAgICB9OworCisg
ICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7Cisg
ICAgaW50IHN0YXRlID0gRVhUX05BTUU7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwor
ICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgRVhUX05BTUU6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFN
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKKyAgICAg
ICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRf
QkVIQVZJT1IgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQg
PSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxl
ci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQor
Cit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAg
ICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBWRVJTSU9OX05VTUJFUgorICAgIH07CisKKyAg
ICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgaW50IHN0YXRl
ID0gVkVSU0lPTl9OVU1CRVI7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdo
aWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNU
KSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgVkVSU0lPTl9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVS
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUu
Y19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICB9CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAg
IHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVS
U0lPTl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tl
bi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VM
aW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBMSU5FX05V
TUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRy
dWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAgICBpbnQgc3RhdGUgPSBMSU5FX05V
TUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFj
cm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOworICAg
IHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpM
QVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAg
ICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkg
ZmlsZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1h
Y3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICB9CisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxp
ZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAg
ICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1i
ZXIoZmlsZSk7CisgICAgfQorfQorCitib29sIERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBj
b25zdAoreworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNr
LmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsK
K30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9r
ZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9jayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9r
ZW4tPnZhbHVlOworICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAg
aWYgKHNraXBwaW5nKCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2Nr
IGlzIGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlz
IHNraXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgor
ICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVz
c2lvbiB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBibG9jay5za2lwQmxvY2sg
PSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEaXJlY3RpdmVUeXBlIGRp
cmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24g
PSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRElSRUNUSVZFX0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lv
bklmKHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZF
X0lGREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRv
a2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRF
RjoKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikg
PT0gMCA/IDEgOiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBibG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgICAgIGJsb2Nr
LmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlv
bmFsU3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZl
KHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJz
ZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5k
ZXIgbWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3Mp
OworICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwg
bURpYWdub3N0aWNzKTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFu
ZGVyLmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJl
c3Npb24pOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHBy
ZXNzaW9uLgorICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZXhwcmVzc2lvbjsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHBy
ZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9JRk5ERUYpKTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFj
cm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKKyAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0g
bU1hY3JvU2V0LT5lbmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9r
ZW5zIGFmdGVyICNpZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KKyAgICByZXR1cm4g
ZXhwcmVzc2lvbjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElW
RV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJT
RVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRl
ICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBw
cAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitjbGFz
cyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgorewor
ICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAorICAg
ICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2Vu
KiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVVu
ZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7CisgICAg
dm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmbmRlZihUb2tl
biogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlUHJh
Z21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4p
OworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUxp
bmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmcoKSBjb25zdDsKKyAgICB2b2lk
IHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Np
b25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiog
dG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sKKyAgICB7CisgICAgICAgIHN0
ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgICAg
ICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3JvdXA7CisgICAgICAgIGJvb2wg
Zm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxzZUdyb3VwOworCisgICAgICAg
IENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lwQmxvY2soZmFsc2UpLAorICAg
ICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChm
YWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgfTsKKyAgICBzdGQ6OnZlY3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0
aW9uYWxTdGFjazsKKyAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7CisgICAgTWFjcm9TZXQqIG1N
YWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworICAgIERpcmVjdGl2ZUhh
bmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRh
YnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxOTQwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUg
Qmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3Mg
WWFjYy1saWtlIHBhcnNlcnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5
OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK
KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChh
dCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4g
ICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2Vy
IHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBz
a2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIg
Y2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdl
bmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YK
KyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChh
dCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3
aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0
IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExp
Y2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwg
ZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisg
ICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0
b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9y
aWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xz
IGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBp
bmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBm
b3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5k
ZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRp
b25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkg
c3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNF
IiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZ
QklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9O
ICIyLjMiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUg
InlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyog
VXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworLyogU3Vic3Rp
dHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNkZWZpbmUgeXlwYXJz
ZSBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgcHBsZXgKKyNkZWZpbmUgeXllcnJvciBwcGVycm9y
CisjZGVmaW5lIHl5bHZhbCAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgcHBjaGFyCisjZGVmaW5l
IHl5ZGVidWcgcHBkZWJ1ZworI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKKworCisvKiBUb2tlbnMu
ICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5
cGUgeworICAgICBUT0tfQ09OU1RfSU5UID0gMjU4LAorICAgICBUT0tfT1BfT1IgPSAyNTksCisg
ICAgIFRPS19PUF9BTkQgPSAyNjAsCisgICAgIFRPS19PUF9ORSA9IDI2MSwKKyAgICAgVE9LX09Q
X0VRID0gMjYyLAorICAgICBUT0tfT1BfR0UgPSAyNjMsCisgICAgIFRPS19PUF9MRSA9IDI2NCwK
KyAgICAgVE9LX09QX1JJR0hUID0gMjY1LAorICAgICBUT0tfT1BfTEVGVCA9IDI2NiwKKyAgICAg
VE9LX1VOQVJZID0gMjY3CisgICB9OworI2VuZGlmCisvKiBUb2tlbnMuICAqLworI2RlZmluZSBU
T0tfQ09OU1RfSU5UIDI1OAorI2RlZmluZSBUT0tfT1BfT1IgMjU5CisjZGVmaW5lIFRPS19PUF9B
TkQgMjYwCisjZGVmaW5lIFRPS19PUF9ORSAyNjEKKyNkZWZpbmUgVE9LX09QX0VRIDI2MgorI2Rl
ZmluZSBUT0tfT1BfR0UgMjYzCisjZGVmaW5lIFRPS19PUF9MRSAyNjQKKyNkZWZpbmUgVE9LX09Q
X1JJR0hUIDI2NQorI2RlZmluZSBUT0tfT1BfTEVGVCAyNjYKKyNkZWZpbmUgVE9LX1VOQVJZIDI2
NworCisKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAg
Ki8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpZiBkZWZpbmVkKF9fR05VQ19f
KQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNlbGlmIGRl
ZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2Vu
ZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0
PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRp
YWdub3N0aWNzLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisj
aWYgZGVmaW5lZChfTVNDX1ZFUikKK3R5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOworI2RlZmluZSBz
dHJ0b2xsIF9zdHJ0b2k2NAorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50
bWF4X3QgWVlTVFlQRTsKKyNlbmRpZiAgLy8gX01TQ19WRVIKKyNkZWZpbmUgWVlFTkFCTEVfTkxT
IDAKKyNkZWZpbmUgWVlMVFlQRV9JU19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklW
SUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1
Y3QgQ29udGV4dAoreworICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6
OkxleGVyKiBsZXhlcjsKKyAgICBwcDo6VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0Owor
fTsKK30gIC8vIG5hbWVzcGFjZQorCisKK3N0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAs
IENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pOworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZu
ZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZl
cmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRl
ZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBk
ZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4g
dGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxF
IDAKKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVf
SVNfREVDTEFSRUQKK3R5cGVkZWYgaW50IFlZU1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZ
UEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKwor
CisKKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKwor
CisvKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBz
aG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4
IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4
OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5
cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5
cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlU
WVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRl
ZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9U
WVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBz
aXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpF
X1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8
c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZ
WVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAor
IyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEp
CisKKyNpZm5kZWYgWVlfCisjIGlmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAg
IGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQor
IyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNn
aWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fybmlu
Z3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05V
Q19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVT
RShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRv
IHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRl
ZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgaSkKKyNlbHNlCitz
dGF0aWMgaW50CitZWUlEIChpKQorICAgIGludCBpOworI2VuZGlmCit7CisgIHJldHVybiBpOwor
fQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UK
KworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVj
ZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYg
WVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFf
QVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxt
YWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUg
YWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9j
YQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBf
U1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVu
ZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExP
QworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRl
ZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgw
KSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQg
Z3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ss
CisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAg
U28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVk
cyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBm
b3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisj
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2Eg
MjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxM
T0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExP
Q19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1V
TQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9j
KSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5j
bHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBp
Zm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGVuZGlmCisjICBl
bmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAg
IGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAg
aWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBm
cmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZp
bmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQg
eXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVm
aW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEg
dHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwor
dW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzczsKKyAgWVlTVFlQRSB5eXZzOwor
ICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25l
ZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAo
c2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxh
cmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50
cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2Yg
KHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQ
X01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUg
c291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYg
WVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywg
RnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZ
U0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJ
XAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGls
ZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9t
IGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxl
cyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgor
ICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlv
biBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQg
bG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JF
TE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwK
KwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0
YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5l
d2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJ
TVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAg
ICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJ
TkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmlu
ZSBZWUZJTkFMICAxNAorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisj
ZGVmaW5lIFlZTEFTVCAgIDE3NQorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFs
cy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgMjcKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9u
dGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICAzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIg
b2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5SVUxFUyAgMjYKKy8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDUyCisKKy8qIFlZVFJBTlNMQVRF
KFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAq
LworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2NworCisjZGVm
aW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZ
WU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKKworLyogWVlUUkFOU0xB
VEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQoreworICAgICAg
IDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgMjMsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAg
IDIsCisgICAgICAyNSwgICAgMjYsICAgIDE5LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwg
ICAgMjAsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgMTEsICAgICAyLCAg
ICAxMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICA3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICA2LCAgICAgMiwgICAgMjQsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgOSwgICAg
MTAsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAyMgorfTsKKworI2lmIFlZREVCVUcK
Ky8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUg
bnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDEx
LCAgICAxNSwgICAgMTksICAgIDIzLCAgICAyNywKKyAgICAgIDMxLCAgICAzNSwgICAgMzksICAg
IDQzLCAgICA0NywgICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAorICAgICAgNzEs
ICAgIDc1LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEKK307CisKKy8qIFlZUkhT
IC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9Cit7CisgICAgICAyOCwgICAgIDAsICAgIC0xLCAg
ICAyOSwgICAgLTEsICAgICAzLCAgICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKKyAgICAgIC0x
LCAgICAyOSwgICAgIDUsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEs
ICAgIDI5LAorICAgICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAg
LTEsICAgIDI5LCAgICAgOSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwg
ICAgLTEsICAgIDI5LCAgICAxMywgICAgMjksICAgIC0xLCAgICAyOSwKKyAgICAgIDE0LCAgICAy
OSwgICAgLTEsICAgIDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5
LAorICAgICAgLTEsICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAg
IDI5LCAgICAtMSwgICAgMjksCisgICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgIDIxLCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAg
MjAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAorICAg
ICAgMjksICAgIC0xLCAgICAyNCwgICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAg
ICAxNywgICAgMjksCisgICAgICAtMSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKK307CisK
Ky8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2Fz
IGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQorewor
ICAgICAgIDAsICAgIDg5LCAgICA4OSwgICAgOTYsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA2
LCAgIDEwOSwgICAxMTIsCisgICAgIDExNSwgICAxMTgsICAgMTIxLCAgIDEyNCwgICAxMjcsICAg
MTMwLCAgIDEzMywgICAxMzYsICAgMTM5LCAgIDE0MiwKKyAgICAgMTU1LCAgIDE2OCwgICAxNzEs
ICAgMTc0LCAgIDE3NywgICAxODAsICAgMTgzCit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8
IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1d
IC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUg
dGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICov
CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJy
b3IiLCAiJHVuZGVmaW5lZCIsICJUT0tfQ09OU1RfSU5UIiwgIlRPS19PUF9PUiIsCisgICJUT0tf
T1BfQU5EIiwgIid8JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9ORSIsICJUT0tfT1BfRVEiLCAi
JzwnIiwKKyAgIic+JyIsICJUT0tfT1BfR0UiLCAiVE9LX09QX0xFIiwgIlRPS19PUF9SSUdIVCIs
ICJUT0tfT1BfTEVGVCIsICInKyciLAorICAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlRP
S19VTkFSWSIsICInISciLCAiJ34nIiwgIicoJyIsICInKSciLAorICAiJGFjY2VwdCIsICJpbnB1
dCIsICJleHByZXNzaW9uIiwgMAorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZ
VE9LTlVNW1lZTEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcg
dG8KKyAgIHRva2VuIFlZTEVYLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5
eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAy
NjAsICAgMTI0LCAgICA5NCwgICAgMzgsICAgMjYxLAorICAgICAyNjIsICAgIDYwLCAgICA2Miwg
ICAyNjMsICAgMjY0LCAgIDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCisgICAgICA0
NywgICAgMzcsICAgMjY3LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQorfTsKKyMgZW5kaWYK
KworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAg
ICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjkKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Yg
c3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorICAgICAg
IDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMworfTsKKworLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJl
ZHVjZSB3aXRoIGluIHN0YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3Bl
Y2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlz
IGFuIGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAyLCAgICAyNSwKKyAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUs
ICAgIDE2LCAgICAxOCwgICAgMTcsICAgIDIxLAorICAgICAgMjAsICAgIDE5Cit9OworCisvKiBZ
WURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZn
b3RvW10gPQoreworICAgICAgLTEsICAgICA3LCAgICAgOAorfTsKKworLyogWVlQQUNUW1NUQVRF
LU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBT
VEFURS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCisgICAgIC0xMSwgICAtMTEs
ICAgLTExLCAgICAyNywgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwK
KyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAg
IDEwMSwgICAxMTYsICAgMTMwLCAgIDE0MywgICAxNTQsCisgICAgIDE1NCwgICAtMTAsICAgLTEw
LCAgIC0xMCwgICAtMTAsICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKKyAgICAg
LTExLCAgIC0xMQorfTsKKworLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfaW50OCB5eXBnb3RvW10gPQoreworICAgICAtMTEsICAgLTExLCAgICAtMgorfTsK
KworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNU
QVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZl
LCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6
ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBl
cnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklORiAtMQorc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRhYmxlW10gPQoreworICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IDE0LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAg
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIKK307CisKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQor
eworICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAg
ICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgMywKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDI2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
CisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
IDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAy
MSwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKK307CisK
Ky8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNj
ZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAg
ICAgIDI5LCAgICAyOQorfTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQor
I2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCSgt
MikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFi
CisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3Rv
IHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4g
IFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9u
IHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVy
c2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworCisjZGVm
aW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5
eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJ
CQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAg
IHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFs
ID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7
CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwK
KyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1
cCIpKTsgXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlIChZ
WUlEICgwKSkKKworCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1Ngor
CisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0g
dG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBs
b2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5
cyBkZWZpbmVkKS4gICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCisj
aWZuZGVmIFlZTExPQ19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBS
aHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlEIChOKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsJCQkJCQkJ
CVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9s
aW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmly
c3RfY29sdW1uOwlcCisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywg
TikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChS
aHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxzZQkJCQkJCQkJXAor
CXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9s
aW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKwkgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAorCSAgICBZ
WVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB3aGls
ZSAoWVlJRCAoMCkpCisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0
aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRl
ZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1
c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNp
Zm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZp
bmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwg
IiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3Rf
Y29sdW1uLAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCisj
IGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkK
KyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRo
ZSByaWdodCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhfUEFSQU0KKyMgZGVmaW5lIFlZ
TEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRlZmluZSBZWUxFWCB5
eWxleCAoJnl5bHZhbCwgY29udGV4dCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5nIGlm
IHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMgIGlu
Y2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRl
ZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYoQXJn
cykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYg
QXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklO
VChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAor
ICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJp
bnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAgICAg
IFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCit9
IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQg
KEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1
ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1
ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgRklMRSAq
eXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVw
KQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBpZmRlZiBZWVBSSU5UCisgIGlm
ICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5
dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYK
KyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9
Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhp
cyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGlj
IHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZ
UEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0
aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29u
dGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7
CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRv
a2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91
dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1
ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklO
VEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQg
LS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBU
T1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpi
b3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19w
cmludCAoYm90dG9tLCB0b3ApCisgICAgeXl0eXBlX2ludDE2ICpib3R0b207CisgICAgeXl0eXBl
X2ludDE2ICp0b3A7CisjZW5kaWYKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ci
KTsKKyAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQorICAgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKwor
IyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwK
KyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChU
b3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUg
aXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3As
IGludCB5eXJ1bGUsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3Jl
ZHVjZV9wcmludCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsK
KyAgICBpbnQgeXlydWxlOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50
IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQg
eXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcg
c3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5v
KTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsg
eXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAk
JWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5
eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKKwkJICAgICAgIAkJICAgICAgICwgY29udGV4dCk7CisgICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlc
CitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5
eXZzcCwgUnVsZSwgY29udGV4dCk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJv
IG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRo
YXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7Cisj
ZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZ
WV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZ
X1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUp
CisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNp
emUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRl
ZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0g
c2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1
aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtl
IHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZ
WVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZh
bHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisK
KyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisK
KwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVm
aW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4g
c3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5
eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0
cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpF
X1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAg
Y29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZu
ZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdf
SCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAg
ZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0
aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAq
eXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNw
eSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlz
cmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMg
PSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250
aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZu
ZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0
ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMs
IHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlz
IHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAg
IGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhh
bgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUu
ICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUg
bGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRp
YyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7
CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7Cisg
ICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2gg
KCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRv
X25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAn
XFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJv
dWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAg
aWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOwor
CSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMp
CisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJl
cywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBh
biBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hp
bGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwK
KyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMg
bnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1
cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAg
UmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUg
Y2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAq
eXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0
W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNU
KSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRS
QU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAs
IHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAg
ICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAg
ICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFy
IGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5
eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFu
c2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8K
KyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZ
WV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVz
Iik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVz
IG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAg
IGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtd
ID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25z
dCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNv
bnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4
cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkp
XTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8q
IFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMg
aW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6
IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5
dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAg
ICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlO
VE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5h
bWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0
ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQor
CWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsK
KwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAg
ICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXpl
b2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5
YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5
eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlz
aXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlz
dHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKwor
ICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0
cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7
CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQor
CXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8q
IEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFj
ZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5z
bGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2Yg
IiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkg
IHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9
PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9
IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAg
ICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAg
ICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAq
LworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJH
U1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQ
RSAqeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVz
dHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIg
Knl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgQ29u
dGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAo
Y29udGV4dCk7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZ
X1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKwor
ICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAg
fQorfQorDAorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMu
ICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vs
c2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8K
KyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNl
IChDb250ZXh0ICpjb250ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vu
ZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworCisKKworLyotLS0tLS0tLS0tLgorfCB5
eXBhcnNlLiAgfAorYC0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAq
WVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAg
dm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICov
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNl
IChDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkKKyAgICBD
b250ZXh0ICpjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKyAgLyogVGhlIGxvb2stYWhlYWQg
c3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUg
bG9vay1haGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKy8qIE51bWJlciBvZiBz
eW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXluZXJyczsKKworICBpbnQgeXlzdGF0ZTsK
KyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNo
aWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVz
OworICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tl
biBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbiA9IDA7CisjaWYgWVlFUlJPUl9WRVJCT1NFCisg
IC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAq
LworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXltc2didWY7CisgIFlZ
U0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlmCisKKyAgLyogVGhy
ZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRl
cywKKyAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKKyAgICAgYHl5bHMn
OiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKworICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUg
c2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgdG8gcmVhbGxvY2F0
ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgeXl0
eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlz
c2E7CisgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0
YWNrLiAgKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgIFlZU1RZUEUgKnl5dnMg
PSB5eXZzYTsKKyAgWVlTVFlQRSAqeXl2c3A7CisKKworCisjZGVmaW5lIFlZUE9QU1RBQ0soTikg
ICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgWVlTSVpFX1QgeXlzdGFja3NpemUg
PSBZWUlOSVRERVBUSDsKKworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFu
dGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24gcm91dGluZXMuICAq
LworICBZWVNUWVBFIHl5dmFsOworCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRo
ZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3lt
Ym9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5
ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBD
YXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9p
bnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFj
aworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUg
c3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAg
Ki8KKworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBnb3RvIHl5c2V0c3Rh
dGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlz
IGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwg
Y2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwor
ICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVu
cyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9
IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAg
eworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tz
LCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3Mg
KyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUgdXNlciBhIGNoYW5j
ZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0
aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAg
Ki8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
CisKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBz
aXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhp
cyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJh
IGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMg
YSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAg
ICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXl2c3ApLAorCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlzcyA9IHl5
c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8K
KyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Cisj
IGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAg
aWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1c3RlZGxhYjsKKyAg
ICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXpl
KQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5dHlwZV9pbnQxNiAq
eXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9j
ICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEg
eXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3Mp
OworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOworCisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRF
CisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisgICAgICB9
CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5
c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKKworCisg
ICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIs
CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlz
cyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQ
UklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGdv
dG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAgfAorYC0tLS0tLS0t
LS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4g
dGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBu
ZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5
IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9r
ZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlQQUNUX05J
TkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2st
YWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wu
ICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAg
ICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eXRv
a2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlu
cHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5T
TEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5
eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3BlciBh
Y3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAgIGRl
dGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2VuOwor
ICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4p
CisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8
PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQor
CWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsK
KyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIENv
dW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJy
b3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVz
LS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xf
UFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERp
c2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNo
YXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOwor
ICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYg
KHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1Y2U7CisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rp
b24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlyZWR1Y2U6CisgIC8q
IHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVu
ID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUg
ZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScuCisKKyAgICAgT3Ro
ZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgorICAgICBU
aGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxk
IG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25h
bGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAg
IEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisg
IHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Cisg
IHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisgICAgeworICAgICAgICAq
KGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgIFlZQUNDRVBUOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgXiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAo
eXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAt
ICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSA+ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ6
CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1OgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgKyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE5OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8
PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9a
RVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAg
IHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygx
KSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3Ry
KCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
ICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
ISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gLSAo
eXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisg
ICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygyKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3IG9mIHlh
Y2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BS
SU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RB
Q0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworCisgICorK3l5dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0
IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMg
dG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAg
ICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0
YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0
YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQor
ICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5
ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBv
biBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVy
cm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgewor
ICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1Qg
eXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNn
X2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQor
CSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5
c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkg
ICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0g
eXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNo
YXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5
eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXlt
c2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0K
KworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAg
KHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXll
cnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAo
Y29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkg
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQor
CisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRy
aWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJv
ciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAg
LyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIg
PT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1
Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRl
eHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0
cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAg
ICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJv
ciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8qIFBh
Y2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMK
KyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFw
cGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAg
ICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9m
IHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8K
KyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJv
ciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAz
OwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZv
ciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5
biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5
eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsK
KwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFr
OworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBp
dCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0g
eXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIs
CisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNL
ICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7
CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4u
ICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwg
eXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZ
QUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0t
IFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisK
KyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBj
b21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygibWVt
b3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAq
LworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAh
PSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhl
YWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCByZWNsYWlt
IHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhp
cyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7
CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNz
cF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5k
ZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5
c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1
ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJ
RCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCitp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5
cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lO
VDoKKyAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwg
MCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBlID0gVE9LX09QX09SOyBicmVhazsKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBUT0tfT1BfQU5EOyBicmVhazsKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9IFRPS19PUF9ORTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBUT0tfT1BfRVE7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gVE9LX09QX0dFOyBicmVhazsKKyAgICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9MRTogdHlwZSA9IFRPS19PUF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBUT0tfT1BfUklHSFQ7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBUT0tfT1BfTEVGVDsgYnJlYWs7CisgICAgICBj
YXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7CisgICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsg
YnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+
JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7
CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7CisgICAgICBjYXNlICcrJzogdHlw
ZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAg
ICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcq
JzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlwZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNl
ICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJl
YWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhl
IGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVy
LT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCit7CisgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBw
cCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFn
bm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKworYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJz
ZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQoreworICAgIENvbnRleHQgY29udGV4dDsKKyAg
ICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIg
PSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0
ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2gg
KHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6CisgICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0
aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQgPT0gMDsK
K30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFS
U0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERp
YWdub3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Np
b25QYXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVy
LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9r
ZW4sIGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlh
Z25vc3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJz
CiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLnkJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjc2IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0
aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJ
RiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJz
ZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Np
b24gcGFyc2VyLgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0
by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRl
ZmluZWQoX19HTlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZh
bCB2YXJpYWJsZS4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxp
emVkIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MDY1IDQ3MDEpCisjZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2lu
Y2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
CisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
IlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZ
UEU7CisjZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5o
PgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmlu
ZSBZWUVOQUJMRV9OTFMgMAorI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZ
WVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFt
ZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9z
dGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAg
aW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCislfQorCislcHVyZS1wYXJzZXIKKyVu
YW1lLXByZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBh
cmFtIHtDb250ZXh0ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBs
dmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAor
JWxlZnQgVE9LX09QX09SCislbGVmdCBUT0tfT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJwor
JWxlZnQgJyYnCislbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCislbGVmdCAnPCcgJz4nIFRPS19P
UF9MRSBUT0tfT1BfR0UKKyVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysn
ICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQK
KyAgICA6IGV4cHJlc3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCQxKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9u
CisgICAgOiBUT0tfQ09OU1RfSU5UCisgICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRP
S19PUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBe
ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAk
JCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgIT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tf
T1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgPD0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgPiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc8JyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
VE9LX09QX1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
JDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4
cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQz
OworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lP
Tl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwg
JDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFt
LnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJP
UlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxIC8gJDM7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7
CisgICAgICAgICQkID0gISAkMjsKKyAgICB9CisgICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBU
T0tfVU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7CisgICAgfQorICAgIHwgJy0nIGV4cHJlc3Np
b24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSAtICQyOworICAgIH0KKyAgICB8ICcr
JyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gKyAkMjsKKyAgICB9
CisgICAgfCAnKCcgZXhwcmVzc2lvbiAnKScgeworICAgICAgICAkJCA9ICQyOworICAgIH0KKzsK
KworJSUKKworaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tl
bjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpDT05TVF9JTlQ6CisgICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3Ry
KCksIE5VTEwsIDApOworICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJl
YWs7CisKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJl
YWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFr
OworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsK
KyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsK
KyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFr
OworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5
cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAg
ICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAn
PCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2Fz
ZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJy
ZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6
IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwor
ICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUg
PSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRv
a2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250
ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5
ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJ
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9j
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCitu
YW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVy
KiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwK
KyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBh
cnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250
ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250
ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Cisg
ICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAg
ICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRv
a2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
cmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhw
cmVzc2lvblBhcnNlci55Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvSW5wdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDE1OSArNiw0OSBAQAogCiAjaW5jbHVkZSAiSW5w
dXQuaCIKIAotI2luY2x1ZGUgPGNzdGRpbz4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0
cmluZz4KIAogbmFtZXNwYWNlIHBwCiB7CiAKLUlucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi0gICAgOiBtQ291bnQo
Y291bnQpLAotICAgICAgbVN0cmluZyhzdHJpbmcpLAotICAgICAgbUxlbmd0aChsZW5ndGgpLAot
ICAgICAgbUluZGV4KC0xKSwKLSAgICAgIG1TaXplKDApLAotICAgICAgbUVycm9yKGtFcnJvck5v
bmUpLAotICAgICAgbVN0YXRlKGtTdGF0ZUluaXRpYWwpCitJbnB1dDo6SW5wdXQoKSA6IG1Db3Vu
dCgwKSwgbVN0cmluZygwKQogewotICAgIEFTU0VSVChtQ291bnQgPj0gMCk7Ci0gICAgc3dpdGNo
VG9OZXh0U3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5wdXQ6OmVvZigpIGNvbnN0CitJbnB1dDo6SW5w
dXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0
aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0cmluZykKIHsKLSAgICBB
U1NFUlQobUluZGV4IDw9IG1Db3VudCk7Ci0gICAgcmV0dXJuIG1JbmRleCA9PSBtQ291bnQ7Cisg
ICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxl
biA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhs
ZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9CiB9CiAKLWludCBJbnB1
dDo6cmVhZChjaGFyKiBidWYsIGludCBidWZTaXplKQoraW50IElucHV0OjpyZWFkKGNoYXIqIGJ1
ZiwgaW50IG1heFNpemUpCiB7Ci0gICAgaW50IG5yZWFkID0gMDsKLSAgICBpbnQgc3RhcnRJbmRl
eCA9IG1JbmRleDsKLSAgICAvLyBLZWVwIHJlYWRpbmcgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxs
IG9yIHRoZSBjdXJyZW50IHN0cmluZyBpcyBleGhhdXN0ZWQuCi0gICAgd2hpbGUgKChtSW5kZXgg
PT0gc3RhcnRJbmRleCkgJiYgKG5yZWFkIDwgYnVmU2l6ZSkpCisgICAgaW50IG5SZWFkID0gMDsK
KyAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3Vu
dCkpCiAgICAgewotICAgICAgICBpbnQgYyA9IGdldENoYXIoKTsKLSAgICAgICAgaWYgKGMgPT0g
RU9GKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlID09IGtTdGF0ZUJsb2NrQ29t
bWVudCkKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBrRXJyb3JVbmV4cGVjdGVkRU9GOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21S
ZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1p
bihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5nW21S
ZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVhZCAr
PSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKIAotICAgICAgICBzd2l0
Y2ggKG1TdGF0ZSkKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYgd2UgcmVhY2hlZCB0aGUg
ZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRMb2MuY0luZGV4ID09IG1M
ZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkKICAgICAgICAgewotICAgICAgICAgIGNhc2Uga1N0YXRl
SW5pdGlhbDoKLSAgICAgICAgICAgIGlmIChjID09ICcvJykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBQb3RlbnRpYWxseSBhIGNvbW1lbnQuCi0gICAgICAgICAgICAgICAgc3dp
dGNoIChwZWVrQ2hhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgJy8nOgotICAgICAgICAgICAgICAgICAgICBnZXRDaGFyKCk7ICAvLyBFYXQgJy8nLgotICAg
ICAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAg
ICAgICAgICAgZ2V0Q2hhcigpOyAgLy8gRWF0ICcqJy4KLSAgICAgICAgICAgICAgICAgICAgbVN0
YXRlID0ga1N0YXRlQmxvY2tDb21tZW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIGNv
bW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Uga1N0YXRlTGluZUNv
bW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJ1ZltucmVhZCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0
YXRlSW5pdGlhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgY2FzZSBrU3RhdGVCbG9ja0NvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYg
KHBlZWtDaGFyKCkgPT0gJy8nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRD
aGFyKCk7ICAgLy8gRWF0ICcvJy4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSAnICc7
ICAvLyBSZXBsYWNlIGNvbW1lbnQgd2l0aCB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIG1T
dGF0ZSA9IGtTdGF0ZUluaXRpYWw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGJyZWFrcyBhcmUgbmV2ZXIg
c2tpcHBlZC4KLSAgICAgICAgICAgICAgICBidWZbbnJlYWQrK10gPSBjOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKyttUmVhZExv
Yy5zSW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAwOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgcmV0dXJuIG5yZWFkOwotfQotCi1pbnQgSW5wdXQ6OmdldENoYXIoKQotewot
ICAgIGlmIChlb2YoKSkgcmV0dXJuIEVPRjsKLQotICAgIGNvbnN0IGNoYXIqIHN0ciA9IG1TdHJp
bmdbbUluZGV4XTsKLSAgICBpbnQgYyA9IHN0clttU2l6ZSsrXTsKLQotICAgIC8vIFN3aXRjaCB0
byBuZXh0IHN0cmluZyBpZiB0aGUgY3VycmVudCBvbmUgaXMgZnVsbHkgcmVhZC4KLSAgICBpbnQg
bGVuZ3RoID0gc3RyaW5nTGVuZ3RoKG1JbmRleCk7Ci0gICAgLy8gV2UgbmV2ZXIgcmVhZCBmcm9t
IGVtcHR5IHN0cmluZy4KLSAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgIGlmICgoKGxlbmd0
aCA8IDApICYmIChzdHJbbVNpemVdID09ICdcMCcpKSB8fAotICAgICAgICAoKGxlbmd0aCA+IDAp
ICYmIChtU2l6ZSA9PSBsZW5ndGgpKSkKLSAgICAgICAgc3dpdGNoVG9OZXh0U3RyaW5nKCk7Ci0K
LSAgICByZXR1cm4gYzsKLX0KLQotaW50IElucHV0OjpwZWVrQ2hhcigpCi17Ci0gICAgLy8gU2F2
ZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICAgIGludCBpbmRleCA9IG1JbmRleDsKLSAg
ICBpbnQgc2l6ZSA9IG1TaXplOwotICAgIGludCBjID0gZ2V0Q2hhcigpOwotCi0gICAgLy8gUmVz
dG9yZSByZWFkIHBvc2l0aW9uLgotICAgIG1JbmRleCA9IGluZGV4OwotICAgIG1TaXplID0gc2l6
ZTsKLSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBJbnB1dDo6c3dpdGNoVG9OZXh0U3RyaW5nKCkK
LXsKLSAgICBBU1NFUlQobUluZGV4IDwgbUNvdW50KTsKLQotICAgIG1TaXplID0gMDsKLSAgICBk
bwotICAgIHsKLSAgICAgICAgKyttSW5kZXg7Ci0gICAgfSB3aGlsZSAoIWVvZigpICYmIGlzU3Ry
aW5nRW1wdHkobUluZGV4KSk7Ci19Ci0KLWJvb2wgSW5wdXQ6OmlzU3RyaW5nRW1wdHkoaW50IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCA8IG1Db3VudCk7Ci0KLSAgICBjb25zdCBjaGFyKiBz
dHIgPSBtU3RyaW5nW21JbmRleF07Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZ0xlbmd0aChtSW5k
ZXgpOwotICAgIHJldHVybiAobGVuZ3RoID09IDApIHx8ICgobGVuZ3RoIDwgMCkgJiYgKHN0clsw
XSA9PSAnXDAnKSk7Ci19Ci0KLWludCBJbnB1dDo6c3RyaW5nTGVuZ3RoKGludCBpbmRleCkKLXsK
LSAgICBBU1NFUlQoaW5kZXggPCBtQ291bnQpOwotICAgIHJldHVybiBtTGVuZ3RoID8gbUxlbmd0
aFtpbmRleF0gOiAtMTsKKyAgICByZXR1cm4gblJlYWQ7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBw
cAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRh
YnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCShyZXZpc2lvbiAx
MjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDY2ICs3LDQwIEBACiAjaWZuZGVm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwogI2RlZmluZSBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfSU5QVVRfSF8KIAorI2luY2x1ZGUgPHZlY3Rvcj4KKwogbmFtZXNwYWNlIHBwCiB7CiAK
LS8vIFJlYWRzIHRoZSBnaXZlbiBzZXQgb2Ygc3RyaW5ncyBpbnRvIGlucHV0IGJ1ZmZlci4KLS8v
IFN0cmlwcyBjb21tZW50cy4KKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCiBj
bGFzcyBJbnB1dAogewogICBwdWJsaWM6CisgICAgSW5wdXQoKTsKICAgICBJbnB1dChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0g
ICAgZW51bSBFcnJvcgotICAgIHsKLSAgICAgICAga0Vycm9yTm9uZSwKLSAgICAgICAga0Vycm9y
VW5leHBlY3RlZEVPRgotICAgIH07Ci0gICAgRXJyb3IgZXJyb3IoKSBjb25zdCB7IHJldHVybiBt
RXJyb3I7IH0KKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KKyAgICBj
b25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4
XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2lu
ZGV4XTsgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2Ygc3RyaW5nIGN1cnJlbnRseSBi
ZWluZyBzY2FubmVkLgotICAgIGludCBzdHJpbmdJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1JbmRl
eDsgfQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBFT0YgaGFzIHJlYWNoZWQuCi0gICAgYm9vbCBl
b2YoKSBjb25zdDsKLQotICAgIC8vIFJlYWRzIHVwIHRvIGJ1ZlNpemUgY2hhcmFjdGVycyBpbnRv
IGJ1Zi4KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgotICAg
IC8vIEl0IHJlcGxhY2VzIGVhY2ggY29tbWVudCBieSBhIHdoaXRlc3BhY2UuIEl0IHJlYWRzIG9u
bHkgb25lIHN0cmluZwotICAgIC8vIGF0IGEgdGltZSBzbyB0aGF0IHRoZSBsZXhlciBoYXMgb3Bw
b3J0dW5pdHkgdG8gdXBkYXRlIHRoZSBzdHJpbmcgbnVtYmVyCi0gICAgLy8gZm9yIG1lYW5pbmdm
dWwgZGlhZ25vc3RpYyBtZXNzYWdlcy4KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBidWZT
aXplKTsKKyAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKIAotcHJpdmF0ZToK
LSAgICBlbnVtIFN0YXRlCisgICAgc3RydWN0IExvY2F0aW9uCiAgICAgewotICAgICAgICBrU3Rh
dGVJbml0aWFsLAotICAgICAgICBrU3RhdGVMaW5lQ29tbWVudCwKLSAgICAgICAga1N0YXRlQmxv
Y2tDb21tZW50Ci0gICAgfTsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsK
KyAgICAgICAgaW50IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCiAKLSAgICBpbnQgZ2V0Q2hhcigp
OwotICAgIGludCBwZWVrQ2hhcigpOwotICAgIC8vIFN3aXRjaGVzIGlucHV0IGJ1ZmZlciB0byB0
aGUgbmV4dCBub24tZW1wdHkgc3RyaW5nLgotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhl
IGN1cnJlbnQgc3RyaW5nIGlzIGZ1bGx5IHJlYWQuCi0gICAgdm9pZCBzd2l0Y2hUb05leHRTdHJp
bmcoKTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBlbXB0eS4K
LSAgICBib29sIGlzU3RyaW5nRW1wdHkoaW50IGluZGV4KTsKLSAgICAvLyBSZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgotICAgIC8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1
ZSBmb3IgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCi0gICAgaW50IHN0cmluZ0xlbmd0aChpbnQg
aW5kZXgpOworICAgICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9Cisg
ICAgfTsKKyAgICBjb25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1SZWFk
TG9jOyB9CiAKKyAgcHJpdmF0ZToKICAgICAvLyBJbnB1dC4KICAgICBpbnQgbUNvdW50OwogICAg
IGNvbnN0IGNoYXIqIGNvbnN0KiBtU3RyaW5nOwotICAgIGNvbnN0IGludCogbUxlbmd0aDsKKyAg
ICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7CiAKLSAgICAvLyBDdXJyZW50IHJlYWQgcG9zaXRp
b24uCi0gICAgaW50IG1JbmRleDsgICAvLyBJbmRleCBvZiBzdHJpbmcgY3VycmVudGx5IGJlaW5n
IHNjYW5uZWQuCi0gICAgaW50IG1TaXplOyAgICAvLyBTaXplIG9mIHN0cmluZyBhbHJlYWR5IHNj
YW5uZWQuCi0KLSAgICAvLyBDdXJyZW50IGVycm9yIGFuZCBzdGF0ZS4KLSAgICBFcnJvciBtRXJy
b3I7Ci0gICAgU3RhdGUgbVN0YXRlOworICAgIExvY2F0aW9uIG1SZWFkTG9jOwogfTsKIAogfSAg
Ly8gbmFtZXNwYWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sK
KworTGV4ZXI6On5MZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTGV4ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9MRVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNl
bmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMzkgKzYsMTcgQEAKIAogI2luY2x1ZGUgIk1hY3JvLmgi
CiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGxfdXRpbHMuaCIKKyNpbmNs
dWRlICJUb2tlbi5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotTWFjcm86Ok1hY3JvKFR5cGUgdHlw
ZSwKLSAgICAgICAgICAgICBzdGQ6OnN0cmluZyogbmFtZSwKLSAgICAgICAgICAgICBUb2tlblZl
Y3RvciogcGFyYW1ldGVycywKLSAgICAgICAgICAgICBUb2tlblZlY3RvciogcmVwbGFjZW1lbnRz
KQotICAgIDogbVR5cGUodHlwZSksCi0gICAgICBtTmFtZShuYW1lKSwKLSAgICAgIG1QYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpLAotICAgICAgbVJlcGxhY2VtZW50cyhyZXBsYWNlbWVudHMpCitib29s
IE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAogewotfQotCi1NYWNybzo6
fk1hY3JvKCkKLXsKLSAgICBkZWxldGUgbU5hbWU7Ci0KLSAgICBpZiAobVBhcmFtZXRlcnMpCi0g
ICAgewotICAgICAgICBzdGQ6OmZvcl9lYWNoKG1QYXJhbWV0ZXJzLT5iZWdpbigpLCBtUGFyYW1l
dGVycy0+ZW5kKCksIERlbGV0ZSgpKTsKLSAgICAgICAgZGVsZXRlIG1QYXJhbWV0ZXJzOwotICAg
IH0KLQotICAgIGlmIChtUmVwbGFjZW1lbnRzKQotICAgIHsKLSAgICAgICAgc3RkOjpmb3JfZWFj
aChtUmVwbGFjZW1lbnRzLT5iZWdpbigpLCBtUmVwbGFjZW1lbnRzLT5lbmQoKSwgRGVsZXRlKCkp
OwotICAgICAgICBkZWxldGUgbVJlcGxhY2VtZW50czsKLSAgICB9CisgICAgcmV0dXJuICh0eXBl
ID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90aGVyLm5hbWUpICYmCisg
ICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMpICYmCisgICAgICAgICAg
IChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKIH0KIAogfSAgLy8gbmFtZXNw
YWNlIHBwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxs
b3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgJKHJldmlz
aW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw0NSArNywzOCBAQAogI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01B
Q1JPX0hfCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZl
Y3Rvcj4KIAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4u
aCIKLQogbmFtZXNwYWNlIHBwCiB7CiAKLWNsYXNzIE1hY3JvCitzdHJ1Y3QgVG9rZW47CisKK3N0
cnVjdCBNYWNybwogewotICBwdWJsaWM6CiAgICAgZW51bSBUeXBlCiAgICAgewogICAgICAgICBr
VHlwZU9iaiwKICAgICAgICAga1R5cGVGdW5jCiAgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9r
ZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlz
YWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBN
YWNybyYgb3RoZXIpIGNvbnN0OwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIHBvaW50ZXIg
cGFyYW1ldGVycy4KLSAgICBNYWNybyhUeXBlIHR5cGUsCi0gICAgICAgICAgc3RkOjpzdHJpbmcq
IG5hbWUsCi0gICAgICAgICAgVG9rZW5WZWN0b3IqIHBhcmFtZXRlcnMsCi0gICAgICAgICAgVG9r
ZW5WZWN0b3IqIHJlcGxhY2VtZW50cyk7Ci0gICAgfk1hY3JvKCk7Ci0KLSAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBpZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBjb25zdCBUb2tlblZlY3RvciogcGFy
YW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1QYXJhbWV0ZXJzOyB9Ci0gICAgY29uc3QgVG9rZW5W
ZWN0b3IqIHJlcGxhY2VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1SZXBsYWNlbWVudHM7IH0KLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNybyk7Ci0KLSAgICBU
eXBlIG1UeXBlOwotICAgIHN0ZDo6c3RyaW5nKiBtTmFtZTsKLSAgICBUb2tlblZlY3RvciogbVBh
cmFtZXRlcnM7Ci0gICAgVG9rZW5WZWN0b3IqIG1SZXBsYWNlbWVudHM7CisgICAgYm9vbCBwcmVk
ZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAg
ICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBs
YWNlbWVudHMgcmVwbGFjZW1lbnRzOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3Ry
aW5nLCBNYWNybz4gTWFjcm9TZXQ7CiAKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhw
YW5kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2OSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3Rp
Y3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgVG9r
ZW5MZXhlciA6IHB1YmxpYyBMZXhlcgoreworIHB1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFRva2VuPiBUb2tlblZlY3RvcjsKKworICAgIFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRv
a2VucykKKyAgICB7CisgICAgICAgIHRva2Vucy0+c3dhcChtVG9rZW5zKTsKKyAgICAgICAgbUl0
ZXIgPSBtVG9rZW5zLmJlZ2luKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tl
biogdG9rZW4pCisgICAgeworICAgICAgICBpZiAobUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdG9rZW4tPnJlc2V0KCk7CisgICAgICAgICAgICB0b2tlbi0+
dHlwZSA9IFRva2VuOjpMQVNUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbkxleGVyKTsKKworICAg
IFRva2VuVmVjdG9yIG1Ub2tlbnM7CisgICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1J
dGVyOworfTsKKworTWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxl
eGVyKGxleGVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworTWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIoKQorewor
ICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpKSBwb3BNYWNybygpOworfQorCit2b2lk
IE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgd2hpbGUgKHRydWUpCisg
ICAgeworICAgICAgICBnZXRUb2tlbih0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg
KHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4t
PnZhbHVlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNvbnN0IE1hY3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsK
KyAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJ
ZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRl
ZC4KKyAgICAgICAgICAgIHRva2VuLT5zZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNy
bzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1l
IGlzIG5vdCBhICcoJywKKyAgICAgICAgICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBl
eHBhbmRlZC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHVzaE1h
Y3JvKG1hY3JvLCAqdG9rZW4pOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRU
b2tlbihUb2tlbiogdG9rZW4pCit7CisgICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0KCkpCisgICAg
eworICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVUb2tlbjsKKyAgICAgICAgbVJlc2VydmVUb2tl
bi5yZXNldCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmlyc3QgcG9wIGFs
bCBlbXB0eSBtYWNybyBjb250ZXh0cy4KKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHko
KSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHBvcE1h
Y3JvKCk7CisgICAgfQorCisgICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgewor
ICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNrLmJhY2soKS0+Z2V0KCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3Zv
aWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pCit7CisgICAg
aWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBNYWNyb0NvbnRleHQq
IGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICAgICAgY29udGV4dC0+dW5nZXQo
KTsKKyAgICAgICAgYXNzZXJ0KGNvbnRleHQtPmluZGV4ID49IDApOworICAgICAgICBhc3NlcnQo
Y29udGV4dC0+cmVwbGFjZW1lbnRzW2NvbnRleHQtPmluZGV4XSA9PSB0b2tlbik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydCghbVJlc2VydmVUb2tlbi5nZXQoKSk7Cisg
ICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQobmV3IFRva2VuKHRva2VuKSk7CisgICAgfQorfQor
Citib29sIE1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKCkKK3sKKyAgICBUb2tl
biB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgYm9vbCBscGFyZW4gPSB0b2tl
bi50eXBlID09ICcoJzsKKyAgICB1bmdldFRva2VuKHRva2VuKTsKKworICAgIHJldHVybiBscGFy
ZW47Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNy
bywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpCit7CisgICAgYXNzZXJ0KCFtYWNyby5kaXNhYmxl
ZCk7CisgICAgYXNzZXJ0KCFpZGVudGlmaWVyLmV4cGFuc2lvbkRpc2FibGVkKCkpOworICAgIGFz
c2VydChpZGVudGlmaWVyLnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgIGFzc2VydChp
ZGVudGlmaWVyLnZhbHVlID09IG1hY3JvLm5hbWUpOworCisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+
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
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBz
dHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5saW5lOworICAgICAgICAgICAgICAgIHJlcGwu
dmFsdWUgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChtYWNyby5uYW1lID09IGtGaWxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRp
Zmllci5sb2NhdGlvbi5maWxlOworICAgICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJlYW0u
c3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgYXNzZXJ0KG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7CisgICAgICAg
IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiBhcmdzOworICAgICAgICBhcmdzLnJlc2VydmUobWFjcm8u
cGFyYW1ldGVycy5zaXplKCkpOworICAgICAgICBpZiAoIWNvbGxlY3RNYWNyb0FyZ3MobWFjcm8s
IGlkZW50aWZpZXIsICZhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXBsYWNlTWFjcm9QYXJhbXMobWFjcm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQor
ICAgIHsKKyAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAg
ICBpZiAoaSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4g
aW4gdGhlIHJlcGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAg
IC8vIHByb3BlcnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBs
LnNldEF0U3RhcnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAg
ICAgcmVwbC5zZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxl
Y3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBU
b2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBl
ID09ICcoJyk7CisKKyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChp
bnQgb3BlblBhcmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0
VG9rZW4oJnRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
Ok1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7CisgICAgICAg
ICAgICAvLyBEbyBub3QgbG9zZSBFT0YgdG9rZW4uCisgICAgICAgICAgICB1bmdldFRva2VuKHRv
a2VuKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgaXNBcmcgPSBmYWxzZTsgLy8gVHJ1ZSBpZiB0b2tlbiBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50
IGFyZ3VtZW50LgorICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICsrb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlz
QXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJyknOgorICAg
ICAgICAgICAgLS1vcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9
IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAg
IC8vIFRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hIHRva2Vu
cywgYnV0CisgICAgICAgICAgICAvLyB0aGUgY29tbWEgdG9rZW5zIGJldHdlZW4gbWF0Y2hpbmcg
aW5uZXIgcGFyZW50aGVzZXMgZG8gbm90CisgICAgICAgICAgICAvLyBzZXBlcmF0ZSBhcmd1bWVu
dHMuCisgICAgICAgICAgICBpZiAob3BlblBhcmVucyA9PSAxKSBhcmdzLT5wdXNoX2JhY2soTWFj
cm9BcmcoKSk7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpc0FyZyA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNBcmcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5iYWNrKCk7CisgICAgICAg
ICAgICAvLyBJbml0aWFsIHdoaXRlc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGFyZ3VtZW50Lgor
ICAgICAgICAgICAgaWYgKGFyZy5lbXB0eSgpKSB0b2tlbi5zZXRIYXNMZWFkaW5nU3BhY2UoZmFs
c2UpOworICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjb25zdCBNYWNybzo6UGFyYW1ldGVycyYgcGFyYW1zID0gbWFjcm8ucGFyYW1ldGVy
czsKKyAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbXB0eSBhcmd1bWVudCwgaXQgaXMgZXF1
aXZhbGVudCB0byBubyBhcmd1bWVudC4KKyAgICBpZiAocGFyYW1zLmVtcHR5KCkgJiYgKGFyZ3Mt
PnNpemUoKSA9PSAxKSAmJiBhcmdzLT5mcm9udCgpLmVtcHR5KCkpCisgICAgeworICAgICAgICBh
cmdzLT5jbGVhcigpOworICAgIH0KKyAgICAvLyBWYWxpZGF0ZSB0aGUgbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4KKyAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCisgICAgeworICAg
ICAgICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJz
LnNpemUoKSA/CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoK
KyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChpZCwgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52
YWx1ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQcmUtZXhwYW5k
IGVhY2ggYXJndW1lbnQgYmVmb3JlIHN1YnN0aXR1dGlvbi4KKyAgICAvLyBUaGlzIHN0ZXAgZXhw
YW5kcyBlYWNoIGFyZ3VtZW50IGluZGl2aWR1YWxseSBiZWZvcmUgdGhleSBhcmUKKyAgICAvLyBp
bnNlcnRlZCBpbnRvIHRoZSBtYWNybyBib2R5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJncy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+
YXQoaSk7CisgICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhw
YW5kZXIgZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAg
ICAgYXJnLmNsZWFyKCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3
aGlsZSAodG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFu
ZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBh
cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNy
by5yZXBsYWNlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUb2tlbiYg
cmVwbCA9IG1hY3JvLnJlcGxhY2VtZW50c1tpXTsKKyAgICAgICAgaWYgKHJlcGwudHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5w
dXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBPcHRpbWl6ZSB0aGlzLgorICAgICAgICAvLyBUaGVyZSBpcyBu
byBuZWVkIHRvIHNlYXJjaCBmb3IgbWFjcm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCisgICAgICAgIC8v
IFRoZSBwYXJhbSBpbmRleCBjYW4gYmUgY2FjaGVkIHdpdGggdGhlIHJlcGxhY2VtZW50IHRva2Vu
LgorICAgICAgICBNYWNybzo6UGFyYW1ldGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0ZDo6
ZmluZCgKKyAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFjcm8ucGFyYW1l
dGVycy5lbmQoKSwgcmVwbC52YWx1ZSk7CisgICAgICAgIGlmIChpdGVyID09IG1hY3JvLnBhcmFt
ZXRlcnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9i
YWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBz
aXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBpdGVy
KTsKKyAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107CisgICAgICAgIGlm
IChhcmcuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgc2l6ZV90IGlSZXBsID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7CisgICAgICAg
IHJlcGxhY2VtZW50cy0+aW5zZXJ0KHJlcGxhY2VtZW50cy0+ZW5kKCksIGFyZy5iZWdpbigpLCBh
cmcuZW5kKCkpOworICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5oZXJpdHMgcGFk
ZGluZyBwcm9wZXJ0aWVzIGZyb20KKyAgICAgICAgLy8gbWFjcm8gcmVwbGFjZW1lbnQgdG9rZW4u
CisgICAgICAgIHJlcGxhY2VtZW50cy0+YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdTcGFjZShyZXBs
Lmhhc0xlYWRpbmdTcGFjZSgpKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxv
dy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
RVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNp
bmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMu
aCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNy
b0V4cGFuZGVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVy
KExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpOworICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKKworICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlz
TmV4dFRva2VuTGVmdFBhcmVuKCk7CisKKyAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYg
bWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisK
KyAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gTWFjcm9Bcmc7CisgICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3Jv
JiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJn
cyk7CisgICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxh
Y2VtZW50cyk7CisKKyAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0CisgICAgeworICAgICAgICBjb25z
dCBNYWNybyogbWFjcm87CisgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKKworICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3Jv
KDApLCBpbmRleCgwKSB7IH0KKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgp
IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRleCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkg
eyAtLWluZGV4OyB9CisgICAgfTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgTWFjcm9TZXQq
IG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworCisgICAgc3RkOjph
dXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKKyAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRl
eHQqPiBtQ29udGV4dFN0YWNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRy
dWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsNDcg
KzYsMTA4IEBACiAKICNpbmNsdWRlICJQcmVwcm9jZXNzb3IuaCIKIAotI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRl
ICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJzdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBh
cnNlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgor
I2luY2x1ZGUgIlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAKIG5hbWVzcGFjZSBw
cAogewogCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcigpIDogbUNvbnRleHQoTlVMTCkKK3N0
cnVjdCBQcmVwcm9jZXNzb3JJbXBsCiB7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOwor
ICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGly
ZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhw
YW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAg
ICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAg
ICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAg
ICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVI
YW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9T
ZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29y
KERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERp
cmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJl
cHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7CiB9CiAKIFByZXBy
b2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCiB7Ci0gICAgZGVsZXRlIG1Db250ZXh0OworICAgIGRl
bGV0ZSBtSW1wbDsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoKQotewotICAgIG1Db250
ZXh0ID0gbmV3IENvbnRleHQ7Ci0gICAgcmV0dXJuIG1Db250ZXh0LT5pbml0KCk7Citib29sIFBy
ZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsK
KworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5l
TWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7
CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBw
cmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVy
LmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKIH0KIAotYm9vbCBQcmVwcm9jZXNzb3I6OnBy
b2Nlc3MoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVu
Z3RoW10pCit2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFt
ZSwgaW50IHZhbHVlKQogewotICAgIEFTU0VSVCgoY291bnQgPj0wKSAmJiAoc3RyaW5nICE9IE5V
TEwpKTsKLSAgICBpZiAoKGNvdW50IDwgMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0g
PDwgdmFsdWU7CiAKLSAgICByZXNldCgpOworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5
cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOwor
CisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7CisgICAgbWFj
cm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5uYW1lID0gbmFtZTsKKyAgICBt
YWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsKIAotICAgIHJldHVybiBtQ29udGV4
dC0+cHJvY2Vzcyhjb3VudCwgc3RyaW5nLCBsZW5ndGgsICZtVG9rZW5zKTsKKyAgICBtSW1wbC0+
bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsKIH0KIAotdm9pZCBQcmVwcm9jZXNzb3I6OnJlc2V0KCkK
K3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewotICAgIHN0ZDo6Zm9yX2Vh
Y2gobVRva2Vucy5iZWdpbigpLCBtVG9rZW5zLmVuZCgpLCBEZWxldGUoKSk7Ci0gICAgbVRva2Vu
cy5jbGVhcigpOworICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFs
aWRUb2tlbikKKyAgICB7CisgICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7
CisgICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBX
ZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4K
KyAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRv
a2VucyBvciByZXBvcnQKKyAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNl
IFRva2VuOjpQUF9IQVNIOgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQX05VTUJFUjoKKyAgICAgICAgICAgIG1J
bXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OlBQ
X09USEVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBw
cAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBh
bGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNywzNCArNyw0MSBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJP
Q0VTU09SX0hfCiAjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8K
IAotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKKyNp
bmNsdWRlICJwcF91dGlscy5oIgogCiBuYW1lc3BhY2UgcHAKIHsKIAotY2xhc3MgQ29udGV4dDsK
K2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK3N0cnVjdCBQcmVw
cm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOwogCiBjbGFzcyBQcmVwcm9jZXNzb3IKIHsKICAg
cHVibGljOgotICAgIFByZXByb2Nlc3NvcigpOworICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwogICAg
IH5QcmVwcm9jZXNzb3IoKTsKIAotICAgIGJvb2wgaW5pdCgpOworICAgIC8vIGNvdW50OiBzcGVj
aWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJy
YXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0
cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0
aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8g
YmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRo
YW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmlu
ZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5n
LgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRo
ZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBs
ZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRl
cm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CisgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1h
Y3JvLgorICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVl
KTsKIAotICAgIGJvb2wgcHJvY2VzcyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIFRva2VuSXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtVG9rZW5zLmJlZ2luKCk7IH0KLSAgICBUb2tlbkl0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1Ub2tlbnMuZW5kKCk7IH0KKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4p
OwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nv
cik7CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKLSAg
ICAvLyBSZXNldCB0byBpbml0aWFsaXplZCBzdGF0ZS4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAg
ICBDb250ZXh0KiBtQ29udGV4dDsKLSAgICBUb2tlblZlY3RvciBtVG9rZW5zOyAgLy8gT3V0cHV0
LgorICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBw
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxv
dy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNl
TG9jYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NP
VVJDRV9MT0NBVElPTl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0
aW9uCit7CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAg
U291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGlu
ZSk7CisgICAgfQorCisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VM
b2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9M
T0NBVElPTl9IXwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbi5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Niw1MCArNiw1NiBAQAogCiAjaW5jbHVkZSAiVG9rZW4uaCIKIAotI2luY2x1ZGUgInRva2VuX3R5
cGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBrTG9jYXRpb25MaW5lU2l6ZSA9IDE2OyAgLy8gaW4g
Yml0cy4KLXN0YXRpYyBjb25zdCBpbnQga0xvY2F0aW9uTGluZU1hc2sgPSAoMSA8PCBrTG9jYXRp
b25MaW5lU2l6ZSkgLSAxOwotCiBuYW1lc3BhY2UgcHAKIHsKIAotVG9rZW46OkxvY2F0aW9uIFRv
a2VuOjplbmNvZGVMb2NhdGlvbihpbnQgbGluZSwgaW50IGZpbGUpCit2b2lkIFRva2VuOjpyZXNl
dCgpCiB7Ci0gICAgcmV0dXJuIChmaWxlIDw8IGtMb2NhdGlvbkxpbmVTaXplKSB8IChsaW5lICYg
a0xvY2F0aW9uTGluZU1hc2spOworICAgIHR5cGUgPSAwOworICAgIGZsYWdzID0gMDsKKyAgICBs
b2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdmFsdWUuY2xlYXIoKTsKIH0KIAotdm9p
ZCBUb2tlbjo6ZGVjb2RlTG9jYXRpb24oTG9jYXRpb24gbG9jLCBpbnQqIGxpbmUsIGludCogZmls
ZSkKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAg
aWYgKGZpbGUpICpmaWxlID0gbG9jID4+IGtMb2NhdGlvbkxpbmVTaXplOwotICAgIGlmIChsaW5l
KSAqbGluZSA9IGxvYyAmIGtMb2NhdGlvbkxpbmVNYXNrOworICAgIHJldHVybiAodHlwZSA9PSBv
dGhlci50eXBlKSAmJgorICAgICAgICAgICAoZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAg
ICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2NhdGlvbikgJiYKKyAgICAgICAgICAgKHZhbHVl
ID09IG90aGVyLnZhbHVlKTsKIH0KIAotVG9rZW46OlRva2VuKExvY2F0aW9uIGxvY2F0aW9uLCBp
bnQgdHlwZSwgc3RkOjpzdHJpbmcqIHZhbHVlKQotICAgIDogbUxvY2F0aW9uKGxvY2F0aW9uKSwK
LSAgICAgIG1UeXBlKHR5cGUpLAotICAgICAgbVZhbHVlKHZhbHVlKQordm9pZCBUb2tlbjo6c2V0
QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQogeworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxh
Z3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9T
VEFSVF9PRl9MSU5FOwogfQogCi1Ub2tlbjo6flRva2VuKCkgewotICAgIGRlbGV0ZSBtVmFsdWU7
Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAo
c3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRF
eHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQogewotICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKQotICAgIHsKLSAgICAgIGNhc2UgSU5UX0NPTlNUQU5UOgotICAgICAgY2FzZSBG
TE9BVF9DT05TVEFOVDoKLSAgICAgIGNhc2UgSURFTlRJRklFUjoKLSAgICAgICAgb3V0IDw8ICoo
dG9rZW4udmFsdWUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
b3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KHRva2VuLnR5cGUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICBpZiAodG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAi
ICI7CisKKyAgICBvdXQgPDwgdG9rZW4udmFsdWU7CiAgICAgcmV0dXJuIG91dDsKIH0KLX0gIC8v
IG5hbWVzcGFjZSBwcAogCit9ICAvLyBuYW1lc3BhY2UgcHAKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0MiArNyw5NCBAQAogI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
VE9LRU5fSF8KICNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCiAKKyNpbmNs
dWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgi
CiAKIG5hbWVzcGFjZSBwcAogewogCi1jbGFzcyBUb2tlbgorc3RydWN0IFRva2VuCiB7Ci0gIHB1
YmxpYzoKLSAgICB0eXBlZGVmIGludCBMb2NhdGlvbjsKLSAgICBzdGF0aWMgTG9jYXRpb24gZW5j
b2RlTG9jYXRpb24oaW50IGxpbmUsIGludCBmaWxlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWNvZGVM
b2NhdGlvbihMb2NhdGlvbiBsb2MsIGludCogbGluZSwgaW50KiBmaWxlKTsKLQotICAgIC8vIFRh
a2VzIG93bmVyc2hpcCBvZiBzdHJpbmcuCi0gICAgVG9rZW4oTG9jYXRpb24gbG9jYXRpb24sIGlu
dCB0eXBlLCBzdGQ6OnN0cmluZyogdmFsdWUpOwotICAgIH5Ub2tlbigpOwotCi0gICAgTG9jYXRp
b24gbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtTG9jYXRpb247IH0KLSAgICBpbnQgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcqIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbVZhbHVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVG9rZW4pOwotCi0gICAgTG9jYXRpb24gbUxvY2F0aW9uOwotICAgIGludCBt
VHlwZTsKLSAgICBzdGQ6OnN0cmluZyogbVZhbHVlOworICAgIGVudW0gVHlwZQorICAgIHsKKyAg
ICAgICAgTEFTVCA9IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJRklFUiA9IDI1OCwKKwor
ICAgICAgICBDT05TVF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAorCisgICAgICAgIE9QX0lO
QywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwK
KyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAg
T1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwK
KyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAg
T1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FT
U0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwK
KyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAg
T1BfT1JfQVNTSUdOLAorCisgICAgICAgIC8vIFByZXByb2Nlc3NpbmcgdG9rZW4gdHlwZXMuCisg
ICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgaW50ZXJu
YWxseS4KKyAgICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVzdCBub3QgZGVwZW5kIG9y
IGNoZWNrIGZvciB0aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAgICBQUF9OVU1CRVIsCisg
ICAgICAgIFBQX09USEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAgeworICAgICAgICBB
VF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFICA9
IDEgPDwgMSwKKyAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8PCAyCisgICAgfTsKKwor
ICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsK
KyAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQg
ZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAg
ICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRp
bmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAw
OyB9CisgICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBib29s
IGV4cGFuc2lvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgRVhQQU5TSU9OX0RJ
U0FCTEVEKSAhPSAwOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2Fi
bGUpOworCisgICAgaW50IHR5cGU7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgIFNvdXJj
ZUxvY2F0aW9uIGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwogfTsKIAotdHlwZWRl
ZiBzdGQ6OnZlY3RvcjxUb2tlbio+IFRva2VuVmVjdG9yOwotdHlwZWRlZiBUb2tlblZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgVG9rZW5JdGVyYXRvcjsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFs
cyhyaHMpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNv
bnN0IFRva2VuJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CiAKIGV4
dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRv
a2VuJiB0b2tlbik7CiAKIH0gIC8vIG5hbWVwc2FjZSBwcAogI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfVE9LRU5fSF8KLQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgdHJ1ZQoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjM0NCBAQAorI2xpbmUgMTYgIi4vcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQg
c2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisK
KyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisj
ZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1Jf
VkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxF
WF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lm
aWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBD
IGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQg
QyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisj
aWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2
ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lm
IGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAx
TAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5j
bHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNy
b3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2Rl
ZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMu
aD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWlu
dDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZs
ZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50
MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4
X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2lu
dDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5z
aWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4
X3VpbnQzMl90OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0
eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAg
ICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAg
ICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5l
IElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYg
SU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisj
aWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykK
KyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAg
ICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhf
TUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVm
aW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5U
MzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2Vu
ZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKwor
LyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZp
bmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJl
cXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NU
RENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1RE
Q19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05T
VAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYK
KworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisK
Ky8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRv
IGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0
aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQg
aXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4K
KyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNo
YXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lk
KiB5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBs
dXMgdGhlIGJpc29uIHZhcnMgZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRy
YW50IHNjYW5uZXIuICovCisjZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQg
eXlnLT55eW91dF9yCisjZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXls
ZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUg
eXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmlu
ZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVm
aW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFy
dCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVy
LAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVz
IGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJF
R0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBz
dGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBC
RUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxl
eAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3Rh
cnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJl
ciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RB
VEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lh
bCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZp
bmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlf
RU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4g
Ki8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRp
ZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0
YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NU
QVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUp
KQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JV
RkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVm
aW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5k
aWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VO
RF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUg
WVlfTEVTU19MSU5FTk8obikKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIg
bWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUg
eXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1
cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAg
ICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55
eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FE
SjsgXAorCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwK
KwkJfSBcCisJd2hpbGUgKCAwICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWct
Pnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJ
LyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRp
b24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRl
cywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5
X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5
eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAt
IGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0
byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8K
KwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJh
Y3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlv
IGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZy
ZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFj
aCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIg
d2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJ
ZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndp
c2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5l
bm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBU
aGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhl
IGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlp
bnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZ
WV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBF
T0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkg
KiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUg
dGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2Ug
YW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8g
bWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoK
KwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0
byAibmV3IgorCSAqICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250
aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBm
aWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRp
ZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3Jv
cyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3
ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNj
YW5uZXIgc3RhdGUiLgorICoKKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5V
TEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFj
ayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVM
TCkKKworLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cg
dGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4g
bHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cF0KKwordm9pZCBwcHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwordm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZl
ciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2Rl
bGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3Zv
aWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Cit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgYixGSUxFICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9G
TFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIp
CisKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qg
c2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJp
bmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZF
Ul9TVEFURSBwcF9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5l
IHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApeyBcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
bmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBw
cF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3Rp
dmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAg
ICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwK
KwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKwor
I2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wp
CisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmlu
ZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlw
ZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisK
K3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0
ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5
eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlf
ZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
Ky8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBi
ZWZvcmUgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICov
CisjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2Jw
OyBcCisJeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0g
eXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZG
RVIgMzgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1
dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7
CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUs
ICAgMzMsCisgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAg
MzMsICAgMzMsICAgIDksCisgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMs
ICAgMzMsICAgIDMsICAgIDUsICAgIDUsCisgICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAg
MjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsICAgMjMsCisgICAgICAgMTMsICAgMjQsICAgMTAs
ICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCisgICAgICAgMTEsICAg
MTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisgICAg
ICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAg
IDEsCisgICAgICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAs
ICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgMTAsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAg
ICAgICAyLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAg
ICA3LCAgICA4LCAgICAxLCAgICA5LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEy
LCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDE3LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAgIDIw
LCAgICA5LCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAgICAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAg
IDIzLCAgIDIzLAorICAgICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIx
LCAgIDIxLCAgIDIxLCAgIDIxLAorCisgICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsCisgICAgICAgMjMsICAgMjMs
ICAgIDksICAgMjYsICAgIDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfbWV0YVsyN10gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAg
ICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAxLCAgICAx
LCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAg
IDAsICAgMjQsICAgMjYsICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCisgICAg
ICAxNTksICAxMTIsICAgMjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAg
MzYsCisgICAgICAgNDYsICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAs
ICAxNTksICAgODQsCisgICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTksICAx
NTksICAxNTksICAxNTksICAxNTksCisgICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAs
ICAxNTksICAgNzMsICAgMzIsICAgNTYsICAgODMsCisgICAgICAgOTUsICAgNjgsICAgIDAsICAg
MzEsICAxNTksICAxNTksICAxNTksICAgMTksICAgIDAsICAxNTksCisgICAgICAxNTksICAxNTks
ICAxNTksICAgIDAsICAxNTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCisgICAgICAg
IDAsICAxMTcsICAgNTIsICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIs
CisgICAgICAxMjAsICAxMjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKKyAg
ICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAgIHsg
ICAwLAorICAgICAgIDgzLCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1
LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAgICAg
IDUwLCAgIDg4LCAgIDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgz
LAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAg
IDY3LCAgIDg3LAorICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDY5LCAgIDcyLAorICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9ueHRbMTg2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAg
MTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgs
ICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAg
MjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCisgICAg
ICAgMzYsICAgMzksICAgNTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAg
NDAsCisgICAgICAgNjEsICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYs
ICAgNDcsICAgNzYsCisgICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAg
NTAsICAgNTEsICAgNTAsICAgNTIsCisgICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgs
ICAgNjIsICAgODEsICAgODEsICAgODEsICAgNTAsCisgICAgICAgNDksICAgNDksICAgNjMsICAg
NjcsICAgMzIsICAgNjgsICAgNjgsICAgNjgsICAgNjYsICAgNTAsCisgICAgICAgNTAsICAgNjcs
ICAgNjksICAgNjcsICAgNjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCisgICAgICAg
NTAsICAgNTAsICAgNTAsICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAs
CisKKyAgICAgICA4MywgICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4Mywg
ICA4MywgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4
MiwgICA4MiwgICA1NiwgICA2NywKKyAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwg
ICA3OSwgICA3OSwgICA3OCwgICA3OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwgICA4
MCwgICA4MSwgICA4MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAyOCwg
ICAyOCwgICAyOCwgICAyOCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKKyAgICAgICA3
MCwgICAzMiwgICA3MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAgIHsg
ICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICAzLCAgICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1LCAg
ICAzLCAgIDI2LCAgICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAgIDEz
LCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAgICAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIw
LAorICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAg
IDczLCAgIDIxLAorICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQz
LCAgIDQzLCAgIDMxLCAgIDQ5LAorICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAg
IDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3
LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgNzQsICAgNzQs
ICAgNzUsICAgNzUsICAgNTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCisgICAgICAg
NTEsICAgNTEsICAgNjcsICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcs
CisgICAgICAgNjksICAgNjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAg
NzIsICAgMTUsCisgICAgICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEs
ICAgODIsICAgODIsICAgODIsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODYsICAgMTAsICAgIDksICAgODYsICAgODYsCisgICAgICAgODcsICAgIDcsICAgODcsICAgODcs
ICAgODcsICAgODgsICAgODgsICAgIDUsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisg
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworLyogVGhlIGludGVu
dCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2Vz
IG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0
X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRf
bm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlu
cyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQg
b24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0
dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lG
IFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNl
ci5zaC4KKyovCisKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBU
cmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjZW5k
aWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNlTG9j
YXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8g
dHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCisK
KyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRyYS0+
bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX1VT
RVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAm
eXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6Oklu
cHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAor
ICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5s
ZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2Nh
bkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCisg
ICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+
bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1
bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4
U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQorCisjZGVmaW5l
IFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9sZHMgdGhlIGVu
dGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRzX3QK
KyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCisg
ICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNh
bWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4g
Ki8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJfc3Rh
Y2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlfYnVm
ZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZGRVJf
U1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisgICAg
Y2hhciB5eV9ob2xkX2NoYXI7CisgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlfc2l6
ZV90IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7Cisg
ICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Cisg
ICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7
CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAgICBp
bnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAqeXl0
ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisKKyAg
ICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAgICB9
OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxz
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1
c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29uIG91
dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxf
cgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitpbnQg
cHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5pdF9leHRyYSAo
WVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nl
c3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5v
bi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgcHBsZXhfZGVz
dHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVk
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQg
cHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5eV9z
aXplX3QgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0X3Rl
eHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxs
b2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorLyogTWFjcm9zIGFmdGVyIHRo
aXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAq
IHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxz
ZQorZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisjZW5k
aWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNo
YXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKwor
I2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0
IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lO
UFVUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdp
dGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JF
QURfQlVGX1NJWkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVs
ZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRo
aXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250
YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGZ3
cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0
IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9y
IFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9J
TlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50
IGMgPSAnKic7IFwKKwkJeXlfc2l6ZV90IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6
ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyAr
K24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJ
CWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4g
KSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIg
KTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsg
XAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAg
JiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJ
CXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIg
KTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5
eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFm
dGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0K
KyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNl
IHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5y
ZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5
eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJp
ZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9T
VEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgor
CisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNk
ZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVy
KQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBw
cm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5u
ZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4K
KyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVy
biBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlM
VFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9E
RUNMIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwg
WVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAh
WVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBy
dWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLwor
I2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisK
Ky8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZ
X0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVM
RV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rp
b24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5
eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5
eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAqLwor
CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFt
OworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisj
aWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5
eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0
ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlv
dXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkg
eworCQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5
c2Nhbm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJ
fQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQg
Ki8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5
dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9p
bnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRo
ZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGlu
dCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJ
fQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2FjdGlv
bjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwor
CisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAq
LworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMg
b2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7
CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2Fj
dGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2NrIGNv
bW1lbnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQu
ICovCisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCitj
YXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQ
CisKKwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JV
TEVfU0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklU
SUFMKTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8vICMg
aXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
cy4KKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4dHJh
LT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOwor
fQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOworfQor
CVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30K
KwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntE
SUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQg
aW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQ
X05VTUJFUjsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
SU5DOworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOworfQor
CVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZWV9C
UkVBSworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitjYXNl
IDE5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAyMDoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI4
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2Fz
ZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JSRUFL
CitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorCVlZ
X0JSRUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
MSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitjYXNl
IDM0OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOwor
ICAgIHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgor
Y2FzZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMg
bm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZv
ciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5p
bnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5M
b2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7
CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAv
LyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRo
ZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXgg
PSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0lu
ZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5v
OworICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKwor
ICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVu
bywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsK
KyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JV
TEVfU0VUVVAKK0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJ
eworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFy
LiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5
Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVG
T1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RP
UkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5u
aW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhh
dCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWlu
IGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4g
d2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9C
VUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRv
IGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRo
YW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3
IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhl
cmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0
aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBh
bHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAq
IChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBl
bmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBp
biBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlz
IHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisK
KwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUo
IHl5c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtl
IHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNh
dXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxp
dHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcg
aW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJ
CSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9z
dGF0ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9S
RV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUg
dGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJ
CQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlf
Z2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5E
X09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0g
MDsKKworCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBOb3Rl
OiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVy
KCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJ
CQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlr
ZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3
ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVy
CisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9h
Y3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJ
fQorCisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJ
CX0KKworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXlnLT55eV9jX2J1Zl9w
ID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciAp
OworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVPQl9B
Q1RfTEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisK
KwlkZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50
ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dp
dGNoICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQgb2Yg
cHBsZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcg
YnVmZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAq
CUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51
ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUg
LSBlbmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRl
eHRfcHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsK
KworCWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRh
bCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwor
CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQor
CQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAq
LworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURK
ID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBF
T0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1
cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBt
YXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBp
dC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJ
LyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJz
IHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVt
YmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VP
Rl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQg
dG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7CisK
KwllbHNlCisJCXsKKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxl
ICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVm
ZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1
cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVS
OworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJ
CXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlp
ZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6
ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlf
Y2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFy
cy4gKi8KKwkJCQkJcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6
ZSArIDIgLHl5c2Nhbm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0
LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYgKCAh
IGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9yIC0g
c2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9
ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3RvX21v
dmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4gbW9y
ZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCAp
OworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKKwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsKKwkJaWYgKCBu
dW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FD
VF9FTkRfT0ZfRklMRTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKKwkJCX0KKwor
CQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9G
X1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3Rv
X21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBF
eHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAq
LworCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92
ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCXl5
Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisK
Ky8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhl
IEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciB5eV9z
dGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9jcCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9j
cCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1ND
X1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0
YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJCXdo
aWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJy
ZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlf
Y3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCXl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5
eV9jXTsKKwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3RyeV9O
VUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIK
KyAqCisgKiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJl
bnRfc3RhdGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJh
bnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQg
ZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+
eXlfY19idWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5
eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGlu
dCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0g
ODQgKQorCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7CisK
KwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYg
WVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAo
eXlzY2FuX3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhl
IGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9y
ZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5v
dCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5
eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAq
LworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cjsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJ
CQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0
IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVl
ZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9j
ZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRv
IGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJ
CQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQg
YnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJ
CQkJLypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJ
CXsKKwkJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJ
CQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05F
V19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5l
cik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9
CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ
CX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZv
ciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUg
eXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwly
ZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVk
aWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5w
dXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3Rh
cnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCBwcHJlc3RhcnQgIChG
SUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgcHBfY3JlYXRl
X2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCX0KKworCXBwX2luaXRfYnVm
ZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJcHBfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIu
CisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQg
cHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBs
YWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXBwcG9wX2J1ZmZl
cl9zdGF0ZSgpOworCSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAgICAq
LworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICov
CisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJcHBfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2Ug
ZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1
dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdy
YXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMg
c2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30K
Kworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7
Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUu
CisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRoZSBj
aGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9C
VUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJl
dHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZX0JVRkZFUl9TVEFU
RSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9T
VEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVy
ICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisK
KwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6
ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNo
YXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9i
dWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCki
ICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXBwX2luaXRfYnVmZmVyKGIsZmls
ZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVy
LgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBw
X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNf
b3VyX2J1ZmZlciApCisJCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciAp
OworCisJcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworfQorCisvKiBJbml0aWFsaXpl
cyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGlt
ZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMg
ZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgcHBf
aW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXBwX2ZsdXNoX2J1ZmZl
cihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJYi0+eXlfZmls
bF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4g
cHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3Rh
cnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNhc2Us
IHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisgICAgICovCisg
ICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55eV9ic19saW5lbm8g
PSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKworICAgICAgICBiLT55
eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8qKiBE
aXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBV
VCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1
c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCAhIGIgKQorCQly
ZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBl
bmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0
aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBh
IGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisK
KwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7
CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlf
Q1VSUkVOVF9CVUZGRVIgKQorCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30K
KworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRl
IGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9j
YXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBU
aGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQly
ZXR1cm47CisKKwlwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMg
YmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBi
dWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJ
CX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9w
LiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGll
ZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCisv
KiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4K
KyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCisgKiAgQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJl
dHVybjsKKworCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlpZiAoeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisKKwlpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpIHsKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJ
CXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9j
YXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFj
ZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZl
cl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRp
b24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJ
CSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAx
IHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisg
ICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9
IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9j
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7
CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJ
CQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAw
OworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAv
KiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9idWZmZXJf
c3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1
cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8K
KwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVw
IHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVj
aWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVm
ZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1
ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJu
IHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JVRkZF
Ul9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBz
aXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8
fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRo
ZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7CisK
KwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVm
X3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+
eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9
IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9z
aXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWIt
Pnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05F
VzsKKworCXBwX3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1cm4gYjsK
K30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4g
VGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2Yg
QGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4K
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2Fu
dCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAq
ICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgcHBf
c2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIAorCXJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nh
bm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhl
IGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9t
IGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIg
dG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIg
cG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmpl
Y3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuLCBpOworICAg
IAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRy
YWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFyICop
IHBwYWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAo
IGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOwor
CisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCisJYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlm
ICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMo
KSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBz
aG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55eV9p
c19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOworfQorCisjaWZuZGVmIFlZX0VYSVRfRkFJ
TFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHl5
X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9F
WElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4g
c2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwK
KwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICov
IFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVT
U19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19h
cmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWct
Pnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJ
fSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rp
b25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRh
dGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5l
IG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitp
bnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJl
ci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgcHBn
ZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1
cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9pbiAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQgdGhlIG91
dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
LworRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4g
eXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit5eV9zaXplX3QgcHBn
ZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsKK30K
KworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVmaW5l
ZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAqIEBw
YXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nh
bm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lk
IHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0IHRo
ZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9saW5lbm8gKGlu
dCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxp
bmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAg
IGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJw
cHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAor
ICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29s
dW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBp
ZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JV
RkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNvbHVt
bl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2Nh
cmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSByZWFk
YWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
IEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHBwc2V0X2luIChGSUxFICogIGlu
X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9CisK
K3ZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQgcHBz
ZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eV9m
bGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFs
IGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQ
RSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZhbCA9
IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgcHBzZXRfbGxvYyAo
WVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5
bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8KKwor
LyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBp
dHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vz
bid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mgd2h5
IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBv
dXIgbWFjcm9zLgorICovCisKK2ludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8g
PSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xvYmFs
cyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwg
KTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0g
RU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBm
b3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihz
dHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5
X2dsb2JhbHMgKTsKK30KKworLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rp
b25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24gb2Yg
dGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRo
YXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFs
bG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhp
cyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICogVGhl
IHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFi
bGUgdG8gcHBhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHBwbGV4
X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95
eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisKKyAg
ICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAgIGlm
IChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3Qp
IHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7CisJ
CisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5nIHRv
IDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAw
eDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6
ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2Rl
ZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFs
cyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2Ft
ZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4K
KyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Cisg
ICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAwOwor
ICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAw
OworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJ
TklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5
eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAg
IC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFy
ZSBjYWxsZWQgYnkKKyAgICAgKiBwcGxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsK
K30KKworLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVu
dHJhbnQgc2Nhbm5lcnMuICovCitpbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVs
ZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQlwcF9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gTlVMTDsKKwkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJLyog
RGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFj
ayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBE
ZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHBwZnJlZSh5eWct
Pnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQg
aW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHBwbGV4
KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2luaXRf
Z2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChy
ZWVudHJhbnQgb25seSkuICovCisgICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7
CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVy
bmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMg
dm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4g
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7
IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZWV9O
RUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsg
c1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqcHBhbGxv
YyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAodm9p
ZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0IHRv
IChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1l
bnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICog
dGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRl
cgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25t
ZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFy
Z3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJ
ICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworfQor
Cit2b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlmcmVl
KCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICov
Cit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK25hbWVzcGFjZSBwcCB7
CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFu
ZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKwor
VG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCiti
b29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNl
OworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisK
KyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAg
cmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVy
KGludCBmaWxlKQoreworICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVy
LgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVuby4KKyAgICBwcHNldF9jb2x1bW4oZmlsZSxtSGFu
ZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7Cisg
ICAgcHBzZXRfbGluZW5vKGxpbmUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgo
VG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1ZSwm
dG9rZW4tPmxvY2F0aW9uLG1IYW5kbGUpOworICAgIHRva2VuLT5mbGFncyA9IDA7CisKKyAgICB0
b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0
LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVh
ZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1Nw
YWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAg
aWYgKChtSGFuZGxlID09IE5VTEwpICYmIHBwbGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCZtSGFu
ZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHByZXN0YXJ0KDAsbUhhbmRsZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigp
Cit7CisgICAgaWYgKG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHBs
ZXhfZGVzdHJveShtSGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
VE9LRU5JWkVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8K
KworI2luY2x1ZGUgIklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91
dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNz
IFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRl
eHQKKyAgICB7CisgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJ
bnB1dCBpbnB1dDsKKyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMg
dG8uIFRva2VuIGxvY2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3Rl
YWQgb2YgSW5wdXQ6Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisg
ICAgICAgIC8vIGlmIHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVm
ZmVyLgorICAgICAgICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxl
YWRpbmdTcGFjZTsKKyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKworICAgIFRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAg
IGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBp
bnQgbGVuZ3RoW10pOworCisgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2
b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tl
biogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRva2VuaXplcik7CisgICAgYm9vbCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNj
YW5uZXIoKTsKKworICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBD
b250ZXh0IG1Db250ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMK
ICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Ub2tlbml6ZXIubAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0
aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisldG9wewor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0
ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorfQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5o
IgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYg
ZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlf
ZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
bWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7
Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNl
ZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZp
bmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAg
ICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxz
ZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hp
bGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEt
PnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwg
aW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2Fu
TG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2Fu
TG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0g
MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2Rl
ZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0
cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBub3l5d3JhcCBu
b3VucHV0IG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2Ug
Ymlzb24tbG9jYXRpb25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4dHJhLXR5cGU9
InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5FICAgICBcbnxc
cnxcclxuCitJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5DVFVBVE9SICBb
XVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1b
MC05XSoKK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1BTF9DT05TVEFO
VCAgMFt4WF1bMC05YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KK0VYUE9O
RU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NPTlNUQU5UICAo
e0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAgLyogTGluZSBj
b21tZW50ICovCisiLy8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KKyAgICAv
KiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworICAgIC8q
IFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKKyIvKiIgeyBC
RUdJTihDT01NRU5UKTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4iKiIKKzxDT01N
RU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgeworICAgIHl5ZXh0
cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisKKyMgewor
ICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlcy4KKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVy
biB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQ
X09USEVSOworfQorCit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCit7REVDSU1B
TF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
Q09OU1RfSU5UOworfQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9D
T05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCisgICAgLyog
QW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBh
IG51bWJlci4gKi8KKyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFu
ZCBmbG9hdHMuICovCisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpB
LVowLTkuXSopIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQorCisiKysiIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOworfQorIi0t
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0RFQzsKK30KKyI8PCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOworfQorIj4+IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJ
R0hUOworfQorIjw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorIj49IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOworfQorIj09IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0VROworfQorIiE9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorIiYmIiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKK30K
KyJeXiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9YT1I7Cit9CisifHwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisiKz0iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
QUREX0FTU0lHTjsKK30KKyItPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorIio9IiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X01VTF9BU1NJR047Cit9CisiLz0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKK30KKyIlPSIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9NT0RfQVNTSUdOOworfQorIjw8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKyI+Pj0iIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfUklHSFRfQVNTSUdOOworfQorIiY9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisiXj0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfWE9SX0FTU0lHTjsKK30KKyJ8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9CisKK3tQ
VU5DVFVBVE9SfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1
cm4geXl0ZXh0WzBdOworfQorCitbIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFkaW5nU3BhY2Ug
PSB0cnVlOyB9CisKK3tORVdMSU5FfSB7CisgICAgKyt5eWxpbmVubzsKKyAgICB5eWx2YWwtPmFz
c2lnbigxLCAnXG4nKTsKKyAgICByZXR1cm4gJ1xuJzsKK30KKworLiB7CisgICAgeXlsdmFsLT5h
c3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30K
KworPCo+PDxFT0Y+PiB7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9y
IGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFu
dWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKKyAgICBwcDo6
SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7CisgICAgaW50IHNJ
bmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAgaWYgKHNjYW5M
b2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBjYW4gb25seSBy
ZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAgICAgICAvLyBl
bmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNj
YW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVu
byA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAgIHl5bGxvYy0+
bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlmIChZWV9TVEFS
VCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9CisgICAgeXl0
ZXJtaW5hdGUoKTsKK30KKworJSUKKworbmFtZXNwYWNlIHBwIHsKKworVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29u
dGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6
ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+
IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0
ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIo
KTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAg
Ly8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3Jv
IHl5ZmlsZW5vLgorICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKK30KKwordm9pZCBU
b2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgeXlzZXRfbGluZW5vKGxp
bmUsIG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sK
KyAgICB0b2tlbi0+dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tlbi0+bG9jYXRpb24s
IG1IYW5kbGUpOworICAgIHRva2VuLT5mbGFncyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFy
dE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRv
a2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250
ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9
CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09
IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICB5eWxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFi
cwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVf
cGFyc2VyLnNoCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjcgKzEsMjYgQEAKICMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCi0j
IEdlbmVyYXRlcyBHTFNMIEVTIHByZXByb2Nlc3NvciAtIHBwX2xleC5jcHAsIHBwX3RhYi5oLCBh
bmQgcHBfdGFiLmNwcAorIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgogCiBydW5fZmxleCgpCiB7Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
LmwKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDFfbGV4LmNwcAoraW5wdXRfZmlsZT0kc2Ny
aXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgogZmxleCAtLW5vbGluZSAt
LW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQogfQogCiBydW5f
Ymlzb24oKQogewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMS55Ci1vdXRwdXRfaGVhZGVyPSRz
Y3JpcHRfZGlyLyQxX3RhYi5oCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQxX3RhYi5jcHAK
LWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1kZWZpbmVzPSRvdXRwdXRfaGVh
ZGVyIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCitpbnB1dF9maWxlPSRzY3Jp
cHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitiaXNvbiAtLW5vLWxpbmVz
IC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCiB9
CiAKIHNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQogCiAjIEdlbmVyYXRlIHByZXByb2Nlc3Nvcgot
cnVuX2ZsZXggcHAKLXJ1bl9iaXNvbiBwcAorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVy
LmNwcAorcnVuX2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFs
bG93LXRhYnMKICAgKyB0cnVlCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHAubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC5sCShyZXZpc2lvbiAx
MjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcC5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0vKgotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBm
b3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRp
byAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9l
bi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9V
IEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5o
IgotI2luY2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZ
WV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGlu
ZSA9IHl5bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5
Y29sdW1uICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwg
bWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUp
OwotICAgIAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIq
IHN0ciwgaW50IGxlbik7Ci0lfQotCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50
ZXJhY3RpdmUKLSVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1s
b2NhdGlvbnMKLSVvcHRpb24gc3RhY2sKLSVvcHRpb24gcHJlZml4PSJwcCIKLSVvcHRpb24gZXh0
cmEtdHlwZT0icHA6OkNvbnRleHQqIgotCi1IU1BBQ0UgICAgICBbIFx0XQotSEFTSCAgICAgICAg
XntIU1BBQ0V9KiN7SFNQQUNFfSoKLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoK
LVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxfQ09OU1RB
TlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFE
RUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAgICAgICAg
ICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZSQUNUSU9O
QUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0KLSUlCi0K
LXtIQVNIfSB7IHJldHVybiBIQVNIOyB9Ci0KLXtIQVNIfWRlZmluZXtIU1BBQ0V9K3tJREVOVElG
SUVSfS9bIFx0XG5dIHsKLSAgICB5eWx2YWwtPnN2YWwgPSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJTkVfT0JKOwotfQote0hBU0h9ZGVmaW5l
e0hTUEFDRX0re0lERU5USUZJRVJ9LyIoIiB7Ci0gICAgeXlsdmFsLT5zdmFsID0gZXh0cmFjdE1h
Y3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEhBU0hfREVGSU5FX0ZVTkM7Ci19
Ci17SEFTSH11bmRlZntIU1BBQ0V9KyB7IHJldHVybiBIQVNIX1VOREVGOyB9Ci0KLXtIQVNIfWlm
IHsgcmV0dXJuIEhBU0hfSUY7IH0KLXtIQVNIfWlmZGVmIHsgcmV0dXJuIEhBU0hfSUZERUY7IH0K
LXtIQVNIfWlmbmRlZiB7IHJldHVybiBIQVNIX0lGTkRFRjsgfQote0hBU0h9ZWxzZSB7IHJldHVy
biBIQVNIX0VMU0U7IH0KLXtIQVNIfWVsaWYgeyByZXR1cm4gSEFTSF9FTElGOyB9Ci17SEFTSH1l
bmRpZiB7IHJldHVybiBIQVNIX0VORElGOyB9Ci0iZGVmaW5lZCIgeyByZXR1cm4gREVGSU5FRDsg
fQotCi17SEFTSH1lcnJvciB7IHJldHVybiBIQVNIX0VSUk9SOyB9Ci17SEFTSH1wcmFnbWEgeyBy
ZXR1cm4gSEFTSF9QUkFHTUE7IH0KLXtIQVNIfWV4dGVuc2lvbiB7IHJldHVybiBIQVNIX0VYVEVO
U0lPTjsgfQote0hBU0h9dmVyc2lvbiB7IHJldHVybiBIQVNIX1ZFUlNJT047IH0KLXtIQVNIfWxp
bmUgeyByZXR1cm4gSEFTSF9MSU5FOyB9Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXlsdmFsLT5z
dmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSURFTlRJ
RklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJ
TUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotCi0oe0RJR0lUfSt7RVhQ
T05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0g
ICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gRkxPQVRfQ09OU1RBTlQ7Ci19Ci0KLXtQVU5DVFVBVE9SfSB7IHJldHVybiB5eXRleHRb
MF07IH0KLQotWyBcdFx2XGZdKyB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLQotXG4gewot
ICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0gMDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQot
Ci08Kj48PEVPRj4+ICAgICB7IHl5dGVybWluYXRlKCk7IH0KLQotJSUKLQotc3RkOjpzdHJpbmcq
IGV4dHJhY3RNYWNyb05hbWUoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKQotewotICAgIC8vIFRo
ZSBpbnB1dCBzdHJpbmcgaXMgb2YgdGhlIGZvcm0ge0hBU0h9ZGVmaW5le0hTUEFDRX0re0lERU5U
SUZJRVJ9Ci0gICAgLy8gV2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGxhc3QgSFNQQUNFLgotICAg
IEFTU0VSVChzdHIgJiYgKGxlbiA+IDgpKTsgIC8vIHN0cmxlbigiI2RlZmluZSAiKSA9PSA4Owot
Ci0gICAgc3RkOjpzdHJpbmcqIG5hbWUgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSBsZW4gLSAx
OyBpID49IDA7IC0taSkKLSAgICB7Ci0gICAgICAgIGlmICgoc3RyW2ldID09ICcgJykgfHwgKHN0
cltpXSA9PSAnXHQnKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IG5ldyBzdGQ6OnN0
cmluZyhzdHIgKyBpICsgMSwgbGVuIC0gaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1u
YW1lc3BhY2UgcHAgewotCi1pbnQgQ29udGV4dDo6cmVhZElucHV0KGNoYXIqIGJ1ZiwgaW50IG1h
eFNpemUpCi17Ci0gICAgaW50IG5yZWFkID0gWVlfTlVMTDsKLSAgICB3aGlsZSAoIW1JbnB1dC0+
ZW9mKCkgJiYKLSAgICAgICAgICAgKG1JbnB1dC0+ZXJyb3IoKSA9PSBwcDo6SW5wdXQ6OmtFcnJv
ck5vbmUpICYmCi0gICAgICAgICAgIChucmVhZCA9PSBZWV9OVUxMKSkKLSAgICB7Ci0gICAgICAg
IGludCBsaW5lID0gMCwgZmlsZSA9IDA7Ci0gICAgICAgIHBwOjpUb2tlbjo6ZGVjb2RlTG9jYXRp
b24oeXlnZXRfbGluZW5vKG1MZXhlciksICZsaW5lLCAmZmlsZSk7Ci0gICAgICAgIGZpbGUgPSBt
SW5wdXQtPnN0cmluZ0luZGV4KCk7Ci0gICAgICAgIHl5c2V0X2xpbmVubyhwcDo6VG9rZW46OmVu
Y29kZUxvY2F0aW9uKGxpbmUsIGZpbGUpLCBtTGV4ZXIpOwotCi0gICAgICAgIG5yZWFkID0gbUlu
cHV0LT5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1JbnB1dC0+ZXJyb3IoKSA9
PSBwcDo6SW5wdXQ6OmtFcnJvclVuZXhwZWN0ZWRFT0YpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFRPRE8oYWxva3ApOiBSZXBvcnQgZXJyb3IuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIG5yZWFkOwotfQotCi1ib29sIENvbnRleHQ6OmluaXRMZXhlcigpCi17Ci0gICAgQVNTRVJU
KG1MZXhlciA9PSBOVUxMKTsKLQotICAgIGlmICh5eWxleF9pbml0X2V4dHJhKHRoaXMsICZtTGV4
ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB5eXJlc3RhcnQoMCwgbUxleGVyKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXN0cm95TGV4ZXIoKQotewot
ICAgIEFTU0VSVChtTGV4ZXIpOwotCi0gICAgeXlsZXhfZGVzdHJveShtTGV4ZXIpOwotICAgIG1M
ZXhlciA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcC55Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwLnkJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwLnkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI1
ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNj
IGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX2dsc2xfcGFyc2VyLnNoLAotV0hJ
Q0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUi4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2luY2x1ZGUgIkNvbnRleHQuaCIKLQotI2RlZmluZSBZ
WUxFWF9QQVJBTSBjb250ZXh0LT5sZXhlcigpCi0jZGVmaW5lIFlZREVCVUcgMQotJX0KLQotJXB1
cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgotJWxvY2F0aW9ucwotJXBhcnNlLXBhcmFtIHtw
cDo6Q29udGV4dCogY29udGV4dH0KLQotJXVuaW9uIHsKLSAgICBpbnQgaXZhbDsKLSAgICBzdGQ6
OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6OlRva2VuVmVjdG9y
KiB0bGlzdDsKLX0KLQotJXsKLWV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIFlZTFRZ
UEUqIGxsb2NwLCB2b2lkKiBsZXhlcik7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxs
b2NwLAotICAgICAgICAgICAgICAgICAgICBwcDo6Q29udGV4dCogY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uKTsKLQotc3RhdGljIHZvaWQgcHVzaENvbmRp
dGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKTsKLXN0YXRp
YyB2b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpOwotJX0KLQot
JXRva2VuIEhBU0ggSEFTSF9VTkRFRgotJXRva2VuIEhBU0hfSUYgSEFTSF9JRkRFRiBIQVNIX0lG
TkRFRiBIQVNIX0VMU0UgSEFTSF9FTElGIEhBU0hfRU5ESUYgREVGSU5FRAotJXRva2VuIEhBU0hf
RVJST1IgSEFTSF9QUkFHTUEgSEFTSF9FWFRFTlNJT04gSEFTSF9WRVJTSU9OIEhBU0hfTElORQot
JXRva2VuIDxzdmFsPiBIQVNIX0RFRklORV9PQkogSEFTSF9ERUZJTkVfRlVOQwotJXRva2VuIDxz
dmFsPiBJTlRfQ09OU1RBTlQgRkxPQVRfQ09OU1RBTlQgSURFTlRJRklFUgotJXR5cGUgPGl2YWw+
IG9wZXJhdG9yCi0ldHlwZSA8dHZhbD4gY29uZGl0aW9uYWxfdG9rZW4gdG9rZW4KLSV0eXBlIDx0
bGlzdD4gcGFyYW1ldGVyX2xpc3QgcmVwbGFjZW1lbnRfbGlzdCBjb25kaXRpb25hbF9saXN0IHRv
a2VuX2xpc3QKLSUlCi0KLWlucHV0Ci0gICAgOiAvKiBlbXB0eSAqLwotICAgIHwgaW5wdXQgbGlu
ZQotOwotCi1saW5lCi0gICAgOiB0ZXh0X2xpbmUKLSAgICB8IGNvbnRyb2xfbGluZQotOwotCi10
ZXh0X2xpbmUKLSAgICA6ICdcbicKLSAgICB8IHRva2VuX2xpc3QgJ1xuJyB7Ci0gICAgICAgIC8v
IFRPRE8oYWxva3ApOiBFeHBhbmQgbWFjcm9zLgotICAgICAgICBwcDo6VG9rZW5WZWN0b3IqIG91
dCA9IGNvbnRleHQtPm91dHB1dCgpOwotICAgICAgICBvdXQtPmluc2VydChvdXQtPmVuZCgpLCAk
MS0+YmVnaW4oKSwgJDEtPmVuZCgpKTsKLSAgICAgICAgZGVsZXRlICQxOwotICAgIH0KLTsKLQot
Y29udHJvbF9saW5lCi0gICAgOiBIQVNIICdcbicKLSAgICB8IEhBU0hfREVGSU5FX09CSiByZXBs
YWNlbWVudF9saXN0ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJz
dF9saW5lLCBwcDo6TWFjcm86OmtUeXBlT2JqLCAkMSwgTlVMTCwgJDIpOwotICAgIH0KLSAgICB8
IEhBU0hfREVGSU5FX0ZVTkMgJygnIHBhcmFtZXRlcl9saXN0ICcpJyByZXBsYWNlbWVudF9saXN0
ICdcbicgewotICAgICAgICBjb250ZXh0LT5kZWZpbmVNYWNybyhAMS5maXJzdF9saW5lLCBwcDo6
TWFjcm86OmtUeXBlRnVuYywgJDEsICQzLCAkNSk7Ci0gICAgfQotICAgIHwgSEFTSF9VTkRFRiBJ
REVOVElGSUVSICdcbicgewotICAgICAgICBjb250ZXh0LT51bmRlZmluZU1hY3JvKCQyKTsKLSAg
ICB9Ci0gICAgfCBIQVNIX0lGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgICAgIHB1c2hD
b25kaXRpb25hbEJsb2NrKGNvbnRleHQsICQyID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICB9Ci0gICAg
fCBIQVNIX0lGREVGIElERU5USUZJRVIgJ1xuJyB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJs
b2NrKGNvbnRleHQsIGNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwg
SEFTSF9JRk5ERUYgSURFTlRJRklFUiAnXG4nIHsKLSAgICAgICAgcHVzaENvbmRpdGlvbmFsQmxv
Y2soY29udGV4dCwgIWNvbnRleHQtPmlzTWFjcm9EZWZpbmVkKCQyKSk7Ci0gICAgfQotICAgIHwg
SEFTSF9FTElGIGNvbmRpdGlvbmFsX2xpc3QgJ1xuJyB7Ci0gICAgfQotICAgIHwgSEFTSF9FTFNF
ICdcbicgewotICAgIH0KLSAgICB8IEhBU0hfRU5ESUYgJ1xuJyB7Ci0gICAgICAgIHBvcENvbmRp
dGlvbmFsQmxvY2soY29udGV4dCk7Ci0gICAgfQotICAgIHwgSEFTSF9FUlJPUiAnXG4nCi0gICAg
fCBIQVNIX1BSQUdNQSAnXG4nCi0gICAgfCBIQVNIX0VYVEVOU0lPTiAnXG4nCi0gICAgfCBIQVNI
X1ZFUlNJT04gJ1xuJwotICAgIHwgSEFTSF9MSU5FICdcbicKLTsKLQotcmVwbGFjZW1lbnRfbGlz
dAotICAgIDogLyogZW1wdHkgKi8geyAkJCA9IE5VTEw7IH0KLSAgICB8IHRva2VuX2xpc3QKLQot
cGFyYW1ldGVyX2xpc3QKLSAgICA6IC8qIGVtcHR5ICovIHsgJCQgPSBOVUxMOyB9Ci0gICAgfCBJ
REVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAk
JC0+cHVzaF9iYWNrKG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgSURFTlRJRklFUiwgJDEp
KTsKLSAgICB9Ci0gICAgfCBwYXJhbWV0ZXJfbGlzdCAnLCcgSURFTlRJRklFUiB7Ci0gICAgICAg
ICQkID0gJDE7Ci0gICAgICAgICQkLT5wdXNoX2JhY2sobmV3IHBwOjpUb2tlbihAMy5maXJzdF9s
aW5lLCBJREVOVElGSUVSLCAkMykpOwotICAgIH0KLQotY29uZGl0aW9uYWxfbGlzdAotICAgIDog
Y29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0g
ICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwotICAgIH0KLSAgICB8IGNvbmRpdGlvbmFsX2xpc3Qg
Y29uZGl0aW9uYWxfdG9rZW4gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICAkJC0+cHVzaF9i
YWNrKCQyKTsKLSAgICB9Ci07Ci0KLXRva2VuX2xpc3QKLSAgICA6IHRva2VuIHsKLSAgICAgICAg
JCQgPSBuZXcgcHA6OlRva2VuVmVjdG9yOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKLSAg
ICB9Ci0gICAgfCB0b2tlbl9saXN0IHRva2VuIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICAgICAg
JCQtPnB1c2hfYmFjaygkMik7Ci0gICAgfQotOwotCi1jb25kaXRpb25hbF90b2tlbgotICAgIDog
REVGSU5FRCBJREVOVElGSUVSIHsKLSAgICB9Ci0gICAgfCBERUZJTkVEICcoJyBJREVOVElGSUVS
ICcpJyB7Ci0gICAgfQotICAgIHwgdG9rZW4KLTsKLQotdG9rZW4KLSAgICA6IG9wZXJhdG9yIHsK
LSAgICAgICAgJCQgPSBuZXcgcHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsICQxLCBOVUxMKTsKLSAg
ICB9Ci0gICAgfCBJTlRfQ09OU1RBTlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEu
Zmlyc3RfbGluZSwgSU5UX0NPTlNUQU5ULCAkMSk7Ci0gICAgfQotICAgIHwgRkxPQVRfQ09OU1RB
TlQgewotICAgICAgICAkJCA9IG5ldyBwcDo6VG9rZW4oQDEuZmlyc3RfbGluZSwgRkxPQVRfQ09O
U1RBTlQsICQxKTsKLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAgICAgICAgJCQgPSBuZXcg
cHA6OlRva2VuKEAxLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICQxKTsKLSAgICB9Ci07Ci0KLW9w
ZXJhdG9yCi0gICAgOiAnWycgeyAkJCA9ICdbJzsgfQotICAgIHwgJ10nIHsgJCQgPSAnXSc7IH0K
LSAgICB8ICc8JyB7ICQkID0gJzwnOyB9Ci0gICAgfCAnPicgeyAkJCA9ICc+JzsgfQotICAgIHwg
JygnIHsgJCQgPSAnKCc7IH0KLSAgICB8ICcpJyB7ICQkID0gJyknOyB9Ci0gICAgfCAneycgeyAk
JCA9ICd7JzsgfQotICAgIHwgJ30nIHsgJCQgPSAnfSc7IH0KLSAgICB8ICcuJyB7ICQkID0gJy4n
OyB9Ci0gICAgfCAnKycgeyAkJCA9ICcrJzsgfQotICAgIHwgJy0nIHsgJCQgPSAnLSc7IH0KLSAg
ICB8ICcvJyB7ICQkID0gJy8nOyB9Ci0gICAgfCAnKicgeyAkJCA9ICcqJzsgfQotICAgIHwgJyUn
IHsgJCQgPSAnJSc7IH0KLSAgICB8ICdeJyB7ICQkID0gJ14nOyB9Ci0gICAgfCAnfCcgeyAkJCA9
ICd8JzsgfQotICAgIHwgJyYnIHsgJCQgPSAnJic7IH0KLSAgICB8ICd+JyB7ICQkID0gJ34nOyB9
Ci0gICAgfCAnPScgeyAkJCA9ICc9JzsgfQotICAgIHwgJyEnIHsgJCQgPSAnISc7IH0KLSAgICB8
ICc6JyB7ICQkID0gJzonOyB9Ci0gICAgfCAnOycgeyAkJCA9ICc7JzsgfQotICAgIHwgJywnIHsg
JCQgPSAnLCc7IH0KLSAgICB8ICc/JyB7ICQkID0gJz8nOyB9Ci07Ci0KLSUlCi0KLXZvaWQgeXll
cnJvcihZWUxUWVBFKiBsbG9jcCwgcHA6OkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLX0KLQotdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29u
dGV4dCwgYm9vbCBjb25kaXRpb24pCi17Ci19Ci0KLXZvaWQgcG9wQ29uZGl0aW9uYWxCbG9jayhw
cDo6Q29udGV4dCogY29udGV4dCkKLXsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLWJvb2wgQ29udGV4
dDo6cGFyc2UoKQotewotICAgIHl5ZGVidWcgPSAxOwotICAgIHJldHVybiB5eXBhcnNlKHRoaXMp
ID09IDAgPyB0cnVlIDogZmFsc2U7Ci19Ci19ICAvLyBuYW1lc3BhY2UgcHAKLQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfbGV4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF9sZXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyNjggKzAsMCBAQAotI2xpbmUgMTYgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHAubCIKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0
by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNs
aW5lIDEzICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX2xleC5jcHAiCi0KLSNkZWZpbmUg
IFlZX0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0
ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01B
Sk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZ
WV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04g
PiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGgg
IHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyog
YmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQot
LyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVm
aW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8q
IEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1h
eSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVS
U0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9N
QUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1p
dCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19M
SU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYg
dWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlw
ZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJf
dDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25l
ZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlw
ZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhf
dDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1
bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1p
dHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhf
TUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVm
aW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElO
VDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQot
I2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAg
KDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAg
ICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMy
X01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFY
Ci0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYg
VUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5k
aWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0
Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVm
IF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMg
dmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZSAgIC8qICEgX19jcGx1c3Bs
dXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8K
LSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlm
ICAvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwot
Ci0jaWZkZWYgWVlfVVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVm
aW5lIHl5Y29uc3QKLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwot
I2RlZmluZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9z
c2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBh
biBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdh
bnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0
aGUKLSAqIGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWdu
ZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0j
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NB
Tk5FUl9UCi10eXBlZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5p
ZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUg
bWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5
aW5fcgotI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5
ZXh0cmFfcgotI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXln
LT55eXRleHRfcgotI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9ic19saW5lbm8pCi0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2JzX2NvbHVtbikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdf
cgotCi0vKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0
IHRvIHRha2UgYSBwYXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1
ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVH
SU4uCi0gKi8KLSNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJh
bnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBs
YXRlciBoYW5kZWQKLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlT
VEFURSBhbGlhcyBpcyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZ
X1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFS
VAotCi0vKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRl
LiAqLwotI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3Rh
dGUgKyAxKQotCi0vKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEg
bmV3IGZpbGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyICkKLQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRl
ZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9C
VUZfU0laRSAxNjM4NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBl
bm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIu
Ci0gKi8KLSNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBz
aXplb2YoeXlfc3RhdGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RB
VEUKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FD
VF9DT05USU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5l
IEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21p
dCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMK
LSAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2Ug
eXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKLSAgICAgKiAgICAgICBleGlzdGlu
ZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHBwbGV4LiAKLSAgICAg
KiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4g
SSB0cmllZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQg
aW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAg
ICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90
IHdvcnRoIGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAg
ICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAg
ICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAtLXl5bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgIAotLyogUmV0dXJuIGFs
bCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQg
c3RyZWFtLiAqLwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0g
ICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
Ci0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8g
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5w
dXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90
IHl5X3NpemVfdDsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUK
LSNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZQotICAgIHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOwotCi0gICAgY2hhciAqeXlfY2hfYnVm
OyAgICAgICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgY2hhciAqeXlfYnVmX3BvczsgICAgICAg
LyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIFNpemUgb2Yg
aW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotICAgICAq
IGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0gICAg
LyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGlu
ZyBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGludCB5eV9uX2NoYXJzOwot
Ci0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBj
cmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBz
aG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAgICAqLwotICAgIGludCB5
eV9pc19vdXJfYnVmZmVyOwotCi0gICAgLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2
ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCi0gICAgICogaWYgd2UncmUgdXNpbmcgc3RkaW8g
Zm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotICAgICAqIGluc3RlYWQgb2Yg
ZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKLSAgICAg
KiBlYWNoIG5ld2xpbmUuCi0gICAgICovCi0gICAgaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0g
ICAgLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
YSBsaW5lLgotICAgICAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5l
eHQgbWF0Y2gsIG90aGVyd2lzZQotICAgICAqIG5vdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRf
Ym9sOwotCi0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAg
ICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0gICAg
LyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2gg
dGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwotICAgIGludCB5eV9maWxsX2J1ZmZlcjsK
LQotICAgIGludCB5eV9idWZmZXJfc3RhdHVzOwotCi0jZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAot
I2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2Vl
biBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2Ug
bWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0g
ICAgICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9y
ZS4gIFdlIG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRj
aCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAg
KgotICAgICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3Rh
dHVzIHRvICJuZXciCi0gICAgICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIg
Y2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEg
bmV3IGlucHV0IGZpbGUuCi0gICAgICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAy
Ci0KLSAgICB9OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8q
IFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGlu
IHRoZQotICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9y
ZSBnZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9m
IHRoZSBzdGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNl
ZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9y
IHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2Rl
ZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFU
RSBwcF9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFy
ICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0
ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9z
aXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVy
Ci0KLSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBc
Ci0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVm
ZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KLQotI2RlZmluZSB5eV9z
ZXRfYm9sKGF0X2JvbCkgXAotICAgIHsgXAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiAp
e1wKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAgICAgICAgIHBwX2NyZWF0ZV9i
dWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0gICAgfQotCi0jZGVm
aW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQot
LyogQmVnaW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAxCi0jZGVmaW5lIFlZ
X1NLSVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwotCi10eXBlZGVm
IGludCB5eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKLQotc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5
cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eV9mYXRh
bF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotLyog
RG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9y
ZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCi0gKi8KLSNk
ZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7
IFwKLSAgICB5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5
X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotICAgICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5
X2NfYnVmX3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMjMKLSNkZWZpbmUgWVlf
RU5EX09GX0JVRkZFUiAyNAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2Fu
bmVyLAotICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJh
bnNfaW5mbwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAgIGZsZXhfaW50
MzJfdCB5eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2Nl
cHRbMTA1XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAgMjMsICAgMjEs
ICAgMjIsICAgMjAsICAgMjAsICAgMTgsICAgMTgsCi0gICAgICAgMTcsICAgMTcsICAgMjEsICAg
IDEsICAgMjEsICAgMTksICAgMTksICAgMTgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgMTgs
ICAgMTcsICAgMTcsICAgMjEsICAgIDEsICAgIDEsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTksICAgMTgsICAgMTcsICAgIDAs
Ci0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDUsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsCi0gICAgICAgMTksICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAg
IDAsICAgIDksICAgIDgsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTYs
ICAgIDAsICAgIDAsICAgIDAsICAgMTcsICAgIDAsICAgMTAsCi0gICAgICAgMTIsICAgIDAsICAg
IDYsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsCi0gICAgICAgIDcs
ICAgMTMsICAgIDQsICAgIDAsICAgIDAsICAgIDAsICAgMTUsICAgIDAsICAgIDAsICAgIDIsCi0K
LSAgICAgICAgMywgICAgMCwgICAxNCwgICAgMAotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0gICAgICAgIDQs
ICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDUsICAg
IDUsICAgIDEsICAgIDcsCi0gICAgICAgIDUsICAgIDUsICAgIDgsICAgIDUsICAgIDgsICAgIDks
ICAgIDUsICAgMTAsICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgMTEsICAg
MTEsICAgMTIsICAgMTIsICAgIDUsICAgIDUsICAgIDUsCi0gICAgICAgIDUsICAgIDUsICAgIDUs
ICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTQsICAgMTMsCi0gICAgICAgMTUsICAg
MTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsCi0gICAg
ICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTUsICAg
MTUsCi0gICAgICAgIDUsICAgIDEsICAgIDUsICAgIDUsICAgMTUsICAgIDEsICAgMTcsICAgMTMs
ICAgMTMsICAgMTgsCi0KLSAgICAgICAxOSwgICAyMCwgICAyMSwgICAxNSwgICAyMiwgICAxNSwg
ICAxNSwgICAyMywgICAyNCwgICAyNSwKLSAgICAgICAyNiwgICAyNywgICAxNSwgICAyOCwgICAy
OSwgICAzMCwgICAzMSwgICAzMiwgICAxNSwgICAzMywKLSAgICAgICAxNSwgICAxNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLQotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9tZXRhWzM0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDIsICAgIDMsICAgIDEsICAg
IDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsCi0gICAgICAgIDQsICAgIDQsICAgIDUs
ICAgIDYsICAgIDcsICAgIDcsICAgIDUsICAgIDUsICAgIDYsICAgIDUsCi0gICAgICAgIDcsICAg
IDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsICAgIDcsCi0gICAg
ICAgIDcsICAgIDcsICAgIDcKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2Jhc2VbMTExXSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgMTgsICAxODQsICAxODUs
ICAgMTEsICAxODUsICAxODUsICAgMjEsICAgMjgsICAgNTMsCi0gICAgICAgIDAsICAxNjQsICAg
MzksICAgNzEsICAgMTIsICAgMzIsICAgMzQsICAgIDEsICAgMzksICAgNDQsCi0gICAgICAgIDAs
ICAgIDAsICAgIDAsICAxNjIsICAgNjQsICAgIDAsICAgIDAsICAxNjIsICAgNDYsICAxNjAsCi0g
ICAgICAxNTcsICAxNTAsICAxNTIsICAxNTcsICAgNzAsICAgNDcsICAgNjUsICAgIDAsICAxNTMs
ICAxNTQsCi0gICAgICAgNjIsICAxNTUsICAxNDQsICAxNDEsICAgNjcsICAxNDUsICAxNTIsICAx
NTAsICAxMzksICAgNzYsCi0gICAgICAgODUsICAxNDEsICAxNDMsICAxNDQsICAxNDQsICAxNDAs
ICAxMzUsICAxNDEsICAxNDAsICAxNDAsCi0gICAgICAxMzgsICAxMzUsICAxMzYsICAxMjUsICAx
MzQsICAxMjcsICAxODUsICAxODUsICAxMzEsICAxMjIsCi0gICAgICAxMjQsICAxMjgsICAxMjgs
ICAxODUsICAxMjIsICAxMjUsICAxMjIsICAxMjUsICAxMjMsICAxODUsCi0gICAgICAxODUsICAx
MTIsICAxODUsICAxMjAsICAxMTMsICAxMjcsICAgOTcsICAgIDAsICAxMDcsICAgODYsCi0gICAg
ICAxODUsICAxODUsICAxMDUsICAgNzYsICAgODEsICAgMzQsICAxODUsICAgOTcsICAgMTAsICAx
ODUsCi0KLSAgICAgIDE4NSwgIDEwMywgIDE4NSwgIDE4NSwgIDExMCwgIDExNCwgIDExOCwgIDEy
MSwgIDEyNiwgIDEzMgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
ZGVmWzExMV0gPQotICAgIHsgICAwLAotICAgICAgMTA1LCAgMTA1LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA2LCAgMTA2LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA3LCAgMTA3LCAgICA5LCAgIDE4LCAgMTA0LAotICAgICAgMTA4LCAgIDEw
LCAgMTA2LCAgMTA2LCAgMTA0LCAgIDE0LCAgIDE0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA4LCAgMTA2LCAgMTA0
LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA2LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA5LCAgMTA0LCAgMTA0LCAgMTEwLCAgMTA0LCAgMTA0LAot
Ci0gICAgICAxMDQsICAxMTAsICAxMDQsICAgIDAsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsy
MTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgNCwgICAgNSwgICAgNiwgICAgNSwgICAgNywgICAg
NCwgICAgNywgICAgNywgICAgOCwgICAgOSwKLSAgICAgICAxMCwgICAxMCwgICAxNSwgICAxNSwg
ICAxNSwgICAxNSwgIDEwNCwgICAxMiwgICAgNCwgICAxMywKLSAgICAgICAgNiwgICAgNSwgICAg
NywgICAxNCwgICAgNywgICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMCwKLSAgICAgICAxNiwg
ICAxNiwgICAxNiwgIDEwNCwgIDEwMywgICAxMiwgICAxNywgICAxOCwgICAxOCwgICAxOSwKLSAg
ICAgICAyNSwgICAyMCwgICAxNSwgICAyMSwgICAyNiwgICAzNSwgICAyMCwgICAzNSwgICAxOSwg
ICAxOSwKLSAgICAgICAzNSwgICAzNiwgICAzNSwgICAzNywgICAzNywgICAzNywgICAzNywgICAz
NywgICAzNywgICA5OSwKLSAgICAgICAyMSwgICAxNywgICAyMiwgICAyMiwgICAyMiwgICAyNSwg
ICAyMCwgICAxNSwgICA0MSwgICAyNiwKLSAgICAgICA0MiwgICAyMCwgICAyNywgICA0MywgICAz
NywgICAzNywgICAzNywgICA1MCwgICA0NCwgICA1MSwKLSAgICAgICA1MSwgICA1MSwgICA5NSwg
ICA1NCwgICA1OSwgICA1MSwgICA1MSwgICA1MSwgICAyOCwgICAyOSwKLSAgICAgICA1NSwgICA2
MCwgICAzMCwgICAzMSwgICA1MSwgICA1MSwgICA1MSwgICAzMiwgIDEwMCwgIDEwMCwKLQotICAg
ICAgIDk3LCAgIDMzLCAgIDM0LCAgMTAxLCAgMTAwLCAgMTAwLCAgIDkzLCAgIDk2LCAgIDk1LCAg
MTAxLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDIz
LCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDE2LCAgIDk0LCAgIDE2LCAgIDM4LCAgIDM4LCAg
IDM4LCAgIDk4LCAgIDkzLCAgIDkyLAotICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgMTAyLCAgMTAy
LCAgMTAyLCAgMTAyLCAgMTAyLCAgMTAyLCAgIDkxLAotICAgICAgIDkwLCAgIDg5LCAgIDg4LCAg
IDg3LCAgIDg2LCAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDgxLAotICAgICAgIDgwLCAgIDc5
LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDcxLAotICAgICAg
IDcwLCAgIDY5LCAgIDY4LCAgIDY3LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYx
LAotICAgICAgIDU4LCAgIDU3LCAgIDU2LCAgIDUzLCAgIDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAg
IDQ2LCAgIDQ1LAotICAgICAgIDQwLCAgIDM5LCAgIDI0LCAgMTA0LCAgICAzLCAgMTA0LCAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAg
MTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQs
ICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQKLSAgICB9IDsKLQotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMTldID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgNSwgICAxNSwgICAgNSwgICAxNSwgICAxOCwgICAgMSwgICAgMiwg
ICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwgICAgMiwgICAgMiwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAxOCwgICA5OSwgICAgMiwg
ICAgOSwgICAgOSwgICAgOSwgICAgOSwKLSAgICAgICAxMywgICAgOSwgICAxMywgICAgOSwgICAx
MywgICAxNiwgICAgOSwgICAxNywgICAxOSwgICAxOSwKLSAgICAgICAxNiwgICAyMCwgICAxNywg
ICAyMCwgICAyMCwgICAyMCwgICAzNiwgICAzNiwgICAzNiwgICA5NiwKLSAgICAgICAgOSwgICAx
MCwgICAxMCwgICAxMCwgICAxMCwgICAyNSwgICAxMCwgICAyNSwgICAyOSwgICAyNSwKLSAgICAg
ICAyOSwgICAxMCwgICAxNCwgICAyOSwgICAzNywgICAzNywgICAzNywgICAzNSwgICAyOSwgICAz
NSwKLSAgICAgICAzNSwgICAzNSwgICA5NSwgICA0MSwgICA0NSwgICA1MCwgICA1MCwgICA1MCwg
ICAxNCwgICAxNCwKLSAgICAgICA0MSwgICA0NSwgICAxNCwgICAxNCwgICA1MSwgICA1MSwgICA1
MSwgICAxNCwgICA5OCwgICA5OCwKLQotICAgICAgIDk0LCAgIDE0LCAgIDE0LCAgIDk4LCAgMTAy
LCAgMTAyLCAgIDkzLCAgIDkwLCAgIDg5LCAgMTAyLAotICAgICAgMTA1LCAgMTA1LCAgMTA1LCAg
MTA1LCAgMTA1LCAgMTA1LCAgMTA1LCAgMTA2LCAgMTA2LCAgMTA2LAotICAgICAgMTA2LCAgMTA3
LCAgIDg3LCAgMTA3LCAgMTA4LCAgMTA4LCAgMTA4LCAgMTA5LCAgIDg2LCAgIDg1LAotICAgICAg
MTA5LCAgMTA5LCAgMTA5LCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgIDg0
LAotICAgICAgIDgyLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDczLCAgIDcyLCAg
IDcxLCAgIDcwLAotICAgICAgIDY5LCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYx
LCAgIDYwLCAgIDU5LCAgIDU4LAotICAgICAgIDU3LCAgIDU2LCAgIDU1LCAgIDU0LCAgIDUzLCAg
IDUyLCAgIDQ5LCAgIDQ4LCAgIDQ3LCAgIDQ2LAotICAgICAgIDQ0LCAgIDQzLCAgIDQyLCAgIDQw
LCAgIDM5LCAgIDM0LCAgIDMzLCAgIDMyLCAgIDMxLCAgIDMwLAotICAgICAgIDI4LCAgIDI0LCAg
IDEyLCAgICAzLCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAotICAgICAgMTA0
LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LCAgMTA0LAot
Ci0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAx
MDQsICAxMDQsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQs
ICAxMDQKLSAgICB9IDsKLQotLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3Vs
ZCBtYXRjaCBlb2wuICovCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5f
bWF0Y2hfZW9sWzI0XSA9Ci0gICAgeyAgIDAsCi0wLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAgICAgfTsKLQot
LyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gK
LSAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBS
RUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1v
cmVfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUg
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMg
ZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vz
c29yLgotQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3Ig
R3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4
OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX3BhcnNlci5zaC4KLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2lu
Y2x1ZGUgIkNvbnRleHQuaCIKLSNpbmNsdWRlICJwcF90YWIuaCIKLQotI2RlZmluZSBZWV9VU0VS
X0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmlyc3RfbGluZSA9IHl5
bGluZW5vOyAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpcnN0X2NvbHVtbiA9IHl5Y29sdW1u
ICsgMTsgIFwKLSAgICAgICAgeXljb2x1bW4gKz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6
ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPnJlYWRJbnB1dChidWYsIG1heFNpemUpOwotICAg
IAotc3RhdGljIHN0ZDo6c3RyaW5nKiBleHRyYWN0TWFjcm9OYW1lKGNvbnN0IGNoYXIqIHN0ciwg
aW50IGxlbik7Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0KLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBw
cDo6Q29udGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50
IHNjYW5uZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAgICAvKiBVc2VyLWRlZmlu
ZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7
Ci0KLSAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQg
aW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxFICp5eWluX3IsICp5eW91
dF9yOwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBv
ZiBzdGFjay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0
eSBvZiBzdGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8q
KjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xkX2NoYXI7Ci0gICAgaW50
IHl5X25fY2hhcnM7Ci0gICAgaW50IHl5bGVuZ19yOwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0g
ICAgaW50IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlf
c3RhcnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0
ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9fcjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19y
OwotCi0gICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAgaW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQg
eXlfbW9yZV9sZW47Ci0KLSAgICBZWVNUWVBFICogeXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICog
eXlsbG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBp
bnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMg
bXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAg
ICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5
eWx2YWwgeXlnLT55eWx2YWxfcgotICAgIAotICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5
bGxvY19yCi0gICAgCi1pbnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQg
cHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNj
YW5uZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUg
bWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAq
LwotCi1pbnQgcHBsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdl
dF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBk
ZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9l
eHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJB
X1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRf
aW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNo
YXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5v
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251
bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2Mg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZ
TFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFj
cm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5p
dGlvbnMgaW4KLSAqIHNlY3Rpb24gMS4KLSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0j
aWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7Ci0jZWxzZQotZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
I2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7
Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3Ry
bGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZu
ZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1
c2hfc3RhdGUgKGludCBuZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0gICAgCi0gICAg
c3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAg
ICBzdGF0aWMgaW50IHl5X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0v
KiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVm
IFlZX1JFQURfQlVGX1NJWkUKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYK
LQotLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJk
IG91dHB1dC4gKi8KLSNpZm5kZWYgRUNITwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCks
IGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNl
IGZ3cml0ZSgpLgotICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwg
eXlvdXQgKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYi
LiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVk
IGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1
ZixyZXN1bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsg
XAotICAgICAgICBpbnQgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYm
IFwKLSAgICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdc
bic7ICsrbiApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlm
ICggYyA9PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAg
ICAgICBpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAg
IHJlc3VsdCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAg
ICAgICBlcnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwg
bWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAot
ICAgICAgICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0g
ICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFp
bGVkIiApOyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwK
LSAgICAgICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0g
ICAgICAgICAgICB9IFwKLSAgICAgICAgfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWktY29s
b24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgp
OyIgLQotICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJl
Y2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91
dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0jZGVm
aW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2Yg
ZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZuZGVm
IFlZX1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQotI2Vu
ZGlmCi0KLS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9FUlJP
UgotI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNj
YW5uZXIpCi0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMg
YW5kIHByb3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQg
c2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJhbWV0
ZXJzLgotICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKLQot
ZXh0ZXJuIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJh
bSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVmaW5l
IFlZX0RFQ0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2VuZGlm
IC8qICFZWV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBl
YWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVwLgot
ICovCi0jaWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0jZW5k
aWYKLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNpZm5k
ZWYgWVlfQlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmluZSBZ
WV9SVUxFX1NFVFVQIFwKLSAgICBpZiAoIHl5bGVuZyA+IDAgKSBcCi0gICAgICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gXAotICAgICAgICAgICAgICAgICh5eXRleHRb
eXlsZW5nIC0gMV0gPT0gJ1xuJyk7IFwKLSAgICBZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1h
aW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVD
TAotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICBy
ZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFt
OwotCi0gICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5
X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsK
LSNlbmRpZgotCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5
Zy0+eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotICAgICAgICBpZiAo
ICEgeXlpbiApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47Ci0KLSAgICAgICAgaWYgKCAhIHl5
b3V0ICkKLSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OwotCi0gICAgICAgIGlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApIHsKLSAgICAgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAg
ICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0g
ICAgICAgIH0KLQotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmls
ZSBpcyByZWFjaGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVm
X3A7Ci0KLSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9z
aXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVu
dCBydW4uCi0gICAgICAgICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOwotCi0gICAgICAgIHl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotICAgICAgICB5eV9jdXJyZW50X3N0YXRl
ICs9IFlZX0FUX0JPTCgpOwoteXlfbWF0Y2g6Ci0gICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlf
Y3ApXTsKLSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19z
dGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50
X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAgICAgICAg
IGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDUgKQotICAgICAgICAgICAgICAgICAgICB5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgICsreXlfY3A7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSAxMDQgKTsKLSAgICAg
ICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgIHl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCi15eV9maW5kX2FjdGlv
bjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0gICAg
ICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047Ci0KLSAgICAgICAgaWYgKCB5eV9hY3QgIT0gWVlfRU5E
X09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgeXlsOwotICAgICAgICAgICAgZm9yICggeXlsID0gMDsgeXls
IDwgeXlsZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nICkKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAg
ICAgIHl5Y29sdW1uPTA7Ci0gICAgfXdoaWxlKDApCi07Ci0gICAgICAgICAgICB9Ci0KLWRvX2Fj
dGlvbjogIC8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4g
Ki8KLQotICAgICAgICBzd2l0Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0g
ICAgICAgICAgICAvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8K
LSAgICAgICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50
X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8g
eXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0g7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAyOgotLyogcnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KLSp5
eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5
eXRleHQgKi8KLXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwIC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNU
SU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXls
dmFsLT5zdmFsID0gZXh0cmFjdE1hY3JvTmFtZSh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IEhBU0hfREVGSU5FX09CSjsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSAzOgotKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLwot
eXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNl
dCB1cCB5eXRleHQgYWdhaW4gKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPnN2YWwg
PSBleHRyYWN0TWFjcm9OYW1lKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSEFTSF9ERUZJ
TkVfRlVOQzsKLX0KLSAgICBZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gSEFTSF9VTkRFRjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDU6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBIQVNIX0lGOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIEhBU0hfSUZERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gSEFTSF9JRk5ERUY7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA4OgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTFNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOToK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hfRUxJRjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FTkRJRjsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gREVGSU5FRDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9FUlJPUjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSEFTSF9QUkFHTUE7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEhBU0hf
RVhURU5TSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBIQVNIX1ZFUlNJT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEhBU0hfTElORTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVM
RV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6OnN0cmluZyh5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTg6
Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5zdmFsID0gbmV3IHN0ZDo6c3RyaW5nKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gSU5UX0NPTlNUQU5UOwotfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+c3ZhbCA9IG5ldyBzdGQ6
OnN0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIEZMT0FUX0NPTlNUQU5UOwotfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDIwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4geXl0ZXh0WzBd
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMjE6Ci1ZWV9SVUxFX1NFVFVQCi17IC8qIElnbm9yZSB3
aGl0ZXNwYWNlICovIH0KLSAgICBZWV9CUkVBSwotY2FzZSAyMjoKLS8qIHJ1bGUgMjIgY2FuIG1h
dGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87IHl5Y29sdW1uID0g
MDsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotICAgIFlZX0JSRUFLCi1jYXNlIFlZX1NUQVRF
X0VPRihJTklUSUFMKToKLXsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDIz
OgotWVlfUlVMRV9TRVRVUAotRUNITzsKLSAgICBZWV9CUkVBSwotCi0gICAgY2FzZSBZWV9FTkRf
T0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQg
bm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAg
ICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwotICAg
ICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0g
ICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNl
cgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBj
YWxsZWQKLSAgICAgICAgICAgICAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFz
c3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxh
Y2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFj
dGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0
IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0
X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBv
c2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2Ug
eXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVk
IHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFr
ZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1idWZmZXIgc3Rh
dGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGluIGlucHV0KCku
Ci0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAg
ICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5X3N0YXRlX3R5
cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAg
ICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAot
ICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAg
ICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAg
ICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAg
ICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAg
ICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBp
dAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICov
Ci0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJy
ZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0X3N0YXRlICkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0aGUgTlVMLiAq
LwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAg
ICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlv
bjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0
Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4g
Y2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBo
YXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0
IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRv
dGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50
cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29y
ayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxsIGdldCByZXR1
cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAg
ICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPQotICAg
ICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90
ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91
c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAgICAgICAgIGNh
c2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9
Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICov
Ci19IC8qIGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8g
cmVhZCBpbiBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcg
YW4gYWN0aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5V
RV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9C
X0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25l
eHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRl
c3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBj
aGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90
b19tb3ZlLCBpOwotICAgIGludCByZXRfdmFsOwotCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3Ag
PiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLSAgICBpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsg
LyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0g
ICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9B
REogPT0gMSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2lu
Z2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMg
YSBmaW5hbCBFT0YuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNU
X0VORF9PRl9GSUxFOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0Is
IGZpcnN0Ci0gICAgICAgICAgICAgKiBwcm9jZXNzIGl0LgotICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICByZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLSAgICAvKiBGaXJzdCBt
b3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3Zl
ID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0gICAg
Zm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLSAgICAgICAgKihkZXN0Kysp
ID0gKihzb3VyY2UrKyk7Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotICAgICAgICAvKiBkb24n
dCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotICAg
ICAgICAgKiBqdXN0IGZvcmNlIGFuIEVPRgotICAgICAgICAgKi8KLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKLQotICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG51bV90b19yZWFkID0KLSAgICAgICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92
ZSAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLSAgICAgICAgICAg
IHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0gICAg
ICAgICAgICAvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8K
LSAgICAgICAgICAgIFlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7Ci0KLSAg
ICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkg
KHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLSAgICAgICAgICAgIGlmICggYi0+
eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlu
dCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKLQotICAgICAgICAgICAgICAgIGlmICgg
bmV3X3NpemUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGIt
Pnl5X2J1Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGItPnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYg
PSAoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIg
RU9CIGNoYXJzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlYWxsb2MoKHZvaWQgKikgYi0+
eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQs
IHdlIGRvbid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwot
Ci0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0
IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmIt
Pnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFk
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICBpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1f
dG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRh
dGEuICovCi0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIChz
aXplX3QpIG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5
Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19t
b3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwg
PSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgcHByZXN0YXJ0KHl5aW4gICx5eXNj
YW5uZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAg
IFlZX0JVRkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ZWxzZQotICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYg
KCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUg
YXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAg
IHl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsg
KHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVy
KCkiICk7Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwot
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0K
LSAgICB5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbMF07Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQg
Ki8KLQotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVu
dF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9zdGFydDsKLSAgICB5eV9jdXJyZW50X3N0YXRlICs9IFlZX0FUX0JPTCgp
OwotCi0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlf
Y3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6
IDEpOwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3Vy
cmVudF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNSApCi0gICAg
ICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0KLSAgICByZXR1
cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBt
YWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0g
KiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKLSAqLwot
ICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgcmVnaXN0ZXIg
aW50IHl5X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24g
b3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ewotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3Rh
dGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA1ICkKLSAgICAgICAgICAg
IHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2ln
bmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gMTA0
KTsKLQotICAgIHJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQot
I2lmbmRlZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5
eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotICAgIGludCBjOwotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotICAgIGlmICggKnl5Zy0+eXlf
Y19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICB7Ci0gICAgICAgIC8q
IHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJu
LgotICAgICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMs
IHRoZW4gaXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhp
dCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+
eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAg
ICAgICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0g
eXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOwotICAgICAgICAgICAgKyt5eWctPnl5
X2NfYnVmX3A7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlz
Y2FubmVyICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9B
Q1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1
c2UgeXlfZ19uX2IoKQotICAgICAgICAgICAgICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNj
dW11bGF0ZWQgYQotICAgICAgICAgICAgICAgICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3
ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4g
YmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0
KCksCi0gICAgICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lk
ZXIuCi0gICAgICAgICAgICAgICAgICAgICAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9N
QVRDSAotICAgICAgICAgICAgICAgICAgICAgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAg
ICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZm
ZXIgc3RhdHVzLiAqLwotICAgICAgICAgICAgICAgICAgICBwcHJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyKTsKLQotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KLQotICAgICAgICAg
ICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRU9GOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggISB5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0gICAgICAgICAgICAgICAgICAgICAg
ICBZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAg
ICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsg
LyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXln
LT55eV9jX2J1Zl9wOwotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wg
PSAoYyA9PSAnXG4nKTsKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRf
Ym9sICkKLSAgICAgICAgICAgCi0gICAgZG97IHl5bGluZW5vKys7Ci0gICAgICAgIHl5Y29sdW1u
PTA7Ci0gICAgfXdoaWxlKDApCi07Ci0KLSAgICByZXR1cm4gYzsKLX0KLSNlbmRpZiAgLyogaWZu
ZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJl
bnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFM
IC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAg
ICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9C
VUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICBwcF9pbml0X2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHBwX2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1
ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRj
aF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0
aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgcHBwb3Bf
YnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAgICBwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZm
ZXIpOwotICAgICAqLwotICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAg
ICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0K
LQotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0KLSAgICAvKiBXZSBkb24ndCBhY3R1YWxseSBr
bm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAocHB3cmFw
KCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlzIGxv
b2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAgICAq
IHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZm
ZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9w
dHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9w
b3M7Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsK
LSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBBbGxv
Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0gZmls
ZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVy
IHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVm
ZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgcHBh
bGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAg
aWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7
Ci0KLSAgICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0
aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2Yt
YnVmZmVyIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikg
cHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55
eV9jaF9idWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0g
MTsKLQotICAgIHBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKLQotICAgIHJldHVy
biBiOwotfQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFtIGIgYSBidWZmZXIg
Y3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICBpZiAoICEgYiApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5v
dCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotICAgIGlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCi0gICAgICAgIHBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5l
ciApOwotCi0gICAgcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0
aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBz
b21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1
Y2ggYXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZv
aWQgcHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotCi17Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIHBw
X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOwotCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZp
bGU7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3Vy
cmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBj
YWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAg
ICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBj
b2x1bW4uCi0gICAgICovCi0gICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAg
ICBiLT55eV9ic19saW5lbm8gPSAxOwotICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAg
IH0KLQotICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0gICAgCi0gICAgZXJybm8g
PSBvZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0
aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBi
dWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4K
LSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBw
cF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiLT55eV9uX2NoYXJz
ID0gMDsKLQotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2Yt
YnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0
YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBi
LT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotICAgIGItPnl5X2F0X2JvbCA9IDE7
Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBpZiAoIGIg
PT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLX0KLQotLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBU
aGUgbmV3IHN0YXRlIGJlY29tZXMKLSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlv
biB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjawotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0g
bmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgotICovCi12b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFU
RSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAobmV3X2J1ZmZl
ciA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2so
eXlzY2FubmVyKTsKLQotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNo
X3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewot
ICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAg
ICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7
Ci0gICAgICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2Us
IHJlcGxhY2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICov
Ci0gICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJl
Y29tZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17
Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OwotICAgIGlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBw
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2Fu
bmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLSAg
ICB9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0g
KiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2
b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGlu
dCBudW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0g
ICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ug
d2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQg
YSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGlt
bWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBu
dW1fdG9fYWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5
eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVy
X3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
bnVtX3RvX2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+
PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNl
IHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBp
bnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51
bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAg
ICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVh
bGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3Rh
Y2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVv
ZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQot
ICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcg
c2xvdHMuKi8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopKTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9j
OwotICAgIH0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBk
aXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KLSAqIEBwYXJh
bSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBi
eXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRl
IG9iamVjdC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBi
YXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAgICAgYmFzZVtz
aXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFzZVtzaXplLTFd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9yZ290IHRvIGxl
YXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBiID0g
KFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUg
KSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0gICAgYi0+
eXlfYnVmX3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAq
LwotICAgIGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAgIGItPnl5X25f
Y2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0g
ICAgYi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0gICAgYi0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLSAgICBwcF9zd2l0Y2hfdG9fYnVm
ZmVyKGIgLHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBs
ZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5
eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0
IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVz
KCkgaW5zdGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0
IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLSAgICByZXR1cm4g
cHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiog
U2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhl
IG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEg
Ynl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJh
bSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEg
Ynl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1
cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZG
RVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5
Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIFlZX0JVRkZFUl9TVEFURSBi
OwotICAgIGNoYXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICBpbnQgaTsKLSAgICAKLSAg
ICAvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFp
bGluZyBFT0Incy4gKi8KLSAgICBuID0gX3l5Ynl0ZXNfbGVuICsgMjsKLSAgICBidWYgPSAoY2hh
ciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwotICAgIGlmICggISBidWYgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCki
ICk7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAg
YnVmW2ldID0geXlieXRlc1tpXTsKLQotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5
dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotICAgIGIgPSBwcF9zY2FuX2J1
ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLSAgICAvKiBJdCdz
IG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0g
ICAgICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDE7Ci0KLSAgICByZXR1cm4gYjsKLX0KLQotICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hf
c3RhdGUgKGludCAgbmV3X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAo
IHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKQot
ICAgICAgICB7Ci0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZTsKLQotICAgICAgICB5eWctPnl5
X3N0YXJ0X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7Ci0gICAgICAgIG5ld19z
aXplID0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7Ci0KLSAgICAg
ICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFy
dF9zdGFjayA9IChpbnQgKikgcHBhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0KLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQgKikgcHByZWFs
bG9jKCh2b2lkICopIHl5Zy0+eXlfc3RhcnRfc3RhY2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOwot
Ci0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29uZGl0aW9uIHN0YWNr
IiApOwotICAgICAgICB9Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyKytdID0gWVlfU1RBUlQ7Ci0KLSAgICBCRUdJTihuZXdfc3RhdGUpOwotfQotCi0g
ICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICBpZiAoIC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKLSAgICAgICAgWVlfRkFUQUxf
RVJST1IoICJzdGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOwotCi0gICAgQkVHSU4o
eXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOwotfQotCi0gICAg
c3RhdGljIGludCB5eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Ci19
Ci0KLSNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0j
ZW5kaWYKLQotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAi
JXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVm
IHl5bGVzcwotI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBp
bnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxl
c3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2Fy
ZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAg
ICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNz
X21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3Nv
ciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0v
KiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRf
ZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQot
Ci0vKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdl
dCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIAotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUg
aW5wdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLUZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXlpbjsKLX0KLQotLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3Ro
IG9mIHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLWludCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAg
ICByZXR1cm4geXlsZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4
dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoq
IFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5
IHRoZSBzY2FubmVyLgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVm
aW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5l
ZCA7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGlu
ZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12
b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0KLSAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVy
IGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAg
ICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwg
eXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoq
IFNldCB0aGUgY3VycmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAo
aW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNv
bHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAg
IGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJw
cHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAot
ICAgIHl5Y29sdW1uID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0u
IFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICog
QHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQg
cHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5
eWluID0gaW5fc3RyIDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBw
Z2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9k
ZWJ1ZzsKLX0KLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3Nv
ciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZh
bCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9p
ZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9s
bG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAg
IAotdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNl
ci12aXNpYmxlIEFQSSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBj
cmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFu
dCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1
bWVudC4KLSAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9u
LCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlz
Y2FuX3QqIHB0cl95eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5V
TEwpewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
Ci0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1
Y3QgeXlndXRzX3QgKSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxM
KXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQot
ICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9i
YWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9n
bG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2lu
aXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJh
IGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRo
ZQotICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1l
bnQuIE5vdGUgaG93ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5u
ZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUg
cmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBk
ZWNsYXJhdGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1
bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVs
ZC4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVm
aW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
IGR1bW15X3l5Z3V0czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1t
eV95eWd1dHMpOwotCi0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBl
cnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgICpwdHJf
eXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190
ICksICZkdW1teV95eWd1dHMgKTsKLSAgICAKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5V
TEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
ICAgIAotICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5
eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNl
dCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0g
ICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAK
LSAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0
YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8q
IEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2Fu
bmVyLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgp
LCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJf
c3RhY2sgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAw
OwotICAgIHl5Zy0+eXlfaW5pdCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0
aCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGlu
IG1haW4uYyAqLwotI2lmZGVmIFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlv
dXQgPSBzdGRvdXQ7Ci0jZWxzZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0g
KEZJTEUgKikgMDsKLSNlbmRpZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBl
cnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQo
KQotICAgICAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBi
b3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9k
ZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVy
IHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5U
X0JVRkZFUil7Ci0gICAgICAgIHBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAg
ICAgICBwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0
cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQotICAgIC8q
IERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBmcmVlKHl5
Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0YXJ0X3N0
YWNrID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFu
dCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogcHBs
ZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5p
dF9nbG9iYWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3Qg
KHJlZW50cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIg
KTsKLSAgICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogSW50
ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRp
YyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQg
biAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBmb3Ig
KCBpID0gMDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYK
LQotI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNv
bnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHJlZ2lzdGVyIGludCBu
OwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7Ci0KLSAgICByZXR1cm4g
bjsKLX0KLSNlbmRpZgotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQot
Ci12b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxv
d2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBj
aGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBn
ZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVz
ZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAg
ICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29u
dmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8K
LSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Ci19Ci0K
LXZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIGZy
ZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2Fz
dCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1zdGQ6OnN0cmlu
ZyogZXh0cmFjdE1hY3JvTmFtZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pCi17Ci0gICAgLy8g
VGhlIGlucHV0IHN0cmluZyBpcyBvZiB0aGUgZm9ybSB7SEFTSH1kZWZpbmV7SFNQQUNFfSt7SURF
TlRJRklFUn0KLSAgICAvLyBXZSBqdXN0IG5lZWQgdG8gZmluZCB0aGUgbGFzdCBIU1BBQ0UuCi0g
ICAgQVNTRVJUKHN0ciAmJiAobGVuID4gOCkpOyAgLy8gc3RybGVuKCIjZGVmaW5lICIpID09IDg7
Ci0KLSAgICBzdGQ6OnN0cmluZyogbmFtZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IGxlbiAt
IDE7IGkgPj0gMDsgLS1pKQotICAgIHsKLSAgICAgICAgaWYgKChzdHJbaV0gPT0gJyAnKSB8fCAo
c3RyW2ldID09ICdcdCcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gbmV3IHN0ZDo6
c3RyaW5nKHN0ciArIGkgKyAxLCBsZW4gLSBpIC0gMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobmFtZSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0K
LW5hbWVzcGFjZSBwcCB7Ci0KLWludCBDb250ZXh0OjpyZWFkSW5wdXQoY2hhciogYnVmLCBpbnQg
bWF4U2l6ZSkKLXsKLSAgICBpbnQgbnJlYWQgPSBZWV9OVUxMOwotICAgIHdoaWxlICghbUlucHV0
LT5lb2YoKSAmJgotICAgICAgICAgICAobUlucHV0LT5lcnJvcigpID09IHBwOjpJbnB1dDo6a0Vy
cm9yTm9uZSkgJiYKLSAgICAgICAgICAgKG5yZWFkID09IFlZX05VTEwpKQotICAgIHsKLSAgICAg
ICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICAgICAgcHA6OlRva2VuOjpkZWNvZGVMb2Nh
dGlvbihwcGdldF9saW5lbm8obUxleGVyKSwgJmxpbmUsICZmaWxlKTsKLSAgICAgICAgZmlsZSA9
IG1JbnB1dC0+c3RyaW5nSW5kZXgoKTsKLSAgICAgICAgcHBzZXRfbGluZW5vKHBwOjpUb2tlbjo6
ZW5jb2RlTG9jYXRpb24obGluZSwgZmlsZSksbUxleGVyKTsKLQotICAgICAgICBucmVhZCA9IG1J
bnB1dC0+cmVhZChidWYsIG1heFNpemUpOwotCi0gICAgICAgIGlmIChtSW5wdXQtPmVycm9yKCkg
PT0gcHA6OklucHV0OjprRXJyb3JVbmV4cGVjdGVkRU9GKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBUT0RPKGFsb2twKTogUmVwb3J0IGVycm9yLgotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBucmVhZDsKLX0KLQotYm9vbCBDb250ZXh0Ojppbml0TGV4ZXIoKQotewotICAgIEFTU0VS
VChtTGV4ZXIgPT0gTlVMTCk7Ci0KLSAgICBpZiAocHBsZXhfaW5pdF9leHRyYSh0aGlzLCZtTGV4
ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxtTGV4ZXIpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OmRlc3Ryb3lMZXhlcigpCi17Ci0g
ICAgQVNTRVJUKG1MZXhlcik7Ci0KLSAgICBwcGxleF9kZXN0cm95KG1MZXhlcik7Ci0gICAgbUxl
eGVyID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHBfdGFiLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMDcyICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdO
VSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24n
cyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwg
MTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgotICAgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3Ig
KGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJn
ZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2Vy
IHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVybXMgb2YgeW91
ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0gICBwYXJzZXIg
Z2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVv
ZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5
IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkg
KGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNo
IHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBCaXNvbiBvdXRw
dXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAg
TGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRoaXMgc3BlY2lh
bCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4K
LSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBhcnNlciBza2Vs
ZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlmeWluZyB0aGUg
b3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyogQWxsIHN5bWJv
bHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKLSAg
IGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVu
IGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBh
bmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2Vw
dGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFy
eSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VSIE5BTUUgU1BB
Q0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KLSNkZWZpbmUg
WVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJ
T04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tFTEVUT05fTkFN
RSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBVUkUgMQotCi0v
KiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMQotCi0vKiBTdWJz
dGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBh
cnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVycm9yIHBwZXJy
b3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNoYXIKLSNkZWZp
bmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotI2RlZmluZSB5eWxs
b2MgcHBsbG9jCi0KLS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmlu
ZSBZWVRPS0VOVFlQRQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxl
LCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0u
ICAqLwotICAgZW51bSB5eXRva2VudHlwZSB7Ci0gICAgIEhBU0ggPSAyNTgsCi0gICAgIEhBU0hf
VU5ERUYgPSAyNTksCi0gICAgIEhBU0hfSUYgPSAyNjAsCi0gICAgIEhBU0hfSUZERUYgPSAyNjEs
Ci0gICAgIEhBU0hfSUZOREVGID0gMjYyLAotICAgICBIQVNIX0VMU0UgPSAyNjMsCi0gICAgIEhB
U0hfRUxJRiA9IDI2NCwKLSAgICAgSEFTSF9FTkRJRiA9IDI2NSwKLSAgICAgREVGSU5FRCA9IDI2
NiwKLSAgICAgSEFTSF9FUlJPUiA9IDI2NywKLSAgICAgSEFTSF9QUkFHTUEgPSAyNjgsCi0gICAg
IEhBU0hfRVhURU5TSU9OID0gMjY5LAotICAgICBIQVNIX1ZFUlNJT04gPSAyNzAsCi0gICAgIEhB
U0hfTElORSA9IDI3MSwKLSAgICAgSEFTSF9ERUZJTkVfT0JKID0gMjcyLAotICAgICBIQVNIX0RF
RklORV9GVU5DID0gMjczLAotICAgICBJTlRfQ09OU1RBTlQgPSAyNzQsCi0gICAgIEZMT0FUX0NP
TlNUQU5UID0gMjc1LAotICAgICBJREVOVElGSUVSID0gMjc2Ci0gICB9OwotI2VuZGlmCi0vKiBU
b2tlbnMuICAqLwotI2RlZmluZSBIQVNIIDI1OAotI2RlZmluZSBIQVNIX1VOREVGIDI1OQotI2Rl
ZmluZSBIQVNIX0lGIDI2MAotI2RlZmluZSBIQVNIX0lGREVGIDI2MQotI2RlZmluZSBIQVNIX0lG
TkRFRiAyNjIKLSNkZWZpbmUgSEFTSF9FTFNFIDI2MwotI2RlZmluZSBIQVNIX0VMSUYgMjY0Ci0j
ZGVmaW5lIEhBU0hfRU5ESUYgMjY1Ci0jZGVmaW5lIERFRklORUQgMjY2Ci0jZGVmaW5lIEhBU0hf
RVJST1IgMjY3Ci0jZGVmaW5lIEhBU0hfUFJBR01BIDI2OAotI2RlZmluZSBIQVNIX0VYVEVOU0lP
TiAyNjkKLSNkZWZpbmUgSEFTSF9WRVJTSU9OIDI3MAotI2RlZmluZSBIQVNIX0xJTkUgMjcxCi0j
ZGVmaW5lIEhBU0hfREVGSU5FX09CSiAyNzIKLSNkZWZpbmUgSEFTSF9ERUZJTkVfRlVOQyAyNzMK
LSNkZWZpbmUgSU5UX0NPTlNUQU5UIDI3NAotI2RlZmluZSBGTE9BVF9DT05TVEFOVCAyNzUKLSNk
ZWZpbmUgSURFTlRJRklFUiAyNzYKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1
c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBp
cyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVE
SVQhCi0KLSNpbmNsdWRlICJDb250ZXh0LmgiCi0KLSNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4
dC0+bGV4ZXIoKQotI2RlZmluZSBZWURFQlVHIDEKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAq
LwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFi
bGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UK
LSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vs
c2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhl
IHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tF
Tl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZ
WVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQotewotICAgIGludCBp
dmFsOwotICAgIHN0ZDo6c3RyaW5nKiBzdmFsOwotICAgIHBwOjpUb2tlbiogdHZhbDsKLSAgICBw
cDo6VG9rZW5WZWN0b3IqIHRsaXN0OwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KLQot
ICAgIFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdp
bGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVm
aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWUxUWVBF
ICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxUWVBF
Ci17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFzdF9s
aW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBlIFlZ
TFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWUxU
WVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYK
LQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0K
LQotZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgWVlMVFlQRSogbGxvY3AsIHZvaWQq
IGxleGVyKTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsCi0gICAgICAgICAg
ICAgICAgICAgIHBwOjpDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24pOwotCi1zdGF0aWMgdm9pZCBwdXNoQ29uZGl0aW9uYWxCbG9jayhwcDo6
Q29udGV4dCogY29udGV4dCwgYm9vbCBjb25kaXRpb24pOwotc3RhdGljIHZvaWQgcG9wQ29uZGl0
aW9uYWxCbG9jayhwcDo6Q29udGV4dCogY29udGV4dCk7Ci0KLQotLyogTGluZSAyMTYgb2YgeWFj
Yy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZk
ZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxz
ZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYg
WVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5
dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlm
Ci0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3Vp
bnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2Owot
I2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlw
ZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYK
LQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlT
SVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlT
SVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVs
c2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0j
ZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBp
ZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lk
KSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0j
IGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYK
LQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICov
Ci0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0Uo
ZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KLSNl
bmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBh
Ym91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJ
RChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoaSkK
LSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYgISBk
ZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIgaW52
b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8K
LQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQot
IyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9h
bGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1
ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxp
ZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBl
bGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAg
ZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVk
IF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVm
aW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBl
bmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0Mn
cyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0
cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFD
S19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBn
dWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ug
c2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkK
LSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdo
dGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFs
bG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0j
IGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFD
S19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAo
ZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAmJiAh
ICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRl
ZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAot
IyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZ
WU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFs
bG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMg
ICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQg
X1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQg
ZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVu
ZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8
IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZ
U1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKLQotLyogQSB0eXBlIHRo
YXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCi11bmlvbiB5
eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gICAgWVlM
VFlQRSB5eWxzOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4g
b25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQ
X01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBh
biBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAg
IE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikg
KiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlM
VFlQRSkpIFwKLSAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWElNVU0pCi0KLS8qIENvcHkgQ09V
TlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBk
bwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9f
R05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50
KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAo
KihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpICAg
ICAgXAotICAgICAgZG8gICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgXAotICAgICAgZm9yICh5eWkg
PSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcCi0gICAgICAgIChUbylbeXlpXSA9IChGcm9t
KVt5eWldOyAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgXAotICAgICAgd2hpbGUg
KFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBp
dHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMg
WVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAg
IGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24g
b2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxv
Y2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxP
Q0FURShTdGFjaykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICBc
Ci0gICAgU3RhY2sgPSAmeXlwdHItPlN0YWNrOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
eXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBf
TUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAg
ICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlmCi0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVt
YmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDIKLS8q
IFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAy
NDcKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZ
WU5UT0tFTlMgIDQ3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0j
ZGVmaW5lIFlZTk5UUyAgMTIKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0j
ZGVmaW5lIFlZTlJVTEVTICA2MgotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICov
Ci0jZGVmaW5lIFlZTlNUQVRFUyAgOTEKLQotLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29u
IHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5E
RUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjc2Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUo
WVlYKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9
IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0vKiBZWVRSQU5T
TEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0gICAg
ICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKLSAgICAgIDIyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICA0MywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMzcsICAgIDQwLCAg
ICAgMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDMzLCAgICAyNSwgICAgMzQsICAgIDMy
LCAgICAzNSwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICA0NCwgICAgNDUsCi0gICAgICAyOCwgICAgNDIs
ICAgIDI5LCAgICA0NiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgMjYsICAgICAy
LCAgICAyNywgICAgMzgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAz
MCwgICAgMzksICAgIDMxLCAgICA0MSwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0g
ICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQotfTsKLQot
I2lmIFlZREVCVUcKLS8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3lt
Ym9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXByaHNbXSA9Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNCwg
ICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE2LCAgICAxOSwKLSAgICAgIDIzLCAgICAz
MCwgICAgMzQsICAgIDM4LCAgICA0MiwgICAgNDYsICAgIDUwLCAgICA1MywgICAgNTYsICAgIDU5
LAotICAgICAgNjIsICAgIDY1LCAgICA2OCwgICAgNzEsICAgIDcyLCAgICA3NCwgICAgNzUsICAg
IDc3LCAgICA4MSwgICAgODMsCi0gICAgICA4NiwgICAgODgsICAgIDkxLCAgICA5NCwgICAgOTks
ICAgMTAxLCAgIDEwMywgICAxMDUsICAgMTA3LCAgIDEwOSwKLSAgICAgMTExLCAgIDExMywgICAx
MTUsICAgMTE3LCAgIDExOSwgICAxMjEsICAgMTIzLCAgIDEyNSwgICAxMjcsICAgMTI5LAotICAg
ICAxMzEsICAgMTMzLCAgIDEzNSwgICAxMzcsICAgMTM5LCAgIDE0MSwgICAxNDMsICAgMTQ1LCAg
IDE0NywgICAxNDksCi0gICAgIDE1MSwgICAxNTMsICAgMTU1Ci19OwotCi0vKiBZWVJIUyAtLSBB
IGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgNDgsICAgICAwLCAgICAtMSwgICAgLTEs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTEsCi0gICAgICAtMSwgICAg
MjIsICAgIC0xLCAgICA1NSwgICAgMjIsICAgIC0xLCAgICAgMywgICAgMjIsICAgIC0xLCAgICAx
NywKLSAgICAgIDUyLCAgICAyMiwgICAgLTEsICAgIDE4LCAgICAyMywgICAgNTMsICAgIDI0LCAg
ICA1MiwgICAgMjIsICAgIC0xLAotICAgICAgIDQsICAgIDIxLCAgICAyMiwgICAgLTEsICAgICA1
LCAgICA1NCwgICAgMjIsICAgIC0xLCAgICAgNiwgICAgMjEsCi0gICAgICAyMiwgICAgLTEsICAg
ICA3LCAgICAyMSwgICAgMjIsICAgIC0xLCAgICAgOSwgICAgNTQsICAgIDIyLCAgICAtMSwKLSAg
ICAgICA4LCAgICAyMiwgICAgLTEsICAgIDEwLCAgICAyMiwgICAgLTEsICAgIDEyLCAgICAyMiwg
ICAgLTEsICAgIDEzLAotICAgICAgMjIsICAgIC0xLCAgICAxNCwgICAgMjIsICAgIC0xLCAgICAx
NSwgICAgMjIsICAgIC0xLCAgICAxNiwgICAgMjIsCi0gICAgICAtMSwgICAgLTEsICAgIDU1LCAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgNTMsICAgIDI1LCAgICAyMSwKLSAgICAgIC0x
LCAgICA1NiwgICAgLTEsICAgIDU0LCAgICA1NiwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNTUs
ICAgIDU3LAotICAgICAgLTEsICAgIDExLCAgICAyMSwgICAgLTEsICAgIDExLCAgICAyMywgICAg
MjEsICAgIDI0LCAgICAtMSwgICAgNTcsCi0gICAgICAtMSwgICAgNTgsICAgIC0xLCAgICAxOSwg
ICAgLTEsICAgIDIwLCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyNiwKLSAgICAgIC0xLCAgICAy
NywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0
LAotICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAg
IDMzLCAgICAtMSwgICAgMzQsCi0gICAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICAzOSwKLSAgICAgIC0xLCAgICA0MCwgICAg
LTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsICAgIDQ0LAotICAg
ICAgLTEsICAgIDQ1LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICA0NiwgICAgLTEKLX07Ci0KLS8q
IFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRl
ZmluZWQuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAg
ICAgIDAsICAgIDYzLCAgICA2MywgICAgNjUsICAgIDY5LCAgICA3MCwgICAgNzQsICAgIDc1LCAg
ICA4NCwgICAgODUsCi0gICAgICA4OCwgICAgOTEsICAgIDk0LCAgICA5NywgICAxMDAsICAgMTAz
LCAgIDEwNSwgICAxMDcsICAgMTEwLCAgIDExMSwKLSAgICAgMTEyLCAgIDExMywgICAxMTQsICAg
MTE4LCAgIDExOSwgICAxMjIsICAgMTIzLCAgIDEyNywgICAxMzMsICAgMTM3LAotICAgICAxNDQs
ICAgMTQ4LCAgIDE1NSwgICAxNTcsICAgMTU5LCAgIDE2MywgICAxNjYsICAgMTY5LCAgIDE3Miwg
ICAxNzgsCi0gICAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4
NSwgICAxODYsICAgMTg3LCAgIDE4OCwKLSAgICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAg
IDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTcsICAgMTk4LAotICAgICAxOTksICAgMjAw
LCAgIDIwMQotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwg
WVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0
aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3Rh
cnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIg
KmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAi
SEFTSCIsICJIQVNIX1VOREVGIiwgIkhBU0hfSUYiLAotICAiSEFTSF9JRkRFRiIsICJIQVNIX0lG
TkRFRiIsICJIQVNIX0VMU0UiLCAiSEFTSF9FTElGIiwgIkhBU0hfRU5ESUYiLAotICAiREVGSU5F
RCIsICJIQVNIX0VSUk9SIiwgIkhBU0hfUFJBR01BIiwgIkhBU0hfRVhURU5TSU9OIiwgIkhBU0hf
VkVSU0lPTiIsCi0gICJIQVNIX0xJTkUiLCAiSEFTSF9ERUZJTkVfT0JKIiwgIkhBU0hfREVGSU5F
X0ZVTkMiLCAiSU5UX0NPTlNUQU5UIiwKLSAgIkZMT0FUX0NPTlNUQU5UIiwgIklERU5USUZJRVIi
LCAiJ1xcbiciLCAiJygnIiwgIicpJyIsICInLCciLCAiJ1snIiwKLSAgIiddJyIsICInPCciLCAi
Jz4nIiwgIid7JyIsICInfSciLCAiJy4nIiwgIicrJyIsICInLSciLCAiJy8nIiwgIicqJyIsCi0g
ICInJSciLCAiJ14nIiwgIid8JyIsICInJiciLCAiJ34nIiwgIic9JyIsICInISciLCAiJzonIiwg
Iic7JyIsICInPyciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJsaW5lIiwgInRleHRfbGluZSIs
ICJjb250cm9sX2xpbmUiLAotICAicmVwbGFjZW1lbnRfbGlzdCIsICJwYXJhbWV0ZXJfbGlzdCIs
ICJjb25kaXRpb25hbF9saXN0IiwgInRva2VuX2xpc3QiLAotICAiY29uZGl0aW9uYWxfdG9rZW4i
LCAidG9rZW4iLCAib3BlcmF0b3IiLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAot
LyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9u
ZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5
LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCi0gICAgIDI2NSwgICAyNjYsICAg
MjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKLSAg
ICAgMjc1LCAgIDI3NiwgICAgMTAsICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDkxLCAgICA5Mywg
ICAgNjAsICAgIDYyLAotICAgICAxMjMsICAgMTI1LCAgICA0NiwgICAgNDMsICAgIDQ1LCAgICA0
NywgICAgNDIsICAgIDM3LCAgICA5NCwgICAxMjQsCi0gICAgICAzOCwgICAxMjYsICAgIDYxLCAg
ICAzMywgICAgNTgsICAgIDU5LCAgICA2MwotfTsKLSMgZW5kaWYKLQotLyogWVlSMVtZWU5dIC0t
IFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAgNDcsICAgIDQ4
LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwKLSAgICAg
IDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAg
NTEsICAgIDUxLAotICAgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1Mywg
ICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTQsCi0gICAgICA1NSwgICAgNTUsICAgIDU2LCAgICA1
NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwKLSAgICAgIDU4LCAg
ICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAg
IDU4LAotICAgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgsICAgIDU4LCAgICA1OCwgICAgNTgs
ICAgIDU4LCAgICA1OCwgICAgNTgsCi0gICAgICA1OCwgICAgNTgsICAgIDU4Ci19OwotCi0vKiBZ
WVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBv
ZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0g
ICAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIs
ICAgICAyLCAgICAgMywKLSAgICAgICA2LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDAsICAgICAxLCAgICAgMCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsCi0gICAgICAg
MSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAg
IDEsICAgICAxCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUg
dG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24n
dCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhlIGRlZmF1
bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtd
ID0KLXsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMjMsICAgICAwLCAgICAzNiwgICAgMzcsCi0gICAgICAzOCwgICAgIDYs
ICAgIDQzLCAgICA0NCwgICAgNjEsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0NSwK
LSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1
MywgICAgNTQsICAgIDU1LAotICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDAsCi0gICAgICAzMCwgICAgMzUsICAgICA4
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyOCwgICAgMzQsICAgICAwLCAgICAgMCwKLSAgICAg
IDE2LCAgICAgMCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgIDI0LAotICAgICAgMjUsICAgICA3LCAgICAzMSwgICAgMTEsICAgIDMyLCAgICAgMCwg
ICAgMTIsICAgIDI5LCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgIDksICAgIDI2LCAgICAg
MCwgICAgIDAsICAgIDIzLCAgICAgMCwgICAgMzMsICAgICAwLCAgICAyNywKLSAgICAgIDEwCi19
OwotCi0vKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDggeXlkZWZnb3RvW10gPQotewotICAgICAgLTEsICAgICAxLCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA2OCwgICAgODMsICAgIDU1LCAgICA2OSwgICAgNTYsCi0gICAgICA1NywgICAgNTEKLX07
Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRp
b24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTU1
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgLTU1LCAgICA3
MywgICAtNTUsICAgLTE3LCAgIC0xOCwgICAxNDUsICAgLTEwLCAgICAtOSwgICAtMTYsICAgMTQ1
LAotICAgICAgLTgsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNywgICAyMDEsICAg
IDI4LCAgIC01NSwgICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUs
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwKLSAgICAgLTU1LCAgIC01NSwgICAt
NTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LAotICAg
ICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAg
IC01NSwgICAxNzMsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzMCwgICAtMTksICAgIC0z
LCAgIC01NSwgICAtNTUsICAgIDMxLCAgICAzMiwKLSAgICAgLTU1LCAgIDEwOSwgICAtNTUsICAg
LTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAgMzMsICAgMjAxLAotICAgICAgMjks
ICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTU1LCAgICAzNSwgICAtNTUsICAgLTU1LCAgIC01NSwg
ICAtNTUsCi0gICAgIC01NSwgICAtNTUsICAgLTU1LCAgIC0xNSwgICAtMTEsICAgMjAxLCAgICAz
NiwgICAtNTUsICAgIDM3LCAgIC01NSwKLSAgICAgLTU1Ci19OwotCi0vKiBZWVBHT1RPW05URVJN
LU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAg
IC01NSwgICAtNTUsICAgLTU1LCAgIC01NSwgICAtNTUsICAgLTI3LCAgIC01NSwgICAgNTEsICAg
IDYwLCAgIC01NCwKLSAgICAgIC0xLCAgIC01NQotfTsKLQotLyogWVlUQUJMRVtZWVBBQ1RbU1RB
VEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCi0gICBwb3NpdGl2
ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gK
LSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNh
eXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5lIFlZVEFC
TEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQotewotICAg
ICAgNTAsICAgIDc3LCAgICA3NCwgICAgNTMsICAgIDc1LCAgICA1MiwgICAgNjAsICAgIDc3LCAg
ICA1NCwgICAgODUsCi0gICAgICA4NiwgICAgNTgsICAgIDU5LCAgICA4NywgICAgNjIsICAgIDUw
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA3NiwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsCi0gICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNjMsICAgIDY0LCAgICA2
NSwgICAgNjYsICAgIDcyLCAgICA2NywKLSAgICAgIDgyLCAgICA3MCwgICAgNzMsICAgIDc4LCAg
ICA3OSwgICAgODEsICAgIDg0LCAgICA4OSwgICAgODgsICAgIDkwLAotICAgICAgNjEsICAgIDQ5
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3MiwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICA1MCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAotICAgICAgNTQsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxOCwgICAgMTksCi0gICAgICAyMCwg
ICAgODAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNTQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyMywK
LSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLAotICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDcxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAg
MCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAg
IDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1Ci19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAg
ICAgICAxLCAgICA1NSwgICAgMjEsICAgIDIxLCAgICAyMywgICAgMjIsICAgIDIyLCAgICA2MSwg
ICAgMTEsICAgIDI0LAotICAgICAgMjUsICAgIDIxLCAgICAyMSwgICAgMjQsICAgIDIyLCAgICAx
NiwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDIyLCAgICAyMiwgICAg
MjIsICAgIDIyLCAgICA0OSwgICAgMjIsCi0gICAgICAyMSwgICAgMjMsICAgIDIyLCAgICAyMiwg
ICAgMjIsICAgIDIyLCAgICAyMSwgICAgMjEsICAgIDg1LCAgICAyMiwKLSAgICAgICA5LCAgICAg
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjksICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgODUs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKLSAgICAgIDExLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTksICAgIDIwLAotICAgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAz
NywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDExLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAyMywgICAgMjQs
Ci0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAg
LTEsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAg
ICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NgotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1i
ZXIgb2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgNDgs
ICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwK
LSAgICAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDU1LAotICAgICAgNTcsICAgIDU4LCAgICAyMiwgICAgMjEsICAgIDExLCAgICA1NCwg
ICAgNTYsICAgIDU3LCAgICAyMSwgICAgMjEsCi0gICAgICAyMiwgICAgNTQsICAgIDIyLCAgICAy
MiwgICAgMjIsICAgIDIyLCAgICAyMiwgICAgMjIsICAgIDUyLCAgICA1NSwKLSAgICAgIDIzLCAg
ICAyMiwgICAgNTcsICAgIDIyLCAgICAyMSwgICAgMjMsICAgIDIyLCAgICA1NiwgICAgMjIsICAg
IDIyLAotICAgICAgMjIsICAgIDIyLCAgICAyMSwgICAgNTMsICAgIDIxLCAgICAyNCwgICAgMjUs
ICAgIDI0LCAgICA1MiwgICAgMjEsCi0gICAgICAyMgotfTsKLQotI2RlZmluZSB5eWVycm9rICAg
ICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBU
WSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNk
ZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBn
b3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCi0KLQot
LyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVy
ZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5p
bmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxh
bnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwgICAgICBn
b3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQot
Ci0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICBcCi1kbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYm
IHl5bGVuID09IDEpICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXl0
b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOyAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9Q
U1RBQ0sgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWVycm9yICgmeXlsbG9jLCBjb250
ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJS
T1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUiAgICAx
Ci0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgotCi0KLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBD
VVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgotICAgSWYgTiBpcyAwLCB0aGVu
IHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCi0gICB0aGUgcHJl
dmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCi0KLSNkZWZpbmUgWVlS
SFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZTExPQ19ERUZBVUxUCi0jIGRlZmlu
ZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgIFwKLSAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoWVlJRCAoTikp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJz
dF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOyAgICBcCi0gICAgICAoQ3Vy
cmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1uOyAgXAot
ICAgICAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGlu
ZTsgICAgIFwKLSAgICAgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2NvbHVtbjsgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9
IChDdXJyZW50KS5sYXN0X2xpbmUgICA9ICAgICAgXAotICAgICAgICBZWVJIU0xPQyAoUmhzLCAw
KS5sYXN0X2xpbmU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIChDdXJyZW50KS5maXJzdF9jb2x1
bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPSAgICAgIFwKLSAgICAgICAgWVlSSFNMT0MgKFJo
cywgMCkubGFzdF9jb2x1bW47ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlf
TE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBU
aGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Ug
a25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9j
YXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZ
TFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykg
ICAgICAgICAgXAotICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLCAgICAgICAgICBc
Ci0gICAgICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLCBcCi0gICAg
ICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMgIGRl
ZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYKLSNl
bmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1
bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgm
eXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxl
eCAoJnl5bHZhbCwgJnl5bGxvYykKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJl
cXVlc3RlZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1
ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmlu
ZSBZWUZQUklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykg
ICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1
ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwK
LX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5
cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlIChZWUlEICgw
KSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlz
IHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0
LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFlZTFRZUEUgY29u
c3QgKiBjb25zdCB5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3Rh
dGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1
ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5
eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIFlZTFRZUEUg
Y29uc3QgKiBjb25zdCB5eWxvY2F0aW9ucDsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJldHVybjsKLSAgWVlVU0UgKHl5bG9jYXRp
b25wKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUg
PCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5
eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNo
ICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1i
b2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot
Ci0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQK
LXl5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcCwgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wLCBw
cDo6Q29udGV4dCogY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50
ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAsIGNvbnRleHQpCi0gICAg
RklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29u
c3QgeXl2YWx1ZXA7Ci0gICAgWVlMVFlQRSBjb25zdCAqIGNvbnN0IHl5bG9jYXRpb25wOwotICAg
IHBwOjpDb250ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5eXR5cGUgPCBZWU5UT0tF
TlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlw
ZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRu
YW1lW3l5dHlwZV0pOwotCi0gIFlZX0xPQ0FUSU9OX1BSSU5UICh5eW91dHB1dCwgKnl5bG9jYXRp
b25wKTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIjogIik7Ci0gIHl5X3N5bWJvbF92YWx1ZV9w
cmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLCBjb250ZXh0KTsK
LSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0
YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8g
aXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlw
ZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAot
eXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwot
ICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAi
U3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxu
Iik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAg
ICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRl
YnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90
dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBv
cnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJp
bnQgKFlZU1RZUEUgKnl5dnNwLCBZWUxUWVBFICp5eWxzcCwgaW50IHl5cnVsZSwgcHA6OkNvbnRl
eHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoeXl2c3As
IHl5bHNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgWVlMVFlQ
RSAqeXlsc3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBwcDo6Q29udGV4dCogY29udGV4dDsKLSNl
bmRpZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNp
Z25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRl
cnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotICAgICAgICAg
eXlydWxlIC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8K
LSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmlu
dGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50
IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYo
eXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5
eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKSAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAg
ICAgICAgICAgICBcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNv
bnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBw
YXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBs
ZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVC
VUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5U
KFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChC
b3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZ
WURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJz
ZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQ
VEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNr
cyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBl
eHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRv
byBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19N
QVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGlu
ZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFY
REVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVS
Uk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19f
ICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxz
ZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0
IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQot
ICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBm
b3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICBy
ZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQot
IyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBf
R05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkg
WVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5n
ICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3Qg
Y2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlz
cmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17
Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAg
d2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0
dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIK
LS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBh
d2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mg
c3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1x
dW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBh
cG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFz
aC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMK
LSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0
IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5
dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3Ry
ID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25z
dCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0g
ICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBk
b19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5
eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAg
IC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMp
Ci0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5
eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KLSAgICBkb19u
b3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5
eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5
cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2Fn
ZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZ
U1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcg
dGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAot
ICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdv
dWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3Jk
aW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVf
TUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAg
Ki8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQg
eXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQot
ICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJu
IDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hh
cik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlw
ZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5
c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVS
Uk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdb
WVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAK
LSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1h
dHMgdGhhdCBhcmUKLSAgICAgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAg
WVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAl
cyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0
ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3Rp
bmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10g
PSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotICAg
ICAgICAgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0gICAgICAgICAgICArICgoWVlFUlJP
Ul9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0gICAgICAgICAgICAgICAqIChzaXplb2YgeXlv
ciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0g
ICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBp
bmRleGVzIGluCi0gICAgIFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwg
MCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNo
ZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXlu
ICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVj
a2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdb
MF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwg
eXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5k
OyArK3l5eCkKLSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlU
RVJST1IpCi0gICAgICB7Ci0gICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU0pCi0gICAgICAgICAgewotICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAg
eXlzaXplID0geXlzaXplMDsKLSAgICAgICAgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAt
IDFdID0gJ1wwJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB5eWFyZ1t5
eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0
bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotICAgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5
c2l6ZTEgPCB5eXNpemUpOwotICAgICAgICB5eXNpemUgPSB5eXNpemUxOwotICAgICAgICB5eWZt
dCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotICAgICAgICB5eXByZWZpeCA9IHl5b3I7
Ci0gICAgICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0g
eXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6
ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6
ZV9vdmVyZmxvdykKLSAgICByZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJl
c3VsdCkKLSAgICB7Ci0gICAgICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBv
biB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0gICAgICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBi
ZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgcHJvZHVjZWQgYSBzdHJp
bmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLSAgICAgIGNoYXIgKnl5cCA9
IHl5cmVzdWx0OwotICAgICAgaW50IHl5aSA9IDA7Ci0gICAgICB3aGlsZSAoKCp5eXAgPSAqeXlm
KSAhPSAnXDAnKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5Zlsx
XSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5
eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLSAgICAgICAgICB5eWYgKz0gMjsKLSAgICAg
ICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAg
ICAgIHl5ZisrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICByZXR1cm4geXlz
aXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0
aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0
cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBZ
WUxUWVBFICp5eWxvY2F0aW9ucCwgcHA6OkNvbnRleHQqIGNvbnRleHQpCi0jZWxzZQotc3RhdGlj
IHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwg
Y29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZ
U1RZUEUgKnl5dmFsdWVwOwotICAgIFlZTFRZUEUgKnl5bG9jYXRpb25wOwotICAgIHBwOjpDb250
ZXh0KiBjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7Ci0gIFlZVVNFICh5
eWxvY2F0aW9ucCk7Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5
bXNnID0gIkRlbGV0aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZh
bHVlcCwgeXlsb2NhdGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAg
ZGVmYXVsdDoKLSAgICBicmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3Mg
ZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0j
aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAo
dm9pZCAqWVlQQVJTRV9QQVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNl
bHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cwotaW50IHl5cGFyc2UgKHBwOjpDb250ZXh0KiBjb250ZXh0KTsKLSNlbHNl
Ci1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwot
Ci0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAgfAotYC0tLS0tLS0tLS0qLwot
Ci0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKLSNlbHNlCi1pbnQK
LXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQQVJTRV9QQVJBTTsKLSNlbmRp
ZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBk
ZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChwcDo6Q29udGV4dCogY29udGV4dCkKLSNl
bHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgcHA6OkNvbnRleHQqIGNvbnRleHQ7Ci0j
ZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5
Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4g
ICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFy
LiAgKi8KLWludCB5eW5lcnJzOwotLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2stYWhlYWQg
c3ltYm9sLiAgKi8KLVlZTFRZUEUgeXlsbG9jOwotCi0gIGludCB5eXN0YXRlOwotICBpbnQgeXlu
OwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3Jl
IGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExv
b2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4g
ICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVy
IGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIg
eXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXlt
c2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYKLQotICAvKiBUaHJlZSBzdGFja3Mg
YW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBg
eXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQg
dG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBw
b2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxz
ZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYg
eXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0
eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwot
ICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwot
ICBZWVNUWVBFICp5eXZzcDsKLQotICAvKiBUaGUgbG9jYXRpb24gc3RhY2suICAqLwotICBZWUxU
WVBFIHl5bHNhW1lZSU5JVERFUFRIXTsKLSAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOwotICBZWUxU
WVBFICp5eWxzcDsKLSAgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBh
bmQgZW5kZWQuICAqLwotICBZWUxUWVBFIHl5ZXJyb3JfcmFuZ2VbMl07Ci0KLSNkZWZpbmUgWVlQ
T1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSwgeXlsc3AgLT0gKE4pKQot
Ci0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlh
YmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUK
LSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLSAgWVlMVFlQRSB5
eWxvYzsKLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVk
dWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBv
cHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3Rh
cnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwot
ICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsgICAgIC8qIENhdXNlIGEgdG9rZW4g
dG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KLSAgICAg
V2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCi0gICAgIHNvIHRo
YXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KLSAgICAg
VGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCi0gIHl5c3Nw
ID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotICB5eWxzcCA9IHl5bHM7Ci0jaWYgWVlMVFlQRV9J
U19UUklWSUFMCi0gIC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3JlIHBh
cnNpbmcgc3RhcnRzLiAgKi8KLSAgeXlsbG9jLmZpcnN0X2xpbmUgICA9IHl5bGxvYy5sYXN0X2xp
bmUgICA9IDE7Ci0gIHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5eWxsb2MubGFzdF9jb2x1bW4gPSAw
OwotI2VuZGlmCi0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAt
LSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhl
IHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAg
U28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7
Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlz
dGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1
c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlT
SVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAg
ICAgIHsKLSAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2su
ICBVc2UgY29waWVzIG9mCi0gICAgICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNl
IHRoZSByZWFsIG9uZXMgaW50bwotICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2
czEgPSB5eXZzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUg
Knl5bHMxID0geXlsczsKLQotICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZv
bGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3Rh
Y2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91
bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5k
ZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlf
KCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVv
ZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3Ap
LAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAg
ICAgICAmeXlzdGFja3NpemUpOwotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7
Ci0gICAgeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwot
IyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMg
ZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCi0gICAgICBp
ZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwot
ICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3Np
emUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0gICAgeXl0eXBl
X2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIgPQotICAgICAg
KHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3Np
emUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAg
WVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0g
ICAgWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0g
ICAgaWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAg
ICB9Ci0jIGVuZGlmCi0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9
IHl5c3MgKyB5eXNpemUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLSAg
ICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7Ci0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQg
bG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUg
LSAxIDw9IHl5c3NwKQotICAgIFlZQUJPUlQ7Ci0gICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7Ci0KLSAgZ290byB5eWJhY2t1cDsK
LQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNr
dXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBz
dGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBk
b24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdo
YXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCi0gIHl5
biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKLSAgICBnb3Rv
IHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBp
ZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZ
RU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCi0gIGlmICh5
eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFk
aW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9IFlZTEVYOwotICAgIH0KLQotICBpZiAo
eXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsK
LSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0g
ICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIp
OwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVp
bmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KLSAgICAgZGV0ZWN0IGFuIGVycm9y
LCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAw
IHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKLSAgICBnb3RvIHl5
ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwotICBpZiAoeXluIDw9IDApCi0gICAgewot
ICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCi0gICAgZ290byB5eWVy
cmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVkdWNlOwotICAgIH0KLQot
ICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgLyogQ291bnQgdG9rZW5z
IHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgotICAgICBz
dGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAgeXllcnJzdGF0dXMtLTsKLQotICAv
KiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNo
aWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0KLSAgLyogRGlzY2FyZCB0aGUg
c2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVP
RikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gICorK3l5dnNw
ID0geXlsdmFsOwotICAqKyt5eWxzcCA9IHl5bGxvYzsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJy
ZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0
ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNl
OwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERv
IGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVk
dWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAq
LwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBs
ZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgot
Ci0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFn
ZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVz
ZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVu
Y29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9p
ZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6
ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0gIC8qIERlZmF1bHQgbG9jYXRp
b24uICAqLwotICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4p
OwotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAoeXluKQotICAgIHsKLSAgICAg
ICAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAvLyBUT0RPKGFsb2twKTogRXhwYW5kIG1hY3Jv
cy4KLSAgICAgICAgcHA6OlRva2VuVmVjdG9yKiBvdXQgPSBjb250ZXh0LT5vdXRwdXQoKTsKLSAg
ICAgICAgb3V0LT5pbnNlcnQob3V0LT5lbmQoKSwgKHl5dnNwWygxKSAtICgyKV0udGxpc3QpLT5i
ZWdpbigpLCAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCktPmVuZCgpKTsKLSAgICAgICAgZGVsZXRl
ICh5eXZzcFsoMSkgLSAoMildLnRsaXN0KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
OToKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5bHNwWygxKSAtICgz
KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVPYmosICh5eXZzcFsoMSkgLSAoMyldLnN2
YWwpLCBOVUxMLCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgY29udGV4dC0+ZGVmaW5lTWFjcm8oKHl5
bHNwWygxKSAtICg2KV0pLmZpcnN0X2xpbmUsIHBwOjpNYWNybzo6a1R5cGVGdW5jLCAoeXl2c3Bb
KDEpIC0gKDYpXS5zdmFsKSwgKHl5dnNwWygzKSAtICg2KV0udGxpc3QpLCAoeXl2c3BbKDUpIC0g
KDYpXS50bGlzdCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsK
LSAgICAgICAgY29udGV4dC0+dW5kZWZpbmVNYWNybygoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICBwdXNo
Q29uZGl0aW9uYWxCbG9jayhjb250ZXh0LCAoeXl2c3BbKDIpIC0gKDMpXS50bGlzdCkgPyB0cnVl
IDogZmFsc2UpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMzoKLQotICAgIHsKLSAg
ICAgICAgcHVzaENvbmRpdGlvbmFsQmxvY2soY29udGV4dCwgY29udGV4dC0+aXNNYWNyb0RlZmlu
ZWQoKHl5dnNwWygyKSAtICgzKV0uc3ZhbCkpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTQ6Ci0KLSAgICB7Ci0gICAgICAgIHB1c2hDb25kaXRpb25hbEJsb2NrKGNvbnRleHQsICFj
b250ZXh0LT5pc01hY3JvRGVmaW5lZCgoeXl2c3BbKDIpIC0gKDMpXS5zdmFsKSkpOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3Ogot
Ci0gICAgewotICAgICAgICBwb3BDb25kaXRpb25hbEJsb2NrKGNvbnRleHQpOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7IDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsgKHl5dmFsLnRsaXN0KSA9IE5VTEw7
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRs
aXN0KSA9IG5ldyBwcDo6VG9rZW5WZWN0b3I7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1c2hf
YmFjayhuZXcgcHA6OlRva2VuKCh5eWxzcFsoMSkgLSAoMSldKS5maXJzdF9saW5lLCBJREVOVElG
SUVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdmFsKSkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnRsaXN0KSA9ICh5eXZzcFsoMSkgLSAo
MyldLnRsaXN0KTsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKG5ldyBwcDo6VG9r
ZW4oKHl5bHNwWygzKSAtICgzKV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMykg
LSAoMyldLnN2YWwpKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI4OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tlblZlY3RvcjsKLSAgICAgICAg
KHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLnR2YWwpKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50bGlz
dCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAgICh5eXZhbC50bGlzdCktPnB1
c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDMwOgotCi0gICAgewotICAgICAgICAoeXl2YWwudGxpc3QpID0gbmV3IHBwOjpUb2tl
blZlY3RvcjsKLSAgICAgICAgKHl5dmFsLnRsaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAo
MSldLnR2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbC50bGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50bGlzdCk7Ci0gICAgICAg
ICh5eXZhbC50bGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDIpIC0gKDIpXS50dmFsKSk7Ci0gICAg
O30KLSAgICBicmVhazsKLQotICBjYXNlIDMyOgotCi0gICAgewotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAzMzoKLQotICAgIHsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzU6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygx
KSAtICgxKV0pLmZpcnN0X2xpbmUsICh5eXZzcFsoMSkgLSAoMSldLml2YWwpLCBOVUxMKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbC50
dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgxKV0pLmZpcnN0X2xpbmUsIElOVF9D
T05TVEFOVCwgKHl5dnNwWygxKSAtICgxKV0uc3ZhbCkpOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAzNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsLnR2YWwpID0gbmV3IHBwOjpUb2tl
bigoeXlsc3BbKDEpIC0gKDEpXSkuZmlyc3RfbGluZSwgRkxPQVRfQ09OU1RBTlQsICh5eXZzcFso
MSkgLSAoMSldLnN2YWwpKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzg6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbC50dmFsKSA9IG5ldyBwcDo6VG9rZW4oKHl5bHNwWygxKSAtICgx
KV0pLmZpcnN0X2xpbmUsIElERU5USUZJRVIsICh5eXZzcFsoMSkgLSAoMSldLnN2YWwpKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzk6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9ICdb
JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQwOgotCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
XSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0MToKLQotICAgIHsgKHl5dmFsLml2YWwpID0g
JzwnOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDI6Ci0KLSAgICB7ICh5eXZhbC5pdmFsKSA9
ICc+JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQzOgotCi0gICAgeyAoeXl2YWwuaXZhbCkg
PSAnKCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NDoKLQotICAgIHsgKHl5dmFsLml2YWwp
ID0gJyknOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDU6Ci0KLSAgICB7ICh5eXZhbC5pdmFs
KSA9ICd7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ2OgotCi0gICAgeyAoeXl2YWwuaXZh
bCkgPSAnfSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0NzoKLQotICAgIHsgKHl5dmFsLml2
YWwpID0gJy4nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDg6Ci0KLSAgICB7ICh5eXZhbC5p
dmFsKSA9ICcrJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ5OgotCi0gICAgeyAoeXl2YWwu
aXZhbCkgPSAnLSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MDoKLQotICAgIHsgKHl5dmFs
Lml2YWwpID0gJy8nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZh
bC5pdmFsKSA9ICcqJzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSAnJSc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1MzoKLQotICAgIHsgKHl5
dmFsLml2YWwpID0gJ14nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5
eXZhbC5pdmFsKSA9ICd8JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU1OgotCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSAnJic7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsg
KHl5dmFsLml2YWwpID0gJ34nOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU4OgotCi0gICAg
eyAoeXl2YWwuaXZhbCkgPSAnISc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OToKLQotICAg
IHsgKHl5dmFsLml2YWwpID0gJzonOyA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjA6Ci0KLSAg
ICB7ICh5eXZhbC5pdmFsKSA9ICc7JzsgO30KLSAgICBicmVhazsKLQotICBjYXNlIDYxOgotCi0g
ICAgeyAoeXl2YWwuaXZhbCkgPSAnLCc7IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2MjoKLQot
ICAgIHsgKHl5dmFsLml2YWwpID0gJz8nOyA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2
NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZ
TUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZ
WVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3Ms
IHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotICAqKyt5eWxzcCA9IHl5bG9jOwotCi0g
IC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3
aGF0IHN0YXRlCi0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBl
ZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAg
eXluID0geXlyMVt5eW5dOwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10g
KyAqeXlzc3A7Ci0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXlj
aGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07
Ci0gIGVsc2UKLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAg
Z290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxy
ZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAg
aWYgKCF5eWVycnN0YXR1cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9S
X1ZFUkJPU0UKLSAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVy
cm9yIikpOwotI2Vsc2UKLSAgICAgIHsKLSAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9l
cnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKLSAgICBpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUg
JiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCi0gICAgICB7Ci0gICAgICAg
IFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotICAgICAgICBpZiAoISAoeXlzaXplIDw9
IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAgICAg
IHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICAgIGlmICh5eW1zZyAhPSB5
eW1zZ2J1ZikKLSAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSAgICAgICAgeXltc2cg
PSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLSAgICAgICAgaWYgKHl5bXNnKQot
ICAgICAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLSAgICAgICAgZWxzZQotICAgICAgICAg
IHsKLSAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgeXltc2dfYWxsb2MgPSBzaXpl
b2YgeXltc2didWY7Ci0gICAgICAgICAgfQotICAgICAgfQotCi0gICAgaWYgKDAgPCB5eXNpemUg
JiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQotICAgICAgewotICAgICAgICAodm9pZCkgeXlzeW50
YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOwotICAgICAgICB5eWVycm9yICgmeXls
bG9jLCBjb250ZXh0LCB5eW1zZyk7Ci0gICAgICB9Ci0gICAgZWxzZQotICAgICAgewotICAgICAg
ICB5eWVycm9yICgmeXlsbG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLSAgICAg
ICAgaWYgKHl5c2l6ZSAhPSAwKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAg
ICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgeXllcnJvcl9yYW5nZVswXSA9IHl5bGxv
YzsKLQotICBpZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRy
aWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBl
cnJvciwgZGlzY2FyZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAg
ewotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAg
IGlmICh5eWNoYXIgPT0gWVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQotICAgICAgZWxz
ZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAg
ICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFy
ID0gWVlFTVBUWTsKLSAgICB9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2Ug
bG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAq
LwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhw
bGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxl
cnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJP
UiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNl
cgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVy
cm9ybGFiOwotCi0gIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxzcFsxLXl5bGVuXTsKLSAgLyogRG8g
bm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJl
ZAotICAgICB0aGlzIFlZRVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVu
ID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNz
cDsKLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9u
IGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXll
cnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBk
ZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgeXluID0geXlw
YWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKLSAgICB7Ci0gICAg
ICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5
eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBp
dCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0g
eXlzcykKLSAgICBZWUFCT1JUOwotCi0gICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwot
ICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlz
dGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAg
ICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisr
eXl2c3AgPSB5eWx2YWw7Ci0KLSAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKLSAgLyogVXNp
bmcgWVlMTE9DIGlzIHRlbXB0aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgot
ICAgICB0aGUgbG9vay1haGVhZC4gIFlZTE9DIGlzIGF2YWlsYWJsZSB0aG91Z2guICAqLwotICBZ
WUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWVycm9yX3JhbmdlIC0gMSksIDIpOwotICAqKyt5eWxz
cCA9IHl5bG9jOwotCi0gIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJP
TF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlz
dGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVy
ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0
bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBo
ZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRs
YWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJm
bG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Ci18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4
aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJtZW1vcnkgZXho
YXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5k
aWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9IFlZRU1Q
VFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCi0g
ICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKLSAgLyogRG8gbm90
IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAot
ICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7
Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNz
KQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAg
ICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RB
Q0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVyZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkK
LSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2VuZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0g
IGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRp
ZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVz
dWx0KTsKLX0KLQotCi0KLQotCi12b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvY3AsIHBwOjpDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci19Ci0KLXZvaWQgcHVzaENvbmRp
dGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQsIGJvb2wgY29uZGl0aW9uKQotewotfQot
Ci12b2lkIHBvcENvbmRpdGlvbmFsQmxvY2socHA6OkNvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0K
LW5hbWVzcGFjZSBwcCB7Ci1ib29sIENvbnRleHQ6OnBhcnNlKCkKLXsKLSAgICB5eWRlYnVnID0g
MTsKLSAgICByZXR1cm4geXlwYXJzZSh0aGlzKSA9PSAwID8gdHJ1ZSA6IGZhbHNlOwotfQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdGFiLmgJKHJl
dmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX3RhYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBA
Ci0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KLQotLyogU2tl
bGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAg
Q29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQg
b3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3
b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsg
aXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9y
IGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFs
dGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2Vy
IHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0g
ICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRo
ZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwot
Ci0vKiBUb2tlbnMuICAqLwotI2lmbmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZ
UEUKLSAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBH
REIgYW5kIG90aGVyIGRlYnVnZ2VycwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVu
dW0geXl0b2tlbnR5cGUgewotICAgICBIQVNIID0gMjU4LAotICAgICBIQVNIX1VOREVGID0gMjU5
LAotICAgICBIQVNIX0lGID0gMjYwLAotICAgICBIQVNIX0lGREVGID0gMjYxLAotICAgICBIQVNI
X0lGTkRFRiA9IDI2MiwKLSAgICAgSEFTSF9FTFNFID0gMjYzLAotICAgICBIQVNIX0VMSUYgPSAy
NjQsCi0gICAgIEhBU0hfRU5ESUYgPSAyNjUsCi0gICAgIERFRklORUQgPSAyNjYsCi0gICAgIEhB
U0hfRVJST1IgPSAyNjcsCi0gICAgIEhBU0hfUFJBR01BID0gMjY4LAotICAgICBIQVNIX0VYVEVO
U0lPTiA9IDI2OSwKLSAgICAgSEFTSF9WRVJTSU9OID0gMjcwLAotICAgICBIQVNIX0xJTkUgPSAy
NzEsCi0gICAgIEhBU0hfREVGSU5FX09CSiA9IDI3MiwKLSAgICAgSEFTSF9ERUZJTkVfRlVOQyA9
IDI3MywKLSAgICAgSU5UX0NPTlNUQU5UID0gMjc0LAotICAgICBGTE9BVF9DT05TVEFOVCA9IDI3
NSwKLSAgICAgSURFTlRJRklFUiA9IDI3NgotICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8K
LSNkZWZpbmUgSEFTSCAyNTgKLSNkZWZpbmUgSEFTSF9VTkRFRiAyNTkKLSNkZWZpbmUgSEFTSF9J
RiAyNjAKLSNkZWZpbmUgSEFTSF9JRkRFRiAyNjEKLSNkZWZpbmUgSEFTSF9JRk5ERUYgMjYyCi0j
ZGVmaW5lIEhBU0hfRUxTRSAyNjMKLSNkZWZpbmUgSEFTSF9FTElGIDI2NAotI2RlZmluZSBIQVNI
X0VORElGIDI2NQotI2RlZmluZSBERUZJTkVEIDI2NgotI2RlZmluZSBIQVNIX0VSUk9SIDI2Nwot
I2RlZmluZSBIQVNIX1BSQUdNQSAyNjgKLSNkZWZpbmUgSEFTSF9FWFRFTlNJT04gMjY5Ci0jZGVm
aW5lIEhBU0hfVkVSU0lPTiAyNzAKLSNkZWZpbmUgSEFTSF9MSU5FIDI3MQotI2RlZmluZSBIQVNI
X0RFRklORV9PQkogMjcyCi0jZGVmaW5lIEhBU0hfREVGSU5FX0ZVTkMgMjczCi0jZGVmaW5lIElO
VF9DT05TVEFOVCAyNzQKLSNkZWZpbmUgRkxPQVRfQ09OU1RBTlQgMjc1Ci0jZGVmaW5lIElERU5U
SUZJRVIgMjc2Ci0KLQotCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlT
VFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KLXsKLSAgICBpbnQgaXZh
bDsKLSAgICBzdGQ6OnN0cmluZyogc3ZhbDsKLSAgICBwcDo6VG9rZW4qIHR2YWw7Ci0gICAgcHA6
OlRva2VuVmVjdG9yKiB0bGlzdDsKLX0KLS8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotCi0g
ICAgWVlTVFlQRTsKLSMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2ls
bCBiZSB3aXRoZHJhd24gKi8KLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZp
bmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotCi0KLQotI2lmICEgZGVmaW5lZCBZWUxU
WVBFICYmICEgZGVmaW5lZCBZWUxUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIHN0cnVjdCBZWUxU
WVBFCi17Ci0gIGludCBmaXJzdF9saW5lOwotICBpbnQgZmlyc3RfY29sdW1uOwotICBpbnQgbGFz
dF9saW5lOwotICBpbnQgbGFzdF9jb2x1bW47Ci19IFlZTFRZUEU7Ci0jIGRlZmluZSB5eWx0eXBl
IFlZTFRZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZ
WUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSMgZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZW5k
aWYKLQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9wcF91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9wcF91dGlscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRl
ZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNv
bnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBp
biB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5h
bWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikK
KworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcF91dGlscy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB0cnVl
CgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9q
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pgor
PFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9u
PSI5LjAwIgorCU5hbWU9InByZXByb2Nlc3NvciIKKwlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBG
QjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCisJUm9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29y
IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMi
CisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJ
CTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmls
ZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgor
CQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmln
dXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9
IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9v
bAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5p
dGlvbnM9IldJTjMyO19ERUJVRztfTElCIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJ
CUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQ
cmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJy
b3I9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCQlEaXNhYmxlU3Bl
Y2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJ
CU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5h
bWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGli
cmFyaWFuVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAor
CQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4
Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29s
IgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZp
Z3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9u
TmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJ
CVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0i
VkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9t
QnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9y
VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJh
dG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgor
CQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0i
MiIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJUHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgor
CQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVk
SGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iNCIKKwkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIK
KwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCURpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPSI0MTAwOzQxMjc7NDI0NCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdl
ZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2
ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJ
CS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJ
CQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNj
TWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+
CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9D
b25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJ
T3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQo
Q29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0
ZXJTZXQ9IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wi
CisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJ
CQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRv
b2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJ
PFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgor
CQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6
YXRpb249IjAiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElC
IgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIK
KwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJ
CQlXYXJuaW5nTGV2ZWw9IjQiCisJCQkJV2FybkFzRXJyb3I9InRydWUiCisJCQkJRGVidWdJbmZv
cm1hdGlvbkZvcm1hdD0iMyIKKwkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3
OzQyNDQ7NDI2Nzs0NzAyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVz
b3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNl
Q29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRU
b29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4K
KwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlO
YW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtl
VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJ
CTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZp
Z3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfHg2NCIKKwkJCU91
dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0
aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENv
bmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVy
U2V0PSIxIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFt
ZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERh
dGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNl
UHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9v
bCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUVuYWJsZUludHJp
bnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7
TkRFQlVHO19MSUIiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25M
ZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2Fy
bmluZ0xldmVsPSI0IgorCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ9IjMiCisJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0
OzQyNjciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRv
b2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkv
PgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wK
KwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJ
Lz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJ
CQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4K
Kwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8Rmls
ZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7
Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVy
PSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKKwkJCT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQ
YXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9r
ZW4uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XFRva2VuaXplci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRl
cgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2lu
Yzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1
RkJFNTJFQkZCfSIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0
aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
RGlyZWN0aXZlSGFuZGxlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVy
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBf
dXRpbHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxQcmVwcm9jZXNzb3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFs
U3R1ZGlvUHJvamVjdD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2oKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHRydWUKCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9zdGxfdXRpbHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9zdGxfdXRpbHMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvc3RsX3V0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHN0bF91dGlscy5o
OiBDb21tb24gU1RMIHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01NT05fU1RMVVRJTFNfSF8KLSNk
ZWZpbmUgQ09NTU9OX1NUTFVUSUxTX0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgRGVs
ZXRlCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkgKFQgeCkg
eyBkZWxldGUgeDsgfQotfTsKLQotc3RydWN0IERlbGV0ZVNlY29uZAotewotICAgIHRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIEI+Ci0gICAgdm9pZCBvcGVyYXRvcigpIChzdGQ6OnBhaXI8QSwgQj4m
IHgpIHsgZGVsZXRlIHguc2Vjb25kOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlm
IC8vIENPTU1PTl9TVExVVElMU19IXwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvdG9r
ZW5fdHlwZS5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy90b2tlbl90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1RPS0VOX1RZUEVfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
X1RZUEVfSF8KLQotI2luY2x1ZGUgInBwX3RhYi5oIgotCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9UT0tFTl9UWVBFX0hfCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9S
ZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFy
c2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuaCIKKyNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oIgorCitSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpSZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nKFRJbmZvU2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2luayhzaW5rKQor
ICAgICwgbU51bUVycm9ycygwKQoreworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBvbmx5IGlu
IGZyYWdtZW50IHNoYWRlcnMuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEKHMy
MTt2ZjI7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7
dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2ooczIxO3Zm
NDtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZShzQzE7dmYzO2Yx
OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBmb3VuZCBpbiBib3RoIHZlcnRleCBhbmQgZnJhZ21l
bnQgc2hhZGVycy4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkQoczIxO3ZmMjsi
KTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qKHMyMTt2ZjM7Iik7Cisg
ICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvaihzMjE7dmY0OyIpOworICAgIG1T
YW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlKHNDMTt2ZjM7Iik7CisgICAgLy8gU2FtcGxp
bmcgb3BzIHByb3ZpZGVkIGJ5IE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwuCisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEKDE7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFByb2ooMTt2ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZTJEUHJvaigxO3ZmNDsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlkZWQgYnkgQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3Qo
MTt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2
ZjM7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7
Iik7Cit9CisKKy8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1
dGlvbiB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgorLy8g
Y2FuIHZhcnkgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBhcmd1bWVudHMuIElmIHNv
LCB3ZSBzaG91bGQgcmVzdHJpY3QgdGhvc2UgYXMgd2VsbC4KK3ZvaWQgUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZzo6ZW5mb3JjZVJlc3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBo
JiBncmFwaCkKK3sKKyAgICBtTnVtRXJyb3JzID0gMDsKKworICAgIC8vIEZJWE1FKG12dWpvdmlj
KTogVGhlIGRlcGVuZGVuY3kgZ3JhcGggZG9lcyBub3Qgc3VwcG9ydCB1c2VyIGRlZmluZWQgZnVu
Y3Rpb24gY2FsbHMgcmlnaHQgbm93LAorICAgIC8vIHNvIHdlIGdlbmVyYXRlIGVycm9ycyBmb3Ig
dGhlbS4KKyAgICB2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNhZ2UoZ3JhcGgpOwor
CisgICAgLy8gU3RhcnRpbmcgZnJvbSBlYWNoIHNhbXBsZXIsIHRyYXZlcnNlIHRoZSBkZXBlbmRl
bmN5IGdyYXBoIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBlYWNoIHRpbWUgd2UKKyAgICAvLyBoaXQg
YSBub2RlIHdoZXJlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuCisg
ICAgZm9yIChUR3JhcGhTeW1ib2xWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5i
ZWdpblNhbXBsZXJTeW1ib2xzKCk7CisgICAgICAgICBpdGVyICE9IGdyYXBoLmVuZFNhbXBsZXJT
eW1ib2xzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhTeW1ib2wq
IHNhbXBsZXJTeW1ib2wgPSAqaXRlcjsKKyAgICAgICAgY2xlYXJWaXNpdGVkKCk7CisgICAgICAg
IHNhbXBsZXJTeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nOjp2YWxpZGF0ZVVzZXJEZWZpbmVkRnVuY3Rpb25DYWxsVXNh
Z2UoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpCit7CisgICAgZm9yIChURnVuY3Rpb25D
YWxsVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZ3JhcGguYmVnaW5Vc2VyRGVmaW5lZEZ1
bmN0aW9uQ2FsbHMoKTsKKyAgICAgICAgIGl0ZXIgIT0gZ3JhcGguZW5kVXNlckRlZmluZWRGdW5j
dGlvbkNhbGxzKCk7CisgICAgICAgICArK2l0ZXIpCisgICAgeworICAgICAgICBUR3JhcGhGdW5j
dGlvbkNhbGwqIGZ1bmN0aW9uQ2FsbCA9ICppdGVyOworICAgICAgICBiZWdpbkVycm9yKGZ1bmN0
aW9uQ2FsbC0+Z2V0SW50ZXJtRnVuY3Rpb25DYWxsKCkpOworICAgICAgICBtU2luayA8PCAiQSBj
YWxsIHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuXG4iOworICAg
IH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjpiZWdpbkVycm9yKGNv
bnN0IFRJbnRlcm1Ob2RlKiBub2RlKQoreworICAgICsrbU51bUVycm9yczsKKyAgICBtU2luay5w
cmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkp
OworfQorCitib29sIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OmlzU2FtcGxpbmdPcChj
b25zdCBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFpbnRlcm1GdW5jdGlvbkNhbGwtPmlzVXNlckRlZmluZWQoKSAmJgorICAgICAgICAg
ICBtU2FtcGxpbmdPcHMuZmluZChpbnRlcm1GdW5jdGlvbkNhbGwtPmdldE5hbWUoKSkgIT0gbVNh
bXBsaW5nT3BzLmVuZCgpOworfQorCit2b2lkIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6
OnZpc2l0QXJndW1lbnQoVEdyYXBoQXJndW1lbnQqIHBhcmFtZXRlcikKK3sKKyAgICAvLyBUZXh0
dXJlIGNhY2hlIGFjY2VzcyB0aW1lIG1pZ2h0IGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgor
ICAgIC8vIFRodXMsIHdlIHJlc3RyaWN0IHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyBmcm9tIGFm
ZmVjdGluZyB0aGUgY29vcmRpbmF0ZSBvciBMT0QgYmlhcyBvZiBhCisgICAgLy8gc2FtcGxpbmcg
b3BlcmF0aW9uLgorICAgIGlmIChpc1NhbXBsaW5nT3AocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5j
dGlvbkNhbGwoKSkpIHsKKyAgICAgICAgc3dpdGNoIChwYXJhbWV0ZXItPmdldEFyZ3VtZW50TnVt
YmVyKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAvLyBTZWNvbmQg
YXJndW1lbnQgKGNvb3JkKQorICAgICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5n
ZXRJbnRlcm1GdW5jdGlvbkNhbGwoKSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4
cHJlc3Npb24gZGVwZW5kZW50IG9uIGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRo
ZSIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGNvb3JkaW5hdGUgYXJndW1lbnQgb2YgYSBz
YW1wbGluZyBvcGVyYXRpb24uXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIC8vIFRoaXJkIGFyZ3VtZW50IChiaWFzKQorICAg
ICAgICAgICAgICAgIGJlZ2luRXJyb3IocGFyYW1ldGVyLT5nZXRJbnRlcm1GdW5jdGlvbkNhbGwo
KSk7CisgICAgICAgICAgICAgICAgbVNpbmsgPDwgIkFuIGV4cHJlc3Npb24gZGVwZW5kZW50IG9u
IGEgc2FtcGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGJlIHRoZSIKKyAgICAgICAgICAgICAgICAg
ICAgICA8PCAiIGJpYXMgYXJndW1lbnQgb2YgYSBzYW1wbGluZyBvcGVyYXRpb24uXG4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAvLyBGaXJzdCBhcmd1bWVudCAoc2FtcGxlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2
aXNpdFNlbGVjdGlvbihUR3JhcGhTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBiZWdpbkVy
cm9yKHNlbGVjdGlvbi0+Z2V0SW50ZXJtU2VsZWN0aW9uKCkpOworICAgIG1TaW5rIDw8ICJBbiBl
eHByZXNzaW9uIGRlcGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGNv
bmRpdGlvbmFsIHN0YXRlbWVudC5cbiI7Cit9CisKK3ZvaWQgUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZzo6dmlzaXRMb29wKFRHcmFwaExvb3AqIGxvb3ApCit7CisgICAgYmVnaW5FcnJvcihs
b29wLT5nZXRJbnRlcm1Mb29wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRlcGVu
ZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBpbiBhIGxvb3AgY29uZGl0aW9uLlxu
IjsKK30KKwordm9pZCBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nOjp2aXNpdExvZ2ljYWxP
cChUR3JhcGhMb2dpY2FsT3AqIGxvZ2ljYWxPcCkKK3sKKyAgICBiZWdpbkVycm9yKGxvZ2ljYWxP
cC0+Z2V0SW50ZXJtTG9naWNhbE9wKCkpOworICAgIG1TaW5rIDw8ICJBbiBleHByZXNzaW9uIGRl
cGVuZGVudCBvbiBhIHNhbXBsZXIgaXMgbm90IHBlcm1pdHRlZCBvbiB0aGUgbGVmdCBoYW5kIHNp
ZGUgb2YgYSBsb2dpY2FsICIKKyAgICAgICAgICA8PCBsb2dpY2FsT3AtPmdldE9wU3RyaW5nKCkK
KyAgICAgICAgICA8PCAiIG9wZXJhdG9yLlxuIjsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5H
X0hfCisjZGVmaW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElN
SU5HX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBSZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nIDogVERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlciB7CitwdWJsaWM6
CisgICAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZyhUSW5mb1NpbmtCYXNlJiBzaW5rKTsK
KyAgICB2b2lkIGVuZm9yY2VSZXN0cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3Jh
cGgpOworICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRBcmd1bWVudChUR3JhcGhBcmd1bWVudCogcGFyYW1ldGVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTZWxlY3Rpb24oVEdyYXBoU2VsZWN0aW9uKiBzZWxl
Y3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdExvb3AoVEdyYXBoTG9vcCogbG9vcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0TG9naWNhbE9wKFRHcmFwaExvZ2ljYWxPcCogbG9naWNhbE9w
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luRXJyb3IoY29uc3QgVEludGVybU5vZGUqIG5v
ZGUpOworICAgIHZvaWQgdmFsaWRhdGVVc2VyRGVmaW5lZEZ1bmN0aW9uQ2FsbFVzYWdlKGNvbnN0
IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKKyAgICBib29sIGlzU2FtcGxpbmdPcChjb25zdCBU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1GdW5jdGlvbkNhbGwpIGNvbnN0OworCisgICAgVEluZm9T
aW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1OdW1FcnJvcnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6
c2V0PFRTdHJpbmc+IFN0cmluZ1NldDsKKyAgICBTdHJpbmdTZXQgbVNhbXBsaW5nT3BzOworfTsK
KworI2VuZGlmICAvLyBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJ
TUlOR19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCIKKwordm9pZCBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZzo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpZiAo
SXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICArK21OdW1FcnJvcnM7
CisgICAgICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBtU2luay5sb2Nh
dGlvbihub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBtU2luayA8PCAiU2FtcGxlcnMgYXJlIG5v
dCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4iOworICAgIH0KK30KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJ
TUlOR19IXworI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9U
SU1JTkdfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
KworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcoVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAgICAgOiBUSW50ZXJtVHJh
dmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkKKyAgICAgICAgLCBtU2luayhzaW5rKQorICAgICAg
ICAsIG1OdW1FcnJvcnMoMCkge30KKworICAgIHZvaWQgZW5mb3JjZVJlc3RyaWN0aW9ucyhUSW50
ZXJtTm9kZSogcm9vdCkgeyByb290LT50cmF2ZXJzZSh0aGlzKTsgfQorICAgIGludCBudW1FcnJv
cnMoKSB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCopOworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsK
KyAgICBpbnQgbU51bUVycm9yczsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVElNSU5HX1JF
U1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5Miw2ICs5OTIsMjIgQEAgYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKQogICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVf
VEVYVFVSRSwgRDNERk1UX0RYVDUpKTsKIH0KIAorLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRl
eHR1cmVzIGluIERpcmVjdDNEOQorLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0
IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCisvLyBzZWUgaHR0cDov
L2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCitib29sIERpc3BsYXk6OmdldERl
cHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAm
Y3VycmVudERpc3BsYXlNb2RlKTsKKworICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5U
WikpOworICAgIGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVO
REVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOworCisgICAgcmV0dXJu
IGludHogJiYgbnVsbDsKK30KKwogYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBv
cnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQogewogICAgIEQzRERJU1BMQVlN
T0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKQEAgLTEwODEsNyArMTA5Nyw3IEBAIEQzRFBPT0wgRGlz
cGxheTo6Z2V0QnVmZmVyUG9vbChEV09SRCB1c2EKICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxU
OwogfQogCi1EM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuZGVyYWJsZSkg
Y29uc3QKK0QzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0
CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKICAgICB7CkBAIC0xMDg5LDcgKzExMDUsNyBA
QCBEM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKGJvb2wgcmVuCiAgICAgfQogICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIGlmICghcmVuZGVyYWJsZSkKKyAgICAgICAgaWYgKCEodXNhZ2Ug
JiAoRDNEVVNBR0VfREVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZp
c2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTAgKzc4LDExIEBAIGNsYXNzIERpc3BsYXkKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9j
Y2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5j
aW5nU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERX
T1JEIHVzYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woYm9v
bCByZW5kZXJhYmxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2wo
RFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxvc3Qo
KTsKICAgICBib29sIGlzRGV2aWNlTG9zdCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIFN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29u
c3QKICAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2lu
ZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKIHsK
ICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbU9mZnNj
cmVlblRleHR1cmUgPSBOVUxMOwpAQCAtNjQsNiArNjUsNyBAQCBTdXJmYWNlOjpTdXJmYWNlKERp
c3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVdpbmRvdyhO
VUxMKSwgbUNvbmZpZyhjb25maWcpLCBtU2hhcmVIYW5kbGUoc2hhcmVIYW5kbGUpLCBtV2lkdGgo
d2lkdGgpLCBtSGVpZ2h0KGhlaWdodCksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKEVHTF9GQUxT
RSkKIHsKICAgICBtU3dhcENoYWluID0gTlVMTDsKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAg
bU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwpAQCAtMTIxLDYgKzEyMywxMiBAQCB2b2lkIFN1cmZh
Y2U6OnJlbGVhc2UoKQogICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKICAgICB9CiAKKyAgICBp
ZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwor
ICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCiAgICAgewogICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CkBAIC0xNDQsNiAr
MTUyLDggQEAgdm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKICAgICAgICAgbVRleHR1cmUtPnJlbGVh
c2VUZXhJbWFnZSgpOwogICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgfQorCisgICAgbVNo
YXJlSGFuZGxlID0gTlVMTDsKIH0KIAogYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigpCkBA
IC0xNzQsNTcgKzE4NCwxMyBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNr
YnVmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSogcHJlc2VydmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBpZiAobVBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQgJiYgbVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRl
clRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldC0+
QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRl
eHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwogICAgIC8v
IGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5
IGFzIHBvc3NpYmxlLgogICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0gICAg
cmVsZWFzZSgpOwogCiAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OwogICAgIEhSRVNVTFQgcmVzdWx0OwogCi0gICAgYm9vbCB1c2VGbGlwRXggPSAoZ2V0
Q29tcGFyYWJsZU9TVmVyc2lvbigpID49IHZlcnNpb25XaW5kb3dzNykgJiYgbURpc3BsYXktPmlz
RDNkOUV4RGV2aWNlKCk7Ci0KLSAgICAvLyBGbGlwRXggY2F1c2VzIHVuc2VlbWx5IHN0cmV0Y2hp
bmcgd2hlbiByZXNpemluZyB3aW5kb3dzIEFORCB3aGVuIG9uZQotICAgIC8vIGRyYXdzIG91dHNp
ZGUgb2YgdGhlIFdNX1BBSU5UIGNhbGxiYWNrLiBXaGlsZSB0aGlzIGlzIHNlbGRvbSBhIHByb2Js
ZW0gaW4KLSAgICAvLyBzaW5nbGUgcHJvY2VzcyBhcHBsaWNhdGlvbnMsIGl0IGlzIHBhcnRpY3Vh
cmx5IG5vdGljZWFibGUgaW4gbXVsdGlwcm9jZXNzCi0gICAgLy8gYXBwbGljYXRpb25zLiBUaGVy
ZWZvcmUsIGlmIHRoZSBjcmVhdG9yIHByb2Nlc3Mgb2Ygb3VyIHdpbmRvdyBpcyBub3QgaW4KLSAg
ICAvLyB0aGUgY3VycmVudCBwcm9jZXNzLCBkaXNhYmxlIHVzZSBvZiBGbGlwRXguCi0gICAgRFdP
UkQgd2luZG93UElEOwotICAgIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmd2lu
ZG93UElEKTsKLSAgICBpZiAod2luZG93UElEICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSkKLSAg
ICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhcmlvdXMg
aGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBEM0RTV0FQRUZGRUNUX0ZMSVBFWCB3aGVuIGVpdGhl
ciB0aGUKLSAgICAvLyBkZXZpY2UgZm9ybWF0IG9yIGJhY2sgYnVmZmVyIGZvcm1hdCBpcyBub3Qg
MzItYml0LgotICAgIEhEQyBkZXZpY2VDb250ZXh0ID0gR2V0REMoMCk7Ci0gICAgaW50IGRldmlj
ZUZvcm1hdEJpdHMgPSBHZXREZXZpY2VDYXBzKGRldmljZUNvbnRleHQsIEJJVFNQSVhFTCk7Ci0g
ICAgUmVsZWFzZURDKDAsIGRldmljZUNvbnRleHQpOwotICAgIGlmIChtQ29uZmlnLT5tQnVmZmVy
U2l6ZSAhPSAzMiB8fCBkZXZpY2VGb3JtYXRCaXRzICE9IDMyKQotICAgIHsKLSAgICAgICAgdXNl
RmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQRVggaXMg
YWx3YXlzIFZTWU5DZWQKLSAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSAwKQotICAgIHsKLSAgICAg
ICAgdXNlRmxpcEV4ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRDNEU1dBUEVGRkVDVF9GTElQ
RVggZG9lcyBub3QgcHJlc2VydmUgdGhlIGJhY2sgYnVmZmVyLgotICAgIGlmIChtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIHVzZUZsaXBFeCA9IGZhbHNlOwotICAgIH0K
LQogICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmln
LT5tRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgIC8vIFdlIHNldCBCYWNrQnVmZmVyQ291bnQgPSAx
IGV2ZW4gd2hlbiB3ZSB1c2UgRDNEU1dBUEVGRkVDVF9GTElQRVguCiAgICAgLy8gV2UgZG8gdGhp
cyBiZWNhdXNlIERpcmVjdFggZG9jcyBhcmUgYSBiaXQgdmFndWUgd2hldGhlciB0byBzZXQgdGhp
cyB0byAxCkBAIC0yMzksNDEgKzIwNSw1MCBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWlu
KGludCBiYWNrYnVmCiAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0g
MDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAogICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklY
TUU6IFVuaW1wbGVtZW50ZWQKICAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRl
cnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgLy8gVXNlIGZsaXBFeCBvbiBXaW43IG9yIGdy
ZWF0ZXIuCi0gICAgaWYodXNlRmxpcEV4KQotICAgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVm
ZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRkxJUEVYOwotICAgIGVsc2UKLSAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLlN3YXBFZmZlY3QgPSBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA/IEQzRFNXQVBFRkZF
Q1RfQ09QWSA6IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5T
d2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwogICAgIHByZXNlbnRQYXJhbWV0ZXJz
LldpbmRvd2VkID0gVFJVRTsKICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgg
PSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdo
dCA9IGJhY2tidWZmZXJIZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRvdykKKyAgICAvLyBSZWxlYXNl
IHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIg
dGFyZ2V0LCB3aGlsZSB0aGUKKyAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMg
Zm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgorICAgIGlmIChtU3dh
cENoYWluKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFs
U3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICAgICAgaWYgKG1EaXNw
bGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBwU2hhcmVIYW5kbGUg
PSAmbVNoYXJlSGFuZGxlOwotICAgICAgICB9CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2Uo
KTsKKyAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgfQogCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgs
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0
dXJlLCBwU2hhcmVIYW5kbGUpOworICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICB7CisgICAgICAg
IG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAg
ICB9CiAKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURD
QUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7CisgICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKKyAg
ICB9CiAKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFp
bnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVh
c2UoKTsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5j
aWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQogCi0g
ICAgICAgIAotICAgICAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwcmVzZXJ2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IHByZXNlcnZlZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICBtU2hhcmVIYW5k
bGUgPSBOVUxMOworICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0gTlVMTDsKKyAgICBpZiAoIW1X
aW5kb3cgJiYgbURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCisgICAgeworICAgICAg
ICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOworICAgIH0KKworICAgIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdF
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBT
aGFyZUhhbmRsZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7Cisg
ICAgICAgIHJlbGVhc2UoKTsKIAogICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQp
KQogICAgICAgICB7CkBAIC0yODYsMjAgKzI2MSwxMiBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dh
cENoYWluKGludCBiYWNrYnVmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVdpbmRvdykK
LSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZF
Ul9UWVBFX01PTk8sICZtUmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgaWYgKCFwcmVzZXJ2ZWRSZW5k
ZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3cs
IE5VTEwsIEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVuZGVyVGFyZ2V0KTsK
LSAgICB9CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJU
YXJnZXQ7CiAKLSAgICBpZiAocHJlc2VydmVkUmVuZGVyVGFyZ2V0KQorICAgIHJlc3VsdCA9IG1P
ZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOworICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQog
ICAgIHsKICAgICAgICAgUkVDVCByZWN0ID0KICAgICAgICAgewpAQCAtMzE4LDEwICsyODUsMzcg
QEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgICAgICB9CiAK
ICAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0gICAgICAgIGRldmljZS0+U3RyZXRjaFJl
Y3QocHJlc2VydmVkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQz
RFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcHJlc2VydmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgICAgIHByZXNlcnZlZFJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgICAgIHJlc3VsdCA9
IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdl
dCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAg
aWYgKG1XaW5kb3cpCisgICAgeworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0
aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CisKKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
IHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJ
Q0VMT1NUKTsKKworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwg
c3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2VzOiAlMDhsWCIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJl
c3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURl
dmljZUxvc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JV
RkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CiAgICAgfQogCiAgICAgaWYgKG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQg
IT0gRDNERk1UX1VOS05PV04pCkBAIC0zMjksMTUgKzMyMywyNCBAQCBib29sIFN1cmZhY2U6OnJl
c2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
RGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhT
dGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0g
ICAgfQogCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMKTsKKyAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBE
M0RFUlJfSU5WQUxJRENBTEwpOwogCi0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0
aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0g
ICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZh
bHNlKTsKKyAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3Vy
ZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAog
ICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKQEAgLTM0Nyw2
ICszNTAsMTEzIEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xpbnQgeCwgRUdM
aW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIW1Td2FwQ2hh
aW4pCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoeCArIHdp
ZHRoID4gbVdpZHRoKQorICAgIHsKKyAgICAgICAgd2lkdGggPSBtV2lkdGggLSB4OworICAgIH0K
KworICAgIGlmICh5ICsgaGVpZ2h0ID4gbUhlaWdodCkKKyAgICB7CisgICAgICAgIGhlaWdodCA9
IG1IZWlnaHQgLSB5OworICAgIH0KKworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOworCisgICAgLy8gRGlzYWJsZSBh
bGwgcGlwZWxpbmUgb3BlcmF0aW9ucworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgRDNEWkJfRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
RklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNE
Q09MT1JXUklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENP
TE9SV1JJVEVFTkFCTEVfUkVEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NS
R0JXUklURUVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5V
TEwpOworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJUYXJnZXQoMCwgbUJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVu
Y2lsU3VyZmFjZShOVUxMKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVu
VGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOworICAg
IGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BP
SU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwg
RDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9B
RERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNl
dEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOworCisgICAgRDNEVklFV1BPUlQ5IHZp
ZXdwb3J0ID0gezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07CisgICAgZGV2aWNl
LT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOworCisgICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKKyAg
ICBmbG9hdCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOworICAgIGZsb2F0IHgy
ID0gKHggKyB3aWR0aCkgLSAwLjVmOworICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAu
NWY7CisKKyAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOworICAgIGZsb2F0IHYxID0g
eSAvIGZsb2F0KG1IZWlnaHQpOworICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdCht
V2lkdGgpOworICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7CisK
KyAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCisg
ICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAorICAg
ICAgICAgICAgICAgICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgs
IHksIHosIHJodywgdSwgdgorCisgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICBkZXZp
Y2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVv
ZihmbG9hdCkpOworICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOworCisgICAgZGV2aWNlLT5TZXRU
ZXh0dXJlKDAsIE5VTEwpOworCisgICAgUkVDVCByZWN0ID0KKyAgICB7CisgICAgICAgIHgsIG1I
ZWlnaHQgLSB5IC0gaGVpZ2h0LAorICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5CisgICAg
fTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJl
Y3QsIE5VTEwsIE5VTEwsIDApOworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxnbDo6Q29udGV4dCo+KGdsR2V0Q3VycmVudENvbnRleHQoKSk7CisgICAgaWYgKGNvbnRl
eHQpCisgICAgeworICAgICAgICBjb250ZXh0LT5tYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIH0K
KworICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbURp
c3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgY2hlY2tGb3JPdXRPZkRh
dGVTd2FwQ2hhaW4oKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBIV05EIFN1cmZhY2U6Omdl
dFdpbmRvd0hhbmRsZSgpCiB7CiAgICAgcmV0dXJuIG1XaW5kb3c7CkBAIC00NjcsODcgKzU3Nywx
OCBAQCBEV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGluCiAKIGJvb2wgU3Vy
ZmFjZTo6c3dhcCgpCiB7Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtRGlz
cGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlByZXNlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lk
dGgsIG1IZWlnaHQpOwogfQogCiBib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgs
IEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKHggPCAw
IHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBmYWxzZSk7Ci0gICAgfQotCiAgICAgaWYgKCFt
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKICAgICB7CiAgICAgICAgIC8vIFNwZWMgaXMgbm90IGNs
ZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5
LT5lbmRTY2VuZSgpOwotCi0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHgsIG1IZWlnaHQgLSB5IC0gaGVpZ2h0LAotICAgICAgICAgICAgeCArIHdpZHRoLCBtSGVp
Z2h0IC0geQotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gbVdpZHRoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gbVdpZHRoOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gbUhlaWdodCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmVjdC5ib3R0b20gPSBtSGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3Qu
bGVmdCA9PSByZWN0LnJpZ2h0IHx8IHJlY3QudG9wID09IHJlY3QuYm90dG9tKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5VTEwsIE5VTEwsIDAp
OwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNF
TE9TVCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUhVTkcgfHwgcmVzdWx0ID09IEQzREVSUl9E
RVZJQ0VSRU1PVkVEKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NP
TlRFWFRfTE9TVCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLQotICAgICAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAogRUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKQEAg
LTU2NSw2ICs2MDYsOCBAQCBFR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
CiAgICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwogfQogCisvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQo
KQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtNTc1LDYgKzYxOCw4IEBAIElEaXJlY3Qz
RFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXIKICAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3Vy
ZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICBpZiAobURlcHRoU3RlbmNpbCkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lv
biAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBwcml2YXRlOgogCiAgICAgRGlzcGxh
eSAqY29uc3QgbURpc3BsYXk7CiAgICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkqIG1SZW5kZXJUYXJnZXQ7
CiAgICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZzY3JlZW5UZXh0dXJlOwpAQCAtNzgsNiArNzks
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ViY2xhc3NXaW5kb3coKTsKICAgICB2b2lkIHVuc3Vi
Y2xhc3NXaW5kb3coKTsKICAgICBib29sIHJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lk
dGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KTsKKyAgICBib29sIHN3YXBSZWN0KEVHTGludCB4LCBF
R0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KTsKICAgICBzdGF0aWMgRFdPUkQg
Y29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCk7CiAKICAgICBjb25zdCBIV05EIG1XaW5k
b3c7ICAgICAgICAgICAgLy8gV2luZG93IHRoYXQgdGhlIHN1cmZhY2UgaXMgY3JlYXRlZCBmb3Iu
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3Bw
CShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDgsNiArMTEwOCwxMSBAQCBFR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3ViQnVmZmVyTlYoCiAKICAgICB0cnkKICAgICB7CisgICAg
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFM
U0UpOworICAgICAgICB9CisKICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKICAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJm
YWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2
aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUmVuZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgpAQCAtMzEw
LDYgKzMxMSw3IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICoKICAg
ICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0
MTZSZW5kZXJhYmxlVGV4dHVyZXMpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNw
bGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJ
bmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwogCkBAIC00
MDUsNiArNDA3LDExIEBAIHZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIG1D
YWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6bWFya0R4VW5p
Zm9ybXNEaXJ0eSgpCit7CisgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Cit9CisKIHZvaWQg
Q29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkKIHsKICAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0g
R0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCkKQEAgLTE2NDYsNiArMTY1MywxMiBAQCBib29s
IENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1JFU0VU
X05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJh
dGVneTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9G
T1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKKyAgICAgICAgKnBhcmFtcyA9IEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFOworICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNzM3LDYgKzE3NTAsOCBAQCBib29sIENv
bnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR18yRDoKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAg
ICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgorICAgICAgY2FzZSBH
TF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CisgICAgICBjYXNlIEdMX1BST0dSQU1f
QklOQVJZX0ZPUk1BVFNfT0VTOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lO
VDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwpAQCAtMTgzNSwxMyArMTg1MCwzMSBAQCBi
b29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAor
ICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXpl
IGEgTlVMTCBjb2xvcmF0dGFjaG1lbnQKKyAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBo
YXBweS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKKyAgICBpZiAoZnJh
bWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgewor
ICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3Ji
dWZmZXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOworICAgIH0KKyAg
ICBpZiAoIXJlbmRlcmJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIEVSUigidW5hYmxlIHRv
IGxvY2F0ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKCk7CisgICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJl
bmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlh
bCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFy
Z2V0KCk7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwogICAgICAgICBpZiAoIXJlbmRlclRhcmdl
dCkKICAgICAgICAgeworICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5l
eHBlY3RlZGx5IG51bGwuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QKICAgICAgICAgfQogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJn
ZXQoMCwgcmVuZGVyVGFyZ2V0KTsKQEAgLTE4NTYsMjUgKzE4ODksMjcgQEAgYm9vbCBDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVm
ZmVyU2VyaWFsID0gMDsKICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAg
IFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXIoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3Rl
bmNpbCgpOwogICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlcHRo
YnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNl
cmlhbCgpOworICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyLT5nZXRTZXJp
YWwoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwor
ICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxidWZmZXIoKS0+Z2V0U2VyaWFsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBz
dGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJT
ZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fApAQCAtMTg4Nyw5ICsxOTIyLDE0
IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgbURl
cHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAoZGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorCiAg
ICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkIHx8IHJlbmRlclRhcmdldENoYW5n
ZWQpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQo
KTsKICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdApAQCAtMTkxNSwxMSArMTk1NSwx
MCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3Rh
dGUudmlld3BvcnRYLCBtU3RhdGUudmlld3BvcnRZLCBtU3RhdGUudmlld3BvcnRXaWR0aCwgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0LCBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpOwotICAgICAgICB2
aWV3cG9ydC5YID0gY2xhbXAocmVjdC5sZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRl
clRhcmdldERlc2MuV2lkdGgpKTsKLSAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKHJlY3QudG9w
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gY2xhbXAocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19jYXN0PExP
Tkc+KHZpZXdwb3J0LlgpKTsKLSAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAocmVjdC5i
b3R0b20gLSByZWN0LnRvcCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7CisgICAgICAgIHZpZXdw
b3J0LlggPSBjbGFtcChtU3RhdGUudmlld3BvcnRYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJl
bmRlclRhcmdldERlc2MuV2lkdGgpKTsKKyAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0
ZS52aWV3cG9ydFksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWln
aHQpKTsKKyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0
aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRp
Y19jYXN0PExPTkc+KHZpZXdwb3J0LlgpKTsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xh
bXAobVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlkpKTsKICAgICAg
ICAgdmlld3BvcnQuTWluWiA9IHpOZWFyOwogICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsK
ICAgICB9CkBAIC0xOTQxLDExICsxOTgwLDExIEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJU
YXJnZXQoYm9vbCBpZ24KICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdChtU3Rh
dGUuc2Npc3NvclgsIG1TdGF0ZS5zY2lzc29yWSwgbVN0YXRlLnNjaXNzb3JXaWR0aCwgbVN0YXRl
LnNjaXNzb3JIZWlnaHQsIG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCk7Ci0gICAgICAgICAgICBy
ZWN0LmxlZnQgPSBjbGFtcChyZWN0LmxlZnQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChyZWN0LnRv
cCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAg
ICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1wKHJlY3QucmlnaHQsIDBMLCBzdGF0aWNfY2FzdDxM
T05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20g
PSBjbGFtcChyZWN0LmJvdHRvbSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXRE
ZXNjLkhlaWdodCkpOworICAgICAgICAgICAgUkVDVCByZWN0OworICAgICAgICAgICAgcmVjdC5s
ZWZ0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRl
clRhcmdldERlc2MuV2lkdGgpKTsKKyAgICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAobVN0YXRl
LnNjaXNzb3JZLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0
KSk7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYICsgbVN0
YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNj
LldpZHRoKSk7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNsYW1wKG1TdGF0ZS5zY2lzc29y
WSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRh
cmdldERlc2MuSGVpZ2h0KSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgm
cmVjdCk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09S
VEVTVEVOQUJMRSwgVFJVRSk7CiAgICAgICAgIH0KQEAgLTE5NjAsMjYgKzE5OTksMjYgQEAgYm9v
bCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgIGlmIChtU3RhdGUuY3Vy
cmVudFByb2dyYW0gJiYgbUR4VW5pZm9ybXNEaXJ0eSkKICAgICB7CiAgICAgICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgICAgICBQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwog
Ci0gICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKICAgICAgICAgR0xmbG9hdCB4
eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsK
LSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4
eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwg
MSwgeHkpOwogCi0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5n
IGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4gVGhlIGFwcHJvYWNoIGRl
cGVuZHMgb24gU2hhZGVyIE1vZGVsIDMuMCBzdXBwb3J0LgotICAgICAgICBHTGludCBjb29yZCA9
IHByb2dyYW1PYmplY3QtPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBmbG9hdCBoID0g
bVN1cHBvcnRzU2hhZGVyTW9kZWwzID8gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IDogbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0IC8gMi4wZjsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0
ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgaCwgCisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUg
dXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBpbiBQcm9ncmFtOjpsaW5rVmFyeWluZ3Mo
KS4KKyAgICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFtQmluYXJ5LT5nZXREeENvb3JkTG9jYXRp
b24oKTsKKyAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8g
Mi4wZiwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZiwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAy
LjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkg
KyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7CisgICAgICAgIHByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwogCi0gICAgICAgIEdMaW50IGRlcHRoID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IGRlcHRoID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgZHpb
Ml0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9OwotICAg
ICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7CisgICAgICAg
IHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBH
TGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24o
KTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhS
YW5nZUxvY2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIs
IHpGYXIsIHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0z
ZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOworICAgICAgICBwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKICAgICAgICAgbUR4VW5p
Zm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIH0KIApAQCAtMTk5MCwxOCArMjAyOSwxNyBAQCBib29s
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiB2b2lkIENvbnRleHQ6OmFwcGx5
U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQogewogICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBn
ZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKICAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIEdMZW51bSBhZGp1
c3RlZEZyb250RmFjZSA9IGFkanVzdFdpbmRpbmcobVN0YXRlLmZyb250RmFjZSk7Ci0KLSAgICBH
TGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOwot
ICAgIEdMaW50IGNjdyA9IChhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOworICAgIEdMaW50IGZy
b250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7CisgICAgR0xp
bnQgY2N3ID0gKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKTsKKyAgICBwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKIAotICAgIEdMaW50IHBvaW50c09y
TGluZXMgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOworICAg
IEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNM
b2NhdGlvbigpOwogICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdN
b2RlKTsKLSAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEs
ICZhbHdheXNGcm9udCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNP
ckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwogCiAgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAq
aWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogICAgIGJvb2wg
emVyb0NvbG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7CkBA
IC0yMDE1LDcgKzIwNTMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdN
b2RlCiAgICAgewogICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNv
bnZlcnRDdWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIGFkanVzdGVkRnJvbnRGYWNlKSk7CisgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNv
bnZlcnRDdWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIG1TdGF0ZS5mcm9udEZhY2UpKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTIxMTUsMzIgKzIxNTMsMzIgQEAgdm9p
ZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogICAgICAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyKCk7CiAgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxi
dWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFdS
SVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRl
bWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250
RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVO
QywgCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
RlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsK
IAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0
YXRlLnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6
IG1heFN0ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0
ZWRGcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RF
TkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7CisgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYg
OiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0
ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNf
U1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsTWFzayk7
CiAKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKGFkanVzdGVkRnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAK
KyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcCht
U3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJT
X0NDV19TVEVOQ0lMWkZBSUwsIAorICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTFpGQUlMLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCisgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0
ZW5jaWxQYXNzRGVwdGhQYXNzKSk7CiAKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6
IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNL
LCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5D
IDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsK
IAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoYWRqdXN0ZWRGcm9udEZhY2Ug
PT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJh
Y2tSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KGFkanVzdGVkRnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19D
Q1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOworICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NU
RU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA8
IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA6IG1heFN0ZW5jaWwp
OworICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3Rh
dGUuc3RlbmNpbEJhY2tNYXNrKTsKIAotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoYWRqdXN0ZWRGcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJT
X0NDV19TVEVOQ0lMRkFJTCwgCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1df
U1RFTkNJTEZBSUwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShhZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJT
X1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAorICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NU
RU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShh
ZGp1c3RlZEZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NX
X1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVO
Q0lMUEFTUywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252
ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKICAgICAgICAg
fQogICAgICAgICBlbHNlCkBAIC0yMjgwLDE4ICsyMzE4LDIwIEBAIEdMZW51bSBDb250ZXh0Ojph
cHBseUluZGV4QnVmZmVyKGNvbnN0IEcKIHZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKIHsK
ICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworCiAgICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVk
UHJvZ3JhbVNlcmlhbCkKICAgICB7Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZl
cnRleFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFZlcnRleFNoYWRlcigpOwotICAgICAgICBJ
RGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICAgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVy
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbFNoYWRlcigp
OwogCiAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKICAgICAg
ICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dy
YW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGly
dHlBbGxVbmlmb3JtcygpOwogICAgICAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFt
T2JqZWN0LT5nZXRTZXJpYWwoKTsKICAgICB9CiAKLSAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVu
aWZvcm1zKCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCiAvLyBB
cHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkg
ZGV2aWNlCkBAIC0yMzExLDMwICsyMzUxLDMyIEBAIHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJl
cygpCiB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKIHsKICAg
ICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOwogCiAgICAgaW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8g
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNf
VlRGOyAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0
eXBlCiAgICAgdW5zaWduZWQgaW50ICphcHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNB
TVBMRVJfUElYRUwpID8gbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVT
ZXJpYWxWUzsKICAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElY
RUwpID8gMCA6IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdl
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBpbnQgc2Ft
cGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKIAog
ICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5n
ZTsgc2FtcGxlckluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9n
cmFtT2JqZWN0LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9w
ZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKKyAgICAgICAgaW50IHRleHR1cmVVbml0ID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAv
LyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CiAgICAgICAgIGludCBkM2RTYW1wbGVy
ID0gc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKIAogICAgICAgICBpZiAodGV4dHVy
ZVVuaXQgIT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVU
eXBlID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJ
bmRleCk7CisgICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5h
cnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwogCiAgICAgICAg
ICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRl
eHR1cmVUeXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZXhTZXJpYWwgPSB0ZXh0dXJl
LT5nZXRUZXh0dXJlU2VyaWFsKCk7CiAKLSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSB8fCB0ZXh0
dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQor
ICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4
U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0Rp
cnR5SW1hZ2VzKCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKGQzZFRleHR1cmUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJl
LT5nZXRUZXh0dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhd
ICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkKICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4
dHVyZS0+Z2V0V3JhcFMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwVCA9
IHRleHR1cmUtPmdldFdyYXBUKCk7CkBAIC0yMzUxLDcgKzIzOTMsNyBAQCB2b2lkIENvbnRleHQ6
OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgCiAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1p
cEZpbHRlcik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXh0dXJlLT5nZXRUZXh0
dXJlU2VyaWFsKCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFs
IHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZDNk
VGV4dHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNjEsNyArMjQwMyw3IEBAIHZv
aWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0
ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleHR1cmUtPmdl
dFRleHR1cmVTZXJpYWwoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtz
YW1wbGVySW5kZXhdID0gdGV4U2VyaWFsOwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0
RGlydHkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQyOSw3ICsyNDcxLDcgQEAg
dm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogCiAgICAgSFJFU1VMVCBy
ZXN1bHQ7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOwotICAg
IGJvb2wgZGlyZWN0VG9QaXhlbHMgPSBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgJiYgZ2V0UGFj
a0FsaWdubWVudCgpIDw9IDQgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2aWNlKCkgJiYKKyAgICBi
b29sIGRpcmVjdFRvUGl4ZWxzID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNr
QWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgogICAgICAg
ICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRl
c2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0g
R0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChkaXJlY3RU
b1BpeGVscykKQEAgLTI0NTEsNiArMjQ5Myw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhH
TGludCB4LCBHTGludCAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjQ4MSwxMyArMjUyNCwxMyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhl
bHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEM0RMT0NL
RURfUkVDVCBsb2NrOwotICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBkZXNjLkhlaWdodCk7Ci0gICAgcmVjdC5sZWZ0ID0gY2xhbXAocmVjdC5s
ZWZ0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QudG9wID0g
Y2xhbXAocmVjdC50b3AsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwotICAg
IHJlY3QucmlnaHQgPSBjbGFtcChyZWN0LnJpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVz
Yy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gY2xhbXAocmVjdC5ib3R0b20sIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0Lmxl
ZnQgPSBjbGFtcCh4LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOworICAgIHJl
Y3QudG9wID0gY2xhbXAoeSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Cisg
ICAgcmVjdC5yaWdodCA9IGNsYW1wKHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRl
c2MuV2lkdGgpKTsKKyAgICByZWN0LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihkZXNjLkhlaWdodCkpOwogCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsK
ICAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExP
Q0tfUkVBRE9OTFkpOwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMjUwNSwxMyArMjU0
OCwxMyBAQCB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgaW50
IGlucHV0UGl0Y2g7CiAgICAgaWYgKGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSkKICAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOwotICAgICAgICBpbnB1
dFBpdGNoID0gbG9jay5QaXRjaDsKKyAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKils
b2NrLnBCaXRzKSArIGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwor
ICAgICAgICBpbnB1dFBpdGNoID0gLWxvY2suUGl0Y2g7CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHNvdXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBp
dGNoICogKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9
IC1sb2NrLlBpdGNoOworICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0
czsKKyAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7CiAgICAgfQogCiAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCkBAIC0yNzM4LDYgKzI3
ODEsNyBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAg
IAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0
ZW5jaWwtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRT
dGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7CiAgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAo
MHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CkBAIC0yOTUyLDcgKzI5OTYsNyBAQCB2b2lkIENvbnRl
eHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMCiAgICAgYXBwbHlTaGFkZXJzKCk7CiAgICAg
YXBwbHlUZXh0dXJlcygpOwogCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0
ZVNhbXBsZXJzKGZhbHNlKSkKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dy
YW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhOVUxMKSkKICAgICB7CiAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQpAQCAtMzA0Miw3ICszMDg2LDcg
QEAgdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIAogICAgIGFwcGx5U2hh
ZGVycygpOwogICAgIGFwcGx5VGV4dHVyZXMoKTsKIAotICAgIGlmICghZ2V0Q3VycmVudFByb2dy
YW0oKS0+dmFsaWRhdGVTYW1wbGVycyhmYWxzZSkpCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3Jh
bSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CkBAIC0z
NDUyLDYgKzM0OTYsMTEgQEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dAogICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwogfQogCitib29s
IENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dXBwb3J0c0RlcHRoVGV4dHVyZXM7Cit9CisKIGJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdElu
ZGljZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7CkBAIC0z
Njc3LDYgKzM3MjYsNyBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogICAg
IH0KIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCAiOworICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CiAgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CiAKQEAg
LTM3MjAsNiArMzc3MCwxMSBAQCB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQog
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKIAogICAg
IC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1
cmVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0
aF90ZXh0dXJlICI7CisgICAgfQorCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCAiOwogICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0g
MCkKICAgICB7CkBAIC0zODIwLDE3ICszODc1LDE3IEBAIHZvaWQgQ29udGV4dDo6YmxpdEZyYW1l
YnVmZmVyKEdMaW50IHNyY1gKIAogICAgIGlmIChzcmNZMCA8IHNyY1kxKQogICAgIHsKLSAgICAg
ICAgc291cmNlUmVjdC50b3AgPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTE7Ci0gICAgICAgIGRl
c3RSZWN0LnRvcCA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMTsKLSAgICAgICAgc291cmNlUmVj
dC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0IC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmJv
dHRvbSA9IGRyYXdCdWZmZXJIZWlnaHQgLSBkc3RZMDsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0
b20gPSBzcmNZMTsKKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7CisgICAgICAgIHNv
dXJjZVJlY3QudG9wID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkwOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHJlYWRCdWZmZXJI
ZWlnaHQgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QudG9wID0gZHJhd0J1ZmZlckhlaWdodCAt
IGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWlnaHQgLSBz
cmNZMTsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodCAtIGRzdFkx
OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kwOworICAgICAgICBkZXN0UmVjdC5i
b3R0b20gPSBkc3RZMDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMTsKKyAgICAgICAg
ZGVzdFJlY3QudG9wID0gZHN0WTE7CiAgICAgfQogCiAgICAgUkVDVCBzb3VyY2VTY2lzc29yZWRS
ZWN0ID0gc291cmNlUmVjdDsKQEAgLTQwNDMsNyArNDA5OCwxMyBAQCB2b2lkIENvbnRleHQ6OmJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYCiAKICAgICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRj
aFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1l
YnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3
RGVwdGhTdGVuY2lsID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhT
dGVuY2lsLCBOVUxMLCBkcmF3RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisg
ICAgICAgICAgICByZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBkcmF3
RGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICAgICAgICAgIHsKQEAgLTQxMTUsNiArNDE3Niw4IEBAIEdMZW51bSBWZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlOjphcHBseURlY2wKICAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tN
QVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKICAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9
ICZlbGVtZW50c1swXTsKIAorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0
aXZlKQpAQCAtNDE3MCw3ICs0MjMzLDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6
OmFwcGx5RGVjbAogICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlw
ZTsKICAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsK
ICAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAg
ICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW0tPmdldFNlbWFudGljSW5kZXgo
aSk7CisgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VtYW50aWNJbmRleChpKTsKICAgICAgICAgICAgIGVsZW1lbnQrKzsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIGNs
YXNzIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUKICAgcHJpdmF0ZToKICAgICBVSU5UIG1NYXhMcnU7
CiAKLSAgICBlbnVtIHsgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAxNiB9OworICAg
IGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07CiAKICAgICBzdHJ1
Y3QgVkJEYXRhCiAgICAgewpAQCAtMjgxLDcgKzI4MSw4IEBAIGNsYXNzIENvbnRleHQKIAogICAg
IHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1
cmZhY2UpOwogCi0gICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHZvaWQgbWFya0R4VW5pZm9ybXNEaXJ0eSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIGJvb2wgaXNDb250ZXh0
TG9zdCgpOwpAQCAtNDk1LDYgKzQ5Niw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIHN1cHBv
cnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNM
dW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25z
dDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBw
b3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2lu
ZygpIGNvbnN0OwpAQCAtNjE3LDYgKzYxOSw3IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIG1T
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1p
bmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7
CisgICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI5LDYgKzI5LDcg
QEAgRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCiAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5z
ZXQoTlVMTCk7CiAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgbVN0ZW5j
aWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5z
ZXQoTlVMTCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKQEAgLTEyOCw2ICsxMjksOCBA
QCB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdlCiAgICAgcmV0dXJuIDA7
CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZm
ZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTQwLDYgKzE0Myw4IEBAIElEaXJl
Y3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGUKICAgICByZXR1cm4gTlVMTDsKIH0K
IAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZm
ZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxi
dWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwpAQCAtMTk2LDYgKzIwMSwzMCBAQCBS
ZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmCiAgICAgcmV0dXJuIG1TdGVu
Y2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6
Z2V0TnVsbENvbG9yYnVmZmVyKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIgID0g
bU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CisKKyAgICBpZiAoIWRlcHRoYnVmZmVyKQorICAgIHsK
KyAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9ubHkg
RkJPLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRo
ICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVwdGhi
dWZmZXItPmdldEhlaWdodCgpOworCisgICAgaWYgKCFudWxsYnVmZmVyIHx8CisgICAgICAgIHdp
ZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXItPmdl
dEhlaWdodCgpKQorICAgIHsKKyAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
MCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKKyAgICAgICAg
bU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOworICAgIH0KKworICAgIHJl
dHVybiBudWxsYnVmZmVyOworfQorCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVy
VHlwZSgpCiB7CiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7CkBAIC0yNDMsOSArMjcyLDEx
IEBAIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQogCiBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpCiB7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOwogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CiAgICAgaW50
IHNhbXBsZXMgPSAtMTsKKyAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKIAogICAg
IGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjcwLDMxICszMDEs
MzggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNv
bG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgRDNERk9STUFUIGQz
ZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKKworICAgICAgICAgICAgaWYg
KElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKKyAgICAgICAgICAgICAgICBpbnRlcm5h
bGZvcm1hdCA9PSBHTF9BTFBIQSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09
IEdMX0xVTUlOQU5DRSB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0xV
TUlOQU5DRV9BTFBIQSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0RDNERm9ybWF0KCkpICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fCAK
LSAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChjb2xvcmJ1ZmZlci0+Z2V0
RDNERm9ybWF0KCkpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcygpKSkKKyAgICAgICAgICAgIGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rm
b3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkg
fHwKKyAgICAgICAgICAgICAgICAoZHgyZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYm
ICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZv
cm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAgIGlmIChkeDJlczo6SXNE
ZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZv
cm1hdChkM2Rmb3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQogCiAgICAgICAgIHdpZHRoID0g
Y29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5n
ZXRIZWlnaHQoKTsKICAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQg
PSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsK
QEAgLTMwMiwxMSArMzQwLDYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQog
CiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIGlm
IChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdM
X09FU19kZXB0aF90ZXh0dXJlCi0gICAgICAgIH0KLQogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdl
dERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKQEAgLTMxOSwxOSAr
MzUyLDQ0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUg
PT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRo
YnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXIt
PmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAg
ICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlM7CisgICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gZGVwdGhidWZmZXIt
PmdldEQzREZvcm1hdCgpOworCisgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1l
bnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQo
ZDNkZm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgaWYgKG1pc3Np
bmdBdHRhY2htZW50KQogICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVy
LT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdo
dCgpOwogICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7Cisg
ICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBk
ZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQogICAgICAgICB7
CkBAIC0zNDEsMTEgKzM5OSw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkK
IAogICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAg
IGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgIH0K
LQogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAg
IGlmICghc3RlbmNpbGJ1ZmZlcikKQEAgLTM1OCwxOSArNDExLDQ1IEBAIEdMZW51bSBGcmFtZWJ1
ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPT0g
MCkKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsK
LSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAg
ICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05T
OworICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQz
REZvcm1hdCgpOworCisgICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMg
Y29tZSBhbG9uZyBhcyBwYXJ0CisgICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQz
ZGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHNhbXBsZXMgPT0gLTEpCisgICAgICAgIGlmIChtaXNzaW5n
QXR0YWNobWVudCkKICAgICAgICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVy
LT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVp
Z2h0KCk7CiAgICAgICAgICAgICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygp
OworICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdo
dCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQog
ICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKSkK
ICAgICAgICAgewpAQCAtMzc4LDE0ICs0NTcsMTcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21w
bGV0ZW5lc3MoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUg
PT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0
aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgLy8gc2luY2Ugd2Ugb25seSBz
dXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0
ZW5jaWwKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZm
ZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCiAgICAgewotICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAg
ICAgIHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgIT0gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVMgfHwKLSAgICAgICAgICAgIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKSAhPSBzdGVu
Y2lsYnVmZmVyLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUg
YXQgbGVhc3Qgb25lIGF0dGFjaG1lbnQgdG8gYmUgY29tcGxldGUKKyAgICBpZiAobWlzc2luZ0F0
dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgUmVuZGVyYnVmZmVyICpnZXRD
b2xvcmJ1ZmZlcigpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKICAgICBS
ZW5kZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldE51
bGxDb2xvcmJ1ZmZlcigpOwogCiAgICAgR0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOwogICAg
IEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKTsKQEAgLTczLDYgKzc0LDggQEAgY2xhc3MgRnJh
bWVidWZmZXIKICAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwogICAgIEJpbmRpbmdQb2lu
dGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwogCisgICAgQmluZGluZ1Bv
aW50ZXI8UmVuZGVyYnVmZmVyPiBtTnVsbENvbG9yYnVmZmVyUG9pbnRlcjsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAko
cmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw2ICs4LDcgQEAKIC8vIGFuZCByZWxh
dGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdl
IDI4LgogCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTE3
LDIyNjEgKzE4LDg1IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKLSNpZiAhZGVmaW5lZChBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCkKLSNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCi0jZW5kaWYKLQog
bmFtZXNwYWNlIGdsCiB7Ci11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAx
OwotY29uc3QgY2hhciAqZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotc3RkOjpzdHJpbmcg
c3RyKGludCBpKQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwg
IiVkIiwgaSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotVW5pZm9ybTo6VW5pZm9ybShHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KQotICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW06OnVuZGVjb3Jh
dGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCi17Ci0gICAgaW50IGJ5dGVz
ID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKLSAgICBkYXRhID0gbmV3
IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7Ci0gICAg
ZGlydHkgPSB0cnVlOwotfQotCi1Vbmlmb3JtOjp+VW5pZm9ybSgpCi17Ci0gICAgZGVsZXRlW10g
ZGF0YTsKLX0KLQotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKLXsKLSAgICByZXR1cm4gX25hbWUu
Y29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKLX0KLQotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3Jt
TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwg
dW5zaWduZWQgaW50IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3JhbTo6dW5kZWNvcmF0ZVVuaWZv
cm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCi17Ci19Ci0KLVByb2dy
YW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1S
ZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNl
cmlhbCgpKQotewotICAgIG1EZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBtRnJhZ21lbnRTaGFk
ZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotCi0gICAgbVBpeGVsRXhlY3V0
YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1Db25zdGFu
dFRhYmxlUFMgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0gICAgbUlu
Zm9Mb2cgPSBOVUxMOwotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLQotICAgIHVubGluaygpOwot
Ci0gICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOwotCi0gICAgbVJlZkNvdW50ID0gMDsKLX0KLQot
UHJvZ3JhbTo6flByb2dyYW0oKQotewotICAgIHVubGluayh0cnVlKTsKLQotICAgIGlmIChtVmVy
dGV4U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQotICAgIHsKLSAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIFByb2dy
YW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRU
eXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hh
ZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOwotICAgICAgICBt
VmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRU
eXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVu
dFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7Ci0g
ICAgICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmRldGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
VkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRl
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4U2hhZGVyID0g
TlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01F
TlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtRnJhZ21lbnRTaGFkZXIg
PSBOVUxMOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Citjb25zdCBjaGFyICogY29u
c3QgZ19mYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgiOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsK
LX0KK3Vuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7CiAKLUlEaXJlY3Qz
RFBpeGVsU2hhZGVyOSAqUHJvZ3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQorQXR0cmlidXRlQmluZGlu
Z3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKIHsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsK
IH0KIAotSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkK
K0F0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MoKQogewotICAgIHJldHVybiBt
VmVydGV4RXhlY3V0YWJsZTsKIH0KIAotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRp
b24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQorSW5mb0xvZzo6SW5mb0xvZygpIDog
bUluZm9Mb2coTlVMTCkKIHsKLSAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCi0g
ICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1l
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQo
bmFtZSk7Ci0gICAgfQogfQogCi1HTHVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24o
Y29uc3QgY2hhciAqbmFtZSkKK0luZm9Mb2c6On5JbmZvTG9nKCkKIHsKLSAgICBpZiAobmFtZSkK
LSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmli
dXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAtMTsKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKIH0KIAotaW50IFBy
b2dyYW06OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQotewotICAgIEFTU0VS
VChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTKTsKLSAgICAKLSAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOwot
fQogCi0vLyBSZXR1cm5zIG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1
c2VkLgotR0xpbnQgUHJvZ3JhbTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBl
KQoraW50IEluZm9Mb2c6OmdldExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoICh0eXBlKQor
ICAgIGlmICghbUluZm9Mb2cpCiAgICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAg
ICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9W
RVJURVg6Ci0gICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LX0KLQotLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0x
OSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUg
Zm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xp
bnQgUHJvZ3JhbTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCkKLXsKLSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsK
LQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0g
ICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZiht
U2FtcGxlcnNQU1swXSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQo
c2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0p
KTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRl
eHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQo
KS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQot
Ci0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1w
bGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0z
IGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVy
VGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgot
ICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2Yo
bVNhbXBsZXJzUFNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGU7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsK
LSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwot
fQotCi1HTGludCBQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkK
LXsKLSAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0
cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNp
emVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBu
YW1lLmZpbmRfbGFzdF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9z
ICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0
ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJh
c2Uob3Blbik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZv
cm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2Nh
dGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsK
LX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAg
IHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9y
bTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0
ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAg
ICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAg
ICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBm
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBJbmZvTG9nOjpnZXRMb2coR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCiB7Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKKyAgICBpbnQgaW5kZXggPSAwOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlsw
XTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0g
PSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIGlmIChidWZTaXplID4g
MCkKICAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAz
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAg
IGlmIChtSW5mb0xvZykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykp
OworICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7CiAgICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihH
TGZsb2F0KSAqIDQsCi0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291
bnQpOworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKIAotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBH
TGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZb
aV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBz
cmNIZWlnaHQ+Ci12b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKQotewotICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3Jj
V2lkdGgpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNI
ZWlnaHQpOwotCi0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKLSAgICB7
Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICog
c3JjV2lkdGggKyB4XTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBy
aWdodCBzaWRlCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAg
ewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkw
OwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBm
b3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ICE9IEdMX0ZMT0FUX01BVDIpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9h
dCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogODsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJn
ZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxMjsKLSAg
ICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29s
IFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZs
b2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4o
dGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0g
MTY7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX1NBTVBMRVJfMkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1Q
TEVSX0NVQkUpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAg
ICAgICAgICAgIHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0lOVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAy
LAotICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW06OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5p
Zm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKLSAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2Yo
R0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1z
ID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAz
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCi0gICAg
ICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVk
IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAg
IGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNo
ICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1J
bnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAg
ICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAw
LjBmIDogMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBzaXplb2YoR0xmbG9hdCks
Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGlu
dGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQot
ewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQg
cmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7
Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFy
Z2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQzOgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQs
MywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5z
cG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdl
dFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQg
PSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQot
ICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50
eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBp
bnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9m
KEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpkaXJ0eUFsbFVuaWZvcm1zKCkKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlmb3JtczsgaW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LS8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3Qg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMoKQot
ewotICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jt
cy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKLSAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+ZGlydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0gICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9y
bS0+dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAg
ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRh
cmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMiwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNp
emUsIDMsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBh
cHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6
ICAgICAgICBhcHBseVVuaWZvcm0xaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3Jt
Mml2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVD
NDogICBhcHBseVVuaWZvcm00aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29k
ZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLUlEM0Qx
MEJsb2IgKlByb2dyYW06OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBj
aGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQotewotICAg
IGlmICghaGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERX
T1JEIHJlc3VsdDsKLSAgICBVSU5UIGZsYWdzID0gMDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VU
ZXh0OwotICAgIGlmIChwZXJmQWN0aXZlKCkpCi0gICAgewotICAgICAgICBmbGFncyB8PSBEM0RD
T01QSUxFX0RFQlVHOwotI2lmZGVmIE5ERUJVRwotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJ
TEVfU0tJUF9PUFRJTUlaQVRJT047Ci0jZW5kaWYKLQotICAgICAgICBzdGQ6OnN0cmluZyBzb3Vy
Y2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5n
KCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3Rk
OjpzdHJpbmcoaGxzbCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNv
dXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsK
LSAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7Ci0gICAgfQotCi0gICAgSUQzRDEwQmxvYiAqYmlu
YXJ5ID0gTlVMTDsKLSAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIHJl
c3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBmYWtlcGF0aCwgTlVMTCwgTlVM
TCwgIm1haW4iLCBwcm9maWxlLCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7Ci0K
LSAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbWVzc2Fn
ZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAg
ICAgICBhcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRSQUNFKCJc
biVzIiwgaGxzbCk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAgICAgICAg
ZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0
U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0
QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOwotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBiaW5hcnk7
Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywg
dXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAw
IHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWlu
dCBQcm9ncmFtOjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKQotewot
ICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50
KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJs
ZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAm
JiAhc3VjY2VzczsgcisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZh
aWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAm
JiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWls
YWJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJl
ZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsr
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUg
PSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBh
dmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5n
W3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAobSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBh
Y2tpbmdbeV1beF0gPyAwIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2Vb
eF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0
b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBh
Y2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWlu
ZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5u
YW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCBy
ZWdpc3RlcnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9y
czsgcisrKQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsx
XSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJlZ2lzdGVycysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVy
czsKLX0KLQotYm9vbCBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKQotewotICAgIGlmIChtUGl4ZWxI
TFNMLmVtcHR5KCkgfHwgbVZlcnRleEhMU0wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgdmFyeWluZyByZWdpc3RlciBhc3Np
Z25tZW50cwotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdWYXIgPSBtRnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBmcmFnVmFyICE9IG1GcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcg
PSAtMTsKLSAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZ0eFZhciAhPSBtVmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZ0eFZhcisrKQot
ICAgIHsKLSAgICAgICAgdnR4VmFyLT5yZWcgPSAtMTsKLSAgICAgICAgdnR4VmFyLT5jb2wgPSAt
MTsKLSAgICB9Ci0KLSAgICAvLyBNYXAgdGhlIHZhcnlpbmdzIHRvIHRoZSByZWdpc3RlciBmaWxl
Ci0gICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTX1NNM11bNF0g
PSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhwYWNraW5nKTsKLQot
ICAgIGlmIChyZWdpc3RlcnMgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGJvb2wgc20zID0g
Y29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWlu
Z1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGlm
IChyZWdpc3RlcnMgPT0gbWF4VmFyeWluZ1ZlY3RvcnMgJiYgbUZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiTm8gdmFyeWluZyBy
ZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9
IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IG1GcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQotICAgIHsKLSAgICAgICAgYm9vbCBtYXRj
aGVkID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0
ID0gbVZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSBtVmVydGV4U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9
IGlucHV0LT5zaXplKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRo
YXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKLSAgICAgICAgICAgICAgICBv
dXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghbWF0Y2hlZCkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWlu
ZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20z
ID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOwotCi0gICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBW
U19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaW50IHNlbWFudGlj
SW5kZXggPSAwOwotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0MyAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogbVZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4
NCAiOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+
bmFtZSkgKyAiIDogVEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7Ci0KLSAg
ICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7
Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlv
biA6IFBPU0lUSU9OO1xuIjsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyBy
KyspCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQg
OiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIg
KyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwotICAg
IH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlp
bmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1W
ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1WZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwotICAgIH0KLQot
ICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAg
ICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBh
dHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUg
IT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsK
LSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmli
dXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVy
dGV4SExTTCArPSAidHJhbnNwb3NlIjsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtc
biI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXpl
LnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9z
aXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56
ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0K
LSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsKLSAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xf
UG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFY
X1NNMykgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9G
cmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1WZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVn
ICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJl
Z2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
XVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDog
bVZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6IG1WZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVmVydGV4SExTTCArPSAieiI7IGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVZlcnRleEhMU0wgKz0gInci
OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgPSAiICsg
dmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAi
WyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1WZXJ0
ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBtUGl4ZWxITFNMICs9ICJzdHJ1Y3Qg
UFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgIAotICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1h
bnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChtRnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCAr
PSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJl
Z2lzdGVycykgKyAiO1xuIjsKLSAgICAgICAgaWYgKHNtMykgewotICAgICAgICAgICAgbVBpeGVs
SExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAg
IHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVY
Q09PUkQwO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250
RmFjaW5nKQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDog
VkZBQ0U7XG4iOwotICAgIH0KLQotICAgIG1QaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgotICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX0Nv
bG9yWzFdIDogQ09MT1I7XG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBp
bnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNtMykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQueSBjb250
YWlucyB0aGUgcmVuZGVyIHRhcmdldCBoZWlnaHQuIFNlZSBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldCgpCi0gICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBp
bnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAg
Z2xfRnJhZ0Nvb3JkLnkgPSBkeF9Db29yZC55IC0gaW5wdXQuZHhfVlBvcy55IC0gMC41O1xuIjsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X0Nv
b3JkIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVyLnggYW5k
IGNlbnRlci55LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoKQotICAgICAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gLShpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJo
dykgKiBkeF9Db29yZC55ICsgZHhfQ29vcmQudztcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBp
ZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQgPSBpbnB1dC5nbF9Qb2ludENvb3Jk
O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5n
KQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhf
UG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChp
bnB1dC52RmFjZSA8PSAwLjApKTtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAg
ICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5
cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2
YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxI
TFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBz
dHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLQotICAgIG1QaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAg
ICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCi0gICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4i
Ci0gICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBM
aW5rcyB0aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRj
aGluZyB1cCB0aGVpciB2YXJ5aW5ncywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMs
IGRldGVybWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBh
IGxpc3Qgb2YgdW5pZm9ybXMKLXZvaWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKCk7
Ci0KLSAgICBpZiAoIW1GcmFnbWVudFNoYWRlciB8fCAhbUZyYWdtZW50U2hhZGVyLT5pc0NvbXBp
bGVkKCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtVmVydGV4
U2hhZGVyIHx8ICFtVmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbVBpeGVsSExTTCA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SExT
TCgpOwotICAgIG1WZXJ0ZXhITFNMID0gbVZlcnRleFNoYWRlci0+Z2V0SExTTCgpOwotCi0gICAg
aWYgKCFsaW5rVmFyeWluZ3MoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRl
eFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAi
dnNfMl8wIjsKLSAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0
c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKLQotICAgIElEM0QxMEJsb2Ig
KnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtVmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0
ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7Ci0gICAgSUQzRDEwQmxvYiAqcGl4ZWxCaW5h
cnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZt
Q29uc3RhbnRUYWJsZVBTKTsKLQotICAgIGlmICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkp
Ci0gICAgewotICAgICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZl
cnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZl
cnRleEV4ZWN1dGFibGUpOwotICAgICAgICBIUkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigp
LCAmbVBpeGVsRXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBw
aXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRl
eFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7Ci0KLSAgICAgICAgdmVydGV4Qmlu
YXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAg
IHZlcnRleEJpbmFyeSA9IE5VTEw7Ci0gICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKLQotICAg
ICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcygpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFs
aW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVQUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlm
b3JtcyhtQ29uc3RhbnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFy
ZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCi0gICAg
ICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRp
dGlvbmFsIGRlY29yYXRpb24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAgbUR4RGVwdGhM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAgICAgICAgIG1E
eENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7Ci0gICAgICAg
ICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hh
bGZQaXhlbFNpemUiKTsKLSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2ludHNPckxpbmVz
TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKLQotICAg
ICAgICAgICAgbUxpbmtlZCA9IHRydWU7ICAgLy8gU3VjY2VzcwotICAgICAgICB9Ci0gICAgfQot
fQotCi0vLyBEZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBhbmQg
RGlyZWN0M0QgOSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKLWJvb2wgUHJvZ3JhbTo6bGlu
a0F0dHJpYnV0ZXMoKQotewotICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsKLQot
ICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAg
Zm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGdl
dEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRp
b24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1
dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRl
OwotCi0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50
eXBlKTsKLQotICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRU
UklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkFj
dGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcm93czsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlv
bnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxv
Y2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBs
b2NhdGlvbiA9IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAg
ICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlv
bgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRl
Rmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
LQotICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4
ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBh
dHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
ICAgLy8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRB
dHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlM7ICkKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IG1WZXJ0ZXhTaGFk
ZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFt
ZSk7Ci0gICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQg
ciA9IDA7IHIgPCByb3dzOyByKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0lu
ZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0
aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYg
KG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5k
aW5nW2xvY2F0aW9uXS5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0
aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIFByb2dy
YW06OmxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0g
ICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0gICAg
RDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICBVSU5UIGRlc2NyaXB0
aW9uQ291bnQgPSAxOwotCi0gICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRUYWJs
ZURlc2NyaXB0aW9uKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXggPSAw
OyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsgY29u
c3RhbnRJbmRleCsrKQotICAgIHsKLSAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRsZSA9
IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhh
bmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0o
Y29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUg
YmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcwotLy8gUmV0dXJucyB0cnVlIGlm
IHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQotYm9vbCBQcm9ncmFtOjpk
ZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKLXsK
LSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExF
UikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQz
RFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1l
KE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBEM0RYSEFORExF
IHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBj
b25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHNDb25zdGFudCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3Nh
bXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUg
PT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0
ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNv
dW50IGV4Y2VlZHMgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2
c0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFu
dCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQo
KS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VC
RSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4
ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRleHQoKS0+Z2V0TWF4aW11
bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCi0gICAgewotICAgICAg
Y2FzZSBEM0RYUENfU1RSVUNUOgotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHM7IGFycmF5SW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1
Y3RNZW1iZXJzOyBmaWVsZCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50
KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWENPTlNU
QU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXNj
cmlwdGlvbkNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVz
Y3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBz
dHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzID4gMSkgPyAoIlsiICsg
c3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIiOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
ZGVmaW5lVW5pZm9ybShmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgot
ICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVN
TlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0gICAgICAgIHJldHVybiBkZWZpbmVVbmlm
b3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUp
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQz
RFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUpCi17Ci0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnRE
ZXNjcmlwdGlvbiwgX25hbWUpOwotCi0gICAgaWYoIXVuaWZvcm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCi0g
ICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24odW5pZm9ybS0+bmFtZSk7Ci0g
ICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOwotCi0gICAgaWYgKGxvY2F0aW9uID49IDAp
Ci0gICAgewotICAgICAgICBkZWxldGUgdW5pZm9ybTsKLQotICAgICAgICBpZiAobVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XS0+dHlwZSAhPSB0eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGluaXRpYWxpemVDb25zdGFudEhhbmRsZXModW5pZm9ybSwgJnVuaWZvcm0tPnBzLCBtQ29uc3Rh
bnRUYWJsZVBTKTsKLSAgICBpbml0aWFsaXplQ29uc3RhbnRIYW5kbGVzKHVuaWZvcm0sICZ1bmlm
b3JtLT52cywgbUNvbnN0YW50VGFibGVWUyk7Ci0KLSAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVu
aWZvcm0pOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgp
IC0gMTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlT
aXplOyArK2kpCi0gICAgewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3Jt
TG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRleCkpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1Vbmlmb3JtICpQcm9ncmFtOjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUp
Ci17Ci0gICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMg
YW5kIHNjYWxhcnMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5U
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgotICAgICAg
ICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgotICAgICAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEM0RYUFRfQk9PTDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5D
b2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfQk9PTF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBf
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9G
TE9BVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09
IGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcwotICAgIHsK
LSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5Sb3dzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX01BVDMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gVGhpcyBtZXRob2QgbmVlZHMg
dG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKLXN0ZDo6c3RyaW5nIFByb2dyYW06OmRlY29y
YXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGlmIChuYW1lLmNv
bXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBuYW1lOwotfQotCi1zdGQ6OnN0cmluZyBQcm9ncmFtOjp1bmRlY29yYXRlVW5pZm9ybShj
b25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgaWYgKF9uYW1lWzBdID09ICdfJykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBfbmFtZS5zdWJzdHIoMSk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KF9uYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICByZXR1cm4g
X25hbWUuc3Vic3RyKDMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gX25hbWU7Ci19Ci0KLXZv
aWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6
ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KQotewotICAgIGZsb2F0IHZl
Y3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKLSAgICBCT09MIGJvb2xWZWN0b3Jb
RDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZM
T0FUNCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50ICYmIHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpCi0gICAgewotICAgICAg
ICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaiA8IHdpZHRoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVj
dG9yW2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDog
MS4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50ICYmIHRhcmdldFVuaWZvcm0tPnBz
LnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQgJiYgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJT
X0JPT0wpCi0gICAgewotICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyU2V0ID09IEQzRFhSU19CT09MID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3Vu
dCA6IDA7Ci0gICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJT
ZXQgPT0gRDNEWFJTX0JPT0wgPyB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsK
LSAgICAgICAgaW50IGNvcHlDb3VudCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4
KHBzQ291bnQsIHZzQ291bnQpKTsKLSAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01B
WF9CT09MX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50
OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdM
X0ZBTFNFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwg
dmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfQk9P
TCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEIodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5p
Zm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQz
RFhSU19GTE9BVDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNo
YWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCB2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19CT09MKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMu
cmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0t
PnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFByb2dyYW06OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7
Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsK
LSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfU0FN
UExFUikKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0
YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJ
bmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlclNldCA9PSBEM0RYUlNfRkxPQVQ0KTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVySW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnZzLnJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
SW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRl
eHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0
VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0gRDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0
ZXJJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFByb2dyYW06OmFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7
Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsx
XSwgMCwgMCk7Ci0KLSAgICAgICAgdiArPSAyOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5p
dih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNE
OV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxv
YXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAg
ICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNT
RVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQg
dmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgo
ZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAg
ICAgICAgdiArPSA0OwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3Jt
LCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06
OmFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBj
b25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyU2V0ID09IEQzRFhSU19GTE9BVDQpOwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxv
YXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQorICAgIGlmIChsZW5ndGgp
CiAgICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJTZXQgPT0g
RDNEWFJTX0ZMT0FUNCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3Is
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOworICAgICAgICAqbGVuZ3RoID0gaW5k
ZXg7CiAgICAgfQogfQogCiAvLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9n
cmFtIGluZm8gbG9nLgogLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBw
YXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCiAvLyBtZXNzYWdlcywgc28gbGV0
cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUg
bG9nLgotdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2dTYW5pdGl6ZWQoY29uc3QgY2hhciAq
bWVzc2FnZSkKK3ZvaWQgSW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3Nh
Z2UpCiB7CiAgICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwogCiAgICAgc2l6ZV90IGZvdW5k
OwogICAgIGRvCiAgICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGZha2VwYXRoKTsKKyAg
ICAgICAgZm91bmQgPSBtc2cuZmluZChnX2Zha2VwYXRoKTsKICAgICAgICAgaWYgKGZvdW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQogICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91
bmQsIHN0cmxlbihmYWtlcGF0aCkpOworICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJs
ZW4oZ19mYWtlcGF0aCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlIChmb3VuZCAhPSBz
dGQ6OnN0cmluZzo6bnBvcyk7CiAKLSAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtc2cuY19z
dHIoKSk7CisgICAgYXBwZW5kKCIlc1xuIiwgbXNnLmNfc3RyKCkpOwogfQogCi12b2lkIFByb2dy
YW06OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3ZvaWQgSW5mb0xv
Zzo6YXBwZW5kKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIGlmICghZm9ybWF0KQog
ICAgIHsKQEAgLTIzMDQsNyArMTI5LDcgQEAgdm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2co
Y29uc3QgY2hhcgogICAgIH0KIH0KIAotdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQordm9p
ZCBJbmZvTG9nOjpyZXNldCgpCiB7CiAgICAgaWYgKG1JbmZvTG9nKQogICAgIHsKQEAgLTIzMTMs
OTkgKzEzOCwxNzAgQEAgdm9pZCBQcm9ncmFtOjpyZXNldEluZm9Mb2coKQogICAgIH0KIH0KIAot
Ly8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9y
ZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9v
bCBkZXN0cm95KQorUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdM
dWludCBoYW5kbGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUp
LCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0
IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAg
ICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQorICAgIG1GcmFnbWVudFNo
YWRlciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbVByb2dyYW1CaW5h
cnkgPSBOVUxMOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtUmVmQ291bnQgPSAw
OworfQogCi0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0g
TlVMTDsKLSAgICAgICAgfQotICAgIH0KK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxp
bmsodHJ1ZSk7CiAKLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICBpZiAobVZlcnRleFNo
YWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgp
OwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgbVZlcnRleFNoYWRl
ci0+cmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICBp
ZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0
YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAg
ICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KK30KIAotICAgIGlmIChtQ29u
c3RhbnRUYWJsZVBTKQorYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIp
Cit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAg
ewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFu
dFRhYmxlUFMgPSBOVUxMOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKG1D
b25zdGFudFRhYmxlVlMpCisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilz
aGFkZXI7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOworICAgIH0KKyAgICBlbHNl
IGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAg
ICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxl
VlMgPSBOVUxMOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtRnJhZ21lbnRTaGFk
ZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5h
ZGRSZWYoKTsKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbmRleCsrKQorYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIp
Cit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAg
ewotICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7Ci0gICAgICAg
IG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0KKyAgICAgICAgaWYgKG1WZXJ0ZXhT
aGFkZXIgIT0gc2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUzsgaW5kZXgrKykKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwor
ICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVy
LT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgbVNhbXBs
ZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVy
ICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CisgICAgICAgIG1GcmFn
bWVudFNoYWRlciA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQo
KSBjb25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21l
bnRTaGFkZXIgPyAxIDogMCk7Cit9CiAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKK3ZvaWQgQXR0cmli
dXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNo
YXIgKm5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgIHsK
LSAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CiAgICAgfQorfQor
Cit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0
IGNoYXIgKm5hbWUpCit7CisgICAgbUF0dHJpYnV0ZUJpbmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2Nh
dGlvbihpbmRleCwgbmFtZSk7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZl
cnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAorLy8g
Y29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBt
YXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwordm9pZCBQcm9n
cmFtOjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoZmFsc2UpOwogCi0gICAgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOworICAgIG1JbmZv
TG9nLnJlc2V0KCk7CiAKLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIG1Qcm9n
cmFtQmluYXJ5ID0gbmV3IFByb2dyYW1CaW5hcnk7CisgICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+
bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0
ZXhTaGFkZXIpKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAg
ICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgICAgICB1bmxpbmsoZmFsc2UpOwogICAgIH0K
K30KIAotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0xOwotICAgIG1EeERlcHRoTG9jYXRp
b24gPSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7Ci0gICAgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwotICAgIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworaW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRy
aWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAoreworICAgIGZvciAo
aW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9u
KyspCisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQo
bmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtVW5p
Zm9ybUluZGV4LmNsZWFyKCk7CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgbVBpeGVsSExTTC5j
bGVhcigpOwotICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisvLyBSZXR1cm5zIHRoZSBwcm9ncmFt
IG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRl
c3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYg
KGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlm
IChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRl
ci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAg
ICAgfQogCi0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOworICAg
ICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNo
YWRlci0+cmVsZWFzZSgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICBtTGlua2VkID0gZmFsc2U7CisgICAgaWYgKG1Qcm9ncmFtQmlu
YXJ5KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OworICAgICAgICBtUHJv
Z3JhbUJpbmFyeSA9IE5VTEw7CisgICAgfQogfQogCi1ib29sIFByb2dyYW06OmlzTGlua2VkKCkK
K1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQogewotICAgIHJldHVy
biBtTGlua2VkOworICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKIH0KIAotYm9vbCBQcm9ncmFt
Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAordm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Cisg
ICAgdW5saW5rKGZhbHNlKTsKKyAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7CiB9
CiAKIHZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCkBAIC0yNDQwLDM1ICszMzYsMTIgQEAgdW5zaWdu
ZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKIAogaW50IFByb2dyYW06OmdldEluZm9Mb2dM
ZW5ndGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZv
TG9nKSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKIH0KIAog
dm9pZCBQcm9ncmFtOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICppbmZvTG9nKQogewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAobUluZm9M
b2cpCi0gICAgewotICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0
cmxlbihtSW5mb0xvZykpOwotICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4
KTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5k
ZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxl
bmd0aCA9IGluZGV4OwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUs
IGxlbmd0aCwgaW5mb0xvZyk7CiB9CiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJz
KEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCkBAIC0y
NTAzLDE1MiArMzc2LDk2IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6
ZWkKIAogdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKQogewotICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0g
ICAgdW5zaWduZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0
dHJpYnV0ZTsKLSAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlKyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAg
ICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFj
dGl2ZUF0dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKKyAgICAgICAgbVByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0
eXBlLCBuYW1lKTsKICAgICB9Ci0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgZWxzZQogICAg
IHsKLSAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVdLm5hbWUuY19zdHIoKTsKLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6
ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQorICAgICAgICBpZiAoYnVm
c2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBpZiAobGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBl
JyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlw
ZTsKKyAgICAgICAgKnR5cGUgPSBHTF9OT05FOworICAgICAgICAqc2l6ZSA9IDE7CisgICAgfQog
fQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCiB7Ci0gICAgaW50
IGNvdW50ID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgaWYgKG1Q
cm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJp
YnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRy
aWJ1dGVDb3VudCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2
ZUF0dHJpYnV0ZU1heExlbmd0aCgpCiB7Ci0gICAgaW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKICAgICB7
Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0
eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KSht
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExl
bmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3Rp
dmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKIH0KIAogdm9pZCBQcm9n
cmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsK
LSAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9ybXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0
aXZlVW5pZm9ybSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHVuaWZvcm07Ci0gICAgZm9yICh1bmlm
b3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm0rKykKKyAgICBpZiAo
bVByb2dyYW1CaW5hcnkpCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5u
YW1lLmNvbXBhcmUoMCwgMywgImR4XyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0
aXZlVW5pZm9ybSsrOworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVu
aWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CiAgICAgfQot
Ci0gICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0
IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotCi0gICAgaWYgKGJ1ZnNp
emUgPiAwKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1V
bmlmb3Jtc1t1bmlmb3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1d
LT5pc0FycmF5KCkpCisgICAgICAgIGlmIChidWZzaXplID4gMCkKICAgICAgICAgewotICAgICAg
ICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsK
LSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCiAgICAgICAgIGlmIChsZW5ndGgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
ICAgICAqbGVuZ3RoID0gMDsKICAgICAgICAgfQotICAgIH0KIAotICAgICpzaXplID0gbVVuaWZv
cm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+dHlwZTsKKyAgICAgICAgKnNpemUgPSAwOworICAgICAgICAqdHlwZSA9IEdMX05PTkU7Cisg
ICAgfQogfQogCiBHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQogewotICAg
IGludCBjb3VudCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9y
bXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZv
cm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICBpZiAobVByb2dyYW1C
aW5hcnkpCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVu
aWZvcm1Db3VudCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7CiB9CiAKIEdMaW50IFByb2dyYW06OmdldEFjdGl2
ZVVuaWZvcm1NYXhMZW5ndGgoKQogewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgdW5z
aWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5p
Zm9ybUluZGV4KyspCisgICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQogICAgIHsKLSAgICAgICAgaWYg
KCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlm
b3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCBsZW5ndGggPSAoaW50KShtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFt
ZS5sZW5ndGgoKSArIDEpOwotICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IDM7
ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heExl
bmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3RoKTsKLSAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgcmV0dXJu
IG1heExlbmd0aDsKIH0KIAogdm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQpAQCAtMjY2
MywxNjEgKzQ4MCwyOCBAQCBib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29u
CiAKIHZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQogewotICAgIHJlc2V0SW5mb0xvZygpOworICAg
IG1JbmZvTG9nLnJlc2V0KCk7CiAKLSAgICBpZiAoIWlzTGlua2VkKCkpIAorICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKICAgICB7Ci0gICAgICAgIGFwcGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMg
bm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewotICAgICAgICBhcHBseVVuaWZvcm1zKCk7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVTYW1wbGVycyh0cnVlKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRl
ZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6dmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9ycykKLXsKLSAgICAvLyBpZiBhbnkgdHdv
IGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0
IHJlZmVyIHRvIHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBp
cyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFu
ZAotICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZB
TElEX09QRVJBVElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAg
ICB7Ci0gICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFu
Z2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9n
aWNhbFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBt
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChsb2dFcnJvcnMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1
bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2dFcnJvcnMpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4
dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAg
aWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxl
ciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAo
JWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVy
ZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvZ0Vycm9ycykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGlj
dGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1
bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRd
ID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KyAgICAgICAgbUluZm9Mb2cuYXBwZW5kKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVs
bHkgbGlua2VkLiIpOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFByb2dy
YW06OmluaXRpYWxpemVDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgVW5p
Zm9ybTo6UmVnaXN0ZXJJbmZvICpyaSwgSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxl
KQorYm9vbCBQcm9ncmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0CiB7Ci0gICAgRDNEWEhBTkRMRSBo
YW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3Jt
LT5fbmFtZS5jX3N0cigpKTsKLSAgICBpZiAoaGFuZGxlKQorICAgIGlmIChtUHJvZ3JhbUJpbmFy
eSkKICAgICB7Ci0gICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEQz
RFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGhhbmRsZSwgJmNvbnN0YW50RGVz
Y3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgcmktPnJlZ2lzdGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIHJpLT5yZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNj
cmlwdGlvbi5SZWdpc3RlckNvdW50OwotICAgICAgICByaS0+cmVnaXN0ZXJTZXQgPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0OworICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkt
PmlzVmFsaWRhdGVkKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJpLT5yZWdp
c3RlckNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBt
RHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2Nh
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENv
b3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbjsKLX0KLQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsx
MSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCiAKICNpbmNsdWRlIDxkM2R4OS5o
PgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHZlY3Rvcj4KICNpbmNsdWRlIDxzZXQ+CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgi
CkBAIC0yNSw0MiArMjMsMzYgQEAgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogY2xhc3MgRnJhZ21l
bnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiAKLS8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVz
ZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCi1zdHJ1Y3QgVW5pZm9ybQotewotICAgIFVu
aWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZSk7Ci0KLSAgICB+VW5pZm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0K
LSAgICBjb25zdCBHTGVudW0gdHlwZTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAv
LyBEZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVj
b3JhdGVkIG5hbWUKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworZXh0ZXJuIGNv
bnN0IGNoYXIgKiBjb25zdCBnX2Zha2VwYXRoOwogCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsK
LSAgICBib29sIGRpcnR5OworY2xhc3MgQXR0cmlidXRlQmluZGluZ3MKK3sKKyAgcHVibGljOgor
ICAgIEF0dHJpYnV0ZUJpbmRpbmdzKCk7CisgICAgfkF0dHJpYnV0ZUJpbmRpbmdzKCk7CiAKLSAg
ICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTZXQ7Ci0g
ICAgICAgIGludCByZWdpc3RlckluZGV4OwotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAg
ICB9OworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3Qg
Y2hhciAqbmFtZSk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpIGNvbnN0OwogCi0gICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5m
byB2czsKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJp
bmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CiAKLS8vIFN0cnVjdCB1c2VkIGZvciBjb3Jy
ZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1z
dHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCitjbGFzcyBJbmZvTG9nCiB7Ci0gICAgVW5pZm9ybUxvY2F0
aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2ln
bmVkIGludCBpbmRleCk7CisgIHB1YmxpYzoKKyAgICBJbmZvTG9nKCk7CisgICAgfkluZm9Mb2co
KTsKKworICAgIGludCBnZXRMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldExvZyhHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CiAKLSAgICBzdGQ6OnN0
cmluZyBuYW1lOwotICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBp
bmRleDsKKyAgICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKKyAg
ICB2b2lkIGFwcGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOworICAgIHZvaWQgcmVzZXQoKTsK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5mb0xvZyk7CisgICAg
Y2hhciAqbUluZm9Mb2c7CiB9OwogCiBjbGFzcyBQcm9ncmFtCkBAIC03NCw0NSArNjYsMTIgQEAg
Y2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKICAg
ICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKIAotICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQogICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdM
dWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgR0x1aW50IGdldEF0dHJpYnV0ZUxv
Y2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBh
dHRyaWJ1dGVJbmRleCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlw
ZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBUZXh0dXJlVHlwZSBnZXRT
YW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCk7Ci0gICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKTsK
LQotICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKLSAgICBi
b29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0
VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OwotICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAgYm9vbCBnZXRVbmlmb3JtZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAg
Ym9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50
ICpwYXJhbXMpOwotCi0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeENv
b3JkTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlv
bigpIGNvbnN0OwotICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwotICAg
IEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRp
cnR5QWxsVW5pZm9ybXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKIAogICAgIHZvaWQg
bGluaygpOwotICAgIGJvb2wgaXNMaW5rZWQoKTsKKyAgICB2b2lkIHNldFByb2dyYW1CaW5hcnko
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJv
Z3JhbUJpbmFyeSgpOworCiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKICAgICB2
b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmlu
Zm9Mb2cpOwogICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdM
c2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwpAQCAtMTMyLDkwICs5MSwyNCBAQCBjbGFz
cyBQcm9ncmFtCiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCiAgICAg
dm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhib29sIGxvZ0Vycm9y
cyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdl
dFNlcmlhbCgpIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmli
dXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3Jl
Ci0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCi0gICAgSUQzRDEwQmxv
YiAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
IElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwogICAgIHZvaWQgdW5saW5rKGJv
b2wgZGVzdHJveSA9IGZhbHNlKTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWlu
ZyAqcGFja2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBs
aW5rQXR0cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJs
ZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5E
TEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNj
cmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0o
Y29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7
Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3Qg
R0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlm
b3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYo
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwot
ICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jt
bmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29u
c3QgR0xib29sZWFuICp2KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbnN0YW50SGFuZGxlcyhV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBVbmlmb3JtOjpSZWdpc3RlckluZm8gKnJzLCBJRDNEWENv
bnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotCi0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2dT
YW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBlbmRUb0luZm9Mb2co
Y29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0SW5mb0xvZygpOwotCiAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogCi0gICAgSURpcmVjdDNERGV2aWNl
OSAqbURldmljZTsKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZl
cnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAotICAgIHN0ZDo6c3RyaW5nIG1QaXhlbEhMU0w7
Ci0gICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisgICAgQXR0cmlidXRlQmluZGluZ3MgbUF0
dHJpYnV0ZUJpbmRpbmdzOwogCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVj
dXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwot
ICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0
YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4g
bUF0dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBBdHRyaWJ1dGUgbUxp
bmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRl
eFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAg
ICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAg
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1w
bGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZT
W01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQot
ICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlm
b3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0
aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAg
ICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlv
bjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbUxpbmtlZDsKKyAgICBQcm9ncmFt
QmluYXJ5KiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxh
ZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9u
Z2VyIGluIHVzZQotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIGJvb2wgbVZhbGlkYXRlZDsKIAog
ICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7CiAKQEAgLTIyNSw2ICsxMTgsOCBAQCBjbGFzcyBQ
cm9ncmFtCiAKICAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiAgICAgY29u
c3QgR0x1aW50IG1IYW5kbGU7CisKKyAgICBJbmZvTG9nIG1JbmZvTG9nOwogfTsKIH0KIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0
aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEw
LjMgcGFnZSAyOC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
CisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8c3RyaW5n
PgorCisjaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVm
aW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMMworI2VuZGlmCisKK25hbWVzcGFjZSBnbAoreworc3RkOjpzdHJpbmcgc3RyKGlu
dCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitVbmlmb3JtOjpV
bmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGlu
dCBhcnJheVNpemUpCisgICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3Jh
bUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkK
K3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXpl
OworICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0KGRhdGEs
IDAsIGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRydWU7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkK
K3sKKyAgICBkZWxldGVbXSBkYXRhOworfQorCitib29sIFVuaWZvcm06OmlzQXJyYXkoKQorewor
ICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOworfQorCitVbmlmb3Jt
TG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2ln
bmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFtZShQcm9ncmFt
QmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRl
eChpbmRleCkKK3sKK30KKworUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSgpCit7CisgICAg
bURldmljZSA9IGdldERldmljZSgpOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Cisg
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxM
OworICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworCisgICAgbVZhbGlkYXRlZCA9IGZhbHNl
OworCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aW5kZXgrKykKKyAgICB7CisgICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOworICAg
IH0KKworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1T
YW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSA9IDA7CisgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7CisKKyAg
ICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKKyAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7
CisgICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOworICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlv
biA9IC0xOworICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKKyAgICBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb24gPSAtMTsKK30KKworUHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQor
eworICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0
YWJsZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAg
ICB7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAg
aWYgKG1Db25zdGFudFRhYmxlUFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5S
ZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
VW5pZm9ybXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygp
OworICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKKyAgICB9Cit9CisKK0lEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVy
biBtUGl4ZWxFeGVjdXRhYmxlOworfQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFt
QmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQoreworICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJs
ZTsKK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0
IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAgeworICAgICAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0
cmluZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisK
K2ludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkK
K3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUyk7CisgICAgCisgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJp
YnV0ZUluZGV4XTsKK30KKworLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNh
bXBsZXIgaW5kZXggdXNlZC4KK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFu
Z2UoU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZTsKKyAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6CisgICAgICAgIHJldHVybiBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhl
IHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkg
c2FtcGxlcgorLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3Ig
dGhlIHZlcnRleCBzaGFkZXIpLgorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBp
bmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBH
TGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIFNBTVBMRVJfUElYRUw6CisgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXgg
PCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOworCisgICAgICAg
IGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKworICAgICAgICBpZiAobVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ2ljYWxU
ZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRl
eHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7
CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5
cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCisvLyBpbmRleCAoMC0x
NSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCitU
ZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5
cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgorICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKKyAg
ICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAg
cmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBjYXNl
IFNBTVBMRVJfVkVSVEVYOgorICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1T
YW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKKyAgICAgICAgQVNTRVJUKG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZT
W3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBURVhUVVJFXzJEOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgc3Vic2NyaXB0ID0gMDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBv
cGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBvcGVuID0gbmFt
ZS5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9v
ZignXScpOworICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5h
bWUubGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1
YnN0cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5hbWUuZXJhc2Uob3Blbik7CisgICAg
fQorCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZv
cm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLm5hbWUgPT0gbmFtZSAmJgorICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsb2Nh
dGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBd
ID0gdlswXTsKKyAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7CisgICAgICAgICAgICB0YXJnZXRb
Ml0gPSAwOworICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCAr
PSA0OworICAgICAgICAgICAgdiArPSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKKyAgICAgICAg
ICAgIHRhcmdldFsxXSA9IHZbMV07CisgICAgICAgICAgICB0YXJnZXRbMl0gPSAwOworICAgICAg
ICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIHRhcmdldCArPSA0OworICAgICAgICAg
ICAgdiArPSAyOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07CisgICAgICAg
ICAgICB0YXJnZXRbMV0gPSB2WzFdOworICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKKyAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7CisgICAgICAgICAgICB0YXJnZXQgKz0gNDsKKyAgICAg
ICAgICAgIHYgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNF
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sK
KyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0
KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChH
TGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0
YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KK3ZvaWQgdHJhbnNwb3Nl
TWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaW50IGNvcHlX
aWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWln
aHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CisKKyAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt4ICog
dGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICB9
CisgICAgfQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSBz
cmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRh
cmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7CisgICAgICAgIH0KKyAgICB9CisgICAg
Ly8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkg
PCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
dGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJn
ZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOworICAgICAg
ICB0YXJnZXQgKz0gODsKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Cisg
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywz
Pih0YXJnZXQsIHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDEyOworICAgICAgICB2YWx1ZSAr
PSA5OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGZsb2F0KSAqIDE2KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQs
IHZhbHVlKTsKKyAgICAgICAgdGFyZ2V0ICs9IDE2OworICAgICAgICB2YWx1ZSArPSAxNjsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlm
b3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sK
KyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl8yRCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfQ1VCRSkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAorICAgICAg
ICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgor
CisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50
KSAqIDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAg
ICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJV
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAgdiwg
MyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xpbnQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQp
OworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVD
NCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
KmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAvLyBzaXplZCBxdWVyaWVz
IC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAorICAgIGlmIChi
dWZTaXplKQorICAgIHsKKyAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJu
YWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1
aXJlZEJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgeworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwy
LDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAxMik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgorICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDE2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25l
bnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBp
bnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9y
bS0+dHlwZSk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFy
Z2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxD
b3VudCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBz
aXplb2YoR0xmbG9hdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQ
YXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgLy8gc2l6ZWQgcXVlcmll
cyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgICBpZiAo
YnVmU2l6ZSkKKyAgICB7CisgICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVy
bmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgaWYgKCpidWZTaXplIDwgcmVx
dWlyZWRCeXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3Nl
TWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEy
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9y
bUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENv
dW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1D
b21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7CisKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xp
bnQpYm9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFy
YW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFt
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAg
ICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dy
YW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQoreworICAgIHVuc2lnbmVkIGludCBudW1Vbmlm
b3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAw
OyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1z
W2luZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVu
aWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZp
Y2UKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgZm9yIChzdGQ6
OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0g
bVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgeworICAgICAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gKnViOworCisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
OworICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+
ZGF0YTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5i
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJy
YXlTaXplLCAyLCBiKTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMz
OiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBw
bHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFUl9DVUJFOgorICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5p
Zm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9y
bSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5U
X1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9y
bTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hl
ZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRDEwQmxvYiAqUHJvZ3JhbUJp
bmFyeTo6Y29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2ws
IGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUp
Cit7CisgICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgRFdPUkQgcmVzdWx0OworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5n
IHNvdXJjZVRleHQ7CisgICAgaWYgKHBlcmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGZsYWdz
IHw9IEQzRENPTVBJTEVfREVCVUc7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0g
RDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3Rk
OjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxu
IikgKyBzdGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19z
dHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMOworICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICBJRDNEMTBC
bG9iICpiaW5hcnkgPSBOVUxMOworICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7
CisgICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGdfZmFrZXBhdGgs
IE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1l
c3NhZ2UpOworCisgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNo
YXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVy
KCk7CisKKyAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAg
IFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisK
KyAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9
IE5VTEw7CisgICAgfQorCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
aWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQg
PSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAg
ICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIGJpbmFy
eS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVy
biBiaW5hcnk7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJl
Z2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5n
dWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNj
ZXNmdWwKK2ludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIpCit7CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBp
bnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMo
KTsKKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJv
d0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0gPSBW
YXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3Jz
IC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHld
W3hdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vz
czsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFp
bGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
biAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsg
eCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7
MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7
IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNwYWNlW3hd
ICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
c3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlp
bmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYq
dmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlp
bmctPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAg
aW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdW
ZWN0b3JzOyByKyspCisgICAgeworICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5n
W3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVn
aXN0ZXJzOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZp
bmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRl
cikKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSB2
YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAh
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCisgICAgeworICAg
ICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKKyAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7CisgICAg
fQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gdmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyB2dHhWYXIrKykKKyAgICB7CisgICAgICAgIHZ0eFZhci0+cmVnID0gLTE7CisgICAgICAg
IHZ0eFZhci0+Y29sID0gLTE7CisgICAgfQorCisgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0
aGUgcmVnaXN0ZXIgZmlsZQorICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWlu
Z3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIpOworCisgICAgaWYgKHJlZ2lzdGVy
cyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3Jp
dGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAgIENvbnRleHQgKmNvbnRl
eHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0
c1NoYWRlck1vZGVsMygpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRl
eHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisgICAgaWYgKHJlZ2lzdGVycyA9PSBt
YXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBz
dXBwb3J0IGdsX0ZyYWdDb29yZCIpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgaW5wdXQrKykKKyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCisgICAg
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
b3V0cHV0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5w
dXQtPm5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlw
ZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2
ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5
aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJl
ZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29s
OworCisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVudCB2YXJ5aW5nICVz
IGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkp
OworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIp
OworCisgICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9yIChBdHRy
aWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsg
YXR0cmlidXRlKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogdmVydGV4
SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0Mngy
ICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0M3gzICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0
ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRp
Y0luZGV4KSArICI7XG4iOworCisgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIn07XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNf
T1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAi
ICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIg
PSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXpl
ID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsx
XSA/IDIgOiAxKSk7CisKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihy
ZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsg
c3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJh
Z0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Cisg
ICAgfQorCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAg
IHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpF
O1xuIjsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAg
ICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5w
dXQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0dHJpYnV0ZUFy
cmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2lu
KCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1
dGUrKykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRy
aWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJpYWJsZVJv
d0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7CisgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAg
dmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5h
bWUpICsgIik7XG4iOworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxm
UGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKyBkeF9IYWxmUGl4ZWxTaXpl
LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMp
CisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9
IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01BWF9TTTMpICsgIik7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0
cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZh
cnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGor
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWlu
Zy0+cmVnICsgaSAqIHJvd3MgKyBqOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9
ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hh
cmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlp
bmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3Jd
WzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInci
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2
YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIg
KyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmVydGV4SExT
TCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5Q
VVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xp
c3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3Ry
KHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4g
KyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsg
IjtcbiI7CisgICAgICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsK
KyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAg
fQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xu
IgorICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAg
ICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBp
bnB1dC5nbF9GcmFnQ29vcmQudztcbiI7CisgICAgICAgIAorICAgICAgICBpZiAoc20zKQorICAg
ICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlu
cHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0
aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2Vl
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nv
b3JkLnggKyBkeF9Db29yZC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkg
KyBkeF9Db29yZC53O1xuIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICog
ZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQudyA9IHJodztcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRD
b29yZC55O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRG
YWNpbmcpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9
IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkg
OiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xp
c3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3Ry
KHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJ5aW5nLT5hcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0
cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBn
bF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAi
ICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCisgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisg
ICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGlu
Z3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQoreworICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwg
IWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXND
b21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0
ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CisgICAgc3Rk
OjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworCisgICAgaWYg
KCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNo
YWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNoYXIg
KnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNf
MCIgOiAidnNfMl8wIjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5z
dXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKworICAgIElEM0Qx
MEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCB2ZXJ0ZXhITFNM
LmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAgICBJRDNEMTBC
bG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBwaXhlbEhMU0wuY19z
dHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4
QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdl
dEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBw
aXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5h
cnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlm
ICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxS
ZXN1bHQpKTsKKworICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4
ZWxCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAg
ICAgcGl4ZWxCaW5hcnkgPSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAm
JiBtUGl4ZWxFeGVjdXRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRy
aWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdM
X0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJs
ZVZTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBh
cyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisgICAgICAgICAgICAvLyBh
cmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29y
YXRpb24KKyAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfRGVwdGhSYW5nZSIpOworICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKKyAgICAgICAgICAgIG1EeENvb3JkTG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7CisgICAgICAgICAgICBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUi
KTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0Zyb250Q0NXIik7CisgICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKKworICAgICAgICAgICAgY29u
dGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGV0ZXJtaW5l
cyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4
IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAv
LyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAo
QXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJp
YnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRl
QmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAg
IGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1l
LmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0
aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9
ICphdHRyaWJ1dGU7CisKKyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpOworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0
byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEg
YmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJp
YnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAg
ICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhh
dHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qg
c2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBy
b3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAgICAgICAgaW50
IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCBy
b3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5k
ZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBh
Y3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRy
aWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9
IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAg
ICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJp
YnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgo
VmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwg
MSk7CisKKyAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNE
WENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVf
REVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXRE
ZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRp
b24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCisgICAgeworICAgICAgICBEM0RYSEFORExF
IGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJ
bmRleCk7CisKKyAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsK
KyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25z
dGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNo
YWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBp
biB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0
cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9n
cmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIs
IGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5S
ZWdpc3RlckNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRFhIQU5ETEUgcHND
b25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOworCisgICAgICAgICAgICBpZiAocHNDb25zdGFudCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKKworICAgICAgICAgICAg
ICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBs
ZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVt
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVf
Q1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbVVz
ZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZl
cnRleFNhbXBsZXJSYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cygpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQorICAgIHsKKyAgICAgIGNhc2UgRDNEWFBDX1NU
UlVDVDoKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRl
eCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUlu
ZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmll
bGQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUg
ZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRs
ZSwgZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxk
RGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9
IDE7CisKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJs
ZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVz
Y3JpcHRpb25Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAo
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4
KSArICJdIikgOiAiIjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0o
aW5mb0xvZywgc2hhZGVyLCBmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNv
bnN0YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgY2FzZSBEM0RYUENfU0NBTEFS
OgorICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgorICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NP
TFVNTlM6CisgICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6CisgICAgICAgIHJldHVybiBkZWZpbmVV
bmlmb3JtKHNoYWRlciwgY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3Jp
cHRpb24uTmFtZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmlu
ZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50
RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKK3sKKyAgICBVbmlmb3JtICp1
bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7CisKKyAg
ICBpZighdW5pZm9ybSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKKyAgICBHTGludCBsb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKKyAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0t
PnR5cGU7CisKKyAgICBpZiAobG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1
bmlmb3JtOworICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURF
UikgdW5pZm9ybS0+cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOworICAgIGlmIChzaGFkZXIg
PT0gR0xfVkVSVEVYX1NIQURFUikgICB1bmlmb3JtLT52cy5zZXQoY29uc3RhbnREZXNjcmlwdGlv
bik7CisKKyAgICBpZiAobG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB1bmlm
b3JtLT50eXBlID09IHR5cGU7CisgICAgfQorCisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlm
b3JtKTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAt
IDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6
ZTsgKytpKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxv
Y2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RY
Q09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0
b3JzIGFuZCBzY2FsYXJzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVS
XzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRDNEWFBUX0JPT0w6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIs
IF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgorICAgICAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
MywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RY
UFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1u
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93
cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uUm93cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5l
ZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtQmlu
YXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBp
ZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAi
ZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbmFtZTsKK30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6dW5k
ZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQoreworICAgIHN0ZDo6c3Ry
aW5nIG5hbWUgPSBfbmFtZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgYW55IHN0cnVjdHVyZSBmaWVs
ZCBkZWNvcmF0aW9uCisgICAgc2l6ZV90IHBvcyA9IDA7CisgICAgd2hpbGUgKChwb3MgPSBuYW1l
LmZpbmQoIi5fIiwgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAgICBu
YW1lLnJlcGxhY2UocG9zLCAyLCAiLiIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgbGVh
ZGluZyBkZWNvcmF0aW9uCisgICAgaWYgKG5hbWVbMF0gPT0gJ18nKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5hbWUuc3Vic3RyKDEpOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lLmNvbXBhcmUo
MCwgMywgImFyXyIpID09IDApCisgICAgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMyk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBuYW1lOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBp
bnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBmbG9hdCB2ZWN0b3JbRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTICogNF07CisgICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JP
T0xfQ09OU1RBTlRTXTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+
PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAg
ICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDQ7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaiA8IHdpZHRoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmVj
dG9yW2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDog
MS4wZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52
cy5ib29sSW5kZXggPj0gMCkKKyAgICB7CisgICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5p
Zm9ybS0+cHMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
IDogMDsKKyAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgg
Pj0gMCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOworICAgICAgICBpbnQg
Y29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnND
b3VudCkpOworICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RB
TlRTKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJv
b2xJbmRleCA+PSAwKQorICAgIHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25z
dGFudEIodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICB9CisgICAgCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnZzLmZsb2F0NEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHZlY3Rvciwg
dGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7CisgICAgfQorICAgICAgICAKKyAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCisgICAgeworICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4
LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKKyAgICB9Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCk7CisgICAgfQorCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFu
dEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsK
KyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKKyAgICB7
CisgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXggPj0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3Jt
LT5wcy5zYW1wbGVySW5kZXg7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2FtcGxl
ckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUp
OworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxU
ZXh0dXJlVW5pdCA9IHZbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdl
dFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25z
dCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQor
ICAgIHsKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleCA+PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVu
aWZvcm0tPnZzLnNhbXBsZXJJbmRleDsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChz
YW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKKyAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5m
bG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NFUlQoY291bnQgPD0g
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAo
ZmxvYXQpdlsxXSwgMCwgMCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKworICAgIGFwcGx5
VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKKyAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOworCisgICAgICAgIHYgKz0g
MzsKKyAgICB9CisKKyAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZl
Y3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
Uyk7CisgICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJd
LCAoZmxvYXQpdlszXSk7CisKKyAgICAgICAgdiArPSA0OworICAgIH0KKworICAgIGFwcGx5VW5p
Zm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKQorewor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOworICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRl
eCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsK
KyAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0t
PnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZz
LnJlZ2lzdGVyQ291bnQpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlk
YXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCit2b2lkIFByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5h
bWUpCit7CisgICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25l
ZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOwor
ICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBh
dHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZV0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aXZlQXR0cmlidXRl
Kys7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3Qg
Y2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsK
KworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVb
YnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7Cisg
ICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAg
ICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQg
PSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGNvdW50OworfQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhM
ZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmli
dXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmli
dXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1
dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGgg
PSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxl
bmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
bWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1
aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUs
IEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIC8vIFNraXAgb3ZlciBpbnRlcm5h
bCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKKyAgICB1bnNp
Z25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZv
cm1zLnNpemUoKTsgdW5pZm9ybSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09
IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGFjdGl2ZVVuaWZvcm0rKzsKKyAgICB9CisKKyAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlm
b3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVu
aWZvcm1Db3VudCgpCisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6
OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7CisKKyAgICAgICAgaWYg
KG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBz
dHJpbmcgKz0gIlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmlu
Zy5jX3N0cigpLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwor
CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBz
dHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1
bmlmb3JtXS0+YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5
cGU7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7
CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1V
bmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsg
dW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIp
ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5z
aWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5p
Zm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgw
LCAzLCAiZHhfIikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IChp
bnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7CisgICAgICAg
ICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBt
YXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30K
Kwordm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQoreworICAg
IGFwcGx5VW5pZm9ybXMoKTsKKyAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoJmluZm9Mb2cpKQor
ICAgIHsKKyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKQoreworICAgIC8vIGlmIGFu
eSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVz
LCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0
aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFp
bCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhl
IElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorCisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKCk7CisgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01B
WF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytp
KQorICAgIHsKKyAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOwor
ICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBs
ZXJSYW5nZTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tp
XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bml0
ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGluZm9Mb2cpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlw
ZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0
XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5h
cHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRl
eHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKKyAgICB7CisgICAgICAg
IGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVy
IHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICgl
ZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJl
VHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGlu
ZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0g
bVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhE
ZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeENvb3Jk
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwor
fQorCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMg
R0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRlZiBMSUJHTEVTVjJf
UFJPR1JBTV9CSU5BUllfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCisK
KyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3Ry
dWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0K
K3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVu
c2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGJvb2wgaXNB
cnJheSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
X25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOyAg
ICAvLyBVbmRlY29yYXRlZCBuYW1lCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsK
KworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9vbCBkaXJ0eTsKKworICAgIHN0cnVj
dCBSZWdpc3RlckluZm8KKyAgICB7CisgICAgICAgIFJlZ2lzdGVySW5mbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7CisgICAgICAgICAgICBzYW1wbGVySW5kZXgg
PSAtMTsKKyAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOworICAgICAgICAgICAgcmVnaXN0ZXJD
b3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldChjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJT
X0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4
OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJbmRl
eCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3VudCA9
PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICBy
ZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OworICAgICAg
ICB9CisKKyAgICAgICAgaW50IGZsb2F0NEluZGV4OworICAgICAgICBpbnQgc2FtcGxlckluZGV4
OworICAgICAgICBpbnQgYm9vbEluZGV4OworCisgICAgICAgIGludCByZWdpc3RlckNvdW50Owor
ICAgIH07CisKKyAgICBSZWdpc3RlckluZm8gcHM7CisgICAgUmVnaXN0ZXJJbmZvIHZzOworfTsK
KworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVu
aWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBV
bmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgZWxl
bWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAg
dW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworfTsKKworLy8g
VGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUg
dGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KK2NsYXNzIFByb2dyYW1CaW5h
cnkKK3sKKyAgcHVibGljOgorICAgIFByb2dyYW1CaW5hcnkoKTsKKyAgICB+UHJvZ3JhbUJpbmFy
eSgpOworCisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAg
IElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgR0x1aW50
IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1h
bnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICBHTGludCBnZXRTYW1wbGVyTWFw
cGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBU
ZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCk7CisgICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShTYW1w
bGVyVHlwZSB0eXBlKTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmlu
ZyBuYW1lKTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRV
bmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisgICAgYm9v
bCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQg
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
KmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOworCisgICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9j
YXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAg
ICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlv
bigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7
CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMo
KTsKKworICAgIGJvb2wgbGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5k
aW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwg
VmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOworCisg
ICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIEdMaW50IGdldEFj
dGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXpl
LCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9y
bUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworCisgICAg
dm9pZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxl
cnMoSW5mb0xvZyAqaW5mb0xvZyk7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisg
ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8gUmVt
b3ZlIGxlYWRpbmcgdW5kZXJzY29yZQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFByb2dyYW1CaW5hcnkpOworCisgICAgSUQzRDEwQmxvYiAqY29tcGlsZVRvQmlu
YXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2Zp
bGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworCisgICAgaW50IHBhY2tW
YXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRl
eEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpOworCisgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVy
ICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworCisgICAgYm9v
bCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhDb25z
dGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oSW5mb0xv
ZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5k
bGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0
cmluZyBuYW1lID0gIiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpOworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Cisg
ICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBj
b3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1u
YnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBjb25z
dCBHTGJvb2xlYW4gKnYpOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5
IHVzZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRU
YWJsZVBTOworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKKworICAg
IEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgaW50
IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3QgU2FtcGxl
cgorICAgIHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgfTsKKworICAg
IFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIFNhbXBs
ZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07CisgICAg
R0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOworICAgIEdMdWludCBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFy
cmF5OworICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXggbVVuaWZv
cm1JbmRleDsKKworICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKKyAgICBHTGludCBt
RHhEZXB0aExvY2F0aW9uOworICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247CisgICAgR0xpbnQg
bUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247
CisgICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworCisgICAgYm9vbCBtVmFsaWRh
dGVkOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDY4ICs2MywxNDQgQEAgR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbAog
ICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwogfQogCi1S
ZW5kZXJidWZmZXJUZXh0dXJlOjpSZW5kZXJidWZmZXJUZXh0dXJlKFRleHR1cmUgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0
dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6
IG1UYXJnZXQodGFyZ2V0KQoreworICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOworfQorCitS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQoreworICAgIG1U
ZXh0dXJlMkQuc2V0KE5VTEwpOworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94
eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJv
eHkpOworfQorCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKK0lEaXJlY3QzRFN1cmZhY2U5ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKK30KKworLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRE
ZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwo
bVRhcmdldCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworfQorCitHTHNp
emVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICBtVGV4
dHVyZS5zZXQodGV4dHVyZSk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsK
IH0KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTo6flJlbmRlcmJ1ZmZlclRleHR1cmUoKQorR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAg
IG1UZXh0dXJlLnNldChOVUxMKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxG
b3JtYXQoMCk7Cit9CisKK0QzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEQzREZv
cm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEQzREZvcm1hdCgwKTsK
K30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJU
YXJnZXRTZXJpYWwobVRhcmdldCk7Cit9CisKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0
KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwKCkKK3sKKyAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogfQog
CiAvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQg
Zm9yIHJlZmVyZW5jZXMgdmlhCiAvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBI
ZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lk
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQogewotICAgIG1UZXh0dXJlLT5hZGRQcm94eVJlZihwcm94eSk7CisgICAgbVRl
eHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVy
VGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit2b2lkIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKIHsKLSAgICBtVGV4dHVyZS0+cmVsZWFzZVByb3h5KHByb3h5KTsKKyAgICBtVGV4
dHVyZUN1YmVNYXAtPnJlbGVhc2VQcm94eShwcm94eSk7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXJUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXQoKQorLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRSZW5kZXJUYXJn
ZXQobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0
KG1UYXJnZXQpOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTo6
Z2V0RGVwdGhTdGVuY2lsKCkKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewog
ICAgIHJldHVybiBOVUxMOwogfQogCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldFdp
ZHRoKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKDApOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCk7CiB9Ci0gCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmU6OmdldEhlaWdodCgpIGNv
bnN0CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoMCk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCk7CiB9Ci0gCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQo
KSBjb25zdAorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFs
Rm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldEludGVybmFsRm9ybWF0
KCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmJ1ZmZl
clRleHR1cmU6OmdldEQzREZvcm1hdCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
LT5nZXREM0RGb3JtYXQoKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3Jt
YXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKIH0KIAotR0xzaXplaSBSZW5k
ZXJidWZmZXJUZXh0dXJlOjpnZXRTYW1wbGVzKCkgY29uc3QKK0dMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQog
Ci11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTo6Z2V0U2VyaWFsKCkgY29uc3QKK3Vu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsK
KyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdl
dCk7CiB9CiAKKy8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKIFJl
bmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNl
ICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5zdGFuY2Ug
IT0gTlVMTCk7CkBAIC0xNTIsMTEgKzIyOCwxNSBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFz
ZSgpIGNvbnN0CiAgICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKIH0KIAorLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOwog
fQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVw
dGhTdGVuY2lsKCk7CkBAIC0yNDMsMTEgKzMyMywxNSBAQCBSZW5kZXJidWZmZXJTdG9yYWdlOjp+
UmVuZGVyYnVmZmVyU3RvcmFnCiB7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCiB7
CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAg
ICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNiArNDQwLDggQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1
ZmZlcigpCiAgICAgfQogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisv
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1
cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRl
clRhcmdldCkKQEAgLTQyOCw4ICs1MTQsMTUgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhT
dGVuY2lsYnVmZmVyKAogICAgIH0KIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgorLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGly
ZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewor
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRk
UmVmKCk7CisgICAgfQorCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAog
CiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFz
cyBUZXh0dXJlQ3ViZU1hcDsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVy
OwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwpAQCAtNTgsMTIgKzU5LDEyIEBAIGNsYXNzIFJl
bmRlcmJ1ZmZlckludGVyZmFjZQogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJi
dWZmZXJJbnRlcmZhY2UpOwogfTsKIAotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1Ymxp
YyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1
YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZl
clRleHR1cmUoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CiAKLSAgICB2
aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVy
VGV4dHVyZTJEKCk7CiAKICAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpOwogICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
OwpAQCAtODAsOSArODEsMzcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZSA6IHB1YmxpYyBS
ZW5kZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUp
OworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkQpOwog
Ci0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmU+IG1UZXh0dXJlOworICAgIEJpbmRpbmdQb2lu
dGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7CisgICAgR0xlbnVtIG1UYXJnZXQ7Cit9OworCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRl
cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKworICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgp
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKICAgICBHTGVudW0gbVRhcmdldDsK
IH07CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIs
MTQgQEAgdm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLAogewogICAgIGlu
dCBpbmRleCA9IDA7CiAKLSAgICBpZiAobUluZm9Mb2cpCisgICAgaWYgKGJ1ZlNpemUgPiAwKQog
ICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4o
bUluZm9Mb2cpKTsKLSAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0g
ICAgfQorICAgICAgICBpZiAobUluZm9Mb2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4
ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7CisgICAgICAg
ICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKKyAgICAgICAgfQogCi0gICAg
aWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CiAgICAg
fQogCkBAIC0xNDcsMTQgKzE0NywxNCBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFy
ICpzb3VyY2UsCiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAotICAgIGlmIChzb3VyY2UpCisgICAg
aWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXpl
IC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJj
ZSwgaW5kZXgpOwotICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7
CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgfQog
Ci0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hh
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB0
eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKIAogY2xhc3MgU2hhZGVyCiB7
Ci0gICAgZnJpZW5kIFByb2dyYW07CisgICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CiAK
ICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBo
YW5kbGUpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRl
PiBBdHRyaWJ1dGUKIAogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAg
IGZyaWVuZCBQcm9ncmFtOworICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogCiAgIHB1
YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQg
aGFuZGxlKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCAr
MzEsMTIgQEAgdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleAogCiBzdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKIHsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQgfHwKLSAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUKQorICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEQzREZNVF9JTlRaOworICAgIH0KKyAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBEM0RGTVRf
RFhUMTsKICAgICB9CkBAIC03NSw2ICs3OSwxMCBAQCBzdGF0aWMgRDNERk9STUFUIENvbnZlcnRU
ZXh0dXJlRm9ybWF0VHlwCiAKIHN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
RDNERk9STUFUIGZvcm1hdCkKIHsKKyAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHN3aXRjaChmb3JtYXQpCiAgICAg
ewogICAgICAgY2FzZSBEM0RGTVRfTDg6CkBAIC05NSw2ICsxMDMsMjEgQEAgc3RhdGljIGJvb2wg
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEMwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3Rh
dGljIGlubGluZSBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVt
IGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQoreworICAgIERXT1JEIGQzZHVzYWdlID0g
MDsKKworICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICBkM2R1
c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CisgICAgfQorICAgIGVsc2UgaWYoZm9yY2VS
ZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNh
Z2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQorICAgIHsKKyAgICAgICAg
ZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOworICAgIH0KKyAgICByZXR1cm4gZDNk
dXNhZ2U7Cit9CisKIEltYWdlOjpJbWFnZSgpCiB7CiAgICAgbVdpZHRoID0gMDsgCkBAIC0xNTUs
NiArMTc4LDggQEAgdm9pZCBJbWFnZTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgSURpcmVjdDNEVGV4
dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJm
YWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVN
TUVNOworICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKKyAg
ICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKICAgICB7CkBAIC0xNzgsNyArMjAzLDcgQEAgdm9pZCBJbWFnZTo6Y3JlYXRlU3Vy
ZmFjZSgpCiAgICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50OwogICAgICAg
ICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVy
ZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGdl
dEQzREZvcm1hdCgpLAorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVh
dGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwg
TlVMTCwgZDNkRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKQEAgLTI2NCw5ICsyODksMTMgQEAgdm9pZCBJbWFnZTo6dXBkYXRl
U3VyZmFjZShJRGlyZWN0M0RTdXJmYQogewogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VT
dXJmYWNlID0gZ2V0U3VyZmFjZSgpOwogCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1
cmZhY2UpCisgICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3Vy
ZmFjZSkKICAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9IHRyYW5zZm9ybVBpeGVsUmVjdCh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBtSGVpZ2h0KTsKKyAgICAgICAgUkVDVCByZWN0
OworICAgICAgICByZWN0LmxlZnQgPSB4b2Zmc2V0OworICAgICAgICByZWN0LnRvcCA9IHlvZmZz
ZXQ7CisgICAgICAgIHJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgIHJlY3Qu
Ym90dG9tID0geW9mZnNldCArIGhlaWdodDsKIAogICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNE
UE9PTF9NQU5BR0VEKQogICAgICAgICB7CkBAIC0yODQsMTIgKzMxMywyNCBAQCB2b2lkIEltYWdl
Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhCiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCBy
ZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGgg
cGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0
IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3
ZWVuIGVhY2ggbGluZS4KKy8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCiB2b2lk
IEltYWdlOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gLUNvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsK
LSAgICBpbnB1dCA9ICgoY2hhciopaW5wdXQpIC0gaW5wdXRQaXRjaCAqIChoZWlnaHQgLSAxKTsK
KyAgICBSRUNUIGxvY2tSZWN0ID0KKyAgICB7CisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCisg
ICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAorICAgIH07CisKKyAgICBE
M0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQs
ICZsb2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0
aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKIAogICAgIHN3aXRjaCAodHlwZSkK
ICAgICB7CkBAIC0yOTcsMjkgKzMzOCwzNiBAQCB2b2lkIEltYWdlOjpsb2FkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGluCiAgICAgICAgIHN3aXRjaCAobUZvcm1hdCkKICAgICAgICAgewogICAgICAg
ICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0
cHV0KTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvYWRBbHBoYURh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZURhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CisgICAgICAgICAgICBsb2FkTHVt
aW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQsIGdldEQzREZvcm1hdCgpID09
IEQzREZNVF9BOEw4KTsKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBn
ZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBv
dXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgogICAgICAgICAgICAgaWYgKHN1cHBvcnRz
U1NFMigpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRh
U1NFMih4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFT
U0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAg
bG9hZEJHUkFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRCR1JBRGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgfQpAQCAtMzI4LDcgKzM3Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gs
IG91dHB1dCk7CisgICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQpAQCAt
MzM3LDcgKzM4NSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4K
ICAgICAgICAgc3dpdGNoIChtRm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9S
R0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CkBAIC0zNDYsNyArMzk0LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbgogICAgICAgICBzd2l0
Y2ggKG1Gb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgICBsb2FkUkdCQTU1NTFEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGxvYWRS
R0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM1NiwxOSArNDA0LDE5IEBAIHZvaWQgSW1h
Z2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8v
IGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkn
cmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAg
bG9hZEFscGhhRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwor
ICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9h
dERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
ICAgbG9hZFJHQkFGbG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJH
QkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KQEAgLTM3OCwyOCArNDI2LDMwIEBAIHZvaWQgSW1h
Z2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW4KICAgICAgICAgewogICAgICAgICAgIC8v
IGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkn
cmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAogICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxv
YXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAg
ICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
ICAgICB9CisKKyAgICB1bmxvY2soKTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKK3ZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTQwOCw3ICs0NTgsNyBAQCB2
b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsCiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDE5LDcgKzQ2OSw0NyBAQCB2b2lkIEltYWdlOjpsb2FkQWxw
aGFEYXRhKEdMaW50IHhvZmZzZXQsCiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkQWxwaGFG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKKyAg
ICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOworICAgIF9fbTEyOGkgemVyb1dpZGUgPSBfbW1f
c2V0emVyb19zaTEyOCgpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
KyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOworCisgICAgICAgIGludCB4OworICAgICAgICAvLyBNYWtlIG91dHB1
dCB3cml0ZXMgYWxpZ25lZAorICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KCZkZXN0W3hdKSAmIDB4RikgIT0gMCAmJiB4IDwgd2lkdGgpOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNv
dXJjZVt4XSkgPDwgMjQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0
aDsgeCArPSA4KQorICAgICAgICB7CisgICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBf
bW1fbG9hZGxfZXBpNjQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4
XSkpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2Ug
dGhlIGxvd2VyIGJ5dGUgdG8gemVybworICAgICAgICAgICAgc291cmNlRGF0YSA9IF9tbV91bnBh
Y2tsb19lcGk4KHplcm9XaWRlLCBzb3VyY2VEYXRhKTsKKyAgICAgICAgICAgIC8vIEludGVybGVh
dmUgZWFjaCAxNmJpdCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybworICAg
ICAgICAgICAgX19tMTI4aSBsbyA9IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNl
RGF0YSk7CisgICAgICAgICAgICBfX20xMjhpIGhpID0gX21tX3VucGFja2hpX2VwaTE2KHplcm9X
aWRlLCBzb3VyY2VEYXRhKTsKKworICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJw
cmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgbG8pOworICAgICAgICAgICAgX21tX3N0b3Jl
X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3ggKyA0XSksIGhpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVtYWluZGVyCisgICAgICAgIGZvciAo
OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CkBAIC00MjgsNyArNTE4LDcg
QEAgdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMaW50IHhvZgogICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwpAQCAtNDM5
LDcgKzUyOSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTGludCB4b2YKICAg
ICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIElt
YWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAog
ewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNDQ4LDcgKzUz
OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xpbnQKICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IDA7CkBAIC00NTksMTcgKzU0OSwxNiBAQCB2b2lkIEltYWdlOjps
b2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGRlc3RCeXRlc1Bl
clBpeGVsID0gbmF0aXZlPyAxOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKIAogICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3Jt
YXQKICAgICAgICAgewpAQCAtNDg4LDcgKzU3Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhKEdMaW50IHhvZmYKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpA
QCAtNDk3LDcgKzU4Niw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xp
bnQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3hdOwpAQCAtNTA4LDcgKzU5Nyw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1p
bmFuY2VGbG9hdERhdGEoR0xpbnQKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNTE3LDcgKzYwNiw3IEBAIHZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEcKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4XTsKQEAgLTUyOCwxNyArNjE3LDE2IEBAIHZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VI
YWxmRmxvYXREYXRhKEcKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBo
YURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZGVzdEJ5dGVz
UGVyUGl4ZWwgPSBuYXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiBkZXN0Qnl0ZXNQZXJQaXhlbDsKKyAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoOwogICAgICAgICAKICAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGlu
YXRpb24gZm9ybWF0CiAgICAgICAgIHsKQEAgLTU1Nyw3ICs2NDUsNyBAQCB2b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMaW50CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2Fk
THVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKQEAgLTU2Niw3ICs2NTQsNyBAQCB2b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC01NzcsNyAr
NjY1LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKAogICAgIH0K
IH0KIAotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3Zv
aWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7CkBAIC01ODYsNyArNjc0LDcgQEAgdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFs
cGhhSGFsZkZsb2F0RAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAg
ewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
ICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsK
QEAgLTU5Nyw3ICs2ODUsNyBAQCB2b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxv
YXRECiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJ
bWFnZTo6bG9hZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtNjA2LDcgKzY5NCw3IEBAIHZvaWQg
SW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnMKICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDJdOwpAQCAtNjE3LDcgKzcwNSw3IEBAIHZvaWQgSW1h
Z2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6
OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwpA
QCAtNjI2LDcgKzcxNCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMaW50IHhvZmZz
ZXQKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7CiAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKICAgICAgICAgewogICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKQEAgLTYzOCw3ICs3MjYsNyBAQCB2b2lk
IEltYWdlOjpsb2FkUkdCNTY1RGF0YShHTGludCB4b2Zmc2V0CiAgICAgfQogfQogCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
QEAgLTY0Nyw3ICs3MzUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhv
ZmZzCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Cisg
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwpAQCAtNjU4LDcgKzc0Niw3IEBAIHZvaWQgSW1hZ2U6
OmxvYWRSR0JGbG9hdERhdGEoR0xpbnQgeG9mZnMKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6Omxv
YWRSR0JIYWxmRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOwpAQCAtNjY3LDcgKzc1NSw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxm
RmxvYXREYXRhKEdMaW50IHgKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDgpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAq
IDMgKyAwXTsKQEAgLTY3OCw3ICs3NjYsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0
RGF0YShHTGludCB4CiAgICAgfQogfQogCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNT
RTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCit2b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7CkBA
IC02ODgsNyArNzc2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMaW50
IAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7CiAg
ICAgICAgIGludCB4ID0gMDsKIAogICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25l
ZApAQCAtNzIwLDcgKzgwOCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihH
TGludCAKICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAg
IGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKQEAgLTcyOCw3ICs4MTYsNyBAQCB2
b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2ZmCiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNCk7CisgICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKIAogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKQEAgLTczOCw3ICs4MjYsNyBAQCB2b2lk
IEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTGludCB4b2ZmCiAgICAgfQogfQogCi12b2lkIElt
YWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKQEAgLTc0Nyw3ICs4MzUsNyBAQCB2b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
KEdMaW50IHhvZmZzCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7
CiAgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CkBAIC03NTksNyArODQ3
LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTGludCB4b2ZmcwogICAgIH0KIH0K
IAotdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKK3ZvaWQgSW1hZ2U6OmxvYWRSR0JB
NTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7CkBAIC03NjgsNyArODU2LDcgQEAgdm9pZCBJbWFnZTo6bG9hZFJH
QkE1NTUxRGF0YShHTGludCB4b2ZmcwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Cisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAg
ICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwpAQCAt
NzgwLDcgKzg2OCw3IEBAIHZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xpbnQgeG9mZnMK
ICAgICB9CiB9CiAKLXZvaWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAogewogICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwpAQCAtNzg5LDEyICs4NzcsMTIgQEAgdm9pZCBJbWFnZTo6
bG9hZFJHQkFGbG9hdERhdGEoR0xpbnQgeG9mZgogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQ
aXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxm
bG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7CiAgICAgfQog
fQogCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOjps
b2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwpAQCAtODAzLDEyICs4OTEsMTIgQEAg
dm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhKEdMaW50IAogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogODsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwogICAgICAgICBt
ZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwogICAgIH0KIH0KIAotdm9pZCBJbWFnZTo6
bG9hZEJHUkFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0CiB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKQEAgLTgxNywy
ODMgKzkwNSwzNyBAQCB2b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgCiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIHNvdXJj
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7CiAgICAgfQogfQogCiB2
b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QgewotICAgIHN3aXRjaCAoZ2V0RDNERm9ybWF0KCkp
Ci0gICAgewotICAgICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICAgIGxvYWREWFQxRGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRDNERk1U
X0RYVDM6Ci0gICAgICAgICAgbG9hZERYVDNEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgICBsb2FkRFhUNURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgRmxpcENvcHlEWFQxQmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1
bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQxIGJsb2NrIGxheW91dCBpczoKLSAgLy8g
WzAtMV0gY29sb3IwLgotICAvLyBbMi0zXSBjb2xvcjEuCi0gIC8vIFs0LTddIGNvbG9yIGJpdG1h
cCwgMiBiaXRzIHBlciBwaXhlbC4KLSAgLy8gU28gZWFjaCBvZiB0aGUgNC03IGJ5dGVzIHJlcHJl
c2VudHMgb25lIGxpbmUsIGZsaXBwaW5nIGEgYmxvY2sgaXMganVzdAotICAvLyBmbGlwcGluZyB0
aG9zZSBieXRlcy4KLQotICAvLyBGaXJzdCAzMi1iaXRzIGlzIHR3byBSR0I1NjUgY29sb3JzIHNo
YXJlZCBieSB0aWxlIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIG1vZGlmaWVkLgotICBkZXN0WzBd
ID0gc291cmNlWzBdOwotCi0gIC8vIFNlY29uZCAzMi1iaXRzIGNvbnRhaW5zIDQgcm93cyBvZiA0
IDItYml0IGludGVycG9sYW50cyBiZXR3ZWVuIHRoZSBjb2xvcnMuIEFsbCByb3dzIHNob3VsZCBi
ZSBmbGlwcGVkLgotICBkZXN0WzFdID0gKHNvdXJjZVsxXSA+PiAyNCkgfAotICAgICAgICAgICAg
KChzb3VyY2VbMV0gPDwgOCkgJiAweDAwRkYwMDAwKSB8Ci0gICAgICAgICAgICAoKHNvdXJjZVsx
XSA+PiA4KSAmIDB4MDAwMEZGMDApIHwKLSAgICAgICAgICAgIChzb3VyY2VbMV0gPDwgMjQpOwot
fQotCi0vLyBGbGlwcyB0aGUgZmlyc3QgMiBsaW5lcyBvZiBhIERYVDEgYmxvY2sgaW4gdGhlIHkg
ZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQxQmxvY2tIYWxmKGNvbnN0IHVuc2ln
bmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBh
Ym92ZS4KLSAgZGVzdFswXSA9IHNvdXJjZVswXTsKLSAgZGVzdFsxXSA9ICgoc291cmNlWzFdIDw8
IDgpICYgMHgwMDAwRkYwMCkgfAotICAgICAgICAgICAgKChzb3VyY2VbMV0gPj4gOCkgJiAweDAw
MDAwMEZGKTsKLX0KLQotLy8gRmxpcHMgYSBmdWxsIERYVDMgYmxvY2sgaW4gdGhlIHkgZGlyZWN0
aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQzQmxvY2tGdWxsKGNvbnN0IHVuc2lnbmVkIGlu
dCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQzIGJsb2NrIGxheW91
dCBpczoKLSAgLy8gWzAtN10gIGFscGhhIGJpdG1hcCwgNCBiaXRzIHBlciBwaXhlbC4KLSAgLy8g
WzgtMTVdIGEgRFhUMSBibG9jay4KLQotICAvLyBGaXJzdCBhbmQgU2Vjb25kIDMyIGJpdHMgYXJl
IDRiaXQgcGVyIHBpeGVsIGFscGhhIGFuZCBuZWVkIHRvIGJlIGZsaXBwZWQuCi0gIGRlc3RbMF0g
PSAoc291cmNlWzFdID4+IDE2KSB8IChzb3VyY2VbMV0gPDwgMTYpOwotICBkZXN0WzFdID0gKHNv
dXJjZVswXSA+PiAxNikgfCAoc291cmNlWzBdIDw8IDE2KTsKLQotICAvLyBBbmQgZmxpcCB0aGUg
RFhUMSBibG9jayB1c2luZyB0aGUgYWJvdmUgZnVuY3Rpb24uCi0gIEZsaXBDb3B5RFhUMUJsb2Nr
RnVsbChzb3VyY2UgKyAyLCBkZXN0ICsgMik7Ci19Ci0KLS8vIEZsaXBzIHRoZSBmaXJzdCAyIGxp
bmVzIG9mIGEgRFhUMyBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24uCi1zdGF0aWMgdm9pZCBGbGlw
Q29weURYVDNCbG9ja0hhbGYoY29uc3QgdW5zaWduZWQgaW50KiBzb3VyY2UsIHVuc2lnbmVkIGlu
dCogZGVzdCkgewotICAvLyBTZWUgbGF5b3V0IGFib3ZlLgotICBkZXN0WzBdID0gKHNvdXJjZVsx
XSA+PiAxNikgfCAoc291cmNlWzFdIDw8IDE2KTsKLSAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNv
dXJjZSArIDIsIGRlc3QgKyAyKTsKLX0KLQotLy8gRmxpcHMgYSBmdWxsIERYVDUgYmxvY2sgaW4g
dGhlIHkgZGlyZWN0aW9uLgotc3RhdGljIHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tGdWxsKGNvbnN0
IHVuc2lnbmVkIGludCogc291cmNlLCB1bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gQSBEWFQ1
IGJsb2NrIGxheW91dCBpczoKLSAgLy8gWzBdICAgIGFscGhhMC4KLSAgLy8gWzFdICAgIGFscGhh
MS4KLSAgLy8gWzItN10gIGFscGhhIGJpdG1hcCwgMyBiaXRzIHBlciBwaXhlbC4KLSAgLy8gWzgt
MTVdIGEgRFhUMSBibG9jay4KLQotICAvLyBUaGUgYWxwaGEgYml0bWFwIGRvZXNuJ3QgZWFzaWx5
IG1hcCBsaW5lcyB0byBieXRlcywgc28gd2UgaGF2ZSB0bwotICAvLyBpbnRlcnByZXQgaXQgY29y
cmVjdGx5LiAgRXh0cmFjdGVkIGZyb20KLSAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL3JlZ2lz
dHJ5L3NwZWNzL0VYVC90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMudHh0IDoKLSAgLy8KLSAgLy8g
ICBUaGUgNiAiYml0cyIgYnl0ZXMgb2YgdGhlIGJsb2NrIGFyZSBkZWNvZGVkIGludG8gb25lIDQ4
LWJpdCBpbnRlZ2VyOgotICAvLwotICAvLyAgICAgYml0cyA9IGJpdHNfMCArIDI1NiAqIChiaXRz
XzEgKyAyNTYgKiAoYml0c18yICsgMjU2ICogKGJpdHNfMyArCi0gIC8vICAgICAgICAgICAgICAg
ICAgIDI1NiAqIChiaXRzXzQgKyAyNTYgKiBiaXRzXzUpKSkpCi0gIC8vCi0gIC8vICAgYml0cyBp
cyBhIDQ4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCBmcm9tIHdoaWNoIGEgdGhyZWUtYml0IGNvbnRy
b2wgY29kZQotICAvLyAgIGlzIGV4dHJhY3RlZCBmb3IgYSB0ZXhlbCBhdCBsb2NhdGlvbiAoeCx5
KSBpbiB0aGUgYmxvY2sgdXNpbmc6Ci0gIC8vCi0gIC8vICAgICAgIGNvZGUoeCx5KSA9IGJpdHNb
MyooNCp5K3gpKzEuLjMqKDQqeSt4KSswXQotICAvLwotICAvLyAgIHdoZXJlIGJpdCA0NyBpcyB0
aGUgbW9zdCBzaWduaWZpY2FudCBhbmQgYml0IDAgaXMgdGhlIGxlYXN0Ci0gIC8vICAgc2lnbmlm
aWNhbnQgYml0LgotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VCeXRlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oc291cmNl
KSk7Ci0gIHVuc2lnbmVkIGNoYXIqIGRlc3RCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihzdGF0aWNfY2FzdDx2b2lkKj4oZGVzdCkpOwotICB1bnNpZ25lZCBpbnQgbGluZV8wXzEg
PSBzb3VyY2VCeXRlc1syXSArIDI1NiAqIChzb3VyY2VCeXRlc1szXSArIDI1NiAqIHNvdXJjZUJ5
dGVzWzRdKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMl8zID0gc291cmNlQnl0ZXNbNV0gKyAyNTYg
KiAoc291cmNlQnl0ZXNbNl0gKyAyNTYgKiBzb3VyY2VCeXRlc1s3XSk7Ci0gIC8vIHN3YXAgbGlu
ZXMgMCBhbmQgMSBpbiBsaW5lXzBfMS4KLSAgdW5zaWduZWQgaW50IGxpbmVfMV8wID0gKChsaW5l
XzBfMSAmIDB4MDAwZmZmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxp
bmVfMF8xICYgMHhmZmYwMDApID4+IDEyKTsKLSAgLy8gc3dhcCBsaW5lcyAyIGFuZCAzIGluIGxp
bmVfMl8zLgotICB1bnNpZ25lZCBpbnQgbGluZV8zXzIgPSAoKGxpbmVfMl8zICYgMHgwMDBmZmYp
IDw8IDEyKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZV8yXzMgJiAweGZmZjAw
MCkgPj4gMTIpOwotICBkZXN0Qnl0ZXNbMF0gPSBzb3VyY2VCeXRlc1swXTsKLSAgZGVzdEJ5dGVz
WzFdID0gc291cmNlQnl0ZXNbMV07Ci0gIGRlc3RCeXRlc1syXSA9IGxpbmVfM18yICYgMHhmZjsK
LSAgZGVzdEJ5dGVzWzNdID0gKGxpbmVfM18yICYgMHhmZjAwKSA+PiA4OwotICBkZXN0Qnl0ZXNb
NF0gPSAobGluZV8zXzIgJiAweGZmMDAwMCkgPj4gMTY7Ci0gIGRlc3RCeXRlc1s1XSA9IGxpbmVf
MV8wICYgMHhmZjsKLSAgZGVzdEJ5dGVzWzZdID0gKGxpbmVfMV8wICYgMHhmZjAwKSA+PiA4Owot
ICBkZXN0Qnl0ZXNbN10gPSAobGluZV8xXzAgJiAweGZmMDAwMCkgPj4gMTY7Ci0KLSAgLy8gQW5k
IGZsaXAgdGhlIERYVDEgYmxvY2sgdXNpbmcgdGhlIGFib3ZlIGZ1bmN0aW9uLgotICBGbGlwQ29w
eURYVDFCbG9ja0Z1bGwoc291cmNlICsgMiwgZGVzdCArIDIpOwotfQotCi0vLyBGbGlwcyB0aGUg
Zmlyc3QgMiBsaW5lcyBvZiBhIERYVDUgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uLgotc3RhdGlj
IHZvaWQgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKGNvbnN0IHVuc2lnbmVkIGludCogc291cmNlLCB1
bnNpZ25lZCBpbnQqIGRlc3QpIHsKLSAgLy8gU2VlIGxheW91dCBhYm92ZS4KLSAgY29uc3QgdW5z
aWduZWQgY2hhciogc291cmNlQnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHNvdXJjZSkpOwotICB1bnNpZ25lZCBjaGFyKiBk
ZXN0Qnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+
KGRlc3QpKTsKLSAgdW5zaWduZWQgaW50IGxpbmVfMF8xID0gc291cmNlQnl0ZXNbMl0gKyAyNTYg
KiAoc291cmNlQnl0ZXNbM10gKyAyNTYgKiBzb3VyY2VCeXRlc1s0XSk7Ci0gIHVuc2lnbmVkIGlu
dCBsaW5lXzFfMCA9ICgobGluZV8wXzEgJiAweDAwMGZmZikgPDwgMTIpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChsaW5lXzBfMSAmIDB4ZmZmMDAwKSA+PiAxMik7Ci0gIGRlc3RCeXRl
c1swXSA9IHNvdXJjZUJ5dGVzWzBdOwotICBkZXN0Qnl0ZXNbMV0gPSBzb3VyY2VCeXRlc1sxXTsK
LSAgZGVzdEJ5dGVzWzJdID0gbGluZV8xXzAgJiAweGZmOwotICBkZXN0Qnl0ZXNbM10gPSAobGlu
ZV8xXzAgJiAweGZmMDApID4+IDg7Ci0gIGRlc3RCeXRlc1s0XSA9IChsaW5lXzFfMCAmIDB4ZmYw
MDAwKSA+PiAxNjsKLSAgRmxpcENvcHlEWFQxQmxvY2tIYWxmKHNvdXJjZSArIDIsIGRlc3QgKyAy
KTsKLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsKICAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7CiAg
ICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCB8
fCB3aWR0aCA9PSAyIHx8IHdpZHRoID09IDEpOwotICAgIEFTU0VSVChpbnB1dFBpdGNoICUgOCA9
PSAwKTsKLSAgICBBU1NFUlQob3V0cHV0UGl0Y2ggJSA4ID09IDApOwotCi0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+
KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludCo+KG91dHB1dCk7CiAKLSAgICAvLyBSb3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlz
IGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NBY3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0g
ICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jvc3MgKiAyOworICAgIFJFQ1QgbG9ja1JlY3Qg
PSB7CisgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwg
eW9mZnNldCArIGhlaWdodAorICAgIH07CiAKLSAgICBzd2l0Y2ggKGhlaWdodCkKKyAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZs
b2NrUmVjdCk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9jawotICAg
ICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFt4
ICsgMV0gPSBzb3VyY2VbeCArIDFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50c0Fj
cm9zczsgeCArPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZsaXBDb3B5RFhU
MUJsb2NrSGFsZihzb3VyY2UgKyB4LCBkZXN0ICsgeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChoZWlnaHQg
JSA0ID09IDApOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQgLyA0OyAr
K3kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgaW50c0Fjcm9zczsgeCArPSAyKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgRmxpcENvcHlEWFQxQmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZERYVDNEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLSAg
ICBBU1NFUlQod2lkdGggJSA0ID09IDAgfHwgd2lkdGggPT0gMiB8fCB3aWR0aCA9PSAxKTsKLSAg
ICBBU1NFUlQoaW5wdXRQaXRjaCAlIDE2ID09IDApOwotICAgIEFTU0VSVChvdXRwdXRQaXRjaCAl
IDE2ID09IDApOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGlucHV0KTsKLSAgICB1bnNpZ25lZCBpbnQgKmRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KG91dHB1dCk7Ci0KLSAgICAvLyBS
b3VuZCB3aWR0aCB1cCBpbiBjYXNlIGl0IGlzIGxlc3MgdGhhbiA0LgotICAgIGludCBibG9ja3NB
Y3Jvc3MgPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IGludHNBY3Jvc3MgPSBibG9ja3NBY3Jv
c3MgKiA0OwotCi0gICAgc3dpdGNoIChoZWlnaHQpCi0gICAgewotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBqdXN0IGNvcHkgdGhlIGJsb2NrCi0gICAgICAg
ICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAx
XSA9IHNvdXJjZVt4ICsgMV07Ci0gICAgICAgICAgICAgICAgZGVzdFt4ICsgMl0gPSBzb3VyY2Vb
eCArIDJdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDNdID0gc291cmNlW3ggKyAzXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGludHNBY3Jvc3M7IHggKz0gNCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBGbGlwQ29weURYVDNCbG9ja0hhbGYoc291cmNlICsgeCwgZGVz
dCArIHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoaGVpZ2h0ICUgNCA9PSAwKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IC8gNDsgKyt5KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICog
MTYpOwogCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4
ICs9IDQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgRmxpcENvcHlEWFQz
QmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENv
bXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKKyAgICBHTHNpemVp
IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKKyAg
ICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByb3dzOyArK2kpCisgICAgeworICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9j
a2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAq
IGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKICAgICB9Ci19CiAKLXZvaWQgSW1hZ2U6OmxvYWRE
WFQ1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQg
PT0gMCk7Ci0gICAgQVNTRVJUKHdpZHRoICUgNCA9PSAwIHx8IHdpZHRoID09IDIgfHwgd2lkdGgg
PT0gMSk7Ci0gICAgQVNTRVJUKGlucHV0UGl0Y2ggJSAxNiA9PSAwKTsKLSAgICBBU1NFUlQob3V0
cHV0UGl0Y2ggJSAxNiA9PSAwKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihpbnB1dCk7Ci0gICAgdW5zaWdu
ZWQgaW50ICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihvdXRwdXQpOwot
Ci0gICAgLy8gUm91bmQgd2lkdGggdXAgaW4gY2FzZSBpdCBpcyBsZXNzIHRoYW4gNC4KLSAgICBp
bnQgYmxvY2tzQWNyb3NzID0gKHdpZHRoICsgMykgLyA0OwotICAgIGludCBpbnRzQWNyb3NzID0g
YmxvY2tzQWNyb3NzICogNDsKLQotICAgIHN3aXRjaCAoaGVpZ2h0KQotICAgIHsKLSAgICAgICAg
Y2FzZSAxOgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9
IDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBibG9j
awotICAgICAgICAgICAgICAgIGRlc3RbeF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAg
ZGVzdFt4ICsgMV0gPSBzb3VyY2VbeCArIDFdOwotICAgICAgICAgICAgICAgIGRlc3RbeCArIDJd
ID0gc291cmNlW3ggKyAyXTsKLSAgICAgICAgICAgICAgICBkZXN0W3ggKyAzXSA9IHNvdXJjZVt4
ICsgM107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAy
OgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbnRzQWNyb3NzOyB4ICs9IDQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmxpcENvcHlEWFQ1QmxvY2tIYWxmKHNvdXJj
ZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGhlaWdodCAlIDQgPT0gMCk7Ci0gICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodCAvIDQ7ICsreSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDE2KTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW50
c0Fjcm9zczsgeCArPSA0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
RmxpcENvcHlEWFQ1QmxvY2tGdWxsKHNvdXJjZSArIHgsIGRlc3QgKyB4KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgdW5s
b2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9y
IG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0
ZXh0dXJlcwpAQCAtMTEyMSw5ICs5NjMsOCBAQCB2b2lkIEltYWdlOjpjb3B5KEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvCiAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAg
ICB9CiAKLSAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICBpbnQgZGVzdFlPZmZzZXQgPSB0
cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBtSGVpZ2h0KTsKLSAgICBSRUNU
IGRlc3RSZWN0ID0ge3hvZmZzZXQsIGRlc3RZT2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIGRlc3RZ
T2Zmc2V0ICsgaGVpZ2h0fTsKKyAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRo
LCB5ICsgaGVpZ2h0fTsKKyAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhv
ZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodH07CiAKICAgICBpZiAoaXNSZW5kZXJhYmxl
Rm9ybWF0KCkpCiAgICAgewpAQCAtMTI2Nyw5ICsxMTA4LDkgQEAgdm9pZCBJbWFnZTo6Y29weShH
TGludCB4b2Zmc2V0LCBHTGludCB5bwogICAgIG1EaXJ0eSA9IHRydWU7CiB9CiAKLVRleHR1cmVT
dG9yYWdlOjpUZXh0dXJlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKLSAgICA6IG1SZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KSwKLSAgICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4
dHVyZVBvb2wobVJlbmRlclRhcmdldCkpLAorVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdl
KERXT1JEIHVzYWdlKQorICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKKyAgICAgIG1EM0RQb29sKGdl
dERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKICAgICAgIG1UZXh0dXJlU2VyaWFs
KGlzc3VlVGV4dHVyZVNlcmlhbCgpKQogewogfQpAQCAtMTI4MCw3ICsxMTIxLDcgQEAgVGV4dHVy
ZVN0b3JhZ2U6On5UZXh0dXJlU3RvcmFnZSgpCiAKIGJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzUmVu
ZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKKyAgICByZXR1
cm4gKG1EM0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNU
RU5DSUwpKSAhPSAwOwogfQogCiBib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBjb25z
dApAQCAtMTI5Myw2ICsxMTM0LDExIEBAIEQzRFBPT0wgVGV4dHVyZVN0b3JhZ2U6OmdldFBvb2wo
KSBjb25zdAogICAgIHJldHVybiBtRDNEUG9vbDsKIH0KIAorRFdPUkQgVGV4dHVyZVN0b3JhZ2U6
OmdldFVzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUQzRFVzYWdlOworfQorCiB1bnNpZ25l
ZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAogewogICAgIHJl
dHVybiBtVGV4dHVyZVNlcmlhbDsKQEAgLTE0NTAsMTUgKzEyOTYsNyBAQCB2b2lkIFRleHR1cmU6
OnNldEltYWdlKEdMaW50IHVucGFja0FsaWduCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQog
ICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVE
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAs
IGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCks
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpbWFnZS0+
bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwogICAgIH0KIH0KQEAgLTE0NjcsNTIgKzEzMDUsMTYgQEAgdm9pZCBUZXh0
dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaQogewogICAgIGlmIChwaXhlbHMgIT0gTlVM
TCkKICAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBpbWFnZS0+bG9jaygmbG9ja2VkLCBOVUxMKTsKLQotICAgICAgICBpZiAoU1VD
Q0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbnB1dFBpdGNoID0g
Q29tcHV0ZUNvbXByZXNzZWRQaXRjaChpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEZvcm1h
dCgpKTsKLSAgICAgICAgICAgIGludCBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUo
aW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldEZvcm1hdCgp
KTsKLSAgICAgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdl
dFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgLWlucHV0UGl0Y2gsIHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihwaXhlbHMpICsgaW5wdXRTaXplIC0gaW5wdXRQaXRjaCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgaW1hZ2UtPnVubG9jaygpOwotICAgICAgICB9
Ci0KKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lk
dGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwogICAgIH0KIH0KIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCBJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltYWdlLT5n
ZXRXaWR0aCgpIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWFnZS0+Z2V0SGVpZ2h0KCkpCi0gICAg
ewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChJc0NvbXByZXNzZWQoaW1hZ2UtPmdldEZvcm1hdCgpKSkKLSAg
ICB7Ci0gICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW1hZ2UtPmdldEZvcm1hdCgpKQot
ICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltYWdl
LT5sb2NrKCZsb2NrZWQsIE5VTEwpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHRyYW5zZm9y
bVBpeGVsWU9mZnNldCh5b2Zmc2V0LCBoZWlnaHQsIGltYWdlLT5nZXRIZWlnaHQoKSksIHdpZHRo
LCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQor
ICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMTUyMSwzNyArMTMyMyw5IEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1h
Z2UoR0xpbnQgeG9mZnNldCwgR0wKIAogYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMs
IEltYWdlICppbWFnZSkKIHsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1hZ2UtPmdldFdp
ZHRoKCkgfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltYWdlLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0g
ICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBnZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgIHsKLSAg
ICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgUkVDVCB1
cGRhdGVSZWdpb247Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKLSAgICAg
ICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICB1cGRhdGVS
ZWdpb24uYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgdXBkYXRlUmVnaW9uLnRv
cCA9IHlvZmZzZXQ7Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGltYWdlLT5sb2NrKCZsb2NrZWQsICZ1cGRhdGVSZWdpb24pOwotCi0g
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAg
ICAgICAgICAgaW50IGlucHV0U2l6ZSA9IENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQpOwotICAgICAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zm
c2V0LCB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQoeW9mZnNldCwgaGVpZ2h0LCBpbWFnZS0+Z2V0SGVp
Z2h0KCkpLCB3aWR0aCwgaGVpZ2h0LCAtaW5wdXRQaXRjaCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KHBpeGVscykgKyBpbnB1dFNpemUgLSBpbnB1dFBpdGNoLCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWFnZS0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLQorICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBA
IC0xNjY3LDIzICsxNDQxLDI3IEBAIGJvb2wgVGV4dHVyZTo6Y29weVRvUmVuZGVyVGFyZ2V0KElE
aXJlY3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3Jh
Z2UodHJ1ZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVT
ZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4
dHVyZTkgKnN1cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJp
YWwoKSkKIHsKICAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwogfQogCi1UZXh0dXJlU3Rv
cmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCByZW5kZXJUYXJnZXQpCi0gICAgOiBUZXh0dXJlU3Rv
cmFnZShyZW5kZXJUYXJnZXQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKGlu
dCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwo
UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKIHsKLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQogICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBsZXZl
bHMsIGlzUmVuZGVyVGFyZ2V0KCkgPyBEM0RVU0FHRV9SRU5ERVJUQVJHRVQgOiAwLCBmb3JtYXQs
IGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3Vs
ZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0
aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTE2OTUsNiArMTQ3
Myw4IEBAIFRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKICAgICB9CiB9CiAK
Ky8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9y
YWdlMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpCiB7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMTc3OCwxOSArMTU1OCwyMCBAQCBHTHNpemVpIFRleHR1
cmUyRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsCiAgICAgICAgIHJldHVybiAwOwogfQogCi1HTGVu
dW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CitHTGVudW0gVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUlt
YWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCk7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFR5cGUo
KSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCk7CisgICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1hdCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEdMX05PTkU7CiB9CiAKLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNv
bnN0CitEM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgIGlmIChs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2xldmVsXS5nZXREM0RGb3JtYXQoKTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBEM0RGTVRfVU5LTk9XTjsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSkKQEAgLTE5MzgsMTkgKzE3MTksMTcgQEAgdm9pZCBUZXh0dXJlMkQ6OmNv
cHlJbWFnZShHTGludCBsZXZlbCwgRwogCiAgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdo
dCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBS
RUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwg
c291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJjZS0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IGNsYW1w
KHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgp
KTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3VyY2VSZWN0LnJpZ2h0
LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwgMCwgc291cmNlLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIEdMaW50IGRlc3RZ
T2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KDAsIGhlaWdodCwgbUltYWdlQXJyYXlbbGV2
ZWxdLmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0g
eCArIHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwo
bGV2ZWwpOwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3Jt
YXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCkt
PmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwogICAg
ICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTk5MCwxOSArMTc2OSwxOCBAQCB2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51
bSB0YXJnCiAKICAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0gICAg
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAsIHNvdXJj
ZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0
LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFtcChzb3Vy
Y2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkpOwot
ICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJvdHRvbSwg
MCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICBS
RUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsK
IAotICAgICAgICAgICAgR0xpbnQgZGVzdFlPZmZzZXQgPSB0cmFuc2Zvcm1QaXhlbFlPZmZzZXQo
eW9mZnNldCwgaGVpZ2h0LCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwogCiAgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNl
TGV2ZWwobGV2ZWwpOwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0
LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgZGVzdFlPZmZzZXQsIGRlc3Qp
OworICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJj
ZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0
KTsKICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIwMTYsMTAgKzE3OTQsMTAgQEAgdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xz
aXplaSBsZXZlbHMsIAogICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7CiAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxm
b3JtYXQpOwogICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUo
Zm9ybWF0LCB0eXBlKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElzVGV4dHVyZUZv
cm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQU5HTEUpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgd2lkdGgsIGhlaWdo
dCwgcmVuZGVyVGFyZ2V0KTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJE
KGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgbUltbXV0YWJs
ZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZl
bCsrKQpAQCAtMjA3NCw4ICsxODUyLDggQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBs
ZXRlKCkgY29ucwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBp
ZiAoKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3Vw
cG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpKSkKKyAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0ZM
T0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKSB8fAor
ICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdl
dENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFS
RVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAg
IHsKQEAgLTIxNTcsOSArMTkzNSwxNCBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dHVyZTJEOjppc0NvbXBy
ZXNzZWQoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVs
KSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewot
ICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgcmV0dXJu
IElzRGVwdGhUZXh0dXJlKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7CiB9CiAKIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqVGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTcz
LDExICsxOTU2LDExIEBAIHZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKICAgICBHTHNp
emVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKICAgICBHTHNpemVpIGhlaWdo
dCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwogICAgIEdMaW50IGxldmVscyA9IGNyZWF0
aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1hZ2VB
cnJheVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICBjb25zdCBib29sIHJlbmRlclRhcmdldCA9IElz
VGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZm9ybWF0KSAmJiAobVVzYWdlID09IEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUpOworICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJh
eVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2Fn
ZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwogCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAg
IG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwogICAgIAog
ICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewpAQCAtMjIxNyw5ICsyMDAw
LDEwIEBAIHZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQogICAgICAgICBH
THNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xzaXpl
aSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKICAgICAgICAgR0xpbnQgbGV2
ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIEQzREZPUk1BVCBm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFU
IGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBk
M2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQU5HTEUsIHRydWUpOwogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2UyRChsZXZlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7CisgICAgICAgIG5l
d1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNh
Z2UsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQog
ICAgICAgICB7CkBAIC0yMjMyLDggKzIwMTYsOCBAQCB2b2lkIFRleHR1cmUyRDo6Y29udmVydFRv
UmVuZGVyVGFyZ2V0KCkKICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChk
ZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCiAgICAgICAgICAgICAgICAg
eyAgIAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAg
ICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgIGRlc3QtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAg
ICAgICB9CiAKQEAgLTIzMTUsMTIgKzIwOTksMTQgQEAgUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6
OmdldFJlbmRlcmJ1ZmZlcgogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAg
ICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwg
bmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKHRoaXMsIHRhcmdldCkpOwogICAgIH0KIAogICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94
eTsKIH0KIAorLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgorLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKIHsKICAgICBBU1NFUlQodGFy
Z2V0ID09IEdMX1RFWFRVUkVfMkQpOwpAQCAtMjMzMyw2ICsyMTE5LDMzIEBAIElEaXJlY3QzRFN1
cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclQKIAogICAgIHVwZGF0ZVRleHR1cmUoKTsKICAg
ICAKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlz
RGVwdGgoMCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJu
IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Cit9CisKKy8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KKy8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQorSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdM
ZW51bSB0YXJnZXQpCit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKwor
ICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAo
Z2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorCisgICAgdXBkYXRlVGV4dHVyZSgpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0
dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKDApKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFj
ZUxldmVsKDApOwogfQogCkBAIC0yMzUzLDE4ICsyMTY2LDIyIEBAIFRleHR1cmVTdG9yYWdlICpU
ZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm8KICAgICByZXR1cm4gbVRleFN0b3JhZ2U7CiB9CiAKLVRl
eHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQz
REZPUk1BVCBmb3JtYXQsIGludCBzaXplLCBib29sIHJlbmRlclRhcmdldCkKLSAgICA6IFRleHR1
cmVTdG9yYWdlKHJlbmRlclRhcmdldCksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkpCitUZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09S
RCB1c2FnZSwgaW50IHNpemUpCisgICAgOiBUZXh0dXJlU3RvcmFnZSh1c2FnZSksIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkp
CiB7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KICAgICBt
VGV4dHVyZSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVU
ZXh0dXJlKHNpemUsIGxldmVscywgaXNSZW5kZXJUYXJnZXQoKSA/IEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCA6IDAsIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIC8vIGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlz
IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhh
bmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAg
aWYgKHNpemUgPiAwKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVU
ZXh0dXJlKHNpemUsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4
dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMzc2LDYgKzIxOTMsOCBAQCBUZXh0dXJl
U3RvcmFnZUN1YmVNYXA6On5UZXh0dXJlU3RvcmFnZUN1CiAgICAgfQogfQogCisvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6
OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7CiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwpAQCAtMjQ1NCwzNSArMjI3MywzNiBA
QCBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdM
X1RFWFRVUkVfQ1VCRV9NQVA7CiB9CiAKLUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRo
KEdMaW50IGxldmVsKSBjb25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlb
MF1bbGV2ZWxdLmdldFdpZHRoKCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KIAotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdAorR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdW2xldmVsXS5nZXRI
ZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVts
ZXZlbF0uZ2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotR0xl
bnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpOwotfQotCi1HTGVudW0gVGV4dHVyZUN1
YmVNYXA6OmdldFR5cGUoKSBjb25zdAorR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5h
bEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gR0xfTk9ORTsKIH0KIAotRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQo
KSBjb25zdAorRDNERk9STUFUIFRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOworICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQp
XVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRDNERk1U
X1VOS05PV047CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKQEAgLTI1
ODIsOCArMjQwMiw4IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3Jt
YXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJG
aWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KCkgPT0gR0xfSEFMRl9GTE9B
VF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQor
ICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJG
aWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+
c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQogICAgIHsKICAgICAgICAgaWYgKG1NYWdG
aWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKQEAgLTI2Nzks
OSArMjQ5OSw5IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKCkg
Y29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFs
Rm9ybWF0KCkpOworICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCkpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFw
OjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yNjk0LDExICsyNTE0LDExIEBAIHZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7CiAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZl
bHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEQzREZvcm1hdCgpOwotICAgIGNvbnN0IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTkdMRSk7CisgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEQzREZvcm1hdCgpOworICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgbVVzYWdlLCBmYWxzZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCBy
ZW5kZXJUYXJnZXQpOworICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1h
cChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkKICAgICB7CkBAIC0yNzQyLDkgKzI1NjIsMTAgQEAgdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZwogICAgIHsKICAgICAgICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKICAgICAgICAgR0xpbnQgbGV2ZWxzID0g
Y3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKKyAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOworICAgICAgICBEV09SRCBkM2R1c2Fn
ZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5H
TEUsIHRydWUpOwogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKGxldmVscywgZm9ybWF0LCBzaXplLCB0cnVlKTsKKyAgICAgICAgbmV3VGV4U3RvcmFn
ZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBz
aXplKTsKIAogICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKICAgICAgICAgewpAQCAt
Mjc1OSw4ICsyNTgwLDggQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFy
ZwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0LCBzb3Vy
Y2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICBkZXN0
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFz
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjg0NywxOSArMjY2OCwxNyBAQCB2b2lk
IFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhCiAKICAgICAgICAgaWYgKHdpZHRo
ID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgUkVD
VCBzb3VyY2VSZWN0ID0gdHJhbnNmb3JtUGl4ZWxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgc291cmNl
UmVjdC5sZWZ0ID0gY2xhbXAoc291cmNlUmVjdC5sZWZ0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSBjbGFtcChz
b3VyY2VSZWN0LnRvcCwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7
Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gY2xhbXAoc291cmNlUmVjdC5yaWdodCwg
MCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0gY2xhbXAoc291cmNlUmVjdC5ib3R0b20sIDAsIHNvdXJjZS0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBHTGludCBkZXN0WU9m
ZnNldCA9IHRyYW5zZm9ybVBpeGVsWU9mZnNldCgwLCBoZWlnaHQsIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLmdldFdpZHRoKCkpOworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Owor
ICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
cmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CiAKICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRh
cmdldCwgbGV2ZWwpOwogCiAgICAgICAgICAgICBpZiAoZGVzdCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0
LCBmb3JtYXQsIDAsIGRlc3RZT2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3Qp
OwogICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMjkwMywxOSArMjcyMiwxNyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3Vi
SW1hZ2UoR0xlbnVtCiAKICAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3QgPSB0cmFuc2Zvcm1QaXhlbFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7
Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBjbGFtcChzb3VyY2VSZWN0LmxlZnQsIDAs
IHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IGNsYW1wKHNvdXJjZVJlY3QudG9wLCAwLCBzb3VyY2UtPmdldENvbG9yYnVm
ZmVyKCktPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBjbGFt
cChzb3VyY2VSZWN0LnJpZ2h0LCAwLCBzb3VyY2UtPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRo
KCkpOwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBjbGFtcChzb3VyY2VSZWN0LmJv
dHRvbSwgMCwgc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSk7Ci0KLSAgICAg
ICAgICAgIEdMaW50IGRlc3RZT2Zmc2V0ID0gdHJhbnNmb3JtUGl4ZWxZT2Zmc2V0KHlvZmZzZXQs
IGhlaWdodCwgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uZ2V0V2lkdGgoKSk7CisgICAg
ICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSAr
IGhlaWdodDsKIAogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7CiAKICAgICAgICAgICAgIGlm
IChkZXN0KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29w
eShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgp
LCB4b2Zmc2V0LCBkZXN0WU9mZnNldCwgZGVzdCk7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRl
cigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZ2V0
Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwogICAgICAgICAgICAgICAgIGRlc3Qt
PlJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjkyOSwxMCArMjc0Niwx
MCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2CiAgICAgR0xlbnVt
IGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICBHTGVudW0g
dHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7CiAgICAgRDNERk9STUFUIGQz
ZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIGNvbnN0
IGJvb2wgcmVuZGVyVGFyZ2V0ID0gSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYm
IChtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisgICAgRFdPUkQg
ZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKIAogICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFn
ZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIHNpemUsIHJlbmRlclRhcmdldCk7CisgICAgbVRleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgc2l6ZSk7CiAgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQpAQCAtMzA0OSwxMiArMjg2NiwxNCBAQCBSZW5k
ZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJiCiAKICAgICBpZiAobUZhY2VQcm94
aWVzW2ZhY2VdID09IE5VTEwpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBu
ZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlKHRoaXMsIHRhcmdl
dCkpOworICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCks
IG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwogfQogCisvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCisvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpCiB7CiAgICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFy
Z2V0KSk7CkBAIC0zMDg3LDQgKzI5MDYsNCBAQCBUZXh0dXJlU3RvcmFnZSAqVGV4dHVyZUN1YmVN
YXA6OmdldFN0b3JhCiAgICAgcmV0dXJuIG1UZXhTdG9yYWdlOwogfQogCi19ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw5ICs1Myw2IEBAIGNsYXNzIEltYWdlCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0g
dHJ1ZTt9CiAgICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQogCi0gICAgSFJF
U1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsK
LSAgICB2b2lkIHVubG9jaygpOwotCiAgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25z
dDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAKQEAgLTcwLDU2ICs2Nyw1
MiBAQCBjbGFzcyBJbWFnZQogICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBz
dGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAg
dm9pZCBsb2FkQWxwaGFEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7Ci0gICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQWxw
aGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEFscGhhRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVt
aW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxv
YXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29s
IG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
IHZvaWQgbG9hZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCNTY1RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCRmxvYXREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkUkdCQVVCeXRl
RGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAg
IHZvaWQgbG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQUZsb2F0RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKKyAgICB2b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBs
b2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkQkdSQURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgdm9pZCBsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAg
ICAgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUMURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRFhUM0RhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBs
b2FkRFhUNURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCiAgICAg
dm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0KTsKIApAQCAtMTI4LDYgKzEyMSw5IEBAIGNsYXNzIEltYWdlCiAKICAgICB2b2lkIGNy
ZWF0ZVN1cmZhY2UoKTsKIAorICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2Vk
UmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CisgICAgdm9pZCB1bmxvY2soKTsKKwogICAgIEdMc2l6
ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKICAgICBHTGVudW0gbUZvcm1hdDsKQEAg
LTE0NCwyMCArMTQwLDIxIEBAIGNsYXNzIEltYWdlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZQogewog
ICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKIAogICAgIHZpcnR1
YWwgflRleHR1cmVTdG9yYWdlKCk7CiAKICAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7
CiAgICAgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25z
dDsKKyAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0
dXJlU2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAogICBwcml2YXRlOgogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZSk7CiAKLSAgICBjb25zdCBib29s
IG1SZW5kZXJUYXJnZXQ7CisgICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwogICAgIGNvbnN0IEQz
RFBPT0wgbUQzRFBvb2w7CiAKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7
CkBAIC0xOTAsMTQgKzE4Nyw3IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKICAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9S
TUFUIGdldEQzREZvcm1hdCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBs
ZXJDb21wbGV0ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkg
Y29uc3QgPSAwOwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAg
ICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9
IDA7CkBAIC0yMTYsOCArMjA2LDYgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAogICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3Rh
dGljX2Nhc3Q8R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBj
cmVhdGlvbiB0aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIg
cmVnaXN0ZXJlZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTsKLQogICAgIHZvaWQgc2V0SW1hZ2Uo
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7
CiAgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwogICAg
IHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMsIEltYWdlICppbWFnZSk7CkBAIC0yNTgsNyArMjQ2LDcgQEAgY2xhc3MgVGV4dHVyZVN0
b3JhZ2UyRCA6IHB1YmxpYyBUZXh0dXJlUwogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGV4
dHVyZVN0b3JhZ2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRl
eHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBib29sIHJlbmRlclRhcmdldCk7CisgICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMkQoKTsKIApAQCAtMjg2LDExICsy
NzQsMTIgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwg
R0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50
IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBE
M0RGT1JNQVQgZ2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29t
cHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZElt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0zMDEsNyAr
MjkwLDYgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2b2lkIHN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKQEAgLTMwOSw2ICsyOTcsMTEgQEAgY2xhc3MgVGV4
dHVyZTJEIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgSURpcmVjdDNE
U3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsKKwogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCkBAIC0zMTYsNyArMzA5
LDYgQEAgY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAg
dmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFs
IFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJv
b2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OwpAQCAtMzQxLDcgKzMzMyw3IEBAIGNsYXNzIFRl
eHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBpbnQgc2l6ZSwgYm9vbCByZW5kZXJU
YXJnZXQpOworICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQg
Zm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKCk7CiAKQEAgLTM2OSwxMSArMzYxLDExIEBAIGNsYXNzIFRleHR1cmVDdWJl
TWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNv
bnN0OwogICAgIAotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9y
bWF0KCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwog
ICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKQEAgLTM5MSw3ICszODMsNiBAQCBjbGFzcyBUZXh0dXJl
Q3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVz
c2VkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKQEAg
LTM5OSw2ICszOTAsMTAgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQog
CiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwogCisgIHBy
b3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7Cisg
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVD
dWJlTWFwKTsKIApAQCAtNDA2LDcgKzQwMSw2IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVi
bGljIFRleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdl
KGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3ZlcnRleGNvbnZlcnNpb24uaCIKQEAgLTEyOCwxMCArMTI5LDExIEBAIEdM
ZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKIAogICAgIGNvbnN0IFZlcnRl
eEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMo
KTsKICAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7
CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1C
aW5hcnkoKTsKIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAg
ICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbS0+Z2V0U2VtYW50
aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICB0cmFuc2xhdGVkW2F0dHJp
YnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRy
aWJ1dGVJbmRleCkgIT0gLTEpOwogICAgIH0KIAogICAgIC8vIERldGVybWluZSB0aGUgcmVxdWly
ZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1
ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKQEAgLTQ0OCw4ICs0
NTAsOCBAQCBzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtCiB0ZW1wbGF0
ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUs
IEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBl
Pjo6dHlwZT4geyB9OwogCiAvLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNv
IHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3Jt
YWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8
R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAx
Nj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxz
ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRU
b0Zsb2F0PEdMaW50LCAxNj4geyB9OwogCiAvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVz
ZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVE
ZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKIC8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBu
b3QuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgpAQCAtNTQsMjYgKzU1LDEyMSBAQCBib29sIHZhbGlkSW1hZ2VTaXpl
KEdMaW50IGxldmVsLCBHTHNpemVpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBmb3JtYXQsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQorLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIC8v
IHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93
KQorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQ
SEE6CisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICBjYXNlIEdMX0RFUFRI
X1NURU5DSUxfT0VTOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBpbnZh
bGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQorICAgIC8vIGludmFsaWQgPGZvcm1hdD4r
PHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgICAgICB9CisKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNl
KTsKKyAgICB9Cit9Citib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNz
ZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChjb21wcmVz
c2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgIGlmIChjb21wcmVzc2VkICE9IHRl
eHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0ICE9
IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KCkpCisgICAg
aWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoY29tcHJlc3NlZCkKICAgICB7Ci0gICAg
ICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkp
IHx8IAorICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdl
dFdpZHRoKDApKSB8fAogICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0g
dGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CkBAIC04OSw2ICsxODUsNDMgQEAgYm9v
bCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGJvb2wgY29tcHJlcwogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOworICAgIH0KKworICAg
IGlmIChjb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3
aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAorICAgICAgICAgICAgKGhl
aWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGgg
PiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAorICAgICAgICB5b2Zmc2V0ICsg
aGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5k
IHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKIGJvb2wgdmFsaWRSZWFkRm9ybWF0
VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTEwOTQsNyArMTIyNyw3IEBA
IHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQKICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1ZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwg
eG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBk
YXRhKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTAyLDcgKzEyMzUsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJECiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXModHJ1
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIHRleHR1
cmUpKQorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVl
LCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQs
IHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMjU4LDYgKzEzOTEsMTkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChH
TGVudW0gdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpA
QCAtMTM1NSwyMyArMTUwMSwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJE
KEdMZW51CiAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1h
dCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gR0xf
UkdCQTsKIAogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05F
LCB0ZXgyZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+
Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOworICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgy
ZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4dHVyZSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFs
aWRhdGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFn
ZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdl
dCwgbGV2ZWwsIEdMX05PTkUsIHRleGN1YmUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRh
dGVTdWJJbWFnZVBhcmFtcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0
dXJlRm9ybWF0ID0gdGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7CiAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KTsKKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgICAgICAgICAgLy8gW09w
ZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQogICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9y
bWF0KQpAQCAtMTQxNCw2ICsxNTY4LDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1h
Z2UyRChHTGVudQogICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEU6CiAgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CkBAIC0yMzA2LDE5ICsyNDYzLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0wKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4
LT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkg
IT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CkBAIC0yMzI2LDExICsyNDg1LDE4IEBAIHZvaWQgX19zdGRjYWxs
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0
VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RF
WFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0
YXJnZXQsIGxldmVsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwpAQCAtMjQ0MCwyOCArMjYwNiw0MSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdl
bmVyYXRlTWlwbWFwKEdMZW51bSB0CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCiAgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRl
TWlwbWFwcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAg
ICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0
ZU1pcG1hcHMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0
dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yNzU5LDEyICsyOTM4LDEzIEBAIGludCBfX3N0ZGNh
bGwgZ2xHZXRBdHRyaWJMb2NhdGlvbihHTHVpbnQKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgLTEpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3Jh
bU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgICAgICByZXR1cm4g
cHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMzIxOCw3ICszMzk4LDcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHBybwogICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKTsKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5V
TEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElE
QVRFX1NUQVRVUzoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNW
YWxpZGF0ZWQoKTsKQEAgLTMyNDEsNiArMzQyMSw5IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJv
Z3JhbWl2KEdMdWludCBwcm8KICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9N
QVhfTEVOR1RIOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRB
Y3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtMzc2NiwxMiArMzk0OSwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdl
dG5Vbmlmb3JtZnZFWFQoR0x1aW50CiAKICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6
ZSwgcGFyYW1zKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1z
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzgwMCwxMiArMzk4OSwxOCBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQgcHJvCiAKICAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxv
Y2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIE5VTEws
IHBhcmFtcykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NDAsMTcgKzQwMzUsMTgg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludAogCiAgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdl
dFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTM4NzksMTcgKzQwNzUsMTggQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHBybwogCiAgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC0zOTMwLDEyICs0MTI3LDEzIEBAIGludCBfX3N0ZGNhbGwgZ2xHZXRVbmlm
b3JtTG9jYXRpb24oR0x1aW4KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnkt
PmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCkBAIC01MDEyLDYgKzUyMTAsMjYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBi
eSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKKyAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VT
OgorICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucworICAgICAgICAvLyAtIGlu
dmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KKyAgICAgICAgLy8gLSBpbnZhbGlk
IDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCiAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9BTFBI
QToKQEAgLTUwMjQsNyArNTI0Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVu
dW0gdGFyZ2UKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CkBAIC01MDM2LDcgKzUyNTQsNyBAQCB2b2lkIF9f
c3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2UgR0xf
SEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgR0xfUkdCQToKQEAg
LTUwNDksNyArNTI2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2UKICAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKQEAgLTUwNTgsNyArNTI3Niw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJl
cyBhcmUgaGFuZGxlZCBiZWxvdwpAQCAtNTA2Niw4ICs1Mjg0LDI3IEBAIHZvaWQgX19zdGRjYWxs
IGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfQU5HTEU6CiAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFOgogICAgICAgICAgICAgYnJlYWs7IAorICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChib3JkZXIgIT0gMCkKQEAg
LTUxNDYsNiArNTM4MywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRh
cmdlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RF
TkNJTF9PRVM6CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9y
dHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCisgICAgICAgICAgICAg
ICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBp
ZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTQxNiw2ICs1
NjcwLDI1IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMy
X09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVs
IHRleHR1cmVzCisgICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKQEAgLTU0ODQsMTQgKzU3
NTcsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIWdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5V
TEwpCisgICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm47IC8vIGVy
cm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KICAgICAgICAgfQogCiAgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CkBAIC01NTE3LDExICs1
Nzg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhU
ZXh0dXJlKGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBPRVNf
ZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0
aF90ZXh0dXJlIGRvZXMgbm90CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID09
IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGFy
Z2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0Fs
aWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1MjksNyArNTgxNSw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAg
IGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtcyhmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWws
IGZvcm1hdCwgdGV4dHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQs
IGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CkBAIC01NTc4LDcgKzU4NjQsMTMgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KQEAgLTU2MjIsNyArNTkxNCwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRV
bmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTY2OCw3ICs1OTY2LDEzIEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CkBAIC01NzE0LDcgKzYwMTgsMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2
KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBj
b3VudCwgdikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU3NjAsNyArNjA3MCwxMyBA
QCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwg
dikpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtNTgwNiw3ICs2MTIyLDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNp
dihHTGludCBsb2NhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC01ODUyLDcgKzYxNzQsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQs
IHYpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KQEAgLTU4OTgsNyArNjIyNiwxMyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24s
IGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNTkzOCw3ICs2MjcyLDEz
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCAKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1
ZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTU5NzgsNyArNjMxOCwxMyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwg
dmFsdWUpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CkBAIC02MDE4LDcgKzYzNjQsMTMgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IAogICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQpAQCAtNjA1NCw3ICs2NDA2LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQ
cm9ncmFtKEdMdWludCBwcm9ncgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtNjQ2Myw2ICs2ODE1
LDc5IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGEKICAgICB9CiB9
CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3RoID0g
MHglMC44cCwgYmluYXJ5Rm9ybWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAorICAg
ICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICpiaW5hcnlGb3JtYXQgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKKworICAgICAgICAg
ICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gcHJvZ3JhbSA9IDB4JVgsIGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAuOHAs
IGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnks
IGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5BUllf
QU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBj
aGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC02NDk5LDcgKzY5MjQs
OCBAQCBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlCiAgICAgICAgIHsi
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCiAgICAgICAgIHsiZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgIH07CisgICAgICAg
IHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbFByb2dyYW1C
aW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFBy
b2dyYW1CaW5hcnlPRVN9LCAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6
ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCiAgICAgewpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLnZjcHJvagkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDEs
NiArNDAxLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTQ5MSw2
ICs0OTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxQcm9ncmFtQmluYXJ5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lv
biAxMjI3MzgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1
dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDI2ICs3MCw2IEBAIGlubGluZSB1bnNpZ25lZCBp
bnQgdW5vcm0oZmxvYXQgeCkKICAgICB9CiB9CiAKLWlubGluZSBSRUNUIHRyYW5zZm9ybVBpeGVs
UmVjdChHTGludCB4LCBHTGludCB5LCBHTGludCB3LCBHTGludCBoLCBHTGludCBzdXJmYWNlSGVp
Z2h0KQotewotICAgIFJFQ1QgcmVjdCA9IHt4LAotICAgICAgICAgICAgICAgICBzdXJmYWNlSGVp
Z2h0IC0geSAtIGgsCi0gICAgICAgICAgICAgICAgIHggKyB3LAotICAgICAgICAgICAgICAgICBz
dXJmYWNlSGVpZ2h0IC0geX07Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBpbnQgdHJh
bnNmb3JtUGl4ZWxZT2Zmc2V0KEdMaW50IHlvZmZzZXQsIEdMaW50IGgsIEdMaW50IHN1cmZhY2VI
ZWlnaHQpCi17Ci0gICAgcmV0dXJuIHN1cmZhY2VIZWlnaHQgLSB5b2Zmc2V0IC0gaDsKLX0KLQot
aW5saW5lIEdMZW51bSBhZGp1c3RXaW5kaW5nKEdMZW51bSB3aW5kaW5nKQotewotICAgIEFTU0VS
VCh3aW5kaW5nID09IEdMX0NXIHx8IHdpbmRpbmcgPT0gR0xfQ0NXKTsKLSAgICByZXR1cm4gd2lu
ZGluZyA9PSBHTF9DVyA/IEdMX0NDVyA6IEdMX0NXOwotfQotCiBpbmxpbmUgYm9vbCBzdXBwb3J0
c1NTRTIoKQogewogICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvdXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjc0LDYgKzI3NCwxNyBAQCBib29sIElz
Q29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBJc0RlcHRoVGV4dHVy
ZShHTGVudW0gZm9ybWF0KQoreworICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhfQ09NUE9ORU5U
IHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gUmV0
dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCiBp
bnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKQEAgLTI5
NCw3ICszMDUsMTEgQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbgog
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YodW5z
aWduZWQgc2hvcnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBp
bnQpOwogICAgICAgY2FzZSBHTF9GTE9BVDoKICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAg
ICAgIHsKQEAgLTMzMyw1MyArMzQ4LDYgQEAgYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChH
TGVudW0gdGFyZwogICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVt
YXBUZXh0dXJlVGFyZ2V0KHRhcmdldCk7CiB9CiAKLS8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBl
IGFyZSBvbmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KLWJvb2wgQ2hlY2tU
ZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
ICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAg
ICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0JBKTsKLQotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF81XzZfNToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLQotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogR0xlbnVtIEV4
dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCkBAIC00MDcsNiArMzc1LDkgQEAgR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVt
IGludGVybmFsZm9ybQogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOwogICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwogICAgICAgY2FzZSBH
TF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7Cisg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9E
RVBUSF9DT01QT05FTlQ7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAg
ICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOiAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKICAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05P
TkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9CiB9CkBAIC00MzgsNiArNDA5LDkgQEAgR0xlbnVt
IEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdAogICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7CiAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxG
X0ZMT0FUX09FUzsKICAgICAgIGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVDsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lO
VDsKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJu
IEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzsKICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKICAgICB9
CiB9CkBAIC02MzgsOSArNjEyLDYgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2Uo
R0xlbnVtIAogewogICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9Q
T1NJVElWRV9YOwogCi0gICAgLy8gTWFwIGEgY3ViZSBtYXAgdGV4dHVyZSB0YXJnZXQgdG8gdGhl
IGNvcnJlc3BvbmRpbmcgIEQzRCBzdXJmYWNlIGluZGV4LiBOb3RlIHRoYXQgdGhlCi0gICAgLy8g
WSBmYWNlcyBhcmUgc3dhcHBlZCBiZWNhdXNlIHRoZSBZIGNvb3JkaW5hdGUgdG8gdGhlIHRleHR1
cmUgbG9va3VwIGludHJpbnNpYyBmdW5jdGlvbnMKLSAgICAvLyBhcmUgbmVnYXRlZCBpbiB0aGUg
cGl4ZWwgc2hhZGVyLgogICAgIHN3aXRjaCAoY3ViZUZhY2UpCiAgICAgewogICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CkBAIC02NTAsMTAgKzYyMSwxMCBAQCBEM0RD
VUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gCiAgICAgICAgIGZhY2UgPSBEM0RD
VUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFD
RV9ORUdBVElWRV9ZOworICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWTsKKyAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOwogICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7CkBAIC03NjcsNiArNzM4LDcgQEAgRDNERk9STUFUIENv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbgogewogICAgIHN3aXRjaCAoZm9ybWF0KQogICAg
IHsKKyAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVM
TDsKICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICBj
YXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwpAQCAt
Nzk0LDYgKzc2NiwxMCBAQCBuYW1lc3BhY2UgZHgyZXMKIAogdW5zaWduZWQgaW50IEdldFN0ZW5j
aWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQogeworICAgIGlmIChzdGVuY2lsRm9ybWF0
ID09IEQzREZNVF9JTlRaKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQogICAgIHN3
aXRjaChzdGVuY2lsRm9ybWF0KQogICAgIHsKICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKQEAg
LTkwNCw2ICs4ODAsMTAgQEAgdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xv
cgogCiB1bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCkKIHsK
KyAgICBpZiAoZGVwdGhGb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1
cm4gMjQ7CisgICAgfQogICAgIHN3aXRjaCAoZGVwdGhGb3JtYXQpCiAgICAgewogICAgICAgY2Fz
ZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOiAgcmV0dXJuIDE2OwpAQCAtOTY1LDYgKzk0NSwxNiBAQCBi
b29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0
KQoreworICAgIHJldHVybiAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Cit9CisKK2Jv
b2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKK3sKKyAg
ICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOworfQorCiBHTHNpemVpIEdl
dFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKIHsK
ICAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKQEAgLTk5MSw2ICs5
ODEsMTAgQEAgR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVAogCiBHTGVu
dW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQogeworICAgIGlm
IChmb3JtYXQgPT0gRDNERk1UX0lOVFopCisgICAgeworICAgICAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7CisgICAgfQogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsKICAgICAg
IGNhc2UgRDNERk1UX0QxNjoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkocmV2aXNpb24gMTIyNzM4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTYsNiArMTYsOSBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCitjb25zdCBEM0RGT1JNQVQgRDNE
Rk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citj
b25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTics
J1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFjZSBnbAogewogCkBAIC0zNiw5ICszOSw5IEBAIEdM
c2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW4KIEdMc2l6ZWkgQ29tcHV0ZUNv
bXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKIEdMc2l6ZWkgQ29t
cHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0KTsKIGJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOworYm9vbCBJc0RlcHRo
VGV4dHVyZShHTGVudW0gZm9ybWF0KTsKIGJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKIGJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7
Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
OwogR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIEdMZW51bSBF
eHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwogCkBAIC03OSw2ICs4Miw4IEBAIEdM
dWludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWEKIEdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7CiBib29sIElzRmxvYXQzMkZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCk7CiBib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3Vy
ZmFjZUZvcm1hdCk7Citib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNl
Rm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZv
cm1hdCk7CiAKIEdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElT
QU1QTEVfVFlQRSB0eXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNzM5KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTItMDctMTYgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAg
IFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg5MDM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29u
IGFuZCBNYXJrIFJvd2UuCisKKyAgICAgICAgVXBkYXRlIEFOR0xFIHRvIHIxMTcwLCB3aXRoIHRo
ZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczoKKworICAgICAgICAoMSkgVXNlIEJpc29uIDIuMyBp
bnN0ZWFkIG9mIEJpc29uIDIuNC4yIHRvIGdlbmVyYXRlIEV4cHJlc3Npb25QYXJzZXIuY3BwIGFu
ZAorICAgICAgICBnbHNsYW5nX3RhYi5jcHAuIEkgaGFkIHRvIG1vZGlmeSBFeHByZXNzaW9uUGFy
c2VyLnkgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggQmlzb24KKyAgICAgICAgMi4zLiBUaGUg
Y2hhbmdlcyBoYXZlIGJlZW4gY29udHJpYnV0ZWQgYmFjayB0byBBTkdMRSBpbiByMTIyNC4KKwor
ICAgICAgICAoMikgQ29udGludWUgdG8gcmVjb2duaXplIFFOWCBhcyBQT1NJWCBpbiBBTkdMRS4g
VGhpcyBoYXMgYmVlbiBjb250cmlidXRlZCBiYWNrIHRvIEFOR0xFCisgICAgICAgIGluIHIxMjIz
LgorCisgICAgICAgICgzKSBSZW5hbWUgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpYy5jcHAgdG8gRGlhZ25vc3RpY0Jhc2UuY3BwLgorICAgICAgICBSZW5hbWUg
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5jcHAg
dG8gRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwLgorCisgICAgICAgIFdpdGggdGhlIGludHJvZHVj
dGlvbiBvZiBBTkdMRSdzIG5ldyBwcmVwcm9jZXNzb3IsIHRoZXJlIHdlcmUgdHdvIGZpbGVzIG5h
bWVkIERpYWdub3N0aWMuY3BwCisgICAgICAgIGluIEFOR0xFIHVuZGVyIGRpZmZlcmVudCBmb2xk
ZXJzLiBUaGlzIGNhdXNlZCBwcm9ibGVtcyBvbiB0aGUgUVQgYnVpbGQgd2hlbiB0aGVpciBvYmpl
Y3QKKyAgICAgICAgZmlsZXMsIGJvdGggbmFtZWQgRGlhZ25vc3RpYy5vLCB0cmllZCB0byBnbyBp
biB0aGUgc2FtZSBmb2xkZXIuIFJlbmFtaW5nIG9uZSBvZiB0aGVtIHRvCisgICAgICAgIERpYWdu
b3N0aWNCYXNlLmNwcCBhdm9pZHMgdGhpcyBjb25mbGljdC4gVGhlIHNhbWUgc2l0dWF0aW9uIG9j
Y3VycmVkIHdpdGgKKyAgICAgICAgRGlyZWN0aXZlSGFuZGxlci5jcHAuIEkgd2lsbCB3b3JrIG9u
IGNvbnRyaWJ1dGluZyB0aGlzIGNoYW5nZSBiYWNrIHRvIEFOR0xFIGZvciBmdXR1cmUKKyAgICAg
ICAgdXBkYXRlcy4KKworICAgICAgICAoNCkgQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gZ2xz
bGFuZy55IGFuZCBFeHByZXNzaW9uUGFyc2VyLnk6CisgICAgICAgICNkZWZpbmUgWVlFTkFCTEVf
TkxTIDAKKyAgICAgICAgI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorCisgICAgICAgIEJp
c29uIDIuMyBkb2Vzbid0IGZpcnN0IGNoZWNrIHRoYXQgdGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVk
IGJlZm9yZSByZWFkaW5nIHRoZWlyIHZhbHVlLAorICAgICAgICB3aGljaCBjYXVzZXMgdGhlIFFU
IGJ1aWxkIHRvIGZhaWwuCisKKyAgICAgICAgV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZSBpbiB0
aGUgc2FtZSB3YXkgaW4gQ1NTR3JhbW1hci55LgorCisgICAgICAgIEkgd2lsbCB3b3JrIG9uIGNv
bnRyaWJ1dGluZyB0aGlzIGNoYW5nZSBiYWNrIHRvIEFOR0xFLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
CiAyMDEyLTA3LTE2ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBmaXggb3V0cHV0
IHdyaXRlIGxvZ2ljIHRvIHN1cHBvcnQgaW5jcmVtZW50YWwgYnVpbGQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMjI3MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjMyNCw3ICsyMzI0LDIwIEBAIElGIChFTkFCTEVfV0VC
R0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCisgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5k
ZW5jeUdyYXBoQnVpbGRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhP
dXRwdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9EZXRlY3REaXNjb250aW51aXR5
LmgKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJl
Y3Vyc2lvbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L0Zvckxvb3BVbnJvbGwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTIzMzIsNiArMjM0NSw3IEBAIElGIChFTkFCTEVf
V0VCR0wpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9JbmZv
U2luay5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcApAQCAt
MjM0NCwyMiArMjM1OCw1MiBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAorICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUHJhZ21hLmgKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYwogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcHN0cnVjdC5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaWFnbm9zdGljcy5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9EaXJlY3RpdmVIYW5kbGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBh
bmRlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmgKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc3ltYm9scy5jCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgKICAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3Bw
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWlu
Zy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1p
bmcuaAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5n
L1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9ySExTTC5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Zhcmlh
YmxlSW5mby5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24g
MTIyNzM4KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtNTkxNyw4ICs1OTE3LDIxIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGhCdWlsZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdERpc2NvbnRpbnVpdHkuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0RGlzY29udGludWl0eS5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmNwcCBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFu
ZGxlci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9u
QmVoYXZpb3IuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Zvckxv
b3BVbnJvbGwuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRm9y
TG9vcFVucm9sbC5oIFwKQEAgLTU5MzEsNiArNTk0NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VD
b250ZXh0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybWVkaWF0ZS5jcHAgXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9pbnRlcm1lZGlhdGUuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybU91dC5jcHAgXApAQCAtNTk1NCw2ICs1OTY4LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKIAlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGls
ZS5oIFwKQEAgLTU5NjMsNiArNTk3OCwyOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0
cy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5jIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L01hY3JvLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKIAlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMg
XApAQCAtNTk3Niw2ICs2MDE0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwIFwKIAlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIFwKQEAgLTU5ODQsNiArNjAy
MywxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TeW1ib2xUYWJsZS5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvVmVyc2lvbkdMU0wuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAg
XAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5o
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
Y3BwIFwKQEAgLTU5OTEsOCArNjAzNCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5oIFwK
IAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAgXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmggXAogCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkJKHJldmlzaW9uIDEyMjczOCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMDIsNyArNDAwMiwxMyBAQCBjb250YWlucyhERUZJTkVTLCBX
VEZfVVNFXzNEX0dSQVBISUNTPTEpCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9D
b21tb24uaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9u
LmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVidWcuaCBcCisgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCBcCisg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhC
dWlsZGVyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
RGV0ZWN0RGlzY29udGludWl0eS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0RldGVjdFJlY3Vyc2lvbi5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0Rp
YWdub3N0aWNzLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJl
aGF2aW9yLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvRm9yTG9vcFVucm9s
bC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCkBAIC00
MDE3LDExICs0MDIzLDI0IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9
MSkKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL01NYXAuaCBcCiAgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oIFwKKyAgICAgICAgJCRBTkdMRV9E
SVIvc3JjL2NvbXBpbGVyL1ByYWdtYS5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAorICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKKyAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5o
IFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlUGFyc2VyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaCBcCisgICAgICAgICQkQU5HTEVf
RElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAorICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAor
ICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuaCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmggXAogICAgICAgICAkJEFOR0xF
X0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBcCkBAIC00MDM2LDE0ICs0
MDU1LDE3IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAg
ICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oIFwKICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2Nv
bXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvU2VhcmNoU3ltYm9sLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvU2hI
YW5kbGUuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5o
IFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmggXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvdGlt
aW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9j
b21waWxlci9UcmFuc2xhdG9yR0xTTC5oIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JITFNMLmggXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIv
VHlwZXMuaCBcCi0gICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
aCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQu
aCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmggXAogICAgICAgICAk
JEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIFwKICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKQEAgLTQwNTYsMTMgKzQw
NzgsMjEgQEAgY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKQogICAgICAg
ICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICAgICAgJCRB
TkdMRV9ESVIvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElS
L3NyYy9jb21waWxlci9kZWJ1Zy5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3Ny
Yy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBcCisgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9E
ZXRlY3REaXNjb250aW51aXR5LmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxl
ci9EZXRlY3RSZWN1cnNpb24uY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVy
L0RpYWdub3N0aWNzLmNwcCBcCisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Gb3JM
b29wVW5yb2xsLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9nbHNsYW5n
X2xleC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIu
Y3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcCBcCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcCBcCisgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBcIAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwIFwKICAgICAgICAgJCRBTkdM
RV9ESVIvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcCBcCkBAIC00MDgwLDEwICs0MTEw
LDEyIEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkKICAgICAgICAg
JCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAgXAogICAgICAgICAkJEFO
R0xFX0RJUi9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwIFwKKyAgICAgICAgJCRBTkdMRV9ESVIvc3Jj
L2NvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBcCisgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJU
aW1pbmcuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmNwcCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5jcHAgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
Y3BwIFwKLSAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNw
cCBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci91dGlsLmNwcCBcCiAgICAgICAg
ICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAg
ICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKQEAgLTQwOTQs
NiArNDEyNiwxNyBAQCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEpCiAg
ICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAogICAg
ICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
ICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYyBc
CisgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdu
b3N0aWNzQmFzZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJ
Ui9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKyAg
ICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCisgICAgICAgICQk
QU5HTEVfRElSL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAg
XAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAgXAorICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuY3BwIFwKICAgICAgICAgJCRBTkdMRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmMgXAogICAgICAgICAkJEFOR0xFX0RJUi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuYyBcCiAgICAgICAgICQkQU5HTEVfRElSL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmMK
</data>
<flag name="commit-queue"
          id="161549"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>